aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Thompson <daniel.thompson@linaro.org>2017-07-31 17:23:07 +0100
committerDaniel Thompson <daniel.thompson@linaro.org>2017-07-31 17:23:07 +0100
commite5b9b8c8b78096e961f4a45b9d1418e4641f24f9 (patch)
treea88f532f386376fca6a376e2c362173f971dc144
parent415d386877df49eb051b85ef74fa59a16dc17c7d (diff)
Orangepi i96 support (mega patch)rda/v2012.04.01-r0
This is https://github.com/orangepi-xunlong/OrangePiRDA_u-boot 5ee06c1afb7c ("add new patch a patch") as a single patch against a guestimated upstream version. This is merely a reference tree for later comparisons. Signed-off-by: Daniel Thompson <daniel.thompson@linaro.org> NOT-Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org>
-rw-r--r--.checkpatch.conf14
-rw-r--r--.gitignore79
-rw-r--r--CleanSpec.mk49
-rw-r--r--MAINTAINERS25
-rw-r--r--[-rwxr-xr-x]MAKEALL174
-rw-r--r--Makefile112
-rw-r--r--README51
-rw-r--r--android/Makefile48
-rw-r--r--android/android_boot.c50
-rw-r--r--arch/.gitignore2
-rw-r--r--arch/arm/config.mk48
-rw-r--r--arch/arm/cpu/arm926ejs/config.mk6
-rw-r--r--arch/arm/cpu/arm926ejs/lpc32xx/Makefile45
-rw-r--r--arch/arm/cpu/arm926ejs/lpc32xx/clk.c117
-rw-r--r--arch/arm/cpu/arm926ejs/lpc32xx/cpu.c70
-rw-r--r--arch/arm/cpu/arm926ejs/lpc32xx/devices.c52
-rw-r--r--arch/arm/cpu/arm926ejs/lpc32xx/timer.c95
-rw-r--r--arch/arm/cpu/arm926ejs/mx25/generic.c27
-rw-r--r--arch/arm/cpu/arm926ejs/mx28/Makefile2
-rw-r--r--arch/arm/cpu/arm926ejs/mx28/mx28.c29
-rw-r--r--arch/arm/cpu/arm926ejs/mx28/mx28_init.h4
-rw-r--r--arch/arm/cpu/arm926ejs/mx28/spl_boot.c57
-rw-r--r--arch/arm/cpu/arm926ejs/mx28/spl_lradc_init.c86
-rw-r--r--arch/arm/cpu/arm926ejs/mx28/spl_mem_init.c14
-rw-r--r--arch/arm/cpu/arm926ejs/mx28/spl_power_init.c224
-rw-r--r--arch/arm/cpu/arm926ejs/rda/Makefile58
-rw-r--r--arch/arm/cpu/arm926ejs/rda/config.mk32
-rw-r--r--arch/arm/cpu/arm926ejs/rda/cpu.c12
-rw-r--r--arch/arm/cpu/arm926ejs/rda/ifc.c171
-rw-r--r--arch/arm/cpu/arm926ejs/rda/reset.S32
-rw-r--r--arch/arm/cpu/arm926ejs/rda/serial.c132
-rw-r--r--arch/arm/cpu/arm926ejs/rda/spl.c74
-rw-r--r--arch/arm/cpu/arm926ejs/rda/timer.c93
-rw-r--r--arch/arm/cpu/armv7/am33xx/board.c2
-rw-r--r--arch/arm/cpu/armv7/config.mk7
-rw-r--r--arch/arm/cpu/armv7/exynos/Makefile2
-rw-r--r--arch/arm/cpu/armv7/exynos/clock.c184
-rw-r--r--arch/arm/cpu/armv7/exynos/power.c54
-rw-r--r--arch/arm/cpu/armv7/exynos/system.c48
-rw-r--r--arch/arm/cpu/armv7/imx-common/cpu.c15
-rw-r--r--arch/arm/cpu/armv7/mx5/clock.c493
-rw-r--r--arch/arm/cpu/armv7/mx5/lowlevel_init.S5
-rw-r--r--arch/arm/cpu/armv7/mx6/clock.c50
-rw-r--r--arch/arm/cpu/armv7/mx6/lowlevel_init.S5
-rw-r--r--arch/arm/cpu/armv7/mx6/soc.c30
-rw-r--r--arch/arm/cpu/armv7/omap-common/Makefile1
-rw-r--r--arch/arm/cpu/armv7/omap-common/clocks-common.c99
-rw-r--r--arch/arm/cpu/armv7/omap-common/emif-common.c41
-rw-r--r--arch/arm/cpu/armv7/omap-common/hwinit-common.c16
-rw-r--r--arch/arm/cpu/armv7/omap-common/lowlevel_init.S14
-rw-r--r--arch/arm/cpu/armv7/omap-common/reset.c (renamed from arch/arm/cpu/armv7/omap-common/reset.S)30
-rw-r--r--arch/arm/cpu/armv7/omap-common/spl.c1
-rw-r--r--arch/arm/cpu/armv7/omap-common/spl_mmc.c5
-rw-r--r--arch/arm/cpu/armv7/omap-common/spl_nand.c2
-rw-r--r--arch/arm/cpu/armv7/omap-common/vc.c138
-rw-r--r--arch/arm/cpu/armv7/omap3/board.c12
-rw-r--r--arch/arm/cpu/armv7/omap3/clock.c16
-rw-r--r--arch/arm/cpu/armv7/omap3/lowlevel_init.S41
-rw-r--r--arch/arm/cpu/armv7/omap4/clocks.c85
-rw-r--r--arch/arm/cpu/armv7/omap4/hwinit.c24
-rw-r--r--arch/arm/cpu/armv7/omap4/sdram_elpida.c4
-rw-r--r--arch/arm/cpu/armv7/omap5/Makefile2
-rw-r--r--arch/arm/cpu/armv7/omap5/clocks.c143
-rw-r--r--arch/arm/cpu/armv7/omap5/hwinit.c104
-rw-r--r--arch/arm/cpu/armv7/omap5/sdram.c (renamed from arch/arm/cpu/armv7/omap5/sdram_elpida.c)101
-rw-r--r--arch/arm/cpu/armv7/rda/Makefile62
-rw-r--r--arch/arm/cpu/armv7/rda/config.mk95
-rw-r--r--arch/arm/cpu/armv7/rda/cpu.c87
-rw-r--r--arch/arm/cpu/armv7/rda/ifc.c172
-rw-r--r--arch/arm/cpu/armv7/rda/ispi.c314
-rw-r--r--arch/arm/cpu/armv7/rda/mdcom.c877
-rw-r--r--arch/arm/cpu/armv7/rda/rda_crypto.c260
-rw-r--r--arch/arm/cpu/armv7/rda/rda_romapi.c133
-rw-r--r--arch/arm/cpu/armv7/rda/rda_sys.c507
-rw-r--r--arch/arm/cpu/armv7/rda/serial.c132
-rw-r--r--arch/arm/cpu/armv7/rda/spl.c189
-rw-r--r--arch/arm/cpu/armv7/rda/timer.c132
-rw-r--r--arch/arm/cpu/armv7/rda/xmodem_boot.c75
-rw-r--r--arch/arm/cpu/armv7/s5pc1xx/cache.S10
-rw-r--r--arch/arm/cpu/armv7/s5pc1xx/reset.S5
-rw-r--r--arch/arm/cpu/armv7/start.S23
-rw-r--r--arch/arm/cpu/armv7/tegra2/Makefile4
-rw-r--r--arch/arm/cpu/armv7/tegra2/ap20.c44
-rw-r--r--arch/arm/cpu/armv7/tegra2/board.c4
-rw-r--r--arch/arm/cpu/armv7/tegra2/clock.c37
-rw-r--r--arch/arm/cpu/armv7/tegra2/crypto.c230
-rw-r--r--arch/arm/cpu/armv7/tegra2/crypto.h36
-rw-r--r--arch/arm/cpu/armv7/tegra2/emc.c286
-rw-r--r--arch/arm/cpu/armv7/tegra2/funcmux.c16
-rw-r--r--arch/arm/cpu/armv7/tegra2/lowlevel_init.S5
-rw-r--r--arch/arm/cpu/armv7/tegra2/pmu.c70
-rw-r--r--arch/arm/cpu/armv7/tegra2/warmboot.c386
-rw-r--r--arch/arm/cpu/armv7/tegra2/warmboot_avp.c250
-rw-r--r--arch/arm/cpu/armv7/tegra2/warmboot_avp.h81
-rw-r--r--arch/arm/cpu/armv7/u8500/lowlevel.S9
-rw-r--r--arch/arm/cpu/ixp/npe/npe.c2
-rw-r--r--arch/arm/dts/tegra20.dtsi11
l---------arch/arm/include/asm/arch1
-rw-r--r--arch/arm/include/asm/arch-am33xx/mmc_host_def.h2
-rw-r--r--arch/arm/include/asm/arch-exynos/clk.h3
-rw-r--r--arch/arm/include/asm/arch-exynos/cpu.h5
-rw-r--r--arch/arm/include/asm/arch-exynos/dsim.h181
-rw-r--r--arch/arm/include/asm/arch-exynos/ehci-s5p.h66
-rw-r--r--arch/arm/include/asm/arch-exynos/fb.h446
-rw-r--r--arch/arm/include/asm/arch-exynos/mipi_dsim.h380
-rw-r--r--arch/arm/include/asm/arch-exynos/mmc.h93
-rw-r--r--arch/arm/include/asm/arch-exynos/power.h6
-rw-r--r--arch/arm/include/asm/arch-exynos/system.h53
-rw-r--r--arch/arm/include/asm/arch-exynos/tzpc.h2
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/clk.h170
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/config.h76
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/cpu.h64
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/emc.h92
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/sys_proto.h25
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/timer.h74
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/uart.h114
-rw-r--r--arch/arm/include/asm/arch-lpc32xx/wdt.h51
-rw-r--r--arch/arm/include/asm/arch-mx25/clock.h23
-rw-r--r--arch/arm/include/asm/arch-mx25/imx-regs.h3
-rw-r--r--arch/arm/include/asm/arch-mx28/imx-regs.h2
-rw-r--r--arch/arm/include/asm/arch-mx28/regs-lcdif.h212
-rw-r--r--arch/arm/include/asm/arch-mx28/regs-lradc.h400
-rw-r--r--arch/arm/include/asm/arch-mx28/sys_proto.h30
-rw-r--r--arch/arm/include/asm/arch-mx5/clock.h7
-rw-r--r--arch/arm/include/asm/arch-mx5/crm_regs.h6
-rw-r--r--arch/arm/include/asm/arch-mx5/imx-regs.h11
-rw-r--r--arch/arm/include/asm/arch-mx5/iomux.h4
-rw-r--r--arch/arm/include/asm/arch-mx5/sys_proto.h3
-rw-r--r--arch/arm/include/asm/arch-mx6/clock.h1
-rw-r--r--arch/arm/include/asm/arch-mx6/crm_regs.h (renamed from arch/arm/include/asm/arch-mx6/ccm_regs.h)2
-rw-r--r--arch/arm/include/asm/arch-mx6/imx-regs.h9
-rw-r--r--arch/arm/include/asm/arch-mx6/iomux-v3.h111
-rw-r--r--arch/arm/include/asm/arch-mx6/sys_proto.h5
-rw-r--r--arch/arm/include/asm/arch-omap3/cpu.h5
-rw-r--r--arch/arm/include/asm/arch-omap3/mmc_host_def.h8
-rw-r--r--arch/arm/include/asm/arch-omap3/mux.h6
-rw-r--r--arch/arm/include/asm/arch-omap4/clocks.h18
-rw-r--r--arch/arm/include/asm/arch-omap4/cpu.h11
-rw-r--r--arch/arm/include/asm/arch-omap4/mmc_host_def.h2
-rw-r--r--arch/arm/include/asm/arch-omap4/mux_omap4.h2
-rw-r--r--arch/arm/include/asm/arch-omap4/omap.h25
-rw-r--r--arch/arm/include/asm/arch-omap4/sys_proto.h8
-rw-r--r--arch/arm/include/asm/arch-omap5/clocks.h52
-rw-r--r--arch/arm/include/asm/arch-omap5/cpu.h11
-rw-r--r--arch/arm/include/asm/arch-omap5/mmc_host_def.h2
-rw-r--r--arch/arm/include/asm/arch-omap5/mux_omap5.h504
-rw-r--r--arch/arm/include/asm/arch-omap5/omap.h153
-rw-r--r--arch/arm/include/asm/arch-omap5/sys_proto.h8
-rw-r--r--arch/arm/include/asm/arch-rda/chip_id.h46
-rw-r--r--arch/arm/include/asm/arch-rda/cs_types.h281
-rw-r--r--arch/arm/include/asm/arch-rda/defs_mdcom.h160
-rw-r--r--arch/arm/include/asm/arch-rda/dma.h73
-rw-r--r--arch/arm/include/asm/arch-rda/factory.h104
-rw-r--r--arch/arm/include/asm/arch-rda/global_macros.h67
-rw-r--r--arch/arm/include/asm/arch-rda/hardware.h19
-rw-r--r--arch/arm/include/asm/arch-rda/hw_test.h61
-rw-r--r--arch/arm/include/asm/arch-rda/hwcfg.h64
-rw-r--r--arch/arm/include/asm/arch-rda/ifc.h55
-rw-r--r--arch/arm/include/asm/arch-rda/iomap_rda8810.h162
-rw-r--r--arch/arm/include/asm/arch-rda/iomap_rda8810e.h180
-rw-r--r--arch/arm/include/asm/arch-rda/iomap_rda8810h.h192
-rw-r--r--arch/arm/include/asm/arch-rda/iomap_rda8820.h196
-rw-r--r--arch/arm/include/asm/arch-rda/iomap_rda8850.h163
-rw-r--r--arch/arm/include/asm/arch-rda/iomap_rda8850e.h184
-rw-r--r--arch/arm/include/asm/arch-rda/iomap_rdaarm926ejs.h48
-rw-r--r--arch/arm/include/asm/arch-rda/irqs.h58
-rw-r--r--arch/arm/include/asm/arch-rda/ispi.h12
-rw-r--r--arch/arm/include/asm/arch-rda/mdcom.h166
-rw-r--r--arch/arm/include/asm/arch-rda/mtdparts_def.h58
-rw-r--r--arch/arm/include/asm/arch-rda/prdinfo.h62
-rw-r--r--arch/arm/include/asm/arch-rda/rda_crypto.h11
-rw-r--r--arch/arm/include/asm/arch-rda/rda_iomap.h25
-rw-r--r--arch/arm/include/asm/arch-rda/rda_sys.h67
-rw-r--r--arch/arm/include/asm/arch-rda/reg_camera.h4
-rw-r--r--arch/arm/include/asm/arch-rda/reg_camera_rda8850e.h397
-rw-r--r--arch/arm/include/asm/arch-rda/reg_cfg_regs.h16
-rw-r--r--arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810.h1056
-rw-r--r--arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810e.h1302
-rw-r--r--arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810h.h1302
-rw-r--r--arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8820.h1300
-rw-r--r--arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850.h1254
-rw-r--r--arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850e.h1297
-rw-r--r--arch/arm/include/asm/arch-rda/reg_gpio.h141
-rw-r--r--arch/arm/include/asm/arch-rda/reg_i2c.h93
-rw-r--r--arch/arm/include/asm/arch-rda/reg_ifc.h5
-rw-r--r--arch/arm/include/asm/arch-rda/reg_ifc_v1.h106
-rw-r--r--arch/arm/include/asm/arch-rda/reg_ifc_v3.h207
-rw-r--r--arch/arm/include/asm/arch-rda/reg_keypad.h89
-rw-r--r--arch/arm/include/asm/arch-rda/reg_md_sysctrl.h16
-rw-r--r--arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810.h958
-rw-r--r--arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810e.h979
-rw-r--r--arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810h.h979
-rw-r--r--arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8820.h1427
-rw-r--r--arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850.h1363
-rw-r--r--arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850e.h1363
-rw-r--r--arch/arm/include/asm/arch-rda/reg_mdcom.h80
-rw-r--r--arch/arm/include/asm/arch-rda/reg_mmc.h245
-rw-r--r--arch/arm/include/asm/arch-rda/reg_nand.h17
-rw-r--r--arch/arm/include/asm/arch-rda/reg_nand_v1.h106
-rw-r--r--arch/arm/include/asm/arch-rda/reg_nand_v2.h111
-rw-r--r--arch/arm/include/asm/arch-rda/reg_nand_v3.h151
-rw-r--r--arch/arm/include/asm/arch-rda/reg_rf_spi.h152
-rw-r--r--arch/arm/include/asm/arch-rda/reg_spi.h245
-rw-r--r--arch/arm/include/asm/arch-rda/reg_sysctrl.h15
-rw-r--r--arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810.h1471
-rw-r--r--arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810e.h1578
-rw-r--r--arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810h.h1578
-rw-r--r--arch/arm/include/asm/arch-rda/reg_sysctrl_rda8820.h1578
-rw-r--r--arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850.h1540
-rw-r--r--arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850e.h1540
-rw-r--r--arch/arm/include/asm/arch-rda/reg_timer.h112
-rw-r--r--arch/arm/include/asm/arch-rda/reg_uart.h478
-rw-r--r--arch/arm/include/asm/arch-rda/reg_xcpu.h314
-rw-r--r--arch/arm/include/asm/arch-rda/rom_api_trampolin.h180
-rw-r--r--arch/arm/include/asm/arch-rda/spl_board_info.h43
-rw-r--r--arch/arm/include/asm/arch-s5pc1xx/mmc.h93
-rw-r--r--arch/arm/include/asm/arch-tegra2/ap20.h (renamed from arch/arm/cpu/armv7/tegra2/ap20.h)7
-rw-r--r--arch/arm/include/asm/arch-tegra2/apb_misc.h36
-rw-r--r--arch/arm/include/asm/arch-tegra2/clk_rst.h3
-rw-r--r--arch/arm/include/asm/arch-tegra2/clock.h22
-rw-r--r--arch/arm/include/asm/arch-tegra2/emc.h113
-rw-r--r--arch/arm/include/asm/arch-tegra2/flow.h36
-rw-r--r--arch/arm/include/asm/arch-tegra2/fuse.h39
-rw-r--r--arch/arm/include/asm/arch-tegra2/gp_padctrl.h73
-rw-r--r--arch/arm/include/asm/arch-tegra2/pmu.h30
-rw-r--r--arch/arm/include/asm/arch-tegra2/sdram_param.h148
-rw-r--r--arch/arm/include/asm/arch-tegra2/tegra2.h25
-rw-r--r--arch/arm/include/asm/arch-tegra2/tegra_i2c.h7
-rw-r--r--arch/arm/include/asm/arch-tegra2/warmboot.h150
-rw-r--r--arch/arm/include/asm/dma-mapping.h2
-rw-r--r--arch/arm/include/asm/emif.h76
-rw-r--r--arch/arm/include/asm/io.h12
-rw-r--r--arch/arm/include/asm/linkage.h7
-rw-r--r--arch/arm/include/asm/mach-types.h90
-rw-r--r--arch/arm/include/asm/omap_common.h11
l---------arch/arm/include/asm/proc1
-rw-r--r--arch/arm/include/asm/u-boot.h1
-rw-r--r--arch/arm/lib/board.c24
-rw-r--r--arch/avr32/include/asm/u-boot.h1
-rw-r--r--arch/avr32/lib/board.c5
-rw-r--r--arch/blackfin/cpu/.gitignore4
-rw-r--r--[-rwxr-xr-x]arch/blackfin/cpu/bootrom-asm-offsets.awk0
-rw-r--r--arch/blackfin/include/asm/config.h8
-rw-r--r--arch/blackfin/include/asm/global_data.h2
-rw-r--r--arch/blackfin/include/asm/u-boot.h1
-rw-r--r--arch/blackfin/lib/.gitignore1
-rw-r--r--arch/blackfin/lib/board.c68
-rw-r--r--arch/m68k/include/asm/u-boot.h1
-rw-r--r--arch/m68k/lib/board.c14
-rw-r--r--arch/microblaze/include/asm/u-boot.h1
-rw-r--r--arch/microblaze/lib/board.c7
-rw-r--r--arch/mips/cpu/mips32/au1x00/au1x00_eth.c3
-rw-r--r--arch/mips/include/asm/u-boot.h1
-rw-r--r--arch/mips/lib/board.c11
-rw-r--r--arch/nds32/cpu/n1213/ag102/Makefile58
-rw-r--r--arch/nds32/cpu/n1213/ag102/asm-offsets.c54
-rw-r--r--arch/nds32/cpu/n1213/ag102/cpu.c195
-rw-r--r--arch/nds32/cpu/n1213/ag102/lowlevel_init.S297
-rw-r--r--arch/nds32/cpu/n1213/ag102/timer.c205
-rw-r--r--arch/nds32/cpu/n1213/ag102/watchdog.S49
-rw-r--r--arch/nds32/include/asm/arch-ag102/ag102.h97
-rw-r--r--arch/nds32/include/asm/mach-types.h14
-rw-r--r--arch/nds32/include/asm/u-boot.h1
-rw-r--r--arch/nds32/lib/board.c9
-rw-r--r--arch/nios2/include/asm/u-boot.h1
-rw-r--r--arch/nios2/lib/board.c2
-rw-r--r--arch/openrisc/include/asm/u-boot.h1
-rw-r--r--arch/powerpc/cpu/mpc8220/fec.c5
-rw-r--r--arch/powerpc/cpu/mpc824x/.gitignore1
-rw-r--r--arch/powerpc/cpu/mpc8260/ether_fcc.c19
-rw-r--r--arch/powerpc/cpu/mpc8260/ether_scc.c2
-rw-r--r--arch/powerpc/cpu/mpc85xx/cpu_init.c9
-rw-r--r--arch/powerpc/cpu/mpc85xx/ether_fcc.c2
-rw-r--r--arch/powerpc/cpu/mpc85xx/start.S112
-rw-r--r--arch/powerpc/cpu/mpc85xx/u-boot-nand.lds9
-rw-r--r--arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds4
-rw-r--r--arch/powerpc/cpu/mpc8xx/fec.c8
-rw-r--r--arch/powerpc/cpu/mpc8xx/scc.c4
-rw-r--r--arch/powerpc/cpu/mpc8xxx/srio.c210
-rw-r--r--arch/powerpc/include/asm/config_mpc85xx.h46
-rw-r--r--arch/powerpc/include/asm/fsl_srio.h64
-rw-r--r--arch/powerpc/include/asm/immap_85xx.h387
-rw-r--r--arch/powerpc/include/asm/u-boot.h1
-rw-r--r--arch/powerpc/lib/board.c11
-rw-r--r--arch/sandbox/include/asm/u-boot.h1
-rw-r--r--arch/sandbox/lib/board.c3
-rw-r--r--arch/sh/include/asm/u-boot.h1
-rw-r--r--arch/sh/lib/board.c22
-rw-r--r--arch/sparc/include/asm/u-boot.h1
-rw-r--r--arch/sparc/lib/board.c7
-rw-r--r--arch/x86/include/asm/init_helpers.h2
-rw-r--r--arch/x86/include/asm/u-boot.h1
-rw-r--r--arch/x86/lib/board.c6
-rw-r--r--arch/x86/lib/init_helpers.c20
-rw-r--r--board/AndesTech/adp-ag102/Makefile (renamed from board/gdsys/neo/Makefile)14
-rw-r--r--board/AndesTech/adp-ag102/adp-ag102.c107
-rw-r--r--board/Marvell/db64360/mv_eth.c5
-rw-r--r--board/Marvell/db64360/mv_eth.h4
-rw-r--r--board/Marvell/db64460/mv_eth.c5
-rw-r--r--board/Marvell/db64460/mv_eth.h4
-rw-r--r--board/avnet/fx12mm/.gitignore1
-rw-r--r--board/avnet/v5fx30teval/.gitignore1
-rw-r--r--board/cloudengines/pogo_e02/Makefile43
-rw-r--r--board/cloudengines/pogo_e02/kwbimage.cfg169
-rw-r--r--board/cloudengines/pogo_e02/pogo_e02.c118
-rw-r--r--board/cloudengines/pogo_e02/pogo_e02.h44
-rw-r--r--board/cm_t35/cm_t35.c19
-rw-r--r--board/comelit/dig297/dig297.c2
-rw-r--r--board/corscience/tricorder/tricorder.c2
-rw-r--r--board/davinci/ea20/ea20.c4
-rw-r--r--board/denx/m28evk/m28evk.c20
-rw-r--r--board/denx/m28evk/spl_boot.c8
-rw-r--r--board/esd/cpci405/cpci405.c8
-rw-r--r--board/esd/cpci750/mv_eth.c5
-rw-r--r--board/esd/cpci750/mv_eth.h4
-rw-r--r--board/esg/ima3-mx53/Makefile41
-rw-r--r--board/esg/ima3-mx53/ima3-mx53.c302
-rw-r--r--board/esg/ima3-mx53/imximage.cfg108
-rw-r--r--board/evb64260/eth.c3
-rw-r--r--board/evb64260/eth.h2
-rw-r--r--board/freescale/common/p_corenet/law.c13
-rw-r--r--board/freescale/common/p_corenet/tlb.c19
-rw-r--r--board/freescale/corenet_ds/corenet_ds.c4
-rw-r--r--board/freescale/mpc8536ds/mpc8536ds.c7
-rw-r--r--board/freescale/mpc8572ds/mpc8572ds.c6
-rw-r--r--board/freescale/mpc8641hpcn/mpc8641hpcn.c3
-rw-r--r--board/freescale/mx28evk/iomux.c21
-rw-r--r--board/freescale/mx53loco/mx53loco.c146
-rw-r--r--board/freescale/mx6qsabrelite/mx6qsabrelite.c155
-rw-r--r--board/freescale/p1010rdb/ddr.c6
-rw-r--r--board/freescale/p1010rdb/p1010rdb.c6
-rw-r--r--board/freescale/p1022ds/p1022ds.c8
-rw-r--r--board/freescale/p1023rds/p1023rds.c6
-rw-r--r--board/freescale/p1_p2_rdb/p1_p2_rdb.c4
-rw-r--r--board/freescale/p1_p2_rdb_pc/ddr.c4
-rw-r--r--board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c8
-rw-r--r--board/freescale/p2020ds/p2020ds.c8
-rw-r--r--board/freescale/p2041rdb/p2041rdb.c4
-rw-r--r--board/freescale/p3060qds/p3060qds.c3
-rw-r--r--board/gdsys/405ep/405ep.c45
-rw-r--r--board/gdsys/405ep/405ep.h10
-rw-r--r--board/gdsys/405ep/Makefile1
-rw-r--r--board/gdsys/405ep/dlvision-10g.c80
-rw-r--r--board/gdsys/405ep/io.c79
-rw-r--r--board/gdsys/405ep/iocon.c70
-rw-r--r--board/gdsys/405ep/neo.c161
-rw-r--r--board/gdsys/405ex/405ex.c3
-rw-r--r--board/gdsys/405ex/io64.c6
-rw-r--r--board/gdsys/common/osd.c18
-rw-r--r--board/gdsys/neo/neo.c102
-rw-r--r--board/htkw/mcx/mcx.c13
-rw-r--r--board/isee/igep0020/igep0020.c4
-rw-r--r--board/isee/igep0030/igep0030.c4
-rw-r--r--board/logicpd/am3517evm/am3517evm.c2
-rw-r--r--board/logicpd/omap3som/omap3logic.c13
-rw-r--r--board/logicpd/zoom1/zoom1.c2
-rw-r--r--board/logicpd/zoom2/zoom2.c2
-rw-r--r--board/matrix_vision/mvblx/mvblx.c4
-rw-r--r--board/nvidia/common/Makefile1
-rw-r--r--board/nvidia/common/board.c42
-rw-r--r--board/nvidia/common/emc.c53
-rw-r--r--board/nvidia/common/emc.h29
-rw-r--r--board/nvidia/dts/tegra2-seaboard.dts64
-rw-r--r--board/overo/overo.c2
-rw-r--r--board/pandora/pandora.c59
-rw-r--r--board/pandora/pandora.h6
-rw-r--r--board/prodrive/p3mx/mv_eth.c5
-rw-r--r--board/prodrive/p3mx/mv_eth.h4
-rw-r--r--board/raidsonic/ib62x0/Makefile43
-rw-r--r--board/raidsonic/ib62x0/ib62x0.c79
-rw-r--r--board/raidsonic/ib62x0/ib62x0.h40
-rw-r--r--board/raidsonic/ib62x0/kwbimage.cfg169
-rw-r--r--board/rda/common/Makefile83
-rw-r--r--board/rda/common/a7_cp15_reg.S238
-rw-r--r--board/rda/common/board.c48
-rw-r--r--board/rda/common/cache_test.c510
-rw-r--r--board/rda/common/cpu_test.c58
-rw-r--r--board/rda/common/ddr_test.c80
-rw-r--r--board/rda/common/gic_test.c422
-rw-r--r--board/rda/common/hal_camera.c639
-rw-r--r--board/rda/common/i2c_test.c1546
-rw-r--r--board/rda/common/include/a7_cp15_reg.h46
-rw-r--r--board/rda/common/include/bootp_mode.h68
-rw-r--r--board/rda/common/include/bs_h264_5f_720x480.md514
-rw-r--r--board/rda/common/include/bs_h264_5f_720x480.txt9435
-rw-r--r--board/rda/common/include/coda7l_fw.h11789
-rw-r--r--board/rda/common/include/coda7l_regs.h587
-rw-r--r--board/rda/common/include/coda7l_test_video.txt9435
-rw-r--r--board/rda/common/include/coda960_fw.h15880
-rw-r--r--board/rda/common/include/coda960_regs.h544
-rw-r--r--board/rda/common/include/coda960_test_video.txt7015
-rw-r--r--board/rda/common/include/freh3_h264_30f_hp_cif_decOrder.md589
-rw-r--r--board/rda/common/include/freh3_h264_99f_hp_cif.txt8666
-rw-r--r--board/rda/common/include/hal_ap_config.h178
-rw-r--r--board/rda/common/include/hal_ap_gpio.h111
-rw-r--r--board/rda/common/include/hal_camera.h360
-rw-r--r--board/rda/common/include/hal_config.h422
-rw-r--r--board/rda/common/include/hal_gpio.h553
-rw-r--r--board/rda/common/include/hal_sys.h831
-rw-r--r--board/rda/common/include/hal_tcu.h330
-rw-r--r--board/rda/common/include/halp_gpio.h64
-rw-r--r--board/rda/common/include/halp_sys.h404
-rw-r--r--board/rda/common/include/rda_gic.h67
-rw-r--r--board/rda/common/include/rda_lcdc.h163
-rw-r--r--board/rda/common/include/rda_md5.h34
-rw-r--r--board/rda/common/include/rda_mipi_dsi.h60
-rw-r--r--board/rda/common/mipi_loop_test.c310
-rw-r--r--board/rda/common/misc.c19
-rw-r--r--board/rda/common/rda_lcdc.c141
-rw-r--r--board/rda/common/rda_md5.c314
-rw-r--r--board/rda/common/rda_mipi_dsi.c283
-rw-r--r--board/rda/common/timer_test.c1620
-rw-r--r--board/rda/common/uart_test.c1110
-rw-r--r--board/rda/common/vpu_test.c149
-rw-r--r--board/rda/common/vpu_test_coda7l.c584
-rw-r--r--board/rda/common/vpu_test_coda960.c570
-rw-r--r--board/rda/rda8810/Makefile82
-rw-r--r--board/rda/rda8810/clock.c1967
-rw-r--r--board/rda/rda8810/clock_config.c145
-rw-r--r--board/rda/rda8810/clock_config.h115
-rw-r--r--board/rda/rda8810/config.mk13
-rw-r--r--board/rda/rda8810/ddr3.c524
-rw-r--r--board/rda/rda8810/ddr3.h50
-rw-r--r--board/rda/rda8810/ddr3_init.h101
-rw-r--r--board/rda/rda8810/debug.h9
-rw-r--r--board/rda/rda8810/hal_config.c1180
-rw-r--r--board/rda/rda8810/u-boot-spl.lds44
-rw-r--r--board/rda/rda8810e/Makefile82
-rw-r--r--board/rda/rda8810e/clock.c1338
-rw-r--r--board/rda/rda8810e/clock_config.c149
-rw-r--r--board/rda/rda8810e/clock_config.h132
-rw-r--r--board/rda/rda8810e/config.mk11
-rw-r--r--board/rda/rda8810e/ddr3.c533
-rw-r--r--board/rda/rda8810e/ddr3.h50
-rw-r--r--board/rda/rda8810e/ddr3_8810.c540
-rw-r--r--board/rda/rda8810e/ddr3_8810e_16bit.c388
-rw-r--r--board/rda/rda8810e/ddr3_8810e_32bit.c410
-rw-r--r--board/rda/rda8810e/ddr3_init.h101
-rw-r--r--board/rda/rda8810e/debug.h9
-rw-r--r--board/rda/rda8810e/hal_config.c1449
-rw-r--r--board/rda/rda8810e/u-boot-spl.lds35
-rw-r--r--board/rda/rda8810h/Makefile82
-rw-r--r--board/rda/rda8810h/clock.c1329
-rw-r--r--board/rda/rda8810h/clock_config.c149
-rw-r--r--board/rda/rda8810h/clock_config.h132
-rw-r--r--board/rda/rda8810h/config.mk15
-rw-r--r--board/rda/rda8810h/ddr3.c533
-rw-r--r--board/rda/rda8810h/ddr3.h50
-rw-r--r--board/rda/rda8810h/ddr3_init.h101
-rw-r--r--board/rda/rda8810h/debug.h9
-rw-r--r--board/rda/rda8810h/hal_config.c1451
-rw-r--r--board/rda/rda8810h/u-boot-spl.lds35
-rw-r--r--board/rda/rda8820/Makefile82
-rw-r--r--board/rda/rda8820/clock.c1312
-rw-r--r--board/rda/rda8820/clock_config.c147
-rw-r--r--board/rda/rda8820/clock_config.h128
-rw-r--r--board/rda/rda8820/config.mk11
-rw-r--r--board/rda/rda8820/ddr3.c516
-rw-r--r--board/rda/rda8820/ddr3.h50
-rw-r--r--board/rda/rda8820/ddr3_8810.c540
-rw-r--r--board/rda/rda8820/ddr3_8810e_16bit.c388
-rw-r--r--board/rda/rda8820/ddr3_8810e_32bit.c410
-rw-r--r--board/rda/rda8820/ddr3_init.h101
-rw-r--r--board/rda/rda8820/ddr3_zhangli_32bit_dlloff.c400
-rw-r--r--board/rda/rda8820/debug.h9
-rw-r--r--board/rda/rda8820/hal_config.c1166
-rw-r--r--board/rda/rda8820/u-boot-spl.lds35
-rw-r--r--board/rda/rda8850/Makefile82
-rw-r--r--board/rda/rda8850/clock.c1313
-rw-r--r--board/rda/rda8850/clock_config.c147
-rw-r--r--board/rda/rda8850/clock_config.h130
-rw-r--r--board/rda/rda8850/config.mk11
-rw-r--r--board/rda/rda8850/ddr3.c516
-rw-r--r--board/rda/rda8850/ddr3.h50
-rw-r--r--board/rda/rda8850/ddr3_8810.c540
-rw-r--r--board/rda/rda8850/ddr3_8810e_16bit.c388
-rw-r--r--board/rda/rda8850/ddr3_8810e_32bit.c410
-rw-r--r--board/rda/rda8850/ddr3_init.h101
-rw-r--r--board/rda/rda8850/ddr3_zhangli_32bit_dlloff.c400
-rw-r--r--board/rda/rda8850/debug.h9
-rw-r--r--board/rda/rda8850/hal_config.c1168
-rw-r--r--board/rda/rda8850/u-boot-spl.lds35
-rw-r--r--board/rda/rda8850e/Makefile82
-rw-r--r--board/rda/rda8850e/clock.c2331
-rw-r--r--board/rda/rda8850e/clock_config.c150
-rw-r--r--board/rda/rda8850e/clock_config.h133
-rw-r--r--board/rda/rda8850e/config.mk15
-rw-r--r--board/rda/rda8850e/ddr.c753
-rw-r--r--board/rda/rda8850e/ddr.h50
-rw-r--r--board/rda/rda8850e/ddr3_init.h127
-rw-r--r--board/rda/rda8850e/ddr_init.h114
-rw-r--r--board/rda/rda8850e/debug.h9
-rw-r--r--board/rda/rda8850e/hal_config.c1166
-rw-r--r--board/rda/rda8850e/lpddr2_init.h114
-rw-r--r--board/rda/rda8850e/u-boot-spl.lds35
-rw-r--r--board/rda/rdaarm926ejs/Makefile53
-rw-r--r--board/rda/rdaarm926ejs/misc.c22
-rw-r--r--board/rda/rdaarm926ejs/rdaarm926ejs.c67
-rw-r--r--board/samsung/smdk5250/tzpc_init.c4
-rw-r--r--board/samsung/smdk6400/.gitignore5
-rw-r--r--board/samsung/smdkc100/onenand.c2
-rw-r--r--board/samsung/trats/trats.c173
-rw-r--r--board/samsung/universal_c210/universal.c25
-rw-r--r--board/technexion/twister/twister.c2
-rw-r--r--board/teejet/mt_ventoux/mt_ventoux.c9
-rw-r--r--board/ti/am3517crane/am3517crane.c2
-rw-r--r--board/ti/beagle/beagle.c2
-rw-r--r--board/ti/evm/evm.c2
-rw-r--r--board/ti/omap5912osk/omap5912osk.c7
-rw-r--r--board/ti/omap5_evm/evm.c10
-rw-r--r--board/ti/omap5_evm/mux_data.h489
-rw-r--r--board/ti/omap730p2/omap730p2.c6
-rw-r--r--board/ti/panda/panda.c2
-rw-r--r--board/ti/panda/panda_mux_data.h10
-rw-r--r--board/ti/sdp3430/sdp.c2
-rw-r--r--board/ti/sdp4430/sdp.c4
-rw-r--r--board/ti/sdp4430/sdp4430_mux_data.h2
-rw-r--r--board/timll/devkit3250/Makefile44
-rw-r--r--board/timll/devkit3250/devkit3250.c65
-rw-r--r--board/timll/devkit8000/devkit8000.c2
-rw-r--r--board/xilinx/ml507/.gitignore1
-rw-r--r--board/xilinx/ppc405-generic/.gitignore1
-rw-r--r--board/xilinx/ppc440-generic/.gitignore1
-rw-r--r--boards.cfg25
-rw-r--r--common/Makefile8
-rw-r--r--common/cmd_bdinfo.c36
-rw-r--r--common/cmd_bootm.c3
-rw-r--r--common/cmd_load.c2
-rw-r--r--common/cmd_mdcom.c1360
-rw-r--r--common/cmd_mem.c26
-rw-r--r--common/cmd_misc.c692
-rw-r--r--common/cmd_mmc.c310
-rw-r--r--common/cmd_mtdparts.c388
-rw-r--r--common/cmd_nand.c406
-rw-r--r--common/cmd_net.c39
-rw-r--r--common/cmd_nvedit.c20
-rw-r--r--common/cmd_onenand.c2
-rw-r--r--common/cmd_sata.c9
-rw-r--r--common/cmd_test.c217
-rw-r--r--common/cmd_ubi.c296
-rw-r--r--common/cmd_usb.c3
-rw-r--r--common/cmd_version.c2
-rw-r--r--common/cmd_yaffs2.c383
-rw-r--r--common/env_onenand.c2
-rw-r--r--common/env_remote.c79
-rw-r--r--common/hush.c2
-rw-r--r--common/image.c14
-rw-r--r--common/main.c83
-rw-r--r--common/usb.c25
-rw-r--r--common/usb_hub.c27
-rw-r--r--common/usb_storage.c59
-rw-r--r--config.mk36
-rw-r--r--customer.mk47
-rw-r--r--disk/part.c640
-rw-r--r--disk/part_dos.c6
-rw-r--r--doc/README.ag10236
-rw-r--r--doc/README.link-local76
-rw-r--r--doc/README.nand16
-rw-r--r--doc/README.srio-boot-corenet103
-rw-r--r--doc/SPL/README.omap34
-rw-r--r--drivers/bios_emulator/x86emu/prim_ops.c5
-rw-r--r--drivers/block/Makefile1
-rw-r--r--drivers/block/dwc_ahsata.c969
-rw-r--r--drivers/block/dwc_ahsata.h335
-rw-r--r--drivers/dma/Makefile1
-rw-r--r--drivers/dma/rda_dma.c143
-rw-r--r--drivers/gpio/mxc_gpio.c3
-rw-r--r--drivers/i2c/Makefile3
-rw-r--r--drivers/i2c/designware_i2c.c (renamed from drivers/i2c/spr_i2c.c)15
-rw-r--r--drivers/i2c/designware_i2c.h (renamed from arch/arm/include/asm/arch-spear/spr_i2c.h)6
-rw-r--r--drivers/i2c/sh_sh7734_i2c.c387
-rw-r--r--drivers/i2c/tegra_i2c.c14
-rw-r--r--drivers/input/Makefile3
-rw-r--r--drivers/input/input.c430
-rw-r--r--drivers/input/key_matrix.c208
-rw-r--r--drivers/input/tegra-kbc.c375
-rw-r--r--drivers/misc/Makefile4
-rw-r--r--drivers/misc/factory.c715
-rw-r--r--drivers/misc/pmic_dialog.c37
-rw-r--r--drivers/misc/pmic_max8997.c43
-rw-r--r--drivers/misc/prdinfo.c344
-rw-r--r--drivers/mmc/Makefile15
-rw-r--r--drivers/mmc/bfin_sdh.c1
-rw-r--r--drivers/mmc/fsl_esdhc.c39
-rw-r--r--drivers/mmc/mmc.c949
-rw-r--r--drivers/mmc/mmc_parts.c725
-rw-r--r--drivers/mmc/mmc_private.h45
-rw-r--r--drivers/mmc/mmc_spl_load.c111
-rw-r--r--drivers/mmc/mmc_write.c187
-rw-r--r--drivers/mmc/mxsmmc.c5
-rw-r--r--drivers/mmc/omap_hsmmc.c114
-rw-r--r--drivers/mmc/rda_mmc.c892
-rw-r--r--drivers/mmc/rda_mmc.h221
-rw-r--r--drivers/mmc/rda_mmc_legacy.c2419
-rw-r--r--drivers/mmc/s5p_mmc.c490
-rw-r--r--drivers/mmc/s5p_sdhci.c98
-rw-r--r--drivers/mmc/sdhci.c24
-rw-r--r--drivers/mtd/mtdconcat.c39
-rw-r--r--drivers/mtd/mtdcore.c16
-rw-r--r--drivers/mtd/mtdpart.c2
-rw-r--r--drivers/mtd/nand/Makefile1
-rw-r--r--drivers/mtd/nand/fsl_ifc_nand.c22
-rw-r--r--drivers/mtd/nand/mpc5121_nfc.c2
-rw-r--r--drivers/mtd/nand/mxc_nand.c33
-rw-r--r--drivers/mtd/nand/nand_base.c352
-rw-r--r--drivers/mtd/nand/nand_bbt.c323
-rw-r--r--drivers/mtd/nand/nand_ids.c223
-rw-r--r--drivers/mtd/nand/nand_spl_load.c36
-rw-r--r--drivers/mtd/nand/nand_spl_simple.c170
-rw-r--r--drivers/mtd/nand/nand_util.c741
-rw-r--r--drivers/mtd/nand/rda_nand.c12
-rw-r--r--drivers/mtd/nand/rda_nand_base.c95
-rw-r--r--drivers/mtd/nand/rda_nand_v1.c1661
-rw-r--r--drivers/mtd/nand/rda_nand_v2.c941
-rw-r--r--drivers/mtd/nand/rda_nand_v3.c2050
-rw-r--r--drivers/mtd/nand/rda_spi_nand.c1654
-rw-r--r--drivers/mtd/onenand/onenand_base.c2
-rw-r--r--drivers/mtd/onenand/onenand_bbt.c2
-rw-r--r--drivers/mtd/onenand/onenand_uboot.c2
-rw-r--r--drivers/mtd/onenand/samsung.c2
-rw-r--r--drivers/mtd/ubi/build.c63
-rw-r--r--drivers/mtd/ubi/eba.c23
-rw-r--r--drivers/mtd/ubi/kapi.c27
-rw-r--r--drivers/mtd/ubi/misc.c10
-rw-r--r--drivers/mtd/ubi/upd.c13
-rw-r--r--drivers/mtd/ubi/vmt.c6
-rw-r--r--drivers/mtd/ubi/vtbl.c10
-rw-r--r--drivers/net/4xx_enet.c3
-rw-r--r--drivers/net/altera_tse.c3
-rw-r--r--drivers/net/armada100_fec.c3
-rw-r--r--drivers/net/at91_emac.c3
-rw-r--r--drivers/net/ax88180.c3
-rw-r--r--drivers/net/bfin_mac.c5
-rw-r--r--drivers/net/bfin_mac.h2
-rw-r--r--drivers/net/calxedaxgmac.c6
-rw-r--r--drivers/net/cs8900.c3
-rw-r--r--drivers/net/davinci_emac.c2
-rw-r--r--drivers/net/dc2114x.c4
-rw-r--r--drivers/net/designware.c5
-rw-r--r--drivers/net/dm9000x.c3
-rw-r--r--drivers/net/dnet.c3
-rw-r--r--drivers/net/e1000.c5
-rw-r--r--drivers/net/eepro100.c7
-rw-r--r--drivers/net/enc28j60.c2
-rw-r--r--drivers/net/ep93xx_eth.c2
-rw-r--r--drivers/net/ethoc.c2
-rw-r--r--drivers/net/fec_mxc.c90
-rw-r--r--drivers/net/fm/eth.c2
-rw-r--r--drivers/net/fm/fm.c2
-rw-r--r--drivers/net/fsl_mcdmafec.c7
-rw-r--r--drivers/net/ftgmac100.c3
-rw-r--r--drivers/net/ftmac100.c3
-rw-r--r--drivers/net/greth.c2
-rw-r--r--drivers/net/inca-ip_sw.c4
-rw-r--r--drivers/net/ks8695eth.c3
-rw-r--r--drivers/net/lan91c96.c4
-rw-r--r--drivers/net/macb.c3
-rw-r--r--drivers/net/mcffec.c3
-rw-r--r--drivers/net/mpc512x_fec.c4
-rw-r--r--drivers/net/mpc5xxx_fec.c2
-rw-r--r--drivers/net/mvgbe.c3
-rw-r--r--drivers/net/natsemi.c6
-rw-r--r--drivers/net/ne2000_base.c2
-rw-r--r--drivers/net/netarm_eth.c2
-rw-r--r--drivers/net/netconsole.c134
-rw-r--r--drivers/net/ns8382x.c6
-rw-r--r--drivers/net/pcnet.c6
-rw-r--r--drivers/net/plb2800_eth.c6
-rw-r--r--drivers/net/rtl8139.c4
-rw-r--r--drivers/net/rtl8169.c2
-rw-r--r--drivers/net/sh_eth.c36
-rw-r--r--drivers/net/sh_eth.h86
-rw-r--r--drivers/net/smc91111.c3
-rw-r--r--drivers/net/smc911x.c3
-rw-r--r--drivers/net/tsec.c5
-rw-r--r--drivers/net/tsi108_eth.c14
-rw-r--r--drivers/net/uli526x.c6
-rw-r--r--drivers/net/xilinx_axi_emac.c2
-rw-r--r--drivers/net/xilinx_emaclite.c6
-rw-r--r--drivers/net/xilinx_ll_temac_fifo.c3
-rw-r--r--drivers/net/xilinx_ll_temac_fifo.h3
-rw-r--r--drivers/net/xilinx_ll_temac_sdma.c3
-rw-r--r--drivers/net/xilinx_ll_temac_sdma.h3
-rw-r--r--drivers/power/Makefile2
-rw-r--r--drivers/power/tps6586x.c280
-rw-r--r--drivers/power/twl6035.c65
-rw-r--r--drivers/qe/uec.c2
-rw-r--r--drivers/serial/Makefile12
-rw-r--r--drivers/serial/lpc32xx_hsuart.c112
-rw-r--r--drivers/serial/usb-serial.c871
-rw-r--r--drivers/serial/usbser.h64
-rw-r--r--drivers/spi/mxs_spi.c23
-rw-r--r--drivers/usb/eth/asix.c2
-rw-r--r--drivers/usb/eth/smsc95xx.c3
-rw-r--r--drivers/usb/gadget/Makefile4
-rw-r--r--drivers/usb/gadget/composite.c1082
-rw-r--r--drivers/usb/gadget/config.c1
-rw-r--r--drivers/usb/gadget/core.c50
-rw-r--r--drivers/usb/gadget/ep0.c10
-rw-r--r--drivers/usb/gadget/epautoconf.c1
-rw-r--r--drivers/usb/gadget/ether.c8
-rw-r--r--drivers/usb/gadget/f_fastboot.c473
-rw-r--r--drivers/usb/gadget/fastboot.c986
-rw-r--r--drivers/usb/gadget/fastboot.h8
-rw-r--r--drivers/usb/gadget/s3c_udc_otg.c58
-rw-r--r--drivers/usb/gadget/s3c_udc_otg_xfer_dma.c289
-rw-r--r--drivers/usb/gadget/usbstring.c1
-rw-r--r--drivers/usb/host/Makefile1
-rw-r--r--drivers/usb/host/ehci-hcd.c288
-rw-r--r--drivers/usb/host/ehci-mx6.c5
-rw-r--r--drivers/usb/host/ehci-mxc.c4
-rw-r--r--drivers/usb/host/ehci-s5p.c110
-rw-r--r--drivers/usb/musb/Makefile4
-rw-r--r--drivers/usb/musb/musb_core.c2
-rw-r--r--drivers/usb/musb/musb_hcd.c5
-rw-r--r--drivers/usb/musb/musb_udc.c247
-rw-r--r--drivers/usb/musb/musbhsdma.c118
-rw-r--r--drivers/usb/musb/musbhsdma.h95
-rw-r--r--drivers/usb/musb/rda.c212
-rw-r--r--drivers/usb/musb/rda.h45
-rw-r--r--drivers/video/Makefile4
-rw-r--r--drivers/video/exynos_fb.c128
-rw-r--r--drivers/video/exynos_fb.h61
-rw-r--r--drivers/video/exynos_fimd.c354
-rw-r--r--drivers/video/exynos_mipi_dsi.c253
-rw-r--r--drivers/video/exynos_mipi_dsi_common.c637
-rw-r--r--drivers/video/exynos_mipi_dsi_common.h48
-rw-r--r--drivers/video/exynos_mipi_dsi_lowlevel.c652
-rw-r--r--drivers/video/exynos_mipi_dsi_lowlevel.h111
-rw-r--r--drivers/video/s6e8ax0.c256
-rw-r--r--examples/api/.gitignore2
-rw-r--r--examples/standalone/.gitignore13
-rw-r--r--fs/cramfs/uncompress.c7
-rw-r--r--fs/fat/fat.c22
-rw-r--r--fs/jffs2/jffs2_1pass.c2
-rw-r--r--fs/ubifs/io.c5
-rw-r--r--fs/ubifs/lpt.c5
-rw-r--r--fs/ubifs/master.c22
-rw-r--r--fs/ubifs/recovery.c40
-rw-r--r--fs/ubifs/replay.c20
-rw-r--r--fs/ubifs/sb.c5
-rw-r--r--fs/ubifs/scan.c18
-rw-r--r--fs/ubifs/super.c44
-rw-r--r--fs/yaffs2/Makefile31
-rw-r--r--fs/yaffs2/README-linux201
-rw-r--r--fs/yaffs2/devextras.h275
-rw-r--r--fs/yaffs2/yaffs_allocator.c356
-rw-r--r--fs/yaffs2/yaffs_allocator.h30
-rw-r--r--fs/yaffs2/yaffs_attribs.c152
-rw-r--r--fs/yaffs2/yaffs_attribs.h28
-rw-r--r--fs/yaffs2/yaffs_bitmap.c97
-rw-r--r--fs/yaffs2/yaffs_bitmap.h33
-rw-r--r--fs/yaffs2/yaffs_checkptrw.c525
-rw-r--r--fs/yaffs2/yaffs_checkptrw.h15
-rw-r--r--fs/yaffs2/yaffs_ecc.c148
-rw-r--r--fs/yaffs2/yaffs_ecc.h46
-rw-r--r--fs/yaffs2/yaffs_error.c58
-rw-r--r--fs/yaffs2/yaffs_flashif.h24
-rw-r--r--fs/yaffs2/yaffs_flashif2.h35
-rw-r--r--fs/yaffs2/yaffs_getblockinfo.h35
-rw-r--r--fs/yaffs2/yaffs_guts.c9194
-rw-r--r--fs/yaffs2/yaffs_guts.h1219
-rw-r--r--fs/yaffs2/yaffs_list.h126
-rw-r--r--fs/yaffs2/yaffs_mtdif.c175
-rw-r--r--fs/yaffs2/yaffs_mtdif.h12
-rw-r--r--fs/yaffs2/yaffs_mtdif2.c269
-rw-r--r--fs/yaffs2/yaffs_mtdif2.h17
-rw-r--r--fs/yaffs2/yaffs_nameval.c208
-rw-r--r--fs/yaffs2/yaffs_nameval.h (renamed from fs/yaffs2/yaffs_malloc.h)19
-rw-r--r--fs/yaffs2/yaffs_nand.c150
-rw-r--r--fs/yaffs2/yaffs_nand.h31
-rw-r--r--fs/yaffs2/yaffs_nandemul2k.h26
-rw-r--r--fs/yaffs2/yaffs_nandif.c251
-rw-r--r--fs/yaffs2/yaffs_nandif.h65
-rw-r--r--fs/yaffs2/yaffs_osglue.h (renamed from fs/yaffs2/yaffs_tagsvalidity.h)29
-rw-r--r--fs/yaffs2/yaffs_packedtags1.c63
-rw-r--r--fs/yaffs2/yaffs_packedtags1.h24
-rw-r--r--fs/yaffs2/yaffs_packedtags2.c268
-rw-r--r--fs/yaffs2/yaffs_packedtags2.h35
-rw-r--r--fs/yaffs2/yaffs_qsort.c58
-rw-r--r--fs/yaffs2/yaffs_qsort.h23
-rw-r--r--fs/yaffs2/yaffs_ramdisk.h32
-rw-r--r--fs/yaffs2/yaffs_summary.c310
-rw-r--r--fs/yaffs2/yaffs_summary.h37
-rw-r--r--fs/yaffs2/yaffs_tagscompat.c573
-rw-r--r--fs/yaffs2/yaffs_tagscompat.h34
-rw-r--r--fs/yaffs2/yaffs_tagsvalidity.c31
-rw-r--r--fs/yaffs2/yaffs_trace.h57
-rw-r--r--fs/yaffs2/yaffs_uboot_glue.c464
-rw-r--r--fs/yaffs2/yaffs_verify.c526
-rw-r--r--fs/yaffs2/yaffs_verify.h43
-rw-r--r--fs/yaffs2/yaffs_yaffs1.c419
-rw-r--r--fs/yaffs2/yaffs_yaffs1.h (renamed from fs/yaffs2/yaffsinterface.h)9
-rw-r--r--fs/yaffs2/yaffs_yaffs2.c1526
-rw-r--r--fs/yaffs2/yaffs_yaffs2.h39
-rw-r--r--fs/yaffs2/yaffscfg.c420
-rw-r--r--fs/yaffs2/yaffscfg.h23
-rw-r--r--fs/yaffs2/yaffsfs.c3446
-rw-r--r--fs/yaffs2/yaffsfs.h282
-rw-r--r--fs/yaffs2/ydirectenv.h74
-rw-r--r--fs/yaffs2/yportenv.h394
-rw-r--r--include/.gitignore6
-rw-r--r--include/aes.h70
-rw-r--r--include/ahci.h5
-rw-r--r--include/android/android_boot.h6
-rw-r--r--include/android/android_bootimg.h103
-rw-r--r--include/android/android_recovery.h77
-rw-r--r--include/android/boot_mode.h41
l---------include/asm1
-rw-r--r--include/autoconf.mk171
-rw-r--r--include/autoconf.mk.dep55
-rw-r--r--include/common.h44
-rw-r--r--include/config.h6
-rw-r--r--include/config.mk5
-rw-r--r--include/config_cmd_all.h1
-rw-r--r--include/configs/HWW1U1A.h2
-rw-r--r--include/configs/MBX.h1
-rw-r--r--include/configs/MigoR.h1
-rw-r--r--include/configs/P1010RDB.h2
-rw-r--r--include/configs/P1023RDS.h3
-rw-r--r--include/configs/P2020COME.h2
-rw-r--r--include/configs/P2041RDB.h59
-rw-r--r--include/configs/adp-ag102.h375
-rw-r--r--include/configs/am3517_crane.h5
-rw-r--r--include/configs/am3517_evm.h6
-rw-r--r--include/configs/at91sam9263ek.h2
-rw-r--r--include/configs/at91sam9m10g45ek.h1
-rw-r--r--include/configs/cam_enc_4xx.h2
-rw-r--r--include/configs/cm_t35.h1
-rw-r--r--include/configs/corenet_ds.h75
-rw-r--r--include/configs/da830evm.h1
-rw-r--r--include/configs/debris.h2
-rw-r--r--include/configs/devkit3250.h117
-rw-r--r--include/configs/devkit8000.h2
-rw-r--r--include/configs/digsy_mtc.h1
-rw-r--r--include/configs/dlvision-10g.h9
-rw-r--r--include/configs/dreamplug.h2
-rw-r--r--include/configs/ea20.h3
-rw-r--r--include/configs/eb_cpux9k2.h2
-rw-r--r--include/configs/ep8260.h1
-rw-r--r--include/configs/flea3.h2
-rw-r--r--include/configs/gdppc440etx.h4
-rw-r--r--include/configs/gplugd.h1
-rw-r--r--include/configs/hawkboard.h1
-rw-r--r--include/configs/ib62x0.h152
-rw-r--r--include/configs/igep0030.h261
-rw-r--r--include/configs/igep00x0.h (renamed from include/configs/igep0020.h)45
-rw-r--r--include/configs/ima3-mx53.h269
-rw-r--r--include/configs/imx27lite-common.h1
-rw-r--r--include/configs/intip.h4
-rw-r--r--include/configs/io.h13
-rw-r--r--include/configs/io64.h2
-rw-r--r--include/configs/iocon.h9
-rw-r--r--include/configs/jadecpu.h1
-rw-r--r--include/configs/kilauea.h1
-rw-r--r--include/configs/lwmon5.h1
-rw-r--r--include/configs/m28evk.h15
-rw-r--r--include/configs/makalu.h1
-rw-r--r--include/configs/mcx.h4
-rw-r--r--include/configs/meesc.h1
-rw-r--r--include/configs/ms7722se.h1
-rw-r--r--include/configs/ms7750se.h1
-rw-r--r--include/configs/mv-common.h1
-rw-r--r--include/configs/mx25pdk.h1
-rw-r--r--include/configs/mx28evk.h13
-rw-r--r--include/configs/mx31pdk.h1
-rw-r--r--include/configs/mx35pdk.h2
-rw-r--r--include/configs/mx53loco.h29
-rw-r--r--include/configs/mx6qarm2.h1
-rw-r--r--include/configs/mx6qsabrelite.h17
-rw-r--r--include/configs/neo.h96
-rw-r--r--include/configs/omap3_beagle.h3
-rw-r--r--include/configs/omap3_evm_common.h3
-rw-r--r--include/configs/omap3_logic.h2
-rw-r--r--include/configs/omap3_overo.h3
-rw-r--r--include/configs/omap3_pandora.h3
-rw-r--r--include/configs/omap4_common.h5
-rw-r--r--include/configs/omap5912osk.h2
-rw-r--r--include/configs/omap5_evm.h26
-rw-r--r--include/configs/omap730p2.h2
-rw-r--r--include/configs/origen.h9
-rw-r--r--include/configs/otc570.h1
-rw-r--r--include/configs/p1_p2_rdb_pc.h7
-rw-r--r--include/configs/pogo_e02.h119
-rw-r--r--include/configs/quad100hd.h1
-rw-r--r--include/configs/r2dplus.h1
-rw-r--r--include/configs/rda8810.h25
-rw-r--r--include/configs/rda8810e.h28
-rw-r--r--include/configs/rda8810h.h40
-rw-r--r--include/configs/rda8820.h19
-rw-r--r--include/configs/rda8850.h19
-rw-r--r--include/configs/rda8850e.h37
-rw-r--r--include/configs/rda_config_defaults.h411
-rw-r--r--include/configs/rdaarm926ejs.h218
-rw-r--r--include/configs/s5p_goni.h7
-rw-r--r--include/configs/s5pc210_universal.h7
-rw-r--r--include/configs/seaboard.h16
-rw-r--r--include/configs/sh7757lcr.h1
-rw-r--r--include/configs/sh7785lcr.h1
-rw-r--r--include/configs/smdk5250.h3
-rw-r--r--include/configs/smdkv310.h7
-rw-r--r--include/configs/spear-common.h3
-rw-r--r--include/configs/tam3517-common.h3
-rw-r--r--include/configs/tegra2-common.h26
-rw-r--r--include/configs/trats.h18
-rw-r--r--include/configs/tricorder.h3
-rw-r--r--include/configs/tx25.h2
-rw-r--r--include/configs/u8500_href.h1
-rw-r--r--include/configs/zeus.h1
-rw-r--r--include/configs/zmx25.h2
-rw-r--r--include/dialog_pmic.h187
-rw-r--r--include/fat.h6
-rw-r--r--include/fdtdec.h71
-rw-r--r--include/fsl_esdhc.h4
-rw-r--r--include/fsl_pmic.h11
-rw-r--r--include/gdsys_fpga.h49
-rw-r--r--include/ide.h57
-rw-r--r--include/image.h4
-rw-r--r--include/input.h147
-rw-r--r--include/jffs2/load_kernel.h8
-rw-r--r--include/key_matrix.h99
-rw-r--r--include/lcd.h64
-rw-r--r--include/linux/compat.h (renamed from include/linux/mtd/compat.h)3
-rw-r--r--include/linux/compiler-gcc.h7
-rw-r--r--include/linux/compiler-gcc5.h65
-rw-r--r--include/linux/compiler-gcc6.h66
-rw-r--r--include/linux/err.h2
-rw-r--r--include/linux/input.h155
-rw-r--r--include/linux/linkage.h7
-rw-r--r--include/linux/mtd/mtd-abi.h2
-rw-r--r--include/linux/mtd/mtd.h29
-rw-r--r--include/linux/mtd/nand.h35
-rw-r--r--include/linux/mtd/onenand.h2
-rw-r--r--include/linux/usb/ch9.h67
-rw-r--r--include/linux/usb/composite.h350
-rw-r--r--include/linux/usb/gadget.h6
-rw-r--r--include/max8997_pmic.h190
-rw-r--r--include/max8998_pmic.h1
-rw-r--r--include/mmc.h214
-rw-r--r--include/mmc/mmcpart.h36
-rw-r--r--include/mmc/sparse.h48
-rw-r--r--include/mtd/nand/rda_nand.h121
-rw-r--r--include/nand.h76
-rw-r--r--include/net.h283
-rw-r--r--include/part.h212
-rw-r--r--include/part_efi.h (renamed from disk/part_efi.h)0
-rw-r--r--include/pdl.h13
-rw-r--r--include/pmic.h1
-rw-r--r--include/rda/ddr_timing/8810p_16x2_156m_ddr2.h84
-rw-r--r--include/rda/ddr_timing/8810p_16x2_200m_ddr2.h84
-rw-r--r--include/rda/ddr_timing/8810p_16x2_260m_ddr2_u08.h84
-rw-r--r--include/rda/rda_panel_comm.h204
-rw-r--r--include/rda/tgt_ap_board_config.h108
-rw-r--r--include/rda/tgt_ap_clock_config.h80
-rw-r--r--include/rda/tgt_ap_flash_parts.h26
-rw-r--r--include/rda/tgt_ap_gpio_setting.h41
-rw-r--r--include/rda/tgt_ap_headset_setting.h67
-rw-r--r--include/rda/tgt_ap_panel_setting.h26
-rw-r--r--include/rda/tgt_ap_ts_setting.h8
-rw-r--r--include/rda/tgt_app_cfg.h91
-rw-r--r--include/rda/tgt_board_cfg.h726
-rw-r--r--include/rda/tgt_gpio_setting.h714
-rw-r--r--include/rda/tgt_types.h261
-rw-r--r--include/scsi.h4
-rw-r--r--include/sdhci.h7
-rw-r--r--include/tegra-kbc.h33
-rw-r--r--include/tps6586x.h68
-rw-r--r--include/twl6035.h42
-rw-r--r--include/u-boot/md5.h5
-rw-r--r--include/u-boot/zlib.h3
-rw-r--r--include/ubi_uboot.h6
-rw-r--r--include/usb.h7
-rw-r--r--include/usb/lin_gadget_compat.h33
-rw-r--r--include/usb/musb_dma.h27
-rw-r--r--include/usb/musb_udc.h19
-rw-r--r--include/usb/s3c_udc.h49
-rw-r--r--include/usb/usbserial.h37
-rw-r--r--include/usbdescriptors.h12
-rw-r--r--include/usbdevice.h16
-rw-r--r--include/version.h10
-rw-r--r--lib/Makefile2
-rw-r--r--lib/aes.c598
-rw-r--r--lib/fdtdec.c53
-rw-r--r--lib/gunzip.c11
-rw-r--r--lib/md5.c4
-rw-r--r--nand_spl/board/rda/rda8810/Makefile79
-rw-r--r--nand_spl/board/rda/rda8810/u-boot.lds82
-rw-r--r--nand_spl/board/rda/rdaarm926ejs/Makefile79
-rw-r--r--nand_spl/board/rda/rdaarm926ejs/u-boot.lds82
-rw-r--r--net/Makefile8
-rw-r--r--net/arp.c236
-rw-r--r--net/arp.h30
-rw-r--r--net/bootp.c435
-rw-r--r--net/bootp.h60
-rw-r--r--net/cdp.c366
-rw-r--r--net/cdp.h21
-rw-r--r--net/dns.c12
-rw-r--r--net/eth.c89
-rw-r--r--net/link_local.c334
-rw-r--r--net/link_local.h24
-rw-r--r--net/net.c1175
-rw-r--r--net/net_rand.c68
-rw-r--r--net/net_rand.h26
-rw-r--r--net/nfs.c310
-rw-r--r--net/nfs.h2
-rw-r--r--net/ping.c115
-rw-r--r--net/ping.h34
-rw-r--r--net/rarp.c85
-rw-r--r--net/rarp.h11
-rw-r--r--net/sntp.c37
-rw-r--r--net/sntp.h2
-rw-r--r--net/tftp.c50
-rw-r--r--net/tftp.h2
-rw-r--r--pdl/common/Makefile48
-rw-r--r--pdl/common/packet.c301
-rw-r--r--pdl/common/pdl.c28
-rw-r--r--pdl/common/pdl_channel.c39
-rw-r--r--pdl/common/pdl_channel_usb.c85
-rw-r--r--pdl/common/pdl_debug.c48
-rw-r--r--pdl/common/pdl_engine.c141
-rw-r--r--pdl/include/cmd_defs.h77
-rw-r--r--pdl/include/config.h11
-rw-r--r--pdl/include/packet.h63
-rw-r--r--pdl/include/pdl_channel.h28
-rw-r--r--pdl/include/pdl_command.h15
-rw-r--r--pdl/include/pdl_debug.h28
-rw-r--r--pdl/include/pdl_engine.h12
-rw-r--r--pdl/pdl-1/Makefile48
-rw-r--r--pdl/pdl-1/pdl1_command.h13
-rw-r--r--pdl/pdl-1/pdl_command.c176
-rw-r--r--pdl/pdl-1/pdl_main.c34
-rw-r--r--pdl/pdl-2/Makefile49
-rw-r--r--pdl/pdl-2/pdl2_command.h26
-rw-r--r--pdl/pdl-2/pdl_command.c571
-rw-r--r--pdl/pdl-2/pdl_emmc.c340
-rw-r--r--pdl/pdl-2/pdl_emmc.h14
-rw-r--r--pdl/pdl-2/pdl_main.c66
-rw-r--r--pdl/pdl-2/pdl_nand.c685
-rw-r--r--pdl/pdl-2/pdl_nand.h31
-rw-r--r--slt.mk36
-rw-r--r--spl/.gitignore4
-rw-r--r--spl/Makefile27
-rwxr-xr-xspl/u-boot-splbin0 -> 393951 bytes
-rw-r--r--spl/u-boot-spl.lds44
-rw-r--r--spl/u-boot-spl.map2274
-rw-r--r--target-device.def745
-rw-r--r--tools/.gitignore18
-rw-r--r--[-rwxr-xr-x]tools/checkpatch.pl0
-rw-r--r--[-rwxr-xr-x]tools/checkstack.pl0
-rwxr-xr-xtools/gcc-version.sh32
-rwxr-xr-xtools/img2srecbin0 -> 10432 bytes
-rw-r--r--[-rwxr-xr-x]tools/jtagconsole0
-rwxr-xr-xtools/mkenvimagebin0 -> 14592 bytes
-rw-r--r--tools/mkenvimage.c2
-rwxr-xr-xtools/mkimagebin0 -> 74576 bytes
-rw-r--r--tools/mkimage.c2
-rwxr-xr-xtools/mkrdaimage.sh113
-rw-r--r--[-rwxr-xr-x]tools/netconsole0
-rw-r--r--tools/patman/.gitignore1
-rw-r--r--tools/patman/README8
-rw-r--r--[l---------]tools/patman/patman0
-rw-r--r--[-rwxr-xr-x]tools/patman/patman.py0
-rwxr-xr-x[-rw-r--r--]tools/scripts/README0
-rwxr-xr-x[-rw-r--r--]tools/scripts/define2mk.sed0
-rwxr-xr-x[-rw-r--r--]tools/scripts/dot.kermrc0
-rwxr-xr-x[-rw-r--r--]tools/scripts/flash_param0
-rwxr-xr-x[-rw-r--r--]tools/scripts/send_cmd0
-rwxr-xr-x[-rw-r--r--]tools/scripts/send_image0
1068 files changed, 212576 insertions, 16804 deletions
diff --git a/.checkpatch.conf b/.checkpatch.conf
deleted file mode 100644
index 977db9edbb..0000000000
--- a/.checkpatch.conf
+++ /dev/null
@@ -1,14 +0,0 @@
-# Not Linux, so don't expect a Linux tree.
---no-tree
-
-# Temporary for false positive in checkpatch
---ignore COMPLEX_MACRO
-
-# For CONFIG_SYS_I2C_NOPROBES
---ignore MULTISTATEMENT_MACRO_USE_DO_WHILE
-
-# For simple_strtoul
---ignore CONSIDER_KSTRTO
-
-# For min/max
---ignore MINMAX
diff --git a/.gitignore b/.gitignore
index 0f32fd8954..e351010f09 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,52 +5,61 @@
#
# Normal rules
#
-
-*.rej
-*.orig
-*.a
+.*
*.o
+*.o.*
+*.a
+*.s
*.su
-*~
+*.mod.c
+*.i
+*.lst
+*.order
+*.elf
*.swp
-*.patch
*.bin
+*.patch
+*.cfgtmp
+*.rda
+*.img
+
+# host programs on Cygwin
+*.exe
+
+# Build tree
+/build-*
#
# Top-level generic files
#
-
-/MLO
+/MLO*
+/SPL
/System.map
-/u-boot
-/u-boot.hex
-/u-boot.imx
-/u-boot.map
-/u-boot.srec
-/u-boot.ldr
-/u-boot.ldr.hex
-/u-boot.ldr.srec
-/u-boot.img
-/u-boot.kwb
-/u-boot.sha1
-/u-boot.dis
-/u-boot.lds
-/u-boot.ubl
-/u-boot.ais
-/u-boot.dtb
-/u-boot.sb
+/u-boot*
+
+#
+# git files that we don't want to ignore even it they are dot-files
+#
+!.gitignore
+!.mailmap
#
# Generated files
#
-*.depend*
/LOG
/errlog
/reloc_off
+/tpl/
+
+#
+# Generated include files
+#
+/include/config/
/include/generated/
-asm-offsets.s
+/include/spl-autoconf.mk
+/include/tpl-autoconf.mk
# stgit generated dirs
patches-*
@@ -71,7 +80,15 @@ cscope.*
/ctags
/etags
-# OneNAND IPL files
-/onenand_ipl/onenand-ipl*
-/onenand_ipl/board/*/onenand*
-/onenand_ipl/board/*/*.S
+# gnu global files
+GPATH
+GRTAGS
+GSYMS
+GTAGS
+
+*.orig
+*~
+\#*#
+
+/cur.log
+
diff --git a/CleanSpec.mk b/CleanSpec.mk
new file mode 100644
index 0000000000..b84e1b65e7
--- /dev/null
+++ b/CleanSpec.mk
@@ -0,0 +1,49 @@
+# Copyright (C) 2007 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+# If you don't need to do a full clean build but would like to touch
+# a file or delete some intermediate files, add a clean step to the end
+# of the list. These steps will only be run once, if they haven't been
+# run before.
+#
+# E.g.:
+# $(call add-clean-step, touch -c external/sqlite/sqlite3.h)
+# $(call add-clean-step, rm -rf $(PRODUCT_OUT)/obj/STATIC_LIBRARIES/libz_intermediates)
+#
+# Always use "touch -c" and "rm -f" or "rm -rf" to gracefully deal with
+# files that are missing or have been moved.
+#
+# Use $(PRODUCT_OUT) to get to the "out/target/product/blah/" directory.
+# Use $(OUT_DIR) to refer to the "out" directory.
+#
+# If you need to re-do something that's already mentioned, just copy
+# the command and add it to the bottom of the list. E.g., if a change
+# that you made last week required touching a file and a change you
+# made today requires touching the same file, just copy the old
+# touch step and add it to the end of the list.
+#
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
+
+# For example:
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/APPS/AndroidTests_intermediates)
+#$(call add-clean-step, rm -rf $(OUT_DIR)/target/common/obj/JAVA_LIBRARIES/core_intermediates)
+#$(call add-clean-step, find $(OUT_DIR) -type f -name "IGTalkSession*" -print0 | xargs -0 rm -f)
+#$(call add-clean-step, rm -rf $(PRODUCT_OUT)/data/*)
+
+# ************************************************
+# NEWER CLEAN STEPS MUST BE AT THE END OF THE LIST
+# ************************************************
diff --git a/MAINTAINERS b/MAINTAINERS
index 708ded79f6..f796872dca 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -777,6 +777,10 @@ Linus Walleij <linus.walleij@linaro.org>
integratorap various
integratorcp various
+Luka Perkov <uboot@lukaperkov.net>
+
+ ib62x0 ARM926EJS
+
Dave Peverley <dpeverley@mpc-data.co.uk>
omap730p2 ARM926EJS
@@ -788,6 +792,16 @@ Stelian Pop <stelian@popies.net>
at91sam9263ek ARM926EJS (AT91SAM9263 SoC)
at91sam9rlek ARM926EJS (AT91SAM9RL SoC)
+Dave Purdy <david.c.purdy@gmail.com>
+
+ pogo_e02 ARM926EJS (Kirkwood SoC)
+
+Sricharan R <r.sricharan@ti.com>
+
+ omap4_panda ARM ARMV7 (OMAP4xx SoC)
+ omap4_sdp4430 ARM ARMV7 (OMAP4xx SoC)
+ omap5_evm ARM ARMV7 (OMAP5xx Soc)
+
Thierry Reding <thierry.reding@avionic-design.de>
plutux Tegra2 (ARM7 & A9 Dual Core)
@@ -860,12 +874,6 @@ Greg Ungerer <greg.ungerer@opengear.com>
cm4116 ks8695p
cm4148 ks8695p
-Aneesh V <aneesh@ti.com>
-
- omap4_panda ARM ARMV7 (OMAP4xx SoC)
- omap4_sdp4430 ARM ARMV7 (OMAP4xx SoC)
- omap5_evm ARM ARMV7 (OMAP5xx Soc)
-
Marek Vasut <marek.vasut@gmail.com>
balloon3 xscale/pxa
@@ -932,6 +940,10 @@ Sughosh Ganu <urwithsughosh@gmail.com>
hawkboard ARM926EJS (OMAP-L138)
+Vladimir Zapolskiy <vz@mleia.com>
+
+ devkit3250 lpc32xx
+
-------------------------------------------------------------------------
Unknown / orphaned boards:
@@ -1191,6 +1203,7 @@ Macpaul Lin <macpaul@andestech.com>
ADP-AG101 N1213 (AG101 SoC)
ADP-AG101P N1213 (AG101P XC5 FPGA)
+ ADP-AG102 N1213f (AG102 SoC with FPU)
#########################################################################
# OpenRISC Systems: #
diff --git a/MAKEALL b/MAKEALL
index e5da6f1859..2e8b9973d7 100755..100644
--- a/MAKEALL
+++ b/MAKEALL
@@ -34,6 +34,7 @@ usage()
CROSS_COMPILE cross-compiler toolchain prefix (default: "")
MAKEALL_LOGDIR output all logs to here (default: ./LOG/)
BUILD_DIR output build directory (default: ./)
+ BUILD_NBUILDS number of parallel targets (default: 1)
Examples:
- build all Power Architecture boards:
@@ -178,18 +179,33 @@ else
LOG_DIR="LOG"
fi
-if [ ! "${BUILD_DIR}" ] ; then
- BUILD_DIR="."
+: ${BUILD_NBUILDS:=1}
+BUILD_MANY=0
+
+if [ "${BUILD_NBUILDS}" -gt 1 ] ; then
+ BUILD_MANY=1
+ : ${BUILD_DIR:=./build}
+ mkdir -p "${BUILD_DIR}/ERR"
+ find "${BUILD_DIR}/ERR/" -type f -exec rm -f {} +
fi
-[ -d ${LOG_DIR} ] || mkdir ${LOG_DIR} || exit 1
+: ${BUILD_DIR:=.}
+
+OUTPUT_PREFIX="${BUILD_DIR}"
+
+[ -d ${LOG_DIR} ] || mkdir "${LOG_DIR}" || exit 1
+find "${LOG_DIR}/" -type f -exec rm -f {} +
LIST=""
# Keep track of the number of builds and errors
ERR_CNT=0
ERR_LIST=""
+WRN_CNT=0
+WRN_LIST=""
TOTAL_CNT=0
+CURRENT_CNT=0
+OLDEST_IDX=1
RC=0
# Helper funcs for parsing boards.cfg
@@ -326,12 +342,7 @@ LIST_ARM9="$(boards_by_cpu arm920t) \
#########################################################################
## ARM11 Systems
#########################################################################
-LIST_ARM11="$(boards_by_cpu arm1136) \
- imx31_phycore \
- imx31_phycore_eet \
- mx31pdk \
- smdk6400 \
-"
+LIST_ARM11="$(boards_by_cpu arm1136)"
#########################################################################
## ARMV7 Systems
@@ -351,10 +362,7 @@ LIST_at91="$(boards_by_soc at91)"
LIST_pxa="$(boards_by_cpu pxa)"
-LIST_ixp="$(boards_by_cpu ixp)
- pdnb3 \
- scpu \
-"
+LIST_ixp="$(boards_by_cpu ixp)"
#########################################################################
## ARM groups
@@ -592,41 +600,106 @@ list_target() {
echo ""
}
+# Each finished build will have a file called ${donep}${n},
+# where n is the index of the build. Each build
+# we've already noted as finished will have ${skipp}${n}.
+# The code managing the build process will use this information
+# to ensure that only BUILD_NBUILDS builds are in flight at once
+donep="${LOG_DIR}/._done_"
+skipp="${LOG_DIR}/._skip_"
+
build_target() {
target=$1
+ build_idx=$2
if [ "$ONLY_LIST" == 'y' ] ; then
list_target ${target}
return
fi
+ if [ $BUILD_MANY == 1 ] ; then
+ output_dir="${OUTPUT_PREFIX}/${target}"
+ mkdir -p "${output_dir}"
+ else
+ output_dir="${OUTPUT_PREFIX}"
+ fi
+
+ export BUILD_DIR="${output_dir}"
+
${MAKE} distclean >/dev/null
${MAKE} -s ${target}_config
- ${MAKE} ${JOBS} all 2>&1 >${LOG_DIR}/$target.MAKELOG \
- | tee ${LOG_DIR}/$target.ERR
+ ${MAKE} ${JOBS} all \
+ >${LOG_DIR}/$target.MAKELOG 2> ${LOG_DIR}/$target.ERR
# Check for 'make' errors
if [ ${PIPESTATUS[0]} -ne 0 ] ; then
RC=1
fi
- if [ -s ${LOG_DIR}/$target.ERR ] ; then
- ERR_CNT=$((ERR_CNT + 1))
- ERR_LIST="${ERR_LIST} $target"
+ if [ $BUILD_MANY == 1 ] ; then
+ ${MAKE} tidy
+
+ if [ -s ${LOG_DIR}/${target}.ERR ] ; then
+ cp ${LOG_DIR}/${target}.ERR ${OUTPUT_PREFIX}/ERR/${target}
+ else
+ rm ${LOG_DIR}/${target}.ERR
+ fi
else
- rm ${LOG_DIR}/$target.ERR
+ if [ -s ${LOG_DIR}/${target}.ERR ] ; then
+ if grep -iw error ${LOG_DIR}/${target}.ERR ; then
+ : $(( ERR_CNT += 1 ))
+ ERR_LIST="${ERR_LIST} $target"
+ else
+ : $(( WRN_CNT += 1 ))
+ WRN_LIST="${WRN_LIST} $target"
+ fi
+ else
+ rm ${LOG_DIR}/${target}.ERR
+ fi
fi
- TOTAL_CNT=$((TOTAL_CNT + 1))
-
- OBJS=${BUILD_DIR}/u-boot
- if [ -e ${BUILD_DIR}/spl/u-boot-spl ]; then
- OBJS="${OBJS} ${BUILD_DIR}/spl/u-boot-spl"
+ OBJS=${output_dir}/u-boot
+ if [ -e ${output_dir}/spl/u-boot-spl ]; then
+ OBJS="${OBJS} ${output_dir}/spl/u-boot-spl"
fi
${CROSS_COMPILE}size ${OBJS} | tee -a ${LOG_DIR}/$target.MAKELOG
+
+ [ -e "${LOG_DIR}/${target}.ERR" ] && cat "${LOG_DIR}/${target}.ERR"
+
+ touch "${donep}${build_idx}"
+}
+
+manage_builds() {
+ search_idx=${OLDEST_IDX}
+ if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
+
+ while true; do
+ if [ -e "${donep}${search_idx}" ] ; then
+ : $(( CURRENT_CNT-- ))
+ [ ${OLDEST_IDX} -eq ${search_idx} ] &&
+ : $(( OLDEST_IDX++ ))
+
+ # Only want to count it once
+ rm -f "${donep}${search_idx}"
+ touch "${skipp}${search_idx}"
+ elif [ -e "${skipp}${search_idx}" ] ; then
+ [ ${OLDEST_IDX} -eq ${search_idx} ] &&
+ : $(( OLDEST_IDX++ ))
+ fi
+ : $(( search_idx++ ))
+ if [ ${search_idx} -gt ${TOTAL_CNT} ] ; then
+ if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then
+ search_idx=${OLDEST_IDX}
+ sleep 1
+ else
+ break
+ fi
+ fi
+ done
}
+
build_targets() {
for t in "$@" ; do
# If a LIST_xxx var exists, use it. But avoid variable
@@ -639,23 +712,71 @@ build_targets() {
if [ -n "${list}" ] ; then
build_targets ${list}
else
- build_target ${t}
+ : $((TOTAL_CNT += 1))
+ : $((CURRENT_CNT += 1))
+ rm -f "${donep}${TOTAL_CNT}"
+ rm -f "${skipp}${TOTAL_CNT}"
+ if [ $BUILD_MANY == 1 ] ; then
+ build_target ${t} ${TOTAL_CNT} &
+ else
+ build_target ${t} ${TOTAL_CNT}
+ fi
+ fi
+
+ # We maintain a running count of all the builds we have done.
+ # Each finished build will have a file called ${donep}${n},
+ # where n is the index of the build. Each build
+ # we've already noted as finished will have ${skipp}${n}.
+ # We track the current index via TOTAL_CNT, and the oldest
+ # index. When we exceed the maximum number of parallel builds,
+ # We look from oldest to current for builds that have completed,
+ # and update the current count and oldest index as appropriate.
+ # If we've gone through the entire list, wait a second, and
+ # reprocess the entire list until we find a build that has
+ # completed
+ if [ ${CURRENT_CNT} -ge ${BUILD_NBUILDS} ] ; then
+ manage_builds
fi
done
}
#-----------------------------------------------------------------------
+kill_children() {
+ kill -- "-$1"
+
+ exit
+}
+
print_stats() {
if [ "$ONLY_LIST" == 'y' ] ; then return ; fi
+
+ rm -f ${donep}* ${skipp}*
+
+ if [ $BUILD_MANY == 1 ] && [ -e "${OUTPUT_PREFIX}/ERR" ] ; then
+ ERR_LIST=`grep -iwl error ${OUTPUT_PREFIX}/ERR/*`
+ ERR_LIST=`for f in $ERR_LIST ; do echo -n " $(basename $f)" ; done`
+ ERR_CNT=`echo $ERR_LIST | wc -w | awk '{print $1}'`
+ WRN_LIST=`grep -iwL error ${OUTPUT_PREFIX}/ERR/*`
+ WRN_LIST=`for f in $WRN_LIST ; do echo -n " $(basename $f)" ; done`
+ WRN_CNT=`echo $WRN_LIST | wc -w | awk '{print $1}'`
+ fi
+
echo ""
echo "--------------------- SUMMARY ----------------------------"
echo "Boards compiled: ${TOTAL_CNT}"
if [ ${ERR_CNT} -gt 0 ] ; then
- echo "Boards with warnings or errors: ${ERR_CNT} (${ERR_LIST} )"
+ echo "Boards with errors: ${ERR_CNT} (${ERR_LIST} )"
+ fi
+ if [ ${WRN_CNT} -gt 0 ] ; then
+ echo "Boards with warnings but no errors: ${WRN_CNT} (${WRN_LIST} )"
fi
echo "----------------------------------------------------------"
+ if [ $BUILD_MANY == 1 ] ; then
+ kill_children $$ &
+ fi
+
exit $RC
}
@@ -666,3 +787,4 @@ set -- ${SELECTED} "$@"
# run PowerPC by default
[ $# = 0 ] && set -- powerpc
build_targets "$@"
+wait
diff --git a/Makefile b/Makefile
index 023ea23a38..da80fec62d 100644
--- a/Makefile
+++ b/Makefile
@@ -23,8 +23,8 @@
VERSION = 2012
PATCHLEVEL = 04
-SUBLEVEL = 01
-EXTRAVERSION =
+SUBLEVEL = 442
+EXTRAVERSION = -rel5.0.2
ifneq "$(SUBLEVEL)" ""
U_BOOT_VERSION = $(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)
else
@@ -58,10 +58,15 @@ VENDOR=
#########################################################################
# Allow for silent builds
+ifneq (1,$(V))
+export MAKEFLAGS += -s --no-print-directory
+export STDOUT_NULL := 1>/dev/null
+endif
+
ifeq (,$(findstring s,$(MAKEFLAGS)))
-XECHO = echo
+export XECHO = :
else
-XECHO = :
+export XECHO = echo
endif
#########################################################################
@@ -110,6 +115,7 @@ TOPDIR := $(SRCTREE)
LNDIR := $(OBJTREE)
export TOPDIR SRCTREE OBJTREE SPLTREE
+
MKCONFIG := $(SRCTREE)/mkconfig
export MKCONFIG
@@ -140,7 +146,7 @@ unexport CDPATH
# The "examples" conditionally depend on U-Boot (say, when USE_PRIVATE_LIBGCC
# is "yes"), so compile examples after U-Boot is compiled.
SUBDIR_TOOLS = tools
-SUBDIR_EXAMPLES = examples/standalone examples/api
+#SUBDIR_EXAMPLES = examples/standalone examples/api
SUBDIRS = $(SUBDIR_TOOLS)
.PHONY : $(SUBDIRS) $(VERSION_FILE) $(TIMESTAMP_FILE)
@@ -301,6 +307,9 @@ LIBS += common/libcommon.o
LIBS += lib/libfdt/libfdt.o
LIBS += api/libapi.o
LIBS += post/libpost.o
+LIBS += android/libandroid.o
+LIBS += pdl/common/libpdl_common.o
+LIBS += pdl/pdl-2/libpdl_stage.o
ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
LIBS += $(CPUDIR)/omap-common/libomap-common.o
@@ -370,12 +379,13 @@ BOARD_SIZE_CHECK =
endif
# Always append ALL so that arch config.mk's can add custom ones
-ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map
+ALL-y += $(obj)u-boot.srec $(obj)u-boot.bin $(obj)System.map $(obj)u-boot.img
ALL-$(CONFIG_NAND_U_BOOT) += $(obj)u-boot-nand.bin
ALL-$(CONFIG_ONENAND_U_BOOT) += $(obj)u-boot-onenand.bin
ONENAND_BIN ?= $(obj)onenand_ipl/onenand-ipl-2k.bin
-ALL-$(CONFIG_SPL) += $(obj)spl/u-boot-spl.bin
+ALL-$(CONFIG_SPL) += $(obj)u-boot$(RDASIGN).rda $(obj)spl/u-boot-spl$(RDASIGN).img \
+ $(obj)spl/u-boot-spl.bin
ALL-$(CONFIG_OF_SEPARATE) += $(obj)u-boot.dtb $(obj)u-boot-dtb.bin
all: $(ALL-y) $(SUBDIR_EXAMPLES)
@@ -409,41 +419,82 @@ $(obj)u-boot.ldr.srec: $(obj)u-boot.ldr
$(OBJCOPY) ${OBJCFLAGS} -O srec $< $@ -I binary
$(obj)u-boot.img: $(obj)u-boot.bin
+ $(XECHO)
+ $(XECHO) " GEN $(@F)"
$(obj)tools/mkimage -A $(ARCH) -T firmware -C none \
-O u-boot -a $(CONFIG_SYS_TEXT_BASE) -e 0 \
-n $(shell sed -n -e 's/.*U_BOOT_VERSION//p' $(VERSION_FILE) | \
sed -e 's/"[ ]*$$/ for $(BOARD) board"/') \
- -d $< $@
+ -d $< $@ $(STDOUT_NULL)
$(obj)u-boot.imx: $(obj)u-boot.bin
+ $(XECHO)
+ $(XECHO) " GEN $(@F)"
$(obj)tools/mkimage -n $(CONFIG_IMX_CONFIG) -T imximage \
- -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
+ -e $(CONFIG_SYS_TEXT_BASE) -d $< $@ $(STDOUT_NULL)
$(obj)u-boot.kwb: $(obj)u-boot.bin
+ $(XECHO)
+ $(XECHO) " GEN $(@F)"
$(obj)tools/mkimage -n $(CONFIG_SYS_KWD_CONFIG) -T kwbimage \
- -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d $< $@
+ -a $(CONFIG_SYS_TEXT_BASE) -e $(CONFIG_SYS_TEXT_BASE) -d \
+ $< $@ $(STDOUT_NULL)
$(obj)u-boot.sha1: $(obj)u-boot.bin
$(obj)tools/ubsha1 $(obj)u-boot.bin
+ifeq ($(RDASIGN),)
+$(obj)pdl1$(RDASIGN).bin: $(obj)spl/u-boot-spl.bin
+ cp $< $@
+else
+$(obj)pdl1$(RDASIGN).bin: $(obj)spl/u-boot-spl$(RDASIGN).img
+ cp $< $@
+endif
+
+$(obj)pdl2.bin: $(obj)u-boot.bin
+ cp $< $@
+
+.PHONY: PDL
+PDL: depend $(obj)pdl1$(RDASIGN).bin $(obj)pdl2$(RDASIGN).bin
+
+$(obj)pdl2-sign.bin: $(obj)u-boot.bin
+ @echo "Signing: $(notdir $@)"
+ rdasign -Sba $(UBOOT_SIGN_FLAGS) -m $^ -x $@
+
+$(obj)spl/u-boot-spl-sign.img: $(obj)spl/u-boot-spl.img
+ rdacryptotool -m indirect $(SPL_SIGN_FLAGS) -i $^ -o $@
+
+$(obj)u-boot-sign.img: $(obj)u-boot.img
+ @echo "Signing: $(notdir $@)"
+ rdasign -Sba $(UBOOT_SIGN_FLAGS) -m $^ -x $@
+
$(obj)u-boot.dis: $(obj)u-boot
$(OBJDUMP) -d $< > $@
$(obj)u-boot.ubl: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
+ $(XECHO)
+ $(XECHO) " GEN $(@F)"
$(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $(obj)spl/u-boot-spl $(obj)spl/u-boot-spl-pad.bin
cat $(obj)spl/u-boot-spl-pad.bin $(obj)u-boot.bin > $(obj)u-boot-ubl.bin
$(obj)tools/mkimage -n $(UBL_CONFIG) -T ublimage \
- -e $(CONFIG_SYS_TEXT_BASE) -d $(obj)u-boot-ubl.bin $(obj)u-boot.ubl
+ -e $(CONFIG_SYS_TEXT_BASE) -d $(obj)u-boot-ubl.bin \
+ $(obj)u-boot.ubl $(STDOUT_NULL)
rm $(obj)u-boot-ubl.bin
rm $(obj)spl/u-boot-spl-pad.bin
+$(obj)u-boot$(RDASIGN).rda: $(obj)spl/u-boot-spl$(RDASIGN).img $(obj)u-boot$(RDASIGN).img
+ $(shell $(TOPDIR)/tools/mkrdaimage.sh $(BOARD_NAND_PAGE_SIZE) \
+ $^ $(SPL_APPENDING_TO) $@)
+
$(obj)u-boot.ais: $(obj)spl/u-boot-spl.bin $(obj)u-boot.bin
+ $(XECHO)
+ $(XECHO) " GEN $(@F)"
$(obj)tools/mkimage -s -n /dev/null -T aisimage \
-e $(CONFIG_SPL_TEXT_BASE) \
-d $(obj)spl/u-boot-spl.bin \
- $(obj)spl/u-boot-spl.ais
+ $(obj)spl/u-boot-spl.ais $(STDOUT_NULL)
$(OBJCOPY) ${OBJCFLAGS} -I binary \
- --pad-to=$(CONFIG_SPL_MAX_SIZE) -O binary \
+ --pad-to=$(CONFIG_SPL_CODE_MAX_SIZE) -O binary \
$(obj)spl/u-boot-spl.ais $(obj)spl/u-boot-spl-pad.ais
cat $(obj)spl/u-boot-spl-pad.ais $(obj)u-boot.bin > \
$(obj)u-boot.ais
@@ -479,26 +530,39 @@ ifeq ($(CONFIG_KALLSYMS),y)
endif
$(OBJS): depend
+ $(XECHO)
+ $(XECHO) " MAKE $(subst $(obj),,$@)"
$(MAKE) -C $(CPUDIR) $(if $(REMOTE_BUILD),$@,$(notdir $@))
$(LIBS): depend $(SUBDIR_TOOLS)
+ $(XECHO)
+ $(XECHO) " MAKE $(dir $(subst $(obj),,$@))"
$(MAKE) -C $(dir $(subst $(obj),,$@))
$(LIBBOARD): depend $(LIBS)
+ $(XECHO)
+ $(XECHO) " MAKE $(dir $(subst $(obj),,$@))"
$(MAKE) -C $(dir $(subst $(obj),,$@))
$(SUBDIRS): depend
+ $(XECHO)
+ $(XECHO) " MAKE $(subst $(obj),,$@)"
$(MAKE) -C $@ all
$(SUBDIR_EXAMPLES): $(obj)u-boot
$(LDSCRIPT): depend
+ $(XECHO)
+ $(XECHO) " GEN $(notdir $@)"
$(MAKE) -C $(dir $@) $(notdir $@)
$(obj)u-boot.lds: $(LDSCRIPT)
$(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+.PHONY: nand_spl
nand_spl: $(TIMESTAMP_FILE) $(VERSION_FILE) depend
+ $(XECHO)
+ $(XECHO) " MAKE nand_spl/board/$(BOARDDIR)"
$(MAKE) -C nand_spl/board/$(BOARDDIR) all
$(obj)u-boot-nand.bin: nand_spl $(obj)u-boot.bin
@@ -510,10 +574,21 @@ onenand_ipl: $(TIMESTAMP_FILE) $(VERSION_FILE) $(obj)include/autoconf.mk
$(obj)u-boot-onenand.bin: onenand_ipl $(obj)u-boot.bin
cat $(ONENAND_BIN) $(obj)u-boot.bin > $(obj)u-boot-onenand.bin
-$(obj)spl/u-boot-spl.bin: $(SUBDIR_TOOLS) depend
+.PHONY: u-boot-spl
+u-boot-spl: $(SUBDIR_TOOLS) depend
+ $(XECHO)
+ $(XECHO) " MAKE $@"
$(MAKE) -C spl all
+$(obj)spl/u-boot-spl.img $(obj)spl/u-boot-spl.bin: u-boot-spl
+ # The line below make dependencies work, no idea why.
+ # Without the line you have to build twice to get get
+ # the new version of u-boot-spl.img linked at this level.
+ @echo "Build $(notdir $@)"
+
updater:
+ $(XECHO)
+ $(XECHO) " MAKE tools/updater"
$(MAKE) -C tools/updater all
# Explicitly make _depend in subdirs containing multiple targets to prevent
@@ -556,6 +631,13 @@ SYSTEM_MAP = \
$(obj)System.map: $(obj)u-boot
@$(call SYSTEM_MAP,$<) > $(obj)System.map
+checkthumb:
+ @if test $(call cc-version) -lt 0404; then \
+ echo -n '*** Your GCC does not produce working '; \
+ echo 'binaries in THUMB mode.'; \
+ echo '*** Your board is configured for THUMB mode.'; \
+ false; \
+ fi
#
# Auto-generate the autoconf.mk file (which is included by all makefiles)
#
@@ -740,7 +822,7 @@ clean:
@rm -f $(obj)onenand_ipl/onenand-{ipl,ipl.bin,ipl.map}
@rm -f $(ONENAND_BIN)
@rm -f $(obj)onenand_ipl/u-boot.lds
- @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.lds,u-boot-spl.map}
+ @rm -f $(obj)spl/{u-boot-spl,u-boot-spl.bin,u-boot-spl.img,u-boot-spl.lds,u-boot-spl.map}
@rm -f $(obj)MLO
@rm -f $(TIMESTAMP_FILE) $(VERSION_FILE)
@find $(OBJTREE) -type f \
diff --git a/README b/README
index 43074cf65f..67dc444bd4 100644
--- a/README
+++ b/README
@@ -432,6 +432,14 @@ The following options need to be configured:
Select high exception vectors of the ARM core, e.g., do not
clear the V bit of the c1 register of CP15.
+ CONFIG_SYS_THUMB_BUILD
+
+ Use this flag to build U-Boot using the Thumb instruction
+ set for ARM architectures. Thumb instruction set provides
+ better code density. For ARM architectures that support
+ Thumb2 this flag will result in Thumb2 code generated by
+ GCC.
+
- Linux Kernel Interface:
CONFIG_CLOCKS_IN_MHZ
@@ -777,6 +785,8 @@ The following options need to be configured:
CONFIG_CMD_JFFS2 * JFFS2 Support
CONFIG_CMD_KGDB * kgdb
CONFIG_CMD_LDRINFO ldrinfo (display Blackfin loader)
+ CONFIG_CMD_LINK_LOCAL * link-local IP address auto-configuration
+ (169.254.*.*)
CONFIG_CMD_LOADB loadb
CONFIG_CMD_LOADS loads
CONFIG_CMD_MD5SUM print md5 message digest
@@ -814,7 +824,7 @@ The following options need to be configured:
CONFIG_CMD_TIME * run command and report execution time
CONFIG_CMD_USB * USB support
CONFIG_CMD_CDP * Cisco Discover Protocol support
- CONFIG_CMD_FSL * Microblaze FSL support
+ CONFIG_CMD_MFSL * Microblaze FSL support
EXAMPLE: If you want all functions except of network
@@ -1584,10 +1594,17 @@ The following options need to be configured:
CONFIG_BOOTP_NTPSERVER
CONFIG_BOOTP_TIMEOFFSET
CONFIG_BOOTP_VENDOREX
+ CONFIG_BOOTP_MAY_FAIL
CONFIG_BOOTP_SERVERIP - TFTP server will be the serverip
environment variable, not the BOOTP server.
+ CONFIG_BOOTP_MAY_FAIL - If the DHCP server is not found
+ after the configured retry count, the call will fail
+ instead of starting over. This can be used to fail over
+ to Link-local IP address configuration if the DHCP server
+ is not available.
+
CONFIG_BOOTP_DNS2 - If a DHCP client requests the DNS
serverip from a DHCP server, it is possible that more
than one DNS serverip is offered to the client.
@@ -1618,6 +1635,14 @@ The following options need to be configured:
the DHCP timeout and retry process takes a longer than
this delay.
+ - Link-local IP address negotiation:
+ Negotiate with other link-local clients on the local network
+ for an address that doesn't require explicit configuration.
+ This is especially useful if a DHCP server cannot be guaranteed
+ to exist in all environments that the device must operate.
+
+ See doc/README.link-local for more information.
+
- CDP Options:
CONFIG_CDP_DEVICE_ID
@@ -3026,6 +3051,24 @@ to save the current settings.
environment area within the total memory of your DataFlash placed
at the specified address.
+- CONFIG_ENV_IS_IN_REMOTE:
+
+ Define this if you have a remote memory space which you
+ want to use for the local device's environment.
+
+ - CONFIG_ENV_ADDR:
+ - CONFIG_ENV_SIZE:
+
+ These two #defines specify the address and size of the
+ environment area within the remote memory space. The
+ local device can get the environment from remote memory
+ space by SRIO or other links.
+
+BE CAREFUL! For some special cases, the local device can not use
+"saveenv" command. For example, the local device will get the
+environment stored in a remote NOR flash by SRIO link, but it can
+not erase, write this NOR flash by SRIO interface.
+
- CONFIG_ENV_IS_IN_NAND:
Define this if you have a NAND device which you want to use
@@ -3462,6 +3505,12 @@ within that device.
Specifies that QE/FMAN firmware is located on the primary SPI
device. CONFIG_SYS_FMAN_FW_ADDR is the byte offset on that device.
+- CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
+ Specifies that QE/FMAN firmware is located in the remote (master)
+ memory space. CONFIG_SYS_FMAN_FW_ADDR is a virtual address which
+ can be mapped from slave TLB->slave LAW->slave SRIO outbound window
+ ->master inbound window->master LAW->the ucode address in master's
+ NOR flash.
Building the Software:
======================
diff --git a/android/Makefile b/android/Makefile
new file mode 100644
index 0000000000..fc5b79861a
--- /dev/null
+++ b/android/Makefile
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2004-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)libandroid.o
+
+COBJS-y += android_boot.o
+
+COBJS := $(sort $(COBJS-y))
+SRCS := $(COBJS:.o=.c) $(XCOBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+
+CPPFLAGS += -I..
+
+all: $(LIB)
+
+$(LIB): $(obj).depend $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/android/android_boot.c b/android/android_boot.c
new file mode 100644
index 0000000000..b3c1beaeee
--- /dev/null
+++ b/android/android_boot.c
@@ -0,0 +1,50 @@
+#include <common.h>
+#include <android/android_boot.h>
+#include <asm/mach-types.h>
+
+void creat_atags(unsigned taddr, const char *cmdline,unsigned raddr, unsigned rsize)
+{
+ unsigned n = 0;
+ unsigned *tags = (unsigned *)taddr;
+
+ //ATAG_CORE
+ tags[n++] = 2;
+ tags[n++] = 0x54410001;
+
+ if(rsize) {
+ //ATAG_INITRD2
+ tags[n++] = 4;
+ tags[n++] = 0x54420005;
+ tags[n++] = raddr;
+ tags[n++] = rsize;
+ }
+ if(cmdline && cmdline[0]) {
+ const char *src;
+ char *dst;
+ unsigned len = 0;
+
+ dst = (char*) (tags + n + 2);
+ src = cmdline;
+ while((*dst++ = *src++)) len++;
+
+ len++;
+ len = (len + 3) & (~3);
+
+ // ATAG_CMDLINE
+ tags[n++] = 2 + (len / 4);
+ tags[n++] = 0x54410009;
+
+ n += (len / 4);
+ }
+
+ // ATAG_NONE
+ tags[n++] = 0;
+ tags[n++] = 0;
+}
+
+void boot_linux(unsigned kaddr, unsigned taddr)
+{
+ void (*entry)(unsigned,unsigned,unsigned) = (void*) kaddr;
+
+ entry(0, machine_arch_type, taddr);
+}
diff --git a/arch/.gitignore b/arch/.gitignore
deleted file mode 100644
index a1fbe01d57..0000000000
--- a/arch/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-/*/include/asm/arch
-/*/include/asm/proc
diff --git a/arch/arm/config.mk b/arch/arm/config.mk
index 3c5f987167..8a97e15d1e 100644
--- a/arch/arm/config.mk
+++ b/arch/arm/config.mk
@@ -21,38 +21,58 @@
# MA 02111-1307 USA
#
-CROSS_COMPILE ?= arm-linux-
+CROSS_COMPILE ?= arm-eabi-
ifndef CONFIG_STANDALONE_LOAD_ADDR
ifeq ($(SOC),omap3)
CONFIG_STANDALONE_LOAD_ADDR = 0x80300000
else
-CONFIG_STANDALONE_LOAD_ADDR = 0xc100000
+CONFIG_STANDALONE_LOAD_ADDR = 0x80008000
endif
endif
PLATFORM_CPPFLAGS += -DCONFIG_ARM -D__ARM__
-# Explicitly specifiy 32-bit ARM ISA since toolchain default can be -mthumb:
-PF_CPPFLAGS_ARM := $(call cc-option,-marm,)
+# Choose between ARM/Thumb instruction sets
+ifeq ($(CONFIG_SYS_THUMB_BUILD),y)
+PF_CPPFLAGS_ARM := $(call cc-option, -mthumb -mthumb-interwork,\
+ $(call cc-option,-marm,)\
+ $(call cc-option,-mno-thumb-interwork,)\
+ )
+else
+PF_CPPFLAGS_ARM := $(call cc-option,-marm,) \
+ $(call cc-option,-mno-thumb-interwork,)
+endif
+# Only test once
+ifneq ($(CONFIG_SPL_BUILD),y)
+ALL-$(CONFIG_SYS_THUMB_BUILD) += checkthumb
+endif
+ifeq ($(CONFIG_SPL_BUILD),y)
+ ifeq ($(CONFIG_SPL_THUMB_BUILD),y)
+PF_CPPFLAGS_ARM := $(call cc-option, -mthumb -mthumb-interwork,\
+ $(call cc-option,-marm,)\
+ $(call cc-option,-mno-thumb-interwork,)\
+ )
+ endif
+endif
# Try if EABI is supported, else fall back to old API,
# i. e. for example:
# - with ELDK 4.2 (EABI supported), use:
-# -mabi=aapcs-linux -mno-thumb-interwork
+# -mabi=aapcs-linux
# - with ELDK 4.1 (gcc 4.x, no EABI), use:
-# -mabi=apcs-gnu -mno-thumb-interwork
+# -mabi=apcs-gnu
# - with ELDK 3.1 (gcc 3.x), use:
-# -mapcs-32 -mno-thumb-interwork
+# -mapcs-32
PF_CPPFLAGS_ABI := $(call cc-option,\
- -mabi=aapcs-linux -mno-thumb-interwork,\
- $(call cc-option,\
- -mapcs-32,\
+ -mabi=aapcs-linux,\
$(call cc-option,\
- -mabi=apcs-gnu,\
- )\
- ) $(call cc-option,-mno-thumb-interwork,)\
- )
+ -mapcs-32,\
+ $(call cc-option,\
+ -mabi=apcs-gnu,\
+ )\
+ )\
+ )
PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARM) $(PF_CPPFLAGS_ABI)
# For EABI, make sure to provide raise()
diff --git a/arch/arm/cpu/arm926ejs/config.mk b/arch/arm/cpu/arm926ejs/config.mk
index ffb2e6c3ea..6a3a1bb354 100644
--- a/arch/arm/cpu/arm926ejs/config.mk
+++ b/arch/arm/cpu/arm926ejs/config.mk
@@ -31,3 +31,9 @@ PLATFORM_CPPFLAGS += -march=armv5te
# =========================================================================
PF_RELFLAGS_SLB_AT := $(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
PLATFORM_RELFLAGS += $(PF_RELFLAGS_SLB_AT)
+
+ifneq ($(CONFIG_IMX_CONFIG),)
+
+ALL-y += $(obj)u-boot.imx
+
+endif
diff --git a/arch/arm/cpu/arm926ejs/lpc32xx/Makefile b/arch/arm/cpu/arm926ejs/lpc32xx/Makefile
new file mode 100644
index 0000000000..ae1f0a5c0c
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/lpc32xx/Makefile
@@ -0,0 +1,45 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(SOC).o
+
+COBJS = cpu.o clk.o devices.o timer.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS))
+
+all: $(obj).depend $(LIB)
+
+$(LIB): $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/arm926ejs/lpc32xx/clk.c b/arch/arm/cpu/arm926ejs/lpc32xx/clk.c
new file mode 100644
index 0000000000..6f26d626a7
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/lpc32xx/clk.c
@@ -0,0 +1,117 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <div64.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/clk.h>
+#include <asm/io.h>
+
+static struct clk_pm_regs *clk = (struct clk_pm_regs *)CLK_PM_BASE;
+
+unsigned int get_sys_clk_rate(void)
+{
+ if (readl(&clk->sysclk_ctrl) & CLK_SYSCLK_PLL397)
+ return RTC_CLK_FREQUENCY * 397;
+ else
+ return OSC_CLK_FREQUENCY;
+}
+
+unsigned int get_hclk_pll_rate(void)
+{
+ unsigned long long fin, fref, fcco, fout;
+ u32 val, m_div, n_div, p_div;
+
+ /*
+ * Valid frequency ranges:
+ * 1 * 10^6 <= Fin <= 20 * 10^6
+ * 1 * 10^6 <= Fref <= 27 * 10^6
+ * 156 * 10^6 <= Fcco <= 320 * 10^6
+ */
+
+ fref = fin = get_sys_clk_rate();
+ if (fin > 20000000ULL || fin < 1000000ULL)
+ return 0;
+
+ val = readl(&clk->hclkpll_ctrl);
+ m_div = ((val & CLK_HCLK_PLL_FEEDBACK_DIV_MASK) >> 1) + 1;
+ n_div = ((val & CLK_HCLK_PLL_PREDIV_MASK) >> 9) + 1;
+ if (val & CLK_HCLK_PLL_DIRECT)
+ p_div = 0;
+ else
+ p_div = ((val & CLK_HCLK_PLL_POSTDIV_MASK) >> 11) + 1;
+ p_div = 1 << p_div;
+
+ if (val & CLK_HCLK_PLL_BYPASS) {
+ do_div(fin, p_div);
+ return fin;
+ }
+
+ do_div(fref, n_div);
+ if (fref > 27000000ULL || fref < 1000000ULL)
+ return 0;
+
+ fout = fref * m_div;
+ if (val & CLK_HCLK_PLL_FEEDBACK) {
+ fcco = fout;
+ do_div(fout, p_div);
+ } else
+ fcco = fout * p_div;
+
+ if (fcco > 320000000ULL || fcco < 156000000ULL)
+ return 0;
+
+ return fout;
+}
+
+unsigned int get_hclk_clk_div(void)
+{
+ u32 val;
+
+ val = readl(&clk->hclkdiv_ctrl) & CLK_HCLK_ARM_PLL_DIV_MASK;
+
+ return 1 << val;
+}
+
+unsigned int get_hclk_clk_rate(void)
+{
+ return get_hclk_pll_rate() / get_hclk_clk_div();
+}
+
+unsigned int get_periph_clk_div(void)
+{
+ u32 val;
+
+ val = readl(&clk->hclkdiv_ctrl) & CLK_HCLK_PERIPH_DIV_MASK;
+
+ return (val >> 2) + 1;
+}
+
+unsigned int get_periph_clk_rate(void)
+{
+ if (!(readl(&clk->pwr_ctrl) & CLK_PWR_NORMAL_RUN))
+ return get_sys_clk_rate();
+
+ return get_hclk_pll_rate() / get_periph_clk_div();
+}
+
+int get_serial_clock(void)
+{
+ return get_periph_clk_rate();
+}
diff --git a/arch/arm/cpu/arm926ejs/lpc32xx/cpu.c b/arch/arm/cpu/arm926ejs/lpc32xx/cpu.c
new file mode 100644
index 0000000000..e29e130338
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/lpc32xx/cpu.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/wdt.h>
+#include <asm/io.h>
+
+static struct clk_pm_regs *clk = (struct clk_pm_regs *)CLK_PM_BASE;
+static struct wdt_regs *wdt = (struct wdt_regs *)WDT_BASE;
+
+void reset_cpu(ulong addr)
+{
+ /* Enable watchdog clock */
+ setbits_le32(&clk->timclk_ctrl, CLK_TIMCLK_WATCHDOG);
+
+ /* Reset pulse length is 13005 peripheral clock frames */
+ writel(13000, &wdt->pulse);
+
+ /* Force WDOG_RESET2 and RESOUT_N signal active */
+ writel(WDTIM_MCTRL_RESFRC2 | WDTIM_MCTRL_RESFRC1 | WDTIM_MCTRL_M_RES2,
+ &wdt->mctrl);
+
+ while (1)
+ /* NOP */;
+}
+
+#if defined(CONFIG_ARCH_CPU_INIT)
+int arch_cpu_init(void)
+{
+ /*
+ * It might be necessary to flush data cache, if U-boot is loaded
+ * from kickstart bootloader, e.g. from S1L loader
+ */
+ flush_dcache_all();
+
+ return 0;
+}
+#else
+#error "You have to select CONFIG_ARCH_CPU_INIT"
+#endif
+
+#if defined(CONFIG_DISPLAY_CPUINFO)
+int print_cpuinfo(void)
+{
+ printf("CPU: NXP LPC32XX\n");
+ printf("CPU clock: %uMHz\n", get_hclk_pll_rate() / 1000000);
+ printf("AHB bus clock: %uMHz\n", get_hclk_clk_rate() / 1000000);
+ printf("Peripheral clock: %uMHz\n", get_periph_clk_rate() / 1000000);
+
+ return 0;
+}
+#endif
diff --git a/arch/arm/cpu/arm926ejs/lpc32xx/devices.c b/arch/arm/cpu/arm926ejs/lpc32xx/devices.c
new file mode 100644
index 0000000000..9f305b5ba5
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/lpc32xx/devices.c
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/uart.h>
+#include <asm/io.h>
+
+static struct clk_pm_regs *clk = (struct clk_pm_regs *)CLK_PM_BASE;
+static struct uart_ctrl_regs *ctrl = (struct uart_ctrl_regs *)UART_CTRL_BASE;
+
+void lpc32xx_uart_init(unsigned int uart_id)
+{
+ if (uart_id < 1 || uart_id > 7)
+ return;
+
+ /* Disable loopback mode, if it is set by S1L bootloader */
+ clrbits_le32(&ctrl->loop,
+ UART_LOOPBACK(CONFIG_SYS_LPC32XX_UART));
+
+ if (uart_id < 3 || uart_id > 6)
+ return;
+
+ /* Enable UART system clock */
+ setbits_le32(&clk->uartclk_ctrl, CLK_UART(uart_id));
+
+ /* Set UART into autoclock mode */
+ clrsetbits_le32(&ctrl->clkmode,
+ UART_CLKMODE_MASK(uart_id),
+ UART_CLKMODE_AUTO(uart_id));
+
+ /* Bypass pre-divider of UART clock */
+ writel(CLK_UART_X_DIV(1) | CLK_UART_Y_DIV(1),
+ &clk->u3clk + (uart_id - 3));
+}
diff --git a/arch/arm/cpu/arm926ejs/lpc32xx/timer.c b/arch/arm/cpu/arm926ejs/lpc32xx/timer.c
new file mode 100644
index 0000000000..1ce2358afd
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/lpc32xx/timer.c
@@ -0,0 +1,95 @@
+/*
+ * Copyright (C) 2011 Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/timer.h>
+#include <asm/io.h>
+
+static struct timer_regs *timer0 = (struct timer_regs *)TIMER0_BASE;
+static struct timer_regs *timer1 = (struct timer_regs *)TIMER1_BASE;
+static struct clk_pm_regs *clk = (struct clk_pm_regs *)CLK_PM_BASE;
+
+static void lpc32xx_timer_clock(u32 bit, int enable)
+{
+ if (enable)
+ setbits_le32(&clk->timclk_ctrl1, bit);
+ else
+ clrbits_le32(&clk->timclk_ctrl1, bit);
+}
+
+static void lpc32xx_timer_reset(struct timer_regs *timer, u32 freq)
+{
+ writel(TIMER_TCR_COUNTER_RESET, &timer->tcr);
+ writel(TIMER_TCR_COUNTER_DISABLE, &timer->tcr);
+ writel(0, &timer->tc);
+ writel(0, &timer->pr);
+
+ /* Count mode is every rising PCLK edge */
+ writel(TIMER_CTCR_MODE_TIMER, &timer->ctcr);
+
+ /* Set prescale counter value */
+ writel((get_periph_clk_rate() / freq) - 1, &timer->pr);
+}
+
+static void lpc32xx_timer_count(struct timer_regs *timer, int enable)
+{
+ if (enable)
+ writel(TIMER_TCR_COUNTER_ENABLE, &timer->tcr);
+ else
+ writel(TIMER_TCR_COUNTER_DISABLE, &timer->tcr);
+}
+
+int timer_init(void)
+{
+ lpc32xx_timer_clock(CLK_TIMCLK_TIMER0, 1);
+ lpc32xx_timer_reset(timer0, CONFIG_SYS_HZ);
+ lpc32xx_timer_count(timer0, 1);
+
+ return 0;
+}
+
+ulong get_timer(ulong base)
+{
+ return readl(&timer0->tc) - base;
+}
+
+void __udelay(unsigned long usec)
+{
+ lpc32xx_timer_clock(CLK_TIMCLK_TIMER1, 1);
+ lpc32xx_timer_reset(timer1, CONFIG_SYS_HZ * 1000);
+ lpc32xx_timer_count(timer1, 1);
+
+ while (readl(&timer1->tc) < usec)
+ /* NOP */;
+
+ lpc32xx_timer_count(timer1, 0);
+ lpc32xx_timer_clock(CLK_TIMCLK_TIMER1, 0);
+}
+
+unsigned long long get_ticks(void)
+{
+ return get_timer(0);
+}
+
+ulong get_tbclk(void)
+{
+ return CONFIG_SYS_HZ;
+}
diff --git a/arch/arm/cpu/arm926ejs/mx25/generic.c b/arch/arm/cpu/arm926ejs/mx25/generic.c
index 9cadb7c34c..8b07dae2b9 100644
--- a/arch/arm/cpu/arm926ejs/mx25/generic.c
+++ b/arch/arm/cpu/arm926ejs/mx25/generic.c
@@ -28,10 +28,15 @@
#include <asm/io.h>
#include <asm/arch/imx-regs.h>
#include <asm/arch/imx25-pinmux.h>
+#include <asm/arch/clock.h>
#ifdef CONFIG_MXC_MMC
#include <asm/arch/mxcmmc.h>
#endif
+#ifdef CONFIG_FSL_ESDHC
+DECLARE_GLOBAL_DATA_PTR;
+#endif
+
/*
* get the system pll clock in Hz
*
@@ -105,6 +110,20 @@ ulong imx_get_perclk(int clk)
return lldiv(fref, div);
}
+unsigned int mxc_get_clock(enum mxc_clock clk)
+{
+ if (clk >= MXC_CLK_NUM)
+ return -1;
+ switch (clk) {
+ case MXC_ARM_CLK:
+ return imx_get_armclk();
+ case MXC_FEC_CLK:
+ return imx_get_ahbclk();
+ default:
+ return imx_get_perclk(clk);
+ }
+}
+
u32 get_cpu_rev(void)
{
u32 srev;
@@ -182,6 +201,14 @@ int cpu_eth_init(bd_t *bis)
#endif
}
+int get_clocks(void)
+{
+#ifdef CONFIG_FSL_ESDHC
+ gd->sdhc_clk = mxc_get_clock(MXC_ESDHC_CLK);
+#endif
+ return 0;
+}
+
/*
* Initializes on-chip MMC controllers.
* to override, implement board_mmc_init()
diff --git a/arch/arm/cpu/arm926ejs/mx28/Makefile b/arch/arm/cpu/arm926ejs/mx28/Makefile
index a2e3f771c2..674a3af1be 100644
--- a/arch/arm/cpu/arm926ejs/mx28/Makefile
+++ b/arch/arm/cpu/arm926ejs/mx28/Makefile
@@ -28,7 +28,7 @@ LIB = $(obj)lib$(SOC).o
COBJS = clock.o mx28.o iomux.o timer.o
ifdef CONFIG_SPL_BUILD
-COBJS += spl_boot.o spl_mem_init.o spl_power_init.o
+COBJS += spl_boot.o spl_lradc_init.o spl_mem_init.o spl_power_init.o
endif
SRCS := $(START:.o=.S) $(COBJS:.o=.c)
diff --git a/arch/arm/cpu/arm926ejs/mx28/mx28.c b/arch/arm/cpu/arm926ejs/mx28/mx28.c
index dc0338dfb5..a82ff2564b 100644
--- a/arch/arm/cpu/arm926ejs/mx28/mx28.c
+++ b/arch/arm/cpu/arm926ejs/mx28/mx28.c
@@ -51,9 +51,16 @@ void reset_cpu(ulong ignored) __attribute__((noreturn));
void reset_cpu(ulong ignored)
{
-
struct mx28_rtc_regs *rtc_regs =
(struct mx28_rtc_regs *)MXS_RTC_BASE;
+ struct mx28_lcdif_regs *lcdif_regs =
+ (struct mx28_lcdif_regs *)MXS_LCDIF_BASE;
+
+ /*
+ * Shut down the LCD controller as it interferes with BootROM boot mode
+ * pads sampling.
+ */
+ writel(LCDIF_CTRL_RUN, &lcdif_regs->hw_lcdif_ctrl_clr);
/* Wait 1 uS before doing the actual watchdog reset */
writel(1, &rtc_regs->hw_rtc_watchdog);
@@ -185,8 +192,12 @@ int arch_cpu_init(void)
#if defined(CONFIG_DISPLAY_CPUINFO)
int print_cpuinfo(void)
{
+ struct mx28_spl_data *data = (struct mx28_spl_data *)
+ ((CONFIG_SYS_TEXT_BASE - sizeof(struct mx28_spl_data)) & ~0xf);
+
printf("Freescale i.MX28 family at %d MHz\n",
mxc_get_clock(MXC_ARM_CLK) / 1000000);
+ printf("BOOT: %s\n", mx28_boot_modes[data->boot_mode_idx].mode);
return 0;
}
#endif
@@ -279,22 +290,16 @@ void imx_get_mac_from_fuse(int dev_id, unsigned char *mac)
int mx28_dram_init(void)
{
- struct mx28_digctl_regs *digctl_regs =
- (struct mx28_digctl_regs *)MXS_DIGCTL_BASE;
- uint32_t sz[2];
-
- sz[0] = readl(&digctl_regs->hw_digctl_scratch0);
- sz[1] = readl(&digctl_regs->hw_digctl_scratch1);
+ struct mx28_spl_data *data = (struct mx28_spl_data *)
+ ((CONFIG_SYS_TEXT_BASE - sizeof(struct mx28_spl_data)) & ~0xf);
- if (sz[0] != sz[1]) {
+ if (data->mem_dram_size == 0) {
printf("MX28:\n"
- "Error, the RAM size in HW_DIGCTRL_SCRATCH0 and\n"
- "HW_DIGCTRL_SCRATCH1 is not the same. Please\n"
- "verify these two registers contain valid RAM size!\n");
+ "Error, the RAM size passed up from SPL is 0!\n");
hang();
}
- gd->ram_size = sz[0];
+ gd->ram_size = data->mem_dram_size;
return 0;
}
diff --git a/arch/arm/cpu/arm926ejs/mx28/mx28_init.h b/arch/arm/cpu/arm926ejs/mx28/mx28_init.h
index 98d363199d..e3a4493fbd 100644
--- a/arch/arm/cpu/arm926ejs/mx28/mx28_init.h
+++ b/arch/arm/cpu/arm926ejs/mx28/mx28_init.h
@@ -37,5 +37,9 @@ static inline void mx28_power_wait_pswitch(void) { }
#endif
void mx28_mem_init(void);
+uint32_t mx28_mem_get_size(void);
+
+void mx28_lradc_init(void);
+void mx28_lradc_enable_batt_measurement(void);
#endif /* __M28_INIT_H__ */
diff --git a/arch/arm/cpu/arm926ejs/mx28/spl_boot.c b/arch/arm/cpu/arm926ejs/mx28/spl_boot.c
index dfb8309e70..a6dfca3f51 100644
--- a/arch/arm/cpu/arm926ejs/mx28/spl_boot.c
+++ b/arch/arm/cpu/arm926ejs/mx28/spl_boot.c
@@ -28,6 +28,8 @@
#include <asm/io.h>
#include <asm/arch/iomux-mx28.h>
#include <asm/arch/imx-regs.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/gpio.h>
#include "mx28_init.h"
@@ -46,12 +48,65 @@ void early_delay(int delay)
;
}
+#define MUX_CONFIG_BOOTMODE_PAD (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
+const iomux_cfg_t iomux_boot[] = {
+ MX28_PAD_LCD_D00__GPIO_1_0 | MUX_CONFIG_BOOTMODE_PAD,
+ MX28_PAD_LCD_D01__GPIO_1_1 | MUX_CONFIG_BOOTMODE_PAD,
+ MX28_PAD_LCD_D02__GPIO_1_2 | MUX_CONFIG_BOOTMODE_PAD,
+ MX28_PAD_LCD_D03__GPIO_1_3 | MUX_CONFIG_BOOTMODE_PAD,
+ MX28_PAD_LCD_D04__GPIO_1_4 | MUX_CONFIG_BOOTMODE_PAD,
+ MX28_PAD_LCD_D05__GPIO_1_5 | MUX_CONFIG_BOOTMODE_PAD,
+};
+
+uint8_t mx28_get_bootmode_index(void)
+{
+ uint8_t bootmode = 0;
+ int i;
+ uint8_t masked;
+
+ /* Setup IOMUX of bootmode pads to GPIO */
+ mxs_iomux_setup_multiple_pads(iomux_boot, ARRAY_SIZE(iomux_boot));
+
+ /* Setup bootmode pins as GPIO input */
+ gpio_direction_input(MX28_PAD_LCD_D00__GPIO_1_0);
+ gpio_direction_input(MX28_PAD_LCD_D01__GPIO_1_1);
+ gpio_direction_input(MX28_PAD_LCD_D02__GPIO_1_2);
+ gpio_direction_input(MX28_PAD_LCD_D03__GPIO_1_3);
+ gpio_direction_input(MX28_PAD_LCD_D04__GPIO_1_4);
+ gpio_direction_input(MX28_PAD_LCD_D05__GPIO_1_5);
+
+ /* Read bootmode pads */
+ bootmode |= (gpio_get_value(MX28_PAD_LCD_D00__GPIO_1_0) ? 1 : 0) << 0;
+ bootmode |= (gpio_get_value(MX28_PAD_LCD_D01__GPIO_1_1) ? 1 : 0) << 1;
+ bootmode |= (gpio_get_value(MX28_PAD_LCD_D02__GPIO_1_2) ? 1 : 0) << 2;
+ bootmode |= (gpio_get_value(MX28_PAD_LCD_D03__GPIO_1_3) ? 1 : 0) << 3;
+ bootmode |= (gpio_get_value(MX28_PAD_LCD_D04__GPIO_1_4) ? 1 : 0) << 4;
+ bootmode |= (gpio_get_value(MX28_PAD_LCD_D05__GPIO_1_5) ? 1 : 0) << 5;
+
+ for (i = 0; i < ARRAY_SIZE(mx28_boot_modes); i++) {
+ masked = bootmode & mx28_boot_modes[i].boot_mask;
+ if (masked == mx28_boot_modes[i].boot_pads)
+ break;
+ }
+
+ return i;
+}
+
void mx28_common_spl_init(const iomux_cfg_t *iomux_setup,
const unsigned int iomux_size)
{
+ struct mx28_spl_data *data = (struct mx28_spl_data *)
+ ((CONFIG_SYS_TEXT_BASE - sizeof(struct mx28_spl_data)) & ~0xf);
+ uint8_t bootmode = mx28_get_bootmode_index();
+
mxs_iomux_setup_multiple_pads(iomux_setup, iomux_size);
mx28_power_init();
+
mx28_mem_init();
+ data->mem_dram_size = mx28_mem_get_size();
+
+ data->boot_mode_idx = bootmode;
+
mx28_power_wait_pswitch();
}
@@ -68,8 +123,10 @@ inline void board_init_r(gd_t *id, ulong dest_addr)
;
}
+#ifndef CONFIG_SPL_SERIAL_SUPPORT
void serial_putc(const char c) {}
void serial_puts(const char *s) {}
+#endif
void hang(void) __attribute__ ((noreturn));
void hang(void)
{
diff --git a/arch/arm/cpu/arm926ejs/mx28/spl_lradc_init.c b/arch/arm/cpu/arm926ejs/mx28/spl_lradc_init.c
new file mode 100644
index 0000000000..88a603c11d
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/mx28/spl_lradc_init.c
@@ -0,0 +1,86 @@
+/*
+ * Freescale i.MX28 Battery measurement init
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+
+#include "mx28_init.h"
+
+void mx28_lradc_init(void)
+{
+ struct mx28_lradc_regs *regs = (struct mx28_lradc_regs *)MXS_LRADC_BASE;
+
+ writel(LRADC_CTRL0_SFTRST, &regs->hw_lradc_ctrl0_clr);
+ writel(LRADC_CTRL0_CLKGATE, &regs->hw_lradc_ctrl0_clr);
+ writel(LRADC_CTRL0_ONCHIP_GROUNDREF, &regs->hw_lradc_ctrl0_clr);
+
+ clrsetbits_le32(&regs->hw_lradc_ctrl3,
+ LRADC_CTRL3_CYCLE_TIME_MASK,
+ LRADC_CTRL3_CYCLE_TIME_6MHZ);
+
+ clrsetbits_le32(&regs->hw_lradc_ctrl4,
+ LRADC_CTRL4_LRADC7SELECT_MASK |
+ LRADC_CTRL4_LRADC6SELECT_MASK,
+ LRADC_CTRL4_LRADC7SELECT_CHANNEL7 |
+ LRADC_CTRL4_LRADC6SELECT_CHANNEL10);
+}
+
+void mx28_lradc_enable_batt_measurement(void)
+{
+ struct mx28_lradc_regs *regs = (struct mx28_lradc_regs *)MXS_LRADC_BASE;
+
+ /* Check if the channel is present at all. */
+ if (!(readl(&regs->hw_lradc_status) & LRADC_STATUS_CHANNEL7_PRESENT))
+ return;
+
+ writel(LRADC_CTRL1_LRADC7_IRQ_EN, &regs->hw_lradc_ctrl1_clr);
+ writel(LRADC_CTRL1_LRADC7_IRQ, &regs->hw_lradc_ctrl1_clr);
+
+ clrsetbits_le32(&regs->hw_lradc_conversion,
+ LRADC_CONVERSION_SCALE_FACTOR_MASK,
+ LRADC_CONVERSION_SCALE_FACTOR_LI_ION);
+ writel(LRADC_CONVERSION_AUTOMATIC, &regs->hw_lradc_conversion_set);
+
+ /* Configure the channel. */
+ writel((1 << 7) << LRADC_CTRL2_DIVIDE_BY_TWO_OFFSET,
+ &regs->hw_lradc_ctrl2_clr);
+ writel(0xffffffff, &regs->hw_lradc_ch7_clr);
+ clrbits_le32(&regs->hw_lradc_ch7, LRADC_CH_NUM_SAMPLES_MASK);
+ writel(LRADC_CH_ACCUMULATE, &regs->hw_lradc_ch7_clr);
+
+ /* Schedule the channel. */
+ writel(1 << 7, &regs->hw_lradc_ctrl0_set);
+
+ /* Start the channel sampling. */
+ writel(((1 << 7) << LRADC_DELAY_TRIGGER_LRADCS_OFFSET) |
+ ((1 << 3) << LRADC_DELAY_TRIGGER_DELAYS_OFFSET) |
+ 100, &regs->hw_lradc_delay3);
+
+ writel(0xffffffff, &regs->hw_lradc_ch7_clr);
+
+ writel(LRADC_DELAY_KICK, &regs->hw_lradc_delay3_set);
+}
diff --git a/arch/arm/cpu/arm926ejs/mx28/spl_mem_init.c b/arch/arm/cpu/arm926ejs/mx28/spl_mem_init.c
index 911bbefc06..9fa5d29e6c 100644
--- a/arch/arm/cpu/arm926ejs/mx28/spl_mem_init.c
+++ b/arch/arm/cpu/arm926ejs/mx28/spl_mem_init.c
@@ -39,7 +39,7 @@ uint32_t dram_vals[] = {
0x00000000, 0x00000100, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00010101, 0x01010101,
- 0x000f0f01, 0x0f02010a, 0x00000000, 0x00010101,
+ 0x000f0f01, 0x0f02020a, 0x00000000, 0x00010101,
0x00000100, 0x00000100, 0x00000000, 0x00000002,
0x01010000, 0x05060302, 0x06005003, 0x0a0000c8,
0x02009c40, 0x0000030c, 0x0036a609, 0x031a0612,
@@ -149,6 +149,8 @@ void mx28_mem_setup_cpu_and_hbus(void)
/* Disable CPU bypass */
writel(CLKCTRL_CLKSEQ_BYPASS_CPU,
&clkctrl_regs->hw_clkctrl_clkseq_clr);
+
+ early_delay(15000);
}
void mx28_mem_setup_vdda(void)
@@ -173,10 +175,8 @@ void mx28_mem_setup_vddd(void)
&power_regs->hw_power_vdddctrl);
}
-void mx28_mem_get_size(void)
+uint32_t mx28_mem_get_size(void)
{
- struct mx28_digctl_regs *digctl_regs =
- (struct mx28_digctl_regs *)MXS_DIGCTL_BASE;
uint32_t sz, da;
uint32_t *vt = (uint32_t *)0x20;
/* The following is "subs pc, r14, #4", used as return from DABT. */
@@ -187,11 +187,11 @@ void mx28_mem_get_size(void)
vt[4] = data_abort_memdetect_handler;
sz = get_ram_size((long *)PHYS_SDRAM_1, PHYS_SDRAM_1_SIZE);
- writel(sz, &digctl_regs->hw_digctl_scratch0);
- writel(sz, &digctl_regs->hw_digctl_scratch1);
/* Restore the old DABT handler. */
vt[4] = da;
+
+ return sz;
}
void mx28_mem_init(void)
@@ -239,6 +239,4 @@ void mx28_mem_init(void)
early_delay(10000);
mx28_mem_setup_cpu_and_hbus();
-
- mx28_mem_get_size();
}
diff --git a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
index aa4117d3a2..4b09b0c3ba 100644
--- a/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
+++ b/arch/arm/cpu/arm926ejs/mx28/spl_power_init.c
@@ -45,11 +45,11 @@ void mx28_power_clock2pll(void)
struct mx28_clkctrl_regs *clkctrl_regs =
(struct mx28_clkctrl_regs *)MXS_CLKCTRL_BASE;
- writel(CLKCTRL_PLL0CTRL0_POWER,
- &clkctrl_regs->hw_clkctrl_pll0ctrl0_set);
+ setbits_le32(&clkctrl_regs->hw_clkctrl_pll0ctrl0,
+ CLKCTRL_PLL0CTRL0_POWER);
early_delay(100);
- writel(CLKCTRL_CLKSEQ_BYPASS_CPU,
- &clkctrl_regs->hw_clkctrl_clkseq_clr);
+ setbits_le32(&clkctrl_regs->hw_clkctrl_clkseq,
+ CLKCTRL_CLKSEQ_BYPASS_CPU);
}
void mx28_power_clear_auto_restart(void)
@@ -104,6 +104,62 @@ void mx28_power_set_linreg(void)
POWER_VDDIOCTRL_LINREG_OFFSET_1STEPS_BELOW);
}
+int mx28_get_batt_volt(void)
+{
+ struct mx28_power_regs *power_regs =
+ (struct mx28_power_regs *)MXS_POWER_BASE;
+ uint32_t volt = readl(&power_regs->hw_power_battmonitor);
+ volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
+ volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
+ volt *= 8;
+ return volt;
+}
+
+int mx28_is_batt_ready(void)
+{
+ return (mx28_get_batt_volt() >= 3600);
+}
+
+int mx28_is_batt_good(void)
+{
+ struct mx28_power_regs *power_regs =
+ (struct mx28_power_regs *)MXS_POWER_BASE;
+ uint32_t volt = mx28_get_batt_volt();
+
+ if ((volt >= 2400) && (volt <= 4300))
+ return 1;
+
+ clrsetbits_le32(&power_regs->hw_power_5vctrl,
+ POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
+ 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
+ writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
+ &power_regs->hw_power_5vctrl_clr);
+
+ clrsetbits_le32(&power_regs->hw_power_charge,
+ POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
+ POWER_CHARGE_STOP_ILIMIT_10MA | 0x3);
+
+ writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr);
+ writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
+ &power_regs->hw_power_5vctrl_clr);
+
+ early_delay(500000);
+
+ volt = mx28_get_batt_volt();
+
+ if (volt >= 3500)
+ return 0;
+
+ if (volt >= 2400)
+ return 1;
+
+ writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
+ &power_regs->hw_power_charge_clr);
+ writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
+
+ return 0;
+}
+
void mx28_power_setup_5v_detect(void)
{
struct mx28_power_regs *power_regs =
@@ -399,9 +455,14 @@ void mx28_power_enable_4p2(void)
mx28_power_init_4p2_regulator();
/* Shutdown battery (none present) */
- clrbits_le32(&power_regs->hw_power_dcdc4p2, POWER_DCDC4P2_BO_MASK);
- writel(POWER_CTRL_DCDC4P2_BO_IRQ, &power_regs->hw_power_ctrl_clr);
- writel(POWER_CTRL_ENIRQ_DCDC4P2_BO, &power_regs->hw_power_ctrl_clr);
+ if (!mx28_is_batt_ready()) {
+ clrbits_le32(&power_regs->hw_power_dcdc4p2,
+ POWER_DCDC4P2_BO_MASK);
+ writel(POWER_CTRL_DCDC4P2_BO_IRQ,
+ &power_regs->hw_power_ctrl_clr);
+ writel(POWER_CTRL_ENIRQ_DCDC4P2_BO,
+ &power_regs->hw_power_ctrl_clr);
+ }
mx28_power_init_dcdc_4p2_source();
@@ -459,6 +520,50 @@ void mx28_powerdown(void)
&power_regs->hw_power_reset);
}
+void mx28_batt_boot(void)
+{
+ struct mx28_power_regs *power_regs =
+ (struct mx28_power_regs *)MXS_POWER_BASE;
+
+ clrbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_PWDN_5VBRNOUT);
+ clrbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_ENABLE_DCDC);
+
+ clrbits_le32(&power_regs->hw_power_dcdc4p2,
+ POWER_DCDC4P2_ENABLE_DCDC | POWER_DCDC4P2_ENABLE_4P2);
+ writel(POWER_CHARGE_ENABLE_LOAD, &power_regs->hw_power_charge_clr);
+
+ /* 5V to battery handoff. */
+ setbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_DCDC_XFER);
+ early_delay(30);
+ clrbits_le32(&power_regs->hw_power_5vctrl, POWER_5VCTRL_DCDC_XFER);
+
+ writel(POWER_CTRL_ENIRQ_DCDC4P2_BO, &power_regs->hw_power_ctrl_clr);
+
+ clrsetbits_le32(&power_regs->hw_power_minpwr,
+ POWER_MINPWR_HALFFETS, POWER_MINPWR_DOUBLE_FETS);
+
+ mx28_power_set_linreg();
+
+ clrbits_le32(&power_regs->hw_power_vdddctrl,
+ POWER_VDDDCTRL_DISABLE_FET | POWER_VDDDCTRL_ENABLE_LINREG);
+
+ clrbits_le32(&power_regs->hw_power_vddactrl,
+ POWER_VDDACTRL_DISABLE_FET | POWER_VDDACTRL_ENABLE_LINREG);
+
+ clrbits_le32(&power_regs->hw_power_vddioctrl,
+ POWER_VDDIOCTRL_DISABLE_FET);
+
+ setbits_le32(&power_regs->hw_power_5vctrl,
+ POWER_5VCTRL_PWD_CHARGE_4P2_MASK);
+
+ setbits_le32(&power_regs->hw_power_5vctrl,
+ POWER_5VCTRL_ENABLE_DCDC);
+
+ clrsetbits_le32(&power_regs->hw_power_5vctrl,
+ POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
+ 0x8 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
+}
+
void mx28_handle_5v_conflict(void)
{
struct mx28_power_regs *power_regs =
@@ -483,23 +588,12 @@ void mx28_handle_5v_conflict(void)
mx28_powerdown();
break;
}
- }
-}
-int mx28_get_batt_volt(void)
-{
- struct mx28_power_regs *power_regs =
- (struct mx28_power_regs *)MXS_POWER_BASE;
- uint32_t volt = readl(&power_regs->hw_power_battmonitor);
- volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
- volt *= 8;
- return volt;
-}
-
-int mx28_is_batt_ready(void)
-{
- return (mx28_get_batt_volt() >= 3600);
+ if (tmp & POWER_STS_PSWITCH_MASK) {
+ mx28_batt_boot();
+ break;
+ }
+ }
}
void mx28_5v_boot(void)
@@ -553,62 +647,44 @@ void mx28_switch_vddd_to_dcdc_source(void)
POWER_VDDDCTRL_DISABLE_STEPPING);
}
-int mx28_is_batt_good(void)
+void mx28_power_configure_power_source(void)
{
+ int batt_ready, batt_good;
struct mx28_power_regs *power_regs =
(struct mx28_power_regs *)MXS_POWER_BASE;
- uint32_t volt;
-
- volt = readl(&power_regs->hw_power_battmonitor);
- volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
- volt *= 8;
+ struct mx28_lradc_regs *lradc_regs =
+ (struct mx28_lradc_regs *)MXS_LRADC_BASE;
- if ((volt >= 2400) && (volt <= 4300))
- return 1;
-
- clrsetbits_le32(&power_regs->hw_power_5vctrl,
- POWER_5VCTRL_CHARGE_4P2_ILIMIT_MASK,
- 0x3 << POWER_5VCTRL_CHARGE_4P2_ILIMIT_OFFSET);
- writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
- &power_regs->hw_power_5vctrl_clr);
-
- clrsetbits_le32(&power_regs->hw_power_charge,
- POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
- POWER_CHARGE_STOP_ILIMIT_10MA | 0x3);
-
- writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_clr);
- writel(POWER_5VCTRL_PWD_CHARGE_4P2_MASK,
- &power_regs->hw_power_5vctrl_clr);
-
- early_delay(500000);
-
- volt = readl(&power_regs->hw_power_battmonitor);
- volt &= POWER_BATTMONITOR_BATT_VAL_MASK;
- volt >>= POWER_BATTMONITOR_BATT_VAL_OFFSET;
- volt *= 8;
-
- if (volt >= 3500)
- return 0;
-
- if (volt >= 2400)
- return 1;
-
- writel(POWER_CHARGE_STOP_ILIMIT_MASK | POWER_CHARGE_BATTCHRG_I_MASK,
- &power_regs->hw_power_charge_clr);
- writel(POWER_CHARGE_PWD_BATTCHRG, &power_regs->hw_power_charge_set);
+ mx28_src_power_init();
- return 0;
-}
+ batt_ready = mx28_is_batt_ready();
-void mx28_power_configure_power_source(void)
-{
- mx28_src_power_init();
+ if (readl(&power_regs->hw_power_sts) & POWER_STS_VDD5V_GT_VDDIO) {
+ batt_good = mx28_is_batt_good();
+ if (batt_ready) {
+ /* 5V source detected, good battery detected. */
+ mx28_batt_boot();
+ } else {
+ if (batt_good) {
+ /* 5V source detected, low battery detceted. */
+ } else {
+ /* 5V source detected, bad battery detected. */
+ writel(LRADC_CONVERSION_AUTOMATIC,
+ &lradc_regs->hw_lradc_conversion_clr);
+ clrbits_le32(&power_regs->hw_power_battmonitor,
+ POWER_BATTMONITOR_BATT_VAL_MASK);
+ }
+ mx28_5v_boot();
+ }
+ } else {
+ /* 5V not detected, booting from battery. */
+ mx28_batt_boot();
+ }
- mx28_5v_boot();
mx28_power_clock2pll();
mx28_init_batt_bo();
+
mx28_switch_vddd_to_dcdc_source();
}
@@ -883,6 +959,13 @@ void mx28_power_set_vddd(uint32_t new_target, uint32_t new_brownout)
new_brownout << POWER_VDDDCTRL_BO_OFFSET_OFFSET);
}
+void mx28_setup_batt_detect(void)
+{
+ mx28_lradc_init();
+ mx28_lradc_enable_batt_measurement();
+ early_delay(10);
+}
+
void mx28_power_init(void)
{
struct mx28_power_regs *power_regs =
@@ -892,6 +975,9 @@ void mx28_power_init(void)
mx28_power_clear_auto_restart();
mx28_power_set_linreg();
mx28_power_setup_5v_detect();
+
+ mx28_setup_batt_detect();
+
mx28_power_configure_power_source();
mx28_enable_output_rail_protection();
diff --git a/arch/arm/cpu/arm926ejs/rda/Makefile b/arch/arm/cpu/arm926ejs/rda/Makefile
new file mode 100644
index 0000000000..a8ebda3a72
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/Makefile
@@ -0,0 +1,58 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(SOC).o
+
+COBJS-y += timer.o serial.o ifc.o cpu.o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += spl.o
+endif
+
+SOBJS = reset.o
+
+ifndef CONFIG_SKIP_LOWLEVEL_INIT
+SOBJS += lowlevel_init.o
+endif
+
+SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS-y) $(SOBJS))
+START := $(addprefix $(obj),$(START))
+
+all: $(obj).depend $(LIB)
+
+$(LIB): $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/arm926ejs/rda/config.mk b/arch/arm/cpu/arm926ejs/rda/config.mk
new file mode 100644
index 0000000000..565adda11d
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/config.mk
@@ -0,0 +1,32 @@
+#
+# (C) Copyright 2002
+# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+PLATFORM_RELFLAGS += -fno-common -ffixed-r8 -msoft-float
+
+PLATFORM_CPPFLAGS += -march=armv5te
+# =========================================================================
+#
+# Supply options according to compiler version
+#
+# =========================================================================
+PLATFORM_RELFLAGS +=$(call cc-option,-mshort-load-bytes,$(call cc-option,-malignment-traps,))
diff --git a/arch/arm/cpu/arm926ejs/rda/cpu.c b/arch/arm/cpu/arm926ejs/rda/cpu.c
new file mode 100644
index 0000000000..ae7a18ed7c
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/cpu.c
@@ -0,0 +1,12 @@
+#include <common.h>
+#include <asm/arch/hardware.h>
+
+void enable_caches(void)
+{
+#ifndef CONFIG_SYS_ICACHE_OFF
+ icache_enable();
+#endif
+#ifndef CONFIG_SYS_DCACHE_OFF
+ dcache_enable();
+#endif
+}
diff --git a/arch/arm/cpu/arm926ejs/rda/ifc.c b/arch/arm/cpu/arm926ejs/rda/ifc.c
new file mode 100644
index 0000000000..cdda6935ea
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/ifc.c
@@ -0,0 +1,171 @@
+#include "common.h"
+#include <errno.h>
+
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_ifc.h>
+#include <asm/arch/ifc.h>
+
+#ifdef DEBUG
+#include <assert.h>
+#else
+#define assert(...)
+#endif
+
+#define HAL_TRACE(...)
+
+HAL_IFC_REQUEST_ID_T g_halModuleIfcChannelOwner[SYS_IFC_STD_CHAN_NB];
+
+void hal_IfcOpen(void)
+{
+ u8 channel;
+
+ // Initialize the channel table with unknown requests.
+ for (channel = 0; channel < SYS_IFC_STD_CHAN_NB; channel++)
+ {
+ g_halModuleIfcChannelOwner[channel] = HAL_IFC_NO_REQWEST;
+ }
+}
+
+HAL_IFC_REQUEST_ID_T hal_IfcGetOwner(u8 channel)
+{
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return HAL_IFC_NO_REQWEST;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ return g_halModuleIfcChannelOwner[channel];
+}
+
+void hal_IfcChannelRelease(HAL_IFC_REQUEST_ID_T requestId, u8 channel)
+{
+ //u32 status;
+
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ //status = hal_SysEnterCriticalSection();
+ if (g_halModuleIfcChannelOwner[channel] == requestId)
+ {
+ // disable this channel
+ hwp_sysIfc->std_ch[channel].control = (SYS_IFC_REQ_SRC(requestId)
+ | SYS_IFC_CH_RD_HW_EXCH
+ | SYS_IFC_DISABLE);
+ // read the status of this channel
+ if (hwp_sysIfc->std_ch[channel].status & SYS_IFC_ENABLE)
+ {
+ HAL_TRACE(_HAL | TSTDOUT,0," Strange, the released channel not disabled yet");
+ }
+ // Write the TC to 0 for next time the channel is re-enabled
+ hwp_sysIfc->std_ch[channel].tc = 0;
+ }
+ //hal_SysExitCriticalSection(status);
+}
+
+void hal_IfcChannelFlush(HAL_IFC_REQUEST_ID_T requestId, u8 channel)
+{
+ //u32 status;
+
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ // Check that the channel is really owned by the peripheral
+ // which is doing the request, it could have been release
+ // automatically or by an IRQ handler.
+ //status = hal_SysEnterCriticalSection();
+ if (g_halModuleIfcChannelOwner[channel] == requestId)
+ {
+ // If fifo not empty, flush it.
+ if ( !(hwp_sysIfc->std_ch[channel].status & SYS_IFC_FIFO_EMPTY) )
+ {
+ hwp_sysIfc->std_ch[channel].control =
+ hwp_sysIfc->std_ch[channel].control | SYS_IFC_FLUSH;
+ }
+ }
+ //hal_SysExitCriticalSection(status);
+}
+
+BOOL hal_IfcChannelIsFifoEmpty(HAL_IFC_REQUEST_ID_T requestId, u8 channel)
+{
+ //u32 status;
+ BOOL fifoIsEmpty = TRUE;
+
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return fifoIsEmpty;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ // Check that the channel is really owned by the peripheral
+ // which is doing the request, it could have been release
+ // automatically or by an IRQ handler.
+ //status = hal_SysEnterCriticalSection();
+ if (g_halModuleIfcChannelOwner[channel] == requestId)
+ {
+ fifoIsEmpty =
+ (FALSE != (hwp_sysIfc->std_ch[channel].status & SYS_IFC_FIFO_EMPTY));
+ }
+ //hal_SysExitCriticalSection(status);
+
+ return fifoIsEmpty;
+}
+
+u8 hal_IfcTransferStart(HAL_IFC_REQUEST_ID_T requestId, u8* memStartAddr, u32 xferSize, HAL_IFC_MODE_T ifcMode)
+{
+ //u32 status = hal_SysEnterCriticalSection();
+ u8 channel;
+ u8 i;
+
+ // Check buffer alignment depending on the mode
+ if (ifcMode != HAL_IFC_SIZE_8_MODE_MANUAL && ifcMode != HAL_IFC_SIZE_8_MODE_AUTO)
+ {
+ // Then ifcMode == HAL_IFC_SIZE_32, check word alignment
+ assert(((u32)memStartAddr%4) == 0,
+ "HAL IFC: 32 bits transfer misaligned 0x@%08X", memStartAddr);
+ }
+ else
+ {
+ // ifcMode == HAL_IFC_SIZE_8, nothing to check
+ }
+
+ // Check the requested id is not currently already used.
+ for (i = 0; i < SYS_IFC_STD_CHAN_NB ; i++)
+ {
+ if (GET_BITFIELD(hwp_sysIfc->std_ch[i].control, SYS_IFC_REQ_SRC) == requestId)
+ {
+ // This channel is or was used for the requestId request.
+ // Check it is still in use.
+ assert((hwp_sysIfc->std_ch[i].status & SYS_IFC_ENABLE) == 0,
+ "HAL: Attempt to use the IFC to deal with a %d"
+ " request still active on channel %d", requestId, i);
+ }
+ }
+
+ channel = SYS_IFC_CH_TO_USE(hwp_sysIfc->get_ch) ;
+
+ if (channel >= SYS_IFC_STD_CHAN_NB)
+ {
+ serial_puts("HAL_UNKNOWN_CHANNEL\n");
+ //hal_SysExitCriticalSection(status);
+ return HAL_UNKNOWN_CHANNEL;
+ }
+
+ g_halModuleIfcChannelOwner[channel] = requestId;
+ hwp_sysIfc->std_ch[channel].start_addr = (u32) memStartAddr;
+ hwp_sysIfc->std_ch[channel].tc = xferSize;
+ hwp_sysIfc->std_ch[channel].control = (SYS_IFC_REQ_SRC(requestId)
+ | ifcMode
+ | SYS_IFC_CH_RD_HW_EXCH
+ | SYS_IFC_ENABLE);
+
+ //hal_SysExitCriticalSection(status);
+ return channel;
+}
+
diff --git a/arch/arm/cpu/arm926ejs/rda/reset.S b/arch/arm/cpu/arm926ejs/rda/reset.S
new file mode 100644
index 0000000000..51748160ae
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/reset.S
@@ -0,0 +1,32 @@
+/*
+ * Processor reset using WDT for TI TMS320DM644x SoC.
+ *
+ * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+ *
+ * -----------------------------------------------------
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+.globl reset_cpu
+reset_cpu:
+ nop
+ nop
+ nop
+ nop
+reset_cpu_loop:
+ b reset_cpu_loop
+
diff --git a/arch/arm/cpu/arm926ejs/rda/serial.c b/arch/arm/cpu/arm926ejs/rda/serial.c
new file mode 100644
index 0000000000..f7c1d2d244
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/serial.c
@@ -0,0 +1,132 @@
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/reg_uart.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void _serial_set_baudrate(int rate)
+{
+ hwp_sysCtrlAp->Cfg_Clk_Uart[2] = 0x36; // 115200 @ 26MHz
+ //hwp_sysCtrlAp->Cfg_Clk_Uart[2] = 0x05; // 921600 @ 26MHz
+}
+
+void _serial_enable_rtscts(void)
+{
+ hwp_uart->ctrl |= UART_AUTO_FLOW_CONTROL;
+}
+
+void _serial_disable_rtscts(void)
+{
+ hwp_uart->ctrl &= ~UART_AUTO_FLOW_CONTROL;
+}
+
+void _serial_init(void)
+{
+ _serial_set_baudrate(CONFIG_BAUDRATE);
+ hwp_uart->triggers = UART_AFC_LEVEL(1); //7 ?
+
+ hwp_uart->ctrl = UART_ENABLE | UART_DATA_BITS_8_BITS |
+ UART_TX_STOP_BITS_1_BIT | UART_PARITY_ENABLE_NO;
+
+ /* Allow reception */
+ hwp_uart->CMD_Set = UART_RTS;
+}
+
+void _serial_deinit(void)
+{
+ hwp_uart->ctrl = 0;
+ hwp_uart->CMD_Clr = UART_RTS;
+}
+
+/*
+ * Test whether a character is in the RX buffer
+ */
+int _serial_tstc(const int port)
+{
+ return (GET_BITFIELD(hwp_uart->status, UART_RX_FIFO_LEVEL));
+}
+
+int _serial_getc(const int port)
+{
+ /* wait for character to arrive */ ;
+ while (!(GET_BITFIELD(hwp_uart->status, UART_RX_FIFO_LEVEL)))
+ ;
+
+ return (hwp_uart->rxtx_buffer & 0xff);
+}
+
+void _serial_putc_hw(const char c, const int port)
+{
+ // Place in the TX Fifo ?
+ while (!(GET_BITFIELD(hwp_uart->status, UART_TX_FIFO_SPACE)))
+ ;
+ hwp_uart->rxtx_buffer = (u32)c;
+}
+
+void _serial_putc(const char c, const int port)
+{
+ if (c == '\n') {
+ _serial_putc_hw('\r', 0);
+ }
+ _serial_putc_hw(c, 0);
+}
+
+void _serial_puts(const char *s, const int port)
+{
+ while (*s) {
+ _serial_putc(*s++, 0);
+ }
+}
+
+static int hwflow = 0; /* turned off by default */
+int hwflow_onoff(int on)
+{
+ switch(on) {
+ case 0:
+ default:
+ break; /* return current */
+ case 1:
+ hwflow = 1;
+ _serial_enable_rtscts(); /* turn on */
+ break;
+ case -1:
+ hwflow = 0;
+ _serial_disable_rtscts(); /* turn off */
+ break;
+ }
+ return hwflow;
+}
+
+int serial_init(void)
+{
+ //_serial_init(); // already init in boot_test
+ return 0;
+}
+
+int serial_getc(void)
+{
+ return _serial_getc(0);
+}
+
+int serial_tstc(void)
+{
+ return _serial_tstc(0);
+}
+
+void serial_putc(const char c)
+{
+ _serial_putc(c, 0);
+}
+
+void serial_puts(const char *s)
+{
+ _serial_puts(s, 0);
+}
+
+void serial_setbrg (void)
+{
+}
+
diff --git a/arch/arm/cpu/arm926ejs/rda/spl.c b/arch/arm/cpu/arm926ejs/rda/spl.c
new file mode 100644
index 0000000000..5111638288
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/spl.c
@@ -0,0 +1,74 @@
+#include <common.h>
+#include <asm/u-boot.h>
+#include <asm/utils.h>
+#include <nand.h>
+#include <malloc.h>
+
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+
+DECLARE_GLOBAL_DATA_PTR;
+/* Define global data structure pointer to it*/
+static gd_t gdata __attribute__ ((section(".data")));
+static bd_t bdata __attribute__ ((section(".data")));
+
+#else
+
+void puts(const char *str)
+{
+ while (*str)
+ putc(*str++);
+}
+
+void putc(char c)
+{
+}
+
+#endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */
+
+inline void hang(void)
+{
+ puts("### ERROR ### Please RESET the board ###\n");
+ for (;;)
+ ;
+}
+
+void board_init_f(ulong dummy)
+{
+ relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE);
+}
+
+void board_init_r(gd_t *id, ulong dummy)
+{
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+ gd = &gdata;
+ gd->bd = &bdata;
+ gd->flags |= GD_FLG_RELOC;
+ gd->baudrate = CONFIG_BAUDRATE;
+ serial_init(); /* serial communications setup */
+ gd->have_console = 1;
+#endif
+ puts("board_init_r\n");
+ while(1)
+ ;
+#if 0
+#ifdef CONFIG_SPL_NAND_LOAD
+ nand_init();
+ puts("Nand boot...\n");
+ nand_boot();
+#endif
+#ifdef CONFIG_SPL_SPI_LOAD
+ mem_malloc_init(CONFIG_SYS_TEXT_BASE - CONFIG_SYS_MALLOC_LEN,
+ CONFIG_SYS_MALLOC_LEN);
+
+ gd = &gdata;
+ gd->bd = &bdata;
+ gd->flags |= GD_FLG_RELOC;
+ gd->baudrate = CONFIG_BAUDRATE;
+ serial_init(); /* serial communications setup */
+ gd->have_console = 1;
+
+ puts("SPI boot...\n");
+ spi_boot();
+#endif
+#endif
+}
diff --git a/arch/arm/cpu/arm926ejs/rda/timer.c b/arch/arm/cpu/arm926ejs/rda/timer.c
new file mode 100644
index 0000000000..a54081b7b2
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/rda/timer.c
@@ -0,0 +1,93 @@
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+typedef volatile struct
+{
+ REG32 OSTimer_Ctrl; //0x00000000
+ REG32 OSTimer_CurVal; //0x00000004
+ REG32 WDTimer_Ctrl; //0x00000008
+ REG32 WDTimer_LoadVal; //0x0000000C
+ REG32 HWTimer_Ctrl; //0x00000010
+ REG32 HWTimer_CurVal; //0x00000014
+ REG32 Timer_Irq_Mask_Set; //0x00000018
+ REG32 Timer_Irq_Mask_Clr; //0x0000001C
+ REG32 Timer_Irq_Clr; //0x00000020
+ REG32 Timer_Irq_Cause; //0x00000024
+} HWP_TIMER_T;
+
+#define hwp_timer ((HWP_TIMER_T*)(RDA_TIMER_BASE))
+
+int timer_init(void)
+{
+ gd->timer_rate_hz = CONFIG_SYS_HZ_CLOCK;
+ gd->timer_reset_value = 0;
+
+ /* We are using timer34 in unchained 32-bit mode, full speed */
+ return(0);
+}
+
+void reset_timer(void)
+{
+ gd->timer_reset_value = get_ticks();
+}
+
+/*
+ * Get the current 64 bit timer tick count
+ */
+unsigned long long get_ticks(void)
+{
+ unsigned long now = hwp_timer->HWTimer_CurVal;
+
+ /* increment tbu if tbl has rolled over */
+ if (now < gd->tbl)
+ gd->tbu++;
+ gd->tbl = now;
+
+ return (((unsigned long long)gd->tbu) << 32) | gd->tbl;
+}
+
+ulong get_timer(ulong base)
+{
+ unsigned long long timer_diff;
+
+ timer_diff = get_ticks() - gd->timer_reset_value;
+
+ return (timer_diff / (gd->timer_rate_hz / CONFIG_SYS_HZ)) - base;
+}
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+void __udelay(unsigned long usec)
+{
+#if 0 /* our timer is 16kHz, can NOT support udelay */
+ unsigned long long endtime;
+
+ endtime = ((unsigned long long)usec * gd->timer_rate_hz) / 1000000UL;
+ endtime += get_ticks();
+
+ while (get_ticks() < endtime)
+ ;
+#else /* use loop instead */
+#define USEC_LOOP (1)
+ int i, j;
+ for (i=0;i<(usec);i++)
+ for (j=0;j<USEC_LOOP;j++)
+ ;
+#endif
+}
+
+#pragma GCC pop_options
+
+/*
+ * This function is derived from PowerPC code (timebase clock frequency).
+ * On ARM it returns the number of timer ticks per second.
+ */
+ulong get_tbclk(void)
+{
+ return CONFIG_SYS_HZ;
+}
diff --git a/arch/arm/cpu/armv7/am33xx/board.c b/arch/arm/cpu/armv7/am33xx/board.c
index d64ae6936c..6b7a494d7c 100644
--- a/arch/arm/cpu/armv7/am33xx/board.c
+++ b/arch/arm/cpu/armv7/am33xx/board.c
@@ -105,7 +105,7 @@ void init_timer(void)
#if defined(CONFIG_OMAP_HSMMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- return omap_mmc_init(0);
+ return omap_mmc_init(0, 0, 0);
}
#endif
diff --git a/arch/arm/cpu/armv7/config.mk b/arch/arm/cpu/armv7/config.mk
index f532d62e57..5407cb68a8 100644
--- a/arch/arm/cpu/armv7/config.mk
+++ b/arch/arm/cpu/armv7/config.mk
@@ -22,8 +22,11 @@
#
PLATFORM_RELFLAGS += -fno-common -ffixed-r8 -msoft-float
-# Make ARMv5 to allow more compilers to work, even though its v7a.
-PLATFORM_CPPFLAGS += -march=armv5
+# If armv7-a is not supported by GCC fall-back to armv5, which is
+# supported by more tool-chains
+PF_CPPFLAGS_ARMV7 := $(call cc-option, -march=armv7-a, -march=armv5)
+PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_ARMV7)
+
# =========================================================================
#
# Supply options according to compiler version
diff --git a/arch/arm/cpu/armv7/exynos/Makefile b/arch/arm/cpu/armv7/exynos/Makefile
index 124c38018c..90ec2bd404 100644
--- a/arch/arm/cpu/armv7/exynos/Makefile
+++ b/arch/arm/cpu/armv7/exynos/Makefile
@@ -22,7 +22,7 @@ include $(TOPDIR)/config.mk
LIB = $(obj)lib$(SOC).o
-COBJS += clock.o soc.o
+COBJS += clock.o power.o soc.o system.o
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/armv7/exynos/clock.c b/arch/arm/cpu/armv7/exynos/clock.c
index 2f7048b6a3..330bd75da9 100644
--- a/arch/arm/cpu/armv7/exynos/clock.c
+++ b/arch/arm/cpu/armv7/exynos/clock.c
@@ -414,6 +414,170 @@ static void exynos5_set_mmc_clk(int dev_index, unsigned int div)
writel(val, addr);
}
+/* get_lcd_clk: return lcd clock frequency */
+static unsigned long exynos4_get_lcd_clk(void)
+{
+ struct exynos4_clock *clk =
+ (struct exynos4_clock *)samsung_get_base_clock();
+ unsigned long pclk, sclk;
+ unsigned int sel;
+ unsigned int ratio;
+
+ /*
+ * CLK_SRC_LCD0
+ * FIMD0_SEL [3:0]
+ */
+ sel = readl(&clk->src_lcd0);
+ sel = sel & 0xf;
+
+ /*
+ * 0x6: SCLK_MPLL
+ * 0x7: SCLK_EPLL
+ * 0x8: SCLK_VPLL
+ */
+ if (sel == 0x6)
+ sclk = get_pll_clk(MPLL);
+ else if (sel == 0x7)
+ sclk = get_pll_clk(EPLL);
+ else if (sel == 0x8)
+ sclk = get_pll_clk(VPLL);
+ else
+ return 0;
+
+ /*
+ * CLK_DIV_LCD0
+ * FIMD0_RATIO [3:0]
+ */
+ ratio = readl(&clk->div_lcd0);
+ ratio = ratio & 0xf;
+
+ pclk = sclk / (ratio + 1);
+
+ return pclk;
+}
+
+void exynos4_set_lcd_clk(void)
+{
+ struct exynos4_clock *clk =
+ (struct exynos4_clock *)samsung_get_base_clock();
+ unsigned int cfg = 0;
+
+ /*
+ * CLK_GATE_BLOCK
+ * CLK_CAM [0]
+ * CLK_TV [1]
+ * CLK_MFC [2]
+ * CLK_G3D [3]
+ * CLK_LCD0 [4]
+ * CLK_LCD1 [5]
+ * CLK_GPS [7]
+ */
+ cfg = readl(&clk->gate_block);
+ cfg |= 1 << 4;
+ writel(cfg, &clk->gate_block);
+
+ /*
+ * CLK_SRC_LCD0
+ * FIMD0_SEL [3:0]
+ * MDNIE0_SEL [7:4]
+ * MDNIE_PWM0_SEL [8:11]
+ * MIPI0_SEL [12:15]
+ * set lcd0 src clock 0x6: SCLK_MPLL
+ */
+ cfg = readl(&clk->src_lcd0);
+ cfg &= ~(0xf);
+ cfg |= 0x6;
+ writel(cfg, &clk->src_lcd0);
+
+ /*
+ * CLK_GATE_IP_LCD0
+ * CLK_FIMD0 [0]
+ * CLK_MIE0 [1]
+ * CLK_MDNIE0 [2]
+ * CLK_DSIM0 [3]
+ * CLK_SMMUFIMD0 [4]
+ * CLK_PPMULCD0 [5]
+ * Gating all clocks for FIMD0
+ */
+ cfg = readl(&clk->gate_ip_lcd0);
+ cfg |= 1 << 0;
+ writel(cfg, &clk->gate_ip_lcd0);
+
+ /*
+ * CLK_DIV_LCD0
+ * FIMD0_RATIO [3:0]
+ * MDNIE0_RATIO [7:4]
+ * MDNIE_PWM0_RATIO [11:8]
+ * MDNIE_PWM_PRE_RATIO [15:12]
+ * MIPI0_RATIO [19:16]
+ * MIPI0_PRE_RATIO [23:20]
+ * set fimd ratio
+ */
+ cfg &= ~(0xf);
+ cfg |= 0x1;
+ writel(cfg, &clk->div_lcd0);
+}
+
+void exynos4_set_mipi_clk(void)
+{
+ struct exynos4_clock *clk =
+ (struct exynos4_clock *)samsung_get_base_clock();
+ unsigned int cfg = 0;
+
+ /*
+ * CLK_SRC_LCD0
+ * FIMD0_SEL [3:0]
+ * MDNIE0_SEL [7:4]
+ * MDNIE_PWM0_SEL [8:11]
+ * MIPI0_SEL [12:15]
+ * set mipi0 src clock 0x6: SCLK_MPLL
+ */
+ cfg = readl(&clk->src_lcd0);
+ cfg &= ~(0xf << 12);
+ cfg |= (0x6 << 12);
+ writel(cfg, &clk->src_lcd0);
+
+ /*
+ * CLK_SRC_MASK_LCD0
+ * FIMD0_MASK [0]
+ * MDNIE0_MASK [4]
+ * MDNIE_PWM0_MASK [8]
+ * MIPI0_MASK [12]
+ * set src mask mipi0 0x1: Unmask
+ */
+ cfg = readl(&clk->src_mask_lcd0);
+ cfg |= (0x1 << 12);
+ writel(cfg, &clk->src_mask_lcd0);
+
+ /*
+ * CLK_GATE_IP_LCD0
+ * CLK_FIMD0 [0]
+ * CLK_MIE0 [1]
+ * CLK_MDNIE0 [2]
+ * CLK_DSIM0 [3]
+ * CLK_SMMUFIMD0 [4]
+ * CLK_PPMULCD0 [5]
+ * Gating all clocks for MIPI0
+ */
+ cfg = readl(&clk->gate_ip_lcd0);
+ cfg |= 1 << 3;
+ writel(cfg, &clk->gate_ip_lcd0);
+
+ /*
+ * CLK_DIV_LCD0
+ * FIMD0_RATIO [3:0]
+ * MDNIE0_RATIO [7:4]
+ * MDNIE_PWM0_RATIO [11:8]
+ * MDNIE_PWM_PRE_RATIO [15:12]
+ * MIPI0_RATIO [19:16]
+ * MIPI0_PRE_RATIO [23:20]
+ * set mipi ratio
+ */
+ cfg &= ~(0xf << 16);
+ cfg |= (0x1 << 16);
+ writel(cfg, &clk->div_lcd0);
+}
+
unsigned long get_pll_clk(int pllreg)
{
if (cpu_is_exynos5())
@@ -453,3 +617,23 @@ void set_mmc_clk(int dev_index, unsigned int div)
else
exynos4_set_mmc_clk(dev_index, div);
}
+
+unsigned long get_lcd_clk(void)
+{
+ if (cpu_is_exynos4())
+ return exynos4_get_lcd_clk();
+ else
+ return 0;
+}
+
+void set_lcd_clk(void)
+{
+ if (cpu_is_exynos4())
+ exynos4_set_lcd_clk();
+}
+
+void set_mipi_clk(void)
+{
+ if (cpu_is_exynos4())
+ exynos4_set_mipi_clk();
+}
diff --git a/arch/arm/cpu/armv7/exynos/power.c b/arch/arm/cpu/armv7/exynos/power.c
new file mode 100644
index 0000000000..c765304fd5
--- /dev/null
+++ b/arch/arm/cpu/armv7/exynos/power.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ * Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/power.h>
+
+static void exynos4_mipi_phy_control(unsigned int dev_index,
+ unsigned int enable)
+{
+ struct exynos4_power *pmu =
+ (struct exynos4_power *)samsung_get_base_power();
+ unsigned int addr, cfg = 0;
+
+ if (dev_index == 0)
+ addr = (unsigned int)&pmu->mipi_phy0_control;
+ else
+ addr = (unsigned int)&pmu->mipi_phy1_control;
+
+
+ cfg = readl(addr);
+ if (enable)
+ cfg |= (EXYNOS_MIPI_PHY_MRESETN | EXYNOS_MIPI_PHY_ENABLE);
+ else
+ cfg &= ~(EXYNOS_MIPI_PHY_MRESETN | EXYNOS_MIPI_PHY_ENABLE);
+
+ writel(cfg, addr);
+}
+
+void set_mipi_phy_ctrl(unsigned int dev_index, unsigned int enable)
+{
+ if (cpu_is_exynos4())
+ exynos4_mipi_phy_control(dev_index, enable);
+}
diff --git a/arch/arm/cpu/armv7/exynos/system.c b/arch/arm/cpu/armv7/exynos/system.c
new file mode 100644
index 0000000000..6c34730b97
--- /dev/null
+++ b/arch/arm/cpu/armv7/exynos/system.c
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ * Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/system.h>
+
+static void exynos4_set_system_display(void)
+{
+ struct exynos4_sysreg *sysreg =
+ (struct exynos4_sysreg *)samsung_get_base_sysreg();
+ unsigned int cfg = 0;
+
+ /*
+ * system register path set
+ * 0: MIE/MDNIE
+ * 1: FIMD Bypass
+ */
+ cfg = readl(&sysreg->display_ctrl);
+ cfg |= (1 << 1);
+ writel(cfg, &sysreg->display_ctrl);
+}
+
+void set_system_display_ctrl(void)
+{
+ if (cpu_is_exynos4())
+ exynos4_set_system_display();
+}
diff --git a/arch/arm/cpu/armv7/imx-common/cpu.c b/arch/arm/cpu/armv7/imx-common/cpu.c
index 3d58d8ae91..b3195dd6fb 100644
--- a/arch/arm/cpu/armv7/imx-common/cpu.c
+++ b/arch/arm/cpu/armv7/imx-common/cpu.c
@@ -29,12 +29,13 @@
#include <asm/arch/imx-regs.h>
#include <asm/arch/clock.h>
#include <asm/arch/sys_proto.h>
+#include <asm/arch/crm_regs.h>
#ifdef CONFIG_FSL_ESDHC
#include <fsl_esdhc.h>
#endif
-static char *get_reset_cause(void)
+char *get_reset_cause(void)
{
u32 cause;
struct src *src_regs = (struct src *)SRC_BASE_ADDR;
@@ -127,3 +128,15 @@ void reset_cpu(ulong addr)
{
__raw_writew(4, WDOG1_BASE_ADDR);
}
+
+u32 get_ahb_clk(void)
+{
+ struct mxc_ccm_reg *imx_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
+ u32 reg, ahb_podf;
+
+ reg = __raw_readl(&imx_ccm->cbcdr);
+ reg &= MXC_CCM_CBCDR_AHB_PODF_MASK;
+ ahb_podf = reg >> MXC_CCM_CBCDR_AHB_PODF_OFFSET;
+
+ return get_periph_clk() / (ahb_podf + 1);
+}
diff --git a/arch/arm/cpu/armv7/mx5/clock.c b/arch/arm/cpu/armv7/mx5/clock.c
index e92f10623a..fc2406bcad 100644
--- a/arch/arm/cpu/armv7/mx5/clock.c
+++ b/arch/arm/cpu/armv7/mx5/clock.c
@@ -30,6 +30,7 @@
#include <asm/arch/crm_regs.h>
#include <asm/arch/clock.h>
#include <div64.h>
+#include <asm/arch/sys_proto.h>
enum pll_clocks {
PLL1_CLOCK = 0,
@@ -48,6 +49,42 @@ struct mxc_pll_reg *mxc_plls[PLL_CLOCKS] = {
#endif
};
+#define AHB_CLK_ROOT 133333333
+#define SZ_DEC_1M 1000000
+#define PLL_PD_MAX 16 /* Actual pd+1 */
+#define PLL_MFI_MAX 15
+#define PLL_MFI_MIN 5
+#define ARM_DIV_MAX 8
+#define IPG_DIV_MAX 4
+#define AHB_DIV_MAX 8
+#define EMI_DIV_MAX 8
+#define NFC_DIV_MAX 8
+
+#define MX5_CBCMR 0x00015154
+#define MX5_CBCDR 0x02888945
+
+struct fixed_pll_mfd {
+ u32 ref_clk_hz;
+ u32 mfd;
+};
+
+const struct fixed_pll_mfd fixed_mfd[] = {
+ {CONFIG_SYS_MX5_HCLK, 24 * 16},
+};
+
+struct pll_param {
+ u32 pd;
+ u32 mfi;
+ u32 mfn;
+ u32 mfd;
+};
+
+#define PLL_FREQ_MAX(ref_clk) (4 * (ref_clk) * PLL_MFI_MAX)
+#define PLL_FREQ_MIN(ref_clk) \
+ ((2 * (ref_clk) * (PLL_MFI_MIN - 1)) / PLL_PD_MAX)
+#define MAX_DDR_CLK 420000000
+#define NFC_CLK_MAX 34000000
+
struct mxc_ccm_reg *mxc_ccm = (struct mxc_ccm_reg *)MXC_CCM_BASE;
void set_usboh3_clk(void)
@@ -192,7 +229,7 @@ u32 get_mcu_main_clk(void)
/*
* Get the rate of peripheral's root clock.
*/
-static u32 get_periph_clk(void)
+u32 get_periph_clk(void)
{
u32 reg;
@@ -213,22 +250,6 @@ static u32 get_periph_clk(void)
}
/*
- * Get the rate of ahb clock.
- */
-static u32 get_ahb_clk(void)
-{
- uint32_t freq, div, reg;
-
- freq = get_periph_clk();
-
- reg = __raw_readl(&mxc_ccm->cbcdr);
- div = ((reg & MXC_CCM_CBCDR_AHB_PODF_MASK) >>
- MXC_CCM_CBCDR_AHB_PODF_OFFSET) + 1;
-
- return freq / div;
-}
-
-/*
* Get the rate of ipg clock.
*/
static u32 get_ipg_clk(void)
@@ -306,7 +327,7 @@ static u32 get_uart_clk(void)
/*
* This function returns the low power audio clock.
*/
-u32 get_lp_apm(void)
+static u32 get_lp_apm(void)
{
u32 ret_val = 0;
u32 ccsr = __raw_readl(&mxc_ccm->ccsr);
@@ -322,7 +343,7 @@ u32 get_lp_apm(void)
/*
* get cspi clock rate.
*/
-u32 imx_get_cspiclk(void)
+static u32 imx_get_cspiclk(void)
{
u32 ret_val = 0, pdf, pre_pdf, clk_sel;
u32 cscmr1 = __raw_readl(&mxc_ccm->cscmr1);
@@ -359,8 +380,77 @@ u32 imx_get_cspiclk(void)
return ret_val;
}
+static u32 get_axi_a_clk(void)
+{
+ u32 cbcdr = __raw_readl(&mxc_ccm->cbcdr);
+ u32 pdf = (cbcdr & MXC_CCM_CBCDR_AXI_A_PODF_MASK) \
+ >> MXC_CCM_CBCDR_AXI_A_PODF_OFFSET;
+
+ return get_periph_clk() / (pdf + 1);
+}
+
+static u32 get_axi_b_clk(void)
+{
+ u32 cbcdr = __raw_readl(&mxc_ccm->cbcdr);
+ u32 pdf = (cbcdr & MXC_CCM_CBCDR_AXI_B_PODF_MASK) \
+ >> MXC_CCM_CBCDR_AXI_B_PODF_OFFSET;
+
+ return get_periph_clk() / (pdf + 1);
+}
+
+static u32 get_emi_slow_clk(void)
+{
+ u32 cbcdr = __raw_readl(&mxc_ccm->cbcdr);
+ u32 emi_clk_sel = cbcdr & MXC_CCM_CBCDR_EMI_CLK_SEL;
+ u32 pdf = (cbcdr & MXC_CCM_CBCDR_EMI_PODF_MASK) \
+ >> MXC_CCM_CBCDR_EMI_PODF_OFFSET;
+
+ if (emi_clk_sel)
+ return get_ahb_clk() / (pdf + 1);
+
+ return get_periph_clk() / (pdf + 1);
+}
+
+static u32 get_ddr_clk(void)
+{
+ u32 ret_val = 0;
+ u32 cbcmr = __raw_readl(&mxc_ccm->cbcmr);
+ u32 ddr_clk_sel = (cbcmr & MXC_CCM_CBCMR_DDR_CLK_SEL_MASK) \
+ >> MXC_CCM_CBCMR_DDR_CLK_SEL_OFFSET;
+#ifdef CONFIG_MX51
+ u32 cbcdr = __raw_readl(&mxc_ccm->cbcdr);
+ if (cbcdr & MXC_CCM_CBCDR_DDR_HIFREQ_SEL) {
+ u32 ddr_clk_podf = (cbcdr & MXC_CCM_CBCDR_DDR_PODF_MASK) >> \
+ MXC_CCM_CBCDR_DDR_PODF_OFFSET;
+
+ ret_val = decode_pll(mxc_plls[PLL1_CLOCK], CONFIG_SYS_MX5_HCLK);
+ ret_val /= ddr_clk_podf + 1;
+
+ return ret_val;
+ }
+#endif
+ switch (ddr_clk_sel) {
+ case 0:
+ ret_val = get_axi_a_clk();
+ break;
+ case 1:
+ ret_val = get_axi_b_clk();
+ break;
+ case 2:
+ ret_val = get_emi_slow_clk();
+ break;
+ case 3:
+ ret_val = get_ahb_clk();
+ break;
+ default:
+ break;
+ }
+
+ return ret_val;
+}
+
/*
- * The API of get mxc clockes.
+ * The API of get mxc clocks.
*/
unsigned int mxc_get_clock(enum mxc_clock clk)
{
@@ -380,10 +470,14 @@ unsigned int mxc_get_clock(enum mxc_clock clk)
case MXC_FEC_CLK:
return decode_pll(mxc_plls[PLL1_CLOCK],
CONFIG_SYS_MX5_HCLK);
+ case MXC_SATA_CLK:
+ return get_ahb_clk();
+ case MXC_DDR_CLK:
+ return get_ddr_clk();
default:
break;
}
- return -1;
+ return -EINVAL;
}
u32 imx_get_uartclk(void)
@@ -397,6 +491,362 @@ u32 imx_get_fecclk(void)
return mxc_get_clock(MXC_IPG_CLK);
}
+static int gcd(int m, int n)
+{
+ int t;
+ while (m > 0) {
+ if (n > m) {
+ t = m;
+ m = n;
+ n = t;
+ } /* swap */
+ m -= n;
+ }
+ return n;
+}
+
+/*
+ * This is to calculate various parameters based on reference clock and
+ * targeted clock based on the equation:
+ * t_clk = 2*ref_freq*(mfi + mfn/(mfd+1))/(pd+1)
+ * This calculation is based on a fixed MFD value for simplicity.
+ */
+static int calc_pll_params(u32 ref, u32 target, struct pll_param *pll)
+{
+ u64 pd, mfi = 1, mfn, mfd, t1;
+ u32 n_target = target;
+ u32 n_ref = ref, i;
+
+ /*
+ * Make sure targeted freq is in the valid range.
+ * Otherwise the following calculation might be wrong!!!
+ */
+ if (n_target < PLL_FREQ_MIN(ref) ||
+ n_target > PLL_FREQ_MAX(ref)) {
+ printf("Targeted peripheral clock should be"
+ "within [%d - %d]\n",
+ PLL_FREQ_MIN(ref) / SZ_DEC_1M,
+ PLL_FREQ_MAX(ref) / SZ_DEC_1M);
+ return -EINVAL;
+ }
+
+ for (i = 0; i < ARRAY_SIZE(fixed_mfd); i++) {
+ if (fixed_mfd[i].ref_clk_hz == ref) {
+ mfd = fixed_mfd[i].mfd;
+ break;
+ }
+ }
+
+ if (i == ARRAY_SIZE(fixed_mfd))
+ return -EINVAL;
+
+ /* Use n_target and n_ref to avoid overflow */
+ for (pd = 1; pd <= PLL_PD_MAX; pd++) {
+ t1 = n_target * pd;
+ do_div(t1, (4 * n_ref));
+ mfi = t1;
+ if (mfi > PLL_MFI_MAX)
+ return -EINVAL;
+ else if (mfi < 5)
+ continue;
+ break;
+ }
+ /*
+ * Now got pd and mfi already
+ *
+ * mfn = (((n_target * pd) / 4 - n_ref * mfi) * mfd) / n_ref;
+ */
+ t1 = n_target * pd;
+ do_div(t1, 4);
+ t1 -= n_ref * mfi;
+ t1 *= mfd;
+ do_div(t1, n_ref);
+ mfn = t1;
+ debug("ref=%d, target=%d, pd=%d," "mfi=%d,mfn=%d, mfd=%d\n",
+ ref, n_target, (u32)pd, (u32)mfi, (u32)mfn, (u32)mfd);
+ i = 1;
+ if (mfn != 0)
+ i = gcd(mfd, mfn);
+ pll->pd = (u32)pd;
+ pll->mfi = (u32)mfi;
+ do_div(mfn, i);
+ pll->mfn = (u32)mfn;
+ do_div(mfd, i);
+ pll->mfd = (u32)mfd;
+
+ return 0;
+}
+
+#define calc_div(tgt_clk, src_clk, limit) ({ \
+ u32 v = 0; \
+ if (((src_clk) % (tgt_clk)) <= 100) \
+ v = (src_clk) / (tgt_clk); \
+ else \
+ v = ((src_clk) / (tgt_clk)) + 1;\
+ if (v > limit) \
+ v = limit; \
+ (v - 1); \
+ })
+
+#define CHANGE_PLL_SETTINGS(pll, pd, fi, fn, fd) \
+ { \
+ __raw_writel(0x1232, &pll->ctrl); \
+ __raw_writel(0x2, &pll->config); \
+ __raw_writel((((pd) - 1) << 0) | ((fi) << 4), \
+ &pll->op); \
+ __raw_writel(fn, &(pll->mfn)); \
+ __raw_writel((fd) - 1, &pll->mfd); \
+ __raw_writel((((pd) - 1) << 0) | ((fi) << 4), \
+ &pll->hfs_op); \
+ __raw_writel(fn, &pll->hfs_mfn); \
+ __raw_writel((fd) - 1, &pll->hfs_mfd); \
+ __raw_writel(0x1232, &pll->ctrl); \
+ while (!__raw_readl(&pll->ctrl) & 0x1) \
+ ;\
+ }
+
+static int config_pll_clk(enum pll_clocks index, struct pll_param *pll_param)
+{
+ u32 ccsr = __raw_readl(&mxc_ccm->ccsr);
+ struct mxc_pll_reg *pll = mxc_plls[index];
+
+ switch (index) {
+ case PLL1_CLOCK:
+ /* Switch ARM to PLL2 clock */
+ __raw_writel(ccsr | 0x4, &mxc_ccm->ccsr);
+ CHANGE_PLL_SETTINGS(pll, pll_param->pd,
+ pll_param->mfi, pll_param->mfn,
+ pll_param->mfd);
+ /* Switch back */
+ __raw_writel(ccsr & ~0x4, &mxc_ccm->ccsr);
+ break;
+ case PLL2_CLOCK:
+ /* Switch to pll2 bypass clock */
+ __raw_writel(ccsr | 0x2, &mxc_ccm->ccsr);
+ CHANGE_PLL_SETTINGS(pll, pll_param->pd,
+ pll_param->mfi, pll_param->mfn,
+ pll_param->mfd);
+ /* Switch back */
+ __raw_writel(ccsr & ~0x2, &mxc_ccm->ccsr);
+ break;
+ case PLL3_CLOCK:
+ /* Switch to pll3 bypass clock */
+ __raw_writel(ccsr | 0x1, &mxc_ccm->ccsr);
+ CHANGE_PLL_SETTINGS(pll, pll_param->pd,
+ pll_param->mfi, pll_param->mfn,
+ pll_param->mfd);
+ /* Switch back */
+ __raw_writel(ccsr & ~0x1, &mxc_ccm->ccsr);
+ break;
+ case PLL4_CLOCK:
+ /* Switch to pll4 bypass clock */
+ __raw_writel(ccsr | 0x20, &mxc_ccm->ccsr);
+ CHANGE_PLL_SETTINGS(pll, pll_param->pd,
+ pll_param->mfi, pll_param->mfn,
+ pll_param->mfd);
+ /* Switch back */
+ __raw_writel(ccsr & ~0x20, &mxc_ccm->ccsr);
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+/* Config CPU clock */
+static int config_core_clk(u32 ref, u32 freq)
+{
+ int ret = 0;
+ struct pll_param pll_param;
+
+ memset(&pll_param, 0, sizeof(struct pll_param));
+
+ /* The case that periph uses PLL1 is not considered here */
+ ret = calc_pll_params(ref, freq, &pll_param);
+ if (ret != 0) {
+ printf("Error:Can't find pll parameters: %d\n", ret);
+ return ret;
+ }
+
+ return config_pll_clk(PLL1_CLOCK, &pll_param);
+}
+
+static int config_nfc_clk(u32 nfc_clk)
+{
+ u32 reg;
+ u32 parent_rate = get_emi_slow_clk();
+ u32 div = parent_rate / nfc_clk;
+
+ if (nfc_clk <= 0)
+ return -EINVAL;
+ if (div == 0)
+ div++;
+ if (parent_rate / div > NFC_CLK_MAX)
+ div++;
+ reg = __raw_readl(&mxc_ccm->cbcdr);
+ reg &= ~MXC_CCM_CBCDR_NFC_PODF_MASK;
+ reg |= (div - 1) << MXC_CCM_CBCDR_NFC_PODF_OFFSET;
+ __raw_writel(reg, &mxc_ccm->cbcdr);
+ while (__raw_readl(&mxc_ccm->cdhipr) != 0)
+ ;
+ return 0;
+}
+
+/* Config main_bus_clock for periphs */
+static int config_periph_clk(u32 ref, u32 freq)
+{
+ int ret = 0;
+ struct pll_param pll_param;
+
+ memset(&pll_param, 0, sizeof(struct pll_param));
+
+ if (__raw_readl(&mxc_ccm->cbcdr) & MXC_CCM_CBCDR_PERIPH_CLK_SEL) {
+ ret = calc_pll_params(ref, freq, &pll_param);
+ if (ret != 0) {
+ printf("Error:Can't find pll parameters: %d\n",
+ ret);
+ return ret;
+ }
+ switch ((__raw_readl(&mxc_ccm->cbcmr) & \
+ MXC_CCM_CBCMR_PERIPH_CLK_SEL_MASK) >> \
+ MXC_CCM_CBCMR_PERIPH_CLK_SEL_OFFSET) {
+ case 0:
+ return config_pll_clk(PLL1_CLOCK, &pll_param);
+ break;
+ case 1:
+ return config_pll_clk(PLL3_CLOCK, &pll_param);
+ break;
+ default:
+ return -EINVAL;
+ }
+ }
+
+ return 0;
+}
+
+static int config_ddr_clk(u32 emi_clk)
+{
+ u32 clk_src;
+ s32 shift = 0, clk_sel, div = 1;
+ u32 cbcmr = __raw_readl(&mxc_ccm->cbcmr);
+ u32 cbcdr = __raw_readl(&mxc_ccm->cbcdr);
+
+ if (emi_clk > MAX_DDR_CLK) {
+ printf("Warning:DDR clock should not exceed %d MHz\n",
+ MAX_DDR_CLK / SZ_DEC_1M);
+ emi_clk = MAX_DDR_CLK;
+ }
+
+ clk_src = get_periph_clk();
+ /* Find DDR clock input */
+ clk_sel = (cbcmr >> 10) & 0x3;
+ switch (clk_sel) {
+ case 0:
+ shift = 16;
+ break;
+ case 1:
+ shift = 19;
+ break;
+ case 2:
+ shift = 22;
+ break;
+ case 3:
+ shift = 10;
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ if ((clk_src % emi_clk) < 10000000)
+ div = clk_src / emi_clk;
+ else
+ div = (clk_src / emi_clk) + 1;
+ if (div > 8)
+ div = 8;
+
+ cbcdr = cbcdr & ~(0x7 << shift);
+ cbcdr |= ((div - 1) << shift);
+ __raw_writel(cbcdr, &mxc_ccm->cbcdr);
+ while (__raw_readl(&mxc_ccm->cdhipr) != 0)
+ ;
+ __raw_writel(0x0, &mxc_ccm->ccdr);
+
+ return 0;
+}
+
+/*
+ * This function assumes the expected core clock has to be changed by
+ * modifying the PLL. This is NOT true always but for most of the times,
+ * it is. So it assumes the PLL output freq is the same as the expected
+ * core clock (presc=1) unless the core clock is less than PLL_FREQ_MIN.
+ * In the latter case, it will try to increase the presc value until
+ * (presc*core_clk) is greater than PLL_FREQ_MIN. It then makes call to
+ * calc_pll_params() and obtains the values of PD, MFI,MFN, MFD based
+ * on the targeted PLL and reference input clock to the PLL. Lastly,
+ * it sets the register based on these values along with the dividers.
+ * Note 1) There is no value checking for the passed-in divider values
+ * so the caller has to make sure those values are sensible.
+ * 2) Also adjust the NFC divider such that the NFC clock doesn't
+ * exceed NFC_CLK_MAX.
+ * 3) IPU HSP clock is independent of AHB clock. Even it can go up to
+ * 177MHz for higher voltage, this function fixes the max to 133MHz.
+ * 4) This function should not have allowed diag_printf() calls since
+ * the serial driver has been stoped. But leave then here to allow
+ * easy debugging by NOT calling the cyg_hal_plf_serial_stop().
+ */
+int mxc_set_clock(u32 ref, u32 freq, enum mxc_clock clk)
+{
+ freq *= SZ_DEC_1M;
+
+ switch (clk) {
+ case MXC_ARM_CLK:
+ if (config_core_clk(ref, freq))
+ return -EINVAL;
+ break;
+ case MXC_PERIPH_CLK:
+ if (config_periph_clk(ref, freq))
+ return -EINVAL;
+ break;
+ case MXC_DDR_CLK:
+ if (config_ddr_clk(freq))
+ return -EINVAL;
+ break;
+ case MXC_NFC_CLK:
+ if (config_nfc_clk(freq))
+ return -EINVAL;
+ break;
+ default:
+ printf("Warning:Unsupported or invalid clock type\n");
+ }
+
+ return 0;
+}
+
+#ifdef CONFIG_MX53
+/*
+ * The clock for the external interface can be set to use internal clock
+ * if fuse bank 4, row 3, bit 2 is set.
+ * This is an undocumented feature and it was confirmed by Freescale's support:
+ * Fuses (but not pins) may be used to configure SATA clocks.
+ * Particularly the i.MX53 Fuse_Map contains the next information
+ * about configuring SATA clocks : SATA_ALT_REF_CLK[1:0] (offset 0x180C)
+ * '00' - 100MHz (External)
+ * '01' - 50MHz (External)
+ * '10' - 120MHz, internal (USB PHY)
+ * '11' - Reserved
+*/
+void mxc_set_sata_internal_clock(void)
+{
+ u32 *tmp_base =
+ (u32 *)(IIM_BASE_ADDR + 0x180c);
+
+ set_usb_phy1_clk();
+
+ writel((readl(tmp_base) & (~0x7)) | 0x4, tmp_base);
+}
+#endif
+
/*
* Dump some core clockes.
*/
@@ -419,6 +869,7 @@ int do_mx5_showclocks(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("AHB %8d kHz\n", mxc_get_clock(MXC_AHB_CLK) / 1000);
printf("IPG %8d kHz\n", mxc_get_clock(MXC_IPG_CLK) / 1000);
printf("IPG PERCLK %8d kHz\n", mxc_get_clock(MXC_IPG_PERCLK) / 1000);
+ printf("DDR %8d kHz\n", mxc_get_clock(MXC_DDR_CLK) / 1000);
return 0;
}
diff --git a/arch/arm/cpu/armv7/mx5/lowlevel_init.S b/arch/arm/cpu/armv7/mx5/lowlevel_init.S
index 74ab753a4a..683a7b53af 100644
--- a/arch/arm/cpu/armv7/mx5/lowlevel_init.S
+++ b/arch/arm/cpu/armv7/mx5/lowlevel_init.S
@@ -22,6 +22,7 @@
#include <config.h>
#include <asm/arch/imx-regs.h>
#include <generated/asm-offsets.h>
+#include <linux/linkage.h>
/*
* L2CC Cache setup/invalidation/disable
@@ -326,8 +327,7 @@
.section ".text.init", "x"
-.globl lowlevel_init
-lowlevel_init:
+ENTRY(lowlevel_init)
#if defined(CONFIG_MX51)
ldr r0, =GPIO1_BASE_ADDR
ldr r1, [r0, #0x0]
@@ -348,6 +348,7 @@ lowlevel_init:
/* r12 saved upper lr*/
mov pc,lr
+ENDPROC(lowlevel_init)
/* Board level setting value */
W_DP_OP_864: .word DP_OP_864
diff --git a/arch/arm/cpu/armv7/mx6/clock.c b/arch/arm/cpu/armv7/mx6/clock.c
index ef98563ff7..52d5dc4d90 100644
--- a/arch/arm/cpu/armv7/mx6/clock.c
+++ b/arch/arm/cpu/armv7/mx6/clock.c
@@ -24,8 +24,9 @@
#include <asm/io.h>
#include <asm/errno.h>
#include <asm/arch/imx-regs.h>
-#include <asm/arch/ccm_regs.h>
+#include <asm/arch/crm_regs.h>
#include <asm/arch/clock.h>
+#include <asm/arch/sys_proto.h>
enum pll_clocks {
PLL_SYS, /* System PLL */
@@ -34,7 +35,7 @@ enum pll_clocks {
PLL_ENET, /* ENET PLL */
};
-struct imx_ccm_reg *imx_ccm = (struct imx_ccm_reg *)CCM_BASE_ADDR;
+struct mxc_ccm_reg *imx_ccm = (struct mxc_ccm_reg *)CCM_BASE_ADDR;
void enable_usboh3_clk(unsigned char enable)
{
@@ -92,7 +93,7 @@ static u32 get_mcu_main_clk(void)
return freq / (reg + 1);
}
-static u32 get_periph_clk(void)
+u32 get_periph_clk(void)
{
u32 reg, freq = 0;
@@ -139,18 +140,6 @@ static u32 get_periph_clk(void)
return freq;
}
-
-static u32 get_ahb_clk(void)
-{
- u32 reg, ahb_podf;
-
- reg = __raw_readl(&imx_ccm->cbcdr);
- reg &= MXC_CCM_CBCDR_AHB_PODF_MASK;
- ahb_podf = reg >> MXC_CCM_CBCDR_AHB_PODF_OFFSET;
-
- return get_periph_clk() / (ahb_podf + 1);
-}
-
static u32 get_ipg_clk(void)
{
u32 reg, ipg_podf;
@@ -303,6 +292,37 @@ u32 imx_get_fecclk(void)
return decode_pll(PLL_ENET, CONFIG_SYS_MX6_HCLK);
}
+int enable_sata_clock(void)
+{
+ u32 reg = 0;
+ s32 timeout = 100000;
+ struct mxc_ccm_reg *const imx_ccm
+ = (struct mxc_ccm_reg *) CCM_BASE_ADDR;
+
+ /* Enable sata clock */
+ reg = readl(&imx_ccm->CCGR5); /* CCGR5 */
+ reg |= MXC_CCM_CCGR5_CG2_MASK;
+ writel(reg, &imx_ccm->CCGR5);
+
+ /* Enable PLLs */
+ reg = readl(&imx_ccm->analog_pll_enet);
+ reg &= ~BM_ANADIG_PLL_SYS_POWERDOWN;
+ writel(reg, &imx_ccm->analog_pll_enet);
+ reg |= BM_ANADIG_PLL_SYS_ENABLE;
+ while (timeout--) {
+ if (readl(&imx_ccm->analog_pll_enet) & BM_ANADIG_PLL_SYS_LOCK)
+ break;
+ }
+ if (timeout <= 0)
+ return -EIO;
+ reg &= ~BM_ANADIG_PLL_SYS_BYPASS;
+ writel(reg, &imx_ccm->analog_pll_enet);
+ reg |= BM_ANADIG_PLL_ENET_ENABLE_SATA;
+ writel(reg, &imx_ccm->analog_pll_enet);
+
+ return 0 ;
+}
+
unsigned int mxc_get_clock(enum mxc_clock clk)
{
switch (clk) {
diff --git a/arch/arm/cpu/armv7/mx6/lowlevel_init.S b/arch/arm/cpu/armv7/mx6/lowlevel_init.S
index 1864356d0b..acadef221c 100644
--- a/arch/arm/cpu/armv7/mx6/lowlevel_init.S
+++ b/arch/arm/cpu/armv7/mx6/lowlevel_init.S
@@ -18,7 +18,8 @@
*/
.section ".text.init", "x"
-.globl lowlevel_init
-lowlevel_init:
+#include <linux/linkage.h>
+ENTRY(lowlevel_init)
mov pc, lr
+ENDPROC(lowlevel_init)
diff --git a/arch/arm/cpu/armv7/mx6/soc.c b/arch/arm/cpu/armv7/mx6/soc.c
index 543b2cc6d8..90f208809b 100644
--- a/arch/arm/cpu/armv7/mx6/soc.c
+++ b/arch/arm/cpu/armv7/mx6/soc.c
@@ -77,10 +77,40 @@ void init_aips(void)
writel(0x00000000, &aips2->opacr4);
}
+/*
+ * Set the VDDSOC
+ *
+ * Mask out the REG_CORE[22:18] bits (REG2_TRIG) and set
+ * them to the specified millivolt level.
+ * Possible values are from 0.725V to 1.450V in steps of
+ * 0.025V (25mV).
+ */
+void set_vddsoc(u32 mv)
+{
+ struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
+ u32 val, reg = readl(&anatop->reg_core);
+
+ if (mv < 725)
+ val = 0x00; /* Power gated off */
+ else if (mv > 1450)
+ val = 0x1F; /* Power FET switched full on. No regulation */
+ else
+ val = (mv - 700) / 25;
+
+ /*
+ * Mask out the REG_CORE[22:18] bits (REG2_TRIG)
+ * and set them to the calculated value (0.7V + val * 0.25V)
+ */
+ reg = (reg & ~(0x1F << 18)) | (val << 18);
+ writel(reg, &anatop->reg_core);
+}
+
int arch_cpu_init(void)
{
init_aips();
+ set_vddsoc(1200); /* Set VDDSOC to 1.2V */
+
return 0;
}
#endif
diff --git a/arch/arm/cpu/armv7/omap-common/Makefile b/arch/arm/cpu/armv7/omap-common/Makefile
index 447fcd5eff..2a6625f1c4 100644
--- a/arch/arm/cpu/armv7/omap-common/Makefile
+++ b/arch/arm/cpu/armv7/omap-common/Makefile
@@ -37,6 +37,7 @@ ifneq ($(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
COBJS += hwinit-common.o
COBJS += clocks-common.o
COBJS += emif-common.o
+COBJS += vc.o
endif
ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
diff --git a/arch/arm/cpu/armv7/omap-common/clocks-common.c b/arch/arm/cpu/armv7/omap-common/clocks-common.c
index 4e7456992f..10d286a6d4 100644
--- a/arch/arm/cpu/armv7/omap-common/clocks-common.c
+++ b/arch/arm/cpu/armv7/omap-common/clocks-common.c
@@ -245,6 +245,11 @@ void configure_mpu_dpll(void)
CM_CLKSEL_DCC_EN_MASK);
}
+ setbits_le32(&prcm->cm_mpu_mpu_clkctrl,
+ MPU_CLKCTRL_CLKSEL_EMIF_DIV_MODE_MASK);
+ setbits_le32(&prcm->cm_mpu_mpu_clkctrl,
+ MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK);
+
params = get_mpu_dpll_params();
do_setup_dpll(&prcm->cm_clkmode_dpll_mpu, params, DPLL_LOCK, "mpu");
@@ -360,56 +365,51 @@ static void setup_non_essential_dplls(void)
}
#endif
-void do_scale_tps62361(u32 reg, u32 volt_mv)
+void do_scale_tps62361(int gpio, u32 reg, u32 volt_mv)
{
- u32 temp, step;
+ u32 step;
+ int ret = 0;
+
+ /* See if we can first get the GPIO if needed */
+ if (gpio >= 0)
+ ret = gpio_request(gpio, "TPS62361_VSEL0_GPIO");
+ if (ret < 0) {
+ printf("%s: gpio %d request failed %d\n", __func__, gpio, ret);
+ gpio = -1;
+ }
+
+ /* Pull the GPIO low to select SET0 register, while we program SET1 */
+ if (gpio >= 0)
+ gpio_direction_output(gpio, 0);
step = volt_mv - TPS62361_BASE_VOLT_MV;
step /= 10;
- temp = TPS62361_I2C_SLAVE_ADDR |
- (reg << PRM_VC_VAL_BYPASS_REGADDR_SHIFT) |
- (step << PRM_VC_VAL_BYPASS_DATA_SHIFT) |
- PRM_VC_VAL_BYPASS_VALID_BIT;
debug("do_scale_tps62361: volt - %d step - 0x%x\n", volt_mv, step);
-
- writel(temp, &prcm->prm_vc_val_bypass);
- if (!wait_on_value(PRM_VC_VAL_BYPASS_VALID_BIT, 0,
- &prcm->prm_vc_val_bypass, LDELAY)) {
+ if (omap_vc_bypass_send_value(TPS62361_I2C_SLAVE_ADDR, reg, step))
puts("Scaling voltage failed for vdd_mpu from TPS\n");
- }
+
+ /* Pull the GPIO high to select SET1 register */
+ if (gpio >= 0)
+ gpio_direction_output(gpio, 1);
}
void do_scale_vcore(u32 vcore_reg, u32 volt_mv)
{
- u32 temp, offset_code;
- u32 step = 12660; /* 12.66 mV represented in uV */
+ u32 offset_code;
u32 offset = volt_mv;
/* convert to uV for better accuracy in the calculations */
offset *= 1000;
- if (omap_revision() == OMAP4430_ES1_0)
- offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV;
- else
- offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV;
-
- offset_code = (offset + step - 1) / step;
- /* The code starts at 1 not 0 */
- offset_code++;
+ offset_code = get_offset_code(offset);
debug("do_scale_vcore: volt - %d offset_code - 0x%x\n", volt_mv,
offset_code);
- temp = SMPS_I2C_SLAVE_ADDR |
- (vcore_reg << PRM_VC_VAL_BYPASS_REGADDR_SHIFT) |
- (offset_code << PRM_VC_VAL_BYPASS_DATA_SHIFT) |
- PRM_VC_VAL_BYPASS_VALID_BIT;
- writel(temp, &prcm->prm_vc_val_bypass);
- if (!wait_on_value(PRM_VC_VAL_BYPASS_VALID_BIT, 0,
- &prcm->prm_vc_val_bypass, LDELAY)) {
+ if (omap_vc_bypass_send_value(SMPS_I2C_SLAVE_ADDR,
+ vcore_reg, offset_code))
printf("Scaling voltage failed for 0x%x\n", vcore_reg);
- }
}
static inline void enable_clock_domain(u32 *const clkctrl_reg, u32 enable_mode)
@@ -452,6 +452,7 @@ void freq_update_core(void)
{
u32 freq_config1 = 0;
const struct dpll_params *core_dpll_params;
+ u32 omap_rev = omap_revision();
core_dpll_params = get_core_dpll_params();
/* Put EMIF clock domain in sw wakeup mode */
@@ -477,11 +478,18 @@ void freq_update_core(void)
hang();
}
- /* Put EMIF clock domain back in hw auto mode */
- enable_clock_domain(&prcm->cm_memif_clkstctrl,
- CD_CLKCTRL_CLKTRCTRL_HW_AUTO);
- wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl);
- wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl);
+ /*
+ * Putting EMIF in HW_AUTO is seen to be causing issues with
+ * EMIF clocks and the master DLL. Put EMIF in SW_WKUP
+ * in OMAP5430 ES1.0 silicon
+ */
+ if (omap_rev != OMAP5430_ES1_0) {
+ /* Put EMIF clock domain back in hw auto mode */
+ enable_clock_domain(&prcm->cm_memif_clkstctrl,
+ CD_CLKCTRL_CLKTRCTRL_HW_AUTO);
+ wait_for_clk_enable(&prcm->cm_memif_emif_1_clkctrl);
+ wait_for_clk_enable(&prcm->cm_memif_emif_2_clkctrl);
+ }
}
void bypass_dpll(u32 *const base)
@@ -529,29 +537,6 @@ void setup_clocks_for_console(void)
CD_CLKCTRL_CLKTRCTRL_SHIFT);
}
-void setup_sri2c(void)
-{
- u32 sys_clk_khz, cycles_hi, cycles_low, temp;
-
- sys_clk_khz = get_sys_clk_freq() / 1000;
-
- /*
- * Setup the dedicated I2C controller for Voltage Control
- * I2C clk - high period 40% low period 60%
- */
- cycles_hi = sys_clk_khz * 4 / PRM_VC_I2C_CHANNEL_FREQ_KHZ / 10;
- cycles_low = sys_clk_khz * 6 / PRM_VC_I2C_CHANNEL_FREQ_KHZ / 10;
- /* values to be set in register - less by 5 & 7 respectively */
- cycles_hi -= 5;
- cycles_low -= 7;
- temp = (cycles_hi << PRM_VC_CFG_I2C_CLK_SCLH_SHIFT) |
- (cycles_low << PRM_VC_CFG_I2C_CLK_SCLL_SHIFT);
- writel(temp, &prcm->prm_vc_cfg_i2c_clk);
-
- /* Disable high speed mode and all advanced features */
- writel(0x0, &prcm->prm_vc_cfg_i2c_mode);
-}
-
void do_enable_clocks(u32 *const *clk_domains,
u32 *const *clk_modules_hw_auto,
u32 *const *clk_modules_explicit_en,
diff --git a/arch/arm/cpu/armv7/omap-common/emif-common.c b/arch/arm/cpu/armv7/omap-common/emif-common.c
index 62678ff5d3..db509c9295 100644
--- a/arch/arm/cpu/armv7/omap-common/emif-common.c
+++ b/arch/arm/cpu/armv7/omap-common/emif-common.c
@@ -90,20 +90,33 @@ static void do_lpddr2_init(u32 base, u32 cs)
* tZQINIT = 1 us
* Enough loops assuming a maximum of 2GHz
*/
+
sdelay(2000);
- set_mr(base, cs, LPDDR2_MR1, MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3);
+
+ if (omap_revision() >= OMAP5430_ES1_0)
+ set_mr(base, cs, LPDDR2_MR1, MR1_BL_8_BT_SEQ_WRAP_EN_NWR_8);
+ else
+ set_mr(base, cs, LPDDR2_MR1, MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3);
+
set_mr(base, cs, LPDDR2_MR16, MR16_REF_FULL_ARRAY);
+
/*
* Enable refresh along with writing MR2
* Encoding of RL in MR2 is (RL - 2)
*/
mr_addr = LPDDR2_MR2 | EMIF_REG_REFRESH_EN_MASK;
set_mr(base, cs, mr_addr, RL_FINAL - 2);
+
+ if (omap_revision() >= OMAP5430_ES1_0)
+ set_mr(base, cs, LPDDR2_MR3, 0x1);
}
static void lpddr2_init(u32 base, const struct emif_regs *regs)
{
struct emif_reg_struct *emif = (struct emif_reg_struct *)base;
+ u32 *ext_phy_ctrl_base = 0;
+ u32 *emif_ext_phy_ctrl_base = 0;
+ u32 i = 0;
/* Not NVM */
clrbits_le32(&emif->emif_lpddr2_nvm_config, EMIF_REG_CS1NVMEN_MASK);
@@ -119,7 +132,31 @@ static void lpddr2_init(u32 base, const struct emif_regs *regs)
* un-locked frequency & default RL
*/
writel(regs->sdram_config_init, &emif->emif_sdram_config);
- writel(regs->emif_ddr_phy_ctlr_1_init, &emif->emif_ddr_phy_ctrl_1);
+ writel(regs->emif_ddr_phy_ctlr_1, &emif->emif_ddr_phy_ctrl_1);
+
+ ext_phy_ctrl_base = (u32 *) &(regs->emif_ddr_ext_phy_ctrl_1);
+ emif_ext_phy_ctrl_base = (u32 *) &(emif->emif_ddr_ext_phy_ctrl_1);
+
+ if (omap_revision() >= OMAP5430_ES1_0) {
+ /* Configure external phy control timing registers */
+ for (i = 0; i < EMIF_EXT_PHY_CTRL_TIMING_REG; i++) {
+ writel(*ext_phy_ctrl_base, emif_ext_phy_ctrl_base++);
+ /* Update shadow registers */
+ writel(*ext_phy_ctrl_base++, emif_ext_phy_ctrl_base++);
+ }
+
+ /*
+ * external phy 6-24 registers do not change with
+ * ddr frequency
+ */
+ for (i = 0; i < EMIF_EXT_PHY_CTRL_CONST_REG; i++) {
+ writel(ext_phy_ctrl_const_base[i],
+ emif_ext_phy_ctrl_base++);
+ /* Update shadow registers */
+ writel(ext_phy_ctrl_const_base[i],
+ emif_ext_phy_ctrl_base++);
+ }
+ }
do_lpddr2_init(base, CS0);
if (regs->sdram_config & EMIF_REG_EBANK_MASK)
diff --git a/arch/arm/cpu/armv7/omap-common/hwinit-common.c b/arch/arm/cpu/armv7/omap-common/hwinit-common.c
index ab46bff5af..cf71ab4443 100644
--- a/arch/arm/cpu/armv7/omap-common/hwinit-common.c
+++ b/arch/arm/cpu/armv7/omap-common/hwinit-common.c
@@ -203,21 +203,15 @@ int checkboard(void)
}
/*
-* This function is called by start_armboot. You can reliably use static
-* data. Any boot-time function that require static data should be
-* called from here
-*/
-int arch_cpu_init(void)
-{
- return 0;
-}
-
-/*
* get_device_type(): tell if GP/HS/EMU/TST
*/
u32 get_device_type(void)
{
- return 0;
+ struct omap_sys_ctrl_regs *ctrl =
+ (struct omap_sys_ctrl_regs *) SYSCTRL_GENERAL_CORE_BASE;
+
+ return (readl(&ctrl->control_status) &
+ (DEVICE_TYPE_MASK)) >> DEVICE_TYPE_SHIFT;
}
/*
diff --git a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
index 35f38acf5d..ccc6bb6b85 100644
--- a/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
+++ b/arch/arm/cpu/armv7/omap-common/lowlevel_init.S
@@ -27,9 +27,9 @@
*/
#include <asm/arch/omap.h>
+#include <linux/linkage.h>
-.global save_boot_params
-save_boot_params:
+ENTRY(save_boot_params)
/*
* See if the rom code passed pointer is valid:
* It is not valid if it is not in non-secure SRAM
@@ -76,10 +76,9 @@ save_boot_params:
strb r2, [r3, #CH_FLAGS_OFFSET]
1:
bx lr
+ENDPROC(save_boot_params)
-
-.globl lowlevel_init
-lowlevel_init:
+ENTRY(lowlevel_init)
/*
* Setup a temporary stack
*/
@@ -95,12 +94,13 @@ lowlevel_init:
*/
bl s_init
pop {ip, pc}
+ENDPROC(lowlevel_init)
-.globl set_pl310_ctrl_reg
-set_pl310_ctrl_reg:
+ENTRY(set_pl310_ctrl_reg)
PUSH {r4-r11, lr} @ save registers - ROM code may pollute
@ our registers
LDR r12, =0x102 @ Set PL310 control register - value in R0
.word 0xe1600070 @ SMC #0 - hand assembled because -march=armv5
@ call ROM Code API to set control register
POP {r4-r11, pc}
+ENDPROC(set_pl310_ctrl_reg)
diff --git a/arch/arm/cpu/armv7/omap-common/reset.S b/arch/arm/cpu/armv7/omap-common/reset.c
index 838b1221ee..234e90a868 100644
--- a/arch/arm/cpu/armv7/omap-common/reset.S
+++ b/arch/arm/cpu/armv7/omap-common/reset.c
@@ -1,6 +1,11 @@
/*
- * Copyright (c) 2009 Samsung Electronics.
- * Minkyu Kang <mk7.kang@samsung.com>
+ *
+ * Common layer for reset related functionality of OMAP based socs.
+ *
+ * (C) Copyright 2012
+ * Texas Instruments, <www.ti.com>
+ *
+ * Sricharan R <r.sricharan@ti.com>
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -20,19 +25,12 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
-
#include <config.h>
+#include <asm/io.h>
+#include <asm/arch/cpu.h>
+#include <linux/compiler.h>
-.global reset_cpu
-reset_cpu:
- ldr r1, rstctl @ get addr for global reset
- @ reg
- ldr r3, rstbit @ sw reset bit
- str r3, [r1] @ force reset
- mov r0, r0
-_loop_forever:
- b _loop_forever
-rstctl:
- .word PRM_RSTCTRL
-rstbit:
- .word PRM_RSTCTRL_RESET
+void __weak reset_cpu(unsigned long ignored)
+{
+ writel(PRM_RSTCTRL_RESET, PRM_RSTCTRL);
+}
diff --git a/arch/arm/cpu/armv7/omap-common/spl.c b/arch/arm/cpu/armv7/omap-common/spl.c
index 0f2e0a2d27..4d1ac85d00 100644
--- a/arch/arm/cpu/armv7/omap-common/spl.c
+++ b/arch/arm/cpu/armv7/omap-common/spl.c
@@ -162,6 +162,7 @@ void board_init_r(gd_t *id, ulong dummy)
#ifdef CONFIG_SPL_MMC_SUPPORT
case BOOT_DEVICE_MMC1:
case BOOT_DEVICE_MMC2:
+ case BOOT_DEVICE_MMC2_2:
spl_mmc_load_image();
break;
#endif
diff --git a/arch/arm/cpu/armv7/omap-common/spl_mmc.c b/arch/arm/cpu/armv7/omap-common/spl_mmc.c
index 6f5b43e559..2f921bb07d 100644
--- a/arch/arm/cpu/armv7/omap-common/spl_mmc.c
+++ b/arch/arm/cpu/armv7/omap-common/spl_mmc.c
@@ -39,10 +39,11 @@ int board_mmc_init(bd_t *bis)
{
switch (omap_boot_device()) {
case BOOT_DEVICE_MMC1:
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
break;
case BOOT_DEVICE_MMC2:
- omap_mmc_init(1);
+ case BOOT_DEVICE_MMC2_2:
+ omap_mmc_init(1, 0, 0);
break;
}
return 0;
diff --git a/arch/arm/cpu/armv7/omap-common/spl_nand.c b/arch/arm/cpu/armv7/omap-common/spl_nand.c
index 1295e88752..8cf55c9a1c 100644
--- a/arch/arm/cpu/armv7/omap-common/spl_nand.c
+++ b/arch/arm/cpu/armv7/omap-common/spl_nand.c
@@ -54,7 +54,7 @@ void spl_nand_load_image(void)
* load parameter image
* load to temp position since nand_spl_load_image reads
* a whole block which is typically larger than
- * CONFIG_CMD_SAVEBP_WRITE_SIZE therefore may overwrite
+ * CONFIG_CMD_SPL_WRITE_SIZE therefore may overwrite
* following sections like BSS
*/
nand_spl_load_image(CONFIG_CMD_SPL_NAND_OFS,
diff --git a/arch/arm/cpu/armv7/omap-common/vc.c b/arch/arm/cpu/armv7/omap-common/vc.c
new file mode 100644
index 0000000000..a045b77180
--- /dev/null
+++ b/arch/arm/cpu/armv7/omap-common/vc.c
@@ -0,0 +1,138 @@
+/*
+ * Voltage Controller implementation for OMAP
+ *
+ * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
+ * Nishanth Menon
+ *
+ * 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.
+ *
+ * This program is distributed "as is" WITHOUT ANY WARRANTY of any
+ * kind, whether express or implied; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <common.h>
+#include <asm/omap_common.h>
+#include <asm/arch/sys_proto.h>
+
+/*
+ * Define Master code if there are multiple masters on the I2C_SR bus.
+ * Normally not required
+ */
+#ifndef CONFIG_OMAP_VC_I2C_HS_MCODE
+#define CONFIG_OMAP_VC_I2C_HS_MCODE 0x0
+#endif
+
+/* Register defines and masks for VC IP Block */
+/* PRM_VC_CFG_I2C_MODE */
+#define PRM_VC_CFG_I2C_MODE_DFILTEREN_BIT (0x1 << 6)
+#define PRM_VC_CFG_I2C_MODE_SRMODEEN_BIT (0x1 << 4)
+#define PRM_VC_CFG_I2C_MODE_HSMODEEN_BIT (0x1 << 3)
+#define PRM_VC_CFG_I2C_MODE_HSMCODE_SHIFT 0x0
+#define PRM_VC_CFG_I2C_MODE_HSMCODE_MASK 0x3
+
+/* PRM_VC_CFG_I2C_CLK */
+#define PRM_VC_CFG_I2C_CLK_HSCLL_SHIFT 24
+#define PRM_VC_CFG_I2C_CLK_HSCLL_MASK 0xFF
+#define PRM_VC_CFG_I2C_CLK_HSCLH_SHIFT 16
+#define PRM_VC_CFG_I2C_CLK_HSCLH_MASK 0xFF
+#define PRM_VC_CFG_I2C_CLK_SCLH_SHIFT 0
+#define PRM_VC_CFG_I2C_CLK_SCLH_MASK 0xFF
+#define PRM_VC_CFG_I2C_CLK_SCLL_SHIFT 8
+#define PRM_VC_CFG_I2C_CLK_SCLL_MASK (0xFF << 8)
+
+/* PRM_VC_VAL_BYPASS */
+#define PRM_VC_VAL_BYPASS_VALID_BIT (0x1 << 24)
+#define PRM_VC_VAL_BYPASS_SLAVEADDR_SHIFT 0
+#define PRM_VC_VAL_BYPASS_SLAVEADDR_MASK 0x7F
+#define PRM_VC_VAL_BYPASS_REGADDR_SHIFT 8
+#define PRM_VC_VAL_BYPASS_REGADDR_MASK 0xFF
+#define PRM_VC_VAL_BYPASS_DATA_SHIFT 16
+#define PRM_VC_VAL_BYPASS_DATA_MASK 0xFF
+
+/**
+ * omap_vc_init() - Initialization for Voltage controller
+ * @speed_khz: I2C buspeed in KHz
+ */
+void omap_vc_init(u16 speed_khz)
+{
+ u32 val;
+ u32 sys_clk_khz, cycles_hi, cycles_low;
+
+ sys_clk_khz = get_sys_clk_freq() / 1000;
+
+ if (speed_khz > 400) {
+ puts("higher speed requested - throttle to 400Khz\n");
+ speed_khz = 400;
+ }
+
+ /*
+ * Setup the dedicated I2C controller for Voltage Control
+ * I2C clk - high period 40% low period 60%
+ */
+ speed_khz /= 10;
+ cycles_hi = sys_clk_khz * 4 / speed_khz;
+ cycles_low = sys_clk_khz * 6 / speed_khz;
+ /* values to be set in register - less by 5 & 7 respectively */
+ cycles_hi -= 5;
+ cycles_low -= 7;
+ val = (cycles_hi << PRM_VC_CFG_I2C_CLK_SCLH_SHIFT) |
+ (cycles_low << PRM_VC_CFG_I2C_CLK_SCLL_SHIFT);
+ writel(val, &prcm->prm_vc_cfg_i2c_clk);
+
+ val = CONFIG_OMAP_VC_I2C_HS_MCODE <<
+ PRM_VC_CFG_I2C_MODE_HSMCODE_SHIFT;
+ /* No HS mode for now */
+ val &= ~PRM_VC_CFG_I2C_MODE_HSMODEEN_BIT;
+ writel(val, &prcm->prm_vc_cfg_i2c_mode);
+}
+
+/**
+ * omap_vc_bypass_send_value() - Send a data using VC Bypass command
+ * @sa: 7 bit I2C slave address of the PMIC
+ * @reg_addr: I2C register address(8 bit) address in PMIC
+ * @reg_data: what 8 bit data to write
+ */
+int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data)
+{
+ /*
+ * Unfortunately we need to loop here instead of a defined time
+ * use arbitary large value
+ */
+ u32 timeout = 0xFFFF;
+ u32 reg_val;
+
+ sa &= PRM_VC_VAL_BYPASS_SLAVEADDR_MASK;
+ reg_addr &= PRM_VC_VAL_BYPASS_REGADDR_MASK;
+ reg_data &= PRM_VC_VAL_BYPASS_DATA_MASK;
+
+ /* program VC to send data */
+ reg_val = sa << PRM_VC_VAL_BYPASS_SLAVEADDR_SHIFT |
+ reg_addr << PRM_VC_VAL_BYPASS_REGADDR_SHIFT |
+ reg_data << PRM_VC_VAL_BYPASS_DATA_SHIFT;
+ writel(reg_val, &prcm->prm_vc_val_bypass);
+
+ /* Signal VC to send data */
+ writel(reg_val | PRM_VC_VAL_BYPASS_VALID_BIT, &prcm->prm_vc_val_bypass);
+
+ /* Wait on VC to complete transmission */
+ do {
+ reg_val = readl(&prcm->prm_vc_val_bypass) &
+ PRM_VC_VAL_BYPASS_VALID_BIT;
+ if (!reg_val)
+ break;
+
+ sdelay(100);
+ } while (--timeout);
+
+ /* Optional: cleanup PRM_IRQSTATUS_Ax */
+ /* In case we can do something about it in future.. */
+ if (!timeout)
+ return -1;
+
+ /* All good.. */
+ return 0;
+}
diff --git a/arch/arm/cpu/armv7/omap3/board.c b/arch/arm/cpu/armv7/omap3/board.c
index 1fee574364..f2e52e9ce1 100644
--- a/arch/arm/cpu/armv7/omap3/board.c
+++ b/arch/arm/cpu/armv7/omap3/board.c
@@ -41,6 +41,7 @@
#include <asm/arch/gpio.h>
#include <asm/omap_common.h>
#include <i2c.h>
+#include <linux/compiler.h>
/* Declarations */
extern omap3_sysinfo sysinfo;
@@ -244,6 +245,17 @@ void s_init(void)
mem_init();
}
+/*
+ * Routine: misc_init_r
+ * Description: A basic misc_init_r that just displays the die ID
+ */
+int __weak misc_init_r(void)
+{
+ dieid_num_r();
+
+ return 0;
+}
+
/******************************************************************************
* Routine: wait_for_command_complete
* Description: Wait for posting to finish on watchdog
diff --git a/arch/arm/cpu/armv7/omap3/clock.c b/arch/arm/cpu/armv7/omap3/clock.c
index 567817e0ec..09c51f62aa 100644
--- a/arch/arm/cpu/armv7/omap3/clock.c
+++ b/arch/arm/cpu/armv7/omap3/clock.c
@@ -572,6 +572,22 @@ void prcm_init(void)
}
if (get_cpu_family() == CPU_OMAP36XX) {
+ /*
+ * In warm reset conditions on OMAP36xx/AM/DM37xx
+ * the rom code incorrectly sets the DPLL4 clock
+ * input divider to /6.5. Section 3.5.3.3.3.2.1 of
+ * the AM/DM37x TRM explains that the /6.5 divider
+ * is used only when the input clock is 13MHz.
+ *
+ * If the part is in this cpu family *and* the input
+ * clock *is not* 13 MHz, then reset the DPLL4 clock
+ * input divider to /1 as it should never set to /6.5
+ * in this case.
+ */
+ if (sys_clkin_sel != 1) /* 13 MHz */
+ /* Bit 8: DPLL4_CLKINP_DIV */
+ sr32(&prm_base->clksrc_ctrl, 8, 1, 0);
+
/* Unlock MPU DPLL (slows things down, and needed later) */
sr32(&prcm_base->clken_pll_mpu, 0, 3, PLL_LOW_POWER_BYPASS);
wait_on_value(ST_MPU_CLK, 0, &prcm_base->idlest_pll_mpu,
diff --git a/arch/arm/cpu/armv7/omap3/lowlevel_init.S b/arch/arm/cpu/armv7/omap3/lowlevel_init.S
index c42c5ddcc9..ebf69fa17d 100644
--- a/arch/arm/cpu/armv7/omap3/lowlevel_init.S
+++ b/arch/arm/cpu/armv7/omap3/lowlevel_init.S
@@ -31,22 +31,22 @@
#include <version.h>
#include <asm/arch/mem.h>
#include <asm/arch/clocks_omap3.h>
+#include <linux/linkage.h>
_TEXT_BASE:
.word CONFIG_SYS_TEXT_BASE /* sdram load addr from config.mk */
#ifdef CONFIG_SPL_BUILD
-.global save_boot_params
-save_boot_params:
+ENTRY(save_boot_params)
ldr r4, =omap3_boot_device
ldr r5, [r0, #0x4]
and r5, r5, #0xff
str r5, [r4]
bx lr
+ENDPROC(save_boot_params)
#endif
-.global omap3_gp_romcode_call
-omap3_gp_romcode_call:
+ENTRY(omap3_gp_romcode_call)
PUSH {r4-r12, lr} @ Save all registers from ROM code!
MOV r12, r0 @ Copy the Service ID in R12
MOV r0, r1 @ Copy parameter to R0
@@ -55,6 +55,7 @@ omap3_gp_romcode_call:
.word 0xe1600070 @ SMC #0 to enter monitor - hand assembled
@ because we use -march=armv5
POP {r4-r12, pc}
+ENDPROC(omap3_gp_romcode_call)
/*
* Funtion for making PPA HAL API calls in secure devices
@@ -62,8 +63,7 @@ omap3_gp_romcode_call:
* R0 - Service ID
* R1 - paramer list
*/
-.global do_omap3_emu_romcode_call
-do_omap3_emu_romcode_call:
+ENTRY(do_omap3_emu_romcode_call)
PUSH {r4-r12, lr} @ Save all registers from ROM code!
MOV r12, r0 @ Copy the Secure Service ID in R12
MOV r3, r1 @ Copy the pointer to va_list in R3
@@ -76,14 +76,14 @@ do_omap3_emu_romcode_call:
.word 0xe1600071 @ SMC #1 to call PPA service - hand assembled
@ because we use -march=armv5
POP {r4-r12, pc}
+ENDPROC(do_omap3_emu_romcode_call)
#if !defined(CONFIG_SYS_NAND_BOOT) && !defined(CONFIG_SYS_NAND_BOOT)
/**************************************************************************
* cpy_clk_code: relocates clock code into SRAM where its safer to execute
* R1 = SRAM destination address.
*************************************************************************/
-.global cpy_clk_code
- cpy_clk_code:
+ENTRY(cpy_clk_code)
/* Copy DPLL code into SRAM */
adr r0, go_to_speed /* get addr of clock setting code */
mov r2, #384 /* r2 size to copy (div by 32 bytes) */
@@ -95,6 +95,7 @@ next2:
cmp r0, r2 /* until source end address [r2] */
bne next2
mov pc, lr /* back to caller */
+ENDPROC(cpy_clk_code)
/* ***************************************************************************
* go_to_speed: -Moves to bypass, -Commits clock dividers, -puts dpll at speed
@@ -109,8 +110,7 @@ next2:
* L3 when its not in self refresh seems bad for it. Normally, this
* code runs from flash before SDR is init so that should be ok.
****************************************************************************/
-.global go_to_speed
- go_to_speed:
+ENTRY(go_to_speed)
stmfd sp!, {r4 - r6}
/* move into fast relock bypass */
@@ -171,6 +171,7 @@ wait2:
nop
ldmfd sp!, {r4 - r6}
mov pc, lr /* back to caller, locked */
+ENDPROC(go_to_speed)
_go_to_speed: .word go_to_speed
@@ -211,8 +212,7 @@ pll_div_val5:
#endif
-.globl lowlevel_init
-lowlevel_init:
+ENTRY(lowlevel_init)
ldr sp, SRAM_STACK
str ip, [sp] /* stash old link register */
mov ip, lr /* save link reg across call */
@@ -230,6 +230,7 @@ lowlevel_init:
/* back to arch calling code */
mov pc, lr
+ENDPROC(lowlevel_init)
/* the literal pools origin */
.ltorg
@@ -480,22 +481,22 @@ per_36x_dpll_param:
.word 26000, 432, 12, 9, 16, 9, 4, 3, 1
.word 38400, 360, 15, 9, 16, 5, 4, 3, 1
-.globl get_36x_mpu_dpll_param
-get_36x_mpu_dpll_param:
+ENTRY(get_36x_mpu_dpll_param)
adr r0, mpu_36x_dpll_param
mov pc, lr
+ENDPROC(get_36x_mpu_dpll_param)
-.globl get_36x_iva_dpll_param
-get_36x_iva_dpll_param:
+ENTRY(get_36x_iva_dpll_param)
adr r0, iva_36x_dpll_param
mov pc, lr
+ENDPROC(get_36x_iva_dpll_param)
-.globl get_36x_core_dpll_param
-get_36x_core_dpll_param:
+ENTRY(get_36x_core_dpll_param)
adr r0, core_36x_dpll_param
mov pc, lr
+ENDPROC(get_36x_core_dpll_param)
-.globl get_36x_per_dpll_param
-get_36x_per_dpll_param:
+ENTRY(get_36x_per_dpll_param)
adr r0, per_36x_dpll_param
mov pc, lr
+ENDPROC(get_36x_per_dpll_param)
diff --git a/arch/arm/cpu/armv7/omap4/clocks.c b/arch/arm/cpu/armv7/omap4/clocks.c
index e2189f729f..c568951a91 100644
--- a/arch/arm/cpu/armv7/omap4/clocks.c
+++ b/arch/arm/cpu/armv7/omap4/clocks.c
@@ -46,8 +46,6 @@
#define puts(s)
#endif
-#define abs(x) (((x) < 0) ? ((x)*-1) : (x))
-
struct omap4_prcm_regs *const prcm = (struct omap4_prcm_regs *)0x4A004100;
const u32 sys_clk_array[8] = {
@@ -275,47 +273,70 @@ void scale_vcores(void)
{
u32 volt, omap_rev;
- setup_sri2c();
+ omap_vc_init(PRM_VC_I2C_CHANNEL_FREQ_KHZ);
omap_rev = omap_revision();
- /* TPS - supplies vdd_mpu on 4460 */
- if (omap_rev >= OMAP4460_ES1_0) {
- volt = 1203;
- do_scale_tps62361(TPS62361_REG_ADDR_SET1, volt);
- }
/*
- * VCORE 1
- *
- * 4430 : supplies vdd_mpu
- * Setting a high voltage for Nitro mode as smart reflex is not enabled.
- * We use the maximum possible value in the AVS range because the next
- * higher voltage in the discrete range (code >= 0b111010) is way too
- * high
- *
- * 4460 : supplies vdd_core
+ * Scale Voltage rails:
+ * 1. VDD_CORE
+ * 3. VDD_MPU
+ * 3. VDD_IVA
*/
if (omap_rev < OMAP4460_ES1_0) {
+ /*
+ * OMAP4430:
+ * VDD_CORE = TWL6030 VCORE3
+ * VDD_MPU = TWL6030 VCORE1
+ * VDD_IVA = TWL6030 VCORE2
+ */
+ volt = 1200;
+ do_scale_vcore(SMPS_REG_ADDR_VCORE3, volt);
+
+ /*
+ * note on VDD_MPU:
+ * Setting a high voltage for Nitro mode as smart reflex is not
+ * enabled. We use the maximum possible value in the AVS range
+ * because the next higher voltage in the discrete range
+ * (code >= 0b111010) is way too high.
+ */
volt = 1325;
do_scale_vcore(SMPS_REG_ADDR_VCORE1, volt);
+ volt = 1200;
+ do_scale_vcore(SMPS_REG_ADDR_VCORE2, volt);
+
} else {
+ /*
+ * OMAP4460:
+ * VDD_CORE = TWL6030 VCORE1
+ * VDD_MPU = TPS62361
+ * VDD_IVA = TWL6030 VCORE2
+ */
volt = 1200;
do_scale_vcore(SMPS_REG_ADDR_VCORE1, volt);
+ /* TPS62361 */
+ volt = 1203;
+ do_scale_tps62361(TPS62361_VSEL0_GPIO,
+ TPS62361_REG_ADDR_SET1, volt);
+ /* VCORE 2 - supplies vdd_iva */
+ volt = 1200;
+ do_scale_vcore(SMPS_REG_ADDR_VCORE2, volt);
}
+}
- /* VCORE 2 - supplies vdd_iva */
- volt = 1200;
- do_scale_vcore(SMPS_REG_ADDR_VCORE2, volt);
+u32 get_offset_code(u32 offset)
+{
+ u32 offset_code, step = 12660; /* 12.66 mV represented in uV */
- /*
- * VCORE 3
- * 4430 : supplies vdd_core
- * 4460 : not connected
- */
- if (omap_rev < OMAP4460_ES1_0) {
- volt = 1200;
- do_scale_vcore(SMPS_REG_ADDR_VCORE3, volt);
- }
+ if (omap_revision() == OMAP4430_ES1_0)
+ offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV;
+ else
+ offset -= PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV;
+
+ offset_code = (offset + step - 1) / step;
+
+ /* The code starts at 1 not 0 */
+ return ++offset_code;
}
/*
@@ -355,7 +376,6 @@ void enable_basic_clocks(void)
&prcm->cm_l4per_gptimer2_clkctrl,
&prcm->cm_wkup_wdtimer2_clkctrl,
&prcm->cm_l4per_uart3_clkctrl,
- &prcm->cm_l3init_fsusb_clkctrl,
&prcm->cm_l3init_hsusbhost_clkctrl,
0
};
@@ -432,10 +452,6 @@ void enable_non_essential_clocks(void)
};
u32 *const clk_modules_hw_auto_non_essential[] = {
- &prcm->cm_mpu_m3_mpu_m3_clkctrl,
- &prcm->cm_ivahd_ivahd_clkctrl,
- &prcm->cm_ivahd_sl2_clkctrl,
- &prcm->cm_dsp_dsp_clkctrl,
&prcm->cm_l3_2_gpmc_clkctrl,
&prcm->cm_l3instr_l3_3_clkctrl,
&prcm->cm_l3instr_l3_instr_clkctrl,
@@ -482,7 +498,6 @@ void enable_non_essential_clocks(void)
&prcm->cm_dss_dss_clkctrl,
&prcm->cm_sgx_sgx_clkctrl,
&prcm->cm_l3init_hsusbhost_clkctrl,
- &prcm->cm_l3init_fsusb_clkctrl,
0
};
diff --git a/arch/arm/cpu/armv7/omap4/hwinit.c b/arch/arm/cpu/armv7/omap4/hwinit.c
index 91f83205ed..187e93887b 100644
--- a/arch/arm/cpu/armv7/omap4/hwinit.c
+++ b/arch/arm/cpu/armv7/omap4/hwinit.c
@@ -37,7 +37,7 @@
DECLARE_GLOBAL_DATA_PTR;
-u32 *const omap4_revision = (u32 *)OMAP4_SRAM_SCRATCH_OMAP4_REV;
+u32 *const omap_si_rev = (u32 *)OMAP4_SRAM_SCRATCH_OMAP4_REV;
static const struct gpio_bank gpio_bank_44xx[6] = {
{ (void *)OMAP44XX_GPIO1_BASE, METHOD_GPIO_24XX },
@@ -59,8 +59,8 @@ void do_io_settings(void)
u32 lpddr2io;
struct control_lpddr2io_regs *lpddr2io_regs =
(struct control_lpddr2io_regs *)LPDDR2_IO_REGS_BASE;
- struct omap4_sys_ctrl_regs *const ctrl =
- (struct omap4_sys_ctrl_regs *)SYSCTRL_GENERAL_CORE_BASE;
+ struct omap_sys_ctrl_regs *const ctrl =
+ (struct omap_sys_ctrl_regs *)SYSCTRL_GENERAL_CORE_BASE;
u32 omap4_rev = omap_revision();
@@ -129,40 +129,40 @@ void init_omap_revision(void)
switch (arm_rev) {
case MIDR_CORTEX_A9_R0P1:
- *omap4_revision = OMAP4430_ES1_0;
+ *omap_si_rev = OMAP4430_ES1_0;
break;
case MIDR_CORTEX_A9_R1P2:
switch (readl(CONTROL_ID_CODE)) {
case OMAP4_CONTROL_ID_CODE_ES2_0:
- *omap4_revision = OMAP4430_ES2_0;
+ *omap_si_rev = OMAP4430_ES2_0;
break;
case OMAP4_CONTROL_ID_CODE_ES2_1:
- *omap4_revision = OMAP4430_ES2_1;
+ *omap_si_rev = OMAP4430_ES2_1;
break;
case OMAP4_CONTROL_ID_CODE_ES2_2:
- *omap4_revision = OMAP4430_ES2_2;
+ *omap_si_rev = OMAP4430_ES2_2;
break;
default:
- *omap4_revision = OMAP4430_ES2_0;
+ *omap_si_rev = OMAP4430_ES2_0;
break;
}
break;
case MIDR_CORTEX_A9_R1P3:
- *omap4_revision = OMAP4430_ES2_3;
+ *omap_si_rev = OMAP4430_ES2_3;
break;
case MIDR_CORTEX_A9_R2P10:
switch (readl(CONTROL_ID_CODE)) {
case OMAP4460_CONTROL_ID_CODE_ES1_1:
- *omap4_revision = OMAP4460_ES1_1;
+ *omap_si_rev = OMAP4460_ES1_1;
break;
case OMAP4460_CONTROL_ID_CODE_ES1_0:
default:
- *omap4_revision = OMAP4460_ES1_0;
+ *omap_si_rev = OMAP4460_ES1_0;
break;
}
break;
default:
- *omap4_revision = OMAP4430_SILICON_ID_INVALID;
+ *omap_si_rev = OMAP4430_SILICON_ID_INVALID;
break;
}
}
diff --git a/arch/arm/cpu/armv7/omap4/sdram_elpida.c b/arch/arm/cpu/armv7/omap4/sdram_elpida.c
index a5ec7d3dcc..b5389606b6 100644
--- a/arch/arm/cpu/armv7/omap4/sdram_elpida.c
+++ b/arch/arm/cpu/armv7/omap4/sdram_elpida.c
@@ -89,6 +89,10 @@ const struct emif_regs emif_regs_elpida_400_mhz_2cs = {
.emif_ddr_phy_ctlr_1_init = 0x049ffff5,
.emif_ddr_phy_ctlr_1 = 0x049ff418
};
+
+/* Dummy registers for OMAP44xx */
+const u32 ext_phy_ctrl_const_base[EMIF_EXT_PHY_CTRL_CONST_REG];
+
const struct dmm_lisa_map_regs lisa_map_2G_x_1_x_2 = {
.dmm_lisa_map_0 = 0xFF020100,
.dmm_lisa_map_1 = 0,
diff --git a/arch/arm/cpu/armv7/omap5/Makefile b/arch/arm/cpu/armv7/omap5/Makefile
index f8ca9ac367..9b261c4df2 100644
--- a/arch/arm/cpu/armv7/omap5/Makefile
+++ b/arch/arm/cpu/armv7/omap5/Makefile
@@ -28,7 +28,7 @@ LIB = $(obj)lib$(SOC).o
COBJS += hwinit.o
COBJS += clocks.o
COBJS += emif.o
-COBJS += sdram_elpida.o
+COBJS += sdram.o
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/armv7/omap5/clocks.c b/arch/arm/cpu/armv7/omap5/clocks.c
index dd882a202e..1a59f265f7 100644
--- a/arch/arm/cpu/armv7/omap5/clocks.c
+++ b/arch/arm/cpu/armv7/omap5/clocks.c
@@ -88,6 +88,26 @@ static const struct dpll_params mpu_dpll_params_1100mhz[NUM_SYS_CLKS] = {
{1375, 47, 1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
};
+static const struct dpll_params mpu_dpll_params_800mhz[NUM_SYS_CLKS] = {
+ {200, 2, 1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
+ {1000, 20, 1, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
+ {375, 8, 1, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
+ {400, 12, 1, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
+ {375, 17, 1, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
+};
+
+static const struct dpll_params mpu_dpll_params_400mhz[NUM_SYS_CLKS] = {
+ {200, 2, 2, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
+ {1000, 20, 2, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
+ {375, 8, 2, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
+ {400, 12, 2, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
+ {375, 17, 2, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
+};
+
static const struct dpll_params mpu_dpll_params_550mhz[NUM_SYS_CLKS] = {
{275, 2, 2, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
@@ -100,24 +120,24 @@ static const struct dpll_params mpu_dpll_params_550mhz[NUM_SYS_CLKS] = {
static const struct dpll_params
core_dpll_params_2128mhz_ddr532[NUM_SYS_CLKS] = {
- {266, 2, 1, 5, 8, 4, 62, 5, 5, 7}, /* 12 MHz */
+ {266, 2, 2, 5, 8, 4, 62, 5, 5, 7}, /* 12 MHz */
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
- {570, 8, 1, 5, 8, 4, 62, 5, 5, 7}, /* 16.8 MHz */
- {665, 11, 1, 5, 8, 4, 62, 5, 5, 7}, /* 19.2 MHz */
- {532, 12, 1, 5, 8, 4, 62, 5, 5, 7}, /* 26 MHz */
+ {570, 8, 2, 5, 8, 4, 62, 5, 5, 7}, /* 16.8 MHz */
+ {665, 11, 2, 5, 8, 4, 62, 5, 5, 7}, /* 19.2 MHz */
+ {532, 12, 2, 5, 8, 4, 62, 5, 5, 7}, /* 26 MHz */
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
- {665, 23, 1, 5, 8, 4, 62, 5, 5, 7} /* 38.4 MHz */
+ {665, 23, 2, 5, 8, 4, 62, 5, 5, 7} /* 38.4 MHz */
};
static const struct dpll_params
core_dpll_params_2128mhz_ddr266[NUM_SYS_CLKS] = {
- {266, 2, 2, 5, 8, 4, 62, 5, 5, 7}, /* 12 MHz */
+ {266, 2, 4, 5, 8, 8, 62, 10, 10, 14}, /* 12 MHz */
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
- {570, 8, 2, 5, 8, 4, 62, 5, 5, 7}, /* 16.8 MHz */
- {665, 11, 2, 5, 8, 4, 62, 5, 5, 7}, /* 19.2 MHz */
- {532, 12, 2, 5, 8, 4, 62, 5, 5, 7}, /* 26 MHz */
+ {570, 8, 4, 5, 8, 8, 62, 10, 10, 14}, /* 16.8 MHz */
+ {665, 11, 4, 5, 8, 8, 62, 10, 10, 14}, /* 19.2 MHz */
+ {532, 12, 4, 8, 8, 8, 62, 10, 10, 14}, /* 26 MHz */
{-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
- {665, 23, 2, 5, 8, 4, 62, 5, 5, 7} /* 38.4 MHz */
+ {665, 23, 4, 8, 8, 8, 62, 10, 10, 14} /* 38.4 MHz */
};
static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
@@ -131,40 +151,40 @@ static const struct dpll_params per_dpll_params_768mhz[NUM_SYS_CLKS] = {
};
static const struct dpll_params iva_dpll_params_2330mhz[NUM_SYS_CLKS] = {
- {931, 11, -1, -1, 4, 7, -1, -1}, /* 12 MHz */
- {931, 12, -1, -1, 4, 7, -1, -1}, /* 13 MHz */
- {665, 11, -1, -1, 4, 7, -1, -1}, /* 16.8 MHz */
- {727, 14, -1, -1, 4, 7, -1, -1}, /* 19.2 MHz */
- {931, 25, -1, -1, 4, 7, -1, -1}, /* 26 MHz */
- {931, 26, -1, -1, 4, 7, -1, -1}, /* 27 MHz */
- {412, 16, -1, -1, 4, 7, -1, -1} /* 38.4 MHz */
+ {1165, 11, -1, -1, 5, 6, -1, -1, -1, -1}, /* 12 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
+ {2011, 28, -1, -1, 5, 6, -1, -1, -1, -1}, /* 16.8 MHz */
+ {1881, 30, -1, -1, 5, 6, -1, -1, -1, -1}, /* 19.2 MHz */
+ {1165, 25, -1, -1, 5, 6, -1, -1, -1, -1}, /* 26 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
+ {1972, 64, -1, -1, 5, 6, -1, -1, -1, -1} /* 38.4 MHz */
};
/* ABE M & N values with sys_clk as source */
static const struct dpll_params
abe_dpll_params_sysclk_196608khz[NUM_SYS_CLKS] = {
- {49, 5, 1, 1, -1, -1, -1, -1}, /* 12 MHz */
- {68, 8, 1, 1, -1, -1, -1, -1}, /* 13 MHz */
- {35, 5, 1, 1, -1, -1, -1, -1}, /* 16.8 MHz */
- {46, 8, 1, 1, -1, -1, -1, -1}, /* 19.2 MHz */
- {34, 8, 1, 1, -1, -1, -1, -1}, /* 26 MHz */
- {29, 7, 1, 1, -1, -1, -1, -1}, /* 27 MHz */
- {64, 24, 1, 1, -1, -1, -1, -1} /* 38.4 MHz */
+ {49, 5, 1, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
+ {35, 5, 1, 1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
+ {46, 8, 1, 1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
+ {34, 8, 1, 1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
+ {64, 24, 1, 1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
};
/* ABE M & N values with 32K clock as source */
static const struct dpll_params abe_dpll_params_32k_196608khz = {
- 750, 0, 1, 1, -1, -1, -1, -1
+ 750, 0, 1, 1, -1, -1, -1, -1, -1, -1
};
static const struct dpll_params usb_dpll_params_1920mhz[NUM_SYS_CLKS] = {
- {80, 0, 2, -1, -1, -1, -1, -1}, /* 12 MHz */
- {960, 12, 2, -1, -1, -1, -1, -1}, /* 13 MHz */
- {400, 6, 2, -1, -1, -1, -1, -1}, /* 16.8 MHz */
- {50, 0, 2, -1, -1, -1, -1, -1}, /* 19.2 MHz */
- {480, 12, 2, -1, -1, -1, -1, -1}, /* 26 MHz */
- {320, 8, 2, -1, -1, -1, -1, -1}, /* 27 MHz */
- {25, 0, 2, -1, -1, -1, -1, -1} /* 38.4 MHz */
+ {400, 4, 2, -1, -1, -1, -1, -1, -1, -1}, /* 12 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 13 MHz */
+ {400, 6, 2, -1, -1, -1, -1, -1, -1, -1}, /* 16.8 MHz */
+ {400, 7, 2, -1, -1, -1, -1, -1, -1, -1}, /* 19.2 MHz */
+ {480, 12, 2, -1, -1, -1, -1, -1, -1, -1}, /* 26 MHz */
+ {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1}, /* 27 MHz */
+ {400, 15, 2, -1, -1, -1, -1, -1, -1, -1} /* 38.4 MHz */
};
void setup_post_dividers(u32 *const base, const struct dpll_params *params)
@@ -193,7 +213,7 @@ void setup_post_dividers(u32 *const base, const struct dpll_params *params)
const struct dpll_params *get_mpu_dpll_params(void)
{
u32 sysclk_ind = get_sys_clk_index();
- return &mpu_dpll_params_1100mhz[sysclk_ind];
+ return &mpu_dpll_params_800mhz[sysclk_ind];
}
const struct dpll_params *get_core_dpll_params(void)
@@ -201,8 +221,7 @@ const struct dpll_params *get_core_dpll_params(void)
u32 sysclk_ind = get_sys_clk_index();
/* Configuring the DDR to be at 532mhz */
- return &core_dpll_params_2128mhz_ddr266[sysclk_ind];
-
+ return &core_dpll_params_2128mhz_ddr532[sysclk_ind];
}
const struct dpll_params *get_per_dpll_params(void)
@@ -243,19 +262,33 @@ void scale_vcores(void)
{
u32 volt;
- setup_sri2c();
+ omap_vc_init(PRM_VC_I2C_CHANNEL_FREQ_KHZ);
+
+ /* Palmas settings */
+ volt = VDD_CORE;
+ do_scale_vcore(SMPS_REG_ADDR_8_CORE, volt);
- /* Enable 1.22V from TPS for vdd_mpu */
- volt = 1220;
- do_scale_tps62361(TPS62361_REG_ADDR_SET1, volt);
+ volt = VDD_MPU;
+ do_scale_vcore(SMPS_REG_ADDR_12_MPU, volt);
- /* VCORE 1 - for vdd_core */
- volt = 1000;
- do_scale_vcore(SMPS_REG_ADDR_VCORE1, volt);
+ volt = VDD_MM;
+ do_scale_vcore(SMPS_REG_ADDR_45_IVA, volt);
- /* VCORE 2 - for vdd_MM */
- volt = 1125;
- do_scale_vcore(SMPS_REG_ADDR_VCORE2, volt);
+}
+
+u32 get_offset_code(u32 volt_offset)
+{
+ u32 offset_code, step = 10000; /* 10 mV represented in uV */
+
+ volt_offset -= PALMAS_SMPS_BASE_VOLT_UV;
+
+ offset_code = (volt_offset + step - 1) / step;
+
+ /*
+ * Offset codes 1-6 all give the base voltage in Palmas
+ * Offset code 0 switches OFF the SMPS
+ */
+ return offset_code + 6;
}
/*
@@ -306,6 +339,12 @@ void enable_basic_clocks(void)
setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl,
HSMMC_CLKCTRL_CLKSEL_MASK);
+ /* Set the correct clock dividers for mmc */
+ setbits_le32(&prcm->cm_l3init_hsmmc1_clkctrl,
+ HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
+ setbits_le32(&prcm->cm_l3init_hsmmc2_clkctrl,
+ HSMMC_CLKCTRL_CLKSEL_DIV_MASK);
+
/* Select 32KHz clock as the source of GPTIMER1 */
setbits_le32(&prcm->cm_wkup_gptimer1_clkctrl,
GPTIMER1_CLKCTRL_CLKSEL_MASK);
@@ -314,6 +353,18 @@ void enable_basic_clocks(void)
clk_modules_hw_auto_essential,
clk_modules_explicit_en_essential,
1);
+
+ /* Select 384Mhz for GPU as its the POR for ES1.0 */
+ setbits_le32(&prcm->cm_sgx_sgx_clkctrl,
+ CLKSEL_GPU_HYD_GCLK_MASK);
+ setbits_le32(&prcm->cm_sgx_sgx_clkctrl,
+ CLKSEL_GPU_CORE_GCLK_MASK);
+
+ /* Enable SCRM OPT clocks for PER and CORE dpll */
+ setbits_le32(&prcm->cm_wkupaon_scrm_clkctrl,
+ OPTFCLKEN_SCRM_PER_MASK);
+ setbits_le32(&prcm->cm_wkupaon_scrm_clkctrl,
+ OPTFCLKEN_SCRM_CORE_MASK);
}
void enable_basic_uboot_clocks(void)
@@ -371,6 +422,7 @@ void enable_non_essential_clocks(void)
&prcm->cm_l3instr_intrconn_wp1_clkctrl,
&prcm->cm_l3init_hsi_clkctrl,
&prcm->cm_l3init_hsusbtll_clkctrl,
+ &prcm->cm_l4per_hdq1w_clkctrl,
0
};
@@ -393,7 +445,6 @@ void enable_non_essential_clocks(void)
&prcm->cm_l4per_gptimer11_clkctrl,
&prcm->cm_l4per_gptimer3_clkctrl,
&prcm->cm_l4per_gptimer4_clkctrl,
- &prcm->cm_l4per_hdq1w_clkctrl,
&prcm->cm_l4per_mcspi2_clkctrl,
&prcm->cm_l4per_mcspi3_clkctrl,
&prcm->cm_l4per_mcspi4_clkctrl,
diff --git a/arch/arm/cpu/armv7/omap5/hwinit.c b/arch/arm/cpu/armv7/omap5/hwinit.c
index fa8e390c17..d01cc81333 100644
--- a/arch/arm/cpu/armv7/omap5/hwinit.c
+++ b/arch/arm/cpu/armv7/omap5/hwinit.c
@@ -38,7 +38,7 @@
DECLARE_GLOBAL_DATA_PTR;
-u32 *const omap5_revision = (u32 *)OMAP5_SRAM_SCRATCH_OMAP5_REV;
+u32 *const omap_si_rev = (u32 *)OMAP5_SRAM_SCRATCH_OMAP5_REV;
static struct gpio_bank gpio_bank_54xx[6] = {
{ (void *)OMAP54XX_GPIO1_BASE, METHOD_GPIO_24XX },
@@ -57,6 +57,89 @@ const struct gpio_bank *const omap_gpio_bank = gpio_bank_54xx;
*/
void do_io_settings(void)
{
+ u32 io_settings = 0, mask = 0;
+ struct omap_sys_ctrl_regs *ioregs_base =
+ (struct omap_sys_ctrl_regs *) SYSCTRL_GENERAL_CORE_BASE;
+
+ /* Impedance settings EMMC, C2C 1,2, hsi2 */
+ mask = (ds_mask << 2) | (ds_mask << 8) |
+ (ds_mask << 16) | (ds_mask << 18);
+ io_settings = readl(&(ioregs_base->control_smart1io_padconf_0)) &
+ (~mask);
+ io_settings |= (ds_60_ohm << 8) | (ds_45_ohm << 16) |
+ (ds_45_ohm << 18) | (ds_60_ohm << 2);
+ writel(io_settings, &(ioregs_base->control_smart1io_padconf_0));
+
+ /* Impedance settings Mcspi2 */
+ mask = (ds_mask << 30);
+ io_settings = readl(&(ioregs_base->control_smart1io_padconf_1)) &
+ (~mask);
+ io_settings |= (ds_60_ohm << 30);
+ writel(io_settings, &(ioregs_base->control_smart1io_padconf_1));
+
+ /* Impedance settings C2C 3,4 */
+ mask = (ds_mask << 14) | (ds_mask << 16);
+ io_settings = readl(&(ioregs_base->control_smart1io_padconf_2)) &
+ (~mask);
+ io_settings |= (ds_45_ohm << 14) | (ds_45_ohm << 16);
+ writel(io_settings, &(ioregs_base->control_smart1io_padconf_2));
+
+ /* Slew rate settings EMMC, C2C 1,2 */
+ mask = (sc_mask << 8) | (sc_mask << 16) | (sc_mask << 18);
+ io_settings = readl(&(ioregs_base->control_smart2io_padconf_0)) &
+ (~mask);
+ io_settings |= (sc_fast << 8) | (sc_na << 16) | (sc_na << 18);
+ writel(io_settings, &(ioregs_base->control_smart2io_padconf_0));
+
+ /* Slew rate settings hsi2, Mcspi2 */
+ mask = (sc_mask << 24) | (sc_mask << 28);
+ io_settings = readl(&(ioregs_base->control_smart2io_padconf_1)) &
+ (~mask);
+ io_settings |= (sc_fast << 28) | (sc_fast << 24);
+ writel(io_settings, &(ioregs_base->control_smart2io_padconf_1));
+
+ /* Slew rate settings C2C 3,4 */
+ mask = (sc_mask << 16) | (sc_mask << 18);
+ io_settings = readl(&(ioregs_base->control_smart2io_padconf_2)) &
+ (~mask);
+ io_settings |= (sc_na << 16) | (sc_na << 18);
+ writel(io_settings, &(ioregs_base->control_smart2io_padconf_2));
+
+ /* impedance and slew rate settings for usb */
+ mask = (usb_i_mask << 29) | (usb_i_mask << 26) | (usb_i_mask << 23) |
+ (usb_i_mask << 20) | (usb_i_mask << 17) | (usb_i_mask << 14);
+ io_settings = readl(&(ioregs_base->control_smart3io_padconf_1)) &
+ (~mask);
+ io_settings |= (ds_60_ohm << 29) | (ds_60_ohm << 26) |
+ (ds_60_ohm << 23) | (sc_fast << 20) |
+ (sc_fast << 17) | (sc_fast << 14);
+ writel(io_settings, &(ioregs_base->control_smart3io_padconf_1));
+
+ /* LPDDR2 io settings */
+ writel(DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
+ &(ioregs_base->control_ddrch1_0));
+ writel(DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
+ &(ioregs_base->control_ddrch1_1));
+ writel(DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
+ &(ioregs_base->control_ddrch2_0));
+ writel(DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN,
+ &(ioregs_base->control_ddrch2_1));
+ writel(DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN,
+ &(ioregs_base->control_lpddr2ch1_0));
+ writel(DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN,
+ &(ioregs_base->control_lpddr2ch1_1));
+ writel(DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL,
+ &(ioregs_base->control_ddrio_0));
+ writel(DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL,
+ &(ioregs_base->control_ddrio_1));
+ writel(DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL,
+ &(ioregs_base->control_ddrio_2));
+
+ /* Efuse settings */
+ writel(EFUSE_1, &(ioregs_base->control_efuse_1));
+ writel(EFUSE_2, &(ioregs_base->control_efuse_2));
+ writel(EFUSE_3, &(ioregs_base->control_efuse_3));
+ writel(EFUSE_4, &(ioregs_base->control_efuse_4));
}
#endif
@@ -71,8 +154,23 @@ void init_omap_revision(void)
switch (rev) {
case MIDR_CORTEX_A15_R0P0:
- *omap5_revision = OMAP5430_ES1_0;
+ *omap_si_rev = OMAP5430_ES1_0;
+ break;
default:
- *omap5_revision = OMAP5430_SILICON_ID_INVALID;
+ *omap_si_rev = OMAP5430_SILICON_ID_INVALID;
}
}
+
+void reset_cpu(ulong ignored)
+{
+ u32 omap_rev = omap_revision();
+
+ /*
+ * WARM reset is not functional in case of OMAP5430 ES1.0 soc.
+ * So use cold reset in case instead.
+ */
+ if (omap_rev == OMAP5430_ES1_0)
+ writel(PRM_RSTCTRL_RESET << 0x1, PRM_RSTCTRL);
+ else
+ writel(PRM_RSTCTRL_RESET, PRM_RSTCTRL);
+}
diff --git a/arch/arm/cpu/armv7/omap5/sdram_elpida.c b/arch/arm/cpu/armv7/omap5/sdram.c
index ad198e6d1b..b2b5753e89 100644
--- a/arch/arm/cpu/armv7/omap5/sdram_elpida.c
+++ b/arch/arm/cpu/armv7/omap5/sdram.c
@@ -1,5 +1,5 @@
/*
- * Timing and Organization details of the Elpida parts used in OMAP5
+ * Timing and Organization details of the ddr device parts used in OMAP5
* EVM
*
* (C) Copyright 2010
@@ -48,31 +48,76 @@
*/
#ifdef CONFIG_SYS_EMIF_PRECALCULATED_TIMING_REGS
-
-const struct emif_regs emif_regs_elpida_532_mhz_1cs = {
- .sdram_config_init = 0x80801aB2,
- .sdram_config = 0x808022B2,
+const struct emif_regs emif_regs_532_mhz_2cs = {
+ .sdram_config_init = 0x80800EBA,
+ .sdram_config = 0x808022BA,
.ref_ctrl = 0x0000081A,
.sdram_tim1 = 0x772F6873,
- .sdram_tim2 = 0x304A129A,
- .sdram_tim3 = 0x02F7E45F,
+ .sdram_tim2 = 0x304a129a,
+ .sdram_tim3 = 0x02f7e45f,
+ .read_idle_ctrl = 0x00050000,
+ .zq_config = 0x000b3215,
+ .temp_alert_config = 0x08000a05,
+ .emif_ddr_phy_ctlr_1_init = 0x0E28420d,
+ .emif_ddr_phy_ctlr_1 = 0x0E28420d,
+ .emif_ddr_ext_phy_ctrl_1 = 0x04020080,
+ .emif_ddr_ext_phy_ctrl_2 = 0x28C518A3,
+ .emif_ddr_ext_phy_ctrl_3 = 0x518A3146,
+ .emif_ddr_ext_phy_ctrl_4 = 0x0014628C,
+ .emif_ddr_ext_phy_ctrl_5 = 0x04010040
+};
+
+const struct emif_regs emif_regs_266_mhz_2cs = {
+ .sdram_config_init = 0x80800EBA,
+ .sdram_config = 0x808022BA,
+ .ref_ctrl = 0x0000040D,
+ .sdram_tim1 = 0x2A86B419,
+ .sdram_tim2 = 0x1025094A,
+ .sdram_tim3 = 0x026BA22F,
.read_idle_ctrl = 0x00050000,
- .zq_config = 0x000B3215,
- .temp_alert_config = 0x08000A05,
- .emif_ddr_phy_ctlr_1_init = 0x0E38200D,
- .emif_ddr_phy_ctlr_1 = 0x0E38200D
+ .zq_config = 0x000b3215,
+ .temp_alert_config = 0x08000a05,
+ .emif_ddr_phy_ctlr_1_init = 0x0E28420d,
+ .emif_ddr_phy_ctlr_1 = 0x0E28420d,
+ .emif_ddr_ext_phy_ctrl_1 = 0x04020080,
+ .emif_ddr_ext_phy_ctrl_2 = 0x0A414829,
+ .emif_ddr_ext_phy_ctrl_3 = 0x14829052,
+ .emif_ddr_ext_phy_ctrl_4 = 0x000520A4,
+ .emif_ddr_ext_phy_ctrl_5 = 0x04010040
};
-const struct dmm_lisa_map_regs lisa_map_4G_x_1_x_2 = {
- .dmm_lisa_map_0 = 0xFF020100,
+const struct dmm_lisa_map_regs lisa_map_4G_x_2_x_2 = {
+ .dmm_lisa_map_0 = 0x0,
.dmm_lisa_map_1 = 0,
.dmm_lisa_map_2 = 0,
- .dmm_lisa_map_3 = 0x80640300
+ .dmm_lisa_map_3 = 0x80740300
+};
+
+const u32 ext_phy_ctrl_const_base[EMIF_EXT_PHY_CTRL_CONST_REG] = {
+ 0x01004010,
+ 0x00001004,
+ 0x04010040,
+ 0x01004010,
+ 0x00001004,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x80080080,
+ 0x00800800,
+ 0x08102040,
+ 0x00000001,
+ 0x540A8150,
+ 0xA81502a0,
+ 0x002A0540,
+ 0x00000000,
+ 0x00000000,
+ 0x00000000,
+ 0x00000077
};
static void emif_get_reg_dump_sdp(u32 emif_nr, const struct emif_regs **regs)
{
- *regs = &emif_regs_elpida_532_mhz_1cs;
+ *regs = &emif_regs_532_mhz_2cs;
}
void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
__attribute__((weak, alias("emif_get_reg_dump_sdp")));
@@ -80,7 +125,7 @@ void emif_get_reg_dump(u32 emif_nr, const struct emif_regs **regs)
static void emif_get_dmm_regs_sdp(const struct dmm_lisa_map_regs
**dmm_lisa_regs)
{
- *dmm_lisa_regs = &lisa_map_4G_x_1_x_2;
+ *dmm_lisa_regs = &lisa_map_4G_x_2_x_2;
}
void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs)
@@ -88,11 +133,11 @@ void emif_get_dmm_regs(const struct dmm_lisa_map_regs **dmm_lisa_regs)
#else
-static const struct lpddr2_device_details elpida_4G_S4_details = {
+static const struct lpddr2_device_details dev_4G_S4_details = {
.type = LPDDR2_TYPE_S4,
.density = LPDDR2_DENSITY_4Gb,
.io_width = LPDDR2_IO_WIDTH_32,
- .manufacturer = LPDDR2_MANUFACTURER_ELPIDA
+ .manufacturer = LPDDR2_MANUFACTURER_SAMSUNG
};
static void emif_get_device_details_sdp(u32 emif_nr,
@@ -100,10 +145,8 @@ static void emif_get_device_details_sdp(u32 emif_nr,
struct lpddr2_device_details *cs1_device_details)
{
/* EMIF1 & EMIF2 have identical configuration */
- *cs0_device_details = elpida_4G_S4_details;
-
- /* Nothing is conected on cs1 */
- cs1_device_details = NULL;
+ *cs0_device_details = dev_4G_S4_details;
+ *cs1_device_details = dev_4G_S4_details;
}
void emif_get_device_details(u32 emif_nr,
@@ -137,7 +180,7 @@ static const struct lpddr2_ac_timings timings_jedec_532_mhz = {
.tFAW = 50
};
-static const struct lpddr2_min_tck min_tck_elpida = {
+static const struct lpddr2_min_tck min_tck = {
.tRL = 3,
.tRP_AB = 3,
.tRCD = 3,
@@ -152,13 +195,13 @@ static const struct lpddr2_min_tck min_tck_elpida = {
.tFAW = 8
};
-static const struct lpddr2_ac_timings *elpida_ac_timings[MAX_NUM_SPEEDBINS] = {
+static const struct lpddr2_ac_timings *ac_timings[MAX_NUM_SPEEDBINS] = {
&timings_jedec_532_mhz
};
-static const struct lpddr2_device_timings elpida_4G_S4_timings = {
- .ac_timings = elpida_ac_timings,
- .min_tck = &min_tck_elpida,
+static const struct lpddr2_device_timings dev_4G_S4_timings = {
+ .ac_timings = ac_timings,
+ .min_tck = &min_tck,
};
void emif_get_device_timings_sdp(u32 emif_nr,
@@ -166,8 +209,8 @@ void emif_get_device_timings_sdp(u32 emif_nr,
const struct lpddr2_device_timings **cs1_device_timings)
{
/* Identical devices on EMIF1 & EMIF2 */
- *cs0_device_timings = &elpida_4G_S4_timings;
- *cs1_device_timings = NULL;
+ *cs0_device_timings = &dev_4G_S4_timings;
+ *cs1_device_timings = &dev_4G_S4_timings;
}
void emif_get_device_timings(u32 emif_nr,
diff --git a/arch/arm/cpu/armv7/rda/Makefile b/arch/arm/cpu/armv7/rda/Makefile
new file mode 100644
index 0000000000..b09e7b48ca
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/Makefile
@@ -0,0 +1,62 @@
+#
+# (C) Copyright 2000-2006
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(SOC).o
+
+COBJS-y += timer.o serial.o ifc.o cpu.o rda_sys.o ispi.o
+COBJS-$(CONFIG_SPL_SIGNATURE_CHECK_IMAGE) += rda_crypto.o rda_romapi.o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += spl.o
+COBJS-$(CONFIG_SPL_XMODEM_LOAD) += xmodem_boot.o
+else
+ifdef CONFIG_MDCOM
+COBJS-y += mdcom.o
+endif
+endif
+
+ifndef CONFIG_SKIP_LOWLEVEL_INIT
+SOBJS += lowlevel_init.o
+endif
+
+SRCS := $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS-y) $(SOBJS))
+START := $(addprefix $(obj),$(START))
+
+all: $(obj).depend $(LIB)
+
+$(LIB): $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/arm/cpu/armv7/rda/config.mk b/arch/arm/cpu/armv7/rda/config.mk
new file mode 100644
index 0000000000..79fde41c14
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/config.mk
@@ -0,0 +1,95 @@
+#
+# (C) Copyright 2002
+# Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+include $(TOPDIR)/slt.mk
+include $(TOPDIR)/customer.mk
+include $(TOPDIR)/board/$(SOC)/$(BOARD)/config.mk
+
+image_flags :=
+
+ifneq ($(TARGET_SYSTEMIMAGE_USE_UBIFS),)
+image_flags += -DUBIFS_SYSTEM_IMAGE
+endif
+
+ifneq ($(TARGET_USERIMAGES_USE_UBIFS),)
+image_flags += -DUBIFS_USER_IMAGES
+endif
+
+ifneq ($(TARGET_SYSTEMIMAGE_USE_EXT4),)
+image_flags += -DEXTFS_SYSTEM_IMAGE
+endif
+
+ifneq ($(TARGET_USERIMAGES_USE_EXT4),)
+image_flags += -DEXTFS_USER_IMAGES
+endif
+
+image_flags += -DSPL_APPENDING_TO=$(SPL_APPENDING_TO)
+
+pdl_flags :=
+ifeq ($(pdl), 1)
+pdl_flags += -DCONFIG_RDA_PDL
+endif
+
+nand_flags :=
+ifneq ($(BOARD_NAND_PAGE_SIZE),)
+nand_flags += -DNAND_PAGE_SIZE=$(BOARD_NAND_PAGE_SIZE)
+else
+nand_flags += -DNAND_PAGE_SIZE=4096
+endif
+ifneq ($(BOARD_FLASH_BLOCK_SIZE),)
+nand_flags += -DNAND_BLOCK_SIZE=$(BOARD_FLASH_BLOCK_SIZE)
+else
+nand_flags += -DNAND_BLOCK_SIZE=262144
+endif
+ifneq ($(BOARD_NAND_SPARE_SIZE),)
+nand_flags += -DNAND_SPARE_SIZE=$(BOARD_NAND_SPARE_SIZE)
+else
+nand_flags += -DNAND_SPARE_SIZE=218
+endif
+ifneq ($(BOARD_NAND_ECCMSGLEN),)
+nand_flags += -DNAND_ECCMSGLEN=$(BOARD_NAND_ECCMSGLEN)
+else
+nand_flags += -DNAND_ECCMSGLEN=1024
+endif
+ifneq ($(BOARD_NAND_ECCBITS),)
+nand_flags += -DNAND_ECCBITS=$(BOARD_NAND_ECCBITS)
+else
+nand_flags += -DNAND_ECCBITS=24
+endif
+ifneq ($(BOARD_NAND_OOB_SIZE),)
+nand_flags += -DNAND_OOBSIZE=$(BOARD_NAND_OOB_SIZE)
+else
+nand_flags += -DNAND_OOBSIZE=32
+endif
+
+build_variant_flags :=
+
+ifneq ($(UBOOT_VARIANT), user)
+build_variant_flags += -DCONFIG_UBOOT_VARIANT_DEBUG
+endif
+
+ifneq ($(BUILD_DISPLAY_ID),)
+build_variant_flags += -DBUILD_DISPLAY_ID="\"$(BUILD_DISPLAY_ID)\""
+endif
+
+PLATFORM_CPPFLAGS += $(image_flags) $(pdl_flags) $(build_variant_flags) $(nand_flags)
+
diff --git a/arch/arm/cpu/armv7/rda/cpu.c b/arch/arm/cpu/armv7/rda/cpu.c
new file mode 100644
index 0000000000..e040455aa6
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/cpu.c
@@ -0,0 +1,87 @@
+#include <common.h>
+#include <asm/arch/hardware.h>
+
+void enable_neon(void)
+{
+ /* enable cp10 and cp11 */
+ uint32_t val;
+
+ __asm__ volatile("mrc p15, 0, %0, c1, c1, 2" : "=r" (val));
+ printf("CPU: p15-c1-c1 (NSACR): 0x%08x", val);
+ val |= (3<<10);
+ val &= ~(3<<14);
+ __asm__ volatile("mcr p15, 0, %0, c1, c1, 2" :: "r" (val));
+ printf(" -> 0x%08x\n", val);
+
+ __asm__ volatile("mrc p15, 0, %0, c1, c0, 2" : "=r" (val));
+ printf("CPU: p15-c1-c0 (CPACR): 0x%08x", val);
+ val |= (3<<22)|(3<<20);
+ __asm__ volatile("mcr p15, 0, %0, c1, c0, 2" :: "r" (val));
+ printf(" -> 0x%08x\n", val);
+
+ /* set enable bit in fpexc */
+ val = (1<<30);
+ __asm__ volatile("mcr p10, 7, %0, c8, c0, 0" :: "r" (val));
+}
+
+#if (defined(CONFIG_MACH_RDA8810E) \
+||defined(CONFIG_MACH_RDA8820) \
+||defined(CONFIG_MACH_RDA8810H) \
+||defined(CONFIG_MACH_RDA8850E))
+/* SMP MACHs */
+void smp_setup(void)
+{
+ asm volatile(
+ "mrc p15, 0, r0, c1, c0, 1\n"
+ "orr r0, r0, #0x40\n"
+ "mcr p15, 0, r0, c1, c0, 1\n");
+}
+#endif
+
+void enable_caches(void)
+{
+#if (defined(CONFIG_MACH_RDA8810E) \
+||defined(CONFIG_MACH_RDA8820) \
+||defined(CONFIG_MACH_RDA8810H) \
+||defined(CONFIG_MACH_RDA8850E))
+ printf("CPU: enable smp\n");
+ smp_setup();
+#endif
+#ifndef CONFIG_SYS_ICACHE_OFF
+ printf("CPU: enable instruction caches\n");
+ icache_enable();
+#endif
+#ifndef CONFIG_SYS_DCACHE_OFF
+ printf("CPU: enable data caches\n");
+ dcache_enable();
+#endif
+#ifndef CONFIG_SYS_NEON_OFF
+ printf("CPU: enable neon\n");
+ enable_neon();
+#endif
+}
+
+#ifdef CONFIG_DISPLAY_CPUINFO
+/* Print CPU information */
+int print_cpuinfo(void)
+{
+#if defined(CONFIG_MACH_RDAARM926EJS)
+ printf("RDAARM926EJS FPGA\n");
+#elif defined(CONFIG_MACH_RDA8810)
+ printf("RDA8810 SoC\n");
+#elif defined(CONFIG_MACH_RDA8810E)
+ printf("RDA8810E SoC\n");
+#elif defined(CONFIG_MACH_RDA8820)
+ printf("RDA8820 SoC\n");
+#elif defined(CONFIG_MACH_RDA8850)
+ printf("RDA8850 SoC\n");
+#elif defined(CONFIG_MACH_RDA8850E)
+ printf("RDA8850E SoC\n");
+#elif defined(CONFIG_MACH_RDA8810H)
+ printf("RDA8810H SoC\n");
+#else
+#error "Unknown RDA CPU"
+#endif
+ return 0;
+}
+#endif /* CONFIG_DISPLAY_CPUINFO */
diff --git a/arch/arm/cpu/armv7/rda/ifc.c b/arch/arm/cpu/armv7/rda/ifc.c
new file mode 100644
index 0000000000..f280cac0af
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/ifc.c
@@ -0,0 +1,172 @@
+#include "common.h"
+#include <errno.h>
+
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_ifc.h>
+#include <asm/arch/ifc.h>
+
+#undef assert
+#ifdef DEBUG
+#include <assert.h>
+#else
+#define assert(...)
+#endif
+
+#define HAL_TRACE(...)
+
+HAL_IFC_REQUEST_ID_T g_halModuleIfcChannelOwner[SYS_IFC_STD_CHAN_NB];
+
+void hal_IfcOpen(void)
+{
+ u8 channel;
+
+ // Initialize the channel table with unknown requests.
+ for (channel = 0; channel < SYS_IFC_STD_CHAN_NB; channel++)
+ {
+ g_halModuleIfcChannelOwner[channel] = HAL_IFC_NO_REQWEST;
+ }
+}
+
+HAL_IFC_REQUEST_ID_T hal_IfcGetOwner(u8 channel)
+{
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return HAL_IFC_NO_REQWEST;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ return g_halModuleIfcChannelOwner[channel];
+}
+
+void hal_IfcChannelRelease(HAL_IFC_REQUEST_ID_T requestId, u8 channel)
+{
+ //u32 status;
+
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ //status = hal_SysEnterCriticalSection();
+ if (g_halModuleIfcChannelOwner[channel] == requestId)
+ {
+ // disable this channel
+ hwp_sysIfc->std_ch[channel].control = (SYS_IFC_REQ_SRC(requestId)
+ | SYS_IFC_CH_RD_HW_EXCH
+ | SYS_IFC_DISABLE);
+ // read the status of this channel
+ if (hwp_sysIfc->std_ch[channel].status & SYS_IFC_ENABLE)
+ {
+ HAL_TRACE(_HAL | TSTDOUT,0," Strange, the released channel not disabled yet");
+ }
+ // Write the TC to 0 for next time the channel is re-enabled
+ hwp_sysIfc->std_ch[channel].tc = 0;
+ }
+ //hal_SysExitCriticalSection(status);
+}
+
+void hal_IfcChannelFlush(HAL_IFC_REQUEST_ID_T requestId, u8 channel)
+{
+ //u32 status;
+
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ // Check that the channel is really owned by the peripheral
+ // which is doing the request, it could have been release
+ // automatically or by an IRQ handler.
+ //status = hal_SysEnterCriticalSection();
+ if (g_halModuleIfcChannelOwner[channel] == requestId)
+ {
+ // If fifo not empty, flush it.
+ if ( !(hwp_sysIfc->std_ch[channel].status & SYS_IFC_FIFO_EMPTY) )
+ {
+ hwp_sysIfc->std_ch[channel].control =
+ hwp_sysIfc->std_ch[channel].control | SYS_IFC_FLUSH;
+ }
+ }
+ //hal_SysExitCriticalSection(status);
+}
+
+BOOL hal_IfcChannelIsFifoEmpty(HAL_IFC_REQUEST_ID_T requestId, u8 channel)
+{
+ //u32 status;
+ BOOL fifoIsEmpty = TRUE;
+
+ // Here, we consider the transfer as previously finished.
+ if (channel == HAL_UNKNOWN_CHANNEL) return fifoIsEmpty;
+
+ // Channel number too big.
+ assert(channel < SYS_IFC_STD_CHAN_NB, channel);
+
+ // Check that the channel is really owned by the peripheral
+ // which is doing the request, it could have been release
+ // automatically or by an IRQ handler.
+ //status = hal_SysEnterCriticalSection();
+ if (g_halModuleIfcChannelOwner[channel] == requestId)
+ {
+ fifoIsEmpty =
+ (FALSE != (hwp_sysIfc->std_ch[channel].status & SYS_IFC_FIFO_EMPTY));
+ }
+ //hal_SysExitCriticalSection(status);
+
+ return fifoIsEmpty;
+}
+
+u8 hal_IfcTransferStart(HAL_IFC_REQUEST_ID_T requestId, u8* memStartAddr, u32 xferSize, HAL_IFC_MODE_T ifcMode)
+{
+ //u32 status = hal_SysEnterCriticalSection();
+ u8 channel;
+ u8 i;
+
+ // Check buffer alignment depending on the mode
+ if (ifcMode != HAL_IFC_SIZE_8_MODE_MANUAL && ifcMode != HAL_IFC_SIZE_8_MODE_AUTO)
+ {
+ // Then ifcMode == HAL_IFC_SIZE_32, check word alignment
+ assert(((u32)memStartAddr%4) == 0,
+ "HAL IFC: 32 bits transfer misaligned 0x@%08X", memStartAddr);
+ }
+ else
+ {
+ // ifcMode == HAL_IFC_SIZE_8, nothing to check
+ }
+
+ // Check the requested id is not currently already used.
+ for (i = 0; i < SYS_IFC_STD_CHAN_NB ; i++)
+ {
+ if (GET_BITFIELD(hwp_sysIfc->std_ch[i].control, SYS_IFC_REQ_SRC) == requestId)
+ {
+ // This channel is or was used for the requestId request.
+ // Check it is still in use.
+ assert((hwp_sysIfc->std_ch[i].status & SYS_IFC_ENABLE) == 0,
+ "HAL: Attempt to use the IFC to deal with a %d"
+ " request still active on channel %d", requestId, i);
+ }
+ }
+
+ channel = SYS_IFC_CH_TO_USE(hwp_sysIfc->get_ch) ;
+
+ if (channel >= SYS_IFC_STD_CHAN_NB)
+ {
+ serial_puts("HAL_UNKNOWN_CHANNEL\n");
+ //hal_SysExitCriticalSection(status);
+ return HAL_UNKNOWN_CHANNEL;
+ }
+
+ g_halModuleIfcChannelOwner[channel] = requestId;
+ hwp_sysIfc->std_ch[channel].start_addr = (u32) memStartAddr;
+ hwp_sysIfc->std_ch[channel].tc = xferSize;
+ hwp_sysIfc->std_ch[channel].control = (SYS_IFC_REQ_SRC(requestId)
+ | ifcMode
+ | SYS_IFC_CH_RD_HW_EXCH
+ | SYS_IFC_ENABLE);
+
+ //hal_SysExitCriticalSection(status);
+ return channel;
+}
+
diff --git a/arch/arm/cpu/armv7/rda/ispi.c b/arch/arm/cpu/armv7/rda/ispi.c
new file mode 100644
index 0000000000..d466ef0ced
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/ispi.c
@@ -0,0 +1,314 @@
+/*
+ * (C) Copyright 2013
+ * RDA Microelectronics Inc.
+ *
+ * Derived from drivers/spi/rda_ispi.c
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+#include <common.h>
+#include <linux/types.h>
+#include <asm/arch/reg_spi.h>
+#include <asm/arch/ispi.h>
+
+#ifdef CONFIG_MACH_RDA8850E
+#include <asm/arch/reg_rf_spi.h>
+
+#define RDA6220_ADDR_MASK 0xFF
+#define RDA6220_ADDR_OFFSET 23
+#define RDA6220_DATA_MASK 0xFFFF
+#define RDA6220_DATA_OFFSET 7
+
+#define RDA6220_WRITE_FMT(addr, data) (((addr & RDA6220_ADDR_MASK) << RDA6220_ADDR_OFFSET) |\
+ ((data & RDA6220_DATA_MASK) << RDA6220_DATA_OFFSET))
+
+#define RDA6220_READ_FMT(addr, data) ( ((addr & RDA6220_ADDR_MASK) << RDA6220_ADDR_OFFSET)|\
+ ((data & RDA6220_DATA_MASK) << RDA6220_DATA_OFFSET)|\
+ 1<<31);
+
+void modem_RfspiOpen(void)
+{
+ // Setter
+ hwp_rfSpi->Ctrl = 0x8fd82e45;
+
+ // To remove the "FORCE ZERO" in case of low-active CS
+ hwp_rfSpi->Command = 0;
+ hwp_rfSpi->Divider = RF_SPI_DIVIDER(23);
+}
+
+void modem_rf_spiWrite(const u8 *Cmd, u32 CmdSize)
+{
+ u32 loop=0;
+
+ // Flush the Tx fifo
+ hwp_rfSpi->Command = RF_SPI_FLUSH_CMD_FIFO | RF_SPI_FLUSH_RX_FIFO;
+ for (loop=0; loop<CmdSize; loop++)
+ {
+ hwp_rfSpi->Cmd_Data = Cmd[loop];
+ }
+ // Set the cmd size
+ hwp_rfSpi->Cmd_Size = RF_SPI_CMD_SIZE(CmdSize);
+
+ // And send the command
+ hwp_rfSpi->Command = RF_SPI_SEND_CMD;
+
+ // Wait for the SPI to start - at least one byte has been sent
+ while(GET_BITFIELD(hwp_rfSpi->Status, RF_SPI_CMD_DATA_LEVEL) >= CmdSize);
+ // Wait for the SPI to finish
+ while((hwp_rfSpi->Status & RF_SPI_ACTIVE_STATUS) != 0);
+}
+
+
+void modem_RfspiWrite(const u8 addr, u32 data)
+{
+ u8 cmd[4] = {0};
+ u32 cmd_word = RDA6220_WRITE_FMT(addr, data);
+
+ cmd[0] = (cmd_word >> 24) & 0xff;
+ cmd[1] = (cmd_word >>16) & 0xff;
+ cmd[2] = (cmd_word >> 8) & 0xff;
+ cmd[3] = (cmd_word >> 0) & 0xff;
+
+ modem_rf_spiWrite(cmd, 4);
+}
+
+void modem_RfspiInit_624M(void)
+{
+ modem_RfspiOpen();
+
+ modem_RfspiWrite(0x30, 0x5182);
+
+ mdelay(10); // delay 10 ms
+ modem_RfspiWrite(0x30, 0x5187);
+ mdelay(10); // delay 10 ms
+ // xtal setting
+ modem_RfspiWrite(0xb0, 0xe404);
+ modem_RfspiWrite(0xb8, 0x1800);
+ modem_RfspiWrite(0xba, 0x0401);
+ modem_RfspiWrite(0xc0, 0x0008);
+ modem_RfspiWrite(0xfe, 0x4000);
+ modem_RfspiWrite(0x10, 0x0880);
+ modem_RfspiWrite(0x20, 0x03e4);
+ modem_RfspiWrite(0x22, 0x0488);
+ modem_RfspiWrite(0xe8, 0x1000);
+ modem_RfspiWrite(0xe6, 0x0000);
+ modem_RfspiWrite(0xe4, 0x0c00);
+ modem_RfspiWrite(0xe4, 0x8c00);
+ modem_RfspiWrite(0xfe, 0x0000);
+ modem_RfspiWrite(0x4e, 0xe538);
+ modem_RfspiWrite(0x4c, 0x04b9);
+ modem_RfspiWrite(0x4c, 0x84b9);
+
+}
+
+void modem_8850eeco2_RfspiInit_624M(void)
+{
+ modem_RfspiOpen();
+
+ modem_RfspiWrite(0x30, 0x5182);
+
+ mdelay(10); // delay 10 ms
+ modem_RfspiWrite(0x30, 0x5187);
+ mdelay(10); // delay 10 ms
+ // xtal setting
+
+ modem_RfspiWrite(0xfe, 0x4000);
+ modem_RfspiWrite(0x10, 0x0880);
+ modem_RfspiWrite(0xfe, 0x0000);
+}
+#endif
+
+static HWP_SPI_T *hwp_ispi = hwp_spi3;
+
+void ispi_open(int modemSpi)
+{
+ u32 cfgReg = 0;
+ u32 ctrlReg = 0;
+
+ // spi_clk_freq = APB2 / ((div+1)*2)
+ // the maximum clock frequency is 7MHz~8MHz
+ // the spi clock frequency is 5MHz when div is 0x13
+ cfgReg = 0x130003;
+ ctrlReg = 0x2019d821;
+
+ if (modemSpi)
+ hwp_ispi = hwp_mspi2;
+ else
+ hwp_ispi = hwp_spi3;
+
+ // Activate the ISPI.
+ hwp_ispi->cfg = cfgReg;
+ hwp_ispi->ctrl = ctrlReg;
+
+ // No IRQ.
+ hwp_ispi->irq = 0;
+}
+
+static u8 ispi_tx_fifo_avail(void)
+{
+ u8 freeRoom;
+
+ // Get avail level.
+ freeRoom = GET_BITFIELD(hwp_ispi->status, SPI_TX_SPACE);
+
+ return freeRoom;
+}
+
+static int ispi_tx_finished(void)
+{
+ u32 spiStatus;
+ spiStatus = hwp_ispi->status;
+
+ // If ISPI FSM is active and the TX Fifo is empty
+ // (ie available space == Fifo size), the tf is not done
+ if ((!(hwp_ispi->status & SPI_ACTIVE_STATUS))
+ && (SPI_TX_FIFO_SIZE == GET_BITFIELD(spiStatus, SPI_TX_SPACE))) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+static u32 ispi_send_data(u32 csId, u32 data, int read)
+{
+ u32 freeRoom;
+
+ // Clear data upper bit to only keep the data frame.
+ u32 reg = data & ~(SPI_CS_MASK | SPI_READ_ENA_MASK);
+
+ // Add CS and read mode bit
+ reg |= SPI_CS(csId) | (read ? SPI_READ_ENA : 0);
+
+ // Enter critical section.
+ //u32 status = hwp_sysIrq->SC;
+
+ // Check FIFO availability.
+ freeRoom = GET_BITFIELD(hwp_ispi->status, SPI_TX_SPACE);
+
+ if (freeRoom > 0) {
+ // Write data.
+ hwp_ispi->rxtx_buffer = reg;
+
+ // Exit critical section.
+ //hwp_sysIrq->SC = status;
+ return 1;
+ } else {
+ // Exit critical section.
+ //hwp_sysIrq->SC = status;
+ return 0;
+ }
+}
+
+static u32 ispi_get_data(u32 * recData)
+{
+ u32 nbAvailable;
+
+ // Enter critical section.
+ //u32 status = hwp_sysIrq->SC;
+
+ nbAvailable = GET_BITFIELD(hwp_ispi->status, SPI_RX_LEVEL);
+
+ if (nbAvailable > 0) {
+ *recData = hwp_ispi->rxtx_buffer;
+
+ // Exit critical section.
+ //hwp_sysIrq->SC = status;
+ return 1;
+ } else {
+ // Exit critical section.
+ //hwp_sysIrq->SC = status;
+ return 0;
+ }
+}
+
+void ispi_reg_write(u32 regIdx, u32 value)
+{
+ u32 wrData;
+
+ wrData = (0 << 25) | ((regIdx & 0x1ff) << 16) | (value & 0xffff);
+
+ while (ispi_tx_fifo_avail() < 1 ||
+ ispi_send_data(0, wrData, FALSE) == 0) ;
+
+ //wait until any previous transfers have ended
+ while (!ispi_tx_finished()) ;
+}
+
+u32 ispi_reg_read(u32 regIdx)
+{
+ u32 wrData, rdData = 0;
+ u32 count;
+
+ wrData = (1 << 25) | ((regIdx & 0x1ff) << 16) | 0;
+
+ while (ispi_tx_fifo_avail() < 1 ||
+ ispi_send_data(0, wrData, TRUE) == 0) ;
+
+ //wait until any previous transfers have ended
+ while (!ispi_tx_finished()) ;
+
+ count = ispi_get_data(&rdData);
+ if (1 != count)
+ serial_puts("ABB ISPI count err!");
+
+ rdData &= 0xffff;
+
+ return rdData;
+}
+
+u16 rda_read_efuse(int page_index)
+{
+ u16 rvalue, wvalue;
+
+ ispi_open(1);
+
+ wvalue = 0x2e0 | page_index;
+ pmu_reg_write(0x51, wvalue);
+ udelay(2000);
+ wvalue = 0x2f0 | page_index;
+ pmu_reg_write(0x51, wvalue);
+ rvalue = pmu_reg_read(0x52);
+ pmu_reg_write(0x51, 0x0200);
+
+ ispi_open(0);
+ return rvalue;
+}
+
+#ifdef EFUSE_DUMP
+void dump_efuse(void)
+{
+ u16 rvalue,wvalue;
+ int i;
+
+ ispi_open(1);
+
+ for(i = 0;i<16;i++){
+ wvalue = 0x2e0 | i;
+ pmu_reg_write(0x51, wvalue);
+ udelay(2000);
+ wvalue = 0x2f0 | i;
+ pmu_reg_write(0x51, wvalue);
+ rvalue = pmu_reg_read(0x52);
+ pmu_reg_write(0x51, 0x0200);
+
+ printf("page%d = %d \n", i, rvalue);
+ }
+ ispi_open(0);
+}
+#endif
diff --git a/arch/arm/cpu/armv7/rda/mdcom.c b/arch/arm/cpu/armv7/rda/mdcom.c
new file mode 100644
index 0000000000..8bb9e082c4
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/mdcom.c
@@ -0,0 +1,877 @@
+#include "common.h"
+#include <errno.h>
+
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/reg_mdcom.h>
+#include <asm/arch/reg_xcpu.h>
+#include <asm/arch/defs_mdcom.h>
+#include <asm/arch/mdcom.h>
+#include <asm/arch/factory.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/reg_cfg_regs.h>
+
+
+static u32 modem_logic_base_addr = 0x02000000;
+void rda_mdcom_set_logic_base_addr(u32 base)
+{
+ modem_logic_base_addr = base & 0xffff0000;
+ printf("## Set modem logic base address %#x\n", modem_logic_base_addr);
+}
+
+#define RDA_MODEM_IN_DDR(addr, modem_logic_base_addr) \
+ (((u32)(addr) & 0x0F000000) == (modem_logic_base_addr & 0x0F000000))
+
+/*
+ * Convert a modem address to an AP address
+ */
+u32 rda_mdcom_address_modem2ap(u32 addr)
+{
+#if defined(_TGT_MODEM_MEM_SIZE) && (_TGT_MODEM_MEM_SIZE > 0)
+ if (RDA_MODEM_IN_DDR(addr, modem_logic_base_addr))
+ return (RDA_MODEM_RAM_BASE - modem_logic_base_addr + addr);
+ else
+ return RDA_ADD_M2A(addr);
+#else
+ return RDA_ADD_M2A(addr);
+#endif
+}
+
+/*
+ * Setup modem running env
+ */
+int rda_mdcom_setup_run_env(u32 pc, u32 param)
+{
+ RDA_BOOT_HST_MONITOR_X_CTX_T *ctx =
+ (RDA_BOOT_HST_MONITOR_X_CTX_T *)RDA_BOOT_CTX_ADD;
+ ctx->cmdType = 0xFF;
+ ctx->pc = pc;
+ ctx->sp = 0;
+ ctx->param = (void *)param;
+ ctx->returnedValue = (void *)0;
+
+#if defined(_TGT_MODEM_MEM_SIZE) && (_TGT_MODEM_MEM_SIZE > 0)
+ // Set DDR access offset
+ if (RDA_MODEM_IN_DDR(pc, modem_logic_base_addr)) {
+#ifdef CONFIG_MACH_RDA8850E
+ u32 offs = RDA_MODEM_RAM_BASE - modem_logic_base_addr;
+
+ /* 0x1000000 alignment */
+ if(offs & 0xffffff) {
+ printf("\nERROR: modem memory map offset %#x is not aligned to 0x1000000.\n", offs);
+ printf("ERROR: modem cannot work, abort.\n");
+ return -1;
+ }
+
+ hwp_configRegs->Mem_mode_Sel = 0;
+ hwp_configRegs->H2X_DDR_Offset = offs;
+ hwp_configRegs->H2X_WD_DDR_Offset = offs;
+#else
+ u32 offs = CFG_REGS_H2X_DDR_OFFSET((RDA_MODEM_RAM_BASE - modem_logic_base_addr) >> 24);
+ hwp_configRegs->H2X_DDR_Offset = offs;
+#endif
+ };
+#endif
+
+ return 0;
+}
+
+/*
+ * Modem calibration data section address
+ */
+void rda_mdcom_get_calib_section(u32 *addr, u32 *len)
+{
+ if (addr)
+ *addr = RDA_MODEM_CAL_ADDR;
+ if (len)
+ *len = RDA_MODEM_CAL_LEN;
+}
+
+/*
+ * Modem extended calibration data section address
+ */
+void rda_mdcom_get_ext_calib_section(u32 *addr, u32 *len)
+{
+ if (addr)
+ *addr = RDA_MODEM_EXT_CAL_ADDR;
+ if (len)
+ *len = RDA_MODEM_EXT_CAL_LEN;
+}
+
+/*
+ * Modem factory section address
+ */
+void rda_mdcom_get_factory_section(u32 *addr, u32 *len)
+{
+ if (addr)
+ *addr = RDA_MODEM_FACT_ADDR;
+ if (len)
+ *len = RDA_MODEM_FACT_LEN;
+}
+
+/*
+ * AP factory section address
+ */
+void rda_mdcom_get_ap_factory_section(u32 *addr, u32 *len)
+{
+ if (addr)
+ *addr = RDA_AP_FACT_ADDR;
+ if (len)
+ *len = RDA_AP_FACT_LEN;
+}
+
+/*
+ * Reset cause
+ */
+u32 rda_mdcom_get_reset_cause(void)
+{
+ return ((RDA_AP_MBX_HEARTBEAT_T *)RDA_AP_MBX_HEARTBEAT_ADD)->resetCause;
+}
+
+/*
+ * Interface version
+ */
+u32 rda_mdcom_get_interface_version(void)
+{
+ return ((RDA_AP_MBX_HEARTBEAT_T *)RDA_AP_MBX_HEARTBEAT_ADD)->version;
+}
+
+/*
+ * Magic number
+ */
+int rda_mdcom_system_started_before(void)
+{
+ RDA_AP_MBX_MAGIC_NUMBER_T *magic =
+ (RDA_AP_MBX_MAGIC_NUMBER_T *)RDA_AP_MBX_MAGIC_NUMBER_ADD;
+ return magic->sysStarted == RDA_MAGIC_SYSTEM_STARTED_FLAG;
+}
+
+void rda_mdcom_set_system_started_flag(void)
+{
+ RDA_AP_MBX_MAGIC_NUMBER_T *magic =
+ (RDA_AP_MBX_MAGIC_NUMBER_T *)RDA_AP_MBX_MAGIC_NUMBER_ADD;
+ magic->sysStarted = RDA_MAGIC_SYSTEM_STARTED_FLAG;
+}
+
+int rda_mdcom_modem_crashed_before(void)
+{
+ RDA_AP_MBX_MAGIC_NUMBER_T *magic =
+ (RDA_AP_MBX_MAGIC_NUMBER_T *)RDA_AP_MBX_MAGIC_NUMBER_ADD;
+ return magic->modemCrashed == RDA_MAGIC_MODEM_CRASH_FLAG;
+}
+
+int rda_mdcom_calib_update_cmd_valid(void)
+{
+ RDA_AP_MBX_MAGIC_NUMBER_T *magic =
+ (RDA_AP_MBX_MAGIC_NUMBER_T *)RDA_AP_MBX_MAGIC_NUMBER_ADD;
+ if (magic->factUpdateCmd == RDA_MAGIC_FACT_UPD_CMD_FLAG &&
+ (magic->factUpdateType &
+ RDA_MAGIC_FACT_UPD_TYPE_FLAG_MASK) ==
+ RDA_MAGIC_FACT_UPD_TYPE_FLAG &&
+ (magic->factUpdateType & RDA_MAGIC_FACT_UPD_TYPE_CALIB))
+ return 1;
+ else
+ return 0;
+}
+
+int rda_mdcom_factory_update_cmd_valid(void)
+{
+ RDA_AP_MBX_MAGIC_NUMBER_T *magic =
+ (RDA_AP_MBX_MAGIC_NUMBER_T *)RDA_AP_MBX_MAGIC_NUMBER_ADD;
+ if (magic->factUpdateCmd == RDA_MAGIC_FACT_UPD_CMD_FLAG &&
+ (magic->factUpdateType &
+ RDA_MAGIC_FACT_UPD_TYPE_FLAG_MASK) ==
+ RDA_MAGIC_FACT_UPD_TYPE_FLAG &&
+ (magic->factUpdateType & RDA_MAGIC_FACT_UPD_TYPE_FACT))
+ return 1;
+ else
+ return 0;
+}
+
+int rda_mdcom_ap_factory_update_cmd_valid(void)
+{
+ RDA_AP_MBX_MAGIC_NUMBER_T *magic =
+ (RDA_AP_MBX_MAGIC_NUMBER_T *)RDA_AP_MBX_MAGIC_NUMBER_ADD;
+ if (magic->factUpdateCmd == RDA_MAGIC_FACT_UPD_CMD_FLAG &&
+ (magic->factUpdateType &
+ RDA_MAGIC_FACT_UPD_TYPE_FLAG_MASK) ==
+ RDA_MAGIC_FACT_UPD_TYPE_FLAG &&
+ (magic->factUpdateType & RDA_MAGIC_FACT_UPD_TYPE_AP_FACT))
+ return 1;
+ else
+ return 0;
+}
+
+/*
+ * Modem log info
+ */
+static int rda_mdcom_modem_address_valid(u32 addr)
+{
+ if ((addr >= RDA_MODEM_INTSRAM_BASE &&
+ addr < RDA_MODEM_INTSRAM_END) ||
+ (addr >= RDA_MODEM_RAM_BASE &&
+ addr < RDA_MODEM_RAM_END)) {
+ return 1;
+ }
+ return 0;
+}
+
+void rda_mdcom_init_all_log_info(void)
+{
+ /* Init log info */
+ RDA_AP_MBX_LOG_BUF_INFO_T *log =
+ (RDA_AP_MBX_LOG_BUF_INFO_T *)RDA_AP_MBX_LOG_BUF_INFO_ADD;
+ memset(log, 0, sizeof(*log));
+ /* Init modem crash flag */
+ RDA_AP_MBX_MAGIC_NUMBER_T *magic =
+ (RDA_AP_MBX_MAGIC_NUMBER_T *)RDA_AP_MBX_MAGIC_NUMBER_ADD;
+ magic->modemCrashed = 0;
+ magic->factUpdateCmd = 0;
+ magic->factUpdateType = 0;
+ /* Init heartbeat structure members */
+ memset((RDA_AP_MBX_HEARTBEAT_T *)RDA_AP_MBX_HEARTBEAT_ADD, 0,
+ sizeof(RDA_AP_MBX_HEARTBEAT_T));
+}
+
+void rda_mdcom_get_modem_log_info(u32 *addr, u32 *len)
+{
+ RDA_AP_MBX_LOG_BUF_INFO_T *log =
+ (RDA_AP_MBX_LOG_BUF_INFO_T *)RDA_AP_MBX_LOG_BUF_INFO_ADD;
+ u32 log_addr = rda_mdcom_address_modem2ap(log->modemAddr);
+ u32 log_len = log->modemLen;
+
+ /* Check whether the address is valid */
+ if (!rda_mdcom_modem_address_valid(log_addr) ||
+ log_len > RDA_AP_MBX_MAX_MODEM_LOG_LEN) {
+ log_addr = 0;
+ log_len = 0;
+ }
+
+ if (addr)
+ *addr = log_addr;
+ if (len)
+ *len = log_len;
+}
+
+void rda_mdcom_get_modem_exception_info(u32 *addr, u32 *len)
+{
+ RDA_AP_MBX_LOG_BUF_INFO_T *log =
+ (RDA_AP_MBX_LOG_BUF_INFO_T *)RDA_AP_MBX_LOG_BUF_INFO_ADD;
+ u32 exc_addr = RDA_ADD_M2A(log->modemExcAddr);
+ u32 exc_len = log->modemExcLen;
+
+ /* Check whether the address is valid */
+ if (!rda_mdcom_modem_address_valid(exc_addr) ||
+ exc_len > RDA_AP_MBX_MAX_MODEM_EXC_LEN) {
+ exc_addr = 0;
+ exc_len = 0;
+ }
+
+ if (addr)
+ *addr = exc_addr;
+ if (len)
+ *len = exc_len;
+}
+
+/*
+ * Modem XCPU info
+ */
+void rda_mdcom_show_xcpu_info(void)
+{
+ printf("\n");
+ printf("Modem XCPU info:\n");
+ printf("----------------\n");
+ printf("Cause = 0x%08x\n", hwp_xcpu->cp0_Cause);
+ printf("Status = 0x%08x\n", hwp_xcpu->cp0_Status);
+ printf("BadAddr = 0x%08x\n", hwp_xcpu->cp0_BadVAddr);
+ printf("EPC = 0x%08x\n", hwp_xcpu->cp0_EPC);
+ printf("RA = 0x%08x\n", hwp_xcpu->Regfile_RA);
+ printf("PC = 0x%08x\n", hwp_xcpu->rf0_addr);
+ printf("----------------\n");
+}
+
+/*
+ * Modem software version info
+ */
+void rda_mdcom_show_software_version(void)
+{
+ int i = 0;
+ char buf[256];
+ char *str;
+ RDA_MODEM_MAP_VERSION_T *version;
+ RDA_MODEM_MAP_MODULE_T *map;
+ RDA_MODEM_MAP_MODULE_T **ptr =
+ (RDA_MODEM_MAP_MODULE_T **)RDA_MODEM_MAP_PTR;
+
+ printf("\n");
+ map = (RDA_MODEM_MAP_MODULE_T *)rda_mdcom_address_modem2ap(
+ (u32)*ptr);
+ if (!ptr || !rda_mdcom_modem_address_valid((u32)map)) {
+ printf("No modem software versions\n");
+ return;
+ }
+
+ printf("Modem software versions:\n");
+ printf("------------------------\n");
+ for (i = 0; i < RDA_MODEM_MAP_QTY; i++, map++) {
+ if (!map->version)
+ continue;
+ version = (RDA_MODEM_MAP_VERSION_T *)
+ rda_mdcom_address_modem2ap((u32)map->version);
+ if (!rda_mdcom_modem_address_valid((u32)version))
+ continue;
+ printf("[%02d]\n", i);
+ printf("revision = %d / 0x %07x\n",
+ version->revision,
+ version->revision);
+ printf("number = %d\n", version->number);
+ printf("date = %d\n", version->date);
+ str = (char *)rda_mdcom_address_modem2ap((u32)version->string);
+ if (version->string &&
+ rda_mdcom_modem_address_valid((u32)str)) {
+ snprintf(buf, sizeof(buf), "%s", str);
+ buf[sizeof(buf) - 1] = '\0';
+ printf("string = %s\n", buf);
+ } else {
+ printf("string = <n/a>\n");
+ }
+ }
+ printf("------------------------\n");
+}
+
+/*
+ * Communication channels
+ */
+static struct rda_mdcom_channel rda_rda_mdcom_chn[] = {
+ /* AT command channel */
+ {
+ RDA_MDCOM_LINE_AT_CMD,
+ RDA_MDCOM_LINE_AT_CMD_FC,
+ (struct rda_mdcom_channel_head*)RDA_MDCOM_CHN_AT_HEAD_ADD_READ,
+ (void *)RDA_MDCOM_CHN_AT_BUF_ADD_READ,
+ RDA_MDCOM_CHN_AT_BUF_LEN_READ-1,
+ (struct rda_mdcom_channel_head*)RDA_MDCOM_CHN_AT_HEAD_ADD_WRITE,
+ (void *)RDA_MDCOM_CHN_AT_BUF_ADD_WRITE,
+ RDA_MDCOM_CHN_AT_BUF_LEN_WRITE-1
+ },
+
+ /* SYSTEM command channel */
+ {
+ RDA_MDCOM_LINE_SYSTEM,
+ RDA_MDCOM_LINE_SYSTEM_FC,
+ (struct rda_mdcom_channel_head*)RDA_MDCOM_CHN_SYS_HEAD_ADD_READ,
+ (void *)RDA_MDCOM_CHN_SYS_BUF_ADD_READ,
+ RDA_MDCOM_CHN_SYS_BUF_LEN_READ-1,
+ (struct rda_mdcom_channel_head*)RDA_MDCOM_CHN_SYS_HEAD_ADD_WRITE,
+ (void *)RDA_MDCOM_CHN_SYS_BUF_ADD_WRITE,
+ RDA_MDCOM_CHN_SYS_BUF_LEN_WRITE-1
+ },
+
+ /* TRACE communciation channel */
+ {
+ RDA_MDCOM_LINE_TRACE,
+ RDA_MDCOM_LINE_TRACE_FC,
+ (struct rda_mdcom_channel_head*)RDA_MDCOM_CHN_TRACE_HEAD_ADD_READ,
+ (void *)RDA_MDCOM_CHN_TRACE_BUF_ADD_READ,
+ RDA_MDCOM_CHN_TRACE_BUF_LEN_READ-1,
+ (struct rda_mdcom_channel_head*)RDA_MDCOM_CHN_TRACE_HEAD_ADD_WRITE,
+ (void *)RDA_MDCOM_CHN_TRACE_BUF_ADD_WRITE,
+ RDA_MDCOM_CHN_TRACE_BUF_LEN_WRITE-1
+ }
+};
+
+int rda_mdcom_init_port(int port_id)
+{
+ switch (port_id) {
+ case RDA_MDCOM_PORT0:
+ hwp_mdComregs->Mask_Set = COMREGS_IRQ0_MASK_SET(0);
+ hwp_mdComregs->Mask_Clr = COMREGS_IRQ0_MASK_CLR(0xFF);
+ hwp_mdComregs->ItReg_Set = COMREGS_IRQ0_SET(0);
+ hwp_mdComregs->ItReg_Clr = COMREGS_IRQ0_CLR(0xFF);
+ return 0;
+
+ case RDA_MDCOM_PORT1:
+ hwp_mdComregs->Mask_Set = COMREGS_IRQ1_MASK_SET(0);
+ hwp_mdComregs->Mask_Clr = COMREGS_IRQ1_MASK_CLR(0xFF);
+ hwp_mdComregs->ItReg_Set = COMREGS_IRQ1_SET(0);
+ hwp_mdComregs->ItReg_Clr = COMREGS_IRQ1_CLR(0xFF);
+ return 0;
+
+ default:
+ return -EINVAL;
+ }
+}
+
+int rda_mdcom_line_set(int port_id, int line_id)
+{
+ if (line_id & ~0x7) {
+ return -EINVAL;
+ }
+
+ switch (port_id) {
+ case RDA_MDCOM_PORT0:
+ hwp_mdComregs->ItReg_Set = COMREGS_IRQ0_SET(1 << line_id);
+ return 0;
+
+ case RDA_MDCOM_PORT1:
+ hwp_mdComregs->ItReg_Set = COMREGS_IRQ1_SET(1 << line_id);
+ return 0;
+
+ default:
+ return -EINVAL;
+ }
+}
+
+int rda_mdcom_line_clear(int port_id, int line_id)
+{
+ if (line_id & ~0x7) {
+ return -EINVAL;
+ }
+
+ switch (port_id) {
+ case RDA_MDCOM_PORT0:
+ hwp_mdComregs->ItReg_Clr = COMREGS_IRQ0_CLR(1 << line_id);
+ return 0;
+
+ case RDA_MDCOM_PORT1:
+ hwp_mdComregs->ItReg_Clr = COMREGS_IRQ0_CLR(1 << line_id);
+ return 0;
+
+ default:
+ return -EINVAL;
+ }
+}
+
+int rda_mdcom_line_set_check(int port_id, int line_id)
+{
+ if (line_id & ~0x7) {
+ return 0;
+ }
+
+ switch (port_id) {
+ case RDA_MDCOM_PORT0:
+ return !!(hwp_mdComregs->ItReg_Clr & COMREGS_IRQ0_CLR(1 << line_id));
+
+ case RDA_MDCOM_PORT1:
+ return !!(hwp_mdComregs->ItReg_Clr & COMREGS_IRQ1_CLR(1 << line_id));
+
+ default:
+ return 0;
+ }
+}
+
+int rda_mdcom_line_clear_check(int port_id, int line_id)
+{
+ if (line_id & ~0x7) {
+ return 0;
+ }
+
+ switch (port_id) {
+ case RDA_MDCOM_PORT0:
+ return !(hwp_mdComregs->ItReg_Set & COMREGS_IRQ0_SET(1 << line_id));
+
+ case RDA_MDCOM_PORT1:
+ return !(hwp_mdComregs->ItReg_Set & COMREGS_IRQ0_SET(1 << line_id));
+
+ default:
+ return 0;
+ }
+}
+
+int rda_mdcom_line_set_wait(int port_id, int line_id, int waittime)
+{
+ unsigned long end_time = get_ticks() + waittime;
+
+ if (line_id & ~0x7) {
+ return 0;
+ }
+
+ switch (port_id) {
+ case RDA_MDCOM_PORT0:
+ while (!(hwp_mdComregs->ItReg_Clr & COMREGS_IRQ0_CLR(1 << line_id))) {
+ if ((waittime >= 0) && (end_time <= get_ticks()))
+ return 0;
+ }
+ return 1;
+
+ case RDA_MDCOM_PORT1:
+ while (!(hwp_mdComregs->ItReg_Clr & COMREGS_IRQ1_CLR(1 << line_id))) {
+ if ((waittime >= 0) && (end_time <= get_ticks()))
+ return 0;
+ }
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+int rda_mdcom_line_clear_wait(int port_id, int line_id, int waittime)
+{
+ unsigned long end_time = get_ticks() + waittime;
+
+ if (line_id & ~0x7) {
+ return 0;
+ }
+
+ switch (port_id) {
+ case RDA_MDCOM_PORT0:
+ while (hwp_mdComregs->ItReg_Set & COMREGS_IRQ0_SET(1 << line_id)) {
+ if ((waittime >= 0) && (end_time <= get_ticks()))
+ return 0;
+ }
+ return 1;
+
+ case RDA_MDCOM_PORT1:
+ while (hwp_mdComregs->ItReg_Set & COMREGS_IRQ0_SET(1 << line_id)) {
+ if ((waittime >= 0) && (end_time <= get_ticks()))
+ return 0;
+ }
+ return 1;
+
+ default:
+ return 0;
+ }
+}
+
+void rda_mdcom_port_show(void)
+{
+ printf("RDA MDCOM ports stauts:\n");
+ printf("REGISTER Cause = 0x%.16x\n", hwp_mdComregs->Cause);
+ printf("REGISTER Mask_Set = 0x%.16x\n", hwp_mdComregs->Mask_Set);
+ printf("REGISTER Mask_Clr = 0x%.16x\n", hwp_mdComregs->Mask_Clr);
+ printf("REGISTER ItReg_Set = 0x%.16x\n", hwp_mdComregs->ItReg_Set);
+ printf("REGISTER ItReg_Clr = 0x%.16x\n", hwp_mdComregs->ItReg_Clr);
+ printf("RDA MDCOM ports stauts end.\n");
+}
+
+int rda_mdcom_channel_init(const unsigned int channel)
+{
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ return -EINVAL;
+ }
+
+ memset(rda_rda_mdcom_chn[channel].read_buf_head, 0,
+ sizeof(struct rda_mdcom_channel_head));
+ memset(rda_rda_mdcom_chn[channel].write_buf_head, 0,
+ sizeof(struct rda_mdcom_channel_head));
+ return 0;
+}
+
+int rda_mdcom_channel_all_init(void)
+{
+ return rda_mdcom_channel_init(RDA_MDCOM_CHANNEL_AT) ||
+ rda_mdcom_channel_init(RDA_MDCOM_CHANNEL_SYSTEM) ||
+ rda_mdcom_channel_init(RDA_MDCOM_CHANNEL_TRACE);
+}
+
+int rda_mdcom_channel_buf_send_stream(const unsigned int channel, void *buf,
+ int size, int waittime)
+{
+ unsigned long end_time = get_ticks() + waittime;
+ struct rda_mdcom_channel* channel_ptr;
+ struct rda_mdcom_channel_head* channel_head_ptr;
+ int buffer_size_mask;
+ int count = 0;
+
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ return -EINVAL;
+ }
+
+ if (size < 0) {
+ return -EINVAL;
+ }
+
+ channel_ptr = &rda_rda_mdcom_chn[channel];
+ channel_head_ptr = channel_ptr->write_buf_head;
+ buffer_size_mask = channel_ptr->write_buf_size_mask;
+
+ while (1) {
+ int write_offset = channel_head_ptr->write_offset;
+ int remain_len = (buffer_size_mask + 1) -
+ ((write_offset - channel_head_ptr->read_offset) & buffer_size_mask);
+
+ if (remain_len > buffer_size_mask + 1 - write_offset) {
+ remain_len = buffer_size_mask + 1 - write_offset;
+ }
+
+ if (remain_len) {
+ if (remain_len > size) {
+ remain_len = size;
+ }
+
+ memcpy(((char*)channel_ptr->write_buf) + write_offset, buf, remain_len);
+ channel_head_ptr->write_offset = (write_offset + remain_len) & buffer_size_mask;
+ size -= remain_len;
+ buf = (char*)buf + remain_len;
+ count += remain_len;
+
+ if (!size) {
+ return count;
+ }
+ } else if ((waittime >= 0) && (end_time <= get_ticks())) {
+ return count;
+ }
+ }
+}
+
+int rda_mdcom_channel_buf_send_dgram(const unsigned int channel, void *buf,
+ int size, int waittime)
+{
+ unsigned long end_time = get_ticks() + waittime;
+ struct rda_mdcom_channel* channel_ptr;
+ struct rda_mdcom_channel_head* channel_head_ptr;
+ int buffer_size_mask, write_offset;
+
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ return -EINVAL;
+ }
+
+ if (size < 0) {
+ return -EINVAL;
+ }
+
+ channel_ptr = &rda_rda_mdcom_chn[channel];
+ channel_head_ptr = channel_ptr->write_buf_head;
+ buffer_size_mask = channel_ptr->write_buf_size_mask;
+ write_offset = ALIGN(channel_head_ptr->write_offset, 4) & buffer_size_mask;
+
+ while (1) {
+ int remain_len = (buffer_size_mask + 1) -
+ ((write_offset - channel_head_ptr->read_offset) & buffer_size_mask);
+
+ if (remain_len >= size) {
+ remain_len = buffer_size_mask + 1 - write_offset;
+
+ if (remain_len > size) {
+ remain_len = size;
+ }
+
+ memcpy(((char*)channel_ptr->write_buf) + write_offset, buf,
+ remain_len);
+
+ if (remain_len != size) {
+ memcpy(channel_ptr->write_buf, (char*)buf + remain_len,
+ size - remain_len);
+ }
+ channel_head_ptr->write_offset = (write_offset + size) &
+ buffer_size_mask;
+ return 0;
+ }
+
+ if ((waittime >= 0) && (end_time <= get_ticks())) {
+ return -EAGAIN;
+ }
+ }
+}
+
+int rda_mdcom_channel_buf_send_available(const unsigned int channel)
+{
+ struct rda_mdcom_channel* channel_ptr;
+ struct rda_mdcom_channel_head* channel_head_ptr;
+ int buffer_size_mask;
+ int read_offset;
+ int write_offset;
+
+ if (channel >= sizeof(rda_rda_mdcom_chn)/sizeof(struct rda_mdcom_channel)) {
+ return 0;
+ }
+
+ channel_ptr = &rda_rda_mdcom_chn[channel];
+ channel_head_ptr = channel_ptr->write_buf_head;
+ buffer_size_mask = channel_ptr->write_buf_size_mask;
+ read_offset = channel_head_ptr->read_offset;
+ write_offset = channel_head_ptr->write_offset;
+
+ return ((buffer_size_mask + 1) - ((write_offset - read_offset) & buffer_size_mask));
+}
+
+int rda_mdcom_channel_buf_recv_stream(const unsigned int channel, void *buf,
+ int size, int waittime)
+{
+ unsigned long end_time = get_ticks() + waittime;
+ struct rda_mdcom_channel* channel_ptr;
+ struct rda_mdcom_channel_head* channel_head_ptr;
+ int buffer_size_mask;
+ int count = 0;
+ int buf_offset = 0;
+
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ return -EINVAL;
+ }
+
+ if (size < 0) {
+ return -EINVAL;
+ }
+
+ channel_ptr = &rda_rda_mdcom_chn[channel];
+ channel_head_ptr = channel_ptr->read_buf_head;
+ buffer_size_mask = channel_ptr->read_buf_size_mask;
+
+ while (1) {
+ int read_offset = channel_head_ptr->read_offset;
+ int remain_len = channel_head_ptr->write_offset - read_offset;
+
+ if (remain_len < 0) {
+ remain_len = buffer_size_mask + 1 - read_offset;
+ }
+
+ if (remain_len) {
+ if (remain_len > size) {
+ remain_len = size;
+ }
+
+ memcpy((char *)buf + buf_offset, ((char*)channel_ptr->read_buf) + read_offset, remain_len);
+ channel_head_ptr->read_offset = (read_offset + remain_len) &
+ buffer_size_mask;
+ size -= remain_len;
+ count += remain_len;
+ buf_offset += remain_len;
+
+ if (!size) {
+ return count;
+ }
+ } else if ((waittime >= 0) && (end_time <= get_ticks())) {
+ return count;
+ }
+ }
+}
+
+int rda_mdcom_channel_buf_recv_dgram(const unsigned int channel, void *buf,
+ int size, int waittime)
+{
+ unsigned long end_time = get_ticks() + waittime;
+ struct rda_mdcom_channel* channel_ptr;
+ struct rda_mdcom_channel_head* channel_head_ptr;
+ int buffer_size_mask, read_offset;
+
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ return -EINVAL;
+ }
+
+ if (size < 0) {
+ return -EINVAL;
+ }
+
+ channel_ptr = &rda_rda_mdcom_chn[channel];
+ channel_head_ptr = channel_ptr->read_buf_head;
+ buffer_size_mask = channel_ptr->read_buf_size_mask;
+ read_offset = ALIGN(channel_head_ptr->read_offset, 4) & buffer_size_mask;
+
+ while (1) {
+ int remain_len = (channel_head_ptr->write_offset - read_offset +
+ buffer_size_mask + 1) & buffer_size_mask;
+
+ if (remain_len >= size) {
+ remain_len = buffer_size_mask + 1 - read_offset;
+
+ if (remain_len > size) {
+ remain_len = size;
+ }
+
+ memcpy(buf, ((char*)channel_ptr->read_buf) + read_offset, remain_len);
+
+ if (remain_len != size) {
+ memcpy(((char *)buf + remain_len), channel_ptr->read_buf, size - remain_len);
+ }
+ channel_head_ptr->read_offset = (read_offset + size) & buffer_size_mask;
+
+ return 0;
+ }
+
+ if ((waittime >= 0) && (end_time <= get_ticks())) {
+ return -EAGAIN;
+ }
+ }
+}
+
+int rda_mdcom_channel_buf_recv_available(const unsigned int channel)
+{
+ struct rda_mdcom_channel* channel_ptr;
+ struct rda_mdcom_channel_head* channel_head_ptr;
+ int buffer_size_mask;
+ int read_offset;
+ int write_offset;
+
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ return 0;
+ }
+
+ channel_ptr = &rda_rda_mdcom_chn[channel];
+ channel_head_ptr = channel_ptr->write_buf_head;
+ buffer_size_mask = channel_ptr->write_buf_size_mask;
+ read_offset = channel_head_ptr->read_offset;
+ write_offset = channel_head_ptr->write_offset;
+
+ return ((write_offset - read_offset) & buffer_size_mask);
+}
+
+void rda_mdcom_channel_show(const unsigned int channel)
+{
+ printf("RDA MDCOM channel %d stauts:\n", channel);
+
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ printf("Channel number is out of range, ERROR!\n");
+ } else {
+ struct rda_mdcom_channel* channel_ptr = &rda_rda_mdcom_chn[channel];
+ struct rda_mdcom_channel_head* channel_head_ptr;
+ printf("Read buffer head address = 0x%p\n",
+ channel_ptr->read_buf_head);
+ printf("Read buffer address = 0x%p\n",
+ channel_ptr->read_buf);
+ printf("Read buffer length = %d\n",
+ channel_ptr->read_buf_size_mask + 1);
+ channel_head_ptr = channel_ptr->read_buf_head;
+ printf("Read buffer offset read = 0x%x\n",
+ channel_head_ptr->read_offset);
+ printf("Read buffer offset write = 0x%x\n",
+ channel_head_ptr->write_offset);
+
+ printf("Write buffer head address = 0x%p\n",
+ channel_ptr->write_buf_head);
+ printf("Write buffer address = 0x%p\n",
+ channel_ptr->write_buf);
+ printf("Write buffer length = %d\n",
+ channel_ptr->write_buf_size_mask + 1);
+ channel_head_ptr = channel_ptr->write_buf_head;
+ printf("Write buffer offset read = 0x%x\n",
+ channel_head_ptr->read_offset);
+ printf("Write buffer offset write = 0x%x\n",
+ channel_head_ptr->write_offset);
+ }
+
+ printf("RDA MDCOM channel %d stauts end.\n", channel);
+}
+
+int rda_mdcom_tstc(const unsigned int channel)
+{
+ struct rda_mdcom_channel_head* channel_head_ptr;
+
+ if (channel >= sizeof(rda_rda_mdcom_chn) / sizeof(struct rda_mdcom_channel)) {
+ return 0;
+ }
+
+ channel_head_ptr = rda_rda_mdcom_chn[channel].read_buf_head;
+
+ return (channel_head_ptr->write_offset != channel_head_ptr->read_offset);
+}
+
+int rda_mdcom_getc(const unsigned int channel)
+{
+ char c = 0;
+
+ rda_mdcom_channel_buf_recv_stream(channel, &c, 1, -1);
+ return c;
+}
+
+void rda_mdcom_putc(const char c, const unsigned int channel)
+{
+ rda_mdcom_channel_buf_send_stream(channel, (void*)&c, 1, -1);
+}
+
+void rda_mdcom_puts(const char *s, const unsigned int channel)
+{
+ rda_mdcom_channel_buf_send_stream(channel, (void*)s, strlen(s), -1);
+}
+
diff --git a/arch/arm/cpu/armv7/rda/rda_crypto.c b/arch/arm/cpu/armv7/rda/rda_crypto.c
new file mode 100644
index 0000000000..63eca2e271
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/rda_crypto.c
@@ -0,0 +1,260 @@
+#include <common.h>
+#include <asm/u-boot.h>
+#include <asm/utils.h>
+#include <nand.h>
+#include <malloc.h>
+#include <image.h>
+#include <usb/usbserial.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/rda_crypto.h>
+#include <pdl.h>
+
+//#define RDA_CRYPTO_DEBUG
+
+#ifdef CONFIG_SIGNATURE_CHECK_IMAGE
+
+struct pubkey_cert_t {
+ struct {
+ uint16_t se_cfg; // vendor_id and key_index
+ uint8_t dummy[94]; // 96
+ struct pubkey pubkey; // +64
+ } c;
+ struct sig signature; // +96
+};
+
+struct rda_cert_t {
+ // R&D Certificate:
+ // Create a signature with name[16] =
+ // " R&D-CERT"(10)
+ // "F:0000"(6)
+ // zeros[16] = 0...
+ // Then Hash:
+ // sig.name, zeros, UNIQUE-ID
+ struct sig rnd_cert; // 96
+
+ // free space without sign checking:
+ uint8_t dummy[160]; // 160
+};
+
+
+struct rda_se_image {
+ uint8_t spl_code[48128+160];
+ struct sig image_signature; // 96
+ struct rda_cert_t cert; // 256
+ struct pubkey_cert_t vendor_pubkey_cert; // 256
+};
+
+#ifdef RDA_CRYPTO_DEBUG
+# define puts_deb(a) puts(a)
+#else
+# define puts_deb(a)
+# define debug_dump_key_and_signature(h,pk,sig,d,l)
+#endif
+
+#ifdef RDA_CRYPTO_DEBUG
+static void debug_dump_key_and_signature(
+ const char *header, const struct pubkey *pk, const struct sig *sig,
+ const void *data, unsigned data_len)
+{
+ if (sig) {
+ printf("%s signature:\n", header);
+ rda_dump_buf((char *)sig, 96);
+ }
+ if (pk) {
+ printf("%s public key:\n", header);
+ rda_dump_buf((char *)pk, 64);
+ }
+ if (data) {
+ printf("%s data:\n", header);
+ rda_dump_buf((char *)data, data_len);
+ }
+}
+#endif
+
+
+static int check_rnd_certificate(
+ const struct rda_cert_t *certs,
+ const struct pubkey *pubkey,
+ struct spl_security_info *info)
+{
+ int ret;
+ const struct sig *rnd_signature = &certs->rnd_cert;
+ struct {
+ uint8_t message[32];
+ struct chip_unique_id id;
+ } hashme;
+
+ puts_deb("Checking R&D Certificate\n");
+
+ // create message
+ memset(&hashme, 0, sizeof(hashme));
+ memcpy(hashme.message, rnd_signature->name, 16);
+ hashme.id = info->chip_unique_id;
+
+ // Dump the R&D hashme
+ debug_dump_key_and_signature("R&D hashme", pubkey, rnd_signature,
+ (char *)&hashme, sizeof(hashme));
+
+ ret = signature_check(
+ (const uint8_t*)&hashme, sizeof(hashme),
+ rnd_signature,
+ pubkey);
+
+ return ret;
+}
+
+
+static void get_device_security_context(
+ const struct rda_se_image *image,
+ struct spl_security_info *info)
+{
+ // Get ROM public key and context
+ info->secure_mode = get_chip_security_context(
+ &info->chip_security_context,
+ &info->pubkey);
+
+ int flags = info->chip_security_context.flags;
+
+ // Fix the return code if security hasn't been enabled
+ if ((flags & RDA_SE_CFG_SECURITY_ENABLE_BIT) == 0) {
+ puts_deb("(Security disabled by efuse flags)\n");
+ info->secure_mode = ROM_API_SECURITY_DISABLED;
+ return;
+ }
+
+ // Check if we a using the customer public-key certificate
+ if (flags & RDA_SE_CFG_INDIRECT_SIGN_BIT) {
+ const struct pubkey_cert_t *vendor_cert = &image->vendor_pubkey_cert;
+ puts_deb("(Using vendor pkcert as per efuse flags)\n");
+
+ // The vendor pkey cert has already been verified
+ // by the bootrom. For debugging check again here:
+#ifdef RDA_CRYPTO_DEBUG
+ // Dump the PKCERT data
+ debug_dump_key_and_signature("PKCERT",
+ &info->pubkey, &vendor_cert->signature,
+ &vendor_cert->c, sizeof(vendor_cert->c));
+
+ int ret;
+ ret = signature_check(
+ (uint8_t*)&vendor_cert->c, sizeof(vendor_cert->c),
+ &vendor_cert->signature,
+ &info->pubkey);
+ printf("PKCERT check return %d\n", ret);
+#endif
+ // copy public key certificate
+ info->pubkey = vendor_cert->c.pubkey;
+ }
+
+ // Sanity check for PKEY
+ if (memcmp(&info->pubkey, "RDASEd", 6) != 0) {
+ puts_deb("(Public key for signature check invalid)\n");
+ info->secure_mode = -1; // better: ROM_API_SECURITY_INVALID_PKEY
+ return;
+ }
+
+ // Dump the keys and signature when debugging
+ debug_dump_key_and_signature("PDL1 -",
+ &info->pubkey, &image->image_signature, NULL, 0);
+
+ // Check if device is in R&D mode
+ int rnd_status = check_rnd_certificate(&image->cert, &info->pubkey, info);
+ if (rnd_status == 0) {
+ puts("(R&D mode override) ");
+ // ... and disable security...
+ info->secure_mode = ROM_API_SECURITY_DISABLED;
+ }
+}
+
+
+int set_security_context(struct spl_security_info *info, const void *_image)
+{
+ const struct rda_se_image *image = _image;
+
+ memset(info, 0, sizeof(*info));
+
+ if (memcmp(romapi->magic, "RDA API", 8) != 0) {
+ puts("Board security: Not present\n");
+ info->secure_mode = ROM_API_SECURITY_UNAVAILABLE;
+ }
+ else {
+ puts("Board security: present ");
+
+ info->version = romapi->version;
+ get_chip_id(&info->chip_id);
+ get_chip_true_random(info->random, 32);
+ get_chip_unique(&info->chip_unique_id);
+
+ get_device_security_context(image, info);
+
+ switch (info->secure_mode) {
+ case ROM_API_SECURITY_ENABLED:
+ puts("and enabled.\n");
+ break;
+ case ROM_API_SECURITY_DISABLED:
+ puts("but disabled.\n");
+ break;
+ case ROM_API_INVALID_KEYINDEX:
+ case ROM_API_INVALID_VENDOR_ID:
+ puts("but has invalid key-index or vendor-id!\n");
+ break;
+ default:
+ puts("but has invalid configuration!\n");
+ break;
+ }
+ }
+ return info->secure_mode;
+}
+
+int image_sign_verify(const uint8_t *buffer, uint32_t len)
+{
+ spl_bd_t *spl_board_info = (spl_bd_t *)CONFIG_SPL_BOARD_INFO_ADDR;
+ struct spl_security_info *info = &spl_board_info->spl_security_info;
+
+ len -= sizeof(struct sig);
+ const struct sig *signature = (const struct sig *)(buffer + len);
+
+ puts("Verify image:\n");
+
+ // Check security mode
+ int secure_mode = info->secure_mode;
+ switch (secure_mode) {
+ case ROM_API_SECURITY_ENABLED:
+ // Check the signature of the image
+ debug_dump_key_and_signature("bootloader -",
+ &info->pubkey, signature, NULL, 0);
+ return signature_check(buffer, len, signature, &info->pubkey);
+ case ROM_API_SECURITY_DISABLED:
+ case ROM_API_SECURITY_UNAVAILABLE:
+ return 0;
+ default:
+ return secure_mode; // This is != 0 -> verify error
+ }
+}
+
+int image_sign_verify_uimage(image_header_t *hdr)
+{
+ return image_sign_verify((const uint8_t *)hdr,
+ image_get_image_size(hdr) + sizeof(struct sig));
+}
+
+#else
+int set_security_context(struct spl_security_info *info, const void *_image)
+{
+ memset(info, 0, sizeof(*info));
+
+ if (memcmp(romapi->magic, "RDA API", 8) == 0) {
+ puts("Board security: present ");
+
+ info->version = romapi->version;
+ get_chip_unique(&info->chip_unique_id);
+ }
+ return ROM_API_SECURITY_DISABLED;
+}
+
+int image_sign_verify(const uint8_t *buffer, uint32_t len)
+{
+ return 0;
+}
+#endif
+
diff --git a/arch/arm/cpu/armv7/rda/rda_romapi.c b/arch/arm/cpu/armv7/rda/rda_romapi.c
new file mode 100644
index 0000000000..3eca055ed5
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/rda_romapi.c
@@ -0,0 +1,133 @@
+/*
+ * Warning:
+ *
+ * This file is a mess of debugging and ROM bug workarounds.
+ */
+
+/* Enable a workaround for a bug in the bootrom romapi. */
+#define RDA8810_VENDOR_EFUSE_WORKAROUND
+
+/* Enable debugging certificates in pdl1: */
+//#define RDA_CRYPTO_DEBUG_FAKE_ROMCERT
+
+
+
+#ifdef RDA_CRYPTO_DEBUG_FAKE_ROMCERT
+/*
+ * Debugging version og get_chip_security_context().
+ * This version is enabled with RDA_CRYPTO_DEBUG_FAKE_ROMCERT
+ *
+TEST DATA
+ Use this secret key (file: rdatest.sec, pw: pa$$w0rd):
+
+"Comment: RDA PDL-Test-01 secret key
+UkRBU0VkQksAAAAq0Ai4xjiIrmda3G8qI6q3B4gPbVQMPISmUkRBIFBETC1UZXN0LTAxACU+PXqYnPYI
+gGYdDrpN5PljQAAht3pYTN4bNgtA6oRp/sEVIrSXZiEkZPRGsnqlGPGFRHn3MMsDZBz/FhZGdE1m2FnD
+YYgQMg=="
+ */
+int get_chip_security_context(
+ struct chip_security_context *context,
+ struct pubkey *pubkey)
+{
+ const struct chip_security_context c = {
+ 3, 0x42,
+ RDA_SE_CFG_SECURITY_ENABLE_BIT |
+ RDA_SE_CFG_INDIRECT_SIGN_BIT |
+ RDA_SE_CFG_UNLOCK_ALLOWED
+ };
+ const struct pubkey pk = {
+ /* Public key: rdatest.pub */
+ {'R','D','A','S'}, {'E','d'},{}, "RDA PDL-Test-01 ",
+ { 0x25,0x3e,0x3d,0x7a,0x98,0x9c,0xf6,0x08 },
+ { 0x7b,0x4a,0x5a,0xa8,0xa1,0xda,0x92,0xea,0x9e,0x90,0xa8,0x7e,
+ 0xfa,0x76,0x37,0x52,0xe0,0xe0,0x40,0x63,0x09,0x02,0xd3,0x86,
+ 0x8b,0x9d,0xe0,0xae,0xf3,0x57,0xd7,0x44 }
+ };
+
+ // Set the hardcoded debug public key and context
+ *context = c;
+ *pubkey = pk;
+
+ return ROM_API_SECURITY_ENABLED;
+}
+#endif
+
+
+
+#ifdef RDA8810_VENDOR_EFUSE_WORKAROUND
+
+#include <common.h>
+#include <asm/arch/rda_crypto.h>
+#include <asm/arch/ispi.h>
+
+#define RDA_EFUSE_INDEX_SECURITY (11)
+
+/*
+ Fuse layout:
+ VVVVVVVV.T.H.I.S.KKKK
+ VVVVVVVV: Vendor ID - 6bit + 2bit armour
+ T: Trace disable
+ H: Host serial disable
+ I: Indirectly signed image
+ S: Security enable
+ KKKK: RDA Public Key Index - 3bit + 1 bit armour
+*/
+/* define bit for rda se config */
+#define RDA_SE_CFG_KEY_INDEX(n) (((n)&0xF)<<0)
+#define RDA_SE_CFG_GET_KEY_INDEX(r) (((r)>>0)&0xF)
+#define RDA_SE_CFG_SECURITY_ENABLE_BIT (1<<4)
+#define RDA_SE_CFG_INDIRECT_SIGN_BIT (1<<5)
+#define RDA_SE_CFG_HOST_DISABLE_BIT (1<<6)
+#define RDA_SE_CFG_TRACE_DISABLE_BIT (1<<7)
+#define RDA_SE_CFG_VENDOR_ID(n) (((n)&0xFF)<<8)
+#define RDA_SE_CFG_GET_VENDOR_ID(r) (((r)>>8)&0xFF)
+
+// RDA Public Key index map
+// (armour 6 indexes in 4 bits)
+static const uint8_t keyindex_map[16] = {
+ 15, 15, 15, 0, 15, 1, 2, 15,
+ 15, 3, 4, 15, 5, 15, 15, 15
+};
+
+// Vendor ID
+// (armour 50 vendor ID'd in 8 bits)
+static int valid_vendor_id( unsigned vendor )
+{
+ unsigned c;
+ unsigned i = vendor >> 2;
+ c = ((i & 0xaa)>>1) + (i & 0x55);
+ c = ((c & 0xcc)>>2) + (c & 0x33);
+ c = ((c & 0xf0)>>4) + (c & 0x0f);
+ return ((vendor & 3) + c) == 5;
+}
+#endif
+
+
+
+
+#ifndef RDA_CRYPTO_DEBUG_FAKE_ROMCERT
+int get_chip_security_context(
+ struct chip_security_context *context,
+ struct pubkey *pubkey)
+{
+ int ret = romapi->get_chip_security_context(context, pubkey);
+
+#ifdef RDA8810_VENDOR_EFUSE_WORKAROUND
+ if (ret == ROM_API_INVALID_VENDOR_ID && romapi->version == 100) {
+ uint16_t sec = rda_read_efuse(RDA_EFUSE_INDEX_SECURITY);
+
+ // check validity of key index
+ int key = keyindex_map[RDA_SE_CFG_GET_KEY_INDEX(sec)];
+
+ // check validity of vendor id
+ int vendor = RDA_SE_CFG_GET_VENDOR_ID(sec);
+ if (valid_vendor_id(vendor)) {
+ context->rda_key_index = key;
+ context->vendor_id = vendor;
+ ret = 0;
+ }
+ }
+#endif
+ return ret;
+}
+#endif
diff --git a/arch/arm/cpu/armv7/rda/rda_sys.c b/arch/arm/cpu/armv7/rda/rda_sys.c
new file mode 100644
index 0000000000..2e612a358a
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/rda_sys.c
@@ -0,0 +1,507 @@
+#include <common.h>
+#include <asm/arch/hardware.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/reg_md_sysctrl.h>
+#include <asm/arch/reg_cfg_regs.h>
+#include <asm/arch/reg_keypad.h>
+#include <asm/arch/reg_gpio.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/ispi.h>
+#include <asm/arch/reg_md_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/spl_board_info.h>
+#ifdef CONFIG_CMD_MISC
+#include <usb/usbserial.h>
+#include <asm/arch/mdcom.h>
+#endif
+
+#define RDA_AP_MBX_HWCFG_SWCFG_ADD (RDA_MD_MAILBOX_BASE + 0x1AE0)
+#define RDA_HWCFG_SWCFG (*(u32 *)RDA_AP_MBX_HWCFG_SWCFG_ADD)
+
+/*
+ * Hardware and software configuration
+ */
+void hwcfg_swcfg_init(void)
+{
+ u16 hwcfg, swcfg;
+
+ RDA_HWCFG_SWCFG = hwp_sysCtrlMd->Reset_Cause;
+
+ hwcfg = rda_hwcfg_reg_get();
+ swcfg = rda_swcfg_reg_get();
+
+ /* clear the sw boot modes handled by bootloader */
+ rda_swcfg_reg_set(swcfg & ~(RDA_SW_CFG_BIT_2 |
+ RDA_SW_CFG_BIT_3 |
+ RDA_SW_CFG_BIT_4 |
+ RDA_SW_CFG_BIT_5 |
+ RDA_SW_CFG_BIT_6));
+
+ /* clear the hw boot modes for download/factory modes */
+ rda_hwcfg_reg_set(hwcfg & ~(RDA_HW_CFG_BIT_10 |
+ RDA_HW_CFG_BIT_11 |
+ RDA_HW_CFG_BIT_12 |
+ RDA_HW_CFG_BIT_13 |
+ RDA_HW_CFG_BIT_14 |
+ RDA_HW_CFG_BIT_15));
+
+}
+
+void rda_hwcfg_reg_set(u16 hwcfg)
+{
+ hwp_sysCtrlMd->Reset_Cause = SET_BITFIELD(hwp_sysCtrlMd->Reset_Cause,
+ SYS_CTRL_BOOT_MODE, hwcfg);
+ hwp_sysCtrlAp->Reset_Cause = hwp_sysCtrlMd->Reset_Cause;
+}
+
+u16 rda_hwcfg_reg_get(void)
+{
+ u16 hwcfg = GET_BITFIELD(hwp_sysCtrlMd->Reset_Cause, SYS_CTRL_BOOT_MODE);
+ return hwcfg;
+}
+
+u16 rda_hwcfg_get(void)
+{
+ u16 hwcfg = GET_BITFIELD(RDA_HWCFG_SWCFG, SYS_CTRL_BOOT_MODE);
+ return hwcfg;
+}
+
+void rda_swcfg_reg_set(u16 swcfg)
+{
+ hwp_sysCtrlMd->Reset_Cause = SET_BITFIELD(hwp_sysCtrlMd->Reset_Cause,
+ SYS_CTRL_SW_BOOT_MODE, swcfg);
+ hwp_sysCtrlAp->Reset_Cause = hwp_sysCtrlMd->Reset_Cause;
+}
+
+u16 rda_swcfg_reg_get(void)
+{
+ u16 swcfg = GET_BITFIELD(hwp_sysCtrlMd->Reset_Cause, SYS_CTRL_SW_BOOT_MODE);
+ return swcfg;
+}
+
+u16 rda_swcfg_get(void)
+{
+ u16 swcfg = GET_BITFIELD(RDA_HWCFG_SWCFG, SYS_CTRL_SW_BOOT_MODE);
+ return swcfg;
+}
+
+u16 rda_prod_id_get(void)
+{
+ u16 prod_id = GET_BITFIELD(hwp_configRegs->CHIP_ID, CFG_REGS_PROD_ID);
+ return prod_id;
+}
+
+u16 rda_metal_id_get(void)
+{
+ u16 metal_id = GET_BITFIELD(hwp_configRegs->CHIP_ID, CFG_REGS_METAL_ID);
+ return metal_id;
+}
+
+u16 rda_bond_id_get(void)
+{
+ u16 bond_id = GET_BITFIELD(hwp_configRegs->CHIP_ID, CFG_REGS_BOND_ID);
+ return bond_id;
+}
+
+void rda_nand_iodrive_set(void)
+{
+ u32 value = hwp_configRegs->IO_Drive1_Select & (~ CFG_REGS_NFLSH_DRIVE_MASK);
+
+ hwp_configRegs->IO_Drive1_Select = value | CFG_REGS_NFLSH_DRIVE_SLOW_AND_WEAK;
+}
+
+/*
+ * System-level control
+ */
+enum media_type rda_media_get(void)
+{
+#ifdef CONFIG_SDMMC_BOOT
+ return MEDIA_MMC;
+#else
+ u16 hwcfg = rda_hwcfg_get();
+#ifdef CONFIG_MACH_RDA8810H
+/*
+ * HW BOOT MODE
+ *
+ * BIT_2 BIT1 BIT0 MODE
+ * 0 0 0 emmc
+ * 0 0 1 spi nand
+ * 0 1 0 spi nor
+ * 0 1 1 t-card0(run)
+ * 1 0 0 t-card1(update)
+ * 1 0 1 nand 8bit
+ * 1 1 0 nand 16bit
+ * 1 1 1 reserved
+ */
+ u32 bm_media = RDA_HW_CFG_GET_BM_IDX(hwcfg);
+
+ if (bm_media == RDA_MODE_EMMC)
+ return MEDIA_MMC;
+ else if (bm_media == RDA_MODE_SPINAND)
+ return MEDIA_SPINAND;
+ else if ((bm_media == RDA_MODE_NAND_8BIT)
+ || (bm_media == RDA_MODE_NAND_16BIT))
+ return MEDIA_NAND;
+#else
+ u16 metal_id = rda_metal_id_get();
+ u16 prod_id = rda_prod_id_get();
+ u16 metal_new_bm;
+
+ if (prod_id == 0x8810)
+ metal_new_bm = 0xB;
+ else if (prod_id == 0x810E || prod_id == 0x8850 || prod_id == 0x850E)
+ metal_new_bm = 0x2;
+ else
+ metal_new_bm = 0;
+
+ if (metal_id < metal_new_bm) {
+ /* SDMMC or SPI NAND */
+ if (hwcfg & RDA_HW_CFG_BIT_3) {
+ if (hwcfg & RDA_HW_CFG_BIT_7)
+ return MEDIA_MMC;
+ else
+ return MEDIA_NAND;
+ } else if (hwcfg & RDA_HW_CFG_BIT_4) {
+ return MEDIA_MMC;
+ }
+ /* EMMC */
+ if (hwcfg & RDA_HW_CFG_BIT_2)
+ return MEDIA_MMC;
+ /* PARALLEL NAND */
+ if (!(hwcfg & RDA_HW_CFG_BIT_4))
+ return MEDIA_NAND;
+
+ } else {
+ /* SPI NAND */
+ if (hwcfg & RDA_HW_CFG_BIT_3)
+ return MEDIA_NAND;
+ /* EMMC */
+ if (hwcfg & RDA_HW_CFG_BIT_2)
+ return MEDIA_MMC;
+ /* PARALLEL NAND */
+ if (!(hwcfg & RDA_HW_CFG_BIT_4))
+ return MEDIA_NAND;
+ }
+#endif
+#endif
+ return MEDIA_UNKNOWN;
+}
+
+void reset_cpu(ulong addr)
+{
+#ifdef CONFIG_RDA_PDL
+ enable_charger(1);
+#endif
+
+ while (1) {
+ /* to unlock first */
+ hwp_sysCtrlMd->REG_DBG = 0xa50001;
+ /* reset */
+ hwp_sysCtrlMd->Sys_Rst_Set |= SYS_CTRL_SOFT_RST;
+ }
+}
+
+void shutdown_system(void)
+{
+#ifdef CONFIG_RDA_PDL
+ enable_charger(1);
+#endif
+
+ while (1) {
+ /* to unlock first */
+ hwp_sysCtrlMd->REG_DBG = 0xa50001;
+ /* shutdown */
+ hwp_sysCtrlMd->WakeUp = 0;
+ }
+}
+
+int rda_bm_is_calib(void)
+{
+ u16 swcfg = rda_swcfg_get();
+ return !!(swcfg & RDA_SW_CFG_BIT_4);
+}
+
+int rda_bm_is_autocall(void)
+{
+ u16 swcfg = rda_swcfg_get();
+ return !!(swcfg & RDA_SW_CFG_BIT_5);
+}
+
+int rda_bm_is_download(void)
+{
+#ifdef CONFIG_RDA_PDL /* for PDL mode, always enable download mode */
+ return 1;
+#else
+ u16 hwcfg = rda_hwcfg_get();
+ return !!(hwcfg & RDA_HW_CFG_BIT_11);
+#endif
+}
+
+/* Check if download keys are pressed. */
+int rda_bm_download_key_pressed(void)
+{
+ int key_power = !!(hwp_apKeypad->KP_STATUS & KEYPAD_KP_ON);
+ int key_vol_up = !!(hwp_apGpioD->gpio_val & 0x40); /* GPIO D6 */
+#ifdef CONFIG_SDMMC_BOOT
+ int key_vol_down = !!(hwp_apGpioD->gpio_val & 0x20); /* GPIO D5 */
+ return (key_power && key_vol_up && !key_vol_down);
+#else
+ return (key_power && key_vol_up);
+#endif
+}
+
+void rda_reboot(enum reboot_type type)
+{
+ u16 hwcfg = rda_hwcfg_reg_get();
+ u16 swcfg = rda_swcfg_reg_get();
+ int key_vol_down;
+
+ hwcfg &= ~(RDA_HW_CFG_BIT_10 | RDA_HW_CFG_BIT_11 |
+ RDA_HW_CFG_BIT_12 | RDA_HW_CFG_BIT_13 |
+ RDA_HW_CFG_BIT_14 | RDA_HW_CFG_BIT_15);
+
+ switch (type) {
+ case REBOOT_TO_DOWNLOAD_MODE:
+ hwcfg |= RDA_HW_CFG_BIT_11 | RDA_HW_CFG_BIT_12 |
+ RDA_HW_CFG_BIT_14;
+ key_vol_down = !!(hwp_apGpioD->gpio_val & 0x20); /* GPIO D5 */
+ if (key_vol_down)
+ hwcfg |= RDA_HW_CFG_BIT_10 | RDA_HW_CFG_BIT_13;
+ break;
+ case REBOOT_TO_FASTBOOT_MODE:
+ swcfg |= RDA_SW_CFG_BIT_2;
+ break;
+ case REBOOT_TO_RECOVERY_MODE:
+ swcfg |= RDA_SW_CFG_BIT_3;
+ break;
+ case REBOOT_TO_CALIB_MODE:
+ swcfg |= RDA_SW_CFG_BIT_4;
+ break;
+ case REBOOT_TO_PDL2_MODE:
+ swcfg |= RDA_SW_CFG_BIT_6;
+ break;
+ default:
+ break;
+ }
+
+ rda_hwcfg_reg_set(hwcfg);
+ rda_swcfg_reg_set(swcfg);
+ reset_cpu(0);
+}
+
+void enable_vibrator(int enable)
+{
+ u32 value;
+
+ ispi_open(1);
+
+ value = ispi_reg_read(0x03);
+
+ if (enable)
+ value |= 0x20;
+ else
+ value &= ~0x20;
+ if (rda_metal_id_get() >= 9)
+ value ^= 0x20;
+
+ ispi_reg_write(0x03, value);
+
+ ispi_open(0);
+}
+
+void enable_charger(int enable)
+{
+ u32 val;
+
+ ispi_open(1);
+ val = ispi_reg_read(0x15);
+ if (enable) {
+ val &= ~((1 << 15) | (1 << 14));
+ } else {
+ val |= (1 << 15);
+ val &= ~(1 << 14);
+ }
+ ispi_reg_write(0x15, val);
+ ispi_open(0);
+}
+
+void rda_dump_buf(char *data, size_t len)
+{
+ char temp_buf[64];
+ size_t i, off = 0;
+
+ memset(temp_buf, 0, 64);
+ for (i=0;i<len;i++) {
+ if(i%8 == 0) {
+ sprintf(&temp_buf[off], " ");
+ off += 2;
+ }
+ sprintf(&temp_buf[off], "%02x ", data[i]);
+ off += 3;
+ if((i+1)%16 == 0 || (i+1) == len) {
+ printf("%8d %s\n", (unsigned int)i/16,temp_buf);
+ memset(temp_buf, 0, 64);
+ off = 0;
+ }
+ }
+ printf("\n");
+}
+
+void print_cur_time(void)
+{
+ unsigned long long time = ticks2usec(get_ticks());
+ printf("\n****** [CURRENT TIME: %3d.%06d] ******\n\n",
+ (int)(time / 1000000),
+ (int)(time % 1000000));
+}
+
+#ifdef CONFIG_CMD_MISC
+
+int usb_cable_connected(void)
+{
+ u32 val;
+
+ ispi_open(1);
+ val = ispi_reg_read(0x14);
+ ispi_open(0);
+ if (val & (1 << 8))
+ return 1;
+ else
+ return 0;
+}
+
+int system_rebooted(void)
+{
+ static int system_rebooted_flag = -1;
+
+ if (system_rebooted_flag == -1) {
+ if (rda_mdcom_system_started_before())
+ system_rebooted_flag = 1;
+ else
+ system_rebooted_flag = 0;
+ rda_mdcom_set_system_started_flag();
+ }
+ return system_rebooted_flag;
+}
+
+static int boot_key_long_pressed = 0;
+
+void save_current_boot_key_state(void)
+{
+ int boot_key_on = ((hwp_apKeypad->KP_STATUS & KEYPAD_KP_ON) != 0);
+ int start_by_boot_key = ((rda_hwcfg_get() & RDA_HW_CFG_BIT_12) != 0);
+ boot_key_long_pressed = (boot_key_on && start_by_boot_key);
+}
+
+int get_saved_boot_key_state(void)
+{
+ return boot_key_long_pressed;
+}
+
+void get_board_serial(struct tag_serialnr *serialnr)
+{
+ struct spl_security_info *info = get_bd_spl_security_info();
+ const uint32_t *id256 = (uint32_t *)info->chip_unique_id.id;
+
+ serialnr->low = id256[0];
+ serialnr->high = id256[1];
+
+ if ((serialnr->low | serialnr->high) == 0) {
+ serialnr->low = 0x90abcdef;
+ serialnr->high = 0x12345678;
+ }
+
+ /* Set serialno enviroment variable */
+ char tmp[32];
+ sprintf(tmp, "%08x%08x", serialnr->high, serialnr->low);
+ setenv("serialno", tmp);
+}
+
+static int boot_mode = RDA_BM_NORMAL;
+
+void rda_bm_init(void)
+{
+ u16 hwcfg = rda_hwcfg_get();
+ u16 swcfg = rda_swcfg_get();
+#ifndef CONFIG_RDA_PDL
+ int rebooted = system_rebooted();
+ u32 fastboot_key_mask, all_key_mask;
+#endif
+ char str[2];
+ struct tag_serialnr serialnr;
+ get_board_serial(&serialnr);
+
+ printf("RDA: HW_CFG 0x%04x\n", hwcfg);
+ printf("RDA: SW_CFG 0x%04x\n", swcfg);
+ printf("RDA: ID PROD %04x M %03x B %01x\n",
+ rda_prod_id_get(), rda_metal_id_get(),
+ rda_bond_id_get());
+
+#ifdef CONFIG_RDA_PDL
+ /* PDL: always enable download mode */
+ boot_mode = RDA_BM_FORCEDOWNLOAD;
+#else
+ /* SPL */
+ boot_mode = RDA_BM_NORMAL;
+
+ if (swcfg & RDA_SW_CFG_BIT_2) {
+ boot_mode = RDA_BM_FASTBOOT;
+ } else if (swcfg & RDA_SW_CFG_BIT_3) {
+ boot_mode = RDA_BM_RECOVERY;
+ } else if (swcfg & RDA_SW_CFG_BIT_4) {
+ boot_mode = RDA_BM_CALIB;
+ } else if (swcfg & RDA_SW_CFG_BIT_5) {
+ boot_mode = RDA_BM_AUTOCALL;
+ } else if (swcfg & RDA_SW_CFG_BIT_6) {
+ /* force to 'pdl2', called by kernel */
+ boot_mode = RDA_BM_FORCEDOWNLOAD;
+ } else if ((hwcfg & RDA_HW_CFG_BIT_10) && (hwcfg & RDA_HW_CFG_BIT_11)) {
+ /*
+ * If power key, vol-up, and vol-down are all pressed, consider
+ * it as normal boot (for T-Card)
+ */
+ boot_mode = RDA_BM_NORMAL;
+ } else if ((hwcfg & RDA_HW_CFG_BIT_10) && !rebooted) {
+ /* Distinguish between factory mode and h/w force reset */
+ boot_mode = RDA_BM_FACTORY;
+ } else if (hwcfg & RDA_HW_CFG_BIT_11) {
+ /* Force download mode for pdl2 */
+ boot_mode = RDA_BM_FORCEDOWNLOAD;
+ } else if (usb_cable_connected()) {
+ all_key_mask = RDA_HW_CFG_BIT_15 | RDA_HW_CFG_BIT_14 |
+ RDA_HW_CFG_BIT_13 | RDA_HW_CFG_BIT_12 |
+ RDA_HW_CFG_BIT_11 | RDA_HW_CFG_BIT_10;
+ /* Fastboot keys are volume-up + volume-down keys */
+ fastboot_key_mask = RDA_HW_CFG_BIT_13 | RDA_HW_CFG_BIT_14;
+
+ if ((hwcfg & fastboot_key_mask) == fastboot_key_mask &&
+ (hwcfg & all_key_mask & ~fastboot_key_mask) == 0) {
+ /*
+ * All the keys are up, except for the fastboot keys;
+ * and the usb cable is plugged in
+ */
+ boot_mode = RDA_BM_FASTBOOT;
+ }
+ }
+#endif /* !CONFIG_RDA_PDL */
+
+ printf("RDA: Boot_Mode %d\n", boot_mode);
+
+ sprintf(str, "%1d", boot_mode);
+ setenv ("bootmode", str);
+}
+
+enum rda_bm_type rda_bm_get(void)
+{
+ return boot_mode;
+}
+
+void rda_bm_set(enum rda_bm_type bm)
+{
+ boot_mode = bm;
+}
+
+#endif /* CONFIG_CMD_MISC */
+
diff --git a/arch/arm/cpu/armv7/rda/serial.c b/arch/arm/cpu/armv7/rda/serial.c
new file mode 100644
index 0000000000..f7c1d2d244
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/serial.c
@@ -0,0 +1,132 @@
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/reg_uart.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void _serial_set_baudrate(int rate)
+{
+ hwp_sysCtrlAp->Cfg_Clk_Uart[2] = 0x36; // 115200 @ 26MHz
+ //hwp_sysCtrlAp->Cfg_Clk_Uart[2] = 0x05; // 921600 @ 26MHz
+}
+
+void _serial_enable_rtscts(void)
+{
+ hwp_uart->ctrl |= UART_AUTO_FLOW_CONTROL;
+}
+
+void _serial_disable_rtscts(void)
+{
+ hwp_uart->ctrl &= ~UART_AUTO_FLOW_CONTROL;
+}
+
+void _serial_init(void)
+{
+ _serial_set_baudrate(CONFIG_BAUDRATE);
+ hwp_uart->triggers = UART_AFC_LEVEL(1); //7 ?
+
+ hwp_uart->ctrl = UART_ENABLE | UART_DATA_BITS_8_BITS |
+ UART_TX_STOP_BITS_1_BIT | UART_PARITY_ENABLE_NO;
+
+ /* Allow reception */
+ hwp_uart->CMD_Set = UART_RTS;
+}
+
+void _serial_deinit(void)
+{
+ hwp_uart->ctrl = 0;
+ hwp_uart->CMD_Clr = UART_RTS;
+}
+
+/*
+ * Test whether a character is in the RX buffer
+ */
+int _serial_tstc(const int port)
+{
+ return (GET_BITFIELD(hwp_uart->status, UART_RX_FIFO_LEVEL));
+}
+
+int _serial_getc(const int port)
+{
+ /* wait for character to arrive */ ;
+ while (!(GET_BITFIELD(hwp_uart->status, UART_RX_FIFO_LEVEL)))
+ ;
+
+ return (hwp_uart->rxtx_buffer & 0xff);
+}
+
+void _serial_putc_hw(const char c, const int port)
+{
+ // Place in the TX Fifo ?
+ while (!(GET_BITFIELD(hwp_uart->status, UART_TX_FIFO_SPACE)))
+ ;
+ hwp_uart->rxtx_buffer = (u32)c;
+}
+
+void _serial_putc(const char c, const int port)
+{
+ if (c == '\n') {
+ _serial_putc_hw('\r', 0);
+ }
+ _serial_putc_hw(c, 0);
+}
+
+void _serial_puts(const char *s, const int port)
+{
+ while (*s) {
+ _serial_putc(*s++, 0);
+ }
+}
+
+static int hwflow = 0; /* turned off by default */
+int hwflow_onoff(int on)
+{
+ switch(on) {
+ case 0:
+ default:
+ break; /* return current */
+ case 1:
+ hwflow = 1;
+ _serial_enable_rtscts(); /* turn on */
+ break;
+ case -1:
+ hwflow = 0;
+ _serial_disable_rtscts(); /* turn off */
+ break;
+ }
+ return hwflow;
+}
+
+int serial_init(void)
+{
+ //_serial_init(); // already init in boot_test
+ return 0;
+}
+
+int serial_getc(void)
+{
+ return _serial_getc(0);
+}
+
+int serial_tstc(void)
+{
+ return _serial_tstc(0);
+}
+
+void serial_putc(const char c)
+{
+ _serial_putc(c, 0);
+}
+
+void serial_puts(const char *s)
+{
+ _serial_puts(s, 0);
+}
+
+void serial_setbrg (void)
+{
+}
+
diff --git a/arch/arm/cpu/armv7/rda/spl.c b/arch/arm/cpu/armv7/rda/spl.c
new file mode 100644
index 0000000000..93bbb85c42
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/spl.c
@@ -0,0 +1,189 @@
+#include <common.h>
+#include <asm/u-boot.h>
+#include <asm/utils.h>
+#include <nand.h>
+#include <malloc.h>
+#include <image.h>
+#include <usb/usbserial.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/spl_board_info.h>
+#include <asm/arch/rda_crypto.h>
+#include <pdl.h>
+
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+
+DECLARE_GLOBAL_DATA_PTR;
+/* Define global data structure pointer to it*/
+static gd_t gdata __attribute__ ((section(".data")));
+static bd_t bdata __attribute__ ((section(".data")));
+
+#else
+
+void puts(const char *str)
+{
+ while (*str)
+ putc(*str++);
+}
+
+void putc(char c)
+{
+}
+
+#endif /* CONFIG_SPL_LIBCOMMON_SUPPORT */
+
+void board_init_f(ulong dummy)
+{
+ relocate_code(CONFIG_SPL_STACK, NULL, CONFIG_SPL_TEXT_BASE);
+}
+
+#ifdef CONFIG_SPL_CHECK_IMAGE
+int check_uimage(unsigned int *buf)
+{
+ image_header_t *hdr = (image_header_t *)buf;
+ puts("Check Image ");
+ if (!image_check_magic(hdr)) {
+ printf("Magic Error %x\n", image_get_magic(hdr));
+ rda_dump_buf((char *)buf, 256);
+ return -1;
+ }
+ puts(".");
+ if (!image_check_hcrc(hdr)) {
+ printf("HCRC Error %x\n", image_get_hcrc(hdr));
+ rda_dump_buf((char *)buf, 256);
+ return -2;
+ }
+ puts(".");
+ if (!image_check_dcrc(hdr)) {
+ printf("DCRC Error %x\n", image_get_dcrc(hdr));
+ rda_dump_buf((char *)buf, 256);
+ //rda_dump_buf(buf,
+ // image_get_header_size() + image_get_size(hdr));
+ return -3;
+ }
+ puts(".");
+#ifdef CONFIG_SIGNATURE_CHECK_IMAGE
+ if (image_sign_verify_uimage(hdr) != 0) {
+ printf("Image Signature check failed!\n");
+ return -4;
+ }
+#endif
+ puts(" Done\n");
+ return 0;
+}
+#endif
+
+#ifdef CONFIG_SPL_EMMC_LOAD
+extern void emmc_init(void);
+extern void emmc_boot(void);
+#endif
+
+#ifdef CONFIG_SPL_XMODEM_LOAD
+extern void xmodem_boot(void);
+#endif
+
+extern void hwcfg_swcfg_init(void);
+extern int clock_init(void);
+
+
+#ifdef CONFIG_SIGNATURE_CHECK_IMAGE
+static const uint8_t *get_spl_load_addr(void)
+{
+ const uint8_t *spl_image = (uint8_t*)CONFIG_SPL_LOAD_ADDRESS + CONFIG_UIMAGEHDR_SIZE;
+ return spl_image;
+}
+#endif
+
+void board_init_r(gd_t *id, ulong dummy)
+{
+#ifdef CONFIG_SPL_LIBCOMMON_SUPPORT
+ gd = &gdata;
+ gd->bd = &bdata;
+ gd->flags |= GD_FLG_RELOC;
+ gd->baudrate = CONFIG_BAUDRATE;
+ serial_init(); /* serial communications setup */
+ gd->have_console = 1;
+#endif
+ hwcfg_swcfg_init();
+ clock_init();
+
+#ifdef CONFIG_SIGNATURE_CHECK_IMAGE
+ // Set the security contex (or get the unique ID of the device)
+ struct spl_security_info *info = get_bd_spl_security_info();
+ const uint8_t *spl_image = get_spl_load_addr();
+
+ puts("SETTING SECURITY CONTEXT\n");
+ set_security_context(info, spl_image);
+#endif
+
+#ifndef CONFIG_RDA_PDL
+ /* Note BIT3 for SPINAND got higher priority */
+#ifdef CONFIG_SPL_EMMC_SUPPORT
+ if (rda_media_get() == MEDIA_MMC) {
+ puts("Init emmc ...\n");
+ emmc_init();
+ }
+#endif
+
+#ifdef CONFIG_SPL_NAND_SUPPORT
+ if (rda_media_get() == MEDIA_NAND || rda_media_get() == MEDIA_SPINAND) {
+ puts("Init nand ...\n");
+ nand_init();
+ }
+#endif
+#endif
+
+#ifdef CONFIG_RDA_PDL
+ drv_usbser_init();
+ pdl_main();
+#else
+ /* A workaround to handle the timing issue when detecting
+ * download mode in h/w */
+ if( !rda_bm_is_autocall() &&
+ !rda_bm_is_calib() &&
+ !rda_bm_is_download() &&
+ rda_bm_download_key_pressed()) {
+ puts("Download key pressed. Enter download mode ...\n");
+ rda_reboot(REBOOT_TO_DOWNLOAD_MODE);
+ }
+#endif
+
+#ifdef CONFIG_SPL_EMMC_LOAD
+ if (rda_media_get() == MEDIA_MMC) {
+ puts("EMMC boot ...\n");
+ emmc_boot();
+ }
+#endif
+
+#ifdef CONFIG_SPL_NAND_LOAD
+ if (rda_media_get() == MEDIA_NAND || rda_media_get() == MEDIA_SPINAND) {
+ puts("NAND boot ...\n");
+ nand_boot();
+ }
+#endif
+
+#ifdef CONFIG_SPL_SPI_LOAD
+ mem_malloc_init(CONFIG_SYS_TEXT_BASE - CONFIG_SYS_MALLOC_LEN,
+ CONFIG_SYS_MALLOC_LEN);
+
+ gd = &gdata;
+ gd->bd = &bdata;
+ gd->flags |= GD_FLG_RELOC;
+ gd->baudrate = CONFIG_BAUDRATE;
+ serial_init(); /* serial communications setup */
+ gd->have_console = 1;
+
+ puts("SPI boot...\n");
+ spi_boot();
+#endif
+
+#ifdef CONFIG_SPL_XMODEM_LOAD
+ puts("Xmodem boot ...\n");
+ xmodem_boot();
+#endif
+
+ /*
+ should never go here
+ */
+ while(1)
+ ;
+}
diff --git a/arch/arm/cpu/armv7/rda/timer.c b/arch/arm/cpu/armv7/rda/timer.c
new file mode 100644
index 0000000000..9da8958dc2
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/timer.c
@@ -0,0 +1,132 @@
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/reg_timer.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+typedef union
+{
+ unsigned long long timer;
+ struct
+ {
+ unsigned long timer_l :32;
+ unsigned long timer_h :32;
+ } fields;
+} RDA_TIMER;
+
+#if (CONFIG_SYS_HZ_CLOCK == 2000000)
+/* optimize for 2M Hz */
+static unsigned long tick_to_ms(unsigned long long tick) __attribute__((unused));
+static unsigned long tick_to_ms(unsigned long long tick)
+{
+ return (u32)(tick >> 11); // divide 2048
+}
+
+static unsigned long long ms_to_tick(unsigned long ms)
+{
+ return (((unsigned long long)ms) << 11); // x 2048
+}
+
+static unsigned long tick_to_us(unsigned long long tick)
+{
+ return (unsigned long)(tick >> 1); // divide 2
+}
+
+static unsigned long long us_to_tick(unsigned long ms)
+{
+ return (((unsigned long long)ms) << 1); // x2
+}
+#else
+/* need to calc */
+#error "Timer is not 2M Hz"
+#endif
+
+static void rda_timer_get(RDA_TIMER *timer)
+{
+ /* always read low 32bit first */
+ timer->fields.timer_l =
+ (unsigned long)(hwp_apTimer->HWTimer_LockVal_L);
+ timer->fields.timer_h =
+ (unsigned long)(hwp_apTimer->HWTimer_LockVal_H);
+}
+
+static void rda_timeout_setup_ms(RDA_TIMER *timer, unsigned long ms)
+ __attribute__((unused));
+static void rda_timeout_setup_ms(RDA_TIMER *timer, unsigned long ms)
+{
+ timer->timer = get_ticks() + ms_to_tick(ms);
+}
+
+static void rda_timeout_setup_us(RDA_TIMER *timer, unsigned long us)
+{
+ timer->timer = get_ticks() + us_to_tick(us);
+}
+
+static int rda_timeout_check(RDA_TIMER *timer)
+{
+ return (get_ticks() > timer->timer);
+}
+
+int timer_init(void)
+{
+ gd->timer_rate_hz = CONFIG_SYS_HZ_CLOCK;
+ gd->timer_reset_value = 0;
+
+ /* We are using timer34 in unchained 32-bit mode, full speed */
+ return(0);
+}
+
+void reset_timer(void)
+{
+ gd->timer_reset_value = get_ticks();
+}
+
+/*
+ * Get the current 64 bit timer tick count
+ */
+unsigned long long get_ticks(void)
+{
+ RDA_TIMER timer;
+
+ rda_timer_get(&timer);
+ return timer.timer;
+}
+
+ulong usec2ticks (unsigned long usec)
+{
+ return (ulong)us_to_tick(usec);
+}
+
+ulong ticks2usec (unsigned long ticks)
+{
+ return tick_to_us(ticks);
+}
+
+ulong get_timer(ulong base)
+{
+ unsigned long long timer_diff;
+
+ timer_diff = get_ticks() - gd->timer_reset_value;
+
+ return (timer_diff / (gd->timer_rate_hz / CONFIG_SYS_HZ)) - base;
+}
+
+void __udelay(unsigned long usec)
+{
+ RDA_TIMER timer;
+
+ rda_timeout_setup_us(&timer, usec);
+ while(!rda_timeout_check(&timer))
+ ;
+}
+
+/*
+ * This function is derived from PowerPC code (timebase clock frequency).
+ * On ARM it returns the number of timer ticks per second.
+ */
+ulong get_tbclk(void)
+{
+ return CONFIG_SYS_HZ_CLOCK;
+}
diff --git a/arch/arm/cpu/armv7/rda/xmodem_boot.c b/arch/arm/cpu/armv7/rda/xmodem_boot.c
new file mode 100644
index 0000000000..48b3047f03
--- /dev/null
+++ b/arch/arm/cpu/armv7/rda/xmodem_boot.c
@@ -0,0 +1,75 @@
+#include <common.h>
+#include <asm/io.h>
+#include <asm/u-boot.h>
+#include <asm/utils.h>
+#include <xyzModem.h>
+
+void _serial_enable_rtscts(void);
+#ifdef CONFIG_SPL_CHECK_IMAGE
+int check_uimage(unsigned int *buf);
+#endif
+
+static int getcxmodem(void) {
+ if (tstc())
+ return (getc());
+ return -1;
+}
+
+static ulong load_serial_xmodem (ulong offset)
+{
+ int size;
+ int err;
+ int res;
+ connection_info_t info;
+ char ymodemBuf[1024];
+ ulong store_addr = ~0;
+ ulong addr = 0;
+
+ size = 0;
+ info.mode = xyzModem_xmodem;
+ _serial_enable_rtscts();
+ mdelay(10);
+ res = xyzModem_stream_open (&info, &err);
+ if (!res) {
+ while ((res =
+ xyzModem_stream_read (ymodemBuf, 1024, &err)) > 0) {
+ store_addr = addr + offset;
+ size += res;
+ addr += res;
+ memcpy ((char *) (store_addr), ymodemBuf,res);
+ }
+ } else {
+ printf ("%s\n", xyzModem_error (err));
+ }
+
+ xyzModem_stream_close (&err);
+ xyzModem_stream_terminate (false, &getcxmodem);
+
+
+ flush_cache (offset, size);
+ printf("\nXmodem Download Success.\n");
+ printf("Total Size = 0x%08x = %d Bytes\n", size, size);
+
+ return offset;
+}
+
+void xmodem_boot(void)
+{
+ __attribute__((noreturn)) void (*uboot)(void);
+
+ load_serial_xmodem(CONFIG_SYS_XMODEM_U_BOOT_DST);
+
+#ifdef CONFIG_SPL_CHECK_IMAGE
+ if (check_uimage((unsigned int*)CONFIG_SYS_XMODEM_U_BOOT_DST)) {
+ printf("Xmodem boot failed.\n");
+ return;
+ }
+#endif
+
+ /*
+ * Jump to U-Boot image
+ */
+ printf("Running U-Boot ...\n");
+ uboot = (void *)CONFIG_SYS_XMODEM_U_BOOT_START;
+ (*uboot)();
+}
diff --git a/arch/arm/cpu/armv7/s5pc1xx/cache.S b/arch/arm/cpu/armv7/s5pc1xx/cache.S
index c7d62212bd..000192c254 100644
--- a/arch/arm/cpu/armv7/s5pc1xx/cache.S
+++ b/arch/arm/cpu/armv7/s5pc1xx/cache.S
@@ -25,20 +25,22 @@
.align 5
+#include <linux/linkage.h>
+
#ifndef CONFIG_SYS_L2CACHE_OFF
-.global v7_outer_cache_enable
-v7_outer_cache_enable:
+ENTRY(v7_outer_cache_enable)
push {r0, r1, r2, lr}
mrc 15, 0, r3, cr1, cr0, 1
orr r3, r3, #2
mcr 15, 0, r3, cr1, cr0, 1
pop {r1, r2, r3, pc}
+ENDPROC(v7_outer_cache_enable)
-.global v7_outer_cache_disable
-v7_outer_cache_disable:
+ENTRY(v7_outer_cache_disable)
push {r0, r1, r2, lr}
mrc 15, 0, r3, cr1, cr0, 1
bic r3, r3, #2
mcr 15, 0, r3, cr1, cr0, 1
pop {r1, r2, r3, pc}
+ENDPROC(v7_outer_cache_disable)
#endif
diff --git a/arch/arm/cpu/armv7/s5pc1xx/reset.S b/arch/arm/cpu/armv7/s5pc1xx/reset.S
index 70fa146cf3..c7a41d03d2 100644
--- a/arch/arm/cpu/armv7/s5pc1xx/reset.S
+++ b/arch/arm/cpu/armv7/s5pc1xx/reset.S
@@ -22,12 +22,12 @@
*/
#include <asm/arch/cpu.h>
+#include <linux/linkage.h>
#define S5PC100_SWRESET 0xE0200000
#define S5PC110_SWRESET 0xE0102000
-.globl reset_cpu
-reset_cpu:
+ENTRY(reset_cpu)
ldr r1, =S5PC100_PRO_ID
ldr r2, [r1]
ldr r4, =0x00010000
@@ -45,3 +45,4 @@ reset_cpu:
str r2, [r1]
_loop_forever:
b _loop_forever
+ENDPROC(reset_cpu)
diff --git a/arch/arm/cpu/armv7/start.S b/arch/arm/cpu/armv7/start.S
index ef08a55abc..3fd8ded9c6 100644
--- a/arch/arm/cpu/armv7/start.S
+++ b/arch/arm/cpu/armv7/start.S
@@ -31,8 +31,8 @@
#include <asm-offsets.h>
#include <config.h>
-#include <version.h>
#include <asm/system.h>
+#include <linux/linkage.h>
.globl _start
_start: b reset
@@ -158,7 +158,11 @@ reset:
/* Set stackpointer in internal RAM to call board_init_f */
call_board_init_f:
+#ifdef CONFIG_SPL_BUILD
+ ldr sp, =(CONFIG_SPL_STACK)
+#else
ldr sp, =(CONFIG_SYS_INIT_SP_ADDR)
+#endif
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
ldr r0,=0x00000000
bl board_init_f
@@ -172,8 +176,7 @@ call_board_init_f:
* after relocating the monitor code.
*
*/
- .globl relocate_code
-relocate_code:
+ENTRY(relocate_code)
mov r4, r0 /* save addr_sp */
mov r5, r1 /* save addr of gd */
mov r6, r2 /* save addr of destination */
@@ -257,12 +260,17 @@ clear_bss:
add r0, r0, r4
add r1, r1, r4
#endif
+
+ cmp r0, r1
+ beq clbss_d
+
mov r2, #0x00000000 /* clear */
clbss_l:str r2, [r0] /* clear loop... */
add r0, r0, #4
cmp r0, r1
bne clbss_l
+clbss_d:
/*
* We are done. Do not return, instead branch to second part of board
@@ -289,6 +297,7 @@ jump_2_ram:
_board_init_r_ofs:
.word board_init_r - _start
+ENDPROC(relocate_code)
/*************************************************************************
*
@@ -298,8 +307,7 @@ _board_init_r_ofs:
* CONFIG_SYS_ICACHE_OFF is defined.
*
*************************************************************************/
-.globl cpu_init_cp15
-cpu_init_cp15:
+ENTRY(cpu_init_cp15)
/*
* Invalidate L1 I/D
*/
@@ -325,7 +333,7 @@ cpu_init_cp15:
#endif
mcr p15, 0, r0, c1, c0, 0
mov pc, lr @ back to my caller
-
+ENDPROC(cpu_init_cp15)
#ifndef CONFIG_SKIP_LOWLEVEL_INIT
/*************************************************************************
@@ -336,7 +344,7 @@ cpu_init_cp15:
* setup memory timing
*
*************************************************************************/
-cpu_init_crit:
+ENTRY(cpu_init_crit)
/*
* Jump to board specific initialization...
* The Mask ROM will have already initialized
@@ -347,6 +355,7 @@ cpu_init_crit:
bl lowlevel_init @ go setup pll,mux,memory
mov lr, ip @ restore link
mov pc, lr @ back to my caller
+ENDPROC(cpu_init_crit)
#endif
#ifndef CONFIG_SPL_BUILD
diff --git a/arch/arm/cpu/armv7/tegra2/Makefile b/arch/arm/cpu/armv7/tegra2/Makefile
index e9ac6c9a71..08c4137a34 100644
--- a/arch/arm/cpu/armv7/tegra2/Makefile
+++ b/arch/arm/cpu/armv7/tegra2/Makefile
@@ -27,6 +27,7 @@
# flags for any startup files it might use.
CFLAGS_arch/arm/cpu/armv7/tegra2/ap20.o += -march=armv4t
CFLAGS_arch/arm/cpu/armv7/tegra2/clock.o += -march=armv4t
+CFLAGS_arch/arm/cpu/armv7/tegra2/warmboot_avp.o += -march=armv4t
include $(TOPDIR)/config.mk
@@ -34,7 +35,10 @@ LIB = $(obj)lib$(SOC).o
SOBJS := lowlevel_init.o
COBJS-y := ap20.o board.o clock.o funcmux.o pinmux.o sys_info.o timer.o
+COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o
+COBJS-$(CONFIG_TEGRA_PMU) += pmu.o
COBJS-$(CONFIG_USB_EHCI_TEGRA) += usb.o
+COBJS-$(CONFIG_TEGRA2_LP0) += crypto.o warmboot.o warmboot_avp.o
COBJS := $(COBJS-y)
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
diff --git a/arch/arm/cpu/armv7/tegra2/ap20.c b/arch/arm/cpu/armv7/tegra2/ap20.c
index b749821e5a..698bfd0e17 100644
--- a/arch/arm/cpu/armv7/tegra2/ap20.c
+++ b/arch/arm/cpu/armv7/tegra2/ap20.c
@@ -21,16 +21,53 @@
* MA 02111-1307 USA
*/
-#include "ap20.h"
#include <asm/io.h>
#include <asm/arch/tegra2.h>
+#include <asm/arch/ap20.h>
#include <asm/arch/clk_rst.h>
#include <asm/arch/clock.h>
+#include <asm/arch/fuse.h>
+#include <asm/arch/gp_padctrl.h>
#include <asm/arch/pmc.h>
#include <asm/arch/pinmux.h>
#include <asm/arch/scu.h>
+#include <asm/arch/warmboot.h>
#include <common.h>
+int tegra_get_chip_type(void)
+{
+ struct apb_misc_gp_ctlr *gp;
+ struct fuse_regs *fuse = (struct fuse_regs *)TEGRA2_FUSE_BASE;
+ uint tegra_sku_id, rev;
+
+ /*
+ * This is undocumented, Chip ID is bits 15:8 of the register
+ * APB_MISC + 0x804, and has value 0x20 for Tegra20, 0x30 for
+ * Tegra30
+ */
+ gp = (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
+ rev = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >> HIDREV_CHIPID_SHIFT;
+
+ tegra_sku_id = readl(&fuse->sku_info) & 0xff;
+
+ switch (rev) {
+ case CHIPID_TEGRA2:
+ switch (tegra_sku_id) {
+ case SKU_ID_T20:
+ return TEGRA_SOC_T20;
+ case SKU_ID_T25SE:
+ case SKU_ID_AP25:
+ case SKU_ID_T25:
+ case SKU_ID_AP25E:
+ case SKU_ID_T25E:
+ return TEGRA_SOC_T25;
+ }
+ break;
+ }
+ /* unknown sku id */
+ return TEGRA_SOC_UNKNOWN;
+}
+
/* Returns 1 if the current CPU executing is a Cortex-A9, else 0 */
static int ap20_cpu_is_cortexa9(void)
{
@@ -286,6 +323,11 @@ void init_pmc_scratch(void)
/* ODMDATA is for kernel use to determine RAM size, LP config, etc. */
writel(CONFIG_SYS_BOARD_ODMDATA, &pmc->pmc_scratch20);
+
+#ifdef CONFIG_TEGRA2_LP0
+ /* save Sdram params to PMC 2, 4, and 24 for WB0 */
+ warmboot_save_sdram_params();
+#endif
}
void tegra2_start(void)
diff --git a/arch/arm/cpu/armv7/tegra2/board.c b/arch/arm/cpu/armv7/tegra2/board.c
index a797e6fc30..a50b1b988a 100644
--- a/arch/arm/cpu/armv7/tegra2/board.c
+++ b/arch/arm/cpu/armv7/tegra2/board.c
@@ -23,12 +23,12 @@
#include <common.h>
#include <asm/io.h>
-#include "ap20.h"
+#include <asm/arch/ap20.h>
#include <asm/arch/clock.h>
#include <asm/arch/funcmux.h>
+#include <asm/arch/pmc.h>
#include <asm/arch/sys_proto.h>
#include <asm/arch/tegra2.h>
-#include <asm/arch/pmc.h>
DECLARE_GLOBAL_DATA_PTR;
diff --git a/arch/arm/cpu/armv7/tegra2/clock.c b/arch/arm/cpu/armv7/tegra2/clock.c
index 39376ab86e..ccad351639 100644
--- a/arch/arm/cpu/armv7/tegra2/clock.c
+++ b/arch/arm/cpu/armv7/tegra2/clock.c
@@ -410,6 +410,16 @@ enum clock_osc_freq clock_get_osc_freq(void)
return (reg & OSC_FREQ_MASK) >> OSC_FREQ_SHIFT;
}
+int clock_get_osc_bypass(void)
+{
+ struct clk_rst_ctlr *clkrst =
+ (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+ u32 reg;
+
+ reg = readl(&clkrst->crc_osc_ctrl);
+ return (reg & OSC_XOBP_MASK) >> OSC_XOBP_SHIFT;
+}
+
/* Returns a pointer to the registers of the given pll */
static struct clk_pll *get_pll(enum clock_id clkid)
{
@@ -420,6 +430,28 @@ static struct clk_pll *get_pll(enum clock_id clkid)
return &clkrst->crc_pll[clkid];
}
+int clock_ll_read_pll(enum clock_id clkid, u32 *divm, u32 *divn,
+ u32 *divp, u32 *cpcon, u32 *lfcon)
+{
+ struct clk_pll *pll = get_pll(clkid);
+ u32 data;
+
+ assert(clkid != CLOCK_ID_USB);
+
+ /* Safety check, adds to code size but is small */
+ if (!clock_id_isvalid(clkid) || clkid == CLOCK_ID_USB)
+ return -1;
+ data = readl(&pll->pll_base);
+ *divm = (data & PLL_DIVM_MASK) >> PLL_DIVM_SHIFT;
+ *divn = (data & PLL_DIVN_MASK) >> PLL_DIVN_SHIFT;
+ *divp = (data & PLL_DIVP_MASK) >> PLL_DIVP_SHIFT;
+ data = readl(&pll->pll_misc);
+ *cpcon = (data & PLL_CPCON_MASK) >> PLL_CPCON_SHIFT;
+ *lfcon = (data & PLL_LFCON_MASK) >> PLL_LFCON_SHIFT;
+
+ return 0;
+}
+
unsigned long clock_start_pll(enum clock_id clkid, u32 divm, u32 divn,
u32 divp, u32 cpcon, u32 lfcon)
{
@@ -1027,7 +1059,10 @@ void clock_early_init(void)
clock_set_rate(CLOCK_ID_CGENERAL, 600, 26, 0, 8);
break;
- case CLOCK_OSC_FREQ_13_0:
+ case CLOCK_OSC_FREQ_13_0: /* OSC is 13Mhz */
+ clock_set_rate(CLOCK_ID_PERIPH, 432, 13, 1, 8);
+ clock_set_rate(CLOCK_ID_CGENERAL, 600, 13, 0, 8);
+ break;
case CLOCK_OSC_FREQ_19_2:
default:
/*
diff --git a/arch/arm/cpu/armv7/tegra2/crypto.c b/arch/arm/cpu/armv7/tegra2/crypto.c
new file mode 100644
index 0000000000..5f0b240e27
--- /dev/null
+++ b/arch/arm/cpu/armv7/tegra2/crypto.c
@@ -0,0 +1,230 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2010 - 2011 NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/errno.h>
+#include "crypto.h"
+#include "aes.h"
+
+static u8 zero_key[16];
+
+#define AES_CMAC_CONST_RB 0x87 /* from RFC 4493, Figure 2.2 */
+
+enum security_op {
+ SECURITY_SIGN = 1 << 0, /* Sign the data */
+ SECURITY_ENCRYPT = 1 << 1, /* Encrypt the data */
+};
+
+static void debug_print_vector(char *name, u32 num_bytes, u8 *data)
+{
+ u32 i;
+
+ debug("%s [%d] @0x%08x", name, num_bytes, (u32)data);
+ for (i = 0; i < num_bytes; i++) {
+ if (i % 16 == 0)
+ debug(" = ");
+ debug("%02x", data[i]);
+ if ((i+1) % 16 != 0)
+ debug(" ");
+ }
+ debug("\n");
+}
+
+/**
+ * Apply chain data to the destination using EOR
+ *
+ * Each array is of length AES_AES_KEY_LENGTH.
+ *
+ * \param cbc_chain_data Chain data
+ * \param src Source data
+ * \param dst Destination data, which is modified here
+ */
+static void apply_cbc_chain_data(u8 *cbc_chain_data, u8 *src, u8 *dst)
+{
+ int i;
+
+ for (i = 0; i < 16; i++)
+ *dst++ = *src++ ^ *cbc_chain_data++;
+}
+
+/**
+ * Encrypt some data with AES.
+ *
+ * \param key_schedule Expanded key to use
+ * \param src Source data to encrypt
+ * \param dst Destination buffer
+ * \param num_aes_blocks Number of AES blocks to encrypt
+ */
+static void encrypt_object(u8 *key_schedule, u8 *src, u8 *dst,
+ u32 num_aes_blocks)
+{
+ u8 tmp_data[AES_KEY_LENGTH];
+ u8 *cbc_chain_data;
+ u32 i;
+
+ cbc_chain_data = zero_key; /* Convenient array of 0's for IV */
+
+ for (i = 0; i < num_aes_blocks; i++) {
+ debug("encrypt_object: block %d of %d\n", i, num_aes_blocks);
+ debug_print_vector("AES Src", AES_KEY_LENGTH, src);
+
+ /* Apply the chain data */
+ apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
+ debug_print_vector("AES Xor", AES_KEY_LENGTH, tmp_data);
+
+ /* encrypt the AES block */
+ aes_encrypt(tmp_data, key_schedule, dst);
+ debug_print_vector("AES Dst", AES_KEY_LENGTH, dst);
+
+ /* Update pointers for next loop. */
+ cbc_chain_data = dst;
+ src += AES_KEY_LENGTH;
+ dst += AES_KEY_LENGTH;
+ }
+}
+
+/**
+ * Shift a vector left by one bit
+ *
+ * \param in Input vector
+ * \param out Output vector
+ * \param size Length of vector in bytes
+ */
+static void left_shift_vector(u8 *in, u8 *out, int size)
+{
+ int carry = 0;
+ int i;
+
+ for (i = size - 1; i >= 0; i--) {
+ out[i] = (in[i] << 1) | carry;
+ carry = in[i] >> 7; /* get most significant bit */
+ }
+}
+
+/**
+ * Sign a block of data, putting the result into dst.
+ *
+ * \param key Input AES key, length AES_KEY_LENGTH
+ * \param key_schedule Expanded key to use
+ * \param src Source data of length 'num_aes_blocks' blocks
+ * \param dst Destination buffer, length AES_KEY_LENGTH
+ * \param num_aes_blocks Number of AES blocks to encrypt
+ */
+static void sign_object(u8 *key, u8 *key_schedule, u8 *src, u8 *dst,
+ u32 num_aes_blocks)
+{
+ u8 tmp_data[AES_KEY_LENGTH];
+ u8 left[AES_KEY_LENGTH];
+ u8 k1[AES_KEY_LENGTH];
+ u8 *cbc_chain_data;
+ unsigned i;
+
+ cbc_chain_data = zero_key; /* Convenient array of 0's for IV */
+
+ /* compute K1 constant needed by AES-CMAC calculation */
+ for (i = 0; i < AES_KEY_LENGTH; i++)
+ tmp_data[i] = 0;
+
+ encrypt_object(key_schedule, tmp_data, left, 1);
+ debug_print_vector("AES(key, nonce)", AES_KEY_LENGTH, left);
+
+ left_shift_vector(left, k1, sizeof(left));
+ debug_print_vector("L", AES_KEY_LENGTH, left);
+
+ if ((left[0] >> 7) != 0) /* get MSB of L */
+ k1[AES_KEY_LENGTH-1] ^= AES_CMAC_CONST_RB;
+ debug_print_vector("K1", AES_KEY_LENGTH, k1);
+
+ /* compute the AES-CMAC value */
+ for (i = 0; i < num_aes_blocks; i++) {
+ /* Apply the chain data */
+ apply_cbc_chain_data(cbc_chain_data, src, tmp_data);
+
+ /* for the final block, XOR K1 into the IV */
+ if (i == num_aes_blocks - 1)
+ apply_cbc_chain_data(tmp_data, k1, tmp_data);
+
+ /* encrypt the AES block */
+ aes_encrypt(tmp_data, key_schedule, dst);
+
+ debug("sign_obj: block %d of %d\n", i, num_aes_blocks);
+ debug_print_vector("AES-CMAC Src", AES_KEY_LENGTH, src);
+ debug_print_vector("AES-CMAC Xor", AES_KEY_LENGTH, tmp_data);
+ debug_print_vector("AES-CMAC Dst", AES_KEY_LENGTH, dst);
+
+ /* Update pointers for next loop. */
+ cbc_chain_data = dst;
+ src += AES_KEY_LENGTH;
+ }
+
+ debug_print_vector("AES-CMAC Hash", AES_KEY_LENGTH, dst);
+}
+
+/**
+ * Encrypt and sign a block of data (depending on security mode).
+ *
+ * \param key Input AES key, length AES_KEY_LENGTH
+ * \param oper Security operations mask to perform (enum security_op)
+ * \param src Source data
+ * \param length Size of source data
+ * \param sig_dst Destination address for signature, AES_KEY_LENGTH bytes
+ */
+static int encrypt_and_sign(u8 *key, enum security_op oper, u8 *src,
+ u32 length, u8 *sig_dst)
+{
+ u32 num_aes_blocks;
+ u8 key_schedule[AES_EXPAND_KEY_LENGTH];
+
+ debug("encrypt_and_sign: length = %d\n", length);
+ debug_print_vector("AES key", AES_KEY_LENGTH, key);
+
+ /*
+ * The only need for a key is for signing/checksum purposes, so
+ * if not encrypting, expand a key of 0s.
+ */
+ aes_expand_key(oper & SECURITY_ENCRYPT ? key : zero_key, key_schedule);
+
+ num_aes_blocks = (length + AES_KEY_LENGTH - 1) / AES_KEY_LENGTH;
+
+ if (oper & SECURITY_ENCRYPT) {
+ /* Perform this in place, resulting in src being encrypted. */
+ debug("encrypt_and_sign: begin encryption\n");
+ encrypt_object(key_schedule, src, src, num_aes_blocks);
+ debug("encrypt_and_sign: end encryption\n");
+ }
+
+ if (oper & SECURITY_SIGN) {
+ /* encrypt the data, overwriting the result in signature. */
+ debug("encrypt_and_sign: begin signing\n");
+ sign_object(key, key_schedule, src, sig_dst, num_aes_blocks);
+ debug("encrypt_and_sign: end signing\n");
+ }
+
+ return 0;
+}
+
+int sign_data_block(u8 *source, unsigned length, u8 *signature)
+{
+ return encrypt_and_sign(zero_key, SECURITY_SIGN, source,
+ length, signature);
+}
diff --git a/arch/arm/cpu/armv7/tegra2/crypto.h b/arch/arm/cpu/armv7/tegra2/crypto.h
new file mode 100644
index 0000000000..aff67e77b0
--- /dev/null
+++ b/arch/arm/cpu/armv7/tegra2/crypto.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2010 - 2011 NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _CRYPTO_H_
+#define _CRYPTO_H_
+
+/**
+ * Sign a block of data
+ *
+ * \param source Source data
+ * \param length Size of source data
+ * \param signature Destination address for signature, AES_KEY_LENGTH bytes
+ */
+int sign_data_block(u8 *source, unsigned length, u8 *signature);
+
+#endif /* #ifndef _CRYPTO_H_ */
diff --git a/arch/arm/cpu/armv7/tegra2/emc.c b/arch/arm/cpu/armv7/tegra2/emc.c
new file mode 100644
index 0000000000..c0e5c565f1
--- /dev/null
+++ b/arch/arm/cpu/armv7/tegra2/emc.c
@@ -0,0 +1,286 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <fdtdec.h>
+#include <asm/io.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/apb_misc.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/emc.h>
+#include <asm/arch/tegra2.h>
+
+/*
+ * The EMC registers have shadow registers. When the EMC clock is updated
+ * in the clock controller, the shadow registers are copied to the active
+ * registers, allowing glitchless memory bus frequency changes.
+ * This function updates the shadow registers for a new clock frequency,
+ * and relies on the clock lock on the emc clock to avoid races between
+ * multiple frequency changes
+ */
+
+/*
+ * This table defines the ordering of the registers provided to
+ * tegra_set_mmc()
+ * TODO: Convert to fdt version once available
+ */
+static const unsigned long emc_reg_addr[TEGRA_EMC_NUM_REGS] = {
+ 0x2c, /* RC */
+ 0x30, /* RFC */
+ 0x34, /* RAS */
+ 0x38, /* RP */
+ 0x3c, /* R2W */
+ 0x40, /* W2R */
+ 0x44, /* R2P */
+ 0x48, /* W2P */
+ 0x4c, /* RD_RCD */
+ 0x50, /* WR_RCD */
+ 0x54, /* RRD */
+ 0x58, /* REXT */
+ 0x5c, /* WDV */
+ 0x60, /* QUSE */
+ 0x64, /* QRST */
+ 0x68, /* QSAFE */
+ 0x6c, /* RDV */
+ 0x70, /* REFRESH */
+ 0x74, /* BURST_REFRESH_NUM */
+ 0x78, /* PDEX2WR */
+ 0x7c, /* PDEX2RD */
+ 0x80, /* PCHG2PDEN */
+ 0x84, /* ACT2PDEN */
+ 0x88, /* AR2PDEN */
+ 0x8c, /* RW2PDEN */
+ 0x90, /* TXSR */
+ 0x94, /* TCKE */
+ 0x98, /* TFAW */
+ 0x9c, /* TRPAB */
+ 0xa0, /* TCLKSTABLE */
+ 0xa4, /* TCLKSTOP */
+ 0xa8, /* TREFBW */
+ 0xac, /* QUSE_EXTRA */
+ 0x114, /* FBIO_CFG6 */
+ 0xb0, /* ODT_WRITE */
+ 0xb4, /* ODT_READ */
+ 0x104, /* FBIO_CFG5 */
+ 0x2bc, /* CFG_DIG_DLL */
+ 0x2c0, /* DLL_XFORM_DQS */
+ 0x2c4, /* DLL_XFORM_QUSE */
+ 0x2e0, /* ZCAL_REF_CNT */
+ 0x2e4, /* ZCAL_WAIT_CNT */
+ 0x2a8, /* AUTO_CAL_INTERVAL */
+ 0x2d0, /* CFG_CLKTRIM_0 */
+ 0x2d4, /* CFG_CLKTRIM_1 */
+ 0x2d8, /* CFG_CLKTRIM_2 */
+};
+
+struct emc_ctlr *emc_get_controller(const void *blob)
+{
+ fdt_addr_t addr;
+ int node;
+
+ node = fdtdec_next_compatible(blob, 0, COMPAT_NVIDIA_TEGRA20_EMC);
+ if (node > 0) {
+ addr = fdtdec_get_addr(blob, node, "reg");
+ if (addr != FDT_ADDR_T_NONE)
+ return (struct emc_ctlr *)addr;
+ }
+ return NULL;
+}
+
+/* Error codes we use */
+enum {
+ ERR_NO_EMC_NODE = -10,
+ ERR_NO_EMC_REG,
+ ERR_NO_FREQ,
+ ERR_FREQ_NOT_FOUND,
+ ERR_BAD_REGS,
+ ERR_NO_RAM_CODE,
+ ERR_RAM_CODE_NOT_FOUND,
+};
+
+/**
+ * Find EMC tables for the given ram code.
+ *
+ * The tegra EMC binding has two options, one using the ram code and one not.
+ * We detect which is in use by looking for the nvidia,use-ram-code property.
+ * If this is not present, then the EMC tables are directly below 'node',
+ * otherwise we select the correct emc-tables subnode based on the 'ram_code'
+ * value.
+ *
+ * @param blob Device tree blob
+ * @param node EMC node (nvidia,tegra20-emc compatible string)
+ * @param ram_code RAM code to select (0-3, or -1 if unknown)
+ * @return 0 if ok, otherwise a -ve ERR_ code (see enum above)
+ */
+static int find_emc_tables(const void *blob, int node, int ram_code)
+{
+ int need_ram_code;
+ int depth;
+ int offset;
+
+ /* If we are using RAM codes, scan through the tables for our code */
+ need_ram_code = fdtdec_get_bool(blob, node, "nvidia,use-ram-code");
+ if (!need_ram_code)
+ return node;
+ if (ram_code == -1) {
+ debug("%s: RAM code required but not supplied\n", __func__);
+ return ERR_NO_RAM_CODE;
+ }
+
+ offset = node;
+ depth = 0;
+ do {
+ /*
+ * Sadly there is no compatible string so we cannot use
+ * fdtdec_next_compatible_subnode().
+ */
+ offset = fdt_next_node(blob, offset, &depth);
+ if (depth <= 0)
+ break;
+
+ /* Make sure this is a direct subnode */
+ if (depth != 1)
+ continue;
+ if (strcmp("emc-tables", fdt_get_name(blob, offset, NULL)))
+ continue;
+
+ if (fdtdec_get_int(blob, offset, "nvidia,ram-code", -1)
+ == ram_code)
+ return offset;
+ } while (1);
+
+ debug("%s: Could not find tables for RAM code %d\n", __func__,
+ ram_code);
+ return ERR_RAM_CODE_NOT_FOUND;
+}
+
+/**
+ * Decode the EMC node of the device tree, returning a pointer to the emc
+ * controller and the table to be used for the given rate.
+ *
+ * @param blob Device tree blob
+ * @param rate Clock speed of memory controller in Hz (=2x memory bus rate)
+ * @param emcp Returns address of EMC controller registers
+ * @param tablep Returns pointer to table to program into EMC. There are
+ * TEGRA_EMC_NUM_REGS entries, destined for offsets as per the
+ * emc_reg_addr array.
+ * @return 0 if ok, otherwise a -ve error code which will allow someone to
+ * figure out roughly what went wrong by looking at this code.
+ */
+static int decode_emc(const void *blob, unsigned rate, struct emc_ctlr **emcp,
+ const u32 **tablep)
+{
+ struct apb_misc_pp_ctlr *pp =
+ (struct apb_misc_pp_ctlr *)NV_PA_APB_MISC_BASE;
+ int ram_code;
+ int depth;
+ int node;
+
+ ram_code = (readl(&pp->strapping_opt_a) & RAM_CODE_MASK)
+ >> RAM_CODE_SHIFT;
+ /*
+ * The EMC clock rate is twice the bus rate, and the bus rate is
+ * measured in kHz
+ */
+ rate = rate / 2 / 1000;
+
+ node = fdtdec_next_compatible(blob, 0, COMPAT_NVIDIA_TEGRA20_EMC);
+ if (node < 0) {
+ debug("%s: No EMC node found in FDT\n", __func__);
+ return ERR_NO_EMC_NODE;
+ }
+ *emcp = (struct emc_ctlr *)fdtdec_get_addr(blob, node, "reg");
+ if (*emcp == (struct emc_ctlr *)FDT_ADDR_T_NONE) {
+ debug("%s: No EMC node reg property\n", __func__);
+ return ERR_NO_EMC_REG;
+ }
+
+ /* Work out the parent node which contains our EMC tables */
+ node = find_emc_tables(blob, node, ram_code & 3);
+ if (node < 0)
+ return node;
+
+ depth = 0;
+ for (;;) {
+ int node_rate;
+
+ node = fdtdec_next_compatible_subnode(blob, node,
+ COMPAT_NVIDIA_TEGRA20_EMC_TABLE, &depth);
+ if (node < 0)
+ break;
+ node_rate = fdtdec_get_int(blob, node, "clock-frequency", -1);
+ if (node_rate == -1) {
+ debug("%s: Missing clock-frequency\n", __func__);
+ return ERR_NO_FREQ; /* we expect this property */
+ }
+
+ if (node_rate == rate)
+ break;
+ }
+ if (node < 0) {
+ debug("%s: No node found for clock frequency %d\n", __func__,
+ rate);
+ return ERR_FREQ_NOT_FOUND;
+ }
+
+ *tablep = fdtdec_locate_array(blob, node, "nvidia,emc-registers",
+ TEGRA_EMC_NUM_REGS);
+ if (!*tablep) {
+ debug("%s: node '%s' array missing / wrong size\n", __func__,
+ fdt_get_name(blob, node, NULL));
+ return ERR_BAD_REGS;
+ }
+
+ /* All seems well */
+ return 0;
+}
+
+int tegra_set_emc(const void *blob, unsigned rate)
+{
+ struct emc_ctlr *emc;
+ const u32 *table;
+ int err, i;
+
+ err = decode_emc(blob, rate, &emc, &table);
+ if (err) {
+ debug("Warning: no valid EMC (%d), memory timings unset\n",
+ err);
+ return err;
+ }
+
+ debug("%s: Table found, setting EMC values as follows:\n", __func__);
+ for (i = 0; i < TEGRA_EMC_NUM_REGS; i++) {
+ u32 value = fdt32_to_cpu(table[i]);
+ u32 addr = (uintptr_t)emc + emc_reg_addr[i];
+
+ debug(" %#x: %#x\n", addr, value);
+ writel(value, addr);
+ }
+
+ /* trigger emc with new settings */
+ clock_adjust_periph_pll_div(PERIPH_ID_EMC, CLOCK_ID_MEMORY,
+ clock_get_rate(CLOCK_ID_MEMORY), NULL);
+ debug("EMC clock set to %lu\n",
+ clock_get_periph_rate(PERIPH_ID_EMC, CLOCK_ID_MEMORY));
+
+ return 0;
+}
diff --git a/arch/arm/cpu/armv7/tegra2/funcmux.c b/arch/arm/cpu/armv7/tegra2/funcmux.c
index c1d2dfec5f..0ef7753021 100644
--- a/arch/arm/cpu/armv7/tegra2/funcmux.c
+++ b/arch/arm/cpu/armv7/tegra2/funcmux.c
@@ -169,6 +169,22 @@ int funcmux_select(enum periph_id id, int config)
}
break;
+ case PERIPH_ID_KBC:
+ if (config == FUNCMUX_DEFAULT) {
+ enum pmux_pingrp grp[] = {PINGRP_KBCA, PINGRP_KBCB,
+ PINGRP_KBCC, PINGRP_KBCD, PINGRP_KBCE,
+ PINGRP_KBCF};
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(grp); i++) {
+ pinmux_tristate_disable(grp[i]);
+ pinmux_set_func(grp[i], PMUX_FUNC_KBC);
+ pinmux_set_pullupdown(grp[i], PMUX_PULL_UP);
+ }
+
+ break;
+ }
+
default:
debug("%s: invalid periph_id %d", __func__, id);
return -1;
diff --git a/arch/arm/cpu/armv7/tegra2/lowlevel_init.S b/arch/arm/cpu/armv7/tegra2/lowlevel_init.S
index 6b866476ce..d117f23a62 100644
--- a/arch/arm/cpu/armv7/tegra2/lowlevel_init.S
+++ b/arch/arm/cpu/armv7/tegra2/lowlevel_init.S
@@ -25,10 +25,10 @@
#include <config.h>
#include <version.h>
+#include <linux/linkage.h>
.align 5
-.global reset_cpu
-reset_cpu:
+ENTRY(reset_cpu)
ldr r1, rstctl @ get addr for global reset
@ reg
ldr r3, [r1]
@@ -39,3 +39,4 @@ _loop_forever:
b _loop_forever
rstctl:
.word PRM_RSTCTRL
+ENDPROC(reset_cpu)
diff --git a/arch/arm/cpu/armv7/tegra2/pmu.c b/arch/arm/cpu/armv7/tegra2/pmu.c
new file mode 100644
index 0000000000..46738023ff
--- /dev/null
+++ b/arch/arm/cpu/armv7/tegra2/pmu.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2010,2011 NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <tps6586x.h>
+#include <asm/io.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/tegra2.h>
+#include <asm/arch/tegra_i2c.h>
+#include <asm/arch/sys_proto.h>
+
+#define VDD_CORE_NOMINAL_T25 0x17 /* 1.3v */
+#define VDD_CPU_NOMINAL_T25 0x10 /* 1.125v */
+
+#define VDD_CORE_NOMINAL_T20 0x16 /* 1.275v */
+#define VDD_CPU_NOMINAL_T20 0x0f /* 1.1v */
+
+#define VDD_RELATION 0x02 /* 50mv */
+#define VDD_TRANSITION_STEP 0x06 /* 150mv */
+#define VDD_TRANSITION_RATE 0x06 /* 3.52mv/us */
+
+int pmu_set_nominal(void)
+{
+ int core, cpu, bus;
+
+ /* by default, the table has been filled with T25 settings */
+ switch (tegra_get_chip_type()) {
+ case TEGRA_SOC_T20:
+ core = VDD_CORE_NOMINAL_T20;
+ cpu = VDD_CPU_NOMINAL_T20;
+ break;
+ case TEGRA_SOC_T25:
+ core = VDD_CORE_NOMINAL_T25;
+ cpu = VDD_CPU_NOMINAL_T25;
+ break;
+ default:
+ debug("%s: Unknown chip type\n", __func__);
+ return -1;
+ }
+
+ bus = tegra_i2c_get_dvc_bus_num();
+ if (bus == -1) {
+ debug("%s: Cannot find DVC I2C bus\n", __func__);
+ return -1;
+ }
+ tps6586x_init(bus);
+ tps6586x_set_pwm_mode(TPS6586X_PWM_SM1);
+ return tps6586x_adjust_sm0_sm1(core, cpu, VDD_TRANSITION_STEP,
+ VDD_TRANSITION_RATE, VDD_RELATION);
+}
diff --git a/arch/arm/cpu/armv7/tegra2/warmboot.c b/arch/arm/cpu/armv7/tegra2/warmboot.c
new file mode 100644
index 0000000000..25d896888a
--- /dev/null
+++ b/arch/arm/cpu/armv7/tegra2/warmboot.c
@@ -0,0 +1,386 @@
+/*
+ * (C) Copyright 2010 - 2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/errno.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/pmc.h>
+#include <asm/arch/pinmux.h>
+#include <asm/arch/tegra2.h>
+#include <asm/arch/fuse.h>
+#include <asm/arch/emc.h>
+#include <asm/arch/gp_padctrl.h>
+#include <asm/arch/warmboot.h>
+#include <asm/arch/sdram_param.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#ifndef CONFIG_TEGRA_CLOCK_SCALING
+#error "You must enable CONFIG_TEGRA_CLOCK_SCALING to use CONFIG_TEGRA2_LP0"
+#endif
+
+/*
+ * This is the place in SRAM where the SDRAM parameters are stored. There
+ * are 4 blocks, one for each RAM code
+ */
+#define SDRAM_PARAMS_BASE (AP20_BASE_PA_SRAM + 0x188)
+
+/* TODO: If we later add support for the Misc GP controller, refactor this */
+union xm2cfga_reg {
+ struct {
+ u32 reserved0:2;
+ u32 hsm_en:1;
+ u32 reserved1:2;
+ u32 preemp_en:1;
+ u32 vref_en:1;
+ u32 reserved2:5;
+ u32 cal_drvdn:5;
+ u32 reserved3:3;
+ u32 cal_drvup:5;
+ u32 reserved4:3;
+ u32 cal_drvdn_slwr:2;
+ u32 cal_drvup_slwf:2;
+ };
+ u32 word;
+};
+
+union xm2cfgd_reg {
+ struct {
+ u32 reserved0:2;
+ u32 hsm_en:1;
+ u32 schmt_en:1;
+ u32 lpmd:2;
+ u32 vref_en:1;
+ u32 reserved1:5;
+ u32 cal_drvdn:5;
+ u32 reserved2:3;
+ u32 cal_drvup:5;
+ u32 reserved3:3;
+ u32 cal_drvdn_slwr:2;
+ u32 cal_drvup_slwf:2;
+ };
+ u32 word;
+};
+
+/*
+ * TODO: This register is not documented in the TRM yet. We could move this
+ * into the EMC and give it a proper interface, but not while it is
+ * undocumented.
+ */
+union fbio_spare_reg {
+ struct {
+ u32 reserved:24;
+ u32 cfg_wb0:8;
+ };
+ u32 word;
+};
+
+/* We pack the resume information into these unions for later */
+union scratch2_reg {
+ struct {
+ u32 pllm_base_divm:5;
+ u32 pllm_base_divn:10;
+ u32 pllm_base_divp:3;
+ u32 pllm_misc_lfcon:4;
+ u32 pllm_misc_cpcon:4;
+ u32 gp_xm2cfga_padctrl_preemp:1;
+ u32 gp_xm2cfgd_padctrl_schmt:1;
+ u32 osc_ctrl_xobp:1;
+ u32 memory_type:3;
+ };
+ u32 word;
+};
+
+union scratch4_reg {
+ struct {
+ u32 emc_clock_divider:8;
+ u32 pllm_stable_time:8;
+ u32 pllx_stable_time:8;
+ u32 emc_fbio_spare_cfg_wb0:8;
+ };
+ u32 word;
+};
+
+union scratch24_reg {
+ struct {
+ u32 emc_auto_cal_wait:8;
+ u32 emc_pin_program_wait:8;
+ u32 warmboot_wait:8;
+ u32 reserved:8;
+ };
+ u32 word;
+};
+
+int warmboot_save_sdram_params(void)
+{
+ u32 ram_code;
+ struct sdram_params sdram;
+ struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+ struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
+ struct apb_misc_gp_ctlr *gp =
+ (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
+ struct emc_ctlr *emc = emc_get_controller(gd->fdt_blob);
+ union scratch2_reg scratch2;
+ union scratch4_reg scratch4;
+ union scratch24_reg scratch24;
+ union xm2cfga_reg xm2cfga;
+ union xm2cfgd_reg xm2cfgd;
+ union fbio_spare_reg fbio_spare;
+
+ /* get ram code that is used as index to array sdram_params in BCT */
+ ram_code = (readl(&pmt->pmt_strap_opt_a) >>
+ STRAP_OPT_A_RAM_CODE_SHIFT) & 3;
+ memcpy(&sdram,
+ (char *)((struct sdram_params *)SDRAM_PARAMS_BASE + ram_code),
+ sizeof(sdram));
+
+ xm2cfga.word = readl(&gp->xm2cfga);
+ xm2cfgd.word = readl(&gp->xm2cfgd);
+
+ scratch2.word = 0;
+ scratch2.osc_ctrl_xobp = clock_get_osc_bypass();
+
+ /* Get the memory PLL settings */
+ {
+ u32 divm, divn, divp, cpcon, lfcon;
+
+ if (clock_ll_read_pll(CLOCK_ID_MEMORY, &divm, &divn, &divp,
+ &cpcon, &lfcon))
+ return -1;
+ scratch2.pllm_base_divm = divm;
+ scratch2.pllm_base_divn = divn;
+ scratch2.pllm_base_divp = divp;
+ scratch2.pllm_misc_cpcon = cpcon;
+ scratch2.pllm_misc_lfcon = lfcon;
+ }
+
+ scratch2.gp_xm2cfga_padctrl_preemp = xm2cfga.preemp_en;
+ scratch2.gp_xm2cfgd_padctrl_schmt = xm2cfgd.schmt_en;
+ scratch2.memory_type = sdram.memory_type;
+ writel(scratch2.word, &pmc->pmc_scratch2);
+
+ /* collect data from various sources for pmc_scratch4 */
+ fbio_spare.word = readl(&emc->fbio_spare);
+ scratch4.word = 0;
+ scratch4.emc_fbio_spare_cfg_wb0 = fbio_spare.cfg_wb0;
+ scratch4.emc_clock_divider = sdram.emc_clock_divider;
+ scratch4.pllm_stable_time = -1;
+ scratch4.pllx_stable_time = -1;
+ writel(scratch4.word, &pmc->pmc_scratch4);
+
+ /* collect various data from sdram for pmc_scratch24 */
+ scratch24.word = 0;
+ scratch24.emc_pin_program_wait = sdram.emc_pin_program_wait;
+ scratch24.emc_auto_cal_wait = sdram.emc_auto_cal_wait;
+ scratch24.warmboot_wait = sdram.warm_boot_wait;
+ writel(scratch24.word, &pmc->pmc_scratch24);
+
+ return 0;
+}
+
+static u32 get_major_version(void)
+{
+ u32 major_id;
+ struct apb_misc_gp_ctlr *gp =
+ (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
+
+ major_id = (readl(&gp->hidrev) & HIDREV_MAJORPREV_MASK) >>
+ HIDREV_MAJORPREV_SHIFT;
+ return major_id;
+}
+
+static int is_production_mode_fuse_set(struct fuse_regs *fuse)
+{
+ return readl(&fuse->production_mode);
+}
+
+static int is_odm_production_mode_fuse_set(struct fuse_regs *fuse)
+{
+ return readl(&fuse->security_mode);
+}
+
+static int is_failure_analysis_mode(struct fuse_regs *fuse)
+{
+ return readl(&fuse->fa);
+}
+
+static int ap20_is_odm_production_mode(void)
+{
+ struct fuse_regs *fuse = (struct fuse_regs *)TEGRA2_FUSE_BASE;
+
+ if (!is_failure_analysis_mode(fuse) &&
+ is_odm_production_mode_fuse_set(fuse))
+ return 1;
+ else
+ return 0;
+}
+
+static int ap20_is_production_mode(void)
+{
+ struct fuse_regs *fuse = (struct fuse_regs *)TEGRA2_FUSE_BASE;
+
+ if (get_major_version() == 0)
+ return 1;
+
+ if (!is_failure_analysis_mode(fuse) &&
+ is_production_mode_fuse_set(fuse) &&
+ !is_odm_production_mode_fuse_set(fuse))
+ return 1;
+ else
+ return 0;
+}
+
+static enum fuse_operating_mode fuse_get_operation_mode(void)
+{
+ u32 chip_id;
+ struct apb_misc_gp_ctlr *gp =
+ (struct apb_misc_gp_ctlr *)TEGRA2_APB_MISC_GP_BASE;
+
+ chip_id = (readl(&gp->hidrev) & HIDREV_CHIPID_MASK) >>
+ HIDREV_CHIPID_SHIFT;
+ if (chip_id == CHIPID_TEGRA2) {
+ if (ap20_is_odm_production_mode()) {
+ printf("!! odm_production_mode is not supported !!\n");
+ return MODE_UNDEFINED;
+ } else
+ if (ap20_is_production_mode())
+ return MODE_PRODUCTION;
+ else
+ return MODE_UNDEFINED;
+ }
+ return MODE_UNDEFINED;
+}
+
+static void determine_crypto_options(int *is_encrypted, int *is_signed,
+ int *use_zero_key)
+{
+ switch (fuse_get_operation_mode()) {
+ case MODE_PRODUCTION:
+ *is_encrypted = 0;
+ *is_signed = 1;
+ *use_zero_key = 1;
+ break;
+ case MODE_UNDEFINED:
+ default:
+ *is_encrypted = 0;
+ *is_signed = 0;
+ *use_zero_key = 0;
+ break;
+ }
+}
+
+static int sign_wb_code(u32 start, u32 length, int use_zero_key)
+{
+ int err;
+ u8 *source; /* Pointer to source */
+ u8 *hash;
+
+ /* Calculate AES block parameters. */
+ source = (u8 *)(start + offsetof(struct wb_header, random_aes_block));
+ length -= offsetof(struct wb_header, random_aes_block);
+ hash = (u8 *)(start + offsetof(struct wb_header, hash));
+ err = sign_data_block(source, length, hash);
+
+ return err;
+}
+
+int warmboot_prepare_code(u32 seg_address, u32 seg_length)
+{
+ int err = 0;
+ u32 length; /* length of the signed/encrypt code */
+ struct wb_header *dst_header; /* Pointer to dest WB header */
+ int is_encrypted; /* Segment is encrypted */
+ int is_signed; /* Segment is signed */
+ int use_zero_key; /* Use key of all zeros */
+
+ /* Determine crypto options. */
+ determine_crypto_options(&is_encrypted, &is_signed, &use_zero_key);
+
+ /* Get the actual code limits. */
+ length = roundup(((u32)wb_end - (u32)wb_start), 16);
+
+ /*
+ * The region specified by seg_address must be in SDRAM and must be
+ * nonzero in length.
+ */
+ if (seg_length == 0 || seg_address < NV_PA_SDRAM_BASE ||
+ seg_address + seg_length >= NV_PA_SDRAM_BASE + gd->ram_size) {
+ err = -EFAULT;
+ goto fail;
+ }
+
+ /* Things must be 16-byte aligned. */
+ if ((seg_length & 0xF) || (seg_address & 0xF)) {
+ err = -EINVAL;
+ goto fail;
+ }
+
+ /* Will the code fit? (destination includes wb_header + wb code) */
+ if (seg_length < (length + sizeof(struct wb_header))) {
+ err = -EINVAL;
+ goto fail;
+ }
+
+ dst_header = (struct wb_header *)seg_address;
+ memset((char *)dst_header, 0, sizeof(struct wb_header));
+
+ /* Populate the random_aes_block as requested. */
+ {
+ u32 *aes_block = (u32 *)&(dst_header->random_aes_block);
+ u32 *end = (u32 *)(((u32)aes_block) +
+ sizeof(dst_header->random_aes_block));
+
+ do {
+ *aes_block++ = 0;
+ } while (aes_block < end);
+ }
+
+ /* Populate the header. */
+ dst_header->length_insecure = length + sizeof(struct wb_header);
+ dst_header->length_secure = length + sizeof(struct wb_header);
+ dst_header->destination = AP20_WB_RUN_ADDRESS;
+ dst_header->entry_point = AP20_WB_RUN_ADDRESS;
+ dst_header->code_length = length;
+
+ if (is_encrypted) {
+ printf("!!!! Encryption is not supported !!!!\n");
+ dst_header->length_insecure = 0;
+ err = -EACCES;
+ goto fail;
+ } else
+ /* copy the wb code directly following dst_header. */
+ memcpy((char *)(dst_header+1), (char *)wb_start, length);
+
+ if (is_signed)
+ err = sign_wb_code(seg_address, dst_header->length_insecure,
+ use_zero_key);
+
+fail:
+ if (err)
+ printf("Warning: warmboot code copy failed (error=%d)\n", err);
+
+ return err;
+}
diff --git a/arch/arm/cpu/armv7/tegra2/warmboot_avp.c b/arch/arm/cpu/armv7/tegra2/warmboot_avp.c
new file mode 100644
index 0000000000..70bcd8e5f3
--- /dev/null
+++ b/arch/arm/cpu/armv7/tegra2/warmboot_avp.c
@@ -0,0 +1,250 @@
+/*
+ * (C) Copyright 2010 - 2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/flow.h>
+#include <asm/arch/pinmux.h>
+#include <asm/arch/pmc.h>
+#include <asm/arch/tegra2.h>
+#include <asm/arch/warmboot.h>
+#include "warmboot_avp.h"
+
+#define DEBUG_RESET_CORESIGHT
+
+void wb_start(void)
+{
+ struct pmux_tri_ctlr *pmt = (struct pmux_tri_ctlr *)NV_PA_APB_MISC_BASE;
+ struct pmc_ctlr *pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
+ struct flow_ctlr *flow = (struct flow_ctlr *)NV_PA_FLOW_BASE;
+ struct clk_rst_ctlr *clkrst =
+ (struct clk_rst_ctlr *)NV_PA_CLK_RST_BASE;
+ union osc_ctrl_reg osc_ctrl;
+ union pllx_base_reg pllx_base;
+ union pllx_misc_reg pllx_misc;
+ union scratch3_reg scratch3;
+ u32 reg;
+
+ /* enable JTAG & TBE */
+ writel(CONFIG_CTL_TBE | CONFIG_CTL_JTAG, &pmt->pmt_cfg_ctl);
+
+ /* Are we running where we're supposed to be? */
+ asm volatile (
+ "adr %0, wb_start;" /* reg: wb_start address */
+ : "=r"(reg) /* output */
+ /* no input, no clobber list */
+ );
+
+ if (reg != AP20_WB_RUN_ADDRESS)
+ goto do_reset;
+
+ /* Are we running with AVP? */
+ if (readl(NV_PA_PG_UP_BASE + PG_UP_TAG_0) != PG_UP_TAG_AVP)
+ goto do_reset;
+
+#ifdef DEBUG_RESET_CORESIGHT
+ /* Assert CoreSight reset */
+ reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_U]);
+ reg |= SWR_CSITE_RST;
+ writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_U]);
+#endif
+
+ /* TODO: Set the drive strength - maybe make this a board parameter? */
+ osc_ctrl.word = readl(&clkrst->crc_osc_ctrl);
+ osc_ctrl.xofs = 4;
+ osc_ctrl.xoe = 1;
+ writel(osc_ctrl.word, &clkrst->crc_osc_ctrl);
+
+ /* Power up the CPU complex if necessary */
+ if (!(readl(&pmc->pmc_pwrgate_status) & PWRGATE_STATUS_CPU)) {
+ reg = PWRGATE_TOGGLE_PARTID_CPU | PWRGATE_TOGGLE_START;
+ writel(reg, &pmc->pmc_pwrgate_toggle);
+ while (!(readl(&pmc->pmc_pwrgate_status) & PWRGATE_STATUS_CPU))
+ ;
+ }
+
+ /* Remove the I/O clamps from the CPU power partition. */
+ reg = readl(&pmc->pmc_remove_clamping);
+ reg |= CPU_CLMP;
+ writel(reg, &pmc->pmc_remove_clamping);
+
+ reg = EVENT_ZERO_VAL_20 | EVENT_MSEC | EVENT_MODE_STOP;
+ writel(reg, &flow->halt_cop_events);
+
+ /* Assert CPU complex reset */
+ reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_L]);
+ reg |= CPU_RST;
+ writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
+
+ /* Hold both CPUs in reset */
+ reg = CPU_CMPLX_CPURESET0 | CPU_CMPLX_CPURESET1 | CPU_CMPLX_DERESET0 |
+ CPU_CMPLX_DERESET1 | CPU_CMPLX_DBGRESET0 | CPU_CMPLX_DBGRESET1;
+ writel(reg, &clkrst->crc_cpu_cmplx_set);
+
+ /* Halt CPU1 at the flow controller for uni-processor configurations */
+ writel(EVENT_MODE_STOP, &flow->halt_cpu1_events);
+
+ /*
+ * Set the CPU reset vector. SCRATCH41 contains the physical
+ * address of the CPU-side restoration code.
+ */
+ reg = readl(&pmc->pmc_scratch41);
+ writel(reg, EXCEP_VECTOR_CPU_RESET_VECTOR);
+
+ /* Select CPU complex clock source */
+ writel(CCLK_PLLP_BURST_POLICY, &clkrst->crc_cclk_brst_pol);
+
+ /* Start the CPU0 clock and stop the CPU1 clock */
+ reg = CPU_CMPLX_CPU_BRIDGE_CLKDIV_4 | CPU_CMPLX_CPU0_CLK_STP_RUN |
+ CPU_CMPLX_CPU1_CLK_STP_STOP;
+ writel(reg, &clkrst->crc_clk_cpu_cmplx);
+
+ /* Enable the CPU complex clock */
+ reg = readl(&clkrst->crc_clk_out_enb[TEGRA_DEV_L]);
+ reg |= CLK_ENB_CPU;
+ writel(reg, &clkrst->crc_clk_out_enb[TEGRA_DEV_L]);
+
+ /* Make sure the resets were held for at least 2 microseconds */
+ reg = readl(TIMER_USEC_CNTR);
+ while (readl(TIMER_USEC_CNTR) <= (reg + 2))
+ ;
+
+#ifdef DEBUG_RESET_CORESIGHT
+ /*
+ * De-assert CoreSight reset.
+ * NOTE: We're leaving the CoreSight clock on the oscillator for
+ * now. It will be restored to its original clock source
+ * when the CPU-side restoration code runs.
+ */
+ reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_U]);
+ reg &= ~SWR_CSITE_RST;
+ writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_U]);
+#endif
+
+ /* Unlock the CPU CoreSight interfaces */
+ reg = 0xC5ACCE55;
+ writel(reg, CSITE_CPU_DBG0_LAR);
+ writel(reg, CSITE_CPU_DBG1_LAR);
+
+ /*
+ * Sample the microsecond timestamp again. This is the time we must
+ * use when returning from LP0 for PLL stabilization delays.
+ */
+ reg = readl(TIMER_USEC_CNTR);
+ writel(reg, &pmc->pmc_scratch1);
+
+ pllx_base.word = 0;
+ pllx_misc.word = 0;
+ scratch3.word = readl(&pmc->pmc_scratch3);
+
+ /* Get the OSC. For 19.2 MHz, use 19 to make the calculations easier */
+ reg = (readl(TIMER_USEC_CFG) & USEC_CFG_DIVISOR_MASK) + 1;
+
+ /*
+ * According to the TRM, for 19.2MHz OSC, the USEC_DIVISOR is 0x5f, and
+ * USEC_DIVIDEND is 0x04. So, if USEC_DIVISOR > 26, OSC is 19.2 MHz.
+ *
+ * reg is used to calculate the pllx freq, which is used to determine if
+ * to set dccon or not.
+ */
+ if (reg > 26)
+ reg = 19;
+
+ /* PLLX_BASE.PLLX_DIVM */
+ if (scratch3.pllx_base_divm == reg)
+ reg = 0;
+ else
+ reg = 1;
+
+ /* PLLX_BASE.PLLX_DIVN */
+ pllx_base.divn = scratch3.pllx_base_divn;
+ reg = scratch3.pllx_base_divn << reg;
+
+ /* PLLX_BASE.PLLX_DIVP */
+ pllx_base.divp = scratch3.pllx_base_divp;
+ reg = reg >> scratch3.pllx_base_divp;
+
+ pllx_base.bypass = 1;
+
+ /* PLLX_MISC_DCCON must be set for pllx frequency > 600 MHz. */
+ if (reg > 600)
+ pllx_misc.dccon = 1;
+
+ /* PLLX_MISC_LFCON */
+ pllx_misc.lfcon = scratch3.pllx_misc_lfcon;
+
+ /* PLLX_MISC_CPCON */
+ pllx_misc.cpcon = scratch3.pllx_misc_cpcon;
+
+ writel(pllx_misc.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_misc);
+ writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
+
+ pllx_base.enable = 1;
+ writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
+ pllx_base.bypass = 0;
+ writel(pllx_base.word, &clkrst->crc_pll_simple[SIMPLE_PLLX].pll_base);
+
+ writel(0, flow->halt_cpu_events);
+
+ reg = CPU_CMPLX_CPURESET0 | CPU_CMPLX_DBGRESET0 | CPU_CMPLX_DERESET0;
+ writel(reg, &clkrst->crc_cpu_cmplx_clr);
+
+ reg = PLLM_OUT1_RSTN_RESET_DISABLE | PLLM_OUT1_CLKEN_ENABLE |
+ PLLM_OUT1_RATIO_VAL_8;
+ writel(reg, &clkrst->crc_pll[CLOCK_ID_MEMORY].pll_out);
+
+ reg = SCLK_SWAKE_FIQ_SRC_PLLM_OUT1 | SCLK_SWAKE_IRQ_SRC_PLLM_OUT1 |
+ SCLK_SWAKE_RUN_SRC_PLLM_OUT1 | SCLK_SWAKE_IDLE_SRC_PLLM_OUT1 |
+ SCLK_SYS_STATE_IDLE;
+ writel(reg, &clkrst->crc_sclk_brst_pol);
+
+ /* avp_resume: no return after the write */
+ reg = readl(&clkrst->crc_rst_dev[TEGRA_DEV_L]);
+ reg &= ~CPU_RST;
+ writel(reg, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
+
+ /* avp_halt: */
+avp_halt:
+ reg = EVENT_MODE_STOP | EVENT_JTAG;
+ writel(reg, flow->halt_cop_events);
+ goto avp_halt;
+
+do_reset:
+ /*
+ * Execution comes here if something goes wrong. The chip is reset and
+ * a cold boot is performed.
+ */
+ writel(SWR_TRIG_SYS_RST, &clkrst->crc_rst_dev[TEGRA_DEV_L]);
+ goto do_reset;
+}
+
+/*
+ * wb_end() is a dummy function, and must be directly following wb_start(),
+ * and is used to calculate the size of wb_start().
+ */
+void wb_end(void)
+{
+}
diff --git a/arch/arm/cpu/armv7/tegra2/warmboot_avp.h b/arch/arm/cpu/armv7/tegra2/warmboot_avp.h
new file mode 100644
index 0000000000..4b71c07843
--- /dev/null
+++ b/arch/arm/cpu/armv7/tegra2/warmboot_avp.h
@@ -0,0 +1,81 @@
+/*
+ * (C) Copyright 2010, 2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _WARMBOOT_AVP_H_
+#define _WARMBOOT_AVP_H_
+
+#define TEGRA_DEV_L 0
+#define TEGRA_DEV_H 1
+#define TEGRA_DEV_U 2
+
+#define SIMPLE_PLLX (CLOCK_ID_XCPU - CLOCK_ID_FIRST_SIMPLE)
+#define SIMPLE_PLLE (CLOCK_ID_EPCI - CLOCK_ID_FIRST_SIMPLE)
+
+#define TIMER_USEC_CNTR (NV_PA_TMRUS_BASE + 0)
+#define TIMER_USEC_CFG (NV_PA_TMRUS_BASE + 4)
+
+#define USEC_CFG_DIVISOR_MASK 0xffff
+
+#define CONFIG_CTL_TBE (1 << 7)
+#define CONFIG_CTL_JTAG (1 << 6)
+
+#define CPU_RST (1 << 0)
+#define CLK_ENB_CPU (1 << 0)
+#define SWR_TRIG_SYS_RST (1 << 2)
+#define SWR_CSITE_RST (1 << 9)
+
+#define PWRGATE_STATUS_CPU (1 << 0)
+#define PWRGATE_TOGGLE_PARTID_CPU (0 << 0)
+#define PWRGATE_TOGGLE_START (1 << 8)
+
+#define CPU_CMPLX_CPU_BRIDGE_CLKDIV_4 (3 << 0)
+#define CPU_CMPLX_CPU0_CLK_STP_STOP (1 << 8)
+#define CPU_CMPLX_CPU0_CLK_STP_RUN (0 << 8)
+#define CPU_CMPLX_CPU1_CLK_STP_STOP (1 << 9)
+#define CPU_CMPLX_CPU1_CLK_STP_RUN (0 << 9)
+
+#define CPU_CMPLX_CPURESET0 (1 << 0)
+#define CPU_CMPLX_CPURESET1 (1 << 1)
+#define CPU_CMPLX_DERESET0 (1 << 4)
+#define CPU_CMPLX_DERESET1 (1 << 5)
+#define CPU_CMPLX_DBGRESET0 (1 << 12)
+#define CPU_CMPLX_DBGRESET1 (1 << 13)
+
+#define PLLM_OUT1_RSTN_RESET_DISABLE (1 << 0)
+#define PLLM_OUT1_CLKEN_ENABLE (1 << 1)
+#define PLLM_OUT1_RATIO_VAL_8 (8 << 8)
+
+#define SCLK_SYS_STATE_IDLE (1 << 28)
+#define SCLK_SWAKE_FIQ_SRC_PLLM_OUT1 (7 << 12)
+#define SCLK_SWAKE_IRQ_SRC_PLLM_OUT1 (7 << 8)
+#define SCLK_SWAKE_RUN_SRC_PLLM_OUT1 (7 << 4)
+#define SCLK_SWAKE_IDLE_SRC_PLLM_OUT1 (7 << 0)
+
+#define EVENT_ZERO_VAL_20 (20 << 0)
+#define EVENT_MSEC (1 << 24)
+#define EVENT_JTAG (1 << 28)
+#define EVENT_MODE_STOP (2 << 29)
+
+#define CCLK_PLLP_BURST_POLICY 0x20004444
+
+#endif
diff --git a/arch/arm/cpu/armv7/u8500/lowlevel.S b/arch/arm/cpu/armv7/u8500/lowlevel.S
index cffdfd1381..289cfb0779 100644
--- a/arch/arm/cpu/armv7/u8500/lowlevel.S
+++ b/arch/arm/cpu/armv7/u8500/lowlevel.S
@@ -20,16 +20,17 @@
*/
#include <config.h>
+#include <linux/linkage.h>
-.globl lowlevel_init
-lowlevel_init:
+ENTRY(lowlevel_init)
mov pc, lr
+ENDPROC(lowlevel_init)
.align 5
-.globl reset_cpu
-reset_cpu:
+ENTRY(reset_cpu)
ldr r0, =CFG_PRCMU_BASE
ldr r1, =0x1
str r1, [r0, #0x228]
_loop_forever:
b _loop_forever
+ENDPROC(reset_cpu)
diff --git a/arch/arm/cpu/ixp/npe/npe.c b/arch/arm/cpu/ixp/npe/npe.c
index f0e02bf7d9..1fe3a95eaf 100644
--- a/arch/arm/cpu/ixp/npe/npe.c
+++ b/arch/arm/cpu/ixp/npe/npe.c
@@ -518,7 +518,7 @@ static void npe_halt(struct eth_device *dev)
}
-static int npe_send(struct eth_device *dev, volatile void *packet, int len)
+static int npe_send(struct eth_device *dev, void *packet, int len)
{
struct npe *p_npe = (struct npe *)dev->priv;
u8 *dest;
diff --git a/arch/arm/dts/tegra20.dtsi b/arch/arm/dts/tegra20.dtsi
index d5ca02c5f5..f95be58135 100644
--- a/arch/arm/dts/tegra20.dtsi
+++ b/arch/arm/dts/tegra20.dtsi
@@ -193,4 +193,15 @@
clocks = <&tegra_car 59>; /* PERIPH_ID_USB3 */
};
+ emc@7000f400 {
+ #address-cells = < 1 >;
+ #size-cells = < 0 >;
+ compatible = "nvidia,tegra20-emc";
+ reg = <0x7000f400 0x200>;
+ };
+
+ kbc@7000e200 {
+ compatible = "nvidia,tegra20-kbc";
+ reg = <0x7000e200 0x0078>;
+ };
};
diff --git a/arch/arm/include/asm/arch b/arch/arm/include/asm/arch
new file mode 120000
index 0000000000..802cf12ac7
--- /dev/null
+++ b/arch/arm/include/asm/arch
@@ -0,0 +1 @@
+arch-rda \ No newline at end of file
diff --git a/arch/arm/include/asm/arch-am33xx/mmc_host_def.h b/arch/arm/include/asm/arch-am33xx/mmc_host_def.h
index 943526b94a..26cc300e70 100644
--- a/arch/arm/include/asm/arch-am33xx/mmc_host_def.h
+++ b/arch/arm/include/asm/arch-am33xx/mmc_host_def.h
@@ -159,6 +159,6 @@ typedef struct hsmmc {
#define mmc_reg_out(addr, mask, val)\
writel((readl(addr) & (~(mask))) | ((val) & (mask)), (addr))
-int omap_mmc_init(int dev_index);
+int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max);
#endif /* MMC_HOST_DEF_H */
diff --git a/arch/arm/include/asm/arch-exynos/clk.h b/arch/arm/include/asm/arch-exynos/clk.h
index ff0f6415d8..637fb4bd14 100644
--- a/arch/arm/include/asm/arch-exynos/clk.h
+++ b/arch/arm/include/asm/arch-exynos/clk.h
@@ -33,5 +33,8 @@ unsigned long get_arm_clk(void);
unsigned long get_pwm_clk(void);
unsigned long get_uart_clk(int dev_index);
void set_mmc_clk(int dev_index, unsigned int div);
+unsigned long get_lcd_clk(void);
+void set_lcd_clk(void);
+void set_mipi_clk(void);
#endif
diff --git a/arch/arm/include/asm/arch-exynos/cpu.h b/arch/arm/include/asm/arch-exynos/cpu.h
index 89f2c2e3e9..ac4ddc7354 100644
--- a/arch/arm/include/asm/arch-exynos/cpu.h
+++ b/arch/arm/include/asm/arch-exynos/cpu.h
@@ -29,6 +29,7 @@
/* EXYNOS4 */
#define EXYNOS4_GPIO_PART3_BASE 0x03860000
#define EXYNOS4_PRO_ID 0x10000000
+#define EXYNOS4_SYSREG_BASE 0x10010000
#define EXYNOS4_POWER_BASE 0x10020000
#define EXYNOS4_SWRESET 0x10020400
#define EXYNOS4_CLOCK_BASE 0x10030000
@@ -40,6 +41,7 @@
#define EXYNOS4_GPIO_PART2_BASE 0x11000000
#define EXYNOS4_GPIO_PART1_BASE 0x11400000
#define EXYNOS4_FIMD_BASE 0x11C00000
+#define EXYNOS4_MIPI_DSIM_BASE 0x11C80000
#define EXYNOS4_USBOTG_BASE 0x12480000
#define EXYNOS4_MMC_BASE 0x12510000
#define EXYNOS4_SROMC_BASE 0x12570000
@@ -65,6 +67,7 @@
#define EXYNOS5_GPIO_PART3_BASE 0x10D10000
#define EXYNOS5_DMC_CTRL_BASE 0x10DD0000
#define EXYNOS5_GPIO_PART1_BASE 0x11400000
+#define EXYNOS5_MIPI_DSIM_BASE 0x11D00000
#define EXYNOS5_MMC_BASE 0x12200000
#define EXYNOS5_SROMC_BASE 0x12250000
#define EXYNOS5_USBOTG_BASE 0x12480000
@@ -127,7 +130,9 @@ static inline unsigned int samsung_get_base_##device(void) \
SAMSUNG_BASE(adc, ADC_BASE)
SAMSUNG_BASE(clock, CLOCK_BASE)
+SAMSUNG_BASE(sysreg, SYSREG_BASE)
SAMSUNG_BASE(fimd, FIMD_BASE)
+SAMSUNG_BASE(mipi_dsim, MIPI_DSIM_BASE)
SAMSUNG_BASE(gpio_part1, GPIO_PART1_BASE)
SAMSUNG_BASE(gpio_part2, GPIO_PART2_BASE)
SAMSUNG_BASE(gpio_part3, GPIO_PART3_BASE)
diff --git a/arch/arm/include/asm/arch-exynos/dsim.h b/arch/arm/include/asm/arch-exynos/dsim.h
new file mode 100644
index 0000000000..e148aca2e8
--- /dev/null
+++ b/arch/arm/include/asm/arch-exynos/dsim.h
@@ -0,0 +1,181 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __ASM_ARM_ARCH_DSIM_H_
+#define __ASM_ARM_ARCH_DSIM_H_
+
+#ifndef __ASSEMBLY__
+
+struct exynos_mipi_dsim {
+ unsigned int status;
+ unsigned int swrst;
+ unsigned int clkctrl;
+ unsigned int timeout;
+ unsigned int config;
+ unsigned int escmode;
+ unsigned int mdresol;
+ unsigned int mvporch;
+ unsigned int mhporch;
+ unsigned int msync;
+ unsigned int sdresol;
+ unsigned int intsrc;
+ unsigned int intmsk;
+ unsigned int pkthdr;
+ unsigned int payload;
+ unsigned int rxfifo;
+ unsigned int fifothld;
+ unsigned int fifoctrl;
+ unsigned int memacchr;
+ unsigned int pllctrl;
+ unsigned int plltmr;
+ unsigned int phyacchr;
+ unsigned int phyacchr1;
+};
+
+#endif /* __ASSEMBLY__ */
+
+/*
+ * Bit Definitions
+ */
+/* DSIM_STATUS */
+#define DSIM_STOP_STATE_DAT(x) (((x) & 0xf) << 0)
+#define DSIM_STOP_STATE_CLK (1 << 8)
+#define DSIM_TX_READY_HS_CLK (1 << 10)
+#define DSIM_PLL_STABLE (1 << 31)
+
+/* DSIM_SWRST */
+#define DSIM_FUNCRST (1 << 16)
+#define DSIM_SWRST (1 << 0)
+
+/* EXYNOS_DSIM_TIMEOUT */
+#define DSIM_LPDR_TOUT_SHIFT (0)
+#define DSIM_BTA_TOUT_SHIFT (16)
+
+/* EXYNOS_DSIM_CLKCTRL */
+#define DSIM_LANE_ESC_CLKEN_SHIFT (19)
+#define DSIM_BYTE_CLKEN_SHIFT (24)
+#define DSIM_BYTE_CLK_SRC_SHIFT (25)
+#define DSIM_PLL_BYPASS_SHIFT (27)
+#define DSIM_ESC_CLKEN_SHIFT (28)
+#define DSIM_TX_REQUEST_HSCLK_SHIFT (31)
+#define DSIM_LANE_ESC_CLKEN(x) (((x) & 0x1f) << \
+ DSIM_LANE_ESC_CLKEN_SHIFT)
+#define DSIM_BYTE_CLK_ENABLE (1 << DSIM_BYTE_CLKEN_SHIFT)
+#define DSIM_BYTE_CLK_DISABLE (0 << DSIM_BYTE_CLKEN_SHIFT)
+#define DSIM_PLL_BYPASS_EXTERNAL (1 << DSIM_PLL_BYPASS_SHIFT)
+#define DSIM_ESC_CLKEN_ENABLE (1 << DSIM_ESC_CLKEN_SHIFT)
+#define DSIM_ESC_CLKEN_DISABLE (0 << DSIM_ESC_CLKEN_SHIFT)
+
+/* EXYNOS_DSIM_CONFIG */
+#define DSIM_NUM_OF_DATALANE_SHIFT (5)
+#define DSIM_SUBPIX_SHIFT (8)
+#define DSIM_MAINPIX_SHIFT (12)
+#define DSIM_SUBVC_SHIFT (16)
+#define DSIM_MAINVC_SHIFT (18)
+#define DSIM_HSA_MODE_SHIFT (20)
+#define DSIM_HBP_MODE_SHIFT (21)
+#define DSIM_HFP_MODE_SHIFT (22)
+#define DSIM_HSE_MODE_SHIFT (23)
+#define DSIM_AUTO_MODE_SHIFT (24)
+#define DSIM_VIDEO_MODE_SHIFT (25)
+#define DSIM_BURST_MODE_SHIFT (26)
+#define DSIM_EOT_PACKET_SHIFT (28)
+#define DSIM_AUTO_FLUSH_SHIFT (29)
+#define DSIM_LANE_ENx(x) (((x) & 0x1f) << 0)
+
+#define DSIM_NUM_OF_DATA_LANE(x) ((x) << DSIM_NUM_OF_DATALANE_SHIFT)
+
+/* EXYNOS_DSIM_ESCMODE */
+#define DSIM_TX_LPDT_SHIFT (6)
+#define DSIM_CMD_LPDT_SHIFT (7)
+#define DSIM_TX_LPDT_LP (1 << DSIM_TX_LPDT_SHIFT)
+#define DSIM_CMD_LPDT_LP (1 << DSIM_CMD_LPDT_SHIFT)
+#define DSIM_STOP_STATE_CNT_SHIFT (21)
+#define DSIM_FORCE_STOP_STATE_SHIFT (20)
+
+/* EXYNOS_DSIM_MDRESOL */
+#define DSIM_MAIN_STAND_BY (1 << 31)
+#define DSIM_MAIN_VRESOL(x) (((x) & 0x7ff) << 16)
+#define DSIM_MAIN_HRESOL(x) (((x) & 0X7ff) << 0)
+
+/* EXYNOS_DSIM_MVPORCH */
+#define DSIM_CMD_ALLOW_SHIFT (28)
+#define DSIM_STABLE_VFP_SHIFT (16)
+#define DSIM_MAIN_VBP_SHIFT (0)
+#define DSIM_CMD_ALLOW_MASK (0xf << DSIM_CMD_ALLOW_SHIFT)
+#define DSIM_STABLE_VFP_MASK (0x7ff << DSIM_STABLE_VFP_SHIFT)
+#define DSIM_MAIN_VBP_MASK (0x7ff << DSIM_MAIN_VBP_SHIFT)
+
+/* EXYNOS_DSIM_MHPORCH */
+#define DSIM_MAIN_HFP_SHIFT (16)
+#define DSIM_MAIN_HBP_SHIFT (0)
+#define DSIM_MAIN_HFP_MASK ((0xffff) << DSIM_MAIN_HFP_SHIFT)
+#define DSIM_MAIN_HBP_MASK ((0xffff) << DSIM_MAIN_HBP_SHIFT)
+
+/* EXYNOS_DSIM_MSYNC */
+#define DSIM_MAIN_VSA_SHIFT (22)
+#define DSIM_MAIN_HSA_SHIFT (0)
+#define DSIM_MAIN_VSA_MASK ((0x3ff) << DSIM_MAIN_VSA_SHIFT)
+#define DSIM_MAIN_HSA_MASK ((0xffff) << DSIM_MAIN_HSA_SHIFT)
+
+/* EXYNOS_DSIM_SDRESOL */
+#define DSIM_SUB_STANDY_SHIFT (31)
+#define DSIM_SUB_VRESOL_SHIFT (16)
+#define DSIM_SUB_HRESOL_SHIFT (0)
+#define DSIM_SUB_STANDY_MASK ((0x1) << DSIM_SUB_STANDY_SHIFT)
+#define DSIM_SUB_VRESOL_MASK ((0x7ff) << DSIM_SUB_VRESOL_SHIFT)
+#define DSIM_SUB_HRESOL_MASK ((0x7ff) << DSIM_SUB_HRESOL_SHIFT)
+
+/* EXYNOS_DSIM_INTSRC */
+#define INTSRC_FRAME_DONE (1 << 24)
+#define INTSRC_PLL_STABLE (1 << 31)
+#define INTSRC_SWRST_RELEASE (1 << 30)
+
+/* EXYNOS_DSIM_INTMSK */
+#define INTMSK_FRAME_DONE (1 << 24)
+
+/* EXYNOS_DSIM_FIFOCTRL */
+#define SFR_HEADER_EMPTY (1 << 22)
+
+/* EXYNOS_DSIM_PKTHDR */
+#define DSIM_PKTHDR_DI(x) (((x) & 0x3f) << 0)
+#define DSIM_PKTHDR_DAT0(x) ((x) << 8)
+#define DSIM_PKTHDR_DAT1(x) ((x) << 16)
+
+/* EXYNOS_DSIM_PHYACCHR */
+#define DSIM_AFC_CTL(x) (((x) & 0x7) << 5)
+#define DSIM_AFC_CTL_SHIFT (5)
+#define DSIM_AFC_EN (1 << 14)
+
+/* EXYNOS_DSIM_PHYACCHR1 */
+#define DSIM_DPDN_SWAP_DATA_SHIFT (0)
+
+/* EXYNOS_DSIM_PLLCTRL */
+#define DSIM_SCALER_SHIFT (1)
+#define DSIM_MAIN_SHIFT (4)
+#define DSIM_PREDIV_SHIFT (13)
+#define DSIM_PRECTRL_SHIFT (20)
+#define DSIM_PLL_EN_SHIFT (23)
+#define DSIM_FREQ_BAND_SHIFT (24)
+#define DSIM_ZEROCTRL_SHIFT (28)
+
+#endif
diff --git a/arch/arm/include/asm/arch-exynos/ehci-s5p.h b/arch/arm/include/asm/arch-exynos/ehci-s5p.h
new file mode 100644
index 0000000000..68feb85ede
--- /dev/null
+++ b/arch/arm/include/asm/arch-exynos/ehci-s5p.h
@@ -0,0 +1,66 @@
+/*
+ * SAMSUNG S5P USB HOST EHCI Controller
+ *
+ * Copyright (C) 2012 Samsung Electronics Co.Ltd
+ * Vivek Gautam <gautam.vivek@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#ifndef __ASM_ARM_ARCH_EXYNOS5_EHCI_S5P_H__
+#define __ASM_ARM_ARCH_EXYNOS5_EHCI_S5P_H__
+
+#define CLK_24MHZ 5
+
+#define HOST_CTRL0_PHYSWRSTALL (1 << 31)
+#define HOST_CTRL0_COMMONON_N (1 << 9)
+#define HOST_CTRL0_SIDDQ (1 << 6)
+#define HOST_CTRL0_FORCESLEEP (1 << 5)
+#define HOST_CTRL0_FORCESUSPEND (1 << 4)
+#define HOST_CTRL0_WORDINTERFACE (1 << 3)
+#define HOST_CTRL0_UTMISWRST (1 << 2)
+#define HOST_CTRL0_LINKSWRST (1 << 1)
+#define HOST_CTRL0_PHYSWRST (1 << 0)
+
+#define HOST_CTRL0_FSEL_MASK (7 << 16)
+
+#define EHCICTRL_ENAINCRXALIGN (1 << 29)
+#define EHCICTRL_ENAINCR4 (1 << 28)
+#define EHCICTRL_ENAINCR8 (1 << 27)
+#define EHCICTRL_ENAINCR16 (1 << 26)
+
+/* Register map for PHY control */
+struct s5p_usb_phy {
+ unsigned int usbphyctrl0;
+ unsigned int usbphytune0;
+ unsigned int reserved1[2];
+ unsigned int hsicphyctrl1;
+ unsigned int hsicphytune1;
+ unsigned int reserved2[2];
+ unsigned int hsicphyctrl2;
+ unsigned int hsicphytune2;
+ unsigned int reserved3[2];
+ unsigned int ehcictrl;
+ unsigned int ohcictrl;
+ unsigned int usbotgsys;
+ unsigned int reserved4;
+ unsigned int usbotgtune;
+};
+
+/* Switch on the VBUS power. */
+int board_usb_vbus_init(void);
+
+#endif /* __ASM_ARM_ARCH_EXYNOS5_EHCI_S5P_H__ */
diff --git a/arch/arm/include/asm/arch-exynos/fb.h b/arch/arm/include/asm/arch-exynos/fb.h
new file mode 100644
index 0000000000..b10b0da07e
--- /dev/null
+++ b/arch/arm/include/asm/arch-exynos/fb.h
@@ -0,0 +1,446 @@
+/*
+ * (C) Copyright 2012 Samsung Electronics
+ * Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * aint with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#ifndef __ASM_ARM_ARCH_FB_H_
+#define __ASM_ARM_ARCH_FB_H_
+
+#ifndef __ASSEMBLY__
+struct exynos4_fb {
+ unsigned int vidcon0;
+ unsigned int vidcon1;
+ unsigned int vidcon2;
+ unsigned int vidcon3;
+ unsigned int vidtcon0;
+ unsigned int vidtcon1;
+ unsigned int vidtcon2;
+ unsigned int vidtcon3;
+ unsigned int wincon0;
+ unsigned int wincon1;
+ unsigned int wincon2;
+ unsigned int wincon3;
+ unsigned int wincon4;
+
+ unsigned int winshmap;
+ unsigned int res1;
+
+ unsigned int winchmap2;
+ unsigned int vidosd0a;
+ unsigned int vidosd0b;
+ unsigned int vidosd0c;
+ unsigned int res2;
+
+ unsigned int vidosd1a;
+ unsigned int vidosd1b;
+ unsigned int vidosd1c;
+ unsigned int vidosd1d;
+
+ unsigned int vidosd2a;
+ unsigned int vidosd2b;
+ unsigned int vidosd2c;
+ unsigned int vidosd2d;
+
+ unsigned int vidosd3a;
+ unsigned int vidosd3b;
+ unsigned int vidosd3c;
+ unsigned int res3;
+
+ unsigned int vidosd4a;
+ unsigned int vidosd4b;
+ unsigned int vidosd4c;
+ unsigned int res4[5];
+
+ unsigned int vidw00add0b0;
+ unsigned int vidw00add0b1;
+ unsigned int vidw01add0b0;
+ unsigned int vidw01add0b1;
+
+ unsigned int vidw02add0b0;
+ unsigned int vidw02add0b1;
+ unsigned int vidw03add0b0;
+ unsigned int vidw03add0b1;
+ unsigned int vidw04add0b0;
+ unsigned int vidw04add0b1;
+ unsigned int res5[2];
+
+ unsigned int vidw00add1b0;
+ unsigned int vidw00add1b1;
+ unsigned int vidw01add1b0;
+ unsigned int vidw01add1b1;
+
+ unsigned int vidw02add1b0;
+ unsigned int vidw02add1b1;
+ unsigned int vidw03add1b0;
+ unsigned int vidw03add1b1;
+
+ unsigned int vidw04add1b0;
+ unsigned int vidw04add1b1;
+ unsigned int res7[2];
+
+ unsigned int vidw00add2;
+ unsigned int vidw01add2;
+ unsigned int vidw02add2;
+ unsigned int vidw03add2;
+ unsigned int vidw04add2;
+ unsigned int res8[7];
+
+ unsigned int vidintcon0;
+ unsigned int vidintcon1;
+ unsigned int res9[1];
+
+ unsigned int w1keycon0;
+ unsigned int w1keycon1;
+ unsigned int w2keycon0;
+ unsigned int w2keycon1;
+ unsigned int w3keycon0;
+ unsigned int w3keycon1;
+ unsigned int w4keycon0;
+ unsigned int w4keycon1;
+
+ unsigned int w1keyalpha;
+ unsigned int w2keyalpha;
+ unsigned int w3keyalpha;
+ unsigned int w4keyalpha;
+
+ unsigned int dithmode;
+ unsigned int res10[2];
+
+ unsigned int win0map;
+ unsigned int win1map;
+ unsigned int win2map;
+ unsigned int win3map;
+ unsigned int win4map;
+ unsigned int res11[1];
+
+ unsigned int wpalcon_h;
+ unsigned int wpalcon_l;
+
+ unsigned int trigcon;
+ unsigned int res12[2];
+
+ unsigned int i80ifcona0;
+ unsigned int i80ifcona1;
+ unsigned int i80ifconb0;
+ unsigned int i80ifconb1;
+
+ unsigned int colorgaincon;
+ unsigned int res13[2];
+
+ unsigned int ldi_cmdcon0;
+ unsigned int ldi_cmdcon1;
+ unsigned int res14[1];
+
+ /* To be updated */
+
+ unsigned char res15[156];
+ unsigned int dualrgb;
+};
+#endif
+
+/*
+ * Register offsets
+*/
+#define EXYNOS_WINCON(x) (x * 0x04)
+#define EXYNOS_VIDOSD(x) (x * 0x10)
+#define EXYNOS_BUFFER_OFFSET(x) (x * 0x08)
+#define EXYNOS_BUFFER_SIZE(x) (x * 0x04)
+
+/*
+ * Bit Definitions
+*/
+
+/* VIDCON0 */
+#define EXYNOS_VIDCON0_DSI_DISABLE (0 << 30)
+#define EXYNOS_VIDCON0_DSI_ENABLE (1 << 30)
+#define EXYNOS_VIDCON0_SCAN_PROGRESSIVE (0 << 29)
+#define EXYNOS_VIDCON0_SCAN_INTERLACE (1 << 29)
+#define EXYNOS_VIDCON0_SCAN_MASK (1 << 29)
+#define EXYNOS_VIDCON0_VIDOUT_RGB (0 << 26)
+#define EXYNOS_VIDCON0_VIDOUT_ITU (1 << 26)
+#define EXYNOS_VIDCON0_VIDOUT_I80LDI0 (2 << 26)
+#define EXYNOS_VIDCON0_VIDOUT_I80LDI1 (3 << 26)
+#define EXYNOS_VIDCON0_VIDOUT_WB_RGB (4 << 26)
+#define EXYNOS_VIDCON0_VIDOUT_WB_I80LDI0 (6 << 26)
+#define EXYNOS_VIDCON0_VIDOUT_WB_I80LDI1 (7 << 26)
+#define EXYNOS_VIDCON0_VIDOUT_MASK (7 << 26)
+#define EXYNOS_VIDCON0_PNRMODE_RGB_P (0 << 17)
+#define EXYNOS_VIDCON0_PNRMODE_BGR_P (1 << 17)
+#define EXYNOS_VIDCON0_PNRMODE_RGB_S (2 << 17)
+#define EXYNOS_VIDCON0_PNRMODE_BGR_S (3 << 17)
+#define EXYNOS_VIDCON0_PNRMODE_MASK (3 << 17)
+#define EXYNOS_VIDCON0_PNRMODE_SHIFT (17)
+#define EXYNOS_VIDCON0_CLKVALUP_ALWAYS (0 << 16)
+#define EXYNOS_VIDCON0_CLKVALUP_START_FRAME (1 << 16)
+#define EXYNOS_VIDCON0_CLKVALUP_MASK (1 << 16)
+#define EXYNOS_VIDCON0_CLKVAL_F(x) (((x) & 0xff) << 6)
+#define EXYNOS_VIDCON0_VCLKEN_NORMAL (0 << 5)
+#define EXYNOS_VIDCON0_VCLKEN_FREERUN (1 << 5)
+#define EXYNOS_VIDCON0_VCLKEN_MASK (1 << 5)
+#define EXYNOS_VIDCON0_CLKDIR_DIRECTED (0 << 4)
+#define EXYNOS_VIDCON0_CLKDIR_DIVIDED (1 << 4)
+#define EXYNOS_VIDCON0_CLKDIR_MASK (1 << 4)
+#define EXYNOS_VIDCON0_CLKSEL_HCLK (0 << 2)
+#define EXYNOS_VIDCON0_CLKSEL_SCLK (1 << 2)
+#define EXYNOS_VIDCON0_CLKSEL_MASK (1 << 2)
+#define EXYNOS_VIDCON0_ENVID_ENABLE (1 << 1)
+#define EXYNOS_VIDCON0_ENVID_DISABLE (0 << 1)
+#define EXYNOS_VIDCON0_ENVID_F_ENABLE (1 << 0)
+#define EXYNOS_VIDCON0_ENVID_F_DISABLE (0 << 0)
+
+/* VIDCON1 */
+#define EXYNOS_VIDCON1_IVCLK_FALLING_EDGE (0 << 7)
+#define EXYNOS_VIDCON1_IVCLK_RISING_EDGE (1 << 7)
+#define EXYNOS_VIDCON1_IHSYNC_NORMAL (0 << 6)
+#define EXYNOS_VIDCON1_IHSYNC_INVERT (1 << 6)
+#define EXYNOS_VIDCON1_IVSYNC_NORMAL (0 << 5)
+#define EXYNOS_VIDCON1_IVSYNC_INVERT (1 << 5)
+#define EXYNOS_VIDCON1_IVDEN_NORMAL (0 << 4)
+#define EXYNOS_VIDCON1_IVDEN_INVERT (1 << 4)
+
+/* VIDCON2 */
+#define EXYNOS_VIDCON2_EN601_DISABLE (0 << 23)
+#define EXYNOS_VIDCON2_EN601_ENABLE (1 << 23)
+#define EXYNOS_VIDCON2_EN601_MASK (1 << 23)
+#define EXYNOS_VIDCON2_WB_DISABLE (0 << 15)
+#define EXYNOS_VIDCON2_WB_ENABLE (1 << 15)
+#define EXYNOS_VIDCON2_WB_MASK (1 << 15)
+#define EXYNOS_VIDCON2_TVFORMATSEL_HW (0 << 14)
+#define EXYNOS_VIDCON2_TVFORMATSEL_SW (1 << 14)
+#define EXYNOS_VIDCON2_TVFORMATSEL_MASK (1 << 14)
+#define EXYNOS_VIDCON2_TVFORMATSEL_YUV422 (1 << 12)
+#define EXYNOS_VIDCON2_TVFORMATSEL_YUV444 (2 << 12)
+#define EXYNOS_VIDCON2_TVFORMATSEL_YUV_MASK (3 << 12)
+#define EXYNOS_VIDCON2_ORGYUV_YCBCR (0 << 8)
+#define EXYNOS_VIDCON2_ORGYUV_CBCRY (1 << 8)
+#define EXYNOS_VIDCON2_ORGYUV_MASK (1 << 8)
+#define EXYNOS_VIDCON2_YUVORD_CBCR (0 << 7)
+#define EXYNOS_VIDCON2_YUVORD_CRCB (1 << 7)
+#define EXYNOS_VIDCON2_YUVORD_MASK (1 << 7)
+
+/* PRTCON */
+#define EXYNOS_PRTCON_UPDATABLE (0 << 11)
+#define EXYNOS_PRTCON_PROTECT (1 << 11)
+
+/* VIDTCON0 */
+#define EXYNOS_VIDTCON0_VBPDE(x) (((x) & 0xff) << 24)
+#define EXYNOS_VIDTCON0_VBPD(x) (((x) & 0xff) << 16)
+#define EXYNOS_VIDTCON0_VFPD(x) (((x) & 0xff) << 8)
+#define EXYNOS_VIDTCON0_VSPW(x) (((x) & 0xff) << 0)
+
+/* VIDTCON1 */
+#define EXYNOS_VIDTCON1_VFPDE(x) (((x) & 0xff) << 24)
+#define EXYNOS_VIDTCON1_HBPD(x) (((x) & 0xff) << 16)
+#define EXYNOS_VIDTCON1_HFPD(x) (((x) & 0xff) << 8)
+#define EXYNOS_VIDTCON1_HSPW(x) (((x) & 0xff) << 0)
+
+/* VIDTCON2 */
+#define EXYNOS_VIDTCON2_LINEVAL(x) (((x) & 0x7ff) << 11)
+#define EXYNOS_VIDTCON2_HOZVAL(x) (((x) & 0x7ff) << 0)
+
+/* Window 0~4 Control - WINCONx */
+#define EXYNOS_WINCON_DATAPATH_DMA (0 << 22)
+#define EXYNOS_WINCON_DATAPATH_LOCAL (1 << 22)
+#define EXYNOS_WINCON_DATAPATH_MASK (1 << 22)
+#define EXYNOS_WINCON_BUFSEL_0 (0 << 20)
+#define EXYNOS_WINCON_BUFSEL_1 (1 << 20)
+#define EXYNOS_WINCON_BUFSEL_MASK (1 << 20)
+#define EXYNOS_WINCON_BUFSEL_SHIFT (20)
+#define EXYNOS_WINCON_BUFAUTO_DISABLE (0 << 19)
+#define EXYNOS_WINCON_BUFAUTO_ENABLE (1 << 19)
+#define EXYNOS_WINCON_BUFAUTO_MASK (1 << 19)
+#define EXYNOS_WINCON_BITSWP_DISABLE (0 << 18)
+#define EXYNOS_WINCON_BITSWP_ENABLE (1 << 18)
+#define EXYNOS_WINCON_BITSWP_SHIFT (18)
+#define EXYNOS_WINCON_BYTESWP_DISABLE (0 << 17)
+#define EXYNOS_WINCON_BYTESWP_ENABLE (1 << 17)
+#define EXYNOS_WINCON_BYTESWP_SHIFT (17)
+#define EXYNOS_WINCON_HAWSWP_DISABLE (0 << 16)
+#define EXYNOS_WINCON_HAWSWP_ENABLE (1 << 16)
+#define EXYNOS_WINCON_HAWSWP_SHIFT (16)
+#define EXYNOS_WINCON_WSWP_DISABLE (0 << 15)
+#define EXYNOS_WINCON_WSWP_ENABLE (1 << 15)
+#define EXYNOS_WINCON_WSWP_SHIFT (15)
+#define EXYNOS_WINCON_INRGB_RGB (0 << 13)
+#define EXYNOS_WINCON_INRGB_YUV (1 << 13)
+#define EXYNOS_WINCON_INRGB_MASK (1 << 13)
+#define EXYNOS_WINCON_BURSTLEN_16WORD (0 << 9)
+#define EXYNOS_WINCON_BURSTLEN_8WORD (1 << 9)
+#define EXYNOS_WINCON_BURSTLEN_4WORD (2 << 9)
+#define EXYNOS_WINCON_BURSTLEN_MASK (3 << 9)
+#define EXYNOS_WINCON_ALPHA_MULTI_DISABLE (0 << 7)
+#define EXYNOS_WINCON_ALPHA_MULTI_ENABLE (1 << 7)
+#define EXYNOS_WINCON_BLD_PLANE (0 << 6)
+#define EXYNOS_WINCON_BLD_PIXEL (1 << 6)
+#define EXYNOS_WINCON_BLD_MASK (1 << 6)
+#define EXYNOS_WINCON_BPPMODE_1BPP (0 << 2)
+#define EXYNOS_WINCON_BPPMODE_2BPP (1 << 2)
+#define EXYNOS_WINCON_BPPMODE_4BPP (2 << 2)
+#define EXYNOS_WINCON_BPPMODE_8BPP_PAL (3 << 2)
+#define EXYNOS_WINCON_BPPMODE_8BPP (4 << 2)
+#define EXYNOS_WINCON_BPPMODE_16BPP_565 (5 << 2)
+#define EXYNOS_WINCON_BPPMODE_16BPP_A555 (6 << 2)
+#define EXYNOS_WINCON_BPPMODE_18BPP_666 (8 << 2)
+#define EXYNOS_WINCON_BPPMODE_18BPP_A665 (9 << 2)
+#define EXYNOS_WINCON_BPPMODE_24BPP_888 (0xb << 2)
+#define EXYNOS_WINCON_BPPMODE_24BPP_A887 (0xc << 2)
+#define EXYNOS_WINCON_BPPMODE_32BPP (0xd << 2)
+#define EXYNOS_WINCON_BPPMODE_16BPP_A444 (0xe << 2)
+#define EXYNOS_WINCON_BPPMODE_15BPP_555 (0xf << 2)
+#define EXYNOS_WINCON_BPPMODE_MASK (0xf << 2)
+#define EXYNOS_WINCON_BPPMODE_SHIFT (2)
+#define EXYNOS_WINCON_ALPHA0_SEL (0 << 1)
+#define EXYNOS_WINCON_ALPHA1_SEL (1 << 1)
+#define EXYNOS_WINCON_ALPHA_SEL_MASK (1 << 1)
+#define EXYNOS_WINCON_ENWIN_DISABLE (0 << 0)
+#define EXYNOS_WINCON_ENWIN_ENABLE (1 << 0)
+
+/* WINCON1 special */
+#define EXYNOS_WINCON1_VP_DISABLE (0 << 24)
+#define EXYNOS_WINCON1_VP_ENABLE (1 << 24)
+#define EXYNOS_WINCON1_LOCALSEL_FIMC1 (0 << 23)
+#define EXYNOS_WINCON1_LOCALSEL_VP (1 << 23)
+#define EXYNOS_WINCON1_LOCALSEL_MASK (1 << 23)
+
+/* WINSHMAP */
+#define EXYNOS_WINSHMAP_PROTECT(x) (((x) & 0x1f) << 10)
+#define EXYNOS_WINSHMAP_CH_ENABLE(x) (1 << (x))
+#define EXYNOS_WINSHMAP_CH_DISABLE(x) (1 << (x))
+#define EXYNOS_WINSHMAP_LOCAL_ENABLE(x) (0x20 << (x))
+#define EXYNOS_WINSHMAP_LOCAL_DISABLE(x) (0x20 << (x))
+
+/* VIDOSDxA, VIDOSDxB */
+#define EXYNOS_VIDOSD_LEFT_X(x) (((x) & 0x7ff) << 11)
+#define EXYNOS_VIDOSD_TOP_Y(x) (((x) & 0x7ff) << 0)
+#define EXYNOS_VIDOSD_RIGHT_X(x) (((x) & 0x7ff) << 11)
+#define EXYNOS_VIDOSD_BOTTOM_Y(x) (((x) & 0x7ff) << 0)
+
+/* VIDOSD0C, VIDOSDxD */
+#define EXYNOS_VIDOSD_SIZE(x) (((x) & 0xffffff) << 0)
+
+/* VIDOSDxC (1~4) */
+#define EXYNOS_VIDOSD_ALPHA0_R(x) (((x) & 0xf) << 20)
+#define EXYNOS_VIDOSD_ALPHA0_G(x) (((x) & 0xf) << 16)
+#define EXYNOS_VIDOSD_ALPHA0_B(x) (((x) & 0xf) << 12)
+#define EXYNOS_VIDOSD_ALPHA1_R(x) (((x) & 0xf) << 8)
+#define EXYNOS_VIDOSD_ALPHA1_G(x) (((x) & 0xf) << 4)
+#define EXYNOS_VIDOSD_ALPHA1_B(x) (((x) & 0xf) << 0)
+#define EXYNOS_VIDOSD_ALPHA0_SHIFT (12)
+#define EXYNOS_VIDOSD_ALPHA1_SHIFT (0)
+
+/* Start Address */
+#define EXYNOS_VIDADDR_START_VBANK(x) (((x) & 0xff) << 24)
+#define EXYNOS_VIDADDR_START_VBASEU(x) (((x) & 0xffffff) << 0)
+
+/* End Address */
+#define EXYNOS_VIDADDR_END_VBASEL(x) (((x) & 0xffffff) << 0)
+
+/* Buffer Size */
+#define EXYNOS_VIDADDR_OFFSIZE(x) (((x) & 0x1fff) << 13)
+#define EXYNOS_VIDADDR_PAGEWIDTH(x) (((x) & 0x1fff) << 0)
+
+/* WIN Color Map */
+#define EXYNOS_WINMAP_COLOR(x) ((x) & 0xffffff)
+
+/* VIDINTCON0 */
+#define EXYNOS_VIDINTCON0_SYSMAINCON_DISABLE (0 << 19)
+#define EXYNOS_VIDINTCON0_SYSMAINCON_ENABLE (1 << 19)
+#define EXYNOS_VIDINTCON0_SYSSUBCON_DISABLE (0 << 18)
+#define EXYNOS_VIDINTCON0_SYSSUBCON_ENABLE (1 << 18)
+#define EXYNOS_VIDINTCON0_SYSIFDONE_DISABLE (0 << 17)
+#define EXYNOS_VIDINTCON0_SYSIFDONE_ENABLE (1 << 17)
+#define EXYNOS_VIDINTCON0_FRAMESEL0_BACK (0 << 15)
+#define EXYNOS_VIDINTCON0_FRAMESEL0_VSYNC (1 << 15)
+#define EXYNOS_VIDINTCON0_FRAMESEL0_ACTIVE (2 << 15)
+#define EXYNOS_VIDINTCON0_FRAMESEL0_FRONT (3 << 15)
+#define EXYNOS_VIDINTCON0_FRAMESEL0_MASK (3 << 15)
+#define EXYNOS_VIDINTCON0_FRAMESEL1_NONE (0 << 13)
+#define EXYNOS_VIDINTCON0_FRAMESEL1_BACK (1 << 13)
+#define EXYNOS_VIDINTCON0_FRAMESEL1_VSYNC (2 << 13)
+#define EXYNOS_VIDINTCON0_FRAMESEL1_FRONT (3 << 13)
+#define EXYNOS_VIDINTCON0_INTFRMEN_DISABLE (0 << 12)
+#define EXYNOS_VIDINTCON0_INTFRMEN_ENABLE (1 << 12)
+#define EXYNOS_VIDINTCON0_FIFOSEL_WIN4 (1 << 11)
+#define EXYNOS_VIDINTCON0_FIFOSEL_WIN3 (1 << 10)
+#define EXYNOS_VIDINTCON0_FIFOSEL_WIN2 (1 << 9)
+#define EXYNOS_VIDINTCON0_FIFOSEL_WIN1 (1 << 6)
+#define EXYNOS_VIDINTCON0_FIFOSEL_WIN0 (1 << 5)
+#define EXYNOS_VIDINTCON0_FIFOSEL_ALL (0x73 << 5)
+#define EXYNOS_VIDINTCON0_FIFOSEL_MASK (0x73 << 5)
+#define EXYNOS_VIDINTCON0_FIFOLEVEL_25 (0 << 2)
+#define EXYNOS_VIDINTCON0_FIFOLEVEL_50 (1 << 2)
+#define EXYNOS_VIDINTCON0_FIFOLEVEL_75 (2 << 2)
+#define EXYNOS_VIDINTCON0_FIFOLEVEL_EMPTY (3 << 2)
+#define EXYNOS_VIDINTCON0_FIFOLEVEL_FULL (4 << 2)
+#define EXYNOS_VIDINTCON0_FIFOLEVEL_MASK (7 << 2)
+#define EXYNOS_VIDINTCON0_INTFIFO_DISABLE (0 << 1)
+#define EXYNOS_VIDINTCON0_INTFIFO_ENABLE (1 << 1)
+#define EXYNOS_VIDINTCON0_INT_DISABLE (0 << 0)
+#define EXYNOS_VIDINTCON0_INT_ENABLE (1 << 0)
+#define EXYNOS_VIDINTCON0_INT_MASK (1 << 0)
+
+/* VIDINTCON1 */
+#define EXYNOS_VIDINTCON1_INTVPPEND (1 << 5)
+#define EXYNOS_VIDINTCON1_INTI80PEND (1 << 2)
+#define EXYNOS_VIDINTCON1_INTFRMPEND (1 << 1)
+#define EXYNOS_VIDINTCON1_INTFIFOPEND (1 << 0)
+
+/* WINMAP */
+#define EXYNOS_WINMAP_ENABLE (1 << 24)
+
+/* WxKEYCON0 (1~4) */
+#define EXYNOS_KEYCON0_KEYBLEN_DISABLE (0 << 26)
+#define EXYNOS_KEYCON0_KEYBLEN_ENABLE (1 << 26)
+#define EXYNOS_KEYCON0_KEY_DISABLE (0 << 25)
+#define EXYNOS_KEYCON0_KEY_ENABLE (1 << 25)
+#define EXYNOS_KEYCON0_DIRCON_MATCH_FG (0 << 24)
+#define EXYNOS_KEYCON0_DIRCON_MATCH_BG (1 << 24)
+#define EXYNOS_KEYCON0_COMPKEY(x) (((x) & 0xffffff) << 0)
+
+/* WxKEYCON1 (1~4) */
+#define EXYNOS_KEYCON1_COLVAL(x) (((x) & 0xffffff) << 0)
+
+/* DUALRGB */
+#define EXYNOS_DUALRGB_BYPASS_SINGLE (0x00 << 0)
+#define EXYNOS_DUALRGB_BYPASS_DUAL (0x01 << 0)
+#define EXYNOS_DUALRGB_MIE_DUAL (0x10 << 0)
+#define EXYNOS_DUALRGB_MIE_SINGLE (0x11 << 0)
+#define EXYNOS_DUALRGB_LINESPLIT (0x0 << 2)
+#define EXYNOS_DUALRGB_FRAMESPLIT (0x1 << 2)
+#define EXYNOS_DUALRGB_SUB_CNT(x) ((x & 0xfff) << 4)
+#define EXYNOS_DUALRGB_VDEN_EN_DISABLE (0x0 << 16)
+#define EXYNOS_DUALRGB_VDEN_EN_ENABLE (0x1 << 16)
+#define EXYNOS_DUALRGB_MAIN_CNT(x) ((x & 0xfff) << 18)
+
+/* I80IFCONA0 and I80IFCONA1 */
+#define EXYNOS_LCD_CS_SETUP(x) (((x) & 0xf) << 16)
+#define EXYNOS_LCD_WR_SETUP(x) (((x) & 0xf) << 12)
+#define EXYNOS_LCD_WR_ACT(x) (((x) & 0xf) << 8)
+#define EXYNOS_LCD_WR_HOLD(x) (((x) & 0xf) << 4)
+#define EXYNOS_RSPOL_LOW (0 << 2)
+#define EXYNOS_RSPOL_HIGH (1 << 2)
+#define EXYNOS_I80IFEN_DISABLE (0 << 0)
+#define EXYNOS_I80IFEN_ENABLE (1 << 0)
+
+/* TRIGCON */
+#define EXYNOS_I80SOFT_TRIG_EN (1 << 0)
+#define EXYNOS_I80START_TRIG (1 << 1)
+#define EXYNOS_I80STATUS_TRIG_DONE (1 << 2)
+
+#endif /* _REGS_FB_H */
diff --git a/arch/arm/include/asm/arch-exynos/mipi_dsim.h b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
new file mode 100644
index 0000000000..ef6a3d1123
--- /dev/null
+++ b/arch/arm/include/asm/arch-exynos/mipi_dsim.h
@@ -0,0 +1,380 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _DSIM_H
+#define _DSIM_H
+
+#include <linux/list.h>
+#include <linux/fb.h>
+
+#define PANEL_NAME_SIZE (32)
+
+enum mipi_dsim_interface_type {
+ DSIM_COMMAND,
+ DSIM_VIDEO
+};
+
+enum mipi_dsim_virtual_ch_no {
+ DSIM_VIRTUAL_CH_0,
+ DSIM_VIRTUAL_CH_1,
+ DSIM_VIRTUAL_CH_2,
+ DSIM_VIRTUAL_CH_3
+};
+
+enum mipi_dsim_burst_mode_type {
+ DSIM_NON_BURST_SYNC_EVENT,
+ DSIM_BURST_SYNC_EVENT,
+ DSIM_NON_BURST_SYNC_PULSE,
+ DSIM_BURST,
+ DSIM_NON_VIDEO_MODE
+};
+
+enum mipi_dsim_no_of_data_lane {
+ DSIM_DATA_LANE_1,
+ DSIM_DATA_LANE_2,
+ DSIM_DATA_LANE_3,
+ DSIM_DATA_LANE_4
+};
+
+enum mipi_dsim_byte_clk_src {
+ DSIM_PLL_OUT_DIV8,
+ DSIM_EXT_CLK_DIV8,
+ DSIM_EXT_CLK_BYPASS
+};
+
+enum mipi_dsim_pixel_format {
+ DSIM_CMD_3BPP,
+ DSIM_CMD_8BPP,
+ DSIM_CMD_12BPP,
+ DSIM_CMD_16BPP,
+ DSIM_VID_16BPP_565,
+ DSIM_VID_18BPP_666PACKED,
+ DSIM_18BPP_666LOOSELYPACKED,
+ DSIM_24BPP_888
+};
+
+/* MIPI DSI Processor-to-Peripheral transaction types */
+enum {
+ MIPI_DSI_V_SYNC_START = 0x01,
+ MIPI_DSI_V_SYNC_END = 0x11,
+ MIPI_DSI_H_SYNC_START = 0x21,
+ MIPI_DSI_H_SYNC_END = 0x31,
+
+ MIPI_DSI_COLOR_MODE_OFF = 0x02,
+ MIPI_DSI_COLOR_MODE_ON = 0x12,
+ MIPI_DSI_SHUTDOWN_PERIPHERAL = 0x22,
+ MIPI_DSI_TURN_ON_PERIPHERAL = 0x32,
+
+ MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM = 0x03,
+ MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM = 0x13,
+ MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM = 0x23,
+
+ MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM = 0x04,
+ MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM = 0x14,
+ MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM = 0x24,
+
+ MIPI_DSI_DCS_SHORT_WRITE = 0x05,
+ MIPI_DSI_DCS_SHORT_WRITE_PARAM = 0x15,
+
+ MIPI_DSI_DCS_READ = 0x06,
+
+ MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE = 0x37,
+
+ MIPI_DSI_END_OF_TRANSMISSION = 0x08,
+
+ MIPI_DSI_NULL_PACKET = 0x09,
+ MIPI_DSI_BLANKING_PACKET = 0x19,
+ MIPI_DSI_GENERIC_LONG_WRITE = 0x29,
+ MIPI_DSI_DCS_LONG_WRITE = 0x39,
+
+ MIPI_DSI_LOOSELY_PACKED_PIXEL_STREAM_YCBCR20 = 0x0c,
+ MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR24 = 0x1c,
+ MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR16 = 0x2c,
+
+ MIPI_DSI_PACKED_PIXEL_STREAM_30 = 0x0d,
+ MIPI_DSI_PACKED_PIXEL_STREAM_36 = 0x1d,
+ MIPI_DSI_PACKED_PIXEL_STREAM_YCBCR12 = 0x3d,
+
+ MIPI_DSI_PACKED_PIXEL_STREAM_16 = 0x0e,
+ MIPI_DSI_PACKED_PIXEL_STREAM_18 = 0x1e,
+ MIPI_DSI_PIXEL_STREAM_3BYTE_18 = 0x2e,
+ MIPI_DSI_PACKED_PIXEL_STREAM_24 = 0x3e,
+};
+
+/*
+ * struct mipi_dsim_config - interface for configuring mipi-dsi controller.
+ *
+ * @auto_flush: enable or disable Auto flush of MD FIFO using VSYNC pulse.
+ * @eot_disable: enable or disable EoT packet in HS mode.
+ * @auto_vertical_cnt: specifies auto vertical count mode.
+ * in Video mode, the vertical line transition uses line counter
+ * configured by VSA, VBP, and Vertical resolution.
+ * If this bit is set to '1', the line counter does not use VSA and VBP
+ * registers.(in command mode, this variable is ignored)
+ * @hse: set horizontal sync event mode.
+ * In VSYNC pulse and Vporch area, MIPI DSI master transfers only HSYNC
+ * start packet to MIPI DSI slave at MIPI DSI spec1.1r02.
+ * this bit transfers HSYNC end packet in VSYNC pulse and Vporch area
+ * (in mommand mode, this variable is ignored)
+ * @hfp: specifies HFP disable mode.
+ * if this variable is set, DSI master ignores HFP area in VIDEO mode.
+ * (in command mode, this variable is ignored)
+ * @hbp: specifies HBP disable mode.
+ * if this variable is set, DSI master ignores HBP area in VIDEO mode.
+ * (in command mode, this variable is ignored)
+ * @hsa: specifies HSA disable mode.
+ * if this variable is set, DSI master ignores HSA area in VIDEO mode.
+ * (in command mode, this variable is ignored)
+ * @e_interface: specifies interface to be used.(CPU or RGB interface)
+ * @e_virtual_ch: specifies virtual channel number that main or
+ * sub diaplsy uses.
+ * @e_pixel_format: specifies pixel stream format for main or sub display.
+ * @e_burst_mode: selects Burst mode in Video mode.
+ * in Non-burst mode, RGB data area is filled with RGB data and NULL
+ * packets, according to input bandwidth of RGB interface.
+ * In Burst mode, RGB data area is filled with RGB data only.
+ * @e_no_data_lane: specifies data lane count to be used by Master.
+ * @e_byte_clk: select byte clock source. (it must be DSIM_PLL_OUT_DIV8)
+ * DSIM_EXT_CLK_DIV8 and DSIM_EXT_CLK_BYPASSS are not supported.
+ * @pll_stable_time: specifies the PLL Timer for stability of the ganerated
+ * clock(System clock cycle base)
+ * if the timer value goes to 0x00000000, the clock stable bit of status
+ * and interrupt register is set.
+ * @esc_clk: specifies escape clock frequency for getting the escape clock
+ * prescaler value.
+ * @stop_holding_cnt: specifies the interval value between transmitting
+ * read packet(or write "set_tear_on" command) and BTA request.
+ * after transmitting read packet or write "set_tear_on" command,
+ * BTA requests to D-PHY automatically. this counter value specifies
+ * the interval between them.
+ * @bta_timeout: specifies the timer for BTA.
+ * this register specifies time out from BTA request to change
+ * the direction with respect to Tx escape clock.
+ * @rx_timeout: specifies the timer for LP Rx mode timeout.
+ * this register specifies time out on how long RxValid deasserts,
+ * after RxLpdt asserts with respect to Tx escape clock.
+ * - RxValid specifies Rx data valid indicator.
+ * - RxLpdt specifies an indicator that D-PHY is under RxLpdt mode.
+ * - RxValid and RxLpdt specifies signal from D-PHY.
+ */
+struct mipi_dsim_config {
+ unsigned char auto_flush;
+ unsigned char eot_disable;
+
+ unsigned char auto_vertical_cnt;
+ unsigned char hse;
+ unsigned char hfp;
+ unsigned char hbp;
+ unsigned char hsa;
+
+ enum mipi_dsim_interface_type e_interface;
+ enum mipi_dsim_virtual_ch_no e_virtual_ch;
+ enum mipi_dsim_pixel_format e_pixel_format;
+ enum mipi_dsim_burst_mode_type e_burst_mode;
+ enum mipi_dsim_no_of_data_lane e_no_data_lane;
+ enum mipi_dsim_byte_clk_src e_byte_clk;
+
+ /*
+ * ===========================================
+ * | P | M | S | MHz |
+ * -------------------------------------------
+ * | 3 | 100 | 3 | 100 |
+ * | 3 | 100 | 2 | 200 |
+ * | 3 | 63 | 1 | 252 |
+ * | 4 | 100 | 1 | 300 |
+ * | 4 | 110 | 1 | 330 |
+ * | 12 | 350 | 1 | 350 |
+ * | 3 | 100 | 1 | 400 |
+ * | 4 | 150 | 1 | 450 |
+ * | 6 | 118 | 1 | 472 |
+ * | 3 | 120 | 1 | 480 |
+ * | 12 | 250 | 0 | 500 |
+ * | 4 | 100 | 0 | 600 |
+ * | 3 | 81 | 0 | 648 |
+ * | 3 | 88 | 0 | 704 |
+ * | 3 | 90 | 0 | 720 |
+ * | 3 | 100 | 0 | 800 |
+ * | 12 | 425 | 0 | 850 |
+ * | 4 | 150 | 0 | 900 |
+ * | 12 | 475 | 0 | 950 |
+ * | 6 | 250 | 0 | 1000 |
+ * -------------------------------------------
+ */
+
+ /*
+ * pms could be calculated as the following.
+ * M * 24 / P * 2 ^ S = MHz
+ */
+ unsigned char p;
+ unsigned short m;
+ unsigned char s;
+
+ unsigned int pll_stable_time;
+ unsigned long esc_clk;
+
+ unsigned short stop_holding_cnt;
+ unsigned char bta_timeout;
+ unsigned short rx_timeout;
+};
+
+/*
+ * struct mipi_dsim_device - global interface for mipi-dsi driver.
+ *
+ * @dsim_config: infomation for configuring mipi-dsi controller.
+ * @master_ops: callbacks to mipi-dsi operations.
+ * @dsim_lcd_dev: pointer to activated ddi device.
+ * (it would be registered by mipi-dsi driver.)
+ * @dsim_lcd_drv: pointer to activated_ddi driver.
+ * (it would be registered by mipi-dsi driver.)
+ * @state: specifies status of MIPI-DSI controller.
+ * the status could be RESET, INIT, STOP, HSCLKEN and ULPS.
+ * @data_lane: specifiec enabled data lane number.
+ * this variable would be set by driver according to e_no_data_lane
+ * automatically.
+ * @e_clk_src: select byte clock source.
+ * @pd: pointer to MIPI-DSI driver platform data.
+ */
+struct mipi_dsim_device {
+ struct mipi_dsim_config *dsim_config;
+ struct mipi_dsim_master_ops *master_ops;
+ struct mipi_dsim_lcd_device *dsim_lcd_dev;
+ struct mipi_dsim_lcd_driver *dsim_lcd_drv;
+
+ unsigned int state;
+ unsigned int data_lane;
+ enum mipi_dsim_byte_clk_src e_clk_src;
+
+ struct exynos_platform_mipi_dsim *pd;
+};
+
+/*
+ * struct exynos_platform_mipi_dsim - interface to platform data
+ * for mipi-dsi driver.
+ *
+ * @lcd_panel_name: specifies lcd panel name registered to mipi-dsi driver.
+ * lcd panel driver searched would be actived.
+ * @dsim_config: pointer of structure for configuring mipi-dsi controller.
+ * @lcd_panel_info: pointer for lcd panel specific structure.
+ * this structure specifies width, height, timing and polarity and so on.
+ * @lcd_power: callback pointer for enabling or disabling lcd power.
+ * @mipi_power: callback pointer for enabling or disabling mipi power.
+ * @phy_enable: pointer to a callback controlling D-PHY enable/reset
+ */
+struct exynos_platform_mipi_dsim {
+ char lcd_panel_name[PANEL_NAME_SIZE];
+
+ struct mipi_dsim_config *dsim_config;
+ void *lcd_panel_info;
+
+ int (*lcd_power)(void);
+ int (*mipi_power)(void);
+ void (*phy_enable)(unsigned int dev_index, unsigned int enable);
+};
+
+/*
+ * struct mipi_dsim_master_ops - callbacks to mipi-dsi operations.
+ *
+ * @cmd_write: transfer command to lcd panel at LP mode.
+ * @cmd_read: read command from rx register.
+ * @get_dsim_frame_done: get the status that all screen data have been
+ * transferred to mipi-dsi.
+ * @clear_dsim_frame_done: clear frame done status.
+ * @get_fb_frame_done: get frame done status of display controller.
+ * @trigger: trigger display controller.
+ * - this one would be used only in case of CPU mode.
+ */
+struct mipi_dsim_master_ops {
+ int (*cmd_write)(struct mipi_dsim_device *dsim, unsigned int data_id,
+ unsigned int data0, unsigned int data1);
+ int (*cmd_read)(struct mipi_dsim_device *dsim, unsigned int data_id,
+ unsigned int data0, unsigned int data1);
+ int (*get_dsim_frame_done)(struct mipi_dsim_device *dsim);
+ int (*clear_dsim_frame_done)(struct mipi_dsim_device *dsim);
+
+ int (*get_fb_frame_done)(void);
+ void (*trigger)(struct fb_info *info);
+};
+
+/*
+ * device structure for mipi-dsi based lcd panel.
+ *
+ * @name: name of the device to use with this device, or an
+ * alias for that name.
+ * @id: id of device to be registered.
+ * @bus_id: bus id for identifing connected bus
+ * and this bus id should be same as id of mipi_dsim_device.
+ * @master: pointer to mipi-dsi master device object.
+ * @platform_data: lcd panel specific platform data.
+ */
+struct mipi_dsim_lcd_device {
+ char *name;
+ int id;
+ int bus_id;
+
+ struct mipi_dsim_device *master;
+ void *platform_data;
+};
+
+/*
+ * driver structure for mipi-dsi based lcd panel.
+ *
+ * this structure should be registered by lcd panel driver.
+ * mipi-dsi driver seeks lcd panel registered through name field
+ * and calls these callback functions in appropriate time.
+ *
+ * @name: name of the driver to use with this device, or an
+ * alias for that name.
+ * @id: id of driver to be registered.
+ * this id would be used for finding device object registered.
+ * @mipi_panel_init: callback pointer for initializing lcd panel based on mipi
+ * dsi interface.
+ * @mipi_display_on: callback pointer for lcd panel display on.
+ */
+struct mipi_dsim_lcd_driver {
+ char *name;
+ int id;
+
+ int (*mipi_panel_init)(struct mipi_dsim_device *dsim_dev);
+ void (*mipi_display_on)(struct mipi_dsim_device *dsim_dev);
+};
+
+int exynos_mipi_dsi_init(void);
+
+/*
+ * register mipi_dsim_lcd_driver object defined by lcd panel driver
+ * to mipi-dsi driver.
+ */
+int exynos_mipi_dsi_register_lcd_driver(struct mipi_dsim_lcd_driver
+ *lcd_drv);
+
+/*
+ * register mipi_dsim_lcd_device to mipi-dsi master.
+ */
+int exynos_mipi_dsi_register_lcd_device(struct mipi_dsim_lcd_device
+ *lcd_dev);
+
+void exynos_set_dsim_platform_data(struct exynos_platform_mipi_dsim *pd);
+
+/* panel driver init based on mipi dsi interface */
+void s6e8ax0_init(void);
+
+#endif /* _DSIM_H */
diff --git a/arch/arm/include/asm/arch-exynos/mmc.h b/arch/arm/include/asm/arch-exynos/mmc.h
index 30f82b8aaf..0f701c9012 100644
--- a/arch/arm/include/asm/arch-exynos/mmc.h
+++ b/arch/arm/include/asm/arch-exynos/mmc.h
@@ -21,53 +21,54 @@
#ifndef __ASM_ARCH_MMC_H_
#define __ASM_ARCH_MMC_H_
-#ifndef __ASSEMBLY__
-struct s5p_mmc {
- unsigned int sysad;
- unsigned short blksize;
- unsigned short blkcnt;
- unsigned int argument;
- unsigned short trnmod;
- unsigned short cmdreg;
- unsigned int rspreg0;
- unsigned int rspreg1;
- unsigned int rspreg2;
- unsigned int rspreg3;
- unsigned int bdata;
- unsigned int prnsts;
- unsigned char hostctl;
- unsigned char pwrcon;
- unsigned char blkgap;
- unsigned char wakcon;
- unsigned short clkcon;
- unsigned char timeoutcon;
- unsigned char swrst;
- unsigned int norintsts; /* errintsts */
- unsigned int norintstsen; /* errintstsen */
- unsigned int norintsigen; /* errintsigen */
- unsigned short acmd12errsts;
- unsigned char res1[2];
- unsigned int capareg;
- unsigned char res2[4];
- unsigned int maxcurr;
- unsigned char res3[0x34];
- unsigned int control2;
- unsigned int control3;
- unsigned char res4[4];
- unsigned int control4;
- unsigned char res5[0x6e];
- unsigned short hcver;
- unsigned char res6[0xFF00];
-};
+#define SDHCI_CONTROL2 0x80
+#define SDHCI_CONTROL3 0x84
+#define SDHCI_CONTROL4 0x8C
-struct mmc_host {
- struct s5p_mmc *reg;
- unsigned int version; /* SDHCI spec. version */
- unsigned int clock; /* Current clock (MHz) */
- int dev_index;
-};
+#define SDHCI_CTRL2_ENSTAASYNCCLR (1 << 31)
+#define SDHCI_CTRL2_ENCMDCNFMSK (1 << 30)
+#define SDHCI_CTRL2_CDINVRXD3 (1 << 29)
+#define SDHCI_CTRL2_SLCARDOUT (1 << 28)
-int s5p_mmc_init(int dev_index, int bus_width);
+#define SDHCI_CTRL2_FLTCLKSEL_MASK (0xf << 24)
+#define SDHCI_CTRL2_FLTCLKSEL_SHIFT (24)
+#define SDHCI_CTRL2_FLTCLKSEL(_x) ((_x) << 24)
-#endif /* __ASSEMBLY__ */
+#define SDHCI_CTRL2_LVLDAT_MASK (0xff << 16)
+#define SDHCI_CTRL2_LVLDAT_SHIFT (16)
+#define SDHCI_CTRL2_LVLDAT(_x) ((_x) << 16)
+
+#define SDHCI_CTRL2_ENFBCLKTX (1 << 15)
+#define SDHCI_CTRL2_ENFBCLKRX (1 << 14)
+#define SDHCI_CTRL2_SDCDSEL (1 << 13)
+#define SDHCI_CTRL2_SDSIGPC (1 << 12)
+#define SDHCI_CTRL2_ENBUSYCHKTXSTART (1 << 11)
+
+#define SDHCI_CTRL2_DFCNT_MASK(_x) ((_x) << 9)
+#define SDHCI_CTRL2_DFCNT_SHIFT (9)
+
+#define SDHCI_CTRL2_ENCLKOUTHOLD (1 << 8)
+#define SDHCI_CTRL2_RWAITMODE (1 << 7)
+#define SDHCI_CTRL2_DISBUFRD (1 << 6)
+#define SDHCI_CTRL2_SELBASECLK_MASK(_x) ((_x) << 4)
+#define SDHCI_CTRL2_SELBASECLK_SHIFT (4)
+#define SDHCI_CTRL2_PWRSYNC (1 << 3)
+#define SDHCI_CTRL2_ENCLKOUTMSKCON (1 << 1)
+#define SDHCI_CTRL2_HWINITFIN (1 << 0)
+
+#define SDHCI_CTRL3_FCSEL3 (1 << 31)
+#define SDHCI_CTRL3_FCSEL2 (1 << 23)
+#define SDHCI_CTRL3_FCSEL1 (1 << 15)
+#define SDHCI_CTRL3_FCSEL0 (1 << 7)
+
+#define SDHCI_CTRL4_DRIVE_MASK(_x) ((_x) << 16)
+#define SDHCI_CTRL4_DRIVE_SHIFT (16)
+
+int s5p_sdhci_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks);
+
+static inline unsigned int s5p_mmc_init(int index, int bus_width)
+{
+ unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
+ return s5p_sdhci_init(base, 52000000, 400000, index);
+}
#endif
diff --git a/arch/arm/include/asm/arch-exynos/power.h b/arch/arm/include/asm/arch-exynos/power.h
index fb442f7f1f..6444fd04ec 100644
--- a/arch/arm/include/asm/arch-exynos/power.h
+++ b/arch/arm/include/asm/arch-exynos/power.h
@@ -227,4 +227,10 @@ struct exynos4_power {
};
#endif /* __ASSEMBLY__ */
+void set_mipi_phy_ctrl(unsigned int dev_index, unsigned int enable);
+
+#define EXYNOS_MIPI_PHY_ENABLE (1 << 0)
+#define EXYNOS_MIPI_PHY_SRESETN (1 << 1)
+#define EXYNOS_MIPI_PHY_MRESETN (1 << 2)
+
#endif
diff --git a/arch/arm/include/asm/arch-exynos/system.h b/arch/arm/include/asm/arch-exynos/system.h
new file mode 100644
index 0000000000..c85f949da4
--- /dev/null
+++ b/arch/arm/include/asm/arch-exynos/system.h
@@ -0,0 +1,53 @@
+/*
+ * (C) Copyright 2012 Samsung Electronics
+ * Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ *
+ */
+
+#ifndef __ASM_ARM_ARCH_SYSTEM_H_
+#define __ASM_ARM_ARCH_SYSTEM_H_
+
+#ifndef __ASSEMBLY__
+struct exynos4_sysreg {
+ unsigned char res1[0x210];
+ unsigned int display_ctrl;
+ unsigned int display_ctrl2;
+ unsigned int camera_control;
+ unsigned int audio_endian;
+ unsigned int jtag_con;
+};
+
+struct exynos5_sysreg {
+ unsigned char res1[0x214];
+ unsigned int disp1blk_cfg;
+ unsigned int disp2blk_cfg;
+ unsigned int hdcp_e_fuse;
+ unsigned int gsclblk_cfg0;
+ unsigned int gsclblk_cfg1;
+ unsigned int reserved;
+ unsigned int ispblk_cfg;
+ unsigned int usb20phy_cfg;
+ unsigned int mipi_dphy;
+ unsigned int dptx_dphy;
+ unsigned int phyclk_sel;
+};
+#endif
+
+void set_system_display_ctrl(void);
+
+#endif /* _EXYNOS4_SYSTEM_H */
diff --git a/arch/arm/include/asm/arch-exynos/tzpc.h b/arch/arm/include/asm/arch-exynos/tzpc.h
index 2c9a07be45..c5eb4b1cc2 100644
--- a/arch/arm/include/asm/arch-exynos/tzpc.h
+++ b/arch/arm/include/asm/arch-exynos/tzpc.h
@@ -22,7 +22,7 @@
#define __TZPC_H_
#ifndef __ASSEMBLY__
-struct exynos5_tzpc {
+struct exynos_tzpc {
unsigned int r0size;
char res1[0x7FC];
unsigned int decprot0stat;
diff --git a/arch/arm/include/asm/arch-lpc32xx/clk.h b/arch/arm/include/asm/arch-lpc32xx/clk.h
new file mode 100644
index 0000000000..c1dad0a444
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/clk.h
@@ -0,0 +1,170 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_CLK_H
+#define _LPC32XX_CLK_H
+
+#include <asm/types.h>
+
+#define OSC_CLK_FREQUENCY 13000000
+#define RTC_CLK_FREQUENCY 32768
+
+/* Clocking and Power Control Registers */
+struct clk_pm_regs {
+ u32 reserved0[5];
+ u32 boot_map; /* Boot Map Control Register */
+ u32 p0_intr_er; /* Port 0/1 Start and Interrupt Enable */
+ u32 usbdiv_ctrl; /* USB Clock Pre-Divide Register */
+ /* Internal Start Signal Sources Registers */
+ u32 start_er_int; /* Start Enable Register */
+ u32 start_rsr_int; /* Start Raw Status Register */
+ u32 start_sr_int; /* Start Status Register */
+ u32 start_apr_int; /* Start Activation Polarity Register */
+ /* Device Pin Start Signal Sources Registers */
+ u32 start_er_pin; /* Start Enable Register */
+ u32 start_rsr_pin; /* Start Raw Status Register */
+ u32 start_sr_pin; /* Start Status Register */
+ u32 start_apr_pin; /* Start Activation Polarity Register */
+ /* Clock Control Registers */
+ u32 hclkdiv_ctrl; /* HCLK Divider Control Register */
+ u32 pwr_ctrl; /* Power Control Register */
+ u32 pll397_ctrl; /* PLL397 Control Register */
+ u32 osc_ctrl; /* Main Oscillator Control Register */
+ u32 sysclk_ctrl; /* SYSCLK Control Register */
+ u32 lcdclk_ctrl; /* LCD Clock Control Register */
+ u32 hclkpll_ctrl; /* HCLK PLL Control Register */
+ u32 reserved1;
+ u32 adclk_ctrl1; /* ADC Clock Control1 Register */
+ u32 usb_ctrl; /* USB Control Register */
+ u32 sdramclk_ctrl; /* SDRAM Clock Control Register */
+ u32 ddr_lap_nom; /* DDR Calibration Nominal Value */
+ u32 ddr_lap_count; /* DDR Calibration Measured Value */
+ u32 ddr_cal_delay; /* DDR Calibration Delay Value */
+ u32 ssp_ctrl; /* SSP Control Register */
+ u32 i2s_ctrl; /* I2S Clock Control Register */
+ u32 ms_ctrl; /* Memory Card Control Register */
+ u32 reserved2[3];
+ u32 macclk_ctrl; /* Ethernet MAC Clock Control Register */
+ u32 reserved3[4];
+ u32 test_clk; /* Test Clock Selection Register */
+ u32 sw_int; /* Software Interrupt Register */
+ u32 i2cclk_ctrl; /* I2C Clock Control Register */
+ u32 keyclk_ctrl; /* Keyboard Scan Clock Control Register */
+ u32 adclk_ctrl; /* ADC Clock Control Register */
+ u32 pwmclk_ctrl; /* PWM Clock Control Register */
+ u32 timclk_ctrl; /* Watchdog and Highspeed Timer Control */
+ u32 timclk_ctrl1; /* Motor and Timer Clock Control */
+ u32 spi_ctrl; /* SPI Control Register */
+ u32 flashclk_ctrl; /* NAND Flash Clock Control Register */
+ u32 reserved4;
+ u32 u3clk; /* UART 3 Clock Control Register */
+ u32 u4clk; /* UART 4 Clock Control Register */
+ u32 u5clk; /* UART 5 Clock Control Register */
+ u32 u6clk; /* UART 6 Clock Control Register */
+ u32 irdaclk; /* IrDA Clock Control Register */
+ u32 uartclk_ctrl; /* UART Clock Control Register */
+ u32 dmaclk_ctrl; /* DMA Clock Control Register */
+ u32 autoclk_ctrl; /* Autoclock Control Register */
+};
+
+/* HCLK Divider Control Register bits */
+#define CLK_HCLK_DDRAM_HALF (0x2 << 7)
+#define CLK_HCLK_DDRAM_NOMINAL (0x1 << 7)
+#define CLK_HCLK_DDRAM_STOPPED (0x0 << 7)
+#define CLK_HCLK_PERIPH_DIV_MASK (0x1F << 2)
+#define CLK_HCLK_PERIPH_DIV(n) ((((n) - 1) & 0x1F) << 2)
+#define CLK_HCLK_ARM_PLL_DIV_MASK (0x3 << 0)
+#define CLK_HCLK_ARM_PLL_DIV_4 (0x2 << 0)
+#define CLK_HCLK_ARM_PLL_DIV_2 (0x1 << 0)
+#define CLK_HCLK_ARM_PLL_DIV_1 (0x0 << 0)
+
+/* Power Control Register bits */
+#define CLK_PWR_HCLK_RUN_PERIPH (1 << 10)
+#define CLK_PWR_EMC_SREFREQ (1 << 9)
+#define CLK_PWR_EMC_SREFREQ_UPDATE (1 << 8)
+#define CLK_PWR_SDRAM_SREFREQ (1 << 7)
+#define CLK_PWR_HIGHCORE_LEVEL (1 << 5)
+#define CLK_PWR_SYSCLKEN_LEVEL (1 << 4)
+#define CLK_PWR_SYSCLKEN_CTRL (1 << 3)
+#define CLK_PWR_NORMAL_RUN (1 << 2)
+#define CLK_PWR_HIGHCORE_CTRL (1 << 1)
+#define CLK_PWR_STOP_MODE (1 << 0)
+
+/* SYSCLK Control Register bits */
+#define CLK_SYSCLK_PLL397 (1 << 1)
+#define CLK_SYSCLK_MUX (1 << 0)
+
+/* HCLK PLL Control Register bits */
+#define CLK_HCLK_PLL_OPERATING (1 << 16)
+#define CLK_HCLK_PLL_BYPASS (1 << 15)
+#define CLK_HCLK_PLL_DIRECT (1 << 14)
+#define CLK_HCLK_PLL_FEEDBACK (1 << 13)
+#define CLK_HCLK_PLL_POSTDIV_MASK (0x3 << 11)
+#define CLK_HCLK_PLL_POSTDIV_16 (0x3 << 11)
+#define CLK_HCLK_PLL_POSTDIV_8 (0x2 << 11)
+#define CLK_HCLK_PLL_POSTDIV_4 (0x1 << 11)
+#define CLK_HCLK_PLL_POSTDIV_2 (0x0 << 11)
+#define CLK_HCLK_PLL_PREDIV_MASK (0x3 << 9)
+#define CLK_HCLK_PLL_PREDIV_4 (0x3 << 9)
+#define CLK_HCLK_PLL_PREDIV_3 (0x2 << 9)
+#define CLK_HCLK_PLL_PREDIV_2 (0x1 << 9)
+#define CLK_HCLK_PLL_PREDIV_1 (0x0 << 9)
+#define CLK_HCLK_PLL_FEEDBACK_DIV_MASK (0xFF << 1)
+#define CLK_HCLK_PLL_FEEDBACK_DIV(n) ((((n) - 1) & 0xFF) << 1)
+#define CLK_HCLK_PLL_LOCKED (1 << 0)
+
+/* Ethernet MAC Clock Control Register bits */
+#define CLK_MAC_RMII (0x3 << 3)
+#define CLK_MAC_MII (0x1 << 3)
+#define CLK_MAC_MASTER (1 << 2)
+#define CLK_MAC_SLAVE (1 << 1)
+#define CLK_MAC_REG (1 << 0)
+
+/* Timer Clock Control1 Register bits */
+#define CLK_TIMCLK_MOTOR (1 << 6)
+#define CLK_TIMCLK_TIMER3 (1 << 5)
+#define CLK_TIMCLK_TIMER2 (1 << 4)
+#define CLK_TIMCLK_TIMER1 (1 << 3)
+#define CLK_TIMCLK_TIMER0 (1 << 2)
+#define CLK_TIMCLK_TIMER5 (1 << 1)
+#define CLK_TIMCLK_TIMER4 (1 << 0)
+
+/* Timer Clock Control Register bits */
+#define CLK_TIMCLK_HSTIMER (1 << 1)
+#define CLK_TIMCLK_WATCHDOG (1 << 0)
+
+/* UART Clock Control Register bits */
+#define CLK_UART(n) (1 << ((n) - 3))
+
+/* UARTn Clock Select Registers bits */
+#define CLK_UART_HCLK (1 << 16)
+#define CLK_UART_X_DIV(n) (((n) & 0xFF) << 8)
+#define CLK_UART_Y_DIV(n) (((n) & 0xFF) << 0)
+
+/* DMA Clock Control Register bits */
+#define CLK_DMA_ENABLE (1 << 0)
+
+unsigned int get_sys_clk_rate(void);
+unsigned int get_hclk_pll_rate(void);
+unsigned int get_hclk_clk_div(void);
+unsigned int get_hclk_clk_rate(void);
+unsigned int get_periph_clk_div(void);
+unsigned int get_periph_clk_rate(void);
+
+#endif /* _LPC32XX_CLK_H */
diff --git a/arch/arm/include/asm/arch-lpc32xx/config.h b/arch/arm/include/asm/arch-lpc32xx/config.h
new file mode 100644
index 0000000000..41fcd323be
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/config.h
@@ -0,0 +1,76 @@
+/*
+ * Common definitions for LPC32XX board configurations
+ *
+ * Copyright (C) 2011 Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_CONFIG_H
+#define _LPC32XX_CONFIG_H
+
+/* Basic CPU architecture */
+#define CONFIG_ARM926EJS
+#define CONFIG_ARCH_CPU_INIT
+
+#define CONFIG_NR_DRAM_BANKS_MAX 2
+
+/* 1KHz clock tick */
+#define CONFIG_SYS_HZ 1000
+
+/* UART configuration */
+#if (CONFIG_SYS_LPC32XX_UART >= 3) && (CONFIG_SYS_LPC32XX_UART <= 6)
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_CONS_INDEX (CONFIG_SYS_LPC32XX_UART - 2)
+#elif (CONFIG_SYS_LPC32XX_UART == 1) || (CONFIG_SYS_LPC32XX_UART == 2) || \
+ (CONFIG_SYS_LPC32XX_UART == 7)
+#define CONFIG_LPC32XX_HSUART
+#else
+#error "define CONFIG_SYS_LPC32XX_UART in the range from 1 to 7"
+#endif
+
+#if defined(CONFIG_SYS_NS16550_SERIAL)
+#define CONFIG_SYS_NS16550
+
+#define CONFIG_SYS_NS16550_REG_SIZE -4
+#define CONFIG_SYS_NS16550_CLK get_serial_clock()
+
+#define CONFIG_SYS_NS16550_COM1 UART3_BASE
+#define CONFIG_SYS_NS16550_COM2 UART4_BASE
+#define CONFIG_SYS_NS16550_COM3 UART5_BASE
+#define CONFIG_SYS_NS16550_COM4 UART6_BASE
+#endif
+
+#if defined(CONFIG_LPC32XX_HSUART)
+#if CONFIG_SYS_LPC32XX_UART == 1
+#define HS_UART_BASE HS_UART1_BASE
+#elif CONFIG_SYS_LPC32XX_UART == 2
+#define HS_UART_BASE HS_UART2_BASE
+#else /* CONFIG_SYS_LPC32XX_UART == 7 */
+#define HS_UART_BASE HS_UART7_BASE
+#endif
+#endif
+
+#define CONFIG_SYS_BAUDRATE_TABLE \
+ { 9600, 19200, 38400, 57600, 115200, 230400, 460800 }
+
+/* NOR Flash */
+#if defined(CONFIG_SYS_FLASH_CFI)
+#define CONFIG_FLASH_CFI_DRIVER
+#define CONFIG_SYS_FLASH_PROTECTION
+#endif
+
+#endif /* _LPC32XX_CONFIG_H */
diff --git a/arch/arm/include/asm/arch-lpc32xx/cpu.h b/arch/arm/include/asm/arch-lpc32xx/cpu.h
new file mode 100644
index 0000000000..c5343c36e5
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/cpu.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_CPU_H
+#define _LPC32XX_CPU_H
+
+/* LPC32XX Memory map */
+
+/* AHB physical base addresses */
+#define SLC_NAND_BASE 0x20020000 /* SLC NAND Flash registers base */
+#define SSP0_BASE 0x20084000 /* SSP0 registers base */
+#define SD_CARD_BASE 0x20098000 /* SD card interface registers base */
+#define MLC_NAND_BASE 0x200A8000 /* MLC NAND Flash registers base */
+#define DMA_BASE 0x31000000 /* DMA controller registers base */
+#define USB_BASE 0x31020000 /* USB registers base */
+#define LCD_BASE 0x31040000 /* LCD registers base */
+#define ETHERNET_BASE 0x31060000 /* Ethernet registers base */
+#define EMC_BASE 0x31080000 /* EMC configuration registers base */
+
+/* FAB peripherals base addresses */
+#define CLK_PM_BASE 0x40004000 /* System control registers base */
+#define HS_UART1_BASE 0x40014000 /* High speed UART 1 registers base */
+#define HS_UART2_BASE 0x40018000 /* High speed UART 2 registers base */
+#define HS_UART7_BASE 0x4001C000 /* High speed UART 7 registers base */
+#define RTC_BASE 0x40024000 /* RTC registers base */
+#define GPIO_BASE 0x40028000 /* GPIO registers base */
+#define WDT_BASE 0x4003C000 /* Watchdog timer registers base */
+#define TIMER0_BASE 0x40044000 /* Timer0 registers base */
+#define TIMER1_BASE 0x4004C000 /* Timer1 registers base */
+#define UART_CTRL_BASE 0x40054000 /* UART control regsisters base */
+
+/* APB peripherals base addresses */
+#define UART3_BASE 0x40080000 /* UART 3 registers base */
+#define UART4_BASE 0x40088000 /* UART 4 registers base */
+#define UART5_BASE 0x40090000 /* UART 5 registers base */
+#define UART6_BASE 0x40098000 /* UART 6 registers base */
+
+/* External SDRAM Memory Bank base addresses */
+#define EMC_DYCS0_BASE 0x80000000 /* SDRAM DYCS0 base address */
+#define EMC_DYCS1_BASE 0xA0000000 /* SDRAM DYCS1 base address */
+
+/* External Static Memory Bank base addresses */
+#define EMC_CS0_BASE 0xE0000000
+#define EMC_CS1_BASE 0xE1000000
+#define EMC_CS2_BASE 0xE2000000
+#define EMC_CS3_BASE 0xE3000000
+
+#endif /* _LPC32XX_CPU_H */
diff --git a/arch/arm/include/asm/arch-lpc32xx/emc.h b/arch/arm/include/asm/arch-lpc32xx/emc.h
new file mode 100644
index 0000000000..feb03bd069
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/emc.h
@@ -0,0 +1,92 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_EMC_H
+#define _LPC32XX_EMC_H
+
+#include <asm/types.h>
+
+/* EMC Registers */
+struct emc_regs {
+ u32 ctrl; /* Controls operation of the EMC */
+ u32 status; /* Provides EMC status information */
+ u32 config; /* Configures operation of the EMC */
+ u32 reserved0[5];
+ u32 control; /* Controls dyn memory operation */
+ u32 refresh; /* Configures dyn memory refresh operation */
+ u32 read_config; /* Configures the dyn memory read strategy */
+ u32 reserved1;
+ u32 t_rp; /* Precharge command period */
+ u32 t_ras; /* Active to precharge command period */
+ u32 t_srex; /* Self-refresh exit time */
+ u32 reserved2[2];
+ u32 t_wr; /* Write recovery time */
+ u32 t_rc; /* Active to active command period */
+ u32 t_rfc; /* Auto-refresh period */
+ u32 t_xsr; /* Exit self-refresh to active command time */
+ u32 t_rrd; /* Active bank A to active bank B latency */
+ u32 t_mrd; /* Load mode register to active command time */
+ u32 t_cdlr; /* Last data in to read command time */
+ u32 reserved3[8];
+ u32 extended_wait; /* time for static memory rd/wr transfers */
+ u32 reserved4[31];
+ u32 config0; /* Configuration information for the SDRAM */
+ u32 rascas0; /* RAS and CAS latencies for the SDRAM */
+ u32 reserved5[6];
+ u32 config1; /* Configuration information for the SDRAM */
+ u32 rascas1; /* RAS and CAS latencies for the SDRAM */
+ u32 reserved6[54];
+ struct emc_stat_t {
+ u32 config; /* Static memory configuration */
+ u32 waitwen; /* Delay from chip select to write enable */
+ u32 waitoen; /* Delay to output enable */
+ u32 waitrd; /* Delay to a read access */
+ u32 waitpage; /* Delay for async page mode read */
+ u32 waitwr; /* Delay to a write access */
+ u32 waitturn; /* Number of bus turnaround cycles */
+ u32 reserved;
+ } stat[4];
+ u32 reserved7[96];
+ struct emc_ahb_t {
+ u32 control; /* Control register for AHB */
+ u32 status; /* Status register for AHB */
+ u32 timeout; /* Timeout register for AHB */
+ u32 reserved[5];
+ } ahb[5];
+};
+
+/* Static Memory Configuration Register bits */
+#define EMC_STAT_CONFIG_WP (1 << 20)
+#define EMC_STAT_CONFIG_EW (1 << 8)
+#define EMC_STAT_CONFIG_PB (1 << 7)
+#define EMC_STAT_CONFIG_PC (1 << 6)
+#define EMC_STAT_CONFIG_PM (1 << 3)
+#define EMC_STAT_CONFIG_32BIT (2 << 0)
+#define EMC_STAT_CONFIG_16BIT (1 << 0)
+#define EMC_STAT_CONFIG_8BIT (0 << 0)
+
+/* Static Memory Delay Registers */
+#define EMC_STAT_WAITWEN(n) (((n) - 1) & 0x0F)
+#define EMC_STAT_WAITOEN(n) (((n) - 1) & 0x0F)
+#define EMC_STAT_WAITRD(n) (((n) - 1) & 0x1F)
+#define EMC_STAT_WAITPAGE(n) (((n) - 1) & 0x1F)
+#define EMC_STAT_WAITWR(n) (((n) - 2) & 0x1F)
+#define EMC_STAT_WAITTURN(n) (((n) - 1) & 0x0F)
+
+#endif /* _LPC32XX_EMC_H */
diff --git a/arch/arm/include/asm/arch-lpc32xx/sys_proto.h b/arch/arm/include/asm/arch-lpc32xx/sys_proto.h
new file mode 100644
index 0000000000..b2cbfcd66d
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/sys_proto.h
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2011 Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_SYS_PROTO_H
+#define _LPC32XX_SYS_PROTO_H
+
+void lpc32xx_uart_init(unsigned int uart_id);
+
+#endif /* _LPC32XX_SYS_PROTO_H */
diff --git a/arch/arm/include/asm/arch-lpc32xx/timer.h b/arch/arm/include/asm/arch-lpc32xx/timer.h
new file mode 100644
index 0000000000..7d637637ef
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/timer.h
@@ -0,0 +1,74 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_TIMER_H
+#define _LPC32XX_TIMER_H
+
+#include <asm/types.h>
+
+/* Timer/Counter Registers */
+struct timer_regs {
+ u32 ir; /* Interrupt Register */
+ u32 tcr; /* Timer Control Register */
+ u32 tc; /* Timer Counter */
+ u32 pr; /* Prescale Register */
+ u32 pc; /* Prescale Counter */
+ u32 mcr; /* Match Control Register */
+ u32 mr[4]; /* Match Registers */
+ u32 ccr; /* Capture Control Register */
+ u32 cr[4]; /* Capture Registers */
+ u32 emr; /* External Match Register */
+ u32 reserved[12];
+ u32 ctcr; /* Count Control Register */
+};
+
+/* Timer/Counter Interrupt Register bits */
+#define TIMER_IR_CR(n) (1 << ((n) + 4))
+#define TIMER_IR_MR(n) (1 << (n))
+
+/* Timer/Counter Timer Control Register bits */
+#define TIMER_TCR_COUNTER_RESET (1 << 1)
+#define TIMER_TCR_COUNTER_ENABLE (1 << 0)
+#define TIMER_TCR_COUNTER_DISABLE (0 << 0)
+
+/* Timer/Counter Match Control Register bits */
+#define TIMER_MCR_STOP(n) (1 << (3 * (n) + 2))
+#define TIMER_MCR_RESET(n) (1 << (3 * (n) + 1))
+#define TIMER_MCR_INTERRUPT(n) (1 << (3 * (n)))
+
+/* Timer/Counter Capture Control Register bits */
+#define TIMER_CCR_INTERRUPT(n) (1 << (3 * (n) + 2))
+#define TIMER_CCR_FALLING_EDGE(n) (1 << (3 * (n) + 1))
+#define TIMER_CCR_RISING_EDGE(n) (1 << (3 * (n)))
+
+/* Timer/Counter External Match Register bits */
+#define TIMER_EMR_EMC_TOGGLE(n) (0x3 << (2 * (n) + 4))
+#define TIMER_EMR_EMC_SET(n) (0x2 << (2 * (n) + 4))
+#define TIMER_EMR_EMC_CLEAR(n) (0x1 << (2 * (n) + 4))
+#define TIMER_EMR_EMC_NOTHING(n) (0x0 << (2 * (n) + 4))
+#define TIMER_EMR_EM(n) (1 << (n))
+
+/* Timer/Counter Count Control Register bits */
+#define TIMER_CTCR_INPUT(n) ((n) << 2)
+#define TIMER_CTCR_MODE_COUNTER_BOTH (0x3 << 0)
+#define TIMER_CTCR_MODE_COUNTER_FALLING (0x2 << 0)
+#define TIMER_CTCR_MODE_COUNTER_RISING (0x1 << 0)
+#define TIMER_CTCR_MODE_TIMER (0x0 << 0)
+
+#endif /* _LPC32XX_TIMER_H */
diff --git a/arch/arm/include/asm/arch-lpc32xx/uart.h b/arch/arm/include/asm/arch-lpc32xx/uart.h
new file mode 100644
index 0000000000..ec12893236
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/uart.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_UART_H
+#define _LPC32XX_UART_H
+
+#include <asm/types.h>
+
+/* 14-clock UART Registers */
+struct hsuart_regs {
+ union {
+ u32 rx; /* Receiver FIFO */
+ u32 tx; /* Transmitter FIFO */
+ };
+ u32 level; /* FIFO Level Register */
+ u32 iir; /* Interrupt ID Register */
+ u32 ctrl; /* Control Register */
+ u32 rate; /* Rate Control Register */
+};
+
+/* 14-clock UART Receiver FIFO Register bits */
+#define HSUART_RX_BREAK (1 << 10)
+#define HSUART_RX_ERROR (1 << 9)
+#define HSUART_RX_EMPTY (1 << 8)
+#define HSUART_RX_DATA (0xff << 0)
+
+/* 14-clock UART Level Register bits */
+#define HSUART_LEVEL_TX (0xff << 8)
+#define HSUART_LEVEL_RX (0xff << 0)
+
+/* 14-clock UART Interrupt Identification Register bits */
+#define HSUART_IIR_TX_INT_SET (1 << 6)
+#define HSUART_IIR_RX_OE (1 << 5)
+#define HSUART_IIR_BRK (1 << 4)
+#define HSUART_IIR_FE (1 << 3)
+#define HSUART_IIR_RX_TIMEOUT (1 << 2)
+#define HSUART_IIR_RX_TRIG (1 << 1)
+#define HSUART_IIR_TX (1 << 0)
+
+/* 14-clock UART Control Register bits */
+#define HSUART_CTRL_HRTS_INV (1 << 21)
+#define HSUART_CTRL_HRTS_TRIG_48 (0x3 << 19)
+#define HSUART_CTRL_HRTS_TRIG_32 (0x2 << 19)
+#define HSUART_CTRL_HRTS_TRIG_16 (0x1 << 19)
+#define HSUART_CTRL_HRTS_TRIG_8 (0x0 << 19)
+#define HSUART_CTRL_HRTS_EN (1 << 18)
+#define HSUART_CTRL_TMO_16 (0x3 << 16)
+#define HSUART_CTRL_TMO_8 (0x2 << 16)
+#define HSUART_CTRL_TMO_4 (0x1 << 16)
+#define HSUART_CTRL_TMO_DISABLED (0x0 << 16)
+#define HSUART_CTRL_HCTS_INV (1 << 15)
+#define HSUART_CTRL_HCTS_EN (1 << 14)
+#define HSUART_CTRL_HSU_OFFSET(n) ((n) << 9)
+#define HSUART_CTRL_HSU_BREAK (1 << 8)
+#define HSUART_CTRL_HSU_ERR_INT_EN (1 << 7)
+#define HSUART_CTRL_HSU_RX_INT_EN (1 << 6)
+#define HSUART_CTRL_HSU_TX_INT_EN (1 << 5)
+#define HSUART_CTRL_HSU_RX_TRIG_48 (0x5 << 2)
+#define HSUART_CTRL_HSU_RX_TRIG_32 (0x4 << 2)
+#define HSUART_CTRL_HSU_RX_TRIG_16 (0x3 << 2)
+#define HSUART_CTRL_HSU_RX_TRIG_8 (0x2 << 2)
+#define HSUART_CTRL_HSU_RX_TRIG_4 (0x1 << 2)
+#define HSUART_CTRL_HSU_RX_TRIG_1 (0x0 << 2)
+#define HSUART_CTRL_HSU_TX_TRIG_16 (0x3 << 0)
+#define HSUART_CTRL_HSU_TX_TRIG_8 (0x2 << 0)
+#define HSUART_CTRL_HSU_TX_TRIG_4 (0x1 << 0)
+#define HSUART_CTRL_HSU_TX_TRIG_0 (0x0 << 0)
+
+/* UART Control Registers */
+struct uart_ctrl_regs {
+ u32 ctrl; /* Control Register */
+ u32 clkmode; /* Clock Mode Register */
+ u32 loop; /* Loopback Control Register */
+};
+
+/* UART Control Register bits */
+#define UART_CTRL_UART3_MD_CTRL (1 << 11)
+#define UART_CTRL_HDPX_INV (1 << 10)
+#define UART_CTRL_HDPX_EN (1 << 9)
+#define UART_CTRL_UART6_IRDA (1 << 5)
+#define UART_CTRL_IR_TX6_INV (1 << 4)
+#define UART_CTRL_IR_RX6_INV (1 << 3)
+#define UART_CTRL_IR_RX_LENGTH (1 << 2)
+#define UART_CTRL_IR_TX_LENGTH (1 << 1)
+#define UART_CTRL_UART5_USB_MODE (1 << 0)
+
+/* UART Clock Mode Register bits */
+#define UART_CLKMODE_STATX(n) (1 << ((n) + 16))
+#define UART_CLKMODE_STAT (1 << 14)
+#define UART_CLKMODE_MASK(n) (0x3 << (2 * (n) - 2))
+#define UART_CLKMODE_AUTO(n) (0x2 << (2 * (n) - 2))
+#define UART_CLKMODE_ON(n) (0x1 << (2 * (n) - 2))
+#define UART_CLKMODE_OFF(n) (0x0 << (2 * (n) - 2))
+
+/* UART Loopback Control Register bits */
+#define UART_LOOPBACK(n) (1 << ((n) - 1))
+
+#endif /* _LPC32XX_UART_H */
diff --git a/arch/arm/include/asm/arch-lpc32xx/wdt.h b/arch/arm/include/asm/arch-lpc32xx/wdt.h
new file mode 100644
index 0000000000..133f29fc4b
--- /dev/null
+++ b/arch/arm/include/asm/arch-lpc32xx/wdt.h
@@ -0,0 +1,51 @@
+/*
+ * Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef _LPC32XX_WDT_H
+#define _LPC32XX_WDT_H
+
+#include <asm/types.h>
+
+/* Watchdog Timer Registers */
+struct wdt_regs {
+ u32 isr; /* Interrupt Status Register */
+ u32 ctrl; /* Control Register */
+ u32 counter; /* Counter Value Register */
+ u32 mctrl; /* Match Control Register */
+ u32 match0; /* Match 0 Register */
+ u32 emr; /* External Match Control Register */
+ u32 pulse; /* Reset Pulse Length Register */
+ u32 res; /* Reset Source Register */
+};
+
+/* Watchdog Timer Control Register bits */
+#define WDTIM_CTRL_PAUSE_EN (1 << 2)
+#define WDTIM_CTRL_RESET_COUNT (1 << 1)
+#define WDTIM_CTRL_COUNT_ENAB (1 << 0)
+
+/* Watchdog Timer Match Control Register bits */
+#define WDTIM_MCTRL_RESFRC2 (1 << 6)
+#define WDTIM_MCTRL_RESFRC1 (1 << 5)
+#define WDTIM_MCTRL_M_RES2 (1 << 4)
+#define WDTIM_MCTRL_M_RES1 (1 << 3)
+#define WDTIM_MCTRL_STOP_COUNT0 (1 << 2)
+#define WDTIM_MCTRL_RESET_COUNT0 (1 << 1)
+#define WDTIM_MCTRL_MR0_INT (1 << 0)
+
+#endif /* _LPC32XX_WDT_H */
diff --git a/arch/arm/include/asm/arch-mx25/clock.h b/arch/arm/include/asm/arch-mx25/clock.h
index c59f588570..0f47eaf053 100644
--- a/arch/arm/include/asm/arch-mx25/clock.h
+++ b/arch/arm/include/asm/arch-mx25/clock.h
@@ -26,11 +26,34 @@
#ifndef __ASM_ARCH_CLOCK_H
#define __ASM_ARCH_CLOCK_H
+enum mxc_clock {
+ MXC_CSI_CLK,
+ MXC_EPIT_CLK,
+ MXC_ESAI_CLK,
+ MXC_ESDHC1_CLK,
+ MXC_ESDHC2_CLK,
+ MXC_GPT_CLK,
+ MXC_I2C_CLK,
+ MXC_LCDC_CLK,
+ MXC_NFC_CLK,
+ MXC_OWIRE_CLK,
+ MXC_PWM_CLK,
+ MXC_SIM1_CLK,
+ MXC_SIM2_CLK,
+ MXC_SSI1_CLK,
+ MXC_SSI2_CLK,
+ MXC_UART_CLK,
+ MXC_ARM_CLK,
+ MXC_FEC_CLK,
+ MXC_CLK_NUM
+};
+
ulong imx_get_perclk(int clk);
ulong imx_get_ahbclk(void);
#define imx_get_uartclk() imx_get_perclk(15)
#define imx_get_fecclk() (imx_get_ahbclk()/2)
+unsigned int mxc_get_clock(enum mxc_clock clk);
#endif /* __ASM_ARCH_CLOCK_H */
diff --git a/arch/arm/include/asm/arch-mx25/imx-regs.h b/arch/arm/include/asm/arch-mx25/imx-regs.h
index 7f9449b2d0..cf925d70d5 100644
--- a/arch/arm/include/asm/arch-mx25/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx25/imx-regs.h
@@ -34,6 +34,9 @@
#define _IMX_REGS_H
#ifndef __ASSEMBLY__
+
+#include <asm/types.h>
+
#ifdef CONFIG_FEC_MXC
extern void mx25_fec_init_pins(void);
#endif
diff --git a/arch/arm/include/asm/arch-mx28/imx-regs.h b/arch/arm/include/asm/arch-mx28/imx-regs.h
index f9e6c535f2..37d0a93768 100644
--- a/arch/arm/include/asm/arch-mx28/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx28/imx-regs.h
@@ -30,6 +30,8 @@
#include <asm/arch/regs-digctl.h>
#include <asm/arch/regs-gpmi.h>
#include <asm/arch/regs-i2c.h>
+#include <asm/arch/regs-lcdif.h>
+#include <asm/arch/regs-lradc.h>
#include <asm/arch/regs-ocotp.h>
#include <asm/arch/regs-pinctrl.h>
#include <asm/arch/regs-power.h>
diff --git a/arch/arm/include/asm/arch-mx28/regs-lcdif.h b/arch/arm/include/asm/arch-mx28/regs-lcdif.h
new file mode 100644
index 0000000000..cb47e41fdc
--- /dev/null
+++ b/arch/arm/include/asm/arch-mx28/regs-lcdif.h
@@ -0,0 +1,212 @@
+/*
+ * Freescale i.MX28 LCDIF Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2010 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef __MX28_REGS_LCDIF_H__
+#define __MX28_REGS_LCDIF_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef __ASSEMBLY__
+struct mx28_lcdif_regs {
+ mx28_reg_32(hw_lcdif_ctrl) /* 0x00 */
+ mx28_reg_32(hw_lcdif_ctrl1) /* 0x10 */
+ mx28_reg_32(hw_lcdif_ctrl2) /* 0x20 */
+ mx28_reg_32(hw_lcdif_transfer_count) /* 0x30 */
+ mx28_reg_32(hw_lcdif_cur_buf) /* 0x40 */
+ mx28_reg_32(hw_lcdif_next_buf) /* 0x50 */
+ mx28_reg_32(hw_lcdif_timing) /* 0x60 */
+ mx28_reg_32(hw_lcdif_vdctrl0) /* 0x70 */
+ mx28_reg_32(hw_lcdif_vdctrl1) /* 0x80 */
+ mx28_reg_32(hw_lcdif_vdctrl2) /* 0x90 */
+ mx28_reg_32(hw_lcdif_vdctrl3) /* 0xa0 */
+ mx28_reg_32(hw_lcdif_vdctrl4) /* 0xb0 */
+ mx28_reg_32(hw_lcdif_dvictrl0) /* 0xc0 */
+ mx28_reg_32(hw_lcdif_dvictrl1) /* 0xd0 */
+ mx28_reg_32(hw_lcdif_dvictrl2) /* 0xe0 */
+ mx28_reg_32(hw_lcdif_dvictrl3) /* 0xf0 */
+ mx28_reg_32(hw_lcdif_dvictrl4) /* 0x100 */
+ mx28_reg_32(hw_lcdif_csc_coeffctrl0) /* 0x110 */
+ mx28_reg_32(hw_lcdif_csc_coeffctrl1) /* 0x120 */
+ mx28_reg_32(hw_lcdif_csc_coeffctrl2) /* 0x130 */
+ mx28_reg_32(hw_lcdif_csc_coeffctrl3) /* 0x140 */
+ mx28_reg_32(hw_lcdif_csc_coeffctrl4) /* 0x150 */
+ mx28_reg_32(hw_lcdif_csc_offset) /* 0x160 */
+ mx28_reg_32(hw_lcdif_csc_limit) /* 0x170 */
+ mx28_reg_32(hw_lcdif_data) /* 0x180 */
+ mx28_reg_32(hw_lcdif_bm_error_stat) /* 0x190 */
+ mx28_reg_32(hw_lcdif_crc_stat) /* 0x1a0 */
+ mx28_reg_32(hw_lcdif_lcdif_stat) /* 0x1b0 */
+ mx28_reg_32(hw_lcdif_version) /* 0x1c0 */
+ mx28_reg_32(hw_lcdif_debug0) /* 0x1d0 */
+ mx28_reg_32(hw_lcdif_debug1) /* 0x1e0 */
+ mx28_reg_32(hw_lcdif_debug2) /* 0x1f0 */
+};
+#endif
+
+#define LCDIF_CTRL_SFTRST (1 << 31)
+#define LCDIF_CTRL_CLKGATE (1 << 30)
+#define LCDIF_CTRL_YCBCR422_INPUT (1 << 29)
+#define LCDIF_CTRL_READ_WRITEB (1 << 28)
+#define LCDIF_CTRL_WAIT_FOR_VSYNC_EDGE (1 << 27)
+#define LCDIF_CTRL_DATA_SHIFT_DIR (1 << 26)
+#define LCDIF_CTRL_SHIFT_NUM_BITS_MASK (0x1f << 21)
+#define LCDIF_CTRL_SHIFT_NUM_BITS_OFFSET 21
+#define LCDIF_CTRL_DVI_MODE (1 << 20)
+#define LCDIF_CTRL_BYPASS_COUNT (1 << 19)
+#define LCDIF_CTRL_VSYNC_MODE (1 << 18)
+#define LCDIF_CTRL_DOTCLK_MODE (1 << 17)
+#define LCDIF_CTRL_DATA_SELECT (1 << 16)
+#define LCDIF_CTRL_INPUT_DATA_SWIZZLE_MASK (0x3 << 14)
+#define LCDIF_CTRL_INPUT_DATA_SWIZZLE_OFFSET 14
+#define LCDIF_CTRL_CSC_DATA_SWIZZLE_MASK (0x3 << 12)
+#define LCDIF_CTRL_CSC_DATA_SWIZZLE_OFFSET 12
+#define LCDIF_CTRL_LCD_DATABUS_WIDTH_MASK (0x3 << 10)
+#define LCDIF_CTRL_LCD_DATABUS_WIDTH_OFFSET 10
+#define LCDIF_CTRL_LCD_DATABUS_WIDTH_16BIT (0 << 10)
+#define LCDIF_CTRL_LCD_DATABUS_WIDTH_8BIT (1 << 10)
+#define LCDIF_CTRL_LCD_DATABUS_WIDTH_18BIT (2 << 10)
+#define LCDIF_CTRL_LCD_DATABUS_WIDTH_24BIT (3 << 10)
+#define LCDIF_CTRL_WORD_LENGTH_MASK (0x3 << 8)
+#define LCDIF_CTRL_WORD_LENGTH_OFFSET 8
+#define LCDIF_CTRL_WORD_LENGTH_16BIT (0 << 8)
+#define LCDIF_CTRL_WORD_LENGTH_8BIT (1 << 8)
+#define LCDIF_CTRL_WORD_LENGTH_18BIT (2 << 8)
+#define LCDIF_CTRL_WORD_LENGTH_24BIT (3 << 8)
+#define LCDIF_CTRL_RGB_TO_YCBCR422_CSC (1 << 7)
+#define LCDIF_CTRL_LCDIF_MASTER (1 << 5)
+#define LCDIF_CTRL_DATA_FORMAT_16_BIT (1 << 3)
+#define LCDIF_CTRL_DATA_FORMAT_18_BIT (1 << 2)
+#define LCDIF_CTRL_DATA_FORMAT_24_BIT (1 << 1)
+#define LCDIF_CTRL_RUN (1 << 0)
+
+#define LCDIF_CTRL1_COMBINE_MPU_WR_STRB (1 << 27)
+#define LCDIF_CTRL1_BM_ERROR_IRQ_EN (1 << 26)
+#define LCDIF_CTRL1_BM_ERROR_IRQ (1 << 25)
+#define LCDIF_CTRL1_RECOVER_ON_UNDERFLOW (1 << 24)
+#define LCDIF_CTRL1_INTERLACE_FIELDS (1 << 23)
+#define LCDIF_CTRL1_START_INTERLACE_FROM_SECOND_FIELD (1 << 22)
+#define LCDIF_CTRL1_FIFO_CLEAR (1 << 21)
+#define LCDIF_CTRL1_IRQ_ON_ALTERNATE_FIELDS (1 << 20)
+#define LCDIF_CTRL1_BYTE_PACKING_FORMAT_MASK (0xf << 16)
+#define LCDIF_CTRL1_BYTE_PACKING_FORMAT_OFFSET 16
+#define LCDIF_CTRL1_OVERFLOW_IRQ_EN (1 << 15)
+#define LCDIF_CTRL1_UNDERFLOW_IRQ_EN (1 << 14)
+#define LCDIF_CTRL1_CUR_FRAME_DONE_IRQ_EN (1 << 13)
+#define LCDIF_CTRL1_VSYNC_EDGE_IRQ_EN (1 << 12)
+#define LCDIF_CTRL1_OVERFLOW_IRQ (1 << 11)
+#define LCDIF_CTRL1_UNDERFLOW_IRQ (1 << 10)
+#define LCDIF_CTRL1_CUR_FRAME_DONE_IRQ (1 << 9)
+#define LCDIF_CTRL1_VSYNC_EDGE_IRQ (1 << 8)
+#define LCDIF_CTRL1_BUSY_ENABLE (1 << 2)
+#define LCDIF_CTRL1_MODE86 (1 << 1)
+#define LCDIF_CTRL1_RESET (1 << 0)
+
+#define LCDIF_CTRL2_OUTSTANDING_REQS_MASK (0x7 << 21)
+#define LCDIF_CTRL2_OUTSTANDING_REQS_OFFSET 21
+#define LCDIF_CTRL2_OUTSTANDING_REQS_REQ_1 (0x0 << 21)
+#define LCDIF_CTRL2_OUTSTANDING_REQS_REQ_2 (0x1 << 21)
+#define LCDIF_CTRL2_OUTSTANDING_REQS_REQ_4 (0x2 << 21)
+#define LCDIF_CTRL2_OUTSTANDING_REQS_REQ_8 (0x3 << 21)
+#define LCDIF_CTRL2_OUTSTANDING_REQS_REQ_16 (0x4 << 21)
+#define LCDIF_CTRL2_BURST_LEN_8 (1 << 20)
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_MASK (0x7 << 16)
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_OFFSET 16
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_RGB (0x0 << 16)
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_RBG (0x1 << 16)
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_GBR (0x2 << 16)
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_GRB (0x3 << 16)
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_BRG (0x4 << 16)
+#define LCDIF_CTRL2_ODD_LINE_PATTERN_BGR (0x5 << 16)
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_MASK (0x7 << 12)
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_OFFSET 12
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_RGB (0x0 << 12)
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_RBG (0x1 << 12)
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_GBR (0x2 << 12)
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_GRB (0x3 << 12)
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_BRG (0x4 << 12)
+#define LCDIF_CTRL2_EVEN_LINE_PATTERN_BGR (0x5 << 12)
+#define LCDIF_CTRL2_READ_PACK_DIR (1 << 10)
+#define LCDIF_CTRL2_READ_MODE_OUTPUT_IN_RGB_FORMAT (1 << 9)
+#define LCDIF_CTRL2_READ_MODE_6_BIT_INPUT (1 << 8)
+#define LCDIF_CTRL2_READ_MODE_NUM_PACKED_SUBWORDS_MASK (0x7 << 4)
+#define LCDIF_CTRL2_READ_MODE_NUM_PACKED_SUBWORDS_OFFSET 4
+#define LCDIF_CTRL2_INITIAL_DUMMY_READ_MASK (0x7 << 1)
+#define LCDIF_CTRL2_INITIAL_DUMMY_READ_OFFSET 1
+
+#define LCDIF_TRANSFER_COUNT_V_COUNT_MASK (0xffff << 16)
+#define LCDIF_TRANSFER_COUNT_V_COUNT_OFFSET 16
+#define LCDIF_TRANSFER_COUNT_H_COUNT_MASK (0xffff << 0)
+#define LCDIF_TRANSFER_COUNT_H_COUNT_OFFSET 0
+
+#define LCDIF_CUR_BUF_ADDR_MASK 0xffffffff
+#define LCDIF_CUR_BUF_ADDR_OFFSET 0
+
+#define LCDIF_NEXT_BUF_ADDR_MASK 0xffffffff
+#define LCDIF_NEXT_BUF_ADDR_OFFSET 0
+
+#define LCDIF_TIMING_CMD_HOLD_MASK (0xff << 24)
+#define LCDIF_TIMING_CMD_HOLD_OFFSET 24
+#define LCDIF_TIMING_CMD_SETUP_MASK (0xff << 16)
+#define LCDIF_TIMING_CMD_SETUP_OFFSET 16
+#define LCDIF_TIMING_DATA_HOLD_MASK (0xff << 8)
+#define LCDIF_TIMING_DATA_HOLD_OFFSET 8
+#define LCDIF_TIMING_DATA_SETUP_MASK (0xff << 0)
+#define LCDIF_TIMING_DATA_SETUP_OFFSET 0
+
+#define LCDIF_VDCTRL0_VSYNC_OEB (1 << 29)
+#define LCDIF_VDCTRL0_ENABLE_PRESENT (1 << 28)
+#define LCDIF_VDCTRL0_VSYNC_POL (1 << 27)
+#define LCDIF_VDCTRL0_HSYNC_POL (1 << 26)
+#define LCDIF_VDCTRL0_DOTCLK_POL (1 << 25)
+#define LCDIF_VDCTRL0_ENABLE_POL (1 << 24)
+#define LCDIF_VDCTRL0_VSYNC_PERIOD_UNIT (1 << 21)
+#define LCDIF_VDCTRL0_VSYNC_PULSE_WIDTH_UNIT (1 << 20)
+#define LCDIF_VDCTRL0_HALF_LINE (1 << 19)
+#define LCDIF_VDCTRL0_HALF_LINE_MODE (1 << 18)
+#define LCDIF_VDCTRL0_VSYNC_PULSE_WIDTH_MASK 0x3ffff
+#define LCDIF_VDCTRL0_VSYNC_PULSE_WIDTH_OFFSET 0
+
+#define LCDIF_VDCTRL1_VSYNC_PERIOD_MASK 0xffffffff
+#define LCDIF_VDCTRL1_VSYNC_PERIOD_OFFSET 0
+
+#define LCDIF_VDCTRL2_HSYNC_PULSE_WIDTH_MASK (0x3fff << 18)
+#define LCDIF_VDCTRL2_HSYNC_PULSE_WIDTH_OFFSET 18
+#define LCDIF_VDCTRL2_HSYNC_PERIOD_MASK 0x3ffff
+#define LCDIF_VDCTRL2_HSYNC_PERIOD_OFFSET 0
+
+#define LCDIF_VDCTRL3_MUX_SYNC_SIGNALS (1 << 29)
+#define LCDIF_VDCTRL3_VSYNC_ONLY (1 << 28)
+#define LCDIF_VDCTRL3_HORIZONTAL_WAIT_CNT_MASK (0xfff << 16)
+#define LCDIF_VDCTRL3_HORIZONTAL_WAIT_CNT_OFFSET 16
+#define LCDIF_VDCTRL3_VERTICAL_WAIT_CNT_MASK (0xffff << 0)
+#define LCDIF_VDCTRL3_VERTICAL_WAIT_CNT_OFFSET 0
+
+#define LCDIF_VDCTRL4_DOTCLK_DLY_SEL_MASK (0x7 << 29)
+#define LCDIF_VDCTRL4_DOTCLK_DLY_SEL_OFFSET 29
+#define LCDIF_VDCTRL4_SYNC_SIGNALS_ON (1 << 18)
+#define LCDIF_VDCTRL4_DOTCLK_H_VALID_DATA_CNT_MASK 0x3ffff
+#define LCDIF_VDCTRL4_DOTCLK_H_VALID_DATA_CNT_OFFSET 0
+
+#endif /* __MX28_REGS_LCDIF_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/regs-lradc.h b/arch/arm/include/asm/arch-mx28/regs-lradc.h
new file mode 100644
index 0000000000..16e2bbf4cb
--- /dev/null
+++ b/arch/arm/include/asm/arch-mx28/regs-lradc.h
@@ -0,0 +1,400 @@
+/*
+ * Freescale i.MX28 LRADC Register Definitions
+ *
+ * Copyright (C) 2011 Marek Vasut <marek.vasut@gmail.com>
+ * on behalf of DENX Software Engineering GmbH
+ *
+ * Based on code from LTIB:
+ * Copyright 2008-2009 Freescale Semiconductor, Inc. All Rights Reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef __MX28_REGS_LRADC_H__
+#define __MX28_REGS_LRADC_H__
+
+#include <asm/arch/regs-common.h>
+
+#ifndef __ASSEMBLY__
+struct mx28_lradc_regs {
+ mx28_reg_32(hw_lradc_ctrl0);
+ mx28_reg_32(hw_lradc_ctrl1);
+ mx28_reg_32(hw_lradc_ctrl2);
+ mx28_reg_32(hw_lradc_ctrl3);
+ mx28_reg_32(hw_lradc_status);
+ mx28_reg_32(hw_lradc_ch0);
+ mx28_reg_32(hw_lradc_ch1);
+ mx28_reg_32(hw_lradc_ch2);
+ mx28_reg_32(hw_lradc_ch3);
+ mx28_reg_32(hw_lradc_ch4);
+ mx28_reg_32(hw_lradc_ch5);
+ mx28_reg_32(hw_lradc_ch6);
+ mx28_reg_32(hw_lradc_ch7);
+ mx28_reg_32(hw_lradc_delay0);
+ mx28_reg_32(hw_lradc_delay1);
+ mx28_reg_32(hw_lradc_delay2);
+ mx28_reg_32(hw_lradc_delay3);
+ mx28_reg_32(hw_lradc_debug0);
+ mx28_reg_32(hw_lradc_debug1);
+ mx28_reg_32(hw_lradc_conversion);
+ mx28_reg_32(hw_lradc_ctrl4);
+ mx28_reg_32(hw_lradc_treshold0);
+ mx28_reg_32(hw_lradc_treshold1);
+ mx28_reg_32(hw_lradc_version);
+};
+#endif
+
+#define LRADC_CTRL0_SFTRST (1 << 31)
+#define LRADC_CTRL0_CLKGATE (1 << 30)
+#define LRADC_CTRL0_ONCHIP_GROUNDREF (1 << 26)
+#define LRADC_CTRL0_BUTTON1_DETECT_ENABLE (1 << 25)
+#define LRADC_CTRL0_BUTTON0_DETECT_ENABLE (1 << 24)
+#define LRADC_CTRL0_TOUCH_DETECT_ENABLE (1 << 23)
+#define LRADC_CTRL0_TOUCH_SCREEN_TYPE (1 << 22)
+#define LRADC_CTRL0_YNLRSW (1 << 21)
+#define LRADC_CTRL0_YPLLSW_MASK (0x3 << 19)
+#define LRADC_CTRL0_YPLLSW_OFFSET 19
+#define LRADC_CTRL0_XNURSW_MASK (0x3 << 17)
+#define LRADC_CTRL0_XNURSW_OFFSET 17
+#define LRADC_CTRL0_XPULSW (1 << 16)
+#define LRADC_CTRL0_SCHEDULE_MASK 0xff
+#define LRADC_CTRL0_SCHEDULE_OFFSET 0
+
+#define LRADC_CTRL1_BUTTON1_DETECT_IRQ_EN (1 << 28)
+#define LRADC_CTRL1_BUTTON0_DETECT_IRQ_EN (1 << 27)
+#define LRADC_CTRL1_THRESHOLD1_DETECT_IRQ_EN (1 << 26)
+#define LRADC_CTRL1_THRESHOLD0_DETECT_IRQ_EN (1 << 25)
+#define LRADC_CTRL1_TOUCH_DETECT_IRQ_EN (1 << 24)
+#define LRADC_CTRL1_LRADC7_IRQ_EN (1 << 23)
+#define LRADC_CTRL1_LRADC6_IRQ_EN (1 << 22)
+#define LRADC_CTRL1_LRADC5_IRQ_EN (1 << 21)
+#define LRADC_CTRL1_LRADC4_IRQ_EN (1 << 20)
+#define LRADC_CTRL1_LRADC3_IRQ_EN (1 << 19)
+#define LRADC_CTRL1_LRADC2_IRQ_EN (1 << 18)
+#define LRADC_CTRL1_LRADC1_IRQ_EN (1 << 17)
+#define LRADC_CTRL1_LRADC0_IRQ_EN (1 << 16)
+#define LRADC_CTRL1_BUTTON1_DETECT_IRQ (1 << 12)
+#define LRADC_CTRL1_BUTTON0_DETECT_IRQ (1 << 11)
+#define LRADC_CTRL1_THRESHOLD1_DETECT_IRQ (1 << 10)
+#define LRADC_CTRL1_THRESHOLD0_DETECT_IRQ (1 << 9)
+#define LRADC_CTRL1_TOUCH_DETECT_IRQ (1 << 8)
+#define LRADC_CTRL1_LRADC7_IRQ (1 << 7)
+#define LRADC_CTRL1_LRADC6_IRQ (1 << 6)
+#define LRADC_CTRL1_LRADC5_IRQ (1 << 5)
+#define LRADC_CTRL1_LRADC4_IRQ (1 << 4)
+#define LRADC_CTRL1_LRADC3_IRQ (1 << 3)
+#define LRADC_CTRL1_LRADC2_IRQ (1 << 2)
+#define LRADC_CTRL1_LRADC1_IRQ (1 << 1)
+#define LRADC_CTRL1_LRADC0_IRQ (1 << 0)
+
+#define LRADC_CTRL2_DIVIDE_BY_TWO_MASK (0xff << 24)
+#define LRADC_CTRL2_DIVIDE_BY_TWO_OFFSET 24
+#define LRADC_CTRL2_TEMPSENSE_PWD (1 << 15)
+#define LRADC_CTRL2_VTHSENSE_MASK (0x3 << 13)
+#define LRADC_CTRL2_VTHSENSE_OFFSET 13
+#define LRADC_CTRL2_DISABLE_MUXAMP_BYPASS (1 << 12)
+#define LRADC_CTRL2_TEMP_SENSOR_IENABLE1 (1 << 9)
+#define LRADC_CTRL2_TEMP_SENSOR_IENABLE0 (1 << 8)
+#define LRADC_CTRL2_TEMP_ISRC1_MASK (0xf << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_OFFSET 4
+#define LRADC_CTRL2_TEMP_ISRC1_300 (0xf << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_280 (0xe << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_260 (0xd << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_240 (0xc << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_220 (0xb << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_200 (0xa << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_180 (0x9 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_160 (0x8 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_140 (0x7 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_120 (0x6 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_100 (0x5 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_80 (0x4 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_60 (0x3 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_40 (0x2 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_20 (0x1 << 4)
+#define LRADC_CTRL2_TEMP_ISRC1_ZERO (0x0 << 4)
+#define LRADC_CTRL2_TEMP_ISRC0_MASK (0xf << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_OFFSET 0
+#define LRADC_CTRL2_TEMP_ISRC0_300 (0xf << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_280 (0xe << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_260 (0xd << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_240 (0xc << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_220 (0xb << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_200 (0xa << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_180 (0x9 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_160 (0x8 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_140 (0x7 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_120 (0x6 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_100 (0x5 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_80 (0x4 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_60 (0x3 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_40 (0x2 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_20 (0x1 << 0)
+#define LRADC_CTRL2_TEMP_ISRC0_ZERO (0x0 << 0)
+
+#define LRADC_CTRL3_DISCARD_MASK (0x3 << 24)
+#define LRADC_CTRL3_DISCARD_OFFSET 24
+#define LRADC_CTRL3_DISCARD_1_SAMPLE (0x1 << 24)
+#define LRADC_CTRL3_DISCARD_2_SAMPLES (0x2 << 24)
+#define LRADC_CTRL3_DISCARD_3_SAMPLES (0x3 << 24)
+#define LRADC_CTRL3_FORCE_ANALOG_PWUP (1 << 23)
+#define LRADC_CTRL3_FORCE_ANALOG_PWDN (1 << 22)
+#define LRADC_CTRL3_CYCLE_TIME_MASK (0x3 << 8)
+#define LRADC_CTRL3_CYCLE_TIME_OFFSET 8
+#define LRADC_CTRL3_CYCLE_TIME_6MHZ (0x0 << 8)
+#define LRADC_CTRL3_CYCLE_TIME_4MHZ (0x1 << 8)
+#define LRADC_CTRL3_CYCLE_TIME_3MHZ (0x2 << 8)
+#define LRADC_CTRL3_CYCLE_TIME_2MHZ (0x3 << 8)
+#define LRADC_CTRL3_HIGH_TIME_MASK (0x3 << 4)
+#define LRADC_CTRL3_HIGH_TIME_OFFSET 4
+#define LRADC_CTRL3_HIGH_TIME_42NS (0x0 << 4)
+#define LRADC_CTRL3_HIGH_TIME_83NS (0x1 << 4)
+#define LRADC_CTRL3_HIGH_TIME_125NS (0x2 << 4)
+#define LRADC_CTRL3_HIGH_TIME_250NS (0x3 << 4)
+#define LRADC_CTRL3_DELAY_CLOCK (1 << 1)
+#define LRADC_CTRL3_INVERT_CLOCK (1 << 0)
+
+#define LRADC_STATUS_BUTTON1_PRESENT (1 << 28)
+#define LRADC_STATUS_BUTTON0_PRESENT (1 << 27)
+#define LRADC_STATUS_TEMP1_PRESENT (1 << 26)
+#define LRADC_STATUS_TEMP0_PRESENT (1 << 25)
+#define LRADC_STATUS_TOUCH_PANEL_PRESENT (1 << 24)
+#define LRADC_STATUS_CHANNEL7_PRESENT (1 << 23)
+#define LRADC_STATUS_CHANNEL6_PRESENT (1 << 22)
+#define LRADC_STATUS_CHANNEL5_PRESENT (1 << 21)
+#define LRADC_STATUS_CHANNEL4_PRESENT (1 << 20)
+#define LRADC_STATUS_CHANNEL3_PRESENT (1 << 19)
+#define LRADC_STATUS_CHANNEL2_PRESENT (1 << 18)
+#define LRADC_STATUS_CHANNEL1_PRESENT (1 << 17)
+#define LRADC_STATUS_CHANNEL0_PRESENT (1 << 16)
+#define LRADC_STATUS_BUTTON1_DETECT_RAW (1 << 2)
+#define LRADC_STATUS_BUTTON0_DETECT_RAW (1 << 1)
+#define LRADC_STATUS_TOUCH_DETECT_RAW (1 << 0)
+
+#define LRADC_CH_TOGGLE (1 << 31)
+#define LRADC_CH7_TESTMODE_TOGGLE (1 << 30)
+#define LRADC_CH_ACCUMULATE (1 << 29)
+#define LRADC_CH_NUM_SAMPLES_MASK (0x1f << 24)
+#define LRADC_CH_NUM_SAMPLES_OFFSET 24
+#define LRADC_CH_VALUE_MASK 0x3ffff
+#define LRADC_CH_VALUE_OFFSET 0
+
+#define LRADC_DELAY_TRIGGER_LRADCS_MASK (0xff << 24)
+#define LRADC_DELAY_TRIGGER_LRADCS_OFFSET 24
+#define LRADC_DELAY_KICK (1 << 20)
+#define LRADC_DELAY_TRIGGER_DELAYS_MASK (0xf << 16)
+#define LRADC_DELAY_TRIGGER_DELAYS_OFFSET 16
+#define LRADC_DELAY_LOOP_COUNT_MASK (0x1f << 11)
+#define LRADC_DELAY_LOOP_COUNT_OFFSET 11
+#define LRADC_DELAY_DELAY_MASK 0x7ff
+#define LRADC_DELAY_DELAY_OFFSET 0
+
+#define LRADC_DEBUG0_READONLY_MASK (0xffff << 16)
+#define LRADC_DEBUG0_READONLY_OFFSET 16
+#define LRADC_DEBUG0_STATE_MASK (0xfff << 0)
+#define LRADC_DEBUG0_STATE_OFFSET 0
+
+#define LRADC_DEBUG1_REQUEST_MASK (0xff << 16)
+#define LRADC_DEBUG1_REQUEST_OFFSET 16
+#define LRADC_DEBUG1_TESTMODE_COUNT_MASK (0x1f << 8)
+#define LRADC_DEBUG1_TESTMODE_COUNT_OFFSET 8
+#define LRADC_DEBUG1_TESTMODE6 (1 << 2)
+#define LRADC_DEBUG1_TESTMODE5 (1 << 1)
+#define LRADC_DEBUG1_TESTMODE (1 << 0)
+
+#define LRADC_CONVERSION_AUTOMATIC (1 << 20)
+#define LRADC_CONVERSION_SCALE_FACTOR_MASK (0x3 << 16)
+#define LRADC_CONVERSION_SCALE_FACTOR_OFFSET 16
+#define LRADC_CONVERSION_SCALE_FACTOR_NIMH (0x0 << 16)
+#define LRADC_CONVERSION_SCALE_FACTOR_DUAL_NIMH (0x1 << 16)
+#define LRADC_CONVERSION_SCALE_FACTOR_LI_ION (0x2 << 16)
+#define LRADC_CONVERSION_SCALE_FACTOR_ALT_LI_ION (0x3 << 16)
+#define LRADC_CONVERSION_SCALED_BATT_VOLTAGE_MASK 0x3ff
+#define LRADC_CONVERSION_SCALED_BATT_VOLTAGE_OFFSET 0
+
+#define LRADC_CTRL4_LRADC7SELECT_MASK (0xf << 28)
+#define LRADC_CTRL4_LRADC7SELECT_OFFSET 28
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL0 (0x0 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL1 (0x1 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL2 (0x2 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL3 (0x3 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL4 (0x4 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL5 (0x5 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL6 (0x6 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL7 (0x7 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL8 (0x8 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL9 (0x9 << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL10 (0xa << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL11 (0xb << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL12 (0xc << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL13 (0xd << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL14 (0xe << 28)
+#define LRADC_CTRL4_LRADC7SELECT_CHANNEL15 (0xf << 28)
+#define LRADC_CTRL4_LRADC6SELECT_MASK (0xf << 24)
+#define LRADC_CTRL4_LRADC6SELECT_OFFSET 24
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL0 (0x0 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL1 (0x1 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL2 (0x2 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL3 (0x3 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL4 (0x4 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL5 (0x5 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL6 (0x6 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL7 (0x7 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL8 (0x8 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL9 (0x9 << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL10 (0xa << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL11 (0xb << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL12 (0xc << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL13 (0xd << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL14 (0xe << 24)
+#define LRADC_CTRL4_LRADC6SELECT_CHANNEL15 (0xf << 24)
+#define LRADC_CTRL4_LRADC5SELECT_MASK (0xf << 20)
+#define LRADC_CTRL4_LRADC5SELECT_OFFSET 20
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL0 (0x0 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL1 (0x1 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL2 (0x2 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL3 (0x3 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL4 (0x4 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL5 (0x5 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL6 (0x6 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL7 (0x7 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL8 (0x8 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL9 (0x9 << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL10 (0xa << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL11 (0xb << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL12 (0xc << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL13 (0xd << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL14 (0xe << 20)
+#define LRADC_CTRL4_LRADC5SELECT_CHANNEL15 (0xf << 20)
+#define LRADC_CTRL4_LRADC4SELECT_MASK (0xf << 16)
+#define LRADC_CTRL4_LRADC4SELECT_OFFSET 16
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL0 (0x0 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL1 (0x1 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL2 (0x2 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL3 (0x3 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL4 (0x4 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL5 (0x5 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL6 (0x6 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL7 (0x7 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL8 (0x8 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL9 (0x9 << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL10 (0xa << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL11 (0xb << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL12 (0xc << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL13 (0xd << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL14 (0xe << 16)
+#define LRADC_CTRL4_LRADC4SELECT_CHANNEL15 (0xf << 16)
+#define LRADC_CTRL4_LRADC3SELECT_MASK (0xf << 12)
+#define LRADC_CTRL4_LRADC3SELECT_OFFSET 12
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL0 (0x0 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL1 (0x1 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL2 (0x2 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL3 (0x3 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL4 (0x4 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL5 (0x5 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL6 (0x6 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL7 (0x7 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL8 (0x8 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL9 (0x9 << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL10 (0xa << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL11 (0xb << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL12 (0xc << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL13 (0xd << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL14 (0xe << 12)
+#define LRADC_CTRL4_LRADC3SELECT_CHANNEL15 (0xf << 12)
+#define LRADC_CTRL4_LRADC2SELECT_MASK (0xf << 8)
+#define LRADC_CTRL4_LRADC2SELECT_OFFSET 8
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL0 (0x0 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL1 (0x1 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL2 (0x2 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL3 (0x3 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL4 (0x4 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL5 (0x5 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL6 (0x6 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL7 (0x7 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL8 (0x8 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL9 (0x9 << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL10 (0xa << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL11 (0xb << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL12 (0xc << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL13 (0xd << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL14 (0xe << 8)
+#define LRADC_CTRL4_LRADC2SELECT_CHANNEL15 (0xf << 8)
+#define LRADC_CTRL4_LRADC1SELECT_MASK (0xf << 4)
+#define LRADC_CTRL4_LRADC1SELECT_OFFSET 4
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL0 (0x0 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL1 (0x1 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL2 (0x2 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL3 (0x3 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL4 (0x4 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL5 (0x5 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL6 (0x6 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL7 (0x7 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL8 (0x8 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL9 (0x9 << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL10 (0xa << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL11 (0xb << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL12 (0xc << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL13 (0xd << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL14 (0xe << 4)
+#define LRADC_CTRL4_LRADC1SELECT_CHANNEL15 (0xf << 4)
+#define LRADC_CTRL4_LRADC0SELECT_MASK 0xf
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL0 (0x0 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL1 (0x1 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL2 (0x2 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL3 (0x3 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL4 (0x4 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL5 (0x5 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL6 (0x6 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL7 (0x7 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL8 (0x8 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL9 (0x9 << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL10 (0xa << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL11 (0xb << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL12 (0xc << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL13 (0xd << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL14 (0xe << 0)
+#define LRADC_CTRL4_LRADC0SELECT_CHANNEL15 (0xf << 0)
+
+#define LRADC_THRESHOLD_ENABLE (1 << 24)
+#define LRADC_THRESHOLD_BATTCHRG_DISABLE (1 << 23)
+#define LRADC_THRESHOLD_CHANNEL_SEL_MASK (0x7 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_OFFSET 20
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL0 (0x0 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL1 (0x1 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL2 (0x2 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL3 (0x3 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL4 (0x4 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL5 (0x5 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL6 (0x6 << 20)
+#define LRADC_THRESHOLD_CHANNEL_SEL_CHANNEL7 (0x7 << 20)
+#define LRADC_THRESHOLD_SETTING_MASK (0x3 << 18)
+#define LRADC_THRESHOLD_SETTING_OFFSET 18
+#define LRADC_THRESHOLD_SETTING_NO_COMPARE (0x0 << 18)
+#define LRADC_THRESHOLD_SETTING_DETECT_LOW (0x1 << 18)
+#define LRADC_THRESHOLD_SETTING_DETECT_HIGH (0x2 << 18)
+#define LRADC_THRESHOLD_SETTING_RESERVED (0x3 << 18)
+#define LRADC_THRESHOLD_VALUE_MASK 0x3ffff
+#define LRADC_THRESHOLD_VALUE_OFFSET 0
+
+#define LRADC_VERSION_MAJOR_MASK (0xff << 24)
+#define LRADC_VERSION_MAJOR_OFFSET 24
+#define LRADC_VERSION_MINOR_MASK (0xff << 16)
+#define LRADC_VERSION_MINOR_OFFSET 16
+#define LRADC_VERSION_STEP_MASK 0xffff
+#define LRADC_VERSION_STEP_OFFSET 0
+
+#endif /* __MX28_REGS_LRADC_H__ */
diff --git a/arch/arm/include/asm/arch-mx28/sys_proto.h b/arch/arm/include/asm/arch-mx28/sys_proto.h
index 15d8de31ee..e701c6409e 100644
--- a/arch/arm/include/asm/arch-mx28/sys_proto.h
+++ b/arch/arm/include/asm/arch-mx28/sys_proto.h
@@ -39,6 +39,36 @@ void mx28_common_spl_init(const iomux_cfg_t *iomux_setup,
const unsigned int iomux_size);
#endif
+struct mx28_pair {
+ uint8_t boot_pads;
+ uint8_t boot_mask;
+ const char *mode;
+};
+
+static const struct mx28_pair mx28_boot_modes[] = {
+ { 0x00, 0x0f, "USB #0" },
+ { 0x01, 0x1f, "I2C #0, master, 3V3" },
+ { 0x11, 0x1f, "I2C #0, master, 1V8" },
+ { 0x02, 0x1f, "SSP SPI #2, master, 3V3 NOR" },
+ { 0x12, 0x1f, "SSP SPI #2, master, 1V8 NOR" },
+ { 0x03, 0x1f, "SSP SPI #3, master, 3V3 NOR" },
+ { 0x13, 0x1f, "SSP SPI #3, master, 1V8 NOR" },
+ { 0x04, 0x1f, "NAND, 3V3" },
+ { 0x14, 0x1f, "NAND, 1V8" },
+ { 0x08, 0x1f, "SSP SPI #3, master, 3V3 EEPROM" },
+ { 0x18, 0x1f, "SSP SPI #3, master, 1V8 EEPROM" },
+ { 0x09, 0x1f, "SSP SD/MMC #0, 3V3" },
+ { 0x19, 0x1f, "SSP SD/MMC #0, 1V8" },
+ { 0x0a, 0x1f, "SSP SD/MMC #1, 3V3" },
+ { 0x1a, 0x1f, "SSP SD/MMC #1, 1V8" },
+ { 0x00, 0x00, "Reserved/Unknown/Wrong" },
+};
+
+struct mx28_spl_data {
+ uint8_t boot_mode_idx;
+ uint32_t mem_dram_size;
+};
+
int mx28_dram_init(void);
#endif /* __MX28_H__ */
diff --git a/arch/arm/include/asm/arch-mx5/clock.h b/arch/arm/include/asm/arch-mx5/clock.h
index ea972a3985..35ee8155de 100644
--- a/arch/arm/include/asm/arch-mx5/clock.h
+++ b/arch/arm/include/asm/arch-mx5/clock.h
@@ -32,6 +32,10 @@ enum mxc_clock {
MXC_UART_CLK,
MXC_CSPI_CLK,
MXC_FEC_CLK,
+ MXC_SATA_CLK,
+ MXC_DDR_CLK,
+ MXC_NFC_CLK,
+ MXC_PERIPH_CLK,
};
unsigned int imx_decode_pll(unsigned int pll, unsigned int f_ref);
@@ -39,10 +43,11 @@ unsigned int imx_decode_pll(unsigned int pll, unsigned int f_ref);
u32 imx_get_uartclk(void);
u32 imx_get_fecclk(void);
unsigned int mxc_get_clock(enum mxc_clock clk);
-
+int mxc_set_clock(u32 ref, u32 freq, u32 clk_type);
void set_usb_phy2_clk(void);
void enable_usb_phy2_clk(unsigned char enable);
void set_usboh3_clk(void);
void enable_usboh3_clk(unsigned char enable);
+void mxc_set_sata_internal_clock(void);
#endif /* __ASM_ARCH_CLOCK_H */
diff --git a/arch/arm/include/asm/arch-mx5/crm_regs.h b/arch/arm/include/asm/arch-mx5/crm_regs.h
index bdeafbc0df..4e0fc1bc1d 100644
--- a/arch/arm/include/asm/arch-mx5/crm_regs.h
+++ b/arch/arm/include/asm/arch-mx5/crm_regs.h
@@ -76,6 +76,9 @@ struct mxc_ccm_reg {
u32 CCGR4;
u32 CCGR5;
u32 CCGR6; /* 0x0080 */
+#ifdef CONFIG_MX53
+ u32 CCGR7; /* 0x0084 */
+#endif
u32 cmeor;
};
@@ -84,6 +87,9 @@ struct mxc_ccm_reg {
#define MXC_CCM_CACRR_ARM_PODF_MASK 0x7
/* Define the bits in register CBCDR */
+#define MXC_CCM_CBCDR_DDR_HIFREQ_SEL (0x1 << 30)
+#define MXC_CCM_CBCDR_DDR_PODF_MASK (0x7 << 27)
+#define MXC_CCM_CBCDR_DDR_PODF_OFFSET 27
#define MXC_CCM_CBCDR_EMI_CLK_SEL (0x1 << 26)
#define MXC_CCM_CBCDR_PERIPH_CLK_SEL (0x1 << 25)
#define MXC_CCM_CBCDR_EMI_PODF_OFFSET 22
diff --git a/arch/arm/include/asm/arch-mx5/imx-regs.h b/arch/arm/include/asm/arch-mx5/imx-regs.h
index 4fa66587a0..cef419077e 100644
--- a/arch/arm/include/asm/arch-mx5/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx5/imx-regs.h
@@ -43,6 +43,7 @@
#define NFC_BASE_ADDR_AXI 0xF7FF0000
#define IRAM_BASE_ADDR 0xF8000000
#define CS1_BASE_ADDR 0xF4000000
+#define SATA_BASE_ADDR 0x10000000
#else
#error "CPU_TYPE not defined"
#endif
@@ -93,6 +94,7 @@
#define GPIO5_BASE_ADDR (AIPS1_BASE_ADDR + 0x000DC000)
#define GPIO6_BASE_ADDR (AIPS1_BASE_ADDR + 0x000E0000)
#define GPIO7_BASE_ADDR (AIPS1_BASE_ADDR + 0x000E4000)
+#define UART4_BASE_ADDR (AIPS1_BASE_ADDR + 0x000F0000)
#endif
/*
* AIPS 2
@@ -133,6 +135,10 @@
#define VPU_BASE_ADDR (AIPS2_BASE_ADDR + 0x000F4000)
#define SAHARA_BASE_ADDR (AIPS2_BASE_ADDR + 0x000F8000)
+#if defined(CONFIG_MX53)
+#define UART5_BASE_ADDR (AIPS2_BASE_ADDR + 0x00090000)
+#endif
+
/*
* WEIM CSnGCR1
*/
@@ -485,6 +491,11 @@ struct iim_regs {
} bank[4];
};
+struct fuse_bank0_regs {
+ u32 fuse0_23[24];
+ u32 gp[8];
+};
+
struct fuse_bank1_regs {
u32 fuse0_8[9];
u32 mac_addr[6];
diff --git a/arch/arm/include/asm/arch-mx5/iomux.h b/arch/arm/include/asm/arch-mx5/iomux.h
index 760371b48f..e3765a37e3 100644
--- a/arch/arm/include/asm/arch-mx5/iomux.h
+++ b/arch/arm/include/asm/arch-mx5/iomux.h
@@ -66,8 +66,8 @@ typedef enum iomux_pad_config {
PAD_CTL_HYS_ENABLE = 0x1 << 8, /* Hysteresis enabled */
PAD_CTL_DDR_INPUT_CMOS = 0x0 << 9,/* DDR input CMOS */
PAD_CTL_DDR_INPUT_DDR = 0x1 << 9,/* DDR input DDR */
- PAD_CTL_DRV_VOT_LOW = 0x0 << 13, /* Low voltage mode */
- PAD_CTL_DRV_VOT_HIGH = 0x1 << 13,/* High voltage mode */
+ PAD_CTL_DRV_VOT_LOW = 0x1 << 13, /* Low voltage mode */
+ PAD_CTL_DRV_VOT_HIGH = 0x0 << 13,/* High voltage mode */
} iomux_pad_config_t;
/* various IOMUX input functions */
diff --git a/arch/arm/include/asm/arch-mx5/sys_proto.h b/arch/arm/include/asm/arch-mx5/sys_proto.h
index 13d12ee1a4..7b5246eea6 100644
--- a/arch/arm/include/asm/arch-mx5/sys_proto.h
+++ b/arch/arm/include/asm/arch-mx5/sys_proto.h
@@ -35,5 +35,8 @@ void set_chipselect_size(int const);
*/
int fecmxc_initialize(bd_t *bis);
+u32 get_ahb_clk(void);
+u32 get_periph_clk(void);
+char *get_reset_cause(void);
#endif
diff --git a/arch/arm/include/asm/arch-mx6/clock.h b/arch/arm/include/asm/arch-mx6/clock.h
index 613809bdd6..b91d8bf450 100644
--- a/arch/arm/include/asm/arch-mx6/clock.h
+++ b/arch/arm/include/asm/arch-mx6/clock.h
@@ -47,5 +47,6 @@ u32 imx_get_uartclk(void);
u32 imx_get_fecclk(void);
unsigned int mxc_get_clock(enum mxc_clock clk);
void enable_usboh3_clk(unsigned char enable);
+int enable_sata_clock(void);
#endif /* __ASM_ARCH_CLOCK_H */
diff --git a/arch/arm/include/asm/arch-mx6/ccm_regs.h b/arch/arm/include/asm/arch-mx6/crm_regs.h
index 4af0b90164..0e605c26f5 100644
--- a/arch/arm/include/asm/arch-mx6/ccm_regs.h
+++ b/arch/arm/include/asm/arch-mx6/crm_regs.h
@@ -20,7 +20,7 @@
#ifndef __ARCH_ARM_MACH_MX6_CCM_REGS_H__
#define __ARCH_ARM_MACH_MX6_CCM_REGS_H__
-struct imx_ccm_reg {
+struct mxc_ccm_reg {
u32 ccr; /* 0x0000 */
u32 ccdr;
u32 csr;
diff --git a/arch/arm/include/asm/arch-mx6/imx-regs.h b/arch/arm/include/asm/arch-mx6/imx-regs.h
index 6d25c8d983..e165810ddc 100644
--- a/arch/arm/include/asm/arch-mx6/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx6/imx-regs.h
@@ -436,5 +436,14 @@ struct anatop_regs {
u32 digprog; /* 0x260 */
};
+struct iomuxc_base_regs {
+ u32 gpr[14]; /* 0x000 */
+ u32 obsrv[5]; /* 0x038 */
+ u32 swmux_ctl[197]; /* 0x04c */
+ u32 swpad_ctl[250]; /* 0x360 */
+ u32 swgrp[26]; /* 0x748 */
+ u32 daisy[104]; /* 0x7b0..94c */
+};
+
#endif /* __ASSEMBLER__*/
#endif /* __ASM_ARCH_MX6_IMX_REGS_H__ */
diff --git a/arch/arm/include/asm/arch-mx6/iomux-v3.h b/arch/arm/include/asm/arch-mx6/iomux-v3.h
index 4558f4fba2..788b413219 100644
--- a/arch/arm/include/asm/arch-mx6/iomux-v3.h
+++ b/arch/arm/include/asm/arch-mx6/iomux-v3.h
@@ -100,4 +100,115 @@ typedef u64 iomux_v3_cfg_t;
int imx_iomux_v3_setup_pad(iomux_v3_cfg_t pad);
int imx_iomux_v3_setup_multiple_pads(iomux_v3_cfg_t *pad_list, unsigned count);
+/*
+ * IOMUXC_GPR13 bit fields
+ */
+#define IOMUXC_GPR13_SDMA_STOP_REQ (1<<30)
+#define IOMUXC_GPR13_CAN2_STOP_REQ (1<<29)
+#define IOMUXC_GPR13_CAN1_STOP_REQ (1<<28)
+#define IOMUXC_GPR13_ENET_STOP_REQ (1<<27)
+#define IOMUXC_GPR13_SATA_PHY_8_MASK (7<<24)
+#define IOMUXC_GPR13_SATA_PHY_7_MASK (0x1f<<19)
+#define IOMUXC_GPR13_SATA_PHY_6_SHIFT 16
+#define IOMUXC_GPR13_SATA_PHY_6_MASK (7<<IOMUXC_GPR13_SATA_PHY_6_SHIFT)
+#define IOMUXC_GPR13_SATA_SPEED_MASK (1<<15)
+#define IOMUXC_GPR13_SATA_PHY_5_MASK (1<<14)
+#define IOMUXC_GPR13_SATA_PHY_4_MASK (7<<11)
+#define IOMUXC_GPR13_SATA_PHY_3_MASK (0x1f<<7)
+#define IOMUXC_GPR13_SATA_PHY_2_MASK (0x1f<<2)
+#define IOMUXC_GPR13_SATA_PHY_1_MASK (3<<0)
+
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_0P5DB (0b000<<24)
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_1P0DB (0b001<<24)
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_1P5DB (0b010<<24)
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_2P0DB (0b011<<24)
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_2P5DB (0b100<<24)
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_3P0DB (0b101<<24)
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_3P5DB (0b110<<24)
+#define IOMUXC_GPR13_SATA_PHY_8_RXEQ_4P0DB (0b111<<24)
+
+#define IOMUXC_GPR13_SATA_PHY_7_SATA1I (0b10000<<19)
+#define IOMUXC_GPR13_SATA_PHY_7_SATA1M (0b10000<<19)
+#define IOMUXC_GPR13_SATA_PHY_7_SATA1X (0b11010<<19)
+#define IOMUXC_GPR13_SATA_PHY_7_SATA2I (0b10010<<19)
+#define IOMUXC_GPR13_SATA_PHY_7_SATA2M (0b10010<<19)
+#define IOMUXC_GPR13_SATA_PHY_7_SATA2X (0b11010<<19)
+
+#define IOMUXC_GPR13_SATA_SPEED_1P5G (0<<15)
+#define IOMUXC_GPR13_SATA_SPEED_3G (1<<15)
+
+#define IOMUXC_GPR13_SATA_SATA_PHY_5_SS_DISABLED (0<<14)
+#define IOMUXC_GPR13_SATA_SATA_PHY_5_SS_ENABLED (1<<14)
+
+#define IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_16_16 (0<<11)
+#define IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_14_16 (1<<11)
+#define IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_12_16 (2<<11)
+#define IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_10_16 (3<<11)
+#define IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_9_16 (4<<11)
+#define IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_8_16 (5<<11)
+
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_0P00_DB (0b0000<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_0P37_DB (0b0001<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_0P74_DB (0b0010<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_1P11_DB (0b0011<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_1P48_DB (0b0100<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_1P85_DB (0b0101<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_2P22_DB (0b0110<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_2P59_DB (0b0111<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_2P96_DB (0b1000<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_3P33_DB (0b1001<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_3P70_DB (0b1010<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_4P07_DB (0b1011<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_4P44_DB (0b1100<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_4P81_DB (0b1101<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_5P28_DB (0b1110<<7)
+#define IOMUXC_GPR13_SATA_PHY_3_TXBOOST_5P75_DB (0b1111<<7)
+
+#define IOMUXC_GPR13_SATA_PHY_2_TX_0P937V (0b00000<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_0P947V (0b00001<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_0P957V (0b00010<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_0P966V (0b00011<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_0P976V (0b00100<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_0P986V (0b00101<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_0P996V (0b00110<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P005V (0b00111<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P015V (0b01000<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P025V (0b01001<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P035V (0b01010<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P045V (0b01011<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P054V (0b01100<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P064V (0b01101<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P074V (0b01110<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P084V (0b01111<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P094V (0b10000<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P104V (0b10001<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P113V (0b10010<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P123V (0b10011<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P133V (0b10100<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P143V (0b10101<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P152V (0b10110<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P162V (0b10111<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P172V (0b11000<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P182V (0b11001<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P191V (0b11010<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P201V (0b11011<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P211V (0b11100<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P221V (0b11101<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P230V (0b11110<<2)
+#define IOMUXC_GPR13_SATA_PHY_2_TX_1P240V (0b11111<<2)
+
+#define IOMUXC_GPR13_SATA_PHY_1_FAST 0
+#define IOMUXC_GPR13_SATA_PHY_1_MEDIUM 1
+#define IOMUXC_GPR13_SATA_PHY_1_SLOW 2
+
+#define IOMUXC_GPR13_SATA_MASK (IOMUXC_GPR13_SATA_PHY_8_MASK \
+ |IOMUXC_GPR13_SATA_PHY_7_MASK \
+ |IOMUXC_GPR13_SATA_PHY_6_MASK \
+ |IOMUXC_GPR13_SATA_SPEED_MASK \
+ |IOMUXC_GPR13_SATA_PHY_5_MASK \
+ |IOMUXC_GPR13_SATA_PHY_4_MASK \
+ |IOMUXC_GPR13_SATA_PHY_3_MASK \
+ |IOMUXC_GPR13_SATA_PHY_2_MASK \
+ |IOMUXC_GPR13_SATA_PHY_1_MASK)
+
#endif /* __MACH_IOMUX_V3_H__*/
diff --git a/arch/arm/include/asm/arch-mx6/sys_proto.h b/arch/arm/include/asm/arch-mx6/sys_proto.h
index 668e77af6a..711b30dfe2 100644
--- a/arch/arm/include/asm/arch-mx6/sys_proto.h
+++ b/arch/arm/include/asm/arch-mx6/sys_proto.h
@@ -28,11 +28,14 @@
u32 get_cpu_rev(void);
+void set_vddsoc(u32 mv);
+
/*
* Initializes on-chip ethernet controllers.
* to override, implement board_eth_init()
*/
int fecmxc_initialize(bd_t *bis);
-
+u32 get_ahb_clk(void);
+u32 get_periph_clk(void);
#endif
diff --git a/arch/arm/include/asm/arch-omap3/cpu.h b/arch/arm/include/asm/arch-omap3/cpu.h
index 84308e04b3..457f99d2c5 100644
--- a/arch/arm/include/asm/arch-omap3/cpu.h
+++ b/arch/arm/include/asm/arch-omap3/cpu.h
@@ -474,12 +474,11 @@ struct prm {
u8 res3[0x1c];
u32 clksrc_ctrl; /* 0x1270 */
};
-#else /* __ASSEMBLY__ */
-#define PRM_RSTCTRL 0x48307250
-#define PRM_RSTCTRL_RESET 0x04
#endif /* __ASSEMBLY__ */
#endif /* __KERNEL_STRICT_NAMES */
+#define PRM_RSTCTRL 0x48307250
+#define PRM_RSTCTRL_RESET 0x04
#define SYSCLKDIV_1 (0x1 << 6)
#define SYSCLKDIV_2 (0x1 << 7)
diff --git a/arch/arm/include/asm/arch-omap3/mmc_host_def.h b/arch/arm/include/asm/arch-omap3/mmc_host_def.h
index f8c42c0d20..3ce1f07b8a 100644
--- a/arch/arm/include/asm/arch-omap3/mmc_host_def.h
+++ b/arch/arm/include/asm/arch-omap3/mmc_host_def.h
@@ -33,7 +33,9 @@ typedef struct t2 {
unsigned int devconf0; /* 0x274 */
unsigned char res2[0x060]; /* 0x278 */
unsigned int devconf1; /* 0x2D8 */
- unsigned char res3[0x244]; /* 0x2DC */
+ unsigned char res3[0x16C]; /* 0x2DC */
+ unsigned int ctl_prog_io1; /* 0x448 */
+ unsigned char res4[0x0D4]; /* 0x44C */
unsigned int pbias_lite; /* 0x520 */
} t2_t;
@@ -48,6 +50,8 @@ typedef struct t2 {
#define PBIASSPEEDCTRL0 (1 << 2)
#define PBIASLITEPWRDNZ1 (1 << 9)
+#define CTLPROGIO1SPEEDCTRL (1 << 20)
+
/*
* OMAP HSMMC register definitions
*/
@@ -191,6 +195,6 @@ struct hsmmc {
#define mmc_reg_out(addr, mask, val)\
writel((readl(addr) & (~(mask))) | ((val) & (mask)), (addr))
-int omap_mmc_init(int dev_index);
+int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max);
#endif /* MMC_HOST_DEF_H */
diff --git a/arch/arm/include/asm/arch-omap3/mux.h b/arch/arm/include/asm/arch-omap3/mux.h
index 6daef49e97..71f183de8d 100644
--- a/arch/arm/include/asm/arch-omap3/mux.h
+++ b/arch/arm/include/asm/arch-omap3/mux.h
@@ -445,6 +445,12 @@
#define CONTROL_PADCONF_STRBEN_DLY1 0x0224
#define CONTROL_PADCONF_SYS_BOOT8 0x0226
+/* AM/DM37xx specific */
+#define CONTROL_PADCONF_GPIO127 0x0A54
+#define CONTROL_PADCONF_GPIO126 0x0A56
+#define CONTROL_PADCONF_GPIO128 0x0A58
+#define CONTROL_PADCONF_GPIO129 0x0A5A
+
#define MUX_VAL(OFFSET,VALUE)\
writew((VALUE), OMAP34XX_CTRL_BASE + (OFFSET));
diff --git a/arch/arm/include/asm/arch-omap4/clocks.h b/arch/arm/include/asm/arch-omap4/clocks.h
index cd304e8684..617729c32b 100644
--- a/arch/arm/include/asm/arch-omap4/clocks.h
+++ b/arch/arm/include/asm/arch-omap4/clocks.h
@@ -652,23 +652,9 @@ struct omap4_scrm_regs {
#define OMAP_SYS_CLK_IND_38_4_MHZ 6
#define OMAP_32K_CLK_FREQ 32768
-/* PRM_VC_CFG_I2C_CLK */
-#define PRM_VC_CFG_I2C_CLK_SCLH_SHIFT 0
-#define PRM_VC_CFG_I2C_CLK_SCLH_MASK 0xFF
-#define PRM_VC_CFG_I2C_CLK_SCLL_SHIFT 8
-#define PRM_VC_CFG_I2C_CLK_SCLL_MASK (0xFF << 8)
-
/* PRM_VC_VAL_BYPASS */
#define PRM_VC_I2C_CHANNEL_FREQ_KHZ 400
-#define PRM_VC_VAL_BYPASS_VALID_BIT 0x1000000
-#define PRM_VC_VAL_BYPASS_SLAVEADDR_SHIFT 0
-#define PRM_VC_VAL_BYPASS_SLAVEADDR_MASK 0x7F
-#define PRM_VC_VAL_BYPASS_REGADDR_SHIFT 8
-#define PRM_VC_VAL_BYPASS_REGADDR_MASK 0xFF
-#define PRM_VC_VAL_BYPASS_DATA_SHIFT 16
-#define PRM_VC_VAL_BYPASS_DATA_MASK 0xFF
-
/* SMPS */
#define SMPS_I2C_SLAVE_ADDR 0x12
#define SMPS_REG_ADDR_VCORE1 0x55
@@ -754,10 +740,10 @@ extern struct omap4_prcm_regs *const prcm;
extern const u32 sys_clk_array[8];
void scale_vcores(void);
-void do_scale_tps62361(u32 reg, u32 volt_mv);
+void do_scale_tps62361(int gpio, u32 reg, u32 volt_mv);
+u32 get_offset_code(u32 offset);
u32 omap_ddr_clk(void);
void do_scale_vcore(u32 vcore_reg, u32 volt_mv);
-void setup_sri2c(void);
void setup_post_dividers(u32 *const base, const struct dpll_params *params);
u32 get_sys_clk_index(void);
void enable_basic_clocks(void);
diff --git a/arch/arm/include/asm/arch-omap4/cpu.h b/arch/arm/include/asm/arch-omap4/cpu.h
index 08b9c99353..feddb7de51 100644
--- a/arch/arm/include/asm/arch-omap4/cpu.h
+++ b/arch/arm/include/asm/arch-omap4/cpu.h
@@ -168,4 +168,15 @@ struct watchdog {
#define OMAP_GPIO_CLEARDATAOUT 0x0190
#define OMAP_GPIO_SETDATAOUT 0x0194
+/*
+ * PRCM
+ */
+
+/* PRM */
+#define PRM_BASE 0x4A306000
+#define PRM_DEVICE_BASE (PRM_BASE + 0x1B00)
+
+#define PRM_RSTCTRL PRM_DEVICE_BASE
+#define PRM_RSTCTRL_RESET 0x01
+
#endif /* _CPU_H */
diff --git a/arch/arm/include/asm/arch-omap4/mmc_host_def.h b/arch/arm/include/asm/arch-omap4/mmc_host_def.h
index ce1bce1fdd..2114046e71 100644
--- a/arch/arm/include/asm/arch-omap4/mmc_host_def.h
+++ b/arch/arm/include/asm/arch-omap4/mmc_host_def.h
@@ -169,6 +169,6 @@ struct hsmmc {
#define mmc_reg_out(addr, mask, val)\
writel((readl(addr) & (~(mask))) | ((val) & (mask)), (addr))
-int omap_mmc_init(int dev_index);
+int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max);
#endif /* MMC_HOST_DEF_H */
diff --git a/arch/arm/include/asm/arch-omap4/mux_omap4.h b/arch/arm/include/asm/arch-omap4/mux_omap4.h
index 30bfad7c20..4de7c70bf6 100644
--- a/arch/arm/include/asm/arch-omap4/mux_omap4.h
+++ b/arch/arm/include/asm/arch-omap4/mux_omap4.h
@@ -34,7 +34,7 @@ struct pad_conf_entry {
u16 val;
-} __attribute__ ((packed));
+};
#ifdef CONFIG_OFF_PADCONF
#define OFF_PD (1 << 12)
diff --git a/arch/arm/include/asm/arch-omap4/omap.h b/arch/arm/include/asm/arch-omap4/omap.h
index 416c6de314..47c5883025 100644
--- a/arch/arm/include/asm/arch-omap4/omap.h
+++ b/arch/arm/include/asm/arch-omap4/omap.h
@@ -101,17 +101,6 @@
#define TCLR_AR (0x1 << 1)
#define TCLR_PRE (0x1 << 5)
-/*
- * PRCM
- */
-
-/* PRM */
-#define PRM_BASE 0x4A306000
-#define PRM_DEVICE_BASE (PRM_BASE + 0x1B00)
-
-#define PRM_RSTCTRL PRM_DEVICE_BASE
-#define PRM_RSTCTRL_RESET 0x01
-
/* Control Module */
#define LDOSRAM_ACTMODE_VSET_IN_MASK (0x1F << 5)
#define LDOSRAM_VOLT_CTRL_OVERRIDE 0x0401040f
@@ -139,18 +128,24 @@ struct s32ktimer {
unsigned int s32k_cr; /* 0x10 */
};
-struct omap4_sys_ctrl_regs {
+#define DEVICE_TYPE_SHIFT (0x8)
+#define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT)
+#define DEVICE_GP 0x3
+
+struct omap_sys_ctrl_regs {
unsigned int pad1[129];
unsigned int control_id_code; /* 0x4A002204 */
unsigned int pad11[22];
unsigned int control_std_fuse_opp_bgap; /* 0x4a002260 */
- unsigned int pad2[47];
+ unsigned int pad2[24]; /* 0x4a002264 */
+ unsigned int control_status; /* 0x4a0022c4 */
+ unsigned int pad3[22]; /* 0x4a0022c8 */
unsigned int control_ldosram_iva_voltage_ctrl; /* 0x4A002320 */
unsigned int control_ldosram_mpu_voltage_ctrl; /* 0x4A002324 */
unsigned int control_ldosram_core_voltage_ctrl; /* 0x4A002328 */
- unsigned int pad3[260277];
+ unsigned int pad4[260277];
unsigned int control_pbiaslite; /* 0x4A100600 */
- unsigned int pad4[63];
+ unsigned int pad5[63];
unsigned int control_efuse_1; /* 0x4A100700 */
unsigned int control_efuse_2; /* 0x4A100704 */
};
diff --git a/arch/arm/include/asm/arch-omap4/sys_proto.h b/arch/arm/include/asm/arch-omap4/sys_proto.h
index b8dbc2c9a2..c6e3ad26ff 100644
--- a/arch/arm/include/asm/arch-omap4/sys_proto.h
+++ b/arch/arm/include/asm/arch-omap4/sys_proto.h
@@ -55,6 +55,8 @@ u32 omap_sdram_size(void);
u32 cortex_rev(void);
void init_omap_revision(void);
void do_io_settings(void);
+void omap_vc_init(u16 speed_khz);
+int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data);
/*
* This is used to verify if the configuration header
* was executed by Romcode prior to control of transfer
@@ -112,10 +114,4 @@ static inline u32 omap_hw_init_context(void)
#endif
}
-static inline u32 omap_revision(void)
-{
- extern u32 *const omap4_revision;
- return *omap4_revision;
-}
-
#endif
diff --git a/arch/arm/include/asm/arch-omap5/clocks.h b/arch/arm/include/asm/arch-omap5/clocks.h
index d0e6dd68da..f32cf3eeef 100644
--- a/arch/arm/include/asm/arch-omap5/clocks.h
+++ b/arch/arm/include/asm/arch-omap5/clocks.h
@@ -473,9 +473,11 @@ struct omap5_prcm_regs {
u32 cm_wkup_rtc_clkctrl; /* 4ae07880 */
u32 pad214; /* 4ae07884 */
u32 cm_wkup_bandgap_clkctrl; /* 4ae07888 */
- u32 pad215[197]; /* 4ae0788c */
+ u32 pad215[1]; /* 4ae0788c */
+ u32 cm_wkupaon_scrm_clkctrl; /* 4ae07890 */
+ u32 pad216[195];
u32 prm_vc_val_bypass; /* 4ae07ba0 */
- u32 pad216[4];
+ u32 pad217[4];
u32 prm_vc_cfg_i2c_mode; /* 4ae07bb4 */
u32 prm_vc_cfg_i2c_clk; /* 4ae07bb8 */
};
@@ -514,6 +516,10 @@ struct omap5_prcm_regs {
/* CM_IDLEST_DPLL fields */
#define ST_DPLL_CLK_MASK 1
+/* SGX */
+#define CLKSEL_GPU_HYD_GCLK_MASK (1 << 25)
+#define CLKSEL_GPU_CORE_GCLK_MASK (1 << 24)
+
/* CM_CLKSEL_DPLL */
#define CM_CLKSEL_DPLL_DPLL_SD_DIV_SHIFT 24
#define CM_CLKSEL_DPLL_DPLL_SD_DIV_MASK (0xFF << 24)
@@ -591,6 +597,7 @@ struct omap5_prcm_regs {
/* CM_L3INIT_HSMMCn_CLKCTRL */
#define HSMMC_CLKCTRL_CLKSEL_MASK (1 << 24)
+#define HSMMC_CLKCTRL_CLKSEL_DIV_MASK (1 << 25)
/* CM_WKUP_GPTIMER1_CLKCTRL */
#define GPTIMER1_CLKCTRL_CLKSEL_MASK (1 << 24)
@@ -610,36 +617,33 @@ struct omap5_prcm_regs {
#define MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_SHIFT 25
#define MPU_CLKCTRL_CLKSEL_ABE_DIV_MODE_MASK (1 << 25)
+/* CM_WKUPAON_SCRM_CLKCTRL */
+#define OPTFCLKEN_SCRM_PER_SHIFT 9
+#define OPTFCLKEN_SCRM_PER_MASK (1 << 9)
+#define OPTFCLKEN_SCRM_CORE_SHIFT 8
+#define OPTFCLKEN_SCRM_CORE_MASK (1 << 8)
+
/* Clock frequencies */
#define OMAP_SYS_CLK_FREQ_38_4_MHZ 38400000
#define OMAP_SYS_CLK_IND_38_4_MHZ 6
#define OMAP_32K_CLK_FREQ 32768
-/* PRM_VC_CFG_I2C_CLK */
-#define PRM_VC_CFG_I2C_CLK_SCLH_SHIFT 0
-#define PRM_VC_CFG_I2C_CLK_SCLH_MASK 0xFF
-#define PRM_VC_CFG_I2C_CLK_SCLL_SHIFT 8
-#define PRM_VC_CFG_I2C_CLK_SCLL_MASK (0xFF << 8)
-
/* PRM_VC_VAL_BYPASS */
#define PRM_VC_I2C_CHANNEL_FREQ_KHZ 400
-#define PRM_VC_VAL_BYPASS_VALID_BIT 0x1000000
-#define PRM_VC_VAL_BYPASS_SLAVEADDR_SHIFT 0
-#define PRM_VC_VAL_BYPASS_SLAVEADDR_MASK 0x7F
-#define PRM_VC_VAL_BYPASS_REGADDR_SHIFT 8
-#define PRM_VC_VAL_BYPASS_REGADDR_MASK 0xFF
-#define PRM_VC_VAL_BYPASS_DATA_SHIFT 16
-#define PRM_VC_VAL_BYPASS_DATA_MASK 0xFF
-
/* SMPS */
#define SMPS_I2C_SLAVE_ADDR 0x12
-#define SMPS_REG_ADDR_VCORE1 0x55
-#define SMPS_REG_ADDR_VCORE2 0x5B
-#define SMPS_REG_ADDR_VCORE3 0x61
+#define SMPS_REG_ADDR_12_MPU 0x23
+#define SMPS_REG_ADDR_45_IVA 0x2B
+#define SMPS_REG_ADDR_8_CORE 0x37
+
+/* PALMAS VOLTAGE SETTINGS in mv for OPP_NOMINAL */
+#define VDD_MPU 1000
+#define VDD_MM 1000
+#define VDD_CORE 1040
-#define PHOENIX_SMPS_BASE_VOLT_STD_MODE_UV 607700
-#define PHOENIX_SMPS_BASE_VOLT_STD_MODE_WITH_OFFSET_UV 709000
+/* Standard offset is 0.5v expressed in uv */
+#define PALMAS_SMPS_BASE_VOLT_UV 500000
/* TPS */
#define TPS62361_I2C_SLAVE_ADDR 0x60
@@ -677,7 +681,7 @@ struct dpll_regs {
u32 cm_div_h12_dpll;
u32 cm_div_h13_dpll;
u32 cm_div_h14_dpll;
- u32 reserved[2];
+ u32 reserved[3];
u32 cm_div_h22_dpll;
u32 cm_div_h23_dpll;
};
@@ -700,10 +704,10 @@ extern struct omap5_prcm_regs *const prcm;
extern const u32 sys_clk_array[8];
void scale_vcores(void);
-void do_scale_tps62361(u32 reg, u32 volt_mv);
+void do_scale_tps62361(int gpio, u32 reg, u32 volt_mv);
+u32 get_offset_code(u32 offset);
u32 omap_ddr_clk(void);
void do_scale_vcore(u32 vcore_reg, u32 volt_mv);
-void setup_sri2c(void);
void setup_post_dividers(u32 *const base, const struct dpll_params *params);
u32 get_sys_clk_index(void);
void enable_basic_clocks(void);
diff --git a/arch/arm/include/asm/arch-omap5/cpu.h b/arch/arm/include/asm/arch-omap5/cpu.h
index 0697a732de..8ef17c9a14 100644
--- a/arch/arm/include/asm/arch-omap5/cpu.h
+++ b/arch/arm/include/asm/arch-omap5/cpu.h
@@ -172,4 +172,15 @@ struct watchdog {
#define OMAP_GPIO_CLEARDATAOUT 0x0190
#define OMAP_GPIO_SETDATAOUT 0x0194
+/*
+ * PRCM
+ */
+
+/* PRM */
+#define PRM_BASE 0x4AE06000
+#define PRM_DEVICE_BASE (PRM_BASE + 0x1B00)
+
+#define PRM_RSTCTRL PRM_DEVICE_BASE
+#define PRM_RSTCTRL_RESET 0x01
+
#endif /* _CPU_H */
diff --git a/arch/arm/include/asm/arch-omap5/mmc_host_def.h b/arch/arm/include/asm/arch-omap5/mmc_host_def.h
index ce1bce1fdd..2114046e71 100644
--- a/arch/arm/include/asm/arch-omap5/mmc_host_def.h
+++ b/arch/arm/include/asm/arch-omap5/mmc_host_def.h
@@ -169,6 +169,6 @@ struct hsmmc {
#define mmc_reg_out(addr, mask, val)\
writel((readl(addr) & (~(mask))) | ((val) & (mask)), (addr))
-int omap_mmc_init(int dev_index);
+int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max);
#endif /* MMC_HOST_DEF_H */
diff --git a/arch/arm/include/asm/arch-omap5/mux_omap5.h b/arch/arm/include/asm/arch-omap5/mux_omap5.h
index b8c21853f0..4a6ed8b455 100644
--- a/arch/arm/include/asm/arch-omap5/mux_omap5.h
+++ b/arch/arm/include/asm/arch-omap5/mux_omap5.h
@@ -34,7 +34,7 @@ struct pad_conf_entry {
u16 val;
-} __attribute__ ((__packed__));
+};
#ifdef CONFIG_OFF_PADCONF
#define OFF_PD (1 << 12)
@@ -87,258 +87,256 @@ struct pad_conf_entry {
#define CORE_REVISION 0x0000
#define CORE_HWINFO 0x0004
#define CORE_SYSCONFIG 0x0010
-#define GPMC_AD0 0x0040
-#define GPMC_AD1 0x0042
-#define GPMC_AD2 0x0044
-#define GPMC_AD3 0x0046
-#define GPMC_AD4 0x0048
-#define GPMC_AD5 0x004A
-#define GPMC_AD6 0x004C
-#define GPMC_AD7 0x004E
-#define GPMC_AD8 0x0050
-#define GPMC_AD9 0x0052
-#define GPMC_AD10 0x0054
-#define GPMC_AD11 0x0056
-#define GPMC_AD12 0x0058
-#define GPMC_AD13 0x005A
-#define GPMC_AD14 0x005C
-#define GPMC_AD15 0x005E
-#define GPMC_A16 0x0060
-#define GPMC_A17 0x0062
-#define GPMC_A18 0x0064
-#define GPMC_A19 0x0066
-#define GPMC_A20 0x0068
-#define GPMC_A21 0x006A
-#define GPMC_A22 0x006C
-#define GPMC_A23 0x006E
-#define GPMC_A24 0x0070
-#define GPMC_A25 0x0072
-#define GPMC_NCS0 0x0074
-#define GPMC_NCS1 0x0076
-#define GPMC_NCS2 0x0078
-#define GPMC_NCS3 0x007A
-#define GPMC_NWP 0x007C
-#define GPMC_CLK 0x007E
-#define GPMC_NADV_ALE 0x0080
-#define GPMC_NOE 0x0082
-#define GPMC_NWE 0x0084
-#define GPMC_NBE0_CLE 0x0086
-#define GPMC_NBE1 0x0088
-#define GPMC_WAIT0 0x008A
-#define GPMC_WAIT1 0x008C
-#define C2C_DATA11 0x008E
-#define C2C_DATA12 0x0090
-#define C2C_DATA13 0x0092
-#define C2C_DATA14 0x0094
-#define C2C_DATA15 0x0096
-#define HDMI_HPD 0x0098
-#define HDMI_CEC 0x009A
-#define HDMI_DDC_SCL 0x009C
-#define HDMI_DDC_SDA 0x009E
-#define CSI21_DX0 0x00A0
-#define CSI21_DY0 0x00A2
-#define CSI21_DX1 0x00A4
-#define CSI21_DY1 0x00A6
-#define CSI21_DX2 0x00A8
-#define CSI21_DY2 0x00AA
-#define CSI21_DX3 0x00AC
-#define CSI21_DY3 0x00AE
-#define CSI21_DX4 0x00B0
-#define CSI21_DY4 0x00B2
-#define CSI22_DX0 0x00B4
-#define CSI22_DY0 0x00B6
-#define CSI22_DX1 0x00B8
-#define CSI22_DY1 0x00BA
-#define CAM_SHUTTER 0x00BC
-#define CAM_STROBE 0x00BE
-#define CAM_GLOBALRESET 0x00C0
-#define USBB1_ULPITLL_CLK 0x00C2
-#define USBB1_ULPITLL_STP 0x00C4
-#define USBB1_ULPITLL_DIR 0x00C6
-#define USBB1_ULPITLL_NXT 0x00C8
-#define USBB1_ULPITLL_DAT0 0x00CA
-#define USBB1_ULPITLL_DAT1 0x00CC
-#define USBB1_ULPITLL_DAT2 0x00CE
-#define USBB1_ULPITLL_DAT3 0x00D0
-#define USBB1_ULPITLL_DAT4 0x00D2
-#define USBB1_ULPITLL_DAT5 0x00D4
-#define USBB1_ULPITLL_DAT6 0x00D6
-#define USBB1_ULPITLL_DAT7 0x00D8
-#define USBB1_HSIC_DATA 0x00DA
-#define USBB1_HSIC_STROBE 0x00DC
-#define USBC1_ICUSB_DP 0x00DE
-#define USBC1_ICUSB_DM 0x00E0
-#define SDMMC1_CLK 0x00E2
-#define SDMMC1_CMD 0x00E4
-#define SDMMC1_DAT0 0x00E6
-#define SDMMC1_DAT1 0x00E8
-#define SDMMC1_DAT2 0x00EA
-#define SDMMC1_DAT3 0x00EC
-#define SDMMC1_DAT4 0x00EE
-#define SDMMC1_DAT5 0x00F0
-#define SDMMC1_DAT6 0x00F2
-#define SDMMC1_DAT7 0x00F4
-#define ABE_MCBSP2_CLKX 0x00F6
-#define ABE_MCBSP2_DR 0x00F8
-#define ABE_MCBSP2_DX 0x00FA
-#define ABE_MCBSP2_FSX 0x00FC
-#define ABE_MCBSP1_CLKX 0x00FE
-#define ABE_MCBSP1_DR 0x0100
-#define ABE_MCBSP1_DX 0x0102
-#define ABE_MCBSP1_FSX 0x0104
-#define ABE_PDM_UL_DATA 0x0106
-#define ABE_PDM_DL_DATA 0x0108
-#define ABE_PDM_FRAME 0x010A
-#define ABE_PDM_LB_CLK 0x010C
-#define ABE_CLKS 0x010E
-#define ABE_DMIC_CLK1 0x0110
-#define ABE_DMIC_DIN1 0x0112
-#define ABE_DMIC_DIN2 0x0114
-#define ABE_DMIC_DIN3 0x0116
-#define UART2_CTS 0x0118
-#define UART2_RTS 0x011A
-#define UART2_RX 0x011C
-#define UART2_TX 0x011E
-#define HDQ_SIO 0x0120
-#define I2C1_SCL 0x0122
-#define I2C1_SDA 0x0124
-#define I2C2_SCL 0x0126
-#define I2C2_SDA 0x0128
-#define I2C3_SCL 0x012A
-#define I2C3_SDA 0x012C
-#define I2C4_SCL 0x012E
-#define I2C4_SDA 0x0130
-#define MCSPI1_CLK 0x0132
-#define MCSPI1_SOMI 0x0134
-#define MCSPI1_SIMO 0x0136
-#define MCSPI1_CS0 0x0138
-#define MCSPI1_CS1 0x013A
-#define MCSPI1_CS2 0x013C
-#define MCSPI1_CS3 0x013E
-#define UART3_CTS_RCTX 0x0140
-#define UART3_RTS_SD 0x0142
-#define UART3_RX_IRRX 0x0144
-#define UART3_TX_IRTX 0x0146
-#define SDMMC5_CLK 0x0148
-#define SDMMC5_CMD 0x014A
-#define SDMMC5_DAT0 0x014C
-#define SDMMC5_DAT1 0x014E
-#define SDMMC5_DAT2 0x0150
-#define SDMMC5_DAT3 0x0152
-#define MCSPI4_CLK 0x0154
-#define MCSPI4_SIMO 0x0156
-#define MCSPI4_SOMI 0x0158
-#define MCSPI4_CS0 0x015A
-#define UART4_RX 0x015C
-#define UART4_TX 0x015E
-#define USBB2_ULPITLL_CLK 0x0160
-#define USBB2_ULPITLL_STP 0x0162
-#define USBB2_ULPITLL_DIR 0x0164
-#define USBB2_ULPITLL_NXT 0x0166
-#define USBB2_ULPITLL_DAT0 0x0168
-#define USBB2_ULPITLL_DAT1 0x016A
-#define USBB2_ULPITLL_DAT2 0x016C
-#define USBB2_ULPITLL_DAT3 0x016E
-#define USBB2_ULPITLL_DAT4 0x0170
-#define USBB2_ULPITLL_DAT5 0x0172
-#define USBB2_ULPITLL_DAT6 0x0174
-#define USBB2_ULPITLL_DAT7 0x0176
-#define USBB2_HSIC_DATA 0x0178
-#define USBB2_HSIC_STROBE 0x017A
-#define UNIPRO_TX0 0x017C
-#define UNIPRO_TY0 0x017E
-#define UNIPRO_TX1 0x0180
-#define UNIPRO_TY1 0x0182
-#define UNIPRO_TX2 0x0184
-#define UNIPRO_TY2 0x0186
-#define UNIPRO_RX0 0x0188
-#define UNIPRO_RY0 0x018A
-#define UNIPRO_RX1 0x018C
-#define UNIPRO_RY1 0x018E
-#define UNIPRO_RX2 0x0190
-#define UNIPRO_RY2 0x0192
-#define USBA0_OTG_CE 0x0194
-#define USBA0_OTG_DP 0x0196
-#define USBA0_OTG_DM 0x0198
-#define FREF_CLK1_OUT 0x019A
-#define FREF_CLK2_OUT 0x019C
-#define SYS_NIRQ1 0x019E
-#define SYS_NIRQ2 0x01A0
-#define SYS_BOOT0 0x01A2
-#define SYS_BOOT1 0x01A4
-#define SYS_BOOT2 0x01A6
-#define SYS_BOOT3 0x01A8
-#define SYS_BOOT4 0x01AA
-#define SYS_BOOT5 0x01AC
-#define DPM_EMU0 0x01AE
-#define DPM_EMU1 0x01B0
-#define DPM_EMU2 0x01B2
-#define DPM_EMU3 0x01B4
-#define DPM_EMU4 0x01B6
-#define DPM_EMU5 0x01B8
-#define DPM_EMU6 0x01BA
-#define DPM_EMU7 0x01BC
-#define DPM_EMU8 0x01BE
-#define DPM_EMU9 0x01C0
-#define DPM_EMU10 0x01C2
-#define DPM_EMU11 0x01C4
-#define DPM_EMU12 0x01C6
-#define DPM_EMU13 0x01C8
-#define DPM_EMU14 0x01CA
-#define DPM_EMU15 0x01CC
-#define DPM_EMU16 0x01CE
-#define DPM_EMU17 0x01D0
-#define DPM_EMU18 0x01D2
-#define DPM_EMU19 0x01D4
-#define WAKEUPEVENT_0 0x01D8
-#define WAKEUPEVENT_1 0x01DC
-#define WAKEUPEVENT_2 0x01E0
-#define WAKEUPEVENT_3 0x01E4
-#define WAKEUPEVENT_4 0x01E8
-#define WAKEUPEVENT_5 0x01EC
-#define WAKEUPEVENT_6 0x01F0
+#define EMMC_CLK 0x0040
+#define EMMC_CMD 0x0042
+#define EMMC_DATA0 0x0044
+#define EMMC_DATA1 0x0046
+#define EMMC_DATA2 0x0048
+#define EMMC_DATA3 0x004a
+#define EMMC_DATA4 0x004c
+#define EMMC_DATA5 0x004e
+#define EMMC_DATA6 0x0050
+#define EMMC_DATA7 0x0052
+#define C2C_CLKOUT0 0x0054
+#define C2C_CLKOUT1 0x0056
+#define C2C_CLKIN0 0x0058
+#define C2C_CLKIN1 0x005a
+#define C2C_DATAIN0 0x005c
+#define C2C_DATAIN1 0x005e
+#define C2C_DATAIN2 0x0060
+#define C2C_DATAIN3 0x0062
+#define C2C_DATAIN4 0x0064
+#define C2C_DATAIN5 0x0066
+#define C2C_DATAIN6 0x0068
+#define C2C_DATAIN7 0x006a
+#define C2C_DATAOUT0 0x006c
+#define C2C_DATAOUT1 0x006e
+#define C2C_DATAOUT2 0x0070
+#define C2C_DATAOUT3 0x0072
+#define C2C_DATAOUT4 0x0074
+#define C2C_DATAOUT5 0x0076
+#define C2C_DATAOUT6 0x0078
+#define C2C_DATAOUT7 0x007a
+#define C2C_DATA8 0x007c
+#define C2C_DATA9 0x007e
+#define C2C_DATA10 0x0080
+#define C2C_DATA11 0x0082
+#define C2C_DATA12 0x0084
+#define C2C_DATA13 0x0086
+#define C2C_DATA14 0x0088
+#define C2C_DATA15 0x008a
+#define LLIA_WAKEREQOUT 0x008c
+#define LLIB_WAKEREQOUT 0x008e
+#define HSI1_ACREADY 0x0090
+#define HSI1_CAREADY 0x0092
+#define HSI1_ACWAKE 0x0094
+#define HSI1_CAWAKE 0x0096
+#define HSI1_ACFLAG 0x0098
+#define HSI1_ACDATA 0x009a
+#define HSI1_CAFLAG 0x009c
+#define HSI1_CADATA 0x009e
+#define UART1_TX 0x00a0
+#define UART1_CTS 0x00a2
+#define UART1_RX 0x00a4
+#define UART1_RTS 0x00a6
+#define HSI2_CAREADY 0x00a8
+#define HSI2_ACREADY 0x00aa
+#define HSI2_CAWAKE 0x00ac
+#define HSI2_ACWAKE 0x00ae
+#define HSI2_CAFLAG 0x00b0
+#define HSI2_CADATA 0x00b2
+#define HSI2_ACFLAG 0x00b4
+#define HSI2_ACDATA 0x00b6
+#define UART2_RTS 0x00b8
+#define UART2_CTS 0x00ba
+#define UART2_RX 0x00bc
+#define UART2_TX 0x00be
+#define USBB1_HSIC_STROBE 0x00c0
+#define USBB1_HSIC_DATA 0x00c2
+#define USBB2_HSIC_STROBE 0x00c4
+#define USBB2_HSIC_DATA 0x00c6
+#define TIMER10_PWM_EVT 0x00c8
+#define DSIPORTA_TE0 0x00ca
+#define DSIPORTA_LANE0X 0x00cc
+#define DSIPORTA_LANE0Y 0x00ce
+#define DSIPORTA_LANE1X 0x00d0
+#define DSIPORTA_LANE1Y 0x00d2
+#define DSIPORTA_LANE2X 0x00d4
+#define DSIPORTA_LANE2Y 0x00d6
+#define DSIPORTA_LANE3X 0x00d8
+#define DSIPORTA_LANE3Y 0x00da
+#define DSIPORTA_LANE4X 0x00dc
+#define DSIPORTA_LANE4Y 0x00de
+#define DSIPORTC_LANE0X 0x00e0
+#define DSIPORTC_LANE0Y 0x00e2
+#define DSIPORTC_LANE1X 0x00e4
+#define DSIPORTC_LANE1Y 0x00e6
+#define DSIPORTC_LANE2X 0x00e8
+#define DSIPORTC_LANE2Y 0x00ea
+#define DSIPORTC_LANE3X 0x00ec
+#define DSIPORTC_LANE3Y 0x00ee
+#define DSIPORTC_LANE4X 0x00f0
+#define DSIPORTC_LANE4Y 0x00f2
+#define DSIPORTC_TE0 0x00f4
+#define TIMER9_PWM_EVT 0x00f6
+#define I2C4_SCL 0x00f8
+#define I2C4_SDA 0x00fa
+#define MCSPI2_CLK 0x00fc
+#define MCSPI2_SIMO 0x00fe
+#define MCSPI2_SOMI 0x0100
+#define MCSPI2_CS0 0x0102
+#define RFBI_DATA15 0x0104
+#define RFBI_DATA14 0x0106
+#define RFBI_DATA13 0x0108
+#define RFBI_DATA12 0x010a
+#define RFBI_DATA11 0x010c
+#define RFBI_DATA10 0x010e
+#define RFBI_DATA9 0x0110
+#define RFBI_DATA8 0x0112
+#define RFBI_DATA7 0x0114
+#define RFBI_DATA6 0x0116
+#define RFBI_DATA5 0x0118
+#define RFBI_DATA4 0x011a
+#define RFBI_DATA3 0x011c
+#define RFBI_DATA2 0x011e
+#define RFBI_DATA1 0x0120
+#define RFBI_DATA0 0x0122
+#define RFBI_WE 0x0124
+#define RFBI_CS0 0x0126
+#define RFBI_A0 0x0128
+#define RFBI_RE 0x012a
+#define RFBI_HSYNC0 0x012c
+#define RFBI_TE_VSYNC0 0x012e
+#define GPIO6_182 0x0130
+#define GPIO6_183 0x0132
+#define GPIO6_184 0x0134
+#define GPIO6_185 0x0136
+#define GPIO6_186 0x0138
+#define GPIO6_187 0x013a
+#define HDMI_CEC 0x013c
+#define HDMI_HPD 0x013e
+#define HDMI_DDC_SCL 0x0140
+#define HDMI_DDC_SDA 0x0142
+#define CSIPORTC_LANE0X 0x0144
+#define CSIPORTC_LANE0Y 0x0146
+#define CSIPORTC_LANE1X 0x0148
+#define CSIPORTC_LANE1Y 0x014a
+#define CSIPORTB_LANE0X 0x014c
+#define CSIPORTB_LANE0Y 0x014e
+#define CSIPORTB_LANE1X 0x0150
+#define CSIPORTB_LANE1Y 0x0152
+#define CSIPORTB_LANE2X 0x0154
+#define CSIPORTB_LANE2Y 0x0156
+#define CSIPORTA_LANE0X 0x0158
+#define CSIPORTA_LANE0Y 0x015a
+#define CSIPORTA_LANE1X 0x015c
+#define CSIPORTA_LANE1Y 0x015e
+#define CSIPORTA_LANE2X 0x0160
+#define CSIPORTA_LANE2Y 0x0162
+#define CSIPORTA_LANE3X 0x0164
+#define CSIPORTA_LANE3Y 0x0166
+#define CSIPORTA_LANE4X 0x0168
+#define CSIPORTA_LANE4Y 0x016a
+#define CAM_SHUTTER 0x016c
+#define CAM_STROBE 0x016e
+#define CAM_GLOBALRESET 0x0170
+#define TIMER11_PWM_EVT 0x0172
+#define TIMER5_PWM_EVT 0x0174
+#define TIMER6_PWM_EVT 0x0176
+#define TIMER8_PWM_EVT 0x0178
+#define I2C3_SCL 0x017a
+#define I2C3_SDA 0x017c
+#define GPIO8_233 0x017e
+#define GPIO8_234 0x0180
+#define ABE_CLKS 0x0182
+#define ABEDMIC_DIN1 0x0184
+#define ABEDMIC_DIN2 0x0186
+#define ABEDMIC_DIN3 0x0188
+#define ABEDMIC_CLK1 0x018a
+#define ABEDMIC_CLK2 0x018c
+#define ABEDMIC_CLK3 0x018e
+#define ABESLIMBUS1_CLOCK 0x0190
+#define ABESLIMBUS1_DATA 0x0192
+#define ABEMCBSP2_DR 0x0194
+#define ABEMCBSP2_DX 0x0196
+#define ABEMCBSP2_FSX 0x0198
+#define ABEMCBSP2_CLKX 0x019a
+#define ABEMCPDM_UL_DATA 0x019c
+#define ABEMCPDM_DL_DATA 0x019e
+#define ABEMCPDM_FRAME 0x01a0
+#define ABEMCPDM_LB_CLK 0x01a2
+#define WLSDIO_CLK 0x01a4
+#define WLSDIO_CMD 0x01a6
+#define WLSDIO_DATA0 0x01a8
+#define WLSDIO_DATA1 0x01aa
+#define WLSDIO_DATA2 0x01ac
+#define WLSDIO_DATA3 0x01ae
+#define UART5_RX 0x01b0
+#define UART5_TX 0x01b2
+#define UART5_CTS 0x01b4
+#define UART5_RTS 0x01b6
+#define I2C2_SCL 0x01b8
+#define I2C2_SDA 0x01ba
+#define MCSPI1_CLK 0x01bc
+#define MCSPI1_SOMI 0x01be
+#define MCSPI1_SIMO 0x01c0
+#define MCSPI1_CS0 0x01c2
+#define MCSPI1_CS1 0x01c4
+#define I2C5_SCL 0x01c6
+#define I2C5_SDA 0x01c8
+#define PERSLIMBUS2_CLOCK 0x01ca
+#define PERSLIMBUS2_DATA 0x01cc
+#define UART6_TX 0x01ce
+#define UART6_RX 0x01d0
+#define UART6_CTS 0x01d2
+#define UART6_RTS 0x01d4
+#define UART3_CTS_RCTX 0x01d6
+#define UART3_RTS_IRSD 0x01d8
+#define UART3_TX_IRTX 0x01da
+#define UART3_RX_IRRX 0x01dc
+#define USBB3_HSIC_STROBE 0x01de
+#define USBB3_HSIC_DATA 0x01e0
+#define SDCARD_CLK 0x01e2
+#define SDCARD_CMD 0x01e4
+#define SDCARD_DATA2 0x01e6
+#define SDCARD_DATA3 0x01e8
+#define SDCARD_DATA0 0x01ea
+#define SDCARD_DATA1 0x01ec
+#define USBD0_HS_DP 0x01ee
+#define USBD0_HS_DM 0x01f0
+#define I2C1_PMIC_SCL 0x01f2
+#define I2C1_PMIC_SDA 0x01f4
+#define USBD0_SS_RX 0x01f6
-#define WKUP_REVISION 0x0000
-#define WKUP_HWINFO 0x0004
-#define WKUP_SYSCONFIG 0x0010
-#define PAD0_SIM_IO 0x0040
-#define PAD1_SIM_CLK 0x0042
-#define PAD0_SIM_RESET 0x0044
-#define PAD1_SIM_CD 0x0046
-#define PAD0_SIM_PWRCTRL 0x0048
-#define PAD1_SR_SCL 0x004A
-#define PAD0_SR_SDA 0x004C
-#define PAD1_FREF_XTAL_IN 0x004E
-#define PAD0_FREF_SLICER_IN 0x0050
-#define PAD1_FREF_CLK_IOREQ 0x0052
-#define PAD0_FREF_CLK0_OUT 0x0054
-#define PAD1_FREF_CLK3_REQ 0x0056
-#define PAD0_FREF_CLK3_OUT 0x0058
-#define PAD1_FREF_CLK4_REQ 0x005A
-#define PAD0_FREF_CLK4_OUT 0x005C
-#define PAD1_SYS_32K 0x005E
-#define PAD0_SYS_NRESPWRON 0x0060
-#define PAD1_SYS_NRESWARM 0x0062
-#define PAD0_SYS_PWR_REQ 0x0064
-#define PAD1_SYS_PWRON_RESET 0x0066
-#define PAD0_SYS_BOOT6 0x0068
-#define PAD1_SYS_BOOT7 0x006A
-#define PAD0_JTAG_NTRST 0x006C
-#define PAD1_JTAG_TCK 0x006D
-#define PAD0_JTAG_RTCK 0x0070
-#define PAD1_JTAG_TMS_TMSC 0x0072
-#define PAD0_JTAG_TDI 0x0074
-#define PAD1_JTAG_TDO 0x0076
-#define PADCONF_WAKEUPEVENT_0 0x007C
-#define CONTROL_SMART1NOPMIO_PADCONF_0 0x05A0
-#define CONTROL_SMART1NOPMIO_PADCONF_1 0x05A4
-#define PADCONF_MODE 0x05A8
-#define CONTROL_XTAL_OSCILLATOR 0x05AC
-#define CONTROL_CONTROL_I2C_2 0x0604
-#define CONTROL_CONTROL_JTAG 0x0608
-#define CONTROL_CONTROL_SYS 0x060C
-#define CONTROL_SPARE_RW 0x0614
-#define CONTROL_SPARE_R 0x0618
-#define CONTROL_SPARE_R_C0 0x061C
+#define LLIA_WAKEREQIN 0x0040
+#define LLIB_WAKEREQIN 0x0042
+#define DRM_EMU0 0x0044
+#define DRM_EMU1 0x0046
+#define JTAG_NTRST 0x0048
+#define JTAG_TCK 0x004a
+#define JTAG_RTCK 0x004c
+#define JTAG_TMSC 0x004e
+#define JTAG_TDI 0x0050
+#define JTAG_TDO 0x0052
+#define SYS_32K 0x0054
+#define FREF_CLK_IOREQ 0x0056
+#define FREF_CLK0_OUT 0x0058
+#define FREF_CLK1_OUT 0x005a
+#define FREF_CLK2_OUT 0x005c
+#define FREF_CLK2_REQ 0x005e
+#define FREF_CLK1_REQ 0x0060
+#define SYS_NRESPWRON 0x0062
+#define SYS_NRESWARM 0x0064
+#define SYS_PWR_REQ 0x0066
+#define SYS_NIRQ1 0x0068
+#define SYS_NIRQ2 0x006a
+#define SR_PMIC_SCL 0x006c
+#define SR_PMIC_SDA 0x006e
+#define SYS_BOOT0 0x0070
+#define SYS_BOOT1 0x0072
+#define SYS_BOOT2 0x0074
+#define SYS_BOOT3 0x0076
+#define SYS_BOOT4 0x0078
+#define SYS_BOOT5 0x007a
#endif /* _MUX_OMAP5_H_ */
diff --git a/arch/arm/include/asm/arch-omap5/omap.h b/arch/arm/include/asm/arch-omap5/omap.h
index d811d6ec23..e3f55d2020 100644
--- a/arch/arm/include/asm/arch-omap5/omap.h
+++ b/arch/arm/include/asm/arch-omap5/omap.h
@@ -98,17 +98,6 @@
#define TCLR_AR (0x1 << 1)
#define TCLR_PRE (0x1 << 5)
-/*
- * PRCM
- */
-
-/* PRM */
-#define PRM_BASE 0x4AE06000
-#define PRM_DEVICE_BASE (PRM_BASE + 0x1B00)
-
-#define PRM_RSTCTRL PRM_DEVICE_BASE
-#define PRM_RSTCTRL_RESET 0x01
-
/* Control Module */
#define LDOSRAM_ACTMODE_VSET_IN_MASK (0x1F << 5)
#define LDOSRAM_VOLT_CTRL_OVERRIDE 0x0401040f
@@ -125,9 +114,10 @@
/* CONTROL_EFUSE_2 */
#define CONTROL_EFUSE_2_NMOS_PMOS_PTV_CODE_1 0x00ffc000
-#define MMC1_PWRDNZ (1 << 26)
-#define MMC1_PBIASLITE_PWRDNZ (1 << 22)
-#define MMC1_PBIASLITE_VMODE (1 << 21)
+#define SDCARD_PWRDNZ (1 << 26)
+#define SDCARD_BIAS_HIZ_MODE (1 << 25)
+#define SDCARD_BIAS_PWRDNZ (1 << 22)
+#define SDCARD_PBIASLITE_VMODE (1 << 21)
#ifndef __ASSEMBLY__
@@ -136,32 +126,117 @@ struct s32ktimer {
unsigned int s32k_cr; /* 0x10 */
};
-struct omap4_sys_ctrl_regs {
- unsigned int pad1[129];
- unsigned int control_id_code; /* 0x4A002204 */
- unsigned int pad11[22];
- unsigned int control_std_fuse_opp_bgap; /* 0x4a002260 */
- unsigned int pad2[47];
- unsigned int control_ldosram_iva_voltage_ctrl; /* 0x4A002320 */
- unsigned int control_ldosram_mpu_voltage_ctrl; /* 0x4A002324 */
- unsigned int control_ldosram_core_voltage_ctrl; /* 0x4A002328 */
- unsigned int pad3[260277];
- unsigned int control_pbiaslite; /* 0x4A100600 */
- unsigned int pad4[63];
- unsigned int control_efuse_1; /* 0x4A100700 */
- unsigned int control_efuse_2; /* 0x4A100704 */
+#define DEVICE_TYPE_SHIFT 0x6
+#define DEVICE_TYPE_MASK (0x7 << DEVICE_TYPE_SHIFT)
+#define DEVICE_GP 0x3
+
+struct omap_sys_ctrl_regs {
+ u32 pad0[77]; /* 0x4A002000 */
+ u32 control_status; /* 0x4A002134 */
+ u32 pad1[794]; /* 0x4A002138 */
+ u32 control_paconf_global; /* 0x4A002DA0 */
+ u32 control_paconf_mode; /* 0x4A002DA4 */
+ u32 control_smart1io_padconf_0; /* 0x4A002DA8 */
+ u32 control_smart1io_padconf_1; /* 0x4A002DAC */
+ u32 control_smart1io_padconf_2; /* 0x4A002DB0 */
+ u32 control_smart2io_padconf_0; /* 0x4A002DB4 */
+ u32 control_smart2io_padconf_1; /* 0x4A002DB8 */
+ u32 control_smart2io_padconf_2; /* 0x4A002DBC */
+ u32 control_smart3io_padconf_0; /* 0x4A002DC0 */
+ u32 control_smart3io_padconf_1; /* 0x4A002DC4 */
+ u32 pad2[14];
+ u32 control_pbias; /* 0x4A002E00 */
+ u32 control_i2c_0; /* 0x4A002E04 */
+ u32 control_camera_rx; /* 0x4A002E08 */
+ u32 control_hdmi_tx_phy; /* 0x4A002E0C */
+ u32 control_uniportm; /* 0x4A002E10 */
+ u32 control_dsiphy; /* 0x4A002E14 */
+ u32 control_mcbsplp; /* 0x4A002E18 */
+ u32 control_usb2phycore; /* 0x4A002E1C */
+ u32 control_hdmi_1; /*0x4A002E20*/
+ u32 control_hsi; /*0x4A002E24*/
+ u32 pad3[2];
+ u32 control_ddr3ch1_0; /*0x4A002E30*/
+ u32 control_ddr3ch2_0; /*0x4A002E34*/
+ u32 control_ddrch1_0; /*0x4A002E38*/
+ u32 control_ddrch1_1; /*0x4A002E3C*/
+ u32 control_ddrch2_0; /*0x4A002E40*/
+ u32 control_ddrch2_1; /*0x4A002E44*/
+ u32 control_lpddr2ch1_0; /*0x4A002E48*/
+ u32 control_lpddr2ch1_1; /*0x4A002E4C*/
+ u32 control_ddrio_0; /*0x4A002E50*/
+ u32 control_ddrio_1; /*0x4A002E54*/
+ u32 control_ddrio_2; /*0x4A002E58*/
+ u32 control_hyst_1; /*0x4A002E5C*/
+ u32 control_usbb_hsic_control; /*0x4A002E60*/
+ u32 control_c2c; /*0x4A002E64*/
+ u32 control_core_control_spare_rw; /*0x4A002E68*/
+ u32 control_core_control_spare_r; /*0x4A002E6C*/
+ u32 control_core_control_spare_r_c0; /*0x4A002E70*/
+ u32 control_srcomp_north_side; /*0x4A002E74*/
+ u32 control_srcomp_south_side; /*0x4A002E78*/
+ u32 control_srcomp_east_side; /*0x4A002E7C*/
+ u32 control_srcomp_west_side; /*0x4A002E80*/
+ u32 control_srcomp_code_latch; /*0x4A002E84*/
+ u32 pad4[3680198];
+ u32 control_smart1nopmio_padconf_0; /* 0x4AE0CDA0 */
+ u32 control_smart1nopmio_padconf_1; /* 0x4AE0CDA4 */
+ u32 control_padconf_mode; /* 0x4AE0CDA8 */
+ u32 control_xtal_oscillator; /* 0x4AE0CDAC */
+ u32 control_i2c_2; /* 0x4AE0CDB0 */
+ u32 control_ckobuffer; /* 0x4AE0CDB4 */
+ u32 control_wkup_control_spare_rw; /* 0x4AE0CDB8 */
+ u32 control_wkup_control_spare_r; /* 0x4AE0CDBC */
+ u32 control_wkup_control_spare_r_c0; /* 0x4AE0CDC0 */
+ u32 control_srcomp_east_side_wkup; /* 0x4AE0CDC4 */
+ u32 control_efuse_1; /* 0x4AE0CDC8 */
+ u32 control_efuse_2; /* 0x4AE0CDCC */
+ u32 control_efuse_3; /* 0x4AE0CDD0 */
+ u32 control_efuse_4; /* 0x4AE0CDD4 */
+ u32 control_efuse_5; /* 0x4AE0CDD8 */
+ u32 control_efuse_6; /* 0x4AE0CDDC */
+ u32 control_efuse_7; /* 0x4AE0CDE0 */
+ u32 control_efuse_8; /* 0x4AE0CDE4 */
+ u32 control_efuse_9; /* 0x4AE0CDE8 */
+ u32 control_efuse_10; /* 0x4AE0CDEC */
+ u32 control_efuse_11; /* 0x4AE0CDF0 */
+ u32 control_efuse_12; /* 0x4AE0CDF4 */
+ u32 control_efuse_13; /* 0x4AE0CDF8 */
};
-struct control_lpddr2io_regs {
- unsigned int control_lpddr2io1_0;
- unsigned int control_lpddr2io1_1;
- unsigned int control_lpddr2io1_2;
- unsigned int control_lpddr2io1_3;
- unsigned int control_lpddr2io2_0;
- unsigned int control_lpddr2io2_1;
- unsigned int control_lpddr2io2_2;
- unsigned int control_lpddr2io2_3;
-};
+/* Output impedance control */
+#define ds_120_ohm 0x0
+#define ds_60_ohm 0x1
+#define ds_45_ohm 0x2
+#define ds_30_ohm 0x3
+#define ds_mask 0x3
+
+/* Slew rate control */
+#define sc_slow 0x0
+#define sc_medium 0x1
+#define sc_fast 0x2
+#define sc_na 0x3
+#define sc_mask 0x3
+
+/* Target capacitance control */
+#define lb_5_12_pf 0x0
+#define lb_12_25_pf 0x1
+#define lb_25_50_pf 0x2
+#define lb_50_80_pf 0x3
+#define lb_mask 0x3
+
+#define usb_i_mask 0x7
+
+#define DDR_IO_I_34OHM_SR_FASTEST_WD_DQ_NO_PULL_DQS_PULL_DOWN 0x80828082
+#define DDR_IO_I_34OHM_SR_FASTEST_WD_CK_CKE_NCS_CA_PULL_DOWN 0x82828200
+#define DDR_IO_0_DDR2_DQ_INT_EN_ALL_DDR3_CA_DIS_ALL 0x8421
+#define DDR_IO_1_DQ_OUT_EN_ALL_DQ_INT_EN_ALL 0x8421084
+#define DDR_IO_2_CA_OUT_EN_ALL_CA_INT_EN_ALL 0x8421000
+
+#define EFUSE_1 0x45145100
+#define EFUSE_2 0x45145100
+#define EFUSE_3 0x45145100
+#define EFUSE_4 0x45145100
#endif /* __ASSEMBLY__ */
/*
@@ -169,7 +244,7 @@ struct control_lpddr2io_regs {
* Non-secure RAM starts at 0x40300000 for GP devices. But we keep SRAM_BASE
* at 0x40304000(EMU base) so that our code works for both EMU and GP
*/
-#define NON_SECURE_SRAM_START 0x40304000
+#define NON_SECURE_SRAM_START 0x40300000
#define NON_SECURE_SRAM_END 0x40320000 /* Not inclusive */
/* base address for indirect vectors (internal boot mode) */
#define SRAM_ROM_VECT_BASE 0x4031F000
diff --git a/arch/arm/include/asm/arch-omap5/sys_proto.h b/arch/arm/include/asm/arch-omap5/sys_proto.h
index 40a7c57489..8396a22141 100644
--- a/arch/arm/include/asm/arch-omap5/sys_proto.h
+++ b/arch/arm/include/asm/arch-omap5/sys_proto.h
@@ -55,6 +55,8 @@ u32 omap_sdram_size(void);
u32 cortex_rev(void);
void init_omap_revision(void);
void do_io_settings(void);
+void omap_vc_init(u16 speed_khz);
+int omap_vc_bypass_send_value(u8 sa, u8 reg_addr, u8 reg_data);
/*
* This is used to verify if the configuration header
@@ -113,10 +115,4 @@ static inline u32 omap_hw_init_context(void)
#endif
}
-static inline u32 omap_revision(void)
-{
- extern u32 *const omap5_revision;
- return *omap5_revision;
-}
-
#endif
diff --git a/arch/arm/include/asm/arch-rda/chip_id.h b/arch/arm/include/asm/arch-rda/chip_id.h
new file mode 100644
index 0000000000..765b43d9d6
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/chip_id.h
@@ -0,0 +1,46 @@
+/////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/defs/include/chip_id.h $ //
+// $Author: huazeng $ //
+// $Date: 2013-04-16 15:10:28 +0800 (Tue, 16 Apr 2013) $ //
+// $Revision: 20171 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file chip_id.h
+/// This file contains the ID of the supported chips
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _CHIP_ID_H_
+#define _CHIP_ID_H_
+
+#define CHIP_ASIC_ID_DEPRECATED_JADE 1
+#define CHIP_ASIC_ID_DEPRECATED_GRANITE 2
+#define CHIP_ASIC_ID_GREENSTONE 3
+#define CHIP_ASIC_ID_DEPRECATED_NEPHRITE 4
+#define CHIP_ASIC_ID_DEPRECATED_EMERALD 5
+#define CHIP_ASIC_ID_GALLITE 6
+#define CHIP_ASIC_ID_DEPRECATED_ESPERITE 7
+#define CHIP_ASIC_ID_8808 8
+#define CHIP_ASIC_ID_8809 9
+#define CHIP_ASIC_ID_8810 10
+#define CHIP_ASIC_ID_8809P 11
+#define CHIP_ASIC_ID_8810E 12
+#define CHIP_ASIC_ID_8850 13
+
+#define CHIP_ASIC_ID_QTY 13
+
+#endif // _CHIP_ID_H_
+
+
diff --git a/arch/arm/include/asm/arch-rda/cs_types.h b/arch/arm/include/asm/arch-rda/cs_types.h
new file mode 100644
index 0000000000..de3ade7ea3
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/cs_types.h
@@ -0,0 +1,281 @@
+////////////////////////////////////////////////////////////////////////////////
+// Copyright (C) 2002-2006, Coolsand Technologies, Inc.
+// All Rights Reserved
+//
+// This source code is property of Coolsand. The information contained in this
+// file is confidential. Distribution, reproduction, as well as exploitation,
+// or transmisison of any content of this file is not allowed except if
+// expressly permitted.Infringements result in damage claims!
+//
+// FILENAME: cs_types.h
+//
+// DESCRIPTION:
+// This file defines all basic data types used by all files in Coolsand
+// development environment.
+//
+// REVISION HISTORY:
+// NAME DATE REMAKS
+// SHK 2006-10-29 Created initial version 1.0
+// Romuald 2007-04-25 Added PRIVATE, PROTECTED, REG16 and REG32
+// zhaoyong 2008-08-08 clean up
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef __CS_TYPE_H__
+#define __CS_TYPE_H__
+
+#define MAX_INT8 127
+#define MIN_INT8 (-MAX_INT8 - 1)
+#define MAX_UINT8 255
+#define MIN_UINT8 0
+#define MAX_INT16 32767
+#define MIN_INT16 (-MAX_INT16 - 1)
+#define MAX_UINT16 65535
+#define MIN_UINT16 0
+#define MAX_INT32 2147483647L
+#define MIN_INT32 (-MAX_INT32 - 1)
+#define MAX_UINT32 4294967295U
+#define MIN_UINT32 0U
+#ifdef WITH_LONG_LONG
+#define INTMAX_MAX 0x7fffffffffffffff
+#define INTMAX_MIN -(0x7fffffffffffffff-1)
+#define UINTMAX_MAX 0xffffffffffffffff
+#else
+#define INTMAX_MAX 0x7fffffff
+#define INTMAX_MIN -(0x7fffffff-1)
+#define UINTMAX_MAX 0xffffffff
+#endif
+#define INT_MAX (char *)(1<<31)
+#define LONG_MAX 0x7fffffff
+#define LONG_MIN -(0x7fffffff-1)
+#define ULONG_MAX 0xffffffff
+
+
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned int u32;
+//typedef char s8;
+typedef short s16;
+//typedef long s32;
+#ifdef __cplusplus
+#else
+typedef unsigned char bool;
+#endif
+
+typedef char ascii;
+typedef unsigned char byte; /* unsigned 8-bit data */
+typedef unsigned short word; /* unsigned 16-bit data */
+typedef unsigned long dword; /* unsigned 32-bit data */
+typedef unsigned char uint8;
+typedef signed char int8;
+typedef unsigned short int uint16;
+typedef signed short int int16;
+typedef unsigned int uint32;
+typedef signed int int32;
+typedef char boolean;
+typedef unsigned int size_t;
+typedef int ssize_t;
+#ifdef WITH_LONG_LONG
+typedef unsigned long long uintmax_t;
+typedef long long intmax_t;
+#else
+typedef unsigned long uintmax_t;
+typedef long intmax_t;
+#endif
+
+typedef unsigned long UINT32;
+typedef unsigned short UINT16;
+typedef long INT32;
+typedef short INT16;
+typedef unsigned char UINT8;
+typedef char INT8;
+#if defined(_M_IX86)
+#pragma warning(disable:4142)
+typedef __int64 UINT64;
+typedef __int64 INT64;
+#else
+typedef unsigned long long UINT64;
+typedef long long INT64;
+#endif
+typedef unsigned char BOOL;
+typedef short WCHAR;
+typedef char CHAR;
+typedef unsigned char BYTE;
+typedef float FLOAT;
+typedef double DOUBLE;
+typedef UINT32 HANDLE;
+typedef UINT8* PUINT8;
+typedef UINT32* PUINT32;
+typedef INT32* PINT32;
+typedef UINT16* PUINT16;
+typedef INT16* PINT16;
+typedef CHAR * PCHAR;
+typedef void* PVOID;
+typedef unsigned short WORD;
+typedef unsigned long DWORD; /* actually long, but this should be okay */
+typedef volatile unsigned char REG8;
+typedef volatile unsigned short REG16;
+typedef volatile unsigned int REG32;
+typedef int INT;
+typedef char S8;
+typedef char * PS8;
+typedef unsigned char U8;
+typedef unsigned char * PU8;
+typedef unsigned short pBOOL;
+typedef short int S16;
+typedef short int * PS16;
+typedef unsigned short int U16;
+typedef unsigned short int * PU16;
+typedef int S32;
+typedef int * PS32;
+typedef unsigned int U32;
+typedef unsigned int * PU32;
+typedef float float32;
+typedef unsigned long long U64;
+typedef long long S64;
+
+#define PUBLIC
+#define SRVAPI
+#define PROTECTED
+#define LOCAL static
+#define PRIVATE static
+#define EXPORT extern
+#define REG register
+#define CONST const
+#define VOLATILE volatile
+#define VOID void
+#define INLINE static inline // Do compiler directives
+
+#ifdef ENABLE_DEPRECATED
+#define DEPRECATED __attribute__ ((deprecated))
+#else
+#define DEPRECATED
+#endif /* ENABLE_DEPRECATED */
+
+#define TRUE (1==1)
+#define FALSE (1==0)
+//#define NULL 0
+#define CS_NULL (void*)0
+#define NIL 0
+#define CS_NIL 0
+#define HNULL 0
+#define NULL_CHAR '\0'
+
+#define OFFSETOF(s,m) ((UINT32)&(((s *)0)->m)) // Get the address offset of the specified member.
+//#define ALIGN(val,exp) (((val) + ((exp)-1)) & ~((exp)-1))
+//#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
+#define LAST_ELEMENT(x) (&x[ARRAY_SIZE(x)-1])
+#define TCHAR_SIZEOF(sz) (sizeof(sz)/sizeof(TCHAR))
+#define BOUND(x, min, max) ( (x) < (min) ? (min) : ((x) > (max) ? (max):(x)) )
+#define ROUND_SIZEOF(t) ((sizeof(t)+sizeof(int)-1)&~(sizeof(int)-1))
+#define IS_32BIT_ALIGN(nAdd) ((UINT32)(((UINT32)(nAdd)) & 0x3)==0)
+#define IS_16_ALIGN(nSize) ((UINT32)(((UINT32)(nSize))& 0x0f) == 0)
+#define S_LAST_MEMBER_ADDR(ptr, type) ((UINT8*)(ptr) + SIZEOF(type))
+#define S_MEMBER_ADDR(s_prt, offset) ((UINT8*)(s_prt) + offset)
+#define MSB(x) (((x) >> 8) & 0xff) // most signif byte of 2-byte integer
+#define LSB(x) ((x) & 0xff) // least signif byte of 2-byte integer
+#define MAKE_WORD(p) (((UINT16)(p)[0] << 8) | (UINT16)(p)[1])
+#define MAKE_DWORD(p) (((UINT32)(p)[0] << 24) | ((UINT32)(p)[1] << 16) | ((UINT32)(p)[2] << 8) | (UINT32)(p)[3])
+#define SWAP16(p) (((UINT16)((UINT16*)(p))[1] << 8) | (UINT16)((UINT16*)(p))[0])
+#define SWAP32(p) (((UINT32)((UINT32*)(p))[3] << 24) | ((UINT32)((UINT32*)(p))[2] << 16) | ((UINT32)((UINT32*)(p))[1] << 8) | (UINT32)((UINT32*)(p))[0])
+#define SWAPT(v1,v2,typ) {typ v; v = v1; v1 = v2; v2 = v;}
+
+/* align size withe the specified bits.*/
+#define ALIGN_SIZE(x, align) (((UINT32)(x)+align-1)&~(align-1))
+#define Arg(arg, type) (*(type *)(arg))
+#define NextArg(arg, type) ((arg) = (TCHAR *)(arg) + roundedsizeof(type))
+// Get the data from "arg" to "in".
+#define ARG_IN(r,arg,type) (memcpy(&(r), (type *) (arg), sizeof (arg)))
+// Put the data from "w" to "arg".
+#define ARG_OUT(arg, w, type) (memcpy((type *) (arg), &(w), sizeof (w)))
+#define ABS(x) ((x<0)?(-(x)):(x))
+//#define MAX(a,b) (((a) > (b)) ? (a) : (b))
+//#define MIN(a,b) (((a) < (b)) ? (a) : (b))
+#define MAKEINT16(a, b) ((INT16)(((UINT8)(a)) | ((INT16)((UINT8)(b))) << 8))
+#define MAKEINT32(a, b) ((INT32)(((UINT16)(a)) | ((INT32)((UINT16)(b))) << 16))
+#define MAKEUINT16(a, b) ((UINT16)(((UINT8)(a)) | ((UINT16)((UINT8)(b))) << 8))
+#define MAKEUINT32(a, b) ((UINT32)(((UINT16)(a)) | ((UINT32)((UINT16)(b))) << 16))
+#define LOINT8(w) ((INT8)(w))
+#define HIINT8(w) ((INT8)((UINT16)(w) >> 8))
+#define LOUINT8(w) ((UINT8)(w))
+#define HIUINT8(w) ((UINT8)((UINT16)(w) >> 8))
+#define LOINT16(l) ((INT16)(l))
+#define HIINT16(l) ((INT16)((UINT32)(l) >> 16))
+#define LOUINT16(l) ((UINT16)(l))
+#define HIUINT16(l) ((UINT16)((UINT32)(l) >> 16))
+//#define offsetof(TYPE, MEMBER) ((u32) &((TYPE *)0)->MEMBER)
+#define offsetofvar(VAR, MEMBER) (((u32) &(VAR.MEMBER)) - ((u32) &VAR))
+/* Remove const cast-away warnings from gcc -Wcast-qual */
+#define __UNCONST(a) ((void *)(unsigned long)(const void *)(a))
+#define __P(protos) protos
+//#define ALIGN(val,exp) (((val) + ((exp)-1)) & ~((exp)-1))
+//#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
+#define LAST_ELEMENT(x) (&x[ARRAY_SIZE(x)-1])
+#define TCHAR_SIZEOF(sz) (sizeof(sz)/sizeof(TCHAR))
+#define BOUND(x, min, max) ( (x) < (min) ? (min) : ((x) > (max) ? (max):(x)) )
+#define roundedsizeof(t) ((sizeof(t)+sizeof(int)-1)&~(sizeof(int)-1))
+#define IS_32BIT_ALIGN(nAdd) ((UINT32)(((UINT32)(nAdd)) & 0x3)==0)
+#define IS_16_ALIGN(nSize) ((UINT32)(((UINT32)(nSize))& 0x0f) == 0)
+#define ABS(x) ((x<0)?(-(x)):(x))
+
+// Set a breakpoint, to enter GDB.
+#define BREAKPOINT asm volatile("break 1\n\tnop\n\tnop\n\tnop")
+#define BKPT BREAKPOINT;
+#define GDB_FUNC_IN_RAM __attribute__((section(".ram")))
+
+// Preprocessor macros.
+#define STRINGIFY_VALUE(s) STRINGIFY(s)
+#define STRINGIFY(s) #s
+
+//#define cpu_to_le32(x) (x)
+//#define le32_to_cpu(x) (x)
+
+#if defined(UNICODE)
+#undef SIZEOF
+#define SIZEOF(type) (sizeof(type)/sizeof(UINT16))
+typedef UINT16* PSTR;
+typedef CONST UINT16* PCSTR;
+typedef UINT16 TCHAR;
+#undef TEXT
+#define TEXT(x) L ## x
+#else
+#undef SIZEOF
+#define SIZEOF(type) sizeof(type)
+typedef UINT8* PSTR;
+typedef CONST UINT8* PCSTR;
+typedef UINT8 TCHAR;
+typedef UINT8* PTCHAR;
+#undef TEXT
+#define TEXT(x) x
+#endif
+
+#define CPP_START extern "C" {
+#define CPP_END }
+#define TSTXT(x) x
+
+/// From http://www.ibm.com/developerworks/linux/library/l-gcc-hacks/
+/// Macro to use in a if statement to tell the compiler this branch
+/// is likely taken, and optimize accordingly.
+#define LIKELY(x) __builtin_expect(!!(x), 1)
+/// Macro to use in a if statement to tell the compiler this branch
+/// is unlikely take, and optimize accordingly.
+#define UNLIKELY(x) __builtin_expect(!!(x), 0)
+
+
+/// For packing structure
+#define PACKED __attribute__((packed))
+
+/// To describe alignment
+#define ALIGNED(a) __attribute__((aligned(a)))
+
+// C++ needs to know that types and declarations are C, not C++.
+#ifdef __cplusplus
+# define EXTERN_C_START extern "C" {
+# define EXTERN_C_END }
+#else
+# define EXTERN_C_START
+# define EXTERN_C_END
+#endif
+
+
+#endif // __CS_TYPE_H__
+
diff --git a/arch/arm/include/asm/arch-rda/defs_mdcom.h b/arch/arm/include/asm/arch-rda/defs_mdcom.h
new file mode 100644
index 0000000000..748b743fcf
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/defs_mdcom.h
@@ -0,0 +1,160 @@
+#ifndef _DEFS_MDCOM_H_
+#define _DEFS_MDCOM_H_
+
+#include <asm/arch/hardware.h>
+
+#ifdef RDA_MDCOM_DEBUG
+#define rdamddbg(fmt,args...) printf (fmt ,##args)
+#else
+#define rdamddbg(fmt,args...)
+#endif /* RDA_MDCOM_DEBUG */
+
+/*
+ * Convert modem address to AP address
+ */
+#define RDA_ADD_M2A(x) (((x) & 0x0FFFFFFF) | 0x10000000)
+
+/*
+ * Modem boot context address
+ */
+#define RDA_BOOT_CTX_ADD 0x11C00100
+
+/*
+ * Modem map pointer
+ */
+#define RDA_MODEM_MAP_PTR 0x11C0027C
+#define RDA_MODEM_MAP_QTY 0x1A
+
+/*
+ * Modem RAM info
+ */
+#if defined(_TGT_MODEM_MEM_SIZE) && (_TGT_MODEM_MEM_SIZE > 0)
+#define RDA_MODEM_RAM_BASE (PHYS_SDRAM_1 + ((_TGT_MODEM_MEM_BASE) << 20))
+#define RDA_MODEM_RAM_SIZE (_TGT_MODEM_MEM_SIZE << 20)
+#define RDA_GSM_MODEM_RAM_END (RDA_MODEM_RAM_BASE + (_TGT_MODEM_GSM_MEM_SIZE << 20))
+#define RDA_MODEM_RAM_END RDA_GSM_MODEM_RAM_END
+#ifdef _TGT_MODEM_WCDMA_MEM_SIZE
+#define RDA_WCDMA_MODEM_RAM_END (RDA_GSM_MODEM_RAM_END + (_TGT_MODEM_WCDMA_MEM_SIZE << 20))
+#endif
+#else
+#define RDA_MODEM_RAM_BASE RDA_MD_PSRAM_BASE
+#define RDA_MODEM_RAM_SIZE RDA_MD_PSRAM_SIZE
+#define RDA_MODEM_RAM_END (RDA_MODEM_RAM_BASE + RDA_MODEM_RAM_SIZE)
+#endif
+
+#define RDA_MODEM_INTSRAM_BASE (0x11C00000)
+#define RDA_MODEM_INTSRAM_SIZE (0x18000)
+#define RDA_MODEM_INTSRAM_END \
+ (RDA_MODEM_INTSRAM_BASE + RDA_MODEM_INTSRAM_SIZE)
+
+/*
+ * HEARTBEAT data
+ */
+#define RDA_AP_MBX_HEARTBEAT_ADD (RDA_MD_MAILBOX_BASE + 0)
+
+/*
+ * CHANNEL
+ */
+#define RDA_MDCOM_CHN_AT_HEAD_ADD_READ 0x00200430
+#define RDA_MDCOM_CHN_AT_HEAD_ADD_WRITE 0x00200C40
+#define RDA_MDCOM_CHN_AT_BUF_ADD_READ 0x00200440
+#define RDA_MDCOM_CHN_AT_BUF_ADD_WRITE 0x00200C50
+#define RDA_MDCOM_CHN_AT_BUF_LEN_READ 2048
+#define RDA_MDCOM_CHN_AT_BUF_LEN_WRITE 2048
+
+#define RDA_MDCOM_CHN_SYS_HEAD_ADD_READ 0x00200010
+#define RDA_MDCOM_CHN_SYS_HEAD_ADD_WRITE 0x00200220
+#define RDA_MDCOM_CHN_SYS_BUF_ADD_READ 0x00200020
+#define RDA_MDCOM_CHN_SYS_BUF_ADD_WRITE 0x00200230
+#define RDA_MDCOM_CHN_SYS_BUF_LEN_READ 512
+#define RDA_MDCOM_CHN_SYS_BUF_LEN_WRITE 512
+
+#define RDA_MDCOM_CHN_TRACE_HEAD_ADD_READ 0x00201450
+#define RDA_MDCOM_CHN_TRACE_HEAD_ADD_WRITE 0x00201860
+#define RDA_MDCOM_CHN_TRACE_BUF_ADD_READ 0x00201460
+#define RDA_MDCOM_CHN_TRACE_BUF_ADD_WRITE 0x00201870
+#define RDA_MDCOM_CHN_TRACE_BUF_LEN_READ 1024
+#define RDA_MDCOM_CHN_TRACE_BUF_LEN_WRITE 512
+
+/*
+ * MAGIC NUMBER
+ */
+#define RDA_AP_MBX_MAGIC_NUMBER_ADD (RDA_MD_MAILBOX_BASE + 0x1A70)
+#define RDA_MAGIC_SYSTEM_STARTED_FLAG 0x057a67ed
+#define RDA_MAGIC_MODEM_CRASH_FLAG 0x9db09db0
+#define RDA_MAGIC_FACT_UPD_CMD_FLAG 0xfac40c3d
+#define RDA_MAGIC_FACT_UPD_TYPE_FLAG 0x496efa00
+#define RDA_MAGIC_FACT_UPD_TYPE_FLAG_MASK 0xFFFFFF00
+#define RDA_MAGIC_FACT_UPD_TYPE_CALIB 0x1
+#define RDA_MAGIC_FACT_UPD_TYPE_FACT 0x2
+#define RDA_MAGIC_FACT_UPD_TYPE_AP_FACT 0x4
+
+/*
+ * LOG BUFFER INFO
+ */
+#define RDA_AP_MBX_LOG_BUF_INFO_ADD (RDA_MD_MAILBOX_BASE + 0x1A80)
+#define RDA_AP_MBX_MAX_MODEM_LOG_LEN 0x10000
+#define RDA_AP_MBX_MAX_MODEM_EXC_LEN 0x1000
+
+
+/*
+ * BOOT_HST_MONITOR_X_CTX_T
+ * This structure is used by the HOST execution command
+ * It can store PC, SP, param ptr and returned value ptr
+ * The command type field could reveal itself as really
+ * relevant in the future
+ */
+typedef volatile struct {
+ u32 cmdType; // 0x00000000
+ u32 pc; // 0x00000004
+ u32 sp; // 0x00000008
+ void* param; // 0x0000000c
+ void* returnedValue; // 0x00000010
+} RDA_BOOT_HST_MONITOR_X_CTX_T;
+
+typedef struct
+{
+ u32 revision; //0x00000000
+ u32 number; //0x00000004
+ u32 date; //0x00000008
+ u8* string; //0x0000000C
+} RDA_MODEM_MAP_VERSION_T; //Size : 0x10
+
+typedef struct
+{
+ RDA_MODEM_MAP_VERSION_T* version; //0x00000000
+ void* access; //0x00000004
+} RDA_MODEM_MAP_MODULE_T; //Size : 0x8
+
+typedef struct
+{
+ /* Modem heartbeat counter */
+ volatile u32 bpCounter;
+ /* AP heartbeat counter */
+ volatile u32 apCounter;
+ /* System reset cause */
+ u32 resetCause;
+ /* Communication interface version */
+ u32 version;
+} RDA_AP_MBX_HEARTBEAT_T;
+
+typedef struct {
+ u32 sysStarted;
+ u32 modemCrashed;
+ u32 factUpdateCmd;
+ u32 factUpdateType;
+} RDA_AP_MBX_MAGIC_NUMBER_T;
+
+typedef struct {
+ u32 modemAddr;
+ u32 modemLen;
+ u32 modemExcAddr;
+ u32 modemExcLen;
+ struct {
+ u32 apAddr;
+ u32 apLen;
+ u32 reserved[2];
+ } apLog[5];
+} RDA_AP_MBX_LOG_BUF_INFO_T;
+
+#endif // _DEFS_MDCOM_H_
diff --git a/arch/arm/include/asm/arch-rda/dma.h b/arch/arm/include/asm/arch-rda/dma.h
new file mode 100644
index 0000000000..8b8f553b2a
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/dma.h
@@ -0,0 +1,73 @@
+/***************************************************************
+*
+* Copyright(C) RDA Micro Company.,2012
+* All Rights Reserved. Confidential
+*
+****************************************************************
+*
+* Project: RDA8810
+* File Name: arch/arm/include/asm/dma.h
+*
+* Author: Jason Tao
+* Creation Date: 2012-11-15
+*
+*****************************************************************
+*
+* Definition of registers of DMA
+*
+*****************************************************************
+*/
+
+
+#ifndef __DMA_H__
+#define __DMA_H__
+
+#include <asm/types.h>
+
+#define BIT(x) (1UL << (x))
+
+#define RDA_DMA_CHAN_REG 0x00
+
+#define RDA_DMA_STATUS_REG 0x04
+#define RDA_DMA_STA_INT BIT(2)
+
+#define RDA_DMA_CTL_REG 0x08
+#define RDA_DMA_CTL_EN BIT(0)
+#define RDA_DMA_CTL_INT_MASK BIT(1)
+#define RDA_DMA_CTL_INT_CLE BIT(2)
+#define RDA_DMA_CTL_SRC_SEL BIT(24)
+#define RDA_DMA_CTL_DST_SEL BIT(25)
+
+#define RDA_DMA_SRC_REG 0x0C
+#define RDA_DMA_DST_REG 0x10
+#define RDA_DMA_XFER_SIZE_REG 0x18
+
+/* In general, data will be transisted via AXI bus. */
+#define RDA_DMA_NOR_MODE (0x00000000)
+/* Fast write mode : bit25 is for control writing via sram port. */
+#define RDA_DMA_FW_MODE RDA_DMA_CTL_DST_SEL
+/* Fast read mode : bit24 is for control reading via sram port. */
+#define RDA_DMA_FR_MODE RDA_DMA_CTL_SRC_SEL
+#define RDA_DMA_MODE_MASK (RDA_DMA_CTL_SRC_SEL | RDA_DMA_CTL_DST_SEL)
+
+struct rda_dma_chan_params {
+ u32 src_addr;
+ u32 dst_addr;
+ u32 xfer_size;
+ u32 dma_mode;
+};
+
+int rda_set_dma_params(u8 ch, struct rda_dma_chan_params *params);
+
+void rda_start_dma(u8 ch);
+
+void rda_stop_dma(u8 ch);
+
+void rda_poll_dma(u8 ch);
+
+int rda_request_dma(u8 *dma_ch_out);
+
+void rda_free_dma(u8 ch);
+
+#endif /* __DMA_H__ */
+
diff --git a/arch/arm/include/asm/arch-rda/factory.h b/arch/arm/include/asm/arch-rda/factory.h
new file mode 100644
index 0000000000..45b9227f04
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/factory.h
@@ -0,0 +1,104 @@
+#ifndef __FACTORY_DATA_H__
+#define __FACTORY_DATA_H__
+
+#include "defs_mdcom.h"
+
+/* data size define */
+#define RDA_MODEM_CAL_LEN 8192 /* rf/audio calibration data */
+#define RDA_MODEM_FACT_LEN 4096 /* modem factory info */
+#define RDA_AP_FACT_LEN 4096 /* ap factory info */
+#define RDA_MODEM_EXT_CAL_LEN 16384 /* extended rf/audio calibration data, includes wcdma data */
+#define RDA_FACT_TOTAL_LEN \
+ (RDA_MODEM_CAL_LEN + RDA_MODEM_FACT_LEN + RDA_AP_FACT_LEN \
+ + RDA_MODEM_EXT_CAL_LEN)
+
+/* loading addresses */
+/* extended calibration data loading address */
+#define RDA_MODEM_EXT_CAL_ADDR (RDA_MODEM_RAM_END - RDA_FACT_TOTAL_LEN)
+/* calibration data loading address */
+#define RDA_MODEM_CAL_ADDR (RDA_MODEM_EXT_CAL_ADDR + RDA_MODEM_EXT_CAL_LEN)
+/* modem factory info loading address */
+#define RDA_MODEM_FACT_ADDR (RDA_MODEM_CAL_ADDR + RDA_MODEM_CAL_LEN)
+/* ap factory info loading address */
+#define RDA_AP_FACT_ADDR (RDA_MODEM_FACT_ADDR + RDA_MODEM_FACT_LEN)
+
+/* version define & magic number */
+#define AP_FACTORY_MAJOR_VERSION 2
+#define AP_FACTORY_MINOR_VERSION 1 /* always be 1 */
+#define AP_FACTORY_MARK_VERSION 0xFAC40000
+#define AP_FACTORY_VERSION_NUMBER (AP_FACTORY_MARK_VERSION | \
+ (AP_FACTORY_MAJOR_VERSION << 8) | AP_FACTORY_MINOR_VERSION)
+#define AP_FACTORY_CLOCK_MAGIC 0x55515263
+
+/* old version compatibility */
+#define AP_FACTORY_MAJOR_VERSION_1 1
+#define AP_FACTORY_VERSION_1_LEN (RDA_MODEM_CAL_LEN + \
+ RDA_MODEM_FACT_LEN + RDA_AP_FACT_LEN)
+#define AP_FACTORY_VERSION_1_NUMBER (AP_FACTORY_MARK_VERSION | \
+ (AP_FACTORY_MAJOR_VERSION_1 << 8) | AP_FACTORY_MINOR_VERSION)
+
+#define FACT_NAME_LEN 128
+#define AP_FACTORY_CLOCK_CFG_LEN 1024
+#define GS_CALI_DATA_LEN 32
+
+struct ap_factory_config {
+ unsigned int version;
+ unsigned int crc;
+ unsigned char lcd_name[FACT_NAME_LEN];
+ unsigned char bootlogo_name[FACT_NAME_LEN];
+ unsigned char clock_config[AP_FACTORY_CLOCK_CFG_LEN];
+ unsigned char gs_cali_data[GS_CALI_DATA_LEN];
+};
+
+struct factory_data_sector {
+ unsigned char modem_calib_data[RDA_MODEM_CAL_LEN];
+ unsigned char modem_factory_data[RDA_MODEM_FACT_LEN];
+ unsigned char ap_factory_data[RDA_AP_FACT_LEN];
+ unsigned char modem_ext_calib_data[RDA_MODEM_EXT_CAL_LEN];
+};
+
+int factory_load(void);
+unsigned long factory_get_all(unsigned char *buf);
+const unsigned char* factory_get_ap_factory(void);
+const unsigned char* factory_get_modem_calib(void);
+const unsigned char* factory_get_modem_ext_calib(void);
+const unsigned char* factory_get_modem_factory(void);
+const unsigned char* factory_get_lcd_name(void);
+const unsigned char* factory_get_bootlogo_name(void);
+int factory_set_ap_factory(unsigned char *data);
+int factory_set_modem_calib(unsigned char *data);
+int factory_set_modem_ext_calib(unsigned char *data);
+int factory_set_modem_factory(unsigned char *data);
+int factory_burn(void);
+int factory_update_modem_calib(unsigned char *data);
+int factory_update_modem_ext_calib(unsigned char *data);
+int factory_update_modem_factory(unsigned char *data);
+int factory_update_ap_factory(unsigned char *data);
+int factory_update_all(unsigned char *data, unsigned long size);
+int factory_copy_from_mem(const u8 *buf);
+
+
+/* Define a simple message function, for PC calib tool and u-boot.
+ Borrow ap_factory_data top 1024 bytes to send and receive message. */
+#define RDA_AP_CALIB_MSG_MAGIC 0xca1b5353
+#define RDA_AP_CALIB_MSG_LEN 1024
+#define RDA_AP_CALIB_MSG_ADDR (RDA_AP_FACT_ADDR + RDA_AP_FACT_LEN - RDA_AP_CALIB_MSG_LEN)
+
+#define RDA_AP_CALIB_MSG_DATA_LEN 1012
+struct ap_calib_message {
+ unsigned int magic; /* must be RDA_AP_CALIB_MSG_MAGIC */
+ unsigned int id; /* see below defines */
+ unsigned int size; /* the size of message data */
+ unsigned char data[RDA_AP_CALIB_MSG_DATA_LEN];
+};
+
+/* PC calib tool -> u-boot */
+#define RDA_AP_CALIB_MSG_SET_PRDINFO 0x1
+int factory_get_ap_calib_msg(unsigned int *id, unsigned int *size, unsigned char *data);
+
+/* u-boot -> PC calib tool */
+#define RDA_AP_CALIB_MSG_GET_PRDINFO 0x80000001
+int factory_set_ap_calib_msg(unsigned int id, unsigned int size, unsigned char *data);
+
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/global_macros.h b/arch/arm/include/asm/arch-rda/global_macros.h
new file mode 100644
index 0000000000..10bb7ecce3
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/global_macros.h
@@ -0,0 +1,67 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2013, RDA Microelectronics.
+// All Rights Reserved
+//
+// This source code is the property of RDA Microelectronics and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA Microelectronics.
+//
+//==============================================================================
+//
+// THIS FILE WAS GENERATED FROM ITS CORRESPONDING XML VERSION WITH COOLXML.
+//
+// !!! PLEASE DO NOT EDIT !!!
+//
+// $HeadURL$
+// $Author$
+// $Date$
+// $Revision$
+//
+//==============================================================================
+//
+/// @file
+//
+//==============================================================================
+
+#ifndef _GLOBAL_MACROS_H_
+#define _GLOBAL_MACROS_H_
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+
+
+
+//#define KSEG0(addr) ( (addr) | 0x80000000 )
+//#define KSEG1(addr) ( (addr) | 0xa0000000 )
+#define KSEG0(addr) ( (addr) )
+#define KSEG1(addr) ( (addr) )
+
+
+/* Define access cached or uncached */
+#define MEM_ACCESS_CACHED(addr) ((UINT32*)((UINT32)(addr)&0xdfffffff))
+#define MEM_ACCESS_UNCACHED(addr) ((UINT32*)((UINT32)(addr)|0x20000000))
+
+/* Register access for assembly */
+#define BASE_HI(val) (((0xa0000000 | val) & 0xffff8000) + (val & 0x8000))
+#define BASE_LO(val) (((val) & 0x7fff) - (val & 0x8000))
+
+
+/* to extract bitfield from register value */
+#define GET_BITFIELD(dword, bitfield) (((dword) & (bitfield ## _MASK)) >> (bitfield ## _SHIFT))
+
+#define EXP2(n) (1<<(n))
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/hardware.h b/arch/arm/include/asm/arch-rda/hardware.h
new file mode 100644
index 0000000000..f498734273
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/hardware.h
@@ -0,0 +1,19 @@
+#ifndef __ASM_ARCH_HARDWARE_H
+#define __ASM_ARCH_HARDWARE_H
+
+#include <config.h>
+#include <asm/sizes.h>
+
+#ifndef __ASSEMBLY__
+typedef volatile unsigned int REG32;
+typedef unsigned char BOOL;
+
+#define TRUE (1==1)
+#define FALSE (1==0)
+#endif
+
+/* to extract bitfield from register value */
+#define GET_BITFIELD(dword, bitfield) (((dword) & (bitfield ## _MASK)) >> (bitfield ## _SHIFT))
+#define SET_BITFIELD(dword, bitfield, value) (((dword) & ~(bitfield ## _MASK)) | (bitfield(value)))
+
+#endif /* __ASM_ARCH_HARDWARE_H */
diff --git a/arch/arm/include/asm/arch-rda/hw_test.h b/arch/arm/include/asm/arch-rda/hw_test.h
new file mode 100644
index 0000000000..5dec670f6c
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/hw_test.h
@@ -0,0 +1,61 @@
+#ifndef __RDA_HW_TEST_H__
+#define __RDA_HW_TEST_H__
+
+#ifdef CONFIG_VPU_TEST
+extern void vpu_sta_test(int times);
+extern int vpu_md5_test(int times);
+#else
+static inline void vpu_sta_test(int times){};
+static inline int vpu_md5_test(int times){return 0;};
+#endif /* CONFIG_VPU_TEST */
+
+#ifdef CONFIG_CPU_TEST
+extern void cpu_pll_test(int times);
+#else
+static inline void cpu_pll_test(int times){};
+#endif /*CONFIG_CPU_TEST */
+
+#ifdef CONFIG_DDR_TEST
+extern int ddr_mem_copy_test(int times,unsigned int src_addr, unsigned int des_addr, unsigned int nword);
+#else
+static inline int ddr_mem_copy_test(int times,unsigned int src_addr, unsigned int des_addr, unsigned int nword){return 0;}
+#endif /* CONFIG_DDR_TEST */
+
+#ifdef CONFIG_TIMER_TEST
+extern int tim_test(int timer_id,int times);
+#else
+static inline int tim_test(int timer_id,int times){ return 0;}
+#endif /* CONFIG_TIMER_TEST */
+
+#ifdef CONFIG_UART_TEST
+extern int uart_test(int uart_id,int times);
+#else
+static inline int uart_test(int uart_id,int times){ return 0;}
+#endif /* CONFIG_UART_TEST */
+
+#ifdef CONFIG_GIC_TEST
+extern int gic_test(int times);
+#else
+static inline int gic_test(int times){ return 0;}
+#endif /* CONFIG_GIC_TEST */
+
+#ifdef CONFIG_CACHE_TEST
+extern int cpu_cache_test(int times);
+#else
+static inline int cpu_cache_test(int times){ return 0;}
+#endif /* CONFIG_CACHE_TEST */
+
+#ifdef CONFIG_MIPI_LOOP_TEST
+extern int test_dsi_csi_loop(int times);
+#else
+static inline int test_dsi_csi_loop(int times) {return 0;};
+#endif /* CONFIG_MIPI_LOOP_TEST */
+
+#ifdef CONFIG_I2C_TEST
+extern int test_i2c(int id,int times);
+#else
+static inline int test_i2c(int id,int times){ return 0;}
+#endif /* CONFIG_I2C_TEST */
+
+
+#endif /*__RDA_HW_TEST_H__*/
diff --git a/arch/arm/include/asm/arch-rda/hwcfg.h b/arch/arm/include/asm/arch-rda/hwcfg.h
new file mode 100644
index 0000000000..aee369e7bb
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/hwcfg.h
@@ -0,0 +1,64 @@
+#ifndef __RDA_HWCFG_H
+#define __RDA_HWCFG_H
+
+/*
+ * HW BOOT MODE
+ * BIT_15: 1 - force download
+ * BIT_14: 1 - volume up
+ * BIT_13: 1 - volume down
+ * BIT_12: 1 - key on (power on key)
+ * BIT_11: 1 - force DL (skip NAND loading)
+ * BIT_10: 1 - to skip USB init (for cases USB init may fail)
+ * (in bootloader, this bit is used for calibration and driver test)
+ * BIT_7 : if BIT_3 == 1 (SPI FLASH): 1 - SDMMC, 1 - SPI FLASH
+ * if BIT_3 == 0 (NAND/eMMC): 1 - 4K SLC/8K MLC, 0 - 2K SLC/4K MLC
+ * BIT_4 : if BIT_3 == 1 (SPI FLASH): 1 - SPI NAND, 0 - SPI NOR
+ * if BIT_3 == 0 (NAND/eMMC): 1 - SDMMC, 0 - NAND/eMMC
+ * BIT_3 : 1 - use SPI NAND, 0 - use NAND/eMMC
+ * BIT_2 : 1 - use eMMC, 0 - use NAND
+ * BIT_1 : 1 - 8bit NAND, 0 - 16bit NAND
+ * BIT_0 : 1 - MLC, 0 - SLC
+ */
+#define RDA_HW_CFG_BIT_15 (1 << 15)
+#define RDA_HW_CFG_BIT_14 (1 << 14)
+#define RDA_HW_CFG_BIT_13 (1 << 13)
+#define RDA_HW_CFG_BIT_12 (1 << 12)
+#define RDA_HW_CFG_BIT_11 (1 << 11)
+#define RDA_HW_CFG_BIT_10 (1 << 10)
+#define RDA_HW_CFG_BIT_7 (1 << 7)
+#define RDA_HW_CFG_BIT_4 (1 << 4)
+#define RDA_HW_CFG_BIT_3 (1 << 3)
+#define RDA_HW_CFG_BIT_2 (1 << 2)
+#define RDA_HW_CFG_BIT_1 (1 << 1)
+#define RDA_HW_CFG_BIT_0 (1 << 0)
+
+/*
+ * SW BOOT MODE
+ * BIT_6 : PDL2
+ * BIT_5 : Autocall
+ * BIT_4 : Calib
+ * BIT_3 : Recovery
+ * BIT_2 : Fastboot
+ * BIT_1 : ROM force run
+ * BIT_0 : Modem EBC valid
+ */
+#define RDA_SW_CFG_BIT_6 (1 << 6)
+#define RDA_SW_CFG_BIT_5 (1 << 5)
+#define RDA_SW_CFG_BIT_4 (1 << 4)
+#define RDA_SW_CFG_BIT_3 (1 << 3)
+#define RDA_SW_CFG_BIT_2 (1 << 2)
+#define RDA_SW_CFG_BIT_1 (1 << 1)
+#define RDA_SW_CFG_BIT_0 (1 << 0)
+
+void rda_hwcfg_reg_set(u16);
+u16 rda_hwcfg_reg_get(void);
+u16 rda_hwcfg_get(void);
+void rda_swcfg_reg_set(u16);
+u16 rda_swcfg_reg_get(void);
+u16 rda_swcfg_get(void);
+u16 rda_prod_id_get(void);
+u16 rda_metal_id_get(void);
+u16 rda_bond_id_get(void);
+void rda_nand_iodrive_set(void);
+
+#endif // __RDA_HWCFG_H
diff --git a/arch/arm/include/asm/arch-rda/ifc.h b/arch/arm/include/asm/arch-rda/ifc.h
new file mode 100644
index 0000000000..099d4a1020
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/ifc.h
@@ -0,0 +1,55 @@
+#ifndef _IFC_H_
+#define _IFC_H_
+
+#include <asm/arch/hardware.h>
+
+#define HAL_UNKNOWN_CHANNEL 0xff
+
+typedef enum {
+ HAL_IFC_UART_TX,
+ HAL_IFC_UART_RX,
+ HAL_IFC_UART2_TX,
+ HAL_IFC_UART2_RX,
+ HAL_IFC_SPI_TX,
+ HAL_IFC_SPI_RX,
+ HAL_IFC_SPI2_TX,
+ HAL_IFC_SPI2_RX,
+ HAL_IFC_SPI3_TX,
+ HAL_IFC_SPI3_RX,
+ HAL_IFC_SDMMC_TX,
+ HAL_IFC_SDMMC_RX,
+ HAL_IFC_SDMMC2_TX,
+ HAL_IFC_SDMMC2_RX,
+ HAL_IFC_SDMMC3_TX,
+ HAL_IFC_SDMMC3_RX,
+ HAL_IFC_NFSC_TX,
+ HAL_IFC_NFSC_RX,
+ HAL_IFC_UART3_TX,
+ HAL_IFC_UART3_RX,
+ HAL_IFC_NO_REQWEST
+} HAL_IFC_REQUEST_ID_T;
+
+// =============================================================================
+// HAL_IFC_MODE_T
+// -----------------------------------------------------------------------------
+/// Define the mode used to configure an IFC transfer. This enum describes
+/// the width (8 or 32 bits) and if the transfer is autodisabled or manually
+/// disabled.
+// =============================================================================
+typedef enum
+{
+ HAL_IFC_SIZE_8_MODE_MANUAL = (0 | 0),
+ HAL_IFC_SIZE_8_MODE_AUTO = (0 | SYS_IFC_AUTODISABLE),
+ HAL_IFC_SIZE_32_MODE_MANUAL = (SYS_IFC_SIZE_WORD | 0),
+ HAL_IFC_SIZE_32_MODE_AUTO = (SYS_IFC_SIZE_WORD | SYS_IFC_AUTODISABLE),
+} HAL_IFC_MODE_T;
+
+void hal_IfcOpen(void);
+HAL_IFC_REQUEST_ID_T hal_IfcGetOwner(u8 channel);
+void hal_IfcChannelRelease(HAL_IFC_REQUEST_ID_T requestId, u8 channel);
+void hal_IfcChannelFlush(HAL_IFC_REQUEST_ID_T requestId, u8 channel);
+BOOL hal_IfcChannelIsFifoEmpty(HAL_IFC_REQUEST_ID_T requestId, u8 channel);
+u8 hal_IfcTransferStart(HAL_IFC_REQUEST_ID_T requestId, u8* memStartAddr, u32 xferSize, HAL_IFC_MODE_T ifcMode);
+
+#endif // _IFC_H
+
diff --git a/arch/arm/include/asm/arch-rda/iomap_rda8810.h b/arch/arm/include/asm/arch-rda/iomap_rda8810.h
new file mode 100644
index 0000000000..256b189b30
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/iomap_rda8810.h
@@ -0,0 +1,162 @@
+#ifndef __IOMAP_RDA8810_H
+#define __IOMAP_RDA8810_H
+
+#include <asm/sizes.h>
+
+#define RDA_SRAM_BASE 0x00100000
+#define RDA_SRAM_SIZE SZ_64K
+
+#define RDA_MD_MAILBOX_BASE 0x00200000
+#define RDA_MD_MAILBOX_SIZE SZ_8K
+
+#define RDA_MODEM_BASE 0x10000000
+#define RDA_MODEM_SIZE SZ_256M
+
+#define RDA_MD_SYSCTRL_BASE 0x11A00000
+#define RDA_MD_SYSCTRL_SIZE SZ_4K
+
+#define RDA_GPIO_BASE 0x11A08000
+#define RDA_GPIO_SIZE SZ_4K
+
+#define RDA_CFG_REGS_BASE 0x11A09000
+#define RDA_CFG_REGS_SIZE SZ_4K
+
+#define RDA_MODEM_SPI2_BASE 0x11A14000
+#define RDA_MODEM_SPI2_SIZE SZ_4K
+
+#define RDA_MODEM_XCPU_BASE 0x11A16000
+#define RDA_MODEM_XCPU_SIZE SZ_4K
+
+#define RDA_MODEM_BCPU_BASE 0x11909000
+#define RDA_MODEM_BCPU_SIZE SZ_4K
+
+#define RDA_MD_PSRAM_BASE (RDA_MODEM_BASE + 0x02000000)
+#define RDA_MD_PSRAM_SIZE SZ_4M
+
+#define RDA_CAMERA_BASE 0x20000000
+#define RDA_CAMERA_SIZE SZ_256K
+
+#define RDA_GOUDA_MEM_BASE 0x20040000
+#define RDA_GOUDA_MEM_SIZE SZ_256K
+
+#define RDA_GPU_BASE 0x20080000
+#define RDA_GPU_SIZE SZ_256K
+
+#define RDA_VOC_BASE 0x200C0000
+#define RDA_VOC_SIZE SZ_256K
+
+#define RDA_USB_BASE 0x20400000
+#define RDA_USB_SIZE SZ_256K
+
+#define RDA_SPIFLASH_BASE 0x20440000
+#define RDA_SPIFLASH_SIZE SZ_256K
+
+#define RDA_CONNECT_BASE 0x21000000
+#define RDA_CONNECT_SIZE SZ_4K
+
+#define RDA_L2CC_BASE 0x21100000
+#define RDA_L2CC_SIZE SZ_4K
+
+/* APB0 */
+#define RDA_INTC_BASE 0x20800000
+#define RDA_INTC_SIZE SZ_4K
+
+#define RDA_IMEM_BASE 0x20810000
+#define RDA_IMEM_SIZE SZ_4K
+
+#define RDA_DMA_BASE 0x20820000
+#define RDA_DMA_SIZE SZ_4K
+
+#define RDA_VPU_BASE 0x20830000
+#define RDA_VPU_SIZE SZ_4K
+
+#define RDA_GOUDA_BASE 0x20840000
+#define RDA_GOUDA_SIZE SZ_4K
+
+#define RDA_CAMERA_DMA_BASE 0x20850000
+#define RDA_CAMERA_DMA_SIZE SZ_4K
+
+/* APB1 */
+#define RDA_SYSCTRL_BASE 0x20900000
+#define RDA_SYSCTRL_SIZE SZ_4K
+
+#define RDA_TIMER_BASE 0x20910000
+#define RDA_TIMER_SIZE SZ_4K
+
+#define RDA_KEYPAD_BASE 0x20920000
+#define RDA_KEYPAD_SIZE SZ_4K
+
+#define RDA_GPIO_A_BASE 0x20930000
+#define RDA_GPIO_A_SIZE SZ_4K
+
+#define RDA_GPIO_B_BASE 0x20931000
+#define RDA_GPIO_B_SIZE SZ_4K
+
+#define RDA_GPIO_D_BASE 0x20932000
+#define RDA_GPIO_D_SIZE SZ_4K
+
+#define RDA_PWM_BASE 0x20940000
+#define RDA_PWM_SIZE SZ_4K
+
+#define RDA_I2C1_BASE 0x20950000
+#define RDA_I2C1_SIZE SZ_4K
+
+#define RDA_I2C2_BASE 0x20960000
+#define RDA_I2C2_SIZE SZ_4K
+
+#define RDA_I2C3_BASE 0x20970000
+#define RDA_I2C3_SIZE SZ_4K
+
+#define RDA_COMREGS_BASE 0x20980000
+#define RDA_COMREGS_SIZE SZ_4K
+
+#define RDA_DMC400_BASE 0x20990000
+#define RDA_DMC400_SIZE SZ_4K
+
+#define RDA_DDRPHY_BASE 0x209A0000
+#define RDA_DDRPHY_SIZE SZ_4K
+
+#define RDA_DBGAPB_BASE 0x209B0000
+#define RDA_DBGAPB_SIZE SZ_4K
+
+#define RDA_AIF_BASE 0x209E0000
+#define RDA_AIF_SIZE SZ_4K
+
+#define RDA_AUIFC_BASE 0x209F0000
+#define RDA_AUIFC_SIZE SZ_4K
+
+/* APB2 */
+#define RDA_UART1_BASE 0x20A00000
+#define RDA_UART1_SIZE SZ_4K
+
+#define RDA_UART2_BASE 0x20A10000
+#define RDA_UART2_SIZE SZ_4K
+
+#define RDA_SPI1_BASE 0x20A20000
+#define RDA_SPI1_SIZE SZ_4K
+
+#define RDA_SPI2_BASE 0x20A30000
+#define RDA_SPI2_SIZE SZ_4K
+
+#define RDA_SPI3_BASE 0x20A40000
+#define RDA_SPI3_SIZE SZ_4K
+
+#define RDA_SDMMC1_BASE 0x20A50000
+#define RDA_SDMMC1_SIZE SZ_4K
+
+#define RDA_SDMMC2_BASE 0x20A60000
+#define RDA_SDMMC2_SIZE SZ_4K
+
+#define RDA_SDMMC3_BASE 0x20A70000
+#define RDA_SDMMC3_SIZE SZ_4K
+
+#define RDA_NAND_BASE 0x20A80000
+#define RDA_NAND_SIZE SZ_16K
+
+#define RDA_UART3_BASE 0x20A90000
+#define RDA_UART3_SIZE SZ_16K
+
+#define RDA_IFC_BASE 0x20AF0000
+#define RDA_IFC_SIZE SZ_4K
+
+#endif /* __IOMAP_RDA8810_H */
diff --git a/arch/arm/include/asm/arch-rda/iomap_rda8810e.h b/arch/arm/include/asm/arch-rda/iomap_rda8810e.h
new file mode 100644
index 0000000000..2b9bcac307
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/iomap_rda8810e.h
@@ -0,0 +1,180 @@
+#ifndef __IOMAP_RDA8810E_H
+#define __IOMAP_RDA8810E_H
+
+#include <asm/sizes.h>
+
+#define RDA_SRAM_BASE 0x00100000
+#define RDA_SRAM_SIZE SZ_64K
+
+#define RDA_MD_MAILBOX_BASE 0x00200000
+#define RDA_MD_MAILBOX_SIZE SZ_8K
+
+#define RDA_MODEM_BASE 0x10000000
+#define RDA_MODEM_SIZE SZ_256M
+
+#define RDA_MD_SYSCTRL_BASE 0x11A00000
+#define RDA_MD_SYSCTRL_SIZE SZ_4K
+
+#define RDA_GPIO_BASE 0x11A08000
+#define RDA_GPIO_SIZE SZ_4K
+
+#define RDA_CFG_REGS_BASE 0x11A09000
+#define RDA_CFG_REGS_SIZE SZ_4K
+
+#define RDA_MODEM_SPI2_BASE 0x11A14000
+#define RDA_MODEM_SPI2_SIZE SZ_4K
+
+#define RDA_MODEM_XCPU_BASE 0x11A16000
+#define RDA_MODEM_XCPU_SIZE SZ_4K
+
+#define RDA_MODEM_BCPU_BASE 0x11909000
+#define RDA_MODEM_BCPU_SIZE SZ_4K
+
+#define RDA_MD_PSRAM_BASE (RDA_MODEM_BASE + 0x02000000)
+#define RDA_MD_PSRAM_SIZE SZ_4M
+
+#define RDA_CAMERA_BASE 0x20000000
+#define RDA_CAMERA_SIZE SZ_256K
+
+#define RDA_GOUDA_MEM_BASE 0x20040000
+#define RDA_GOUDA_MEM_SIZE SZ_256K
+
+#define RDA_GPU_BASE 0x20080000
+#define RDA_GPU_SIZE SZ_256K
+
+#define RDA_VOC_BASE 0x200C0000
+#define RDA_VOC_SIZE SZ_256K
+
+#define RDA_VOC2_BASE 0x20100000
+#define RDA_VOC2_SIZE SZ_256K
+
+#define RDA_USB_BASE 0x20400000
+#define RDA_USB_SIZE SZ_256K
+
+#define RDA_SPIFLASH_BASE 0x20440000
+#define RDA_SPIFLASH_SIZE SZ_256K
+
+#define RDA_CONNECT_BASE 0x21000000
+#define RDA_CONNECT_SIZE SZ_4K
+
+#define RDA_L2CC_BASE 0x21100000
+#define RDA_L2CC_SIZE SZ_4K
+
+/* APB0 */
+#define RDA_INTC_BASE 0x20800000
+#define RDA_INTC_SIZE SZ_4K
+
+#define RDA_IMEM_BASE 0x20810000
+#define RDA_IMEM_SIZE SZ_4K
+
+#define RDA_DMA_BASE 0x20820000
+#define RDA_DMA_SIZE SZ_4K
+
+#define RDA_GOUDA_BASE 0x20840000
+#define RDA_GOUDA_SIZE SZ_4K
+
+#define RDA_CAMERA_DMA_BASE 0x20850000
+#define RDA_CAMERA_DMA_SIZE SZ_4K
+
+#define RDA_MMU_GOUDA_BASE 0x20860000
+#define RDA_MMU_GOUDA_SIZE SZ_64K
+
+#define RDA_MMU_CAMERA_BASE 0x20870000
+#define RDA_MMU_CAMERA_SIZE SZ_64K
+
+#define RDA_MMU_VOC1_BASE 0x20880000
+#define RDA_MMU_VOC1_SIZE SZ_64K
+
+#define RDA_MMU_VOC2_BASE 0x20890000
+#define RDA_MMU_VOC2_SIZE SZ_64K
+
+/* APB1 */
+#define RDA_SYSCTRL_BASE 0x20900000
+#define RDA_SYSCTRL_SIZE SZ_4K
+
+#define RDA_TIMER_BASE 0x20910000
+#define RDA_TIMER_SIZE SZ_4K
+
+#define RDA_KEYPAD_BASE 0x20920000
+#define RDA_KEYPAD_SIZE SZ_4K
+
+#define RDA_GPIO_A_BASE 0x20930000
+#define RDA_GPIO_A_SIZE SZ_4K
+
+#define RDA_GPIO_B_BASE 0x20931000
+#define RDA_GPIO_B_SIZE SZ_4K
+
+#define RDA_GPIO_D_BASE 0x20932000
+#define RDA_GPIO_D_SIZE SZ_4K
+
+#define RDA_GPIO_E_BASE 0x20933000
+#define RDA_GPIO_E_SIZE SZ_4K
+
+#define RDA_PWM_BASE 0x20940000
+#define RDA_PWM_SIZE SZ_4K
+
+#define RDA_I2C1_BASE 0x20950000
+#define RDA_I2C1_SIZE SZ_4K
+
+#define RDA_I2C2_BASE 0x20960000
+#define RDA_I2C2_SIZE SZ_4K
+
+#define RDA_I2C3_BASE 0x20970000
+#define RDA_I2C3_SIZE SZ_4K
+
+#define RDA_COMREGS_BASE 0x20980000
+#define RDA_COMREGS_SIZE SZ_4K
+
+#define RDA_DMC400_BASE 0x20990000
+#define RDA_DMC400_SIZE SZ_4K
+
+#define RDA_DDRPHY_BASE 0x209A0000
+#define RDA_DDRPHY_SIZE SZ_4K
+
+#define RDA_DBGAPB_BASE 0x209B0000
+#define RDA_DBGAPB_SIZE SZ_4K
+
+#define RDA_AIF2_BASE 0x209D0000
+#define RDA_AIF2_SIZE SZ_4K
+
+#define RDA_AIF_BASE 0x209E0000
+#define RDA_AIF_SIZE SZ_4K
+
+#define RDA_AUIFC_BASE 0x209F0000
+#define RDA_AUIFC_SIZE SZ_4K
+
+/* APB2 */
+#define RDA_UART1_BASE 0x20A00000
+#define RDA_UART1_SIZE SZ_4K
+
+#define RDA_UART2_BASE 0x20A10000
+#define RDA_UART2_SIZE SZ_4K
+
+#define RDA_SPI1_BASE 0x20A20000
+#define RDA_SPI1_SIZE SZ_4K
+
+#define RDA_SPI2_BASE 0x20A30000
+#define RDA_SPI2_SIZE SZ_4K
+
+#define RDA_SPI3_BASE 0x20A40000
+#define RDA_SPI3_SIZE SZ_4K
+
+#define RDA_SDMMC1_BASE 0x20A50000
+#define RDA_SDMMC1_SIZE SZ_4K
+
+#define RDA_SDMMC2_BASE 0x20A60000
+#define RDA_SDMMC2_SIZE SZ_4K
+
+#define RDA_SDMMC3_BASE 0x20A70000
+#define RDA_SDMMC3_SIZE SZ_4K
+
+#define RDA_NAND_BASE 0x20A80000
+#define RDA_NAND_SIZE SZ_16K
+
+#define RDA_UART3_BASE 0x20A90000
+#define RDA_UART3_SIZE SZ_16K
+
+#define RDA_IFC_BASE 0x20AF0000
+#define RDA_IFC_SIZE SZ_4K
+
+#endif /* __IOMAP_RDA8810E_H */
diff --git a/arch/arm/include/asm/arch-rda/iomap_rda8810h.h b/arch/arm/include/asm/arch-rda/iomap_rda8810h.h
new file mode 100644
index 0000000000..200ecf1980
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/iomap_rda8810h.h
@@ -0,0 +1,192 @@
+#ifndef __IOMAP_RDA8810H_H
+#define __IOMAP_RDA8810H_H
+
+#include <asm/sizes.h>
+
+#define RDA_SRAM_BASE 0x00100000
+#define RDA_SRAM_SIZE SZ_64K
+
+#define RDA_MD_MAILBOX_BASE 0x00200000
+#define RDA_MD_MAILBOX_SIZE SZ_8K
+
+#define RDA_MODEM_BASE 0x10000000
+#define RDA_MODEM_SIZE SZ_256M
+
+#define RDA_MD_SYSCTRL_BASE 0x11A00000
+#define RDA_MD_SYSCTRL_SIZE SZ_4K
+
+#define RDA_GPIO_BASE 0x11A08000
+#define RDA_GPIO_SIZE SZ_4K
+
+#define RDA_CFG_REGS_BASE 0x11A09000
+#define RDA_CFG_REGS_SIZE SZ_4K
+
+#define RDA_MODEM_SPI2_BASE 0x11A14000
+#define RDA_MODEM_SPI2_SIZE SZ_4K
+
+#define RDA_MODEM_XCPU_BASE 0x11A16000
+#define RDA_MODEM_XCPU_SIZE SZ_4K
+
+#define RDA_MODEM_BCPU_BASE 0x11909000
+#define RDA_MODEM_BCPU_SIZE SZ_4K
+
+#define RDA_MD_PSRAM_BASE (RDA_MODEM_BASE + 0x02000000)
+#define RDA_MD_PSRAM_SIZE SZ_4M
+
+#define RDA_CAMERA_BASE 0x20000000
+#define RDA_CAMERA_SIZE SZ_256K
+
+#define RDA_GOUDA_MEM_BASE 0x20040000
+#define RDA_GOUDA_MEM_SIZE SZ_256K
+
+#define RDA_CAMERA2_BASE 0x20080000
+#define RDA_CAMERA2_SIZE SZ_256K
+
+#define RDA_VOC_BASE 0x200C0000
+#define RDA_VOC_SIZE SZ_256K
+
+#define RDA_USB_BASE 0x20400000
+#define RDA_USB_SIZE SZ_256K
+
+#define RDA_SPIFLASH_BASE 0x20440000
+#define RDA_SPIFLASH_SIZE SZ_256K
+
+#define RDA_ETHERNET_MAC_BASE 0x20480000
+#define RDA_ETHERNET_MAC_SIZE SZ_256K
+
+#define RDA_CONNECT_BASE 0x21000000
+#define RDA_CONNECT_SIZE SZ_1M
+
+#define RDA_L2CC_BASE 0x21100000
+#define RDA_L2CC_SIZE SZ_4K
+
+/* APB0 */
+#define RDA_INTC_BASE 0x20800000
+#define RDA_INTC_SIZE SZ_64K
+
+#define RDA_IMEM_BASE 0x20810000
+#define RDA_IMEM_SIZE SZ_64K
+
+#define RDA_DMA_BASE 0x20820000
+#define RDA_DMA_SIZE SZ_64K
+
+#define RDA_VPU_BASE 0x20830000
+#define RDA_VPU_SIZE SZ_64K
+
+#define RDA_GOUDA_BASE 0x20840000
+#define RDA_GOUDA_SIZE SZ_64K
+
+#define RDA_CAMERA_DMA_BASE 0x20850000
+#define RDA_CAMERA_DMA_SIZE SZ_64K
+
+#define RDA_MALI_GOUDA_BASE 0x20860000
+#define RDA_MALI_GOUDA_SIZE SZ_64K
+
+#define RDA_MMU_CAMERA2_BASE 0x20870000
+#define RDA_MMU_CAMERA2_SIZE SZ_64K
+
+#define RDA_MMU_VOC1_BASE 0x20880000
+#define RDA_MMU_VOC1_SIZE SZ_64K
+
+/* APB1 */
+#define RDA_SYSCTRL_BASE 0x20900000
+#define RDA_SYSCTRL_SIZE SZ_64K
+
+#define RDA_TIMER_BASE 0x20910000
+#define RDA_TIMER_SIZE SZ_4K
+
+#define RDA_TIMER1_BASE 0x20911000
+#define RDA_TIMER1_SIZE SZ_4K
+
+#define RDA_TIMER2_BASE 0x20912000
+#define RDA_TIMER2_SIZE SZ_4K
+
+#define RDA_KEYPAD_BASE 0x20920000
+#define RDA_KEYPAD_SIZE SZ_64K
+
+#define RDA_GPIO_A_BASE 0x20930000
+#define RDA_GPIO_A_SIZE SZ_4K
+
+#define RDA_GPIO_B_BASE 0x20931000
+#define RDA_GPIO_B_SIZE SZ_4K
+
+#define RDA_GPIO_D_BASE 0x20932000
+#define RDA_GPIO_D_SIZE SZ_4K
+
+#define RDA_GPIO_E_BASE 0x20933000
+#define RDA_GPIO_E_SIZE SZ_4K
+
+#define RDA_PWM_BASE 0x20940000
+#define RDA_PWM_SIZE SZ_64K
+
+#define RDA_COMREGS_BASE 0x20980000
+#define RDA_COMREGS_SIZE SZ_64K
+
+#define RDA_DMC400_BASE 0x20990000
+#define RDA_DMC400_SIZE SZ_4K
+
+#define RDA_DMCPAGESPY_BASE 0x20991000
+#define RDA_DMCPAGESPY_SIZE SZ_4K
+
+#define RDA_DDRPHY_BASE 0x209A0000
+#define RDA_DDRPHY_SIZE SZ_64K
+
+#define RDA_DBGAPB_BASE 0x209B0000
+#define RDA_DBGAPB_SIZE SZ_64K
+
+#define RDA_AIF2_BASE 0x209D0000
+#define RDA_AIF2_SIZE SZ_64K
+
+#define RDA_AIF_BASE 0x209E0000
+#define RDA_AIF_SIZE SZ_64K
+
+#define RDA_AUIFC_BASE 0x209F0000
+#define RDA_AUIFC_SIZE SZ_64K
+
+/* APB2 */
+#define RDA_UART1_BASE 0x20A00000
+#define RDA_UART1_SIZE SZ_4K
+
+#define RDA_UART2_BASE 0x20A10000
+#define RDA_UART2_SIZE SZ_4K
+
+#define RDA_SPI1_BASE 0x20A20000
+#define RDA_SPI1_SIZE SZ_4K
+
+#define RDA_SPI2_BASE 0x20A30000
+#define RDA_SPI2_SIZE SZ_4K
+
+#define RDA_SPI3_BASE 0x20A40000
+#define RDA_SPI3_SIZE SZ_4K
+
+#define RDA_SDMMC1_BASE 0x20A50000
+#define RDA_SDMMC1_SIZE SZ_4K
+
+#define RDA_SDMMC2_BASE 0x20A60000
+#define RDA_SDMMC2_SIZE SZ_4K
+
+#define RDA_SDMMC3_BASE 0x20A70000
+#define RDA_SDMMC3_SIZE SZ_4K
+
+#define RDA_NAND_BASE 0x20A80000
+#define RDA_NAND_SIZE SZ_64K
+
+#define RDA_UART3_BASE 0x20A90000
+#define RDA_UART3_SIZE SZ_16K
+
+#define RDA_A7MP2APB_BASE 0x20AA0000
+#define RDA_A7MP2APB_SIZE SZ_64K
+
+#define RDA_I2C1_BASE 0x20AB0000
+#define RDA_I2C1_SIZE SZ_64K
+
+#define RDA_I2C2_BASE 0x20AC0000
+#define RDA_I2C2_SIZE SZ_64K
+
+#define RDA_I2C3_BASE 0x20AD0000
+#define RDA_I2C3_SIZE SZ_64K
+
+#define RDA_IFC_BASE 0x20AF0000
+#define RDA_IFC_SIZE SZ_4K
+
+#endif /* __IOMAP_RDA8810H_H */
diff --git a/arch/arm/include/asm/arch-rda/iomap_rda8820.h b/arch/arm/include/asm/arch-rda/iomap_rda8820.h
new file mode 100644
index 0000000000..b1cfef3381
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/iomap_rda8820.h
@@ -0,0 +1,196 @@
+#ifndef __IOMAP_RDA8820_H
+#define __IOMAP_RDA8820_H
+
+#define RDA_SRAM_BASE 0x00100000
+#define RDA_SRAM_SIZE SZ_64K
+
+#define RDA_MD_MAILBOX_BASE 0x00200000
+#define RDA_MD_MAILBOX_SIZE SZ_8K
+
+#define RDA_MODEM_BASE 0x10000000
+#define RDA_MODEM_SIZE SZ_256M
+
+#define RDA_MD_SYSCTRL_BASE 0x11A00000
+#define RDA_MD_SYSCTRL_SIZE SZ_4K
+
+#define RDA_GPIO_BASE 0x11A08000
+#define RDA_GPIO_SIZE SZ_4K
+
+#define RDA_CFG_REGS_BASE 0x11A09000
+#define RDA_CFG_REGS_SIZE SZ_4K
+
+#define RDA_MODEM_SPI2_BASE 0x11A14000
+#define RDA_MODEM_SPI2_SIZE SZ_4K
+
+#define RDA_MODEM_XCPU_BASE 0x11A17000
+#define RDA_MODEM_XCPU_SIZE SZ_4K
+
+#define RDA_MODEM_BCPU_BASE 0x11909000
+#define RDA_MODEM_BCPU_SIZE SZ_4K
+
+#define RDA_MD_PSRAM_BASE (RDA_MODEM_BASE + 0x02000000)
+#define RDA_MD_PSRAM_SIZE SZ_16M
+
+#define RDA_CAMERA_BASE 0x20000000
+#define RDA_CAMERA_SIZE SZ_256K
+
+#define RDA_GOUDA_MEM_BASE 0x20040000
+#define RDA_GOUDA_MEM_SIZE SZ_256K
+
+#define RDA_GPU_BASE 0x20080000
+#define RDA_GPU_SIZE SZ_256K
+
+#define RDA_VOC_BASE 0x200C0000
+#define RDA_VOC_SIZE SZ_256K
+
+#define RDA_VOC2_BASE 0x20100000
+#define RDA_VOC2_SIZE SZ_256K
+
+#define RDA_USB_BASE 0x20400000
+#define RDA_USB_SIZE SZ_256K
+
+#define RDA_SPIFLASH_BASE 0x20440000
+#define RDA_SPIFLASH_SIZE SZ_256K
+
+#define RDA_CONNECT_BASE 0x21000000
+#define RDA_CONNECT_SIZE SZ_4K
+
+#define RDA_L2CC_BASE 0x21100000
+#define RDA_L2CC_SIZE SZ_4K
+
+/* APB0 */
+#define RDA_INTC_BASE 0x20800000
+#define RDA_INTC_SIZE SZ_4K
+
+#define RDA_IMEM_BASE 0x20810000
+#define RDA_IMEM_SIZE SZ_4K
+
+#define RDA_DMA_BASE 0x20820000
+#define RDA_DMA_SIZE SZ_4K
+
+#define RDA_VPU_BASE 0x20830000
+#define RDA_VPU_SIZE SZ_64K
+
+#define RDA_GOUDA_BASE 0x20840000
+#define RDA_GOUDA_SIZE SZ_4K
+
+#define RDA_CAMERA_DMA_BASE 0x20850000
+#define RDA_CAMERA_DMA_SIZE SZ_4K
+
+#define RDA_CAMERA2_DMA_BASE 0x20860000
+#define RDA_CAMERA2_DMA_SIZE SZ_64K
+
+#define RDA_GPU_BASE 0x20870000
+#define RDA_GPU_SIZE SZ_64K
+
+#define RDA_AES_BASE 0x20880000
+#define RDA_AES_SIZE SZ_64K
+
+#define RDA_JPEG_BASE 0x20890000
+#define RDA_JPEG_SIZE SZ_64K
+
+/* APB1 */
+#define RDA_SYSCTRL_BASE 0x20900000
+#define RDA_SYSCTRL_SIZE SZ_4K
+
+#define RDA_TIMER_BASE 0x20910000
+#define RDA_TIMER_SIZE SZ_4K
+
+#define RDA_KEYPAD_BASE 0x20920000
+#define RDA_KEYPAD_SIZE SZ_4K
+
+#define RDA_GPIO_A_BASE 0x20930000
+#define RDA_GPIO_A_SIZE SZ_4K
+
+#define RDA_GPIO_B_BASE 0x20931000
+#define RDA_GPIO_B_SIZE SZ_4K
+
+#define RDA_GPIO_D_BASE 0x20932000
+#define RDA_GPIO_D_SIZE SZ_4K
+
+#define RDA_GPIO_E_BASE 0x20933000
+#define RDA_GPIO_E_SIZE SZ_4K
+
+#define RDA_PWM_BASE 0x20940000
+#define RDA_PWM_SIZE SZ_4K
+
+#define RDA_LVDS_BASE 0x20950000
+#define RDA_LVDS_SIZE SZ_4K
+
+#define RDA_TVCLK_BASE 0x20960000
+#define RDA_TVCLK_SIZE SZ_4K
+
+#define RDA_GIC400_BASE 0x20970000
+#define RDA_GIC400_SIZE SZ_4K
+
+#define RDA_COMREGS_BASE 0x20980000
+#define RDA_COMREGS_SIZE SZ_4K
+
+#define RDA_DMC400_BASE 0x20990000
+#define RDA_DMC400_SIZE SZ_4K
+
+#define RDA_DDRPHY_BASE 0x209A0000
+#define RDA_DDRPHY_SIZE SZ_4K
+
+#define RDA_PDCTRL_BASE 0x209B0000
+#define RDA_PDCTRL_SIZE SZ_4K
+
+#define RDA_ISP_BASE 0x209C0000
+#define RDA_ISP_SIZE SZ_4K
+
+#define RDA_AIF2_BASE 0x209D0000
+#define RDA_AIF2_SIZE SZ_4K
+
+#define RDA_AIF_BASE 0x209E0000
+#define RDA_AIF_SIZE SZ_4K
+
+#define RDA_AUIFC_BASE 0x209F0000
+#define RDA_AUIFC_SIZE SZ_4K
+
+/* APB2 */
+#define RDA_UART1_BASE 0x20A00000
+#define RDA_UART1_SIZE SZ_4K
+
+#define RDA_UART2_BASE 0x20A10000
+#define RDA_UART2_SIZE SZ_4K
+
+#define RDA_SPI1_BASE 0x20A20000
+#define RDA_SPI1_SIZE SZ_4K
+
+#define RDA_SPI2_BASE 0x20A30000
+#define RDA_SPI2_SIZE SZ_4K
+
+#define RDA_SPI3_BASE 0x20A40000
+#define RDA_SPI3_SIZE SZ_4K
+
+#define RDA_SDMMC1_BASE 0x20A50000
+#define RDA_SDMMC1_SIZE SZ_4K
+
+#define RDA_SDMMC2_BASE 0x20A60000
+#define RDA_SDMMC2_SIZE SZ_4K
+
+#define RDA_SDMMC3_BASE 0x20A70000
+#define RDA_SDMMC3_SIZE SZ_4K
+
+#define RDA_NAND_BASE 0x20A80000
+#define RDA_NAND_SIZE SZ_16K
+
+#define RDA_UART3_BASE 0x20A90000
+#define RDA_UART3_SIZE SZ_16K
+
+#define RDA_I2C1_BASE 0x20AB0000
+#define RDA_I2C1_SIZE SZ_4K
+
+#define RDA_I2C2_BASE 0x20AC0000
+#define RDA_I2C2_SIZE SZ_4K
+
+#define RDA_I2C3_BASE 0x20AD0000
+#define RDA_I2C3_SIZE SZ_4K
+
+#define RDA_UART4_BASE 0x20AE0000
+#define RDA_UART4_SIZE SZ_16K
+
+#define RDA_IFC_BASE 0x20AF0000
+#define RDA_IFC_SIZE SZ_4K
+
+#endif /* __IOMAP_RDA8820_H */
diff --git a/arch/arm/include/asm/arch-rda/iomap_rda8850.h b/arch/arm/include/asm/arch-rda/iomap_rda8850.h
new file mode 100644
index 0000000000..0cfad5dae8
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/iomap_rda8850.h
@@ -0,0 +1,163 @@
+#ifndef __IOMAP_RDA8850_H
+#define __IOMAP_RDA8850_H
+
+#define RDA_SRAM_BASE 0x00100000
+#define RDA_SRAM_SIZE SZ_64K
+
+#define RDA_MD_MAILBOX_BASE 0x00200000
+#define RDA_MD_MAILBOX_SIZE SZ_8K
+
+#define RDA_MODEM_BASE 0x10000000
+#define RDA_MODEM_SIZE SZ_256M
+
+#define RDA_MD_SYSCTRL_BASE 0x11A00000
+#define RDA_MD_SYSCTRL_SIZE SZ_4K
+
+#define RDA_GPIO_BASE 0x11A08000
+#define RDA_GPIO_SIZE SZ_4K
+
+#define RDA_CFG_REGS_BASE 0x11A09000
+#define RDA_CFG_REGS_SIZE SZ_4K
+
+#define RDA_MODEM_SPI2_BASE 0x11A14000
+#define RDA_MODEM_SPI2_SIZE SZ_4K
+
+#define RDA_MODEM_XCPU_BASE 0x11A16000
+#define RDA_MODEM_XCPU_SIZE SZ_4K
+
+#define RDA_MODEM_BCPU_BASE 0x1190D000
+#define RDA_MODEM_BCPU_SIZE SZ_4K
+
+#define RDA_MD_PSRAM_BASE (RDA_MODEM_BASE + 0x02000000)
+#define RDA_MD_PSRAM_SIZE SZ_16M
+
+#define RDA_CAMERA_BASE 0x20000000
+#define RDA_CAMERA_SIZE SZ_256K
+
+#define RDA_GOUDA_MEM_BASE 0x20040000
+#define RDA_GOUDA_MEM_SIZE SZ_256K
+
+#define RDA_GPU_BASE 0x20080000
+#define RDA_GPU_SIZE SZ_256K
+
+#define RDA_VOC_BASE 0x200C0000
+#define RDA_VOC_SIZE SZ_256K
+
+#define RDA_VOC2_BASE 0x20100000
+#define RDA_VOC2_SIZE SZ_256K
+
+#define RDA_USB_BASE 0x20400000
+#define RDA_USB_SIZE SZ_256K
+
+#define RDA_SPIFLASH_BASE 0x20440000
+#define RDA_SPIFLASH_SIZE SZ_256K
+
+#define RDA_CONNECT_BASE 0x21000000
+#define RDA_CONNECT_SIZE SZ_4K
+
+#define RDA_L2CC_BASE 0x21100000
+#define RDA_L2CC_SIZE SZ_4K
+
+/* APB0 */
+#define RDA_INTC_BASE 0x20800000
+#define RDA_INTC_SIZE SZ_4K
+
+#define RDA_IMEM_BASE 0x20810000
+#define RDA_IMEM_SIZE SZ_4K
+
+#define RDA_DMA_BASE 0x20820000
+#define RDA_DMA_SIZE SZ_4K
+
+#define RDA_VPU_BASE 0x20830000
+#define RDA_VPU_SIZE SZ_64K
+
+#define RDA_GOUDA_BASE 0x20840000
+#define RDA_GOUDA_SIZE SZ_4K
+
+#define RDA_CAMERA_DMA_BASE 0x20850000
+#define RDA_CAMERA_DMA_SIZE SZ_4K
+
+/* APB1 */
+#define RDA_SYSCTRL_BASE 0x20900000
+#define RDA_SYSCTRL_SIZE SZ_4K
+
+#define RDA_TIMER_BASE 0x20910000
+#define RDA_TIMER_SIZE SZ_4K
+
+#define RDA_KEYPAD_BASE 0x20920000
+#define RDA_KEYPAD_SIZE SZ_4K
+
+#define RDA_GPIO_A_BASE 0x20930000
+#define RDA_GPIO_A_SIZE SZ_4K
+
+#define RDA_GPIO_B_BASE 0x20931000
+#define RDA_GPIO_B_SIZE SZ_4K
+
+#define RDA_GPIO_D_BASE 0x20932000
+#define RDA_GPIO_D_SIZE SZ_4K
+
+#define RDA_PWM_BASE 0x20940000
+#define RDA_PWM_SIZE SZ_4K
+
+#define RDA_I2C1_BASE 0x20950000
+#define RDA_I2C1_SIZE SZ_4K
+
+#define RDA_I2C2_BASE 0x20960000
+#define RDA_I2C2_SIZE SZ_4K
+
+#define RDA_I2C3_BASE 0x20970000
+#define RDA_I2C3_SIZE SZ_4K
+
+#define RDA_COMREGS_BASE 0x20980000
+#define RDA_COMREGS_SIZE SZ_4K
+
+#define RDA_DMC400_BASE 0x20990000
+#define RDA_DMC400_SIZE SZ_4K
+
+#define RDA_DDRPHY_BASE 0x209A0000
+#define RDA_DDRPHY_SIZE SZ_4K
+
+#define RDA_APDEBUG_BASE 0x209B0000
+#define RDA_APDEBUG_SIZE SZ_4K
+
+#define RDA_AIF_BASE 0x209E0000
+#define RDA_AIF_SIZE SZ_4K
+
+#define RDA_AUIFC_BASE 0x209F0000
+#define RDA_AUIFC_SIZE SZ_4K
+
+/* APB2 */
+#define RDA_UART1_BASE 0x20A00000
+#define RDA_UART1_SIZE SZ_4K
+
+#define RDA_UART2_BASE 0x20A10000
+#define RDA_UART2_SIZE SZ_4K
+
+#define RDA_SPI1_BASE 0x20A20000
+#define RDA_SPI1_SIZE SZ_4K
+
+#define RDA_SPI2_BASE 0x20A30000
+#define RDA_SPI2_SIZE SZ_4K
+
+#define RDA_SPI3_BASE 0x20A40000
+#define RDA_SPI3_SIZE SZ_4K
+
+#define RDA_SDMMC1_BASE 0x20A50000
+#define RDA_SDMMC1_SIZE SZ_4K
+
+#define RDA_SDMMC2_BASE 0x20A60000
+#define RDA_SDMMC2_SIZE SZ_4K
+
+#define RDA_SDMMC3_BASE 0x20A70000
+#define RDA_SDMMC3_SIZE SZ_4K
+
+#define RDA_NAND_BASE 0x20A80000
+#define RDA_NAND_SIZE SZ_16K
+
+#define RDA_UART3_BASE 0x20A90000
+#define RDA_UART3_SIZE SZ_16K
+
+#define RDA_IFC_BASE 0x20AF0000
+#define RDA_IFC_SIZE SZ_4K
+
+#endif /* __IOMAP_RDA8850_H */
diff --git a/arch/arm/include/asm/arch-rda/iomap_rda8850e.h b/arch/arm/include/asm/arch-rda/iomap_rda8850e.h
new file mode 100644
index 0000000000..dfa6a7e781
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/iomap_rda8850e.h
@@ -0,0 +1,184 @@
+#ifndef __IOMAP_RDA8850_H
+#define __IOMAP_RDA8850_H
+
+#define RDA_SRAM_BASE 0x00100000
+#define RDA_SRAM_SIZE SZ_64K
+
+#define RDA_MD_MAILBOX_BASE 0x00200000
+#define RDA_MD_MAILBOX_SIZE SZ_8K
+
+#define RDA_MODEM_BASE 0x10000000
+#define RDA_MODEM_SIZE SZ_256M
+
+#define RDA_MD_SYSCTRL_BASE 0x11A00000
+#define RDA_MD_SYSCTRL_SIZE SZ_4K
+
+#define RDA_GPIO_BASE 0x11A08000
+#define RDA_GPIO_SIZE SZ_4K
+
+#define RDA_CFG_REGS_BASE 0x11A09000
+#define RDA_CFG_REGS_SIZE SZ_4K
+
+#define RDA_CFG_RF_SPI_BASE 0x11A0E000
+#define RDA_CFG_SIZE SZ_4K
+
+#define RDA_MODEM_SPI2_BASE 0x11A14000
+#define RDA_MODEM_SPI2_SIZE SZ_4K
+
+#define RDA_MODEM_XCPU_BASE 0x11A16000
+#define RDA_MODEM_XCPU_SIZE SZ_4K
+
+#define RDA_MODEM_BCPU_BASE 0x11909000
+#define RDA_MODEM_BCPU_SIZE SZ_4K
+
+#define RDA_MD_PSRAM_BASE (RDA_MODEM_BASE + 0x02000000)
+#define RDA_MD_PSRAM_SIZE SZ_4M
+
+#define RDA_CAMERA_BASE 0x20000000
+#define RDA_CAMERA_SIZE SZ_256K
+
+#define RDA_GOUDA_MEM_BASE 0x20040000
+#define RDA_GOUDA_MEM_SIZE SZ_256K
+
+#define RDA_VOC_BASE 0x200C0000
+#define RDA_VOC_SIZE SZ_256K
+
+#define RDA_USB_BASE 0x20400000
+#define RDA_USB_SIZE SZ_256K
+
+#define RDA_SPIFLASH_BASE 0x20440000
+#define RDA_SPIFLASH_SIZE SZ_256K
+
+#define RDA_CONNECT_BASE 0x21000000
+#define RDA_CONNECT_SIZE SZ_4K
+
+#define RDA_L2CC_BASE 0x21100000
+#define RDA_L2CC_SIZE SZ_4K
+
+/* APB0 */
+#define RDA_INTC_BASE 0x20800000
+#define RDA_INTC_SIZE SZ_64K
+
+#define RDA_IMEM_BASE 0x20810000
+#define RDA_IMEM_SIZE SZ_64K
+
+#define RDA_DMA_BASE 0x20820000
+#define RDA_DMA_SIZE SZ_64K
+
+#define RDA_VPU_BASE 0x20830000
+#define RDA_VPU_SIZE SZ_64K
+
+#define RDA_GOUDA_BASE 0x20840000
+#define RDA_GOUDA_SIZE SZ_64K
+
+#define RDA_CAMERA_DMA_BASE 0x20850000
+#define RDA_CAMERA_DMA_SIZE SZ_64K
+
+#define RDA_LCDC_BASE 0x20860000
+#define RDA_LCDC_SIZE SZ_664K
+
+#define RDA_GPU_BASE 0x20870000
+#define RDA_GPU_SIZE SZ_64K
+
+#define RDA_JPEG_BASE 0x20890000
+#define RDA_JPEG_SIZE SZ_64K
+
+#define RDA_CPU_DEBUG_BASE 0x208C0000
+#define RDA_CPU_DEBUG_SIZE SZ_256K
+
+/* APB1 */
+#define RDA_SYSCTRL_BASE 0x20900000
+#define RDA_SYSCTRL_SIZE SZ_64K
+
+#define RDA_TIMER_BASE 0x20910000
+#define RDA_TIMER_SIZE SZ_64K
+
+#define RDA_KEYPAD_BASE 0x20920000
+#define RDA_KEYPAD_SIZE SZ_64K
+
+#define RDA_GPIO_A_BASE 0x20930000
+#define RDA_GPIO_A_SIZE SZ_4K
+
+#define RDA_GPIO_B_BASE 0x20931000
+#define RDA_GPIO_B_SIZE SZ_4K
+
+#define RDA_GPIO_D_BASE 0x20932000
+#define RDA_GPIO_D_SIZE SZ_4K
+
+#define RDA_PWM_BASE 0x20940000
+#define RDA_PWM_SIZE SZ_4K
+
+#define RDA_TV_CLK_CTRL_BASE 0x20960000
+#define RDA_TV_CLK_CTRL_SIZE SZ_64K
+
+#define RDA_COMREGS_BASE 0x20980000
+#define RDA_COMREGS_SIZE SZ_4K
+
+#define RDA_DMC400_BASE 0x20990000
+#define RDA_DMC400_SIZE SZ_4K
+
+#define RDA_DDRPHY_BASE 0x209A0000
+#define RDA_DDRPHY_SIZE SZ_4K
+
+#define RDA_APDEBUG_BASE 0x209B0000
+#define RDA_APDEBUG_SIZE SZ_4K
+
+#define RDA_AIF2_BASE 0x209D0000
+#define RDA_AIF2_SIZE SZ_64K
+
+#define RDA_AIF_BASE 0x209E0000
+#define RDA_AIF_SIZE SZ_4K
+
+#define RDA_AUIFC_BASE 0x209F0000
+#define RDA_AUIFC_SIZE SZ_4K
+
+/* APB2 */
+#define RDA_UART1_BASE 0x20A00000
+#define RDA_UART1_SIZE SZ_4K
+
+#define RDA_UART2_BASE 0x20A10000
+#define RDA_UART2_SIZE SZ_4K
+
+#define RDA_SPI1_BASE 0x20A20000
+#define RDA_SPI1_SIZE SZ_4K
+
+#define RDA_SPI2_BASE 0x20A30000
+#define RDA_SPI2_SIZE SZ_4K
+
+#define RDA_SPI3_BASE 0x20A40000
+#define RDA_SPI3_SIZE SZ_4K
+
+#define RDA_SDMMC1_BASE 0x20A50000
+#define RDA_SDMMC1_SIZE SZ_4K
+
+#define RDA_SDMMC2_BASE 0x20A60000
+#define RDA_SDMMC2_SIZE SZ_4K
+
+#define RDA_SDMMC3_BASE 0x20A70000
+#define RDA_SDMMC3_SIZE SZ_4K
+
+#define RDA_NAND_BASE 0x20A80000
+#define RDA_NAND_SIZE SZ_64K
+
+#define RDA_UART3_BASE 0x20A90000
+#define RDA_UART3_SIZE SZ_16K
+
+#define RDA_GIC_BASE 0x20AA0000
+#define RDA_GIC_SIZE SZ_64K
+
+#define RDA_I2C1_BASE 0x20AB0000
+#define RDA_I2C1_SIZE SZ_64K
+
+#define RDA_I2C2_BASE 0x20AC0000
+#define RDA_I2C2_SIZE SZ_64K
+
+#define RDA_I2C3_BASE 0x20AD0000
+#define RDA_I2C3_SIZE SZ_64K
+
+#define RDA_UART4_BASE 0x20AE0000
+#define RDA_UART4_SIZE SZ_64K
+
+#define RDA_IFC_BASE 0x20AF0000
+#define RDA_IFC_SIZE SZ_4K
+
+#endif /* __IOMAP_RDA8850_H */
diff --git a/arch/arm/include/asm/arch-rda/iomap_rdaarm926ejs.h b/arch/arm/include/asm/arch-rda/iomap_rdaarm926ejs.h
new file mode 100644
index 0000000000..8bc634f72f
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/iomap_rdaarm926ejs.h
@@ -0,0 +1,48 @@
+#ifndef __IOMAP_RDAARM926EJS_H
+#define __IOMAP_RDAARM926EJS_H
+
+#include <asm/sizes.h>
+
+#define RDA_INTC_BASE 0x01AF0000
+#define RDA_INTC_SIZE SZ_4K
+
+#define RDA_TIMER_BASE 0x01A02000
+#define RDA_TIMER_SIZE SZ_4K
+
+#define RDA_GPIO_BASE 0x01A03000
+#define RDA_GPIO_SIZE SZ_4K
+
+#define RDA_KEYPAD_BASE 0x01A05000
+#define RDA_KEYPAD_SIZE SZ_4K
+
+#define RDA_I2C1_BASE 0x01A07000
+#define RDA_I2C1_SIZE SZ_4K
+
+#define RDA_I2C2_BASE 0x01A22000
+#define RDA_I2C2_SIZE SZ_4K
+
+#define RDA_I2C3_BASE 0x01A23000
+#define RDA_I2C3_SIZE SZ_4K
+
+#define RDA_IFC_BASE 0x01A09000
+#define RDA_IFC_SIZE SZ_4K
+
+#define RDA_UART1_BASE 0x01A15000
+#define RDA_UART1_SIZE SZ_4K
+
+#define RDA_UART2_BASE 0x01A16000
+#define RDA_UART2_SIZE SZ_4K
+
+#define RDA_SDMMC1_BASE 0x01A17000
+#define RDA_SDMMC1_SIZE SZ_4K
+
+#define RDA_GOUDA_BASE 0x01A21000
+#define RDA_GOUDA_SIZE SZ_4K
+
+#define RDA_NAND_BASE 0x01A26000
+#define RDA_NAND_SIZE SZ_16K
+
+#define RDA_USB_BASE 0x01A80000
+#define RDA_USB_SIZE SZ_64K
+
+#endif /* __IOMAP_RDAARM926EJS_H */
diff --git a/arch/arm/include/asm/arch-rda/irqs.h b/arch/arm/include/asm/arch-rda/irqs.h
new file mode 100644
index 0000000000..9812d0014d
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/irqs.h
@@ -0,0 +1,58 @@
+/* include/asm-arm/arch-goldfish/irqs.h
+**
+** Copyright (C) 2007 Google, Inc.
+**
+** This software is licensed under the terms of the GNU General Public
+** License version 2, as published by the Free Software Foundation, and
+** may be copied, distributed, and modified under those terms.
+**
+** This program is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+*/
+
+#ifndef __ASM_ARCH_IRQS_H
+#define __ASM_ARCH_IRQS_H
+
+#define RDA_IRQ_PULSE_DUMMY 0
+#define RDA_IRQ_I2C 1
+#define RDA_IRQ_NAND_NFSC 2
+#define RDA_IRQ_SDMMC1 3
+#define RDA_IRQ_SDMMC2 4
+#define RDA_IRQ_SDMMC3 5
+#define RDA_IRQ_SPI1 6
+#define RDA_IRQ_SPI2 7
+#define RDA_IRQ_SPI3 8
+#define RDA_IRQ_UART1 9
+#define RDA_IRQ_UART2 10
+#define RDA_IRQ_UART3 11
+#define RDA_IRQ_GPIO1 12
+#define RDA_IRQ_GPIO2 13
+#define RDA_IRQ_GPIO3 14
+#define RDA_IRQ_KEYPAD 15
+#define RDA_IRQ_TIMER 16
+#define RDA_IRQ_TIMEROS 17
+#define RDA_IRQ_COMREG0 18
+#define RDA_IRQ_COMREG1 19
+#define RDA_IRQ_USB 20
+#define RDA_IRQ_DMC 21
+#define RDA_IRQ_DMA 22
+#define RDA_IRQ_CAMERA 23
+#define RDA_IRQ_GOUDA 24
+#define RDA_IRQ_GPU 25
+#define RDA_IRQ_VPU_JPG 26
+#define RDA_IRQ_VPU_HOST 27
+#define RDA_IRQ_VOC 28
+#define RDA_IRQ_AUIFC0 29
+#define RDA_IRQ_AUIFC1 30
+#define RDA_IRQ_L2CC 31
+
+#define RDA_IRQ_NUM 32
+
+#define RDA_IRQ_MASK_ALL 0xFFFFFFFF
+
+#define NR_IRQS RDA_IRQ_NUM
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/ispi.h b/arch/arm/include/asm/arch-rda/ispi.h
new file mode 100644
index 0000000000..eabec39107
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/ispi.h
@@ -0,0 +1,12 @@
+#ifndef __ISPI_H__
+#define __ISPI_H_
+
+#define pmu_reg_write ispi_reg_write
+#define pmu_reg_read ispi_reg_read
+
+void ispi_open(int modemSpi);
+void ispi_reg_write(u32 regIdx, u32 value);
+u32 ispi_reg_read(u32 regIdx);
+u16 rda_read_efuse(int page_index);
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/mdcom.h b/arch/arm/include/asm/arch-rda/mdcom.h
new file mode 100644
index 0000000000..ffb520c5c9
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/mdcom.h
@@ -0,0 +1,166 @@
+#ifndef _MDCOM_H_
+#define _MDCOM_H_
+
+#ifdef RDA_MDCOM_DEBUG
+#define rdamddbg(fmt,args...) printf (fmt ,##args)
+#else
+#define rdamddbg(fmt,args...)
+#endif /* RDA_MDCOM_DEBUG */
+
+/*
+ * Note :
+ * The number of version will be updated according to version of BP.
+ */
+#define RDA_BP_VER 0x00010001
+
+
+typedef enum
+{
+ /* Normal cause, ie power up */
+ RDA_RESET_CAUSE_NORMAL = 0x0,
+ /* The reset was caused by a watchdog */
+ RDA_RESET_CAUSE_WATCHDOG = 0x1,
+ /* The reset was caused by a soft restart, triggered by the function */
+ RDA_RESET_CAUSE_RESTART = 0x2,
+ /* The reset was initiated from the Host Interface. */
+ RDA_RESET_CAUSE_HOST_DEBUG = 0x3,
+ /* The reset was caused by alarm, from the calendar. */
+ RDA_RESET_CAUSE_ALARM = 0x4,
+
+ RDA_RESET_CAUSE_CHARGER = 0x80,
+
+ RDA_RESET_CAUSE_QTY
+
+} RDA_RESET_CAUSE_T;
+
+/*
+ * PORT, LINE
+ */
+typedef enum {
+ RDA_MDCOM_PORT0,
+ RDA_MDCOM_PORT1,
+} rda_mdcom_port_id_t;
+
+typedef enum {
+ RDA_MDCOM_LINE_MODEM_RESET, // inform AP Modem reset done
+ RDA_MDCOM_LINE_DL_HANDSHAKE, // for AP download BB code
+ RDA_MDCOM_LINE_CMD_START, // for port1 command start
+ RDA_MDCOM_LINE_SLEEP_WAKEUP, // for sleep/wakeup status
+ RDA_MDCOM_LINE_EXCEPTION, // for exception
+} rda_mdcom_port0_line_id_t;
+
+typedef enum {
+ RDA_MDCOM_LINE_AT_CMD, // for AT command
+ RDA_MDCOM_LINE_AT_CMD_FC, // for AT command Flow control
+ RDA_MDCOM_LINE_SYSTEM, // for SYSTEM command
+ RDA_MDCOM_LINE_SYSTEM_FC, // for AT command Flow control
+ RDA_MDCOM_LINE_TRACE, // for Trace communciation
+ RDA_MDCOM_LINE_TRACE_FC, // for Trace communciation Flow control
+} rda_mdcom_port1_line_id_t;
+
+void rda_mdcom_set_logic_base_addr(u32 base);
+
+u32 rda_mdcom_address_modem2ap(u32 addr);
+
+int rda_mdcom_setup_run_env(u32 pc, u32 param);
+
+void rda_mdcom_get_calib_section(u32 *addr, u32 *len);
+void rda_mdcom_get_ext_calib_section(u32 *addr, u32 *len);
+void rda_mdcom_get_factory_section(u32 *addr, u32 *len);
+void rda_mdcom_get_ap_factory_section(u32 *addr, u32 *len);
+
+u32 rda_mdcom_get_reset_cause(void);
+u32 rda_mdcom_get_interface_version(void);
+
+int rda_mdcom_system_started_before(void);
+void rda_mdcom_set_system_started_flag(void);
+int rda_mdcom_modem_crashed_before(void);
+int rda_mdcom_calib_update_cmd_valid(void);
+int rda_mdcom_factory_update_cmd_valid(void);
+int rda_mdcom_ap_factory_update_cmd_valid(void);
+
+void rda_mdcom_init_all_log_info(void);
+void rda_mdcom_get_modem_log_info(u32 *addr, u32 *len);
+void rda_mdcom_get_modem_exception_info(u32 *addr, u32 *len);
+
+void rda_mdcom_show_xcpu_info(void);
+void rda_mdcom_show_software_version(void);
+
+int rda_mdcom_init_port(int port_id);
+
+int rda_mdcom_line_set(int port_id, int line_id);
+int rda_mdcom_line_set_check(int port_id, int line_id);
+int rda_mdcom_line_set_wait(int port_id, int line_id, int waittime);
+
+int rda_mdcom_line_clear(int port_id, int line_id);
+int rda_mdcom_line_clear_check(int port_id, int line_id);
+int rda_mdcom_line_clear_wait(int port_id, int line_id, int waittime);
+
+void rda_mdcom_port_show(void);
+
+typedef enum {
+ RDA_MDCOM_CHANNEL_AT, // for AT command
+ RDA_MDCOM_CHANNEL_SYSTEM, // for SYSTEM command
+ RDA_MDCOM_CHANNEL_TRACE, // for Trace communication
+} rda_mdcom_channel_id_t;
+
+struct rda_mdcom_channel_head {
+ volatile int read_offset; // offset of the read pointer
+ volatile int write_offset; // offset of the write pointer
+ volatile int reserved0; // reserved
+ volatile int reserved1; // reserved
+};
+
+struct rda_mdcom_channel {
+ int data_line_id;
+ int fc_line_id;
+
+ // the address of 16-byte buffer head
+ struct rda_mdcom_channel_head* read_buf_head;
+ void* read_buf; // the start address of modem to AP buffer
+ int read_buf_size_mask; // the mask of modem to AP buffer size
+
+ // the address of 16-byte buffer head
+ struct rda_mdcom_channel_head* write_buf_head;
+ void* write_buf; // the start address of AP to modem buffer
+ int write_buf_size_mask; // the mask of AP to modem buffer size
+};
+
+int rda_mdcom_channel_init(const unsigned int channel);
+int rda_mdcom_channel_all_init(void);
+int rda_mdcom_channel_buf_send_stream(const unsigned int channel, void *buf, int size, int waittime);
+int rda_mdcom_channel_buf_send_dgram(const unsigned int channel, void *buf, int size, int waittime);
+int rda_mdcom_channel_buf_recv_stream(const unsigned int channel, void *buf, int size, int waittime);
+int rda_mdcom_channel_buf_recv_dgram(const unsigned int channel, void *buf, int size, int waittime);
+int rda_mdcom_channel_buf_send_available(const unsigned int channel);
+int rda_mdcom_channel_buf_recv_available(const unsigned int channel);
+void rda_mdcom_channel_show(const unsigned int channel);
+
+/*
+ * AT COMMAND Channel
+ */
+/* emulate a tty device */
+int rda_mdcom_tstc(const unsigned int channel);
+int rda_mdcom_getc(const unsigned int channel);
+void rda_mdcom_putc(const char c, const unsigned int channel);
+void rda_mdcom_puts(const char *s, const unsigned int channel);
+
+/*
+ * SYSTEM MESSAGE Channel
+ */
+int rda_mdcom_send_sys_msg(
+ struct rda_mdcom_channel *channel,
+ int msg_id,
+ void *send_msg, int send_size,
+ void *response, int resp_buf_size,
+ int *resp_size
+);
+
+int rda_mdcom_parse_sys_msg(
+ struct rda_mdcom_channel *channel,
+ int msg_id,
+ void *send_msg, int send_size,
+ void *response, int *resp_size
+);
+
+#endif // _MDCOM_H_
diff --git a/arch/arm/include/asm/arch-rda/mtdparts_def.h b/arch/arm/include/asm/arch-rda/mtdparts_def.h
new file mode 100644
index 0000000000..57652abdb6
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/mtdparts_def.h
@@ -0,0 +1,58 @@
+#ifndef __ASM_ARCH_MTDPARTS_DEF_H
+#define __ASM_ARCH_MTDPARTS_DEF_H
+
+#include <rda/tgt_ap_flash_parts.h>
+
+
+#define SEPARATOR "#"
+
+#define SYSTEM_PKT_LEN "4096"
+
+#define DEFAULT_FSIMG_PKT_LEN "4096"
+
+#define USERDATA_IMAGE_ATTR \
+ "userdata(" \
+ DEFAULT_FSIMG_PKT_LEN \
+ ")"
+
+#define CUSTOMER_IMAGE_ATTR \
+ "customer(" \
+ DEFAULT_FSIMG_PKT_LEN \
+ ")"
+
+#define VENDOR_IMAGE_ATTR \
+ "vendor(" \
+ DEFAULT_FSIMG_PKT_LEN \
+ ")"
+
+#define SYSTEM_IMAGE_ATTR \
+ "system(" \
+ SYSTEM_PKT_LEN \
+ ")"
+
+#define CACHE_IMAGE_ATTR \
+ "cache(" \
+ DEFAULT_FSIMG_PKT_LEN \
+ ")"
+
+#define IMAGE_ATTR \
+ "pdl(8)" \
+ SEPARATOR \
+ "bootloader(4096)" \
+ SEPARATOR \
+ "modem(4096)" \
+ SEPARATOR \
+ "boot(4096)" \
+ SEPARATOR \
+ SYSTEM_IMAGE_ATTR \
+ SEPARATOR \
+ CUSTOMER_IMAGE_ATTR \
+ SEPARATOR \
+ VENDOR_IMAGE_ATTR \
+ SEPARATOR \
+ USERDATA_IMAGE_ATTR \
+ SEPARATOR \
+ CACHE_IMAGE_ATTR \
+ SEPARATOR \
+ "recovery(4096)"
+#endif /* __ASM_ARCH_MTDPARTS_DEF_H */
diff --git a/arch/arm/include/asm/arch-rda/prdinfo.h b/arch/arm/include/asm/arch-rda/prdinfo.h
new file mode 100644
index 0000000000..13ee77a5c6
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/prdinfo.h
@@ -0,0 +1,62 @@
+#ifndef __PRDINFO_H__
+#define __PRDINFO_H__
+
+#define PRDINFO_PART_NAME "misc"
+#define PRDINFO_TOTAL_SIZE (16*1024)
+
+/* 0 ~ 1024, produce infomation,
+ includes pdl/calibration/test results */
+#define PRDINFO_DATA_OFFSET 0
+#define PRDINFO_DATA_MAX_SIZE 1024
+#define PDL_IMAGE_MAX_NUM 16
+#define PDL_IMAGE_NAME_LEN 31
+#define FACTORY_TAG_NUM 0xFAC12345
+struct prdinfo
+{
+ uint8_t pdl_result;
+ uint8_t cali_result;
+ uint8_t autocall_result;
+ uint8_t factorytest_result;
+
+ uint32_t pdl_image_count;
+ struct {
+ char name[PDL_IMAGE_NAME_LEN];
+ uint8_t result;
+ } pdl_images[PDL_IMAGE_MAX_NUM];
+
+ uint32_t factory_tag; /* force to factory mode */
+
+ uint8_t imei_result;
+ uint8_t psn_result;
+ uint8_t mbsn_result;
+ uint8_t macaddr_result;
+ uint8_t btaddr_result;
+
+ uint8_t reserve[27];
+};
+
+/* 1024 ~ (PRDINFO_TOTAL_SIZE - 4), reserved */
+
+/* (PRDINFO_TOTAL_SIZE - 4) ~ PRDINFO_TOTAL_SIZE,
+ crc for all (PRDINFO_TOTAL_SIZE-4) data */
+#define PRDINFO_CRC_OFFSET (PRDINFO_TOTAL_SIZE-4)
+#define PRDINFO_CRC_SIZE 4
+
+
+/* related functions int u-boot */
+int prdinfo_init(char *image_list);
+int prdinfo_load(void);
+int prdinfo_save(void);
+int prdinfo_update_all(char *buf, unsigned long sz);
+void prdinfo_dump(void);
+int prdinfo_set_data(struct prdinfo *info);
+int prdinfo_get_data(struct prdinfo *info);
+int prdinfo_set_pdl_result(uint8_t rt, uint32_t ftm_tag);
+int prdinfo_set_cali_result(uint8_t rt);
+int prdinfo_set_autocall_result(uint8_t rt);
+int prdinfo_set_coupling_result(uint8_t rt);
+int prdinfo_set_factorytest_result(uint8_t rt);
+int prdinfo_set_pdl_image_download_result(char *image_name, uint8_t dl_rt);
+uint32_t prdinfo_get_factory_tag(void);
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/rda_crypto.h b/arch/arm/include/asm/arch-rda/rda_crypto.h
new file mode 100644
index 0000000000..db957d2fdd
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/rda_crypto.h
@@ -0,0 +1,11 @@
+#ifndef __RDA_CRYPTO_H__
+
+#include <image.h>
+#include <asm/arch/spl_board_info.h>
+
+int set_security_context(struct spl_security_info *info, const void *image);
+
+int image_sign_verify_uimage(image_header_t *hdr);
+int image_sign_verify(const uint8_t *buffer, uint32_t len);
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/rda_iomap.h b/arch/arm/include/asm/arch-rda/rda_iomap.h
new file mode 100644
index 0000000000..0b71f96d50
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/rda_iomap.h
@@ -0,0 +1,25 @@
+#ifndef __IOMAP_H
+#define __IOMAP_H
+
+#include <common.h>
+
+#ifdef CONFIG_MACH_RDAARM926EJS
+#include "iomap_rdaarm926ejs.h"
+#elif defined(CONFIG_MACH_RDA8810)
+#include "iomap_rda8810.h"
+#elif defined(CONFIG_MACH_RDA8810E)
+#include "iomap_rda8810e.h"
+#elif defined(CONFIG_MACH_RDA8820)
+#include "iomap_rda8820.h"
+#elif defined(CONFIG_MACH_RDA8850)
+#include "iomap_rda8850.h"
+#elif defined(CONFIG_MACH_RDA8850E)
+#include "iomap_rda8850e.h"
+#elif defined(CONFIG_MACH_RDA8810H)
+#include "iomap_rda8810h.h"
+#else
+#error "No MACH defined"
+#endif
+
+#endif // __IOMAP_H
+
diff --git a/arch/arm/include/asm/arch-rda/rda_sys.h b/arch/arm/include/asm/arch-rda/rda_sys.h
new file mode 100644
index 0000000000..8c81a0e473
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/rda_sys.h
@@ -0,0 +1,67 @@
+#ifndef __RDA_SYS_H__
+#define __RDA_SYS_H__
+
+/*RDA_BOOTMODE_TYPE*/
+#define RDA_MODE_EMMC 0
+#define RDA_MODE_SPINAND 1
+#define RDA_MODE_SPINOR 2
+#define RDA_MODE_TCARD_RUN 3
+#define RDA_MODE_TCARD_UPDATE 4
+#define RDA_MODE_NAND_8BIT 5
+#define RDA_MODE_NAND_16BIT 6
+#define RDA_MODE_RESERVED 7
+
+#define RDA_HW_CFG_GET_BM_IDX(r) (((r)>>0)&0x7)
+
+enum media_type {
+ MEDIA_NAND = 0x10,
+ MEDIA_MMC = 0x11,
+ MEDIA_SPINAND = 0x12,
+ MEDIA_UNKNOWN = 0xff,
+};
+enum media_type rda_media_get(void);
+u16 rda_metal_id_get(void);
+void shutdown_system(void);
+
+int rda_bm_is_calib(void);
+int rda_bm_is_autocall(void);
+int rda_bm_is_download(void);
+int rda_bm_download_key_pressed(void);
+
+enum reboot_type {
+ REBOOT_TO_NORMAL_MODE,
+ REBOOT_TO_DOWNLOAD_MODE,
+ REBOOT_TO_FASTBOOT_MODE,
+ REBOOT_TO_RECOVERY_MODE,
+ REBOOT_TO_CALIB_MODE,
+ REBOOT_TO_PDL2_MODE,
+};
+void rda_reboot(enum reboot_type type);
+
+void enable_vibrator(int enable);
+void enable_charger(int enable);
+
+void rda_dump_buf(char *data, size_t len);
+void print_cur_time(void);
+
+#ifdef CONFIG_CMD_MISC
+int usb_cable_connected(void);
+int system_rebooted(void);
+void save_current_boot_key_state(void);
+int get_saved_boot_key_state(void);
+enum rda_bm_type
+{
+ RDA_BM_NORMAL = 0,
+ RDA_BM_CALIB = 1,
+ RDA_BM_FACTORY = 2,
+ RDA_BM_FASTBOOT = 3,
+ RDA_BM_RECOVERY = 4,
+ RDA_BM_AUTOCALL = 5,
+ RDA_BM_FORCEDOWNLOAD = 6,
+};
+void rda_bm_init(void);
+enum rda_bm_type rda_bm_get(void);
+void rda_bm_set(enum rda_bm_type bm);
+#endif
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_camera.h b/arch/arm/include/asm/arch-rda/reg_camera.h
new file mode 100644
index 0000000000..5b76edbacd
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_camera.h
@@ -0,0 +1,4 @@
+#ifdef CONFIG_MACH_RDA8850E
+#include "reg_camera_rda8850e.h"
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_camera_rda8850e.h b/arch/arm/include/asm/arch-rda/reg_camera_rda8850e.h
new file mode 100644
index 0000000000..610428b058
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_camera_rda8850e.h
@@ -0,0 +1,397 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2021,RDA, Inc.
+// All Rights Reserved
+//
+// This source code is the property of Coolsand Technologies and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA.
+//
+//==============================================================================
+
+
+#ifndef _CAMERA_H_
+#define _CAMERA_H_
+
+#include "cs_types.h"
+
+#include "iomap_rda8850e.h"
+// =============================================================================
+// MACROS
+// =============================================================================
+#define FIFORAM_SIZE (128)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// CAMERA_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+#define REG_CAMERA_BASE RDA_CAMERA_BASE
+
+typedef volatile struct
+{
+ REG32 CTRL; //0x00000000
+ REG32 STATUS; //0x00000004
+ REG32 DATA; //0x00000008
+ REG32 IRQ_MASK; //0x0000000C
+ REG32 IRQ_CLEAR; //0x00000010
+ REG32 IRQ_CAUSE; //0x00000014
+ REG32 CMD_SET; //0x00000018
+ REG32 CMD_CLR; //0x0000001C
+ REG32 DSTWINCOL; //0x00000020
+ REG32 DSTWINROW; //0x00000024
+ REG32 CLK_OUT; //0x00000028
+ REG32 SCALE_CFG; //0x0000002c
+ REG32 CAM_SPI_REG_0; //0x00000030
+ REG32 CAM_SPI_REG_1; //0x00000034
+ REG32 CAM_SPI_REG_2; //0x00000038
+ REG32 CAM_SPI_REG_3; //0x0000003c
+ REG32 CAM_SPI_REG_4; //0x00000040
+ REG32 CAM_SPI_REG_5; //0x00000044
+ REG32 CAM_SPI_REG_6; //0x00000048
+ REG32 CAM_SPI_OBSERVE_REG_0; //0x0000004c, read only
+ REG32 CAM_SPI_OBSERVE_REG_1; //0x00000050, read only
+ REG32 CSI_CONFIG_REG0; //0x00000054
+ REG32 CSI_CONFIG_REG1; //0x00000058
+ REG32 CSI_CONFIG_REG2; //0x0000005C
+ REG32 CSI_CONFIG_REG3; //0x00000060
+ REG32 CSI_CONFIG_REG4; //0x00000064
+ REG32 CSI_CONFIG_REG5; //0x00000068
+ REG32 CSI_CONFIG_REG6; //0x0000006C
+ REG32 CSI_CONFIG_REG7; //0x00000070
+ REG32 CSI_OBSERVE_REG4; //0x00000074
+ REG32 CSI_OBSERVE_REG5; //0x00000078
+ REG32 CSI_OBSERVE_REG6; //0x0000007C read only
+ REG32 CSI_OBSERVE_REG7; //0x00000080 read only
+ REG32 CSI_ENABLE_PHY; //0x00000084
+ REG32 DCT_SHIFTR_Y_REG0; //0x00000088
+ REG32 DCT_SHIFTR_Y_REG1; //0x0000008C
+ REG32 CAM_AXI_CONFIG; //0x00000090
+ REG32 CAM_FRAME_START_ADDR; //0x00000094
+ REG32 CAM_FRAME_SIZE; //0x00000098
+ REG32 CAM_TC_COUNT; //0x0000009C
+ REG32 CAM_FRAME_START_U_ADDR; //0x000000A0
+ REG32 CAM_FRAME_START_V_ADDR; //0x000000A4
+ REG32 CAM_FRAME2_START_ADDR; //0x000000A8
+ REG32 CAM_FRAME2_START_U_ADDR; //0x000000AC
+ REG32 CAM_FRAME2_START_V_ADDR; //0x000000B0
+ REG32 CFG_CAM_C2CSE; //0x000000B4
+} HWP_CAMERA_T;
+
+#define hwp_camera ((HWP_CAMERA_T*) (REG_CAMERA_BASE))
+
+
+//CTRL
+#define CAMERA_ENABLE (1<<0)
+#define CAMERA_ENABLE_ENABLE (1<<0)
+#define CAMERA_ENABLE_DISABLE (0<<0)
+#define CAMERA_DCT_ENABLE (1<<1)
+#define CAMERA_DCT_DISABLE (0<<1)
+#define CAMERA_1_BUFENABLE (1<<2)
+#define CAMERA_1_BUFENABLE_ENABLE (1<<2)
+#define CAMERA_1_BUFENABLE_DISABLE (0<<2)
+#define CAMERA_OUT_CLK_GATE_EN (1 << 3)
+#define CAMERA_DATAFORMAT(n) (((n)&3)<<4)
+#define CAMERA_DATAFORMAT_RGB565 (0<<4)
+#define CAMERA_DATAFORMAT_YUV422 (1<<4)
+#define CAMERA_DATAFORMAT_JPEG (2<<4)
+#define CAMERA_DATAFORMAT_RESERVE (3<<4)
+#define CAMERA_ISP_ENABLE (1 << 6)
+#define CAMERA_RGB_RFIST (1 << 7)
+#define CAMERA_RESET_POL (1<<8)
+#define CAMERA_RESET_POL_INVERT (1<<8)
+#define CAMERA_RESET_POL_NORMAL (0<<8)
+#define CAMERA_PWDN_POL (1<<9)
+#define CAMERA_PWDN_POL_INVERT (1<<9)
+#define CAMERA_PWDN_POL_NORMAL (0<<9)
+#define CAMERA_VSYNC_POL (1<<10)
+#define CAMERA_VSYNC_POL_INVERT (1<<10)
+#define CAMERA_VSYNC_POL_NORMAL (0<<10)
+#define CAMERA_HREF_POL (1<<11)
+#define CAMERA_HREF_POL_INVERT (1<<11)
+#define CAMERA_HREF_POL_NORMAL (0<<11)
+#define CAMERA_LINEBUF_ISP_ENABLE (1 << 12)
+#define CAMERA_LINEBUF_IF (1 << 13)
+#define CAMERA_VSYNC_DROP (1<<14)
+#define CAMERA_VSYNC_DROP_DROP (1<<14)
+#define CAMERA_VSYNC_DROP_NORMAL (0<<14)
+#define CAMERA_DECIMFRM(n) (((n)&3)<<16)
+#define CAMERA_DECIMFRM_ORIGINAL (0<<16)
+#define CAMERA_DECIMFRM_DIV_2 (1<<16)
+#define CAMERA_DECIMFRM_DIV_3 (2<<16)
+#define CAMERA_DECIMFRM_DIV_4 (3<<16)
+#define CAMERA_DECIMCOL(n) (((n)&3)<<18)
+#define CAMERA_DECIMCOL_ORIGINAL (0<<18)
+#define CAMERA_DECIMCOL_DIV_2 (1<<18)
+#define CAMERA_DECIMCOL_DIV_3 (2<<18)
+#define CAMERA_DECIMCOL_DIV_4 (3<<18)
+#define CAMERA_DECIMROW(n) (((n)&3)<<20)
+#define CAMERA_DECIMROW_ORIGINAL (0<<20)
+#define CAMERA_DECIMROW_DIV_2 (1<<20)
+#define CAMERA_DECIMROW_DIV_3 (2<<20)
+#define CAMERA_DECIMROW_DIV_4 (3<<20)
+#define CAMERA_REORDER(n) (((n)&7)<<24)
+#define CAMERA_CROPEN (1<<28)
+#define CAMERA_CROPEN_ENABLE (1<<28)
+#define CAMERA_CROPEN_DISABLE (0<<28)
+#define CAMERA_BIST_MODE (1<<30)
+#define CAMERA_BIST_MODE_BIST (1<<30)
+#define CAMERA_BIST_MODE_NORMAL (0<<30)
+#define CAMERA_TEST (1<<31)
+#define CAMERA_TEST_TEST (1<<31)
+#define CAMERA_TEST_NORMAL (0<<31)
+
+//STATUS
+#define CAMERA_OVFL (1<<0)
+#define CAMERA_VSYNC_R (1<<1)
+#define CAMERA_VSYNC_F (1<<2)
+#define CAMERA_DMA_DONE (1<<3)
+#define CAMERA_FIFO_EMPTY (1<<4)
+
+//DATA
+#define CAMERA_RX_DATA(n) (((n)&0xFFFFFFFF)<<0)
+
+//IRQ_MASK
+//#define CAMERA_OVFL (1<<0)
+//#define CAMERA_VSYNC_R (1<<1)
+//#define CAMERA_VSYNC_F (1<<2)
+//#define CAMERA_DMA_DONE (1<<3)
+
+//IRQ_CLEAR
+//#define CAMERA_OVFL (1<<0)
+//#define CAMERA_VSYNC_R (1<<1)
+//#define CAMERA_VSYNC_F (1<<2)
+//#define CAMERA_DMA_DONE (1<<3)
+
+//IRQ_CAUSE
+//#define CAMERA_OVFL (1<<0)
+//#define CAMERA_VSYNC_R (1<<1)
+//#define CAMERA_VSYNC_F (1<<2)
+//#define CAMERA_DMA_DONE (1<<3)
+
+//CMD_SET,modified by xiankuiwei
+#define CAMERA_RESET (1<<0)
+#define CAMERA_PWDN (1<<4)
+#define CAMERA_FIFO_RESET (1<<8)
+
+//CMD_CLR
+//#define CAMERA_PWDN (1<<4)
+//#define CAMERA_RESET (1<<0)
+
+//DSTWINCOL,modified by xiankuiwei
+#define CAMERA_DSTWINCOLSTART(n) (((n)&0xFFF)<<16)
+#define CAMERA_DSTWINCOLEND(n) (((n)&0xFFF)<<0)
+
+//DSTWINROW
+#define CAMERA_DSTWINROWSTART(n) (((n)&0xFFF)<<16)
+#define CAMERA_DSTWINROWEND(n) (((n)&0xFFF)<<0)
+
+// SCALE CONFIG, no use now
+#define CAM_SCALE_EN (1<<0)
+#define CAM_SCALE_COL(n) (((n)&0x3)<<8)
+#define CAM_SCALE_ROW(n) (((n)&0x3)<<16)
+
+/*************************************************************/
+/***************** SPI CAMERA CONFIGURATION ********************/
+/*************************************************************/
+
+// Here, spi master mode means the sensor works as the SPI master.
+// master mode 1 means 1 data ouput with SSN, master mode 2 means the other master modes.
+
+//--------------------------------
+// camera_spi_reg_0
+//--------------------------------
+// the number of lines per frame
+#define CAM_SPI_REG_LINE_PER_FRM(n) (((n)&0x3ff)<<22)
+// the number of words(32 bits) per line
+#define CAM_SPI_REG_BLK_PER_LINE(n) (((n)&0x3ff)<<12)
+// VSYNC high effective
+#define CAM_SPI_REG_VSYNC_INV_EN (1<<11)
+// HREF low effective
+#define CAM_SPI_REG_HREF_INV_EN (1<<10)
+// OVFL low effective
+#define CAM_SPI_REG_OVFL_INV_EN (1<<9)
+// little endian enable
+#define CAM_SPI_REG_LITTLE_END_EN (1<<8)
+// module reset when ovfl enable
+#define CAM_SPI_REG_OVFL_RST_EN (1<<7)
+// observe the overflow when vsync effective
+#define CAM_SPI_REG_OVFL_OBS (1<<6)
+// reset the module when overflow in vsync effective
+#define CAM_SPI_REG_OVFL_RST (1<<5)
+/************************************************
+YUV data output format
+ 3'b000: Y0-U0-Y1-V0 3'b001: Y0-V0-Y1-U0
+ 3'b010: U0-Y0-V0-Y1 3'b011: U0-Y1-V0-Y0
+ 3'b100: V0-Y1-U0-Y0 3'b101: V0-Y0-U0-Y1
+ 3'b110: Y1-V0-Y0-U0 3'b111: Y1-U0-Y0-V0
+*************************************************/
+#define CAM_SPI_REG_YUV_OUT_FMT(n) (((n)&0x7)<<2)
+// SPI master mode 1 enable
+#define CAM_SPI_REG_MASTER_EN (1<<1)
+// SPI slave mode enable
+#define CAM_SPI_REG_SLAVE_EN (1<<0)
+
+//--------------------------------
+// camera_spi_reg_1
+//--------------------------------
+#define CAM_SPI_REG_CLK_DIV(n) ((n)&0xffff) // camera clock divider
+#define CAM_SPI_REG_SSN_HIGH_EN (1<<17) // SSN high enable, only for master mode 1
+
+//--------------------------------
+// camera_spi_reg_2
+//--------------------------------
+// only take effect in slave mode which is not supported yet
+
+//--------------------------------
+// camera_spi_reg_3
+//--------------------------------
+// only take effect in slave mode which is not supported yet
+
+//--------------------------------
+// camera_spi_reg_4
+//--------------------------------
+#define CAM_SPI_REG_BLK_PER_PACK(n) (((n)&0x3ff)<<6)
+#define CAM_SPI_REG_IMG_WIDTH_FROM_REG (1<<5)
+#define CAM_SPI_REG_IMG_HEIGHT_FROM_REG (1<<4)
+#define CAM_SPI_REG_PACK_SIZE_FROM_REG (1<<3)
+#define CAM_SPI_REG_LINE(n) (((n)&0x3)<<1)
+#define CAM_SPI_REG_MASTER2_EN (1<<0)
+
+//--------------------------------
+// camera_spi_reg_5
+//--------------------------------
+#define CAM_SPI_REG_SYNC_CODE(n) ((n)&0xffffff)
+
+//--------------------------------
+// camera_spi_reg_6
+//--------------------------------
+// frame_start packet id, only in master mode 2
+#define CAM_SPI_REG_FRM_START_PKT_ID(n) (((n)&0xff)<<24)
+// frame_end packet id, only in master mode 2
+#define CAM_SPI_REG_FRM_ENDN_PKT_ID(n) (((n)&0xff)<<16)
+// line_start packet id, only in master mode 2
+#define CAM_SPI_REG_LINE_START_PKT_ID(n) (((n)&0xff)<<8)
+// data packet id, only in master mode 2
+#define CAM_SPI_REG_DATA_PKT_ID(n) ((n)&0xff)
+
+//--------------------------------
+// camera_spi_observe_reg_0 (read only)
+//--------------------------------
+
+//--------------------------------
+// camera_spi_observe_reg_1 (read only)
+//--------------------------------
+
+//--------------------------------
+// csi_config_reg0
+//--------------------------------
+#define CSI_NUM_D_TERM_EN(n) (((n)&0XFF)<<0)
+#define CSI_CUR_FRAME_LINE_NUM(n) (((n)&0X3FF)<<8)
+#define CSI_VC_ID_SET(n) (((n)&3)<<18)
+#define CSI_DATA_LP_IN_CHOOSE(n) (((n)&3)<<20)
+#define CSI_DATA_LP_INV (1<<22)
+#define CSI_CLK_LP_INV (1<<23)
+#define CSI_TRAIL_DATA_WRONG_CHOOSE (1<<24)
+#define CSI_SYNC_BYPASS (1<<25)
+#define CSI_RDATA_BIT_INV_EN (1<<26)
+#define CSI_HS_SYNC_FIND_EN (1<<27)
+#define CSI_LINE_PACKET_ENABLE (1<<28)
+#define CSI_ECC_BYPASS (1<<29)
+#define CSI_DATA_LANE_CHOOSE (1<<30)
+#define CSI_MODULE_ENABLE (1<<31)
+
+//--------------------------------
+// csi_config_reg01
+//--------------------------------
+#define CSI_NUM_HS_SETTLE(n) (((n)&0XFF)<<0)
+#define CSI_LP_DATA_LENGTH_CHOSSE(n) (((n)&7)<<8)
+#define CSI_DATA_CLK_LP_POSEEDGE_CHOSSE(n) (((n)&7)<<11)
+#define CSI_CLK_LP_CK_INV (1<<14)
+#define CSI_RCLR_MASK_EN (1<<15)
+#define CSI_RINC_MASK_EN (1<<16)
+#define CSI_HS_ENALBE_MASK_EN (1<<17)
+#define CSI_DEN_INV_BIT (1<<18)
+#define CSI_HSYNC_INV_BIT (1<<19)
+#define CSI_VSYNC_INV_BIT (1<<20)
+#define CSI_HS_DATA2_ENABLE_REG (1<<21)
+
+#define CSI_HS_TATA1_ENALBE_REG (1<<22)
+#define CSI_HS_DATA1_ENABLE_CHOSSE (1<<23)
+#define CSI_HS_DATA1_ENALBE_DRE (1<<24)
+#define CSI_DATA2_TER_ENABLE_REG (1<<25)
+#define CSI_DATAL_TER_ENABLE_REG (1<<26)
+#define CSI_DATAL_TER_ENABLE_DR (1<<27)
+#define CSI_LP_DATA_INTERRUPT_CLR (1<<28)
+#define CSI_LP_CMD_INTERRUPT_CLR (1<<29)
+#define CSI_LP_DATA_CLR (1<<30)
+#define CSI_LP_CMD_CLR (1<<31)
+
+//--------------------------------
+// csi_config_reg02
+//--------------------------------
+#define CSI_NUM_C_TERM_EN(n) (((n)&0XFFFF)<<16)
+#define CSI_NUM_HS_SETTLE_CLK(n) (((n)&0XFFFF)<<0)
+
+//--------------------------------
+// csi_config_reg03
+//--------------------------------
+#define CSI_DLY_SEL_REG(n) (((n)&3)<<0)
+#define CSI_DLY_SEL_DATA2_REG(n) (((n)&3)<<2)
+#define CSI_DLY_SEL_DATA1_REG(n) (((n)&3)<<4)
+#define CSI_CLK_LP_IN_CHOOSE_BIT(n) (((n)&3)<<6)
+#define CSI_PU_LPRX_REG (1<<8)
+#define CSI_PU_HSRX_REG (1<<9)
+#define CSI_PU_DR (1<<10)
+#define CSI_AVDD1V8_2V8_SEL_REG (1<<11)
+#define CSI_HS_CLK_ENABLE_REG (1<<12)
+#define CSI_HS_CLK_ENABLE_CHOOSE_BIT (1<<13)
+#define CSI_HS_CLK_ENALBE_DR (1<<14)
+#define CSI_CLK_TERMINAL_ENABLE_REG (1<<15)
+#define CSI_CLK_TERMINAL_ENABLE_DR (1<<16)
+#define CSI_OBSERVE_REG_5_LOW8_CHOOSE (1 << 17)
+#define CSI_ECC_ERROR_FLAG_REG (1 << 18)
+#define CSI_ECC_ERROR_DR (1 << 19)
+#define CSI_CHANNEL_SEL (1 << 20)
+#define CSI_TWO_LANE_BYTE_REVERSE (1 << 21)
+#define CSI_DATA2_LANE_BIT_REVERSE (1 << 22)
+#define CSI_DATA1_LANE_BIT_REVERSE (1 << 23)
+#define CSI_DATA2_HAS_NO_MASK (1 << 24)
+#define CSI_DATA1_HAS_NO_MASK (1 << 25)
+#define CSI_PU_LRX_D2_REG (1 << 26)
+#define CSI_PU_LRX_D1_REG (1 << 27)
+#define CSI_PU_LRX_CLK_REG (1 << 28)
+#define CSI_CLK_EDGE_SEL (1 << 29)
+#define CSI_CLK_X2_SEL (1 << 30)
+#define CSI_SINGLE_DATALANE_EN (1 << 31)
+
+//--------------------------------
+// csi_config_reg04,modified in 8850e by xiankuiwei
+//--------------------------------
+#define CSI_NUM_HS_CLK_USEFUL(n) (((n)&0X7FFFFFFF)<<0)
+#define CSI_NUM_HS_CLK_USEFUL_EN (1<<31)
+
+//--------------------------------
+// csi_config_reg05
+//--------------------------------
+#define CSI_LP_CMD_OUT(n) (((n)&0XFF)<<0)
+#define CSI_PHY_CLK_STATE(n) (((n)&0X1FF)<<10)
+#define CSI_HS_DATA_ERROR_FLAG (1<<28)
+#define CSI_ERR_ECC_CORRECTED_FLAG (1<<29)
+#define CSI_ERR_DATA_CORRECTED_FLAG (1<<30)
+#define CSI_ERR_DATA_ZERO_FLAG (1<<31)
+
+//--------------------------------
+// csi_observe_reg6 (read only)
+//--------------------------------
+
+//--------------------------------
+// csi_observe_reg6 (read only)
+//--------------------------------
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_cfg_regs.h b/arch/arm/include/asm/arch-rda/reg_cfg_regs.h
new file mode 100644
index 0000000000..613c9cd659
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_cfg_regs.h
@@ -0,0 +1,16 @@
+#ifdef CONFIG_MACH_RDA8810
+#include "reg_cfg_regs_rda8810.h"
+#elif defined(CONFIG_MACH_RDA8810E)
+#include "reg_cfg_regs_rda8810e.h"
+#elif defined(CONFIG_MACH_RDA8820)
+#include "reg_cfg_regs_rda8820.h"
+#elif defined(CONFIG_MACH_RDA8850)
+#include "reg_cfg_regs_rda8850.h"
+#elif defined(CONFIG_MACH_RDA8850E)
+#include "reg_cfg_regs_rda8850e.h"
+#elif defined(CONFIG_MACH_RDA8810H)
+#include "reg_cfg_regs_rda8810h.h"
+#else
+#error "unknown MACH"
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810.h b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810.h
new file mode 100644
index 0000000000..50f80fcf38
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810.h
@@ -0,0 +1,1056 @@
+#ifndef _REG_IFC_H_
+#define _REG_IFC_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define PROD_ID (0X8810)
+
+// ============================================================================
+// BB_GPIO_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// BB GPIO Map
+ BB_PIN_NONE_0 = 0x00000000,
+ BB_PIN_1 = 0x00000001,
+ BB_PIN_2 = 0x00000002,
+ BB_PIN_3 = 0x00000003,
+ BB_PIN_4 = 0x00000004,
+ BB_PIN_5 = 0x00000005,
+ BB_PIN_UART1_RXD = 0x00000006,
+ BB_PIN_UART2_RXD = 0x00000007,
+ BB_PIN_UART2_TXD = 0x00000008,
+ BB_PIN_SSD1_CLK = 0x00000009,
+ BB_PIN_SSD1_CMD = 0x0000000A,
+ BB_PIN_SDAT1_0 = 0x0000000B,
+ BB_PIN_SDAT1_1 = 0x0000000C,
+ BB_PIN_SDAT1_2 = 0x0000000D,
+ BB_PIN_SDAT1_3 = 0x0000000E,
+ BB_PIN_SSD2_CLK = 0x0000000F,
+ BB_PIN_SSD2_CMD = 0x00000010,
+ BB_PIN_SDAT2_0 = 0x00000011,
+ BB_PIN_SDAT2_1 = 0x00000012,
+ BB_PIN_SDAT2_2 = 0x00000013,
+ BB_PIN_SDAT2_3 = 0x00000014,
+ BB_PIN_SPI1_CLK = 0x00000015,
+ BB_PIN_SPI1_CS_0 = 0x00000016,
+ BB_PIN_SPI1_DIO = 0x00000017,
+ BB_PIN_SPI1_DI = 0x00000018,
+ BB_PIN_SIM2_RST = 0x00000019,
+ BB_PIN_SIM2_CLK = 0x0000001A,
+ BB_PIN_SIM2_DIO = 0x0000001B,
+ BB_PIN_SIM3_RST = 0x0000001C,
+ BB_PIN_SIM3_CLK = 0x0000001D,
+ BB_PIN_SIM3_DIO = 0x0000001E
+} BB_GPIO_MAPPING_T;
+
+#define BB_GPIO_NB (31)
+
+// ============================================================================
+// AP_GPIO_A_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO A Map
+ AP_PIN_I2C2_SCL = 0x00000000,
+ AP_PIN_I2C2_SDA = 0x00000001,
+ AP_PIN_SPI2_CLK = 0x00000002,
+ AP_PIN_SPI2_DIO = 0x00000003,
+ AP_PIN_SPI2_DI = 0x00000004,
+ AP_PIN_SPI2_CS_0 = 0x00000005,
+ AP_PIN_SPI2_CS_1 = 0x00000006,
+ AP_PIN_KEYIN_4 = 0x00000007,
+ AP_PIN_CLK_OUT = 0x00000008,
+ AP_PIN_I2S_BCK = 0x00000009,
+ AP_PIN_I2S_LRCK = 0x0000000A,
+ AP_PIN_I2S_DI_0 = 0x0000000B,
+ AP_PIN_I2S_DI_1 = 0x0000000C,
+ AP_PIN_I2S_DO = 0x0000000D,
+ AP_PIN_UART1_TXD = 0x0000000E,
+ AP_PIN_UART1_CTS = 0x0000000F,
+ AP_PIN_UART1_RTS = 0x00000010,
+ AP_PIN_SPI1_CS_1 = 0x00000011,
+ AP_PIN_LCD_DATA_6 = 0x00000012,
+ AP_PIN_LCD_DATA_7 = 0x00000013,
+ AP_PIN_LCD_WR = 0x00000014,
+ AP_PIN_LCD_RS = 0x00000015,
+ AP_PIN_LCD_RD = 0x00000016,
+ AP_PIN_LCD_FMARK = 0x00000017,
+ AP_PIN_LCD_DATA_8 = 0x00000018,
+ AP_PIN_LCD_DATA_9 = 0x00000019,
+ AP_PIN_LCD_DATA_10 = 0x0000001A,
+ AP_PIN_LCD_DATA_11 = 0x0000001B,
+ AP_PIN_LCD_DATA_12 = 0x0000001C,
+ AP_PIN_LCD_DATA_13 = 0x0000001D,
+ AP_PIN_LCD_DATA_14 = 0x0000001E,
+ AP_PIN_LCD_DATA_15 = 0x0000001F
+} AP_GPIO_A_MAPPING_T;
+
+#define AP_GPIO_A_NB (32)
+
+// ============================================================================
+// AP_GPIO_B_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO B Map
+ AP_PIN_KEYIN_0 = 0x00000000,
+ AP_PIN_KEYIN_1 = 0x00000001,
+ AP_PIN_KEYIN_2 = 0x00000002,
+ AP_PIN_KEYOUT_0 = 0x00000003,
+ AP_PIN_KEYOUT_1 = 0x00000004,
+ AP_PIN_KEYOUT_2 = 0x00000005,
+ AP_PIN_I2C3_SCL = 0x00000006,
+ AP_PIN_I2C3_SDA = 0x00000007,
+ AP_PIN_UART2_CTS = 0x00000008,
+ AP_PIN_UART2_RTS = 0x00000009,
+ AP_PIN_CAM_RST = 0x0000000A,
+ AP_PIN_CAM_PDN = 0x0000000B,
+ AP_PIN_CAM_CLK = 0x0000000C,
+ AP_PIN_CAM_VSYNC = 0x0000000D,
+ AP_PIN_CAM_HREF = 0x0000000E,
+ AP_PIN_CAM_PCLK = 0x0000000F,
+ AP_PIN_CAM_DATA_0 = 0x00000010,
+ AP_PIN_CAM_DATA_1 = 0x00000011,
+ AP_PIN_CAM_DATA_2 = 0x00000012,
+ AP_PIN_CAM_DATA_3 = 0x00000013,
+ AP_PIN_CAM_DATA_4 = 0x00000014,
+ AP_PIN_CAM_DATA_5 = 0x00000015,
+ AP_PIN_CAM_DATA_6 = 0x00000016,
+ AP_PIN_CAM_DATA_7 = 0x00000017,
+ AP_PIN_M_SPI_CS_0 = 0x00000018,
+ AP_PIN_NFCLE = 0x00000019,
+ AP_PIN_NFWEN = 0x0000001A,
+ AP_PIN_NFWPN = 0x0000001B,
+ AP_PIN_NFREN = 0x0000001C,
+ AP_PIN_NFRB = 0x0000001D,
+ AP_PIN_I2C1_SCL = 0x0000001E,
+ AP_PIN_I2C1_SDA = 0x0000001F
+} AP_GPIO_B_MAPPING_T;
+
+#define AP_GPIO_B_NB (32)
+
+// ============================================================================
+// AP_GPIO_D_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO D Map
+ AP_PIN_UART3_RXD = 0x00000000,
+ AP_PIN_UART3_TXD = 0x00000001,
+ AP_PIN_UART3_CTS = 0x00000002,
+ AP_PIN_UART3_RTS = 0x00000003,
+ AP_PIN_NFDQS = 0x00000004
+} AP_GPIO_D_MAPPING_T;
+
+#define AP_GPIO_D_NB (5)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// CFG_REGS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+#define REG_CONFIG_REGS_BASE 0x01A09000
+
+typedef volatile struct
+{
+ REG32 CHIP_ID; //0x00000000
+ /// This register contain the synthesis date and version
+ REG32 Build_Version; //0x00000004
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 BB_GPIO_Mode; //0x00000008
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_A_Mode; //0x0000000C
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_B_Mode; //0x00000010
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_D_Mode; //0x00000014
+ REG32 Alt_mux_select; //0x00000018
+ REG32 IO_Drive1_Select; //0x0000001C
+ REG32 IO_Drive2_Select; //0x00000020
+ REG32 RAM_DRIVE; //0x00000024
+ REG32 H2X_AP_Offset; //0x00000028
+ REG32 H2X_DDR_Offset; //0x0000002C
+ REG32 audio_pd_set; //0x00000030
+ REG32 audio_pd_clr; //0x00000034
+ REG32 audio_sel_cfg; //0x00000038
+ REG32 audio_mic_cfg; //0x0000003C
+ REG32 audio_spk_cfg; //0x00000040
+ REG32 audio_rcv_gain; //0x00000044
+ REG32 audio_head_gain; //0x00000048
+ REG32 TSC_DATA; //0x0000004C
+ REG32 GPADC_DATA_CH[8]; //0x00000050
+} HWP_CFG_REGS_T;
+
+#define hwp_configRegs ((HWP_CFG_REGS_T*)(RDA_CFG_REGS_BASE))
+
+
+//CHIP_ID
+#define CFG_REGS_METAL_ID(n) (((n)&0xFFF)<<0)
+#define CFG_REGS_METAL_ID_MASK (0xFFF<<0)
+#define CFG_REGS_METAL_ID_SHIFT (0)
+#define CFG_REGS_BOND_ID(n) (((n)&7)<<12)
+#define CFG_REGS_BOND_ID_MASK (7<<12)
+#define CFG_REGS_BOND_ID_SHIFT (12)
+#define CFG_REGS_PROD_ID(n) (((n)&0xFFFF)<<16)
+#define CFG_REGS_PROD_ID_MASK (0xFFFF<<16)
+#define CFG_REGS_PROD_ID_SHIFT (16)
+
+//Build_Version
+#define CFG_REGS_MAJOR(n) (((n)&15)<<28)
+#define CFG_REGS_YEAR(n) (((n)&15)<<24)
+#define CFG_REGS_MONTH(n) (((n)&0xFF)<<16)
+#define CFG_REGS_DAY(n) (((n)&0xFF)<<8)
+#define CFG_REGS_BUILD_STYLE_FPGA (0<<4)
+#define CFG_REGS_BUILD_STYLE_CHIP (1<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_USB (2<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_GSM (3<<4)
+#define CFG_REGS_BUILD_REVISION(n) (((n)&15)<<0)
+
+//BB_GPIO_Mode
+#define CFG_REGS_MODE_BB_PIN_NONE_0 (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_MASK (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_SHIFT (0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_ALT (0<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_GPIO (1<<0)
+#define CFG_REGS_MODE_BB_PIN_1 (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_SHIFT (1)
+#define CFG_REGS_MODE_BB_PIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_BB_PIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_BB_PIN_2 (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_SHIFT (2)
+#define CFG_REGS_MODE_BB_PIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_BB_PIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_BB_PIN_3 (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_MASK (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_SHIFT (3)
+#define CFG_REGS_MODE_BB_PIN_3_ALT (0<<3)
+#define CFG_REGS_MODE_BB_PIN_3_GPIO (1<<3)
+#define CFG_REGS_MODE_BB_PIN_4 (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_MASK (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_SHIFT (4)
+#define CFG_REGS_MODE_BB_PIN_4_ALT (0<<4)
+#define CFG_REGS_MODE_BB_PIN_4_GPIO (1<<4)
+#define CFG_REGS_MODE_BB_PIN_5 (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_MASK (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_SHIFT (5)
+#define CFG_REGS_MODE_BB_PIN_5_ALT (0<<5)
+#define CFG_REGS_MODE_BB_PIN_5_GPIO (1<<5)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_MASK (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_SHIFT (6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_ALT (0<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_GPIO (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_MASK (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_SHIFT (7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_ALT (0<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_GPIO (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_MASK (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_SHIFT (8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_ALT (0<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_GPIO (1<<8)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_MASK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_SHIFT (9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_ALT (0<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_GPIO (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_MASK (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_SHIFT (10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_ALT (0<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_GPIO (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0 (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_MASK (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_SHIFT (11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_ALT (0<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_GPIO (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1 (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_MASK (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_SHIFT (12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_ALT (0<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_GPIO (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2 (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_MASK (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_SHIFT (13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_ALT (0<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_GPIO (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3 (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_MASK (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_SHIFT (14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_ALT (0<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_GPIO (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_MASK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_SHIFT (15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_ALT (0<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_GPIO (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_MASK (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_SHIFT (16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_ALT (0<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_GPIO (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0 (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_MASK (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_SHIFT (17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_ALT (0<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_GPIO (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1 (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_MASK (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_SHIFT (18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_ALT (0<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_GPIO (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2 (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_MASK (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_SHIFT (19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_ALT (0<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_GPIO (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3 (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_MASK (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_SHIFT (20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_ALT (0<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_GPIO (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_MASK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_SHIFT (21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_ALT (0<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_GPIO (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0 (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_MASK (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_SHIFT (22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_ALT (0<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_GPIO (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_MASK (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_SHIFT (23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_ALT (0<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_GPIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_MASK (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_SHIFT (24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_ALT (0<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_GPIO (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_MASK (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_SHIFT (25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_ALT (0<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_GPIO (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_MASK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_SHIFT (26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_ALT (0<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_GPIO (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_MASK (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_SHIFT (27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_ALT (0<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_GPIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_MASK (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_SHIFT (28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_ALT (0<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_GPIO (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_MASK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_SHIFT (29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_ALT (0<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_GPIO (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_MASK (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_SHIFT (30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_ALT (0<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_GPIO (1<<30)
+#define CFG_REGS_BB_GPIO_MODE(n) (((n)&0x7FFFFFFF)<<0)
+#define CFG_REGS_BB_GPIO_MODE_MASK (0x7FFFFFFF<<0)
+#define CFG_REGS_BB_GPIO_MODE_SHIFT (0)
+
+//AP_GPIO_A_Mode
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1 (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4 (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9 (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10 (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11 (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12 (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13 (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14 (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15 (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_A_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_SHIFT (0)
+
+//AP_GPIO_B_Mode
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0 (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1 (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2 (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0 (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1 (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0 (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4 (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5 (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCLE (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFWEN (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWPN (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFREN (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFRB (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_B_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_SHIFT (0)
+
+//AP_GPIO_D_Mode
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_NFDQS (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_GPIO (1<<4)
+#define CFG_REGS_AP_GPIO_D_MODE(n) (((n)&31)<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_MASK (31<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_SHIFT (0)
+
+//Alt_mux_select
+#define CFG_REGS_LCD_MODE_MASK (3<<0)
+#define CFG_REGS_LCD_MODE_PARALLEL_16BIT (0<<0)
+#define CFG_REGS_LCD_MODE_DSI (1<<0)
+#define CFG_REGS_LCD_MODE_RGB_24BIT (2<<0)
+#define CFG_REGS_LCD_MODE_RGB_16BIT (3<<0)
+#define CFG_REGS_SPI_LCD_MASK (1<<2)
+#define CFG_REGS_SPI_LCD_NONE (0<<2)
+#define CFG_REGS_SPI_LCD_SPI_LCD (1<<2)
+#define CFG_REGS_CAM_I2C2_MASK (1<<3)
+#define CFG_REGS_CAM_I2C2_CAM (0<<3)
+#define CFG_REGS_CAM_I2C2_I2C2 (1<<3)
+#define CFG_REGS_CSI2_MASK (3<<4)
+#define CFG_REGS_CSI2_PARALLEL_CAM (0<<4)
+#define CFG_REGS_CSI2_CSI2 (1<<4)
+#define CFG_REGS_CSI2_SPI_CAM (2<<4)
+#define CFG_REGS_UART2_MASK (1<<6)
+#define CFG_REGS_UART2_HOST_UART (0<<6)
+#define CFG_REGS_UART2_UART2 (1<<6)
+#define CFG_REGS_UART1_8LINE_MASK (1<<7)
+#define CFG_REGS_UART1_8LINE_UART2 (0<<7)
+#define CFG_REGS_UART1_8LINE_UART1_8_LINE (1<<7)
+#define CFG_REGS_DAI_MASK (3<<8)
+#define CFG_REGS_DAI_I2S (0<<8)
+#define CFG_REGS_DAI_DAI (1<<8)
+#define CFG_REGS_DAI_DAI_SIMPLE (2<<8)
+#define CFG_REGS_KEYIN_3_MASK (1<<10)
+#define CFG_REGS_KEYIN_3_SPI2_CS_1 (0<<10)
+#define CFG_REGS_KEYIN_3_KEYIN_3 (1<<10)
+#define CFG_REGS_LPSCO_1_MASK (1<<11)
+#define CFG_REGS_LPSCO_1_KEYIN_4 (0<<11)
+#define CFG_REGS_LPSCO_1_LPSCO_1 (1<<11)
+#define CFG_REGS_SPI1_CS_2_MASK (1<<12)
+#define CFG_REGS_SPI1_CS_2_KEYIN_1 (0<<12)
+#define CFG_REGS_SPI1_CS_2_SPI1_CS_2 (1<<12)
+#define CFG_REGS_I2S_DI_2_MASK (1<<13)
+#define CFG_REGS_I2S_DI_2_KEYIN_2 (0<<13)
+#define CFG_REGS_I2S_DI_2_I2S_DI_2 (1<<13)
+#define CFG_REGS_TCO_0_MASK (1<<14)
+#define CFG_REGS_TCO_0_KEYOUT_0 (0<<14)
+#define CFG_REGS_TCO_0_TCO_0 (1<<14)
+#define CFG_REGS_TCO_1_MASK (1<<15)
+#define CFG_REGS_TCO_1_KEYOUT_1 (0<<15)
+#define CFG_REGS_TCO_1_TCO_1 (1<<15)
+#define CFG_REGS_TCO_2_MASK (1<<16)
+#define CFG_REGS_TCO_2_KEYOUT_2 (0<<16)
+#define CFG_REGS_TCO_2_TCO_2 (1<<16)
+#define CFG_REGS_KEYOUT_3_4_MASK (1<<17)
+#define CFG_REGS_KEYOUT_3_4_I2C3 (0<<17)
+#define CFG_REGS_KEYOUT_3_4_KEYOUT_3_4 (1<<17)
+#define CFG_REGS_KEYOUT_6_MASK (1<<18)
+#define CFG_REGS_KEYOUT_6_UART2_RTS (0<<18)
+#define CFG_REGS_KEYOUT_6_KEYOUT_6 (1<<18)
+#define CFG_REGS_KEYOUT_7_MASK (1<<19)
+#define CFG_REGS_KEYOUT_7_UART1_RTS (0<<19)
+#define CFG_REGS_KEYOUT_7_KEYOUT_7 (1<<19)
+#define CFG_REGS_GPO_0_MASK (3<<20)
+#define CFG_REGS_GPO_0_GPO_0 (0<<20)
+#define CFG_REGS_GPO_0_PWT (1<<20)
+#define CFG_REGS_GPO_0_KEYIN_5 (2<<20)
+#define CFG_REGS_GPO_1_MASK (3<<22)
+#define CFG_REGS_GPO_1_GPO_1 (0<<22)
+#define CFG_REGS_GPO_1_LPG (1<<22)
+#define CFG_REGS_GPO_1_KEYOUT_5 (2<<22)
+#define CFG_REGS_GPO_2_MASK (3<<24)
+#define CFG_REGS_GPO_2_GPO_2 (0<<24)
+#define CFG_REGS_GPO_2_PWL_1 (1<<24)
+#define CFG_REGS_GPO_2_CLK_32K (2<<24)
+#define CFG_REGS_GPO_3_MASK (1<<26)
+#define CFG_REGS_GPO_3_LCD_CS_1 (0<<26)
+#define CFG_REGS_GPO_3_GPO_3 (1<<26)
+#define CFG_REGS_GPO_4_MASK (1<<27)
+#define CFG_REGS_GPO_4_LCD_CS_0 (0<<27)
+#define CFG_REGS_GPO_4_GPO_4 (1<<27)
+#define CFG_REGS_CLK_OUT_MASK (1<<28)
+#define CFG_REGS_CLK_OUT_HST_CLK (0<<28)
+#define CFG_REGS_CLK_OUT_CLK_OUT (1<<28)
+#define CFG_REGS_DEBUG_MASK (1<<29)
+#define CFG_REGS_DEBUG_NONE (0<<29)
+#define CFG_REGS_DEBUG_DEBUG_MONITOR (1<<29)
+#define CFG_REGS_AP_SPI1_MASK (1<<30)
+#define CFG_REGS_AP_SPI1_BB_SPI1 (0<<30)
+#define CFG_REGS_AP_SPI1_AP_SPI1 (1<<30)
+#define CFG_REGS_LCD24_CAM_MASK (1<<31)
+#define CFG_REGS_LCD24_CAM_NAND_IO (0<<31)
+#define CFG_REGS_LCD24_CAM_CAM_IO (1<<31)
+
+//IO_Drive1_Select
+#define CFG_REGS_DDR_DRIVE_MASK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_WEAK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_WEAK (6<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_STRONG (5<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_STRONG (4<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_WEAK (3<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_WEAK (2<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_STRONG (1<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_STRONG (0<<0)
+#define CFG_REGS_PSRAM1_DRIVE_MASK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_WEAK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_WEAK (6<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_STRONG (5<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_STRONG (4<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_WEAK (3<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_WEAK (2<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_STRONG (1<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_STRONG (0<<3)
+#define CFG_REGS_PSRAM2_DRIVE_MASK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_WEAK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_WEAK (6<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_STRONG (5<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_STRONG (4<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_WEAK (3<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_WEAK (2<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_STRONG (1<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_STRONG (0<<6)
+#define CFG_REGS_NFLSH_DRIVE_MASK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_WEAK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_WEAK (6<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_STRONG (5<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_STRONG (4<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_WEAK (3<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_WEAK (2<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_STRONG (1<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_STRONG (0<<9)
+#define CFG_REGS_LCD1_DRIVE_MASK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_WEAK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_WEAK (6<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_STRONG (5<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_STRONG (4<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_WEAK (3<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_WEAK (2<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_STRONG (1<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_STRONG (0<<12)
+#define CFG_REGS_LCD2_DRIVE_MASK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_WEAK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_WEAK (6<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_STRONG (5<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_STRONG (4<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_WEAK (3<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_WEAK (2<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_STRONG (1<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_STRONG (0<<15)
+#define CFG_REGS_SDAT1_DRIVE_MASK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_WEAK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_WEAK (6<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_STRONG (5<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_STRONG (4<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_WEAK (3<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_WEAK (2<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_STRONG (1<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_STRONG (0<<18)
+#define CFG_REGS_SDAT2_DRIVE_MASK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_WEAK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_WEAK (6<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_STRONG (5<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_STRONG (4<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_WEAK (3<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_WEAK (2<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_STRONG (1<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_STRONG (0<<21)
+#define CFG_REGS_CAM_DRIVE_MASK (3<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_STRONG (0<<24)
+#define CFG_REGS_CAM_DRIVE_STRONG (1<<24)
+#define CFG_REGS_CAM_DRIVE_WEAK (2<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_WEAK (3<<24)
+#define CFG_REGS_SIM1_DRIVE_MASK (3<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_STRONG (0<<26)
+#define CFG_REGS_SIM1_DRIVE_STRONG (1<<26)
+#define CFG_REGS_SIM1_DRIVE_WEAK (2<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_WEAK (3<<26)
+#define CFG_REGS_SIM2_DRIVE_MASK (3<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_STRONG (0<<28)
+#define CFG_REGS_SIM2_DRIVE_STRONG (1<<28)
+#define CFG_REGS_SIM2_DRIVE_WEAK (2<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_WEAK (3<<28)
+#define CFG_REGS_SIM3_DRIVE_MASK (3<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_STRONG (0<<30)
+#define CFG_REGS_SIM3_DRIVE_STRONG (1<<30)
+#define CFG_REGS_SIM3_DRIVE_WEAK (2<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_WEAK (3<<30)
+
+//IO_Drive2_Select
+#define CFG_REGS_GPIO_DRIVE_MASK (3<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_STRONG (0<<0)
+#define CFG_REGS_GPIO_DRIVE_STRONG (1<<0)
+#define CFG_REGS_GPIO_DRIVE_WEAK (2<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_WEAK (3<<0)
+
+//RAM_DRIVE
+#define CFG_REGS_MBRAM_A(n) (((n)&7)<<0)
+#define CFG_REGS_MBRAM_A_MASK (7<<0)
+#define CFG_REGS_MBRAM_A_SHIFT (0)
+#define CFG_REGS_MBRAM_W(n) (((n)&3)<<3)
+#define CFG_REGS_MBRAM_W_MASK (3<<3)
+#define CFG_REGS_MBRAM_W_SHIFT (3)
+#define CFG_REGS_MBRAM_R (1<<5)
+#define CFG_REGS_BBRAM_A(n) (((n)&7)<<6)
+#define CFG_REGS_BBRAM_A_MASK (7<<6)
+#define CFG_REGS_BBRAM_A_SHIFT (6)
+#define CFG_REGS_BBRAM_W(n) (((n)&3)<<9)
+#define CFG_REGS_BBRAM_W_MASK (3<<9)
+#define CFG_REGS_BBRAM_W_SHIFT (9)
+#define CFG_REGS_BBRAM_R (1<<11)
+#define CFG_REGS_XP_A(n) (((n)&7)<<12)
+#define CFG_REGS_XP_A_MASK (7<<12)
+#define CFG_REGS_XP_A_SHIFT (12)
+#define CFG_REGS_XP_W(n) (((n)&3)<<15)
+#define CFG_REGS_XP_W_MASK (3<<15)
+#define CFG_REGS_XP_W_SHIFT (15)
+#define CFG_REGS_XP_R (1<<17)
+#define CFG_REGS_BP_A(n) (((n)&7)<<18)
+#define CFG_REGS_BP_A_MASK (7<<18)
+#define CFG_REGS_BP_A_SHIFT (18)
+#define CFG_REGS_BP_W(n) (((n)&3)<<21)
+#define CFG_REGS_BP_W_MASK (3<<21)
+#define CFG_REGS_BP_W_SHIFT (21)
+#define CFG_REGS_BP_R (1<<23)
+#define CFG_REGS_EV_A(n) (((n)&7)<<24)
+#define CFG_REGS_EV_A_MASK (7<<24)
+#define CFG_REGS_EV_A_SHIFT (24)
+#define CFG_REGS_EV_W(n) (((n)&3)<<27)
+#define CFG_REGS_EV_W_MASK (3<<27)
+#define CFG_REGS_EV_W_SHIFT (27)
+#define CFG_REGS_EV_R (1<<29)
+
+//H2X_AP_Offset
+#define CFG_REGS_H2X_AP_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_AP_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_AP_OFFSET_SHIFT (0)
+
+//H2X_DDR_Offset
+#define CFG_REGS_H2X_DDR_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_SHIFT (0)
+
+//audio_pd_set
+#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+#define CFG_REGS_AU_REF_PD_N (1<<1)
+#define CFG_REGS_AU_MIC_PD_N (1<<2)
+#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+#define CFG_REGS_AU_AD_PD_N (1<<4)
+#define CFG_REGS_AU_DAC_PD_N (1<<5)
+#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_pd_clr
+//#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+//#define CFG_REGS_AU_REF_PD_N (1<<1)
+//#define CFG_REGS_AU_MIC_PD_N (1<<2)
+//#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+//#define CFG_REGS_AU_AD_PD_N (1<<4)
+//#define CFG_REGS_AU_DAC_PD_N (1<<5)
+//#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+//#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_sel_cfg
+#define CFG_REGS_AU_AUXMIC_SEL (1<<0)
+#define CFG_REGS_AU_SPK_SEL (1<<1)
+#define CFG_REGS_AU_SPK_MONO_SEL (1<<2)
+#define CFG_REGS_AU_RCV_SEL (1<<3)
+#define CFG_REGS_AU_HEAD_SEL (1<<4)
+
+//audio_mic_cfg
+#define CFG_REGS_AU_MIC_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_MIC_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_MIC_GAIN_SHIFT (0)
+#define CFG_REGS_AU_MIC_MUTE_N (1<<4)
+
+//audio_spk_cfg
+#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_SPK_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_SPK_GAIN_SHIFT (0)
+#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
+
+//audio_rcv_gain
+#define CFG_REGS_AU_RCV_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_RCV_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_RCV_GAIN_SHIFT (0)
+
+//audio_head_gain
+#define CFG_REGS_AU_HEAD_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_HEAD_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_HEAD_GAIN_SHIFT (0)
+
+//TSC_DATA
+#define CFG_REGS_TSC_X_VALUE_BIT(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_MASK (0x3FF<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_SHIFT (0)
+#define CFG_REGS_TSC_X_VALUE_VALID (1<<10)
+#define CFG_REGS_TSC_Y_VALUE_BIT(n) (((n)&0x3FF)<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_MASK (0x3FF<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_SHIFT (11)
+#define CFG_REGS_TSC_Y_VALUE_VALID (1<<21)
+
+//GPADC_DATA_CH
+#define CFG_REGS_GPADC_DATA(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_GPADC_DATA_MASK (0x3FF<<0)
+#define CFG_REGS_GPADC_DATA_SHIFT (0)
+#define CFG_REGS_GPADC_VALID (1<<10)
+#define CFG_REGS_GPADC_CH_EN (1<<31)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810e.h b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810e.h
new file mode 100644
index 0000000000..e659daf337
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810e.h
@@ -0,0 +1,1302 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2014, RDA Microelectronics.
+// All Rights Reserved
+//
+// This source code is the property of RDA Microelectronics and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA Microelectronics.
+//
+//==============================================================================
+//
+// THIS FILE WAS GENERATED FROM ITS CORRESPONDING XML VERSION WITH COOLXML.
+//
+// !!! PLEASE DO NOT EDIT !!!
+//
+// $HeadURL$
+// $Author$
+// $Date$
+// $Revision$
+//
+//==============================================================================
+//
+/// @file
+//
+//==============================================================================
+
+#ifndef _CFG_REGS_H_
+#define _CFG_REGS_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#ifdef CT_ASM
+#error "You are trying to use in an assembly code the normal H description of 'cfg_regs'."
+#endif
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define PROD_ID (0X810E)
+
+// ============================================================================
+// BB_GPIO_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// BB GPIO Map
+ BB_PIN_NONE_0 = 0x00000000,
+ BB_PIN_1 = 0x00000001,
+ BB_PIN_2 = 0x00000002,
+ BB_PIN_3 = 0x00000003,
+ BB_PIN_4 = 0x00000004,
+ BB_PIN_5 = 0x00000005,
+ BB_PIN_UART1_RXD = 0x00000006,
+ BB_PIN_UART2_RXD = 0x00000007,
+ BB_PIN_UART2_TXD = 0x00000008,
+ BB_PIN_SSD1_CLK = 0x00000009,
+ BB_PIN_SSD1_CMD = 0x0000000A,
+ BB_PIN_SDAT1_0 = 0x0000000B,
+ BB_PIN_SDAT1_1 = 0x0000000C,
+ BB_PIN_SDAT1_2 = 0x0000000D,
+ BB_PIN_SDAT1_3 = 0x0000000E,
+ BB_PIN_SSD2_CLK = 0x0000000F,
+ BB_PIN_SSD2_CMD = 0x00000010,
+ BB_PIN_SDAT2_0 = 0x00000011,
+ BB_PIN_SDAT2_1 = 0x00000012,
+ BB_PIN_SDAT2_2 = 0x00000013,
+ BB_PIN_SDAT2_3 = 0x00000014,
+ BB_PIN_SPI1_CLK = 0x00000015,
+ BB_PIN_SPI1_CS_0 = 0x00000016,
+ BB_PIN_SPI1_DIO = 0x00000017,
+ BB_PIN_SPI1_DI = 0x00000018,
+ BB_PIN_SIM2_RST = 0x00000019,
+ BB_PIN_SIM2_CLK = 0x0000001A,
+ BB_PIN_SIM2_DIO = 0x0000001B,
+ BB_PIN_SIM3_RST = 0x0000001C,
+ BB_PIN_SIM3_CLK = 0x0000001D,
+ BB_PIN_SIM3_DIO = 0x0000001E
+} BB_GPIO_MAPPING_T;
+
+#define BB_GPIO_NB (31)
+
+// ============================================================================
+// AP_GPIO_A_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO A Map
+ AP_PIN_I2C2_SCL = 0x00000000,
+ AP_PIN_I2C2_SDA = 0x00000001,
+ AP_PIN_SPI2_CLK = 0x00000002,
+ AP_PIN_SPI2_DIO = 0x00000003,
+ AP_PIN_SPI2_DI = 0x00000004,
+ AP_PIN_SPI2_CS_0 = 0x00000005,
+ AP_PIN_SPI2_CS_1 = 0x00000006,
+ AP_PIN_KEYIN_4 = 0x00000007,
+ AP_PIN_CLK_OUT = 0x00000008,
+ AP_PIN_I2S_BCK = 0x00000009,
+ AP_PIN_I2S_LRCK = 0x0000000A,
+ AP_PIN_I2S_DI_0 = 0x0000000B,
+ AP_PIN_I2S_DI_1 = 0x0000000C,
+ AP_PIN_I2S_DO = 0x0000000D,
+ AP_PIN_UART1_TXD = 0x0000000E,
+ AP_PIN_UART1_CTS = 0x0000000F,
+ AP_PIN_UART1_RTS = 0x00000010,
+ AP_PIN_SPI1_CS_1 = 0x00000011,
+ AP_PIN_LCD_DATA_6 = 0x00000012,
+ AP_PIN_LCD_DATA_7 = 0x00000013,
+ AP_PIN_LCD_WR = 0x00000014,
+ AP_PIN_LCD_RS = 0x00000015,
+ AP_PIN_LCD_RD = 0x00000016,
+ AP_PIN_LCD_FMARK = 0x00000017,
+ AP_PIN_LCD_DATA_8 = 0x00000018,
+ AP_PIN_LCD_DATA_9 = 0x00000019,
+ AP_PIN_LCD_DATA_10 = 0x0000001A,
+ AP_PIN_LCD_DATA_11 = 0x0000001B,
+ AP_PIN_LCD_DATA_12 = 0x0000001C,
+ AP_PIN_LCD_DATA_13 = 0x0000001D,
+ AP_PIN_LCD_DATA_14 = 0x0000001E,
+ AP_PIN_LCD_DATA_15 = 0x0000001F
+} AP_GPIO_A_MAPPING_T;
+
+#define AP_GPIO_A_NB (32)
+
+// ============================================================================
+// AP_GPIO_B_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO B Map
+ AP_PIN_KEYIN_0 = 0x00000000,
+ AP_PIN_KEYIN_1 = 0x00000001,
+ AP_PIN_KEYIN_2 = 0x00000002,
+ AP_PIN_KEYOUT_0 = 0x00000003,
+ AP_PIN_KEYOUT_1 = 0x00000004,
+ AP_PIN_KEYOUT_2 = 0x00000005,
+ AP_PIN_I2C3_SCL = 0x00000006,
+ AP_PIN_I2C3_SDA = 0x00000007,
+ AP_PIN_UART2_CTS = 0x00000008,
+ AP_PIN_UART2_RTS = 0x00000009,
+ AP_PIN_CAM_RST = 0x0000000A,
+ AP_PIN_CAM_PDN = 0x0000000B,
+ AP_PIN_CAM_CLK = 0x0000000C,
+ AP_PIN_CAM_VSYNC = 0x0000000D,
+ AP_PIN_CAM_HREF = 0x0000000E,
+ AP_PIN_CAM_PCLK = 0x0000000F,
+ AP_PIN_CAM_DATA_0 = 0x00000010,
+ AP_PIN_CAM_DATA_1 = 0x00000011,
+ AP_PIN_CAM_DATA_2 = 0x00000012,
+ AP_PIN_CAM_DATA_3 = 0x00000013,
+ AP_PIN_CAM_DATA_4 = 0x00000014,
+ AP_PIN_CAM_DATA_5 = 0x00000015,
+ AP_PIN_CAM_DATA_6 = 0x00000016,
+ AP_PIN_CAM_DATA_7 = 0x00000017,
+ AP_PIN_M_SPI_CS_0 = 0x00000018,
+ AP_PIN_NFCLE = 0x00000019,
+ AP_PIN_NFWEN = 0x0000001A,
+ AP_PIN_NFWPN = 0x0000001B,
+ AP_PIN_NFREN = 0x0000001C,
+ AP_PIN_NFRB = 0x0000001D,
+ AP_PIN_I2C1_SCL = 0x0000001E,
+ AP_PIN_I2C1_SDA = 0x0000001F
+} AP_GPIO_B_MAPPING_T;
+
+#define AP_GPIO_B_NB (32)
+
+// ============================================================================
+// AP_GPIO_D_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO D Map
+ AP_PIN_UART3_RXD = 0x00000000,
+ AP_PIN_UART3_TXD = 0x00000001,
+ AP_PIN_UART3_CTS = 0x00000002,
+ AP_PIN_UART3_RTS = 0x00000003,
+ AP_PIN_NFDQS = 0x00000004,
+ AP_PIN_VOLUME_DN = 0x00000005,
+ AP_PIN_VOLUME_UP = 0x00000006,
+ AP_PIN_PLUGIN = 0x00000007,
+ AP_PIN_NFCEN_1 = 0x00000008,
+ AP_PIN_NFCEN_2 = 0x00000009,
+ AP_PIN_NFCEN_3 = 0x0000000A,
+ AP_PIN_I2S2_BCK = 0x0000000B,
+ AP_PIN_I2S2_LRCK = 0x0000000C,
+ AP_PIN_I2S2_DI_0 = 0x0000000D,
+ AP_PIN_I2S2_DI_1 = 0x0000000E,
+ AP_PIN_I2S2_DO = 0x0000000F
+} AP_GPIO_D_MAPPING_T;
+
+#define AP_GPIO_D_NB (16)
+
+// ============================================================================
+// AP_GPIO_E_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO E Map
+ AP_PIN_I2CBB_SCL = 0x00000000,
+ AP_PIN_I2CBB_SDA = 0x00000001,
+ AP_PIN_CAM2_RST = 0x00000002,
+ AP_PIN_CAM2_PDN = 0x00000003,
+ AP_PIN_CAM2_CLK = 0x00000004,
+ AP_PIN_CAM2_VSYNC = 0x00000005,
+ AP_PIN_CAM2_HREF = 0x00000006,
+ AP_PIN_CAM2_PCLK = 0x00000007,
+ AP_PIN_CAM2_DATA_0 = 0x00000008,
+ AP_PIN_CAM2_DATA_1 = 0x00000009,
+ AP_PIN_CAM2_DATA_2 = 0x0000000A,
+ AP_PIN_CAM2_DATA_3 = 0x0000000B,
+ AP_PIN_CAM2_DATA_4 = 0x0000000C,
+ AP_PIN_CAM2_DATA_5 = 0x0000000D,
+ AP_PIN_CAM2_DATA_6 = 0x0000000E,
+ AP_PIN_CAM2_DATA_7 = 0x0000000F
+} AP_GPIO_E_MAPPING_T;
+
+#define AP_GPIO_E_NB (16)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// CFG_REGS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+#define REG_CONFIG_REGS_BASE 0x01A09000
+
+typedef volatile struct
+{
+ REG32 CHIP_ID; //0x00000000
+ /// This register contain the synthesis date and version
+ REG32 Build_Version; //0x00000004
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 BB_GPIO_Mode; //0x00000008
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_A_Mode; //0x0000000C
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_B_Mode; //0x00000010
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_D_Mode; //0x00000014
+ REG32 Alt_mux_select; //0x00000018
+ REG32 IO_Drive1_Select; //0x0000001C
+ REG32 IO_Drive2_Select; //0x00000020
+ REG32 RAM_DRIVE; //0x00000024
+ REG32 H2X_AP_Offset; //0x00000028
+ REG32 H2X_DDR_Offset; //0x0000002C
+ REG32 audio_pd_set; //0x00000030
+ REG32 audio_pd_clr; //0x00000034
+ REG32 audio_sel_cfg; //0x00000038
+ REG32 audio_mic_cfg; //0x0000003C
+ REG32 audio_spk_cfg; //0x00000040
+ REG32 audio_rcv_gain; //0x00000044
+ REG32 audio_head_gain; //0x00000048
+ REG32 TSC_DATA; //0x0000004C
+ REG32 GPADC_DATA_CH[8]; //0x00000050
+ REG32 Alt_mux_select2; //0x00000070
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_E_Mode; //0x00000074
+} HWP_CFG_REGS_T;
+
+#define hwp_configRegs ((HWP_CFG_REGS_T*) (RDA_CFG_REGS_BASE))
+
+
+//CHIP_ID
+#define CFG_REGS_METAL_ID(n) (((n)&0xFFF)<<0)
+#define CFG_REGS_METAL_ID_MASK (0xFFF<<0)
+#define CFG_REGS_METAL_ID_SHIFT (0)
+#define CFG_REGS_BOND_ID(n) (((n)&7)<<12)
+#define CFG_REGS_BOND_ID_MASK (7<<12)
+#define CFG_REGS_BOND_ID_SHIFT (12)
+#define CFG_REGS_PROD_ID(n) (((n)&0xFFFF)<<16)
+#define CFG_REGS_PROD_ID_MASK (0xFFFF<<16)
+#define CFG_REGS_PROD_ID_SHIFT (16)
+
+//Build_Version
+#define CFG_REGS_MAJOR(n) (((n)&15)<<28)
+#define CFG_REGS_YEAR(n) (((n)&15)<<24)
+#define CFG_REGS_MONTH(n) (((n)&0xFF)<<16)
+#define CFG_REGS_DAY(n) (((n)&0xFF)<<8)
+#define CFG_REGS_BUILD_STYLE_FPGA (0<<4)
+#define CFG_REGS_BUILD_STYLE_CHIP (1<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_USB (2<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_GSM (3<<4)
+#define CFG_REGS_BUILD_REVISION(n) (((n)&15)<<0)
+
+//BB_GPIO_Mode
+#define CFG_REGS_MODE_BB_PIN_NONE_0 (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_MASK (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_SHIFT (0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_ALT (0<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_GPIO (1<<0)
+#define CFG_REGS_MODE_BB_PIN_1 (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_SHIFT (1)
+#define CFG_REGS_MODE_BB_PIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_BB_PIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_BB_PIN_2 (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_SHIFT (2)
+#define CFG_REGS_MODE_BB_PIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_BB_PIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_BB_PIN_3 (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_MASK (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_SHIFT (3)
+#define CFG_REGS_MODE_BB_PIN_3_ALT (0<<3)
+#define CFG_REGS_MODE_BB_PIN_3_GPIO (1<<3)
+#define CFG_REGS_MODE_BB_PIN_4 (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_MASK (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_SHIFT (4)
+#define CFG_REGS_MODE_BB_PIN_4_ALT (0<<4)
+#define CFG_REGS_MODE_BB_PIN_4_GPIO (1<<4)
+#define CFG_REGS_MODE_BB_PIN_5 (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_MASK (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_SHIFT (5)
+#define CFG_REGS_MODE_BB_PIN_5_ALT (0<<5)
+#define CFG_REGS_MODE_BB_PIN_5_GPIO (1<<5)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_MASK (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_SHIFT (6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_ALT (0<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_GPIO (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_MASK (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_SHIFT (7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_ALT (0<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_GPIO (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_MASK (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_SHIFT (8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_ALT (0<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_GPIO (1<<8)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_MASK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_SHIFT (9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_ALT (0<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_GPIO (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_MASK (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_SHIFT (10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_ALT (0<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_GPIO (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0 (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_MASK (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_SHIFT (11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_ALT (0<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_GPIO (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1 (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_MASK (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_SHIFT (12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_ALT (0<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_GPIO (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2 (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_MASK (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_SHIFT (13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_ALT (0<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_GPIO (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3 (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_MASK (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_SHIFT (14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_ALT (0<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_GPIO (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_MASK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_SHIFT (15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_ALT (0<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_GPIO (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_MASK (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_SHIFT (16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_ALT (0<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_GPIO (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0 (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_MASK (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_SHIFT (17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_ALT (0<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_GPIO (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1 (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_MASK (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_SHIFT (18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_ALT (0<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_GPIO (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2 (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_MASK (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_SHIFT (19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_ALT (0<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_GPIO (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3 (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_MASK (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_SHIFT (20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_ALT (0<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_GPIO (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_MASK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_SHIFT (21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_ALT (0<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_GPIO (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0 (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_MASK (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_SHIFT (22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_ALT (0<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_GPIO (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_MASK (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_SHIFT (23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_ALT (0<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_GPIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_MASK (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_SHIFT (24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_ALT (0<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_GPIO (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_MASK (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_SHIFT (25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_ALT (0<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_GPIO (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_MASK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_SHIFT (26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_ALT (0<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_GPIO (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_MASK (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_SHIFT (27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_ALT (0<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_GPIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_MASK (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_SHIFT (28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_ALT (0<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_GPIO (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_MASK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_SHIFT (29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_ALT (0<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_GPIO (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_MASK (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_SHIFT (30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_ALT (0<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_GPIO (1<<30)
+#define CFG_REGS_BB_GPIO_MODE(n) (((n)&0x7FFFFFFF)<<0)
+#define CFG_REGS_BB_GPIO_MODE_MASK (0x7FFFFFFF<<0)
+#define CFG_REGS_BB_GPIO_MODE_SHIFT (0)
+
+//AP_GPIO_A_Mode
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1 (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4 (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9 (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10 (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11 (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12 (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13 (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14 (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15 (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_A_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_SHIFT (0)
+
+//AP_GPIO_B_Mode
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0 (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1 (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2 (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0 (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1 (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0 (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4 (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5 (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCLE (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFWEN (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWPN (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFREN (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFRB (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_B_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_SHIFT (0)
+
+//AP_GPIO_D_Mode
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_NFDQS (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_D_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_SHIFT (0)
+
+//Alt_mux_select
+#define CFG_REGS_LCD_MODE_MASK (3<<0)
+#define CFG_REGS_LCD_MODE_PARALLEL_16BIT (0<<0)
+#define CFG_REGS_LCD_MODE_DSI (1<<0)
+#define CFG_REGS_LCD_MODE_RGB_24BIT (2<<0)
+#define CFG_REGS_LCD_MODE_RGB_16BIT (3<<0)
+#define CFG_REGS_SPI_LCD_MASK (1<<2)
+#define CFG_REGS_SPI_LCD_NONE (0<<2)
+#define CFG_REGS_SPI_LCD_SPI_LCD (1<<2)
+#define CFG_REGS_CAM_I2C2_MASK (1<<3)
+#define CFG_REGS_CAM_I2C2_CAM (0<<3)
+#define CFG_REGS_CAM_I2C2_I2C2 (1<<3)
+#define CFG_REGS_CSI2_MASK (3<<4)
+#define CFG_REGS_CSI2_PARALLEL_CAM (0<<4)
+#define CFG_REGS_CSI2_CSI2 (1<<4)
+#define CFG_REGS_CSI2_SPI_CAM (2<<4)
+#define CFG_REGS_UART2_MASK (1<<6)
+#define CFG_REGS_UART2_HOST_UART (0<<6)
+#define CFG_REGS_UART2_UART2 (1<<6)
+#define CFG_REGS_UART1_8LINE_MASK (1<<7)
+#define CFG_REGS_UART1_8LINE_UART2 (0<<7)
+#define CFG_REGS_UART1_8LINE_UART1_8_LINE (1<<7)
+#define CFG_REGS_DAI_MASK (3<<8)
+#define CFG_REGS_DAI_I2S (0<<8)
+#define CFG_REGS_DAI_DAI (1<<8)
+#define CFG_REGS_DAI_DAI_SIMPLE (2<<8)
+#define CFG_REGS_KEYIN_3_MASK (1<<10)
+#define CFG_REGS_KEYIN_3_SPI2_CS_1 (0<<10)
+#define CFG_REGS_KEYIN_3_KEYIN_3 (1<<10)
+#define CFG_REGS_LPSCO_1_MASK (1<<11)
+#define CFG_REGS_LPSCO_1_KEYIN_4 (0<<11)
+#define CFG_REGS_LPSCO_1_LPSCO_1 (1<<11)
+#define CFG_REGS_SPI1_CS_2_MASK (1<<12)
+#define CFG_REGS_SPI1_CS_2_KEYIN_1 (0<<12)
+#define CFG_REGS_SPI1_CS_2_SPI1_CS_2 (1<<12)
+#define CFG_REGS_I2S_DI_2_MASK (1<<13)
+#define CFG_REGS_I2S_DI_2_KEYIN_2 (0<<13)
+#define CFG_REGS_I2S_DI_2_I2S_DI_2 (1<<13)
+#define CFG_REGS_TCO_0_MASK (1<<14)
+#define CFG_REGS_TCO_0_KEYOUT_0 (0<<14)
+#define CFG_REGS_TCO_0_TCO_0 (1<<14)
+#define CFG_REGS_TCO_1_MASK (1<<15)
+#define CFG_REGS_TCO_1_KEYOUT_1 (0<<15)
+#define CFG_REGS_TCO_1_TCO_1 (1<<15)
+#define CFG_REGS_TCO_2_MASK (1<<16)
+#define CFG_REGS_TCO_2_KEYOUT_2 (0<<16)
+#define CFG_REGS_TCO_2_TCO_2 (1<<16)
+#define CFG_REGS_KEYOUT_3_4_MASK (1<<17)
+#define CFG_REGS_KEYOUT_3_4_I2C3 (0<<17)
+#define CFG_REGS_KEYOUT_3_4_KEYOUT_3_4 (1<<17)
+#define CFG_REGS_KEYOUT_6_MASK (1<<18)
+#define CFG_REGS_KEYOUT_6_UART2_RTS (0<<18)
+#define CFG_REGS_KEYOUT_6_KEYOUT_6 (1<<18)
+#define CFG_REGS_KEYOUT_7_MASK (1<<19)
+#define CFG_REGS_KEYOUT_7_UART1_RTS (0<<19)
+#define CFG_REGS_KEYOUT_7_KEYOUT_7 (1<<19)
+#define CFG_REGS_GPO_0_MASK (3<<20)
+#define CFG_REGS_GPO_0_GPO_0 (0<<20)
+#define CFG_REGS_GPO_0_PWT (1<<20)
+#define CFG_REGS_GPO_0_KEYIN_5 (2<<20)
+#define CFG_REGS_GPO_1_MASK (3<<22)
+#define CFG_REGS_GPO_1_GPO_1 (0<<22)
+#define CFG_REGS_GPO_1_LPG (1<<22)
+#define CFG_REGS_GPO_1_KEYOUT_5 (2<<22)
+#define CFG_REGS_GPO_2_MASK (3<<24)
+#define CFG_REGS_GPO_2_GPO_2 (0<<24)
+#define CFG_REGS_GPO_2_PWL_1 (1<<24)
+#define CFG_REGS_GPO_2_CLK_32K (2<<24)
+#define CFG_REGS_GPO_3_MASK (1<<26)
+#define CFG_REGS_GPO_3_LCD_CS_1 (0<<26)
+#define CFG_REGS_GPO_3_GPO_3 (1<<26)
+#define CFG_REGS_GPO_4_MASK (1<<27)
+#define CFG_REGS_GPO_4_LCD_CS_0 (0<<27)
+#define CFG_REGS_GPO_4_GPO_4 (1<<27)
+#define CFG_REGS_CLK_OUT_MASK (1<<28)
+#define CFG_REGS_CLK_OUT_HST_CLK (0<<28)
+#define CFG_REGS_CLK_OUT_CLK_OUT (1<<28)
+#define CFG_REGS_DEBUG_MASK (1<<29)
+#define CFG_REGS_DEBUG_NONE (0<<29)
+#define CFG_REGS_DEBUG_DEBUG_MONITOR (1<<29)
+#define CFG_REGS_AP_SPI1_MASK (1<<30)
+#define CFG_REGS_AP_SPI1_BB_SPI1 (0<<30)
+#define CFG_REGS_AP_SPI1_AP_SPI1 (1<<30)
+#define CFG_REGS_RGB_CAM_MASK (1<<31)
+#define CFG_REGS_RGB_CAM_DISABLE (0<<31)
+#define CFG_REGS_RGB_CAM_ENABLE (1<<31)
+
+//IO_Drive1_Select
+#define CFG_REGS_DDR_DRIVE_MASK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_WEAK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_WEAK (6<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_STRONG (5<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_STRONG (4<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_WEAK (3<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_WEAK (2<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_STRONG (1<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_STRONG (0<<0)
+#define CFG_REGS_PSRAM1_DRIVE_MASK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_WEAK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_WEAK (6<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_STRONG (5<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_STRONG (4<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_WEAK (3<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_WEAK (2<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_STRONG (1<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_STRONG (0<<3)
+#define CFG_REGS_PSRAM2_DRIVE_MASK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_WEAK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_WEAK (6<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_STRONG (5<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_STRONG (4<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_WEAK (3<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_WEAK (2<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_STRONG (1<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_STRONG (0<<6)
+#define CFG_REGS_NFLSH_DRIVE_MASK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_WEAK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_WEAK (6<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_STRONG (5<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_STRONG (4<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_WEAK (3<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_WEAK (2<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_STRONG (1<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_STRONG (0<<9)
+#define CFG_REGS_LCD1_DRIVE_MASK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_WEAK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_WEAK (6<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_STRONG (5<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_STRONG (4<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_WEAK (3<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_WEAK (2<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_STRONG (1<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_STRONG (0<<12)
+#define CFG_REGS_LCD2_DRIVE_MASK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_WEAK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_WEAK (6<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_STRONG (5<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_STRONG (4<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_WEAK (3<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_WEAK (2<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_STRONG (1<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_STRONG (0<<15)
+#define CFG_REGS_SDAT1_DRIVE_MASK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_WEAK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_WEAK (6<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_STRONG (5<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_STRONG (4<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_WEAK (3<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_WEAK (2<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_STRONG (1<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_STRONG (0<<18)
+#define CFG_REGS_SDAT2_DRIVE_MASK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_WEAK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_WEAK (6<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_STRONG (5<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_STRONG (4<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_WEAK (3<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_WEAK (2<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_STRONG (1<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_STRONG (0<<21)
+#define CFG_REGS_CAM_DRIVE_MASK (3<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_STRONG (0<<24)
+#define CFG_REGS_CAM_DRIVE_STRONG (1<<24)
+#define CFG_REGS_CAM_DRIVE_WEAK (2<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_WEAK (3<<24)
+#define CFG_REGS_SIM1_DRIVE_MASK (3<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_STRONG (0<<26)
+#define CFG_REGS_SIM1_DRIVE_STRONG (1<<26)
+#define CFG_REGS_SIM1_DRIVE_WEAK (2<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_WEAK (3<<26)
+#define CFG_REGS_SIM2_DRIVE_MASK (3<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_STRONG (0<<28)
+#define CFG_REGS_SIM2_DRIVE_STRONG (1<<28)
+#define CFG_REGS_SIM2_DRIVE_WEAK (2<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_WEAK (3<<28)
+#define CFG_REGS_SIM3_DRIVE_MASK (3<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_STRONG (0<<30)
+#define CFG_REGS_SIM3_DRIVE_STRONG (1<<30)
+#define CFG_REGS_SIM3_DRIVE_WEAK (2<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_WEAK (3<<30)
+
+//IO_Drive2_Select
+#define CFG_REGS_GPIO_DRIVE_MASK (3<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_STRONG (0<<0)
+#define CFG_REGS_GPIO_DRIVE_STRONG (1<<0)
+#define CFG_REGS_GPIO_DRIVE_WEAK (2<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_WEAK (3<<0)
+#define CFG_REGS_CAM2_DRIVE_MASK (3<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_STRONG (0<<2)
+#define CFG_REGS_CAM2_DRIVE_STRONG (1<<2)
+#define CFG_REGS_CAM2_DRIVE_WEAK (2<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_WEAK (3<<2)
+
+//RAM_DRIVE
+#define CFG_REGS_MBRAM_A(n) (((n)&7)<<0)
+#define CFG_REGS_MBRAM_A_MASK (7<<0)
+#define CFG_REGS_MBRAM_A_SHIFT (0)
+#define CFG_REGS_MBRAM_W(n) (((n)&3)<<3)
+#define CFG_REGS_MBRAM_W_MASK (3<<3)
+#define CFG_REGS_MBRAM_W_SHIFT (3)
+#define CFG_REGS_MBRAM_R (1<<5)
+#define CFG_REGS_BBRAM_A(n) (((n)&7)<<6)
+#define CFG_REGS_BBRAM_A_MASK (7<<6)
+#define CFG_REGS_BBRAM_A_SHIFT (6)
+#define CFG_REGS_BBRAM_W(n) (((n)&3)<<9)
+#define CFG_REGS_BBRAM_W_MASK (3<<9)
+#define CFG_REGS_BBRAM_W_SHIFT (9)
+#define CFG_REGS_BBRAM_R (1<<11)
+#define CFG_REGS_XP_A(n) (((n)&7)<<12)
+#define CFG_REGS_XP_A_MASK (7<<12)
+#define CFG_REGS_XP_A_SHIFT (12)
+#define CFG_REGS_XP_W(n) (((n)&3)<<15)
+#define CFG_REGS_XP_W_MASK (3<<15)
+#define CFG_REGS_XP_W_SHIFT (15)
+#define CFG_REGS_XP_R (1<<17)
+#define CFG_REGS_BP_A(n) (((n)&7)<<18)
+#define CFG_REGS_BP_A_MASK (7<<18)
+#define CFG_REGS_BP_A_SHIFT (18)
+#define CFG_REGS_BP_W(n) (((n)&3)<<21)
+#define CFG_REGS_BP_W_MASK (3<<21)
+#define CFG_REGS_BP_W_SHIFT (21)
+#define CFG_REGS_BP_R (1<<23)
+#define CFG_REGS_EV_A(n) (((n)&7)<<24)
+#define CFG_REGS_EV_A_MASK (7<<24)
+#define CFG_REGS_EV_A_SHIFT (24)
+#define CFG_REGS_EV_W(n) (((n)&3)<<27)
+#define CFG_REGS_EV_W_MASK (3<<27)
+#define CFG_REGS_EV_W_SHIFT (27)
+#define CFG_REGS_EV_R (1<<29)
+
+//H2X_AP_Offset
+#define CFG_REGS_H2X_AP_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_AP_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_AP_OFFSET_SHIFT (0)
+
+//H2X_DDR_Offset
+#define CFG_REGS_H2X_DDR_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_SHIFT (0)
+
+//audio_pd_set
+#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+#define CFG_REGS_AU_REF_PD_N (1<<1)
+#define CFG_REGS_AU_MIC_PD_N (1<<2)
+#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+#define CFG_REGS_AU_AD_PD_N (1<<4)
+#define CFG_REGS_AU_DAC_PD_N (1<<5)
+#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_pd_clr
+//#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+//#define CFG_REGS_AU_REF_PD_N (1<<1)
+//#define CFG_REGS_AU_MIC_PD_N (1<<2)
+//#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+//#define CFG_REGS_AU_AD_PD_N (1<<4)
+//#define CFG_REGS_AU_DAC_PD_N (1<<5)
+//#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+//#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_sel_cfg
+#define CFG_REGS_AU_AUXMIC_SEL (1<<0)
+#define CFG_REGS_AU_SPK_SEL (1<<1)
+#define CFG_REGS_AU_SPK_MONO_SEL (1<<2)
+#define CFG_REGS_AU_RCV_SEL (1<<3)
+#define CFG_REGS_AU_HEAD_SEL (1<<4)
+
+//audio_mic_cfg
+#define CFG_REGS_AU_MIC_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_MIC_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_MIC_GAIN_SHIFT (0)
+#define CFG_REGS_AU_MIC_MUTE_N (1<<4)
+
+//audio_spk_cfg
+#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_SPK_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_SPK_GAIN_SHIFT (0)
+#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
+#define CFG_REGS_AU_SPK_VOC_GAIN_EN (1<<8)
+
+//audio_rcv_gain
+#define CFG_REGS_AU_RCV_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_RCV_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_RCV_GAIN_SHIFT (0)
+#define CFG_REGS_AU_RCV_VOC_GAIN_EN (1<<8)
+
+//audio_head_gain
+#define CFG_REGS_AU_HEAD_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_HEAD_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_HEAD_GAIN_SHIFT (0)
+#define CFG_REGS_AU_HEAD_VOC_GAIN_EN (1<<8)
+
+//TSC_DATA
+#define CFG_REGS_TSC_X_VALUE_BIT(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_MASK (0x3FF<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_SHIFT (0)
+#define CFG_REGS_TSC_X_VALUE_VALID (1<<10)
+#define CFG_REGS_TSC_Y_VALUE_BIT(n) (((n)&0x3FF)<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_MASK (0x3FF<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_SHIFT (11)
+#define CFG_REGS_TSC_Y_VALUE_VALID (1<<21)
+
+//GPADC_DATA_CH
+#define CFG_REGS_GPADC_DATA(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_GPADC_DATA_MASK (0x3FF<<0)
+#define CFG_REGS_GPADC_DATA_SHIFT (0)
+#define CFG_REGS_GPADC_VALID (1<<10)
+#define CFG_REGS_GPADC_CH_EN (1<<31)
+
+//Alt_mux_select2
+#define CFG_REGS_UART1_SDIO2_MASK (1<<0)
+#define CFG_REGS_UART1_SDIO2_SDIO2 (0<<0)
+#define CFG_REGS_UART1_SDIO2_UART1 (1<<0)
+#define CFG_REGS_JTAG_EN_MASK (1<<1)
+#define CFG_REGS_JTAG_EN_DISABLE (0<<1)
+#define CFG_REGS_JTAG_EN_ENABLE (1<<1)
+#define CFG_REGS_LCD_RGB_17_16_MASK (1<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_CS (0<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_DATA (1<<2)
+#define CFG_REGS_CSI2_2_MASK (3<<3)
+#define CFG_REGS_CSI2_2_PARALLEL_CAM (0<<3)
+#define CFG_REGS_CSI2_2_CSI2 (1<<3)
+#define CFG_REGS_CSI2_2_SPI_CAM (2<<3)
+#define CFG_REGS_RGB_CAM_2_MASK (1<<5)
+#define CFG_REGS_RGB_CAM_2_DISABLE (0<<5)
+#define CFG_REGS_RGB_CAM_2_ENABLE (1<<5)
+#define CFG_REGS_MAC_EN_MASK (1<<6)
+#define CFG_REGS_MAC_EN_DISABLE (0<<6)
+#define CFG_REGS_MAC_EN_ENABLE (1<<6)
+#define CFG_REGS_IOMUX_CFG_RESERVED(n) (((n)&0x1FFFFFF)<<7)
+
+//AP_GPIO_E_Mode
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7 (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_E_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_SHIFT (0)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810h.h b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810h.h
new file mode 100644
index 0000000000..e659daf337
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8810h.h
@@ -0,0 +1,1302 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2014, RDA Microelectronics.
+// All Rights Reserved
+//
+// This source code is the property of RDA Microelectronics and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA Microelectronics.
+//
+//==============================================================================
+//
+// THIS FILE WAS GENERATED FROM ITS CORRESPONDING XML VERSION WITH COOLXML.
+//
+// !!! PLEASE DO NOT EDIT !!!
+//
+// $HeadURL$
+// $Author$
+// $Date$
+// $Revision$
+//
+//==============================================================================
+//
+/// @file
+//
+//==============================================================================
+
+#ifndef _CFG_REGS_H_
+#define _CFG_REGS_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#ifdef CT_ASM
+#error "You are trying to use in an assembly code the normal H description of 'cfg_regs'."
+#endif
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define PROD_ID (0X810E)
+
+// ============================================================================
+// BB_GPIO_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// BB GPIO Map
+ BB_PIN_NONE_0 = 0x00000000,
+ BB_PIN_1 = 0x00000001,
+ BB_PIN_2 = 0x00000002,
+ BB_PIN_3 = 0x00000003,
+ BB_PIN_4 = 0x00000004,
+ BB_PIN_5 = 0x00000005,
+ BB_PIN_UART1_RXD = 0x00000006,
+ BB_PIN_UART2_RXD = 0x00000007,
+ BB_PIN_UART2_TXD = 0x00000008,
+ BB_PIN_SSD1_CLK = 0x00000009,
+ BB_PIN_SSD1_CMD = 0x0000000A,
+ BB_PIN_SDAT1_0 = 0x0000000B,
+ BB_PIN_SDAT1_1 = 0x0000000C,
+ BB_PIN_SDAT1_2 = 0x0000000D,
+ BB_PIN_SDAT1_3 = 0x0000000E,
+ BB_PIN_SSD2_CLK = 0x0000000F,
+ BB_PIN_SSD2_CMD = 0x00000010,
+ BB_PIN_SDAT2_0 = 0x00000011,
+ BB_PIN_SDAT2_1 = 0x00000012,
+ BB_PIN_SDAT2_2 = 0x00000013,
+ BB_PIN_SDAT2_3 = 0x00000014,
+ BB_PIN_SPI1_CLK = 0x00000015,
+ BB_PIN_SPI1_CS_0 = 0x00000016,
+ BB_PIN_SPI1_DIO = 0x00000017,
+ BB_PIN_SPI1_DI = 0x00000018,
+ BB_PIN_SIM2_RST = 0x00000019,
+ BB_PIN_SIM2_CLK = 0x0000001A,
+ BB_PIN_SIM2_DIO = 0x0000001B,
+ BB_PIN_SIM3_RST = 0x0000001C,
+ BB_PIN_SIM3_CLK = 0x0000001D,
+ BB_PIN_SIM3_DIO = 0x0000001E
+} BB_GPIO_MAPPING_T;
+
+#define BB_GPIO_NB (31)
+
+// ============================================================================
+// AP_GPIO_A_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO A Map
+ AP_PIN_I2C2_SCL = 0x00000000,
+ AP_PIN_I2C2_SDA = 0x00000001,
+ AP_PIN_SPI2_CLK = 0x00000002,
+ AP_PIN_SPI2_DIO = 0x00000003,
+ AP_PIN_SPI2_DI = 0x00000004,
+ AP_PIN_SPI2_CS_0 = 0x00000005,
+ AP_PIN_SPI2_CS_1 = 0x00000006,
+ AP_PIN_KEYIN_4 = 0x00000007,
+ AP_PIN_CLK_OUT = 0x00000008,
+ AP_PIN_I2S_BCK = 0x00000009,
+ AP_PIN_I2S_LRCK = 0x0000000A,
+ AP_PIN_I2S_DI_0 = 0x0000000B,
+ AP_PIN_I2S_DI_1 = 0x0000000C,
+ AP_PIN_I2S_DO = 0x0000000D,
+ AP_PIN_UART1_TXD = 0x0000000E,
+ AP_PIN_UART1_CTS = 0x0000000F,
+ AP_PIN_UART1_RTS = 0x00000010,
+ AP_PIN_SPI1_CS_1 = 0x00000011,
+ AP_PIN_LCD_DATA_6 = 0x00000012,
+ AP_PIN_LCD_DATA_7 = 0x00000013,
+ AP_PIN_LCD_WR = 0x00000014,
+ AP_PIN_LCD_RS = 0x00000015,
+ AP_PIN_LCD_RD = 0x00000016,
+ AP_PIN_LCD_FMARK = 0x00000017,
+ AP_PIN_LCD_DATA_8 = 0x00000018,
+ AP_PIN_LCD_DATA_9 = 0x00000019,
+ AP_PIN_LCD_DATA_10 = 0x0000001A,
+ AP_PIN_LCD_DATA_11 = 0x0000001B,
+ AP_PIN_LCD_DATA_12 = 0x0000001C,
+ AP_PIN_LCD_DATA_13 = 0x0000001D,
+ AP_PIN_LCD_DATA_14 = 0x0000001E,
+ AP_PIN_LCD_DATA_15 = 0x0000001F
+} AP_GPIO_A_MAPPING_T;
+
+#define AP_GPIO_A_NB (32)
+
+// ============================================================================
+// AP_GPIO_B_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO B Map
+ AP_PIN_KEYIN_0 = 0x00000000,
+ AP_PIN_KEYIN_1 = 0x00000001,
+ AP_PIN_KEYIN_2 = 0x00000002,
+ AP_PIN_KEYOUT_0 = 0x00000003,
+ AP_PIN_KEYOUT_1 = 0x00000004,
+ AP_PIN_KEYOUT_2 = 0x00000005,
+ AP_PIN_I2C3_SCL = 0x00000006,
+ AP_PIN_I2C3_SDA = 0x00000007,
+ AP_PIN_UART2_CTS = 0x00000008,
+ AP_PIN_UART2_RTS = 0x00000009,
+ AP_PIN_CAM_RST = 0x0000000A,
+ AP_PIN_CAM_PDN = 0x0000000B,
+ AP_PIN_CAM_CLK = 0x0000000C,
+ AP_PIN_CAM_VSYNC = 0x0000000D,
+ AP_PIN_CAM_HREF = 0x0000000E,
+ AP_PIN_CAM_PCLK = 0x0000000F,
+ AP_PIN_CAM_DATA_0 = 0x00000010,
+ AP_PIN_CAM_DATA_1 = 0x00000011,
+ AP_PIN_CAM_DATA_2 = 0x00000012,
+ AP_PIN_CAM_DATA_3 = 0x00000013,
+ AP_PIN_CAM_DATA_4 = 0x00000014,
+ AP_PIN_CAM_DATA_5 = 0x00000015,
+ AP_PIN_CAM_DATA_6 = 0x00000016,
+ AP_PIN_CAM_DATA_7 = 0x00000017,
+ AP_PIN_M_SPI_CS_0 = 0x00000018,
+ AP_PIN_NFCLE = 0x00000019,
+ AP_PIN_NFWEN = 0x0000001A,
+ AP_PIN_NFWPN = 0x0000001B,
+ AP_PIN_NFREN = 0x0000001C,
+ AP_PIN_NFRB = 0x0000001D,
+ AP_PIN_I2C1_SCL = 0x0000001E,
+ AP_PIN_I2C1_SDA = 0x0000001F
+} AP_GPIO_B_MAPPING_T;
+
+#define AP_GPIO_B_NB (32)
+
+// ============================================================================
+// AP_GPIO_D_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO D Map
+ AP_PIN_UART3_RXD = 0x00000000,
+ AP_PIN_UART3_TXD = 0x00000001,
+ AP_PIN_UART3_CTS = 0x00000002,
+ AP_PIN_UART3_RTS = 0x00000003,
+ AP_PIN_NFDQS = 0x00000004,
+ AP_PIN_VOLUME_DN = 0x00000005,
+ AP_PIN_VOLUME_UP = 0x00000006,
+ AP_PIN_PLUGIN = 0x00000007,
+ AP_PIN_NFCEN_1 = 0x00000008,
+ AP_PIN_NFCEN_2 = 0x00000009,
+ AP_PIN_NFCEN_3 = 0x0000000A,
+ AP_PIN_I2S2_BCK = 0x0000000B,
+ AP_PIN_I2S2_LRCK = 0x0000000C,
+ AP_PIN_I2S2_DI_0 = 0x0000000D,
+ AP_PIN_I2S2_DI_1 = 0x0000000E,
+ AP_PIN_I2S2_DO = 0x0000000F
+} AP_GPIO_D_MAPPING_T;
+
+#define AP_GPIO_D_NB (16)
+
+// ============================================================================
+// AP_GPIO_E_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO E Map
+ AP_PIN_I2CBB_SCL = 0x00000000,
+ AP_PIN_I2CBB_SDA = 0x00000001,
+ AP_PIN_CAM2_RST = 0x00000002,
+ AP_PIN_CAM2_PDN = 0x00000003,
+ AP_PIN_CAM2_CLK = 0x00000004,
+ AP_PIN_CAM2_VSYNC = 0x00000005,
+ AP_PIN_CAM2_HREF = 0x00000006,
+ AP_PIN_CAM2_PCLK = 0x00000007,
+ AP_PIN_CAM2_DATA_0 = 0x00000008,
+ AP_PIN_CAM2_DATA_1 = 0x00000009,
+ AP_PIN_CAM2_DATA_2 = 0x0000000A,
+ AP_PIN_CAM2_DATA_3 = 0x0000000B,
+ AP_PIN_CAM2_DATA_4 = 0x0000000C,
+ AP_PIN_CAM2_DATA_5 = 0x0000000D,
+ AP_PIN_CAM2_DATA_6 = 0x0000000E,
+ AP_PIN_CAM2_DATA_7 = 0x0000000F
+} AP_GPIO_E_MAPPING_T;
+
+#define AP_GPIO_E_NB (16)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// CFG_REGS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+#define REG_CONFIG_REGS_BASE 0x01A09000
+
+typedef volatile struct
+{
+ REG32 CHIP_ID; //0x00000000
+ /// This register contain the synthesis date and version
+ REG32 Build_Version; //0x00000004
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 BB_GPIO_Mode; //0x00000008
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_A_Mode; //0x0000000C
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_B_Mode; //0x00000010
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_D_Mode; //0x00000014
+ REG32 Alt_mux_select; //0x00000018
+ REG32 IO_Drive1_Select; //0x0000001C
+ REG32 IO_Drive2_Select; //0x00000020
+ REG32 RAM_DRIVE; //0x00000024
+ REG32 H2X_AP_Offset; //0x00000028
+ REG32 H2X_DDR_Offset; //0x0000002C
+ REG32 audio_pd_set; //0x00000030
+ REG32 audio_pd_clr; //0x00000034
+ REG32 audio_sel_cfg; //0x00000038
+ REG32 audio_mic_cfg; //0x0000003C
+ REG32 audio_spk_cfg; //0x00000040
+ REG32 audio_rcv_gain; //0x00000044
+ REG32 audio_head_gain; //0x00000048
+ REG32 TSC_DATA; //0x0000004C
+ REG32 GPADC_DATA_CH[8]; //0x00000050
+ REG32 Alt_mux_select2; //0x00000070
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_E_Mode; //0x00000074
+} HWP_CFG_REGS_T;
+
+#define hwp_configRegs ((HWP_CFG_REGS_T*) (RDA_CFG_REGS_BASE))
+
+
+//CHIP_ID
+#define CFG_REGS_METAL_ID(n) (((n)&0xFFF)<<0)
+#define CFG_REGS_METAL_ID_MASK (0xFFF<<0)
+#define CFG_REGS_METAL_ID_SHIFT (0)
+#define CFG_REGS_BOND_ID(n) (((n)&7)<<12)
+#define CFG_REGS_BOND_ID_MASK (7<<12)
+#define CFG_REGS_BOND_ID_SHIFT (12)
+#define CFG_REGS_PROD_ID(n) (((n)&0xFFFF)<<16)
+#define CFG_REGS_PROD_ID_MASK (0xFFFF<<16)
+#define CFG_REGS_PROD_ID_SHIFT (16)
+
+//Build_Version
+#define CFG_REGS_MAJOR(n) (((n)&15)<<28)
+#define CFG_REGS_YEAR(n) (((n)&15)<<24)
+#define CFG_REGS_MONTH(n) (((n)&0xFF)<<16)
+#define CFG_REGS_DAY(n) (((n)&0xFF)<<8)
+#define CFG_REGS_BUILD_STYLE_FPGA (0<<4)
+#define CFG_REGS_BUILD_STYLE_CHIP (1<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_USB (2<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_GSM (3<<4)
+#define CFG_REGS_BUILD_REVISION(n) (((n)&15)<<0)
+
+//BB_GPIO_Mode
+#define CFG_REGS_MODE_BB_PIN_NONE_0 (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_MASK (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_SHIFT (0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_ALT (0<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_GPIO (1<<0)
+#define CFG_REGS_MODE_BB_PIN_1 (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_SHIFT (1)
+#define CFG_REGS_MODE_BB_PIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_BB_PIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_BB_PIN_2 (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_SHIFT (2)
+#define CFG_REGS_MODE_BB_PIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_BB_PIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_BB_PIN_3 (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_MASK (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_SHIFT (3)
+#define CFG_REGS_MODE_BB_PIN_3_ALT (0<<3)
+#define CFG_REGS_MODE_BB_PIN_3_GPIO (1<<3)
+#define CFG_REGS_MODE_BB_PIN_4 (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_MASK (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_SHIFT (4)
+#define CFG_REGS_MODE_BB_PIN_4_ALT (0<<4)
+#define CFG_REGS_MODE_BB_PIN_4_GPIO (1<<4)
+#define CFG_REGS_MODE_BB_PIN_5 (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_MASK (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_SHIFT (5)
+#define CFG_REGS_MODE_BB_PIN_5_ALT (0<<5)
+#define CFG_REGS_MODE_BB_PIN_5_GPIO (1<<5)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_MASK (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_SHIFT (6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_ALT (0<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_GPIO (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_MASK (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_SHIFT (7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_ALT (0<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_GPIO (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_MASK (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_SHIFT (8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_ALT (0<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_GPIO (1<<8)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_MASK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_SHIFT (9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_ALT (0<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_GPIO (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_MASK (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_SHIFT (10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_ALT (0<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_GPIO (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0 (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_MASK (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_SHIFT (11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_ALT (0<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_GPIO (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1 (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_MASK (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_SHIFT (12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_ALT (0<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_GPIO (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2 (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_MASK (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_SHIFT (13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_ALT (0<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_GPIO (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3 (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_MASK (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_SHIFT (14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_ALT (0<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_GPIO (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_MASK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_SHIFT (15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_ALT (0<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_GPIO (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_MASK (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_SHIFT (16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_ALT (0<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_GPIO (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0 (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_MASK (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_SHIFT (17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_ALT (0<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_GPIO (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1 (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_MASK (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_SHIFT (18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_ALT (0<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_GPIO (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2 (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_MASK (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_SHIFT (19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_ALT (0<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_GPIO (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3 (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_MASK (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_SHIFT (20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_ALT (0<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_GPIO (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_MASK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_SHIFT (21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_ALT (0<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_GPIO (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0 (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_MASK (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_SHIFT (22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_ALT (0<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_GPIO (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_MASK (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_SHIFT (23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_ALT (0<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_GPIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_MASK (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_SHIFT (24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_ALT (0<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_GPIO (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_MASK (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_SHIFT (25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_ALT (0<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_GPIO (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_MASK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_SHIFT (26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_ALT (0<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_GPIO (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_MASK (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_SHIFT (27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_ALT (0<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_GPIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_MASK (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_SHIFT (28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_ALT (0<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_GPIO (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_MASK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_SHIFT (29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_ALT (0<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_GPIO (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_MASK (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_SHIFT (30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_ALT (0<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_GPIO (1<<30)
+#define CFG_REGS_BB_GPIO_MODE(n) (((n)&0x7FFFFFFF)<<0)
+#define CFG_REGS_BB_GPIO_MODE_MASK (0x7FFFFFFF<<0)
+#define CFG_REGS_BB_GPIO_MODE_SHIFT (0)
+
+//AP_GPIO_A_Mode
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1 (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4 (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9 (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10 (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11 (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12 (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13 (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14 (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15 (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_A_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_SHIFT (0)
+
+//AP_GPIO_B_Mode
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0 (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1 (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2 (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0 (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1 (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0 (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4 (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5 (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCLE (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFWEN (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWPN (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFREN (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFRB (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_B_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_SHIFT (0)
+
+//AP_GPIO_D_Mode
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_NFDQS (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_D_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_SHIFT (0)
+
+//Alt_mux_select
+#define CFG_REGS_LCD_MODE_MASK (3<<0)
+#define CFG_REGS_LCD_MODE_PARALLEL_16BIT (0<<0)
+#define CFG_REGS_LCD_MODE_DSI (1<<0)
+#define CFG_REGS_LCD_MODE_RGB_24BIT (2<<0)
+#define CFG_REGS_LCD_MODE_RGB_16BIT (3<<0)
+#define CFG_REGS_SPI_LCD_MASK (1<<2)
+#define CFG_REGS_SPI_LCD_NONE (0<<2)
+#define CFG_REGS_SPI_LCD_SPI_LCD (1<<2)
+#define CFG_REGS_CAM_I2C2_MASK (1<<3)
+#define CFG_REGS_CAM_I2C2_CAM (0<<3)
+#define CFG_REGS_CAM_I2C2_I2C2 (1<<3)
+#define CFG_REGS_CSI2_MASK (3<<4)
+#define CFG_REGS_CSI2_PARALLEL_CAM (0<<4)
+#define CFG_REGS_CSI2_CSI2 (1<<4)
+#define CFG_REGS_CSI2_SPI_CAM (2<<4)
+#define CFG_REGS_UART2_MASK (1<<6)
+#define CFG_REGS_UART2_HOST_UART (0<<6)
+#define CFG_REGS_UART2_UART2 (1<<6)
+#define CFG_REGS_UART1_8LINE_MASK (1<<7)
+#define CFG_REGS_UART1_8LINE_UART2 (0<<7)
+#define CFG_REGS_UART1_8LINE_UART1_8_LINE (1<<7)
+#define CFG_REGS_DAI_MASK (3<<8)
+#define CFG_REGS_DAI_I2S (0<<8)
+#define CFG_REGS_DAI_DAI (1<<8)
+#define CFG_REGS_DAI_DAI_SIMPLE (2<<8)
+#define CFG_REGS_KEYIN_3_MASK (1<<10)
+#define CFG_REGS_KEYIN_3_SPI2_CS_1 (0<<10)
+#define CFG_REGS_KEYIN_3_KEYIN_3 (1<<10)
+#define CFG_REGS_LPSCO_1_MASK (1<<11)
+#define CFG_REGS_LPSCO_1_KEYIN_4 (0<<11)
+#define CFG_REGS_LPSCO_1_LPSCO_1 (1<<11)
+#define CFG_REGS_SPI1_CS_2_MASK (1<<12)
+#define CFG_REGS_SPI1_CS_2_KEYIN_1 (0<<12)
+#define CFG_REGS_SPI1_CS_2_SPI1_CS_2 (1<<12)
+#define CFG_REGS_I2S_DI_2_MASK (1<<13)
+#define CFG_REGS_I2S_DI_2_KEYIN_2 (0<<13)
+#define CFG_REGS_I2S_DI_2_I2S_DI_2 (1<<13)
+#define CFG_REGS_TCO_0_MASK (1<<14)
+#define CFG_REGS_TCO_0_KEYOUT_0 (0<<14)
+#define CFG_REGS_TCO_0_TCO_0 (1<<14)
+#define CFG_REGS_TCO_1_MASK (1<<15)
+#define CFG_REGS_TCO_1_KEYOUT_1 (0<<15)
+#define CFG_REGS_TCO_1_TCO_1 (1<<15)
+#define CFG_REGS_TCO_2_MASK (1<<16)
+#define CFG_REGS_TCO_2_KEYOUT_2 (0<<16)
+#define CFG_REGS_TCO_2_TCO_2 (1<<16)
+#define CFG_REGS_KEYOUT_3_4_MASK (1<<17)
+#define CFG_REGS_KEYOUT_3_4_I2C3 (0<<17)
+#define CFG_REGS_KEYOUT_3_4_KEYOUT_3_4 (1<<17)
+#define CFG_REGS_KEYOUT_6_MASK (1<<18)
+#define CFG_REGS_KEYOUT_6_UART2_RTS (0<<18)
+#define CFG_REGS_KEYOUT_6_KEYOUT_6 (1<<18)
+#define CFG_REGS_KEYOUT_7_MASK (1<<19)
+#define CFG_REGS_KEYOUT_7_UART1_RTS (0<<19)
+#define CFG_REGS_KEYOUT_7_KEYOUT_7 (1<<19)
+#define CFG_REGS_GPO_0_MASK (3<<20)
+#define CFG_REGS_GPO_0_GPO_0 (0<<20)
+#define CFG_REGS_GPO_0_PWT (1<<20)
+#define CFG_REGS_GPO_0_KEYIN_5 (2<<20)
+#define CFG_REGS_GPO_1_MASK (3<<22)
+#define CFG_REGS_GPO_1_GPO_1 (0<<22)
+#define CFG_REGS_GPO_1_LPG (1<<22)
+#define CFG_REGS_GPO_1_KEYOUT_5 (2<<22)
+#define CFG_REGS_GPO_2_MASK (3<<24)
+#define CFG_REGS_GPO_2_GPO_2 (0<<24)
+#define CFG_REGS_GPO_2_PWL_1 (1<<24)
+#define CFG_REGS_GPO_2_CLK_32K (2<<24)
+#define CFG_REGS_GPO_3_MASK (1<<26)
+#define CFG_REGS_GPO_3_LCD_CS_1 (0<<26)
+#define CFG_REGS_GPO_3_GPO_3 (1<<26)
+#define CFG_REGS_GPO_4_MASK (1<<27)
+#define CFG_REGS_GPO_4_LCD_CS_0 (0<<27)
+#define CFG_REGS_GPO_4_GPO_4 (1<<27)
+#define CFG_REGS_CLK_OUT_MASK (1<<28)
+#define CFG_REGS_CLK_OUT_HST_CLK (0<<28)
+#define CFG_REGS_CLK_OUT_CLK_OUT (1<<28)
+#define CFG_REGS_DEBUG_MASK (1<<29)
+#define CFG_REGS_DEBUG_NONE (0<<29)
+#define CFG_REGS_DEBUG_DEBUG_MONITOR (1<<29)
+#define CFG_REGS_AP_SPI1_MASK (1<<30)
+#define CFG_REGS_AP_SPI1_BB_SPI1 (0<<30)
+#define CFG_REGS_AP_SPI1_AP_SPI1 (1<<30)
+#define CFG_REGS_RGB_CAM_MASK (1<<31)
+#define CFG_REGS_RGB_CAM_DISABLE (0<<31)
+#define CFG_REGS_RGB_CAM_ENABLE (1<<31)
+
+//IO_Drive1_Select
+#define CFG_REGS_DDR_DRIVE_MASK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_WEAK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_WEAK (6<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_STRONG (5<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_STRONG (4<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_WEAK (3<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_WEAK (2<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_STRONG (1<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_STRONG (0<<0)
+#define CFG_REGS_PSRAM1_DRIVE_MASK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_WEAK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_WEAK (6<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_STRONG (5<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_STRONG (4<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_WEAK (3<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_WEAK (2<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_STRONG (1<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_STRONG (0<<3)
+#define CFG_REGS_PSRAM2_DRIVE_MASK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_WEAK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_WEAK (6<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_STRONG (5<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_STRONG (4<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_WEAK (3<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_WEAK (2<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_STRONG (1<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_STRONG (0<<6)
+#define CFG_REGS_NFLSH_DRIVE_MASK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_WEAK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_WEAK (6<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_STRONG (5<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_STRONG (4<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_WEAK (3<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_WEAK (2<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_STRONG (1<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_STRONG (0<<9)
+#define CFG_REGS_LCD1_DRIVE_MASK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_WEAK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_WEAK (6<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_STRONG (5<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_STRONG (4<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_WEAK (3<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_WEAK (2<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_STRONG (1<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_STRONG (0<<12)
+#define CFG_REGS_LCD2_DRIVE_MASK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_WEAK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_WEAK (6<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_STRONG (5<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_STRONG (4<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_WEAK (3<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_WEAK (2<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_STRONG (1<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_STRONG (0<<15)
+#define CFG_REGS_SDAT1_DRIVE_MASK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_WEAK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_WEAK (6<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_STRONG (5<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_STRONG (4<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_WEAK (3<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_WEAK (2<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_STRONG (1<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_STRONG (0<<18)
+#define CFG_REGS_SDAT2_DRIVE_MASK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_WEAK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_WEAK (6<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_STRONG (5<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_STRONG (4<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_WEAK (3<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_WEAK (2<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_STRONG (1<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_STRONG (0<<21)
+#define CFG_REGS_CAM_DRIVE_MASK (3<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_STRONG (0<<24)
+#define CFG_REGS_CAM_DRIVE_STRONG (1<<24)
+#define CFG_REGS_CAM_DRIVE_WEAK (2<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_WEAK (3<<24)
+#define CFG_REGS_SIM1_DRIVE_MASK (3<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_STRONG (0<<26)
+#define CFG_REGS_SIM1_DRIVE_STRONG (1<<26)
+#define CFG_REGS_SIM1_DRIVE_WEAK (2<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_WEAK (3<<26)
+#define CFG_REGS_SIM2_DRIVE_MASK (3<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_STRONG (0<<28)
+#define CFG_REGS_SIM2_DRIVE_STRONG (1<<28)
+#define CFG_REGS_SIM2_DRIVE_WEAK (2<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_WEAK (3<<28)
+#define CFG_REGS_SIM3_DRIVE_MASK (3<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_STRONG (0<<30)
+#define CFG_REGS_SIM3_DRIVE_STRONG (1<<30)
+#define CFG_REGS_SIM3_DRIVE_WEAK (2<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_WEAK (3<<30)
+
+//IO_Drive2_Select
+#define CFG_REGS_GPIO_DRIVE_MASK (3<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_STRONG (0<<0)
+#define CFG_REGS_GPIO_DRIVE_STRONG (1<<0)
+#define CFG_REGS_GPIO_DRIVE_WEAK (2<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_WEAK (3<<0)
+#define CFG_REGS_CAM2_DRIVE_MASK (3<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_STRONG (0<<2)
+#define CFG_REGS_CAM2_DRIVE_STRONG (1<<2)
+#define CFG_REGS_CAM2_DRIVE_WEAK (2<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_WEAK (3<<2)
+
+//RAM_DRIVE
+#define CFG_REGS_MBRAM_A(n) (((n)&7)<<0)
+#define CFG_REGS_MBRAM_A_MASK (7<<0)
+#define CFG_REGS_MBRAM_A_SHIFT (0)
+#define CFG_REGS_MBRAM_W(n) (((n)&3)<<3)
+#define CFG_REGS_MBRAM_W_MASK (3<<3)
+#define CFG_REGS_MBRAM_W_SHIFT (3)
+#define CFG_REGS_MBRAM_R (1<<5)
+#define CFG_REGS_BBRAM_A(n) (((n)&7)<<6)
+#define CFG_REGS_BBRAM_A_MASK (7<<6)
+#define CFG_REGS_BBRAM_A_SHIFT (6)
+#define CFG_REGS_BBRAM_W(n) (((n)&3)<<9)
+#define CFG_REGS_BBRAM_W_MASK (3<<9)
+#define CFG_REGS_BBRAM_W_SHIFT (9)
+#define CFG_REGS_BBRAM_R (1<<11)
+#define CFG_REGS_XP_A(n) (((n)&7)<<12)
+#define CFG_REGS_XP_A_MASK (7<<12)
+#define CFG_REGS_XP_A_SHIFT (12)
+#define CFG_REGS_XP_W(n) (((n)&3)<<15)
+#define CFG_REGS_XP_W_MASK (3<<15)
+#define CFG_REGS_XP_W_SHIFT (15)
+#define CFG_REGS_XP_R (1<<17)
+#define CFG_REGS_BP_A(n) (((n)&7)<<18)
+#define CFG_REGS_BP_A_MASK (7<<18)
+#define CFG_REGS_BP_A_SHIFT (18)
+#define CFG_REGS_BP_W(n) (((n)&3)<<21)
+#define CFG_REGS_BP_W_MASK (3<<21)
+#define CFG_REGS_BP_W_SHIFT (21)
+#define CFG_REGS_BP_R (1<<23)
+#define CFG_REGS_EV_A(n) (((n)&7)<<24)
+#define CFG_REGS_EV_A_MASK (7<<24)
+#define CFG_REGS_EV_A_SHIFT (24)
+#define CFG_REGS_EV_W(n) (((n)&3)<<27)
+#define CFG_REGS_EV_W_MASK (3<<27)
+#define CFG_REGS_EV_W_SHIFT (27)
+#define CFG_REGS_EV_R (1<<29)
+
+//H2X_AP_Offset
+#define CFG_REGS_H2X_AP_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_AP_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_AP_OFFSET_SHIFT (0)
+
+//H2X_DDR_Offset
+#define CFG_REGS_H2X_DDR_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_SHIFT (0)
+
+//audio_pd_set
+#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+#define CFG_REGS_AU_REF_PD_N (1<<1)
+#define CFG_REGS_AU_MIC_PD_N (1<<2)
+#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+#define CFG_REGS_AU_AD_PD_N (1<<4)
+#define CFG_REGS_AU_DAC_PD_N (1<<5)
+#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_pd_clr
+//#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+//#define CFG_REGS_AU_REF_PD_N (1<<1)
+//#define CFG_REGS_AU_MIC_PD_N (1<<2)
+//#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+//#define CFG_REGS_AU_AD_PD_N (1<<4)
+//#define CFG_REGS_AU_DAC_PD_N (1<<5)
+//#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+//#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_sel_cfg
+#define CFG_REGS_AU_AUXMIC_SEL (1<<0)
+#define CFG_REGS_AU_SPK_SEL (1<<1)
+#define CFG_REGS_AU_SPK_MONO_SEL (1<<2)
+#define CFG_REGS_AU_RCV_SEL (1<<3)
+#define CFG_REGS_AU_HEAD_SEL (1<<4)
+
+//audio_mic_cfg
+#define CFG_REGS_AU_MIC_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_MIC_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_MIC_GAIN_SHIFT (0)
+#define CFG_REGS_AU_MIC_MUTE_N (1<<4)
+
+//audio_spk_cfg
+#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_SPK_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_SPK_GAIN_SHIFT (0)
+#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
+#define CFG_REGS_AU_SPK_VOC_GAIN_EN (1<<8)
+
+//audio_rcv_gain
+#define CFG_REGS_AU_RCV_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_RCV_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_RCV_GAIN_SHIFT (0)
+#define CFG_REGS_AU_RCV_VOC_GAIN_EN (1<<8)
+
+//audio_head_gain
+#define CFG_REGS_AU_HEAD_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_HEAD_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_HEAD_GAIN_SHIFT (0)
+#define CFG_REGS_AU_HEAD_VOC_GAIN_EN (1<<8)
+
+//TSC_DATA
+#define CFG_REGS_TSC_X_VALUE_BIT(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_MASK (0x3FF<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_SHIFT (0)
+#define CFG_REGS_TSC_X_VALUE_VALID (1<<10)
+#define CFG_REGS_TSC_Y_VALUE_BIT(n) (((n)&0x3FF)<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_MASK (0x3FF<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_SHIFT (11)
+#define CFG_REGS_TSC_Y_VALUE_VALID (1<<21)
+
+//GPADC_DATA_CH
+#define CFG_REGS_GPADC_DATA(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_GPADC_DATA_MASK (0x3FF<<0)
+#define CFG_REGS_GPADC_DATA_SHIFT (0)
+#define CFG_REGS_GPADC_VALID (1<<10)
+#define CFG_REGS_GPADC_CH_EN (1<<31)
+
+//Alt_mux_select2
+#define CFG_REGS_UART1_SDIO2_MASK (1<<0)
+#define CFG_REGS_UART1_SDIO2_SDIO2 (0<<0)
+#define CFG_REGS_UART1_SDIO2_UART1 (1<<0)
+#define CFG_REGS_JTAG_EN_MASK (1<<1)
+#define CFG_REGS_JTAG_EN_DISABLE (0<<1)
+#define CFG_REGS_JTAG_EN_ENABLE (1<<1)
+#define CFG_REGS_LCD_RGB_17_16_MASK (1<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_CS (0<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_DATA (1<<2)
+#define CFG_REGS_CSI2_2_MASK (3<<3)
+#define CFG_REGS_CSI2_2_PARALLEL_CAM (0<<3)
+#define CFG_REGS_CSI2_2_CSI2 (1<<3)
+#define CFG_REGS_CSI2_2_SPI_CAM (2<<3)
+#define CFG_REGS_RGB_CAM_2_MASK (1<<5)
+#define CFG_REGS_RGB_CAM_2_DISABLE (0<<5)
+#define CFG_REGS_RGB_CAM_2_ENABLE (1<<5)
+#define CFG_REGS_MAC_EN_MASK (1<<6)
+#define CFG_REGS_MAC_EN_DISABLE (0<<6)
+#define CFG_REGS_MAC_EN_ENABLE (1<<6)
+#define CFG_REGS_IOMUX_CFG_RESERVED(n) (((n)&0x1FFFFFF)<<7)
+
+//AP_GPIO_E_Mode
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7 (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_E_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_SHIFT (0)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8820.h b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8820.h
new file mode 100644
index 0000000000..3ff671b6fd
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8820.h
@@ -0,0 +1,1300 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2014, RDA Microelectronics.
+// All Rights Reserved
+//
+// This source code is the property of RDA Microelectronics and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA Microelectronics.
+//
+//==============================================================================
+//
+// THIS FILE WAS GENERATED FROM ITS CORRESPONDING XML VERSION WITH COOLXML.
+//
+// !!! PLEASE DO NOT EDIT !!!
+//
+// $HeadURL$
+// $Author$
+// $Date$
+// $Revision$
+//
+//==============================================================================
+//
+/// @file
+//
+//==============================================================================
+
+#ifndef _CFG_REGS_H_
+#define _CFG_REGS_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#ifdef CT_ASM
+#error "You are trying to use in an assembly code the normal H description of 'cfg_regs'."
+#endif
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define PROD_ID (0X810E)
+
+// ============================================================================
+// BB_GPIO_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// BB GPIO Map
+ BB_PIN_NONE_0 = 0x00000000,
+ BB_PIN_1 = 0x00000001,
+ BB_PIN_2 = 0x00000002,
+ BB_PIN_3 = 0x00000003,
+ BB_PIN_4 = 0x00000004,
+ BB_PIN_5 = 0x00000005,
+ BB_PIN_UART1_RXD = 0x00000006,
+ BB_PIN_UART2_RXD = 0x00000007,
+ BB_PIN_UART2_TXD = 0x00000008,
+ BB_PIN_SSD1_CLK = 0x00000009,
+ BB_PIN_SSD1_CMD = 0x0000000A,
+ BB_PIN_SDAT1_0 = 0x0000000B,
+ BB_PIN_SDAT1_1 = 0x0000000C,
+ BB_PIN_SDAT1_2 = 0x0000000D,
+ BB_PIN_SDAT1_3 = 0x0000000E,
+ BB_PIN_SSD2_CLK = 0x0000000F,
+ BB_PIN_SSD2_CMD = 0x00000010,
+ BB_PIN_SDAT2_0 = 0x00000011,
+ BB_PIN_SDAT2_1 = 0x00000012,
+ BB_PIN_SDAT2_2 = 0x00000013,
+ BB_PIN_SDAT2_3 = 0x00000014,
+ BB_PIN_SPI1_CLK = 0x00000015,
+ BB_PIN_SPI1_CS_0 = 0x00000016,
+ BB_PIN_SPI1_DIO = 0x00000017,
+ BB_PIN_SPI1_DI = 0x00000018,
+ BB_PIN_SIM2_RST = 0x00000019,
+ BB_PIN_SIM2_CLK = 0x0000001A,
+ BB_PIN_SIM2_DIO = 0x0000001B,
+ BB_PIN_SIM3_RST = 0x0000001C,
+ BB_PIN_SIM3_CLK = 0x0000001D,
+ BB_PIN_SIM3_DIO = 0x0000001E
+} BB_GPIO_MAPPING_T;
+
+#define BB_GPIO_NB (31)
+
+// ============================================================================
+// AP_GPIO_A_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO A Map
+ AP_PIN_I2C2_SCL = 0x00000000,
+ AP_PIN_I2C2_SDA = 0x00000001,
+ AP_PIN_SPI2_CLK = 0x00000002,
+ AP_PIN_SPI2_DIO = 0x00000003,
+ AP_PIN_SPI2_DI = 0x00000004,
+ AP_PIN_SPI2_CS_0 = 0x00000005,
+ AP_PIN_SPI2_CS_1 = 0x00000006,
+ AP_PIN_KEYIN_4 = 0x00000007,
+ AP_PIN_CLK_OUT = 0x00000008,
+ AP_PIN_I2S_BCK = 0x00000009,
+ AP_PIN_I2S_LRCK = 0x0000000A,
+ AP_PIN_I2S_DI_0 = 0x0000000B,
+ AP_PIN_I2S_DI_1 = 0x0000000C,
+ AP_PIN_I2S_DO = 0x0000000D,
+ AP_PIN_UART1_TXD = 0x0000000E,
+ AP_PIN_UART1_CTS = 0x0000000F,
+ AP_PIN_UART1_RTS = 0x00000010,
+ AP_PIN_SPI1_CS_1 = 0x00000011,
+ AP_PIN_LCD_DATA_6 = 0x00000012,
+ AP_PIN_LCD_DATA_7 = 0x00000013,
+ AP_PIN_LCD_WR = 0x00000014,
+ AP_PIN_LCD_RS = 0x00000015,
+ AP_PIN_LCD_RD = 0x00000016,
+ AP_PIN_LCD_FMARK = 0x00000017,
+ AP_PIN_LCD_DATA_8 = 0x00000018,
+ AP_PIN_LCD_DATA_9 = 0x00000019,
+ AP_PIN_LCD_DATA_10 = 0x0000001A,
+ AP_PIN_LCD_DATA_11 = 0x0000001B,
+ AP_PIN_LCD_DATA_12 = 0x0000001C,
+ AP_PIN_LCD_DATA_13 = 0x0000001D,
+ AP_PIN_LCD_DATA_14 = 0x0000001E,
+ AP_PIN_LCD_DATA_15 = 0x0000001F
+} AP_GPIO_A_MAPPING_T;
+
+#define AP_GPIO_A_NB (32)
+
+// ============================================================================
+// AP_GPIO_B_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO B Map
+ AP_PIN_KEYIN_0 = 0x00000000,
+ AP_PIN_KEYIN_1 = 0x00000001,
+ AP_PIN_KEYIN_2 = 0x00000002,
+ AP_PIN_KEYOUT_0 = 0x00000003,
+ AP_PIN_KEYOUT_1 = 0x00000004,
+ AP_PIN_KEYOUT_2 = 0x00000005,
+ AP_PIN_I2C3_SCL = 0x00000006,
+ AP_PIN_I2C3_SDA = 0x00000007,
+ AP_PIN_UART2_CTS = 0x00000008,
+ AP_PIN_UART2_RTS = 0x00000009,
+ AP_PIN_CAM_RST = 0x0000000A,
+ AP_PIN_CAM_PDN = 0x0000000B,
+ AP_PIN_CAM_CLK = 0x0000000C,
+ AP_PIN_CAM_VSYNC = 0x0000000D,
+ AP_PIN_CAM_HREF = 0x0000000E,
+ AP_PIN_CAM_PCLK = 0x0000000F,
+ AP_PIN_CAM_DATA_0 = 0x00000010,
+ AP_PIN_CAM_DATA_1 = 0x00000011,
+ AP_PIN_CAM_DATA_2 = 0x00000012,
+ AP_PIN_CAM_DATA_3 = 0x00000013,
+ AP_PIN_CAM_DATA_4 = 0x00000014,
+ AP_PIN_CAM_DATA_5 = 0x00000015,
+ AP_PIN_CAM_DATA_6 = 0x00000016,
+ AP_PIN_CAM_DATA_7 = 0x00000017,
+ AP_PIN_M_SPI_CS_0 = 0x00000018,
+ AP_PIN_NFCLE = 0x00000019,
+ AP_PIN_NFWEN = 0x0000001A,
+ AP_PIN_NFWPN = 0x0000001B,
+ AP_PIN_NFREN = 0x0000001C,
+ AP_PIN_NFRB = 0x0000001D,
+ AP_PIN_I2C1_SCL = 0x0000001E,
+ AP_PIN_I2C1_SDA = 0x0000001F
+} AP_GPIO_B_MAPPING_T;
+
+#define AP_GPIO_B_NB (32)
+
+// ============================================================================
+// AP_GPIO_D_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO D Map
+ AP_PIN_UART3_RXD = 0x00000000,
+ AP_PIN_UART3_TXD = 0x00000001,
+ AP_PIN_UART3_CTS = 0x00000002,
+ AP_PIN_UART3_RTS = 0x00000003,
+ AP_PIN_NFDQS = 0x00000004,
+ AP_PIN_VOLUME_DN = 0x00000005,
+ AP_PIN_VOLUME_UP = 0x00000006,
+ AP_PIN_PLUGIN = 0x00000007,
+ AP_PIN_NFCEN_1 = 0x00000008,
+ AP_PIN_NFCEN_2 = 0x00000009,
+ AP_PIN_NFCEN_3 = 0x0000000A,
+ AP_PIN_I2S2_BCK = 0x0000000B,
+ AP_PIN_I2S2_LRCK = 0x0000000C,
+ AP_PIN_I2S2_DI_0 = 0x0000000D,
+ AP_PIN_I2S2_DI_1 = 0x0000000E,
+ AP_PIN_I2S2_DO = 0x0000000F
+} AP_GPIO_D_MAPPING_T;
+
+#define AP_GPIO_D_NB (16)
+
+// ============================================================================
+// AP_GPIO_E_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO E Map
+ AP_PIN_I2CBB_SCL = 0x00000000,
+ AP_PIN_I2CBB_SDA = 0x00000001,
+ AP_PIN_CAM2_RST = 0x00000002,
+ AP_PIN_CAM2_PDN = 0x00000003,
+ AP_PIN_CAM2_CLK = 0x00000004,
+ AP_PIN_CAM2_VSYNC = 0x00000005,
+ AP_PIN_CAM2_HREF = 0x00000006,
+ AP_PIN_CAM2_PCLK = 0x00000007,
+ AP_PIN_CAM2_DATA_0 = 0x00000008,
+ AP_PIN_CAM2_DATA_1 = 0x00000009,
+ AP_PIN_CAM2_DATA_2 = 0x0000000A,
+ AP_PIN_CAM2_DATA_3 = 0x0000000B,
+ AP_PIN_CAM2_DATA_4 = 0x0000000C,
+ AP_PIN_CAM2_DATA_5 = 0x0000000D,
+ AP_PIN_CAM2_DATA_6 = 0x0000000E,
+ AP_PIN_CAM2_DATA_7 = 0x0000000F
+} AP_GPIO_E_MAPPING_T;
+
+#define AP_GPIO_E_NB (16)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// CFG_REGS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 CHIP_ID; //0x00000000
+ /// This register contain the synthesis date and version
+ REG32 Build_Version; //0x00000004
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 BB_GPIO_Mode; //0x00000008
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_A_Mode; //0x0000000C
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_B_Mode; //0x00000010
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_D_Mode; //0x00000014
+ REG32 Alt_mux_select; //0x00000018
+ REG32 IO_Drive1_Select; //0x0000001C
+ REG32 IO_Drive2_Select; //0x00000020
+ REG32 RAM_DRIVE; //0x00000024
+ REG32 H2X_AP_Offset; //0x00000028
+ REG32 H2X_DDR_Offset; //0x0000002C
+ REG32 audio_pd_set; //0x00000030
+ REG32 audio_pd_clr; //0x00000034
+ REG32 audio_sel_cfg; //0x00000038
+ REG32 audio_mic_cfg; //0x0000003C
+ REG32 audio_spk_cfg; //0x00000040
+ REG32 audio_rcv_gain; //0x00000044
+ REG32 audio_head_gain; //0x00000048
+ REG32 TSC_DATA; //0x0000004C
+ REG32 GPADC_DATA_CH[8]; //0x00000050
+ REG32 Alt_mux_select2; //0x00000070
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_E_Mode; //0x00000074
+} HWP_CFG_REGS_T;
+
+#define hwp_configRegs ((HWP_CFG_REGS_T*)(RDA_CFG_REGS_BASE))
+
+
+//CHIP_ID
+#define CFG_REGS_METAL_ID(n) (((n)&0xFFF)<<0)
+#define CFG_REGS_METAL_ID_MASK (0xFFF<<0)
+#define CFG_REGS_METAL_ID_SHIFT (0)
+#define CFG_REGS_BOND_ID(n) (((n)&7)<<12)
+#define CFG_REGS_BOND_ID_MASK (7<<12)
+#define CFG_REGS_BOND_ID_SHIFT (12)
+#define CFG_REGS_PROD_ID(n) (((n)&0xFFFF)<<16)
+#define CFG_REGS_PROD_ID_MASK (0xFFFF<<16)
+#define CFG_REGS_PROD_ID_SHIFT (16)
+
+//Build_Version
+#define CFG_REGS_MAJOR(n) (((n)&15)<<28)
+#define CFG_REGS_YEAR(n) (((n)&15)<<24)
+#define CFG_REGS_MONTH(n) (((n)&0xFF)<<16)
+#define CFG_REGS_DAY(n) (((n)&0xFF)<<8)
+#define CFG_REGS_BUILD_STYLE_FPGA (0<<4)
+#define CFG_REGS_BUILD_STYLE_CHIP (1<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_USB (2<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_GSM (3<<4)
+#define CFG_REGS_BUILD_REVISION(n) (((n)&15)<<0)
+
+//BB_GPIO_Mode
+#define CFG_REGS_MODE_BB_PIN_NONE_0 (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_MASK (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_SHIFT (0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_ALT (0<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_GPIO (1<<0)
+#define CFG_REGS_MODE_BB_PIN_1 (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_SHIFT (1)
+#define CFG_REGS_MODE_BB_PIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_BB_PIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_BB_PIN_2 (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_SHIFT (2)
+#define CFG_REGS_MODE_BB_PIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_BB_PIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_BB_PIN_3 (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_MASK (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_SHIFT (3)
+#define CFG_REGS_MODE_BB_PIN_3_ALT (0<<3)
+#define CFG_REGS_MODE_BB_PIN_3_GPIO (1<<3)
+#define CFG_REGS_MODE_BB_PIN_4 (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_MASK (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_SHIFT (4)
+#define CFG_REGS_MODE_BB_PIN_4_ALT (0<<4)
+#define CFG_REGS_MODE_BB_PIN_4_GPIO (1<<4)
+#define CFG_REGS_MODE_BB_PIN_5 (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_MASK (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_SHIFT (5)
+#define CFG_REGS_MODE_BB_PIN_5_ALT (0<<5)
+#define CFG_REGS_MODE_BB_PIN_5_GPIO (1<<5)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_MASK (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_SHIFT (6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_ALT (0<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_GPIO (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_MASK (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_SHIFT (7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_ALT (0<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_GPIO (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_MASK (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_SHIFT (8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_ALT (0<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_GPIO (1<<8)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_MASK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_SHIFT (9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_ALT (0<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_GPIO (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_MASK (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_SHIFT (10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_ALT (0<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_GPIO (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0 (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_MASK (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_SHIFT (11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_ALT (0<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_GPIO (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1 (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_MASK (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_SHIFT (12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_ALT (0<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_GPIO (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2 (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_MASK (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_SHIFT (13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_ALT (0<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_GPIO (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3 (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_MASK (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_SHIFT (14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_ALT (0<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_GPIO (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_MASK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_SHIFT (15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_ALT (0<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_GPIO (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_MASK (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_SHIFT (16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_ALT (0<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_GPIO (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0 (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_MASK (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_SHIFT (17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_ALT (0<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_GPIO (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1 (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_MASK (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_SHIFT (18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_ALT (0<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_GPIO (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2 (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_MASK (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_SHIFT (19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_ALT (0<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_GPIO (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3 (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_MASK (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_SHIFT (20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_ALT (0<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_GPIO (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_MASK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_SHIFT (21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_ALT (0<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_GPIO (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0 (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_MASK (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_SHIFT (22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_ALT (0<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_GPIO (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_MASK (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_SHIFT (23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_ALT (0<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_GPIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_MASK (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_SHIFT (24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_ALT (0<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_GPIO (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_MASK (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_SHIFT (25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_ALT (0<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_GPIO (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_MASK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_SHIFT (26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_ALT (0<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_GPIO (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_MASK (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_SHIFT (27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_ALT (0<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_GPIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_MASK (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_SHIFT (28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_ALT (0<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_GPIO (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_MASK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_SHIFT (29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_ALT (0<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_GPIO (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_MASK (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_SHIFT (30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_ALT (0<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_GPIO (1<<30)
+#define CFG_REGS_BB_GPIO_MODE(n) (((n)&0x7FFFFFFF)<<0)
+#define CFG_REGS_BB_GPIO_MODE_MASK (0x7FFFFFFF<<0)
+#define CFG_REGS_BB_GPIO_MODE_SHIFT (0)
+
+//AP_GPIO_A_Mode
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1 (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4 (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9 (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10 (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11 (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12 (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13 (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14 (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15 (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_A_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_SHIFT (0)
+
+//AP_GPIO_B_Mode
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0 (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1 (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2 (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0 (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1 (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0 (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4 (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5 (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCLE (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFWEN (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWPN (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFREN (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFRB (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_B_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_SHIFT (0)
+
+//AP_GPIO_D_Mode
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_NFDQS (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_D_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_SHIFT (0)
+
+//Alt_mux_select
+#define CFG_REGS_LCD_MODE_MASK (3<<0)
+#define CFG_REGS_LCD_MODE_PARALLEL_16BIT (0<<0)
+#define CFG_REGS_LCD_MODE_DSI (1<<0)
+#define CFG_REGS_LCD_MODE_RGB_24BIT (2<<0)
+#define CFG_REGS_LCD_MODE_RGB_16BIT (3<<0)
+#define CFG_REGS_SPI_LCD_MASK (1<<2)
+#define CFG_REGS_SPI_LCD_NONE (0<<2)
+#define CFG_REGS_SPI_LCD_SPI_LCD (1<<2)
+#define CFG_REGS_CAM_I2C2_MASK (1<<3)
+#define CFG_REGS_CAM_I2C2_CAM (0<<3)
+#define CFG_REGS_CAM_I2C2_I2C2 (1<<3)
+#define CFG_REGS_CSI2_MASK (3<<4)
+#define CFG_REGS_CSI2_PARALLEL_CAM (0<<4)
+#define CFG_REGS_CSI2_CSI2 (1<<4)
+#define CFG_REGS_CSI2_SPI_CAM (2<<4)
+#define CFG_REGS_UART2_MASK (1<<6)
+#define CFG_REGS_UART2_HOST_UART (0<<6)
+#define CFG_REGS_UART2_UART2 (1<<6)
+#define CFG_REGS_UART1_8LINE_MASK (1<<7)
+#define CFG_REGS_UART1_8LINE_UART2 (0<<7)
+#define CFG_REGS_UART1_8LINE_UART1_8_LINE (1<<7)
+#define CFG_REGS_DAI_MASK (3<<8)
+#define CFG_REGS_DAI_I2S (0<<8)
+#define CFG_REGS_DAI_DAI (1<<8)
+#define CFG_REGS_DAI_DAI_SIMPLE (2<<8)
+#define CFG_REGS_KEYIN_3_MASK (1<<10)
+#define CFG_REGS_KEYIN_3_SPI2_CS_1 (0<<10)
+#define CFG_REGS_KEYIN_3_KEYIN_3 (1<<10)
+#define CFG_REGS_LPSCO_1_MASK (1<<11)
+#define CFG_REGS_LPSCO_1_KEYIN_4 (0<<11)
+#define CFG_REGS_LPSCO_1_LPSCO_1 (1<<11)
+#define CFG_REGS_SPI1_CS_2_MASK (1<<12)
+#define CFG_REGS_SPI1_CS_2_KEYIN_1 (0<<12)
+#define CFG_REGS_SPI1_CS_2_SPI1_CS_2 (1<<12)
+#define CFG_REGS_I2S_DI_2_MASK (1<<13)
+#define CFG_REGS_I2S_DI_2_KEYIN_2 (0<<13)
+#define CFG_REGS_I2S_DI_2_I2S_DI_2 (1<<13)
+#define CFG_REGS_TCO_0_MASK (1<<14)
+#define CFG_REGS_TCO_0_KEYOUT_0 (0<<14)
+#define CFG_REGS_TCO_0_TCO_0 (1<<14)
+#define CFG_REGS_TCO_1_MASK (1<<15)
+#define CFG_REGS_TCO_1_KEYOUT_1 (0<<15)
+#define CFG_REGS_TCO_1_TCO_1 (1<<15)
+#define CFG_REGS_TCO_2_MASK (1<<16)
+#define CFG_REGS_TCO_2_KEYOUT_2 (0<<16)
+#define CFG_REGS_TCO_2_TCO_2 (1<<16)
+#define CFG_REGS_KEYOUT_3_4_MASK (1<<17)
+#define CFG_REGS_KEYOUT_3_4_I2C3 (0<<17)
+#define CFG_REGS_KEYOUT_3_4_KEYOUT_3_4 (1<<17)
+#define CFG_REGS_KEYOUT_6_MASK (1<<18)
+#define CFG_REGS_KEYOUT_6_UART2_RTS (0<<18)
+#define CFG_REGS_KEYOUT_6_KEYOUT_6 (1<<18)
+#define CFG_REGS_KEYOUT_7_MASK (1<<19)
+#define CFG_REGS_KEYOUT_7_UART1_RTS (0<<19)
+#define CFG_REGS_KEYOUT_7_KEYOUT_7 (1<<19)
+#define CFG_REGS_GPO_0_MASK (3<<20)
+#define CFG_REGS_GPO_0_GPO_0 (0<<20)
+#define CFG_REGS_GPO_0_PWT (1<<20)
+#define CFG_REGS_GPO_0_KEYIN_5 (2<<20)
+#define CFG_REGS_GPO_1_MASK (3<<22)
+#define CFG_REGS_GPO_1_GPO_1 (0<<22)
+#define CFG_REGS_GPO_1_LPG (1<<22)
+#define CFG_REGS_GPO_1_KEYOUT_5 (2<<22)
+#define CFG_REGS_GPO_2_MASK (3<<24)
+#define CFG_REGS_GPO_2_GPO_2 (0<<24)
+#define CFG_REGS_GPO_2_PWL_1 (1<<24)
+#define CFG_REGS_GPO_2_CLK_32K (2<<24)
+#define CFG_REGS_GPO_3_MASK (1<<26)
+#define CFG_REGS_GPO_3_LCD_CS_1 (0<<26)
+#define CFG_REGS_GPO_3_GPO_3 (1<<26)
+#define CFG_REGS_GPO_4_MASK (1<<27)
+#define CFG_REGS_GPO_4_LCD_CS_0 (0<<27)
+#define CFG_REGS_GPO_4_GPO_4 (1<<27)
+#define CFG_REGS_CLK_OUT_MASK (1<<28)
+#define CFG_REGS_CLK_OUT_HST_CLK (0<<28)
+#define CFG_REGS_CLK_OUT_CLK_OUT (1<<28)
+#define CFG_REGS_DEBUG_MASK (1<<29)
+#define CFG_REGS_DEBUG_NONE (0<<29)
+#define CFG_REGS_DEBUG_DEBUG_MONITOR (1<<29)
+#define CFG_REGS_AP_SPI1_MASK (1<<30)
+#define CFG_REGS_AP_SPI1_BB_SPI1 (0<<30)
+#define CFG_REGS_AP_SPI1_AP_SPI1 (1<<30)
+#define CFG_REGS_RGB_CAM_MASK (1<<31)
+#define CFG_REGS_RGB_CAM_DISABLE (0<<31)
+#define CFG_REGS_RGB_CAM_ENABLE (1<<31)
+
+//IO_Drive1_Select
+#define CFG_REGS_DDR_DRIVE_MASK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_WEAK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_WEAK (6<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_STRONG (5<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_STRONG (4<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_WEAK (3<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_WEAK (2<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_STRONG (1<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_STRONG (0<<0)
+#define CFG_REGS_PSRAM1_DRIVE_MASK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_WEAK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_WEAK (6<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_STRONG (5<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_STRONG (4<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_WEAK (3<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_WEAK (2<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_STRONG (1<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_STRONG (0<<3)
+#define CFG_REGS_PSRAM2_DRIVE_MASK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_WEAK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_WEAK (6<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_STRONG (5<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_STRONG (4<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_WEAK (3<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_WEAK (2<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_STRONG (1<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_STRONG (0<<6)
+#define CFG_REGS_NFLSH_DRIVE_MASK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_WEAK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_WEAK (6<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_STRONG (5<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_STRONG (4<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_WEAK (3<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_WEAK (2<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_STRONG (1<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_STRONG (0<<9)
+#define CFG_REGS_LCD1_DRIVE_MASK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_WEAK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_WEAK (6<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_STRONG (5<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_STRONG (4<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_WEAK (3<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_WEAK (2<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_STRONG (1<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_STRONG (0<<12)
+#define CFG_REGS_LCD2_DRIVE_MASK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_WEAK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_WEAK (6<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_STRONG (5<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_STRONG (4<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_WEAK (3<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_WEAK (2<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_STRONG (1<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_STRONG (0<<15)
+#define CFG_REGS_SDAT1_DRIVE_MASK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_WEAK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_WEAK (6<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_STRONG (5<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_STRONG (4<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_WEAK (3<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_WEAK (2<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_STRONG (1<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_STRONG (0<<18)
+#define CFG_REGS_SDAT2_DRIVE_MASK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_WEAK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_WEAK (6<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_STRONG (5<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_STRONG (4<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_WEAK (3<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_WEAK (2<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_STRONG (1<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_STRONG (0<<21)
+#define CFG_REGS_CAM_DRIVE_MASK (3<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_STRONG (0<<24)
+#define CFG_REGS_CAM_DRIVE_STRONG (1<<24)
+#define CFG_REGS_CAM_DRIVE_WEAK (2<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_WEAK (3<<24)
+#define CFG_REGS_SIM1_DRIVE_MASK (3<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_STRONG (0<<26)
+#define CFG_REGS_SIM1_DRIVE_STRONG (1<<26)
+#define CFG_REGS_SIM1_DRIVE_WEAK (2<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_WEAK (3<<26)
+#define CFG_REGS_SIM2_DRIVE_MASK (3<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_STRONG (0<<28)
+#define CFG_REGS_SIM2_DRIVE_STRONG (1<<28)
+#define CFG_REGS_SIM2_DRIVE_WEAK (2<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_WEAK (3<<28)
+#define CFG_REGS_SIM3_DRIVE_MASK (3<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_STRONG (0<<30)
+#define CFG_REGS_SIM3_DRIVE_STRONG (1<<30)
+#define CFG_REGS_SIM3_DRIVE_WEAK (2<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_WEAK (3<<30)
+
+//IO_Drive2_Select
+#define CFG_REGS_GPIO_DRIVE_MASK (3<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_STRONG (0<<0)
+#define CFG_REGS_GPIO_DRIVE_STRONG (1<<0)
+#define CFG_REGS_GPIO_DRIVE_WEAK (2<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_WEAK (3<<0)
+#define CFG_REGS_CAM2_DRIVE_MASK (3<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_STRONG (0<<2)
+#define CFG_REGS_CAM2_DRIVE_STRONG (1<<2)
+#define CFG_REGS_CAM2_DRIVE_WEAK (2<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_WEAK (3<<2)
+
+//RAM_DRIVE
+#define CFG_REGS_MBRAM_A(n) (((n)&7)<<0)
+#define CFG_REGS_MBRAM_A_MASK (7<<0)
+#define CFG_REGS_MBRAM_A_SHIFT (0)
+#define CFG_REGS_MBRAM_W(n) (((n)&3)<<3)
+#define CFG_REGS_MBRAM_W_MASK (3<<3)
+#define CFG_REGS_MBRAM_W_SHIFT (3)
+#define CFG_REGS_MBRAM_R (1<<5)
+#define CFG_REGS_BBRAM_A(n) (((n)&7)<<6)
+#define CFG_REGS_BBRAM_A_MASK (7<<6)
+#define CFG_REGS_BBRAM_A_SHIFT (6)
+#define CFG_REGS_BBRAM_W(n) (((n)&3)<<9)
+#define CFG_REGS_BBRAM_W_MASK (3<<9)
+#define CFG_REGS_BBRAM_W_SHIFT (9)
+#define CFG_REGS_BBRAM_R (1<<11)
+#define CFG_REGS_XP_A(n) (((n)&7)<<12)
+#define CFG_REGS_XP_A_MASK (7<<12)
+#define CFG_REGS_XP_A_SHIFT (12)
+#define CFG_REGS_XP_W(n) (((n)&3)<<15)
+#define CFG_REGS_XP_W_MASK (3<<15)
+#define CFG_REGS_XP_W_SHIFT (15)
+#define CFG_REGS_XP_R (1<<17)
+#define CFG_REGS_BP_A(n) (((n)&7)<<18)
+#define CFG_REGS_BP_A_MASK (7<<18)
+#define CFG_REGS_BP_A_SHIFT (18)
+#define CFG_REGS_BP_W(n) (((n)&3)<<21)
+#define CFG_REGS_BP_W_MASK (3<<21)
+#define CFG_REGS_BP_W_SHIFT (21)
+#define CFG_REGS_BP_R (1<<23)
+#define CFG_REGS_EV_A(n) (((n)&7)<<24)
+#define CFG_REGS_EV_A_MASK (7<<24)
+#define CFG_REGS_EV_A_SHIFT (24)
+#define CFG_REGS_EV_W(n) (((n)&3)<<27)
+#define CFG_REGS_EV_W_MASK (3<<27)
+#define CFG_REGS_EV_W_SHIFT (27)
+#define CFG_REGS_EV_R (1<<29)
+
+//H2X_AP_Offset
+#define CFG_REGS_H2X_AP_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_AP_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_AP_OFFSET_SHIFT (0)
+
+//H2X_DDR_Offset
+#define CFG_REGS_H2X_DDR_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_DDR_OFFSET_SHIFT (0)
+
+//audio_pd_set
+#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+#define CFG_REGS_AU_REF_PD_N (1<<1)
+#define CFG_REGS_AU_MIC_PD_N (1<<2)
+#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+#define CFG_REGS_AU_AD_PD_N (1<<4)
+#define CFG_REGS_AU_DAC_PD_N (1<<5)
+#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_pd_clr
+//#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+//#define CFG_REGS_AU_REF_PD_N (1<<1)
+//#define CFG_REGS_AU_MIC_PD_N (1<<2)
+//#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+//#define CFG_REGS_AU_AD_PD_N (1<<4)
+//#define CFG_REGS_AU_DAC_PD_N (1<<5)
+//#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+//#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_sel_cfg
+#define CFG_REGS_AU_AUXMIC_SEL (1<<0)
+#define CFG_REGS_AU_SPK_SEL (1<<1)
+#define CFG_REGS_AU_SPK_MONO_SEL (1<<2)
+#define CFG_REGS_AU_RCV_SEL (1<<3)
+#define CFG_REGS_AU_HEAD_SEL (1<<4)
+
+//audio_mic_cfg
+#define CFG_REGS_AU_MIC_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_MIC_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_MIC_GAIN_SHIFT (0)
+#define CFG_REGS_AU_MIC_MUTE_N (1<<4)
+
+//audio_spk_cfg
+#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_SPK_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_SPK_GAIN_SHIFT (0)
+#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
+#define CFG_REGS_AU_SPK_VOC_GAIN_EN (1<<8)
+
+//audio_rcv_gain
+#define CFG_REGS_AU_RCV_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_RCV_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_RCV_GAIN_SHIFT (0)
+#define CFG_REGS_AU_RCV_VOC_GAIN_EN (1<<8)
+
+//audio_head_gain
+#define CFG_REGS_AU_HEAD_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_HEAD_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_HEAD_GAIN_SHIFT (0)
+#define CFG_REGS_AU_HEAD_VOC_GAIN_EN (1<<8)
+
+//TSC_DATA
+#define CFG_REGS_TSC_X_VALUE_BIT(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_MASK (0x3FF<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_SHIFT (0)
+#define CFG_REGS_TSC_X_VALUE_VALID (1<<10)
+#define CFG_REGS_TSC_Y_VALUE_BIT(n) (((n)&0x3FF)<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_MASK (0x3FF<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_SHIFT (11)
+#define CFG_REGS_TSC_Y_VALUE_VALID (1<<21)
+
+//GPADC_DATA_CH
+#define CFG_REGS_GPADC_DATA(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_GPADC_DATA_MASK (0x3FF<<0)
+#define CFG_REGS_GPADC_DATA_SHIFT (0)
+#define CFG_REGS_GPADC_VALID (1<<10)
+#define CFG_REGS_GPADC_CH_EN (1<<31)
+
+//Alt_mux_select2
+#define CFG_REGS_UART1_SDIO2_MASK (1<<0)
+#define CFG_REGS_UART1_SDIO2_SDIO2 (0<<0)
+#define CFG_REGS_UART1_SDIO2_UART1 (1<<0)
+#define CFG_REGS_JTAG_EN_MASK (1<<1)
+#define CFG_REGS_JTAG_EN_DISABLE (0<<1)
+#define CFG_REGS_JTAG_EN_ENABLE (1<<1)
+#define CFG_REGS_LCD_RGB_17_16_MASK (1<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_CS (0<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_DATA (1<<2)
+#define CFG_REGS_CSI2_2_MASK (3<<3)
+#define CFG_REGS_CSI2_2_PARALLEL_CAM (0<<3)
+#define CFG_REGS_CSI2_2_CSI2 (1<<3)
+#define CFG_REGS_CSI2_2_SPI_CAM (2<<3)
+#define CFG_REGS_RGB_CAM_2_MASK (1<<5)
+#define CFG_REGS_RGB_CAM_2_DISABLE (0<<5)
+#define CFG_REGS_RGB_CAM_2_ENABLE (1<<5)
+#define CFG_REGS_MAC_EN_MASK (1<<6)
+#define CFG_REGS_MAC_EN_DISABLE (0<<6)
+#define CFG_REGS_MAC_EN_ENABLE (1<<6)
+#define CFG_REGS_IOMUX_CFG_RESERVED(n) (((n)&0x1FFFFFF)<<7)
+
+//AP_GPIO_E_Mode
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7 (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_E_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_SHIFT (0)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850.h b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850.h
new file mode 100644
index 0000000000..046c2e872b
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850.h
@@ -0,0 +1,1254 @@
+#ifndef _CFG_REGS_H_
+#define _CFG_REGS_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#ifdef CT_ASM
+#error "You are trying to use in an assembly code the normal H description of 'cfg_regs'."
+#endif
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define PROD_ID (0X8850)
+
+// ============================================================================
+// BB_GPIO_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// BB GPIO Map
+ BB_PIN_NONE_0 = 0x00000000,
+ BB_PIN_1 = 0x00000001,
+ BB_PIN_2 = 0x00000002,
+ BB_PIN_3 = 0x00000003,
+ BB_PIN_4 = 0x00000004,
+ BB_PIN_5 = 0x00000005,
+ BB_PIN_UART1_RXD = 0x00000006,
+ BB_PIN_UART2_RXD = 0x00000007,
+ BB_PIN_UART2_TXD = 0x00000008,
+ BB_PIN_SSD1_CLK = 0x00000009,
+ BB_PIN_SSD1_CMD = 0x0000000A,
+ BB_PIN_SDAT1_0 = 0x0000000B,
+ BB_PIN_SDAT1_1 = 0x0000000C,
+ BB_PIN_SDAT1_2 = 0x0000000D,
+ BB_PIN_SDAT1_3 = 0x0000000E,
+ BB_PIN_SSD2_CLK = 0x0000000F,
+ BB_PIN_SSD2_CMD = 0x00000010,
+ BB_PIN_SDAT2_0 = 0x00000011,
+ BB_PIN_SDAT2_1 = 0x00000012,
+ BB_PIN_SDAT2_2 = 0x00000013,
+ BB_PIN_SDAT2_3 = 0x00000014,
+ BB_PIN_SPI1_CLK = 0x00000015,
+ BB_PIN_SPI1_CS_0 = 0x00000016,
+ BB_PIN_SPI1_DIO = 0x00000017,
+ BB_PIN_SPI1_DI = 0x00000018,
+ BB_PIN_SIM2_RST = 0x00000019,
+ BB_PIN_SIM2_CLK = 0x0000001A,
+ BB_PIN_SIM2_DIO = 0x0000001B,
+ BB_PIN_SIM3_RST = 0x0000001C,
+ BB_PIN_SIM3_CLK = 0x0000001D,
+ BB_PIN_SIM3_DIO = 0x0000001E
+} BB_GPIO_MAPPING_T;
+
+#define BB_GPIO_NB (31)
+
+// ============================================================================
+// AP_GPIO_A_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO A Map
+ AP_PIN_I2C2_SCL = 0x00000000,
+ AP_PIN_I2C2_SDA = 0x00000001,
+ AP_PIN_SPI2_CLK = 0x00000002,
+ AP_PIN_SPI2_DIO = 0x00000003,
+ AP_PIN_SPI2_DI = 0x00000004,
+ AP_PIN_SPI2_CS_0 = 0x00000005,
+ AP_PIN_SPI2_CS_1 = 0x00000006,
+ AP_PIN_KEYIN_4 = 0x00000007,
+ AP_PIN_CLK_OUT = 0x00000008,
+ AP_PIN_I2S_BCK = 0x00000009,
+ AP_PIN_I2S_LRCK = 0x0000000A,
+ AP_PIN_I2S_DI_0 = 0x0000000B,
+ AP_PIN_I2S_DI_1 = 0x0000000C,
+ AP_PIN_I2S_DO = 0x0000000D,
+ AP_PIN_UART1_TXD = 0x0000000E,
+ AP_PIN_UART1_CTS = 0x0000000F,
+ AP_PIN_UART1_RTS = 0x00000010,
+ AP_PIN_SPI1_CS_1 = 0x00000011,
+ AP_PIN_LCD_WR = 0x00000012,
+ AP_PIN_LCD_RS = 0x00000013,
+ AP_PIN_LCD_RD = 0x00000014,
+ AP_PIN_LCD_FMARK = 0x00000015,
+ AP_PIN_LCD_DATA_6 = 0x00000016,
+ AP_PIN_LCD_DATA_7 = 0x00000017,
+ AP_PIN_LCD_DATA_8 = 0x00000018,
+ AP_PIN_LCD_DATA_9 = 0x00000019,
+ AP_PIN_LCD_DATA_10 = 0x0000001A,
+ AP_PIN_LCD_DATA_11 = 0x0000001B,
+ AP_PIN_LCD_DATA_12 = 0x0000001C,
+ AP_PIN_LCD_DATA_13 = 0x0000001D,
+ AP_PIN_LCD_DATA_14 = 0x0000001E,
+ AP_PIN_LCD_DATA_15 = 0x0000001F
+} AP_GPIO_A_MAPPING_T;
+
+#define AP_GPIO_A_NB (32)
+
+// ============================================================================
+// AP_GPIO_B_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO B Map
+ AP_PIN_KEYIN_0 = 0x00000000,
+ AP_PIN_KEYIN_1 = 0x00000001,
+ AP_PIN_KEYIN_2 = 0x00000002,
+ AP_PIN_KEYOUT_0 = 0x00000003,
+ AP_PIN_KEYOUT_1 = 0x00000004,
+ AP_PIN_KEYOUT_2 = 0x00000005,
+ AP_PIN_I2C3_SCL = 0x00000006,
+ AP_PIN_I2C3_SDA = 0x00000007,
+ AP_PIN_UART2_CTS = 0x00000008,
+ AP_PIN_UART2_RTS = 0x00000009,
+ AP_PIN_CAM_RST = 0x0000000A,
+ AP_PIN_CAM_PDN = 0x0000000B,
+ AP_PIN_CAM_CLK = 0x0000000C,
+ AP_PIN_CAM_VSYNC = 0x0000000D,
+ AP_PIN_CAM_HREF = 0x0000000E,
+ AP_PIN_CAM_PCLK = 0x0000000F,
+ AP_PIN_CAM_DATA_0 = 0x00000010,
+ AP_PIN_CAM_DATA_1 = 0x00000011,
+ AP_PIN_CAM_DATA_2 = 0x00000012,
+ AP_PIN_CAM_DATA_3 = 0x00000013,
+ AP_PIN_CAM_DATA_4 = 0x00000014,
+ AP_PIN_CAM_DATA_5 = 0x00000015,
+ AP_PIN_CAM_DATA_6 = 0x00000016,
+ AP_PIN_CAM_DATA_7 = 0x00000017,
+ AP_PIN_M_SPI_CS_0 = 0x00000018,
+ AP_PIN_NFCLE = 0x00000019,
+ AP_PIN_NFWEN = 0x0000001A,
+ AP_PIN_NFWPN = 0x0000001B,
+ AP_PIN_NFREN = 0x0000001C,
+ AP_PIN_NFRB = 0x0000001D,
+ AP_PIN_I2C1_SCL = 0x0000001E,
+ AP_PIN_I2C1_SDA = 0x0000001F
+} AP_GPIO_B_MAPPING_T;
+
+#define AP_GPIO_B_NB (32)
+
+// ============================================================================
+// AP_GPIO_D_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO D Map
+ AP_PIN_UART3_RXD = 0x00000000,
+ AP_PIN_UART3_TXD = 0x00000001,
+ AP_PIN_UART3_CTS = 0x00000002,
+ AP_PIN_UART3_RTS = 0x00000003,
+ AP_PIN_NFDQS = 0x00000004,
+ AP_PIN_VOLUME_DN = 0x00000005,
+ AP_PIN_VOLUME_UP = 0x00000006,
+ AP_PIN_PLUGIN = 0x00000007,
+ AP_PIN_NFD_8 = 0x00000008,
+ AP_PIN_NFD_9 = 0x00000009,
+ AP_PIN_NFD_10 = 0x0000000A,
+ AP_PIN_NFD_11 = 0x0000000B,
+ AP_PIN_NFD_12 = 0x0000000C,
+ AP_PIN_NFD_13 = 0x0000000D,
+ AP_PIN_NFD_14 = 0x0000000E,
+ AP_PIN_NFD_15 = 0x0000000F,
+ AP_PIN_LCD_DATA_16 = 0x00000010,
+ AP_PIN_LCD_DATA_17 = 0x00000011,
+ AP_PIN_LCD_DATA_18 = 0x00000012,
+ AP_PIN_LCD_DATA_19 = 0x00000013,
+ AP_PIN_LCD_DATA_20 = 0x00000014,
+ AP_PIN_LCD_DATA_21 = 0x00000015,
+ AP_PIN_LCD_DATA_22 = 0x00000016,
+ AP_PIN_LCD_DATA_23 = 0x00000017,
+ AP_PIN_NFCEN_1 = 0x00000018,
+ AP_PIN_NFCEN_2 = 0x00000019,
+ AP_PIN_NFCEN_3 = 0x0000001A,
+ AP_PIN_I2S2_BCK = 0x0000001B,
+ AP_PIN_I2S2_LRCK = 0x0000001C,
+ AP_PIN_I2S2_DI_0 = 0x0000001D,
+ AP_PIN_I2S2_DI_1 = 0x0000001E,
+ AP_PIN_I2S2_DO = 0x0000001F
+} AP_GPIO_D_MAPPING_T;
+
+#define AP_GPIO_D_NB (32)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// CFG_REGS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 CHIP_ID; //0x00000000
+ /// This register contain the synthesis date and version
+ REG32 Build_Version; //0x00000004
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 BB_GPIO_Mode; //0x00000008
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_A_Mode; //0x0000000C
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_B_Mode; //0x00000010
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_D_Mode; //0x00000014
+ REG32 Alt_mux_select; //0x00000018
+ REG32 IO_Drive1_Select; //0x0000001C
+ REG32 IO_Drive2_Select; //0x00000020
+ REG32 RAM_DRIVE; //0x00000024
+ REG32 H2X_AP_Offset; //0x00000028
+ REG32 H2X_DDR_Offset; //0x0000002C
+ REG32 audio_pd_set; //0x00000030
+ REG32 audio_pd_clr; //0x00000034
+ REG32 audio_sel_cfg; //0x00000038
+ REG32 audio_mic_cfg; //0x0000003C
+ REG32 audio_spk_cfg; //0x00000040
+ REG32 audio_rcv_gain; //0x00000044
+ REG32 audio_head_gain; //0x00000048
+ REG32 TSC_DATA; //0x0000004C
+ REG32 GPADC_DATA_CH[8]; //0x00000050
+ REG32 Alt_mux_select2; //0x00000070
+ REG32 Mem_mode_Sel; //0x00000074
+} HWP_CFG_REGS_T;
+
+#define hwp_configRegs ((HWP_CFG_REGS_T*)(RDA_CFG_REGS_BASE))
+
+
+//CHIP_ID
+#define CFG_REGS_METAL_ID(n) (((n)&0xFFF)<<0)
+#define CFG_REGS_METAL_ID_MASK (0xFFF<<0)
+#define CFG_REGS_METAL_ID_SHIFT (0)
+#define CFG_REGS_BOND_ID(n) (((n)&7)<<12)
+#define CFG_REGS_BOND_ID_MASK (7<<12)
+#define CFG_REGS_BOND_ID_SHIFT (12)
+#define CFG_REGS_PROD_ID(n) (((n)&0xFFFF)<<16)
+#define CFG_REGS_PROD_ID_MASK (0xFFFF<<16)
+#define CFG_REGS_PROD_ID_SHIFT (16)
+
+//Build_Version
+#define CFG_REGS_MAJOR(n) (((n)&15)<<28)
+#define CFG_REGS_YEAR(n) (((n)&15)<<24)
+#define CFG_REGS_MONTH(n) (((n)&0xFF)<<16)
+#define CFG_REGS_DAY(n) (((n)&0xFF)<<8)
+#define CFG_REGS_BUILD_STYLE_FPGA (0<<4)
+#define CFG_REGS_BUILD_STYLE_CHIP (1<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_USB (2<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_GSM (3<<4)
+#define CFG_REGS_BUILD_REVISION(n) (((n)&15)<<0)
+
+//BB_GPIO_Mode
+#define CFG_REGS_MODE_BB_PIN_NONE_0 (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_MASK (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_SHIFT (0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_ALT (0<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_GPIO (1<<0)
+#define CFG_REGS_MODE_BB_PIN_1 (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_SHIFT (1)
+#define CFG_REGS_MODE_BB_PIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_BB_PIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_BB_PIN_2 (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_SHIFT (2)
+#define CFG_REGS_MODE_BB_PIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_BB_PIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_BB_PIN_3 (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_MASK (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_SHIFT (3)
+#define CFG_REGS_MODE_BB_PIN_3_ALT (0<<3)
+#define CFG_REGS_MODE_BB_PIN_3_GPIO (1<<3)
+#define CFG_REGS_MODE_BB_PIN_4 (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_MASK (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_SHIFT (4)
+#define CFG_REGS_MODE_BB_PIN_4_ALT (0<<4)
+#define CFG_REGS_MODE_BB_PIN_4_GPIO (1<<4)
+#define CFG_REGS_MODE_BB_PIN_5 (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_MASK (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_SHIFT (5)
+#define CFG_REGS_MODE_BB_PIN_5_ALT (0<<5)
+#define CFG_REGS_MODE_BB_PIN_5_GPIO (1<<5)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_MASK (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_SHIFT (6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_ALT (0<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_GPIO (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_MASK (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_SHIFT (7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_ALT (0<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_GPIO (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_MASK (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_SHIFT (8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_ALT (0<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_GPIO (1<<8)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_MASK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_SHIFT (9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_ALT (0<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_GPIO (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_MASK (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_SHIFT (10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_ALT (0<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_GPIO (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0 (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_MASK (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_SHIFT (11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_ALT (0<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_GPIO (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1 (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_MASK (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_SHIFT (12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_ALT (0<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_GPIO (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2 (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_MASK (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_SHIFT (13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_ALT (0<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_GPIO (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3 (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_MASK (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_SHIFT (14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_ALT (0<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_GPIO (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_MASK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_SHIFT (15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_ALT (0<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_GPIO (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_MASK (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_SHIFT (16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_ALT (0<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_GPIO (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0 (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_MASK (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_SHIFT (17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_ALT (0<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_GPIO (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1 (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_MASK (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_SHIFT (18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_ALT (0<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_GPIO (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2 (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_MASK (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_SHIFT (19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_ALT (0<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_GPIO (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3 (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_MASK (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_SHIFT (20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_ALT (0<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_GPIO (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_MASK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_SHIFT (21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_ALT (0<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_GPIO (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0 (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_MASK (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_SHIFT (22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_ALT (0<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_GPIO (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_MASK (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_SHIFT (23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_ALT (0<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_GPIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_MASK (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_SHIFT (24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_ALT (0<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_GPIO (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_MASK (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_SHIFT (25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_ALT (0<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_GPIO (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_MASK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_SHIFT (26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_ALT (0<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_GPIO (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_MASK (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_SHIFT (27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_ALT (0<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_GPIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_MASK (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_SHIFT (28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_ALT (0<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_GPIO (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_MASK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_SHIFT (29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_ALT (0<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_GPIO (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_MASK (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_SHIFT (30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_ALT (0<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_GPIO (1<<30)
+#define CFG_REGS_BB_GPIO_MODE(n) (((n)&0x7FFFFFFF)<<0)
+#define CFG_REGS_BB_GPIO_MODE_MASK (0x7FFFFFFF<<0)
+#define CFG_REGS_BB_GPIO_MODE_SHIFT (0)
+
+//AP_GPIO_A_Mode
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1 (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4 (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9 (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10 (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11 (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12 (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13 (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14 (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15 (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_A_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_SHIFT (0)
+
+//AP_GPIO_B_Mode
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0 (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1 (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2 (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0 (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1 (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0 (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4 (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5 (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCLE (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFWEN (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWPN (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFREN (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFRB (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_B_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_SHIFT (0)
+
+//AP_GPIO_D_Mode
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_NFDQS (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_NFD_8 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFD_8_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFD_8_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_NFD_8_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_NFD_8_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFD_9 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFD_9_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFD_9_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_NFD_9_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_NFD_9_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFD_10 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFD_10_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFD_10_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_NFD_10_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_NFD_10_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFD_11 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_NFD_11_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_NFD_11_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_NFD_11_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_NFD_11_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_NFD_12 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_NFD_12_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_NFD_12_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_NFD_12_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_NFD_12_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_NFD_13 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_NFD_13_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_NFD_13_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_NFD_13_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_NFD_13_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_NFD_14 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_NFD_14_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_NFD_14_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_NFD_14_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_NFD_14_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_NFD_15 (1<<15)
+#define CFG_REGS_MODE_AP_PIN_NFD_15_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_NFD_15_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_NFD_15_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_NFD_15_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_16 (1<<16)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_16_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_16_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_16_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_16_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_17 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_17_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_17_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_17_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_17_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_18 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_18_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_18_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_18_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_18_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_19 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_19_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_19_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_19_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_19_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_20 (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_20_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_20_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_20_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_20_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_21 (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_21_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_21_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_21_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_21_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_22 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_22_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_22_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_22_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_22_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_23 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_23_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_23_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_23_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_23_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2 (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3 (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0 (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1 (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_D_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_SHIFT (0)
+
+//Alt_mux_select
+#define CFG_REGS_LCD_MODE_MASK (3<<0)
+#define CFG_REGS_LCD_MODE_PARALLEL_16BIT (0<<0)
+#define CFG_REGS_LCD_MODE_DSI (1<<0)
+#define CFG_REGS_LCD_MODE_RGB_24BIT (2<<0)
+#define CFG_REGS_LCD_MODE_RGB_16BIT (3<<0)
+#define CFG_REGS_SPI_LCD_MASK (1<<2)
+#define CFG_REGS_SPI_LCD_NONE (0<<2)
+#define CFG_REGS_SPI_LCD_SPI_LCD (1<<2)
+#define CFG_REGS_CAM_I2C2_MASK (1<<3)
+#define CFG_REGS_CAM_I2C2_CAM (0<<3)
+#define CFG_REGS_CAM_I2C2_I2C2 (1<<3)
+#define CFG_REGS_CSI2_MASK (3<<4)
+#define CFG_REGS_CSI2_PARALLEL_CAM (0<<4)
+#define CFG_REGS_CSI2_CSI2 (1<<4)
+#define CFG_REGS_CSI2_SPI_CAM (2<<4)
+#define CFG_REGS_UART2_MASK (1<<6)
+#define CFG_REGS_UART2_HOST_UART (0<<6)
+#define CFG_REGS_UART2_UART2 (1<<6)
+#define CFG_REGS_UART1_8LINE_MASK (1<<7)
+#define CFG_REGS_UART1_8LINE_UART2 (0<<7)
+#define CFG_REGS_UART1_8LINE_UART1_8_LINE (1<<7)
+#define CFG_REGS_DAI_MASK (3<<8)
+#define CFG_REGS_DAI_I2S (0<<8)
+#define CFG_REGS_DAI_DAI (1<<8)
+#define CFG_REGS_DAI_DAI_SIMPLE (2<<8)
+#define CFG_REGS_KEYIN_3_MASK (1<<10)
+#define CFG_REGS_KEYIN_3_SPI2_CS_1 (0<<10)
+#define CFG_REGS_KEYIN_3_KEYIN_3 (1<<10)
+#define CFG_REGS_LPSCO_1_MASK (1<<11)
+#define CFG_REGS_LPSCO_1_KEYIN_4 (0<<11)
+#define CFG_REGS_LPSCO_1_LPSCO_1 (1<<11)
+#define CFG_REGS_SPI1_CS_2_MASK (1<<12)
+#define CFG_REGS_SPI1_CS_2_KEYIN_1 (0<<12)
+#define CFG_REGS_SPI1_CS_2_SPI1_CS_2 (1<<12)
+#define CFG_REGS_I2S_DI_2_MASK (1<<13)
+#define CFG_REGS_I2S_DI_2_KEYIN_2 (0<<13)
+#define CFG_REGS_I2S_DI_2_I2S_DI_2 (1<<13)
+#define CFG_REGS_TCO_0_MASK (1<<14)
+#define CFG_REGS_TCO_0_KEYOUT_0 (0<<14)
+#define CFG_REGS_TCO_0_TCO_0 (1<<14)
+#define CFG_REGS_TCO_1_MASK (1<<15)
+#define CFG_REGS_TCO_1_KEYOUT_1 (0<<15)
+#define CFG_REGS_TCO_1_TCO_1 (1<<15)
+#define CFG_REGS_TCO_2_MASK (1<<16)
+#define CFG_REGS_TCO_2_KEYOUT_2 (0<<16)
+#define CFG_REGS_TCO_2_TCO_2 (1<<16)
+#define CFG_REGS_KEYOUT_3_4_MASK (1<<17)
+#define CFG_REGS_KEYOUT_3_4_I2C3 (0<<17)
+#define CFG_REGS_KEYOUT_3_4_KEYOUT_3_4 (1<<17)
+#define CFG_REGS_KEYOUT_6_MASK (1<<18)
+#define CFG_REGS_KEYOUT_6_UART2_RTS (0<<18)
+#define CFG_REGS_KEYOUT_6_KEYOUT_6 (1<<18)
+#define CFG_REGS_KEYOUT_7_MASK (1<<19)
+#define CFG_REGS_KEYOUT_7_UART1_RTS (0<<19)
+#define CFG_REGS_KEYOUT_7_KEYOUT_7 (1<<19)
+#define CFG_REGS_GPO_0_MASK (3<<20)
+#define CFG_REGS_GPO_0_GPO_0 (0<<20)
+#define CFG_REGS_GPO_0_PWT (1<<20)
+#define CFG_REGS_GPO_0_KEYIN_5 (2<<20)
+#define CFG_REGS_GPO_1_MASK (3<<22)
+#define CFG_REGS_GPO_1_GPO_1 (0<<22)
+#define CFG_REGS_GPO_1_LPG (1<<22)
+#define CFG_REGS_GPO_1_KEYOUT_5 (2<<22)
+#define CFG_REGS_GPO_2_MASK (3<<24)
+#define CFG_REGS_GPO_2_GPO_2 (0<<24)
+#define CFG_REGS_GPO_2_PWL_1 (1<<24)
+#define CFG_REGS_GPO_2_CLK_32K (2<<24)
+#define CFG_REGS_GPO_3_MASK (1<<26)
+#define CFG_REGS_GPO_3_LCD_CS_1 (0<<26)
+#define CFG_REGS_GPO_3_GPO_3 (1<<26)
+#define CFG_REGS_GPO_4_MASK (1<<27)
+#define CFG_REGS_GPO_4_LCD_CS_0 (0<<27)
+#define CFG_REGS_GPO_4_GPO_4 (1<<27)
+#define CFG_REGS_CLK_OUT_MASK (1<<28)
+#define CFG_REGS_CLK_OUT_HST_CLK (0<<28)
+#define CFG_REGS_CLK_OUT_CLK_OUT (1<<28)
+#define CFG_REGS_AP_SPI1_MASK (1<<29)
+#define CFG_REGS_AP_SPI1_BB_SPI1 (0<<29)
+#define CFG_REGS_AP_SPI1_AP_SPI1 (1<<29)
+#define CFG_REGS_DEBUG_MASK (3<<30)
+#define CFG_REGS_DEBUG_NONE (0<<30)
+#define CFG_REGS_DEBUG_AP_MONITOR (1<<30)
+#define CFG_REGS_DEBUG_WD_MONITOR (2<<30)
+
+//IO_Drive1_Select
+#define CFG_REGS_DDR_DRIVE_MASK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_WEAK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_WEAK (6<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_STRONG (5<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_STRONG (4<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_WEAK (3<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_WEAK (2<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_STRONG (1<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_STRONG (0<<0)
+#define CFG_REGS_PSRAM1_DRIVE_MASK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_WEAK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_WEAK (6<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_STRONG (5<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_STRONG (4<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_WEAK (3<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_WEAK (2<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_STRONG (1<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_STRONG (0<<3)
+#define CFG_REGS_PSRAM2_DRIVE_MASK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_WEAK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_WEAK (6<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_STRONG (5<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_STRONG (4<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_WEAK (3<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_WEAK (2<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_STRONG (1<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_STRONG (0<<6)
+#define CFG_REGS_NFLSH_DRIVE_MASK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_WEAK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_WEAK (6<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_STRONG (5<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_STRONG (4<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_WEAK (3<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_WEAK (2<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_STRONG (1<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_STRONG (0<<9)
+#define CFG_REGS_LCD1_DRIVE_MASK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_WEAK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_WEAK (6<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_STRONG (5<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_STRONG (4<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_WEAK (3<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_WEAK (2<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_STRONG (1<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_STRONG (0<<12)
+#define CFG_REGS_LCD2_DRIVE_MASK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_WEAK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_WEAK (6<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_STRONG (5<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_STRONG (4<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_WEAK (3<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_WEAK (2<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_STRONG (1<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_STRONG (0<<15)
+#define CFG_REGS_SDAT1_DRIVE_MASK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_WEAK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_WEAK (6<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_STRONG (5<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_STRONG (4<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_WEAK (3<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_WEAK (2<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_STRONG (1<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_STRONG (0<<18)
+#define CFG_REGS_SDAT2_DRIVE_MASK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_WEAK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_WEAK (6<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_STRONG (5<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_STRONG (4<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_WEAK (3<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_WEAK (2<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_STRONG (1<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_STRONG (0<<21)
+#define CFG_REGS_CAM_DRIVE_MASK (3<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_STRONG (0<<24)
+#define CFG_REGS_CAM_DRIVE_STRONG (1<<24)
+#define CFG_REGS_CAM_DRIVE_WEAK (2<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_WEAK (3<<24)
+#define CFG_REGS_SIM1_DRIVE_MASK (3<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_STRONG (0<<26)
+#define CFG_REGS_SIM1_DRIVE_STRONG (1<<26)
+#define CFG_REGS_SIM1_DRIVE_WEAK (2<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_WEAK (3<<26)
+#define CFG_REGS_SIM2_DRIVE_MASK (3<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_STRONG (0<<28)
+#define CFG_REGS_SIM2_DRIVE_STRONG (1<<28)
+#define CFG_REGS_SIM2_DRIVE_WEAK (2<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_WEAK (3<<28)
+#define CFG_REGS_SIM3_DRIVE_MASK (3<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_STRONG (0<<30)
+#define CFG_REGS_SIM3_DRIVE_STRONG (1<<30)
+#define CFG_REGS_SIM3_DRIVE_WEAK (2<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_WEAK (3<<30)
+
+//IO_Drive2_Select
+#define CFG_REGS_GPIO_DRIVE_MASK (3<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_STRONG (0<<0)
+#define CFG_REGS_GPIO_DRIVE_STRONG (1<<0)
+#define CFG_REGS_GPIO_DRIVE_WEAK (2<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_WEAK (3<<0)
+
+//RAM_DRIVE
+#define CFG_REGS_MBRAM_A(n) (((n)&7)<<0)
+#define CFG_REGS_MBRAM_A_MASK (7<<0)
+#define CFG_REGS_MBRAM_A_SHIFT (0)
+#define CFG_REGS_MBRAM_W(n) (((n)&3)<<3)
+#define CFG_REGS_MBRAM_W_MASK (3<<3)
+#define CFG_REGS_MBRAM_W_SHIFT (3)
+#define CFG_REGS_MBRAM_R (1<<5)
+#define CFG_REGS_BBRAM_A(n) (((n)&7)<<6)
+#define CFG_REGS_BBRAM_A_MASK (7<<6)
+#define CFG_REGS_BBRAM_A_SHIFT (6)
+#define CFG_REGS_BBRAM_W(n) (((n)&3)<<9)
+#define CFG_REGS_BBRAM_W_MASK (3<<9)
+#define CFG_REGS_BBRAM_W_SHIFT (9)
+#define CFG_REGS_BBRAM_R (1<<11)
+#define CFG_REGS_XP_A(n) (((n)&7)<<12)
+#define CFG_REGS_XP_A_MASK (7<<12)
+#define CFG_REGS_XP_A_SHIFT (12)
+#define CFG_REGS_XP_W(n) (((n)&3)<<15)
+#define CFG_REGS_XP_W_MASK (3<<15)
+#define CFG_REGS_XP_W_SHIFT (15)
+#define CFG_REGS_XP_R (1<<17)
+#define CFG_REGS_BP_A(n) (((n)&7)<<18)
+#define CFG_REGS_BP_A_MASK (7<<18)
+#define CFG_REGS_BP_A_SHIFT (18)
+#define CFG_REGS_BP_W(n) (((n)&3)<<21)
+#define CFG_REGS_BP_W_MASK (3<<21)
+#define CFG_REGS_BP_W_SHIFT (21)
+#define CFG_REGS_BP_R (1<<23)
+#define CFG_REGS_EV_A(n) (((n)&7)<<24)
+#define CFG_REGS_EV_A_MASK (7<<24)
+#define CFG_REGS_EV_A_SHIFT (24)
+#define CFG_REGS_EV_W(n) (((n)&3)<<27)
+#define CFG_REGS_EV_W_MASK (3<<27)
+#define CFG_REGS_EV_W_SHIFT (27)
+#define CFG_REGS_EV_R (1<<29)
+
+//H2X_AP_Offset
+#define CFG_REGS_H2X_AP_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_AP_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_AP_OFFSET_SHIFT (0)
+
+//H2X_DDR_Offset
+#define CFG_REGS_H2X_DDR_OFFSET(n) (((n)&0xFFFFFFF)<<4)
+#define CFG_REGS_H2X_DDR_OFFSET_MASK (0xFFFFFFF<<4)
+#define CFG_REGS_H2X_DDR_OFFSET_SHIFT (4)
+
+//audio_pd_set
+#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+#define CFG_REGS_AU_REF_PD_N (1<<1)
+#define CFG_REGS_AU_MIC_PD_N (1<<2)
+#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+#define CFG_REGS_AU_AD_PD_N (1<<4)
+#define CFG_REGS_AU_DAC_PD_N (1<<5)
+#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_pd_clr
+//#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+//#define CFG_REGS_AU_REF_PD_N (1<<1)
+//#define CFG_REGS_AU_MIC_PD_N (1<<2)
+//#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+//#define CFG_REGS_AU_AD_PD_N (1<<4)
+//#define CFG_REGS_AU_DAC_PD_N (1<<5)
+//#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+//#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_sel_cfg
+#define CFG_REGS_AU_AUXMIC_SEL (1<<0)
+#define CFG_REGS_AU_SPK_SEL (1<<1)
+#define CFG_REGS_AU_SPK_MONO_SEL (1<<2)
+#define CFG_REGS_AU_RCV_SEL (1<<3)
+#define CFG_REGS_AU_HEAD_SEL (1<<4)
+
+//audio_mic_cfg
+#define CFG_REGS_AU_MIC_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_MIC_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_MIC_GAIN_SHIFT (0)
+#define CFG_REGS_AU_MIC_MUTE_N (1<<4)
+
+//audio_spk_cfg
+#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_SPK_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_SPK_GAIN_SHIFT (0)
+#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
+#define CFG_REGS_AU_SPK_VOC_GAIN_EN (1<<8)
+
+//audio_rcv_gain
+#define CFG_REGS_AU_RCV_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_RCV_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_RCV_GAIN_SHIFT (0)
+#define CFG_REGS_AU_RCV_VOC_GAIN_EN (1<<8)
+
+//audio_head_gain
+#define CFG_REGS_AU_HEAD_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_HEAD_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_HEAD_GAIN_SHIFT (0)
+#define CFG_REGS_AU_HEAD_VOC_GAIN_EN (1<<8)
+
+//TSC_DATA
+#define CFG_REGS_TSC_X_VALUE_BIT(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_MASK (0x3FF<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_SHIFT (0)
+#define CFG_REGS_TSC_X_VALUE_VALID (1<<10)
+#define CFG_REGS_TSC_Y_VALUE_BIT(n) (((n)&0x3FF)<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_MASK (0x3FF<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_SHIFT (11)
+#define CFG_REGS_TSC_Y_VALUE_VALID (1<<21)
+
+//GPADC_DATA_CH
+#define CFG_REGS_GPADC_DATA(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_GPADC_DATA_MASK (0x3FF<<0)
+#define CFG_REGS_GPADC_DATA_SHIFT (0)
+#define CFG_REGS_GPADC_VALID (1<<10)
+#define CFG_REGS_GPADC_CH_EN (1<<31)
+
+//Alt_mux_select2
+#define CFG_REGS_UART1_SDIO2_MASK (1<<0)
+#define CFG_REGS_UART1_SDIO2_SDIO2 (0<<0)
+#define CFG_REGS_UART1_SDIO2_UART1 (1<<0)
+#define CFG_REGS_RFSPI_WD_MODE_MASK (1<<1)
+#define CFG_REGS_RFSPI_WD_MODE_SPLIT (0<<1)
+#define CFG_REGS_RFSPI_WD_MODE_AUTO (1<<1)
+#define CFG_REGS_LCD_RGB_17_16_MASK (1<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_CS (0<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_DATA (1<<2)
+#define CFG_REGS_JTAG_EN_MASK (1<<3)
+#define CFG_REGS_JTAG_EN_DISABLE (0<<3)
+#define CFG_REGS_JTAG_EN_ENABLE (1<<3)
+#define CFG_REGS_RFIF_TEST_MASK (1<<4)
+#define CFG_REGS_RFIF_TEST_DISABLE (0<<4)
+#define CFG_REGS_RFIF_TEST_ENABLE (1<<4)
+#define CFG_REGS_IOMUX_CFG_RESERVED(n) (((n)&0x7FFFFFF)<<5)
+
+//Mem_mode_Sel
+#define CFG_REGS_MPMC_EN_MASK (1<<0)
+#define CFG_REGS_MPMC_EN_DISABLE (0<<0)
+#define CFG_REGS_MPMC_EN_ENABLE (1<<0)
+#define CFG_REGS_PSRAM_EN_MASK (1<<4)
+#define CFG_REGS_PSRAM_EN_DISABLE (0<<4)
+#define CFG_REGS_PSRAM_EN_ENABLE (1<<4)
+#define CFG_REGS_PSRAM_128_MASK (1<<8)
+#define CFG_REGS_PSRAM_128_DISABLE (0<<8)
+#define CFG_REGS_PSRAM_128_ENABLE (1<<8)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850e.h b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850e.h
new file mode 100644
index 0000000000..5ef2d1bd6b
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_cfg_regs_rda8850e.h
@@ -0,0 +1,1297 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2014, RDA Microelectronics.
+// All Rights Reserved
+//
+// This source code is the property of RDA Microelectronics and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA Microelectronics.
+//
+//==============================================================================
+//
+// THIS FILE WAS GENERATED FROM ITS CORRESPONDING XML VERSION WITH COOLXML.
+//
+// !!! PLEASE DO NOT EDIT !!!
+//
+// $HeadURL$
+// $Author$
+// $Date$
+// $Revision$
+//
+//==============================================================================
+//
+/// @file
+//
+//==============================================================================
+
+#ifndef _CFG_REGS_H_
+#define _CFG_REGS_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#ifdef CT_ASM
+#error "You are trying to use in an assembly code the normal H description of 'cfg_regs'."
+#endif
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define PROD_ID (0X810E)
+
+// ============================================================================
+// BB_GPIO_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// BB GPIO Map
+ BB_PIN_NONE_0 = 0x00000000,
+ BB_PIN_1 = 0x00000001,
+ BB_PIN_2 = 0x00000002,
+ BB_PIN_3 = 0x00000003,
+ BB_PIN_4 = 0x00000004,
+ BB_PIN_5 = 0x00000005,
+ BB_PIN_UART1_RXD = 0x00000006,
+ BB_PIN_UART2_RXD = 0x00000007,
+ BB_PIN_UART2_TXD = 0x00000008,
+ BB_PIN_SSD1_CLK = 0x00000009,
+ BB_PIN_SSD1_CMD = 0x0000000A,
+ BB_PIN_SDAT1_0 = 0x0000000B,
+ BB_PIN_SDAT1_1 = 0x0000000C,
+ BB_PIN_SDAT1_2 = 0x0000000D,
+ BB_PIN_SDAT1_3 = 0x0000000E,
+ BB_PIN_SSD2_CLK = 0x0000000F,
+ BB_PIN_SSD2_CMD = 0x00000010,
+ BB_PIN_SDAT2_0 = 0x00000011,
+ BB_PIN_SDAT2_1 = 0x00000012,
+ BB_PIN_SDAT2_2 = 0x00000013,
+ BB_PIN_SDAT2_3 = 0x00000014,
+ BB_PIN_SPI1_CLK = 0x00000015,
+ BB_PIN_SPI1_CS_0 = 0x00000016,
+ BB_PIN_SPI1_DIO = 0x00000017,
+ BB_PIN_SPI1_DI = 0x00000018,
+ BB_PIN_SIM2_RST = 0x00000019,
+ BB_PIN_SIM2_CLK = 0x0000001A,
+ BB_PIN_SIM2_DIO = 0x0000001B,
+ BB_PIN_SIM3_RST = 0x0000001C,
+ BB_PIN_SIM3_CLK = 0x0000001D,
+ BB_PIN_SIM3_DIO = 0x0000001E
+} BB_GPIO_MAPPING_T;
+
+#define BB_GPIO_NB (31)
+
+// ============================================================================
+// AP_GPIO_A_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO A Map
+ AP_PIN_I2C2_SCL = 0x00000000,
+ AP_PIN_I2C2_SDA = 0x00000001,
+ AP_PIN_SPI2_CLK = 0x00000002,
+ AP_PIN_SPI2_DIO = 0x00000003,
+ AP_PIN_SPI2_DI = 0x00000004,
+ AP_PIN_SPI2_CS_0 = 0x00000005,
+ AP_PIN_SPI2_CS_1 = 0x00000006,
+ AP_PIN_KEYIN_4 = 0x00000007,
+ AP_PIN_CLK_OUT = 0x00000008,
+ AP_PIN_I2S_BCK = 0x00000009,
+ AP_PIN_I2S_LRCK = 0x0000000A,
+ AP_PIN_I2S_DI_0 = 0x0000000B,
+ AP_PIN_I2S_DI_1 = 0x0000000C,
+ AP_PIN_I2S_DO = 0x0000000D,
+ AP_PIN_UART1_TXD = 0x0000000E,
+ AP_PIN_UART1_CTS = 0x0000000F,
+ AP_PIN_UART1_RTS = 0x00000010,
+ AP_PIN_SPI1_CS_1 = 0x00000011,
+ AP_PIN_LCD_DATA_6 = 0x00000012,
+ AP_PIN_LCD_DATA_7 = 0x00000013,
+ AP_PIN_LCD_WR = 0x00000014,
+ AP_PIN_LCD_RS = 0x00000015,
+ AP_PIN_LCD_RD = 0x00000016,
+ AP_PIN_LCD_FMARK = 0x00000017,
+ AP_PIN_LCD_DATA_8 = 0x00000018,
+ AP_PIN_LCD_DATA_9 = 0x00000019,
+ AP_PIN_LCD_DATA_10 = 0x0000001A,
+ AP_PIN_LCD_DATA_11 = 0x0000001B,
+ AP_PIN_LCD_DATA_12 = 0x0000001C,
+ AP_PIN_LCD_DATA_13 = 0x0000001D,
+ AP_PIN_LCD_DATA_14 = 0x0000001E,
+ AP_PIN_LCD_DATA_15 = 0x0000001F
+} AP_GPIO_A_MAPPING_T;
+
+#define AP_GPIO_A_NB (32)
+
+// ============================================================================
+// AP_GPIO_B_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO B Map
+ AP_PIN_KEYIN_0 = 0x00000000,
+ AP_PIN_KEYIN_1 = 0x00000001,
+ AP_PIN_KEYIN_2 = 0x00000002,
+ AP_PIN_KEYOUT_0 = 0x00000003,
+ AP_PIN_KEYOUT_1 = 0x00000004,
+ AP_PIN_KEYOUT_2 = 0x00000005,
+ AP_PIN_I2C3_SCL = 0x00000006,
+ AP_PIN_I2C3_SDA = 0x00000007,
+ AP_PIN_UART2_CTS = 0x00000008,
+ AP_PIN_UART2_RTS = 0x00000009,
+ AP_PIN_CAM_RST = 0x0000000A,
+ AP_PIN_CAM_PDN = 0x0000000B,
+ AP_PIN_CAM_CLK = 0x0000000C,
+ AP_PIN_CAM_VSYNC = 0x0000000D,
+ AP_PIN_CAM_HREF = 0x0000000E,
+ AP_PIN_CAM_PCLK = 0x0000000F,
+ AP_PIN_CAM_DATA_0 = 0x00000010,
+ AP_PIN_CAM_DATA_1 = 0x00000011,
+ AP_PIN_CAM_DATA_2 = 0x00000012,
+ AP_PIN_CAM_DATA_3 = 0x00000013,
+ AP_PIN_CAM_DATA_4 = 0x00000014,
+ AP_PIN_CAM_DATA_5 = 0x00000015,
+ AP_PIN_CAM_DATA_6 = 0x00000016,
+ AP_PIN_CAM_DATA_7 = 0x00000017,
+ AP_PIN_M_SPI_CS_0 = 0x00000018,
+ AP_PIN_NFCLE = 0x00000019,
+ AP_PIN_NFWEN = 0x0000001A,
+ AP_PIN_NFWPN = 0x0000001B,
+ AP_PIN_NFREN = 0x0000001C,
+ AP_PIN_NFRB = 0x0000001D,
+ AP_PIN_I2C1_SCL = 0x0000001E,
+ AP_PIN_I2C1_SDA = 0x0000001F
+} AP_GPIO_B_MAPPING_T;
+
+#define AP_GPIO_B_NB (32)
+
+// ============================================================================
+// AP_GPIO_D_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO D Map
+ AP_PIN_UART3_RXD = 0x00000000,
+ AP_PIN_UART3_TXD = 0x00000001,
+ AP_PIN_UART3_CTS = 0x00000002,
+ AP_PIN_UART3_RTS = 0x00000003,
+ AP_PIN_NFDQS = 0x00000004,
+ AP_PIN_VOLUME_DN = 0x00000005,
+ AP_PIN_VOLUME_UP = 0x00000006,
+ AP_PIN_PLUGIN = 0x00000007,
+ AP_PIN_NFCEN_1 = 0x00000008,
+ AP_PIN_NFCEN_2 = 0x00000009,
+ AP_PIN_NFCEN_3 = 0x0000000A,
+ AP_PIN_I2S2_BCK = 0x0000000B,
+ AP_PIN_I2S2_LRCK = 0x0000000C,
+ AP_PIN_I2S2_DI_0 = 0x0000000D,
+ AP_PIN_I2S2_DI_1 = 0x0000000E,
+ AP_PIN_I2S2_DO = 0x0000000F
+} AP_GPIO_D_MAPPING_T;
+
+#define AP_GPIO_D_NB (16)
+
+// ============================================================================
+// AP_GPIO_E_MAPPING_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GPIO E Map
+ AP_PIN_I2CBB_SCL = 0x00000000,
+ AP_PIN_I2CBB_SDA = 0x00000001,
+ AP_PIN_CAM2_RST = 0x00000002,
+ AP_PIN_CAM2_PDN = 0x00000003,
+ AP_PIN_CAM2_CLK = 0x00000004,
+ AP_PIN_CAM2_VSYNC = 0x00000005,
+ AP_PIN_CAM2_HREF = 0x00000006,
+ AP_PIN_CAM2_PCLK = 0x00000007,
+ AP_PIN_CAM2_DATA_0 = 0x00000008,
+ AP_PIN_CAM2_DATA_1 = 0x00000009,
+ AP_PIN_CAM2_DATA_2 = 0x0000000A,
+ AP_PIN_CAM2_DATA_3 = 0x0000000B,
+ AP_PIN_CAM2_DATA_4 = 0x0000000C,
+ AP_PIN_CAM2_DATA_5 = 0x0000000D,
+ AP_PIN_CAM2_DATA_6 = 0x0000000E,
+ AP_PIN_CAM2_DATA_7 = 0x0000000F
+} AP_GPIO_E_MAPPING_T;
+
+#define AP_GPIO_E_NB (16)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// CFG_REGS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 CHIP_ID; //0x00000000
+ /// This register contain the synthesis date and version
+ REG32 Build_Version; //0x00000004
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 BB_GPIO_Mode; //0x00000008
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_A_Mode; //0x0000000C
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_B_Mode; //0x00000010
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_D_Mode; //0x00000014
+ REG32 Alt_mux_select; //0x00000018
+ REG32 IO_Drive1_Select; //0x0000001C
+ REG32 IO_Drive2_Select; //0x00000020
+ REG32 RAM_DRIVE; //0x00000024
+ REG32 H2X_AP_Offset; //0x00000028
+ REG32 H2X_DDR_Offset; //0x0000002C
+ REG32 H2X_WD_DDR_Offset; //0x00000030
+ REG32 audio_pd_set; //0x00000034
+ REG32 audio_pd_clr; //0x00000038
+ REG32 audio_sel_cfg; //0x0000003C
+ REG32 audio_mic_cfg; //0x00000040
+ REG32 audio_spk_cfg; //0x00000044
+ REG32 audio_rcv_gain; //0x00000048
+ REG32 audio_head_gain; //0x0000004C
+ REG32 TSC_DATA; //0x00000050
+ REG32 GPADC_DATA_CH[8]; //0x00000054
+ REG32 Alt_mux_select2; //0x00000074
+ REG32 Mem_mode_Sel; //0x00000078
+ /// Setting bit n to '1' selects GPIO Usage for PAD connected to GPIOn. Setting
+ /// bit n to '0' selects Alt.
+ REG32 AP_GPIO_E_Mode; //0x0000007C
+} HWP_CFG_REGS_T;
+
+#define hwp_configRegs ((HWP_CFG_REGS_T*)(RDA_CFG_REGS_BASE))
+
+
+//CHIP_ID
+#define CFG_REGS_METAL_ID(n) (((n)&0xFFF)<<0)
+#define CFG_REGS_METAL_ID_MASK (0xFFF<<0)
+#define CFG_REGS_METAL_ID_SHIFT (0)
+#define CFG_REGS_BOND_ID(n) (((n)&7)<<12)
+#define CFG_REGS_BOND_ID_MASK (7<<12)
+#define CFG_REGS_BOND_ID_SHIFT (12)
+#define CFG_REGS_PROD_ID(n) (((n)&0xFFFF)<<16)
+#define CFG_REGS_PROD_ID_MASK (0xFFFF<<16)
+#define CFG_REGS_PROD_ID_SHIFT (16)
+
+//Build_Version
+#define CFG_REGS_MAJOR(n) (((n)&15)<<28)
+#define CFG_REGS_YEAR(n) (((n)&15)<<24)
+#define CFG_REGS_MONTH(n) (((n)&0xFF)<<16)
+#define CFG_REGS_DAY(n) (((n)&0xFF)<<8)
+#define CFG_REGS_BUILD_STYLE_FPGA (0<<4)
+#define CFG_REGS_BUILD_STYLE_CHIP (1<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_USB (2<<4)
+#define CFG_REGS_BUILD_STYLE_FPGA_GSM (3<<4)
+#define CFG_REGS_BUILD_REVISION(n) (((n)&15)<<0)
+
+//BB_GPIO_Mode
+#define CFG_REGS_MODE_BB_PIN_NONE_0 (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_MASK (1<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_SHIFT (0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_ALT (0<<0)
+#define CFG_REGS_MODE_BB_PIN_NONE_0_GPIO (1<<0)
+#define CFG_REGS_MODE_BB_PIN_1 (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_BB_PIN_1_SHIFT (1)
+#define CFG_REGS_MODE_BB_PIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_BB_PIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_BB_PIN_2 (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_BB_PIN_2_SHIFT (2)
+#define CFG_REGS_MODE_BB_PIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_BB_PIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_BB_PIN_3 (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_MASK (1<<3)
+#define CFG_REGS_MODE_BB_PIN_3_SHIFT (3)
+#define CFG_REGS_MODE_BB_PIN_3_ALT (0<<3)
+#define CFG_REGS_MODE_BB_PIN_3_GPIO (1<<3)
+#define CFG_REGS_MODE_BB_PIN_4 (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_MASK (1<<4)
+#define CFG_REGS_MODE_BB_PIN_4_SHIFT (4)
+#define CFG_REGS_MODE_BB_PIN_4_ALT (0<<4)
+#define CFG_REGS_MODE_BB_PIN_4_GPIO (1<<4)
+#define CFG_REGS_MODE_BB_PIN_5 (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_MASK (1<<5)
+#define CFG_REGS_MODE_BB_PIN_5_SHIFT (5)
+#define CFG_REGS_MODE_BB_PIN_5_ALT (0<<5)
+#define CFG_REGS_MODE_BB_PIN_5_GPIO (1<<5)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_MASK (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_SHIFT (6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_ALT (0<<6)
+#define CFG_REGS_MODE_BB_PIN_UART1_RXD_GPIO (1<<6)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_MASK (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_SHIFT (7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_ALT (0<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_RXD_GPIO (1<<7)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_MASK (1<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_SHIFT (8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_ALT (0<<8)
+#define CFG_REGS_MODE_BB_PIN_UART2_TXD_GPIO (1<<8)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_MASK (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_SHIFT (9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_ALT (0<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CLK_GPIO (1<<9)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_MASK (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_SHIFT (10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_ALT (0<<10)
+#define CFG_REGS_MODE_BB_PIN_SSD1_CMD_GPIO (1<<10)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0 (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_MASK (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_SHIFT (11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_ALT (0<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_0_GPIO (1<<11)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1 (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_MASK (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_SHIFT (12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_ALT (0<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_1_GPIO (1<<12)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2 (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_MASK (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_SHIFT (13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_ALT (0<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_2_GPIO (1<<13)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3 (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_MASK (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_SHIFT (14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_ALT (0<<14)
+#define CFG_REGS_MODE_BB_PIN_SDAT1_3_GPIO (1<<14)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_MASK (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_SHIFT (15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_ALT (0<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CLK_GPIO (1<<15)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_MASK (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_SHIFT (16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_ALT (0<<16)
+#define CFG_REGS_MODE_BB_PIN_SSD2_CMD_GPIO (1<<16)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0 (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_MASK (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_SHIFT (17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_ALT (0<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_0_GPIO (1<<17)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1 (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_MASK (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_SHIFT (18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_ALT (0<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_1_GPIO (1<<18)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2 (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_MASK (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_SHIFT (19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_ALT (0<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_2_GPIO (1<<19)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3 (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_MASK (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_SHIFT (20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_ALT (0<<20)
+#define CFG_REGS_MODE_BB_PIN_SDAT2_3_GPIO (1<<20)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_MASK (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_SHIFT (21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_ALT (0<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CLK_GPIO (1<<21)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0 (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_MASK (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_SHIFT (22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_ALT (0<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_CS_0_GPIO (1<<22)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_MASK (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_SHIFT (23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_ALT (0<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DIO_GPIO (1<<23)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_MASK (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_SHIFT (24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_ALT (0<<24)
+#define CFG_REGS_MODE_BB_PIN_SPI1_DI_GPIO (1<<24)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_MASK (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_SHIFT (25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_ALT (0<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_RST_GPIO (1<<25)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_MASK (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_SHIFT (26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_ALT (0<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_CLK_GPIO (1<<26)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_MASK (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_SHIFT (27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_ALT (0<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM2_DIO_GPIO (1<<27)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_MASK (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_SHIFT (28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_ALT (0<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_RST_GPIO (1<<28)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_MASK (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_SHIFT (29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_ALT (0<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_CLK_GPIO (1<<29)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_MASK (1<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_SHIFT (30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_ALT (0<<30)
+#define CFG_REGS_MODE_BB_PIN_SIM3_DIO_GPIO (1<<30)
+#define CFG_REGS_BB_GPIO_MODE(n) (((n)&0x7FFFFFFF)<<0)
+#define CFG_REGS_BB_GPIO_MODE_MASK (0x7FFFFFFF<<0)
+#define CFG_REGS_BB_GPIO_MODE_SHIFT (0)
+
+//AP_GPIO_A_Mode
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2C2_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CLK_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DIO_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_DI_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_0_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1 (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_SPI2_CS_1_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4 (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_4_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CLK_OUT_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_BCK_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_LRCK_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_0_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DI_1_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S_DO_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_TXD_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_CTS_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_UART1_RTS_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_SPI1_CS_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_6_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_7_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_WR_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RS_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_RD_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_FMARK_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_8_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9 (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_9_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10 (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_10_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11 (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_11_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12 (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_12_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13 (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_13_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14 (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_14_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15 (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_LCD_DATA_15_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_A_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_A_MODE_SHIFT (0)
+
+//AP_GPIO_B_Mode
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0 (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_0_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1 (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_1_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2 (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYIN_2_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0 (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_0_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1 (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_1_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2 (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_KEYOUT_2_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SCL_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_I2C3_SDA_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_CTS_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_UART2_RTS_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_RST_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_PDN_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_CLK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_VSYNC_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_HREF_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_PCLK_GPIO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0 (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_MASK (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_SHIFT (16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_ALT (0<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_0_GPIO (1<<16)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1 (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_MASK (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_SHIFT (17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_ALT (0<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_1_GPIO (1<<17)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2 (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_MASK (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_SHIFT (18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_ALT (0<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_2_GPIO (1<<18)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3 (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_MASK (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_SHIFT (19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_ALT (0<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_3_GPIO (1<<19)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4 (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_MASK (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_SHIFT (20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_ALT (0<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_4_GPIO (1<<20)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5 (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_MASK (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_SHIFT (21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_ALT (0<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_5_GPIO (1<<21)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6 (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_MASK (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_SHIFT (22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_ALT (0<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_6_GPIO (1<<22)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7 (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_MASK (1<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_SHIFT (23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_ALT (0<<23)
+#define CFG_REGS_MODE_AP_PIN_CAM_DATA_7_GPIO (1<<23)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0 (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_MASK (1<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_SHIFT (24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_ALT (0<<24)
+#define CFG_REGS_MODE_AP_PIN_M_SPI_CS_0_GPIO (1<<24)
+#define CFG_REGS_MODE_AP_PIN_NFCLE (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_MASK (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_SHIFT (25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_ALT (0<<25)
+#define CFG_REGS_MODE_AP_PIN_NFCLE_GPIO (1<<25)
+#define CFG_REGS_MODE_AP_PIN_NFWEN (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_MASK (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_SHIFT (26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_ALT (0<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWEN_GPIO (1<<26)
+#define CFG_REGS_MODE_AP_PIN_NFWPN (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_MASK (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_SHIFT (27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_ALT (0<<27)
+#define CFG_REGS_MODE_AP_PIN_NFWPN_GPIO (1<<27)
+#define CFG_REGS_MODE_AP_PIN_NFREN (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_MASK (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_SHIFT (28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_ALT (0<<28)
+#define CFG_REGS_MODE_AP_PIN_NFREN_GPIO (1<<28)
+#define CFG_REGS_MODE_AP_PIN_NFRB (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_MASK (1<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_SHIFT (29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_ALT (0<<29)
+#define CFG_REGS_MODE_AP_PIN_NFRB_GPIO (1<<29)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_MASK (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_SHIFT (30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_ALT (0<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SCL_GPIO (1<<30)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_MASK (1<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_SHIFT (31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_ALT (0<<31)
+#define CFG_REGS_MODE_AP_PIN_I2C1_SDA_GPIO (1<<31)
+#define CFG_REGS_AP_GPIO_B_MODE(n) (((n)&0xFFFFFFFF)<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_MASK (0xFFFFFFFF<<0)
+#define CFG_REGS_AP_GPIO_B_MODE_SHIFT (0)
+
+//AP_GPIO_D_Mode
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_RXD_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_TXD_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_CTS_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_UART3_RTS_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_NFDQS (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_NFDQS_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_DN_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_VOLUME_UP_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_PLUGIN_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_1_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_2_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_NFCEN_3_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_BCK_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_LRCK_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_0_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DI_1_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_I2S2_DO_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_D_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_D_MODE_SHIFT (0)
+
+//Alt_mux_select
+#define CFG_REGS_LCD_MODE_MASK (3<<0)
+#define CFG_REGS_LCD_MODE_PARALLEL_16BIT (0<<0)
+#define CFG_REGS_LCD_MODE_DSI (1<<0)
+#define CFG_REGS_LCD_MODE_RGB_24BIT (2<<0)
+#define CFG_REGS_LCD_MODE_RGB_16BIT (3<<0)
+#define CFG_REGS_SPI_LCD_MASK (1<<2)
+#define CFG_REGS_SPI_LCD_NONE (0<<2)
+#define CFG_REGS_SPI_LCD_SPI_LCD (1<<2)
+#define CFG_REGS_CAM_I2C2_MASK (1<<3)
+#define CFG_REGS_CAM_I2C2_CAM (0<<3)
+#define CFG_REGS_CAM_I2C2_I2C2 (1<<3)
+#define CFG_REGS_CSI2_MASK (3<<4)
+#define CFG_REGS_CSI2_PARALLEL_CAM (0<<4)
+#define CFG_REGS_CSI2_CSI2 (1<<4)
+#define CFG_REGS_CSI2_SPI_CAM (2<<4)
+#define CFG_REGS_UART2_MASK (1<<6)
+#define CFG_REGS_UART2_HOST_UART (0<<6)
+#define CFG_REGS_UART2_UART2 (1<<6)
+#define CFG_REGS_UART1_8LINE_MASK (1<<7)
+#define CFG_REGS_UART1_8LINE_UART2 (0<<7)
+#define CFG_REGS_UART1_8LINE_UART1_8_LINE (1<<7)
+#define CFG_REGS_DAI_MASK (3<<8)
+#define CFG_REGS_DAI_I2S (0<<8)
+#define CFG_REGS_DAI_DAI (1<<8)
+#define CFG_REGS_DAI_DAI_SIMPLE (2<<8)
+#define CFG_REGS_KEYIN_3_MASK (1<<10)
+#define CFG_REGS_KEYIN_3_SPI2_CS_1 (0<<10)
+#define CFG_REGS_KEYIN_3_KEYIN_3 (1<<10)
+#define CFG_REGS_LPSCO_1_MASK (1<<11)
+#define CFG_REGS_LPSCO_1_KEYIN_4 (0<<11)
+#define CFG_REGS_LPSCO_1_LPSCO_1 (1<<11)
+#define CFG_REGS_SPI1_CS_2_MASK (1<<12)
+#define CFG_REGS_SPI1_CS_2_KEYIN_1 (0<<12)
+#define CFG_REGS_SPI1_CS_2_SPI1_CS_2 (1<<12)
+#define CFG_REGS_I2S_DI_2_MASK (1<<13)
+#define CFG_REGS_I2S_DI_2_KEYIN_2 (0<<13)
+#define CFG_REGS_I2S_DI_2_I2S_DI_2 (1<<13)
+#define CFG_REGS_TCO_0_MASK (1<<14)
+#define CFG_REGS_TCO_0_KEYOUT_0 (0<<14)
+#define CFG_REGS_TCO_0_TCO_0 (1<<14)
+#define CFG_REGS_TCO_1_MASK (1<<15)
+#define CFG_REGS_TCO_1_KEYOUT_1 (0<<15)
+#define CFG_REGS_TCO_1_TCO_1 (1<<15)
+#define CFG_REGS_TCO_2_MASK (1<<16)
+#define CFG_REGS_TCO_2_KEYOUT_2 (0<<16)
+#define CFG_REGS_TCO_2_TCO_2 (1<<16)
+#define CFG_REGS_KEYOUT_3_4_MASK (1<<17)
+#define CFG_REGS_KEYOUT_3_4_I2C3 (0<<17)
+#define CFG_REGS_KEYOUT_3_4_KEYOUT_3_4 (1<<17)
+#define CFG_REGS_KEYOUT_6_MASK (1<<18)
+#define CFG_REGS_KEYOUT_6_UART2_RTS (0<<18)
+#define CFG_REGS_KEYOUT_6_KEYOUT_6 (1<<18)
+#define CFG_REGS_KEYOUT_7_MASK (1<<19)
+#define CFG_REGS_KEYOUT_7_UART1_RTS (0<<19)
+#define CFG_REGS_KEYOUT_7_KEYOUT_7 (1<<19)
+#define CFG_REGS_GPO_0_MASK (3<<20)
+#define CFG_REGS_GPO_0_GPO_0 (0<<20)
+#define CFG_REGS_GPO_0_PWT (1<<20)
+#define CFG_REGS_GPO_0_KEYIN_5 (2<<20)
+#define CFG_REGS_GPO_1_MASK (3<<22)
+#define CFG_REGS_GPO_1_GPO_1 (0<<22)
+#define CFG_REGS_GPO_1_LPG (1<<22)
+#define CFG_REGS_GPO_1_KEYOUT_5 (2<<22)
+#define CFG_REGS_GPO_2_MASK (3<<24)
+#define CFG_REGS_GPO_2_GPO_2 (0<<24)
+#define CFG_REGS_GPO_2_PWL_1 (1<<24)
+#define CFG_REGS_GPO_2_CLK_32K (2<<24)
+#define CFG_REGS_GPO_3_MASK (1<<26)
+#define CFG_REGS_GPO_3_LCD_CS_1 (0<<26)
+#define CFG_REGS_GPO_3_GPO_3 (1<<26)
+#define CFG_REGS_GPO_4_MASK (1<<27)
+#define CFG_REGS_GPO_4_LCD_CS_0 (0<<27)
+#define CFG_REGS_GPO_4_GPO_4 (1<<27)
+#define CFG_REGS_CLK_OUT_MASK (1<<28)
+#define CFG_REGS_CLK_OUT_HST_CLK (0<<28)
+#define CFG_REGS_CLK_OUT_CLK_OUT (1<<28)
+#define CFG_REGS_DEBUG_MASK (1<<29)
+#define CFG_REGS_DEBUG_NONE (0<<29)
+#define CFG_REGS_DEBUG_DEBUG_MONITOR (1<<29)
+#define CFG_REGS_AP_SPI1_MASK (1<<30)
+#define CFG_REGS_AP_SPI1_BB_SPI1 (0<<30)
+#define CFG_REGS_AP_SPI1_AP_SPI1 (1<<30)
+#define CFG_REGS_RGB_CAM_MASK (1<<31)
+#define CFG_REGS_RGB_CAM_DISABLE (0<<31)
+#define CFG_REGS_RGB_CAM_ENABLE (1<<31)
+
+//IO_Drive1_Select
+#define CFG_REGS_DDR_DRIVE_MASK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_WEAK (7<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_WEAK (6<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_STRONG (5<<0)
+#define CFG_REGS_DDR_DRIVE_FAST_AND_MOST_STRONG (4<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_WEAK (3<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_WEAK (2<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_STRONG (1<<0)
+#define CFG_REGS_DDR_DRIVE_SLOW_AND_MOST_STRONG (0<<0)
+#define CFG_REGS_PSRAM1_DRIVE_MASK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_WEAK (7<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_WEAK (6<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_STRONG (5<<3)
+#define CFG_REGS_PSRAM1_DRIVE_FAST_AND_MOST_STRONG (4<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_WEAK (3<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_WEAK (2<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_STRONG (1<<3)
+#define CFG_REGS_PSRAM1_DRIVE_SLOW_AND_MOST_STRONG (0<<3)
+#define CFG_REGS_PSRAM2_DRIVE_MASK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_WEAK (7<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_WEAK (6<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_STRONG (5<<6)
+#define CFG_REGS_PSRAM2_DRIVE_FAST_AND_MOST_STRONG (4<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_WEAK (3<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_WEAK (2<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_STRONG (1<<6)
+#define CFG_REGS_PSRAM2_DRIVE_SLOW_AND_MOST_STRONG (0<<6)
+#define CFG_REGS_NFLSH_DRIVE_MASK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_WEAK (7<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_WEAK (6<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_STRONG (5<<9)
+#define CFG_REGS_NFLSH_DRIVE_FAST_AND_MOST_STRONG (4<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_WEAK (3<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_WEAK (2<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_STRONG (1<<9)
+#define CFG_REGS_NFLSH_DRIVE_SLOW_AND_MOST_STRONG (0<<9)
+#define CFG_REGS_LCD1_DRIVE_MASK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_WEAK (7<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_WEAK (6<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_STRONG (5<<12)
+#define CFG_REGS_LCD1_DRIVE_FAST_AND_MOST_STRONG (4<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_WEAK (3<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_WEAK (2<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_STRONG (1<<12)
+#define CFG_REGS_LCD1_DRIVE_SLOW_AND_MOST_STRONG (0<<12)
+#define CFG_REGS_LCD2_DRIVE_MASK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_WEAK (7<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_WEAK (6<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_STRONG (5<<15)
+#define CFG_REGS_LCD2_DRIVE_FAST_AND_MOST_STRONG (4<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_WEAK (3<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_WEAK (2<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_STRONG (1<<15)
+#define CFG_REGS_LCD2_DRIVE_SLOW_AND_MOST_STRONG (0<<15)
+#define CFG_REGS_SDAT1_DRIVE_MASK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_WEAK (7<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_WEAK (6<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_STRONG (5<<18)
+#define CFG_REGS_SDAT1_DRIVE_FAST_AND_MOST_STRONG (4<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_WEAK (3<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_WEAK (2<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_STRONG (1<<18)
+#define CFG_REGS_SDAT1_DRIVE_SLOW_AND_MOST_STRONG (0<<18)
+#define CFG_REGS_SDAT2_DRIVE_MASK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_WEAK (7<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_WEAK (6<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_STRONG (5<<21)
+#define CFG_REGS_SDAT2_DRIVE_FAST_AND_MOST_STRONG (4<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_WEAK (3<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_WEAK (2<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_STRONG (1<<21)
+#define CFG_REGS_SDAT2_DRIVE_SLOW_AND_MOST_STRONG (0<<21)
+#define CFG_REGS_CAM_DRIVE_MASK (3<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_STRONG (0<<24)
+#define CFG_REGS_CAM_DRIVE_STRONG (1<<24)
+#define CFG_REGS_CAM_DRIVE_WEAK (2<<24)
+#define CFG_REGS_CAM_DRIVE_MOST_WEAK (3<<24)
+#define CFG_REGS_SIM1_DRIVE_MASK (3<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_STRONG (0<<26)
+#define CFG_REGS_SIM1_DRIVE_STRONG (1<<26)
+#define CFG_REGS_SIM1_DRIVE_WEAK (2<<26)
+#define CFG_REGS_SIM1_DRIVE_MOST_WEAK (3<<26)
+#define CFG_REGS_SIM2_DRIVE_MASK (3<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_STRONG (0<<28)
+#define CFG_REGS_SIM2_DRIVE_STRONG (1<<28)
+#define CFG_REGS_SIM2_DRIVE_WEAK (2<<28)
+#define CFG_REGS_SIM2_DRIVE_MOST_WEAK (3<<28)
+#define CFG_REGS_SIM3_DRIVE_MASK (3<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_STRONG (0<<30)
+#define CFG_REGS_SIM3_DRIVE_STRONG (1<<30)
+#define CFG_REGS_SIM3_DRIVE_WEAK (2<<30)
+#define CFG_REGS_SIM3_DRIVE_MOST_WEAK (3<<30)
+
+//IO_Drive2_Select
+#define CFG_REGS_GPIO_DRIVE_MASK (3<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_STRONG (0<<0)
+#define CFG_REGS_GPIO_DRIVE_STRONG (1<<0)
+#define CFG_REGS_GPIO_DRIVE_WEAK (2<<0)
+#define CFG_REGS_GPIO_DRIVE_MOST_WEAK (3<<0)
+#define CFG_REGS_CAM2_DRIVE_MASK (3<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_STRONG (0<<2)
+#define CFG_REGS_CAM2_DRIVE_STRONG (1<<2)
+#define CFG_REGS_CAM2_DRIVE_WEAK (2<<2)
+#define CFG_REGS_CAM2_DRIVE_MOST_WEAK (3<<2)
+
+//RAM_DRIVE
+#define CFG_REGS_MBRAM_A(n) (((n)&7)<<0)
+#define CFG_REGS_MBRAM_A_MASK (7<<0)
+#define CFG_REGS_MBRAM_A_SHIFT (0)
+#define CFG_REGS_MBRAM_W(n) (((n)&3)<<3)
+#define CFG_REGS_MBRAM_W_MASK (3<<3)
+#define CFG_REGS_MBRAM_W_SHIFT (3)
+#define CFG_REGS_MBRAM_R (1<<5)
+#define CFG_REGS_BBRAM_A(n) (((n)&7)<<6)
+#define CFG_REGS_BBRAM_A_MASK (7<<6)
+#define CFG_REGS_BBRAM_A_SHIFT (6)
+#define CFG_REGS_BBRAM_W(n) (((n)&3)<<9)
+#define CFG_REGS_BBRAM_W_MASK (3<<9)
+#define CFG_REGS_BBRAM_W_SHIFT (9)
+#define CFG_REGS_BBRAM_R (1<<11)
+#define CFG_REGS_XP_A(n) (((n)&7)<<12)
+#define CFG_REGS_XP_A_MASK (7<<12)
+#define CFG_REGS_XP_A_SHIFT (12)
+#define CFG_REGS_XP_W(n) (((n)&3)<<15)
+#define CFG_REGS_XP_W_MASK (3<<15)
+#define CFG_REGS_XP_W_SHIFT (15)
+#define CFG_REGS_XP_R (1<<17)
+#define CFG_REGS_BP_A(n) (((n)&7)<<18)
+#define CFG_REGS_BP_A_MASK (7<<18)
+#define CFG_REGS_BP_A_SHIFT (18)
+#define CFG_REGS_BP_W(n) (((n)&3)<<21)
+#define CFG_REGS_BP_W_MASK (3<<21)
+#define CFG_REGS_BP_W_SHIFT (21)
+#define CFG_REGS_BP_R (1<<23)
+#define CFG_REGS_EV_A(n) (((n)&7)<<24)
+#define CFG_REGS_EV_A_MASK (7<<24)
+#define CFG_REGS_EV_A_SHIFT (24)
+#define CFG_REGS_EV_W(n) (((n)&3)<<27)
+#define CFG_REGS_EV_W_MASK (3<<27)
+#define CFG_REGS_EV_W_SHIFT (27)
+#define CFG_REGS_EV_R (1<<29)
+
+//H2X_AP_Offset
+#define CFG_REGS_H2X_AP_OFFSET(n) (((n)&0xFF)<<0)
+#define CFG_REGS_H2X_AP_OFFSET_MASK (0xFF<<0)
+#define CFG_REGS_H2X_AP_OFFSET_SHIFT (0)
+
+//audio_pd_set
+#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+#define CFG_REGS_AU_REF_PD_N (1<<1)
+#define CFG_REGS_AU_MIC_PD_N (1<<2)
+#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+#define CFG_REGS_AU_AD_PD_N (1<<4)
+#define CFG_REGS_AU_DAC_PD_N (1<<5)
+#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_pd_clr
+//#define CFG_REGS_AU_DEEP_PD_N (1<<0)
+//#define CFG_REGS_AU_REF_PD_N (1<<1)
+//#define CFG_REGS_AU_MIC_PD_N (1<<2)
+//#define CFG_REGS_AU_AUXMIC_PD_N (1<<3)
+//#define CFG_REGS_AU_AD_PD_N (1<<4)
+//#define CFG_REGS_AU_DAC_PD_N (1<<5)
+//#define CFG_REGS_AU_DAC_RESET_N (1<<8)
+//#define CFG_REGS_AU_PLL_PU (1<<16)
+
+//audio_sel_cfg
+#define CFG_REGS_AU_AUXMIC_SEL (1<<0)
+#define CFG_REGS_AU_SPK_SEL (1<<1)
+#define CFG_REGS_AU_SPK_MONO_SEL (1<<2)
+#define CFG_REGS_AU_RCV_SEL (1<<3)
+#define CFG_REGS_AU_HEAD_SEL (1<<4)
+
+//audio_mic_cfg
+#define CFG_REGS_AU_MIC_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_MIC_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_MIC_GAIN_SHIFT (0)
+#define CFG_REGS_AU_MIC_MUTE_N (1<<4)
+
+//audio_spk_cfg
+#define CFG_REGS_AU_SPK_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_SPK_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_SPK_GAIN_SHIFT (0)
+#define CFG_REGS_AU_SPK_MUTE_N (1<<4)
+#define CFG_REGS_AU_SPK_VOC_GAIN_EN (1<<8)
+
+//audio_rcv_gain
+#define CFG_REGS_AU_RCV_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_RCV_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_RCV_GAIN_SHIFT (0)
+#define CFG_REGS_AU_RCV_VOC_GAIN_EN (1<<8)
+
+//audio_head_gain
+#define CFG_REGS_AU_HEAD_GAIN(n) (((n)&15)<<0)
+#define CFG_REGS_AU_HEAD_GAIN_MASK (15<<0)
+#define CFG_REGS_AU_HEAD_GAIN_SHIFT (0)
+#define CFG_REGS_AU_HEAD_VOC_GAIN_EN (1<<8)
+
+//TSC_DATA
+#define CFG_REGS_TSC_X_VALUE_BIT(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_MASK (0x3FF<<0)
+#define CFG_REGS_TSC_X_VALUE_BIT_SHIFT (0)
+#define CFG_REGS_TSC_X_VALUE_VALID (1<<10)
+#define CFG_REGS_TSC_Y_VALUE_BIT(n) (((n)&0x3FF)<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_MASK (0x3FF<<11)
+#define CFG_REGS_TSC_Y_VALUE_BIT_SHIFT (11)
+#define CFG_REGS_TSC_Y_VALUE_VALID (1<<21)
+
+//GPADC_DATA_CH
+#define CFG_REGS_GPADC_DATA(n) (((n)&0x3FF)<<0)
+#define CFG_REGS_GPADC_DATA_MASK (0x3FF<<0)
+#define CFG_REGS_GPADC_DATA_SHIFT (0)
+#define CFG_REGS_GPADC_VALID (1<<10)
+#define CFG_REGS_GPADC_CH_EN (1<<31)
+
+//Alt_mux_select2
+#define CFG_REGS_UART1_SDIO2_MASK (1<<0)
+#define CFG_REGS_UART1_SDIO2_SDIO2 (0<<0)
+#define CFG_REGS_UART1_SDIO2_UART1 (1<<0)
+#define CFG_REGS_JTAG_EN_MASK (1<<1)
+#define CFG_REGS_JTAG_EN_DISABLE (0<<1)
+#define CFG_REGS_JTAG_EN_ENABLE (1<<1)
+#define CFG_REGS_LCD_RGB_17_16_MASK (1<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_CS (0<<2)
+#define CFG_REGS_LCD_RGB_17_16_LCD_DATA (1<<2)
+#define CFG_REGS_CSI2_2_MASK (3<<3)
+#define CFG_REGS_CSI2_2_PARALLEL_CAM (0<<3)
+#define CFG_REGS_CSI2_2_CSI2 (1<<3)
+#define CFG_REGS_CSI2_2_SPI_CAM (2<<3)
+#define CFG_REGS_RGB_CAM_2_MASK (1<<5)
+#define CFG_REGS_RGB_CAM_2_DISABLE (0<<5)
+#define CFG_REGS_RGB_CAM_2_ENABLE (1<<5)
+#define CFG_REGS_MAC_EN_MASK (1<<6)
+#define CFG_REGS_MAC_EN_DISABLE (0<<6)
+#define CFG_REGS_MAC_EN_ENABLE (1<<6)
+#define CFG_REGS_IOMUX_CFG_RESERVED(n) (((n)&0x1FFFFFF)<<7)
+
+//AP_GPIO_E_Mode
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_MASK (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_SHIFT (0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_ALT (0<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SCL_GPIO (1<<0)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_MASK (1<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_SHIFT (1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_ALT (0<<1)
+#define CFG_REGS_MODE_AP_PIN_I2CBB_SDA_GPIO (1<<1)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_MASK (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_SHIFT (2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_ALT (0<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_RST_GPIO (1<<2)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_MASK (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_SHIFT (3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_ALT (0<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PDN_GPIO (1<<3)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_MASK (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_SHIFT (4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_ALT (0<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_CLK_GPIO (1<<4)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_MASK (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_SHIFT (5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_ALT (0<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_VSYNC_GPIO (1<<5)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_MASK (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_SHIFT (6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_ALT (0<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_HREF_GPIO (1<<6)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_MASK (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_SHIFT (7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_ALT (0<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_PCLK_GPIO (1<<7)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0 (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_MASK (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_SHIFT (8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_ALT (0<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_0_GPIO (1<<8)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1 (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_MASK (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_SHIFT (9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_ALT (0<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_1_GPIO (1<<9)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2 (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_MASK (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_SHIFT (10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_ALT (0<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_2_GPIO (1<<10)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3 (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_MASK (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_SHIFT (11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_ALT (0<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_3_GPIO (1<<11)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4 (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_MASK (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_SHIFT (12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_ALT (0<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_4_GPIO (1<<12)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5 (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_MASK (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_SHIFT (13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_ALT (0<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_5_GPIO (1<<13)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6 (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_MASK (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_SHIFT (14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_ALT (0<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_6_GPIO (1<<14)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7 (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_MASK (1<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_SHIFT (15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_ALT (0<<15)
+#define CFG_REGS_MODE_AP_PIN_CAM2_DATA_7_GPIO (1<<15)
+#define CFG_REGS_AP_GPIO_E_MODE(n) (((n)&0xFFFF)<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_MASK (0xFFFF<<0)
+#define CFG_REGS_AP_GPIO_E_MODE_SHIFT (0)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_gpio.h b/arch/arm/include/asm/arch-rda/reg_gpio.h
new file mode 100644
index 0000000000..e26f099ec3
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_gpio.h
@@ -0,0 +1,141 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2013, RDA Microelectronics.
+// All Rights Reserved
+//
+// This source code is the property of RDA Microelectronics and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA Microelectronics.
+//
+//==============================================================================
+//
+// THIS FILE WAS GENERATED FROM ITS CORRESPONDING XML VERSION WITH COOLXML.
+//
+// !!! PLEASE DO NOT EDIT !!!
+//
+// $HeadURL$
+// $Author$
+// $Date$
+// $Revision$
+//
+//==============================================================================
+//
+/// @file
+//
+//==============================================================================
+
+#ifndef _REG_GPIO_H_
+#define _REG_GPIO_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define IDX_GPIO_DCON (0)
+#define IDX_GPO_CHG (0)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// GPIO_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 gpio_oen_val; //0x00000000
+ REG32 gpio_oen_set_out; //0x00000004
+ REG32 gpio_oen_set_in; //0x00000008
+ REG32 gpio_val; //0x0000000C
+ REG32 gpio_set; //0x00000010
+ REG32 gpio_clr; //0x00000014
+ REG32 gpint_ctrl_set; //0x00000018
+ REG32 gpint_ctrl_clr; //0x0000001C
+ REG32 int_clr; //0x00000020
+ REG32 int_status; //0x00000024
+ REG32 chg_ctrl; //0x00000028
+ REG32 chg_cmd; //0x0000002C
+ REG32 gpo_set; //0x00000030
+ REG32 gpo_clr; //0x00000034
+} HWP_GPIO_T;
+
+#define hwp_apGpioA ((HWP_GPIO_T*) (RDA_GPIO_A_BASE))
+#define hwp_apGpioB ((HWP_GPIO_T*) (RDA_GPIO_B_BASE))
+#define hwp_apGpioD ((HWP_GPIO_T*) (RDA_GPIO_D_BASE))
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H)
+#define hwp_apGpioE ((HWP_GPIO_T*) (RDA_GPIO_E_BASE))
+#endif
+#define hwp_gpio ((HWP_GPIO_T*) (RDA_GPIO_BASE))
+
+
+//gpio_oen_val
+#define GPIO_OEN_VAL(n) (((n)&0xFFFFFFFF)<<0)
+#define GPIO_OEN_VAL_INPUT (0x1<<0)
+#define GPIO_OEN_VAL_OUTPUT (0x0<<0)
+
+//gpio_oen_set_out
+#define GPIO_OEN_SET_OUT(n) (((n)&0xFFFFFFFF)<<0)
+
+//gpio_oen_set_in
+#define GPIO_OEN_SET_IN(n) (((n)&0xFFFFFFFF)<<0)
+
+//gpio_val
+#define GPIO_GPIO_VAL(n) (((n)&0xFFFFFFFF)<<0)
+
+//gpio_set
+#define GPIO_GPIO_SET(n) (((n)&0xFFFFFFFF)<<0)
+
+//gpio_clr
+#define GPIO_GPIO_CLR(n) (((n)&0xFFFFFFFF)<<0)
+
+//gpint_ctrl_set
+#define GPIO_GPINT_R_SET(n) (((n)&0xFF)<<0)
+#define GPIO_GPINT_F_SET(n) (((n)&0xFF)<<8)
+#define GPIO_DBN_EN_SET(n) (((n)&0xFF)<<16)
+#define GPIO_GPINT_MODE_SET(n) (((n)&0xFF)<<24)
+
+//gpint_ctrl_clr
+#define GPIO_GPINT_R_CLR(n) (((n)&0xFF)<<0)
+#define GPIO_GPINT_F_CLR(n) (((n)&0xFF)<<8)
+#define GPIO_DBN_EN_CLR(n) (((n)&0xFF)<<16)
+#define GPIO_GPINT_MODE_CLR(n) (((n)&0xFF)<<24)
+
+//int_clr
+#define GPIO_GPINT_CLR(n) (((n)&0xFF)<<0)
+
+//int_status
+#define GPIO_GPINT_STATUS(n) (((n)&0xFF)<<0)
+#define GPIO_GPINT_STATUS_MASK (0xFF<<0)
+#define GPIO_GPINT_STATUS_SHIFT (0)
+
+//chg_ctrl
+#define GPIO_OUT_TIME(n) (((n)&15)<<0)
+#define GPIO_WAIT_TIME(n) (((n)&0x3F)<<4)
+#define GPIO_INT_MODE_L2H (0<<16)
+#define GPIO_INT_MODE_H2L (1<<16)
+#define GPIO_INT_MODE_RR (3<<16)
+
+//chg_cmd
+#define GPIO_DCON_MODE_SET (1<<0)
+#define GPIO_CHG_MODE_SET (1<<4)
+#define GPIO_DCON_MODE_CLR (1<<8)
+#define GPIO_CHG_MODE_CLR (1<<12)
+#define GPIO_CHG_DOWN (1<<24)
+
+//gpo_set
+#define GPIO_GPO_SET(n) (((n)&31)<<0)
+
+//gpo_clr
+#define GPIO_GPO_CLR(n) (((n)&31)<<0)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_i2c.h b/arch/arm/include/asm/arch-rda/reg_i2c.h
new file mode 100644
index 0000000000..8b39b9f527
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_i2c.h
@@ -0,0 +1,93 @@
+#ifndef _REG_I2C_H_
+#define _REG_I2C_H_
+
+//#include "iomap.h"
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// ============================================================================
+// I2C_MASTER_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 CTRL; //0x00000000
+ REG32 STATUS; //0x00000004
+ REG32 TXRX_BUFFER; //0x00000008
+ REG32 CMD; //0x0000000C
+ REG32 IRQ_CLR; //0x00000010
+ REG32 CTRL1; //0x00000014
+} HWP_I2C_MASTER_T;
+
+#define hwp_i2cMaster ((HWP_I2C_MASTER_T*)(RDA_I2C1_BASE))
+#define hwp_i2cMaster2 ((HWP_I2C_MASTER_T*)(RDA_I2C2_BASE))
+#define hwp_i2cMaster3 ((HWP_I2C_MASTER_T*)(RDA_I2C3_BASE))
+
+//CTRL
+#define I2C_MASTER_EN (1<<0)
+#define I2C_MASTER_CLEAR_FIFO (1<<7)
+#define I2C_MASTER_IRQ_MASK (1<<8)
+#define I2C_MASTER_TX_FIFO_THRESHOLD(n) (((n)&0x1F)<<1)
+#define I2C_MASTER_TX_FIFO_THRESHOLD_MASK (0x1F<<1)
+#define I2C_MASTER_RX_READ_NUM(n) (((n)&0x1F)<<9)
+#define I2C_MASTER_RX_READ_NUM_MASK (0x1F <<9)
+#define I2C_MASTER_TIMEOUT_THRESHOLD_MASK (0x3<<14)
+#define I2C_MASTER_TIMEOUT_THRESHOLD_SHIFT 14
+#define I2C_MASTER_CLOCK_PRESCALE(n) (((n)&0xFFFF)<<16)
+#define I2C_MASTER_CLOCK_PRESCALE_MASK (0xFFFF<<16)
+
+//CTRL1
+#define I2C_MASTER_DMA_MODE (1 << 0)
+#define I2C_MASTER_TXFIFO_OVER_IRQ_MASK (1<<1)
+#define I2C_MASTER_TXFIFO_UNDER_IRQ_MASK (1<<2)
+#define I2C_MASTER_RXFIFO_OVER_IRQ_MASK (1<<3)
+#define I2C_MASTER_RXFIFO_UNDER_IRQ_MASK (1<<4)
+#define I2C_MASTER_TXFIFO_EMPTY_IRQ_MASK (1<<5)
+#define I2C_MASTER_RXFIFO_NUM_IRQ_MASK (1<<6)
+#define I2C_MASTER_TX_DMA_IRQ_MASK (1<<7)
+#define I2C_MASTER_RX_DMA_IRQ_MASK (1<<8)
+#define I2C_MASTER_TX_DMA_COUNTER(n) (((n)&0x7FF)<< 9)
+#define I2C_MASTER_TX_DMA_COUNTER_MASK (0x7FF<<9)
+#define I2C_MASTER_RX_DMA_COUNTER(n) (((n)&0x7FF)<< 20)
+#define I2C_MASTER_RX_DMA_COUNTER_MASK (0x7FF<<20)
+
+//STATUS
+#define I2C_MASTER_IRQ_CAUSE (1<<0)
+#define I2C_MASTER_IRQ_TX_DMA (1<<1)
+#define I2C_MASTER_IRQ_RX_DMA (1<<2)
+#define I2C_MASTER_IRQ_STATUS (1<<4)
+#define I2C_MASTER_IRQ_TX_DMA_DONE (1<<5)
+#define I2C_MASTER_IRQ_RX_DMA_DONE (1<<6)
+#define I2C_MASTER_TIP (1<<8)
+#define I2C_MASTER_AL (1<<12)
+#define I2C_MASTER_BUSY (1<<16)
+#define I2C_MASTER_IRQ_RX_OVF (1<<17)
+#define I2C_MASTER_IRQ_RX_UDF (1<<18)
+#define I2C_MASTER_IRQ_TX_OVF (1<<19)
+#define I2C_MASTER_IRQ_TX_UDF (1<<20)
+
+//#define I2C_MASTER_RXACK (1<<20)
+#define I2C_MASTER_RX_FIFO_DATA_NUM(n) (((n)&0x1F)<<21)
+#define I2C_MASTER_RX_FIFO_DATA_NUM_MASK (0x1F<<21)
+#define I2C_MASTER_TX_FIFO_FREE_NUM(n) (((n)&0x1F)<<26)
+#define I2C_MASTER_TX_FIFO_FREE_NUM_MASK (0x1F<<26)
+#define I2C_MASTER_TIMEOUT (1<<31)
+
+//TXRX_BUFFER
+#define I2C_MASTER_TX_DATA(n) (((n)&0xFF)<<0)
+#define I2C_MASTER_RX_DATA(n) (((n)&0xFF)<<0)
+
+//CMD
+#define I2C_MASTER_ACK (1<<0)
+#define I2C_MASTER_RD (1<<4)
+#define I2C_MASTER_STO (1<<8)
+#define I2C_MASTER_FORCE_STO (1<<9)
+#define I2C_MASTER_WR (1<<12)
+#define I2C_MASTER_STA (1<<16)
+
+//IRQ_CLR
+#define I2C_MASTER_IRQ_CLR (1<<0)
+
+#endif /* _REG_I2C_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_ifc.h b/arch/arm/include/asm/arch-rda/reg_ifc.h
new file mode 100644
index 0000000000..f5b69ccf98
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_ifc.h
@@ -0,0 +1,5 @@
+#ifdef CONFIG_MACH_RDA8810
+#include "reg_ifc_v1.h"
+#else
+#include "reg_ifc_v3.h"
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_ifc_v1.h b/arch/arm/include/asm/arch-rda/reg_ifc_v1.h
new file mode 100644
index 0000000000..e37786fc5d
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_ifc_v1.h
@@ -0,0 +1,106 @@
+#ifndef _REG_IFC_H_
+#define _REG_IFC_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define SYS_IFC_ADDR_ALIGN (0)
+#define SYS_IFC_TC_LEN (23)
+#define SYS_IFC_STD_CHAN_NB 7 //(SYS_IFC_NB_STD_CHANNEL)
+#define SYS_IFC_RFSPI_CHAN (1)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_IFC_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 get_ch; //0x00000000
+ REG32 dma_status; //0x00000004
+ REG32 debug_status; //0x00000008
+ REG32 Reserved_0000000C; //0x0000000C
+ struct
+ {
+ REG32 control; //0x00000010
+ REG32 status; //0x00000014
+ REG32 start_addr; //0x00000018
+ REG32 tc; //0x0000001C
+ } std_ch[SYS_IFC_STD_CHAN_NB];
+ // REG32 Reserved_00000080; //0x00000080
+ REG32 ch_rfspi_control; //0x00000080
+ REG32 ch_rfspi_status; //0x00000084
+ REG32 ch_rfspi_start_addr; //0x00000088
+ REG32 ch_rfspi_end_addr; //0x0000008C
+ REG32 ch_rfspi_tc; //0x00000090
+} HWP_SYS_IFC_T;
+
+#define hwp_sysIfc ((HWP_SYS_IFC_T*)(RDA_IFC_BASE))
+
+
+//get_ch
+#define SYS_IFC_CH_TO_USE(n) (((n)&15)<<0)
+#define SYS_IFC_CH_TO_USE_MASK (15<<0)
+#define SYS_IFC_CH_TO_USE_SHIFT (0)
+
+//dma_status
+#define SYS_IFC_CH_ENABLE(n) (((n)&0xFF)<<0)
+#define SYS_IFC_CH_BUSY(n) (((n)&0x7F)<<16)
+
+//debug_status
+#define SYS_IFC_DBG_STATUS (1<<0)
+
+//control
+#define SYS_IFC_ENABLE (1<<0)
+#define SYS_IFC_DISABLE (1<<1)
+#define SYS_IFC_CH_RD_HW_EXCH (1<<2)
+#define SYS_IFC_CH_WR_HW_EXCH (1<<3)
+#define SYS_IFC_AUTODISABLE (1<<4)
+#define SYS_IFC_SIZE(n) (((n)&3)<<5)
+#define SYS_IFC_SIZE_MASK (3<<5)
+#define SYS_IFC_SIZE_SHIFT (5)
+#define SYS_IFC_SIZE_BYTE (0<<5)
+#define SYS_IFC_SIZE_HALF_WORD (1<<5)
+#define SYS_IFC_SIZE_WORD (2<<5)
+#define SYS_IFC_REQ_SRC(n) (((n)&31)<<8)
+#define SYS_IFC_REQ_SRC_MASK (31<<8)
+#define SYS_IFC_REQ_SRC_SHIFT (8)
+#define SYS_IFC_FLUSH (1<<16)
+
+//status
+//#define SYS_IFC_ENABLE (1<<0)
+#define SYS_IFC_FIFO_EMPTY (1<<4)
+
+//start_addr
+#define SYS_IFC_START_ADDR(n) (((n)&0x3FFFFFF)<<0)
+
+//tc
+#define SYS_IFC_TC(n) (((n)&0x7FFFFF)<<0)
+
+//ch_rfspi_control
+//#define SYS_IFC_ENABLE (1<<0)
+//#define SYS_IFC_DISABLE (1<<1)
+
+//ch_rfspi_status
+//#define SYS_IFC_ENABLE (1<<0)
+//#define SYS_IFC_FIFO_EMPTY (1<<4)
+#define SYS_IFC_FIFO_LEVEL(n) (((n)&31)<<8)
+
+//ch_rfspi_start_addr
+#define SYS_IFC_START_AHB_ADDR(n) (((n)&0x3FFFFFF)<<0)
+
+//ch_rfspi_end_addr
+#define SYS_IFC_END_AHB_ADDR(n) (((n)&0x3FFFFFF)<<0)
+
+//ch_rfspi_tc
+//#define SYS_IFC_TC(n) (((n)&0x3FFF)<<0)
+
+#endif /* _REG_IFC_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_ifc_v3.h b/arch/arm/include/asm/arch-rda/reg_ifc_v3.h
new file mode 100644
index 0000000000..ecbb137aba
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_ifc_v3.h
@@ -0,0 +1,207 @@
+#ifndef _REG_IFC_H_
+#define _REG_IFC_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define SYS_IFC_STD_CHAN_NB (8) //(SYS_IFC_NB_STD_CHANNEL)
+#define SYS_IFC_STD_CHAN_NB_SCATTER (3)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_IFC_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 get_ch; //0x00000000
+ REG32 dma_status; //0x00000004
+ REG32 debug_status; //0x00000008
+ REG32 Reserved_0000000C; //0x0000000C
+ union
+ {
+ struct
+ {
+ REG32 control; //0x00000010
+ REG32 status; //0x00000014
+ REG32 start_addr1; //0x00000018
+ REG32 tc1; //0x0000001C
+ REG32 start_addr2; //0x00000020
+ REG32 tc2; //0x00000024
+ REG32 start_addr3; //0x00000028
+ REG32 tc3; //0x0000002C
+ REG32 start_addr4; //0x00000030
+ REG32 tc4; //0x00000034
+ REG32 start_addr5; //0x00000038
+ REG32 tc5; //0x0000003C
+ REG32 start_addr6; //0x00000040
+ REG32 tc6; //0x00000044
+ REG32 start_addr7; //0x00000048
+ REG32 tc7; //0x0000004C
+ REG32 start_addr8; //0x00000050
+ REG32 tc8; //0x00000054
+ REG32 Reserved_00000048[14]; //0x00000048
+ } std_ch_scatter[SYS_IFC_STD_CHAN_NB_SCATTER];
+ struct
+ {
+ REG32 control; //0x00000190
+ REG32 status; //0x00000194
+ REG32 start_addr; //0x00000198
+ REG32 tc; //0x0000019C
+ REG32 Reserved_00000010[28]; //0x00000010
+ } std_ch[SYS_IFC_STD_CHAN_NB];
+ };
+} HWP_SYS_IFC_T;
+
+#define hwp_sysIfc ((HWP_SYS_IFC_T*)(RDA_IFC_BASE))
+
+
+//get_ch
+#define SYS_IFC_CH_TO_USE(n) (((n)&15)<<0)
+#define SYS_IFC_CH_TO_USE_MASK (15<<0)
+#define SYS_IFC_CH_TO_USE_SHIFT (0)
+
+//dma_status
+#define SYS_IFC_CH_ENABLE(n) (((n)&0xFF)<<0)
+#define SYS_IFC_CH_BUSY(n) (((n)&0x7F)<<16)
+
+//debug_status
+#define SYS_IFC_DBG_STATUS (1<<0)
+
+//control
+#define SYS_IFC_ENABLE (1<<0)
+#define SYS_IFC_DISABLE (1<<1)
+#define SYS_IFC_CH_RD_HW_EXCH (1<<2)
+#define SYS_IFC_CH_WR_HW_EXCH (1<<3)
+#define SYS_IFC_AUTODISABLE (1<<4)
+#define SYS_IFC_SIZE(n) (((n)&3)<<5)
+#define SYS_IFC_SIZE_MASK (3<<5)
+#define SYS_IFC_SIZE_SHIFT (5)
+#define SYS_IFC_SIZE_BYTE (0<<5)
+#define SYS_IFC_SIZE_HALF_WORD (1<<5)
+#define SYS_IFC_SIZE_WORD (2<<5)
+#define SYS_IFC_REQ_SRC(n) (((n)&31)<<8)
+#define SYS_IFC_REQ_SRC_MASK (31<<8)
+#define SYS_IFC_REQ_SRC_SHIFT (8)
+#define SYS_IFC_REQ_SRC_SYS_ID_TX_SCI1 (0<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_RX_SCI1 (1<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_TX_SCI2 (2<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_RX_SCI2 (3<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_TX_SCI3 (4<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_RX_SCI3 (5<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_TX_SPI1 (6<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_RX_SPI1 (7<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_TX_SPI2 (8<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_RX_SPI2 (9<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_TX_I2C (10<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_RX_I2C (11<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_TX_DEBUG_UART (12<<8)
+#define SYS_IFC_REQ_SRC_SYS_ID_RX_DEBUG_UART (13<<8)
+#define SYS_IFC_FLUSH (1<<16)
+#define SYS_IFC_ADDR_CNT(n) (((n)&7)<<17)
+
+//status
+//#define SYS_IFC_ENABLE (1<<0)
+#define SYS_IFC_FIFO_EMPTY (1<<4)
+
+//start_addr1
+#define SYS_IFC_START_ADDR1(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc1
+#define SYS_IFC_TC1(n) (((n)&0x7FFFFF)<<0)
+
+//start_addr2
+#define SYS_IFC_START_ADDR2(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc2
+#define SYS_IFC_TC2(n) (((n)&0x7FFFFF)<<0)
+
+//start_addr3
+#define SYS_IFC_START_ADDR3(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc3
+#define SYS_IFC_TC3(n) (((n)&0x7FFFFF)<<0)
+
+//start_addr4
+#define SYS_IFC_START_ADDR4(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc4
+#define SYS_IFC_TC4(n) (((n)&0x7FFFFF)<<0)
+
+//start_addr5
+#define SYS_IFC_START_ADDR5(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc5
+#define SYS_IFC_TC5(n) (((n)&0x7FFFFF)<<0)
+
+//start_addr6
+#define SYS_IFC_START_ADDR6(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc6
+#define SYS_IFC_TC6(n) (((n)&0x7FFFFF)<<0)
+
+//start_addr7
+#define SYS_IFC_START_ADDR7(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc7
+#define SYS_IFC_TC7(n) (((n)&0x7FFFFF)<<0)
+
+//start_addr8
+#define SYS_IFC_START_ADDR8(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc8
+#define SYS_IFC_TC8(n) (((n)&0x7FFFFF)<<0)
+
+//control
+//#define SYS_IFC_ENABLE (1<<0)
+//#define SYS_IFC_DISABLE (1<<1)
+//#define SYS_IFC_CH_RD_HW_EXCH (1<<2)
+//#define SYS_IFC_CH_WR_HW_EXCH (1<<3)
+//#define SYS_IFC_AUTODISABLE (1<<4)
+//#define SYS_IFC_SIZE(n) (((n)&3)<<5)
+//#define SYS_IFC_SIZE_MASK (3<<5)
+//#define SYS_IFC_SIZE_SHIFT (5)
+//#define SYS_IFC_SIZE_BYTE (0<<5)
+//#define SYS_IFC_SIZE_HALF_WORD (1<<5)
+//#define SYS_IFC_SIZE_WORD (2<<5)
+//#define SYS_IFC_REQ_SRC(n) (((n)&31)<<8)
+//#define SYS_IFC_REQ_SRC_MASK (31<<8)
+//#define SYS_IFC_REQ_SRC_SHIFT (8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_TX_SCI1 (0<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_RX_SCI1 (1<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_TX_SCI2 (2<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_RX_SCI2 (3<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_TX_SCI3 (4<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_RX_SCI3 (5<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_TX_SPI1 (6<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_RX_SPI1 (7<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_TX_SPI2 (8<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_RX_SPI2 (9<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_TX_I2C (10<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_RX_I2C (11<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_TX_DEBUG_UART (12<<8)
+//#define SYS_IFC_REQ_SRC_SYS_ID_RX_DEBUG_UART (13<<8)
+//#define SYS_IFC_FLUSH (1<<16)
+
+//status
+//#define SYS_IFC_ENABLE (1<<0)
+//#define SYS_IFC_FIFO_EMPTY (1<<4)
+
+//start_addr
+#define SYS_IFC_START_ADDR(n) (((n)&0xFFFFFFFF)<<0)
+
+//tc
+#define SYS_IFC_TC(n) (((n)&0x7FFFFF)<<0)
+
+
+
+
+#endif /* _REG_IFC_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_keypad.h b/arch/arm/include/asm/arch-rda/reg_keypad.h
new file mode 100644
index 0000000000..24ccb1c53f
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_keypad.h
@@ -0,0 +1,89 @@
+#ifndef _KEYPAD_H_
+#define _KEYPAD_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+/// Number of key in the keypad
+#define KEY_NB (64)
+/// Number of key in the low data register
+#define LOW_KEY_NB (32)
+/// Number of key in the high data register
+#define HIGH_KEY_NB (32)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// KEYPAD_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+
+typedef volatile struct
+{
+ REG32 KP_DATA_L; //0x00000000
+ REG32 KP_DATA_H; //0x00000004
+ REG32 KP_STATUS; //0x00000008
+ REG32 KP_CTRL; //0x0000000C
+ REG32 KP_IRQ_MASK; //0x00000010
+ REG32 KP_IRQ_CAUSE; //0x00000014
+ REG32 KP_IRQ_CLR; //0x00000018
+} HWP_KEYPAD_T;
+
+#define hwp_apKeypad ((HWP_KEYPAD_T*) (RDA_KEYPAD_BASE))
+
+
+//KP_DATA_L
+#define KEYPAD_KP_DATA_L(n) (((n)&0xFFFFFFFF)<<0)
+#define KEYPAD_KP_DATA_L_MASK (0xFFFFFFFF<<0)
+#define KEYPAD_KP_DATA_L_SHIFT (0)
+
+//KP_DATA_H
+#define KEYPAD_KP_DATA_H(n) (((n)&0xFFFFFFFF)<<0)
+#define KEYPAD_KP_DATA_H_MASK (0xFFFFFFFF<<0)
+#define KEYPAD_KP_DATA_H_SHIFT (0)
+
+//KP_STATUS
+#define KEYPAD_KEYIN_STATUS(n) (((n)&0xFF)<<0)
+#define KEYPAD_KEYIN_STATUS_MASK (0xFF<<0)
+#define KEYPAD_KEYIN_STATUS_SHIFT (0)
+#define KEYPAD_KP_ON (1<<31)
+#define KEYPAD_KP_ON_MASK (1<<31)
+#define KEYPAD_KP_ON_SHIFT (31)
+
+//KP_CTRL
+#define KEYPAD_KP_EN (1<<0)
+#define KEYPAD_KP_DBN_TIME(n) (((n)&0xFF)<<2)
+#define KEYPAD_KP_ITV_TIME(n) (((n)&0x3F)<<10)
+#define KEYPAD_KP_IN_MASK(n) (((n)&0xFF)<<16)
+#define KEYPAD_KP_OUT_MASK(n) (((n)&0xFF)<<24)
+
+//KP_IRQ_MASK
+#define KEYPAD_KP_EVT0_IRQ_MASK (1<<0)
+#define KEYPAD_KP_EVT1_IRQ_MASK (1<<1)
+#define KEYPAD_KP_ITV_IRQ_MASK (1<<2)
+
+//KP_IRQ_CAUSE
+#define KEYPAD_KP_EVT0_IRQ_CAUSE (1<<0)
+#define KEYPAD_KP_EVT1_IRQ_CAUSE (1<<1)
+#define KEYPAD_KP_ITV_IRQ_CAUSE (1<<2)
+#define KEYPAD_KP_EVT0_IRQ_STATUS (1<<16)
+#define KEYPAD_KP_EVT1_IRQ_STATUS (1<<17)
+#define KEYPAD_KP_ITV_IRQ_STATUS (1<<18)
+
+//KP_IRQ_CLR
+#define KEYPAD_KP_IRQ_CLR (1<<0)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_md_sysctrl.h b/arch/arm/include/asm/arch-rda/reg_md_sysctrl.h
new file mode 100644
index 0000000000..1512065c2e
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_md_sysctrl.h
@@ -0,0 +1,16 @@
+#ifdef CONFIG_MACH_RDA8810
+#include "reg_md_sysctrl_rda8810.h"
+#elif defined(CONFIG_MACH_RDA8810E)
+#include "reg_md_sysctrl_rda8810e.h"
+#elif defined(CONFIG_MACH_RDA8820)
+#include "reg_md_sysctrl_rda8820.h"
+#elif defined(CONFIG_MACH_RDA8850)
+#include "reg_md_sysctrl_rda8850.h"
+#elif defined(CONFIG_MACH_RDA8850E)
+#include "reg_md_sysctrl_rda8850e.h"
+#elif defined(CONFIG_MACH_RDA8810H)
+#include "reg_md_sysctrl_rda8810h.h"
+#else
+#error "unknown MACH"
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810.h b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810.h
new file mode 100644
index 0000000000..efae979e5f
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810.h
@@ -0,0 +1,958 @@
+#ifndef _REG_MD_SYSCTRL_H_
+#define _REG_MD_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ XCPU = 0x00000000,
+ BCPU = 0x00000001
+} CPU_ID_T;
+
+
+// ============================================================================
+// SYS_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side System clocks
+ SYS_XCPU = 0x00000000,
+ SYS_XCPU_INT = 0x00000001,
+ SYS_PCLK_CONF = 0x00000002,
+ SYS_PCLK_DATA = 0x00000003,
+ SYS_AMBA = 0x00000004,
+ SYS_DMA = 0x00000005,
+ SYS_EBC = 0x00000006,
+ SYS_IFC_CH0 = 0x00000007,
+ SYS_IFC_CH1 = 0x00000008,
+ SYS_IFC_CH2 = 0x00000009,
+ SYS_IFC_CH3 = 0x0000000A,
+ SYS_IFC_DBG = 0x0000000B,
+ SYS_A2A = 0x0000000C,
+ SYS_AXI2AHB = 0x0000000D,
+ SYS_AHB2AXI = 0x0000000E,
+ SYS_EXT_AHB = 0x0000000F,
+ SYS_DEBUG_UART = 0x00000010,
+ SYS_DBGHST = 0x00000011,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ SYSD_SCI1 = 0x00000012,
+ SYSD_SCI2 = 0x00000013,
+ SYSD_SCI3 = 0x00000014,
+ SYSD_RF_SPI = 0x00000015,
+ SYSD_OSC = 0x00000016,
+/// the following don't have an auto enable
+ SYS_GPIO = 0x00000017,
+ SYS_IRQ = 0x00000018,
+ SYS_TCU = 0x00000019,
+ SYS_TIMER = 0x0000001A,
+ SYS_COM_REGS = 0x0000001B,
+ SYS_DP_AP = 0x0000001C,
+/// the following are sharing their enable
+ SYS_SCI1 = 0x0000001D,
+ SYS_SCI2 = 0x0000001E,
+ SYS_SCI3 = 0x0000001F,
+/// keep last
+ SYS_NOGATE = 0x00000020
+} SYS_CLKS_T;
+
+#define NB_SYS_CLK_XCPU (2)
+#define NB_SYS_CLK_AEN (23)
+#define NB_SYS_CLK_EN (29)
+#define NB_SYS_CLK (33)
+
+// ============================================================================
+// PER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI1 = 0x00000000,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI2 = 0x00000001,
+ PER_SPY = 0x00000002,
+ PER_TEST = 0x00000003
+} PER_CLKS_T;
+
+#define NB_PER_CLK_AEN (2)
+#define NB_PER_CLK_EN (4)
+#define NB_PER_CLK (4)
+
+// ============================================================================
+// BB_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Baseband side System clocks
+ BB_BCPU = 0x00000000,
+ BB_BCPU_INT = 0x00000001,
+ BB_AMBA = 0x00000002,
+ BB_PCLK_CONF = 0x00000003,
+ BB_PCLK_DATA = 0x00000004,
+ BB_EXCOR = 0x00000005,
+ BB_IFC_CH2 = 0x00000006,
+ BB_IFC_CH3 = 0x00000007,
+ BB_SRAM = 0x00000008,
+ BB_A2A = 0x00000009,
+ BB_ITLV = 0x0000000A,
+ BB_VITERBI = 0x0000000B,
+ BB_CIPHER = 0x0000000C,
+ BB_RF_IF = 0x0000000D,
+ BB_COPRO = 0x0000000E,
+ BB_CP2_REG = 0x0000000F,
+ BB_XCOR = 0x00000010,
+ BB_EVITAC = 0x00000011,
+/// the following don't have an auto enable
+ BB_IRQ = 0x00000012,
+ BB_COM_REGS = 0x00000013,
+ BB_CORDIC = 0x00000014
+} BB_CLKS_T;
+
+#define NB_BB_CLK_AEN (18)
+#define NB_BB_CLK_EN (21)
+#define NB_BB_CLK (21)
+/// Other clocks
+/// clocks with auto enble
+/// the debug host clock auto enable is not used in host mode, only in uart mode
+#define OC_HOST_UART (0)
+
+// ============================================================================
+// OTHER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ OC_DEBUG_UART = 0x00000000,
+ OC_RF_RX = 0x00000001,
+ OC_RF_TX = 0x00000002,
+ OC_MEM_BRIDGE = 0x00000003,
+/// the following don't have an auto enable
+ OC_LPS = 0x00000004,
+ OC_GPIO = 0x00000005,
+ OC_CLK_OUT = 0x00000006,
+ OC_MEM_CLK_OUT = 0x00000007,
+ OC_TCU = 0x00000008
+} OTHER_CLKS_T;
+
+#define NB_OTHER_CLK_AEN (4)
+#define NB_OTHER_CLK_EN (9)
+#define NB_OTHER_CLK (9)
+
+// ============================================================================
+// RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side resets
+ RST_XCPU = 0x00000000,
+ RST_SYS_IRQ = 0x00000001,
+ RST_SYS_A2A = 0x00000002,
+ RST_SYS_AHB2AXI = 0x00000003,
+ RST_SYS_AXI2AHB = 0x00000004,
+ RST_DMA = 0x00000005,
+ RST_TIMER = 0x00000006,
+ RST_TCU = 0x00000007,
+ RST_GPIO = 0x00000008,
+ RST_CFG = 0x00000009,
+ RST_SPI1 = 0x0000000A,
+ RST_SPI2 = 0x0000000B,
+ RST_RF_SPI = 0x0000000C,
+ RST_SCI1 = 0x0000000D,
+ RST_SCI2 = 0x0000000E,
+ RST_SCI3 = 0x0000000F,
+ RST_SPY = 0x00000010,
+ RST_MEM_BRIDGE = 0x00000011,
+ RST_EXT_AHB = 0x00000012,
+ RST_DP_AP = 0x00000013,
+ RST_COMREGS = 0x00000014,
+ RST_COMREGS_AP = 0x00000015,
+ RST_AP_CLKEN = 0x00000016,
+ RST_AP_RST = 0x00000017,
+ RST_MEM_CHK = 0x00000018,
+ RST_BCPU = 0x00000019,
+ RST_BB_IRQ = 0x0000001A,
+ RST_BB_A2A = 0x0000001B,
+ RST_BB_IFC = 0x0000001C,
+ RST_BB_SRAM = 0x0000001D,
+ RST_ITLV = 0x0000001E,
+ RST_VITERBI = 0x0000001F,
+ RST_CIPHER = 0x00000020,
+ RST_XCOR = 0x00000021,
+ RST_COPRO = 0x00000022,
+ RST_RF_IF = 0x00000023,
+ RST_EXCOR = 0x00000024,
+ RST_EVITAC = 0x00000025,
+ RST_CORDIC = 0x00000026,
+ RST_TCU_BB = 0x00000027,
+ RST_BB_FULL = 0x00000028,
+ RST_SYS_FULL = 0x00000029
+} RESETS_T;
+
+#define NB_SRST (25)
+/// Baseband side resets
+#define BOUND_BRST_FIRST (25)
+#define BOUND_BRST_AFTER (40)
+/// The following reset does not have register
+#define NR_RST_REG (41)
+#define NB_RST (42)
+#define NB_BRST (BOUND_BRST_AFTER-BOUND_BRST_FIRST)
+
+// ============================================================================
+// RESET_OTHERS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Reset Other : resync on corresponding clock other
+ RSTO_DBG_HOST = 0x00000000,
+ RSTO_RF_RX = 0x00000001,
+ RSTO_RF_TX = 0x00000002,
+ RSTO_MEM_BRIDGE = 0x00000003,
+ RSTO_LPS = 0x00000004,
+ RSTO_GPIO = 0x00000005,
+ RSTO_WDTIMER = 0x00000006,
+ RSTO_TCU = 0x00000007
+} RESET_OTHERS_T;
+
+#define BOUND_RSTO_RF_FIRST (1)
+#define BOUND_RSTO_RF_AFTER (3)
+#define NB_RSTO (8)
+/// For REG_DBG protect lock/unlock value
+#define SYS_CTRL_PROTECT_LOCK (0XA50000)
+#define SYS_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// This register is protected.
+ REG32 Sys_Rst_Set; //0x00000004
+ REG32 Sys_Rst_Clr; //0x00000008
+ /// This register is protected.
+ REG32 BB_Rst_Set; //0x0000000C
+ REG32 BB_Rst_Clr; //0x00000010
+ REG32 Clk_Sys_Mode; //0x00000014
+ REG32 Clk_Sys_Enable; //0x00000018
+ /// This register is protected.
+ REG32 Clk_Sys_Disable; //0x0000001C
+ REG32 Clk_Per_Mode; //0x00000020
+ REG32 Clk_Per_Enable; //0x00000024
+ /// This register is protected.
+ REG32 Clk_Per_Disable; //0x00000028
+ REG32 Clk_BB_Mode; //0x0000002C
+ REG32 Clk_BB_Enable; //0x00000030
+ /// This register is protected.
+ REG32 Clk_BB_Disable; //0x00000034
+ REG32 Clk_Other_Mode; //0x00000038
+ REG32 Clk_Other_Enable; //0x0000003C
+ /// This register is protected.
+ REG32 Clk_Other_Disable; //0x00000040
+ /// Register protected by Write_Unlocked_H.
+ REG32 Pll_Ctrl; //0x00000044
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000048
+ REG32 Cfg_Clk_Sys; //0x0000004C
+ REG32 Cfg_Clk_Mem_Bridge; //0x00000050
+ /// This register is protected.
+ REG32 Cfg_Clk_Out; //0x00000054
+ REG32 Cfg_Clk_Host_Uart; //0x00000058
+ REG32 Cfg_Clk_Auxclk; //0x0000005C
+ /// This register is protected.
+ REG32 Cfg_AHB; //0x00000060
+ /// This register is protected. Used to unsplit masters manualy.
+ REG32 Ctrl_AHB; //0x00000064
+ REG32 XCpu_Dbg_BKP; //0x00000068
+ REG32 XCpu_Dbg_Addr; //0x0000006C
+ REG32 BCpu_Dbg_BKP; //0x00000070
+ REG32 BCpu_Dbg_Addr; //0x00000074
+ REG32 Cfg_Cpus_Cache_Ram_Disable; //0x00000078
+ REG32 Reset_Cause; //0x0000007C
+ /// This register is protected.
+ REG32 WakeUp; //0x00000080
+ REG32 AP_Ctrl; //0x00000084
+ /// This register is protected.
+ REG32 Ignore_Charger; //0x00000088
+ REG32 Reserved_0000008C[28]; //0x0000008C
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000000FC
+} HWP_SYS_CTRL_T;
+
+#define hwp_sysCtrlMd ((HWP_SYS_CTRL_T*)(RDA_MD_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_WRITE_UNLOCK (1<<31)
+
+//Sys_Rst_Set
+#define SYS_CTRL_SET_RST_XCPU (1<<0)
+#define SYS_CTRL_SET_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_SET_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_SET_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_SET_RST_DMA (1<<5)
+#define SYS_CTRL_SET_RST_TIMER (1<<6)
+#define SYS_CTRL_SET_RST_TCU (1<<7)
+#define SYS_CTRL_SET_RST_GPIO (1<<8)
+#define SYS_CTRL_SET_RST_CFG (1<<9)
+#define SYS_CTRL_SET_RST_SPI1 (1<<10)
+#define SYS_CTRL_SET_RST_SPI2 (1<<11)
+#define SYS_CTRL_SET_RST_RF_SPI (1<<12)
+#define SYS_CTRL_SET_RST_SCI1 (1<<13)
+#define SYS_CTRL_SET_RST_SCI2 (1<<14)
+#define SYS_CTRL_SET_RST_SCI3 (1<<15)
+#define SYS_CTRL_SET_RST_SPY (1<<16)
+#define SYS_CTRL_SET_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_SET_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_SET_RST_DP_AP (1<<19)
+#define SYS_CTRL_SET_RST_COMREGS (1<<20)
+#define SYS_CTRL_SET_RST_COMREGS_AP (1<<21)
+#define SYS_CTRL_SET_RST_AP_CLKEN (1<<22)
+#define SYS_CTRL_SET_RST_AP_RST (1<<23)
+#define SYS_CTRL_SET_RST_MEM_CHK (1<<24)
+#define SYS_CTRL_SET_RST_OUT (1<<30)
+#define SYS_CTRL_SOFT_RST (1<<31)
+#define SYS_CTRL_SET_SYS_RST(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_SET_SYS_RST_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_SET_SYS_RST_SHIFT (0)
+
+//Sys_Rst_Clr
+#define SYS_CTRL_CLR_RST_XCPU (1<<0)
+#define SYS_CTRL_CLR_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_CLR_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_CLR_RST_DMA (1<<5)
+#define SYS_CTRL_CLR_RST_TIMER (1<<6)
+#define SYS_CTRL_CLR_RST_TCU (1<<7)
+#define SYS_CTRL_CLR_RST_GPIO (1<<8)
+#define SYS_CTRL_CLR_RST_CFG (1<<9)
+#define SYS_CTRL_CLR_RST_SPI1 (1<<10)
+#define SYS_CTRL_CLR_RST_SPI2 (1<<11)
+#define SYS_CTRL_CLR_RST_RF_SPI (1<<12)
+#define SYS_CTRL_CLR_RST_SCI1 (1<<13)
+#define SYS_CTRL_CLR_RST_SCI2 (1<<14)
+#define SYS_CTRL_CLR_RST_SCI3 (1<<15)
+#define SYS_CTRL_CLR_RST_SPY (1<<16)
+#define SYS_CTRL_CLR_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_CLR_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_CLR_RST_DP_AP (1<<19)
+#define SYS_CTRL_CLR_RST_COMREGS (1<<20)
+#define SYS_CTRL_CLR_RST_COMREGS_AP (1<<21)
+#define SYS_CTRL_CLR_RST_AP_CLKEN (1<<22)
+#define SYS_CTRL_CLR_RST_AP_RST (1<<23)
+#define SYS_CTRL_CLR_RST_MEM_CHK (1<<24)
+#define SYS_CTRL_CLR_RST_OUT (1<<30)
+#define SYS_CTRL_CLR_SYS_RST(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_CLR_SYS_RST_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_CLR_SYS_RST_SHIFT (0)
+
+//BB_Rst_Set
+#define SYS_CTRL_SET_RST_BCPU (1<<0)
+#define SYS_CTRL_SET_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_BB_A2A (1<<2)
+#define SYS_CTRL_SET_RST_BB_IFC (1<<3)
+#define SYS_CTRL_SET_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_SET_RST_ITLV (1<<5)
+#define SYS_CTRL_SET_RST_VITERBI (1<<6)
+#define SYS_CTRL_SET_RST_CIPHER (1<<7)
+#define SYS_CTRL_SET_RST_XCOR (1<<8)
+#define SYS_CTRL_SET_RST_COPRO (1<<9)
+#define SYS_CTRL_SET_RST_RF_IF (1<<10)
+#define SYS_CTRL_SET_RST_EXCOR (1<<11)
+#define SYS_CTRL_SET_RST_EVITAC (1<<12)
+#define SYS_CTRL_SET_RST_CORDIC (1<<13)
+#define SYS_CTRL_SET_RST_TCU_BB (1<<14)
+#define SYS_CTRL_SET_RST_BB_FULL (1<<31)
+#define SYS_CTRL_SET_BB_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_SET_BB_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_SET_BB_RST_SHIFT (0)
+
+//BB_Rst_Clr
+#define SYS_CTRL_CLR_RST_BCPU (1<<0)
+#define SYS_CTRL_CLR_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_BB_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_BB_IFC (1<<3)
+#define SYS_CTRL_CLR_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_CLR_RST_ITLV (1<<5)
+#define SYS_CTRL_CLR_RST_VITERBI (1<<6)
+#define SYS_CTRL_CLR_RST_CIPHER (1<<7)
+#define SYS_CTRL_CLR_RST_XCOR (1<<8)
+#define SYS_CTRL_CLR_RST_COPRO (1<<9)
+#define SYS_CTRL_CLR_RST_RF_IF (1<<10)
+#define SYS_CTRL_CLR_RST_EXCOR (1<<11)
+#define SYS_CTRL_CLR_RST_EVITAC (1<<12)
+#define SYS_CTRL_CLR_RST_CORDIC (1<<13)
+#define SYS_CTRL_CLR_RST_TCU_BB (1<<14)
+#define SYS_CTRL_CLR_RST_BB_FULL (1<<31)
+#define SYS_CTRL_CLR_BB_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_CLR_BB_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_CLR_BB_RST_SHIFT (0)
+
+//Clk_Sys_Mode
+#define SYS_CTRL_MODE_SYS_XCPU (1<<0)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_SYS_AMBA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_SYS_AMBA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_SYS_DMA_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_SYS_DMA_MANUAL (1<<5)
+#define SYS_CTRL_MODE_SYS_EBC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_SYS_EBC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_MANUAL (1<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_MANUAL (1<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_MANUAL (1<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_MANUAL (1<<10)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_MANUAL (1<<11)
+#define SYS_CTRL_MODE_SYS_A2A_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_SYS_A2A_MANUAL (1<<12)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_MANUAL (1<<13)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_MANUAL (1<<14)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_MANUAL (1<<15)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_MANUAL (1<<16)
+#define SYS_CTRL_MODE_SYS_DBGHST_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_SYS_DBGHST_MANUAL (1<<17)
+#define SYS_CTRL_MODE_SYSD_SCI1_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_SYSD_SCI1_MANUAL (1<<18)
+#define SYS_CTRL_MODE_SYSD_SCI2_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_SYSD_SCI2_MANUAL (1<<19)
+#define SYS_CTRL_MODE_SYSD_SCI3_AUTOMATIC (0<<20)
+#define SYS_CTRL_MODE_SYSD_SCI3_MANUAL (1<<20)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_AUTOMATIC (0<<21)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_MANUAL (1<<21)
+#define SYS_CTRL_MODE_SYSD_OSC_AUTOMATIC (0<<22)
+#define SYS_CTRL_MODE_SYSD_OSC_MANUAL (1<<22)
+#define SYS_CTRL_MODE_CLK_SYS(n) (((n)&0x3FFFFF)<<1)
+#define SYS_CTRL_MODE_CLK_SYS_MASK (0x3FFFFF<<1)
+#define SYS_CTRL_MODE_CLK_SYS_SHIFT (1)
+
+//Clk_Sys_Enable
+#define SYS_CTRL_ENABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_ENABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_ENABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_ENABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_ENABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_ENABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_ENABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_ENABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_ENABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_ENABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_ENABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_ENABLE_SYSD_SCI1 (1<<18)
+#define SYS_CTRL_ENABLE_SYSD_SCI2 (1<<19)
+#define SYS_CTRL_ENABLE_SYSD_SCI3 (1<<20)
+#define SYS_CTRL_ENABLE_SYSD_RF_SPI (1<<21)
+#define SYS_CTRL_ENABLE_SYSD_OSC (1<<22)
+#define SYS_CTRL_ENABLE_SYS_GPIO (1<<23)
+#define SYS_CTRL_ENABLE_SYS_IRQ (1<<24)
+#define SYS_CTRL_ENABLE_SYS_TCU (1<<25)
+#define SYS_CTRL_ENABLE_SYS_TIMER (1<<26)
+#define SYS_CTRL_ENABLE_SYS_COM_REGS (1<<27)
+#define SYS_CTRL_ENABLE_SYS_DP_AP (1<<28)
+#define SYS_CTRL_ENABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Sys_Disable
+#define SYS_CTRL_DISABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_DISABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_DISABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_DISABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_DISABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_DISABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_DISABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_DISABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_DISABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_DISABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_DISABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_DISABLE_SYSD_SCI1 (1<<18)
+#define SYS_CTRL_DISABLE_SYSD_SCI2 (1<<19)
+#define SYS_CTRL_DISABLE_SYSD_SCI3 (1<<20)
+#define SYS_CTRL_DISABLE_SYSD_RF_SPI (1<<21)
+#define SYS_CTRL_DISABLE_SYSD_OSC (1<<22)
+#define SYS_CTRL_DISABLE_SYS_GPIO (1<<23)
+#define SYS_CTRL_DISABLE_SYS_IRQ (1<<24)
+#define SYS_CTRL_DISABLE_SYS_TCU (1<<25)
+#define SYS_CTRL_DISABLE_SYS_TIMER (1<<26)
+#define SYS_CTRL_DISABLE_SYS_COM_REGS (1<<27)
+#define SYS_CTRL_DISABLE_SYS_DP_AP (1<<28)
+#define SYS_CTRL_DISABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Per_Mode
+#define SYS_CTRL_MODE_PERD_SPI1_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_PERD_SPI1_MANUAL (1<<0)
+#define SYS_CTRL_MODE_PERD_SPI2_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_PERD_SPI2_MANUAL (1<<1)
+#define SYS_CTRL_MODE_CLK_PER(n) (((n)&3)<<0)
+#define SYS_CTRL_MODE_CLK_PER_MASK (3<<0)
+#define SYS_CTRL_MODE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Enable
+#define SYS_CTRL_ENABLE_PERD_SPI1 (1<<0)
+#define SYS_CTRL_ENABLE_PERD_SPI2 (1<<1)
+#define SYS_CTRL_ENABLE_PER_SPY (1<<2)
+#define SYS_CTRL_ENABLE_PER_TEST (1<<3)
+#define SYS_CTRL_ENABLE_CLK_PER(n) (((n)&15)<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_MASK (15<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Disable
+#define SYS_CTRL_DISABLE_PERD_SPI1 (1<<0)
+#define SYS_CTRL_DISABLE_PERD_SPI2 (1<<1)
+#define SYS_CTRL_DISABLE_PER_SPY (1<<2)
+#define SYS_CTRL_DISABLE_PER_TEST (1<<3)
+#define SYS_CTRL_DISABLE_CLK_PER(n) (((n)&15)<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_MASK (15<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_SHIFT (0)
+
+//Clk_BB_Mode
+#define SYS_CTRL_MODE_BB_BCPU (1<<0)
+#define SYS_CTRL_MODE_BB_BCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_BB_BCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_BB_AMBA_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_BB_AMBA_MANUAL (1<<2)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_MANUAL (1<<3)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_BB_EXCOR_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_BB_EXCOR_MANUAL (1<<5)
+#define SYS_CTRL_MODE_BB_IFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_BB_IFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_MODE_BB_SRAM_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_BB_SRAM_MANUAL (1<<8)
+#define SYS_CTRL_MODE_BB_A2A_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_BB_A2A_MANUAL (1<<9)
+#define SYS_CTRL_MODE_BB_ITLV_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_BB_ITLV_MANUAL (1<<10)
+#define SYS_CTRL_MODE_BB_VITERBI_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_BB_VITERBI_MANUAL (1<<11)
+#define SYS_CTRL_MODE_BB_CIPHER_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_BB_CIPHER_MANUAL (1<<12)
+#define SYS_CTRL_MODE_BB_RF_IF_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_BB_RF_IF_MANUAL (1<<13)
+#define SYS_CTRL_MODE_BB_COPRO_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_BB_COPRO_MANUAL (1<<14)
+#define SYS_CTRL_MODE_BB_CP2_REG_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_BB_CP2_REG_MANUAL (1<<15)
+#define SYS_CTRL_MODE_BB_XCOR_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_BB_XCOR_MANUAL (1<<16)
+#define SYS_CTRL_MODE_BB_EVITAC_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_BB_EVITAC_MANUAL (1<<17)
+#define SYS_CTRL_MODE_CLK_BB(n) (((n)&0x1FFFF)<<1)
+#define SYS_CTRL_MODE_CLK_BB_MASK (0x1FFFF<<1)
+#define SYS_CTRL_MODE_CLK_BB_SHIFT (1)
+
+//Clk_BB_Enable
+#define SYS_CTRL_ENABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_ENABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_ENABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_ENABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_ENABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_ENABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_ENABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_ENABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_ENABLE_BB_A2A (1<<9)
+#define SYS_CTRL_ENABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_ENABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_ENABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_ENABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_ENABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_ENABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_ENABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_ENABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_ENABLE_BB_IRQ (1<<18)
+#define SYS_CTRL_ENABLE_BB_COM_REGS (1<<19)
+#define SYS_CTRL_ENABLE_BB_CORDIC (1<<20)
+#define SYS_CTRL_ENABLE_CLK_BB(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_SHIFT (0)
+
+//Clk_BB_Disable
+#define SYS_CTRL_DISABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_DISABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_DISABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_DISABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_DISABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_DISABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_DISABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_DISABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_DISABLE_BB_A2A (1<<9)
+#define SYS_CTRL_DISABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_DISABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_DISABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_DISABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_DISABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_DISABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_DISABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_DISABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_DISABLE_BB_IRQ (1<<18)
+#define SYS_CTRL_DISABLE_BB_COM_REGS (1<<19)
+#define SYS_CTRL_DISABLE_BB_CORDIC (1<<20)
+#define SYS_CTRL_DISABLE_CLK_BB(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_SHIFT (0)
+
+//Clk_Other_Mode
+#define SYS_CTRL_MODE_OC_DEBUG_UART_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_OC_DEBUG_UART_MANUAL (1<<0)
+#define SYS_CTRL_MODE_OC_RF_RX_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_OC_RF_RX_MANUAL (1<<1)
+#define SYS_CTRL_MODE_OC_RF_TX_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_OC_RF_TX_MANUAL (1<<2)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_MANUAL (1<<3)
+#define SYS_CTRL_MODE_CLK_OTHER(n) (((n)&15)<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_MASK (15<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Enable
+#define SYS_CTRL_ENABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_ENABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_ENABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_ENABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_ENABLE_OC_LPS (1<<4)
+#define SYS_CTRL_ENABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_ENABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_ENABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_ENABLE_OC_TCU (1<<8)
+#define SYS_CTRL_ENABLE_CLK_OTHER(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_MASK (0x1FF<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Disable
+#define SYS_CTRL_DISABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_DISABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_DISABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_DISABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_DISABLE_OC_LPS (1<<4)
+#define SYS_CTRL_DISABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_DISABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_DISABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_DISABLE_OC_TCU (1<<8)
+#define SYS_CTRL_DISABLE_CLK_OTHER(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_MASK (0x1FF<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_SHIFT (0)
+
+//Pll_Ctrl
+#define SYS_CTRL_PLL_ENABLE (1<<0)
+#define SYS_CTRL_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_PLL_BYPASS (1<<8)
+#define SYS_CTRL_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_XP_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_XP_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_XP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_TCU_13M_L_26M (1<<5)
+#define SYS_CTRL_TCU_13M_L_13M (0<<5)
+#define SYS_CTRL_PLL_DISABLE_LPS_DISABLE (1<<6)
+#define SYS_CTRL_PLL_DISABLE_LPS_ENABLE (0<<6)
+#define SYS_CTRL_DIGEN_H_ENABLE (1<<7)
+#define SYS_CTRL_DIGEN_H_DISABLE (0<<7)
+#define SYS_CTRL_RF_DETECTED_OK (1<<20)
+#define SYS_CTRL_RF_DETECTED_NO (0<<20)
+#define SYS_CTRL_RF_DETECT_BYPASS (1<<21)
+#define SYS_CTRL_RF_DETECT_RESET (1<<22)
+#define SYS_CTRL_RF_SELECTED_L (1<<23)
+#define SYS_CTRL_PLL_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_MASK (1<<24)
+#define SYS_CTRL_PLL_LOCKED_SHIFT (24)
+#define SYS_CTRL_PLL_LOCKED_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_NOT_LOCKED (0<<24)
+#define SYS_CTRL_PLL_BYPASS_LOCK (1<<27)
+#define SYS_CTRL_FAST_SELECTED_L (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_MASK (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_SHIFT (31)
+
+//Cfg_Clk_Sys
+#define SYS_CTRL_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_FREQ_MASK (15<<0)
+#define SYS_CTRL_FREQ_SHIFT (0)
+#define SYS_CTRL_FREQ_312M (13<<0)
+#define SYS_CTRL_FREQ_250M (12<<0)
+#define SYS_CTRL_FREQ_208M (11<<0)
+#define SYS_CTRL_FREQ_178M (10<<0)
+#define SYS_CTRL_FREQ_156M (9<<0)
+#define SYS_CTRL_FREQ_139M (8<<0)
+#define SYS_CTRL_FREQ_125M (7<<0)
+#define SYS_CTRL_FREQ_113M (6<<0)
+#define SYS_CTRL_FREQ_104M (5<<0)
+#define SYS_CTRL_FREQ_89M (4<<0)
+#define SYS_CTRL_FREQ_78M (3<<0)
+#define SYS_CTRL_FREQ_52M (2<<0)
+#define SYS_CTRL_FREQ_39M (1<<0)
+#define SYS_CTRL_FREQ_26M (0<<0)
+#define SYS_CTRL_FORCE_DIV_UPDATE (1<<4)
+#define SYS_CTRL_REQ_DIV_UPDATE (1<<8)
+
+//Cfg_Clk_Mem_Bridge
+#define SYS_CTRL_MEM_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MEM_FREQ_MASK (15<<0)
+#define SYS_CTRL_MEM_FREQ_SHIFT (0)
+#define SYS_CTRL_MEM_FREQ_312M (13<<0)
+#define SYS_CTRL_MEM_FREQ_250M (12<<0)
+#define SYS_CTRL_MEM_FREQ_208M (11<<0)
+#define SYS_CTRL_MEM_FREQ_178M (10<<0)
+#define SYS_CTRL_MEM_FREQ_156M (9<<0)
+#define SYS_CTRL_MEM_FREQ_139M (8<<0)
+#define SYS_CTRL_MEM_FREQ_125M (7<<0)
+#define SYS_CTRL_MEM_FREQ_113M (6<<0)
+#define SYS_CTRL_MEM_FREQ_104M (5<<0)
+#define SYS_CTRL_MEM_FREQ_89M (4<<0)
+#define SYS_CTRL_MEM_FREQ_78M (3<<0)
+#define SYS_CTRL_MEM_FREQ_52M (2<<0)
+#define SYS_CTRL_MEM_FREQ_39M (1<<0)
+#define SYS_CTRL_MEM_FREQ_26M (0<<0)
+#define SYS_CTRL_DDR_MODE_EN_NORMAL_MODE (0<<6)
+#define SYS_CTRL_DDR_MODE_EN_DDR_MODE (1<<6)
+#define SYS_CTRL_DDR_FAST_CLK_POL_INVERT (1<<7)
+#define SYS_CTRL_DDR_FAST_CLK_POL_NORMAL (0<<7)
+#define SYS_CTRL_DDR_DQSL_I(n) (((n)&3)<<8)
+#define SYS_CTRL_DDR_DQSU_I(n) (((n)&3)<<10)
+#define SYS_CTRL_DDR_DQSL_O(n) (((n)&3)<<12)
+#define SYS_CTRL_DDR_DQSU_O(n) (((n)&3)<<14)
+#define SYS_CTRL_DDR_PLL_OFF (1<<16)
+#define SYS_CTRL_MEM_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Out
+#define SYS_CTRL_CLKOUT_DIVIDER(n) (((n)&31)<<0)
+#define SYS_CTRL_CLKOUT_SEL_OSC (0<<8)
+#define SYS_CTRL_CLKOUT_SEL_RF (1<<8)
+#define SYS_CTRL_CLKOUT_SEL_DIVIDER (2<<8)
+
+//Cfg_Clk_Host_Uart
+#define SYS_CTRL_HOST_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_HOST_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_HOST_UART_SEL_PLL_PLL (1<<12)
+
+//Cfg_Clk_Auxclk
+#define SYS_CTRL_AUXCLK_EN_DISABLE (0<<0)
+#define SYS_CTRL_AUXCLK_EN_ENABLE (1<<0)
+
+//Cfg_AHB
+#define SYS_CTRL_SYS_NEW_ARBITRATION_ENABLE (1<<0)
+#define SYS_CTRL_SYS_NEW_ARBITRATION_DISABLE (0<<0)
+#define SYS_CTRL_ENABLE_SYS_MID_BIST_ENABLE (1<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_BIST_DISABLE (0<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_ENABLE (1<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_DISABLE (0<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_ENABLE (1<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_DISABLE (0<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_ENABLE (1<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_DISABLE (0<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_ENABLE (1<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_DISABLE (0<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_ENABLE (1<<6)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_DISABLE (0<<6)
+#define SYS_CTRL_BB_NEW_ARBITRATION_ENABLE (1<<16)
+#define SYS_CTRL_BB_NEW_ARBITRATION_DISABLE (0<<16)
+#define SYS_CTRL_ENABLE_BB_MID_BIST_ENABLE (1<<17)
+#define SYS_CTRL_ENABLE_BB_MID_BIST_DISABLE (0<<17)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_ENABLE (1<<18)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_DISABLE (0<<18)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_ENABLE (1<<19)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_DISABLE (0<<19)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_ENABLE (1<<20)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_DISABLE (0<<20)
+#define SYS_CTRL_SYS_ENABLE(n) (((n)&0x3F)<<1)
+#define SYS_CTRL_SYS_ENABLE_MASK (0x3F<<1)
+#define SYS_CTRL_SYS_ENABLE_SHIFT (1)
+#define SYS_CTRL_BB_ENABLE(n) (((n)&15)<<17)
+#define SYS_CTRL_BB_ENABLE_MASK (15<<17)
+#define SYS_CTRL_BB_ENABLE_SHIFT (17)
+
+//Ctrl_AHB
+#define SYS_CTRL_SPLIT_SYS_MID_BIST_NORMAL (1<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_BIST_FORCE (0<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_NORMAL (1<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_FORCE (0<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_NORMAL (1<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_FORCE (0<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_NORMAL (1<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_FORCE (0<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_NORMAL (1<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_FORCE (0<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_NORMAL (1<<5)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_FORCE (0<<5)
+#define SYS_CTRL_SPLIT_BB_MID_BIST_NORMAL (1<<16)
+#define SYS_CTRL_SPLIT_BB_MID_BIST_FORCE (0<<16)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_NORMAL (1<<17)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_FORCE (0<<17)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_NORMAL (1<<18)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_FORCE (0<<18)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_NORMAL (1<<19)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_FORCE (0<<19)
+#define SYS_CTRL_SYS_FORCE_HSPLIT(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_MASK (0x3F<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_SHIFT (0)
+#define SYS_CTRL_BB_FORCE_HSPLIT(n) (((n)&15)<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_MASK (15<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_SHIFT (16)
+
+//XCpu_Dbg_BKP
+#define SYS_CTRL_BKPT_EN (1<<0)
+#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+#define SYS_CTRL_BKPT_MODE_I (0<<4)
+#define SYS_CTRL_BKPT_MODE_R (1<<4)
+#define SYS_CTRL_BKPT_MODE_W (2<<4)
+#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+#define SYS_CTRL_STALLED (1<<8)
+
+//XCpu_Dbg_Addr
+#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//BCpu_Dbg_BKP
+//#define SYS_CTRL_BKPT_EN (1<<0)
+//#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+//#define SYS_CTRL_BKPT_MODE_I (0<<4)
+//#define SYS_CTRL_BKPT_MODE_R (1<<4)
+//#define SYS_CTRL_BKPT_MODE_W (2<<4)
+//#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+//#define SYS_CTRL_STALLED (1<<8)
+
+//BCpu_Dbg_Addr
+//#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//Cfg_Cpus_Cache_Ram_Disable
+#define SYS_CTRL_XCPU_USE_MODE (1<<0)
+#define SYS_CTRL_XCPU_CLK_OFF_MODE (1<<1)
+#define SYS_CTRL_BCPU_USE_MODE (1<<16)
+#define SYS_CTRL_BCPU_CLK_OFF_MODE (1<<17)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_MASK (3<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_SHIFT (0)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_MASK (3<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_SHIFT (16)
+
+//Reset_Cause
+#define SYS_CTRL_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_APSOFT_RESET_HAPPENED (1<<1)
+#define SYS_CTRL_APSOFT_RESET_NO (0<<1)
+#define SYS_CTRL_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_MEMCHECKDONE_MASK (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_SHIFT (7)
+#define SYS_CTRL_MEMCHECKDONE_DONE (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_RUNNING (0<<7)
+#define SYS_CTRL_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_FONCTIONAL_TEST_MODE (1<<31)
+
+//WakeUp
+#define SYS_CTRL_FORCE_WAKEUP (1<<0)
+
+//AP_Ctrl
+#define SYS_CTRL_AP_INT_STATUS (1<<0)
+#define SYS_CTRL_AP_INT_MASK (1<<16)
+#define SYS_CTRL_AP_DEEPSLEEP_EN (1<<24)
+
+//Ignore_Charger
+#define SYS_CTRL_IGNORE_CHARGER (1<<0)
+
+//Cfg_Reserve
+#define SYS_CTRL_RESERVE(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AUIFC_CH0_IRQ_MASK (1<<14)
+#define SYS_CTRL_AUIFC_CH1_IRQ_MASK (1<<15)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810e.h b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810e.h
new file mode 100644
index 0000000000..0ecd75897f
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810e.h
@@ -0,0 +1,979 @@
+#ifndef _REG_MD_SYSCTRL_H_
+#define _REG_MD_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ XCPU = 0x00000000,
+ BCPU = 0x00000001
+} CPU_ID_T;
+
+
+// ============================================================================
+// SYS_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side System clocks
+ SYS_XCPU = 0x00000000,
+ SYS_XCPU_INT = 0x00000001,
+ SYS_PCLK_CONF = 0x00000002,
+ SYS_PCLK_DATA = 0x00000003,
+ SYS_AMBA = 0x00000004,
+ SYS_DMA = 0x00000005,
+ SYS_EBC = 0x00000006,
+ SYS_IFC_CH0 = 0x00000007,
+ SYS_IFC_CH1 = 0x00000008,
+ SYS_IFC_CH2 = 0x00000009,
+ SYS_IFC_CH3 = 0x0000000A,
+ SYS_IFC_DBG = 0x0000000B,
+ SYS_A2A = 0x0000000C,
+ SYS_AXI2AHB = 0x0000000D,
+ SYS_AHB2AXI = 0x0000000E,
+ SYS_EXT_AHB = 0x0000000F,
+ SYS_DEBUG_UART = 0x00000010,
+ SYS_DBGHST = 0x00000011,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ SYSD_SCI1 = 0x00000012,
+ SYSD_SCI2 = 0x00000013,
+ SYSD_SCI3 = 0x00000014,
+ SYSD_RF_SPI = 0x00000015,
+ SYSD_OSC = 0x00000016,
+/// the following don't have an auto enable
+ SYS_GPIO = 0x00000017,
+ SYS_IRQ = 0x00000018,
+ SYS_TCU = 0x00000019,
+ SYS_TIMER = 0x0000001A,
+ SYS_COM_REGS = 0x0000001B,
+ SYS_DP_AP = 0x0000001C,
+/// the following are sharing their enable
+ SYS_SCI1 = 0x0000001D,
+ SYS_SCI2 = 0x0000001E,
+ SYS_SCI3 = 0x0000001F,
+/// keep last
+ SYS_NOGATE = 0x00000020
+} SYS_CLKS_T;
+
+#define NB_SYS_CLK_XCPU (2)
+#define NB_SYS_CLK_AEN (23)
+#define NB_SYS_CLK_EN (29)
+#define NB_SYS_CLK (33)
+
+// ============================================================================
+// PER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ PER_I2C = 0x00000000,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI1 = 0x00000001,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI2 = 0x00000002,
+ PER_SPY = 0x00000003,
+ PER_TEST = 0x00000004
+} PER_CLKS_T;
+
+#define NB_PER_CLK_AEN (3)
+#define NB_PER_CLK_EN (5)
+#define NB_PER_CLK (5)
+
+// ============================================================================
+// BB_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Baseband side System clocks
+ BB_BCPU = 0x00000000,
+ BB_BCPU_INT = 0x00000001,
+ BB_AMBA = 0x00000002,
+ BB_PCLK_CONF = 0x00000003,
+ BB_PCLK_DATA = 0x00000004,
+ BB_EXCOR = 0x00000005,
+ BB_IFC_CH2 = 0x00000006,
+ BB_IFC_CH3 = 0x00000007,
+ BB_SRAM = 0x00000008,
+ BB_A2A = 0x00000009,
+ BB_ITLV = 0x0000000A,
+ BB_VITERBI = 0x0000000B,
+ BB_CIPHER = 0x0000000C,
+ BB_RF_IF = 0x0000000D,
+ BB_COPRO = 0x0000000E,
+ BB_CP2_REG = 0x0000000F,
+ BB_XCOR = 0x00000010,
+ BB_EVITAC = 0x00000011,
+/// the following don't have an auto enable
+ BB_IRQ = 0x00000012,
+ BB_COM_REGS = 0x00000013,
+ BB_CORDIC = 0x00000014
+} BB_CLKS_T;
+
+#define NB_BB_CLK_AEN (18)
+#define NB_BB_CLK_EN (21)
+#define NB_BB_CLK (21)
+/// Other clocks
+/// clocks with auto enble
+/// the debug host clock auto enable is not used in host mode, only in uart mode
+#define OC_HOST_UART (0)
+
+// ============================================================================
+// OTHER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ OC_DEBUG_UART = 0x00000000,
+ OC_RF_RX = 0x00000001,
+ OC_RF_TX = 0x00000002,
+ OC_MEM_BRIDGE = 0x00000003,
+/// the following don't have an auto enable
+ OC_LPS = 0x00000004,
+ OC_GPIO = 0x00000005,
+ OC_CLK_OUT = 0x00000006,
+ OC_MEM_CLK_OUT = 0x00000007,
+ OC_TCU = 0x00000008
+} OTHER_CLKS_T;
+
+#define NB_OTHER_CLK_AEN (4)
+#define NB_OTHER_CLK_EN (9)
+#define NB_OTHER_CLK (9)
+
+// ============================================================================
+// RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side resets
+ RST_XCPU = 0x00000000,
+ RST_SYS_IRQ = 0x00000001,
+ RST_SYS_A2A = 0x00000002,
+ RST_SYS_AHB2AXI = 0x00000003,
+ RST_SYS_AXI2AHB = 0x00000004,
+ RST_DMA = 0x00000005,
+ RST_TIMER = 0x00000006,
+ RST_TCU = 0x00000007,
+ RST_GPIO = 0x00000008,
+ RST_I2C = 0x00000009,
+ RST_SPI1 = 0x0000000A,
+ RST_SPI2 = 0x0000000B,
+ RST_RF_SPI = 0x0000000C,
+ RST_SCI1 = 0x0000000D,
+ RST_SCI2 = 0x0000000E,
+ RST_SCI3 = 0x0000000F,
+ RST_SPY = 0x00000010,
+ RST_MEM_BRIDGE = 0x00000011,
+ RST_EXT_AHB = 0x00000012,
+ RST_DP_AP = 0x00000013,
+ RST_COMREGS = 0x00000014,
+ RST_COMREGS_AP = 0x00000015,
+ RST_AP_CLKEN = 0x00000016,
+ RST_AP_RST = 0x00000017,
+ RST_MEM_CHK = 0x00000018,
+ RST_AP_RST1 = 0x00000019,
+ RST_AP_RST2 = 0x0000001A,
+ RST_AP_RST3 = 0x0000001B,
+ RST_AP_RST4 = 0x0000001C,
+ RST_AP_RST5 = 0x0000001D,
+ RST_BCPU = 0x0000001E,
+ RST_BB_IRQ = 0x0000001F,
+ RST_BB_A2A = 0x00000020,
+ RST_BB_IFC = 0x00000021,
+ RST_BB_SRAM = 0x00000022,
+ RST_ITLV = 0x00000023,
+ RST_VITERBI = 0x00000024,
+ RST_CIPHER = 0x00000025,
+ RST_XCOR = 0x00000026,
+ RST_COPRO = 0x00000027,
+ RST_RF_IF = 0x00000028,
+ RST_EXCOR = 0x00000029,
+ RST_EVITAC = 0x0000002A,
+ RST_CORDIC = 0x0000002B,
+ RST_TCU_BB = 0x0000002C,
+ RST_BB_FULL = 0x0000002D,
+ RST_SYS_FULL = 0x0000002E
+} RESETS_T;
+
+#define NB_SRST (30)
+/// Baseband side resets
+#define BOUND_BRST_FIRST (30)
+#define BOUND_BRST_AFTER (45)
+/// The following reset does not have register
+#define NR_RST_REG (46)
+#define NB_RST (47)
+#define NB_BRST (BOUND_BRST_AFTER-BOUND_BRST_FIRST)
+
+// ============================================================================
+// RESET_OTHERS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Reset Other : resync on corresponding clock other
+ RSTO_DBG_HOST = 0x00000000,
+ RSTO_RF_RX = 0x00000001,
+ RSTO_RF_TX = 0x00000002,
+ RSTO_MEM_BRIDGE = 0x00000003,
+ RSTO_LPS = 0x00000004,
+ RSTO_GPIO = 0x00000005,
+ RSTO_WDTIMER = 0x00000006,
+ RSTO_TCU = 0x00000007
+} RESET_OTHERS_T;
+
+#define BOUND_RSTO_RF_FIRST (1)
+#define BOUND_RSTO_RF_AFTER (3)
+#define NB_RSTO (8)
+/// For REG_DBG protect lock/unlock value
+#define SYS_CTRL_PROTECT_LOCK (0XA50000)
+#define SYS_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// This register is protected.
+ REG32 Sys_Rst_Set; //0x00000004
+ REG32 Sys_Rst_Clr; //0x00000008
+ /// This register is protected.
+ REG32 BB_Rst_Set; //0x0000000C
+ REG32 BB_Rst_Clr; //0x00000010
+ REG32 Clk_Sys_Mode; //0x00000014
+ REG32 Clk_Sys_Enable; //0x00000018
+ /// This register is protected.
+ REG32 Clk_Sys_Disable; //0x0000001C
+ REG32 Clk_Per_Mode; //0x00000020
+ REG32 Clk_Per_Enable; //0x00000024
+ /// This register is protected.
+ REG32 Clk_Per_Disable; //0x00000028
+ REG32 Clk_BB_Mode; //0x0000002C
+ REG32 Clk_BB_Enable; //0x00000030
+ /// This register is protected.
+ REG32 Clk_BB_Disable; //0x00000034
+ REG32 Clk_Other_Mode; //0x00000038
+ REG32 Clk_Other_Enable; //0x0000003C
+ /// This register is protected.
+ REG32 Clk_Other_Disable; //0x00000040
+ /// Register protected by Write_Unlocked_H.
+ REG32 Pll_Ctrl; //0x00000044
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000048
+ REG32 Cfg_Clk_Sys; //0x0000004C
+ REG32 Cfg_Clk_Mem_Bridge; //0x00000050
+ /// This register is protected.
+ REG32 Cfg_Clk_Out; //0x00000054
+ REG32 Cfg_Clk_Host_Uart; //0x00000058
+ REG32 Cfg_Clk_Auxclk; //0x0000005C
+ /// This register is protected.
+ REG32 Cfg_AHB; //0x00000060
+ /// This register is protected. Used to unsplit masters manualy.
+ REG32 Ctrl_AHB; //0x00000064
+ REG32 XCpu_Dbg_BKP; //0x00000068
+ REG32 XCpu_Dbg_Addr; //0x0000006C
+ REG32 BCpu_Dbg_BKP; //0x00000070
+ REG32 BCpu_Dbg_Addr; //0x00000074
+ REG32 Cfg_Cpus_Cache_Ram_Disable; //0x00000078
+ REG32 Reset_Cause; //0x0000007C
+ /// This register is protected.
+ REG32 WakeUp; //0x00000080
+ REG32 AP_Ctrl; //0x00000084
+ /// This register is protected.
+ REG32 Ignore_Charger; //0x00000088
+ REG32 Reserved_0000008C[28]; //0x0000008C
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000000FC
+} HWP_SYS_CTRL_T;
+
+#define hwp_sysCtrlMd ((HWP_SYS_CTRL_T*)(RDA_MD_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_WRITE_UNLOCK (1<<31)
+
+//Sys_Rst_Set
+#define SYS_CTRL_SET_RST_XCPU (1<<0)
+#define SYS_CTRL_SET_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_SET_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_SET_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_SET_RST_DMA (1<<5)
+#define SYS_CTRL_SET_RST_TIMER (1<<6)
+#define SYS_CTRL_SET_RST_TCU (1<<7)
+#define SYS_CTRL_SET_RST_GPIO (1<<8)
+#define SYS_CTRL_SET_RST_I2C (1<<9)
+#define SYS_CTRL_SET_RST_SPI1 (1<<10)
+#define SYS_CTRL_SET_RST_SPI2 (1<<11)
+#define SYS_CTRL_SET_RST_RF_SPI (1<<12)
+#define SYS_CTRL_SET_RST_SCI1 (1<<13)
+#define SYS_CTRL_SET_RST_SCI2 (1<<14)
+#define SYS_CTRL_SET_RST_SCI3 (1<<15)
+#define SYS_CTRL_SET_RST_SPY (1<<16)
+#define SYS_CTRL_SET_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_SET_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_SET_RST_DP_AP (1<<19)
+#define SYS_CTRL_SET_RST_COMREGS (1<<20)
+#define SYS_CTRL_SET_RST_COMREGS_AP (1<<21)
+#define SYS_CTRL_SET_RST_AP_CLKEN (1<<22)
+#define SYS_CTRL_SET_RST_AP_RST (1<<23)
+#define SYS_CTRL_SET_RST_MEM_CHK (1<<24)
+#define SYS_CTRL_SET_RST_AP_RST1 (1<<25)
+#define SYS_CTRL_SET_RST_AP_RST2 (1<<26)
+#define SYS_CTRL_SET_RST_AP_RST3 (1<<27)
+#define SYS_CTRL_SET_RST_AP_RST4 (1<<28)
+#define SYS_CTRL_SET_RST_AP_RST5 (1<<29)
+#define SYS_CTRL_SET_RST_OUT (1<<30)
+#define SYS_CTRL_SOFT_RST (1<<31)
+#define SYS_CTRL_SET_SYS_RST(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_SET_SYS_RST_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_SET_SYS_RST_SHIFT (0)
+
+//Sys_Rst_Clr
+#define SYS_CTRL_CLR_RST_XCPU (1<<0)
+#define SYS_CTRL_CLR_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_CLR_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_CLR_RST_DMA (1<<5)
+#define SYS_CTRL_CLR_RST_TIMER (1<<6)
+#define SYS_CTRL_CLR_RST_TCU (1<<7)
+#define SYS_CTRL_CLR_RST_GPIO (1<<8)
+#define SYS_CTRL_CLR_RST_I2C (1<<9)
+#define SYS_CTRL_CLR_RST_SPI1 (1<<10)
+#define SYS_CTRL_CLR_RST_SPI2 (1<<11)
+#define SYS_CTRL_CLR_RST_RF_SPI (1<<12)
+#define SYS_CTRL_CLR_RST_SCI1 (1<<13)
+#define SYS_CTRL_CLR_RST_SCI2 (1<<14)
+#define SYS_CTRL_CLR_RST_SCI3 (1<<15)
+#define SYS_CTRL_CLR_RST_SPY (1<<16)
+#define SYS_CTRL_CLR_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_CLR_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_CLR_RST_DP_AP (1<<19)
+#define SYS_CTRL_CLR_RST_COMREGS (1<<20)
+#define SYS_CTRL_CLR_RST_COMREGS_AP (1<<21)
+#define SYS_CTRL_CLR_RST_AP_CLKEN (1<<22)
+#define SYS_CTRL_CLR_RST_AP_RST (1<<23)
+#define SYS_CTRL_CLR_RST_MEM_CHK (1<<24)
+#define SYS_CTRL_CLR_RST_AP_RST1 (1<<25)
+#define SYS_CTRL_CLR_RST_AP_RST2 (1<<26)
+#define SYS_CTRL_CLR_RST_AP_RST3 (1<<27)
+#define SYS_CTRL_CLR_RST_AP_RST4 (1<<28)
+#define SYS_CTRL_CLR_RST_AP_RST5 (1<<29)
+#define SYS_CTRL_CLR_RST_OUT (1<<30)
+#define SYS_CTRL_CLR_SYS_RST(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_CLR_SYS_RST_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_CLR_SYS_RST_SHIFT (0)
+
+//BB_Rst_Set
+#define SYS_CTRL_SET_RST_BCPU (1<<0)
+#define SYS_CTRL_SET_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_BB_A2A (1<<2)
+#define SYS_CTRL_SET_RST_BB_IFC (1<<3)
+#define SYS_CTRL_SET_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_SET_RST_ITLV (1<<5)
+#define SYS_CTRL_SET_RST_VITERBI (1<<6)
+#define SYS_CTRL_SET_RST_CIPHER (1<<7)
+#define SYS_CTRL_SET_RST_XCOR (1<<8)
+#define SYS_CTRL_SET_RST_COPRO (1<<9)
+#define SYS_CTRL_SET_RST_RF_IF (1<<10)
+#define SYS_CTRL_SET_RST_EXCOR (1<<11)
+#define SYS_CTRL_SET_RST_EVITAC (1<<12)
+#define SYS_CTRL_SET_RST_CORDIC (1<<13)
+#define SYS_CTRL_SET_RST_TCU_BB (1<<14)
+#define SYS_CTRL_SET_RST_BB_FULL (1<<31)
+#define SYS_CTRL_SET_BB_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_SET_BB_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_SET_BB_RST_SHIFT (0)
+
+//BB_Rst_Clr
+#define SYS_CTRL_CLR_RST_BCPU (1<<0)
+#define SYS_CTRL_CLR_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_BB_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_BB_IFC (1<<3)
+#define SYS_CTRL_CLR_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_CLR_RST_ITLV (1<<5)
+#define SYS_CTRL_CLR_RST_VITERBI (1<<6)
+#define SYS_CTRL_CLR_RST_CIPHER (1<<7)
+#define SYS_CTRL_CLR_RST_XCOR (1<<8)
+#define SYS_CTRL_CLR_RST_COPRO (1<<9)
+#define SYS_CTRL_CLR_RST_RF_IF (1<<10)
+#define SYS_CTRL_CLR_RST_EXCOR (1<<11)
+#define SYS_CTRL_CLR_RST_EVITAC (1<<12)
+#define SYS_CTRL_CLR_RST_CORDIC (1<<13)
+#define SYS_CTRL_CLR_RST_TCU_BB (1<<14)
+#define SYS_CTRL_CLR_RST_BB_FULL (1<<31)
+#define SYS_CTRL_CLR_BB_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_CLR_BB_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_CLR_BB_RST_SHIFT (0)
+
+//Clk_Sys_Mode
+#define SYS_CTRL_MODE_SYS_XCPU (1<<0)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_SYS_AMBA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_SYS_AMBA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_SYS_DMA_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_SYS_DMA_MANUAL (1<<5)
+#define SYS_CTRL_MODE_SYS_EBC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_SYS_EBC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_MANUAL (1<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_MANUAL (1<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_MANUAL (1<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_MANUAL (1<<10)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_MANUAL (1<<11)
+#define SYS_CTRL_MODE_SYS_A2A_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_SYS_A2A_MANUAL (1<<12)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_MANUAL (1<<13)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_MANUAL (1<<14)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_MANUAL (1<<15)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_MANUAL (1<<16)
+#define SYS_CTRL_MODE_SYS_DBGHST_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_SYS_DBGHST_MANUAL (1<<17)
+#define SYS_CTRL_MODE_SYSD_SCI1_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_SYSD_SCI1_MANUAL (1<<18)
+#define SYS_CTRL_MODE_SYSD_SCI2_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_SYSD_SCI2_MANUAL (1<<19)
+#define SYS_CTRL_MODE_SYSD_SCI3_AUTOMATIC (0<<20)
+#define SYS_CTRL_MODE_SYSD_SCI3_MANUAL (1<<20)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_AUTOMATIC (0<<21)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_MANUAL (1<<21)
+#define SYS_CTRL_MODE_SYSD_OSC_AUTOMATIC (0<<22)
+#define SYS_CTRL_MODE_SYSD_OSC_MANUAL (1<<22)
+#define SYS_CTRL_MODE_CLK_SYS(n) (((n)&0x3FFFFF)<<1)
+#define SYS_CTRL_MODE_CLK_SYS_MASK (0x3FFFFF<<1)
+#define SYS_CTRL_MODE_CLK_SYS_SHIFT (1)
+
+//Clk_Sys_Enable
+#define SYS_CTRL_ENABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_ENABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_ENABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_ENABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_ENABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_ENABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_ENABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_ENABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_ENABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_ENABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_ENABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_ENABLE_SYSD_SCI1 (1<<18)
+#define SYS_CTRL_ENABLE_SYSD_SCI2 (1<<19)
+#define SYS_CTRL_ENABLE_SYSD_SCI3 (1<<20)
+#define SYS_CTRL_ENABLE_SYSD_RF_SPI (1<<21)
+#define SYS_CTRL_ENABLE_SYSD_OSC (1<<22)
+#define SYS_CTRL_ENABLE_SYS_GPIO (1<<23)
+#define SYS_CTRL_ENABLE_SYS_IRQ (1<<24)
+#define SYS_CTRL_ENABLE_SYS_TCU (1<<25)
+#define SYS_CTRL_ENABLE_SYS_TIMER (1<<26)
+#define SYS_CTRL_ENABLE_SYS_COM_REGS (1<<27)
+#define SYS_CTRL_ENABLE_SYS_DP_AP (1<<28)
+#define SYS_CTRL_ENABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Sys_Disable
+#define SYS_CTRL_DISABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_DISABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_DISABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_DISABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_DISABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_DISABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_DISABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_DISABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_DISABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_DISABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_DISABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_DISABLE_SYSD_SCI1 (1<<18)
+#define SYS_CTRL_DISABLE_SYSD_SCI2 (1<<19)
+#define SYS_CTRL_DISABLE_SYSD_SCI3 (1<<20)
+#define SYS_CTRL_DISABLE_SYSD_RF_SPI (1<<21)
+#define SYS_CTRL_DISABLE_SYSD_OSC (1<<22)
+#define SYS_CTRL_DISABLE_SYS_GPIO (1<<23)
+#define SYS_CTRL_DISABLE_SYS_IRQ (1<<24)
+#define SYS_CTRL_DISABLE_SYS_TCU (1<<25)
+#define SYS_CTRL_DISABLE_SYS_TIMER (1<<26)
+#define SYS_CTRL_DISABLE_SYS_COM_REGS (1<<27)
+#define SYS_CTRL_DISABLE_SYS_DP_AP (1<<28)
+#define SYS_CTRL_DISABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Per_Mode
+#define SYS_CTRL_MODE_PER_I2C_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_PER_I2C_MANUAL (1<<0)
+#define SYS_CTRL_MODE_PERD_SPI1_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_PERD_SPI1_MANUAL (1<<1)
+#define SYS_CTRL_MODE_PERD_SPI2_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_PERD_SPI2_MANUAL (1<<2)
+#define SYS_CTRL_MODE_CLK_PER(n) (((n)&7)<<0)
+#define SYS_CTRL_MODE_CLK_PER_MASK (7<<0)
+#define SYS_CTRL_MODE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Enable
+#define SYS_CTRL_ENABLE_PER_I2C (1<<0)
+#define SYS_CTRL_ENABLE_PERD_SPI1 (1<<1)
+#define SYS_CTRL_ENABLE_PERD_SPI2 (1<<2)
+#define SYS_CTRL_ENABLE_PER_SPY (1<<3)
+#define SYS_CTRL_ENABLE_PER_TEST (1<<4)
+#define SYS_CTRL_ENABLE_CLK_PER(n) (((n)&31)<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_MASK (31<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Disable
+#define SYS_CTRL_DISABLE_PER_I2C (1<<0)
+#define SYS_CTRL_DISABLE_PERD_SPI1 (1<<1)
+#define SYS_CTRL_DISABLE_PERD_SPI2 (1<<2)
+#define SYS_CTRL_DISABLE_PER_SPY (1<<3)
+#define SYS_CTRL_DISABLE_PER_TEST (1<<4)
+#define SYS_CTRL_DISABLE_CLK_PER(n) (((n)&31)<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_MASK (31<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_SHIFT (0)
+
+//Clk_BB_Mode
+#define SYS_CTRL_MODE_BB_BCPU (1<<0)
+#define SYS_CTRL_MODE_BB_BCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_BB_BCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_BB_AMBA_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_BB_AMBA_MANUAL (1<<2)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_MANUAL (1<<3)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_BB_EXCOR_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_BB_EXCOR_MANUAL (1<<5)
+#define SYS_CTRL_MODE_BB_IFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_BB_IFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_MODE_BB_SRAM_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_BB_SRAM_MANUAL (1<<8)
+#define SYS_CTRL_MODE_BB_A2A_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_BB_A2A_MANUAL (1<<9)
+#define SYS_CTRL_MODE_BB_ITLV_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_BB_ITLV_MANUAL (1<<10)
+#define SYS_CTRL_MODE_BB_VITERBI_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_BB_VITERBI_MANUAL (1<<11)
+#define SYS_CTRL_MODE_BB_CIPHER_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_BB_CIPHER_MANUAL (1<<12)
+#define SYS_CTRL_MODE_BB_RF_IF_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_BB_RF_IF_MANUAL (1<<13)
+#define SYS_CTRL_MODE_BB_COPRO_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_BB_COPRO_MANUAL (1<<14)
+#define SYS_CTRL_MODE_BB_CP2_REG_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_BB_CP2_REG_MANUAL (1<<15)
+#define SYS_CTRL_MODE_BB_XCOR_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_BB_XCOR_MANUAL (1<<16)
+#define SYS_CTRL_MODE_BB_EVITAC_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_BB_EVITAC_MANUAL (1<<17)
+#define SYS_CTRL_MODE_CLK_BB(n) (((n)&0x1FFFF)<<1)
+#define SYS_CTRL_MODE_CLK_BB_MASK (0x1FFFF<<1)
+#define SYS_CTRL_MODE_CLK_BB_SHIFT (1)
+
+//Clk_BB_Enable
+#define SYS_CTRL_ENABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_ENABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_ENABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_ENABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_ENABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_ENABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_ENABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_ENABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_ENABLE_BB_A2A (1<<9)
+#define SYS_CTRL_ENABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_ENABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_ENABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_ENABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_ENABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_ENABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_ENABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_ENABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_ENABLE_BB_IRQ (1<<18)
+#define SYS_CTRL_ENABLE_BB_COM_REGS (1<<19)
+#define SYS_CTRL_ENABLE_BB_CORDIC (1<<20)
+#define SYS_CTRL_ENABLE_CLK_BB(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_SHIFT (0)
+
+//Clk_BB_Disable
+#define SYS_CTRL_DISABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_DISABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_DISABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_DISABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_DISABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_DISABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_DISABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_DISABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_DISABLE_BB_A2A (1<<9)
+#define SYS_CTRL_DISABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_DISABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_DISABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_DISABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_DISABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_DISABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_DISABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_DISABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_DISABLE_BB_IRQ (1<<18)
+#define SYS_CTRL_DISABLE_BB_COM_REGS (1<<19)
+#define SYS_CTRL_DISABLE_BB_CORDIC (1<<20)
+#define SYS_CTRL_DISABLE_CLK_BB(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_SHIFT (0)
+
+//Clk_Other_Mode
+#define SYS_CTRL_MODE_OC_DEBUG_UART_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_OC_DEBUG_UART_MANUAL (1<<0)
+#define SYS_CTRL_MODE_OC_RF_RX_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_OC_RF_RX_MANUAL (1<<1)
+#define SYS_CTRL_MODE_OC_RF_TX_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_OC_RF_TX_MANUAL (1<<2)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_MANUAL (1<<3)
+#define SYS_CTRL_MODE_CLK_OTHER(n) (((n)&15)<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_MASK (15<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Enable
+#define SYS_CTRL_ENABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_ENABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_ENABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_ENABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_ENABLE_OC_LPS (1<<4)
+#define SYS_CTRL_ENABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_ENABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_ENABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_ENABLE_OC_TCU (1<<8)
+#define SYS_CTRL_ENABLE_CLK_OTHER(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_MASK (0x1FF<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Disable
+#define SYS_CTRL_DISABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_DISABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_DISABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_DISABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_DISABLE_OC_LPS (1<<4)
+#define SYS_CTRL_DISABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_DISABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_DISABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_DISABLE_OC_TCU (1<<8)
+#define SYS_CTRL_DISABLE_CLK_OTHER(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_MASK (0x1FF<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_SHIFT (0)
+
+//Pll_Ctrl
+#define SYS_CTRL_PLL_ENABLE (1<<0)
+#define SYS_CTRL_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_PLL_BYPASS (1<<8)
+#define SYS_CTRL_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_XP_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_XP_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_XP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_TCU_13M_L_26M (1<<5)
+#define SYS_CTRL_TCU_13M_L_13M (0<<5)
+#define SYS_CTRL_PLL_DISABLE_LPS_DISABLE (1<<6)
+#define SYS_CTRL_PLL_DISABLE_LPS_ENABLE (0<<6)
+#define SYS_CTRL_DIGEN_H_ENABLE (1<<7)
+#define SYS_CTRL_DIGEN_H_DISABLE (0<<7)
+#define SYS_CTRL_RF_DETECTED_OK (1<<20)
+#define SYS_CTRL_RF_DETECTED_NO (0<<20)
+#define SYS_CTRL_RF_DETECT_BYPASS (1<<21)
+#define SYS_CTRL_RF_DETECT_RESET (1<<22)
+#define SYS_CTRL_RF_SELECTED_L (1<<23)
+#define SYS_CTRL_PLL_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_MASK (1<<24)
+#define SYS_CTRL_PLL_LOCKED_SHIFT (24)
+#define SYS_CTRL_PLL_LOCKED_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_NOT_LOCKED (0<<24)
+#define SYS_CTRL_PLL_BYPASS_LOCK (1<<27)
+#define SYS_CTRL_FAST_SELECTED_L (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_MASK (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_SHIFT (31)
+
+//Cfg_Clk_Sys
+#define SYS_CTRL_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_FREQ_MASK (15<<0)
+#define SYS_CTRL_FREQ_SHIFT (0)
+#define SYS_CTRL_FREQ_312M (13<<0)
+#define SYS_CTRL_FREQ_250M (12<<0)
+#define SYS_CTRL_FREQ_208M (11<<0)
+#define SYS_CTRL_FREQ_178M (10<<0)
+#define SYS_CTRL_FREQ_156M (9<<0)
+#define SYS_CTRL_FREQ_139M (8<<0)
+#define SYS_CTRL_FREQ_125M (7<<0)
+#define SYS_CTRL_FREQ_113M (6<<0)
+#define SYS_CTRL_FREQ_104M (5<<0)
+#define SYS_CTRL_FREQ_89M (4<<0)
+#define SYS_CTRL_FREQ_78M (3<<0)
+#define SYS_CTRL_FREQ_52M (2<<0)
+#define SYS_CTRL_FREQ_39M (1<<0)
+#define SYS_CTRL_FREQ_26M (0<<0)
+#define SYS_CTRL_FORCE_DIV_UPDATE (1<<4)
+#define SYS_CTRL_REQ_DIV_UPDATE (1<<8)
+
+//Cfg_Clk_Mem_Bridge
+#define SYS_CTRL_MEM_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MEM_FREQ_MASK (15<<0)
+#define SYS_CTRL_MEM_FREQ_SHIFT (0)
+#define SYS_CTRL_MEM_FREQ_312M (13<<0)
+#define SYS_CTRL_MEM_FREQ_250M (12<<0)
+#define SYS_CTRL_MEM_FREQ_208M (11<<0)
+#define SYS_CTRL_MEM_FREQ_178M (10<<0)
+#define SYS_CTRL_MEM_FREQ_156M (9<<0)
+#define SYS_CTRL_MEM_FREQ_139M (8<<0)
+#define SYS_CTRL_MEM_FREQ_125M (7<<0)
+#define SYS_CTRL_MEM_FREQ_113M (6<<0)
+#define SYS_CTRL_MEM_FREQ_104M (5<<0)
+#define SYS_CTRL_MEM_FREQ_89M (4<<0)
+#define SYS_CTRL_MEM_FREQ_78M (3<<0)
+#define SYS_CTRL_MEM_FREQ_52M (2<<0)
+#define SYS_CTRL_MEM_FREQ_39M (1<<0)
+#define SYS_CTRL_MEM_FREQ_26M (0<<0)
+#define SYS_CTRL_DDR_MODE_EN_NORMAL_MODE (0<<4)
+#define SYS_CTRL_DDR_MODE_EN_DDR_MODE (1<<4)
+#define SYS_CTRL_DDR_FAST_CLK_POL_INVERT (1<<5)
+#define SYS_CTRL_DDR_FAST_CLK_POL_NORMAL (0<<5)
+#define SYS_CTRL_DDR_DQSL_O(n) (((n)&31)<<6)
+#define SYS_CTRL_DDR_DQSU_O(n) (((n)&31)<<11)
+#define SYS_CTRL_DDR_DQS_OEN(n) (((n)&31)<<16)
+#define SYS_CTRL_DDR_DQSL_I(n) (((n)&31)<<21)
+#define SYS_CTRL_DDR_DQSU_I(n) (((n)&31)<<26)
+#define SYS_CTRL_MEM_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Out
+#define SYS_CTRL_CLKOUT_DIVIDER(n) (((n)&31)<<0)
+#define SYS_CTRL_CLKOUT_SEL_OSC (0<<8)
+#define SYS_CTRL_CLKOUT_SEL_RF (1<<8)
+#define SYS_CTRL_CLKOUT_SEL_DIVIDER (2<<8)
+
+//Cfg_Clk_Host_Uart
+#define SYS_CTRL_HOST_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_HOST_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_HOST_UART_SEL_PLL_PLL (1<<12)
+
+//Cfg_Clk_Auxclk
+#define SYS_CTRL_AUXCLK_EN_DISABLE (0<<0)
+#define SYS_CTRL_AUXCLK_EN_ENABLE (1<<0)
+
+//Cfg_AHB
+#define SYS_CTRL_SYS_NEW_ARBITRATION_ENABLE (1<<0)
+#define SYS_CTRL_SYS_NEW_ARBITRATION_DISABLE (0<<0)
+#define SYS_CTRL_ENABLE_SYS_MID_BIST_ENABLE (1<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_BIST_DISABLE (0<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_ENABLE (1<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_DISABLE (0<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_ENABLE (1<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_DISABLE (0<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_ENABLE (1<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_DISABLE (0<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_ENABLE (1<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_DISABLE (0<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_ENABLE (1<<6)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_DISABLE (0<<6)
+#define SYS_CTRL_BB_NEW_ARBITRATION_ENABLE (1<<16)
+#define SYS_CTRL_BB_NEW_ARBITRATION_DISABLE (0<<16)
+#define SYS_CTRL_ENABLE_BB_MID_BIST_ENABLE (1<<17)
+#define SYS_CTRL_ENABLE_BB_MID_BIST_DISABLE (0<<17)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_ENABLE (1<<18)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_DISABLE (0<<18)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_ENABLE (1<<19)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_DISABLE (0<<19)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_ENABLE (1<<20)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_DISABLE (0<<20)
+#define SYS_CTRL_SYS_ENABLE(n) (((n)&0x3F)<<1)
+#define SYS_CTRL_SYS_ENABLE_MASK (0x3F<<1)
+#define SYS_CTRL_SYS_ENABLE_SHIFT (1)
+#define SYS_CTRL_BB_ENABLE(n) (((n)&15)<<17)
+#define SYS_CTRL_BB_ENABLE_MASK (15<<17)
+#define SYS_CTRL_BB_ENABLE_SHIFT (17)
+
+//Ctrl_AHB
+#define SYS_CTRL_SPLIT_SYS_MID_BIST_NORMAL (1<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_BIST_FORCE (0<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_NORMAL (1<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_FORCE (0<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_NORMAL (1<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_FORCE (0<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_NORMAL (1<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_FORCE (0<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_NORMAL (1<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_FORCE (0<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_NORMAL (1<<5)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_FORCE (0<<5)
+#define SYS_CTRL_SPLIT_BB_MID_BIST_NORMAL (1<<16)
+#define SYS_CTRL_SPLIT_BB_MID_BIST_FORCE (0<<16)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_NORMAL (1<<17)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_FORCE (0<<17)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_NORMAL (1<<18)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_FORCE (0<<18)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_NORMAL (1<<19)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_FORCE (0<<19)
+#define SYS_CTRL_SYS_FORCE_HSPLIT(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_MASK (0x3F<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_SHIFT (0)
+#define SYS_CTRL_BB_FORCE_HSPLIT(n) (((n)&15)<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_MASK (15<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_SHIFT (16)
+
+//XCpu_Dbg_BKP
+#define SYS_CTRL_BKPT_EN (1<<0)
+#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+#define SYS_CTRL_BKPT_MODE_I (0<<4)
+#define SYS_CTRL_BKPT_MODE_R (1<<4)
+#define SYS_CTRL_BKPT_MODE_W (2<<4)
+#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+#define SYS_CTRL_STALLED (1<<8)
+
+//XCpu_Dbg_Addr
+#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//BCpu_Dbg_BKP
+//#define SYS_CTRL_BKPT_EN (1<<0)
+//#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+//#define SYS_CTRL_BKPT_MODE_I (0<<4)
+//#define SYS_CTRL_BKPT_MODE_R (1<<4)
+//#define SYS_CTRL_BKPT_MODE_W (2<<4)
+//#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+//#define SYS_CTRL_STALLED (1<<8)
+
+//BCpu_Dbg_Addr
+//#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//Cfg_Cpus_Cache_Ram_Disable
+#define SYS_CTRL_XCPU_USE_MODE (1<<0)
+#define SYS_CTRL_XCPU_CLK_OFF_MODE (1<<1)
+#define SYS_CTRL_BCPU_USE_MODE (1<<16)
+#define SYS_CTRL_BCPU_CLK_OFF_MODE (1<<17)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_MASK (3<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_SHIFT (0)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_MASK (3<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_SHIFT (16)
+
+//Reset_Cause
+#define SYS_CTRL_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_APSOFT_RESET_HAPPENED (1<<1)
+#define SYS_CTRL_APSOFT_RESET_NO (0<<1)
+#define SYS_CTRL_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_MEMCHECKDONE_MASK (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_SHIFT (7)
+#define SYS_CTRL_MEMCHECKDONE_DONE (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_RUNNING (0<<7)
+#define SYS_CTRL_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_FONCTIONAL_TEST_MODE (1<<31)
+
+//WakeUp
+#define SYS_CTRL_FORCE_WAKEUP (1<<0)
+
+//AP_Ctrl
+#define SYS_CTRL_AP_INT_STATUS (1<<0)
+#define SYS_CTRL_AP_INT_MASK (1<<16)
+#define SYS_CTRL_AP_DEEPSLEEP_EN (1<<24)
+
+//Ignore_Charger
+#define SYS_CTRL_IGNORE_CHARGER (1<<0)
+
+//Cfg_Reserve
+#define SYS_CTRL_RESERVE_L(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AUIFC_CH0_IRQ_MASK (1<<14)
+#define SYS_CTRL_AUIFC_CH1_IRQ_MASK (1<<15)
+#define SYS_CTRL_RESERVE_H(n) (((n)&0xFFFF)<<16)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810h.h b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810h.h
new file mode 100644
index 0000000000..0ecd75897f
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8810h.h
@@ -0,0 +1,979 @@
+#ifndef _REG_MD_SYSCTRL_H_
+#define _REG_MD_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ XCPU = 0x00000000,
+ BCPU = 0x00000001
+} CPU_ID_T;
+
+
+// ============================================================================
+// SYS_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side System clocks
+ SYS_XCPU = 0x00000000,
+ SYS_XCPU_INT = 0x00000001,
+ SYS_PCLK_CONF = 0x00000002,
+ SYS_PCLK_DATA = 0x00000003,
+ SYS_AMBA = 0x00000004,
+ SYS_DMA = 0x00000005,
+ SYS_EBC = 0x00000006,
+ SYS_IFC_CH0 = 0x00000007,
+ SYS_IFC_CH1 = 0x00000008,
+ SYS_IFC_CH2 = 0x00000009,
+ SYS_IFC_CH3 = 0x0000000A,
+ SYS_IFC_DBG = 0x0000000B,
+ SYS_A2A = 0x0000000C,
+ SYS_AXI2AHB = 0x0000000D,
+ SYS_AHB2AXI = 0x0000000E,
+ SYS_EXT_AHB = 0x0000000F,
+ SYS_DEBUG_UART = 0x00000010,
+ SYS_DBGHST = 0x00000011,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ SYSD_SCI1 = 0x00000012,
+ SYSD_SCI2 = 0x00000013,
+ SYSD_SCI3 = 0x00000014,
+ SYSD_RF_SPI = 0x00000015,
+ SYSD_OSC = 0x00000016,
+/// the following don't have an auto enable
+ SYS_GPIO = 0x00000017,
+ SYS_IRQ = 0x00000018,
+ SYS_TCU = 0x00000019,
+ SYS_TIMER = 0x0000001A,
+ SYS_COM_REGS = 0x0000001B,
+ SYS_DP_AP = 0x0000001C,
+/// the following are sharing their enable
+ SYS_SCI1 = 0x0000001D,
+ SYS_SCI2 = 0x0000001E,
+ SYS_SCI3 = 0x0000001F,
+/// keep last
+ SYS_NOGATE = 0x00000020
+} SYS_CLKS_T;
+
+#define NB_SYS_CLK_XCPU (2)
+#define NB_SYS_CLK_AEN (23)
+#define NB_SYS_CLK_EN (29)
+#define NB_SYS_CLK (33)
+
+// ============================================================================
+// PER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ PER_I2C = 0x00000000,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI1 = 0x00000001,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI2 = 0x00000002,
+ PER_SPY = 0x00000003,
+ PER_TEST = 0x00000004
+} PER_CLKS_T;
+
+#define NB_PER_CLK_AEN (3)
+#define NB_PER_CLK_EN (5)
+#define NB_PER_CLK (5)
+
+// ============================================================================
+// BB_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Baseband side System clocks
+ BB_BCPU = 0x00000000,
+ BB_BCPU_INT = 0x00000001,
+ BB_AMBA = 0x00000002,
+ BB_PCLK_CONF = 0x00000003,
+ BB_PCLK_DATA = 0x00000004,
+ BB_EXCOR = 0x00000005,
+ BB_IFC_CH2 = 0x00000006,
+ BB_IFC_CH3 = 0x00000007,
+ BB_SRAM = 0x00000008,
+ BB_A2A = 0x00000009,
+ BB_ITLV = 0x0000000A,
+ BB_VITERBI = 0x0000000B,
+ BB_CIPHER = 0x0000000C,
+ BB_RF_IF = 0x0000000D,
+ BB_COPRO = 0x0000000E,
+ BB_CP2_REG = 0x0000000F,
+ BB_XCOR = 0x00000010,
+ BB_EVITAC = 0x00000011,
+/// the following don't have an auto enable
+ BB_IRQ = 0x00000012,
+ BB_COM_REGS = 0x00000013,
+ BB_CORDIC = 0x00000014
+} BB_CLKS_T;
+
+#define NB_BB_CLK_AEN (18)
+#define NB_BB_CLK_EN (21)
+#define NB_BB_CLK (21)
+/// Other clocks
+/// clocks with auto enble
+/// the debug host clock auto enable is not used in host mode, only in uart mode
+#define OC_HOST_UART (0)
+
+// ============================================================================
+// OTHER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ OC_DEBUG_UART = 0x00000000,
+ OC_RF_RX = 0x00000001,
+ OC_RF_TX = 0x00000002,
+ OC_MEM_BRIDGE = 0x00000003,
+/// the following don't have an auto enable
+ OC_LPS = 0x00000004,
+ OC_GPIO = 0x00000005,
+ OC_CLK_OUT = 0x00000006,
+ OC_MEM_CLK_OUT = 0x00000007,
+ OC_TCU = 0x00000008
+} OTHER_CLKS_T;
+
+#define NB_OTHER_CLK_AEN (4)
+#define NB_OTHER_CLK_EN (9)
+#define NB_OTHER_CLK (9)
+
+// ============================================================================
+// RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side resets
+ RST_XCPU = 0x00000000,
+ RST_SYS_IRQ = 0x00000001,
+ RST_SYS_A2A = 0x00000002,
+ RST_SYS_AHB2AXI = 0x00000003,
+ RST_SYS_AXI2AHB = 0x00000004,
+ RST_DMA = 0x00000005,
+ RST_TIMER = 0x00000006,
+ RST_TCU = 0x00000007,
+ RST_GPIO = 0x00000008,
+ RST_I2C = 0x00000009,
+ RST_SPI1 = 0x0000000A,
+ RST_SPI2 = 0x0000000B,
+ RST_RF_SPI = 0x0000000C,
+ RST_SCI1 = 0x0000000D,
+ RST_SCI2 = 0x0000000E,
+ RST_SCI3 = 0x0000000F,
+ RST_SPY = 0x00000010,
+ RST_MEM_BRIDGE = 0x00000011,
+ RST_EXT_AHB = 0x00000012,
+ RST_DP_AP = 0x00000013,
+ RST_COMREGS = 0x00000014,
+ RST_COMREGS_AP = 0x00000015,
+ RST_AP_CLKEN = 0x00000016,
+ RST_AP_RST = 0x00000017,
+ RST_MEM_CHK = 0x00000018,
+ RST_AP_RST1 = 0x00000019,
+ RST_AP_RST2 = 0x0000001A,
+ RST_AP_RST3 = 0x0000001B,
+ RST_AP_RST4 = 0x0000001C,
+ RST_AP_RST5 = 0x0000001D,
+ RST_BCPU = 0x0000001E,
+ RST_BB_IRQ = 0x0000001F,
+ RST_BB_A2A = 0x00000020,
+ RST_BB_IFC = 0x00000021,
+ RST_BB_SRAM = 0x00000022,
+ RST_ITLV = 0x00000023,
+ RST_VITERBI = 0x00000024,
+ RST_CIPHER = 0x00000025,
+ RST_XCOR = 0x00000026,
+ RST_COPRO = 0x00000027,
+ RST_RF_IF = 0x00000028,
+ RST_EXCOR = 0x00000029,
+ RST_EVITAC = 0x0000002A,
+ RST_CORDIC = 0x0000002B,
+ RST_TCU_BB = 0x0000002C,
+ RST_BB_FULL = 0x0000002D,
+ RST_SYS_FULL = 0x0000002E
+} RESETS_T;
+
+#define NB_SRST (30)
+/// Baseband side resets
+#define BOUND_BRST_FIRST (30)
+#define BOUND_BRST_AFTER (45)
+/// The following reset does not have register
+#define NR_RST_REG (46)
+#define NB_RST (47)
+#define NB_BRST (BOUND_BRST_AFTER-BOUND_BRST_FIRST)
+
+// ============================================================================
+// RESET_OTHERS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Reset Other : resync on corresponding clock other
+ RSTO_DBG_HOST = 0x00000000,
+ RSTO_RF_RX = 0x00000001,
+ RSTO_RF_TX = 0x00000002,
+ RSTO_MEM_BRIDGE = 0x00000003,
+ RSTO_LPS = 0x00000004,
+ RSTO_GPIO = 0x00000005,
+ RSTO_WDTIMER = 0x00000006,
+ RSTO_TCU = 0x00000007
+} RESET_OTHERS_T;
+
+#define BOUND_RSTO_RF_FIRST (1)
+#define BOUND_RSTO_RF_AFTER (3)
+#define NB_RSTO (8)
+/// For REG_DBG protect lock/unlock value
+#define SYS_CTRL_PROTECT_LOCK (0XA50000)
+#define SYS_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// This register is protected.
+ REG32 Sys_Rst_Set; //0x00000004
+ REG32 Sys_Rst_Clr; //0x00000008
+ /// This register is protected.
+ REG32 BB_Rst_Set; //0x0000000C
+ REG32 BB_Rst_Clr; //0x00000010
+ REG32 Clk_Sys_Mode; //0x00000014
+ REG32 Clk_Sys_Enable; //0x00000018
+ /// This register is protected.
+ REG32 Clk_Sys_Disable; //0x0000001C
+ REG32 Clk_Per_Mode; //0x00000020
+ REG32 Clk_Per_Enable; //0x00000024
+ /// This register is protected.
+ REG32 Clk_Per_Disable; //0x00000028
+ REG32 Clk_BB_Mode; //0x0000002C
+ REG32 Clk_BB_Enable; //0x00000030
+ /// This register is protected.
+ REG32 Clk_BB_Disable; //0x00000034
+ REG32 Clk_Other_Mode; //0x00000038
+ REG32 Clk_Other_Enable; //0x0000003C
+ /// This register is protected.
+ REG32 Clk_Other_Disable; //0x00000040
+ /// Register protected by Write_Unlocked_H.
+ REG32 Pll_Ctrl; //0x00000044
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000048
+ REG32 Cfg_Clk_Sys; //0x0000004C
+ REG32 Cfg_Clk_Mem_Bridge; //0x00000050
+ /// This register is protected.
+ REG32 Cfg_Clk_Out; //0x00000054
+ REG32 Cfg_Clk_Host_Uart; //0x00000058
+ REG32 Cfg_Clk_Auxclk; //0x0000005C
+ /// This register is protected.
+ REG32 Cfg_AHB; //0x00000060
+ /// This register is protected. Used to unsplit masters manualy.
+ REG32 Ctrl_AHB; //0x00000064
+ REG32 XCpu_Dbg_BKP; //0x00000068
+ REG32 XCpu_Dbg_Addr; //0x0000006C
+ REG32 BCpu_Dbg_BKP; //0x00000070
+ REG32 BCpu_Dbg_Addr; //0x00000074
+ REG32 Cfg_Cpus_Cache_Ram_Disable; //0x00000078
+ REG32 Reset_Cause; //0x0000007C
+ /// This register is protected.
+ REG32 WakeUp; //0x00000080
+ REG32 AP_Ctrl; //0x00000084
+ /// This register is protected.
+ REG32 Ignore_Charger; //0x00000088
+ REG32 Reserved_0000008C[28]; //0x0000008C
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000000FC
+} HWP_SYS_CTRL_T;
+
+#define hwp_sysCtrlMd ((HWP_SYS_CTRL_T*)(RDA_MD_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_WRITE_UNLOCK (1<<31)
+
+//Sys_Rst_Set
+#define SYS_CTRL_SET_RST_XCPU (1<<0)
+#define SYS_CTRL_SET_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_SET_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_SET_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_SET_RST_DMA (1<<5)
+#define SYS_CTRL_SET_RST_TIMER (1<<6)
+#define SYS_CTRL_SET_RST_TCU (1<<7)
+#define SYS_CTRL_SET_RST_GPIO (1<<8)
+#define SYS_CTRL_SET_RST_I2C (1<<9)
+#define SYS_CTRL_SET_RST_SPI1 (1<<10)
+#define SYS_CTRL_SET_RST_SPI2 (1<<11)
+#define SYS_CTRL_SET_RST_RF_SPI (1<<12)
+#define SYS_CTRL_SET_RST_SCI1 (1<<13)
+#define SYS_CTRL_SET_RST_SCI2 (1<<14)
+#define SYS_CTRL_SET_RST_SCI3 (1<<15)
+#define SYS_CTRL_SET_RST_SPY (1<<16)
+#define SYS_CTRL_SET_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_SET_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_SET_RST_DP_AP (1<<19)
+#define SYS_CTRL_SET_RST_COMREGS (1<<20)
+#define SYS_CTRL_SET_RST_COMREGS_AP (1<<21)
+#define SYS_CTRL_SET_RST_AP_CLKEN (1<<22)
+#define SYS_CTRL_SET_RST_AP_RST (1<<23)
+#define SYS_CTRL_SET_RST_MEM_CHK (1<<24)
+#define SYS_CTRL_SET_RST_AP_RST1 (1<<25)
+#define SYS_CTRL_SET_RST_AP_RST2 (1<<26)
+#define SYS_CTRL_SET_RST_AP_RST3 (1<<27)
+#define SYS_CTRL_SET_RST_AP_RST4 (1<<28)
+#define SYS_CTRL_SET_RST_AP_RST5 (1<<29)
+#define SYS_CTRL_SET_RST_OUT (1<<30)
+#define SYS_CTRL_SOFT_RST (1<<31)
+#define SYS_CTRL_SET_SYS_RST(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_SET_SYS_RST_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_SET_SYS_RST_SHIFT (0)
+
+//Sys_Rst_Clr
+#define SYS_CTRL_CLR_RST_XCPU (1<<0)
+#define SYS_CTRL_CLR_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_CLR_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_CLR_RST_DMA (1<<5)
+#define SYS_CTRL_CLR_RST_TIMER (1<<6)
+#define SYS_CTRL_CLR_RST_TCU (1<<7)
+#define SYS_CTRL_CLR_RST_GPIO (1<<8)
+#define SYS_CTRL_CLR_RST_I2C (1<<9)
+#define SYS_CTRL_CLR_RST_SPI1 (1<<10)
+#define SYS_CTRL_CLR_RST_SPI2 (1<<11)
+#define SYS_CTRL_CLR_RST_RF_SPI (1<<12)
+#define SYS_CTRL_CLR_RST_SCI1 (1<<13)
+#define SYS_CTRL_CLR_RST_SCI2 (1<<14)
+#define SYS_CTRL_CLR_RST_SCI3 (1<<15)
+#define SYS_CTRL_CLR_RST_SPY (1<<16)
+#define SYS_CTRL_CLR_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_CLR_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_CLR_RST_DP_AP (1<<19)
+#define SYS_CTRL_CLR_RST_COMREGS (1<<20)
+#define SYS_CTRL_CLR_RST_COMREGS_AP (1<<21)
+#define SYS_CTRL_CLR_RST_AP_CLKEN (1<<22)
+#define SYS_CTRL_CLR_RST_AP_RST (1<<23)
+#define SYS_CTRL_CLR_RST_MEM_CHK (1<<24)
+#define SYS_CTRL_CLR_RST_AP_RST1 (1<<25)
+#define SYS_CTRL_CLR_RST_AP_RST2 (1<<26)
+#define SYS_CTRL_CLR_RST_AP_RST3 (1<<27)
+#define SYS_CTRL_CLR_RST_AP_RST4 (1<<28)
+#define SYS_CTRL_CLR_RST_AP_RST5 (1<<29)
+#define SYS_CTRL_CLR_RST_OUT (1<<30)
+#define SYS_CTRL_CLR_SYS_RST(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_CLR_SYS_RST_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_CLR_SYS_RST_SHIFT (0)
+
+//BB_Rst_Set
+#define SYS_CTRL_SET_RST_BCPU (1<<0)
+#define SYS_CTRL_SET_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_BB_A2A (1<<2)
+#define SYS_CTRL_SET_RST_BB_IFC (1<<3)
+#define SYS_CTRL_SET_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_SET_RST_ITLV (1<<5)
+#define SYS_CTRL_SET_RST_VITERBI (1<<6)
+#define SYS_CTRL_SET_RST_CIPHER (1<<7)
+#define SYS_CTRL_SET_RST_XCOR (1<<8)
+#define SYS_CTRL_SET_RST_COPRO (1<<9)
+#define SYS_CTRL_SET_RST_RF_IF (1<<10)
+#define SYS_CTRL_SET_RST_EXCOR (1<<11)
+#define SYS_CTRL_SET_RST_EVITAC (1<<12)
+#define SYS_CTRL_SET_RST_CORDIC (1<<13)
+#define SYS_CTRL_SET_RST_TCU_BB (1<<14)
+#define SYS_CTRL_SET_RST_BB_FULL (1<<31)
+#define SYS_CTRL_SET_BB_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_SET_BB_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_SET_BB_RST_SHIFT (0)
+
+//BB_Rst_Clr
+#define SYS_CTRL_CLR_RST_BCPU (1<<0)
+#define SYS_CTRL_CLR_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_BB_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_BB_IFC (1<<3)
+#define SYS_CTRL_CLR_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_CLR_RST_ITLV (1<<5)
+#define SYS_CTRL_CLR_RST_VITERBI (1<<6)
+#define SYS_CTRL_CLR_RST_CIPHER (1<<7)
+#define SYS_CTRL_CLR_RST_XCOR (1<<8)
+#define SYS_CTRL_CLR_RST_COPRO (1<<9)
+#define SYS_CTRL_CLR_RST_RF_IF (1<<10)
+#define SYS_CTRL_CLR_RST_EXCOR (1<<11)
+#define SYS_CTRL_CLR_RST_EVITAC (1<<12)
+#define SYS_CTRL_CLR_RST_CORDIC (1<<13)
+#define SYS_CTRL_CLR_RST_TCU_BB (1<<14)
+#define SYS_CTRL_CLR_RST_BB_FULL (1<<31)
+#define SYS_CTRL_CLR_BB_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_CLR_BB_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_CLR_BB_RST_SHIFT (0)
+
+//Clk_Sys_Mode
+#define SYS_CTRL_MODE_SYS_XCPU (1<<0)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_SYS_AMBA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_SYS_AMBA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_SYS_DMA_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_SYS_DMA_MANUAL (1<<5)
+#define SYS_CTRL_MODE_SYS_EBC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_SYS_EBC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_MANUAL (1<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_MANUAL (1<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_MANUAL (1<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_MANUAL (1<<10)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_MANUAL (1<<11)
+#define SYS_CTRL_MODE_SYS_A2A_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_SYS_A2A_MANUAL (1<<12)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_MANUAL (1<<13)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_MANUAL (1<<14)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_MANUAL (1<<15)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_MANUAL (1<<16)
+#define SYS_CTRL_MODE_SYS_DBGHST_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_SYS_DBGHST_MANUAL (1<<17)
+#define SYS_CTRL_MODE_SYSD_SCI1_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_SYSD_SCI1_MANUAL (1<<18)
+#define SYS_CTRL_MODE_SYSD_SCI2_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_SYSD_SCI2_MANUAL (1<<19)
+#define SYS_CTRL_MODE_SYSD_SCI3_AUTOMATIC (0<<20)
+#define SYS_CTRL_MODE_SYSD_SCI3_MANUAL (1<<20)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_AUTOMATIC (0<<21)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_MANUAL (1<<21)
+#define SYS_CTRL_MODE_SYSD_OSC_AUTOMATIC (0<<22)
+#define SYS_CTRL_MODE_SYSD_OSC_MANUAL (1<<22)
+#define SYS_CTRL_MODE_CLK_SYS(n) (((n)&0x3FFFFF)<<1)
+#define SYS_CTRL_MODE_CLK_SYS_MASK (0x3FFFFF<<1)
+#define SYS_CTRL_MODE_CLK_SYS_SHIFT (1)
+
+//Clk_Sys_Enable
+#define SYS_CTRL_ENABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_ENABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_ENABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_ENABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_ENABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_ENABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_ENABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_ENABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_ENABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_ENABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_ENABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_ENABLE_SYSD_SCI1 (1<<18)
+#define SYS_CTRL_ENABLE_SYSD_SCI2 (1<<19)
+#define SYS_CTRL_ENABLE_SYSD_SCI3 (1<<20)
+#define SYS_CTRL_ENABLE_SYSD_RF_SPI (1<<21)
+#define SYS_CTRL_ENABLE_SYSD_OSC (1<<22)
+#define SYS_CTRL_ENABLE_SYS_GPIO (1<<23)
+#define SYS_CTRL_ENABLE_SYS_IRQ (1<<24)
+#define SYS_CTRL_ENABLE_SYS_TCU (1<<25)
+#define SYS_CTRL_ENABLE_SYS_TIMER (1<<26)
+#define SYS_CTRL_ENABLE_SYS_COM_REGS (1<<27)
+#define SYS_CTRL_ENABLE_SYS_DP_AP (1<<28)
+#define SYS_CTRL_ENABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Sys_Disable
+#define SYS_CTRL_DISABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_DISABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_DISABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_DISABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_DISABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_DISABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_DISABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_DISABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_DISABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_DISABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_DISABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_DISABLE_SYSD_SCI1 (1<<18)
+#define SYS_CTRL_DISABLE_SYSD_SCI2 (1<<19)
+#define SYS_CTRL_DISABLE_SYSD_SCI3 (1<<20)
+#define SYS_CTRL_DISABLE_SYSD_RF_SPI (1<<21)
+#define SYS_CTRL_DISABLE_SYSD_OSC (1<<22)
+#define SYS_CTRL_DISABLE_SYS_GPIO (1<<23)
+#define SYS_CTRL_DISABLE_SYS_IRQ (1<<24)
+#define SYS_CTRL_DISABLE_SYS_TCU (1<<25)
+#define SYS_CTRL_DISABLE_SYS_TIMER (1<<26)
+#define SYS_CTRL_DISABLE_SYS_COM_REGS (1<<27)
+#define SYS_CTRL_DISABLE_SYS_DP_AP (1<<28)
+#define SYS_CTRL_DISABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Per_Mode
+#define SYS_CTRL_MODE_PER_I2C_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_PER_I2C_MANUAL (1<<0)
+#define SYS_CTRL_MODE_PERD_SPI1_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_PERD_SPI1_MANUAL (1<<1)
+#define SYS_CTRL_MODE_PERD_SPI2_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_PERD_SPI2_MANUAL (1<<2)
+#define SYS_CTRL_MODE_CLK_PER(n) (((n)&7)<<0)
+#define SYS_CTRL_MODE_CLK_PER_MASK (7<<0)
+#define SYS_CTRL_MODE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Enable
+#define SYS_CTRL_ENABLE_PER_I2C (1<<0)
+#define SYS_CTRL_ENABLE_PERD_SPI1 (1<<1)
+#define SYS_CTRL_ENABLE_PERD_SPI2 (1<<2)
+#define SYS_CTRL_ENABLE_PER_SPY (1<<3)
+#define SYS_CTRL_ENABLE_PER_TEST (1<<4)
+#define SYS_CTRL_ENABLE_CLK_PER(n) (((n)&31)<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_MASK (31<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Disable
+#define SYS_CTRL_DISABLE_PER_I2C (1<<0)
+#define SYS_CTRL_DISABLE_PERD_SPI1 (1<<1)
+#define SYS_CTRL_DISABLE_PERD_SPI2 (1<<2)
+#define SYS_CTRL_DISABLE_PER_SPY (1<<3)
+#define SYS_CTRL_DISABLE_PER_TEST (1<<4)
+#define SYS_CTRL_DISABLE_CLK_PER(n) (((n)&31)<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_MASK (31<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_SHIFT (0)
+
+//Clk_BB_Mode
+#define SYS_CTRL_MODE_BB_BCPU (1<<0)
+#define SYS_CTRL_MODE_BB_BCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_BB_BCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_BB_AMBA_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_BB_AMBA_MANUAL (1<<2)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_MANUAL (1<<3)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_BB_EXCOR_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_BB_EXCOR_MANUAL (1<<5)
+#define SYS_CTRL_MODE_BB_IFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_BB_IFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_MODE_BB_SRAM_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_BB_SRAM_MANUAL (1<<8)
+#define SYS_CTRL_MODE_BB_A2A_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_BB_A2A_MANUAL (1<<9)
+#define SYS_CTRL_MODE_BB_ITLV_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_BB_ITLV_MANUAL (1<<10)
+#define SYS_CTRL_MODE_BB_VITERBI_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_BB_VITERBI_MANUAL (1<<11)
+#define SYS_CTRL_MODE_BB_CIPHER_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_BB_CIPHER_MANUAL (1<<12)
+#define SYS_CTRL_MODE_BB_RF_IF_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_BB_RF_IF_MANUAL (1<<13)
+#define SYS_CTRL_MODE_BB_COPRO_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_BB_COPRO_MANUAL (1<<14)
+#define SYS_CTRL_MODE_BB_CP2_REG_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_BB_CP2_REG_MANUAL (1<<15)
+#define SYS_CTRL_MODE_BB_XCOR_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_BB_XCOR_MANUAL (1<<16)
+#define SYS_CTRL_MODE_BB_EVITAC_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_BB_EVITAC_MANUAL (1<<17)
+#define SYS_CTRL_MODE_CLK_BB(n) (((n)&0x1FFFF)<<1)
+#define SYS_CTRL_MODE_CLK_BB_MASK (0x1FFFF<<1)
+#define SYS_CTRL_MODE_CLK_BB_SHIFT (1)
+
+//Clk_BB_Enable
+#define SYS_CTRL_ENABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_ENABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_ENABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_ENABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_ENABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_ENABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_ENABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_ENABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_ENABLE_BB_A2A (1<<9)
+#define SYS_CTRL_ENABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_ENABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_ENABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_ENABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_ENABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_ENABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_ENABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_ENABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_ENABLE_BB_IRQ (1<<18)
+#define SYS_CTRL_ENABLE_BB_COM_REGS (1<<19)
+#define SYS_CTRL_ENABLE_BB_CORDIC (1<<20)
+#define SYS_CTRL_ENABLE_CLK_BB(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_SHIFT (0)
+
+//Clk_BB_Disable
+#define SYS_CTRL_DISABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_DISABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_DISABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_DISABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_DISABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_DISABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_DISABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_DISABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_DISABLE_BB_A2A (1<<9)
+#define SYS_CTRL_DISABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_DISABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_DISABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_DISABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_DISABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_DISABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_DISABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_DISABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_DISABLE_BB_IRQ (1<<18)
+#define SYS_CTRL_DISABLE_BB_COM_REGS (1<<19)
+#define SYS_CTRL_DISABLE_BB_CORDIC (1<<20)
+#define SYS_CTRL_DISABLE_CLK_BB(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_SHIFT (0)
+
+//Clk_Other_Mode
+#define SYS_CTRL_MODE_OC_DEBUG_UART_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_OC_DEBUG_UART_MANUAL (1<<0)
+#define SYS_CTRL_MODE_OC_RF_RX_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_OC_RF_RX_MANUAL (1<<1)
+#define SYS_CTRL_MODE_OC_RF_TX_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_OC_RF_TX_MANUAL (1<<2)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_MANUAL (1<<3)
+#define SYS_CTRL_MODE_CLK_OTHER(n) (((n)&15)<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_MASK (15<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Enable
+#define SYS_CTRL_ENABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_ENABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_ENABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_ENABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_ENABLE_OC_LPS (1<<4)
+#define SYS_CTRL_ENABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_ENABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_ENABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_ENABLE_OC_TCU (1<<8)
+#define SYS_CTRL_ENABLE_CLK_OTHER(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_MASK (0x1FF<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Disable
+#define SYS_CTRL_DISABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_DISABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_DISABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_DISABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_DISABLE_OC_LPS (1<<4)
+#define SYS_CTRL_DISABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_DISABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_DISABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_DISABLE_OC_TCU (1<<8)
+#define SYS_CTRL_DISABLE_CLK_OTHER(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_MASK (0x1FF<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_SHIFT (0)
+
+//Pll_Ctrl
+#define SYS_CTRL_PLL_ENABLE (1<<0)
+#define SYS_CTRL_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_PLL_BYPASS (1<<8)
+#define SYS_CTRL_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_XP_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_XP_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_XP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_TCU_13M_L_26M (1<<5)
+#define SYS_CTRL_TCU_13M_L_13M (0<<5)
+#define SYS_CTRL_PLL_DISABLE_LPS_DISABLE (1<<6)
+#define SYS_CTRL_PLL_DISABLE_LPS_ENABLE (0<<6)
+#define SYS_CTRL_DIGEN_H_ENABLE (1<<7)
+#define SYS_CTRL_DIGEN_H_DISABLE (0<<7)
+#define SYS_CTRL_RF_DETECTED_OK (1<<20)
+#define SYS_CTRL_RF_DETECTED_NO (0<<20)
+#define SYS_CTRL_RF_DETECT_BYPASS (1<<21)
+#define SYS_CTRL_RF_DETECT_RESET (1<<22)
+#define SYS_CTRL_RF_SELECTED_L (1<<23)
+#define SYS_CTRL_PLL_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_MASK (1<<24)
+#define SYS_CTRL_PLL_LOCKED_SHIFT (24)
+#define SYS_CTRL_PLL_LOCKED_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_NOT_LOCKED (0<<24)
+#define SYS_CTRL_PLL_BYPASS_LOCK (1<<27)
+#define SYS_CTRL_FAST_SELECTED_L (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_MASK (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_SHIFT (31)
+
+//Cfg_Clk_Sys
+#define SYS_CTRL_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_FREQ_MASK (15<<0)
+#define SYS_CTRL_FREQ_SHIFT (0)
+#define SYS_CTRL_FREQ_312M (13<<0)
+#define SYS_CTRL_FREQ_250M (12<<0)
+#define SYS_CTRL_FREQ_208M (11<<0)
+#define SYS_CTRL_FREQ_178M (10<<0)
+#define SYS_CTRL_FREQ_156M (9<<0)
+#define SYS_CTRL_FREQ_139M (8<<0)
+#define SYS_CTRL_FREQ_125M (7<<0)
+#define SYS_CTRL_FREQ_113M (6<<0)
+#define SYS_CTRL_FREQ_104M (5<<0)
+#define SYS_CTRL_FREQ_89M (4<<0)
+#define SYS_CTRL_FREQ_78M (3<<0)
+#define SYS_CTRL_FREQ_52M (2<<0)
+#define SYS_CTRL_FREQ_39M (1<<0)
+#define SYS_CTRL_FREQ_26M (0<<0)
+#define SYS_CTRL_FORCE_DIV_UPDATE (1<<4)
+#define SYS_CTRL_REQ_DIV_UPDATE (1<<8)
+
+//Cfg_Clk_Mem_Bridge
+#define SYS_CTRL_MEM_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MEM_FREQ_MASK (15<<0)
+#define SYS_CTRL_MEM_FREQ_SHIFT (0)
+#define SYS_CTRL_MEM_FREQ_312M (13<<0)
+#define SYS_CTRL_MEM_FREQ_250M (12<<0)
+#define SYS_CTRL_MEM_FREQ_208M (11<<0)
+#define SYS_CTRL_MEM_FREQ_178M (10<<0)
+#define SYS_CTRL_MEM_FREQ_156M (9<<0)
+#define SYS_CTRL_MEM_FREQ_139M (8<<0)
+#define SYS_CTRL_MEM_FREQ_125M (7<<0)
+#define SYS_CTRL_MEM_FREQ_113M (6<<0)
+#define SYS_CTRL_MEM_FREQ_104M (5<<0)
+#define SYS_CTRL_MEM_FREQ_89M (4<<0)
+#define SYS_CTRL_MEM_FREQ_78M (3<<0)
+#define SYS_CTRL_MEM_FREQ_52M (2<<0)
+#define SYS_CTRL_MEM_FREQ_39M (1<<0)
+#define SYS_CTRL_MEM_FREQ_26M (0<<0)
+#define SYS_CTRL_DDR_MODE_EN_NORMAL_MODE (0<<4)
+#define SYS_CTRL_DDR_MODE_EN_DDR_MODE (1<<4)
+#define SYS_CTRL_DDR_FAST_CLK_POL_INVERT (1<<5)
+#define SYS_CTRL_DDR_FAST_CLK_POL_NORMAL (0<<5)
+#define SYS_CTRL_DDR_DQSL_O(n) (((n)&31)<<6)
+#define SYS_CTRL_DDR_DQSU_O(n) (((n)&31)<<11)
+#define SYS_CTRL_DDR_DQS_OEN(n) (((n)&31)<<16)
+#define SYS_CTRL_DDR_DQSL_I(n) (((n)&31)<<21)
+#define SYS_CTRL_DDR_DQSU_I(n) (((n)&31)<<26)
+#define SYS_CTRL_MEM_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Out
+#define SYS_CTRL_CLKOUT_DIVIDER(n) (((n)&31)<<0)
+#define SYS_CTRL_CLKOUT_SEL_OSC (0<<8)
+#define SYS_CTRL_CLKOUT_SEL_RF (1<<8)
+#define SYS_CTRL_CLKOUT_SEL_DIVIDER (2<<8)
+
+//Cfg_Clk_Host_Uart
+#define SYS_CTRL_HOST_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_HOST_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_HOST_UART_SEL_PLL_PLL (1<<12)
+
+//Cfg_Clk_Auxclk
+#define SYS_CTRL_AUXCLK_EN_DISABLE (0<<0)
+#define SYS_CTRL_AUXCLK_EN_ENABLE (1<<0)
+
+//Cfg_AHB
+#define SYS_CTRL_SYS_NEW_ARBITRATION_ENABLE (1<<0)
+#define SYS_CTRL_SYS_NEW_ARBITRATION_DISABLE (0<<0)
+#define SYS_CTRL_ENABLE_SYS_MID_BIST_ENABLE (1<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_BIST_DISABLE (0<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_ENABLE (1<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_DISABLE (0<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_ENABLE (1<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_DISABLE (0<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_ENABLE (1<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_DISABLE (0<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_ENABLE (1<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_DISABLE (0<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_ENABLE (1<<6)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_DISABLE (0<<6)
+#define SYS_CTRL_BB_NEW_ARBITRATION_ENABLE (1<<16)
+#define SYS_CTRL_BB_NEW_ARBITRATION_DISABLE (0<<16)
+#define SYS_CTRL_ENABLE_BB_MID_BIST_ENABLE (1<<17)
+#define SYS_CTRL_ENABLE_BB_MID_BIST_DISABLE (0<<17)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_ENABLE (1<<18)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_DISABLE (0<<18)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_ENABLE (1<<19)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_DISABLE (0<<19)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_ENABLE (1<<20)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_DISABLE (0<<20)
+#define SYS_CTRL_SYS_ENABLE(n) (((n)&0x3F)<<1)
+#define SYS_CTRL_SYS_ENABLE_MASK (0x3F<<1)
+#define SYS_CTRL_SYS_ENABLE_SHIFT (1)
+#define SYS_CTRL_BB_ENABLE(n) (((n)&15)<<17)
+#define SYS_CTRL_BB_ENABLE_MASK (15<<17)
+#define SYS_CTRL_BB_ENABLE_SHIFT (17)
+
+//Ctrl_AHB
+#define SYS_CTRL_SPLIT_SYS_MID_BIST_NORMAL (1<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_BIST_FORCE (0<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_NORMAL (1<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_FORCE (0<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_NORMAL (1<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_FORCE (0<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_NORMAL (1<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_FORCE (0<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_NORMAL (1<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_FORCE (0<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_NORMAL (1<<5)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_FORCE (0<<5)
+#define SYS_CTRL_SPLIT_BB_MID_BIST_NORMAL (1<<16)
+#define SYS_CTRL_SPLIT_BB_MID_BIST_FORCE (0<<16)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_NORMAL (1<<17)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_FORCE (0<<17)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_NORMAL (1<<18)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_FORCE (0<<18)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_NORMAL (1<<19)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_FORCE (0<<19)
+#define SYS_CTRL_SYS_FORCE_HSPLIT(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_MASK (0x3F<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_SHIFT (0)
+#define SYS_CTRL_BB_FORCE_HSPLIT(n) (((n)&15)<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_MASK (15<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_SHIFT (16)
+
+//XCpu_Dbg_BKP
+#define SYS_CTRL_BKPT_EN (1<<0)
+#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+#define SYS_CTRL_BKPT_MODE_I (0<<4)
+#define SYS_CTRL_BKPT_MODE_R (1<<4)
+#define SYS_CTRL_BKPT_MODE_W (2<<4)
+#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+#define SYS_CTRL_STALLED (1<<8)
+
+//XCpu_Dbg_Addr
+#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//BCpu_Dbg_BKP
+//#define SYS_CTRL_BKPT_EN (1<<0)
+//#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+//#define SYS_CTRL_BKPT_MODE_I (0<<4)
+//#define SYS_CTRL_BKPT_MODE_R (1<<4)
+//#define SYS_CTRL_BKPT_MODE_W (2<<4)
+//#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+//#define SYS_CTRL_STALLED (1<<8)
+
+//BCpu_Dbg_Addr
+//#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//Cfg_Cpus_Cache_Ram_Disable
+#define SYS_CTRL_XCPU_USE_MODE (1<<0)
+#define SYS_CTRL_XCPU_CLK_OFF_MODE (1<<1)
+#define SYS_CTRL_BCPU_USE_MODE (1<<16)
+#define SYS_CTRL_BCPU_CLK_OFF_MODE (1<<17)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_MASK (3<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_SHIFT (0)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_MASK (3<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_SHIFT (16)
+
+//Reset_Cause
+#define SYS_CTRL_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_APSOFT_RESET_HAPPENED (1<<1)
+#define SYS_CTRL_APSOFT_RESET_NO (0<<1)
+#define SYS_CTRL_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_MEMCHECKDONE_MASK (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_SHIFT (7)
+#define SYS_CTRL_MEMCHECKDONE_DONE (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_RUNNING (0<<7)
+#define SYS_CTRL_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_FONCTIONAL_TEST_MODE (1<<31)
+
+//WakeUp
+#define SYS_CTRL_FORCE_WAKEUP (1<<0)
+
+//AP_Ctrl
+#define SYS_CTRL_AP_INT_STATUS (1<<0)
+#define SYS_CTRL_AP_INT_MASK (1<<16)
+#define SYS_CTRL_AP_DEEPSLEEP_EN (1<<24)
+
+//Ignore_Charger
+#define SYS_CTRL_IGNORE_CHARGER (1<<0)
+
+//Cfg_Reserve
+#define SYS_CTRL_RESERVE_L(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AUIFC_CH0_IRQ_MASK (1<<14)
+#define SYS_CTRL_AUIFC_CH1_IRQ_MASK (1<<15)
+#define SYS_CTRL_RESERVE_H(n) (((n)&0xFFFF)<<16)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8820.h b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8820.h
new file mode 100644
index 0000000000..52ac62f983
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8820.h
@@ -0,0 +1,1427 @@
+#ifndef _REG_MD_SYSCTRL_H_
+#define _REG_MD_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ XCPU = 0x00000000,
+ BCPU = 0x00000001,
+ WCPU = 0x00000002
+} CPU_ID_T;
+
+#define NB_MODEM_CPU (3)
+
+// ============================================================================
+// SYS_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side System clocks
+ SYS_XCPU = 0x00000000,
+ SYS_XCPU_INT = 0x00000001,
+ SYS_PCLK_CONF = 0x00000002,
+ SYS_PCLK_DATA = 0x00000003,
+ SYS_AMBA = 0x00000004,
+ SYS_DMA = 0x00000005,
+ SYS_EBC = 0x00000006,
+ SYS_IFC_CH0 = 0x00000007,
+ SYS_IFC_CH1 = 0x00000008,
+ SYS_IFC_CH2 = 0x00000009,
+ SYS_IFC_CH3 = 0x0000000A,
+ SYS_IFC_DBG = 0x0000000B,
+ SYS_A2A = 0x0000000C,
+ SYS_AXI2AHB = 0x0000000D,
+ SYS_AHB2AXI = 0x0000000E,
+ SYS_EXT_AHB = 0x0000000F,
+ SYS_DEBUG_UART = 0x00000010,
+ SYS_DBGHST = 0x00000011,
+ SYS_A2A_WD = 0x00000012,
+ SYS_DMA2 = 0x00000013,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ SYSD_SCI1 = 0x00000014,
+ SYSD_SCI2 = 0x00000015,
+ SYSD_SCI3 = 0x00000016,
+ SYSD_RF_SPI = 0x00000017,
+ SYSD_OSC = 0x00000018,
+/// the following don't have an auto enable
+ SYS_GPIO = 0x00000019,
+ SYS_IRQ = 0x0000001A,
+ SYS_TCU = 0x0000001B,
+ SYS_TIMER = 0x0000001C,
+ SYS_COM_REGS = 0x0000001D,
+/// the following are sharing their enable
+ SYS_SCI1 = 0x0000001E,
+ SYS_SCI2 = 0x0000001F,
+ SYS_SCI3 = 0x00000020,
+/// keep last
+ SYS_NOGATE = 0x00000021
+} SYS_CLKS_T;
+
+#define NB_SYS_CLK_XCPU (2)
+#define NB_SYS_CLK_AEN (25)
+#define NB_SYS_CLK_EN (30)
+#define NB_SYS_CLK (34)
+
+// ============================================================================
+// SYS2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WCDMA Baseband side System clocks
+ SYS_MPMC = 0x00000000,
+ SYS_MPMCREG = 0x00000001,
+/// the following don't have an auto enable
+ SYS_DP_BB = 0x00000002,
+ SYS_DP_WD = 0x00000003,
+ SYS_DP_AP = 0x00000004
+} SYS2_CLKS_T;
+
+#define NB_SYS2_CLK_AEN (2)
+#define NB_SYS2_CLK_EN (5)
+#define NB_SYS2_CLK (5)
+
+// ============================================================================
+// PER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ PER_I2C = 0x00000000,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI1 = 0x00000001,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI2 = 0x00000002,
+ PER_SPY = 0x00000003,
+ PER_TEST = 0x00000004
+} PER_CLKS_T;
+
+#define NB_PER_CLK_AEN (3)
+#define NB_PER_CLK_EN (5)
+#define NB_PER_CLK (5)
+
+// ============================================================================
+// BB_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Baseband side System clocks
+ BB_BCPU = 0x00000000,
+ BB_BCPU_INT = 0x00000001,
+ BB_AMBA = 0x00000002,
+ BB_PCLK_CONF = 0x00000003,
+ BB_PCLK_DATA = 0x00000004,
+ BB_EXCOR = 0x00000005,
+ BB_IFC_CH2 = 0x00000006,
+ BB_IFC_CH3 = 0x00000007,
+ BB_SRAM = 0x00000008,
+ BB_A2A = 0x00000009,
+ BB_ITLV = 0x0000000A,
+ BB_VITERBI = 0x0000000B,
+ BB_CIPHER = 0x0000000C,
+ BB_RF_IF = 0x0000000D,
+ BB_COPRO = 0x0000000E,
+ BB_CP2_REG = 0x0000000F,
+ BB_XCOR = 0x00000010,
+ BB_EVITAC = 0x00000011,
+ BB_ROM = 0x00000012,
+ BB_MPMC = 0x00000013,
+ BB_VTB = 0x00000014,
+/// the following don't have an auto enable
+ BB_IRQ = 0x00000015,
+ BB_COM_REGS = 0x00000016,
+ BB_CORDIC = 0x00000017,
+ BB_DP = 0x00000018
+} BB_CLKS_T;
+
+#define NB_BB_CLK_AEN (21)
+#define NB_BB_CLK_EN (25)
+#define NB_BB_CLK (25)
+
+// ============================================================================
+// WD_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WCDMA Baseband side System clocks
+ WD_WCPU = 0x00000000,
+ WD_AMBA = 0x00000001,
+ WD_PCLK_CONF = 0x00000002,
+ WD_PCLK_DATA = 0x00000003,
+ WD_A2A = 0x00000004,
+ WD_IFC_CH_SPI = 0x00000005,
+ WD_MPMC = 0x00000006,
+ WD_EXT_AHB = 0x00000007,
+ WDD_OSC = 0x00000008,
+/// the following don't have an auto enable
+ WD_IRQ = 0x00000009,
+ WD_AXI = 0x0000000A,
+ WD_DP = 0x0000000B,
+ WD_MODEM = 0x0000000C,
+ WD_COM_REGS = 0x0000000D,
+ WD_TIMER = 0x0000000E,
+ WD_SDMA = 0x0000000F,
+ WD_SLPC = 0x00000010,
+ WD_SLPT = 0x00000011,
+ WD_SPI1 = 0x00000012,
+ WD_SPI2 = 0x00000013,
+ WD_RFIF = 0x00000014,
+ WD_PAGE_SPY = 0x00000015
+} WD_CLKS_T;
+
+#define NB_WD_CLK_AEN (9)
+#define NB_WD_CLK_EN (22)
+#define NB_WD_CLK (22)
+/// Other clocks
+/// clocks with auto enble
+/// the debug host clock auto enable is not used in host mode, only in uart mode
+#define OC_HOST_UART (0)
+
+// ============================================================================
+// OTHER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ OC_DEBUG_UART = 0x00000000,
+ OC_RF_RX = 0x00000001,
+ OC_RF_TX = 0x00000002,
+ OC_MEM_BRIDGE = 0x00000003,
+/// the following don't have an auto enable
+ OC_LPS = 0x00000004,
+ OC_GPIO = 0x00000005,
+ OC_CLK_OUT = 0x00000006,
+ OC_MEM_CLK_OUT = 0x00000007,
+ OC_TCU = 0x00000008,
+ OC_WD_CHIP = 0x00000009,
+ OC_WD_ADC = 0x0000000A,
+ OC_WD_TURBO = 0x0000000B,
+ OC_WD_OSC = 0x0000000C,
+ OC_MPMC = 0x0000000D,
+ OC_BB_VTB = 0x0000000E
+} OTHER_CLKS_T;
+
+#define NB_OTHER_CLK_AEN (4)
+#define NB_OTHER_CLK_EN (15)
+#define NB_OTHER_CLK (15)
+
+// ============================================================================
+// RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side resets
+ RST_XCPU = 0x00000000,
+ RST_SYS_IRQ = 0x00000001,
+ RST_SYS_A2A = 0x00000002,
+ RST_SYS_AHB2AXI = 0x00000003,
+ RST_SYS_AXI2AHB = 0x00000004,
+ RST_DMA = 0x00000005,
+ RST_TIMER = 0x00000006,
+ RST_TCU = 0x00000007,
+ RST_GPIO = 0x00000008,
+ RST_I2C = 0x00000009,
+ RST_CFG = 0x0000000A,
+ RST_SPI1 = 0x0000000B,
+ RST_SPI2 = 0x0000000C,
+ RST_RF_SPI = 0x0000000D,
+ RST_SCI1 = 0x0000000E,
+ RST_SCI2 = 0x0000000F,
+ RST_SCI3 = 0x00000010,
+ RST_SPY = 0x00000011,
+ RST_MEM_BRIDGE = 0x00000012,
+ RST_EXT_AHB = 0x00000013,
+ RST_DP_BB = 0x00000014,
+ RST_DP_AP = 0x00000015,
+ RST_COMREGS = 0x00000016,
+ RST_COMREGS_AP = 0x00000017,
+ RST_AP_CLKEN = 0x00000018,
+ RST_AP_RST = 0x00000019,
+ RST_MEM_CHK = 0x0000001A,
+ RST_MPMC = 0x0000001B,
+ RST_SYS_A2A_WD = 0x0000001C,
+ RST_COMREGS_WD = 0x0000001D,
+ RST_BCPU = 0x0000001E,
+ RST_BB_IRQ = 0x0000001F,
+ RST_BB_A2A = 0x00000020,
+ RST_BB_IFC = 0x00000021,
+ RST_BB_SRAM = 0x00000022,
+ RST_ITLV = 0x00000023,
+ RST_VITERBI = 0x00000024,
+ RST_CIPHER = 0x00000025,
+ RST_XCOR = 0x00000026,
+ RST_COPRO = 0x00000027,
+ RST_RF_IF = 0x00000028,
+ RST_EXCOR = 0x00000029,
+ RST_EVITAC = 0x0000002A,
+ RST_CORDIC = 0x0000002B,
+ RST_TCU_BB = 0x0000002C,
+ RST_BB_DP = 0x0000002D,
+ RST_BB_ROM = 0x0000002E,
+ RST_MPMC_BB = 0x0000002F,
+ RST_BB_VTB = 0x00000030,
+ RST_BB_FULL = 0x00000031,
+ RST_SYS_FULL = 0x00000032
+} RESETS_T;
+
+#define NB_SRST (30)
+/// Baseband side resets
+#define BOUND_BRST_FIRST (30)
+#define BOUND_BRST_AFTER (49)
+/// The following reset does not have register
+#define NR_RST_REG (50)
+#define NB_RST (51)
+#define NB_BRST (BOUND_BRST_AFTER-BOUND_BRST_FIRST)
+
+// ============================================================================
+// RESET_OTHERS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Reset Other : resync on corresponding clock other
+ RSTO_DBG_HOST = 0x00000000,
+ RSTO_RF_RX = 0x00000001,
+ RSTO_RF_TX = 0x00000002,
+ RSTO_MEM_BRIDGE = 0x00000003,
+ RSTO_LPS = 0x00000004,
+ RSTO_GPIO = 0x00000005,
+ RSTO_WDTIMER = 0x00000006,
+ RSTO_TCU = 0x00000007,
+ RSTO_MPMC = 0x00000008,
+ RSTO_VTB = 0x00000009
+} RESET_OTHERS_T;
+
+#define BOUND_RSTO_RF_FIRST (1)
+#define BOUND_RSTO_RF_AFTER (3)
+#define NB_RSTO (10)
+
+// ============================================================================
+// WD_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WD side resets
+ WD_RST_WCPU = 0x00000000,
+ WD_RST_IRQ = 0x00000001,
+ WD_RST_DP = 0x00000002,
+ WD_RST_MODEM = 0x00000003,
+ WD_RST_A2A = 0x00000004,
+ WD_RST_IFC = 0x00000005,
+ WD_RST_SDMA = 0x00000006,
+ WD_RST_SLPC = 0x00000007,
+ WD_RST_SLPT = 0x00000008,
+ WD_RST_SPI1 = 0x00000009,
+ WD_RST_SPI2 = 0x0000000A,
+ WD_RST_RFIF = 0x0000000B,
+ WD_RST_COMREGS = 0x0000000C,
+ WD_RST_TIMER = 0x0000000D,
+ WD_RST_MPMC = 0x0000000E,
+ WD_RST_EXT_AHB = 0x0000000F,
+ WD_RST_PAGE_SPY = 0x00000010,
+ WD_RST_FULL = 0x00000011
+} WD_RESETS_T;
+
+#define NB_WD_RST_BOUND (17)
+#define NB_WD_RST (18)
+
+// ============================================================================
+// AP_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side resets
+ AP_RST_0 = 0x00000000,
+ AP_RST_1 = 0x00000001,
+ AP_RST_2 = 0x00000002,
+ AP_RST_3 = 0x00000003,
+ AP_RST_4 = 0x00000004
+} AP_RESETS_T;
+
+#define NB_AP_RST_BOUND (5)
+#define NB_AP_RST (5)
+/// For REG_DBG protect lock/unlock value
+#define SYS_CTRL_PROTECT_LOCK (0XA50000)
+#define SYS_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// This register is protected.
+ REG32 Sys_Rst_Set; //0x00000004
+ REG32 Sys_Rst_Clr; //0x00000008
+ /// This register is protected.
+ REG32 BB_Rst_Set; //0x0000000C
+ REG32 BB_Rst_Clr; //0x00000010
+ REG32 Clk_Sys_Mode; //0x00000014
+ REG32 Clk_Sys_Enable; //0x00000018
+ /// This register is protected.
+ REG32 Clk_Sys_Disable; //0x0000001C
+ REG32 Clk_Per_Mode; //0x00000020
+ REG32 Clk_Per_Enable; //0x00000024
+ /// This register is protected.
+ REG32 Clk_Per_Disable; //0x00000028
+ REG32 Clk_BB_Mode; //0x0000002C
+ REG32 Clk_BB_Enable; //0x00000030
+ /// This register is protected.
+ REG32 Clk_BB_Disable; //0x00000034
+ REG32 Clk_Other_Mode; //0x00000038
+ REG32 Clk_Other_Enable; //0x0000003C
+ /// This register is protected.
+ REG32 Clk_Other_Disable; //0x00000040
+ /// Register protected by Write_Unlocked_H.
+ REG32 Pll_Ctrl; //0x00000044
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000048
+ REG32 Cfg_Clk_Sys; //0x0000004C
+ REG32 Cfg_Clk_Mem_Bridge; //0x00000050
+ /// This register is protected.
+ REG32 Cfg_Clk_Out; //0x00000054
+ REG32 Cfg_Clk_Host_Uart; //0x00000058
+ REG32 Cfg_Clk_Auxclk; //0x0000005C
+ /// This register is protected.
+ REG32 Cfg_AHB; //0x00000060
+ /// This register is protected. Used to unsplit masters manualy.
+ REG32 Ctrl_AHB; //0x00000064
+ REG32 XCpu_Dbg_BKP; //0x00000068
+ REG32 XCpu_Dbg_Addr; //0x0000006C
+ REG32 BCpu_Dbg_BKP; //0x00000070
+ REG32 BCpu_Dbg_Addr; //0x00000074
+ REG32 Cfg_Cpus_Cache_Ram_Disable; //0x00000078
+ REG32 Reset_Cause; //0x0000007C
+ /// This register is protected.
+ REG32 WakeUp; //0x00000080
+ REG32 AP_Ctrl; //0x00000084
+ /// This register is protected.
+ REG32 Ignore_Charger; //0x00000088
+ REG32 Clk_SYS2_Mode; //0x0000008C
+ REG32 Clk_SYS2_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_SYS2_Disable; //0x00000094
+ /// Register protected by Write_Unlocked_H.
+ REG32 WD_Pll_Ctrl; //0x00000098
+ /// This register is protected.
+ REG32 WD_Sel_Clock; //0x0000009C
+ /// This register is protected.
+ REG32 WD_Rst_Set; //0x000000A0
+ REG32 WD_Rst_Clr; //0x000000A4
+ /// This register is protected.
+ REG32 AP_Rst_Set; //0x000000A8
+ REG32 AP_Rst_Clr; //0x000000AC
+ REG32 Clk_WD_Mode; //0x000000B0
+ REG32 Clk_WD_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_WD_Disable; //0x000000B8
+ REG32 Cfg_Clk_MPMC; //0x000000BC
+ REG32 Cfg_MPMC_DQS; //0x000000C0
+ REG32 Cfg_Clk_BB_VTB; //0x000000C4
+ REG32 Reserved_000000C8[13]; //0x000000C8
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000000FC
+} HWP_SYS_CTRL_T;
+
+#define hwp_sysCtrlMd ((HWP_SYS_CTRL_T*)(RDA_MD_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_WRITE_UNLOCK (1<<31)
+
+//Sys_Rst_Set
+#define SYS_CTRL_SET_RST_XCPU (1<<0)
+#define SYS_CTRL_SET_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_SET_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_SET_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_SET_RST_DMA (1<<5)
+#define SYS_CTRL_SET_RST_TIMER (1<<6)
+#define SYS_CTRL_SET_RST_TCU (1<<7)
+#define SYS_CTRL_SET_RST_GPIO (1<<8)
+#define SYS_CTRL_SET_RST_I2C (1<<9)
+#define SYS_CTRL_SET_RST_CFG (1<<10)
+#define SYS_CTRL_SET_RST_SPI1 (1<<11)
+#define SYS_CTRL_SET_RST_SPI2 (1<<12)
+#define SYS_CTRL_SET_RST_RF_SPI (1<<13)
+#define SYS_CTRL_SET_RST_SCI1 (1<<14)
+#define SYS_CTRL_SET_RST_SCI2 (1<<15)
+#define SYS_CTRL_SET_RST_SCI3 (1<<16)
+#define SYS_CTRL_SET_RST_SPY (1<<17)
+#define SYS_CTRL_SET_RST_MEM_BRIDGE (1<<18)
+#define SYS_CTRL_SET_RST_EXT_AHB (1<<19)
+#define SYS_CTRL_SET_RST_DP_BB (1<<20)
+#define SYS_CTRL_SET_RST_DP_AP (1<<21)
+#define SYS_CTRL_SET_RST_COMREGS (1<<22)
+#define SYS_CTRL_SET_RST_COMREGS_AP (1<<23)
+#define SYS_CTRL_SET_RST_AP_CLKEN (1<<24)
+#define SYS_CTRL_SET_RST_AP_RST (1<<25)
+#define SYS_CTRL_SET_RST_MEM_CHK (1<<26)
+#define SYS_CTRL_SET_RST_MPMC (1<<27)
+#define SYS_CTRL_SET_RST_SYS_A2A_WD (1<<28)
+#define SYS_CTRL_SET_RST_COMREGS_WD (1<<29)
+#define SYS_CTRL_SET_RST_OUT (1<<30)
+#define SYS_CTRL_SOFT_RST (1<<31)
+#define SYS_CTRL_SET_SYS_RST(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_SET_SYS_RST_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_SET_SYS_RST_SHIFT (0)
+
+//Sys_Rst_Clr
+#define SYS_CTRL_CLR_RST_XCPU (1<<0)
+#define SYS_CTRL_CLR_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_CLR_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_CLR_RST_DMA (1<<5)
+#define SYS_CTRL_CLR_RST_TIMER (1<<6)
+#define SYS_CTRL_CLR_RST_TCU (1<<7)
+#define SYS_CTRL_CLR_RST_GPIO (1<<8)
+#define SYS_CTRL_CLR_RST_I2C (1<<9)
+#define SYS_CTRL_CLR_RST_CFG (1<<10)
+#define SYS_CTRL_CLR_RST_SPI1 (1<<11)
+#define SYS_CTRL_CLR_RST_SPI2 (1<<12)
+#define SYS_CTRL_CLR_RST_RF_SPI (1<<13)
+#define SYS_CTRL_CLR_RST_SCI1 (1<<14)
+#define SYS_CTRL_CLR_RST_SCI2 (1<<15)
+#define SYS_CTRL_CLR_RST_SCI3 (1<<16)
+#define SYS_CTRL_CLR_RST_SPY (1<<17)
+#define SYS_CTRL_CLR_RST_MEM_BRIDGE (1<<18)
+#define SYS_CTRL_CLR_RST_EXT_AHB (1<<19)
+#define SYS_CTRL_CLR_RST_DP_BB (1<<20)
+#define SYS_CTRL_CLR_RST_DP_AP (1<<21)
+#define SYS_CTRL_CLR_RST_COMREGS (1<<22)
+#define SYS_CTRL_CLR_RST_COMREGS_AP (1<<23)
+#define SYS_CTRL_CLR_RST_AP_CLKEN (1<<24)
+#define SYS_CTRL_CLR_RST_AP_RST (1<<25)
+#define SYS_CTRL_CLR_RST_MEM_CHK (1<<26)
+#define SYS_CTRL_CLR_RST_MPMC (1<<27)
+#define SYS_CTRL_CLR_RST_SYS_A2A_WD (1<<28)
+#define SYS_CTRL_CLR_RST_COMREGS_WD (1<<29)
+#define SYS_CTRL_CLR_RST_OUT (1<<30)
+#define SYS_CTRL_CLR_SYS_RST(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_CLR_SYS_RST_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_CLR_SYS_RST_SHIFT (0)
+
+//BB_Rst_Set
+#define SYS_CTRL_SET_RST_BCPU (1<<0)
+#define SYS_CTRL_SET_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_BB_A2A (1<<2)
+#define SYS_CTRL_SET_RST_BB_IFC (1<<3)
+#define SYS_CTRL_SET_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_SET_RST_ITLV (1<<5)
+#define SYS_CTRL_SET_RST_VITERBI (1<<6)
+#define SYS_CTRL_SET_RST_CIPHER (1<<7)
+#define SYS_CTRL_SET_RST_XCOR (1<<8)
+#define SYS_CTRL_SET_RST_COPRO (1<<9)
+#define SYS_CTRL_SET_RST_RF_IF (1<<10)
+#define SYS_CTRL_SET_RST_EXCOR (1<<11)
+#define SYS_CTRL_SET_RST_EVITAC (1<<12)
+#define SYS_CTRL_SET_RST_CORDIC (1<<13)
+#define SYS_CTRL_SET_RST_TCU_BB (1<<14)
+#define SYS_CTRL_SET_RST_BB_DP (1<<15)
+#define SYS_CTRL_SET_RST_BB_ROM (1<<16)
+#define SYS_CTRL_SET_RST_MPMC_BB (1<<17)
+#define SYS_CTRL_SET_RST_BB_VTB (1<<18)
+#define SYS_CTRL_SET_RST_BB_FULL (1<<31)
+#define SYS_CTRL_SET_BB_RST(n) (((n)&0x7FFFF)<<0)
+#define SYS_CTRL_SET_BB_RST_MASK (0x7FFFF<<0)
+#define SYS_CTRL_SET_BB_RST_SHIFT (0)
+
+//BB_Rst_Clr
+#define SYS_CTRL_CLR_RST_BCPU (1<<0)
+#define SYS_CTRL_CLR_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_BB_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_BB_IFC (1<<3)
+#define SYS_CTRL_CLR_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_CLR_RST_ITLV (1<<5)
+#define SYS_CTRL_CLR_RST_VITERBI (1<<6)
+#define SYS_CTRL_CLR_RST_CIPHER (1<<7)
+#define SYS_CTRL_CLR_RST_XCOR (1<<8)
+#define SYS_CTRL_CLR_RST_COPRO (1<<9)
+#define SYS_CTRL_CLR_RST_RF_IF (1<<10)
+#define SYS_CTRL_CLR_RST_EXCOR (1<<11)
+#define SYS_CTRL_CLR_RST_EVITAC (1<<12)
+#define SYS_CTRL_CLR_RST_CORDIC (1<<13)
+#define SYS_CTRL_CLR_RST_TCU_BB (1<<14)
+#define SYS_CTRL_CLR_RST_BB_DP (1<<15)
+#define SYS_CTRL_CLR_RST_BB_ROM (1<<16)
+#define SYS_CTRL_CLR_RST_MPMC_BB (1<<17)
+#define SYS_CTRL_CLR_RST_BB_VTB (1<<18)
+#define SYS_CTRL_CLR_RST_BB_FULL (1<<31)
+#define SYS_CTRL_CLR_BB_RST(n) (((n)&0x7FFFF)<<0)
+#define SYS_CTRL_CLR_BB_RST_MASK (0x7FFFF<<0)
+#define SYS_CTRL_CLR_BB_RST_SHIFT (0)
+
+//Clk_Sys_Mode
+#define SYS_CTRL_MODE_SYS_XCPU (1<<0)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_SYS_AMBA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_SYS_AMBA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_SYS_DMA_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_SYS_DMA_MANUAL (1<<5)
+#define SYS_CTRL_MODE_SYS_EBC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_SYS_EBC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_MANUAL (1<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_MANUAL (1<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_MANUAL (1<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_MANUAL (1<<10)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_MANUAL (1<<11)
+#define SYS_CTRL_MODE_SYS_A2A_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_SYS_A2A_MANUAL (1<<12)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_MANUAL (1<<13)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_MANUAL (1<<14)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_MANUAL (1<<15)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_MANUAL (1<<16)
+#define SYS_CTRL_MODE_SYS_DBGHST_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_SYS_DBGHST_MANUAL (1<<17)
+#define SYS_CTRL_MODE_SYS_A2A_WD_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_SYS_A2A_WD_MANUAL (1<<18)
+#define SYS_CTRL_MODE_SYS_DMA2_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_SYS_DMA2_MANUAL (1<<19)
+#define SYS_CTRL_MODE_SYSD_SCI1_AUTOMATIC (0<<20)
+#define SYS_CTRL_MODE_SYSD_SCI1_MANUAL (1<<20)
+#define SYS_CTRL_MODE_SYSD_SCI2_AUTOMATIC (0<<21)
+#define SYS_CTRL_MODE_SYSD_SCI2_MANUAL (1<<21)
+#define SYS_CTRL_MODE_SYSD_SCI3_AUTOMATIC (0<<22)
+#define SYS_CTRL_MODE_SYSD_SCI3_MANUAL (1<<22)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_AUTOMATIC (0<<23)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_MANUAL (1<<23)
+#define SYS_CTRL_MODE_SYSD_OSC_AUTOMATIC (0<<24)
+#define SYS_CTRL_MODE_SYSD_OSC_MANUAL (1<<24)
+#define SYS_CTRL_MODE_CLK_SYS(n) (((n)&0xFFFFFF)<<1)
+#define SYS_CTRL_MODE_CLK_SYS_MASK (0xFFFFFF<<1)
+#define SYS_CTRL_MODE_CLK_SYS_SHIFT (1)
+
+//Clk_Sys_Enable
+#define SYS_CTRL_ENABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_ENABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_ENABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_ENABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_ENABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_ENABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_ENABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_ENABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_ENABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_ENABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_ENABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_ENABLE_SYS_A2A_WD (1<<18)
+#define SYS_CTRL_ENABLE_SYS_DMA2 (1<<19)
+#define SYS_CTRL_ENABLE_SYSD_SCI1 (1<<20)
+#define SYS_CTRL_ENABLE_SYSD_SCI2 (1<<21)
+#define SYS_CTRL_ENABLE_SYSD_SCI3 (1<<22)
+#define SYS_CTRL_ENABLE_SYSD_RF_SPI (1<<23)
+#define SYS_CTRL_ENABLE_SYSD_OSC (1<<24)
+#define SYS_CTRL_ENABLE_SYS_GPIO (1<<25)
+#define SYS_CTRL_ENABLE_SYS_IRQ (1<<26)
+#define SYS_CTRL_ENABLE_SYS_TCU (1<<27)
+#define SYS_CTRL_ENABLE_SYS_TIMER (1<<28)
+#define SYS_CTRL_ENABLE_SYS_COM_REGS (1<<29)
+#define SYS_CTRL_ENABLE_CLK_SYS(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Sys_Disable
+#define SYS_CTRL_DISABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_DISABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_DISABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_DISABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_DISABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_DISABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_DISABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_DISABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_DISABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_DISABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_DISABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_DISABLE_SYS_A2A_WD (1<<18)
+#define SYS_CTRL_DISABLE_SYS_DMA2 (1<<19)
+#define SYS_CTRL_DISABLE_SYSD_SCI1 (1<<20)
+#define SYS_CTRL_DISABLE_SYSD_SCI2 (1<<21)
+#define SYS_CTRL_DISABLE_SYSD_SCI3 (1<<22)
+#define SYS_CTRL_DISABLE_SYSD_RF_SPI (1<<23)
+#define SYS_CTRL_DISABLE_SYSD_OSC (1<<24)
+#define SYS_CTRL_DISABLE_SYS_GPIO (1<<25)
+#define SYS_CTRL_DISABLE_SYS_IRQ (1<<26)
+#define SYS_CTRL_DISABLE_SYS_TCU (1<<27)
+#define SYS_CTRL_DISABLE_SYS_TIMER (1<<28)
+#define SYS_CTRL_DISABLE_SYS_COM_REGS (1<<29)
+#define SYS_CTRL_DISABLE_CLK_SYS(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_MASK (0x3FFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Per_Mode
+#define SYS_CTRL_MODE_PER_I2C_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_PER_I2C_MANUAL (1<<0)
+#define SYS_CTRL_MODE_PERD_SPI1_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_PERD_SPI1_MANUAL (1<<1)
+#define SYS_CTRL_MODE_PERD_SPI2_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_PERD_SPI2_MANUAL (1<<2)
+#define SYS_CTRL_MODE_CLK_PER(n) (((n)&7)<<0)
+#define SYS_CTRL_MODE_CLK_PER_MASK (7<<0)
+#define SYS_CTRL_MODE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Enable
+#define SYS_CTRL_ENABLE_PER_I2C (1<<0)
+#define SYS_CTRL_ENABLE_PERD_SPI1 (1<<1)
+#define SYS_CTRL_ENABLE_PERD_SPI2 (1<<2)
+#define SYS_CTRL_ENABLE_PER_SPY (1<<3)
+#define SYS_CTRL_ENABLE_PER_TEST (1<<4)
+#define SYS_CTRL_ENABLE_CLK_PER(n) (((n)&31)<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_MASK (31<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Disable
+#define SYS_CTRL_DISABLE_PER_I2C (1<<0)
+#define SYS_CTRL_DISABLE_PERD_SPI1 (1<<1)
+#define SYS_CTRL_DISABLE_PERD_SPI2 (1<<2)
+#define SYS_CTRL_DISABLE_PER_SPY (1<<3)
+#define SYS_CTRL_DISABLE_PER_TEST (1<<4)
+#define SYS_CTRL_DISABLE_CLK_PER(n) (((n)&31)<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_MASK (31<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_SHIFT (0)
+
+//Clk_BB_Mode
+#define SYS_CTRL_MODE_BB_BCPU (1<<0)
+#define SYS_CTRL_MODE_BB_BCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_BB_BCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_BB_AMBA_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_BB_AMBA_MANUAL (1<<2)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_MANUAL (1<<3)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_BB_EXCOR_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_BB_EXCOR_MANUAL (1<<5)
+#define SYS_CTRL_MODE_BB_IFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_BB_IFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_MODE_BB_SRAM_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_BB_SRAM_MANUAL (1<<8)
+#define SYS_CTRL_MODE_BB_A2A_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_BB_A2A_MANUAL (1<<9)
+#define SYS_CTRL_MODE_BB_ITLV_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_BB_ITLV_MANUAL (1<<10)
+#define SYS_CTRL_MODE_BB_VITERBI_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_BB_VITERBI_MANUAL (1<<11)
+#define SYS_CTRL_MODE_BB_CIPHER_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_BB_CIPHER_MANUAL (1<<12)
+#define SYS_CTRL_MODE_BB_RF_IF_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_BB_RF_IF_MANUAL (1<<13)
+#define SYS_CTRL_MODE_BB_COPRO_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_BB_COPRO_MANUAL (1<<14)
+#define SYS_CTRL_MODE_BB_CP2_REG_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_BB_CP2_REG_MANUAL (1<<15)
+#define SYS_CTRL_MODE_BB_XCOR_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_BB_XCOR_MANUAL (1<<16)
+#define SYS_CTRL_MODE_BB_EVITAC_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_BB_EVITAC_MANUAL (1<<17)
+#define SYS_CTRL_MODE_BB_ROM_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_BB_ROM_MANUAL (1<<18)
+#define SYS_CTRL_MODE_BB_MPMC_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_BB_MPMC_MANUAL (1<<19)
+#define SYS_CTRL_MODE_BB_VTB_AUTOMATIC (0<<20)
+#define SYS_CTRL_MODE_BB_VTB_MANUAL (1<<20)
+#define SYS_CTRL_MODE_CLK_BB(n) (((n)&0xFFFFF)<<1)
+#define SYS_CTRL_MODE_CLK_BB_MASK (0xFFFFF<<1)
+#define SYS_CTRL_MODE_CLK_BB_SHIFT (1)
+
+//Clk_BB_Enable
+#define SYS_CTRL_ENABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_ENABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_ENABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_ENABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_ENABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_ENABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_ENABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_ENABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_ENABLE_BB_A2A (1<<9)
+#define SYS_CTRL_ENABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_ENABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_ENABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_ENABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_ENABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_ENABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_ENABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_ENABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_ENABLE_BB_ROM (1<<18)
+#define SYS_CTRL_ENABLE_BB_MPMC (1<<19)
+#define SYS_CTRL_ENABLE_BB_VTB (1<<20)
+#define SYS_CTRL_ENABLE_BB_IRQ (1<<21)
+#define SYS_CTRL_ENABLE_BB_COM_REGS (1<<22)
+#define SYS_CTRL_ENABLE_BB_CORDIC (1<<23)
+#define SYS_CTRL_ENABLE_BB_DP (1<<24)
+#define SYS_CTRL_ENABLE_CLK_BB(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_SHIFT (0)
+
+//Clk_BB_Disable
+#define SYS_CTRL_DISABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_DISABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_DISABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_DISABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_DISABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_DISABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_DISABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_DISABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_DISABLE_BB_A2A (1<<9)
+#define SYS_CTRL_DISABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_DISABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_DISABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_DISABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_DISABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_DISABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_DISABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_DISABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_DISABLE_BB_ROM (1<<18)
+#define SYS_CTRL_DISABLE_BB_MPMC (1<<19)
+#define SYS_CTRL_DISABLE_BB_VTB (1<<20)
+#define SYS_CTRL_DISABLE_BB_IRQ (1<<21)
+#define SYS_CTRL_DISABLE_BB_COM_REGS (1<<22)
+#define SYS_CTRL_DISABLE_BB_CORDIC (1<<23)
+#define SYS_CTRL_DISABLE_BB_DP (1<<24)
+#define SYS_CTRL_DISABLE_CLK_BB(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_SHIFT (0)
+
+//Clk_Other_Mode
+#define SYS_CTRL_MODE_OC_DEBUG_UART_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_OC_DEBUG_UART_MANUAL (1<<0)
+#define SYS_CTRL_MODE_OC_RF_RX_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_OC_RF_RX_MANUAL (1<<1)
+#define SYS_CTRL_MODE_OC_RF_TX_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_OC_RF_TX_MANUAL (1<<2)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_MANUAL (1<<3)
+#define SYS_CTRL_MODE_CLK_OTHER(n) (((n)&15)<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_MASK (15<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Enable
+#define SYS_CTRL_ENABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_ENABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_ENABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_ENABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_ENABLE_OC_LPS (1<<4)
+#define SYS_CTRL_ENABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_ENABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_ENABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_ENABLE_OC_TCU (1<<8)
+#define SYS_CTRL_ENABLE_OC_WD_CHIP (1<<9)
+#define SYS_CTRL_ENABLE_OC_WD_ADC (1<<10)
+#define SYS_CTRL_ENABLE_OC_WD_TURBO (1<<11)
+#define SYS_CTRL_ENABLE_OC_WD_OSC (1<<12)
+#define SYS_CTRL_ENABLE_OC_MPMC (1<<13)
+#define SYS_CTRL_ENABLE_OC_BB_VTB (1<<14)
+#define SYS_CTRL_ENABLE_CLK_OTHER(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_MASK (0x7FFF<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Disable
+#define SYS_CTRL_DISABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_DISABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_DISABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_DISABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_DISABLE_OC_LPS (1<<4)
+#define SYS_CTRL_DISABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_DISABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_DISABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_DISABLE_OC_TCU (1<<8)
+#define SYS_CTRL_DISABLE_OC_WD_CHIP (1<<9)
+#define SYS_CTRL_DISABLE_OC_WD_ADC (1<<10)
+#define SYS_CTRL_DISABLE_OC_WD_TURBO (1<<11)
+#define SYS_CTRL_DISABLE_OC_WD_OSC (1<<12)
+#define SYS_CTRL_DISABLE_OC_MPMC (1<<13)
+#define SYS_CTRL_DISABLE_OC_BB_VTB (1<<14)
+#define SYS_CTRL_DISABLE_CLK_OTHER(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_MASK (0x7FFF<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_SHIFT (0)
+
+//Pll_Ctrl
+#define SYS_CTRL_PLL_ENABLE (1<<0)
+#define SYS_CTRL_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_PLL_BYPASS (1<<8)
+#define SYS_CTRL_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_XP_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_XP_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_XP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_TCU_13M_L_26M (1<<5)
+#define SYS_CTRL_TCU_13M_L_13M (0<<5)
+#define SYS_CTRL_PLL_DISABLE_LPS_DISABLE (1<<6)
+#define SYS_CTRL_PLL_DISABLE_LPS_ENABLE (0<<6)
+#define SYS_CTRL_DIGEN_H_ENABLE (1<<7)
+#define SYS_CTRL_DIGEN_H_DISABLE (0<<7)
+#define SYS_CTRL_RF_DETECTED_OK (1<<20)
+#define SYS_CTRL_RF_DETECTED_NO (0<<20)
+#define SYS_CTRL_RF_DETECT_BYPASS (1<<21)
+#define SYS_CTRL_RF_DETECT_RESET (1<<22)
+#define SYS_CTRL_RF_SELECTED_L (1<<23)
+#define SYS_CTRL_PLL_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_MASK (1<<24)
+#define SYS_CTRL_PLL_LOCKED_SHIFT (24)
+#define SYS_CTRL_PLL_LOCKED_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_NOT_LOCKED (0<<24)
+#define SYS_CTRL_PLL_BYPASS_LOCK (1<<27)
+#define SYS_CTRL_FAST_SELECTED_L (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_MASK (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_SHIFT (31)
+
+//Cfg_Clk_Sys
+#define SYS_CTRL_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_FREQ_MASK (15<<0)
+#define SYS_CTRL_FREQ_SHIFT (0)
+#define SYS_CTRL_FREQ_312M (13<<0)
+#define SYS_CTRL_FREQ_250M (12<<0)
+#define SYS_CTRL_FREQ_208M (11<<0)
+#define SYS_CTRL_FREQ_178M (10<<0)
+#define SYS_CTRL_FREQ_156M (9<<0)
+#define SYS_CTRL_FREQ_139M (8<<0)
+#define SYS_CTRL_FREQ_125M (7<<0)
+#define SYS_CTRL_FREQ_113M (6<<0)
+#define SYS_CTRL_FREQ_104M (5<<0)
+#define SYS_CTRL_FREQ_89M (4<<0)
+#define SYS_CTRL_FREQ_78M (3<<0)
+#define SYS_CTRL_FREQ_52M (2<<0)
+#define SYS_CTRL_FREQ_39M (1<<0)
+#define SYS_CTRL_FREQ_26M (0<<0)
+#define SYS_CTRL_FORCE_DIV_UPDATE (1<<4)
+#define SYS_CTRL_REQ_DIV_UPDATE (1<<8)
+
+//Cfg_Clk_Mem_Bridge
+#define SYS_CTRL_MEM_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MEM_FREQ_MASK (15<<0)
+#define SYS_CTRL_MEM_FREQ_SHIFT (0)
+#define SYS_CTRL_MEM_FREQ_312M (13<<0)
+#define SYS_CTRL_MEM_FREQ_250M (12<<0)
+#define SYS_CTRL_MEM_FREQ_208M (11<<0)
+#define SYS_CTRL_MEM_FREQ_178M (10<<0)
+#define SYS_CTRL_MEM_FREQ_156M (9<<0)
+#define SYS_CTRL_MEM_FREQ_139M (8<<0)
+#define SYS_CTRL_MEM_FREQ_125M (7<<0)
+#define SYS_CTRL_MEM_FREQ_113M (6<<0)
+#define SYS_CTRL_MEM_FREQ_104M (5<<0)
+#define SYS_CTRL_MEM_FREQ_89M (4<<0)
+#define SYS_CTRL_MEM_FREQ_78M (3<<0)
+#define SYS_CTRL_MEM_FREQ_52M (2<<0)
+#define SYS_CTRL_MEM_FREQ_39M (1<<0)
+#define SYS_CTRL_MEM_FREQ_26M (0<<0)
+#define SYS_CTRL_DDR_MODE_EN_NORMAL_MODE (0<<4)
+#define SYS_CTRL_DDR_MODE_EN_DDR_MODE (1<<4)
+#define SYS_CTRL_DDR_FAST_CLK_POL_INVERT (1<<5)
+#define SYS_CTRL_DDR_FAST_CLK_POL_NORMAL (0<<5)
+#define SYS_CTRL_DDR_DQSL_O(n) (((n)&31)<<6)
+#define SYS_CTRL_DDR_DQSU_O(n) (((n)&31)<<11)
+#define SYS_CTRL_DDR_DQS_OEN(n) (((n)&31)<<16)
+#define SYS_CTRL_DDR_DQSL_I(n) (((n)&31)<<21)
+#define SYS_CTRL_DDR_DQSU_I(n) (((n)&31)<<26)
+#define SYS_CTRL_MEM_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Out
+#define SYS_CTRL_CLKOUT_DIVIDER(n) (((n)&31)<<0)
+#define SYS_CTRL_CLKOUT_SEL_OSC (0<<8)
+#define SYS_CTRL_CLKOUT_SEL_RF (1<<8)
+#define SYS_CTRL_CLKOUT_SEL_DIVIDER (2<<8)
+
+//Cfg_Clk_Host_Uart
+#define SYS_CTRL_HOST_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_HOST_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_HOST_UART_SEL_PLL_PLL (1<<12)
+
+//Cfg_Clk_Auxclk
+#define SYS_CTRL_AUXCLK_EN_DISABLE (0<<0)
+#define SYS_CTRL_AUXCLK_EN_ENABLE (1<<0)
+
+//Cfg_AHB
+#define SYS_CTRL_SYS_NEW_ARBITRATION_ENABLE (1<<0)
+#define SYS_CTRL_SYS_NEW_ARBITRATION_DISABLE (0<<0)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_ENABLE (1<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_DISABLE (0<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_ENABLE (1<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_DISABLE (0<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_ENABLE (1<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_DISABLE (0<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_ENABLE (1<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_DISABLE (0<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_ENABLE (1<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_DISABLE (0<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_WD_ENABLE (1<<6)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_WD_DISABLE (0<<6)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA2_ENABLE (1<<7)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA2_DISABLE (0<<7)
+#define SYS_CTRL_BB_NEW_ARBITRATION_ENABLE (1<<16)
+#define SYS_CTRL_BB_NEW_ARBITRATION_DISABLE (0<<16)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_ENABLE (1<<17)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_DISABLE (0<<17)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_ENABLE (1<<18)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_DISABLE (0<<18)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_ENABLE (1<<19)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_DISABLE (0<<19)
+#define SYS_CTRL_SYS_ENABLE(n) (((n)&0x7F)<<1)
+#define SYS_CTRL_SYS_ENABLE_MASK (0x7F<<1)
+#define SYS_CTRL_SYS_ENABLE_SHIFT (1)
+#define SYS_CTRL_BB_ENABLE(n) (((n)&7)<<17)
+#define SYS_CTRL_BB_ENABLE_MASK (7<<17)
+#define SYS_CTRL_BB_ENABLE_SHIFT (17)
+
+//Ctrl_AHB
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_NORMAL (1<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_FORCE (0<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_NORMAL (1<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_FORCE (0<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_NORMAL (1<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_FORCE (0<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_NORMAL (1<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_FORCE (0<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_NORMAL (1<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_FORCE (0<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_WD_NORMAL (1<<5)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_WD_FORCE (0<<5)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA2_NORMAL (1<<6)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA2_FORCE (0<<6)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_NORMAL (1<<16)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_FORCE (0<<16)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_NORMAL (1<<17)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_FORCE (0<<17)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_NORMAL (1<<18)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_FORCE (0<<18)
+#define SYS_CTRL_SYS_FORCE_HSPLIT(n) (((n)&0x7F)<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_MASK (0x7F<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_SHIFT (0)
+#define SYS_CTRL_BB_FORCE_HSPLIT(n) (((n)&7)<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_MASK (7<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_SHIFT (16)
+
+//XCpu_Dbg_BKP
+#define SYS_CTRL_BKPT_EN (1<<0)
+#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+#define SYS_CTRL_BKPT_MODE_I (0<<4)
+#define SYS_CTRL_BKPT_MODE_R (1<<4)
+#define SYS_CTRL_BKPT_MODE_W (2<<4)
+#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+#define SYS_CTRL_STALLED (1<<8)
+
+//XCpu_Dbg_Addr
+#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//BCpu_Dbg_BKP
+//#define SYS_CTRL_BKPT_EN (1<<0)
+//#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+//#define SYS_CTRL_BKPT_MODE_I (0<<4)
+//#define SYS_CTRL_BKPT_MODE_R (1<<4)
+//#define SYS_CTRL_BKPT_MODE_W (2<<4)
+//#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+//#define SYS_CTRL_STALLED (1<<8)
+
+//BCpu_Dbg_Addr
+//#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//Cfg_Cpus_Cache_Ram_Disable
+#define SYS_CTRL_XCPU_USE_MODE (1<<0)
+#define SYS_CTRL_XCPU_CLK_OFF_MODE (1<<1)
+#define SYS_CTRL_BCPU_USE_MODE (1<<16)
+#define SYS_CTRL_BCPU_CLK_OFF_MODE (1<<17)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_MASK (3<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_SHIFT (0)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_MASK (3<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_SHIFT (16)
+
+//Reset_Cause
+#define SYS_CTRL_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_APSOFT_RESET_HAPPENED (1<<1)
+#define SYS_CTRL_APSOFT_RESET_NO (0<<1)
+#define SYS_CTRL_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_MEMCHECKDONE_MASK (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_SHIFT (7)
+#define SYS_CTRL_MEMCHECKDONE_DONE (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_RUNNING (0<<7)
+#define SYS_CTRL_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_FONCTIONAL_TEST_MODE (1<<31)
+
+//WakeUp
+#define SYS_CTRL_FORCE_WAKEUP (1<<0)
+
+//AP_Ctrl
+#define SYS_CTRL_AP_INT_STATUS (1<<0)
+#define SYS_CTRL_AP_INT_MASK (1<<16)
+#define SYS_CTRL_AP_DEEPSLEEP_EN (1<<24)
+
+//Ignore_Charger
+#define SYS_CTRL_IGNORE_CHARGER (1<<0)
+
+//Clk_SYS2_Mode
+#define SYS_CTRL_MODE_SYS_MPMC_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_SYS_MPMC_MANUAL (1<<0)
+#define SYS_CTRL_MODE_SYS_MPMCREG_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_MPMCREG_MANUAL (1<<1)
+#define SYS_CTRL_MODE_CLK_SYS2(n) (((n)&3)<<0)
+#define SYS_CTRL_MODE_CLK_SYS2_MASK (3<<0)
+#define SYS_CTRL_MODE_CLK_SYS2_SHIFT (0)
+
+//Clk_SYS2_Enable
+#define SYS_CTRL_ENABLE_SYS_MPMC (1<<0)
+#define SYS_CTRL_ENABLE_SYS_MPMCREG (1<<1)
+#define SYS_CTRL_ENABLE_SYS_DP_BB (1<<2)
+#define SYS_CTRL_ENABLE_SYS_DP_WD (1<<3)
+#define SYS_CTRL_ENABLE_SYS_DP_AP (1<<4)
+#define SYS_CTRL_ENABLE_CLK_SYS2(n) (((n)&31)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS2_MASK (31<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS2_SHIFT (0)
+
+//Clk_SYS2_Disable
+#define SYS_CTRL_DISABLE_SYS_MPMC (1<<0)
+#define SYS_CTRL_DISABLE_SYS_MPMCREG (1<<1)
+#define SYS_CTRL_DISABLE_SYS_DP_BB (1<<2)
+#define SYS_CTRL_DISABLE_SYS_DP_WD (1<<3)
+#define SYS_CTRL_DISABLE_SYS_DP_AP (1<<4)
+#define SYS_CTRL_DISABLE_CLK_SYS2(n) (((n)&31)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS2_MASK (31<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS2_SHIFT (0)
+
+//WD_Pll_Ctrl
+#define SYS_CTRL_WD_PLL_ENABLE (1<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_WD_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_WD_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_WD_PLL_BYPASS (1<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_WD_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_WD_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_WD_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_WD_CFG_SHIFT (0)
+
+//WD_Sel_Clock
+#define SYS_CTRL_WD_CLK_ADC_POL_INVERT (1<<0)
+#define SYS_CTRL_WD_CLK_ADC_POL_NORMAL (0<<0)
+#define SYS_CTRL_WD_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_WD_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_WD_PLL_BYPASS_LOCK (1<<8)
+#define SYS_CTRL_WD_PLL_LOCKED (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_MASK (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_SHIFT (20)
+#define SYS_CTRL_WD_PLL_LOCKED_LOCKED (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_NOT_LOCKED (0<<20)
+#define SYS_CTRL_WD_FAST_SELECTED_L (1<<24)
+#define SYS_CTRL_WD_FAST_SELECTED_L_MASK (1<<24)
+#define SYS_CTRL_WD_FAST_SELECTED_L_SHIFT (24)
+
+//WD_Rst_Set
+#define SYS_CTRL_SET_WD_RST_WCPU (1<<0)
+#define SYS_CTRL_SET_WD_RST_IRQ (1<<1)
+#define SYS_CTRL_SET_WD_RST_DP (1<<2)
+#define SYS_CTRL_SET_WD_RST_MODEM (1<<3)
+#define SYS_CTRL_SET_WD_RST_A2A (1<<4)
+#define SYS_CTRL_SET_WD_RST_IFC (1<<5)
+#define SYS_CTRL_SET_WD_RST_SDMA (1<<6)
+#define SYS_CTRL_SET_WD_RST_SLPC (1<<7)
+#define SYS_CTRL_SET_WD_RST_SLPT (1<<8)
+#define SYS_CTRL_SET_WD_RST_SPI1 (1<<9)
+#define SYS_CTRL_SET_WD_RST_SPI2 (1<<10)
+#define SYS_CTRL_SET_WD_RST_RFIF (1<<11)
+#define SYS_CTRL_SET_WD_RST_COMREGS (1<<12)
+#define SYS_CTRL_SET_WD_RST_TIMER (1<<13)
+#define SYS_CTRL_SET_WD_RST_MPMC (1<<14)
+#define SYS_CTRL_SET_WD_RST_EXT_AHB (1<<15)
+#define SYS_CTRL_SET_WD_RST_PAGE_SPY (1<<16)
+#define SYS_CTRL_SET_WD_RST_FULL (1<<31)
+#define SYS_CTRL_SET_WD_RST(n) (((n)&0x1FFFF)<<0)
+#define SYS_CTRL_SET_WD_RST_MASK (0x1FFFF<<0)
+#define SYS_CTRL_SET_WD_RST_SHIFT (0)
+
+//WD_Rst_Clr
+#define SYS_CTRL_CLR_WD_RST_WCPU (1<<0)
+#define SYS_CTRL_CLR_WD_RST_IRQ (1<<1)
+#define SYS_CTRL_CLR_WD_RST_DP (1<<2)
+#define SYS_CTRL_CLR_WD_RST_MODEM (1<<3)
+#define SYS_CTRL_CLR_WD_RST_A2A (1<<4)
+#define SYS_CTRL_CLR_WD_RST_IFC (1<<5)
+#define SYS_CTRL_CLR_WD_RST_SDMA (1<<6)
+#define SYS_CTRL_CLR_WD_RST_SLPC (1<<7)
+#define SYS_CTRL_CLR_WD_RST_SLPT (1<<8)
+#define SYS_CTRL_CLR_WD_RST_SPI1 (1<<9)
+#define SYS_CTRL_CLR_WD_RST_SPI2 (1<<10)
+#define SYS_CTRL_CLR_WD_RST_RFIF (1<<11)
+#define SYS_CTRL_CLR_WD_RST_COMREGS (1<<12)
+#define SYS_CTRL_CLR_WD_RST_TIMER (1<<13)
+#define SYS_CTRL_CLR_WD_RST_MPMC (1<<14)
+#define SYS_CTRL_CLR_WD_RST_EXT_AHB (1<<15)
+#define SYS_CTRL_CLR_WD_RST_PAGE_SPY (1<<16)
+#define SYS_CTRL_CLR_WD_RST_FULL (1<<31)
+#define SYS_CTRL_CLR_WD_RST(n) (((n)&0x1FFFF)<<0)
+#define SYS_CTRL_CLR_WD_RST_MASK (0x1FFFF<<0)
+#define SYS_CTRL_CLR_WD_RST_SHIFT (0)
+
+//AP_Rst_Set
+#define SYS_CTRL_SET_AP_RST_0 (1<<0)
+#define SYS_CTRL_SET_AP_RST_1 (1<<1)
+#define SYS_CTRL_SET_AP_RST_2 (1<<2)
+#define SYS_CTRL_SET_AP_RST_3 (1<<3)
+#define SYS_CTRL_SET_AP_RST_4 (1<<4)
+#define SYS_CTRL_SET_AP_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_SET_AP_RST_MASK (31<<0)
+#define SYS_CTRL_SET_AP_RST_SHIFT (0)
+
+//AP_Rst_Clr
+#define SYS_CTRL_CLR_AP_RST_0 (1<<0)
+#define SYS_CTRL_CLR_AP_RST_1 (1<<1)
+#define SYS_CTRL_CLR_AP_RST_2 (1<<2)
+#define SYS_CTRL_CLR_AP_RST_3 (1<<3)
+#define SYS_CTRL_CLR_AP_RST_4 (1<<4)
+#define SYS_CTRL_CLR_AP_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_CLR_AP_RST_MASK (31<<0)
+#define SYS_CTRL_CLR_AP_RST_SHIFT (0)
+
+//Clk_WD_Mode
+#define SYS_CTRL_MODE_WD_WCPU (1<<0)
+#define SYS_CTRL_MODE_WD_AMBA_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_WD_AMBA_MANUAL (1<<1)
+#define SYS_CTRL_MODE_WD_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_WD_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_WD_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_WD_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_WD_A2A_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_WD_A2A_MANUAL (1<<4)
+#define SYS_CTRL_MODE_WD_IFC_CH_SPI_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_WD_IFC_CH_SPI_MANUAL (1<<5)
+#define SYS_CTRL_MODE_WD_MPMC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_WD_MPMC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_WD_EXT_AHB_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_WD_EXT_AHB_MANUAL (1<<7)
+#define SYS_CTRL_MODE_WDD_OSC_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_WDD_OSC_MANUAL (1<<8)
+#define SYS_CTRL_MODE_CLK_WD(n) (((n)&0xFF)<<1)
+#define SYS_CTRL_MODE_CLK_WD_MASK (0xFF<<1)
+#define SYS_CTRL_MODE_CLK_WD_SHIFT (1)
+
+//Clk_WD_Enable
+#define SYS_CTRL_ENABLE_WD_WCPU (1<<0)
+#define SYS_CTRL_ENABLE_WD_AMBA (1<<1)
+#define SYS_CTRL_ENABLE_WD_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_WD_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_WD_A2A (1<<4)
+#define SYS_CTRL_ENABLE_WD_IFC_CH_SPI (1<<5)
+#define SYS_CTRL_ENABLE_WD_MPMC (1<<6)
+#define SYS_CTRL_ENABLE_WD_EXT_AHB (1<<7)
+#define SYS_CTRL_ENABLE_WDD_OSC (1<<8)
+#define SYS_CTRL_ENABLE_WD_IRQ (1<<9)
+#define SYS_CTRL_ENABLE_WD_AXI (1<<10)
+#define SYS_CTRL_ENABLE_WD_DP (1<<11)
+#define SYS_CTRL_ENABLE_WD_MODEM (1<<12)
+#define SYS_CTRL_ENABLE_WD_COM_REGS (1<<13)
+#define SYS_CTRL_ENABLE_WD_TIMER (1<<14)
+#define SYS_CTRL_ENABLE_WD_SDMA (1<<15)
+#define SYS_CTRL_ENABLE_WD_SLPC (1<<16)
+#define SYS_CTRL_ENABLE_WD_SLPT (1<<17)
+#define SYS_CTRL_ENABLE_WD_SPI1 (1<<18)
+#define SYS_CTRL_ENABLE_WD_SPI2 (1<<19)
+#define SYS_CTRL_ENABLE_WD_RFIF (1<<20)
+#define SYS_CTRL_ENABLE_WD_PAGE_SPY (1<<21)
+#define SYS_CTRL_ENABLE_CLK_WD(n) (((n)&0x3FFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_WD_MASK (0x3FFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_WD_SHIFT (0)
+
+//Clk_WD_Disable
+#define SYS_CTRL_DISABLE_WD_WCPU (1<<0)
+#define SYS_CTRL_DISABLE_WD_AMBA (1<<1)
+#define SYS_CTRL_DISABLE_WD_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_WD_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_WD_A2A (1<<4)
+#define SYS_CTRL_DISABLE_WD_IFC_CH_SPI (1<<5)
+#define SYS_CTRL_DISABLE_WD_MPMC (1<<6)
+#define SYS_CTRL_DISABLE_WD_EXT_AHB (1<<7)
+#define SYS_CTRL_DISABLE_WDD_OSC (1<<8)
+#define SYS_CTRL_DISABLE_WD_IRQ (1<<9)
+#define SYS_CTRL_DISABLE_WD_AXI (1<<10)
+#define SYS_CTRL_DISABLE_WD_DP (1<<11)
+#define SYS_CTRL_DISABLE_WD_MODEM (1<<12)
+#define SYS_CTRL_DISABLE_WD_COM_REGS (1<<13)
+#define SYS_CTRL_DISABLE_WD_TIMER (1<<14)
+#define SYS_CTRL_DISABLE_WD_SDMA (1<<15)
+#define SYS_CTRL_DISABLE_WD_SLPC (1<<16)
+#define SYS_CTRL_DISABLE_WD_SLPT (1<<17)
+#define SYS_CTRL_DISABLE_WD_SPI1 (1<<18)
+#define SYS_CTRL_DISABLE_WD_SPI2 (1<<19)
+#define SYS_CTRL_DISABLE_WD_RFIF (1<<20)
+#define SYS_CTRL_DISABLE_WD_PAGE_SPY (1<<21)
+#define SYS_CTRL_DISABLE_CLK_WD(n) (((n)&0x3FFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_WD_MASK (0x3FFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_WD_SHIFT (0)
+
+//Cfg_Clk_MPMC
+#define SYS_CTRL_MPMC_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MPMC_FREQ_MASK (15<<0)
+#define SYS_CTRL_MPMC_FREQ_SHIFT (0)
+#define SYS_CTRL_MPMC_FREQ_312M (13<<0)
+#define SYS_CTRL_MPMC_FREQ_250M (12<<0)
+#define SYS_CTRL_MPMC_FREQ_208M (11<<0)
+#define SYS_CTRL_MPMC_FREQ_178M (10<<0)
+#define SYS_CTRL_MPMC_FREQ_156M (9<<0)
+#define SYS_CTRL_MPMC_FREQ_139M (8<<0)
+#define SYS_CTRL_MPMC_FREQ_125M (7<<0)
+#define SYS_CTRL_MPMC_FREQ_113M (6<<0)
+#define SYS_CTRL_MPMC_FREQ_104M (5<<0)
+#define SYS_CTRL_MPMC_FREQ_89M (4<<0)
+#define SYS_CTRL_MPMC_FREQ_78M (3<<0)
+#define SYS_CTRL_MPMC_FREQ_52M (2<<0)
+#define SYS_CTRL_MPMC_FREQ_39M (1<<0)
+#define SYS_CTRL_MPMC_FREQ_26M (0<<0)
+#define SYS_CTRL_CLK_MPMC_DELAY(n) (((n)&31)<<8)
+#define SYS_CTRL_CLK_MPMC_DELAY_POL (1<<13)
+#define SYS_CTRL_CLK_MPMC_FEEDBACK(n) (((n)&31)<<14)
+#define SYS_CTRL_CLK_MPMC_FEEDBACK_POL (1<<19)
+#define SYS_CTRL_MPMC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_MPMC_DQS
+#define SYS_CTRL_MPMC_DQSL_O(n) (((n)&31)<<0)
+#define SYS_CTRL_MPMC_DQSU_O(n) (((n)&31)<<6)
+#define SYS_CTRL_MPMC_DQS_OEN(n) (((n)&31)<<12)
+#define SYS_CTRL_MPMC_DQSL_I(n) (((n)&31)<<18)
+#define SYS_CTRL_MPMC_DQSU_I(n) (((n)&31)<<24)
+
+//Cfg_Clk_BB_VTB
+#define SYS_CTRL_BB_VTB_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_BB_VTB_FREQ_MASK (15<<0)
+#define SYS_CTRL_BB_VTB_FREQ_SHIFT (0)
+#define SYS_CTRL_BB_VTB_FREQ_312M (13<<0)
+#define SYS_CTRL_BB_VTB_FREQ_250M (12<<0)
+#define SYS_CTRL_BB_VTB_FREQ_208M (11<<0)
+#define SYS_CTRL_BB_VTB_FREQ_178M (10<<0)
+#define SYS_CTRL_BB_VTB_FREQ_156M (9<<0)
+#define SYS_CTRL_BB_VTB_FREQ_139M (8<<0)
+#define SYS_CTRL_BB_VTB_FREQ_125M (7<<0)
+#define SYS_CTRL_BB_VTB_FREQ_113M (6<<0)
+#define SYS_CTRL_BB_VTB_FREQ_104M (5<<0)
+#define SYS_CTRL_BB_VTB_FREQ_89M (4<<0)
+#define SYS_CTRL_BB_VTB_FREQ_78M (3<<0)
+#define SYS_CTRL_BB_VTB_FREQ_52M (2<<0)
+#define SYS_CTRL_BB_VTB_FREQ_39M (1<<0)
+#define SYS_CTRL_BB_VTB_FREQ_26M (0<<0)
+#define SYS_CTRL_BB_VTB_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Reserve
+#define SYS_CTRL_RESERVE_L(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AUIFC_CH0_IRQ_MASK (1<<14)
+#define SYS_CTRL_AUIFC_CH1_IRQ_MASK (1<<15)
+#define SYS_CTRL_RESERVE_H(n) (((n)&0xFFFF)<<16)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850.h b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850.h
new file mode 100644
index 0000000000..4afdaeea23
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850.h
@@ -0,0 +1,1363 @@
+#ifndef _REG_MD_SYSCTRL_H_
+#define _REG_MD_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ XCPU = 0x00000000,
+ BCPU = 0x00000001,
+ WCPU = 0x00000002
+} CPU_ID_T;
+
+#define NB_MODEM_CPU (3)
+
+// ============================================================================
+// SYS_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side System clocks
+ SYS_XCPU = 0x00000000,
+ SYS_XCPU_INT = 0x00000001,
+ SYS_PCLK_CONF = 0x00000002,
+ SYS_PCLK_DATA = 0x00000003,
+ SYS_AMBA = 0x00000004,
+ SYS_DMA = 0x00000005,
+ SYS_EBC = 0x00000006,
+ SYS_IFC_CH0 = 0x00000007,
+ SYS_IFC_CH1 = 0x00000008,
+ SYS_IFC_CH2 = 0x00000009,
+ SYS_IFC_CH3 = 0x0000000A,
+ SYS_IFC_DBG = 0x0000000B,
+ SYS_A2A = 0x0000000C,
+ SYS_AXI2AHB = 0x0000000D,
+ SYS_AHB2AXI = 0x0000000E,
+ SYS_EXT_AHB = 0x0000000F,
+ SYS_DEBUG_UART = 0x00000010,
+ SYS_DBGHST = 0x00000011,
+ SYS_A2A_WD = 0x00000012,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ SYSD_SCI1 = 0x00000013,
+ SYSD_SCI2 = 0x00000014,
+ SYSD_SCI3 = 0x00000015,
+ SYSD_RF_SPI = 0x00000016,
+ SYSD_OSC = 0x00000017,
+/// the following don't have an auto enable
+ SYS_GPIO = 0x00000018,
+ SYS_IRQ = 0x00000019,
+ SYS_TCU = 0x0000001A,
+ SYS_TIMER = 0x0000001B,
+ SYS_COM_REGS = 0x0000001C,
+/// the following are sharing their enable
+ SYS_SCI1 = 0x0000001D,
+ SYS_SCI2 = 0x0000001E,
+ SYS_SCI3 = 0x0000001F,
+/// keep last
+ SYS_NOGATE = 0x00000020
+} SYS_CLKS_T;
+
+#define NB_SYS_CLK_XCPU (2)
+#define NB_SYS_CLK_AEN (24)
+#define NB_SYS_CLK_EN (29)
+#define NB_SYS_CLK (33)
+
+// ============================================================================
+// SYS2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WCDMA Baseband side System clocks
+ SYS_MPMC = 0x00000000,
+ SYS_MPMCREG = 0x00000001,
+/// the following don't have an auto enable
+ SYS_DP_BB = 0x00000002,
+ SYS_DP_WD = 0x00000003,
+ SYS_DP_AP = 0x00000004
+} SYS2_CLKS_T;
+
+#define NB_SYS2_CLK_AEN (2)
+#define NB_SYS2_CLK_EN (5)
+#define NB_SYS2_CLK (5)
+
+// ============================================================================
+// PER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI1 = 0x00000000,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI2 = 0x00000001,
+ PER_SPY = 0x00000002,
+ PER_TEST = 0x00000003
+} PER_CLKS_T;
+
+#define NB_PER_CLK_AEN (2)
+#define NB_PER_CLK_EN (4)
+#define NB_PER_CLK (4)
+
+// ============================================================================
+// BB_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Baseband side System clocks
+ BB_BCPU = 0x00000000,
+ BB_BCPU_INT = 0x00000001,
+ BB_AMBA = 0x00000002,
+ BB_PCLK_CONF = 0x00000003,
+ BB_PCLK_DATA = 0x00000004,
+ BB_EXCOR = 0x00000005,
+ BB_IFC_CH2 = 0x00000006,
+ BB_IFC_CH3 = 0x00000007,
+ BB_SRAM = 0x00000008,
+ BB_A2A = 0x00000009,
+ BB_ITLV = 0x0000000A,
+ BB_VITERBI = 0x0000000B,
+ BB_CIPHER = 0x0000000C,
+ BB_RF_IF = 0x0000000D,
+ BB_COPRO = 0x0000000E,
+ BB_CP2_REG = 0x0000000F,
+ BB_XCOR = 0x00000010,
+ BB_EVITAC = 0x00000011,
+ BB_ROM = 0x00000012,
+ BB_MPMC = 0x00000013,
+/// the following don't have an auto enable
+ BB_IRQ = 0x00000014,
+ BB_COM_REGS = 0x00000015,
+ BB_CORDIC = 0x00000016,
+ BB_DP = 0x00000017
+} BB_CLKS_T;
+
+#define NB_BB_CLK_AEN (20)
+#define NB_BB_CLK_EN (24)
+#define NB_BB_CLK (24)
+
+// ============================================================================
+// WD_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WCDMA Baseband side System clocks
+ WD_WCPU = 0x00000000,
+ WD_AMBA = 0x00000001,
+ WD_PCLK_CONF = 0x00000002,
+ WD_PCLK_DATA = 0x00000003,
+ WD_A2A = 0x00000004,
+ WD_IFC_CH_SPI = 0x00000005,
+ WD_MPMC = 0x00000006,
+ WDD_OSC = 0x00000007,
+/// the following don't have an auto enable
+ WD_IRQ = 0x00000008,
+ WD_AXI = 0x00000009,
+ WD_DP = 0x0000000A,
+ WD_MODEM = 0x0000000B,
+ WD_COM_REGS = 0x0000000C,
+ WD_TIMER = 0x0000000D,
+ WD_SDMA = 0x0000000E,
+ WD_SLPC = 0x0000000F,
+ WD_SLPT = 0x00000010,
+ WD_SPI1 = 0x00000011,
+ WD_SPI2 = 0x00000012,
+ WD_RFIF = 0x00000013
+} WD_CLKS_T;
+
+#define NB_WD_CLK_AEN (8)
+#define NB_WD_CLK_EN (20)
+#define NB_WD_CLK (20)
+/// Other clocks
+/// clocks with auto enble
+/// the debug host clock auto enable is not used in host mode, only in uart mode
+#define OC_HOST_UART (0)
+
+// ============================================================================
+// OTHER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ OC_DEBUG_UART = 0x00000000,
+ OC_RF_RX = 0x00000001,
+ OC_RF_TX = 0x00000002,
+ OC_MEM_BRIDGE = 0x00000003,
+/// the following don't have an auto enable
+ OC_LPS = 0x00000004,
+ OC_GPIO = 0x00000005,
+ OC_CLK_OUT = 0x00000006,
+ OC_MEM_CLK_OUT = 0x00000007,
+ OC_TCU = 0x00000008,
+ OC_WD_CHIP = 0x00000009,
+ OC_WD_ADC = 0x0000000A,
+ OC_WD_TURBO = 0x0000000B,
+ OC_WD_OSC = 0x0000000C,
+ OC_MPMC = 0x0000000D
+} OTHER_CLKS_T;
+
+#define NB_OTHER_CLK_AEN (4)
+#define NB_OTHER_CLK_EN (14)
+#define NB_OTHER_CLK (14)
+
+// ============================================================================
+// RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side resets
+ RST_XCPU = 0x00000000,
+ RST_SYS_IRQ = 0x00000001,
+ RST_SYS_A2A = 0x00000002,
+ RST_SYS_AHB2AXI = 0x00000003,
+ RST_SYS_AXI2AHB = 0x00000004,
+ RST_DMA = 0x00000005,
+ RST_TIMER = 0x00000006,
+ RST_TCU = 0x00000007,
+ RST_GPIO = 0x00000008,
+ RST_CFG = 0x00000009,
+ RST_SPI1 = 0x0000000A,
+ RST_SPI2 = 0x0000000B,
+ RST_RF_SPI = 0x0000000C,
+ RST_SCI1 = 0x0000000D,
+ RST_SCI2 = 0x0000000E,
+ RST_SCI3 = 0x0000000F,
+ RST_SPY = 0x00000010,
+ RST_MEM_BRIDGE = 0x00000011,
+ RST_EXT_AHB = 0x00000012,
+ RST_DP_BB = 0x00000013,
+ RST_DP_AP = 0x00000014,
+ RST_COMREGS = 0x00000015,
+ RST_COMREGS_AP = 0x00000016,
+ RST_AP_CLKEN = 0x00000017,
+ RST_AP_RST = 0x00000018,
+ RST_MEM_CHK = 0x00000019,
+ RST_MPMC = 0x0000001A,
+ RST_SYS_A2A_WD = 0x0000001B,
+ RST_COMREGS_WD = 0x0000001C,
+ RST_BCPU = 0x0000001D,
+ RST_BB_IRQ = 0x0000001E,
+ RST_BB_A2A = 0x0000001F,
+ RST_BB_IFC = 0x00000020,
+ RST_BB_SRAM = 0x00000021,
+ RST_ITLV = 0x00000022,
+ RST_VITERBI = 0x00000023,
+ RST_CIPHER = 0x00000024,
+ RST_XCOR = 0x00000025,
+ RST_COPRO = 0x00000026,
+ RST_RF_IF = 0x00000027,
+ RST_EXCOR = 0x00000028,
+ RST_EVITAC = 0x00000029,
+ RST_CORDIC = 0x0000002A,
+ RST_TCU_BB = 0x0000002B,
+ RST_BB_DP = 0x0000002C,
+ RST_BB_ROM = 0x0000002D,
+ RST_MPMC_BB = 0x0000002E,
+ RST_BB_FULL = 0x0000002F,
+ RST_SYS_FULL = 0x00000030
+} RESETS_T;
+
+#define NB_SRST (29)
+/// Baseband side resets
+#define BOUND_BRST_FIRST (29)
+#define BOUND_BRST_AFTER (47)
+/// The following reset does not have register
+#define NR_RST_REG (48)
+#define NB_RST (49)
+#define NB_BRST (BOUND_BRST_AFTER-BOUND_BRST_FIRST)
+
+// ============================================================================
+// RESET_OTHERS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Reset Other : resync on corresponding clock other
+ RSTO_DBG_HOST = 0x00000000,
+ RSTO_RF_RX = 0x00000001,
+ RSTO_RF_TX = 0x00000002,
+ RSTO_MEM_BRIDGE = 0x00000003,
+ RSTO_LPS = 0x00000004,
+ RSTO_GPIO = 0x00000005,
+ RSTO_WDTIMER = 0x00000006,
+ RSTO_TCU = 0x00000007,
+ RSTO_MPMC = 0x00000008
+} RESET_OTHERS_T;
+
+#define BOUND_RSTO_RF_FIRST (1)
+#define BOUND_RSTO_RF_AFTER (3)
+#define NB_RSTO (9)
+
+// ============================================================================
+// WD_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WD side resets
+ WD_RST_WCPU = 0x00000000,
+ WD_RST_IRQ = 0x00000001,
+ WD_RST_DP = 0x00000002,
+ WD_RST_MODEM = 0x00000003,
+ WD_RST_A2A = 0x00000004,
+ WD_RST_IFC = 0x00000005,
+ WD_RST_SDMA = 0x00000006,
+ WD_RST_SLPC = 0x00000007,
+ WD_RST_SLPT = 0x00000008,
+ WD_RST_SPI1 = 0x00000009,
+ WD_RST_SPI2 = 0x0000000A,
+ WD_RST_RFIF = 0x0000000B,
+ WD_RST_COMREGS = 0x0000000C,
+ WD_RST_TIMER = 0x0000000D,
+ WD_RST_MPMC = 0x0000000E,
+ WD_RST_FULL = 0x0000000F
+} WD_RESETS_T;
+
+#define NB_WD_RST_BOUND (15)
+#define NB_WD_RST (16)
+
+// ============================================================================
+// AP_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side resets
+ AP_RST_0 = 0x00000000,
+ AP_RST_1 = 0x00000001,
+ AP_RST_2 = 0x00000002,
+ AP_RST_3 = 0x00000003,
+ AP_RST_4 = 0x00000004
+} AP_RESETS_T;
+
+#define NB_AP_RST_BOUND (5)
+#define NB_AP_RST (5)
+/// For REG_DBG protect lock/unlock value
+#define SYS_CTRL_PROTECT_LOCK (0XA50000)
+#define SYS_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// This register is protected.
+ REG32 Sys_Rst_Set; //0x00000004
+ REG32 Sys_Rst_Clr; //0x00000008
+ /// This register is protected.
+ REG32 BB_Rst_Set; //0x0000000C
+ REG32 BB_Rst_Clr; //0x00000010
+ REG32 Clk_Sys_Mode; //0x00000014
+ REG32 Clk_Sys_Enable; //0x00000018
+ /// This register is protected.
+ REG32 Clk_Sys_Disable; //0x0000001C
+ REG32 Clk_Per_Mode; //0x00000020
+ REG32 Clk_Per_Enable; //0x00000024
+ /// This register is protected.
+ REG32 Clk_Per_Disable; //0x00000028
+ REG32 Clk_BB_Mode; //0x0000002C
+ REG32 Clk_BB_Enable; //0x00000030
+ /// This register is protected.
+ REG32 Clk_BB_Disable; //0x00000034
+ REG32 Clk_Other_Mode; //0x00000038
+ REG32 Clk_Other_Enable; //0x0000003C
+ /// This register is protected.
+ REG32 Clk_Other_Disable; //0x00000040
+ /// Register protected by Write_Unlocked_H.
+ REG32 Pll_Ctrl; //0x00000044
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000048
+ REG32 Cfg_Clk_Sys; //0x0000004C
+ REG32 Cfg_Clk_Mem_Bridge; //0x00000050
+ /// This register is protected.
+ REG32 Cfg_Clk_Out; //0x00000054
+ REG32 Cfg_Clk_Host_Uart; //0x00000058
+ REG32 Cfg_Clk_Auxclk; //0x0000005C
+ /// This register is protected.
+ REG32 Cfg_AHB; //0x00000060
+ /// This register is protected. Used to unsplit masters manualy.
+ REG32 Ctrl_AHB; //0x00000064
+ REG32 XCpu_Dbg_BKP; //0x00000068
+ REG32 XCpu_Dbg_Addr; //0x0000006C
+ REG32 BCpu_Dbg_BKP; //0x00000070
+ REG32 BCpu_Dbg_Addr; //0x00000074
+ REG32 Cfg_Cpus_Cache_Ram_Disable; //0x00000078
+ REG32 Reset_Cause; //0x0000007C
+ /// This register is protected.
+ REG32 WakeUp; //0x00000080
+ REG32 AP_Ctrl; //0x00000084
+ /// This register is protected.
+ REG32 Ignore_Charger; //0x00000088
+ REG32 Clk_SYS2_Mode; //0x0000008C
+ REG32 Clk_SYS2_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_SYS2_Disable; //0x00000094
+ /// Register protected by Write_Unlocked_H.
+ REG32 WD_Pll_Ctrl; //0x00000098
+ /// This register is protected.
+ REG32 WD_Sel_Clock; //0x0000009C
+ /// This register is protected.
+ REG32 WD_Rst_Set; //0x000000A0
+ REG32 WD_Rst_Clr; //0x000000A4
+ /// This register is protected.
+ REG32 AP_Rst_Set; //0x000000A8
+ REG32 AP_Rst_Clr; //0x000000AC
+ REG32 Clk_WD_Mode; //0x000000B0
+ REG32 Clk_WD_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_WD_Disable; //0x000000B8
+ REG32 Cfg_Clk_MPMC; //0x000000BC
+ REG32 Cfg_MPMC_DQS; //0x000000C0
+ REG32 Reserved_000000C4[14]; //0x000000C4
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000000FC
+} HWP_SYS_CTRL_T;
+
+#define hwp_sysCtrlMd ((HWP_SYS_CTRL_T*)(RDA_MD_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_WRITE_UNLOCK (1<<31)
+
+//Sys_Rst_Set
+#define SYS_CTRL_SET_RST_XCPU (1<<0)
+#define SYS_CTRL_SET_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_SET_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_SET_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_SET_RST_DMA (1<<5)
+#define SYS_CTRL_SET_RST_TIMER (1<<6)
+#define SYS_CTRL_SET_RST_TCU (1<<7)
+#define SYS_CTRL_SET_RST_GPIO (1<<8)
+#define SYS_CTRL_SET_RST_CFG (1<<9)
+#define SYS_CTRL_SET_RST_SPI1 (1<<10)
+#define SYS_CTRL_SET_RST_SPI2 (1<<11)
+#define SYS_CTRL_SET_RST_RF_SPI (1<<12)
+#define SYS_CTRL_SET_RST_SCI1 (1<<13)
+#define SYS_CTRL_SET_RST_SCI2 (1<<14)
+#define SYS_CTRL_SET_RST_SCI3 (1<<15)
+#define SYS_CTRL_SET_RST_SPY (1<<16)
+#define SYS_CTRL_SET_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_SET_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_SET_RST_DP_BB (1<<19)
+#define SYS_CTRL_SET_RST_DP_AP (1<<20)
+#define SYS_CTRL_SET_RST_COMREGS (1<<21)
+#define SYS_CTRL_SET_RST_COMREGS_AP (1<<22)
+#define SYS_CTRL_SET_RST_AP_CLKEN (1<<23)
+#define SYS_CTRL_SET_RST_AP_RST (1<<24)
+#define SYS_CTRL_SET_RST_MEM_CHK (1<<25)
+#define SYS_CTRL_SET_RST_MPMC (1<<26)
+#define SYS_CTRL_SET_RST_SYS_A2A_WD (1<<27)
+#define SYS_CTRL_SET_RST_COMREGS_WD (1<<28)
+#define SYS_CTRL_SET_RST_OUT (1<<30)
+#define SYS_CTRL_SOFT_RST (1<<31)
+#define SYS_CTRL_SET_SYS_RST(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_SET_SYS_RST_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_SET_SYS_RST_SHIFT (0)
+
+//Sys_Rst_Clr
+#define SYS_CTRL_CLR_RST_XCPU (1<<0)
+#define SYS_CTRL_CLR_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_CLR_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_CLR_RST_DMA (1<<5)
+#define SYS_CTRL_CLR_RST_TIMER (1<<6)
+#define SYS_CTRL_CLR_RST_TCU (1<<7)
+#define SYS_CTRL_CLR_RST_GPIO (1<<8)
+#define SYS_CTRL_CLR_RST_CFG (1<<9)
+#define SYS_CTRL_CLR_RST_SPI1 (1<<10)
+#define SYS_CTRL_CLR_RST_SPI2 (1<<11)
+#define SYS_CTRL_CLR_RST_RF_SPI (1<<12)
+#define SYS_CTRL_CLR_RST_SCI1 (1<<13)
+#define SYS_CTRL_CLR_RST_SCI2 (1<<14)
+#define SYS_CTRL_CLR_RST_SCI3 (1<<15)
+#define SYS_CTRL_CLR_RST_SPY (1<<16)
+#define SYS_CTRL_CLR_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_CLR_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_CLR_RST_DP_BB (1<<19)
+#define SYS_CTRL_CLR_RST_DP_AP (1<<20)
+#define SYS_CTRL_CLR_RST_COMREGS (1<<21)
+#define SYS_CTRL_CLR_RST_COMREGS_AP (1<<22)
+#define SYS_CTRL_CLR_RST_AP_CLKEN (1<<23)
+#define SYS_CTRL_CLR_RST_AP_RST (1<<24)
+#define SYS_CTRL_CLR_RST_MEM_CHK (1<<25)
+#define SYS_CTRL_CLR_RST_MPMC (1<<26)
+#define SYS_CTRL_CLR_RST_SYS_A2A_WD (1<<27)
+#define SYS_CTRL_CLR_RST_COMREGS_WD (1<<28)
+#define SYS_CTRL_CLR_RST_OUT (1<<30)
+#define SYS_CTRL_CLR_SYS_RST(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_CLR_SYS_RST_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_CLR_SYS_RST_SHIFT (0)
+
+//BB_Rst_Set
+#define SYS_CTRL_SET_RST_BCPU (1<<0)
+#define SYS_CTRL_SET_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_BB_A2A (1<<2)
+#define SYS_CTRL_SET_RST_BB_IFC (1<<3)
+#define SYS_CTRL_SET_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_SET_RST_ITLV (1<<5)
+#define SYS_CTRL_SET_RST_VITERBI (1<<6)
+#define SYS_CTRL_SET_RST_CIPHER (1<<7)
+#define SYS_CTRL_SET_RST_XCOR (1<<8)
+#define SYS_CTRL_SET_RST_COPRO (1<<9)
+#define SYS_CTRL_SET_RST_RF_IF (1<<10)
+#define SYS_CTRL_SET_RST_EXCOR (1<<11)
+#define SYS_CTRL_SET_RST_EVITAC (1<<12)
+#define SYS_CTRL_SET_RST_CORDIC (1<<13)
+#define SYS_CTRL_SET_RST_TCU_BB (1<<14)
+#define SYS_CTRL_SET_RST_BB_DP (1<<15)
+#define SYS_CTRL_SET_RST_BB_ROM (1<<16)
+#define SYS_CTRL_SET_RST_MPMC_BB (1<<17)
+#define SYS_CTRL_SET_RST_BB_FULL (1<<31)
+#define SYS_CTRL_SET_BB_RST(n) (((n)&0x3FFFF)<<0)
+#define SYS_CTRL_SET_BB_RST_MASK (0x3FFFF<<0)
+#define SYS_CTRL_SET_BB_RST_SHIFT (0)
+
+//BB_Rst_Clr
+#define SYS_CTRL_CLR_RST_BCPU (1<<0)
+#define SYS_CTRL_CLR_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_BB_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_BB_IFC (1<<3)
+#define SYS_CTRL_CLR_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_CLR_RST_ITLV (1<<5)
+#define SYS_CTRL_CLR_RST_VITERBI (1<<6)
+#define SYS_CTRL_CLR_RST_CIPHER (1<<7)
+#define SYS_CTRL_CLR_RST_XCOR (1<<8)
+#define SYS_CTRL_CLR_RST_COPRO (1<<9)
+#define SYS_CTRL_CLR_RST_RF_IF (1<<10)
+#define SYS_CTRL_CLR_RST_EXCOR (1<<11)
+#define SYS_CTRL_CLR_RST_EVITAC (1<<12)
+#define SYS_CTRL_CLR_RST_CORDIC (1<<13)
+#define SYS_CTRL_CLR_RST_TCU_BB (1<<14)
+#define SYS_CTRL_CLR_RST_BB_DP (1<<15)
+#define SYS_CTRL_CLR_RST_BB_ROM (1<<16)
+#define SYS_CTRL_CLR_RST_MPMC_BB (1<<17)
+#define SYS_CTRL_CLR_RST_BB_FULL (1<<31)
+#define SYS_CTRL_CLR_BB_RST(n) (((n)&0x3FFFF)<<0)
+#define SYS_CTRL_CLR_BB_RST_MASK (0x3FFFF<<0)
+#define SYS_CTRL_CLR_BB_RST_SHIFT (0)
+
+//Clk_Sys_Mode
+#define SYS_CTRL_MODE_SYS_XCPU (1<<0)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_SYS_AMBA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_SYS_AMBA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_SYS_DMA_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_SYS_DMA_MANUAL (1<<5)
+#define SYS_CTRL_MODE_SYS_EBC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_SYS_EBC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_MANUAL (1<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_MANUAL (1<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_MANUAL (1<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_MANUAL (1<<10)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_MANUAL (1<<11)
+#define SYS_CTRL_MODE_SYS_A2A_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_SYS_A2A_MANUAL (1<<12)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_MANUAL (1<<13)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_MANUAL (1<<14)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_MANUAL (1<<15)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_MANUAL (1<<16)
+#define SYS_CTRL_MODE_SYS_DBGHST_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_SYS_DBGHST_MANUAL (1<<17)
+#define SYS_CTRL_MODE_SYS_A2A_WD_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_SYS_A2A_WD_MANUAL (1<<18)
+#define SYS_CTRL_MODE_SYSD_SCI1_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_SYSD_SCI1_MANUAL (1<<19)
+#define SYS_CTRL_MODE_SYSD_SCI2_AUTOMATIC (0<<20)
+#define SYS_CTRL_MODE_SYSD_SCI2_MANUAL (1<<20)
+#define SYS_CTRL_MODE_SYSD_SCI3_AUTOMATIC (0<<21)
+#define SYS_CTRL_MODE_SYSD_SCI3_MANUAL (1<<21)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_AUTOMATIC (0<<22)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_MANUAL (1<<22)
+#define SYS_CTRL_MODE_SYSD_OSC_AUTOMATIC (0<<23)
+#define SYS_CTRL_MODE_SYSD_OSC_MANUAL (1<<23)
+#define SYS_CTRL_MODE_CLK_SYS(n) (((n)&0x7FFFFF)<<1)
+#define SYS_CTRL_MODE_CLK_SYS_MASK (0x7FFFFF<<1)
+#define SYS_CTRL_MODE_CLK_SYS_SHIFT (1)
+
+//Clk_Sys_Enable
+#define SYS_CTRL_ENABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_ENABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_ENABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_ENABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_ENABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_ENABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_ENABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_ENABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_ENABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_ENABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_ENABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_ENABLE_SYS_A2A_WD (1<<18)
+#define SYS_CTRL_ENABLE_SYSD_SCI1 (1<<19)
+#define SYS_CTRL_ENABLE_SYSD_SCI2 (1<<20)
+#define SYS_CTRL_ENABLE_SYSD_SCI3 (1<<21)
+#define SYS_CTRL_ENABLE_SYSD_RF_SPI (1<<22)
+#define SYS_CTRL_ENABLE_SYSD_OSC (1<<23)
+#define SYS_CTRL_ENABLE_SYS_GPIO (1<<24)
+#define SYS_CTRL_ENABLE_SYS_IRQ (1<<25)
+#define SYS_CTRL_ENABLE_SYS_TCU (1<<26)
+#define SYS_CTRL_ENABLE_SYS_TIMER (1<<27)
+#define SYS_CTRL_ENABLE_SYS_COM_REGS (1<<28)
+#define SYS_CTRL_ENABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Sys_Disable
+#define SYS_CTRL_DISABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_DISABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_DISABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_DISABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_DISABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_DISABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_DISABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_DISABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_DISABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_DISABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_DISABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_DISABLE_SYS_A2A_WD (1<<18)
+#define SYS_CTRL_DISABLE_SYSD_SCI1 (1<<19)
+#define SYS_CTRL_DISABLE_SYSD_SCI2 (1<<20)
+#define SYS_CTRL_DISABLE_SYSD_SCI3 (1<<21)
+#define SYS_CTRL_DISABLE_SYSD_RF_SPI (1<<22)
+#define SYS_CTRL_DISABLE_SYSD_OSC (1<<23)
+#define SYS_CTRL_DISABLE_SYS_GPIO (1<<24)
+#define SYS_CTRL_DISABLE_SYS_IRQ (1<<25)
+#define SYS_CTRL_DISABLE_SYS_TCU (1<<26)
+#define SYS_CTRL_DISABLE_SYS_TIMER (1<<27)
+#define SYS_CTRL_DISABLE_SYS_COM_REGS (1<<28)
+#define SYS_CTRL_DISABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Per_Mode
+#define SYS_CTRL_MODE_PERD_SPI1_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_PERD_SPI1_MANUAL (1<<0)
+#define SYS_CTRL_MODE_PERD_SPI2_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_PERD_SPI2_MANUAL (1<<1)
+#define SYS_CTRL_MODE_CLK_PER(n) (((n)&3)<<0)
+#define SYS_CTRL_MODE_CLK_PER_MASK (3<<0)
+#define SYS_CTRL_MODE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Enable
+#define SYS_CTRL_ENABLE_PERD_SPI1 (1<<0)
+#define SYS_CTRL_ENABLE_PERD_SPI2 (1<<1)
+#define SYS_CTRL_ENABLE_PER_SPY (1<<2)
+#define SYS_CTRL_ENABLE_PER_TEST (1<<3)
+#define SYS_CTRL_ENABLE_CLK_PER(n) (((n)&15)<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_MASK (15<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Disable
+#define SYS_CTRL_DISABLE_PERD_SPI1 (1<<0)
+#define SYS_CTRL_DISABLE_PERD_SPI2 (1<<1)
+#define SYS_CTRL_DISABLE_PER_SPY (1<<2)
+#define SYS_CTRL_DISABLE_PER_TEST (1<<3)
+#define SYS_CTRL_DISABLE_CLK_PER(n) (((n)&15)<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_MASK (15<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_SHIFT (0)
+
+//Clk_BB_Mode
+#define SYS_CTRL_MODE_BB_BCPU (1<<0)
+#define SYS_CTRL_MODE_BB_BCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_BB_BCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_BB_AMBA_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_BB_AMBA_MANUAL (1<<2)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_MANUAL (1<<3)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_BB_EXCOR_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_BB_EXCOR_MANUAL (1<<5)
+#define SYS_CTRL_MODE_BB_IFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_BB_IFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_MODE_BB_SRAM_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_BB_SRAM_MANUAL (1<<8)
+#define SYS_CTRL_MODE_BB_A2A_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_BB_A2A_MANUAL (1<<9)
+#define SYS_CTRL_MODE_BB_ITLV_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_BB_ITLV_MANUAL (1<<10)
+#define SYS_CTRL_MODE_BB_VITERBI_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_BB_VITERBI_MANUAL (1<<11)
+#define SYS_CTRL_MODE_BB_CIPHER_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_BB_CIPHER_MANUAL (1<<12)
+#define SYS_CTRL_MODE_BB_RF_IF_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_BB_RF_IF_MANUAL (1<<13)
+#define SYS_CTRL_MODE_BB_COPRO_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_BB_COPRO_MANUAL (1<<14)
+#define SYS_CTRL_MODE_BB_CP2_REG_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_BB_CP2_REG_MANUAL (1<<15)
+#define SYS_CTRL_MODE_BB_XCOR_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_BB_XCOR_MANUAL (1<<16)
+#define SYS_CTRL_MODE_BB_EVITAC_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_BB_EVITAC_MANUAL (1<<17)
+#define SYS_CTRL_MODE_BB_ROM_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_BB_ROM_MANUAL (1<<18)
+#define SYS_CTRL_MODE_BB_MPMC_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_BB_MPMC_MANUAL (1<<19)
+#define SYS_CTRL_MODE_CLK_BB(n) (((n)&0x7FFFF)<<1)
+#define SYS_CTRL_MODE_CLK_BB_MASK (0x7FFFF<<1)
+#define SYS_CTRL_MODE_CLK_BB_SHIFT (1)
+
+//Clk_BB_Enable
+#define SYS_CTRL_ENABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_ENABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_ENABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_ENABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_ENABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_ENABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_ENABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_ENABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_ENABLE_BB_A2A (1<<9)
+#define SYS_CTRL_ENABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_ENABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_ENABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_ENABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_ENABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_ENABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_ENABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_ENABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_ENABLE_BB_ROM (1<<18)
+#define SYS_CTRL_ENABLE_BB_MPMC (1<<19)
+#define SYS_CTRL_ENABLE_BB_IRQ (1<<20)
+#define SYS_CTRL_ENABLE_BB_COM_REGS (1<<21)
+#define SYS_CTRL_ENABLE_BB_CORDIC (1<<22)
+#define SYS_CTRL_ENABLE_BB_DP (1<<23)
+#define SYS_CTRL_ENABLE_CLK_BB(n) (((n)&0xFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_MASK (0xFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_SHIFT (0)
+
+//Clk_BB_Disable
+#define SYS_CTRL_DISABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_DISABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_DISABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_DISABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_DISABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_DISABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_DISABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_DISABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_DISABLE_BB_A2A (1<<9)
+#define SYS_CTRL_DISABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_DISABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_DISABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_DISABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_DISABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_DISABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_DISABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_DISABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_DISABLE_BB_ROM (1<<18)
+#define SYS_CTRL_DISABLE_BB_MPMC (1<<19)
+#define SYS_CTRL_DISABLE_BB_IRQ (1<<20)
+#define SYS_CTRL_DISABLE_BB_COM_REGS (1<<21)
+#define SYS_CTRL_DISABLE_BB_CORDIC (1<<22)
+#define SYS_CTRL_DISABLE_BB_DP (1<<23)
+#define SYS_CTRL_DISABLE_CLK_BB(n) (((n)&0xFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_MASK (0xFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_SHIFT (0)
+
+//Clk_Other_Mode
+#define SYS_CTRL_MODE_OC_DEBUG_UART_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_OC_DEBUG_UART_MANUAL (1<<0)
+#define SYS_CTRL_MODE_OC_RF_RX_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_OC_RF_RX_MANUAL (1<<1)
+#define SYS_CTRL_MODE_OC_RF_TX_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_OC_RF_TX_MANUAL (1<<2)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_MANUAL (1<<3)
+#define SYS_CTRL_MODE_CLK_OTHER(n) (((n)&15)<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_MASK (15<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Enable
+#define SYS_CTRL_ENABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_ENABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_ENABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_ENABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_ENABLE_OC_LPS (1<<4)
+#define SYS_CTRL_ENABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_ENABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_ENABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_ENABLE_OC_TCU (1<<8)
+#define SYS_CTRL_ENABLE_OC_WD_CHIP (1<<9)
+#define SYS_CTRL_ENABLE_OC_WD_ADC (1<<10)
+#define SYS_CTRL_ENABLE_OC_WD_TURBO (1<<11)
+#define SYS_CTRL_ENABLE_OC_WD_OSC (1<<12)
+#define SYS_CTRL_ENABLE_OC_MPMC (1<<13)
+#define SYS_CTRL_ENABLE_CLK_OTHER(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_MASK (0x3FFF<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Disable
+#define SYS_CTRL_DISABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_DISABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_DISABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_DISABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_DISABLE_OC_LPS (1<<4)
+#define SYS_CTRL_DISABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_DISABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_DISABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_DISABLE_OC_TCU (1<<8)
+#define SYS_CTRL_DISABLE_OC_WD_CHIP (1<<9)
+#define SYS_CTRL_DISABLE_OC_WD_ADC (1<<10)
+#define SYS_CTRL_DISABLE_OC_WD_TURBO (1<<11)
+#define SYS_CTRL_DISABLE_OC_WD_OSC (1<<12)
+#define SYS_CTRL_DISABLE_OC_MPMC (1<<13)
+#define SYS_CTRL_DISABLE_CLK_OTHER(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_MASK (0x3FFF<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_SHIFT (0)
+
+//Pll_Ctrl
+#define SYS_CTRL_PLL_ENABLE (1<<0)
+#define SYS_CTRL_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_PLL_BYPASS (1<<8)
+#define SYS_CTRL_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_XP_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_XP_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_XP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_TCU_13M_L_26M (1<<5)
+#define SYS_CTRL_TCU_13M_L_13M (0<<5)
+#define SYS_CTRL_PLL_DISABLE_LPS_DISABLE (1<<6)
+#define SYS_CTRL_PLL_DISABLE_LPS_ENABLE (0<<6)
+#define SYS_CTRL_DIGEN_H_ENABLE (1<<7)
+#define SYS_CTRL_DIGEN_H_DISABLE (0<<7)
+#define SYS_CTRL_RF_DETECTED_OK (1<<20)
+#define SYS_CTRL_RF_DETECTED_NO (0<<20)
+#define SYS_CTRL_RF_DETECT_BYPASS (1<<21)
+#define SYS_CTRL_RF_DETECT_RESET (1<<22)
+#define SYS_CTRL_RF_SELECTED_L (1<<23)
+#define SYS_CTRL_PLL_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_MASK (1<<24)
+#define SYS_CTRL_PLL_LOCKED_SHIFT (24)
+#define SYS_CTRL_PLL_LOCKED_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_NOT_LOCKED (0<<24)
+#define SYS_CTRL_PLL_BYPASS_LOCK (1<<27)
+#define SYS_CTRL_FAST_SELECTED_L (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_MASK (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_SHIFT (31)
+
+//Cfg_Clk_Sys
+#define SYS_CTRL_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_FREQ_MASK (15<<0)
+#define SYS_CTRL_FREQ_SHIFT (0)
+#define SYS_CTRL_FREQ_312M (13<<0)
+#define SYS_CTRL_FREQ_250M (12<<0)
+#define SYS_CTRL_FREQ_208M (11<<0)
+#define SYS_CTRL_FREQ_178M (10<<0)
+#define SYS_CTRL_FREQ_156M (9<<0)
+#define SYS_CTRL_FREQ_139M (8<<0)
+#define SYS_CTRL_FREQ_125M (7<<0)
+#define SYS_CTRL_FREQ_113M (6<<0)
+#define SYS_CTRL_FREQ_104M (5<<0)
+#define SYS_CTRL_FREQ_89M (4<<0)
+#define SYS_CTRL_FREQ_78M (3<<0)
+#define SYS_CTRL_FREQ_52M (2<<0)
+#define SYS_CTRL_FREQ_39M (1<<0)
+#define SYS_CTRL_FREQ_26M (0<<0)
+#define SYS_CTRL_FORCE_DIV_UPDATE (1<<4)
+#define SYS_CTRL_REQ_DIV_UPDATE (1<<8)
+
+//Cfg_Clk_Mem_Bridge
+#define SYS_CTRL_MEM_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MEM_FREQ_MASK (15<<0)
+#define SYS_CTRL_MEM_FREQ_SHIFT (0)
+#define SYS_CTRL_MEM_FREQ_312M (13<<0)
+#define SYS_CTRL_MEM_FREQ_250M (12<<0)
+#define SYS_CTRL_MEM_FREQ_208M (11<<0)
+#define SYS_CTRL_MEM_FREQ_178M (10<<0)
+#define SYS_CTRL_MEM_FREQ_156M (9<<0)
+#define SYS_CTRL_MEM_FREQ_139M (8<<0)
+#define SYS_CTRL_MEM_FREQ_125M (7<<0)
+#define SYS_CTRL_MEM_FREQ_113M (6<<0)
+#define SYS_CTRL_MEM_FREQ_104M (5<<0)
+#define SYS_CTRL_MEM_FREQ_89M (4<<0)
+#define SYS_CTRL_MEM_FREQ_78M (3<<0)
+#define SYS_CTRL_MEM_FREQ_52M (2<<0)
+#define SYS_CTRL_MEM_FREQ_39M (1<<0)
+#define SYS_CTRL_MEM_FREQ_26M (0<<0)
+#define SYS_CTRL_DDR_MODE_EN_NORMAL_MODE (0<<4)
+#define SYS_CTRL_DDR_MODE_EN_DDR_MODE (1<<4)
+#define SYS_CTRL_DDR_FAST_CLK_POL_INVERT (1<<5)
+#define SYS_CTRL_DDR_FAST_CLK_POL_NORMAL (0<<5)
+#define SYS_CTRL_DDR_DQSL_O(n) (((n)&31)<<6)
+#define SYS_CTRL_DDR_DQSU_O(n) (((n)&31)<<11)
+#define SYS_CTRL_DDR_DQS_OEN(n) (((n)&31)<<16)
+#define SYS_CTRL_DDR_DQSL_I(n) (((n)&31)<<21)
+#define SYS_CTRL_DDR_DQSU_I(n) (((n)&31)<<26)
+#define SYS_CTRL_MEM_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Out
+#define SYS_CTRL_CLKOUT_DIVIDER(n) (((n)&31)<<0)
+#define SYS_CTRL_CLKOUT_SEL_OSC (0<<8)
+#define SYS_CTRL_CLKOUT_SEL_RF (1<<8)
+#define SYS_CTRL_CLKOUT_SEL_DIVIDER (2<<8)
+
+//Cfg_Clk_Host_Uart
+#define SYS_CTRL_HOST_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_HOST_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_HOST_UART_SEL_PLL_PLL (1<<12)
+
+//Cfg_Clk_Auxclk
+#define SYS_CTRL_AUXCLK_EN_DISABLE (0<<0)
+#define SYS_CTRL_AUXCLK_EN_ENABLE (1<<0)
+
+//Cfg_AHB
+#define SYS_CTRL_SYS_NEW_ARBITRATION_ENABLE (1<<0)
+#define SYS_CTRL_SYS_NEW_ARBITRATION_DISABLE (0<<0)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_ENABLE (1<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_DISABLE (0<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_ENABLE (1<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_DISABLE (0<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_ENABLE (1<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_DISABLE (0<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_ENABLE (1<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_DISABLE (0<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_ENABLE (1<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_DISABLE (0<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_WD_ENABLE (1<<6)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_WD_DISABLE (0<<6)
+#define SYS_CTRL_BB_NEW_ARBITRATION_ENABLE (1<<16)
+#define SYS_CTRL_BB_NEW_ARBITRATION_DISABLE (0<<16)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_ENABLE (1<<17)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_DISABLE (0<<17)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_ENABLE (1<<18)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_DISABLE (0<<18)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_ENABLE (1<<19)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_DISABLE (0<<19)
+#define SYS_CTRL_SYS_ENABLE(n) (((n)&0x3F)<<1)
+#define SYS_CTRL_SYS_ENABLE_MASK (0x3F<<1)
+#define SYS_CTRL_SYS_ENABLE_SHIFT (1)
+#define SYS_CTRL_BB_ENABLE(n) (((n)&7)<<17)
+#define SYS_CTRL_BB_ENABLE_MASK (7<<17)
+#define SYS_CTRL_BB_ENABLE_SHIFT (17)
+
+//Ctrl_AHB
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_NORMAL (1<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_FORCE (0<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_NORMAL (1<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_FORCE (0<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_NORMAL (1<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_FORCE (0<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_NORMAL (1<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_FORCE (0<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_NORMAL (1<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_FORCE (0<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_WD_NORMAL (1<<5)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_WD_FORCE (0<<5)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_NORMAL (1<<16)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_FORCE (0<<16)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_NORMAL (1<<17)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_FORCE (0<<17)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_NORMAL (1<<18)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_FORCE (0<<18)
+#define SYS_CTRL_SYS_FORCE_HSPLIT(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_MASK (0x3F<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_SHIFT (0)
+#define SYS_CTRL_BB_FORCE_HSPLIT(n) (((n)&7)<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_MASK (7<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_SHIFT (16)
+
+//XCpu_Dbg_BKP
+#define SYS_CTRL_BKPT_EN (1<<0)
+#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+#define SYS_CTRL_BKPT_MODE_I (0<<4)
+#define SYS_CTRL_BKPT_MODE_R (1<<4)
+#define SYS_CTRL_BKPT_MODE_W (2<<4)
+#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+#define SYS_CTRL_STALLED (1<<8)
+
+//XCpu_Dbg_Addr
+#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//BCpu_Dbg_BKP
+//#define SYS_CTRL_BKPT_EN (1<<0)
+//#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+//#define SYS_CTRL_BKPT_MODE_I (0<<4)
+//#define SYS_CTRL_BKPT_MODE_R (1<<4)
+//#define SYS_CTRL_BKPT_MODE_W (2<<4)
+//#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+//#define SYS_CTRL_STALLED (1<<8)
+
+//BCpu_Dbg_Addr
+//#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//Cfg_Cpus_Cache_Ram_Disable
+#define SYS_CTRL_XCPU_USE_MODE (1<<0)
+#define SYS_CTRL_XCPU_CLK_OFF_MODE (1<<1)
+#define SYS_CTRL_BCPU_USE_MODE (1<<16)
+#define SYS_CTRL_BCPU_CLK_OFF_MODE (1<<17)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_MASK (3<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_SHIFT (0)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_MASK (3<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_SHIFT (16)
+
+//Reset_Cause
+#define SYS_CTRL_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_APSOFT_RESET_HAPPENED (1<<1)
+#define SYS_CTRL_APSOFT_RESET_NO (0<<1)
+#define SYS_CTRL_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_MEMCHECKDONE_MASK (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_SHIFT (7)
+#define SYS_CTRL_MEMCHECKDONE_DONE (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_RUNNING (0<<7)
+#define SYS_CTRL_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_FONCTIONAL_TEST_MODE (1<<31)
+
+//WakeUp
+#define SYS_CTRL_FORCE_WAKEUP (1<<0)
+
+//AP_Ctrl
+#define SYS_CTRL_AP_INT_STATUS (1<<0)
+#define SYS_CTRL_AP_INT_MASK (1<<16)
+#define SYS_CTRL_AP_DEEPSLEEP_EN (1<<24)
+
+//Ignore_Charger
+#define SYS_CTRL_IGNORE_CHARGER (1<<0)
+
+//Clk_SYS2_Mode
+#define SYS_CTRL_MODE_SYS_MPMC_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_SYS_MPMC_MANUAL (1<<0)
+#define SYS_CTRL_MODE_SYS_MPMCREG_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_MPMCREG_MANUAL (1<<1)
+#define SYS_CTRL_MODE_CLK_SYS2(n) (((n)&3)<<0)
+#define SYS_CTRL_MODE_CLK_SYS2_MASK (3<<0)
+#define SYS_CTRL_MODE_CLK_SYS2_SHIFT (0)
+
+//Clk_SYS2_Enable
+#define SYS_CTRL_ENABLE_SYS_MPMC (1<<0)
+#define SYS_CTRL_ENABLE_SYS_MPMCREG (1<<1)
+#define SYS_CTRL_ENABLE_SYS_DP_BB (1<<2)
+#define SYS_CTRL_ENABLE_SYS_DP_WD (1<<3)
+#define SYS_CTRL_ENABLE_SYS_DP_AP (1<<4)
+#define SYS_CTRL_ENABLE_CLK_SYS2(n) (((n)&31)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS2_MASK (31<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS2_SHIFT (0)
+
+//Clk_SYS2_Disable
+#define SYS_CTRL_DISABLE_SYS_MPMC (1<<0)
+#define SYS_CTRL_DISABLE_SYS_MPMCREG (1<<1)
+#define SYS_CTRL_DISABLE_SYS_DP_BB (1<<2)
+#define SYS_CTRL_DISABLE_SYS_DP_WD (1<<3)
+#define SYS_CTRL_DISABLE_SYS_DP_AP (1<<4)
+#define SYS_CTRL_DISABLE_CLK_SYS2(n) (((n)&31)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS2_MASK (31<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS2_SHIFT (0)
+
+//WD_Pll_Ctrl
+#define SYS_CTRL_WD_PLL_ENABLE (1<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_WD_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_WD_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_WD_PLL_BYPASS (1<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_WD_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_WD_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_WD_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_WD_CFG_SHIFT (0)
+
+//WD_Sel_Clock
+#define SYS_CTRL_WD_CLK_ADC_POL_INVERT (1<<0)
+#define SYS_CTRL_WD_CLK_ADC_POL_NORMAL (0<<0)
+#define SYS_CTRL_WD_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_WD_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_WD_PLL_BYPASS_LOCK (1<<8)
+#define SYS_CTRL_WD_PLL_LOCKED (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_MASK (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_SHIFT (20)
+#define SYS_CTRL_WD_PLL_LOCKED_LOCKED (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_NOT_LOCKED (0<<20)
+#define SYS_CTRL_WD_FAST_SELECTED_L (1<<24)
+#define SYS_CTRL_WD_FAST_SELECTED_L_MASK (1<<24)
+#define SYS_CTRL_WD_FAST_SELECTED_L_SHIFT (24)
+
+//WD_Rst_Set
+#define SYS_CTRL_SET_WD_RST_WCPU (1<<0)
+#define SYS_CTRL_SET_WD_RST_IRQ (1<<1)
+#define SYS_CTRL_SET_WD_RST_DP (1<<2)
+#define SYS_CTRL_SET_WD_RST_MODEM (1<<3)
+#define SYS_CTRL_SET_WD_RST_A2A (1<<4)
+#define SYS_CTRL_SET_WD_RST_IFC (1<<5)
+#define SYS_CTRL_SET_WD_RST_SDMA (1<<6)
+#define SYS_CTRL_SET_WD_RST_SLPC (1<<7)
+#define SYS_CTRL_SET_WD_RST_SLPT (1<<8)
+#define SYS_CTRL_SET_WD_RST_SPI1 (1<<9)
+#define SYS_CTRL_SET_WD_RST_SPI2 (1<<10)
+#define SYS_CTRL_SET_WD_RST_RFIF (1<<11)
+#define SYS_CTRL_SET_WD_RST_COMREGS (1<<12)
+#define SYS_CTRL_SET_WD_RST_TIMER (1<<13)
+#define SYS_CTRL_SET_WD_RST_MPMC (1<<14)
+#define SYS_CTRL_SET_WD_RST_FULL (1<<31)
+#define SYS_CTRL_SET_WD_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_SET_WD_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_SET_WD_RST_SHIFT (0)
+
+//WD_Rst_Clr
+#define SYS_CTRL_CLR_WD_RST_WCPU (1<<0)
+#define SYS_CTRL_CLR_WD_RST_IRQ (1<<1)
+#define SYS_CTRL_CLR_WD_RST_DP (1<<2)
+#define SYS_CTRL_CLR_WD_RST_MODEM (1<<3)
+#define SYS_CTRL_CLR_WD_RST_A2A (1<<4)
+#define SYS_CTRL_CLR_WD_RST_IFC (1<<5)
+#define SYS_CTRL_CLR_WD_RST_SDMA (1<<6)
+#define SYS_CTRL_CLR_WD_RST_SLPC (1<<7)
+#define SYS_CTRL_CLR_WD_RST_SLPT (1<<8)
+#define SYS_CTRL_CLR_WD_RST_SPI1 (1<<9)
+#define SYS_CTRL_CLR_WD_RST_SPI2 (1<<10)
+#define SYS_CTRL_CLR_WD_RST_RFIF (1<<11)
+#define SYS_CTRL_CLR_WD_RST_COMREGS (1<<12)
+#define SYS_CTRL_CLR_WD_RST_TIMER (1<<13)
+#define SYS_CTRL_CLR_WD_RST_MPMC (1<<14)
+#define SYS_CTRL_CLR_WD_RST_FULL (1<<31)
+#define SYS_CTRL_CLR_WD_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_CLR_WD_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_CLR_WD_RST_SHIFT (0)
+
+//AP_Rst_Set
+#define SYS_CTRL_SET_AP_RST_0 (1<<0)
+#define SYS_CTRL_SET_AP_RST_1 (1<<1)
+#define SYS_CTRL_SET_AP_RST_2 (1<<2)
+#define SYS_CTRL_SET_AP_RST_3 (1<<3)
+#define SYS_CTRL_SET_AP_RST_4 (1<<4)
+#define SYS_CTRL_SET_AP_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_SET_AP_RST_MASK (31<<0)
+#define SYS_CTRL_SET_AP_RST_SHIFT (0)
+
+//AP_Rst_Clr
+#define SYS_CTRL_CLR_AP_RST_0 (1<<0)
+#define SYS_CTRL_CLR_AP_RST_1 (1<<1)
+#define SYS_CTRL_CLR_AP_RST_2 (1<<2)
+#define SYS_CTRL_CLR_AP_RST_3 (1<<3)
+#define SYS_CTRL_CLR_AP_RST_4 (1<<4)
+#define SYS_CTRL_CLR_AP_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_CLR_AP_RST_MASK (31<<0)
+#define SYS_CTRL_CLR_AP_RST_SHIFT (0)
+
+//Clk_WD_Mode
+#define SYS_CTRL_MODE_WD_WCPU (1<<0)
+#define SYS_CTRL_MODE_WD_AMBA_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_WD_AMBA_MANUAL (1<<1)
+#define SYS_CTRL_MODE_WD_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_WD_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_WD_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_WD_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_WD_A2A_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_WD_A2A_MANUAL (1<<4)
+#define SYS_CTRL_MODE_WD_IFC_CH_SPI_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_WD_IFC_CH_SPI_MANUAL (1<<5)
+#define SYS_CTRL_MODE_WD_MPMC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_WD_MPMC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_WDD_OSC_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_WDD_OSC_MANUAL (1<<7)
+#define SYS_CTRL_MODE_CLK_WD(n) (((n)&0x7F)<<1)
+#define SYS_CTRL_MODE_CLK_WD_MASK (0x7F<<1)
+#define SYS_CTRL_MODE_CLK_WD_SHIFT (1)
+
+//Clk_WD_Enable
+#define SYS_CTRL_ENABLE_WD_WCPU (1<<0)
+#define SYS_CTRL_ENABLE_WD_AMBA (1<<1)
+#define SYS_CTRL_ENABLE_WD_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_WD_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_WD_A2A (1<<4)
+#define SYS_CTRL_ENABLE_WD_IFC_CH_SPI (1<<5)
+#define SYS_CTRL_ENABLE_WD_MPMC (1<<6)
+#define SYS_CTRL_ENABLE_WDD_OSC (1<<7)
+#define SYS_CTRL_ENABLE_WD_IRQ (1<<8)
+#define SYS_CTRL_ENABLE_WD_AXI (1<<9)
+#define SYS_CTRL_ENABLE_WD_DP (1<<10)
+#define SYS_CTRL_ENABLE_WD_MODEM (1<<11)
+#define SYS_CTRL_ENABLE_WD_COM_REGS (1<<12)
+#define SYS_CTRL_ENABLE_WD_TIMER (1<<13)
+#define SYS_CTRL_ENABLE_WD_SDMA (1<<14)
+#define SYS_CTRL_ENABLE_WD_SLPC (1<<15)
+#define SYS_CTRL_ENABLE_WD_SLPT (1<<16)
+#define SYS_CTRL_ENABLE_WD_SPI1 (1<<17)
+#define SYS_CTRL_ENABLE_WD_SPI2 (1<<18)
+#define SYS_CTRL_ENABLE_WD_RFIF (1<<19)
+#define SYS_CTRL_ENABLE_CLK_WD(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_WD_MASK (0xFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_WD_SHIFT (0)
+
+//Clk_WD_Disable
+#define SYS_CTRL_DISABLE_WD_WCPU (1<<0)
+#define SYS_CTRL_DISABLE_WD_AMBA (1<<1)
+#define SYS_CTRL_DISABLE_WD_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_WD_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_WD_A2A (1<<4)
+#define SYS_CTRL_DISABLE_WD_IFC_CH_SPI (1<<5)
+#define SYS_CTRL_DISABLE_WD_MPMC (1<<6)
+#define SYS_CTRL_DISABLE_WDD_OSC (1<<7)
+#define SYS_CTRL_DISABLE_WD_IRQ (1<<8)
+#define SYS_CTRL_DISABLE_WD_AXI (1<<9)
+#define SYS_CTRL_DISABLE_WD_DP (1<<10)
+#define SYS_CTRL_DISABLE_WD_MODEM (1<<11)
+#define SYS_CTRL_DISABLE_WD_COM_REGS (1<<12)
+#define SYS_CTRL_DISABLE_WD_TIMER (1<<13)
+#define SYS_CTRL_DISABLE_WD_SDMA (1<<14)
+#define SYS_CTRL_DISABLE_WD_SLPC (1<<15)
+#define SYS_CTRL_DISABLE_WD_SLPT (1<<16)
+#define SYS_CTRL_DISABLE_WD_SPI1 (1<<17)
+#define SYS_CTRL_DISABLE_WD_SPI2 (1<<18)
+#define SYS_CTRL_DISABLE_WD_RFIF (1<<19)
+#define SYS_CTRL_DISABLE_CLK_WD(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_WD_MASK (0xFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_WD_SHIFT (0)
+
+//Cfg_Clk_MPMC
+#define SYS_CTRL_MPMC_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MPMC_FREQ_MASK (15<<0)
+#define SYS_CTRL_MPMC_FREQ_SHIFT (0)
+#define SYS_CTRL_MPMC_FREQ_312M (13<<0)
+#define SYS_CTRL_MPMC_FREQ_250M (12<<0)
+#define SYS_CTRL_MPMC_FREQ_208M (11<<0)
+#define SYS_CTRL_MPMC_FREQ_178M (10<<0)
+#define SYS_CTRL_MPMC_FREQ_156M (9<<0)
+#define SYS_CTRL_MPMC_FREQ_139M (8<<0)
+#define SYS_CTRL_MPMC_FREQ_125M (7<<0)
+#define SYS_CTRL_MPMC_FREQ_113M (6<<0)
+#define SYS_CTRL_MPMC_FREQ_104M (5<<0)
+#define SYS_CTRL_MPMC_FREQ_89M (4<<0)
+#define SYS_CTRL_MPMC_FREQ_78M (3<<0)
+#define SYS_CTRL_MPMC_FREQ_52M (2<<0)
+#define SYS_CTRL_MPMC_FREQ_39M (1<<0)
+#define SYS_CTRL_MPMC_FREQ_26M (0<<0)
+#define SYS_CTRL_CLK_MPMC_DELAY(n) (((n)&31)<<8)
+#define SYS_CTRL_CLK_MPMC_DELAY_POL (1<<13)
+#define SYS_CTRL_CLK_MPMC_FEEDBACK(n) (((n)&31)<<14)
+#define SYS_CTRL_CLK_MPMC_FEEDBACK_POL (1<<19)
+#define SYS_CTRL_MPMC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_MPMC_DQS
+#define SYS_CTRL_MPMC_DQSL_O(n) (((n)&31)<<0)
+#define SYS_CTRL_MPMC_DQSU_O(n) (((n)&31)<<6)
+#define SYS_CTRL_MPMC_DQS_OEN(n) (((n)&31)<<12)
+#define SYS_CTRL_MPMC_DQSL_I(n) (((n)&31)<<18)
+#define SYS_CTRL_MPMC_DQSU_I(n) (((n)&31)<<24)
+
+//Cfg_Reserve
+#define SYS_CTRL_RESERVE(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AUIFC_CH0_IRQ_MASK (1<<14)
+#define SYS_CTRL_AUIFC_CH1_IRQ_MASK (1<<15)
+#define SYS_CTRL_RESERVE2(n) (((n)&0xFFFF)<<16)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850e.h b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850e.h
new file mode 100644
index 0000000000..f0928a1d6e
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_md_sysctrl_rda8850e.h
@@ -0,0 +1,1363 @@
+#ifndef _REG_MD_SYSCTRL_H_
+#define _REG_MD_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ XCPU = 0x00000000,
+ BCPU = 0x00000001,
+ WCPU = 0x00000002
+} CPU_ID_T;
+
+#define NB_MODEM_CPU (3)
+
+// ============================================================================
+// SYS_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side System clocks
+ SYS_XCPU = 0x00000000,
+ SYS_XCPU_INT = 0x00000001,
+ SYS_PCLK_CONF = 0x00000002,
+ SYS_PCLK_DATA = 0x00000003,
+ SYS_AMBA = 0x00000004,
+ SYS_DMA = 0x00000005,
+ SYS_EBC = 0x00000006,
+ SYS_IFC_CH0 = 0x00000007,
+ SYS_IFC_CH1 = 0x00000008,
+ SYS_IFC_CH2 = 0x00000009,
+ SYS_IFC_CH3 = 0x0000000A,
+ SYS_IFC_DBG = 0x0000000B,
+ SYS_A2A = 0x0000000C,
+ SYS_AXI2AHB = 0x0000000D,
+ SYS_AHB2AXI = 0x0000000E,
+ SYS_EXT_AHB = 0x0000000F,
+ SYS_DEBUG_UART = 0x00000010,
+ SYS_DBGHST = 0x00000011,
+ SYS_A2A_WD = 0x00000012,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ SYSD_SCI1 = 0x00000013,
+ SYSD_SCI2 = 0x00000014,
+ SYSD_SCI3 = 0x00000015,
+ SYSD_RF_SPI = 0x00000016,
+ SYSD_OSC = 0x00000017,
+/// the following don't have an auto enable
+ SYS_GPIO = 0x00000018,
+ SYS_IRQ = 0x00000019,
+ SYS_TCU = 0x0000001A,
+ SYS_TIMER = 0x0000001B,
+ SYS_COM_REGS = 0x0000001C,
+/// the following are sharing their enable
+ SYS_SCI1 = 0x0000001D,
+ SYS_SCI2 = 0x0000001E,
+ SYS_SCI3 = 0x0000001F,
+/// keep last
+ SYS_NOGATE = 0x00000020
+} SYS_CLKS_T;
+
+#define NB_SYS_CLK_XCPU (2)
+#define NB_SYS_CLK_AEN (24)
+#define NB_SYS_CLK_EN (29)
+#define NB_SYS_CLK (33)
+
+// ============================================================================
+// SYS2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WCDMA Baseband side System clocks
+ SYS_MPMC = 0x00000000,
+ SYS_MPMCREG = 0x00000001,
+/// the following don't have an auto enable
+ SYS_DP_BB = 0x00000002,
+ SYS_DP_WD = 0x00000003,
+ SYS_DP_AP = 0x00000004
+} SYS2_CLKS_T;
+
+#define NB_SYS2_CLK_AEN (2)
+#define NB_SYS2_CLK_EN (5)
+#define NB_SYS2_CLK (5)
+
+// ============================================================================
+// PER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI1 = 0x00000000,
+/// System side divided clock (either divided by module or by sys_ctrl)
+ PERD_SPI2 = 0x00000001,
+ PER_SPY = 0x00000002,
+ PER_TEST = 0x00000003
+} PER_CLKS_T;
+
+#define NB_PER_CLK_AEN (2)
+#define NB_PER_CLK_EN (4)
+#define NB_PER_CLK (4)
+
+// ============================================================================
+// BB_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Baseband side System clocks
+ BB_BCPU = 0x00000000,
+ BB_BCPU_INT = 0x00000001,
+ BB_AMBA = 0x00000002,
+ BB_PCLK_CONF = 0x00000003,
+ BB_PCLK_DATA = 0x00000004,
+ BB_EXCOR = 0x00000005,
+ BB_IFC_CH2 = 0x00000006,
+ BB_IFC_CH3 = 0x00000007,
+ BB_SRAM = 0x00000008,
+ BB_A2A = 0x00000009,
+ BB_ITLV = 0x0000000A,
+ BB_VITERBI = 0x0000000B,
+ BB_CIPHER = 0x0000000C,
+ BB_RF_IF = 0x0000000D,
+ BB_COPRO = 0x0000000E,
+ BB_CP2_REG = 0x0000000F,
+ BB_XCOR = 0x00000010,
+ BB_EVITAC = 0x00000011,
+ BB_ROM = 0x00000012,
+ BB_MPMC = 0x00000013,
+/// the following don't have an auto enable
+ BB_IRQ = 0x00000014,
+ BB_COM_REGS = 0x00000015,
+ BB_CORDIC = 0x00000016,
+ BB_DP = 0x00000017
+} BB_CLKS_T;
+
+#define NB_BB_CLK_AEN (20)
+#define NB_BB_CLK_EN (24)
+#define NB_BB_CLK (24)
+
+// ============================================================================
+// WD_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WCDMA Baseband side System clocks
+ WD_WCPU = 0x00000000,
+ WD_AMBA = 0x00000001,
+ WD_PCLK_CONF = 0x00000002,
+ WD_PCLK_DATA = 0x00000003,
+ WD_A2A = 0x00000004,
+ WD_IFC_CH_SPI = 0x00000005,
+ WD_MPMC = 0x00000006,
+ WDD_OSC = 0x00000007,
+/// the following don't have an auto enable
+ WD_IRQ = 0x00000008,
+ WD_AXI = 0x00000009,
+ WD_DP = 0x0000000A,
+ WD_MODEM = 0x0000000B,
+ WD_COM_REGS = 0x0000000C,
+ WD_TIMER = 0x0000000D,
+ WD_SDMA = 0x0000000E,
+ WD_SLPC = 0x0000000F,
+ WD_SLPT = 0x00000010,
+ WD_SPI1 = 0x00000011,
+ WD_SPI2 = 0x00000012,
+ WD_RFIF = 0x00000013
+} WD_CLKS_T;
+
+#define NB_WD_CLK_AEN (8)
+#define NB_WD_CLK_EN (20)
+#define NB_WD_CLK (20)
+/// Other clocks
+/// clocks with auto enble
+/// the debug host clock auto enable is not used in host mode, only in uart mode
+#define OC_HOST_UART (0)
+
+// ============================================================================
+// OTHER_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+ OC_DEBUG_UART = 0x00000000,
+ OC_RF_RX = 0x00000001,
+ OC_RF_TX = 0x00000002,
+ OC_MEM_BRIDGE = 0x00000003,
+/// the following don't have an auto enable
+ OC_LPS = 0x00000004,
+ OC_GPIO = 0x00000005,
+ OC_CLK_OUT = 0x00000006,
+ OC_MEM_CLK_OUT = 0x00000007,
+ OC_TCU = 0x00000008,
+ OC_WD_CHIP = 0x00000009,
+ OC_WD_ADC = 0x0000000A,
+ OC_WD_TURBO = 0x0000000B,
+ OC_WD_OSC = 0x0000000C,
+ OC_MPMC = 0x0000000D
+} OTHER_CLKS_T;
+
+#define NB_OTHER_CLK_AEN (4)
+#define NB_OTHER_CLK_EN (14)
+#define NB_OTHER_CLK (14)
+
+// ============================================================================
+// RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// System side resets
+ RST_XCPU = 0x00000000,
+ RST_SYS_IRQ = 0x00000001,
+ RST_SYS_A2A = 0x00000002,
+ RST_SYS_AHB2AXI = 0x00000003,
+ RST_SYS_AXI2AHB = 0x00000004,
+ RST_DMA = 0x00000005,
+ RST_TIMER = 0x00000006,
+ RST_TCU = 0x00000007,
+ RST_GPIO = 0x00000008,
+ RST_CFG = 0x00000009,
+ RST_SPI1 = 0x0000000A,
+ RST_SPI2 = 0x0000000B,
+ RST_RF_SPI = 0x0000000C,
+ RST_SCI1 = 0x0000000D,
+ RST_SCI2 = 0x0000000E,
+ RST_SCI3 = 0x0000000F,
+ RST_SPY = 0x00000010,
+ RST_MEM_BRIDGE = 0x00000011,
+ RST_EXT_AHB = 0x00000012,
+ RST_DP_BB = 0x00000013,
+ RST_DP_AP = 0x00000014,
+ RST_COMREGS = 0x00000015,
+ RST_COMREGS_AP = 0x00000016,
+ RST_AP_CLKEN = 0x00000017,
+ RST_AP_RST = 0x00000018,
+ RST_MEM_CHK = 0x00000019,
+ RST_MPMC = 0x0000001A,
+ RST_SYS_A2A_WD = 0x0000001B,
+ RST_COMREGS_WD = 0x0000001C,
+ RST_BCPU = 0x0000001D,
+ RST_BB_IRQ = 0x0000001E,
+ RST_BB_A2A = 0x0000001F,
+ RST_BB_IFC = 0x00000020,
+ RST_BB_SRAM = 0x00000021,
+ RST_ITLV = 0x00000022,
+ RST_VITERBI = 0x00000023,
+ RST_CIPHER = 0x00000024,
+ RST_XCOR = 0x00000025,
+ RST_COPRO = 0x00000026,
+ RST_RF_IF = 0x00000027,
+ RST_EXCOR = 0x00000028,
+ RST_EVITAC = 0x00000029,
+ RST_CORDIC = 0x0000002A,
+ RST_TCU_BB = 0x0000002B,
+ RST_BB_DP = 0x0000002C,
+ RST_BB_ROM = 0x0000002D,
+ RST_MPMC_BB = 0x0000002E,
+ RST_BB_FULL = 0x0000002F,
+ RST_SYS_FULL = 0x00000030
+} RESETS_T;
+
+#define NB_SRST (29)
+/// Baseband side resets
+#define BOUND_BRST_FIRST (29)
+#define BOUND_BRST_AFTER (47)
+/// The following reset does not have register
+#define NR_RST_REG (48)
+#define NB_RST (49)
+#define NB_BRST (BOUND_BRST_AFTER-BOUND_BRST_FIRST)
+
+// ============================================================================
+// RESET_OTHERS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// Reset Other : resync on corresponding clock other
+ RSTO_DBG_HOST = 0x00000000,
+ RSTO_RF_RX = 0x00000001,
+ RSTO_RF_TX = 0x00000002,
+ RSTO_MEM_BRIDGE = 0x00000003,
+ RSTO_LPS = 0x00000004,
+ RSTO_GPIO = 0x00000005,
+ RSTO_WDTIMER = 0x00000006,
+ RSTO_TCU = 0x00000007,
+ RSTO_MPMC = 0x00000008
+} RESET_OTHERS_T;
+
+#define BOUND_RSTO_RF_FIRST (1)
+#define BOUND_RSTO_RF_AFTER (3)
+#define NB_RSTO (9)
+
+// ============================================================================
+// WD_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// WD side resets
+ WD_RST_WCPU = 0x00000000,
+ WD_RST_IRQ = 0x00000001,
+ WD_RST_DP = 0x00000002,
+ WD_RST_MODEM = 0x00000003,
+ WD_RST_A2A = 0x00000004,
+ WD_RST_IFC = 0x00000005,
+ WD_RST_SDMA = 0x00000006,
+ WD_RST_SLPC = 0x00000007,
+ WD_RST_SLPT = 0x00000008,
+ WD_RST_SPI1 = 0x00000009,
+ WD_RST_SPI2 = 0x0000000A,
+ WD_RST_RFIF = 0x0000000B,
+ WD_RST_COMREGS = 0x0000000C,
+ WD_RST_TIMER = 0x0000000D,
+ WD_RST_MPMC = 0x0000000E,
+ WD_RST_FULL = 0x0000000F
+} WD_RESETS_T;
+
+#define NB_WD_RST_BOUND (15)
+#define NB_WD_RST (16)
+
+// ============================================================================
+// AP_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side resets
+ AP_RST_0 = 0x00000000,
+ AP_RST_1 = 0x00000001,
+ AP_RST_2 = 0x00000002,
+ AP_RST_3 = 0x00000003,
+ AP_RST_4 = 0x00000004
+} AP_RESETS_T;
+
+#define NB_AP_RST_BOUND (5)
+#define NB_AP_RST (5)
+/// For REG_DBG protect lock/unlock value
+#define SYS_CTRL_PROTECT_LOCK (0XA50000)
+#define SYS_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// This register is protected.
+ REG32 Sys_Rst_Set; //0x00000004
+ REG32 Sys_Rst_Clr; //0x00000008
+ /// This register is protected.
+ REG32 BB_Rst_Set; //0x0000000C
+ REG32 BB_Rst_Clr; //0x00000010
+ REG32 Clk_Sys_Mode; //0x00000014
+ REG32 Clk_Sys_Enable; //0x00000018
+ /// This register is protected.
+ REG32 Clk_Sys_Disable; //0x0000001C
+ REG32 Clk_Per_Mode; //0x00000020
+ REG32 Clk_Per_Enable; //0x00000024
+ /// This register is protected.
+ REG32 Clk_Per_Disable; //0x00000028
+ REG32 Clk_BB_Mode; //0x0000002C
+ REG32 Clk_BB_Enable; //0x00000030
+ /// This register is protected.
+ REG32 Clk_BB_Disable; //0x00000034
+ REG32 Clk_Other_Mode; //0x00000038
+ REG32 Clk_Other_Enable; //0x0000003C
+ /// This register is protected.
+ REG32 Clk_Other_Disable; //0x00000040
+ /// Register protected by Write_Unlocked_H.
+ REG32 Pll_Ctrl; //0x00000044
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000048
+ REG32 Cfg_Clk_Sys; //0x0000004C
+ REG32 Cfg_Clk_Mem_Bridge; //0x00000050
+ /// This register is protected.
+ REG32 Cfg_Clk_Out; //0x00000054
+ REG32 Cfg_Clk_Host_Uart; //0x00000058
+ REG32 Cfg_Clk_Auxclk; //0x0000005C
+ /// This register is protected.
+ REG32 Cfg_AHB; //0x00000060
+ /// This register is protected. Used to unsplit masters manualy.
+ REG32 Ctrl_AHB; //0x00000064
+ REG32 XCpu_Dbg_BKP; //0x00000068
+ REG32 XCpu_Dbg_Addr; //0x0000006C
+ REG32 BCpu_Dbg_BKP; //0x00000070
+ REG32 BCpu_Dbg_Addr; //0x00000074
+ REG32 Cfg_Cpus_Cache_Ram_Disable; //0x00000078
+ REG32 Reset_Cause; //0x0000007C
+ /// This register is protected.
+ REG32 WakeUp; //0x00000080
+ REG32 AP_Ctrl; //0x00000084
+ /// This register is protected.
+ REG32 Ignore_Charger; //0x00000088
+ REG32 Clk_SYS2_Mode; //0x0000008C
+ REG32 Clk_SYS2_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_SYS2_Disable; //0x00000094
+ /// Register protected by Write_Unlocked_H.
+ REG32 WD_Pll_Ctrl; //0x00000098
+ /// This register is protected.
+ REG32 WD_Sel_Clock; //0x0000009C
+ /// This register is protected.
+ REG32 WD_Rst_Set; //0x000000A0
+ REG32 WD_Rst_Clr; //0x000000A4
+ /// This register is protected.
+ REG32 AP_Rst_Set; //0x000000A8
+ REG32 AP_Rst_Clr; //0x000000AC
+ REG32 Clk_WD_Mode; //0x000000B0
+ REG32 Clk_WD_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_WD_Disable; //0x000000B8
+ REG32 Cfg_Clk_MPMC; //0x000000BC
+ REG32 Cfg_MPMC_DQS; //0x000000C0
+ REG32 Reserved_000000C4[14]; //0x000000C4
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000000FC
+} HWP_SYS_CTRL_T;
+
+#define hwp_sysCtrlMd ((HWP_SYS_CTRL_T*)(RDA_MD_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_WRITE_UNLOCK (1<<31)
+
+//Sys_Rst_Set
+#define SYS_CTRL_SET_RST_XCPU (1<<0)
+#define SYS_CTRL_SET_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_SET_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_SET_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_SET_RST_DMA (1<<5)
+#define SYS_CTRL_SET_RST_TIMER (1<<6)
+#define SYS_CTRL_SET_RST_TCU (1<<7)
+#define SYS_CTRL_SET_RST_GPIO (1<<8)
+#define SYS_CTRL_SET_RST_CFG (1<<9)
+#define SYS_CTRL_SET_RST_SPI1 (1<<10)
+#define SYS_CTRL_SET_RST_SPI2 (1<<11)
+#define SYS_CTRL_SET_RST_RF_SPI (1<<12)
+#define SYS_CTRL_SET_RST_SCI1 (1<<13)
+#define SYS_CTRL_SET_RST_SCI2 (1<<14)
+#define SYS_CTRL_SET_RST_SCI3 (1<<15)
+#define SYS_CTRL_SET_RST_SPY (1<<16)
+#define SYS_CTRL_SET_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_SET_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_SET_RST_DP_BB (1<<19)
+#define SYS_CTRL_SET_RST_DP_AP (1<<20)
+#define SYS_CTRL_SET_RST_COMREGS (1<<21)
+#define SYS_CTRL_SET_RST_COMREGS_AP (1<<22)
+#define SYS_CTRL_SET_RST_AP_CLKEN (1<<23)
+#define SYS_CTRL_SET_RST_AP_RST (1<<24)
+#define SYS_CTRL_SET_RST_MEM_CHK (1<<25)
+#define SYS_CTRL_SET_RST_MPMC (1<<26)
+#define SYS_CTRL_SET_RST_SYS_A2A_WD (1<<27)
+#define SYS_CTRL_SET_RST_COMREGS_WD (1<<28)
+#define SYS_CTRL_SET_RST_OUT (1<<30)
+#define SYS_CTRL_SOFT_RST (1<<31)
+#define SYS_CTRL_SET_SYS_RST(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_SET_SYS_RST_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_SET_SYS_RST_SHIFT (0)
+
+//Sys_Rst_Clr
+#define SYS_CTRL_CLR_RST_XCPU (1<<0)
+#define SYS_CTRL_CLR_RST_SYS_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_SYS_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_SYS_AHB2AXI (1<<3)
+#define SYS_CTRL_CLR_RST_SYS_AXI2AHB (1<<4)
+#define SYS_CTRL_CLR_RST_DMA (1<<5)
+#define SYS_CTRL_CLR_RST_TIMER (1<<6)
+#define SYS_CTRL_CLR_RST_TCU (1<<7)
+#define SYS_CTRL_CLR_RST_GPIO (1<<8)
+#define SYS_CTRL_CLR_RST_CFG (1<<9)
+#define SYS_CTRL_CLR_RST_SPI1 (1<<10)
+#define SYS_CTRL_CLR_RST_SPI2 (1<<11)
+#define SYS_CTRL_CLR_RST_RF_SPI (1<<12)
+#define SYS_CTRL_CLR_RST_SCI1 (1<<13)
+#define SYS_CTRL_CLR_RST_SCI2 (1<<14)
+#define SYS_CTRL_CLR_RST_SCI3 (1<<15)
+#define SYS_CTRL_CLR_RST_SPY (1<<16)
+#define SYS_CTRL_CLR_RST_MEM_BRIDGE (1<<17)
+#define SYS_CTRL_CLR_RST_EXT_AHB (1<<18)
+#define SYS_CTRL_CLR_RST_DP_BB (1<<19)
+#define SYS_CTRL_CLR_RST_DP_AP (1<<20)
+#define SYS_CTRL_CLR_RST_COMREGS (1<<21)
+#define SYS_CTRL_CLR_RST_COMREGS_AP (1<<22)
+#define SYS_CTRL_CLR_RST_AP_CLKEN (1<<23)
+#define SYS_CTRL_CLR_RST_AP_RST (1<<24)
+#define SYS_CTRL_CLR_RST_MEM_CHK (1<<25)
+#define SYS_CTRL_CLR_RST_MPMC (1<<26)
+#define SYS_CTRL_CLR_RST_SYS_A2A_WD (1<<27)
+#define SYS_CTRL_CLR_RST_COMREGS_WD (1<<28)
+#define SYS_CTRL_CLR_RST_OUT (1<<30)
+#define SYS_CTRL_CLR_SYS_RST(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_CLR_SYS_RST_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_CLR_SYS_RST_SHIFT (0)
+
+//BB_Rst_Set
+#define SYS_CTRL_SET_RST_BCPU (1<<0)
+#define SYS_CTRL_SET_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_SET_RST_BB_A2A (1<<2)
+#define SYS_CTRL_SET_RST_BB_IFC (1<<3)
+#define SYS_CTRL_SET_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_SET_RST_ITLV (1<<5)
+#define SYS_CTRL_SET_RST_VITERBI (1<<6)
+#define SYS_CTRL_SET_RST_CIPHER (1<<7)
+#define SYS_CTRL_SET_RST_XCOR (1<<8)
+#define SYS_CTRL_SET_RST_COPRO (1<<9)
+#define SYS_CTRL_SET_RST_RF_IF (1<<10)
+#define SYS_CTRL_SET_RST_EXCOR (1<<11)
+#define SYS_CTRL_SET_RST_EVITAC (1<<12)
+#define SYS_CTRL_SET_RST_CORDIC (1<<13)
+#define SYS_CTRL_SET_RST_TCU_BB (1<<14)
+#define SYS_CTRL_SET_RST_BB_DP (1<<15)
+#define SYS_CTRL_SET_RST_BB_ROM (1<<16)
+#define SYS_CTRL_SET_RST_MPMC_BB (1<<17)
+#define SYS_CTRL_SET_RST_BB_FULL (1<<31)
+#define SYS_CTRL_SET_BB_RST(n) (((n)&0x3FFFF)<<0)
+#define SYS_CTRL_SET_BB_RST_MASK (0x3FFFF<<0)
+#define SYS_CTRL_SET_BB_RST_SHIFT (0)
+
+//BB_Rst_Clr
+#define SYS_CTRL_CLR_RST_BCPU (1<<0)
+#define SYS_CTRL_CLR_RST_BB_IRQ (1<<1)
+#define SYS_CTRL_CLR_RST_BB_A2A (1<<2)
+#define SYS_CTRL_CLR_RST_BB_IFC (1<<3)
+#define SYS_CTRL_CLR_RST_BB_SRAM (1<<4)
+#define SYS_CTRL_CLR_RST_ITLV (1<<5)
+#define SYS_CTRL_CLR_RST_VITERBI (1<<6)
+#define SYS_CTRL_CLR_RST_CIPHER (1<<7)
+#define SYS_CTRL_CLR_RST_XCOR (1<<8)
+#define SYS_CTRL_CLR_RST_COPRO (1<<9)
+#define SYS_CTRL_CLR_RST_RF_IF (1<<10)
+#define SYS_CTRL_CLR_RST_EXCOR (1<<11)
+#define SYS_CTRL_CLR_RST_EVITAC (1<<12)
+#define SYS_CTRL_CLR_RST_CORDIC (1<<13)
+#define SYS_CTRL_CLR_RST_TCU_BB (1<<14)
+#define SYS_CTRL_CLR_RST_BB_DP (1<<15)
+#define SYS_CTRL_CLR_RST_BB_ROM (1<<16)
+#define SYS_CTRL_CLR_RST_MPMC_BB (1<<17)
+#define SYS_CTRL_CLR_RST_BB_FULL (1<<31)
+#define SYS_CTRL_CLR_BB_RST(n) (((n)&0x3FFFF)<<0)
+#define SYS_CTRL_CLR_BB_RST_MASK (0x3FFFF<<0)
+#define SYS_CTRL_CLR_BB_RST_SHIFT (0)
+
+//Clk_Sys_Mode
+#define SYS_CTRL_MODE_SYS_XCPU (1<<0)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_XCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_SYS_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_SYS_AMBA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_SYS_AMBA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_SYS_DMA_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_SYS_DMA_MANUAL (1<<5)
+#define SYS_CTRL_MODE_SYS_EBC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_SYS_EBC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH0_MANUAL (1<<7)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH1_MANUAL (1<<8)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH2_MANUAL (1<<9)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_SYS_IFC_CH3_MANUAL (1<<10)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_SYS_IFC_DBG_MANUAL (1<<11)
+#define SYS_CTRL_MODE_SYS_A2A_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_SYS_A2A_MANUAL (1<<12)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_SYS_AXI2AHB_MANUAL (1<<13)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_SYS_AHB2AXI_MANUAL (1<<14)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_SYS_EXT_AHB_MANUAL (1<<15)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_SYS_DEBUG_UART_MANUAL (1<<16)
+#define SYS_CTRL_MODE_SYS_DBGHST_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_SYS_DBGHST_MANUAL (1<<17)
+#define SYS_CTRL_MODE_SYS_A2A_WD_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_SYS_A2A_WD_MANUAL (1<<18)
+#define SYS_CTRL_MODE_SYSD_SCI1_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_SYSD_SCI1_MANUAL (1<<19)
+#define SYS_CTRL_MODE_SYSD_SCI2_AUTOMATIC (0<<20)
+#define SYS_CTRL_MODE_SYSD_SCI2_MANUAL (1<<20)
+#define SYS_CTRL_MODE_SYSD_SCI3_AUTOMATIC (0<<21)
+#define SYS_CTRL_MODE_SYSD_SCI3_MANUAL (1<<21)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_AUTOMATIC (0<<22)
+#define SYS_CTRL_MODE_SYSD_RF_SPI_MANUAL (1<<22)
+#define SYS_CTRL_MODE_SYSD_OSC_AUTOMATIC (0<<23)
+#define SYS_CTRL_MODE_SYSD_OSC_MANUAL (1<<23)
+#define SYS_CTRL_MODE_CLK_SYS(n) (((n)&0x7FFFFF)<<1)
+#define SYS_CTRL_MODE_CLK_SYS_MASK (0x7FFFFF<<1)
+#define SYS_CTRL_MODE_CLK_SYS_SHIFT (1)
+
+//Clk_Sys_Enable
+#define SYS_CTRL_ENABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_ENABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_ENABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_ENABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_ENABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_ENABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_ENABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_ENABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_ENABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_ENABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_ENABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_ENABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_ENABLE_SYS_A2A_WD (1<<18)
+#define SYS_CTRL_ENABLE_SYSD_SCI1 (1<<19)
+#define SYS_CTRL_ENABLE_SYSD_SCI2 (1<<20)
+#define SYS_CTRL_ENABLE_SYSD_SCI3 (1<<21)
+#define SYS_CTRL_ENABLE_SYSD_RF_SPI (1<<22)
+#define SYS_CTRL_ENABLE_SYSD_OSC (1<<23)
+#define SYS_CTRL_ENABLE_SYS_GPIO (1<<24)
+#define SYS_CTRL_ENABLE_SYS_IRQ (1<<25)
+#define SYS_CTRL_ENABLE_SYS_TCU (1<<26)
+#define SYS_CTRL_ENABLE_SYS_TIMER (1<<27)
+#define SYS_CTRL_ENABLE_SYS_COM_REGS (1<<28)
+#define SYS_CTRL_ENABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Sys_Disable
+#define SYS_CTRL_DISABLE_SYS_XCPU (1<<0)
+#define SYS_CTRL_DISABLE_SYS_XCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_SYS_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_SYS_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_SYS_AMBA (1<<4)
+#define SYS_CTRL_DISABLE_SYS_DMA (1<<5)
+#define SYS_CTRL_DISABLE_SYS_EBC (1<<6)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH0 (1<<7)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH1 (1<<8)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH2 (1<<9)
+#define SYS_CTRL_DISABLE_SYS_IFC_CH3 (1<<10)
+#define SYS_CTRL_DISABLE_SYS_IFC_DBG (1<<11)
+#define SYS_CTRL_DISABLE_SYS_A2A (1<<12)
+#define SYS_CTRL_DISABLE_SYS_AXI2AHB (1<<13)
+#define SYS_CTRL_DISABLE_SYS_AHB2AXI (1<<14)
+#define SYS_CTRL_DISABLE_SYS_EXT_AHB (1<<15)
+#define SYS_CTRL_DISABLE_SYS_DEBUG_UART (1<<16)
+#define SYS_CTRL_DISABLE_SYS_DBGHST (1<<17)
+#define SYS_CTRL_DISABLE_SYS_A2A_WD (1<<18)
+#define SYS_CTRL_DISABLE_SYSD_SCI1 (1<<19)
+#define SYS_CTRL_DISABLE_SYSD_SCI2 (1<<20)
+#define SYS_CTRL_DISABLE_SYSD_SCI3 (1<<21)
+#define SYS_CTRL_DISABLE_SYSD_RF_SPI (1<<22)
+#define SYS_CTRL_DISABLE_SYSD_OSC (1<<23)
+#define SYS_CTRL_DISABLE_SYS_GPIO (1<<24)
+#define SYS_CTRL_DISABLE_SYS_IRQ (1<<25)
+#define SYS_CTRL_DISABLE_SYS_TCU (1<<26)
+#define SYS_CTRL_DISABLE_SYS_TIMER (1<<27)
+#define SYS_CTRL_DISABLE_SYS_COM_REGS (1<<28)
+#define SYS_CTRL_DISABLE_CLK_SYS(n) (((n)&0x1FFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_MASK (0x1FFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS_SHIFT (0)
+
+//Clk_Per_Mode
+#define SYS_CTRL_MODE_PERD_SPI1_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_PERD_SPI1_MANUAL (1<<0)
+#define SYS_CTRL_MODE_PERD_SPI2_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_PERD_SPI2_MANUAL (1<<1)
+#define SYS_CTRL_MODE_CLK_PER(n) (((n)&3)<<0)
+#define SYS_CTRL_MODE_CLK_PER_MASK (3<<0)
+#define SYS_CTRL_MODE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Enable
+#define SYS_CTRL_ENABLE_PERD_SPI1 (1<<0)
+#define SYS_CTRL_ENABLE_PERD_SPI2 (1<<1)
+#define SYS_CTRL_ENABLE_PER_SPY (1<<2)
+#define SYS_CTRL_ENABLE_PER_TEST (1<<3)
+#define SYS_CTRL_ENABLE_CLK_PER(n) (((n)&15)<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_MASK (15<<0)
+#define SYS_CTRL_ENABLE_CLK_PER_SHIFT (0)
+
+//Clk_Per_Disable
+#define SYS_CTRL_DISABLE_PERD_SPI1 (1<<0)
+#define SYS_CTRL_DISABLE_PERD_SPI2 (1<<1)
+#define SYS_CTRL_DISABLE_PER_SPY (1<<2)
+#define SYS_CTRL_DISABLE_PER_TEST (1<<3)
+#define SYS_CTRL_DISABLE_CLK_PER(n) (((n)&15)<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_MASK (15<<0)
+#define SYS_CTRL_DISABLE_CLK_PER_SHIFT (0)
+
+//Clk_BB_Mode
+#define SYS_CTRL_MODE_BB_BCPU (1<<0)
+#define SYS_CTRL_MODE_BB_BCPU_INT_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_BB_BCPU_INT_MANUAL (1<<1)
+#define SYS_CTRL_MODE_BB_AMBA_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_BB_AMBA_MANUAL (1<<2)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_BB_PCLK_CONF_MANUAL (1<<3)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_BB_PCLK_DATA_MANUAL (1<<4)
+#define SYS_CTRL_MODE_BB_EXCOR_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_BB_EXCOR_MANUAL (1<<5)
+#define SYS_CTRL_MODE_BB_IFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_MODE_BB_IFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_BB_IFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_MODE_BB_SRAM_AUTOMATIC (0<<8)
+#define SYS_CTRL_MODE_BB_SRAM_MANUAL (1<<8)
+#define SYS_CTRL_MODE_BB_A2A_AUTOMATIC (0<<9)
+#define SYS_CTRL_MODE_BB_A2A_MANUAL (1<<9)
+#define SYS_CTRL_MODE_BB_ITLV_AUTOMATIC (0<<10)
+#define SYS_CTRL_MODE_BB_ITLV_MANUAL (1<<10)
+#define SYS_CTRL_MODE_BB_VITERBI_AUTOMATIC (0<<11)
+#define SYS_CTRL_MODE_BB_VITERBI_MANUAL (1<<11)
+#define SYS_CTRL_MODE_BB_CIPHER_AUTOMATIC (0<<12)
+#define SYS_CTRL_MODE_BB_CIPHER_MANUAL (1<<12)
+#define SYS_CTRL_MODE_BB_RF_IF_AUTOMATIC (0<<13)
+#define SYS_CTRL_MODE_BB_RF_IF_MANUAL (1<<13)
+#define SYS_CTRL_MODE_BB_COPRO_AUTOMATIC (0<<14)
+#define SYS_CTRL_MODE_BB_COPRO_MANUAL (1<<14)
+#define SYS_CTRL_MODE_BB_CP2_REG_AUTOMATIC (0<<15)
+#define SYS_CTRL_MODE_BB_CP2_REG_MANUAL (1<<15)
+#define SYS_CTRL_MODE_BB_XCOR_AUTOMATIC (0<<16)
+#define SYS_CTRL_MODE_BB_XCOR_MANUAL (1<<16)
+#define SYS_CTRL_MODE_BB_EVITAC_AUTOMATIC (0<<17)
+#define SYS_CTRL_MODE_BB_EVITAC_MANUAL (1<<17)
+#define SYS_CTRL_MODE_BB_ROM_AUTOMATIC (0<<18)
+#define SYS_CTRL_MODE_BB_ROM_MANUAL (1<<18)
+#define SYS_CTRL_MODE_BB_MPMC_AUTOMATIC (0<<19)
+#define SYS_CTRL_MODE_BB_MPMC_MANUAL (1<<19)
+#define SYS_CTRL_MODE_CLK_BB(n) (((n)&0x7FFFF)<<1)
+#define SYS_CTRL_MODE_CLK_BB_MASK (0x7FFFF<<1)
+#define SYS_CTRL_MODE_CLK_BB_SHIFT (1)
+
+//Clk_BB_Enable
+#define SYS_CTRL_ENABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_ENABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_ENABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_ENABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_ENABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_ENABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_ENABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_ENABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_ENABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_ENABLE_BB_A2A (1<<9)
+#define SYS_CTRL_ENABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_ENABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_ENABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_ENABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_ENABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_ENABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_ENABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_ENABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_ENABLE_BB_ROM (1<<18)
+#define SYS_CTRL_ENABLE_BB_MPMC (1<<19)
+#define SYS_CTRL_ENABLE_BB_IRQ (1<<20)
+#define SYS_CTRL_ENABLE_BB_COM_REGS (1<<21)
+#define SYS_CTRL_ENABLE_BB_CORDIC (1<<22)
+#define SYS_CTRL_ENABLE_BB_DP (1<<23)
+#define SYS_CTRL_ENABLE_CLK_BB(n) (((n)&0xFFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_MASK (0xFFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_BB_SHIFT (0)
+
+//Clk_BB_Disable
+#define SYS_CTRL_DISABLE_BB_BCPU (1<<0)
+#define SYS_CTRL_DISABLE_BB_BCPU_INT (1<<1)
+#define SYS_CTRL_DISABLE_BB_AMBA (1<<2)
+#define SYS_CTRL_DISABLE_BB_PCLK_CONF (1<<3)
+#define SYS_CTRL_DISABLE_BB_PCLK_DATA (1<<4)
+#define SYS_CTRL_DISABLE_BB_EXCOR (1<<5)
+#define SYS_CTRL_DISABLE_BB_IFC_CH2 (1<<6)
+#define SYS_CTRL_DISABLE_BB_IFC_CH3 (1<<7)
+#define SYS_CTRL_DISABLE_BB_SRAM (1<<8)
+#define SYS_CTRL_DISABLE_BB_A2A (1<<9)
+#define SYS_CTRL_DISABLE_BB_ITLV (1<<10)
+#define SYS_CTRL_DISABLE_BB_VITERBI (1<<11)
+#define SYS_CTRL_DISABLE_BB_CIPHER (1<<12)
+#define SYS_CTRL_DISABLE_BB_RF_IF (1<<13)
+#define SYS_CTRL_DISABLE_BB_COPRO (1<<14)
+#define SYS_CTRL_DISABLE_BB_CP2_REG (1<<15)
+#define SYS_CTRL_DISABLE_BB_XCOR (1<<16)
+#define SYS_CTRL_DISABLE_BB_EVITAC (1<<17)
+#define SYS_CTRL_DISABLE_BB_ROM (1<<18)
+#define SYS_CTRL_DISABLE_BB_MPMC (1<<19)
+#define SYS_CTRL_DISABLE_BB_IRQ (1<<20)
+#define SYS_CTRL_DISABLE_BB_COM_REGS (1<<21)
+#define SYS_CTRL_DISABLE_BB_CORDIC (1<<22)
+#define SYS_CTRL_DISABLE_BB_DP (1<<23)
+#define SYS_CTRL_DISABLE_CLK_BB(n) (((n)&0xFFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_MASK (0xFFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_BB_SHIFT (0)
+
+//Clk_Other_Mode
+#define SYS_CTRL_MODE_OC_DEBUG_UART_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_OC_DEBUG_UART_MANUAL (1<<0)
+#define SYS_CTRL_MODE_OC_RF_RX_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_OC_RF_RX_MANUAL (1<<1)
+#define SYS_CTRL_MODE_OC_RF_TX_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_OC_RF_TX_MANUAL (1<<2)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_OC_MEM_BRIDGE_MANUAL (1<<3)
+#define SYS_CTRL_MODE_CLK_OTHER(n) (((n)&15)<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_MASK (15<<0)
+#define SYS_CTRL_MODE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Enable
+#define SYS_CTRL_ENABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_ENABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_ENABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_ENABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_ENABLE_OC_LPS (1<<4)
+#define SYS_CTRL_ENABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_ENABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_ENABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_ENABLE_OC_TCU (1<<8)
+#define SYS_CTRL_ENABLE_OC_WD_CHIP (1<<9)
+#define SYS_CTRL_ENABLE_OC_WD_ADC (1<<10)
+#define SYS_CTRL_ENABLE_OC_WD_TURBO (1<<11)
+#define SYS_CTRL_ENABLE_OC_WD_OSC (1<<12)
+#define SYS_CTRL_ENABLE_OC_MPMC (1<<13)
+#define SYS_CTRL_ENABLE_CLK_OTHER(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_MASK (0x3FFF<<0)
+#define SYS_CTRL_ENABLE_CLK_OTHER_SHIFT (0)
+
+//Clk_Other_Disable
+#define SYS_CTRL_DISABLE_OC_DEBUG_UART (1<<0)
+#define SYS_CTRL_DISABLE_OC_RF_RX (1<<1)
+#define SYS_CTRL_DISABLE_OC_RF_TX (1<<2)
+#define SYS_CTRL_DISABLE_OC_MEM_BRIDGE (1<<3)
+#define SYS_CTRL_DISABLE_OC_LPS (1<<4)
+#define SYS_CTRL_DISABLE_OC_GPIO (1<<5)
+#define SYS_CTRL_DISABLE_OC_CLK_OUT (1<<6)
+#define SYS_CTRL_DISABLE_OC_MEM_CLK_OUT (1<<7)
+#define SYS_CTRL_DISABLE_OC_TCU (1<<8)
+#define SYS_CTRL_DISABLE_OC_WD_CHIP (1<<9)
+#define SYS_CTRL_DISABLE_OC_WD_ADC (1<<10)
+#define SYS_CTRL_DISABLE_OC_WD_TURBO (1<<11)
+#define SYS_CTRL_DISABLE_OC_WD_OSC (1<<12)
+#define SYS_CTRL_DISABLE_OC_MPMC (1<<13)
+#define SYS_CTRL_DISABLE_CLK_OTHER(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_MASK (0x3FFF<<0)
+#define SYS_CTRL_DISABLE_CLK_OTHER_SHIFT (0)
+
+//Pll_Ctrl
+#define SYS_CTRL_PLL_ENABLE (1<<0)
+#define SYS_CTRL_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_PLL_BYPASS (1<<8)
+#define SYS_CTRL_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_XP_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_XP_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_XP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_TCU_13M_L_26M (1<<5)
+#define SYS_CTRL_TCU_13M_L_13M (0<<5)
+#define SYS_CTRL_PLL_DISABLE_LPS_DISABLE (1<<6)
+#define SYS_CTRL_PLL_DISABLE_LPS_ENABLE (0<<6)
+#define SYS_CTRL_DIGEN_H_ENABLE (1<<7)
+#define SYS_CTRL_DIGEN_H_DISABLE (0<<7)
+#define SYS_CTRL_RF_DETECTED_OK (1<<20)
+#define SYS_CTRL_RF_DETECTED_NO (0<<20)
+#define SYS_CTRL_RF_DETECT_BYPASS (1<<21)
+#define SYS_CTRL_RF_DETECT_RESET (1<<22)
+#define SYS_CTRL_RF_SELECTED_L (1<<23)
+#define SYS_CTRL_PLL_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_MASK (1<<24)
+#define SYS_CTRL_PLL_LOCKED_SHIFT (24)
+#define SYS_CTRL_PLL_LOCKED_LOCKED (1<<24)
+#define SYS_CTRL_PLL_LOCKED_NOT_LOCKED (0<<24)
+#define SYS_CTRL_PLL_BYPASS_LOCK (1<<27)
+#define SYS_CTRL_FAST_SELECTED_L (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_MASK (1<<31)
+#define SYS_CTRL_FAST_SELECTED_L_SHIFT (31)
+
+//Cfg_Clk_Sys
+#define SYS_CTRL_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_FREQ_MASK (15<<0)
+#define SYS_CTRL_FREQ_SHIFT (0)
+#define SYS_CTRL_FREQ_312M (13<<0)
+#define SYS_CTRL_FREQ_250M (12<<0)
+#define SYS_CTRL_FREQ_208M (11<<0)
+#define SYS_CTRL_FREQ_178M (10<<0)
+#define SYS_CTRL_FREQ_156M (9<<0)
+#define SYS_CTRL_FREQ_139M (8<<0)
+#define SYS_CTRL_FREQ_125M (7<<0)
+#define SYS_CTRL_FREQ_113M (6<<0)
+#define SYS_CTRL_FREQ_104M (5<<0)
+#define SYS_CTRL_FREQ_89M (4<<0)
+#define SYS_CTRL_FREQ_78M (3<<0)
+#define SYS_CTRL_FREQ_52M (2<<0)
+#define SYS_CTRL_FREQ_39M (1<<0)
+#define SYS_CTRL_FREQ_26M (0<<0)
+#define SYS_CTRL_FORCE_DIV_UPDATE (1<<4)
+#define SYS_CTRL_REQ_DIV_UPDATE (1<<8)
+
+//Cfg_Clk_Mem_Bridge
+#define SYS_CTRL_MEM_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MEM_FREQ_MASK (15<<0)
+#define SYS_CTRL_MEM_FREQ_SHIFT (0)
+#define SYS_CTRL_MEM_FREQ_312M (13<<0)
+#define SYS_CTRL_MEM_FREQ_250M (12<<0)
+#define SYS_CTRL_MEM_FREQ_208M (11<<0)
+#define SYS_CTRL_MEM_FREQ_178M (10<<0)
+#define SYS_CTRL_MEM_FREQ_156M (9<<0)
+#define SYS_CTRL_MEM_FREQ_139M (8<<0)
+#define SYS_CTRL_MEM_FREQ_125M (7<<0)
+#define SYS_CTRL_MEM_FREQ_113M (6<<0)
+#define SYS_CTRL_MEM_FREQ_104M (5<<0)
+#define SYS_CTRL_MEM_FREQ_89M (4<<0)
+#define SYS_CTRL_MEM_FREQ_78M (3<<0)
+#define SYS_CTRL_MEM_FREQ_52M (2<<0)
+#define SYS_CTRL_MEM_FREQ_39M (1<<0)
+#define SYS_CTRL_MEM_FREQ_26M (0<<0)
+#define SYS_CTRL_DDR_MODE_EN_NORMAL_MODE (0<<4)
+#define SYS_CTRL_DDR_MODE_EN_DDR_MODE (1<<4)
+#define SYS_CTRL_DDR_FAST_CLK_POL_INVERT (1<<5)
+#define SYS_CTRL_DDR_FAST_CLK_POL_NORMAL (0<<5)
+#define SYS_CTRL_DDR_DQSL_O(n) (((n)&31)<<6)
+#define SYS_CTRL_DDR_DQSU_O(n) (((n)&31)<<11)
+#define SYS_CTRL_DDR_DQS_OEN(n) (((n)&31)<<16)
+#define SYS_CTRL_DDR_DQSL_I(n) (((n)&31)<<21)
+#define SYS_CTRL_DDR_DQSU_I(n) (((n)&31)<<26)
+#define SYS_CTRL_MEM_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Out
+#define SYS_CTRL_CLKOUT_DIVIDER(n) (((n)&31)<<0)
+#define SYS_CTRL_CLKOUT_SEL_OSC (0<<8)
+#define SYS_CTRL_CLKOUT_SEL_RF (1<<8)
+#define SYS_CTRL_CLKOUT_SEL_DIVIDER (2<<8)
+
+//Cfg_Clk_Host_Uart
+#define SYS_CTRL_HOST_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_HOST_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_HOST_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_HOST_UART_SEL_PLL_PLL (1<<12)
+
+//Cfg_Clk_Auxclk
+#define SYS_CTRL_AUXCLK_EN_DISABLE (0<<0)
+#define SYS_CTRL_AUXCLK_EN_ENABLE (1<<0)
+
+//Cfg_AHB
+#define SYS_CTRL_SYS_NEW_ARBITRATION_ENABLE (1<<0)
+#define SYS_CTRL_SYS_NEW_ARBITRATION_DISABLE (0<<0)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_ENABLE (1<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_DMA_DISABLE (0<<1)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_ENABLE (1<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_XCPU_DISABLE (0<<2)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_ENABLE (1<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_DISABLE (0<<3)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_ENABLE (1<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_IFC_DISABLE (0<<4)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_ENABLE (1<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AXI2AHB_DISABLE (0<<5)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_WD_ENABLE (1<<6)
+#define SYS_CTRL_ENABLE_SYS_MID_AHB2AHB_WD_DISABLE (0<<6)
+#define SYS_CTRL_BB_NEW_ARBITRATION_ENABLE (1<<16)
+#define SYS_CTRL_BB_NEW_ARBITRATION_DISABLE (0<<16)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_ENABLE (1<<17)
+#define SYS_CTRL_ENABLE_BB_MID_IFC_DISABLE (0<<17)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_ENABLE (1<<18)
+#define SYS_CTRL_ENABLE_BB_MID_BCPU_DISABLE (0<<18)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_ENABLE (1<<19)
+#define SYS_CTRL_ENABLE_BB_MID_AHB2AHB_DISABLE (0<<19)
+#define SYS_CTRL_SYS_ENABLE(n) (((n)&0x3F)<<1)
+#define SYS_CTRL_SYS_ENABLE_MASK (0x3F<<1)
+#define SYS_CTRL_SYS_ENABLE_SHIFT (1)
+#define SYS_CTRL_BB_ENABLE(n) (((n)&7)<<17)
+#define SYS_CTRL_BB_ENABLE_MASK (7<<17)
+#define SYS_CTRL_BB_ENABLE_SHIFT (17)
+
+//Ctrl_AHB
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_NORMAL (1<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_DMA_FORCE (0<<0)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_NORMAL (1<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_XCPU_FORCE (0<<1)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_NORMAL (1<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_FORCE (0<<2)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_NORMAL (1<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_IFC_FORCE (0<<3)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_NORMAL (1<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AXI2AHB_FORCE (0<<4)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_WD_NORMAL (1<<5)
+#define SYS_CTRL_SPLIT_SYS_MID_AHB2AHB_WD_FORCE (0<<5)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_NORMAL (1<<16)
+#define SYS_CTRL_SPLIT_BB_MID_IFC_FORCE (0<<16)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_NORMAL (1<<17)
+#define SYS_CTRL_SPLIT_BB_MID_BCPU_FORCE (0<<17)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_NORMAL (1<<18)
+#define SYS_CTRL_SPLIT_BB_MID_AHB2AHB_FORCE (0<<18)
+#define SYS_CTRL_SYS_FORCE_HSPLIT(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_MASK (0x3F<<0)
+#define SYS_CTRL_SYS_FORCE_HSPLIT_SHIFT (0)
+#define SYS_CTRL_BB_FORCE_HSPLIT(n) (((n)&7)<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_MASK (7<<16)
+#define SYS_CTRL_BB_FORCE_HSPLIT_SHIFT (16)
+
+//XCpu_Dbg_BKP
+#define SYS_CTRL_BKPT_EN (1<<0)
+#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+#define SYS_CTRL_BKPT_MODE_I (0<<4)
+#define SYS_CTRL_BKPT_MODE_R (1<<4)
+#define SYS_CTRL_BKPT_MODE_W (2<<4)
+#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+#define SYS_CTRL_STALLED (1<<8)
+
+//XCpu_Dbg_Addr
+#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//BCpu_Dbg_BKP
+//#define SYS_CTRL_BKPT_EN (1<<0)
+//#define SYS_CTRL_BKPT_MODE(n) (((n)&3)<<4)
+//#define SYS_CTRL_BKPT_MODE_I (0<<4)
+//#define SYS_CTRL_BKPT_MODE_R (1<<4)
+//#define SYS_CTRL_BKPT_MODE_W (2<<4)
+//#define SYS_CTRL_BKPT_MODE_RW (3<<4)
+//#define SYS_CTRL_STALLED (1<<8)
+
+//BCpu_Dbg_Addr
+//#define SYS_CTRL_BREAKPOINT_ADDRESS(n) (((n)&0x3FFFFFF)<<0)
+
+//Cfg_Cpus_Cache_Ram_Disable
+#define SYS_CTRL_XCPU_USE_MODE (1<<0)
+#define SYS_CTRL_XCPU_CLK_OFF_MODE (1<<1)
+#define SYS_CTRL_BCPU_USE_MODE (1<<16)
+#define SYS_CTRL_BCPU_CLK_OFF_MODE (1<<17)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_MASK (3<<0)
+#define SYS_CTRL_XCPU_CACHE_RAM_DISABLE_SHIFT (0)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE(n) (((n)&3)<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_MASK (3<<16)
+#define SYS_CTRL_BCPU_CACHE_RAM_DISABLE_SHIFT (16)
+
+//Reset_Cause
+#define SYS_CTRL_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_APSOFT_RESET_HAPPENED (1<<1)
+#define SYS_CTRL_APSOFT_RESET_NO (0<<1)
+#define SYS_CTRL_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_MEMCHECKDONE_MASK (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_SHIFT (7)
+#define SYS_CTRL_MEMCHECKDONE_DONE (1<<7)
+#define SYS_CTRL_MEMCHECKDONE_RUNNING (0<<7)
+#define SYS_CTRL_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_FONCTIONAL_TEST_MODE (1<<31)
+
+//WakeUp
+#define SYS_CTRL_FORCE_WAKEUP (1<<0)
+
+//AP_Ctrl
+#define SYS_CTRL_AP_INT_STATUS (1<<0)
+#define SYS_CTRL_AP_INT_MASK (1<<16)
+#define SYS_CTRL_AP_DEEPSLEEP_EN (1<<24)
+
+//Ignore_Charger
+#define SYS_CTRL_IGNORE_CHARGER (1<<0)
+
+//Clk_SYS2_Mode
+#define SYS_CTRL_MODE_SYS_MPMC_AUTOMATIC (0<<0)
+#define SYS_CTRL_MODE_SYS_MPMC_MANUAL (1<<0)
+#define SYS_CTRL_MODE_SYS_MPMCREG_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_SYS_MPMCREG_MANUAL (1<<1)
+#define SYS_CTRL_MODE_CLK_SYS2(n) (((n)&3)<<0)
+#define SYS_CTRL_MODE_CLK_SYS2_MASK (3<<0)
+#define SYS_CTRL_MODE_CLK_SYS2_SHIFT (0)
+
+//Clk_SYS2_Enable
+#define SYS_CTRL_ENABLE_SYS_MPMC (1<<0)
+#define SYS_CTRL_ENABLE_SYS_MPMCREG (1<<1)
+#define SYS_CTRL_ENABLE_SYS_DP_BB (1<<2)
+#define SYS_CTRL_ENABLE_SYS_DP_WD (1<<3)
+#define SYS_CTRL_ENABLE_SYS_DP_AP (1<<4)
+#define SYS_CTRL_ENABLE_CLK_SYS2(n) (((n)&31)<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS2_MASK (31<<0)
+#define SYS_CTRL_ENABLE_CLK_SYS2_SHIFT (0)
+
+//Clk_SYS2_Disable
+#define SYS_CTRL_DISABLE_SYS_MPMC (1<<0)
+#define SYS_CTRL_DISABLE_SYS_MPMCREG (1<<1)
+#define SYS_CTRL_DISABLE_SYS_DP_BB (1<<2)
+#define SYS_CTRL_DISABLE_SYS_DP_WD (1<<3)
+#define SYS_CTRL_DISABLE_SYS_DP_AP (1<<4)
+#define SYS_CTRL_DISABLE_CLK_SYS2(n) (((n)&31)<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS2_MASK (31<<0)
+#define SYS_CTRL_DISABLE_CLK_SYS2_SHIFT (0)
+
+//WD_Pll_Ctrl
+#define SYS_CTRL_WD_PLL_ENABLE (1<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_WD_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_WD_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_WD_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_WD_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_WD_PLL_BYPASS (1<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_WD_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_WD_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_WD_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_PLL_WD_CFG(n) (((n)&4369)<<0)
+#define SYS_CTRL_PLL_WD_CFG_MASK (4369<<0)
+#define SYS_CTRL_PLL_WD_CFG_SHIFT (0)
+
+//WD_Sel_Clock
+#define SYS_CTRL_WD_CLK_ADC_POL_INVERT (1<<0)
+#define SYS_CTRL_WD_CLK_ADC_POL_NORMAL (0<<0)
+#define SYS_CTRL_WD_SYS_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_WD_SYS_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_WD_PLL_BYPASS_LOCK (1<<8)
+#define SYS_CTRL_WD_PLL_LOCKED (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_MASK (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_SHIFT (20)
+#define SYS_CTRL_WD_PLL_LOCKED_LOCKED (1<<20)
+#define SYS_CTRL_WD_PLL_LOCKED_NOT_LOCKED (0<<20)
+#define SYS_CTRL_WD_FAST_SELECTED_L (1<<24)
+#define SYS_CTRL_WD_FAST_SELECTED_L_MASK (1<<24)
+#define SYS_CTRL_WD_FAST_SELECTED_L_SHIFT (24)
+
+//WD_Rst_Set
+#define SYS_CTRL_SET_WD_RST_WCPU (1<<0)
+#define SYS_CTRL_SET_WD_RST_IRQ (1<<1)
+#define SYS_CTRL_SET_WD_RST_DP (1<<2)
+#define SYS_CTRL_SET_WD_RST_MODEM (1<<3)
+#define SYS_CTRL_SET_WD_RST_A2A (1<<4)
+#define SYS_CTRL_SET_WD_RST_IFC (1<<5)
+#define SYS_CTRL_SET_WD_RST_SDMA (1<<6)
+#define SYS_CTRL_SET_WD_RST_SLPC (1<<7)
+#define SYS_CTRL_SET_WD_RST_SLPT (1<<8)
+#define SYS_CTRL_SET_WD_RST_SPI1 (1<<9)
+#define SYS_CTRL_SET_WD_RST_SPI2 (1<<10)
+#define SYS_CTRL_SET_WD_RST_RFIF (1<<11)
+#define SYS_CTRL_SET_WD_RST_COMREGS (1<<12)
+#define SYS_CTRL_SET_WD_RST_TIMER (1<<13)
+#define SYS_CTRL_SET_WD_RST_MPMC (1<<14)
+#define SYS_CTRL_SET_WD_RST_FULL (1<<31)
+#define SYS_CTRL_SET_WD_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_SET_WD_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_SET_WD_RST_SHIFT (0)
+
+//WD_Rst_Clr
+#define SYS_CTRL_CLR_WD_RST_WCPU (1<<0)
+#define SYS_CTRL_CLR_WD_RST_IRQ (1<<1)
+#define SYS_CTRL_CLR_WD_RST_DP (1<<2)
+#define SYS_CTRL_CLR_WD_RST_MODEM (1<<3)
+#define SYS_CTRL_CLR_WD_RST_A2A (1<<4)
+#define SYS_CTRL_CLR_WD_RST_IFC (1<<5)
+#define SYS_CTRL_CLR_WD_RST_SDMA (1<<6)
+#define SYS_CTRL_CLR_WD_RST_SLPC (1<<7)
+#define SYS_CTRL_CLR_WD_RST_SLPT (1<<8)
+#define SYS_CTRL_CLR_WD_RST_SPI1 (1<<9)
+#define SYS_CTRL_CLR_WD_RST_SPI2 (1<<10)
+#define SYS_CTRL_CLR_WD_RST_RFIF (1<<11)
+#define SYS_CTRL_CLR_WD_RST_COMREGS (1<<12)
+#define SYS_CTRL_CLR_WD_RST_TIMER (1<<13)
+#define SYS_CTRL_CLR_WD_RST_MPMC (1<<14)
+#define SYS_CTRL_CLR_WD_RST_FULL (1<<31)
+#define SYS_CTRL_CLR_WD_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_CLR_WD_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_CLR_WD_RST_SHIFT (0)
+
+//AP_Rst_Set
+#define SYS_CTRL_SET_AP_RST_0 (1<<0)
+#define SYS_CTRL_SET_AP_RST_1 (1<<1)
+#define SYS_CTRL_SET_AP_RST_2 (1<<2)
+#define SYS_CTRL_SET_AP_RST_3 (1<<3)
+#define SYS_CTRL_SET_AP_RST_4 (1<<4)
+#define SYS_CTRL_SET_AP_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_SET_AP_RST_MASK (31<<0)
+#define SYS_CTRL_SET_AP_RST_SHIFT (0)
+
+//AP_Rst_Clr
+#define SYS_CTRL_CLR_AP_RST_0 (1<<0)
+#define SYS_CTRL_CLR_AP_RST_1 (1<<1)
+#define SYS_CTRL_CLR_AP_RST_2 (1<<2)
+#define SYS_CTRL_CLR_AP_RST_3 (1<<3)
+#define SYS_CTRL_CLR_AP_RST_4 (1<<4)
+#define SYS_CTRL_CLR_AP_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_CLR_AP_RST_MASK (31<<0)
+#define SYS_CTRL_CLR_AP_RST_SHIFT (0)
+
+//Clk_WD_Mode
+#define SYS_CTRL_MODE_WD_WCPU (1<<0)
+#define SYS_CTRL_MODE_WD_AMBA_AUTOMATIC (0<<1)
+#define SYS_CTRL_MODE_WD_AMBA_MANUAL (1<<1)
+#define SYS_CTRL_MODE_WD_PCLK_CONF_AUTOMATIC (0<<2)
+#define SYS_CTRL_MODE_WD_PCLK_CONF_MANUAL (1<<2)
+#define SYS_CTRL_MODE_WD_PCLK_DATA_AUTOMATIC (0<<3)
+#define SYS_CTRL_MODE_WD_PCLK_DATA_MANUAL (1<<3)
+#define SYS_CTRL_MODE_WD_A2A_AUTOMATIC (0<<4)
+#define SYS_CTRL_MODE_WD_A2A_MANUAL (1<<4)
+#define SYS_CTRL_MODE_WD_IFC_CH_SPI_AUTOMATIC (0<<5)
+#define SYS_CTRL_MODE_WD_IFC_CH_SPI_MANUAL (1<<5)
+#define SYS_CTRL_MODE_WD_MPMC_AUTOMATIC (0<<6)
+#define SYS_CTRL_MODE_WD_MPMC_MANUAL (1<<6)
+#define SYS_CTRL_MODE_WDD_OSC_AUTOMATIC (0<<7)
+#define SYS_CTRL_MODE_WDD_OSC_MANUAL (1<<7)
+#define SYS_CTRL_MODE_CLK_WD(n) (((n)&0x7F)<<1)
+#define SYS_CTRL_MODE_CLK_WD_MASK (0x7F<<1)
+#define SYS_CTRL_MODE_CLK_WD_SHIFT (1)
+
+//Clk_WD_Enable
+#define SYS_CTRL_ENABLE_WD_WCPU (1<<0)
+#define SYS_CTRL_ENABLE_WD_AMBA (1<<1)
+#define SYS_CTRL_ENABLE_WD_PCLK_CONF (1<<2)
+#define SYS_CTRL_ENABLE_WD_PCLK_DATA (1<<3)
+#define SYS_CTRL_ENABLE_WD_A2A (1<<4)
+#define SYS_CTRL_ENABLE_WD_IFC_CH_SPI (1<<5)
+#define SYS_CTRL_ENABLE_WD_MPMC (1<<6)
+#define SYS_CTRL_ENABLE_WDD_OSC (1<<7)
+#define SYS_CTRL_ENABLE_WD_IRQ (1<<8)
+#define SYS_CTRL_ENABLE_WD_AXI (1<<9)
+#define SYS_CTRL_ENABLE_WD_DP (1<<10)
+#define SYS_CTRL_ENABLE_WD_MODEM (1<<11)
+#define SYS_CTRL_ENABLE_WD_COM_REGS (1<<12)
+#define SYS_CTRL_ENABLE_WD_TIMER (1<<13)
+#define SYS_CTRL_ENABLE_WD_SDMA (1<<14)
+#define SYS_CTRL_ENABLE_WD_SLPC (1<<15)
+#define SYS_CTRL_ENABLE_WD_SLPT (1<<16)
+#define SYS_CTRL_ENABLE_WD_SPI1 (1<<17)
+#define SYS_CTRL_ENABLE_WD_SPI2 (1<<18)
+#define SYS_CTRL_ENABLE_WD_RFIF (1<<19)
+#define SYS_CTRL_ENABLE_CLK_WD(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_ENABLE_CLK_WD_MASK (0xFFFFF<<0)
+#define SYS_CTRL_ENABLE_CLK_WD_SHIFT (0)
+
+//Clk_WD_Disable
+#define SYS_CTRL_DISABLE_WD_WCPU (1<<0)
+#define SYS_CTRL_DISABLE_WD_AMBA (1<<1)
+#define SYS_CTRL_DISABLE_WD_PCLK_CONF (1<<2)
+#define SYS_CTRL_DISABLE_WD_PCLK_DATA (1<<3)
+#define SYS_CTRL_DISABLE_WD_A2A (1<<4)
+#define SYS_CTRL_DISABLE_WD_IFC_CH_SPI (1<<5)
+#define SYS_CTRL_DISABLE_WD_MPMC (1<<6)
+#define SYS_CTRL_DISABLE_WDD_OSC (1<<7)
+#define SYS_CTRL_DISABLE_WD_IRQ (1<<8)
+#define SYS_CTRL_DISABLE_WD_AXI (1<<9)
+#define SYS_CTRL_DISABLE_WD_DP (1<<10)
+#define SYS_CTRL_DISABLE_WD_MODEM (1<<11)
+#define SYS_CTRL_DISABLE_WD_COM_REGS (1<<12)
+#define SYS_CTRL_DISABLE_WD_TIMER (1<<13)
+#define SYS_CTRL_DISABLE_WD_SDMA (1<<14)
+#define SYS_CTRL_DISABLE_WD_SLPC (1<<15)
+#define SYS_CTRL_DISABLE_WD_SLPT (1<<16)
+#define SYS_CTRL_DISABLE_WD_SPI1 (1<<17)
+#define SYS_CTRL_DISABLE_WD_SPI2 (1<<18)
+#define SYS_CTRL_DISABLE_WD_RFIF (1<<19)
+#define SYS_CTRL_DISABLE_CLK_WD(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_DISABLE_CLK_WD_MASK (0xFFFFF<<0)
+#define SYS_CTRL_DISABLE_CLK_WD_SHIFT (0)
+
+//Cfg_Clk_MPMC
+#define SYS_CTRL_MPMC_FREQ(n) (((n)&15)<<0)
+#define SYS_CTRL_MPMC_FREQ_MASK (15<<0)
+#define SYS_CTRL_MPMC_FREQ_SHIFT (0)
+#define SYS_CTRL_MPMC_FREQ_312M (13<<0)
+#define SYS_CTRL_MPMC_FREQ_250M (12<<0)
+#define SYS_CTRL_MPMC_FREQ_208M (11<<0)
+#define SYS_CTRL_MPMC_FREQ_178M (10<<0)
+#define SYS_CTRL_MPMC_FREQ_156M (9<<0)
+#define SYS_CTRL_MPMC_FREQ_139M (8<<0)
+#define SYS_CTRL_MPMC_FREQ_125M (7<<0)
+#define SYS_CTRL_MPMC_FREQ_113M (6<<0)
+#define SYS_CTRL_MPMC_FREQ_104M (5<<0)
+#define SYS_CTRL_MPMC_FREQ_89M (4<<0)
+#define SYS_CTRL_MPMC_FREQ_78M (3<<0)
+#define SYS_CTRL_MPMC_FREQ_52M (2<<0)
+#define SYS_CTRL_MPMC_FREQ_39M (1<<0)
+#define SYS_CTRL_MPMC_FREQ_26M (0<<0)
+#define SYS_CTRL_CLK_MPMC_DELAY(n) (((n)&31)<<8)
+#define SYS_CTRL_CLK_MPMC_DELAY_POL (1<<13)
+#define SYS_CTRL_CLK_MPMC_FEEDBACK(n) (((n)&31)<<14)
+#define SYS_CTRL_CLK_MPMC_FEEDBACK_POL (1<<19)
+#define SYS_CTRL_MPMC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_MPMC_DQS
+#define SYS_CTRL_MPMC_DQSL_O(n) (((n)&31)<<0)
+#define SYS_CTRL_MPMC_DQSU_O(n) (((n)&31)<<6)
+#define SYS_CTRL_MPMC_DQS_OEN(n) (((n)&31)<<12)
+#define SYS_CTRL_MPMC_DQSL_I(n) (((n)&31)<<18)
+#define SYS_CTRL_MPMC_DQSU_I(n) (((n)&31)<<24)
+
+//Cfg_Reserve
+#define SYS_CTRL_RESERVE(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AUIFC_CH0_IRQ_MASK (1<<14)
+#define SYS_CTRL_AUIFC_CH1_IRQ_MASK (1<<15)
+#define SYS_CTRL_RESERVE2(n) (((n)&0xFFFF)<<16)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_mdcom.h b/arch/arm/include/asm/arch-rda/reg_mdcom.h
new file mode 100644
index 0000000000..a9223a4f21
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_mdcom.h
@@ -0,0 +1,80 @@
+#ifndef _REG_MDCOM_H_
+#define _REG_MDCOM_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+typedef volatile struct
+{
+ REG32 Snapshot; //0x00000000
+ REG32 Snapshot_Cfg; //0x00000004
+ REG32 Cause; //0x00000008
+ REG32 Mask_Set; //0x0000000C
+ REG32 Mask_Clr; //0x00000010
+ /// If accesses to ItReg_Set and ItReg_Clr registers are done simultaneously
+ /// from both CPUs and affecting the same bits, the priority is given to set
+ /// a bit.
+ REG32 ItReg_Set; //0x00000014
+ /// If accesses to ItReg_Set and ItReg_Clr registers are done simultaneously
+ /// from both CPUs and affecting the same bits, the priority is given to set
+ /// a bit.
+ REG32 ItReg_Clr; //0x00000018
+} HWP_COMREGS_T;
+
+#define hwp_mdComregs ((HWP_COMREGS_T*)(RDA_COMREGS_BASE))
+
+
+//Snapshot
+#define COMREGS_SNAPSHOT(n) (((n)&3)<<0)
+
+//Snapshot_Cfg
+#define COMREGS_SNAPSHOT_CFG_WRAP_2 (2<<0)
+#define COMREGS_SNAPSHOT_CFG_WRAP_3 (3<<0)
+
+//Cause
+#define COMREGS_IRQ0_CAUSE(n) (((n)&0xFF)<<0)
+#define COMREGS_IRQ0_CAUSE_MASK (0xFF<<0)
+#define COMREGS_IRQ0_CAUSE_SHIFT (0)
+#define COMREGS_IRQ1_CAUSE(n) (((n)&0xFF)<<8)
+#define COMREGS_IRQ1_CAUSE_MASK (0xFF<<8)
+#define COMREGS_IRQ1_CAUSE_SHIFT (8)
+
+//Mask_Set
+#define COMREGS_IRQ0_MASK_SET(n) (((n)&0xFF)<<0)
+#define COMREGS_IRQ0_MASK_SET_MASK (0xFF<<0)
+#define COMREGS_IRQ0_MASK_SET_SHIFT (0)
+#define COMREGS_IRQ1_MASK_SET(n) (((n)&0xFF)<<8)
+#define COMREGS_IRQ1_MASK_SET_MASK (0xFF<<8)
+#define COMREGS_IRQ1_MASK_SET_SHIFT (8)
+
+//Mask_Clr
+#define COMREGS_IRQ0_MASK_CLR(n) (((n)&0xFF)<<0)
+#define COMREGS_IRQ0_MASK_CLR_MASK (0xFF<<0)
+#define COMREGS_IRQ0_MASK_CLR_SHIFT (0)
+#define COMREGS_IRQ1_MASK_CLR(n) (((n)&0xFF)<<8)
+#define COMREGS_IRQ1_MASK_CLR_MASK (0xFF<<8)
+#define COMREGS_IRQ1_MASK_CLR_SHIFT (8)
+
+//ItReg_Set
+#define COMREGS_IRQ0_SET(n) (((n)&0xFF)<<0)
+#define COMREGS_IRQ0_SET_MASK (0xFF<<0)
+#define COMREGS_IRQ0_SET_SHIFT (0)
+#define COMREGS_IRQ1_SET(n) (((n)&0xFF)<<8)
+#define COMREGS_IRQ1_SET_MASK (0xFF<<8)
+#define COMREGS_IRQ1_SET_SHIFT (8)
+#define COMREGS_IRQ(n) (((n)&0xFFFF)<<0)
+#define COMREGS_IRQ_MASK (0xFFFF<<0)
+#define COMREGS_IRQ_SHIFT (0)
+
+//ItReg_Clr
+#define COMREGS_IRQ0_CLR(n) (((n)&0xFF)<<0)
+#define COMREGS_IRQ0_CLR_MASK (0xFF<<0)
+#define COMREGS_IRQ0_CLR_SHIFT (0)
+#define COMREGS_IRQ1_CLR(n) (((n)&0xFF)<<8)
+#define COMREGS_IRQ1_CLR_MASK (0xFF<<8)
+#define COMREGS_IRQ1_CLR_SHIFT (8)
+//#define COMREGS_IRQ(n) (((n)&0xFFFF)<<0)
+//#define COMREGS_IRQ_MASK (0xFFFF<<0)
+//#define COMREGS_IRQ_SHIFT (0)
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_mmc.h b/arch/arm/include/asm/arch-rda/reg_mmc.h
new file mode 100644
index 0000000000..87d8e3e3c3
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_mmc.h
@@ -0,0 +1,245 @@
+#ifndef _REG_SDMMC_H_
+#define _REG_SDMMC_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// ============================================================================
+// SDMMC_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 apbi_ctrl_sdmmc; //0x00000000
+ REG32 Reserved_00000004; //0x00000004
+ REG32 APBI_FIFO_TxRx; //0x00000008
+ REG32 Reserved_0000000C[509]; //0x0000000C
+ REG32 SDMMC_CONFIG; //0x00000800
+ REG32 SDMMC_STATUS; //0x00000804
+ REG32 SDMMC_CMD_INDEX; //0x00000808
+ REG32 SDMMC_CMD_ARG; //0x0000080C
+ REG32 SDMMC_RESP_INDEX; //0x00000810
+ REG32 SDMMC_RESP_ARG3; //0x00000814
+ REG32 SDMMC_RESP_ARG2; //0x00000818
+ REG32 SDMMC_RESP_ARG1; //0x0000081C
+ REG32 SDMMC_RESP_ARG0; //0x00000820
+ REG32 SDMMC_DATA_WIDTH; //0x00000824
+ REG32 SDMMC_BLOCK_SIZE; //0x00000828
+ REG32 SDMMC_BLOCK_CNT; //0x0000082C
+ REG32 SDMMC_INT_STATUS; //0x00000830
+ REG32 SDMMC_INT_MASK; //0x00000834
+ REG32 SDMMC_INT_CLEAR; //0x00000838
+ REG32 SDMMC_TRANS_SPEED; //0x0000083C
+ REG32 SDMMC_MCLK_ADJUST; //0x00000840
+} HWP_SDMMC_T;
+
+//apbi_ctrl_sdmmc
+#define SDMMC_L_ENDIAN(n) (((n)&7)<<0)
+#define SDMMC_SOFT_RST_L (1<<3)
+
+//APBI_FIFO_TxRx
+#define SDMMC_DATA_IN(n) (((n)&0xFFFFFFFF)<<0)
+#define SDMMC_DATA_OUT(n) (((n)&0xFFFFFFFF)<<0)
+
+//SDMMC_CONFIG
+#define SDMMC_SDMMC_SENDCMD (1<<0)
+#define SDMMC_SDMMC_SUSPEND (1<<1)
+#define SDMMC_RSP_EN (1<<4)
+#define SDMMC_RSP_SEL(n) (((n)&3)<<5)
+#define SDMMC_RSP_SEL_R2 (2<<5)
+#define SDMMC_RSP_SEL_R3 (1<<5)
+#define SDMMC_RSP_SEL_OTHER (0<<5)
+#define SDMMC_RD_WT_EN (1<<8)
+#define SDMMC_RD_WT_SEL (1<<9)
+#define SDMMC_RD_WT_SEL_READ (0<<9)
+#define SDMMC_RD_WT_SEL_WRITE (1<<9)
+#define SDMMC_S_M_SEL (1<<10)
+#define SDMMC_S_M_SEL_SIMPLE (0<<10)
+#define SDMMC_S_M_SEL_MULTIPLE (1<<10)
+#define SDMMC_AUTO_FLAG_EN (1<<16)
+
+//SDMMC_STATUS
+#define SDMMC_NOT_SDMMC_OVER (1<<0)
+#define SDMMC_BUSY (1<<1)
+#define SDMMC_DL_BUSY (1<<2)
+#define SDMMC_SUSPEND (1<<3)
+#define SDMMC_RSP_ERROR (1<<8)
+#define SDMMC_NO_RSP_ERROR (1<<9)
+#define SDMMC_CRC_STATUS(n) (((n)&7)<<12)
+#define SDMMC_DATA_ERROR(n) (((n)&0xFF)<<16)
+#define SDMMC_DAT3_VAL (1<<24)
+#define SDMMC_DATA0_VAL (1 << 26)
+
+//SDMMC_CMD_INDEX
+#define SDMMC_COMMAND(n) (((n)&0x3F)<<0)
+
+//SDMMC_CMD_ARG
+#define SDMMC_ARGUMENT(n) (((n)&0xFFFFFFFF)<<0)
+
+//SDMMC_RESP_INDEX
+#define SDMMC_RESPONSE(n) (((n)&0x3F)<<0)
+
+//SDMMC_RESP_ARG3
+#define SDMMC_ARGUMENT3(n) (((n)&0xFFFFFFFF)<<0)
+
+//SDMMC_RESP_ARG2
+#define SDMMC_ARGUMENT2(n) (((n)&0xFFFFFFFF)<<0)
+
+//SDMMC_RESP_ARG1
+#define SDMMC_ARGUMENT1(n) (((n)&0xFFFFFFFF)<<0)
+
+//SDMMC_RESP_ARG0
+#define SDMMC_ARGUMENT0(n) (((n)&0xFFFFFFFF)<<0)
+
+//SDMMC_DATA_WIDTH
+#define SDMMC_SDMMC_DATA_WIDTH(n) (((n)&15)<<0)
+
+//SDMMC_BLOCK_SIZE
+#define SDMMC_SDMMC_BLOCK_SIZE(n) (((n)&15)<<0)
+
+//SDMMC_BLOCK_CNT
+#define SDMMC_SDMMC_BLOCK_CNT(n) (((n)&0xFFFF)<<0)
+
+//SDMMC_INT_STATUS
+#define SDMMC_NO_RSP_INT (1<<0)
+#define SDMMC_RSP_ERR_INT (1<<1)
+#define SDMMC_RD_ERR_INT (1<<2)
+#define SDMMC_WR_ERR_INT (1<<3)
+#define SDMMC_DAT_OVER_INT (1<<4)
+#define SDMMC_TXDMA_DONE_INT (1<<5)
+#define SDMMC_RXDMA_DONE_INT (1<<6)
+#define SDMMC_NO_RSP_SC (1<<8)
+#define SDMMC_RSP_ERR_SC (1<<9)
+#define SDMMC_RD_ERR_SC (1<<10)
+#define SDMMC_WR_ERR_SC (1<<11)
+#define SDMMC_DAT_OVER_SC (1<<12)
+#define SDMMC_TXDMA_DONE_SC (1<<13)
+#define SDMMC_RXDMA_DONE_SC (1<<14)
+
+//SDMMC_INT_MASK
+#define SDMMC_NO_RSP_MK (1<<0)
+#define SDMMC_RSP_ERR_MK (1<<1)
+#define SDMMC_RD_ERR_MK (1<<2)
+#define SDMMC_WR_ERR_MK (1<<3)
+#define SDMMC_DAT_OVER_MK (1<<4)
+#define SDMMC_TXDMA_DONE_MK (1<<5)
+#define SDMMC_RXDMA_DONE_MK (1<<6)
+
+//SDMMC_INT_CLEAR
+#define SDMMC_NO_RSP_CL (1<<0)
+#define SDMMC_RSP_ERR_CL (1<<1)
+#define SDMMC_RD_ERR_CL (1<<2)
+#define SDMMC_WR_ERR_CL (1<<3)
+#define SDMMC_DAT_OVER_CL (1<<4)
+#define SDMMC_TXDMA_DONE_CL (1<<5)
+#define SDMMC_RXDMA_DONE_CL (1<<6)
+
+//SDMMC_TRANS_SPEED
+#define SDMMC_SDMMC_TRANS_SPEED(n) (((n)&0xFF)<<0)
+
+//SDMMC_MCLK_ADJUST
+#define SDMMC_SDMMC_MCLK_ADJUST(n) (((n)&15)<<0)
+#define SDMMC_CLK_INV (1<<4)
+
+// =============================================================================
+// MACROS
+// =============================================================================
+// =============================================================================
+// HAL_SDMMC_ACMD_SEL
+// -----------------------------------------------------------------------------
+/// Macro to mark a command as application specific
+// =============================================================================
+#define HAL_SDMMC_ACMD_SEL 0x80000000
+
+
+// =============================================================================
+// HAL_SDMMC_CMD_MASK
+// -----------------------------------------------------------------------------
+/// Mask to get from a HAL_SDMMC_CMD_T value the corresponding
+/// command index
+// =============================================================================
+#define HAL_SDMMC_CMD_MASK 0x3F
+
+
+
+// =============================================================================
+// HAL_SDMMC_CMD_T
+// -----------------------------------------------------------------------------
+// SD commands
+// =============================================================================
+typedef enum
+{
+ HAL_SDMMC_CMD_GO_IDLE_STATE = 0,
+ HAL_SDMMC_CMD_MMC_SEND_OP_COND = 1,
+ HAL_SDMMC_CMD_ALL_SEND_CID = 2,
+ HAL_SDMMC_CMD_SEND_RELATIVE_ADDR = 3,
+ HAL_SDMMC_CMD_SET_DSR = 4,
+ HAL_SDMMC_CMD_SWITCH = 6,
+ HAL_SDMMC_CMD_SELECT_CARD = 7,
+ HAL_SDMMC_CMD_SEND_IF_COND = 8,
+ HAL_SDMMC_CMD_SEND_CSD = 9,
+ HAL_SDMMC_CMD_STOP_TRANSMISSION = 12,
+ HAL_SDMMC_CMD_SEND_STATUS = 13,
+ HAL_SDMMC_CMD_SET_BLOCKLEN = 16,
+ HAL_SDMMC_CMD_READ_SINGLE_BLOCK = 17,
+ HAL_SDMMC_CMD_READ_MULT_BLOCK = 18,
+ HAL_SDMMC_CMD_WRITE_SINGLE_BLOCK = 24,
+ HAL_SDMMC_CMD_WRITE_MULT_BLOCK = 25,
+ HAL_SDMMC_CMD_APP_CMD = 55,
+ HAL_SDMMC_CMD_SET_BUS_WIDTH = (6 | HAL_SDMMC_ACMD_SEL),
+ HAL_SDMMC_CMD_SEND_NUM_WR_BLOCKS = (22| HAL_SDMMC_ACMD_SEL),
+ HAL_SDMMC_CMD_SET_WR_BLK_COUNT = (23| HAL_SDMMC_ACMD_SEL),
+ HAL_SDMMC_CMD_SEND_OP_COND = (41| HAL_SDMMC_ACMD_SEL)
+} HAL_SDMMC_CMD_T;
+
+// =============================================================================
+// HAL_SDMMC_OP_STATUS_T
+// -----------------------------------------------------------------------------
+/// This structure is used the module operation status. It is different from the
+/// IRQ status.
+// =============================================================================
+typedef union
+{
+ u32 reg;
+ struct
+ {
+ u32 operationNotOver :1;
+ /// Module is busy ?
+ u32 busy :1;
+ u32 dataLineBusy :1;
+ /// '1' means the controller will not perform the new command when SDMMC_SENDCMD= '1'.
+ u32 suspend :1;
+ u32 :4;
+ u32 responseCrcError :1;
+ /// 1 as long as no reponse to a command has been received.
+ u32 noResponseReceived :1;
+ u32 :2;
+ /// CRC check for SD/MMC write operation
+ /// "101" transmission error
+ /// "010" transmission right
+ /// "111" flash programming error
+ u32 crcStatus :3;
+ u32 :1;
+ /// 8 bits data CRC check, "00000000" means no data error,
+ /// "00000001" means DATA0 CRC check error, "10000000" means
+ /// DATA7 CRC check error, each bit match one data line.
+ u32 dataError :8;
+ } fields;
+} HAL_SDMMC_OP_STATUS_T;
+
+typedef enum
+{
+ HAL_SDMMC_DIRECTION_READ,
+ HAL_SDMMC_DIRECTION_WRITE,
+ HAL_SDMMC_DIRECTION_QTY
+} HAL_SDMMC_DIRECTION_T;
+
+typedef enum
+{
+ HAL_SDMMC_DATA_BUS_WIDTH_1 = 0x0,
+ HAL_SDMMC_DATA_BUS_WIDTH_4 = 0x2
+} HAL_SDMMC_DATA_BUS_WIDTH_T;
+
+#endif /* _REG_SDMMC_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_nand.h b/arch/arm/include/asm/arch-rda/reg_nand.h
new file mode 100644
index 0000000000..5fd490c606
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_nand.h
@@ -0,0 +1,17 @@
+#ifndef _REG_NAND_H_
+#define _REG_NAND_H_
+
+#include <common.h>
+
+#ifdef CONFIG_NAND_RDA_V1
+#include "reg_nand_v1.h"
+#elif defined(CONFIG_NAND_RDA_V2)
+#include "reg_nand_v2.h"
+#elif defined(CONFIG_NAND_RDA_V3)
+#include "reg_nand_v3.h"
+#else
+#error "undefined RDA NAND Controller Version"
+#endif
+
+#endif /* _REG_NAND_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_nand_v1.h b/arch/arm/include/asm/arch-rda/reg_nand_v1.h
new file mode 100644
index 0000000000..8b5b5ddb13
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_nand_v1.h
@@ -0,0 +1,106 @@
+#ifndef _REG_NAND_V1_H_
+#define _REG_NAND_V1_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#define REG_NANDFC_BASE RDA_NAND_BASE
+
+#define NANDFC_DATA_BUF (REG_NANDFC_BASE + 0x0000)
+#define NANDFC_OOB_BUF (REG_NANDFC_BASE + 0x1000)
+
+#if defined(CONFIG_MACH_RDA8810) || defined(CONFIG_MACH_RDA8850) || \
+ defined(CONFIG_MACH_RDAARM926EJS)
+#define NANDFC_REG_DCMD_ADDR (REG_NANDFC_BASE + 0x2000)
+//#define NANDFC_REG_OP_START (REG_NANDFC_BASE + 0x2004)
+//#define NANDFC_REG_CMD_PTR (REG_NANDFC_BASE + 0x2008)
+#define NANDFC_REG_COL_ADDR (REG_NANDFC_BASE + 0x200c)
+#define NANDFC_REG_CONFIG_A (REG_NANDFC_BASE + 0x2010)
+#define NANDFC_REG_CONFIG_B (REG_NANDFC_BASE + 0x2014)
+#define NANDFC_REG_BUF_CTRL (REG_NANDFC_BASE + 0x2018)
+#define NANDFC_REG_BUSY_FLAG (REG_NANDFC_BASE + 0x201c)
+#define NANDFC_REG_INT_MASK (REG_NANDFC_BASE + 0x2020)
+#define NANDFC_REG_INT_STAT (REG_NANDFC_BASE + 0x2024)
+#define NANDFC_REG_IDCODE_A (REG_NANDFC_BASE + 0x2028)
+#define NANDFC_REG_IDCODE_B (REG_NANDFC_BASE + 0x202c)
+//#define NANDFC_REG_DMA_REQ (REG_NANDFC_BASE + 0x2030)
+//#define NANDFC_REG_CMD_DEF_A (REG_NANDFC_BASE + 0x2034)
+#define NANDFC_REG_CMD_DEF_B (REG_NANDFC_BASE + 0x2038)
+#define NANDFC_REG_OP_STATUS (REG_NANDFC_BASE + 0x203c)
+#define NANDFC_REG_IDTPYE (REG_NANDFC_BASE + 0x2040)
+#define NANDFC_REG_DELAY (REG_NANDFC_BASE + 0x2054)
+#else
+/* for 8810e, 8820, or later */
+#define NANDFC_REG_DCMD_ADDR (REG_NANDFC_BASE + 0x3000)
+//#define NANDFC_REG_OP_START (REG_NANDFC_BASE + 0x3004)
+//#define NANDFC_REG_CMD_PTR (REG_NANDFC_BASE + 0x3008)
+#define NANDFC_REG_COL_ADDR (REG_NANDFC_BASE + 0x300c)
+#define NANDFC_REG_CONFIG_A (REG_NANDFC_BASE + 0x3010)
+#define NANDFC_REG_CONFIG_B (REG_NANDFC_BASE + 0x3014)
+#define NANDFC_REG_BUF_CTRL (REG_NANDFC_BASE + 0x3018)
+#define NANDFC_REG_BUSY_FLAG (REG_NANDFC_BASE + 0x301c)
+#define NANDFC_REG_INT_MASK (REG_NANDFC_BASE + 0x3020)
+#define NANDFC_REG_INT_STAT (REG_NANDFC_BASE + 0x3024)
+#define NANDFC_REG_IDCODE_A (REG_NANDFC_BASE + 0x3028)
+#define NANDFC_REG_IDCODE_B (REG_NANDFC_BASE + 0x302c)
+//#define NANDFC_REG_DMA_REQ (REG_NANDFC_BASE + 0x3030)
+//#define NANDFC_REG_CMD_DEF_A (REG_NANDFC_BASE + 0x3034)
+//#define NANDFC_REG_CMD_DEF_B (REG_NANDFC_BASE + 0x3038)
+#define NANDFC_REG_OP_STATUS (REG_NANDFC_BASE + 0x303c)
+#define NANDFC_REG_IDTPYE (REG_NANDFC_BASE + 0x3040)
+#define NANDFC_REG_DELAY (REG_NANDFC_BASE + 0x3054)
+#endif
+
+// NANDFC_REG_DCMD_ADDR
+#define NANDFC_DCMD(n) (((n)&0xFF)<<24)
+#define NANDFC_PAGE_ADDR(n) (((n)&0x000FFFFF)<<0)
+
+// NANDFC_REG_CONFIG_A
+#define NANDFC_CYCLE(n) (((n)&0x0F)<<0)
+#define NANDFC_CHIP_SEL(n) (((n)&0x0F)<<4)
+#define NANDFC_TIMING(n) (((n)&0xFF)<<8)
+#define NANDFC_POLARITY_IO(n) (((n)&0x01)<<16)
+#define NANDFC_POLARITY_MEM(n) (((n)&0x01)<<17)
+#define NANDFC_WDITH_16BIT(n) (((n)&0x01)<<18)
+
+// NANDFC_REG_CONFIG_B
+#define NANDFC_HWECC(n) (((n)&0x01)<<7)
+#define NANDFC_ECC_MODE(n) (((n)&0x0F)<<0)
+
+// NANDFC_REG_BUF_CTRL
+#define NANDFC_BUF_DIRECT(n) (((n)&0x01)<<2)
+
+// NANDFC_REG_INT_STAT
+#define NANDFC_INT_ECC_ERR (1<<0)
+#define NANDFC_INT_PROG_ERR (1<<1)
+#define NANDFC_INT_ERASE_ERR (1<<2)
+#define NANDFC_INT_TIMEOUT (1<<3)
+#define NANDFC_INT_DONE (1<<4)
+#define NANDFC_INT_CRC_FAIL (1<<5)
+#define NANDFC_INT_ECC_ERR_0 (1<<6)
+#define NANDFC_INT_ECC_ERR_1 (1<<7)
+#define NANDFC_INT_ECC_ERR_2 (1<<8)
+#define NANDFC_INT_ECC_CRC_0 (1<<9)
+#define NANDFC_INT_ECC_CRC_1 (1<<10)
+#define NANDFC_INT_ECC_CRC_2 (1<<11)
+#define NANDFC_INT_ERR_ALL (0x0FEF)
+#define NANDFC_INT_CLR_MASK (0x0FDE)
+
+typedef enum
+{
+ NAND_TYPE_512S = 0, // 512+16, 64Mb, 128Mb, 256Mb
+ NAND_TYPE_512L = 1, // 512+16, 512Mb, 1Gb, 2Gb
+ NAND_TYPE_2KS = 2, // 2048+64, 1Gb (2 byte Row addresses)
+ NAND_TYPE_2KL = 3, // 2048+64, 2Gb, 4Gb, 8Gb, 16Gb (3 byte Row Addresses)
+ NAND_TYPE_MLC2K = 4, // MLC, 2048+64
+ NAND_TYPE_MLC4K = 5, // MLC, 4096+224, 16Gb, 32Gb
+ NAND_TYPE_SLC4K = 6, // SLC, 4096+224, 16Gb, 32Gb
+ NAND_TYPE_MLC8K = 7, // MLC, 8192+224, 16Gb, 32Gb
+ NAND_TYPE_SLC8K = 8, // SLC, 8192+224, 16Gb, 32Gb
+ NAND_TYPE_MLC16K = 9, // MLC,
+ NAND_TYPE_SLC16K = 10, // SLC,
+ NAND_TYPE_INVALID = 0xff
+} NAND_FLASH_TYPE;
+
+#endif /* _REG_NAND_V1_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_nand_v2.h b/arch/arm/include/asm/arch-rda/reg_nand_v2.h
new file mode 100644
index 0000000000..78c68e916b
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_nand_v2.h
@@ -0,0 +1,111 @@
+#ifndef _REG_NAND_V2_H_
+#define _REG_NAND_V2_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#define REG_NANDFC_BASE RDA_NAND_BASE
+
+#define NANDFC_DATA_BUF (REG_NANDFC_BASE + 0x0000)
+#define NANDFC_OOB_BUF (REG_NANDFC_BASE + 0x1000)
+
+#if defined(CONFIG_MACH_RDA8810) || defined(CONFIG_MACH_RDA8850) || \
+ defined(CONFIG_MACH_RDAARM926EJS)
+#define NANDFC_REG_DCMD_ADDR (REG_NANDFC_BASE + 0x2000)
+//#define NANDFC_REG_OP_START (REG_NANDFC_BASE + 0x2004)
+//#define NANDFC_REG_CMD_PTR (REG_NANDFC_BASE + 0x2008)
+#define NANDFC_REG_COL_ADDR (REG_NANDFC_BASE + 0x200c)
+#define NANDFC_REG_CONFIG_A (REG_NANDFC_BASE + 0x2010)
+#define NANDFC_REG_CONFIG_B (REG_NANDFC_BASE + 0x2014)
+#define NANDFC_REG_BUF_CTRL (REG_NANDFC_BASE + 0x2018)
+#define NANDFC_REG_BUSY_FLAG (REG_NANDFC_BASE + 0x201c)
+#define NANDFC_REG_INT_MASK (REG_NANDFC_BASE + 0x2020)
+#define NANDFC_REG_INT_STAT (REG_NANDFC_BASE + 0x2024)
+#define NANDFC_REG_IDCODE_A (REG_NANDFC_BASE + 0x2028)
+#define NANDFC_REG_IDCODE_B (REG_NANDFC_BASE + 0x202c)
+//#define NANDFC_REG_DMA_REQ (REG_NANDFC_BASE + 0x2030)
+//#define NANDFC_REG_CMD_DEF_A (REG_NANDFC_BASE + 0x2034)
+//#define NANDFC_REG_CMD_DEF_B (REG_NANDFC_BASE + 0x2038)
+#define NANDFC_REG_OP_STATUS (REG_NANDFC_BASE + 0x203c)
+#define NANDFC_REG_IDTPYE (REG_NANDFC_BASE + 0x2040)
+#define NANDFC_REG_DELAY (REG_NANDFC_BASE + 0x2054)
+#else
+/* for 8810e, 8820, or later */
+#define NANDFC_REG_DCMD_ADDR (REG_NANDFC_BASE + 0x3000)
+//#define NANDFC_REG_OP_START (REG_NANDFC_BASE + 0x3004)
+//#define NANDFC_REG_CMD_PTR (REG_NANDFC_BASE + 0x3008)
+#define NANDFC_REG_COL_ADDR (REG_NANDFC_BASE + 0x300c)
+#define NANDFC_REG_CONFIG_A (REG_NANDFC_BASE + 0x3010)
+#define NANDFC_REG_CONFIG_B (REG_NANDFC_BASE + 0x3014)
+#define NANDFC_REG_BUF_CTRL (REG_NANDFC_BASE + 0x3018)
+#define NANDFC_REG_BUSY_FLAG (REG_NANDFC_BASE + 0x301c)
+#define NANDFC_REG_INT_MASK (REG_NANDFC_BASE + 0x3020)
+#define NANDFC_REG_INT_STAT (REG_NANDFC_BASE + 0x3024)
+#define NANDFC_REG_IDCODE_A (REG_NANDFC_BASE + 0x3028)
+#define NANDFC_REG_IDCODE_B (REG_NANDFC_BASE + 0x302c)
+//#define NANDFC_REG_DMA_REQ (REG_NANDFC_BASE + 0x3030)
+//#define NANDFC_REG_CMD_DEF_A (REG_NANDFC_BASE + 0x3034)
+//#define NANDFC_REG_CMD_DEF_B (REG_NANDFC_BASE + 0x3038)
+#define NANDFC_REG_OP_STATUS (REG_NANDFC_BASE + 0x303c)
+#define NANDFC_REG_IDTPYE (REG_NANDFC_BASE + 0x3040)
+#define NANDFC_REG_DELAY (REG_NANDFC_BASE + 0x3054)
+#endif
+
+// NANDFC_REG_DCMD_ADDR
+#define NANDFC_DCMD(n) (((n)&0xFF)<<24)
+#define NANDFC_PAGE_ADDR(n) (((n)&0x000FFFFF)<<0)
+
+// NANDFC_REG_CONFIG_A
+#define NANDFC_CYCLE(n) (((n)&0x0F)<<0)
+#define NANDFC_CHIP_SEL(n) (((n)&0x0F)<<4)
+#define NANDFC_TIMING(n) (((n)&0xFF)<<8)
+#define NANDFC_POLARITY_IO(n) (((n)&0x01)<<16)
+#define NANDFC_POLARITY_MEM(n) (((n)&0x01)<<17)
+#define NANDFC_WDITH_16BIT(n) (((n)&0x01)<<18)
+
+// NANDFC_REG_CONFIG_B
+#define NANDFC_HWECC(n) (((n)&0x01)<<7)
+#define NANDFC_ECC_MODE(n) (((n)&0x0F)<<0)
+
+// NANDFC_REG_BUF_CTRL
+#define NANDFC_BUF_DIRECT(n) (((n)&0x01)<<2)
+
+// NANDFC_REG_INT_STAT
+#define NANDFC_INT_ECC_ERR (1<<0)
+#define NANDFC_INT_PROG_ERR (1<<1)
+#define NANDFC_INT_ERASE_ERR (1<<2)
+#define NANDFC_INT_TIMEOUT (1<<3)
+#define NANDFC_INT_DONE (1<<4)
+#define NANDFC_INT_CRC_FAIL (1<<5)
+#define NANDFC_INT_ECC_ERR_0 (1<<6)
+#define NANDFC_INT_ECC_ERR_1 (1<<7)
+#define NANDFC_INT_ECC_ERR_2 (1<<8)
+#define NANDFC_INT_ECC_CRC_0 (1<<9)
+#define NANDFC_INT_ECC_CRC_1 (1<<10)
+#define NANDFC_INT_ECC_CRC_2 (1<<11)
+#define NANDFC_INT_STAT_IDLE (1<<21)
+#define NANDFC_INT_ERR_ALL (0x01EF) /* CRC bits do not work anymore */
+#define NANDFC_INT_CLR_MASK (0x0FDE)
+
+typedef enum
+{
+ NAND_TYPE_2K = 0, // support 3 byte Row Addresses only
+ NAND_TYPE_4K = 1,
+ NAND_TYPE_8K = 2,
+ NAND_TYPE_INVALID = 0xff
+} NAND_FLASH_TYPE;
+
+typedef enum
+{
+ NAND_ECC_2K24BIT = 0, // support 2K nand only
+ NAND_ECC_RESERVE = 1,
+ NAND_ECC_1K96BIT = 2, // 4K use as 3K or 8K use as 6K
+ NAND_ECC_1K64BIT = 3, // 8K only, use as 8K, need 7xx spare, leave 1x oob
+ NAND_ECC_1K56BIT = 4, // 8K only, use as 8K, need 7xx spare, leave more oob
+ NAND_ECC_1K40BIT = 5, // 8K only, use as 8K, need 6xx spare
+ NAND_ECC_1K24BIT = 6, // 4K/8K, 4K need 224 spare
+ NAND_ECC_INVALID = 0xFF,
+} NAND_ECC_TYPE;
+
+#endif /* _REG_NAND_V2_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_nand_v3.h b/arch/arm/include/asm/arch-rda/reg_nand_v3.h
new file mode 100644
index 0000000000..042c88bf06
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_nand_v3.h
@@ -0,0 +1,151 @@
+#ifndef _REG_NAND_V3_H_
+#define _REG_NAND_V3_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#define REG_NANDFC_BASE RDA_NAND_BASE
+
+#define NANDFC_DATA_BUF (REG_NANDFC_BASE + 0x0000)
+#define NANDFC_OOB_BUF (REG_NANDFC_BASE + 0x1000)
+
+/* for 8810e, 8820, or later */
+#define NANDFC_REG_DCMD_ADDR (REG_NANDFC_BASE + 0x3000)
+//#define NANDFC_REG_OP_START (REG_NANDFC_BASE + 0x3004)
+//#define NANDFC_REG_CMD_PTR (REG_NANDFC_BASE + 0x3008)
+#define NANDFC_REG_COL_ADDR (REG_NANDFC_BASE + 0x300c)
+#define NANDFC_REG_CONFIG_A (REG_NANDFC_BASE + 0x3010)
+#define NANDFC_REG_CONFIG_B (REG_NANDFC_BASE + 0x3014)
+#define NANDFC_REG_BUF_CTRL (REG_NANDFC_BASE + 0x3018)
+#define NANDFC_REG_BUSY_FLAG (REG_NANDFC_BASE + 0x301c)
+#define NANDFC_REG_INT_MASK (REG_NANDFC_BASE + 0x3020)
+#define NANDFC_REG_INT_STAT (REG_NANDFC_BASE + 0x3024)
+#define NANDFC_REG_IDCODE_A (REG_NANDFC_BASE + 0x3028)
+#define NANDFC_REG_IDCODE_B (REG_NANDFC_BASE + 0x302c)
+//#define NANDFC_REG_DMA_REQ (REG_NANDFC_BASE + 0x3030)
+//#define NANDFC_REG_CMD_DEF_A (REG_NANDFC_BASE + 0x3034)
+//#define NANDFC_REG_CMD_DEF_B (REG_NANDFC_BASE + 0x3038)
+#define NANDFC_REG_OP_STATUS (REG_NANDFC_BASE + 0x303c)
+#define NANDFC_REG_IDTPYE (REG_NANDFC_BASE + 0x3040)
+#define NANDFC_REG_TIMING_MODE (REG_NANDFC_BASE + 0x3048)
+#define NANDFC_REG_SYNC_DELAY (REG_NANDFC_BASE + 0x304c)
+#define NANDFC_REG_IRBN_COUNT (REG_NANDFC_BASE + 0x3054)
+#define NANDFC_REG_PAGE_PARA (REG_NANDFC_BASE + 0x305c)
+#define NANDFC_REG_COMMAND_FIFO (REG_NANDFC_BASE + 0x3070)
+#define NANDFC_REG_COMMAND_EXEC_STATUS (REG_NANDFC_BASE + 0x3074)
+#define NANDFC_REG_COMMAND_STATUS0 (REG_NANDFC_BASE + 0x3078)
+#define NANDFC_REG_COMMAND_STATUS1 (REG_NANDFC_BASE + 0x307c)
+#define NANDFC_REG_SCRAMBLE_START_DATA (REG_NANDFC_BASE + 0x3080)
+#define NANDFC_REG_BRICK_FSM_TIME0 (REG_NANDFC_BASE + 0x3084)
+#define NANDFC_REG_BRICK_FSM_TIME1 (REG_NANDFC_BASE + 0x3088)
+#define NANDFC_REG_BRICK_FSM_TIME2 (REG_NANDFC_BASE + 0x308c)
+#define NANDFC_REG_BRICK_FIFO_WRITE_POINTER (REG_NANDFC_BASE + 0x3090)
+#define NANDFC_REG_BCH_DATA (REG_NANDFC_BASE + 0x3094)
+#define NANDFC_REG_BCH_OOB (REG_NANDFC_BASE + 0x3098)
+#define NANDFC_REG_MESSAGE_OOB_SIZE (REG_NANDFC_BASE + 0x309c)
+
+// NANDFC_REG_DCMD_ADDR
+#define NANDFC_DCMD(n) (((n)&0xFF)<<24)
+#define NANDFC_PAGE_ADDR(n) (((n)&0x00FFFFFF)<<0)
+
+// NANDFC_REG_CONFIG_A
+#define NANDFC_CYCLE(n) ((((n)&0x0F)<<0) | ((((n) >> 4)&0x1)<<30))
+#define NANDFC_CHIP_SEL(n) (((n)&0x0F)<<4)
+#define NANDFC_TIMING(n) (((n)&0xFF)<<8)
+#define NANDFC_POLARITY_IO(n) (((n)&0x01)<<16)
+#define NANDFC_POLARITY_MEM(n) (((n)&0x01)<<17)
+#define NANDFC_CMDFULL_STA(n) (((n)&0x01)<<31)
+#define NANDFC_BRICK_COMMAND(n) (((n)&0x01)<<25)
+#define NANDFC_WDITH_16BIT(n) (((n)&0x01)<<18)
+#define NANDFC_SCRAMBLE_ENABLE(n) (((n)&0x01)<<24)
+
+//NNADFC_REG_BCH_DATA
+#define NANDFC_BCH_KK_DATA(n) (((n)&0x1FFF) << 0)
+#define NANDFC_BCH_NN_DATA(n) (((n)&0x1FFF) << 16)
+
+//NNADFC_REG_BCH_DATA
+#define NANDFC_BCH_KK_OOB(n) (((n)&0x1FFF) << 0)
+#define NANDFC_BCH_NN_OOB(n) (((n)&0x1FFF) << 16)
+
+//NNADFC_REG_MESSAGE_OOB_SIZE
+#define NANDFC_OOB_SIZE(n) (((n)&0xFFF) << 0)
+#define NANDFC_MESSAGE_SIZE(n) (((n)&0x3FFF) << 16)
+
+//NANDFC_REG_BRICK_FIFO_WRITE_POINTER
+#define NANDFC_BRICK_DATA(n) (((n)&0xFF) << 24)
+#define NANDFC_BRICK_R_WIDTH(n) (((n)&0x1) << 18)
+#define NANDFC_BRICK_W_WIDTH(n) (((n)&0x1) << 19)
+#define NANDFC_BRICK_DATA_NUM(n) (((n)&0x3FFF) << 4)
+#define NANDFC_BRICK_NEXT_ACT(n) (((n)&0xF) << 0)
+
+typedef enum
+{
+ NAND_ECC_24BIT = 0,
+ NAND_ECC_96BIT_WITHOUT_CRC = 1,
+ NAND_ECC_96BIT_WITH_CRC = 2,
+ NAND_ECC_64BIT = 3,
+ NAND_ECC_56BIT = 4,
+ NAND_ECC_40BIT = 5,
+ NAND_ECC_24BIT_1 = 6,
+ NAND_ECC_48BIT = 7,
+ NAND_ECC_32BIT = 8,
+ NAND_ECC_16BIT = 9,
+ NAND_ECC_8BIT = 10,
+ NAND_ECC_72BIT = 11,
+ NAND_ECC_80BIT = 12,
+ NAND_ECC_88BIT = 13,
+} NAND_BCHMODE_TYPE;
+
+#define NANDFC_SCRAMBLE(n) (((n)&0x01)<<24)
+
+// NANDFC_REG_CONFIG_B
+#define NANDFC_HWECC(n) (((n)&0x01)<<7)
+#define NANDFC_ECC_MODE(n) (((n)&0x0f)<<0)
+
+// NANDFC_REG_BUF_CTRL
+#define NANDFC_BUF_DIRECT(n) (((n)&0x01)<<2)
+
+// NANDFC_REG_INT_STAT
+#define NANDFC_INT_ECC_ERR (1<<0)
+#define NANDFC_INT_PROG_ERR (1<<1)
+#define NANDFC_INT_ERASE_ERR (1<<2)
+#define NANDFC_INT_TIMEOUT (1<<3)
+#define NANDFC_INT_DONE (1<<4)
+#define NANDFC_INT_CRC_FAIL (1<<5)
+#define NANDFC_INT_COMMAND_FIFO_EMPTY (1<<6)
+#define NANDFC_INT_ECC_ERR_0 (1<<7)
+#define NANDFC_INT_ECC_ERR_1 (1<<8)
+#define NANDFC_INT_ECC_ERR_1 (1<<8)
+#define NANDFC_INT_ECC_ERR_2 (1<<10)
+#define NANDFC_INT_ECC_ERR_3 (1<<10)
+#define NANDFC_INT_ECC_ERR_4 (1<<11)
+#define NANDFC_INT_ECC_ERR_5 (1<<12)
+#define NANDFC_INT_ECC_ERR_6 (1<<13)
+#define NANDFC_INT_ECC_ERR_7 (1<<14)
+#define NANDFC_INT_ECC_CRC_0 (1<<15)
+#define NANDFC_INT_ECC_CRC_1 (1<<16)
+#define NANDFC_INT_ECC_CRC_2 (1<<17)
+#define NANDFC_INT_ECC_CRC_3 (1<<18)
+#define NANDFC_INT_ECC_CRC_4 (1<<19)
+#define NANDFC_INT_ECC_CRC_5 (1<<20)
+#define NANDFC_INT_ECC_CRC_6 (1<<21)
+#define NANDFC_COMMAND_FIFO_OVERFLOW (1 << 22)
+#define NANDFC_INT_ERR_ALL (0x3FFF87)
+#define NANDFC_INT_CLR_MASK (0x3FFF9F)
+
+typedef enum
+{
+ NAND_TYPE_4K = 0,
+ NAND_TYPE_2K = 1,
+ NAND_TYPE_8K = 2,
+ NAND_TYPE_16K = 3,
+ NAND_TYPE_3K = 4,
+ NAND_TYPE_7K = 5,
+ NAND_TYPE_14K = 6
+} NAND_FLASH_TYPE;
+
+//NANDFC_REG_PAGE_PARA
+#define NANDFC_PAGE_SIZE(n) (((n)&0x07FFF)<<16)
+#define NANDFC_PACKAGE_NUM(n) (((n)&0x0F)<<0)
+#endif /* _REG_NAND_V3_H_ */
+
diff --git a/arch/arm/include/asm/arch-rda/reg_rf_spi.h b/arch/arm/include/asm/arch-rda/reg_rf_spi.h
new file mode 100644
index 0000000000..ac7b35bdf6
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_rf_spi.h
@@ -0,0 +1,152 @@
+#ifndef _RF_SPI_H_
+#define _RF_SPI_H_
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define SPI_TX_FIFO_SIZE (16)
+#define SPI_RX_FIFO_SIZE (16)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SPI_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+
+typedef volatile struct
+{
+ REG32 Ctrl; //0x00000000
+ REG32 Status; //0x00000004
+ REG32 Rx_Data; //0x00000008
+ REG32 Command; //0x0000000C
+ REG32 Cmd_Size; //0x00000010
+ REG32 Cmd_Data; //0x00000014
+ REG32 Gain_Size; //0x00000018
+ REG32 Gain_Data; //0x0000001C
+ REG32 IRQ; //0x00000020
+ REG32 IRQ_Mask; //0x00000024
+ REG32 IRQ_Threshold; //0x00000028
+ REG32 Divider; //0x0000002C
+} HWP_RF_SPI_T;
+
+#define hwp_rfSpi ((HWP_RF_SPI_T*) (RDA_CFG_RF_SPI_BASE))
+
+//Ctrl
+#define RF_SPI_ENABLE (1<<0)
+#define RF_SPI_CS_POLARITY (1<<1)
+#define RF_SPI_DIGRF_READ (1<<2)
+#define RF_SPI_CLOCKED_BACK2BACK (1<<3)
+#define RF_SPI_INPUT_MODE (1<<4)
+#define RF_SPI_CLOCK_POLARITY (1<<5)
+#define RF_SPI_CLOCK_DELAY(n) (((n)&3)<<6)
+#define RF_SPI_DO_DELAY(n) (((n)&3)<<8)
+#define RF_SPI_DI_DELAY(n) (((n)&3)<<10)
+#define RF_SPI_CS_DELAY(n) (((n)&3)<<12)
+#define RF_SPI_CS_END_HOLD(n) (((n)&3)<<14)
+#define RF_SPI_FRAME_SIZE(n) (((n)&31)<<16)
+#define RF_SPI_FRAME_SIZE_MASK (31<<16)
+#define RF_SPI_FRAME_SIZE_SHIFT (16)
+#define RF_SPI_CS_END_PULSE(n) (((n)&3)<<22)
+#define RF_SPI_INPUT_FRAME_SIZE(n) (((n)&31)<<24)
+#define RF_SPI_INPUT_FRAME_SIZE_MASK (31<<24)
+#define RF_SPI_INPUT_FRAME_SIZE_SHIFT (24)
+#define RF_SPI_TURNAROUND_TIME(n) (((n)&3)<<30)
+
+//Status
+#define RF_SPI_ACTIVE_STATUS (1<<0)
+#define RF_SPI_ERROR_CMD (1<<1)
+#define RF_SPI_TABLE_OVF (1<<6)
+#define RF_SPI_TABLE_UDF (1<<7)
+#define RF_SPI_CMD_LEVEL(n) (((n)&0x3F)<<8)
+#define RF_SPI_CMD_LEVEL_MASK (0x3F<<8)
+#define RF_SPI_CMD_LEVEL_SHIFT (8)
+#define RF_SPI_CMD_OVF (1<<14)
+#define RF_SPI_CMD_UDF (1<<15)
+#define RF_SPI_CMD_DATA_LEVEL(n) (((n)&0x1FF)<<16)
+#define RF_SPI_CMD_DATA_LEVEL_MASK (0x1FF<<16)
+#define RF_SPI_CMD_DATA_LEVEL_SHIFT (16)
+#define RF_SPI_CMD_DATA_OVF (1<<25)
+#define RF_SPI_CMD_DATA_UDF (1<<26)
+#define RF_SPI_RX_LEVEL(n) (((n)&7)<<27)
+#define RF_SPI_RX_LEVEL_MASK (7<<27)
+#define RF_SPI_RX_LEVEL_SHIFT (27)
+#define RF_SPI_RX_OVF (1<<30)
+#define RF_SPI_RX_UDF (1<<31)
+
+//Rx_Data
+#define RF_SPI_RX_DATA(n) (((n)&0xFF)<<0)
+
+//Command
+#define RF_SPI_SEND_CMD (1<<0)
+#define RF_SPI_FLUSH_CMD_FIFO (1<<8)
+#define RF_SPI_FLUSH_RX_FIFO (1<<16)
+#define RF_SPI_RESTART_GAIN (1<<24)
+#define RF_SPI_RELOAD_GAIN (1<<28)
+#define RF_SPI_DRIVE_ZERO (1<<31)
+
+//Cmd_Size
+#define RF_SPI_CMD_SIZE(n) (((n)&0xFF)<<0)
+#define RF_SPI_CMD_MARK (1<<31)
+
+//Cmd_Data
+#define RF_SPI_CMD_DATA(n) (((n)&0xFF)<<0)
+
+//Gain_Size
+#define RF_SPI_GAIN_SIZE(n) (((n)&15)<<0)
+
+//Gain_Data
+#define RF_SPI_GAIN_DATA(n) (((n)&0xFF)<<0)
+
+//IRQ
+#define RF_SPI_CMD_DATA_DMA_DONE_CAUSE (1<<0)
+#define RF_SPI_CMD_FIFO_EMPTY_CAUSE (1<<2)
+#define RF_SPI_CMD_THRESHOLD_CAUSE (1<<3)
+#define RF_SPI_RX_FIFO_FULL_CAUSE (1<<4)
+#define RF_SPI_RX_THRESHOLD_CAUSE (1<<5)
+#define RF_SPI_ERROR_CAUSE (1<<6)
+#define RF_SPI_CMD_DATA_DMA_DONE_STATUS (1<<16)
+#define RF_SPI_CMD_FIFO_EMPTY_STATUS (1<<18)
+#define RF_SPI_CMD_THRESHOLD_STATUS (1<<19)
+#define RF_SPI_RX_FIFO_FULL_STATUS (1<<20)
+#define RF_SPI_RX_THRESHOLD_STATUS (1<<21)
+#define RF_SPI_ERROR_STATUS (1<<22)
+#define RF_SPI_ALL_CAUSE(n) (((n)&0x7D)<<0)
+#define RF_SPI_ALL_CAUSE_MASK (0x7D<<0)
+#define RF_SPI_ALL_CAUSE_SHIFT (0)
+#define RF_SPI_ALL_STATUS(n) (((n)&0x7D)<<16)
+#define RF_SPI_ALL_STATUS_MASK (0x7D<<16)
+#define RF_SPI_ALL_STATUS_SHIFT (16)
+
+//IRQ_Mask
+#define RF_SPI_CMD_DATA_DMA_DONE_MASK (1<<0)
+#define RF_SPI_CMD_FIFO_EMPTY_MASK (1<<2)
+#define RF_SPI_CMD_THRESHOLD_MASK (1<<3)
+#define RF_SPI_RX_FIFO_FULL_MASK (1<<4)
+#define RF_SPI_RX_THRESHOLD_MASK (1<<5)
+#define RF_SPI_ERROR_MASK (1<<6)
+#define RF_SPI_ALL_MASK(n) (((n)&0x7D)<<0)
+#define RF_SPI_ALL_MASK_MASK (0x7D<<0)
+#define RF_SPI_ALL_MASK_SHIFT (0)
+
+//IRQ_Threshold
+#define RF_SPI_CMD_THRESHOLD(n) (((n)&0x3F)<<8)
+#define RF_SPI_RX_THRESHOLD(n) (((n)&3)<<24)
+
+//Divider
+#define RF_SPI_DIVIDER(n) (((n)&0x3F)<<1)
+#define RF_SPI_DIVIDER_MASK (0x3F<<1)
+#define RF_SPI_DIVIDER_SHIFT (1)
+#define RF_SPI_CLOCK_LIMITER (1<<28)
+#define RF_SPI_CLOCK_LIMITER_MASK (1<<28)
+#define RF_SPI_CLOCK_LIMITER_SHIFT (28)
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_spi.h b/arch/arm/include/asm/arch-rda/reg_spi.h
new file mode 100644
index 0000000000..8664bc2215
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_spi.h
@@ -0,0 +1,245 @@
+#ifndef _SPI_H_
+#define _SPI_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define SPI_TX_FIFO_SIZE (16)
+#define SPI_RX_FIFO_SIZE (16)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SPI_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+
+typedef volatile struct
+{
+ REG32 ctrl; //0x00000000
+ REG32 status; //0x00000004
+ /// Spi1 fifo size (rxtx_buffer): 8bits.
+ /// Spi2 fifo size (rxtx_buffer): 8bits.
+ /// Spi3 fifo size (rxtx_buffer): 32bits.
+ /// <table border="1"> <!-- border should be in css--> <caption> <big>32b FIFO
+ /// only </big> </caption> <tr> <th>rxtx_buffer: </th> <th>Range [31]</th> <th>Range
+ /// [30:29]</th> <th>Range [28:26]</th> <th>Range [25]</th> <th>Range [24:16]</th>
+ /// <th>Range [15:0]</th> </tr> <tr> <td>DATA_IN: </td> <td>READ_ENA</td> <td>CS</td>
+ /// <td/> <td>R/W</td> <td>ADDRESS</td> <td>DATA</td> </tr> <tr> <td>DATA_OUT:
+ /// </td> <td>READ_ENA</td> <td>CS</td> <td/> <td>R/W</td> <td>ADDRESS</td> <td>DATA</td>
+ /// </tr> </table>
+ REG32 rxtx_buffer; //0x00000008
+ REG32 cfg; //0x0000000C
+ REG32 pattern; //0x00000010
+ REG32 stream; //0x00000014
+ REG32 pin_control; //0x00000018
+ REG32 irq; //0x0000001C
+} HWP_SPI_T;
+
+#define hwp_spi1 ((HWP_SPI_T*) (RDA_SPI1_BASE))
+#define hwp_spi2 ((HWP_SPI_T*) (RDA_SPI2_BASE))
+#define hwp_spi3 ((HWP_SPI_T*) (RDA_SPI3_BASE))
+#define hwp_mspi2 ((HWP_SPI_T*) (RDA_MODEM_SPI2_BASE))
+
+//ctrl
+#define SPI_ENABLE (1<<0)
+#define SPI_CS_SEL(n) (((n)&3)<<1)
+#define SPI_CS_SEL_MASK (3<<1)
+#define SPI_CS_SEL_SHIFT (1)
+#define SPI_CS_SEL_CS0 (0<<1)
+#define SPI_CS_SEL_CS1 (1<<1)
+#define SPI_CS_SEL_CS2 (2<<1)
+#define SPI_CS_SEL_CS3 (3<<1)
+#define SPI_INPUT_MODE (1<<4)
+#define SPI_CLOCK_POLARITY (1<<5)
+#define SPI_CLOCK_DELAY(n) (((n)&3)<<6)
+#define SPI_DO_DELAY(n) (((n)&3)<<8)
+#define SPI_DI_DELAY(n) (((n)&3)<<10)
+#define SPI_CS_DELAY(n) (((n)&3)<<12)
+#define SPI_CS_PULSE(n) (((n)&3)<<14)
+#define SPI_FRAME_SIZE(n) (((n)&31)<<16)
+#define SPI_TX_SW_SHIFT (1<<21)
+#define SPI_OE_DELAY(n) (((n)&31)<<24)
+#define SPI_CTRL_DATA_MUX_SEL (1<<29)
+#define SPI_CTRL_DATA_MUX_SEL_MASK (1<<29)
+#define SPI_CTRL_DATA_MUX_SEL_SHIFT (29)
+#define SPI_CTRL_DATA_MUX_SEL_CTRL_REG_SEL (0<<29)
+#define SPI_CTRL_DATA_MUX_SEL_DATA_REG_SEL (1<<29)
+#define SPI_INPUT_SEL(n) (((n)&3)<<30)
+
+//status
+#define SPI_ACTIVE_STATUS (1<<0)
+#define SPI_CAUSE_RX_OVF_IRQ (1<<3)
+#define SPI_CAUSE_TX_TH_IRQ (1<<4)
+#define SPI_CAUSE_TX_DMA_IRQ (1<<5)
+#define SPI_CAUSE_RX_TH_IRQ (1<<6)
+#define SPI_CAUSE_RX_DMA_IRQ (1<<7)
+#define SPI_TX_OVF (1<<9)
+#define SPI_RX_UDF (1<<10)
+#define SPI_RX_OVF (1<<11)
+#define SPI_TX_TH (1<<12)
+#define SPI_TX_DMA_DONE (1<<13)
+#define SPI_RX_TH (1<<14)
+#define SPI_RX_DMA_DONE (1<<15)
+#define SPI_TX_SPACE(n) (((n)&31)<<16)
+#define SPI_TX_SPACE_MASK (31<<16)
+#define SPI_TX_SPACE_SHIFT (16)
+#define SPI_RX_LEVEL(n) (((n)&31)<<24)
+#define SPI_RX_LEVEL_MASK (31<<24)
+#define SPI_RX_LEVEL_SHIFT (24)
+#define SPI_FIFO_FLUSH (1<<30)
+#define SPI_IRQ_CAUSE(n) (((n)&31)<<3)
+#define SPI_IRQ_CAUSE_MASK (31<<3)
+#define SPI_IRQ_CAUSE_SHIFT (3)
+
+//rxtx_buffer
+#define SPI_DATA_IN(n) (((n)&0xFFFFFFFF)<<0)
+#define SPI_DATA_OUT(n) (((n)&0xFFFFFFFF)<<0)
+#define SPI_CS(n) (((n)&3)<<29)
+#define SPI_CS_MASK (3<<29)
+#define SPI_CS_SHIFT (29)
+#define SPI_READ_ENA (1<<31)
+#define SPI_READ_ENA_MASK (1<<31)
+#define SPI_READ_ENA_SHIFT (31)
+
+//cfg
+#define SPI_CS_POLARITY_0 (1<<0)
+#define SPI_CS_POLARITY_0_MASK (1<<0)
+#define SPI_CS_POLARITY_0_SHIFT (0)
+#define SPI_CS_POLARITY_0_ACTIVE_HIGH (0<<0)
+#define SPI_CS_POLARITY_0_ACTIVE_LOW (1<<0)
+#define SPI_CS_POLARITY_1 (1<<1)
+#define SPI_CS_POLARITY_1_MASK (1<<1)
+#define SPI_CS_POLARITY_1_SHIFT (1)
+#define SPI_CS_POLARITY_1_ACTIVE_HIGH (0<<1)
+#define SPI_CS_POLARITY_1_ACTIVE_LOW (1<<1)
+#define SPI_CS_POLARITY_2 (1<<2)
+#define SPI_CS_POLARITY_2_MASK (1<<2)
+#define SPI_CS_POLARITY_2_SHIFT (2)
+#define SPI_CS_POLARITY_2_ACTIVE_HIGH (0<<2)
+#define SPI_CS_POLARITY_2_ACTIVE_LOW (1<<2)
+#define SPI_CS_POLARITY_3 (1<<3)
+#define SPI_CS_POLARITY_3_MASK (1<<3)
+#define SPI_CS_POLARITY_3_SHIFT (3)
+#define SPI_CS_POLARITY_3_ACTIVE_HIGH (0<<3)
+#define SPI_CS_POLARITY_3_ACTIVE_LOW (1<<3)
+#define SPI_CLOCK_DIVIDER(n) (((n)&0x3FF)<<16)
+#define SPI_CLOCK_DIVIDER_MASK (0x3FF<<16)
+#define SPI_CLOCK_DIVIDER_SHIFT (16)
+#define SPI_CLOCK_LIMITER (1<<28)
+#define SPI_CLOCK_LIMITER_MASK (1<<28)
+#define SPI_CLOCK_LIMITER_SHIFT (28)
+#define SPI_CS_POLARITY(n) (((n)&15)<<0)
+#define SPI_CS_POLARITY_MASK (15<<0)
+#define SPI_CS_POLARITY_SHIFT (0)
+
+//pattern
+#define SPI_PATTERN(n) (((n)&0xFF)<<0)
+#define SPI_PATTERN_MODE (1<<8)
+#define SPI_PATTERN_MODE_MASK (1<<8)
+#define SPI_PATTERN_MODE_SHIFT (8)
+#define SPI_PATTERN_MODE_DISABLED (0<<8)
+#define SPI_PATTERN_MODE_ENABLED (1<<8)
+#define SPI_PATTERN_SELECTOR (1<<9)
+#define SPI_PATTERN_SELECTOR_MASK (1<<9)
+#define SPI_PATTERN_SELECTOR_SHIFT (9)
+#define SPI_PATTERN_SELECTOR_UNTIL (0<<9)
+#define SPI_PATTERN_SELECTOR_WHILE (1<<9)
+
+//stream
+#define SPI_TX_STREAM_BIT (1<<0)
+#define SPI_TX_STREAM_BIT_MASK (1<<0)
+#define SPI_TX_STREAM_BIT_SHIFT (0)
+#define SPI_TX_STREAM_BIT_ZERO (0<<0)
+#define SPI_TX_STREAM_BIT_ONE (1<<0)
+#define SPI_TX_STREAM_MODE (1<<8)
+#define SPI_TX_STREAM_MODE_MASK (1<<8)
+#define SPI_TX_STREAM_MODE_SHIFT (8)
+#define SPI_TX_STREAM_MODE_DISABLED (0<<8)
+#define SPI_TX_STREAM_MODE_ENABLED (1<<8)
+#define SPI_TX_STREAM_STOP_WITH_RX_DMA_DONE (1<<16)
+#define SPI_TX_STREAM_STOP_WITH_RX_DMA_DONE_MASK (1<<16)
+#define SPI_TX_STREAM_STOP_WITH_RX_DMA_DONE_SHIFT (16)
+#define SPI_TX_STREAM_STOP_WITH_RX_DMA_DONE_DISABLED (0<<16)
+#define SPI_TX_STREAM_STOP_WITH_RX_DMA_DONE_ENABLED (1<<16)
+
+//pin_control
+#define SPI_CLK_CTRL(n) (((n)&3)<<0)
+#define SPI_CLK_CTRL_MASK (3<<0)
+#define SPI_CLK_CTRL_SHIFT (0)
+#define SPI_CLK_CTRL_SPI_CTRL (0<<0)
+#define SPI_CLK_CTRL_INPUT_CTRL (1<<0)
+#define SPI_CLK_CTRL_FORCE_0_CTRL (2<<0)
+#define SPI_CLK_CTRL_FORCE_1_CTRL (3<<0)
+#define SPI_DO_CTRL(n) (((n)&3)<<2)
+#define SPI_DO_CTRL_MASK (3<<2)
+#define SPI_DO_CTRL_SHIFT (2)
+#define SPI_DO_CTRL_SPI_CTRL (0<<2)
+#define SPI_DO_CTRL_INPUT_CTRL (1<<2)
+#define SPI_DO_CTRL_FORCE_0_CTRL (2<<2)
+#define SPI_DO_CTRL_FORCE_1_CTRL (3<<2)
+#define SPI_CS0_CTRL(n) (((n)&3)<<4)
+#define SPI_CS0_CTRL_MASK (3<<4)
+#define SPI_CS0_CTRL_SHIFT (4)
+#define SPI_CS0_CTRL_SPI_CTRL (0<<4)
+#define SPI_CS0_CTRL_INPUT_CTRL (1<<4)
+#define SPI_CS0_CTRL_FORCE_0_CTRL (2<<4)
+#define SPI_CS0_CTRL_FORCE_1_CTRL (3<<4)
+#define SPI_CS1_CTRL(n) (((n)&3)<<6)
+#define SPI_CS1_CTRL_MASK (3<<6)
+#define SPI_CS1_CTRL_SHIFT (6)
+#define SPI_CS1_CTRL_SPI_CTRL (0<<6)
+#define SPI_CS1_CTRL_INPUT_CTRL (1<<6)
+#define SPI_CS1_CTRL_FORCE_0_CTRL (2<<6)
+#define SPI_CS1_CTRL_FORCE_1_CTRL (3<<6)
+#define SPI_CS2_CTRL(n) (((n)&3)<<8)
+#define SPI_CS2_CTRL_MASK (3<<8)
+#define SPI_CS2_CTRL_SHIFT (8)
+#define SPI_CS2_CTRL_SPI_CTRL (0<<8)
+#define SPI_CS2_CTRL_INPUT_CTRL (1<<8)
+#define SPI_CS2_CTRL_FORCE_0_CTRL (2<<8)
+#define SPI_CS2_CTRL_FORCE_1_CTRL (3<<8)
+#define SPI_CS3_CTRL(n) (((n)&3)<<10)
+#define SPI_CS3_CTRL_MASK (3<<10)
+#define SPI_CS3_CTRL_SHIFT (10)
+#define SPI_CS3_CTRL_SPI_CTRL (0<<10)
+#define SPI_CS3_CTRL_INPUT_CTRL (1<<10)
+#define SPI_CS3_CTRL_FORCE_0_CTRL (2<<10)
+#define SPI_CS3_CTRL_FORCE_1_CTRL (3<<10)
+
+//irq
+#define SPI_MASK_RX_OVF_IRQ (1<<0)
+#define SPI_MASK_TX_TH_IRQ (1<<1)
+#define SPI_MASK_TX_DMA_IRQ (1<<2)
+#define SPI_MASK_RX_TH_IRQ (1<<3)
+#define SPI_MASK_RX_DMA_IRQ (1<<4)
+#define SPI_TX_THRESHOLD(n) (((n)&3)<<5)
+#define SPI_TX_THRESHOLD_MASK (3<<5)
+#define SPI_TX_THRESHOLD_SHIFT (5)
+#define SPI_TX_THRESHOLD_1_EMPTY_SLOT (0<<5)
+#define SPI_TX_THRESHOLD_4_EMPTY_SLOTS (1<<5)
+#define SPI_TX_THRESHOLD_8_EMPTY_SLOTS (2<<5)
+#define SPI_TX_THRESHOLD_12_EMPTY_SLOTS (3<<5)
+#define SPI_RX_THRESHOLD(n) (((n)&3)<<7)
+#define SPI_RX_THRESHOLD_MASK (3<<7)
+#define SPI_RX_THRESHOLD_SHIFT (7)
+#define SPI_RX_THRESHOLD_1_VALID_DATA (0<<7)
+#define SPI_RX_THRESHOLD_4_VALID_DATA (1<<7)
+#define SPI_RX_THRESHOLD_8_VALID_DATA (2<<7)
+#define SPI_RX_THRESHOLD_12_VALID_DATA (3<<7)
+#define SPI_IRQ_MASK(n) (((n)&31)<<0)
+#define SPI_IRQ_MASK_MASK (31<<0)
+#define SPI_IRQ_MASK_SHIFT (0)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_sysctrl.h b/arch/arm/include/asm/arch-rda/reg_sysctrl.h
new file mode 100644
index 0000000000..f4678e51eb
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_sysctrl.h
@@ -0,0 +1,15 @@
+#ifdef CONFIG_MACH_RDA8810
+#include "reg_sysctrl_rda8810.h"
+#elif defined(CONFIG_MACH_RDA8810E)
+#include "reg_sysctrl_rda8810e.h"
+#elif defined(CONFIG_MACH_RDA8820)
+#include "reg_sysctrl_rda8820.h"
+#elif defined(CONFIG_MACH_RDA8850)
+#include "reg_sysctrl_rda8850.h"
+#elif defined(CONFIG_MACH_RDA8850E)
+#include "reg_sysctrl_rda8850e.h"
+#elif defined(CONFIG_MACH_RDA8810H)
+#include "reg_sysctrl_rda8810h.h"
+#else
+#error "unknown MACH"
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810.h b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810.h
new file mode 100644
index 0000000000..a0a7181a54
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810.h
@@ -0,0 +1,1471 @@
+#ifndef _REG_SYSCTRL_H_
+#define _REG_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// AP_CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ CPU0 = 0x00000000,
+ CPU1 = 0x00000001
+} AP_CPU_ID_T;
+
+
+// ============================================================================
+// CPU_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side System clocks
+ CPU_CORE = 0x00000000,
+/// the following don't have an auto enable
+ CPU_DUMMY = 0x00000001
+} CPU_CLKS_T;
+
+#define NB_CPU_CLK_AEN (1)
+#define NB_CPU_CLK_EN (2)
+#define NB_CPU_CLK (2)
+
+// ============================================================================
+// AXI_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side System clocks: AXI and AHB0 and APB0
+ AHB0_CONF = 0x00000000,
+ APB0_CONF = 0x00000001,
+ AXI_VOC = 0x00000002,
+ AXI_DMA = 0x00000003,
+/// the following don't have an auto enable
+ AXI_ALWAYS = 0x00000004,
+ AXI_CONNECT = 0x00000005,
+ APB0_IRQ = 0x00000006
+} AXI_CLKS_T;
+
+#define NB_AXI_CLK_AEN (4)
+#define NB_AXI_CLK_EN (7)
+#define NB_AXI_CLK (7)
+
+// ============================================================================
+// AXIDIV2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIdiv2 side System clocks
+ AXIDIV2_IMEM = 0x00000000,
+/// the following don't have an auto enable
+ AXIDIV2_ALWAYS = 0x00000001,
+ AXIDIV2_CONNECT = 0x00000002,
+ AXIDIV2_VPU = 0x00000003
+} AXIDIV2_CLKS_T;
+
+#define NB_AXIDIV2_CLK_AEN (1)
+#define NB_AXIDIV2_CLK_EN (4)
+#define NB_AXIDIV2_CLK (4)
+
+// ============================================================================
+// GCG_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side System clocks
+ GCG_APB_CONF = 0x00000000,
+ GCG_GOUDA = 0x00000001,
+ GCG_CAMERA = 0x00000002,
+/// the following don't have an auto enable
+ GCG_ALWAYS = 0x00000003,
+ GCG_CONNECT = 0x00000004
+} GCG_CLKS_T;
+
+#define NB_GCG_CLK_AEN (3)
+#define NB_GCG_CLK_EN (5)
+#define NB_GCG_CLK (5)
+
+// ============================================================================
+// AHB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side System clocks
+ AHB1_USBC = 0x00000000,
+/// the following don't have an auto enable
+ AHB1_ALWAYS = 0x00000001,
+ AHB1_SPIFLASH = 0x00000002
+} AHB1_CLKS_T;
+
+#define NB_AHB1_CLK_AEN (1)
+#define NB_AHB1_CLK_EN (3)
+#define NB_AHB1_CLK (3)
+
+// ============================================================================
+// APB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side System clocks
+ APB1_CONF = 0x00000000,
+ APB1_AIF = 0x00000001,
+ APB1_AUIFC = 0x00000002,
+ APB1_AUIFC_CH0 = 0x00000003,
+ APB1_AUIFC_CH1 = 0x00000004,
+ APB1_I2C1 = 0x00000005,
+ APB1_I2C2 = 0x00000006,
+ APB1_I2C3 = 0x00000007,
+/// AP APB1 side divided clock (either divided by module or by clock_ctrl)
+ APB1D_OSC = 0x00000008,
+ APB1D_PWM = 0x00000009,
+/// the following don't have an auto enable
+ APB1_ALWAYS = 0x0000000A,
+ APB1_DAPLITE = 0x0000000B,
+ APB1_TIMER = 0x0000000C,
+ APB1_GPIO = 0x0000000D
+} APB1_CLKS_T;
+
+#define NB_APB1_CLK_AEN (10)
+#define NB_APB1_CLK_EN (14)
+#define NB_APB1_CLK (14)
+
+// ============================================================================
+// APB2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side System clocks
+ APB2_CONF = 0x00000000,
+ APB2_IFC = 0x00000001,
+ APB2_IFC_CH0 = 0x00000002,
+ APB2_IFC_CH1 = 0x00000003,
+ APB2_IFC_CH2 = 0x00000004,
+ APB2_IFC_CH3 = 0x00000005,
+ APB2_IFC_CH4 = 0x00000006,
+ APB2_IFC_CH5 = 0x00000007,
+ APB2_IFC_CH6 = 0x00000008,
+ APB2_IFC_CH7 = 0x00000009,
+ APB2_UART1 = 0x0000000A,
+ APB2_UART2 = 0x0000000B,
+ APB2_UART3 = 0x0000000C,
+ APB2_SPI1 = 0x0000000D,
+ APB2_SPI2 = 0x0000000E,
+ APB2_SPI3 = 0x0000000F,
+ APB2_SDMMC1 = 0x00000010,
+ APB2_SDMMC2 = 0x00000011,
+ APB2_SDMMC3 = 0x00000012,
+/// the following don't have an auto enable
+ APB2_ALWAYS = 0x00000013,
+ APB2_NANDFLASH = 0x00000014
+} APB2_CLKS_T;
+
+#define NB_APB2_CLK_AEN (19)
+#define NB_APB2_CLK_EN (21)
+#define NB_APB2_CLK (21)
+
+// ============================================================================
+// MEM_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side System clocks
+ MEM_CONF = 0x00000000,
+/// the following don't have an auto enable
+ MEM_DMC = 0x00000001,
+ MEM_GPU = 0x00000002,
+ MEM_VPU = 0x00000003,
+ MEM_DDRPHY_P = 0x00000004,
+ MEM_CONNECT = 0x00000005
+} MEM_CLKS_T;
+
+#define NB_MEM_CLK_AEN (1)
+#define NB_MEM_CLK_EN (6)
+#define NB_MEM_CLK (6)
+
+// ============================================================================
+// APO_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side Other clocks
+/// clocks with auto enble
+ APOC_VPU = 0x00000000,
+ APOC_BCK = 0x00000001,
+ APOC_UART1 = 0x00000002,
+ APOC_UART2 = 0x00000003,
+ APOC_UART3 = 0x00000004,
+ APOC_VOC_CORE = 0x00000005,
+ APOC_VOC = 0x00000006,
+/// the following don't have an auto enable
+ APOC_VOC_ALWAYS = 0x00000007,
+ APOC_DDRPHY_N = 0x00000008,
+ APOC_DDRPHY2XP = 0x00000009,
+ APOC_DDRPHY2XN = 0x0000000A,
+ APOC_GPU = 0x0000000B,
+ APOC_USBPHY = 0x0000000C,
+ APOC_CSI = 0x0000000D,
+ APOC_DSI = 0x0000000E,
+ APOC_GPIO = 0x0000000F,
+ APOC_SPIFLASH = 0x00000010,
+ APOC_PIX = 0x00000011,
+ APOC_PDGB = 0x00000012
+} APO_CLKS_T;
+
+#define NB_CLK_VOC_AEN_SYNC (5)
+#define NB_CLK_VOC_CORE (6)
+#define NB_APO_CLK_AEN (7)
+#define NB_CLK_VOC_END (8)
+#define NB_APO_CLK_EN (19)
+#define NB_APO_CLK (19)
+
+// ============================================================================
+// CPU_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side resets
+ CPU_RST_CORE = 0x00000000,
+ CPU_RST_SYS = 0x00000001
+} CPU_RESETS_T;
+
+#define NB_CPU_RST (2)
+
+// ============================================================================
+// AXI_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side resets: AXI and AHB0 and APB0
+ AXI_RST_VOC = 0x00000000,
+ AXI_RST_DMA = 0x00000001,
+ AXI_RST_SYS = 0x00000002,
+ AXI_RST_CONNECT = 0x00000003,
+ AHB0_RST_GPU = 0x00000004,
+ APB0_RST_VPU = 0x00000005,
+ APB0_RST_IRQ = 0x00000006
+} AXI_RESETS_T;
+
+#define NB_AXI_RST (7)
+
+// ============================================================================
+// AXIDIV2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIDIV2 side resets
+ AXIDIV2_RST_IMEM = 0x00000000,
+ AXIDIV2_RST_SYS = 0x00000001,
+ AXIDIV2_RST_VPU = 0x00000002
+} AXIDIV2_RESETS_T;
+
+#define NB_AXIDIV2_RST (3)
+
+// ============================================================================
+// GCG_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side resets
+ GCG_RST_SYS = 0x00000000,
+ GCG_RST_GOUDA = 0x00000001,
+ GCG_RST_CAMERA = 0x00000002
+} GCG_RESETS_T;
+
+#define NB_GCG_RST (3)
+
+// ============================================================================
+// AHB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side resets
+ AHB1_RST_SYS = 0x00000000,
+ AHB1_RST_USBC = 0x00000001,
+ AHB1_RST_SPIFLASH = 0x00000002
+} AHB1_RESETS_T;
+
+#define NB_AHB1_RST (3)
+
+// ============================================================================
+// APB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side resets
+ APB1_RST_SYS = 0x00000000,
+ APB1_RST_TIMER = 0x00000001,
+ APB1_RST_KEYPAD = 0x00000002,
+ APB1_RST_GPIO = 0x00000003,
+ APB1_RST_PWM = 0x00000004,
+ APB1_RST_AIF = 0x00000005,
+ APB1_RST_AUIFC = 0x00000006,
+ APB1_RST_I2C1 = 0x00000007,
+ APB1_RST_I2C2 = 0x00000008,
+ APB1_RST_I2C3 = 0x00000009,
+ APB1_RST_COM_REGS = 0x0000000A,
+ APB1_RST_DMC = 0x0000000B,
+ APB1_RST_DDRPHY_P = 0x0000000C,
+ APB1_RST_BB2G_XCPU = 0x0000000D,
+ APB1_RST_BB2G_BCPU = 0x0000000E,
+ APB1_RST_BB2G_AHBC = 0x0000000F,
+ APB1_RST_BB2G_DMA = 0x00000010,
+ APB1_RST_BB2G_A2A = 0x00000011,
+ APB1_RST_BB2G_XIFC = 0x00000012,
+ APB1_RST_BB2G_BIFC = 0x00000013,
+ APB1_RST_BB2G_BAHBC = 0x00000014,
+ APB1_RST_BB2G_MEM_BRIDGE = 0x00000015
+} APB1_RESETS_T;
+
+#define NB_APB1_RST (22)
+
+// ============================================================================
+// APB2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side resets
+ APB2_RST_SYS = 0x00000000,
+ APB2_RST_IFC = 0x00000001,
+ APB2_RST_UART1 = 0x00000002,
+ APB2_RST_UART2 = 0x00000003,
+ APB2_RST_UART3 = 0x00000004,
+ APB2_RST_SPI1 = 0x00000005,
+ APB2_RST_SPI2 = 0x00000006,
+ APB2_RST_SPI3 = 0x00000007,
+ APB2_RST_SDMMC1 = 0x00000008,
+ APB2_RST_SDMMC2 = 0x00000009,
+ APB2_RST_SDMMC3 = 0x0000000A,
+ APB2_RST_NANDFLASH = 0x0000000B
+} APB2_RESETS_T;
+
+#define NB_APB2_RST (12)
+
+// ============================================================================
+// MEM_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side resets
+ MEM_RST_SYS = 0x00000000,
+ MEM_RST_GPU = 0x00000001,
+ MEM_RST_VPU = 0x00000002,
+ MEM_RST_DMC = 0x00000003,
+ MEM_RST_DDRPHY_P = 0x00000004
+} MEM_RESETS_T;
+
+#define NB_MEM_RST (5)
+
+// ============================================================================
+// AP_OTHERS_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP Reset Other : resync on corresponding clock other
+ AP_RSTO_VOC = 0x00000000,
+ AP_RSTO_DDRPHY_N = 0x00000001,
+ AP_RSTO_DDRPHY2XP = 0x00000002,
+ AP_RSTO_DDRPHY2XN = 0x00000003,
+ AP_RSTO_GPU = 0x00000004,
+ AP_RSTO_VPU = 0x00000005,
+ AP_RSTO_BCK = 0x00000006,
+ AP_RSTO_UART1 = 0x00000007,
+ AP_RSTO_UART2 = 0x00000008,
+ AP_RSTO_UART3 = 0x00000009,
+ AP_RSTO_GPIO = 0x0000000A,
+ AP_RSTO_TIMER = 0x0000000B,
+ AP_RSTO_USBC = 0x0000000C,
+ AP_RSTO_DSI = 0x0000000D,
+ AP_RSTO_SPIFLASH = 0x0000000E,
+ AP_RSTO_TCK = 0x0000000F,
+ AP_RSTO_PDBG_XTAL = 0x00000010
+} AP_OTHERS_RESETS_T;
+
+#define NB_AP_RSTO (17)
+/// For REG_DBG protect lock/unlock value
+#define AP_CTRL_PROTECT_LOCK (0XA50000)
+#define AP_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_AP_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// Register protected by Write_Unlocked_H.
+ REG32 Cfg_Pll_Ctrl[4]; //0x00000004
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000014
+ REG32 Reset_Cause; //0x00000018
+ /// This register is protected.
+ REG32 CPU_Rst_Set; //0x0000001C
+ REG32 CPU_Rst_Clr; //0x00000020
+ /// This register is protected.
+ REG32 AXI_Rst_Set; //0x00000024
+ REG32 AXI_Rst_Clr; //0x00000028
+ /// This register is protected.
+ REG32 AXIDIV2_Rst_Set; //0x0000002C
+ REG32 AXIDIV2_Rst_Clr; //0x00000030
+ /// This register is protected.
+ REG32 GCG_Rst_Set; //0x00000034
+ REG32 GCG_Rst_Clr; //0x00000038
+ /// This register is protected.
+ REG32 AHB1_Rst_Set; //0x0000003C
+ REG32 AHB1_Rst_Clr; //0x00000040
+ /// This register is protected.
+ REG32 APB1_Rst_Set; //0x00000044
+ REG32 APB1_Rst_Clr; //0x00000048
+ /// This register is protected.
+ REG32 APB2_Rst_Set; //0x0000004C
+ REG32 APB2_Rst_Clr; //0x00000050
+ /// This register is protected.
+ REG32 MEM_Rst_Set; //0x00000054
+ REG32 MEM_Rst_Clr; //0x00000058
+ REG32 Clk_CPU_Mode; //0x0000005C
+ REG32 Clk_CPU_Enable; //0x00000060
+ /// This register is protected.
+ REG32 Clk_CPU_Disable; //0x00000064
+ REG32 Clk_AXI_Mode; //0x00000068
+ REG32 Clk_AXI_Enable; //0x0000006C
+ /// This register is protected.
+ REG32 Clk_AXI_Disable; //0x00000070
+ REG32 Clk_AXIDIV2_Mode; //0x00000074
+ REG32 Clk_AXIDIV2_Enable; //0x00000078
+ /// This register is protected.
+ REG32 Clk_AXIDIV2_Disable; //0x0000007C
+ REG32 Clk_GCG_Mode; //0x00000080
+ REG32 Clk_GCG_Enable; //0x00000084
+ /// This register is protected.
+ REG32 Clk_GCG_Disable; //0x00000088
+ REG32 Clk_AHB1_Mode; //0x0000008C
+ REG32 Clk_AHB1_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_AHB1_Disable; //0x00000094
+ REG32 Clk_APB1_Mode; //0x00000098
+ REG32 Clk_APB1_Enable; //0x0000009C
+ /// This register is protected.
+ REG32 Clk_APB1_Disable; //0x000000A0
+ REG32 Clk_APB2_Mode; //0x000000A4
+ REG32 Clk_APB2_Enable; //0x000000A8
+ /// This register is protected.
+ REG32 Clk_APB2_Disable; //0x000000AC
+ REG32 Clk_MEM_Mode; //0x000000B0
+ REG32 Clk_MEM_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_MEM_Disable; //0x000000B8
+ REG32 Clk_APO_Mode; //0x000000BC
+ REG32 Clk_APO_Enable; //0x000000C0
+ /// This register is protected.
+ REG32 Clk_APO_Disable; //0x000000C4
+ REG32 Cfg_Clk_AP_CPU; //0x000000C8
+ REG32 Cfg_Clk_AP_AXI; //0x000000CC
+ REG32 Cfg_Clk_AP_GCG; //0x000000D0
+ REG32 Cfg_Clk_AP_AHB1; //0x000000D4
+ REG32 Cfg_Clk_AP_APB1; //0x000000D8
+ REG32 Cfg_Clk_AP_APB2; //0x000000DC
+ REG32 Cfg_Clk_AP_MEM; //0x000000E0
+ REG32 Cfg_Clk_AP_GPU; //0x000000E4
+ REG32 Cfg_Clk_AP_VPU; //0x000000E8
+ REG32 Cfg_Clk_AP_VOC; //0x000000EC
+ REG32 Cfg_Clk_AP_SFLSH; //0x000000F0
+ REG32 Cfg_Clk_Uart[3]; //0x000000F4
+ REG32 L2cc_Ctrl; //0x00000100
+ REG32 Spi_Ctrl; //0x00000104
+ REG32 Memory_Margin; //0x00000108
+ REG32 Memory_Margin2; //0x0000010C
+ REG32 Memory_Observe; //0x00000110
+ REG32 Reserved_00000114[58]; //0x00000114
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000001FC
+} HWP_SYS_CTRL_AP_T;
+
+#define hwp_sysCtrlAp ((HWP_SYS_CTRL_AP_T*)(RDA_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_AP_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_AP_WRITE_UNLOCK (1<<31)
+
+//Cfg_Pll_Ctrl
+#define SYS_CTRL_AP_AP_PLL_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(n) (((n)&31)<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_MASK (31<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_SHIFT (16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(n) (((n)&31)<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_MASK (31<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_SHIFT (24)
+#define SYS_CTRL_AP_PLL_AP_CFG(n) (((n)&0x1F1F1111)<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_MASK (0x1F1F1111<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_AP_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_AP_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_AP_CPU_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_AP_CPU_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_AP_BUS_SEL_FAST_SLOW (1<<5)
+#define SYS_CTRL_AP_BUS_SEL_FAST_FAST (0<<5)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_SLOW (1<<7)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_FAST (0<<7)
+#define SYS_CTRL_AP_RF_DETECTED_OK (1<<8)
+#define SYS_CTRL_AP_RF_DETECTED_NO (0<<8)
+#define SYS_CTRL_AP_RF_DETECT_BYPASS (1<<9)
+#define SYS_CTRL_AP_RF_DETECT_RESET (1<<10)
+#define SYS_CTRL_AP_RF_SELECTED_L (1<<11)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_MASK (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_SHIFT (12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_NOT_LOCKED (0<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_MASK (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_SHIFT (13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_NOT_LOCKED (0<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_MASK (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_SHIFT (14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_NOT_LOCKED (0<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_USB (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_MASK (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_SHIFT (15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_NOT_LOCKED (0<<15)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_CPU (1<<20)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_BUS (1<<21)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_MASK (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_SHIFT (30)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_MASK (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_SHIFT (31)
+
+//Reset_Cause
+#define SYS_CTRL_AP_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_AP_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_AP_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_AP_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_AP_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_AP_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_AP_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_AP_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_AP_FONCTIONAL_TEST_MODE (1<<31)
+
+//CPU_Rst_Set
+#define SYS_CTRL_AP_SET_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SOFT_RST (1<<31)
+#define SYS_CTRL_AP_SET_CPU_RST(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_MASK (3<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SHIFT (0)
+
+//CPU_Rst_Clr
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_CPU_RST(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_MASK (3<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SHIFT (0)
+
+//AXI_Rst_Set
+#define SYS_CTRL_AP_SET_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_DMA (1<<1)
+#define SYS_CTRL_AP_SET_AXI_RST_SYS (1<<2)
+#define SYS_CTRL_AP_SET_AXI_RST_CONNECT (1<<3)
+#define SYS_CTRL_AP_SET_AHB0_RST_GPU (1<<4)
+#define SYS_CTRL_AP_SET_APB0_RST_VPU (1<<5)
+#define SYS_CTRL_AP_SET_APB0_RST_IRQ (1<<6)
+#define SYS_CTRL_AP_SET_AXI_RST(n) (((n)&0x7F)<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_MASK (0x7F<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_SHIFT (0)
+
+//AXI_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_DMA (1<<1)
+#define SYS_CTRL_AP_CLR_AXI_RST_SYS (1<<2)
+#define SYS_CTRL_AP_CLR_AXI_RST_CONNECT (1<<3)
+#define SYS_CTRL_AP_CLR_AHB0_RST_GPU (1<<4)
+#define SYS_CTRL_AP_CLR_APB0_RST_VPU (1<<5)
+#define SYS_CTRL_AP_CLR_APB0_RST_IRQ (1<<6)
+#define SYS_CTRL_AP_CLR_AXI_RST(n) (((n)&0x7F)<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_MASK (0x7F<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Set
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SHIFT (0)
+
+//GCG_Rst_Set
+#define SYS_CTRL_AP_SET_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_SET_GCG_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_SHIFT (0)
+
+//GCG_Rst_Clr
+#define SYS_CTRL_AP_CLR_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_CLR_GCG_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_SHIFT (0)
+
+//AHB1_Rst_Set
+#define SYS_CTRL_AP_SET_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_SET_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_SET_AHB1_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_SHIFT (0)
+
+//AHB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_CLR_AHB1_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SHIFT (0)
+
+//APB1_Rst_Set
+#define SYS_CTRL_AP_SET_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_SET_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_SET_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_SET_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_SET_APB1_RST_AUIFC (1<<6)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C1 (1<<7)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C2 (1<<8)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C3 (1<<9)
+#define SYS_CTRL_AP_SET_APB1_RST_COM_REGS (1<<10)
+#define SYS_CTRL_AP_SET_APB1_RST_DMC (1<<11)
+#define SYS_CTRL_AP_SET_APB1_RST_DDRPHY_P (1<<12)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XCPU (1<<13)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BCPU (1<<14)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_AHBC (1<<15)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_DMA (1<<16)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_A2A (1<<17)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XIFC (1<<18)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BIFC (1<<19)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BAHBC (1<<20)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_MEM_BRIDGE (1<<21)
+#define SYS_CTRL_AP_SET_APB1_RST(n) (((n)&0x3FFFFF)<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_MASK (0x3FFFFF<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_SHIFT (0)
+
+//APB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_CLR_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_CLR_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_CLR_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_CLR_APB1_RST_AUIFC (1<<6)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C1 (1<<7)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C2 (1<<8)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C3 (1<<9)
+#define SYS_CTRL_AP_CLR_APB1_RST_COM_REGS (1<<10)
+#define SYS_CTRL_AP_CLR_APB1_RST_DMC (1<<11)
+#define SYS_CTRL_AP_CLR_APB1_RST_DDRPHY_P (1<<12)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XCPU (1<<13)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BCPU (1<<14)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_AHBC (1<<15)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_DMA (1<<16)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_A2A (1<<17)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XIFC (1<<18)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BIFC (1<<19)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BAHBC (1<<20)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_MEM_BRIDGE (1<<21)
+#define SYS_CTRL_AP_CLR_APB1_RST(n) (((n)&0x3FFFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_MASK (0x3FFFFF<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_SHIFT (0)
+
+//APB2_Rst_Set
+#define SYS_CTRL_AP_SET_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_SET_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_SET_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_SET_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_SET_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_SET_APB2_RST(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_SHIFT (0)
+
+//APB2_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_CLR_APB2_RST(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_SHIFT (0)
+
+//MEM_Rst_Set
+#define SYS_CTRL_AP_SET_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_GPU (1<<1)
+#define SYS_CTRL_AP_SET_MEM_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_MEM_RST_DMC (1<<3)
+#define SYS_CTRL_AP_SET_MEM_RST_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_SET_MEM_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_MASK (31<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_SHIFT (0)
+
+//MEM_Rst_Clr
+#define SYS_CTRL_AP_CLR_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_GPU (1<<1)
+#define SYS_CTRL_AP_CLR_MEM_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_MEM_RST_DMC (1<<3)
+#define SYS_CTRL_AP_CLR_MEM_RST_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_CLR_MEM_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_MASK (31<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_SHIFT (0)
+
+//Clk_CPU_Mode
+#define SYS_CTRL_AP_MODE_CLK_CPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_CPU_MANUAL (1<<0)
+
+//Clk_CPU_Enable
+#define SYS_CTRL_AP_ENABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_ENABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_SHIFT (0)
+
+//Clk_CPU_Disable
+#define SYS_CTRL_AP_DISABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_DISABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_SHIFT (0)
+
+//Clk_AXI_Mode
+#define SYS_CTRL_AP_MODE_AHB0_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_AHB0_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB0_CONF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB0_CONF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_AXI_VOC_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_AXI_DMA_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_AXI_DMA_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_CLK_AXI(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_MASK (15<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Enable
+#define SYS_CTRL_AP_ENABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXI_DMA (1<<3)
+#define SYS_CTRL_AP_ENABLE_AXI_ALWAYS (1<<4)
+#define SYS_CTRL_AP_ENABLE_AXI_CONNECT (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB0_IRQ (1<<6)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI(n) (((n)&0x7F)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_MASK (0x7F<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Disable
+#define SYS_CTRL_AP_DISABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXI_DMA (1<<3)
+#define SYS_CTRL_AP_DISABLE_AXI_ALWAYS (1<<4)
+#define SYS_CTRL_AP_DISABLE_AXI_CONNECT (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB0_IRQ (1<<6)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI(n) (((n)&0x7F)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_MASK (0x7F<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXIDIV2_Mode
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_MANUAL (1<<0)
+
+//Clk_AXIDIV2_Enable
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_AXIDIV2_Disable
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_GCG_Mode
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_CLK_GCG(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_MASK (7<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Enable
+#define SYS_CTRL_AP_ENABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_ENABLE_GCG_ALWAYS (1<<3)
+#define SYS_CTRL_AP_ENABLE_GCG_CONNECT (1<<4)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_MASK (31<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Disable
+#define SYS_CTRL_AP_DISABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_DISABLE_GCG_ALWAYS (1<<3)
+#define SYS_CTRL_AP_DISABLE_GCG_CONNECT (1<<4)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_MASK (31<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_SHIFT (0)
+
+//Clk_AHB1_Mode
+#define SYS_CTRL_AP_MODE_CLK_AHB1_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AHB1_MANUAL (1<<0)
+
+//Clk_AHB1_Enable
+#define SYS_CTRL_AP_ENABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_ENABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_MASK (7<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_AHB1_Disable
+#define SYS_CTRL_AP_DISABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_DISABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_MASK (7<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_APB1_Mode
+#define SYS_CTRL_AP_MODE_APB1_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB1_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB1_AIF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB1_I2C1_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB1_I2C1_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB1_I2C2_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB1_I2C2_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB1_I2C3_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB1_I2C3_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_CLK_APB1(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Enable
+#define SYS_CTRL_AP_ENABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH0 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH1 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C1 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C2 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C3 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB1D_PWM (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB1_ALWAYS (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB1_DAPLITE (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB1_TIMER (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB1_GPIO (1<<13)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_MASK (0x3FFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Disable
+#define SYS_CTRL_AP_DISABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH0 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH1 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C1 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C2 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C3 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB1D_PWM (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB1_ALWAYS (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB1_DAPLITE (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB1_TIMER (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB1_GPIO (1<<13)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1(n) (((n)&0x3FFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_MASK (0x3FFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB2_Mode
+#define SYS_CTRL_AP_MODE_APB2_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB2_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB2_IFC_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB2_UART1_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB2_UART1_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB2_UART2_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB2_UART2_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB2_UART3_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB2_UART3_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_AUTOMATIC (0<<13)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_MANUAL (1<<13)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_AUTOMATIC (0<<14)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_MANUAL (1<<14)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_AUTOMATIC (0<<15)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_MANUAL (1<<15)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_AUTOMATIC (0<<16)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_MANUAL (1<<16)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_AUTOMATIC (0<<17)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_MANUAL (1<<17)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_AUTOMATIC (0<<18)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_MANUAL (1<<18)
+#define SYS_CTRL_AP_MODE_CLK_APB2(n) (((n)&0x7FFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_MASK (0x7FFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Enable
+#define SYS_CTRL_AP_ENABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB2_UART1 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB2_UART2 (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB2_UART3 (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI1 (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI2 (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI3 (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC1 (1<<16)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC2 (1<<17)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC3 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APB2_ALWAYS (1<<19)
+#define SYS_CTRL_AP_ENABLE_APB2_NANDFLASH (1<<20)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Disable
+#define SYS_CTRL_AP_DISABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB2_UART1 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB2_UART2 (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB2_UART3 (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI1 (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI2 (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI3 (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC1 (1<<16)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC2 (1<<17)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC3 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APB2_ALWAYS (1<<19)
+#define SYS_CTRL_AP_DISABLE_APB2_NANDFLASH (1<<20)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_SHIFT (0)
+
+//Clk_MEM_Mode
+#define SYS_CTRL_AP_MODE_CLK_MEM_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_MEM_MANUAL (1<<0)
+
+//Clk_MEM_Enable
+#define SYS_CTRL_AP_ENABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_ENABLE_MEM_GPU (1<<2)
+#define SYS_CTRL_AP_ENABLE_MEM_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_MEM_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_ENABLE_MEM_CONNECT (1<<5)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_MASK (0x3F<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_SHIFT (0)
+
+//Clk_MEM_Disable
+#define SYS_CTRL_AP_DISABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_DISABLE_MEM_GPU (1<<2)
+#define SYS_CTRL_AP_DISABLE_MEM_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_MEM_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_DISABLE_MEM_CONNECT (1<<5)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_MASK (0x3F<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_SHIFT (0)
+
+//Clk_APO_Mode
+#define SYS_CTRL_AP_MODE_APOC_VPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APOC_VPU_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APOC_UART1_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART1_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART3_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART3_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_CLK_APO(n) (((n)&0x7F)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_MASK (0x7F<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Enable
+#define SYS_CTRL_AP_ENABLE_APOC_VPU (1<<0)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK (1<<1)
+#define SYS_CTRL_AP_ENABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC (1<<6)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_ALWAYS (1<<7)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY_N (1<<8)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XP (1<<9)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XN (1<<10)
+#define SYS_CTRL_AP_ENABLE_APOC_GPU (1<<11)
+#define SYS_CTRL_AP_ENABLE_APOC_USBPHY (1<<12)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI (1<<13)
+#define SYS_CTRL_AP_ENABLE_APOC_DSI (1<<14)
+#define SYS_CTRL_AP_ENABLE_APOC_GPIO (1<<15)
+#define SYS_CTRL_AP_ENABLE_APOC_SPIFLASH (1<<16)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX (1<<17)
+#define SYS_CTRL_AP_ENABLE_APOC_PDGB (1<<18)
+#define SYS_CTRL_AP_ENABLE_CLK_APO(n) (((n)&0x7FFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_MASK (0x7FFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Disable
+#define SYS_CTRL_AP_DISABLE_APOC_VPU (1<<0)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK (1<<1)
+#define SYS_CTRL_AP_DISABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC (1<<6)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_ALWAYS (1<<7)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY_N (1<<8)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XP (1<<9)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XN (1<<10)
+#define SYS_CTRL_AP_DISABLE_APOC_GPU (1<<11)
+#define SYS_CTRL_AP_DISABLE_APOC_USBPHY (1<<12)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI (1<<13)
+#define SYS_CTRL_AP_DISABLE_APOC_DSI (1<<14)
+#define SYS_CTRL_AP_DISABLE_APOC_GPIO (1<<15)
+#define SYS_CTRL_AP_DISABLE_APOC_SPIFLASH (1<<16)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX (1<<17)
+#define SYS_CTRL_AP_DISABLE_APOC_PDGB (1<<18)
+#define SYS_CTRL_AP_DISABLE_CLK_APO(n) (((n)&0x7FFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_MASK (0x7FFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_SHIFT (0)
+
+//Cfg_Clk_AP_CPU
+#define SYS_CTRL_AP_AP_CPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_BUS_DIV_SEL(n) (((n)&3)<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_MASK (3<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_SHIFT (16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV2 (0<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV3 (1<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV4 (2<<16)
+#define SYS_CTRL_AP_AP_CPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AXI
+#define SYS_CTRL_AP_AP_AXI_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AXI_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AXI_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_GCG
+#define SYS_CTRL_AP_AP_GCG_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GCG_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_GCG_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AHB1
+#define SYS_CTRL_AP_AP_AHB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AHB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB1
+#define SYS_CTRL_AP_AP_APB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB2
+#define SYS_CTRL_AP_AP_APB2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB2_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_MEM
+#define SYS_CTRL_AP_AP_MEM_SRC_DIV2 (1<<12)
+
+//Cfg_Clk_AP_GPU
+#define SYS_CTRL_AP_AP_GPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_GPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VPU
+#define SYS_CTRL_AP_AP_VPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VOC
+#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_SFLSH
+#define SYS_CTRL_AP_AP_SFLSH_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_SFLSH_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Uart
+#define SYS_CTRL_AP_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_AP_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_AP_UART_SEL_PLL_PLL (1<<12)
+
+//L2cc_Ctrl
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_MASK (15<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_SHIFT (0)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M(n) (((n)&15)<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_MASK (15<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_SHIFT (4)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_MASK (15<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_SHIFT (8)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_MASK (15<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_SHIFT (12)
+#define SYS_CTRL_AP_ARAP_L2CC_1_M (1<<16)
+#define SYS_CTRL_AP_AWAP_L2CC_1_M (1<<17)
+#define SYS_CTRL_AP_ARAP_MODEM_MEM_AHBS_M (1<<18)
+#define SYS_CTRL_AP_AWAP_MODEM_MEM_AHBS_M (1<<19)
+#define SYS_CTRL_AP_ARAP_MERGE1M (1<<20)
+#define SYS_CTRL_AP_AWAP_MERGE1M (1<<21)
+#define SYS_CTRL_AP_ARAP_MERGE2M (1<<22)
+#define SYS_CTRL_AP_AWAP_MERGE2M (1<<23)
+#define SYS_CTRL_AP_RESERVE1(n) (((n)&0xFF)<<24)
+#define SYS_CTRL_AP_RESERVE1_MASK (0xFF<<24)
+#define SYS_CTRL_AP_RESERVE1_SHIFT (24)
+
+//Spi_Ctrl
+#define SYS_CTRL_AP_LIMITED_EN_SPI1 (1<<0)
+#define SYS_CTRL_AP_LPSEN_SPI1 (1<<1)
+#define SYS_CTRL_AP_LIMITED_EN_SPI2 (1<<2)
+#define SYS_CTRL_AP_LPSEN_SPI2 (1<<3)
+#define SYS_CTRL_AP_LIMITED_EN_SPI3 (1<<4)
+#define SYS_CTRL_AP_LPSEN_SPI3 (1<<5)
+#define SYS_CTRL_AP_FBUSWID_NFSC (1<<6)
+#define SYS_CTRL_AP_RESERVE3 (1<<7)
+#define SYS_CTRL_AP_DMC_CFG(n) (((n)&0x3FF)<<8)
+#define SYS_CTRL_AP_DMC_CFG_MASK (0x3FF<<8)
+#define SYS_CTRL_AP_DMC_CFG_SHIFT (8)
+#define SYS_CTRL_AP_RESERVE2(n) (((n)&0x3FFF)<<18)
+#define SYS_CTRL_AP_RESERVE2_MASK (0x3FFF<<18)
+#define SYS_CTRL_AP_RESERVE2_SHIFT (18)
+
+//Memory_Margin
+#define SYS_CTRL_AP_EMAW_VOC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_VOC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_VOC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_VOC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_VOC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_VOC_SHIFT (2)
+#define SYS_CTRL_AP_EMAW_VPU(n) (((n)&3)<<5)
+#define SYS_CTRL_AP_EMAW_VPU_MASK (3<<5)
+#define SYS_CTRL_AP_EMAW_VPU_SHIFT (5)
+#define SYS_CTRL_AP_EMA_VPU(n) (((n)&7)<<7)
+#define SYS_CTRL_AP_EMA_VPU_MASK (7<<7)
+#define SYS_CTRL_AP_EMA_VPU_SHIFT (7)
+#define SYS_CTRL_AP_EMAW_GPU(n) (((n)&3)<<10)
+#define SYS_CTRL_AP_EMAW_GPU_MASK (3<<10)
+#define SYS_CTRL_AP_EMAW_GPU_SHIFT (10)
+#define SYS_CTRL_AP_EMA_GPU(n) (((n)&7)<<12)
+#define SYS_CTRL_AP_EMA_GPU_MASK (7<<12)
+#define SYS_CTRL_AP_EMA_GPU_SHIFT (12)
+#define SYS_CTRL_AP_EMAW_GOUDA(n) (((n)&3)<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_MASK (3<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_SHIFT (15)
+#define SYS_CTRL_AP_EMA_GOUDA(n) (((n)&7)<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_MASK (7<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_SHIFT (17)
+#define SYS_CTRL_AP_EMAW_IMEM(n) (((n)&3)<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_MASK (3<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_SHIFT (20)
+#define SYS_CTRL_AP_EMA_IMEM(n) (((n)&7)<<22)
+#define SYS_CTRL_AP_EMA_IMEM_MASK (7<<22)
+#define SYS_CTRL_AP_EMA_IMEM_SHIFT (22)
+#define SYS_CTRL_AP_EMAW_USB(n) (((n)&3)<<25)
+#define SYS_CTRL_AP_EMAW_USB_MASK (3<<25)
+#define SYS_CTRL_AP_EMAW_USB_SHIFT (25)
+#define SYS_CTRL_AP_EMA_USB(n) (((n)&7)<<27)
+#define SYS_CTRL_AP_EMA_USB_MASK (7<<27)
+#define SYS_CTRL_AP_EMA_USB_SHIFT (27)
+
+//Memory_Margin2
+#define SYS_CTRL_AP_EMAW_NFSC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_NFSC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_NFSC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_NFSC_SHIFT (2)
+#define SYS_CTRL_AP_EMA_VPUROM(n) (((n)&7)<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_MASK (7<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_SHIFT (5)
+#define SYS_CTRL_AP_EMA_IMEMROM(n) (((n)&7)<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_MASK (7<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_SHIFT (8)
+#define SYS_CTRL_AP_KEN_VPUROM (1<<11)
+#define SYS_CTRL_AP_PGEN_VPUROM (1<<12)
+#define SYS_CTRL_AP_KEN_IMEMROM (1<<13)
+#define SYS_CTRL_AP_PGEN_IMEMROM (1<<14)
+
+//Memory_Observe
+#define SYS_CTRL_AP_MEM_OBSERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Reserve
+#define SYS_CTRL_AP_RESERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810e.h b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810e.h
new file mode 100644
index 0000000000..ab7ba4c951
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810e.h
@@ -0,0 +1,1578 @@
+#ifndef _REG_SYSCTRL_H_
+#define _REG_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// AP_CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ CPU0 = 0x00000000,
+ CPU1 = 0x00000001
+} AP_CPU_ID_T;
+
+
+// ============================================================================
+// CPU_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side System clocks
+ CPU_CORE = 0x00000000,
+/// the following don't have an auto enable
+ CPU_DUMMY = 0x00000001
+} CPU_CLKS_T;
+
+#define NB_CPU_CLK_AEN (1)
+#define NB_CPU_CLK_EN (2)
+#define NB_CPU_CLK (2)
+
+// ============================================================================
+// AXI_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side System clocks: AXI and AHB0 and APB0
+ AHB0_CONF = 0x00000000,
+ APB0_CONF = 0x00000001,
+ AXI_VOC = 0x00000002,
+ AXI_DMA = 0x00000003,
+/// the following don't have an auto enable
+ AXI_ALWAYS = 0x00000004,
+ AXI_CONNECT = 0x00000005,
+ APB0_IRQ = 0x00000006
+} AXI_CLKS_T;
+
+#define NB_AXI_CLK_AEN (4)
+#define NB_AXI_CLK_EN (7)
+#define NB_AXI_CLK (7)
+
+// ============================================================================
+// AXIDIV2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIdiv2 side System clocks
+ AXIDIV2_IMEM = 0x00000000,
+/// the following don't have an auto enable
+ AXIDIV2_ALWAYS = 0x00000001,
+ AXIDIV2_CONNECT = 0x00000002,
+ AXIDIV2_VPU = 0x00000003
+} AXIDIV2_CLKS_T;
+
+#define NB_AXIDIV2_CLK_AEN (1)
+#define NB_AXIDIV2_CLK_EN (4)
+#define NB_AXIDIV2_CLK (4)
+
+// ============================================================================
+// GCG_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side System clocks
+ GCG_APB_CONF = 0x00000000,
+ GCG_GOUDA = 0x00000001,
+ GCG_CAMERA = 0x00000002,
+/// the following don't have an auto enable
+ GCG_ALWAYS = 0x00000003,
+ GCG_CONNECT = 0x00000004
+} GCG_CLKS_T;
+
+#define NB_GCG_CLK_AEN (3)
+#define NB_GCG_CLK_EN (5)
+#define NB_GCG_CLK (5)
+
+// ============================================================================
+// AHB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side System clocks
+ AHB1_USBC = 0x00000000,
+/// the following don't have an auto enable
+ AHB1_ALWAYS = 0x00000001,
+ AHB1_SPIFLASH = 0x00000002
+} AHB1_CLKS_T;
+
+#define NB_AHB1_CLK_AEN (1)
+#define NB_AHB1_CLK_EN (3)
+#define NB_AHB1_CLK (3)
+
+// ============================================================================
+// APB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side System clocks
+ APB1_CONF = 0x00000000,
+ APB1_AIF = 0x00000001,
+ APB1_AUIFC = 0x00000002,
+ APB1_AUIFC_CH0 = 0x00000003,
+ APB1_AUIFC_CH1 = 0x00000004,
+ APB1_I2C1 = 0x00000005,
+ APB1_I2C2 = 0x00000006,
+ APB1_I2C3 = 0x00000007,
+/// AP APB1 side divided clock (either divided by module or by clock_ctrl)
+ APB1D_OSC = 0x00000008,
+ APB1D_PWM = 0x00000009,
+/// the following don't have an auto enable
+ APB1_ALWAYS = 0x0000000A,
+ APB1_DAPLITE = 0x0000000B,
+ APB1_TIMER = 0x0000000C,
+ APB1_GPIO = 0x0000000D
+} APB1_CLKS_T;
+
+#define NB_APB1_CLK_AEN (10)
+#define NB_APB1_CLK_EN (14)
+#define NB_APB1_CLK (14)
+
+// ============================================================================
+// APB2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side System clocks
+ APB2_CONF = 0x00000000,
+ APB2_IFC = 0x00000001,
+ APB2_IFC_CH0 = 0x00000002,
+ APB2_IFC_CH1 = 0x00000003,
+ APB2_IFC_CH2 = 0x00000004,
+ APB2_IFC_CH3 = 0x00000005,
+ APB2_IFC_CH4 = 0x00000006,
+ APB2_IFC_CH5 = 0x00000007,
+ APB2_IFC_CH6 = 0x00000008,
+ APB2_IFC_CH7 = 0x00000009,
+ APB2_UART1 = 0x0000000A,
+ APB2_UART2 = 0x0000000B,
+ APB2_UART3 = 0x0000000C,
+ APB2_SPI1 = 0x0000000D,
+ APB2_SPI2 = 0x0000000E,
+ APB2_SPI3 = 0x0000000F,
+ APB2_SDMMC1 = 0x00000010,
+ APB2_SDMMC2 = 0x00000011,
+ APB2_SDMMC3 = 0x00000012,
+/// the following don't have an auto enable
+ APB2_ALWAYS = 0x00000013,
+ APB2_NANDFLASH = 0x00000014
+} APB2_CLKS_T;
+
+#define NB_APB2_CLK_AEN (19)
+#define NB_APB2_CLK_EN (21)
+#define NB_APB2_CLK (21)
+
+// ============================================================================
+// MEM_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side System clocks
+ MEM_CONF = 0x00000000,
+/// the following don't have an auto enable
+ MEM_DMC = 0x00000001,
+ MEM_GPU = 0x00000002,
+ MEM_VPU = 0x00000003,
+ MEM_DDRPHY_P = 0x00000004,
+ MEM_CONNECT = 0x00000005
+} MEM_CLKS_T;
+
+#define NB_MEM_CLK_AEN (1)
+#define NB_MEM_CLK_EN (6)
+#define NB_MEM_CLK (6)
+
+// ============================================================================
+// APO_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side Other clocks
+/// clocks with auto enble
+ APOC_VPU = 0x00000000,
+ APOC_BCK = 0x00000001,
+ APOC_UART1 = 0x00000002,
+ APOC_UART2 = 0x00000003,
+ APOC_UART3 = 0x00000004,
+ APOC_VOC_CORE = 0x00000005,
+ APOC_VOC = 0x00000006,
+/// the following don't have an auto enable
+ APOC_VOC_ALWAYS = 0x00000007,
+ APOC_DDRPHY_N = 0x00000008,
+ APOC_DDRPHY2XP = 0x00000009,
+ APOC_DDRPHY2XN = 0x0000000A,
+ APOC_GPU = 0x0000000B,
+ APOC_USBPHY = 0x0000000C,
+ APOC_CSI = 0x0000000D,
+ APOC_DSI = 0x0000000E,
+ APOC_GPIO = 0x0000000F,
+ APOC_SPIFLASH = 0x00000010,
+ APOC_PIX = 0x00000011,
+ APOC_PDGB = 0x00000012
+} APO_CLKS_T;
+
+#define NB_CLK_VOC_AEN_SYNC (5)
+#define NB_CLK_VOC_CORE (6)
+#define NB_APO_CLK_AEN (7)
+#define NB_CLK_VOC_END (8)
+#define NB_APO_CLK_EN (19)
+#define NB_APO_CLK (19)
+
+// ============================================================================
+// CPU_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side resets
+ CPU_RST_CORE = 0x00000000,
+ CPU_RST_SYS = 0x00000001
+} CPU_RESETS_T;
+
+#define NB_CPU_RST (2)
+
+// ============================================================================
+// AXI_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side resets: AXI and AHB0 and APB0
+ AXI_RST_VOC = 0x00000000,
+ AXI_RST_DMA = 0x00000001,
+ AXI_RST_SYS = 0x00000002,
+ AXI_RST_CONNECT = 0x00000003,
+ AHB0_RST_GPU = 0x00000004,
+ APB0_RST_VPU = 0x00000005,
+ APB0_RST_IRQ = 0x00000006
+} AXI_RESETS_T;
+
+#define NB_AXI_RST (7)
+
+// ============================================================================
+// AXIDIV2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIDIV2 side resets
+ AXIDIV2_RST_IMEM = 0x00000000,
+ AXIDIV2_RST_SYS = 0x00000001,
+ AXIDIV2_RST_VPU = 0x00000002
+} AXIDIV2_RESETS_T;
+
+#define NB_AXIDIV2_RST (3)
+
+// ============================================================================
+// GCG_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side resets
+ GCG_RST_SYS = 0x00000000,
+ GCG_RST_GOUDA = 0x00000001,
+ GCG_RST_CAMERA = 0x00000002
+} GCG_RESETS_T;
+
+#define NB_GCG_RST (3)
+
+// ============================================================================
+// AHB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side resets
+ AHB1_RST_SYS = 0x00000000,
+ AHB1_RST_USBC = 0x00000001,
+ AHB1_RST_SPIFLASH = 0x00000002
+} AHB1_RESETS_T;
+
+#define NB_AHB1_RST (3)
+
+// ============================================================================
+// APB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side resets
+ APB1_RST_SYS = 0x00000000,
+ APB1_RST_TIMER = 0x00000001,
+ APB1_RST_KEYPAD = 0x00000002,
+ APB1_RST_GPIO = 0x00000003,
+ APB1_RST_PWM = 0x00000004,
+ APB1_RST_AIF = 0x00000005,
+ APB1_RST_AUIFC = 0x00000006,
+ APB1_RST_I2C1 = 0x00000007,
+ APB1_RST_I2C2 = 0x00000008,
+ APB1_RST_I2C3 = 0x00000009,
+ APB1_RST_COM_REGS = 0x0000000A,
+ APB1_RST_DMC = 0x0000000B,
+ APB1_RST_DDRPHY_P = 0x0000000C,
+ APB1_RST_BB2G_XCPU = 0x0000000D,
+ APB1_RST_BB2G_BCPU = 0x0000000E,
+ APB1_RST_BB2G_AHBC = 0x0000000F,
+ APB1_RST_BB2G_DMA = 0x00000010,
+ APB1_RST_BB2G_A2A = 0x00000011,
+ APB1_RST_BB2G_XIFC = 0x00000012,
+ APB1_RST_BB2G_BIFC = 0x00000013,
+ APB1_RST_BB2G_BAHBC = 0x00000014,
+ APB1_RST_BB2G_MEM_BRIDGE = 0x00000015
+} APB1_RESETS_T;
+
+#define NB_APB1_RST (22)
+
+// ============================================================================
+// APB2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side resets
+ APB2_RST_SYS = 0x00000000,
+ APB2_RST_IFC = 0x00000001,
+ APB2_RST_UART1 = 0x00000002,
+ APB2_RST_UART2 = 0x00000003,
+ APB2_RST_UART3 = 0x00000004,
+ APB2_RST_SPI1 = 0x00000005,
+ APB2_RST_SPI2 = 0x00000006,
+ APB2_RST_SPI3 = 0x00000007,
+ APB2_RST_SDMMC1 = 0x00000008,
+ APB2_RST_SDMMC2 = 0x00000009,
+ APB2_RST_SDMMC3 = 0x0000000A,
+ APB2_RST_NANDFLASH = 0x0000000B
+} APB2_RESETS_T;
+
+#define NB_APB2_RST (12)
+
+// ============================================================================
+// MEM_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side resets
+ MEM_RST_SYS = 0x00000000,
+ MEM_RST_GPU = 0x00000001,
+ MEM_RST_VPU = 0x00000002,
+ MEM_RST_DMC = 0x00000003,
+ MEM_RST_DDRPHY_P = 0x00000004
+} MEM_RESETS_T;
+
+#define NB_MEM_RST (5)
+
+// ============================================================================
+// AP_OTHERS_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP Reset Other : resync on corresponding clock other
+ AP_RSTO_VOC = 0x00000000,
+ AP_RSTO_DDRPHY_N = 0x00000001,
+ AP_RSTO_DDRPHY2XP = 0x00000002,
+ AP_RSTO_DDRPHY2XN = 0x00000003,
+ AP_RSTO_GPU = 0x00000004,
+ AP_RSTO_VPU = 0x00000005,
+ AP_RSTO_BCK = 0x00000006,
+ AP_RSTO_UART1 = 0x00000007,
+ AP_RSTO_UART2 = 0x00000008,
+ AP_RSTO_UART3 = 0x00000009,
+ AP_RSTO_GPIO = 0x0000000A,
+ AP_RSTO_TIMER = 0x0000000B,
+ AP_RSTO_USBC = 0x0000000C,
+ AP_RSTO_DSI = 0x0000000D,
+ AP_RSTO_SPIFLASH = 0x0000000E,
+ AP_RSTO_TCK = 0x0000000F,
+ AP_RSTO_PDBG_XTAL = 0x00000010
+} AP_OTHERS_RESETS_T;
+
+#define NB_AP_RSTO (17)
+/// For REG_DBG protect lock/unlock value
+#define AP_CTRL_PROTECT_LOCK (0XA50000)
+#define AP_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_AP_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// Register protected by Write_Unlocked_H.
+ REG32 Cfg_Pll_Ctrl[4]; //0x00000004
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000014
+ REG32 Reset_Cause; //0x00000018
+ /// This register is protected.
+ REG32 CPU_Rst_Set; //0x0000001C
+ REG32 CPU_Rst_Clr; //0x00000020
+ /// This register is protected.
+ REG32 AXI_Rst_Set; //0x00000024
+ REG32 AXI_Rst_Clr; //0x00000028
+ /// This register is protected.
+ REG32 AXIDIV2_Rst_Set; //0x0000002C
+ REG32 AXIDIV2_Rst_Clr; //0x00000030
+ /// This register is protected.
+ REG32 GCG_Rst_Set; //0x00000034
+ REG32 GCG_Rst_Clr; //0x00000038
+ /// This register is protected.
+ REG32 AHB1_Rst_Set; //0x0000003C
+ REG32 AHB1_Rst_Clr; //0x00000040
+ /// This register is protected.
+ REG32 APB1_Rst_Set; //0x00000044
+ REG32 APB1_Rst_Clr; //0x00000048
+ /// This register is protected.
+ REG32 APB2_Rst_Set; //0x0000004C
+ REG32 APB2_Rst_Clr; //0x00000050
+ /// This register is protected.
+ REG32 MEM_Rst_Set; //0x00000054
+ REG32 MEM_Rst_Clr; //0x00000058
+ REG32 Clk_CPU_Mode; //0x0000005C
+ REG32 Clk_CPU_Enable; //0x00000060
+ /// This register is protected.
+ REG32 Clk_CPU_Disable; //0x00000064
+ REG32 Clk_AXI_Mode; //0x00000068
+ REG32 Clk_AXI_Enable; //0x0000006C
+ /// This register is protected.
+ REG32 Clk_AXI_Disable; //0x00000070
+ REG32 Clk_AXIDIV2_Mode; //0x00000074
+ REG32 Clk_AXIDIV2_Enable; //0x00000078
+ /// This register is protected.
+ REG32 Clk_AXIDIV2_Disable; //0x0000007C
+ REG32 Clk_GCG_Mode; //0x00000080
+ REG32 Clk_GCG_Enable; //0x00000084
+ /// This register is protected.
+ REG32 Clk_GCG_Disable; //0x00000088
+ REG32 Clk_AHB1_Mode; //0x0000008C
+ REG32 Clk_AHB1_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_AHB1_Disable; //0x00000094
+ REG32 Clk_APB1_Mode; //0x00000098
+ REG32 Clk_APB1_Enable; //0x0000009C
+ /// This register is protected.
+ REG32 Clk_APB1_Disable; //0x000000A0
+ REG32 Clk_APB2_Mode; //0x000000A4
+ REG32 Clk_APB2_Enable; //0x000000A8
+ /// This register is protected.
+ REG32 Clk_APB2_Disable; //0x000000AC
+ REG32 Clk_MEM_Mode; //0x000000B0
+ REG32 Clk_MEM_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_MEM_Disable; //0x000000B8
+ REG32 Clk_APO_Mode; //0x000000BC
+ REG32 Clk_APO_Enable; //0x000000C0
+ /// This register is protected.
+ REG32 Clk_APO_Disable; //0x000000C4
+ REG32 Cfg_Clk_AP_CPU; //0x000000C8
+ REG32 Cfg_Clk_AP_AXI; //0x000000CC
+ REG32 Cfg_Clk_AP_GCG; //0x000000D0
+ REG32 Cfg_Clk_AP_AHB1; //0x000000D4
+ REG32 Cfg_Clk_AP_APB1; //0x000000D8
+ REG32 Cfg_Clk_AP_APB2; //0x000000DC
+ REG32 Cfg_Clk_AP_MEM; //0x000000E0
+ REG32 Cfg_Clk_AP_GPU; //0x000000E4
+ REG32 Cfg_Clk_AP_VPU; //0x000000E8
+ REG32 Cfg_Clk_AP_VOC; //0x000000EC
+ REG32 Cfg_Clk_AP_SFLSH; //0x000000F0
+ REG32 Cfg_Clk_Uart[3]; //0x000000F4
+ REG32 L2cc_Ctrl; //0x00000100
+ REG32 Spi_Ctrl; //0x00000104
+ REG32 Memory_Margin; //0x00000108
+ REG32 Memory_Margin2; //0x0000010C
+ REG32 Memory_Observe; //0x00000110
+ REG32 Cfg_Clk_AP_VOC2; //0x00000114
+ REG32 Cfg_Clk_EMMC; //0x00000118
+ REG32 Test_Pulse; //0x0000011C
+ REG32 Reserved_00000114[49]; //0x00000120
+ /// This register is reserved.
+ REG32 Cfg_Cpu_Reserve0; //0x000001E4
+ REG32 Cfg_Cpu_Reserve1; //0x000001E8
+ REG32 Cfg_Cpu_Reserve2; //0x000001EC
+ REG32 Cfg_Cpu_Reserve3; //0x000001F0
+ REG32 Cfg_Cpu_Reserve4; //0x000001F4
+ REG32 Cfg_Cpu_Reserve5; //0x000001F8
+ REG32 Cfg_Reserve; //0x000001FC
+} HWP_SYS_CTRL_AP_T;
+
+#define hwp_sysCtrlAp ((HWP_SYS_CTRL_AP_T*)(RDA_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_AP_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_AP_WRITE_UNLOCK (1<<31)
+
+//Cfg_Pll_Ctrl
+#define SYS_CTRL_AP_AP_PLL_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(n) (((n)&31)<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_MASK (31<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_SHIFT (16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(n) (((n)&31)<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_MASK (31<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_SHIFT (24)
+#define SYS_CTRL_AP_PLL_AP_CFG(n) (((n)&0x1F1F1111)<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_MASK (0x1F1F1111<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_AP_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_AP_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_SLOW (1<<1)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_FAST (0<<1)
+#define SYS_CTRL_AP_TIMER2_SEL_FAST_SLOW (1<<2)
+#define SYS_CTRL_AP_TIMER2_SEL_FAST_FAST (0<<2)
+#define SYS_CTRL_AP_TIMER3_SEL_FAST_SLOW (1<<3)
+#define SYS_CTRL_AP_TIMER3_SEL_FAST_FAST (0<<3)
+#define SYS_CTRL_AP_CPU_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_AP_CPU_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_AP_BUS_SEL_FAST_SLOW (1<<5)
+#define SYS_CTRL_AP_BUS_SEL_FAST_FAST (0<<5)
+#define SYS_CTRL_AP_RF_DETECTED_OK (1<<8)
+#define SYS_CTRL_AP_RF_DETECTED_NO (0<<8)
+#define SYS_CTRL_AP_RF_DETECT_BYPASS (1<<9)
+#define SYS_CTRL_AP_RF_DETECT_RESET (1<<10)
+#define SYS_CTRL_AP_RF_SELECTED_L (1<<11)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_MASK (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_SHIFT (12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_NOT_LOCKED (0<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_MASK (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_SHIFT (13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_NOT_LOCKED (0<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_MASK (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_SHIFT (14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_NOT_LOCKED (0<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_USB (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_MASK (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_SHIFT (15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_NOT_LOCKED (0<<15)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_CPU (1<<20)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_BUS (1<<21)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_MASK (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_SHIFT (30)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_MASK (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_SHIFT (31)
+
+//Reset_Cause
+#define SYS_CTRL_AP_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_AP_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_AP_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_AP_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_AP_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_AP_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_AP_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_AP_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_AP_FONCTIONAL_TEST_MODE (1<<31)
+
+//CPU_Rst_Set
+#define SYS_CTRL_AP_SET_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE1 (1<<1)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE2 (1<<2)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE3 (1<<3)
+#define SYS_CTRL_AP_SET_CPU_RST_L2 (1<<4)
+#define SYS_CTRL_AP_SET_CPU_RST_SYS (1<<5)
+#define SYS_CTRL_AP_SOFT_RST (1<<31)
+#define SYS_CTRL_AP_SET_CPU_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SHIFT (0)
+
+//CPU_Rst_Clr
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE1 (1<<1)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE2 (1<<2)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE3 (1<<3)
+#define SYS_CTRL_AP_CLR_CPU_RST_L2 (1<<4)
+#define SYS_CTRL_AP_CLR_CPU_RST_SYS (1<<5)
+#define SYS_CTRL_AP_CLR_CPU_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SHIFT (0)
+
+//AXI_Rst_Set
+#define SYS_CTRL_AP_SET_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_SET_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_SET_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_SET_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_SET_APB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_SET_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_SET_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_SET_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_SHIFT (0)
+
+//AXI_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_CLR_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_CLR_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_CLR_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_CLR_APB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_CLR_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_CLR_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_CLR_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Set
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SHIFT (0)
+
+//GCG_Rst_Set
+#define SYS_CTRL_AP_SET_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_SET_GCG_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_SHIFT (0)
+
+//GCG_Rst_Clr
+#define SYS_CTRL_AP_CLR_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_CLR_GCG_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_SHIFT (0)
+
+//AHB1_Rst_Set
+#define SYS_CTRL_AP_SET_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_SET_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_SET_AHB1_RST_EMAC (1<<3)
+#define SYS_CTRL_AP_SET_AHB1_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_SHIFT (0)
+
+//AHB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_CLR_AHB1_RST_EMAC (1<<3)
+#define SYS_CTRL_AP_CLR_AHB1_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SHIFT (0)
+
+//APB1_Rst_Set
+#define SYS_CTRL_AP_SET_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_SET_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_SET_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_SET_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_SET_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_SET_APB1_RST_COM_REGS (1<<8)
+#define SYS_CTRL_AP_SET_APB1_RST_DMC (1<<9)
+#define SYS_CTRL_AP_SET_APB1_RST_DDRPHY_P (1<<10)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XCPU (1<<11)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BCPU (1<<12)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_AHBC (1<<13)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_DMA (1<<14)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_A2A (1<<15)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XIFC (1<<16)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BIFC (1<<17)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BAHBC (1<<18)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_MEM_BRIDGE (1<<19)
+#define SYS_CTRL_AP_SET_APB1_RST(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_MASK (0xFFFFF<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_SHIFT (0)
+
+//APB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_CLR_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_CLR_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_CLR_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_CLR_APB1_RST_COM_REGS (1<<8)
+#define SYS_CTRL_AP_CLR_APB1_RST_DMC (1<<9)
+#define SYS_CTRL_AP_CLR_APB1_RST_DDRPHY_P (1<<10)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XCPU (1<<11)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BCPU (1<<12)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_AHBC (1<<13)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_DMA (1<<14)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_A2A (1<<15)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XIFC (1<<16)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BIFC (1<<17)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BAHBC (1<<18)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_MEM_BRIDGE (1<<19)
+#define SYS_CTRL_AP_CLR_APB1_RST(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_MASK (0xFFFFF<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_SHIFT (0)
+
+//APB2_Rst_Set
+#define SYS_CTRL_AP_SET_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_SET_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_SET_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_SET_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_SET_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C1 (1<<12)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C2 (1<<13)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C3 (1<<14)
+#define SYS_CTRL_AP_SET_APB2_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_SHIFT (0)
+
+//APB2_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C1 (1<<12)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C2 (1<<13)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C3 (1<<14)
+#define SYS_CTRL_AP_CLR_APB2_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_SHIFT (0)
+
+//MEM_Rst_Set
+#define SYS_CTRL_AP_SET_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_DMC (1<<1)
+#define SYS_CTRL_AP_SET_MEM_RST_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_SET_MEM_RST(n) (((n)&0x7)<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_MASK (0x7<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_SHIFT (0)
+
+//MEM_Rst_Clr
+#define SYS_CTRL_AP_CLR_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_DMC (1<<1)
+#define SYS_CTRL_AP_CLR_MEM_RST_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_CLR_MEM_RST(n) (((n)&0x7)<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_MASK (0x7<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_SHIFT (0)
+
+//Clk_CPU_Mode
+#define SYS_CTRL_AP_MODE_CLK_CPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_CPU_MANUAL (1<<0)
+
+//Clk_CPU_Enable
+#define SYS_CTRL_AP_ENABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_ENABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_SHIFT (0)
+
+//Clk_CPU_Disable
+#define SYS_CTRL_AP_DISABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_DISABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_SHIFT (0)
+
+//Clk_AXI_Mode
+#define SYS_CTRL_AP_MODE_AHB0_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_AHB0_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB0_CONF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB0_CONF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_AXI_VOC_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_AXI_DMA_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_AXI_DMA_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_CLK_AXI(n) (((n)&0x1F)<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_MASK (0x1F<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Enable
+#define SYS_CTRL_AP_ENABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_ENABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_ENABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_ENABLE_AXI_VPU (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB0_IRQ (1<<8)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Disable
+#define SYS_CTRL_AP_DISABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_DISABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_DISABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_DISABLE_AXI_VPU (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB0_IRQ (1<<8)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXIDIV2_Mode
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_MANUAL (1<<0)
+
+//Clk_AXIDIV2_Enable
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_AXIDIV2_Disable
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_GCG_Mode
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_CLK_GCG(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_MASK (0xF<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Enable
+#define SYS_CTRL_AP_ENABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_GCG_ALWAYS (1<<4)
+#define SYS_CTRL_AP_ENABLE_GCG_CONNECT (1<<5)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA_AW (1<<6)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA_DPI (1<<7)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_MASK (0xFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Disable
+#define SYS_CTRL_AP_DISABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_GCG_ALWAYS (1<<4)
+#define SYS_CTRL_AP_DISABLE_GCG_CONNECT (1<<5)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA_AW (1<<6)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA_DPI (1<<7)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_MASK (0xFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_SHIFT (0)
+
+//Clk_AHB1_Mode
+#define SYS_CTRL_AP_MODE_CLK_AHB1_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AHB1_MANUAL (1<<0)
+
+//Clk_AHB1_Enable
+#define SYS_CTRL_AP_ENABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_ENABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_ENABLE_AHB1_EMAC (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_MASK (0xF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_AHB1_Disable
+#define SYS_CTRL_AP_DISABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_DISABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_DISABLE_AHB1_EMAC (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_MASK (0xF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_APB1_Mode
+#define SYS_CTRL_AP_MODE_APB1_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB1_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB1_AIF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB1D_OSC2_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB1D_OSC2_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB1D_OSC3_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB1D_OSC3_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_CLK_APB1(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Enable
+#define SYS_CTRL_AP_ENABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC2 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC3 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB1D_PWM (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB1_ALWAYS (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB1_DAPLITE (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB1_TIMER (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB1_GPIO (1<<15)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_MASK (0xFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Disable
+#define SYS_CTRL_AP_DISABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC2 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC3 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB1D_PWM (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB1_ALWAYS (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB1_DAPLITE (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB1_TIMER (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB1_GPIO (1<<15)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_MASK (0xFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB2_Mode
+#define SYS_CTRL_AP_MODE_APB2_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB2_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB2_IFC_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH8_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH8_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH9_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH9_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH10_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH10_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_APB2_UART1_AUTOMATIC (0<<13)
+#define SYS_CTRL_AP_MODE_APB2_UART1_MANUAL (1<<13)
+#define SYS_CTRL_AP_MODE_APB2_UART2_AUTOMATIC (0<<14)
+#define SYS_CTRL_AP_MODE_APB2_UART2_MANUAL (1<<14)
+#define SYS_CTRL_AP_MODE_APB2_UART3_AUTOMATIC (0<<15)
+#define SYS_CTRL_AP_MODE_APB2_UART3_MANUAL (1<<15)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_AUTOMATIC (0<<16)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_MANUAL (1<<16)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_AUTOMATIC (0<<17)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_MANUAL (1<<17)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_AUTOMATIC (0<<18)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_MANUAL (1<<18)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_AUTOMATIC (0<<19)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_MANUAL (1<<19)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_AUTOMATIC (0<<20)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_MANUAL (1<<20)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_AUTOMATIC (0<<21)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_MANUAL (1<<21)
+#define SYS_CTRL_AP_MODE_APB2_I2C1_AUTOMATIC (0<<22)
+#define SYS_CTRL_AP_MODE_APB2_I2C1_MANUAL (1<<22)
+#define SYS_CTRL_AP_MODE_APB2_I2C2_AUTOMATIC (0<<23)
+#define SYS_CTRL_AP_MODE_APB2_I2C2_MANUAL (1<<23)
+#define SYS_CTRL_AP_MODE_APB2_I2C3_AUTOMATIC (0<<24)
+#define SYS_CTRL_AP_MODE_APB2_I2C3_MANUAL (1<<24)
+#define SYS_CTRL_AP_MODE_CLK_APB2(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Enable
+#define SYS_CTRL_AP_ENABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH8 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH9 (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH10 (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB2_UART1 (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB2_UART2 (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB2_UART3 (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI1 (1<<16)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI2 (1<<17)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI3 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC1 (1<<19)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC2 (1<<20)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC3 (1<<21)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C1 (1<<22)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C2 (1<<23)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C3 (1<<24)
+#define SYS_CTRL_AP_ENABLE_APB2_ALWAYS (1<<25)
+#define SYS_CTRL_AP_ENABLE_APB2_NANDFLASH (1<<26)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2(n) (((n)&0x7FFFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_MASK (0x7FFFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Disable
+#define SYS_CTRL_AP_DISABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH8 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH9 (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH10 (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB2_UART1 (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB2_UART2 (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB2_UART3 (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI1 (1<<16)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI2 (1<<17)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI3 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC1 (1<<19)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC2 (1<<20)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC3 (1<<21)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C1 (1<<22)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C2 (1<<23)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C3 (1<<24)
+#define SYS_CTRL_AP_DISABLE_APB2_ALWAYS (1<<25)
+#define SYS_CTRL_AP_DISABLE_APB2_NANDFLASH (1<<26)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2(n) (((n)&0x7FFFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_MASK (0x7FFFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_SHIFT (0)
+
+//Clk_MEM_Mode
+#define SYS_CTRL_AP_MODE_CLK_MEM_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_MEM_MANUAL (1<<0)
+
+//Clk_MEM_Enable
+#define SYS_CTRL_AP_ENABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_ENABLE_MEM_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_ENABLE_MEM_CONNECT (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_MASK (0xF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_SHIFT (0)
+
+//Clk_MEM_Disable
+#define SYS_CTRL_AP_DISABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_DISABLE_MEM_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_DISABLE_MEM_CONNECT (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_MASK (0xF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_SHIFT (0)
+
+//Clk_APO_Mode
+#define SYS_CTRL_AP_MODE_APOC_BCK_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APOC_UART1_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART1_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART3_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART3_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_CLK_APO(n) (((n)&01FF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Enable
+#define SYS_CTRL_AP_ENABLE_APOC_BCK (1<<0)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK2 (1<<1)
+#define SYS_CTRL_AP_ENABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_CORE (1<<6)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC (1<<7)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_ALWAYS (1<<9)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_ALWAYS (1<<10)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY_N (1<<11)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XP (1<<12)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XN (1<<13)
+#define SYS_CTRL_AP_ENABLE_APOC_VPU (1<<14)
+#define SYS_CTRL_AP_ENABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_ENABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI2 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APOC_DSI (1<<19)
+#define SYS_CTRL_AP_ENABLE_APOC_GPIO (1<<20)
+#define SYS_CTRL_AP_ENABLE_APOC_SPIFLASH (1<<21)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX (1<<22)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX2 (1<<23)
+#define SYS_CTRL_AP_ENABLE_APOC_PDGB (1<<24)
+#define SYS_CTRL_AP_ENABLE_CLK_APO(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Disable
+#define SYS_CTRL_AP_DISABLE_APOC_BCK (1<<0)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK2 (1<<1)
+#define SYS_CTRL_AP_DISABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_CORE (1<<6)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC (1<<7)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_ALWAYS (1<<9)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_ALWAYS (1<<10)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY_N (1<<11)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XP (1<<12)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XN (1<<13)
+#define SYS_CTRL_AP_DISABLE_APOC_VPU (1<<14)
+#define SYS_CTRL_AP_DISABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_DISABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI2 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APOC_DSI (1<<19)
+#define SYS_CTRL_AP_DISABLE_APOC_GPIO (1<<20)
+#define SYS_CTRL_AP_DISABLE_APOC_SPIFLASH (1<<21)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX (1<<22)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX2 (1<<23)
+#define SYS_CTRL_AP_DISABLE_APOC_PDGB (1<<24)
+#define SYS_CTRL_AP_DISABLE_CLK_APO(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_SHIFT (0)
+
+//Cfg_Clk_AP_CPU
+#define SYS_CTRL_AP_AP_CPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_BUS_DIV_SEL(n) (((n)&3)<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_MASK (3<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_SHIFT (16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV2 (0<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV3 (1<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV4 (2<<16)
+#define SYS_CTRL_AP_DBG_CLKDIV_SEL(n) (((n)&15)<<20)
+#define SYS_CTRL_AP_DBG_CLKDIV_DIV_SEL_MASK (15<<20)
+#define SYS_CTRL_AP_DBG_CLKDIV_SEL_SHIFT (20)
+#define SYS_CTRL_AP_AP_CPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AXI
+#define SYS_CTRL_AP_AP_AXI_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AXI_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AXI_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_GCG
+#define SYS_CTRL_AP_AP_GCG_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GCG_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_GCG_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AHB1
+#define SYS_CTRL_AP_AP_AHB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AHB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB1
+#define SYS_CTRL_AP_AP_APB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB2
+#define SYS_CTRL_AP_AP_APB2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB2_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_MEM
+#define SYS_CTRL_AP_AP_MEM_SRC_DIV2 (1<<12)
+
+//Cfg_Clk_AP_GPU
+#define SYS_CTRL_AP_AP_GPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_GPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VPU
+#define SYS_CTRL_AP_AP_VPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VOC
+#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_SFLSH
+#define SYS_CTRL_AP_AP_SFLSH_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_SFLSH_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Uart
+#define SYS_CTRL_AP_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_AP_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_AP_UART_SEL_PLL_PLL (1<<12)
+
+//L2cc_Ctrl
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_MASK (15<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_SHIFT (0)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M(n) (((n)&15)<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_MASK (15<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_SHIFT (4)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_MASK (15<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_SHIFT (8)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_MASK (15<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_SHIFT (12)
+#define SYS_CTRL_AP_ARAP_L2CC_1_M (1<<16)
+#define SYS_CTRL_AP_AWAP_L2CC_1_M (1<<17)
+#define SYS_CTRL_AP_ARAP_MODEM_MEM_AHBS_M (1<<18)
+#define SYS_CTRL_AP_AWAP_MODEM_MEM_AHBS_M (1<<19)
+#define SYS_CTRL_AP_ARAP_MERGE1M (1<<20)
+#define SYS_CTRL_AP_AWAP_MERGE1M (1<<21)
+#define SYS_CTRL_AP_ARAP_MERGE2M (1<<22)
+#define SYS_CTRL_AP_AWAP_MERGE2M (1<<23)
+#define SYS_CTRL_AP_RESERVE1(n) (((n)&0xFF)<<24)
+#define SYS_CTRL_AP_RESERVE1_MASK (0xFF<<24)
+#define SYS_CTRL_AP_RESERVE1_SHIFT (24)
+
+//Spi_Ctrl
+#define SYS_CTRL_AP_LIMITED_EN_SPI1 (1<<0)
+#define SYS_CTRL_AP_LPSEN_SPI1 (1<<1)
+#define SYS_CTRL_AP_LIMITED_EN_SPI2 (1<<2)
+#define SYS_CTRL_AP_LPSEN_SPI2 (1<<3)
+#define SYS_CTRL_AP_LIMITED_EN_SPI3 (1<<4)
+#define SYS_CTRL_AP_LPSEN_SPI3 (1<<5)
+#define SYS_CTRL_AP_FBUSWID_NFSC (1<<6)
+#define SYS_CTRL_AP_RESERVE3 (1<<7)
+#define SYS_CTRL_AP_DMC_CFG(n) (((n)&0x3FF)<<8)
+#define SYS_CTRL_AP_DMC_CFG_MASK (0x3FF<<8)
+#define SYS_CTRL_AP_DMC_CFG_SHIFT (8)
+#define SYS_CTRL_AP_RESERVE2(n) (((n)&0x3FFF)<<18)
+#define SYS_CTRL_AP_RESERVE2_MASK (0x3FFF<<18)
+#define SYS_CTRL_AP_RESERVE2_SHIFT (18)
+
+//Memory_Margin
+#define SYS_CTRL_AP_EMAW_VOC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_VOC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_VOC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_VOC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_VOC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_VOC_SHIFT (2)
+#define SYS_CTRL_AP_EMAW_VPU(n) (((n)&3)<<5)
+#define SYS_CTRL_AP_EMAW_VPU_MASK (3<<5)
+#define SYS_CTRL_AP_EMAW_VPU_SHIFT (5)
+#define SYS_CTRL_AP_EMA_VPU(n) (((n)&7)<<7)
+#define SYS_CTRL_AP_EMA_VPU_MASK (7<<7)
+#define SYS_CTRL_AP_EMA_VPU_SHIFT (7)
+#define SYS_CTRL_AP_EMAW_GPU(n) (((n)&3)<<10)
+#define SYS_CTRL_AP_EMAW_GPU_MASK (3<<10)
+#define SYS_CTRL_AP_EMAW_GPU_SHIFT (10)
+#define SYS_CTRL_AP_EMA_GPU(n) (((n)&7)<<12)
+#define SYS_CTRL_AP_EMA_GPU_MASK (7<<12)
+#define SYS_CTRL_AP_EMA_GPU_SHIFT (12)
+#define SYS_CTRL_AP_EMAW_GOUDA(n) (((n)&3)<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_MASK (3<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_SHIFT (15)
+#define SYS_CTRL_AP_EMA_GOUDA(n) (((n)&7)<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_MASK (7<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_SHIFT (17)
+#define SYS_CTRL_AP_EMAW_IMEM(n) (((n)&3)<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_MASK (3<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_SHIFT (20)
+#define SYS_CTRL_AP_EMA_IMEM(n) (((n)&7)<<22)
+#define SYS_CTRL_AP_EMA_IMEM_MASK (7<<22)
+#define SYS_CTRL_AP_EMA_IMEM_SHIFT (22)
+#define SYS_CTRL_AP_EMAW_USB(n) (((n)&3)<<25)
+#define SYS_CTRL_AP_EMAW_USB_MASK (3<<25)
+#define SYS_CTRL_AP_EMAW_USB_SHIFT (25)
+#define SYS_CTRL_AP_EMA_USB(n) (((n)&7)<<27)
+#define SYS_CTRL_AP_EMA_USB_MASK (7<<27)
+#define SYS_CTRL_AP_EMA_USB_SHIFT (27)
+
+//Memory_Margin2
+#define SYS_CTRL_AP_EMAW_NFSC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_NFSC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_NFSC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_NFSC_SHIFT (2)
+#define SYS_CTRL_AP_EMA_VPUROM(n) (((n)&7)<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_MASK (7<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_SHIFT (5)
+#define SYS_CTRL_AP_EMA_IMEMROM(n) (((n)&7)<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_MASK (7<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_SHIFT (8)
+#define SYS_CTRL_AP_KEN_VPUROM (1<<11)
+#define SYS_CTRL_AP_PGEN_VPUROM (1<<12)
+#define SYS_CTRL_AP_KEN_IMEMROM (1<<13)
+#define SYS_CTRL_AP_PGEN_IMEMROM (1<<14)
+
+//Memory_Observe
+#define SYS_CTRL_AP_MEM_OBSERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Clk_AP_VOC2
+#define SYS_CTRL_AP_AP_VOC2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC2_FREQ_MASK (31 << 0)
+#define SYS_CTRL_AP_AP_VOC2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC2_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_EMMC
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY_MASK (31 << 0)
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY_SHIFT 0
+#define SYS_CTRL_AP_EMMC_CLK_DLY(n) (((n)&31)<<8)
+#define SYS_CTRL_AP_EMMC_CLK_DLY_MASK (31 << 8)
+#define SYS_CTRL_AP_EMMC_CLK_DLY_SHIFT 8
+#define SYS_CTRL_AP_EMMC_CLK_POL (1<<13)
+
+//Test_Pulse
+#define SYS_CTRL_AP_PULSE_COUNTER(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Reserve
+#define SYS_CTRL_AP_RESERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810h.h b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810h.h
new file mode 100644
index 0000000000..ab7ba4c951
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8810h.h
@@ -0,0 +1,1578 @@
+#ifndef _REG_SYSCTRL_H_
+#define _REG_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// AP_CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ CPU0 = 0x00000000,
+ CPU1 = 0x00000001
+} AP_CPU_ID_T;
+
+
+// ============================================================================
+// CPU_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side System clocks
+ CPU_CORE = 0x00000000,
+/// the following don't have an auto enable
+ CPU_DUMMY = 0x00000001
+} CPU_CLKS_T;
+
+#define NB_CPU_CLK_AEN (1)
+#define NB_CPU_CLK_EN (2)
+#define NB_CPU_CLK (2)
+
+// ============================================================================
+// AXI_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side System clocks: AXI and AHB0 and APB0
+ AHB0_CONF = 0x00000000,
+ APB0_CONF = 0x00000001,
+ AXI_VOC = 0x00000002,
+ AXI_DMA = 0x00000003,
+/// the following don't have an auto enable
+ AXI_ALWAYS = 0x00000004,
+ AXI_CONNECT = 0x00000005,
+ APB0_IRQ = 0x00000006
+} AXI_CLKS_T;
+
+#define NB_AXI_CLK_AEN (4)
+#define NB_AXI_CLK_EN (7)
+#define NB_AXI_CLK (7)
+
+// ============================================================================
+// AXIDIV2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIdiv2 side System clocks
+ AXIDIV2_IMEM = 0x00000000,
+/// the following don't have an auto enable
+ AXIDIV2_ALWAYS = 0x00000001,
+ AXIDIV2_CONNECT = 0x00000002,
+ AXIDIV2_VPU = 0x00000003
+} AXIDIV2_CLKS_T;
+
+#define NB_AXIDIV2_CLK_AEN (1)
+#define NB_AXIDIV2_CLK_EN (4)
+#define NB_AXIDIV2_CLK (4)
+
+// ============================================================================
+// GCG_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side System clocks
+ GCG_APB_CONF = 0x00000000,
+ GCG_GOUDA = 0x00000001,
+ GCG_CAMERA = 0x00000002,
+/// the following don't have an auto enable
+ GCG_ALWAYS = 0x00000003,
+ GCG_CONNECT = 0x00000004
+} GCG_CLKS_T;
+
+#define NB_GCG_CLK_AEN (3)
+#define NB_GCG_CLK_EN (5)
+#define NB_GCG_CLK (5)
+
+// ============================================================================
+// AHB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side System clocks
+ AHB1_USBC = 0x00000000,
+/// the following don't have an auto enable
+ AHB1_ALWAYS = 0x00000001,
+ AHB1_SPIFLASH = 0x00000002
+} AHB1_CLKS_T;
+
+#define NB_AHB1_CLK_AEN (1)
+#define NB_AHB1_CLK_EN (3)
+#define NB_AHB1_CLK (3)
+
+// ============================================================================
+// APB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side System clocks
+ APB1_CONF = 0x00000000,
+ APB1_AIF = 0x00000001,
+ APB1_AUIFC = 0x00000002,
+ APB1_AUIFC_CH0 = 0x00000003,
+ APB1_AUIFC_CH1 = 0x00000004,
+ APB1_I2C1 = 0x00000005,
+ APB1_I2C2 = 0x00000006,
+ APB1_I2C3 = 0x00000007,
+/// AP APB1 side divided clock (either divided by module or by clock_ctrl)
+ APB1D_OSC = 0x00000008,
+ APB1D_PWM = 0x00000009,
+/// the following don't have an auto enable
+ APB1_ALWAYS = 0x0000000A,
+ APB1_DAPLITE = 0x0000000B,
+ APB1_TIMER = 0x0000000C,
+ APB1_GPIO = 0x0000000D
+} APB1_CLKS_T;
+
+#define NB_APB1_CLK_AEN (10)
+#define NB_APB1_CLK_EN (14)
+#define NB_APB1_CLK (14)
+
+// ============================================================================
+// APB2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side System clocks
+ APB2_CONF = 0x00000000,
+ APB2_IFC = 0x00000001,
+ APB2_IFC_CH0 = 0x00000002,
+ APB2_IFC_CH1 = 0x00000003,
+ APB2_IFC_CH2 = 0x00000004,
+ APB2_IFC_CH3 = 0x00000005,
+ APB2_IFC_CH4 = 0x00000006,
+ APB2_IFC_CH5 = 0x00000007,
+ APB2_IFC_CH6 = 0x00000008,
+ APB2_IFC_CH7 = 0x00000009,
+ APB2_UART1 = 0x0000000A,
+ APB2_UART2 = 0x0000000B,
+ APB2_UART3 = 0x0000000C,
+ APB2_SPI1 = 0x0000000D,
+ APB2_SPI2 = 0x0000000E,
+ APB2_SPI3 = 0x0000000F,
+ APB2_SDMMC1 = 0x00000010,
+ APB2_SDMMC2 = 0x00000011,
+ APB2_SDMMC3 = 0x00000012,
+/// the following don't have an auto enable
+ APB2_ALWAYS = 0x00000013,
+ APB2_NANDFLASH = 0x00000014
+} APB2_CLKS_T;
+
+#define NB_APB2_CLK_AEN (19)
+#define NB_APB2_CLK_EN (21)
+#define NB_APB2_CLK (21)
+
+// ============================================================================
+// MEM_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side System clocks
+ MEM_CONF = 0x00000000,
+/// the following don't have an auto enable
+ MEM_DMC = 0x00000001,
+ MEM_GPU = 0x00000002,
+ MEM_VPU = 0x00000003,
+ MEM_DDRPHY_P = 0x00000004,
+ MEM_CONNECT = 0x00000005
+} MEM_CLKS_T;
+
+#define NB_MEM_CLK_AEN (1)
+#define NB_MEM_CLK_EN (6)
+#define NB_MEM_CLK (6)
+
+// ============================================================================
+// APO_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side Other clocks
+/// clocks with auto enble
+ APOC_VPU = 0x00000000,
+ APOC_BCK = 0x00000001,
+ APOC_UART1 = 0x00000002,
+ APOC_UART2 = 0x00000003,
+ APOC_UART3 = 0x00000004,
+ APOC_VOC_CORE = 0x00000005,
+ APOC_VOC = 0x00000006,
+/// the following don't have an auto enable
+ APOC_VOC_ALWAYS = 0x00000007,
+ APOC_DDRPHY_N = 0x00000008,
+ APOC_DDRPHY2XP = 0x00000009,
+ APOC_DDRPHY2XN = 0x0000000A,
+ APOC_GPU = 0x0000000B,
+ APOC_USBPHY = 0x0000000C,
+ APOC_CSI = 0x0000000D,
+ APOC_DSI = 0x0000000E,
+ APOC_GPIO = 0x0000000F,
+ APOC_SPIFLASH = 0x00000010,
+ APOC_PIX = 0x00000011,
+ APOC_PDGB = 0x00000012
+} APO_CLKS_T;
+
+#define NB_CLK_VOC_AEN_SYNC (5)
+#define NB_CLK_VOC_CORE (6)
+#define NB_APO_CLK_AEN (7)
+#define NB_CLK_VOC_END (8)
+#define NB_APO_CLK_EN (19)
+#define NB_APO_CLK (19)
+
+// ============================================================================
+// CPU_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side resets
+ CPU_RST_CORE = 0x00000000,
+ CPU_RST_SYS = 0x00000001
+} CPU_RESETS_T;
+
+#define NB_CPU_RST (2)
+
+// ============================================================================
+// AXI_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side resets: AXI and AHB0 and APB0
+ AXI_RST_VOC = 0x00000000,
+ AXI_RST_DMA = 0x00000001,
+ AXI_RST_SYS = 0x00000002,
+ AXI_RST_CONNECT = 0x00000003,
+ AHB0_RST_GPU = 0x00000004,
+ APB0_RST_VPU = 0x00000005,
+ APB0_RST_IRQ = 0x00000006
+} AXI_RESETS_T;
+
+#define NB_AXI_RST (7)
+
+// ============================================================================
+// AXIDIV2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIDIV2 side resets
+ AXIDIV2_RST_IMEM = 0x00000000,
+ AXIDIV2_RST_SYS = 0x00000001,
+ AXIDIV2_RST_VPU = 0x00000002
+} AXIDIV2_RESETS_T;
+
+#define NB_AXIDIV2_RST (3)
+
+// ============================================================================
+// GCG_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side resets
+ GCG_RST_SYS = 0x00000000,
+ GCG_RST_GOUDA = 0x00000001,
+ GCG_RST_CAMERA = 0x00000002
+} GCG_RESETS_T;
+
+#define NB_GCG_RST (3)
+
+// ============================================================================
+// AHB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side resets
+ AHB1_RST_SYS = 0x00000000,
+ AHB1_RST_USBC = 0x00000001,
+ AHB1_RST_SPIFLASH = 0x00000002
+} AHB1_RESETS_T;
+
+#define NB_AHB1_RST (3)
+
+// ============================================================================
+// APB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side resets
+ APB1_RST_SYS = 0x00000000,
+ APB1_RST_TIMER = 0x00000001,
+ APB1_RST_KEYPAD = 0x00000002,
+ APB1_RST_GPIO = 0x00000003,
+ APB1_RST_PWM = 0x00000004,
+ APB1_RST_AIF = 0x00000005,
+ APB1_RST_AUIFC = 0x00000006,
+ APB1_RST_I2C1 = 0x00000007,
+ APB1_RST_I2C2 = 0x00000008,
+ APB1_RST_I2C3 = 0x00000009,
+ APB1_RST_COM_REGS = 0x0000000A,
+ APB1_RST_DMC = 0x0000000B,
+ APB1_RST_DDRPHY_P = 0x0000000C,
+ APB1_RST_BB2G_XCPU = 0x0000000D,
+ APB1_RST_BB2G_BCPU = 0x0000000E,
+ APB1_RST_BB2G_AHBC = 0x0000000F,
+ APB1_RST_BB2G_DMA = 0x00000010,
+ APB1_RST_BB2G_A2A = 0x00000011,
+ APB1_RST_BB2G_XIFC = 0x00000012,
+ APB1_RST_BB2G_BIFC = 0x00000013,
+ APB1_RST_BB2G_BAHBC = 0x00000014,
+ APB1_RST_BB2G_MEM_BRIDGE = 0x00000015
+} APB1_RESETS_T;
+
+#define NB_APB1_RST (22)
+
+// ============================================================================
+// APB2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side resets
+ APB2_RST_SYS = 0x00000000,
+ APB2_RST_IFC = 0x00000001,
+ APB2_RST_UART1 = 0x00000002,
+ APB2_RST_UART2 = 0x00000003,
+ APB2_RST_UART3 = 0x00000004,
+ APB2_RST_SPI1 = 0x00000005,
+ APB2_RST_SPI2 = 0x00000006,
+ APB2_RST_SPI3 = 0x00000007,
+ APB2_RST_SDMMC1 = 0x00000008,
+ APB2_RST_SDMMC2 = 0x00000009,
+ APB2_RST_SDMMC3 = 0x0000000A,
+ APB2_RST_NANDFLASH = 0x0000000B
+} APB2_RESETS_T;
+
+#define NB_APB2_RST (12)
+
+// ============================================================================
+// MEM_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side resets
+ MEM_RST_SYS = 0x00000000,
+ MEM_RST_GPU = 0x00000001,
+ MEM_RST_VPU = 0x00000002,
+ MEM_RST_DMC = 0x00000003,
+ MEM_RST_DDRPHY_P = 0x00000004
+} MEM_RESETS_T;
+
+#define NB_MEM_RST (5)
+
+// ============================================================================
+// AP_OTHERS_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP Reset Other : resync on corresponding clock other
+ AP_RSTO_VOC = 0x00000000,
+ AP_RSTO_DDRPHY_N = 0x00000001,
+ AP_RSTO_DDRPHY2XP = 0x00000002,
+ AP_RSTO_DDRPHY2XN = 0x00000003,
+ AP_RSTO_GPU = 0x00000004,
+ AP_RSTO_VPU = 0x00000005,
+ AP_RSTO_BCK = 0x00000006,
+ AP_RSTO_UART1 = 0x00000007,
+ AP_RSTO_UART2 = 0x00000008,
+ AP_RSTO_UART3 = 0x00000009,
+ AP_RSTO_GPIO = 0x0000000A,
+ AP_RSTO_TIMER = 0x0000000B,
+ AP_RSTO_USBC = 0x0000000C,
+ AP_RSTO_DSI = 0x0000000D,
+ AP_RSTO_SPIFLASH = 0x0000000E,
+ AP_RSTO_TCK = 0x0000000F,
+ AP_RSTO_PDBG_XTAL = 0x00000010
+} AP_OTHERS_RESETS_T;
+
+#define NB_AP_RSTO (17)
+/// For REG_DBG protect lock/unlock value
+#define AP_CTRL_PROTECT_LOCK (0XA50000)
+#define AP_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_AP_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// Register protected by Write_Unlocked_H.
+ REG32 Cfg_Pll_Ctrl[4]; //0x00000004
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000014
+ REG32 Reset_Cause; //0x00000018
+ /// This register is protected.
+ REG32 CPU_Rst_Set; //0x0000001C
+ REG32 CPU_Rst_Clr; //0x00000020
+ /// This register is protected.
+ REG32 AXI_Rst_Set; //0x00000024
+ REG32 AXI_Rst_Clr; //0x00000028
+ /// This register is protected.
+ REG32 AXIDIV2_Rst_Set; //0x0000002C
+ REG32 AXIDIV2_Rst_Clr; //0x00000030
+ /// This register is protected.
+ REG32 GCG_Rst_Set; //0x00000034
+ REG32 GCG_Rst_Clr; //0x00000038
+ /// This register is protected.
+ REG32 AHB1_Rst_Set; //0x0000003C
+ REG32 AHB1_Rst_Clr; //0x00000040
+ /// This register is protected.
+ REG32 APB1_Rst_Set; //0x00000044
+ REG32 APB1_Rst_Clr; //0x00000048
+ /// This register is protected.
+ REG32 APB2_Rst_Set; //0x0000004C
+ REG32 APB2_Rst_Clr; //0x00000050
+ /// This register is protected.
+ REG32 MEM_Rst_Set; //0x00000054
+ REG32 MEM_Rst_Clr; //0x00000058
+ REG32 Clk_CPU_Mode; //0x0000005C
+ REG32 Clk_CPU_Enable; //0x00000060
+ /// This register is protected.
+ REG32 Clk_CPU_Disable; //0x00000064
+ REG32 Clk_AXI_Mode; //0x00000068
+ REG32 Clk_AXI_Enable; //0x0000006C
+ /// This register is protected.
+ REG32 Clk_AXI_Disable; //0x00000070
+ REG32 Clk_AXIDIV2_Mode; //0x00000074
+ REG32 Clk_AXIDIV2_Enable; //0x00000078
+ /// This register is protected.
+ REG32 Clk_AXIDIV2_Disable; //0x0000007C
+ REG32 Clk_GCG_Mode; //0x00000080
+ REG32 Clk_GCG_Enable; //0x00000084
+ /// This register is protected.
+ REG32 Clk_GCG_Disable; //0x00000088
+ REG32 Clk_AHB1_Mode; //0x0000008C
+ REG32 Clk_AHB1_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_AHB1_Disable; //0x00000094
+ REG32 Clk_APB1_Mode; //0x00000098
+ REG32 Clk_APB1_Enable; //0x0000009C
+ /// This register is protected.
+ REG32 Clk_APB1_Disable; //0x000000A0
+ REG32 Clk_APB2_Mode; //0x000000A4
+ REG32 Clk_APB2_Enable; //0x000000A8
+ /// This register is protected.
+ REG32 Clk_APB2_Disable; //0x000000AC
+ REG32 Clk_MEM_Mode; //0x000000B0
+ REG32 Clk_MEM_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_MEM_Disable; //0x000000B8
+ REG32 Clk_APO_Mode; //0x000000BC
+ REG32 Clk_APO_Enable; //0x000000C0
+ /// This register is protected.
+ REG32 Clk_APO_Disable; //0x000000C4
+ REG32 Cfg_Clk_AP_CPU; //0x000000C8
+ REG32 Cfg_Clk_AP_AXI; //0x000000CC
+ REG32 Cfg_Clk_AP_GCG; //0x000000D0
+ REG32 Cfg_Clk_AP_AHB1; //0x000000D4
+ REG32 Cfg_Clk_AP_APB1; //0x000000D8
+ REG32 Cfg_Clk_AP_APB2; //0x000000DC
+ REG32 Cfg_Clk_AP_MEM; //0x000000E0
+ REG32 Cfg_Clk_AP_GPU; //0x000000E4
+ REG32 Cfg_Clk_AP_VPU; //0x000000E8
+ REG32 Cfg_Clk_AP_VOC; //0x000000EC
+ REG32 Cfg_Clk_AP_SFLSH; //0x000000F0
+ REG32 Cfg_Clk_Uart[3]; //0x000000F4
+ REG32 L2cc_Ctrl; //0x00000100
+ REG32 Spi_Ctrl; //0x00000104
+ REG32 Memory_Margin; //0x00000108
+ REG32 Memory_Margin2; //0x0000010C
+ REG32 Memory_Observe; //0x00000110
+ REG32 Cfg_Clk_AP_VOC2; //0x00000114
+ REG32 Cfg_Clk_EMMC; //0x00000118
+ REG32 Test_Pulse; //0x0000011C
+ REG32 Reserved_00000114[49]; //0x00000120
+ /// This register is reserved.
+ REG32 Cfg_Cpu_Reserve0; //0x000001E4
+ REG32 Cfg_Cpu_Reserve1; //0x000001E8
+ REG32 Cfg_Cpu_Reserve2; //0x000001EC
+ REG32 Cfg_Cpu_Reserve3; //0x000001F0
+ REG32 Cfg_Cpu_Reserve4; //0x000001F4
+ REG32 Cfg_Cpu_Reserve5; //0x000001F8
+ REG32 Cfg_Reserve; //0x000001FC
+} HWP_SYS_CTRL_AP_T;
+
+#define hwp_sysCtrlAp ((HWP_SYS_CTRL_AP_T*)(RDA_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_AP_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_AP_WRITE_UNLOCK (1<<31)
+
+//Cfg_Pll_Ctrl
+#define SYS_CTRL_AP_AP_PLL_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(n) (((n)&31)<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_MASK (31<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_SHIFT (16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(n) (((n)&31)<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_MASK (31<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_SHIFT (24)
+#define SYS_CTRL_AP_PLL_AP_CFG(n) (((n)&0x1F1F1111)<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_MASK (0x1F1F1111<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_AP_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_AP_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_SLOW (1<<1)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_FAST (0<<1)
+#define SYS_CTRL_AP_TIMER2_SEL_FAST_SLOW (1<<2)
+#define SYS_CTRL_AP_TIMER2_SEL_FAST_FAST (0<<2)
+#define SYS_CTRL_AP_TIMER3_SEL_FAST_SLOW (1<<3)
+#define SYS_CTRL_AP_TIMER3_SEL_FAST_FAST (0<<3)
+#define SYS_CTRL_AP_CPU_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_AP_CPU_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_AP_BUS_SEL_FAST_SLOW (1<<5)
+#define SYS_CTRL_AP_BUS_SEL_FAST_FAST (0<<5)
+#define SYS_CTRL_AP_RF_DETECTED_OK (1<<8)
+#define SYS_CTRL_AP_RF_DETECTED_NO (0<<8)
+#define SYS_CTRL_AP_RF_DETECT_BYPASS (1<<9)
+#define SYS_CTRL_AP_RF_DETECT_RESET (1<<10)
+#define SYS_CTRL_AP_RF_SELECTED_L (1<<11)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_MASK (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_SHIFT (12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_NOT_LOCKED (0<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_MASK (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_SHIFT (13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_NOT_LOCKED (0<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_MASK (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_SHIFT (14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_NOT_LOCKED (0<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_USB (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_MASK (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_SHIFT (15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_NOT_LOCKED (0<<15)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_CPU (1<<20)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_BUS (1<<21)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_MASK (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_SHIFT (30)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_MASK (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_SHIFT (31)
+
+//Reset_Cause
+#define SYS_CTRL_AP_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_AP_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_AP_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_AP_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_AP_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_AP_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_AP_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_AP_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_AP_FONCTIONAL_TEST_MODE (1<<31)
+
+//CPU_Rst_Set
+#define SYS_CTRL_AP_SET_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE1 (1<<1)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE2 (1<<2)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE3 (1<<3)
+#define SYS_CTRL_AP_SET_CPU_RST_L2 (1<<4)
+#define SYS_CTRL_AP_SET_CPU_RST_SYS (1<<5)
+#define SYS_CTRL_AP_SOFT_RST (1<<31)
+#define SYS_CTRL_AP_SET_CPU_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SHIFT (0)
+
+//CPU_Rst_Clr
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE1 (1<<1)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE2 (1<<2)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE3 (1<<3)
+#define SYS_CTRL_AP_CLR_CPU_RST_L2 (1<<4)
+#define SYS_CTRL_AP_CLR_CPU_RST_SYS (1<<5)
+#define SYS_CTRL_AP_CLR_CPU_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SHIFT (0)
+
+//AXI_Rst_Set
+#define SYS_CTRL_AP_SET_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_SET_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_SET_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_SET_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_SET_APB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_SET_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_SET_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_SET_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_SHIFT (0)
+
+//AXI_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_CLR_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_CLR_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_CLR_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_CLR_APB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_CLR_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_CLR_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_CLR_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Set
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SHIFT (0)
+
+//GCG_Rst_Set
+#define SYS_CTRL_AP_SET_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_SET_GCG_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_SHIFT (0)
+
+//GCG_Rst_Clr
+#define SYS_CTRL_AP_CLR_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_CLR_GCG_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_SHIFT (0)
+
+//AHB1_Rst_Set
+#define SYS_CTRL_AP_SET_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_SET_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_SET_AHB1_RST_EMAC (1<<3)
+#define SYS_CTRL_AP_SET_AHB1_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_SHIFT (0)
+
+//AHB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_CLR_AHB1_RST_EMAC (1<<3)
+#define SYS_CTRL_AP_CLR_AHB1_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SHIFT (0)
+
+//APB1_Rst_Set
+#define SYS_CTRL_AP_SET_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_SET_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_SET_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_SET_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_SET_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_SET_APB1_RST_COM_REGS (1<<8)
+#define SYS_CTRL_AP_SET_APB1_RST_DMC (1<<9)
+#define SYS_CTRL_AP_SET_APB1_RST_DDRPHY_P (1<<10)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XCPU (1<<11)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BCPU (1<<12)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_AHBC (1<<13)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_DMA (1<<14)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_A2A (1<<15)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XIFC (1<<16)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BIFC (1<<17)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BAHBC (1<<18)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_MEM_BRIDGE (1<<19)
+#define SYS_CTRL_AP_SET_APB1_RST(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_MASK (0xFFFFF<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_SHIFT (0)
+
+//APB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_CLR_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_CLR_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_CLR_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_CLR_APB1_RST_COM_REGS (1<<8)
+#define SYS_CTRL_AP_CLR_APB1_RST_DMC (1<<9)
+#define SYS_CTRL_AP_CLR_APB1_RST_DDRPHY_P (1<<10)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XCPU (1<<11)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BCPU (1<<12)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_AHBC (1<<13)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_DMA (1<<14)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_A2A (1<<15)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XIFC (1<<16)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BIFC (1<<17)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BAHBC (1<<18)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_MEM_BRIDGE (1<<19)
+#define SYS_CTRL_AP_CLR_APB1_RST(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_MASK (0xFFFFF<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_SHIFT (0)
+
+//APB2_Rst_Set
+#define SYS_CTRL_AP_SET_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_SET_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_SET_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_SET_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_SET_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C1 (1<<12)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C2 (1<<13)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C3 (1<<14)
+#define SYS_CTRL_AP_SET_APB2_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_SHIFT (0)
+
+//APB2_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C1 (1<<12)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C2 (1<<13)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C3 (1<<14)
+#define SYS_CTRL_AP_CLR_APB2_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_SHIFT (0)
+
+//MEM_Rst_Set
+#define SYS_CTRL_AP_SET_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_DMC (1<<1)
+#define SYS_CTRL_AP_SET_MEM_RST_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_SET_MEM_RST(n) (((n)&0x7)<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_MASK (0x7<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_SHIFT (0)
+
+//MEM_Rst_Clr
+#define SYS_CTRL_AP_CLR_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_DMC (1<<1)
+#define SYS_CTRL_AP_CLR_MEM_RST_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_CLR_MEM_RST(n) (((n)&0x7)<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_MASK (0x7<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_SHIFT (0)
+
+//Clk_CPU_Mode
+#define SYS_CTRL_AP_MODE_CLK_CPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_CPU_MANUAL (1<<0)
+
+//Clk_CPU_Enable
+#define SYS_CTRL_AP_ENABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_ENABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_SHIFT (0)
+
+//Clk_CPU_Disable
+#define SYS_CTRL_AP_DISABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_DISABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_SHIFT (0)
+
+//Clk_AXI_Mode
+#define SYS_CTRL_AP_MODE_AHB0_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_AHB0_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB0_CONF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB0_CONF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_AXI_VOC_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_AXI_DMA_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_AXI_DMA_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_CLK_AXI(n) (((n)&0x1F)<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_MASK (0x1F<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Enable
+#define SYS_CTRL_AP_ENABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_ENABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_ENABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_ENABLE_AXI_VPU (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB0_IRQ (1<<8)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Disable
+#define SYS_CTRL_AP_DISABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_DISABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_DISABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_DISABLE_AXI_VPU (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB0_IRQ (1<<8)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXIDIV2_Mode
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_MANUAL (1<<0)
+
+//Clk_AXIDIV2_Enable
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_AXIDIV2_Disable
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_GCG_Mode
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_CLK_GCG(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_MASK (0xF<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Enable
+#define SYS_CTRL_AP_ENABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_GCG_ALWAYS (1<<4)
+#define SYS_CTRL_AP_ENABLE_GCG_CONNECT (1<<5)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA_AW (1<<6)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA_DPI (1<<7)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_MASK (0xFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Disable
+#define SYS_CTRL_AP_DISABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_GCG_ALWAYS (1<<4)
+#define SYS_CTRL_AP_DISABLE_GCG_CONNECT (1<<5)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA_AW (1<<6)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA_DPI (1<<7)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_MASK (0xFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_SHIFT (0)
+
+//Clk_AHB1_Mode
+#define SYS_CTRL_AP_MODE_CLK_AHB1_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AHB1_MANUAL (1<<0)
+
+//Clk_AHB1_Enable
+#define SYS_CTRL_AP_ENABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_ENABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_ENABLE_AHB1_EMAC (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_MASK (0xF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_AHB1_Disable
+#define SYS_CTRL_AP_DISABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_DISABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_DISABLE_AHB1_EMAC (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_MASK (0xF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_APB1_Mode
+#define SYS_CTRL_AP_MODE_APB1_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB1_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB1_AIF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB1D_OSC2_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB1D_OSC2_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB1D_OSC3_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB1D_OSC3_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_CLK_APB1(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Enable
+#define SYS_CTRL_AP_ENABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC2 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC3 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB1D_PWM (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB1_ALWAYS (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB1_DAPLITE (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB1_TIMER (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB1_GPIO (1<<15)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_MASK (0xFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Disable
+#define SYS_CTRL_AP_DISABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC2 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC3 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB1D_PWM (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB1_ALWAYS (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB1_DAPLITE (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB1_TIMER (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB1_GPIO (1<<15)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_MASK (0xFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB2_Mode
+#define SYS_CTRL_AP_MODE_APB2_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB2_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB2_IFC_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH8_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH8_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH9_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH9_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH10_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH10_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_APB2_UART1_AUTOMATIC (0<<13)
+#define SYS_CTRL_AP_MODE_APB2_UART1_MANUAL (1<<13)
+#define SYS_CTRL_AP_MODE_APB2_UART2_AUTOMATIC (0<<14)
+#define SYS_CTRL_AP_MODE_APB2_UART2_MANUAL (1<<14)
+#define SYS_CTRL_AP_MODE_APB2_UART3_AUTOMATIC (0<<15)
+#define SYS_CTRL_AP_MODE_APB2_UART3_MANUAL (1<<15)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_AUTOMATIC (0<<16)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_MANUAL (1<<16)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_AUTOMATIC (0<<17)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_MANUAL (1<<17)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_AUTOMATIC (0<<18)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_MANUAL (1<<18)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_AUTOMATIC (0<<19)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_MANUAL (1<<19)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_AUTOMATIC (0<<20)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_MANUAL (1<<20)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_AUTOMATIC (0<<21)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_MANUAL (1<<21)
+#define SYS_CTRL_AP_MODE_APB2_I2C1_AUTOMATIC (0<<22)
+#define SYS_CTRL_AP_MODE_APB2_I2C1_MANUAL (1<<22)
+#define SYS_CTRL_AP_MODE_APB2_I2C2_AUTOMATIC (0<<23)
+#define SYS_CTRL_AP_MODE_APB2_I2C2_MANUAL (1<<23)
+#define SYS_CTRL_AP_MODE_APB2_I2C3_AUTOMATIC (0<<24)
+#define SYS_CTRL_AP_MODE_APB2_I2C3_MANUAL (1<<24)
+#define SYS_CTRL_AP_MODE_CLK_APB2(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Enable
+#define SYS_CTRL_AP_ENABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH8 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH9 (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH10 (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB2_UART1 (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB2_UART2 (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB2_UART3 (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI1 (1<<16)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI2 (1<<17)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI3 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC1 (1<<19)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC2 (1<<20)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC3 (1<<21)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C1 (1<<22)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C2 (1<<23)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C3 (1<<24)
+#define SYS_CTRL_AP_ENABLE_APB2_ALWAYS (1<<25)
+#define SYS_CTRL_AP_ENABLE_APB2_NANDFLASH (1<<26)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2(n) (((n)&0x7FFFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_MASK (0x7FFFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Disable
+#define SYS_CTRL_AP_DISABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH8 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH9 (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH10 (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB2_UART1 (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB2_UART2 (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB2_UART3 (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI1 (1<<16)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI2 (1<<17)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI3 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC1 (1<<19)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC2 (1<<20)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC3 (1<<21)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C1 (1<<22)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C2 (1<<23)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C3 (1<<24)
+#define SYS_CTRL_AP_DISABLE_APB2_ALWAYS (1<<25)
+#define SYS_CTRL_AP_DISABLE_APB2_NANDFLASH (1<<26)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2(n) (((n)&0x7FFFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_MASK (0x7FFFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_SHIFT (0)
+
+//Clk_MEM_Mode
+#define SYS_CTRL_AP_MODE_CLK_MEM_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_MEM_MANUAL (1<<0)
+
+//Clk_MEM_Enable
+#define SYS_CTRL_AP_ENABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_ENABLE_MEM_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_ENABLE_MEM_CONNECT (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_MASK (0xF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_SHIFT (0)
+
+//Clk_MEM_Disable
+#define SYS_CTRL_AP_DISABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_DISABLE_MEM_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_DISABLE_MEM_CONNECT (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_MASK (0xF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_SHIFT (0)
+
+//Clk_APO_Mode
+#define SYS_CTRL_AP_MODE_APOC_BCK_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APOC_UART1_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART1_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART3_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART3_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_CLK_APO(n) (((n)&01FF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Enable
+#define SYS_CTRL_AP_ENABLE_APOC_BCK (1<<0)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK2 (1<<1)
+#define SYS_CTRL_AP_ENABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_CORE (1<<6)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC (1<<7)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_ALWAYS (1<<9)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_ALWAYS (1<<10)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY_N (1<<11)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XP (1<<12)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XN (1<<13)
+#define SYS_CTRL_AP_ENABLE_APOC_VPU (1<<14)
+#define SYS_CTRL_AP_ENABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_ENABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI2 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APOC_DSI (1<<19)
+#define SYS_CTRL_AP_ENABLE_APOC_GPIO (1<<20)
+#define SYS_CTRL_AP_ENABLE_APOC_SPIFLASH (1<<21)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX (1<<22)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX2 (1<<23)
+#define SYS_CTRL_AP_ENABLE_APOC_PDGB (1<<24)
+#define SYS_CTRL_AP_ENABLE_CLK_APO(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Disable
+#define SYS_CTRL_AP_DISABLE_APOC_BCK (1<<0)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK2 (1<<1)
+#define SYS_CTRL_AP_DISABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_CORE (1<<6)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC (1<<7)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_ALWAYS (1<<9)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_ALWAYS (1<<10)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY_N (1<<11)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XP (1<<12)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XN (1<<13)
+#define SYS_CTRL_AP_DISABLE_APOC_VPU (1<<14)
+#define SYS_CTRL_AP_DISABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_DISABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI2 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APOC_DSI (1<<19)
+#define SYS_CTRL_AP_DISABLE_APOC_GPIO (1<<20)
+#define SYS_CTRL_AP_DISABLE_APOC_SPIFLASH (1<<21)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX (1<<22)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX2 (1<<23)
+#define SYS_CTRL_AP_DISABLE_APOC_PDGB (1<<24)
+#define SYS_CTRL_AP_DISABLE_CLK_APO(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_SHIFT (0)
+
+//Cfg_Clk_AP_CPU
+#define SYS_CTRL_AP_AP_CPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_BUS_DIV_SEL(n) (((n)&3)<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_MASK (3<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_SHIFT (16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV2 (0<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV3 (1<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV4 (2<<16)
+#define SYS_CTRL_AP_DBG_CLKDIV_SEL(n) (((n)&15)<<20)
+#define SYS_CTRL_AP_DBG_CLKDIV_DIV_SEL_MASK (15<<20)
+#define SYS_CTRL_AP_DBG_CLKDIV_SEL_SHIFT (20)
+#define SYS_CTRL_AP_AP_CPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AXI
+#define SYS_CTRL_AP_AP_AXI_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AXI_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AXI_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_GCG
+#define SYS_CTRL_AP_AP_GCG_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GCG_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_GCG_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AHB1
+#define SYS_CTRL_AP_AP_AHB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AHB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB1
+#define SYS_CTRL_AP_AP_APB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB2
+#define SYS_CTRL_AP_AP_APB2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB2_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_MEM
+#define SYS_CTRL_AP_AP_MEM_SRC_DIV2 (1<<12)
+
+//Cfg_Clk_AP_GPU
+#define SYS_CTRL_AP_AP_GPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_GPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VPU
+#define SYS_CTRL_AP_AP_VPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VOC
+#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_SFLSH
+#define SYS_CTRL_AP_AP_SFLSH_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_SFLSH_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Uart
+#define SYS_CTRL_AP_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_AP_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_AP_UART_SEL_PLL_PLL (1<<12)
+
+//L2cc_Ctrl
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_MASK (15<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_SHIFT (0)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M(n) (((n)&15)<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_MASK (15<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_SHIFT (4)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_MASK (15<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_SHIFT (8)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_MASK (15<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_SHIFT (12)
+#define SYS_CTRL_AP_ARAP_L2CC_1_M (1<<16)
+#define SYS_CTRL_AP_AWAP_L2CC_1_M (1<<17)
+#define SYS_CTRL_AP_ARAP_MODEM_MEM_AHBS_M (1<<18)
+#define SYS_CTRL_AP_AWAP_MODEM_MEM_AHBS_M (1<<19)
+#define SYS_CTRL_AP_ARAP_MERGE1M (1<<20)
+#define SYS_CTRL_AP_AWAP_MERGE1M (1<<21)
+#define SYS_CTRL_AP_ARAP_MERGE2M (1<<22)
+#define SYS_CTRL_AP_AWAP_MERGE2M (1<<23)
+#define SYS_CTRL_AP_RESERVE1(n) (((n)&0xFF)<<24)
+#define SYS_CTRL_AP_RESERVE1_MASK (0xFF<<24)
+#define SYS_CTRL_AP_RESERVE1_SHIFT (24)
+
+//Spi_Ctrl
+#define SYS_CTRL_AP_LIMITED_EN_SPI1 (1<<0)
+#define SYS_CTRL_AP_LPSEN_SPI1 (1<<1)
+#define SYS_CTRL_AP_LIMITED_EN_SPI2 (1<<2)
+#define SYS_CTRL_AP_LPSEN_SPI2 (1<<3)
+#define SYS_CTRL_AP_LIMITED_EN_SPI3 (1<<4)
+#define SYS_CTRL_AP_LPSEN_SPI3 (1<<5)
+#define SYS_CTRL_AP_FBUSWID_NFSC (1<<6)
+#define SYS_CTRL_AP_RESERVE3 (1<<7)
+#define SYS_CTRL_AP_DMC_CFG(n) (((n)&0x3FF)<<8)
+#define SYS_CTRL_AP_DMC_CFG_MASK (0x3FF<<8)
+#define SYS_CTRL_AP_DMC_CFG_SHIFT (8)
+#define SYS_CTRL_AP_RESERVE2(n) (((n)&0x3FFF)<<18)
+#define SYS_CTRL_AP_RESERVE2_MASK (0x3FFF<<18)
+#define SYS_CTRL_AP_RESERVE2_SHIFT (18)
+
+//Memory_Margin
+#define SYS_CTRL_AP_EMAW_VOC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_VOC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_VOC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_VOC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_VOC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_VOC_SHIFT (2)
+#define SYS_CTRL_AP_EMAW_VPU(n) (((n)&3)<<5)
+#define SYS_CTRL_AP_EMAW_VPU_MASK (3<<5)
+#define SYS_CTRL_AP_EMAW_VPU_SHIFT (5)
+#define SYS_CTRL_AP_EMA_VPU(n) (((n)&7)<<7)
+#define SYS_CTRL_AP_EMA_VPU_MASK (7<<7)
+#define SYS_CTRL_AP_EMA_VPU_SHIFT (7)
+#define SYS_CTRL_AP_EMAW_GPU(n) (((n)&3)<<10)
+#define SYS_CTRL_AP_EMAW_GPU_MASK (3<<10)
+#define SYS_CTRL_AP_EMAW_GPU_SHIFT (10)
+#define SYS_CTRL_AP_EMA_GPU(n) (((n)&7)<<12)
+#define SYS_CTRL_AP_EMA_GPU_MASK (7<<12)
+#define SYS_CTRL_AP_EMA_GPU_SHIFT (12)
+#define SYS_CTRL_AP_EMAW_GOUDA(n) (((n)&3)<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_MASK (3<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_SHIFT (15)
+#define SYS_CTRL_AP_EMA_GOUDA(n) (((n)&7)<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_MASK (7<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_SHIFT (17)
+#define SYS_CTRL_AP_EMAW_IMEM(n) (((n)&3)<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_MASK (3<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_SHIFT (20)
+#define SYS_CTRL_AP_EMA_IMEM(n) (((n)&7)<<22)
+#define SYS_CTRL_AP_EMA_IMEM_MASK (7<<22)
+#define SYS_CTRL_AP_EMA_IMEM_SHIFT (22)
+#define SYS_CTRL_AP_EMAW_USB(n) (((n)&3)<<25)
+#define SYS_CTRL_AP_EMAW_USB_MASK (3<<25)
+#define SYS_CTRL_AP_EMAW_USB_SHIFT (25)
+#define SYS_CTRL_AP_EMA_USB(n) (((n)&7)<<27)
+#define SYS_CTRL_AP_EMA_USB_MASK (7<<27)
+#define SYS_CTRL_AP_EMA_USB_SHIFT (27)
+
+//Memory_Margin2
+#define SYS_CTRL_AP_EMAW_NFSC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_NFSC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_NFSC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_NFSC_SHIFT (2)
+#define SYS_CTRL_AP_EMA_VPUROM(n) (((n)&7)<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_MASK (7<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_SHIFT (5)
+#define SYS_CTRL_AP_EMA_IMEMROM(n) (((n)&7)<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_MASK (7<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_SHIFT (8)
+#define SYS_CTRL_AP_KEN_VPUROM (1<<11)
+#define SYS_CTRL_AP_PGEN_VPUROM (1<<12)
+#define SYS_CTRL_AP_KEN_IMEMROM (1<<13)
+#define SYS_CTRL_AP_PGEN_IMEMROM (1<<14)
+
+//Memory_Observe
+#define SYS_CTRL_AP_MEM_OBSERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Clk_AP_VOC2
+#define SYS_CTRL_AP_AP_VOC2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC2_FREQ_MASK (31 << 0)
+#define SYS_CTRL_AP_AP_VOC2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC2_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_EMMC
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY_MASK (31 << 0)
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY_SHIFT 0
+#define SYS_CTRL_AP_EMMC_CLK_DLY(n) (((n)&31)<<8)
+#define SYS_CTRL_AP_EMMC_CLK_DLY_MASK (31 << 8)
+#define SYS_CTRL_AP_EMMC_CLK_DLY_SHIFT 8
+#define SYS_CTRL_AP_EMMC_CLK_POL (1<<13)
+
+//Test_Pulse
+#define SYS_CTRL_AP_PULSE_COUNTER(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Reserve
+#define SYS_CTRL_AP_RESERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8820.h b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8820.h
new file mode 100644
index 0000000000..ab7ba4c951
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8820.h
@@ -0,0 +1,1578 @@
+#ifndef _REG_SYSCTRL_H_
+#define _REG_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// AP_CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ CPU0 = 0x00000000,
+ CPU1 = 0x00000001
+} AP_CPU_ID_T;
+
+
+// ============================================================================
+// CPU_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side System clocks
+ CPU_CORE = 0x00000000,
+/// the following don't have an auto enable
+ CPU_DUMMY = 0x00000001
+} CPU_CLKS_T;
+
+#define NB_CPU_CLK_AEN (1)
+#define NB_CPU_CLK_EN (2)
+#define NB_CPU_CLK (2)
+
+// ============================================================================
+// AXI_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side System clocks: AXI and AHB0 and APB0
+ AHB0_CONF = 0x00000000,
+ APB0_CONF = 0x00000001,
+ AXI_VOC = 0x00000002,
+ AXI_DMA = 0x00000003,
+/// the following don't have an auto enable
+ AXI_ALWAYS = 0x00000004,
+ AXI_CONNECT = 0x00000005,
+ APB0_IRQ = 0x00000006
+} AXI_CLKS_T;
+
+#define NB_AXI_CLK_AEN (4)
+#define NB_AXI_CLK_EN (7)
+#define NB_AXI_CLK (7)
+
+// ============================================================================
+// AXIDIV2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIdiv2 side System clocks
+ AXIDIV2_IMEM = 0x00000000,
+/// the following don't have an auto enable
+ AXIDIV2_ALWAYS = 0x00000001,
+ AXIDIV2_CONNECT = 0x00000002,
+ AXIDIV2_VPU = 0x00000003
+} AXIDIV2_CLKS_T;
+
+#define NB_AXIDIV2_CLK_AEN (1)
+#define NB_AXIDIV2_CLK_EN (4)
+#define NB_AXIDIV2_CLK (4)
+
+// ============================================================================
+// GCG_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side System clocks
+ GCG_APB_CONF = 0x00000000,
+ GCG_GOUDA = 0x00000001,
+ GCG_CAMERA = 0x00000002,
+/// the following don't have an auto enable
+ GCG_ALWAYS = 0x00000003,
+ GCG_CONNECT = 0x00000004
+} GCG_CLKS_T;
+
+#define NB_GCG_CLK_AEN (3)
+#define NB_GCG_CLK_EN (5)
+#define NB_GCG_CLK (5)
+
+// ============================================================================
+// AHB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side System clocks
+ AHB1_USBC = 0x00000000,
+/// the following don't have an auto enable
+ AHB1_ALWAYS = 0x00000001,
+ AHB1_SPIFLASH = 0x00000002
+} AHB1_CLKS_T;
+
+#define NB_AHB1_CLK_AEN (1)
+#define NB_AHB1_CLK_EN (3)
+#define NB_AHB1_CLK (3)
+
+// ============================================================================
+// APB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side System clocks
+ APB1_CONF = 0x00000000,
+ APB1_AIF = 0x00000001,
+ APB1_AUIFC = 0x00000002,
+ APB1_AUIFC_CH0 = 0x00000003,
+ APB1_AUIFC_CH1 = 0x00000004,
+ APB1_I2C1 = 0x00000005,
+ APB1_I2C2 = 0x00000006,
+ APB1_I2C3 = 0x00000007,
+/// AP APB1 side divided clock (either divided by module or by clock_ctrl)
+ APB1D_OSC = 0x00000008,
+ APB1D_PWM = 0x00000009,
+/// the following don't have an auto enable
+ APB1_ALWAYS = 0x0000000A,
+ APB1_DAPLITE = 0x0000000B,
+ APB1_TIMER = 0x0000000C,
+ APB1_GPIO = 0x0000000D
+} APB1_CLKS_T;
+
+#define NB_APB1_CLK_AEN (10)
+#define NB_APB1_CLK_EN (14)
+#define NB_APB1_CLK (14)
+
+// ============================================================================
+// APB2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side System clocks
+ APB2_CONF = 0x00000000,
+ APB2_IFC = 0x00000001,
+ APB2_IFC_CH0 = 0x00000002,
+ APB2_IFC_CH1 = 0x00000003,
+ APB2_IFC_CH2 = 0x00000004,
+ APB2_IFC_CH3 = 0x00000005,
+ APB2_IFC_CH4 = 0x00000006,
+ APB2_IFC_CH5 = 0x00000007,
+ APB2_IFC_CH6 = 0x00000008,
+ APB2_IFC_CH7 = 0x00000009,
+ APB2_UART1 = 0x0000000A,
+ APB2_UART2 = 0x0000000B,
+ APB2_UART3 = 0x0000000C,
+ APB2_SPI1 = 0x0000000D,
+ APB2_SPI2 = 0x0000000E,
+ APB2_SPI3 = 0x0000000F,
+ APB2_SDMMC1 = 0x00000010,
+ APB2_SDMMC2 = 0x00000011,
+ APB2_SDMMC3 = 0x00000012,
+/// the following don't have an auto enable
+ APB2_ALWAYS = 0x00000013,
+ APB2_NANDFLASH = 0x00000014
+} APB2_CLKS_T;
+
+#define NB_APB2_CLK_AEN (19)
+#define NB_APB2_CLK_EN (21)
+#define NB_APB2_CLK (21)
+
+// ============================================================================
+// MEM_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side System clocks
+ MEM_CONF = 0x00000000,
+/// the following don't have an auto enable
+ MEM_DMC = 0x00000001,
+ MEM_GPU = 0x00000002,
+ MEM_VPU = 0x00000003,
+ MEM_DDRPHY_P = 0x00000004,
+ MEM_CONNECT = 0x00000005
+} MEM_CLKS_T;
+
+#define NB_MEM_CLK_AEN (1)
+#define NB_MEM_CLK_EN (6)
+#define NB_MEM_CLK (6)
+
+// ============================================================================
+// APO_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side Other clocks
+/// clocks with auto enble
+ APOC_VPU = 0x00000000,
+ APOC_BCK = 0x00000001,
+ APOC_UART1 = 0x00000002,
+ APOC_UART2 = 0x00000003,
+ APOC_UART3 = 0x00000004,
+ APOC_VOC_CORE = 0x00000005,
+ APOC_VOC = 0x00000006,
+/// the following don't have an auto enable
+ APOC_VOC_ALWAYS = 0x00000007,
+ APOC_DDRPHY_N = 0x00000008,
+ APOC_DDRPHY2XP = 0x00000009,
+ APOC_DDRPHY2XN = 0x0000000A,
+ APOC_GPU = 0x0000000B,
+ APOC_USBPHY = 0x0000000C,
+ APOC_CSI = 0x0000000D,
+ APOC_DSI = 0x0000000E,
+ APOC_GPIO = 0x0000000F,
+ APOC_SPIFLASH = 0x00000010,
+ APOC_PIX = 0x00000011,
+ APOC_PDGB = 0x00000012
+} APO_CLKS_T;
+
+#define NB_CLK_VOC_AEN_SYNC (5)
+#define NB_CLK_VOC_CORE (6)
+#define NB_APO_CLK_AEN (7)
+#define NB_CLK_VOC_END (8)
+#define NB_APO_CLK_EN (19)
+#define NB_APO_CLK (19)
+
+// ============================================================================
+// CPU_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side resets
+ CPU_RST_CORE = 0x00000000,
+ CPU_RST_SYS = 0x00000001
+} CPU_RESETS_T;
+
+#define NB_CPU_RST (2)
+
+// ============================================================================
+// AXI_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side resets: AXI and AHB0 and APB0
+ AXI_RST_VOC = 0x00000000,
+ AXI_RST_DMA = 0x00000001,
+ AXI_RST_SYS = 0x00000002,
+ AXI_RST_CONNECT = 0x00000003,
+ AHB0_RST_GPU = 0x00000004,
+ APB0_RST_VPU = 0x00000005,
+ APB0_RST_IRQ = 0x00000006
+} AXI_RESETS_T;
+
+#define NB_AXI_RST (7)
+
+// ============================================================================
+// AXIDIV2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIDIV2 side resets
+ AXIDIV2_RST_IMEM = 0x00000000,
+ AXIDIV2_RST_SYS = 0x00000001,
+ AXIDIV2_RST_VPU = 0x00000002
+} AXIDIV2_RESETS_T;
+
+#define NB_AXIDIV2_RST (3)
+
+// ============================================================================
+// GCG_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side resets
+ GCG_RST_SYS = 0x00000000,
+ GCG_RST_GOUDA = 0x00000001,
+ GCG_RST_CAMERA = 0x00000002
+} GCG_RESETS_T;
+
+#define NB_GCG_RST (3)
+
+// ============================================================================
+// AHB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side resets
+ AHB1_RST_SYS = 0x00000000,
+ AHB1_RST_USBC = 0x00000001,
+ AHB1_RST_SPIFLASH = 0x00000002
+} AHB1_RESETS_T;
+
+#define NB_AHB1_RST (3)
+
+// ============================================================================
+// APB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side resets
+ APB1_RST_SYS = 0x00000000,
+ APB1_RST_TIMER = 0x00000001,
+ APB1_RST_KEYPAD = 0x00000002,
+ APB1_RST_GPIO = 0x00000003,
+ APB1_RST_PWM = 0x00000004,
+ APB1_RST_AIF = 0x00000005,
+ APB1_RST_AUIFC = 0x00000006,
+ APB1_RST_I2C1 = 0x00000007,
+ APB1_RST_I2C2 = 0x00000008,
+ APB1_RST_I2C3 = 0x00000009,
+ APB1_RST_COM_REGS = 0x0000000A,
+ APB1_RST_DMC = 0x0000000B,
+ APB1_RST_DDRPHY_P = 0x0000000C,
+ APB1_RST_BB2G_XCPU = 0x0000000D,
+ APB1_RST_BB2G_BCPU = 0x0000000E,
+ APB1_RST_BB2G_AHBC = 0x0000000F,
+ APB1_RST_BB2G_DMA = 0x00000010,
+ APB1_RST_BB2G_A2A = 0x00000011,
+ APB1_RST_BB2G_XIFC = 0x00000012,
+ APB1_RST_BB2G_BIFC = 0x00000013,
+ APB1_RST_BB2G_BAHBC = 0x00000014,
+ APB1_RST_BB2G_MEM_BRIDGE = 0x00000015
+} APB1_RESETS_T;
+
+#define NB_APB1_RST (22)
+
+// ============================================================================
+// APB2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side resets
+ APB2_RST_SYS = 0x00000000,
+ APB2_RST_IFC = 0x00000001,
+ APB2_RST_UART1 = 0x00000002,
+ APB2_RST_UART2 = 0x00000003,
+ APB2_RST_UART3 = 0x00000004,
+ APB2_RST_SPI1 = 0x00000005,
+ APB2_RST_SPI2 = 0x00000006,
+ APB2_RST_SPI3 = 0x00000007,
+ APB2_RST_SDMMC1 = 0x00000008,
+ APB2_RST_SDMMC2 = 0x00000009,
+ APB2_RST_SDMMC3 = 0x0000000A,
+ APB2_RST_NANDFLASH = 0x0000000B
+} APB2_RESETS_T;
+
+#define NB_APB2_RST (12)
+
+// ============================================================================
+// MEM_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side resets
+ MEM_RST_SYS = 0x00000000,
+ MEM_RST_GPU = 0x00000001,
+ MEM_RST_VPU = 0x00000002,
+ MEM_RST_DMC = 0x00000003,
+ MEM_RST_DDRPHY_P = 0x00000004
+} MEM_RESETS_T;
+
+#define NB_MEM_RST (5)
+
+// ============================================================================
+// AP_OTHERS_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP Reset Other : resync on corresponding clock other
+ AP_RSTO_VOC = 0x00000000,
+ AP_RSTO_DDRPHY_N = 0x00000001,
+ AP_RSTO_DDRPHY2XP = 0x00000002,
+ AP_RSTO_DDRPHY2XN = 0x00000003,
+ AP_RSTO_GPU = 0x00000004,
+ AP_RSTO_VPU = 0x00000005,
+ AP_RSTO_BCK = 0x00000006,
+ AP_RSTO_UART1 = 0x00000007,
+ AP_RSTO_UART2 = 0x00000008,
+ AP_RSTO_UART3 = 0x00000009,
+ AP_RSTO_GPIO = 0x0000000A,
+ AP_RSTO_TIMER = 0x0000000B,
+ AP_RSTO_USBC = 0x0000000C,
+ AP_RSTO_DSI = 0x0000000D,
+ AP_RSTO_SPIFLASH = 0x0000000E,
+ AP_RSTO_TCK = 0x0000000F,
+ AP_RSTO_PDBG_XTAL = 0x00000010
+} AP_OTHERS_RESETS_T;
+
+#define NB_AP_RSTO (17)
+/// For REG_DBG protect lock/unlock value
+#define AP_CTRL_PROTECT_LOCK (0XA50000)
+#define AP_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_AP_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// Register protected by Write_Unlocked_H.
+ REG32 Cfg_Pll_Ctrl[4]; //0x00000004
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000014
+ REG32 Reset_Cause; //0x00000018
+ /// This register is protected.
+ REG32 CPU_Rst_Set; //0x0000001C
+ REG32 CPU_Rst_Clr; //0x00000020
+ /// This register is protected.
+ REG32 AXI_Rst_Set; //0x00000024
+ REG32 AXI_Rst_Clr; //0x00000028
+ /// This register is protected.
+ REG32 AXIDIV2_Rst_Set; //0x0000002C
+ REG32 AXIDIV2_Rst_Clr; //0x00000030
+ /// This register is protected.
+ REG32 GCG_Rst_Set; //0x00000034
+ REG32 GCG_Rst_Clr; //0x00000038
+ /// This register is protected.
+ REG32 AHB1_Rst_Set; //0x0000003C
+ REG32 AHB1_Rst_Clr; //0x00000040
+ /// This register is protected.
+ REG32 APB1_Rst_Set; //0x00000044
+ REG32 APB1_Rst_Clr; //0x00000048
+ /// This register is protected.
+ REG32 APB2_Rst_Set; //0x0000004C
+ REG32 APB2_Rst_Clr; //0x00000050
+ /// This register is protected.
+ REG32 MEM_Rst_Set; //0x00000054
+ REG32 MEM_Rst_Clr; //0x00000058
+ REG32 Clk_CPU_Mode; //0x0000005C
+ REG32 Clk_CPU_Enable; //0x00000060
+ /// This register is protected.
+ REG32 Clk_CPU_Disable; //0x00000064
+ REG32 Clk_AXI_Mode; //0x00000068
+ REG32 Clk_AXI_Enable; //0x0000006C
+ /// This register is protected.
+ REG32 Clk_AXI_Disable; //0x00000070
+ REG32 Clk_AXIDIV2_Mode; //0x00000074
+ REG32 Clk_AXIDIV2_Enable; //0x00000078
+ /// This register is protected.
+ REG32 Clk_AXIDIV2_Disable; //0x0000007C
+ REG32 Clk_GCG_Mode; //0x00000080
+ REG32 Clk_GCG_Enable; //0x00000084
+ /// This register is protected.
+ REG32 Clk_GCG_Disable; //0x00000088
+ REG32 Clk_AHB1_Mode; //0x0000008C
+ REG32 Clk_AHB1_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_AHB1_Disable; //0x00000094
+ REG32 Clk_APB1_Mode; //0x00000098
+ REG32 Clk_APB1_Enable; //0x0000009C
+ /// This register is protected.
+ REG32 Clk_APB1_Disable; //0x000000A0
+ REG32 Clk_APB2_Mode; //0x000000A4
+ REG32 Clk_APB2_Enable; //0x000000A8
+ /// This register is protected.
+ REG32 Clk_APB2_Disable; //0x000000AC
+ REG32 Clk_MEM_Mode; //0x000000B0
+ REG32 Clk_MEM_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_MEM_Disable; //0x000000B8
+ REG32 Clk_APO_Mode; //0x000000BC
+ REG32 Clk_APO_Enable; //0x000000C0
+ /// This register is protected.
+ REG32 Clk_APO_Disable; //0x000000C4
+ REG32 Cfg_Clk_AP_CPU; //0x000000C8
+ REG32 Cfg_Clk_AP_AXI; //0x000000CC
+ REG32 Cfg_Clk_AP_GCG; //0x000000D0
+ REG32 Cfg_Clk_AP_AHB1; //0x000000D4
+ REG32 Cfg_Clk_AP_APB1; //0x000000D8
+ REG32 Cfg_Clk_AP_APB2; //0x000000DC
+ REG32 Cfg_Clk_AP_MEM; //0x000000E0
+ REG32 Cfg_Clk_AP_GPU; //0x000000E4
+ REG32 Cfg_Clk_AP_VPU; //0x000000E8
+ REG32 Cfg_Clk_AP_VOC; //0x000000EC
+ REG32 Cfg_Clk_AP_SFLSH; //0x000000F0
+ REG32 Cfg_Clk_Uart[3]; //0x000000F4
+ REG32 L2cc_Ctrl; //0x00000100
+ REG32 Spi_Ctrl; //0x00000104
+ REG32 Memory_Margin; //0x00000108
+ REG32 Memory_Margin2; //0x0000010C
+ REG32 Memory_Observe; //0x00000110
+ REG32 Cfg_Clk_AP_VOC2; //0x00000114
+ REG32 Cfg_Clk_EMMC; //0x00000118
+ REG32 Test_Pulse; //0x0000011C
+ REG32 Reserved_00000114[49]; //0x00000120
+ /// This register is reserved.
+ REG32 Cfg_Cpu_Reserve0; //0x000001E4
+ REG32 Cfg_Cpu_Reserve1; //0x000001E8
+ REG32 Cfg_Cpu_Reserve2; //0x000001EC
+ REG32 Cfg_Cpu_Reserve3; //0x000001F0
+ REG32 Cfg_Cpu_Reserve4; //0x000001F4
+ REG32 Cfg_Cpu_Reserve5; //0x000001F8
+ REG32 Cfg_Reserve; //0x000001FC
+} HWP_SYS_CTRL_AP_T;
+
+#define hwp_sysCtrlAp ((HWP_SYS_CTRL_AP_T*)(RDA_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_AP_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_AP_WRITE_UNLOCK (1<<31)
+
+//Cfg_Pll_Ctrl
+#define SYS_CTRL_AP_AP_PLL_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(n) (((n)&31)<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_MASK (31<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_SHIFT (16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(n) (((n)&31)<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_MASK (31<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_SHIFT (24)
+#define SYS_CTRL_AP_PLL_AP_CFG(n) (((n)&0x1F1F1111)<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_MASK (0x1F1F1111<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_AP_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_AP_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_SLOW (1<<1)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_FAST (0<<1)
+#define SYS_CTRL_AP_TIMER2_SEL_FAST_SLOW (1<<2)
+#define SYS_CTRL_AP_TIMER2_SEL_FAST_FAST (0<<2)
+#define SYS_CTRL_AP_TIMER3_SEL_FAST_SLOW (1<<3)
+#define SYS_CTRL_AP_TIMER3_SEL_FAST_FAST (0<<3)
+#define SYS_CTRL_AP_CPU_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_AP_CPU_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_AP_BUS_SEL_FAST_SLOW (1<<5)
+#define SYS_CTRL_AP_BUS_SEL_FAST_FAST (0<<5)
+#define SYS_CTRL_AP_RF_DETECTED_OK (1<<8)
+#define SYS_CTRL_AP_RF_DETECTED_NO (0<<8)
+#define SYS_CTRL_AP_RF_DETECT_BYPASS (1<<9)
+#define SYS_CTRL_AP_RF_DETECT_RESET (1<<10)
+#define SYS_CTRL_AP_RF_SELECTED_L (1<<11)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_MASK (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_SHIFT (12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_NOT_LOCKED (0<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_MASK (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_SHIFT (13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_NOT_LOCKED (0<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_MASK (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_SHIFT (14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_NOT_LOCKED (0<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_USB (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_MASK (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_SHIFT (15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_NOT_LOCKED (0<<15)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_CPU (1<<20)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_BUS (1<<21)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_MASK (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_SHIFT (30)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_MASK (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_SHIFT (31)
+
+//Reset_Cause
+#define SYS_CTRL_AP_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_AP_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_AP_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_AP_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_AP_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_AP_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_AP_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_AP_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_AP_FONCTIONAL_TEST_MODE (1<<31)
+
+//CPU_Rst_Set
+#define SYS_CTRL_AP_SET_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE1 (1<<1)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE2 (1<<2)
+#define SYS_CTRL_AP_SET_CPU_RST_CORE3 (1<<3)
+#define SYS_CTRL_AP_SET_CPU_RST_L2 (1<<4)
+#define SYS_CTRL_AP_SET_CPU_RST_SYS (1<<5)
+#define SYS_CTRL_AP_SOFT_RST (1<<31)
+#define SYS_CTRL_AP_SET_CPU_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SHIFT (0)
+
+//CPU_Rst_Clr
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE1 (1<<1)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE2 (1<<2)
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE3 (1<<3)
+#define SYS_CTRL_AP_CLR_CPU_RST_L2 (1<<4)
+#define SYS_CTRL_AP_CLR_CPU_RST_SYS (1<<5)
+#define SYS_CTRL_AP_CLR_CPU_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SHIFT (0)
+
+//AXI_Rst_Set
+#define SYS_CTRL_AP_SET_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_SET_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_SET_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_SET_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_SET_APB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_SET_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_SET_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_SET_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_SHIFT (0)
+
+//AXI_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_CLR_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_CLR_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_CLR_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_CLR_APB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_CLR_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_CLR_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_CLR_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Set
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SHIFT (0)
+
+//GCG_Rst_Set
+#define SYS_CTRL_AP_SET_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_SET_GCG_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_SHIFT (0)
+
+//GCG_Rst_Clr
+#define SYS_CTRL_AP_CLR_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_CLR_GCG_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_SHIFT (0)
+
+//AHB1_Rst_Set
+#define SYS_CTRL_AP_SET_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_SET_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_SET_AHB1_RST_EMAC (1<<3)
+#define SYS_CTRL_AP_SET_AHB1_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_SHIFT (0)
+
+//AHB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_CLR_AHB1_RST_EMAC (1<<3)
+#define SYS_CTRL_AP_CLR_AHB1_RST(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_MASK (0xF<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SHIFT (0)
+
+//APB1_Rst_Set
+#define SYS_CTRL_AP_SET_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_SET_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_SET_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_SET_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_SET_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_SET_APB1_RST_COM_REGS (1<<8)
+#define SYS_CTRL_AP_SET_APB1_RST_DMC (1<<9)
+#define SYS_CTRL_AP_SET_APB1_RST_DDRPHY_P (1<<10)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XCPU (1<<11)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BCPU (1<<12)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_AHBC (1<<13)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_DMA (1<<14)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_A2A (1<<15)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XIFC (1<<16)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BIFC (1<<17)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BAHBC (1<<18)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_MEM_BRIDGE (1<<19)
+#define SYS_CTRL_AP_SET_APB1_RST(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_MASK (0xFFFFF<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_SHIFT (0)
+
+//APB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_CLR_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_CLR_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_CLR_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_CLR_APB1_RST_COM_REGS (1<<8)
+#define SYS_CTRL_AP_CLR_APB1_RST_DMC (1<<9)
+#define SYS_CTRL_AP_CLR_APB1_RST_DDRPHY_P (1<<10)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XCPU (1<<11)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BCPU (1<<12)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_AHBC (1<<13)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_DMA (1<<14)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_A2A (1<<15)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XIFC (1<<16)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BIFC (1<<17)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BAHBC (1<<18)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_MEM_BRIDGE (1<<19)
+#define SYS_CTRL_AP_CLR_APB1_RST(n) (((n)&0xFFFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_MASK (0xFFFFF<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_SHIFT (0)
+
+//APB2_Rst_Set
+#define SYS_CTRL_AP_SET_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_SET_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_SET_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_SET_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_SET_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C1 (1<<12)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C2 (1<<13)
+#define SYS_CTRL_AP_SET_APB2_RST_I2C3 (1<<14)
+#define SYS_CTRL_AP_SET_APB2_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_SHIFT (0)
+
+//APB2_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C1 (1<<12)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C2 (1<<13)
+#define SYS_CTRL_AP_CLR_APB2_RST_I2C3 (1<<14)
+#define SYS_CTRL_AP_CLR_APB2_RST(n) (((n)&0x7FFF)<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_MASK (0x7FFF<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_SHIFT (0)
+
+//MEM_Rst_Set
+#define SYS_CTRL_AP_SET_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_DMC (1<<1)
+#define SYS_CTRL_AP_SET_MEM_RST_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_SET_MEM_RST(n) (((n)&0x7)<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_MASK (0x7<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_SHIFT (0)
+
+//MEM_Rst_Clr
+#define SYS_CTRL_AP_CLR_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_DMC (1<<1)
+#define SYS_CTRL_AP_CLR_MEM_RST_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_CLR_MEM_RST(n) (((n)&0x7)<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_MASK (0x7<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_SHIFT (0)
+
+//Clk_CPU_Mode
+#define SYS_CTRL_AP_MODE_CLK_CPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_CPU_MANUAL (1<<0)
+
+//Clk_CPU_Enable
+#define SYS_CTRL_AP_ENABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_ENABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_SHIFT (0)
+
+//Clk_CPU_Disable
+#define SYS_CTRL_AP_DISABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_DISABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_SHIFT (0)
+
+//Clk_AXI_Mode
+#define SYS_CTRL_AP_MODE_AHB0_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_AHB0_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB0_CONF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB0_CONF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_AXI_VOC_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_AXI_DMA_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_AXI_DMA_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_CLK_AXI(n) (((n)&0x1F)<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_MASK (0x1F<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Enable
+#define SYS_CTRL_AP_ENABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_ENABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_ENABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_ENABLE_AXI_VPU (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB0_IRQ (1<<8)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Disable
+#define SYS_CTRL_AP_DISABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_DISABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_DISABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_DISABLE_AXI_VPU (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB0_IRQ (1<<8)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI(n) (((n)&0x1FF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXIDIV2_Mode
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_MANUAL (1<<0)
+
+//Clk_AXIDIV2_Enable
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_AXIDIV2_Disable
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_GCG_Mode
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_CLK_GCG(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_MASK (0xF<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Enable
+#define SYS_CTRL_AP_ENABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_GCG_ALWAYS (1<<4)
+#define SYS_CTRL_AP_ENABLE_GCG_CONNECT (1<<5)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA_AW (1<<6)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA_DPI (1<<7)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_MASK (0xFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Disable
+#define SYS_CTRL_AP_DISABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_GCG_ALWAYS (1<<4)
+#define SYS_CTRL_AP_DISABLE_GCG_CONNECT (1<<5)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA_AW (1<<6)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA_DPI (1<<7)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_MASK (0xFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_SHIFT (0)
+
+//Clk_AHB1_Mode
+#define SYS_CTRL_AP_MODE_CLK_AHB1_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AHB1_MANUAL (1<<0)
+
+//Clk_AHB1_Enable
+#define SYS_CTRL_AP_ENABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_ENABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_ENABLE_AHB1_EMAC (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_MASK (0xF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_AHB1_Disable
+#define SYS_CTRL_AP_DISABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_DISABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_DISABLE_AHB1_EMAC (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_MASK (0xF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_APB1_Mode
+#define SYS_CTRL_AP_MODE_APB1_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB1_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB1_AIF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB1D_OSC2_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB1D_OSC2_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB1D_OSC3_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB1D_OSC3_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_CLK_APB1(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Enable
+#define SYS_CTRL_AP_ENABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC2 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC3 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB1D_PWM (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB1_ALWAYS (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB1_DAPLITE (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB1_TIMER (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB1_GPIO (1<<15)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_MASK (0xFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Disable
+#define SYS_CTRL_AP_DISABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC2 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC3 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB1D_PWM (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB1_ALWAYS (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB1_DAPLITE (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB1_TIMER (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB1_GPIO (1<<15)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_MASK (0xFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB2_Mode
+#define SYS_CTRL_AP_MODE_APB2_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB2_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB2_IFC_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH8_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH8_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH9_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH9_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH10_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH10_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_APB2_UART1_AUTOMATIC (0<<13)
+#define SYS_CTRL_AP_MODE_APB2_UART1_MANUAL (1<<13)
+#define SYS_CTRL_AP_MODE_APB2_UART2_AUTOMATIC (0<<14)
+#define SYS_CTRL_AP_MODE_APB2_UART2_MANUAL (1<<14)
+#define SYS_CTRL_AP_MODE_APB2_UART3_AUTOMATIC (0<<15)
+#define SYS_CTRL_AP_MODE_APB2_UART3_MANUAL (1<<15)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_AUTOMATIC (0<<16)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_MANUAL (1<<16)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_AUTOMATIC (0<<17)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_MANUAL (1<<17)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_AUTOMATIC (0<<18)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_MANUAL (1<<18)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_AUTOMATIC (0<<19)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_MANUAL (1<<19)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_AUTOMATIC (0<<20)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_MANUAL (1<<20)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_AUTOMATIC (0<<21)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_MANUAL (1<<21)
+#define SYS_CTRL_AP_MODE_APB2_I2C1_AUTOMATIC (0<<22)
+#define SYS_CTRL_AP_MODE_APB2_I2C1_MANUAL (1<<22)
+#define SYS_CTRL_AP_MODE_APB2_I2C2_AUTOMATIC (0<<23)
+#define SYS_CTRL_AP_MODE_APB2_I2C2_MANUAL (1<<23)
+#define SYS_CTRL_AP_MODE_APB2_I2C3_AUTOMATIC (0<<24)
+#define SYS_CTRL_AP_MODE_APB2_I2C3_MANUAL (1<<24)
+#define SYS_CTRL_AP_MODE_CLK_APB2(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Enable
+#define SYS_CTRL_AP_ENABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH8 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH9 (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH10 (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB2_UART1 (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB2_UART2 (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB2_UART3 (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI1 (1<<16)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI2 (1<<17)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI3 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC1 (1<<19)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC2 (1<<20)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC3 (1<<21)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C1 (1<<22)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C2 (1<<23)
+#define SYS_CTRL_AP_ENABLE_APB2_I2C3 (1<<24)
+#define SYS_CTRL_AP_ENABLE_APB2_ALWAYS (1<<25)
+#define SYS_CTRL_AP_ENABLE_APB2_NANDFLASH (1<<26)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2(n) (((n)&0x7FFFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_MASK (0x7FFFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Disable
+#define SYS_CTRL_AP_DISABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH8 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH9 (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH10 (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB2_UART1 (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB2_UART2 (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB2_UART3 (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI1 (1<<16)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI2 (1<<17)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI3 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC1 (1<<19)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC2 (1<<20)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC3 (1<<21)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C1 (1<<22)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C2 (1<<23)
+#define SYS_CTRL_AP_DISABLE_APB2_I2C3 (1<<24)
+#define SYS_CTRL_AP_DISABLE_APB2_ALWAYS (1<<25)
+#define SYS_CTRL_AP_DISABLE_APB2_NANDFLASH (1<<26)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2(n) (((n)&0x7FFFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_MASK (0x7FFFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_SHIFT (0)
+
+//Clk_MEM_Mode
+#define SYS_CTRL_AP_MODE_CLK_MEM_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_MEM_MANUAL (1<<0)
+
+//Clk_MEM_Enable
+#define SYS_CTRL_AP_ENABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_ENABLE_MEM_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_ENABLE_MEM_CONNECT (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_MASK (0xF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_SHIFT (0)
+
+//Clk_MEM_Disable
+#define SYS_CTRL_AP_DISABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_DISABLE_MEM_DDRPHY_P (1<<2)
+#define SYS_CTRL_AP_DISABLE_MEM_CONNECT (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM(n) (((n)&0xF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_MASK (0xF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_SHIFT (0)
+
+//Clk_APO_Mode
+#define SYS_CTRL_AP_MODE_APOC_BCK_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APOC_UART1_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART1_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART3_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART3_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_CLK_APO(n) (((n)&01FF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_MASK (0x1FF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Enable
+#define SYS_CTRL_AP_ENABLE_APOC_BCK (1<<0)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK2 (1<<1)
+#define SYS_CTRL_AP_ENABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_CORE (1<<6)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC (1<<7)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_ALWAYS (1<<9)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_ALWAYS (1<<10)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY_N (1<<11)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XP (1<<12)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XN (1<<13)
+#define SYS_CTRL_AP_ENABLE_APOC_VPU (1<<14)
+#define SYS_CTRL_AP_ENABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_ENABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI2 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APOC_DSI (1<<19)
+#define SYS_CTRL_AP_ENABLE_APOC_GPIO (1<<20)
+#define SYS_CTRL_AP_ENABLE_APOC_SPIFLASH (1<<21)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX (1<<22)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX2 (1<<23)
+#define SYS_CTRL_AP_ENABLE_APOC_PDGB (1<<24)
+#define SYS_CTRL_AP_ENABLE_CLK_APO(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Disable
+#define SYS_CTRL_AP_DISABLE_APOC_BCK (1<<0)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK2 (1<<1)
+#define SYS_CTRL_AP_DISABLE_APOC_UART1 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APOC_UART2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APOC_UART3 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_CORE (1<<5)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_CORE (1<<6)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC (1<<7)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_ALWAYS (1<<9)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_ALWAYS (1<<10)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY_N (1<<11)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XP (1<<12)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XN (1<<13)
+#define SYS_CTRL_AP_DISABLE_APOC_VPU (1<<14)
+#define SYS_CTRL_AP_DISABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_DISABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI2 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APOC_DSI (1<<19)
+#define SYS_CTRL_AP_DISABLE_APOC_GPIO (1<<20)
+#define SYS_CTRL_AP_DISABLE_APOC_SPIFLASH (1<<21)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX (1<<22)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX2 (1<<23)
+#define SYS_CTRL_AP_DISABLE_APOC_PDGB (1<<24)
+#define SYS_CTRL_AP_DISABLE_CLK_APO(n) (((n)&0x1FFFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_MASK (0x1FFFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_SHIFT (0)
+
+//Cfg_Clk_AP_CPU
+#define SYS_CTRL_AP_AP_CPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_BUS_DIV_SEL(n) (((n)&3)<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_MASK (3<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_SHIFT (16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV2 (0<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV3 (1<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV4 (2<<16)
+#define SYS_CTRL_AP_DBG_CLKDIV_SEL(n) (((n)&15)<<20)
+#define SYS_CTRL_AP_DBG_CLKDIV_DIV_SEL_MASK (15<<20)
+#define SYS_CTRL_AP_DBG_CLKDIV_SEL_SHIFT (20)
+#define SYS_CTRL_AP_AP_CPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AXI
+#define SYS_CTRL_AP_AP_AXI_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AXI_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AXI_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_GCG
+#define SYS_CTRL_AP_AP_GCG_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GCG_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_GCG_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AHB1
+#define SYS_CTRL_AP_AP_AHB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AHB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB1
+#define SYS_CTRL_AP_AP_APB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB2
+#define SYS_CTRL_AP_AP_APB2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB2_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_MEM
+#define SYS_CTRL_AP_AP_MEM_SRC_DIV2 (1<<12)
+
+//Cfg_Clk_AP_GPU
+#define SYS_CTRL_AP_AP_GPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_GPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VPU
+#define SYS_CTRL_AP_AP_VPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VOC
+#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_SFLSH
+#define SYS_CTRL_AP_AP_SFLSH_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_SFLSH_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Uart
+#define SYS_CTRL_AP_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_AP_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_AP_UART_SEL_PLL_PLL (1<<12)
+
+//L2cc_Ctrl
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_MASK (15<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_SHIFT (0)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M(n) (((n)&15)<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_MASK (15<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_SHIFT (4)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_MASK (15<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_SHIFT (8)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_MASK (15<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_SHIFT (12)
+#define SYS_CTRL_AP_ARAP_L2CC_1_M (1<<16)
+#define SYS_CTRL_AP_AWAP_L2CC_1_M (1<<17)
+#define SYS_CTRL_AP_ARAP_MODEM_MEM_AHBS_M (1<<18)
+#define SYS_CTRL_AP_AWAP_MODEM_MEM_AHBS_M (1<<19)
+#define SYS_CTRL_AP_ARAP_MERGE1M (1<<20)
+#define SYS_CTRL_AP_AWAP_MERGE1M (1<<21)
+#define SYS_CTRL_AP_ARAP_MERGE2M (1<<22)
+#define SYS_CTRL_AP_AWAP_MERGE2M (1<<23)
+#define SYS_CTRL_AP_RESERVE1(n) (((n)&0xFF)<<24)
+#define SYS_CTRL_AP_RESERVE1_MASK (0xFF<<24)
+#define SYS_CTRL_AP_RESERVE1_SHIFT (24)
+
+//Spi_Ctrl
+#define SYS_CTRL_AP_LIMITED_EN_SPI1 (1<<0)
+#define SYS_CTRL_AP_LPSEN_SPI1 (1<<1)
+#define SYS_CTRL_AP_LIMITED_EN_SPI2 (1<<2)
+#define SYS_CTRL_AP_LPSEN_SPI2 (1<<3)
+#define SYS_CTRL_AP_LIMITED_EN_SPI3 (1<<4)
+#define SYS_CTRL_AP_LPSEN_SPI3 (1<<5)
+#define SYS_CTRL_AP_FBUSWID_NFSC (1<<6)
+#define SYS_CTRL_AP_RESERVE3 (1<<7)
+#define SYS_CTRL_AP_DMC_CFG(n) (((n)&0x3FF)<<8)
+#define SYS_CTRL_AP_DMC_CFG_MASK (0x3FF<<8)
+#define SYS_CTRL_AP_DMC_CFG_SHIFT (8)
+#define SYS_CTRL_AP_RESERVE2(n) (((n)&0x3FFF)<<18)
+#define SYS_CTRL_AP_RESERVE2_MASK (0x3FFF<<18)
+#define SYS_CTRL_AP_RESERVE2_SHIFT (18)
+
+//Memory_Margin
+#define SYS_CTRL_AP_EMAW_VOC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_VOC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_VOC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_VOC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_VOC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_VOC_SHIFT (2)
+#define SYS_CTRL_AP_EMAW_VPU(n) (((n)&3)<<5)
+#define SYS_CTRL_AP_EMAW_VPU_MASK (3<<5)
+#define SYS_CTRL_AP_EMAW_VPU_SHIFT (5)
+#define SYS_CTRL_AP_EMA_VPU(n) (((n)&7)<<7)
+#define SYS_CTRL_AP_EMA_VPU_MASK (7<<7)
+#define SYS_CTRL_AP_EMA_VPU_SHIFT (7)
+#define SYS_CTRL_AP_EMAW_GPU(n) (((n)&3)<<10)
+#define SYS_CTRL_AP_EMAW_GPU_MASK (3<<10)
+#define SYS_CTRL_AP_EMAW_GPU_SHIFT (10)
+#define SYS_CTRL_AP_EMA_GPU(n) (((n)&7)<<12)
+#define SYS_CTRL_AP_EMA_GPU_MASK (7<<12)
+#define SYS_CTRL_AP_EMA_GPU_SHIFT (12)
+#define SYS_CTRL_AP_EMAW_GOUDA(n) (((n)&3)<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_MASK (3<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_SHIFT (15)
+#define SYS_CTRL_AP_EMA_GOUDA(n) (((n)&7)<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_MASK (7<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_SHIFT (17)
+#define SYS_CTRL_AP_EMAW_IMEM(n) (((n)&3)<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_MASK (3<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_SHIFT (20)
+#define SYS_CTRL_AP_EMA_IMEM(n) (((n)&7)<<22)
+#define SYS_CTRL_AP_EMA_IMEM_MASK (7<<22)
+#define SYS_CTRL_AP_EMA_IMEM_SHIFT (22)
+#define SYS_CTRL_AP_EMAW_USB(n) (((n)&3)<<25)
+#define SYS_CTRL_AP_EMAW_USB_MASK (3<<25)
+#define SYS_CTRL_AP_EMAW_USB_SHIFT (25)
+#define SYS_CTRL_AP_EMA_USB(n) (((n)&7)<<27)
+#define SYS_CTRL_AP_EMA_USB_MASK (7<<27)
+#define SYS_CTRL_AP_EMA_USB_SHIFT (27)
+
+//Memory_Margin2
+#define SYS_CTRL_AP_EMAW_NFSC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_NFSC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_NFSC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_NFSC_SHIFT (2)
+#define SYS_CTRL_AP_EMA_VPUROM(n) (((n)&7)<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_MASK (7<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_SHIFT (5)
+#define SYS_CTRL_AP_EMA_IMEMROM(n) (((n)&7)<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_MASK (7<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_SHIFT (8)
+#define SYS_CTRL_AP_KEN_VPUROM (1<<11)
+#define SYS_CTRL_AP_PGEN_VPUROM (1<<12)
+#define SYS_CTRL_AP_KEN_IMEMROM (1<<13)
+#define SYS_CTRL_AP_PGEN_IMEMROM (1<<14)
+
+//Memory_Observe
+#define SYS_CTRL_AP_MEM_OBSERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Clk_AP_VOC2
+#define SYS_CTRL_AP_AP_VOC2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC2_FREQ_MASK (31 << 0)
+#define SYS_CTRL_AP_AP_VOC2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC2_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_EMMC
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY_MASK (31 << 0)
+#define SYS_CTRL_AP_EMMC_DATA_STB_DLY_SHIFT 0
+#define SYS_CTRL_AP_EMMC_CLK_DLY(n) (((n)&31)<<8)
+#define SYS_CTRL_AP_EMMC_CLK_DLY_MASK (31 << 8)
+#define SYS_CTRL_AP_EMMC_CLK_DLY_SHIFT 8
+#define SYS_CTRL_AP_EMMC_CLK_POL (1<<13)
+
+//Test_Pulse
+#define SYS_CTRL_AP_PULSE_COUNTER(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Reserve
+#define SYS_CTRL_AP_RESERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+#endif
diff --git a/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850.h b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850.h
new file mode 100644
index 0000000000..6b0169fc89
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850.h
@@ -0,0 +1,1540 @@
+#ifndef _REG_SYSCTRL_H_
+#define _REG_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// AP_CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ CPU0 = 0x00000000,
+ CPU1 = 0x00000001
+} AP_CPU_ID_T;
+
+
+// ============================================================================
+// CPU_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side System clocks
+ CPU_CORE = 0x00000000,
+/// the following don't have an auto enable
+ CPU_DUMMY = 0x00000001
+} CPU_CLKS_T;
+
+#define NB_CPU_CLK_AEN (1)
+#define NB_CPU_CLK_EN (2)
+#define NB_CPU_CLK (2)
+
+// ============================================================================
+// AXI_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side System clocks: AXI and AHB0 and APB0
+ AHB0_CONF = 0x00000000,
+ APB0_CONF = 0x00000001,
+ AXI_VOC = 0x00000002,
+ AXI_VOC2 = 0x00000003,
+ AXI_DMA = 0x00000004,
+/// the following don't have an auto enable
+ AXI_ALWAYS = 0x00000005,
+ AXI_CONNECT = 0x00000006,
+ APB0_IRQ = 0x00000007
+} AXI_CLKS_T;
+
+#define NB_AXI_CLK_AEN (5)
+#define NB_AXI_CLK_EN (8)
+#define NB_AXI_CLK (8)
+
+// ============================================================================
+// AXIDIV2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIdiv2 side System clocks
+ AXIDIV2_IMEM = 0x00000000,
+/// the following don't have an auto enable
+ AXIDIV2_ALWAYS = 0x00000001,
+ AXIDIV2_CONNECT = 0x00000002,
+ AXIDIV2_VPU = 0x00000003
+} AXIDIV2_CLKS_T;
+
+#define NB_AXIDIV2_CLK_AEN (1)
+#define NB_AXIDIV2_CLK_EN (4)
+#define NB_AXIDIV2_CLK (4)
+
+// ============================================================================
+// GCG_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side System clocks
+ GCG_APB_CONF = 0x00000000,
+ GCG_GOUDA = 0x00000001,
+ GCG_CAMERA = 0x00000002,
+/// the following don't have an auto enable
+ GCG_ALWAYS = 0x00000003,
+ GCG_CONNECT = 0x00000004
+} GCG_CLKS_T;
+
+#define NB_GCG_CLK_AEN (3)
+#define NB_GCG_CLK_EN (5)
+#define NB_GCG_CLK (5)
+
+// ============================================================================
+// AHB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side System clocks
+ AHB1_USBC = 0x00000000,
+/// the following don't have an auto enable
+ AHB1_ALWAYS = 0x00000001,
+ AHB1_SPIFLASH = 0x00000002
+} AHB1_CLKS_T;
+
+#define NB_AHB1_CLK_AEN (1)
+#define NB_AHB1_CLK_EN (3)
+#define NB_AHB1_CLK (3)
+
+// ============================================================================
+// APB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side System clocks
+ APB1_CONF = 0x00000000,
+ APB1_AIF = 0x00000001,
+ APB1_AIF2 = 0x00000002,
+ APB1_AUIFC = 0x00000003,
+ APB1_AUIFC_CH0 = 0x00000004,
+ APB1_AUIFC_CH1 = 0x00000005,
+ APB1_AUIFC_CH2 = 0x00000006,
+ APB1_AUIFC_CH3 = 0x00000007,
+ APB1_I2C1 = 0x00000008,
+ APB1_I2C2 = 0x00000009,
+ APB1_I2C3 = 0x0000000A,
+/// AP APB1 side divided clock (either divided by module or by clock_ctrl)
+ APB1D_OSC = 0x0000000B,
+ APB1D_PWM = 0x0000000C,
+/// the following don't have an auto enable
+ APB1_ALWAYS = 0x0000000D,
+ APB1_DAPLITE = 0x0000000E,
+ APB1_TIMER = 0x0000000F,
+ APB1_GPIO = 0x00000010
+} APB1_CLKS_T;
+
+#define NB_APB1_CLK_AEN (13)
+#define NB_APB1_CLK_EN (17)
+#define NB_APB1_CLK (17)
+
+// ============================================================================
+// APB2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side System clocks
+ APB2_CONF = 0x00000000,
+ APB2_IFC = 0x00000001,
+ APB2_IFC_CH0 = 0x00000002,
+ APB2_IFC_CH1 = 0x00000003,
+ APB2_IFC_CH2 = 0x00000004,
+ APB2_IFC_CH3 = 0x00000005,
+ APB2_IFC_CH4 = 0x00000006,
+ APB2_IFC_CH5 = 0x00000007,
+ APB2_IFC_CH6 = 0x00000008,
+ APB2_IFC_CH7 = 0x00000009,
+ APB2_UART1 = 0x0000000A,
+ APB2_UART2 = 0x0000000B,
+ APB2_UART3 = 0x0000000C,
+ APB2_SPI1 = 0x0000000D,
+ APB2_SPI2 = 0x0000000E,
+ APB2_SPI3 = 0x0000000F,
+ APB2_SDMMC1 = 0x00000010,
+ APB2_SDMMC2 = 0x00000011,
+ APB2_SDMMC3 = 0x00000012,
+/// the following don't have an auto enable
+ APB2_ALWAYS = 0x00000013,
+ APB2_NANDFLASH = 0x00000014
+} APB2_CLKS_T;
+
+#define NB_APB2_CLK_AEN (19)
+#define NB_APB2_CLK_EN (21)
+#define NB_APB2_CLK (21)
+
+// ============================================================================
+// MEM_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side System clocks
+ MEM_CONF = 0x00000000,
+/// the following don't have an auto enable
+ MEM_DMC = 0x00000001,
+ MEM_GPU = 0x00000002,
+ MEM_VPU = 0x00000003,
+ MEM_DDRPHY_P = 0x00000004,
+ MEM_CONNECT = 0x00000005
+} MEM_CLKS_T;
+
+#define NB_MEM_CLK_AEN (1)
+#define NB_MEM_CLK_EN (6)
+#define NB_MEM_CLK (6)
+
+// ============================================================================
+// APO_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side Other clocks
+/// clocks with auto enble
+ APOC_VPU = 0x00000000,
+ APOC_BCK = 0x00000001,
+ APOC_BCK2 = 0x00000002,
+ APOC_UART1 = 0x00000003,
+ APOC_UART2 = 0x00000004,
+ APOC_UART3 = 0x00000005,
+ APOC_VOC_CORE = 0x00000006,
+ APOC_VOC2_CORE = 0x00000007,
+ APOC_VOC = 0x00000008,
+ APOC_VOC2 = 0x00000009,
+/// the following don't have an auto enable
+ APOC_VOC_ALWAYS = 0x0000000A,
+ APOC_VOC2_ALWAYS = 0x0000000B,
+ APOC_DDRPHY_N = 0x0000000C,
+ APOC_DDRPHY2XP = 0x0000000D,
+ APOC_DDRPHY2XN = 0x0000000E,
+ APOC_GPU = 0x0000000F,
+ APOC_USBPHY = 0x00000010,
+ APOC_CSI = 0x00000011,
+ APOC_DSI = 0x00000012,
+ APOC_GPIO = 0x00000013,
+ APOC_SPIFLASH = 0x00000014,
+ APOC_PIX = 0x00000015,
+ APOC_PDGB = 0x00000016
+} APO_CLKS_T;
+
+#define NB_CLK_VOC_AEN_SYNC (6)
+#define NB_CLK_VOC_CORE (8)
+#define NB_APO_CLK_AEN (10)
+#define NB_CLK_VOC_END (12)
+#define NB_APO_CLK_EN (23)
+#define NB_APO_CLK (23)
+
+// ============================================================================
+// CPU_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side resets
+ CPU_RST_CORE = 0x00000000,
+ CPU_RST_SYS = 0x00000001
+} CPU_RESETS_T;
+
+#define NB_CPU_RST (2)
+
+// ============================================================================
+// AXI_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side resets: AXI and AHB0 and APB0
+ AXI_RST_VOC = 0x00000000,
+ AXI_RST_VOC2 = 0x00000001,
+ AXI_RST_DMA = 0x00000002,
+ AXI_RST_SYS = 0x00000003,
+ AXI_RST_CONNECT = 0x00000004,
+ AHB0_RST_GPU = 0x00000005,
+ APB0_RST_VPU = 0x00000006,
+ APB0_RST_IRQ = 0x00000007
+} AXI_RESETS_T;
+
+#define NB_AXI_RST (8)
+
+// ============================================================================
+// AXIDIV2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIDIV2 side resets
+ AXIDIV2_RST_IMEM = 0x00000000,
+ AXIDIV2_RST_SYS = 0x00000001,
+ AXIDIV2_RST_VPU = 0x00000002
+} AXIDIV2_RESETS_T;
+
+#define NB_AXIDIV2_RST (3)
+
+// ============================================================================
+// GCG_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side resets
+ GCG_RST_SYS = 0x00000000,
+ GCG_RST_GOUDA = 0x00000001,
+ GCG_RST_CAMERA = 0x00000002
+} GCG_RESETS_T;
+
+#define NB_GCG_RST (3)
+
+// ============================================================================
+// AHB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side resets
+ AHB1_RST_SYS = 0x00000000,
+ AHB1_RST_USBC = 0x00000001,
+ AHB1_RST_SPIFLASH = 0x00000002
+} AHB1_RESETS_T;
+
+#define NB_AHB1_RST (3)
+
+// ============================================================================
+// APB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side resets
+ APB1_RST_SYS = 0x00000000,
+ APB1_RST_TIMER = 0x00000001,
+ APB1_RST_KEYPAD = 0x00000002,
+ APB1_RST_GPIO = 0x00000003,
+ APB1_RST_PWM = 0x00000004,
+ APB1_RST_AIF = 0x00000005,
+ APB1_RST_AIF2 = 0x00000006,
+ APB1_RST_AUIFC = 0x00000007,
+ APB1_RST_I2C1 = 0x00000008,
+ APB1_RST_I2C2 = 0x00000009,
+ APB1_RST_I2C3 = 0x0000000A,
+ APB1_RST_COM_REGS = 0x0000000B,
+ APB1_RST_DMC = 0x0000000C,
+ APB1_RST_DDRPHY_P = 0x0000000D,
+ APB1_RST_BB2G_XCPU = 0x0000000E,
+ APB1_RST_BB2G_BCPU = 0x0000000F,
+ APB1_RST_BB2G_AHBC = 0x00000010,
+ APB1_RST_BB2G_DMA = 0x00000011,
+ APB1_RST_BB2G_A2A = 0x00000012,
+ APB1_RST_BB2G_XIFC = 0x00000013,
+ APB1_RST_BB2G_BIFC = 0x00000014,
+ APB1_RST_BB2G_BAHBC = 0x00000015,
+ APB1_RST_BB2G_MEM_BRIDGE = 0x00000016
+} APB1_RESETS_T;
+
+#define NB_APB1_RST (23)
+
+// ============================================================================
+// APB2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side resets
+ APB2_RST_SYS = 0x00000000,
+ APB2_RST_IFC = 0x00000001,
+ APB2_RST_UART1 = 0x00000002,
+ APB2_RST_UART2 = 0x00000003,
+ APB2_RST_UART3 = 0x00000004,
+ APB2_RST_SPI1 = 0x00000005,
+ APB2_RST_SPI2 = 0x00000006,
+ APB2_RST_SPI3 = 0x00000007,
+ APB2_RST_SDMMC1 = 0x00000008,
+ APB2_RST_SDMMC2 = 0x00000009,
+ APB2_RST_SDMMC3 = 0x0000000A,
+ APB2_RST_NANDFLASH = 0x0000000B
+} APB2_RESETS_T;
+
+#define NB_APB2_RST (12)
+
+// ============================================================================
+// MEM_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side resets
+ MEM_RST_SYS = 0x00000000,
+ MEM_RST_GPU = 0x00000001,
+ MEM_RST_VPU = 0x00000002,
+ MEM_RST_DMC = 0x00000003,
+ MEM_RST_DDRPHY_P = 0x00000004
+} MEM_RESETS_T;
+
+#define NB_MEM_RST (5)
+
+// ============================================================================
+// AP_OTHERS_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP Reset Other : resync on corresponding clock other
+ AP_RSTO_VOC = 0x00000000,
+ AP_RSTO_VOC2 = 0x00000001,
+ AP_RSTO_DDRPHY_N = 0x00000002,
+ AP_RSTO_DDRPHY2XP = 0x00000003,
+ AP_RSTO_DDRPHY2XN = 0x00000004,
+ AP_RSTO_GPU = 0x00000005,
+ AP_RSTO_VPU = 0x00000006,
+ AP_RSTO_BCK = 0x00000007,
+ AP_RSTO_BCK2 = 0x00000008,
+ AP_RSTO_UART1 = 0x00000009,
+ AP_RSTO_UART2 = 0x0000000A,
+ AP_RSTO_UART3 = 0x0000000B,
+ AP_RSTO_GPIO = 0x0000000C,
+ AP_RSTO_TIMER = 0x0000000D,
+ AP_RSTO_USBC = 0x0000000E,
+ AP_RSTO_DSI = 0x0000000F,
+ AP_RSTO_SPIFLASH = 0x00000010,
+ AP_RSTO_TCK = 0x00000011,
+ AP_RSTO_PDBG_XTAL = 0x00000012
+} AP_OTHERS_RESETS_T;
+
+#define NB_AP_RSTO (19)
+/// For REG_DBG protect lock/unlock value
+#define AP_CTRL_PROTECT_LOCK (0XA50000)
+#define AP_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_AP_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// Register protected by Write_Unlocked_H.
+ REG32 Cfg_Pll_Ctrl[4]; //0x00000004
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000014
+ REG32 Reset_Cause; //0x00000018
+ /// This register is protected.
+ REG32 CPU_Rst_Set; //0x0000001C
+ REG32 CPU_Rst_Clr; //0x00000020
+ /// This register is protected.
+ REG32 AXI_Rst_Set; //0x00000024
+ REG32 AXI_Rst_Clr; //0x00000028
+ /// This register is protected.
+ REG32 AXIDIV2_Rst_Set; //0x0000002C
+ REG32 AXIDIV2_Rst_Clr; //0x00000030
+ /// This register is protected.
+ REG32 GCG_Rst_Set; //0x00000034
+ REG32 GCG_Rst_Clr; //0x00000038
+ /// This register is protected.
+ REG32 AHB1_Rst_Set; //0x0000003C
+ REG32 AHB1_Rst_Clr; //0x00000040
+ /// This register is protected.
+ REG32 APB1_Rst_Set; //0x00000044
+ REG32 APB1_Rst_Clr; //0x00000048
+ /// This register is protected.
+ REG32 APB2_Rst_Set; //0x0000004C
+ REG32 APB2_Rst_Clr; //0x00000050
+ /// This register is protected.
+ REG32 MEM_Rst_Set; //0x00000054
+ REG32 MEM_Rst_Clr; //0x00000058
+ REG32 Clk_CPU_Mode; //0x0000005C
+ REG32 Clk_CPU_Enable; //0x00000060
+ /// This register is protected.
+ REG32 Clk_CPU_Disable; //0x00000064
+ REG32 Clk_AXI_Mode; //0x00000068
+ REG32 Clk_AXI_Enable; //0x0000006C
+ /// This register is protected.
+ REG32 Clk_AXI_Disable; //0x00000070
+ REG32 Clk_AXIDIV2_Mode; //0x00000074
+ REG32 Clk_AXIDIV2_Enable; //0x00000078
+ /// This register is protected.
+ REG32 Clk_AXIDIV2_Disable; //0x0000007C
+ REG32 Clk_GCG_Mode; //0x00000080
+ REG32 Clk_GCG_Enable; //0x00000084
+ /// This register is protected.
+ REG32 Clk_GCG_Disable; //0x00000088
+ REG32 Clk_AHB1_Mode; //0x0000008C
+ REG32 Clk_AHB1_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_AHB1_Disable; //0x00000094
+ REG32 Clk_APB1_Mode; //0x00000098
+ REG32 Clk_APB1_Enable; //0x0000009C
+ /// This register is protected.
+ REG32 Clk_APB1_Disable; //0x000000A0
+ REG32 Clk_APB2_Mode; //0x000000A4
+ REG32 Clk_APB2_Enable; //0x000000A8
+ /// This register is protected.
+ REG32 Clk_APB2_Disable; //0x000000AC
+ REG32 Clk_MEM_Mode; //0x000000B0
+ REG32 Clk_MEM_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_MEM_Disable; //0x000000B8
+ REG32 Clk_APO_Mode; //0x000000BC
+ REG32 Clk_APO_Enable; //0x000000C0
+ /// This register is protected.
+ REG32 Clk_APO_Disable; //0x000000C4
+ REG32 Cfg_Clk_AP_CPU; //0x000000C8
+ REG32 Cfg_Clk_AP_AXI; //0x000000CC
+ REG32 Cfg_Clk_AP_GCG; //0x000000D0
+ REG32 Cfg_Clk_AP_AHB1; //0x000000D4
+ REG32 Cfg_Clk_AP_APB1; //0x000000D8
+ REG32 Cfg_Clk_AP_APB2; //0x000000DC
+ REG32 Cfg_Clk_AP_MEM; //0x000000E0
+ REG32 Cfg_Clk_AP_GPU; //0x000000E4
+ REG32 Cfg_Clk_AP_VPU; //0x000000E8
+ REG32 Cfg_Clk_AP_VOC; //0x000000EC
+ REG32 Cfg_Clk_AP_SFLSH; //0x000000F0
+ REG32 Cfg_Clk_Uart[3]; //0x000000F4
+ REG32 L2cc_Ctrl; //0x00000100
+ REG32 Spi_Ctrl; //0x00000104
+ REG32 Memory_Margin; //0x00000108
+ REG32 Memory_Margin2; //0x0000010C
+ REG32 Memory_Observe; //0x00000110
+ REG32 Cfg_Clk_AP_VOC2; //0x00000114
+ REG32 Reserved_00000118[57]; //0x00000118
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000001FC
+} HWP_SYS_CTRL_AP_T;
+
+#define hwp_sysCtrlAp ((HWP_SYS_CTRL_AP_T*)(RDA_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_AP_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_AP_WRITE_UNLOCK (1<<31)
+
+//Cfg_Pll_Ctrl
+#define SYS_CTRL_AP_AP_PLL_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(n) (((n)&31)<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_MASK (31<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_SHIFT (16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(n) (((n)&31)<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_MASK (31<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_SHIFT (24)
+#define SYS_CTRL_AP_PLL_AP_CFG(n) (((n)&0x1F1F1111)<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_MASK (0x1F1F1111<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_AP_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_AP_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_AP_CPU_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_AP_CPU_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_AP_BUS_SEL_FAST_SLOW (1<<5)
+#define SYS_CTRL_AP_BUS_SEL_FAST_FAST (0<<5)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_SLOW (1<<7)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_FAST (0<<7)
+#define SYS_CTRL_AP_RF_DETECTED_OK (1<<8)
+#define SYS_CTRL_AP_RF_DETECTED_NO (0<<8)
+#define SYS_CTRL_AP_RF_DETECT_BYPASS (1<<9)
+#define SYS_CTRL_AP_RF_DETECT_RESET (1<<10)
+#define SYS_CTRL_AP_RF_SELECTED_L (1<<11)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_MASK (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_SHIFT (12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_NOT_LOCKED (0<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_MASK (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_SHIFT (13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_NOT_LOCKED (0<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_MASK (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_SHIFT (14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_NOT_LOCKED (0<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_USB (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_MASK (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_SHIFT (15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_NOT_LOCKED (0<<15)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_CPU (1<<20)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_BUS (1<<21)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_MASK (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_SHIFT (30)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_MASK (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_SHIFT (31)
+
+//Reset_Cause
+#define SYS_CTRL_AP_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_AP_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_AP_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_AP_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_AP_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_AP_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_AP_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_AP_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_AP_FONCTIONAL_TEST_MODE (1<<31)
+
+//CPU_Rst_Set
+#define SYS_CTRL_AP_SET_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SOFT_RST (1<<31)
+#define SYS_CTRL_AP_SET_CPU_RST(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_MASK (3<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SHIFT (0)
+
+//CPU_Rst_Clr
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_CPU_RST(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_MASK (3<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SHIFT (0)
+
+//AXI_Rst_Set
+#define SYS_CTRL_AP_SET_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_SET_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_SET_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_SET_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_SET_AHB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_SET_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_SET_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_SET_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_SHIFT (0)
+
+//AXI_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_CLR_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_CLR_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_CLR_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_CLR_AHB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_CLR_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_CLR_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_CLR_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Set
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SHIFT (0)
+
+//GCG_Rst_Set
+#define SYS_CTRL_AP_SET_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_SET_GCG_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_SHIFT (0)
+
+//GCG_Rst_Clr
+#define SYS_CTRL_AP_CLR_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_CLR_GCG_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_SHIFT (0)
+
+//AHB1_Rst_Set
+#define SYS_CTRL_AP_SET_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_SET_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_SET_AHB1_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_SHIFT (0)
+
+//AHB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_CLR_AHB1_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SHIFT (0)
+
+//APB1_Rst_Set
+#define SYS_CTRL_AP_SET_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_SET_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_SET_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_SET_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_SET_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C1 (1<<8)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C2 (1<<9)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C3 (1<<10)
+#define SYS_CTRL_AP_SET_APB1_RST_COM_REGS (1<<11)
+#define SYS_CTRL_AP_SET_APB1_RST_DMC (1<<12)
+#define SYS_CTRL_AP_SET_APB1_RST_DDRPHY_P (1<<13)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XCPU (1<<14)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BCPU (1<<15)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_AHBC (1<<16)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_DMA (1<<17)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_A2A (1<<18)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XIFC (1<<19)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BIFC (1<<20)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BAHBC (1<<21)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_MEM_BRIDGE (1<<22)
+#define SYS_CTRL_AP_SET_APB1_RST(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_SHIFT (0)
+
+//APB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_CLR_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_CLR_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_CLR_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB1_RST_COM_REGS (1<<11)
+#define SYS_CTRL_AP_CLR_APB1_RST_DMC (1<<12)
+#define SYS_CTRL_AP_CLR_APB1_RST_DDRPHY_P (1<<13)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XCPU (1<<14)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BCPU (1<<15)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_AHBC (1<<16)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_DMA (1<<17)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_A2A (1<<18)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XIFC (1<<19)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BIFC (1<<20)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BAHBC (1<<21)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_MEM_BRIDGE (1<<22)
+#define SYS_CTRL_AP_CLR_APB1_RST(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_SHIFT (0)
+
+//APB2_Rst_Set
+#define SYS_CTRL_AP_SET_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_SET_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_SET_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_SET_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_SET_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_SET_APB2_RST(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_SHIFT (0)
+
+//APB2_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_CLR_APB2_RST(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_SHIFT (0)
+
+//MEM_Rst_Set
+#define SYS_CTRL_AP_SET_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_GPU (1<<1)
+#define SYS_CTRL_AP_SET_MEM_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_MEM_RST_DMC (1<<3)
+#define SYS_CTRL_AP_SET_MEM_RST_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_SET_MEM_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_MASK (31<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_SHIFT (0)
+
+//MEM_Rst_Clr
+#define SYS_CTRL_AP_CLR_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_GPU (1<<1)
+#define SYS_CTRL_AP_CLR_MEM_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_MEM_RST_DMC (1<<3)
+#define SYS_CTRL_AP_CLR_MEM_RST_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_CLR_MEM_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_MASK (31<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_SHIFT (0)
+
+//Clk_CPU_Mode
+#define SYS_CTRL_AP_MODE_CLK_CPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_CPU_MANUAL (1<<0)
+
+//Clk_CPU_Enable
+#define SYS_CTRL_AP_ENABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_ENABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_SHIFT (0)
+
+//Clk_CPU_Disable
+#define SYS_CTRL_AP_DISABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_DISABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_SHIFT (0)
+
+//Clk_AXI_Mode
+#define SYS_CTRL_AP_MODE_AHB0_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_AHB0_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB0_CONF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB0_CONF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_AXI_VOC_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_AXI_DMA_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_AXI_DMA_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_CLK_AXI(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_MASK (31<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Enable
+#define SYS_CTRL_AP_ENABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_ENABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_ENABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB0_IRQ (1<<7)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_MASK (0xFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Disable
+#define SYS_CTRL_AP_DISABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_DISABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_DISABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB0_IRQ (1<<7)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_MASK (0xFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXIDIV2_Mode
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_MANUAL (1<<0)
+
+//Clk_AXIDIV2_Enable
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_AXIDIV2_Disable
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_GCG_Mode
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_CLK_GCG(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_MASK (7<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Enable
+#define SYS_CTRL_AP_ENABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_ENABLE_GCG_ALWAYS (1<<3)
+#define SYS_CTRL_AP_ENABLE_GCG_CONNECT (1<<4)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_MASK (31<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Disable
+#define SYS_CTRL_AP_DISABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_DISABLE_GCG_ALWAYS (1<<3)
+#define SYS_CTRL_AP_DISABLE_GCG_CONNECT (1<<4)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_MASK (31<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_SHIFT (0)
+
+//Clk_AHB1_Mode
+#define SYS_CTRL_AP_MODE_CLK_AHB1_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AHB1_MANUAL (1<<0)
+
+//Clk_AHB1_Enable
+#define SYS_CTRL_AP_ENABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_ENABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_MASK (7<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_AHB1_Disable
+#define SYS_CTRL_AP_DISABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_DISABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_MASK (7<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_APB1_Mode
+#define SYS_CTRL_AP_MODE_APB1_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB1_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB1_AIF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB1_I2C1_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB1_I2C1_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB1_I2C2_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB1_I2C2_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB1_I2C3_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB1_I2C3_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_CLK_APB1(n) (((n)&0x1FFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_MASK (0x1FFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Enable
+#define SYS_CTRL_AP_ENABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C1 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C2 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C3 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB1D_PWM (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB1_ALWAYS (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB1_DAPLITE (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB1_TIMER (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB1_GPIO (1<<16)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1(n) (((n)&0x1FFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_MASK (0x1FFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Disable
+#define SYS_CTRL_AP_DISABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C1 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C2 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C3 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB1D_PWM (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB1_ALWAYS (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB1_DAPLITE (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB1_TIMER (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB1_GPIO (1<<16)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1(n) (((n)&0x1FFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_MASK (0x1FFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB2_Mode
+#define SYS_CTRL_AP_MODE_APB2_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB2_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB2_IFC_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB2_UART1_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB2_UART1_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB2_UART2_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB2_UART2_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB2_UART3_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB2_UART3_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_AUTOMATIC (0<<13)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_MANUAL (1<<13)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_AUTOMATIC (0<<14)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_MANUAL (1<<14)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_AUTOMATIC (0<<15)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_MANUAL (1<<15)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_AUTOMATIC (0<<16)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_MANUAL (1<<16)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_AUTOMATIC (0<<17)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_MANUAL (1<<17)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_AUTOMATIC (0<<18)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_MANUAL (1<<18)
+#define SYS_CTRL_AP_MODE_CLK_APB2(n) (((n)&0x7FFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_MASK (0x7FFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Enable
+#define SYS_CTRL_AP_ENABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB2_UART1 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB2_UART2 (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB2_UART3 (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI1 (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI2 (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI3 (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC1 (1<<16)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC2 (1<<17)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC3 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APB2_ALWAYS (1<<19)
+#define SYS_CTRL_AP_ENABLE_APB2_NANDFLASH (1<<20)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Disable
+#define SYS_CTRL_AP_DISABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB2_UART1 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB2_UART2 (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB2_UART3 (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI1 (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI2 (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI3 (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC1 (1<<16)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC2 (1<<17)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC3 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APB2_ALWAYS (1<<19)
+#define SYS_CTRL_AP_DISABLE_APB2_NANDFLASH (1<<20)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_SHIFT (0)
+
+//Clk_MEM_Mode
+#define SYS_CTRL_AP_MODE_CLK_MEM_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_MEM_MANUAL (1<<0)
+
+//Clk_MEM_Enable
+#define SYS_CTRL_AP_ENABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_ENABLE_MEM_GPU (1<<2)
+#define SYS_CTRL_AP_ENABLE_MEM_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_MEM_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_ENABLE_MEM_CONNECT (1<<5)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_MASK (0x3F<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_SHIFT (0)
+
+//Clk_MEM_Disable
+#define SYS_CTRL_AP_DISABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_DISABLE_MEM_GPU (1<<2)
+#define SYS_CTRL_AP_DISABLE_MEM_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_MEM_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_DISABLE_MEM_CONNECT (1<<5)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_MASK (0x3F<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_SHIFT (0)
+
+//Clk_APO_Mode
+#define SYS_CTRL_AP_MODE_APOC_VPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APOC_VPU_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APOC_UART3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APOC_VOC_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_CLK_APO(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Enable
+#define SYS_CTRL_AP_ENABLE_APOC_VPU (1<<0)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK (1<<1)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK2 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APOC_UART1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APOC_UART2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APOC_UART3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_CORE (1<<6)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_CORE (1<<7)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC (1<<8)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_ALWAYS (1<<10)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_ALWAYS (1<<11)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY_N (1<<12)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XP (1<<13)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XN (1<<14)
+#define SYS_CTRL_AP_ENABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_ENABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_ENABLE_APOC_DSI (1<<18)
+#define SYS_CTRL_AP_ENABLE_APOC_GPIO (1<<19)
+#define SYS_CTRL_AP_ENABLE_APOC_SPIFLASH (1<<20)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX (1<<21)
+#define SYS_CTRL_AP_ENABLE_APOC_PDGB (1<<22)
+#define SYS_CTRL_AP_ENABLE_CLK_APO(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Disable
+#define SYS_CTRL_AP_DISABLE_APOC_VPU (1<<0)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK (1<<1)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK2 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APOC_UART1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APOC_UART2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APOC_UART3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_CORE (1<<6)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_CORE (1<<7)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC (1<<8)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_ALWAYS (1<<10)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_ALWAYS (1<<11)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY_N (1<<12)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XP (1<<13)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XN (1<<14)
+#define SYS_CTRL_AP_DISABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_DISABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_DISABLE_APOC_DSI (1<<18)
+#define SYS_CTRL_AP_DISABLE_APOC_GPIO (1<<19)
+#define SYS_CTRL_AP_DISABLE_APOC_SPIFLASH (1<<20)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX (1<<21)
+#define SYS_CTRL_AP_DISABLE_APOC_PDGB (1<<22)
+#define SYS_CTRL_AP_DISABLE_CLK_APO(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_SHIFT (0)
+
+//Cfg_Clk_AP_CPU
+#define SYS_CTRL_AP_AP_CPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_BUS_DIV_SEL(n) (((n)&3)<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_MASK (3<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_SHIFT (16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV2 (0<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV3 (1<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV4 (2<<16)
+#define SYS_CTRL_AP_AP_CPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AXI
+#define SYS_CTRL_AP_AP_AXI_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AXI_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AXI_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_GCG
+#define SYS_CTRL_AP_AP_GCG_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GCG_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_GCG_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AHB1
+#define SYS_CTRL_AP_AP_AHB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AHB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB1
+#define SYS_CTRL_AP_AP_APB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB2
+#define SYS_CTRL_AP_AP_APB2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB2_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_MEM
+#define SYS_CTRL_AP_AP_MEM_SRC_DIV2 (1<<12)
+
+//Cfg_Clk_AP_GPU
+#define SYS_CTRL_AP_AP_GPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_GPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VPU
+#define SYS_CTRL_AP_AP_VPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VOC
+#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_SFLSH
+#define SYS_CTRL_AP_AP_SFLSH_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_SFLSH_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Uart
+#define SYS_CTRL_AP_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_AP_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_AP_UART_SEL_PLL_PLL (1<<12)
+
+//L2cc_Ctrl
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_MASK (15<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_SHIFT (0)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M(n) (((n)&15)<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_MASK (15<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_SHIFT (4)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_MASK (15<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_SHIFT (8)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_MASK (15<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_SHIFT (12)
+#define SYS_CTRL_AP_ARAP_L2CC_1_M (1<<16)
+#define SYS_CTRL_AP_AWAP_L2CC_1_M (1<<17)
+#define SYS_CTRL_AP_ARAP_MODEM_MEM_AHBS_M (1<<18)
+#define SYS_CTRL_AP_AWAP_MODEM_MEM_AHBS_M (1<<19)
+#define SYS_CTRL_AP_ARAP_MERGE1M (1<<20)
+#define SYS_CTRL_AP_AWAP_MERGE1M (1<<21)
+#define SYS_CTRL_AP_ARAP_MERGE2M (1<<22)
+#define SYS_CTRL_AP_AWAP_MERGE2M (1<<23)
+#define SYS_CTRL_AP_RESERVE1(n) (((n)&0xFF)<<24)
+#define SYS_CTRL_AP_RESERVE1_MASK (0xFF<<24)
+#define SYS_CTRL_AP_RESERVE1_SHIFT (24)
+
+//Spi_Ctrl
+#define SYS_CTRL_AP_LIMITED_EN_SPI1 (1<<0)
+#define SYS_CTRL_AP_LPSEN_SPI1 (1<<1)
+#define SYS_CTRL_AP_LIMITED_EN_SPI2 (1<<2)
+#define SYS_CTRL_AP_LPSEN_SPI2 (1<<3)
+#define SYS_CTRL_AP_LIMITED_EN_SPI3 (1<<4)
+#define SYS_CTRL_AP_LPSEN_SPI3 (1<<5)
+#define SYS_CTRL_AP_FBUSWID_NFSC (1<<6)
+#define SYS_CTRL_AP_RESERVE3 (1<<7)
+#define SYS_CTRL_AP_DMC_CFG(n) (((n)&0x3FF)<<8)
+#define SYS_CTRL_AP_DMC_CFG_MASK (0x3FF<<8)
+#define SYS_CTRL_AP_DMC_CFG_SHIFT (8)
+#define SYS_CTRL_AP_RESERVE2(n) (((n)&0x3FFF)<<18)
+#define SYS_CTRL_AP_RESERVE2_MASK (0x3FFF<<18)
+#define SYS_CTRL_AP_RESERVE2_SHIFT (18)
+
+//Memory_Margin
+#define SYS_CTRL_AP_EMAW_VOC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_VOC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_VOC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_VOC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_VOC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_VOC_SHIFT (2)
+#define SYS_CTRL_AP_EMAW_VPU(n) (((n)&3)<<5)
+#define SYS_CTRL_AP_EMAW_VPU_MASK (3<<5)
+#define SYS_CTRL_AP_EMAW_VPU_SHIFT (5)
+#define SYS_CTRL_AP_EMA_VPU(n) (((n)&7)<<7)
+#define SYS_CTRL_AP_EMA_VPU_MASK (7<<7)
+#define SYS_CTRL_AP_EMA_VPU_SHIFT (7)
+#define SYS_CTRL_AP_EMAW_GPU(n) (((n)&3)<<10)
+#define SYS_CTRL_AP_EMAW_GPU_MASK (3<<10)
+#define SYS_CTRL_AP_EMAW_GPU_SHIFT (10)
+#define SYS_CTRL_AP_EMA_GPU(n) (((n)&7)<<12)
+#define SYS_CTRL_AP_EMA_GPU_MASK (7<<12)
+#define SYS_CTRL_AP_EMA_GPU_SHIFT (12)
+#define SYS_CTRL_AP_EMAW_GOUDA(n) (((n)&3)<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_MASK (3<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_SHIFT (15)
+#define SYS_CTRL_AP_EMA_GOUDA(n) (((n)&7)<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_MASK (7<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_SHIFT (17)
+#define SYS_CTRL_AP_EMAW_IMEM(n) (((n)&3)<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_MASK (3<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_SHIFT (20)
+#define SYS_CTRL_AP_EMA_IMEM(n) (((n)&7)<<22)
+#define SYS_CTRL_AP_EMA_IMEM_MASK (7<<22)
+#define SYS_CTRL_AP_EMA_IMEM_SHIFT (22)
+#define SYS_CTRL_AP_EMAW_USB(n) (((n)&3)<<25)
+#define SYS_CTRL_AP_EMAW_USB_MASK (3<<25)
+#define SYS_CTRL_AP_EMAW_USB_SHIFT (25)
+#define SYS_CTRL_AP_EMA_USB(n) (((n)&7)<<27)
+#define SYS_CTRL_AP_EMA_USB_MASK (7<<27)
+#define SYS_CTRL_AP_EMA_USB_SHIFT (27)
+
+//Memory_Margin2
+#define SYS_CTRL_AP_EMAW_NFSC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_NFSC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_NFSC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_NFSC_SHIFT (2)
+#define SYS_CTRL_AP_EMA_VPUROM(n) (((n)&7)<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_MASK (7<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_SHIFT (5)
+#define SYS_CTRL_AP_EMA_IMEMROM(n) (((n)&7)<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_MASK (7<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_SHIFT (8)
+#define SYS_CTRL_AP_KEN_VPUROM (1<<11)
+#define SYS_CTRL_AP_PGEN_VPUROM (1<<12)
+#define SYS_CTRL_AP_KEN_IMEMROM (1<<13)
+#define SYS_CTRL_AP_PGEN_IMEMROM (1<<14)
+
+//Memory_Observe
+#define SYS_CTRL_AP_MEM_OBSERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Clk_AP_VOC2
+//#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+//#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+//#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Reserve
+#define SYS_CTRL_AP_RESERVE(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_AP_AUIFC_CH0_IRQ_MASK (1<<30)
+#define SYS_CTRL_AP_AUIFC_CH1_IRQ_MASK (1<<31)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850e.h b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850e.h
new file mode 100644
index 0000000000..9ae0041a35
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_sysctrl_rda8850e.h
@@ -0,0 +1,1540 @@
+#ifndef _REG_SYSCTRL_H_
+#define _REG_SYSCTRL_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// AP_CPU_ID_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// CPU IDs
+ CPU0 = 0x00000000,
+ CPU1 = 0x00000001
+} AP_CPU_ID_T;
+
+
+// ============================================================================
+// CPU_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side System clocks
+ CPU_CORE = 0x00000000,
+/// the following don't have an auto enable
+ CPU_DUMMY = 0x00000001
+} CPU_CLKS_T;
+
+#define NB_CPU_CLK_AEN (1)
+#define NB_CPU_CLK_EN (2)
+#define NB_CPU_CLK (2)
+
+// ============================================================================
+// AXI_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side System clocks: AXI and AHB0 and APB0
+ AHB0_CONF = 0x00000000,
+ APB0_CONF = 0x00000001,
+ AXI_VOC = 0x00000002,
+ AXI_VOC2 = 0x00000003,
+ AXI_DMA = 0x00000004,
+/// the following don't have an auto enable
+ AXI_ALWAYS = 0x00000005,
+ AXI_CONNECT = 0x00000006,
+ APB0_IRQ = 0x00000007
+} AXI_CLKS_T;
+
+#define NB_AXI_CLK_AEN (5)
+#define NB_AXI_CLK_EN (8)
+#define NB_AXI_CLK (8)
+
+// ============================================================================
+// AXIDIV2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIdiv2 side System clocks
+ AXIDIV2_IMEM = 0x00000000,
+/// the following don't have an auto enable
+ AXIDIV2_ALWAYS = 0x00000001,
+ AXIDIV2_CONNECT = 0x00000002,
+ AXIDIV2_VPU = 0x00000003
+} AXIDIV2_CLKS_T;
+
+#define NB_AXIDIV2_CLK_AEN (1)
+#define NB_AXIDIV2_CLK_EN (4)
+#define NB_AXIDIV2_CLK (4)
+
+// ============================================================================
+// GCG_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side System clocks
+ GCG_APB_CONF = 0x00000000,
+ GCG_GOUDA = 0x00000001,
+ GCG_CAMERA = 0x00000002,
+/// the following don't have an auto enable
+ GCG_ALWAYS = 0x00000003,
+ GCG_CONNECT = 0x00000004
+} GCG_CLKS_T;
+
+#define NB_GCG_CLK_AEN (3)
+#define NB_GCG_CLK_EN (5)
+#define NB_GCG_CLK (5)
+
+// ============================================================================
+// AHB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side System clocks
+ AHB1_USBC = 0x00000000,
+/// the following don't have an auto enable
+ AHB1_ALWAYS = 0x00000001,
+ AHB1_SPIFLASH = 0x00000002
+} AHB1_CLKS_T;
+
+#define NB_AHB1_CLK_AEN (1)
+#define NB_AHB1_CLK_EN (3)
+#define NB_AHB1_CLK (3)
+
+// ============================================================================
+// APB1_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side System clocks
+ APB1_CONF = 0x00000000,
+ APB1_AIF = 0x00000001,
+ APB1_AIF2 = 0x00000002,
+ APB1_AUIFC = 0x00000003,
+ APB1_AUIFC_CH0 = 0x00000004,
+ APB1_AUIFC_CH1 = 0x00000005,
+ APB1_AUIFC_CH2 = 0x00000006,
+ APB1_AUIFC_CH3 = 0x00000007,
+ APB1_I2C1 = 0x00000008,
+ APB1_I2C2 = 0x00000009,
+ APB1_I2C3 = 0x0000000A,
+/// AP APB1 side divided clock (either divided by module or by clock_ctrl)
+ APB1D_OSC = 0x0000000B,
+ APB1D_PWM = 0x0000000C,
+/// the following don't have an auto enable
+ APB1_ALWAYS = 0x0000000D,
+ APB1_DAPLITE = 0x0000000E,
+ APB1_TIMER = 0x0000000F,
+ APB1_GPIO = 0x00000010
+} APB1_CLKS_T;
+
+#define NB_APB1_CLK_AEN (13)
+#define NB_APB1_CLK_EN (17)
+#define NB_APB1_CLK (17)
+
+// ============================================================================
+// APB2_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side System clocks
+ APB2_CONF = 0x00000000,
+ APB2_IFC = 0x00000001,
+ APB2_IFC_CH0 = 0x00000002,
+ APB2_IFC_CH1 = 0x00000003,
+ APB2_IFC_CH2 = 0x00000004,
+ APB2_IFC_CH3 = 0x00000005,
+ APB2_IFC_CH4 = 0x00000006,
+ APB2_IFC_CH5 = 0x00000007,
+ APB2_IFC_CH6 = 0x00000008,
+ APB2_IFC_CH7 = 0x00000009,
+ APB2_UART1 = 0x0000000A,
+ APB2_UART2 = 0x0000000B,
+ APB2_UART3 = 0x0000000C,
+ APB2_SPI1 = 0x0000000D,
+ APB2_SPI2 = 0x0000000E,
+ APB2_SPI3 = 0x0000000F,
+ APB2_SDMMC1 = 0x00000010,
+ APB2_SDMMC2 = 0x00000011,
+ APB2_SDMMC3 = 0x00000012,
+/// the following don't have an auto enable
+ APB2_ALWAYS = 0x00000013,
+ APB2_NANDFLASH = 0x00000014
+} APB2_CLKS_T;
+
+#define NB_APB2_CLK_AEN (19)
+#define NB_APB2_CLK_EN (21)
+#define NB_APB2_CLK (21)
+
+// ============================================================================
+// MEM_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side System clocks
+ MEM_CONF = 0x00000000,
+/// the following don't have an auto enable
+ MEM_DMC = 0x00000001,
+ MEM_GPU = 0x00000002,
+ MEM_VPU = 0x00000003,
+ MEM_DDRPHY_P = 0x00000004,
+ MEM_CONNECT = 0x00000005
+} MEM_CLKS_T;
+
+#define NB_MEM_CLK_AEN (1)
+#define NB_MEM_CLK_EN (6)
+#define NB_MEM_CLK (6)
+
+// ============================================================================
+// APO_CLKS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP side Other clocks
+/// clocks with auto enble
+ APOC_VPU = 0x00000000,
+ APOC_BCK = 0x00000001,
+ APOC_BCK2 = 0x00000002,
+ APOC_UART1 = 0x00000003,
+ APOC_UART2 = 0x00000004,
+ APOC_UART3 = 0x00000005,
+ APOC_VOC_CORE = 0x00000006,
+ APOC_VOC2_CORE = 0x00000007,
+ APOC_VOC = 0x00000008,
+ APOC_VOC2 = 0x00000009,
+/// the following don't have an auto enable
+ APOC_VOC_ALWAYS = 0x0000000A,
+ APOC_VOC2_ALWAYS = 0x0000000B,
+ APOC_DDRPHY_N = 0x0000000C,
+ APOC_DDRPHY2XP = 0x0000000D,
+ APOC_DDRPHY2XN = 0x0000000E,
+ APOC_GPU = 0x0000000F,
+ APOC_USBPHY = 0x00000010,
+ APOC_CSI = 0x00000011,
+ APOC_DSI = 0x00000012,
+ APOC_GPIO = 0x00000013,
+ APOC_SPIFLASH = 0x00000014,
+ APOC_PIX = 0x00000015,
+ APOC_PDGB = 0x00000016
+} APO_CLKS_T;
+
+#define NB_CLK_VOC_AEN_SYNC (6)
+#define NB_CLK_VOC_CORE (8)
+#define NB_APO_CLK_AEN (10)
+#define NB_CLK_VOC_END (12)
+#define NB_APO_CLK_EN (23)
+#define NB_APO_CLK (23)
+
+// ============================================================================
+// CPU_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP CPU side resets
+ CPU_RST_CORE = 0x00000000,
+ CPU_RST_SYS = 0x00000001
+} CPU_RESETS_T;
+
+#define NB_CPU_RST (2)
+
+// ============================================================================
+// AXI_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXI side resets: AXI and AHB0 and APB0
+ AXI_RST_VOC = 0x00000000,
+ AXI_RST_VOC2 = 0x00000001,
+ AXI_RST_DMA = 0x00000002,
+ AXI_RST_SYS = 0x00000003,
+ AXI_RST_CONNECT = 0x00000004,
+ AHB0_RST_GPU = 0x00000005,
+ APB0_RST_VPU = 0x00000006,
+ APB0_RST_IRQ = 0x00000007
+} AXI_RESETS_T;
+
+#define NB_AXI_RST (8)
+
+// ============================================================================
+// AXIDIV2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AXIDIV2 side resets
+ AXIDIV2_RST_IMEM = 0x00000000,
+ AXIDIV2_RST_SYS = 0x00000001,
+ AXIDIV2_RST_VPU = 0x00000002
+} AXIDIV2_RESETS_T;
+
+#define NB_AXIDIV2_RST (3)
+
+// ============================================================================
+// GCG_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP GCG side resets
+ GCG_RST_SYS = 0x00000000,
+ GCG_RST_GOUDA = 0x00000001,
+ GCG_RST_CAMERA = 0x00000002
+} GCG_RESETS_T;
+
+#define NB_GCG_RST (3)
+
+// ============================================================================
+// AHB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP AHB1 side resets
+ AHB1_RST_SYS = 0x00000000,
+ AHB1_RST_USBC = 0x00000001,
+ AHB1_RST_SPIFLASH = 0x00000002
+} AHB1_RESETS_T;
+
+#define NB_AHB1_RST (3)
+
+// ============================================================================
+// APB1_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB1 side resets
+ APB1_RST_SYS = 0x00000000,
+ APB1_RST_TIMER = 0x00000001,
+ APB1_RST_KEYPAD = 0x00000002,
+ APB1_RST_GPIO = 0x00000003,
+ APB1_RST_PWM = 0x00000004,
+ APB1_RST_AIF = 0x00000005,
+ APB1_RST_AIF2 = 0x00000006,
+ APB1_RST_AUIFC = 0x00000007,
+ APB1_RST_I2C1 = 0x00000008,
+ APB1_RST_I2C2 = 0x00000009,
+ APB1_RST_I2C3 = 0x0000000A,
+ APB1_RST_COM_REGS = 0x0000000B,
+ APB1_RST_DMC = 0x0000000C,
+ APB1_RST_DDRPHY_P = 0x0000000D,
+ APB1_RST_BB2G_XCPU = 0x0000000E,
+ APB1_RST_BB2G_BCPU = 0x0000000F,
+ APB1_RST_BB2G_AHBC = 0x00000010,
+ APB1_RST_BB2G_DMA = 0x00000011,
+ APB1_RST_BB2G_A2A = 0x00000012,
+ APB1_RST_BB2G_XIFC = 0x00000013,
+ APB1_RST_BB2G_BIFC = 0x00000014,
+ APB1_RST_BB2G_BAHBC = 0x00000015,
+ APB1_RST_BB2G_MEM_BRIDGE = 0x00000016
+} APB1_RESETS_T;
+
+#define NB_APB1_RST (23)
+
+// ============================================================================
+// APB2_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP APB2 side resets
+ APB2_RST_SYS = 0x00000000,
+ APB2_RST_IFC = 0x00000001,
+ APB2_RST_UART1 = 0x00000002,
+ APB2_RST_UART2 = 0x00000003,
+ APB2_RST_UART3 = 0x00000004,
+ APB2_RST_SPI1 = 0x00000005,
+ APB2_RST_SPI2 = 0x00000006,
+ APB2_RST_SPI3 = 0x00000007,
+ APB2_RST_SDMMC1 = 0x00000008,
+ APB2_RST_SDMMC2 = 0x00000009,
+ APB2_RST_SDMMC3 = 0x0000000A,
+ APB2_RST_NANDFLASH = 0x0000000B
+} APB2_RESETS_T;
+
+#define NB_APB2_RST (12)
+
+// ============================================================================
+// MEM_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP MEM side resets
+ MEM_RST_SYS = 0x00000000,
+ MEM_RST_GPU = 0x00000001,
+ MEM_RST_VPU = 0x00000002,
+ MEM_RST_DMC = 0x00000003,
+ MEM_RST_DDRPHY_P = 0x00000004
+} MEM_RESETS_T;
+
+#define NB_MEM_RST (5)
+
+// ============================================================================
+// AP_OTHERS_RESETS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef enum
+{
+/// AP Reset Other : resync on corresponding clock other
+ AP_RSTO_VOC = 0x00000000,
+ AP_RSTO_VOC2 = 0x00000001,
+ AP_RSTO_DDRPHY_N = 0x00000002,
+ AP_RSTO_DDRPHY2XP = 0x00000003,
+ AP_RSTO_DDRPHY2XN = 0x00000004,
+ AP_RSTO_GPU = 0x00000005,
+ AP_RSTO_VPU = 0x00000006,
+ AP_RSTO_BCK = 0x00000007,
+ AP_RSTO_BCK2 = 0x00000008,
+ AP_RSTO_UART1 = 0x00000009,
+ AP_RSTO_UART2 = 0x0000000A,
+ AP_RSTO_UART3 = 0x0000000B,
+ AP_RSTO_GPIO = 0x0000000C,
+ AP_RSTO_TIMER = 0x0000000D,
+ AP_RSTO_USBC = 0x0000000E,
+ AP_RSTO_DSI = 0x0000000F,
+ AP_RSTO_SPIFLASH = 0x00000010,
+ AP_RSTO_TCK = 0x00000011,
+ AP_RSTO_PDBG_XTAL = 0x00000012
+} AP_OTHERS_RESETS_T;
+
+#define NB_AP_RSTO (19)
+/// For REG_DBG protect lock/unlock value
+#define AP_CTRL_PROTECT_LOCK (0XA50000)
+#define AP_CTRL_PROTECT_UNLOCK (0XA50001)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// SYS_CTRL_AP_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ /// <strong>This register is used to Lock and Unlock the protected registers.</strong>
+ REG32 REG_DBG; //0x00000000
+ /// Register protected by Write_Unlocked_H.
+ REG32 Cfg_Pll_Ctrl[4]; //0x00000004
+ /// This register is protected.
+ REG32 Sel_Clock; //0x00000014
+ REG32 Reset_Cause; //0x00000018
+ /// This register is protected.
+ REG32 CPU_Rst_Set; //0x0000001C
+ REG32 CPU_Rst_Clr; //0x00000020
+ /// This register is protected.
+ REG32 AXI_Rst_Set; //0x00000024
+ REG32 AXI_Rst_Clr; //0x00000028
+ /// This register is protected.
+ REG32 AXIDIV2_Rst_Set; //0x0000002C
+ REG32 AXIDIV2_Rst_Clr; //0x00000030
+ /// This register is protected.
+ REG32 GCG_Rst_Set; //0x00000034
+ REG32 GCG_Rst_Clr; //0x00000038
+ /// This register is protected.
+ REG32 AHB1_Rst_Set; //0x0000003C
+ REG32 AHB1_Rst_Clr; //0x00000040
+ /// This register is protected.
+ REG32 APB1_Rst_Set; //0x00000044
+ REG32 APB1_Rst_Clr; //0x00000048
+ /// This register is protected.
+ REG32 APB2_Rst_Set; //0x0000004C
+ REG32 APB2_Rst_Clr; //0x00000050
+ /// This register is protected.
+ REG32 MEM_Rst_Set; //0x00000054
+ REG32 MEM_Rst_Clr; //0x00000058
+ REG32 Clk_CPU_Mode; //0x0000005C
+ REG32 Clk_CPU_Enable; //0x00000060
+ /// This register is protected.
+ REG32 Clk_CPU_Disable; //0x00000064
+ REG32 Clk_AXI_Mode; //0x00000068
+ REG32 Clk_AXI_Enable; //0x0000006C
+ /// This register is protected.
+ REG32 Clk_AXI_Disable; //0x00000070
+ REG32 Clk_AXIDIV2_Mode; //0x00000074
+ REG32 Clk_AXIDIV2_Enable; //0x00000078
+ /// This register is protected.
+ REG32 Clk_AXIDIV2_Disable; //0x0000007C
+ REG32 Clk_GCG_Mode; //0x00000080
+ REG32 Clk_GCG_Enable; //0x00000084
+ /// This register is protected.
+ REG32 Clk_GCG_Disable; //0x00000088
+ REG32 Clk_AHB1_Mode; //0x0000008C
+ REG32 Clk_AHB1_Enable; //0x00000090
+ /// This register is protected.
+ REG32 Clk_AHB1_Disable; //0x00000094
+ REG32 Clk_APB1_Mode; //0x00000098
+ REG32 Clk_APB1_Enable; //0x0000009C
+ /// This register is protected.
+ REG32 Clk_APB1_Disable; //0x000000A0
+ REG32 Clk_APB2_Mode; //0x000000A4
+ REG32 Clk_APB2_Enable; //0x000000A8
+ /// This register is protected.
+ REG32 Clk_APB2_Disable; //0x000000AC
+ REG32 Clk_MEM_Mode; //0x000000B0
+ REG32 Clk_MEM_Enable; //0x000000B4
+ /// This register is protected.
+ REG32 Clk_MEM_Disable; //0x000000B8
+ REG32 Clk_APO_Mode; //0x000000BC
+ REG32 Clk_APO_Enable; //0x000000C0
+ /// This register is protected.
+ REG32 Clk_APO_Disable; //0x000000C4
+ REG32 Cfg_Clk_AP_CPU; //0x000000C8
+ REG32 Cfg_Clk_AP_AXI; //0x000000CC
+ REG32 Cfg_Clk_AP_GCG; //0x000000D0
+ REG32 Cfg_Clk_AP_AHB1; //0x000000D4
+ REG32 Cfg_Clk_AP_APB1; //0x000000D8
+ REG32 Cfg_Clk_AP_APB2; //0x000000DC
+ REG32 Cfg_Clk_AP_MEM; //0x000000E0
+ REG32 Cfg_Clk_AP_GPU; //0x000000E4
+ REG32 Cfg_Clk_AP_VPU; //0x000000E8
+ REG32 Cfg_Clk_AP_VOC; //0x000000EC
+ REG32 Cfg_Clk_AP_SFLSH; //0x000000F0
+ REG32 Cfg_Clk_Uart[3]; //0x000000F4
+ REG32 L2cc_Ctrl; //0x00000100
+ REG32 Spi_Ctrl; //0x00000104
+ REG32 Memory_Margin; //0x00000108
+ REG32 Memory_Margin2; //0x0000010C
+ REG32 Memory_Observe; //0x00000110
+ REG32 Cfg_Clk_AP_VOC2; //0x00000114
+ REG32 Reserved_00000118[57]; //0x00000118
+ /// This register is reserved.
+ REG32 Cfg_Reserve; //0x000001FC
+} HWP_SYS_CTRL_AP_T;
+
+#define hwp_sysCtrlAp ((HWP_SYS_CTRL_AP_T*)(RDA_SYSCTRL_BASE))
+
+
+//REG_DBG
+#define SYS_CTRL_AP_SCRATCH(n) (((n)&0xFFFF)<<0)
+#define SYS_CTRL_AP_WRITE_UNLOCK_STATUS (1<<30)
+#define SYS_CTRL_AP_WRITE_UNLOCK (1<<31)
+
+//Cfg_Pll_Ctrl
+#define SYS_CTRL_AP_AP_PLL_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_MASK (1<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_SHIFT (0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN (0<<0)
+#define SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE (1<<0)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK (1<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_SHIFT (4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET (0<<4)
+#define SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET (1<<4)
+#define SYS_CTRL_AP_AP_PLL_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_MASK (1<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_SHIFT (8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_PASS (0<<8)
+#define SYS_CTRL_AP_AP_PLL_BYPASS_BYPASS (1<<8)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_MASK (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_SHIFT (12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE (1<<12)
+#define SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_DISABLE (0<<12)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(n) (((n)&31)<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_MASK (31<<16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW_SHIFT (16)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(n) (((n)&31)<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_MASK (31<<24)
+#define SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH_SHIFT (24)
+#define SYS_CTRL_AP_PLL_AP_CFG(n) (((n)&0x1F1F1111)<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_MASK (0x1F1F1111<<0)
+#define SYS_CTRL_AP_PLL_AP_CFG_SHIFT (0)
+
+//Sel_Clock
+#define SYS_CTRL_AP_SLOW_SEL_RF_OSCILLATOR (1<<0)
+#define SYS_CTRL_AP_SLOW_SEL_RF_RF (0<<0)
+#define SYS_CTRL_AP_CPU_SEL_FAST_SLOW (1<<4)
+#define SYS_CTRL_AP_CPU_SEL_FAST_FAST (0<<4)
+#define SYS_CTRL_AP_BUS_SEL_FAST_SLOW (1<<5)
+#define SYS_CTRL_AP_BUS_SEL_FAST_FAST (0<<5)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_SLOW (1<<7)
+#define SYS_CTRL_AP_TIMER_SEL_FAST_FAST (0<<7)
+#define SYS_CTRL_AP_RF_DETECTED_OK (1<<8)
+#define SYS_CTRL_AP_RF_DETECTED_NO (0<<8)
+#define SYS_CTRL_AP_RF_DETECT_BYPASS (1<<9)
+#define SYS_CTRL_AP_RF_DETECT_RESET (1<<10)
+#define SYS_CTRL_AP_RF_SELECTED_L (1<<11)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_MASK (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_SHIFT (12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED (1<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_CPU_NOT_LOCKED (0<<12)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_MASK (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_SHIFT (13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED (1<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_BUS_NOT_LOCKED (0<<13)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_MASK (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_SHIFT (14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED (1<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_MEM_NOT_LOCKED (0<<14)
+#define SYS_CTRL_AP_PLL_LOCKED_USB (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_MASK (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_SHIFT (15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED (1<<15)
+#define SYS_CTRL_AP_PLL_LOCKED_USB_NOT_LOCKED (0<<15)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_CPU (1<<20)
+#define SYS_CTRL_AP_PLL_BYPASS_LOCK_BUS (1<<21)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_MASK (1<<30)
+#define SYS_CTRL_AP_FAST_SELECTED_CPU_L_SHIFT (30)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_MASK (1<<31)
+#define SYS_CTRL_AP_FAST_SELECTED_BUS_L_SHIFT (31)
+
+//Reset_Cause
+#define SYS_CTRL_AP_WATCHDOG_RESET_HAPPENED (1<<0)
+#define SYS_CTRL_AP_WATCHDOG_RESET_NO (0<<0)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_HAPPENED (1<<4)
+#define SYS_CTRL_AP_GLOBALSOFT_RESET_NO (0<<4)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_HAPPENED (1<<5)
+#define SYS_CTRL_AP_HOSTDEBUG_RESET_NO (0<<5)
+#define SYS_CTRL_AP_ALARMCAUSE_HAPPENED (1<<6)
+#define SYS_CTRL_AP_ALARMCAUSE_NO (0<<6)
+#define SYS_CTRL_AP_BOOT_MODE(n) (((n)&0xFFFF)<<8)
+#define SYS_CTRL_AP_BOOT_MODE_MASK (0xFFFF<<8)
+#define SYS_CTRL_AP_BOOT_MODE_SHIFT (8)
+#define SYS_CTRL_AP_SW_BOOT_MODE(n) (((n)&0x7F)<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_MASK (0x7F<<24)
+#define SYS_CTRL_AP_SW_BOOT_MODE_SHIFT (24)
+#define SYS_CTRL_AP_FONCTIONAL_TEST_MODE (1<<31)
+
+//CPU_Rst_Set
+#define SYS_CTRL_AP_SET_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SOFT_RST (1<<31)
+#define SYS_CTRL_AP_SET_CPU_RST(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_MASK (3<<0)
+#define SYS_CTRL_AP_SET_CPU_RST_SHIFT (0)
+
+//CPU_Rst_Clr
+#define SYS_CTRL_AP_CLR_CPU_RST_CORE (1<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_CPU_RST(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_MASK (3<<0)
+#define SYS_CTRL_AP_CLR_CPU_RST_SHIFT (0)
+
+//AXI_Rst_Set
+#define SYS_CTRL_AP_SET_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_SET_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_SET_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_SET_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_SET_AHB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_SET_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_SET_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_SET_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_SET_AXI_RST_SHIFT (0)
+
+//AXI_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC (1<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_VOC2 (1<<1)
+#define SYS_CTRL_AP_CLR_AXI_RST_DMA (1<<2)
+#define SYS_CTRL_AP_CLR_AXI_RST_SYS (1<<3)
+#define SYS_CTRL_AP_CLR_AXI_RST_CONNECT (1<<4)
+#define SYS_CTRL_AP_CLR_AHB0_RST_GPU (1<<5)
+#define SYS_CTRL_AP_CLR_APB0_RST_VPU (1<<6)
+#define SYS_CTRL_AP_CLR_APB0_RST_IRQ (1<<7)
+#define SYS_CTRL_AP_CLR_AXI_RST(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_MASK (0xFF<<0)
+#define SYS_CTRL_AP_CLR_AXI_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Set
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AXIDIV2_RST_SHIFT (0)
+
+//AXIDIV2_Rst_Clr
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_IMEM (1<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SYS (1<<1)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AXIDIV2_RST_SHIFT (0)
+
+//GCG_Rst_Set
+#define SYS_CTRL_AP_SET_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_SET_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_SET_GCG_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_GCG_RST_SHIFT (0)
+
+//GCG_Rst_Clr
+#define SYS_CTRL_AP_CLR_GCG_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_GOUDA (1<<1)
+#define SYS_CTRL_AP_CLR_GCG_RST_CAMERA (1<<2)
+#define SYS_CTRL_AP_CLR_GCG_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_GCG_RST_SHIFT (0)
+
+//AHB1_Rst_Set
+#define SYS_CTRL_AP_SET_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_SET_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_SET_AHB1_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_MASK (7<<0)
+#define SYS_CTRL_AP_SET_AHB1_RST_SHIFT (0)
+
+//AHB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_AHB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_USBC (1<<1)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_CLR_AHB1_RST(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_MASK (7<<0)
+#define SYS_CTRL_AP_CLR_AHB1_RST_SHIFT (0)
+
+//APB1_Rst_Set
+#define SYS_CTRL_AP_SET_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_SET_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_SET_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_SET_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_SET_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_SET_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C1 (1<<8)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C2 (1<<9)
+#define SYS_CTRL_AP_SET_APB1_RST_I2C3 (1<<10)
+#define SYS_CTRL_AP_SET_APB1_RST_COM_REGS (1<<11)
+#define SYS_CTRL_AP_SET_APB1_RST_DMC (1<<12)
+#define SYS_CTRL_AP_SET_APB1_RST_DDRPHY_P (1<<13)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XCPU (1<<14)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BCPU (1<<15)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_AHBC (1<<16)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_DMA (1<<17)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_A2A (1<<18)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_XIFC (1<<19)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BIFC (1<<20)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_BAHBC (1<<21)
+#define SYS_CTRL_AP_SET_APB1_RST_BB2G_MEM_BRIDGE (1<<22)
+#define SYS_CTRL_AP_SET_APB1_RST(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_SET_APB1_RST_SHIFT (0)
+
+//APB1_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB1_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_TIMER (1<<1)
+#define SYS_CTRL_AP_CLR_APB1_RST_KEYPAD (1<<2)
+#define SYS_CTRL_AP_CLR_APB1_RST_GPIO (1<<3)
+#define SYS_CTRL_AP_CLR_APB1_RST_PWM (1<<4)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF (1<<5)
+#define SYS_CTRL_AP_CLR_APB1_RST_AIF2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB1_RST_AUIFC (1<<7)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB1_RST_I2C3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB1_RST_COM_REGS (1<<11)
+#define SYS_CTRL_AP_CLR_APB1_RST_DMC (1<<12)
+#define SYS_CTRL_AP_CLR_APB1_RST_DDRPHY_P (1<<13)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XCPU (1<<14)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BCPU (1<<15)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_AHBC (1<<16)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_DMA (1<<17)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_A2A (1<<18)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_XIFC (1<<19)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BIFC (1<<20)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_BAHBC (1<<21)
+#define SYS_CTRL_AP_CLR_APB1_RST_BB2G_MEM_BRIDGE (1<<22)
+#define SYS_CTRL_AP_CLR_APB1_RST(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_CLR_APB1_RST_SHIFT (0)
+
+//APB2_Rst_Set
+#define SYS_CTRL_AP_SET_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_SET_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_SET_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_SET_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_SET_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_SET_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_SET_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_SET_APB2_RST(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_SET_APB2_RST_SHIFT (0)
+
+//APB2_Rst_Clr
+#define SYS_CTRL_AP_CLR_APB2_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_IFC (1<<1)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART1 (1<<2)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART2 (1<<3)
+#define SYS_CTRL_AP_CLR_APB2_RST_UART3 (1<<4)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI1 (1<<5)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI2 (1<<6)
+#define SYS_CTRL_AP_CLR_APB2_RST_SPI3 (1<<7)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC1 (1<<8)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC2 (1<<9)
+#define SYS_CTRL_AP_CLR_APB2_RST_SDMMC3 (1<<10)
+#define SYS_CTRL_AP_CLR_APB2_RST_NANDFLASH (1<<11)
+#define SYS_CTRL_AP_CLR_APB2_RST(n) (((n)&0xFFF)<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_MASK (0xFFF<<0)
+#define SYS_CTRL_AP_CLR_APB2_RST_SHIFT (0)
+
+//MEM_Rst_Set
+#define SYS_CTRL_AP_SET_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_GPU (1<<1)
+#define SYS_CTRL_AP_SET_MEM_RST_VPU (1<<2)
+#define SYS_CTRL_AP_SET_MEM_RST_DMC (1<<3)
+#define SYS_CTRL_AP_SET_MEM_RST_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_SET_MEM_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_MASK (31<<0)
+#define SYS_CTRL_AP_SET_MEM_RST_SHIFT (0)
+
+//MEM_Rst_Clr
+#define SYS_CTRL_AP_CLR_MEM_RST_SYS (1<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_GPU (1<<1)
+#define SYS_CTRL_AP_CLR_MEM_RST_VPU (1<<2)
+#define SYS_CTRL_AP_CLR_MEM_RST_DMC (1<<3)
+#define SYS_CTRL_AP_CLR_MEM_RST_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_CLR_MEM_RST(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_MASK (31<<0)
+#define SYS_CTRL_AP_CLR_MEM_RST_SHIFT (0)
+
+//Clk_CPU_Mode
+#define SYS_CTRL_AP_MODE_CLK_CPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_CPU_MANUAL (1<<0)
+
+//Clk_CPU_Enable
+#define SYS_CTRL_AP_ENABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_ENABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_CPU_SHIFT (0)
+
+//Clk_CPU_Disable
+#define SYS_CTRL_AP_DISABLE_CPU_CORE (1<<0)
+#define SYS_CTRL_AP_DISABLE_CPU_DUMMY (1<<1)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_MASK (3<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_CPU_SHIFT (0)
+
+//Clk_AXI_Mode
+#define SYS_CTRL_AP_MODE_AHB0_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_AHB0_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB0_CONF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB0_CONF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_AXI_VOC_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_AXI_VOC2_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_AXI_DMA_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_AXI_DMA_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_CLK_AXI(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_MASK (31<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Enable
+#define SYS_CTRL_AP_ENABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_ENABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_ENABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_ENABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB0_IRQ (1<<7)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_MASK (0xFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXI_Disable
+#define SYS_CTRL_AP_DISABLE_AHB0_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB0_CONF (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXI_VOC2 (1<<3)
+#define SYS_CTRL_AP_DISABLE_AXI_DMA (1<<4)
+#define SYS_CTRL_AP_DISABLE_AXI_ALWAYS (1<<5)
+#define SYS_CTRL_AP_DISABLE_AXI_CONNECT (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB0_IRQ (1<<7)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI(n) (((n)&0xFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_MASK (0xFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXI_SHIFT (0)
+
+//Clk_AXIDIV2_Mode
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AXIDIV2_MANUAL (1<<0)
+
+//Clk_AXIDIV2_Enable
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_ENABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_AXIDIV2_Disable
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_IMEM (1<<0)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_CONNECT (1<<2)
+#define SYS_CTRL_AP_DISABLE_AXIDIV2_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_MASK (15<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AXIDIV2_SHIFT (0)
+
+//Clk_GCG_Mode
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_GCG_APB_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_CLK_GCG(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_MASK (7<<0)
+#define SYS_CTRL_AP_MODE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Enable
+#define SYS_CTRL_AP_ENABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_ENABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_ENABLE_GCG_ALWAYS (1<<3)
+#define SYS_CTRL_AP_ENABLE_GCG_CONNECT (1<<4)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_MASK (31<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_GCG_SHIFT (0)
+
+//Clk_GCG_Disable
+#define SYS_CTRL_AP_DISABLE_GCG_APB_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_GCG_GOUDA (1<<1)
+#define SYS_CTRL_AP_DISABLE_GCG_CAMERA (1<<2)
+#define SYS_CTRL_AP_DISABLE_GCG_ALWAYS (1<<3)
+#define SYS_CTRL_AP_DISABLE_GCG_CONNECT (1<<4)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_MASK (31<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_GCG_SHIFT (0)
+
+//Clk_AHB1_Mode
+#define SYS_CTRL_AP_MODE_CLK_AHB1_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_AHB1_MANUAL (1<<0)
+
+//Clk_AHB1_Enable
+#define SYS_CTRL_AP_ENABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_ENABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_ENABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_MASK (7<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_AHB1_Disable
+#define SYS_CTRL_AP_DISABLE_AHB1_USBC (1<<0)
+#define SYS_CTRL_AP_DISABLE_AHB1_ALWAYS (1<<1)
+#define SYS_CTRL_AP_DISABLE_AHB1_SPIFLASH (1<<2)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1(n) (((n)&7)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_MASK (7<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_AHB1_SHIFT (0)
+
+//Clk_APB1_Mode
+#define SYS_CTRL_AP_MODE_APB1_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB1_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB1_AIF_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB1_AIF2_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH0_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH1_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH2_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB1_AUIFC_CH3_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB1_I2C1_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB1_I2C1_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB1_I2C2_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB1_I2C2_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB1_I2C3_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB1_I2C3_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB1D_OSC_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB1D_PWM_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_CLK_APB1(n) (((n)&0x1FFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_MASK (0x1FFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Enable
+#define SYS_CTRL_AP_ENABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C1 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C2 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB1_I2C3 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB1D_OSC (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB1D_PWM (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB1_ALWAYS (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB1_DAPLITE (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB1_TIMER (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB1_GPIO (1<<16)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1(n) (((n)&0x1FFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_MASK (0x1FFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB1_Disable
+#define SYS_CTRL_AP_DISABLE_APB1_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB1_AIF2 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH0 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH1 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH2 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB1_AUIFC_CH3 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C1 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C2 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB1_I2C3 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB1D_OSC (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB1D_PWM (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB1_ALWAYS (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB1_DAPLITE (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB1_TIMER (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB1_GPIO (1<<16)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1(n) (((n)&0x1FFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_MASK (0x1FFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB1_SHIFT (0)
+
+//Clk_APB2_Mode
+#define SYS_CTRL_AP_MODE_APB2_CONF_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APB2_CONF_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APB2_IFC_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH0_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH4_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH5_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH6_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APB2_IFC_CH7_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_APB2_UART1_AUTOMATIC (0<<10)
+#define SYS_CTRL_AP_MODE_APB2_UART1_MANUAL (1<<10)
+#define SYS_CTRL_AP_MODE_APB2_UART2_AUTOMATIC (0<<11)
+#define SYS_CTRL_AP_MODE_APB2_UART2_MANUAL (1<<11)
+#define SYS_CTRL_AP_MODE_APB2_UART3_AUTOMATIC (0<<12)
+#define SYS_CTRL_AP_MODE_APB2_UART3_MANUAL (1<<12)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_AUTOMATIC (0<<13)
+#define SYS_CTRL_AP_MODE_APB2_SPI1_MANUAL (1<<13)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_AUTOMATIC (0<<14)
+#define SYS_CTRL_AP_MODE_APB2_SPI2_MANUAL (1<<14)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_AUTOMATIC (0<<15)
+#define SYS_CTRL_AP_MODE_APB2_SPI3_MANUAL (1<<15)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_AUTOMATIC (0<<16)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC1_MANUAL (1<<16)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_AUTOMATIC (0<<17)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC2_MANUAL (1<<17)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_AUTOMATIC (0<<18)
+#define SYS_CTRL_AP_MODE_APB2_SDMMC3_MANUAL (1<<18)
+#define SYS_CTRL_AP_MODE_CLK_APB2(n) (((n)&0x7FFFF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_MASK (0x7FFFF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Enable
+#define SYS_CTRL_AP_ENABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_ENABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APB2_UART1 (1<<10)
+#define SYS_CTRL_AP_ENABLE_APB2_UART2 (1<<11)
+#define SYS_CTRL_AP_ENABLE_APB2_UART3 (1<<12)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI1 (1<<13)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI2 (1<<14)
+#define SYS_CTRL_AP_ENABLE_APB2_SPI3 (1<<15)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC1 (1<<16)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC2 (1<<17)
+#define SYS_CTRL_AP_ENABLE_APB2_SDMMC3 (1<<18)
+#define SYS_CTRL_AP_ENABLE_APB2_ALWAYS (1<<19)
+#define SYS_CTRL_AP_ENABLE_APB2_NANDFLASH (1<<20)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APB2_SHIFT (0)
+
+//Clk_APB2_Disable
+#define SYS_CTRL_AP_DISABLE_APB2_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC (1<<1)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH0 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH4 (1<<6)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH5 (1<<7)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH6 (1<<8)
+#define SYS_CTRL_AP_DISABLE_APB2_IFC_CH7 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APB2_UART1 (1<<10)
+#define SYS_CTRL_AP_DISABLE_APB2_UART2 (1<<11)
+#define SYS_CTRL_AP_DISABLE_APB2_UART3 (1<<12)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI1 (1<<13)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI2 (1<<14)
+#define SYS_CTRL_AP_DISABLE_APB2_SPI3 (1<<15)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC1 (1<<16)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC2 (1<<17)
+#define SYS_CTRL_AP_DISABLE_APB2_SDMMC3 (1<<18)
+#define SYS_CTRL_AP_DISABLE_APB2_ALWAYS (1<<19)
+#define SYS_CTRL_AP_DISABLE_APB2_NANDFLASH (1<<20)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2(n) (((n)&0x1FFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_MASK (0x1FFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APB2_SHIFT (0)
+
+//Clk_MEM_Mode
+#define SYS_CTRL_AP_MODE_CLK_MEM_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_CLK_MEM_MANUAL (1<<0)
+
+//Clk_MEM_Enable
+#define SYS_CTRL_AP_ENABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_ENABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_ENABLE_MEM_GPU (1<<2)
+#define SYS_CTRL_AP_ENABLE_MEM_VPU (1<<3)
+#define SYS_CTRL_AP_ENABLE_MEM_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_ENABLE_MEM_CONNECT (1<<5)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_MASK (0x3F<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_MEM_SHIFT (0)
+
+//Clk_MEM_Disable
+#define SYS_CTRL_AP_DISABLE_MEM_CONF (1<<0)
+#define SYS_CTRL_AP_DISABLE_MEM_DMC (1<<1)
+#define SYS_CTRL_AP_DISABLE_MEM_GPU (1<<2)
+#define SYS_CTRL_AP_DISABLE_MEM_VPU (1<<3)
+#define SYS_CTRL_AP_DISABLE_MEM_DDRPHY_P (1<<4)
+#define SYS_CTRL_AP_DISABLE_MEM_CONNECT (1<<5)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM(n) (((n)&0x3F)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_MASK (0x3F<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_MEM_SHIFT (0)
+
+//Clk_APO_Mode
+#define SYS_CTRL_AP_MODE_APOC_VPU_AUTOMATIC (0<<0)
+#define SYS_CTRL_AP_MODE_APOC_VPU_MANUAL (1<<0)
+#define SYS_CTRL_AP_MODE_APOC_BCK_AUTOMATIC (0<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK_MANUAL (1<<1)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_AUTOMATIC (0<<2)
+#define SYS_CTRL_AP_MODE_APOC_BCK2_MANUAL (1<<2)
+#define SYS_CTRL_AP_MODE_APOC_UART1_AUTOMATIC (0<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART1_MANUAL (1<<3)
+#define SYS_CTRL_AP_MODE_APOC_UART2_AUTOMATIC (0<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART2_MANUAL (1<<4)
+#define SYS_CTRL_AP_MODE_APOC_UART3_AUTOMATIC (0<<5)
+#define SYS_CTRL_AP_MODE_APOC_UART3_MANUAL (1<<5)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_AUTOMATIC (0<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC_CORE_MANUAL (1<<6)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_AUTOMATIC (0<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_CORE_MANUAL (1<<7)
+#define SYS_CTRL_AP_MODE_APOC_VOC_AUTOMATIC (0<<8)
+#define SYS_CTRL_AP_MODE_APOC_VOC_MANUAL (1<<8)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_AUTOMATIC (0<<9)
+#define SYS_CTRL_AP_MODE_APOC_VOC2_MANUAL (1<<9)
+#define SYS_CTRL_AP_MODE_CLK_APO(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_MODE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Enable
+#define SYS_CTRL_AP_ENABLE_APOC_VPU (1<<0)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK (1<<1)
+#define SYS_CTRL_AP_ENABLE_APOC_BCK2 (1<<2)
+#define SYS_CTRL_AP_ENABLE_APOC_UART1 (1<<3)
+#define SYS_CTRL_AP_ENABLE_APOC_UART2 (1<<4)
+#define SYS_CTRL_AP_ENABLE_APOC_UART3 (1<<5)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_CORE (1<<6)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_CORE (1<<7)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC (1<<8)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2 (1<<9)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC_ALWAYS (1<<10)
+#define SYS_CTRL_AP_ENABLE_APOC_VOC2_ALWAYS (1<<11)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY_N (1<<12)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XP (1<<13)
+#define SYS_CTRL_AP_ENABLE_APOC_DDRPHY2XN (1<<14)
+#define SYS_CTRL_AP_ENABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_ENABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_ENABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_ENABLE_APOC_DSI (1<<18)
+#define SYS_CTRL_AP_ENABLE_APOC_GPIO (1<<19)
+#define SYS_CTRL_AP_ENABLE_APOC_SPIFLASH (1<<20)
+#define SYS_CTRL_AP_ENABLE_APOC_PIX (1<<21)
+#define SYS_CTRL_AP_ENABLE_APOC_PDGB (1<<22)
+#define SYS_CTRL_AP_ENABLE_CLK_APO(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_ENABLE_CLK_APO_SHIFT (0)
+
+//Clk_APO_Disable
+#define SYS_CTRL_AP_DISABLE_APOC_VPU (1<<0)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK (1<<1)
+#define SYS_CTRL_AP_DISABLE_APOC_BCK2 (1<<2)
+#define SYS_CTRL_AP_DISABLE_APOC_UART1 (1<<3)
+#define SYS_CTRL_AP_DISABLE_APOC_UART2 (1<<4)
+#define SYS_CTRL_AP_DISABLE_APOC_UART3 (1<<5)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_CORE (1<<6)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_CORE (1<<7)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC (1<<8)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2 (1<<9)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC_ALWAYS (1<<10)
+#define SYS_CTRL_AP_DISABLE_APOC_VOC2_ALWAYS (1<<11)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY_N (1<<12)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XP (1<<13)
+#define SYS_CTRL_AP_DISABLE_APOC_DDRPHY2XN (1<<14)
+#define SYS_CTRL_AP_DISABLE_APOC_GPU (1<<15)
+#define SYS_CTRL_AP_DISABLE_APOC_USBPHY (1<<16)
+#define SYS_CTRL_AP_DISABLE_APOC_CSI (1<<17)
+#define SYS_CTRL_AP_DISABLE_APOC_DSI (1<<18)
+#define SYS_CTRL_AP_DISABLE_APOC_GPIO (1<<19)
+#define SYS_CTRL_AP_DISABLE_APOC_SPIFLASH (1<<20)
+#define SYS_CTRL_AP_DISABLE_APOC_PIX (1<<21)
+#define SYS_CTRL_AP_DISABLE_APOC_PDGB (1<<22)
+#define SYS_CTRL_AP_DISABLE_CLK_APO(n) (((n)&0x7FFFFF)<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_MASK (0x7FFFFF<<0)
+#define SYS_CTRL_AP_DISABLE_CLK_APO_SHIFT (0)
+
+//Cfg_Clk_AP_CPU
+#define SYS_CTRL_AP_AP_CPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_CPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_BUS_DIV_SEL(n) (((n)&3)<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_MASK (3<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_SHIFT (16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV2 (0<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV3 (1<<16)
+#define SYS_CTRL_AP_BUS_DIV_SEL_DIV4 (2<<16)
+#define SYS_CTRL_AP_AP_CPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AXI
+#define SYS_CTRL_AP_AP_AXI_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AXI_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AXI_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AXI_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_GCG
+#define SYS_CTRL_AP_AP_GCG_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GCG_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GCG_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_GCG_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_AHB1
+#define SYS_CTRL_AP_AP_AHB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_AHB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_AHB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_AHB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB1
+#define SYS_CTRL_AP_AP_APB1_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB1_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB1_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB1_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_APB2
+#define SYS_CTRL_AP_AP_APB2_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_APB2_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_APB2_SRC_SEL (1<<12)
+#define SYS_CTRL_AP_AP_APB2_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_MEM
+#define SYS_CTRL_AP_AP_MEM_SRC_DIV2 (1<<12)
+
+//Cfg_Clk_AP_GPU
+#define SYS_CTRL_AP_AP_GPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_GPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_GPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_GPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VPU
+#define SYS_CTRL_AP_AP_VPU_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VPU_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VPU_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VPU_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_VOC
+#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_AP_SFLSH
+#define SYS_CTRL_AP_AP_SFLSH_FREQ(n) (((n)&31)<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_MASK (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_SHIFT (0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_19M (6<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_20M (7<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_300M (26<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_340M (27<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_400M (28<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_480M (29<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_600M (30<<0)
+#define SYS_CTRL_AP_AP_SFLSH_FREQ_1_2G (31<<0)
+#define SYS_CTRL_AP_AP_SFLSH_SRC_DIV2 (1<<12)
+#define SYS_CTRL_AP_AP_SFLSH_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Clk_Uart
+#define SYS_CTRL_AP_UART_DIVIDER(n) (((n)&0x3FF)<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_MASK (0x3FF<<0)
+#define SYS_CTRL_AP_UART_DIVIDER_SHIFT (0)
+#define SYS_CTRL_AP_UART_SEL_PLL_SLOW (0<<12)
+#define SYS_CTRL_AP_UART_SEL_PLL_PLL (1<<12)
+
+//L2cc_Ctrl
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M(n) (((n)&15)<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_MASK (15<<0)
+#define SYS_CTRL_AP_ARQOS_L2CC_1_M_SHIFT (0)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M(n) (((n)&15)<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_MASK (15<<4)
+#define SYS_CTRL_AP_AWQOS_L2CC_1_M_SHIFT (4)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_MASK (15<<8)
+#define SYS_CTRL_AP_ARQOS_MODEM_MEM_AHBS_M_SHIFT (8)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M(n) (((n)&15)<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_MASK (15<<12)
+#define SYS_CTRL_AP_AWQOS_MODEM_MEM_AHBS_M_SHIFT (12)
+#define SYS_CTRL_AP_ARAP_L2CC_1_M (1<<16)
+#define SYS_CTRL_AP_AWAP_L2CC_1_M (1<<17)
+#define SYS_CTRL_AP_ARAP_MODEM_MEM_AHBS_M (1<<18)
+#define SYS_CTRL_AP_AWAP_MODEM_MEM_AHBS_M (1<<19)
+#define SYS_CTRL_AP_ARAP_MERGE1M (1<<20)
+#define SYS_CTRL_AP_AWAP_MERGE1M (1<<21)
+#define SYS_CTRL_AP_ARAP_MERGE2M (1<<22)
+#define SYS_CTRL_AP_AWAP_MERGE2M (1<<23)
+#define SYS_CTRL_AP_RESERVE1(n) (((n)&0xFF)<<24)
+#define SYS_CTRL_AP_RESERVE1_MASK (0xFF<<24)
+#define SYS_CTRL_AP_RESERVE1_SHIFT (24)
+
+//Spi_Ctrl
+#define SYS_CTRL_AP_LIMITED_EN_SPI1 (1<<0)
+#define SYS_CTRL_AP_LPSEN_SPI1 (1<<1)
+#define SYS_CTRL_AP_LIMITED_EN_SPI2 (1<<2)
+#define SYS_CTRL_AP_LPSEN_SPI2 (1<<3)
+#define SYS_CTRL_AP_LIMITED_EN_SPI3 (1<<4)
+#define SYS_CTRL_AP_LPSEN_SPI3 (1<<5)
+#define SYS_CTRL_AP_FBUSWID_NFSC (1<<6)
+#define SYS_CTRL_AP_RESERVE3 (1<<7)
+#define SYS_CTRL_AP_DMC_CFG(n) (((n)&0x3FF)<<8)
+#define SYS_CTRL_AP_DMC_CFG_MASK (0x3FF<<8)
+#define SYS_CTRL_AP_DMC_CFG_SHIFT (8)
+#define SYS_CTRL_AP_RESERVE2(n) (((n)&0x3FFF)<<18)
+#define SYS_CTRL_AP_RESERVE2_MASK (0x3FFF<<18)
+#define SYS_CTRL_AP_RESERVE2_SHIFT (18)
+
+//Memory_Margin
+#define SYS_CTRL_AP_EMAW_VOC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_VOC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_VOC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_VOC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_VOC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_VOC_SHIFT (2)
+#define SYS_CTRL_AP_EMAW_VPU(n) (((n)&3)<<5)
+#define SYS_CTRL_AP_EMAW_VPU_MASK (3<<5)
+#define SYS_CTRL_AP_EMAW_VPU_SHIFT (5)
+#define SYS_CTRL_AP_EMA_VPU(n) (((n)&7)<<7)
+#define SYS_CTRL_AP_EMA_VPU_MASK (7<<7)
+#define SYS_CTRL_AP_EMA_VPU_SHIFT (7)
+#define SYS_CTRL_AP_EMAW_GPU(n) (((n)&3)<<10)
+#define SYS_CTRL_AP_EMAW_GPU_MASK (3<<10)
+#define SYS_CTRL_AP_EMAW_GPU_SHIFT (10)
+#define SYS_CTRL_AP_EMA_GPU(n) (((n)&7)<<12)
+#define SYS_CTRL_AP_EMA_GPU_MASK (7<<12)
+#define SYS_CTRL_AP_EMA_GPU_SHIFT (12)
+#define SYS_CTRL_AP_EMAW_GOUDA(n) (((n)&3)<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_MASK (3<<15)
+#define SYS_CTRL_AP_EMAW_GOUDA_SHIFT (15)
+#define SYS_CTRL_AP_EMA_GOUDA(n) (((n)&7)<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_MASK (7<<17)
+#define SYS_CTRL_AP_EMA_GOUDA_SHIFT (17)
+#define SYS_CTRL_AP_EMAW_IMEM(n) (((n)&3)<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_MASK (3<<20)
+#define SYS_CTRL_AP_EMAW_IMEM_SHIFT (20)
+#define SYS_CTRL_AP_EMA_IMEM(n) (((n)&7)<<22)
+#define SYS_CTRL_AP_EMA_IMEM_MASK (7<<22)
+#define SYS_CTRL_AP_EMA_IMEM_SHIFT (22)
+#define SYS_CTRL_AP_EMAW_USB(n) (((n)&3)<<25)
+#define SYS_CTRL_AP_EMAW_USB_MASK (3<<25)
+#define SYS_CTRL_AP_EMAW_USB_SHIFT (25)
+#define SYS_CTRL_AP_EMA_USB(n) (((n)&7)<<27)
+#define SYS_CTRL_AP_EMA_USB_MASK (7<<27)
+#define SYS_CTRL_AP_EMA_USB_SHIFT (27)
+
+//Memory_Margin2
+#define SYS_CTRL_AP_EMAW_NFSC(n) (((n)&3)<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_MASK (3<<0)
+#define SYS_CTRL_AP_EMAW_NFSC_SHIFT (0)
+#define SYS_CTRL_AP_EMA_NFSC(n) (((n)&7)<<2)
+#define SYS_CTRL_AP_EMA_NFSC_MASK (7<<2)
+#define SYS_CTRL_AP_EMA_NFSC_SHIFT (2)
+#define SYS_CTRL_AP_EMA_VPUROM(n) (((n)&7)<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_MASK (7<<5)
+#define SYS_CTRL_AP_EMA_VPUROM_SHIFT (5)
+#define SYS_CTRL_AP_EMA_IMEMROM(n) (((n)&7)<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_MASK (7<<8)
+#define SYS_CTRL_AP_EMA_IMEMROM_SHIFT (8)
+#define SYS_CTRL_AP_KEN_VPUROM (1<<11)
+#define SYS_CTRL_AP_PGEN_VPUROM (1<<12)
+#define SYS_CTRL_AP_KEN_IMEMROM (1<<13)
+#define SYS_CTRL_AP_PGEN_IMEMROM (1<<14)
+
+//Memory_Observe
+#define SYS_CTRL_AP_MEM_OBSERVE(n) (((n)&0xFFFFFFFF)<<0)
+
+//Cfg_Clk_AP_VOC2
+//#define SYS_CTRL_AP_AP_VOC_FREQ(n) (((n)&31)<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_MASK (31<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_SHIFT (0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_19M (6<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_20M (7<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_300M (26<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_340M (27<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_400M (28<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_480M (29<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_600M (30<<0)
+//#define SYS_CTRL_AP_AP_VOC_FREQ_1_2G (31<<0)
+//#define SYS_CTRL_AP_AP_VOC_SRC_DIV2 (1<<12)
+//#define SYS_CTRL_AP_AP_VOC_REQ_DIV_UPDATE (1<<31)
+
+//Cfg_Reserve
+#define SYS_CTRL_AP_RESERVE(n) (((n)&0x3FFFFFFF)<<0)
+#define SYS_CTRL_AP_AUIFC_CH0_IRQ_MASK (1<<30)
+#define SYS_CTRL_AP_AUIFC_CH1_IRQ_MASK (1<<31)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/reg_timer.h b/arch/arm/include/asm/arch-rda/reg_timer.h
new file mode 100644
index 0000000000..80a4021caa
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_timer.h
@@ -0,0 +1,112 @@
+#ifndef _REG_TIMER_H_
+#define _REG_TIMER_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define NB_INTERVAL (1)
+#define INT_TIMER_NB_BITS (56)
+#define HW_TIMER_NB_BITS (64)
+
+// ============================================================================
+// TIMER_AP_T
+// -----------------------------------------------------------------------------
+typedef volatile struct
+{
+ REG32 OSTimer_LoadVal_L; //0x00000000
+ REG32 OSTimer_Ctrl; //0x00000004
+ REG32 OSTimer_CurVal_L; //0x00000008
+ REG32 OSTimer_CurVal_H; //0x0000000C
+ REG32 OSTimer_LockVal_L; //0x00000010
+ REG32 OSTimer_LockVal_H; //0x00000014
+ REG32 HWTimer_Ctrl; //0x00000018
+ REG32 HWTimer_CurVal_L; //0x0000001C
+ REG32 HWTimer_CurVal_H; //0x00000020
+ REG32 HWTimer_LockVal_L; //0x00000024
+ REG32 HWTimer_LockVal_H; //0x00000028
+ REG32 Timer_Irq_Mask_Set; //0x0000002C
+ REG32 Timer_Irq_Mask_Clr; //0x00000030
+ REG32 Timer_Irq_Clr; //0x00000034
+ REG32 Timer_Irq_Cause; //0x00000038
+} HWP_TIMER_AP_T;
+
+#define hwp_apTimer ((HWP_TIMER_AP_T*)(RDA_TIMER_BASE))
+
+//OSTimer_LoadVal_L
+#define TIMER_AP_OS_LOADVAL_L(n) (((n)&0xFFFFFFFF)<<0)
+
+//OSTimer_Ctrl
+#define TIMER_AP_OS_LOADVAL_H(n) (((n)&0xFFFFFF)<<0)
+#define TIMER_AP_OS_LOADVAL_H_MASK (0xFFFFFF<<0)
+#define TIMER_AP_OS_LOADVAL_H_SHIFT (0)
+#define TIMER_AP_ENABLE (1<<24)
+#define TIMER_AP_ENABLED (1<<25)
+#define TIMER_AP_CLEARED (1<<26)
+#define TIMER_AP_REPEAT (1<<28)
+#define TIMER_AP_WRAP (1<<29)
+#define TIMER_AP_LOAD (1<<30)
+
+//OSTimer_CurVal_L
+#define TIMER_AP_OS_CURVAL_L(n) (((n)&0xFFFFFFFF)<<0)
+
+//OSTimer_CurVal_H
+#define TIMER_AP_OS_CURVAL_H(n) (((n)&0xFFFFFF)<<0)
+#define TIMER_AP_OS_CURVAL_H_MASK (0xFFFFFF<<0)
+#define TIMER_AP_OS_CURVAL_H_SHIFT (0)
+
+//OSTimer_LockVal_L
+#define TIMER_AP_OS_LOCKVAL_L(n) (((n)&0xFFFFFFFF)<<0)
+#define TIMER_AP_OS_LOCKVAL_L_MASK (0xFFFFFFFF<<0)
+#define TIMER_AP_OS_LOCKVAL_L_SHIFT (0)
+
+//OSTimer_LockVal_H
+#define TIMER_AP_OS_LOCKVAL_H(n) (((n)&0xFFFFFF)<<0)
+#define TIMER_AP_OS_LOCKVAL_H_MASK (0xFFFFFF<<0)
+#define TIMER_AP_OS_LOCKVAL_H_SHIFT (0)
+
+//HWTimer_Ctrl
+#define TIMER_AP_INTERVAL_EN (1<<8)
+#define TIMER_AP_INTERVAL(n) (((n)&3)<<0)
+
+//HWTimer_CurVal_L
+#define TIMER_AP_HW_CURVAL_L(n) (((n)&0xFFFFFFFF)<<0)
+
+//HWTimer_CurVal_H
+#define TIMER_AP_HW_CURVAL_H(n) (((n)&0xFFFFFFFF)<<0)
+
+//HWTimer_LockVal_L
+#define TIMER_AP_HW_LOCKVAL_L(n) (((n)&0xFFFFFFFF)<<0)
+
+//HWTimer_LockVal_H
+#define TIMER_AP_HW_LOCKVAL_H(n) (((n)&0xFFFFFFFF)<<0)
+
+//Timer_Irq_Mask_Set
+#define TIMER_AP_OSTIMER_MASK (1<<0)
+#define TIMER_AP_HWTIMER_WRAP_MASK (1<<1)
+#define TIMER_AP_HWTIMER_ITV_MASK (1<<2)
+
+//Timer_Irq_Mask_Clr
+//#define TIMER_AP_OSTIMER_MASK (1<<0)
+//#define TIMER_AP_HWTIMER_WRAP_MASK (1<<1)
+//#define TIMER_AP_HWTIMER_ITV_MASK (1<<2)
+
+//Timer_Irq_Clr
+#define TIMER_AP_OSTIMER_CLR (1<<0)
+#define TIMER_AP_HWTIMER_WRAP_CLR (1<<1)
+#define TIMER_AP_HWTIMER_ITV_CLR (1<<2)
+
+//Timer_Irq_Cause
+#define TIMER_AP_OSTIMER_CAUSE (1<<0)
+#define TIMER_AP_HWTIMER_WRAP_CAUSE (1<<1)
+#define TIMER_AP_HWTIMER_ITV_CAUSE (1<<2)
+#define TIMER_AP_OSTIMER_STATUS (1<<16)
+#define TIMER_AP_HWTIMER_WRAP_STATUS (1<<17)
+#define TIMER_AP_HWTIMER_ITV_STATUS (1<<18)
+#define TIMER_AP_OTHER_TIMS_IRQ(n) (((n)&3)<<1)
+#define TIMER_AP_OTHER_TIMS_IRQ_MASK (3<<1)
+#define TIMER_AP_OTHER_TIMS_IRQ_SHIFT (1)
+
+#endif /* _REG_TIMER_H_ */
diff --git a/arch/arm/include/asm/arch-rda/reg_uart.h b/arch/arm/include/asm/arch-rda/reg_uart.h
new file mode 100644
index 0000000000..f3d5a7fdd0
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_uart.h
@@ -0,0 +1,478 @@
+#ifndef _REG_UART_H_
+#define _REG_UART_H_
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+#define UART_RX_FIFO_SIZE (32)
+#define UART_TX_FIFO_SIZE (16)
+#define NB_RX_FIFO_BITS (5)
+#define NB_TX_FIFO_BITS (4)
+
+typedef volatile struct
+{
+ REG32 ctrl; //0x00000000
+ REG32 status; //0x00000004
+ REG32 rxtx_buffer; //0x00000008
+ REG32 irq_mask; //0x0000000C
+ REG32 irq_cause; //0x00000010
+ REG32 triggers; //0x00000014
+ REG32 CMD_Set; //0x00000018
+ REG32 CMD_Clr; //0x0000001C
+} HWP_UART_T;
+
+#define hwp_uart1 ((HWP_UART_T*)(RDA_UART1_BASE))
+#define hwp_uart2 ((HWP_UART_T*)(RDA_UART2_BASE))
+#define hwp_uart3 ((HWP_UART_T*)(RDA_UART3_BASE))
+#define hwp_uart hwp_uart3
+
+//ctrl
+#define UART_ENABLE (1<<0)
+#define UART_ENABLE_DISABLE (0<<0)
+#define UART_ENABLE_ENABLE (1<<0)
+#define UART_DATA_BITS (1<<1)
+#define UART_DATA_BITS_7_BITS (0<<1)
+#define UART_DATA_BITS_8_BITS (1<<1)
+#define UART_TX_STOP_BITS (1<<2)
+#define UART_TX_STOP_BITS_1_BIT (0<<2)
+#define UART_TX_STOP_BITS_2_BITS (1<<2)
+#define UART_PARITY_ENABLE (1<<3)
+#define UART_PARITY_ENABLE_NO (0<<3)
+#define UART_PARITY_ENABLE_YES (1<<3)
+#define UART_PARITY_SELECT(n) (((n)&3)<<4)
+#define UART_PARITY_SELECT_ODD (0<<4)
+#define UART_PARITY_SELECT_EVEN (1<<4)
+#define UART_PARITY_SELECT_SPACE (2<<4)
+#define UART_PARITY_SELECT_MARK (3<<4)
+#define UART_DIVISOR_MODE (1<<20)
+#define UART_IRDA_ENABLE (1<<21)
+#define UART_DMA_MODE (1<<22)
+#define UART_DMA_MODE_DISABLE (0<<22)
+#define UART_DMA_MODE_ENABLE (1<<22)
+#define UART_AUTO_FLOW_CONTROL (1<<23)
+#define UART_AUTO_FLOW_CONTROL_ENABLE (1<<23)
+#define UART_AUTO_FLOW_CONTROL_DISABLE (0<<23)
+#define UART_LOOP_BACK_MODE (1<<24)
+#define UART_RX_LOCK_ERR (1<<25)
+#define UART_RX_BREAK_LENGTH(n) (((n)&15)<<28)
+
+//status
+#define UART_RX_FIFO_LEVEL(n) (((n)&0x3F)<<0)
+#define UART_RX_FIFO_LEVEL_MASK (0x3F<<0)
+#define UART_RX_FIFO_LEVEL_SHIFT (0)
+#define UART_TX_FIFO_SPACE(n) (((n)&31)<<8)
+#define UART_TX_FIFO_SPACE_MASK (31<<8)
+#define UART_TX_FIFO_SPACE_SHIFT (8)
+#define UART_TX_ACTIVE (1<<14)
+#define UART_RX_ACTIVE (1<<15)
+#define UART_RX_OVERFLOW_ERR (1<<16)
+#define UART_TX_OVERFLOW_ERR (1<<17)
+#define UART_RX_PARITY_ERR (1<<18)
+#define UART_RX_FRAMING_ERR (1<<19)
+#define UART_RX_BREAK_INT (1<<20)
+#define UART_DCTS (1<<24)
+#define UART_CTS (1<<25)
+#define UART_DTR (1<<28)
+#define UART_CLK_ENABLED (1<<31)
+
+//rxtx_buffer
+#define UART_RX_DATA(n) (((n)&0xFF)<<0)
+#define UART_TX_DATA(n) (((n)&0xFF)<<0)
+
+//irq_mask
+#define UART_TX_MODEM_STATUS (1<<0)
+#define UART_RX_DATA_AVAILABLE (1<<1)
+#define UART_TX_DATA_NEEDED (1<<2)
+#define UART_RX_TIMEOUT (1<<3)
+#define UART_RX_LINE_ERR (1<<4)
+#define UART_TX_DMA_DONE (1<<5)
+#define UART_RX_DMA_DONE (1<<6)
+#define UART_RX_DMA_TIMEOUT (1<<7)
+#define UART_DTR_RISE (1<<8)
+#define UART_DTR_FALL (1<<9)
+
+//irq_cause
+//#define UART_TX_MODEM_STATUS (1<<0)
+//#define UART_RX_DATA_AVAILABLE (1<<1)
+//#define UART_TX_DATA_NEEDED (1<<2)
+//#define UART_RX_TIMEOUT (1<<3)
+//#define UART_RX_LINE_ERR (1<<4)
+//#define UART_TX_DMA_DONE (1<<5)
+//#define UART_RX_DMA_DONE (1<<6)
+//#define UART_RX_DMA_TIMEOUT (1<<7)
+//#define UART_DTR_RISE (1<<8)
+//#define UART_DTR_FALL (1<<9)
+#define UART_TX_MODEM_STATUS_U (1<<16)
+#define UART_RX_DATA_AVAILABLE_U (1<<17)
+#define UART_TX_DATA_NEEDED_U (1<<18)
+#define UART_RX_TIMEOUT_U (1<<19)
+#define UART_RX_LINE_ERR_U (1<<20)
+#define UART_TX_DMA_DONE_U (1<<21)
+#define UART_RX_DMA_DONE_U (1<<22)
+#define UART_RX_DMA_TIMEOUT_U (1<<23)
+#define UART_DTR_RISE_U (1<<24)
+#define UART_DTR_FALL_U (1<<25)
+
+//triggers
+#define UART_RX_TRIGGER(n) (((n)&31)<<0)
+#define UART_TX_TRIGGER(n) (((n)&15)<<8)
+#define UART_AFC_LEVEL(n) (((n)&31)<<16)
+
+//CMD_Set
+#define UART_RI (1<<0)
+#define UART_DCD (1<<1)
+#define UART_DSR (1<<2)
+#define UART_TX_BREAK_CONTROL (1<<3)
+#define UART_TX_FINISH_N_WAIT (1<<4)
+#define UART_RTS (1<<5)
+#define UART_RX_FIFO_RESET (1<<6)
+#define UART_TX_FIFO_RESET (1<<7)
+
+//CMD_Clr
+//#define UART_RI (1<<0)
+//#define UART_DCD (1<<1)
+//#define UART_DSR (1<<2)
+//#define UART_TX_BREAK_CONTROL (1<<3)
+//#define UART_TX_FINISH_N_WAIT (1<<4)
+//#define UART_RTS (1<<5)
+
+#define CHIP_STD_UART_QTY 2
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// ============================================================================
+// HAL_UART_DATA_BITS_T
+// -----------------------------------------------------------------------------
+/// UART data length
+// =============================================================================
+typedef enum
+{
+/// Data is 7 bits
+ HAL_UART_7_DATA_BITS = 0x00000000,
+/// Data is 8 bits
+ HAL_UART_8_DATA_BITS = 0x00000001,
+ HAL_UART_DATA_BITS_QTY = 0x00000002
+} HAL_UART_DATA_BITS_T;
+
+
+// ============================================================================
+// HAL_UART_STOP_BITS_QTY_T
+// -----------------------------------------------------------------------------
+/// Number of stop bits
+// =============================================================================
+typedef enum
+{
+/// There is 1 stop bit
+ HAL_UART_1_STOP_BIT = 0x00000000,
+/// There are 2 stop bits
+ HAL_UART_2_STOP_BITS = 0x00000001,
+ HAL_UART_STOP_BITS_QTY = 0x00000002
+} HAL_UART_STOP_BITS_QTY_T;
+
+
+// ============================================================================
+// HAL_UART_PARITY_CFG_T
+// -----------------------------------------------------------------------------
+/// Data parity control selection If enabled, a parity check can be performed
+// =============================================================================
+typedef enum
+{
+/// No parity check
+ HAL_UART_NO_PARITY = 0x00000000,
+/// Parity check is odd
+ HAL_UART_ODD_PARITY = 0x00000001,
+/// Parity check is even
+ HAL_UART_EVEN_PARITY = 0x00000002,
+/// Parity check is always 0 (space)
+ HAL_UART_SPACE_PARITY = 0x00000003,
+/// Parity check is always 1 (mark)
+ HAL_UART_MARK_PARITY = 0x00000004,
+ HAL_UART_PARITY_QTY = 0x00000005
+} HAL_UART_PARITY_CFG_T;
+
+
+// ============================================================================
+// HAL_UART_RX_TRIGGER_CFG_T
+// -----------------------------------------------------------------------------
+/// Reception FIFO trigger (or treshold) level The Uarts can be configured to generate
+/// an interrupt when the reception FIFO is above a configurable threshold (Rx FIFO
+/// trigger
+// =============================================================================
+typedef enum
+{
+/// One data received in the Rx FIFO
+ HAL_UART_RX_TRIG_1 = 0x00000000,
+/// 1/4 of the Rx FIFO is full
+ HAL_UART_RX_TRIG_QUARTER = 0x00000001,
+/// 1/2 of the Rx FIFO is full
+ HAL_UART_RX_TRIG_HALF = 0x00000002,
+/// Rx FIFO is almost full
+ HAL_UART_RX_TRIG_NEARFULL = 0x00000003,
+ HAL_UART_RX_TRIG_QTY = 0x00000004
+} HAL_UART_RX_TRIGGER_CFG_T;
+
+
+// ============================================================================
+// HAL_UART_TX_TRIGGER_CFG_T
+// -----------------------------------------------------------------------------
+/// Tranmission FIFO trigger (or treshold) level. The Uarts can be configured to
+/// generate an interrupt when the emission FIFO is below a configurable threshold
+/// (Tx FIFO trigger
+// =============================================================================
+typedef enum
+{
+/// Tx FIFO empty
+ HAL_UART_TX_TRIG_EMPTY = 0x00000000,
+/// Less than 1/4 of the Tx FIFO left to send
+ HAL_UART_TX_TRIG_QUARTER = 0x00000001,
+/// Less than 1/2 of the Tx FIFO left to send
+ HAL_UART_TX_TRIG_HALF = 0x00000002,
+/// Less thant 3/4 of the Tx FIFO left to send
+ HAL_UART_TX_TRIG_3QUARTER = 0x00000003,
+ HAL_UART_TX_TRIG_QTY = 0x00000004
+} HAL_UART_TX_TRIGGER_CFG_T;
+
+
+// ============================================================================
+// HAL_UART_AFC_MODE_T
+// -----------------------------------------------------------------------------
+/// Auto Flow Control. Controls the Rx Fifo level at which the Uart_RTS Auto Flow
+/// Control will be set inactive high (see UART Operation for more details on AFC).
+/// The Uart_RTS Auto Flow Control will be set inactive high when quantity of data
+/// in Rx Fifo &amp;gt; AFC Level
+// =============================================================================
+typedef enum
+{
+/// RTS inactive with 1 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_1 = 0x00000000,
+/// RTS inactive with 2 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_2 = 0x00000001,
+/// RTS inactive with 3 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_3 = 0x00000002,
+/// RTS inactive with 4 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_4 = 0x00000003,
+/// RTS inactive with 5 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_5 = 0x00000004,
+/// RTS inactive with 6 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_6 = 0x00000005,
+/// RTS inactive with 7 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_7 = 0x00000006,
+/// RTS inactive with 8 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_8 = 0x00000007,
+/// RTS inactive with 9 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_9 = 0x00000008,
+/// RTS inactive with 10 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_10 = 0x00000009,
+/// RTS inactive with 11 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_11 = 0x0000000A,
+/// RTS inactive with 12 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_12 = 0x0000000B,
+/// RTS inactive with 13 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_13 = 0x0000000C,
+/// RTS inactive with 14 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_14 = 0x0000000D,
+/// RTS inactive with 15 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_15 = 0x0000000E,
+/// RTS inactive with 16 data in the Rx FIFO
+ HAL_UART_AFC_MODE_RX_TRIG_16 = 0x0000000F,
+/// Hardware flow control is disabled. \n &amp;lt;B&amp;gt; NEVER USE THIS MODE &amp;lt;/B&amp;gt;
+ HAL_UART_AFC_MODE_DISABLE = 0x00000010,
+ HAL_UART_AFC_MODE_QTY = 0x00000011,
+/// AFC mode is loopback \n When set, data on the Uart_Tx line is held high, while
+/// the serial output is looped back to the serial input line, internally.
+ HAL_UART_AFC_LOOP_BACK = 0x00000020
+} HAL_UART_AFC_MODE_T;
+
+
+// ============================================================================
+// HAL_UART_IRDA_MODE_T
+// -----------------------------------------------------------------------------
+/// IrDA protocole enabling IrDA SIR mode is available, and can be activated when
+/// the user open the Uart
+// =============================================================================
+typedef enum
+{
+/// IrDA mode disabled
+ HAL_UART_IRDA_MODE_DISABLE = 0x00000000,
+/// IrDA mode enabled
+ HAL_UART_IRDA_MODE_ENABLE = 0x00000001,
+ HAL_UART_IRDA_MODE_QTY = 0x00000002
+} HAL_UART_IRDA_MODE_T;
+
+
+// ============================================================================
+// HAL_UART_BAUD_RATE_T
+// -----------------------------------------------------------------------------
+/// Baudrate available with the modifiable system clock UARTs are able to run at
+/// a wide selection of baud rates. This must be configured at the UART opening
+// =============================================================================
+typedef enum
+{
+/// 2.4 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_2400 = 0x00000960,
+/// 4.8 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_4800 = 0x000012C0,
+/// 9.6 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_9600 = 0x00002580,
+/// 14.4 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_14400 = 0x00003840,
+/// 19.2 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_19200 = 0x00004B00,
+/// 28.8 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_28800 = 0x00007080,
+/// 33.6 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_33600 = 0x00008340,
+/// 38.4 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_38400 = 0x00009600,
+/// 57.6 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_57600 = 0x0000E100,
+/// 115.2 KBaud (Serial and IrDA)
+ HAL_UART_BAUD_RATE_115200 = 0x0001C200,
+/// 230.4 KBaud (Available only in serial mode)
+ HAL_UART_BAUD_RATE_230400 = 0x00038400,
+/// 460.8 KBaud (Available only in serial mode)
+ HAL_UART_BAUD_RATE_460800 = 0x00070800,
+/// 921.6 KBaud (Available only in serial mode)
+ HAL_UART_BAUD_RATE_921600 = 0x000E1000,
+/// 1843.2 KBaud (Available only in serial mode)
+ HAL_UART_BAUD_RATE_1843200 = 0x001C2000,
+ HAL_UART_BAUD_RATE_QTY = 0x001C2001
+} HAL_UART_BAUD_RATE_T;
+
+
+// ============================================================================
+// HAL_UART_TRANSFERT_MODE_T
+// -----------------------------------------------------------------------------
+/// Data transfert mode: via DMA or direct. To allow for an easy use of the Uart
+/// modules, a non blocking hardware abstraction layer interface is provided
+// =============================================================================
+typedef enum
+{
+/// Direct polling: The application sends/receives the data directly to/from the
+/// hardware module. The number of bytes actually sent/received is returned. No IRQ
+/// is generated.
+ HAL_UART_TRANSFERT_MODE_DIRECT_POLLING = 0x00000000,
+/// Direct Irq: The application sends/receives the data directly to/from the hardware
+/// module. The number of bytes actually sent/received is returned.An irq can be
+/// generated when the Tx/Rx FIFO reaches the pre-programmed level.
+ HAL_UART_TRANSFERT_MODE_DIRECT_IRQ = 0x00000001,
+/// DMA polling: The application sends/receives the data through a DMA to the hardware
+/// module. When no DMA channel is available, the function returns 0. No byte is
+/// sent. When a DMA resource is available, the function returns the number of bytes
+/// to send. They will all be sent. A function allows to check if the previous DMA
+/// transfer is finished. No new DMA transfer for the same Uart and in the same direction
+/// is allowed until the previous transfer is finished.
+ HAL_UART_TRANSFERT_MODE_DMA_POLLING = 0x00000002,
+/// The application sends/receives the data through a DMA to the hardware module.
+/// When no DMA channel is available, the function returns 0. No byte is sent. When
+/// a DMA resource is available, the function returns the number of bytes to send.
+/// They will all be sent. An Irq is generated when the current transfer is finished.
+/// No new DMA transfer for the same Uart and in the same direction is allowed until
+/// the previous transfer is finished.
+ HAL_UART_TRANSFERT_MODE_DMA_IRQ = 0x00000003,
+/// The transfert is off.
+ HAL_UART_TRANSFERT_MODE_OFF = 0x00000004,
+ HAL_UART_TRANSFERT_MODE_QTY = 0x00000005
+} HAL_UART_TRANSFERT_MODE_T;
+
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// HAL_UART_CFG_T
+// -----------------------------------------------------------------------------
+/// UART Configuration Structure This structure defines the Uart behavior
+// =============================================================================
+typedef struct
+{
+ /// Data format
+ HAL_UART_DATA_BITS_T data; //0x00000000
+ /// Number of stop bits
+ HAL_UART_STOP_BITS_QTY_T stop; //0x00000004
+ /// Parity check
+ HAL_UART_PARITY_CFG_T parity; //0x00000008
+ /// Trigger for the Rx FIFO
+ HAL_UART_RX_TRIGGER_CFG_T rx_trigger; //0x0000000C
+ /// Trigger for the Tx FIFO
+ HAL_UART_TX_TRIGGER_CFG_T tx_trigger; //0x00000010
+ /// Hardware Flow control
+ HAL_UART_AFC_MODE_T afc; //0x00000014
+ /// IrDA mode
+ HAL_UART_IRDA_MODE_T irda; //0x00000018
+ /// Baud Rate
+ HAL_UART_BAUD_RATE_T rate; //0x0000001C
+ /// Reception transfer mode
+ HAL_UART_TRANSFERT_MODE_T rx_mode; //0x00000020
+ /// Transmission transfer mode
+ HAL_UART_TRANSFERT_MODE_T tx_mode; //0x00000024
+} HAL_UART_CFG_T; //Size : 0x28
+
+
+
+// ============================================================================
+// HAL_UART_IRQ_STATUS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef struct
+{
+ u32 txModemStatus:1;
+ u32 rxDataAvailable:1;
+ u32 txDataNeeded:1;
+ u32 rxTimeout:1;
+ u32 rxLineErr:1;
+ u32 txDmaDone:1;
+ u32 rxDmaDone:1;
+ u32 rxDmaTimeout:1;
+} HAL_UART_IRQ_STATUS_T;
+//unused
+#define HAL_UART_IRQ_STATUS_TXMODEMSTATUS (1<<0)
+#define HAL_UART_IRQ_STATUS_RXDATAAVAILABLE (1<<1)
+#define HAL_UART_IRQ_STATUS_TXDATANEEDED (1<<2)
+#define HAL_UART_IRQ_STATUS_RXTIMEOUT (1<<3)
+#define HAL_UART_IRQ_STATUS_RXLINEERR (1<<4)
+#define HAL_UART_IRQ_STATUS_TXDMADONE (1<<5)
+#define HAL_UART_IRQ_STATUS_RXDMADONE (1<<6)
+#define HAL_UART_IRQ_STATUS_RXDMATIMEOUT (1<<7)
+
+
+
+// ============================================================================
+// HAL_UART_ERROR_STATUS_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef struct
+{
+ u32 _:4;
+ u32 rxOvflErr:1;
+ u32 txOvflErr:1;
+ u32 rxParityErr:1;
+ u32 rxFramingErr:1;
+ u32 rxBreakInt:1;
+} HAL_UART_ERROR_STATUS_T;
+//unused
+#define HAL_UART_ERROR_STATUS__(n) (((n)&15)<<0)
+#define HAL_UART_ERROR_STATUS_RXOVFLERR (1<<4)
+#define HAL_UART_ERROR_STATUS_TXOVFLERR (1<<5)
+#define HAL_UART_ERROR_STATUS_RXPARITYERR (1<<6)
+#define HAL_UART_ERROR_STATUS_RXFRAMINGERR (1<<7)
+#define HAL_UART_ERROR_STATUS_RXBREAKINT (1<<8)
+
+
+/// Uart 0 is the trace uart and is unavailable for this driver
+/// The numbering starts at 1 for consistency.
+/// The HAL_UART_QTY value is defined as the number of UARTS
+/// avalaible for the chip on which the driver is running, and
+/// can therefore be used for consistency checks
+typedef enum {
+ HAL_UART_1 = 0x00000001,
+ HAL_UART_2 = 0x00000002,
+ HAL_UART_QTY = CHIP_STD_UART_QTY+1
+} HAL_UART_ID_T;
+
+#endif /* _REG_UART_H_ */
diff --git a/arch/arm/include/asm/arch-rda/reg_xcpu.h b/arch/arm/include/asm/arch-rda/reg_xcpu.h
new file mode 100644
index 0000000000..166fbaff89
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/reg_xcpu.h
@@ -0,0 +1,314 @@
+//==============================================================================
+//
+// Copyright (C) 2012-2013, RDA Microelectronics.
+// All Rights Reserved
+//
+// This source code is the property of RDA Microelectronics and is
+// confidential. Any modification, distribution, reproduction or
+// exploitation of any content of this file is totally forbidden,
+// except with the written permission of RDA Microelectronics.
+//
+//==============================================================================
+//
+// THIS FILE WAS GENERATED FROM ITS CORRESPONDING XML VERSION WITH COOLXML.
+//
+// !!! PLEASE DO NOT EDIT !!!
+//
+// $HeadURL$
+// $Author$
+// $Date$
+// $Revision$
+//
+//==============================================================================
+//
+/// @file
+//
+//==============================================================================
+
+#ifndef _XCPU_H_
+#define _XCPU_H_
+
+#ifdef CT_ASM
+#error "You are trying to use in an assembly code the normal H description of 'xcpu'."
+#endif
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/rda_iomap.h>
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// ============================================================================
+// XCPU_T
+// -----------------------------------------------------------------------------
+///
+// =============================================================================
+typedef volatile struct
+{
+ REG32 Reserved_00000000; //0x00000000
+ REG32 rf0_addr; //0x00000004
+ REG32 Reserved_00000008[97]; //0x00000008
+ REG32 cp0_adr_BadVAddr; //0x0000018C
+ REG32 cp0_Cause; //0x00000190
+ REG32 cp0_Status; //0x00000194
+ REG32 cp0_EPC; //0x00000198
+ REG32 Reserved_0000019C[5]; //0x0000019C
+ REG32 cp0_BadVAddr; //0x000001B0
+ REG32 Reserved_000001B4[19]; //0x000001B4
+ REG32 rf0_data; //0x00000200
+ REG32 Reserved_00000204[5]; //0x00000204
+ REG32 dc0_result; //0x00000218
+ REG32 Reserved_0000021C[89]; //0x0000021C
+ REG32 Reserved_00000380; //0x00000380
+ REG32 Regfile_AT; //0x00000384
+ REG32 Regfile_V0; //0x00000388
+ REG32 Regfile_V1; //0x0000038C
+ REG32 Regfile_A0; //0x00000390
+ REG32 Regfile_A1; //0x00000394
+ REG32 Regfile_A2; //0x00000398
+ REG32 Regfile_A3; //0x0000039C
+ REG32 Regfile_T0; //0x000003A0
+ REG32 Regfile_T1; //0x000003A4
+ REG32 Regfile_T2; //0x000003A8
+ REG32 Regfile_T3; //0x000003AC
+ REG32 Regfile_T4; //0x000003B0
+ REG32 Regfile_T5; //0x000003B4
+ REG32 Regfile_T6; //0x000003B8
+ REG32 Regfile_T7; //0x000003BC
+ REG32 Regfile_S0; //0x000003C0
+ REG32 Regfile_S1; //0x000003C4
+ REG32 Regfile_S2; //0x000003C8
+ REG32 Regfile_S3; //0x000003CC
+ REG32 Regfile_S4; //0x000003D0
+ REG32 Regfile_S5; //0x000003D4
+ REG32 Regfile_S6; //0x000003D8
+ REG32 Regfile_S7; //0x000003DC
+ REG32 Regfile_T8; //0x000003E0
+ REG32 Regfile_T9; //0x000003E4
+ REG32 Regfile_K0; //0x000003E8
+ REG32 Regfile_K1; //0x000003EC
+ REG32 Regfile_GP; //0x000003F0
+ REG32 Regfile_SP; //0x000003F4
+ REG32 Regfile_S8; //0x000003F8
+ REG32 Regfile_RA; //0x000003FC
+ REG32 Reserved_00000400[16]; //0x00000400
+ REG32 Debug_Page_Address; //0x00000440
+ REG32 Cache_Control; //0x00000444
+} HWP_XCPU_T;
+
+#define hwp_xcpu ((HWP_XCPU_T*) (RDA_MODEM_XCPU_BASE))
+#define hwp_bcpu ((HWP_XCPU_T*) (RDA_MODEM_BCPU_BASE))
+
+
+//rf0_addr
+#define XCPU_RF0_ADDR(n) (((n)&0xFFFFFFFF)<<0)
+
+//cp0_adr_BadVAddr
+#define XCPU_CP0_ADR_BADVADDR(n) (((n)&0xFFFFFFFF)<<0)
+
+//cp0_Cause
+#define XCPU_CP0_CAUSE_EXCCODE(n) (((n)&15)<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_MASK (15<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_SHIFT (2)
+#define XCPU_CP0_CAUSE_EXCCODE_INT (0<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_MOD (1<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_TLBL (2<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_TLBS (3<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_ADEL (4<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_ADES (5<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_IBE (6<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_DBE (7<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_SYS (8<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_PB (9<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_RI (10<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_CPU (11<<2)
+#define XCPU_CP0_CAUSE_EXCCODE_OV (12<<2)
+#define XCPU_CP0_CAUSE_IP_SOFT(n) (((n)&3)<<8)
+#define XCPU_CP0_CAUSE_IP_SOFT_MASK (3<<8)
+#define XCPU_CP0_CAUSE_IP_SOFT_SHIFT (8)
+#define XCPU_CP0_CAUSE_IP_EXT(n) (((n)&0x3F)<<10)
+#define XCPU_CP0_CAUSE_IP_EXT_MASK (0x3F<<10)
+#define XCPU_CP0_CAUSE_IP_EXT_SHIFT (10)
+#define XCPU_CP0_CAUSE_CE(n) (((n)&3)<<28)
+#define XCPU_CP0_CAUSE_CE_MASK (3<<28)
+#define XCPU_CP0_CAUSE_CE_SHIFT (28)
+#define XCPU_CP0_CAUSE_BD_MASK (1<<31)
+#define XCPU_CP0_CAUSE_BD_SHIFT (31)
+#define XCPU_CP0_CAUSE_BD_NORMAL (0<<31)
+#define XCPU_CP0_CAUSE_BD_DELAY_SLOT (1<<31)
+#define XCPU_CP0_CAUSE_IP(n) (((n)&0xFF)<<8)
+#define XCPU_CP0_CAUSE_IP_MASK (0xFF<<8)
+#define XCPU_CP0_CAUSE_IP_SHIFT (8)
+
+//cp0_Status
+#define XCPU_CP0_STATUS_IEC_MASK (1<<0)
+#define XCPU_CP0_STATUS_IEC_SHIFT (0)
+#define XCPU_CP0_STATUS_IEC_DISABLE (0<<0)
+#define XCPU_CP0_STATUS_IEC_ENABLE (1<<0)
+#define XCPU_CP0_STATUS_KUC_MASK (1<<1)
+#define XCPU_CP0_STATUS_KUC_SHIFT (1)
+#define XCPU_CP0_STATUS_KUC_KERNEL (0<<1)
+#define XCPU_CP0_STATUS_KUC_USER (1<<1)
+#define XCPU_CP0_STATUS_IEP_MASK (1<<2)
+#define XCPU_CP0_STATUS_IEP_SHIFT (2)
+#define XCPU_CP0_STATUS_IEP_DISABLE (0<<2)
+#define XCPU_CP0_STATUS_IEP_ENABLE (1<<2)
+#define XCPU_CP0_STATUS_KUP_MASK (1<<3)
+#define XCPU_CP0_STATUS_KUP_SHIFT (3)
+#define XCPU_CP0_STATUS_KUP_KERNEL (0<<3)
+#define XCPU_CP0_STATUS_KUP_USER (1<<3)
+#define XCPU_CP0_STATUS_IEO_MASK (1<<4)
+#define XCPU_CP0_STATUS_IEO_SHIFT (4)
+#define XCPU_CP0_STATUS_IEO_DISABLE (0<<4)
+#define XCPU_CP0_STATUS_IEO_ENABLE (1<<4)
+#define XCPU_CP0_STATUS_KUO_MASK (1<<5)
+#define XCPU_CP0_STATUS_KUO_SHIFT (5)
+#define XCPU_CP0_STATUS_KUO_KERNEL (0<<5)
+#define XCPU_CP0_STATUS_KUO_USER (1<<5)
+#define XCPU_CP0_STATUS_KUI (1<<6)
+#define XCPU_CP0_STATUS_INTMASK(n) (((n)&0xFF)<<8)
+#define XCPU_CP0_STREAMING_DISABLE (1<<16)
+#define XCPU_CP0_STATUS_CM (1<<19)
+#define XCPU_CP0_STATUS_TS (1<<21)
+#define XCPU_CP0_STATUS_BEV (1<<22)
+#define XCPU_CP0_STATUS_RE (1<<25)
+#define XCPU_CP0_STATUS_CU_0 (1<<28)
+#define XCPU_CP0_STATUS_CU_1 (1<<29)
+#define XCPU_CP0_STATUS_CU_2 (1<<30)
+#define XCPU_CP0_STATUS_CU_3 (1<<31)
+#define XCPU_CP0_STATUS_CU_123(n) (((n)&7)<<29)
+#define XCPU_CP0_STATUS_CU_123_MASK (7<<29)
+#define XCPU_CP0_STATUS_CU_123_SHIFT (29)
+#define XCPU_CP0_STATUS_CU(n) (((n)&15)<<28)
+#define XCPU_CP0_STATUS_CU_MASK (15<<28)
+#define XCPU_CP0_STATUS_CU_SHIFT (28)
+
+//cp0_EPC
+#define XCPU_CP0_EPC(n) (((n)&0xFFFFFFFF)<<0)
+
+//cp0_BadVAddr
+#define XCPU_CP0_BADVADDR(n) (((n)&0xFFFFFFFF)<<0)
+
+//rf0_data
+#define XCPU_RF0_DATA(n) (((n)&0xFFFFFFFF)<<0)
+
+//dc0_result
+#define XCPU_DC0_RESULT(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_AT
+#define XCPU_AT(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_V0
+#define XCPU_V0(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_V1
+#define XCPU_V1(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_A0
+#define XCPU_A0(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_A1
+#define XCPU_A1(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_A2
+#define XCPU_A2(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_A3
+#define XCPU_A3(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T0
+#define XCPU_T0(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T1
+#define XCPU_T1(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T2
+#define XCPU_T2(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T3
+#define XCPU_T3(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T4
+#define XCPU_T4(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T5
+#define XCPU_T5(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T6
+#define XCPU_T6(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T7
+#define XCPU_T7(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S0
+#define XCPU_S0(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S1
+#define XCPU_S1(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S2
+#define XCPU_S2(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S3
+#define XCPU_S3(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S4
+#define XCPU_S4(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S5
+#define XCPU_S5(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S6
+#define XCPU_S6(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S7
+#define XCPU_S7(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T8
+#define XCPU_T8(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_T9
+#define XCPU_T9(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_K0
+#define XCPU_K0(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_K1
+#define XCPU_K1(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_GP
+#define XCPU_GP(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_SP
+#define XCPU_SP(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_S8
+#define XCPU_S8(n) (((n)&0xFFFFFFFF)<<0)
+
+//Regfile_RA
+#define XCPU_RA(n) (((n)&0xFFFFFFFF)<<0)
+
+//Debug_Page_Address
+#define XCPU_DEBUG_PAGE_ADDRESS(n) (((n)&15)<<0)
+#define XCPU_DEBUG_PAGE_ADDRESS_MASK (15<<0)
+#define XCPU_DEBUG_PAGE_ADDRESS_SHIFT (0)
+#define XCPU_DEBUG_PAGE_ADDRESS_ITAG (0<<0)
+#define XCPU_DEBUG_PAGE_ADDRESS_DTAG (8<<0)
+
+//Cache_Control
+#define XCPU_DCACHE_INHIBIT (1<<0)
+#define XCPU_ICACHE_INHIBIT (1<<1)
+#define XCPU_CACHE_HIT_DISABLE (1<<2)
+
+
+
+
+
+#endif
+
diff --git a/arch/arm/include/asm/arch-rda/rom_api_trampolin.h b/arch/arm/include/asm/arch-rda/rom_api_trampolin.h
new file mode 100644
index 0000000000..2104ed8559
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/rom_api_trampolin.h
@@ -0,0 +1,180 @@
+
+#ifndef __RDA_ROM_API_H__
+#define __RDA_ROM_API_H__
+
+struct chip_id {
+ // ASIC information
+ uint32_t chip; // CHIP(31:15) NA(15:15) BOND(14:12) METAL(11:0)
+ uint32_t res1;
+ // Production information
+ uint16_t date; // YYYY:MMMM:DDDDD
+ uint16_t wafer;
+ uint16_t xy;
+ uint16_t res2;
+};
+
+struct chip_security_context {
+ // Security context
+ uint8_t rda_key_index; // 0-5 : 0 default key
+ uint8_t vendor_id; // 0-50
+ uint16_t flags;
+#define RDA_SE_CFG_UNLOCK_ALLOWED (1<<0)
+#define RDA_SE_CFG_SECURITY_ENABLE_BIT (1<<4)
+#define RDA_SE_CFG_INDIRECT_SIGN_BIT (1<<5)
+#define RDA_SE_CFG_HOST_DISABLE_BIT (1<<6)
+#define RDA_SE_CFG_TRACE_DISABLE_BIT (1<<7)
+};
+
+struct chip_unique_id {
+ uint8_t id[32];
+};
+
+/* security */
+#define RDASIGN "RDAS"
+#define PKALG "Ed"
+#define KDFALG "BK"
+
+#define SIGBYTES 64
+#define PUBLICBYTES 32
+#define SECRETBYTES 64
+#define FPLEN 8
+
+struct pubkey {
+ uint8_t rdasign[4];//RDAS
+ uint8_t pkalg[2]; //Ed
+ uint8_t dummy[2];
+ uint8_t name[16];
+ uint8_t fingerprint[FPLEN];
+ uint8_t pubkey[PUBLICBYTES];
+};
+
+// RDASEdPo
+struct sig {
+ uint8_t rdasign[4];//RDAS
+ uint8_t pkalg[2]; //Ed
+ uint8_t hashalg[2];//Po/B2/SH
+ uint8_t name[16];
+ uint8_t fingerprint[FPLEN];
+ uint8_t sig[SIGBYTES];
+};
+
+
+/* ROM Cryto API */
+
+struct ROM_crypto_api {
+ char magic[8]; // "RDA API"
+ unsigned version; // 100
+
+ // signature
+ int (*signature_open) (
+ const uint8_t *message, unsigned length,
+ const struct sig *sig,
+ const struct pubkey *pubkey);
+/* Return values */
+#define ROM_API_SIGNATURE_OK 0
+#define ROM_API_SIGNATURE_FAIL -1
+// positive values is for invalid arguments
+
+ // hash
+ unsigned sz_hash_context;
+ int (*hash_init) ( unsigned *S, uint8_t outlen );
+ int (*hash_update) ( unsigned *S, const uint8_t *in, unsigned inlen );
+ int (*hash_final) ( unsigned *S, uint8_t *out, uint8_t outlen );
+
+ // info API
+ void (*get_chip_id) (struct chip_id *id);
+ void (*get_chip_unique) (struct chip_unique_id *out);
+ int (*get_chip_security_context) (struct chip_security_context *context,
+ struct pubkey *pubkey);
+/* Return values */
+#define ROM_API_SECURITY_ENABLED 0
+#define ROM_API_SECURITY_DISABLED 1
+#define ROM_API_INVALID_KEYINDEX 2
+#define ROM_API_INVALID_VENDOR_ID 3
+#define ROM_API_SECURITY_UNAVAILABLE 4
+
+ // RND
+ void (*get_chip_true_random) (uint8_t *out, uint8_t outlen);
+
+ // NEW in v101:
+ int (*signature_open_w_hash)(uint8_t message_hash[64],
+ const struct sig *signature,
+ const struct pubkey *pubkey);
+/* Return values */
+// same as signature_open() plus ROM_API_UNAVAILABLE if method is unavailable.
+#define ROM_API_UNAVAILABLE 100
+
+ // Future extension
+ unsigned dummy[19];
+};
+
+#ifndef BOOTROM
+
+// The ROMAPI is allocated either at 0x3f00 or 0xff00.
+// 8810 - 0xff00
+// 8810H - 0x3f00
+#ifndef ROMAPI_BASE
+# define ROMAPI_BASE 0xff00
+#endif
+
+static const struct ROM_crypto_api *romapi = (void*)ROMAPI_BASE;
+
+
+// info API
+
+static void inline get_chip_id(struct chip_id *id)
+{
+ romapi->get_chip_id(id);
+}
+
+
+static inline void get_chip_unique(struct chip_unique_id *id )
+{
+ romapi->get_chip_unique(id);
+}
+
+/* Replaced with a enhanced version in arch/arm/rda/rda_romapi.c */
+int get_chip_security_context(struct chip_security_context *context, struct pubkey *pubkey);
+/*
+static inline int get_chip_security_context(struct chip_security_context *context, struct pubkey *pubkey)
+{
+ return romapi->get_chip_security_context(context, pubkey);
+}*/
+
+
+//
+// RND
+//
+static inline void get_chip_true_random(uint8_t *out, uint8_t outlen)
+{
+ romapi->get_chip_true_random(out, outlen);
+}
+
+//
+// SIGNATURE CHECK
+//
+static inline int signature_check(
+ const uint8_t *message, unsigned length,
+ const struct sig *sig,
+ const struct pubkey *pubkey)
+{
+ return romapi->signature_open(message, length, sig, pubkey);
+}
+
+// NEW in v101:
+//
+// SIGNATURE CHECK variant that can be used to check larger than RAM messages
+//
+static inline int signature_check_w_hash(
+ uint8_t message_hash[64],
+ const struct sig *sig,
+ const struct pubkey *pubkey)
+{
+ if (romapi->signature_open_w_hash)
+ return romapi->signature_open_w_hash(message_hash, sig, pubkey);
+ else
+ return ROM_API_UNAVAILABLE;
+}
+
+#endif
+#endif
diff --git a/arch/arm/include/asm/arch-rda/spl_board_info.h b/arch/arm/include/asm/arch-rda/spl_board_info.h
new file mode 100644
index 0000000000..f931d1bb06
--- /dev/null
+++ b/arch/arm/include/asm/arch-rda/spl_board_info.h
@@ -0,0 +1,43 @@
+#ifndef _SPL_BOARD_INFO_H_
+#define _SPL_BOARD_INFO_H_
+
+#include <asm/arch/rom_api_trampolin.h>
+
+/*!!!
+ *struct size must < CONFIG_SPL_BOARD_INFO_SIZE (512 bytes)
+ */
+typedef struct spl_bd_info {
+ struct {
+ unsigned long ddr_auto_cal_offs;
+ u16 ddr_auto_cal_flag;
+ u16 ddr_auto_cal_val[10];
+ } spl_ddr_cal_info;
+
+ struct spl_security_info {
+ u32 version;
+ int secure_mode;
+ struct chip_id chip_id;
+ struct chip_security_context chip_security_context;
+ struct chip_unique_id chip_unique_id;
+ struct pubkey pubkey;
+ u8 random[32];
+ } spl_security_info;
+
+ struct spl_emmc_info{
+ u8 manufacturer_id;
+ u8 reserved[3];
+ } spl_emmc_info;
+} spl_bd_t;
+
+static inline spl_bd_t *get_spl_bd_info(void)
+{
+ spl_bd_t *p = (spl_bd_t *)CONFIG_SPL_BOARD_INFO_ADDR;
+
+ return p;
+}
+
+#define get_bd_spl_security_info() &get_spl_bd_info()->spl_security_info
+#define get_bd_spl_ddr_cal_info() &get_spl_bd_info()->spl_ddr_cal_info
+#define get_bd_spl_emmc_info() &get_spl_bd_info()->spl_emmc_info
+#endif /* _SPL_BOARD_INFO_H_ */
+
diff --git a/arch/arm/include/asm/arch-s5pc1xx/mmc.h b/arch/arm/include/asm/arch-s5pc1xx/mmc.h
index adef4ee21d..0f701c9012 100644
--- a/arch/arm/include/asm/arch-s5pc1xx/mmc.h
+++ b/arch/arm/include/asm/arch-s5pc1xx/mmc.h
@@ -21,53 +21,54 @@
#ifndef __ASM_ARCH_MMC_H_
#define __ASM_ARCH_MMC_H_
-#ifndef __ASSEMBLY__
-struct s5p_mmc {
- unsigned int sysad;
- unsigned short blksize;
- unsigned short blkcnt;
- unsigned int argument;
- unsigned short trnmod;
- unsigned short cmdreg;
- unsigned int rspreg0;
- unsigned int rspreg1;
- unsigned int rspreg2;
- unsigned int rspreg3;
- unsigned int bdata;
- unsigned int prnsts;
- unsigned char hostctl;
- unsigned char pwrcon;
- unsigned char blkgap;
- unsigned char wakcon;
- unsigned short clkcon;
- unsigned char timeoutcon;
- unsigned char swrst;
- unsigned int norintsts; /* errintsts */
- unsigned int norintstsen; /* errintstsen */
- unsigned int norintsigen; /* errintsigen */
- unsigned short acmd12errsts;
- unsigned char res1[2];
- unsigned int capareg;
- unsigned char res2[4];
- unsigned int maxcurr;
- unsigned char res3[0x34];
- unsigned int control2;
- unsigned int control3;
- unsigned char res4[4];
- unsigned int control4;
- unsigned char res5[0x6e];
- unsigned short hcver;
- unsigned char res6[0xFFF00];
-};
+#define SDHCI_CONTROL2 0x80
+#define SDHCI_CONTROL3 0x84
+#define SDHCI_CONTROL4 0x8C
-struct mmc_host {
- struct s5p_mmc *reg;
- unsigned int version; /* SDHCI spec. version */
- unsigned int clock; /* Current clock (MHz) */
- int dev_index;
-};
+#define SDHCI_CTRL2_ENSTAASYNCCLR (1 << 31)
+#define SDHCI_CTRL2_ENCMDCNFMSK (1 << 30)
+#define SDHCI_CTRL2_CDINVRXD3 (1 << 29)
+#define SDHCI_CTRL2_SLCARDOUT (1 << 28)
-int s5p_mmc_init(int dev_index, int bus_width);
+#define SDHCI_CTRL2_FLTCLKSEL_MASK (0xf << 24)
+#define SDHCI_CTRL2_FLTCLKSEL_SHIFT (24)
+#define SDHCI_CTRL2_FLTCLKSEL(_x) ((_x) << 24)
-#endif /* __ASSEMBLY__ */
+#define SDHCI_CTRL2_LVLDAT_MASK (0xff << 16)
+#define SDHCI_CTRL2_LVLDAT_SHIFT (16)
+#define SDHCI_CTRL2_LVLDAT(_x) ((_x) << 16)
+
+#define SDHCI_CTRL2_ENFBCLKTX (1 << 15)
+#define SDHCI_CTRL2_ENFBCLKRX (1 << 14)
+#define SDHCI_CTRL2_SDCDSEL (1 << 13)
+#define SDHCI_CTRL2_SDSIGPC (1 << 12)
+#define SDHCI_CTRL2_ENBUSYCHKTXSTART (1 << 11)
+
+#define SDHCI_CTRL2_DFCNT_MASK(_x) ((_x) << 9)
+#define SDHCI_CTRL2_DFCNT_SHIFT (9)
+
+#define SDHCI_CTRL2_ENCLKOUTHOLD (1 << 8)
+#define SDHCI_CTRL2_RWAITMODE (1 << 7)
+#define SDHCI_CTRL2_DISBUFRD (1 << 6)
+#define SDHCI_CTRL2_SELBASECLK_MASK(_x) ((_x) << 4)
+#define SDHCI_CTRL2_SELBASECLK_SHIFT (4)
+#define SDHCI_CTRL2_PWRSYNC (1 << 3)
+#define SDHCI_CTRL2_ENCLKOUTMSKCON (1 << 1)
+#define SDHCI_CTRL2_HWINITFIN (1 << 0)
+
+#define SDHCI_CTRL3_FCSEL3 (1 << 31)
+#define SDHCI_CTRL3_FCSEL2 (1 << 23)
+#define SDHCI_CTRL3_FCSEL1 (1 << 15)
+#define SDHCI_CTRL3_FCSEL0 (1 << 7)
+
+#define SDHCI_CTRL4_DRIVE_MASK(_x) ((_x) << 16)
+#define SDHCI_CTRL4_DRIVE_SHIFT (16)
+
+int s5p_sdhci_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks);
+
+static inline unsigned int s5p_mmc_init(int index, int bus_width)
+{
+ unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
+ return s5p_sdhci_init(base, 52000000, 400000, index);
+}
#endif
diff --git a/arch/arm/cpu/armv7/tegra2/ap20.h b/arch/arm/include/asm/arch-tegra2/ap20.h
index a4b4d73a40..d222c44233 100644
--- a/arch/arm/cpu/armv7/tegra2/ap20.h
+++ b/arch/arm/include/asm/arch-tegra2/ap20.h
@@ -100,3 +100,10 @@ void tegra2_start(void);
/* This is the main entry into U-Boot, used by the Cortex-A9 */
extern void _start(void);
+
+/**
+ * Works out the SOC type used for clocks settings
+ *
+ * @return SOC type - see TEGRA_SOC...
+ */
+int tegra_get_chip_type(void);
diff --git a/arch/arm/include/asm/arch-tegra2/apb_misc.h b/arch/arm/include/asm/arch-tegra2/apb_misc.h
new file mode 100644
index 0000000000..eb69d18d01
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/apb_misc.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright (c) 2012 The Chromium OS Authors.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _GP_PADCTRL_H_
+#define _GP_PADCTRL_H_
+
+/* APB_MISC_PP registers */
+struct apb_misc_pp_ctlr {
+ u32 reserved0[2];
+ u32 strapping_opt_a;/* 0x08: APB_MISC_PP_STRAPPING_OPT_A */
+};
+
+/* bit fields definitions for APB_MISC_PP_STRAPPING_OPT_A register */
+#define RAM_CODE_SHIFT 4
+#define RAM_CODE_MASK (0xf << RAM_CODE_SHIFT)
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra2/clk_rst.h b/arch/arm/include/asm/arch-tegra2/clk_rst.h
index 415e420012..8c3be91514 100644
--- a/arch/arm/include/asm/arch-tegra2/clk_rst.h
+++ b/arch/arm/include/asm/arch-tegra2/clk_rst.h
@@ -117,6 +117,7 @@ struct clk_rst_ctlr {
#define PLL_CPCON_MASK (15U << PLL_CPCON_SHIFT)
#define PLL_LFCON_SHIFT 4
+#define PLL_LFCON_MASK (15U << PLL_LFCON_SHIFT)
#define PLLU_VCO_FREQ_SHIFT 20
#define PLLU_VCO_FREQ_MASK (1U << PLLU_VCO_FREQ_SHIFT)
@@ -124,6 +125,8 @@ struct clk_rst_ctlr {
/* CLK_RST_CONTROLLER_OSC_CTRL_0 */
#define OSC_FREQ_SHIFT 30
#define OSC_FREQ_MASK (3U << OSC_FREQ_SHIFT)
+#define OSC_XOBP_SHIFT 1
+#define OSC_XOBP_MASK (1U << OSC_XOBP_SHIFT)
/*
* CLK_RST_CONTROLLER_CLK_SOURCE_x_OUT_0 - the mask here is normally 8 bits
diff --git a/arch/arm/include/asm/arch-tegra2/clock.h b/arch/arm/include/asm/arch-tegra2/clock.h
index 6b12c76e8d..1d3ae38644 100644
--- a/arch/arm/include/asm/arch-tegra2/clock.h
+++ b/arch/arm/include/asm/arch-tegra2/clock.h
@@ -210,6 +210,21 @@ enum clock_osc_freq clock_get_osc_freq(void);
unsigned long clock_start_pll(enum clock_id id, u32 divm, u32 divn,
u32 divp, u32 cpcon, u32 lfcon);
+/**
+ * Read low-level parameters of a PLL.
+ *
+ * @param id clock id to read (note: USB is not supported)
+ * @param divm returns input divider
+ * @param divn returns feedback divider
+ * @param divp returns post divider 2^n
+ * @param cpcon returns charge pump setup control
+ * @param lfcon returns loop filter setup control
+ *
+ * @returns 0 if ok, -1 on error (invalid clock id)
+ */
+int clock_ll_read_pll(enum clock_id clkid, u32 *divm, u32 *divn,
+ u32 *divp, u32 *cpcon, u32 *lfcon);
+
/*
* Enable a clock
*
@@ -368,6 +383,13 @@ void clock_ll_start_uart(enum periph_id periph_id);
*/
enum periph_id clock_decode_periph_id(const void *blob, int node);
+/**
+ * Checks if the oscillator bypass is enabled (XOBP bit)
+ *
+ * @return 1 if bypass is enabled, 0 if not
+ */
+int clock_get_osc_bypass(void);
+
/*
* Checks that clocks are valid and prints a warning if not
*
diff --git a/arch/arm/include/asm/arch-tegra2/emc.h b/arch/arm/include/asm/arch-tegra2/emc.h
new file mode 100644
index 0000000000..deb3d36ed2
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/emc.h
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2010,2011 NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _ARCH_EMC_H_
+#define _ARCH_EMC_H_
+
+#include <asm/types.h>
+
+#define TEGRA_EMC_NUM_REGS 46
+
+/* EMC Registers */
+struct emc_ctlr {
+ u32 cfg; /* 0x00: EMC_CFG */
+ u32 reserved0[3]; /* 0x04 ~ 0x0C */
+ u32 adr_cfg; /* 0x10: EMC_ADR_CFG */
+ u32 adr_cfg1; /* 0x14: EMC_ADR_CFG_1 */
+ u32 reserved1[2]; /* 0x18 ~ 0x18 */
+ u32 refresh_ctrl; /* 0x20: EMC_REFCTRL */
+ u32 pin; /* 0x24: EMC_PIN */
+ u32 timing_ctrl; /* 0x28: EMC_TIMING_CONTROL */
+ u32 rc; /* 0x2C: EMC_RC */
+ u32 rfc; /* 0x30: EMC_RFC */
+ u32 ras; /* 0x34: EMC_RAS */
+ u32 rp; /* 0x38: EMC_RP */
+ u32 r2w; /* 0x3C: EMC_R2W */
+ u32 w2r; /* 0x40: EMC_W2R */
+ u32 r2p; /* 0x44: EMC_R2P */
+ u32 w2p; /* 0x48: EMC_W2P */
+ u32 rd_rcd; /* 0x4C: EMC_RD_RCD */
+ u32 wd_rcd; /* 0x50: EMC_WD_RCD */
+ u32 rrd; /* 0x54: EMC_RRD */
+ u32 rext; /* 0x58: EMC_REXT */
+ u32 wdv; /* 0x5C: EMC_WDV */
+ u32 quse; /* 0x60: EMC_QUSE */
+ u32 qrst; /* 0x64: EMC_QRST */
+ u32 qsafe; /* 0x68: EMC_QSAFE */
+ u32 rdv; /* 0x6C: EMC_RDV */
+ u32 refresh; /* 0x70: EMC_REFRESH */
+ u32 burst_refresh_num; /* 0x74: EMC_BURST_REFRESH_NUM */
+ u32 pdex2wr; /* 0x78: EMC_PDEX2WR */
+ u32 pdex2rd; /* 0x7c: EMC_PDEX2RD */
+ u32 pchg2pden; /* 0x80: EMC_PCHG2PDEN */
+ u32 act2pden; /* 0x84: EMC_ACT2PDEN */
+ u32 ar2pden; /* 0x88: EMC_AR2PDEN */
+ u32 rw2pden; /* 0x8C: EMC_RW2PDEN */
+ u32 txsr; /* 0x90: EMC_TXSR */
+ u32 tcke; /* 0x94: EMC_TCKE */
+ u32 tfaw; /* 0x98: EMC_TFAW */
+ u32 trpab; /* 0x9C: EMC_TRPAB */
+ u32 tclkstable; /* 0xA0: EMC_TCLKSTABLE */
+ u32 tclkstop; /* 0xA4: EMC_TCLKSTOP */
+ u32 trefbw; /* 0xA8: EMC_TREFBW */
+ u32 quse_extra; /* 0xAC: EMC_QUSE_EXTRA */
+ u32 odt_write; /* 0xB0: EMC_ODT_WRITE */
+ u32 odt_read; /* 0xB4: EMC_ODT_READ */
+ u32 reserved2[5]; /* 0xB8 ~ 0xC8 */
+ u32 mrs; /* 0xCC: EMC_MRS */
+ u32 emrs; /* 0xD0: EMC_EMRS */
+ u32 ref; /* 0xD4: EMC_REF */
+ u32 pre; /* 0xD8: EMC_PRE */
+ u32 nop; /* 0xDC: EMC_NOP */
+ u32 self_ref; /* 0xE0: EMC_SELF_REF */
+ u32 dpd; /* 0xE4: EMC_DPD */
+ u32 mrw; /* 0xE8: EMC_MRW */
+ u32 mrr; /* 0xEC: EMC_MRR */
+ u32 reserved3; /* 0xF0: */
+ u32 fbio_cfg1; /* 0xF4: EMC_FBIO_CFG1 */
+ u32 fbio_dqsib_dly; /* 0xF8: EMC_FBIO_DQSIB_DLY */
+ u32 fbio_dqsib_dly_msb; /* 0xFC: EMC_FBIO_DQSIB_DLY_MSG */
+ u32 fbio_spare; /* 0x100: SBIO_SPARE */
+ /* There are more registers ... */
+};
+
+/**
+ * Set up the EMC for the given rate. The timing parameters are retrieved
+ * from the device tree "nvidia,tegra20-emc" node and its
+ * "nvidia,tegra20-emc-table" sub-nodes.
+ *
+ * @param blob Device tree blob
+ * @param rate Clock speed of memory controller in Hz (=2x memory bus rate)
+ * @return 0 if ok, else -ve error code (look in emc.c to decode it)
+ */
+int tegra_set_emc(const void *blob, unsigned rate);
+
+/**
+ * Get a pointer to the EMC controller from the device tree.
+ *
+ * @param blob Device tree blob
+ * @return pointer to EMC controller
+ */
+struct emc_ctlr *emc_get_controller(const void *blob);
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra2/flow.h b/arch/arm/include/asm/arch-tegra2/flow.h
new file mode 100644
index 0000000000..cce6cbf7d0
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/flow.h
@@ -0,0 +1,36 @@
+/*
+ * (C) Copyright 2010, 2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _FLOW_H_
+#define _FLOW_H_
+
+struct flow_ctlr {
+ u32 halt_cpu_events;
+ u32 halt_cop_events;
+ u32 cpu_csr;
+ u32 cop_csr;
+ u32 halt_cpu1_events;
+ u32 cpu1_csr;
+};
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra2/fuse.h b/arch/arm/include/asm/arch-tegra2/fuse.h
new file mode 100644
index 0000000000..b7e3808a4f
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/fuse.h
@@ -0,0 +1,39 @@
+/*
+ * (C) Copyright 2010,2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _FUSE_H_
+#define _FUSE_H_
+
+/* FUSE registers */
+struct fuse_regs {
+ u32 reserved0[64]; /* 0x00 - 0xFC: */
+ u32 production_mode; /* 0x100: FUSE_PRODUCTION_MODE */
+ u32 reserved1[3]; /* 0x104 - 0x10c: */
+ u32 sku_info; /* 0x110 */
+ u32 reserved2[13]; /* 0x114 - 0x144: */
+ u32 fa; /* 0x148: FUSE_FA */
+ u32 reserved3[21]; /* 0x14C - 0x19C: */
+ u32 security_mode; /* 0x1A0: FUSE_SECURITY_MODE */
+};
+
+#endif /* ifndef _FUSE_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/gp_padctrl.h b/arch/arm/include/asm/arch-tegra2/gp_padctrl.h
new file mode 100644
index 0000000000..1755ab2eaa
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/gp_padctrl.h
@@ -0,0 +1,73 @@
+/*
+ * (C) Copyright 2010,2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _GP_PADCTRL_H_
+#define _GP_PADCTRL_H_
+
+/* APB_MISC_GP and padctrl registers */
+struct apb_misc_gp_ctlr {
+ u32 modereg; /* 0x00: APB_MISC_GP_MODEREG */
+ u32 hidrev; /* 0x04: APB_MISC_GP_HIDREV */
+ u32 reserved0[22]; /* 0x08 - 0x5C: */
+ u32 emu_revid; /* 0x60: APB_MISC_GP_EMU_REVID */
+ u32 xactor_scratch; /* 0x64: APB_MISC_GP_XACTOR_SCRATCH */
+ u32 aocfg1; /* 0x68: APB_MISC_GP_AOCFG1PADCTRL */
+ u32 aocfg2; /* 0x6c: APB_MISC_GP_AOCFG2PADCTRL */
+ u32 atcfg1; /* 0x70: APB_MISC_GP_ATCFG1PADCTRL */
+ u32 atcfg2; /* 0x74: APB_MISC_GP_ATCFG2PADCTRL */
+ u32 cdevcfg1; /* 0x78: APB_MISC_GP_CDEV1CFGPADCTRL */
+ u32 cdevcfg2; /* 0x7C: APB_MISC_GP_CDEV2CFGPADCTRL */
+ u32 csuscfg; /* 0x80: APB_MISC_GP_CSUSCFGPADCTRL */
+ u32 dap1cfg; /* 0x84: APB_MISC_GP_DAP1CFGPADCTRL */
+ u32 dap2cfg; /* 0x88: APB_MISC_GP_DAP2CFGPADCTRL */
+ u32 dap3cfg; /* 0x8C: APB_MISC_GP_DAP3CFGPADCTRL */
+ u32 dap4cfg; /* 0x90: APB_MISC_GP_DAP4CFGPADCTRL */
+ u32 dbgcfg; /* 0x94: APB_MISC_GP_DBGCFGPADCTRL */
+ u32 lcdcfg1; /* 0x98: APB_MISC_GP_LCDCFG1PADCTRL */
+ u32 lcdcfg2; /* 0x9C: APB_MISC_GP_LCDCFG2PADCTRL */
+ u32 sdmmc2_cfg; /* 0xA0: APB_MISC_GP_SDMMC2CFGPADCTRL */
+ u32 sdmmc3_cfg; /* 0xA4: APB_MISC_GP_SDMMC3CFGPADCTRL */
+ u32 spicfg; /* 0xA8: APB_MISC_GP_SPICFGPADCTRL */
+ u32 uaacfg; /* 0xAC: APB_MISC_GP_UAACFGPADCTRL */
+ u32 uabcfg; /* 0xB0: APB_MISC_GP_UABCFGPADCTRL */
+ u32 uart2cfg; /* 0xB4: APB_MISC_GP_UART2CFGPADCTRL */
+ u32 uart3cfg; /* 0xB8: APB_MISC_GP_UART3CFGPADCTRL */
+ u32 vicfg1; /* 0xBC: APB_MISC_GP_VICFG1PADCTRL */
+ u32 vicfg2; /* 0xC0: APB_MISC_GP_VICFG2PADCTRL */
+ u32 xm2cfga; /* 0xC4: APB_MISC_GP_XM2CFGAPADCTRL */
+ u32 xm2cfgc; /* 0xC8: APB_MISC_GP_XM2CFGCPADCTRL */
+ u32 xm2cfgd; /* 0xCC: APB_MISC_GP_XM2CFGDPADCTRL */
+ u32 xm2clkcfg; /* 0xD0: APB_MISC_GP_XM2CLKCFGPADCTRL */
+ u32 memcomp; /* 0xD4: APB_MISC_GP_MEMCOMPPADCTRL */
+};
+
+/* bit fields definitions for APB_MISC_GP_HIDREV register */
+#define HIDREV_CHIPID_SHIFT 8
+#define HIDREV_CHIPID_MASK (0xff << HIDREV_CHIPID_SHIFT)
+#define HIDREV_MAJORPREV_SHIFT 4
+#define HIDREV_MAJORPREV_MASK (0xf << HIDREV_MAJORPREV_SHIFT)
+
+/* CHIPID field returned from APB_MISC_GP_HIDREV register */
+#define CHIPID_TEGRA2 0x20
+
+#endif
diff --git a/arch/arm/include/asm/arch-tegra2/pmu.h b/arch/arm/include/asm/arch-tegra2/pmu.h
new file mode 100644
index 0000000000..390815fc24
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/pmu.h
@@ -0,0 +1,30 @@
+/*
+ * (C) Copyright 2010,2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _ARCH_PMU_H_
+#define _ARCH_PMU_H_
+
+/* Set core and CPU voltages to nominal levels */
+int pmu_set_nominal(void);
+
+#endif /* _ARCH_PMU_H_ */
diff --git a/arch/arm/include/asm/arch-tegra2/sdram_param.h b/arch/arm/include/asm/arch-tegra2/sdram_param.h
new file mode 100644
index 0000000000..6c427d0841
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/sdram_param.h
@@ -0,0 +1,148 @@
+/*
+ * (C) Copyright 2010, 2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _SDRAM_PARAM_H_
+#define _SDRAM_PARAM_H_
+
+/*
+ * Defines the number of 32-bit words provided in each set of SDRAM parameters
+ * for arbitration configuration data.
+ */
+#define BCT_SDRAM_ARB_CONFIG_WORDS 27
+
+enum memory_type {
+ MEMORY_TYPE_NONE = 0,
+ MEMORY_TYPE_DDR,
+ MEMORY_TYPE_LPDDR,
+ MEMORY_TYPE_DDR2,
+ MEMORY_TYPE_LPDDR2,
+ MEMORY_TYPE_NUM,
+ MEMORY_TYPE_FORCE32 = 0x7FFFFFFF
+};
+
+/* Defines the SDRAM parameter structure */
+struct sdram_params {
+ enum memory_type memory_type;
+ u32 pllm_charge_pump_setup_control;
+ u32 pllm_loop_filter_setup_control;
+ u32 pllm_input_divider;
+ u32 pllm_feedback_divider;
+ u32 pllm_post_divider;
+ u32 pllm_stable_time;
+ u32 emc_clock_divider;
+ u32 emc_auto_cal_interval;
+ u32 emc_auto_cal_config;
+ u32 emc_auto_cal_wait;
+ u32 emc_pin_program_wait;
+ u32 emc_rc;
+ u32 emc_rfc;
+ u32 emc_ras;
+ u32 emc_rp;
+ u32 emc_r2w;
+ u32 emc_w2r;
+ u32 emc_r2p;
+ u32 emc_w2p;
+ u32 emc_rd_rcd;
+ u32 emc_wr_rcd;
+ u32 emc_rrd;
+ u32 emc_rext;
+ u32 emc_wdv;
+ u32 emc_quse;
+ u32 emc_qrst;
+ u32 emc_qsafe;
+ u32 emc_rdv;
+ u32 emc_refresh;
+ u32 emc_burst_refresh_num;
+ u32 emc_pdex2wr;
+ u32 emc_pdex2rd;
+ u32 emc_pchg2pden;
+ u32 emc_act2pden;
+ u32 emc_ar2pden;
+ u32 emc_rw2pden;
+ u32 emc_txsr;
+ u32 emc_tcke;
+ u32 emc_tfaw;
+ u32 emc_trpab;
+ u32 emc_tclkstable;
+ u32 emc_tclkstop;
+ u32 emc_trefbw;
+ u32 emc_quseextra;
+ u32 emc_fbioc_fg1;
+ u32 emc_fbio_dqsib_dly;
+ u32 emc_fbio_dqsib_dly_msb;
+ u32 emc_fbio_quse_dly;
+ u32 emc_fbio_quse_dly_msb;
+ u32 emc_fbio_cfg5;
+ u32 emc_fbio_cfg6;
+ u32 emc_fbio_spare;
+ u32 emc_mrs;
+ u32 emc_emrs;
+ u32 emc_mrw1;
+ u32 emc_mrw2;
+ u32 emc_mrw3;
+ u32 emc_mrw_reset_command;
+ u32 emc_mrw_reset_init_wait;
+ u32 emc_adr_cfg;
+ u32 emc_adr_cfg1;
+ u32 emc_emem_cfg;
+ u32 emc_low_latency_config;
+ u32 emc_cfg;
+ u32 emc_cfg2;
+ u32 emc_dbg;
+ u32 ahb_arbitration_xbar_ctrl;
+ u32 emc_cfg_dig_dll;
+ u32 emc_dll_xform_dqs;
+ u32 emc_dll_xform_quse;
+ u32 warm_boot_wait;
+ u32 emc_ctt_term_ctrl;
+ u32 emc_odt_write;
+ u32 emc_odt_read;
+ u32 emc_zcal_ref_cnt;
+ u32 emc_zcal_wait_cnt;
+ u32 emc_zcal_mrw_cmd;
+ u32 emc_mrs_reset_dll;
+ u32 emc_mrw_zq_init_dev0;
+ u32 emc_mrw_zq_init_dev1;
+ u32 emc_mrw_zq_init_wait;
+ u32 emc_mrs_reset_dll_wait;
+ u32 emc_emrs_emr2;
+ u32 emc_emrs_emr3;
+ u32 emc_emrs_ddr2_dll_enable;
+ u32 emc_mrs_ddr2_dll_reset;
+ u32 emc_emrs_ddr2_ocd_calib;
+ u32 emc_edr2_wait;
+ u32 emc_cfg_clktrim0;
+ u32 emc_cfg_clktrim1;
+ u32 emc_cfg_clktrim2;
+ u32 pmc_ddr_pwr;
+ u32 apb_misc_gp_xm2cfga_padctrl;
+ u32 apb_misc_gp_xm2cfgc_padctrl;
+ u32 apb_misc_gp_xm2cfgc_padctrl2;
+ u32 apb_misc_gp_xm2cfgd_padctrl;
+ u32 apb_misc_gp_xm2cfgd_padctrl2;
+ u32 apb_misc_gp_xm2clkcfg_padctrl;
+ u32 apb_misc_gp_xm2comp_padctrl;
+ u32 apb_misc_gp_xm2vttgen_padctrl;
+ u32 arbitration_config[BCT_SDRAM_ARB_CONFIG_WORDS];
+};
+#endif
diff --git a/arch/arm/include/asm/arch-tegra2/tegra2.h b/arch/arm/include/asm/arch-tegra2/tegra2.h
index ca1881e3a2..d4ada10ea8 100644
--- a/arch/arm/include/asm/arch-tegra2/tegra2.h
+++ b/arch/arm/include/asm/arch-tegra2/tegra2.h
@@ -33,6 +33,7 @@
#define NV_PA_GPIO_BASE 0x6000D000
#define NV_PA_EVP_BASE 0x6000F000
#define NV_PA_APB_MISC_BASE 0x70000000
+#define TEGRA2_APB_MISC_GP_BASE (NV_PA_APB_MISC_BASE + 0x0800)
#define NV_PA_APB_UARTA_BASE (NV_PA_APB_MISC_BASE + 0x6000)
#define NV_PA_APB_UARTB_BASE (NV_PA_APB_MISC_BASE + 0x6040)
#define NV_PA_APB_UARTC_BASE (NV_PA_APB_MISC_BASE + 0x6200)
@@ -40,6 +41,7 @@
#define NV_PA_APB_UARTE_BASE (NV_PA_APB_MISC_BASE + 0x6400)
#define TEGRA2_SPI_BASE (NV_PA_APB_MISC_BASE + 0xC380)
#define TEGRA2_PMC_BASE (NV_PA_APB_MISC_BASE + 0xE400)
+#define TEGRA2_FUSE_BASE (NV_PA_APB_MISC_BASE + 0xF800)
#define NV_PA_CSITE_BASE 0x70040000
#define TEGRA_USB1_BASE 0xC5000000
#define TEGRA_USB3_BASE 0xC5008000
@@ -54,6 +56,29 @@
struct timerus {
unsigned int cntr_1us;
};
+
+/* Address at which WB code runs, it must not overlap Bootrom's IRAM usage */
+#define AP20_WB_RUN_ADDRESS 0x40020000
+
+/* These are the available SKUs (product types) for Tegra */
+enum {
+ SKU_ID_T20 = 0x8,
+ SKU_ID_T25SE = 0x14,
+ SKU_ID_AP25 = 0x17,
+ SKU_ID_T25 = 0x18,
+ SKU_ID_AP25E = 0x1b,
+ SKU_ID_T25E = 0x1c,
+};
+
+/* These are the SOC categories that affect clocking */
+enum {
+ TEGRA_SOC_T20,
+ TEGRA_SOC_T25,
+
+ TEGRA_SOC_COUNT,
+ TEGRA_SOC_UNKNOWN = -1,
+};
+
#else /* __ASSEMBLY__ */
#define PRM_RSTCTRL TEGRA2_PMC_BASE
#endif
diff --git a/arch/arm/include/asm/arch-tegra2/tegra_i2c.h b/arch/arm/include/asm/arch-tegra2/tegra_i2c.h
index 0a7d99c585..cfb136c466 100644
--- a/arch/arm/include/asm/arch-tegra2/tegra_i2c.h
+++ b/arch/arm/include/asm/arch-tegra2/tegra_i2c.h
@@ -154,4 +154,11 @@ struct i2c_ctlr {
#define I2C_INT_ARBITRATION_LOST_SHIFT 2
#define I2C_INT_ARBITRATION_LOST_MASK (1 << I2C_INT_ARBITRATION_LOST_SHIFT)
+/**
+ * Returns the bus number of the DVC controller
+ *
+ * @return number of bus, or -1 if there is no DVC active
+ */
+int tegra_i2c_get_dvc_bus_num(void);
+
#endif
diff --git a/arch/arm/include/asm/arch-tegra2/warmboot.h b/arch/arm/include/asm/arch-tegra2/warmboot.h
new file mode 100644
index 0000000000..99ac2e7d23
--- /dev/null
+++ b/arch/arm/include/asm/arch-tegra2/warmboot.h
@@ -0,0 +1,150 @@
+/*
+ * (C) Copyright 2010, 2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _WARM_BOOT_H_
+#define _WARM_BOOT_H_
+
+#define STRAP_OPT_A_RAM_CODE_SHIFT 4
+#define STRAP_OPT_A_RAM_CODE_MASK (0xf << STRAP_OPT_A_RAM_CODE_SHIFT)
+
+/* Defines the supported operating modes */
+enum fuse_operating_mode {
+ MODE_PRODUCTION = 3,
+ MODE_UNDEFINED,
+};
+
+/* Defines the CMAC-AES-128 hash length in 32 bit words. (128 bits = 4 words) */
+enum {
+ HASH_LENGTH = 4
+};
+
+/* Defines the storage for a hash value (128 bits) */
+struct hash {
+ u32 hash[HASH_LENGTH];
+};
+
+/*
+ * Defines the code header information for the boot rom.
+ *
+ * The code immediately follows the code header.
+ *
+ * Note that the code header needs to be 16 bytes aligned to preserve
+ * the alignment of relevant data for hash and decryption computations without
+ * requiring extra copies to temporary memory areas.
+ */
+struct wb_header {
+ u32 length_insecure; /* length of the code header */
+ u32 reserved[3];
+ struct hash hash; /* hash of header+code, starts next field*/
+ struct hash random_aes_block; /* a data block to aid security. */
+ u32 length_secure; /* length of the code header */
+ u32 destination; /* destination address to put the wb code */
+ u32 entry_point; /* execution address of the wb code */
+ u32 code_length; /* length of the code */
+};
+
+/*
+ * The warm boot code needs direct access to these registers since it runs in
+ * SRAM and cannot call other U-Boot code.
+ */
+union osc_ctrl_reg {
+ struct {
+ u32 xoe:1;
+ u32 xobp:1;
+ u32 reserved0:2;
+ u32 xofs:6;
+ u32 reserved1:2;
+ u32 xods:5;
+ u32 reserved2:3;
+ u32 oscfi_spare:8;
+ u32 pll_ref_div:2;
+ u32 osc_freq:2;
+ };
+ u32 word;
+};
+
+union pllx_base_reg {
+ struct {
+ u32 divm:5;
+ u32 reserved0:3;
+ u32 divn:10;
+ u32 reserved1:2;
+ u32 divp:3;
+ u32 reserved2:4;
+ u32 lock:1;
+ u32 reserved3:1;
+ u32 ref_dis:1;
+ u32 enable:1;
+ u32 bypass:1;
+ };
+ u32 word;
+};
+
+union pllx_misc_reg {
+ struct {
+ u32 vcocon:4;
+ u32 lfcon:4;
+ u32 cpcon:4;
+ u32 lock_sel:6;
+ u32 reserved0:1;
+ u32 lock_enable:1;
+ u32 reserved1:1;
+ u32 dccon:1;
+ u32 pts:2;
+ u32 reserved2:6;
+ u32 out1_div_byp:1;
+ u32 out1_inv_clk:1;
+ };
+ u32 word;
+};
+
+/*
+ * TODO: This register is not documented in the TRM yet. We could move this
+ * into the EMC and give it a proper interface, but not while it is
+ * undocumented.
+ */
+union scratch3_reg {
+ struct {
+ u32 pllx_base_divm:5;
+ u32 pllx_base_divn:10;
+ u32 pllx_base_divp:3;
+ u32 pllx_misc_lfcon:4;
+ u32 pllx_misc_cpcon:4;
+ };
+ u32 word;
+};
+
+
+/**
+ * Save warmboot memory settings for a later resume
+ *
+ * @return 0 if ok, -1 on error
+ */
+int warmboot_save_sdram_params(void);
+
+int warmboot_prepare_code(u32 seg_address, u32 seg_length);
+int sign_data_block(u8 *source, u32 length, u8 *signature);
+void wb_start(void); /* Start of WB assembly code */
+void wb_end(void); /* End of WB assembly code */
+
+#endif
diff --git a/arch/arm/include/asm/dma-mapping.h b/arch/arm/include/asm/dma-mapping.h
index 5bbb0a0464..fb3a013c20 100644
--- a/arch/arm/include/asm/dma-mapping.h
+++ b/arch/arm/include/asm/dma-mapping.h
@@ -31,6 +31,8 @@ enum dma_data_direction {
};
static void *dma_alloc_coherent(size_t len, unsigned long *handle)
+__attribute__((unused));
+static void *dma_alloc_coherent(size_t len, unsigned long *handle)
{
*handle = (unsigned long)malloc(len);
return (void *)*handle;
diff --git a/arch/arm/include/asm/emif.h b/arch/arm/include/asm/emif.h
index e5c7d2cabe..f1e3ad212e 100644
--- a/arch/arm/include/asm/emif.h
+++ b/arch/arm/include/asm/emif.h
@@ -226,8 +226,8 @@
#define EMIF_REG_CS_TIM_MASK (0xf << 0)
/* PWR_MGMT_CTRL_SHDW */
-#define EMIF_REG_PD_TIM_SHDW_SHIFT 8
-#define EMIF_REG_PD_TIM_SHDW_MASK (0xf << 8)
+#define EMIF_REG_PD_TIM_SHDW_SHIFT 12
+#define EMIF_REG_PD_TIM_SHDW_MASK (0xf << 12)
#define EMIF_REG_SR_TIM_SHDW_SHIFT 4
#define EMIF_REG_SR_TIM_SHDW_MASK (0xf << 4)
#define EMIF_REG_CS_TIM_SHDW_SHIFT 0
@@ -530,6 +530,8 @@
(DMM_SDRC_INTL_NONE << EMIF_SDRC_INTL_SHIFT)|\
(0xFF << EMIF_SYS_ADDR_SHIFT))
+#define EMIF_EXT_PHY_CTRL_TIMING_REG 0x5
+#define EMIF_EXT_PHY_CTRL_CONST_REG 0x13
/* Reg mapping structure */
struct emif_reg_struct {
@@ -580,10 +582,64 @@ struct emif_reg_struct {
u32 emif_zq_config;
u32 emif_temp_alert_config;
u32 emif_l3_err_log;
- u32 padding6[4];
+ u32 emif_rd_wr_lvl_rmp_win;
+ u32 emif_rd_wr_lvl_rmp_ctl;
+ u32 emif_rd_wr_lvl_ctl;
+ u32 padding6[1];
u32 emif_ddr_phy_ctrl_1;
u32 emif_ddr_phy_ctrl_1_shdw;
u32 emif_ddr_phy_ctrl_2;
+ u32 padding7[12];
+ u32 emif_rd_wr_exec_thresh;
+ u32 padding8[55];
+ u32 emif_ddr_ext_phy_ctrl_1;
+ u32 emif_ddr_ext_phy_ctrl_1_shdw;
+ u32 emif_ddr_ext_phy_ctrl_2;
+ u32 emif_ddr_ext_phy_ctrl_2_shdw;
+ u32 emif_ddr_ext_phy_ctrl_3;
+ u32 emif_ddr_ext_phy_ctrl_3_shdw;
+ u32 emif_ddr_ext_phy_ctrl_4;
+ u32 emif_ddr_ext_phy_ctrl_4_shdw;
+ u32 emif_ddr_ext_phy_ctrl_5;
+ u32 emif_ddr_ext_phy_ctrl_5_shdw;
+ u32 emif_ddr_ext_phy_ctrl_6;
+ u32 emif_ddr_ext_phy_ctrl_6_shdw;
+ u32 emif_ddr_ext_phy_ctrl_7;
+ u32 emif_ddr_ext_phy_ctrl_7_shdw;
+ u32 emif_ddr_ext_phy_ctrl_8;
+ u32 emif_ddr_ext_phy_ctrl_8_shdw;
+ u32 emif_ddr_ext_phy_ctrl_9;
+ u32 emif_ddr_ext_phy_ctrl_9_shdw;
+ u32 emif_ddr_ext_phy_ctrl_10;
+ u32 emif_ddr_ext_phy_ctrl_10_shdw;
+ u32 emif_ddr_ext_phy_ctrl_11;
+ u32 emif_ddr_ext_phy_ctrl_11_shdw;
+ u32 emif_ddr_ext_phy_ctrl_12;
+ u32 emif_ddr_ext_phy_ctrl_12_shdw;
+ u32 emif_ddr_ext_phy_ctrl_13;
+ u32 emif_ddr_ext_phy_ctrl_13_shdw;
+ u32 emif_ddr_ext_phy_ctrl_14;
+ u32 emif_ddr_ext_phy_ctrl_14_shdw;
+ u32 emif_ddr_ext_phy_ctrl_15;
+ u32 emif_ddr_ext_phy_ctrl_15_shdw;
+ u32 emif_ddr_ext_phy_ctrl_16;
+ u32 emif_ddr_ext_phy_ctrl_16_shdw;
+ u32 emif_ddr_ext_phy_ctrl_17;
+ u32 emif_ddr_ext_phy_ctrl_17_shdw;
+ u32 emif_ddr_ext_phy_ctrl_18;
+ u32 emif_ddr_ext_phy_ctrl_18_shdw;
+ u32 emif_ddr_ext_phy_ctrl_19;
+ u32 emif_ddr_ext_phy_ctrl_19_shdw;
+ u32 emif_ddr_ext_phy_ctrl_20;
+ u32 emif_ddr_ext_phy_ctrl_20_shdw;
+ u32 emif_ddr_ext_phy_ctrl_21;
+ u32 emif_ddr_ext_phy_ctrl_21_shdw;
+ u32 emif_ddr_ext_phy_ctrl_22;
+ u32 emif_ddr_ext_phy_ctrl_22_shdw;
+ u32 emif_ddr_ext_phy_ctrl_23;
+ u32 emif_ddr_ext_phy_ctrl_23_shdw;
+ u32 emif_ddr_ext_phy_ctrl_24;
+ u32 emif_ddr_ext_phy_ctrl_24_shdw;
};
struct dmm_lisa_map_regs {
@@ -593,6 +649,8 @@ struct dmm_lisa_map_regs {
u32 dmm_lisa_map_3;
};
+extern const u32 ext_phy_ctrl_const_base[EMIF_EXT_PHY_CTRL_CONST_REG];
+
#define CS0 0
#define CS1 1
/* The maximum frequency at which the LPDDR2 interface can operate in Hz*/
@@ -748,7 +806,11 @@ struct dmm_lisa_map_regs {
#define DPD_ENABLE 1
/* Maximum delay before Low Power Modes */
+#ifndef CONFIG_OMAP54XX
#define REG_CS_TIM 0xF
+#else
+#define REG_CS_TIM 0x0
+#endif
#define REG_SR_TIM 0xF
#define REG_PD_TIM 0xF
@@ -776,7 +838,7 @@ struct dmm_lisa_map_regs {
/* EMIF_L3_CONFIG register value */
#define EMIF_L3_CONFIG_VAL_SYS_10_LL_0 0x0A0000FF
#define EMIF_L3_CONFIG_VAL_SYS_10_MPU_3_LL_0 0x0A300000
-#define EMIF_L3_CONFIG_VAL_SYS_10_MPU_5_LL_0 0x0A300000
+#define EMIF_L3_CONFIG_VAL_SYS_10_MPU_5_LL_0 0x0A500000
/*
* Value of bits 12:31 of DDR_PHY_CTRL_1 register:
@@ -798,6 +860,7 @@ struct dmm_lisa_map_regs {
* : So nWR is don't care
*/
#define MR1_BL_8_BT_SEQ_WRAP_EN_NWR_3 0x23
+#define MR1_BL_8_BT_SEQ_WRAP_EN_NWR_8 0xc3
/* MR2 */
#define MR2_RL3_WL1 1
@@ -1005,6 +1068,11 @@ struct emif_regs {
u32 temp_alert_config;
u32 emif_ddr_phy_ctlr_1_init;
u32 emif_ddr_phy_ctlr_1;
+ u32 emif_ddr_ext_phy_ctrl_1;
+ u32 emif_ddr_ext_phy_ctrl_2;
+ u32 emif_ddr_ext_phy_ctrl_3;
+ u32 emif_ddr_ext_phy_ctrl_4;
+ u32 emif_ddr_ext_phy_ctrl_5;
};
/* assert macros */
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index 1fbc531a08..5f5f8d038f 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -75,42 +75,42 @@ static inline phys_addr_t virt_to_phys(void * vaddr)
#define __arch_putw(v,a) (*(volatile unsigned short *)(a) = (v))
#define __arch_putl(v,a) (*(volatile unsigned int *)(a) = (v))
-extern inline void __raw_writesb(unsigned int addr, const void *data, int bytelen)
+static inline void __raw_writesb(unsigned int addr, const void *data, int bytelen)
{
uint8_t *buf = (uint8_t *)data;
while(bytelen--)
__arch_putb(*buf++, addr);
}
-extern inline void __raw_writesw(unsigned int addr, const void *data, int wordlen)
+static inline void __raw_writesw(unsigned int addr, const void *data, int wordlen)
{
uint16_t *buf = (uint16_t *)data;
while(wordlen--)
__arch_putw(*buf++, addr);
}
-extern inline void __raw_writesl(unsigned int addr, const void *data, int longlen)
+static inline void __raw_writesl(unsigned int addr, const void *data, int longlen)
{
uint32_t *buf = (uint32_t *)data;
while(longlen--)
__arch_putl(*buf++, addr);
}
-extern inline void __raw_readsb(unsigned int addr, void *data, int bytelen)
+static inline void __raw_readsb(unsigned int addr, void *data, int bytelen)
{
uint8_t *buf = (uint8_t *)data;
while(bytelen--)
*buf++ = __arch_getb(addr);
}
-extern inline void __raw_readsw(unsigned int addr, void *data, int wordlen)
+static inline void __raw_readsw(unsigned int addr, void *data, int wordlen)
{
uint16_t *buf = (uint16_t *)data;
while(wordlen--)
*buf++ = __arch_getw(addr);
}
-extern inline void __raw_readsl(unsigned int addr, void *data, int longlen)
+static inline void __raw_readsl(unsigned int addr, void *data, int longlen)
{
uint32_t *buf = (uint32_t *)data;
while(longlen--)
diff --git a/arch/arm/include/asm/linkage.h b/arch/arm/include/asm/linkage.h
new file mode 100644
index 0000000000..dbe4b4e31a
--- /dev/null
+++ b/arch/arm/include/asm/linkage.h
@@ -0,0 +1,7 @@
+#ifndef __ASM_LINKAGE_H
+#define __ASM_LINKAGE_H
+
+#define __ALIGN .align 0
+#define __ALIGN_STR ".align 0"
+
+#endif
diff --git a/arch/arm/include/asm/mach-types.h b/arch/arm/include/asm/mach-types.h
index 2d5c3bc376..47ab00aca0 100644
--- a/arch/arm/include/asm/mach-types.h
+++ b/arch/arm/include/asm/mach-types.h
@@ -1105,6 +1105,13 @@ extern unsigned int __machine_arch_type;
#define MACH_TYPE_UBISYS_P9D_EVP 3493
#define MACH_TYPE_ATDGP318 3494
#define MACH_TYPE_OMAP5_SEVM 3777
+#define MACH_TYPE_RDAARM926EJS 5001
+#define MACH_TYPE_RDA8810 5002
+#define MACH_TYPE_RDA8810E 5003
+#define MACH_TYPE_RDA8820 5004
+#define MACH_TYPE_RDA8850 5005
+#define MACH_TYPE_RDA8850E 5006
+#define MACH_TYPE_RDA8810H 5007
#ifdef CONFIG_ARCH_EBSA110
# ifdef machine_arch_type
@@ -14222,6 +14229,89 @@ extern unsigned int __machine_arch_type;
# define machine_is_omap5_sevm() (0)
#endif
+#ifdef CONFIG_MACH_RDAARM926EJS
+#ifdef machine_arch_type
+#undef machine_arch_type
+#define machine_arch_type __machine_arch_type
+#else
+#define machine_arch_type MACH_TYPE_RDAARM926EJS
+#endif
+#define machine_is_rdaarm926ejs() (machine_arch_type == MACH_TYPE_RDAARM926EJS)
+#else
+#define machine_is_rdaarm926ejs() (0)
+#endif
+
+#ifdef CONFIG_MACH_RDA8810
+#ifdef machine_arch_type
+#undef machine_arch_type
+#define machine_arch_type __machine_arch_type
+#else
+#define machine_arch_type MACH_TYPE_RDA8810
+#endif
+#define machine_is_rda8810() (machine_arch_type == MACH_TYPE_RDA8810)
+#else
+#define machine_is_rda8810() (0)
+#endif
+
+#ifdef CONFIG_MACH_RDA8810E
+#ifdef machine_arch_type
+#undef machine_arch_type
+#define machine_arch_type __machine_arch_type
+#else
+#define machine_arch_type MACH_TYPE_RDA8810E
+#endif
+#define machine_is_rda8810e() (machine_arch_type == MACH_TYPE_RDA8810E)
+#else
+#define machine_is_rda8810e() (0)
+#endif
+
+#ifdef CONFIG_MACH_RDA8820
+#ifdef machine_arch_type
+#undef machine_arch_type
+#define machine_arch_type __machine_arch_type
+#else
+#define machine_arch_type MACH_TYPE_RDA8820
+#endif
+#define machine_is_rda8820() (machine_arch_type == MACH_TYPE_RDA8820)
+#else
+#define machine_is_rda8820() (0)
+#endif
+
+#ifdef CONFIG_MACH_RDA8850
+#ifdef machine_arch_type
+#undef machine_arch_type
+#define machine_arch_type __machine_arch_type
+#else
+#define machine_arch_type MACH_TYPE_RDA8850
+#endif
+#define machine_is_rda8850() (machine_arch_type == MACH_TYPE_RDA8850)
+#else
+#define machine_is_rda8850() (0)
+#endif
+
+#ifdef CONFIG_MACH_RDA8850E
+#ifdef machine_arch_type
+#undef machine_arch_type
+#define machine_arch_type __machine_arch_type
+#else
+#define machine_arch_type MACH_TYPE_RDA8850E
+#endif
+#define machine_is_rda8850E() (machine_arch_type == MACH_TYPE_RDA8850E)
+#else
+#define machine_is_rda8850E() (0)
+#endif
+
+#ifdef CONFIG_MACH_RDA8810H
+#ifdef machine_arch_type
+#undef machine_arch_type
+#define machine_arch_type __machine_arch_type
+#else
+#define machine_arch_type MACH_TYPE_RDA8810H
+#endif
+#define machine_is_rda8810h() (machine_arch_type == MACH_TYPE_RDA8810H)
+#else
+#define machine_is_rda8810h() (0)
+#endif
/*
* These have not yet been registered
*/
diff --git a/arch/arm/include/asm/omap_common.h b/arch/arm/include/asm/omap_common.h
index 6f25948e20..459b6b16e2 100644
--- a/arch/arm/include/asm/omap_common.h
+++ b/arch/arm/include/asm/omap_common.h
@@ -45,7 +45,7 @@ void preloader_console_init(void);
#define BOOT_DEVICE_ONE_NAND 4
#define BOOT_DEVICE_MMC1 5
#define BOOT_DEVICE_MMC2 6
-#define BOOT_DEVICE_MMC3 7
+#define BOOT_DEVICE_MMC2_2 7
#elif defined(CONFIG_OMAP44XX) /* OMAP4 */
#define BOOT_DEVICE_NONE 0
#define BOOT_DEVICE_XIP 1
@@ -54,6 +54,7 @@ void preloader_console_init(void);
#define BOOT_DEVICE_ONE_NAND 4
#define BOOT_DEVICE_MMC1 5
#define BOOT_DEVICE_MMC2 6
+#define BOOT_DEVICE_MMC2_2 0xFF
#elif defined(CONFIG_OMAP34XX) /* OMAP3 */
#define BOOT_DEVICE_NONE 0
#define BOOT_DEVICE_XIP 1
@@ -62,11 +63,13 @@ void preloader_console_init(void);
#define BOOT_DEVICE_MMC2 5 /*emmc*/
#define BOOT_DEVICE_MMC1 6
#define BOOT_DEVICE_XIPWAIT 7
+#define BOOT_DEVICE_MMC2_2 0xFF
#elif defined(CONFIG_AM33XX) /* AM33XX */
#define BOOT_DEVICE_NAND 5
#define BOOT_DEVICE_MMC1 8
#define BOOT_DEVICE_MMC2 0
#define BOOT_DEVICE_UART 65
+#define BOOT_DEVICE_MMC2_2 0xFF
#endif
/* Boot type */
@@ -108,6 +111,12 @@ void spl_ymodem_load_image(void);
void spl_board_init(void);
#endif
+static inline u32 omap_revision(void)
+{
+ extern u32 *const omap_si_rev;
+ return *omap_si_rev;
+}
+
/*
* silicon revisions.
* Moving this to common, so that most of code can be moved to common,
diff --git a/arch/arm/include/asm/proc b/arch/arm/include/asm/proc
new file mode 120000
index 0000000000..c7f3c20248
--- /dev/null
+++ b/arch/arm/include/asm/proc
@@ -0,0 +1 @@
+proc-armv \ No newline at end of file
diff --git a/arch/arm/include/asm/u-boot.h b/arch/arm/include/asm/u-boot.h
index 20e1653930..eac3800729 100644
--- a/arch/arm/include/asm/u-boot.h
+++ b/arch/arm/include/asm/u-boot.h
@@ -38,7 +38,6 @@
typedef struct bd_info {
int bi_baudrate; /* serial console baudrate */
- unsigned long bi_ip_addr; /* IP Address */
ulong bi_arch_number; /* unique id for this board */
ulong bi_boot_params; /* where this board expects params */
unsigned long bi_arm_freq; /* arm frequency */
diff --git a/arch/arm/lib/board.c b/arch/arm/lib/board.c
index 5270c11262..3bb303ec31 100644
--- a/arch/arm/lib/board.c
+++ b/arch/arm/lib/board.c
@@ -64,6 +64,9 @@
#include "../drivers/net/lan91c96.h"
#endif
+/* For test nand easily */
+//#define DO_TEST_NAND_EASILY
+
DECLARE_GLOBAL_DATA_PTR;
ulong monitor_flash_len;
@@ -454,7 +457,9 @@ static char *failed = "*** failed ***\n";
*
************************************************************************
*/
-
+#ifdef TGT_AP_DO_NAND_TEST
+extern void test_nand_easily(void);
+#endif
void board_init_r(gd_t *id, ulong dest_addr)
{
ulong malloc_start;
@@ -532,6 +537,11 @@ void board_init_r(gd_t *id, ulong dest_addr)
#if defined(CONFIG_CMD_NAND)
puts("NAND: ");
nand_init(); /* go init the NAND */
+
+#ifdef TGT_AP_DO_NAND_TEST
+ test_nand_easily();
+#endif
+
#endif
#if defined(CONFIG_CMD_ONENAND)
@@ -555,9 +565,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
arm_pci_init();
#endif
- /* IP Address */
- gd->bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-
stdio_init(); /* get the devices list going. */
jumptable_init();
@@ -595,14 +602,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);
-#if defined(CONFIG_CMD_NET)
- {
- char *s = getenv("bootfile");
-
- if (s != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
- }
-#endif
#ifdef CONFIG_BOARD_LATE_INIT
board_late_init();
@@ -646,7 +645,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
setenv("mem", (char *)memsz);
}
#endif
-
/* main_loop() can return to retry autoboot, if so just run it again. */
for (;;) {
main_loop();
diff --git a/arch/avr32/include/asm/u-boot.h b/arch/avr32/include/asm/u-boot.h
index ff1ed23db9..1d2959a2ad 100644
--- a/arch/avr32/include/asm/u-boot.h
+++ b/arch/avr32/include/asm/u-boot.h
@@ -24,7 +24,6 @@
typedef struct bd_info {
unsigned long bi_baudrate;
- unsigned long bi_ip_addr;
unsigned char bi_phy_id[4];
unsigned long bi_board_number;
void *bi_boot_params;
diff --git a/arch/avr32/lib/board.c b/arch/avr32/lib/board.c
index d626c29c00..b390a6c8f8 100644
--- a/arch/avr32/lib/board.c
+++ b/arch/avr32/lib/board.c
@@ -316,8 +316,6 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
/* initialize environment */
env_relocate();
- bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
-
stdio_init();
jumptable_init();
console_init_r();
@@ -329,9 +327,6 @@ void board_init_r(gd_t *new_gd, ulong dest_addr)
bb_miiphy_init();
#endif
#if defined(CONFIG_CMD_NET)
- s = getenv("bootfile");
- if (s)
- copy_filename(BootFile, s, sizeof(BootFile));
puts("Net: ");
eth_initialize(gd->bd);
#endif
diff --git a/arch/blackfin/cpu/.gitignore b/arch/blackfin/cpu/.gitignore
deleted file mode 100644
index ba986d8ba8..0000000000
--- a/arch/blackfin/cpu/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-bootrom-asm-offsets.[chs]
-
-init.lds
-init.elf
diff --git a/arch/blackfin/cpu/bootrom-asm-offsets.awk b/arch/blackfin/cpu/bootrom-asm-offsets.awk
index 1d61824254..1d61824254 100755..100644
--- a/arch/blackfin/cpu/bootrom-asm-offsets.awk
+++ b/arch/blackfin/cpu/bootrom-asm-offsets.awk
diff --git a/arch/blackfin/include/asm/config.h b/arch/blackfin/include/asm/config.h
index 1a8de4906d..25cd833865 100644
--- a/arch/blackfin/include/asm/config.h
+++ b/arch/blackfin/include/asm/config.h
@@ -109,14 +109,8 @@
#ifndef CONFIG_SYS_MALLOC_BASE
# define CONFIG_SYS_MALLOC_BASE (CONFIG_SYS_MONITOR_BASE - CONFIG_SYS_MALLOC_LEN)
#endif
-#ifndef CONFIG_SYS_GBL_DATA_ADDR
-# define CONFIG_SYS_GBL_DATA_ADDR (CONFIG_SYS_MALLOC_BASE - GENERATED_GBL_DATA_SIZE)
-#endif
-#ifndef CONFIG_SYS_BD_INFO_ADDR
-# define CONFIG_SYS_BD_INFO_ADDR (CONFIG_SYS_GBL_DATA_ADDR - GENERATED_BD_INFO_SIZE)
-#endif
#ifndef CONFIG_STACKBASE
-# define CONFIG_STACKBASE (CONFIG_SYS_BD_INFO_ADDR - 4)
+# define CONFIG_STACKBASE (CONFIG_SYS_MALLOC_BASE - 4)
#endif
#ifndef CONFIG_SYS_MEMTEST_START
# define CONFIG_SYS_MEMTEST_START 0
diff --git a/arch/blackfin/include/asm/global_data.h b/arch/blackfin/include/asm/global_data.h
index 67aa30f04c..973ea2929a 100644
--- a/arch/blackfin/include/asm/global_data.h
+++ b/arch/blackfin/include/asm/global_data.h
@@ -73,6 +73,6 @@ typedef struct global_data {
#define GD_FLG_DISABLE_CONSOLE 0x00040 /* Disable console (in & out) */
#define GD_FLG_ENV_READY 0x00080 /* Environment imported into hash table */
-#define DECLARE_GLOBAL_DATA_PTR register gd_t * volatile gd asm ("P3")
+#define DECLARE_GLOBAL_DATA_PTR register volatile gd_t *gd asm ("P3")
#endif
diff --git a/arch/blackfin/include/asm/u-boot.h b/arch/blackfin/include/asm/u-boot.h
index 9712fc00ee..df81183e81 100644
--- a/arch/blackfin/include/asm/u-boot.h
+++ b/arch/blackfin/include/asm/u-boot.h
@@ -30,7 +30,6 @@
typedef struct bd_info {
int bi_baudrate; /* serial console baudrate */
- unsigned long bi_ip_addr; /* IP Address */
unsigned long bi_boot_params; /* where this board expects params */
unsigned long bi_memstart; /* start of DRAM memory */
phys_size_t bi_memsize; /* size of DRAM memory in bytes */
diff --git a/arch/blackfin/lib/.gitignore b/arch/blackfin/lib/.gitignore
deleted file mode 100644
index 09f1be04eb..0000000000
--- a/arch/blackfin/lib/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-u-boot.lds
diff --git a/arch/blackfin/lib/board.c b/arch/blackfin/lib/board.c
index e3ee4cd353..c380d271e7 100644
--- a/arch/blackfin/lib/board.c
+++ b/arch/blackfin/lib/board.c
@@ -86,7 +86,6 @@ static void display_global_data(void)
printf(" |-jt(%p): %p\n", gd->jt, *(gd->jt));
printf(" \\-bd: %p\n", gd->bd);
printf(" |-bi_baudrate: %x\n", bd->bi_baudrate);
- printf(" |-bi_ip_addr: %lx\n", bd->bi_ip_addr);
printf(" |-bi_boot_params: %lx\n", bd->bi_boot_params);
printf(" |-bi_memstart: %lx\n", bd->bi_memstart);
printf(" |-bi_memsize: %lx\n", bd->bi_memsize);
@@ -181,6 +180,46 @@ void init_cplbtables(void)
}
}
+static int global_board_data_init(void)
+{
+#ifndef CONFIG_SYS_GBL_DATA_ADDR
+# define CONFIG_SYS_GBL_DATA_ADDR 0
+#endif
+#ifndef CONFIG_SYS_BD_INFO_ADDR
+# define CONFIG_SYS_BD_INFO_ADDR 0
+#endif
+
+ bd_t *bd;
+
+ if (CONFIG_SYS_GBL_DATA_ADDR) {
+ gd = (gd_t *) (CONFIG_SYS_GBL_DATA_ADDR);
+ memset((void *)gd, 0, GENERATED_GBL_DATA_SIZE);
+ } else {
+ static gd_t _bfin_gd;
+ gd = &_bfin_gd;
+ }
+
+ if (CONFIG_SYS_BD_INFO_ADDR) {
+ bd = (bd_t *) (CONFIG_SYS_BD_INFO_ADDR);
+ memset(bd, 0, GENERATED_BD_INFO_SIZE);
+ } else {
+ static bd_t _bfin_bd;
+ bd = &_bfin_bd;
+ }
+ gd->bd = bd;
+
+ bd->bi_r_version = version_string;
+ bd->bi_cpu = MK_STR(CONFIG_BFIN_CPU);
+ bd->bi_board_name = BFIN_BOARD_NAME;
+ bd->bi_vco = get_vco();
+ bd->bi_cclk = get_cclk();
+ bd->bi_sclk = get_sclk();
+ bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
+ bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
+
+ return 0;
+}
+
/*
* All attempts to come up with a "common" initialization sequence
* that works for all boards and architectures failed: some of the
@@ -201,7 +240,6 @@ extern int timer_init(void);
void board_init_f(ulong bootflag)
{
- bd_t *bd;
char buf[32];
#ifdef CONFIG_BOARD_EARLY_INIT_F
@@ -234,21 +272,8 @@ void board_init_f(ulong bootflag)
hang();
#endif
serial_early_puts("Init global data\n");
- gd = (gd_t *) (CONFIG_SYS_GBL_DATA_ADDR);
- memset((void *)gd, 0, GENERATED_GBL_DATA_SIZE);
- bd = (bd_t *) (CONFIG_SYS_BD_INFO_ADDR);
- gd->bd = bd;
- memset((void *)bd, 0, GENERATED_BD_INFO_SIZE);
-
- bd->bi_r_version = version_string;
- bd->bi_cpu = MK_STR(CONFIG_BFIN_CPU);
- bd->bi_board_name = BFIN_BOARD_NAME;
- bd->bi_vco = get_vco();
- bd->bi_cclk = get_cclk();
- bd->bi_sclk = get_sclk();
- bd->bi_memstart = CONFIG_SYS_SDRAM_BASE;
- bd->bi_memsize = CONFIG_SYS_MAX_RAM_SIZE;
+ global_board_data_init();
/* Initialize */
serial_early_puts("IRQ init\n");
@@ -276,7 +301,7 @@ void board_init_f(ulong bootflag)
if (CONFIG_MEM_SIZE) {
printf("RAM: ");
- print_size(bd->bi_memsize, "\n");
+ print_size(gd->bd->bi_memsize, "\n");
}
#if defined(CONFIG_POST)
@@ -294,15 +319,8 @@ static void board_net_init_r(bd_t *bd)
bb_miiphy_init();
#endif
#ifdef CONFIG_CMD_NET
- char *s;
-
- if ((s = getenv("bootfile")) != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
-
- bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-
printf("Net: ");
- eth_initialize(gd->bd);
+ eth_initialize(bd);
#endif
}
diff --git a/arch/m68k/include/asm/u-boot.h b/arch/m68k/include/asm/u-boot.h
index 0a48bbdbe6..973c9ee098 100644
--- a/arch/m68k/include/asm/u-boot.h
+++ b/arch/m68k/include/asm/u-boot.h
@@ -47,7 +47,6 @@ typedef struct bd_info {
unsigned long bi_mbar_base; /* base of internal registers */
unsigned long bi_bootflags; /* boot / reboot flag (for LynxOS) */
unsigned long bi_boot_params; /* where this board expects params */
- unsigned long bi_ip_addr; /* IP Address */
unsigned short bi_ethspeed; /* Ethernet speed in Mbps */
unsigned long bi_intfreq; /* Internal Freq, in MHz */
unsigned long bi_busfreq; /* Bus Freq, in MHz */
diff --git a/arch/m68k/lib/board.c b/arch/m68k/lib/board.c
index 1526967fe3..65a8595c2b 100644
--- a/arch/m68k/lib/board.c
+++ b/arch/m68k/lib/board.c
@@ -507,15 +507,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
/* relocate environment function pointers etc. */
env_relocate ();
- /*
- * Fill in missing fields of bd_info.
- * We do this here, where we have "normal" access to the
- * environment; we used to do this still running from ROM,
- * where had to use getenv_f(), which can be pretty slow when
- * the environment is in EEPROM.
- */
- bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
-
WATCHDOG_RESET ();
#if defined(CONFIG_PCI)
@@ -568,11 +559,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);
-#if defined(CONFIG_CMD_NET)
- if ((s = getenv ("bootfile")) != NULL) {
- copy_filename (BootFile, s, sizeof (BootFile));
- }
-#endif
WATCHDOG_RESET ();
diff --git a/arch/microblaze/include/asm/u-boot.h b/arch/microblaze/include/asm/u-boot.h
index 21c72d5940..a0b1dbf9e6 100644
--- a/arch/microblaze/include/asm/u-boot.h
+++ b/arch/microblaze/include/asm/u-boot.h
@@ -40,7 +40,6 @@ typedef struct bd_info {
unsigned long bi_flashoffset; /* reserved area for startup monitor */
unsigned long bi_sramstart; /* start of SRAM memory */
unsigned long bi_sramsize; /* size of SRAM memory */
- unsigned long bi_ip_addr; /* IP Address */
unsigned long bi_baudrate; /* Console Baudrate */
} bd_t;
diff --git a/arch/microblaze/lib/board.c b/arch/microblaze/lib/board.c
index 9828b7630f..f3679d536b 100644
--- a/arch/microblaze/lib/board.c
+++ b/arch/microblaze/lib/board.c
@@ -176,19 +176,12 @@ void board_init (void)
load_addr = getenv_ulong("loadaddr", 16, load_addr);
#if defined(CONFIG_CMD_NET)
- /* IP Address */
- bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-
printf("Net: ");
eth_initialize(gd->bd);
uchar enetaddr[6];
eth_getenv_enetaddr("ethaddr", enetaddr);
printf("MAC: %pM\n", enetaddr);
-
- s = getenv("bootfile");
- if (s != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
#endif
/* main_loop */
diff --git a/arch/mips/cpu/mips32/au1x00/au1x00_eth.c b/arch/mips/cpu/mips32/au1x00/au1x00_eth.c
index c51079961c..ac03a452bc 100644
--- a/arch/mips/cpu/mips32/au1x00/au1x00_eth.c
+++ b/arch/mips/cpu/mips32/au1x00/au1x00_eth.c
@@ -147,7 +147,8 @@ int au1x00_miiphy_write(const char *devname, unsigned char addr,
}
#endif
-static int au1x00_send(struct eth_device* dev, volatile void *packet, int length){
+static int au1x00_send(struct eth_device *dev, void *packet, int length)
+{
volatile mac_fifo_t *fifo_tx =
(volatile mac_fifo_t*)(MAC0_TX_DMA_ADDR+MAC_TX_BUFF0_STATUS);
int i;
diff --git a/arch/mips/include/asm/u-boot.h b/arch/mips/include/asm/u-boot.h
index edb87bb066..590649aa3e 100644
--- a/arch/mips/include/asm/u-boot.h
+++ b/arch/mips/include/asm/u-boot.h
@@ -33,7 +33,6 @@
typedef struct bd_info {
int bi_baudrate; /* serial console baudrate */
- unsigned long bi_ip_addr; /* IP Address */
unsigned long bi_arch_number; /* unique id for this board */
unsigned long bi_boot_params; /* where this board expects params */
unsigned long bi_memstart; /* start of DRAM memory */
diff --git a/arch/mips/lib/board.c b/arch/mips/lib/board.c
index 38e6e77a34..59a80011da 100644
--- a/arch/mips/lib/board.c
+++ b/arch/mips/lib/board.c
@@ -320,9 +320,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
/* relocate environment function pointers etc. */
env_relocate();
- /* IP Address */
- bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-
#if defined(CONFIG_PCI)
/*
* Do pci configuration
@@ -342,14 +339,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);
-#if defined(CONFIG_CMD_NET)
- {
- char *s = getenv("bootfile");
-
- if (s != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
- }
-#endif
#ifdef CONFIG_CMD_SPI
puts("SPI: ");
diff --git a/arch/nds32/cpu/n1213/ag102/Makefile b/arch/nds32/cpu/n1213/ag102/Makefile
new file mode 100644
index 0000000000..8716c4e858
--- /dev/null
+++ b/arch/nds32/cpu/n1213/ag102/Makefile
@@ -0,0 +1,58 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+#
+# Copyright (C) 2011 Andes Technology Corporation
+# Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
+# Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(SOC).o
+
+COBJS-y := cpu.o timer.o
+
+ifndef CONFIG_SKIP_LOWLEVEL_INIT
+SOBJS := lowlevel_init.o
+endif
+
+ifndef CONFIG_SKIP_TRUNOFF_WATCHDOG
+SOBJS += watchdog.o
+endif
+
+SRCS := $(SOBJS:.o=.S) $(COBJS-y:.o=.c)
+OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS-y))
+
+all: $(obj).depend $(LIB)
+
+$(LIB): $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/arch/nds32/cpu/n1213/ag102/asm-offsets.c b/arch/nds32/cpu/n1213/ag102/asm-offsets.c
new file mode 100644
index 0000000000..4769a9521d
--- /dev/null
+++ b/arch/nds32/cpu/n1213/ag102/asm-offsets.c
@@ -0,0 +1,54 @@
+/*
+ * Adapted from Linux v2.6.36 kernel: arch/powerpc/kernel/asm-offsets.c
+ *
+ * Generate definitions needed by assembly language modules.
+ * This code generates raw asm output which is post-processed to extract
+ * and format the required data.
+ *
+ * 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 <common.h>
+
+#include <linux/kbuild.h>
+
+int main(void)
+{
+#ifdef CONFIG_FTSMC020
+ OFFSET(FTSMC020_BANK0_CR, ftsmc020, bank[0].cr);
+ OFFSET(FTSMC020_BANK0_TPR, ftsmc020, bank[0].tpr);
+#endif
+ BLANK();
+#ifdef CONFIG_FTAHBC020S
+ OFFSET(FTAHBC020S_SLAVE_BSR_6, ftahbc02s, s_bsr[6]);
+ OFFSET(FTAHBC020S_CR, ftahbc02s, cr);
+#endif
+ BLANK();
+#ifdef CONFIG_ANDES_PCU
+ OFFSET(ANDES_PCU_PCS4, andes_pcu, pcs4.parm); /* 0x104 */
+#endif
+ BLANK();
+#ifdef CONFIG_DWCDDR21MCTL
+ OFFSET(DWCDDR21MCTL_CCR, dwcddr21mctl, ccr); /* 0x04 */
+ OFFSET(DWCDDR21MCTL_DCR, dwcddr21mctl, dcr); /* 0x04 */
+ OFFSET(DWCDDR21MCTL_IOCR, dwcddr21mctl, iocr); /* 0x08 */
+ OFFSET(DWCDDR21MCTL_CSR, dwcddr21mctl, csr); /* 0x0c */
+ OFFSET(DWCDDR21MCTL_DRR, dwcddr21mctl, drr); /* 0x10 */
+ OFFSET(DWCDDR21MCTL_DLLCR0, dwcddr21mctl, dllcr[0]); /* 0x24 */
+ OFFSET(DWCDDR21MCTL_DLLCR1, dwcddr21mctl, dllcr[1]); /* 0x28 */
+ OFFSET(DWCDDR21MCTL_DLLCR2, dwcddr21mctl, dllcr[2]); /* 0x2c */
+ OFFSET(DWCDDR21MCTL_DLLCR3, dwcddr21mctl, dllcr[3]); /* 0x30 */
+ OFFSET(DWCDDR21MCTL_DLLCR4, dwcddr21mctl, dllcr[4]); /* 0x34 */
+ OFFSET(DWCDDR21MCTL_DLLCR5, dwcddr21mctl, dllcr[5]); /* 0x38 */
+ OFFSET(DWCDDR21MCTL_DLLCR6, dwcddr21mctl, dllcr[6]); /* 0x3c */
+ OFFSET(DWCDDR21MCTL_DLLCR7, dwcddr21mctl, dllcr[7]); /* 0x40 */
+ OFFSET(DWCDDR21MCTL_DLLCR8, dwcddr21mctl, dllcr[8]); /* 0x44 */
+ OFFSET(DWCDDR21MCTL_DLLCR9, dwcddr21mctl, dllcr[9]); /* 0x48 */
+ OFFSET(DWCDDR21MCTL_RSLR0, dwcddr21mctl, rslr[0]); /* 0x4c */
+ OFFSET(DWCDDR21MCTL_RDGR0, dwcddr21mctl, rdgr[0]); /* 0x5c */
+ OFFSET(DWCDDR21MCTL_DTAR, dwcddr21mctl, dtar); /* 0xa4 */
+ OFFSET(DWCDDR21MCTL_MR, dwcddr21mctl, mr); /* 0x1f0 */
+#endif
+ return 0;
+}
diff --git a/arch/nds32/cpu/n1213/ag102/cpu.c b/arch/nds32/cpu/n1213/ag102/cpu.c
new file mode 100644
index 0000000000..ed88b522a4
--- /dev/null
+++ b/arch/nds32/cpu/n1213/ag102/cpu.c
@@ -0,0 +1,195 @@
+/*
+ * (C) Copyright 2002
+ * Sysgo Real-Time Solutions, GmbH <www.elinos.com>
+ * Marius Groeger <mgroeger@sysgo.de>
+ *
+ * (C) Copyright 2002
+ * Gary Jennejohn, DENX Software Engineering, <gj@denx.de>
+ *
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* CPU specific code */
+#include <common.h>
+#include <command.h>
+#include <watchdog.h>
+#include <asm/cache.h>
+
+#include <faraday/ftwdt010_wdt.h>
+
+/*
+ * cleanup_before_linux() is called just before we call linux
+ * it prepares the processor for linux
+ *
+ * we disable interrupt and caches.
+ */
+int cleanup_before_linux(void)
+{
+ disable_interrupts();
+
+#ifdef CONFIG_MMU
+ /* turn off I/D-cache */
+ icache_disable();
+ dcache_disable();
+
+ /* flush I/D-cache */
+ invalidate_icac();
+ invalidate_dcac();
+#endif
+
+ return 0;
+}
+
+int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ disable_interrupts();
+
+ /*
+ * reset to the base addr of andesboot.
+ * currently no ROM loader at addr 0.
+ * do not use reset_cpu(0);
+ */
+#ifdef CONFIG_FTWDT010_WATCHDOG
+ /*
+ * workaround: if we use CONFIG_HW_WATCHDOG with ftwdt010, will lead
+ * automatic hardware reset when booting Linux.
+ * Please do not use CONFIG_HW_WATCHDOG and WATCHDOG_RESET() here.
+ */
+ ftwdt010_wdt_reset();
+#endif /* CONFIG_FTWDT010_WATCHDOG */
+ hang();
+
+ /*NOTREACHED*/
+}
+
+static inline unsigned long CACHE_LINE_SIZE(enum cache_t cache)
+{
+ if (cache == ICACHE)
+ return 8 << (((GET_ICM_CFG() & ICM_CFG_MSK_ISZ) \
+ >> ICM_CFG_OFF_ISZ) - 1);
+ else
+ return 8 << (((GET_DCM_CFG() & DCM_CFG_MSK_DSZ) \
+ >> DCM_CFG_OFF_DSZ) - 1);
+}
+
+void dcache_flush_range(unsigned long start, unsigned long end)
+{
+ unsigned long line_size;
+
+ line_size = CACHE_LINE_SIZE(DCACHE);
+
+ while (end > start) {
+ __asm__ volatile ("\n\tcctl %0, L1D_VA_WB" : : "r"(start));
+ __asm__ volatile ("\n\tcctl %0, L1D_VA_INVAL" : : "r"(start));
+ start += line_size;
+ }
+}
+
+void icache_inval_range(unsigned long start, unsigned long end)
+{
+ unsigned long line_size;
+
+ line_size = CACHE_LINE_SIZE(ICACHE);
+ while (end > start) {
+ __asm__ volatile ("\n\tcctl %0, L1I_VA_INVAL" : : "r"(start));
+ start += line_size;
+ }
+}
+
+void flush_cache(unsigned long addr, unsigned long size)
+{
+ dcache_flush_range(addr, addr + size);
+ icache_inval_range(addr, addr + size);
+}
+
+void icache_enable(void)
+{
+ __asm__ __volatile__ (
+ "mfsr $p0, $mr8\n\t"
+ "ori $p0, $p0, 0x01\n\t"
+ "mtsr $p0, $mr8\n\t"
+ "isb\n\t"
+ );
+}
+
+void icache_disable(void)
+{
+ __asm__ __volatile__ (
+ "mfsr $p0, $mr8\n\t"
+ "li $p1, ~0x01\n\t"
+ "and $p0, $p0, $p1\n\t"
+ "mtsr $p0, $mr8\n\t"
+ "isb\n\t"
+ );
+}
+
+int icache_status(void)
+{
+ int ret;
+
+ __asm__ __volatile__ (
+ "mfsr $p0, $mr8\n\t"
+ "andi %0, $p0, 0x01\n\t"
+ : "=r" (ret)
+ :
+ : "memory"
+ );
+
+ return ret;
+}
+
+void dcache_enable(void)
+{
+ __asm__ __volatile__ (
+ "mfsr $p0, $mr8\n\t"
+ "ori $p0, $p0, 0x02\n\t"
+ "mtsr $p0, $mr8\n\t"
+ "isb\n\t"
+ );
+}
+
+void dcache_disable(void)
+{
+ __asm__ __volatile__ (
+ "mfsr $p0, $mr8\n\t"
+ "li $p1, ~0x02\n\t"
+ "and $p0, $p0, $p1\n\t"
+ "mtsr $p0, $mr8\n\t"
+ "isb\n\t"
+ );
+}
+
+int dcache_status(void)
+{
+ int ret;
+
+ __asm__ __volatile__ (
+ "mfsr $p0, $mr8\n\t"
+ "andi %0, $p0, 0x02\n\t"
+ : "=r" (ret)
+ :
+ : "memory"
+ );
+
+ return ret;
+}
diff --git a/arch/nds32/cpu/n1213/ag102/lowlevel_init.S b/arch/nds32/cpu/n1213/ag102/lowlevel_init.S
new file mode 100644
index 0000000000..d842afa4ba
--- /dev/null
+++ b/arch/nds32/cpu/n1213/ag102/lowlevel_init.S
@@ -0,0 +1,297 @@
+/*
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+.text
+
+#include <common.h>
+#include <config.h>
+
+#include <asm/macro.h>
+#include <generated/asm-offsets.h>
+
+/*
+ * parameters for Synopsys DWC DDR2/DDR1 Memory Controller
+ */
+#define DDR2C_BASE_A (CONFIG_DWCDDR21MCTL_BASE)
+#define DDR2C_CCR_A (DDR2C_BASE_A + DWCDDR21MCTL_CCR)
+#define DDR2C_DCR_A (DDR2C_BASE_A + DWCDDR21MCTL_DCR)
+#define DDR2C_IOCR_A (DDR2C_BASE_A + DWCDDR21MCTL_IOCR)
+#define DDR2C_CSR_A (DDR2C_BASE_A + DWCDDR21MCTL_CSR)
+#define DDR2C_DRR_A (DDR2C_BASE_A + DWCDDR21MCTL_DRR)
+#define DDR2C_DLLCR0_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR0)
+#define DDR2C_DLLCR1_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR1)
+#define DDR2C_DLLCR2_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR2)
+#define DDR2C_DLLCR3_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR3)
+#define DDR2C_DLLCR4_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR4)
+#define DDR2C_DLLCR5_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR5)
+#define DDR2C_DLLCR6_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR6)
+#define DDR2C_DLLCR7_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR7)
+#define DDR2C_DLLCR8_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR8)
+#define DDR2C_DLLCR9_A (DDR2C_BASE_A + DWCDDR21MCTL_DLLCR9)
+#define DDR2C_RSLR0_A (DDR2C_BASE_A + DWCDDR21MCTL_RSLR0)
+#define DDR2C_RDGR0_A (DDR2C_BASE_A + DWCDDR21MCTL_RDGR0)
+#define DDR2C_DTAR_A (DDR2C_BASE_A + DWCDDR21MCTL_DTAR)
+#define DDR2C_MR_A (DDR2C_BASE_A + DWCDDR21MCTL_MR)
+
+#define DDR2C_CCR_D CONFIG_SYS_DWCDDR21MCTL_CCR
+#define DDR2C_CCR_D2 CONFIG_SYS_DWCDDR21MCTL_CCR2
+#define DDR2C_DCR_D CONFIG_SYS_DWCDDR21MCTL_DCR
+#define DDR2C_IOCR_D CONFIG_SYS_DWCDDR21MCTL_IOCR
+#define DDR2C_CSR_D CONFIG_SYS_DWCDDR21MCTL_CSR
+#define DDR2C_DRR_D CONFIG_SYS_DWCDDR21MCTL_DRR
+#define DDR2C_RSLR0_D CONFIG_SYS_DWCDDR21MCTL_RSLR0
+#define DDR2C_RDGR0_D CONFIG_SYS_DWCDDR21MCTL_RDGR0
+#define DDR2C_DTAR_D CONFIG_SYS_DWCDDR21MCTL_DTAR
+#define DDR2C_MR_D CONFIG_SYS_DWCDDR21MCTL_MR
+
+#define DDR2C_DLLCR0_D CONFIG_SYS_DWCDDR21MCTL_DLLCR0 /* 0-9 are same */
+
+/*
+ * parameters for the ahbc controller
+ */
+#define AHBC_CR_A (CONFIG_FTAHBC020S_BASE + FTAHBC020S_CR)
+#define AHBC_BSR6_A (CONFIG_FTAHBC020S_BASE + FTAHBC020S_SLAVE_BSR_6)
+
+#define AHBC_BSR6_D CONFIG_SYS_FTAHBC020S_SLAVE_BSR_6
+
+/*
+ * parameters for the ANDES PCU controller
+ */
+#define PCU_PCS4_A (CONFIG_ANDES_PCU_BASE + ANDES_PCU_PCS4)
+#define PCU_PCS4_D CONFIG_SYS_ANDES_CPU_PCS4
+
+/*
+ * numeric 7 segment display
+ */
+.macro led, num
+ write32 CONFIG_DEBUG_LED, \num
+.endm
+
+/*
+ * Waiting for SDRAM to set up
+ */
+/*
+.macro wait_sdram
+ li $r0, DDR2C_CSR_A
+1:
+ lwi $r1, [$r0+FTSDMC021_CR2]
+ bnez $r1, 1b
+.endm
+*/
+
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+.globl lowlevel_init
+lowlevel_init:
+ move $r10, $lp
+
+ /* U200 */
+! led 0x00
+! jal scale_to_500mhz
+
+ led 0x10
+ jal mem_init
+
+ led 0x20
+ jal remap
+
+ led 0x30
+ ret $r10
+
+scale_to_500mhz:
+ move $r11, $lp
+
+ /*
+ * scale to 500Mhz
+ */
+ led 0x01
+ write32 PCU_PCS4_A, 0x1102000f ! save data to PCS4
+
+ move $lp, $r11
+ ret
+
+mem_init:
+ move $r11, $lp
+
+ /*
+ * config AHB Controller
+ */
+ led 0x12
+ write32 AHBC_BSR6_A, AHBC_BSR6_D
+
+ /*
+ * config Synopsys DWC DDR2/DDR1 Memory Controller
+ */
+ddr2c_init:
+set_dcr:
+ led 0x14
+ write32 DDR2C_DCR_A, DDR2C_DCR_D ! 0x000020d4
+
+auto_sizing:
+ /*
+ * ebios: $r10->$r7, $r11->$r8, $r12->$r9, $r13->$r12, $r14->$r13
+ */
+set_iocr:
+ led 0x19
+ write32 DDR2C_IOCR_A, DDR2C_IOCR_D
+set_drr:
+ led 0x16
+ write32 DDR2C_DRR_A, DDR2C_DRR_D ! 0x00034812
+set_dllcr:
+ led 0x18
+ write32 DDR2C_DLLCR0_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR1_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR2_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR3_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR4_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR5_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR6_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR7_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR8_A, DDR2C_DLLCR0_D
+ write32 DDR2C_DLLCR9_A, DDR2C_DLLCR0_D
+set_rslr0:
+ write32 DDR2C_RSLR0_A, DDR2C_RSLR0_D ! 0x00000040
+set_rdgr0:
+ write32 DDR2C_RDGR0_A, DDR2C_RDGR0_D ! 0x000055cf
+set_dtar:
+ led 0x15
+ write32 DDR2C_DTAR_A, DDR2C_DTAR_D ! 0x00100000
+set_mode:
+ led 0x17
+ write32 DDR2C_MR_A, DDR2C_MR_D ! 0x00000852
+set_ccr:
+ write32 DDR2C_CCR_A, DDR2C_CCR_D
+
+#ifdef TRIGGER_INIT:
+trigger_init:
+ write32 DDR2C_CCR_A, DDR2C_CCR_D ! 0x80020000
+
+ /* Wait for ddr init state to be set */
+ msync ALL
+ isb
+
+ /* Wait until the config initialization is finish */
+1:
+ la $r4, DDR2C_CSR_A
+ lwi $r5, [$r4]
+ srli $r5, $r5, 23
+ bnez $r5, 1b
+#endif
+
+data_training:
+! write32 DDR2C_CCR_A, DDR2C_CCR_D2 ! 0x40020004
+
+ /* Wait for ddr init state to be set */
+ msync ALL
+ isb
+
+ /* wait until the ddr data trainning is complete */
+1:
+ la $r4, DDR2C_CSR_A
+ lwi $r5, [$r4]
+ srli $r6, $r5, 23
+ bnez $r6, 1b
+
+ lwi $r1, [$r4]
+ srli $r6, $r5, 20
+ li $r5, 0x00ffffff
+ swi $r1, [$r4]
+ bnez $r6, ddr2c_init
+
+ led 0x1a
+ move $lp, $r11
+ ret
+
+remap:
+ move $r11, $lp
+#ifdef __NDS32_N1213_43U1H__ /* NDS32 V0 ISA - AG101 Only */
+ bal 2f
+relo_base:
+ move $r0, $lp
+#else
+relo_base:
+ mfusr $r0, $pc
+#endif /* __NDS32_N1213_43U1H__ */
+
+ /*
+ * Remapping
+ */
+#ifdef CONFIG_MEM_REMAP
+ /*
+ * Copy ROM code to SDRAM base for memory remap layout.
+ * This is not the real relocation, the real relocation is the function
+ * relocate_code() is start.S which supports the systems is memory
+ * remapped or not.
+ */
+ /*
+ * Doing memory remap is essential for preparing some non-OS or RTOS
+ * applications.
+ *
+ * This is also a must on ADP-AG101 board.
+ * The reason is because the ROM/FLASH circuit on PCB board.
+ * AG101-A0 board has 2 jumpers MA17 and SW5 to configure which
+ * ROM/FLASH is used to boot.
+ *
+ * When SW5 = "0101", MA17 = LO, the ROM is connected to BANK0,
+ * and the FLASH is connected to BANK1.
+ * When SW5 = "1010", MA17 = HI, the ROM is disabled (still at BANK0),
+ * and the FLASH is connected to BANK0.
+ * It will occur problem when doing flash probing if the flash is at
+ * BANK0 (0x00000000) while memory remapping was skipped.
+ *
+ * Other board like ADP-AG101P may not enable this since there is only
+ * a FLASH connected to bank0.
+ */
+ led 0x21
+ li $r4, PHYS_SDRAM_0_AT_INIT /* 0x10000000 */
+ li $r5, 0x0
+ la $r1, relo_base /* get $pc or $lp */
+ sub $r2, $r0, $r1
+ sethi $r6, hi20(_end)
+ ori $r6, $r6, lo12(_end)
+ add $r6, $r6, $r2
+1:
+ lwi.p $r7, [$r5], #4
+ swi.p $r7, [$r4], #4
+ blt $r5, $r6, 1b
+
+ /* set remap bit */
+ /*
+ * MEM remap bit is operational
+ * - use it to map writeable memory at 0x00000000, in place of flash
+ * - before remap: flash/rom 0x00000000, sdram: 0x10000000-0x4fffffff
+ * - after remap: flash/rom 0x80000000, sdram: 0x00000000
+ */
+ led 0x2c
+ setbf15 AHBC_CR_A, FTAHBC020S_CR_REMAP ! 0x1
+
+#endif /* #ifdef CONFIG_MEM_REMAP */
+ move $lp, $r11
+2:
+ ret
+
+.globl show_led
+show_led:
+ li $r8, (CONFIG_DEBUG_LED)
+ swi $r7, [$r8]
+ ret
+#endif /* #ifndef CONFIG_SKIP_LOWLEVEL_INIT */
diff --git a/arch/nds32/cpu/n1213/ag102/timer.c b/arch/nds32/cpu/n1213/ag102/timer.c
new file mode 100644
index 0000000000..caa36b8be8
--- /dev/null
+++ b/arch/nds32/cpu/n1213/ag102/timer.c
@@ -0,0 +1,205 @@
+/*
+ * (C) Copyright 2009 Faraday Technology
+ * Po-Yu Chuang <ratbert@faraday-tech.com>
+ *
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <faraday/fttmr010.h>
+
+static ulong timestamp;
+static ulong lastdec;
+
+int timer_init(void)
+{
+ struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+ unsigned int cr;
+
+ debug("%s()\n", __func__);
+
+ /* disable timers */
+ writel(0, &tmr->cr);
+
+#ifdef CONFIG_FTTMR010_EXT_CLK
+ /* use 32768Hz oscillator for RTC, WDT, TIMER */
+ ftpmu010_32768osc_enable();
+#endif
+
+ /* setup timer */
+ writel(TIMER_LOAD_VAL, &tmr->timer3_load);
+ writel(TIMER_LOAD_VAL, &tmr->timer3_counter);
+ writel(0, &tmr->timer3_match1);
+ writel(0, &tmr->timer3_match2);
+
+ /* we don't want timer to issue interrupts */
+ writel(FTTMR010_TM3_MATCH1 |
+ FTTMR010_TM3_MATCH2 |
+ FTTMR010_TM3_OVERFLOW,
+ &tmr->interrupt_mask);
+
+ cr = readl(&tmr->cr);
+#ifdef CONFIG_FTTMR010_EXT_CLK
+ cr |= FTTMR010_TM3_CLOCK; /* use external clock */
+#endif
+ cr |= FTTMR010_TM3_ENABLE;
+ writel(cr, &tmr->cr);
+
+ /* init the timestamp and lastdec value */
+ reset_timer_masked();
+
+ return 0;
+}
+
+/*
+ * timer without interrupts
+ */
+
+/*
+ * reset time
+ */
+void reset_timer_masked(void)
+{
+ struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+
+ /* capure current decrementer value time */
+#ifdef CONFIG_FTTMR010_EXT_CLK
+ lastdec = readl(&tmr->timer3_counter) / (TIMER_CLOCK / CONFIG_SYS_HZ);
+#else
+ lastdec = readl(&tmr->timer3_counter) / (CONFIG_SYS_CLK_FREQ / 2);
+#endif
+ timestamp = 0; /* start "advancing" time stamp from 0 */
+
+ debug("%s(): lastdec = %lx\n", __func__, lastdec);
+}
+
+void reset_timer(void)
+{
+ debug("%s()\n", __func__);
+ reset_timer_masked();
+}
+
+/*
+ * return timer ticks
+ */
+ulong get_timer_masked(void)
+{
+ struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+
+ /* current tick value */
+#ifdef CONFIG_FTTMR010_EXT_CLK
+ ulong now = readl(&tmr->timer3_counter) / (TIMER_CLOCK / CONFIG_SYS_HZ);
+#else
+ ulong now = readl(&tmr->timer3_counter) / \
+ (CONFIG_SYS_CLK_FREQ / 2 / 1024);
+#endif
+
+ debug("%s(): now = %lx, lastdec = %lx\n", __func__, now, lastdec);
+
+ if (lastdec >= now) {
+ /*
+ * normal mode (non roll)
+ * move stamp fordward with absoulte diff ticks
+ */
+ timestamp += lastdec - now;
+ } else {
+ /*
+ * we have overflow of the count down timer
+ *
+ * nts = ts + ld + (TLV - now)
+ * ts=old stamp, ld=time that passed before passing through -1
+ * (TLV-now) amount of time after passing though -1
+ * nts = new "advancing time stamp"...it could also roll and
+ * cause problems.
+ */
+ timestamp += lastdec + TIMER_LOAD_VAL - now;
+ }
+
+ lastdec = now;
+
+ debug("%s() returns %lx\n", __func__, timestamp);
+
+ return timestamp;
+}
+
+/*
+ * return difference between timer ticks and base
+ */
+ulong get_timer(ulong base)
+{
+ debug("%s(%lx)\n", __func__, base);
+ return get_timer_masked() - base;
+}
+
+void set_timer(ulong t)
+{
+ debug("%s(%lx)\n", __func__, t);
+ timestamp = t;
+}
+
+/* delay x useconds AND preserve advance timestamp value */
+void __udelay(unsigned long usec)
+{
+ struct fttmr010 *tmr = (struct fttmr010 *)CONFIG_FTTMR010_BASE;
+
+#ifdef CONFIG_FTTMR010_EXT_CLK
+ long tmo = usec * (TIMER_CLOCK / 1000) / 1000;
+#else
+ long tmo = usec * ((CONFIG_SYS_CLK_FREQ / 2) / 1000) / 1000;
+#endif
+ unsigned long now, last = readl(&tmr->timer3_counter);
+
+ debug("%s(%lu)\n", __func__, usec);
+ while (tmo > 0) {
+ now = readl(&tmr->timer3_counter);
+ if (now > last) /* count down timer overflow */
+ tmo -= TIMER_LOAD_VAL + last - now;
+ else
+ tmo -= last - now;
+ last = now;
+ }
+}
+
+/*
+ * This function is derived from PowerPC code (read timebase as long long).
+ * On ARM it just returns the timer value.
+ */
+unsigned long long get_ticks(void)
+{
+ debug("%s()\n", __func__);
+ return get_timer(0);
+}
+
+/*
+ * This function is derived from PowerPC code (timebase clock frequency).
+ * On ARM it returns the number of timer ticks per second.
+ */
+ulong get_tbclk(void)
+{
+ debug("%s()\n", __func__);
+#ifdef CONFIG_FTTMR010_EXT_CLK
+ return CONFIG_SYS_HZ;
+#else
+ return CONFIG_SYS_CLK_FREQ;
+#endif
+}
diff --git a/arch/nds32/cpu/n1213/ag102/watchdog.S b/arch/nds32/cpu/n1213/ag102/watchdog.S
new file mode 100644
index 0000000000..56cecda78f
--- /dev/null
+++ b/arch/nds32/cpu/n1213/ag102/watchdog.S
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <asm/arch-ag102/ag102.h>
+#include <linux/linkage.h>
+
+.text
+
+#ifndef CONFIG_SKIP_TRUNOFF_WATCHDOG
+ENTRY(turnoff_watchdog)
+
+#define WD_CR 0xC
+#define WD_ENABLE 0x1
+
+ ! Turn off the watchdog, according to Faraday FTWDT010 spec
+ li $p0, (CONFIG_FTWDT010_BASE+WD_CR) ! Get the addr of WD CR
+ lwi $p1, [$p0] ! Get the config of WD
+ andi $p1, $p1, 0x1f ! Wipe out useless bits
+ li $r0, ~WD_ENABLE
+ and $p1, $p1, $r0 ! Set WD disable
+ sw $p1, [$p0] ! Write back to WD CR
+
+ ! Disable Interrupts by clear GIE in $PSW reg
+ setgie.d
+
+ ret
+
+ENDPROC(turnoff_watchdog)
+#endif
diff --git a/arch/nds32/include/asm/arch-ag102/ag102.h b/arch/nds32/include/asm/arch-ag102/ag102.h
new file mode 100644
index 0000000000..a12a8c52b7
--- /dev/null
+++ b/arch/nds32/include/asm/arch-ag102/ag102.h
@@ -0,0 +1,97 @@
+/*
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __AG102_H
+#define __AG102_H
+
+/*
+ * Hardware register bases
+ */
+
+/* PCI Controller */
+#define CONFIG_FTPCI100_BASE 0x90000000
+/* LPC Controller */
+#define CONFIG_LPC_IO_BASE 0x90100000
+/* LPC Controller */
+#define CONFIG_LPC_BASE 0x90200000
+
+/* NDS32 Data Local Memory 01 */
+#define CONFIG_NDS_DLM1_BASE 0x90300000
+/* NDS32 Data Local Memory 02 */
+#define CONFIG_NDS_DLM2_BASE 0x90400000
+
+/* Synopsys DWC DDR2/1 Controller */
+#define CONFIG_DWCDDR21MCTL_BASE 0x90500000
+/* DMA Controller */
+#define CONFIG_FTDMAC020_BASE 0x90600000
+/* FTIDE020_S IDE (ATA) Controller */
+#define CONFIG_FTIDE020S_BASE 0x90700000
+/* USB OTG Controller */
+#define CONFIG_FZOTG266HD0A_BASE 0x90800000
+/* Andes L2 Cache Controller */
+#define CONFIG_NCEL2C100_BASE 0x90900000
+/* XGI XG22 GPU */
+#define CONFIG_XGI_XG22_BASE 0x90A00000
+/* GMAC Ethernet Controller */
+#define CONFIG_FTGMAC100_BASE 0x90B00000
+/* AHB Controller */
+#define CONFIG_FTAHBC020S_BASE 0x90C00000
+/* AHB-to-APB Bridge Controller */
+#define CONFIG_FTAPBBRG020S_01_BASE 0x90D00000
+/* External AHB2AHB Controller */
+#define CONFIG_EXT_AHB2AHB_BASE 0x90E00000
+/* Andes Multi-core Interrupt Controller */
+#define CONFIG_NCEMIC100_BASE 0x90F00000
+
+/*
+ * APB Device definitions
+ */
+/* Compat Flash Controller */
+#define CONFIG_FTCFC010_BASE 0x94000000
+/* APB - SSP (SPI) (without AC97) Controller */
+#define CONFIG_FTSSP010_01_BASE 0x94100000
+/* UART1 - APB STUART Controller (UART0 in Linux) */
+#define CONFIG_FTUART010_01_BASE 0x94200000
+/* FTSDC010 SD Controller */
+#define CONFIG_FTSDC010_BASE 0x94400000
+/* APB - SSP with HDA/AC97 Controller */
+#define CONFIG_FTSSP010_02_BASE 0x94500000
+/* UART2 - APB STUART Controller (UART1 in Linux) */
+#define CONFIG_FTUART010_02_BASE 0x94600000
+/* PCU Controller */
+#define CONFIG_ANDES_PCU_BASE 0x94800000
+/* FTTMR010 Timer */
+#define CONFIG_FTTMR010_BASE 0x94900000
+/* Watch Dog Controller */
+#define CONFIG_FTWDT010_BASE 0x94A00000
+/* FTRTC010 Real Time Clock */
+#define CONFIG_FTRTC010_BASE 0x98B00000
+/* GPIO Controller */
+#define CONFIG_FTGPIO010_BASE 0x94C00000
+/* I2C Controller */
+#define CONFIG_FTIIC010_BASE 0x94E00000
+/* PWM - Pulse Width Modulator Controller */
+#define CONFIG_FTPWM010_BASE 0x94F00000
+
+/* Debug LED */
+#define CONFIG_DEBUG_LED 0x902FFFFC
+/* Power Management Unit */
+#define CONFIG_FTPMU010_BASE 0x98100000
+
+#endif /* __AG102_H */
diff --git a/arch/nds32/include/asm/mach-types.h b/arch/nds32/include/asm/mach-types.h
index 7b52b989bc..259e4e7ad9 100644
--- a/arch/nds32/include/asm/mach-types.h
+++ b/arch/nds32/include/asm/mach-types.h
@@ -40,4 +40,18 @@ extern unsigned int __machine_arch_type;
# define machine_is_adpag101p() (1)
#endif
+#define MACH_TYPE_ADPAG102 2
+
+#ifdef CONFIG_ARCH_ADPAG102
+# ifdef machine_arch_type
+# undef machine_arch_type
+# define machine_arch_type __machine_arch_type
+# else
+# define machine_arch_type MACH_TYPE_ADPAG102
+# endif
+# define machine_is_adpag102() (machine_arch_type == MACH_TYPE_ADPAG102)
+#else
+# define machine_is_adpag102() (2)
+#endif
+
#endif /* __ASM_NDS32_MACH_TYPE_H */
diff --git a/arch/nds32/include/asm/u-boot.h b/arch/nds32/include/asm/u-boot.h
index 9a697501d1..eabbf38fb1 100644
--- a/arch/nds32/include/asm/u-boot.h
+++ b/arch/nds32/include/asm/u-boot.h
@@ -40,7 +40,6 @@
typedef struct bd_info {
int bi_baudrate; /* serial console baudrate */
- unsigned long bi_ip_addr; /* IP Address */
unsigned char bi_enetaddr[6]; /* Ethernet adress */
unsigned long bi_arch_number; /* unique id for this board */
unsigned long bi_boot_params; /* where this board expects params */
diff --git a/arch/nds32/lib/board.c b/arch/nds32/lib/board.c
index 074aabf1e4..7121313a83 100644
--- a/arch/nds32/lib/board.c
+++ b/arch/nds32/lib/board.c
@@ -369,9 +369,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
nds32_pci_init();
#endif
- /* IP Address */
- gd->bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-
stdio_init(); /* get the devices list going. */
jumptable_init();
@@ -402,12 +399,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);
-#if defined(CONFIG_CMD_NET)
- s = getenv("bootfile");
- if (s != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
-#endif
-
#ifdef BOARD_LATE_INIT
board_late_init();
#endif
diff --git a/arch/nios2/include/asm/u-boot.h b/arch/nios2/include/asm/u-boot.h
index f7c70ff0c1..315ef8bedb 100644
--- a/arch/nios2/include/asm/u-boot.h
+++ b/arch/nios2/include/asm/u-boot.h
@@ -39,7 +39,6 @@ typedef struct bd_info {
unsigned long bi_flashoffset; /* reserved area for startup monitor */
unsigned long bi_sramstart; /* start of SRAM memory */
unsigned long bi_sramsize; /* size of SRAM memory */
- unsigned long bi_ip_addr; /* IP Address */
unsigned long bi_baudrate; /* Console Baudrate */
} bd_t;
diff --git a/arch/nios2/lib/board.c b/arch/nios2/lib/board.c
index 65de26e5c9..ca8a3e5246 100644
--- a/arch/nios2/lib/board.c
+++ b/arch/nios2/lib/board.c
@@ -143,8 +143,6 @@ void board_init (void)
WATCHDOG_RESET ();
env_relocate();
- bd->bi_ip_addr = getenv_IPaddr ("ipaddr");
-
WATCHDOG_RESET ();
stdio_init();
jumptable_init();
diff --git a/arch/openrisc/include/asm/u-boot.h b/arch/openrisc/include/asm/u-boot.h
index 2913994932..76b813273f 100644
--- a/arch/openrisc/include/asm/u-boot.h
+++ b/arch/openrisc/include/asm/u-boot.h
@@ -33,7 +33,6 @@
typedef struct bd_info {
unsigned long bi_baudrate; /* serial console baudrate */
- unsigned long bi_ip_addr; /* IP Address */
unsigned long bi_arch_number; /* unique id for this board */
unsigned long bi_boot_params; /* where this board expects params */
unsigned long bi_memstart; /* start of DRAM memory */
diff --git a/arch/powerpc/cpu/mpc8220/fec.c b/arch/powerpc/cpu/mpc8220/fec.c
index 2053fea571..aaf9be107a 100644
--- a/arch/powerpc/cpu/mpc8220/fec.c
+++ b/arch/powerpc/cpu/mpc8220/fec.c
@@ -624,7 +624,7 @@ static void rfifo_print (char *devname, mpc8220_fec_priv * fec)
/********************************************************************/
-static int mpc8220_fec_send (struct eth_device *dev, volatile void *eth_data,
+static int mpc8220_fec_send(struct eth_device *dev, void *eth_data,
int data_length)
{
/*
@@ -787,8 +787,7 @@ static int mpc8220_fec_recv (struct eth_device *dev)
*/
/* memcpy(buff, frame->head, 14);
memcpy(buff + 14, frame->data, frame_length);*/
- NetReceive ((volatile uchar *) pRbd->dataPointer,
- frame_length);
+ NetReceive((uchar *)pRbd->dataPointer, frame_length);
len = frame_length;
}
/*
diff --git a/arch/powerpc/cpu/mpc824x/.gitignore b/arch/powerpc/cpu/mpc824x/.gitignore
deleted file mode 100644
index 2d79931e96..0000000000
--- a/arch/powerpc/cpu/mpc824x/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/bedbug_603e.c
diff --git a/arch/powerpc/cpu/mpc8260/ether_fcc.c b/arch/powerpc/cpu/mpc8260/ether_fcc.c
index 879ec0ea23..18534516a4 100644
--- a/arch/powerpc/cpu/mpc8260/ether_fcc.c
+++ b/arch/powerpc/cpu/mpc8260/ether_fcc.c
@@ -142,7 +142,7 @@ static RTXBD rtx __attribute__ ((aligned(8)));
#error "rtx must be 64-bit aligned"
#endif
-static int fec_send(struct eth_device* dev, volatile void *packet, int length)
+static int fec_send(struct eth_device *dev, void *packet, int length)
{
int i;
int result = 0;
@@ -1049,11 +1049,11 @@ eth_loopback_test (void)
}
else {
ushort datlen = bdp->cbd_datlen;
- Ethernet_t *ehp;
+ struct ethernet_hdr *ehp;
ushort prot;
int ours, tb, n, nbytes;
- ehp = (Ethernet_t *) \
+ ehp = (struct ethernet_hdr *) \
&ecp->rxbufs[i][0];
ours = memcmp (ehp->et_src, \
@@ -1063,9 +1063,8 @@ eth_loopback_test (void)
tb = prot & 0x8000;
n = prot & 0x7fff;
- nbytes = ELBT_BUFSZ - \
- offsetof (Ethernet_t, \
- et_dsap) - \
+ nbytes = ELBT_BUFSZ -
+ ETHER_HDR_SIZE -
ELBT_CRCSZ;
/* check the frame is correct */
@@ -1080,10 +1079,10 @@ eth_loopback_test (void)
patwords[n];
uint nbb;
- nbb = badbits ( \
- &ehp->et_dsap, \
- nbytes, \
- patword);
+ nbb = badbits(
+ ((uchar *)&ehp) +
+ ETHER_HDR_SIZE,
+ nbytes, patword);
ecp->rxeacc.badbit += \
nbb;
diff --git a/arch/powerpc/cpu/mpc8260/ether_scc.c b/arch/powerpc/cpu/mpc8260/ether_scc.c
index 1c040f0f5b..3c71219575 100644
--- a/arch/powerpc/cpu/mpc8260/ether_scc.c
+++ b/arch/powerpc/cpu/mpc8260/ether_scc.c
@@ -105,7 +105,7 @@ typedef volatile struct CommonBufferDescriptor {
static RTXBD *rtx;
-static int sec_send(struct eth_device *dev, volatile void *packet, int length)
+static int sec_send(struct eth_device *dev, void *packet, int length)
{
int i;
int result = 0;
diff --git a/arch/powerpc/cpu/mpc85xx/cpu_init.c b/arch/powerpc/cpu/mpc85xx/cpu_init.c
index 2e4a06c35a..2cd5db7c59 100644
--- a/arch/powerpc/cpu/mpc85xx/cpu_init.c
+++ b/arch/powerpc/cpu/mpc85xx/cpu_init.c
@@ -37,6 +37,7 @@
#include <asm/mmu.h>
#include <asm/fsl_law.h>
#include <asm/fsl_serdes.h>
+#include <asm/fsl_srio.h>
#include <linux/compiler.h>
#include "mp.h"
#ifdef CONFIG_SYS_QE_FMAN_FW_IN_NAND
@@ -48,8 +49,6 @@
DECLARE_GLOBAL_DATA_PTR;
-extern void srio_init(void);
-
#ifdef CONFIG_QE
extern qe_iop_conf_t qe_iop_conf_tab[];
extern void qe_config_iopin(u8 port, u8 pin, int dir,
@@ -443,6 +442,12 @@ skip_l2:
#ifdef CONFIG_SYS_SRIO
srio_init();
+#ifdef CONFIG_SRIOBOOT_MASTER
+ srio_boot_master();
+#ifdef CONFIG_SRIOBOOT_SLAVE_HOLDOFF
+ srio_boot_master_release_slave();
+#endif
+#endif
#endif
#if defined(CONFIG_MP)
diff --git a/arch/powerpc/cpu/mpc85xx/ether_fcc.c b/arch/powerpc/cpu/mpc85xx/ether_fcc.c
index 41c3c84ae5..7d372aaef6 100644
--- a/arch/powerpc/cpu/mpc85xx/ether_fcc.c
+++ b/arch/powerpc/cpu/mpc85xx/ether_fcc.c
@@ -138,7 +138,7 @@ static RTXBD rtx __attribute__ ((aligned(8)));
#undef ET_DEBUG
-static int fec_send(struct eth_device* dev, volatile void *packet, int length)
+static int fec_send(struct eth_device *dev, void *packet, int length)
{
int i = 0;
int result = 0;
diff --git a/arch/powerpc/cpu/mpc85xx/start.S b/arch/powerpc/cpu/mpc85xx/start.S
index 4d37d6e863..8e99ef6c68 100644
--- a/arch/powerpc/cpu/mpc85xx/start.S
+++ b/arch/powerpc/cpu/mpc85xx/start.S
@@ -1,5 +1,5 @@
/*
- * Copyright 2004, 2007-2011 Freescale Semiconductor, Inc.
+ * Copyright 2004, 2007-2012 Freescale Semiconductor, Inc.
* Copyright (C) 2003 Motorola,Inc.
*
* See file CREDITS for list of people who contributed to this
@@ -179,41 +179,50 @@ l2_disabled:
andi. r1,r3,L1CSR0_DCE@l
beq 2b
+/*
+ * Ne need to setup interrupt vector for NAND SPL
+ * because NAND SPL never compiles it.
+ */
+#if !defined(CONFIG_NAND_SPL)
/* Setup interrupt vectors */
lis r1,CONFIG_SYS_MONITOR_BASE@h
mtspr IVPR,r1
- li r1,0x0100
- mtspr IVOR0,r1 /* 0: Critical input */
- li r1,0x0200
- mtspr IVOR1,r1 /* 1: Machine check */
- li r1,0x0300
- mtspr IVOR2,r1 /* 2: Data storage */
- li r1,0x0400
- mtspr IVOR3,r1 /* 3: Instruction storage */
- li r1,0x0500
- mtspr IVOR4,r1 /* 4: External interrupt */
- li r1,0x0600
- mtspr IVOR5,r1 /* 5: Alignment */
- li r1,0x0700
- mtspr IVOR6,r1 /* 6: Program check */
- li r1,0x0800
- mtspr IVOR7,r1 /* 7: floating point unavailable */
- li r1,0x0900
- mtspr IVOR8,r1 /* 8: System call */
+ lis r3,(CONFIG_SYS_MONITOR_BASE & 0xffff)@h
+ ori r3,r3,(CONFIG_SYS_MONITOR_BASE & 0xffff)@l
+
+ addi r4,r3,CriticalInput - _start + _START_OFFSET
+ mtspr IVOR0,r4 /* 0: Critical input */
+ addi r4,r3,MachineCheck - _start + _START_OFFSET
+ mtspr IVOR1,r4 /* 1: Machine check */
+ addi r4,r3,DataStorage - _start + _START_OFFSET
+ mtspr IVOR2,r4 /* 2: Data storage */
+ addi r4,r3,InstStorage - _start + _START_OFFSET
+ mtspr IVOR3,r4 /* 3: Instruction storage */
+ addi r4,r3,ExtInterrupt - _start + _START_OFFSET
+ mtspr IVOR4,r4 /* 4: External interrupt */
+ addi r4,r3,Alignment - _start + _START_OFFSET
+ mtspr IVOR5,r4 /* 5: Alignment */
+ addi r4,r3,ProgramCheck - _start + _START_OFFSET
+ mtspr IVOR6,r4 /* 6: Program check */
+ addi r4,r3,FPUnavailable - _start + _START_OFFSET
+ mtspr IVOR7,r4 /* 7: floating point unavailable */
+ addi r4,r3,SystemCall - _start + _START_OFFSET
+ mtspr IVOR8,r4 /* 8: System call */
/* 9: Auxiliary processor unavailable(unsupported) */
- li r1,0x0a00
- mtspr IVOR10,r1 /* 10: Decrementer */
- li r1,0x0b00
- mtspr IVOR11,r1 /* 11: Interval timer */
- li r1,0x0c00
- mtspr IVOR12,r1 /* 12: Watchdog timer */
- li r1,0x0d00
- mtspr IVOR13,r1 /* 13: Data TLB error */
- li r1,0x0e00
- mtspr IVOR14,r1 /* 14: Instruction TLB error */
- li r1,0x0f00
- mtspr IVOR15,r1 /* 15: Debug */
+ addi r4,r3,Decrementer - _start + _START_OFFSET
+ mtspr IVOR10,r4 /* 10: Decrementer */
+ addi r4,r3,IntervalTimer - _start + _START_OFFSET
+ mtspr IVOR11,r4 /* 11: Interval timer */
+ addi r4,r3,WatchdogTimer - _start + _START_OFFSET
+ mtspr IVOR12,r4 /* 12: Watchdog timer */
+ addi r4,r3,DataTLBError - _start + _START_OFFSET
+ mtspr IVOR13,r4 /* 13: Data TLB error */
+ addi r4,r3,InstructionTLBError - _start + _START_OFFSET
+ mtspr IVOR14,r4 /* 14: Instruction TLB error */
+ addi r4,r3,DebugBreakpoint - _start + _START_OFFSET
+ mtspr IVOR15,r4 /* 15: Debug */
+#endif
/* Clear and set up some registers. */
li r0,0x0000
@@ -434,13 +443,15 @@ create_ccsr_new_tlb:
ori r2, r2, FSL_BOOKE_MAS2(CONFIG_SYS_CCSRBAR, (MAS2_I|MAS2_G))@l
lis r3, FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_PHYS_LOW, 0, (MAS3_SW|MAS3_SR))@h
ori r3, r3, FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_PHYS_LOW, 0, (MAS3_SW|MAS3_SR))@l
+#ifdef CONFIG_ENABLE_36BIT_PHYS
lis r7, CONFIG_SYS_CCSRBAR_PHYS_HIGH@h
ori r7, r7, CONFIG_SYS_CCSRBAR_PHYS_HIGH@l
+ mtspr MAS7, r7
+#endif
mtspr MAS0, r0
mtspr MAS1, r1
mtspr MAS2, r2
mtspr MAS3, r3
- mtspr MAS7, r7
isync
msync
tlbwe
@@ -456,12 +467,14 @@ create_ccsr_old_tlb:
ori r2, r2, FSL_BOOKE_MAS2(CONFIG_SYS_CCSRBAR + 0x1000, (MAS2_I|MAS2_G))@l
lis r3, FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_DEFAULT, 0, (MAS3_SW|MAS3_SR))@h
ori r3, r3, FSL_BOOKE_MAS3(CONFIG_SYS_CCSRBAR_DEFAULT, 0, (MAS3_SW|MAS3_SR))@l
+#ifdef CONFIG_ENABLE_36BIT_PHYS
li r7, 0 /* The default CCSR address is always a 32-bit number */
+ mtspr MAS7, r7
+#endif
mtspr MAS0, r0
/* MAS1 is the same as above */
mtspr MAS2, r2
mtspr MAS3, r3
- mtspr MAS7, r7
isync
msync
tlbwe
@@ -1490,6 +1503,39 @@ trap_init:
cmplw 0,r7,r8
blt 2b
+ /* Update IVORs as per relocated vector table address */
+ li r7,0x0100
+ mtspr IVOR0,r7 /* 0: Critical input */
+ li r7,0x0200
+ mtspr IVOR1,r7 /* 1: Machine check */
+ li r7,0x0300
+ mtspr IVOR2,r7 /* 2: Data storage */
+ li r7,0x0400
+ mtspr IVOR3,r7 /* 3: Instruction storage */
+ li r7,0x0500
+ mtspr IVOR4,r7 /* 4: External interrupt */
+ li r7,0x0600
+ mtspr IVOR5,r7 /* 5: Alignment */
+ li r7,0x0700
+ mtspr IVOR6,r7 /* 6: Program check */
+ li r7,0x0800
+ mtspr IVOR7,r7 /* 7: floating point unavailable */
+ li r7,0x0900
+ mtspr IVOR8,r7 /* 8: System call */
+ /* 9: Auxiliary processor unavailable(unsupported) */
+ li r7,0x0a00
+ mtspr IVOR10,r7 /* 10: Decrementer */
+ li r7,0x0b00
+ mtspr IVOR11,r7 /* 11: Interval timer */
+ li r7,0x0c00
+ mtspr IVOR12,r7 /* 12: Watchdog timer */
+ li r7,0x0d00
+ mtspr IVOR13,r7 /* 13: Data TLB error */
+ li r7,0x0e00
+ mtspr IVOR14,r7 /* 14: Instruction TLB error */
+ li r7,0x0f00
+ mtspr IVOR15,r7 /* 15: Debug */
+
lis r7,0x0
mtspr IVPR,r7
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
index 04bc73170a..8ba9399169 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-nand.lds
@@ -1,5 +1,5 @@
/*
- * Copyright 2009 Freescale Semiconductor, Inc.
+ * Copyright 2009-2012 Freescale Semiconductor, Inc.
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -51,13 +51,14 @@ SECTIONS
PROVIDE (erotext = .);
.reloc :
{
- KEEP(*(.got))
_GOT2_TABLE_ = .;
KEEP(*(.got2))
+ KEEP(*(.got))
+ PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
_FIXUP_TABLE_ = .;
KEEP(*(.fixup))
}
- __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+ __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
__fixup_entries = (. - _FIXUP_TABLE_) >> 2;
.data :
@@ -87,7 +88,7 @@ SECTIONS
.bootpg ADDR(.text) - 0x1000 :
{
- arch/powerpc/cpu/mpc85xx/start.o KEEP(*(.bootpg))
+ KEEP(arch/powerpc/cpu/mpc85xx/start.o (.bootpg))
} :text = 0xffff
. = ADDR(.text) + 0x80000;
diff --git a/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds b/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
index 852f9aa4a3..668158f702 100644
--- a/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
+++ b/arch/powerpc/cpu/mpc85xx/u-boot-nand_spl.lds
@@ -37,10 +37,12 @@ SECTIONS
.reloc : {
_GOT2_TABLE_ = .;
KEEP(*(.got2))
+ KEEP(*(.got))
+ PROVIDE(_GLOBAL_OFFSET_TABLE_ = . + 4);
_FIXUP_TABLE_ = .;
KEEP(*(.fixup))
}
- __got2_entries = (_FIXUP_TABLE_ - _GOT2_TABLE_) >> 2;
+ __got2_entries = ((_GLOBAL_OFFSET_TABLE_ - _GOT2_TABLE_) >> 2) - 1;
__fixup_entries = (. - _FIXUP_TABLE_) >> 2;
. = ALIGN(8);
diff --git a/arch/powerpc/cpu/mpc8xx/fec.c b/arch/powerpc/cpu/mpc8xx/fec.c
index f2a2c3a736..b348a98c58 100644
--- a/arch/powerpc/cpu/mpc8xx/fec.c
+++ b/arch/powerpc/cpu/mpc8xx/fec.c
@@ -139,7 +139,7 @@ typedef volatile struct CommonBufferDescriptor {
static RTXBD *rtx = NULL;
-static int fec_send(struct eth_device* dev, volatile void *packet, int length);
+static int fec_send(struct eth_device *dev, void *packet, int length);
static int fec_recv(struct eth_device* dev);
static int fec_init(struct eth_device* dev, bd_t * bd);
static void fec_halt(struct eth_device* dev);
@@ -193,7 +193,7 @@ int fec_initialize(bd_t *bis)
return 1;
}
-static int fec_send(struct eth_device* dev, volatile void *packet, int length)
+static int fec_send(struct eth_device *dev, void *packet, int length)
{
int j, rc;
struct ether_fcc_info_s *efis = dev->priv;
@@ -267,14 +267,14 @@ static int fec_recv (struct eth_device *dev)
rtx->rxbd[rxIdx].cbd_sc);
#endif
} else {
- volatile uchar *rx = NetRxPackets[rxIdx];
+ uchar *rx = NetRxPackets[rxIdx];
length -= 4;
#if defined(CONFIG_CMD_CDP)
if ((rx[0] & 1) != 0
&& memcmp ((uchar *) rx, NetBcastAddr, 6) != 0
- && memcmp ((uchar *) rx, NetCDPAddr, 6) != 0)
+ && !is_cdp_packet((uchar *)rx))
rx = NULL;
#endif
/*
diff --git a/arch/powerpc/cpu/mpc8xx/scc.c b/arch/powerpc/cpu/mpc8xx/scc.c
index e376c64d52..2c93e24f3c 100644
--- a/arch/powerpc/cpu/mpc8xx/scc.c
+++ b/arch/powerpc/cpu/mpc8xx/scc.c
@@ -65,7 +65,7 @@ typedef volatile struct CommonBufferDescriptor {
static RTXBD *rtx;
-static int scc_send(struct eth_device* dev, volatile void *packet, int length);
+static int scc_send(struct eth_device *dev, void *packet, int length);
static int scc_recv(struct eth_device* dev);
static int scc_init (struct eth_device* dev, bd_t * bd);
static void scc_halt(struct eth_device* dev);
@@ -90,7 +90,7 @@ int scc_initialize(bd_t *bis)
return 1;
}
-static int scc_send(struct eth_device* dev, volatile void *packet, int length)
+static int scc_send(struct eth_device *dev, void *packet, int length)
{
int i, j=0;
#if 0
diff --git a/arch/powerpc/cpu/mpc8xxx/srio.c b/arch/powerpc/cpu/mpc8xxx/srio.c
index e46d328067..c7f394972b 100644
--- a/arch/powerpc/cpu/mpc8xxx/srio.c
+++ b/arch/powerpc/cpu/mpc8xxx/srio.c
@@ -21,6 +21,16 @@
#include <config.h>
#include <asm/fsl_law.h>
#include <asm/fsl_serdes.h>
+#include <asm/fsl_srio.h>
+
+#define SRIO_PORT_ACCEPT_ALL 0x10000001
+#define SRIO_IB_ATMU_AR 0x80f55000
+#define SRIO_OB_ATMU_AR_MAINT 0x80077000
+#define SRIO_OB_ATMU_AR_RW 0x80045000
+#define SRIO_LCSBA1CSR_OFFSET 0x5c
+#define SRIO_MAINT_WIN_SIZE 0x1000000 /* 16M */
+#define SRIO_RW_WIN_SIZE 0x100000 /* 1M */
+#define SRIO_LCSBA1CSR 0x60000000
#if defined(CONFIG_FSL_CORENET)
#define _DEVDISR_SRIO1 FSL_CORENET_DEVDISR_SRIO1
@@ -84,3 +94,203 @@ void srio_init(void)
setbits_be32(&gur->devdisr, _DEVDISR_RMU);
}
}
+
+#ifdef CONFIG_SRIOBOOT_MASTER
+void srio_boot_master(void)
+{
+ struct ccsr_rio *srio = (void *)CONFIG_SYS_FSL_SRIO_ADDR;
+
+ /* set port accept-all */
+ out_be32((void *)&srio->impl.port[CONFIG_SRIOBOOT_MASTER_PORT].ptaacr,
+ SRIO_PORT_ACCEPT_ALL);
+
+ debug("SRIOBOOT - MASTER: Master port [ %d ] for srio boot.\n",
+ CONFIG_SRIOBOOT_MASTER_PORT);
+ /* configure inbound window for slave's u-boot image */
+ debug("SRIOBOOT - MASTER: Inbound window for slave's image; "
+ "Local = 0x%llx, Srio = 0x%llx, Size = 0x%x\n",
+ (u64)CONFIG_SRIOBOOT_SLAVE_IMAGE_LAW_PHYS1,
+ (u64)CONFIG_SRIOBOOT_SLAVE_IMAGE_SRIO_PHYS1,
+ CONFIG_SRIOBOOT_SLAVE_IMAGE_SIZE);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[0].riwtar,
+ CONFIG_SRIOBOOT_SLAVE_IMAGE_LAW_PHYS1 >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[0].riwbar,
+ CONFIG_SRIOBOOT_SLAVE_IMAGE_SRIO_PHYS1 >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[0].riwar,
+ SRIO_IB_ATMU_AR
+ | atmu_size_mask(CONFIG_SRIOBOOT_SLAVE_IMAGE_SIZE));
+
+ /* configure inbound window for slave's u-boot image */
+ debug("SRIOBOOT - MASTER: Inbound window for slave's image; "
+ "Local = 0x%llx, Srio = 0x%llx, Size = 0x%x\n",
+ (u64)CONFIG_SRIOBOOT_SLAVE_IMAGE_LAW_PHYS2,
+ (u64)CONFIG_SRIOBOOT_SLAVE_IMAGE_SRIO_PHYS2,
+ CONFIG_SRIOBOOT_SLAVE_IMAGE_SIZE);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[1].riwtar,
+ CONFIG_SRIOBOOT_SLAVE_IMAGE_LAW_PHYS2 >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[1].riwbar,
+ CONFIG_SRIOBOOT_SLAVE_IMAGE_SRIO_PHYS2 >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[1].riwar,
+ SRIO_IB_ATMU_AR
+ | atmu_size_mask(CONFIG_SRIOBOOT_SLAVE_IMAGE_SIZE));
+
+ /* configure inbound window for slave's ucode */
+ debug("SRIOBOOT - MASTER: Inbound window for slave's ucode; "
+ "Local = 0x%llx, Srio = 0x%llx, Size = 0x%x\n",
+ (u64)CONFIG_SRIOBOOT_SLAVE_UCODE_LAW_PHYS,
+ (u64)CONFIG_SRIOBOOT_SLAVE_UCODE_SRIO_PHYS,
+ CONFIG_SRIOBOOT_SLAVE_UCODE_SIZE);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[2].riwtar,
+ CONFIG_SRIOBOOT_SLAVE_UCODE_LAW_PHYS >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[2].riwbar,
+ CONFIG_SRIOBOOT_SLAVE_UCODE_SRIO_PHYS >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[2].riwar,
+ SRIO_IB_ATMU_AR
+ | atmu_size_mask(CONFIG_SRIOBOOT_SLAVE_UCODE_SIZE));
+
+ /* configure inbound window for slave's ENV */
+ debug("SRIOBOOT - MASTER: Inbound window for slave's ENV; "
+ "Local = 0x%llx, Siro = 0x%llx, Size = 0x%x\n",
+ CONFIG_SRIOBOOT_SLAVE_ENV_LAW_PHYS,
+ CONFIG_SRIOBOOT_SLAVE_ENV_SRIO_PHYS,
+ CONFIG_SRIOBOOT_SLAVE_ENV_SIZE);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[3].riwtar,
+ CONFIG_SRIOBOOT_SLAVE_ENV_LAW_PHYS >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[3].riwbar,
+ CONFIG_SRIOBOOT_SLAVE_ENV_SRIO_PHYS >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].inbw[3].riwar,
+ SRIO_IB_ATMU_AR
+ | atmu_size_mask(CONFIG_SRIOBOOT_SLAVE_ENV_SIZE));
+}
+
+#ifdef CONFIG_SRIOBOOT_SLAVE_HOLDOFF
+void srio_boot_master_release_slave(void)
+{
+ struct ccsr_rio *srio = (void *)CONFIG_SYS_FSL_SRIO_ADDR;
+ u32 escsr;
+ debug("SRIOBOOT - MASTER: "
+ "Check the port status and release slave core ...\n");
+
+ escsr = in_be32((void *)&srio->lp_serial
+ .port[CONFIG_SRIOBOOT_MASTER_PORT].pescsr);
+ if (escsr & 0x2) {
+ if (escsr & 0x10100) {
+ debug("SRIOBOOT - MASTER: Port [ %d ] is error.\n",
+ CONFIG_SRIOBOOT_MASTER_PORT);
+ } else {
+ debug("SRIOBOOT - MASTER: "
+ "Port [ %d ] is ready, now release slave's core ...\n",
+ CONFIG_SRIOBOOT_MASTER_PORT);
+ /*
+ * configure outbound window
+ * with maintenance attribute to set slave's LCSBA1CSR
+ */
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[1].rowtar, 0);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[1].rowtear, 0);
+ if (CONFIG_SRIOBOOT_MASTER_PORT)
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[1].rowbar,
+ CONFIG_SYS_SRIO2_MEM_PHYS >> 12);
+ else
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[1].rowbar,
+ CONFIG_SYS_SRIO1_MEM_PHYS >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[1].rowar,
+ SRIO_OB_ATMU_AR_MAINT
+ | atmu_size_mask(SRIO_MAINT_WIN_SIZE));
+
+ /*
+ * configure outbound window
+ * with R/W attribute to set slave's BRR
+ */
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[2].rowtar,
+ SRIO_LCSBA1CSR >> 9);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[2].rowtear, 0);
+ if (CONFIG_SRIOBOOT_MASTER_PORT)
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[2].rowbar,
+ (CONFIG_SYS_SRIO2_MEM_PHYS
+ + SRIO_MAINT_WIN_SIZE) >> 12);
+ else
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[2].rowbar,
+ (CONFIG_SYS_SRIO1_MEM_PHYS
+ + SRIO_MAINT_WIN_SIZE) >> 12);
+ out_be32((void *)&srio->atmu
+ .port[CONFIG_SRIOBOOT_MASTER_PORT]
+ .outbw[2].rowar,
+ SRIO_OB_ATMU_AR_RW
+ | atmu_size_mask(SRIO_RW_WIN_SIZE));
+
+ /*
+ * Set the LCSBA1CSR register in slave
+ * by the maint-outbound window
+ */
+ if (CONFIG_SRIOBOOT_MASTER_PORT) {
+ out_be32((void *)CONFIG_SYS_SRIO2_MEM_VIRT
+ + SRIO_LCSBA1CSR_OFFSET,
+ SRIO_LCSBA1CSR);
+ while (in_be32((void *)CONFIG_SYS_SRIO2_MEM_VIRT
+ + SRIO_LCSBA1CSR_OFFSET)
+ != SRIO_LCSBA1CSR)
+ ;
+ /*
+ * And then set the BRR register
+ * to release slave core
+ */
+ out_be32((void *)CONFIG_SYS_SRIO2_MEM_VIRT
+ + SRIO_MAINT_WIN_SIZE
+ + CONFIG_SRIOBOOT_SLAVE_BRR_OFFSET,
+ CONFIG_SRIOBOOT_SLAVE_RELEASE_MASK);
+ } else {
+ out_be32((void *)CONFIG_SYS_SRIO1_MEM_VIRT
+ + SRIO_LCSBA1CSR_OFFSET,
+ SRIO_LCSBA1CSR);
+ while (in_be32((void *)CONFIG_SYS_SRIO1_MEM_VIRT
+ + SRIO_LCSBA1CSR_OFFSET)
+ != SRIO_LCSBA1CSR)
+ ;
+ /*
+ * And then set the BRR register
+ * to release slave core
+ */
+ out_be32((void *)CONFIG_SYS_SRIO1_MEM_VIRT
+ + SRIO_MAINT_WIN_SIZE
+ + CONFIG_SRIOBOOT_SLAVE_BRR_OFFSET,
+ CONFIG_SRIOBOOT_SLAVE_RELEASE_MASK);
+ }
+ debug("SRIOBOOT - MASTER: "
+ "Release slave successfully! Now the slave should start up!\n");
+ }
+ } else
+ debug("SRIOBOOT - MASTER: Port [ %d ] is not ready.\n",
+ CONFIG_SRIOBOOT_MASTER_PORT);
+}
+#endif
+#endif
diff --git a/arch/powerpc/include/asm/config_mpc85xx.h b/arch/powerpc/include/asm/config_mpc85xx.h
index 8654625fac..191629b628 100644
--- a/arch/powerpc/include/asm/config_mpc85xx.h
+++ b/arch/powerpc/include/asm/config_mpc85xx.h
@@ -65,6 +65,11 @@
#define CONFIG_SYS_FSL_ERRATUM_NMG_DDR120
#define CONFIG_SYS_FSL_ERRATUM_NMG_LBC103
#define CONFIG_SYS_FSL_ERRATUM_NMG_ETSEC129
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 1
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
+#define CONFIG_SYS_FSL_RMU
+#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM 2
#elif defined(CONFIG_MPC8555)
#define CONFIG_MAX_CPUS 1
@@ -85,6 +90,11 @@
#define MAX_QE_RISC 2
#define QE_NUM_OF_SNUM 28
#define CONFIG_SYS_CCSRBAR_DEFAULT 0xff700000
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 1
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
+#define CONFIG_SYS_FSL_RMU
+#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM 2
#elif defined(CONFIG_MPC8569)
#define CONFIG_MAX_CPUS 1
@@ -94,6 +104,11 @@
#define MAX_QE_RISC 4
#define QE_NUM_OF_SNUM 46
#define CONFIG_SYS_CCSRBAR_DEFAULT 0xff700000
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 1
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
+#define CONFIG_SYS_FSL_RMU
+#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM 2
#elif defined(CONFIG_MPC8572)
#define CONFIG_MAX_CPUS 2
@@ -298,6 +313,11 @@
#define CONFIG_SYS_CCSRBAR_DEFAULT 0xff700000
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
#define CONFIG_SYS_FSL_ERRATUM_ESDHC_A001
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
+#define CONFIG_SYS_FSL_RMU
+#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM 2
#elif defined(CONFIG_PPC_P2040)
#define CONFIG_MAX_CPUS 4
@@ -317,6 +337,9 @@
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
#elif defined(CONFIG_PPC_P2041)
#define CONFIG_MAX_CPUS 4
@@ -338,6 +361,9 @@
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
#elif defined(CONFIG_PPC_P3041)
#define CONFIG_MAX_CPUS 4
@@ -359,6 +385,9 @@
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
#elif defined(CONFIG_PPC_P3060)
#define CONFIG_MAX_CPUS 8
@@ -375,6 +404,9 @@
#define CONFIG_SYS_CCSRBAR_DEFAULT 0xfe000000
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003
#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
#elif defined(CONFIG_PPC_P4040)
#define CONFIG_MAX_CPUS 4
@@ -387,6 +419,9 @@
#define CONFIG_SYS_CCSRBAR_DEFAULT 0xfe000000
#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
#elif defined(CONFIG_PPC_P4080)
#define CONFIG_MAX_CPUS 8
@@ -417,6 +452,11 @@
#define CONFIG_SYS_P4080_ERRATUM_SERDES_A005
#define CONFIG_SYS_FSL_ERRATUM_CPU_A003999
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
+#define CONFIG_SYS_FSL_RMU
+#define CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM 2
/* P5010 is single core version of P5020 */
#elif defined(CONFIG_PPC_P5010)
@@ -438,6 +478,9 @@
#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
#elif defined(CONFIG_PPC_P5020)
#define CONFIG_MAX_CPUS 2
@@ -458,6 +501,9 @@
#define CONFIG_SYS_FSL_USB_INTERNAL_UTMI_PHY
#define CONFIG_SYS_FSL_ERRATUM_ESDHC111
#define CONFIG_SYS_FSL_ERRATUM_DDR_A003474
+#define CONFIG_SYS_FSL_SRIO_MAX_PORTS 2
+#define CONFIG_SYS_FSL_SRIO_OB_WIN_NUM 9
+#define CONFIG_SYS_FSL_SRIO_IB_WIN_NUM 5
#else
#error Processor type not defined for this platform
diff --git a/arch/powerpc/include/asm/fsl_srio.h b/arch/powerpc/include/asm/fsl_srio.h
new file mode 100644
index 0000000000..a905a266c4
--- /dev/null
+++ b/arch/powerpc/include/asm/fsl_srio.h
@@ -0,0 +1,64 @@
+/*
+ * Copyright 2011-2012 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _FSL_SRIO_H_
+#define _FSL_SRIO_H_
+
+enum atmu_size {
+ ATMU_SIZE_4K = 0xb,
+ ATMU_SIZE_8K,
+ ATMU_SIZE_16K,
+ ATMU_SIZE_32K,
+ ATMU_SIZE_64K,
+ ATMU_SIZE_128K,
+ ATMU_SIZE_256K,
+ ATMU_SIZE_512K,
+ ATMU_SIZE_1M,
+ ATMU_SIZE_2M,
+ ATMU_SIZE_4M,
+ ATMU_SIZE_8M,
+ ATMU_SIZE_16M,
+ ATMU_SIZE_32M,
+ ATMU_SIZE_64M,
+ ATMU_SIZE_128M,
+ ATMU_SIZE_256M,
+ ATMU_SIZE_512M,
+ ATMU_SIZE_1G,
+ ATMU_SIZE_2G,
+ ATMU_SIZE_4G,
+ ATMU_SIZE_8G,
+ ATMU_SIZE_16G,
+ ATMU_SIZE_32G,
+ ATMU_SIZE_64G,
+};
+
+#define atmu_size_mask(sz) (__ilog2_u64(sz) - 1)
+#define atmu_size_bytes(x) (1ULL << ((x & 0x3f) + 1))
+
+extern void srio_init(void);
+#ifdef CONFIG_SRIOBOOT_MASTER
+extern void srio_boot_master(void);
+#ifdef CONFIG_SRIOBOOT_SLAVE_HOLDOFF
+extern void srio_boot_master_release_slave(void);
+#endif
+#endif
+#endif
diff --git a/arch/powerpc/include/asm/immap_85xx.h b/arch/powerpc/include/asm/immap_85xx.h
index 9b08cb8c1a..632e3c1669 100644
--- a/arch/powerpc/include/asm/immap_85xx.h
+++ b/arch/powerpc/include/asm/immap_85xx.h
@@ -1353,171 +1353,235 @@ typedef struct ccsr_cpm {
} ccsr_cpm_t;
#endif
-/* RapidIO Registers */
-typedef struct ccsr_rio {
- u32 didcar; /* Device Identity Capability */
- u32 dicar; /* Device Information Capability */
- u32 aidcar; /* Assembly Identity Capability */
- u32 aicar; /* Assembly Information Capability */
- u32 pefcar; /* Processing Element Features Capability */
- u32 spicar; /* Switch Port Information Capability */
- u32 socar; /* Source Operations Capability */
- u32 docar; /* Destination Operations Capability */
+#ifdef CONFIG_SYS_SRIO
+/* Architectural regsiters */
+struct rio_arch {
+ u32 didcar; /* Device Identity CAR */
+ u32 dicar; /* Device Information CAR */
+ u32 aidcar; /* Assembly Identity CAR */
+ u32 aicar; /* Assembly Information CAR */
+ u32 pefcar; /* Processing Element Features CAR */
+ u8 res0[4];
+ u32 socar; /* Source Operations CAR */
+ u32 docar; /* Destination Operations CAR */
u8 res1[32];
- u32 msr; /* Mailbox Cmd And Status */
- u32 pwdcsr; /* Port-Write & Doorbell Cmd And Status */
+ u32 mcsr; /* Mailbox CSR */
+ u32 pwdcsr; /* Port-Write and Doorbell CSR */
u8 res2[4];
u32 pellccsr; /* Processing Element Logic Layer CCSR */
u8 res3[12];
- u32 lcsbacsr; /* Local Cfg Space Base Addr Cmd & Status */
- u32 bdidcsr; /* Base Device ID Cmd & Status */
+ u32 lcsbacsr; /* Local Configuration Space BACSR */
+ u32 bdidcsr; /* Base Device ID CSR */
u8 res4[4];
- u32 hbdidlcsr; /* Host Base Device ID Lock Cmd & Status */
- u32 ctcsr; /* Component Tag Cmd & Status */
- u8 res5[144];
- u32 pmbh0csr; /* Port Maint. Block Hdr 0 Cmd & Status */
- u8 res6[28];
- u32 pltoccsr; /* Port Link Time-out Ctrl Cmd & Status */
- u32 prtoccsr; /* Port Response Time-out Ctrl Cmd & Status */
- u8 res7[20];
- u32 pgccsr; /* Port General Cmd & Status */
- u32 plmreqcsr; /* Port Link Maint. Request Cmd & Status */
- u32 plmrespcsr; /* Port Link Maint. Response Cmd & Status */
- u32 plascsr; /* Port Local Ackid Status Cmd & Status */
- u8 res8[12];
- u32 pescsr; /* Port Error & Status Cmd & Status */
- u32 pccsr; /* Port Control Cmd & Status */
- u8 res9[65184];
- u32 cr; /* Port Control Cmd & Status */
- u8 res10[12];
- u32 pcr; /* Port Configuration */
- u32 peir; /* Port Error Injection */
- u8 res11[3048];
- u32 rowtar0; /* RIO Outbound Window Translation Addr 0 */
- u8 res12[12];
- u32 rowar0; /* RIO Outbound Attrs 0 */
- u8 res13[12];
- u32 rowtar1; /* RIO Outbound Window Translation Addr 1 */
- u8 res14[4];
- u32 rowbar1; /* RIO Outbound Window Base Addr 1 */
- u8 res15[4];
- u32 rowar1; /* RIO Outbound Attrs 1 */
- u8 res16[12];
- u32 rowtar2; /* RIO Outbound Window Translation Addr 2 */
- u8 res17[4];
- u32 rowbar2; /* RIO Outbound Window Base Addr 2 */
- u8 res18[4];
- u32 rowar2; /* RIO Outbound Attrs 2 */
- u8 res19[12];
- u32 rowtar3; /* RIO Outbound Window Translation Addr 3 */
- u8 res20[4];
- u32 rowbar3; /* RIO Outbound Window Base Addr 3 */
- u8 res21[4];
- u32 rowar3; /* RIO Outbound Attrs 3 */
- u8 res22[12];
- u32 rowtar4; /* RIO Outbound Window Translation Addr 4 */
- u8 res23[4];
- u32 rowbar4; /* RIO Outbound Window Base Addr 4 */
- u8 res24[4];
- u32 rowar4; /* RIO Outbound Attrs 4 */
- u8 res25[12];
- u32 rowtar5; /* RIO Outbound Window Translation Addr 5 */
- u8 res26[4];
- u32 rowbar5; /* RIO Outbound Window Base Addr 5 */
- u8 res27[4];
- u32 rowar5; /* RIO Outbound Attrs 5 */
- u8 res28[12];
- u32 rowtar6; /* RIO Outbound Window Translation Addr 6 */
- u8 res29[4];
- u32 rowbar6; /* RIO Outbound Window Base Addr 6 */
- u8 res30[4];
- u32 rowar6; /* RIO Outbound Attrs 6 */
- u8 res31[12];
- u32 rowtar7; /* RIO Outbound Window Translation Addr 7 */
- u8 res32[4];
- u32 rowbar7; /* RIO Outbound Window Base Addr 7 */
- u8 res33[4];
- u32 rowar7; /* RIO Outbound Attrs 7 */
- u8 res34[12];
- u32 rowtar8; /* RIO Outbound Window Translation Addr 8 */
- u8 res35[4];
- u32 rowbar8; /* RIO Outbound Window Base Addr 8 */
- u8 res36[4];
- u32 rowar8; /* RIO Outbound Attrs 8 */
- u8 res37[76];
- u32 riwtar4; /* RIO Inbound Window Translation Addr 4 */
- u8 res38[4];
- u32 riwbar4; /* RIO Inbound Window Base Addr 4 */
- u8 res39[4];
- u32 riwar4; /* RIO Inbound Attrs 4 */
- u8 res40[12];
- u32 riwtar3; /* RIO Inbound Window Translation Addr 3 */
- u8 res41[4];
- u32 riwbar3; /* RIO Inbound Window Base Addr 3 */
- u8 res42[4];
- u32 riwar3; /* RIO Inbound Attrs 3 */
- u8 res43[12];
- u32 riwtar2; /* RIO Inbound Window Translation Addr 2 */
- u8 res44[4];
- u32 riwbar2; /* RIO Inbound Window Base Addr 2 */
- u8 res45[4];
- u32 riwar2; /* RIO Inbound Attrs 2 */
- u8 res46[12];
- u32 riwtar1; /* RIO Inbound Window Translation Addr 1 */
- u8 res47[4];
- u32 riwbar1; /* RIO Inbound Window Base Addr 1 */
- u8 res48[4];
- u32 riwar1; /* RIO Inbound Attrs 1 */
- u8 res49[12];
- u32 riwtar0; /* RIO Inbound Window Translation Addr 0 */
- u8 res50[12];
- u32 riwar0; /* RIO Inbound Attrs 0 */
- u8 res51[12];
- u32 pnfedr; /* Port Notification/Fatal Error Detect */
- u32 pnfedir; /* Port Notification/Fatal Error Detect */
- u32 pnfeier; /* Port Notification/Fatal Error IRQ Enable */
- u32 pecr; /* Port Error Control */
- u32 pepcsr0; /* Port Error Packet/Control Symbol 0 */
- u32 pepr1; /* Port Error Packet 1 */
- u32 pepr2; /* Port Error Packet 2 */
- u8 res52[4];
- u32 predr; /* Port Recoverable Error Detect */
- u8 res53[4];
- u32 pertr; /* Port Error Recovery Threshold */
- u32 prtr; /* Port Retry Threshold */
- u8 res54[464];
- u32 omr; /* Outbound Mode */
- u32 osr; /* Outbound Status */
- u32 eodqtpar; /* Extended Outbound Desc Queue Tail Ptr Addr */
- u32 odqtpar; /* Outbound Desc Queue Tail Ptr Addr */
- u32 eosar; /* Extended Outbound Unit Source Addr */
- u32 osar; /* Outbound Unit Source Addr */
- u32 odpr; /* Outbound Destination Port */
- u32 odatr; /* Outbound Destination Attrs */
- u32 odcr; /* Outbound Doubleword Count */
- u32 eodqhpar; /* Extended Outbound Desc Queue Head Ptr Addr */
- u32 odqhpar; /* Outbound Desc Queue Head Ptr Addr */
- u8 res55[52];
- u32 imr; /* Outbound Mode */
- u32 isr; /* Inbound Status */
- u32 eidqtpar; /* Extended Inbound Desc Queue Tail Ptr Addr */
- u32 idqtpar; /* Inbound Desc Queue Tail Ptr Addr */
- u32 eifqhpar; /* Extended Inbound Frame Queue Head Ptr Addr */
- u32 ifqhpar; /* Inbound Frame Queue Head Ptr Addr */
- u8 res56[1000];
- u32 dmr; /* Doorbell Mode */
- u32 dsr; /* Doorbell Status */
- u32 edqtpar; /* Extended Doorbell Queue Tail Ptr Addr */
- u32 dqtpar; /* Doorbell Queue Tail Ptr Addr */
- u32 edqhpar; /* Extended Doorbell Queue Head Ptr Addr */
- u32 dqhpar; /* Doorbell Queue Head Ptr Addr */
- u8 res57[104];
- u32 pwmr; /* Port-Write Mode */
- u32 pwsr; /* Port-Write Status */
- u32 epwqbar; /* Extended Port-Write Queue Base Addr */
- u32 pwqbar; /* Port-Write Queue Base Addr */
- u8 res58[60176];
-} ccsr_rio_t;
+ u32 hbdidlcsr; /* Host Base Device ID Lock CSR */
+ u32 ctcsr; /* Component Tag CSR */
+};
+
+/* Extended Features Space: 1x/4x LP-Serial Port registers */
+struct rio_lp_serial_port {
+ u32 plmreqcsr; /* Port Link Maintenance Request CSR */
+ u32 plmrespcsr; /* Port Link Maintenance Response CS */
+ u32 plascsr; /* Port Local Ackid Status CSR */
+ u8 res0[12];
+ u32 pescsr; /* Port Error and Status CSR */
+ u32 pccsr; /* Port Control CSR */
+};
+
+/* Extended Features Space: 1x/4x LP-Serial registers */
+struct rio_lp_serial {
+ u32 pmbh0csr; /* Port Maintenance Block Header 0 CSR */
+ u8 res0[28];
+ u32 pltoccsr; /* Port Link Time-out CCSR */
+ u32 prtoccsr; /* Port Response Time-out CCSR */
+ u8 res1[20];
+ u32 pgccsr; /* Port General CSR */
+ struct rio_lp_serial_port port[CONFIG_SYS_FSL_SRIO_MAX_PORTS];
+};
+
+/* Logical error reporting registers */
+struct rio_logical_err {
+ u32 erbh; /* Error Reporting Block Header Register */
+ u8 res0[4];
+ u32 ltledcsr; /* Logical/Transport layer error DCSR */
+ u32 ltleecsr; /* Logical/Transport layer error ECSR */
+ u8 res1[4];
+ u32 ltlaccsr; /* Logical/Transport layer ACCSR */
+ u32 ltldidccsr; /* Logical/Transport layer DID CCSR */
+ u32 ltlcccsr; /* Logical/Transport layer control CCSR */
+};
+
+/* Physical error reporting port registers */
+struct rio_phys_err_port {
+ u32 edcsr; /* Port error detect CSR */
+ u32 erecsr; /* Port error rate enable CSR */
+ u32 ecacsr; /* Port error capture attributes CSR */
+ u32 pcseccsr0; /* Port packet/control symbol ECCSR 0 */
+ u32 peccsr[3]; /* Port error capture CSR */
+ u8 res0[12];
+ u32 ercsr; /* Port error rate CSR */
+ u32 ertcsr; /* Port error rate threshold CSR */
+ u8 res1[16];
+};
+
+/* Physical error reporting registers */
+struct rio_phys_err {
+ struct rio_phys_err_port port[CONFIG_SYS_FSL_SRIO_MAX_PORTS];
+};
+
+/* Implementation Space: General Port-Common */
+struct rio_impl_common {
+ u8 res0[4];
+ u32 llcr; /* Logical Layer Configuration Register */
+ u8 res1[8];
+ u32 epwisr; /* Error / Port-Write Interrupt SR */
+ u8 res2[12];
+ u32 lretcr; /* Logical Retry Error Threshold CR */
+ u8 res3[92];
+ u32 pretcr; /* Physical Retry Erorr Threshold CR */
+ u8 res4[124];
+};
+
+/* Implementation Space: Port Specific */
+struct rio_impl_port_spec {
+ u32 adidcsr; /* Port Alt. Device ID CSR */
+ u8 res0[28];
+ u32 ptaacr; /* Port Pass-Through/Accept-All CR */
+ u32 lopttlcr;
+ u8 res1[8];
+ u32 iecsr; /* Port Implementation Error CSR */
+ u8 res2[12];
+ u32 pcr; /* Port Phsyical Configuration Register */
+ u8 res3[20];
+ u32 slcsr; /* Port Serial Link CSR */
+ u8 res4[4];
+ u32 sleicr; /* Port Serial Link Error Injection */
+ u32 a0txcr; /* Port Arbitration 0 Tx CR */
+ u32 a1txcr; /* Port Arbitration 1 Tx CR */
+ u32 a2txcr; /* Port Arbitration 2 Tx CR */
+ u32 mreqtxbacr[3]; /* Port Request Tx Buffer ACR */
+ u32 mrspfctxbacr; /* Port Response/Flow Control Tx Buffer ACR */
+};
+
+/* Implementation Space: register */
+struct rio_implement {
+ struct rio_impl_common com;
+ struct rio_impl_port_spec port[CONFIG_SYS_FSL_SRIO_MAX_PORTS];
+};
+
+/* Revision Control Register */
+struct rio_rev_ctrl {
+ u32 ipbrr[2]; /* IP Block Revision Register */
+};
+
+struct rio_atmu_row {
+ u32 rowtar; /* RapidIO Outbound Window TAR */
+ u32 rowtear; /* RapidIO Outbound Window TEAR */
+ u32 rowbar;
+ u8 res0[4];
+ u32 rowar; /* RapidIO Outbound Attributes Register */
+ u32 rowsr[3]; /* Port RapidIO outbound window segment register */
+};
+
+struct rio_atmu_riw {
+ u32 riwtar; /* RapidIO Inbound Window Translation AR */
+ u8 res0[4];
+ u32 riwbar; /* RapidIO Inbound Window Base AR */
+ u8 res1[4];
+ u32 riwar; /* RapidIO Inbound Attributes Register */
+ u8 res2[12];
+};
+
+/* ATMU window registers */
+struct rio_atmu_win {
+ struct rio_atmu_row outbw[CONFIG_SYS_FSL_SRIO_OB_WIN_NUM];
+ u8 res0[64];
+ struct rio_atmu_riw inbw[CONFIG_SYS_FSL_SRIO_IB_WIN_NUM];
+};
+
+struct rio_atmu {
+ struct rio_atmu_win port[CONFIG_SYS_FSL_SRIO_MAX_PORTS];
+};
+
+#ifdef CONFIG_SYS_FSL_RMU
+struct rio_msg {
+ u32 omr; /* Outbound Mode Register */
+ u32 osr; /* Outbound Status Register */
+ u32 eodqdpar; /* Extended Outbound DQ DPAR */
+ u32 odqdpar; /* Outbound Descriptor Queue DPAR */
+ u32 eosar; /* Extended Outbound Unit Source AR */
+ u32 osar; /* Outbound Unit Source AR */
+ u32 odpr; /* Outbound Destination Port Register */
+ u32 odatr; /* Outbound Destination Attributes Register */
+ u32 odcr; /* Outbound Doubleword Count Register */
+ u32 eodqepar; /* Extended Outbound DQ EPAR */
+ u32 odqepar; /* Outbound Descriptor Queue EPAR */
+ u32 oretr; /* Outbound Retry Error Threshold Register */
+ u32 omgr; /* Outbound Multicast Group Register */
+ u32 omlr; /* Outbound Multicast List Register */
+ u8 res0[40];
+ u32 imr; /* Outbound Mode Register */
+ u32 isr; /* Inbound Status Register */
+ u32 eidqdpar; /* Extended Inbound Descriptor Queue DPAR */
+ u32 idqdpar; /* Inbound Descriptor Queue DPAR */
+ u32 eifqepar; /* Extended Inbound Frame Queue EPAR */
+ u32 ifqepar; /* Inbound Frame Queue EPAR */
+ u32 imirir; /* Inbound Maximum Interrutp RIR */
+ u8 res1[4];
+ u32 eihqepar; /* Extended inbound message header queue EPAR */
+ u32 ihqepar; /* Inbound message header queue EPAR */
+ u8 res2[120];
+};
+
+struct rio_dbell {
+ u32 odmr; /* Outbound Doorbell Mode Register */
+ u32 odsr; /* Outbound Doorbell Status Register */
+ u8 res0[16];
+ u32 oddpr; /* Outbound Doorbell Destination Port */
+ u32 oddatr; /* Outbound Doorbell Destination AR */
+ u8 res1[12];
+ u32 oddretr; /* Outbound Doorbell Retry Threshold CR */
+ u8 res2[48];
+ u32 idmr; /* Inbound Doorbell Mode Register */
+ u32 idsr; /* Inbound Doorbell Status Register */
+ u32 iedqdpar; /* Extended Inbound Doorbell Queue DPAR */
+ u32 iqdpar; /* Inbound Doorbell Queue DPAR */
+ u32 iedqepar; /* Extended Inbound Doorbell Queue EPAR */
+ u32 idqepar; /* Inbound Doorbell Queue EPAR */
+ u32 idmirir; /* Inbound Doorbell Max Interrupt RIR */
+};
+
+struct rio_pw {
+ u32 pwmr; /* Port-Write Mode Register */
+ u32 pwsr; /* Port-Write Status Register */
+ u32 epwqbar; /* Extended Port-Write Queue BAR */
+ u32 pwqbar; /* Port-Write Queue Base Address Register */
+};
+#endif
+
+/* RapidIO Registers */
+struct ccsr_rio {
+ struct rio_arch arch;
+ u8 res0[144];
+ struct rio_lp_serial lp_serial;
+ u8 res1[1152];
+ struct rio_logical_err logical_err;
+ u8 res2[32];
+ struct rio_phys_err phys_err;
+ u8 res3[63808];
+ struct rio_implement impl;
+ u8 res4[2552];
+ struct rio_rev_ctrl rev;
+ struct rio_atmu atmu;
+#ifdef CONFIG_SYS_FSL_RMU
+ u8 res5[8192];
+ struct rio_msg msg[CONFIG_SYS_FSL_SRIO_MSG_UNIT_NUM];
+ u8 res6[512];
+ struct rio_dbell dbell;
+ u8 res7[100];
+ struct rio_pw pw;
+#endif
+};
+#endif
/* Quick Engine Block Pin Muxing Registers */
typedef struct par_io {
@@ -2443,6 +2507,7 @@ struct ccsr_rman {
#define CONFIG_SYS_MPC85xx_PIC_OFFSET 0x40000
#define CONFIG_SYS_MPC85xx_GUTS_OFFSET 0xE0000
+#define CONFIG_SYS_FSL_SRIO_OFFSET 0xC0000
#define CONFIG_SYS_FSL_CPC_ADDR \
(CONFIG_SYS_CCSRBAR + CONFIG_SYS_FSL_CPC_OFFSET)
@@ -2516,6 +2581,8 @@ struct ccsr_rman {
(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_FM1_DTSEC1_OFFSET)
#define CONFIG_SYS_FSL_FM2_ADDR \
(CONFIG_SYS_IMMR + CONFIG_SYS_FSL_FM2_OFFSET)
+#define CONFIG_SYS_FSL_SRIO_ADDR \
+ (CONFIG_SYS_IMMR + CONFIG_SYS_FSL_SRIO_OFFSET)
#define CONFIG_SYS_PCI1_ADDR \
(CONFIG_SYS_IMMR + CONFIG_SYS_MPC85xx_PCI1_OFFSET)
diff --git a/arch/powerpc/include/asm/u-boot.h b/arch/powerpc/include/asm/u-boot.h
index b2fa2b574b..1552054117 100644
--- a/arch/powerpc/include/asm/u-boot.h
+++ b/arch/powerpc/include/asm/u-boot.h
@@ -63,7 +63,6 @@ typedef struct bd_info {
unsigned long bi_vcofreq; /* VCO Freq, in MHz */
#endif
unsigned long bi_bootflags; /* boot / reboot flag (Unused) */
- unsigned long bi_ip_addr; /* IP Address */
unsigned char bi_enetaddr[6]; /* OLD: see README.enetaddr */
unsigned short bi_ethspeed; /* Ethernet speed in Mbps */
unsigned long bi_intfreq; /* Internal Freq, in MHz */
diff --git a/arch/powerpc/lib/board.c b/arch/powerpc/lib/board.c
index d5b75e5fbd..fea310eedd 100644
--- a/arch/powerpc/lib/board.c
+++ b/arch/powerpc/lib/board.c
@@ -877,9 +877,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
#endif
#endif /* CONFIG_CMD_NET */
- /* IP Address */
- bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-
WATCHDOG_RESET();
#if defined(CONFIG_PCI) && !defined(CONFIG_SYS_EARLY_PCI_INIT)
@@ -935,14 +932,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);
-#if defined(CONFIG_CMD_NET)
- {
- char *s = getenv("bootfile");
-
- if (s != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
- }
-#endif
WATCHDOG_RESET();
diff --git a/arch/sandbox/include/asm/u-boot.h b/arch/sandbox/include/asm/u-boot.h
index 166ef14341..de8120a723 100644
--- a/arch/sandbox/include/asm/u-boot.h
+++ b/arch/sandbox/include/asm/u-boot.h
@@ -45,7 +45,6 @@ typedef struct bd_info {
unsigned long bi_sramstart; /* start of SRAM memory */
unsigned long bi_sramsize; /* size of SRAM memory */
unsigned long bi_bootflags; /* boot / reboot flag (for LynxOS) */
- unsigned long bi_ip_addr; /* IP Address */
unsigned short bi_ethspeed; /* Ethernet speed in Mbps */
unsigned long bi_intfreq; /* Internal Freq, in MHz */
unsigned long bi_busfreq; /* Bus Freq, in MHz */
diff --git a/arch/sandbox/lib/board.c b/arch/sandbox/lib/board.c
index 306d1ec332..c173bf96f0 100644
--- a/arch/sandbox/lib/board.c
+++ b/arch/sandbox/lib/board.c
@@ -235,9 +235,6 @@ void board_init_r(gd_t *id, ulong dest_addr)
/* initialize environment */
env_relocate();
- /* IP Address */
- gd->bd->bi_ip_addr = getenv_IPaddr("ipaddr");
-
stdio_init(); /* get the devices list going. */
jumptable_init();
diff --git a/arch/sh/include/asm/u-boot.h b/arch/sh/include/asm/u-boot.h
index 45745129a0..6c04daf3bc 100644
--- a/arch/sh/include/asm/u-boot.h
+++ b/arch/sh/include/asm/u-boot.h
@@ -33,7 +33,6 @@ typedef struct bd_info {
unsigned long bi_flashoffset; /* reserved area for startup monitor */
unsigned long bi_sramstart; /* start of SRAM memory */
unsigned long bi_sramsize; /* size of SRAM memory */
- unsigned long bi_ip_addr; /* IP Address */
unsigned long bi_baudrate; /* Console Baudrate */
unsigned long bi_boot_params; /* where this board expects params */
} bd_t;
diff --git a/arch/sh/lib/board.c b/arch/sh/lib/board.c
index eb021e806c..34d7881f44 100644
--- a/arch/sh/lib/board.c
+++ b/arch/sh/lib/board.c
@@ -100,14 +100,6 @@ static int sh_mem_env_init(void)
return 0;
}
-#if defined(CONFIG_CMD_NET)
-static int sh_net_init(void)
-{
- gd->bd->bi_ip_addr = getenv_IPaddr("ipaddr");
- return 0;
-}
-#endif
-
#if defined(CONFIG_CMD_MMC)
static int sh_mmc_init(void)
{
@@ -145,9 +137,6 @@ init_fnc_t *init_sequence[] =
#ifdef CONFIG_BOARD_LATE_INIT
board_late_init,
#endif
-#if defined(CONFIG_CMD_NET)
- sh_net_init, /* SH specific eth init */
-#endif
#if defined(CONFIG_CMD_MMC)
sh_mmc_init,
#endif
@@ -201,15 +190,8 @@ void sh_generic_init(void)
bb_miiphy_init();
#endif
#if defined(CONFIG_CMD_NET)
- {
- char *s;
- puts("Net: ");
- eth_initialize(gd->bd);
-
- s = getenv("bootfile");
- if (s != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
- }
+ puts("Net: ");
+ eth_initialize(gd->bd);
#endif /* CONFIG_CMD_NET */
while (1) {
diff --git a/arch/sparc/include/asm/u-boot.h b/arch/sparc/include/asm/u-boot.h
index 1d94087aab..8d011185a0 100644
--- a/arch/sparc/include/asm/u-boot.h
+++ b/arch/sparc/include/asm/u-boot.h
@@ -51,7 +51,6 @@ typedef struct bd_info {
unsigned long bi_sramstart; /* start of SRAM memory */
unsigned long bi_sramsize; /* size of SRAM memory */
unsigned long bi_bootflags; /* boot / reboot flag (for LynxOS) */
- unsigned long bi_ip_addr; /* IP Address */
unsigned short bi_ethspeed; /* Ethernet speed in Mbps */
unsigned long bi_intfreq; /* Internal Freq, in MHz */
unsigned long bi_busfreq; /* Bus Freq, in MHz */
diff --git a/arch/sparc/lib/board.c b/arch/sparc/lib/board.c
index c0d260840c..7e48775dfe 100644
--- a/arch/sparc/lib/board.c
+++ b/arch/sparc/lib/board.c
@@ -333,8 +333,6 @@ void board_init_f(ulong bootflag)
mac_read_from_eeprom();
#endif
- /* IP Address */
- bd->bi_ip_addr = getenv_IPaddr("ipaddr");
#if defined(CONFIG_PCI)
/*
* Do pci configuration
@@ -359,11 +357,6 @@ void board_init_f(ulong bootflag)
/* Initialize from environment */
load_addr = getenv_ulong("loadaddr", 16, load_addr);
-#if defined(CONFIG_CMD_NET)
- if ((s = getenv("bootfile")) != NULL) {
- copy_filename(BootFile, s, sizeof(BootFile));
- }
-#endif /* CONFIG_CMD_NET */
WATCHDOG_RESET();
diff --git a/arch/x86/include/asm/init_helpers.h b/arch/x86/include/asm/init_helpers.h
index 192f18e1d5..8afb443290 100644
--- a/arch/x86/include/asm/init_helpers.h
+++ b/arch/x86/include/asm/init_helpers.h
@@ -36,9 +36,7 @@ int set_reloc_flag_r(void);
int mem_malloc_init_r(void);
int init_bd_struct_r(void);
int flash_init_r(void);
-int init_ip_address_r(void);
int status_led_set_r(void);
-int set_bootfile_r(void);
int set_load_addr_r(void);
#endif /* !_INIT_HELPERS_H_ */
diff --git a/arch/x86/include/asm/u-boot.h b/arch/x86/include/asm/u-boot.h
index 26450ebc44..da667c50a4 100644
--- a/arch/x86/include/asm/u-boot.h
+++ b/arch/x86/include/asm/u-boot.h
@@ -45,7 +45,6 @@ typedef struct bd_info {
unsigned long bi_sramstart; /* start of SRAM memory */
unsigned long bi_sramsize; /* size of SRAM memory */
unsigned long bi_bootflags; /* boot / reboot flag (for LynxOS) */
- unsigned long bi_ip_addr; /* IP Address */
unsigned short bi_ethspeed; /* Ethernet speed in Mbps */
unsigned long bi_intfreq; /* Internal Freq, in MHz */
unsigned long bi_busfreq; /* Bus Freq, in MHz */
diff --git a/arch/x86/lib/board.c b/arch/x86/lib/board.c
index 5f0b62cea6..90cf7fc888 100644
--- a/arch/x86/lib/board.c
+++ b/arch/x86/lib/board.c
@@ -157,9 +157,6 @@ init_fnc_t *init_sequence_r[] = {
flash_init_r,
#endif
env_relocate_r,
-#ifdef CONFIG_CMD_NET
- init_ip_address_r,
-#endif
#ifdef CONFIG_PCI
pci_init_r,
#endif
@@ -180,9 +177,6 @@ init_fnc_t *init_sequence_r[] = {
status_led_set_r,
#endif
set_load_addr_r,
-#if defined(CONFIG_CMD_NET)
- set_bootfile_r,
-#endif
#if defined(CONFIG_CMD_IDE)
ide_init_r,
#endif
diff --git a/arch/x86/lib/init_helpers.c b/arch/x86/lib/init_helpers.c
index 9f4dee034f..9ec34ff992 100644
--- a/arch/x86/lib/init_helpers.c
+++ b/arch/x86/lib/init_helpers.c
@@ -179,14 +179,6 @@ int flash_init_r(void)
}
#endif
-int init_ip_address_r(void)
-{
- /* IP Address */
- bd_data.bi_ip_addr = getenv_IPaddr("ipaddr");
-
- return 0;
-}
-
#ifdef CONFIG_STATUS_LED
int status_led_set_r(void)
{
@@ -196,18 +188,6 @@ int status_led_set_r(void)
}
#endif
-int set_bootfile_r(void)
-{
- char *s;
-
- s = getenv("bootfile");
-
- if (s != NULL)
- copy_filename(BootFile, s, sizeof(BootFile));
-
- return 0;
-}
-
int set_load_addr_r(void)
{
/* Initialize from environment */
diff --git a/board/gdsys/neo/Makefile b/board/AndesTech/adp-ag102/Makefile
index dc5b5b887a..1cbf2d46dd 100644
--- a/board/gdsys/neo/Makefile
+++ b/board/AndesTech/adp-ag102/Makefile
@@ -1,6 +1,6 @@
#
-# (C) Copyright 2007
-# Stefan Roese, DENX Software Engineering, sr@denx.de.
+# Copyright (C) 2011 Andes Technology Corporation
+# Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
#
# See file CREDITS for list of people who contributed to this
# project.
@@ -25,15 +25,13 @@ include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).o
-COBJS = $(BOARD).o
-SOBJS =
+COBJS := adp-ag102.o
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
-OBJS := $(addprefix $(obj),$(COBJS))
-SOBJS := $(addprefix $(obj),$(SOBJS))
+OBJS := $(addprefix $(obj),$(COBJS) $(SOBJS))
-$(LIB): $(OBJS) $(SOBJS)
- $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+$(LIB): $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
#########################################################################
diff --git a/board/AndesTech/adp-ag102/adp-ag102.c b/board/AndesTech/adp-ag102/adp-ag102.c
new file mode 100644
index 0000000000..5a25632250
--- /dev/null
+++ b/board/AndesTech/adp-ag102/adp-ag102.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#include <common.h>
+#include <netdev.h>
+#include <asm/io.h>
+
+#include <faraday/ftsdc010.h>
+#ifdef CONFIG_FTSMC020
+#include <faraday/ftsmc020.h>
+#endif
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/*
+ * Miscellaneous platform dependent initializations
+ */
+
+int board_init(void)
+{
+ /*
+ * refer to BOOT_PARAMETER_PA_BASE within
+ * "linux/arch/nds32/include/asm/misc_spec.h"
+ */
+ gd->bd->bi_arch_number = MACH_TYPE_ADPAG102;
+ gd->bd->bi_boot_params = PHYS_SDRAM_0 + 0x400;
+
+#if !defined(CONFIG_SYS_NO_FLASH)
+ ftsmc020_init(); /* initialize Flash */
+#endif /* CONFIG_SYS_NO_FLASH */
+ return 0;
+}
+
+int dram_init(void)
+{
+ unsigned long sdram_base = PHYS_SDRAM_0;
+ unsigned long expected_size = PHYS_SDRAM_0_SIZE;
+ unsigned long actual_size;
+
+ actual_size = get_ram_size((void *)sdram_base, expected_size);
+
+ gd->ram_size = actual_size;
+
+ if (expected_size != actual_size) {
+ printf("Warning: Only %lu of %lu MiB SDRAM is working\n",
+ actual_size >> 20, expected_size >> 20);
+ }
+
+ return 0;
+}
+
+int board_eth_init(bd_t *bd)
+{
+ return ftgmac100_initialize(bd);
+}
+
+#if !defined(CONFIG_SYS_NO_FLASH)
+ulong board_flash_get_legacy(ulong base, int banknum, flash_info_t *info)
+{
+ if (banknum == 0) { /* non-CFI boot flash */
+ info->portwidth = FLASH_CFI_8BIT;
+ info->chipwidth = FLASH_CFI_BY8;
+ info->interface = FLASH_CFI_X8;
+ return 1;
+ } else {
+ return 0;
+ }
+}
+#endif /* CONFIG_SYS_NO_FLASH */
+
+#if defined(CONFIG_CMD_PCI) || defined(CONFIG_PCI)
+void pci_init_board(void)
+{
+ /* should be pci_ftpci100_init() */
+ extern void pci_ftpci_init();
+
+ pci_ftpci_init();
+}
+#endif
+
+#ifdef CONFIG_GENERIC_MMC
+int board_mmc_init(bd_t *bis)
+{
+ ftsdc010_mmc_init(0);
+ return 0;
+}
+#endif
diff --git a/board/Marvell/db64360/mv_eth.c b/board/Marvell/db64360/mv_eth.c
index e89ea43d7b..1874cd1e73 100644
--- a/board/Marvell/db64360/mv_eth.c
+++ b/board/Marvell/db64360/mv_eth.c
@@ -95,8 +95,6 @@ int mv64360_eth_xmit (struct eth_device *, volatile void *packet, int length);
#ifndef UPDATE_STATS_BY_SOFTWARE
static void mv64360_eth_print_stat (struct eth_device *dev);
#endif
-/* Processes a received packet */
-extern void NetReceive (volatile uchar *, int);
extern unsigned int INTERNAL_REG_BASE_ADDR;
@@ -192,8 +190,7 @@ int db64360_eth_poll (struct eth_device *dev)
return mv64360_eth_receive (dev);
}
-int db64360_eth_transmit (struct eth_device *dev, volatile void *packet,
- int length)
+int db64360_eth_transmit(struct eth_device *dev, void *packet, int length)
{
mv64360_eth_xmit (dev, packet, length);
return 0;
diff --git a/board/Marvell/db64360/mv_eth.h b/board/Marvell/db64360/mv_eth.h
index 142910b598..bd8e05dafd 100644
--- a/board/Marvell/db64360/mv_eth.h
+++ b/board/Marvell/db64360/mv_eth.h
@@ -167,9 +167,7 @@ struct mv64360_eth_priv {
int mv64360_eth_init (struct eth_device *dev);
int mv64360_eth_stop (struct eth_device *dev);
-int mv64360_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
-/* return db64360_eth0_poll(); */
-
+int mv64360_eth_start_xmit(struct eth_device *dev, void *packet, int length);
int mv64360_eth_open (struct eth_device *dev);
diff --git a/board/Marvell/db64460/mv_eth.c b/board/Marvell/db64460/mv_eth.c
index a763d795cb..a24a7e8072 100644
--- a/board/Marvell/db64460/mv_eth.c
+++ b/board/Marvell/db64460/mv_eth.c
@@ -95,8 +95,6 @@ int mv64460_eth_xmit (struct eth_device *, volatile void *packet, int length);
#ifndef UPDATE_STATS_BY_SOFTWARE
static void mv64460_eth_print_stat (struct eth_device *dev);
#endif
-/* Processes a received packet */
-extern void NetReceive (volatile uchar *, int);
extern unsigned int INTERNAL_REG_BASE_ADDR;
@@ -192,8 +190,7 @@ int db64460_eth_poll (struct eth_device *dev)
return mv64460_eth_receive (dev);
}
-int db64460_eth_transmit (struct eth_device *dev, volatile void *packet,
- int length)
+int db64460_eth_transmit(struct eth_device *dev, void *packet, int length)
{
mv64460_eth_xmit (dev, packet, length);
return 0;
diff --git a/board/Marvell/db64460/mv_eth.h b/board/Marvell/db64460/mv_eth.h
index cbe751a4ce..af4e818fe8 100644
--- a/board/Marvell/db64460/mv_eth.h
+++ b/board/Marvell/db64460/mv_eth.h
@@ -166,9 +166,7 @@ struct mv64460_eth_priv {
int mv64460_eth_init (struct eth_device *dev);
int mv64460_eth_stop (struct eth_device *dev);
-int mv64460_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
-/* return db64460_eth0_poll(); */
-
+int mv64460_eth_start_xmit(struct eth_device *dev, void *packet, int length);
int mv64460_eth_open (struct eth_device *dev);
diff --git a/board/avnet/fx12mm/.gitignore b/board/avnet/fx12mm/.gitignore
deleted file mode 100644
index b644f59941..0000000000
--- a/board/avnet/fx12mm/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-config.tmp
diff --git a/board/avnet/v5fx30teval/.gitignore b/board/avnet/v5fx30teval/.gitignore
deleted file mode 100644
index f6418a0c50..0000000000
--- a/board/avnet/v5fx30teval/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/config.tmp
diff --git a/board/cloudengines/pogo_e02/Makefile b/board/cloudengines/pogo_e02/Makefile
new file mode 100644
index 0000000000..7f866910e8
--- /dev/null
+++ b/board/cloudengines/pogo_e02/Makefile
@@ -0,0 +1,43 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; If not, see <http://www.gnu.org/licenses/>.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+COBJS := pogo_e02.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/cloudengines/pogo_e02/kwbimage.cfg b/board/cloudengines/pogo_e02/kwbimage.cfg
new file mode 100644
index 0000000000..a02e88d97b
--- /dev/null
+++ b/board/cloudengines/pogo_e02/kwbimage.cfg
@@ -0,0 +1,169 @@
+#
+# Copyright (C) 2012
+# David Purdy <david.c.purdy@gmail.com>
+#
+# Based on Kirkwood support:
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Written-by: Prafulla Wadaskar <prafulla <at> marvell.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; If not, see <http://www.gnu.org/licenses/>.
+#
+# Refer docs/README.kwimage for more details about how-to configure
+# and create kirkwood boot image
+#
+
+# Boot Media configurations
+BOOT_FROM nand
+NAND_ECC_MODE default
+NAND_PAGE_SIZE 0x0800
+
+# SOC registers configuration using bootrom header extension
+# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
+
+# Configure RGMII-0 interface pad voltage to 1.8V
+DATA 0xffd100e0 0x1b1b1b9b
+
+#Dram initalization for SINGLE x16 CL=5 @ 400MHz
+DATA 0xffd01400 0x43000c30 # DDR Configuration register
+# bit13-0: 0xc30 (3120 DDR2 clks refresh rate)
+# bit23-14: zero
+# bit24: 1= enable exit self refresh mode on DDR access
+# bit25: 1 required
+# bit29-26: zero
+# bit31-30: 01
+
+DATA 0xffd01404 0x37543000 # DDR Controller Control Low
+# bit 4: 0=addr/cmd in smame cycle
+# bit 5: 0=clk is driven during self refresh, we don't care for APX
+# bit 6: 0=use recommended falling edge of clk for addr/cmd
+# bit14: 0=input buffer always powered up
+# bit18: 1=cpu lock transaction enabled
+# bit23-20: 5=recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
+# bit27-24: 7= CL+2, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
+# bit30-28: 3 required
+# bit31: 0=no additional STARTBURST delay
+
+DATA 0xffd01408 0x22125451 # DDR Timing (Low) (active cycles value +1)
+# bit3-0: TRAS lsbs
+# bit7-4: TRCD
+# bit11- 8: TRP
+# bit15-12: TWR
+# bit19-16: TWTR
+# bit20: TRAS msb
+# bit23-21: 0x0
+# bit27-24: TRRD
+# bit31-28: TRTP
+
+DATA 0xffd0140c 0x00000a33 # DDR Timing (High)
+# bit6-0: TRFC
+# bit8-7: TR2R
+# bit10-9: TR2W
+# bit12-11: TW2W
+# bit31-13: zero required
+
+DATA 0xffd01410 0x000000cc # DDR Address Control
+# bit1-0: 00, Cs0width=x8
+# bit3-2: 11, Cs0size=1Gb
+# bit5-4: 00, Cs1width=x8
+# bit7-6: 11, Cs1size=1Gb
+# bit9-8: 00, Cs2width=nonexistent
+# bit11-10: 00, Cs2size =nonexistent
+# bit13-12: 00, Cs3width=nonexistent
+# bit15-14: 00, Cs3size =nonexistent
+# bit16: 0, Cs0AddrSel
+# bit17: 0, Cs1AddrSel
+# bit18: 0, Cs2AddrSel
+# bit19: 0, Cs3AddrSel
+# bit31-20: 0 required
+
+DATA 0xffd01414 0x00000000 # DDR Open Pages Control
+# bit0: 0, OpenPage enabled
+# bit31-1: 0 required
+
+DATA 0xffd01418 0x00000000 # DDR Operation
+# bit3-0: 0x0, DDR cmd
+# bit31-4: 0 required
+
+DATA 0xffd0141c 0x00000c52 # DDR Mode
+# bit2-0: 2, BurstLen=2 required
+# bit3: 0, BurstType=0 required
+# bit6-4: 4, CL=5
+# bit7: 0, TestMode=0 normal
+# bit8: 0, DLL reset=0 normal
+# bit11-9: 6, auto-precharge write recovery ????????????
+# bit12: 0, PD must be zero
+# bit31-13: 0 required
+
+DATA 0xffd01420 0x00000040 # DDR Extended Mode
+# bit0: 0, DDR DLL enabled
+# bit1: 0, DDR drive strenght normal
+# bit2: 0, DDR ODT control lsd (disabled)
+# bit5-3: 000, required
+# bit6: 1, DDR ODT control msb, (disabled)
+# bit9-7: 000, required
+# bit10: 0, differential DQS enabled
+# bit11: 0, required
+# bit12: 0, DDR output buffer enabled
+# bit31-13: 0 required
+
+DATA 0xffd01424 0x0000f17f # DDR Controller Control High
+# bit2-0: 111, required
+# bit3 : 1 , MBUS Burst Chop disabled
+# bit6-4: 111, required
+# bit7 : 0
+# bit8 : 1 , add writepath sample stage, must be 1 for DDR freq >= 300MHz
+# bit9 : 0 , no half clock cycle addition to dataout
+# bit10 : 0 , 1/4 clock cycle skew enabled for addr/ctl signals
+# bit11 : 0 , 1/4 clock cycle skew disabled for write mesh
+# bit15-12: 1111 required
+# bit31-16: 0 required
+
+DATA 0xffd01428 0x00085520 # DDR2 ODT Read Timing (default values)
+DATA 0xffd0147c 0x00008552 # DDR2 ODT Write Timing (default values)
+
+DATA 0xffd01500 0x00000000 # CS[0]n Base address to 0x0
+DATA 0xffd01504 0x0ffffff1 # CS[0]n Size
+# bit0: 1, Window enabled
+# bit1: 0, Write Protect disabled
+# bit3-2: 00, CS0 hit selected
+# bit23-4: ones, required
+# bit31-24: 0x0F, Size (i.e. 256MB)
+
+DATA 0xffd01508 0x10000000 # CS[1]n Base address to 256Mb
+DATA 0xffd0150c 0x00000000 # CS[2]n Size, window disabled
+
+DATA 0xffd01514 0x00000000 # CS[2]n Size, window disabled
+DATA 0xffd0151c 0x00000000 # CS[3]n Size, window disabled
+
+DATA 0xffd01494 0x00030000 # DDR ODT Control (Low)
+# bit3-0: 2, ODT0Rd, MODT[0] asserted during read from DRAM CS1
+# bit7-4: 1, ODT0Rd, MODT[0] asserted during read from DRAM CS0
+# bit19-16:2, ODT0Wr, MODT[0] asserted during write to DRAM CS1
+# bit23-20:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0
+
+DATA 0xffd01498 0x00000000 # DDR ODT Control (High)
+# bit1-0: 00, ODT0 controlled by ODT Control (low) register above
+# bit3-2: 01, ODT1 active NEVER!
+# bit31-4: zero, required
+
+DATA 0xffd0149c 0x0000e803 # CPU ODT Control
+DATA 0xffd01480 0x00000001 # DDR Initialization Control
+#bit0=1, enable DDR init upon this register write
+
+# End of Header extension
+DATA 0x0 0x0
diff --git a/board/cloudengines/pogo_e02/pogo_e02.c b/board/cloudengines/pogo_e02/pogo_e02.c
new file mode 100644
index 0000000000..ff3421d576
--- /dev/null
+++ b/board/cloudengines/pogo_e02/pogo_e02.c
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) 2012
+ * David Purdy <david.c.purdy@gmail.com>
+ *
+ * Based on Kirkwood support:
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <common.h>
+#include <miiphy.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/kirkwood.h>
+#include <asm/arch/mpp.h>
+#include "pogo_e02.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_early_init_f(void)
+{
+ /*
+ * default gpio configuration
+ * There are maximum 64 gpios controlled through 2 sets of registers
+ * the below configuration configures mainly initial LED status
+ */
+ kw_config_gpio(POGO_E02_OE_VAL_LOW,
+ POGO_E02_OE_VAL_HIGH,
+ POGO_E02_OE_LOW, POGO_E02_OE_HIGH);
+
+ /* Multi-Purpose Pins Functionality configuration */
+ u32 kwmpp_config[] = {
+ MPP0_NF_IO2,
+ MPP1_NF_IO3,
+ MPP2_NF_IO4,
+ MPP3_NF_IO5,
+ MPP4_NF_IO6,
+ MPP5_NF_IO7,
+ MPP6_SYSRST_OUTn,
+ MPP7_GPO,
+ MPP8_UART0_RTS,
+ MPP9_UART0_CTS,
+ MPP10_UART0_TXD,
+ MPP11_UART0_RXD,
+ MPP12_SD_CLK,
+ MPP13_SD_CMD,
+ MPP14_SD_D0,
+ MPP15_SD_D1,
+ MPP16_SD_D2,
+ MPP17_SD_D3,
+ MPP18_NF_IO0,
+ MPP19_NF_IO1,
+ MPP29_TSMP9, /* USB Power Enable */
+ MPP48_GPIO, /* LED green */
+ MPP49_GPIO, /* LED orange */
+ 0
+ };
+ kirkwood_mpp_conf(kwmpp_config);
+ return 0;
+}
+
+int board_init(void)
+{
+ /* Boot parameters address */
+ gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
+
+ return 0;
+}
+
+#ifdef CONFIG_RESET_PHY_R
+/* Configure and initialize PHY */
+void reset_phy(void)
+{
+ u16 reg;
+ u16 devadr;
+ char *name = "egiga0";
+
+ if (miiphy_set_current_dev(name))
+ return;
+
+ /* command to read PHY dev address */
+ if (miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr)) {
+ printf("Err..(%s) could not read PHY dev address\n", __func__);
+ return;
+ }
+
+ /*
+ * Enable RGMII delay on Tx and Rx for CPU port
+ * Ref: sec 4.7.2 of chip datasheet
+ */
+ miiphy_write(name, devadr, MV88E1116_PGADR_REG, 2);
+ miiphy_read(name, devadr, MV88E1116_MAC_CTRL_REG, &reg);
+ reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
+ miiphy_write(name, devadr, MV88E1116_MAC_CTRL_REG, reg);
+ miiphy_write(name, devadr, MV88E1116_PGADR_REG, 0);
+
+ /* reset the phy */
+ miiphy_reset(name, devadr);
+
+ debug("88E1116 Initialized on %s\n", name);
+}
+#endif /* CONFIG_RESET_PHY_R */
diff --git a/board/cloudengines/pogo_e02/pogo_e02.h b/board/cloudengines/pogo_e02/pogo_e02.h
new file mode 100644
index 0000000000..40b4bab9e0
--- /dev/null
+++ b/board/cloudengines/pogo_e02/pogo_e02.h
@@ -0,0 +1,44 @@
+/*
+ * Copyright (C) 2012
+ * David Purdy <david.c.purdy@gmail.com>
+ *
+ * Based on Kirkwood support:
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __POGO_E02_H
+#define __POGO_E02_H
+
+/* GPIO configuration */
+#define POGO_E02_OE_LOW (~(0))
+#define POGO_E02_OE_HIGH (~(0))
+#define POGO_E02_OE_VAL_LOW (1 << 29)
+#define POGO_E02_OE_VAL_HIGH 0
+
+/* PHY related */
+#define MV88E1116_LED_FCTRL_REG 10
+#define MV88E1116_CPRSP_CR3_REG 21
+#define MV88E1116_MAC_CTRL_REG 21
+#define MV88E1116_PGADR_REG 22
+#define MV88E1116_RGMII_TXTM_CTRL (1 << 4)
+#define MV88E1116_RGMII_RXTM_CTRL (1 << 5)
+
+#endif /* __POGO_E02_H */
diff --git a/board/cm_t35/cm_t35.c b/board/cm_t35/cm_t35.c
index 7af1f41af2..89e6b08e7f 100644
--- a/board/cm_t35/cm_t35.c
+++ b/board/cm_t35/cm_t35.c
@@ -100,17 +100,6 @@ int board_init(void)
}
/*
- * Routine: misc_init_r
- * Description: display die ID
- */
-int misc_init_r(void)
-{
- dieid_num_r();
-
- return 0;
-}
-
-/*
* Routine: set_muxconf_regs
* Description: Setting up the configuration Mux registers specific to the
* hardware. Many pins need to be moved from protect to primary
@@ -241,6 +230,12 @@ static void cm_t3x_set_common_muxconf(void)
/* I2C1 */
MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)); /*I2C1_SCL*/
MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)); /*I2C1_SDA*/
+ /* I2C2 */
+ MUX_VAL(CP(I2C2_SCL), (IEN | PTU | EN | M0)); /*I2C2_SCL*/
+ MUX_VAL(CP(I2C2_SDA), (IEN | PTU | EN | M0)); /*I2C2_SDA*/
+ /* I2C3 */
+ MUX_VAL(CP(I2C3_SCL), (IEN | PTU | EN | M0)); /*I2C3_SCL*/
+ MUX_VAL(CP(I2C3_SDA), (IEN | PTU | EN | M0)); /*I2C3_SDA*/
/* control and debug */
MUX_VAL(CP(SYS_32K), (IEN | PTD | DIS | M0)); /*SYS_32K*/
@@ -318,7 +313,7 @@ void set_muxconf_regs(void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- return omap_mmc_init(0);
+ return omap_mmc_init(0, 0, 0);
}
#endif
diff --git a/board/comelit/dig297/dig297.c b/board/comelit/dig297/dig297.c
index 65482813d2..c6c10717b7 100644
--- a/board/comelit/dig297/dig297.c
+++ b/board/comelit/dig297/dig297.c
@@ -147,7 +147,7 @@ void set_muxconf_regs(void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/corscience/tricorder/tricorder.c b/board/corscience/tricorder/tricorder.c
index 435711a2ab..aaff2e868b 100644
--- a/board/corscience/tricorder/tricorder.c
+++ b/board/corscience/tricorder/tricorder.c
@@ -80,7 +80,7 @@ void set_muxconf_regs(void)
#if defined(CONFIG_GENERIC_MMC) && !(defined(CONFIG_SPL_BUILD))
int board_mmc_init(bd_t *bis)
{
- return omap_mmc_init(0);
+ return omap_mmc_init(0, 0, 0);
}
#endif
diff --git a/board/davinci/ea20/ea20.c b/board/davinci/ea20/ea20.c
index 43632c2fd8..7e000404ee 100644
--- a/board/davinci/ea20/ea20.c
+++ b/board/davinci/ea20/ea20.c
@@ -272,7 +272,7 @@ int board_init(void)
return 0;
}
-#ifdef BOARD_LATE_INIT
+#ifdef CONFIG_BOARD_LATE_INIT
int board_late_init(void)
{
@@ -287,7 +287,7 @@ int board_late_init(void)
return 0;
}
-#endif /* BOARD_LATE_INIT */
+#endif /* CONFIG_BOARD_LATE_INIT */
#ifdef CONFIG_DRIVER_TI_EMAC
diff --git a/board/denx/m28evk/m28evk.c b/board/denx/m28evk/m28evk.c
index 53df4761f6..3d28ea84de 100644
--- a/board/denx/m28evk/m28evk.c
+++ b/board/denx/m28evk/m28evk.c
@@ -90,6 +90,8 @@ int board_mmc_init(bd_t *bis)
{
/* Configure WP as input. */
gpio_direction_input(MX28_PAD_AUART2_CTS__GPIO_3_10);
+ /* Turn on the power to the card. */
+ gpio_direction_output(MX28_PAD_PWM3__GPIO_3_28, 0);
return mxsmmc_initialize(bis, 0, m28_mmc_wp);
}
@@ -103,10 +105,18 @@ int board_mmc_init(bd_t *bis)
int fecmxc_mii_postcall(int phy)
{
+#if defined(CONFIG_DENX_M28_V11) || defined(CONFIG_DENX_M28_V10)
+ /* KZ8031 PHY on old boards. */
+ const uint32_t freq = 0x0080;
+#else
+ /* KZ8021 PHY on new boards. */
+ const uint32_t freq = 0x0000;
+#endif
+
miiphy_write("FEC1", phy, MII_BMCR, 0x9000);
miiphy_write("FEC1", phy, MII_OPMODE_STRAP_OVERRIDE, 0x0202);
if (phy == 3)
- miiphy_write("FEC1", 3, MII_PHY_CTRL2, 0x8180);
+ miiphy_write("FEC1", 3, MII_PHY_CTRL2, 0x8100 | freq);
return 0;
}
@@ -123,6 +133,14 @@ int board_eth_init(bd_t *bis)
CLKCTRL_ENET_TIME_SEL_MASK | CLKCTRL_ENET_CLK_OUT_EN,
CLKCTRL_ENET_TIME_SEL_RMII_CLK);
+#if !defined(CONFIG_DENX_M28_V11) && !defined(CONFIG_DENX_M28_V10)
+ /* Reset the new PHY */
+ gpio_direction_output(MX28_PAD_AUART2_RTS__GPIO_3_11, 0);
+ udelay(10000);
+ gpio_set_value(MX28_PAD_AUART2_RTS__GPIO_3_11, 1);
+ udelay(10000);
+#endif
+
ret = fecmxc_initialize_multi(bis, 0, 0, MXS_ENET0_BASE);
if (ret) {
printf("FEC MXS: Unable to init FEC0\n");
diff --git a/board/denx/m28evk/spl_boot.c b/board/denx/m28evk/spl_boot.c
index a04fe180c1..7a125925de 100644
--- a/board/denx/m28evk/spl_boot.c
+++ b/board/denx/m28evk/spl_boot.c
@@ -109,8 +109,9 @@ const iomux_cfg_t iomux_setup[] = {
(MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL),
MX28_PAD_SSP0_SCK__SSP0_SCK |
(MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL),
- MX28_PAD_PWM3__GPIO_3_28 | MUX_CONFIG_SSP0, /* Power .. FIXME */
- MX28_PAD_AUART2_CTS__GPIO_3_10, /* WP ... FIXME */
+ MX28_PAD_PWM3__GPIO_3_28 | MUX_CONFIG_SSP0 |
+ (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL), /* Power */
+ MX28_PAD_AUART2_CTS__GPIO_3_10, /* WP */
/* GPMI NAND */
MX28_PAD_GPMI_D00__GPMI_D0 | MUX_CONFIG_GPMI,
@@ -147,6 +148,9 @@ const iomux_cfg_t iomux_setup[] = {
MX28_PAD_ENET0_RXD3__ENET1_RXD1 | MUX_CONFIG_ENET,
MX28_PAD_ENET0_TXD2__ENET1_TXD0 | MUX_CONFIG_ENET,
MX28_PAD_ENET0_TXD3__ENET1_TXD1 | MUX_CONFIG_ENET,
+#if !defined(CONFIG_DENX_M28_V11) && !defined(CONFIG_DENX_M28_V10)
+ MX28_PAD_AUART2_RTS__GPIO_3_11, /* PHY reset */
+#endif
/* I2C */
MX28_PAD_I2C0_SCL__I2C0_SCL,
diff --git a/board/esd/cpci405/cpci405.c b/board/esd/cpci405/cpci405.c
index 41b5ba0490..fb082457ed 100644
--- a/board/esd/cpci405/cpci405.c
+++ b/board/esd/cpci405/cpci405.c
@@ -697,7 +697,6 @@ U_BOOT_CMD(
*/
int do_get_bpip(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
- bd_t *bd = gd->bd;
char *buf;
ulong crc;
char str[32];
@@ -730,12 +729,7 @@ int do_get_bpip(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
/*
* Update whole ip-addr
*/
- bd->bi_ip_addr = ipaddr;
- sprintf(str, "%ld.%ld.%ld.%ld",
- (bd->bi_ip_addr & 0xff000000) >> 24,
- (bd->bi_ip_addr & 0x00ff0000) >> 16,
- (bd->bi_ip_addr & 0x0000ff00) >> 8,
- (bd->bi_ip_addr & 0x000000ff));
+ sprintf(str, "%pI4", &ipaddr);
setenv("ipaddr", str);
printf("Updated ip_addr from bp_eeprom to %s!\n", str);
}
diff --git a/board/esd/cpci750/mv_eth.c b/board/esd/cpci750/mv_eth.c
index a3bde81575..9455b62eb0 100644
--- a/board/esd/cpci750/mv_eth.c
+++ b/board/esd/cpci750/mv_eth.c
@@ -95,8 +95,6 @@ int mv64360_eth_xmit (struct eth_device *, volatile void *packet, int length);
#ifndef UPDATE_STATS_BY_SOFTWARE
static void mv64360_eth_print_stat (struct eth_device *dev);
#endif
-/* Processes a received packet */
-extern void NetReceive (volatile uchar *, int);
extern unsigned int INTERNAL_REG_BASE_ADDR;
@@ -192,8 +190,7 @@ int db64360_eth_poll (struct eth_device *dev)
return mv64360_eth_receive (dev);
}
-int db64360_eth_transmit (struct eth_device *dev, volatile void *packet,
- int length)
+int db64360_eth_transmit(struct eth_device *dev, void *packet, int length)
{
mv64360_eth_xmit (dev, packet, length);
return 0;
diff --git a/board/esd/cpci750/mv_eth.h b/board/esd/cpci750/mv_eth.h
index b761135349..3d0cb10dd5 100644
--- a/board/esd/cpci750/mv_eth.h
+++ b/board/esd/cpci750/mv_eth.h
@@ -168,9 +168,7 @@ struct mv64360_eth_priv {
int mv64360_eth_init (struct eth_device *dev);
int mv64360_eth_stop (struct eth_device *dev);
-int mv64360_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
-/* return db64360_eth0_poll(); */
-
+int mv64360_eth_start_xmit(struct eth_device *dev, void *packet, int length);
int mv64360_eth_open (struct eth_device *dev);
diff --git a/board/esg/ima3-mx53/Makefile b/board/esg/ima3-mx53/Makefile
new file mode 100644
index 0000000000..f3b13bccaf
--- /dev/null
+++ b/board/esg/ima3-mx53/Makefile
@@ -0,0 +1,41 @@
+#
+# Copyright (C) 2012, Stefano Babic <sbabic@denx.de>
+#
+# Based on ti/evm/Makefile
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+COBJS := ima3-mx53.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+
+$(LIB): $(obj).depend $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/esg/ima3-mx53/ima3-mx53.c b/board/esg/ima3-mx53/ima3-mx53.c
new file mode 100644
index 0000000000..9ecf31d7c2
--- /dev/null
+++ b/board/esg/ima3-mx53/ima3-mx53.c
@@ -0,0 +1,302 @@
+/*
+ * (C) Copyright 2012, Stefano Babic <sbabic@denx.de>
+ *
+ * (C) Copyright 2010 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc.
+ */
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/mx5x_pins.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/crm_regs.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/iomux.h>
+#include <asm/errno.h>
+#include <netdev.h>
+#include <mmc.h>
+#include <fsl_esdhc.h>
+#include <asm/gpio.h>
+
+/* NOR flash configuration */
+#define IMA3_MX53_CS0GCR1 (CSEN | DSZ(2))
+#define IMA3_MX53_CS0GCR2 0
+#define IMA3_MX53_CS0RCR1 (RCSN(2) | OEN(1) | RWSC(15))
+#define IMA3_MX53_CS0RCR2 0
+#define IMA3_MX53_CS0WCR1 (WBED1 | WCSN(2) | WEN(1) | WWSC(15))
+#define IMA3_MX53_CS0WCR2 0
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static void weim_nor_settings(void)
+{
+ struct weim *weim_regs = (struct weim *)WEIM_BASE_ADDR;
+
+ writel(IMA3_MX53_CS0GCR1, &weim_regs->cs0gcr1);
+ writel(IMA3_MX53_CS0GCR2, &weim_regs->cs0gcr2);
+ writel(IMA3_MX53_CS0RCR1, &weim_regs->cs0rcr1);
+ writel(IMA3_MX53_CS0RCR2, &weim_regs->cs0rcr2);
+ writel(IMA3_MX53_CS0WCR1, &weim_regs->cs0wcr1);
+ writel(IMA3_MX53_CS0WCR2, &weim_regs->cs0wcr2);
+ writel(0x0, &weim_regs->wcr);
+
+ set_chipselect_size(CS0_128);
+}
+
+int dram_init(void)
+{
+ gd->ram_size = get_ram_size((void *) CONFIG_SYS_SDRAM_BASE,
+ PHYS_SDRAM_1_SIZE);
+ return 0;
+}
+
+static void setup_iomux_uart(void)
+{
+ /* UART4 RXD */
+ mxc_request_iomux(MX53_PIN_CSI0_D13, IOMUX_CONFIG_ALT2);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D13,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH |
+ PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE |
+ PAD_CTL_100K_PU | PAD_CTL_ODE_OPENDRAIN_ENABLE);
+ mxc_iomux_set_input(MX53_UART4_IPP_UART_RXD_MUX_SELECT_INPUT, 0x3);
+
+ /* UART4 TXD */
+ mxc_request_iomux(MX53_PIN_CSI0_D12, IOMUX_CONFIG_ALT2);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D12,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH |
+ PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE |
+ PAD_CTL_100K_PU | PAD_CTL_ODE_OPENDRAIN_ENABLE);
+}
+
+static void setup_iomux_fec(void)
+{
+ /*FEC_MDIO*/
+ mxc_request_iomux(MX53_PIN_FEC_MDIO, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_MDIO,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH |
+ PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | PAD_CTL_22K_PU |
+ PAD_CTL_ODE_OPENDRAIN_ENABLE);
+ mxc_iomux_set_input(MX53_FEC_FEC_MDI_SELECT_INPUT, 0x1);
+
+ /*FEC_MDC*/
+ mxc_request_iomux(MX53_PIN_FEC_MDC, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_MDC, PAD_CTL_DRV_HIGH);
+
+ /* FEC RXD3 */
+ mxc_request_iomux(MX53_PIN_KEY_COL0, IOMUX_CONFIG_ALT6);
+ mxc_iomux_set_pad(MX53_PIN_KEY_COL0, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC RXD2 */
+ mxc_request_iomux(MX53_PIN_KEY_COL2, IOMUX_CONFIG_ALT6);
+ mxc_iomux_set_pad(MX53_PIN_KEY_COL2, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC RXD1 */
+ mxc_request_iomux(MX53_PIN_FEC_RXD1, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_RXD1, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC RXD0 */
+ mxc_request_iomux(MX53_PIN_FEC_RXD0, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_RXD0, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC TXD3 */
+ mxc_request_iomux(MX53_PIN_GPIO_19, IOMUX_CONFIG_ALT6);
+ mxc_iomux_set_pad(MX53_PIN_GPIO_19, PAD_CTL_DRV_HIGH);
+
+ /* FEC TXD2 */
+ mxc_request_iomux(MX53_PIN_KEY_ROW2, IOMUX_CONFIG_ALT6);
+ mxc_iomux_set_pad(MX53_PIN_KEY_ROW2, PAD_CTL_DRV_HIGH);
+
+ /* FEC TXD1 */
+ mxc_request_iomux(MX53_PIN_FEC_TXD1, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_TXD1, PAD_CTL_DRV_HIGH);
+
+ /* FEC TXD0 */
+ mxc_request_iomux(MX53_PIN_FEC_TXD0, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_TXD0, PAD_CTL_DRV_HIGH);
+
+ /* FEC TX_EN */
+ mxc_request_iomux(MX53_PIN_FEC_TX_EN, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_TX_EN, PAD_CTL_DRV_HIGH);
+
+ /* FEC TX_CLK */
+ mxc_request_iomux(MX53_PIN_FEC_REF_CLK, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_REF_CLK, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC RX_ER */
+ mxc_request_iomux(MX53_PIN_FEC_RX_ER, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_RX_ER, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC RX_DV */
+ mxc_request_iomux(MX53_PIN_FEC_CRS_DV, IOMUX_CONFIG_ALT0);
+ mxc_iomux_set_pad(MX53_PIN_FEC_CRS_DV, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC CRS */
+ mxc_request_iomux(MX53_PIN_KEY_COL3, IOMUX_CONFIG_ALT6);
+ mxc_iomux_set_pad(MX53_PIN_KEY_COL3, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+
+ /* FEC COL */
+ mxc_request_iomux(MX53_PIN_KEY_ROW1, IOMUX_CONFIG_ALT6);
+ mxc_iomux_set_pad(MX53_PIN_KEY_ROW1, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+ mxc_iomux_set_input(MX53_FEC_FEC_COL_SELECT_INPUT, 0x0);
+
+ /* FEC RX_CLK */
+ mxc_request_iomux(MX53_PIN_KEY_COL1, IOMUX_CONFIG_ALT6);
+ mxc_iomux_set_pad(MX53_PIN_KEY_COL1, PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PKE_ENABLE);
+ mxc_iomux_set_input(MX53_FEC_FEC_RX_CLK_SELECT_INPUT, 0x0);
+}
+
+#ifdef CONFIG_FSL_ESDHC
+struct fsl_esdhc_cfg esdhc_cfg = { MMC_SDHC1_BASE_ADDR, 1 };
+
+int board_mmc_getcd(struct mmc *mmc)
+{
+ int ret;
+
+ ret = !gpio_get_value(IOMUX_TO_GPIO(MX53_PIN_GPIO_1));
+
+ return ret;
+}
+
+int board_mmc_init(bd_t *bis)
+{
+ mxc_request_iomux(MX53_PIN_SD1_CMD, IOMUX_CONFIG_ALT0);
+ mxc_request_iomux(MX53_PIN_SD1_CLK, IOMUX_CONFIG_ALT0);
+ mxc_request_iomux(MX53_PIN_SD1_DATA0, IOMUX_CONFIG_ALT0);
+ mxc_request_iomux(MX53_PIN_SD1_DATA1, IOMUX_CONFIG_ALT0);
+ mxc_request_iomux(MX53_PIN_SD1_DATA2, IOMUX_CONFIG_ALT0);
+ mxc_request_iomux(MX53_PIN_SD1_DATA3, IOMUX_CONFIG_ALT0);
+ mxc_request_iomux(MX53_PIN_GPIO_1, IOMUX_CONFIG_ALT1);
+ mxc_iomux_set_pad(MX53_PIN_GPIO_1,
+ PAD_CTL_DRV_HIGH | PAD_CTL_HYS_ENABLE |
+ PAD_CTL_PUE_KEEPER | PAD_CTL_100K_PU |
+ PAD_CTL_ODE_OPENDRAIN_NONE | PAD_CTL_PKE_ENABLE);
+ gpio_direction_input(IOMUX_TO_GPIO(MX53_PIN_GPIO_1));
+
+ mxc_iomux_set_pad(MX53_PIN_SD1_CMD,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_100K_PU);
+ mxc_iomux_set_pad(MX53_PIN_SD1_CLK,
+ PAD_CTL_PUE_PULL | PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE |
+ PAD_CTL_47K_PU | PAD_CTL_DRV_HIGH);
+ mxc_iomux_set_pad(MX53_PIN_SD1_DATA0,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+ mxc_iomux_set_pad(MX53_PIN_SD1_DATA1,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+ mxc_iomux_set_pad(MX53_PIN_SD1_DATA2,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+ mxc_iomux_set_pad(MX53_PIN_SD1_DATA3,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+
+ return fsl_esdhc_initialize(bis, &esdhc_cfg);
+}
+#endif
+
+static void setup_iomux_spi(void)
+{
+ /* SCLK */
+ mxc_request_iomux(MX53_PIN_CSI0_D8, IOMUX_CONFIG_ALT3);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D8,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+ mxc_iomux_set_input(MX53_ECSPI2_IPP_CSPI_CLK_IN_SELECT_INPUT, 0x1);
+ /* MOSI */
+ mxc_request_iomux(MX53_PIN_CSI0_D9, IOMUX_CONFIG_ALT3);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D9,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+ mxc_iomux_set_input(MX53_ECSPI2_IPP_IND_MOSI_SELECT_INPUT, 0x1);
+ /* MISO */
+ mxc_request_iomux(MX53_PIN_CSI0_D10, IOMUX_CONFIG_ALT3);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D10,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+ mxc_iomux_set_input(MX53_ECSPI2_IPP_IND_MISO_SELECT_INPUT, 0x1);
+ /* SSEL 0 */
+ mxc_request_iomux(MX53_PIN_CSI0_D11, IOMUX_CONFIG_GPIO);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D11,
+ PAD_CTL_HYS_ENABLE | PAD_CTL_DRV_HIGH | PAD_CTL_PUE_PULL |
+ PAD_CTL_PKE_ENABLE | PAD_CTL_HYS_ENABLE | PAD_CTL_47K_PU);
+ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_CSI0_D11), 1);
+}
+
+int board_early_init_f(void)
+{
+ /* configure I/O pads */
+ setup_iomux_uart();
+ setup_iomux_fec();
+
+ weim_nor_settings();
+
+ /* configure spi */
+ setup_iomux_spi();
+
+ return 0;
+}
+
+int board_init(void)
+{
+ gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
+
+ mxc_set_sata_internal_clock();
+
+ return 0;
+}
+
+#if defined(CONFIG_RESET_PHY_R)
+#include <miiphy.h>
+
+void reset_phy(void)
+{
+ unsigned short reg;
+
+ /* reset the phy */
+ miiphy_reset("FEC", CONFIG_PHY_ADDR);
+
+ /* set hard link to 100Mbit, full-duplex */
+ miiphy_read("FEC", CONFIG_PHY_ADDR, MII_BMCR, &reg);
+ reg &= ~BMCR_ANENABLE;
+ reg |= (BMCR_SPEED100 | BMCR_FULLDPLX);
+ miiphy_write("FEC", CONFIG_PHY_ADDR, MII_BMCR, reg);
+
+ miiphy_read("FEC", CONFIG_PHY_ADDR, 0x16, &reg);
+ reg |= (1 << 5);
+ miiphy_write("FEC", CONFIG_PHY_ADDR, 0x16, reg);
+}
+#endif
+
+int checkboard(void)
+{
+ puts("Board: IMA3_MX53\n");
+
+ return 0;
+}
diff --git a/board/esg/ima3-mx53/imximage.cfg b/board/esg/ima3-mx53/imximage.cfg
new file mode 100644
index 0000000000..fa6b42ddcc
--- /dev/null
+++ b/board/esg/ima3-mx53/imximage.cfg
@@ -0,0 +1,108 @@
+#
+# (C) Copyright 2012
+# Stefano Babic DENX Software Engineering sbabic@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not write to the Free Software
+# Foundation Inc. 51 Franklin Street Fifth Floor Boston,
+# MA 02110-1301 USA
+#
+# Refer docs/README.imxmage for more details about how-to configure
+# and create imximage boot image
+#
+# The syntax is taken as close as possible with the kwbimage
+
+# image version
+
+IMAGE_VERSION 2
+
+# Boot Device : one of
+# spi, sd (the board has no nand neither onenand)
+
+BOOT_FROM nor
+
+# Device Configuration Data (DCD)
+#
+# Each entry must have the format:
+# Addr-type Address Value
+#
+# where:
+# Addr-type register length (1,2 or 4 bytes)
+# Address absolute address of the register
+# value value to be stored in the register
+
+# IOMUX for RAM only
+DATA 4 0x53fa8554 0x300020
+DATA 4 0x53fa8560 0x300020
+DATA 4 0x53fa8594 0x300020
+DATA 4 0x53fa8584 0x300020
+DATA 4 0x53fa8558 0x300040
+DATA 4 0x53fa8568 0x300040
+DATA 4 0x53fa8590 0x300040
+DATA 4 0x53fa857c 0x300040
+DATA 4 0x53fa8564 0x300040
+DATA 4 0x53fa8580 0x300040
+DATA 4 0x53fa8570 0x300220
+DATA 4 0x53fa8578 0x300220
+DATA 4 0x53fa872c 0x300000
+DATA 4 0x53fa8728 0x300000
+DATA 4 0x53fa871c 0x300000
+DATA 4 0x53fa8718 0x300000
+DATA 4 0x53fa8574 0x300020
+DATA 4 0x53fa8588 0x300020
+DATA 4 0x53fa855c 0x0
+DATA 4 0x53fa858c 0x0
+DATA 4 0x53fa856c 0x300040
+DATA 4 0x53fa86f0 0x300000
+DATA 4 0x53fa8720 0x300000
+DATA 4 0x53fa86fc 0x0
+DATA 4 0x53fa86f4 0x0
+DATA 4 0x53fa8714 0x0
+DATA 4 0x53fa8724 0x4000000
+#
+# DDR RAM
+DATA 4 0x63fd9088 0x40404040
+DATA 4 0x63fd9090 0x40404040
+DATA 4 0x63fd907C 0x01420143
+DATA 4 0x63fd9080 0x01450146
+DATA 4 0x63fd9018 0x00111740
+DATA 4 0x63fd9000 0x84190000
+# esdcfgX
+DATA 4 0x63fd900C 0x9f5152e3
+DATA 4 0x63fd9010 0xb68e8a63
+DATA 4 0x63fd9014 0x01ff00db
+# Read/Write command delay
+DATA 4 0x63fd902c 0x000026d2
+# Out of reset delays
+DATA 4 0x63fd9030 0x00ff0e21
+# ESDCTL ODT timing control
+DATA 4 0x63fd9008 0x12273030
+# ESDCTL power down control
+DATA 4 0x63fd9004 0x0002002d
+# Set registers in DDR memory chips
+DATA 4 0x63fd901c 0x00008032
+DATA 4 0x63fd901c 0x00008033
+DATA 4 0x63fd901c 0x00028031
+DATA 4 0x63fd901c 0x052080b0
+DATA 4 0x63fd901c 0x04008040
+# ESDCTL refresh control
+DATA 4 0x63fd9020 0x00005800
+# PHY ZQ HW control
+DATA 4 0x63fd9040 0x05380003
+# PHY ODT control
+DATA 4 0x63fd9058 0x00022222
+# start DDR3
+DATA 4 0x63fd901c 0x00000000
diff --git a/board/evb64260/eth.c b/board/evb64260/eth.c
index eb87edcbfe..a3a32761da 100644
--- a/board/evb64260/eth.c
+++ b/board/evb64260/eth.c
@@ -246,8 +246,7 @@ gt6426x_eth_poll(void *v)
/**************************************************************************
TRANSMIT - Transmit a frame
***************************************************************************/
-int
-gt6426x_eth_transmit(void *v, volatile char *p, unsigned int s)
+int gt6426x_eth_transmit(void *v, char *p, unsigned int s)
{
struct eth_device *wp = (struct eth_device *)v;
struct eth_dev_s *dev = (struct eth_dev_s *)wp->priv;
diff --git a/board/evb64260/eth.h b/board/evb64260/eth.h
index beb6db16df..76bd725921 100644
--- a/board/evb64260/eth.h
+++ b/board/evb64260/eth.h
@@ -68,7 +68,7 @@ extern char *eth0_rx_buffer[NR];
extern char *eth_data;
extern int gt6426x_eth_poll(void *v);
-extern int gt6426x_eth_transmit(void *v, volatile char *p, unsigned int s);
+extern int gt6426x_eth_transmit(void *v, char *p, unsigned int s);
extern void gt6426x_eth_disable(void *v);
extern int gt6426x_eth_probe(void *v, bd_t *bis);
diff --git a/board/freescale/common/p_corenet/law.c b/board/freescale/common/p_corenet/law.c
index 09ef5615d2..c4566ddd4f 100644
--- a/board/freescale/common/p_corenet/law.c
+++ b/board/freescale/common/p_corenet/law.c
@@ -48,6 +48,19 @@ struct law_entry law_table[] = {
#ifdef CONFIG_SYS_NAND_BASE_PHYS
SET_LAW(CONFIG_SYS_NAND_BASE_PHYS, LAW_SIZE_1M, LAW_TRGT_IF_LBC),
#endif
+#ifdef CONFIG_SRIOBOOT_SLAVE
+#if defined(CONFIG_SRIOBOOT_SLAVE_PORT0)
+ SET_LAW(CONFIG_SYS_SRIOBOOT_SLAVE_ADDR_PHYS,
+ LAW_SIZE_1M, LAW_TRGT_IF_RIO_1),
+ SET_LAW(CONFIG_SYS_SRIOBOOT_UCODE_ENV_ADDR_PHYS,
+ LAW_SIZE_1M, LAW_TRGT_IF_RIO_1),
+#elif defined(CONFIG_SRIOBOOT_SLAVE_PORT1)
+ SET_LAW(CONFIG_SYS_SRIOBOOT_SLAVE_ADDR_PHYS,
+ LAW_SIZE_1M, LAW_TRGT_IF_RIO_2),
+ SET_LAW(CONFIG_SYS_SRIOBOOT_UCODE_ENV_ADDR_PHYS,
+ LAW_SIZE_1M, LAW_TRGT_IF_RIO_2),
+#endif
+#endif
};
int num_law_entries = ARRAY_SIZE(law_table);
diff --git a/board/freescale/common/p_corenet/tlb.c b/board/freescale/common/p_corenet/tlb.c
index 6a0026a2cf..da2162728f 100644
--- a/board/freescale/common/p_corenet/tlb.c
+++ b/board/freescale/common/p_corenet/tlb.c
@@ -66,6 +66,15 @@ struct fsl_e_tlb_entry tlb_table[] = {
SET_TLB_ENTRY(1, CONFIG_SYS_INIT_L3_ADDR, CONFIG_SYS_INIT_L3_ADDR,
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
0, 0, BOOKE_PAGESZ_1M, 1),
+#elif defined(CONFIG_SRIOBOOT_SLAVE)
+ /*
+ * SRIOBOOT-SLAVE. When slave boot, the address of the
+ * space is at 0xfff00000, it covered the 0xfffff000.
+ */
+ SET_TLB_ENTRY(1, CONFIG_SYS_SRIOBOOT_SLAVE_ADDR,
+ CONFIG_SYS_SRIOBOOT_SLAVE_ADDR_PHYS,
+ MAS3_SX|MAS3_SW|MAS3_SR, MAS2_W|MAS2_G,
+ 0, 0, BOOKE_PAGESZ_1M, 1),
#else
SET_TLB_ENTRY(1, 0xfffff000, 0xfffff000,
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
@@ -138,6 +147,16 @@ struct fsl_e_tlb_entry tlb_table[] = {
MAS3_SX|MAS3_SW|MAS3_SR, MAS2_I|MAS2_G,
0, 16, BOOKE_PAGESZ_1M, 1),
#endif
+#ifdef CONFIG_SRIOBOOT_SLAVE
+ /*
+ * SRIOBOOT-SLAVE. 1M space from 0xffe00000 for fetching ucode
+ * and ENV from master
+ */
+ SET_TLB_ENTRY(1, CONFIG_SYS_SRIOBOOT_UCODE_ENV_ADDR,
+ CONFIG_SYS_SRIOBOOT_UCODE_ENV_ADDR_PHYS,
+ MAS3_SX|MAS3_SW|MAS3_SR, MAS2_G,
+ 0, 17, BOOKE_PAGESZ_1M, 1),
+#endif
};
int num_tlb_entries = ARRAY_SIZE(tlb_table);
diff --git a/board/freescale/corenet_ds/corenet_ds.c b/board/freescale/corenet_ds/corenet_ds.c
index b1eecc495d..a33c936fa0 100644
--- a/board/freescale/corenet_ds/corenet_ds.c
+++ b/board/freescale/corenet_ds/corenet_ds.c
@@ -62,10 +62,6 @@ int checkboard (void)
else
printf("invalid setting of SW%u\n", PIXIS_LBMAP_SWITCH);
-#ifdef CONFIG_PHYS_64BIT
- puts("36-bit Addressing\n");
-#endif
-
/* Display the RCW, so that no one gets confused as to what RCW
* we're actually using for this boot.
*/
diff --git a/board/freescale/mpc8536ds/mpc8536ds.c b/board/freescale/mpc8536ds/mpc8536ds.c
index c9f85c857b..6d0bfde232 100644
--- a/board/freescale/mpc8536ds/mpc8536ds.c
+++ b/board/freescale/mpc8536ds/mpc8536ds.c
@@ -68,12 +68,7 @@ int checkboard (void)
u8 vboot;
u8 *pixis_base = (u8 *)PIXIS_BASE;
- puts("Board: MPC8536DS ");
-#ifdef CONFIG_PHYS_64BIT
- puts("(36-bit addrmap) ");
-#endif
-
- printf ("Sys ID: 0x%02x, "
+ printf("Board: MPC8536DS Sys ID: 0x%02x, "
"Sys Ver: 0x%02x, FPGA Ver: 0x%02x, ",
in_8(pixis_base + PIXIS_ID), in_8(pixis_base + PIXIS_VER),
in_8(pixis_base + PIXIS_PVER));
diff --git a/board/freescale/mpc8572ds/mpc8572ds.c b/board/freescale/mpc8572ds/mpc8572ds.c
index b20299e36f..33a02ba8d3 100644
--- a/board/freescale/mpc8572ds/mpc8572ds.c
+++ b/board/freescale/mpc8572ds/mpc8572ds.c
@@ -45,11 +45,7 @@ int checkboard (void)
u8 vboot;
u8 *pixis_base = (u8 *)PIXIS_BASE;
- puts ("Board: MPC8572DS ");
-#ifdef CONFIG_PHYS_64BIT
- puts ("(36-bit addrmap) ");
-#endif
- printf ("Sys ID: 0x%02x, "
+ printf("Board: MPC8572DS Sys ID: 0x%02x, "
"Sys Ver: 0x%02x, FPGA Ver: 0x%02x, ",
in_8(pixis_base + PIXIS_ID), in_8(pixis_base + PIXIS_VER),
in_8(pixis_base + PIXIS_PVER));
diff --git a/board/freescale/mpc8641hpcn/mpc8641hpcn.c b/board/freescale/mpc8641hpcn/mpc8641hpcn.c
index 455569e422..6a0a3a2b37 100644
--- a/board/freescale/mpc8641hpcn/mpc8641hpcn.c
+++ b/board/freescale/mpc8641hpcn/mpc8641hpcn.c
@@ -50,9 +50,6 @@ int checkboard(void)
else
puts ("Promjet\n");
-#ifdef CONFIG_PHYS_64BIT
- printf (" 36-bit physical address map\n");
-#endif
return 0;
}
diff --git a/board/freescale/mx28evk/iomux.c b/board/freescale/mx28evk/iomux.c
index 396761bdff..6587c454fe 100644
--- a/board/freescale/mx28evk/iomux.c
+++ b/board/freescale/mx28evk/iomux.c
@@ -26,6 +26,7 @@
#include <asm/arch/sys_proto.h>
#define MUX_CONFIG_SSP0 (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
+#define MUX_CONFIG_GPMI (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_NOPULL)
#define MUX_CONFIG_ENET (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP)
#define MUX_CONFIG_EMI (MXS_PAD_3V3 | MXS_PAD_12MA | MXS_PAD_NOPULL)
#define MUX_CONFIG_SSP2 (MXS_PAD_3V3 | MXS_PAD_4MA | MXS_PAD_PULLUP)
@@ -55,6 +56,26 @@ const iomux_cfg_t iomux_setup[] = {
MX28_PAD_PWM3__GPIO_3_28 |
(MXS_PAD_12MA | MXS_PAD_3V3 | MXS_PAD_PULLUP),
+#ifdef CONFIG_NAND_MXS
+ /* GPMI NAND */
+ MX28_PAD_GPMI_D00__GPMI_D0 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D01__GPMI_D1 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D02__GPMI_D2 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D03__GPMI_D3 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D04__GPMI_D4 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D05__GPMI_D5 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D06__GPMI_D6 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_D07__GPMI_D7 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_CE0N__GPMI_CE0N | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_RDY0__GPMI_READY0 | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_RDN__GPMI_RDN |
+ (MXS_PAD_3V3 | MXS_PAD_8MA | MXS_PAD_PULLUP),
+ MX28_PAD_GPMI_WRN__GPMI_WRN | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_ALE__GPMI_ALE | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_CLE__GPMI_CLE | MUX_CONFIG_GPMI,
+ MX28_PAD_GPMI_RESETN__GPMI_RESETN | MUX_CONFIG_GPMI,
+#endif
+
/* FEC0 */
MX28_PAD_ENET0_MDC__ENET0_MDC | MUX_CONFIG_ENET,
MX28_PAD_ENET0_MDIO__ENET0_MDIO | MUX_CONFIG_ENET,
diff --git a/board/freescale/mx53loco/mx53loco.c b/board/freescale/mx53loco/mx53loco.c
index d736141e28..dec966ddd6 100644
--- a/board/freescale/mx53loco/mx53loco.c
+++ b/board/freescale/mx53loco/mx53loco.c
@@ -27,6 +27,7 @@
#include <asm/arch/mx5x_pins.h>
#include <asm/arch/sys_proto.h>
#include <asm/arch/crm_regs.h>
+#include <asm/arch/clock.h>
#include <asm/arch/iomux.h>
#include <asm/arch/clock.h>
#include <asm/errno.h>
@@ -35,6 +36,9 @@
#include <mmc.h>
#include <fsl_esdhc.h>
#include <asm/gpio.h>
+#include <pmic.h>
+#include <dialog_pmic.h>
+#include <fsl_pmic.h>
DECLARE_GLOBAL_DATA_PTR;
@@ -58,6 +62,18 @@ void dram_init_banksize(void)
gd->bd->bi_dram[1].size = PHYS_SDRAM_2_SIZE;
}
+u32 get_board_rev(void)
+{
+ struct iim_regs *iim = (struct iim_regs *)IMX_IIM_BASE;
+ struct fuse_bank *bank = &iim->bank[0];
+ struct fuse_bank0_regs *fuse =
+ (struct fuse_bank0_regs *)bank->fuse_regs;
+
+ int rev = readl(&fuse->gp[6]);
+
+ return (get_cpu_rev() & ~(0xF << 8)) | (rev & 0xF) << 8;
+}
+
static void setup_iomux_uart(void)
{
/* UART1 RXD */
@@ -81,10 +97,9 @@ static void setup_iomux_uart(void)
#ifdef CONFIG_USB_EHCI_MX5
int board_ehci_hcd_init(int port)
{
- /* request VBUS power enable pin, GPIO[8}, gpio7 */
+ /* request VBUS power enable pin, GPIO7_8 */
mxc_request_iomux(MX53_PIN_ATA_DA_2, IOMUX_CONFIG_ALT1);
- gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), 0);
- gpio_set_value(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), 1);
+ gpio_direction_output(IOMUX_TO_GPIO(MX53_PIN_ATA_DA_2), 1);
return 0;
}
#endif
@@ -290,6 +305,103 @@ int board_mmc_init(bd_t *bis)
}
#endif
+static void setup_iomux_i2c(void)
+{
+ /* I2C1 SDA */
+ mxc_request_iomux(MX53_PIN_CSI0_D8,
+ IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION);
+ mxc_iomux_set_input(MX53_I2C1_IPP_SDA_IN_SELECT_INPUT,
+ INPUT_CTL_PATH0);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D8,
+ PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH |
+ PAD_CTL_100K_PU | PAD_CTL_PKE_ENABLE |
+ PAD_CTL_PUE_PULL |
+ PAD_CTL_ODE_OPENDRAIN_ENABLE);
+ /* I2C1 SCL */
+ mxc_request_iomux(MX53_PIN_CSI0_D9,
+ IOMUX_CONFIG_ALT5 | IOMUX_CONFIG_SION);
+ mxc_iomux_set_input(MX53_I2C1_IPP_SCL_IN_SELECT_INPUT,
+ INPUT_CTL_PATH0);
+ mxc_iomux_set_pad(MX53_PIN_CSI0_D9,
+ PAD_CTL_SRE_FAST | PAD_CTL_DRV_HIGH |
+ PAD_CTL_100K_PU | PAD_CTL_PKE_ENABLE |
+ PAD_CTL_PUE_PULL |
+ PAD_CTL_ODE_OPENDRAIN_ENABLE);
+}
+
+static int power_init(void)
+{
+ unsigned int val;
+ int ret = -1;
+ struct pmic *p;
+
+ if (!i2c_probe(CONFIG_SYS_DIALOG_PMIC_I2C_ADDR)) {
+ pmic_dialog_init();
+ p = get_pmic();
+
+ /* Set VDDA to 1.25V */
+ val = DA9052_BUCKCORE_BCOREEN | DA_BUCKCORE_VBCORE_1_250V;
+ ret = pmic_reg_write(p, DA9053_BUCKCORE_REG, val);
+
+ ret |= pmic_reg_read(p, DA9053_SUPPLY_REG, &val);
+ val |= DA9052_SUPPLY_VBCOREGO;
+ ret |= pmic_reg_write(p, DA9053_SUPPLY_REG, val);
+
+ /* Set Vcc peripheral to 1.30V */
+ ret |= pmic_reg_write(p, DA9053_BUCKPRO_REG, 0x62);
+ ret |= pmic_reg_write(p, DA9053_SUPPLY_REG, 0x62);
+ }
+
+ if (!i2c_probe(CONFIG_SYS_FSL_PMIC_I2C_ADDR)) {
+ pmic_init();
+ p = get_pmic();
+
+ /* Set VDDGP to 1.25V for 1GHz on SW1 */
+ pmic_reg_read(p, REG_SW_0, &val);
+ val = (val & ~SWx_VOLT_MASK_MC34708) | SWx_1_250V_MC34708;
+ ret = pmic_reg_write(p, REG_SW_0, val);
+
+ /* Set VCC as 1.30V on SW2 */
+ pmic_reg_read(p, REG_SW_1, &val);
+ val = (val & ~SWx_VOLT_MASK_MC34708) | SWx_1_300V_MC34708;
+ ret |= pmic_reg_write(p, REG_SW_1, val);
+
+ /* Set global reset timer to 4s */
+ pmic_reg_read(p, REG_POWER_CTL2, &val);
+ val = (val & ~TIMER_MASK_MC34708) | TIMER_4S_MC34708;
+ ret |= pmic_reg_write(p, REG_POWER_CTL2, val);
+
+ /* Set VUSBSEL and VUSBEN for USB PHY supply*/
+ pmic_reg_read(p, REG_MODE_0, &val);
+ val |= (VUSBSEL_MC34708 | VUSBEN_MC34708);
+ ret |= pmic_reg_write(p, REG_MODE_0, val);
+
+ /* Set SWBST to 5V in auto mode */
+ val = SWBST_AUTO;
+ ret |= pmic_reg_write(p, SWBST_CTRL, val);
+ }
+
+ return ret;
+}
+
+static void clock_1GHz(void)
+{
+ int ret;
+ u32 ref_clk = CONFIG_SYS_MX5_HCLK;
+ /*
+ * After increasing voltage to 1.25V, we can switch
+ * CPU clock to 1GHz and DDR to 400MHz safely
+ */
+ ret = mxc_set_clock(ref_clk, 1000, MXC_ARM_CLK);
+ if (ret)
+ printf("CPU: Switch CPU clock to 1GHZ failed\n");
+
+ ret = mxc_set_clock(ref_clk, 400, MXC_PERIPH_CLK);
+ ret |= mxc_set_clock(ref_clk, 400, MXC_DDR_CLK);
+ if (ret)
+ printf("CPU: Switch DDR clock to 400MHz failed\n");
+}
+
int board_early_init_f(void)
{
setup_iomux_uart();
@@ -298,10 +410,38 @@ int board_early_init_f(void)
return 0;
}
+int print_cpuinfo(void)
+{
+ u32 cpurev;
+
+ cpurev = get_cpu_rev();
+ printf("CPU: Freescale i.MX%x family rev%d.%d at %d MHz\n",
+ (cpurev & 0xFF000) >> 12,
+ (cpurev & 0x000F0) >> 4,
+ (cpurev & 0x0000F) >> 0,
+ mxc_get_clock(MXC_ARM_CLK) / 1000000);
+ printf("Reset cause: %s\n", get_reset_cause());
+ return 0;
+}
+
+#ifdef CONFIG_BOARD_LATE_INIT
+int board_late_init(void)
+{
+ setup_iomux_i2c();
+ if (!power_init())
+ clock_1GHz();
+ print_cpuinfo();
+
+ return 0;
+}
+#endif
+
int board_init(void)
{
gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
+ mxc_set_sata_internal_clock();
+
return 0;
}
diff --git a/board/freescale/mx6qsabrelite/mx6qsabrelite.c b/board/freescale/mx6qsabrelite/mx6qsabrelite.c
index fda3e41a03..29cbfed120 100644
--- a/board/freescale/mx6qsabrelite/mx6qsabrelite.c
+++ b/board/freescale/mx6qsabrelite/mx6qsabrelite.c
@@ -25,6 +25,7 @@
#include <asm/arch/imx-regs.h>
#include <asm/arch/mx6x_pins.h>
#include <asm/arch/iomux-v3.h>
+#include <asm/arch/clock.h>
#include <asm/errno.h>
#include <asm/gpio.h>
#include <mmc.h>
@@ -50,6 +51,10 @@ DECLARE_GLOBAL_DATA_PTR;
PAD_CTL_PUS_100K_DOWN | PAD_CTL_SPEED_MED | \
PAD_CTL_DSE_40ohm | PAD_CTL_SRE_FAST)
+#define BUTTON_PAD_CTRL (PAD_CTL_PKE | PAD_CTL_PUE | \
+ PAD_CTL_PUS_100K_UP | PAD_CTL_SPEED_MED | \
+ PAD_CTL_DSE_40ohm | PAD_CTL_HYS)
+
int dram_init(void)
{
gd->ram_size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE);
@@ -122,6 +127,22 @@ iomux_v3_cfg_t enet_pads2[] = {
MX6Q_PAD_RGMII_RX_CTL__RGMII_RX_CTL | MUX_PAD_CTRL(ENET_PAD_CTRL),
};
+/* Button assignments for J14 */
+static iomux_v3_cfg_t button_pads[] = {
+ /* Menu */
+ MX6Q_PAD_NANDF_D1__GPIO_2_1 | MUX_PAD_CTRL(BUTTON_PAD_CTRL),
+ /* Back */
+ MX6Q_PAD_NANDF_D2__GPIO_2_2 | MUX_PAD_CTRL(BUTTON_PAD_CTRL),
+ /* Labelled Search (mapped to Power under Android) */
+ MX6Q_PAD_NANDF_D3__GPIO_2_3 | MUX_PAD_CTRL(BUTTON_PAD_CTRL),
+ /* Home */
+ MX6Q_PAD_NANDF_D4__GPIO_2_4 | MUX_PAD_CTRL(BUTTON_PAD_CTRL),
+ /* Volume Down */
+ MX6Q_PAD_GPIO_19__GPIO_4_5 | MUX_PAD_CTRL(BUTTON_PAD_CTRL),
+ /* Volume Up */
+ MX6Q_PAD_GPIO_18__GPIO_7_13 | MUX_PAD_CTRL(BUTTON_PAD_CTRL),
+};
+
static void setup_iomux_enet(void)
{
gpio_direction_output(87, 0); /* GPIO 3-23 */
@@ -135,7 +156,7 @@ static void setup_iomux_enet(void)
/* Need delay 10ms according to KSZ9021 spec */
udelay(1000 * 10);
- gpio_direction_output(87, 1); /* GPIO 3-23 */
+ gpio_set_value(87, 1); /* GPIO 3-23 */
imx_iomux_v3_setup_multiple_pads(enet_pads2, ARRAY_SIZE(enet_pads2));
}
@@ -267,11 +288,44 @@ int board_eth_init(bd_t *bis)
return 0;
}
+static void setup_buttons(void)
+{
+ imx_iomux_v3_setup_multiple_pads(button_pads,
+ ARRAY_SIZE(button_pads));
+}
+
+#ifdef CONFIG_CMD_SATA
+
+int setup_sata(void)
+{
+ struct iomuxc_base_regs *const iomuxc_regs
+ = (struct iomuxc_base_regs *) IOMUXC_BASE_ADDR;
+ int ret = enable_sata_clock();
+ if (ret)
+ return ret;
+
+ clrsetbits_le32(&iomuxc_regs->gpr[13],
+ IOMUXC_GPR13_SATA_MASK,
+ IOMUXC_GPR13_SATA_PHY_8_RXEQ_3P0DB
+ |IOMUXC_GPR13_SATA_PHY_7_SATA2M
+ |IOMUXC_GPR13_SATA_SPEED_3G
+ |(3<<IOMUXC_GPR13_SATA_PHY_6_SHIFT)
+ |IOMUXC_GPR13_SATA_SATA_PHY_5_SS_DISABLED
+ |IOMUXC_GPR13_SATA_SATA_PHY_4_ATTEN_9_16
+ |IOMUXC_GPR13_SATA_PHY_3_TXBOOST_0P00_DB
+ |IOMUXC_GPR13_SATA_PHY_2_TX_1P104V
+ |IOMUXC_GPR13_SATA_PHY_1_SLOW);
+
+ return 0;
+}
+#endif
+
int board_early_init_f(void)
{
- setup_iomux_uart();
+ setup_iomux_uart();
+ setup_buttons();
- return 0;
+ return 0;
}
int board_init(void)
@@ -283,6 +337,10 @@ int board_init(void)
setup_spi();
#endif
+#ifdef CONFIG_CMD_SATA
+ setup_sata();
+#endif
+
return 0;
}
@@ -292,3 +350,94 @@ int checkboard(void)
return 0;
}
+
+struct button_key {
+ char const *name;
+ unsigned gpnum;
+ char ident;
+};
+
+static struct button_key const buttons[] = {
+ {"back", GPIO_NUMBER(2, 2), 'B'},
+ {"home", GPIO_NUMBER(2, 4), 'H'},
+ {"menu", GPIO_NUMBER(2, 1), 'M'},
+ {"search", GPIO_NUMBER(2, 3), 'S'},
+ {"volup", GPIO_NUMBER(7, 13), 'V'},
+ {"voldown", GPIO_NUMBER(4, 5), 'v'},
+};
+
+/*
+ * generate a null-terminated string containing the buttons pressed
+ * returns number of keys pressed
+ */
+static int read_keys(char *buf)
+{
+ int i, numpressed = 0;
+ for (i = 0; i < ARRAY_SIZE(buttons); i++) {
+ if (!gpio_get_value(buttons[i].gpnum))
+ buf[numpressed++] = buttons[i].ident;
+ }
+ buf[numpressed] = '\0';
+ return numpressed;
+}
+
+static int do_kbd(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ char envvalue[ARRAY_SIZE(buttons)+1];
+ int numpressed = read_keys(envvalue);
+ setenv("keybd", envvalue);
+ return numpressed == 0;
+}
+
+U_BOOT_CMD(
+ kbd, 1, 1, do_kbd,
+ "Tests for keypresses, sets 'keybd' environment variable",
+ "Returns 0 (true) to shell if key is pressed."
+);
+
+#ifdef CONFIG_PREBOOT
+static char const kbd_magic_prefix[] = "key_magic";
+static char const kbd_command_prefix[] = "key_cmd";
+
+static void preboot_keys(void)
+{
+ int numpressed;
+ char keypress[ARRAY_SIZE(buttons)+1];
+ numpressed = read_keys(keypress);
+ if (numpressed) {
+ char *kbd_magic_keys = getenv("magic_keys");
+ char *suffix;
+ /*
+ * loop over all magic keys
+ */
+ for (suffix = kbd_magic_keys; *suffix; ++suffix) {
+ char *keys;
+ char magic[sizeof(kbd_magic_prefix) + 1];
+ sprintf(magic, "%s%c", kbd_magic_prefix, *suffix);
+ keys = getenv(magic);
+ if (keys) {
+ if (!strcmp(keys, keypress))
+ break;
+ }
+ }
+ if (*suffix) {
+ char cmd_name[sizeof(kbd_command_prefix) + 1];
+ char *cmd;
+ sprintf(cmd_name, "%s%c", kbd_command_prefix, *suffix);
+ cmd = getenv(cmd_name);
+ if (cmd) {
+ setenv("preboot", cmd);
+ return;
+ }
+ }
+ }
+}
+#endif
+
+int misc_init_r(void)
+{
+#ifdef CONFIG_PREBOOT
+ preboot_keys();
+#endif
+ return 0;
+}
diff --git a/board/freescale/p1010rdb/ddr.c b/board/freescale/p1010rdb/ddr.c
index e5d8423df0..36c8545059 100644
--- a/board/freescale/p1010rdb/ddr.c
+++ b/board/freescale/p1010rdb/ddr.c
@@ -31,7 +31,7 @@
DECLARE_GLOBAL_DATA_PTR;
-#ifndef CONFIG_DDR_RAW_TIMING
+#ifndef CONFIG_SYS_DDR_RAW_TIMING
#define CONFIG_SYS_DRAM_SIZE 1024
fsl_ddr_cfg_regs_t ddr_cfg_regs_800 = {
@@ -165,7 +165,7 @@ phys_size_t fixed_sdram(void)
return ddr_size;
}
-#else /* CONFIG_DDR_RAW_TIMING */
+#else /* CONFIG_SYS_DDR_RAW_TIMING */
/*
* Samsung K4B2G0846C-HCF8
* The following timing are for "downshift"
@@ -247,4 +247,4 @@ void fsl_ddr_board_options(memctl_options_t *popts,
}
}
-#endif /* CONFIG_DDR_RAW_TIMING */
+#endif /* CONFIG_SYS_DDR_RAW_TIMING */
diff --git a/board/freescale/p1010rdb/p1010rdb.c b/board/freescale/p1010rdb/p1010rdb.c
index b9e66f7fa7..79a6ead7dd 100644
--- a/board/freescale/p1010rdb/p1010rdb.c
+++ b/board/freescale/p1010rdb/p1010rdb.c
@@ -165,11 +165,7 @@ int checkboard(void)
struct cpu_type *cpu;
cpu = gd->cpu;
- printf("Board: %sRDB ", cpu->name);
-#ifdef CONFIG_PHYS_64BIT
- puts("(36-bit addrmap)");
-#endif
- puts("\n");
+ printf("Board: %sRDB\n", cpu->name);
return 0;
}
diff --git a/board/freescale/p1022ds/p1022ds.c b/board/freescale/p1022ds/p1022ds.c
index 456d9b0e34..aca30f3680 100644
--- a/board/freescale/p1022ds/p1022ds.c
+++ b/board/freescale/p1022ds/p1022ds.c
@@ -56,12 +56,8 @@ int checkboard(void)
{
u8 sw;
- puts("Board: P1022DS ");
-#ifdef CONFIG_PHYS_64BIT
- puts("(36-bit addrmap) ");
-#endif
-
- printf("Sys ID: 0x%02x, Sys Ver: 0x%02x, FPGA Ver: 0x%02x, ",
+ printf("Board: P1022DS Sys ID: 0x%02x, "
+ "Sys Ver: 0x%02x, FPGA Ver: 0x%02x, ",
in_8(&pixis->id), in_8(&pixis->arch), in_8(&pixis->scver));
sw = in_8(&PIXIS_SW(PIXIS_LBMAP_SWITCH));
diff --git a/board/freescale/p1023rds/p1023rds.c b/board/freescale/p1023rds/p1023rds.c
index 546819cb59..082976a924 100644
--- a/board/freescale/p1023rds/p1023rds.c
+++ b/board/freescale/p1023rds/p1023rds.c
@@ -197,6 +197,12 @@ void ft_board_setup(void *blob, bd_t *bd)
fdt_fixup_memory(blob, (u64)base, (u64)size);
+ /* By default NOR is on, and NAND is disabled */
+#ifdef CONFIG_NAND_U_BOOT
+ do_fixup_by_path_string(blob, "nor_flash", "status", "disabled");
+ do_fixup_by_path_string(blob, "nand_flash", "status", "okay");
+#endif
+
fdt_fixup_fman_ethernet(blob);
}
#endif
diff --git a/board/freescale/p1_p2_rdb/p1_p2_rdb.c b/board/freescale/p1_p2_rdb/p1_p2_rdb.c
index cfbae69119..437eaf0fdd 100644
--- a/board/freescale/p1_p2_rdb/p1_p2_rdb.c
+++ b/board/freescale/p1_p2_rdb/p1_p2_rdb.c
@@ -110,9 +110,7 @@ int checkboard (void)
cpu = gd->cpu;
printf ("Board: %sRDB Rev%c\n", cpu->name, board_rev);
-#ifdef CONFIG_PHYS_64BIT
- puts ("(36-bit addrmap) \n");
-#endif
+
setbits_be32(&pgpio->gpdir, GPIO_DIR);
/*
diff --git a/board/freescale/p1_p2_rdb_pc/ddr.c b/board/freescale/p1_p2_rdb_pc/ddr.c
index f0cbde72ab..88ba56f457 100644
--- a/board/freescale/p1_p2_rdb_pc/ddr.c
+++ b/board/freescale/p1_p2_rdb_pc/ddr.c
@@ -15,7 +15,7 @@
#include <asm/io.h>
#include <asm/fsl_law.h>
-#ifdef CONFIG_DDR_RAW_TIMING
+#ifdef CONFIG_SYS_DDR_RAW_TIMING
#if defined(CONFIG_P1020RDB_PROTO) || \
defined(CONFIG_P1021RDB) || \
defined(CONFIG_P1020UTM)
@@ -204,7 +204,7 @@ int fsl_ddr_get_dimm_params(dimm_params_t *pdimm,
return 0;
}
-#endif /* CONFIG_DDR_RAW_TIMING */
+#endif /* CONFIG_SYS_DDR_RAW_TIMING */
/* Fixed sdram init -- doesn't use serial presence detect. */
phys_size_t fixed_sdram(void)
diff --git a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c
index a60c5a20a9..aa39260ca7 100644
--- a/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c
+++ b/board/freescale/p1_p2_rdb_pc/p1_p2_rdb_pc.c
@@ -225,13 +225,7 @@ int checkboard(void)
ccsr_gur_t *gur = (void *)(CONFIG_SYS_MPC85xx_GUTS_ADDR);
u8 in, out, io_config, val;
- printf("Board: %s ", CONFIG_BOARDNAME);
-
-#ifdef CONFIG_PHYS_64BIT
- puts("(36-bit addrmap) ");
-#endif
-
- printf("CPLD: V%d.%d PCBA: V%d.0\n",
+ printf("Board: %s CPLD: V%d.%d PCBA: V%d.0\n", CONFIG_BOARDNAME,
in_8(&cpld_data->cpld_rev_major) & 0x0F,
in_8(&cpld_data->cpld_rev_minor) & 0x0F,
in_8(&cpld_data->pcba_rev) & 0x0F);
diff --git a/board/freescale/p2020ds/p2020ds.c b/board/freescale/p2020ds/p2020ds.c
index d3af6cf185..e8d31a4acf 100644
--- a/board/freescale/p2020ds/p2020ds.c
+++ b/board/freescale/p2020ds/p2020ds.c
@@ -61,12 +61,8 @@ int checkboard(void)
{
u8 sw;
- puts("Board: P2020DS ");
-#ifdef CONFIG_PHYS_64BIT
- puts("(36-bit addrmap) ");
-#endif
-
- printf("Sys ID: 0x%02x, Sys Ver: 0x%02x, FPGA Ver: 0x%02x, ",
+ printf("Board: P2020DS Sys ID: 0x%02x, "
+ "Sys Ver: 0x%02x, FPGA Ver: 0x%02x, ",
in_8(&pixis->id), in_8(&pixis->arch), in_8(&pixis->scver));
sw = in_8(&PIXIS_SW(PIXIS_LBMAP_SWITCH));
diff --git a/board/freescale/p2041rdb/p2041rdb.c b/board/freescale/p2041rdb/p2041rdb.c
index 1f6a34b3d9..976c8d290b 100644
--- a/board/freescale/p2041rdb/p2041rdb.c
+++ b/board/freescale/p2041rdb/p2041rdb.c
@@ -54,10 +54,6 @@ int checkboard(void)
sw = CPLD_READ(fbank_sel);
printf("vBank: %d\n", sw & 0x1);
-#ifdef CONFIG_PHYS_64BIT
- puts("36-bit Addressing\n");
-#endif
-
/*
* Display the RCW, so that no one gets confused as to what RCW
* we're actually using for this boot.
diff --git a/board/freescale/p3060qds/p3060qds.c b/board/freescale/p3060qds/p3060qds.c
index c6c74f2004..c7cca2a0cc 100644
--- a/board/freescale/p3060qds/p3060qds.c
+++ b/board/freescale/p3060qds/p3060qds.c
@@ -68,9 +68,6 @@ int checkboard(void)
else
printf("invalid setting of SW%u\n", PIXIS_LBMAP_SWITCH);
-#ifdef CONFIG_PHYS_64BIT
- puts("36-bit Addressing\n");
-#endif
puts("Reset Configuration Word (RCW):");
for (i = 0; i < ARRAY_SIZE(gur->rcwsr); i++) {
u32 rcw = in_be32(&gur->rcwsr[i]);
diff --git a/board/gdsys/405ep/405ep.c b/board/gdsys/405ep/405ep.c
index 8b80533d98..bc9b7d0a97 100644
--- a/board/gdsys/405ep/405ep.c
+++ b/board/gdsys/405ep/405ep.c
@@ -28,12 +28,9 @@
#include <asm/ppc4xx-gpio.h>
#include <asm/global_data.h>
+#include "405ep.h"
#include <gdsys_fpga.h>
-#define LATCH0_BASE (CONFIG_SYS_LATCH_BASE)
-#define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100)
-#define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200)
-
#define REFLECTION_TESTPATTERN 0xdede
#define REFLECTION_TESTPATTERN_INV (~REFLECTION_TESTPATTERN & 0xffff)
@@ -55,7 +52,6 @@ void print_fpga_state(unsigned dev)
int board_early_init_f(void)
{
unsigned k;
- unsigned ctr;
for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k)
gd->fpga_state[k] = 0;
@@ -73,26 +69,29 @@ int board_early_init_f(void)
* -> ca. 15 us
*/
mtebc(EBC0_CFG, 0xa8400000); /* ebc always driven */
+ return 0;
+}
- /*
- * setup io-latches for reset
- */
- out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET);
- out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET);
+int board_early_init_r(void)
+{
+ unsigned k;
+ unsigned ctr;
- /*
- * set "startup-finished"-gpios
- */
- gpio_write_bit(21, 0);
- gpio_write_bit(22, 1);
+ for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k)
+ gd->fpga_state[k] = 0;
/*
- * wait for fpga-done
+ * reset FPGA
*/
+ gd405ep_init();
+
+ gd405ep_set_fpga_reset(1);
+
+ gd405ep_setup_hw();
+
for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) {
ctr = 0;
- while (!(in_le16((void *)LATCH2_BASE)
- & CONFIG_SYS_FPGA_DONE(k))) {
+ while (!gd405ep_get_fpga_done(k)) {
udelay(100000);
if (ctr++ > 5) {
gd->fpga_state[k] |= FPGA_STATE_DONE_FAILED;
@@ -101,15 +100,13 @@ int board_early_init_f(void)
}
}
- /*
- * setup io-latches for boot (stop reset)
- */
udelay(10);
- out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT);
- out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT);
+
+ gd405ep_set_fpga_reset(0);
for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) {
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(k);
+ struct ihs_fpga *fpga =
+ (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(k);
#ifdef CONFIG_SYS_FPGA_NO_RFL_HI
u16 *reflection_target = &fpga->reflection_low;
#else
diff --git a/board/gdsys/405ep/405ep.h b/board/gdsys/405ep/405ep.h
new file mode 100644
index 0000000000..5647dbc62b
--- /dev/null
+++ b/board/gdsys/405ep/405ep.h
@@ -0,0 +1,10 @@
+#ifndef __405EP_H_
+#define __405EP_H_
+
+/* functions to be provided by board implementation */
+void gd405ep_init(void);
+void gd405ep_set_fpga_reset(unsigned state);
+void gd405ep_setup_hw(void);
+int gd405ep_get_fpga_done(unsigned fpga);
+
+#endif /* __405EP_H_ */
diff --git a/board/gdsys/405ep/Makefile b/board/gdsys/405ep/Makefile
index feb5cecf0b..38e5ea4e1d 100644
--- a/board/gdsys/405ep/Makefile
+++ b/board/gdsys/405ep/Makefile
@@ -25,6 +25,7 @@ include $(TOPDIR)/config.mk
LIB = $(obj)lib$(BOARD).o
+COBJS-$(CONFIG_NEO) += neo.o
COBJS-$(CONFIG_IO) += io.o
COBJS-$(CONFIG_IOCON) += iocon.o
COBJS-$(CONFIG_DLVISION_10G) += dlvision-10g.o
diff --git a/board/gdsys/405ep/dlvision-10g.c b/board/gdsys/405ep/dlvision-10g.c
index f55afbd129..644493baaf 100644
--- a/board/gdsys/405ep/dlvision-10g.c
+++ b/board/gdsys/405ep/dlvision-10g.c
@@ -26,16 +26,20 @@
#include <asm/processor.h>
#include <asm/io.h>
#include <asm/ppc4xx-gpio.h>
+#include <dtt.h>
+#include "405ep.h"
#include <gdsys_fpga.h>
#include "../common/osd.h"
+#define LATCH0_BASE (CONFIG_SYS_LATCH_BASE)
+#define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100)
#define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200)
-#define LATCH2_MC2_PRESENT_N 0x0080
-
#define LATCH3_BASE (CONFIG_SYS_LATCH_BASE + 0x300)
+#define LATCH2_MC2_PRESENT_N 0x0080
+
enum {
UNITTYPE_VIDEO_USER = 0,
UNITTYPE_MAIN_USER = 1,
@@ -46,6 +50,8 @@ enum {
enum {
HWVER_101 = 0,
HWVER_110 = 1,
+ HWVER_120 = 2,
+ HWVER_130 = 3,
};
enum {
@@ -65,6 +71,14 @@ enum {
RAM_DDR2_64 = 2,
};
+int misc_init_r(void)
+{
+ /* startup fans */
+ dtt_init();
+
+ return 0;
+}
+
static unsigned int get_hwver(void)
{
u16 latch3 = in_le16((void *)LATCH3_BASE);
@@ -81,7 +95,7 @@ static unsigned int get_mc2_present(void)
static void print_fpga_info(unsigned dev)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(dev);
+ struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(dev);
u16 versions = in_le16(&fpga->versions);
u16 fpga_version = in_le16(&fpga->fpga_version);
u16 fpga_features = in_le16(&fpga->fpga_features);
@@ -146,7 +160,15 @@ static void print_fpga_info(unsigned dev)
break;
case HWVER_110:
- printf(" HW-Ver 1.10\n");
+ printf(" HW-Ver 1.10-1.12\n");
+ break;
+
+ case HWVER_120:
+ printf(" HW-Ver 1.20\n");
+ break;
+
+ case HWVER_130:
+ printf(" HW-Ver 1.30\n");
break;
default:
@@ -223,32 +245,31 @@ static void print_fpga_info(unsigned dev)
*/
int checkboard(void)
{
- char buf[64];
- int i = getenv_f("serial#", buf, sizeof(buf));
+ char *s = getenv("serial#");
- printf("Board: ");
+ puts("Board: ");
- printf("DLVision 10G");
+ puts("DLVision 10G");
- if (i > 0) {
+ if (s != NULL) {
puts(", serial# ");
- puts(buf);
+ puts(s);
}
puts("\n");
- print_fpga_info(0);
- if (get_mc2_present())
- print_fpga_info(1);
-
return 0;
}
int last_stage_init(void)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
+ struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
u16 versions = in_le16(&fpga->versions);
+ print_fpga_info(0);
+ if (get_mc2_present())
+ print_fpga_info(1);
+
if (((versions >> 4) & 0x000f) != UNITTYPE_MAIN_USER)
return 0;
@@ -261,3 +282,32 @@ int last_stage_init(void)
return 0;
}
+
+void gd405ep_init(void)
+{
+}
+
+void gd405ep_set_fpga_reset(unsigned state)
+{
+ if (state) {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET);
+ } else {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT);
+ }
+}
+
+void gd405ep_setup_hw(void)
+{
+ /*
+ * set "startup-finished"-gpios
+ */
+ gpio_write_bit(21, 0);
+ gpio_write_bit(22, 1);
+}
+
+int gd405ep_get_fpga_done(unsigned fpga)
+{
+ return in_le16((void *)LATCH2_BASE) & CONFIG_SYS_FPGA_DONE(fpga);
+}
diff --git a/board/gdsys/405ep/io.c b/board/gdsys/405ep/io.c
index db1ea7f0c5..070dcbbdfc 100644
--- a/board/gdsys/405ep/io.c
+++ b/board/gdsys/405ep/io.c
@@ -27,10 +27,16 @@
#include <asm/io.h>
#include <asm/ppc4xx-gpio.h>
+#include <dtt.h>
#include <miiphy.h>
+#include "405ep.h"
#include <gdsys_fpga.h>
+#define LATCH0_BASE (CONFIG_SYS_LATCH_BASE)
+#define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100)
+#define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200)
+
#define PHYREG_CONTROL 0
#define PHYREG_PAGE_ADDRESS 22
#define PHYREG_PG0_COPPER_SPECIFIC_CONTROL_1 16
@@ -47,6 +53,14 @@ enum {
HWVER_122 = 3,
};
+int misc_init_r(void)
+{
+ /* startup fans */
+ dtt_init();
+
+ return 0;
+}
+
int configure_gbit_phy(unsigned char addr)
{
unsigned short value;
@@ -87,9 +101,23 @@ err_out:
*/
int checkboard(void)
{
- char buf[64];
- int i = getenv_f("serial#", buf, sizeof(buf));
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
+ char *s = getenv("serial#");
+
+ puts("Board: CATCenter Io");
+
+ if (s != NULL) {
+ puts(", serial# ");
+ puts(s);
+ }
+
+ puts("\n");
+
+ return 0;
+}
+
+static void print_fpga_info(void)
+{
+ struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
u16 versions = in_le16(&fpga->versions);
u16 fpga_version = in_le16(&fpga->fpga_version);
u16 fpga_features = in_le16(&fpga->fpga_features);
@@ -103,15 +131,7 @@ int checkboard(void)
feature_channels = fpga_features & 0x007f;
feature_expansion = fpga_features & (1<<15);
- printf("Board: ");
-
- printf("CATCenter Io");
-
- if (i > 0) {
- puts(", serial# ");
- puts(buf);
- }
- puts("\n ");
+ puts("FPGA: ");
switch (unit_type) {
case UNITTYPE_CCD_SWITCH:
@@ -152,8 +172,6 @@ int checkboard(void)
printf(" %d channel(s)", feature_channels);
printf(", expansion %ssupported\n", feature_expansion ? "" : "un");
-
- return 0;
}
/*
@@ -161,9 +179,11 @@ int checkboard(void)
*/
int last_stage_init(void)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
+ struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
unsigned int k;
+ print_fpga_info();
+
miiphy_register(CONFIG_SYS_GBIT_MII_BUSNAME,
bb_miiphy_read, bb_miiphy_write);
@@ -175,3 +195,32 @@ int last_stage_init(void)
return 0;
}
+
+void gd405ep_init(void)
+{
+}
+
+void gd405ep_set_fpga_reset(unsigned state)
+{
+ if (state) {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET);
+ } else {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT);
+ }
+}
+
+void gd405ep_setup_hw(void)
+{
+ /*
+ * set "startup-finished"-gpios
+ */
+ gpio_write_bit(21, 0);
+ gpio_write_bit(22, 1);
+}
+
+int gd405ep_get_fpga_done(unsigned fpga)
+{
+ return in_le16((void *)LATCH2_BASE) & CONFIG_SYS_FPGA_DONE(fpga);
+}
diff --git a/board/gdsys/405ep/iocon.c b/board/gdsys/405ep/iocon.c
index ce53340894..0fc7db2012 100644
--- a/board/gdsys/405ep/iocon.c
+++ b/board/gdsys/405ep/iocon.c
@@ -27,10 +27,15 @@
#include <asm/io.h>
#include <asm/ppc4xx-gpio.h>
+#include "405ep.h"
#include <gdsys_fpga.h>
#include "../common/osd.h"
+#define LATCH0_BASE (CONFIG_SYS_LATCH_BASE)
+#define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100)
+#define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200)
+
enum {
UNITTYPE_MAIN_SERVER = 0,
UNITTYPE_MAIN_USER = 1,
@@ -69,9 +74,25 @@ enum {
*/
int checkboard(void)
{
- char buf[64];
- int i = getenv_f("serial#", buf, sizeof(buf));
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
+ char *s = getenv("serial#");
+
+ puts("Board: ");
+
+ puts("IoCon");
+
+ if (s != NULL) {
+ puts(", serial# ");
+ puts(s);
+ }
+
+ puts("\n");
+
+ return 0;
+}
+
+static void print_fpga_info(void)
+{
+ struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
u16 versions = in_le16(&fpga->versions);
u16 fpga_version = in_le16(&fpga->fpga_version);
u16 fpga_features = in_le16(&fpga->fpga_features);
@@ -95,16 +116,6 @@ int checkboard(void)
feature_carriers = (fpga_features & 0x000c) >> 2;
feature_video_channels = fpga_features & 0x0003;
- printf("Board: ");
-
- printf("IoCon");
-
- if (i > 0) {
- puts(", serial# ");
- puts(buf);
- }
- puts("\n ");
-
switch (unit_type) {
case UNITTYPE_MAIN_USER:
printf("Mainchannel");
@@ -205,12 +216,12 @@ int checkboard(void)
printf(", %d carrier(s)", feature_carriers);
printf(", %d video channel(s)\n", feature_video_channels);
-
- return 0;
}
int last_stage_init(void)
{
+ print_fpga_info();
+
return osd_probe(0);
}
@@ -231,3 +242,32 @@ int fpga_gpio_get(int pin)
{
return in_le16((void *)(CONFIG_SYS_FPGA0_BASE + 0x14)) & pin;
}
+
+void gd405ep_init(void)
+{
+}
+
+void gd405ep_set_fpga_reset(unsigned state)
+{
+ if (state) {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET);
+ } else {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT);
+ }
+}
+
+void gd405ep_setup_hw(void)
+{
+ /*
+ * set "startup-finished"-gpios
+ */
+ gpio_write_bit(21, 0);
+ gpio_write_bit(22, 1);
+}
+
+int gd405ep_get_fpga_done(unsigned fpga)
+{
+ return in_le16((void *)LATCH2_BASE) & CONFIG_SYS_FPGA_DONE(fpga);
+}
diff --git a/board/gdsys/405ep/neo.c b/board/gdsys/405ep/neo.c
new file mode 100644
index 0000000000..d336e55c5d
--- /dev/null
+++ b/board/gdsys/405ep/neo.c
@@ -0,0 +1,161 @@
+/*
+ * (C) Copyright 2011
+ * Dirk Eibach, Guntermann & Drunck GmbH, eibach@gdsys.de
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <command.h>
+#include <asm/processor.h>
+#include <asm/io.h>
+#include <asm/ppc4xx-gpio.h>
+#include <dtt.h>
+
+#include "405ep.h"
+#include <gdsys_fpga.h>
+
+#define LATCH0_BASE (CONFIG_SYS_LATCH_BASE)
+#define LATCH1_BASE (CONFIG_SYS_LATCH_BASE + 0x100)
+#define LATCH2_BASE (CONFIG_SYS_LATCH_BASE + 0x200)
+
+enum {
+ UNITTYPE_CCX16 = 1,
+ UNITTYPE_CCIP216 = 2,
+};
+
+enum {
+ HWVER_300 = 3,
+};
+
+int misc_init_r(void)
+{
+ /* startup fans */
+ dtt_init();
+
+ return 0;
+}
+
+int checkboard(void)
+{
+ char *s = getenv("serial#");
+
+ puts("Board: CATCenter Neo");
+
+ if (s != NULL) {
+ puts(", serial# ");
+ puts(s);
+ }
+
+ puts("\n");
+
+ return 0;
+}
+
+static void print_fpga_info(void)
+{
+ struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
+ u16 versions = in_le16(&fpga->versions);
+ u16 fpga_version = in_le16(&fpga->fpga_version);
+ u16 fpga_features = in_le16(&fpga->fpga_features);
+ int fpga_state = get_fpga_state(0);
+ unsigned unit_type;
+ unsigned hardware_version;
+ unsigned feature_channels;
+
+ puts("FPGA: ");
+ if (fpga_state & FPGA_STATE_DONE_FAILED) {
+ printf(" done timed out\n");
+ return;
+ }
+
+ if (fpga_state & FPGA_STATE_REFLECTION_FAILED) {
+ printf(" refelectione test failed\n");
+ return;
+ }
+
+ unit_type = (versions & 0xf000) >> 12;
+ hardware_version = versions & 0x000f;
+ feature_channels = fpga_features & 0x007f;
+
+ switch (unit_type) {
+ case UNITTYPE_CCX16:
+ printf("CCX-Switch");
+ break;
+
+ default:
+ printf("UnitType %d(not supported)", unit_type);
+ break;
+ }
+
+ switch (hardware_version) {
+ case HWVER_300:
+ printf(" HW-Ver 3.00-3.12\n");
+ break;
+
+ default:
+ printf(" HW-Ver %d(not supported)\n",
+ hardware_version);
+ break;
+ }
+
+ printf(" FPGA V %d.%02d, features:",
+ fpga_version / 100, fpga_version % 100);
+
+ printf(" %d channel(s)\n", feature_channels);
+}
+
+int last_stage_init(void)
+{
+ print_fpga_info();
+
+ return 0;
+}
+
+void gd405ep_init(void)
+{
+}
+
+void gd405ep_set_fpga_reset(unsigned state)
+{
+ if (state) {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_RESET);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_RESET);
+ } else {
+ out_le16((void *)LATCH0_BASE, CONFIG_SYS_LATCH0_BOOT);
+ out_le16((void *)LATCH1_BASE, CONFIG_SYS_LATCH1_BOOT);
+ }
+}
+
+void gd405ep_setup_hw(void)
+{
+ /*
+ * set "startup-finished"-gpios
+ */
+ gpio_write_bit(21, 0);
+ gpio_write_bit(22, 1);
+}
+
+int gd405ep_get_fpga_done(unsigned fpga)
+{
+ /*
+ * Neo hardware has no FPGA-DONE GPIO
+ */
+ return 1;
+}
diff --git a/board/gdsys/405ex/405ex.c b/board/gdsys/405ex/405ex.c
index 0d25214f42..5766c0f562 100644
--- a/board/gdsys/405ex/405ex.c
+++ b/board/gdsys/405ex/405ex.c
@@ -219,7 +219,8 @@ int board_early_init_r(void)
gd405ex_set_fpga_reset(0);
for (k = 0; k < CONFIG_SYS_FPGA_COUNT; ++k) {
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(k);
+ struct ihs_fpga *fpga =
+ (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(k);
#ifdef CONFIG_SYS_FPGA_NO_RFL_HI
u16 *reflection_target = &fpga->reflection_low;
#else
diff --git a/board/gdsys/405ex/io64.c b/board/gdsys/405ex/io64.c
index 177141dcc3..41fdef7da8 100644
--- a/board/gdsys/405ex/io64.c
+++ b/board/gdsys/405ex/io64.c
@@ -100,7 +100,7 @@ int misc_init_r(void)
static void print_fpga_info(unsigned dev)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(dev);
+ struct ihs_fpga *fpga = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(dev);
u16 versions = in_le16(&fpga->versions);
u16 fpga_version = in_le16(&fpga->fpga_version);
u16 fpga_features = in_le16(&fpga->fpga_features);
@@ -242,8 +242,8 @@ int last_stage_init(void)
{
unsigned int k;
unsigned int fpga;
- ihs_fpga_t *fpga0 = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(0);
- ihs_fpga_t *fpga1 = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(1);
+ struct ihs_fpga *fpga0 = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(0);
+ struct ihs_fpga *fpga1 = (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(1);
int failed = 0;
char str_phys[] = "Setup PHYs -";
char str_serdes[] = "Start SERDES blocks";
diff --git a/board/gdsys/common/osd.c b/board/gdsys/common/osd.c
index 5065f9d5e4..a192c9851b 100644
--- a/board/gdsys/common/osd.c
+++ b/board/gdsys/common/osd.c
@@ -70,8 +70,8 @@ enum {
#if defined(CONFIG_SYS_ICS8N3QV01) || defined(CONFIG_SYS_SIL1178)
static void fpga_iic_write(unsigned screen, u8 slave, u8 reg, u8 data)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(screen);
- ihs_i2c_t *i2c = &fpga->i2c;
+ struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
+ struct ihs_i2c *i2c = &fpga->i2c;
while (in_le16(&fpga->extended_interrupt) & (1 << 12))
;
@@ -81,8 +81,8 @@ static void fpga_iic_write(unsigned screen, u8 slave, u8 reg, u8 data)
static u8 fpga_iic_read(unsigned screen, u8 slave, u8 reg)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(screen);
- ihs_i2c_t *i2c = &fpga->i2c;
+ struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
+ struct ihs_i2c *i2c = &fpga->i2c;
unsigned int ctr = 0;
while (in_le16(&fpga->extended_interrupt) & (1 << 12))
@@ -129,7 +129,7 @@ static void mpc92469ac_calc_parameters(unsigned int fout,
static void mpc92469ac_set(unsigned screen, unsigned int fout)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(screen);
+ struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
unsigned int n;
unsigned int m;
unsigned int bitval = 0;
@@ -265,8 +265,8 @@ static void ics8n3qv01_set(unsigned screen, unsigned int fout)
static int osd_write_videomem(unsigned screen, unsigned offset,
u16 *data, size_t charcount)
{
- ihs_fpga_t *fpga =
- (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(screen);
+ struct ihs_fpga *fpga =
+ (struct ihs_fpga *) CONFIG_SYS_FPGA_BASE(screen);
unsigned int k;
for (k = 0; k < charcount; ++k) {
@@ -318,8 +318,8 @@ static int osd_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int osd_probe(unsigned screen)
{
- ihs_fpga_t *fpga = (ihs_fpga_t *) CONFIG_SYS_FPGA_BASE(screen);
- ihs_osd_t *osd = &fpga->osd;
+ struct ihs_fpga *fpga = (struct ihs_fpga *)CONFIG_SYS_FPGA_BASE(screen);
+ struct ihs_osd *osd = &fpga->osd;
u16 version = in_le16(&osd->version);
u16 features = in_le16(&osd->features);
unsigned width;
diff --git a/board/gdsys/neo/neo.c b/board/gdsys/neo/neo.c
deleted file mode 100644
index d21d599fa7..0000000000
--- a/board/gdsys/neo/neo.c
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * (C) Copyright 2007-2008
- * Dirk Eibach, Guntermann & Drunck GmbH, eibach@gdsys.de
- *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <command.h>
-#include <asm/processor.h>
-#include <asm/io.h>
-
-#define HWTYPE_CCX16 1
-#define HWREV_300 3
-
-int board_early_init_f(void)
-{
- mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */
- mtdcr(UIC0ER, 0x00000000); /* disable all ints */
- mtdcr(UIC0CR, 0x00000000); /* set all to be non-critical */
- mtdcr(UIC0PR, 0xFFFFFF80); /* set int polarities */
- mtdcr(UIC0TR, 0x10000000); /* set int trigger levels */
- mtdcr(UIC0VCR, 0x00000001); /* set vect base=0,INT0 highest prio */
- mtdcr(UIC0SR, 0xFFFFFFFF); /* clear all ints */
-
- /*
- * EBC Configuration Register: set ready timeout to 512 ebc-clks
- * -> ca. 15 us
- */
- mtebc(EBC0_CFG, 0xa8400000); /* ebc always driven */
-
- return 0;
-}
-
-/*
- * Check Board Identity:
- */
-int checkboard(void)
-{
- char buf[64];
- int i = getenv_f("serial#", buf, sizeof(buf));
- u16 val = in_le16((void *)CONFIG_FPGA_BASE + 2);
- u8 unit_type;
- u8 hardware_cpu_ports;
- u8 hardware_con_ports;
- u8 hardware_version;
-
- printf("Board: CATCenter Neo");
-
- if (i > 0) {
- puts(", serial# ");
- puts(buf);
- }
- puts("\n ");
-
- unit_type = (val & 0xf000) >> 12;
- hardware_cpu_ports = ((val & 0x0f00) >> 8) * 8;
- hardware_con_ports = ((val & 0x00f0) >> 4) * 2;
- hardware_version = val & 0x000f;
-
- switch (unit_type) {
- case HWTYPE_CCX16:
- printf("CCX16-FPGA (80 UARTs)");
- break;
-
- default:
- printf("UnitType %d, unsupported", unit_type);
- break;
- }
-
- printf(", %d cpu ports, %d console ports,",
- hardware_cpu_ports, hardware_con_ports);
-
- switch (hardware_version) {
- case HWREV_300:
- printf(" HW-Ver 3.00\n");
- break;
-
- default:
- printf(" HW-Ver %d, unsupported\n",
- hardware_version);
- break;
- }
-
- return 0;
-}
diff --git a/board/htkw/mcx/mcx.c b/board/htkw/mcx/mcx.c
index e593b43d48..8f75af19d4 100644
--- a/board/htkw/mcx/mcx.c
+++ b/board/htkw/mcx/mcx.c
@@ -69,17 +69,6 @@ int board_init(void)
}
/*
- * Routine: misc_init_r
- * Description: late init.
- */
-int misc_init_r(void)
-{
- dieid_num_r();
-
- return 0;
-}
-
-/*
* Routine: set_muxconf_regs
* Description: Setting up the configuration Mux registers specific to the
* hardware. Many pins need to be moved from protect to primary
@@ -93,7 +82,7 @@ void set_muxconf_regs(void)
#if defined(CONFIG_OMAP_HSMMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- return omap_mmc_init(0);
+ return omap_mmc_init(0, 0, 0);
}
#endif
diff --git a/board/isee/igep0020/igep0020.c b/board/isee/igep0020/igep0020.c
index 6a3777eb8c..971e31b5f3 100644
--- a/board/isee/igep0020/igep0020.c
+++ b/board/isee/igep0020/igep0020.c
@@ -52,8 +52,6 @@ static const u32 gpmc_lan_config[] = {
int board_init(void)
{
gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
- /* board id for Linux */
- gd->bd->bi_arch_number = MACH_TYPE_IGEP0020;
/* boot param addr */
gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
@@ -96,7 +94,7 @@ static void setup_net_chip(void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/isee/igep0030/igep0030.c b/board/isee/igep0030/igep0030.c
index 6a927350b4..653c1b5abb 100644
--- a/board/isee/igep0030/igep0030.c
+++ b/board/isee/igep0030/igep0030.c
@@ -39,8 +39,6 @@ DECLARE_GLOBAL_DATA_PTR;
int board_init(void)
{
gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
- /* board id for Linux */
- gd->bd->bi_arch_number = MACH_TYPE_IGEP0030;
/* boot param addr */
gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
@@ -50,7 +48,7 @@ int board_init(void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/logicpd/am3517evm/am3517evm.c b/board/logicpd/am3517evm/am3517evm.c
index 0a105bf281..d316f33cd1 100644
--- a/board/logicpd/am3517evm/am3517evm.c
+++ b/board/logicpd/am3517evm/am3517evm.c
@@ -79,7 +79,7 @@ void set_muxconf_regs(void)
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/logicpd/omap3som/omap3logic.c b/board/logicpd/omap3som/omap3logic.c
index bc7ec68f14..12bcfcb877 100644
--- a/board/logicpd/omap3som/omap3logic.c
+++ b/board/logicpd/omap3som/omap3logic.c
@@ -140,21 +140,10 @@ int board_init(void)
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- return omap_mmc_init(0);
+ return omap_mmc_init(0, 0, 0);
}
#endif
-/*
- * Routine: misc_init_r
- * Description: display die ID register
- */
-int misc_init_r(void)
-{
- dieid_num_r();
-
- return 0;
-}
-
#ifdef CONFIG_SMC911X
/* GPMC CS1 settings for Logic SOM LV/Torpedo LAN92xx Ethernet chip */
static const u32 gpmc_lan92xx_config[] = {
diff --git a/board/logicpd/zoom1/zoom1.c b/board/logicpd/zoom1/zoom1.c
index dec0b2611f..90b6b0fde5 100644
--- a/board/logicpd/zoom1/zoom1.c
+++ b/board/logicpd/zoom1/zoom1.c
@@ -92,7 +92,7 @@ void set_muxconf_regs(void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/logicpd/zoom2/zoom2.c b/board/logicpd/zoom2/zoom2.c
index be3083d9c3..8e18019801 100644
--- a/board/logicpd/zoom2/zoom2.c
+++ b/board/logicpd/zoom2/zoom2.c
@@ -183,7 +183,7 @@ void set_muxconf_regs (void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/matrix_vision/mvblx/mvblx.c b/board/matrix_vision/mvblx/mvblx.c
index 74b5b19be2..f68f312215 100644
--- a/board/matrix_vision/mvblx/mvblx.c
+++ b/board/matrix_vision/mvblx/mvblx.c
@@ -106,8 +106,8 @@ void set_muxconf_regs(void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
- omap_mmc_init(1);
+ omap_mmc_init(0, 0, 0);
+ omap_mmc_init(1, 0, 0);
return 0;
}
#endif
diff --git a/board/nvidia/common/Makefile b/board/nvidia/common/Makefile
index 3e748fdd20..a93d4583e7 100644
--- a/board/nvidia/common/Makefile
+++ b/board/nvidia/common/Makefile
@@ -27,6 +27,7 @@ LIB = $(obj)lib$(VENDOR).o
COBJS-y += board.o
COBJS-$(CONFIG_SPI_UART_SWITCH) += uart-spi-switch.o
+COBJS-$(CONFIG_TEGRA_CLOCK_SCALING) += emc.o
COBJS := $(COBJS-y)
SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c
index 85dd359ec9..2e22133591 100644
--- a/board/nvidia/common/board.c
+++ b/board/nvidia/common/board.c
@@ -23,6 +23,7 @@
#include <common.h>
#include <ns16550.h>
+#include <linux/compiler.h>
#include <asm/io.h>
#include <asm/arch/tegra2.h>
#include <asm/arch/sys_proto.h>
@@ -30,12 +31,17 @@
#include <asm/arch/board.h>
#include <asm/arch/clk_rst.h>
#include <asm/arch/clock.h>
+#include <asm/arch/emc.h>
#include <asm/arch/pinmux.h>
+#include <asm/arch/pmc.h>
+#include <asm/arch/pmu.h>
#include <asm/arch/uart.h>
+#include <asm/arch/warmboot.h>
#include <spi.h>
#include <asm/arch/usb.h>
#include <i2c.h>
#include "board.h"
+#include "emc.h"
DECLARE_GLOBAL_DATA_PTR;
@@ -59,11 +65,28 @@ void __pin_mux_usb(void)
void pin_mux_usb(void) __attribute__((weak, alias("__pin_mux_usb")));
/*
+ * Routine: power_det_init
+ * Description: turn off power detects
+ */
+static void power_det_init(void)
+{
+#if defined(CONFIG_TEGRA2)
+ struct pmc_ctlr *const pmc = (struct pmc_ctlr *)TEGRA2_PMC_BASE;
+
+ /* turn off power detects */
+ writel(0, &pmc->pmc_pwr_det_latch);
+ writel(0, &pmc->pmc_pwr_det);
+#endif
+}
+
+/*
* Routine: board_init
* Description: Early hardware init.
*/
int board_init(void)
{
+ __maybe_unused int err;
+
/* Do clocks and UART first so that printf() works */
clock_init();
clock_verify();
@@ -76,18 +99,35 @@ int board_init(void)
#endif
/* boot param addr */
gd->bd->bi_boot_params = (NV_PA_SDRAM_BASE + 0x100);
+
+ power_det_init();
+
#ifdef CONFIG_TEGRA_I2C
#ifndef CONFIG_SYS_I2C_INIT_BOARD
#error "You must define CONFIG_SYS_I2C_INIT_BOARD to use i2c on Nvidia boards"
#endif
i2c_init_board();
-#endif
+# ifdef CONFIG_TEGRA_PMU
+ if (pmu_set_nominal())
+ debug("Failed to select nominal voltages\n");
+# ifdef CONFIG_TEGRA_CLOCK_SCALING
+ err = board_emc_init();
+ if (err)
+ debug("Memory controller init failed: %d\n", err);
+# endif
+# endif /* CONFIG_TEGRA_PMU */
+#endif /* CONFIG_TEGRA_I2C */
#ifdef CONFIG_USB_EHCI_TEGRA
pin_mux_usb();
board_usb_init(gd->fdt_blob);
#endif
+#ifdef CONFIG_TEGRA2_LP0
+ /* prepare the WB code to LP0 location */
+ warmboot_prepare_code(TEGRA_LP0_ADDR, TEGRA_LP0_SIZE);
+#endif
+
return 0;
}
diff --git a/board/nvidia/common/emc.c b/board/nvidia/common/emc.c
new file mode 100644
index 0000000000..8e4290ceed
--- /dev/null
+++ b/board/nvidia/common/emc.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/ap20.h>
+#include <asm/arch/clk_rst.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/emc.h>
+#include <asm/arch/pmu.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/tegra2.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+/* These rates are hard-coded for now, until fdt provides them */
+#define EMC_SDRAM_RATE_T20 (333000 * 2 * 1000)
+#define EMC_SDRAM_RATE_T25 (380000 * 2 * 1000)
+
+int board_emc_init(void)
+{
+ unsigned rate;
+
+ switch (tegra_get_chip_type()) {
+ default:
+ case TEGRA_SOC_T20:
+ rate = EMC_SDRAM_RATE_T20;
+ break;
+ case TEGRA_SOC_T25:
+ rate = EMC_SDRAM_RATE_T25;
+ break;
+ }
+ return tegra_set_emc(gd->fdt_blob, rate);
+}
diff --git a/board/nvidia/common/emc.h b/board/nvidia/common/emc.h
new file mode 100644
index 0000000000..ec1b115f45
--- /dev/null
+++ b/board/nvidia/common/emc.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2010,2011 NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _NVIDIA_EMC_H_
+#define _NVIDIA_EMC_H_
+
+int board_emc_init(void);
+
+#endif
diff --git a/board/nvidia/dts/tegra2-seaboard.dts b/board/nvidia/dts/tegra2-seaboard.dts
index 6ba3ec48f1..335253953b 100644
--- a/board/nvidia/dts/tegra2-seaboard.dts
+++ b/board/nvidia/dts/tegra2-seaboard.dts
@@ -89,4 +89,68 @@
i2c@7000c500 {
clock-frequency = <100000>;
};
+
+ emc@7000f400 {
+ emc-table@190000 {
+ reg = < 190000 >;
+ compatible = "nvidia,tegra20-emc-table";
+ clock-frequency = < 190000 >;
+ nvidia,emc-registers = < 0x0000000c 0x00000026
+ 0x00000009 0x00000003 0x00000004 0x00000004
+ 0x00000002 0x0000000c 0x00000003 0x00000003
+ 0x00000002 0x00000001 0x00000004 0x00000005
+ 0x00000004 0x00000009 0x0000000d 0x0000059f
+ 0x00000000 0x00000003 0x00000003 0x00000003
+ 0x00000003 0x00000001 0x0000000b 0x000000c8
+ 0x00000003 0x00000007 0x00000004 0x0000000f
+ 0x00000002 0x00000000 0x00000000 0x00000002
+ 0x00000000 0x00000000 0x00000083 0xa06204ae
+ 0x007dc010 0x00000000 0x00000000 0x00000000
+ 0x00000000 0x00000000 0x00000000 0x00000000 >;
+ };
+ emc-table@380000 {
+ reg = < 380000 >;
+ compatible = "nvidia,tegra20-emc-table";
+ clock-frequency = < 380000 >;
+ nvidia,emc-registers = < 0x00000017 0x0000004b
+ 0x00000012 0x00000006 0x00000004 0x00000005
+ 0x00000003 0x0000000c 0x00000006 0x00000006
+ 0x00000003 0x00000001 0x00000004 0x00000005
+ 0x00000004 0x00000009 0x0000000d 0x00000b5f
+ 0x00000000 0x00000003 0x00000003 0x00000006
+ 0x00000006 0x00000001 0x00000011 0x000000c8
+ 0x00000003 0x0000000e 0x00000007 0x0000000f
+ 0x00000002 0x00000000 0x00000000 0x00000002
+ 0x00000000 0x00000000 0x00000083 0xe044048b
+ 0x007d8010 0x00000000 0x00000000 0x00000000
+ 0x00000000 0x00000000 0x00000000 0x00000000 >;
+ };
+ };
+
+ kbc@7000e200 {
+ linux,keymap = <0x00020011 0x0003001f 0x0004001e 0x0005002c
+ 0x000701d0 0x0107007d 0x02060064 0x02070038 0x03000006
+ 0x03010005 0x03020013 0x03030012 0x03040021 0x03050020
+ 0x0306002d 0x04000008 0x04010007 0x04020014 0x04030023
+ 0x04040022 0x0405002f 0x0406002e 0x04070039 0x0500000a
+ 0x05010009 0x05020016 0x05030015 0x05040024 0x05050031
+ 0x05060030 0x0507002b 0x0600000c 0x0601000b 0x06020018
+ 0x06030017 0x06040026 0x06050025 0x06060033 0x06070032
+ 0x0701000d 0x0702001b 0x0703001c 0x0707008b 0x08040036
+ 0x0805002a 0x09050061 0x0907001d 0x0b00001a 0x0b010019
+ 0x0b020028 0x0b030027 0x0b040035 0x0b050034 0x0c000044
+ 0x0c010043 0x0c02000e 0x0c030004 0x0c040003 0x0c050067
+ 0x0c0600d2 0x0c070077 0x0d00006e 0x0d01006f 0x0d030068
+ 0x0d04006d 0x0d05006a 0x0d06006c 0x0d070069 0x0e000057
+ 0x0e010058 0x0e020042 0x0e030010 0x0e04003e 0x0e05003d
+ 0x0e060002 0x0e070041 0x0f000001 0x0f010029 0x0f02003f
+ 0x0f03000f 0x0f04003b 0x0f05003c 0x0f06003a 0x0f070040
+ 0x14000047 0x15000049 0x15010048 0x1502004b 0x1504004f
+ 0x16010062 0x1602004d 0x1603004c 0x16040051 0x16050050
+ 0x16070052 0x1b010037 0x1b03004a 0x1b04004e 0x1b050053
+ 0x1c050073 0x1d030066 0x1d04006b 0x1d0500e0 0x1d060072
+ 0x1d0700e1 0x1e000045 0x1e010046 0x1e020071
+ 0x1f04008a>;
+ linux,fn-keymap = <0x05040002>;
+ };
};
diff --git a/board/overo/overo.c b/board/overo/overo.c
index 7b4064cdb1..f973870830 100644
--- a/board/overo/overo.c
+++ b/board/overo/overo.c
@@ -403,7 +403,7 @@ int board_eth_init(bd_t *bis)
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/pandora/pandora.c b/board/pandora/pandora.c
index 58a676d455..3a62e9d633 100644
--- a/board/pandora/pandora.c
+++ b/board/pandora/pandora.c
@@ -32,6 +32,7 @@
#include <common.h>
#include <twl4030.h>
#include <asm/io.h>
+#include <asm/gpio.h>
#include <asm/arch/mmc_host_def.h>
#include <asm/arch/mux.h>
#include <asm/arch/gpio.h>
@@ -45,6 +46,10 @@ DECLARE_GLOBAL_DATA_PTR;
#define TWL4030_BB_CFG_BBSEL_3200MV (3 << 2)
#define TWL4030_BB_CFG_BBISEL_500UA 2
+#define CONTROL_WKUP_CTRL 0x48002a5c
+#define GPIO_IO_PWRDNZ (1 << 6)
+#define PBIASLITEVMODE1 (1 << 8)
+
/*
* Routine: board_init
* Description: Early hardware init.
@@ -60,29 +65,52 @@ int board_init(void)
return 0;
}
+static void set_output_gpio(unsigned int gpio, int value)
+{
+ int ret;
+
+ ret = gpio_request(gpio, "");
+ if (ret != 0) {
+ printf("could not request GPIO %u\n", gpio);
+ return;
+ }
+ ret = gpio_direction_output(gpio, value);
+ if (ret != 0)
+ printf("could not set GPIO %u to %d\n", gpio, value);
+}
+
/*
* Routine: misc_init_r
* Description: Configure board specific parts
*/
int misc_init_r(void)
{
- struct gpio *gpio1_base = (struct gpio *)OMAP34XX_GPIO1_BASE;
- struct gpio *gpio4_base = (struct gpio *)OMAP34XX_GPIO4_BASE;
- struct gpio *gpio5_base = (struct gpio *)OMAP34XX_GPIO5_BASE;
- struct gpio *gpio6_base = (struct gpio *)OMAP34XX_GPIO6_BASE;
+ t2_t *t2_base = (t2_t *)T2_BASE;
+ u32 pbias_lite;
twl4030_led_init(TWL4030_LED_LEDEN_LEDBON);
- /* Configure GPIOs to output */
- writel(~(GPIO14 | GPIO15 | GPIO16 | GPIO23), &gpio1_base->oe);
- writel(~GPIO22, &gpio4_base->oe); /* 118 */
- writel(~(GPIO0 | GPIO1 | GPIO28 | GPIO29 | GPIO30 | GPIO31),
- &gpio5_base->oe); /* 128, 129, 156-159 */
- writel(~GPIO4, &gpio6_base->oe); /* 164 */
+ /* set up dual-voltage GPIOs to 1.8V */
+ pbias_lite = readl(&t2_base->pbias_lite);
+ pbias_lite &= ~PBIASLITEVMODE1;
+ pbias_lite |= PBIASLITEPWRDNZ1;
+ writel(pbias_lite, &t2_base->pbias_lite);
+ if (get_cpu_family() == CPU_OMAP36XX)
+ writel(readl(CONTROL_WKUP_CTRL) | GPIO_IO_PWRDNZ,
+ CONTROL_WKUP_CTRL);
+
+ /* make sure audio and BT chips are in powerdown state */
+ set_output_gpio(14, 0);
+ set_output_gpio(15, 0);
+ set_output_gpio(118, 0);
+
+ /* enable USB supply */
+ set_output_gpio(164, 1);
- /* Set GPIOs */
- writel(GPIO28, &gpio5_base->setdataout);
- writel(GPIO4, &gpio6_base->setdataout);
+ /* wifi needs a short pulse to enter powersave state */
+ set_output_gpio(23, 1);
+ udelay(5000);
+ gpio_direction_output(23, 0);
/* Enable battery backup capacitor (3.2V, 0.5mA charge current) */
twl4030_i2c_write_u8(TWL4030_CHIP_PM_RECEIVER,
@@ -103,12 +131,15 @@ int misc_init_r(void)
void set_muxconf_regs(void)
{
MUX_PANDORA();
+ if (get_cpu_family() == CPU_OMAP36XX) {
+ MUX_PANDORA_3730();
+ }
}
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/pandora/pandora.h b/board/pandora/pandora.h
index f0ad16b0a4..fea8bf259a 100644
--- a/board/pandora/pandora.h
+++ b/board/pandora/pandora.h
@@ -399,4 +399,10 @@ const omap3_sysinfo sysinfo = {
MUX_VAL(CP(SDRC_CKE0), (IDIS | PTU | EN | M0)) /*sdrc_cke0*/\
MUX_VAL(CP(SDRC_CKE1), (IDIS | PTU | EN | M0)) /*sdrc_cke1*/
+#define MUX_PANDORA_3730() \
+ MUX_VAL(CP(GPIO126), (IEN | PTD | DIS | M4)) /*GPIO_126 - MMC1_WP*/\
+ MUX_VAL(CP(GPIO127), (IEN | PTD | DIS | M4)) /*GPIO_127 - MMC2_WP*/\
+ MUX_VAL(CP(GPIO128), (IDIS | PTD | DIS | M4)) /*GPIO_128 - LED_MMC1*/\
+ MUX_VAL(CP(GPIO129), (IDIS | PTD | DIS | M4)) /*GPIO_129 - LED_MMC2*/
+
#endif
diff --git a/board/prodrive/p3mx/mv_eth.c b/board/prodrive/p3mx/mv_eth.c
index 9e3213bdff..06f816d2a1 100644
--- a/board/prodrive/p3mx/mv_eth.c
+++ b/board/prodrive/p3mx/mv_eth.c
@@ -109,8 +109,6 @@ int phy_setup_aneg (char *devname, unsigned char addr);
#ifndef UPDATE_STATS_BY_SOFTWARE
static void mv64460_eth_print_stat (struct eth_device *dev);
#endif
-/* Processes a received packet */
-extern void NetReceive (volatile uchar *, int);
extern unsigned int INTERNAL_REG_BASE_ADDR;
@@ -204,8 +202,7 @@ int db64460_eth_poll (struct eth_device *dev)
return mv64460_eth_receive (dev);
}
-int db64460_eth_transmit (struct eth_device *dev, volatile void *packet,
- int length)
+int db64460_eth_transmit(struct eth_device *dev, void *packet, int length)
{
mv64460_eth_xmit (dev, packet, length);
return 0;
diff --git a/board/prodrive/p3mx/mv_eth.h b/board/prodrive/p3mx/mv_eth.h
index af1527479f..8cc00dc9c6 100644
--- a/board/prodrive/p3mx/mv_eth.h
+++ b/board/prodrive/p3mx/mv_eth.h
@@ -166,9 +166,7 @@ struct mv64460_eth_priv {
int mv64460_eth_init (struct eth_device *dev);
int mv64460_eth_stop (struct eth_device *dev);
-int mv64460_eth_start_xmit (struct eth_device*, volatile void* packet, int length);
-/* return db64460_eth0_poll(); */
-
+int mv64460_eth_start_xmit(struct eth_device *dev, void *packet, int length);
int mv64460_eth_open (struct eth_device *dev);
diff --git a/board/raidsonic/ib62x0/Makefile b/board/raidsonic/ib62x0/Makefile
new file mode 100644
index 0000000000..d450f8d0ab
--- /dev/null
+++ b/board/raidsonic/ib62x0/Makefile
@@ -0,0 +1,43 @@
+#
+# (C) Copyright 2009
+# Marvell Semiconductor <www.marvell.com>
+# Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+COBJS := ib62x0.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/raidsonic/ib62x0/ib62x0.c b/board/raidsonic/ib62x0/ib62x0.c
new file mode 100644
index 0000000000..65f2c2ea6a
--- /dev/null
+++ b/board/raidsonic/ib62x0/ib62x0.c
@@ -0,0 +1,79 @@
+/*
+ * Copyright (C) 2011-2012
+ * Gerald Kerma <dreagle@doukki.net>
+ * Luka Perkov <uboot@lukaperkov.net>
+ * Simon Baatz <gmbnomis@gmail.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <common.h>
+#include <miiphy.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/kirkwood.h>
+#include <asm/arch/mpp.h>
+#include "ib62x0.h"
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int board_early_init_f(void)
+{
+ /*
+ * default gpio configuration
+ * There are maximum 64 gpios controlled through 2 sets of registers
+ * the below configuration configures mainly initial LED status
+ */
+ kw_config_gpio(IB62x0_OE_VAL_LOW,
+ IB62x0_OE_VAL_HIGH,
+ IB62x0_OE_LOW, IB62x0_OE_HIGH);
+
+ /* Multi-Purpose Pins Functionality configuration */
+ u32 kwmpp_config[] = {
+ MPP0_NF_IO2,
+ MPP1_NF_IO3,
+ MPP2_NF_IO4,
+ MPP3_NF_IO5,
+ MPP4_NF_IO6,
+ MPP5_NF_IO7,
+ MPP6_SYSRST_OUTn,
+ MPP8_TW_SDA,
+ MPP9_TW_SCK,
+ MPP10_UART0_TXD,
+ MPP11_UART0_RXD,
+ MPP18_NF_IO0,
+ MPP19_NF_IO1,
+ MPP20_SATA1_ACTn,
+ MPP21_SATA0_ACTn,
+ MPP22_GPIO, /* Power LED red */
+ MPP24_GPIO, /* Power off device */
+ MPP25_GPIO, /* Power LED green */
+ MPP27_GPIO, /* USB transfer LED */
+ MPP28_GPIO, /* Reset button */
+ MPP29_GPIO, /* USB Copy button */
+ 0
+ };
+ kirkwood_mpp_conf(kwmpp_config);
+ return 0;
+}
+
+int board_init(void)
+{
+ /* adress of boot parameters */
+ gd->bd->bi_boot_params = kw_sdram_bar(0) + 0x100;
+
+ return 0;
+}
diff --git a/board/raidsonic/ib62x0/ib62x0.h b/board/raidsonic/ib62x0/ib62x0.h
new file mode 100644
index 0000000000..0c30690697
--- /dev/null
+++ b/board/raidsonic/ib62x0/ib62x0.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011-2012
+ * Gerald Kerma <dreagle@doukki.net>
+ * Simon Baatz <gmbnomis@gmail.com>
+ * Luka Perkov <uboot@lukaperkov.net>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef __IB62x0_H
+#define __IB62x0_H
+
+#define IB62x0_OE_LOW (~(1 << 22 | 1 << 24 | 1 << 25 | 1 << 27))
+#define IB62x0_OE_HIGH (~(0))
+#define IB62x0_OE_VAL_LOW 0
+#define IB62x0_OE_VAL_HIGH 0
+
+/* PHY related */
+#define MV88E1116_LED_FCTRL_REG 10
+#define MV88E1116_CPRSP_CR3_REG 21
+#define MV88E1116_MAC_CTRL_REG 21
+#define MV88E1116_PGADR_REG 22
+#define MV88E1116_RGMII_TXTM_CTRL (1 << 4)
+#define MV88E1116_RGMII_RXTM_CTRL (1 << 5)
+
+#endif /* __IB62x0_H */
diff --git a/board/raidsonic/ib62x0/kwbimage.cfg b/board/raidsonic/ib62x0/kwbimage.cfg
new file mode 100644
index 0000000000..bd594ebd5d
--- /dev/null
+++ b/board/raidsonic/ib62x0/kwbimage.cfg
@@ -0,0 +1,169 @@
+#
+# Copyright (C) 2011-2012
+# Gerald Kerma <dreagle@doukki.net>
+# Simon Baatz <gmbnomis@gmail.com>
+# Luka Perkov <uboot@lukaperkov.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# Refer docs/README.kwimage for more details about how-to configure
+# and create kirkwood boot image
+#
+
+# Boot Media configurations
+BOOT_FROM nand # change from nand to uart if building UART image
+NAND_ECC_MODE default
+NAND_PAGE_SIZE 0x0800
+
+# SOC registers configuration using bootrom header extension
+# Maximum KWBIMAGE_MAX_CONFIG configurations allowed
+
+# Configure RGMII-0 interface pad voltage to 1.8V
+DATA 0xffd100e0 0x1b1b1b9b
+
+#Dram initalization for SINGLE x16 CL=5 @ 400MHz
+DATA 0xffd01400 0x43000c30 # DDR Configuration register
+# bit13-0: 0xc30, (3120 DDR2 clks refresh rate)
+# bit23-14: 0x0,
+# bit24: 0x1, enable exit self refresh mode on DDR access
+# bit25: 0x1, required
+# bit29-26: 0x0,
+# bit31-30: 0x1,
+
+DATA 0xffd01404 0x37543000 # DDR Controller Control Low
+# bit4: 0x0, addr/cmd in smame cycle
+# bit5: 0x0, clk is driven during self refresh, we don't care for APX
+# bit6: 0x0, use recommended falling edge of clk for addr/cmd
+# bit14: 0x0, input buffer always powered up
+# bit18: 0x1, cpu lock transaction enabled
+# bit23-20: 0x5, recommended value for CL=5 and STARTBURST_DEL disabled bit31=0
+# bit27-24: 0x7, CL+2, STARTBURST sample stages, for freqs 400MHz, unbuffered DIMM
+# bit30-28: 0x3, required
+# bit31: 0x0, no additional STARTBURST delay
+
+DATA 0xffd01408 0x22125451 # DDR Timing (Low) (active cycles value +1)
+# bit3-0: TRAS lsbs
+# bit7-4: TRCD
+# bit11-8: TRP
+# bit15-12: TWR
+# bit19-16: TWTR
+# bit20: TRAS msb
+# bit23-21: 0x0
+# bit27-24: TRRD
+# bit31-28: TRTP
+
+DATA 0xffd0140c 0x00000a33 # DDR Timing (High)
+# bit6-0: TRFC
+# bit8-7: TR2R
+# bit10-9: TR2W
+# bit12-11: TW2W
+# bit31-13: 0x0, required
+
+DATA 0xffd01410 0x0000000c # DDR Address Control
+# bit1-0: 00, Cs0width (x8)
+# bit3-2: 11, Cs0size (1Gb)
+# bit5-4: 00, Cs1width (x8)
+# bit7-6: 11, Cs1size (1Gb)
+# bit9-8: 00, Cs2width (nonexistent
+# bit11-10: 00, Cs2size (nonexistent
+# bit13-12: 00, Cs3width (nonexistent
+# bit15-14: 00, Cs3size (nonexistent
+# bit16: 0, Cs0AddrSel
+# bit17: 0, Cs1AddrSel
+# bit18: 0, Cs2AddrSel
+# bit19: 0, Cs3AddrSel
+# bit31-20: 0x0, required
+
+DATA 0xffd01414 0x00000000 # DDR Open Pages Control
+# bit0: 0, OpenPage enabled
+# bit31-1: 0x0, required
+
+DATA 0xffd01418 0x00000000 # DDR Operation
+# bit3-0: 0x0, DDR cmd
+# bit31-4: 0x0, required
+
+DATA 0xffd0141c 0x00000c52 # DDR Mode
+# bit2-0: 0x2, BurstLen=2 required
+# bit3: 0x0, BurstType=0 required
+# bit6-4: 0x4, CL=5
+# bit7: 0x0, TestMode=0 normal
+# bit8: 0x0, DLL reset=0 normal
+# bit11-9: 0x6, auto-precharge write recovery ????????????
+# bit12: 0x0, PD must be zero
+# bit31-13: 0x0, required
+
+DATA 0xffd01420 0x00000040 # DDR Extended Mode
+# bit0: 0, DDR DLL enabled
+# bit1: 0, DDR drive strenght normal
+# bit2: 1, DDR ODT control lsd (disabled)
+# bit5-3: 0x0, required
+# bit6: 0, DDR ODT control msb, (disabled)
+# bit9-7: 0x0, required
+# bit10: 0, differential DQS enabled
+# bit11: 0, required
+# bit12: 0, DDR output buffer enabled
+# bit31-13: 0x0, required
+
+DATA 0xffd01424 0x0000f17f # DDR Controller Control High
+# bit2-0: 0x7, required
+# bit3: 0x1, MBUS Burst Chop disabled
+# bit6-4: 0x7, required
+# bit7: 0x0,
+# bit8: 0x1, add writepath sample stage, must be 1 for DDR freq >= 300MHz
+# bit9: 0x0, no half clock cycle addition to dataout
+# bit10: 0x0, 1/4 clock cycle skew enabled for addr/ctl signals
+# bit11: 0x0, 1/4 clock cycle skew disabled for write mesh
+# bit15-12: 0xf, required
+# bit31-16: 0, required
+
+DATA 0xffd01428 0x00085520 # DDR2 ODT Read Timing (default values)
+DATA 0xffd0147c 0x00008552 # DDR2 ODT Write Timing (default values)
+
+DATA 0xffd01500 0x00000000 # CS[0]n Base address to 0x0
+DATA 0xffd01504 0x0ffffff1 # CS[0]n Size
+# bit0: 0x1, Window enabled
+# bit1: 0x0, Write Protect disabled
+# bit3-2: 0x0, CS0 hit selected
+# bit23-4: 0xfffff, required
+# bit31-24: 0x0f, Size (i.e. 256MB)
+
+DATA 0xffd01508 0x10000000 # CS[1]n Base address to 256Mb
+DATA 0xffd0150c 0x00000000 # CS[1]n Size, window disabled
+
+DATA 0xffd01514 0x00000000 # CS[2]n Size, window disabled
+DATA 0xffd0151c 0x00000000 # CS[3]n Size, window disabled
+
+DATA 0xffd01494 0x00030000 # DDR ODT Control (Low)
+# bit3-0: ODT0Rd, MODT[0] asserted during read from DRAM CS1
+# bit7-4: ODT0Rd, MODT[0] asserted during read from DRAM CS0
+# bit19-16:2, ODT0Wr, MODT[0] asserted during write to DRAM CS1
+# bit23-20:1, ODT0Wr, MODT[0] asserted during write to DRAM CS0
+
+DATA 0xffd01498 0x00000000 # DDR ODT Control (High)
+# bit1-0: 0x0, ODT0 controlled by ODT Control (low) register above
+# bit3-2: 0x1, ODT1 active NEVER!
+# bit31-4: 0x0, required
+
+DATA 0xffd0149c 0x0000e803 # CPU ODT Control
+DATA 0xffd01480 0x00000001 # DDR Initialization Control
+# bit0: 0x1, enable DDR init upon this register write
+
+DATA 0xFFD20134 0x66666666 # L2 RAM Timing 0 Register
+DATA 0xFFD20138 0x66666666 # L2 RAM Timing 1 Register
+
+# End of Header extension
+DATA 0x0 0x0
diff --git a/board/rda/common/Makefile b/board/rda/common/Makefile
new file mode 100644
index 0000000000..cfed607650
--- /dev/null
+++ b/board/rda/common/Makefile
@@ -0,0 +1,83 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(VENDOR).o
+
+COBJS-y += misc.o board.o
+ifndef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_VPU_TEST) += vpu_test.o rda_md5.o
+COBJS-$(CONFIG_CPU_TEST) += cpu_test.o
+COBJS-$(CONFIG_DDR_TEST) += ddr_test.o
+COBJS-$(CONFIG_TIMER_TEST) += timer_test.o
+COBJS-$(CONFIG_UART_TEST) += uart_test.o
+COBJS-$(CONFIG_I2C_TEST) += i2c_test.o
+COBJS-$(CONFIG_GIC_TEST) += gic_test.o
+COBJS-$(CONFIG_CACHE_TEST) += a7_cp15_reg.o \
+ cache_test.o
+COBJS-$(CONFIG_MIPI_LOOP_TEST) += rda_lcdc.o \
+ rda_mipi_dsi.o \
+ hal_camera.o \
+ mipi_loop_test.o
+
+endif
+
+CPPFLAGS_board/$(VENDOR)/common/vpu_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/rda_md5.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/cpu_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/ddr_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/timer_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/uart_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/i2c_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/gic_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/cache_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+
+CPPFLAGS_board/$(VENDOR)/common/rda_lcdc.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/rda_mipi_dsi.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/hal_camera.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+CPPFLAGS_board/$(VENDOR)/common/mipi_loop_test.o += -I$(TOPDIR)/board/$(VENDOR)/common/include
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/common/a7_cp15_reg.S b/board/rda/common/a7_cp15_reg.S
new file mode 100644
index 0000000000..122a457f56
--- /dev/null
+++ b/board/rda/common/a7_cp15_reg.S
@@ -0,0 +1,238 @@
+/* read cp15 main id register */
+.globl read_cp15_midr
+read_cp15_midr:
+ mrc p15,0,r0,c0,c0,0
+ mov pc,lr
+
+/* read cp15 multiprocessor id register */
+.globl read_cp15_mpidr
+read_cp15_mpidr:
+ mrc p15,0,r0,c0,c0,5
+ mov pc,lr
+
+/* read cp15 revision id register */
+.globl read_cp15_revidr
+read_cp15_revidr:
+ mrc p15,0,r0,c0,c0,6
+ mov pc,lr
+
+/* read cp15 cache size id register */
+.globl read_cp15_ccsidr
+read_cp15_ccsidr:
+ mrc p15,1,r0,c0,c0,0
+ mov pc,lr
+
+/* read cp15 cache level id register */
+.globl read_cp15_clidr
+read_cp15_clidr:
+ mrc p15,1,r0,c0,c0,1
+ mov pc,lr
+
+/* read cp15 cache size selection register */
+.globl read_cp15_csselr
+read_cp15_csselr:
+ mrc p15,2,r0,c0,c0,0
+ mov r0,r0
+ nop
+ nop
+ mov pc,lr
+
+/* write cp15 cache size selection register */
+.globl write_cp15_csselr
+write_cp15_csselr:
+ mcr p15,2,r0,c0,c0,0
+ mov r0,r0
+ nop
+ nop
+ mov pc,lr
+
+/* read cp15 system control register */
+.globl read_cp15_sctlr
+read_cp15_sctlr:
+ mrc p15,0,r0,c1,c0,0
+ mov pc,lr
+
+/* write cp15 system control register */
+.globl write_cp15_sctlr
+write_cp15_sctlr:
+ mcr p15,0,r0,c1,c0,0
+ mov pc,lr
+
+/* read cp15 secure configuration register */
+.globl read_cp15_scr
+read_cp15_scr:
+ mrc p15,0,r0,c1,c1,0
+ mov pc,lr
+
+/* write cp15 secure configuration register */
+.globl write_cp15_scr
+write_cp15_scr:
+ mcr p15,0,r0,c1,c1,0
+ mov pc,lr
+
+/* read cp15 l2 control register */
+.globl read_cp15_l2ctlr
+read_cp15_l2ctlr:
+ mrc p15,1,r0,c9,c0,2
+ mov pc,lr
+
+.globl read_cp15_ttbr0
+read_cp15_ttbr0:
+ mrc p15,0,r0,c2,c0,0
+ mov pc,lr
+
+.globl write_cp15_ttbr0
+write_cp15_ttbr0:
+ mcr p15,0,r0,c2,c0,0
+ mov pc,lr
+
+.globl read_cp15_ttbr1
+read_cp15_ttbr1:
+ mrc p15,0,r0,c2,c0,1
+ mov pc,lr
+
+.globl write_cp15_ttbr1
+write_cp15_ttbr1:
+ mcr p15,0,r0,c2,c0,1
+ mov pc,lr
+
+.globl read_cp15_ttbcr
+read_cp15_ttbcr:
+ mrc p15,0,r0,c2,c0,2
+ mov pc,lr
+
+.globl write_cp15_ttbcr
+write_cp15_ttbcr:
+ mcr p15,0,r0,c2,c0,2
+ mov pc,lr
+
+.globl read_cp15_htcr
+read_cp15_htcr:
+ mrc p15,4,r0,c2,c0,2
+ mov pc,lr
+
+.globl write_cp15_htcr
+write_cp15_htcr:
+ mcr p15,4,r0,c2,c0,2
+ mov pc,lr
+
+.globl write_cp15_dacr
+write_cp15_dacr:
+ mcr p15,0,r0,c3,c0,0
+ mov pc,lr
+
+
+/*
+ * r0: des addr
+ * r1: src addr
+ * r2: size
+ */
+.globl __copy_bytes
+__copy_bytes:
+ stmfd sp!,{r4-r11,lr}
+__copy_bytes_start:
+ cmp r2,#0x0
+ beq __copy_bytes_end
+ ldrb r4,[r1]
+ strb r4,[r0]
+ add r0,r0,#0x1
+ add r1,r1,#0x1
+ sub r2,r2,#0x1
+ b __copy_bytes_start
+__copy_bytes_end:
+ ldmfd sp!,{r4-r11,pc}
+
+.globl __nop_dly
+__nop_dly:
+ nop
+ mov pc,lr
+
+/* read cpu cpsr register */
+.globl read_cpu_cpsr
+read_cp15_cpsr:
+ mrs r0,cpsr
+ mov pc,lr
+
+/* write cpu cpsr register */
+.globl write_cpu_cpsr
+write_cp15_cpsr:
+ msr cpsr,r0
+ mov pc,lr
+
+.globl cp15_disable_all_cache
+cp15_disable_all_cache:
+ dsb
+ isb
+ mov r0,#0
+ mcr p15,0,r0,c8,c7,0 // invalidate TLBs
+ mcr p15,0,r0,c7,c5,0 // invalidate instruction cache
+ mcr p15,0,r0,c7,c5,6 // invalidate branch prediction
+ mcr p15,0,r0,c7,c10,4 // CP15DSB
+ mcr p15,0,r0,c7,c5,4 // CP15ISB
+
+ mrc p15,0,r0,c1,c0,0
+ bic r0,r0,#0x00002000 // vector bit = 0
+ bic r0,r0,#0x00000004 // disable dcache
+ bic r0,r0,#0x00000001 // disable mmu
+ orr r0,r0,#0x00000002 // enable aligh checking
+ orr r0,r0,#0x00000800 // enable prediction
+ bic r0,r0,#0x00001000 // disable icache
+ mcr p15,0,r0,c1,c0,0
+ dsb
+ isb
+ mov pc,lr
+
+.globl cp15_enable_dcache
+cp15_enable_dcache:
+ dsb
+ isb
+ mrc p15,0,r0,c1,c0,0
+ orr r0,r0,#0x00000004 // enable dcache
+ mcr p15,0,r0,c1,c0,0
+ mov pc,lr
+
+.globl cp15_enable_icache
+cp15_enable_icache:
+ dsb
+ isb
+ mrc p15,0,r0,c1,c0,0
+ orr r0,r0,#0x00001000 // enable icache
+ mcr p15,0,r0,c1,c0,0
+ mov pc,lr
+
+.globl cp15_enable_mmu
+cp15_enable_mmu:
+ mrc p15,0,r0,c1,c0,0
+ orr r0,r0,#0x00000800 // enable prediction
+ orr r0,r0,#0x00000001 // enable mmu
+ mcr p15,0,r0,c1,c0,0
+
+ mcr p15,0,r0,c7,c5,4 // CP15ISB
+ mov pc,lr
+
+.globl cp15_disable_dcache
+cp15_disable_dcache:
+ dsb
+ isb
+ mrc p15,0,r0,c1,c0,0
+ bic r0,r0,#0x00000004 // disable dcache
+ mcr p15,0,r0,c1,c0,0
+ mov pc,lr
+
+.globl cp15_disable_icache
+cp15_disable_icache:
+ dsb
+ isb
+ mrc p15,0,r0,c1,c0,0
+ bic r0,r0,#0x00001000 // disable icache
+ mcr p15,0,r0,c1,c0,0
+ mov pc,lr
+
+.globl cp15_disable_mmu
+cp15_disable_mmu:
+ mrc p15,0,r0,c1,c0,0
+ bic r0,r0,#0x00000001 // disable mmu
+ mcr p15,0,r0,c1,c0,0
+
+ mcr p15,0,r0,c7,c5,4 // CP15ISB
+ mov pc,lr
diff --git a/board/rda/common/board.c b/board/rda/common/board.c
new file mode 100644
index 0000000000..0fc11eff7c
--- /dev/null
+++ b/board/rda/common/board.c
@@ -0,0 +1,48 @@
+#include <common.h>
+#include <asm/mach-types.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define PHYS_SDRAM_1 (0x80000000) /* DRAM Start */
+#define LINUX_BOOT_PARAM_ADDR (PHYS_SDRAM_1 + 0x100)
+
+#ifdef CONFIG_MACH_RDA8810
+#define BOARD_NAME "RDA8810"
+#elif defined(CONFIG_MACH_RDA8810E)
+#define BOARD_NAME "RDA8810E"
+#elif defined(CONFIG_MACH_RDA8810H)
+#define BOARD_NAME "RDA8810H"
+#elif defined(CONFIG_MACH_RDA8820)
+#define BOARD_NAME "RDA8820"
+#elif defined(CONFIG_MACH_RDA8850)
+#define BOARD_NAME "RDA8850"
+#elif defined(CONFIG_MACH_RDA8850E)
+#define BOARD_NAME "RDA8850E"
+#else
+#define BOARD_NAME "UNKNOWN"
+#endif
+
+int checkboard (void){
+ puts("Board: "BOARD_NAME"\n");
+ return 0;
+}
+
+/*
+ * get_board_rev() - setup to pass kernel board revision information
+ * Returns:
+ * bit[0-3] Maximum cpu clock rate supported by onboard SoC
+ */
+u32 get_board_rev(void)
+{
+ u32 rev = 0;
+ return rev;
+}
+
+int board_init(void)
+{
+ /* arch number of the board */
+ gd->bd->bi_arch_number = machine_arch_type;
+ gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
+ return 0;
+}
+
diff --git a/board/rda/common/cache_test.c b/board/rda/common/cache_test.c
new file mode 100644
index 0000000000..f5e204421a
--- /dev/null
+++ b/board/rda/common/cache_test.c
@@ -0,0 +1,510 @@
+#include <common.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/reg_timer.h>
+#include "a7_cp15_reg.h"
+
+#define d_printf printf
+#define n_printf printf
+
+#define L2C_SZ_1K 0x00000400
+#define L2C_SZ_16K 0x00004000
+#define L2C_SZ_256K 0x00040000
+
+#define L2C_FILL_SIZE 256
+#define L2C_WAY_NUM 16
+#define L2C_WAY_SIZE 0x4000
+#define L2C_LINE_SIZE 32
+#define BANK_NUM 3
+
+/* SRAM start address is 0x00100000 */
+#define CONFIG_SRAM_START 0x00100000
+/* SRAM size is 64KB */
+#define CONFIG_SRAM_SIZE 0x00010000
+/* DRAM start address is 0x80000000 */
+#define CONFIG_DRAM_START 0x80000000
+/* DRAM size is 256MB */
+#define CONFIG_DRAM_SIZE 0x10000000
+/* IO start address is 0x20000000 */
+#define CONFIG_IO_START 0x20000000
+/* IO size is 0x256MB */
+#define CONFIG_IO_SIZE 0x10000000
+/* MMU TLB address is 0x00108000 */
+#define CONFIG_TEST_MMU_TLB_ADDR (CONFIG_SRAM_START + 0x8000)
+
+#define GET_ARRAY_SIZE(array) (sizeof(array) / sizeof((array)[0]))
+
+/* tick / 2000 = n ms ,freq = 2MHz */
+#define TICK_TO_MS(tick) ((tick) / 2000)
+#define MS_TO_TICK(ms) ((ms) * 2000)
+
+typedef struct
+{
+ int id;
+ const char *name;
+}armv7_cache_t;
+
+typedef struct
+{
+ unsigned int sel;
+ unsigned int num_sets;
+ unsigned int size;
+}armv7_cache_size_t;
+
+static const armv7_cache_t a7_cache_tab[] =
+{
+ {0,"l1 d-cache"},
+ {1,"l1 i-cache"},
+ {2,"l2 cache"},
+};
+
+static const armv7_cache_size_t a7_cache_size_tab[] =
+{
+ {0,0x1F, 8,},//l1 d-cache
+ {0,0x3F, 16},
+ {0,0x7F, 32},
+ {0,0xFF, 64},
+ {1,0x7F, 8,},//l1 i-cache
+ {1,0xFF, 16},
+ {1,0x1FF,32},
+ {1,0x3FF,64},
+ {2,0xFF, 128,},//l2 cache
+ {2,0x1FF,256},
+ {2,0x3FF,512},
+ {2,0x7FF,1024},
+};
+
+struct bank_info {
+ struct {
+ u32 start;
+ u32 size;
+ }ram[BANK_NUM];
+};
+
+#if 0
+static struct bank_info ram_table;
+static u32 ttb_base = 0;
+
+static void *l2c_base = (void *)RDA_L2CC_BASE;
+static u32 l2c_way_mask = 0; /* Bitmask of active ways */
+static u32 l2c_size = 0;
+static u32 l2c_sets = 0;
+static u32 l2c_ways = 0;
+#endif
+
+static u8 *test_phyaddr = (u8 *)(CONFIG_DRAM_START + 0x04000000);
+
+typedef union
+{
+ unsigned long long timer;
+ struct
+ {
+ unsigned int timer_l :32;
+ unsigned int timer_h :32;
+ }fields;
+}TIMER;
+
+
+static void timer_get(TIMER *timer)
+{
+ timer->fields.timer_h = (unsigned int)(hwp_apTimer->HWTimer_LockVal_H);
+ timer->fields.timer_l = (unsigned int)(hwp_apTimer->HWTimer_LockVal_L);
+ if(timer->fields.timer_h != hwp_apTimer->HWTimer_LockVal_H) {
+ timer->fields.timer_h = (unsigned int)(hwp_apTimer->HWTimer_LockVal_H);
+ timer->fields.timer_l = (unsigned int)(hwp_apTimer->HWTimer_LockVal_L);
+ }
+}
+
+static void timer_start(TIMER *timer)
+{
+ timer_get(timer);
+}
+
+static unsigned long long timer_stop(TIMER *timer)
+{
+ unsigned long long start,end,elaps;
+ start = timer->timer;
+ timer_get(timer);
+ end = timer->timer;
+ if(start <= end)
+ elaps = end - start;
+ else
+ elaps = (unsigned long long )0xFFFFFFFFFFFFFFFFULL - (start - end);
+ return elaps;
+}
+
+static int is_cpu_secure(void)
+{
+ unsigned int is_secure;
+ unsigned int scr = read_cp15_scr();
+ d_printf("scr = %x\n",scr);
+ scr &= 0x01;
+ is_secure = (scr == 0) ? (1) : (0);
+ return is_secure;
+}
+
+static int is_l2cache_exist(void)
+{
+ unsigned int existed = 0;
+ unsigned int clidr = read_cp15_clidr();
+ d_printf("clidr = %x\n",clidr);
+ clidr = (clidr >> 3) & 0x7;//bit[5:3]
+ if(clidr)
+ existed = 1;
+ return existed;
+}
+
+/*
+ *level = 0: L1 D-Cache
+ *level = 1: L1 I-Cache
+ *level = 2: L2 D-Cache
+ */
+static int select_cache(int level)
+{
+ unsigned int csselr = 0;
+
+ if((level < 0) || (level > 2)) {
+ d_printf("select cache error,level is %d\n",level);
+ return -1;
+ }
+ d_printf("select %s\n",a7_cache_tab[level].name);
+ csselr = read_cp15_csselr();
+ d_printf("\ncsselr = %x\n",csselr);
+
+ csselr &= ~(0xF << 0);//bit[3:0]
+ csselr |= level;
+ write_cp15_csselr(csselr);
+ return 0;
+}
+
+static int parse_cache_info(int level,unsigned int val)
+{
+ unsigned int line_size,asso,ways,num_sets,wa,ra,wb,wt;
+ int i,num;
+
+ d_printf("\nparse value %x\n",val);
+
+ line_size = val & 0x7;
+ asso = (val >> 3) & 0x3FF;
+ num_sets = (val >> 13) & 0x7FFF;
+ wa = (val >> 28) & 0x1;
+ ra = (val >> 29) & 0x1;
+ wb = (val >> 30) & 0x1;
+ wt = (val >> 31) & 0x1;
+
+ if(wt)
+ n_printf("Write-Through: Yes\n");
+ else
+ n_printf("Write-Through: No\n");
+ if(wb)
+ n_printf("Write-Back: Yes\n");
+ else
+ n_printf("Write-Back: No\n");
+ if(ra)
+ n_printf("Read-Allocation: Yes\n");
+ else
+ n_printf("Read-Allocation: No\n");
+ if(wa)
+ n_printf("Write-Allocation: Yes\n");
+ else
+ n_printf("Write-Allocation: No\n");
+
+ ways = asso + 1;
+ n_printf("Associativity is %d-ways\n",ways);
+
+ line_size = line_size * 8;
+ n_printf("%d words per line\n\n",line_size);
+
+ num = GET_ARRAY_SIZE(a7_cache_size_tab);
+ for(i = 0;i < num;i++) {
+ if((level == a7_cache_size_tab[i].sel)
+ && (num_sets == a7_cache_size_tab[i].num_sets))
+ break;
+ }
+ if(i >= num) {
+ n_printf("parse cache size error\n");
+ return -1;
+ }
+ n_printf("%s size is %d KB\n",
+ a7_cache_tab[level].name,
+ a7_cache_size_tab[i].size);
+ return 0;
+}
+
+static int print_cache_info(int level)
+{
+ unsigned int ccsidr;
+ if(select_cache(level)) {
+ n_printf("select cache failed\n");
+ return -1;
+ }
+ ccsidr = read_cp15_ccsidr();
+ parse_cache_info(level,ccsidr);
+ return 0;
+}
+
+static void read_sys_ctrl_reg(void)
+{
+ unsigned int val = read_cp15_sctlr();
+ n_printf("sctlr is %x\n",val);
+}
+
+static int init_test_buffer(void)
+{
+ int i;
+ for(i = 0;i < L2C_FILL_SIZE;i++)
+ test_phyaddr[i] = i;
+ return 0;
+}
+#if 0
+static void init_banks(void)
+{
+ /*
+ * Page table is at end of DRAM, and 16K align.
+ */
+ ttb_base = CONFIG_TEST_MMU_TLB_ADDR;
+
+ /* SRAM address */
+ ram_table.ram[0].start = CONFIG_SRAM_START;
+ ram_table.ram[0].size = CONFIG_SRAM_SIZE;
+ /* IOMAP address */
+ ram_table.ram[1].start = CONFIG_IO_START;
+ ram_table.ram[1].size = CONFIG_IO_SIZE;
+ /* DDRAM address */
+ ram_table.ram[2].start = CONFIG_DRAM_START;
+ ram_table.ram[2].size = CONFIG_DRAM_SIZE;
+}
+
+unsigned int init_pgtable(void)
+{
+ int i;
+ unsigned int *page_table = (unsigned int *)ttb_base;
+ unsigned int val = 0xFFFFFFFF;
+
+ /* Set up an identity-mapping for all 4GB, rw for everyone */
+ for (i = 0; i < 4096; i++) {
+ /*
+ * Section description definition
+ *
+ * TEX[2:0]----AP[1:0]----CB
+ * 000 11 00
+ */
+ page_table[i] = (i << 20) | (3 << 10) | 0x2;
+ }
+ /*
+ * Update memory attribute
+ * TEX[2:0]----AP[1:0]----CB
+ * 001 11 11
+ */
+ page_table[0] = (0 << 20) | (1 << 12) | (3 << 10) | 0xE;
+ page_table[1] = (1 << 20) | (1 << 12) | (3 << 10) | 0xE;
+ for (i = (ram_table.ram[1].start >> 20);
+ i < ((ram_table.ram[1].start + ram_table.ram[1].size) >> 20);
+ i++) {
+ /*
+ * Update memory attribute
+ * TEX[2:0]----AP[1:0]----CB
+ * 000 11 00
+ */
+ page_table[i] = (i << 20) | (3 << 10) | 0x2;
+ }
+ for (i = (ram_table.ram[2].start >> 20);
+ i < ((ram_table.ram[2].start + ram_table.ram[2].size) >> 20);
+ i++) {
+ /*
+ * Update memory attribute
+ * TEX[2:0]----AP[1:0]----CB
+ * 001 11 11
+ */
+ page_table[i] = (i << 20) | (1 << 12) | (3 << 10) | 0xE;
+ }
+ // set TTBR0
+ write_cp15_ttbr0((unsigned int)page_table);
+ for(i = 0;i < 0x1000;i++)
+ __nop_dly();
+
+ // TODO: set TTBR1
+ //write_cp15_ttbr1((unsigned int)page_table);
+
+ // TODO: set TTBCR
+ //write_cp15_ttbcr(0);
+
+ // TODO: set HTCR
+ //write_cp15_htcr(0);
+
+ // write access domain register
+ write_cp15_dacr(val);
+ for(i = 0;i < 0x1000;i++)
+ __nop_dly();
+
+ d_printf("page table address is %x\n",(unsigned int)page_table);
+ d_printf("dommain access control register value is %x\n",val);
+ return 0;
+}
+
+void cpu_setup_mmu(int enabled)
+{
+ int i;
+ if(enabled) {
+ init_banks();
+ init_pgtable();
+
+ cp15_enable_mmu();
+ for(i = 0;i < 0x1000;i++)
+ __nop_dly();
+ d_printf("MMU enabled\n");
+ } else {
+ cp15_disable_mmu();
+ for(i = 0;i < 0x1000;i++)
+ __nop_dly();
+ d_printf("MMU disabled\n");
+ }
+}
+#endif
+static int gen_fibonacci_num(int n)
+{
+ volatile int a = 0,b = 1,s = 0;
+ while(n--) {
+ s += a;
+ s += b;
+ a += b;
+ b += b;
+ }
+ return s;
+}
+
+static int test_icache(unsigned int test_num)
+{
+ volatile int i = test_num;
+ TIMER timer;
+ unsigned int tick;
+ int cost;
+
+ d_printf("test icache\n");
+ timer_start(&timer);
+ d_printf("timer started\n");
+
+ while (i--) {
+ gen_fibonacci_num(10);
+ };
+
+ tick = timer_stop(&timer);
+ cost = TICK_TO_MS(tick);
+ d_printf("<<<<<<<< Ins total time = %d ms\n",cost);
+ return cost;
+}
+
+static int test_dcache(unsigned int test_num)
+{
+ volatile u8 value = 0;
+ u32 i = 0;
+ u32 j = 0;
+ TIMER timer;
+ unsigned int tick;
+ int cost;
+
+ d_printf("test dcache\n");
+ timer_start(&timer);
+ d_printf("timer started\n");
+
+ for (i = 0; i < test_num; i++) {
+ for (j = 0; j < L2C_FILL_SIZE; j++) {
+ value = test_phyaddr[j];
+ }
+ }
+ value = value;
+ tick = timer_stop(&timer);
+ cost = TICK_TO_MS(tick);
+ d_printf("<<<<<<<< Data total time = %d ms\n",cost);
+ return cost;
+}
+
+void l2cache_test(void)
+{
+ unsigned int cost_time[4];
+
+ n_printf("\n\n");
+ n_printf("====== L2 cache test ======\r\n");
+
+ n_printf("\n========> check cpu secure state\n");
+ if(is_cpu_secure()) {
+ n_printf("cpu is in secure state\n");
+ } else {
+ n_printf("cpu is in none secure state\n");
+ }
+
+ n_printf("\n========> check l2 cache existing\n");
+ if(!is_l2cache_exist()) {
+ n_printf("l2 cache do not exist\n");
+ return;
+ } else {
+ n_printf("exist l2 cache\n");
+ }
+
+ n_printf("\n========> print L1 data cache info\n");
+ print_cache_info(0);
+
+ n_printf("\n========> print L1 instruction cache info\n");
+ print_cache_info(1);
+
+ n_printf("\n========> print L2 data cache info\n");
+ print_cache_info(2);
+
+ n_printf("\n========> test cache: disable L1,L2 cache\n");
+
+ n_printf("read sys ctrl register before disable cache\n");
+ read_sys_ctrl_reg();
+ icache_disable();
+ dcache_disable();
+ n_printf("read sys ctrl register after disable cache\n");
+ read_sys_ctrl_reg();
+
+ init_test_buffer();
+ cost_time[0] = test_icache(0x10000);
+ cost_time[1] = test_dcache(0x1000);
+
+ n_printf("\n========> test cache: enable L1,L2 cache\n");
+ /*
+ * set TTBR0,TTBR1,DACR,HTCR
+ * enable MMU,I-cache,D-cache
+ */
+ icache_enable();
+ dcache_enable();
+ n_printf("read sys ctrl register after enable cache\n");
+ read_sys_ctrl_reg();
+
+ n_printf("delay n ms ...\n");
+ mdelay(10);
+ /* run test program */
+ cost_time[2] = test_icache(0x10000);
+ cost_time[3] = test_dcache(0x1000);
+
+ read_sys_ctrl_reg();
+
+ /* print result */
+ n_printf("\n========> test cache result\n");
+
+ n_printf("\n========> L1,L2 Disabled\n"
+ "I-Cache tests cost time: %8d ms "
+ "D-Cache tests cost time: %8d ms ",
+ cost_time[0],cost_time[1]);
+
+ n_printf("\n========> L1,L2 Enabled\n"
+ "I-Cache tests cost time: %8d ms "
+ "D-Cache tests cost time: %8d ms ",
+ cost_time[2],cost_time[3]);
+ n_printf("\n========> test cache finished !\n");
+}
+
+int cpu_cache_test(int times)
+{
+ int n = 0;
+ while(n < times) {
+ n++;
+ n_printf("\ncpu_cache_test: %d / %d \n",n,times);
+ l2cache_test();
+ n_printf("\ncpu_cache_test end\n");
+ }
+ return 0;
+}
diff --git a/board/rda/common/cpu_test.c b/board/rda/common/cpu_test.c
new file mode 100644
index 0000000000..36a83aa143
--- /dev/null
+++ b/board/rda/common/cpu_test.c
@@ -0,0 +1,58 @@
+#include <common.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+
+#ifdef CONFIG_MACH_RDA8810
+static void apsys_cpupll_switch(int on)
+{
+ volatile u32 *clock_reg = &hwp_sysCtrlAp->Sel_Clock;
+ volatile u32 *pll_ctrl_reg = &hwp_sysCtrlAp->Cfg_Pll_Ctrl[0];
+
+ if (on) {
+ int val;
+ u32 clk_value = readl(clock_reg);
+
+ val = SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ writel(val, pll_ctrl_reg);
+ val = readl(pll_ctrl_reg);
+ val |= SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE;
+ writel(val, pll_ctrl_reg);
+
+ clk_value &= ~(1 << 4);
+ writel(clk_value, clock_reg);
+ } else {
+ int val;
+ u32 clk_value = readl(clock_reg);
+
+ clk_value |= SYS_CTRL_AP_CPU_SEL_FAST_SLOW;
+ writel(clk_value, clock_reg);
+ val = SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET;
+ writel(val, pll_ctrl_reg);
+ }
+}
+#else
+static void apsys_cpupll_switch(int on)
+{
+}
+#endif
+
+void cpu_pll_test(int times)
+{
+ int i;
+
+ printf("cpu pll switch test....\n");
+ for(i = 0; i < times; i++) {
+ printf("on/off %d times\r", i+1);
+ apsys_cpupll_switch(0);
+ udelay(100);
+ apsys_cpupll_switch(1);
+ udelay(100);
+ }
+ printf("\n cpu pll finished\n");
+
+}
+
diff --git a/board/rda/common/ddr_test.c b/board/rda/common/ddr_test.c
new file mode 100644
index 0000000000..a390e55a4d
--- /dev/null
+++ b/board/rda/common/ddr_test.c
@@ -0,0 +1,80 @@
+#include <common.h>
+
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+
+#define DDR_TEST_DEBUG
+
+#ifdef DDR_TEST_DEBUG
+#define d_printf printf
+#else
+#define d_printf(...) do{}while(0)
+#endif
+
+/* HWTIMER frequency is 2M,so 1 tick is 0.5 us */
+#define TIME_TICK_TO_US(t) (t/2)
+#define DDR_MEM_START_ADDR 0X80000000
+#define DDR_MEM_END_ADDR 0XBFFFFFFF
+
+int ddr_mem_copy_test(int times,unsigned int src_addr, unsigned int des_addr, unsigned int nword)
+{
+ unsigned int err = 0;
+ unsigned int *ptr_src,*ptr_des,n = 0;
+ int count = 0;
+ unsigned long long tick1 = 0,tick2 = 0;
+
+ /* checkt test times value */
+ if((times <= 0)
+ ||(src_addr<DDR_MEM_START_ADDR)
+ ||(src_addr>DDR_MEM_END_ADDR)
+ ||(des_addr<DDR_MEM_START_ADDR)
+ ||(des_addr>DDR_MEM_END_ADDR)) {
+
+ printf("\nInvalid parameters,times: %d\t,src_addr: 0x%x\t,des_addr: 0x%x\t, nword: 0x%x\n",
+ times,src_addr, des_addr,nword);
+ return -1;
+ }
+ printf("\n_ddr_mem_copy_test,times:%d\t,src_addr: 0x%x\t,des_addr: 0x%x\t, nword: 0x%x\n",
+ times,src_addr, des_addr,nword);
+LAB_COPY:
+ tick1 = get_ticks();
+ d_printf("tick1: %llu\n",tick1);
+ /* copy data from src to des */
+ ptr_src = (unsigned int *)src_addr;
+ ptr_des = (unsigned int *)des_addr;
+ n = nword;
+ d_printf("data copying...\n");
+ while(n--) {
+ *ptr_des++ = *ptr_src++;
+ }
+ /* compare src and des */
+ ptr_src = (unsigned int *)src_addr;
+ ptr_des = (unsigned int *)des_addr;
+ n = nword;
+ d_printf("data checking...\n");
+ while(n--) {
+ if(*ptr_des != *ptr_src) {
+ err = 1;
+ break;
+ }
+ ptr_des++;
+ ptr_src++;
+ }
+ tick2 = get_ticks();
+ d_printf("tick2: %llu\n",tick2);
+ tick1 = (tick2 > tick1)?(tick2 - tick1):(tick1 - tick2);
+ d_printf("tick2 - tick1: %llu\n",tick1);
+ printf("\n\ncost time: %llu us\n",TIME_TICK_TO_US(tick1));
+ count++;
+ /* print result message */
+ if(err != 0) {
+ printf("ddr memory copy test error. times: %d\t,position: %d\n",count,nword-n);
+ return -1;
+ } else {
+ printf("ddr memory copy test success. times: %d\t\n",count);
+ }
+ /* check loop */
+ if(count < times)
+ goto LAB_COPY;
+ return 0;
+}
+#endif
diff --git a/board/rda/common/gic_test.c b/board/rda/common/gic_test.c
new file mode 100644
index 0000000000..78a7311a92
--- /dev/null
+++ b/board/rda/common/gic_test.c
@@ -0,0 +1,422 @@
+#include <common.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_sysctrl.h>
+#include "rda_gic.h"
+
+#define GIC_TEST_DEBUG
+
+#ifdef GIC_TEST_DEBUG
+#define d_printf printf
+#else
+#define d_printf(...) do{}while(0)
+#endif
+
+#define n_printf printf
+
+#define RW_DELAY 10000
+
+#define readl(addr) (*((volatile unsigned int *)(addr)))
+#define writel(val,addr) (*((volatile unsigned int *)(addr)) = (val))
+
+static int g_irq_num = 0;
+static int g_cpu_num = 0;
+static int read_gic_type(void);
+static void soft_dly(unsigned int);
+
+static int read_gic_type(void)
+{
+ unsigned int reg,security_ext,it_num,cpu_num;
+
+ reg = readl(RDA_GICD_BASE + GIC_DIST_CTR);
+ d_printf("CPU CTR reg is %x\n",reg);
+ security_ext = (reg >> 10) & 0x1;
+ it_num = ((reg & 0x1F) + 1 ) * 32;
+ cpu_num = ((reg >> 5) & 0x7) + 1;
+ g_irq_num = it_num;
+ g_cpu_num = cpu_num;
+ if(security_ext)
+ n_printf("have security extension,");
+ else
+ n_printf("no security extension,");
+ n_printf("irq number: %d, cpu number: %d\n",it_num,cpu_num);
+ if((it_num > 0) && (it_num < 1020))
+ return 0;
+ else
+ return -1;
+}
+
+static void soft_dly(unsigned int n)
+{
+ while(n--);
+}
+
+void show_cpu_if_info(void)
+{
+ unsigned int reg,ver_minor,ver_major,vid;
+ reg = readl(RDA_GICC_BASE + GIC_CPU_IID);
+ d_printf("CPU IID reg is %x\n",reg);
+ vid = 0x0FFF & reg;
+ ver_minor = (reg >> 12) & 0xF;
+ ver_major = (reg >> 16) & 0xF;
+ if(vid != VID_ARM) {
+ n_printf("unknown vendor id %x\n",vid);
+ return;
+ }
+ n_printf("CPU INTERFACE: ARM,vendor id: %x, version number: %x.%x\n",
+ vid,ver_major,ver_minor);
+}
+
+void show_dist_info(void)
+{
+ unsigned int reg,ver_major,ver_minor,vid;
+ reg = readl(RDA_GICD_BASE + GIC_DIST_IID);
+ d_printf("DIST IID reg is %x\n",reg);
+ vid = 0x0FFF & reg;
+ ver_minor = (reg >> 12) & 0xF;
+ ver_major = (reg >> 16) & 0xF;
+ if(vid != VID_ARM) {
+ n_printf("unknown vendor id %x\n",vid);
+ return;
+ }
+ n_printf("DISTRIBUTOR: ARM,vendor id: %x, version number: %x.%x\n",
+ vid,ver_major,ver_minor);
+}
+
+void gic_simple_init(void)
+{
+ int icfg_num;
+ int itarget_num;
+ int ipri_num;
+ int isen_num;
+ int icpend_num;
+ int i;
+ unsigned int addr,val;
+
+ /* get irq number and cpu number */
+ if(read_gic_type()) {
+ n_printf("read gic type error! irq number is %d\n",g_irq_num);
+ return;
+ }
+ icfg_num = g_irq_num * 2 / 32;
+ itarget_num = g_irq_num * 8 / 32;
+ ipri_num = g_irq_num * 8 / 32;
+ isen_num = g_irq_num / 32;
+ icpend_num = g_irq_num / 32;
+
+ d_printf("icfg_num = %d,itarget_num = %d,ipri_num = %d,isen_num = %d,icpend_num = %d\n",
+ icfg_num,itarget_num,ipri_num,isen_num,icpend_num);
+
+ /* disable distrabutor */
+ writel(0x0,RDA_GICD_BASE + GIC_DIST_CTRL);
+ d_printf("dist ctrl = %x\n",readl(RDA_GICD_BASE + GIC_DIST_CTRL));
+
+ /* disable all PPI interrups,enable all SGI,SPI interrups */
+ writel(0xFFFF0000,RDA_GICD_BASE + GIC_DIST_ENABLE_CLEAR);
+ soft_dly(RW_DELAY);
+ writel(0x0000FFFF,RDA_GICD_BASE + GIC_DIST_ENABLE_SET);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICD_BASE + GIC_DIST_ENABLE_SET);
+ d_printf("ien %x = %x\n",RDA_GICD_BASE + GIC_DIST_ENABLE_SET,val);
+ for(i = 1;i < isen_num;i++) {
+ addr = RDA_GICD_BASE + GIC_DIST_ENABLE_SET + i * 4;
+ writel(0xFFFFFFFF,addr);
+ soft_dly(RW_DELAY);
+ val = readl(addr);
+ d_printf("ien %x = %x\n",addr,val);
+ }
+ /* set SPIs irq trigger mode, 0: high level sensitive,1:edge triggered */
+ for(i = 2;i < icfg_num;i++){
+ addr = RDA_GICD_BASE + GIC_DIST_CONFIG + i * 4;
+ writel(0,addr);
+ soft_dly(RW_DELAY);
+ val = readl(addr);
+ d_printf("icfg %x = %x\n",addr,val);
+ }
+ /* set SGIs irq target cpu0 */
+ for(i = 0;i < 4;i++) {
+ addr = RDA_GICD_BASE + GIC_DIST_TARGET + i * 4;
+ writel(0x0,addr);
+ soft_dly(RW_DELAY);
+ val = readl(addr);
+ d_printf("itarget %x = %x\n",addr,val);
+ }
+ /* set PPIs irq target cpu0 */
+ for(i = 4;i < 8;i++) {
+ addr = RDA_GICD_BASE + GIC_DIST_TARGET + i * 4;
+ writel(0x0,addr);
+ soft_dly(RW_DELAY);
+ val = readl(addr);
+ d_printf("itarget %x = %x\n",addr,val);
+ }
+ /* set SPIs irq target cpu0 */
+ for(i = 8;i < itarget_num;i++) {
+ addr = RDA_GICD_BASE + GIC_DIST_TARGET + i * 4;
+ writel(0x0,addr);
+ soft_dly(RW_DELAY);
+ val = readl(addr);
+ d_printf("itarget %x = %x\n",addr,val);
+ }
+ /* set irq priority,0 is the highest priority */
+ for(i = 0;i < ipri_num;i++){
+ addr = RDA_GICD_BASE + GIC_DIST_PRI + i * 4;
+ writel(0x0,addr);
+ soft_dly(RW_DELAY);
+ val = readl(addr);
+ d_printf("ipri %x = %x\n",addr,val);
+ }
+ /* clear all pending IRQs */
+ for(i = 0;i < icpend_num;i++) {
+ addr = RDA_GICD_BASE + GIC_DIST_PENDING_CLEAR + i * 4;
+ writel(0xFFFFFFFF,addr);
+ soft_dly(RW_DELAY);
+ }
+ /* clear all active IRQs */
+ for(i = 0;i < icpend_num;i++) {
+ addr = RDA_GICD_BASE + GIC_DIST_ACTIVE_CLEAR + i * 4;
+ writel(0xFFFFFFFF,addr);
+ soft_dly(RW_DELAY);
+ }
+ /* enable cpu interface */
+ writel(0x3,RDA_GICC_BASE + GIC_CPU_CTRL);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICC_BASE + GIC_CPU_CTRL);
+ d_printf("cpu ctrl= %x\n",val);
+ /* set cpu interface priority mask,all irq can be sent to CPU */
+ writel(0xFF,RDA_GICC_BASE + GIC_CPU_PRIMASK);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICC_BASE + GIC_CPU_PRIMASK);
+ d_printf("cpu mask = %x\n",val);
+ /* enable distrabutor */
+ writel(0x3,RDA_GICD_BASE + GIC_DIST_CTRL);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICD_BASE + GIC_DIST_CTRL);
+ d_printf("dist ctrl = %x\n",val);
+ d_printf("\n\n");
+}
+
+void test_enable_irq(void)
+{
+ unsigned int mask,val,addr;
+ int i,j = 0;
+
+ n_printf("\n\n");
+ /* disable dist */
+ writel(0x0,RDA_GICD_BASE + GIC_DIST_CTRL);
+ /* disable all irq */
+ for(addr = 0x180;addr < 0x200; addr +=4) {
+ writel(0xFFFFFFFF,RDA_GICD_BASE + addr);
+ }
+ /* enable irq */
+ for(addr = 0x100;addr < 0x180; addr +=4) {
+ n_printf("reg %x enable test starts.\n",addr);
+ for(i = 0;i < 32;i++) {
+ val = 1 << i;
+ mask = val;
+ writel(val,RDA_GICD_BASE + addr);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICD_BASE + addr);
+ if(val & mask) {
+ n_printf("bit %d enable operation success !!!\n",i);
+ j++;
+ }
+ }
+ n_printf("reg %x enable test finished.\n\n",addr);
+ }
+ /* disable all irq */
+ for(addr = 0x180;addr < 0x200; addr +=4) {
+ writel(val,RDA_GICD_BASE + addr);
+ }
+ n_printf(" %d IRQs enable operation test success !!!\n",j);
+}
+
+void test_disable_irq(void)
+{
+ unsigned int mask,val,addr;
+ int i,j = 0;
+
+ n_printf("\n\n");
+ writel(0x0,RDA_GICD_BASE + GIC_DIST_CTRL);
+
+ /* 0~15 SGIs is allways enabled */
+ addr = 0x180;
+ n_printf("reg %x disable test starts\n",addr);
+ for(i = 0;i < 16;i++) {
+ val = 1 << i;
+ mask = val;
+ writel(val,RDA_GICD_BASE + addr);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICD_BASE + addr);
+ if((val & mask) != 0) {
+ n_printf("bit %d disable operation success !!!\n",i);
+ } else {
+ n_printf("bit %d disable operation failed ###\n",i);
+ j++;
+ }
+ }
+ /* 16~24 is unused, 25~31 PPIs is normally used */
+ addr = 0x180;
+ n_printf("reg %x disable test starts\n",addr);
+ for(i = 25;i < 32;i++) {
+ val = 1 << i;
+ mask = val;
+ writel(val,RDA_GICD_BASE + addr);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICD_BASE + addr);
+ if((val & mask) == 0) {
+ n_printf("bit %d disable operation success !!!\n",i);
+ } else {
+ n_printf("bit %d disable operation failed ###\n",i);
+ j++;
+ }
+ }
+ /* 32~95 SGIs is normally used */
+ for(addr = 0x184;addr < 0x200; addr +=4) {
+ n_printf("reg %x disable test starts\n",addr);
+ for(i = 0;i < 32;i++) {
+ val = 1 << i;
+ mask = val;
+ writel(val,RDA_GICD_BASE + addr);
+ soft_dly(RW_DELAY);
+ val = readl(RDA_GICD_BASE + addr);
+ if((val & mask) == 0) {
+ if(addr < 0x18C)
+ n_printf("bit %d disable operation success !!!\n",i);
+ } else {
+ n_printf("bit %d disable operation failed ###\n",i);
+ j++;
+ }
+ }
+ n_printf("reg %x disable test finished\n\n",addr);
+ }
+ n_printf(" %d IRQs disable operation test failed.\n",j);
+}
+
+/*******************************************************************************
+ * @name: gic_simple_test
+ * @param: void
+ * @return: void
+ * @descipt:
+ * This simple test would pend some interrupts and GIC forward
+ * these signals to CPU, once CPU recognize it,a IRQ is occured
+ * and it jump into do_irq() to process this event;
+ * This simple test will pend all SPIs interrupts and PPIs
+ * interrupts.
+ ******************************************************************************
+ */
+void gic_simple_test(void)
+{
+ unsigned int reg_idx,reg_pos,reg_active,reg_pend;
+ int i,j,err,irq_id;
+
+ /* Start to test SPIs IRQs */
+ mdelay(10);
+ n_printf("\nstart %d SPIs interrupts test ...\n\n",(g_irq_num-32));
+ j = 0;
+ err = 0;
+ /* enable all SPIs */
+ writel(0xFFFFFFFF,RDA_GICD_BASE + GIC_DIST_ENABLE_SET + 4);
+ writel(0xFFFFFFFF,RDA_GICD_BASE + GIC_DIST_ENABLE_SET + 8);
+ /* pending SPIs */
+ for(i = 32;i < g_irq_num;i++) {
+ j = 1 << (i % 32);
+ reg_idx = (i / 32 + 1) * 4;
+ reg_pos = j;
+ irq_id = i + 32;
+ if(irq_id == g_irq_num)
+ break;
+ reg_active = readl(RDA_GICD_BASE + GIC_DIST_ACTIVE_SET + reg_idx);
+ reg_pend = readl(RDA_GICD_BASE + GIC_DIST_PENDING_SET + reg_idx);
+ n_printf("pending before, pend state: %x, active state: %x\n",
+ (reg_active & reg_pos),(reg_pend & reg_pos));
+
+ n_printf("pending irq and waiting for it occur ... id is %d\n",irq_id);
+ writel(j,RDA_GICD_BASE + GIC_DIST_PENDING_SET + reg_idx);
+ mdelay(200);
+
+ reg_active = readl(RDA_GICD_BASE + GIC_DIST_ACTIVE_SET + reg_idx);
+ reg_pend = readl(RDA_GICD_BASE + GIC_DIST_PENDING_SET + reg_idx);
+ n_printf("pending after, pend state: %x, active state: %x\n",
+ (reg_active & reg_pos),(reg_pend & reg_pos));
+ if(reg_pend & reg_pos) {
+ writel(j,RDA_GICD_BASE + GIC_DIST_PENDING_CLEAR + reg_idx);
+ n_printf("error! CPU do not response the IRQ which id is %d\n",irq_id);
+ err++;
+ }
+ n_printf("\n");
+ }
+ if(err)
+ n_printf("all SPI irq test finished, have %d irq errors\n",err);
+ else
+ n_printf("all SPI irq test success !\n");
+
+ /* Start to test PPIs IRQs */
+ mdelay(10);
+ n_printf("\nstart %d PPIs interrupts test ...\n\n",15);
+ j = 0;
+ err = 0;
+ /* enable PPIs */
+ writel(0xFFFF0000,RDA_GICD_BASE + GIC_DIST_ENABLE_SET);
+ /* pending PPIs */
+ for(i = 16;i < 32;i++) {
+ j = 1 << (i % 32);
+ reg_idx = (i / 32 + 0) * 4;
+ reg_pos = j;
+ irq_id = i;
+ /* the PPI 16 ~ 24 is not available */
+ if((irq_id >= 16) && ( irq_id <= 24)) {
+ continue;
+ }
+ reg_active = readl(RDA_GICD_BASE + GIC_DIST_ACTIVE_SET + reg_idx);
+ reg_pend = readl(RDA_GICD_BASE + GIC_DIST_PENDING_SET + reg_idx);
+ n_printf("pending before, pend state: %x, active state: %x\n",
+ (reg_active & reg_pos),(reg_pend & reg_pos));
+
+ n_printf("pending irq and waiting for it occur ... id is %d\n",irq_id);
+ writel(j,RDA_GICD_BASE + GIC_DIST_PENDING_SET + reg_idx);
+ mdelay(200);
+
+ reg_active = readl(RDA_GICD_BASE + GIC_DIST_ACTIVE_SET + reg_idx);
+ reg_pend = readl(RDA_GICD_BASE + GIC_DIST_PENDING_SET + reg_idx);
+ n_printf("pending after, pend state: %x, active state: %x\n",
+ (reg_active & reg_pos),(reg_pend & reg_pos));
+ if(reg_pend & reg_pos) {
+ writel(j,RDA_GICD_BASE + GIC_DIST_PENDING_CLEAR + reg_idx);
+ n_printf("error! CPU do not response the IRQ which id is %d\n",irq_id);
+ err++;
+ }
+ d_printf("\n");
+ }
+ /* disable PPIs */
+ writel(0xFFFF0000,RDA_GICD_BASE + GIC_DIST_ENABLE_CLEAR);
+ if(err)
+ n_printf("all PPI irq test finished, have %d irq errors\n",err);
+ else
+ n_printf("all PPI irq test success !\n");
+}
+
+void gic_test_entry(void)
+{
+ n_printf("entry gic test\n");
+ show_dist_info();
+ show_cpu_if_info();
+ gic_simple_init();
+ gic_simple_test();
+ test_enable_irq();
+ test_disable_irq();
+ mdelay(1000);
+ n_printf("delay 1 second ...\n");
+ mdelay(1000);
+}
+
+int gic_test(int times)
+{
+ int n = 0;
+ while(n < times) {
+ n++;
+ n_printf("\ngic_test: %d / %d\n",n,times);
+ gic_test_entry();
+ n_printf("\ngic_test end\n");
+ }
+ return 0;
+}
diff --git a/board/rda/common/hal_camera.c b/board/rda/common/hal_camera.c
new file mode 100644
index 0000000000..0646dccd26
--- /dev/null
+++ b/board/rda/common/hal_camera.c
@@ -0,0 +1,639 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2012-2022, RDA, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#include <common.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/reg_camera.h>
+
+#include "hal_camera.h"
+#include "hal_gpio.h"
+
+#include <asm/arch/reg_ifc.h>
+#include <asm/arch/ifc.h>
+#include <asm/arch/reg_cfg_regs.h>
+
+#ifdef TGT_CAMERA_PDN_CHANGE_WITH_ATV
+extern BOOL IsAtvPowerOn(void);
+#endif
+
+VOID hal_print(UINT32 x)
+{
+ printf("%x\n", (unsigned int)x);
+}
+#define hal_HstSendEvent(x) hal_print(x)
+
+#define HAL_ASSERT(...)
+#define HAL_TRACE(...)
+
+#define CAMERA_DEBUG(BOOL, mess) \
+ if (!(BOOL)) { \
+ printf("%s\n",mess); \
+ }
+
+
+// ============================================================================
+// MACROS
+// ============================================================================
+//
+/// Flag to enable the Camera Module test mode. This is useful when the
+/// Debug Bus needs to be used: the Camera Bus and the Debug Bus are
+/// multiplexed in the chip IOMux, so they cannot be used both at same
+/// time. The idea of the Camera test mode is to displays a dummy image
+/// instead of getting its data from the sensor.
+/// So, when CT_RELEASE=cool_profile, the test mode is enabled: the PXTS,
+/// EXL or signal spy cannot be used along with the Camera. When the camera
+/// needs to be used, use CT_RELEASE=debug, for instance.
+#ifdef ENABLE_PXTS
+#define CAM_TEST_MODE CAMERA_TEST
+#else
+#define CAM_TEST_MODE 0 // CAMERA_TEST
+#endif
+
+#ifdef HAL_CAMERA_PRINTF
+#define HAL_CAMERA_TRACE(a, ...) HAL_TRACE(HAL_CAMERA_TRC, 0, a, ##__VA_ARGS__)
+#else
+#define HAL_CAMERA_TRACE(a, ...)
+#endif
+// ============================================================================
+// GLOBAL VARIABLES
+// ============================================================================
+
+PRIVATE UINT8 g_halCameraIfcChan = 0xff;
+
+PRIVATE HAL_CAMERA_CFG_T g_halCameraConfig = {
+ .rstActiveH = FALSE,
+ .pdnActiveH = TRUE,
+ .dropFrame = FALSE,
+ .camClkDiv = 12,
+ .endianess = BYTE_SWAP,
+ .camId = 0,
+ .colRatio = COL_RATIO_1_1,
+ .rowRatio = ROW_RATIO_1_1,
+ .camPdnRemap.gpioId=HAL_GPIO_NONE,
+ .camRstRemap.gpioId=HAL_GPIO_NONE,
+};
+
+
+// =============================================================================
+// g_halCameraIrqHandler
+// -----------------------------------------------------------------------------
+/// Variable to store the user irq handler for the camera
+/// interruption.
+// =============================================================================
+PRIVATE HAL_CAMERA_IRQ_HANDLER_T g_halCameraIrqHandler;
+
+PUBLIC VOID hal_CameraSetVsyncInvert(BOOL polarity)
+{
+ if (polarity){
+ // VSYNC low effective
+ hwp_camera->CTRL |= CAMERA_VSYNC_POL_INVERT;
+#if (CHIP_HAS_ASYNC_TCU)
+ hwp_camera->CAM_SPI_REG_0 |= CAM_SPI_REG_VSYNC_INV_EN;
+#endif // defined (CHIP_HAS_ASYNC_TCU)
+ } else{
+ // VSYNC high effective
+ hwp_camera->CTRL &= ~CAMERA_VSYNC_POL_INVERT;
+#if (CHIP_HAS_ASYNC_TCU)
+ hwp_camera->CAM_SPI_REG_0 &= ~CAM_SPI_REG_VSYNC_INV_EN;
+#endif // defined (CHIP_HAS_ASYNC_TCU)
+ }
+}
+PUBLIC UINT32 hal_CameraIrqstatus(void)
+{
+ return hwp_camera->STATUS;
+}
+
+// ============================================================================
+// FUNCTIONS
+// ============================================================================
+
+// =============================================================================
+// hal_CameraReset(BOOL InReset)
+// -----------------------------------------------------------------------------
+/// Puts the Camera sensor in Reset or out of Reset.
+///
+/// @param InReset if true, put the external camera sensor in reset
+// =============================================================================
+PUBLIC VOID hal_CameraReset(BOOL InReset)
+{
+ if (InReset)
+ hwp_camera->CMD_SET = CAMERA_RESET;
+ else
+ hwp_camera->CMD_CLR = CAMERA_RESET;
+}
+
+#if (CHIP_HAS_ASYNC_TCU)
+PRIVATE VOID hal_camera_spi_reg_init()
+{
+ // clear all SPI camera related regs
+ hwp_camera->CAM_SPI_REG_0 = 0;
+ hwp_camera->CAM_SPI_REG_1 = 0;
+ hwp_camera->CAM_SPI_REG_2 = 0;
+ hwp_camera->CAM_SPI_REG_3 = 0;
+ hwp_camera->CAM_SPI_REG_4 = 0;
+ hwp_camera->CAM_SPI_REG_5 = 0;
+ hwp_camera->CAM_SPI_REG_6 = 0;
+
+ // set all SPI camera related regs to default
+ hwp_camera->CAM_SPI_REG_5 = 0x00ffffff; // sync code 0xffffff by default
+ // by default, frame start id 0x01,frame end id 0x00,line start id 0x02,packet id 0x40
+ hwp_camera->CAM_SPI_REG_6 = 0x01000240;
+}
+#endif
+
+
+void hal_config_pinmux_for_camera(void)
+{
+ hwp_configRegs->AP_GPIO_B_Mode=(hwp_configRegs->AP_GPIO_B_Mode)&(~0x00fffc00);
+}
+
+void hal_config_pinmux_for_camera_csi2(void)
+{
+ hwp_configRegs->Alt_mux_select=((hwp_configRegs->Alt_mux_select)&(~0x00000030))|(1<<4);
+}
+
+PUBLIC VOID hal_CameraOpen(HAL_CAMERA_CFG_T* camConfig)
+{
+ UINT32 decimDiv = 0;
+
+ if (HAL_UNKNOWN_CHANNEL != g_halCameraIfcChan){
+ printf("hal_CameraOpen: Camera already open\n");
+ return;
+ }
+
+ g_halCameraConfig = *camConfig;
+ hal_config_pinmux_for_camera();
+
+ if(camConfig->csi_cs == 1){
+ hal_config_pinmux_for_camera_csi2();
+ }
+
+#if (CHIP_HAS_ASYNC_TCU)
+ HAL_ASSERT(((camConfig->spi_mode == SPI_MODE_MASTER2_1) ||((camConfig->spi_mode == SPI_MODE_MASTER1))
+ || (camConfig->spi_mode == SPI_MODE_MASTER2_2)
+ || (camConfig->spi_mode == SPI_MODE_MASTER2_4)
+ || (camConfig->spi_mode == SPI_MODE_NO)),
+ "hal_CameraOpen: unsupported spi mode");
+#endif
+
+ switch (camConfig->rowRatio){
+ case ROW_RATIO_1_1:
+ decimDiv |= CAMERA_DECIMROW_ORIGINAL;
+ break;
+ case ROW_RATIO_1_2:
+ decimDiv |= CAMERA_DECIMROW_DIV_2;
+ break;
+ case ROW_RATIO_1_3:
+ decimDiv |= CAMERA_DECIMROW_DIV_3;
+ break;
+ case ROW_RATIO_1_4:
+ decimDiv |= CAMERA_DECIMROW_DIV_4;
+ break;
+ default:
+ HAL_ASSERT(FALSE, "Camera: Wrong row ratio: %d", camConfig->rowRatio);
+ break;
+ }
+
+ switch (camConfig->colRatio){
+ case COL_RATIO_1_1:
+ decimDiv |= CAMERA_DECIMCOL_ORIGINAL;
+ break;
+ case COL_RATIO_1_2:
+ decimDiv |= CAMERA_DECIMCOL_DIV_2;
+ break;
+ case COL_RATIO_1_3:
+ decimDiv |= CAMERA_DECIMCOL_DIV_3;
+ break;
+ case COL_RATIO_1_4:
+ decimDiv |= CAMERA_DECIMCOL_DIV_4;
+ break;
+ default:
+ HAL_ASSERT(FALSE, "Camera: Wrong column ratio: %d", camConfig->colRatio);
+ break;
+ }
+ hwp_camera->CTRL = CAM_TEST_MODE;
+ hwp_camera->CTRL |= CAMERA_DATAFORMAT_YUV422;
+ hwp_camera->CTRL |= decimDiv;
+
+ if (camConfig->cropEnable)
+ {
+ hwp_camera->CTRL |= CAMERA_CROPEN_ENABLE;
+ hwp_camera->DSTWINCOL =
+ CAMERA_DSTWINCOLSTART(camConfig->dstWinColStart) |CAMERA_DSTWINCOLEND(camConfig->dstWinColEnd);
+ hwp_camera->DSTWINROW =
+ CAMERA_DSTWINROWSTART(camConfig->dstWinRowStart) |CAMERA_DSTWINROWEND(camConfig->dstWinRowEnd);
+ }
+
+ if(!g_halCameraConfig.rstActiveH)
+ hwp_camera->CTRL |= CAMERA_RESET_POL;
+ if(!g_halCameraConfig.pdnActiveH)
+ hwp_camera->CTRL |= CAMERA_PWDN_POL;
+ if (g_halCameraConfig.dropFrame)
+ hwp_camera->CTRL |= CAMERA_DECIMFRM_DIV_2;
+
+ hwp_camera->CTRL |= CAMERA_REORDER(camConfig->reOrder);
+
+#if (CHIP_HAS_ASYNC_TCU)
+ hal_camera_spi_reg_init();
+ if ((camConfig->spi_mode != SPI_MODE_NO)&&((camConfig->csi_mode == FALSE))){
+ // CAM_SPI_REG_0
+ hwp_camera->CAM_SPI_REG_0
+ |= CAM_SPI_REG_LINE_PER_FRM(camConfig->spi_pixels_per_column);
+ hwp_camera->CAM_SPI_REG_0
+ |= CAM_SPI_REG_BLK_PER_LINE((camConfig->spi_pixels_per_line) >> 1);
+ hwp_camera->CAM_SPI_REG_0
+ |= CAM_SPI_REG_YUV_OUT_FMT(camConfig->spi_yuv_out);
+ hwp_camera->CAM_SPI_REG_0
+ |= (camConfig->spi_href_inv) ? CAM_SPI_REG_HREF_INV_EN : 0;
+ hwp_camera->CAM_SPI_REG_0
+ |= (camConfig->spi_little_endian_en) ? CAM_SPI_REG_LITTLE_END_EN : 0;
+ // CAM_SPI_REG_1
+ hwp_camera->CAM_SPI_REG_1 |= CAM_SPI_REG_CLK_DIV(camConfig->spi_ctrl_clk_div);
+ // Other REGs according to the spi mode
+ switch (camConfig->spi_mode){
+ case SPI_MODE_MASTER2_1:
+ hwp_camera->CAM_SPI_REG_4 |=
+ CAM_SPI_REG_BLK_PER_PACK((camConfig->spi_pixels_per_line) >> 1) |
+ CAM_SPI_REG_LINE(0) |
+ CAM_SPI_REG_PACK_SIZE_FROM_REG |
+ CAM_SPI_REG_IMG_WIDTH_FROM_REG |
+ CAM_SPI_REG_IMG_HEIGHT_FROM_REG |
+ CAM_SPI_REG_MASTER2_EN;
+ break;
+ case SPI_MODE_MASTER2_2:
+ hwp_camera->CAM_SPI_REG_4 |=
+ CAM_SPI_REG_BLK_PER_PACK((camConfig->spi_pixels_per_line) >> 1) |
+ CAM_SPI_REG_LINE(1) |
+ CAM_SPI_REG_PACK_SIZE_FROM_REG |
+ CAM_SPI_REG_IMG_WIDTH_FROM_REG |
+ CAM_SPI_REG_IMG_HEIGHT_FROM_REG |
+ CAM_SPI_REG_MASTER2_EN;
+ break;
+ case SPI_MODE_MASTER2_4:
+ hwp_camera->CAM_SPI_REG_4 |=
+ CAM_SPI_REG_BLK_PER_PACK((camConfig->spi_pixels_per_line) >> 1) |
+ CAM_SPI_REG_LINE(2) |
+ CAM_SPI_REG_PACK_SIZE_FROM_REG |
+ CAM_SPI_REG_IMG_WIDTH_FROM_REG |
+ CAM_SPI_REG_IMG_HEIGHT_FROM_REG |
+ CAM_SPI_REG_MASTER2_EN;
+ break;
+ case SPI_MODE_MASTER1:
+ hwp_camera->CAM_SPI_REG_0 |= CAM_SPI_REG_MASTER_EN;
+ if (camConfig->spi_ssn_high_en)
+ hwp_camera->CAM_SPI_REG_1 |= CAM_SPI_REG_SSN_HIGH_EN;
+ break;
+ default:
+ break;
+ }
+ }
+#endif // defined (CHIP_HAS_ASYNC_TCU)
+
+ if (camConfig->csi_mode == TRUE){
+ hwp_camera->CAM_SPI_REG_0 = 0x200;
+
+ //hwp_mipi_csi->CSI_OBSERVE_CLK = 0x1;
+ serial_puts("set csi reg \r\n");
+ hwp_camera->CSI_CONFIG_REG0 =0xA0000000|(camConfig->num_d_term_en&0xff)|((camConfig->frame_line_number&0x3ff)<<8);
+ hwp_camera->CSI_CONFIG_REG1 = 0x00020000|(camConfig->num_hs_settle&0xff);
+ hwp_camera->CSI_CONFIG_REG2= (camConfig->num_c_term_en<<16)|camConfig->num_c_hs_settle;//; //;//;/
+ hwp_camera->CSI_CONFIG_REG3= 0x9C0A0000|((camConfig->csi_cs&1)<<20)|(camConfig->csi_lane_2v8<<11);//0x9c0a0800; for csi1 0x9c1a*** for csi2
+ hwp_camera->CSI_CONFIG_REG4= 0xffffffff;
+ hwp_camera->CSI_CONFIG_REG5= 0x40dc4000;
+ hwp_camera->CSI_CONFIG_REG6= 0x800420ea;
+ hwp_camera->CSI_ENABLE_PHY = 1;
+
+ hal_HstSendEvent(0x12346666);
+ }
+
+ // Configure Camera Clock Divider
+ hal_CameraSetupClockDivider(g_halCameraConfig.camClkDiv);
+ // set vsync pole
+ hal_CameraSetVsyncInvert(camConfig->vsync_inv);
+
+ // hwp_camera->CTRL |= (1<<31); // rda test mode
+
+ hal_CameraReset(FALSE);
+ hal_CameraPowerDown(FALSE);
+}
+
+
+// =============================================================================
+// hal_CameraClose
+// -----------------------------------------------------------------------------
+/// Power off the camera sensor by setting the PowerDown bit.
+/// Resets the camera sensor by enabling the Camera Reset bit.
+/// This function can only be called after the camera transfer has been stopped
+/// by a call to #hal_CameraStopXfer().
+// =============================================================================
+PUBLIC VOID hal_CameraClose(VOID)
+{
+ hal_CameraControllerEnable(FALSE);
+ hal_CameraReset(TRUE);
+ hal_CameraPowerDown(TRUE);
+}
+
+PUBLIC VOID hal_CameraPowerDownBoth(BOOL PowerDown)
+{
+
+}
+
+PUBLIC VOID hal_CameraClkOut(BOOL out)
+{
+ if (out)
+ hwp_camera->CLK_OUT = 0x11;
+ else
+ hwp_camera->CLK_OUT = 0x3f00;
+
+ return;
+}
+
+// // 0x11 = 13M 0x1 = 30M
+PUBLIC VOID hal_SetCameraClkOut(u16 value)
+{
+ hwp_camera->CLK_OUT = value;
+}
+
+PUBLIC VOID hal_CameraPowerDown(BOOL PowerDown)
+{
+ if(PowerDown){
+ hwp_camera->CMD_SET = CAMERA_PWDN;
+ }else{
+ hwp_camera->CMD_CLR = CAMERA_PWDN;
+ }
+
+ return;
+}
+
+
+// =============================================================================
+// hal_CameraControllerEnable(BOOL enable)
+// -----------------------------------------------------------------------------
+// =============================================================================
+PUBLIC VOID hal_CameraControllerEnable(BOOL enable)
+{
+ if(enable){
+ // Turn on controller and apbi
+ hwp_camera->CMD_SET = CAMERA_FIFO_RESET;
+ hwp_camera->CTRL |= CAMERA_DATAFORMAT_YUV422;
+ hwp_camera->CTRL |= CAMERA_ENABLE;
+ } else{
+ // Turn off controller and apbi
+ hwp_camera->CTRL &= ~CAMERA_ENABLE;
+ }
+}
+
+PUBLIC VOID hal_CameraIrqSetHandler(HAL_CAMERA_IRQ_HANDLER_T handler)
+{
+ g_halCameraIrqHandler = handler;
+}
+
+
+
+// =============================================================================
+// hal_CameraIrqConfig()
+// -----------------------------------------------------------------------------
+/// Configure the desired interrupts
+///
+/// @param mask Mask to enable specific interrupts. Valid interrupts are
+/// liste in HAL_CAMERA_IRQ_CAUSE_T.
+// =============================================================================
+PUBLIC VOID hal_CameraIrqSetMask(HAL_CAMERA_IRQ_CAUSE_T mask)
+{
+ UINT32 realMask = 0;
+
+ if (mask.overflow)
+ realMask |= CAMERA_OVFL;
+
+ if (mask.fstart)
+ realMask |= CAMERA_VSYNC_R;
+
+ if (mask.fend)
+ realMask |= CAMERA_VSYNC_F;
+
+ if (mask.dma)
+ realMask |= CAMERA_DMA_DONE;
+
+ hwp_camera->IRQ_CLEAR = realMask;
+ hwp_camera->IRQ_MASK = realMask;
+}
+
+PROTECTED VOID hal_CameraIrqHandler(UINT8 interruptId)
+{
+ HAL_CAMERA_IRQ_CAUSE_T cause = {0, };
+ UINT32 realCause;
+
+ realCause = hwp_camera->IRQ_CAUSE;
+
+ // Clear IRQ
+ hwp_camera->IRQ_CLEAR = realCause;
+
+ if(realCause & CAMERA_OVFL)
+ cause.overflow = 1;
+
+ if(realCause & CAMERA_VSYNC_R)
+ cause.fstart = 1;
+
+ if(realCause & CAMERA_VSYNC_F)
+ cause.fend= 1;
+
+ if(realCause & CAMERA_DMA_DONE)
+ cause.dma = 1;
+
+ // Call User handler
+ if (g_halCameraIrqHandler)
+ g_halCameraIrqHandler(cause);
+}
+
+PUBLIC UINT32 hal_getCameraStatus(HAL_CAMERA_IRQ_CAUSE_T *cause)
+{
+ // HAL_CAMERA_IRQ_CAUSE_T cause = {0, };
+ UINT32 realCause;
+
+ realCause = hwp_camera->IRQ_CAUSE;
+ // Clear IRQ
+ hwp_camera->IRQ_CLEAR = realCause;
+
+
+ if(realCause & CAMERA_OVFL)
+ cause->overflow = 1;
+
+ if(realCause & CAMERA_VSYNC_R)
+ cause->fstart = 1;
+
+ if(realCause & CAMERA_VSYNC_F)
+ cause->fend= 1;
+
+ if(realCause & CAMERA_DMA_DONE)
+ cause->dma = 1;
+
+ return realCause;
+}
+
+ UINT32 hal_AxiGetTc(void)
+ {
+ return hwp_camera->CAM_TC_COUNT;
+ }
+
+// =============================================================================
+// hal_CameraStopXfer
+// -----------------------------------------------------------------------------
+/// Must be called at the end of the Frame Capture
+/// If an underflow occured and the IFC tranfer is not complete,
+/// this function will handle the channel release
+///
+/// @param stop If \c TRUE, stops the camera controller.
+/// @return 0 when the IC transfer was complete
+/// 1 when the IFC transfer was not complete and the channel had to be released
+// =============================================================================
+PUBLIC HAL_CAMERA_XFER_STATUS_T hal_CameraStopXfer(BOOL stop)
+{
+ UINT32 tc = 0;
+
+ printf(" stop xfer ");
+ // Disable the Camera controller in any case to avoid toggling
+ if(stop)
+ hal_CameraControllerEnable(FALSE);
+
+ tc = hal_AxiGetTc();
+
+ printf("\r\n ytt loss tc =0x ");
+ hal_HstSendEvent(tc);
+
+ if(tc != 0)
+ printf("\r\n---------------- --------------------------------------- \n");
+
+ printf("\r\n receive line = ");
+ hal_HstSendEvent(( 640*480*2 - tc )/(640*2));
+ printf("\r\n");
+
+ if(tc != 0){
+
+ if(!stop){
+ hal_CameraControllerEnable(FALSE);
+ hal_CameraControllerEnable(TRUE);
+ }
+
+ // Try to determine why we missed data
+ if(hwp_camera->IRQ_CAUSE & CAMERA_OVFL)
+ printf("Overflow during transfer between camera module and IFC");
+ else
+ printf("Missing data between external camera and camera module");
+
+ return XFER_NOT_FINISHED;
+ }
+
+ if(!(hwp_camera->IRQ_CAUSE & CAMERA_OVFL))
+ return XFER_SUCCESS;
+
+ return(XFER_FINISHED_WITH_OVERFLOW);
+}
+
+
+// =============================================================================
+// hal_CameraStartXfer
+// -----------------------------------------------------------------------------
+/// This function begins the IFC transfer of the camera data. The camera
+/// itself is reset and the camera module internal fifo is cleared. The IFC
+/// transfer is then started.
+/// @param BufSize This is the size of the buffer in _bytes_
+/// @param Buffer Pointer to the video buffer where the IFC will store the data.
+/// @return IFC channel number.
+// =============================================================================
+PUBLIC UINT8 hal_CameraStartXfer(UINT32 bufSize, UINT8* buffer)
+{
+ REG32 value ;
+
+ hwp_camera->CMD_SET = CAMERA_FIFO_RESET;
+ hwp_camera->IRQ_CLEAR = CAMERA_OVFL; // Clear the Overflow bit for checking later
+ // g_halCameraIfcChan = hal_IfcTransferStart(HAL_IFC_CAMERA_RX, buffer, bufSize, HAL_IFC_SIZE_32_MODE_AUTO);
+ // HAL_CAMERA_TRACE("hal_CameraStartXfer: channel %i", g_halCameraIfcChan);
+ hwp_camera->CAM_FRAME_START_ADDR =(UINT32) buffer;
+ hwp_camera->CAM_FRAME_SIZE = bufSize;
+ hwp_camera->CAM_AXI_CONFIG =( hwp_camera->CAM_AXI_CONFIG)|0x20;
+ value = hwp_camera->CAM_AXI_CONFIG;
+ printf("cam: 2013 hal_CameraStartXfer \r\n");
+ hal_HstSendEvent((UINT32)bufSize);
+ hal_HstSendEvent((UINT32)value);
+ printf("\n");
+
+ return 1;
+}
+
+// =============================================================================
+// hal_CameraWaitXferFinish
+// -----------------------------------------------------------------------------
+///if IFC transfer not finish, do nothg.
+/// @return 0 when the IC transfer was complete
+/// 1 when the IFC transfer was not complete
+// =============================================================================
+
+PUBLIC HAL_CAMERA_XFER_STATUS_T hal_CameraWaitXferFinish(void)
+{
+ return XFER_SUCCESS;
+}
+
+// =============================================================================
+// hal_CameraSetupClockDivider
+// -----------------------------------------------------------------------------
+// =============================================================================
+PUBLIC VOID hal_CameraSetupClockDivider(UINT8 divider)
+{
+
+
+#if 0 // ytt-temp
+ UINT32 newClkScale;
+ UINT32 ctrlReg;
+
+ // Save enable bit
+ ctrlReg = hwp_sysCtrl->Cfg_Clk_Camera_Out & SYS_CTRL_CLK_CAMERA_OUT_EN_ENABLE;
+
+ // Saturate the divider to the maximum value supported
+ // by the hardware.
+ if(divider-2 > (SYS_CTRL_CLK_CAMERA_OUT_DIV_MASK>>SYS_CTRL_CLK_CAMERA_OUT_DIV_SHIFT))
+ {
+ newClkScale = (SYS_CTRL_CLK_CAMERA_OUT_DIV_MASK>>SYS_CTRL_CLK_CAMERA_OUT_DIV_SHIFT) + 2;
+ }
+ else if(divider < 2)
+ {
+ newClkScale = 2;
+ }
+ else
+ {
+ newClkScale = divider;
+ }
+
+ // Divider is register value+2, so we take off 2 here.
+ ctrlReg |= SYS_CTRL_CLK_CAMERA_DIV_SRC_SEL_156_MHZ |
+ SYS_CTRL_CLK_CAMERA_OUT_SRC_SEL_FROM_DIVIDER |
+ SYS_CTRL_CLK_CAMERA_OUT_DIV(newClkScale-2)
+#if (CHIP_HAS_ASYNC_TCU)
+ | SYS_CTRL_CLK_SPI_CAMERA_DIV(0)
+#endif
+ ;
+
+ // Restore initial config with new clock scal.
+ hwp_sysCtrl->Cfg_Clk_Camera_Out = ctrlReg;
+#endif
+}
+
+PUBLIC VOID hal_CameraSetLane(UINT8 lane)
+{
+ hwp_camera->CSI_CONFIG_REG3 &= 0x3fffffff;
+
+ if (lane == 1)
+ hwp_camera->CSI_CONFIG_REG3 |= (0x2 << 30);
+ else
+ hwp_camera->CSI_CONFIG_REG3 |= (0x1 << 30);
+}
+
+
diff --git a/board/rda/common/i2c_test.c b/board/rda/common/i2c_test.c
new file mode 100644
index 0000000000..eb0d287ba6
--- /dev/null
+++ b/board/rda/common/i2c_test.c
@@ -0,0 +1,1546 @@
+#include <common.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/reg_spi.h>
+#include <asm/arch/reg_gpio.h>
+#include <asm/arch/reg_cfg_regs.h>
+#include <asm/arch/reg_timer.h>
+#include <asm/arch/reg_i2c.h>
+#include <asm/arch/ispi.h>
+
+#ifdef CONFIG_IRQ
+#include "irq.h"
+#endif
+
+/* I2C debug enable or disable */
+#define rprintf printf
+#define TEST_I2C_DEBUG
+
+#ifdef TEST_I2C_DEBUG
+#define d_printf rprintf
+#else
+#define d_printf(...) do{}while(0)
+#endif
+
+/* TX FIFO size and timeout count */
+#define I2C_TX_FIFO_SIZE (0x1F)
+#define I2C_WAIT_SLOT (20)
+#define I2C_WAIT_JITTER (10)
+#define I2C_WAIT_COUNT (I2C_TX_FIFO_SIZE + I2C_WAIT_JITTER)
+#define I2C_WAIT_TIME (I2C_WAIT_SLOT * (I2C_TX_FIFO_SIZE + I2C_WAIT_JITTER))
+
+/* APB2 bus frequency value 200MHz */
+#define APB2_BUS_FREQ_VALUE (200000000)
+
+/* Device address */
+#define I2C_SLAVE_ADDR_TS_MSG2133 (0x60)
+
+//#define I2C_TX_BUF_SIZE (0x100)
+//#define I2C_RX_BUF_SIZE (0x100)
+
+/* I2C3 and Touch Sensor GPIO PINs */
+#define GPIO_A1 1
+#define GPIO_B2 2
+#define GPIO_B6 6
+#define GPIO_B7 7
+
+#define GPIO_TOUCH_IRQ GPIO_A1
+#define GPIO_TOUCH_RESET GPIO_B2
+#define GPIO_TOUCH_SCL GPIO_B6
+#define GPIO_TOUCH_SDA GPIO_B7
+
+#define BANK_TOUCH_IRQ hwp_apGpioA
+#define BANK_TOUCH_RESET hwp_apGpioB
+#define BANK_TOUCH_SCL hwp_apGpioB
+#define BANK_TOUCH_SDA hwp_apGpioB
+#define BANK_PIN_CFG hwp_configRegs
+
+static int g_i2c_speed = 200;
+#ifdef CONFIG_IRQ
+static int g_i2c_flag_tx_msg_ok = 0;
+static int g_i2c_flag_rx_msg_ok = 0;
+static int g_i2c_flag_tx_msg_err = 0;
+#endif /* CONFIG_IRQ */
+static HWP_I2C_MASTER_T *g_hwp_i2c = hwp_i2cMaster;
+static HWP_I2C_MASTER_T *g_i2c_tab[] = {hwp_i2cMaster,hwp_i2cMaster2,hwp_i2cMaster3};
+
+static void touch_sensor_init(void);
+static void i2c_test_init(void);
+static void i2c_buffer_init(void);
+static void dump_i2c_reg(void);
+static unsigned int get_ticks_x(unsigned int *ptr_high,unsigned int *ptr_low);
+static unsigned int get_ticks_x_x(void);
+
+#ifdef CONFIG_IRQ
+static void i2c_tx_callback(void);
+static void i2c_rx_callback(void);
+#endif /* CONFIG_IRQ */
+
+#if 0
+static HWP_SPI_T *hwp_ispi = hwp_spi3;
+static void ispi_open(int modemSpi);
+static UINT32 ispi_reg_read(UINT32 regIdx);
+static void ispi_reg_write(UINT32 regIdx, UINT32 value);
+#endif
+
+static void i2c_config_clock(int speed_khz)
+{
+ unsigned int clock,clk_div,mclk = APB2_BUS_FREQ_VALUE;
+ unsigned int ctrl_reg;
+
+ clock = speed_khz * 1000;
+ clk_div = mclk / (5 * clock);
+ if(mclk % (5 * clock))
+ clk_div += 1;
+ if(clk_div >= 1)
+ clk_div -= 1;
+ if(clk_div > 0xFFFF)
+ clk_div = 0xFFFF;
+
+ ctrl_reg = g_hwp_i2c->CTRL;
+ ctrl_reg &= (~I2C_MASTER_CLOCK_PRESCALE_MASK);
+ ctrl_reg |= I2C_MASTER_CLOCK_PRESCALE(clk_div);
+
+ g_hwp_i2c->CTRL = 0;
+ g_hwp_i2c->CTRL = ctrl_reg;
+
+ d_printf("ctrl = %x,clk_div = %d,speed = %d Kbps\n"
+ ,g_hwp_i2c->CTRL,clk_div,speed_khz);
+}
+
+static void i2c_enable(int enabled)
+{
+ if(enabled){
+ g_hwp_i2c->CTRL |= (I2C_MASTER_EN | (0x3 << 14));
+ g_hwp_i2c->CTRL1 = 0;
+ } else {
+ g_hwp_i2c->CTRL &= (~I2C_MASTER_EN);
+ }
+}
+
+static void i2c_test_init(void)
+{
+ i2c_config_clock(g_i2c_speed);
+ i2c_enable(1);
+}
+
+static void i2c_buffer_init(void)
+{
+#if 0
+ int i;
+ for(i = 0;i < I2C_TX_BUF_SIZE;i++)
+ g_i2c_tx_buf[i] = (unsigned char)i;
+ for(i = 0;i < I2C_RX_BUF_SIZE;i++)
+ g_i2c_rx_buf[i] = (unsigned char)0x5a;
+#endif
+}
+
+static int i2c_tx_byte(unsigned char dat,int start,int stop)
+{
+ unsigned int cmd = I2C_MASTER_WR;
+
+ if(start)
+ cmd |= I2C_MASTER_STA;
+ if(stop)
+ cmd |= I2C_MASTER_STO;
+
+ g_hwp_i2c->TXRX_BUFFER = dat;
+ g_hwp_i2c->CMD = cmd;
+ d_printf("i2c tx data:%2x,cmd:%x\n",dat,cmd);
+ return 0;
+}
+
+static int i2c_rx_byte(unsigned char *buf,int start,int stop)
+{
+ unsigned int cmd = I2C_MASTER_RD;
+
+ if(start)
+ cmd |= I2C_MASTER_STA;
+ if(stop)
+ cmd |= (I2C_MASTER_ACK | I2C_MASTER_STO);
+ g_hwp_i2c->CMD = cmd;
+// d_printf("i2c_rx_byte, cmd = %x\n",cmd);
+ return 0;
+}
+
+#ifdef CONFIG_IRQ
+static void i2c_enable_irq(int enabled)
+{
+ if(enabled) {
+ g_hwp_i2c->CTRL |= I2C_MASTER_IRQ_MASK;
+ } else {
+ g_hwp_i2c->CTRL &= (~I2C_MASTER_IRQ_MASK);
+ }
+}
+
+static void i2c_enable_irq_tx_fifo_empty(int enabled)
+{
+ if(enabled) {
+ g_hwp_i2c->CTRL1 |= I2C_MASTER_TXFIFO_UNDER_IRQ_MASK;
+ g_hwp_i2c->IRQ_CLR = I2C_MASTER_IRQ_CLR;
+ } else {
+ g_hwp_i2c->CTRL1 &= (~I2C_MASTER_TXFIFO_UNDER_IRQ_MASK);
+ }
+}
+#endif /* CONFIG_IRQ */
+
+static inline void i2c_set_rx_number(unsigned int n)
+{
+ unsigned int reg = g_hwp_i2c->CTRL;
+
+ reg &= (~I2C_MASTER_RX_READ_NUM_MASK);
+ reg |= I2C_MASTER_RX_READ_NUM(n);
+ g_hwp_i2c->CTRL = reg;
+}
+
+static inline int i2c_get_rx_number(void)
+{
+ return (((g_hwp_i2c->STATUS & I2C_MASTER_RX_FIFO_DATA_NUM_MASK) >> 21) & 0x1F);
+}
+
+static inline void i2c_clear_fifo(void)
+{
+ g_hwp_i2c->CTRL |= I2C_MASTER_CLEAR_FIFO;
+ g_hwp_i2c->CTRL &= ~I2C_MASTER_CLEAR_FIFO;
+}
+
+static inline int i2c_get_free_space(void)
+{
+ return (((g_hwp_i2c->STATUS & I2C_MASTER_TX_FIFO_FREE_NUM_MASK) >> 26) & 0x1F);
+}
+
+#if 0
+//#ifdef TEST_I2C_DEBUG
+static int i2c_bus_is_busy(void)
+{
+ unsigned int status;
+ status = (g_hwp_i2c->STATUS &
+ (I2C_MASTER_TIP | I2C_MASTER_BUSY));
+ d_printf("i2c_bus_is_busy, status: %x\n",g_hwp_i2c->STATUS);
+ return status;
+}
+#else
+static inline int i2c_bus_is_busy(void)
+{
+ return (g_hwp_i2c->STATUS & (I2C_MASTER_TIP | I2C_MASTER_BUSY));
+}
+#endif
+
+#if 0
+static inline int i2c_is_tx_fifo_empty(void)
+{
+ return (g_hwp_i2c->STATUS & I2C_MASTER_IRQ_TX_UDF);
+}
+
+static void i2c_stop(void)
+{
+ d_printf("ctrl : %x\n",g_hwp_i2c->CTRL);
+ d_printf("status: %x\n",g_hwp_i2c->STATUS);
+
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+
+ g_hwp_i2c->CTRL |= I2C_MASTER_CLEAR_FIFO;
+ g_hwp_i2c->CTRL &= ~I2C_MASTER_CLEAR_FIFO;
+
+ d_printf("ctrl : %x\n",g_hwp_i2c->CTRL);
+ d_printf("status: %x\n",g_hwp_i2c->STATUS);
+ d_printf("i2c stoped\n");
+}
+#endif
+static void dump_i2c_reg(void)
+{
+ rprintf("\n");
+ rprintf("ctrl : %x\n",g_hwp_i2c->CTRL);
+ rprintf("ctrl1 : %x\n",g_hwp_i2c->CTRL1);
+ rprintf("status : %x\n",g_hwp_i2c->STATUS);
+ rprintf("cmd : %x\n",g_hwp_i2c->CMD);
+ rprintf("\n");
+}
+
+void i2c_case_check_register_default_value(void)
+{
+ rprintf("\ncheck register default value ...\n");
+ //TODO: reset i2c
+ rprintf("base addr: %x\n",(unsigned int)g_hwp_i2c);
+ dump_i2c_reg();
+}
+
+int i2c_test_tx_data_pol(unsigned char addr,const unsigned char *dat,int len)
+{
+ int i;
+ unsigned char temp;
+ static volatile unsigned int timeout = 0;
+
+ rprintf("\ni2c tx data polling test,addr = %x, len = %d\n",
+ (unsigned int)dat,len);
+
+ /* wait until bus is idle */
+ rprintf("clear fifo ...\n");
+ i2c_clear_fifo();
+ rprintf("wait i2c busy until it is idle ...\n");
+ timeout = I2C_WAIT_COUNT;
+ while(g_hwp_i2c->STATUS & (I2C_MASTER_TIP | I2C_MASTER_BUSY)) {
+ if(timeout == 0) {
+ dump_i2c_reg();
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("i2c bus is busy,exit\n");
+ return -1;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+ /* send first byte: device address,RW = 0 */
+ temp = (addr << 1) & 0xFE;
+ i2c_tx_byte(temp,1,0);
+ /* send data byte array */
+ for(i = 0;i < len - 1;i++) {
+ while(i2c_get_free_space() == 0);
+ i2c_tx_byte(dat[i],0,0);
+ }
+ /* send last byte */
+ i2c_tx_byte(dat[len-1],0,1);
+ /* wait sending finish */
+ rprintf("wait for tx finish ...\n");
+ if(1) {
+ timeout = I2C_WAIT_COUNT;
+ while(!(g_hwp_i2c->STATUS & (I2C_MASTER_IRQ_TX_UDF))) {
+ if(timeout == 0) {
+ rprintf("dump i2c register ...\n");
+ dump_i2c_reg();
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("i2c send data timeout %d\n",
+ I2C_WAIT_TIME);
+ return -2;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ dump_i2c_reg();
+ }
+ g_hwp_i2c->CMD = 0;
+ g_hwp_i2c->CTRL1 = 0;
+ g_hwp_i2c->CTRL |= I2C_MASTER_CLEAR_FIFO;
+ g_hwp_i2c->CTRL &= ~I2C_MASTER_CLEAR_FIFO;
+ }
+ rprintf("test done !!!\n");
+ return 0;
+}
+#ifdef CONFIG_IRQ
+static void i2c_tx_callback(void)
+{
+ if(g_hwp_i2c->STATUS & I2C_MASTER_IRQ_TX_UDF) {
+ g_i2c_flag_tx_msg_ok = 1;
+ } else {
+ g_i2c_flag_tx_msg_err++;
+ }
+ rprintf("i2c_tx_callback\n");
+ /* clear irq status */
+ g_hwp_i2c->IRQ_CLR = 0x01;
+}
+
+static inline void wr_i2c_bus(unsigned char dat,unsigned int cmd)
+{
+ g_hwp_i2c->TXRX_BUFFER = dat;
+ g_hwp_i2c->CMD = cmd;
+}
+
+static inline void rd_i2c_bus(unsigned char dat,unsigned int cmd)
+{
+ g_hwp_i2c->CMD = cmd;
+}
+
+int i2c_test_tx_data_int(unsigned char addr,const unsigned char *dat,int len)
+{
+ int i,err = 0;
+ unsigned int sta_cmd,sto_cmd,dat_cmd,busy;
+ volatile unsigned int timeout;
+
+ rprintf("\ni2c tx data interrupt test,addr = %x, len = %d\n",
+ (unsigned int)dat,len);
+
+ dat_cmd = I2C_MASTER_WR;
+ sta_cmd = I2C_MASTER_STA | I2C_MASTER_WR;
+ sto_cmd = I2C_MASTER_STO | I2C_MASTER_WR;
+ busy = I2C_MASTER_TIP | I2C_MASTER_BUSY;
+ timeout = I2C_WAIT_COUNT;
+ addr = (addr << 1) & 0xFE;
+
+ /* waitting for bus idle */
+ while(g_hwp_i2c->STATUS & busy) {
+ if(timeout == 0) {
+ rprintf("dump i2c register ...\n");
+ dump_i2c_reg();
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("i2c bus is busy,exit\n");
+ return -1;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+ /* ready data */
+ timeout = I2C_WAIT_COUNT;
+ g_i2c_flag_tx_msg_ok = 0;
+ g_i2c_flag_tx_msg_err = 0;
+ /*
+ * register a interrupt handler
+ * When the first byte is moved to shift register from tx fifo and the
+ * tx fifo is empty,the TX_UDF will be set 1. A interrupt should be
+ * triggered by TX_UDF and MCU begin to run a interrupt service funtion
+ * named callback().
+ */
+ i2c_enable_irq(0);
+ /* clear tx fifo and flag */
+ i2c_clear_fifo();
+ /* register a interrupt handler */
+ irq_request(RDA_IRQ_I2C,i2c_tx_callback);
+ /* enable gic interrupt */
+ irq_unmask(RDA_IRQ_I2C);
+ /* enable TX_UDF inerrupt */
+ i2c_enable_irq(1);
+ /* enable tx fifo under flow interrupt */
+ g_hwp_i2c->CTRL1 |= I2C_MASTER_TXFIFO_UNDER_IRQ_MASK;
+ /* begin to send data */
+ wr_i2c_bus(addr,sta_cmd);
+ for(i = 0;i < len - 1;i++) {
+ while(i2c_get_free_space() == 0);
+ wr_i2c_bus(dat[i],dat_cmd);
+ }
+ wr_i2c_bus(dat[i],sto_cmd);
+ /* wait sending finish */
+ while(1) {
+ if(g_i2c_flag_tx_msg_ok) {
+ err = 0;
+ rprintf("transmit data ok !\n");
+ break;
+ }
+ if(!timeout) {
+ err = -2;
+ rprintf("dump i2c register ...\n");
+ dump_i2c_reg();
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("transmit data timeout %d !\n",
+ I2C_WAIT_TIME);
+ break;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+ /* disable GIC ieterrupt */
+ irq_mask(RDA_IRQ_I2C);
+ irq_free(RDA_IRQ_I2C);
+ i2c_enable_irq(0);
+ g_hwp_i2c->CMD = 0;
+ g_hwp_i2c->CTRL1 = 0;
+ i2c_clear_fifo();
+#if 0
+ rprintf("dump i2c register ...\n");
+ dump_i2c_reg();
+#endif
+ if(g_i2c_flag_tx_msg_err) {
+ /*
+ * if g_i2c_flag_msg_err is not 0, this means
+ * a interrupt is triggered while there is no
+ * anyone IRQ source is enabled of I2C.
+ */
+ rprintf("IRQ error occur ###,error is %d\n",
+ g_i2c_flag_tx_msg_err);
+ while(1);//halt
+ }
+ if(err)
+ rprintf("test error ###\n",err);
+ else
+ rprintf("test done !!!\n");
+ return err;
+}
+#else
+int i2c_test_tx_data_int(unsigned char addr,const unsigned char *dat,int len){return 0;}
+#endif /* CONFIG_IRQ */
+
+int i2c_case_test_tx_busy_state(unsigned char addr)
+{
+ unsigned char i = 0;
+ unsigned int sta_cmd,sto_cmd,dat_cmd;
+ unsigned int status;
+
+ rprintf("\ni2c tx busy state test,addr is %x\n",addr);
+ sta_cmd = I2C_MASTER_STA | I2C_MASTER_WR;
+ sto_cmd = I2C_MASTER_STO | I2C_MASTER_WR;
+ dat_cmd = I2C_MASTER_WR;
+ addr = (addr << 1) & 0xFE;
+
+ /* wait until bus is idle */
+ rprintf("dump i2c register\n");
+ dump_i2c_reg();
+ rprintf("check busy state\n");
+ if(!(g_hwp_i2c->STATUS & I2C_MASTER_BUSY)) {
+ rprintf("i2c bus is idle,send some bytes\n");
+ /* send address byte */
+ g_hwp_i2c->TXRX_BUFFER = addr;
+ g_hwp_i2c->CMD = sta_cmd;
+ /* load data into tx fifo */
+ for(i = 0;i < I2C_TX_FIFO_SIZE - 2;i++) {
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+ }
+ g_hwp_i2c->TXRX_BUFFER = 0xED;
+ g_hwp_i2c->CMD = sto_cmd;
+
+ status = g_hwp_i2c->STATUS;
+ rprintf("status is %x\n",status);
+ if(!(status & I2C_MASTER_BUSY)) {
+ rprintf("i2c bus is still idle after fill tx fifo\n"
+ "test error ###\n");
+ return -1;
+ }
+ dump_i2c_reg();
+ rprintf("delay ...\n");
+ mdelay(10);
+ dump_i2c_reg();
+ }
+ if(g_hwp_i2c->STATUS & (I2C_MASTER_BUSY)) {
+ rprintf("i2c bus is busy,delay ...\n");
+ mdelay(100);
+ } else {
+ rprintf("i2c bus is idle after sending some bytes\n"
+ "test done !!!\n");
+ return 0;
+ }
+ rprintf("check busy flag again\n");
+ dump_i2c_reg();
+ if(g_hwp_i2c->STATUS & (I2C_MASTER_BUSY)) {
+ rprintf("i2c bus is still busy, send stop cmd ...\n");
+ i2c_clear_fifo();
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("delay ...\n");
+ mdelay(100);
+ }
+ dump_i2c_reg();
+ if(g_hwp_i2c->STATUS & I2C_MASTER_BUSY) {
+ rprintf("i2c bus is busy after sending stop cmd\n"
+ "test error ###\n");
+ return -1;
+ } else {
+ rprintf("i2c bus is idle after sending stop cmd\n"
+ "test done !!!\n");
+ return 0;
+ }
+}
+
+int i2c_case_test_tx_speed(unsigned char addr,unsigned int speed)
+{
+ unsigned char i = 0x55;
+ unsigned int sta_cmd,sto_cmd,dat_cmd;
+ unsigned int emp_num,busy;
+ unsigned int tick_a,tick_b;
+ unsigned int dur_time,real_speed,sum_bit;
+
+ rprintf("\ni2c tx speed test,addr is %x\n",addr);
+
+ busy = I2C_MASTER_BUSY | I2C_MASTER_TIP;
+ sta_cmd = I2C_MASTER_STA | I2C_MASTER_WR;
+ sto_cmd = I2C_MASTER_STO | I2C_MASTER_WR;
+ dat_cmd = I2C_MASTER_WR;
+ addr = (addr << 1) & 0xFE;
+
+ /* wait until bus is idle */
+ rprintf("clear fifo\n");
+ i2c_clear_fifo();
+
+ rprintf("check busy\n");
+ if(g_hwp_i2c->STATUS & busy) {
+ rprintf("i2c bus is busy,delay ...\n");
+ mdelay(100);
+ }
+ if(g_hwp_i2c->STATUS & busy) {
+ rprintf("dump i2c register\n");
+ dump_i2c_reg();
+ rprintf("i2c bus is busy,exit\n");
+ return -1;
+ }
+
+ rprintf("i2c bus is idle,send some bytes\n");
+ /* mark current ticks value */
+ tick_a = get_ticks_x(NULL,NULL);
+ /* send address byte */
+ g_hwp_i2c->TXRX_BUFFER = addr;
+ g_hwp_i2c->CMD = sta_cmd;
+ /* load data into tx fifo */
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = sto_cmd;
+
+ do {
+ emp_num = (g_hwp_i2c->STATUS >> 26) & I2C_TX_FIFO_SIZE;
+ }while(emp_num != I2C_TX_FIFO_SIZE);
+
+ /* mark current ticks value */
+ tick_b = get_ticks_x(NULL,NULL);
+ rprintf("tick_a: %d, tick_b: %d,b-a: %d\n"
+ ,tick_a,tick_b,tick_b-tick_a);
+
+ // assume HWTIMER clock frequency is 2MHz,1 tick is 0.5 us
+ dur_time = ((tick_b - tick_a) * 10) / 2;
+ sum_bit = 20 * (8 + 1) + 2 - 10;
+ real_speed = ((sum_bit * 1000) * 10) / dur_time;
+
+ //the real speed is 184.846 kbps
+ rprintf("real speed is %d kbps,the expected speed is %d kbps\n"
+ ,real_speed,speed);
+ rprintf("test done !!!\n");
+ return 0;
+}
+
+int i2c_case_test_tx_speed_with_busy(unsigned char addr,unsigned int speed)
+{
+ unsigned char i = 0x55;
+ unsigned int sta_cmd,sto_cmd,dat_cmd;
+ unsigned int emp_num,busy,status;
+ unsigned int tick_a,tick_b,tick_c;
+ unsigned int dur_time,real_speed,sum_bit;
+
+ rprintf("\ni2c tx speed test,addr is %x\n",addr);
+
+ busy = I2C_MASTER_BUSY | I2C_MASTER_TIP;
+ sta_cmd = I2C_MASTER_STA | I2C_MASTER_WR;
+ sto_cmd = I2C_MASTER_STO | I2C_MASTER_WR;
+ dat_cmd = I2C_MASTER_WR;
+ addr = (addr << 1) & 0xFE;
+
+ /* wait until bus is idle */
+ rprintf("clear fifo\n");
+ i2c_clear_fifo();
+
+ rprintf("check busy\n");
+ if(g_hwp_i2c->STATUS & busy) {
+ rprintf("i2c bus is busy,delay ...\n");
+ mdelay(100);
+ }
+ if(g_hwp_i2c->STATUS & busy) {
+ rprintf("dump i2c register\n");
+ dump_i2c_reg();
+ rprintf("i2c bus is busy,exit\n");
+ return -1;
+ }
+
+ rprintf("i2c bus is idle,send some bytes\n");
+ /* mark time before start to write data to buffer */
+ tick_a = get_ticks_x_x();
+ /* send address byte */
+ g_hwp_i2c->TXRX_BUFFER = addr;
+ g_hwp_i2c->CMD = sta_cmd;
+ /* load data into tx fifo */
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = dat_cmd;
+
+ g_hwp_i2c->TXRX_BUFFER = i;
+ g_hwp_i2c->CMD = sto_cmd;
+
+ /* wait until tx fifo is empty */
+ do {
+ emp_num = (g_hwp_i2c->STATUS >> 26) & I2C_TX_FIFO_SIZE;
+ }while(emp_num != I2C_TX_FIFO_SIZE);
+
+ /* mack time when tx fifo is empty */
+ tick_b = get_ticks_x_x();
+
+ /* wait until busy flag is cleared */
+ do {
+ status = (g_hwp_i2c->STATUS & busy);
+ }while(status);
+
+ /* mark time when busy state is cleared */
+ tick_c = get_ticks_x_x();
+
+ rprintf("tick_a: %d, tick_b: %d,tick_c: %d,"
+ "b - a: %d, c - a: %d, c - b: %d\n"
+ ,tick_a,tick_b,tick_c,
+ tick_b - tick_a,tick_c - tick_a,tick_c - tick_b);
+
+ // assume HWTIMER clock frequency is 2MHz,1 tick is 0.5 us
+ dur_time = ((tick_b - tick_a) * 10) / 2;
+ sum_bit = 20 * (8 + 1) + 2 - 10;
+ real_speed = ((sum_bit * 1000) * 10) / dur_time;
+
+ //the real speed is 184.846 kbps when I2C is configured 200 kbps
+ rprintf("real speed is %d Kbps,the expected speed is %d Kbps\n"
+ ,real_speed,speed);
+ rprintf("test done !!!\n");
+ return 0;
+}
+
+int i2c_test_rx_data_pol(unsigned char addr,unsigned char *buf,int len)
+{
+ int i = 0;
+ unsigned char temp;
+ int rx_len;
+ static volatile unsigned int timeout = 0;
+
+ rprintf("\ni2c rx data polling test,addr = %x,len = %d\n",
+ (unsigned int)buf,len);
+ len = (len > I2C_TX_FIFO_SIZE) ? I2C_TX_FIFO_SIZE : len;
+
+// rprintf("clear fifo ...\n");
+// i2c_clear_fifo();
+
+ rprintf("waiting for bus idle ...\n");
+ timeout = I2C_WAIT_COUNT;
+ while(g_hwp_i2c->STATUS & (I2C_MASTER_TIP | I2C_MASTER_BUSY)) {
+ if(timeout == 0) {
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("dump register ...\n");
+ dump_i2c_reg();
+ rprintf("i2c bus is busy,exit\n");
+ return -1;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+ /* send address,RW = 1 */
+ temp = (addr << 1) | 0x01;
+ i2c_tx_byte(temp,1,0);
+#if 1
+ /* wait tx fifo empty,maybe the data walking on the bus */
+ timeout = I2C_WAIT_COUNT;
+ while(!(g_hwp_i2c->STATUS & I2C_MASTER_IRQ_TX_UDF)) {
+ if(timeout == 0) {
+ g_hwp_i2c->CMD = I2C_MASTER_STO;
+ rprintf("i2c send address timeout %d\n",
+ I2C_WAIT_TIME);
+ rprintf("dump register ...\n");
+ dump_i2c_reg();
+ return -2;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+#endif
+ /* set rx data number */
+ i2c_set_rx_number(len);
+ /* set rx data command */
+ i2c_rx_byte(NULL,0,1);
+ /* wait until rx data finished */
+ timeout = I2C_WAIT_COUNT;
+ while(1) {
+ rx_len = i2c_get_rx_number();
+ if(rx_len >= len) {
+ rprintf("received %d bytes: ",rx_len);
+ break;
+ }
+ if(timeout == 0) {
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("i2c receive data timeout %d\n",
+ I2C_WAIT_TIME);
+ rprintf("dump register ...\n");
+ dump_i2c_reg();
+ return -3;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+ /* store data */
+ rprintf("received data:\n");
+ for(i = 0;i < rx_len;i++) {
+ buf[i] = g_hwp_i2c->TXRX_BUFFER;
+ rprintf("%2x ",buf[i]);
+ }
+ rprintf("\n");
+
+ if(rx_len != len) {
+ rprintf("test error ###\n");
+ i2c_set_rx_number(0);
+ i2c_clear_fifo();
+ return -3;
+ }
+ /* clear buffer */
+ i2c_set_rx_number(0);
+ i2c_clear_fifo();
+ rprintf("test done !!!\n");
+ return 0;
+}
+
+#ifdef CONFIG_IRQ
+static void i2c_rx_callback(void)
+{
+ g_i2c_flag_rx_msg_ok = 1;
+ rprintf("i2c_rx_callback\n");
+ /* clear irq status */
+ g_hwp_i2c->IRQ_CLR = 0x01;
+}
+
+int i2c_test_rx_data_int(unsigned char addr,unsigned char *buf,int len)
+{
+ int i,err = 0;
+ int rx_len = 0;
+ volatile unsigned int timeout = I2C_WAIT_COUNT;
+ unsigned int busy = I2C_MASTER_TIP | I2C_MASTER_BUSY;
+ unsigned int sta_cmd = I2C_MASTER_WR|I2C_MASTER_STA;
+ unsigned int dat_cmd = I2C_MASTER_RD|I2C_MASTER_STO|I2C_MASTER_ACK;
+ unsigned char temp = 0;
+ unsigned int tick_a = 0,tick_b = 0;
+
+ rprintf("\ni2c rx data interrupts test,addr = %x,len = %d\n",
+ (unsigned int)buf,len);
+ while(g_hwp_i2c->STATUS & busy) {
+ if(timeout == 0) {
+ dump_i2c_reg();
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("i2c bus is busy,exit\n");
+ return -1;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+ /* disable I2C IRQs */
+ i2c_enable_irq(0);
+ g_hwp_i2c->CTRL1 = 0;
+ g_hwp_i2c->IRQ_CLR = 0x01;
+ /* clear TX FIFO */
+ i2c_clear_fifo();
+ /* ready data */
+ timeout = I2C_WAIT_COUNT;
+ addr = (addr << 1) | 0x01;
+ len = (len > I2C_TX_FIFO_SIZE) ? I2C_TX_FIFO_SIZE : len;
+ /* enable GIC IRQs */
+ irq_request(RDA_IRQ_I2C,i2c_rx_callback);
+ irq_unmask(RDA_IRQ_I2C);
+ /* enable I2C IRQs */
+ i2c_enable_irq(1);
+ /* send address,RW = 1 */
+ wr_i2c_bus(addr,sta_cmd);
+#if 1
+ /* wait tx fifo empty,maybe the data walking on the bus */
+ while(!(g_hwp_i2c->STATUS & I2C_MASTER_IRQ_TX_UDF)) {
+ if(timeout == 0) {
+ g_hwp_i2c->CMD = I2C_MASTER_STO;
+ rprintf("i2c send address timeout %d\n",
+ I2C_WAIT_TIME);
+ dump_i2c_reg();
+ return -1;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+#endif
+ /* set rx data number */
+ i2c_set_rx_number(len);
+ /* set rx data command */
+ rd_i2c_bus(0,dat_cmd);
+ /* clear ok flag */
+ timeout = I2C_WAIT_COUNT;
+ g_i2c_flag_rx_msg_ok = 0;
+ /* enable rx fifo interrupts */
+ g_hwp_i2c->CTRL1 |= I2C_MASTER_RXFIFO_NUM_IRQ_MASK;
+ /* wait until rx data finished */
+ tick_a = get_ticks_x_x();
+ while(1) {
+ if(!i2c_bus_is_busy()){
+ if(g_i2c_flag_rx_msg_ok) {
+ err = 0;
+ tick_b = get_ticks_x_x();
+ rx_len = i2c_get_rx_number();
+ // rprintf("%x\n",g_hwp_i2c->STATUS); // for TIP
+ rprintf("received %d bytes: ",rx_len);
+ break;
+ }
+ }
+ if(timeout == 0) {
+ err = -2;
+ g_hwp_i2c->CMD = I2C_MASTER_STO | I2C_MASTER_FORCE_STO;
+ rprintf("i2c receive data timeout %d us\n",
+ I2C_WAIT_TIME);
+ dump_i2c_reg();
+ break;
+ }
+ udelay(I2C_WAIT_SLOT);
+ timeout--;
+ }
+ /* disable I2C rx fifo interrupts */
+ g_hwp_i2c->CTRL1 &= (~I2C_MASTER_RXFIFO_NUM_IRQ_MASK);
+ /* store data */
+ if(buf != NULL) {
+ for(i = 0;i < rx_len;i++)
+ buf[i] = g_hwp_i2c->TXRX_BUFFER;
+ } else {
+ temp = temp;
+ for(i = 0;i < rx_len;i++)
+ temp = g_hwp_i2c->TXRX_BUFFER;
+ }
+ /*
+ * there is a very strange issue:
+ * if we do disable irq before clear fifo
+ * the TIP status will not be reset to 0
+ * so we should set rx number to 0 and
+ * clear the RX fifo before disable I2C
+ * IRQs
+ */
+// i2c_enable_irq(0); // for TIP
+ /* clear buffer */
+ i2c_set_rx_number(0);
+ i2c_clear_fifo();
+ /* disable I2C IRQs */
+ i2c_enable_irq(0);// for TIP
+ /* disable GIC IRQs */
+ irq_mask(RDA_IRQ_I2C);
+ irq_free(RDA_IRQ_I2C);
+ if(buf != NULL) {
+ rprintf("i2c receive data: \n");
+ for(i = 0;i < rx_len;i++)
+ rprintf(" %2x",buf[i]);
+ rprintf("\n");
+ }
+ rprintf("tick_b: %d, tick_a: %d,b-a: %d\n"
+ ,tick_b,tick_a,tick_b-tick_a);
+ dump_i2c_reg();
+ /* check received data length */
+ if((!err) && (rx_len >= len)) {
+ rprintf("test done !!!\n");
+ } else {
+ rprintf("test error ###\n");
+ }
+ return err;
+}
+#else
+int i2c_test_rx_data_int(unsigned char addr,unsigned char *buf,int len){return 0;}
+#endif /* CONFIG_IRQ */
+
+int i2c_case_test_receiving_msg_pol(unsigned char addr,
+ unsigned char *buf,
+ int len,
+ int times)
+{
+ int ret = 0;
+
+ rprintf("\ni2c receiving messsage polling test.\n"
+ "please touch you phone's screen.\n");
+
+ mdelay(1000);
+ while(times--) {
+ ret += i2c_test_rx_data_pol(addr,buf,len);
+ mdelay(1000);
+ }
+ if(ret !=0)
+ rprintf("test error,ret is %d ###\n",ret);
+ else
+ rprintf("test done !!!\n");
+ return ret;
+}
+
+int i2c_case_test_transmitting_msg_pol(unsigned char addr,
+ const unsigned char *dat,
+ int len,
+ int times)
+{
+ int ret = 0;
+ rprintf("\ni2c transmitting message polling test ...\n");
+ while(times--) {
+ ret += i2c_test_tx_data_pol(addr,dat,len);
+ }
+ if(ret != 0)
+ rprintf("test error,ret is %d ###\n",ret);
+ else
+ rprintf("test done !!!\n");
+ return ret;
+}
+
+int i2c_case_test_transmitting_speed(unsigned char addr)
+{
+ unsigned int spd_tab[7] = {100,150,200,250,300,350,400};
+ unsigned int old_speed = g_i2c_speed;
+ int i,ret = 0;
+
+ rprintf("\ni2c transmitting speed test ...\n");
+ for(i = 0;i < 7;i++) {
+ g_i2c_speed = spd_tab[i];
+ i2c_test_init();
+ mdelay(100);
+ ret += i2c_case_test_tx_speed(addr,g_i2c_speed);
+ mdelay(100);
+ }
+ /* recovery old speed configuration */
+ g_i2c_speed = old_speed;
+ i2c_test_init();
+ mdelay(100);
+
+ if(ret != 0)
+ rprintf("test error,ret is %d ###\n",ret);
+ else
+ rprintf("test done !!!\n");
+ return ret;
+}
+
+int i2c_case_test_transmitting_msg_irq(unsigned char addr,
+ const unsigned char *dat,
+ int len,
+ int times)
+{
+ int ret = 0;
+
+ rprintf("\ni2c transmit interrupts test\n");
+ while(times--) {
+ ret += i2c_test_tx_data_int(addr,dat,len);
+ }
+ if(ret != 0)
+ rprintf("test error,ret is %d\n",ret);
+ else
+ rprintf("test done !!!\n");
+ return ret;
+}
+
+int i2c_case_test_receiving_msg_irq(unsigned char addr,
+ unsigned char *rx_buf,
+ int len,
+ int times)
+{
+ int ret = 0;
+
+ rprintf("\n i2c receiving interrputs test\n");
+ while(times--) {
+ ret += i2c_test_rx_data_int(addr,rx_buf,len);
+ }
+ if(ret != 0)
+ rprintf("test error,ret is %d\n",ret);
+ else
+ rprintf("test done !!!\n");
+ return ret;
+}
+
+int i2c_check_result(int val,const char *name_str)
+{
+ if(val != 0) {
+ rprintf("\n%s failed ###,error is %d\n"
+ ,name_str,val);
+ //rprintf("test stoped\n");
+ //while(1);
+ return -1;
+ }
+ return 0;
+}
+
+#if 0
+int test_i2c(int id,int times)
+{
+ unsigned char tx_buf[10] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA};
+ unsigned char rx_buf[10] = {0x5A};
+ int rx_len;
+ int tx_len;
+ int ret;
+ unsigned char addr;
+ volatile unsigned char cmd;
+
+ rprintf("\n");
+ if((id > 2) || (id < 0)) {
+ rprintf("i2c id %d is invalid,must be 0 ~ 2.exit\n",id);
+ return -1;
+ }
+ if(times <= 0) {
+ rprintf("i2c times %d is invalid,exit\n"
+ ,times);
+ return -2;
+ }
+ rprintf("\nstart to test i2c %d,test %d times\n",id,times);
+
+ g_hwp_i2c = g_i2c_tab[id];
+ g_i2c_speed = 200;
+ g_hwp_i2c = hwp_i2cMaster3;
+ rx_len = 4;
+ tx_len = 10;
+ ret = 0;
+ addr =I2C_SLAVE_ADDR_TS_MSG2133;
+
+ touch_sensor_init();
+ i2c_test_init();
+ i2c_buffer_init();
+
+ while(1) {
+ rprintf("> ");
+ cmd = serial_getc();
+ rprintf("%c\n",cmd);
+
+ switch(cmd) {
+ case '0':
+ i2c_case_check_register_default_value();
+ break;
+ case '1':
+ ret = i2c_test_tx_data_pol(addr,tx_buf,tx_len);
+ i2c_check_result(ret,"tx data pol test");
+ break;
+ case '2':
+ ret = i2c_test_tx_data_int(addr,tx_buf,tx_len);
+ i2c_check_result(ret,"tx data int test");
+ break;
+ case '3':
+ ret = i2c_test_rx_data_pol(addr,rx_buf,rx_len);
+ i2c_check_result(ret,"rx data pol test");
+ break;
+ case '4':
+ ret = i2c_test_rx_data_int(addr,rx_buf,rx_len);
+ i2c_check_result(ret,"rx data int test");
+ break;
+ case '5':
+ ret = i2c_case_test_tx_speed(addr,g_i2c_speed);
+ i2c_check_result(ret,"tx speed test");
+ break;
+ case '6':
+ ret = i2c_case_test_tx_speed_with_busy(addr,g_i2c_speed);
+ i2c_check_result(ret,"tx speed with busy test");
+ break;
+
+ case 'a':
+ ret = i2c_case_test_tx_busy_state(addr);
+ i2c_check_result(ret,"tx busy state test");
+ break;
+ case 'b':
+ ret = i2c_case_test_transmitting_speed(addr);
+ i2c_check_result(ret,"transmitting speed test");
+ break;
+ case 'c':
+ ret = i2c_case_test_receiving_msg_pol(addr,
+ rx_buf,
+ rx_len,
+ 10);
+ i2c_check_result(ret,"receiving msg pol test");
+ break;
+ case 'd':
+ ret = i2c_case_test_transmitting_msg_pol(addr,
+ tx_buf,
+ tx_len,
+ times);
+ i2c_check_result(ret,"transmitting msg pol test");
+ break;
+ case 'e':
+ ret = i2c_case_test_transmitting_msg_irq(addr,
+ tx_buf,
+ tx_len,
+ times);
+ i2c_check_result(ret,"transmitting msg irq test");
+ break;
+ case 'f':
+ ret = i2c_case_test_receiving_msg_irq(addr,
+ tx_buf,
+ rx_len,
+ times);
+ i2c_check_result(ret,"receiving msg irq test");
+ break;
+ case 'q':
+ rprintf("i2c test quit\n");
+ return 0;
+ case 'r':
+ rprintf("reset i2c");
+ i2c_test_init();
+ i2c_buffer_init();
+ break;
+ default:
+ break;
+ }
+ rprintf("\n");
+ }
+}
+
+#else
+int test_i2c(int id,int times)
+{
+ unsigned char tx_buf[10] = {0x11,0x22,0x33,0x44,0x55,0x66,0x77,0x88,0x99,0xAA};
+ unsigned char rx_buf[10] = {0x5A};
+ int rx_len;
+ int tx_len;
+ int ret;
+ unsigned char addr;
+
+ rprintf("\n");
+ if((id > 2) || (id < 0)) {
+ rprintf("i2c id %d is invalid,must be 0 ~ 2.exit\n",id);
+ return -1;
+ }
+ if(times <= 0) {
+ rprintf("i2c times %d is invalid,exit\n"
+ ,times);
+ return -2;
+ }
+ rprintf("\nstart to test i2c %d,test %d times\n",id,times);
+
+ g_hwp_i2c = g_i2c_tab[id];
+ g_i2c_speed = 200;
+ rx_len = 4;
+ tx_len = 10;
+ ret = 0;
+ addr =I2C_SLAVE_ADDR_TS_MSG2133;
+
+ touch_sensor_init();
+ i2c_test_init();
+ i2c_buffer_init();
+
+ ret = i2c_case_test_tx_speed(addr,g_i2c_speed);
+ if(i2c_check_result(ret,"tx speed test"))
+ return ret;
+
+ ret = i2c_case_test_tx_speed_with_busy(addr,g_i2c_speed);
+ if(i2c_check_result(ret,"tx speed with busy test"))
+ return ret;
+
+ ret = i2c_case_test_tx_busy_state(addr);
+ if(i2c_check_result(ret,"tx busy state test"))
+ return ret;
+
+ ret = i2c_case_test_transmitting_speed(addr);
+ if(i2c_check_result(ret,"transmit speed test"))
+ return ret;
+
+ ret = i2c_case_test_receiving_msg_pol(addr,rx_buf,rx_len,10);
+ if(i2c_check_result(ret,"receiving msg pol test"))
+ return ret;
+
+ ret = i2c_case_test_transmitting_msg_pol(addr,tx_buf,tx_len,times);
+ if(i2c_check_result(ret,"transmitting msg pol test"))
+ return ret;
+
+ ret = i2c_case_test_transmitting_msg_irq(addr,tx_buf,tx_len,times);
+ if(i2c_check_result(ret,"transmitting msg irq test"))
+ return ret;
+
+ ret = i2c_case_test_receiving_msg_irq(addr,tx_buf,rx_len,times);
+ if(i2c_check_result(ret,"receiving msg irq test"))
+ return ret;
+
+ rprintf("\n\nall i2c test cases are OK !!!\n");
+ rprintf("\n\ni2c test done !!!\n");
+ return 0;
+}
+#endif
+
+#if 0
+static void ispi_open(int modemSpi)
+{
+ UINT32 cfgReg = 0;
+ UINT32 ctrlReg = 0;
+
+ /* hard code for now */
+ cfgReg = 0x100003;
+ ctrlReg = 0x2019d821;
+
+ if (modemSpi)
+ hwp_ispi = hwp_mspi2;
+ else
+ hwp_ispi = hwp_spi3;
+
+ /* Activate the ISPI. */
+ hwp_ispi->cfg = cfgReg;
+ hwp_ispi->ctrl = ctrlReg;
+
+ /* No IRQ. */
+ hwp_ispi->irq = 0;
+}
+
+static UINT8 ispi_tx_fifo_avail(void)
+{
+ UINT8 freeRoom;
+
+ /* Get avail level. */
+ freeRoom = GET_BITFIELD(hwp_ispi->status, SPI_TX_SPACE);
+
+ return freeRoom;
+}
+
+static BOOL ispi_tx_finished(void)
+{
+ UINT32 spiStatus;
+ spiStatus = hwp_ispi->status;
+
+ /* If ISPI FSM is active and the TX Fifo is empty */
+ /* (ie available space == Fifo size), the tf is not done */
+ if ((!(hwp_ispi->status & SPI_ACTIVE_STATUS))
+ && (SPI_TX_FIFO_SIZE == GET_BITFIELD(spiStatus, SPI_TX_SPACE))) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
+
+static UINT32 ispi_send_data(UINT32 csId, UINT32 data, BOOL read)
+{
+ UINT32 freeRoom;
+
+ /* Clear data upper bit to only keep the data frame. */
+ UINT32 reg = data & ~(SPI_CS_MASK | SPI_READ_ENA_MASK);
+
+ /* Add CS and read mode bit */
+ reg |= SPI_CS(csId) | (read ? SPI_READ_ENA : 0);
+
+ /* Enter critical section. */
+ //UINT32 status = hwp_sysIrq->SC;
+
+ /* Check FIFO availability. */
+ freeRoom = GET_BITFIELD(hwp_ispi->status, SPI_TX_SPACE);
+
+ if (freeRoom > 0) {
+ hwp_ispi->rxtx_buffer = reg;
+
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+static UINT32 ispi_get_data(UINT32 * recData)
+{
+ UINT32 nbAvailable;
+
+ nbAvailable = GET_BITFIELD(hwp_ispi->status, SPI_RX_LEVEL);
+
+ if (nbAvailable > 0) {
+ *recData = hwp_ispi->rxtx_buffer;
+ return 1;
+ } else {
+ return 0;
+ }
+}
+
+static void ispi_reg_write(UINT32 regIdx, UINT32 value)
+{
+ UINT32 wrData;
+
+ wrData = (0 << 25) | ((regIdx & 0x1ff) << 16) | (value & 0xffff);
+
+ while (ispi_tx_fifo_avail() < 1 ||
+ ispi_send_data(0, wrData, FALSE) == 0) ;
+
+ /* wait until any previous transfers have ended */
+ while (!ispi_tx_finished()) ;
+}
+
+static UINT32 ispi_reg_read(UINT32 regIdx)
+{
+ UINT32 wrData, rdData = 0;
+ UINT32 count;
+
+ wrData = (1 << 25) | ((regIdx & 0x1ff) << 16) | 0;
+
+ while (ispi_tx_fifo_avail() < 1 ||
+ ispi_send_data(0, wrData, TRUE) == 0) ;
+
+ /* wait until any previous transfers have ended */
+ while (!ispi_tx_finished()) ;
+
+ count = ispi_get_data(&rdData);
+ if (1 != count)
+ rprintf("ABB ISPI count err!");
+
+ rdData &= 0xffff;
+
+ return rdData;
+}
+#endif
+
+static void touch_sensor_power_init(void)
+{
+ unsigned int addr,val;
+
+ ispi_open(1);
+ /* select vol > 2V */
+ addr = 0x07;
+ val = ispi_reg_read(addr);
+ val &= (~(1<<13));
+// val |= (1<<13);// select vol < 2V
+ ispi_reg_write(addr,val);
+ /*
+ * enable power in normal mode
+ * set max value
+ */
+ addr = 0x28;
+ val = ispi_reg_read(addr);
+ val |= (1<<13);
+ val |= (7 << 3);
+ ispi_reg_write(addr,val);
+ /* enable power in LP mode */
+ addr = 0x29;
+ val = ispi_reg_read(addr);
+ val |= (1<<13);
+ ispi_reg_write(addr,val);
+
+ d_printf("pmu reg %x = %x\n",0x07,(unsigned int)ispi_reg_read(0x07));
+ d_printf("pmu reg %x = %x\n",0x28,(unsigned int)ispi_reg_read(0x28));
+ d_printf("pmu reg %x = %x\n",0x29,(unsigned int)ispi_reg_read(0x29));
+
+ ispi_open(0);
+}
+
+static void touch_sensor_gpio_init(void)
+{
+ /* touch sensor reset pin direction: output,0 */
+ BANK_TOUCH_RESET->gpio_oen_set_out = (1 << GPIO_TOUCH_RESET);
+ BANK_TOUCH_RESET->gpio_clr = (1 << GPIO_TOUCH_RESET);
+ /* touch sensor irq pin direction: input */
+ BANK_TOUCH_IRQ->gpio_oen_set_in = (1 << GPIO_TOUCH_IRQ);
+ /* touch sensor i2c 3 pin scl,sda: alt */
+ d_printf("BANK_PIN_CFG : %x, BANK_PIN_CFG->AP_GPIO_B_Mode: %x\n"
+ ,(unsigned int)(BANK_PIN_CFG),BANK_PIN_CFG->AP_GPIO_B_Mode);
+ BANK_PIN_CFG->AP_GPIO_B_Mode &= (~(1 << GPIO_TOUCH_SCL));
+ BANK_PIN_CFG->AP_GPIO_B_Mode &= (~(1 << GPIO_TOUCH_SDA));
+ d_printf("BANK_PIN_CFG : %x, BANK_PIN_CFG->AP_GPIO_B_Mode: %x\n"
+ ,(unsigned int)(BANK_PIN_CFG),BANK_PIN_CFG->AP_GPIO_B_Mode);
+}
+
+static void gpio_set_val(HWP_GPIO_T *ptr_gpio,int pin,int val)
+{
+ unsigned int mask = 1 << (pin % 32);
+ if(val)
+ ptr_gpio->gpio_set = mask;
+ else
+ ptr_gpio->gpio_clr = mask;
+ d_printf("ptr_gpio: %x, pin: %x, mask: %x, val: %x\n",
+ (unsigned int)ptr_gpio,pin,mask,val);
+}
+
+static void touch_sensor_reset(void)
+{
+ gpio_set_val(BANK_TOUCH_RESET,GPIO_TOUCH_RESET,1);
+ mdelay(5);
+ gpio_set_val(BANK_TOUCH_RESET,GPIO_TOUCH_RESET,0);
+ mdelay(80);
+ gpio_set_val(BANK_TOUCH_RESET,GPIO_TOUCH_RESET,1);
+ mdelay(80);
+}
+#if 0
+static void touch_sensor_suspend(void)
+{
+ gpio_set_val(BANK_TOUCH_RESET,GPIO_TOUCH_RESET,0);
+ mdelay(10);
+}
+
+static void touch_sensor_resume(void)
+{
+ gpio_set_val(BANK_TOUCH_RESET,GPIO_TOUCH_RESET,1);
+ mdelay(1);
+ touch_sensor_reset();
+}
+#endif
+static void touch_sensor_init(void)
+{
+ touch_sensor_power_init();
+ touch_sensor_gpio_init();
+ touch_sensor_reset();
+}
+
+static unsigned int get_ticks_x(unsigned int *ptr_high,unsigned int *ptr_low)
+{
+ unsigned int val_h,val_l;
+ val_h = (unsigned int)hwp_apTimer->HWTimer_LockVal_H;
+ val_l = (unsigned int)hwp_apTimer->HWTimer_LockVal_L;
+ if(val_h != hwp_apTimer->HWTimer_LockVal_H) {
+ val_h = (unsigned int)hwp_apTimer->HWTimer_LockVal_H;
+ val_l = (unsigned int)hwp_apTimer->HWTimer_LockVal_L;
+ }
+ if(ptr_high != NULL)
+ *ptr_high = val_h;
+ if(ptr_low != NULL)
+ *ptr_low = val_l;
+ return val_l;
+}
+
+static unsigned int get_ticks_x_x(void)
+{
+ return ((unsigned int)hwp_apTimer->HWTimer_LockVal_L);
+}
diff --git a/board/rda/common/include/a7_cp15_reg.h b/board/rda/common/include/a7_cp15_reg.h
new file mode 100644
index 0000000000..64389ab992
--- /dev/null
+++ b/board/rda/common/include/a7_cp15_reg.h
@@ -0,0 +1,46 @@
+#ifndef __A7_CP15_REG_H__
+#define __A7_CP15_REG_H__
+
+unsigned int read_cp15_midr(void);
+unsigned int read_cp15_mpidr(void);
+unsigned int read_cp15_revidr(void);
+unsigned int read_cp15_ccsidr(void);
+unsigned int read_cp15_clidr(void);
+unsigned int read_cp15_l2ctlr(void);
+
+unsigned int read_cp15_csselr(void);
+void write_cp15_csselr(unsigned int val);
+
+unsigned int read_cp15_sctlr(void);
+void write_cp15_sctlr(unsigned int val);
+
+unsigned int read_cp15_scr(void);
+void write_cp15_scr(unsigned int val);
+
+unsigned int read_cp15_ttbr0(void);
+void write_cp15_ttbr0(unsigned int val);
+
+unsigned int read_cp15_ttbr1(void);
+void write_cp15_ttbr1(unsigned int val);
+
+unsigned int read_cp15_ttbcr(void);
+void write_cp15_ttbcr(unsigned int val);
+
+unsigned int read_cp15_htcr(void);
+void write_cp15_htcr(unsigned int val);
+void write_cp15_dacr(unsigned int val);
+
+void __copy_bytes(unsigned char *des,unsigned char *src,unsigned int size);
+void __nop_dly(void);
+
+unsigned int read_cpu_cpsr(void);
+void write_cpu_cpsr(unsigned int val);
+
+void cp15_disable_all_cache(void);
+void cp15_enable_dcache(void);
+void cp15_enable_icache(void);
+void cp15_enable_mmu(void);
+void cp15_disable_dcache(void);
+void cp15_disable_icache(void);
+void cp15_disable_mmu(void);
+#endif
diff --git a/board/rda/common/include/bootp_mode.h b/board/rda/common/include/bootp_mode.h
new file mode 100644
index 0000000000..16013bcde0
--- /dev/null
+++ b/board/rda/common/include/bootp_mode.h
@@ -0,0 +1,68 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/gallite441/boot/8809/src/bootp_mode.h $ //
+// $Author: huazeng $ //
+// $Date: 2011-11-30 18:24:46 +0800 (Wed, 30 Nov 2011) $ //
+// $Revision: 12233 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file halp_boot_asm.h //
+/// That file provides defines used by the assembly boot code. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _HALP_BOOT_MODE_H_
+#define _HALP_BOOT_MODE_H_
+
+
+#define BOOT_MODE_STD (0)
+
+// O: SLC
+#define BOOT_MODE_NAND_MLC (1<<0)
+// 0: 16 bits
+#define BOOT_MODE_NAND_8BIT (1<<1)
+// 0: boot from nand
+#define BOOT_MODE_BOOT_EMMC (1<<2)
+// 0: boot from emmc or nand
+#define BOOT_MODE_BOOT_SPI (1<<3)
+// 0: boot from nor spi
+#define BOOT_MODE_BOOT_SPI_NAND (1<<4)
+// 0: spi flash from camera pins
+#define BOOT_MODE_SPI_PIN_NAND (1<<5)
+// 0: nand flash high 8 bits from lcd pins
+#define BOOT_MODE_NAND_HIGH_PIN_CAM (1<<6)
+// 0: nand page size small, 2K-SLC/4K-MLC; 1: 4K-SLC/8K-MLC
+#define BOOT_MODE_NAND_PAGE_SIZE_L (1<<7)
+
+#define BOOT_MODE_JTAG_ENABLE (1<<8)
+
+#define BOOT_MODE_AP_MEM_CHECK_DISABLE (1<<9)
+
+#define BOOT_MODE_DRIVER_TEST (1<<10)
+
+#define BOOT_MODE_FORCE_DOWNLOAD (1<<11)
+
+#define BOOT_MODE_KEY_ON (1<<12)
+// If with KeyOn, driver test;
+// If with long KeyOn, hardware reset
+#define BOOT_MODE_VOL_DN (1<<13)
+// If with KeyOn, force download
+#define BOOT_MODE_VOL_UP (1<<14)
+// Force download
+#define BOOT_MODE_PLUG_IN (1<<15)
+
+
+#endif // _HALP_BOOT_MODE_H_
+
+
diff --git a/board/rda/common/include/bs_h264_5f_720x480.md5 b/board/rda/common/include/bs_h264_5f_720x480.md5
new file mode 100644
index 0000000000..da58c77115
--- /dev/null
+++ b/board/rda/common/include/bs_h264_5f_720x480.md5
@@ -0,0 +1,14 @@
+0xCE, 0x8E, 0xFE, 0x91, 0xF2, 0xE9, 0xBB, 0x21,
+0xB6, 0x68, 0xF5, 0x83, 0x08, 0x65, 0xC4, 0x46,
+
+0x77, 0xF8, 0x62, 0x51, 0x62, 0x0E, 0xEE, 0x5B,
+0x80, 0xF8, 0x69, 0x1C, 0xB7, 0xEA, 0xCD, 0xBF,
+
+0xEC, 0x50, 0x46, 0xC1, 0x0C, 0xE6, 0x38, 0x37,
+0xB5, 0x01, 0xB8, 0x43, 0xCC, 0xF5, 0x30, 0x23,
+
+0xE0, 0x47, 0xA2, 0xE2, 0xB4, 0x03, 0xE5, 0x11,
+0x34, 0xC3, 0xAC, 0xB1, 0xB7, 0x61, 0x2E, 0x9F,
+
+0x83, 0x1F, 0x8F, 0x82, 0xFF, 0x59, 0x6E, 0x51,
+0xB4, 0xF7, 0x30, 0x1B, 0xB2, 0x4F, 0xC4, 0x58,
diff --git a/board/rda/common/include/bs_h264_5f_720x480.txt b/board/rda/common/include/bs_h264_5f_720x480.txt
new file mode 100644
index 0000000000..2d52fc6460
--- /dev/null
+++ b/board/rda/common/include/bs_h264_5f_720x480.txt
@@ -0,0 +1,9435 @@
+0x01000000, 0x1F404D27, 0x5A408D8D, 0x0000903D, 0xEE280100, 0x00C81508, 0x25010000, 0x000200B8,
+0xB4CC7F00, 0x1A917434, 0x778F4F3E, 0x94966C10, 0x036EB76C, 0xE3D1E21C, 0x7842BB5F, 0x1C857462,
+0x65111D33, 0xA363E24F, 0xDACFE14B, 0x21CE79E2, 0xB953854A, 0x75AC19AB, 0xC17FE329, 0xAF3F84BC,
+0xD8B7E21F, 0x1FCFF248, 0x5187EDB8, 0x6253B4AC, 0xE71F2548, 0x5BAE0113, 0xF6A98FBD, 0xFE997DFE,
+0x4DB8D2CD, 0xBB1D42E6, 0xDC771AD8, 0xBBA84A47, 0xE394F269, 0xB1865720, 0xF36CE7CF, 0x292917BC,
+0xE0E43EEB, 0xF9F3BF0B, 0x24924B12, 0x7583492D, 0xB71F5655, 0x0F5FAECD, 0xEF9036B6, 0xDDDC2581,
+0x3A10C8E2, 0x2F0354D7, 0x1702D9FA, 0xDDA471E6, 0x1FF5279D, 0x8FB6335D, 0x4FC973BE, 0x00ABB163,
+0x66976F24, 0xCE5DC065, 0x81BD5CD0, 0x1A36046B, 0xC6662FDE, 0xE81B47C1, 0xBFC15FB7, 0xB29507EE,
+0x2CA2CBBA, 0xA41ECCC1, 0x2FC88D3C, 0xF793B9E8, 0x7C46E6E1, 0xB193B580, 0xCEFE0BC8, 0xB72CA7AD,
+0x10ED37F8, 0x5BB9C37B, 0x24D26758, 0x791A472C, 0x3FC6CE0B, 0xF976A6A6, 0xF40DCD94, 0x04877935,
+0x49E010F1, 0x8638A128, 0x0584AEF1, 0x27A70AEF, 0x356FB08E, 0x5648D135, 0xB4A38A5B, 0xE51E6C69,
+0xC02E9621, 0x4AE0D7CE, 0xBD8FE74B, 0x3C7DF817, 0xB465142E, 0x104B2371, 0x5E7B61D5, 0xCF697BFA,
+0xBAD206D2, 0x3D5470B0, 0x9DB5FA0A, 0xAA94FBE1, 0xFEC6683E, 0x55C4C532, 0x31BB4BB6, 0xCDF9DC97,
+0x2263D167, 0x294F913A, 0x06D405E0, 0xCB11E6AB, 0xD7E6A708, 0x1E01542A, 0xBDBFAD22, 0xBED866F9,
+0xD99F0443, 0xD204DC7D, 0xD57E3C3D, 0xFB542E4E, 0x70562917, 0xB6EA34D2, 0x7953B0E6, 0xAD649B2E,
+0x6E03B5F2, 0x32D09FCB, 0xB7E19873, 0xC6546843, 0x3059A8B0, 0x5F6A65FF, 0x383F4531, 0x72DB461D,
+0x6C4CD85F, 0xF3138808, 0x5FB5982C, 0x8AD199C1, 0x67DB38D4, 0x607DBF5D, 0x1D4ACDD1, 0xB142488B,
+0xFD42458F, 0xA99A8A01, 0x6708D4F2, 0x8BBB782A, 0xD51FA650, 0xCC255367, 0x628FBB6D, 0x34060CFE,
+0x0CD22EDB, 0x9285AA7D, 0x086F0589, 0xADE23CC4, 0x5B64EDDB, 0x72DCFC71, 0x30842B8A, 0x855A5D76,
+0x2F858613, 0x809B07BC, 0xF26295DB, 0xF72797D5, 0x608C8662, 0x207AEA1E, 0x74150B7F, 0x48919CCD,
+0xC5D2DB54, 0x4B68880A, 0x167DCA39, 0xC2EBF403, 0xC2379C97, 0x81E739AE, 0x1675D97D, 0x5CEE9592,
+0xA3839961, 0xE5E97F95, 0x98938117, 0x4C59A62B, 0xF9B7642F, 0x27ED2194, 0xA5B48FE9, 0x9DBE245F,
+0x44C01ECA, 0x21587121, 0xEE047B89, 0xDD22B3CD, 0x60D35F67, 0x23D61382, 0x9B5BC1B6, 0xB32CDB1F,
+0x893165C3, 0x52717FB8, 0x36834659, 0x01BC42DE, 0xE59794D0, 0x3E694FD3, 0xA4CC8667, 0x07BFD9F2,
+0x8035EA1E, 0x519C0B99, 0x79EE2888, 0xF6D67FC5, 0xFC196B6B, 0xFF0F810F, 0xE76D6CFE, 0x73D9114A,
+0x55DC5D9B, 0xA5FAE39D, 0x669A88BA, 0x2ABA3EF7, 0x28B41E00, 0x77455A7F, 0x5ED23953, 0x7E627F7E,
+0xAC6DDB01, 0x16479748, 0x57636FD0, 0x24EC1FC0, 0xA94CFC71, 0x1332CFE4, 0x9A049B05, 0x1F17AD9A,
+0xE69D6C81, 0xDD125C45, 0x476E7CEE, 0x7E70F050, 0x685C421B, 0x6461779A, 0x065EB196, 0xD486EEB9,
+0xA0079090, 0xF8963C08, 0x9A48CE81, 0xFD6BB425, 0x9EFA89E1, 0x5B7F5394, 0x6EAA5D11, 0x4AEE12B7,
+0xED82AF74, 0x13DB9668, 0xE389D188, 0x1A6740F3, 0xDD97291D, 0x84E3F294, 0x82444DD1, 0xEA841497,
+0x684F55BE, 0x870572FB, 0xD0081B00, 0xD2E46E60, 0x5AFFE4E6, 0xBB584138, 0xB20AB467, 0x22EDB941,
+0xEBC98524, 0x2F1A6434, 0x54578E11, 0x04E1F2CA, 0x5E897233, 0x57F9950E, 0x990DA8F8, 0x3A9CBB07,
+0xF92B9E9C, 0x1EE2B205, 0xADDE8043, 0x7C33E7DF, 0xC0E12E54, 0xEA0F571C, 0xEB26302A, 0xCFC906F9,
+0x4DA2074B, 0xAF74A68F, 0x00201E9E, 0x089E05E4, 0xA6AE02A1, 0x309FB5C0, 0xB1CDD680, 0x39DA0328,
+0x66AD8CDF, 0x5D9CE75E, 0xFA215794, 0x4417EC3A, 0x6D90CB21, 0xFCC6390B, 0xB423B4F2, 0xD1CE41E0,
+0x0419C01B, 0x53A1BBBF, 0x78A01250, 0x6E57058A, 0x5ADDDDA1, 0xAF636191, 0xB2B68CFC, 0x67648C29,
+0xE9C8703F, 0x4CDCA944, 0x406D7026, 0x2BBA3EB5, 0x382963EC, 0x0ABBA19B, 0xE2BAA3BC, 0x45E7F715,
+0x28F91065, 0x77C02B68, 0x3B87A7C4, 0xF03B7259, 0xDB2CADDF, 0x26593C6B, 0x8AF1814A, 0x8F96B6FB,
+0xBCC3A90A, 0xF99A80DA, 0xDE110C49, 0xBED673D9, 0x130EE126, 0x0B93B69E, 0x7D7737C3, 0xE66BCBDB,
+0xD218C88C, 0x59BF6AC3, 0xDD06CD32, 0x4733644E, 0x6514D1BE, 0x0D5D3D84, 0x23FCFC26, 0x424CF9FD,
+0x538B6400, 0xC3ACBEEE, 0x83469CDF, 0x627D8A69, 0x3C120BDF, 0xD0D48639, 0x2CEC0A12, 0x218338EB,
+0x0BDD176F, 0x3C891030, 0xC5431FC9, 0x651A7B62, 0x60E8E5AB, 0x9F45983F, 0x33D9BACA, 0x6CB63448,
+0x86D85E5E, 0xC28E7397, 0xB954FCB3, 0x0385E1EA, 0xB7E3FC29, 0x52054F36, 0x873E9C0B, 0xFF61EECC,
+0x326A3E06, 0x35C6871E, 0x43EEA7BA, 0xCB97494B, 0x03358D9E, 0x32C1CEB6, 0xC9BF6F51, 0xD5C311F2,
+0x889FC519, 0xD573BE09, 0xDFF9585D, 0x7AE23F2F, 0xBF90825D, 0x64E32A3B, 0x8972EC9B, 0x006FE3D8,
+0x05C46F2A, 0xF37FF7B2, 0xCAC80273, 0xD79F2784, 0x2476D000, 0xD8A7752F, 0xF6A679E7, 0x3CB4C80F,
+0x7A3C01D7, 0x4EA105A4, 0x32029165, 0x39F63AE1, 0xF81147CA, 0x43230048, 0xA53080A1, 0x3EC01BA3,
+0x44A10A6C, 0xF79F603A, 0xBEAB2F4F, 0xEDDCFE14, 0xE1C51172, 0x30DFF361, 0xA46E90F7, 0x73AF0A0A,
+0x0903E05B, 0x96B0B552, 0x79E024E9, 0x88A7DBD4, 0x00AB633A, 0x72CA0DDC, 0xD0BF266D, 0x7BBF62B3,
+0x175377EF, 0x7B70283D, 0x85E78587, 0x5EFF9A7C, 0x2AAC9724, 0x512E8998, 0x53D106E5, 0x60AA3620,
+0xF881155E, 0x8A83A58C, 0x9E248734, 0x12473BC1, 0xCD8E485F, 0x7F3EF67A, 0xDEB71265, 0xF68FBB5F,
+0x87A7DFEB, 0x46F2BFA5, 0xEE2A213B, 0xB3B6F3F8, 0x724DA9AA, 0xBC19314F, 0x35EEEAB6, 0x38C6811B,
+0x6113E099, 0x9C11E04F, 0x3016D827, 0x7FA8E2DB, 0x4DB0302D, 0x2B9DFB6C, 0x2FA14FEE, 0x3F2D1E1F,
+0x7000B0ED, 0xBC6B4B1F, 0xAB02C6BD, 0x189B6F6F, 0x1AC167F8, 0x4BCAC0F0, 0x84BDB593, 0x34F20634,
+0x6C4063FC, 0x5B69D619, 0x5E329343, 0x9A1C6D66, 0x1985ADBE, 0x734B262B, 0x978CB2B5, 0x59AE9AD4,
+0x8F4BD91C, 0x1735A843, 0x98A1B996, 0x9AC8576E, 0xC36E239C, 0x10354985, 0xDD3D6D2C, 0x69994D30,
+0xA7F7593C, 0xFA540656, 0x978A8CFA, 0xF9015E9D, 0x7CB50E22, 0x40329D6D, 0x73092A94, 0xD5D886D2,
+0x00ACE8BD, 0xD223AEE4, 0xB614B52C, 0x39B1701B, 0xC2D65C39, 0x84CBB065, 0x5B05C8DC, 0x36FE57DA,
+0x4754B784, 0x0BF154F4, 0xDB3390ED, 0x22FCC82C, 0x415A4479, 0x3E3A4600, 0xB2D49E95, 0x19199A55,
+0xF8E56AFD, 0xCA195645, 0x9238E80A, 0x6F64E1CE, 0x9AB851E2, 0x990E8106, 0xF6120060, 0x3EC5E06A,
+0xD5764449, 0xB1832144, 0x89C3231D, 0x1C14E6AE, 0x67D952F1, 0xAEEFD026, 0xFDF020EA, 0x5453F648,
+0x5A8513F2, 0xDEAA9199, 0x84869341, 0xFB41A696, 0x76EFFA54, 0xED6627D9, 0x0AE8D001, 0x04D5DC05,
+0xD0299147, 0xF1E7D634, 0x6AAF9021, 0x27A79A46, 0x7849C572, 0x03EC69BB, 0x19EBF068, 0x37787183,
+0x3339450A, 0xA7C84CB8, 0x848959EF, 0x072E4637, 0x29833214, 0x02A5AFD0, 0x7562EE8F, 0xDAF15F9F,
+0x01C38819, 0x2541A47C, 0x1D9D1582, 0xB434F16A, 0x8EDA91FD, 0x9D8ACC85, 0x12117953, 0xC4BD73BF,
+0x66E22182, 0x4ECC4305, 0x597AF136, 0xB8D50A41, 0x4498AAE6, 0x2A1003CC, 0x5B17A853, 0x9676898B,
+0xD5E320DD, 0xF6072ECF, 0x7865DBA0, 0xD01C61ED, 0xD09029E5, 0xA65B6B55, 0x67B1FE47, 0xF60CE961,
+0xC64F12FB, 0x0E0869A0, 0xC9AC33F9, 0xA9FC3751, 0x70499745, 0xC3DB37F3, 0x321FE32D, 0xE90317D6,
+0x560A8159, 0xD855F789, 0x8DF8907F, 0x47DA9450, 0x4447B407, 0x0E5661FC, 0xD56A1A98, 0xDD6A1376,
+0xB431B72C, 0xF1A7FD41, 0xE827CABF, 0x858090C1, 0xEEEFE633, 0x1342DFD1, 0xA9D86010, 0x2A676096,
+0xE8CB23E4, 0xDA9D607E, 0x877CFD78, 0xBB60C7BE, 0x2EF63637, 0x8E8F5664, 0xF2568EF6, 0xCF72BE29,
+0x44B4D7DB, 0x45C944EB, 0xF58A3303, 0x132892E1, 0x534F4471, 0xEF2BDDAB, 0xD3E213FD, 0xB8CFEC86,
+0x449E6CDD, 0x8709837D, 0xF15DEB2F, 0xCDA1688E, 0xE6365419, 0x7AAFC431, 0x61AB843F, 0x6BB98522,
+0xF51337BA, 0x7994DE1F, 0x9127E5BA, 0x66BA5218, 0xDA748A6E, 0xFABCBB41, 0xEC5A6C26, 0xA130B02E,
+0xF593176F, 0x092F137D, 0xE180C586, 0x88F302CB, 0xD547CA5E, 0xAA2405EA, 0x4748D00F, 0xD9F1BB55,
+0x9CB165DC, 0x8EFFFF49, 0x09C50DAF, 0x424D2362, 0x9FCE3586, 0x8B77E5A2, 0x6748A122, 0x936A9323,
+0xDCAAC792, 0xD55D7F4A, 0xE2B7DEF9, 0xD4DAB540, 0x1FBF280D, 0x3097239A, 0xB8161ECB, 0xA99CB83D,
+0xEC736F56, 0x98482FA8, 0x6F59722D, 0x28CD3D73, 0xA60D7B9B, 0xF75792A4, 0x23090991, 0x3FFBD218,
+0xF2613771, 0xD96106C3, 0x6C006966, 0x3B3E773D, 0x5AD50907, 0x1C23119E, 0x262BC867, 0x4B9725C4,
+0x6563BE30, 0x0BCFA5C9, 0x699E742E, 0xB1A2D413, 0xC54A75CA, 0x425A6960, 0xB3E9B9CA, 0x56BE16C7,
+0x509D0EFA, 0x711BACAF, 0x1FA533C6, 0xDEB3E840, 0x96BBCAF9, 0xDA1B91FD, 0x737824A5, 0x245EA66E,
+0x0A3AC030, 0x01B0567C, 0x2EB29709, 0xCD80BE54, 0x1594BC69, 0xFE5A259E, 0xF7B80C9A, 0xE19DEE42,
+0x6618912C, 0xF785BFF0, 0x1568100D, 0x3955FCF6, 0xAC20E9B7, 0x93E6051A, 0x47B2B4D3, 0x2E167443,
+0xAE2D9E53, 0x5CAF111A, 0xE75380AC, 0xD57874AC, 0xD8CD3A4E, 0xE63CA533, 0xBB63C2FB, 0x80894BC6,
+0xC29A79AE, 0x5027A02F, 0x6C8A9F7F, 0xA59756F0, 0x5B123878, 0xC9DEDA6D, 0x77E1BDC0, 0x46D1449B,
+0x0A15ADDD, 0xAD9409F4, 0xCFD7BD38, 0xE97BB9A6, 0x6AED2A6F, 0xF8F8BDE1, 0x71A796D1, 0xDBDB169D,
+0x32CF0AFF, 0x3C606182, 0x2736E085, 0x1970C282, 0x46B58A9E, 0x79B61D4A, 0x74905075, 0x0C87BBBB,
+0x5E4E8C8B, 0xAA8E22C2, 0xAB4C450A, 0x0008CCFA, 0xAD62BA5F, 0x5A18143A, 0xDFF5BCDA, 0x22F82703,
+0xF5097260, 0x530C4C05, 0x7025F44B, 0x49CA1071, 0xA4CC6E3E, 0xD58275D4, 0xA9154295, 0x25675EFB,
+0xFF684E8D, 0x47725301, 0x3A1547D6, 0x3E46C884, 0x9F119E3A, 0x6BB83C78, 0xD6FB8970, 0xBD5925C9,
+0x1D58DC0C, 0xFAC6E06C, 0x80D91C92, 0x11356574, 0x8C99CCB8, 0x83773943, 0x427441F7, 0xCAA489C6,
+0xA5C39422, 0x10FD56B3, 0xC1A8E13E, 0x6229C0D9, 0x4723EF29, 0x79393AA7, 0xC8BB915B, 0xB6C6B49F,
+0x22F82630, 0x160E9F7F, 0x47A3C803, 0xE4882D8C, 0xA3AB2B1A, 0xE037857A, 0xC382EF6A, 0x412CD54B,
+0x41C458FC, 0xC4727B80, 0x5F1C3CE7, 0xAAEAD12B, 0x708944D3, 0x8E382DD9, 0x8A34E39D, 0x6E8A18B1,
+0x00F11D4C, 0x2F3988BD, 0x48425CC4, 0xECC81390, 0x0E4CAF45, 0x5A55FBC1, 0x830B4563, 0x5220A656,
+0x9941DE92, 0x7E91FDEC, 0x0F5069FA, 0x793D3275, 0xF6F3E65F, 0xBB0685F9, 0xA32FD9CB, 0x54DDB520,
+0x5A40783E, 0x3F8B810D, 0x2312716D, 0x3B99C1B8, 0x43A9B70D, 0x374A41B6, 0x8F3E6E55, 0x9201BAC4,
+0x827E8D38, 0x6F10265B, 0x3BB2140D, 0x4994CFE5, 0x42E99637, 0x2A815ADB, 0xA891980C, 0xD81EE1BC,
+0x579EB4BF, 0x5F790C8C, 0x1C72777B, 0x9AC4AFBE, 0xB1888D24, 0xA0EE1141, 0x7C5B03C6, 0x3262BDC9,
+0x715B019D, 0x9BDD420E, 0x829C837E, 0xFE004623, 0xBA32A3E7, 0x95E6CA65, 0x0BFD959A, 0xB36AFEF5,
+0x5E1E0D60, 0x3D72EFC2, 0xC0884171, 0x1D323552, 0x671A8D28, 0x996EA039, 0xF0D36479, 0xAE697A68,
+0x374DF2DC, 0xBBE2D052, 0xA8C1E2E7, 0xD554975E, 0xADD912CA, 0x7B4184FB, 0xB0571035, 0xD5062473,
+0xBA731F9B, 0x4F6840AE, 0x72E58EA8, 0xAAE7C93B, 0x73B7D4B8, 0xF21E7740, 0xAE5899D2, 0x1FDBC933,
+0x03D770F5, 0x0E5D8C5D, 0x608201C9, 0xA789AC0F, 0x3FBF5156, 0xFE8E9773, 0xC8DB8478, 0x78F6979B,
+0xB9318291, 0x46F92879, 0xA48CDF60, 0xEA93954B, 0x4B0830A0, 0xA2B8E5DC, 0x9FEB7A64, 0x4A605414,
+0xE6537FEB, 0xF2AF57CC, 0x2CFA60AB, 0xC3AC37D2, 0x947C555A, 0x2577864B, 0x994BB97D, 0x7F4B586D,
+0x828F6C9B, 0x83024746, 0x2E233069, 0x666EE7E8, 0xC8103A7B, 0xFD3B0D7A, 0x7EE8830D, 0xA469D2FE,
+0x5D7E1AAE, 0xE41F61EF, 0x871D68DE, 0xB9C67CDD, 0x869B5F5F, 0xB33CD68D, 0x4B60EDA9, 0xAD80518D,
+0xB3158411, 0x9DD39A3C, 0x5A936D57, 0x318989B4, 0xC916BCC6, 0x9217B199, 0x0ED06DEF, 0x497EB6B5,
+0x03EF9E42, 0x4EA9446B, 0x2BCA9B02, 0x93C52283, 0xF897384A, 0x1EA3DCDB, 0x0B416E4E, 0xE36959AD,
+0xC5830660, 0x64DBBEF8, 0xF5BB114C, 0x780A591B, 0x7D732E23, 0xDFB989CE, 0x16C94402, 0x876F6B87,
+0x5058A414, 0x346FF0C6, 0x05B9B0EA, 0xFEE50A07, 0x6BA6292E, 0x7034444F, 0x7E7DA797, 0xF04E12FD,
+0x5192CA94, 0xF6B5C008, 0x4F37FEAC, 0x3073B0DC, 0xC567E987, 0x5B280E71, 0x78FAA6C1, 0xB860A3D3,
+0x12549672, 0x613068F9, 0x6E1897C9, 0x0B829187, 0xC1805597, 0xD2BB5B4F, 0x3FF35DA8, 0xE7BFD141,
+0xA8023E48, 0x720E53D1, 0xE3A086BB, 0x9256E92F, 0xDD4D1DCF, 0x4CB58E57, 0x5D021ABD, 0xF96ABE06,
+0x6EF73591, 0xD0E65634, 0x3ED3A2FB, 0x37EB721B, 0xAC9F0EF2, 0x251D6C58, 0x46419DDD, 0x9BB25141,
+0xE4B96BAA, 0x8E9E0F61, 0xEEC9BAF3, 0x4185E0DC, 0xCECF5A0B, 0xD2A19F3A, 0xDD42158D, 0x394F06FD,
+0xF032C197, 0x56A5B802, 0xDFF58F81, 0x937AF962, 0x3A46008A, 0xE7366D47, 0xF8358616, 0xC078A837,
+0x3121C679, 0xC799A4CE, 0xEAC9E5B1, 0x8B212081, 0x79F8C981, 0xBA5BDF98, 0x1D1D10F0, 0x72D4544C,
+0xE23C1A0C, 0x433B92F4, 0x07B6EB30, 0x636F8301, 0x37A93752, 0xFB69BCF2, 0x82336B53, 0xD036EE94,
+0x8765094B, 0xA5D04083, 0xD36ADA1D, 0x685986D4, 0xDC938C49, 0x7E9A6ED7, 0xFAA5997E, 0xD6FACBEC,
+0xFEC6D38C, 0x167BFA8D, 0x42042EB0, 0x21A1BDAE, 0xD4478552, 0xA4FEB1A6, 0x9F6C427F, 0xD870B3A1,
+0xB4B3DF28, 0x464C98BD, 0x5527FA32, 0x2BE9C252, 0x0FD75DAC, 0x30E6F346, 0x334505FB, 0x1FAB7108,
+0x5A3B3376, 0xBD79356A, 0x13B07454, 0x84F36E30, 0x95E290AA, 0xE9464978, 0xFC5D699C, 0x20D182FD,
+0xBF2EB125, 0xB419E0ED, 0x4705F149, 0x9EFAE500, 0x5B3D167F, 0x6ED27824, 0x36403042, 0xA75A5E01,
+0x164CBBAB, 0xA6112173, 0xEAEE9FBB, 0xCA374E07, 0xFA98CE54, 0xE01A0277, 0x95F1B55A, 0x6645E022,
+0xDB713217, 0xBF540D46, 0x5B6F4670, 0xBD98B5D0, 0x028B3B45, 0x90969F97, 0x762263FF, 0xB67775A0,
+0x4D5CEEBC, 0x0AB2D43B, 0x7103F547, 0x30DB1BF2, 0xC0612D3F, 0xCDAB3293, 0x9091F589, 0xA9A050C8,
+0x4732838A, 0x0F395305, 0xFE1BD1E6, 0x2297ABCA, 0x47347FAC, 0x46B53AFE, 0xA770AB88, 0x6E1E9FBC,
+0x2BA0CB38, 0x9CFAF0AD, 0x55D51230, 0xB2936266, 0xF71C44FD, 0xAFDE4A72, 0xB5392784, 0xB7BCCB2B,
+0x754BAEED, 0x8A825FA3, 0x6847501A, 0x19C26A27, 0x2843DCF1, 0x865C8067, 0xDE19E8F3, 0x2AC8CC2E,
+0xFF4904EA, 0x45FF9404, 0xC2E12847, 0x5AA3EEC8, 0x2BC0420E, 0xE2A5DDA7, 0x2C354810, 0xB3547B50,
+0x0F27CF64, 0x8BFCA797, 0x7ECF3E67, 0x72C61626, 0x3C141591, 0x1FECA24C, 0x773ED62E, 0x69499216,
+0xEF20FA69, 0xC41A9A8C, 0x51C81EE9, 0xB1A4E905, 0x9A1B159A, 0x2FDDAAFE, 0xF31DDD13, 0x827AACB3,
+0x976636D9, 0xC9171196, 0x4D8C228E, 0xB54527EF, 0x358AA1B7, 0x8810C401, 0x87895A3C, 0xB47EC300,
+0xC05100F8, 0xD4597922, 0xC64C98E9, 0xD9ED3FF6, 0x72F4A767, 0x4DBE707E, 0x2CC17755, 0x0685C40A,
+0xAA0CC571, 0x5C1FB0BB, 0xE6912B10, 0x9AA80780, 0x26ADDAAB, 0x59F21B0A, 0x090FE93E, 0x7FC485C7,
+0xC9886028, 0x6763EF23, 0x04AB56B0, 0x44239D93, 0x486C7B2C, 0x0A9C73B9, 0x4D78A764, 0x1C51C33B,
+0x193E3F2A, 0xD8A13960, 0x555DFA30, 0x7E0EFBC8, 0x960942ED, 0xE00756AE, 0x6444DA83, 0x2625C7B3,
+0xB779E79B, 0xEB088AA7, 0x7183184A, 0x5C14377D, 0xDEE30417, 0x4ECBD0C2, 0x85BE804E, 0x8F9EF7B0,
+0x6D09B953, 0x0433510E, 0x86589451, 0x6725592E, 0xE3C9F88B, 0xFB75A6CE, 0xC30084A9, 0x0704B518,
+0xB071ED43, 0x2AC44BC4, 0x7EFDCB6F, 0xCF627B06, 0x304CC702, 0x4498EDD6, 0x61E90C37, 0x27A67DB3,
+0x044509A6, 0xCB79DB0B, 0x3983FD2C, 0x5A1D7D8A, 0x4387CE04, 0xC2684450, 0xC15F4356, 0x88F44F02,
+0xD44A09DC, 0x2533FBCA, 0x33B0B17C, 0x6D5472FF, 0xA0072358, 0xA007A061, 0xACBAA627, 0x096A1A35,
+0x9CDCA9AA, 0xBEF025EB, 0x08C7D839, 0x98A117D9, 0xF7777474, 0x4C9AE47E, 0x69F3E323, 0x114A2B25,
+0x1EC68CF4, 0x369D9674, 0xDA226457, 0xCD3C1171, 0xEB67E55F, 0x1E6AF7FC, 0x20D6D85F, 0xC6F81415,
+0xF620AFAA, 0xF00D2B66, 0x2210F6E6, 0x671297E4, 0x63B75846, 0xBC00A992, 0xDE47ED85, 0x8EBFA92F,
+0xDCFE3F6E, 0xE80900EC, 0x68A09953, 0xC8830FD2, 0x7EEA0D19, 0x67A57976, 0xFEF296BD, 0xD8552878,
+0x36F567CF, 0xCD49B260, 0x792E89F4, 0x7D18B0EA, 0xAD583D6E, 0xEB0E93D8, 0x30D2F8AE, 0xA0CE2D13,
+0x33DE013E, 0x0B16E189, 0x09D1EDA4, 0xF312C7EA, 0x092DD044, 0xB07FC8EC, 0xE757DFB6, 0x1ADA01A5,
+0x47C37E22, 0x3EBAB823, 0x37089A4B, 0xDBDCBED0, 0x53345B00, 0xAB3825BD, 0x984C6D21, 0xCE5B9306,
+0x178C8D03, 0x712CC435, 0x2328CACE, 0xF81D3D29, 0x7D7B5CCC, 0xBCA8238E, 0x680D898D, 0xFBA30DE8,
+0x2D02CD06, 0xEF3C88C7, 0xFF235FB8, 0xAE38E9A7, 0xBC62BFC8, 0x7FF16E59, 0x2221E3C1, 0x772DB294,
+0x8FDF9126, 0x20A758B7, 0x37B4C8CA, 0x68417893, 0x4AEE9F93, 0xBBB42F0F, 0xBD1A23F3, 0x8DB5B4E7,
+0xA1D27012, 0x52EF7C85, 0xB43E13E4, 0x82F257E8, 0xC5F954A0, 0x3A359ED1, 0x89F928A4, 0x8045E708,
+0xA54A9780, 0x95A48372, 0x9F7C0FB6, 0xBD26A8E2, 0x18034988, 0x3EFC34D0, 0x365A1CE7, 0x68CDD487,
+0x925D24B0, 0x711F2A9E, 0x555B6B22, 0xD1ECEEBB, 0x189D1304, 0x8FF63612, 0x61D0C2AE, 0xCFD880E7,
+0xCBCC7B91, 0xC7906DA2, 0x786F58D8, 0x3C5F0613, 0xEAB28D8A, 0x333EE3B3, 0x824AA6D3, 0x37216DA9,
+0x90450566, 0xEB7415ED, 0x67B944CA, 0x536D9E34, 0xB2FF0AF0, 0x4225D8B7, 0xA640802B, 0xA451BE99,
+0xE2BC3DFC, 0x6E2B90DA, 0x6D91FE73, 0x98D523DF, 0x7094A0FC, 0x6FBF4CDE, 0x75CD09EB, 0x274CD0A3,
+0x67A42206, 0x05959B93, 0xFFE773DC, 0xCD22920D, 0x7F200DBD, 0x2A51F2FE, 0x29ECA1CF, 0x7933890C,
+0x386C6112, 0x43416ED9, 0x9A9F714A, 0x403DAA7B, 0x78D13BC1, 0xF639E404, 0x66ADAEA6, 0xD2CB7399,
+0x07E2FECD, 0xE3E66A4D, 0xA9BA0B94, 0xEE1FF833, 0x0EB87F00, 0x0EE6CB93, 0x503FA9AC, 0xFB55257E,
+0xAC9F7BA2, 0x35A8D278, 0xC08F4601, 0xF7140A7F, 0x6C25324C, 0xED34D2CE, 0x52FA7846, 0xD42B0A6F,
+0x50CB24A3, 0xAEFB9DED, 0x27C5FC74, 0x7CAA05DC, 0xC1444FAB, 0x0262B994, 0x1F5AC2B1, 0x43AE78A0,
+0x8B9834F1, 0x66F914B6, 0x12B329FC, 0xA45418F7, 0xD34F9921, 0xE993C34E, 0x836780BD, 0x253D4D88,
+0x62DEF1FA, 0xC6F068CF, 0x37B7685C, 0x344BF579, 0xF7543EB4, 0x038BCC06, 0xE644F5C1, 0x04E0D35C,
+0x587780AB, 0x59610AD2, 0x8143BBFB, 0xF9253FBF, 0x9237A412, 0x728FEF2E, 0x9285293F, 0xE2F77C4B,
+0xCFD56D74, 0x59F628FD, 0x8C288849, 0xDF6B392D, 0x999E28FC, 0xB0E4E351, 0x86285050, 0xA43CC297,
+0x2DC95193, 0x4502FDA0, 0xF8F8E3C5, 0x3D1084E3, 0x113F727D, 0x599334E1, 0xDC0C9185, 0x9E4BAAC1,
+0x12776BC7, 0x86040AD9, 0x6DCCBADD, 0x6B78ADF4, 0x083A501A, 0x5513514F, 0xD0E81500, 0x62BD750E,
+0xAD598E5C, 0x1A6C181D, 0x2B11BD1A, 0x9A1CE66C, 0xDB0224D8, 0x6DB0D59C, 0x5B1D2BA8, 0x5B97E962,
+0x1442A9AE, 0xB25152F4, 0x7BCB0DFA, 0x9E7A819C, 0xE64FB7EC, 0x2D595361, 0xF03086B2, 0xF21D5609,
+0x3242BC9C, 0x2A2F214B, 0x583D8684, 0xD60D331D, 0x6E48AAE4, 0x3D8BDCD2, 0xEEDD3A18, 0x1740EC46,
+0xE163D2B6, 0xECC2659C, 0x8C420A45, 0x6ABEC74E, 0xBE396A47, 0x65F43387, 0x37D0F6E9, 0x5A939080,
+0xF0F03E63, 0xD86B0490, 0xAD8724C0, 0xACABA55E, 0x64DFEA7D, 0x6BB09207, 0xA8453F08, 0x7C3BB61C,
+0xBE91DE3A, 0x72BA5E8D, 0xAB4EB4BD, 0x8A4ED6A5, 0xE9D5F645, 0xB1B55C23, 0x942EC4C0, 0xEDDDF6BF,
+0xEDD813E1, 0xB380E62E, 0xAD000615, 0x566AAD43, 0xEEC2EC36, 0xD2E16D62, 0x048C30CB, 0x87736D9E,
+0x17B84C63, 0xE92A2C70, 0x4E97625E, 0x1E69C343, 0x53D4555F, 0xE024F026, 0x0A2087CC, 0x31776B72,
+0x3996C666, 0xD11FD9E2, 0x8EDEEC93, 0xF9C65DBF, 0xE1F1080B, 0x8674BEBB, 0x82A7691B, 0x738A6068,
+0x2A4FF45D, 0xF05918ED, 0x8A8320F1, 0x47383DD4, 0x5BA9F6B3, 0xDEC56C4D, 0x6AD12E81, 0x2E9FF078,
+0x85A79507, 0x7EF062CF, 0x545EA9A8, 0x838D378F, 0x1DBA6078, 0x34FCED33, 0x695B435E, 0x7700ECA4,
+0xE095194D, 0x00C26F89, 0x1DC8BB75, 0xB027C575, 0xBA4F3994, 0x5BF02AFF, 0x1C33B925, 0xBE6B00F6,
+0x2AD1B19C, 0xE0D61FF2, 0x0CDCE55E, 0x843AF970, 0x11093D88, 0xF0076C30, 0x75A05DEC, 0xC659A34D,
+0x57718705, 0xB6006A36, 0x56B8B677, 0x8C9C061F, 0x0150543E, 0x196FC7AC, 0x386DD5BE, 0x0CF47365,
+0x97E7C756, 0x49B1AFD6, 0xB19526D1, 0x8E314EB8, 0x710433BD, 0xB8140597, 0x1F8CE466, 0xFBE6FB6C,
+0x2649F7F6, 0x7A552EDF, 0x53EE6160, 0x99DEAA60, 0x264798E8, 0x4F306F02, 0xF2A1D772, 0x8A59019C,
+0x07ABE819, 0x9DEB907D, 0xCB945796, 0x4BB74AF1, 0x0C552F16, 0x4EC51632, 0xDB8D3871, 0x0D80C0B7,
+0x40EF8967, 0x8CA21EEE, 0x9B88CB33, 0x9E7B6ABC, 0xE9BDF20D, 0xD2757446, 0x4B390984, 0x2A6F1D49,
+0xEB3F0D93, 0xFFECDEB1, 0xB593AEF2, 0xA82B97C5, 0x7FB1CE40, 0x94942574, 0xD5B41F1D, 0x9DAA758D,
+0x91972960, 0xFA795014, 0xAE24264D, 0x116D38A2, 0x4A90FAE6, 0x65948392, 0xD9A15FB9, 0x8C987CA5,
+0x1B64434E, 0xEDE081F7, 0xB9586D7C, 0xD14366F8, 0x249C38CC, 0xE76BCC52, 0xDFB8D0DD, 0xFBDEBF70,
+0xEE27CD1B, 0x8A0D0F8C, 0xCBFA5E45, 0x841C2491, 0xCE7918FC, 0xDA1F3368, 0xA5822A71, 0xDC630DB1,
+0xB07CB392, 0x462130BF, 0xCAFA1890, 0x635BF5F7, 0xD1D67A71, 0x324A1ACA, 0xB5D802B7, 0xBCDBDCBD,
+0x1D08E638, 0x45A44C23, 0xA56B29E3, 0x894E23F5, 0x84D319B7, 0xDFBFD556, 0x8BB8F200, 0x348AFE3C,
+0xECC51A28, 0xBEF73AF0, 0xF21BE5D4, 0x64931578, 0xDA218701, 0xF20F0D5E, 0x03B0F024, 0xE63DFA91,
+0x61CA617B, 0x6318C85E, 0x71BC8CCD, 0x681AD1BF, 0x02F1A58A, 0x01E85E37, 0x7D4FCD78, 0xE8161FAB,
+0x5F66ED55, 0xF3597A19, 0xE350B1DF, 0xA6A728EC, 0x225B547E, 0x64F7980A, 0x16EBA6D5, 0x5F13ED11,
+0x3438A8F1, 0x906BCE68, 0xF5842F2A, 0xDD5F72A9, 0xAA093A35, 0x30774324, 0x74FD9282, 0x07606EF3,
+0x54CD7273, 0x567CD13A, 0x5B0909DC, 0x03149BF2, 0x152474A2, 0x93F86425, 0x5246CDAA, 0xFA585836,
+0x50AD3C7C, 0xDC9CD6A8, 0xC985309F, 0x4A51D448, 0x19C943B0, 0xC0C1CC52, 0xB2CBE81C, 0xF9C09730,
+0xEBE64749, 0xA3C9BE5C, 0x9C9B601F, 0xD14DA0A1, 0xA0E9816D, 0x6CC67A0B, 0x853A57D6, 0xD32A6851,
+0xE2B5BECD, 0xE26728FB, 0x5F8913FF, 0xDECAF8CF, 0x8F1035B0, 0xA1166690, 0x516B4C34, 0x630EF3C6,
+0x407E646A, 0xF2EABB03, 0x7EF93A7B, 0x99F997B4, 0x615A8FF0, 0x077F453A, 0x90EEC700, 0x0131839A,
+0x2FD86383, 0x98092AA8, 0x5F59D796, 0x83C3FD4C, 0x75E7A68F, 0x585C80B7, 0x02FA5BBE, 0xE6F36613,
+0x8FF550E6, 0x940E3F53, 0x24B081DD, 0x8F1FBADE, 0x42D49195, 0xED226FE3, 0xC93AD2F3, 0xA6CA12A8,
+0x482BEE5E, 0x943AFB68, 0x352C5C3E, 0x7053EF76, 0x633C49C8, 0x0462F0EB, 0x9629428A, 0x7461B020,
+0xE3247B08, 0x2582B67A, 0x1BDC919F, 0xE41BCCBD, 0x89F7A3CA, 0xE3093735, 0xC2CCDB19, 0xAD7CC13F,
+0x6A7C8F69, 0xB5259883, 0xDE447EC9, 0xE07DAA22, 0xFD8518B9, 0x02ABC2F3, 0xCE33AFF3, 0xC1C43C26,
+0x442541A0, 0xE26CAA7B, 0x59E1B080, 0xDAF43718, 0xDFC60757, 0xFCFA1709, 0x4F1C0962, 0x8B517E09,
+0xC1BC4458, 0x84D24B44, 0x64B473D2, 0x0070DC3F, 0xA9B65665, 0xE0D2CCF9, 0x83D23629, 0x95268ACD,
+0xDBCD5D92, 0x1078B701, 0xD15CE57C, 0x756A96D6, 0x6C6D13BA, 0x7834A87C, 0x5B255238, 0xD39A3F84,
+0x47D2CECB, 0x8670E868, 0xFC2E8176, 0x33F20419, 0xC48544B2, 0x3A25898D, 0x10D1042E, 0x3528F73C,
+0x1EEB7008, 0xD76163F6, 0x9ABEDEDD, 0x117837F9, 0x0B22D2D7, 0x9264CAC8, 0x974D0AC0, 0x14CA2672,
+0xCB5B4F8B, 0xFE01B9C5, 0x44B08D88, 0x9C230C8E, 0xF4FAB2D7, 0xA6556792, 0xC9975265, 0xCF2E6FF5,
+0xE9D0FC77, 0x3EE1843F, 0x5DB82B7F, 0x67C7D561, 0xBF169373, 0x6614765A, 0x6CFD928B, 0x9E69C01F,
+0x03D5B3E8, 0x25162AF3, 0x66A670AA, 0xCE8DDC8E, 0x3CF8800F, 0xD48CD2AC, 0xE05D77F6, 0xA9AD51A2,
+0xA2763361, 0xBEC2A22A, 0x88E5B605, 0x16B7DB32, 0xD9701E3F, 0xB13618A8, 0x7F2E9F76, 0xAF24435C,
+0x9377BF0B, 0x473D9BBA, 0xB870A7C7, 0x3FB3E107, 0x878BD0DA, 0x32DD1D08, 0x48E0BC83, 0xA915A2CC,
+0x6D806E9F, 0x8061960B, 0xD5D47D67, 0xCDA76139, 0xD3968190, 0x84C5CA68, 0x9B62B2FE, 0x1BCC335C,
+0xC53FD613, 0x610C42A2, 0x5CAD10AA, 0xF91875B5, 0xE1581DE5, 0x4BE3C9D6, 0x704CC8FA, 0x7011E928,
+0xF2B8D332, 0x4D9FC8CB, 0xF984AA6B, 0xCD4218B9, 0x48E9E4E1, 0x5ABC2C6B, 0xA07FB999, 0x73A049DD,
+0x69137C0A, 0xBFA09B18, 0x6B0499BE, 0x5A4E7074, 0x9CDE5819, 0x79F4FF10, 0xBFE830E9, 0x9CA657CC,
+0xD4EB9BE5, 0x672331DA, 0x2D9A7B65, 0x7B57A4A7, 0x8E5DA28D, 0x84D5E876, 0xF08E7A00, 0x02E35B6C,
+0xDD177514, 0xB06DD2C9, 0xADF0793B, 0xC3CE41E1, 0x8916C3A1, 0x58385D16, 0x6D68C7DC, 0x1A5D3608,
+0x57CFA292, 0xFB9C489E, 0x335DCC50, 0x61E5F71C, 0xFEBF39DE, 0x884DAEDB, 0xEC4FD57B, 0x0AD9FCEE,
+0x48AB892D, 0xC8D5BA2A, 0x60AA326F, 0x8CD50044, 0x16D85EDC, 0xD0193631, 0xCF548AD6, 0x22C1E0BB,
+0xC33C4267, 0xF8203163, 0xB1A9D5B3, 0xB6FC5FCC, 0x7E1EFACC, 0xBB29CA10, 0x0B330320, 0x2E24BBFD,
+0xA54008F3, 0xD52A1EAF, 0xF630B8B5, 0xB5909883, 0x6D2CA03A, 0x2EBE0D07, 0xAF1CADD1, 0xA0789920,
+0xCAEEA5AB, 0x3F4D221A, 0x4BF969BA, 0xCEE889A2, 0xF646EE86, 0xE663E88E, 0xA6986428, 0x8D908870,
+0x34F05503, 0x0D7DF200, 0xAD2DCBFE, 0xDA73B161, 0x475888E9, 0x26611969, 0xCB298086, 0x9EC32B17,
+0x74A3E100, 0x55EAF1AE, 0xB16FCA97, 0x2DB23F0D, 0x988DE949, 0x432FA15C, 0x9E3EA0DC, 0x6D444EA3,
+0x82D0F898, 0xE59F3BF9, 0xE574694C, 0xF8C411D5, 0x8C96F27E, 0x15CD962F, 0x8683412D, 0x267F9838,
+0x6F814561, 0x014600D0, 0x01D3A8FC, 0x86F71A84, 0xCCE1031A, 0x7B1E99F5, 0x9F8D0196, 0xA8775197,
+0x61A5FB5F, 0xDFB82065, 0xBF9937F1, 0xE6015406, 0xA5EC2A95, 0x0470C4B7, 0xC8C9BC90, 0xE0E67D82,
+0xB3A95358, 0x339B108F, 0x444427F7, 0x679127EF, 0xBC49B6D7, 0x1CED2592, 0xBEEC2A73, 0xE505FA0D,
+0x29EDB02F, 0xDEB12CFB, 0xE38C52A7, 0x7DDE902F, 0xCE1F29C9, 0x9052D03C, 0xBD7376AF, 0x90C7CD10,
+0x0DF0B996, 0xABBFBD0F, 0x80676540, 0x83004B54, 0x544C7E7A, 0xCF9A1537, 0x71AF3EEF, 0xDE516C9D,
+0x3AF7F507, 0x54C0E2CF, 0x1B5F1263, 0x8F0D8ED6, 0xF42BE504, 0x28531A1E, 0x4377EDED, 0x5223BFA1,
+0xD29470C5, 0xA7130F7F, 0x01F6BA7E, 0xE44806D4, 0x8476C85E, 0x3A55E362, 0x48EC78BD, 0x2D40DFFD,
+0x0B9C3613, 0x8EDA7141, 0x8EEDE441, 0xD5C43007, 0xDF3DCA4D, 0x2F3C9A09, 0xE932D6DB, 0xA971060A,
+0x53CE3E4A, 0x2FF0D9E5, 0x505EDE8F, 0xE8EE22DC, 0x11E2E124, 0x55E064C8, 0x55F2436F, 0x2732014D,
+0xD8880AB4, 0xF6387898, 0x6EF54046, 0x9C0A9E23, 0x1CD89B32, 0x9FBAFE46, 0xF595DB45, 0xE33BE42E,
+0x10FFAE29, 0xDD04C1CE, 0x7244ABD7, 0xAB77A233, 0x3388BF45, 0xDB86A856, 0x6FA6FA48, 0xB13275D1,
+0xB26CD86C, 0x248E6B36, 0x462C2349, 0xDB4582FF, 0x0DBE90AC, 0x7CB23103, 0x3492C619, 0x35A900E6,
+0x5864F70E, 0x6368C2C8, 0x6FE875E0, 0x715FC6FC, 0x46288BEF, 0xFA297C73, 0x95189975, 0xE9AE5467,
+0x8E99502F, 0x335B19D2, 0x0F075297, 0x840AFB74, 0xF13B4D0B, 0x6E2B2212, 0xBDC23B08, 0x1F48AFF0,
+0xC62BA865, 0x8A8AD3AA, 0x3C93DEB6, 0x5C738B30, 0x8BD0239C, 0x0D520B0D, 0x201FB5B6, 0x3663F0A0,
+0xA1E07882, 0xE41FAFB3, 0x82C58817, 0x012BDEA7, 0x5855AD05, 0xB9BEBC5C, 0xBAE32BC4, 0x1F975FCB,
+0xD94F9185, 0x0D35FCB7, 0x44AA89FF, 0x262888A4, 0xEC678293, 0xAF965269, 0x97A1919D, 0x70C0C7A2,
+0xCC6D9D93, 0xBDF9219B, 0x73BA08D3, 0x74B6D191, 0x7D559A4D, 0x53F956BC, 0x782A90AB, 0xD21648A6,
+0x0CADEF6B, 0x458BBBC5, 0x6031BFDE, 0xF0F86459, 0x6EFF479D, 0xB3412F5F, 0xBAC451B0, 0xA6CBD0C5,
+0xAD8A1285, 0xCBEC5DE4, 0x6E76A972, 0xF8116483, 0xE40220C1, 0x93745A74, 0x557BFE3A, 0xCA34716C,
+0xE6243D5E, 0xA7C51E0D, 0x58408427, 0x35F78EF7, 0xC793463D, 0x3D6314B6, 0x1CF6BE96, 0x7849946F,
+0xAF9F0E63, 0x65DD4EA4, 0x13EEA10C, 0xC626F2E8, 0xD372BBC8, 0x32F61316, 0x3C5DF7A2, 0x18095E32,
+0x60DD640B, 0xB9712B41, 0x4203CCDB, 0xA497936C, 0x129CB630, 0xD83F5693, 0xB4F22A01, 0x32D3ED0E,
+0x0BA5B983, 0xE1044697, 0x0783346B, 0xC8F45395, 0xC3211DE4, 0xEF32F4E5, 0x1A1D176B, 0x0AD5ED21,
+0x596F4531, 0xCB17D5E1, 0x7D6C03BC, 0x481DF76E, 0x7807DE65, 0x61953DD8, 0x707E3F70, 0xD76F5E00,
+0xD98250B7, 0xEA1FB2CD, 0xF72104F7, 0x8F1C0468, 0xE5716DD0, 0x5A873483, 0xAFF9B4FC, 0xA234A8E5,
+0x9EFAA48B, 0xED1A6657, 0x11AAD1D2, 0x15F1D920, 0x7825207D, 0xC318C3E0, 0x076480A7, 0x970EBC1D,
+0x1A960072, 0xE20FE4DA, 0x66C5E2D7, 0x338F315B, 0xB7CF37F7, 0xCBCB2A1F, 0xADCA2DC3, 0x7B23ECBF,
+0xEEBC855D, 0xF65DB4C8, 0x7A6EB54E, 0xC97C6590, 0xB338A892, 0x578B412B, 0xCB19F660, 0xD5450F72,
+0x6F3619BF, 0x6EAF22E1, 0x67684512, 0x87AE2A7C, 0xF356780E, 0xE7317307, 0x3BECDCD6, 0xA6BA2D1C,
+0x1816253D, 0x81383451, 0x4AE82283, 0xC8F0E414, 0x922D254F, 0xC417D148, 0xE20D8896, 0x73B91EF9,
+0x3295ABD6, 0xCF061502, 0xE092904B, 0x60BBA7F5, 0x056B7411, 0x8C639850, 0x773C1556, 0xAE1CFF54,
+0xE0F4DF70, 0x30F4E407, 0x205CBE41, 0x27A18454, 0xB17447F2, 0x1AC1A053, 0xABDBDCD0, 0xDB9EE133,
+0x9E00D4D8, 0xA362C873, 0xA145FF07, 0xFF7D6B3C, 0x4A5A21C3, 0x11156237, 0xB7954FCE, 0xD112BC77,
+0xC6D0AFB5, 0x60760F22, 0x2AFC3703, 0xC959A856, 0x106EA485, 0xB0B9E5CA, 0xED30898C, 0x02548F32,
+0x2EB68C9B, 0xB28DC4E3, 0xDFF3A4E4, 0x4D054D2F, 0xC643157B, 0xC643DD7A, 0x2F73D0E2, 0xEE93A530,
+0xEB0F39CA, 0xEF7834E5, 0xC1D1A9A2, 0x25C318A1, 0x65374B79, 0x0D15E2AD, 0xFD9C9DCF, 0x6FC79BAC,
+0xABE9FC98, 0x63D43E42, 0xD9CF5632, 0x4678B21F, 0x46398922, 0xE2129DB5, 0xA2F2E07B, 0xAF23B525,
+0x0C0387AC, 0xE1C9DCCF, 0x74563362, 0xFD423BB2, 0x394C8DE4, 0x07F03FB8, 0xB88FC37F, 0x5C37BCC5,
+0x45460469, 0xBD167F03, 0xC8773749, 0x4C4DB59C, 0x7B89B031, 0xBAE54A05, 0xEA97299C, 0x65D7AAC8,
+0x2D5F0722, 0xEFB3DA52, 0x7C08FA1A, 0x7F93B11D, 0x3E887405, 0x4448A12E, 0x68A1F701, 0xE86DAA98,
+0x14C30C03, 0x6185565E, 0x8749EF93, 0x386E027C, 0x06D8EDE4, 0x5D7E8750, 0x9652ECE2, 0xC649C797,
+0x7889FB2F, 0x78985166, 0x67AF1F02, 0x3D683248, 0x1843021A, 0xD8DCFE89, 0x7A093C3F, 0xFCA54153,
+0xFDEA59F9, 0x6CFBF225, 0x5CEB88CC, 0x88C4CE87, 0xFAE5BC61, 0x80A5B0BB, 0x5DB34A9F, 0xE88372D5,
+0xF7B1E589, 0xFB55A144, 0x537038EF, 0xC211DFA0, 0x55C9ED24, 0x33162013, 0x545BA55B, 0x7784B040,
+0xBB7B23F3, 0x94DEA502, 0xAAA508EF, 0xCC98CBC2, 0x93B69E2F, 0x24E6FF0C, 0x5BCF4D05, 0x3548316A,
+0xC25B857B, 0x5BF57803, 0x7C00D72B, 0x772D021F, 0x2EFFEFA5, 0xCC85A7AC, 0x17D079B5, 0x74A3FA45,
+0xC522D7FC, 0xF27B1F74, 0x0654D6FA, 0x377E0456, 0x728FD297, 0x98DA6648, 0xD9FCB1B1, 0x1140E5B4,
+0xB9207DF6, 0x414066B5, 0xC605EC63, 0x4C2318C5, 0x010539B2, 0x303781C1, 0xF46048C8, 0x84951645,
+0x7B1AB72E, 0xA8D244E7, 0x298ACBD8, 0x345FBFD1, 0x62BE176F, 0x2B1BF6D5, 0x0AE9AF94, 0x6CE4BDAB,
+0x4337171B, 0x504368E1, 0xF4B8CCCB, 0x0887326B, 0x39D64F96, 0x0A5D2FB8, 0x8E92C18D, 0x2F9DA412,
+0x294D15A4, 0xF2CB91D8, 0xD4FC077D, 0x88FA1DFE, 0xD099B27B, 0xA2C6DA6B, 0xC1E8B636, 0x92B3B1F3,
+0xF0A2DCAF, 0x3520F00B, 0xDEDFDA74, 0xF8646D44, 0xC8B2FC81, 0x54C9A111, 0xB9D33B1A, 0x830D91F0,
+0x84BEB781, 0x83017E37, 0x863C7E72, 0xF293CBE6, 0x3D4544A2, 0x12615760, 0xDE760B75, 0x76F2DC20,
+0xB5C1C527, 0xC993EBA6, 0xC52ED04E, 0x955B86D2, 0x8AD37451, 0x072E023B, 0x77F8418D, 0xA6BF2DCA,
+0x6C26BCE1, 0x8BDAE22A, 0xBA63EA8E, 0xD9C63A76, 0x5C3222CE, 0x657FE0C3, 0xBD8C2EB7, 0x565A2478,
+0x82846B81, 0xBB52D0A0, 0xA9123881, 0x853BBDAF, 0xEA7F1C44, 0xF2D965DE, 0xD6D31120, 0x498DA93A,
+0x662D20E4, 0xFDEA7EBB, 0x623F6B65, 0xBAB424FB, 0xAAADA078, 0xB3E90F8A, 0x9B22BC2E, 0xA80506A9,
+0x1BF0F704, 0xF080C4A4, 0x27EE88DF, 0xCB7954AC, 0x379D92D6, 0xC9E04061, 0xC6648FDA, 0x5F60E173,
+0x52C040E0, 0xF2864793, 0xA84AA5CB, 0x957E9A7A, 0xEEC521EB, 0x2C09AC92, 0x7ED73960, 0xEE5F1B86,
+0xD467E04F, 0x367B1DF8, 0x381093F1, 0x734F81B3, 0xC31CB745, 0x53E35528, 0x119B2735, 0xD0D6F47E,
+0x279F5D2C, 0xBADCFE98, 0xD8B66865, 0xB61809AA, 0x99BF8935, 0xCF97D5B1, 0x74455008, 0xD2B9DB07,
+0x51A5C738, 0xFC686F16, 0xB81751FF, 0x6A31DA67, 0x2950E0F9, 0x0E1A3990, 0x05E77151, 0x57A1F7C2,
+0x8457C73C, 0x4697ECC5, 0x255EE7CB, 0xA8DFF4D6, 0x90F797A4, 0x28D91138, 0x6341B65B, 0x3187CCB2,
+0x654D019D, 0xC7533AF3, 0x7CA7FC80, 0xD67756DA, 0xD0EB6941, 0x932181FB, 0x18461301, 0xECE36F2E,
+0xB6D046AE, 0x8AF3922C, 0xFB4D5782, 0xB211000E, 0x22BC024F, 0x1FB8D3B9, 0x4B362DD4, 0xCCCCA92E,
+0x604D87A1, 0xC82B1A46, 0x2E1B0B82, 0xE3B470C2, 0xEA3CACC9, 0x7A5F9F6C, 0x2CAB26DD, 0x0891BD39,
+0x6215AC99, 0x9F78E233, 0xA281573F, 0x90F20661, 0x09AA8C2E, 0xA9BE7E13, 0x7FE0E016, 0x3E15B108,
+0xE019AA4D, 0xC79D86F6, 0xA56CE631, 0x83E4878A, 0xBA3A6D26, 0x6AA9FDF3, 0x0AE58CEF, 0x02072AC8,
+0xF1C59C96, 0x1A156164, 0xBF199F54, 0x4113354C, 0xA021BE32, 0xEC9AB738, 0x7A6A3CD0, 0x661DC739,
+0x528084EF, 0xDFF6D058, 0x2A0C689A, 0x9DCBDC51, 0xC4872AB8, 0xD9B76BF8, 0x26D8A9A9, 0x412F6D2C,
+0x3AB023FB, 0xDFF787AB, 0x9C91FF92, 0x02E9C39B, 0xE2E7C429, 0x31BD0833, 0x4B16FA40, 0x05C1F62B,
+0xEEB50493, 0xABF0B93E, 0xCA75FD59, 0x4F6CE034, 0x4F961BDD, 0xDA12193B, 0x52C1DB05, 0x88CC7E90,
+0x9F173AF7, 0xF569221D, 0x68D1C2E7, 0x35C5886E, 0x812B27DD, 0x44286FAB, 0xD0BA7320, 0x9292A6EA,
+0x6D66A040, 0xF92C40D2, 0xA170D276, 0xB0103AB5, 0x93638466, 0x6D237351, 0x663577A1, 0xC4515E27,
+0x4B5BCCE9, 0xEBA2B23E, 0x73B50F75, 0x1859CCC1, 0xCB2C29E9, 0xB7439A36, 0x7BB5AA92, 0x18F69F06,
+0xB28FD83D, 0x0B05E8CE, 0x84BE43E9, 0xE10A7D9E, 0x18EBFBA1, 0x137DE590, 0xEB583094, 0x6A5ECE23,
+0x108C1342, 0x5F2DDCF2, 0xA3048976, 0x936717DC, 0x505262E9, 0xA17741DC, 0x9F4BA14D, 0xC537A859,
+0x1B630153, 0xD40F5074, 0x0EF7E0B6, 0xF4524CE4, 0xD78A2893, 0xC4ED232B, 0x7D09EE1A, 0x868CBF2F,
+0xCE7D2509, 0xFE11D038, 0xE4F9C9E8, 0xC6BC82AA, 0xB4F4CE51, 0xE4D1486A, 0xF0C52371, 0x57E96A1D,
+0x1055626C, 0xABD63605, 0x09DDCEF3, 0xB1156B76, 0xCBF7A5FB, 0x1E9ECE1C, 0xAF72FFF6, 0x183E2FCD,
+0x84CF6BFB, 0xCF079722, 0xDEB771A4, 0x00ED3CB8, 0x5DCD7ABE, 0x796A726B, 0xDDFEBAD4, 0x287A0175,
+0xB1251254, 0xC9E331E9, 0xF5F9D510, 0x64F3893C, 0xF285A27C, 0x158C9235, 0xC07DAD29, 0x7E95209E,
+0x5D7F32AA, 0x860F77BD, 0x9B629F9F, 0x988DC372, 0x1C54C08A, 0x90AC2E61, 0x995A1755, 0x86A6C885,
+0x85680A2C, 0x46214629, 0xEBF2D3A4, 0xE74C067B, 0x4E7B5093, 0xB262C2DD, 0xBF0DDDA1, 0x0CDA76FB,
+0xFAF093F7, 0x009855EE, 0x2C6F9176, 0x1D7DE000, 0x3FAD559F, 0xFDC9401E, 0x2FC28804, 0xD8C6F27E,
+0x1C2ADD23, 0x61AB9345, 0xDE5E8C13, 0xEF801106, 0x9C38C374, 0x69955B91, 0xBDB22A52, 0x18366C9A,
+0x864E3A5A, 0x641757B9, 0x48AF921D, 0x4BB0D7CE, 0xEDB4EEEF, 0xA5304777, 0x337E1E23, 0x93609A27,
+0xA3069C34, 0x392C852C, 0xEF63CB19, 0xAF9A4D42, 0xF7E30EA9, 0xD360E65D, 0xE6164311, 0x20E17D7B,
+0x95F8ACEA, 0xEAD62CA2, 0x9153B035, 0xD1AFAA3A, 0x4402307E, 0x390A5683, 0xBE970F6D, 0x1EC34117,
+0xA874F452, 0x07ACD80E, 0xC5548C07, 0xE83C95C7, 0x5AE6A252, 0x08D49D51, 0x356B1339, 0x035B505A,
+0x12AF595A, 0xBC8D141D, 0x75A02302, 0x13E73ECE, 0x946BF769, 0xF1BBD331, 0x452187BB, 0x9DCB8F15,
+0xC922309B, 0xC5CF22BC, 0x37936534, 0xDEAFE3BA, 0x76D989DC, 0x81C2F900, 0xE3326243, 0x0B671097,
+0x86703EEF, 0x8B551E5A, 0x207CC6D6, 0x252ADE6C, 0x9323612D, 0xC8EEA328, 0xF73D1080, 0xFD9ECA27,
+0x4A1D94D4, 0x8A032C91, 0x170FC288, 0x2168E93D, 0x799E9B33, 0xC5D40448, 0xE14414F1, 0x2CEAA69A,
+0xEF377802, 0xF1FADD45, 0xCEF2E94C, 0xDE324A4A, 0x12D21C85, 0x634D2E3F, 0x7ED77CDE, 0x2F4F2994,
+0x551B7F04, 0x99D4547B, 0xB77AD3E1, 0x35288CEB, 0xBE17E96E, 0xB2C7402B, 0x0BD57D76, 0x113CE4C9,
+0x1CCB5C7D, 0xE102B849, 0x5B60A28A, 0x197EE5FD, 0x232014EB, 0x612DC2AB, 0xCE9BF0C3, 0xC67C8290,
+0x55156ECA, 0x8DC5C6C8, 0xCF04654E, 0x54149807, 0x4CA15887, 0x75261E7E, 0x2F91712F, 0xB7BCCB00,
+0xE7C0844F, 0x92DFCEFF, 0xF1EE0649, 0xFBA166AB, 0xB516193D, 0x59F78E4E, 0xEB2EDFEE, 0x30E60877,
+0x4C3587DB, 0xDEFCDEFE, 0xFA518021, 0xA28048A9, 0x67BF12EB, 0x809A17E9, 0x811D15A9, 0x42330CCF,
+0xBDFC234C, 0x13BE5BBE, 0x43601D42, 0x8D9188B3, 0xB290FE12, 0xC305A19F, 0x14D1473C, 0xFAE824FA,
+0x9D4B8550, 0xFD48ADE4, 0x4551FA67, 0x7DCFD5FC, 0xD50BEAED, 0x26E463A6, 0x10F435DB, 0x08B1248A,
+0x0B93A27B, 0xC0F763B0, 0x8D3426BE, 0x2D3BD5C9, 0x53A7AF3F, 0x7FEFF26E, 0xCB66B021, 0x9A118038,
+0x5CBC1F50, 0x260D312B, 0x54C3C472, 0x5466E57D, 0xAB0A1E09, 0xD186E2FF, 0x4DF70664, 0x0ADDEA44,
+0xB29C9CF0, 0x49DDF6BA, 0x090A0554, 0x3DEEC576, 0x030C744D, 0xC608436E, 0xDA92029D, 0x9A6D3529,
+0xC77D82C1, 0x3AC83BA5, 0x330931AA, 0xCA11E69D, 0x8C172753, 0x4772E2C9, 0x51E414E8, 0xF1AB0DA0,
+0x49E362B3, 0x63D20D55, 0xBF6A1F0C, 0x62CAE575, 0x8CE999B5, 0x6DD3118D, 0xAF3EEADB, 0x692ECF4B,
+0x9A824F8D, 0xBFD1A615, 0x31CB4303, 0xB9F91B30, 0xBBFF64F6, 0x1B4CFDC6, 0xC36D71E0, 0xFEE22E8F,
+0x8AA98AD7, 0xDA17AFCD, 0x6569F61A, 0xB02C5405, 0x0464C25C, 0x118CB69D, 0x826AE05D, 0x6678742A,
+0x7E6625D7, 0xC352EED7, 0x06888091, 0x44A196F2, 0xBAEB3E3B, 0x9AAC362D, 0xB54C9D2E, 0xF840F568,
+0xD38ACAFC, 0x62E899BA, 0x4B7E9E48, 0x3B5DC94A, 0xD0F70846, 0x98B8AD0A, 0x13F42CC1, 0x0F4D806E,
+0x12634EE6, 0xBCBE0C27, 0xF667F936, 0x4A12A991, 0x22AEE891, 0x2542863D, 0xBD7E2303, 0x23766B08,
+0xD08DCB9A, 0xE6C76671, 0xEE8FB26F, 0x18C09139, 0x51D2274D, 0x5577194C, 0x0488953E, 0xA372B917,
+0xEA383B58, 0xA23AB567, 0xF07C851F, 0x7D90A797, 0x4BDB0E8B, 0xDAD1FA1C, 0x594B2F25, 0xE49D161B,
+0x19A63816, 0xE501FEB8, 0xA0DE9BCD, 0xA77C094D, 0xFCCE7EEA, 0xD8C431A2, 0x53C12D30, 0x9BBB3914,
+0xBE9D3942, 0x0C1339B6, 0x7188997A, 0x429A80FA, 0x2AB7E888, 0xE7E35A98, 0xBFA8F4E9, 0xB59E9365,
+0x9DB0613F, 0xA75F7B4F, 0x3880507A, 0x16B7052C, 0xC07E464D, 0xE06E951F, 0x0061CD03, 0xDD2A3FD5,
+0x0F024843, 0x4C118574, 0xB67A01CF, 0xBD612BA8, 0xE25CAF73, 0xEEB5511B, 0x69DBAC81, 0x457053EB,
+0xAE761CD4, 0xBA117EAC, 0xB49EA260, 0xB480CA36, 0xCAEAA378, 0x2662BD80, 0x640FE50A, 0x23922A42,
+0x12DD1C0F, 0x89539C47, 0xA5CD8B12, 0xCFD3BF0C, 0x0C6B582C, 0x66CB79FC, 0xF66D6E42, 0x8751797B,
+0x7BB7738F, 0x16FB9AE3, 0x0751FC32, 0x4F0667C3, 0xB497E0B5, 0x70D47DB1, 0x04D58BEB, 0x06DBA107,
+0x4512A7D5, 0x7E85A67B, 0xC6C6EABA, 0x5EC1D180, 0x32029941, 0xF542EECB, 0x03322B08, 0x4425CA3F,
+0xA63F00CD, 0x8155F84B, 0x9BCDB43B, 0x50A6075B, 0x428C81C4, 0x4ACA1A60, 0x312D8BEA, 0x9EED4495,
+0xA987C59A, 0x619F406D, 0x8E8E4549, 0x051483E4, 0xB77ECAD8, 0x2449F012, 0x848E3125, 0x9FCBE306,
+0x6CD65BA4, 0x7DCAA6D0, 0x4B917C72, 0x24949A85, 0xD05E4C27, 0x42EFE9CE, 0x8BC9C9D8, 0x60447ABE,
+0x76A7CD17, 0x0718C8D3, 0xBCEB2B22, 0x01D492F2, 0xFC443601, 0x4C52F68C, 0x64B90929, 0xBE9BEDE4,
+0xA58D9B10, 0x67884D4C, 0xEAB6E090, 0x8AE25178, 0x04EE5952, 0x38C2E09F, 0xB80FF06D, 0xFA8D1AC9,
+0xF18FD49C, 0x27EA1DFE, 0xF719A5E7, 0xA996580C, 0x2421C03A, 0x692B130B, 0xC20B2D7C, 0x8C25055D,
+0xF330C3A4, 0xF62CA692, 0x25B3824E, 0x6405924B, 0x07AAD5F8, 0x70BC5C1F, 0x6BBFA88F, 0x94A4353D,
+0x4B0E8A43, 0x13C4D8C6, 0x4CD115E5, 0xC32BF25C, 0xCE173564, 0x2B013336, 0x323D8BA3, 0xD75DDC08,
+0x0E29EF6D, 0xBF77C55F, 0x3D96338C, 0x0C432B53, 0x260236A6, 0x7D55F382, 0x26711D25, 0xC642FA9B,
+0x09079642, 0x11B7B2D7, 0x342421F8, 0x059194AB, 0xDBC9AD75, 0x8693F977, 0x1395DB57, 0xDEABFD4B,
+0xC2FE8E05, 0x20CEDF84, 0xDA7219D4, 0xE41D9B17, 0xEAAC586C, 0x7263E0DF, 0xD4A582E5, 0x09FD68D0,
+0x3A955725, 0xD0E76C79, 0x0E434D78, 0x9946EF46, 0x0AAA0E8C, 0xDEA725D0, 0x1245B67D, 0xFB8AA0E6,
+0xD078276A, 0x0CD02822, 0x21F3B278, 0x5427583C, 0x7344EE82, 0x471C6798, 0xDA0C2B60, 0x3E88868D,
+0x386D09E6, 0xBBE18A73, 0x6FDA784D, 0xDB2DB845, 0x5D68D37E, 0xC9E0D5B6, 0x3636609A, 0x1014A874,
+0xBE84D285, 0x9D5DE353, 0x3E9D0220, 0xD1486542, 0x43190F93, 0x4C52FBE3, 0x20B2B160, 0xE6F2CEF4,
+0x1D965DDD, 0x915C8487, 0xA422EB8A, 0xB7CB8B28, 0xF1772A3F, 0xA491D7A7, 0xA58A3164, 0x50144DC8,
+0x9B7BD399, 0x99499D75, 0x82CFD7D4, 0xBF998880, 0x0B6BD3B8, 0x31AB2801, 0x88588453, 0x814039BA,
+0x4052CE58, 0x7B206915, 0x935FD27B, 0x596D0FFA, 0xB42C783D, 0xFCFDF82A, 0x44323157, 0xA481B561,
+0x82D9C331, 0x88795B1A, 0x52DC1C46, 0x50E18F14, 0x765B05DB, 0x87B71124, 0x0F92760E, 0xD84FD688,
+0x720F350F, 0xA826A768, 0x410BD606, 0x926B7444, 0xF6B35E0C, 0x38827D8F, 0x7CA42D08, 0x0627BB34,
+0x9CB56090, 0x397AD15A, 0xA09FBAC9, 0x329A444E, 0x358F1C25, 0xAD68E595, 0x2831B81F, 0x3F187C2A,
+0xE8236A77, 0xA8178CDC, 0xDCA50512, 0xE5E2CC7B, 0x1BBC190F, 0xB2FA63D1, 0x04B4843A, 0x9820390B,
+0x7D876B1B, 0x4BAA8E02, 0xB0729B6E, 0x579FDC55, 0x11D72892, 0xD0713773, 0x6258A613, 0xA06512F9,
+0x9DFD9B61, 0x1BDD85AF, 0x72662303, 0xED0CE132, 0x7F2AE821, 0x7F34B131, 0x906AEC1C, 0x5DB05071,
+0x6C600596, 0xE68332DD, 0x74D359E2, 0x3765CABF, 0x7C9D6AE0, 0xDB34E55D, 0x3E9CCC5C, 0xE0D64EAB,
+0x6C99F22B, 0x7BF71127, 0x8C94CEE5, 0x5E9D2F94, 0xC9B6E763, 0x32353D5B, 0x44DDD0CC, 0xC12347ED,
+0xC95D1C5A, 0x0BBBA29F, 0x3B3AE013, 0x13BB5FC9, 0x77B21C20, 0x9AC7DB4A, 0x0ADB2137, 0x877996C3,
+0xB1D0B506, 0xF1A177B2, 0xD2DC2026, 0x69CE0552, 0xC956AA93, 0xFF9FC3A4, 0x78206024, 0x22653D88,
+0xFFFD0F44, 0x80341FB6, 0x003C3E9A, 0x1899C150, 0x61316623, 0x8ECB5C8B, 0xD99F15BC, 0x9DDF64E8,
+0xD8E2E56D, 0x6444ED1B, 0xCFDA83AD, 0x20F4212D, 0x5C2020E7, 0xCAA5BCB0, 0xF1282D53, 0xA3948855,
+0xC7DB9D27, 0x634BE86C, 0xEDED875F, 0xDEB19CC7, 0x9B8EB45F, 0x61BCEFD0, 0xEA3A422F, 0x7C387B0A,
+0xF285DD16, 0x677457C0, 0x5B20FC71, 0xBF39CBB4, 0xCDBD43F1, 0x163FA749, 0x19635EE2, 0x74C13D8B,
+0xD5B5122F, 0xEB78A65E, 0xBC6D2C63, 0xF5312EA0, 0x459597AE, 0xEFF606AD, 0xBE2541CD, 0x8B485786,
+0xF096ABE6, 0xA018F718, 0x7DC8EB97, 0x8DF87CD0, 0xDD57A453, 0x13B327A3, 0x0A26F064, 0x95BBF130,
+0xBA32CAA9, 0x44575EDB, 0x4B5E20D7, 0xF3F54EED, 0xB5A33F3B, 0xBD66214A, 0xD376A298, 0xCDD9612A,
+0xEEE81843, 0x303735A4, 0x196CD919, 0x993DA9A6, 0x1EE8B1AB, 0xBCD33313, 0xB0176308, 0x8F23F919,
+0xAD614866, 0xE3430D48, 0x01049615, 0xF56A78A7, 0x760BFB90, 0xBC2CAF35, 0x02661841, 0x5EDB2A21,
+0x7EC463BF, 0xFE62511B, 0xAEE58806, 0x210757EE, 0x131A6BFC, 0x0B55EB40, 0x5AA83B3D, 0xD2199AF0,
+0xA8A53073, 0x8D9805EE, 0x8875D3FE, 0x75A84978, 0x05494D57, 0x93E348C4, 0x20EEEA14, 0x411BD21F,
+0x6AC989D4, 0x71033233, 0x7B6DB1D9, 0x31E22CDF, 0xBFC52995, 0xB4EE1EC5, 0x36EAF1C6, 0xA1544137,
+0x017D822B, 0xC4786634, 0x66A2EF64, 0x46486A57, 0x2069A4EC, 0xD79B40DF, 0x28374836, 0x451A30BD,
+0x77A32770, 0x0767B583, 0xA33BA849, 0xAF03F972, 0xCE41CF1A, 0x156AC806, 0xE051B38B, 0xF083D6CC,
+0xD1ACCF16, 0x422E0D6D, 0xC02DB943, 0x85B7D01F, 0x191B4ECE, 0x5CBC289F, 0x0E96D416, 0x676CA878,
+0x4972B7D5, 0x258A24BD, 0x4455D73C, 0x38BC88BB, 0x093FDE80, 0x9FAED363, 0x0FB31457, 0x5F21E4AB,
+0x8A4130F7, 0x6D210533, 0x8DD49050, 0xFC2690D7, 0x2EF3D46B, 0x6F589286, 0x5017CDAF, 0xC8638B08,
+0xE35AB496, 0x7B038DDC, 0xCD205D9F, 0x30F195C7, 0x741AC82F, 0x07CE1C7E, 0x4D46B07D, 0x1F9175B4,
+0xBEE9D651, 0x50F1636E, 0xDCDD37B2, 0xA7DCD513, 0xE0811C14, 0x5DE7C2CE, 0xAB2B6892, 0x7542DFEB,
+0x00301E12, 0xF9488F11, 0x74CC6271, 0x27F4028F, 0x5DF2C19C, 0xC48EA1B8, 0x0E889C74, 0xEF048882,
+0xA6FF799D, 0xC00DEEC5, 0x5797CE6D, 0x62C37C00, 0x481D8BCD, 0x378505E0, 0xF75712C4, 0x3461018C,
+0x456FF446, 0x951F66DE, 0x97D2B946, 0x8E27F26F, 0xD52F9B09, 0x666A1568, 0x8ADCE910, 0x9DB23545,
+0x4525AF2D, 0x69E19EF0, 0x949FFAD2, 0xED9FE4C4, 0xF5C0D1E5, 0x83946D4E, 0xF7041A78, 0x5961CEAA,
+0xADF68CA6, 0x438514E5, 0xFF1F6995, 0x46CAD0B1, 0x9C495209, 0x0E6BD9B1, 0x0D7B64AC, 0x5366F738,
+0xEEBC75F1, 0x9EB3B403, 0x8D887AA1, 0xB557FE91, 0x4123F145, 0x7B46ACB8, 0xBA1CBE8B, 0xC878533E,
+0xA41CCE93, 0x4C0347E0, 0x88B4986F, 0x71F1E501, 0x711B5C3F, 0x8AAC2D3E, 0x7E9D7305, 0x6C73AD8F,
+0x58000DBC, 0x1FEDC963, 0xE8A6265E, 0x061EE996, 0x9316E029, 0x87830C08, 0x41411A0E, 0xB4BC2FB0,
+0x0408EBA1, 0x17371739, 0x04E7DA57, 0x32911D36, 0xDB7229D3, 0x689BF087, 0x9599C4CF, 0xB9CAB876,
+0x79A103AB, 0x0EA5C521, 0x91189B28, 0x742B366B, 0x3FA5B74D, 0x5E73CB57, 0x3C39B9D8, 0x3455FFC7,
+0x4F1EBCA6, 0x2FBED350, 0xB2C8236C, 0x7AF33FFA, 0xE36297DE, 0x4093062D, 0xE7A57FC5, 0x61570497,
+0x694B0176, 0xE8CB60F3, 0x331CA60D, 0x8DF3FE16, 0x0D8B14AC, 0xB3720C70, 0xD146867A, 0x6DA90646,
+0xFD11DC53, 0x2312F44E, 0x4CFB98B9, 0x0D7E20DE, 0xA0FD4731, 0xE9D3DC7F, 0x25559CEE, 0x8DD2F969,
+0xB0A107EB, 0xE1E6CC28, 0x38675B80, 0x35980E6B, 0x50A7B398, 0x130512C8, 0x63BA9DE3, 0xE4305478,
+0x6049316B, 0x84828CC6, 0x3FEC2B40, 0xF470626F, 0x78DE24A1, 0xEE8F00F4, 0x46EC8519, 0x22CA103B,
+0x5661BA3F, 0x7F2AAD8A, 0x144FD42B, 0x99328821, 0x03AED743, 0x81932576, 0x516313C6, 0x604367CB,
+0x6BB5F91D, 0x74B69D68, 0x7D5977F7, 0x25A54573, 0x8CB872C6, 0x87A0ED2C, 0x4654BDB1, 0x7FE7A522,
+0x5245FB57, 0x630F8D0B, 0x5F938553, 0xC9363CF7, 0x79CF9D91, 0xD6E1FE14, 0xAA2A4DA8, 0x7954106E,
+0xFAA7B921, 0xDE840293, 0x1470D60A, 0xA4FBBE7F, 0x334E8943, 0x5B1D87A6, 0x84477363, 0x86F5A024,
+0xA589DC1A, 0x92D44FB4, 0x14A2491A, 0x75A4EDF1, 0x9B49F26A, 0xB6FCD416, 0x59DF2E5C, 0x521DABCB,
+0xB1413F2B, 0x9867F016, 0x9F219937, 0x3F7DA527, 0x9190FECA, 0xD4CFAB96, 0x05C232DE, 0xA6DC5573,
+0x82199645, 0x15B2AF32, 0x0DD4CA45, 0xDDB2FAA4, 0x7612CA5E, 0x446C5900, 0xD5C54E2B, 0xD63DB3A3,
+0xDA37A059, 0xF39B307A, 0xFF69295A, 0x94204880, 0x9C4C55EC, 0x72786E19, 0xBDEF71D5, 0x226EE464,
+0xFF6510FC, 0x165AC3BF, 0x306A9375, 0xDDB815C0, 0x28A4348A, 0x25B5908B, 0xCEE45A2B, 0xB57622D4,
+0xEE3AEAA0, 0xF1E141AD, 0xC8B1B941, 0xFF28EBA6, 0xC47AFAA4, 0xE09D59AA, 0x70E655C8, 0x2AEC0B9E,
+0xC5C63278, 0xDF0AE9F3, 0x75B40507, 0xB40B2DEE, 0x51753DEF, 0x64F2864C, 0x5C8D54DD, 0x03BDF108,
+0x4941F5C4, 0xF4DD49CE, 0x7A13FB62, 0xC337655C, 0xB4B1EA3C, 0x08A88880, 0x039E14DC, 0x9CBD5FC1,
+0x7B0F073E, 0xBB773BE2, 0xB1E711E0, 0xE954724B, 0xF2321689, 0x3BAF6573, 0xFACF72C9, 0x3AA16AA7,
+0x1CEEE3BA, 0x40648E02, 0xD1AC08E3, 0xB4A1E630, 0xFE506A1A, 0x20805C6E, 0x5C26A335, 0x84B7425E,
+0x04F2CDF4, 0x7B5F51A6, 0x1069C406, 0xD41A1ACD, 0x322DBDE2, 0x1EBC735B, 0xF9BA3CD1, 0xAEB293F0,
+0x6C72DE97, 0xA9B1904E, 0x2E76B61B, 0xABDF7E82, 0x778EA43C, 0x9CF9FA31, 0xD9E50AEC, 0x5D66E667,
+0x350D59B3, 0xD388DBB0, 0xC04C3A64, 0x888F742B, 0x168D8AED, 0xDE38994B, 0xABB5E842, 0xB7AADD37,
+0x45FE0BCB, 0x33C4073B, 0x6872F0D1, 0x293B6E5F, 0x117805A6, 0x8E2BE9ED, 0x4A7408AA, 0x7694C122,
+0x47131BA0, 0x7103FB53, 0xDBA54586, 0x6B3739B4, 0x5785CE0A, 0xC2C4BC36, 0xA5DD0AEE, 0xCE1FB8C8,
+0xED406D4C, 0x87FB13FC, 0x99E4613D, 0x58743DFC, 0xF35CF7C5, 0x08EAFDD4, 0x8859978A, 0x4835FFDA,
+0xE8D00FCE, 0x3012833A, 0x0B6FE733, 0x9BF5DFE5, 0x008E02EA, 0xFBE6E9FE, 0xF9FA5945, 0x481629F1,
+0x90BE20F4, 0x148BC467, 0xE12EBBD8, 0xB3D6A60A, 0xBBE6B942, 0x9C0B7F37, 0x168E4E19, 0x4B148669,
+0xB5CE76DA, 0xC7B93633, 0x674C1EA3, 0x64D424B7, 0x477B54CE, 0x2B628341, 0x410B5E30, 0x4B10F88A,
+0xB1B9ABFE, 0x45FBB97E, 0xE2ED304A, 0x63DC56AE, 0x2E3383BE, 0x2D9FDF1B, 0x20CA1E9F, 0x35A160A3,
+0x3D8A619B, 0x00180394, 0x86C2268C, 0xF08E99E4, 0x1CC43BDA, 0x3649763D, 0x6795E8DF, 0x18EBCBA9,
+0xECEBF1C2, 0x566D6863, 0x44FEDFAE, 0xF3315F91, 0x1F97A9EC, 0xB32B9A80, 0x7C9C77DC, 0xA6706E6E,
+0xF4F60CE5, 0xCE007426, 0x691E5BC3, 0x3605FE3B, 0x4C597FBB, 0x1061D964, 0x7999C01C, 0xF6236619,
+0x8287EC72, 0xC8D6455D, 0x038C2614, 0x10C70451, 0x1E6B6A48, 0x413394C4, 0x9CDE203B, 0x9B287813,
+0xA308D1DF, 0x7BD97196, 0x1B2FDA9B, 0xEEB9E12B, 0x40CC1585, 0xDC55C3A0, 0x6029157B, 0x894B2B6D,
+0xC8CEA8B5, 0x4220D5E3, 0x6D684A16, 0x3F576C6C, 0xBC46DCB5, 0xCA94B202, 0x7922C5E1, 0x90E68C58,
+0xFB318AFC, 0x9CA8FB41, 0xE08C4F28, 0xC8DD12FC, 0x31FA3B4C, 0x0CCE2227, 0xD6D90D34, 0xB606B3A3,
+0x4C255EA5, 0x923719B7, 0x66ACD230, 0x5294E6BC, 0x211F762E, 0xB47FB894, 0x1FB69BDE, 0xC81B8CB6,
+0xF402FCA5, 0xEA3449C4, 0xFB8678DD, 0x65FBB78E, 0x25C46F05, 0x1D8489C3, 0x84961D68, 0x8F3078CF,
+0x5048E098, 0xF3DF3894, 0x499C2D16, 0x2F195419, 0x6077F591, 0xBD77C52E, 0xC2F9B63D, 0xB0977D7F,
+0xFB09EE48, 0x28CB3366, 0xBF341D64, 0x61608E31, 0x525B208C, 0xE1EB0E3B, 0x40A61D57, 0x1FB22998,
+0x25339FD1, 0xE647F031, 0x57231168, 0x0BE58538, 0x4189F5AA, 0x128E3DF4, 0x7CCD8FB5, 0xE236992C,
+0xE607091D, 0xCFD3E193, 0xB00249CB, 0x98838D19, 0x59B8C7F7, 0x7545037B, 0xF070B5CA, 0x6964DD51,
+0x7A631F9B, 0xB1D406DE, 0x8C9AED9D, 0xCF82338E, 0x2E3FEEFC, 0xF804AF3F, 0x4BC4C3C4, 0x01CDBAC1,
+0x76D61BFD, 0x43113762, 0xE2AC9B5D, 0x8C23F4D3, 0xF7191457, 0x267B6E3D, 0x2B7DC1AA, 0x4D3190ED,
+0x0DC94E66, 0x9145A24C, 0x0D5AF72B, 0xE3E0E379, 0x0C50CD00, 0xB765362E, 0xC75643AA, 0x31FE40CF,
+0xDDBEE882, 0xC479A5B4, 0xBD041A89, 0x3BAE54A8, 0xF4FC1191, 0xC408C0D5, 0xDF3874D8, 0xF31C4289,
+0x58253D34, 0xEA10234D, 0x7E5B7101, 0x7B13D0A5, 0xBF372FA0, 0x81D11627, 0xC426FBE4, 0x19362853,
+0x0F6D6ED7, 0x59C1B4F0, 0x8C107C95, 0xAFA616FB, 0x5BB68C90, 0xB29930EA, 0x57F1AF36, 0x8B0F66CB,
+0xEF5A4711, 0x04E1A98F, 0x2B65C4D9, 0x3DBE6895, 0xE68863C8, 0x1656177F, 0x4571DD83, 0x3C8C61B0,
+0xBB6D4D15, 0xE002E7F7, 0x419A5C8B, 0xFC469773, 0xCA95D35E, 0x38DAF167, 0x2056BE2C, 0xC3624820,
+0xE205BAEA, 0x849E997B, 0x7FE0F146, 0x736C31FF, 0xF584E3A2, 0xBCC06819, 0x91E7CD36, 0x78DC7D8D,
+0xB8F16EFC, 0xF335A625, 0x5C69384C, 0xBC2A2C1C, 0x529E181C, 0xBF8068A2, 0xC2CE1349, 0xF4F95B0F,
+0x2DFA1888, 0x924E2F46, 0xC0EF6C77, 0xE3653935, 0x411F5A99, 0xFB449E13, 0xFC41887C, 0x95E98235,
+0x1EF50EC8, 0x1B88164C, 0xE3EC302A, 0x1BADAEA3, 0xA1C47D54, 0x40EB7F6B, 0xF4254076, 0xE6442D06,
+0x9F2E6311, 0xC4D524FA, 0x87B56BB7, 0x33686B78, 0xF6EE3112, 0x9BBFE6BC, 0xE61DE256, 0x6C1276E1,
+0xD54B1937, 0x95662A8E, 0x7A4D0484, 0xE620EC37, 0x3599FC8A, 0x1B9AD56A, 0x1BBEB6DE, 0xC324817D,
+0xC5090DFB, 0x49B7400E, 0xD954D28B, 0x23F71CCF, 0x58C8D410, 0xB72FFC35, 0x9648CFF7, 0xE0AEEC24,
+0x274965BC, 0x48E3D11F, 0xA6B31485, 0xF03FB19E, 0xE8CB5D96, 0xEC71909A, 0x5C34DB9A, 0xC922B4FE,
+0x2D8B389B, 0xAEE531C3, 0xA8159D94, 0x5E81E698, 0x1C2C18DB, 0x29BC33A2, 0x72142D5C, 0x7E4D9B4A,
+0xA2E7A9BD, 0x9E432666, 0x3C194038, 0xD045ACF4, 0xDB8F91E8, 0x07AD1857, 0xE6B68BC7, 0xA8234731,
+0x7B7DC32E, 0x74A1F73F, 0x4C45EDBD, 0x65249F49, 0xB58EA40B, 0x40AC72CB, 0x7127BE00, 0x2A5B59C1,
+0xD7B4D7D8, 0x487E9EDB, 0x68E6B2F8, 0x1F52C963, 0x98CB77BD, 0x507D436B, 0xC49D69A5, 0x828A0B35,
+0x174D78B3, 0x2D0F7493, 0xB7DFBC68, 0x2C1B5A3F, 0x9DC7F245, 0x3D8C6510, 0xBEC23F9D, 0x28781772,
+0x061E8345, 0xAFD115CB, 0x52B7CD6D, 0xBE581DCD, 0x0E04745E, 0x15CDB2A7, 0x7AA3FC5B, 0x6D7FD51D,
+0xFAFAF459, 0x20366E02, 0x2A1B3A66, 0x73B335AB, 0x26DDD2F9, 0x1B5FB2A9, 0x6659CA68, 0x81973312,
+0x6162FFB7, 0x49302BF5, 0x9B0C23B9, 0xE0202203, 0xE09F210C, 0x93875C88, 0x098131AF, 0x64E671B3,
+0x87E896E4, 0x41951FB5, 0x3E68EC68, 0xE774DD4B, 0xFD6B8094, 0x45BC2AAB, 0x25A4F53C, 0xD268758F,
+0x48BA56D7, 0x4B56CBCA, 0x7934066D, 0x24376CC1, 0xDDBAC1FB, 0xF209854E, 0x429A7F5A, 0x36D1655C,
+0xB9F09155, 0x404B3CEF, 0x589FB5C3, 0x778D963D, 0x803BFCCC, 0xF915296F, 0x5CEFA412, 0x06663CBB,
+0xCA23FA9E, 0x6339B6A5, 0x2823DB8C, 0xDC974160, 0x45A33FB8, 0x7A3B9BF7, 0x017AED2B, 0xFA15A7F1,
+0x2D0B30A8, 0x08938698, 0xCCE76A64, 0x197E91A0, 0x5539FB3F, 0x8E1349FE, 0xFF818C8C, 0xE385A53B,
+0x19362269, 0x2E3B887B, 0x4D7AA675, 0x36E733FE, 0x9C1D4273, 0xDDFD5729, 0x861A22A0, 0xD27965F6,
+0x6D402930, 0x060D2B6C, 0xE5E79B5C, 0xCB518AF7, 0xA329AF4A, 0x4E891DAD, 0x74E48BF5, 0xB00C06FD,
+0x7982054E, 0xE92DEA0D, 0x700CBD6D, 0xC9153418, 0x4380AFB8, 0x9B673348, 0xE73CE76B, 0x83987BE6,
+0xFFC318D5, 0xE1087850, 0xBE1E6267, 0xC6862487, 0xE3142554, 0xBBEADC69, 0xF41BD83C, 0x52C31147,
+0x45E8FEBD, 0xD01F44F3, 0xC55DD381, 0x4D27F631, 0x1D812FCF, 0x4B2EE5B4, 0xEB9062E2, 0xCABF55BB,
+0x01C15984, 0x8B4BAAD8, 0x63A20298, 0x1FA74348, 0xAF17BF9D, 0x8AC939D7, 0x52A1E12D, 0xE9659B11,
+0x61475AD0, 0xB176F3F6, 0x0559AB54, 0x0E220E95, 0x261ECC8C, 0x1B21041C, 0x5AA1A47D, 0x7F73F5D8,
+0x85DE0D7E, 0x2CDB5BCC, 0x5A555890, 0xB15D7E12, 0x71DBE55C, 0x7A4C0E70, 0x83FF5C9F, 0x63BCEE81,
+0x833C3CBE, 0xAD0B79FD, 0x586F3F68, 0xC79FE836, 0x61A453BE, 0x2FB720A6, 0x4EE3415E, 0xBE6BC803,
+0x59D68ADB, 0x9B22A4A4, 0xEE0A42DC, 0xDA0447BA, 0x3A44F745, 0xB4D95B6A, 0xB7F5CF46, 0x4513E524,
+0xB1CF227C, 0x75848CC6, 0xAAEBE7A2, 0x6E9EA949, 0x40195124, 0x9378DAF8, 0xCCEA8884, 0x8A75FF5D,
+0x493B51CC, 0xF0915AA3, 0x61C7B5E3, 0xB53C109F, 0x67F6FF60, 0xF2A2379E, 0x4ADAE5AD, 0xDF756FBA,
+0x04CA82BF, 0x9EF8999E, 0x8855F9CC, 0x04F56CE9, 0x83C078FA, 0xF33F7946, 0xF4B8FB2D, 0xE820C635,
+0x0B39212D, 0xE74FC94B, 0xF92D81E9, 0xB9945937, 0x2D110DDB, 0xED1F975D, 0x04EDDEE3, 0x5FBC0F21,
+0xA056343F, 0xBA59C76D, 0x93827DE1, 0x2C1A9473, 0x621D0D1F, 0xA41F093F, 0xA51CFB8A, 0x8C8F090D,
+0xF3FAA0E0, 0x1CD5D83A, 0x28610BAB, 0x77C430EE, 0xDD640E44, 0x7A413C61, 0x2D992DC3, 0xB4BC3192,
+0x6A78BBC7, 0xFE21DD09, 0x10BAD134, 0x78DE6C64, 0x958A9EFE, 0x51C69DE1, 0x87414531, 0x6E9C8A5A,
+0x74801EAA, 0xCB174B7C, 0x892DCBCC, 0x47756F6B, 0xAF259239, 0xB886B64D, 0xE4548C2B, 0x5A50854D,
+0xB8851712, 0x17F22319, 0x5C18D542, 0x24E9DDBE, 0xAC2DF965, 0xCDEF6C7D, 0x6050FF2F, 0x097E2D7F,
+0x847FA769, 0xE4AC9A8C, 0x27429578, 0x495DB991, 0x4DD6EF27, 0xEDF9078B, 0xC08929C4, 0xEAC64FFB,
+0x259DC574, 0x15B9BFA1, 0x0F403351, 0x1C2C72C9, 0x3ADB4CFC, 0x26ED26E0, 0xE339B609, 0x8A88BBAC,
+0x9702AF42, 0xA95F5BE2, 0x462A539A, 0x481BF124, 0xEF492462, 0x5288A6AC, 0x6E63D2AD, 0xA8DAAE7B,
+0x9E4AF901, 0x0DBF35E1, 0x8B843DC1, 0x3E893339, 0x83D7F744, 0x83CD24A3, 0x8A902E27, 0x8A38CEEF,
+0x30B40BDA, 0xF4A279EC, 0x60FA4352, 0xB7162049, 0x522E2756, 0x2DE51A1A, 0xB9E8FFD1, 0x342B6E4D,
+0x3BD482CD, 0x54B0E535, 0x1DCA24C3, 0x29E7D6B7, 0xA147EB01, 0xE6DF1B7C, 0x00751C29, 0x093F30DB,
+0x09608579, 0x45D76DF5, 0xA751A4E0, 0x9DB9D1F3, 0xF3433288, 0x51D851E3, 0xC98D9C4C, 0xD8AF101E,
+0x1966B174, 0xD96008B1, 0x4743E941, 0x8A8D96C0, 0xEFC9F7E9, 0xD49B21EB, 0x0BE35710, 0x31B8A572,
+0xD1E181DA, 0xFBD6EA80, 0x892123DA, 0xEB3B4B61, 0xECE94A2B, 0x7C857D55, 0x1599E19A, 0x313DAF50,
+0xB18B3D3D, 0x0325DBE3, 0x25452E90, 0xA9219E9D, 0x5D20EE42, 0x4252632D, 0xBBC0532A, 0xAE7468D9,
+0xCEC41E3A, 0x719EF96A, 0xB4B24FDF, 0x222DCE4E, 0x3B193065, 0x95A257B0, 0x4E377B34, 0x97D92D89,
+0x808669CF, 0x69912988, 0x18AF596A, 0x4498E26E, 0x578E6025, 0x551E1819, 0xA8F93C84, 0xB344E70B,
+0x0E8A37AF, 0xFFBACB0C, 0xBBA9BA1C, 0x0F3C9781, 0xA9027F7D, 0x5BF0F96F, 0xB2BF3779, 0xB02AD4E6,
+0x56EB561F, 0xB21806A1, 0xE2F9CD6B, 0x46065F36, 0x6F6AA524, 0x9CB492EF, 0x03C77385, 0xD3685650,
+0xE854D368, 0x534A15EA, 0x74A973E6, 0x802D108B, 0xCA70EA8A, 0x77710C43, 0x34E800D9, 0xBC235904,
+0x1C5BA6D7, 0x2EE70470, 0xC5DAC237, 0xAE7C1D30, 0xA75BF4EC, 0x2447F06D, 0x0443AD6B, 0x62D2B28A,
+0xD5C794C2, 0xCB439F83, 0x7798238A, 0xF4A16B76, 0x0B4BCC61, 0xE77E7022, 0x233FF75C, 0x00476EA8,
+0xA987C31D, 0x2FB4FC81, 0xC99DE8E6, 0xD0227CC1, 0xA4E1EC43, 0xEE01C059, 0x83DF3C81, 0x48A21172,
+0x38DBA9F4, 0x56B1036A, 0x233E360B, 0xC6EF0F95, 0xED204E29, 0xC38135F4, 0x3A92824F, 0x031C1FF3,
+0xFD17F236, 0x90B397BC, 0xD11942BB, 0x1C766641, 0xADF23984, 0x93BB523C, 0x164E1F80, 0xDB1E8C10,
+0x8BA1FE1D, 0xC4DF3E4E, 0x09D4F5ED, 0xA43017D1, 0xAD5ADF0E, 0x31940493, 0x2D0CEC7A, 0xCDFC62F2,
+0x337F593B, 0xE6010E97, 0x810FFFFC, 0x5D9C224E, 0xBAA90C01, 0xF6B2229F, 0xC307788B, 0x0E49BE82,
+0x1E305432, 0xB2AEB2C4, 0x219D5105, 0x82A25E85, 0x393C87C4, 0x8C00F433, 0xF360A4F2, 0x409038BE,
+0x3B02C3FB, 0xB61CD5E3, 0x1507C179, 0xE96513B4, 0x0D416326, 0x639163CA, 0x90B641F5, 0x005C5B25,
+0xEE0ED051, 0xCB904834, 0xC23FB88E, 0x53DB07C4, 0x8C5E5008, 0xDC761D5A, 0xDE4DF9EA, 0x2E1D8891,
+0xEA65CB1D, 0xAFBA485E, 0x462337D6, 0xC2B3B615, 0x428BCC6D, 0x2175AE94, 0x900F7414, 0x361C0C8A,
+0x46724D17, 0x5704BBAB, 0x315CE32E, 0x609136D0, 0x869B616E, 0x4C0D04BB, 0x26F28EDF, 0x679BB1E1,
+0x949B91C1, 0xEA49C3B6, 0xBFC1532E, 0xE193D093, 0x6BA78653, 0x9A0D88BE, 0x66699B7B, 0xCD4122D4,
+0x2D1676EC, 0x419BDC28, 0x70136A8D, 0xAD501681, 0x5DBD472B, 0xAA0D6A34, 0x754BAA34, 0x15582827,
+0xFD22EBA5, 0x7ED6A139, 0x20303210, 0x3A27862B, 0xCE267336, 0xD71428FA, 0x40900871, 0xA171CCA2,
+0x13CA7FAF, 0x366F0215, 0x14809A1B, 0x71BE349F, 0xBE3F93A2, 0x60A01B52, 0x8EAF3267, 0x99036ABF,
+0xB32B749A, 0x840D392E, 0x63A75622, 0x6C7CA5DB, 0x05839EBF, 0x6A28E5A8, 0x6B42CAB5, 0x096D9C07,
+0x3BF0BD14, 0x9D50DD88, 0x806EED7F, 0x7AF3FC35, 0x37908883, 0x28B531F4, 0xCF1A1260, 0x886C6075,
+0x20C631D9, 0x9FE9231C, 0x16A75145, 0x758492A1, 0x94A289DE, 0x8CDDA7B0, 0x34506ADD, 0x40DB7D49,
+0x7748BCF3, 0x41036080, 0xD0EF0C52, 0x95F30F1F, 0xA01B5DBC, 0xA4052374, 0xB1711493, 0x5377457F,
+0x42636B2F, 0xB7724955, 0x508DB458, 0xA2073380, 0x5597F574, 0x4083EB30, 0x9EC2B5CE, 0xCDCD1ED2,
+0x241F264D, 0xC7FFB0B3, 0x762FE97B, 0x5745F58A, 0x16A6C86B, 0xFDAA68B3, 0xB5DEB9D5, 0xB1C468C2,
+0xA2171C49, 0x4D89B1D5, 0x20785292, 0x1712E2D9, 0x56564C80, 0x793E6282, 0x306EFCCA, 0x3B8C0FFD,
+0xEF98D63D, 0x84CB177E, 0x689BD6F2, 0x265329B1, 0x1458EF64, 0xE501BABE, 0x819DBE56, 0x0C1F7E92,
+0x1C436124, 0xEB734300, 0xB2BC8903, 0x58BCA34B, 0xEA1E8FF7, 0xDFDA3F3F, 0xB7A2EBE8, 0xBCEB7DE2,
+0x7FB27DFA, 0x24BE1FCF, 0x5D0C33B1, 0x05BAB875, 0x581D4BB0, 0x7119499F, 0x41765F91, 0xD90664E4,
+0x66CD7BDC, 0xED20159E, 0x99760C4A, 0x05D63A40, 0xD261E9C1, 0xC4F46F9A, 0xBD27001C, 0x161F9F4C,
+0x1AF2F5EC, 0xE62B7C83, 0x5D3718B3, 0xF36B8EB0, 0x29B84117, 0xA41A98CB, 0xD9700735, 0x919F809F,
+0xE75896F9, 0xA87BE74E, 0xD4737E20, 0x2BD13345, 0x3AB73965, 0x9025C018, 0x0641011D, 0x039249D6,
+0x2CE068F6, 0x8981C1E4, 0x4523FDCC, 0x48C44CD0, 0x232A9FA6, 0x62BCC3DE, 0x909F2E7A, 0x79A52D3F,
+0x05999ACB, 0x7EAB8D63, 0x2CFC765A, 0xF39E2ACF, 0xD3D01C74, 0x297671E8, 0x7A374364, 0xCF55CF5D,
+0xD87680D9, 0x4B57E67B, 0xA7E8DE70, 0x9188FFE1, 0x6C5AA2FD, 0x4B5B606C, 0xD8BE0AE3, 0xE257AC6C,
+0xECE1BA33, 0xD8734FD7, 0x816898D0, 0x0D02782C, 0xAD4CF639, 0x0DED9D84, 0x62DAFF3E, 0xF36DDA38,
+0xE187EC35, 0x10A062EA, 0xC6D3B24C, 0x37EFAA30, 0x45AEFD7D, 0x90CE0B8B, 0xEF617F6F, 0xC8D6E2C2,
+0x8E2435F0, 0xF8E452B9, 0x11622DA8, 0xADFD0721, 0x541EBC86, 0xA97DC7FA, 0xC4C473C4, 0x42164D78,
+0xA88BF580, 0x09855D5F, 0xE19615FF, 0x47906E22, 0xC5737AB5, 0x28367714, 0xF8D05388, 0xDDD9FE86,
+0x81868E6D, 0xB969A629, 0x764FA6C6, 0xB3DA6EBB, 0x195722EF, 0x14599489, 0xAE6139FA, 0x28B497D0,
+0x83B31FCB, 0x818C84C9, 0x37B759D3, 0xA73F176D, 0xEF599104, 0xA0DD614C, 0x7E362EA7, 0x3FD2BDB1,
+0xB24AAF8A, 0x5F0DD67B, 0x3015756A, 0x1AD6FEA3, 0x67E44FCD, 0x4BE62A04, 0x0B1D6367, 0x049B1549,
+0xE44EF528, 0x986CE1BF, 0xA7ADF43B, 0x29FBA9BF, 0xF5D1133C, 0x8A35F1C4, 0x92B1F6F4, 0x2B2D6010,
+0xD4C43F5A, 0x3F5F2FF4, 0x25EEA770, 0x623B02C3, 0xC88F5580, 0x7DBF3C57, 0x29005EF6, 0x779B3BEF,
+0xED74AD9F, 0x4EAAFF68, 0x353B92AF, 0xE22F8856, 0xC18A0C64, 0x654D06B3, 0xFAA01149, 0xCAFCE46B,
+0x2F7087D1, 0x21373E0C, 0xAB9F292F, 0x87BE5FF0, 0xFE0231F0, 0xD01C2979, 0x16612193, 0x76CCB223,
+0xDB010008, 0x68F60795, 0xEA2DF2D0, 0x80557394, 0x27555151, 0x09CDBDEC, 0xDC089988, 0x991CAE23,
+0xEBC66539, 0xD1D0408C, 0xFE030811, 0x5AADC3A8, 0x2510BB5E, 0xE32525DB, 0xDA5D43BC, 0x40F451CA,
+0x37070F0C, 0xBC00C2EC, 0x9A5D0A20, 0xBDE04719, 0x7F1B8677, 0xEB30110D, 0xEFD74613, 0x3D175BA2,
+0x7DC2D4B5, 0x4C00D555, 0x8001E68C, 0x65472E31, 0x20AE84D7, 0x21DB3170, 0x10CA8336, 0xEFFE0E58,
+0x2E3F5E2A, 0xD46681D0, 0x17197F49, 0x15CBD653, 0x869BC6A8, 0x69570941, 0x03EA74E1, 0x3F9B2634,
+0x739F846B, 0x376B8D20, 0xD0196F80, 0x610DC200, 0xDD4D3365, 0x56FD73AF, 0x501F1A40, 0xF58F542C,
+0xE7C82CED, 0xDB0828ED, 0xF42889AE, 0x320DE034, 0x162CAF15, 0xFC442873, 0x42CEBD8B, 0xAD9493B8,
+0x27F2A0EA, 0x28BA25A8, 0x7F3A124E, 0x7AB7CC27, 0x85F90DCB, 0xCE763323, 0x7A484EE4, 0x25E6ED44,
+0x52A1593D, 0x0149B185, 0x8B9EEBCD, 0x2F35C384, 0xA6591AA1, 0x1D3107A7, 0x151EE085, 0x4188EAEE,
+0x9A0B2D06, 0x471A2126, 0x5FCABD35, 0x3ECBA228, 0x319EDD7D, 0xCA8C465A, 0x68249CCD, 0xDFD820CB,
+0xCBB17816, 0xA97F6683, 0xC9A2B3AA, 0x96D7DE87, 0xDD6B7EE1, 0x6C62EFBB, 0x5F0337CA, 0x0F83D673,
+0x5EBDA6DD, 0xDD7C3D10, 0xFC066799, 0x9FBC3B25, 0x4623D3DD, 0xB0FE6731, 0x4ECBC2FF, 0x5C849F79,
+0x9F1897DB, 0x71BC96DD, 0xE67BCC4B, 0x8DA2C0B5, 0x92F3F77A, 0xF92EE3FD, 0x89A181B5, 0xA8499DAB,
+0x61B95854, 0xCCF8E9F5, 0xEE8A65C7, 0xA836E604, 0xC037E869, 0xC9334479, 0x65F7964C, 0x5F39DE78,
+0xAAE13B63, 0x57CEC1B4, 0xD3CA7CFE, 0xD76015B3, 0x4B3B9288, 0x6D48C079, 0xB703CF61, 0x35740AC4,
+0xA301467F, 0x2CA805D3, 0x3D882F6E, 0x71FA9B22, 0xA33C0A04, 0x744903D4, 0x35091EA8, 0xD67822D4,
+0x8E304B2A, 0x779DC84D, 0xF8489870, 0x1067EC0D, 0x252094E5, 0x10E0B93D, 0x05C2EA1F, 0xEA7A915D,
+0x87FD60D3, 0x8074FC35, 0xD549E611, 0xF7E07715, 0xA18D70E1, 0xF5635A80, 0x952BCFD9, 0x0E49EF2D,
+0x579ACD63, 0x5D938D1E, 0x776F7244, 0xE403BC02, 0x38CC14DB, 0x60241ECF, 0x5C7CC728, 0xC5796F4C,
+0x71180F22, 0xF1FEC001, 0x2F88DDED, 0x9F918EA7, 0x755B843A, 0xDE8CA430, 0xAAADDF5F, 0x2C6EEB69,
+0x2A367FC6, 0x6C8574B5, 0xA6CAF718, 0xCBE6E7C0, 0x5C901A1F, 0xB944C531, 0xDB1ACED6, 0x2B376C07,
+0x506D75EF, 0x4488A688, 0x0BF23A09, 0xA7BB7D41, 0xF6A27C7C, 0xA2C9EC42, 0x9D9761C2, 0x0AF2C3CF,
+0xB265C15E, 0x239A7153, 0xBC0A62FA, 0x7CC887EE, 0x6076E138, 0x6E37104B, 0x1702FB6A, 0x50949241,
+0x92D6DB0C, 0x7EABE7FB, 0xFFA309C7, 0xC3613031, 0x12BBE853, 0x3C5AE121, 0xA89882B5, 0x8E371457,
+0xC8897E88, 0xA55B8863, 0x90BF3FF1, 0x39CCCC73, 0x19BCA577, 0x6143FA70, 0x6803DAD9, 0xFC0AC4A6,
+0x5F7AA621, 0x372847AA, 0x84F160E4, 0xFAC32800, 0x6E88005A, 0x70F9FE9E, 0x75068450, 0xAC537FCB,
+0x96399BBE, 0x46B33FEE, 0x85636E2B, 0x115AD7DC, 0xB2020F8A, 0x21D1537F, 0x712EE6F7, 0x7BA50CA0,
+0x384A2F03, 0xCBF4A8A1, 0x7D149EF6, 0xA1F8484B, 0xD012A3A4, 0xA066B338, 0xF8F496AA, 0xDC74BD4D,
+0xB41E8CEE, 0xD4E13883, 0x6681075F, 0x76172A4F, 0x2F0183CD, 0x797E1592, 0x9A0E90CF, 0xEBB21435,
+0x8FBA08B4, 0x9C30AFB4, 0xE22782A1, 0x2FFA210F, 0x654D11BC, 0x31AB68D1, 0xA25A9ACC, 0x995F9193,
+0x1F6BC38E, 0xD07CFB7A, 0x74FD9E39, 0xFBFF90AA, 0xFBD945D6, 0xF805E5DC, 0x87DBD87C, 0xA113B3AB,
+0x0E2948D2, 0x8373801C, 0xD4B8C46C, 0x97144C86, 0x89E5850D, 0x56B1E155, 0x225E0544, 0xCC64943C,
+0x6C0CFA13, 0x6E0F3A5C, 0x282F96A2, 0xEEBD0F27, 0x771CB21D, 0x96C7D5BA, 0x264D9638, 0xEC947004,
+0xF8C543BE, 0xE9E4719F, 0x7EFABAC8, 0x1E647B9A, 0xBD4A9A14, 0x106B778A, 0x69ACC3A4, 0x619F5F9C,
+0xD0BD42D2, 0xF36BBAFE, 0xCFF239B7, 0x16CA52A7, 0x391EE01D, 0x4602C067, 0x0B0C97CB, 0x90529772,
+0x15FE8157, 0xB3C8972D, 0x63BCE8DD, 0x3ECC04BB, 0x22248347, 0xA14D22A9, 0x1182F809, 0x6B0D3920,
+0xE5260429, 0xAFA8BC0B, 0x1F9FD024, 0x2849EFDD, 0xC27FB9EE, 0x9B682EAF, 0x951C4320, 0x101BD9D4,
+0x9ADBAF14, 0x9074D0F6, 0x302805A5, 0x97CFAE71, 0xF7275454, 0xF5BE8849, 0x7A2E8CAF, 0x6949813F,
+0x2A114208, 0x04154BFA, 0xF00FAF04, 0x1DBBBD02, 0x21699F8A, 0x87862B2C, 0x483AA0CD, 0xE33003F5,
+0x7F8F2F73, 0x230B80C3, 0x21271421, 0x4209A103, 0xB11FE2A7, 0x8C40732E, 0xCB284A5B, 0x8091926A,
+0x369843B4, 0x56242C1D, 0x26454C01, 0x12ACBD51, 0x54DFEAE3, 0xCD71CB1B, 0x0909ACC4, 0x233D4CF0,
+0x7DA58505, 0x6EFF56D8, 0x07094DAE, 0x4EF1E7A2, 0xFFCB1E77, 0x44013A96, 0x2C4FAF50, 0xB86B06DA,
+0xA7292C38, 0xDEB11D10, 0x58D93A37, 0xE8812A41, 0xDE87FFA8, 0xBD83BB1B, 0xBD6CE0AE, 0xDE630256,
+0xEBF71125, 0x817C4538, 0x52753EF2, 0x5D246DEA, 0x20A0E21A, 0x8387ADAD, 0xAED32A5E, 0x5F182C56,
+0x2B23983D, 0x15ECC944, 0x00407AC1, 0xC6C4CD65, 0xAAD58D38, 0x0FE01094, 0xD69731F4, 0x6EB5FA33,
+0x581F6B7B, 0xC0BFBE18, 0xA4D7ACA6, 0xEA3190F2, 0x269698EF, 0x0441742C, 0x6F534357, 0x3CC2E0D2,
+0x14E410B1, 0xE5A70771, 0xFF55EBCE, 0x172B7F20, 0x4AA314B3, 0x69435097, 0x8CD002C2, 0x2DFA4497,
+0xA5F0CD2B, 0xBBA26EC7, 0xAEA752C0, 0x69895AA9, 0xCEEC78D7, 0x42B91422, 0x659DC35E, 0x67519A8A,
+0x79FCBD92, 0xCF7EE746, 0xEA621809, 0x5FA3CF4D, 0x02F39BBC, 0x6D46BBA4, 0xF0E9069D, 0xFD793EA1,
+0x70DDBFFE, 0x399A65CE, 0x453B7284, 0x70355AB6, 0x0D14DB19, 0x8BA8D341, 0xCAABC1EB, 0x4E2E449B,
+0x95F00A16, 0x8EFB5A6B, 0x4FF24BB1, 0x04802DB4, 0x9C8569FE, 0x05191AE6, 0xE7DFF525, 0xEF4932D3,
+0x3ACB9FA7, 0xD269BE3A, 0xD434E508, 0x5153DCF9, 0x3CF3208F, 0x470D4376, 0xF46AA41F, 0xCB9C9C46,
+0xA8456976, 0xB024969A, 0x6B03E24C, 0xB30D128A, 0x88677707, 0xA3159CFD, 0xA6FD329B, 0x30A4454A,
+0x5E2CB01B, 0xD5E0F5CB, 0x1CAB95FF, 0x79C9F0B5, 0xB8F3D7C9, 0xA3FCC591, 0xADFABF59, 0xB32D78A6,
+0x641E6ACE, 0x08D9C498, 0x08EFF142, 0x2BA99138, 0x0DDA0A71, 0x05C22216, 0x1BF05B76, 0xA3B44A15,
+0xFA30C07B, 0x380E0F2D, 0x9649A559, 0x6F76CD40, 0xE4E5F567, 0x8F212E63, 0xB9A2578C, 0xC07CA12C,
+0xB74B678C, 0x47E8EFFF, 0x70AA85DD, 0xFE78012B, 0x0DC794DE, 0xFEFE3E8F, 0xB8DBABA9, 0xE937DDFD,
+0x7AFF870F, 0x0236EA69, 0xA0A94817, 0xE5E94CA5, 0x4CDF4B79, 0x04412B6C, 0xC052EF19, 0x83FE886F,
+0x48FDBC94, 0xA0F32659, 0x86022216, 0x89F3A9A4, 0xEE5721C2, 0x048A289B, 0xD55C4EBB, 0x7F7C76FE,
+0xB9431CA4, 0x5C5EF0C2, 0xE4118DE6, 0xEC55B9B8, 0x9C07EA90, 0x0726FCC2, 0x60055B56, 0x8B77A672,
+0xE5113CC7, 0x4696F341, 0x84152552, 0x577831C7, 0x17DDFF99, 0x738435AB, 0xF1D52733, 0x6B0EB4C6,
+0x29117C81, 0xB8ABEFF7, 0xA4DECF58, 0x25990DD7, 0x8EB570A3, 0x112F3857, 0xC7920260, 0xCE895926,
+0x7C3B5A78, 0x7D999F89, 0xC4622B47, 0x146BF5A9, 0x14636242, 0x6E1164AF, 0xC0E40F8C, 0xCDE9B3FE,
+0xB1A8E76B, 0xC75373EA, 0xC1AC7402, 0x33A10C98, 0x08EF9CA6, 0x8C1D8070, 0x06EE4359, 0xA7C5CD64,
+0xD3FED4FD, 0xDB49E91E, 0x3FDDCAA0, 0x5B1AC483, 0xCAF9FD4F, 0x184AB609, 0xF93173C5, 0xD40228B9,
+0x5503553E, 0xA4A41290, 0xC1415566, 0x6DF10206, 0xC56C1B6B, 0xEEB8F8C7, 0xCB7C3F54, 0x21BC2C30,
+0x9A4CF955, 0x5257CEA3, 0x73A0B4BC, 0xEA24B74E, 0x26E7E2C6, 0x22B37D85, 0x5E242E46, 0x0711038F,
+0x5620B9CB, 0x6CF9173F, 0x01A00C0B, 0xC47E2B7F, 0x42C50B67, 0xF4F74EAA, 0x87F510B1, 0x4FCA2BE8,
+0xDBF15CF4, 0x04668A3A, 0xDB080359, 0xFCCEFEA5, 0x4EDBD7FA, 0x0357EF45, 0x19E7DA70, 0xD6C3891A,
+0x2B9C7EA0, 0xD7DF4D77, 0xAF9065C0, 0x2BD39A55, 0x0AD4036F, 0x8A298335, 0x52A3F7F5, 0xD0A8657A,
+0x2E016994, 0x23A0019A, 0x1CF18D3D, 0xF1793725, 0xEA6BCAD2, 0xFECC0512, 0x69D0EE6B, 0x300C9947,
+0x880DD287, 0x652150F6, 0x95635A9E, 0x748ED0A3, 0x1695E7FE, 0xD89733C1, 0x21B34049, 0x2D9497CD,
+0x2CB97081, 0x37CED5A9, 0xB9136612, 0xD6DB03AE, 0x811362B6, 0x67F8B280, 0xFDB0022C, 0x2E1B4F76,
+0xA87CEA01, 0xE08AF03A, 0xCDAD3250, 0x040C28A3, 0xC962FC6F, 0x44170E5A, 0x2C1B5DCD, 0x5C6F08B4,
+0x9F7B8DFE, 0x055EDA4F, 0x708715B3, 0x96639EB8, 0xA3DF7C9A, 0x237800E9, 0x8EFD5F77, 0xB12AA966,
+0xC4516C49, 0x54C52528, 0xD6D3A3E1, 0x6C01007A, 0xA0A8BECC, 0x4C7F3D7A, 0x80F917BA, 0x1B6954ED,
+0x080DBFD3, 0x0588DC9C, 0x9056EDA3, 0x2561554A, 0xCFA5CC0E, 0x77235C56, 0xC43BB8BB, 0x4A46E2D2,
+0x8952B27B, 0xA1ECACBB, 0x9A19C704, 0xCA5CE4EA, 0x3419633F, 0x82632F43, 0xB5E4321D, 0x76C7C72A,
+0xD2FDDE75, 0xD7736EA7, 0xA5BAC47B, 0xCA8D8C7F, 0x26153433, 0xD210FD8C, 0x9D35DA96, 0x6EC7C54D,
+0xDD51216A, 0x6B0A2EF1, 0x88C8C3AA, 0xA47E35CF, 0xDDF875D3, 0xCA2D0EAC, 0x21C6F026, 0xD99CC58C,
+0x84DE75CB, 0xDAB3EC6D, 0xDCFE2C60, 0xF4D7A616, 0x09CF70B1, 0x235B3BA4, 0x6054285A, 0xE38C6435,
+0x91C4821D, 0x0D5815FF, 0xD89B0253, 0x15D19B66, 0xFC335C42, 0x20DAAA1C, 0xD2A0F16B, 0x096741E1,
+0x5C12489D, 0x74EEC058, 0x35EB45F0, 0x37F35795, 0xB1953242, 0x41610845, 0xBE94C01C, 0xF59179E0,
+0xEECBAAF6, 0xE4DCBA0E, 0xB6EB7877, 0x454828DA, 0xC1E74063, 0x049F3598, 0x35ADA9E4, 0xBB776343,
+0xFF95EEE5, 0xAC4BD43C, 0x8D9D62C5, 0x35FE598E, 0x0B0BFEC0, 0x01A0402D, 0x216495EB, 0x0DD97A36,
+0xBF873E23, 0x174E3F47, 0x356A420A, 0x1A7772C1, 0xE4A44075, 0xC6D825BE, 0xC7AC4C00, 0x93DC7525,
+0x3D33D228, 0xE708CB36, 0x097E648D, 0xDF38F112, 0x66CF3201, 0xFEF3AEB8, 0x95E5E9FB, 0x0AB11C27,
+0x4B9B2A35, 0x504BD97E, 0xF6CC3BE4, 0x63E2BAD2, 0x967A534B, 0x5D064D7F, 0x9D5385AC, 0x87730C86,
+0xA28299E1, 0x3A498CA0, 0xC1FC1225, 0xDE61625A, 0xDC150629, 0xDEB1F259, 0x7DDE20CF, 0xD4735A38,
+0x230DAB21, 0xAD752F67, 0x899F9963, 0xDD76FEDA, 0x08C89F90, 0xBF3DFF64, 0x5DF12700, 0x27ED3B44,
+0xE4646F5C, 0x6CCCFF90, 0x6DAEF6E4, 0xF92D58F4, 0x9A8D70EE, 0x8F41CD4B, 0xF232CD54, 0xB0B920A9,
+0xA1495FA9, 0x98BC5EAC, 0x23FB6120, 0x1877795E, 0x1AEB9993, 0xB09DBB35, 0xDC5DAF9D, 0xD4ECF14D,
+0x5BE827A0, 0x72B4FADB, 0x33E9DBA8, 0x112D2B51, 0x1A973D41, 0xBA445F07, 0x80BFE95E, 0x6ED2D10C,
+0xC5A6798B, 0xA2DA752F, 0x83C85CDA, 0xE9E79989, 0x6139A1BC, 0x35930DD5, 0x0007AC6D, 0x2DC81374,
+0xCE668BEC, 0x1503D440, 0x267048F5, 0x9E84E08E, 0x334B8D26, 0xFE14EA1E, 0xE056A2FB, 0x37B34EFA,
+0x66CF37C9, 0xFD7041F0, 0x56A11AA9, 0x3FE4645B, 0xF4CF037B, 0xC9A0C614, 0xD393AC34, 0x5894877F,
+0x266E1F36, 0xFB546F00, 0x247EA7BF, 0xC402F5E9, 0x27552B9A, 0xB2018328, 0xA0243327, 0xFE288804,
+0x45D5693C, 0x2FD3AD1A, 0xE629BD49, 0x3E6D69F9, 0x95AD1190, 0xD44DC254, 0xDCE1FA55, 0x19EE981B,
+0xA20B3C0B, 0xBB053CAD, 0x1C5DC555, 0x4BF9B1D7, 0xC7B68A4E, 0xD7CE1D39, 0x9781FD1A, 0xE65DAB64,
+0x70592BCD, 0x01857227, 0x938E6F4B, 0x2773A880, 0x3C4614CD, 0x4EBB1862, 0xC634ECF7, 0xAC0089A1,
+0xD94D9AD5, 0xE6ACFD17, 0x92CE5F6F, 0x23DB4EB8, 0x29479074, 0x1D9F3AE5, 0xCA48D1AC, 0xEBD4138F,
+0x04551A43, 0xD147AC3E, 0x35289458, 0x660C5C63, 0x6B544364, 0x3908F5EF, 0x81ACFD2C, 0xA2D303FD,
+0x5E7573AE, 0x8C9D4E82, 0xC2B231D6, 0xABFCD763, 0x9D9E5824, 0x11D0A863, 0x28982D6E, 0x8D8E0D14,
+0xA4220B5B, 0xF807E5C6, 0xCB24E39A, 0xCA032549, 0x09B7EADE, 0x035620A7, 0x099D3E2A, 0x3964D9D8,
+0x3F11FF14, 0xE96CC0A2, 0x16927B06, 0x7850CE20, 0x27E2C70D, 0xE647D3CA, 0xA7E8F5C9, 0x2C5E1B4A,
+0x217CF6F7, 0x8B1F9431, 0x6AA68A4F, 0xB028940C, 0xF420979B, 0x80C1E643, 0x61B500E6, 0x1E266BAA,
+0xCDB052D7, 0xDA728084, 0x3C4DE83C, 0x9EC365C9, 0xA8C9B3EC, 0x50279C45, 0x613C6447, 0x716206C9,
+0x9C5914D8, 0xBD3EAFB4, 0x15BFF53E, 0xE5972A7A, 0x0832DDAF, 0x0B7320F7, 0x4EC8C962, 0x618602A8,
+0xB6770429, 0x9E65ECD5, 0xFE895C5B, 0x69FF382A, 0xB728D097, 0xD51D1010, 0x0F0AFEF9, 0xAFBA03A7,
+0x15FC83A8, 0x3AEEB118, 0x1537C9C3, 0x7F425C16, 0xBC76CD23, 0x970A42E8, 0x0242CBCD, 0x83FE2B06,
+0x6642413D, 0xBE4AD24F, 0x1020EDF1, 0x7F0D4663, 0x8E4C5C47, 0x18CE27A3, 0x63F48CD3, 0x275C379D,
+0x970862C4, 0xD966A2BA, 0x4B0C2634, 0x21CC4642, 0x4BD699FB, 0xA662C8CC, 0x5F2C9595, 0xAB0AFAB2,
+0x158F5F87, 0x868DEB5B, 0xC9EE6FD6, 0x5FFC242E, 0x450A9F37, 0x12EC566F, 0x136C94B9, 0xBA617379,
+0x53498D9C, 0xEC09D94A, 0xF1F25DF5, 0xAE96A2C2, 0x86FBCE2D, 0xAB941DC9, 0x0654D221, 0x57EDD712,
+0x9D08498F, 0x6ED43E68, 0x05197400, 0xCF4AA911, 0x79AAE513, 0xA067663B, 0x3B6B0663, 0x0232D57E,
+0xB9CA4A1A, 0xF072331A, 0x4C8D26BB, 0x2F2B1D27, 0x868918D3, 0xDB7ED78F, 0x64839ADA, 0x40151E11,
+0x6E0E61F5, 0xE3359B31, 0x29D04AEB, 0xF29B312D, 0xFDC35CCD, 0x2DF80844, 0x2B16E7CD, 0x494334CC,
+0x8B08BAEB, 0x155B01FA, 0x7DF68A7F, 0xE4A16C60, 0x3535A3FB, 0x2C927402, 0x534C22FB, 0x8729E412,
+0xB526554F, 0x23581F14, 0x093EFB39, 0x72AD8FC9, 0x5D0C2294, 0x668BD32A, 0x9E354B1E, 0x27AC7640,
+0xA31C3659, 0x77715A06, 0xB2F9EE25, 0x49E72FC1, 0x363F6345, 0x13390B93, 0xA080ABB9, 0xCC022657,
+0xC4A73042, 0x6C5E717A, 0x970BE40F, 0x7343ABF7, 0xB31D916E, 0x169B1E63, 0xA8007D38, 0x668D97CE,
+0x75F8620C, 0x6D55D21A, 0x5B85D52F, 0xF2F609DF, 0x04F4DE12, 0xCE8684C5, 0x868F7811, 0xBF3680BB,
+0x56650838, 0xF43CB060, 0x2CADDB00, 0x61CE35EB, 0xF72F0885, 0xF704E126, 0x0237C276, 0xC0D3174E,
+0x2BD69FB4, 0x45D0D5CF, 0x486A9E14, 0xF9340C0B, 0x3E5A497E, 0x9E5F8618, 0x0309E2F5, 0x32CC45F1,
+0x901AED73, 0xBA813526, 0x7423513D, 0x67EDC6BF, 0x7FA6072B, 0x6AD06A39, 0xEE303E8C, 0xD4B1D5DA,
+0xC07C5AFE, 0x35658BC0, 0x9541EF67, 0xFA50D3E8, 0xAFB2DDEC, 0x7C9F3407, 0xCBE35D94, 0x77E2FB59,
+0x34121F01, 0x96FA5F46, 0x632340C6, 0xBD24B32F, 0xF0AA4CB8, 0xF7A1E0E7, 0xBF526B67, 0xE9A97452,
+0x4D7F4DD3, 0x98739B2D, 0xA72D710C, 0x4F26029F, 0x7142BF6E, 0xF052DF2F, 0x3B1EE526, 0xD89E483B,
+0xAD00DB33, 0x4C153AAE, 0x12754715, 0x2342BB2C, 0xF87879E6, 0xD821B638, 0x1F7DEC6A, 0x284EA412,
+0x4B910F80, 0x9E688224, 0x153FF659, 0x31129D33, 0x0241BB9F, 0xCA816636, 0x47288330, 0xF606D238,
+0xC39B0CE4, 0x6C897087, 0x15EB4379, 0x5E350CAF, 0x704594AC, 0xF72FAF05, 0xD5C4A335, 0x1964F28B,
+0x76435D85, 0x8DB079C8, 0x151BB1B3, 0x1B471C5E, 0x18BD2F0C, 0xB4A9A3C9, 0x53E9AFC5, 0x416C61FF,
+0xF435DD5D, 0x55B3353B, 0xFFCF7AB2, 0x886C762B, 0x6FD3E847, 0xA747D048, 0xDFB4BDF9, 0x2E107F3E,
+0xBFBCAE22, 0x7ED74CF7, 0x12711EF3, 0x3D36C697, 0xECE9B734, 0x99B9E50E, 0x4B897A9A, 0xA3564B55,
+0x5EFEE874, 0x7DE70ACF, 0x224854CF, 0xA5CB547D, 0x7A01D811, 0x176BB532, 0x10637608, 0xFD8758A0,
+0x42ED17C0, 0xB4A710E6, 0xF3480F0E, 0xB4320358, 0xBFD16477, 0x285C26C7, 0x08FD97A1, 0x5D04E877,
+0x23A48826, 0x5F804D9B, 0xF7E80AF5, 0xBD6324A2, 0xF33DE98C, 0x46A0E7F0, 0x8B7A04CA, 0xE0EC7434,
+0xEC1591D9, 0xC362D67D, 0x9EC41882, 0x9ECCAC25, 0x60887BBE, 0x7B91746A, 0x5F95E329, 0xE22D9467,
+0xEC596A9E, 0x1CFF95E8, 0xFD538DB3, 0x6868B6FC, 0x6ADA8A41, 0x4F6B26F4, 0x7E897B05, 0x5757DAAE,
+0x1DF016C8, 0xD4A40804, 0x36E316F9, 0x974C728A, 0x4CCD2110, 0x52BACE0F, 0xE365A94E, 0x48FF7300,
+0xFDA17ECE, 0x1B48580C, 0xFF98264C, 0xBFDF81EE, 0x65DD077F, 0x1E7BC0D7, 0x11A4EE75, 0xBB3AE49A,
+0x75BFFEC7, 0x7BA6DA39, 0xE17D963C, 0xCC4548BA, 0x8E9993D4, 0x66E2E2DC, 0xB9C85D12, 0x2CF42B66,
+0x70111F71, 0xC0FE0C6D, 0xF12283AD, 0xF892D999, 0x0CBF5623, 0x4837FDC9, 0x45F05120, 0xCFE687DC,
+0x9207F337, 0x073DC33B, 0xB3009E66, 0xDF082DB8, 0x820085F4, 0xB02C3DA0, 0x614A3DD4, 0x5B3E0585,
+0x8FE0BCC8, 0xB2A96313, 0x7F6FBD8D, 0x60BCF576, 0x81EE41B1, 0x288245A7, 0xF3630E79, 0x0499D21F,
+0x7F0C547B, 0xE5269378, 0xF71CB069, 0xC60E4BBB, 0x8BC3812E, 0x964C5557, 0xFC38CB6F, 0x9D485DAC,
+0xB39812D8, 0x744A19F6, 0xF23E83D2, 0xC16BF730, 0xE568D382, 0x25BFF269, 0x873C26BC, 0x7911C6AE,
+0xA5FF08FD, 0x07EB9141, 0x0873C591, 0x24283899, 0x48D2A7CD, 0x0C3CC10A, 0xF1B2A109, 0xEBA445D3,
+0xB00BB976, 0xB87985B5, 0x0585297E, 0x86AA6079, 0x4BF0633B, 0xDEF62E74, 0xBB3AF095, 0x3A69711A,
+0x615854B6, 0xD5D86808, 0xD1EA77F9, 0xD075A75A, 0x6AF41A2F, 0x8F975A37, 0x84B56474, 0xA3E55D0A,
+0xCAB264D4, 0x262F0EC2, 0xF2B041F2, 0xCB845BB9, 0x95A5B54B, 0x37062BE7, 0x21E51E9A, 0x71DA1B76,
+0x9CA1FB14, 0x445A77C1, 0x25267A77, 0x8E3E8181, 0x3A7E5C30, 0x02B4BBDE, 0x744A6C9B, 0x69FEB17D,
+0xA2ADC47B, 0x5B93D38C, 0xD656416E, 0x89C9BD5E, 0x739D8E0D, 0x99392899, 0x7A4497CB, 0xB06A288A,
+0xA166FCAC, 0x21CF2A35, 0x06C9B3EC, 0xFBEA1008, 0xDF863B8C, 0x739F0C34, 0xC68B97D7, 0x52FD7352,
+0x33377FA3, 0xA346C384, 0x4F7B2113, 0x6EDF5EC4, 0x81E6AC6E, 0x1E7BC567, 0xB2C98DFB, 0x3EA1135D,
+0xEBF55340, 0xF51BE270, 0x64C62461, 0x552F1E20, 0xB9FA5354, 0x545E7DC7, 0xD963EB8C, 0x580FB050,
+0xD45BC642, 0x20C303AE, 0x405C05F1, 0x499DBA9E, 0xA6450B51, 0x1ED340D5, 0x03130800, 0x09423970,
+0xC930F092, 0xAA1A9508, 0x03503254, 0x2DE1605D, 0x0DA0D33D, 0x06EB2972, 0x95079176, 0x78FC657D,
+0xB278B6D2, 0xB73AFD78, 0x7992466C, 0xC1BFF487, 0xC7B2250D, 0x2B45F4BA, 0x7AC4F221, 0x1C0CDB95,
+0x1D2B15D2, 0xB38AC383, 0xD4EBDE1F, 0x4CD52742, 0x6C0EC81A, 0x153B3432, 0xF11BAA12, 0xA7798762,
+0x0EA0CBDF, 0x85233D19, 0x801B9E28, 0x51285B16, 0x85F062D8, 0x56E227B7, 0x84D00AE9, 0xA3FB62DE,
+0x0C138963, 0x2BEB5DC8, 0xC159E31A, 0x5292A044, 0x2944B6F5, 0xC7D416E9, 0x4679572B, 0xAE8E9E64,
+0xAA961FF8, 0x45C340CA, 0xCDC9883F, 0x3B526D70, 0xC1D8B19D, 0x4A52EE51, 0xB859AB81, 0x8A69593D,
+0x1BB3D655, 0xFB0BB9C6, 0x7F7747EF, 0xB932FA77, 0x07D16E42, 0xE0D4E1AA, 0x86BEB763, 0x5EB8E25E,
+0xBEB7F990, 0x38A66BDE, 0x0A9CDF5C, 0x1495D296, 0xD9CA701F, 0xB322ADE2, 0xC00BE820, 0x8480BD8C,
+0x159A2CA3, 0xF43F4C2F, 0xB8DA3C80, 0x1256A60C, 0xCE8CFA0D, 0xC1E3BB53, 0x804F296F, 0x8D7501E2,
+0x877A5D42, 0xEB25911C, 0xB656665C, 0x7D317A8A, 0x6D709C91, 0xA65D2AC3, 0x74815F92, 0x52E53C84,
+0x341D8D59, 0x2A0F040A, 0x7FCED632, 0x98D08163, 0x6887F261, 0xCD148089, 0x9E559D83, 0xAAFF21D1,
+0x552A91DE, 0x537A6807, 0xB5B87547, 0x255C158E, 0xFC8CDFB5, 0x04F16A33, 0x427238E3, 0x56262B5D,
+0x7DF544C0, 0x0A8C2F65, 0x5457B250, 0x73747E22, 0x75B61442, 0x9FD08805, 0x23796528, 0x8A9D05F2,
+0x02AC7F17, 0x25F4C9A5, 0x2C6EC210, 0xFE30DDEE, 0xABD301CF, 0x42EAAFFC, 0xA7B0632A, 0xFFC7F959,
+0xC048456D, 0x85601627, 0x25A8B5CE, 0x77BB93D5, 0xB8AC2ECC, 0x7324607B, 0x52FCD408, 0x0FF52A50,
+0x499FAC98, 0x3D46EC1F, 0xBA624AEE, 0x29343C66, 0x0D498207, 0xBDD0246F, 0xD6AF27AF, 0x03AE8225,
+0x226E60E6, 0xDC7D2D72, 0x82FB0CB6, 0xF86454CB, 0x3C5D6597, 0x2A234C71, 0x582D3A23, 0x6E30ED25,
+0x7C235ED2, 0x9BD1CD8E, 0xE8255C57, 0x438978DE, 0xCFDF0909, 0x7AD29EB5, 0x140422FD, 0xE9C51416,
+0xDBD5B281, 0x6B60FDC7, 0x667B05A4, 0xB2A1FF0B, 0x8A265EA3, 0x5AC6FC81, 0x1F99EECB, 0xE06CF4C0,
+0x28E084B7, 0x4CE4FA5C, 0x4BB172FB, 0x42DADC2A, 0x067118FF, 0xD0FD6F7D, 0xD382F568, 0xB38CBE6A,
+0x2339C065, 0xDF06B518, 0x04DB606B, 0x150BA130, 0x905175D9, 0x889DFAB3, 0xB4F72F4F, 0xBE07CE3E,
+0xED97BE9D, 0xF50C6182, 0x25B852A1, 0x1BE709CD, 0x00C0FA06, 0xB7D0B293, 0xBA676608, 0x47B30FD4,
+0x6E3DD0FC, 0xF868D131, 0x753FD92E, 0x0BCFFE38, 0x7524AAE6, 0xF101002D, 0xEF2940E7, 0x0E90A1B5,
+0xF159EE28, 0xA7B87790, 0x5C474E69, 0x2EABB31B, 0x41DCB2DB, 0xE8BF2BC1, 0xD9408B49, 0x5708B7B3,
+0x462A6DC9, 0xA58AD06B, 0x48B500ED, 0xF0B84AF3, 0xE1CAAF6A, 0x7660B3A1, 0x52046D15, 0xDF19E8DE,
+0xF74070E7, 0xDF9C1C39, 0xE4CE118B, 0x69307239, 0x7BD01868, 0xA96A52E6, 0x4109B89C, 0xD320DF40,
+0xFD21670C, 0xD22724B6, 0xB7A70D4B, 0x10F10842, 0x3156F7C5, 0xBEF36EC5, 0xB0E06C20, 0xF7DC0034,
+0x59EE2898, 0xFF72A0BA, 0xA6B0CBE9, 0x8B4C0C53, 0xBF3B680E, 0x43E5FA55, 0x9F192B7D, 0x4B6561AC,
+0xFAB89919, 0x4367EAA6, 0x53A63FC9, 0x24C30D36, 0x37B12989, 0xBA35DBA4, 0x520D072C, 0xDE65BCFE,
+0xB2BE252C, 0xD6BC607E, 0x37D61556, 0xF07E7C13, 0xAEA0DEEA, 0xAEC5611B, 0xC122E9E2, 0x219B55BF,
+0x35F88F8F, 0xFB0D3357, 0x64542554, 0xA0B01424, 0x461E731F, 0xE2AD76D8, 0x0D9F4274, 0xCC2702D9,
+0x624F42E1, 0x7EC67254, 0x6E3DD12C, 0x76E4EA9F, 0x3663D7DE, 0x2F0B1DE3, 0x6CB9BDB3, 0x97E72A00,
+0xECD8E1E1, 0x2E11262D, 0xDDE581CA, 0xBB4FB126, 0x47780CA2, 0xD06DD577, 0xF2C61D90, 0x54479CD1,
+0x9FAD1BC0, 0x8F981889, 0x567ABF1F, 0x6A36896D, 0x8FE6AFC0, 0x16B40217, 0x79659624, 0x39C65776,
+0x8F877F23, 0x2B6D9FC2, 0x3EB21BA4, 0x8831B14A, 0x46A12DC8, 0x3652BDF5, 0x52D0F3C7, 0x3B223FB2,
+0xB6D26234, 0x03715DA3, 0x8DE115E1, 0x0B466905, 0x13C5CD4D, 0x37B7E0C8, 0x99CF1AAC, 0xEE9A2463,
+0xE5C51115, 0xE454CDF3, 0xDBBA4719, 0xE65118C1, 0x5025AD41, 0x9964C320, 0x27BF7CC7, 0x97C9CD24,
+0xC4E680AD, 0x62FF8E85, 0xDB293555, 0x3E41CA0E, 0x755F51C8, 0xB98B32CF, 0xAE3B5261, 0x1C568861,
+0x4A822003, 0x1E8CED93, 0xCEE738C6, 0x79FEBFCD, 0xBF02B1A3, 0x65413267, 0x6A53D405, 0x56BDE411,
+0x88ED74CF, 0x8B3770A0, 0xC4C5F50E, 0x8DA0A7A4, 0xD2FFBA24, 0xE42740ED, 0xAC2755AA, 0xF9FBD89C,
+0x065F1A82, 0x73EE8B7E, 0x452615DF, 0x9A06BC9F, 0x379DE38F, 0xE1D6FECB, 0x8113C57F, 0x3F2DB44A,
+0x9C78D647, 0x85620625, 0xB162CBA1, 0xCE4119E1, 0xEF707515, 0xF0559624, 0xAF8F216A, 0xA6AAA7CA,
+0x86EF3D92, 0x4F472A1F, 0x3725665D, 0xDFA61B0D, 0x5F9492F5, 0x85F72D28, 0x23F64B5C, 0x79B567AB,
+0x8BE74765, 0x98D6DC55, 0x002E5721, 0x11A19981, 0xDE2FC7ED, 0x5FE83674, 0xCE9C6FD7, 0x506422FD,
+0x6E14C61C, 0x9F0918D8, 0x2B2D20F2, 0x444EF5EE, 0x606D0DBE, 0xB9D74E7D, 0xE85D0BF8, 0x6DEFC9E6,
+0x3CDC3CDE, 0x7FA63B2C, 0x6E9045A1, 0x8419BAA7, 0xCCD943A3, 0xC1F7AF89, 0xE2F77BFE, 0x1873262D,
+0xB342F617, 0x29A17F50, 0xBFF56D20, 0x8070F707, 0x9F4588E8, 0xB612DF52, 0x9E88606D, 0xA86135C2,
+0x9E33A05F, 0xBF32E10A, 0x5C1A1F90, 0x29122B11, 0x3D99248C, 0x380C980B, 0xFBEEF11B, 0x778451B8,
+0x143605ED, 0xA8C749E4, 0x778AB490, 0x80F349FE, 0xEE56956C, 0x03EE6856, 0x5D1F89B7, 0x676183F5,
+0xD56BE6A8, 0xA2501F95, 0xFB8BD976, 0xEA1E16A6, 0x47F52109, 0x547E7678, 0x967D8710, 0x2042B4C3,
+0xB21A0DEF, 0x3BC787F6, 0x4B14111E, 0xD869E374, 0xBEF6AD1B, 0x28717EAC, 0x383D55D1, 0x9F01E76F,
+0xCAD6D50C, 0x75F3A963, 0xA859FD6C, 0x28171792, 0x11C02E05, 0x4CB7E3DE, 0xB3255E30, 0x106C050D,
+0xB2B53A61, 0x4B05205B, 0xAD925ABB, 0xC6BF9686, 0xEC68490F, 0x39C70CF7, 0x16FED8C7, 0x27BA92E3,
+0x62C5E4DD, 0x453E9D9E, 0x5A561046, 0x33CBA391, 0x4A5F5D1B, 0xCB03C86A, 0xFEF8CECE, 0xA929E503,
+0x6E7E624D, 0x08204E2E, 0xB582D058, 0x09224AF6, 0x3FFB70D9, 0x2BB15A19, 0xA52DB0DE, 0x01329430,
+0x90B0898F, 0xB83FBEE1, 0x2D3A747F, 0x31135012, 0xD9656B23, 0x2D3D3D68, 0xD2AA104B, 0x17EFE358,
+0xE3BAAD89, 0xBB6C387B, 0x47F3AC9E, 0xB78FF47E, 0x7EAD9E9A, 0x6BB79AB2, 0x8AAC196C, 0x1146D3AA,
+0xCF7453EB, 0xF0FE7D16, 0x49D6C647, 0x3EEC835A, 0x5E9661D3, 0x97A912A5, 0x8C18F518, 0x0F05270D,
+0xD0F4FEC3, 0x3AB47E0F, 0x926ACE6D, 0x65CBC498, 0xBA4086A5, 0x3BCD1C00, 0x699479F6, 0x7BBD7980,
+0xFF52E385, 0x49DD2D9E, 0x473CE3CA, 0x098C9517, 0xE6CCCB04, 0x3BDED97D, 0x3C89A2B8, 0x272FF2FE,
+0x49AF9D09, 0xA8FDCBD5, 0xF58A1D4C, 0xB1065426, 0x3FFA4CFF, 0x9557A6B4, 0x5402AD35, 0x8756A64C,
+0x53E8D14B, 0x4DCE7AE7, 0xCA47BA40, 0xD13CDE03, 0xC28FB861, 0x08592B47, 0x707FDBDA, 0x39205414,
+0x05A44D65, 0x7C7CB4DD, 0x197EE68E, 0x884C4C24, 0xEE046FE6, 0x6DD7E0C3, 0xA685D3AC, 0x820A643F,
+0xD6612232, 0xAED49F63, 0x447E5F89, 0xF0894793, 0x63A5DB6C, 0x84BDAD5F, 0x4319F8F0, 0x74FC6E49,
+0x47E85A3C, 0x57FB7F73, 0x4095D21B, 0xE5242524, 0xAF3593CA, 0x6B5A964F, 0x6E164024, 0x71AD962F,
+0x5A189FAB, 0xCF5E9825, 0x0AEBA7F3, 0xFC450763, 0x28BEF433, 0xDFFC3FE2, 0x20045A8F, 0xE3694168,
+0xB85A011F, 0x78EA3FF2, 0xD6163276, 0xB5ECCED2, 0xA81E96AA, 0xBA3AB11A, 0x5F9A776D, 0xCA84DCB5,
+0xA7B8EDC3, 0x21659650, 0xAA26350D, 0x97922094, 0x3A07CE1A, 0x70DCB07C, 0xE55D0A49, 0xFB688415,
+0xE35A2D9C, 0x632CF582, 0x85C76C53, 0xE30C3E9D, 0x211E0E50, 0x05976574, 0xD359DE1E, 0xBB611534,
+0x4D9FF10B, 0xD31B6375, 0xB2788C63, 0xE8E2374C, 0x49DDE046, 0x3D5CDFEC, 0x70CF458B, 0xAD88F6E9,
+0xDAF95880, 0xF1ED05D8, 0x165BCBA0, 0x450A5829, 0x3CB1F77F, 0x9A622B96, 0x2F2B8A82, 0x444FD639,
+0xBBC0549A, 0x9988DF65, 0x8AD0A572, 0xF0B4D7DB, 0x18105AA3, 0x90DAA7F6, 0x541D244F, 0x333B1F82,
+0x3A8D7E1C, 0xCE9EE462, 0x55EE3597, 0xB5351039, 0xB79A7CE5, 0xF314478D, 0x7E914D91, 0x405B16ED,
+0x65BB63DC, 0x0D2B9237, 0xDA54799A, 0xDD6B3E2F, 0x0C896C5C, 0x9097F721, 0x4E419998, 0x84115A65,
+0xFBE74550, 0xEDD5F717, 0x8D609E3F, 0x868B6F1C, 0x786F4758, 0xFA14BB7C, 0x2E97E4F9, 0x45EA07AB,
+0x322EC337, 0x90AA7FD3, 0xCEF54251, 0x38AF8287, 0xE44CCD17, 0x339D2BE2, 0x48065FB5, 0xBA6252B7,
+0x4E1FB3C7, 0x7BE96AEC, 0xB100D667, 0xC272829D, 0x170237E0, 0x2D89FDAB, 0x3C5B7435, 0x9B2DCD61,
+0x44CB33E1, 0x0FA2DFCC, 0xC33CD9BE, 0x2E2D57FE, 0xDD376F22, 0x3922C4E5, 0xA7E3087C, 0xB14A5ECE,
+0x390599C7, 0x3D17BCFC, 0x03611AF6, 0xC7823F41, 0x5E77CC1E, 0xA3B58D1A, 0xCF45B9F6, 0xA7521F56,
+0x9EEBA2AB, 0xB415B7A9, 0x22E23831, 0x87FB9F93, 0x7F828C95, 0x5B2A1551, 0x0DC5745D, 0xD0FCB903,
+0xD4A59A16, 0xD8CE1F21, 0xFA42DBEF, 0xA64956B5, 0xCF2E486F, 0x7DEAA05C, 0x06019FA2, 0x1E167764,
+0x1F5685EF, 0xDD8DF3C1, 0x82DF8D3E, 0xD5B8B903, 0xF287018F, 0x02A8AB01, 0xBDC01806, 0x4471C480,
+0xEA5F5FAB, 0x8DBD97A3, 0xB70AB2F0, 0x2B0F89EE, 0xEF9D8CC5, 0x1C297BAA, 0xC9E256F7, 0xBE180FCE,
+0x9E21B59D, 0x37ED8208, 0x6BE58039, 0xFAC10E6B, 0xEC84A0B5, 0xCE6E13A3, 0x2D94BB60, 0xC3AA8A48,
+0xFC539247, 0x80ADDEB0, 0x2517EE41, 0x363000D0, 0xDC71DC45, 0xE036CDE6, 0xE1EED33D, 0xDBC23631,
+0x11266DE9, 0xAF618CA0, 0x612F5144, 0x89CF98B1, 0xE84F02C2, 0xD08E65BF, 0xE4CE9CF9, 0xC8A1C5C2,
+0xEB1A262F, 0x201DE4CE, 0xB8249D35, 0x126B59C9, 0x3CEB3B12, 0xD0A4ADAA, 0x367B9F7F, 0x5E53091A,
+0xF202389D, 0x55278FF6, 0x5ECB6B56, 0xAF32B6EB, 0x53AF7426, 0xBA7CADB0, 0x8374AEF6, 0x3769A8A4,
+0xCDB468DF, 0x73B0280A, 0xF31C3030, 0x452939CB, 0x7CDF5911, 0x395FA27B, 0x09866F00, 0x1827E99F,
+0x1102E058, 0x843446E1, 0xF6F6AF67, 0xE68DD2E3, 0xE2549944, 0xDB61C34F, 0xAD2074A9, 0x1C7D52F6,
+0x4EEFD279, 0x9B0324D6, 0xE4C73DAE, 0xE7F31016, 0x527E03E9, 0xE591771D, 0xD4E0DE10, 0x35A67CAB,
+0xD21CD938, 0x3DD3052A, 0x936AFD21, 0xDA2DAAD0, 0x9DC58F2F, 0x9FC89E22, 0xDF672D49, 0xDC6B1BC4,
+0x5A17F0AA, 0x3192A488, 0xA444601A, 0x1620153B, 0xCB986EDF, 0x0E0949C8, 0x3D687E1F, 0x3AD8EDE1,
+0x58B1C13F, 0x7B35FD8C, 0x3672E1C3, 0x875616A0, 0xAD2318B3, 0x724E9531, 0x8DBBA36E, 0xCE36CBFA,
+0xA236029A, 0x6C517735, 0x921C5EA5, 0xA0B3979B, 0xD8BCB382, 0x381AABC7, 0xCFF0A756, 0x3F2D4CCC,
+0xD512DBA4, 0x400BE468, 0x08BCFEB4, 0x909FE931, 0xA83E6539, 0xD3449EB3, 0x0C0202CE, 0x0A6436EB,
+0xA1498F1A, 0xB5F46D8B, 0x0E0E0CDE, 0xD6787940, 0xAB2ECA19, 0xEC189448, 0xA6C29D4F, 0xAE250E19,
+0x7C034C57, 0x6645723F, 0x263F05C6, 0x0EAFFC8C, 0x16B70F45, 0xB223D92E, 0x6F16ACD3, 0x7798C8AD,
+0x82F43151, 0x41BF70A5, 0xB3D9C2B4, 0x86DE8B4C, 0x7F5E0DC2, 0xB13601BB, 0xAF1B5242, 0x0EE35438,
+0x51C00958, 0x15D19FE3, 0xE422BE08, 0x3E5FA99D, 0xA8EFBFC7, 0xF705E600, 0x191D39D3, 0xE2B3645C,
+0xDC0BCA4A, 0x813B4633, 0xA51EBC0B, 0x7F4F5F79, 0x188304EE, 0x78E60FDB, 0xF9E7A9BF, 0xED37464A,
+0xB50CF6D6, 0x7AA8BC05, 0xF9ED17DB, 0x614E6943, 0x9F8EF03C, 0xADA6A241, 0xCF8CB1CF, 0xACFC79E9,
+0xA5A4D1B1, 0xAB36F70A, 0xDEE61603, 0x72627A19, 0xE3F15FD4, 0xBC16E996, 0xD0E7400D, 0x41840E72,
+0x94532AAA, 0x181AC380, 0xCC4CCE85, 0x18AA9394, 0xD4214272, 0x28C157DC, 0x5787BCD4, 0x1F7E3B04,
+0x02D05AC4, 0x6A79C37B, 0x88507255, 0xDBAC73AB, 0x455B2C1C, 0xA483AB67, 0xDCBDC573, 0x790EB00A,
+0x42F716BB, 0xC59CAC77, 0xEDFE7837, 0xC39CF907, 0x4D48EE0B, 0x2E6F65B6, 0xFB5FCCE6, 0x69272066,
+0xACD4A973, 0x8F97390B, 0x95D540D4, 0x80CF26EA, 0x5C2BCA1E, 0x0E31F1FB, 0x2E4CAA86, 0xB86158DF,
+0x6EBE1922, 0x9035A5F5, 0x70496A2F, 0x7D87E53E, 0x102EA28E, 0xC40D46B6, 0xDFEFB247, 0x34EA4ADA,
+0x9D641748, 0x486EBF7A, 0xEC8BBAC2, 0x6FBA3ADA, 0xD352316E, 0x26CC6598, 0xA30B7E24, 0x3ED80016,
+0xB922DA0F, 0x942BA41E, 0x46FC7CB7, 0x64C5B046, 0x7F440696, 0x61B298CA, 0xB019AF23, 0x27F2AD86,
+0xBBD20A14, 0x1868C4C3, 0xFF745A65, 0x491AAD18, 0xEAC59DDA, 0x47261606, 0x40322C59, 0x959792A7,
+0xEACD124B, 0xA8A8AE63, 0x3A8DDD8A, 0xDF98AAB8, 0x4F1C0203, 0x8C7B0DBC, 0xD5FADAB3, 0x18946267,
+0xC481ED3B, 0x4921B5A9, 0x7D1A5253, 0xE8D7DB8D, 0x55CADD00, 0xE4A59A2B, 0x53C9D61E, 0xA4FBAD2F,
+0x04C66ECC, 0xCB9A50A5, 0x24FE6F4A, 0x96A1B1F7, 0x8D0C763C, 0xB6DF8497, 0xC884839A, 0xB9EC744D,
+0xED902877, 0x4DE53658, 0x54B47357, 0x56D36CA8, 0xE731B252, 0x6ABF0EB0, 0xB2149A1E, 0x8059D3B4,
+0xF789CAD3, 0x365C98FA, 0x90827EF9, 0xCBA8C533, 0xD21E0074, 0x6420124A, 0x839CFFFA, 0xEBF13478,
+0x7F36DD2F, 0x1620F61F, 0xD2678579, 0xFF7DB946, 0x44F8D802, 0x13A10B4D, 0x538753BC, 0xCDDE73E0,
+0x8D64FBDD, 0xACAFF90B, 0x054F81B6, 0x4EA70BC8, 0xE4FFEE99, 0x1654D0B0, 0x4D53E3EA, 0x5DAB4987,
+0x70F3EB46, 0x579E73A7, 0x7E564B65, 0xCDC6B1AE, 0x0B41EFC0, 0x9CC99198, 0x77BF7E12, 0x2310487A,
+0x2792795A, 0x98ABCB94, 0xEAD4B5AF, 0x0D680FFA, 0xF510C14C, 0x84C0DD4F, 0xC1260042, 0xA79AADA6,
+0x23AD38FB, 0x0D18BDFB, 0x42ECE623, 0xB063DEE0, 0x86D58167, 0x2AAC4E15, 0xF6BCF522, 0xDA2E040D,
+0x5053C10C, 0x866E7548, 0x3F3066DC, 0x49BFA33C, 0xA21E5CBF, 0xBC931F42, 0xCAA0302B, 0x64A0809F,
+0x475B5FB5, 0x675709FA, 0x108DF6A8, 0x88F89657, 0x0365C097, 0x567A6073, 0xB1740AB8, 0xD6C2BEB0,
+0xBABA6CB6, 0xD2DD7E03, 0x44B0B92C, 0x59D97C9E, 0x9BE5DC5B, 0xF2715F39, 0xABD7274F, 0x3AFEB562,
+0xFAD36FC2, 0xBAED6F95, 0x73C79D86, 0x919B9886, 0x06B66E41, 0x2E38C1A7, 0x2811DF3E, 0xAC76DBD1,
+0xB8508261, 0x36E95343, 0xAE01B389, 0xB875AF44, 0x0DE554D0, 0xC11EE05B, 0xCA4A3EF6, 0x88542E89,
+0x038112C6, 0x71951542, 0x7A6FC15E, 0x468CBC5A, 0xE39CCC65, 0x43ADC64C, 0xD8DB19CD, 0xF5F0587F,
+0x48D8347D, 0xAE5C5166, 0x16261728, 0xCC0D3767, 0xE937BD50, 0xAC11EC8B, 0xBE7FB5B8, 0xFFBC8752,
+0x41EAD313, 0x62ECB2DA, 0x46729597, 0x2520E568, 0x54485FA3, 0xBDE87D19, 0x12076833, 0x6BF52D62,
+0x2638BBC5, 0xE46DD40F, 0x67D462D5, 0x1FDB2B4E, 0x0AC26013, 0x14FC595F, 0x9C2F5AD4, 0x668FA5B7,
+0xCFE9196E, 0x2469D093, 0x9DF7131F, 0x58943A74, 0x61BA759F, 0x975B866B, 0x4CD77A81, 0x96A478B8,
+0x4DF4AFAD, 0x1AAF89AC, 0x7968B20E, 0xA2DC14C2, 0x3FEF7855, 0x12715DEE, 0xC437CC00, 0x4068483B,
+0x37E54814, 0x2CE8C492, 0x0A37C273, 0x4DA18379, 0x171E1184, 0x51A9ECCA, 0x1200182A, 0x998BF404,
+0xA087839C, 0x3C089D86, 0x3CE8C514, 0x212D9160, 0xA2608068, 0xF2FFBE7D, 0x6D95027E, 0x04910B40,
+0x985336A7, 0x4FC1D5C9, 0x6A412B08, 0x6696ED43, 0x0A4AB037, 0xF475D703, 0x9E037413, 0x750BF48E,
+0x4156B115, 0x058FD78E, 0x5CC8640C, 0xED122538, 0x696EB227, 0xD8F3A01E, 0xC577498E, 0xA83C6864,
+0x2D5F8823, 0x8A5C6D33, 0x695E904B, 0x8FE8A56A, 0xE312BB30, 0xA5695DE8, 0xF46A72B8, 0x2722BFAC,
+0x968E2E7D, 0xC82FA33C, 0xAA8D3EF8, 0x58BE395F, 0xDFA44F08, 0x06EE5ECB, 0x9F4B1983, 0x31D7A5CF,
+0xDEC34178, 0xE672FB60, 0x73085E8B, 0x730E268B, 0x8D80545C, 0xFD49B2C9, 0xF7DB4E62, 0x4CAEC62B,
+0x616D21BA, 0xD3C77F4C, 0x26747212, 0x1FDCD57C, 0xD9471FB8, 0x50FDD530, 0x571D3AC6, 0x8FAADCC8,
+0xE27524C9, 0x9D53B3FE, 0x912DF517, 0x96554AD2, 0xB34BBDA2, 0x87FA7389, 0x6A414E82, 0x6A977FE5,
+0xA6EC46B3, 0xA3E59D41, 0x87278941, 0x27BFC554, 0xB3E4DCC8, 0x5B0FF34D, 0x5B8BCA0B, 0x527568D9,
+0xC765B059, 0x6FDCE035, 0x69647982, 0xFFEF86BD, 0x086F2ACF, 0x202677DB, 0xCE9D69C7, 0x13F81506,
+0xF227F21F, 0x44B3C764, 0x935B6248, 0x9DD60FDE, 0xBBF34C0C, 0xC7F1B262, 0x13157D46, 0x2DAEDF0C,
+0xE26FC539, 0x56352BD1, 0x9C87B997, 0xD2E3A0C3, 0x2FA2AA3F, 0x1ECE25EB, 0xFDA84E47, 0x8F17F4E7,
+0x446D6263, 0xA3256CC2, 0x6B5A21D3, 0x55CEC56D, 0x732549A6, 0xF908D006, 0x8D808DE6, 0x7556C547,
+0x6AB8735E, 0x27487DBB, 0xAB8638FF, 0x458E079B, 0xFF2C3BBB, 0xDF707BC1, 0x3AB2444C, 0xD21BE809,
+0xDDD26F3F, 0x176FE989, 0xDBF7BC40, 0x3034B4B7, 0x3877BAE6, 0xD31E63A3, 0x39828D42, 0x4B0EB093,
+0x8B5B0C44, 0x0F196D3E, 0x605DF67D, 0xCCE1905D, 0x5CD43C7F, 0x1F769CBD, 0xF86B605E, 0x1F54EDBD,
+0x6197F1DA, 0xF0C5A935, 0x80BA12ED, 0x3A610D99, 0xE4C50652, 0xF0F0DDC6, 0xAD577FE6, 0x0C26CFD3,
+0x879DF4E5, 0x6A474C0D, 0x2925A1C4, 0x2089FB9E, 0xDD6F6671, 0x56995500, 0xD798478C, 0xE42D6038,
+0x8E06DEFC, 0xA445A834, 0xDA136409, 0x05F60DE8, 0x52CA7B18, 0xF62A816E, 0xD225C71D, 0x8B583FF8,
+0xA9233DE4, 0xC1EFDD55, 0x381D76A6, 0xE20136F6, 0x9CC7CD82, 0x0F07A748, 0x50B0EBF2, 0xAC385D55,
+0x0D778006, 0xDFD57BAC, 0x637D336E, 0xC4CFB2CF, 0x771227D1, 0x3149A346, 0x7A56F5D3, 0xEC63513A,
+0xC9CE2926, 0xCE6A086D, 0x9F448185, 0x9D367EAB, 0xB90759C7, 0x9C3187BE, 0x50ABE688, 0xB7C9FB27,
+0x6F2CD098, 0x694B72C8, 0xE55CE99E, 0xB26DE61F, 0x60806D51, 0x4E6BF2AD, 0x463AFDB7, 0x5B6442A9,
+0x62D35801, 0x4292A772, 0x4018843F, 0xDB49857B, 0x93FFA3C1, 0x441E75D4, 0x21176EE3, 0x8A090C0D,
+0xBC56833C, 0xD3BAEA9A, 0x29AF9A3E, 0x4C2C73DE, 0xA3028968, 0xF3ED51C3, 0xDBD0DAEC, 0xF037C61D,
+0x6204B6D0, 0x4838DE19, 0x433BBA4C, 0x445F7F57, 0xC202062D, 0xAC69F2A1, 0x45BCE16D, 0xE93F7CBB,
+0x2F7A3E1E, 0xD814A791, 0x001947D9, 0x2CC46C53, 0x038B8B18, 0x5E918BCD, 0xB4E848F5, 0xE99A4DDC,
+0x89E1F4D4, 0xC316A7A7, 0x7B0CC1FA, 0xE22D7BA0, 0x8DED7A6B, 0x618E7859, 0x40812A8F, 0xC97D4297,
+0xA3890B46, 0xE5F71041, 0xB1160E27, 0x23F3A2A7, 0xB6D3D6F9, 0xF7975EB6, 0x8EAFD72E, 0x4B3E0F0C,
+0x4BDED2F0, 0xA194B970, 0x39A38700, 0xB44B7F55, 0xA74590DE, 0xEE1678A5, 0x371C7F93, 0x755BF60A,
+0x25BE310B, 0x8CBA4DB4, 0xD8E9E44A, 0xC081DE2B, 0x1A38452F, 0x1E866C13, 0x569A7589, 0xC6F20E79,
+0xCD806FB3, 0x7C5A4FF9, 0xBF31055D, 0x4499925C, 0x5C4F7798, 0x2CD0A95F, 0x29206850, 0x3A94C23F,
+0xEA5A843E, 0x2B2182E3, 0xBAA4F718, 0x3555308C, 0x1A49761F, 0xE89CB348, 0x9C001544, 0x8A262368,
+0x7BF14316, 0xB07B5C3A, 0x61E0CD7D, 0xDA7967B4, 0xACEE245C, 0xB7ED5ABE, 0xEB70A7DC, 0x3A4EC61B,
+0xAE50707C, 0xD67D8794, 0xB461ACE1, 0x0D1DDFC6, 0xB50C045D, 0x6682E5CE, 0x5D3DF0D3, 0x2371B91D,
+0x85F52231, 0x1206709F, 0xC03FF11C, 0x1D6B8752, 0x7B26916F, 0x2E0D60AA, 0xC4F0A860, 0xEC7F522F,
+0xC0A58A04, 0x96069EFF, 0x05DDA420, 0x28E923B3, 0x43773C03, 0xE179FB6F, 0xAE75920C, 0x2F49DA53,
+0x19B5AC11, 0x047431C5, 0x1D39FB1E, 0x401E50AC, 0xBDDE233C, 0xE7868E44, 0x13FB1CE0, 0xFB698357,
+0x349FB64A, 0x2ED4D4D8, 0x391EA651, 0xED36EE31, 0x84C13592, 0xA8F2F1F7, 0x095868E1, 0x3CA4670D,
+0x455BA573, 0xC81F4AE2, 0x5C4C1949, 0x31E35E2B, 0x9618ED64, 0x08F98E18, 0xC4D02827, 0x4D5EC946,
+0x2A7D556C, 0x26BD5C1F, 0xC97A9BF8, 0x11510F25, 0x10221F37, 0x8C365FB9, 0x5C8756BD, 0x62F39F25,
+0x28B9B4CB, 0x0990DD7B, 0x41B51C3C, 0x1EC0E28D, 0x32BDE4FA, 0xDE6090FA, 0xB2B33B73, 0x1CF7A4EC,
+0x6C28B204, 0x86BB2CFE, 0xE6CCB5D1, 0xC482BB2F, 0xC1C0E88A, 0xC2FC6E5C, 0x4B4DF624, 0x222ABAB3,
+0xE1D32A43, 0xDA9D1059, 0xCBC6EC82, 0x3791C49F, 0x499B6AF7, 0x7F670EEF, 0x5FB22393, 0xC8DA0C1D,
+0x243D9234, 0xBECC8114, 0xF3E96881, 0x7C42A57F, 0x61798E78, 0x0B4DD034, 0x098FD7A7, 0x6E6C3D85,
+0x18C39794, 0xC94F6A28, 0xF07EC569, 0x808D18B3, 0x4CAAEB0D, 0x283C260D, 0x8BF8645A, 0x7C799DBB,
+0xB2B04672, 0x77458D5A, 0xA6A22E60, 0x5415C1F9, 0x56C7D671, 0xBC3D6973, 0x386F817C, 0xBD9D834A,
+0x7987771B, 0x966CD878, 0x5E8D0D5E, 0x04455106, 0x7A0B7C06, 0xE8D14867, 0x2866F15D, 0xB91853F5,
+0x44BD3BDB, 0xB396D451, 0xDC9E75C8, 0xEE7F4F6E, 0x4DF60299, 0x9026D5E3, 0xA38E6013, 0x48D3D24D,
+0x2AEBC534, 0x49D0BBDD, 0x2E1859B4, 0x63C4069B, 0x2B46A09B, 0xE305256F, 0x7714EBB4, 0x1C8031F5,
+0x40EB1D4E, 0x51BD8C26, 0x0346740C, 0x535957C1, 0x0D74E3A0, 0xE53112CD, 0xF1929482, 0xFDD40D98,
+0x09B517B2, 0x5CEA4554, 0xD051B165, 0x15E0EE68, 0x159866BB, 0x0B1FA137, 0x528E6778, 0x7B685E78,
+0x4A5CCB92, 0xD0BA20E6, 0x85C24D60, 0xD408B04E, 0x8FAC5719, 0xDA0A2D82, 0x95F08C32, 0x5153976A,
+0xF9534B3C, 0x17A49228, 0xECF0065F, 0xF9D6A6B9, 0x71DFD17A, 0x5DB0B7DB, 0xD30114EF, 0xCB8B9046,
+0x3C518818, 0x291B75CA, 0x55CB99DB, 0x2437702B, 0x39A20D7F, 0xE7CDFC24, 0x1509C682, 0xDA719289,
+0xBA3FE4BD, 0x62DBD9B1, 0xA60EDEC2, 0x164DE94B, 0x0807339A, 0x5BBDAFFC, 0x2107111C, 0xA9DB5C48,
+0xA47C6E94, 0x6DC10668, 0x963C0707, 0x0F279A49, 0x67B254F3, 0xA8847527, 0xB0BCAFF8, 0x4AA0E743,
+0x351A4AD3, 0xB95062C5, 0x78790CF9, 0xED966A6F, 0xA5F3B20F, 0x865EE7D6, 0x59BBACD1, 0xE10E180D,
+0x8F4A2839, 0x2356061E, 0xC5B0EF0C, 0xC9E85E13, 0xBE842A38, 0x5303C46C, 0x7B3D260B, 0x2829EBA8,
+0x6B447459, 0x267866A8, 0xA0CA2C73, 0x71595EFF, 0x97AF07E8, 0x587C7AD1, 0x3C82D12B, 0x16174051,
+0x4A3CA8C9, 0xC2A72439, 0x516185C5, 0xE3CAD929, 0xC56FFF5D, 0x48859480, 0xABA06383, 0x52998B4D,
+0x12CB19CF, 0x3860C085, 0xF974A829, 0xE429AEFF, 0x04A51694, 0x20925EE5, 0xC39FF294, 0x646C1B8B,
+0xE20E0B21, 0x9FF8DF58, 0xFF17C52C, 0x82FE4AF2, 0x98BB032E, 0x71A8C8AB, 0x806DE01F, 0x1CD465D9,
+0xA29B6862, 0x8520F640, 0x52594C09, 0x810BC25A, 0xDC9DDEA8, 0x9A3629FC, 0x30EB5222, 0xBB8D8A0F,
+0x72A15F9C, 0xFC577EB8, 0x73135DC3, 0x882B7F89, 0xA24CF781, 0xCCF90100, 0x0C7B1BDD, 0x675FCBB4,
+0x24C84604, 0xAB7F3CB2, 0xCF32B7FB, 0xD3CED7C3, 0xEAF76D70, 0xA8AA7C7A, 0x7A23D0DB, 0xF7B53C09,
+0x6BF4DB28, 0xEE331C00, 0x01794743, 0x7075FEC5, 0xF4DB3162, 0xE1597B02, 0x2D718442, 0x82775FD9,
+0xBD2EF353, 0x0C1F160F, 0x025713D0, 0xEA6823E5, 0x7CB302D5, 0xBED10AB9, 0x64BC55CE, 0xB4F78FC9,
+0x61B600FB, 0xCF0BE1CB, 0x8546B7E2, 0xD354D7FA, 0xC9F52A70, 0x3FF77F05, 0xE41029A4, 0x9CF6D48D,
+0xF1C565FE, 0xD57EC6EC, 0x53DB47F3, 0xF7729520, 0xC43B5372, 0x1739666E, 0x676AEC10, 0xA0751250,
+0xCB0F525C, 0x1A766C7C, 0x733373F3, 0x0BDB46D8, 0xF94199D9, 0x15E1F5F8, 0x07ED189F, 0x301A93AC,
+0xF8AC46BF, 0x35A411C6, 0x233541FC, 0xA53877BC, 0x9A99C79A, 0x34AA1A35, 0x42ACF6B3, 0x8C914F4D,
+0x713A0519, 0xE868FA46, 0x2B680C15, 0x42D28454, 0x2AF666AF, 0x220B8A84, 0x473279F4, 0xE74E1594,
+0x79F999F8, 0x465C7A97, 0x58ED2C82, 0xA83322D2, 0x22F732A2, 0x8BAF4B58, 0xEEAD392C, 0xC72FA1C5,
+0xD871E3E0, 0xAD1DA69B, 0x24E713FC, 0x45C1C638, 0xBD567A6F, 0x7C1BD483, 0x69166610, 0x979BCFFC,
+0xF6279437, 0xF7F85E57, 0xEB8D6420, 0x9092590C, 0x4EA05C8F, 0xCB418CC6, 0x14725D7A, 0xC0000DF9,
+0xD26895E3, 0x8C3FC349, 0x07869505, 0x72560B38, 0xCBC50304, 0xC1AB1912, 0xCFA978F5, 0xD6436A2A,
+0x156BF3D3, 0xBCBB7CDC, 0x491C82A5, 0x040B3FC7, 0x0703AFCD, 0x063FB6B2, 0xB537A658, 0xCED11AA3,
+0x7D44B143, 0x437E8A76, 0x159CCF67, 0xE370D2A1, 0xD82D9916, 0x5F4D1A5A, 0x6DE05C21, 0x8A50973A,
+0x7E1971A2, 0xB23175D4, 0xA4697F5F, 0xEF4CC468, 0x4895DC43, 0x777F12EA, 0xCCEEB5E1, 0x8C647933,
+0x0B76E2C3, 0x8A70EF37, 0xCD7B7165, 0x44775A0F, 0xE1134263, 0x5F5E901B, 0x34803BC5, 0xC0C7FF3A,
+0xAF5DC3A6, 0x83EDE58E, 0xB5CEBECE, 0x212C72F7, 0xF896904B, 0x6C3579C6, 0x099C9B1C, 0xF86DECD6,
+0x9501918E, 0x771BD0F2, 0xDA30FBCB, 0x43DD1D0B, 0xBAC63EEA, 0x06BA1105, 0x8FB75DC5, 0x52FC8D42,
+0x372448A1, 0x39B8ACD0, 0x65CDEABA, 0xEF3EE42F, 0x7F9051D5, 0x1D56D3E5, 0xDC62FB68, 0x5A937FA6,
+0x9847842E, 0xC8403BA4, 0x314571D5, 0x4741708A, 0xBA284C36, 0x22717CCD, 0x72106F71, 0xB34FFAD5,
+0x466BD227, 0xA345F983, 0x44886F94, 0x8423DC2C, 0x303C6B7F, 0x316BFEE4, 0x2237D88B, 0x1D149772,
+0xFCA9AB21, 0x2A6959B3, 0x33F7E87B, 0x2EA47C9F, 0x93715167, 0x53C1E052, 0xA30318F2, 0xE02C2170,
+0x0A8D8B1F, 0x745155B3, 0xC58AB504, 0xCC5BE4D5, 0xAD500E0C, 0xA66CF352, 0x1A4FA4EE, 0x9529ED88,
+0x5AA1BBF7, 0x2602AAD2, 0xFD0F79EB, 0x66C44CAB, 0xE1620A2B, 0x3622F04B, 0xCA1D0E43, 0x0BD3E25F,
+0x87162562, 0x220542A4, 0x987FF450, 0x491C44A2, 0x72ECAAAE, 0x59F9E414, 0x6480AC74, 0x437F1653,
+0x2DEE6165, 0x1526585E, 0x82A60696, 0xFB772BB7, 0x48723003, 0x90D441B6, 0xE8978596, 0x90426522,
+0xC84EE48E, 0xE5C714C3, 0x1FF182B8, 0xF2F6F750, 0xC3F2FA3F, 0x921850BC, 0x37E68A1D, 0x00927298,
+0xA4F61BBB, 0x45741ED6, 0x516E135F, 0xB7627335, 0xE1B9900F, 0x86B8A0C1, 0x3B6DE490, 0x8972DFFB,
+0xE434D68C, 0xF46FC4CA, 0xA45EE13B, 0xAC2B7BFA, 0xC332E85C, 0xFCE11481, 0x9EBA3F97, 0x329C06C7,
+0xF4DB9C7D, 0x4DE01650, 0xFCA6AD16, 0x9DD20774, 0x357675AC, 0xC44F6DBA, 0x547EE49F, 0xF349AD35,
+0x084EC421, 0x7721F147, 0x3277A7C4, 0x5A6A5298, 0x05D9D820, 0x65EA1D24, 0x6BFFBE28, 0x40F2A9EF,
+0x4E4DDBFA, 0xDE7DDD24, 0x279A111B, 0x78EA73D9, 0x6468A631, 0x38D5E919, 0x86C2BC3E, 0x1D2DBD64,
+0xA7E8EA5C, 0x7BF0155D, 0x2AF8D3E0, 0x322A9448, 0x2D956CD5, 0x97CE1809, 0xC1525ACD, 0x9A46DCDF,
+0xFE04A7F1, 0x5AE5BDA0, 0x3B927CE8, 0x91BF32AD, 0xAFD1C4D1, 0xDA1D8736, 0xBEFAD191, 0x45115737,
+0xD9E8DE37, 0x3CFE6A2D, 0xAF12003C, 0x8457CADB, 0x652364FB, 0x530CF671, 0x4AD4A9CD, 0xF7B1EC74,
+0x8D88A5E2, 0x012FFA5F, 0x7B295ADC, 0xD025EE77, 0x6C2D5590, 0xF0814785, 0x7EF6BA42, 0x86E1E326,
+0xA1DF3F1C, 0x53D473EC, 0x8FDDEAF2, 0xF5345804, 0x06CC2D9A, 0xD655F3D9, 0xA7DAF477, 0x38A88CF0,
+0x1AB92D61, 0x19AECD7D, 0xF80E9E6B, 0x5172B84B, 0x433A058B, 0x6958464B, 0xD2DA3C2B, 0xFA47E1BA,
+0xF2010964, 0x78B27A91, 0x981C4533, 0x6C229B50, 0xCB3809CC, 0x090BD672, 0x4935362F, 0xC8D585B3,
+0xC660F11C, 0xA542BEBE, 0x39240B6C, 0x61C39E90, 0x4715FAB0, 0x3A7544D2, 0x2452157D, 0x2B5B75BD,
+0xE695C04F, 0x23883012, 0x9FB70E2D, 0xBA4B88C9, 0x941226FB, 0x2B5578B5, 0x8778807E, 0x19DBC272,
+0x8120628F, 0xE0649715, 0xE5296767, 0x4D66E3AB, 0xCAF1A9B2, 0xF34A9FC9, 0x2C34FB5B, 0xA5A67966,
+0x0AF06247, 0xF8F2CDEE, 0x2C00AD3C, 0x67388BDF, 0xA9D3021F, 0x0C28F383, 0xA9AB0C7C, 0x2CAA3FB8,
+0x439E9FB3, 0xA369ACB4, 0x2E9D769B, 0xC3ABCF4E, 0xA31D352A, 0x43537888, 0x40A06C1F, 0xAFAFAF6F,
+0xBF76DF2C, 0x254361DD, 0x79AD440F, 0x7D40453A, 0xF7CE8429, 0x6EBA88E3, 0xEAFF55C1, 0x492C0813,
+0x6D07CC21, 0xB5662DA1, 0x341E9129, 0x9C1D8114, 0xBEF7E3B2, 0x84EC3F96, 0x6D78FA46, 0x357C0054,
+0xAEA3394B, 0x019F120C, 0x0E4033A2, 0x7205FB35, 0xF7B8025F, 0xEED3E55B, 0xDC2E0AED, 0x4EEE8689,
+0xCBD9643D, 0x5D580397, 0xF5AA1609, 0xBF0B943D, 0xD8F8AB67, 0x22F6CBF1, 0x67297126, 0x297B2AEE,
+0xA7204D4C, 0x84C29465, 0x3821955B, 0x583D5EB6, 0x8BE0A826, 0x45E56B5A, 0x83F50169, 0xC8BBBD54,
+0xFF7D06EF, 0x11B37399, 0x70B898F6, 0xEFE3F6AC, 0xF355D203, 0x0224303C, 0x731BD171, 0xFB5F73A9,
+0x6853649A, 0xE010B842, 0x1F4F40C6, 0x5748083F, 0x36A81E93, 0x2E46027F, 0x6FB48DD0, 0xEFB68B40,
+0x7B2D07A8, 0x8A8A1533, 0xD9656DED, 0xA36195CE, 0xB5481EF0, 0xF1DE50CE, 0x7C6DE91E, 0x257B37D2,
+0x47C90D4A, 0xE4E4B373, 0x5C6D452A, 0xD2FDE3F4, 0xDD522539, 0x835979E6, 0xF9866BDE, 0x9F38F738,
+0x91A4DBB8, 0x0E9ADA94, 0x57700CCF, 0x2BD4065B, 0x3F3A9349, 0x8A150476, 0xBBDDA2FD, 0xDDCC32B5,
+0xA89F81E0, 0x6EF8F1D2, 0x3E18ED9C, 0x52F6B5CB, 0xBD22C8D0, 0x270C214C, 0x168AB1F5, 0x4978E2D9,
+0xE2ED07B5, 0x0DA137E0, 0x1745C537, 0x23BE6EB3, 0xD7F7B04D, 0x63030EFD, 0xC0A6290C, 0xC075E55A,
+0x3483FED6, 0x8FC297B9, 0x44949BA5, 0x5B4843B7, 0x6EA0D039, 0xCC65B533, 0x0087CA87, 0xF83EB581,
+0x5140F79D, 0x789471F3, 0xD65A6DBB, 0x8423457D, 0xAD1ACCD0, 0x4197D6C8, 0x108B7EC2, 0xFA429B02,
+0x6FBACD6F, 0xC5B1B9E0, 0x389574EB, 0x7821F04E, 0xD95827B9, 0xDA90D3F4, 0x217F5FD0, 0xBD21D9C8,
+0x6809172D, 0x6540E5FC, 0x46DCD3E9, 0x8D5D901D, 0xFBE4A484, 0x740CB247, 0x46E34610, 0x0D32092B,
+0x88EC7027, 0x669F899C, 0xC15C86CB, 0x9442D67D, 0x7803C072, 0xC651FA6E, 0x8F84AD30, 0xBF1191E0,
+0x84A1F034, 0xE07D27B5, 0x0D4D3F94, 0xF9B45A05, 0x32FBF008, 0x9AA6D73D, 0xC4F5BCD4, 0x68D3BDD1,
+0x2DC2EE41, 0xA2A80527, 0x34776B16, 0x4F0B7410, 0x3D63B042, 0xD908CDC9, 0x1FEB6DBC, 0x7E16B919,
+0x91DA2E91, 0x00324D43, 0xC561D0DE, 0x1101B20F, 0x1092D0F9, 0x547B05DB, 0xE493C081, 0x29649EDE,
+0x6AABD632, 0x192BF64D, 0x3D77F4AC, 0x19F4E1DD, 0xA3239122, 0xC5131E86, 0xE9951BDF, 0x1F84B86E,
+0x3C9331E9, 0xD2599B5D, 0x58D269C7, 0xF8F27C57, 0x324DCA3F, 0x8DE899E5, 0x1DBE4DC0, 0x5712B814,
+0x67C40DC2, 0x9F0306B8, 0xFCBA4394, 0x3CBA9E78, 0x4EA32158, 0x1FE1A70C, 0x5F182C44, 0x0C845F63,
+0x4DAC4FD0, 0xB98E27E0, 0xE1BD3EA1, 0xDCD22A4C, 0xF196A4BF, 0x1C2703AC, 0xF6C9F63D, 0xEAD82F01,
+0x09F5C63F, 0xF4FA7976, 0x8C75F27C, 0xAF0F8B1A, 0xFA723F3D, 0x3A9AD33A, 0x56306A76, 0xDD22BBCE,
+0xEF745CC3, 0x3BFC0CA3, 0x3273AA93, 0xD3C53794, 0xAE94A512, 0xF0B0D74A, 0xA20B3344, 0x9B506F26,
+0x98C0945A, 0xB6BC7903, 0xA9883A8A, 0xE309C2FA, 0x402C7ED0, 0x6B05B781, 0x6A979AC3, 0x0D57D66A,
+0x3C7561FC, 0xABAFA207, 0xD75D13A8, 0x8376BD80, 0xF1B6AF08, 0xFB960265, 0xAAA05A70, 0xC1A66F48,
+0x1B18281D, 0x4B9DA85B, 0x0D6D8D5E, 0x101473A5, 0xB607484A, 0x0BFC6486, 0xA78A5F47, 0x90B5C16A,
+0xD5E27662, 0xA8076BE6, 0x715504EF, 0x2B206730, 0x2FE5279C, 0x57A5C564, 0xE4EC9BB0, 0x3F029544,
+0xEEAB34E9, 0x2E925D68, 0xC3111FC1, 0x2747BFAF, 0xA9A9E48B, 0x0E3773B9, 0xB2AB874C, 0xE343323A,
+0xEA7F95BE, 0xB45FFBA7, 0x1C2D7621, 0x237692AC, 0x104CBBEB, 0x248D9999, 0xB198D664, 0xBF72DD46,
+0xAD13341A, 0x067A386F, 0xBC304B8C, 0xD1C2B5A4, 0xD973BAC1, 0x25584F5B, 0x92067834, 0x66BA7BF3,
+0xA5C9210D, 0xDCBA1B66, 0x96A3DC7A, 0xBCA58FB1, 0xFEDB85FD, 0xED0ACF52, 0x172092F8, 0x351ABCE1,
+0xA22C0521, 0xFA95F17C, 0xFA3777C1, 0xE11420E9, 0xC0057E37, 0xF9F7B8AE, 0x246AFE03, 0x7FF4CA83,
+0x1E365CEB, 0xD21DAD3A, 0xC71FF662, 0xB228BACC, 0x6F1260ED, 0xF5283F5F, 0x6747C4D9, 0xC84BF13F,
+0xCC767A4D, 0x76FF1920, 0x99CFBB58, 0xCBB4279F, 0xA15913B0, 0x7B8A081C, 0x18C5B0E7, 0x87BDD80D,
+0x2CF65104, 0xAFE0DE65, 0x952FD5EA, 0xC82DEE20, 0x6D859C4E, 0xA90F5F26, 0xFC5E9002, 0x83F88E8D,
+0x00048E4C, 0x4074C10C, 0xF14ED9FA, 0x3A793821, 0xE4D1669E, 0x7701E706, 0x8B262F62, 0x80C0EC42,
+0x43C31234, 0x76675075, 0x7A32DC4F, 0x632020B3, 0x9CC37B74, 0x8EA83C9C, 0x660E7247, 0xA42D59E4,
+0x73E6E4AB, 0xE8FAEF4A, 0xABFC811C, 0x22B14C6A, 0x1DCBC593, 0x0A4CDC07, 0x7F470384, 0x13B47FC2,
+0xA4883520, 0xA63A1780, 0xC616A0F9, 0x14AB69BE, 0x7C9EA960, 0x7EEEE9AD, 0x31138E8D, 0xE20659E2,
+0x7FA5F29F, 0xC139CF0A, 0xA387AA7B, 0xB636074B, 0x89604517, 0xE37B65C2, 0xADC19C4D, 0x68E6F7FE,
+0x002C7A7B, 0x5CBAF0F6, 0x07304EE3, 0x9C2B4E3C, 0x8EF1773F, 0x15859273, 0x173ABC39, 0x86415B91,
+0xA7F811F9, 0x9B372955, 0x8EDA61E1, 0x5B027D09, 0x81447806, 0x5A57DCD7, 0x999AE023, 0x36BFE274,
+0x17A9967A, 0x08A77FCF, 0x8A377E30, 0x3512EB8A, 0xE5AC05C4, 0xB68F9DE5, 0x9F6C0D3D, 0x3CD8B3FF,
+0x4F06C279, 0xF0CC2D24, 0xEB5270EB, 0xE0F15FB3, 0x199FE525, 0x12D83CF9, 0xBDBD98D6, 0x0CD3E859,
+0x4CAC1D38, 0x92A18330, 0xFD109561, 0x3F017A29, 0xFB49D4C4, 0xEEC9DDD9, 0x7E0165C7, 0x54F2180C,
+0x15A1EEB8, 0x3843BEF2, 0x8EB53F7E, 0xAF3A0C64, 0x340B44D7, 0x44470B93, 0xA2E2D99D, 0x0F2ADD1A,
+0xA7C62554, 0x1DD8432E, 0xB778BDC5, 0x2E90BB49, 0x603776EB, 0x233642E7, 0x237FA08B, 0xC6AF6265,
+0x73B66A44, 0x22A46A66, 0x3700BDEE, 0x54DD3190, 0x78E5C5A8, 0xFD8909A3, 0x432C1E6A, 0xE2FF84E2,
+0xDCBD184C, 0x85F4BBFF, 0xE5D4E14D, 0xBFB9C2EC, 0x6EF1FC04, 0xAFEBE858, 0xEBAEC9D8, 0xD4EC7B89,
+0xA9143D31, 0x4EA40E63, 0xDA077A60, 0x79EB8DEE, 0x6F5B77CB, 0x5914C66D, 0xC41F5EA6, 0xB37517CD,
+0x4AB239D4, 0xFD2B60D5, 0x848BCCCB, 0xF1A3AB64, 0xB30938E6, 0x17B76BA0, 0x1E055E72, 0xF1FC21E5,
+0xEB04B9DA, 0x78CCAA89, 0x799A0B74, 0xC019405E, 0x8A85C880, 0xF1301E6B, 0xABDE64A1, 0x06CB9A31,
+0xD0BE8DAB, 0xABFA201E, 0xB9B9619F, 0x9603A16D, 0xE390A0F8, 0x65EC1D92, 0xF875EDE6, 0xE82E921D,
+0xB7D501EC, 0x62272289, 0xB5C03901, 0x9AA90713, 0x8DCA3747, 0xBA6A7218, 0x329F4F4A, 0xAE80F9BD,
+0x49EEC150, 0x6E75D093, 0x009C4F20, 0x61A6A86B, 0x139FF8AF, 0x5A384818, 0x65573BD5, 0x2AADFAEA,
+0xB0110223, 0xCB140698, 0x28C82398, 0x2602109E, 0x99B47FAC, 0x6E67A822, 0xA587D90B, 0x9FCB5225,
+0xF5C743A1, 0xD1FD1A8A, 0x3395BAE1, 0x77EBA3A7, 0x1C177AD1, 0x15C79170, 0xF0DF08FB, 0x768BFE82,
+0xB27DA091, 0x4757853A, 0x1F45282F, 0x69667370, 0x6D4E9B0F, 0xFAEB6401, 0xA26994BF, 0x6E0FFE6B,
+0x3F646313, 0x1116710A, 0xBF9AF35D, 0xF6C19B4F, 0x1489EC8C, 0x64B7749E, 0x508D76B8, 0x63EE03AE,
+0x216EE867, 0x83BCB8FF, 0x7333C0C8, 0xF7612B6A, 0xC3F10DAF, 0xB605252C, 0x00CDD44E, 0x6957811C,
+0xE44B0835, 0x57832A91, 0x6A3FB143, 0xB1DF1302, 0xE1F1B355, 0x30320BD4, 0x9667EDD8, 0x2C89A5F4,
+0x77B457C7, 0x9814F3DD, 0x669D4898, 0x6939BA77, 0x62DB6D48, 0x00A140EA, 0x6556C9DB, 0x9424C7EB,
+0xB2CC8BB3, 0xC0191BB3, 0x01233FD8, 0x750BF9F3, 0x4D394540, 0x4E28919E, 0x63EC0CF9, 0x941DA512,
+0xEFEA7CC1, 0x75BED4E8, 0x11338903, 0xD1FD593F, 0x452A40B6, 0x854C2894, 0x44249756, 0x90E6FD8B,
+0x8906DC6B, 0x4E4A272E, 0x6D2BC1D0, 0x90D619C6, 0xBB55F1E2, 0xF1DB6E19, 0x03669951, 0x67D8676C,
+0x03C63194, 0x1CE8BC8E, 0x12CD29CD, 0xB38EF78A, 0x1C04308F, 0x3F0E4DEF, 0xA820F36E, 0xB4FEF8E8,
+0x19A84FBE, 0x79CF8D9B, 0xB4249F10, 0x75BE5D68, 0x8CD8C9A4, 0xA7B1BC0B, 0xD98F941A, 0xA5D7E0B5,
+0x6F0113B9, 0xB94BF71E, 0x56936A16, 0x6A07B203, 0x05AD9EA4, 0x03648117, 0xC715FF0D, 0x6E03834F,
+0xE375231A, 0x695DC343, 0x3EC3EC67, 0x92B8FBC8, 0x5CF2DF27, 0x7E7ED1B4, 0x01DB2B40, 0xCF4018A7,
+0x5BC4B01A, 0x14536E9B, 0xB164891F, 0xB52684C5, 0x6EA5D94F, 0x395216CF, 0x267FC826, 0xBEA9B065,
+0xE37DED53, 0xC201924A, 0xFC1A3C01, 0xDAC088E9, 0x65F9B989, 0x65B02D44, 0xD4AC8121, 0x0C70AA8C,
+0x9F3C6564, 0x93583D31, 0x7C0F98EC, 0xECA564E9, 0x61F68E35, 0x132F8A4B, 0x5BE5420D, 0x1CDF7226,
+0x64E0F33F, 0xB78371BB, 0xD2C545CC, 0x3709DB44, 0xFDCF8BB7, 0x3753E8D5, 0x698FFCD6, 0xD8B6F1B0,
+0x960E870F, 0x14EFD3E4, 0x39E8D58C, 0x834BE4D8, 0x4EA534A8, 0x28416AD8, 0x6CD30E20, 0xCAA1EE30,
+0x0A825F81, 0xE0AECBDC, 0xA68D620E, 0xA493EE52, 0xB0F83122, 0xCD5C6C74, 0xE0A21433, 0xEBD9F889,
+0x3AE44B77, 0x543436F2, 0x4488CC85, 0x3678C313, 0x50DCB4D3, 0xF4E18CEE, 0xA2308F9F, 0xDB15C7CE,
+0x4E154C06, 0xDB0F867D, 0x341F64F2, 0x2DC20D9F, 0x587F0DCA, 0xC04FAAA6, 0x26B68354, 0x0EF03D29,
+0x9F66833D, 0xD9672AE3, 0x553C6366, 0x80CA96BE, 0x671AF7EE, 0x276EFEFF, 0x25CF4FC1, 0x8B6DDF7A,
+0x42CEA28D, 0x4499D0F9, 0xF67FE7CF, 0xEDC8F2F2, 0xFDFB048A, 0xE6565CB6, 0x6155B075, 0x061EE15F,
+0xF0FB56E7, 0xA935DE26, 0x724D242C, 0x2297E226, 0x0CA8EAA0, 0xDFA0D4F3, 0xF0F1DE83, 0x7B34D896,
+0xD24E6852, 0x053A0D38, 0x2FB6704F, 0xB59A0A57, 0xFC512A75, 0x578A1006, 0xA4712A7F, 0xF3AC12C6,
+0xE236147A, 0x67F02220, 0x21CDF4B1, 0x4FD9F791, 0x01EA38F9, 0x10F6D1EE, 0x177DAF89, 0xC6C30754,
+0x1A00372B, 0xA31DD039, 0xFFC34645, 0xE6471101, 0x0CC42A81, 0xF72C3F89, 0xA83C51DB, 0x07E0694E,
+0x651F722A, 0x226DDD9B, 0x7E23B2EE, 0x2E5617EC, 0x2D7C854F, 0x75C1D2FA, 0x17C10F26, 0x7B8537AC,
+0xE7046BC4, 0xAE2A0F1C, 0x2BA04313, 0x82956553, 0xEE72B439, 0x6B1B427F, 0x246DBE5F, 0xACBAB66D,
+0x505A78A7, 0xA6EE6D92, 0xAC5CD52F, 0x8AF4D565, 0xA425A77B, 0x04A94391, 0xA5B4CBF7, 0xC7447038,
+0xE99045E4, 0x95B112CA, 0xC6076842, 0x11B19B4C, 0xA2A4911B, 0xAAA255AF, 0x335844A6, 0xAE8D32E5,
+0x718C624D, 0x9CDE225A, 0x36A0BDF9, 0xFD9E9648, 0x2D42B2CE, 0xA4B76C50, 0x8C368E38, 0xA8DD2027,
+0xBEA18AEF, 0xDCA71164, 0x873A330F, 0x8D218C4E, 0x600729C2, 0x7EF79E93, 0x4283C55C, 0xE1943E2A,
+0xAA8C396C, 0x8022FF3E, 0x3224ACBF, 0x56F21CFB, 0x3ACE8C83, 0xC9096525, 0x4BF84AFD, 0x3C1E15A2,
+0x994DF494, 0x86D8AAC0, 0x0E7706BB, 0xA8743727, 0x9C054BF2, 0xAA723357, 0xB4DC582E, 0xD10DBD0F,
+0x254F6C18, 0x11769930, 0x970E17D5, 0xBC5D9C57, 0x46F9B0A9, 0xC0D87C47, 0x757FE7F0, 0x77381B1C,
+0x62C3DD96, 0xD5697AD0, 0xD0A183E6, 0xE5A0D2BF, 0x8D5ABEBD, 0x9D23C455, 0xBACD4AC4, 0xAC4293C7,
+0xC8ED7D9D, 0xA1A7D958, 0xC281774B, 0xA218FE2F, 0xC05CC9E5, 0x505608B3, 0x67B27F75, 0xC736D34B,
+0xC0DC779D, 0x6E847A98, 0xBA3A9824, 0xFAD39FE8, 0xBECCD3ED, 0x1A3180EC, 0xE5CC32E2, 0xB0BBA58B,
+0xF8BD0FA2, 0xD0770025, 0x0451D609, 0xE7D92FB7, 0xA07439BA, 0x5647C1BA, 0xBBDAF6F8, 0x33F8A662,
+0xCC43D0F8, 0x5C675D0F, 0x9200AF6C, 0xABE45D9D, 0x4CDBF2AC, 0x65A5E40D, 0xF7B16419, 0xAB624768,
+0x304D3AEE, 0x0D3755EE, 0x788575B9, 0x149894CC, 0xA27B0C0D, 0x65899800, 0x6120D6CD, 0x4A8C1E84,
+0x0FDD1AED, 0xFC960EBE, 0x73F0611B, 0x8EDDAECB, 0x9302BB86, 0xD63B1B63, 0x8FCF8B3F, 0xBD3F85E1,
+0xFB2E6C2F, 0xE2CF90F8, 0xBEF849A3, 0x081649CE, 0x90B8881F, 0x49ACC0FA, 0xBAC0A04C, 0x396ECB3D,
+0x1308082C, 0x1D148968, 0xA26DA2BE, 0x1C54EE67, 0x7314E835, 0x64B9F3AF, 0x707A4F14, 0x23F51370,
+0x44316DA9, 0x08A1D0AF, 0xC1BB3392, 0x0A8CD39D, 0xBCD7354A, 0x0A0A1EFC, 0xAFD4E21F, 0x3506A066,
+0x89F24D76, 0x59463BEC, 0xEE86242D, 0x0FEC35D7, 0xBBA43ADF, 0xCFB5FDAB, 0x816E8732, 0x3BEC7037,
+0x746FB47A, 0xC37B2383, 0x80DBDAEE, 0x13BD90EF, 0xCA0E9FD9, 0x987D03AE, 0x4EBD85DE, 0x4F1292A6,
+0x2DEDF463, 0x78858435, 0xE5BDD02D, 0x2A4C0738, 0x47BAFD8B, 0x412D840B, 0x99EA0F3E, 0xA9FF7CE1,
+0x5A1FDABE, 0xDE3622F3, 0xDFC834F4, 0x8E25BC47, 0x6BE5B410, 0x97C5130E, 0x9FCB41F9, 0x51B6B156,
+0xC5FF6D0C, 0x4A7650D5, 0xFED7CDBF, 0x0B64E51E, 0xFDC5463C, 0x327CD22F, 0xA1D7E302, 0x16FABF06,
+0xEAF7EB60, 0x19489D32, 0x249461D6, 0xFD67EE99, 0x86CDE3E3, 0x788DDE7A, 0x1300DAB4, 0xA362FB5E,
+0x861038F3, 0xF137750E, 0x1CF10201, 0xA884590A, 0x8B00C92D, 0x40B3A47E, 0x1C9DE80A, 0x7B24FFE0,
+0xB6EC004F, 0x2A0697DB, 0xF88FBEBD, 0x9535A96F, 0xBD1E42C6, 0x7C17ED8C, 0x152FB994, 0x599F7F64,
+0xF8DD11AF, 0x872B00E5, 0x5784F551, 0xD462BB89, 0x88FC6046, 0x17F4F5FD, 0x5EC0A1FD, 0x10D99DA8,
+0x7545828D, 0x310A0BE8, 0xC89F10A7, 0x06991284, 0x1AEEF033, 0x188F1A9B, 0x759B72A5, 0x11395ED5,
+0xD8280076, 0xF4D058C0, 0xF6C88E17, 0xECB427C6, 0x3C4ACE4A, 0x24D6C046, 0x3B4FFBB4, 0x7E7222BA,
+0xD0323827, 0x26B9C507, 0x8F7E01DB, 0x134B2482, 0x8BB6E417, 0x789B4E1B, 0x5D0FC38E, 0x56EF41E9,
+0x7A9E1F94, 0xF12A7ABE, 0xA57CE9E5, 0xEC16A753, 0x8D69AC9E, 0x995C0235, 0xF802B3C0, 0x4C66D6E1,
+0x67AFC0DE, 0x2547B753, 0xD62EEE26, 0xBF5BB54B, 0x38E5D79E, 0xC9D43868, 0xA71E3124, 0x600CA6ED,
+0xA06594AE, 0xC47A4D0A, 0xD614B988, 0xEBE0F009, 0x3FC40EA8, 0xC0F2A90F, 0x79C16E49, 0xBE1F81C6,
+0xF6198C51, 0x6E9F36D1, 0x1E5D8B5A, 0x6953AF46, 0x6461CCD8, 0xBDE24730, 0x00D3CA84, 0x0200C10F,
+0x372347E9, 0xCEAF544C, 0x6E7CE5D5, 0xF33C33B5, 0xE86B596B, 0x1458C86A, 0x89D03BAC, 0xE32AFDBA,
+0xD270BFAC, 0x3DDB0A06, 0x92195934, 0xB577AD3F, 0xDE78F6EE, 0x994A211C, 0x0F8C4D7E, 0xEE3DEC6F,
+0x044BF5E2, 0xF926EB32, 0xF9F34B38, 0xD8945628, 0xF2914045, 0x2FD09B70, 0x30DA045C, 0x246771C5,
+0x29F072F5, 0xEE5A146E, 0x9DC980EC, 0x242B4B7E, 0xA0878E41, 0xA9937B9F, 0x8861D98A, 0x54D853F4,
+0x567DF861, 0xB6C79D67, 0x671F8A3E, 0x05052892, 0x95D5D212, 0x8385B5BB, 0xB18F044E, 0x6678527F,
+0x80F2BC9A, 0x8B6B5ACF, 0x0FB03D74, 0xB31F0E5B, 0x32B2CDD0, 0x48E4B63B, 0xD60A37D5, 0xD7716ABD,
+0x2DEC1CA3, 0xA577F56F, 0xA01ABE63, 0xCD26D64A, 0x52E6D7E3, 0x92523A5A, 0x017BCC53, 0xB2A0277A,
+0xE058C41F, 0xABAE6567, 0x89F06C76, 0x0411AF75, 0xD31D56C7, 0x587CA7E0, 0x5E3FBED1, 0xA5360EC5,
+0x71D1C7E1, 0xACFA69DB, 0x8F9099A1, 0x87F2E577, 0x252CD402, 0xF18E0E71, 0xF46BB4AE, 0xA1E701F9,
+0xEBCC7737, 0xA8C521A8, 0x3873F4C6, 0x83D49135, 0x6679F7B6, 0x3204C6BE, 0x9D6FBF11, 0x18E9F169,
+0x2A123F8E, 0x0C5A2A4F, 0x5032053D, 0xD50BBC96, 0xC3689503, 0xE2486286, 0x0EA0D015, 0xEA93E557,
+0x8F70C752, 0x6BF06424, 0xC9F8B655, 0x088BD0F4, 0x10ECC552, 0x0D1DA257, 0xA29AF3E3, 0x531AD83E,
+0xFD5ECFF5, 0x1E805684, 0xE794A491, 0x4B0FB9A1, 0x4197B12A, 0xCD1F7634, 0x72A5DFC1, 0x836B6598,
+0x5CB429AC, 0x7FCB8F79, 0x9358A572, 0x63349DCA, 0x679268A3, 0xE5937A7E, 0xB7FEA645, 0xD7265D8B,
+0x4E4F4074, 0x92281828, 0xA58DCBD7, 0x9C227FBF, 0x70A8D5DE, 0xB1A7D30A, 0xE7D7E30D, 0xD2889EC2,
+0xC99D33DD, 0x529BD858, 0x907C11E0, 0xA32485EF, 0x79322E7E, 0x0C62EB78, 0x4B455909, 0xCC13486D,
+0xDE3769F3, 0xCD679EEE, 0xF71AA570, 0x5A44ECBC, 0xAA4D27AA, 0x5E15C5D9, 0x391F93C8, 0x39AC5B52,
+0x9BE6EE23, 0xE08E3E0F, 0x38DB5A5D, 0xD6EEE4CA, 0xD528D2D2, 0xF04B0DFD, 0x3F2198A8, 0x92671A31,
+0xCFDD63E2, 0xDE808221, 0x8090CF01, 0x79CB8139, 0x37035E97, 0x6E9091CA, 0x65E1FB50, 0x5FA5F1A3,
+0xE0DD265A, 0x3583D61F, 0x44427BE5, 0xE2298589, 0x4B289245, 0xC08F2AA3, 0x7F3125EA, 0xDAC0A6FB,
+0x5A3CEF67, 0x2F5D4BE5, 0x35441962, 0x7D88B9A3, 0xDF90B658, 0x766CE50F, 0x628F8F72, 0xFBD73E21,
+0x646741BF, 0x40AE116F, 0x4E2B7C93, 0xE7172F0C, 0x63677EC4, 0x1841D819, 0x82F4D227, 0x9A97D7CD,
+0x178C29ED, 0x61C30D78, 0x9B007D18, 0x79CDA101, 0xCAC8AD26, 0x13106379, 0x1CE85578, 0x17F7D1DC,
+0x2A7E08B5, 0x63E567C1, 0x43230C44, 0x936015AF, 0x46016F3E, 0x401900D5, 0x032AE639, 0x29C4A785,
+0x58C95D0D, 0x83A60211, 0x474E7869, 0x30A296AA, 0x384A27FA, 0xE0CBB80F, 0x9B080DB6, 0x50D9A329,
+0xF1714DEC, 0xA404A99C, 0xF17E9FB1, 0x5E21B265, 0x9CE86773, 0x834BC0D7, 0x7BC7B2E5, 0x0B8A54F7,
+0x056AC810, 0x4DFFAB03, 0xD9B1ECC7, 0x7552E32D, 0xAC19DA77, 0xB4786F96, 0x02C72853, 0xC9B0BA8D,
+0x413190E3, 0x007DA626, 0x69FA3EFD, 0xE052763A, 0xA55EB742, 0x996FE4D4, 0x491BB556, 0xE870AFF4,
+0x35795058, 0x7C86FE1A, 0x4588AFEC, 0xE305258B, 0x2B2AB4AA, 0xD46A65CA, 0xDFABFC23, 0xEF9DAFCC,
+0x56927960, 0x7637FB8B, 0x27F5F681, 0x72295E26, 0x95295A5B, 0x5D068A79, 0x677080D6, 0xD3296987,
+0x6047CA1A, 0x541780C1, 0x9E8F8FD5, 0xCF552DDB, 0xB9C3ECF3, 0x582C708F, 0xC1DB77B3, 0x1F4E5473,
+0xC7408372, 0xDA7DDBFB, 0x0F6DFB44, 0xE38595A3, 0x75F78A56, 0x52FB4BDC, 0xAF504085, 0xF9A89C1C,
+0x54222F7F, 0x0BF5360D, 0x2E4C3E8A, 0x370F186E, 0x92E96F12, 0x10A1778E, 0x6ADFDBCD, 0x66B70E60,
+0xA51C6200, 0xFDA50AE7, 0x203C5496, 0x07CA9067, 0xAAE8E3D7, 0x838D0204, 0x91257988, 0xE1A1370E,
+0x79EE053F, 0xC2C14149, 0xC2354CBF, 0xC0C307F3, 0x0AEA30FC, 0xD0DB98A7, 0x4E5F1169, 0xC1EFC42C,
+0xD75576E5, 0x83BD1491, 0x4947AD3C, 0x9839B96C, 0x96D8A2F4, 0x6F55D5AD, 0xD9D9748B, 0x3774BEF2,
+0x82E469E5, 0x7AC1F831, 0x94C1BCEC, 0xB5653C15, 0xAA6AB576, 0xFE96BFCA, 0xD829B98A, 0x07D3BDCE,
+0x3B5A007C, 0x1D03A663, 0xF561D1CD, 0x7ADADBDC, 0xB252DFCE, 0xE3900F12, 0xCDA3F71A, 0xEBF0F63D,
+0xBE8FC28A, 0xE91F739C, 0xE88BDC01, 0xC66C2A0E, 0x3AC4B70B, 0xF3541A2C, 0x72D639DA, 0xD9E76C32,
+0x3EA26877, 0x66D69E16, 0x5CF37941, 0xC5C65B43, 0xF7FC1D61, 0x546FD36C, 0xB72EF7D7, 0x23C4FFC2,
+0x7E9E5EB2, 0xFA770443, 0x6FAEA748, 0x89E86067, 0x2788733F, 0x0D32EE97, 0xBBD25E5B, 0x8C88C0EF,
+0x57C2E551, 0xCEAF048E, 0xE2839CC4, 0x88DF2869, 0x71DD83F3, 0x1596A529, 0x0498C4E4, 0x5A322E96,
+0x34D5186E, 0xBC567A84, 0xAF3BA23C, 0x591D0B4A, 0x5685F42A, 0x8146E6AF, 0xC49381A9, 0x2CDCD238,
+0xCE568A1D, 0x92B1AA3C, 0xA668B4F7, 0x6DBB0304, 0xEE0342C3, 0x3E170A63, 0xA2EAF604, 0x76CB8430,
+0x58D7F54A, 0xE90EDF69, 0x12DA3B18, 0xD0DA15C6, 0x775FA363, 0xF32D1C0C, 0xCA01F072, 0x71F7A79A,
+0xE0027593, 0x135E7B2F, 0x9F0A07E9, 0xCB20C3EF, 0xE6DFD428, 0x3D3D0094, 0x7E9247E9, 0xC641523A,
+0xCC20D8AB, 0x67FEF7F0, 0x7E160EA9, 0x06C05AD4, 0xD34F44CD, 0xAC793418, 0xE19A015A, 0xDA6CD4FD,
+0xFED63BC8, 0xE02BF77B, 0xC4ACA992, 0xD53E40B8, 0xEA181BD8, 0xD359B76A, 0x49D90A20, 0xFCEE7FF5,
+0x58C7A2D7, 0xB1B82991, 0x9B5AF51D, 0x2DFDE665, 0xC269F4A9, 0x2988A0D7, 0x573F2C6A, 0xB815208C,
+0x503F6373, 0x5636E9E5, 0xFC83F31A, 0xABF3E274, 0x18E14DC9, 0x1EC488B8, 0x3DD31AD4, 0x768717F7,
+0xAE09562F, 0x15194A17, 0x8CD6A7CC, 0xB6DD6892, 0x769A17FE, 0xD1B417C8, 0xF791E1F9, 0x4711210F,
+0x3F3F8A14, 0x42F6E922, 0xFB42CFDA, 0x3FBDEF73, 0xFCDA7C43, 0x88B3233D, 0xB576BAA8, 0x68F81E25,
+0x9DFBE9A7, 0xA9677723, 0x3D5F3375, 0x5D2D342A, 0x20627CBC, 0x9B869425, 0x60C326F6, 0x1C8B02B5,
+0x2ECD03A6, 0x6DD1FA36, 0x05081156, 0x32BAC693, 0x11930112, 0xBE01DD0B, 0xA31814EC, 0x12D80F3F,
+0x9572E2D6, 0xB3606054, 0xB0157BEF, 0xB1FACDBF, 0x4D8C1F68, 0xE1282C8B, 0x358FF46A, 0x167FF4A3,
+0x056F186E, 0x84DEBFFA, 0xA6662F8D, 0x20224F54, 0xE45A163B, 0x1B4CC4CE, 0x5193436B, 0xD1E72605,
+0x523F6288, 0xC56D755C, 0x53DD280B, 0x490F2A22, 0x4DEF687D, 0xBA007462, 0xC8129773, 0xF904263D,
+0x52733F43, 0xFA57A820, 0x62DBC08E, 0x0702E55C, 0xD7CF0C23, 0x9430AAE2, 0x0DA7D598, 0x1E217C5B,
+0xF849799A, 0x1E1B8015, 0xF099727E, 0x0D4A9EBD, 0x32808C01, 0x9A343D0D, 0x2CCB1D5E, 0x2BF17EAF,
+0x53C57EEC, 0xB90B7362, 0x28CCF6F0, 0xC3885013, 0xA1A6C69B, 0xB33A3E7F, 0x8777DFD5, 0x9594ECEE,
+0xB9C0E9B0, 0xBA526F1C, 0x2556FB5E, 0x4166BEAC, 0x9A7F9648, 0xD490C784, 0x92D0967E, 0x47430D83,
+0x5B4C40B2, 0x310BC0B1, 0xAB3DD8A0, 0xD8CFBE70, 0xFD67154F, 0xD6F8A08E, 0x125A5DDC, 0x71C59969,
+0x0E0C2C01, 0xE39BEB58, 0xB945D12F, 0x3A244BAF, 0x7FADE4F5, 0x1D01CD3D, 0xBB0D030C, 0xF795F226,
+0xE38D66D6, 0x82211E98, 0x0563C7BD, 0xC7082350, 0x6B35871B, 0xDE0687D6, 0x3ACD6763, 0x762092B1,
+0xCC869A13, 0x991608C6, 0x5A699D58, 0xD4FDFB70, 0x197A7987, 0x6C34B3EC, 0x9E0651CF, 0x0BBD3056,
+0x70925594, 0xACF24D0E, 0x8C2388FF, 0xC9B2BEA6, 0xAD95EE3C, 0x3020DB95, 0xD10D26DA, 0x3C881B05,
+0x6A27A75A, 0xF27D6FC3, 0x20AFC1D5, 0xB39F73DD, 0x53F12ED4, 0xF3A87F97, 0x23A0C68E, 0x53B96B9C,
+0x6003569E, 0xC23029BC, 0x9F8EEFD9, 0x6EB6288E, 0x89E3AE17, 0xD674B053, 0x5DF37C71, 0xE3032360,
+0xEB9443F3, 0xA18B9608, 0x7EC177DA, 0xB74E0D2A, 0xDD2C8ADB, 0x7843008C, 0x3F24ED96, 0x3AD91D5F,
+0x3C761B66, 0x50467E77, 0x1EA94F42, 0xA5E7B377, 0xB3DD8110, 0xBC758B48, 0x22EFC775, 0x9637C386,
+0xD9C4EAFE, 0xF575CD42, 0x3213302D, 0x692B81F1, 0xA06F75F2, 0xD1BF42D0, 0x506B2BFD, 0xC3AFFDFF,
+0x75D55F54, 0x70F65176, 0x7C271A8B, 0x8818BB52, 0xC2A2266D, 0xF4E8F5B4, 0xD636D303, 0xADC0D6A3,
+0xE69C0AFF, 0x6C67A933, 0xEE862379, 0x32A1ACAE, 0x8D091AD0, 0xFA47EB4F, 0xBF150982, 0x9773FE10,
+0x92E2A30A, 0x4280C325, 0x4A79D79E, 0xA9456358, 0x21B9CE9B, 0xDF50A099, 0xF769A5B0, 0x4333B423,
+0xBA0D9ECC, 0x20D5B35F, 0x4717D31A, 0xC3606D78, 0xC94E4B13, 0x8210A52B, 0x9821D712, 0x3F1E698B,
+0x66A97457, 0xE03BB50F, 0x2EE4F7BB, 0x514F7591, 0xC3C50A9D, 0x7C716A2C, 0x469C0446, 0x046DA319,
+0x15753190, 0xFFDB0ED9, 0x3E7BE38A, 0xD3F915E4, 0xDA52C88C, 0x0B8D1D9E, 0x849604E5, 0x944129E6,
+0x4E385C9C, 0x5008EF0D, 0x2946AA78, 0xB5DFE0E4, 0x035528CF, 0x14F1B926, 0xEF6A3AB8, 0x01BE5BE3,
+0xACFAED91, 0x856E8EAC, 0xF1542BA8, 0x78AC4B00, 0xA2730F63, 0xCD822E0A, 0xD4090068, 0x5C406A04,
+0xFAAF96F4, 0x97BB3778, 0x7B900E0D, 0x60140446, 0x48BEB882, 0x8DA5BF7E, 0x01337609, 0x515A420A,
+0x7F4F0811, 0x16090F97, 0x42EBF4B9, 0x7BA1B43E, 0xCDFA7391, 0xB619142B, 0xC6132DF0, 0x686BC914,
+0xE408351A, 0xE000A017, 0x99F518BC, 0x1FD9099E, 0x92452FC5, 0x0E82373D, 0x5F6E8DAD, 0xA9E613C7,
+0xD207A0D6, 0x7F7D568B, 0x09F2DA95, 0x2E3466EF, 0xFFBC82C5, 0xC79994FF, 0x1B4158C6, 0x912338F5,
+0x9E0EFE57, 0x1D4E74C8, 0xDB66FB69, 0xF0A9B6C2, 0x47FA566B, 0x15B60619, 0x02633485, 0xEBDE31C0,
+0x13FF50F7, 0x9C7C4786, 0x52E8B73B, 0x95D23C98, 0x045842E6, 0xC87B2B9E, 0x54844130, 0xF0C79E0C,
+0x88DCCDC6, 0xF59B2919, 0x14894F64, 0x90A399B8, 0x14922494, 0x77E9B8AF, 0xCBE7866A, 0xD4B34909,
+0x950B3C71, 0x1D36BB9C, 0xEAF298AE, 0x0DC0466D, 0xDEA47713, 0x112BE6CD, 0x1DE5F13E, 0x50EF2F24,
+0x4C3AB1CB, 0xE4465E26, 0xDA20B996, 0x74E8CCE5, 0xEE043CB0, 0xFDA1C984, 0xEF8A2288, 0x2AA50B85,
+0x0ED3D755, 0x0AD5829E, 0x12361AB2, 0xF675CD48, 0x6B22945A, 0xA37B622C, 0x79462C3E, 0x2C1002E6,
+0xA1234373, 0xF7BAEAB2, 0x0B4776D7, 0xF9DE1D52, 0x8A1051D8, 0xEDDB31C9, 0x871592C0, 0x2CFF679F,
+0x8DCB8CC3, 0x6A496740, 0xF6D8F706, 0x2C7B496E, 0x54F268D9, 0xEC22D858, 0x9EA713D5, 0x06061A05,
+0xAEE52324, 0xE683F218, 0xAE07F2E2, 0x8F87F54C, 0x1F4B0BB5, 0x0BC23906, 0xBD3A5542, 0x896B1B67,
+0xEDCA0250, 0x17F160E9, 0xAD700300, 0xC1D076E5, 0x22096381, 0x28D572E3, 0xA11A3EBA, 0xBC294F74,
+0x335430EE, 0xDCEC4A2E, 0xCF08D5A5, 0xADC26690, 0x3C379E4E, 0xF5D6DC5B, 0xD33AEBC7, 0xFE94928D,
+0x11623C87, 0x4ED72EB7, 0x7D66A27E, 0xA0572250, 0x9C3AFFA1, 0xA98DED5A, 0x8BC5D473, 0x79A1D360,
+0x5DEA4033, 0xAE07DE7B, 0xCC3D05BB, 0x7BFD4889, 0xFC296C03, 0xA0A2858E, 0x91CB28ED, 0x164788C5,
+0xDE55BD88, 0xA40BB751, 0xB7A9E272, 0x15AA5918, 0xD45EA1F0, 0x27F8B850, 0x84A9B8B3, 0xAC4D2BC0,
+0x53676E6F, 0x1EB9FF0B, 0xC0867410, 0xB3C697AF, 0xB4B1D5CC, 0xB06B3D2D, 0xE70A610E, 0x1AD29E19,
+0x3476B5C9, 0x9E1F0C0E, 0xA0B15EBB, 0xF9166BC1, 0x35AEF82D, 0xD7878128, 0xBBD749B5, 0x01D8F6F1,
+0x9B4C2C70, 0xDF992C89, 0x1EE19298, 0x608787C9, 0xA98DA78F, 0x73902BA4, 0xFE1DAA08, 0xDF82E61C,
+0x4C1F4FA5, 0xF70E50E2, 0xF8A40A7F, 0x84CF57D5, 0xBBEF61D1, 0x73E9476C, 0xCDB5EC87, 0x5CA4DF02,
+0x41DD71A9, 0x9338134F, 0xCE15336A, 0x03A77BF8, 0xA0FAEE51, 0x4F26EF94, 0x202E314D, 0xD90DFA54,
+0x7C590280, 0xEF677EFB, 0xC9BA5127, 0x4A997145, 0x2DAD098A, 0xEABF961B, 0x1121AF5F, 0x09F650D0,
+0x906D7BC3, 0xB2FC29D3, 0x6F297816, 0x2B23F2FD, 0xD6A48CD2, 0x7E3FE712, 0xD556DB6E, 0x4865F8BE,
+0x4D102491, 0x31685335, 0x4D896C97, 0x7DDCCFD8, 0xB1FD44E8, 0x8C0C66F4, 0x777E48C7, 0xFEAF7103,
+0x9B86A05A, 0x32590096, 0x45C4663A, 0xBF223C87, 0x0B4CE12B, 0xBBA265EC, 0x98EC4579, 0xC5B1F1A0,
+0xD6FCF37F, 0x7F0B7874, 0x84A38372, 0xCB533499, 0xDD3B4428, 0x92BAF3A4, 0xD8294549, 0x71ED68F4,
+0x109A8F25, 0xAAB79074, 0x07CF61AF, 0x973144DC, 0xC6F31BA6, 0x55ADCF90, 0x3F046158, 0x0755354C,
+0x599141ED, 0xB88AB562, 0x0E2DD843, 0xEF71C7CB, 0x164EFEC2, 0x3C8BAF37, 0x7728D83B, 0x273C1E94,
+0x13C9ABD8, 0xB72BE93E, 0x08D6FD9A, 0x3CC96C97, 0x492D97C1, 0x0CCA60AE, 0x697848D2, 0x5C95FD7E,
+0x1020E6F7, 0x3B58813E, 0x2D336349, 0x5D85E3AD, 0xA4724669, 0x7D15A837, 0x971BE73F, 0xAA2E00E4,
+0x2F1A538F, 0x2CAE746C, 0xF589C086, 0x7083A361, 0x34A307D2, 0x5DCC1815, 0x910DDA76, 0x5765E931,
+0xE9A82AB1, 0x9B00129F, 0x1351577E, 0xCD2E9550, 0x7BA16D82, 0xDA56D9D2, 0x4918C8E6, 0xAA2B21EE,
+0x88110613, 0xFE618535, 0x95511DBA, 0x0ED6371A, 0xA36E7B5E, 0xB380877D, 0xB776FAB1, 0x00379DFC,
+0x5447FCCB, 0xA34ECB69, 0x81D967E8, 0xAF40B7F4, 0x4BEC1FF1, 0x8D6F9ECD, 0x278799D3, 0x67EC0B39,
+0x4AEB5570, 0xD67D143A, 0x9E6364F1, 0x8428E81A, 0x0705F5AE, 0xC985BBA6, 0xCD423B27, 0x7272DC37,
+0xF2B4F7EB, 0xA73DDFE0, 0x0A7F31C9, 0xBDDACADF, 0x1D4DA612, 0x98466907, 0x8E499E56, 0xD7F79740,
+0x8F8A8511, 0xB0DD52FC, 0x1B1CE1CD, 0xC7BFF0A5, 0x92A126D8, 0xDB2A32B8, 0x025FF64F, 0x17100EC0,
+0x6581075D, 0x700CDA51, 0x4DAC606A, 0xD3385E52, 0xA8A76245, 0x5D536D78, 0x73AD09E3, 0x36258D5F,
+0xE763CE77, 0x9B8F8D6B, 0x4E9843BB, 0xBDEE06DC, 0x5096E8E8, 0xDD189431, 0x24A51E84, 0xDC41A118,
+0x1DF8A758, 0xA383C784, 0x9735541C, 0xEEB9C990, 0xF9DE2F7A, 0xE4F3EA60, 0x60E9732F, 0x1B6F0828,
+0x6CF59676, 0xA98E7528, 0x6990EC94, 0x401D4827, 0x9E2B2EAC, 0x6C383CED, 0x8CC351B4, 0xC470F891,
+0xD49AEEDD, 0x323C3ACE, 0x163ECAAF, 0xCAB5840F, 0xC02EE28D, 0x7A6284FE, 0x795F8FB5, 0x52990FA1,
+0x8655D7E7, 0x50E66599, 0xADEF336C, 0x0663F4D3, 0x8A9185F3, 0x7E8C321E, 0x5E112445, 0xD9BFEC59,
+0x0E4E13A7, 0x9EB6754C, 0x44872D67, 0x8DDA7DB0, 0x74B6D0D6, 0x25E2A721, 0x5ADFEB71, 0x88262CD9,
+0x0491CBEC, 0x5CE452A6, 0x2B01A6AF, 0xE9B01889, 0x9021503C, 0x8B006D60, 0xE0D57880, 0x6994AB02,
+0xE33556C6, 0x1DC42D53, 0x67BD17BB, 0xD1A88798, 0x01170829, 0x8333809F, 0x05AFC238, 0x33134E6C,
+0xCCF1D1D2, 0xF2B9DCE3, 0x5130D4E5, 0xF05129C8, 0x9D0E0DBB, 0x8E6464DC, 0x8902CA94, 0x3B0A6690,
+0x70692A79, 0xDB172297, 0x5254C97C, 0x189ACBD7, 0x782FE0D4, 0xC39375C9, 0x784DEB86, 0x17F567DC,
+0x237BE2C9, 0xDB1A8E1D, 0x3378E37A, 0x1922DB06, 0x986E6705, 0x404214FB, 0xDB772CAD, 0xDF03CAC5,
+0x6CC0C532, 0xFC27EC4B, 0x6A406FCB, 0x89538ADA, 0x2BEF638B, 0x86B06CB6, 0x4CCF69AA, 0x033CC66D,
+0xD036DE31, 0x68AF7413, 0x53A8C9DE, 0x0BD7DD8E, 0xDDCA7B0D, 0xEE7F09D3, 0x042AF330, 0x900B4832,
+0x5490191F, 0x730329AE, 0xB3F38397, 0x1310C477, 0xF3D267CD, 0x5ECD71FE, 0xC9B9B71C, 0xBC9CB2CA,
+0xDD5FD6EA, 0xE6091526, 0xD8164E7C, 0xD127976E, 0xE3036CCE, 0x58DB908A, 0x464E730C, 0xCA9D9DF2,
+0x168388F5, 0x2E9EE1AB, 0x2B91F637, 0x168002E2, 0xDB111761, 0x4DA3D73B, 0x97FB3A03, 0xBEA5162F,
+0xC8B299B9, 0x2254C75D, 0x7FB90D4A, 0x226C09C7, 0xA7205C52, 0xE53B9D42, 0x1280E30E, 0x38F23BD7,
+0x00528987, 0xBAAFDCF9, 0x5905E5B4, 0x9D36A234, 0xEAE2746E, 0x49FD16D4, 0x59ABC1CB, 0xC0AF1997,
+0x17210C5B, 0x9DBA88DA, 0x04F105F2, 0x1D9E8F0B, 0x6B5967FB, 0xDA5D3CF7, 0xE330E116, 0x9A440E5B,
+0x8AE7A296, 0x5D985C6D, 0x04391785, 0x2F32C515, 0x3FFE542A, 0x2AA9C6DA, 0xBA547D48, 0xC1664BA0,
+0xB3B11970, 0x14F42F2A, 0x0A8695D0, 0xFC25A971, 0x6FC224D7, 0xAF06C8C3, 0x8DCE76DB, 0xCC5E458F,
+0x9222B203, 0x468F4113, 0xBAE4192B, 0xF5539AC1, 0x6EBA6985, 0x7B98DE30, 0x4F112A2D, 0xA72DEA02,
+0x2B7EEABD, 0x4D7F12D3, 0x102D4977, 0xB212CC22, 0xFC516438, 0xCA7A3930, 0xE2C1B59C, 0xF45C28A8,
+0x1571DF90, 0x4D9C1F8A, 0xBA01E8FB, 0x7FCFD17C, 0x847E67C8, 0x27391ADA, 0xC98E822F, 0x6665B008,
+0x0EE19BFA, 0xF2047F03, 0xC6225C2C, 0xD266FE22, 0x98877ACA, 0x3C72BE92, 0xD4791B18, 0xD2CAEEC8,
+0x1B9A2F36, 0xBE926A67, 0xCAFBC318, 0xA353A235, 0x1B8C9A2E, 0x9975D1AC, 0x24B6E169, 0xB7B50C31,
+0x41184520, 0x8762248B, 0x032188B8, 0xC057436D, 0xB7902D1C, 0x40921D9F, 0x78F8D84E, 0x5E0879C4,
+0xCC457736, 0xF066CCB6, 0xDBE7E504, 0xD24B5FA6, 0x839213FA, 0xD9A1E631, 0xD9B01EA3, 0x36B1DCD3,
+0xF25BFA69, 0x361CB034, 0x7F006204, 0x3EAF8E5F, 0x8EDEF3FE, 0xBA6A037B, 0x5E31BC6F, 0x1CA499AA,
+0x5DC7E021, 0x130EC535, 0xA9B8F4F5, 0x089BD54F, 0x0CA0FA78, 0x16BB91C5, 0x5FACA984, 0x33ECFB59,
+0xE55DB5D4, 0x06B2F441, 0x300F7FA2, 0x53338F19, 0xA03A0BFB, 0x42BD817B, 0x7DD4F98F, 0x046A9399,
+0x94B63CFE, 0x60101483, 0x02AFD570, 0x7ADA4B77, 0x77D42B75, 0x1BF00546, 0xD69DC07C, 0x274B638E,
+0x780E87C1, 0x7E2868B9, 0xFA5EFB9F, 0xB1CB539C, 0x576A6294, 0x716E5007, 0x1F18B02F, 0x3C65DA7A,
+0x51DE34F7, 0x7EB60A30, 0xFC6B9339, 0x2C324C5F, 0x60AD1F84, 0x07D2663E, 0xA6F1B8CA, 0xF64CD929,
+0xF19FD8B9, 0x03A041B5, 0x6BD8CDCF, 0x62DB39BB, 0x8DF279AB, 0x110310C3, 0x18158879, 0x81B7FAAF,
+0x9429BCEB, 0x4D413488, 0x8C819EF9, 0x059E511D, 0x3239BD57, 0x6DBF9FED, 0x67804DDA, 0xCFB8D84D,
+0x86C68758, 0x386E1FA0, 0x4A11A09A, 0x26D8697B, 0x873158AE, 0x0BA0930D, 0x1EF872BB, 0x174BD67D,
+0x3509922D, 0xE1A1CEFE, 0x4225B0F3, 0x9A4F3169, 0x1682C30E, 0x4A049A34, 0x47A3DD47, 0xE23468FE,
+0x81ECD06D, 0x5234643A, 0x3C190B65, 0xF824B940, 0x47F76598, 0x7D49E1D7, 0xFCD5C0D4, 0x030BCDD9,
+0xEB7CC364, 0xFCC89100, 0x67231CC5, 0x210A3AED, 0x897A4B64, 0x94F9A587, 0xF4CF9D81, 0x4E145356,
+0xD4173F97, 0x3B5BA133, 0x570A221F, 0x5DBBEAAF, 0x52AF91BC, 0x91BB068D, 0xD7248F71, 0x17B5A789,
+0xF484E09C, 0x81549791, 0x5F8DCCDB, 0x4D9AD057, 0x8B4198F7, 0xE44EDB47, 0x03067184, 0xB5EF6323,
+0x379EEC14, 0x94559494, 0xDEEA9115, 0x97A5DE5B, 0xB44FC8D8, 0x476FE085, 0x07430CE9, 0x134EEE95,
+0xAC216CF0, 0xFAEC19BC, 0x4F3C0863, 0xAE4CD804, 0xDC452121, 0xBB10E14E, 0xCBC3ABC5, 0xD3930651,
+0x5D8ED92E, 0x04934BE6, 0x1673A977, 0x471356EA, 0xB7B27090, 0x8765E5A8, 0x3D7DEE60, 0x2D11E7D5,
+0x904C6B67, 0xDE431C15, 0x57A27E90, 0xABBD657D, 0x4A8AD688, 0x9A101266, 0x4D5193C4, 0xA008A63F,
+0x03D465CD, 0xB887F64C, 0xBE012507, 0xE267FF9C, 0x75E257BB, 0x8540D835, 0xC841BCC5, 0x662D9F5C,
+0x162E10FF, 0x94EF5E94, 0x2CA87E2D, 0xDF42E8AF, 0x837A1806, 0x91E8A606, 0x10BB8435, 0x68F5E10E,
+0x9C1BFCBB, 0xA20D8660, 0xFBD47BF4, 0x6D43CE3E, 0xAA663B7D, 0xFB4DC948, 0xC1282C86, 0x2B808BC5,
+0x91463D75, 0xFF255493, 0x41AEE346, 0xCE3F79A5, 0xC054F7CD, 0xE0642C38, 0xEFF57DD8, 0xB1301861,
+0xF10421FD, 0x1F548901, 0xB74DE34E, 0x5F33D346, 0x45E041D5, 0x71669294, 0xE0057754, 0xE6538F38,
+0xCEDBDFDE, 0xFB9711C3, 0xEF07363D, 0x76287D1F, 0xF5B1732A, 0xCD959267, 0xC8FB1415, 0x83B821DA,
+0xE5ABA175, 0x64384EEB, 0xAD8D557D, 0x25ADFD19, 0x1A01ED8C, 0xF01E0692, 0xEF00EBB7, 0x0084A885,
+0xC1CC07A7, 0x12A88E58, 0x83AB48FE, 0xCBF0460A, 0xE97A742E, 0xA3235F85, 0xE22AB49D, 0xF0CA1006,
+0x4682660C, 0xFFDE2885, 0x8EEB4A78, 0x132A4FF5, 0x808CA259, 0xE669E252, 0xCA4A0318, 0x54CF71AD,
+0xB96E6194, 0x04A8B40A, 0xCF4C1D29, 0x11B613BB, 0x272F40CF, 0x36C7C846, 0xE8B39B40, 0xF624DA4C,
+0x8E281B89, 0xE2A45999, 0x515411DF, 0x8F0ABC76, 0xFFEEA866, 0x4374CD07, 0xA8444ABA, 0xD324FC21,
+0x5474C5C5, 0xD1EA5BD8, 0x844F1B4A, 0x5DD1E418, 0xD8E3D60A, 0x2073FC9C, 0xE13D36BB, 0x77CC84D0,
+0xC36B462B, 0x39ACAD20, 0x20A313AF, 0x7F867554, 0x7B00418B, 0xC6A334E0, 0xD00FB6F8, 0xC99BAA41,
+0xD75FAC78, 0xD8AF6166, 0xB650CE4C, 0x3C80F53F, 0xD1026B6B, 0xCD745939, 0xF757137A, 0xCEE4F821,
+0x99629DE8, 0x9F486455, 0xB8CBDC83, 0x82335DC9, 0xB7D2D21E, 0x7819CBBA, 0xDD046A68, 0x4352DBD7,
+0x83E6FDE0, 0xFE1F22E8, 0xDF6E4D85, 0xE9DF2D5F, 0xD33A4223, 0xF43BBD94, 0xD4111AB4, 0x8644384A,
+0x8AF9253B, 0x203C702F, 0x5A1B935B, 0x147B225B, 0xA64F1FC3, 0x854A7149, 0x1ED18F07, 0x5159E70B,
+0x18CE5E71, 0x87CF9C3C, 0x7BCAE373, 0x561F4E31, 0xE74B3432, 0x822B4611, 0x598650D4, 0xEF814CB1,
+0xB5D1C1D3, 0x70801817, 0x45D70A8A, 0xD7BD22C1, 0xBAB1F8F7, 0xD46FE964, 0x6DEC7D64, 0x29D1FA16,
+0xEB10E70E, 0xDE54CF9F, 0x2E20F34C, 0xE1353330, 0x5AC18754, 0x4CF8141B, 0xD601021B, 0x5B495C27,
+0xDFD70354, 0xA7CDC5BF, 0x4BFB1828, 0x1BECAD51, 0x8B04A8B8, 0x0B859B96, 0x33F83406, 0xE3ECEEB4,
+0xCDA1AB34, 0x89A5121F, 0xFC1FD1BF, 0xF268D35E, 0xE2EBF736, 0x1FBC7E60, 0xABE2F06B, 0xE41CA81D,
+0x33476F80, 0x084D6150, 0x70246185, 0xCA873BF2, 0xC37F16D5, 0x4498A2A2, 0xCDEBC088, 0xA194690D,
+0xEAD1E1BB, 0xAD3FB858, 0xE72F1A87, 0x5E765344, 0xDAE5E328, 0xEA744954, 0x8CA2CE38, 0x81BCE672,
+0x8903C721, 0x5A45CC84, 0x5FE6C7C6, 0xC8B78AFF, 0x5C07349D, 0x5D2358BF, 0x8E571608, 0xABB0F657,
+0x6034E0D4, 0xEF1B77B2, 0xDDD7939E, 0x54C0D90F, 0x52C9B968, 0x3BECC4A0, 0x8152132F, 0xC7E90A16,
+0xE5BC3C8C, 0xD625AF7A, 0x2376FB58, 0xC7DCA1C6, 0xDB03F393, 0xBAFC540E, 0xBF1680AF, 0x7A272850,
+0x8FC85A18, 0x56102817, 0x67F82779, 0x2D837FF0, 0xCCBCFC26, 0xCF6089C0, 0x688FF8FE, 0xE877F59D,
+0xBB205140, 0x4E18158D, 0x45ACDF3D, 0x64904793, 0xCD2BFEE9, 0xAE59D395, 0x42E96AC4, 0x1EE0F905,
+0x973E6542, 0x0A690906, 0xA7797772, 0x8E1C3CE9, 0xD7C0E25D, 0x015B9859, 0xEAE09BEF, 0x6DBB51CD,
+0x7829BF74, 0x9A137266, 0x9BFD705B, 0x0BBDF61E, 0x47052D8E, 0xD2984F66, 0x46F5557B, 0x0206C20C,
+0x4FBB6651, 0x5F99FDDF, 0x796FEF28, 0xAE5D6165, 0x49752A9F, 0x5C673974, 0x0F0A30A2, 0xF8CE2B8C,
+0x59D8EB51, 0x736EFBC9, 0x1D10F952, 0x67F3C321, 0xEEC5D188, 0xC07E622A, 0x6F6AE08E, 0x6069585B,
+0x40ECF152, 0xAEF35FBA, 0x03653AC3, 0x0966F754, 0x65373827, 0xDF1094DE, 0x50835427, 0x479F39C2,
+0x6331EB56, 0xA213B9B8, 0xB28F0B7D, 0xEF0E69AE, 0x72AAFEE5, 0xEA824D17, 0x3B859388, 0x9A52103C,
+0xA3376005, 0x50587163, 0x8B3F1774, 0x1BC2B5AF, 0x154C299F, 0x7E523FF5, 0x47E0C199, 0x5D9BFFBF,
+0x5D5E0D51, 0xEFC8F370, 0x7EBD2C38, 0xC61476F0, 0xE83243A1, 0x1472747E, 0x97A6312D, 0x20694737,
+0x36934AED, 0xCEA7FF7B, 0xE152F058, 0xE4AC4069, 0x2D7E0C71, 0x2500F12F, 0xB0CCC0A1, 0x1AE97AD8,
+0x1ED18FE7, 0x85567A6B, 0x380E5DFF, 0xCBF17615, 0xFBD47A0B, 0xF77429F4, 0xA5E65668, 0x7BBF7F1D,
+0x6B2595CB, 0x88A60555, 0xF5B160CE, 0x1E9845F8, 0x39BDD0F0, 0xD0C97DFD, 0x39917595, 0xDBAA661A,
+0x645E486D, 0x0C83430A, 0x0D4B5F11, 0x01A8DE01, 0x8CD733E0, 0xA01E1255, 0x147718C6, 0xCEC233A3,
+0xB794AD60, 0x1B2A815E, 0x783A0BA4, 0x03E59A09, 0xE2A0DF9E, 0x93C866A0, 0x06230CF1, 0xFBE66858,
+0x7E756B3F, 0xB64B1564, 0xCBF38CEB, 0x37310440, 0x3BBD6347, 0x4A3F4D7F, 0x38FAE7AB, 0x2641550F,
+0x7AA09073, 0xCCBCBE5D, 0x1900E3AF, 0xDD88EA6A, 0x448E1482, 0xDF9CE6FB, 0x0095998F, 0xDFD8A6CD,
+0x6E8C3EE8, 0x40718D89, 0xFEFB13A7, 0xEF37F3A1, 0xC263C653, 0xD198EDE6, 0x7C4E226B, 0xC593E5A5,
+0x01A5B00F, 0x6C132BD6, 0x790392C7, 0x7690F298, 0xCB974DD7, 0x9A058585, 0xE9350E85, 0x2E643FDE,
+0x16A2A9E8, 0xC403C9BC, 0x5221C174, 0x65B77FFC, 0xD0B81E03, 0xAB4C2F04, 0x696AAEBF, 0x5D4071BE,
+0xA0A9773B, 0xCA5EDA53, 0x5CA25068, 0xFD396CB8, 0xE37299AA, 0xB4DF7E00, 0x63034646, 0x070D28EF,
+0xD302694A, 0x1C4909F6, 0x65C7106E, 0x1816736E, 0x52AD7CB5, 0xC811E05E, 0xA5F42568, 0x1868915B,
+0x388D1A26, 0xCBAA997E, 0xB6B2B825, 0x1DB89C99, 0x1C8F8DFD, 0x188DC457, 0xE6C7CD0C, 0x4D938E42,
+0xB9464023, 0x6C2F4FD3, 0xA9DCCDD4, 0xB24410D6, 0x4A43F1B0, 0xC6594DF5, 0x513E1330, 0x16BD29B4,
+0xCC12A778, 0x6A574199, 0x589207C6, 0x473EBDAF, 0x4ED87641, 0x87D421A3, 0x0A5A4344, 0xBFA1C2D0,
+0x413A8087, 0x4A008551, 0x02399D93, 0x9385BEFA, 0x45FF2FD1, 0x80D866EC, 0xCEE80C62, 0xE25BE67F,
+0x9EBB325B, 0xA960FFCF, 0x38F992AA, 0xDA92D62C, 0xD1D4238C, 0xA2B55846, 0xF3B2500A, 0x45A9507C,
+0x1306382B, 0xAA25C153, 0x8669C5F7, 0x62C95956, 0xADD97638, 0x2ECA05E7, 0x01A3AAE4, 0x7DBD1ECB,
+0x17301C45, 0x049FFFE4, 0xF757C1F9, 0x96C8F800, 0x85F90AF2, 0xA686F342, 0xAF116C18, 0x2697A8B1,
+0xF95806E3, 0x30C00AC1, 0xEFBEA358, 0xCBA8213F, 0xC267E6FD, 0x5E0F26EB, 0x61E9B9C8, 0xEFC2C48B,
+0x1DA72F18, 0x48BC6780, 0x1CD16226, 0xDDCF7802, 0x27D72145, 0xC3771E0A, 0x13CF93A2, 0xE1B9C48A,
+0xD907E973, 0xF419F305, 0x8D98667F, 0x08821769, 0x0EB4247C, 0x116AD33E, 0x676DA50D, 0x24DDE618,
+0x7D05CCC4, 0x58F5C27C, 0x41984332, 0x3E037761, 0xC638F792, 0xF092F3CF, 0x572C80F7, 0xB952693B,
+0x03BB5BBB, 0x2B67C852, 0xF5E0D919, 0xA8FFBC49, 0xD2DF1602, 0xB3EBC095, 0xCBE16B7C, 0xD482E9A1,
+0x221534EA, 0xA4E6BBE1, 0x373E29A4, 0xEBC0DC9E, 0x140CB315, 0x5DD3B074, 0xC9A8E0E5, 0xDDC160D2,
+0x94E5803A, 0x18A847C4, 0x0B7E77D9, 0x9B13DF00, 0x80555597, 0x05F587C4, 0x92E7FFCB, 0x918E45FF,
+0x83D46C93, 0x4B5C1696, 0x089EB46C, 0x9BC5901B, 0xA0841C25, 0x88291BFD, 0xB32CB40F, 0xCA7D1A47,
+0x6C2D3317, 0xBD49B5DF, 0x4B3A4DBB, 0x12AE840C, 0xEF41B098, 0x2FBA9D4D, 0x7276DE11, 0xD49985DD,
+0xBDB76941, 0x5FD29434, 0x03336C99, 0x9D4253B6, 0x11A43B8B, 0x09051B7B, 0x48513FE8, 0xAF64BD39,
+0xA38E6C42, 0xCF5B866F, 0xFE396D75, 0xABA00EAB, 0x27D7F1C4, 0x91C04CC8, 0x60A95D8F, 0xF5AB715C,
+0xE0D581E5, 0xE4EFA58D, 0xE934BD9F, 0x5E217166, 0x5640ED0D, 0x82450A54, 0x4F80418F, 0x4BE34E48,
+0xC5A00B3A, 0x2D4D947B, 0xB3B6215F, 0xDADFD46E, 0x7B2CFFE5, 0x9E9342C6, 0x2B624088, 0x93604AEC,
+0x6821AE7F, 0x5DA29405, 0x674C8576, 0x4B4835D8, 0x8BB44040, 0x2790A7CB, 0x00B89ECF, 0x7D23B14B,
+0x130F28E4, 0x6EB70D72, 0xF5E2D843, 0x4B1D45A3, 0x875E290C, 0x4B66747F, 0x3D42A6C0, 0x717563E7,
+0x9FCD31C4, 0x029E486C, 0xF0819394, 0xE972DF03, 0x941C9693, 0x93684C58, 0xA8E15004, 0x0C0AE973,
+0x96D84137, 0x3C7B1E3B, 0xD08347B9, 0xBD33D999, 0xBF81F15D, 0xE73A474E, 0xD1F9B960, 0x0404E5E3,
+0x6BA6673C, 0x9D04A7BF, 0x4A8B73A1, 0x485109F1, 0xA900AA1B, 0x18BCC444, 0xAA1CB02E, 0xB1FBEEBF,
+0x0EDBA89A, 0x75360E2A, 0x79EC4BBE, 0xC002A4A7, 0x538A87E5, 0x5DF3D135, 0x12D667FF, 0xBFAFF270,
+0x167053CB, 0x58B3F0BE, 0x775015C2, 0x122300E5, 0xF1CF37B0, 0xB6635D5B, 0x634EFB9A, 0x3EECFC24,
+0x3D329CEF, 0x04B1465D, 0xA6F6D8A3, 0xD00008E6, 0x7D6A526F, 0x984F9AF0, 0x542F55EF, 0x12324F61,
+0x6DD113BF, 0xE78A01A0, 0x34F2696D, 0x26ABBDDF, 0xBB91A1ED, 0x83E122F0, 0x7448AF07, 0x6C992838,
+0x651BECF6, 0xD19B807D, 0x65DD1C2B, 0x9D840027, 0x3AC2D678, 0x6D81CAC9, 0x4FC3E60F, 0xD44C214F,
+0xA97A20A6, 0xCA02A8E8, 0x9CED053B, 0x6BD034F0, 0x57E5A57D, 0x2AF14E58, 0x8F4D05AA, 0x1CEF9F7E,
+0xD9F44BAA, 0x0681F7CB, 0x9A70B794, 0xB691980F, 0x3C475B7C, 0xC8C6701D, 0xB847A80B, 0xBEB68F01,
+0x7A94B463, 0x853E7AD3, 0xC193B6D3, 0x5B4E95B2, 0x6E6EBADF, 0x26B0F42B, 0x4C4F313D, 0xE79F00C2,
+0x217B7F33, 0xA5601596, 0x655A407B, 0x285928DA, 0x6EF4A141, 0x8E7109C3, 0x78506DE3, 0x23B2DBBD,
+0x7D127B05, 0x21C39EFB, 0xF8704A39, 0xE0AB6ACD, 0x7B43F5E0, 0xEF8731AC, 0xABA0176A, 0x7F515FFC,
+0x9FD30617, 0xD8D9FF79, 0x484E0FEE, 0x63B526CF, 0x9DDA5EB0, 0x76D9A498, 0x3E1D6AC6, 0xAD42DC41,
+0xD5D54A5C, 0xEDC269BC, 0x0B6140EA, 0xD387E853, 0x9B32D654, 0x33C55557, 0xC9ED4666, 0x13CE030C,
+0x8BD08C1C, 0x32D818D3, 0x0925A303, 0x4A5446CF, 0xB587F851, 0xFBD66834, 0xF96201D1, 0xF731DEF0,
+0x09851CAB, 0x79370F35, 0xBD2BA142, 0xE488493E, 0x58E7552B, 0xEE8DA8F8, 0x85822209, 0x6445BEEE,
+0xC81D4435, 0xF3418F5C, 0x5A618C2B, 0x00D11AB9, 0xFCD8E28A, 0x36828FB5, 0x99EF4A67, 0x789D5CF1,
+0x0E02251B, 0x3D9F069A, 0x0AE125EF, 0xEAEB8BA1, 0xED8F6105, 0xDC360541, 0x823E025A, 0x5319281C,
+0xADA9B71D, 0xD2FA565B, 0x9A007CCF, 0x67726781, 0xCD46D150, 0xA73980C2, 0xCF45C710, 0xB4F1A342,
+0x5EE386D1, 0x3D1B752D, 0x39DBEDFE, 0x307846A8, 0xE10EC459, 0x43AFD85D, 0xB6CB6875, 0x110D95A5,
+0x30C24D42, 0xD66E085F, 0xDFD8449B, 0x48C6DFB5, 0x7A9B4578, 0x8B9796B2, 0xDF59CA29, 0x2D49BACC,
+0x9F14CFAC, 0x8F488F6B, 0xAC43CED1, 0xF57036DC, 0x138A3372, 0x409E6DB2, 0x40A4840A, 0x833EAEAD,
+0xC9C69F13, 0xD3F55AE1, 0x3449C56E, 0xB76F0E76, 0xB03665F0, 0x5011C39D, 0x86A77E5E, 0x65DE699A,
+0x345D4CF2, 0x21B3537F, 0xD3E59D47, 0xF74431EF, 0x1AB8DA92, 0xD0362F7C, 0x490AF423, 0x6A8441D7,
+0x2853BE9E, 0xD246F0D3, 0x4F614F04, 0xF60FB23E, 0x27760D4C, 0x9BA867EF, 0xA4E6FC5C, 0x79F6866D,
+0xFB772324, 0xD06EBCA1, 0x1FAB1594, 0xFE1FB8A8, 0xABBAC8A0, 0xDC839F28, 0x87330C2D, 0x8D93273D,
+0xD5788BD7, 0xEC7128A6, 0xE581AFB2, 0x827B67FF, 0x097238FE, 0x1693EFBA, 0xF21CA68E, 0x0F046CDF,
+0xCFC57252, 0x0804F738, 0xB6F3DC4D, 0x82D4D835, 0x6B922BD4, 0x9763F141, 0x7D43C10B, 0x72F15E20,
+0x05FB5F38, 0xB0B1EB80, 0x78E02FE5, 0x1A18D933, 0x43F8532D, 0xF12A9AC3, 0xBB4DC408, 0x5479CD32,
+0xF7ED4F9F, 0xB0D36317, 0x921C8C47, 0x4CC1F433, 0xF2AA83C2, 0xC25F635D, 0x4CBCB244, 0xF831C365,
+0x376E0843, 0x03DAE64D, 0x935212D8, 0xDD5031FB, 0x074DE47F, 0xA1FEC58A, 0x6EBB4448, 0xB6EEB9EE,
+0x6CF04BBD, 0xC61B6AAB, 0x8FD787C6, 0x035C9F6D, 0x22E78216, 0xC0AB7858, 0xE96031CF, 0x20DE56CD,
+0x2AA419B7, 0x8CC7A04A, 0x1EDAEAE7, 0x6E5F267D, 0xFE6FE774, 0x3FFCED10, 0xA24ACA0A, 0xD83641D1,
+0xAECE2DBA, 0x1363E381, 0x5A960483, 0x027D56BA, 0x58F470BD, 0xE5A160F8, 0x62B76486, 0x3106631E,
+0x7D30D00E, 0xB414E180, 0xAA7FC0B7, 0xF99139E5, 0x1F4F8FBD, 0xCCF6FD03, 0x0E3D8747, 0x69D525D4,
+0x43EB6D5C, 0xC8A722CB, 0xEF119D49, 0xCF6BC51A, 0xD01BE46F, 0xC5273193, 0x1FD35294, 0xE9A53F44,
+0xD109D6D9, 0x6E748D02, 0x9B9F2F6E, 0x84F4F977, 0x67296301, 0x80C5257D, 0xB58E0F19, 0x2584F7E8,
+0x17AD9502, 0xFBAFE062, 0x0D45B369, 0xB7D7DC0A, 0xCF352269, 0xDFAF15DC, 0x221BEE89, 0x08BBE405,
+0x781A9736, 0x10575D04, 0x8EF3804A, 0xC15DF182, 0x48370789, 0x8075D8DF, 0x5F7C972F, 0x16805542,
+0x56483CFC, 0x85420DBC, 0xF090FD70, 0x53D755D7, 0xB0ABDF00, 0xB7B9167D, 0x2E3B9BE6, 0xFDD87E23,
+0x33BC18C3, 0xF9C525E0, 0xB5B6A051, 0x0D12AA4F, 0xF5CA2DF7, 0x893273EA, 0xC3FF61E7, 0x1018BA6C,
+0x8E30C37D, 0x4E4DAC18, 0xA66856C0, 0x0C531416, 0xBEDE6BB8, 0xA170CDB0, 0xE08BA0FD, 0xB107895E,
+0xF9EA3B13, 0x7EFEEE27, 0x57948CC2, 0x8CA463A3, 0xEC81931E, 0x161E3BC4, 0x8841D882, 0x42EDA2BD,
+0x5B2B4766, 0x0CE91077, 0xD0B66BE9, 0xD6977748, 0x9E4E2523, 0xEB6F9A72, 0x359D0CED, 0xD0100259,
+0xC0F8B92A, 0x4EEBCA52, 0xF7D8147F, 0x447E20EB, 0xF1EF2016, 0x2D0A7E0F, 0x51DEA63C, 0x73D7C6CC,
+0x64796DCB, 0x20153445, 0x275D581D, 0x2033A599, 0xCD785E74, 0xE08A2916, 0x09BF856E, 0x2BF41965,
+0x72070189, 0x97AC49F7, 0xB37CB840, 0x39136D10, 0x0339BAFD, 0x8A263964, 0xAF4AE6B5, 0xEFD51EAE,
+0x0DA1899D, 0x0143C7EF, 0xB28FF096, 0x40750E67, 0x8BAD003C, 0xEE02C429, 0xCD8D41C3, 0xF3C7555C,
+0xB0A0E42B, 0xF20CB794, 0x7F9FA8EF, 0xAE3E8026, 0x91164A7A, 0x85927AFA, 0x4CAF33D1, 0x444C01EE,
+0xAB941694, 0x042FD810, 0x4AF70803, 0x8E718D94, 0xF0191592, 0xFF9B74CF, 0xDC46D48E, 0xF3E87BCE,
+0x7291D55F, 0x1E4727AD, 0x8181269F, 0x404E1CB1, 0xFE3BF645, 0xDCB607E3, 0x1ABBD77B, 0xE69C73AD,
+0xB1FD4585, 0x727917D9, 0x3261AE53, 0x0BA4ACEA, 0xEEA6C2EB, 0x7E96BF14, 0x305B63BE, 0x16495AF9,
+0x0D7C8F4A, 0xD185DEE3, 0x46DD1729, 0xAC28A01F, 0x0A7821F3, 0xC906AEF1, 0xC9793AA4, 0xE831A948,
+0xD9C9C925, 0x1717DCB7, 0x62C9C674, 0xA80979AA, 0xE6AC7F25, 0x76E69679, 0x3C66FB70, 0xC8A3774C,
+0x40466544, 0xC9752EA4, 0x45C57C05, 0x0FC5426C, 0x1992A34F, 0xDF0BD03E, 0x1FC6D715, 0x0F4F07EA,
+0x47E884B0, 0x1E893318, 0xBA282DB8, 0xAD6BB431, 0x24E5A72F, 0x379120CC, 0x4A1DD1A2, 0x67EC7C02,
+0x2B20359B, 0x084E13D5, 0x1168C4B8, 0x049B43C3, 0xA94E64C1, 0x2C8C2916, 0x5C21A39D, 0x2A154DD7,
+0xFBBE34DC, 0x567E1767, 0xED2EB711, 0x4C8222E1, 0x24CE1639, 0x2069A466, 0x24E94AE2, 0xA2DD21B5,
+0x2B9074B3, 0x533823D5, 0xFCE6D3E5, 0x1CDF1D1A, 0x8F2CE560, 0x97A18EDF, 0x7C45C5BA, 0x6D0453E6,
+0xAA72352B, 0x7AFEAF2F, 0x843D3FD8, 0xBA266437, 0xF7A59755, 0x67281E84, 0xC7CA22E9, 0x706DBA8B,
+0xE95C7513, 0x57BB99D9, 0xE66AAAA5, 0x709CC011, 0x6CF6B70A, 0xC045BA5C, 0xE461272B, 0xD620A1FB,
+0x86BF7B7E, 0xC3AE7AF2, 0x7A9DDFCD, 0x0C403610, 0x4FDDF225, 0xC552EE71, 0xF31011A2, 0x12E78796,
+0x90929C7A, 0x9D04F189, 0x7AA26019, 0x5C242471, 0x8E3B0619, 0x131CBDDB, 0xD1A0C42F, 0x6D6A32B0,
+0xC982090F, 0x317104F6, 0x21B87821, 0x2E3BE64D, 0x2CCBE517, 0x08B06D8E, 0xA6B33E37, 0x8C3A1AD3,
+0x696F6A2C, 0xC3B89FA9, 0xC7D0453C, 0x2DD36638, 0xBDF5E933, 0x67BFC3CC, 0x1E3BDD75, 0x4B2C9233,
+0xE391965F, 0xA74E54CC, 0x94324C9F, 0xDE56205F, 0xDF631A73, 0x82712EB3, 0xF57CD6BA, 0x9B7FDB97,
+0x19F8282A, 0x89ED78FE, 0xF76330A3, 0xBFA22535, 0xABB9D8FE, 0xC1BCCB90, 0x1A9DFC1C, 0x49EE2A4B,
+0xD0C740C3, 0xEDCA6BAA, 0x8C850E96, 0x9D14269F, 0xDA0FFD64, 0x26FB34CF, 0xDE024897, 0xAF7F20F3,
+0xEC9EC13A, 0x27322961, 0x1AB1E5AF, 0xAEB68928, 0x39F4817A, 0x8EB28DF2, 0xF91556CF, 0xD8368F5B,
+0x127262F9, 0x73384242, 0x640065DA, 0x46ECF68D, 0xBBC0123E, 0xFD82280B, 0x0DBA8C3D, 0x3F9185CB,
+0xA3EB7D96, 0x4B87B953, 0xC11348D2, 0xF2FF54EF, 0xC71D5A83, 0xC22658DA, 0xFB432CA0, 0x5EA81BFD,
+0x7534CB71, 0x433E4A3F, 0x76C69344, 0xCBD62DB1, 0x95B2B7D0, 0xF52DA1FC, 0xCD0312C8, 0x2BC4C75D,
+0xBB119A7F, 0x8C314DA9, 0xFC59FB82, 0x20D7E11C, 0xB8C7FDE9, 0xAD4E7B87, 0x4EBF702F, 0x6070C3BC,
+0xB53D73E8, 0xF395190A, 0xAD6A7A45, 0x45EC30D1, 0x31C45895, 0xF6C4D31B, 0x4F5D6E64, 0x37128EFE,
+0x2F05B34A, 0x1667E0C9, 0xE6D022EA, 0xDAB972CB, 0x56BC00A8, 0xF7F8B2B5, 0x5EA5EE25, 0x8B8E32AB,
+0xCF765C2E, 0xF1839B54, 0x958461A2, 0x613D4C53, 0x9FBB49EB, 0x0F999076, 0x1E9FBDC4, 0xA650DB17,
+0xD95FF3E9, 0xFF73628E, 0x7901DEF6, 0x743B79E1, 0x3C1A451D, 0x6DE7B555, 0xB7BF0A62, 0x26097FFA,
+0x7D06DF9E, 0xD5C00983, 0xEAAF4BBE, 0xC358F85F, 0xCF7C1986, 0x1A70E33C, 0x31462F85, 0xF4B327BE,
+0xA0FE3BE9, 0xB46E46B8, 0xA5A12562, 0x6C383DA8, 0x4C7526B5, 0x9B1EC82B, 0xBAF0EBEB, 0x637FD747,
+0xD7AA18D1, 0xD063B0EB, 0x0FB31A1A, 0x4B84300D, 0x72EDCE2C, 0xDA95DE43, 0xD10E35E0, 0x74208CE9,
+0x94987D4B, 0x727F4202, 0xEBB3E331, 0xB4FCCF5D, 0x23B506F9, 0x76C91860, 0x2126B259, 0x448D69EB,
+0x7E15B225, 0x211671ED, 0x644C182D, 0x1BDD8E94, 0x61869DE6, 0x44D84A28, 0x768AAC2D, 0x87B15935,
+0x3B18FA77, 0x5D29B92B, 0x4259BE4E, 0x4FC51F56, 0xA279D0C2, 0x82B91061, 0x33477304, 0x17D6DC1B,
+0x821F7533, 0x052F863B, 0xF5AB9597, 0xD7CC4D90, 0xB9AC2DED, 0x4E86BDB5, 0x29F4C960, 0x0E251554,
+0x594A6FD8, 0xB45EF25D, 0xC8076AC7, 0xABD4881E, 0x1208448C, 0x3654BEA6, 0xCADFE822, 0xC3592E95,
+0x8CC9D956, 0xF13CFD6D, 0xA24DF1A6, 0xE7026046, 0xE68E2781, 0xE78D1AEF, 0x45B92784, 0x41B407D2,
+0x17AD3C95, 0x7A6457B8, 0xAEF16C10, 0xC0C834F2, 0xAA486FF2, 0x72A33D0F, 0xED734574, 0x113F0D96,
+0xB24BA392, 0x1D352B6C, 0x1E68CE83, 0xF9A219EE, 0x5C16CF26, 0xB1653592, 0xB612A615, 0xB74ABA4C,
+0xECA04A52, 0x63F9FC3A, 0x2C4187C5, 0xDAF69D5F, 0xFBD43FD2, 0x48B0CF9F, 0x4990B1F2, 0x4521FA85,
+0xB52C6E16, 0xE7596445, 0x24D91C7D, 0x4F8E0C76, 0x3C9E1AF1, 0xA578E554, 0x4820A09C, 0x9CA8F89E,
+0x2E2047AD, 0xA6614F5E, 0xFD5DB530, 0xA8B82478, 0xD9515A06, 0xC72BEB1A, 0x2BF87F6E, 0xBDE3708A,
+0x1B998871, 0xED834083, 0x577A3ACA, 0xAF4A28F7, 0x75E49568, 0xFD15A11D, 0xA89636EE, 0x5948EFE9,
+0x78E7661A, 0xE0FAB2A1, 0x8B16E84F, 0x27B9D842, 0x72BA8995, 0xED45C31C, 0xB1925131, 0x7611A14B,
+0xCA47A7F2, 0xB994E8DF, 0x8516264F, 0x05E17765, 0x99BD5B4D, 0x2047FF0E, 0x57590C08, 0x7256FC83,
+0xD0281685, 0x4627E8C0, 0xC4E8D748, 0x314E4A1C, 0x61F92E3B, 0x9CB58D47, 0xB9D83F8B, 0x4545EFCA,
+0xE2AB8F1F, 0x9C4B58AC, 0x0AC14094, 0x5DB61D11, 0x00BAE796, 0x2B913386, 0x19D9FBE1, 0x090DB602,
+0x5CDD0FFC, 0xF49A7634, 0x983580A4, 0x31F3C5B3, 0xA3B01502, 0xDBA57CE6, 0x6E3AACE0, 0xF7C0E24B,
+0xF673BC59, 0x0BA5A2F2, 0x1CC62964, 0x83CC33EE, 0xA1733EA6, 0x08EF8B2E, 0x0261DF0D, 0xE0D840DF,
+0x0D367458, 0xE99EA7EC, 0x2635F727, 0x566EFB7B, 0x99F8764B, 0xC2AB44E5, 0x4023A3FC, 0x8EF44648,
+0x618CDF81, 0x8BF901C5, 0xB9C7E513, 0x2C31C254, 0xCF3A3993, 0x504E5751, 0x0C3E6B49, 0x6A44C9ED,
+0xD173B209, 0xD32D5DA0, 0x7874AF7C, 0xE79B8E96, 0x40594FFA, 0x2B5C3685, 0x052093A5, 0x301083C7,
+0x57F45B9D, 0x3F5718C0, 0xE90B7114, 0xAC019105, 0xA892CBD4, 0x6675FFA0, 0x45DF6BAD, 0x01A97D18,
+0x0262D1FC, 0x7CA8B825, 0xF43EA1BF, 0xA0025865, 0xD91EBE4D, 0x0ACCA51F, 0xA56C6C47, 0x09CCBA11,
+0x73FD115B, 0x5F645B1E, 0xE4889FC4, 0x153891B2, 0xB924DF79, 0x0C31C686, 0x88D725AF, 0x25B8107B,
+0xD7E919BE, 0xA5A010E9, 0x6AD2B147, 0xB64ECE98, 0x8D67A67F, 0xDF9DEF70, 0x91081236, 0x375892AB,
+0xB1CD64CE, 0xC45AF036, 0x8F79C5DC, 0x0FA21525, 0x6516090A, 0x9D92D300, 0x63EE6D9D, 0xDECB3D6B,
+0xC8BF5DEB, 0x6026314E, 0x5FB1B658, 0x933726D7, 0x80792C4E, 0xBAFBA820, 0x10550519, 0x3B207267,
+0xA4978F5A, 0xC850DE56, 0x3674300E, 0xB0AD6EF1, 0x8B343AED, 0xB393BEE8, 0xF77913D6, 0x0708C363,
+0x450442E5, 0x6EFF26E4, 0x751F2270, 0x910F216A, 0x17FA197D, 0xC9BD308B, 0xB0FD0DE3, 0x4147FC93,
+0xAC447C81, 0x38DDD14B, 0x72E5E71F, 0xFC932F79, 0x1DAAAB19, 0x7874E738, 0xB86D263B, 0xAFB8A7B7,
+0xAB3B9B5A, 0xBAF75E32, 0x228A92FB, 0x37522A0D, 0xA74EB93B, 0x5B478776, 0x86D612FF, 0xA19AEE41,
+0x2FA9F3C1, 0x607822CB, 0x35C6AAD5, 0x07EE7326, 0x3DCB0DCE, 0x4528A01C, 0xF4848080, 0xD4D20CDE,
+0xEBB535E5, 0x61DD2A56, 0xD8AA4C32, 0xFEFA3404, 0x99FC6C82, 0xCB16EFAD, 0x58FB6A93, 0xA3FE7E43,
+0x420B70B4, 0xEAE354F0, 0x5F898F52, 0xC6CAC35C, 0x9344D341, 0x4A8AB6B0, 0x3D05440A, 0x1C8188B4,
+0x806165B9, 0x830B21C5, 0x51CD245F, 0x72CC9494, 0x2368F864, 0xDC10CEF1, 0x52FD5B19, 0xC666D9E9,
+0xFE221D1D, 0x9B1AF36C, 0x927B180C, 0xD82B3E62, 0x65F4358E, 0x0AF473D3, 0xBB2D39BA, 0x362A3FBE,
+0x44CC83FA, 0x49E62EEF, 0xC3675065, 0x11BCD356, 0xC3463EAF, 0x3198B5A2, 0x747F2661, 0x83CBF2CB,
+0x7097A867, 0x5D85E9C0, 0x227C7E98, 0x09833B0C, 0xDDA1A188, 0x69C3F1DA, 0x14E3F73A, 0x5E012D77,
+0x64ABC0BA, 0xA58B664D, 0x09DD4874, 0x635C5A25, 0x99E97CE9, 0x3A83F90E, 0x47FB5F1F, 0x9A606FA0,
+0x936E38D2, 0xC8C093CC, 0x7C44B512, 0xC4C3C4CA, 0x7B71B601, 0xB514C790, 0xA8C5DA80, 0x18877483,
+0xB005D89D, 0x2B9F847D, 0x96167EDA, 0x72DB2C93, 0x7F9487FF, 0xDD368942, 0x82CFB6A9, 0xF28FBE89,
+0x4C987356, 0xDA31063B, 0x35A7D253, 0x36F90D16, 0x0FD2EB71, 0xC6EB60CF, 0x9FC8407C, 0x15951E54,
+0xD47CF912, 0x27CBC0AF, 0xB1AA2D4B, 0xC6597585, 0x39DB3E0E, 0x691EBE42, 0x766AEDBA, 0x080D44F9,
+0xCCC33EE2, 0x57981280, 0x737F7824, 0xD88EEACE, 0xC0387FFF, 0x90B0D322, 0x1FDC8DB6, 0x9261E66D,
+0x0989148A, 0xE58CC8B7, 0xEB33DCEC, 0x317F74CD, 0xEB797708, 0x111FFB7F, 0x485238A7, 0x3036F633,
+0x874593B1, 0x766292CE, 0x941BCB32, 0x35570830, 0x05F7B764, 0xA070E647, 0xDF712EA3, 0x6666509F,
+0x437B9331, 0x1DA14731, 0xAAFDD0AA, 0xC4138230, 0x8F012CE9, 0x0F962F06, 0x210C0F54, 0x7E7588EB,
+0x66ED6EB3, 0x257E738C, 0x91F695D6, 0xE5A8FDB6, 0x1447BEB3, 0xF0601C23, 0x8594F584, 0x753A7E70,
+0xD7824B51, 0x0B604F94, 0xEC2102EE, 0xDA090F1C, 0x51173307, 0x112ED951, 0x5BF10719, 0x959B2562,
+0x4D5F9EDD, 0x387D6E0D, 0x86725EF8, 0x2B3035E5, 0xDE0346C5, 0x8313C8D2, 0xF88A5FC0, 0xAA96911F,
+0x65B961E0, 0xB5B141B6, 0x1A7923D9, 0x073D560D, 0x28E029DF, 0x7C3739A4, 0xA86CA1BA, 0xF0624891,
+0x35B97405, 0xE9AE7CBA, 0x998B4B70, 0xFF930F47, 0xD8B46E9E, 0xBBBAEAAD, 0xC3568D03, 0x7523C6A7,
+0x4652574B, 0x9EB806CD, 0x6C392335, 0x9106D6C1, 0x28B44846, 0xD2C51D00, 0x40D874C1, 0x5B400D33,
+0x47EDFC19, 0x62AD2432, 0xBA0FBD94, 0x18F0A0D0, 0x5ACB402B, 0x05C27F98, 0xBEAC1452, 0x78AEDB3E,
+0x0DCD7A1D, 0x4CF0091C, 0x0DB748C1, 0x54EB09EC, 0x096AF5A9, 0x98AF5F37, 0x225D6EDB, 0x12CDD24B,
+0xB5BA1C9D, 0xD2083A7E, 0x6C74C038, 0x1E676194, 0x3EBB3EE1, 0xC71C957C, 0xED6FDD8E, 0x9C11524B,
+0x8A015DAA, 0x9F357EE1, 0x407095F2, 0x52C4216F, 0x7F735C36, 0xBD816CED, 0xFCB47039, 0x4448753F,
+0xFA99F867, 0x2FE2A7B8, 0x6F68F559, 0x12FF3C2C, 0x07CEE877, 0x29FC702E, 0x987BD10B, 0x4937A66A,
+0x87FAE5CA, 0xFFC5BB4F, 0xAE886374, 0xB6EC3E38, 0x103AB02C, 0x8BB293EF, 0xCEF076DF, 0xB7F28293,
+0x9BB55C08, 0x51680622, 0x60B54894, 0xA7CD2D8A, 0xBF10457C, 0x67542513, 0xB08CED7D, 0x723964E0,
+0x0323CBC3, 0xB22B11C2, 0x1FCF4675, 0xFAA4DE4B, 0x57BCB393, 0x356F8771, 0xED6AB676, 0xF2740E08,
+0x853CD356, 0x1E58A18F, 0x9982D209, 0xD86F398F, 0xB1487AC0, 0xF31A4D71, 0x56CCB6FE, 0x8F5D2A66,
+0x6A3E9047, 0x5FD2E964, 0xBDD9D56F, 0x502C95C5, 0x085F756B, 0xB94AA4AC, 0x7AD8EA87, 0x98BBC894,
+0x96774ADF, 0xEF7F90D2, 0xC018A1FE, 0xC10F0C7F, 0x7D665401, 0xA95014D0, 0x8CC84EE8, 0x2C44DDC6,
+0xE6392C76, 0xADAD5C4C, 0x25719996, 0xE3056258, 0x76DCCF7E, 0xD4A0E41F, 0x0C6749FC, 0xEA7E930A,
+0x8B4C2F8C, 0x5D4CF8E1, 0x764BBED0, 0x3E01AE3B, 0x41D8EDBB, 0x55FEDBB0, 0x97028E79, 0x7507D07F,
+0xF3CBFFAB, 0x74536F6D, 0x042072C1, 0x749BB156, 0xD71867D0, 0x9458A0BD, 0x978A81BD, 0x32CB4D7F,
+0x60FD2409, 0x0D7A26A4, 0x6DBB2232, 0xA4C5B937, 0xA158757C, 0x31D6BEBE, 0x30258A81, 0x33F78E10,
+0x41FDAF1A, 0x30C714FC, 0xF765A5B1, 0x290DA12D, 0xCE39CB4F, 0x7E9C0DEF, 0xBC54D54B, 0x61F084E8,
+0x03A27B13, 0xB6E474B7, 0xE0F3935A, 0x72105878, 0x79B8172A, 0xD4093DFE, 0xE23D65FE, 0x24A6DD2C,
+0x1E0FB04F, 0xC7DFE641, 0xCBECFFE2, 0x90B41C0C, 0xEAC847E2, 0x5410299C, 0xCEDEB0E3, 0xABB3E1A5,
+0xEEE150E3, 0x79AC1EC8, 0x14BA60EA, 0x6AE14CE1, 0xCB3A6968, 0xA69E7D7C, 0xFF99AB43, 0xE5962428,
+0xB4C4F2FD, 0x90D4F868, 0x19147B57, 0x202EF376, 0xCDE44A5E, 0x0284F9AC, 0xCF2F4147, 0x8ACCE692,
+0xE6025102, 0x4FDF6128, 0x5100C9D2, 0xF5223DAA, 0x82662E9A, 0xE85E825D, 0x0CEC1983, 0x3C6C3A14,
+0x525D79EA, 0xA7A6B995, 0x197AD578, 0x063F78F5, 0x40D0FC05, 0xF9462B79, 0x1336EA74, 0x0C110057,
+0x494454C6, 0xC2D8848C, 0x035D5E9A, 0x5EDEBFA0, 0x780C81E5, 0xA3109215, 0x50D2A7C9, 0x44384B4A,
+0xE3DD1CCD, 0x6830711B, 0xE3F3B261, 0xAB1F4878, 0x68952D1F, 0xD243EAB1, 0x62D8C850, 0x8A584CD0,
+0x88C45162, 0x5A40DCCE, 0x39201652, 0x9F1F65A6, 0xA443C272, 0xE6927C39, 0xF2463CF7, 0xBD2F60A5,
+0x7F7E56EC, 0xBBA867B4, 0x274265A5, 0x4BFE68D6, 0x8C86AD9A, 0xFFD07465, 0xBBCD3235, 0x5ADF6F2D,
+0xDFE2759D, 0xE11CD4F3, 0xA4C0F76E, 0x0247BBF6, 0x93388C6C, 0xB717A417, 0x673859D9, 0xC66DFC56,
+0x54F8E50D, 0xB46BF98C, 0x3797074A, 0x160EB9D9, 0x70C9497D, 0xC9E43A27, 0x9A6C812C, 0x27C51065,
+0x47646CDF, 0x1D145805, 0x129355B5, 0x4E9E6058, 0x496FAC43, 0x2F010E01, 0xE272EA3E, 0x6AD69FE4,
+0x368A2035, 0x9597A845, 0x31EB1D18, 0x84D5B935, 0x267C2A79, 0xDDE3EC38, 0x4F97B70B, 0x9BF32D63,
+0xB9E1FB72, 0x513D572D, 0x7D71CF4A, 0xF082A6C4, 0x6D3B4D77, 0x28B3F7F6, 0x37A79E9A, 0xE260E20C,
+0xD2AA1DAF, 0x064DA7F5, 0x9C7499CA, 0x28DAB13C, 0x4371F9D3, 0x51161B65, 0xA6A75791, 0xB27B18CB,
+0xEAA6E34D, 0xB3C2FEA2, 0xAD70B7D7, 0xDFFB1A60, 0x7D068222, 0x466188C7, 0xA12350D7, 0x7B32FCDF,
+0xD283A8F1, 0xAD56875D, 0x43FE20EE, 0x489D5FE8, 0x78A5DAFD, 0x81DDA121, 0xBD8F4935, 0x16E4C181,
+0x3B4AC586, 0xF63F68B6, 0xC2296C84, 0xEC255FE7, 0xEFA111A6, 0xF9F538AA, 0x7F937411, 0x39E353D4,
+0x5A69C422, 0x03D0D45D, 0xEA8061BC, 0x9552614D, 0x49898D34, 0xE2DF9ABA, 0x15772C81, 0xCC613B64,
+0x7B3556A3, 0x61AEB9D6, 0xFCEB0EFA, 0xA4CF8F6F, 0x71B929A1, 0x81EA0CFA, 0x851A6EAC, 0xDBE6BF91,
+0x36B91A12, 0x41618552, 0x7D684540, 0x2A2FB362, 0xBFA8CF27, 0x52BE58F8, 0xADB3D817, 0x7277A6BC,
+0xED6D6AA7, 0x086B725C, 0x5B0F0404, 0x9B4F1003, 0x659A2066, 0x8C4B4863, 0xDA55B8F0, 0x523EA03D,
+0x78955954, 0xEABC1732, 0x1506C66F, 0x9BF9ED0A, 0x0C147397, 0xF659AA14, 0x432ABD1D, 0xFCAA0BC9,
+0xA38A235E, 0x31FB96CF, 0xD26F221A, 0x0E71F97D, 0x86642AD2, 0x52071652, 0xCE75DE04, 0x7FABCCC4,
+0x541566E2, 0x2E601C85, 0x4348B434, 0xE5827576, 0x0705D291, 0x681B5794, 0x4B81DE3B, 0x96F5EAB4,
+0x863CD49B, 0x30AFB331, 0xEDCD6E16, 0x6129E3A8, 0xF38EB51E, 0xE13F3826, 0x1081753F, 0xF2C03AA5,
+0x462DC4EF, 0xB2E1D24D, 0xE88170A3, 0x465D6D4A, 0xEB94CD09, 0xE7CBC0CD, 0x0EAA930F, 0x958AB368,
+0xB25C6F22, 0x2045307E, 0x5D6A8601, 0x091DF2FD, 0x8AC31752, 0x80AA58BC, 0x15913B7B, 0x294FD703,
+0xCAA32BEA, 0x0DAA7EEE, 0xECDD11D3, 0x79FB2995, 0x322CE7B3, 0x6399DEA7, 0x30FA5B95, 0x137FEB9A,
+0xC1FF9C26, 0x11AD4EE1, 0x94343CEC, 0x8B53502E, 0x5CED371D, 0x71E77511, 0x023F37DF, 0x1D9E027D,
+0x1321AF28, 0x9F23B423, 0x66644058, 0x1F32AA7C, 0x425AA462, 0xD148FD20, 0x56E090F8, 0x446DE745,
+0xF9CA25D5, 0xAEDAAB58, 0x61B1E017, 0xE3797555, 0x5B29DD2A, 0x85BE1E21, 0xB44C2250, 0xEE4E3AD8,
+0x6CB36616, 0xA9949170, 0x4FD493D6, 0xFB94E3DD, 0xF19BA95B, 0x4F36D202, 0xA75C4D4F, 0xD629275D,
+0x3A895A28, 0x22163F59, 0x0A32490C, 0xB437CB03, 0x17648588, 0x7A94055D, 0x7B9E5904, 0x7F044510,
+0x2DC1BA37, 0xF4A3EBBA, 0x04EEE261, 0x0FBD3432, 0xC6FF74EE, 0xA5B59C6D, 0xA27FBE4B, 0xEFB62C47,
+0xE6579E67, 0x011EF7E7, 0x1BA2A0C8, 0x8B3CFF54, 0x5C3A3956, 0xEC79FFE2, 0x29B1E564, 0x9E4190FF,
+0x21B23847, 0x8EF46880, 0xF7CFB17A, 0xCD4620C1, 0x5A0C11B7, 0x103AE4F4, 0x1B9DD87F, 0x5623F5E6,
+0xCA34AC2D, 0x831E5AA1, 0xF1F4B239, 0xA6DEEB5E, 0x9AD8D392, 0xA8B16123, 0x09F377FD, 0x3EBE1D9E,
+0x09BD0285, 0x3F5F337E, 0x227AF0B6, 0x32E22DB7, 0xA28F572C, 0xEF14CE27, 0x9254A849, 0x0F250D64,
+0x677B1282, 0x913E04B7, 0x4D3F41B0, 0x6EE65094, 0x95891DF2, 0x89518988, 0x61B31DFF, 0x3D5BA5AE,
+0x98929359, 0xF7A8912E, 0xC04C4F2C, 0x4FAC70EF, 0x52E14421, 0xBFDCBEB4, 0x4F6558E0, 0x5E83CBED,
+0x375CF9E6, 0x22AE824B, 0x8BCE640C, 0x8D43D547, 0x48D0CBA2, 0xED0E9010, 0xB8132930, 0x3701B552,
+0x634F0E1E, 0x1E48576A, 0xAEAC23C5, 0xF999D695, 0x5BA33BD8, 0xF7D56351, 0xDD538C90, 0xDD9EEF21,
+0x91EADC87, 0xBAFE9D91, 0x549B0C9B, 0x2A38EF21, 0x6DF170F8, 0xF32C92AE, 0x9400E5ED, 0x26A02BDB,
+0xFA312656, 0x0CB187A2, 0xFA898893, 0x5382E5FC, 0x5B15AD0F, 0xC28321E3, 0x64B5351B, 0xC7F0ABDB,
+0xA00E8710, 0x6721CBBE, 0xA1E15EFD, 0x05599A79, 0x3DAEEB31, 0x306BF8AB, 0xD057B007, 0xBAE51A8D,
+0x897BFAA7, 0xCDDD2D92, 0x0E81896D, 0x61D17899, 0x0ED5FD72, 0x0D6A06C8, 0x7DCD1B15, 0xEE72CAC1,
+0x44E8FB6E, 0xD750E2F7, 0x14C5D89E, 0x2ACBA8CD, 0x77BA933E, 0xC50C06E4, 0xCEFC8614, 0x50C0B64E,
+0xA12EC6AB, 0x62C8F30B, 0xAEDB3E76, 0xB7AA5547, 0xBD1FFBAF, 0x7B2FDEF0, 0x23F5024A, 0xE7FE1CA1,
+0x5988DC9A, 0xAD5FFF82, 0xC5788E7C, 0xD50C9682, 0x239ABC9C, 0x82464DD9, 0xD3B06E7C, 0xA62CF766,
+0xEB7E5CFD, 0x4A08A417, 0xAD0562D6, 0x8AB1BD71, 0x0BB57ED7, 0x455A67C8, 0x2C7DA283, 0x814FB4A4,
+0xEC00D8DA, 0x86D8794A, 0xC6B70277, 0x29FA1CBB, 0x9C8FEFD1, 0xF7EB9A48, 0xEA97ED18, 0xE59D4B05,
+0x9DA9E41D, 0xF3DEDDA1, 0x08B9CB50, 0x79E6ABA8, 0x1642EDF8, 0x63EF8C4B, 0x622B74D9, 0x7C2F9255,
+0x0A23F739, 0x95C6DAA9, 0x906EDB62, 0x3D6C6A49, 0xBF6239A9, 0x0B0092DE, 0xBCB29B0E, 0xE2E77868,
+0xE324A742, 0x0D998BA0, 0xC8BACDFD, 0xB9FDCCC7, 0x9AAA2579, 0xC981BE1C, 0xEE51D5B4, 0x05D76A5F,
+0xF4564BD5, 0x113B4933, 0x60AA3A7B, 0x1E1D2F8D, 0xBA3B334C, 0x6BEA7221, 0xFAA0DD85, 0x945F10C4,
+0xA0239B41, 0x264A2E5E, 0x2CAA755B, 0x82ABD1FB, 0x9B0BB668, 0x0CD8A0C9, 0xD6B40C1D, 0x5EC0CF9E,
+0x668CFBBD, 0xD7CF80C6, 0xF54134E3, 0x84C078EE, 0x8FBFF663, 0x07DE8E9D, 0xBDD6D972, 0x46E414D7,
+0xFE24309C, 0x2EBBAF06, 0x69C28595, 0x1C35A643, 0xE677A7E0, 0x9F4C6877, 0x78339799, 0xA4AD07C5,
+0x82157E63, 0x7AA25C1C, 0x1E016BE6, 0x160B9A8A, 0x3143891B, 0x3DB41AF1, 0xC3A82217, 0x2B2CEA6A,
+0x98F9111A, 0x22B1A66D, 0x9E601F62, 0xEE8BE489, 0xDBABAA4C, 0x4183CD0D, 0x8CA4D0B9, 0x75ECE727,
+0x3DFC0E29, 0xDD7BACEB, 0x1E56C6A0, 0x1E9A1983, 0x58FDA38F, 0x37163F09, 0x3CD5EBAA, 0x092F88C6,
+0x82D41E82, 0x5A97E6F1, 0xB554EFFA, 0x1AC740D1, 0x7315C92D, 0x921105F4, 0x33797504, 0xD04491CD,
+0xE96B1FFE, 0x98FEC58C, 0xB3C2AF07, 0x08BFF5CA, 0x89186834, 0xB8E6FEAB, 0x169CA1F0, 0x286DD576,
+0x43096824, 0x34625CB1, 0xCD891D3E, 0x8475E3F5, 0x3A232C63, 0x2B342F27, 0x2721FEEC, 0xE34ACD42,
+0xC9DE786B, 0x481C13BB, 0x659A21D1, 0x5D991E8F, 0x1E5E9993, 0xF7DFCBD8, 0x9748DB93, 0x658A71B6,
+0xFD1AC2A9, 0x85F3F240, 0xF3527474, 0x96126C7D, 0x4CE45963, 0x3A22377B, 0xDC909604, 0x6FD21F0D,
+0x0109263C, 0x9EF4ACAB, 0xE682A0A6, 0x2B50285D, 0xB9DD9A56, 0xD27E6613, 0xFFAB5B04, 0x8F46D245,
+0xC5B7B3F7, 0xFB9E0540, 0x1B7546EC, 0x4DF5948E, 0x9DE0FC99, 0xC0F62516, 0x295AF1E0, 0xDA7E65B0,
+0x571E7285, 0xF8A61FD2, 0x47A0CB2B, 0x139C60ED, 0xCB4C05D2, 0xD46ED015, 0x8D923755, 0xC50A7F65,
+0xDE91D794, 0x2012FE6C, 0x45C447C0, 0x22818F44, 0x8D2E01FA, 0x1464939C, 0xEC3F7FC2, 0xFCAA1EBC,
+0x7B846CB2, 0x0746CE31, 0x28AC7196, 0xE2D70692, 0x4E2FFA27, 0xB8B072E1, 0x09D781EE, 0x12DE1B58,
+0xBF173DCB, 0xD5A58A41, 0xBADDED39, 0xB3BCF74E, 0x8016AC4E, 0x8548D7D3, 0xD9A2DDF1, 0xD942CFD6,
+0xBDE8635C, 0x78C4A6D8, 0x90A0C3E4, 0x66A9441C, 0x319EB5C5, 0x92E41239, 0x25F7FAE6, 0x3D2A21EA,
+0x9C097830, 0x3347DCF1, 0xDFF96800, 0x388B672A, 0x2DE5DA0A, 0x1CDC5A07, 0x16985AB2, 0xB0A259FC,
+0x82037EB5, 0xF2E5E90E, 0xA1D5BE78, 0x62F6E68C, 0xB6F1AB0E, 0xBA707FE8, 0x4D49D24D, 0x96840C2A,
+0x82D8620A, 0xB6425B7F, 0x78733B26, 0xEC782193, 0x94F500CA, 0xC675C53F, 0x6E60CDA3, 0x3E0F1175,
+0x86280B0D, 0x94A8B2C2, 0xD3953897, 0xFB377B2C, 0xF562C71D, 0x5179C4BE, 0xF4B621BE, 0x5ABB145C,
+0x4BA73320, 0xFF7577C7, 0xD87CFF31, 0x6203CEEC, 0xE53722BC, 0xD639A5F5, 0x6A089B47, 0xD2DD3438,
+0x48A2E3FF, 0xA8E11C98, 0x4FEB0C8F, 0x0F8BE561, 0xEEA68C33, 0x76FFF875, 0x4235A8E3, 0x25FF3C94,
+0x01CFE832, 0x0D464D93, 0x2B76DB46, 0x8FAA9ED9, 0xA3EA749F, 0xD7AEC0FF, 0x29BAE5AD, 0x23642330,
+0x3E1AFA83, 0xC0B7AC1F, 0x4EA1EFC1, 0x8BB5404F, 0x5DB720A8, 0xDD419944, 0xEB663BC9, 0x9CAF265B,
+0x97FC6536, 0xC518B17B, 0x3BB5635E, 0x8D3629AE, 0x5B328308, 0x72E48D34, 0x6BBB8DC2, 0x1F96C1D1,
+0xC3FB633A, 0x5127AD61, 0x2D6C09AB, 0x7F176551, 0x279EE7EB, 0x038A65F9, 0xFED247F3, 0x5CE333DF,
+0x89B0CE1E, 0x42BA2023, 0x2387BA6F, 0xF32B32FF, 0x251ADC4B, 0x1427D19F, 0x565EE32D, 0xCF3EB879,
+0x922468B4, 0x1E40514B, 0xCC36A9C1, 0x02960AE9, 0x0D6C386F, 0x25A058A2, 0x680680EC, 0xA80EAD6F,
+0xE58047C8, 0xBA7DA595, 0xAF613EEE, 0x32958DD5, 0x8E0C97FE, 0x17AABEF2, 0x9DA2C70B, 0x4322E81B,
+0xE1D04169, 0x68A325E6, 0x3303DD05, 0x65698F56, 0xBE96836D, 0x46ED42CA, 0xC800DF7A, 0x6F44E212,
+0x0A665479, 0xF962261B, 0xD7AC3A84, 0x7FC1A0E8, 0xD938384E, 0x1271B56F, 0xD58DEA15, 0xAC2FEECF,
+0x63330955, 0xB11BE0C9, 0xAF98A175, 0xA438CC87, 0x4F402564, 0xE68F1A1F, 0x0D9E974D, 0x32DE3E22,
+0xE934CCF0, 0x09227CAB, 0x8B38BE92, 0xBB247AC7, 0x49495D6C, 0xB2D45139, 0x8942F978, 0x53044CA2,
+0xD5A76337, 0x70EA12C3, 0xB576179B, 0x4D1BE8BB, 0x2837ACDF, 0xBDC7CD08, 0xB6DFBDAD, 0x430FF667,
+0x87BBDA48, 0x7175480B, 0xF58816BE, 0xE42D751D, 0xD864D0A4, 0x8CFD3041, 0x13C59E4E, 0x7A9A121E,
+0xB39A92C6, 0xE8D8EF8E, 0x9300D855, 0xB98DFF83, 0x1A59C41B, 0x7FFF8906, 0x044B1532, 0x0E956D2D,
+0x5CC65DEC, 0x98AAE220, 0x1D64569B, 0x95172397, 0xB5BD8290, 0x06DB4309, 0x3F28C49A, 0xDEE0DE2B,
+0xDB0EB677, 0x0BA2A0D5, 0xD8A0E0F5, 0xD38E8882, 0x14891068, 0x021E9667, 0x54F29D17, 0x2E5848BB,
+0x1D4DB6BC, 0xF8FD1B92, 0x55F898F6, 0xDDA50A22, 0x7BD5519C, 0xD70FDCA3, 0x34868E4A, 0xDFFCE14F,
+0xDE12856A, 0x9DEDDE65, 0x379FE16F, 0x64FDAC5C, 0xAD60F49D, 0x2FE75F27, 0x9FAFB374, 0x96C6037A,
+0xEC5D98AE, 0xA9567614, 0x3AD21E81, 0xA6827B6F, 0x9D4835B1, 0xEE28E803, 0x4D8DC897, 0x63692653,
+0xD3CA885C, 0xBDC2F644, 0xE1B06094, 0x8C97E92C, 0x40524384, 0xC6C0691B, 0xAB35094F, 0x3C2512BA,
+0x0BD8CA99, 0x3742FE88, 0xFED7D969, 0x0DDB6F3C, 0xE4971C10, 0xC5917CBC, 0xBB178D48, 0x28192F28,
+0xBB655F3D, 0xD12D0322, 0x85BD5D5F, 0x06E92F4F, 0xB937704B, 0xA03C2201, 0xCED0FD68, 0x5E299677,
+0xCE4A1550, 0x1FB313FF, 0x14315AC9, 0x764D9ABF, 0xA6FAC7E4, 0xCB8C0110, 0xB2776179, 0x2D60F3CE,
+0x098E8DE2, 0x7E5B38B1, 0x69CA5CE9, 0xA54CC6ED, 0x0A70D379, 0x9EE00F1D, 0xE5EFF95B, 0x00687B73,
+0x94006524, 0xCDF3729F, 0xCCE17354, 0x4FE9845B, 0x3BA86520, 0xD4CD8E72, 0x15DC4100, 0x4559094D,
+0xD7598B9C, 0x1E5A1DCB, 0xE25EA299, 0x3BDE63B1, 0x77BC1F2B, 0xFB30EA6F, 0xABE78606, 0x2F798C3B,
+0x90842BAD, 0x8C2E7592, 0x13F11A73, 0xA3B1A6D7, 0x8CC16561, 0x6F236FFF, 0x8E74AA61, 0x321B94D9,
+0x6B1540F5, 0x3F25E6FB, 0xF1B75A2A, 0xAE87DCA3, 0x600869FC, 0x6CAA885D, 0x39171B42, 0xF80CA1F5,
+0xFD432DF1, 0xC8F5AE2F, 0xD16CD2DE, 0x5417DF19, 0x45AECD8C, 0x0F64DFD2, 0xABB74F56, 0xD630E330,
+0xB6C44F10, 0x99C97D5B, 0xEA8D597C, 0xFAF680A4, 0x1243E2F0, 0x231CA4A4, 0x783F0F85, 0x51F47614,
+0x5DEAB2E1, 0xE33B213C, 0xB2D1780D, 0xEC4001FE, 0x89E2B6CD, 0x21C14239, 0x716C2A54, 0x1F3BB09A,
+0xEA37EDC0, 0xFFF79D24, 0xEBDF214B, 0xCB248539, 0x9EC47A71, 0x991DEFBB, 0xCD71C6A7, 0xA3CE1A43,
+0x37BE5A06, 0x54C93BA0, 0x53522571, 0xB9931225, 0x27AE802A, 0xBCD3024F, 0xCE6188DB, 0x52D6197D,
+0x9211E80E, 0x9FCEF1F2, 0x09CDF5E5, 0x8CEE1108, 0x47D82867, 0xD4D4B5BA, 0xA447D614, 0xB81A2B2D,
+0xAC61694B, 0xE721DAFB, 0x5659011B, 0x578F5524, 0x0C4A59C5, 0x760DD4B6, 0x21AE47F4, 0xA090144F,
+0x8720024E, 0x1257EDA6, 0x4B0773B4, 0x3F413BD7, 0x9BF705CB, 0x6C77FD3D, 0x7473159C, 0x66D0E4BA,
+0x37B0AEB6, 0x94E74861, 0xE65FF73A, 0x5E87541E, 0x250932DB, 0x72EE2AE8, 0x4761C377, 0x5D6A7706,
+0xBC399C51, 0x293447BD, 0x2B7C053D, 0x41E03A7C, 0x876F16C9, 0x2034B677, 0xC8F0D3E3, 0x9DC5D3DE,
+0x07AD224A, 0x41D05F19, 0x07F2BCA6, 0xD87C49CF, 0x3A66AF66, 0xFA8EF828, 0x6D8DEFFA, 0xC6531E73,
+0xFA83345A, 0x42F89CD7, 0x71FB2AB7, 0x73C911F5, 0xA114F046, 0x2D113941, 0x5540B734, 0x6A0A3596,
+0x394C977D, 0x40076456, 0xD3837F00, 0x389A5136, 0x1D60E1E6, 0xCAE72955, 0xE4A2DB02, 0xB13931A1,
+0x905BF013, 0xB4EE14E6, 0x59F09BC7, 0x5492DC61, 0xD6C2C6FF, 0x6DA28D56, 0x17BFEDB7, 0x0B209519,
+0x3A4BF72D, 0xCB6FECFA, 0x2631423A, 0xBA699B92, 0x7D68DD28, 0x911534EA, 0xAA952FA4, 0x78EC698A,
+0x9125706F, 0x169F61E3, 0xB72596AE, 0xB4CFD16F, 0x92F9243B, 0x01CC9ABC, 0x88E478DE, 0xF1678D79,
+0xE931EBA5, 0xBC21B0B1, 0x485AAB36, 0x8DAAE3F5, 0x7203439B, 0x2C6538D7, 0x59906D7D, 0x37AE92B7,
+0x3C8789FF, 0x1F398DE5, 0x6A3FE834, 0x48E2BC9D, 0xD7FAF99E, 0x65F862A6, 0xF1580B61, 0x0C28DA1B,
+0x3FA6FD94, 0x6377F7D3, 0x253B74E4, 0x2220F36F, 0x8E31FE5E, 0xF1832793, 0xFBB3A582, 0x80878CA5,
+0x06D62764, 0x74D4E912, 0x1B6A310C, 0x2FDDC59B, 0xF3FC052C, 0x28CB4E50, 0xEA44243E, 0xD5062421,
+0x3B2E2451, 0xD95157F0, 0xF251A27C, 0xB9BB612D, 0x5611DD27, 0xB785440C, 0x874F0179, 0x7D7D6715,
+0xDCC83160, 0x3E731CD0, 0x2F2CE80A, 0xA1A74938, 0xCBE2BC5C, 0xEB5AF40B, 0x657E4FDD, 0x2C8549CA,
+0xC87DC4E9, 0xC054EF96, 0x4281B11D, 0x2AE701B9, 0x0A5111D7, 0x11D84A98, 0x78DC59DA, 0xCEC60C84,
+0xCD840BDF, 0x95538392, 0xA34157D4, 0x2D1B64FC, 0xAEDD0308, 0x18BC20B4, 0x329D3A52, 0x1AAE49ED,
+0x9A200966, 0x9B7EBB99, 0xF1322781, 0xE2E8F249, 0xA1081034, 0xD5723D57, 0x4D350F93, 0x759A4AFF,
+0x177EB854, 0x4402E976, 0x528D239F, 0x759525DF, 0xD3AAA26F, 0x2F2068A0, 0xB6756198, 0x764D6B2B,
+0x1E3FD697, 0xD4B77C0F, 0x28C5EA32, 0x7EA1BD49, 0xE75618BB, 0x06F56F36, 0xEE29273C, 0x74DF4817,
+0xD72B4578, 0x72AB0A34, 0x81C16FA0, 0x88AF86AA, 0x5BE345E0, 0x92FC1852, 0x8FA6CCDC, 0x91BABE1E,
+0x36D9BB0B, 0x3AB548F3, 0x1529502C, 0xE2AA6D99, 0x3704DFBF, 0x81B7374E, 0x42D5D18D, 0xCA611E84,
+0xE20D1C57, 0xB7D075E8, 0xA3EAD7CC, 0x3644692D, 0x2215D9EC, 0xCFFA0A21, 0x16049D2F, 0x97D47000,
+0xF3D97A71, 0x5F8801A5, 0xCD58A4F4, 0x158A556D, 0x2C0F5E82, 0x136829E8, 0x11DCB9E0, 0x39CCA163,
+0xB7D2C450, 0x189914D7, 0x1D098912, 0xCC2CB445, 0x8F72231F, 0x998512EA, 0x00E7E936, 0x0F2A9833,
+0xB56B296A, 0x2C8F7768, 0xF2F7EE92, 0x29A69352, 0x92B129EF, 0x91217930, 0x820FCA82, 0xC357591D,
+0x37B6669B, 0x3AC0817E, 0x074008A3, 0x7DB32D9A, 0x42462F7F, 0x8752DAFB, 0xD2FD51CA, 0xB79B9726,
+0x68D3A85D, 0xF81C3DEA, 0x49CD8389, 0x76CD6B7D, 0x2BE63F21, 0xC52186C3, 0x9C799772, 0xDD4B4D94,
+0xFEF723A2, 0x66C222FD, 0x6CFB4D3B, 0x903B9816, 0x9003100C, 0x6689EF84, 0x065D93B0, 0x9A37E621,
+0xC85D5BBC, 0x92B002B6, 0x1395A722, 0xB749293A, 0x460A5390, 0x08908916, 0xF6FA5166, 0x0F320C4D,
+0xA91D8C13, 0xD87BDCDF, 0x04AAE762, 0x4397B825, 0xE6B009EC, 0x189880B8, 0x6F4FE4DB, 0x1226D381,
+0x087CBB93, 0xF2123496, 0x9F6514C3, 0x2A2A732A, 0x04D12B21, 0xA77BEC94, 0x3C72D9B3, 0xED925AE6,
+0x4BA17DAF, 0x684C5DE7, 0x08E9DAD4, 0x486D8971, 0x54F9BC75, 0x3F161389, 0xD82E3F96, 0x6D043C7D,
+0x42F09286, 0x05BBBFCF, 0xFBC723F1, 0x77FFBDE5, 0xB1E0BA58, 0xC0150675, 0xD537F2E0, 0x5F8D86F9,
+0xC0014D7A, 0x51C6CF01, 0x0F282256, 0xC430503D, 0x519FBD37, 0xDF724AC4, 0xF9BEBF25, 0xF903F9B0,
+0x50DCEA82, 0xA9AFCC4B, 0xD9B803E5, 0xEFEB8B03, 0x9CB74F5A, 0x0AF7E0FA, 0xB8D2A6F2, 0xDECC5B2C,
+0xBC215AFC, 0x39C6FD5B, 0xB98F5B9B, 0x3A874B2C, 0x9AB4667B, 0x4076CACB, 0x6B5A59CA, 0x4F4FB3A5,
+0xDBD8AC99, 0xD2FE2A6D, 0x9361CAC1, 0x8BBDBE97, 0xFA258A51, 0x60DA9B13, 0xDDB82ED3, 0xABCB7D5C,
+0xDFCC042A, 0x36C7D40E, 0x92736514, 0xCF76D269, 0x50138C62, 0x3A0CC959, 0x1BFE761B, 0x76802AA7,
+0x2F026550, 0x69FB4610, 0x63184D65, 0x5E33B750, 0x4B0B6AD6, 0x99368701, 0xF623B859, 0xD372FABF,
+0x3812253C, 0x1224587B, 0xACB65BF8, 0x3F754FAE, 0xB47849C8, 0x79B09962, 0xD456411C, 0x647CAC4E,
+0xA3B43C17, 0x86BEC15B, 0x4C93D421, 0x6648B91E, 0xF0962855, 0xF98C3076, 0x59F8364A, 0x1DE6F375,
+0x312C028A, 0x12BA5EC8, 0x1A1A73F3, 0xBD07AAA7, 0x8B7863D7, 0xE7ECE2AE, 0xC5E653B8, 0xAA4DA932,
+0x078DC729, 0xAA51FADF, 0x68E01FDD, 0xA75F2BF3, 0x85C5B164, 0x9519EE12, 0x659C8392, 0xB843CA14,
+0x3A828EB8, 0xF40E22CB, 0x13A16919, 0x1376989D, 0x75B51883, 0x0194A26A, 0x66B0A444, 0xB44E0FA8,
+0xA58A4016, 0x31038220, 0x232B2FA8, 0xA00502FA, 0xC86AC08B, 0x26D433F3, 0x5D4C2143, 0xA67161FE,
+0xC0952F9E, 0xB4D31F48, 0x57495CBA, 0x9EAF6720, 0x8B0C9DD4, 0xC1CC998E, 0xB21B3201, 0x3FAC0914,
+0x39B04E2E, 0xE36B8B59, 0xA92ED20B, 0x97C5CBF1, 0x75ED65E1, 0xCACE47D5, 0xA95F550E, 0x2CDDB48C,
+0x49C8ACBB, 0xAD0EE5E6, 0x908ED91F, 0xBA98A655, 0x49D32B96, 0x7AF36465, 0xB3A09407, 0x3715F4C4,
+0x226598B3, 0x495B2519, 0x0D176082, 0x40B5D5FD, 0xDF2E36ED, 0xF72CA8F9, 0xBB8EDEB8, 0xA24489D4,
+0x71D1441A, 0x41EEA26B, 0x8D2EF29A, 0x9662D9D0, 0x1D78D17C, 0xB57994E8, 0x4F3CFB07, 0xA5F9925E,
+0x8AB1F0D3, 0xAB8F25EC, 0x6155BEBC, 0xCA2EC32B, 0xB6B0F054, 0xEDE18C34, 0x2B4FAD1F, 0x032FF3CC,
+0x18311320, 0xDC05D2A9, 0xCF30382F, 0x41B1DC4B, 0x72FFFC57, 0x178FA1F8, 0xB2880E3D, 0xA8366C7D,
+0x1A4C5228, 0x6F24B888, 0xDEB6C899, 0xF339419C, 0x4823AE1E, 0x5B71C7F1, 0x72DFD257, 0x4E7FA9DA,
+0x7E63A37D, 0xC61EE5BE, 0x2B2EE7F7, 0x6AECFEB8, 0xD2A49445, 0x442245B0, 0x38F89A83, 0x42B923AE,
+0xA5FFDA12, 0xFEA8A632, 0x8958B70F, 0xD179EC46, 0xDD49EFF4, 0x76222FBE, 0x9CAB4A29, 0xBBC25732,
+0xC87D0F98, 0x417B799A, 0x681773F2, 0x394471B8, 0x7BA29A5D, 0x0B6F0B2F, 0x884B2CC8, 0xDBA6A124,
+0xD4D7D53B, 0x100DCA3F, 0xDB5B8D44, 0xC9C4975E, 0x2DDD9880, 0xDFCA2D72, 0x278D0B7A, 0x3B72C902,
+0xF8351BF5, 0x9BCEF0D3, 0x6484DE01, 0xFD2913B4, 0x0AE42F3A, 0x4DE80110, 0x62138729, 0xE83663B0,
+0xB3B5C492, 0x1C58D093, 0x69BB9028, 0x44655E26, 0xE2A6AE51, 0x7838C314, 0x34C7B2A3, 0xDA10A9D9,
+0x7B1FD2BF, 0x275F2588, 0x4E05CA1A, 0xC971F920, 0xAA04E88E, 0xD56701D3, 0xEFC24E99, 0x1698ADD1,
+0xBF215AD7, 0x68FE82C5, 0x799B3AE0, 0x2F1C9DD6, 0x394CC3FC, 0xF873C476, 0x87D972D4, 0x77A9B5A7,
+0x36D3B3A7, 0x69C5B04B, 0xB42156D4, 0x0628EC73, 0x9BFE3E10, 0xB5365719, 0xFDEDA2F4, 0x730ED8FF,
+0x1A68E6DD, 0x567E010E, 0x7F69D66B, 0xB9446F8F, 0xD2E7C295, 0xAC9F1373, 0x2A9D4BE9, 0x1CBAFF5B,
+0xB23E3C9F, 0xE520F972, 0xF4B2D740, 0x2756943D, 0x21F5F313, 0x740913BE, 0xA5170976, 0xC858B4F0,
+0x90A51B36, 0x182FA94A, 0xA71904B8, 0x1BCC47D6, 0x145A95EB, 0x3072FA4B, 0xEBFA087B, 0xE64CE5B1,
+0xAAB0D342, 0x6813C6A3, 0x60B09175, 0x5DA00775, 0xFBB2A0B1, 0xA27DC5C7, 0x19221AB7, 0xE44065E5,
+0xB1BA49CA, 0xDBF25219, 0x90A56951, 0xFA610231, 0x8D80CDB8, 0x2FBAB7F8, 0x55C4BF9D, 0xE65F97E3,
+0xDE8973A1, 0x50CD8D9C, 0xD77FBB4F, 0x314F0A60, 0x4634F51D, 0xE2A78D1F, 0x5A18A87F, 0xC6B9F9DE,
+0x733C65F8, 0x91E582A6, 0x4AF1713E, 0x08B8F86F, 0x23AD5CCE, 0xA079E4F5, 0x01BC0950, 0xBEF7AA06,
+0x07BE4DFF, 0x198BDB90, 0x5520D6C1, 0x31F0CF40, 0xD9A67616, 0x004C7679, 0xB1DCA811, 0x991CB570,
+0xCB5021AB, 0x99E34AE7, 0xDE897EF5, 0xC77B7DF9, 0xE8AA44DD, 0x33ECD437, 0x88020260, 0x51B12FE9,
+0x9F33BFC5, 0xDD222461, 0x58077CFE, 0x4ED8F606, 0x9ECFB4C4, 0x77C2EA7A, 0xC86EE11B, 0x4A9281F5,
+0x6655F139, 0x3548B811, 0x0D61761E, 0xCD608544, 0x244B8194, 0x5461E203, 0xD5AD7DF8, 0x5960D7F8,
+0x5A506B6A, 0xC6DB0EA7, 0x3FAFA57D, 0x97F6C5E6, 0x53FE9B58, 0x122C884A, 0xA8DC9AF9, 0x547B7D41,
+0x97C5CCB5, 0xE53C8FA8, 0xD2096662, 0x53C409EE, 0x9EAB21D6, 0xAA44354D, 0x68176D55, 0x8940D23E,
+0xAEF5A6E5, 0x54F9CDD3, 0xBDB3C6FE, 0xA2DCD2C5, 0x09E930F4, 0xCBB536F8, 0xFBA346FC, 0x66FC95F4,
+0xAA58974F, 0x9A8D1D12, 0x227D276C, 0xFE79E4A3, 0x9045E1C9, 0x11B6BCDF, 0x0283A553, 0x6FBD33DF,
+0xB054F9D9, 0x76FFB76C, 0x2ABEA70F, 0xF9913FA4, 0xD76BE912, 0x97B76067, 0x89288C3B, 0x9D098EA6,
+0x81E34200, 0x6AB87A0C, 0x43F1F55D, 0xCBF1434B, 0x935D3528, 0xBA54DF1E, 0xC743C7FF, 0x5A323A3A,
+0xBA96DB5B, 0xBFDC35B5, 0xD4B0863A, 0x6032F63F, 0xFE9685DB, 0x61286A3D, 0xDC97A7BF, 0x711890A1,
+0xA2AD349C, 0x0FD12FE3, 0xBC6F8683, 0xF81D5A1C, 0x126B0DAD, 0xC5562B2A, 0x1D6E4F54, 0x803624CC,
+0x06D49D9A, 0x477509C2, 0x564AF72F, 0xBDD164E9, 0x7EBAD41A, 0xC8912CE0, 0x8411FE2E, 0xD387F25A,
+0xBB57D720, 0x4F1BFD4B, 0x92DB5218, 0x56177113, 0xC63A24E3, 0x548E4434, 0x01DD2688, 0x94F03C11,
+0xBA0EBE83, 0x88EBE978, 0x7E826456, 0x1B3A0F36, 0x4C54E7F7, 0x1D2763E6, 0x5BA5CD4B, 0xFB942F78,
+0x86FFA522, 0xECE9B27D, 0x718FDE1A, 0x1B3D05F3, 0xF4FF17A4, 0xC11846A2, 0xDC50A04D, 0x23AFC130,
+0x9D0E46DD, 0xE614403E, 0x5E092260, 0xB8D4D872, 0x211F652F, 0x49AB04AB, 0x19AA1C83, 0xDBC38F04,
+0x87F85BB0, 0x6D182A30, 0xCBD4D962, 0xFAE138CC, 0x55DB685C, 0x6D73973B, 0xCC3E752A, 0x17294C65,
+0xA3266005, 0x1191A126, 0x32B6CEC2, 0x1C1CFD40, 0xEF05589E, 0x7B4F31F1, 0xD6700908, 0xDD2BB41B,
+0xBBCCC633, 0x2CE80886, 0x5DC98AAC, 0x1BD26C95, 0x2455040D, 0xB8303139, 0xE8670E87, 0x591688DB,
+0xDD0E7D79, 0x5496C0F2, 0xE7840640, 0x00F1B831, 0x5E9C215E, 0xA2F6FAF3, 0xCFB1B6A2, 0x893C6CB2,
+0x69F53734, 0xF1144C70, 0xD090F522, 0x7DB774C8, 0x95D1C82E, 0xCC953785, 0x3A1A9CFA, 0x764D8915,
+0x17020F0E, 0xFD384A7C, 0x6BF59E26, 0xF8623CDE, 0xF4DBFC89, 0x4D7AC535, 0xC09D671F, 0x788F89E8,
+0xD4737A38, 0x1CB1AECD, 0x99621BF7, 0x9D034435, 0x18DE20C7, 0x26506C46, 0xB444C631, 0xAE33DB83,
+0x9A4A8A2D, 0xADA64479, 0xD2A07C91, 0x5AE94342, 0x74CE59E4, 0x5EBE34C2, 0xC59B74B6, 0x13641B79,
+0xF3824758, 0x6327E01B, 0x735A1035, 0x641D50C9, 0xAC40D27B, 0x457B8E4A, 0xDAF056EC, 0xCF3541C0,
+0x197FD4BA, 0x485B50F5, 0x161D6AF1, 0x7B36A52E, 0x4C6C6F1E, 0xEAC2425F, 0x54D59936, 0x8452761E,
+0xBB7F965E, 0x0C199CF3, 0x1194535D, 0xFD20099C, 0x7B380738, 0xFE89C3EF, 0x04ACC111, 0xCD45D964,
+0x9355A468, 0x03136077, 0xEF2EEBD7, 0x9EA9172C, 0x7F71319A, 0xBC2FB9B2, 0x1C5E0E59, 0xE463BD1E,
+0x3D02F830, 0xE51E5AC6, 0xF84CB2DD, 0xDED7D885, 0x3114F02F, 0xB51909AA, 0xA0B0D8F3, 0xEAB0C70F,
+0xCB6AB05D, 0xF411A396, 0xDD409630, 0x7F2087AF, 0x222105A4, 0x2BFB95D1, 0x732644DA, 0x4FF62527,
+0x6601F67D, 0xF8A548DD, 0xE16AF702, 0xB2F4C5F8, 0x143A7FD4, 0xF33688DF, 0xB4BBA276, 0x223FB420,
+0x0989FD1F, 0xF5F3D5F2, 0x6B8826C8, 0xA0539EA5, 0xAD5B0C4A, 0xC493EA17, 0x514D58BF, 0x9CC29707,
+0xA306DE3B, 0xD8B9DDCB, 0x61676126, 0x028323C3, 0x6E055E1D, 0xD8B3436A, 0x2E386321, 0x38044258,
+0x69D80E3F, 0x5FF85C58, 0xA305EEF2, 0xEA655D91, 0x5BA499D8, 0x45A74D84, 0xA0492327, 0xD84A2E23,
+0x492CB9E8, 0x2F7205B1, 0x02BEAA10, 0xDFB1FD14, 0x9133134E, 0x83B92011, 0xBC344D20, 0xA1139FBE,
+0xA263AC84, 0x2AB06969, 0x2546A979, 0xF8607254, 0x5079C71C, 0xAF721999, 0x4479A115, 0x189B1C94,
+0x59EFE52A, 0xEFE5117A, 0x697F8C12, 0x51776EE1, 0xA8BDCD03, 0xD668F29C, 0x967E713B, 0x120D4D6E,
+0x0FEB0FB6, 0x839118EC, 0x02278A51, 0xB5F3860A, 0xF982F521, 0xFEDFE778, 0xC0E02F8F, 0x4F8AAF4A,
+0x5F2200E1, 0x74A66691, 0x6296CC5E, 0x6AECD567, 0xDAF59008, 0xD77DF64E, 0xE3A200F9, 0xEDEC49DE,
+0xE8FAEE0F, 0x59C737B5, 0x3A09C162, 0x584C4D53, 0x4884236B, 0x44900365, 0x19F736C3, 0x982C84F7,
+0x8DD68A09, 0x6A15068B, 0x647F85BF, 0x20B1DA5E, 0x7D944D71, 0x11B989D6, 0x08A284B7, 0x3327615B,
+0xFDB6F4B2, 0xC49F11B6, 0xAE2BCB8A, 0x2811DC80, 0x9FFB1DCD, 0x816294DD, 0x1D2515CD, 0x98D60D65,
+0x87593B28, 0x52B4B063, 0xAE145509, 0x1CD0271E, 0xB0EEAF62, 0x6BE9015A, 0x8B8BA620, 0xA77A1305,
+0xE8743091, 0x406D85B9, 0x9A816922, 0x1C9D6063, 0x57D7E948, 0xB700E56A, 0x42F09F82, 0xC107D08D,
+0xC2660B0F, 0x4C729EB4, 0xC7502523, 0x981F16A4, 0xEBFA6348, 0x2EB4D81C, 0xEF01BF40, 0xE73FC8F0,
+0x848A5E79, 0x936D4B31, 0xDD02FED3, 0xEC65624A, 0xA133D455, 0x7B8F5E5C, 0x2F7F8DB8, 0x5F1BF357,
+0x2E431485, 0x890C7F2C, 0x470DBE37, 0x7358A862, 0x0CF5EA0D, 0xF8143988, 0x7E97A6B1, 0x95E80B90,
+0xF9515A85, 0x6B8E4AAE, 0x187C470D, 0x9A555A6C, 0xCC33B36E, 0x70850750, 0xAE42F1FE, 0xB87A5262,
+0x89D5F7BF, 0x2B4E5E66, 0xC29F7863, 0x9E1615C2, 0x06D0454B, 0x5AF9C0BF, 0x8576DDD8, 0xD70F1949,
+0x876AF78A, 0x63AC4D04, 0x41B9EFBD, 0x185EFA67, 0x0EF695C3, 0x58B0C129, 0x34C0C43E, 0xDFC14A89,
+0x6C1CD26E, 0x7208E8EE, 0xDFDF300B, 0x2B19D913, 0x0B21D74D, 0x1D0EFF79, 0x41A954A0, 0xB2F9BE6B,
+0x379E1980, 0xA3D7B77C, 0x7E809767, 0x4355B3F4, 0x2C9B9526, 0x34319653, 0xD7D63F73, 0x6AC4846C,
+0x0DF4C8D8, 0x0C8C2645, 0x74C5E273, 0x6F1D2AE5, 0x7D9F5FF8, 0xECFCC9BA, 0xA08E8E73, 0x17D5CAD6,
+0xBC0F0156, 0x58DD047C, 0x0EF6A669, 0x1C301B10, 0x03123AF5, 0x033B2E95, 0xDFDEC6E3, 0x5A892BB5,
+0x9EA034CB, 0x222EA8B6, 0x6B03EE4E, 0xE7A2264E, 0xB2B8D2EB, 0x1881F1E5, 0xEC145FE2, 0x1B493D80,
+0x5D3BADAB, 0x239470DD, 0x1D2FFEDE, 0x905875F4, 0xA6F0A011, 0x71BC27D0, 0x2422F6EE, 0x38A5992E,
+0x8E517DCB, 0x1751343D, 0x2F211B85, 0x1D50F340, 0x0F6B3F85, 0x1F57B74D, 0xDA42999B, 0xAD1099A6,
+0x3B7B3EE5, 0xA1FF38F7, 0xB2E58D22, 0xA9D22B28, 0xEDBBA90E, 0xCEBE82B3, 0xED420F0E, 0x8BAFEB3F,
+0x35F7D1C2, 0x9EA5FA7F, 0xCAA33F65, 0x7E45FEE7, 0x3A2E99B2, 0x24CEA5C2, 0x40153EDD, 0x3B127ECF,
+0x8B208544, 0x07BB40D9, 0x73485CC0, 0x3F0523FB, 0xAD79C41C, 0x541E712A, 0xAEC6423E, 0x41E8905C,
+0xEDA20EC9, 0xBBDB531D, 0xBD1B0B13, 0x0DE1F512, 0x101A4C66, 0x899DC367, 0x21AF3ACA, 0x46AC75F0,
+0x694AEB1D, 0x7BB7875B, 0xA95A2F5D, 0xEF4E5203, 0x09EA7015, 0x41E16591, 0x31DE9E72, 0xAF631142,
+0xED39B07C, 0x5F0AB0CC, 0x8B3E4862, 0xB6D56B5D, 0x3BEE9B8A, 0x428250C5, 0x56EA98E5, 0xAC64104B,
+0x6C6D5890, 0xAD0A1062, 0xC6B5A590, 0x5DDD0DEA, 0xFAFAE4B5, 0xF02E510F, 0x00E1A468, 0xA89EE83C,
+0x53289084, 0x3F51353F, 0x65912FF5, 0xE7ECC235, 0x5907C273, 0x406DD05E, 0x18AE23A2, 0x7F394AFB,
+0x1E648D78, 0xCCD2DC69, 0xA9B5C004, 0xF5E83E21, 0xF5901322, 0x869BAB26, 0x0A239201, 0x9EA43261,
+0x06DEE371, 0xBC4420CE, 0x521FA025, 0x6C4D997A, 0x7D6A0486, 0x45D67D6F, 0x3EC5DFEB, 0x4F555E03,
+0x41D101D8, 0xE2F9C79C, 0x0AE656E5, 0xB0DB736B, 0x7461E64E, 0xD6962FDC, 0xA2A452AB, 0xA360E983,
+0x34E8BC2F, 0xE73FF225, 0xED4154CA, 0x2380E14D, 0x20822143, 0x2E7319DE, 0x1652A57D, 0x84434644,
+0x2AED4BD5, 0x5D77599E, 0x4F7DDC7E, 0x150F3C3B, 0x76E2F0C5, 0xA9A21BC7, 0x5D8F9D7D, 0x0BE08E2A,
+0x01AE91E5, 0xC901FCC2, 0x10359FD1, 0xDCD4D6CF, 0x6DF965C5, 0x213BB6F8, 0xCA119222, 0xD5158BA6,
+0x4B8195BD, 0xE039E59A, 0xA7621A2A, 0xBF779070, 0xE619DCFC, 0x8F4B22EC, 0xA8A18A1A, 0x3E155F89,
+0x03843350, 0x8BA61FBC, 0xFBC42DB9, 0xC8F9C192, 0x060BD800, 0x32D9AD03, 0xC6F33E46, 0x506DF5FA,
+0xF2F3D8DB, 0xBD69A734, 0x1ABD8E96, 0x74A7E973, 0x7C5567EC, 0x033F983C, 0x3DA9F782, 0x9322CFCA,
+0xEAADAD1D, 0x631D6AF7, 0xD4264046, 0x6AB4E000, 0xA7BBB3C3, 0x65277FDC, 0x2F87DC17, 0x831FE13D,
+0x758519A0, 0x393CC415, 0x68B78E4D, 0x33773401, 0xE934BED2, 0xD4A93A09, 0xAE64E1A0, 0xD460086B,
+0xB9321432, 0xE9143944, 0xFE5EBF60, 0xB3B2DC29, 0x355EB5EE, 0x037EAB46, 0xB51D5C45, 0xA37754DB,
+0x88C8CAE3, 0x59184F98, 0x715EED08, 0xE96B125F, 0x2A0573D6, 0x9C96C719, 0x0E111A5B, 0x1C257BD2,
+0xA245C7A5, 0x685B2D8B, 0xBAC7CAB0, 0xE5105419, 0xA867DA60, 0xA1F30546, 0xAC63E4D8, 0xF1781B58,
+0x8E803635, 0x9D06A1B3, 0x26DB98EC, 0x05C58EC1, 0x2CAFC1BD, 0x46D67812, 0x02684602, 0x36524F9B,
+0xAD747DA2, 0x621D16BE, 0x41A1FCB4, 0x30494DCB, 0x10918C6E, 0xEC4E41C6, 0x9749892A, 0x3147CF41,
+0xE6E6C059, 0xE3402713, 0x0A64568F, 0x048CBB18, 0xC0589B37, 0x5BF41988, 0x4AF8DFB5, 0x773240E7,
+0x0998B9A1, 0xE0557C69, 0xC2D4426D, 0x787A40B3, 0xF31D84FC, 0x8AE1CF73, 0x2217607F, 0x2862A4BE,
+0x22B40145, 0x1F58C873, 0x909BFD58, 0xB5C83DBF, 0x98581F0E, 0x55429332, 0x532EAA28, 0x8124E6F1,
+0xDBE9FAA6, 0x10EDA428, 0x2F763A61, 0xC9F04CF2, 0xD8EAF853, 0x744DE63C, 0x37E7838F, 0x5BAA6FBB,
+0x5A390B1E, 0xE8D29ABD, 0x11763CD6, 0x45717771, 0xE990FFAC, 0xF964925C, 0x19C54847, 0xFF10170B,
+0x785D75A0, 0xCB2DA1FA, 0xB4DB62D4, 0x82F57457, 0xD6AB0ED6, 0xA6B6FB45, 0xB110EE4E, 0x04979D30,
+0x88584C75, 0x966C003F, 0xBF6FACE4, 0x8B8159E8, 0x7384E9A3, 0x104ECEB2, 0x0BA09669, 0x1431AED9,
+0xE9CD1AB3, 0x4ECFB69E, 0xBDD757D9, 0xD565155F, 0xC1AE2041, 0xE75F1ED9, 0x4607BB33, 0x4F3531FC,
+0x845776E5, 0x0159A0A7, 0x02BAC3B8, 0x878C4D15, 0x6B86D344, 0xF3158AA9, 0x01739220, 0xC6B0F1B4,
+0x6E4B2EDB, 0x2B23235E, 0x33681190, 0xC602975C, 0xB98D3A34, 0x514397C8, 0xEE79585F, 0x260E033B,
+0x1140B016, 0xA4E95612, 0xEB71B0C5, 0x0F52BF8B, 0xBE19FD2B, 0x38CE7269, 0x892AC90D, 0x6B15F3A5,
+0x085BDB96, 0x94C0BB87, 0x0C1F9CF7, 0x764A1AD2, 0x88DA0BD4, 0xA65A39F2, 0x85423E1D, 0xBAA78416,
+0xD42091E2, 0x55D0618D, 0x7EFF4BF1, 0x6968B742, 0xC641E9BF, 0x5D537C81, 0x99B38DAE, 0x21EB077C,
+0x33647AA0, 0xB617EAFD, 0x05ED722B, 0xD918EACB, 0x53370C07, 0x90454D31, 0x06BD7ACC, 0x338E0829,
+0x589457CE, 0x1B5F8785, 0x0021C3C3, 0x27F54DDC, 0x76A03EC9, 0xFC0D486A, 0xD7F140D3, 0x4B1C96DA,
+0x37918F87, 0x0860C602, 0x1FF3BD6C, 0xF6A6D12E, 0x3E4EFC7E, 0xFB786F83, 0x5FBB8302, 0x4B74E4E4,
+0x6BE5DAC5, 0x6FFB4683, 0xE7135941, 0xAC869133, 0x2C3E211B, 0x12107940, 0x3399D55D, 0x05926699,
+0xF8BA612D, 0x8D811FF4, 0x034FCE20, 0x72266EC9, 0x7927C901, 0xF2B9BA55, 0xF9E5D63E, 0xD627BE1B,
+0x93365A03, 0xD2D810FC, 0x3323A853, 0xEF2F2108, 0xE38E5DAD, 0x1E675BDE, 0xB711F982, 0x19CFA67D,
+0x42DA19EC, 0x82C7478B, 0x02945258, 0xC6712460, 0x20DC8BFA, 0xA74172C1, 0xB5D700DF, 0xF5C31B65,
+0x67DCF7B4, 0x3A253E26, 0x49BEED64, 0x6E15A952, 0xA7B99719, 0xD6FC0449, 0x0EBE1F07, 0x3E899DD2,
+0x5267BDF1, 0xECEF1B97, 0x20033CD6, 0x3C4F39A5, 0x30192C48, 0x95BFC4A7, 0x75BF1487, 0x305DEEF2,
+0x24D75D80, 0x20A13FAC, 0x8BFA7DDF, 0xF49B7A6E, 0xDACB75DC, 0x46B784C3, 0xE77CF329, 0x706A1D73,
+0xFD1CCE3F, 0x1933BF35, 0x79933E6C, 0x71AA1C5C, 0xBBFBDBB1, 0x97778FE9, 0xB64FC34C, 0x8593E867,
+0x3F3EAAE1, 0xEFF66B62, 0x4FAFDC87, 0xE33AECFA, 0xFFA3A413, 0x6C00007B, 0xE4BC9767, 0xA09ECB42,
+0x2CD31620, 0xA99CF74A, 0x414835D2, 0xEFC1F10C, 0xD1634C60, 0x63163380, 0xA805B5A6, 0xA918B5A3,
+0x00EFC448, 0x5DB346C0, 0x1830F2C6, 0x0CFAB7B6, 0x9891AF84, 0x9ABFFA7F, 0xD62E28C9, 0xEB5D3748,
+0xC68CB7E7, 0xD9D304B0, 0xFCE7BA78, 0x008B5A6A, 0x3424621E, 0x6280514C, 0xD5994076, 0x037E596E,
+0xADF36511, 0xC9749593, 0xEA531410, 0x1A850D8A, 0x43D097CD, 0xEA34B126, 0x251C0E8B, 0xAC85A388,
+0x7C3CABD4, 0x78553C76, 0xDCF5D913, 0x55566B64, 0x4E218B6F, 0x17607A9D, 0x802EE0F8, 0xC76E92B2,
+0x356BEA39, 0xBAF40206, 0xB1E06399, 0x67A94B65, 0xA901E744, 0x5560C5AA, 0x75E59A05, 0x69E7E10C,
+0xFCAA9C0F, 0x4BECF588, 0xD9A594E7, 0x8D82FFBF, 0x269F208C, 0x1FEC1233, 0x7CA65669, 0x3C14C39F,
+0x4C106051, 0x3E6AD776, 0xD3A2FB29, 0xDE9272DF, 0x8EF8FDD2, 0x287B9CD6, 0x07345047, 0xC95A8248,
+0x22056B09, 0xDF83AE95, 0x64ECA754, 0xD886F2A3, 0x6CCDF9DD, 0xE6FD86EF, 0x75FC9B54, 0x3E3BBAF8,
+0x92EE237B, 0xB206163F, 0x490D80C2, 0x5DEDFCA1, 0x303A1599, 0x7A5D14F0, 0x919EBA61, 0x4BD3E687,
+0xF8467D06, 0x1EF2F29E, 0xFED60615, 0xE006E468, 0xAE3A65BA, 0xDBB8B688, 0x2F56AC19, 0xF03F9B77,
+0x939A985A, 0x45C57E63, 0x129814A9, 0xF69336AB, 0x4DF09657, 0x57E94904, 0x5D81C156, 0xABE4CB96,
+0x060DE748, 0x05F048DB, 0x9A3CAA96, 0xB84DEA7D, 0xD5719793, 0x0B2724B6, 0x797E878A, 0xC9DD9FB5,
+0x7DB9BD91, 0xB5D368DD, 0xBA08995D, 0x686F7D57, 0x6BBA5984, 0xDDD163D7, 0x22264B62, 0x86BFF6E6,
+0x8AACC040, 0x9D4C3520, 0x91964355, 0xD4C3B129, 0xF0240433, 0xDC7C902D, 0xB6C78075, 0x8A7B6F47,
+0x883124FF, 0xFF23A1B1, 0x3938F92D, 0xB9B2D975, 0xD0392ECF, 0x51F92D2C, 0x042EF3C3, 0x47B00F3B,
+0xFB685985, 0xE7944F7B, 0x36EAECA9, 0x113F3145, 0x0F201201, 0x95855715, 0x2FF8A903, 0xDA4A9E3E,
+0x6EB2B774, 0x1F0950C9, 0x0ED56C61, 0xB1FEBB62, 0x9DE54E5A, 0x885E6119, 0x2720C084, 0xE9609736,
+0xF254DE16, 0xC47B9A6D, 0xA472A245, 0x2B166E8E, 0xCAF168ED, 0x4111DBBC, 0x5722DB62, 0xF3034C31,
+0xA8B7A39F, 0xF3B4C9E1, 0xF6A366BB, 0x5C590FEA, 0x77AE1A4F, 0xA725AA75, 0x5DF9C8CF, 0xA3D0B97C,
+0x16DA9FE8, 0x13CE9CD1, 0x73EE2F94, 0xE590786A, 0x77143C5E, 0x92C26B2C, 0xF8C190C9, 0x151D81CD,
+0x47347BEE, 0x5FCC0A45, 0xE7FA9FDA, 0xC6124AA4, 0x24B32701, 0x43815A74, 0xE8A8857E, 0xF7B7E45C,
+0x5914ABB9, 0x40F3FDF9, 0x5875E486, 0xD40CAAEA, 0x1BFD781A, 0x1D1353AF, 0x9C27AD70, 0x3A6A5917,
+0x8371D12E, 0xDCE83920, 0x5DAB2F87, 0xBD43C254, 0x6266ADA1, 0xC310FD98, 0x98DEA88A, 0x40B0B57D,
+0x40F033A8, 0xFC31F60F, 0xCAEB7C1F, 0xD7E1FF09, 0x57366036, 0x3A7144F5, 0x17E49DDD, 0xA1A12E60,
+0x6FF7A0CB, 0x960D040B, 0x3574BB76, 0xCE7FF2A5, 0x572BDB09, 0xFB49FF8C, 0x137CB77B, 0x9D49947F,
+0xDD0F7571, 0xB0B3BD6E, 0xE246488A, 0xDA07946B, 0xEEEC5525, 0xFC8689BF, 0xA58777D7, 0x5227B5DB,
+0xD9AA04E8, 0x7614270B, 0xF11531B3, 0xA63062CC, 0x8F7FFFB5, 0x30A126AB, 0xD4109032, 0xB479CD29,
+0xF74FE9A7, 0x7FD4B5B8, 0xEF40C19B, 0x49C2B544, 0xAF31BCFC, 0x190EABE4, 0x03CBD144, 0xB334D996,
+0xCA78BA7C, 0x695D0810, 0x14AE1A62, 0xCBDD72B9, 0xE175B94F, 0xC140393C, 0x4A5C92B2, 0xC9D48908,
+0xCF4FB538, 0xD62E8B7B, 0xFD7F805B, 0xC04608BC, 0x2428D36D, 0x03CBDF4C, 0x42558D46, 0x74A80CD4,
+0xD9AF7043, 0x0F0DA696, 0x61F5D344, 0xA7B3F55D, 0x3F815B40, 0xC28F82CC, 0xA4DC3914, 0x0E89AA38,
+0x85DA997D, 0x7835A951, 0x55A8D414, 0x2737D798, 0xBCEDE401, 0x8A14F338, 0xC6593108, 0xECA585F9,
+0xC6863B29, 0xF14BC18A, 0x7E5E4574, 0x240CF283, 0xA7EA2AA7, 0xC5D1A9FB, 0x04985FD4, 0x6D4FD522,
+0x8CE18D67, 0xD218BB93, 0xF5F96EDD, 0xFC10A292, 0x2E2A6A20, 0x8885F939, 0xAA4C98C1, 0xA35E7378,
+0x1A9621BC, 0xBF32E434, 0x98B8217C, 0x5A714EE5, 0x8F7FAD2D, 0xAF4F8173, 0x6C212B26, 0x60BB4410,
+0x58499202, 0xE5D406B5, 0x40545B75, 0xF8F22ACE, 0xC325B4B8, 0x5A55EF32, 0x978182E8, 0x5A427CD7,
+0xC7294F68, 0x3396748B, 0xE8112581, 0xDCD3E510, 0x3EF2C9DF, 0xA27BDD79, 0xEB2FFFE4, 0x66326732,
+0x91CA77C9, 0xF5135CF8, 0x349C8C93, 0x99A4996C, 0x9B31E5CC, 0xEB4248AD, 0x08C3F036, 0xB46C4FDE,
+0xEFF2159A, 0x38E2E0C4, 0x9C07A78B, 0xFFC45A4F, 0xB1A93B39, 0xD101BC95, 0x156A82B1, 0x9436B49C,
+0x37F242D3, 0x2169156D, 0x3EEE69A5, 0xFF2F5143, 0x80E31511, 0x576897DB, 0x259A80B9, 0x6D15AF5A,
+0x781F0410, 0x6E0329FC, 0x31D0FFB1, 0x72E70AFB, 0x58A77319, 0x4B433AA6, 0x17AF4C1E, 0xB96CF30F,
+0x99D6A0EF, 0xD90B39A5, 0xC65CEB87, 0x3412398A, 0x85BDE896, 0xEF876BEB, 0xA7F3FB4F, 0x231AAC32,
+0x07ED194E, 0xD10258E7, 0xFA5D9F1A, 0xADAB4E54, 0xFDB5B488, 0xB4CFCAE5, 0xE11589F9, 0x8286D975,
+0xA82BC973, 0xC407936B, 0x37A6754D, 0x6371802B, 0x91B1E879, 0xB7A875B6, 0x28CAB7C7, 0x8CDE66FB,
+0x06DF63A9, 0x8BAA6F08, 0x01A0B2E9, 0xBC2B30A5, 0xC0D80075, 0x48454AC0, 0x74BFF018, 0x6F78628F,
+0x6E8474F0, 0x6AC7B24E, 0x05900453, 0x9EFC1070, 0x59F621B3, 0x9AB684D6, 0x48776EC3, 0x35C99CBF,
+0x7D240BB7, 0xBD03E7A0, 0xE20ECFEC, 0x5BBAA2AE, 0xC4F54766, 0x893ADA3D, 0xE51AD2E3, 0xD9438F15,
+0x04F4670A, 0x40957D60, 0xE071C9AD, 0xB784785F, 0x13B3B4D7, 0xBC116EDF, 0x206C2DAE, 0xC64F2577,
+0x68F442CE, 0xCAFA5B51, 0x3DBE99F5, 0x95D66E01, 0xE3146546, 0xCBE0E42E, 0xE057D3F8, 0xC368531E,
+0x6BF0A59C, 0x738AD924, 0xAD56A4E0, 0xDFB77C22, 0x9421A7BD, 0x9474F0C7, 0x32EF6B0B, 0xCEEAEB68,
+0x6312F893, 0xADFE9A5B, 0x663701FF, 0xFC71171B, 0x22E92C6A, 0xA1E06C5D, 0x5103149A, 0xD56A6F20,
+0x6A0B1DA7, 0x1BBDF10F, 0x9AD6ED1F, 0x71EF38D5, 0x7D79806F, 0xE44BB833, 0x68455FE7, 0xFBABC508,
+0x3F267811, 0x88C5FF5A, 0x9CD44CFE, 0xB3419688, 0xE26117FE, 0xEF787C65, 0x3812ED00, 0x04E8C842,
+0x459E066B, 0xF5E00839, 0x75FE7FB8, 0x464F15FF, 0xE8779349, 0x9D4B4E46, 0x9D4FF3E2, 0x0B45DA32,
+0x3100090B, 0x0B67C4A6, 0x84D0FC78, 0xA7D9C80A, 0x3588703F, 0x7FCD0E59, 0xCD8DEB80, 0xD5EAA7D6,
+0x2E0294EA, 0x8A7CDA57, 0x5087A0E7, 0x85718377, 0xD714C48E, 0xE797AD5B, 0x480E1503, 0x79A780D1,
+0x555B20D7, 0x2589671D, 0x27B8CE27, 0x3C04821D, 0xD3E265FF, 0x9A5DB575, 0x04385B7A, 0xAC2A70F2,
+0x4BDEB2E1, 0xDDD33195, 0xB8888747, 0xC50C52A4, 0x93825A8F, 0x07E8FEDB, 0xB09134BC, 0xF3130C30,
+0x76F5A60C, 0x00FDF180, 0x8B388989, 0xD99406B1, 0xF7D3490B, 0xF2165FCF, 0xD3FA78EB, 0x38C4A3DE,
+0x141498DA, 0xB03D987A, 0x0A840D15, 0x1ED5F5AE, 0xA6C22C74, 0xDD184C83, 0xF0D9F022, 0xBB58D1E2,
+0x524D7C3B, 0x2696001C, 0x002818D4, 0x6BE1A832, 0x7562CBBF, 0x86F0943A, 0xF4990CFB, 0xCE040871,
+0x2366493B, 0x6B34146F, 0x1E7A31E8, 0x9B7FF83E, 0x587E02BB, 0x2C93F21C, 0x02CB2D60, 0x673E80B2,
+0x9C0133F9, 0xF3E90BD2, 0xC4B186E0, 0x68E76246, 0xCF25A08A, 0x9DB3ED2C, 0x171C2BAA, 0x06CB5EDD,
+0xC726F8EF, 0x642D2DD7, 0x9EF9BBA9, 0xA03528C7, 0xABBBAE45, 0x68BEF025, 0x6796E64D, 0xC5038E8C,
+0x107CABE0, 0x08C3036F, 0x2478BC1F, 0x70FCF36A, 0x18DB85C9, 0x91B415DD, 0xAD86B252, 0x8031B7C3,
+0xAD822E05, 0x22CF8EBC, 0xEE66319E, 0x0B4791A3, 0xF3466873, 0x9BF4CF47, 0x2E3FD724, 0xA9A3AA6E,
+0x961975EC, 0x2D73B6BA, 0x9CBAC7F0, 0x68657649, 0x4226C3AE, 0x639ACD49, 0x87BCD68C, 0xF3EE9EEC,
+0x358C4D36, 0x5B98C7FB, 0xC814661F, 0x3F8FB913, 0x5783B64F, 0x343387D4, 0x78B234ED, 0xA8474C30,
+0xA888066F, 0xE03CD6E4, 0xD06CE24C, 0x2BF17EF8, 0xB96622BD, 0x19E4DC10, 0xB48DB3CC, 0x735ACAAB,
+0xC44CF27D, 0x20BDFFDB, 0x6384F87A, 0x0F0DB6D1, 0x875B0688, 0x7B19CEC0, 0x2782B8A7, 0x46A402A7,
+0x79D2CE3E, 0x7AA3A220, 0xA929DDDD, 0x8E819834, 0x241B1D64, 0xD8D6426B, 0xF9178FF3, 0x581A2F1E,
+0x0DAB447D, 0x1BF8CB3A, 0x3825A6EF, 0xA936D2B9, 0x2016486D, 0x7733E6EF, 0xDC0300D4, 0x236CCFB7,
+0xF41E140E, 0xA41DC640, 0x460C9C8A, 0x0D66679E, 0xD2A315D8, 0xD0B1DFB5, 0x7205E89F, 0xF6C4F3E1,
+0x3739626D, 0x1A6C1559, 0xD5939F17, 0xB984D1E0, 0xE9B26DD5, 0xC33482D7, 0x66A6B00B, 0xC36CC495,
+0x5427665A, 0x187562B5, 0x9A0F21AB, 0x8A68E6C3, 0x19D91D37, 0x21FCD995, 0x63A28CDA, 0x149B5AB2,
+0x1E9C2835, 0xDFC7F935, 0xDE9C1851, 0x804FF48C, 0x6F4BD097, 0xD0B52BBC, 0x5ED62BC7, 0x52C6D6F0,
+0xF2CE81AA, 0xA51ACEC6, 0xE8E75E1B, 0x3C644E53, 0xC120739E, 0x9B5AFE94, 0x17FDE2B7, 0xFAE96931,
+0x71F7C241, 0x86AA4AA2, 0xD5F883AF, 0x46BFA992, 0x8169EAA3, 0xA7FDE43A, 0xAB878042, 0x55B4CFE6,
+0x4E05082F, 0x107A19EE, 0xBD31BB80, 0x28F9970B, 0xAF976692, 0xE9223119, 0x693FDD65, 0xB94C2F41,
+0x3CDB1D44, 0xEAC0B3D1, 0x7D435884, 0x7E0CE872, 0x22BB9AB3, 0x8652B579, 0x56CA92AF, 0x2C4B593F,
+0x9466C9F5, 0x4EA987FE, 0x4469D1B0, 0xE335FACB, 0x1E747154, 0x34F46D5B, 0x0383A233, 0xBFD2A786,
+0xE7976417, 0xBF752936, 0xF065351A, 0x261FCEC1, 0xC170FEE2, 0x26A980D2, 0x20354697, 0x96D1579D,
+0x6D446264, 0xA850513F, 0x0CFF226C, 0x2E93EAD5, 0xD018E982, 0xF0DD4071, 0x4FED9228, 0x9ED3A6F2,
+0x45562D4A, 0x984A68E7, 0x3FEF14B3, 0x770006AA, 0x003E8D81, 0x5880CE62, 0xCAAB163B, 0xCFBA9992,
+0xD1471777, 0xBF31CB81, 0x9CE61583, 0xACA70532, 0xE9EEE9E7, 0x38A0D918, 0x6AEB9F05, 0x028D7F75,
+0x299E249E, 0xB305BA7E, 0x38706181, 0xDE5AC05A, 0x477074D6, 0x6193FDA1, 0x18E52EDC, 0x31C5AE51,
+0xBDFB2554, 0x35D87A1A, 0x0D7CA721, 0x217E6012, 0x4270DE24, 0x4DA567F0, 0x7DC1B84D, 0xCFD72006,
+0xA14FDE70, 0xAE499235, 0xC67831B2, 0xF7710DD0, 0x9FB40263, 0x982F4CFB, 0x364A6D58, 0xE51655B5,
+0x9815A9AA, 0x1EB63FE4, 0x439D0550, 0x5D91FC06, 0x682582E6, 0x52CCC663, 0x1DDB91E9, 0x574754A7,
+0x2A027E18, 0x05B88CFE, 0x6BBDA9A9, 0xF461548E, 0x585926B9, 0xF919DF6A, 0x94240891, 0xD74E94E3,
+0x44F72991, 0xDB96C8A7, 0x74D6A142, 0xA295A2E5, 0x83C1A956, 0x0BF2D2D4, 0xCD80397F, 0x45A0460D,
+0x84DC0BDE, 0x8508437B, 0x24591F48, 0x9E06679F, 0x3E0E60A9, 0xA4B45017, 0x9D8B36AC, 0x1AA030D8,
+0x873B4723, 0x92DF44B2, 0x909F1F09, 0x50C9AA57, 0x1CF86D7C, 0x47626EA5, 0x5E1A6A1B, 0xFF95977A,
+0xFE85ED70, 0xB7F3ECFC, 0x6948F321, 0x4FE9C8D6, 0x1F87C415, 0x74CFFD70, 0xFADC2C26, 0x9DF19F50,
+0xDE68B6C7, 0x54470069, 0xC3979087, 0xD61A2866, 0x0225EC19, 0xF344E99A, 0x84E8F539, 0xD6FFEECD,
+0xFF172DB7, 0xFA307A2B, 0x4E7C9929, 0x8679284D, 0xD3BC4E38, 0xD0E732DB, 0x4B40AA1A, 0x1B825D30,
+0x7EEF32AD, 0x1833A2E3, 0x3CE5F273, 0xE0987D87, 0xA2870FFF, 0x74AD65C3, 0x5B334835, 0x3F5C6A98,
+0x38EDE675, 0xE845CA0B, 0xB6D8508B, 0xD56DC7C4, 0xC8D1FD3E, 0x0B19C910, 0xF53AFAE8, 0x5F0DF98C,
+0x8AE41609, 0xE9110BC6, 0x806F516C, 0xC97102C4, 0xF5C3B7E6, 0xAFC27D96, 0x00000030, 0x08EE2801,
+0x0000C815, 0xB8210100, 0x05000800, 0xE9B3CCFF, 0xB0F9E94D, 0x31E35821, 0x7494CC20, 0x08346CAB,
+0xA1726061, 0x9DF43210, 0xCB1B1762, 0xC7D61457, 0x1387924C, 0xB703B219, 0x8D3B4B56, 0xC9CC0A0E,
+0xBDCC6919, 0x7F52A10D, 0xA04B3F02, 0x44C66129, 0xC2BE105B, 0x34587A7A, 0x5EFC9E4E, 0xC3665F3F,
+0xD5D8C5DE, 0x36040A30, 0x71FD16E6, 0xE68B048F, 0xB47CA1C9, 0x912AE7FE, 0xCB1C7E6D, 0x2E1B7570,
+0x7DC11A23, 0x768E8385, 0xF74D5C03, 0xB5C3D75A, 0x64099B5C, 0x544EE0F2, 0x906D3C6C, 0x512D53A5,
+0x365A343F, 0xB2A1FF6B, 0x2F72AFCE, 0x838F5D4D, 0xE29011B9, 0xEED386BA, 0x422EA606, 0xCF5FB22C,
+0xBBB8B3C5, 0x95850F4E, 0xC309A54B, 0xA891B6DA, 0xD77DEF78, 0x720A940F, 0xECDD2893, 0xDF928D90,
+0xAD0561E1, 0x94E1F48F, 0x71C268E8, 0x396A158E, 0xFB922E34, 0x772A8340, 0xECEEF40D, 0x5E7CEA47,
+0x4ADDB7CE, 0xD9C7FE9F, 0xA0BDB761, 0x71947FB3, 0x0F5FE948, 0x0C1CA98A, 0xFDCC9165, 0x6BDF67B6,
+0x4F328792, 0x3D8FF3FE, 0x42DB8A3A, 0xAA29E00F, 0xE5E7038A, 0xD0447542, 0x620E94DF, 0x2796933B,
+0x41B1E118, 0xC54E546F, 0x3FC26DCD, 0xA7AF4C78, 0xCDEB00BB, 0x53E924E5, 0x29B02C70, 0x0049CBFC,
+0x3858952C, 0xB6A29A9F, 0x1AB4FC6A, 0x57571A41, 0xF93036FA, 0xD63A0B3D, 0x210D5C19, 0xE14E5B65,
+0xB08E4726, 0x3FCEE410, 0xF834EC65, 0xBF339EA6, 0x1EF11FD8, 0x88564DF2, 0xC320917A, 0x3F86F98C,
+0xF8E0E26E, 0xD5D73540, 0x025A13B4, 0x52CD9C1E, 0x4817BFF7, 0xAD421297, 0xE444A36B, 0x289E057D,
+0xE383E02C, 0xE870A2F7, 0xACCE282E, 0x17D42E1A, 0x09BFEB98, 0xA07F442C, 0x8119479D, 0x225B6211,
+0xE0FAFDA1, 0xBB1ED2AF, 0x9EE903D2, 0x0A083E7B, 0x3C9D3705, 0x96FF3849, 0x3FC0B64A, 0xE949928D,
+0x6E6C294C, 0x920262C9, 0x9A9C190B, 0xEC094B7A, 0xBA029911, 0x25F46C0F, 0xAFFE4EF9, 0x37F2F4DA,
+0x21836444, 0x22CB68CB, 0x2D1D9FE5, 0x0761DB29, 0x4905ED73, 0x09BAB25F, 0x46AB0E19, 0x87CA324B,
+0x91B4BFD7, 0x70E016EA, 0xDED226F7, 0x2219FC25, 0x885E0FAA, 0x385251DD, 0xF3DD1A15, 0xB7CC3952,
+0x8381C9A4, 0x3B687E5C, 0xA23C47F1, 0x5298E1BB, 0x70821BDA, 0xB4881570, 0xE47E0D2D, 0x94EAC7FE,
+0x019E27B5, 0x35892368, 0x98733F79, 0x53559098, 0xBD28FC99, 0xC2388D42, 0xBC903A93, 0x030662EB,
+0xAB0EC5AD, 0x5380C22D, 0x5076C153, 0x74493ABD, 0xAD391E7C, 0x020D2BFD, 0xD3F4E8E3, 0x2A8A0851,
+0x0F11BA73, 0x7A1B892E, 0xFA54F5EF, 0x985B231A, 0xFB80B5DD, 0x56AC47C2, 0x3EA7628F, 0x6352CFD1,
+0x619D76D9, 0x3627ADB3, 0x6BE56236, 0x46CF4819, 0x691110AB, 0xCF779C9E, 0xBB7FDBFD, 0xF7188841,
+0x06E6232C, 0xB8C69D8B, 0x94E3FC8D, 0xE252B7FA, 0x27C069D6, 0x19EB4D06, 0x4ED7730C, 0x26CE4630,
+0xD7277AC2, 0xDA5A53A5, 0x8F456797, 0x4A88573F, 0xA640ECFB, 0xAFEF5949, 0x7CFD8A95, 0x69723860,
+0x55C89700, 0xA60E96E7, 0xA8E1FE2A, 0x6B0C2A3E, 0x3567AEA8, 0x1BB89C42, 0x3A34B8AB, 0xCAE635BA,
+0xDAE52A47, 0x3D203944, 0xD732E8D3, 0x0E867799, 0xEBF2B250, 0x8E960920, 0xE4D7E31A, 0x74459A13,
+0x0EA9756E, 0xE0D72D68, 0x2360738A, 0x116C7253, 0x5E609FF3, 0x7715A861, 0x0F84ADA1, 0x7B6A9002,
+0x0D66B815, 0x1621CA75, 0x55239B19, 0xB9169473, 0x17E81BC9, 0x68512DE2, 0x6A8CE1DD, 0x29B898C0,
+0x97C81A2A, 0x4AC12981, 0xF88A9C5B, 0xA3527037, 0x983676D7, 0xB98EDBE2, 0xA305B8DA, 0x0F2B2B2B,
+0xBC46F69B, 0x78E7A345, 0xC4E72BF1, 0x26058A5C, 0xD7216FF5, 0x2C43357F, 0x5194B3D9, 0x88DA3C2B,
+0xA6846E00, 0xD0AE7995, 0xB3891DC7, 0x27A94AF0, 0x3911AFDA, 0x13EEBC95, 0xE7346F7B, 0xDE4EF8A6,
+0xE2CEB9BF, 0x62BE4796, 0x5FE33284, 0x33209FE9, 0xAAC9E16A, 0xCD2FB48F, 0xF6FB7D66, 0xBB4F7AC5,
+0x4BD3991B, 0xA738C5CD, 0x363C2CA8, 0x0D4F3E23, 0x193BF90B, 0x4BFA4EB4, 0x05DF2E96, 0x08211524,
+0xB6AB7B6D, 0xEF5A6B08, 0xCB23BB16, 0xC5C2D552, 0xE08FACF4, 0xDDCDA0BC, 0x1EACBB93, 0xD75E782A,
+0xC46D66F0, 0x9EAC6E44, 0xE39C6126, 0x5A32AC57, 0x8F495DD3, 0x531398AF, 0xD82129CD, 0x9909FBE2,
+0x3B4CCF5D, 0x6B46AE4D, 0xCEB51EE0, 0xFBFD8FB9, 0x1896F01F, 0x58B08AC5, 0x7A919320, 0xCF5D011C,
+0x3FA169B5, 0x9D4F57BB, 0x0275901B, 0x80B4FD4F, 0xD572B55A, 0x4F8411F7, 0x5C1CE104, 0xFEBF177A,
+0x9F0AE461, 0x8A2CF537, 0x6B5B721D, 0x44242E08, 0xCBB0BF9F, 0xD3C0DA0D, 0x4F055730, 0x2A2BB0C9,
+0xFA391EB9, 0xDFE6DCE3, 0xFDF6FD49, 0x6D1D5DDD, 0xEB7BB5F9, 0xF75E0931, 0x303F1440, 0xD173E473,
+0x259CBFA5, 0x617DA0F1, 0xA6F32066, 0x9B128CCD, 0x1CF2C076, 0x7FECDC07, 0xF36FBE22, 0x8D718586,
+0x09B8B40E, 0xE49E533F, 0xF7FF0AA6, 0xF7FF7F18, 0x7D2E91BD, 0xC8B9E44C, 0x5947F461, 0xDFA24ED2,
+0xA563E948, 0x0366FFD8, 0x8C8DD48D, 0x8356BD93, 0xEC504FC6, 0x6C9EF6B3, 0xECAF8E10, 0x166F5CCC,
+0xDFE5FE8D, 0xBDD57DF5, 0xFFD796F8, 0x62D4E2E1, 0x740F3647, 0xA4240C1E, 0xDC67E20F, 0x7A5A4977,
+0xF4BC9730, 0xDE512C35, 0x90FDC902, 0xED68C41F, 0x42A3D49B, 0x57FFAB0C, 0xFBF9EDAE, 0xD0CA2677,
+0x43039D26, 0xE152772C, 0xA041E3E7, 0x1139AF52, 0x993AC9D4, 0x3201E265, 0x0D8FAB0D, 0x5401E702,
+0x3163D7CC, 0x75330AD7, 0x80E9D3D4, 0x72F56470, 0xDDBFBCF7, 0xC009CB12, 0xE7B4A647, 0x9E16326F,
+0xFDE635E0, 0xE1A1AD3C, 0x2D0885C0, 0x970B15F7, 0xF819F23A, 0x8429A503, 0x37C0C07C, 0x5E8504CB,
+0xEEAC2660, 0x4A9318A1, 0x8FBA7412, 0x0DF263FF, 0x21436FC4, 0xCFD91DCC, 0x156AE85C, 0x2A96B0AA,
+0x99952BEB, 0x18935429, 0xDFBA5F8A, 0x22449EE6, 0x0249D238, 0xBA6A765C, 0xD97BD24C, 0xFDD9267F,
+0xD186B443, 0x78A17D62, 0x92815446, 0xCD682FF5, 0x82993C7E, 0x54CF26CA, 0x1AE9BBA0, 0x9282703B,
+0xE53CBC52, 0x68BFED43, 0xD9BF6D07, 0xA973AC91, 0xCCCBE2F0, 0x85EACBC3, 0x8842DF00, 0x1336D73D,
+0x5DA010D1, 0x6B9E8362, 0x917AA513, 0x564BB13C, 0x1823055D, 0xA40BFF96, 0xCE873722, 0xF662FB3C,
+0xD7656973, 0x9481393D, 0x90B73D85, 0x5A5AD45F, 0xD3A585D8, 0x1AC1EC4D, 0x775C8DD0, 0xA74E09EF,
+0xD00F4921, 0x12148075, 0x02C74E1B, 0xC8D3CD9C, 0x5CD9D514, 0x52649944, 0x94D8DEC3, 0x6F9CC776,
+0x751C9466, 0x1228DCE2, 0xB04A9008, 0xB497315D, 0x321C4A70, 0x12577C2E, 0xC85F77F0, 0x94DACC67,
+0x63FCF230, 0x1A53C462, 0x834E3322, 0x32AC9883, 0xEE263B3E, 0x8A2F33C0, 0xD599BBB9, 0x9B5C9891,
+0x2956E232, 0x2D386439, 0x42229AD4, 0xEB437B50, 0x5A8324A8, 0x1210C288, 0x19CC687C, 0x7C30C472,
+0x028A6862, 0x8D43A2E4, 0x266B7BA4, 0x76396DB7, 0x120F5338, 0xB40E2D37, 0xEAACE293, 0x18CB6882,
+0x1831EEB6, 0xCF740E88, 0xEB1F6CB7, 0x3B06EF5B, 0x0C0769E0, 0xC2657560, 0x45D8AECD, 0xC9C5CBEA,
+0xF1F7EF92, 0x270A655E, 0x174FE952, 0x0569FC7F, 0x11CFC63D, 0x3699F432, 0x375CAB57, 0x262F36CF,
+0x143B148E, 0x9322FCF0, 0x8004E808, 0x3D5A7053, 0x86E4EE4E, 0x34E99284, 0x6259E3E2, 0x4349DB43,
+0x4FEAF6A9, 0xDDEFE586, 0x70059150, 0x7F1670FE, 0x4D193636, 0x33351D3F, 0xDBE25013, 0x7FE52579,
+0x022D94B0, 0x9D019043, 0x9A08D080, 0x1450DFD1, 0x7A28F9F2, 0x8173C824, 0x38E485E3, 0x570A4749,
+0x6150EADC, 0x2FBD0820, 0x0D7682A1, 0x20C076E2, 0x34F63E0F, 0x83A98D46, 0xF340B7FA, 0xF340E43F,
+0xC5F3F4C8, 0xCEC2AB2A, 0x7D1AA2E2, 0x8D290599, 0x0D89D389, 0xD66B431B, 0x634FC129, 0x00A0B1D2,
+0x8EB1F61B, 0x00F78827, 0xA11F6680, 0xAA8EE07E, 0x707090D9, 0x85FF62ED, 0x1239F07A, 0x7526D6A5,
+0x04DF818E, 0x803FF3AF, 0xB87DE596, 0xE62E4CFD, 0xC3621835, 0x8769ABE3, 0xD7A2B597, 0x99E92F10,
+0x7E4DAB1B, 0x8571ABC7, 0xC7A4CF59, 0xE9750F43, 0xB6A066CA, 0x5C32676E, 0x115CB810, 0xE19806A9,
+0x59CB9298, 0x1BEC5E17, 0x87F63798, 0xEB0FDAAC, 0x2980F517, 0x3D29DAC5, 0x2AE76ED1, 0x26584DFD,
+0x688A59E9, 0xF0518F90, 0x38608293, 0x6C60685C, 0x4C01F24A, 0xDE5B5F8F, 0x1B5B00D7, 0x76F8D227,
+0xF6B95C68, 0x43A80B3E, 0x5C692E8A, 0xE1F8F40B, 0x30691737, 0x10B0320E, 0x10D7FE2B, 0x3A306091,
+0xCF08F0FA, 0x7AEF5509, 0xA14CCB00, 0xB683394E, 0xF801E926, 0x7E3E75CA, 0xAB8BC97C, 0xB974BAC0,
+0x263CA657, 0x59706C68, 0x4C46F0CB, 0x93FAEFAC, 0x7AFB5E3F, 0x409BD6CB, 0xC38BF83C, 0xFD963537,
+0xCD7BC6C7, 0x37940909, 0xA77502D6, 0xBD255175, 0xF78052E8, 0xCDF4CF75, 0x0F1D7D43, 0xBF31369E,
+0x90845858, 0x0437C1D5, 0x61094D9D, 0x13F09D67, 0x0C6037BE, 0x3CD48D79, 0x829B8EC9, 0xA2B369D8,
+0x2682EC61, 0x91B20626, 0x9DE5A7DF, 0x946B1CB8, 0xD0D6357A, 0x9EA6A2AF, 0xC2A94F92, 0xE9AFFA1D,
+0x3CA59108, 0x35753ADE, 0x7802DA0D, 0x4212BE47, 0x8FA0C3BA, 0xA196A3FD, 0x048717F0, 0x94BA34C7,
+0x0CDDDA35, 0xD113F4E8, 0x29822849, 0x8EE19B64, 0xB86053FD, 0x8BDD22EF, 0x43712A3D, 0xC3A8119A,
+0xCB0F5F31, 0xFE2A813A, 0x74989914, 0xA464F5FC, 0x86C46C05, 0x1D323D6E, 0x52301A99, 0x10CE0D15,
+0x4F79DB98, 0x912F1BD1, 0x5F002B37, 0x94828097, 0x05A0F74B, 0xFBE55396, 0x652BBD82, 0x9EE3650C,
+0xDCF4861A, 0x49114C6B, 0xC2491D96, 0x61F53D9F, 0x83CD32A6, 0x49BAE76B, 0xA246EDFD, 0x76CD71AA,
+0x3DB53798, 0x94C89487, 0x6C6E8EDC, 0xA7B18851, 0x730E33DD, 0x6E12ACD2, 0x6A3F7A5E, 0xDAC959AC,
+0x8303095F, 0x128ED70C, 0x35DF9BB8, 0xA7789403, 0x3C0378D2, 0xFF20510E, 0x62DFE51E, 0xFCCCAB2B,
+0xD3A92492, 0xD3FC0596, 0x2A18AEFB, 0xD00C785C, 0x4E90996C, 0x230A0AA7, 0xCA38B59D, 0x293E8B23,
+0x4F7787AE, 0x6E5FB200, 0x3F580C5A, 0xBADF9E8A, 0x086B89F6, 0x4618CABE, 0x8D616559, 0xC22A0F68,
+0x6FEB17A7, 0x39BFEC4B, 0x870F2A6A, 0x3ADBD66E, 0xB30E5112, 0x7261ECBC, 0x479E19B2, 0x433CFA06,
+0xAB8D1432, 0xF78F9D54, 0x066687EE, 0x07902053, 0x671A7EF1, 0x158A9BD2, 0x8C600D8D, 0x51A04487,
+0x02852097, 0x805A8DB7, 0xA9245C84, 0xF7078862, 0x0FC0D102, 0xC6391FE8, 0xD116EF5C, 0x2DAB183C,
+0xD29AA967, 0xEC96B649, 0xEA7E5BA4, 0x7EEC21B0, 0x0960D758, 0x66D501B5, 0x718E00C1, 0x7C141634,
+0x133E1894, 0x71FFA5E5, 0xC5B97AF2, 0x068F6FE4, 0x3E1AE6AA, 0x86647227, 0x752723BD, 0x13C01974,
+0x9681F840, 0x6A9C529F, 0xDF819572, 0x9D9D588F, 0xE98B1AF6, 0x7E58BC49, 0xFBC0C2F3, 0x3EA027F3,
+0x905FE59F, 0x98FE118A, 0x57EEA2B6, 0xAE5E598C, 0x28EE873A, 0x40E8B830, 0x6F38844E, 0x27584781,
+0x8AA9385B, 0x593E1B65, 0xB694B5BE, 0x2633E083, 0x3B5D05A8, 0xC544038A, 0xF4277CAF, 0x10063DD8,
+0x329663F1, 0x92DB1B3D, 0x8D847AB4, 0x4D01C864, 0x26C695F3, 0x1577E2AA, 0xDB911A67, 0xE56C0F67,
+0x1D8BB0A8, 0x7FDE0F8B, 0xFD352DFC, 0x097942BE, 0x47E5948C, 0x287FF721, 0x6C398175, 0x1C87E8A2,
+0x5997F8B2, 0xD64CC96B, 0xAF42025E, 0x35804B65, 0x54D31628, 0x0FF13872, 0x119329E8, 0x3142F071,
+0x04381593, 0xD6C2C03B, 0xF17DD033, 0x8F580203, 0x7872A033, 0xDF1E84AA, 0x980FABD8, 0x7CF64BAE,
+0x14D09582, 0x271C8FA9, 0x3DEC35A9, 0x094AC5BD, 0xBA4E7205, 0xDEF2E28E, 0xD2F91B55, 0xCFA7323E,
+0x2BBD8C1D, 0x9289C889, 0x58641710, 0x2F7940CA, 0x436E45C2, 0xD48752E1, 0xDF794003, 0x0CAAF1E1,
+0xBC4BF5C7, 0x2BA20E50, 0x041787E9, 0x7D072C35, 0x6221CF24, 0x0E06C8B0, 0x90F49643, 0xC0978D81,
+0x4EAC3DB4, 0xDCE2E8AA, 0xE3D3E047, 0x8E2DFC3F, 0xCB28788D, 0x5225A207, 0xD4844199, 0xF727A852,
+0xFE6AD071, 0xFE9B4E28, 0x81DCD9A8, 0x2ADFA9F2, 0x47E85E9D, 0x32D6018A, 0x5F71E52D, 0x1D493A4C,
+0x5065BD1E, 0x46047F4E, 0x7B6C7373, 0xCC6E2673, 0x1BA15E95, 0x7BE637FC, 0x08978E84, 0x11A23352,
+0x889C446F, 0xB08E227F, 0x35726485, 0xF88DD7ED, 0xB6EEA4BA, 0x43822102, 0x4AB0FA13, 0x9B68426D,
+0xD1776975, 0x6FC06168, 0x649D0C19, 0x8A0B8773, 0x735A3881, 0xCB1CA2E7, 0x8C9BE4BB, 0xE3D42E95,
+0x0628B8C6, 0x823932E5, 0xC4F6EDB3, 0xBB65F9C1, 0x53CA68BF, 0xDBF2F7B7, 0xD198C8D0, 0xF5629A73,
+0x4855D8FB, 0x478F0F17, 0xACABC351, 0xF1B4E144, 0x899CD43C, 0x8474F9CC, 0x45CB1672, 0xE90BDA39,
+0xA32E884C, 0xDCAC099F, 0xBE85B1A4, 0xA68E7775, 0xA0D9BDCB, 0x3C4E521A, 0x4816A088, 0xCC55837B,
+0x71F88709, 0x2527A398, 0x5359B28B, 0xBB4A7BCA, 0xCE70C29B, 0x3E2FD3D0, 0xEE344A67, 0xC76A49A8,
+0x66A3D3A3, 0x8312A42B, 0x7C024536, 0xC28BE601, 0x2FFA7513, 0xAFE8793C, 0xC65F9FB0, 0x0152A307,
+0xEDB90DEB, 0x025621E8, 0x7589CAB7, 0xA054DB95, 0x2657FB2F, 0xB4D84261, 0x16C901BE, 0x49E0E776,
+0xB7AB0FC6, 0x4EF68C9D, 0x22452D46, 0xE5BD27E1, 0x789C2FA2, 0xA4376C93, 0xAB097DE1, 0x2D8D8A2D,
+0x27246E78, 0x07E95A16, 0x7E91D74A, 0xCE556BA7, 0xA695585F, 0xFEA54B93, 0x3E282375, 0x9797FCDA,
+0xCCAA6230, 0xE1C3CB8D, 0xD30B2309, 0xDAEC3C0F, 0xBDB8517E, 0x08AAD2EE, 0xC3A9E966, 0x133A5F1C,
+0xC9EDD346, 0x198A5253, 0x9DA1CEA0, 0x21B200A5, 0x34BD2873, 0xF695202D, 0xEC0638B8, 0x3EB23CD8,
+0xAAFDF7BB, 0x094BB481, 0xB60A0F72, 0x93972355, 0xE24ED828, 0x95A9D765, 0xFE598F67, 0x1835DCAA,
+0x5EEC2D73, 0x1B97A54A, 0xDC1B16E3, 0xF27DBFB1, 0x0D51EAFF, 0xAA146E87, 0x21F2ED44, 0x1B7085BB,
+0x8CD33974, 0x0AB82E30, 0x36F786A6, 0x5E8CF2E4, 0x35E78230, 0xC9F4B192, 0xCD74DB8F, 0xF26E9766,
+0x0607E849, 0x6D65AAEC, 0x8C6D7656, 0x07EFF093, 0xA2FD3479, 0x12FDA3B8, 0xC0DF4A33, 0xF43E871C,
+0xD9C1FC48, 0xBA264127, 0xD3D5CCF2, 0x7720FD35, 0x5E6AE991, 0x0275975E, 0x59E498F9, 0x13147F3E,
+0x57B75629, 0x89739DD9, 0x03271D85, 0xBBE74BD4, 0x76D7219E, 0x7AD9A056, 0xE33196AA, 0xF0C3F92F,
+0xF98AD7D1, 0x7695D2FA, 0x072BB938, 0x53FB24C3, 0xF97526E3, 0x35326DCD, 0x6761886E, 0x55FB32C6,
+0x11AFC6F4, 0x24126703, 0x1B2ED4BC, 0x8D13C28D, 0xA72E89EA, 0xFF4BE745, 0xC41D4BDB, 0xA424321A,
+0xA7AB9612, 0xD936C961, 0x6E06326F, 0x8AEAD33A, 0x08D15422, 0x9380A6EE, 0x80808F7A, 0xCAA57D8E,
+0xADE57F3C, 0x84884492, 0x579D66A1, 0x6894237C, 0x6702A15A, 0x7054FFF7, 0x53976432, 0x6B34A772,
+0x31C7BAEB, 0x8D6D4ED0, 0x0D931C33, 0x1A444D1E, 0x46DED36F, 0x7079E7CE, 0xEEC2335E, 0x56FC39F1,
+0x5B80E529, 0xC6427F2C, 0xCE00DF85, 0x08E9AFE7, 0xCC5C98D8, 0xF9E6005C, 0x61982DF6, 0xDC223538,
+0xD2D6DEB6, 0x325DE76C, 0x05602E65, 0xB863C02E, 0xF2E5AE4C, 0x784B45E2, 0x878235BB, 0xE10E8C90,
+0x2903A7E7, 0x3FEE9958, 0x60720324, 0x9443CA3B, 0xEC26646E, 0x76E8BA9E, 0x09674982, 0x5B0D6C67,
+0xE755E27C, 0x0616578D, 0xDC4C0BCD, 0xEF3CE14D, 0xEB39AA89, 0x57A6DC95, 0x17055A2C, 0xCC75BB61,
+0xC0E7DA69, 0x0B3E7A80, 0x6CD7F9C6, 0xB0E9D916, 0xF6D1018F, 0x68936B4B, 0xD7DFE656, 0x4CB638FB,
+0x5FE8D845, 0x3E18D7D0, 0x66F49D69, 0xC00B0336, 0x15B08753, 0x86F79AC1, 0x4DDF5E75, 0x65910D7B,
+0x2C15835E, 0x83E32CD3, 0xF88322BC, 0x5CBD2E3F, 0xA0063767, 0x0B6B64B3, 0xEB8043F7, 0xF44AEB45,
+0x97E9F38F, 0x4DE40032, 0xB2AF75B8, 0x16819D6B, 0x96CCDF2F, 0xFE66F73D, 0x10911C6B, 0xAEAA0026,
+0xAED530A2, 0x6A2227B4, 0x071AED32, 0xCA08F5D6, 0x9A3BECBB, 0x1FDE422F, 0xF7554E2B, 0xA14F5301,
+0xBCCAEAC9, 0xC75B5837, 0xFD1BDAF3, 0xB51D0D85, 0x567D6961, 0x13F240B4, 0xA11997F9, 0x1FABAF69,
+0x4852D097, 0xF024A7AF, 0xBE3C1EF8, 0xD25C4126, 0xFDB40A7A, 0xA783FA9A, 0xA488B3BC, 0x41F3FB3C,
+0x47798859, 0xF00E68A0, 0x43819930, 0x227D6CB8, 0x354CA9EE, 0xEECD99BF, 0x68207B50, 0x10096B9F,
+0xEAC16886, 0x45636038, 0xB686C426, 0x97EDF7E6, 0x6A70EF59, 0x2BDE1EE7, 0xC8EA690F, 0xB1D5B919,
+0xA4B5FE23, 0xE2A8F448, 0x1C845AD3, 0x72DFE60E, 0xEA184454, 0xF01010D9, 0x1A9D1F00, 0x5DF4EF6B,
+0x7E921620, 0x899EFE53, 0x79154C54, 0x32E8FAD8, 0x247D9405, 0xCA638734, 0xA4A7F00C, 0xA73B9607,
+0xC35D2828, 0xE5967A67, 0x74D4688F, 0x0B62719B, 0x9FEA547F, 0x629542B0, 0xF52963A4, 0xB67CC263,
+0xD55F45E9, 0x5B20D41A, 0xF34E63F9, 0x89170001, 0x83D5E334, 0x9656FA76, 0xE478EF19, 0x7B84998C,
+0x3B39663F, 0x101B80E4, 0x4D22AFE7, 0x6E6F3FB6, 0x19E5E0B1, 0x511B1EE0, 0x9CA407E3, 0xF8B0A979,
+0x12ECC697, 0xCCC69BAE, 0xFAB91A3F, 0xF63E13CA, 0xB871E007, 0xD63CA85D, 0xC880C1BF, 0xE5E19DCB,
+0x0551A17F, 0xC29E28D1, 0xF526C48C, 0x5DBC7134, 0x762C6809, 0x107EC32A, 0x4D69CA96, 0x144FE42D,
+0xEBBB04F5, 0xFC9CE28C, 0xF46F7AA9, 0xA3B7C18F, 0x78C8E708, 0x604969DF, 0x94186A6F, 0xC99272B0,
+0xC9123AAD, 0x798857F2, 0x146D722D, 0xD35D515B, 0xD1F046CF, 0x109E5E79, 0xC8059CD2, 0x0009672B,
+0x66381C21, 0xE45FF363, 0xC0A52A31, 0x640DD517, 0x31558813, 0xEBF7AF88, 0x5FEDA5D3, 0xD7D2D61A,
+0x07D75AAC, 0x45789EE4, 0x2707CF06, 0x4726C4A1, 0x7CB2B1BE, 0x7DCA2A3C, 0xD425C223, 0x15FF65FF,
+0x958C008E, 0x1C9489D8, 0x0E16E59D, 0xD94EFCB2, 0x36D0319B, 0x99A108C0, 0x93594F8A, 0x7756AD2B,
+0xEA21D92E, 0x1A3194C5, 0xCDA87AD5, 0xD2BD977B, 0x63FF1CDA, 0xB42B04C6, 0xE38B13E7, 0x110E96D6,
+0x6C250B03, 0x869FC357, 0xBA7D01C8, 0x28987AE2, 0x9A6E9F55, 0x62442ABC, 0xD3B9107E, 0x4801D4FA,
+0xC9E4EF8C, 0x70735BE4, 0x53FA1DC8, 0x36706CAE, 0xC08AB8E5, 0x727E2BF8, 0xCD514FCE, 0x657ABDF6,
+0x26721EF8, 0xD0BEADBD, 0xC9D81927, 0xCF05280E, 0xC4A47A3F, 0x8C3BCB23, 0x5D9BA72B, 0x7DD8EA02,
+0x0D18B396, 0x448A7F5D, 0xDFC12288, 0xC81E6659, 0x6FC24337, 0x8E7401A8, 0xB0F053DF, 0x1CC5F22A,
+0x55E1F7D2, 0x4A185673, 0xC7D9B2F8, 0x449E0CB5, 0x22D22DFB, 0x1E720E24, 0x954CF3AD, 0x862FDCC2,
+0xD3B2A949, 0x24F6A218, 0xD805E581, 0x767FAB52, 0x69491CE3, 0x1CC3FCAA, 0x0DA73284, 0xD6F92B89,
+0xF55BBAD8, 0x4E4899ED, 0xF4ACEC82, 0x265D6B18, 0xDBAEA62B, 0x420BF91E, 0x82F0752E, 0xFED6C16F,
+0x6D08148F, 0xABAF92C7, 0x4AB5EA24, 0xE23E5FDF, 0xE85FBFB2, 0x5F1C64ED, 0x8C0888EA, 0xF0E55607,
+0xFDD10F70, 0x3AB4FB1C, 0xAB563F9C, 0x2361B192, 0x10EE7134, 0x490EEB05, 0x58C01038, 0x57CF38C2,
+0x0C6FA86E, 0x51D1CC21, 0xF23D04E1, 0xC5CC5B79, 0xB54DD001, 0xB6468B0E, 0x5B1D67EC, 0x446AFF98,
+0xDC3EC785, 0x46E370EA, 0x879C0D2B, 0x2071C143, 0x3A4C7848, 0x029E6E92, 0x977C6D1C, 0xAA86531F,
+0x8D2990B1, 0x085778AD, 0xE31D90C4, 0xFF27205F, 0xB5051AC5, 0xB1D8680C, 0xE9E3594C, 0x5E9977FB,
+0x07234810, 0x071D5383, 0x8374CE3B, 0x02658425, 0xB337A5C7, 0x8B3D52FA, 0x823D5257, 0x34F79844,
+0xDF1FC965, 0x62C8213A, 0xA7DFB11F, 0xE9AD493E, 0xDB5B14FE, 0x1884ABC8, 0xDAD3B931, 0x23807890,
+0x2AFB8947, 0xACE556CC, 0x84560C6A, 0x9B103FFE, 0x35EA0ECC, 0xC46F0DFC, 0xDDD1B043, 0xA6E5EEB3,
+0xEEA73FDD, 0x5ED00404, 0xEF1A294C, 0xB5618A0F, 0x8B459BC5, 0x0D3584C2, 0xFF69BD41, 0x00072808,
+0xAAEB8015, 0xA2B1FE6B, 0x78B3DC7B, 0x4D1B3984, 0xD072F054, 0x735BC178, 0x11F0ED8F, 0x6AADFE11,
+0x54AF3EE7, 0xEF662288, 0x38B51A33, 0xF7959EE3, 0x2EEA0E14, 0xF4F9A177, 0xF7E80F9A, 0x898A52DF,
+0x42845664, 0xB396D7B5, 0xCBFE8362, 0x44E3672C, 0xF750193A, 0x2AD83E09, 0xC0DD0233, 0x69046204,
+0x03A22364, 0xB4BCB7F6, 0x50AE94E7, 0xEDE655A8, 0xA0EB7644, 0x7A4C0FB0, 0x7A66BE61, 0xA0BB6451,
+0xF4F2B007, 0xAC5369BA, 0xD178B2C4, 0xD247C69E, 0xD33B58D1, 0x59C0697F, 0x3FD32DD5, 0xFE1D93B1,
+0xE0F7E7A7, 0x8E9C5CC3, 0xB6C6D2D8, 0x34CB98B6, 0x55FC9D46, 0x0B8967C3, 0xF4BEA9C1, 0xEF47168C,
+0x65E9501D, 0xCEBEA097, 0xE401DAF6, 0x02BC404F, 0x54D24BDF, 0xBA695027, 0xC3B1E5DD, 0xA0031A4C,
+0x1970CA0B, 0x4A695E64, 0xCADFFE84, 0x5B4221AD, 0x2C586028, 0x202CA200, 0x1F89A113, 0x981042D0,
+0xB408815C, 0x3EF3F88B, 0xB60E543E, 0x65828493, 0x4E609042, 0xBF584BFD, 0xCF9DF3FC, 0x285D106A,
+0x79051F14, 0x8ADC62A6, 0x19421F09, 0x6DC3400F, 0x0FFF91F3, 0x6ADFD28A, 0xC9094B67, 0x8EFF6541,
+0x24F9161E, 0x0D2EEB4B, 0x56E6ADBC, 0xAAAECE6D, 0x97454E20, 0xBCBB33AB, 0x1D322FD3, 0x7E69496E,
+0xEC0FA690, 0x433A1CD7, 0xAEA95853, 0xD134D57B, 0x28A0A8D5, 0xC1196887, 0x0B5A862D, 0x8493C50A,
+0xF63670DC, 0x6A5166D6, 0x8B8B661B, 0x9D7DB3EC, 0xD164D407, 0xC06D5C30, 0xB7E06D24, 0x3E3C46EE,
+0xCBCE9C9A, 0x1AF6CC7E, 0xE4230059, 0x832F9635, 0x1C0A5E58, 0x68356F2C, 0x27F3CA73, 0xCA56D82A,
+0x7A6FE895, 0x9175A634, 0xBA82625F, 0x1C470B52, 0x33C4A692, 0xEE83D457, 0xB62CA72B, 0xA525E9B5,
+0xCBDD324A, 0xF29E2775, 0x99DBBBCF, 0xF415E3A5, 0x186ACD78, 0x2EDEA341, 0xEC6B188B, 0x46E70A5E,
+0x420F3045, 0x8B9E93C9, 0xD609BCD7, 0xA36D47F6, 0xEE301517, 0x71A7369C, 0x689C8A35, 0x3613A7E2,
+0x26DE7B00, 0xD9618DB2, 0x7E637B4F, 0x6732D54D, 0x4410B542, 0xA7C625D6, 0xABCA00BC, 0x0CF604B3,
+0xDE0B9D6E, 0xEF761B73, 0xDC8D94BE, 0x64D4A943, 0xA0BB6BFD, 0x2A504F5F, 0xCBD5D4F5, 0x42FAA763,
+0xC3F9C57C, 0x77F14670, 0x0332B65A, 0xB9BFDA5A, 0x8855630A, 0x9B8BB0F6, 0x870F9980, 0xE44F5D78,
+0xEAE8E50B, 0xBCF974BF, 0xD5512A5B, 0x1119C956, 0xAD03D914, 0x9109FFDE, 0xA94DE145, 0x256CEB13,
+0x26C6B060, 0x96247EC9, 0x38DAA7F2, 0x1C9A6454, 0x0124130B, 0xB0D3FB40, 0xCD30E7BC, 0x7FDA2D99,
+0xECCAE34F, 0x600F967B, 0x85462BBF, 0xA9343641, 0x12B7582F, 0xA87940F9, 0x2216B6F2, 0x021A38DB,
+0x2A750E86, 0x31223A3C, 0xCB0FD1F2, 0x41158F20, 0x260C3B53, 0x062A03E6, 0x713C6044, 0x018AA426,
+0x0A17B103, 0x68CBDE65, 0x72173B35, 0xCB75FF5A, 0x36239C0F, 0x8EE1E823, 0xEA390AEF, 0xAB0208BB,
+0xD9038EA7, 0x394B5706, 0x9356377D, 0x3250BE5D, 0xD09DA9D7, 0x6BB70833, 0xD13F6BD2, 0x0590F536,
+0xC700B303, 0x56CFD609, 0xAF522074, 0x756A3395, 0xBE2DB9A3, 0x7402A47D, 0x11439AF0, 0x74610783,
+0xA1670A5E, 0xAEF44211, 0x3CC17E51, 0xEFBCC352, 0xC7011F9A, 0x52B2E070, 0x6DD1E3D4, 0x8BD1EF9A,
+0xED91B4C8, 0x4E672BC4, 0x6BBF5C05, 0x2B83ABDE, 0x822D8BC4, 0x27358A29, 0x6072799B, 0xD21BB64A,
+0x70ACDFC0, 0xDCB206C3, 0x6F57CC50, 0xDF3CACC3, 0xC2EFCDC5, 0x0A4E600C, 0xF50BE5B4, 0x3EBC6165,
+0xAC5D5695, 0xAA36163E, 0x30910E52, 0x886A5F47, 0xA0A9DE4E, 0x6A8E06BA, 0x41996AE3, 0x12FED84E,
+0xC3176D47, 0xC21F5EDF, 0xD7DDC6B0, 0x825AADCD, 0x78C3B52A, 0xA174B0BF, 0x66DE1AF2, 0x94B3688E,
+0xF2CB7292, 0x00895BDE, 0xA076458F, 0x10DC57A7, 0x69F9D799, 0x652C7E49, 0xF24E3D8A, 0xB04E6703,
+0xAFC89CB4, 0x1D80FC36, 0x5930B067, 0xFD70D046, 0x0C12D7F6, 0xD028ADB7, 0x9CF6E35F, 0xD33625DE,
+0xCA00EBEB, 0xB50ECE4D, 0xFC78BA47, 0x84D923DE, 0x7776365F, 0x22904970, 0xEA68601D, 0x64EC81A9,
+0x495802BD, 0x6C456ED2, 0x29C49D8B, 0x332DB2C2, 0x62D30E11, 0x7FA7F605, 0x21635285, 0xD2DB3C8C,
+0xC0C05AC3, 0x9224DB97, 0xF083E30E, 0x1CB11373, 0x45E3229F, 0x030497A8, 0x88CE5FD1, 0xA10291CF,
+0x7CB9F3D3, 0xC3044295, 0x3E6A1D81, 0x93C58632, 0x53022E85, 0xF424B722, 0x8FBD4A05, 0x3191BD14,
+0xCF8C5337, 0x1BF56FBC, 0x862556A4, 0x487177A0, 0x5B771A18, 0x5B4C0C9A, 0xC1D82DD5, 0x428C5EB6,
+0x1EFC4099, 0x97751E5D, 0x7EAD4394, 0x241876ED, 0x4E4FC13F, 0x72C91FC8, 0x8365434B, 0x1A13E19D,
+0x112B7207, 0xF628C4DC, 0x33B61149, 0x53A85A40, 0x1FA51D9A, 0x1703708C, 0x18F7D8B1, 0xC082DA58,
+0xEA658097, 0xDF47F734, 0x09013F7D, 0x212456D1, 0xB9FE2D0B, 0x931356BC, 0x686058E4, 0x9C7F6E6F,
+0x0801495F, 0xD88D5C1C, 0x1124F7C4, 0x367A61C5, 0xC1B7FD94, 0xDAA84FFB, 0x1473F174, 0xA40D618A,
+0x1598EA05, 0xFFD1AFE0, 0x9CD01D4B, 0x19F3104D, 0x916D3F25, 0x1339203E, 0xD241549B, 0x63CA9350,
+0x69B7F2F9, 0xEC5BE3EE, 0xB0E97069, 0xB101D561, 0x53C3CC95, 0x41E2136C, 0x75CEBF8B, 0x094474FA,
+0x25D5AF92, 0xACCD8389, 0xBC37D06B, 0xD9190E66, 0x95B66C45, 0xD1BC7183, 0xF34E05C3, 0xE1B97925,
+0xDD0696E2, 0xA804181E, 0xA387B704, 0x811862DA, 0xCB08E67D, 0xDE684329, 0x37AF0D0D, 0x3DAD6309,
+0x16F78DAA, 0xD6622F21, 0x0D099A80, 0x6D5504D3, 0x904F1385, 0x7D9CD9F8, 0xB54812BF, 0x067E399B,
+0x44D535D3, 0x6A3FA7C5, 0xECF8B694, 0xEAC1FF44, 0x2B184E53, 0x6A49C85B, 0x55947787, 0x4567D02C,
+0xDB58B0CB, 0x8E615984, 0xE5AF8FEF, 0x79942F52, 0xF40BCAAD, 0x3DE37C8C, 0x78A5D409, 0x711642BB,
+0x35A4EF56, 0xF6C9A9CA, 0xFEAA7F23, 0x58D51B84, 0x92579DFA, 0xB5A195F2, 0xCD3D20E4, 0x6183BE2D,
+0x92ED900E, 0xF299ECC9, 0x0171F050, 0x643F9CEB, 0x6729582E, 0x80CE4768, 0x42446F84, 0x4C1FD1DC,
+0x91DA55C0, 0x2B46A71C, 0x630728B4, 0xA52A2266, 0xDA03DF7F, 0xFD5DC38B, 0x06383DAD, 0xA7EF94C6,
+0x0470EE07, 0x05B95048, 0x518DEA55, 0x7BEDC97F, 0xD68C582F, 0xAF1FFBAF, 0x025D629B, 0xAC423B3B,
+0xFE03CC46, 0xCB3A9F8B, 0xE8109815, 0x94DC1412, 0xEDFD3124, 0xD261A9B9, 0x43E56003, 0xBAD36DB5,
+0xD763D69B, 0x232068DA, 0x1FB60A46, 0x565A00AB, 0x930A1A6C, 0xAAC8A49D, 0x116F7034, 0xCDFCD9E8,
+0x53A1E35A, 0xE7F4BBAB, 0x091C99C4, 0x297CE572, 0x8A6C7276, 0xA8103E4D, 0xDA49B59B, 0xA5FBB1BE,
+0x88078638, 0x2A2244B9, 0x6D06476C, 0xB53636D1, 0x71B001CA, 0xB68F25A0, 0xA87AAE50, 0x0F735BC3,
+0x14C0F3B7, 0x6850B9D0, 0xF80EDE7E, 0x7B779E95, 0x5331DFFF, 0x1A48F52B, 0x6B75B80E, 0x1709C76D,
+0x78FF3531, 0x0A457E6A, 0x1E5F4951, 0xDC538674, 0xD5C4F20F, 0x48D97C2B, 0xAEAEE8D9, 0xB5947402,
+0x9ABC685B, 0xD01AB465, 0x8835AF98, 0xD9F0FB22, 0xA68F3D2C, 0xCD95939E, 0xA87DB5CC, 0x3C7407E8,
+0x280FA0F8, 0x76AA2574, 0x8E8DF71C, 0x791AFCA2, 0x65FA3BDC, 0x2F4B56B3, 0x926F864A, 0x21DC16C2,
+0x574D92C0, 0x90F3D100, 0xD042ADE4, 0x5D525DDA, 0x1411C557, 0xA6E42FAC, 0xDC37B7C6, 0xAD75A2BC,
+0x9AA8A5A7, 0x4013EA8E, 0xFBCCE335, 0xF0B24EC1, 0xF7F09432, 0xD21CBF58, 0xC78FF032, 0x390FA129,
+0xCABA11C1, 0x339D261A, 0x8F046D3F, 0xD1F503F4, 0xA87EEA41, 0x70297564, 0xCE59F016, 0x83825A66,
+0x77E31FE1, 0x971D7175, 0xCD01FA88, 0x24E70AC8, 0x953EEB55, 0xC9200762, 0xA0739CDF, 0x25FBC23F,
+0x4EA6D0F4, 0xA4DF7683, 0xDAFD3479, 0x7D5D2110, 0x20FE0B34, 0x5F877513, 0xDF5E20CA, 0xF52B2753,
+0x591816C9, 0x385E9006, 0x45F8EF58, 0x46B7DFB3, 0x1F75F9DB, 0x8A1FE36B, 0x497BC4C7, 0x360A3E5E,
+0xF2EDE339, 0x3B761322, 0xE4788227, 0x3BC6F8E2, 0x1F42C60C, 0x81AF5E51, 0xAB9F9818, 0xD3585B56,
+0xE1724ACB, 0x39D61AAB, 0x00EA5B1D, 0x304A93B4, 0x7ED32261, 0x721A4803, 0x713C0D94, 0x4302A8BF,
+0xD034F87A, 0x4CA28D9C, 0xEE1AB55A, 0x25FFE4BC, 0x8107BEBD, 0x74034C02, 0x28A9FD16, 0x537B13CB,
+0x40AEC378, 0x80C0FB68, 0x8B3270CB, 0x5A857B2C, 0xF978D2C2, 0x7DAAF00A, 0x1478962D, 0x7B11E36F,
+0x1D67BBCB, 0xC04A9439, 0x32BC2090, 0x138D0F41, 0x2D9A8196, 0x1D6CD593, 0x24947DCD, 0xAED0E737,
+0x5E90A3A9, 0x29DDDF82, 0x3DFA08B3, 0x625A724A, 0x110E8F28, 0x55CAACF1, 0xB223E9E6, 0x155A06AA,
+0xE252E25D, 0x9DE91399, 0x20E93845, 0x3A29D887, 0x0B565D7B, 0x11586AE8, 0x3C8B656C, 0xAA6938CB,
+0xB5689467, 0x1FFBA440, 0x8B2EA4BA, 0xCAF468FD, 0xB72B5A27, 0x81ABBAD4, 0xC91350BE, 0xB245A4F9,
+0x072947D7, 0xFA2D4FAD, 0x9211C114, 0x815ED6B4, 0xB7A6F6BB, 0xD0D31B4E, 0xDB8A4F84, 0x819F421B,
+0x8B0E0C1B, 0x85231A03, 0x7D4E104A, 0x93CF8A74, 0x0A62BF7B, 0xB95F5B96, 0x2491423F, 0x9B4EC076,
+0xEF31E1C2, 0x88D968F8, 0xCE9782F7, 0x2B362DDE, 0x3BCBB81F, 0x8284DF56, 0x65BA6E6B, 0x0A9EEBCF,
+0xB0984102, 0x34A93950, 0x2A371E49, 0x83BC7AAB, 0xEAA69C52, 0xAA92EE2F, 0xE872590E, 0xC97E91DD,
+0xD956202B, 0x11B8F3CA, 0x8B765395, 0x1B255E2D, 0x7DF7E2E4, 0xEC5B18B2, 0xF59497D7, 0xADD67250,
+0xB34EC926, 0x9BD617EF, 0x06BD96A1, 0xCD4EE899, 0xDC481836, 0xC2FDAECD, 0x81C4C11F, 0x86F82F66,
+0x455D0777, 0x36C5FAB9, 0xAF70570E, 0x8990CAA3, 0x1E04C740, 0x3F8B7202, 0x83F8E32D, 0xD38CB528,
+0x36473447, 0x5C1431BD, 0x000D3172, 0x2C04005E, 0x5FD21444, 0x46A03F64, 0x70F7FAA9, 0xE8918076,
+0x0540D3D7, 0x5213F207, 0xF762354B, 0x4B71D2F6, 0x47D324C2, 0x35D02EE2, 0xF67A2E2A, 0x597E2714,
+0x2698F844, 0x7A7545A3, 0x52178814, 0x777379F1, 0xB047D17E, 0x7C0F5471, 0x16B56124, 0x3D711873,
+0xCFAB932B, 0xBC610747, 0x90393816, 0xE6AFC301, 0x64FC04F7, 0xEC5CCB5C, 0x9AC0F027, 0xE7D1F49E,
+0xD34B8963, 0x0362F269, 0x0C733978, 0x2C7BE554, 0x596FB15F, 0x3B7752EA, 0x70428D84, 0x14EAF5F3,
+0x8D6400AC, 0x2DAB6101, 0x410C0305, 0x3E223C07, 0x3A98AF2F, 0xEF112DFB, 0x90DA342D, 0xD789F152,
+0xC5D78455, 0xE668C32A, 0xFD26652B, 0x2D0852F5, 0x10441ACD, 0x70F7F3FE, 0xCE09F4CF, 0xA38B7EC3,
+0x8F964686, 0xA55852A9, 0x129A204D, 0x6B7FD6D0, 0xE8C62ACE, 0x596811B2, 0x277116DA, 0xE8917394,
+0xE9EBE51E, 0x63A75B95, 0x2A094022, 0x479FCE9E, 0xA6D0EECD, 0x96B2CCDF, 0x765C2A19, 0x29D9D52B,
+0xADEFA175, 0x579CBA27, 0x918B258B, 0xCFA93F99, 0x2699E044, 0x74B37A02, 0xEF777565, 0xE33144AF,
+0xB860D3BA, 0xB540DBDA, 0xB4857A92, 0xA795E506, 0x46B8AE9B, 0xC1A919FE, 0x2E39E227, 0x341D0B13,
+0x6B03084D, 0xD665ED6B, 0x813CEF99, 0x3D786BD7, 0xEDF7434B, 0x6899FF1F, 0x2B6F1E45, 0x0AB2524B,
+0x3A8356FC, 0x3623E4E7, 0x34C92464, 0xCB54F487, 0x74BC75C4, 0x45EE5745, 0xA3B1909B, 0x1F9CABB3,
+0x9C593646, 0xAC348EE1, 0x7226BE6D, 0xB490A17C, 0x9373D2A8, 0x2A6599F6, 0x1093781F, 0x5DD0574C,
+0xC47477A4, 0x01A06DAB, 0x1E343788, 0x5BB900B5, 0xCD8E3651, 0xCF920C88, 0xEBB7C979, 0x567200B1,
+0x631EB852, 0xBCECD05A, 0x5483BFDB, 0x76EC31A7, 0xB22B91C9, 0x18897915, 0x208B6625, 0xB2482C03,
+0x53C2FFD9, 0x162D140A, 0x42A60D62, 0xF1554C72, 0x59544C7A, 0x8A3720A8, 0x3921A49A, 0xFCDFB87A,
+0x4B9E2075, 0x3BCCF6A1, 0xC380A282, 0xDE1E804E, 0xEC6909C5, 0x72F80C48, 0x0CEEACD7, 0x30D22A33,
+0xCA5F95B6, 0xD1F29E98, 0x22AA69EC, 0x508DE016, 0x58E6EFCE, 0xC17723D0, 0x1228AC9E, 0xB0A64D0C,
+0xF85DB93B, 0x8F95B133, 0x375D4692, 0x00F047CE, 0x332E18B1, 0x25F19F3B, 0xF67F49DE, 0x324A3515,
+0x63290123, 0x5278A22F, 0x55AA0E4C, 0x0C1D8889, 0xC8579B92, 0x5E1D9AFF, 0x8D1F9540, 0xFB676F49,
+0xC5AAF7A9, 0xCA1A8D2E, 0xFB48FF2D, 0x653D0C73, 0x8BBD52C1, 0x25D23B90, 0x6C4F505B, 0x14B28217,
+0x74394AB2, 0xA453C799, 0x4808F346, 0x68FCF9CD, 0x68DF3BAB, 0xD8D43143, 0xD5E82B6A, 0x18BAB0B4,
+0x1A2E8C73, 0xD72800F4, 0x1480D800, 0xDBD822A8, 0x35BFCEDD, 0xCC631970, 0x26B76E31, 0x6514B917,
+0xA70AAB5A, 0xB9DDE68E, 0x197FF865, 0x98542D5D, 0x858E95C4, 0xE8979488, 0x7BD90938, 0x5D29D45C,
+0xEE933EB0, 0x7582FFA8, 0x325FE3F2, 0xB8853334, 0x78BA1FF6, 0x0D986CC8, 0xFB94E324, 0x9555E31C,
+0xC553B021, 0x31FB7A43, 0xB52DAE56, 0xA6C2D62E, 0x3B5C3AF0, 0x3CA39EB1, 0xCCD2555D, 0xAA3A3512,
+0xA21BB280, 0x100AF56B, 0xC8532443, 0xFE2615AA, 0x8E655DA5, 0x98262D8B, 0x3AEB54C5, 0xEFA5DC74,
+0xF5E1594C, 0x21A8E3A4, 0xB4105DF2, 0x3F237BFF, 0xCA7C5B63, 0x05C8794B, 0x4602271E, 0x54BDB1EB,
+0xC7B19A51, 0xC004F0C7, 0x0C9A2585, 0x9A89B88A, 0x1618D942, 0x9CB94715, 0x07DABFF3, 0xFC9A3A14,
+0x35CDF303, 0x90338C65, 0x78BAC3EB, 0xCFD474C9, 0x6A552CF0, 0xFA112F45, 0x95D25004, 0x9646B6BA,
+0xEDCBB7AE, 0x698B6DC5, 0x7EDD8BC7, 0xA92D9255, 0xEAEA8A89, 0xEB2C05F8, 0x815AB3FC, 0xA265F7CD,
+0x236EF70E, 0x9BB2DEFE, 0xA771B1FD, 0x0DFBDD77, 0x7ECC3965, 0x95AAA906, 0x7DF2BDE4, 0xFE2553F4,
+0x5938E7B9, 0x8624D907, 0xD4FC907A, 0xB599B883, 0x41D063EC, 0x41E7DECF, 0xDE01B6F5, 0x2F7FF42D,
+0x62BA9157, 0xDC502A4D, 0xDCD4AEC2, 0x6B50B68E, 0x8D3BF027, 0xDFB385D0, 0xA0F54EE6, 0x3EEDB3A4,
+0xDDF21C63, 0x81C29D72, 0x99F8C648, 0xC043641F, 0x2D0E1FAF, 0xB72CB180, 0x7B815760, 0x9082B7E3,
+0x2F214D22, 0x9323F8EA, 0x0E10436C, 0x6C8DFE41, 0xBA87F6B7, 0x374E1D57, 0x48BAFE64, 0x16A6C44E,
+0xA6F7E6AC, 0xB2FF1C1E, 0x391F7975, 0x683184A9, 0xFA78F2CB, 0x7ED14207, 0xA7AE9EF0, 0x12CA3F7D,
+0x9783CE5C, 0x759A78F7, 0xCF29293A, 0x05AD1B2E, 0x6BF5A7D3, 0x8F42537A, 0xD924973B, 0x6AA8245E,
+0x28BDA411, 0x8D4047CF, 0x18F98A88, 0xE41FD38C, 0x7E0DDB5E, 0xB83F94C3, 0x0BAE0B90, 0x3DFEC35C,
+0xFED15FAC, 0x2D891E21, 0xAE76C19E, 0x759BAABB, 0x728E3406, 0xFA9ADE51, 0x30A82725, 0xD142A61C,
+0xD66E5404, 0x51DFECCA, 0xD63CFFAE, 0xB804FDC4, 0x3372F255, 0x43CDB684, 0x60D0CAEB, 0x120A595C,
+0xAD60237C, 0xF5460401, 0x47A32A10, 0x12D4CD26, 0xF5555FA3, 0x8FF9AB6C, 0x1F9DD8F4, 0x06ED06FC,
+0xFB0CE61D, 0xF67F9D06, 0x23DEA208, 0xB347EBC9, 0x85F20A2F, 0xB3693D44, 0x5A751EDC, 0xF1BD3F7B,
+0x9C74E633, 0x42E7ECF7, 0xBF01E590, 0x0D498C86, 0x991A5273, 0x12E72425, 0xDA362F6C, 0xE2E492A1,
+0x9F045882, 0x26BD9F7F, 0xFCC9B144, 0x2CE0A170, 0x4B1EE6E2, 0xA27ADEB5, 0x404E9066, 0xFAB15B2A,
+0xBADD7C09, 0x3ABFBE22, 0xB24F8C17, 0x7B2807D0, 0xC19EFC66, 0x82AF2D00, 0xAE26A16B, 0x004179E0,
+0x8ACD48A7, 0xE72D98E0, 0x6928F330, 0xDFE90F1A, 0x44F9A389, 0xFD6323DF, 0x3B7DDBDE, 0x991230E6,
+0xC2CF982F, 0x32B64EA9, 0x1BC2F2A2, 0x92B8FAF0, 0x8E8C0EC8, 0xD03A18FE, 0x861D67B6, 0x5B922F48,
+0x0A76B0E9, 0xB37E4642, 0x26F2AF7F, 0x27638CAB, 0x4DECB0AF, 0x5EF451B2, 0x60DA55F6, 0x3D18E83E,
+0x9477F5B9, 0x99D46E20, 0xA884D027, 0xD60721B3, 0xD4C361FA, 0xBDC2B64D, 0xC08AEE9D, 0xAE0261D7,
+0xB1841CED, 0xC166950A, 0x680B7B36, 0xA432E9E6, 0x86FCEEAE, 0xEE979362, 0xE4081703, 0xCB2F9D00,
+0x28415805, 0x025668E2, 0x4C4D3B05, 0xD4170B42, 0x49DBF6EB, 0xE4DE331E, 0x6B8412C5, 0x23EC52B9,
+0xAACEB01A, 0xCF27B968, 0xD7DF3BCE, 0x63FCF79B, 0x005775A1, 0x7701291A, 0x3E305D5E, 0x8E785A6C,
+0xCD82FEC8, 0x85704A74, 0xC57FFC20, 0x489AF53C, 0xE98C60DF, 0xDD3EDF87, 0x86204C28, 0x728E5AAA,
+0x4515DEF3, 0xBD599A6F, 0xDBE26004, 0xADD0E34B, 0x4340E9B3, 0xD463A01A, 0x63085936, 0x25F89747,
+0x87778CEC, 0x79253F43, 0xF9CB3184, 0x249F26B2, 0xD6176A9D, 0x43B32A35, 0x1677176C, 0xAE0C045D,
+0x122C6A2E, 0xC0D9F6AE, 0x640A4471, 0xFB690337, 0x56D2EA19, 0x6D6ECB9C, 0x838475E3, 0x6EA39D50,
+0x7B6F7AF3, 0x2A9435E2, 0x44225183, 0x2914CB62, 0xDDF7E9FC, 0x833CA00D, 0x8EB2E52B, 0x1F313F6C,
+0xCBD584F7, 0x754993AC, 0x26BAC8FD, 0x59FB4EFD, 0x9BAB0D3C, 0xE4B86708, 0xC38169FC, 0xEA949AA2,
+0x1864E728, 0x36671F5B, 0x73D6765D, 0xCB166875, 0xFD8F4E09, 0xFCCCBE6D, 0x43A1687A, 0xFFD6892F,
+0x0FE93E2A, 0x5C62D4EB, 0xA15C69DF, 0x507372A3, 0x6C56F388, 0xF0107D50, 0x9B8DD756, 0x65CFA559,
+0x1C284B5A, 0xFFF1891F, 0x7FEFD8B4, 0xBB08D26D, 0xCB5F6DEF, 0x473CB317, 0x8A2BFE19, 0x44B075FF,
+0xB6891D77, 0xB4E5E269, 0xD5FB217D, 0xDFE8C646, 0x14D83A40, 0xA1BEA298, 0xD1A849F8, 0xEEC33BB7,
+0x799D011A, 0x59265727, 0x3EF06C12, 0x225A5123, 0xA3DC9505, 0x9CDD91D9, 0xDF6FEE18, 0xC316DDE6,
+0xCBB28D32, 0x67B2B263, 0xFF1AB7E3, 0x7F053B5D, 0x4308E21E, 0xE6852931, 0x9C885742, 0x977D37BB,
+0xE45B8C39, 0xE6802165, 0xC4B04700, 0xA2990690, 0x1A2AF12D, 0xB18E257A, 0x2B232B51, 0x613C1262,
+0x1A531C49, 0xF951AB82, 0x983A1149, 0x044299DF, 0x9A2AD4CC, 0x520C5989, 0x19B319C7, 0xFF0BDAAA,
+0x41D9F004, 0x2DFCC0E4, 0x2998EF88, 0x25049623, 0xAD668F07, 0x04873C1B, 0x37EB1DD9, 0x30DC7669,
+0xCAB242C0, 0xF3B2EEFB, 0xE13D60ED, 0x8D6B5551, 0xE717A45D, 0x8E69A9C9, 0x00A89B2D, 0x099F0249,
+0x69800F11, 0xC513F42B, 0xB54D46C8, 0x07937899, 0x13683A57, 0x847034D5, 0xDCE9CE55, 0xA5CE37BA,
+0xBA6F40A3, 0x73F6C18D, 0x2139D2E3, 0x17ADB942, 0x0E77C2D5, 0x026130B3, 0x0E5C8F9F, 0x5694CD71,
+0xE1C64069, 0x58CF3C06, 0xB743290F, 0x97A9EFEF, 0xBC684C43, 0x53FC3616, 0x3398C4D2, 0xDE3B9045,
+0xF43BEACC, 0x2E8E97F9, 0x1FA00D39, 0x6F575310, 0x59A2A077, 0x553E002B, 0x01DB2379, 0xCE453047,
+0x5AF000D7, 0xE81ADAE6, 0x7635C6BF, 0x1CC3A052, 0xEE192B9D, 0xDB2B8DC0, 0xF8E27B3A, 0x114002DB,
+0x9146751B, 0x2A03E68C, 0x3AFD8344, 0x2243EE4E, 0xF7B1A301, 0x29DA8195, 0xACF4FA33, 0xC43904F4,
+0x5D6700C4, 0x66018B3B, 0x5FC85EA0, 0xAEBCD7B8, 0xEB65E5D6, 0x64CDC3D9, 0x09A355D8, 0x70A04801,
+0x10E7A090, 0x198942DA, 0x81A85918, 0x30E84FDF, 0x657F7AE7, 0xA7FC58E3, 0xE6102506, 0xB6C5E4ED,
+0xAF1ABB7C, 0x8BAC68A9, 0x23CA54F6, 0xB2E91CCC, 0x0C812084, 0x8422C909, 0x903E60F9, 0x2F1DD76D,
+0xCC559227, 0x42B67BF7, 0xAC90696C, 0xFA474D22, 0xDC94FB08, 0x8AC3D5F0, 0x798FBB67, 0x511E73EC,
+0x0878996D, 0x4C03D7DF, 0x221BCEA2, 0x0CF05D06, 0x16DD9834, 0xB24D0ABF, 0x8250FB40, 0x1A8F19FB,
+0x7D04D343, 0x1C21C224, 0x69530CD0, 0x1F50AFFB, 0xE622E050, 0xA6052E42, 0x46236785, 0xB3EC6CEF,
+0x76BA0DD7, 0xC00FE112, 0x6B6F3540, 0xDCE13F05, 0x68434E8A, 0x3FC986B9, 0x5464EF23, 0x344DA2FA,
+0xDB5990BF, 0xEF87562B, 0x598E4128, 0x363D6C9E, 0x10D7386F, 0xBC90577D, 0x72559037, 0x2F37E3BE,
+0xDA5EAE77, 0xBB67CD57, 0x4F66E062, 0xCE89EA5E, 0xD0CBED36, 0x0E1CE526, 0x44BACCB3, 0x6638DD27,
+0x0564046E, 0x5B159265, 0x90711C5E, 0xAA07D5FE, 0x752F9FE7, 0x975EFCA0, 0xF153F9A3, 0xD64844C7,
+0x57221695, 0x48BA7E9B, 0x0DD7644F, 0x1BC0562D, 0xFCA4F4A2, 0x967ED195, 0xEB342564, 0xC2B7591F,
+0xF18EC503, 0xB7320B35, 0x99E211CA, 0x41F60C24, 0x2420A9E5, 0x563EF3D1, 0x1D237A00, 0xF7E51BAB,
+0xA9604A49, 0x601F6400, 0x2EB74683, 0x53265E52, 0x3D5E1D69, 0x5209A1F2, 0x85C1D9BB, 0xDF55AE52,
+0xF0A881AE, 0x92B5C92F, 0x13323451, 0x1881575F, 0x11077678, 0x4B5D708F, 0xF14EAD8A, 0x11F82391,
+0xDCDF5565, 0xC2807F9E, 0x603A8484, 0x63FB9357, 0xED38BF38, 0xE960D5F4, 0x006465EF, 0x82B572B6,
+0x45E686DB, 0x4DD0540B, 0x272E2474, 0x0EF657FC, 0x92432E0C, 0xCCB257C6, 0x9F1EE79C, 0x7E4835DF,
+0xB0EDE7F0, 0xAAB99902, 0x12391AF2, 0x874442A9, 0x2B54BA9C, 0x06F6B6EE, 0x8E99631D, 0x53A32536,
+0x563CE2CF, 0x5E788ABF, 0x9EC04FB7, 0x52B56869, 0x12F8B139, 0x17A8E7AA, 0x135D92D0, 0x96503588,
+0xFC474D3B, 0x837FDEA7, 0x7E71DD7E, 0x41CF280C, 0x3A7270E9, 0xDF55C061, 0xF7EA416D, 0x6B00E231,
+0x21B617F8, 0x4EF5F0C3, 0x27F0536D, 0x9E3EC042, 0x25CEDDD7, 0x034DCFB8, 0xC3A18C12, 0x0F1D0CDB,
+0x1ABA294D, 0x90ADF8C5, 0x789D7777, 0x2EBC3657, 0xB50D48EF, 0x1B4CE224, 0x92C89843, 0x0D630AEC,
+0x6E1D0C47, 0x0A718A96, 0x1614A112, 0x2CF9CB28, 0x06138451, 0xD3A4A165, 0xC2DFA542, 0x9AC482F9,
+0x8CAE43F0, 0xAFC16085, 0x068C62BD, 0xFF639CEA, 0xADB97D5C, 0x6FE541E5, 0x3FA082E3, 0x9D54DAA6,
+0xD950435B, 0xF333678D, 0x908EF601, 0xBD43B552, 0xA6BC1374, 0x4E15CB96, 0x91FD32FE, 0x58F98368,
+0xB1743395, 0x1BDE8877, 0x2A579A13, 0x3819D0C7, 0x822BBA0F, 0x1C69B1A8, 0x05A0F9AD, 0x1887177F,
+0x69FBF6C7, 0xA4CD6B35, 0x09253A80, 0xC85E534F, 0x8DFCD230, 0x8C7AC423, 0x746CC59D, 0x26B600CE,
+0xA3A2D1CC, 0xBF2A4A90, 0x7740B71B, 0x775C13C3, 0x208A69BF, 0xC32B187A, 0xA3858371, 0xDE9C8CCD,
+0xAF829893, 0xD0F84F9B, 0x54A986D7, 0x184A96F1, 0xBFFDD1A9, 0xF99B7691, 0x0D45BFA2, 0x80D59196,
+0x2DCC42A6, 0x7920D8DA, 0x3C601077, 0x3BDA951A, 0x37E80F23, 0xE9DF0358, 0x5F686A16, 0x486D8BE5,
+0xD357C033, 0x7ECCCF43, 0xC09A7E93, 0x70FB102F, 0x9D0E70E0, 0x16DE02B2, 0x4EEDE6B2, 0xC2E58BD5,
+0xBA80E79C, 0x5AFBFE6F, 0xCDC6DA04, 0x5A699BBA, 0x6BF5FED1, 0x6E7FE565, 0xE27906BA, 0x4D710F53,
+0x3F8F4D84, 0x8C377A82, 0xDD9D1CB6, 0x1F7BA40F, 0x2F04BA1C, 0x86EC14DA, 0xE2FA51CF, 0x72C5E2E3,
+0x09750F5B, 0x115015A6, 0x9867DB23, 0x9E5E0F44, 0x6BD66F76, 0xEB87B706, 0x9CD2AF93, 0xBE35460C,
+0x968D4081, 0x7F123058, 0x535B1F68, 0x278E4502, 0xDCF00CC6, 0x6D330A16, 0x19922CD3, 0x3D766931,
+0x2B8FD77A, 0xAE25913E, 0x93763276, 0x2DBA7B6F, 0x3021E762, 0xCE610941, 0x9950F488, 0x4888655B,
+0xC457EC2E, 0xB75689AA, 0xEB43579D, 0xF1466FE5, 0x55619AC8, 0x96078E30, 0x0F3A3F3D, 0xE22633CB,
+0xE4DC1FDE, 0xBB97FC19, 0x1CB99D70, 0xAD57E313, 0x948C0926, 0x4423AB2A, 0x8E5560A6, 0x1248BF21,
+0x1B5C1D01, 0x93711AA7, 0xB9F07F38, 0x2AFC9710, 0x6FFFF837, 0xF8C0ED89, 0xD7C18CC7, 0xDB3DB409,
+0xE0D3C632, 0xA971A11C, 0x98C750A2, 0x48420B4B, 0x6E8CBB8A, 0x2DFB9FEA, 0xF315B312, 0x09CC634F,
+0x00FD34F8, 0xEC2C563C, 0x7B684331, 0x2053F8FD, 0xC9D33334, 0xDA3ED8E1, 0x085C0F55, 0x6384393C,
+0xE2EB2593, 0xBCDB8D85, 0x7E4B9712, 0xA331EED3, 0xC87EB9D9, 0x673698A5, 0x84E3FCC4, 0xE1A0D62C,
+0x71D0A070, 0x4F3776ED, 0xBC963BDB, 0x04FFCCAA, 0x65138621, 0xF2436869, 0x4FECAD1D, 0x218A89D2,
+0x889C49DC, 0xD1369DBC, 0xFE4C2085, 0xF4140B8A, 0xE78FF605, 0x09676EFD, 0xB0F29CF8, 0x467CF351,
+0x125182B1, 0x9BFABBFA, 0xADA50BA1, 0xBB235990, 0xBEE03B21, 0x81DB12EA, 0x2A171DAD, 0xBC890AB2,
+0x97FE9ECD, 0xE6CE6949, 0x74D32BFB, 0x4CE4A7CD, 0xEDA73441, 0x877C99D0, 0xE68B2600, 0x4B143945,
+0x12061584, 0xF3398B84, 0x55E1F797, 0xDB16707D, 0x3C952CA7, 0x47262660, 0xA7C14E19, 0x58552DE3,
+0x9D19157B, 0x44E6701A, 0x271226F0, 0x9A1E4FDE, 0xAD8E9EF5, 0xF9993651, 0x78A7ABBE, 0xC51BB9B5,
+0x458B894E, 0x295CABAA, 0x3E1A5E55, 0x9250D2B0, 0x5940EA32, 0xE68A98C0, 0x9FFFF32B, 0xB6AB64B5,
+0x3103A85A, 0x214FEC60, 0x820744D5, 0x30F7D2E0, 0xE956904F, 0xA5CD2311, 0x27938F0C, 0x4F305B2A,
+0xCAD6A0C2, 0xD3B3A9DF, 0x480BE333, 0xFABAAC4E, 0xB54A4CA2, 0xDD07E603, 0xD7A04E07, 0xC3139E40,
+0x80913129, 0x2B4509F4, 0xBEF8D39F, 0xE98A181C, 0xC6D0A9E8, 0x07B46043, 0x9E7E673E, 0xFAFC3F58,
+0xE4E7191F, 0x22617E2A, 0xB40B7490, 0xB8979AE7, 0x8CA4FE50, 0x88F474FC, 0x7D77A9EF, 0x2F20B8F7,
+0x0DBD19DC, 0x2F2FDDDA, 0xAB8E9BCE, 0x0B58658A, 0x7DEC251F, 0x8CA07B8D, 0x38883427, 0x2722FC4E,
+0x191DE3F3, 0x23AE92F6, 0x7BC134AA, 0x8ADBF4A8, 0x4A1B9302, 0x6993E935, 0x5F2860B2, 0x9EBC0040,
+0xEC8A9BDD, 0x30FA8617, 0xF68A4C21, 0xAFC36AE6, 0x1B0B33E8, 0x2A608411, 0x231F301E, 0xEF21FF57,
+0x3248BCE7, 0xC2F2822E, 0x3A77D9DF, 0xD5EB9E45, 0x48D08CF7, 0x92AF2792, 0x97A4FBD2, 0xCBF277B2,
+0xB7DA972D, 0xFDE98142, 0x1A65B6DF, 0x87871329, 0x0269F829, 0xA4C59D13, 0x29CBDFF3, 0x30A8A3AE,
+0x69183FB3, 0xE97159AC, 0x3D7D501B, 0x28D895F8, 0xF8A51A95, 0x43999E00, 0x4E1A0011, 0x934A23D7,
+0xD89A2B43, 0x6E7C749D, 0x1876E0A2, 0xB1C6E58B, 0xC58250F5, 0x98036FB9, 0x8E9455CA, 0x3CFC94A9,
+0xD7BF911B, 0xA19FB376, 0xD3B14331, 0xCB262E18, 0x1CB012DB, 0x92407243, 0xA6B20FD1, 0xA8D2896A,
+0xACDA3A3B, 0x07DCF688, 0x679B424C, 0x130B8AD3, 0x5182B6D5, 0x8DDE37DF, 0xEAD66DFD, 0x62646FC2,
+0xCA3186D2, 0x41C817F7, 0x7D23CD9C, 0x42D44AF6, 0x245CAA01, 0xFE1966FB, 0x666C065A, 0x559D679F,
+0x9AA8FAD2, 0x2260EAF6, 0xE922C7CB, 0xC3769D98, 0x1FB48668, 0xD6B1AD5B, 0xCACAEF99, 0xF753239D,
+0xB4A8BA42, 0xE4C35981, 0x77438F5F, 0x986A5C75, 0x6D609E32, 0x1043D271, 0x85DC72A4, 0xBA7C1ABE,
+0x8C822D8C, 0x2D01AF24, 0x7883D3D6, 0xA7468F13, 0x144F7C01, 0x2E46CE3B, 0x49EC3E1A, 0xC965771D,
+0xA64DD072, 0xA71165D3, 0xE2AC8C37, 0x8F55FE0F, 0x5CF12CC9, 0x2A7ED9B7, 0x191058F5, 0xA3739098,
+0x1F4AA2A6, 0x64A4F657, 0x61224F08, 0xE0288CF7, 0x6FABB056, 0x5D08BF3A, 0x905C52FD, 0x833EAEC3,
+0xB7091D20, 0xFF055767, 0x9B319C6E, 0x21192A0C, 0xD225088C, 0x3E5C1E35, 0x61669699, 0x20AE31EB,
+0x0270916C, 0x3CA63965, 0x13278323, 0x31F0208A, 0x1B8391F4, 0xABEC2AF8, 0xB50EACE3, 0x8F3B34E6,
+0x6615D84E, 0x87788342, 0xB8F54A03, 0x6D2498F8, 0x0AD4E7EC, 0x27D3F9FA, 0xF3F2D794, 0x84475EDA,
+0x1E00F3E4, 0x0AAD3053, 0x69E46B34, 0x96C396C0, 0xAEDEAB2A, 0xBA4296DA, 0x903F86ED, 0xA4E62978,
+0x2F906B50, 0x7456FEA0, 0x7C58C7AE, 0x6CADB288, 0xDC5C36A9, 0xDA35B521, 0x166AAC5D, 0x6089CD8F,
+0x59DE3F9A, 0x1D7B4CD4, 0x6F417D58, 0xCF304C35, 0x7DDD32B8, 0x6ECA8599, 0xCCC0908B, 0xE7959E96,
+0xF646EB41, 0x3EC16CFB, 0x9AE433A6, 0xA604401D, 0xC046BFA3, 0x9BB92775, 0xCEB74658, 0xFCFB8F8C,
+0x7ED8C541, 0x9D7256A3, 0xFC495EF5, 0x46B396CC, 0xD3307BEA, 0x918581F1, 0x1B1DFDD9, 0xE81D91CC,
+0x2A696B73, 0x03C0382F, 0xAA0B030B, 0x47C565FE, 0x1A750C68, 0xB8247BA6, 0x8B3362D6, 0x6A6D650F,
+0x746B3AC4, 0xEE44F48F, 0x98CF832E, 0x24586684, 0xA408C9D2, 0x653D225D, 0x2DBE3ED4, 0x5F2258C2,
+0x614F2F9E, 0xEB837791, 0x7BB5F307, 0xA7385FC5, 0xC4DABFFE, 0x81CA4CA7, 0x9B913213, 0x87633BA2,
+0xC6C8436B, 0x018E8623, 0x6BE16E6C, 0x38DDCFE0, 0x15C3FF38, 0x0450110E, 0xE294559B, 0x237ED74A,
+0x449499F1, 0xDD0D0CD9, 0x57A89C66, 0x67DCEB88, 0x88593F6B, 0x14D8BA87, 0xBD63E2E3, 0x894921DE,
+0xC35B1541, 0x2378AC14, 0x3999BF88, 0x34B03C0E, 0x4920E6B7, 0xAF2C013D, 0x34371225, 0xDF631663,
+0x6940D35C, 0x58CEB5F3, 0x2E6E5474, 0xEE5C354D, 0x7CD23279, 0xB9FC8447, 0x09053175, 0x49059A53,
+0xABB75D60, 0x7F9C722E, 0x1642C6CA, 0xB71B17D8, 0xFE12644D, 0x85E123F2, 0x85D24541, 0xBE8D2CB4,
+0x216C41E0, 0xF3B2BB88, 0xBF80859A, 0x294E4786, 0x03C13B3D, 0x0A29B25A, 0xC05EC9D9, 0x4F660511,
+0x3C538FC2, 0x4D505BFC, 0xD9FF1B28, 0x126EDB03, 0x08724C91, 0xD7554BA5, 0x60E991EB, 0x00FD7DEF,
+0x39754B0A, 0xAABA40A9, 0x2A20DBED, 0xFBC0E313, 0x5755464A, 0x3BFF3B51, 0x2F1E2751, 0xEBC1CB3A,
+0xC12E52AB, 0xBC0D081E, 0x447F0ABF, 0xA4FFB0E2, 0x4A76E064, 0x37D82EB6, 0xEE1E6335, 0x4AF66F28,
+0x7B9A132D, 0x85EDC0A7, 0xC5D940E3, 0x9389BD34, 0x3D7E63AA, 0x363719A0, 0x6D12B8F7, 0x1B4CD68C,
+0xF2F3AB18, 0x33FFF6FE, 0x8A9B6585, 0xE05A9E34, 0x78BB79BD, 0x8D869414, 0x6E2B0805, 0x2020AC20,
+0x50F2557A, 0x8FE80DD3, 0xAACDB347, 0x91E6B4A7, 0x852455E0, 0xC8123BF7, 0xA170B837, 0xC0CFEF9E,
+0x55A0C4E6, 0x8661ED07, 0xBC9EDE97, 0x22E6AA87, 0xCC354866, 0xBD9EACE5, 0x5C7E9576, 0x86E7805F,
+0xF278A44C, 0x3949E443, 0x3CFBFB9E, 0xBAE7F1E3, 0xBEC6D089, 0x007FFB28, 0x80BA2E75, 0x004EE8A9,
+0x4EFF9A66, 0xDA6ED872, 0x9C33CFBC, 0xF5652336, 0x0E34F858, 0x2F422800, 0x1908EC80, 0x62484528,
+0x99133778, 0xE9652EFB, 0x1747978B, 0x87C7B4E2, 0xC1A2F974, 0x291A99FD, 0xD06625DD, 0xA0C2D4BD,
+0xECB49E5C, 0x836816A1, 0x0EAD0C54, 0xDD9839AF, 0xCB4464B2, 0x2ADC0B28, 0x6AD27C99, 0x7F8853BA,
+0x38135F38, 0xA1C9C210, 0x94283282, 0x9D3D9CA3, 0x6A409592, 0x0ED4535F, 0xB09C125E, 0x798B2E89,
+0x8437BE69, 0x9DCA2EC7, 0xD1528E8A, 0x9AFFF9D4, 0x9B47EA02, 0x2D2DB411, 0x1361445C, 0xB0E5C42B,
+0x9899A6BE, 0xAA3B60BD, 0xFBE2379F, 0x12A42920, 0xC92EC49C, 0xE3235E84, 0xDA56C35D, 0x8DEB9B4E,
+0xF841E698, 0x40356CC2, 0x67852838, 0x326CEEF4, 0xE42C2EC0, 0x1CBD0D8F, 0x0A1244C6, 0xEC7662CC,
+0xF90AA04A, 0x53BE36A7, 0x5A4F9542, 0x2603D588, 0xC7AAD35F, 0x7351796D, 0x132057FC, 0x69FD460F,
+0x6953C83D, 0x1088F10F, 0x5C32E209, 0xC0732876, 0x023ED680, 0x84AFA161, 0x846CD791, 0xA0BF6C47,
+0xDA1E22B5, 0xCA8B98C2, 0x00C874C9, 0xAF1A2DEF, 0xEB741F10, 0xAE633A12, 0xC72ADC78, 0x851A6506,
+0xAE77018F, 0x221B7BB2, 0x5C7D067F, 0xD95F962F, 0xCD630125, 0x2AC771BB, 0xCD02E190, 0xEDEB451A,
+0xB25DF03B, 0xAD078861, 0x8161E567, 0x796F4A7D, 0xAC77CC8D, 0x702F977F, 0x2419C877, 0xCF38E5AC,
+0x6BB577DB, 0x5DF81FB7, 0xED84E447, 0x22BD3CA6, 0x37A9E347, 0x87BEEE59, 0x3D98B8B4, 0x11BDF7D9,
+0x4DBDAECD, 0xB657E144, 0xFE49F640, 0x39F8E47C, 0x1F630988, 0xB8FBD570, 0x99D3FCF5, 0xFB5A6791,
+0x8AACD9A5, 0x38BC5870, 0xC8DC698C, 0x5B244A36, 0x841920BA, 0x48AD62B8, 0x3C503787, 0xFC69E955,
+0xCEDC66DA, 0x12076544, 0xFE4ED59B, 0x1C42BAA7, 0x0EEBCDE3, 0x3C3A084C, 0x7664C93D, 0xF74EB9CA,
+0xC15E8DCB, 0x95930BFC, 0xCD9A38B4, 0x4BB6789C, 0xD62992DD, 0x0E983D3C, 0x9A7D15CC, 0xA0F9BE43,
+0xEB96764D, 0x6780F364, 0x94BBC35A, 0xE4232FEC, 0x605DAEE7, 0x161A411C, 0x5408DAFA, 0x0EE8FF61,
+0x150F9557, 0x1A7D3773, 0x83D769A5, 0x5548DC89, 0x5E1C9B0B, 0x3C7BA737, 0x656BB33F, 0x04FCE61B,
+0x83269122, 0xC681CA8D, 0x945029B0, 0x771592A8, 0xC44E348A, 0xE786C71C, 0xB6659C7B, 0x077CC8B5,
+0xC0282FB6, 0xC5A0C5D4, 0x4967F477, 0x8284384F, 0xDAA1871B, 0x5D01F300, 0xE2F22B1A, 0x7A59B865,
+0x31AEE727, 0xB823964E, 0xE0E2146C, 0xA0FC3B1F, 0x6CA21B9F, 0x2950E75C, 0x70E9E29E, 0x91C6D5E6,
+0x78D69D09, 0xCDD1EDD0, 0x1781A233, 0xD2AF10F3, 0x5FE43271, 0x2DD9EED9, 0x8EE6401E, 0x09FFCBC0,
+0x01C95948, 0x58FF9398, 0x404E21DB, 0x09E644FD, 0x90AA291E, 0xC5B7A999, 0x8ECC5A5E, 0xE1578206,
+0xBC4867D1, 0x5E87E2DD, 0xBB21FB01, 0xF65CB429, 0x83A769A7, 0xD8F698B6, 0x414995AC, 0xE14EAE9A,
+0x68E2CB76, 0x54268D03, 0x209A9FD8, 0x17CA9BF2, 0xF6F062A5, 0x1948487B, 0x15D42942, 0xBBE27FFC,
+0x153D6877, 0x1CEE846F, 0xFB233FBB, 0x085A2E3E, 0xC432C376, 0x5427EB51, 0xFB855170, 0xFAEC3C1A,
+0x18C6D0E9, 0x223542DE, 0xFBD68B09, 0x4844E25D, 0x033FD554, 0x567A5C2B, 0x2924F76B, 0xE28E947B,
+0xACC4A6D5, 0x4E8A5AC5, 0x180FAA33, 0xAD12EAD5, 0x4717EB9D, 0xAC3BF6E9, 0xB69468AD, 0x8D605672,
+0x8A86CF03, 0x6AF27C60, 0xDD29D455, 0xA44BDD2B, 0xC22A7E93, 0xD56073F2, 0x2A4F36C0, 0xF48F4600,
+0xDE94CC84, 0xE6321651, 0xB6C94C26, 0xCCD3CAEE, 0xECBE8EAE, 0x74798028, 0xDBB5378C, 0x934CBD7E,
+0x66F097D2, 0x722F6B04, 0x66C66213, 0xE15CC9AB, 0xFAAFF397, 0x5802E8C7, 0xE129ED16, 0x49CC4C31,
+0xF80F5BA0, 0xCDF9D3F6, 0xD6F4A956, 0x9002BA85, 0x70C86FC4, 0x26323BC2, 0x9AB39A2A, 0x3BC2CA10,
+0x8D6A2377, 0xC49B0E1E, 0xC54EEB59, 0x80F5D4D3, 0xC6C90809, 0x7969A606, 0x289AADCE, 0x27F34035,
+0x5C2E4361, 0xCE98FB6B, 0x9741C0F2, 0x0712AB94, 0x2EF67312, 0xEF7EBCB4, 0xA38D5C3B, 0xD0C1F008,
+0xCFAF87A6, 0x67387A8D, 0x4480CFEF, 0x52EB8CA5, 0x83EC9ECB, 0xB1328A14, 0x30C65063, 0xD2EF61FA,
+0x34724D6F, 0x6126C34F, 0x042F899E, 0xFD83ED48, 0x5C54418A, 0xBE58E38D, 0x91D83BE5, 0x9F6348DB,
+0x77FFB583, 0x988CC5B5, 0x583C9C62, 0xB56F4907, 0xCD3811A3, 0xE6881589, 0x26A63570, 0x4A1B1F95,
+0x8026FD7F, 0x3BFABE54, 0x20922B05, 0x0BA52582, 0x7B82E9CF, 0x3980E175, 0x1C4B3947, 0x4923CEAC,
+0xE1945B72, 0xA66686E2, 0xA63F589D, 0xDC5072A5, 0x8283C634, 0xCE658393, 0xC02859B0, 0xB1AB1B5B,
+0x4F6E04CB, 0xD6009FA2, 0xD72A4CB9, 0x27F37909, 0x2B1AC9EE, 0xF068BCA1, 0x050C7A37, 0xDDA25754,
+0x9EF5A3EC, 0xA2A7EB4A, 0x50CB3FDF, 0x9128B0D9, 0xAD685147, 0x78634C7A, 0x79AAFC7C, 0xFD603B35,
+0x55EFA667, 0x4B80B9CA, 0xD3A89567, 0x252089B8, 0x97F90A50, 0x4040EEB4, 0xAC387F54, 0xABB99B38,
+0x4C223A24, 0x9DA17C29, 0x1AC7BFDB, 0xD579638E, 0xB9259051, 0x916CEC18, 0x734A1A89, 0x13A9FB2A,
+0xE8AC4B50, 0x7C6E8261, 0x01770447, 0x7B4586D6, 0xB4243C3F, 0xD9EDE82C, 0x09B7616A, 0x51B5E8B4,
+0x80470128, 0x06B27EF8, 0xDB037F8F, 0x32845EEE, 0x2C098D53, 0xFCDF3848, 0x14EB9002, 0xE36474A7,
+0xBDBDB485, 0x703C5577, 0xA42F3F09, 0x26F84998, 0x4E63D8FD, 0x302FC3AD, 0xF2A4E32E, 0xA2BAD016,
+0xBCE69C53, 0xD87F390C, 0xD5E0FB5F, 0xF5985C1E, 0x7973C143, 0xAA526AE5, 0xFD4EFA90, 0x989444C8,
+0xD8CE43F5, 0x86DA96C8, 0x48A41E02, 0x63132574, 0x2B97A572, 0x4E22DEA8, 0xFBE44D51, 0xEA905EFD,
+0x6999AE5B, 0x03EADD49, 0x22AAA99D, 0x26B8F7E7, 0xCE7CF0BD, 0xB1CB5EF0, 0x5DD56091, 0x928D8165,
+0xCE6D8B9F, 0xE3014E10, 0x1751D3F8, 0x0A25DBC0, 0x450322E4, 0xF33A495F, 0xC1648204, 0xC073962B,
+0x056E53AF, 0x62121EFD, 0xA9C1D820, 0x5B285805, 0x6C82AE1C, 0xF6FB1EDE, 0xEB81ADA6, 0x2BF4BB72,
+0x2258261F, 0x2C8D95A4, 0x7CEF5A52, 0x36C40CBE, 0xDA4256C8, 0x8DA05FC3, 0xA7826D71, 0x1373B267,
+0xAFFFAE2E, 0xADF7069B, 0x0BA0A83A, 0x59D86887, 0x2F8A336B, 0xD4E104CA, 0xDB93F452, 0x2A06CC3D,
+0x84B9EB13, 0xAFC69509, 0x37C9F73D, 0x73BD1C13, 0x3D327D13, 0x06556C2D, 0x33AD604D, 0xD14BBBD9,
+0x3C60898C, 0xEB3A259E, 0x48380C34, 0xCE2C9716, 0x24BE8821, 0xB22C8C23, 0x681C9CE5, 0x27814E40,
+0xB602C05D, 0x362EF3D8, 0x6CD13862, 0x1B1A7E9D, 0xA021DA91, 0x0921CEDF, 0xEE3FC75C, 0x65B2DA03,
+0x21BD2CC1, 0x259CBF85, 0x27B9C1B8, 0x9EB436B8, 0x78D97CF2, 0xBF6BC2FA, 0x74CD07F7, 0x29A4BD39,
+0x62A6C2FD, 0xD3A60EDB, 0xB5F6B403, 0xE0E3A4BE, 0x4D001D2A, 0x3F9C824A, 0x736D2494, 0x5EFA5712,
+0x3B4DC3EF, 0xFDAC1688, 0x03C2831F, 0xD3CA9DDA, 0xE1D53C96, 0xFEC66D66, 0x993447E4, 0x9AE4D75F,
+0xE34ECB2F, 0xAF74373C, 0xD415AF94, 0x13A85BE3, 0x8EF4C6D8, 0x160D25E2, 0xB2C99097, 0x42C7E5EF,
+0x64EAF4CC, 0x661316B8, 0x223F5C17, 0x30A263AE, 0x402439D7, 0xC6F6ADA1, 0x96309A79, 0x243BD552,
+0xABD53249, 0x1AED196A, 0x92FAAB3C, 0xBB2A2C34, 0xD0044C36, 0x85819797, 0x2107A65D, 0x328B1586,
+0x24079CF4, 0xC9647B2B, 0x10042769, 0xA3BDF83F, 0x5B1B3C9A, 0x694B5F04, 0x9E335017, 0xD5620A61,
+0x8194FE9C, 0xCED79182, 0x8166F967, 0x7B5B6758, 0x48D8C2A5, 0x7FB69A34, 0x56241192, 0x0252F9CA,
+0xFD3F72B9, 0xAA4B2E46, 0xDA137615, 0x49C035EE, 0x4F1D4AF3, 0x7CC6DD0C, 0x09F25760, 0x9B9856C2,
+0xBD3F8F5E, 0xC6A7E5A5, 0x3432050F, 0x199D3B8F, 0xA9FEE3AA, 0xC4CB8B18, 0x33FE292E, 0xD7CADFD2,
+0xFB212E47, 0x36298090, 0x1AE26AFA, 0xEA598749, 0x1E74E11E, 0xFE2AA1BC, 0xAFE8AB59, 0x27212F7F,
+0x4B4968F6, 0xF7C1B1D5, 0xE5C9BDDD, 0x339908B2, 0x410D4C78, 0x11E30EA0, 0x5A7C5067, 0xEB99BECA,
+0x5D48C3B9, 0x96DCB47D, 0x778774F5, 0xA6A2BC89, 0x466762C8, 0x92FCBF75, 0x932FCC82, 0x25EB944E,
+0xA64264B6, 0x584D9D79, 0x8183EF40, 0xBC04B76C, 0xC630D906, 0x7D9909F2, 0xF2BAB2A7, 0x7918FA75,
+0x294748B2, 0x8A9262DB, 0x6718CBC5, 0xF68B5D39, 0x129A8A9E, 0x1B226816, 0x8B525BE7, 0x1FDC0AF8,
+0xC5EB696E, 0xF23EF486, 0xE7E09401, 0xEF4A9F0C, 0xF42BDB2C, 0x1AA0124E, 0x7A70E801, 0xC5FB735A,
+0xD9B49901, 0xA67B4D69, 0x45A6B530, 0x942116A6, 0x7790C709, 0x6C8BF722, 0x9E4395CC, 0x478FCA44,
+0xAD0F4687, 0x4684D9D7, 0x128BE69B, 0xC10D0CA4, 0x6B72E818, 0x230D5B89, 0x8C5B68A1, 0x037D370C,
+0xD012F0C9, 0x755F7CDE, 0x5AA0D14B, 0xF89BF37E, 0xAEBB502B, 0x8D290022, 0x9695B1D5, 0x7D2C2820,
+0xC396000C, 0x99274DB9, 0x28625320, 0x91385B5D, 0xA60992D9, 0x7AF6A213, 0xAFF3F8CF, 0x43AFDC11,
+0x6DF75AE6, 0x9290C537, 0x8499FC98, 0x60D39CB7, 0x20F29DEC, 0xEFB5662C, 0x30627C7C, 0xFCAE34D5,
+0x6E4D78A9, 0x84754ADB, 0x7052C065, 0x5C51D8BB, 0x64B8FBD8, 0xF163E40E, 0x130F0ABD, 0xDFEB8AA8,
+0x6B311D2B, 0xE47090D1, 0xBC96504D, 0x2FB4795B, 0x87712E9A, 0x6245B7CD, 0xAD9BDCDD, 0xD8B61C8D,
+0x1F356992, 0xCB88F305, 0x2546006B, 0x7DA5501B, 0xF8A600DF, 0x52692F52, 0xA0F95A59, 0xC57F2C60,
+0xAE95D435, 0xE0FF6CB7, 0x272E666A, 0xEF27BE2A, 0x63D7761A, 0x722EC586, 0xAD08EABE, 0x3519DE2B,
+0xC0E5A041, 0x19DC1F80, 0x23222D31, 0xAEDE7187, 0x93D8C3DE, 0xB63C5354, 0x01DB0B6E, 0xEA1A5673,
+0x6F3276A2, 0x44CB9870, 0x34F21B9B, 0x1CFF5837, 0x897C3E24, 0xC18F3888, 0x431917C8, 0xFA5CBE52,
+0xFE29B5BB, 0x70387388, 0x1AE91D4C, 0xBBD86DFE, 0xF7812DC1, 0x5F8B9E3C, 0x66DA6151, 0x286D1AD2,
+0x3D7E78A0, 0x427D9A4F, 0x9E1C94A1, 0xF139585C, 0xCEA6FA34, 0xDE0561DA, 0x35516AF9, 0x7EFD2806,
+0x93CB7D9E, 0xC4769720, 0xDD32EA9E, 0x07A39E34, 0xB154BAAE, 0x0070BDB6, 0xFCEF36ED, 0xD86481DC,
+0x41286F95, 0x6B6F65AE, 0x5E3ADBDA, 0xEBC12281, 0x33783EF1, 0xEF2C4D39, 0xB82E8023, 0xF613E065,
+0x3C3E3C0F, 0x8DA4DDC4, 0x4D1AF7BF, 0xF57D5CF3, 0x787AB9C4, 0xCBEE2AB5, 0x9E295E1E, 0x3CC23A16,
+0xA621F5DE, 0x8D96C0F8, 0xABFE03F7, 0x95D75DFE, 0x8E0D1914, 0x22C27986, 0x9FF46471, 0x7ABC8D94,
+0xA09227BE, 0xC97F8780, 0xD292D09C, 0x7717720E, 0x776402DB, 0xFDFDEED8, 0xC25914DC, 0x33B7CD9E,
+0x6859ACA8, 0x320CA38D, 0x0817EFD7, 0xA9997EC2, 0x99A69576, 0xDDB44C5C, 0x19759958, 0x703777A9,
+0x1EE50183, 0xF40EE6E0, 0xBDCF7DC3, 0x3A826444, 0x8EC42040, 0x02F7382A, 0xA774A2DE, 0x2C15BC70,
+0x023096D7, 0x2B5752E7, 0xA4E8F1EC, 0x4E76B5FB, 0x61667BBD, 0xCC799F9B, 0x75B44D4B, 0xF4F180DF,
+0xA96A0494, 0x8C8835C4, 0x28456AA8, 0x1B671CB5, 0xE9D2B9A2, 0xE5E07091, 0x30AEFC59, 0x22E52337,
+0x59C1EE68, 0x036B6FE3, 0xFADB1CBD, 0x28D291B7, 0x131EB0B8, 0x52C91F4B, 0x0368F7A3, 0x329894E9,
+0x7635578C, 0xCE89CA55, 0x27B0C5CB, 0x50355106, 0xC2012814, 0x9BEC2B22, 0x6C2DC454, 0x9B554F4F,
+0x04BCD549, 0xF74206F8, 0x5527CF0B, 0x1FE6626F, 0x1670B8E6, 0x67DE1B8C, 0x5B12D684, 0xA07F3F64,
+0x9A3B8C42, 0x874445E1, 0x80569B07, 0x55738DFA, 0x93A3E1B6, 0xE613324E, 0xDB822718, 0xBF69588A,
+0xDD867109, 0xBDB34399, 0x78383020, 0x54CDD5A2, 0xFEF7BE68, 0x90958EEC, 0x394B6C51, 0xAE3CC805,
+0xC2E01D3E, 0xAD92F829, 0x9F3E0DE0, 0xC26AD6C2, 0x3DD54FD2, 0xAA9F01D4, 0xAD647B2B, 0x44947995,
+0x00F6EA98, 0xBEF575B7, 0x24AD7E6F, 0xF1D2B5DF, 0xD83E2335, 0x100FCDA1, 0x90A1D687, 0x72F84E11,
+0xA3E8B00B, 0xB18E5751, 0xB936722F, 0x3B240FE7, 0x245EC3C5, 0x2F1B56A9, 0xC96CBD46, 0x9F9A7992,
+0x0783492B, 0x4642036E, 0x20495611, 0x4ABC088B, 0x35C04E34, 0x191DBAC1, 0xC1AE201B, 0xA598EC30,
+0x6F22C27A, 0x4668319D, 0x9D968791, 0x23421F2C, 0x71E2A33B, 0x3DDC73C6, 0xD7F219A5, 0x78F1E473,
+0xB8614CFB, 0x15832535, 0xED1DD3E5, 0x58EF6DB4, 0x8531D6B3, 0x0CA23DBA, 0xC102B41D, 0x617FF9E9,
+0x11BB757C, 0x5141F016, 0x70CAB8A9, 0x644E9AF8, 0xE408D957, 0x8EAAE8C5, 0x1DB17648, 0xF06F556E,
+0x85B6CDC8, 0x11CDA394, 0x9DD1E788, 0x1FD26783, 0x30AD9E93, 0x03565FD2, 0x9DDCD7DC, 0xCA2C5604,
+0x5AA991F9, 0xFEDC5EEC, 0xE6989483, 0x4AA05575, 0xCCD081A5, 0x00DB8CAD, 0x631EDC79, 0x85271137,
+0x40BA9F7D, 0x54119580, 0xDD8CBE0A, 0x68A30E34, 0x3102E306, 0x707150A5, 0x02DD4439, 0xCB4F16DF,
+0x1D5335DF, 0xF8DD397D, 0x06CE5723, 0x19B40EF3, 0xAF8698C8, 0xB5929FB4, 0xD5CB880B, 0x03FAC8AD,
+0xC195F125, 0x45087230, 0x6191A666, 0xAA6BD5C8, 0xB44245B9, 0x3C35CFC8, 0x474182FD, 0xAE3A4560,
+0xAA2B9B05, 0xDF406169, 0xB7E2E155, 0x6C0ED4A8, 0x56CD59A1, 0xA78E4772, 0x4AE06DF6, 0xD0E0C455,
+0x4373299A, 0x7260634B, 0xF507FA31, 0x6BD1CE68, 0x03D0FFC6, 0x86FCF9D4, 0x54C0A34B, 0x1F1FFFFD,
+0xD3F0EB1C, 0x024037CD, 0x95C1EBE9, 0x12AF2EC6, 0x04B36C5C, 0x219E76EC, 0xEF5252E1, 0x1C0974EB,
+0xC3FC8F8B, 0xBFFA763A, 0x8781C8CD, 0xAAF1C768, 0x295A9D8E, 0xC8725F3F, 0x38488CBD, 0xF4E5BD61,
+0xEFD2B949, 0xA355F6A3, 0xC7D84A63, 0x406D79D4, 0xF3AB6455, 0x866DF6C6, 0x1AAAF996, 0xA72AC116,
+0x991EDA00, 0xAFFA3C73, 0x821065BD, 0x6D28DC22, 0xB399B669, 0xC39F9D43, 0xA75917F3, 0x2EAC0ACB,
+0xDED1D722, 0x40A4BEDB, 0x616E3888, 0x9D93C103, 0x694C9DBC, 0xBC049E9C, 0x895981D2, 0x1843A5F7,
+0xC6EF872D, 0x0267C583, 0x079DE167, 0x96311F37, 0x7C0127CD, 0x2B9988BD, 0x8AEB599A, 0x808EF6AA,
+0x779B9C66, 0xC54F057D, 0x147EB5DC, 0x89440599, 0x0BB8CB7B, 0x9667F554, 0x3B51968A, 0xCD5B61F9,
+0x7F4BEF9D, 0x6C5BF3C3, 0x599C2AD6, 0xF7610866, 0x6FF959CD, 0x6CFACC58, 0x120FDBE5, 0x51013756,
+0x32D60FB4, 0xD5291CC3, 0xF03B9E5D, 0x668CFFB0, 0x8BB6525F, 0x61659B0A, 0x80FED5C3, 0xBC85486C,
+0x2D336CD0, 0x556BF083, 0x7D3FC03C, 0x6CEA3D9B, 0xE45DF134, 0x180270AB, 0xC3F8B058, 0x3A46AEA0,
+0xE00D0789, 0xD2EC57DA, 0x44A9BFC6, 0x86843458, 0x42C567AD, 0x78B76EDB, 0xCBECE4BC, 0x77331CF0,
+0xBC021F00, 0x1F6B744C, 0x63B47B23, 0x2BE2809C, 0x44112A87, 0x0C46EAA4, 0xBABF926D, 0x2565AF3D,
+0x9D6928BC, 0x7CE454AE, 0x7F3A8A42, 0xFCE57CDC, 0x983F38CD, 0xEAAFD839, 0x0FA5CE59, 0x57A35B87,
+0xB62AE6CD, 0x1F33F653, 0x8FA969E7, 0xC6577998, 0x3BD45CA0, 0x32BD3D1B, 0xC24C41C2, 0xC66A44FE,
+0xD3DD230F, 0xE4ABC8C3, 0x1F96153D, 0x4AC83E7B, 0xA760B1AC, 0x86BBAA65, 0x9B32DD02, 0xBDF4C1B0,
+0x358FC323, 0x88167BBD, 0xB04B1114, 0x68A80FAC, 0x495AE750, 0xE82038A4, 0x07B154B1, 0xA3EC3C6C,
+0x2FBE88AF, 0xB63CD24F, 0x5FCA63CD, 0x8F5BD07B, 0x7265846C, 0x91C97516, 0x5D5FDF7B, 0x294A05F8,
+0x067E3983, 0xFE06655F, 0x0AF6398E, 0x641B2BA0, 0x96A15E0D, 0x0C72A563, 0x4AE15B4B, 0x4286A8F4,
+0xEF06F20D, 0xE65583C3, 0x204E231E, 0x04D2737F, 0x7D5F625A, 0xABA6F641, 0x2E839A6A, 0xB148146A,
+0xDA626A25, 0x71B2BD81, 0x62283F5F, 0x59216082, 0xF0C4C6C3, 0x4BC99FCD, 0x6EF48FBD, 0x9AB4575F,
+0x01CE9D84, 0xBAF63774, 0xA47664F6, 0x5833FC1E, 0xD07ECCA5, 0xCC797BA9, 0xEF0D3D84, 0xB4BDB9E2,
+0x1E42B452, 0x1D0A0A93, 0x8043995F, 0xE5873D84, 0xC0381B9D, 0x4BDD4A34, 0xD3B0BF24, 0xFE5AA067,
+0xA097C131, 0x99F2BF99, 0x1F53CEEF, 0x47E39823, 0xEC16DF39, 0x144C2ADE, 0xDD7A747D, 0xC80871AD,
+0xB99CBF4A, 0x0DFE6015, 0x2FB40380, 0x78EAD52C, 0x4EAC5E60, 0xF015AC11, 0x47EDE742, 0x8FE992AF,
+0xAE4CA01B, 0xAAF1943B, 0x7C1EE9C0, 0x72377844, 0x4132926A, 0x338A790E, 0xB7EA62FA, 0xF879A23B,
+0xFBAF5B57, 0xACDA3DD7, 0x3CE615E3, 0x4E6EA265, 0xF3C176F2, 0x2EFEEDA8, 0x8BF3722F, 0xEAA342DD,
+0xBC94B67D, 0x4028C93C, 0x28ACB674, 0x2EEB8373, 0x397C3CAB, 0xA29DA5C0, 0xBA5793D5, 0x85796C98,
+0x24DD4BAD, 0xCA9F2EAA, 0x9F9583B9, 0xDEBD6DE3, 0x3838D253, 0xB7D8E6B2, 0x4E2FACB6, 0x7F016E6E,
+0x82B052EB, 0x688B640B, 0x110D6055, 0xF22CCA1B, 0xA191FD4D, 0x83F65B39, 0x37A7716E, 0x9DC83832,
+0x23D1E8FC, 0x9431DF35, 0xCF682EE7, 0x9A468743, 0x3C53E3AE, 0xB60F8B8D, 0x39F6E2F3, 0x0D36E26E,
+0x1D1EB9BA, 0xC159E212, 0x5EBD72D7, 0x96C99D45, 0x2ECAE166, 0x3A584A30, 0x3CEBF19F, 0xF481BF2C,
+0xA9198CEF, 0xB512B524, 0x24BEA85D, 0x3C4D7EAF, 0x882D34D2, 0x2E8E6527, 0x08C01600, 0x91FEE566,
+0xDB0FC95F, 0xE4CFF1B6, 0x7890D1E7, 0x155C7F66, 0x6B3D0022, 0xECD8DDA2, 0x139A607F, 0x91C4204D,
+0x3ED0AFAE, 0x4AC59EA9, 0x03559486, 0xF08AF8C7, 0x6BFE540B, 0x13577D76, 0xACE4A5B4, 0xBA2BA5A0,
+0xC651D2AE, 0xDCB2DCD6, 0x44A41C35, 0xDFD05B65, 0x1706F73D, 0x44D1BE9B, 0x402977C9, 0x6AB4673E,
+0x84107197, 0xFBFF24E3, 0xA730793F, 0x123EF539, 0xFDBCDF54, 0x2CE92344, 0x6A4DB7B6, 0xBCCBEDC1,
+0x97702BED, 0xDCD92303, 0x64043E20, 0xDA08A239, 0x4A9F251F, 0x6F3E03FB, 0x4C21C63A, 0x1242CDE5,
+0xEBFE0BA4, 0xD03A9CB6, 0x0AE91043, 0x57781236, 0xFAD1B92A, 0x96FE0387, 0x99D5E0B3, 0x1B863938,
+0x11A6AA76, 0x0F19375F, 0xE812A77D, 0xD0D341A4, 0x276B1A06, 0x80E9A020, 0x9E74B849, 0x12A2343C,
+0xC2925F53, 0x8A78E85A, 0x7A968764, 0xBB88B3A1, 0x1F723605, 0xF37F0834, 0x4CF5946D, 0xFD4C9E17,
+0x71B9DC32, 0x6F655CDA, 0xB2239577, 0xC8F15795, 0x05F2183B, 0xEF59FAE2, 0xFBEFC97C, 0xF7454742,
+0xE71EE2CF, 0xB7352824, 0x3AA2B416, 0xE157C1EF, 0xDDE0FEFD, 0xA75D505F, 0xE915FE28, 0x55E967F9,
+0x9EAC8EE1, 0xC2E9D7FF, 0xC6F0E652, 0x8412D07E, 0xAA76E009, 0x790486B5, 0x8A8099F3, 0x753E2352,
+0x68C0C87E, 0x34D502FC, 0xD4510C0B, 0x95165A90, 0xA4338601, 0xE7C98921, 0xEC20EDC4, 0x606932F4,
+0xB94D0E8B, 0xDC6B10BF, 0x6778CBED, 0x2D187F4B, 0xB4E146EF, 0xE32E5133, 0x593ED010, 0xC6D87EFA,
+0x9BB62892, 0xA8752F1D, 0xD2849B5D, 0x5167717F, 0xF107E8BF, 0xC1C0A848, 0x6EB47725, 0x5814CB23,
+0x76A90C24, 0x7E8D0F93, 0xD4AD0CB4, 0x8DCF355C, 0x76A70822, 0x609CBD0D, 0xE206D029, 0x14A590C0,
+0x930445D8, 0xB5C02E36, 0x31F8FE82, 0xF4979C82, 0x9EBDF209, 0x20400CFD, 0x32672A81, 0x3C3E4B08,
+0xFFFD93D4, 0xF477E001, 0xE32DEE05, 0x70E94D65, 0xB9DFD06C, 0x29BDD521, 0x9EE64DA0, 0xA22B630F,
+0x32A56E24, 0x5BD6F4B6, 0x55E47CF5, 0x545A0103, 0x57169EF6, 0x1B745369, 0x90384A2D, 0x1A7D7454,
+0x95E66CE2, 0x45EC327F, 0xBF7E06AB, 0xA9EB6FE2, 0xF32253C0, 0x88482687, 0xB7D578E8, 0x465C359D,
+0x5EB500C5, 0x68F95519, 0x933A8F54, 0x75291994, 0x49E86EFE, 0x46AB6C66, 0x4E56ADE4, 0x483B1E9D,
+0x5719F72F, 0x084F371C, 0x1C57AE33, 0x1C68BF97, 0x084A33D5, 0xB26FB9A0, 0x6C67B352, 0x50D9BC43,
+0x7B14B387, 0x78E80611, 0x03D7793A, 0x479F313B, 0x15D387E2, 0xF81D9EDE, 0xBC30A4B8, 0x41C1E58C,
+0x6447DE23, 0x5BF8A71E, 0x13A0DDBC, 0x245C8286, 0x9A11BA7A, 0x1C2067BC, 0x0C16E93F, 0x8E32D409,
+0x5C9B61C8, 0xB7EA690A, 0xD90800BC, 0x7B73B3DA, 0x8E4E1B9F, 0x05A51637, 0x5E39EDDA, 0x9F3AC1ED,
+0x625F7DDD, 0x4A0C19FA, 0xDD7FC414, 0xE6A05418, 0x7CE86E8E, 0x5E774B48, 0xB33348BB, 0x67F2A8B8,
+0x1AB68A02, 0xEE9040EB, 0x8366A567, 0xF0397665, 0x4700437F, 0x8D958652, 0x131AB69B, 0xBB52E49C,
+0x1A5F2106, 0x8DB824D6, 0xB34587BF, 0x684EFF34, 0xF72E26DB, 0x7F3FE362, 0xC84511E4, 0xBE84E9E6,
+0x952285E4, 0xCE26531B, 0x69C6A7C2, 0x75E1A7C1, 0xE8EFDBD9, 0xBBA62E72, 0xDAFDF1EA, 0x17781A9A,
+0x2AC8A642, 0x217A60F4, 0xF1AAECB2, 0x63781BAD, 0x53371F05, 0xD30E02B5, 0x9E6F67C2, 0xAC0B6674,
+0x9A2F16A0, 0x4BBA18B5, 0xC6AD7A78, 0x8D871328, 0x1DFAB563, 0x84598D88, 0x866889C5, 0xB1BC1FD4,
+0x926FC6E7, 0x762FE293, 0xA002FDDA, 0xA8728CD9, 0x7DC62CD8, 0x713E92C4, 0x9296E5C9, 0xF076EF30,
+0x8CFF96D2, 0x6CA8E954, 0xD2085D2A, 0x8574FECA, 0x6F96F4D5, 0x7B90FA10, 0x0425DD40, 0xC0275BAB,
+0x2E6AFAB9, 0xD22FD871, 0x9A23EE76, 0x69116877, 0xD61BB6BE, 0xE3F49F13, 0x65926382, 0x2954DD29,
+0x3A6BFF0F, 0xFB557AFF, 0xFDCC00FD, 0x81678272, 0x0F602E57, 0xA8AA0EB5, 0x02E90147, 0x0F1E4E60,
+0x03263CE0, 0x48726EC2, 0x5D8CB519, 0x72FB6C13, 0x423AEEBB, 0xFE2E4CB9, 0xD1165D84, 0xF27270AD,
+0x00B17B5F, 0x4674F4F2, 0x5A29E304, 0xB86CCA7C, 0x085C79D8, 0x79EC5BF2, 0x7E7A2E8F, 0x9CEA190F,
+0x0A444B76, 0x15070BC3, 0x6BFEE1FC, 0xEED77351, 0xF6609DB2, 0x3E1751F8, 0x63DDAB72, 0x9B182A6C,
+0x83906D10, 0x2FC6122A, 0xC45CCA38, 0xABF1357A, 0xD5D40172, 0xA220BC6C, 0xCE5DCFD3, 0x739D0F7D,
+0x2CCC0527, 0xE5287227, 0xDF4943AC, 0xD815996A, 0x03797CC8, 0xCFF2F422, 0xAA98DA09, 0xB9AD0BB7,
+0xCEF00746, 0x933DFB14, 0x35C18510, 0x0BC27FC0, 0xC5B41A0D, 0x32D69E7F, 0x8A14DD35, 0x6ACD5711,
+0xE36D428A, 0x42F73825, 0x745FCA1F, 0xA3509529, 0x801396E0, 0xB3601614, 0x4A7C365C, 0xDE1A0154,
+0xD446A67F, 0x7A417246, 0xB9C99D62, 0x6BBDC151, 0xE5E3BD42, 0x558B58F6, 0x737A8C89, 0xDF2E7C0C,
+0xED97E7C4, 0x88379DA8, 0xBB204AA6, 0x0F8E42B0, 0xDF5C8040, 0x659B0335, 0xC1BAA03E, 0xB663C534,
+0x3AC10660, 0x06FFC2B0, 0x20DCCEF5, 0x842CDA00, 0x0BB8CC84, 0x33E1C6AE, 0x04B79C73, 0xD02E14C1,
+0x8C3917D1, 0x6951AC94, 0x747127CA, 0x183C0E4A, 0x81ADB556, 0x9115EC2B, 0x8B67F9BD, 0x17193923,
+0x0F8499E8, 0x4EB31366, 0x8FD8F070, 0x1B010332, 0x8A4AD8F2, 0x1E29523F, 0x30277A05, 0xF2B1A6D5,
+0x24D08A6A, 0xBD800EA1, 0xD0DDA072, 0xE873F3BC, 0xFBAFEAB7, 0x1B5014FC, 0x1E8710A8, 0x17B335EA,
+0x0C1B4F50, 0x4DE90A99, 0xBE1212E4, 0x991B47F0, 0xD902418C, 0xD97C9F5C, 0xB1EFA984, 0xD271BE62,
+0x1F289AAC, 0x07AAABAA, 0xD12B615B, 0x56364A04, 0x5554DF1B, 0x5C8FA8B3, 0x83AEEB2A, 0xBC3C30AE,
+0xDCF87FB4, 0x123DF923, 0x1622EC67, 0x10BBC5FD, 0xC37376AC, 0xA74EE611, 0xA13F629B, 0xFD20365D,
+0x798CB6F1, 0xBC3E442B, 0xFE4ACBB9, 0xC4FB5348, 0xD99B6188, 0xB44CD2B1, 0x18A18DF7, 0xA62A8D58,
+0x78782477, 0x06E5D221, 0x56A74380, 0x73BBA931, 0x84EA2ABB, 0x9DB472A0, 0x92D2671F, 0x6A1F050C,
+0xB1DA781E, 0xB6BAA602, 0x66ECCE55, 0x8439AE74, 0x06DEB8D2, 0x8FD11528, 0x9ECB557C, 0x64C45B04,
+0x340F136A, 0xBF53265A, 0xFAFC5DF5, 0x8101700C, 0xEF45B4FF, 0xDC3370ED, 0xF079335C, 0x2F1FAE1A,
+0xEA88F825, 0x174444E9, 0xBC2CAB6C, 0x338CC1EC, 0xCFC07477, 0x33BADC93, 0xF6B0CC6F, 0x1AD6FC15,
+0x1D66A95B, 0xDF18CE3D, 0xDE5466C8, 0x5D2DC306, 0xFE3B2FF2, 0x6C2319D9, 0xBE757297, 0xA121236E,
+0x65C229BD, 0xA682A965, 0x57FDC798, 0x723B246A, 0x3B6A17D1, 0x2937C09C, 0xAD637651, 0xBA743BC2,
+0x666F95D9, 0x919D6C9D, 0x7E3664A5, 0xEE12713C, 0xE1E97B77, 0x5798D501, 0xB3CF1198, 0x2073F160,
+0xD49C9D08, 0xB2F1A07E, 0x6BCE617B, 0x5B61C8CB, 0x91DD5303, 0x04C31178, 0xAC49C9D1, 0xB8E22C1F,
+0x0AB504F1, 0xA5C0C636, 0xF77649DE, 0x035FD000, 0xCDF277FF, 0xCF633D68, 0xE24624E6, 0x1873C847,
+0x2B03ABC3, 0x3D572D00, 0x657280DA, 0xEABDA565, 0x07F81F31, 0xECE8C18C, 0x6D273DBF, 0x96BC6D0D,
+0x35096386, 0xED7BEA25, 0x600E7B51, 0xA076E775, 0x6A165CA6, 0x1790EE9E, 0x444C1436, 0x13A8D6AB,
+0x9E611E02, 0xF739D729, 0x60763711, 0xE2A97D2D, 0x7D976A3F, 0xC4C5E613, 0x47F02CAD, 0x36CB7250,
+0x5CE5970A, 0xC0C1098F, 0x1DCB355B, 0xB2B7781A, 0x4567CE94, 0xBEBAD27E, 0xA974EBF0, 0x887C7AAC,
+0x4A201A8E, 0x418E39C6, 0x95F6A7C5, 0x5D668B0F, 0x1DC03E7C, 0x239F6A4F, 0x10239E9D, 0xF52B1717,
+0xF93A90C7, 0x22864F77, 0x0DA6FECA, 0xC56C58C6, 0xD899F668, 0x4D856093, 0xCF8396EE, 0x8E948371,
+0x20C5D7B0, 0xBF87E21B, 0x14B66D34, 0x6590C39A, 0x8A82DA37, 0xE029A4F7, 0xEE2B9E17, 0x5D342765,
+0xDD3CEDE6, 0xD60A9018, 0xEADC72FB, 0xF6A9113A, 0xFCEF5F47, 0x098A66DF, 0xC1003A36, 0x4B160974,
+0xD71B1184, 0xC6090C0D, 0x4D1E2C83, 0x64A19FFF, 0x1B0112C9, 0xC08C7248, 0xE7EDE2C8, 0xAEA46CDA,
+0x3784F475, 0x3389F3C9, 0xF4F00D4E, 0x9E88D6DC, 0xAFACF274, 0x47EBD7A3, 0x6089595A, 0xF8E5046F,
+0x1B6D16BC, 0x92774906, 0xB648041A, 0x0F44870A, 0xF1338569, 0x2672DE05, 0x9359B529, 0x31613099,
+0xB7A732E6, 0xD2D7D1B1, 0xF601F859, 0xA32E4027, 0x03649FB2, 0x2333575E, 0x715224C9, 0x4E006A0D,
+0x84FFF610, 0x542382A2, 0x048B6F10, 0x02990AE4, 0x134FC3A9, 0x433BCF6B, 0x1BD0F428, 0x2B6F63AD,
+0xACADC006, 0x0F869865, 0xDE2688D2, 0x91C41AB4, 0x5B9CDA26, 0xFAE9C671, 0xC8A3805B, 0x2D9B33F3,
+0xAC559481, 0x2D3AA121, 0x6994E531, 0xDCD0AB88, 0xF9ED8CD5, 0x02624805, 0x59A36500, 0xFEA459C3,
+0xF9ECB7D2, 0x4F0E72B5, 0x8921510C, 0xB4F36790, 0x734ED5CE, 0x0C5EE8F7, 0x5E11C118, 0xF79515D8,
+0x90FB6FCB, 0xDF9051A3, 0x9EA92828, 0xD518CE2B, 0x4EA54CAD, 0x216C701D, 0xE9F889BD, 0x87DC92BC,
+0x49D52221, 0xD76E809C, 0x58850DA0, 0xFFC01213, 0xF36039F3, 0x640BF0E3, 0x85A6DEB0, 0x2B7D8059,
+0x9126D876, 0x688CAC88, 0xFD2BF9CD, 0x60FD3125, 0xED9D67C4, 0xBE4F9415, 0x118AEE07, 0x2621C6C5,
+0xE5A30D30, 0x1177FFC4, 0x9051C53F, 0x47C48B01, 0x8D4AF6C2, 0x1A9ACB1B, 0x7A6FA6D5, 0xD8631E8D,
+0xCFD20834, 0x3EC4AE59, 0x33B20CD1, 0x0407F3CA, 0x5BCADD6A, 0x3F13572D, 0xD5305EA4, 0xF15E5C6B,
+0xB7640FB6, 0x6615ADF5, 0x4C4DC22D, 0xE0AD9EEC, 0x4A87CD47, 0x194CCB65, 0xA6F0486F, 0x6DA01A04,
+0x78F774C4, 0x056B511E, 0x6013D933, 0xF9A5EEC7, 0x32A66365, 0xC19E36E5, 0x92749546, 0xE7E9C0B6,
+0xBA8B9A11, 0xC0071D39, 0x2617B608, 0x49A90BF2, 0xCFCA8290, 0x51F6911A, 0xA9B9C187, 0x8A31DE46,
+0xFE3A634E, 0x6235503F, 0x0F60FBD8, 0x6FD17A6E, 0x164DB21A, 0xB60F7E82, 0xF7082C77, 0x679C36F8,
+0xBAC74C2B, 0x8A9B7451, 0xC9A1E2D2, 0x367B4107, 0x5EA840C0, 0x227D285E, 0x3836D41D, 0xF90424D8,
+0x086FC8CF, 0x0EEE37A3, 0xE4D02BD4, 0x77777315, 0xBEECAAA6, 0x095529C2, 0xD8152EF1, 0x808F41B2,
+0xC35DB6AC, 0x259BA058, 0x1F69E363, 0x817BC5A5, 0x420163FB, 0x06620FF5, 0x15D2D3E8, 0xF3389F83,
+0xED4EB13E, 0xDC01D6DB, 0x678DFEFC, 0xCD10FF4D, 0xCC22F773, 0x26EC3939, 0xCE4F8014, 0xE69466D9,
+0xB030A652, 0x9A134FFB, 0xE6048124, 0xA8D829F4, 0x024FB915, 0xAA99B715, 0xFA210F32, 0xDE6C630A,
+0x87AD736F, 0x86B6CEFE, 0x1F58C8D1, 0x34C8C239, 0xD5D58738, 0x57225962, 0x771CD1CC, 0x5327404B,
+0xE43A05AB, 0xADBA7D08, 0xC3C64919, 0x3C3EE8F7, 0xFF277443, 0x4442689A, 0x2EF8D7BE, 0x456DB68A,
+0xEBAA5709, 0xEF29E3D0, 0x0B329958, 0x52B129F4, 0xCFD3369B, 0x1BA7487D, 0xE587457D, 0xCF08C59C,
+0x95AF47F1, 0x2BB1B670, 0x56699E03, 0xD121FD5D, 0xBA2FA1D7, 0xBD8456AE, 0x9E2304CA, 0x983CBD97,
+0xAFDAD727, 0x2A1B0B59, 0xEB566C07, 0x582A5092, 0x216BB9A6, 0x7A6E6E87, 0xC63F26D1, 0x43DEA08E,
+0xF486A10D, 0x48B5D917, 0x9FE7FC17, 0xCF7AE84E, 0x9A970760, 0xB29998C9, 0xD2D914F0, 0x1A41618F,
+0xA3B900E1, 0x275CAFCE, 0x20AED682, 0x558E4573, 0x7F081029, 0xC4273E28, 0x56191FCD, 0x198AF4BC,
+0xB95E4E59, 0x2DAA36C1, 0x76511657, 0x31172F9C, 0x09913B4B, 0xDE46DBB2, 0xA4AF891B, 0x9C4E28F5,
+0xE7E93E3E, 0x45017E36, 0x021AD5B7, 0xE298C71B, 0xC9C43EFB, 0x5491C603, 0xAD9D13CF, 0xFE796297,
+0x05ABC989, 0x5CEEB07D, 0x518C1CAF, 0xEA8AA2B1, 0x0D0B9426, 0x891E2C84, 0xCDC7EBE3, 0xFD6D357E,
+0x80366016, 0x00CD064A, 0xE8BBE5CB, 0xE36F84D2, 0x723F932C, 0xD604CE6B, 0x7243594C, 0x8F5D7D05,
+0xD9A52136, 0x40CCC637, 0x96A4BAC3, 0x5C0E8514, 0x25514CC4, 0x8B2A3B5C, 0xEF2CAC6A, 0x9D5BFD02,
+0x86F49FF7, 0xBE51CD61, 0x349D0486, 0xA8BC822C, 0x6221F68E, 0x83CB4712, 0x8C6FB95A, 0x25937ACA,
+0xBFD064E9, 0xD46DA074, 0x9D90AB37, 0x3E250559, 0x9650F590, 0xF331C521, 0x602DC069, 0x7E1952FD,
+0xE39DEF5F, 0x135833B9, 0x7DE8AF71, 0x21229A2D, 0xDAE09F2D, 0xD1336324, 0xFBB15708, 0x4B852BE3,
+0xEA9B559E, 0xD3350D31, 0x41152400, 0x42F72CA4, 0xD4FE0DF9, 0x0EB3DF27, 0x9A92DE04, 0xBF609AA3,
+0x1BEBC546, 0x9E0ED1E4, 0x7EF4EBD8, 0x06DE8DE3, 0x9228A837, 0xAB8FF261, 0x736817D0, 0x99CEE520,
+0x4EEBEB89, 0x0C6A5B54, 0x760137B6, 0xC3644648, 0x50A4E9A0, 0x6B6029A5, 0x5B700EB9, 0xC04BD95A,
+0x899F6A7F, 0x244D7493, 0x1A68F5C0, 0xAD4EE3D5, 0x65F5123F, 0x0B2181EC, 0xAFAEB22C, 0x77693969,
+0x0AB54D25, 0x546A0C4F, 0x4371074B, 0x96E413BA, 0x9413A6DF, 0x8286FBE6, 0x4396E3E2, 0xC689E8F2,
+0xED21BA75, 0x6181784D, 0xC0EE59CD, 0xBA2DAD10, 0x3806D0CE, 0xE3B8BE86, 0x1CD62013, 0xBD95F674,
+0xFD876B81, 0x71B4947F, 0xB6F8927A, 0x1AFEA8FE, 0x0624D58D, 0x7248DCDE, 0x51FF9974, 0x5C48B4EB,
+0x46C474CA, 0xF25678A2, 0x94B505D5, 0x441262FF, 0x775669D9, 0xAAD15BD7, 0x3B206B40, 0x249C9B07,
+0x62C7DF1A, 0xDA187DFD, 0x73321CD5, 0xF425DB40, 0xC743BD18, 0x34A473B0, 0x9711263E, 0xB02DEA1B,
+0xFA013314, 0xF1912BC1, 0xC9B1E2ED, 0x4BBCBF75, 0x3C90F798, 0xBF9203CC, 0x0E31BCC7, 0x9A3BE8ED,
+0x63BEBE12, 0xED97C225, 0xE84CDD08, 0x0726E956, 0x10120C1C, 0x1CD4723D, 0xD581203F, 0x54D61B29,
+0x78C9CF46, 0xA62044D4, 0x337F6D6C, 0xF145AF8F, 0xA3AFF663, 0x82E9E0FB, 0x8B95267F, 0x7ADC5461,
+0xF5DCC771, 0x261C4F52, 0x048B52E3, 0x059D80CF, 0x0A45FB6F, 0x39CFE8E7, 0x29EECC81, 0xF876A2AA,
+0xD388ACE0, 0x60806508, 0x7D43FA44, 0xA602707E, 0xED1BFFC0, 0x94C157B9, 0xE11477F9, 0x62FFDB70,
+0xF0D90E05, 0x69BA1D9D, 0xAFAE191E, 0xF029FAAC, 0x72D035E3, 0x08976DB2, 0x08E29902, 0x10561D09,
+0x499E54D2, 0x58DD97AF, 0x4B17571A, 0x51299B3E, 0x9422B96A, 0xBD9941ED, 0x43CF5768, 0x29B550B8,
+0x326238B8, 0x747BFDA0, 0xA6C72881, 0x2FD8439D, 0xBC829FF7, 0xC6BB689F, 0x2690B2E0, 0xFEABFA14,
+0x5901A5A9, 0xEBBADDC9, 0xDBDB6B49, 0x49A11FC7, 0x3C0F11E3, 0xA5942119, 0x317FC897, 0x020E8E74,
+0xC6B671D8, 0xD199E6FE, 0x23EB6DEC, 0xE3AAC3CB, 0xB64190CC, 0xBC228B29, 0xBC5FBA3D, 0xC0F9F462,
+0xB18E728B, 0x2AC17716, 0xB5FBB56B, 0x865C3C03, 0xFCE61B60, 0xF846FF73, 0xB41A3B94, 0xE3A4F540,
+0x5327B801, 0xC206939B, 0xE0E4A47A, 0x88AC3CB6, 0xC987AF51, 0x90408B6C, 0x5C5701DC, 0x25CE6AFA,
+0xC8D5A6ED, 0xCFD1689D, 0xDAC8AACC, 0x3783BA73, 0xB8F961D0, 0xD60C2A1B, 0x17A8E11E, 0xD063D033,
+0xAAEA362D, 0x1149F9EC, 0x1A5FE975, 0x68BB028F, 0x860D62E6, 0x9226AE9D, 0xBAA41964, 0x3C83252F,
+0x479E3DCD, 0x144FD2AF, 0xEB154AA5, 0x92183D30, 0x947A4C41, 0x4C8C11ED, 0x7C457AAA, 0xA0CC78E5,
+0xCE18C766, 0xC1A8EB39, 0x4E6AB3D5, 0xFA38F6AE, 0x593077AF, 0xD8739077, 0x2ECE9CA1, 0x7360B319,
+0x2875DDC1, 0x518D39F3, 0x4B9CD2E7, 0x53E7BC18, 0xB69445C2, 0x2A17DE87, 0x282F1F92, 0x31312C00,
+0x496F8702, 0xC9B2BF07, 0x5F702779, 0x23853EF9, 0xA9E0F9AC, 0x63131931, 0x1E73E3DC, 0xCA774CF9,
+0x38B2B9B7, 0x605B1CF1, 0xFF7EA14C, 0xA34AA0E3, 0xD89AB924, 0x0B901F6A, 0x490D5CEC, 0xF02B2002,
+0x5B4359D2, 0xC7434C56, 0xEF239EF0, 0xF5908D86, 0x121D3CC6, 0x9B9D474B, 0x9CCB19AA, 0xCE38C783,
+0xFEDF04AB, 0x53E6696C, 0x1BADD657, 0x14A953EC, 0x3A1CCF11, 0x227B2E97, 0xF1EC327B, 0x0FB596EA,
+0x497623D0, 0xA2EB7604, 0xBF23CB76, 0xC8DCA096, 0x68A682F6, 0x909EEAA9, 0x873F75E6, 0xD21016DA,
+0x6D9D6F82, 0x03ACA324, 0xEE40DAF7, 0xFB7C1CB8, 0x0A2BC4BE, 0xC53D8ED2, 0xEE0706E0, 0x3D5DB2EB,
+0x27CF2F4F, 0x7DC29D5F, 0xE47E0E17, 0xA8FF12BD, 0xDC37692B, 0xDB464772, 0x06524FA1, 0xE2958C5D,
+0x307E60B3, 0xFD8B3B8A, 0x8BEB9145, 0xFBE15AD5, 0xE54E66DC, 0x8C43D7DE, 0x29BE6B0C, 0x05E82721,
+0x6DCEAE3F, 0xDD02F4F3, 0xAE78110E, 0x56648C22, 0xAAEAD907, 0xA2571594, 0x62717F32, 0x6AB7AF9F,
+0x2CE0A13F, 0x00420EF4, 0xF22956D0, 0x303C08D5, 0x9F9A1A23, 0xC2513D78, 0xBC9D679C, 0xAEEB40A8,
+0xAF5F8334, 0x50A98527, 0xAC376404, 0x1373F4C7, 0xA25810A9, 0x7431A21A, 0xE40E3482, 0x0429F1EB,
+0xB7A76120, 0x0276D01C, 0xAAC970EE, 0x2F08F242, 0xBD2A1D1B, 0x474DACC8, 0x7FF56513, 0xC5656835,
+0x9B5AF797, 0x2EC771C4, 0x68BD28C5, 0xD59F6F55, 0xC9780A89, 0xE1A2BEB7, 0x818E32B7, 0x9F7D8524,
+0xEDA5F626, 0x89465676, 0xE46A3251, 0x982A0CDF, 0xAF1AA2A7, 0x2CA81106, 0x53AD3038, 0xE4DDA2E4,
+0x82B16295, 0x29D055A8, 0x515042FB, 0x38BB515F, 0x1AFABD5A, 0x1D0EE564, 0x8D159AB4, 0xDDFF6C6C,
+0x02D88E4D, 0xCFC94AAB, 0x7002B9FF, 0x83DBE0F7, 0xE59BBBA9, 0xE54AE718, 0x14FC437C, 0xCA1338FB,
+0x91E983D2, 0x3E2833EF, 0x7C4DD1B7, 0x2EE12CF6, 0x8A7FB172, 0xB40A845C, 0x17C91250, 0x9E82B1FA,
+0x0D12840A, 0x50231693, 0x50F037A4, 0xB38B10FA, 0xCF59E800, 0xC095BC6D, 0x51036AE7, 0x4B18A520,
+0x2E69FB3D, 0x9E367F6C, 0x6832EE5A, 0x5B11B364, 0x26DFBF3C, 0xD9032750, 0xD344EF75, 0xF38F31F8,
+0xE54A38C0, 0x2D708F4E, 0x2A9CC883, 0x88080CC9, 0xDB5C33C9, 0x113C4133, 0x970FD4DD, 0xD61AF0D6,
+0xF7DF3DAA, 0x72CF461F, 0x0E83576E, 0x7295597E, 0xFA444CDD, 0x948F5F6E, 0x18421F2B, 0xB7CD7C83,
+0xD9F0DB11, 0xECF86C5A, 0x67B13BF2, 0xA03C761B, 0x3302AE97, 0x967B6FD6, 0xA936B80A, 0x216BC8A8,
+0xCEF42582, 0xD2A3750C, 0x4433A79C, 0x4375B235, 0xB49E9130, 0x8F675490, 0xCF2E5A7E, 0xF473738B,
+0xCE6794A2, 0x091AFDCF, 0x0158A863, 0x5E3AEB76, 0x05961E71, 0x2948FD97, 0x799E48E0, 0x10268554,
+0xCC0B4818, 0xB72A022E, 0x005BE738, 0x65CB2D07, 0x8C34133F, 0x6D4E1DDD, 0xE25341A6, 0x145BC3E0,
+0x2B99F2E3, 0x6B21994F, 0x1B291813, 0x52D046F8, 0x9C016F61, 0x58A365FE, 0x79C9EFD7, 0xF771AA43,
+0x3961D9FF, 0x1D463228, 0x9041AA30, 0xB41C0A03, 0x5438AEA2, 0x03665364, 0xFBF37169, 0xF5FDDFB7,
+0xA8F28317, 0x783C07D7, 0xA51BBE4B, 0x6EDD0AB1, 0x250090D5, 0xF412B6B8, 0x1CDE0452, 0xC84A74DC,
+0x87BC8615, 0x0A8A4B89, 0x7A2C7E17, 0xA9B958DD, 0xA58DDE53, 0xE9D06789, 0x4FEE883B, 0x5953466C,
+0xA58A4434, 0xCDB0FA71, 0x352CEC8A, 0x2074B2FF, 0x70265CB7, 0xCBED7D6B, 0xB5A5849E, 0x4D3C3C37,
+0x4838D5B5, 0x9DF68689, 0x5E51341B, 0xE5AAC618, 0x97049FE5, 0x33FB1F00, 0xADCE18A3, 0x9EE62E87,
+0x3E3D5814, 0xC074AE55, 0x3B281446, 0x1E36BBB1, 0xC545FAF0, 0x90E4B8DD, 0xBCD465B1, 0xF2CF8302,
+0xAF4212BD, 0xC3E97947, 0x31ECB7EC, 0xCE6FA8E3, 0x122A0C39, 0x08486CEE, 0xE0547909, 0x90B6B643,
+0x23A62B97, 0x0187E297, 0xE4274CE5, 0xFD437D70, 0x47DD6F77, 0xE828DAE4, 0x778293A3, 0xDE21AFA4,
+0x7C6C25E7, 0x63BDC069, 0x3B870C9F, 0xA6846818, 0x743AE544, 0xA46E1918, 0xDEA38050, 0xB35D865E,
+0x5EE513FF, 0xD98FC52E, 0xCCCE44BA, 0x2E696362, 0xEBEAA51D, 0x3A2BE3F2, 0xC1297E2F, 0x720A2170,
+0x02A8A42F, 0x0C3415B8, 0x3FF890B0, 0x57EFC621, 0x3A108023, 0xF871639F, 0xB26238ED, 0x9232826E,
+0x33D2AE10, 0x5D6C7418, 0x862E5304, 0x47050CFE, 0x3F8D014E, 0x18DB898D, 0xB06C6B36, 0x8C61690A,
+0x64E22423, 0x0A7265B2, 0xF73B76AC, 0x3FF837C6, 0x24A42F3C, 0xEC853A92, 0x30E5436C, 0xBDCF7A59,
+0x4570F03C, 0xE32298E9, 0xB3E492B9, 0xA5E1D631, 0x29BA402F, 0x235C9B1C, 0x26D86DC3, 0x4DB89A9F,
+0xDBEF5975, 0x19707AB6, 0xB10A2A94, 0x7ABC5122, 0x3735713E, 0x04F3AEE7, 0x8824EA96, 0x9ADA4821,
+0x187B7AF3, 0xC5A88ABA, 0x1B7559D6, 0xF91F076B, 0x9E218CF6, 0x51B1E4C4, 0xF4B1EBC2, 0xB88F3745,
+0x9DB14E68, 0xABD52BD9, 0x505668EE, 0x3C77E66B, 0xD301F222, 0xFE0F27D7, 0xCF2E2BF8, 0x886E525C,
+0xCC7706B9, 0x11D7BAF0, 0xD28472C6, 0xB55BF474, 0x10C7B572, 0x2C100FDF, 0x92A201EE, 0xC2542858,
+0x84B3DAFC, 0x6EEF015C, 0x6F255531, 0x184E97CE, 0xB7951BF3, 0xEB7E7CB8, 0x05BF6D86, 0x7278430D,
+0x28786DF8, 0x434BA744, 0xF8C04569, 0xBC3AA792, 0xDE24F8B5, 0x0B9C572D, 0xDA9695B3, 0x5A54E509,
+0xD1D51A39, 0xDAE6249A, 0x07D8D662, 0x3C87ED82, 0x6DDFF34D, 0x890E7E54, 0x4200BC29, 0x45DE24D0,
+0x4C03B12A, 0x0CAB8FFC, 0x01A3A53B, 0x1385433C, 0xDBAB2AC1, 0xE10F7F6A, 0x0BA75644, 0x00229DA9,
+0xE81CBD4C, 0xF4D9268F, 0x244203EA, 0x006EDF74, 0x2B8C7663, 0xCCF65890, 0xD830FE51, 0xBD451F67,
+0xA8FB7E43, 0xBABFB289, 0xBABDD2B8, 0xECE88C35, 0x648B6FAE, 0x9FB25F27, 0x9C22C97A, 0x2C484507,
+0x49953354, 0x70C1185B, 0x152E497E, 0xD6666F77, 0xB7E17FDB, 0x66D7E834, 0xF82B252D, 0x3B099AD6,
+0x0DDEB682, 0x57824C17, 0x889EC358, 0xE71487BB, 0x96242BE9, 0x65559B79, 0xAD158004, 0x51AAE97B,
+0x5625E114, 0x53E9CE68, 0x7BAF432B, 0xD1952E0E, 0x65A8DCC5, 0x97D77C97, 0x0B1E0356, 0x4BAB0719,
+0x18B0473E, 0x3E47E844, 0x91284EF8, 0x14462B88, 0xE762688A, 0xD5194EEE, 0x1306AC0E, 0x213B4603,
+0x990473CA, 0xDB12B9B7, 0x548AB165, 0x27B0FF10, 0x13ABE397, 0x2176DEBF, 0xF720CDDB, 0xA2C3298E,
+0x72F54E2A, 0x87C94CB3, 0x7B858A71, 0x1E09EFE0, 0x81EBAB9F, 0x02A52A63, 0x147964F4, 0x8D3FC63C,
+0xA5E9086E, 0xA9CB6110, 0x1435E201, 0x1419C18E, 0xA957590E, 0xDCBBBAD0, 0x544908D4, 0x827CD2CB,
+0xD4D7F633, 0x17C84C7B, 0x326DA9A7, 0xD399C5E1, 0x5B89B414, 0xA8655C70, 0xFF8E6795, 0xEF4F7469,
+0x06FA5216, 0xB7F10D17, 0xC999BB88, 0xBBBF6F49, 0xA390BC72, 0xDAB75930, 0xF184BE4A, 0xA9549D0C,
+0x051403C9, 0xE93D44EE, 0x21B27511, 0x9A50D69D, 0xFA291F12, 0x948B7008, 0xE8D49441, 0x1E1281DE,
+0xABE5EF5E, 0x8782CBE4, 0xBDB1D8FA, 0xAE74112C, 0xE6DEA89C, 0xF49E5BFC, 0x57DD7547, 0x3B340D00,
+0x264C9CF0, 0x4DB9CB69, 0x235EE963, 0xC77F42F2, 0x1581A01D, 0xC19AD952, 0x788C3223, 0x9996E36D,
+0xD989CCFC, 0x64624E8A, 0xD467E4E8, 0x4A2F6181, 0xABC999A1, 0xAC0C707E, 0xB0D35045, 0xD7E4C16B,
+0x9193D8E8, 0xEF5A645A, 0xEFE5B04D, 0x0152FD60, 0x89A9788D, 0xDA6E0CEB, 0xF5EA7567, 0x0240B1E3,
+0xB5B7A126, 0xC4CA12CD, 0x19D77745, 0x70739B4C, 0xEC8DBC84, 0x6CAE3383, 0x9C0AF05D, 0x003B8D10,
+0x01568C42, 0xE1EE5634, 0xA99E68C1, 0x65FD91FC, 0x66E34346, 0x4D0E3CEB, 0xC1A2CC8F, 0xF89A56BC,
+0x04E71C7F, 0x094D0BD2, 0x9B1E55F9, 0xCD558CCA, 0x15FB131A, 0x2D6426F8, 0xD6434923, 0x41352BE8,
+0x0DF247BF, 0xAFA406E8, 0xD4FC6B7E, 0x40585D67, 0x6AEADB39, 0x5E7AF0AD, 0xF37476B0, 0x52A09076,
+0xE4BDF711, 0x3FE99843, 0x3D248F3E, 0xE2D4A1BD, 0x17662F84, 0xAE577626, 0x6E95A4FD, 0x54296106,
+0x57286225, 0xA2859B68, 0xD119CD44, 0x4FF5769A, 0x6062AD57, 0x714F61A9, 0x7478996A, 0xD3E45A57,
+0xF73D3370, 0x9C843E13, 0x0318406D, 0xC3706D67, 0x2B42F00A, 0x83F63775, 0x21E44631, 0x33673F6B,
+0x31386C76, 0xA430B5CF, 0xEC81DD43, 0xDE3B39E8, 0x9DAB9351, 0x797A6117, 0x2CCA9E14, 0x4F2533B4,
+0x48258FC9, 0x98E70939, 0xCE5F0C96, 0xFBE9F5F5, 0x1FFEECBF, 0x2FB9A0CC, 0xC2EAC6FF, 0x69BB06E8,
+0xD5F1474F, 0xC843AA43, 0x27016880, 0x7A3E70C6, 0x640C4FCC, 0x7C793B19, 0x73F897CD, 0x45F62281,
+0x9A9B78B4, 0xF7C852E6, 0x3D5032CE, 0x95AD8038, 0x83360C2A, 0x5F619760, 0x106C4E29, 0xC6DB72D0,
+0xD90C9920, 0xC4C7FDA7, 0xDB08D698, 0x4629F765, 0x2C191C56, 0xE8BB31AC, 0xA6EE38AC, 0xF9DB4F6B,
+0x8731B075, 0x2FB509F1, 0x155F1BAD, 0x5828A6AF, 0x9327CB91, 0x0FA69EE5, 0x6A432C94, 0xA4B47960,
+0xED441C64, 0x9E1E5B0B, 0x391D454D, 0x6C6F4A0F, 0x79FF46F8, 0x236827FD, 0x55A02EFC, 0x682588EF,
+0xFE9FBFDF, 0x3EBF73BD, 0x1F3E94E0, 0xBC8A5772, 0xDE418A19, 0xA4D436CB, 0x49C9FE70, 0xC06E0D1C,
+0x17C80F6F, 0x6522EF30, 0xECCE2576, 0xF59B9875, 0x42487A0C, 0x221CC6FB, 0xDF1F1E52, 0x687E66BA,
+0x0AF8ACAF, 0x7FEBA232, 0x7CEB4C7B, 0xEE5C8F38, 0x02D95B68, 0xC1E0020D, 0x2C7EE51A, 0xC83CFACB,
+0xEC1D1C1C, 0x81905F23, 0x47F7EC17, 0x45454960, 0xF42355D2, 0x410CB210, 0x219BAC83, 0x80E80E81,
+0xBC1B83FC, 0xD2AB6420, 0x2523C65C, 0xF8ABA1D1, 0x81EEAE4D, 0x757B46B9, 0xB97C85EF, 0xDA7ECCE3,
+0x7884C70E, 0x47879DC8, 0x8DFA8197, 0x26484763, 0x3BD8E842, 0x583F40EF, 0x0D32D2C6, 0x07210083,
+0x7877183E, 0x9E5E4F5E, 0xC0807872, 0xC4806FBF, 0x9D28CE47, 0xEDBF7F94, 0x71FC2537, 0x76F4B1BB,
+0x600372DA, 0x693721D5, 0xE328E461, 0xAEC54757, 0x7E1624B6, 0x2B207CE4, 0xA611F58A, 0xCC1BFF90,
+0xB74F5311, 0x48ED99A8, 0x9B7804D7, 0xC8B98CE7, 0xF918649D, 0xBE344F76, 0x3ABD2ED3, 0xF61265AD,
+0x885F156A, 0xAADC5C99, 0x819D1604, 0xA120E3D1, 0x225CEC7C, 0xAE037E81, 0xC64C8114, 0xC5A112F3,
+0x080265EB, 0x0063D4C2, 0x7066AFBC, 0xA33EB420, 0x9C968FCB, 0x4400212A, 0x2D893AA3, 0xC7E75F32,
+0x30E0348A, 0x4FD2D880, 0x1FD1E8C7, 0x84A827C1, 0x65D8AB1C, 0x3CF9574C, 0x6FDEFD18, 0x2D71DA26,
+0x503CD1F1, 0x872002B6, 0x73BDA2A3, 0x4992E6F8, 0xDD230CA5, 0x80256D21, 0x5DD1986F, 0x034EB2F3,
+0x9A22A763, 0x1BCAFA54, 0x1093EE80, 0xB26EA350, 0xE88CBFA8, 0xC574FC99, 0x9940DD13, 0xD6C04EB9,
+0x9F8854C9, 0x279E6327, 0xFC8B4383, 0x324CBFBA, 0x895B4867, 0xAE98C1C9, 0xCC06491F, 0xD2594E7A,
+0x5F5EA830, 0x36614050, 0xDE853794, 0x37F62442, 0x964DD747, 0x8E10B6AF, 0x61942874, 0x31D3CDDB,
+0x3941CBAB, 0x0362513E, 0xD23B1A8D, 0xCB01C493, 0x4E98413B, 0x030237E4, 0x9262F8B3, 0x04747573,
+0x4F52B436, 0xDEB6F19C, 0x47FBFBC4, 0x346C08BA, 0xCA553F6B, 0x1830E82D, 0x3AE126C8, 0x90E4370E,
+0x387AE623, 0xDC1996AB, 0xC644351E, 0xD3D76924, 0x94A1B4C7, 0xB5E45DB9, 0xD169E5C7, 0x439B0E0C,
+0x096CA39C, 0xEBD83E4E, 0x2DCBA20F, 0xCD698EF1, 0xF721954E, 0x8093F246, 0xA73ECF88, 0x06D66754,
+0x6738986F, 0xAEBBA1AC, 0xD940FDC0, 0xE05972B9, 0x915851CB, 0xF2C8F3DC, 0x7AA4882E, 0x94EE155F,
+0xB91DD6EB, 0x53741E95, 0x8875942A, 0xE6B7C1E9, 0x7C39EF9C, 0x89531300, 0x05CB561C, 0x75697AEA,
+0x3544910F, 0xFC958CC8, 0x55CADF7B, 0x7DE4728B, 0xF046DA6F, 0x3582DFC1, 0x347D872D, 0xC88B8A61,
+0xA71E2866, 0xECFAEA42, 0xF087F153, 0x184E47CE, 0xC00E2DF7, 0x0E7990D0, 0xEA3829F4, 0xD94127D3,
+0xF8CFC029, 0x45A136BB, 0x54218EF1, 0x0D048451, 0x4ED23715, 0xDFD73323, 0x0B924A62, 0x73FB0C83,
+0xEB9ACDC3, 0xE6C8DAE3, 0xB1CBB567, 0x8959DD13, 0x959C4A6F, 0x8BC855A9, 0xD7CEEF28, 0x59B79B99,
+0x23E8F18A, 0x2E58C6C1, 0x57CAD534, 0xC8F0F91D, 0xF5060A18, 0xA285E163, 0x94C46415, 0x89378509,
+0x465FB6C1, 0xCEC5B531, 0x247DBA2F, 0xDED3E167, 0xCC29301B, 0x1C19B2FC, 0x0D7D98DA, 0xB7B69CB3,
+0xEBED2BA4, 0xA7B89A92, 0x02A65421, 0x9035D447, 0x2A6D953A, 0x2BB1E014, 0x40A2F03F, 0xA75591A7,
+0xA4388C98, 0xAD200555, 0x87B822C9, 0x982F0393, 0x62124ED4, 0xEF39ACCC, 0x7E870A47, 0xE697C63D,
+0xF242DF94, 0x58274318, 0xABCAAF08, 0x6187FFAB, 0xA7D9BC8F, 0xADD5ED91, 0x1D7A7010, 0x5AD9F4EA,
+0x4F500CF4, 0x817CACC2, 0x0DF443F0, 0xDA9B2A67, 0x8C3561D7, 0xAA5C731A, 0x53451818, 0xBED66469,
+0x04231962, 0x893DD323, 0x1A2AFD64, 0x6A1220ED, 0x8DAAD653, 0xB5A9C8DB, 0x33513F8A, 0x92848DD1,
+0xDB631210, 0x8BCCD1E3, 0xA418E22F, 0x98DFA30C, 0xF99052F5, 0x60778874, 0xB53F7E43, 0x220BDB76,
+0xF0DC716C, 0x22B1CE8B, 0x64223A88, 0x7FF644FB, 0x78AC782D, 0x9632F2CF, 0x720F1147, 0x89F23F45,
+0xC3122EDC, 0x303B9E7C, 0xA3842EBC, 0x186F073C, 0x3093BE12, 0xA4ECD18E, 0xE733A1C6, 0xD235C8CA,
+0x9F6C2B14, 0x4E6DD578, 0xB78BCEEE, 0x73D75A65, 0x8E3B6346, 0x6BF8330E, 0x2E150520, 0x31973EDE,
+0x26AB436A, 0x323C70C3, 0xB555C71A, 0xD462BCE2, 0x81AA5F92, 0x18AC7F03, 0x10383A2B, 0x0B5CB00A,
+0x89E77C60, 0xF3C9C767, 0xBCDAEC38, 0xF21E396C, 0xB0A96B74, 0xA0A99C12, 0xDF852706, 0xB0A31333,
+0xD69DF93F, 0xC7FF183C, 0x0AAF6841, 0x06F64CE3, 0x4B83A74E, 0x6061F7C5, 0x701550A3, 0x709EC681,
+0x171E5DDE, 0x55BC8AD0, 0xC695289B, 0x0EC4BDCF, 0xE3C24BDC, 0x07B82327, 0x7EBDA34C, 0x51DC6593,
+0x8DB86DFE, 0xF0315354, 0xB34C03F6, 0xB9F94007, 0xE7E98AE8, 0x47871B2A, 0x9BFA9196, 0xD2D7E31F,
+0xF6969485, 0x9389B11B, 0xECD2A62D, 0x5863C336, 0x4F9CC985, 0xBF9A6339, 0x0EC6EFCA, 0xE9072505,
+0x6B3C38DD, 0x1322D595, 0xCA026C9A, 0xAEB90F4A, 0x08C00D47, 0x10BCA3E4, 0xBB5D2705, 0x5544E0F0,
+0x3FBB148E, 0xC9AC0D30, 0x3802C22E, 0x2D14AFEB, 0x81DD1CF9, 0x49A5841A, 0x3F3961BC, 0xF8089921,
+0x402C33B8, 0x59BC9E43, 0x65F2ED10, 0x594EF1AE, 0xBA7CD1E2, 0x08B100C5, 0xD7B34ECF, 0x7F1B1815,
+0xA8D05C8A, 0x8878AFDE, 0xEB074439, 0x432048DD, 0x355DDF30, 0xAB38A030, 0x6BD7C98F, 0x7F4EC058,
+0xE5B79A23, 0x6A3C29C4, 0xCB4DAEB6, 0x53ED073D, 0x9322224B, 0x34C4DAD0, 0x659F2F0B, 0xBF75B2B1,
+0xBB5357F0, 0x3015D5C2, 0x48210CFD, 0xFD073767, 0x62434E48, 0xE63BC2F8, 0x3F04B5B8, 0x9C022BB3,
+0x12BABD3C, 0xDB45EDD4, 0xF406AFB1, 0xB44CC7E7, 0x92C47073, 0x51E6342E, 0xB8CD7817, 0x18F17E07,
+0x3E9D0D35, 0x399DB7DE, 0xA0B85173, 0x65648166, 0x0EEBA718, 0x6AB41F3D, 0x84705E6F, 0x5E39C92C,
+0x62AFD046, 0x4BA65FE3, 0xFC63658D, 0x2FC9BE9C, 0xA33D9C3C, 0x5129A142, 0xBAE0E79A, 0x68007967,
+0xA383E488, 0xAADC7AB5, 0x78956605, 0x05DCB28E, 0x668ED6BE, 0x11A0BF41, 0x73E614AA, 0xF7A67983,
+0x19A6C9E5, 0x566ABCD7, 0x84FDAD83, 0x2D597DC4, 0x71E15588, 0xBB006C8B, 0xD98E8F72, 0x209EA6EC,
+0x5777B0D4, 0x14E38A4E, 0xFD74556C, 0xAE66554E, 0x13F09199, 0xC9D6696D, 0x592CE6EC, 0x243CDB90,
+0x02E8B373, 0x45249F79, 0x5BED18F7, 0xFEC37BC9, 0x78F5D6F7, 0xA260AAED, 0x6FACD9E3, 0x0F42EDD9,
+0x7BFEFAF5, 0x262A0021, 0x2ED01BCA, 0x5BDEBDD8, 0x980F3BD4, 0xFF8D42BD, 0x2F33387F, 0x1205FF01,
+0x6EA73785, 0x258217C1, 0x17E50326, 0x25968F46, 0x2073EBD7, 0xF9FBF02A, 0xC56FFDAA, 0x354BA73C,
+0x407B6343, 0xFBE01482, 0xDB6B052F, 0xB91CFD5F, 0xC17FA064, 0xDCF318FC, 0xE1E971DB, 0xA8606A64,
+0x858378D8, 0x7E149A09, 0xB6EB7274, 0x70014F6C, 0xBCB2FCCB, 0xC5A33B7F, 0xE16BCF91, 0x0A35FA55,
+0x030FB33B, 0x4C023CDF, 0x58B24A5D, 0x6E399926, 0xD69A4E7E, 0x5B0FEC0B, 0x4BDAE774, 0xC0604817,
+0x1D2F0F2B, 0x2D5B4236, 0xE7238253, 0x579A0469, 0x70854919, 0x16EF5FC7, 0xA6004ADF, 0xD90F7B77,
+0xB19C3470, 0xD4AAE8B5, 0x83520CA1, 0x5B7D4AA5, 0x3AFAE319, 0xFCB9BA2E, 0x5C18108E, 0xEF1F7E63,
+0xD195A8CA, 0xF2CFA6FB, 0x53218058, 0xEBDC33E4, 0x0C6C7755, 0x7CB20E9E, 0x5DCF0E3D, 0x546C16A0,
+0x6AA6B423, 0x1E084C31, 0x0A0F9C88, 0x2252D9F4, 0xBDF1E501, 0xA64C3043, 0x0E54938A, 0x76E42863,
+0x2BDA6A02, 0xAA80E7B8, 0x9F775408, 0xF33CA09E, 0xF0D03CA2, 0x03845CD0, 0x48F6A7A6, 0xFB03873C,
+0xA1738CB6, 0xFE81B06C, 0x712A4E9F, 0xE0496310, 0x7BC50DA3, 0xE38D7F27, 0xD150A18C, 0xCEE802C7,
+0x40A27F6D, 0x579D7EDB, 0x4C4C9C7F, 0x519B6C2E, 0x5AB7D5EA, 0x9DA932F1, 0x4AF0B4E7, 0x588EFDA0,
+0xE0B2D2A6, 0x6B23E2DD, 0xD083B64D, 0xBF27F300, 0x2F35CD4D, 0x1387E2C5, 0x517520E3, 0x12126975,
+0x93631ABA, 0x1413FC08, 0xC5100CB8, 0x342496EE, 0xCDA9EC12, 0xE47DFA38, 0x2F8F73B4, 0x0322EBE1,
+0x498ED5D9, 0xFC46A83D, 0x37639318, 0x50DF2920, 0xE8BA0061, 0xB3664B84, 0x2CC2C67E, 0x0DF5398B,
+0x8BD59217, 0x2C7A3970, 0xFE602EA2, 0xD135D057, 0x116784E0, 0x5987B7AD, 0x7AC908CE, 0x76F8DDDE,
+0x05554226, 0x4A19B62E, 0xA49BC1AA, 0xDB7DCC1A, 0xC0A5D42B, 0xBA22609C, 0x4F9B7BDA, 0xB44F201D,
+0x17672024, 0x6C9927ED, 0x5FFC734F, 0x167EB748, 0x35B9CC48, 0x73537142, 0x2E4F6334, 0xB2E1493D,
+0xA9A505D5, 0x0C7A25D4, 0x7C6CA18A, 0x4854412D, 0xB3EDFC5D, 0xBAB51EA2, 0xCC4E3EF0, 0xD301DA35,
+0xD4D74894, 0x5309046B, 0x11D0D4D7, 0x8F09EF7F, 0xCED5BB58, 0xBD48CBC2, 0x6492371F, 0x60AEAE7D,
+0x06C8E76D, 0x3005753C, 0x4507427A, 0x94AF090E, 0xFEAA3407, 0xD5456133, 0xF6A082EF, 0x751C58B1,
+0x07C4C93B, 0x21AC212B, 0x1A4DA350, 0xB7FB9984, 0xFD4F3006, 0xEF2EA340, 0xEED5E57E, 0x28682D7D,
+0xF46C4CEE, 0xE2FBAA71, 0x8FE5C7F2, 0x62DD17FD, 0x6ED8D062, 0x152FFC0D, 0xE5EC7346, 0xBFCF3D61,
+0x82BB1D87, 0x508D6B06, 0x986726A3, 0x6643D1EB, 0x733F0DCD, 0x1F573197, 0x2710CB58, 0x87290C89,
+0x572C1697, 0x3B6F8216, 0x1A4CC74A, 0x2EB056C6, 0xD1FA5595, 0x2D6543E8, 0x2C5C2ED9, 0x6E7ABC47,
+0x2431A143, 0x52D18738, 0xBD52DF7E, 0xD68513A6, 0x5B02E253, 0xBF918782, 0xC340DB19, 0x0EFE00FE,
+0x97695793, 0x0224BDFD, 0x020F6E17, 0xEE2DF3B4, 0xD300AB23, 0xEF47375B, 0xCD46370D, 0x7D7B2306,
+0x550BBC45, 0x6D359CF8, 0x0F307394, 0x64A93C8C, 0x60B70CC7, 0x69C5C539, 0x31864D3A, 0x320C44C2,
+0x64C2D3C1, 0x74831223, 0x12E7731B, 0xE68BE9F6, 0x4CA6C693, 0xF9BA780B, 0xC2736BD3, 0x2AA9807D,
+0x1B757C54, 0x5B0F52C5, 0x99D0D0A2, 0xE221FD39, 0x74845B75, 0x5766C0C6, 0x622F4185, 0x913EE127,
+0x330A758A, 0xA9ED60BF, 0xF3519644, 0xB55F5935, 0xE37EE72E, 0x9F02F710, 0x89A3D956, 0x821DCCA6,
+0x96A3C60D, 0xB519C50D, 0xC3ED4285, 0xC5CECA39, 0x105D3D4E, 0x3C45ABFE, 0x27040EBA, 0xFC7222B5,
+0xD8E0E6CE, 0x398D6B77, 0x878EE56D, 0xE320A73C, 0x860A3245, 0x47280D0E, 0x0CB8D4A6, 0x26BD9D77,
+0x384EE16D, 0x278D1407, 0xBCE95D31, 0x79752718, 0x570AB1C1, 0xA11A90F8, 0xB719C079, 0x049815D3,
+0x6A9FBB63, 0xD20733E1, 0xEF2F175D, 0x1B9ACB46, 0x1D4B26B8, 0x273FA79D, 0x0D78FF91, 0xAEC6B611,
+0x93CF3367, 0xC213B868, 0x8C137FAA, 0x046043D6, 0x86E74403, 0x4B84103F, 0xA2676501, 0x92652CF7,
+0xCED3C0F9, 0x6035844B, 0xE404B3CE, 0xA96E85BB, 0xCB059AAE, 0xAE725491, 0xBAC40A63, 0x035E3ADA,
+0xE490F8BD, 0x3CE4C5FE, 0xD2A885CF, 0x121E1E81, 0xC14D1568, 0x0507A73F, 0x177EE0B5, 0xA593E2CB,
+0x259D2659, 0x9CDA5EE0, 0x07D73D58, 0xE7C0E4C5, 0x4393224D, 0x0B8C5E70, 0xF840C56B, 0x8E18DA9F,
+0x66EFC76D, 0x9FCB9462, 0xD0FB3E6C, 0xA8BCEEDF, 0x88FBA126, 0x694B2BA9, 0x8348FE06, 0x1508915B,
+0xEB41A320, 0xEE5F5597, 0x4C6BD9F3, 0xEEBCA0DE, 0x33477BB1, 0x15316327, 0x51BD78CB, 0x0B02D3A9,
+0x64FD9222, 0xF0C6B5EB, 0xE75299A5, 0xC56E62EE, 0x0B647CAE, 0xE6CB84CE, 0xF9F61EE5, 0x898E984C,
+0x6F556DBA, 0x8431E4ED, 0x9C889BA6, 0xFC7C9C89, 0x3FBDFACD, 0x70D893F1, 0x189C2560, 0xF75DFE98,
+0x7D866D71, 0x16BB3438, 0x729D1CD7, 0x8BCD79D9, 0x218FDBF2, 0xF7C71E81, 0x9DC2C197, 0x73CA992A,
+0xD9795BCE, 0x156A2B92, 0x360A226C, 0x3223F098, 0x69609B0C, 0xF626B222, 0x13A451FF, 0x05E2659B,
+0xEA646FA5, 0xA5FB337F, 0xE030A738, 0x63725FEF, 0x06C06D99, 0xBC48516E, 0xAFB9EE7D, 0x8F45EAAE,
+0x414FCF42, 0x3207A7FF, 0x5A0DB008, 0xE94746DD, 0x3C60A596, 0x2931817B, 0x70BE30A5, 0x8A47A79D,
+0x984D96B8, 0x6FE7EDAE, 0x65D37147, 0xCE816BBC, 0xADEC7988, 0x0D312D4D, 0x78BEB534, 0xEFC0F8C2,
+0xB1A7488F, 0xC1C51DFA, 0x33FE1817, 0x1A76E200, 0xE8619B08, 0x0245AC7B, 0x9C60AC24, 0x1AF5A612,
+0x032811C4, 0xD340E6ED, 0xFF754FD2, 0x634D2623, 0x08DF951F, 0x8863453B, 0xBC6E4193, 0xD7B14526,
+0xFD742732, 0xF8D10475, 0x9E9FE012, 0x44278C0C, 0x60C53678, 0x8DA7BAA2, 0xE2A2758F, 0x7D1FA07C,
+0x79700546, 0x1EE3198F, 0xC12A2BAD, 0x741F1603, 0xE672EE51, 0xA888327D, 0x2D2126DA, 0xD04B14F4,
+0xC1EB3ECB, 0x62413C66, 0x41B74729, 0xB8014C05, 0x09CAED8E, 0x07DE9FBC, 0x9F48AE52, 0x7DA8D3EE,
+0x4E6B3A11, 0x5098E38D, 0x018E2364, 0x1D50CAED, 0xCA682249, 0xFDBB0C6E, 0x7CD75789, 0x2E8322CF,
+0xCFD9C56E, 0x6D0B4C16, 0x19354DD1, 0x6E0F1A85, 0x35F133BC, 0x05F2B561, 0x47F6D291, 0x13E5E9C9,
+0xFF6ADA3D, 0xEA9166B6, 0xB68F6C71, 0xAE104F7F, 0xE2A5D135, 0x3A2A0099, 0x36F5EF7B, 0x0C0AD237,
+0x25E524DC, 0xC7872E12, 0xAE1BF3F5, 0xEBF6F6DA, 0xE954263E, 0x2C3ADD8C, 0xF6A0DA96, 0xC30414FB,
+0xF8E4B1C6, 0x684F1187, 0x40278008, 0x31F78F98, 0xA7D15FB6, 0x5F2E7CC3, 0x030BF6DF, 0xB2A094B4,
+0x8E0A4F50, 0x0165022B, 0x0F187D4D, 0x9F4FE97E, 0x654C819E, 0x18E6A2EA, 0x4F6CA6B6, 0x54E4D842,
+0xF04DC145, 0x8CA2F0E6, 0x3E2426ED, 0xB0589F92, 0x239B526E, 0x31A6D7C7, 0x09CCB6BA, 0xA8F977FF,
+0x75484338, 0x1DEBE3E1, 0x3EACDA64, 0x80B67739, 0xB6580270, 0x39952CC4, 0x74606259, 0xA6A56723,
+0x79FA1CD8, 0x67591369, 0x3B2ED4BA, 0xAF59BC57, 0xA8D40A66, 0xCB993850, 0xDE1EB780, 0xA1B34D00,
+0x93E5FCFD, 0xCD9AE425, 0x2204B495, 0xE8BA5845, 0x94CC73C1, 0x4F8E9A1A, 0xDE1115A8, 0x6A7038EB,
+0xE72065F9, 0x4C4009D4, 0x2F99BC98, 0x1C5B960A, 0xA48C790D, 0x74EB2DD8, 0xB98427BC, 0x94BD5974,
+0xC1F7F402, 0xE7EFD672, 0x361B4658, 0x1251F5BE, 0xA4CC593F, 0x015E859E, 0x62F0AFEB, 0xA150C8C4,
+0x8B15C471, 0x47B2B504, 0x71CCC85D, 0x7995B434, 0x8D0BAE03, 0x6181D247, 0x35EE395C, 0x0C0ECF92,
+0x8B5EF199, 0x0E22E6AA, 0x549035D2, 0xA681EAF7, 0xE40903AE, 0x002AA799, 0x54BEDFA1, 0x09F498A2,
+0x5EB615C5, 0x2066C13A, 0x2C005FC5, 0x42E706C8, 0x20774CD6, 0xE5650B49, 0x84250489, 0x14D8473E,
+0x076AED30, 0x94837103, 0xE9510D30, 0x6403B9C6, 0xD8538F5F, 0x072FE6E2, 0xB95B6B76, 0xA19610A6,
+0xE25446A0, 0x607FDABD, 0x525A423B, 0x58A0234A, 0xBCDA94EF, 0xF31FCEB2, 0xFC84EA99, 0x859D787B,
+0x1AE07BA2, 0x766DE2CC, 0x6743A695, 0x63F32EA3, 0x8C08AACD, 0xAAA497B0, 0xC1C650BC, 0x4649BC46,
+0x3392B679, 0x93605680, 0x102D3642, 0xFBFC8E3A, 0xFDB4A7E0, 0x43E0F8C0, 0xBF45A83C, 0xF76B63BD,
+0x9676C78D, 0xCE4CA113, 0x35DBBD2A, 0xF1621C7E, 0x71B394C0, 0x0EB22BFC, 0x3685C753, 0x5C30B7D4,
+0x6C25AF0A, 0xCE2AAD72, 0x73CAF8F0, 0xEB02C1C1, 0xF96FDCDD, 0x0B53B939, 0xC1D79173, 0xC3AE3BE0,
+0x24C6B984, 0x7B6825D9, 0x470AB642, 0xCFE9FAC1, 0xD87383F0, 0xC555A44D, 0x1107A74C, 0xA52CA957,
+0xE7A995DE, 0xF82215CE, 0x420147B4, 0x96BF80B3, 0x11ECDD55, 0xEC9B7176, 0xD85F60B8, 0xF6B51087,
+0x97FD0558, 0x7B6C73CC, 0x49155AF6, 0x187CE297, 0xEEE36578, 0x6EED508F, 0xDDAD7B78, 0x7C47343D,
+0x140312E3, 0x2C808455, 0x1974362C, 0xA003B72E, 0xEE92B4E5, 0xF204E25B, 0x8B7D5D2B, 0x9ECA2990,
+0x50460468, 0xA47685FA, 0x4C01A7A7, 0xEE00934F, 0x54443224, 0x2251CFA9, 0xCAA5D043, 0x7BFB7061,
+0x79CE2AA8, 0x23183806, 0x7751B3B2, 0xE4DCE189, 0xA513228F, 0x7DBB5CCC, 0x8000E8D0, 0x33498E74,
+0x414A930B, 0x3AC39630, 0x894C121C, 0x6F6E3991, 0x00BCCFDE, 0xE2B6A1D0, 0xF528388E, 0x476FEA55,
+0x826F145D, 0x3904E293, 0x6C792EFB, 0xD5DBD68E, 0xE828FF9A, 0x84740905, 0xEBCE3432, 0x57B0CDD8,
+0x6097D7BF, 0x6CD19A09, 0x7B2515D8, 0xBBA3CF2E, 0x8306B6AC, 0xC700891E, 0xA88B94AC, 0x80C281D1,
+0xEA022ED1, 0x51FA2BF4, 0x5CB96B6A, 0xF189743D, 0x268CEF51, 0x704CF361, 0xCA46AB3B, 0xF0602CF2,
+0xDD66A0B2, 0x54B8DC32, 0x24DBCC9F, 0xE377ECD4, 0xF02C9FAC, 0xF2D13335, 0x65D9F34E, 0x24AB5E96,
+0x3B9C5A3B, 0x277697D6, 0xAC2A67B0, 0x0D2D81D8, 0x2660F369, 0xDAB0C30C, 0x0DBDB225, 0x42F60A43,
+0x72FD0331, 0xA266AB0D, 0xA0F34B4D, 0x04AAAB56, 0xEC5759CD, 0x6CB651A8, 0x4F34A9ED, 0xE13A432B,
+0xB2825814, 0xC9DA2543, 0xB8808191, 0x18062961, 0xA68A9CC5, 0x3B5BA014, 0xE90F9BB9, 0x9A94A173,
+0x4FD2E119, 0x4E848F17, 0x136099EC, 0x9776FAFE, 0xAE944E9E, 0x8CFB2772, 0x75E8E495, 0xF7364E92,
+0xBD9DA97D, 0x24E36233, 0x0A4D19CE, 0x631B512D, 0xE72B674C, 0xF9F2AA0D, 0xF6937352, 0x3CD05E50,
+0x2B27C65D, 0x5242576A, 0xDCE5FC1F, 0x4C79CD12, 0x197BB218, 0xF69B4F5D, 0x7FB68837, 0x2ACD41D1,
+0x1BCCC6CE, 0x3869ED63, 0xB0DCDE45, 0xC894015D, 0x9D87E2C7, 0x3FDD3B38, 0xD41D1E1D, 0x88590CE4,
+0x2FE1C113, 0x99FED4EB, 0x1ECED753, 0xDEA03CF6, 0x8B35F86D, 0xE8B57ED7, 0xD60ED17F, 0x4A573CA4,
+0x64180CBE, 0x7A297917, 0x6A18DE32, 0xC1298D49, 0x2FAF6DB0, 0x9FAC958D, 0xEFBC2C5F, 0x2C90C08A,
+0x7B35FB20, 0xE35F0AC8, 0xE1F43436, 0x4BECB674, 0x3AA4A6BB, 0x699511D4, 0xC00F527D, 0xD53CECAC,
+0xB0FCC511, 0x3DC97A31, 0xD07322FE, 0x3C9CF2B2, 0x848B57F6, 0x67EEB3DE, 0x8B01C142, 0x231259BC,
+0xCD1C9B91, 0x4244679C, 0x91A7F8F3, 0x5A6B9A9C, 0x31CED625, 0x17329BC2, 0x1B5A1484, 0x65144EED,
+0xFCD02636, 0x950F754B, 0x24148D42, 0xF8459B66, 0x9A4F6608, 0x28933ABB, 0x240AA608, 0xB5C6FD5C,
+0x1B77DBB5, 0x767644A6, 0xEEB9736C, 0x14AB9D0B, 0xF3E9D0C5, 0x6ACC65BC, 0xDDAB560E, 0x44DBC9F8,
+0x1E042891, 0x11410561, 0xAD301FED, 0xBA1AAECD, 0x328B738E, 0xB8A4D702, 0xE6C06BFE, 0xCABFC047,
+0x7A705DBC, 0x839C9CA1, 0x972FE5A4, 0x40E715CA, 0xBAB211CF, 0xBA20D38D, 0x7B55E9B1, 0x2B3E1F60,
+0xFF73CBFF, 0xB52CCAA8, 0xC7F43CA8, 0x325B722D, 0xB4E00219, 0x7540C74E, 0x712BFA61, 0xC72FF52B,
+0xAED47249, 0xBE3AE39A, 0x3C6A8423, 0x4CB3F042, 0x845DEA7A, 0x48F10849, 0x5B34929C, 0x3579F28C,
+0x7155D0B8, 0x2F2D47A9, 0xC9452030, 0xFAEA5E6E, 0x4E5377E9, 0x05C3E359, 0x579B9833, 0x357F30DE,
+0x83333D4C, 0x562B331B, 0x291EAC3F, 0xF9324886, 0x909B63BD, 0xB5CFB1A5, 0x39C62C3C, 0x8B35F217,
+0x734ECB33, 0x32E36157, 0x003495A8, 0xEEA7226D, 0x0EAF4B07, 0x3A346E87, 0xB354867D, 0x3762682D,
+0x157BABBE, 0xCC2B3956, 0x27982456, 0x98540822, 0x9770A322, 0xC27B8CD3, 0xF85BDBB8, 0x1E7B933F,
+0xF711C385, 0x50A08DC3, 0x13E5B979, 0x30DA4030, 0xC546C9CD, 0xD697B668, 0xCC698D5A, 0xA4BAEBD6,
+0xF9B8A735, 0x05A891EE, 0x7D489ABF, 0xA0D06B01, 0x139FA6FF, 0x1CC05FFF, 0xF5710576, 0x36442081,
+0xA9118DFC, 0xD3EDD897, 0x43D88DC2, 0x5A5F7C1B, 0x246F69BB, 0xEB5285C9, 0x1C49BCDD, 0x63C2FE89,
+0x7AA9E1D3, 0xA8B18154, 0x7CFEE42B, 0x9F0D196E, 0x52F7721F, 0xA0B30A5D, 0xB93FCEEA, 0x82A4EF1D,
+0xC6BFD84C, 0x6D20C7D9, 0x426CB5B4, 0xB046083E, 0xC9CE9FF7, 0x68EFC18A, 0xF797FB2A, 0x1F1618DE,
+0x9A652127, 0xEED4C263, 0x392EA7F1, 0x34FF5674, 0x0946AE90, 0xF8C0F1C4, 0x5D156B19, 0x7B644EEE,
+0xC7EC8C0E, 0xDD6D64BA, 0x4A48F3E2, 0x35065AD3, 0xF7E96954, 0x9E9D7E1A, 0xDA3D04F7, 0x6D093E1B,
+0x21D88C62, 0xF1E4DC9B, 0x350FDB51, 0xBA88566A, 0x1C3E38E6, 0xF20A1B8D, 0x1C813B07, 0x028A2100,
+0xAE459CD6, 0x51CCAFEE, 0x91242FAC, 0x03F7C137, 0x51ED12CF, 0x285F437D, 0x7687EF54, 0xB5D7FACC,
+0xCD6C9DE5, 0xE9933CFA, 0x9D82164A, 0x7A465A9F, 0x642D9095, 0xBEEE1170, 0xA9F7E924, 0x0A17D964,
+0x98A1A9C3, 0xF7441167, 0x0C7329B9, 0xAA8DF026, 0xCFB559C9, 0x22DD9B98, 0xED91AFCC, 0x788A4CDD,
+0x6EADDAC6, 0x6A5E5158, 0x4787F4FD, 0xF31A0503, 0x2E2BB7B3, 0xD8551417, 0x7BC27FE4, 0x11985712,
+0xAC9D1DA7, 0xB26283D7, 0x782E5096, 0x22371E8D, 0x6990A694, 0x4DD605D5, 0x80EF76DC, 0xEB4D87B7,
+0xB930957A, 0x4BCA3023, 0x17F7C5E1, 0xF7F9FE64, 0x67DD7FC9, 0x5F747D95, 0xCEA979AB, 0x6C4478FA,
+0xE4F33B2B, 0xA1F72DB7, 0x6BED9D70, 0xA35F77D0, 0xB1A52D57, 0xC981B946, 0x5F332CF6, 0x1F858762,
+0x6F2EDA3F, 0x44B7054A, 0x33072297, 0x8EB14F2F, 0x446B4E21, 0xAAEE4E4F, 0xECD71265, 0x88A7BC00,
+0x5ED7E687, 0x46E5DC6B, 0x16C39F4B, 0xAD5170C6, 0x1E6FFDB1, 0x13C7E019, 0x9F423851, 0x8B8707F5,
+0x74A09794, 0x5DF4F203, 0xCB2D5116, 0x5CF61B23, 0xAC39A93F, 0xE35212C7, 0x85DEB440, 0xA22DE216,
+0xE6452009, 0x605F480C, 0xD56E09F9, 0x98086410, 0x1ECC4BF6, 0xB3D31414, 0xA92DCFA4, 0x34C36855,
+0x850056E1, 0x70B8AFC1, 0x242A7A4C, 0x9C651ECE, 0x59EECDCB, 0xDA071C2D, 0xD3E4553F, 0xB51465F8,
+0x8F1BCD30, 0x1839828C, 0x0F7F1D65, 0xF254D47F, 0xDA311ABA, 0x44C788C1, 0x907F9944, 0x007D6C52,
+0xB351A7A6, 0x0C9F0392, 0x89EAD9EC, 0x7911CC8A, 0x6D48C982, 0x3D2268D3, 0x6FDECA91, 0xE1F9B221,
+0x5088F4A5, 0x1AC4DB00, 0x068566BD, 0x5DC3631D, 0xCA8C2B07, 0x0A148535, 0xE4817FA8, 0xDF1F5F4F,
+0xFFD686A2, 0x19FCF369, 0x89DAD255, 0x556AB0C8, 0xC219AD1E, 0x2D4586E0, 0x6B5C61B1, 0x6895B9F5,
+0x1A367293, 0x27F7076D, 0x43399837, 0xC53D1447, 0xC279DEE2, 0x0D64C71C, 0x231E2F9D, 0x94A71688,
+0xB6413E72, 0xC2F284D3, 0xE7E69933, 0x75FBF0C6, 0x79652A17, 0xC14086DB, 0x8AB7A3D2, 0x4E0CD468,
+0x134ABBB3, 0x0D38BD47, 0x61CDF788, 0x2C2D9FEB, 0x8D027548, 0xF43D26AC, 0x329D0694, 0x5A8D5719,
+0x6EEA028D, 0xCAA74174, 0x679D4AAC, 0x41EB42E0, 0xD8E13D56, 0x8A30BC1F, 0x2887DF9F, 0x4362EA57,
+0x5D949254, 0xCBC43B4C, 0xE6B2AD46, 0xA0BD1679, 0x20E36936, 0xED4AF7AD, 0x4061FF56, 0x77A93D67,
+0x05C66111, 0x3908A0DC, 0xAB2420A3, 0x7D132988, 0x9B79DA4B, 0xF307FDC9, 0x3B1D7D8F, 0x787DABE9,
+0xB7DBF455, 0xFE8D7A9C, 0x233C5F77, 0x8481F10F, 0xD628A0B0, 0xD6EEAC12, 0xCA927C57, 0x69F861D0,
+0x0F8BE4A5, 0xE2C4D698, 0x5133CCE6, 0x4314F808, 0x73D19279, 0x681A3FE9, 0x6DCCF1FB, 0xE7A6368E,
+0x587DADC2, 0xA7A09669, 0x576B2E85, 0x526FC630, 0xAA6AE901, 0x9BBC9BDE, 0xC36B688C, 0x302A1E0C,
+0xEC1EE811, 0xCD51ED4B, 0x0729016A, 0x80B34A4C, 0xB04A6DB8, 0x067A4F27, 0x835C00FE, 0x85045AA0,
+0x54C1BF27, 0xF60293D2, 0x4DC337B2, 0xDE7396FA, 0x04305E70, 0x1C455069, 0x115AFB2B, 0x8017338E,
+0x64DA8CFC, 0xDE0271BD, 0xF417F48D, 0x24AE9716, 0x766D8BC4, 0x5B43A05D, 0x8938206F, 0x6E85C130,
+0xDB0D0D8A, 0x365F7BD4, 0x7C359B51, 0xB5975669, 0x841CDB23, 0x4C3757EB, 0x638621AE, 0xA5532ACE,
+0xB954972B, 0x0532C8C6, 0x1B79D0FC, 0x66B940D9, 0xA50B7DF8, 0xD7B92DD4, 0x41A80EDD, 0x078F8AF2,
+0xA82DB215, 0xA1D235D1, 0xCDCA8DDD, 0xB4B2253B, 0x42C6623F, 0x61303B1A, 0xCCCADDDD, 0xDE5F8415,
+0x5B4427F6, 0xA5269FBD, 0xFB8ADC1C, 0xCCFFC4CD, 0x7C938EAA, 0x2163232B, 0x10671B0C, 0xC9EB3872,
+0x0C50E2F0, 0x3EDF5195, 0xCB39D871, 0x28BF8B8D, 0x4CCDCE44, 0x9292D579, 0x707B19BC, 0xF555F6E0,
+0x30B9AD20, 0x6A0A135C, 0x576F4AC5, 0x8B62A418, 0xBE20D59C, 0xBC3E5D78, 0xAE3F49AE, 0x013BE550,
+0xC0B362B3, 0x4148B854, 0xBAC1A1FB, 0x761D12A2, 0xA5237792, 0x2FF03A6A, 0xA254A79B, 0xB95F63BA,
+0x01882576, 0xCEB589E4, 0x7AFD4546, 0x832E6B2F, 0xF6E1D6D0, 0x20A03765, 0x8FA56B76, 0x3C91E78F,
+0x19787F61, 0x2A87E1A5, 0x89B29F24, 0xC8A99071, 0x7D4A7CD1, 0xA8BD9B44, 0x9622DC5B, 0xBF198437,
+0x064C8D44, 0xF81E7A7E, 0x3265998C, 0x870F4956, 0x913D85D5, 0x6798FD26, 0xB28C6113, 0x4C2CFFC4,
+0x50BBBE16, 0x2EAEC9EA, 0xA1B9B384, 0xA73B2C5E, 0x207514CC, 0xEE7FB218, 0x5B0C497C, 0x78A975E2,
+0x417AEBEE, 0x3111A70D, 0x670B765C, 0xE5ECAF1B, 0x74EFA997, 0x27F1AB44, 0x39E8BA2C, 0xADACAB1F,
+0x8ED57648, 0x5111776B, 0x4E18C180, 0x3D54E82B, 0xA8A39488, 0x613B9E76, 0x177E71E5, 0x68A610D1,
+0x9D637FAC, 0x05F68943, 0xDF7C6CC3, 0xD014BB03, 0xF82E4500, 0x9D7C0529, 0x475FDCE3, 0x32CCCA54,
+0x1B2511CF, 0x7CDB47FE, 0xD05F3D82, 0x5EB39BA5, 0xE0717275, 0x00ED3216, 0x313A0A55, 0x7649D54B,
+0x4B8CE911, 0x4BDFC6FC, 0x30764B82, 0xA7507198, 0xBB748004, 0xA3FF29E6, 0x19E35357, 0x9240B38E,
+0x0D60A802, 0xC7F111B0, 0xADD2EA69, 0x80C3B771, 0xB336A612, 0xA818BDF0, 0xE216BF13, 0x216334CB,
+0xDA311045, 0x12F545DD, 0x3CA8F7E3, 0xC37F4EA4, 0xF16E3B36, 0x789F780A, 0xE4CAF585, 0x44B6F9B2,
+0xC95EB0D1, 0x971723D6, 0xB1338DA0, 0x1A5A5F15, 0x8DD07B78, 0x21B0F6F4, 0x58CEDE08, 0xB6EEDA2E,
+0x6D679A2C, 0x29C1B312, 0x16B9E4E0, 0xA5C99162, 0xA4DFBF52, 0x68568914, 0x5BD0209D, 0x76AEAD36,
+0x9E01006F, 0x955B2EC2, 0xAAC8B641, 0x36641DAF, 0x7FD50A95, 0x1C24ADDB, 0xF43FE7AA, 0xE17DC86D,
+0x8630F6E9, 0x31020901, 0x9F46CF57, 0xFC05383B, 0x6BB3E045, 0x5B64E7CA, 0x68858A15, 0x79DD3AC3,
+0x771837B2, 0xBB4CB6BD, 0xEBA018D6, 0x680D3CC4, 0x1A547316, 0x5672E9D8, 0xEE4F8249, 0xC46FF58C,
+0x26157485, 0x2F0B8838, 0x42C520F3, 0x438B21FA, 0xECB96F31, 0x5A062FB0, 0xB5398E59, 0x2E790B1E,
+0x2C267973, 0x1BCEC5FF, 0x133653FC, 0x18458B06, 0x378E3D47, 0x94736FB9, 0x9607D81F, 0x014F53D2,
+0xD6E58013, 0x6D2E22F3, 0xC9E7383B, 0xBEDEC5D8, 0x46E53217, 0x84D1F864, 0x2973BA64, 0xE557078A,
+0xB04E9F27, 0x498E6758, 0x1240DEDF, 0x94C12F02, 0xCC1ABE57, 0xF437453A, 0x90B4F724, 0x716F1ECA,
+0x936EDDE4, 0x822CC8A7, 0x1575C6C1, 0x16683F4C, 0x58B9ECBA, 0xB6E35426, 0xCDCDBEBF, 0xEE88B639,
+0x7F5358A4, 0x245F3628, 0x8CF06878, 0x4CFE15A7, 0x6DE65997, 0x49397B4C, 0xA7D7D848, 0x67D26322,
+0x379E5555, 0x5172E98A, 0x0E72D15C, 0x48BC5997, 0x14C2D1EC, 0x62352055, 0xF052DF91, 0x19E1AD8D,
+0x833877ED, 0x8E78F2F8, 0x60C38B73, 0x7794F403, 0xF73E9FCD, 0x3F526EA6, 0x2283E5F5, 0x2295CB82,
+0x6073DD1E, 0x9589A8B6, 0xB1B085D5, 0xE8EA07DE, 0x5231F6D6, 0xD24C2CA2, 0x6EDD1DCA, 0x4793EF2D,
+0x2339C57A, 0xCE7CD77E, 0xCD5AE93B, 0x2972C192, 0x77D71690, 0x5724F722, 0x8FC609C8, 0xDB8AFAFC,
+0xFFA0827B, 0xAACA3CB6, 0x03D5F10A, 0xE5655625, 0xE0E8C0A0, 0xB3FE8AC8, 0x7A2F8723, 0x0627F583,
+0xC5EC6097, 0x19B87DDA, 0xF15238FF, 0x32C9EA48, 0xC5E4E5D4, 0xCAEC2DB7, 0x1821DE2D, 0x7A0FD404,
+0x0274BAF9, 0x6095FADB, 0xAC08BD48, 0x7A1D0F51, 0xD3164C76, 0x2765CC87, 0x1764312A, 0x1EFCC2A4,
+0x327D1B96, 0x0B3B6D9C, 0xF0C88EA3, 0x3F6DF531, 0xBF4C408F, 0x0EAAC364, 0xAE4420E5, 0xA808EA27,
+0x4FA41203, 0x51240C97, 0x3DA44528, 0x276BA419, 0x5A6D9A04, 0xC6655011, 0x3E4C6CEB, 0x16E80DA8,
+0xE3C46B96, 0x6C7B8D20, 0xBDC15F09, 0xAAC8E87A, 0x0881B2DF, 0x44686FF7, 0xC194C0D5, 0xBCC48CD7,
+0x952EB66A, 0x5F449B2F, 0x3DC80E65, 0x4EF4B1D6, 0x4735A26B, 0x146081C9, 0x18BEE1B8, 0xB4E59023,
+0x7AE01122, 0xEF1C6F20, 0xD5081208, 0xBD2B6875, 0xC1C95387, 0x11E48BD7, 0xCBB59435, 0xBA72EC66,
+0x3DDCA5AE, 0x95A27B95, 0x44AEBCCF, 0x27FC8818, 0x41BCD0B1, 0x4225079F, 0x0D235FC1, 0x790DCCB5,
+0x5C8D6441, 0x73BFA917, 0x0D9E9B41, 0xCC28BE3F, 0x887940F1, 0x1F962CD9, 0x081F3C03, 0x88A685FF,
+0x842701CF, 0x144AA26C, 0xE546A61E, 0xD668B640, 0x997C9EED, 0x211B4463, 0xD73AE5D8, 0x9F96D378,
+0xA5B7DA6F, 0x1F19A87B, 0xC30A714F, 0xA8AE3046, 0x2140CC1E, 0x9D941D1D, 0x5393B460, 0xCB353405,
+0x8DED99C3, 0xBB7EB056, 0x4C8CB1EB, 0x4F419098, 0x75CF7D45, 0x60A56A6E, 0x4F6CFBBC, 0x4F4EF791,
+0x0DC42B4F, 0x7FFCF071, 0x061BBA90, 0xB746609B, 0x444AEA7E, 0xCB0FE886, 0x56FF4060, 0xF7D40D66,
+0x0B9A4882, 0x7AF877AB, 0x8AFF0B88, 0xF918650A, 0x78EED88B, 0xE38D4100, 0x377C1DD7, 0x3F6FE51E,
+0xBFFA3752, 0x18241B3C, 0x4D767235, 0xE25A878E, 0x5AA1ECFD, 0xB7A39805, 0x28CB8398, 0xF81795B6,
+0xA181CD1E, 0xA624A8E1, 0x38630F87, 0x5E1C53CE, 0xA3B871F1, 0xB5B3683D, 0x1CB098DC, 0x732FD13D,
+0xE7F2CE65, 0x5AD728AE, 0x5B717C86, 0x824C1EE2, 0xA82B42AE, 0xE0752370, 0xE6298D55, 0x412BFD70,
+0x174A1E12, 0x4B04DEB5, 0x5E51B93B, 0x3AF43C6E, 0xDBFD7225, 0xE9B045A7, 0xE851322D, 0xA2D348BD,
+0x8BFB32E6, 0x0DB35D2E, 0x39CC3122, 0x20FBDF1D, 0x0796F0AF, 0xC27D678C, 0x4C0C63B0, 0x3A80541E,
+0x3A81B8DF, 0xFFBF6DE2, 0xC00BAFCE, 0x0CC6B2B1, 0x0622E953, 0x9C2752B6, 0x2544F557, 0x18405771,
+0xCBC8F69B, 0xB0EA5666, 0xFE685D49, 0x0010D3E5, 0x6E133F57, 0x14074F43, 0x0D66F958, 0x9B7D90F7,
+0x5C0745E8, 0xC80874B8, 0x0B3C75AC, 0x0C81AB93, 0xC88EB4FE, 0x1F2FE10F, 0xE4EC853E, 0x3CB80600,
+0xA761516B, 0xBD2B0C26, 0x39EBFA01, 0x85687945, 0xADB42E1B, 0xF0A86E26, 0x7F8E2D4F, 0x9946983D,
+0xEA0D5533, 0x72ECB175, 0xEC64A9D6, 0x11F34AB2, 0x1C64A3DC, 0x8CA38565, 0x37D57FD7, 0xF78B86F4,
+0xD5B5DDA9, 0x4133662C, 0x67DD90C6, 0xDB82722D, 0xE45879C7, 0xEB37369F, 0xACFD7A11, 0xCF1649CF,
+0xD966D60B, 0x53E6F62F, 0xAA17BF74, 0xA13056D0, 0xFE51AA17, 0xBC22CBAE, 0x7EFF200C, 0x7CFFB3DA,
+0xAFC5199C, 0x857BFDF4, 0xB832B855, 0x08F7569F, 0x586B1F67, 0xD3894453, 0xAA355744, 0xF004621F,
+0xF4C2E5D3, 0xAD8D97D1, 0x1EEA9A8B, 0xA8751FF6, 0xE2F42F63, 0x10AFA1FA, 0x1DB79AA4, 0x270C0C4C,
+0xFAAE9363, 0x1FAF6EAE, 0xCB857DD7, 0xF0BEC87D, 0x9309B4BE, 0x90FD6EA2, 0x4B6391F2, 0xCC0DB5E6,
+0x599AD6E0, 0x6FB5E275, 0x0293B2DC, 0xF9CAAB19, 0x452B8B7A, 0xFA1636B9, 0x12000AE6, 0xAB22E51C,
+0x569A0D7C, 0x9FE5F19A, 0xC4D6920D, 0xCBCBA7B3, 0x06768849, 0xC0DBF1FA, 0xE346270E, 0x2DF44AAC,
+0x7F80E46A, 0xAD32FB18, 0xE3B21A75, 0xF936D280, 0xFCE901B5, 0x3BA661E1, 0x5F1EDB39, 0xA4088BAD,
+0xA08DF5D2, 0x4094B0F2, 0x387E7EB4, 0x0994D536, 0x3DBDE857, 0x1B972C99, 0x040BED60, 0xD0704ABE,
+0x9CA01152, 0x8966D7A0, 0xBA28C340, 0x9D36E039, 0x79A3EFF4, 0xADBA0E00, 0xEC1BC15C, 0x0567928D,
+0xED4C45AC, 0x3FD63778, 0x6A764161, 0xBD4703B4, 0x7FF9C783, 0xB920643C, 0xB45B34B6, 0xC38190EC,
+0xB7AB7E5A, 0x8C2A88BD, 0x8E6E38DA, 0x9B9C8CC5, 0x0C3A3F2F, 0xE2ED3FE4, 0x1667761F, 0xC30DE4F0,
+0xDFB1EB30, 0x708798C0, 0x0D1F2ED8, 0x134B0279, 0x50D48C34, 0xD826BC3C, 0x7CE70224, 0x5F79DBD3,
+0x8BF3014A, 0x61399E4A, 0xFD8BB0F8, 0xDA5C0ED3, 0xF865387A, 0x968011BD, 0x19CE6584, 0xF7817AF9,
+0x72243B6B, 0x5DD661A2, 0x408A4601, 0xB888F194, 0x8A76421F, 0xCCF8CBCF, 0xCDCC3DBC, 0x8351C8E7,
+0xAC50D1E6, 0x5ECA547F, 0x52B50795, 0x1742D1DA, 0xDE0A5D65, 0xEA472875, 0x992B3603, 0x423BDCAA,
+0x3B4AF7FA, 0xBD6676A6, 0x1EE8DA35, 0x5D0DB86E, 0xD1601B46, 0x7A9D1D76, 0x24A7A6D8, 0xDC497EAA,
+0xD236E6EF, 0x10135A51, 0x3D7E593A, 0x53410F4D, 0x61D1BBE1, 0x4BE826E5, 0x85708B0E, 0x5C3F830F,
+0xBE4FE3BF, 0x8AA59FBF, 0xCF2968D0, 0x36990DC7, 0x8AEDD04F, 0xDC99B33E, 0xA89A1B14, 0xBD430779,
+0x112200E1, 0xE4FFCA36, 0x4A52ACCB, 0x6E3A3BDB, 0xA1403A23, 0xC7D2847D, 0x797352E6, 0xA01C3F84,
+0x7E71C33C, 0x0EB570D7, 0xA32F833F, 0x4638AA8E, 0x10F5AC71, 0x5579D408, 0xB16B7DD0, 0xDDBD5C1D,
+0x7D539F1C, 0x8C698F60, 0x900061DA, 0x5A43D484, 0x1DB25CD5, 0x62502A33, 0x1927BA1B, 0x293E8753,
+0xB7999D7A, 0x5AB59C8F, 0xA630C32C, 0x87220671, 0x87ED868F, 0xBF5FE56E, 0x194021F0, 0x432AB7D6,
+0x94D263B6, 0x104FAE57, 0x9C0B39EE, 0x90D8B0C4, 0x7DB1CD4A, 0x5513DB01, 0xB7786D57, 0x73C8C8F0,
+0x90739A0F, 0xA6A7CE3A, 0x1FF481D7, 0x0414692E, 0x58CDD654, 0xE7217961, 0x09BD3E6A, 0xE86D750C,
+0xA92FEFE0, 0x794D2703, 0x5D71C3B0, 0x6CA37372, 0x172D10EC, 0x853C8FE0, 0x62DB0EED, 0x63675C0D,
+0xCC48B8E9, 0x89069A40, 0x2BC49672, 0x3B3E0B9E, 0x306D9CE8, 0x51715F36, 0xB72BD373, 0x082D0531,
+0xACFD7320, 0xF3ED1FDD, 0xD31A6AA7, 0xE1BE0884, 0xE0733F9B, 0x986739D6, 0xD92D2A09, 0xC67CC3E3,
+0xE15760FA, 0x897BFFD7, 0xC8FE8FED, 0xF8147480, 0xEC93DF29, 0x8BA6A5A1, 0x9C81E110, 0x3806168C,
+0xF718AB72, 0xCD12942B, 0x7F18E4B1, 0x2AACD76B, 0xC41C8017, 0x03D0EC11, 0xD1CD913E, 0x0D439705,
+0x3B421A08, 0x5088433F, 0x21531E8A, 0x4ED5BBE4, 0xD8C961F7, 0x96271EDB, 0x2D9B537E, 0x3D4E243C,
+0xCEFC450B, 0x05F97683, 0xAB8B8038, 0xDBF346A8, 0x7ED39111, 0xE4893F0A, 0x1C631C5F, 0x78A4417C,
+0x610F3DC8, 0x438C6E4E, 0x40904212, 0xB0935EBE, 0x369A6EEF, 0xBB01BC96, 0x823C2856, 0xEE5C8D84,
+0x73221981, 0x452D15BA, 0x6938D927, 0x9BF7DBF8, 0xFFA467A4, 0x5BC6C1ED, 0xFD546816, 0x252320FE,
+0xCA37A7B7, 0x22ACB393, 0x7438B9D9, 0xBC498359, 0x410D7AE9, 0x515022CD, 0x684B759B, 0x11266A73,
+0xA1D9A353, 0x37C88B01, 0x433ABC26, 0xD5E5D424, 0x4D165EB2, 0x8DBDB431, 0x6C27E12E, 0xB6B2EF38,
+0xB4F818C9, 0x60BBE60D, 0x78167100, 0x5283E4DF, 0xAE40AB4B, 0x01E76AF7, 0x5C889FBC, 0x8C85120E,
+0x6EE569EC, 0xDC6E3B34, 0xCE222684, 0x98A92947, 0x8F8BBA71, 0xAD95DE4B, 0x2E310CEF, 0x5D4994BD,
+0x9F2BC9A0, 0x56CEDA44, 0xFB9016E5, 0xE3562D0B, 0x6B956314, 0xE85A7C1B, 0x0F57BFD5, 0x1D6B24B7,
+0x7D4C2E6F, 0x2E12E58F, 0x7B294930, 0xFA531B58, 0xF2569702, 0x5F2C9B2A, 0x6E25E7F7, 0xB272EA05,
+0x0664168F, 0x67850BD1, 0xB4A37ECD, 0xCDE246C3, 0x56EFDE32, 0xC14ED363, 0x210E3B54, 0x42CE2FFD,
+0xC4D2DA0B, 0x42A8514B, 0xC6B9C98C, 0x393E6320, 0xD6FC1157, 0xABF2B731, 0x8A7E0A65, 0xE45BA9F4,
+0x939B27CD, 0xF6F1C067, 0xF07BD9AE, 0x75833DBC, 0xD3C5A2B9, 0x4BF86D17, 0xB114694F, 0xBFC11099,
+0x941540E6, 0x467B4B9A, 0xF2691002, 0x63E5120B, 0x07971BF8, 0xD0BFC719, 0x9692FBD2, 0x2A92AA18,
+0x57E84560, 0xB83576EA, 0xF406B56F, 0x5F898E2A, 0x660675BD, 0x42175D91, 0x35EAD6DC, 0x9E895B10,
+0xC06B0C27, 0x6BF4EE3A, 0x2480D6E3, 0x8FA52C96, 0x33B27CEF, 0xF23B92B9, 0xA228396E, 0x2340D260,
+0x0D65E741, 0xBC9A5249, 0xBC805A1C, 0xCECD433F, 0x0507FAE3, 0x194B21E6, 0xF6C52929, 0x7243ECDC,
+0x6BB0E572, 0x616AF8C6, 0xA82EF0F3, 0x5A331FD0, 0xE818A5B9, 0xE807B474, 0x691CF8E1, 0x0B9BF172,
+0xADBB8AA0, 0xC683E0FE, 0xD08AA029, 0xA4C93DB0, 0x5B7E212B, 0xEC636465, 0x023402F2, 0xC5A75B72,
+0xCCB8F71F, 0x5EC3526A, 0x73DE1C6F, 0x406CE7C6, 0x8E4CAE35, 0x693E9435, 0x54DEFC85, 0x280A503D,
+0x4AC130F7, 0x634EC85C, 0x325D591B, 0x972A239B, 0x0863510D, 0x0F645C58, 0xC46ED3FD, 0x25542CF8,
+0xB0720428, 0x0679E9B1, 0x7EFFEB1E, 0x2FB58D73, 0xA099BBF6, 0xB425BC96, 0x183959A1, 0x513CE23A,
+0xCB6925F4, 0x60C0D55E, 0x8FEABA12, 0x49B633DD, 0xBAAA8A85, 0x5565A4E4, 0xBB01BC16, 0x1D277588,
+0x8965BA43, 0xBCDA8EDE, 0x1061F4C6, 0xC4EC2C04, 0x002FDC77, 0x8F9BF3CC, 0xCE01F430, 0x3F009E42,
+0x666E92A6, 0xC7949414, 0xFCF87011, 0x656F1E8A, 0x739EBEFD, 0x0146AEE0, 0x4310191B, 0x91354912,
+0xC844082E, 0x1C066719, 0x760BE80B, 0x4941C1BD, 0x7456AC6D, 0xD6B18AA2, 0x6C638DA3, 0xE1FF1576,
+0x318D6F57, 0x4A56232D, 0x721FFAF1, 0xABF62BDD, 0x989FD578, 0xACCD0B1A, 0x5288CABF, 0x5DA37833,
+0xD8D51886, 0xBD3647C1, 0x17AEA717, 0xE899423C, 0xAFF5FBD3, 0x6A39D27B, 0x03C638FF, 0xB121DDDD,
+0xDF8D0F55, 0x3463E23F, 0x15ED5CA1, 0x09DC7667, 0x42741205, 0x7263D75D, 0xC76F84DA, 0x6690E64D,
+0xBE012976, 0x49B7F3FF, 0x797DDD34, 0x2C5EA435, 0x871D89A6, 0x360A631F, 0xDE5F43B4, 0x8B351E3D,
+0x74A98F9A, 0xA0B2CA45, 0x4E71AC7E, 0xBDB52E46, 0x485082AD, 0x342AF83D, 0xDFC9BDCD, 0xB22E833B,
+0x71418D5D, 0x629FEAA5, 0xA345F53E, 0x5C988BDF, 0xFBDDCCD3, 0xD258BB57, 0xA334225B, 0xDE8A8242,
+0x4F765EFF, 0x3BCBC9BC, 0x1A0B2EDE, 0x1FC58B2A, 0x7C6EB47C, 0xDAA5330B, 0x487F2E96, 0x1ED99B42,
+0x150F9AC8, 0x60A31979, 0x697BF962, 0x9EB0447D, 0x60F5DD9B, 0xB10F9619, 0x36B744EC, 0x5ACAF594,
+0xA8B85EC8, 0x315509E8, 0xFF9CC62A, 0xBD7CB589, 0xFEF500CB, 0xE1AD063A, 0x8170DFEE, 0x1FCDB66D,
+0x591F050C, 0x16DD9A36, 0x64AADC16, 0x3E99E2EE, 0xD4CB4008, 0x9710C673, 0x4E02A6EF, 0xD41584FC,
+0xB3CC6B14, 0x263D6FA7, 0x633E5181, 0x89730D1D, 0x94FD5744, 0xF411B76B, 0x6DDA8C0F, 0xBD1D04DF,
+0xD3C85612, 0xFC868BCD, 0xB710121F, 0xFA75A685, 0x5491B0CF, 0xF971E96B, 0x3B21B894, 0x4E8272E7,
+0x0CA25A2E, 0xDCB49000, 0xF2DC9EB1, 0xA47EF2D0, 0x14E1BC34, 0x3D963E79, 0x38841B77, 0x25B51EBE,
+0x966EE47E, 0x0084B701, 0x10D61A7E, 0x51C04A06, 0x3A56677F, 0xDC0FE5AA, 0xE40DF065, 0xA4636466,
+0x5A40DF40, 0xED7A1847, 0x5086899B, 0xC6B9770A, 0x9229E101, 0x91670DF6, 0x289CADD8, 0xA68F55A2,
+0x0466B959, 0x10DD337F, 0x5E1A07F2, 0x9521565C, 0xB51660CA, 0xD965B5F7, 0x5A6DB72F, 0x8B2A974B,
+0x5D7C5A77, 0xCFB70F5E, 0xA9C03C94, 0x77A82906, 0xE2A38B7C, 0xCF9F64F3, 0x62DBC030, 0x80FCFD63,
+0x88EBB7A8, 0xFA1353A6, 0x1870C508, 0xE8A472DA, 0x9F3A2A76, 0xCAC7612E, 0x763CA0A4, 0x593B2F84,
+0xCFE7A234, 0xEB5C2274, 0x08C1BE26, 0xA1FDEE5A, 0xBA3C5BAF, 0xAE0E888D, 0xEB6668A2, 0xAE7EAFCB,
+0xAB0F6C54, 0xD67CBFB7, 0xBEF60121, 0xAB392A32, 0x01DDE68E, 0x25578732, 0xF4199539, 0x34034FDB,
+0x29754BC5, 0x50E16B49, 0xAB4D190A, 0xC5104DDE, 0xF79C89EB, 0x0522E4A4, 0xC50CE475, 0xFD544402,
+0x57F61C87, 0x322E307D, 0x39A915C7, 0x9DC2D9EC, 0xFBF3B86E, 0xA9A8192C, 0x97DA16D3, 0xB545C8BA,
+0xC0ECC08D, 0x7F5DBA51, 0x0A89EFDB, 0x9CE4279F, 0xC436637B, 0x0D5D2A39, 0xAC47C482, 0x84F47211,
+0x41EF9DD5, 0xFD22F322, 0xEFF64DD1, 0x4DA3219E, 0x58F38C5F, 0x54884DC4, 0x5D37EB3A, 0x8E8FBA6E,
+0x9B19CCC5, 0x430811EB, 0x52699A9F, 0x432F52A1, 0xDF547F2E, 0x8AA3A699, 0xD75B4998, 0x608F4F18,
+0xFD3E82A3, 0x8F6B8537, 0x209F2756, 0x4A9B5F47, 0xE9CED0DE, 0x3A051CDD, 0xD81CBFC0, 0x05B62B5A,
+0xACF6D81F, 0x86B9F234, 0xC6E68F35, 0x142DE5C7, 0xD657D43A, 0x35A28D80, 0x479B1D3A, 0xE28C0DF8,
+0x27A4CE9A, 0xB4ED83AD, 0xA08CD2AD, 0x740D53D5, 0xC5DF8C22, 0xDD409E5B, 0x52664A00, 0x9F2B4939,
+0x463EAAB2, 0x8C377516, 0xC3918CC4, 0x92D1D7B1, 0x6D0FF7EB, 0x5E6F35E9, 0x5D77FB8B, 0x4C6C1D55,
+0x4585A3C2, 0xD33823CF, 0x833EE5B0, 0xE1258E44, 0x95F16184, 0xB8F2EE99, 0x66E9AB03, 0xA1632668,
+0xF252F830, 0x42D42939, 0x9FF7879B, 0xB53D74A8, 0x8162E510, 0x7F5CF5C1, 0xF9C80EB4, 0x2397492F,
+0x773DF4A4, 0x7D36B55A, 0x1D598ABC, 0x8E9D8B4F, 0x5E3F971D, 0x99F84599, 0xCFDB9542, 0xA7EF2353,
+0x8C2B2D7D, 0xD22F8376, 0x5149EA03, 0x0C3285A6, 0xBBF89EEB, 0xA2026AFC, 0xCA366642, 0xDEFEB108,
+0xCC7E5D32, 0x07585EDE, 0x57BD88F6, 0x3535D18D, 0x2796A87F, 0x835AE13F, 0x29EC49B5, 0x648FE072,
+0x65B3A356, 0xCF8D2EFA, 0x4E4E4A4E, 0x8E17A2DE, 0xC0E4471F, 0xC1CD9AE4, 0x683D6972, 0xE51DAEE6,
+0xCF69BDCA, 0x93483C89, 0x2D85EB27, 0x29647590, 0x582A90B4, 0xDA538593, 0x0AF0293D, 0xD2CF2C89,
+0x866C3856, 0xC97DE2F7, 0xF0476A55, 0xA9084655, 0x04A74CE2, 0x5BFF2151, 0xDF51E466, 0x340A26E2,
+0x2DA91E23, 0x1204CE8C, 0x5FF4CBE4, 0x2F3B694F, 0xEF73DEB2, 0x4F78CCD4, 0x13B94AD6, 0x6765AAE3,
+0xE4238E12, 0x04F1F2F5, 0x22B4C9D4, 0xC2552440, 0xD549C2D8, 0xB63AFA5F, 0x4F851F69, 0x690F1A3B,
+0x6EBCD972, 0xC843CD81, 0xCF726F91, 0xB4E5BDFB, 0x58DEBC1C, 0xB32D95BD, 0x63A4FF48, 0x74EAB228,
+0xFC313FC9, 0x00F10399, 0xB8E76B9D, 0xA702B16E, 0xEEE0B695, 0xFB611538, 0xD4882BE6, 0x10BA2D9B,
+0xBB33EBDA, 0x966922D1, 0x3DB81B3F, 0x24E371E8, 0xCFEA288D, 0xEC425070, 0x86A56BF1, 0xFEEF2599,
+0x8E745D1B, 0xBCB55D3B, 0x71B9BEF1, 0xC128B8C8, 0xB2AC1103, 0x3E3FD8A0, 0x66628486, 0xD49C7B4B,
+0x27DA5FF8, 0x093AD5A1, 0xDBF292A0, 0xBF1F2ECD, 0x9065CD5D, 0xF111CF45, 0x0B5A3378, 0x98C111B8,
+0x055EBA4F, 0x1008ABFF, 0xA1F07BDF, 0xA3C82E5A, 0xEB35993C, 0x319512D3, 0x2EE26880, 0x0855DA1F,
+0xC30F72DC, 0xC4A4DA0C, 0x96C68A55, 0xEE4812D9, 0x217560D7, 0xF83A508C, 0x2167D9A3, 0xE56F4BEF,
+0x195003B9, 0xEC2919F5, 0x84796172, 0x8F8A73D2, 0x31DB7704, 0x1FA34D60, 0x8612BC56, 0xF89B61B4,
+0x0678BD2C, 0x715F611D, 0x539F3643, 0x3219DCB8, 0x8656B8DC, 0xE64242B7, 0xEA23CB66, 0xC83A3A49,
+0x958DFD1B, 0x888DB2DC, 0x20F09289, 0x637BD030, 0xACAADF2B, 0xC718C6C6, 0xB3AAAF0B, 0x614B814C,
+0x52D0C973, 0x80C8D5D9, 0x7E6D01CC, 0x90236801, 0x515242B8, 0x9F913BD4, 0xF077017A, 0xD5D10C3A,
+0xA188DB66, 0xEFB3D074, 0x64604CA5, 0xAB6B2B8E, 0xDA6B6BC0, 0x433ACE2B, 0x7F484BFB, 0xF6527E35,
+0x8ADF71CE, 0xBB0A0832, 0x5F6E0DB3, 0xDBD5D0D0, 0x3F5A5A2B, 0x7603B388, 0x370AC581, 0x65AAC2EC,
+0x60DFE345, 0xB6E03BF6, 0x3EFBFBCE, 0x2468E224, 0x4D56BFB8, 0x3135DCFF, 0xAB253423, 0x4203311E,
+0xAAE03C7E, 0x0D4CD467, 0x191DC2EE, 0x1F883851, 0x90C7A6FC, 0xE39A1B95, 0xF63C2CE9, 0xCFDB7783,
+0xC0085C59, 0x90C90D26, 0x39845D0D, 0xF7DFC948, 0x87095B03, 0xA009D876, 0xB4E80F99, 0x3C16AF1F,
+0x8D2A19A3, 0x6BBCC4E5, 0xBEE4D9A0, 0x7ACC7827, 0x5142BAF7, 0xAF23D313, 0xEE4FF65E, 0x2D463E23,
+0xE266502C, 0xA544BE7A, 0x42FE2FE6, 0x2B957860, 0x20332B6B, 0xE2D9CB3D, 0x7330D49F, 0x170F4D79,
+0xA859AA54, 0xFB2276B1, 0x0EC07E62, 0x58B9BED2, 0xFB347A98, 0xEB25876B, 0x5E37528B, 0x9F2ECAA1,
+0xFA03B668, 0x30A0964F, 0x304AF3A8, 0x022DD97E, 0xFDEBA9D7, 0x051A966E, 0x8A7BD86F, 0xF3DB401D,
+0x9F77BC7F, 0x77AFDCD6, 0xA7A44568, 0xA1EB8FE8, 0x86191E06, 0xEDAD91C9, 0x6EFF7C12, 0x2A5EA5D6,
+0x872B8CE9, 0x23E1DF2E, 0xBA4B5408, 0x891022BB, 0x8D9BB0AE, 0xD844F00D, 0x4E97A07B, 0x15196146,
+0x2F89B9BA, 0xC1A7F733, 0x9ACFA3A1, 0xB2899EFC, 0xC2A91F38, 0xDF9248C4, 0x0185F43E, 0x7B659F4F,
+0x87BF7806, 0x4AD5583E, 0xBB19E8F8, 0xEE0ACA9E, 0x8CBD35BB, 0x681DBB65, 0x1DFC06A3, 0xB5D5062C,
+0x4E598191, 0xE3170867, 0x6D45BC04, 0x2BF8DCF7, 0xF26B27CD, 0x16A2ACFE, 0x50876872, 0xA686B837,
+0x1F790A0A, 0x49DC8A83, 0x851331E1, 0xC6E8A9A2, 0x32DDE39C, 0x04404109, 0x8B8C2556, 0x7142F324,
+0xD6E78DBD, 0xA8908034, 0xD6D71AE0, 0x866CD5C9, 0x915E6E8B, 0x6BC2C215, 0x08E2FC53, 0xAB27A9E0,
+0x5287B8DD, 0x1FF670D7, 0xEC40CB5D, 0x524C3FC6, 0x6C6FF42A, 0x8178CDE2, 0x5F684C25, 0xCC84733E,
+0x0443519A, 0xC10242CA, 0xE8F442D4, 0x3FBA5804, 0xA7442FF6, 0x3ACA0544, 0x0A377AD9, 0xE94AE25A,
+0xB1FBE045, 0x83834AEC, 0x2F11C169, 0x851749F8, 0xCB28C482, 0x68197561, 0xCF7923AE, 0xF4EC7BBF,
+0xDC7FF90C, 0x12E37025, 0x91DED1AD, 0x3AE363FE, 0x1DC619CA, 0x9CD3B86F, 0x0708C89F, 0xEDCB219F,
+0x0FA3EF6A, 0xEAD2FC8F, 0x6E5A1361, 0xB5C4C74D, 0xAC12B764, 0x339DFEE9, 0x6833066A, 0xFF495407,
+0x0337CAAD, 0xB11CEEB4, 0xDA64C6AE, 0x49C6D83A, 0x31BBF77C, 0x835FD18B, 0xA718AC93, 0x00BCAD55,
+0x7E7305CB, 0x2BE726E8, 0x21E64155, 0x74F1B259, 0xA0E0F261, 0xAB5A9540, 0x306B7E5F, 0x0708DA30,
+0xB36F236B, 0xBCD88C25, 0xAFCE094F, 0x78A5EAF0, 0xBDC4BACF, 0x7B2498D6, 0xDD4294F4, 0x0B70FBD5,
+0x9D502371, 0xC282BE9E, 0xF79FAF42, 0xBBFC2907, 0x2411F591, 0x8DB0C290, 0xAA4547B8, 0xEAF8914A,
+0x3B918C54, 0x57237DF9, 0x52EA8703, 0xA7C92153, 0xC1D1E825, 0x7A92C8B3, 0xB024B0D9, 0xA6183325,
+0x62DF76B6, 0xEE402006, 0xC067CC1B, 0x452F80C5, 0xA16B7E36, 0x30BFF6CF, 0xE5E2DBC7, 0xB1DF6264,
+0x7ED27581, 0xFE9E5DC4, 0xE310362C, 0x83441C79, 0x484E2212, 0xA43EA7D1, 0x60FF6B99, 0xC5942AAC,
+0x1554EF63, 0x42887B0F, 0x103198FA, 0x5A854185, 0xEC1498C2, 0x1D29D870, 0x39D16249, 0xB6D03FAD,
+0x7BC4A3B0, 0xA328CF90, 0xF0B7031A, 0xD10AF140, 0x6890398D, 0x484E66DC, 0xB212FDEB, 0xDBC55C6E,
+0xCF602EE1, 0x1818F24C, 0x9A160424, 0xC6EF3892, 0xDE7F4C0C, 0x80DD8251, 0x882C7A47, 0x13206288,
+0x2144F5D1, 0x85F0AB2B, 0x85A2E6F5, 0xF8D146C4, 0x37898139, 0x9539A1B6, 0x645AC633, 0xFCB0ED60,
+0x6EC9BB89, 0x7165086A, 0xD5C71335, 0xEE4EA404, 0x395C8AFE, 0x7BBBCA67, 0xB5CF4196, 0xB0FEF031,
+0x8CAD28C8, 0x30EA6E13, 0xEB1B92DB, 0x3FA7F458, 0x0002A9CE, 0x7D62E01B, 0xF5D23D00, 0xBD6C3BBD,
+0x5E29FBD6, 0x2031FADE, 0x9F1B678D, 0x81EE1509, 0xE328332A, 0x69CE067D, 0xA668B62A, 0x21DF023C,
+0xAC4C9DB0, 0x0B0D6877, 0x916D3F7C, 0xD4D70E20, 0x8E9E6DA7, 0xE3F054DD, 0x7AAA921D, 0x72972367,
+0x708E902C, 0xFB5BC3CB, 0x8247A203, 0x5D01600C, 0x79D71093, 0x972D6F06, 0x4BF195FB, 0x116E6978,
+0x20ED8901, 0x1A3E962F, 0xE3B9EFBA, 0xB09FE00B, 0xE3E38587, 0xC18EE07A, 0xCB3FF20C, 0x2D441F65,
+0x2D12556E, 0x7BDA02D9, 0x8DFCA2E2, 0xC6A5736E, 0x966A49C6, 0x2A94AF9A, 0x21F8A97E, 0x5F1D0C19,
+0xBE8F8E69, 0x0B2BDE5E, 0x770F9709, 0x0DFD384C, 0x568B1977, 0xCA8ADF72, 0x3B58106D, 0xAECA6BAF,
+0xDC2EFE48, 0x7D3CCC1D, 0x50EFA74B, 0xD8DB5154, 0x259B63BC, 0x573CFB88, 0x0722091C, 0x267D4C73,
+0xE71CD51B, 0xBF0F4B85, 0x73013632, 0x184E6BF7, 0xDEF40D56, 0x8A487D17, 0x75936A2A, 0x57819F6C,
+0xA6DDB0C0, 0x7519F08A, 0xE18FB13D, 0x08C0A38A, 0x8BA364F8, 0x12867EDD, 0x96063692, 0x4136C311,
+0x5A3AA14A, 0xA8A8E3EA, 0x9881E844, 0x468BB61D, 0x5285BF2D, 0x65CACF90, 0xF1FBB470, 0x5115D52C,
+0x2D3DB764, 0xD581E746, 0x3CC9E72C, 0x637AE033, 0x9E87A1EB, 0x890C9ECE, 0xD747796C, 0x831DFD3D,
+0x1129D2FE, 0x18199AA8, 0xDCCA4780, 0xFF7936EE, 0x54A8EAB6, 0x386819E7, 0x2C26006F, 0xE628E689,
+0x85D8BDE0, 0xBCF533CE, 0x3533E360, 0x8AD34A72, 0xF3B0F733, 0xF3CC5803, 0xE11B1B9F, 0xE41C3B97,
+0xD303D558, 0x2106C0EC, 0x74F62248, 0x8D433C6A, 0xCFB55DD9, 0x6E8AA99B, 0xDC7C70D8, 0x770F8737,
+0x66870C69, 0x02C6A9BB, 0x3D0F07D7, 0x2AE17F83, 0xD18BFC91, 0x7F0BEA6C, 0x60F930B4, 0x5010CAE4,
+0x8B67411B, 0x1DD2B988, 0x2F786EE7, 0x3707D293, 0x785C7DB7, 0x4DB654DB, 0xC5871A59, 0x7419DE3C,
+0xBAE7C6DB, 0x1AAD0464, 0x26DB028D, 0x9BB79CBE, 0x7A16A2DA, 0xC54EA363, 0xFAD2847C, 0x87DBD05B,
+0xED9219C0, 0xFE5B4687, 0x92A9D381, 0xA7D1245D, 0x84C663DF, 0xD2CF98C0, 0x6FC11080, 0x9CCCD086,
+0x92A410F1, 0x5727AE24, 0x5A5397CE, 0xEB42D5A0, 0x00DAA948, 0x09C270B9, 0xD35DE3F1, 0x10E21885,
+0xBA2CD15A, 0x610C8856, 0xEA9C7FA7, 0x19403110, 0xC095B67C, 0x4648E03E, 0xF79F6AB8, 0x9BEE241D,
+0x1B8C7695, 0x0B5F3738, 0x3A6E3AA8, 0x48D42FB0, 0x01E9C742, 0x33594576, 0x02E45BA0, 0x78FB0FCD,
+0x9DA02293, 0x8972D610, 0x88DF7491, 0xF6DFFE5C, 0x40152E6E, 0xCA2BB241, 0x697B1DB7, 0xD1A16E7D,
+0xCFB544C1, 0xB1F4B749, 0x35357EEC, 0x3A28B866, 0x3BD57D29, 0x72455350, 0x85568D37, 0x938A5FCB,
+0xDAE3739B, 0x04D9608A, 0xAB0A582C, 0xF174A904, 0xB9D3D79E, 0xEE0988A3, 0xECB5C418, 0x2AA1ADA6,
+0x76F2F23A, 0x01EF7576, 0x4B23D9CF, 0x57FCDB70, 0x7DCF3306, 0x70196B49, 0x726349EB, 0xDDBC54B6,
+0x9945F0BD, 0x17AA2F51, 0xF6A162EA, 0xD79BE1A9, 0xB91FCCE8, 0x30617037, 0xC0421A6E, 0x2D7E8197,
+0x545D9665, 0xA5B3D026, 0x066AB49C, 0x06FD5D72, 0x3381030E, 0xD58C7301, 0x9B06DB6A, 0xD891D74D,
+0x1B54F28D, 0x79CFF5B1, 0x1E3134AD, 0x5534CBC4, 0x204EAE08, 0x408F10D3, 0xE9C7DD0A, 0x880B2BB9,
+0x0ECE6FF1, 0xDC412797, 0x8565B9F7, 0xDCDFE064, 0x285B04C9, 0xAD30C6B5, 0xD2799BF2, 0x2605D2A1,
+0x374738E8, 0xE6A236F6, 0x3EEDFDDA, 0x6B3D5311, 0xDAD2CB18, 0x8569B838, 0x13C8940F, 0xFAB2C147,
+0xF6D08430, 0xA64D40DD, 0x22FCD007, 0x0C72DFFE, 0x1215DD0A, 0x30E1CBF3, 0xB6767A29, 0x1D4533B4,
+0x95E414C2, 0x693EE63A, 0x3A55070F, 0x78391602, 0x728CB8F1, 0x4AE86117, 0xD4BFCD8B, 0xBAA0176D,
+0x8E8369D2, 0x0FEB0620, 0x57FAE46F, 0x518A24DC, 0xCE15AAAB, 0x42417622, 0x7A4D9195, 0x806DB441,
+0x44A24B5E, 0xDC13D870, 0x29FF8A78, 0x14C76469, 0xCA70F555, 0xD69E9ACD, 0x4521664D, 0x3D01425B,
+0x15F3F23E, 0xF58802F8, 0x7DA3B7F8, 0x09B22DFF, 0xF28289AE, 0x169D40B2, 0xC7999EEB, 0xFF340705,
+0xCB1B7447, 0x74C27636, 0xA1211C64, 0xA25F37CC, 0x5CC35C83, 0x3EEDACA9, 0xBC10D248, 0xE2763053,
+0xA142D355, 0x5920BE48, 0xE74D6929, 0x47F80126, 0xCA7016AE, 0xCA3B4721, 0xEF19DD25, 0xA345E801,
+0x4A1E7EF2, 0x51576124, 0x362423A7, 0xDB896F16, 0xFDB515C8, 0xA664760C, 0x9728D404, 0xA927EED2,
+0x0238D74B, 0x3EB20B81, 0x75813DB5, 0x03036C54, 0x6800A868, 0x97622119, 0x188A86BF, 0x14231C36,
+0x87AFC0F5, 0x0A8A02DB, 0x04AA874C, 0x96330C5C, 0x7B7DC976, 0xC1ED4E74, 0xC8E0BC9E, 0xFBAAB049,
+0x3FA68960, 0x841C2F1C, 0x11DAF804, 0x228AF3A5, 0xC28CB657, 0xB0C475F7, 0xEA9539AC, 0x86119D1F,
+0x5E4588A2, 0xA9CF24AA, 0x9FF1F54C, 0xD73ED890, 0xEB8DE282, 0xBFFDBB0C, 0x8AAB8E03, 0xC78F4B2B,
+0x4B57BB45, 0x7861570D, 0xAEDBA12B, 0xF157D111, 0xF406575F, 0x0D5280D6, 0x1AB6C6D5, 0x3841742E,
+0x853D6EA9, 0x2CDD198D, 0x18B2C450, 0x43ED0F21, 0x5F1287CA, 0x2185765D, 0xD27F393C, 0x465059EB,
+0x0A88A485, 0x37BC7F83, 0x799129AD, 0x9A29FBAB, 0x31E2FA0B, 0xC7471143, 0x48398E33, 0x3FFEB845,
+0xEB23DBC7, 0xECB9EF54, 0x0E2CFBDF, 0x3C4F9072, 0xD55AC85F, 0x04F7801B, 0xC62C15E2, 0xBB031AF4,
+0x1634EE42, 0x83E2CB09, 0xB8282D18, 0x07DFE580, 0x0E80A440, 0xC1303FF0, 0xA4DD15E8, 0x85EF476C,
+0x56E25FE9, 0x3030A053, 0x7CE49196, 0x438FB610, 0x29BAD37A, 0x079EA2E0, 0xDBBAFA1A, 0x81A67A05,
+0x90D29F0F, 0xE8E14A51, 0x2ADF8DF9, 0xB4E7886D, 0xCD9D12CF, 0xA09CE449, 0x334A6D9F, 0xA4DE9E4E,
+0xC72C5F02, 0x9DFD81C3, 0x2580CE72, 0x911372A4, 0x0BBA5CC5, 0x0DF229B4, 0x02738598, 0xD2602BDC,
+0x8235EEC9, 0x28C023EC, 0xEB9A4767, 0xE1070DDC, 0x767896D8, 0x8A7A0B84, 0x0FCD1A72, 0xFCD15AFC,
+0xFA7639BB, 0xAABADF22, 0x7F2E4431, 0xB259C608, 0x25CC4C4C, 0x9061EF9D, 0x50FCDC8C, 0xD8BB6A4E,
+0xEA35AE7F, 0x36D119B8, 0xA08DE49E, 0x929E9BCA, 0xBC5C4D5C, 0xF42184C8, 0xEC7D8D3B, 0xAFEC39CE,
+0xF4B2D3B4, 0xB52E89C5, 0xBD6CB51D, 0x7762F8F2, 0x2AB5A9C5, 0x26B56851, 0x4EC10AD5, 0xC6E8B4A8,
+0x4083570B, 0xE4D67E27, 0xF07FB6AA, 0xA8630A98, 0x25C55C05, 0x18DBEC84, 0x240E0FCE, 0x07F1D6AB,
+0xB42534DA, 0xDA00AC87, 0x107985F6, 0x39521145, 0xA5F02ED2, 0x37E0637F, 0x5E1B9B13, 0xAFDBE047,
+0x7303E84A, 0xC4FA2DB6, 0x7C274EBF, 0x113CEC4D, 0x207F5AF3, 0x5A417D06, 0xBFF81B90, 0x9DCA12B8,
+0xEB79DEED, 0xD93839B5, 0x0D2C4326, 0x133E6298, 0x58D4AA62, 0x3FFFF1F7, 0xA6D0D33B, 0xCF4B9370,
+0x41922EC2, 0x0E65A523, 0x056AC929, 0x83729F61, 0xE9F11F1D, 0xAC8E9509, 0x9DE91E92, 0x09D4DBE9,
+0x460623CE, 0xD7E08973, 0x28E92210, 0xDCE994F1, 0xAB54123C, 0x50E353AA, 0x41778C6B, 0x344F864B,
+0x76A38B7E, 0x48CA161E, 0x2CF37C5A, 0x32335975, 0x6496758F, 0x9A242A51, 0xE18CC42D, 0x95E67270,
+0x614DCE5C, 0x374D810D, 0x0A936B0D, 0x64A62E03, 0x7ADC5FE6, 0xBAE14E74, 0x0B0B9D28, 0x1C9B1411,
+0xC2E96CB3, 0xF6C5A162, 0x499AA991, 0x95C1C8D7, 0xA4095211, 0xF101D9CF, 0xD76C35E8, 0xDF930812,
+0x2860BEB3, 0x8569EB89, 0xF485FD4A, 0x9316165F, 0x55CC0DBB, 0xF210095F, 0xBF881F77, 0xF3D52B94,
+0x381DC778, 0x31EA9BE0, 0x72583645, 0x1CC0A66A, 0xCC71F87E, 0x4DFF6F3E, 0x9EB07CC4, 0x6C3E0C21,
+0x14C6279D, 0x9F9F0391, 0x02A31881, 0x89C082BB, 0xCABFF9CB, 0x6BA6809D, 0xF220A08D, 0x13C33CE5,
+0x7DCE64BE, 0xE330064B, 0x77D88E2F, 0x586F6895, 0xEB2581EB, 0xF638EB82, 0x8F7E50BA, 0xCAFDEC36,
+0x29455D05, 0x9DFF2898, 0xDCABD83A, 0x3D29153C, 0x0669F6B5, 0x121E7978, 0xFF60D759, 0x526697E5,
+0x3CDDFF8C, 0x3E22C3EB, 0x02D1D52D, 0xEE6E2C3A, 0x7ECF4A6D, 0xB8D6FD22, 0xA9FE43D3, 0xAFA6A2E2,
+0xDDCCA5EF, 0x45ADAAF6, 0xF43A5ABB, 0x2577CA9C, 0xD24CC9D4, 0xCF71F589, 0xB15129C8, 0x808C3A42,
+0x1F841C1C, 0x69BB04A6, 0x46E3AB8F, 0x0BA265FE, 0xC21A1942, 0x5D098000, 0x4766F0BB, 0x4049C102,
+0x9BC247CA, 0x2E0E92C5, 0x5A5E9800, 0xD3B53DDC, 0xE70733CC, 0xE5011472, 0x28C9B5FE, 0xCED8601E,
+0x373026FE, 0x6442F090, 0x0114BF0D, 0x37887ADE, 0x79BE41AA, 0x8A2FC687, 0x36ACD006, 0xD9304BCE,
+0xFF69BC6B, 0xB81D7357, 0xEEB700E2, 0xC8E5AB38, 0xC523FB98, 0x2CE0C24B, 0x93DF905E, 0xFB6D7B7E,
+0x94D96296, 0x800CA8C9, 0xCBB69D9B, 0xCDE98B48, 0x3A9A95D3, 0x022E49E5, 0x39EC018A, 0x9CE9A5BC,
+0xAF551C97, 0x8C91B71B, 0x55E8FD04, 0x913C8BEE, 0x49F22AB2, 0x1921F7E8, 0x7DDC7226, 0xBC0ECAAE,
+0xBF175E32, 0x89CFBFD3, 0x50274DE6, 0x8DFC3246, 0xEF6CA70A, 0x1422075F, 0xA70FAD92, 0x83C0184B,
+0xCCCB4EF7, 0x7776A553, 0x1EB96648, 0xEF14F53F, 0x62F53F23, 0xF2C5C73B, 0x1E15CF76, 0x1E1377EF,
+0x3E4A43DF, 0x825BA698, 0x96E5893B, 0x040B32E5, 0x7831717F, 0x8A29C45D, 0x27003F21, 0xDC0B53CE,
+0xB571C54E, 0x445E9EE4, 0x9BFE0FE4, 0x23A2A15C, 0x081869DC, 0x4C7024A8, 0x79DD2785, 0x810B1F9C,
+0xA4C6FF4C, 0xC39C9C0E, 0x54E5C848, 0xC2B8DE26, 0x1FB0DF3F, 0x38265114, 0x3EE200F2, 0xDBF5DDF4,
+0x6419CF35, 0x20300E06, 0xE901F6F5, 0xC4803EE3, 0xDA7AD525, 0xEEB32C6D, 0x1DFA4BF3, 0x0A1C8339,
+0x319B469C, 0x4BA971CF, 0xBDF0780A, 0xC528E9BE, 0xE40F8DFD, 0xCCE6DDD1, 0xB6403BB1, 0x54A1705B,
+0x03CE0415, 0xC4A8986C, 0x0CB1A59B, 0xA8342AEE, 0x24ED8F1C, 0x2FA2A6BE, 0xAC6DAAE3, 0xB5D872FE,
+0x5B2EA4CF, 0xE68107F3, 0x77EA9546, 0x63A101F2, 0x730B52CC, 0xA08B0DF0, 0x766EA23A, 0x6C3A55B9,
+0xF28A95D5, 0xC5E07BBD, 0x00F8D838, 0xB008A076, 0xE3B3EE44, 0x252DD34F, 0x4DE9793F, 0x9F55BF4A,
+0x06D566FF, 0xCBF6FA3B, 0x66201C0E, 0xA93577EE, 0x3C62A94B, 0xE62D518A, 0x7429E10E, 0x97574FE9,
+0xAAA0039B, 0x03BCFB92, 0x0814E3EF, 0xEF663004, 0xE2C98B10, 0x24CAFA9F, 0x046D9643, 0xE7AD45F7,
+0x8679E688, 0xA242E163, 0x7630A5D2, 0xBD81359D, 0x087A07C5, 0xC476E8D6, 0x6A4BE7A1, 0x11E74891,
+0xC61B9D9D, 0x51BCBBBF, 0xC27BC001, 0x5994E3B4, 0x107BB381, 0xBEE12D17, 0x1F2918B3, 0xEA22C031,
+0xE7FF3702, 0xF2043DF8, 0xEB70B907, 0xE7EDEC2E, 0x24D7F90A, 0xC7B449D0, 0x39DA2B20, 0x973FFCC2,
+0x9F15D267, 0x646F0473, 0xF87CE38B, 0x15656947, 0x1D373EAD, 0x46A9F971, 0x16A995EF, 0xC24B34A5,
+0xF62BA5EA, 0x4048962A, 0x377258DC, 0x4ECC2946, 0x150BA596, 0xC586F59F, 0x2A858F82, 0xA000A6F1,
+0x4AB89772, 0x5CB3AEA2, 0x8BDF56F5, 0xA957E37E, 0x840C5E47, 0xACB8EF8E, 0xF94FA97B, 0x791750DF,
+0x36199CDC, 0x595600E0, 0x3297E183, 0x4F45F7F2, 0xE6E277CD, 0xCD914E06, 0x3FDE08D9, 0x07E274AC,
+0x9E03A739, 0x79EB99BD, 0xC4DFE450, 0x10B0EF84, 0xE1A1B3C1, 0x47A4CA68, 0xC2BDCDDE, 0xE64FB7F3,
+0x32AEC806, 0xDB04A33F, 0xBA8E6B89, 0x6772F74E, 0x85AD090F, 0xC841F738, 0x15F683F4, 0xB9098E68,
+0x31B5F01B, 0xF13E66A1, 0xBE676664, 0x91966B78, 0x2D0E5DC2, 0x6D3901F2, 0x4595B848, 0x447D816C,
+0xC800ACF6, 0x6EE4A2AD, 0x0DCB2B9D, 0x667E1AD4, 0x91D008C0, 0xCB84C7CB, 0xF83E49BD, 0x75EC41E8,
+0xE837916B, 0x1B5F4A54, 0xD93BAEA7, 0x9A7A283E, 0xA1D6E631, 0xF4E81483, 0x020FEB25, 0x3D9ED70A,
+0xB8F2065B, 0xF6EF4D4B, 0xC4C740FA, 0x87470DBF, 0x0E465A84, 0xDD88AB8B, 0x2D2949B8, 0xC702908F,
+0xE22E0A90, 0xE9DE590E, 0xD912056B, 0xC59155EB, 0xAD52AC49, 0x43D2942A, 0x497563CA, 0xCC0C268D,
+0x85D4F709, 0x2312B34F, 0x34B336EB, 0xB4859892, 0x7B3E2632, 0x30DF267F, 0xB93F6F13, 0xB9FB2899,
+0xBFC32C55, 0xE74C8A7C, 0xB04BAEFE, 0xA5474587, 0x5DD76396, 0xD5B3A3DC, 0x2384D177, 0x39A9D1AC,
+0xCE2CFB62, 0x186DBB90, 0x8599504A, 0x4A4BF673, 0x58765415, 0x230A9268, 0xE276DB42, 0x9951F745,
+0x96874B13, 0x02BC71DF, 0x47945B68, 0x0E0B5D4B, 0xDDBF57EC, 0xE03491B6, 0x889A019E, 0x4CB38D9F,
+0xE4F9B787, 0x9D97075B, 0x1C6A9F9B, 0xEF9C5AF0, 0x6CE67B55, 0x54903EF8, 0xE46D1CAA, 0x7ECD4760,
+0x91F82A8F, 0x5CCD5754, 0x4EC6846F, 0x39BAEA8F, 0xDE8B932B, 0xBA44A872, 0x20459592, 0x7DD70D32,
+0x5D895FDD, 0x4AF257A7, 0x710DEEA4, 0xF0B1783F, 0x373D6D70, 0xBADE2E95, 0xB9DB71C5, 0x5759617C,
+0xB794DDEF, 0xC529C881, 0xBE0B5C15, 0x6BCFA3EB, 0xA80E4778, 0x2B9080CA, 0xA95A01C1, 0x6F63A873,
+0x9BDFE335, 0xD0D90C26, 0xC35F3425, 0xAE40D937, 0xC541764A, 0x7E1B48A4, 0x03151753, 0xFCDA217D,
+0x3F49CD65, 0xAC0FC580, 0x6D37FA50, 0xEE9C710C, 0x7FA9375C, 0x18BAE1E6, 0xB06F04FB, 0x731F5B1E,
+0x5CB23BDA, 0xFABB0F5C, 0x026FA1FD, 0xCE320F5E, 0xEEAA2E1A, 0xE4BC5E22, 0x2A434197, 0x22059947,
+0xAC4EF7D1, 0xC887EE6A, 0x038583CE, 0x3001A1B4, 0x3AB922F5, 0xF8D9CB1C, 0x6346C9AE, 0x9936FCBE,
+0xF5429F23, 0xD8A2ECCC, 0xB4311234, 0x9696840A, 0x50E3AAFE, 0xBDAEB25F, 0xB59A91E8, 0xE6C9FD7D,
+0x58CED712, 0x9653F25B, 0x1B865C4E, 0x4263836A, 0x1C5FC30A, 0x279F1702, 0xBD22FD48, 0x8DE92DE2,
+0x95B579B3, 0x743420DB, 0x962C694B, 0x901E2495, 0xF5B05F8C, 0x39721EA4, 0x6B70CF72, 0x0CE1332E,
+0xBB9C55E0, 0x4C85DD60, 0xF4B16B46, 0x41B8028A, 0x9EE56A2C, 0x9A7521A7, 0x07AEDA8E, 0x3D640CF1,
+0xD7346E8E, 0x0AB61FF7, 0x64FD73A8, 0xEEDF558F, 0x8185D333, 0xE4F7D436, 0x15AE6299, 0xD62CDDD1,
+0x74E5E0FB, 0x4D94B509, 0xEF0096B1, 0x54F1C077, 0x130C5F7E, 0x0B929569, 0x186B82EB, 0x72722717,
+0x649B21F7, 0xADD857C3, 0x9DDB95C1, 0x03D1E82D, 0x5C3F39BA, 0x7A7B53A6, 0xCCD4B31A, 0x50B0B436,
+0x42A89FA5, 0x4D78602E, 0x4280F71C, 0x5ED4C6F5, 0xE501880E, 0xEF321396, 0xEFDDE2CF, 0x1C4A059E,
+0x2CFB4699, 0xD591ED04, 0xED9D624E, 0x97162B94, 0x33155D94, 0x16A4666C, 0x4664A065, 0xD8309258,
+0x14A6AFB4, 0x3585DB97, 0x0C0B94D1, 0x5FA83487, 0x8021EEB8, 0xC3AFE506, 0xBB020E67, 0xED885B94,
+0x7EC1602E, 0xB43689E5, 0x80B72CEC, 0x280A473D, 0xBF192D69, 0xDD55A60B, 0x9619CF2D, 0xD9F99480,
+0x3FC7AA6A, 0x30294C4B, 0x0A3B4BC4, 0x6F505157, 0xBD8F38FB, 0x3A01E0F7, 0x20E74CE2, 0x03BC247F,
+0xDEFCF647, 0xC39FAA32, 0xCEAFFCE7, 0x21E1A31F, 0x45C127FF, 0x5C25C6C6, 0xE83ED033, 0xC9EE7689,
+0x4FBE08F7, 0xCB68460C, 0x6876E3FC, 0x1C40799E, 0x4A782F65, 0x0FDF5ACD, 0xB23ACF9E, 0x1855C1CD,
+0x0AB468C9, 0xA7B5B5BB, 0x38A2C3BC, 0x9A6E9A14, 0x67DF2BE3, 0x6C36A065, 0x46038DB9, 0x061E201A,
+0x1268021A, 0xA1197250, 0xDAA4000E, 0x4C50831B, 0x0378AFF9, 0xD790EC61, 0x3F4BE3B2, 0xD9244003,
+0xCE510DDC, 0x69AE4608, 0x4872D21F, 0x9A1776DD, 0x6838FA37, 0x9E3F1476, 0x495646D1, 0x5443B6DC,
+0xBC8D3B2C, 0x78447681, 0x2589FFA7, 0xEA475822, 0xD9C7835A, 0x8AE2D099, 0xCEFDC65F, 0x2DCE9035,
+0x8613F636, 0x5BAAF7E5, 0x0DD5B24A, 0x16BC1D6F, 0xA26B1E45, 0xC1FBC4A6, 0x4CD320B0, 0x3292B5D1,
+0xA5377259, 0x00914340, 0x8CBEB298, 0x40C6BCD8, 0xF8C8AF63, 0x8C996C19, 0xD7163112, 0x496BB667,
+0xA7479EE7, 0x9B5DCE17, 0x27643E8B, 0x619347A1, 0xC6BE6EAF, 0xD6C2FC45, 0x9540D2E8, 0xC90F17B0,
+0x57AD2721, 0xB3A50E41, 0x5A709148, 0xC8A321CB, 0x803EB1F6, 0x2A77F422, 0xC759D5A0, 0xDAF3E31F,
+0x84F83CE1, 0x400F64AA, 0x2FDC48FF, 0x10812E6B, 0x5680BE76, 0x8162C340, 0x18A6A6E1, 0xB498504F,
+0xDC58FE1E, 0xF8AB6577, 0xB18ECC02, 0x702B9DC2, 0x4833926C, 0xABC5A556, 0xBF5801A6, 0x8FA3C049,
+0x7BE367B9, 0x840E9B00, 0xDB198D1B, 0xAD322FB3, 0x44418A67, 0xC211B5BB, 0x2BAF572C, 0x0B87A24F,
+0x6953A63F, 0xF4092A68, 0xC0D0D013, 0x6240B908, 0x0253B037, 0x8B8B23EB, 0xC47851A9, 0x2C171C30,
+0xAFB13ED7, 0x311E07DC, 0xD69B0A83, 0xF1FE6B81, 0xCF5B9016, 0xF01D059A, 0xC6D94E3B, 0x7477D8E5,
+0xA48FBA98, 0xF284B61F, 0x81107878, 0x66920A9B, 0x3ED60747, 0x41C35CA9, 0x6B9C701C, 0x55C256FA,
+0x625CBBEC, 0x18C5D546, 0xA3270784, 0x5E9E3F84, 0x61B61797, 0xFA53B1CA, 0xD76FB0FC, 0xE4398681,
+0x7F3BEFFC, 0x8121DBFC, 0x0AE052C9, 0xC8E61B74, 0xBE98006C, 0xE602A5A6, 0x88A8E645, 0x1E1CC372,
+0x06FCCC77, 0xFEF6AB1B, 0xDD7DD3DF, 0x0A597FB7, 0x3E9BB049, 0xB717362E, 0x13323F72, 0x3CC00064,
+0x4CC7E2C6, 0x7870A39A, 0x62BC049A, 0xB21B3624, 0x186A0A72, 0x31C65192, 0x0058A7C4, 0x180EF77D,
+0xD35AC42F, 0x84E21953, 0xEA175F16, 0x960D2C0D, 0xDCC033D8, 0xA923B1C8, 0xDCF09AD0, 0xFD8789B7,
+0x6981E637, 0xE8B665A1, 0x87AE2D30, 0x6FC06C1E, 0x519793FB, 0x997BB59A, 0x79F7BCDD, 0x17B66C4A,
+0xDEE62492, 0x34C34F25, 0xFA07E8D8, 0x6DDC2488, 0x0B084071, 0x2FAE7096, 0x5911AD67, 0xA6990537,
+0x01BDA18C, 0xA339B90E, 0x207FCDDF, 0x286A8037, 0xDD1978C4, 0x7618E581, 0xBBF64A5A, 0x304844A0,
+0x0D2FA562, 0x54D8279F, 0x196D1379, 0x05F206C9, 0xF12CF70E, 0xF60D9361, 0xED65FBCF, 0xFEBE04F6,
+0xE9B65673, 0xF0382C49, 0x359B8FC7, 0x4C945929, 0x63112EA3, 0x9AB8D78B, 0x985CAC30, 0x394A7DBB,
+0x010A63CB, 0x71E10351, 0x74A29D0E, 0x2BB888DD, 0x6E5C5180, 0x7AD83658, 0xF159FAD3, 0x3B21767D,
+0xC1078516, 0xD03C57C6, 0x09085F44, 0x634F018B, 0xCC97BBC9, 0x04EC1F76, 0x075BB21F, 0x7A23B91B,
+0x6777AACF, 0x0A37BBB2, 0xF4A5141A, 0x0FEDDA32, 0x3077BAC0, 0x5858932B, 0x57906956, 0xA028735C,
+0xD7F573F8, 0xE6F497BB, 0x089725A8, 0x9142D298, 0x2786DDB6, 0x0F660B05, 0xF56189EC, 0xAF630A64,
+0x3F7BDA5E, 0xC6612B1D, 0x1651117A, 0x7A411B73, 0x85F5EAB0, 0x66593768, 0x03A5F21E, 0xB1CEA415,
+0xEDD21D00, 0xC5F607BD, 0x8C66DF61, 0x769ABDB1, 0xE7BD101C, 0x16AC6F85, 0x7F66F1C3, 0xCF14CDD5,
+0xFBCFE7AD, 0x5DF6D413, 0x88DCD87B, 0x59A493C1, 0x6FE3D71B, 0xA7977986, 0x7C0A9BBC, 0x413075F6,
+0x8ED85D9A, 0x26892277, 0xB9F1362D, 0xAD7AEE99, 0x3B5C254C, 0xA67ECFAC, 0xB32AA260, 0xFCBFB6CE,
+0xF8F464F9, 0x3ABC41B3, 0x038F42D0, 0xEC964BFC, 0x196791EB, 0x559306E2, 0x5B826A8D, 0x27CE4905,
+0xC40EF108, 0xE8015E86, 0x61E5C4EC, 0x74F815C7, 0x434889CA, 0x8F686B89, 0xEFB15C4F, 0x057355D0,
+0xB7F94996, 0x8EE49C90, 0xA532EBE5, 0xD12753F3, 0xEE2E2796, 0xA474A1B5, 0x8A4E47EE, 0xC7AACCCA,
+0x96021FA2, 0xF20BBF82, 0xC9247E8E, 0x8A57AA06, 0x5AA5BD7A, 0x686264C6, 0x65A3F1F1, 0xFDC90536,
+0x12325582, 0x4793FA9C, 0x83E0DBE0, 0xAC0C4BA9, 0xC1B51EF2, 0x4A626265, 0xAA0E7096, 0xF46824E7,
+0x767F0BF5, 0x31E7737E, 0xBECCBC46, 0xB0D7BA0F, 0xE371B63D, 0x9CA64619, 0x7FD90557, 0xDAF79DDD,
+0x7DB14E07, 0x210B7D0D, 0x18FB70FF, 0x9C409A2E, 0x7B77F498, 0x5E280BBE, 0xA624C324, 0xDDE0EB92,
+0x045BD1E3, 0xE86B6C70, 0x89FCFCE2, 0xA2FB88C8, 0x2778FF79, 0x6FB1B1E9, 0x90993333, 0xC1E87C91,
+0x9EFC2D05, 0x08EDEA21, 0x96F0B847, 0xD34A977A, 0x985A533B, 0x8BB76C68, 0x51EA153F, 0xEDCE51B8,
+0xA4B99A17, 0x60BCACE9, 0x8D2BC268, 0x2C63191B, 0xB04FE43E, 0x9CA77C69, 0x7584B168, 0x542CCB5A,
+0xC3D228C2, 0x51EC51A0, 0x88B6796C, 0xDA672778, 0xAFBFFD7B, 0xC91C1208, 0xEE1B48D0, 0x5F347DB8,
+0x6C3C6BE8, 0x359B8DD7, 0x3D52DF32, 0xCA6402B7, 0xA668DCB0, 0xA64473E5, 0x2F77E682, 0x0857251C,
+0x35C50EB3, 0x6C6C6BFB, 0x1023F3E4, 0x60E0C558, 0x4EFBA66C, 0xBD908A4D, 0x146A19BC, 0xF19D08A4,
+0x1C22496E, 0x6BFDC8A6, 0x2EF90D8D, 0x3CD02CBE, 0xEC7233E9, 0x0A070305, 0xA3322D52, 0x9F7B6CDD,
+0xF926071F, 0x994B5347, 0xF343898C, 0xD8FBF287, 0xF2CDEFBC, 0xBD0EC308, 0x9EFAACE2, 0xB393D560,
+0xFCBCF4B8, 0x057D50B3, 0x9D89DBE0, 0xA985219C, 0xE746DB37, 0xAD693BBC, 0x5300DC72, 0x57655487,
+0x8C8FE7EA, 0xCECCB28C, 0x5A027EB1, 0x22C173BD, 0xDFC2B262, 0xB2FD87C7, 0x18952506, 0x951398DB,
+0xCA58FB70, 0x08D1464F, 0xFF43A82E, 0x2FF774F5, 0xD7435051, 0xB2DF2CFA, 0x69EFAAB9, 0x4566E5C4,
+0x1B3D7CBF, 0x550F7110, 0xDB75A8E5, 0xECAA6F3C, 0x55E253AD, 0xD12D9C57, 0xF941BF3D, 0xFEA101B4,
+0x2C5CF0C1, 0x34059B10, 0xF4CEF140, 0x94F117FA, 0x5EE4CB46, 0xF43F5309, 0x32494ACA, 0xCCA4BD7E,
+0x1AA2628F, 0xA4B6EC68, 0x50F6B963, 0x43D92199, 0xD3FB93F3, 0x24055494, 0xBFC5807D, 0x36983F42,
+0x402FC75B, 0x71DA61CA, 0xE955A0DF, 0xDE1B402A, 0x6A27984A, 0xAE00140F, 0xD48F7631, 0x6B171A24,
+0x5EB2AB7E, 0xA88D22E2, 0x81FD329E, 0x810E91A1, 0xBF1CF398, 0x8F3F73E0, 0xE063FDAD, 0xF7CB3A6A,
+0x8EB0FE31, 0x085092CE, 0xED56BB65, 0x58EDF89C, 0x47DA8D05, 0x0A1547A8, 0xB0753620, 0x8E65D77B,
+0x0C217651, 0x61FE87B1, 0x963C25F6, 0x2202B76F, 0xD13075CF, 0x548E454F, 0xA42171E9, 0x35DE7417,
+0xDF504ED9, 0xE1AD5B4E, 0x1722C2E0, 0x8EA5CA57, 0xB61A7B0B, 0x723B7076, 0x3505DFAF, 0x736AD147,
+0x1AF183C2, 0xF565E531, 0xC1BF4488, 0x10F03A4B, 0x2D201177, 0xE3014466, 0x5AFF4DE1, 0x8C5D9FAA,
+0x73E608B9, 0x58093492, 0xD00B2AE2, 0xDA960316, 0x0431E5F0, 0x08E666ED, 0x9941DE91, 0xE4AF32AD,
+0x58FC4CB3, 0xE7BA926D, 0x2D4ADDF1, 0x695D10B0, 0x4B57735D, 0x40BAFC75, 0x2CE44AFC, 0x64AC19C7,
+0x73B4F5E0, 0x9FBEAC16, 0xF35AA693, 0x9A2BF34E, 0x1083C518, 0xE7C11BB1, 0x8E63D0C8, 0xED605FFC,
+0xA7363256, 0xA87A0D2C, 0xB261DFEA, 0x8D110780, 0xDA534972, 0xFF962076, 0x7D6083DA, 0x42B2D7DF,
+0xDE33CA5C, 0x91BFB81D, 0xCDA6F533, 0x16FF9C0A, 0xDCCC78F4, 0x74BCEAFA, 0x54325F20, 0xFBDBE5EF,
+0x0B1D1FCE, 0xEE5E3423, 0xEB7FBC6E, 0x1843E497, 0xFE1ADE1A, 0xD2058474, 0x0DE662AD, 0xB37FBC41,
+0x80A56489, 0x57E30E19, 0xB9F2F779, 0xF52ED086, 0x01DB73E2, 0x8CDC5DF5, 0xF7922B56, 0x99C6C2ED,
+0x1425100D, 0x5BAB8D1E, 0x3D52636A, 0xB7BB7159, 0x9320F0A3, 0x82206CC8, 0x583BBB2C, 0xB51C0AB7,
+0x2429014E, 0x2115D50B, 0xD4B712AA, 0x8BD2F978, 0x792ECFE7, 0x8B7FF8C1, 0x50E9767A, 0x02B68F59,
+0x5EBF4FEE, 0x45EF225F, 0x51FE67DA, 0x5D87BC62, 0xF5F1CAA8, 0x0E8705E0, 0x9990CA23, 0x4FC9DB23,
+0x42510ECF, 0x89F7EC86, 0x4061E6D0, 0x0DEF3637, 0x51A2A50A, 0x7051B5FA, 0xC216ADBE, 0x529B1897,
+0x5D1CBB6E, 0xB9616ED7, 0x8E2D0B6D, 0x78B3D475, 0x9B997D79, 0x7E91ACE6, 0xADFDF8F5, 0x996809E0,
+0x25E33EED, 0x0264ADDF, 0x70FEECC1, 0x7DAD8CA0, 0x3B91730D, 0x7B8C7979, 0x5CFB2C14, 0x520DA686,
+0x92063F0E, 0xCFF92FE8, 0xEB4092D4, 0xD835D734, 0x9880BC6A, 0x87E6A12F, 0x86E44F67, 0xAEAA148C,
+0x006921CB, 0x9873BA07, 0x20E4A8D1, 0xD4651630, 0x1F55F5F5, 0xC36ED2AA, 0x981C9534, 0x3D070D31,
+0x519D5B34, 0x68D6E29C, 0x2D525D11, 0x8F946B0B, 0x1681F727, 0xE6721F96, 0xD098714F, 0x03962EE0,
+0x6F3209C7, 0x82CBE6BD, 0x936511B4, 0xDE65C9C5, 0x097D729E, 0x113EB172, 0x2A24CFF9, 0x166F5BE8,
+0x945D2380, 0x0C1D90AE, 0xB55E1DFC, 0x880EDBDA, 0xA7625EA5, 0xBD1C972C, 0xFF43E24E, 0x8AE7A816,
+0xBFBDE42A, 0x4125C166, 0x1A0925F7, 0x2266D3F1, 0x7B46D726, 0xA966DA0E, 0x85771B38, 0x7245DF6E,
+0x5BFF728F, 0x8C6D0B40, 0xCAF881CF, 0x45E9F053, 0x42A39C80, 0x2C0A3585, 0x68974BE6, 0x05E74B84,
+0x0BA0543B, 0xD9DFE172, 0x93599D29, 0x3B0EE77C, 0xBC63438F, 0x052CA937, 0x7CB7585F, 0x0B55EECC,
+0x778AF8C8, 0x1020C8B6, 0x86A7E22B, 0x2467FDEB, 0x7C789BE8, 0x2E92381C, 0xC00B34C8, 0x3E1B2C38,
+0xE401A790, 0x69AE6EC0, 0x71A02007, 0x32A6A315, 0x935736A0, 0x86481B75, 0x75759340, 0x44896848,
+0x0D7A7517, 0xF55C63E5, 0x1D0D764F, 0xE4432BDF, 0x43B678BB, 0x3C156BBD, 0x8E7B85D4, 0xEF8B54BA,
+0x04EE3BAA, 0xEEF0C918, 0x4CF03731, 0x0DC4EDD3, 0x1240B79C, 0x28BCBA21, 0x3A518EA5, 0xE7F4366B,
+0x75428CB2, 0x54654CAB, 0x4186DCE4, 0x2536CBDA, 0xC864BDA1, 0xA91AB1CE, 0x6828EE73, 0xC97FF72C,
+0xA475AECA, 0x99892DC9, 0x8A6BAEFA, 0x115C02A0, 0xC57623AC, 0xA4297A71, 0x6BDC2C7B, 0x8940BA5F,
+0xB51B2778, 0xECBD05F0, 0x99F79B77, 0x84E219AE, 0x0E518040, 0xB1667275, 0xC163C1D9, 0xF4C273D1,
+0xBCF7733D, 0xA9B1392E, 0x327C48FE, 0x46DDCF8F, 0x6DE53CAA, 0x3504CE73, 0x2A86A0A1, 0xD05D5D8F,
+0xC36BA519, 0xC43984FB, 0x26A5FDEB, 0x931C6147, 0x8E6F927E, 0xE98A22A0, 0xD2CA0741, 0x3AC5952F,
+0xF9168BA4, 0xEC53DF17, 0x26DEA04A, 0x063C8259, 0xBAFF2B61, 0x5F486787, 0x994B5320, 0x7C7A3BAE,
+0x1D2E407A, 0x37B7FC71, 0x36A57131, 0x707A3855, 0x40AC19E1, 0x5CC82F64, 0x8780ABD3, 0xE6C5BC7E,
+0x88FAF549, 0x3920D001, 0x451E171D, 0xF876A52B, 0x67EC342B, 0x202EF5C6, 0xEF1C4F32, 0xCA728EA0,
+0x33A92400, 0x7103502D, 0xFB8F9E8F, 0x4E73C2DF, 0x178B2141, 0xFA326F0C, 0xD25B19EF, 0xA897B976,
+0x0277AD08, 0x8B061686, 0x33271B46, 0xBE0605F3, 0xA14F7666, 0x4266385F, 0x752A7363, 0x309EB9BB,
+0x924D8D4C, 0xE19CA77B, 0x02D8EABC, 0x29AE6EE5, 0x76C20C1D, 0x57BB0C32, 0xC58E2138, 0xE211CECC,
+0xA01C2A94, 0xF2319F98, 0x9BD9C755, 0x2B9BB428, 0x51C42DBE, 0xD4CF2EE7, 0xB1E0C1DD, 0xA3D29AE5,
+0x7C857DD4, 0xB998A210, 0x202C027C, 0xF2DBFF0B, 0xC4423D3E, 0xC2D670F3, 0x09EB5084, 0xA760FBD4,
+0x80FAFDA0, 0x5744AED0, 0xB1194BD0, 0x345FE405, 0x6F9B6071, 0xC41AF692, 0x5A34952D, 0x7F49D1CA,
+0x81020C73, 0xA7B398E7, 0x104DC7C0, 0x05A1085F, 0xFF3E5000, 0x00CD23EC, 0xDD67B12D, 0x4C553F41,
+0x26AAAB14, 0xDD8A606C, 0x561FF148, 0xB01A7E09, 0x866B3CEC, 0xB73BDFEE, 0x13CD694C, 0xE4C0ECC2,
+0x703E1B9E, 0x139D636F, 0xC4BAF1FF, 0x923A73CD, 0x42D01209, 0x5D6CC1D4, 0x47E60630, 0x84B8EE9D,
+0x3A62CF94, 0x96A3D4D0, 0x7A57FA15, 0xA50183C0, 0x23655813, 0xC2A5DDAD, 0x00B48EB8, 0xB758DBF4,
+0x1BE22316, 0xAEF5A6E2, 0x58025F1D, 0x01FC9019, 0x1DBEFEA9, 0xA0F60553, 0x770DDC4E, 0x829FBAAE,
+0xB6CF3D33, 0x16E10FE4, 0xC97355EC, 0x76182257, 0xC41E33B2, 0x06AD3AAF, 0x686E0DD9, 0xA6D09DD9,
+0xF932D9C3, 0xA3EC10B3, 0x58828629, 0x710EE05D, 0xF834452D, 0xE99BB384, 0xB717948D, 0x55E3D7A3,
+0xD0B4C7A8, 0x23B3A5C1, 0x5930D320, 0xA7CE4987, 0x9C21AA74, 0x39D0CE9A, 0xC0217FB4, 0xB5C3B6E2,
+0x2FFA8A8E, 0xDB15959E, 0xCECEE916, 0x00365680, 0x1C77DF00, 0xFE17A96E, 0x93EB6232, 0x8CEA84CB,
+0xA0B64FE4, 0xCCC7F289, 0x7700B153, 0x63EF32E0, 0x2B924F1C, 0xF66EE0A1, 0x30D4CAA1, 0x444C8048,
+0xEA514469, 0xEFCF45BC, 0x083968B3, 0x93A86421, 0x07F34F9E, 0x13D8A850, 0x39B55666, 0x4E40A64A,
+0xA0BB3061, 0x7BCAB147, 0x1E26CD32, 0xF7D6522E, 0xEF8B6F78, 0x0815BC5A, 0x9C0C8395, 0x6DE7D1F2,
+0x1ECEC1A8, 0x692344F8, 0x7AC8C42C, 0x08AFDA4D, 0x4D0678F5, 0xDB7AA16B, 0x6FC02B10, 0x19A95D3C,
+0xCB28FF38, 0x9DC19893, 0x26E1DB71, 0xAEF835BE, 0x296EEE39, 0xDF6AAE46, 0x97FF40F9, 0x0872A526,
+0x85ADF52D, 0xF67CB517, 0x6F5EA2E6, 0xDCBC258C, 0x6CD5ECCD, 0x9B7A27E7, 0x8D80DEEE, 0x5DA9E644,
+0xF7357A0F, 0xEDBA9553, 0xA13FD2D7, 0x8A44DCF7, 0x15638E9C, 0x09CECAB6, 0x75AB72E9, 0xE99DC1B1,
+0x54AE1A14, 0x53ADC344, 0x53D038D9, 0x55F46012, 0x14B5FBC4, 0xF8DDC63C, 0xA8BB00E9, 0x62B8C870,
+0x41FEE2B2, 0x52E81EE8, 0x97CBDBD7, 0x847F0C90, 0x945C6C57, 0xD5FAEDD2, 0x71CCC802, 0x022D7AB2,
+0x668D09EE, 0x80D830CC, 0x89ECC393, 0xC0412D73, 0x357549AD, 0x2CEFE744, 0xD5957EED, 0xE40892A7,
+0xAFAED584, 0x76FBCD5C, 0xCB07887D, 0x979B6DCA, 0x59E7907A, 0x9690366D, 0x1F4C9547, 0x735F3C95,
+0x102FA6B9, 0xE40CEFA4, 0xB30B69C4, 0x56FB0059, 0xFF595E98, 0x7FC6143C, 0x73BF2EBD, 0xA22208EC,
+0x2E8024BD, 0xC952D2B5, 0x99141147, 0x70C54201, 0x97BB8D7C, 0x068D083E, 0xF5DC090A, 0x3FAFE69C,
+0x4D7676A2, 0xC4E27D58, 0x0FED72BD, 0xCDDBB071, 0xC7925DCE, 0x6E46EF52, 0x3D385410, 0x7C62A71A,
+0x687C8D22, 0xED6FC373, 0x9C84D68D, 0x55DB7E02, 0xB68F5739, 0x853A6583, 0x97A62103, 0xCC2D2A37,
+0x37D8C788, 0x0690356C, 0x90362BED, 0xC6DBEB38, 0xFB08AF49, 0x78C4DA5C, 0x95E43163, 0x21DFCAD4,
+0xC42E285C, 0xC66502E9, 0xD0CB80F6, 0x5A1475F8, 0xFDA08EFD, 0x656082CE, 0xEF09B824, 0x9F66648D,
+0x01AC761D, 0xAAFD152B, 0xDF3BFD1F, 0x388DE30D, 0x3952E445, 0x507A7645, 0x3615BD4A, 0x72879449,
+0x133ECC14, 0x75409980, 0xD22FB1A0, 0x9367C9B8, 0x0A2C0B01, 0xB771AB2E, 0x58A1336D, 0xF485EC32,
+0x8180D87F, 0x94C98715, 0xC04F7793, 0xE4C119DA, 0x05FBBBC6, 0x7C1ACCDC, 0x76493BA2, 0x0949326B,
+0x7CA83E79, 0x395340C4, 0x1AD771E9, 0x89D15370, 0xF77B74B5, 0x2EF5EA97, 0xFCBD324D, 0x6F89FCEE,
+0xDCFA4131, 0xF5091067, 0x47B4DC15, 0x4B33955C, 0x5739D700, 0x1CE96A56, 0x5EFF5784, 0xF70A94BE,
+0x74961112, 0x5FE30476, 0xB5767CBE, 0x97EE1E9B, 0x8CA41057, 0x841E6E78, 0xE0FBD7E3, 0xAA7AFC78,
+0x65B4E56B, 0x48DD3445, 0x6AB2F243, 0x373FAFB6, 0xAA20034A, 0x46DAFF42, 0xCF30B366, 0xA3E4BFF7,
+0x52A19BD8, 0x165A856B, 0x7D818F10, 0xBAA20093, 0xCEFD377D, 0x6268AE7F, 0xA1D61948, 0x3237FA30,
+0x046CD2B9, 0xE1856D9A, 0x6C4884E2, 0x9F67DF4D, 0x33958457, 0xA9012903, 0xCF0B819F, 0xAA157840,
+0x05D9BFB6, 0x44A94495, 0xE622F7BB, 0x59E2320A, 0x1E07DF4B, 0x72A770B4, 0x069B0B33, 0x7D364FC6,
+0x9430D5BD, 0xFDE981B0, 0x1B8608EF, 0x683A4C33, 0xD5DD6A7F, 0xCFCEA0FB, 0xE8F9E9F9, 0x13E1C6D6,
+0x016167DA, 0x5600C032, 0x4D60736C, 0x0AEC6183, 0xDCC02D82, 0xC913B3D5, 0x0F9D62C8, 0xD117235E,
+0xA42BB54D, 0x74C2FE99, 0x9EF95C0C, 0x223F9C17, 0xD1B2B2B4, 0xEFB7AA8A, 0xBE4595CB, 0x10CE6BBE,
+0x0594F9AE, 0x90C937C5, 0xEA876E83, 0xBB0D5D89, 0x1E353AC9, 0xDF7E1ED3, 0x611947D7, 0xB6F4D0B5,
+0xC148D8AC, 0xD4FA17D4, 0x65C2F6DA, 0x51A252D9, 0xA13D2C7E, 0x2FAE1352, 0x3CDF20CB, 0xEBEB4875,
+0xB2AA241D, 0xC65BCD52, 0x8E885A2A, 0x88872A22, 0xC44E0B75, 0xF3F6365C, 0x940D7528, 0xA09CB6C7,
+0x64049964, 0xDE808ED5, 0x71DD7EDE, 0x56A44134, 0x93C4CE34, 0x19AE18E0, 0xAB739752, 0xC95E5D9F,
+0xCDC9EACC, 0x83E5B444, 0xF0C06EE3, 0xDC8D8FE0, 0xE08565DE, 0x842C4DC9, 0x9F8339A9, 0x07A019E0,
+0xAAB11D80, 0xCFA31621, 0x6D7E327F, 0x7CCA815D, 0x7D8F5B85, 0xFE519374, 0xEA63C186, 0xA175C72F,
+0x5485CCF9, 0xD1241403, 0x2F990327, 0x52DBF7EA, 0x3A0E8745, 0xD3AE1684, 0x62D7B04C, 0xA9B1923E,
+0x84DA5E3C, 0x6D610635, 0xDB75E859, 0xF201063A, 0x5AD2BF88, 0x6AAE41C7, 0xC7E9E89D, 0x6E30C3F3,
+0x1453BF61, 0xCF67B926, 0x53AD8FA4, 0x4369D6F0, 0xCFBCBB73, 0x7B48735C, 0x21DB1D3E, 0x06FB8EEE,
+0x0C509BB0, 0x641B9A71, 0x68657D4F, 0xA6E1E187, 0x02D95976, 0xA4C17387, 0xFA522DE1, 0x4145E5F0,
+0x7EB2B7D0, 0x462B43E8, 0xF12FB7EF, 0xBA45D255, 0x443BB243, 0xFC52450C, 0x9B039135, 0xA104CDEC,
+0xB49B69B9, 0x0158B35D, 0x88DB062D, 0xC4B0006A, 0x5AA2C9C4, 0x75032923, 0xD157D8AE, 0x95EEF107,
+0xFD94EA01, 0x273D4A54, 0xCA4D58DF, 0x424B91FB, 0x66F3F836, 0x01FB76E3, 0x0991D4D7, 0xD9AFA2AD,
+0xFAEB6232, 0xDE0A4FC9, 0xC2B6BA52, 0xDC1A7D08, 0x4D223A2D, 0x8F0111B5, 0x7E39DCF7, 0xE91969AE,
+0xFA01675E, 0x831A6FA3, 0xD364B41C, 0x1C2E29FC, 0xBA26D0AD, 0xAF955969, 0x932E8957, 0xF3A704C9,
+0x08033395, 0x04B07368, 0xC84EBC50, 0x27BDB42F, 0x989236F2, 0x6A1F2104, 0x7C244FA0, 0x1AC14D17,
+0x847BE265, 0xA9E30FA9, 0x2B13BEA9, 0x6383EB68, 0x423A50C6, 0x80E66C94, 0x8EECFE2C, 0x159BBDA9,
+0xCEDFAD8C, 0xCA0BC3FE, 0x5952FB78, 0x21CEB408, 0x3007306A, 0x868FB311, 0xCEFDF115, 0x53D92E77,
+0xC72CED4C, 0xB815E2B8, 0x13523A3F, 0x1FB69EEA, 0xD3E0E73E, 0x067DD598, 0x2E803B0E, 0x24D40822,
+0xBECB1449, 0xAE47DE87, 0x9AA9C74D, 0xF5EC139A, 0x4C98D81E, 0xB596D281, 0x6E5EB221, 0xB098F1E9,
+0xBDD13740, 0x1440BD5B, 0x61E45F93, 0x8BF44779, 0xED37A69F, 0x26042D96, 0x15E13DFA, 0xAA83FF68,
+0xC6A8E496, 0x233333BC, 0xEB6359E0, 0xF46B0161, 0xF98635BA, 0x3CCEFC17, 0xE69464D3, 0x729710DA,
+0xD11F1B4D, 0x489B9C1A, 0x5417DDB0, 0xDF9CB3B8, 0xE54221A0, 0xFA1A37B6, 0xB40476B1, 0xF6CF192A,
+0xD69DBFD8, 0x320D72DB, 0xA3F8B92E, 0xBE8E4EBA, 0x7EE6639A, 0x44825E8C, 0x9E5777F4, 0x61F41408,
+0x9DCCE0E5, 0x735BB4CC, 0xC7FAFA5A, 0xF087A098, 0xDDE0035E, 0x726DEE06, 0x3F059343, 0x904B0667,
+0x5335714F, 0xD467B4E7, 0x5055FD2D, 0x366FD4FF, 0x65F4B5F3, 0x3FB1C910, 0xB44CA156, 0x8C84F5B0,
+0x7B2DED59, 0xD898240C, 0xA9450DE1, 0x5A72619E, 0x432338E6, 0x55FD7FDC, 0x63985A80, 0x7205E37B,
+0xF03E3910, 0xAE1867F9, 0xB9D4850B, 0xB9C8CBBE, 0x347392D5, 0x6BC60E7B, 0x106EE79A, 0xD9FBC697,
+0x3B5E8BAC, 0xE962CF6B, 0xEA450B9A, 0x28008ECD, 0xAF12EF09, 0xBBAB0B82, 0x2DB6EFDD, 0xCB0FBD6A,
+0x038673A6, 0xDB0AA5A2, 0x780FE9DA, 0xD9D1E453, 0x45636652, 0x03BEE2B4, 0x89AE5020, 0xD6F80653,
+0x27A49F9D, 0x0C95BA89, 0x34C91A0B, 0xF466635D, 0xCAD1C1AC, 0xAAA87C12, 0x8386374E, 0xB6906E20,
+0xF399242D, 0x507B8564, 0x587C12E6, 0x29701AC4, 0x7923928D, 0x98C8F667, 0x45F928A1, 0x164A9AE2,
+0xE965C304, 0x4050242B, 0xC4CABA23, 0x98A77D1D, 0xA9865775, 0xCB946AA6, 0xFE40919F, 0x5CA77126,
+0x1B8F3062, 0x8D491C64, 0x4B07756C, 0xE8F3EB3A, 0xF243EA3A, 0xDF795074, 0xC6424AD6, 0x808C3821,
+0xB0518FF7, 0x5842E383, 0x2A252D78, 0x3996019D, 0x6D34296A, 0x7751C734, 0x98D12825, 0x447B66AE,
+0xE4B432EA, 0xD53204C2, 0xDDFD71AB, 0x832BF0D2, 0x996297FB, 0xC647BD11, 0xB1F7CC74, 0x73F2ADB0,
+0x3DAF2422, 0x657F70EC, 0x132308A0, 0xAFECDD5D, 0x9A111CE3, 0x956A6A68, 0x17B80B90, 0x196057B3,
+0x490D4279, 0x758AEC31, 0x75988042, 0xC7A78ADB, 0x29C7C57A, 0x2C128F46, 0x740B4E65, 0xB9DCC799,
+0x5B4B5719, 0x9206F710, 0x8C180BE5, 0xD89AF01C, 0xABEA968C, 0xFB512F86, 0x3DC63DDA, 0xA36A6AE9,
+0xD5C96E0A, 0xA3BFA929, 0x12E4C05E, 0x7223F5AC, 0x734960F8, 0x8538E990, 0xAD7A9FE9, 0xCC8500BD,
+0xAF237258, 0x560F3DE4, 0x4F183B12, 0x7A64EFE7, 0x08F1E011, 0x79FB11CD, 0xEC20AA0F, 0x410E99E6,
+0x543BD6CD, 0xA7F80DE2, 0x97D35A2E, 0x2FE551D0, 0x43261DE6, 0xF20F7417, 0x83235BA3, 0x024F3626,
+0x312663CA, 0xDE8377CF, 0x7ECEEDF7, 0x84007518, 0x4953369A, 0xA2990362, 0x39389728, 0x49FA3641,
+0x46232612, 0xC739C091, 0x26D33CD9, 0xE02B91F3, 0x5EEEB76E, 0xCC596F25, 0x5CDFCE80, 0x2DF9D838,
+0x5EA09432, 0xD4171EB7, 0x2B3F8D6A, 0x56F0B282, 0x06286721, 0x91575B66, 0x95E1867E, 0xC35E3200,
+0x776B65EB, 0xD839E75D, 0xD3B174DD, 0xF47834D6, 0x55577C24, 0x81BF2DD4, 0xB172F9F2, 0x21AA9825,
+0x61FA6B52, 0x46142973, 0x1162D640, 0x80272F71, 0x9A4FC06F, 0x38860B80, 0xCE6E4962, 0x0A078BB4,
+0x4D1D4BC6, 0xB21EBDD1, 0x508A9CF4, 0x4A8814DB, 0x584C3A3A, 0x8F4CA5ED, 0xC960AB76, 0x58E41AB3,
+0xF89786EB, 0x0E6B0EA9, 0xFA186776, 0x92BB4E8A, 0x494D74A2, 0x44BDA619, 0xE9E82DA5, 0x0CE6A223,
+0x2F091BC1, 0x45CBB2B6, 0x973F981D, 0x9E4BE59C, 0xFB284854, 0x82B45F77, 0xA7CA1D38, 0xDBA1F6F0,
+0xCF69E070, 0x33D2E348, 0x383C9572, 0x834CAF4B, 0xC7549D2E, 0x68E7FA14, 0x16D3E358, 0x25F3D24D,
+0xC48BAC23, 0x451D5F55, 0xC2B76E19, 0xD665A4B8, 0x2672963A, 0x69CD1E62, 0xEF282B2C, 0xD7E64C22,
+0x83C3DBDA, 0x8028A994, 0x7C60EA1D, 0xD8B9F149, 0x98AC57EC, 0x86165CEB, 0x4288EE10, 0x37803854,
+0xED158763, 0x15791229, 0x0226BE27, 0x600795B7, 0x444E19B3, 0x4C9CE815, 0x025E938C, 0x6B090631,
+0xE2010B43, 0x3174314B, 0xB2C77CAD, 0x20C12D6C, 0x68548CEA, 0x74E45545, 0x21BBD3BB, 0x39643BF6,
+0x51E46EF9, 0x03740E9F, 0x44FDFE78, 0xB673ABC1, 0x716D65F2, 0xB79B7BFE, 0x94BBC414, 0x800D402E,
+0xF89F953B, 0xA64D076A, 0x5FB9EA3B, 0x3C8BEF0D, 0x58CCDE3B, 0xBF4A746D, 0xD538FC2C, 0x84A855E7,
+0xB4F2A2A4, 0x6BCC4E50, 0x984EE4BB, 0xB1531A76, 0x0727C5E8, 0x214CA246, 0x7E943806, 0xF056CA23,
+0x7D07C7DE, 0xE25138B3, 0x987CC060, 0x7C6F8DCB, 0xB0731309, 0xDD6870EB, 0x0C53B77D, 0x7D56683F,
+0x54A41D16, 0x8CEED4BF, 0x20848E9B, 0x7C61E121, 0xCC3C5E0F, 0x97CDE6DD, 0x3B441595, 0x099FC7F8,
+0x1E065809, 0xB1A60D54, 0xFC22BB8A, 0xC86F6B12, 0x3BC08D42, 0x626273AE, 0x12B11E89, 0xB3DA2809,
+0x399D64AA, 0x46816F1B, 0xDF8EA16C, 0xC65EC591, 0x27205CC3, 0xEEBC0D08, 0x52BD43D6, 0xEBA0252E,
+0xF5D6B00B, 0x8472E730, 0x3EBA8BC5, 0x3D33C940, 0xCACDCE93, 0xA446A41B, 0x3C0E52AC, 0xD02BBAD3,
+0x5681D160, 0x6B75E8D1, 0x9810762E, 0xA2630B24, 0x669DECB8, 0x336DBED5, 0xA3E9AC16, 0x9F13DCE2,
+0xAD5DB586, 0xA2A891D8, 0xFE0CF917, 0x281D101D, 0xBA95E5ED, 0xA0106EED, 0x59BF1171, 0x98E79903,
+0x45EF841A, 0xA548646D, 0x9DD54300, 0xD0D2B0F1, 0x2E76BEF8, 0xDFC40650, 0x40813970, 0xF56BF39A,
+0xAD2C87BF, 0x58BD7DD5, 0xE1B9956B, 0x1654D5E2, 0x3C83CF8D, 0x78D206A9, 0x54EC581F, 0x75341A53,
+0x858A66A2, 0x3C72FF36, 0x8A5EB98B, 0xDDFA3D6B, 0x9B0E4CDC, 0x5DB40593, 0x5438E1A3, 0x9F33E310,
+0x30F61A65, 0xF1DA3CED, 0xD70538CC, 0x9883A5FD, 0x88F319E5, 0xCDC1AAF7, 0xD851A8E2, 0xF5CAC613,
+0xBDF2E135, 0x1D5CAC53, 0x622BD0D1, 0xC8267338, 0x3FA49EBC, 0xF114303D, 0x8C9DC3FB, 0x53891641,
+0x176537C6, 0x170EAD3C, 0xD703CAA6, 0x10A38F20, 0x77CCA30F, 0x72263F18, 0xA5EDAF9B, 0x0A8DF3FE,
+0xD6EF5EA5, 0xD49CBE34, 0xF5813FEB, 0xA23C5A9D, 0x10B0E4A8, 0x62113835, 0x5DB33B58, 0xAA77A0BE,
+0xD97AD569, 0x4CD35C2D, 0xBCA7EB19, 0xB82CB7FD, 0xA71CD66C, 0xCC6D0021, 0xA3711DA0, 0x3729C805,
+0xF9B16E03, 0x659608FE, 0x670A9A39, 0xFA29FDA0, 0xEFD61D2D, 0x293C54F9, 0x3F552619, 0x9B68A61F,
+0xA13712A4, 0x0DD48E8D, 0x00716EF5, 0xCD1C65D8, 0x6D961EFC, 0x349431F2, 0x2F9CAE64, 0x1A9A81BA,
+0xD0DA605E, 0xDC0948A2, 0xADD30CCC, 0x3803BF23, 0xEEB65563, 0x5B52E1BF, 0x76912A32, 0x81B1574F,
+0x4FD7DA42, 0x58DC2FF7, 0xDA7C5381, 0xC3CFED68, 0xDBA61890, 0x093CEF95, 0x98940C84, 0xF885D506,
+0xC1FAAD92, 0xDC6578FC, 0x6A90E4C4, 0xB81A8B86, 0xF99F0D06, 0x02480E0C, 0x38C583B2, 0xE5B1AE4F,
+0xAC7F0E3C, 0x15F9D921, 0x61CAF3EF, 0xD16C1A1D, 0x52F1DA6F, 0x460CA66D, 0xF5604440, 0x0DFC55B5,
+0x36481EF8, 0x872ACE8A, 0x31CC4F83, 0xBB4E2BE9, 0x266E0E5F, 0xEC2E0D1A, 0x4CF6C3DE, 0xBB869A10,
+0x20321549, 0x7B7C0FB8, 0x611D1E91, 0x6B88BD63, 0x3676FB0D, 0xF74B0083, 0x7751D0E6, 0x399070AE,
+0x9787C182, 0xB78A0C4A, 0xC47BB57B, 0x47F74B66, 0x3472A654, 0xBB311980, 0x122990F1, 0x95076F29,
+0xFEB024E3, 0x6754F64E, 0xA02F66DF, 0xC00C44F9, 0x70378529, 0x4EDF102E, 0x258BA96B, 0x7330CB04,
+0x49C159C9, 0x3BC465C5, 0x3F792B85, 0x0805DC17, 0x68060135, 0xD0742806, 0x97ECFCBE, 0xF9D0A11A,
+0x36EEF328, 0x6DDF6E26, 0xBDD7C85A, 0xAEE7F0C5, 0xF4B5A59D, 0xDEDD6CA3, 0x15BB8F57, 0xDB685E58,
+0xABD7AE19, 0x8E0059B3, 0xE671ABFA, 0xB566449E, 0xACBC570E, 0x6D6FE3CA, 0x21926EBA, 0x8E35A2F5,
+0x7A40AF75, 0x8E14526C, 0x2114881B, 0x5C19666D, 0x13B44B3E, 0xF4BAAFB4, 0x8B9EF547, 0x3CE6D857,
+0x83FFFB5C, 0x9BAA0A62, 0x8ED161DC, 0xB74EBFE7, 0x59406879, 0xEFE14282, 0x94C71134, 0x70D6F6B5,
+0x22396A58, 0xA869D0D6, 0xB3E772F9, 0xF8E56E16, 0x1C077909, 0xA0CEEAAD, 0xE2DEFF6E, 0xB8CCD437,
+0xEAEAAA37, 0xC29D81D4, 0x919423EE, 0x678D0B76, 0xF1AF7F10, 0x141D3098, 0x6BB371F4, 0x5C526586,
+0x077CC2D3, 0x8810BF02, 0xA80E1511, 0x98085540, 0x57EBF442, 0x833CEB05, 0xE96FC52A, 0xB7E7A987,
+0xC7DAFFA4, 0xD60B8002, 0xC0D3A3C8, 0x891C40BF, 0x10E78852, 0x49850833, 0x7B2AF95A, 0x6FF99583,
+0xACE9365E, 0x440176A9, 0xE07A2633, 0x9DA35B2A, 0xB0F0094D, 0xBCD4EEF5, 0xB3F93A42, 0x425E4454,
+0x8CE0FC5F, 0x374146A1, 0x000CEED2, 0x6A34EAA9, 0xF0C872B1, 0x47EC61D0, 0x6C62F617, 0x45CA6765,
+0x3FC1C9E8, 0x9FE035A7, 0x773F428E, 0xDCC87926, 0xA44B5ED1, 0x53DFC2BE, 0xFAA74361, 0xB22570AD,
+0xB9A4771C, 0xD6354D12, 0x64A261DE, 0x4D674DD3, 0x2C12CE0D, 0x448521B4, 0xE0A22F5B, 0x78D46290,
+0xEF07E4E9, 0x18BB1FEC, 0x9D7B81C9, 0x05637E31, 0x111B9BD3, 0x8D903629, 0xB6A83EE3, 0x07E863DA,
+0xA05EE491, 0xCE150D3E, 0x679B5368, 0x37A1B255, 0x1507B772, 0x37DB2A2D, 0xDA1BCCC9, 0x4264F4B9,
+0x81279C06, 0x55F2C871, 0xBD9B0CBD, 0xC83D757C, 0x099BCBD2, 0x297911A8, 0x40063831, 0x827AE64F,
+0x935575B3, 0xE9BB4676, 0xD4DF7867, 0x36330183, 0xAED29146, 0x6C35ED61, 0x398FD046, 0xE9A9D43E,
+0xAF9775DA, 0xAC01FE1B, 0x330EE451, 0x242F686C, 0x8D5101F0, 0xD49DB358, 0x07ABCCA8, 0xDB70D7D0,
+0xB45D8EC8, 0x84334EEF, 0x84BD0E03, 0x6744173C, 0x7B434223, 0x4F986A2C, 0x3875499A, 0x019CA30D,
+0xB54847A3, 0x6173EBE7, 0x68A21E87, 0x258FF7DF, 0x28FFCE2E, 0x3458AB54, 0x9818AB9D, 0xF91D72F3,
+0x97C6DE56, 0x63726AF8, 0x3C72FB01, 0x422315F1, 0x59A57288, 0x4A9856FF, 0x4B4A8435, 0xECC4D97D,
+0xF4D10D8A, 0xE929DC18, 0x1E20732B, 0xA4062F42, 0xDD739ED5, 0x62FF4973, 0x1C4F203C, 0x1127CB87,
+0x0264D80E, 0x347D66E7, 0x80D33A52, 0xAD3F086B, 0x4588A08E, 0x6741E08C, 0xD558B252, 0x0D69C0FC,
+0x31B3F495, 0x0752B806, 0x5B96B55D, 0xE84671FC, 0x721991AB, 0x5DC73ED5, 0x8C4C5CD1, 0x6C1A765B,
+0x9AF35912, 0xF11C2E49, 0xE93FAA16, 0x6AD86B62, 0x2F82E882, 0x97B2DB94, 0x61E7252D, 0x108A36B2,
+0x6E53F5FD, 0xD7BB1A46, 0x3F517A5A, 0xC5966C03, 0x9362386D, 0x44291788, 0x512A1B9D, 0xE94680F6,
+0x89E96E35, 0x1A6384C1, 0xFF41B9F4, 0x16E4ABD1, 0xCD1AFE96, 0x1D8ACF47, 0x3DB1797F, 0xB1684B8C,
+0xE8915542, 0xA0B81895, 0x3C6F29B8, 0xF6A8516F, 0x0E0D6282, 0x87FE2FCB, 0x237A2D76, 0x49D141D7,
+0x24E995EE, 0xEF804F40, 0xED5D7A12, 0xCBED9CCE, 0xFEBE5F35, 0x9D6DCEDE, 0x83F07807, 0x71A4B1FA,
+0x8C969FFE, 0x54000F85, 0x99356014, 0x10A04A4F, 0x128E12F4, 0xB34423E8, 0xE8ACEA4F, 0x0205EB3A,
+0xDBD9A624, 0x85C15E15, 0x292B8AB2, 0x58C125FE, 0xC8367F20, 0x6E6BEB7D, 0xB145BAD9, 0x1C84EF58,
+0xAA47316E, 0xD46FE53F, 0x5CFF1A57, 0x2ED231BB, 0xE9E4A179, 0xA4F30AB2, 0xC67F8632, 0x19178757,
+0xE463E48B, 0x4CBDDEBF, 0x5419C565, 0xA312CEF7, 0x8A237BB1, 0xA3029D38, 0xEC156B61, 0x7E906B8E,
+0xDB603DF3, 0xA32B0849, 0x85CA2483, 0xBAAFFDEA, 0xBE75EBCD, 0x16624524, 0xF5893343, 0xBFBFC92A,
+0xB0143997, 0x714A9A5E, 0x120A37E5, 0x0E158903, 0x96A52220, 0x587A2D00, 0xFC6DBE81, 0x86CB9304,
+0xD2C9BEB9, 0xA61193DA, 0x671CA4D1, 0x016AEA6F, 0x442D1BE7, 0x1C95117F, 0xFEE7D0B9, 0x1BDA679D,
+0x9C1CAB8D, 0xAA70B289, 0xEA518F6A, 0x9E1F3601, 0x6140BA62, 0xE7B5E07C, 0x42D9C265, 0x5FD8A48B,
+0x1EB9F5FF, 0x18645913, 0x386FC0F3, 0xB4A0CF6A, 0x40DE5AD9, 0x91410061, 0x761B820D, 0x9AC8568B,
+0x31285BD3, 0x37FAFA88, 0x4F35D943, 0x76D8EF4E, 0xB307A3BE, 0x20194E03, 0x77610C3B, 0xC233C362,
+0x27B7E0BB, 0x1128B24D, 0xF9A02430, 0xF4FCD644, 0x4F444CF9, 0x59413ED9, 0x3BCBD6B1, 0xEF7AF80E,
+0x11886B38, 0x17BF5623, 0x3FA27ACB, 0xA454ACB6, 0xD18E2E83, 0xF245DF45, 0x896E7D06, 0xFA85AC48,
+0xC93A7048, 0x8096C4EA, 0x399FA871, 0xDE055751, 0x3B57F01A, 0x278E30FC, 0x1E228C6F, 0x50B41501,
+0xE70C369B, 0x754BBC18, 0x3782AB1D, 0xE1473C73, 0x217ED25D, 0x3234034F, 0x23CE4524, 0xB215E1E8,
+0x817C1DAC, 0x3D050FA0, 0xC78C5783, 0xA7DDFBC6, 0xA4764F6F, 0xBB78A184, 0x68E455BC, 0xB4104A19,
+0x79F21354, 0x0EE2D815, 0xF2E9851B, 0x90F95809, 0xDEC06D05, 0x4D7CD06D, 0xEF551A66, 0x7062FA13,
+0x98ABFFA1, 0xF1D17316, 0x217FDF2C, 0x6EB6238C, 0x0B966129, 0xD96F3D53, 0x1C1D63AB, 0x47CF4EF9,
+0xF5AE5E8A, 0xCF004CCB, 0x1E591A78, 0x08ACF747, 0xB980FA9B, 0x0996BB89, 0xB98BD3F1, 0x74C4B3DA,
+0xAE37FCDF, 0xDB6A230B, 0x90DD253B, 0xED3C0F46, 0x716D1A4D, 0xC6AA3318, 0x9614D34C, 0x803432B0,
+0x8FADD2D5, 0x31151B26, 0x370870AB, 0xC3EB4DA6, 0x802B5190, 0x8125EA9B, 0xBD2754E7, 0x93396431,
+0x8D2C5218, 0x405F11AA, 0x4AB0815F, 0x572DC5FB, 0x997AACAC, 0xAC092203, 0x360EB362, 0x029FFFAC,
+0x2E2FB599, 0x27AF0254, 0xA072A2BC, 0x90B04BB1, 0xAA27C1FA, 0xF6BD3AB2, 0x67B79274, 0x5F29A181,
+0x74EEAAC3, 0xD548EE09, 0xDFAE0C26, 0x6F7AE0A4, 0x92AD9AB1, 0x72A7C5AE, 0x0A91ABDE, 0x786CED01,
+0x1EC7376F, 0x9008F198, 0x9D2D868F, 0xA0770E4C, 0xCE47A3A9, 0xE9971865, 0xF6BCBEE1, 0x4F44DF6F,
+0xBFD56AA1, 0xC26A0164, 0xC417EDB6, 0x031858A5, 0xD57C0849, 0x893F6675, 0xAD9A38A5, 0x419120E4,
+0x1E5A828E, 0x19334125, 0xA0F7E0FF, 0xDE646AAF, 0x9A06F6D0, 0x7E2834FB, 0xE790A669, 0x665CBC89,
+0x18CB33FC, 0x13FA93CA, 0xFF085B85, 0x8F7BAE1B, 0xFEC29793, 0xEB8AF498, 0x385CDAC5, 0x713782FE,
+0xD98899C3, 0x43526A18, 0xDB1FBA38, 0x06D5290E, 0xB80C43C6, 0xA7BB39C8, 0xE489AAFE, 0x167692CA,
+0x13E65476, 0xF237473F, 0x455E5E21, 0x9548C631, 0xDC682CD1, 0xF13B37AA, 0x383CFF24, 0xFF0CF4A6,
+0x8806841E, 0x738FDF22, 0x453A58A9, 0x9D6B02EA, 0x069A983D, 0x74C1AF4E, 0x4C4A1DF1, 0x5AEF518F,
+0x3FCF5E84, 0xC0BEA405, 0xBB35EC76, 0x2753B724, 0x0AECF8FC, 0xCBF0C96A, 0x28B6582F, 0x004B6264,
+0x1B5F0EE0, 0x1409557C, 0x1198E09B, 0x42812F43, 0x9F21B65F, 0x9685071E, 0xDC04B2CF, 0xCC7E38ED,
+0x8FACD7E3, 0x97AB56CF, 0x1852A0BA, 0x8879C93F, 0xC9FC64B0, 0xE4E189DD, 0xB8E2627C, 0x6E066322,
+0xE876D846, 0x1778E2FB, 0xA7745912, 0x6621B759, 0x0FD8A6DC, 0x192FB0A9, 0x47D87CC3, 0x1B7F88D0,
+0x130F1B10, 0xE4155067, 0xD7B9163A, 0xB84709C1, 0xD2CBFA06, 0xD9A30301, 0xF999A281, 0x58A3B8C5,
+0x865263E5, 0xA2B3B1A7, 0xAA6927B4, 0xA738CB2B, 0x20ABF523, 0x5D474571, 0x5CD7CDD9, 0xA485A431,
+0x6DE52362, 0x9020F5F8, 0x993FE7A1, 0x6FAB0634, 0xE4D58733, 0xF05710C0, 0x80D929FF, 0x2DFD8DE7,
+0x06CFFB9A, 0xB5FC4445, 0x8A357AAB, 0xD79F05DD, 0xDE718016, 0x309ACFF6, 0x3C45D1E4, 0x9F3B285E,
+0xBEC11C17, 0x0FDF346F, 0xBE877C2E, 0x7A011F47, 0x9D991748, 0x92410C2B, 0x49DE4DB9, 0x7D27D292,
+0xF86AC8F0, 0x4BAEA13B, 0xDA0CA6DC, 0xB3F03F92, 0x6BA04645, 0xB0478992, 0x7E7C14C1, 0x83B519C3,
+0x2AE2DED7, 0xACE0B749, 0x106C6CE0, 0xE8DD9C0B, 0x6BB1A294, 0xDD346E03, 0x90DE8228, 0xC65C647D,
+0xA808D319, 0x7DA46295, 0xE0CEC3D1, 0x5F5CB184, 0x399F0BA4, 0x298682B0, 0x10DAA55C, 0x3FD77509,
+0x4281CF18, 0x8751FA15, 0xB42D18E6, 0x45F22B27, 0x903270B7, 0x6CD24D1C, 0x86109CA6, 0xC75B4C8C,
+0xF81E91DC, 0xD06B9A33, 0x9DA1AECB, 0xCF51353E, 0x67DA9C4B, 0xB44F0B36, 0x0D509A6C, 0xF6B02FBD,
+0x1B502BE6, 0xC7E0F74F, 0x82FD0EFE, 0x9B6E0EE4, 0x2549172E, 0xEF112E40, 0x6BBDCBA5, 0x646558F5,
+0xB708B67F, 0xB3C60F4A, 0xFE854F61, 0x3A3229FD, 0xC8160E45, 0x5AAB6AF0, 0x80858741, 0xAF0DB08B,
+0xA0B2AB0E, 0xBE7255C3, 0x6AA2881C, 0xD1720D78, 0x9EE61004, 0xFD3B0570, 0x8EEBF51F, 0xDAE04A72,
+0x423A6E55, 0x49E80697, 0x0708A00B, 0xD903A455, 0x95ACE62C, 0x96B3C516, 0x803F720D, 0x60AA7FBE,
+0x63904070, 0x9F386353, 0x2ADADCD7, 0x84692134, 0xEF0C5F65, 0x61B1BFB2, 0x567F0044, 0xEFEB5558,
+0x2AE17AE9, 0x7F797E0C, 0x801F7A75, 0xF33577D6, 0xAA687A49, 0xF993E90C, 0x6D24C726, 0xFDA020EE,
+0x340CA818, 0x27B13BD7, 0xCD383A0E, 0xD5217EEC, 0xC1E7F14A, 0x252BF9E0, 0x908AE93F, 0xEF5B5DEE,
+0x51BE200C, 0x1A208495, 0xCDAD0A6B, 0x009DBAFC, 0x5F318480, 0x48AF59E0, 0xB5BD917A, 0x7C3F3E73,
+0x17DA21B7, 0x7392C2BE, 0x32C1318E, 0xE00104B8, 0x6B1772FD, 0x9FA5DF5E, 0x16400616, 0x28A55036,
+0x5CB8B0B2, 0xE6DDFBF0, 0x72A1EAC9, 0x6DFDF9AA, 0x502293DA, 0x59496A56, 0xB832C02D, 0xA504A18F,
+0x54A63777, 0xD3F94024, 0x1865E66A, 0xC14C44B3, 0xAFEA53F4, 0x0C17E655, 0xA3254559, 0x830881B7,
+0xB6C55A49, 0x72970A79, 0xAE465647, 0x374A183B, 0x7B8FD51B, 0x7870F326, 0x6AA10552, 0x73C08181,
+0x71C9571A, 0xFD9DF46B, 0x467CBA6C, 0x553F9C10, 0x26F4F09F, 0x9BF54DA6, 0x8170D5F3, 0x113DC77D,
+0xE87006C0, 0x6077B2F6, 0x96A1AA14, 0x3E74F943, 0x469C8049, 0xF5FF9AF5, 0xE77EB75F, 0x58FA94CD,
+0x4A007918, 0x3FD3879D, 0xF2650CB0, 0x67AB51FF, 0x62B5C84C, 0x19399BA2, 0x0F43C008, 0x6DC27004,
+0xD2238E9F, 0xEE15E5A3, 0xAE8CEE51, 0x0B18A929, 0xC2E1819B, 0xE3381019, 0x0043F134, 0x148F1157,
+0xBAFC16EF, 0x6CB1B3DE, 0xED471E87, 0xCC752A89, 0x3B04A3DB, 0x799CE87B, 0xC5BE22C9, 0xA5E609FF,
+0xDCE8AB1A, 0x457B0770, 0x3F258007, 0x3367274F, 0xB33D1443, 0xE3938107, 0x65CAE5DE, 0xFE60E0EE,
+0xD08DD83D, 0xD396B659, 0xDC5B389C, 0x0AE84525, 0xF3C9CDA3, 0x8246D739, 0x105CE72A, 0xD1D22BAA,
+0xDAF5D6F9, 0xF047B06E, 0x7327901C, 0x589796AD, 0x9D9DE407, 0x013882B1, 0xBE8E6FC4, 0xC1687D83,
+0xE0CBEBBA, 0x898FBD0E, 0xF2C79DCF, 0xA7F4071E, 0x734ABA42, 0xE8B067C1, 0x69D2550B, 0x51D8DA31,
+0x034572E0, 0x19937B81, 0x19791770, 0xB106492F, 0x1E092861, 0x243FDD41, 0x1CDE20DB, 0x6654B88C,
+0x12C04F96, 0x178C2EEF, 0xAD39C7DB, 0xC905BA54, 0x27E97BB6, 0xD27A6761, 0xDE84D729, 0xDC8ADE7E,
+0x402150E0, 0x2B1F46F6, 0x71FF6117, 0x0485FD1A, 0x72663CD1, 0x80DE6926, 0x98A9FD4B, 0x6FEBE039,
+0x84113D87, 0x5309C89F, 0x9D516D24, 0xF763095F, 0xAEE72CCE, 0xFC89967B, 0x16C71981, 0xA5BA0FAE,
+0x5F46FE91, 0x0E3C59C3, 0x3EF5CD3A, 0xEA7FD8B2, 0x01C1102A, 0xA5D211CE, 0xC95A97C6, 0xD0C4192F,
+0x8A7CD0FA, 0x26AD3214, 0xD7074A6F, 0x3A4D19A0, 0x44B54AFC, 0xFFB4FDB7, 0x8837E9AD, 0x150DC17F,
+0xCB4D39EE, 0x8A815111, 0x13AB130C, 0x10ADCA43, 0xB8189682, 0x49EC0415, 0x9044C764, 0xE97882A0,
+0x3C131A57, 0x142B2EEC, 0x34043849, 0xB0FB7110, 0x7C88F230, 0x46A5BF98, 0xD40413AF, 0x7166EADD,
+0x20EBA889, 0x0316F7AA, 0xCFD7B352, 0xE8BF7564, 0x828B7F4F, 0xB54B6D5B, 0x6EEB15C1, 0x8457BA73,
+0x0E6041E6, 0x1BC55EF0, 0x118FDE2E, 0x34F44951, 0xE759C66D, 0x93F2D8AC, 0x6A5FD094, 0x179DEE93,
+0xECAD5B05, 0x87068559, 0x81DA9D4B, 0x23EDD368, 0x5E86BD6F, 0xE312F0F8, 0xAF9FCDC0, 0x2E54CCC5,
+0x384DF14B, 0x54279837, 0xF17F75AA, 0x9A88F3EE, 0x1503BF5C, 0xE54F0935, 0xFD786074, 0xB5848182,
+0x53ECEE44, 0x63CD4FC2, 0x9399BDC0, 0xDBA00A2E, 0x11AB3D90, 0xFACE915D, 0xD8A939F8, 0x224DACFD,
+0xF323D539, 0x9A790E21, 0x46D4609F, 0xBA170761, 0xB3E70425, 0xF67A7D5F, 0xC76C2F2F, 0x6734AA0C,
+0x74549819, 0x228D1509, 0xF08953A3, 0x13A28E54, 0x7CE1111F, 0x9EB6716D, 0x5FEAC64D, 0x65D46922,
+0x62442699, 0xEDFAB567, 0xF87F2E4E, 0x7C4071E7, 0x189EF617, 0xD3C2EF7E, 0x21B7FB52, 0xE03AB834,
+0xC4D4BA28, 0xFA267C1C, 0x9F9BF7F0, 0x81B01E11, 0x73C3DB63, 0xE033813B, 0x26AC5248, 0xC0F65307,
+0x98230C8B, 0x7595F3CD, 0x5439C393, 0x5B3928C6, 0x2580C663, 0xE8605476, 0xA0E132E9, 0x521D34C0,
+0xF391636F, 0xC449581C, 0x21F281E1, 0xA260F25F, 0xF6B58ED8, 0xD0C17278, 0x2213A635, 0xF23E26CA,
+0x0C110C93, 0x14361CA3, 0x33D855A9, 0x42559FCC, 0x71F36EE0, 0x39FDB650, 0x02A6B260, 0xE1A5452D,
+0x4CE58C01, 0xD723DD4C, 0xA4A1426E, 0x00D9452B, 0x650113E0, 0xD1756BD3, 0xEEF2E8F0, 0xAE04F74F,
+0x936EFF4A, 0x1DA4959F, 0xD1A0B321, 0xD0B1BD4A, 0x4395FB07, 0x9A8472DC, 0x2294BF70, 0x91E12D73,
+0x797C57DF, 0x76D3C7D5, 0x61629676, 0xBD0921F7, 0x3EDDB1C6, 0xF82FC7E7, 0x62600F61, 0xAB32926A,
+0xD963B8A8, 0x1B84130A, 0x5C2FE2AE, 0x2158682B, 0xCB3CCC56, 0x16DF6C84, 0xA078394F, 0x02D6A09F,
+0x7582AFB5, 0xAE0450C2, 0xCBB338A7, 0x519FF22E, 0x1E7DD37A, 0x7AAA3F56, 0xFE8FBB0A, 0xC1AEF62B,
+0xE419301E, 0xE709A47D, 0x970C482B, 0x708FB253, 0x0CD70AC3, 0xADEDE2EC, 0xBE406A71, 0x0FF0D2D1,
+0xDE88C87A, 0xC86D0C7D, 0xF4EEFFC8, 0xEA66D9EB, 0xB291E623, 0x6DE25CE7, 0x2761E41F, 0x7647AA76,
+0x974B8A52, 0x02DD49BD, 0x1830B74F, 0xDE136709, 0x0128041E, 0x985C2CD4, 0x28C49523, 0x6BD4A553,
+0x6F89C71D, 0x4EAFDB0E, 0x2A8F6D12, 0x9BBA3A1C, 0x36D1101E, 0x5239D894, 0xA8021F97, 0x9DF06ED0,
+0x395A1612, 0xA99F3790, 0xC24853F3, 0x32D6BE8E, 0x7362E650, 0xF4956099, 0x77A905DF, 0xDE2D5A38,
+0xEBFD087C, 0x8913EF61, 0xDEF60201, 0x02235A29, 0x3B68F4DE, 0xA8DECCE2, 0xA32E3B67, 0x84A31DC1,
+0x66D19301, 0x29397FA5, 0xDEA9E980, 0x7339A694, 0xA8F916F5, 0x87BDD0A1, 0xEEE4D9D0, 0xDF11B029,
+0x3A0C4E40, 0x3028E972, 0x9F72ECF8, 0x0D9D7BAE, 0xF34A939D, 0xE7D37A5B, 0x98AA9F6C, 0xA83F090C,
+0x946DAAD8, 0x16FF776D, 0x59C0582A, 0x3FA6B89B, 0xAED3034C, 0xD30E190C, 0x83C0E5B3, 0x651AFF14,
+0x58D1A004, 0x53B97065, 0xBBE65068, 0xD06A98C4, 0x719ABBC5, 0xB5A3B5E1, 0xCDF35AFD, 0xF78DB73A,
+0xC45E9699, 0xF712C01D, 0x03F5BEC5, 0x9117398F, 0x9D27BB23, 0x92B3513F, 0xA7B0D119, 0xA20D15FD,
+0xCF9A0949, 0x85EC0EFE, 0x4F7EC0C1, 0x2C9BBC17, 0xE637654A, 0xFB67E3B0, 0x7D01938F, 0xFD45C8B6,
+0xE2270487, 0x3F4DE4AE, 0x01E62DAA, 0xB9361F3C, 0xD32A2DD4, 0xB9040F55, 0x2E448B70, 0x3478F2D7,
+0xDEEB4292, 0x5B6E5E7C, 0x6C29C3BD, 0x2A3AC71B, 0x9DA1B8E2, 0x79864ACD, 0x8C4862F2, 0x930B5130,
+0xD2EA08ED, 0xA7B1D544, 0xE48F8F01, 0x288F4868, 0xAD3D1AC7, 0x15FC9B50, 0x534E6724, 0x544D51C7,
+0x05EE84A6, 0xE261F1BE, 0x6A8F0520, 0x797E2D9B, 0xBC06AEE6, 0xD1A187C3, 0x418CAB49, 0x316C425A,
+0x8ABB12B7, 0x5C96C41D, 0xF6FEC518, 0x4BDA97F4, 0x15CBE1A2, 0x9A617318, 0x4CD83C74, 0xD7AD000F,
+0xECA12604, 0xFEAC4ED9, 0x2B518844, 0xA4741DA6, 0x5D4DEE55, 0x13BDAFB8, 0xDA5047C2, 0xFEA8BD50,
+0xC766C2F4, 0x0FC8772B, 0x4EA3F2A6, 0x6A768CC2, 0x008CA71A, 0xA34FB9D7, 0x6710B027, 0x092AD03D,
+0x78F83EB9, 0x0E088C79, 0x9F172537, 0x7222CE39, 0x01022A19, 0x3122DAED, 0x737715FA, 0x89746E51,
+0xA71F6861, 0xC78A560B, 0x70C068C6, 0xF6DCCA97, 0x90E963D7, 0x2A6A1972, 0xC27F7576, 0x717B49DC,
+0xBDEC18C1, 0x9EF7F9B9, 0xDCC2CA58, 0x30C0F552, 0xDB3166DC, 0x30B36DDC, 0x331B195E, 0xE6526E9E,
+0xB49E2BDB, 0xA9175B92, 0x717BEE07, 0x50F8E909, 0x46DEB72E, 0x06D488B1, 0xCD254E10, 0x29A23BCE,
+0x4AD8FFF7, 0x4DCBBF5C, 0x3BBDCF48, 0xD2CB6DC6, 0x4DCD1231, 0x365ADE6F, 0xF6B5B3FC, 0xFB92C89F,
+0x90870588, 0x042D37EA, 0x52646AF2, 0xBEC2A575, 0xEB4EFB74, 0xD290B1FC, 0x6FA15AFD, 0x0B906B7A,
+0x3938C5C1, 0x3DBD3D0F, 0xD9BFBBFE, 0x0BCA89D4, 0xFCB10029, 0x19AE4DAC, 0xA051AC68, 0xFA34C800,
+0xD9C5AB51, 0xC02548F1, 0x8F1509B3, 0x63024535, 0xFC2A74F7, 0xCE09F328, 0x8B6C6736, 0x5D44EC6F,
+0x8BACCC3F, 0xFD83F3FF, 0xD5871375, 0xE8CCF0DD, 0x29CF28A3, 0x8BA943B3, 0xA1A624D7, 0x4BDC23BE,
+0x70078BE2, 0x869CB401, 0xBCF4C509, 0x26A0F21C, 0x2BF4C703, 0x026BC425, 0xC1D29636, 0xF4C2ECDC,
+0xAE212E90, 0xBCA19BED, 0x3B5164E7, 0x5DC819EC, 0x4A951438, 0xDE5640C9, 0xD9A3434F, 0x67250039,
+0x788CFB11, 0x85216D3C, 0xADCDB841, 0xCF2E13C7, 0xBCBEB8C6, 0xE91E3784, 0x74C91EF5, 0x96029319,
+0x9319052C, 0x757CEA4B, 0x25882C63, 0x411EEC3F, 0xEE0DC227, 0xB7FBD3C9, 0xACB71E19, 0x2C309913,
+0x2AD60A12, 0xD59DF564, 0x7693C7CC, 0x830ECC10, 0x9B7064AA, 0x694F9EE4, 0x36732186, 0x227D295B,
+0x9BC7564E, 0x137CBFA9, 0x5FD6AE63, 0xCF100347, 0xE472D4DB, 0xD223EBC7, 0xDE0ABBBB, 0xBF5BFD45,
+0xB7EDEAA6, 0x6C8E647B, 0x7DF3B6B9, 0x27267E30, 0x446235C6, 0xBB0DD9E7, 0x79B54A6B, 0x4CBADD4A,
+0xCC03C7F8, 0xFBFDCBFE, 0xE864A2B3, 0x6BF96B04, 0x6043D417, 0x425B0126, 0x02EFA634, 0x978059E7,
+0x977882F9, 0x223D3D25, 0xBF958E5A, 0xB6E24F0E, 0x92EF130C, 0xF61BF1F0, 0xF27FA187, 0x91F48D63,
+0x11963C06, 0x45509BDF, 0xF079C4B9, 0x7E90F5CC, 0x741E7055, 0x0863A686, 0xBF40A749, 0x77139196,
+0x3DCB1CF8, 0x64DA5F85, 0xA3B977CC, 0xB60FB84F, 0x4D748EB3, 0xDB1097EE, 0xDAC5DD1A, 0x903ED527,
+0x71CA25BF, 0x3A43F8C5, 0xA7F30187, 0x8C0F489A, 0x6337E4C5, 0x0086A4C3, 0xE320B8F1, 0x4B1BC351,
+0x1B574566, 0x069B3FE0, 0xFB2567B1, 0x353D962C, 0x6D13A62C, 0xE5B27A04, 0x52D12C66, 0x1E23E33E,
+0x4174097A, 0xABFB5BC1, 0xB7A0CDF3, 0x8B1AFC3C, 0x93C542F9, 0xDAED1112, 0x499BD20C, 0x7D3BC982,
+0x0B5445E4, 0x982AE838, 0x82433906, 0x8CBE886F, 0xC9BA6DEA, 0xBC678EC5, 0x5F3EEB39, 0x41BE3940,
+0x6A4CD2C1, 0xCD0F643A, 0xAC32B402, 0x98859FFA, 0xFC123199, 0xCF08DE65, 0xF05451AD, 0xD71D3499,
+0x61B2C6DD, 0x74B6F4DC, 0x73ADF800, 0xF3FA79DD, 0xBFDE6FD8, 0xE5CD4346, 0x730292B2, 0x1C4FAB19,
+0x4BF89CA4, 0x23C43FD3, 0x3B8E5E0C, 0x930531DF, 0xB4ED85CE, 0x916FE142, 0xD4AC7304, 0x3117884F,
+0xAA2C11C0, 0xA128ECDE, 0x3D5DCC40, 0x9458CE17, 0x103EE05E, 0xC69C80BB, 0xE09B9F00, 0x364E61D4,
+0xAB4EA263, 0x0F56569E, 0x4FF9F45B, 0x6EC47A03, 0x605E9678, 0xB458D818, 0x2C75FE20, 0xEFD3F4CB,
+0x8715647D, 0x59AAC64B, 0x9EC69B04, 0x4E1CBEA6, 0xCC99BF2B, 0x17968B62, 0xE137DA02, 0xCF91015C,
+0x7ECF8D02, 0x67C4C125, 0xEF3A68D2, 0x14BAB088, 0x1BE1C6C3, 0x37326498, 0xC7254FD3, 0xA55E3B94,
+0xA92761B5, 0x2E1A2B18, 0xEA661A9D, 0x4C42E15A, 0x8B7F8B2A, 0x6B63AACD, 0xA17CF923, 0x1A90823C,
+0xDF018E0F, 0x6BC1C9DB, 0xF2CD8ED8, 0x5897045F, 0xEA46257B, 0x6B43B85E, 0x8F51FAAD, 0x69C4F395,
+0xFE4797EC, 0xB2EED575, 0x3D0C1CED, 0xB70AE9FC, 0xE1376729, 0xAA5BC206, 0x785D4D7E, 0xC6BF7492,
+0x13C442FC, 0x3F642924, 0x0C2850CE, 0xA2A1FE58, 0x89363FB6, 0x4C7EF408, 0xE335EB6B, 0x980F5643,
+0xC66A40EB, 0x08C86E2C, 0x7F800EF9, 0xE9AF4F03, 0x8B679AA2, 0xBF4AEC34, 0x5F6CE393, 0x96F1B50B,
+0x99237FC3, 0x5B9F445D, 0x3CAD0BE0, 0xB79AFB3A, 0x02F56137, 0x0C225E87, 0xE331D0AD, 0x53010FDC,
+0xD1369D6B, 0x1825DA93, 0xB8F4D890, 0x6BB8725A, 0x5F206BF2, 0x2EF3AD77, 0x79B7AC5A, 0x4E351DF2,
+0x8CF3D3F9, 0x5FC9F804, 0xEA2F9A3D, 0x45091FAC, 0x38E782C8, 0x8EABC710, 0xBC44535C, 0x56C9EB10,
+0x3B14214A, 0x1D2075B8, 0xBE45D912, 0xED5EF5E3, 0xA1E43297, 0x7D85DBC5, 0x5413C626, 0xAB398A69,
+0x6953E3C1, 0x1D280D5D, 0x2728258C, 0x81B3DD4D, 0xA9CD5B99, 0x01C4CE81, 0xD190997E, 0x343FE676,
+0xE0028643, 0xF87360D5, 0x62E32090, 0x84B3F709, 0x460E44CF, 0x37E17132, 0x3EBD5C0B, 0xFD41AFB3,
+0x63B26E76, 0x56929CE3, 0xEC744D60, 0xDABA62F5, 0x97749EB3, 0xBEC5BAE0, 0x9DCB6730, 0xEA949EC1,
+0x69691E55, 0xE712C0E8, 0xF333A2F1, 0xC3080ABF, 0x92C6AC37, 0x31508249, 0x660A8785, 0x5A6F17DB,
+0x4A8D7BFE, 0x033B54A0, 0xE4566F09, 0x658B6AA5, 0x9E785DCE, 0x6D3CAF4E, 0x67866644, 0xD1D61B11,
+0xA26F2F09, 0x065021C1, 0x5C1E7ADB, 0xEC903053, 0x4ADE939A, 0x63434B8C, 0xFA8F478E, 0x4277DC58,
+0x3DDE2C62, 0xF9EC07E9, 0xBF32EB3A, 0xD41684E6, 0xC66735C7, 0x46972496, 0x24CAD5F3, 0x94815901,
+0x17B12F25, 0x1E85A0C8, 0xCA3F66CA, 0x1E396EE4, 0xF901A417, 0x4ABB6E2B, 0x082E86BD, 0x7E7EA85B,
+0xDDAD398F, 0x83C0B8E0, 0x08EAC4E8, 0x789F8BE7, 0x4654FAE2, 0x4D9ED05F, 0xC1FA1B29, 0x9CECB8D1,
+0x7A469694, 0x4662B9E5, 0x21943C8F, 0x303C1FD4, 0xF0E43971, 0xF9B9DEF5, 0x9C536EB8, 0x3B3945B0,
+0x5B532DF4, 0x582C9387, 0xA94713AB, 0x2A3E2B22, 0x5626CB68, 0xBE5ABF88, 0x854A3B2C, 0xC461689E,
+0x8DC5EC03, 0x21DE4F1D, 0xD559D640, 0x05CEE688, 0x3263423A, 0x875D7D30, 0x7A3621DC, 0xE4D8D233,
+0x5D6EC3EC, 0xA5573EC1, 0x0DD13E20, 0x412D54B4, 0xA680EEB6, 0xCE8514EA, 0x0A11620A, 0xDD50377E,
+0xB54294EC, 0x7343AD0A, 0x83EDDB2D, 0xF0D1CB95, 0xEB8A9FDD, 0xEB93FF43, 0x370C2D07, 0x615472BF,
+0xC87BF7A7, 0x7848A841, 0xAB1448F7, 0xF907393D, 0x965C08EA, 0x42FF1104, 0xC4B7B5A8, 0x4CEA8E61,
+0x8020A315, 0x2C451C60, 0x0AE9E5A9, 0xEC79FB31, 0x0E3685A1, 0xBB76D29C, 0x0407225E, 0xEDEA4A6A,
+0x87ABEF4D, 0x9D44E6D6, 0xE9EEEB34, 0xF48DA7C0, 0xB286B6A7, 0x21D11406, 0x7AF37184, 0xFDC058CC,
+0x7D44D71F, 0x8824E3CC, 0x2ADDD69E, 0x05FDCC2D, 0x5ACFD83F, 0x9C8EE90B, 0x84631A92, 0x9F7CB67C,
+0x940202CF, 0x7C055D8A, 0x4742BC9D, 0x7F537BD3, 0x808F0190, 0xB02E187D, 0x23582F1A, 0x765E8238,
+0x149937D0, 0xA86CA561, 0x68915FAB, 0xF2E8708F, 0x6E42B5C4, 0x91B332ED, 0x4D54A518, 0x672DB127,
+0xA0A94918, 0x6AEBA676, 0xB9886E91, 0x72ABE5CF, 0xF8E4324F, 0xC905CF2C, 0x1E95A7D6, 0xB3EC5C28,
+0xA9B42440, 0xD5F3D5C3, 0x719C87DC, 0x06D4AA19, 0xC6F1150E, 0x67BFD362, 0x4DB75AA5, 0x6CC23B21,
+0xD217D9CD, 0xB6ADEE58, 0xFF3596C0, 0xBCC1EC3E, 0xDD0B192B, 0xE2F9E013, 0x0CA521DB, 0xB45C1FC3,
+0x56C07A90, 0x0CE951B5, 0x4F98114B, 0xAA595993, 0x7D824B50, 0x67D965B8, 0xAED67DCC, 0x899C6795,
+0x7CC20A09, 0xF0B9ABF9, 0xA2F75557, 0x25F6E6DA, 0x74B2E4C2, 0xB00A1E4E, 0x18068E5A, 0x5FA9A580,
+0x2908635C, 0x5A8228ED, 0xA98F905E, 0x0F067D41, 0xB4C3075E, 0xCB6D3A7C, 0x11F8689A, 0xC1D61C25,
+0xE9E41E7D, 0xE1C0D4D8, 0x51CF8A61, 0x9390DD61, 0xEF88DBBA, 0x634FBEF3, 0x85BFEB4A, 0x6FBBE404,
+0xF2D11D86, 0x19A2712C, 0xAE7DE5DE, 0x072DC18B, 0x682558FA, 0x2353681E, 0x2EB6F055, 0xD8D52034,
+0x440F56BD, 0x89B0212B, 0xD2C3DDB1, 0x053BF3AF, 0xC46CAEB7, 0x6CC58716, 0x4D9F71B5, 0x041863C6,
+0xA504733F, 0x74CF7B73, 0x28BC09FE, 0x52728A9E, 0x97C60B97, 0x869D5E78, 0x45AE40DC, 0x9DC63AA4,
+0x04730129, 0x3D8E0121, 0x3520CE7A, 0x4A48E934, 0xDD73E7D0, 0x2CF7BFDB, 0x0BF9B41A, 0xD7BC097D,
+0x94A0AC97, 0xD16DBBAF, 0xD1EB76F9, 0x7D308E74, 0xCB4F914D, 0x37C6B42D, 0xDA68CF4B, 0x989DE68B,
+0x9B8EE5C3, 0xC2B3CAA7, 0x4763794D, 0xC7BF1B9B, 0xE83B4B77, 0x9001FA9F, 0x7A0C36A1, 0x1BADDB53,
+0xEC1A0536, 0x117B5A6A, 0xCB39ECF0, 0x7CF1CFDA, 0x976FB23C, 0xA9704974, 0x15B6835B, 0x8B98902B,
+0xB615713D, 0x27916EC8, 0x119C4D98, 0xEE15AA87, 0x9F8498AD, 0x01783C37, 0xB707B779, 0x5928DEDB,
+0x458ABC65, 0x5D6BCB99, 0x0448D269, 0xE2E3FECF, 0x8C642BA9, 0x6F129863, 0x1A5DACB1, 0xE6CD93FE,
+0x3E43D823, 0x8B9E9748, 0x0BC6DB63, 0xF3B342FF, 0x8C110F7B, 0xC4018B87, 0x41AFC184, 0xE52D580D,
+0xEFE64CAF, 0x13BC4F05, 0x73825D5A, 0xC9920B1C, 0x1247A636, 0xEDD65842, 0x1741A972, 0xDA7088EA,
+0xEA017A8E, 0xC7AF34D5, 0x6EC6BF76, 0x6BEE53C8, 0x8D4BE390, 0xEF532677, 0x90F01479, 0x0104E7C7,
+0xD49033D2, 0xE3D3AB24, 0x982955E4, 0xCA9B07AE, 0x7002C959, 0xE8A386C3, 0x3AA78756, 0x63FC1792,
+0x83166DEC, 0x8ABD08E5, 0x41A7A16B, 0x3591DD42, 0xA9EA381A, 0x66B00392, 0x4052FECC, 0x0A701A2E,
+0x3804EAAD, 0x59BC7151, 0x1169B993, 0xE0436279, 0x4AD72241, 0x394CDAE2, 0x0437C116, 0x979C9F1A,
+0x5C2533E7, 0xB57C0D1E, 0x3F64F3CB, 0x83352F78, 0x0E4F5AE6, 0xADF6FFB7, 0x106460EB, 0x043EC5E1,
+0xC74330AD, 0xE1BF757D, 0x21CE054E, 0x0529E68F, 0xFAD006A9, 0xB1044483, 0x21B76E82, 0x2A97FAEC,
+0x356DF2DF, 0x1B2CF356, 0xB46500C9, 0xA212AEA3, 0xA4A0C646, 0xA089FCF9, 0x92A6B030, 0x5EB6AC00,
+0x2A2B38A0, 0xA1B86250, 0xDD45B1E5, 0x37F7EB90, 0xC255CEC0, 0xF0780E5F, 0x74FD2AE5, 0x105498C8,
+0x4EDD1660, 0x29F8CB60, 0x89E529C2, 0x676659D3, 0xF97AE5CB, 0x0642028D, 0xD2521788, 0x1F4EDCC2,
+0xE85CB0DA, 0xD8233F3F, 0xDCCE2512, 0x6560172A, 0x5C290F38, 0x9BDEEB0C, 0xFC34E199, 0x8D74D80B,
+0xD479B342, 0xD852BC65, 0x0B5C8052, 0x2E50FF42, 0x35FFF608, 0xB9FC62B1, 0xA5899CD1, 0x6ABC49EE,
+0x3C9CC257, 0x2C01DD94, 0xA1D50C82, 0xF9B48CC7, 0x2070A3C1, 0xD59BF546, 0xC1B12057, 0x10F406AB,
+0x081158E9, 0xFD276C38, 0xA7670182, 0x85DBB31B, 0x1C4C9516, 0x896E5A08, 0x60F2EB3D, 0x7E45F303,
+0x9278FF4D, 0xBFEC1921, 0x39F4089D, 0x3881236A, 0x11ABC3F2, 0x3B149510, 0x0D392911, 0xE39EE7D9,
+0xC380EF64, 0x6D49F24E, 0xC49047B4, 0x2D0590E6, 0x6AB038F7, 0x55969AEB, 0x207C9B5E, 0x59D366CB,
+0x6F27B953, 0xA11DD3BB, 0x8E95ED54, 0x6A5D8AAD, 0xA09CA15A, 0x8E5CD63F, 0xC0F6B3EE, 0x9C2845DA,
+0xD1201028, 0x0E32C6E1, 0x3B2D860B, 0x868FCF2E, 0x6D0A3C3E, 0xC20ACDAD, 0xC1B0CAC2, 0x52015515,
+0x2AF1B5CD, 0xF293C98C, 0xDC267F70, 0x22FC8897, 0xE4678852, 0xA1FDB588, 0xA85579C8, 0x7E22449E,
+0x52CF26CE, 0x426FC61A, 0x758FE5D1, 0x00B47EF1, 0xB3066A51, 0xA543C66E, 0xFBB3E3B9, 0x56F08715,
+0x32A8735E, 0x2B0B17CE, 0xF9BAC6E2, 0xC06FB0B3, 0x2FD8453A, 0x9BD43928, 0x9169D874, 0xAA56893C,
+0xDEF28816, 0x129D8BE7, 0x9BA825E6, 0xCB83FFCB, 0xF747986A, 0x7DE33D7E, 0x155BA74C, 0x39058D4E,
+0x1288DEE7, 0xA4F9C752, 0x73F8C42B, 0x8F4D9E83, 0x91CB6A82, 0x61B4D0FF, 0xABB7C890, 0x24F8F865,
+0x0A24148C, 0x6A9566A3, 0xDBC294BF, 0x1AE2AE66, 0xB2BA8C3C, 0x63ABDDC6, 0x81FB845D, 0x89F7B4CB,
+0xA9CBA253, 0x8696EA38, 0xB5D8C22D, 0x15714247, 0xEA9B1D08, 0xFCBF1AA9, 0x512AC3EB, 0x8D40498C,
+0x62259E10, 0xAD02915A, 0x647EF3B4, 0x0EF41476, 0xEAAC9ADE, 0x2BED2209, 0x5C6D9A2D, 0x7A9182D5,
+0xB3E0CC2D, 0xE99A9F3E, 0x36945078, 0x2897E634, 0xF9E61BFA, 0x9F410342, 0x67738FA5, 0x43D76134,
+0x8D3CFD4F, 0xC240E164, 0x0400291F, 0x94D76A7E, 0xF1311655, 0xE024356F, 0x933C84C4, 0x58F1AA63,
+0xAF50B15D, 0xA3256121, 0x2BB9E89C, 0x459CCAF4, 0x598A89BF, 0xDDC47747, 0x2F04AF74, 0x2B56233F,
+0x26545BA7, 0xFEDD4B4D, 0xE7C43B9D, 0xF0A1FC75, 0xD5E3B6F2, 0xB1FEBF14, 0xA386F190, 0x6E926729,
+0xEA53C649, 0x7689540A, 0x13DAA020, 0x5AB9B98B, 0xB32D0642, 0x137CD23A, 0x023C42DB, 0xBA62F36A,
+0x5CAE806F, 0x320F3FD0, 0x12722EA7, 0x13B9A36F, 0xE9235FE9, 0x5D77CCF5, 0x8CA7FA8B, 0xA9110410,
+0xC50367DF, 0x6B58EFCF, 0x5E748E3B, 0xC3574389, 0xA6C5753E, 0xD42F01C2, 0xE70BC5BD, 0xE9A61F4F,
+0xB5D70B69, 0x55515E64, 0xB2252626, 0xCAE69FDD, 0x85662B46, 0x69B71119, 0xB4C33D07, 0xCB39042E,
+0x28FB156E, 0x8C2C043C, 0xD1279B31, 0xAD7AE7A7, 0x5A1415A5, 0xE7A0B9A7, 0xC9481012, 0x7EAEBB15,
+0xCA6D0BAF, 0x05CE65D9, 0x5525107F, 0xA2A19472, 0x8BB6D7F8, 0x4BF0C74A, 0x4A5D3A7F, 0xA006D6E3,
+0x0D59702B, 0xAAC40856, 0x8DC91E75, 0xC368A5AA, 0xF3F0D49C, 0xE8A11029, 0x68F30D10, 0xFE4282B1,
+0xEED8FD68, 0xB38391BA, 0x721654AC, 0x7F3E22C3, 0x1976F1AB, 0xC2D0908C, 0x7C05EA10, 0xC8C29F18,
+0x8D0B4416, 0x04576021, 0x8939DAAF, 0xA49DF248, 0xC007EC59, 0x99FAF431, 0xF6360028, 0x5B212E14,
+0xF3306E44, 0xA1E6F7EC, 0x4918DD03, 0x6CB6CD41, 0x2276AC84, 0xA3083C3E, 0x07AE0D56, 0xA21F46E0,
+0x2E4D3241, 0xFE6F46A2, 0x0E8A9AB8, 0x60A2FE33, 0xC6DFEFAB, 0x339F5A96, 0x2D7EE85E, 0x5FAA61D7,
+0x85A3D905, 0x1497AED1, 0x451C5F24, 0x03AF3EEE, 0xEF7CF9F9, 0xE0B6DA22, 0x79D5ABAA, 0x513FEEFC,
+0x05CB757C, 0xCB5A538B, 0xA5780082, 0x86FE5C70, 0x0F2AE76D, 0xB687E3EB, 0x24B915E4, 0x6E4ECB44,
+0xCB517EC9, 0xD909B448, 0x52CB69B8, 0x808FC9AF, 0x392E74FB, 0x91495C56, 0x15C91079, 0x63CDF30C,
+0x1280CCFB, 0x32590364, 0x0EFA9597, 0x591B6CBA, 0x638DCB5C, 0x74A4D44F, 0x9AC5EE71, 0x3D2B2DD9,
+0xC187DFA5, 0x6C98A7BB, 0xB7CCFA71, 0x0D6BB7C8, 0x2EF4CD11, 0x79964B1C, 0x7816B179, 0x3E0297DD,
+0xDB698FC7, 0xA07BDC3A, 0x3FB03242, 0x4E19450B, 0xAF81C394, 0x908470CE, 0x263D8843, 0xBD6E8FAB,
+0x4711AAF5, 0x8D9F691C, 0x69FA1061, 0x38B3EB22, 0xCDCB6CB3, 0x9F9BEFBC, 0x631C012A, 0xDA2CF503,
+0x7E919C2C, 0x035ECBD5, 0xF22262CA, 0xF6F062A4, 0x51FE7F55, 0x8D1E12B1, 0x310C95DE, 0x53664A96,
+0xD6593DDE, 0x7625B0DA, 0x3BDFE19D, 0xEB132C8E, 0x514D1F8F, 0x78F1D473, 0x74EB7DFD, 0x2587E03E,
+0xFC03386C, 0x25C154F0, 0xFECB9BA5, 0x55906B94, 0xBFBDE79F, 0x36BC025E, 0xA794F41F, 0xA3268CF9,
+0xA660E9D3, 0xEA746ACA, 0x004437B5, 0x17D6D84B, 0xA4C212BB, 0x0CB76F5B, 0xA3CB3233, 0x71DBEFA2,
+0x615B9649, 0x75626768, 0xD19AEA59, 0x8BE64212, 0x2778F1D8, 0xCFD73E5E, 0x327B4AAE, 0xC9C1BC23,
+0x69ADE73E, 0xA5D7C876, 0x35BC0CDE, 0x35B5C866, 0x27AC83DA, 0xF7EFF4EE, 0xAF3C691F, 0x31B7611F,
+0x9E7C337E, 0xA2C84840, 0x2A6D66E9, 0x0FADAA66, 0xC030D4ED, 0xAB8A522D, 0x5E0B6A83, 0x4EBC19F8,
+0x68623D59, 0x48964232, 0xA94A0DB1, 0x8EDB546E, 0x1BC0606B, 0xEE112DF0, 0xD44D7BD3, 0x6C04F67C,
+0xADB38D60, 0xD7B5EB12, 0x0C6D758E, 0x25FA398B, 0x6B5FD9C6, 0xE56F0D95, 0xCAC3B098, 0x0F0AAE53,
+0x75F313E9, 0xDFD6F095, 0xC35A2291, 0x834273D9, 0xAF9B5E84, 0xB1C7BA72, 0x91C7402F, 0x92A729B9,
+0x8644096B, 0xCAB99219, 0x8D1CDC31, 0x6377816E, 0x4C3B9134, 0x1598B9EA, 0xB3E89D26, 0x1B90FF24,
+0xFBA97023, 0xE9DA1716, 0x61FF88BE, 0x4F726A54, 0x16E02B68, 0xB0C98468, 0xDD65E0A2, 0x8763C5EC,
+0x47B06BD0, 0xE246D7B0, 0x17654727, 0xAFD84D54, 0x3F76E6FD, 0xAF0C2D98, 0x70BCF348, 0x1D276322,
+0x4CA2964A, 0xF1F07D1B, 0xC2485011, 0x8A832195, 0x1750742F, 0x7600B150, 0x9001C4DF, 0xAF324F55,
+0xA4CE9578, 0xAD834453, 0x42C6D0A7, 0xC2BDFA37, 0x27CAFD7D, 0x67EC9660, 0xD178AEEB, 0x45BB211B,
+0x745F2DDD, 0xCC3C4218, 0xE386B6D2, 0x2BC0590D, 0x9C1D3447, 0x0FA63885, 0x0912A63E, 0x6BBEC8A8,
+0xB721E406, 0x48C42E73, 0x6D9AFA1E, 0x72D5BD54, 0x4DE50EC5, 0x2DADFAD0, 0xB524BF1B, 0x7D0025C7,
+0xFE7B5CF2, 0x9FEDA729, 0xD45070AC, 0x1BEA8B3C, 0xFDF72DD0, 0x95B5A4A3, 0xFD3DE55C, 0x36B2503F,
+0xD02F2662, 0xDDFCECF9, 0x7230F3C1, 0x88B33048, 0x69574FAC, 0xD283A8B8, 0xE6B9F640, 0xCE146F49,
+0x7710BEDD, 0x4755FEBD, 0x794C2179, 0x0808500F, 0x44EAE55B, 0x2AE5FF83, 0xA670E9BE, 0xEE6701E7,
+0xB1637D95, 0xE2D1863B, 0x5E9816EF, 0x0057ED8A, 0xBFB5C58B, 0x7AC055F4, 0x3FD57354, 0x98F60F2D,
+0x6AD3C390, 0x25299641, 0xEDFC6F17, 0x0B12F768, 0xE734E1E7, 0x986596F0, 0x2F882457, 0xA570BD17,
+0xD71C027D, 0x0850B1C2, 0x98385271, 0xB3248C5B, 0x0B322A2B, 0xAA66B8F4, 0xC2570CFF, 0x1EA2C4EF,
+0x5C758B4C, 0x01E9F997, 0x7CB295D0, 0x7C64D469, 0xDD526C22, 0xD143F52D, 0x809DB931, 0x2DB7A6FE,
+0xECF8A7B2, 0x694B5D00, 0xEA41658D, 0xBA48AF1D, 0xBEDE65FD, 0x816C7DAC, 0xB5738FFF, 0xF5C2D671,
+0x08CFD530, 0x6787B523, 0x6EF5D032, 0x4B5D21F3, 0xFFF5979D, 0x8B31208B, 0xE80567A3, 0x2528BBB8,
+0xEBA40302, 0x31089438, 0x8BC683BA, 0xA411ED0E, 0xA38186A1, 0xFB072253, 0x020896A9, 0xF734BD7B,
+0x40EFFA0C, 0x0929E1A5, 0xBB086F0B, 0x47B0B6D6, 0x4AF844C8, 0x06DE77B5, 0x1AC52D85, 0x4B118C82,
+0xE9FBA4C9, 0x385D98C2, 0x28CA9308, 0x113F408A, 0xF1281C98, 0xB532A876, 0xB24D8AF0, 0x9176A3B1,
+0x3B6B3B24, 0x3303EFB0, 0x7BF3524E, 0xD9E575AB, 0x41FC3112, 0xE918E7EC, 0x406CE733, 0x2F8AA58C,
+0x2D18B8C5, 0x29AA62B1, 0x8B6B2EF9, 0x78D261E0, 0x7D57FCD5, 0xA6184606, 0x5E607DD8, 0x244CD7B7,
+0x6D883199, 0x4EF29B9B, 0x0692988C, 0x41BBC851, 0x59F534C9, 0x00EA0B49, 0xA31ACB52, 0x568B73E3,
+0xEBF62CE0, 0xBBFC682C, 0x4059AB28, 0x61C94BD9, 0xAB55E65E, 0x7BEA1897, 0x29CF3BDE, 0x5F6B62D0,
+0x0561294F, 0xF55EEEBF, 0x49133897, 0x1FB17426, 0x12C476C9, 0x229A2887, 0xFBC37C15, 0x6024E2DF,
+0xE8A423A8, 0x38A1CBAD, 0x0F9973FE, 0x6A4A07EB, 0xF21DC56B, 0x397F81E2, 0xA35CF76A, 0xDAC2517B,
+0x92E516C3, 0x30BEF999, 0x766218C6, 0xB99E77DB, 0xD6007539, 0x9D5D4426, 0xE4D8EBA7, 0xA16842E6,
+0xEB7C10F6, 0x5EDFE45E, 0xBAB9E2B8, 0x4A8C9019, 0xF9EA66A8, 0xDFD30BBD, 0xEBF78C69, 0x92D39DDD,
+0xF63431B8, 0x656A52D9, 0x7DAB24B1, 0x729B275E, 0x29E3E231, 0xC1493578, 0x490B44A5, 0x684CBCD6,
+0xA8C80E95, 0x73280370, 0x0A28FD0F, 0x6FB6F486, 0x8432DFB8, 0x26708CAA, 0x820C0A39, 0x7C071B87,
+0x5304164E, 0xF504434B, 0xBBF63214, 0xE4083F8E, 0x7E346178, 0x1A72A75B, 0x840783CC, 0x583AF2A4,
+0x32E77FAE, 0xCD565DF8, 0xF1B3305B, 0x4C3584DE, 0xA71854BE, 0x7BA2D06F, 0x7AEB2B50, 0xBAB2C2BE,
+0x2E687CA1, 0x4B5710BC, 0xF6D53BB6, 0x6CE91A1A, 0xFC82BD2D, 0xAD929E9C, 0xF2F8281C, 0x8E6863AD,
+0x964362D1, 0x4C5EF524, 0xC2471CFC, 0xB6C2CC5C, 0x4A8DC76A, 0xAAADAA4D, 0x35060B89, 0x5D5CBB01,
+0xBEB47E82, 0xD751B953, 0xC9EDAE6E, 0x3F872A36, 0xCD05B5CB, 0xE0CF02D3, 0x131AC2AC, 0x8DF0774A,
+0x9F020FFA, 0x9FDC9AA7, 0x867E531B, 0xB5AB45D9, 0xDC8355B1, 0x3F4217E7, 0xBCD47E82, 0xF2A8B6A2,
+0x05C20623, 0xFC0CDC6A, 0xEA188B5A, 0xE5CA2ADA, 0xDF20AACA, 0x7F48ACFD, 0x4179D3D8, 0x698881FD,
+0x6A204EE2, 0x9CC6D5BD, 0x6A2AA115, 0xAB4ABD76, 0x5EAD8C63, 0x561B232E, 0x786D4DA0, 0x5EC9243C,
+0xEFA61457, 0x3DDE54ED, 0xF7D3155A, 0x7B88B8E1, 0x7662F849, 0x53CCA1BA, 0x3B34A7D3, 0x1BB0959B,
+0xEA441C5F, 0xFAB99EEF, 0x53B9F4AF, 0x57A4D980, 0xA9E04C8B, 0x66BC848E, 0xC6C78D94, 0x716CBD7A,
+0x79BF8EF9, 0x3BAB451D, 0x0F91D1D6, 0xC9EBBCB6, 0x91D6A8E7, 0x22B0506D, 0x96F9DC15, 0xF4E6E6FE,
+0xD57F0A3D, 0x2D78F75E, 0xFF21D3D5, 0x51C44317, 0x471330A8, 0x22F6F845, 0x5DA8453F, 0xA69C6A75,
+0x20E51725, 0x41A6F110, 0x5DD91F05, 0x50D1D1E4, 0xD42556E2, 0xBF6CCB41, 0x9E366AC2, 0x98EFFF62,
+0x53D67990, 0xB9C86280, 0x8718DAB3, 0x9086F80F, 0x2BC922C4, 0x00F11DB1, 0xFC24AA63, 0xD4137540,
+0x6DC742E6, 0x364B8387, 0xF448FCDC, 0xC8E9FE8F, 0xAEB1CB7B, 0xA0FD432A, 0x0BE7FE30, 0x2108D7F1,
+0x7CD3C71C, 0xB5032E8A, 0x99B7D294, 0xCB9245B8, 0xD7E55046, 0x7C278467, 0x5C547181, 0x3A95DBE7,
+0xD94CCDB0, 0x08E40FF7, 0xC4090E62, 0x523A1F0C, 0x8541E20E, 0x0FF30BA8, 0x81D61545, 0x16573985,
+0xC606F9D5, 0xE103DC16, 0xE20D5469, 0xB13B4262, 0xDADC0C96, 0x7B688879, 0xFAC3ECFF, 0x16D9BDC6,
+0x80F83200, 0xC1539DD1, 0x81B7239B, 0x5B812A5E, 0x2FA4D402, 0x602A79AE, 0x7053C397, 0x5894BF83,
+0x546AF3D8, 0x10048410, 0x360E102B, 0x09B0D141, 0xAC7A701E, 0x79951C5F, 0x92E9C658, 0x59FD9E67,
+0xFA3F8565, 0x66A03F65, 0x13BB499D, 0xA60A29EE, 0xC0A82901, 0x7001188D, 0x3CD9CF64, 0x8DF5091C,
+0x96BA13B0, 0x547F4EB8, 0x726B10DF, 0xDB3BEA76, 0x65A1DF95, 0x74CAC214, 0x7FB3BBB3, 0x00780837,
+0x9F3BA54C, 0xB89DA30C, 0xE2A21CEE, 0x54592790, 0x37CCAF03, 0xD2ADFA1C, 0xC2233BC9, 0xCA53BC86,
+0xDF7E3158, 0x4CA54725, 0xC65909D4, 0x25D5B207, 0x11C3BA8B, 0x140A8B42, 0x92E33EB5, 0xD1EA67AB,
+0x85DE2454, 0x4222623E, 0xEAC4B1A4, 0x79C7FC60, 0x38ED9556, 0x9E6DD64F, 0xE0F1624F, 0xB03B158A,
+0x7B92E57E, 0x7BAB2432, 0xFD8EF1E1, 0x0A22EF3F, 0xAF22F0DA, 0x2C0E3320, 0x760E0BFE, 0x2F6C6B06,
+0xEE8ECF82, 0x86450211, 0xEAB8862B, 0xC6368E02, 0x710EDB80, 0x940D7F51, 0x78D0848D, 0x89501185,
+0x315A99CD, 0xC10B7BA6, 0x6E76714A, 0xE7807CB6, 0xF9B7CDD4, 0xC7F6F050, 0x3AF4BF50, 0x333A1ECB,
+0x1FDB8D73, 0x836DD895, 0x60736C60, 0x45E3EFAE, 0x7CA8D9C9, 0x9C136408, 0x43D4B49C, 0x0233D913,
+0x360A26D8, 0x693A1D99, 0x2E8D9BA6, 0x6D41A2FF, 0x02D58D46, 0xEF2CBFEE, 0x482EE0C4, 0x91A0B4C5,
+0x6ABF13CF, 0x8271B463, 0x581BFE43, 0x1232CA9D, 0xFA42C2A3, 0x9CFE0CC5, 0xD1EE684D, 0x91573C25,
+0x2FAB994F, 0xE24B23D8, 0x7E915DA3, 0xC9FFC28C, 0x83A83A20, 0x6CB63631, 0x2FFF845B, 0xF292E991,
+0x407F48F5, 0xE2290BD1, 0x44AF9163, 0xF6E80362, 0x3D0E2DD1, 0x2F6E1DB6, 0xFEBFDE20, 0x587A8BEA,
+0xB82D1416, 0xADD51F77, 0x1BCBFCE2, 0x4700018F, 0x09344330, 0x2063EDDB, 0x5B20DFB7, 0x1507C7CA,
+0xB17AA810, 0xA7546B99, 0x9387CBD3, 0xBE423F27, 0x1BCEEA9F, 0xD2BFF386, 0x13C3DE92, 0x02D84F63,
+0x24DC6A8A, 0x5C47E85F, 0xEC8030F9, 0xB4A053BA, 0x2581E75F, 0xD0B29F66, 0x9A80C6EE, 0xE466D0D2,
+0x7C3D6457, 0x47EFD0B1, 0xBEF2E1DF, 0x9565A7DD, 0x8393C59D, 0x415E8ABF, 0x29BF862A, 0xACF25FC7,
+0x0A43ED36, 0xC5F77C63, 0x951E70FB, 0x6CB68F17, 0xEB143EA9, 0x357F6FE8, 0xCC10E76B, 0x5EC1AB7E,
+0xC9FB7AFD, 0x4138B589, 0xA5DAB82D, 0x1A9249DB, 0x93D66478, 0x98740BAA, 0xDA47BF97, 0x7F80BB9A,
+0x9562362D, 0x5A682458, 0x3BE1030F, 0x0EAF6D2F, 0xB3CE0024, 0x1184D993, 0x532237E7, 0x6D4ECCB8,
+0xF8985ACB, 0x87ED39A2, 0xA1C148FA, 0x4A29BB7B, 0x1DF6485D, 0x197B5702, 0x19FB5FA9, 0x769EFBAE,
+0x796E640F, 0x83C6399C, 0xB10D98FF, 0x9FE97615, 0xADFA38BA, 0x4F85B1F1, 0x3673D7AF, 0x965FDBA5,
+0xEEFB9CB4, 0x36BDF56C, 0x48BDF381, 0x7A5C4943, 0xE815DEDF, 0x335E5A6B, 0x39E14DF0, 0xE7941CA6,
+0x303D68BA, 0x4E2A5C00, 0xCCA1EB5D, 0xABDCAE6B, 0xEBE19138, 0x042AA1C1, 0x229CA490, 0xD1455E6A,
+0xA236CE5F, 0x3A8B1240, 0x3ADB6DB0, 0x69793087, 0xD64F47F0, 0xD1F05527, 0x93881E10, 0xAEBA31F7,
+0x880BFE93, 0x9D50186B, 0x5217899B, 0xB78E36BE, 0xFBF24A71, 0xFD4BE12E, 0xA0A0598B, 0xFA9B5C18,
+0x0F7EE7A5, 0xFA2EAB1D, 0xE1E2FCC2, 0x88A3942E, 0x511775C5, 0x99130607, 0xEF1C936D, 0x959C0163,
+0xDAD04CC2, 0xE3D9A36A, 0xCF71BBC4, 0xA329E3EB, 0xD6C08A5C, 0x2ADD1069, 0x09B4D5C4, 0x1470BA55,
+0x7B0034B6, 0x28EA2A8A, 0x1D728FF3, 0x1A2E8AD5, 0x610A3C3D, 0x51EF1115, 0xDC1E4A8E, 0x87BFE03A,
+0x6DB3E609, 0xBE620662, 0x762F5244, 0xE11812A7, 0x7E1C5622, 0xCF8E1570, 0x3D9C49A8, 0xB671B439,
+0xBD8F0A49, 0x2052C805, 0x3CC95BA3, 0xEE0D340E, 0x1321A909, 0x39B46B56, 0xD33E8A58, 0x00000080,
+0x08EE2801, 0x0000C815, 0xB8210100, 0x09001000, 0x38E0CCFF, 0xEF8A9526, 0xC077002C, 0xB114E42E,
+0x10DF7E2B, 0xF5DDAB7C, 0x8DDF14A7, 0x690CE2C3, 0x24E2FA2E, 0x792EF46D, 0xD1A91E4B, 0xE9315D01,
+0x90FB7BDF, 0x36020522, 0x47038D4C, 0x6F7EEB9F, 0x3DA02813, 0x06E7113A, 0x2989BC35, 0x46CAA7EA,
+0xE95967D9, 0x4D7A1DE2, 0x337AE768, 0xC7BDDEC1, 0xF4562DC8, 0xF464CFC9, 0xFE6BB4D8, 0x9EE54F37,
+0x09E9FDCB, 0x5B9A9F1C, 0x7D2683EB, 0xAB91D77D, 0x00EC3B7E, 0xB9D06B31, 0x7AA1399E, 0xB94C8AF0,
+0x2C40862E, 0x705B2D77, 0x7DC2DF50, 0xE0787AF1, 0x0F5EB614, 0x11115B10, 0x01998416, 0x6B4C291C,
+0xAC9CCFE1, 0x99D43034, 0xDE69F0AC, 0x0285D62F, 0xA56FE2D3, 0x5DAD4FA8, 0x857512DC, 0xF7D1E783,
+0x07B80394, 0xFCC4248C, 0xB3DDC89E, 0xDC038D53, 0x011B9247, 0x6CC6566D, 0xB9604F4A, 0xBEAB66A2,
+0xAC984C58, 0x56AFBA3C, 0x48D82B52, 0x1AB83ED4, 0x92FF6290, 0x706F8544, 0x0A9F54CB, 0xFB047BE1,
+0x5F080805, 0x57B33D84, 0x3887F274, 0x49785DA5, 0xF7AC3138, 0x8B47BB27, 0x9146873A, 0xD4CCDCDC,
+0xE556EBA5, 0x42385DFD, 0x6CED0355, 0x92F187CD, 0xD5E03A10, 0x1177B404, 0x11BF6210, 0xA2D9B60E,
+0x38BA9D7A, 0xE79C394B, 0xA4AFB066, 0x7C02E18A, 0xCF46ACB3, 0x9FE73EC8, 0x8F29583D, 0x8D83AD1E,
+0x8D5A041B, 0x25A40E7A, 0xEF3D0F69, 0x52474FE0, 0xD8BD7D42, 0x0C4EB27F, 0x14B0327A, 0x02CD59DA,
+0x4EEA2A58, 0x9F9BF44A, 0x1D07F843, 0xA7847B72, 0xFE3155BA, 0x8C1A8B06, 0x9D0C67AF, 0x05FA6271,
+0x0541E1BE, 0xD3B5DD51, 0x74368F9A, 0x46D45FE9, 0x32935664, 0x807D129F, 0x3039879B, 0x72E7BB5F,
+0xB1EEF35F, 0x3665B0A5, 0x488216BE, 0x59074D94, 0xE25DBD1B, 0x81B4C592, 0xDE49E335, 0x5CD90BA8,
+0x49F79A56, 0xDF56B0F8, 0xF1840B3F, 0xD99DA1B8, 0x711B3F03, 0xCC01FBBC, 0xBD6478AE, 0x24F33841,
+0x23853263, 0x247F3656, 0x92061558, 0x0919B434, 0x395A4B72, 0xC5E73ACB, 0x9AA03FC1, 0xFDF68E3D,
+0xB6E7D08E, 0xE2285098, 0x49EF5627, 0x28B9E7BA, 0x1A770C5E, 0x8F82DEBB, 0xE16BE859, 0x30B50B90,
+0xC77EB57E, 0xD5E62BD1, 0x398B5EAF, 0x132680C3, 0xE69E938A, 0xDF721687, 0xF8BD667F, 0x4D37360E,
+0x00706393, 0xC7E93AC4, 0xCCC14F78, 0x67258AF2, 0xB9942F74, 0xADC4CE0B, 0x5425B178, 0x5EF79AD7,
+0xE7DF5DF5, 0x6F7A6DBF, 0x396D7F12, 0x370B28DA, 0x9DA64CAE, 0x1653ECDE, 0x208878C6, 0xE9CF3477,
+0x0E972504, 0xAF3564DE, 0xBF1A6ECE, 0xDE2E046E, 0x63E62260, 0x22D796CA, 0xED332941, 0x488DE9D2,
+0x2C538E6C, 0xEE49564D, 0x4593F0DC, 0x08B1A4F6, 0xC765BF2C, 0x1B99FC32, 0x2993235F, 0x57A89036,
+0x1E454120, 0x919DF22A, 0xE021DE80, 0xA945CC73, 0x5C53921D, 0x1654381D, 0xA81172D9, 0x0154B7F2,
+0xE8D163BE, 0xFECD5CE9, 0x28DF25A5, 0xDF83F9D3, 0xDA1E36E0, 0xDC37DB36, 0x3E08E111, 0x3EC4DC51,
+0x4A65B933, 0x2159313F, 0x64FCC935, 0xC9934FCE, 0xC79FEFED, 0x6DA67D53, 0x48E27F8A, 0x088CFF2C,
+0xD9A02D55, 0xE8DAB471, 0x7863BC24, 0x5EDB032F, 0x13B64D03, 0xA3583F47, 0x129C90C6, 0xC6FDF4C4,
+0x4B76A8D3, 0x50BA2BD9, 0xBE0909FC, 0x9922442E, 0x5DF17A9B, 0x6C5CEFDA, 0x41085D61, 0x95F4C523,
+0xD62A7E2D, 0x9A5BD1FB, 0xAA9CC554, 0xAA6843BA, 0x72B17A6A, 0xC91E1489, 0xE1BE496A, 0x4DD54628,
+0xE559D789, 0xB4F4D03E, 0x918FEB2D, 0xBA411BA7, 0x9C1355A4, 0x2BD94F85, 0xD2B0106C, 0x81C313DF,
+0x6B74D7ED, 0xD9570902, 0x6F0DE39B, 0xE8AF0E28, 0x10E4ADA1, 0x08CDD548, 0x66A85A1D, 0x4529FF12,
+0xDA69287D, 0x6ABF799C, 0x8D33EAC2, 0x9D2AC33D, 0xC37D210F, 0x138B274B, 0x418F4D56, 0x847B3A27,
+0xF57EF528, 0xFC860404, 0x65A0B2C5, 0x6FBFD1AD, 0x5F964FDA, 0x9583F550, 0x9C1187FE, 0x7A1CF638,
+0xCDB6566D, 0x260BFB43, 0x4D51BAFB, 0x804AB1AF, 0x67B1E3B7, 0x11909FDF, 0x8EA7F4D7, 0x3E4D5741,
+0xD5BEFC86, 0x475BAED5, 0xA9B22FEA, 0x9D6A77B4, 0x028D5912, 0x7A5DDD2B, 0xD67B03D5, 0x795513D8,
+0x242DC0D5, 0xED3ADD28, 0xCD0410DA, 0xD64572AA, 0x29FE2848, 0x855E03A2, 0x578F9621, 0x7C06B3F0,
+0x721602DF, 0x52B7B3A4, 0x86C7FD47, 0xC724BFB1, 0xFBFEA73E, 0x93A90446, 0x7EB71866, 0xEB41588E,
+0xCE421F01, 0xB27ACE75, 0x2D1B4D46, 0xFA417D9B, 0x68F745E7, 0xD7763AE4, 0x4379CBC8, 0xBDAAE290,
+0xEE5DB94B, 0xBE38E081, 0xE033D37D, 0xAB118262, 0x52112D06, 0x1A5FF446, 0x46F2096C, 0xFD6C0DDE,
+0xF825C38A, 0x1B79B90C, 0x9453E03E, 0x60E91ACA, 0xBA01BFCB, 0x0E5D2F7E, 0x3AFD9E3F, 0x59308152,
+0xB7B8E5ED, 0x2D289E06, 0x10E67F2F, 0xDA27D654, 0x74B2001A, 0x580EFF9B, 0xCB9E9503, 0x7CD61887,
+0xFE86737D, 0xF905B5A5, 0x5A3D97E4, 0x5DAFD690, 0xF0D964B3, 0x6D6DCE26, 0xEB448573, 0xC60B28A7,
+0x4C4487D6, 0xD00E334B, 0x004D3F50, 0xDE00C0A4, 0xAD4D788A, 0xFD01E8FA, 0xA466F964, 0x2184D7B5,
+0xF2267AF5, 0x46D8F921, 0x336B9D1F, 0xE9C38DF5, 0x8E0E9362, 0x25DC483F, 0x568BA439, 0x1293A16A,
+0xF299771B, 0xB619BA21, 0xEF7770BE, 0xF99B86E0, 0xE081155E, 0x6BA2B7DE, 0x5C34B13E, 0xC67EB215,
+0x81053222, 0xEFA8DC54, 0x0CED9DE0, 0x219F22E8, 0xFB6236C9, 0xF34D3EAC, 0x021B0A72, 0x16842953,
+0xEC40ABEF, 0x3E10BBE8, 0x6624CC7E, 0x58B2B7D2, 0xCE45004F, 0xAA922F05, 0xAEF606AC, 0x9D8A1CAD,
+0x371ACA11, 0x3AE21095, 0xD14FDEFD, 0x3750BEA1, 0xF523630E, 0x7786BB79, 0x4D013407, 0x8FE2AF68,
+0x716F75BE, 0x29468C72, 0x01B39930, 0xB513D027, 0x62BCB16D, 0x0E638DB5, 0x0B16EEB5, 0x0A47B80D,
+0x30AF90C5, 0xC7EB5B65, 0xE9190916, 0xD1776E37, 0x3C6CCC8C, 0x8DE23D8D, 0x13C9BF6C, 0x55E5E72B,
+0x3B3AD033, 0xD4538BAC, 0x1EB09743, 0x8520B252, 0x9BE74080, 0x43CAD475, 0x9BE236ED, 0xC0D8C2BD,
+0xFADEA8F1, 0x758D3C7B, 0xB740AB2F, 0x3119B1EF, 0xB96AB7DE, 0x760012E5, 0xF0EF1B1B, 0xB4CC0F44,
+0x2AA171FC, 0xCC7564CB, 0xC27B90B7, 0xCEC74E2D, 0x8FF2718E, 0xAD0698B0, 0x214775A3, 0xEBEDB4FD,
+0xE9F91445, 0x872B6318, 0x2AE47B1E, 0x74039535, 0x38C67C89, 0xEF8F7148, 0xA2727993, 0xEE0D6404,
+0x04A5E9DD, 0x780DE3AD, 0xF5A528CE, 0x9EC7E079, 0x10AFB15C, 0x98244F79, 0x85D42287, 0xC33E68B0,
+0xEE8DF4D7, 0x02EE5063, 0x79E41C5E, 0x1204084E, 0xB4D000C8, 0xF21875CA, 0xE7623161, 0x7278ED9D,
+0x9D76887A, 0x1BC78DC5, 0xE463C7EF, 0x2355C474, 0x29392ED3, 0x6BB67A6D, 0x37DCEB96, 0xBE8B9564,
+0x074A7C9B, 0xC8ADF1EF, 0xE0BCC36E, 0x03DD918E, 0xAD2DF7B1, 0xE668AC1F, 0x398B2201, 0x47FB0D1F,
+0xB821310F, 0x0ACA0E5D, 0x754454F5, 0x02AAE519, 0xCF8FE2E2, 0x36199865, 0x432AE52B, 0x354A6AAC,
+0xEE143348, 0x4DC20855, 0xAEBD6BEF, 0x07DEB153, 0xD2D4AFAB, 0x70CC7806, 0xCADB2C8F, 0x766CB29A,
+0xC5741F02, 0xDE6EA007, 0x701CF719, 0xE443F639, 0x13F5B2EA, 0xE9455F3F, 0x08D9E851, 0xB861A547,
+0x0D6DAB98, 0x82EAD8AF, 0x64D4D25B, 0xF71810E6, 0xEB9C6F3C, 0xCF9FDBFC, 0x659C969F, 0xA18B2928,
+0x1E271F0C, 0xA52AA484, 0xC9BFA831, 0x70615E8E, 0x5A3382BA, 0x622B431A, 0xCCB98DAF, 0x3AA38D76,
+0xC323712F, 0x0238B667, 0x649C870A, 0x4F5DAA44, 0xB3C0FA92, 0x2B8117BB, 0xDF394236, 0x0AD3FBBF,
+0x640A384B, 0xE91D8DA5, 0x318842D7, 0x34210950, 0xC51C756B, 0x8E866E06, 0xAA78DC0F, 0xEE54391C,
+0xE2E64A75, 0xAEA5A1C9, 0x1283EF13, 0x29104D57, 0x1450FAAC, 0x3CEC171A, 0x51BC2169, 0xFBC856D9,
+0x8DC8BBCD, 0xAABD8BC3, 0x0A5D2C9A, 0xC9EABD50, 0xEBBB70DF, 0x2F7ADC31, 0xEAD87E06, 0x4597590C,
+0x5E39CC3E, 0x80332527, 0x90590D7C, 0x2C01704A, 0xCB4445B1, 0x2BCB4969, 0xC1ED25B8, 0xE2492174,
+0x7336A339, 0x81E7CE21, 0x805F163F, 0x9BA5774C, 0x4946B2B4, 0x24266760, 0x8CE96E98, 0x2A36C25D,
+0x8D0A6EF2, 0xE8A02D44, 0x5F3BDD7A, 0x367FBF28, 0x076A3465, 0x150D6634, 0x6E3A83AD, 0x655C0BCF,
+0x0A417E24, 0x8795B5F3, 0x91E80C14, 0x958D8F0F, 0xD123BE49, 0x3AC9FD77, 0xF689D0C2, 0x172F4B94,
+0x6F7C31C2, 0xF8AFD998, 0x1222F4FE, 0x2904FB0B, 0x2A6EDC12, 0xB14F3F0B, 0xB79D8133, 0x3AF7CBDF,
+0xC9CB2597, 0x8D76563A, 0x558577AC, 0xCC6C30E0, 0xFBFD69DE, 0xFD8570E1, 0x986C88B7, 0x1475D92B,
+0x68F58DC4, 0x5B4CC0A9, 0xA3D1CC2F, 0x9625BE02, 0xBFDA8D68, 0xE3EC908A, 0x4C0630A4, 0x5AC4E7CE,
+0x85C28B16, 0xC1D75F9F, 0xCBB03088, 0xC38371D1, 0x9D943390, 0x56197215, 0x9D712671, 0x6E7E0A5C,
+0xCC3EAA95, 0xA9FC2DCE, 0x75AFAF59, 0xA47F7C8B, 0x7858A4BE, 0xD55F9DA7, 0xAAFA3D9D, 0x0505BD4A,
+0x2813988B, 0x290E1228, 0xE73FE1EA, 0x20CB273C, 0x472F29A4, 0x23548BA7, 0xBA90E795, 0xCD9C0FA7,
+0x822B6E1A, 0x7E54BB5C, 0xDAC5FBAD, 0xD1A21177, 0xC0EE7333, 0x21977A07, 0x61A4D1D2, 0xA08945CB,
+0x01936F95, 0x6A5E2D5C, 0xDC1B48B6, 0x96B5F9A5, 0x623941DE, 0xB185505D, 0x9DDBB834, 0x8F631A70,
+0xE93E25D8, 0x9EB24AF7, 0x00884F97, 0xD4E736AB, 0xA95203B3, 0x9946C0C7, 0x6A2F94D4, 0xFFFE38E6,
+0xF5B2567B, 0x884512D9, 0xF485F2BA, 0x6E5512D3, 0x941E42E4, 0xDDC5FDBD, 0xF797D4EF, 0xFBB413B8,
+0xEBE3C7B6, 0xD5D7A606, 0x7D42826D, 0x94AE8CC4, 0x06FA6152, 0x4EE54A72, 0x791877D3, 0xD04A8311,
+0x8B435009, 0x5DFB693A, 0x7F67E83E, 0xFE35C921, 0x8601B8D4, 0x5F43B955, 0x0211F643, 0xA5322ACB,
+0x71BABDD6, 0x16433BD9, 0xD645DDBA, 0xD24582E6, 0x89801163, 0x31BABB54, 0x65090095, 0x23D29705,
+0x08D1A370, 0xDD0AAD43, 0xDB0AEC35, 0x1311B496, 0x6AD3023B, 0xFE5C946D, 0xB9B8E10C, 0xEDC762F5,
+0x71FC7B0A, 0x19E14018, 0x8A68F910, 0xD8A0BCF3, 0x79C746D2, 0x77DE2407, 0x45BB8231, 0x2C712E28,
+0x0C5FF050, 0x7E582A8D, 0x4485E76F, 0x08DD67BA, 0xD4C85C27, 0xA53B2B9A, 0x6440257C, 0xC6FC3217,
+0x9154B197, 0xE1501FAD, 0x829484A9, 0xBDC846AB, 0x9220931E, 0x5D2CA706, 0x0E40BE8E, 0x396A64F7,
+0x68BEA10B, 0x72713E3E, 0xFF0BC500, 0x0DA0C83C, 0x71CA9071, 0x88F5A6C4, 0x8DE256B9, 0x0E046A5F,
+0x7C3752DB, 0x9E24D86A, 0x326E8082, 0x178521C9, 0xF7E42C83, 0xFCDB4261, 0xCF62D66D, 0x5557E617,
+0x0A1AC409, 0x1B0564CF, 0xA27BC07F, 0x848F2EB5, 0x3666FA7A, 0xE8D95065, 0x54C28A18, 0xC43907F2,
+0x35F0F4A9, 0xC7B37D53, 0x58E0C9AA, 0xB55155F5, 0xB50D1C59, 0x13C0CE21, 0xA8A89C0A, 0x9E70E23B,
+0xD1643DDD, 0x2A0B0793, 0x81229EBD, 0x0B851258, 0x3434B9B1, 0x519FD091, 0xB22BB565, 0xBC79D222,
+0x79CB3192, 0xC0F0D4E3, 0x8B880974, 0x21F272F5, 0x435D8E25, 0x16983B3C, 0xD973A311, 0x8EDFF8BD,
+0x4E7D9A9E, 0xB6A56F26, 0xB0678F9A, 0x9BFC1B18, 0x49C8213F, 0x18D6AD50, 0xE174EAC4, 0x2DF53117,
+0xBD88C6F2, 0x9246DE1F, 0x4D48E252, 0x21542EBC, 0xC0189CD3, 0xCE44D965, 0x1F06BB69, 0x38EC61A0,
+0x58C31898, 0x5303CBD0, 0xA309490F, 0x1D2BC7FB, 0x5CF18CAA, 0x3A0765FD, 0x22A4CF69, 0xB1AB3493,
+0x0DD6516E, 0x736A516A, 0x2E48D4E1, 0x41AA6E21, 0xE720EBF1, 0x5935EFE7, 0xFF471DC3, 0x0316ADAF,
+0x662CEA0B, 0xA57639CB, 0x011DFDA4, 0xAAD168E8, 0x62F2295E, 0x6C88DC15, 0x710BD009, 0x0AF3B457,
+0x70D89FEB, 0x94DEBF39, 0x56B42EEF, 0x2F4C8CE0, 0x6C0DE854, 0x18D76EE7, 0x5C80755F, 0xBB170D1D,
+0xFD380D25, 0xC2FF6750, 0x201C86C6, 0x04C664A5, 0x371BC1FB, 0x4FA67824, 0x4BBE1415, 0xB6CD8F0D,
+0x906D7C0B, 0xA82E0599, 0xC30BA1D9, 0x63785C64, 0xF955B43B, 0xACBE22E7, 0x7F99424C, 0xAD9315AC,
+0xE0643AF3, 0x44C6A15B, 0x85C6565B, 0x52EB16C0, 0x9E1EB083, 0xA6E08613, 0x0FDFE149, 0xD926429E,
+0x89CB72BC, 0xEB3DF22D, 0xDF3E2E62, 0xEBFDC12E, 0xCC347EDD, 0x218AA829, 0x16FB6683, 0x894E858A,
+0x197AABE6, 0xB267D6D1, 0x48FD98A8, 0x406A1EE2, 0xBE979829, 0x58B1F7A3, 0xB3F1C8CB, 0xFE3194BF,
+0xA6189E74, 0x1531D773, 0x6495E13B, 0x22CBCB7D, 0xA5159B88, 0xE0F99A15, 0x08B3CABE, 0x3FF5E7B4,
+0x63E1C4F2, 0x75557ED4, 0x655F4400, 0xA7BF1739, 0x10515164, 0x9FFB46BF, 0xDDDC3A85, 0xAA2DF180,
+0x727476AF, 0x167F07FD, 0xAD144D5B, 0xB7D57993, 0xB07FA537, 0x6D7ECFA3, 0xDEE44577, 0xCCFD0014,
+0x27B2EB01, 0xCB8E8CEB, 0x24A4DB26, 0x709F1FA2, 0xC871779A, 0xA310F5A8, 0x4C3FBA78, 0xCD4145E6,
+0x0665FEBF, 0x89636364, 0x61676506, 0x36134902, 0xAA38D6E8, 0x3930FA28, 0x2574BC74, 0xEA0154F5,
+0xDAC72865, 0x0FF7ACBB, 0x9941ACE1, 0xA8D8EF03, 0x237A3D9D, 0x4D56D716, 0xC13FDBE2, 0x0CCDF98B,
+0xEA7764F9, 0xA70BDA7F, 0xDEDE556B, 0x34126CB6, 0x6FFDE046, 0xF2774694, 0x51984769, 0x02FE95FD,
+0x66CC12DF, 0xF0316A72, 0xAF978C47, 0x3A4F56F0, 0x705CF5A8, 0x59658B04, 0xAC47628B, 0xF3BD1AEF,
+0x0500B647, 0xA58E70D0, 0xA4363C89, 0xF114181F, 0x945C8B61, 0x8CBBA9CB, 0xF4BDF530, 0xBC280F73,
+0x595FC4BB, 0x2F99CFFB, 0x538A348E, 0x5397E658, 0x0A7910B6, 0x1C68E616, 0xF35B2AD2, 0x6E6D8BBF,
+0x71958768, 0xB9442797, 0x8365927D, 0x14DFF4B7, 0x7680B8A1, 0x4A4DA64B, 0x92B2C138, 0x31B9D9DD,
+0xBB21F269, 0xE6175EDC, 0xAC3EF84B, 0xA536BC4B, 0xBBE21FBF, 0xB3134324, 0xE12C65F1, 0x20D6960F,
+0x309B393D, 0x6EEEB9CA, 0xFBCA7CA4, 0x9A7B9AE4, 0xB1F143E7, 0x2CABB77E, 0x322C651E, 0x7E5E2FCB,
+0xA0A9173E, 0x28B1FCB9, 0x732C4F61, 0x7C6AFDC8, 0x114B5C20, 0x0B2718C9, 0x1BC254B6, 0x95257A21,
+0x7037E1E4, 0xA7180208, 0x537806EB, 0xC4441F30, 0x5C1A7B55, 0x804027E8, 0xB5D3F1EA, 0xDDA9CFCB,
+0x9CB432AD, 0x5EEF2E84, 0x7EFC3BDB, 0x1580198A, 0x898115DE, 0x214DD3E1, 0xEBF336BC, 0x358F807E,
+0x87F02300, 0xBCB8DE05, 0x9C5FC4E3, 0x049DFACC, 0xC96F4EBC, 0xFBFBC5AB, 0xC0D18EAB, 0xCC2B21C4,
+0x4B241CD1, 0x32C3435A, 0x1D8736D3, 0xCA5AF306, 0x6FFD1BD5, 0xA2DFBEF8, 0xF0E45DD3, 0xC25F96B9,
+0x29D968DE, 0x31853FC0, 0x69C2B59E, 0xFCE52357, 0x3460A5FD, 0xE6991AF1, 0xDB230B5C, 0xD0F254A2,
+0x5027B6B5, 0xF0338E6D, 0xF7984956, 0x835F0CF7, 0xEAD3A942, 0x48ADA804, 0xF2FA4E3E, 0xA7C43FF3,
+0xD0801DE9, 0x09E7692C, 0xB6223CC2, 0x75187259, 0x8ECBD406, 0xA865DDAC, 0x3EF567DA, 0x83DD5968,
+0x8ED49933, 0xF1F7D31B, 0xF638706B, 0xCBF710A0, 0x1D55FFF7, 0xEB6A47A5, 0xDCEC8F31, 0x498705DD,
+0x3068C7A7, 0x3EEBDAF7, 0x3FCAD353, 0xD39CB7CE, 0x66249B2A, 0x061043D0, 0x8DB7BF56, 0x32F08C09,
+0x8902C2B6, 0x4BA38A5A, 0xBF4DFA47, 0x4AD86A1C, 0xC9640E93, 0x3AC87D45, 0x9F4627F1, 0x1DC5BF84,
+0x717F4FEE, 0x5308923D, 0x0C4A46F4, 0xD6CCBDA3, 0x22048C34, 0xB00E4B6E, 0x87494543, 0xE5C27406,
+0x1A5B8AB7, 0xAF16F412, 0xD5B264DB, 0x76F0668F, 0x658627A7, 0x354F2295, 0x5E95E9A0, 0x3FE5A9C8,
+0x53E9A5EC, 0xE872DD89, 0xABF82495, 0xB58C8853, 0xAD8A3A8E, 0xAF6AADA4, 0xB29AE15B, 0xBC43A1B4,
+0xB049EED2, 0x97021929, 0xC561C2C3, 0xFC0397DE, 0x5C26F259, 0x4E91857E, 0x444A2BB9, 0xADC4B9C5,
+0xD0D20C47, 0xAEFF02B4, 0xE5A250FA, 0xB05C6374, 0x7024B462, 0x7F1AB75B, 0x4290CEC1, 0x0169C2DB,
+0x5FC0B755, 0x68C3902A, 0x1EC03924, 0x2115E717, 0x1268E413, 0x399AB990, 0x329110DD, 0xA6215C39,
+0x25727191, 0xC921D208, 0x590DB343, 0x101DC0A9, 0x2FCE4A0A, 0x6009AC84, 0x56EC3F6F, 0x64E4A1C3,
+0x1DFBA900, 0x4A08E272, 0xAC6244B0, 0x472E0CBD, 0xC1B293C3, 0xF6281C07, 0x1AD43485, 0xDD4F0B6C,
+0x5C0FB653, 0x12A90ED6, 0x511EC6FB, 0xC8A7AEE7, 0xFC6F6814, 0x609AF11B, 0x1CEAFAFF, 0x81FF5983,
+0x0FF9B1B6, 0x8449FB1A, 0x937DCFD3, 0x5D70D6F4, 0x6E40E0F6, 0x6080D1D7, 0xB79E3BAF, 0x699BE2CD,
+0x96AEDF88, 0xCD6FEE9C, 0xD3F83FDD, 0xBDA387D6, 0xB301DF58, 0xFB6BE299, 0x5C6E8BFD, 0x7B776E31,
+0x46DA82B1, 0x7E77EF0E, 0x631B8058, 0xA56B1524, 0xD4EE4273, 0xED6251D4, 0x4F722D74, 0x6146C3D0,
+0x77ACEAD0, 0x72EF40EF, 0x84F960EB, 0xA23E9097, 0x8AA4C45F, 0xE8FC33B2, 0x2BA812A0, 0x2B0831B9,
+0x488266D9, 0x0C4EAE8C, 0x71A2CF26, 0x35A15B3D, 0x211CF384, 0x99EAD436, 0x0034D1B6, 0x7B98D6E9,
+0xAF4D54C0, 0xD90646B3, 0x236AB313, 0x9023D984, 0x4AEE7091, 0x850D6D93, 0x8FF67069, 0xA55E88CD,
+0x4DE88661, 0xCA5B71CD, 0xFD757B9B, 0x76F0B93A, 0xD88CAD10, 0x2BD428A5, 0xFB75E379, 0xC5AF1A8B,
+0x563FC872, 0x3A271D92, 0xD24991FD, 0x969F7F3F, 0xEA4F33F6, 0x82C53410, 0x23B17971, 0xECD5EA79,
+0xB2C66FC4, 0xD1F27F40, 0x39B10D16, 0xC08D89C4, 0x1F7AACD7, 0x99222454, 0x0324255D, 0xB572C8FF,
+0xC5EA3D54, 0x45984107, 0x2AE17815, 0x8BDF2D21, 0x57E5C3AB, 0x3CB898C6, 0x2CFF5B38, 0xD2EC9756,
+0x1B330EBA, 0xF15DD0E3, 0xEFFCBCFB, 0xB4C9035C, 0x2D38AC35, 0xE015DF1B, 0x41FF7A04, 0xE7EF0621,
+0x85190286, 0x31F7BA4D, 0x04ED9CB0, 0xF09100DF, 0xFF01AB27, 0x4D510010, 0xE1C22892, 0x4EE9F0A3,
+0x0D3CA3C7, 0x84245201, 0x6F25AF1B, 0x78AC01E2, 0x04BEAF57, 0x62B34DA3, 0x458C4366, 0xC70597B1,
+0xE1A578FE, 0xE8299DC9, 0x1472DFFF, 0xD411862C, 0x9FD29C2B, 0xC0FE4527, 0x41E1A201, 0x875CA4FF,
+0x25772B34, 0xC4BE01B0, 0xB2F5D0AB, 0xA78F6505, 0x80DABEDE, 0xD953C25C, 0x1352A1A6, 0xA8FEEC1E,
+0x4C27FA65, 0x4C5BBE84, 0x6820FC36, 0x00EEEAB2, 0x067C571E, 0xB8E56EA6, 0x13EF0BA8, 0x1B817418,
+0xCFDF4B09, 0x49062F99, 0xFAB32F9D, 0x771B6686, 0x180A3897, 0x7E856E42, 0x9A35290E, 0xB918C7B7,
+0xEB0D1B7D, 0x7171FA5C, 0x81442E8C, 0xAD0FEFF5, 0x641FC88A, 0xC546B04B, 0x9F64AB87, 0x512394F5,
+0x100B4294, 0x84954610, 0x4617E032, 0x48C4CBAA, 0x335BEA78, 0x65EF6506, 0xB9471080, 0x28FC4FC2,
+0x4DBD6017, 0xC8C3964A, 0x94C29E19, 0xA5007A93, 0x4793011B, 0x0DB75905, 0xB1ACEDF9, 0x83DE12E2,
+0xD8993C6C, 0x04250170, 0x1CA92C8D, 0xF06B6395, 0x4DB9B129, 0x1D86DD79, 0x44779A0C, 0x725879D7,
+0xC63AE387, 0xFF6EA877, 0x680ADD96, 0x2DACA363, 0x1F42607B, 0x855265EC, 0x80F849BD, 0x7C395A62,
+0x0043974B, 0xC5A4D9CA, 0xE6FB45E9, 0x14F62526, 0x93E0A038, 0x77D3F11C, 0x2F1F757E, 0x68FB1E01,
+0x0C46FD1B, 0x6ABBF5C6, 0xD2100D0A, 0x63FD6670, 0x3C865F59, 0x4529F5E3, 0x8D67C2BD, 0x87E927C1,
+0x45CE8950, 0xDC228783, 0x55856A1A, 0x6DEB35D3, 0xD5B4F25E, 0xC563A145, 0x188963DE, 0x7CBFD45F,
+0xB6AC8822, 0x3D3ED94D, 0xEF7E957A, 0x41F20458, 0x58ABA251, 0x1B8E171E, 0x485C7AF3, 0x73ECEC95,
+0x9DAFCB2A, 0x3C3A158F, 0xD632E8B3, 0xD22BDDA0, 0xA69FCCC4, 0x7C3CA76E, 0xB594516B, 0x06FA6880,
+0x095AC77F, 0xC5410FBC, 0x4C27C1B6, 0x881B626B, 0x238AD918, 0x954D3464, 0xF71C874D, 0x63FB622A,
+0xA1CA105B, 0x87B5C742, 0x6CED6C71, 0x9AA593DA, 0x7C9A8736, 0xF491007F, 0x8FAB6062, 0xC6FB5E85,
+0x4893ACEE, 0xDCCD04E2, 0x0CC0BC4B, 0x4063E450, 0x8CB1F295, 0x1B6036A3, 0xBCA6C0DB, 0xB97E4EC0,
+0x0B1B7B7D, 0x67E86A05, 0x5D17BACC, 0xBEA49F2D, 0x46E5BE0C, 0x38DF1B5F, 0x2536674C, 0x9BB83892,
+0xFD02538C, 0xE2286F37, 0xC4E2FFEA, 0xEBBDE649, 0xC7163C10, 0x911E1129, 0xFB51FEC8, 0x0C77BE9A,
+0xE0248718, 0x66F2DF66, 0x9F3A3F7D, 0x06AFE789, 0xB9018DDD, 0xE198C884, 0x695A7EF6, 0xABCBEACC,
+0x6D2D593F, 0x4D406D27, 0x2B269CF7, 0x487FAEA1, 0x0FD84880, 0x82458619, 0xBF4E6508, 0x89DC021D,
+0x1CAED290, 0x4A0B5DE3, 0x6FFB61CB, 0x2203DB58, 0xE7C505C3, 0xA5638E27, 0xE4E339D6, 0xA30153FA,
+0xFFDAA5AF, 0x6C9E06AD, 0xECC58011, 0x863C5CF0, 0x393A43B0, 0x23DF7414, 0x089F5B30, 0x90DCF312,
+0xFB4F4AA7, 0x638113F3, 0x9605FA37, 0x6D2BB8C5, 0x27029174, 0xEB4D7382, 0x1C0814CC, 0x493BC40B,
+0xB205AADB, 0x5F1750C4, 0x0BDEB3A2, 0x19316BC5, 0x31C1FECA, 0xB5BDB6D5, 0xFD8CE40F, 0x88EDE490,
+0xF5317F83, 0x1DC737B0, 0x787EE42A, 0x4B5D7461, 0xFBDE94D2, 0x4EEC9A1A, 0xA3A6F6FD, 0x26B1DB16,
+0x536F3C2E, 0x2AA76218, 0xC265DAAB, 0x85B7EEAD, 0x163BA402, 0xBAD8E175, 0xF14F7B80, 0xE9D19AED,
+0x16BD26F1, 0x161945B0, 0x98C7E704, 0x655888E9, 0xDF86B625, 0x17F0A5B7, 0x7B4ECE21, 0x4016E031,
+0x8EEFD039, 0xF46B3667, 0xDC2BFF92, 0xC48A7788, 0xB09A3068, 0x509653CC, 0xA4B69EAD, 0x9038129D,
+0xF43D6F7D, 0x14DB3A89, 0x5344AB38, 0x10A50916, 0x48C69979, 0x4E198EC6, 0xFC56B4EC, 0xD8443079,
+0x5FE2579A, 0x4CDDA75D, 0x137F6169, 0x78D9B2C0, 0xC1FC00B9, 0x63CE56CF, 0xB6B54488, 0x8DCF6127,
+0x49C3C734, 0x65D3A548, 0xB0919B79, 0x337CD6AC, 0x8EDB8A8B, 0x782D6139, 0x82D527A1, 0x07768CDA,
+0xAEE307E7, 0xFDC52163, 0xC8436BC9, 0x5EF6A497, 0x43190395, 0x79444279, 0x33872364, 0x90E5B2A0,
+0x846E2793, 0x4428D767, 0x8FD4F18C, 0xA6CC0D35, 0xB4EBB5AE, 0xA0039DEE, 0xD2A1DAE9, 0xA90C3C10,
+0x527E2B24, 0x82BCDBF9, 0x9C65725C, 0xA0F62242, 0xAF8E79F8, 0x50547CBF, 0x46E3D18B, 0x0F3AFCE5,
+0x936E7E96, 0x2C0DFAE8, 0x64715EB4, 0x61BAA9A5, 0xEAE2134B, 0x2DF98D48, 0xBB340C45, 0xF337ABEA,
+0xF9B1E628, 0x28BE2E82, 0x6E3D3B2E, 0xF525A802, 0x42260D6F, 0x76677900, 0xDF76E24E, 0x95BD1C3D,
+0x9F9A7E3A, 0x2FF2E4B1, 0x6F4D4EAE, 0x2145E100, 0x57345625, 0xCFBB5119, 0x296755A1, 0xCEC8107E,
+0x56BC0A0B, 0xC6A0C921, 0xB129FD5D, 0x24661F99, 0x6338FC73, 0x2EACC7B4, 0xEE279B7D, 0xFD3FDD98,
+0x14ECC496, 0xD7FB206D, 0xE8F55381, 0x6069598C, 0x1D9F7F4F, 0xACAB6AB9, 0x83C3D042, 0xC5E502B3,
+0x4A02A037, 0xCDA8922D, 0xC5558CEA, 0xF48FDBDE, 0xCFBEA9C7, 0x93C786AC, 0x5C54C665, 0x4A2A9B20,
+0x76022A5C, 0xAAD96F83, 0x6C0CC497, 0x3D758F43, 0x6B4A2267, 0xDF4A8B20, 0xBFDCF200, 0xF7D68C98,
+0x2074465E, 0x9461CA57, 0x7457D093, 0xB285D724, 0x84408D50, 0x438B2932, 0xD85CD316, 0x34284145,
+0xA92FCF17, 0xEB2E38B1, 0xCB4BDB1D, 0x8AE63455, 0x0EBB0FD6, 0x077D00A1, 0x89864EBC, 0x6F284CA9,
+0x77E4D31C, 0xBB21C2D6, 0x98FF201D, 0xC61506F9, 0xAD6686B0, 0x7795D1A7, 0x0198C10F, 0x7BB11C16,
+0x74C523F9, 0x566D9F4F, 0x88151912, 0x2D7A4523, 0x91180601, 0x137C8B99, 0x7BA9080A, 0xBBE0FE7E,
+0x33D6D60B, 0xBF9F0D38, 0x804A89A7, 0x2F27651A, 0x261A7D7C, 0xFAF11983, 0xC1EFDD77, 0x94C1C802,
+0x9EDD5402, 0x77825C78, 0x18C737E2, 0x8EA1DEEE, 0xF9201157, 0x99F57FED, 0x28CCE01A, 0x3B1122CC,
+0xEE68A419, 0x92D6556F, 0x1BA6FEC4, 0x8FDCAAFD, 0x42B79DEC, 0x8E9FC6D4, 0x9A5E47ED, 0xCC1E682E,
+0xE369E295, 0x76B0FF4A, 0x3706895B, 0xFA769C09, 0xEE2191CF, 0xB10D819C, 0xEE2C5873, 0x9FA9FED4,
+0x826E6A36, 0xD57E0403, 0x92F4CB15, 0x3697B5D4, 0xDCD7A269, 0xC6760F9F, 0xC208D0B9, 0x3A88B6D0,
+0xCFF16304, 0x0A7ACE33, 0xDA372041, 0x78F692D5, 0x1EA2EA76, 0x977A9049, 0xD5D597A2, 0xE9446110,
+0x7AF8C9ED, 0x78FFD712, 0xEF9CBC70, 0xD46CD797, 0x02ECF3AB, 0x6A5FCF17, 0xE2570232, 0x1C1FCB88,
+0xC03ADF93, 0x85CD44B5, 0x7061F853, 0x31006CD9, 0x52C307DF, 0x25630DFA, 0x04D98485, 0x66924D2D,
+0x583115C2, 0xD5064CD4, 0xB847B89B, 0xE1C09CD5, 0x669AACD1, 0x6771E7C0, 0x5D0D905D, 0xB3C702A2,
+0x56F412F0, 0x764525B2, 0x06E4A3D0, 0x72387640, 0x603A63B5, 0x87AF7D11, 0x9AC5F4D7, 0xD8F8E832,
+0x89253459, 0x01F84A7A, 0x2A2674E5, 0x7DBC8636, 0x0316CBB5, 0x7DD4445E, 0xC938310A, 0x4A01DBBD,
+0x6639FD04, 0x2B980CA1, 0xD8665E11, 0xE2EA7DCF, 0xCE6FCCDC, 0x46F914B3, 0x82F325DC, 0x3C391BB3,
+0x32AF96D8, 0x89037C7E, 0x3A963039, 0xF2C52B7C, 0x8F73538E, 0xAE95FABF, 0xD30AAF96, 0xE7919209,
+0x1CF99345, 0x250B5151, 0xB0EE8ECF, 0x4F29D375, 0x7B655A0B, 0x63B4204F, 0x9D9267E8, 0x7EFFB98B,
+0x09B46658, 0x98DB4958, 0xB9EFEDD0, 0x4B2D22E5, 0x1F842D16, 0x1445DB7E, 0x7C34F247, 0x1EAFE641,
+0x4403F7DF, 0xC2BDA903, 0x44305BBB, 0x971E08B1, 0x7F7731B3, 0x3FA8F4D1, 0x4E095726, 0x179BD242,
+0x311072AE, 0x94E4E88E, 0x8DEDA398, 0x6367C78B, 0x34B74DF3, 0x8ACC5B5D, 0x3AD6AD78, 0xB91D573F,
+0x2AAE8AD5, 0x13BE6A8C, 0x87679C51, 0xA4F665BD, 0x6DD35A79, 0x6C2E6A6D, 0x74937653, 0x51C88092,
+0x082C7516, 0xC2BBCEE4, 0x351628BD, 0xD95EA50F, 0xEF474E07, 0x2A5EE5E9, 0xBF796704, 0xA92F7325,
+0x05C0B69B, 0x6E102E16, 0x178462CB, 0x5D184FBB, 0x27EF35E4, 0x2EF44206, 0x4FF6550A, 0xAC047819,
+0x78DD14AF, 0x88993D5F, 0x197E07B7, 0x7ECDC5E8, 0xF37C39A3, 0x6CF231B7, 0x5CD6C70C, 0x3D5FBF89,
+0x169785B2, 0x01FB0913, 0xF3A321CD, 0xF53227B9, 0x869A001F, 0x7F401BF1, 0x61B30855, 0xB610C10C,
+0x014E6533, 0x4E0EDA1B, 0x947F9DCA, 0xE03529DC, 0xB5749569, 0x5ED1DAE9, 0xCBADA852, 0xF38BB057,
+0x321F6FC6, 0x7F257FA0, 0x265DC58D, 0xA52EF6BA, 0xF49A36E9, 0x1BD63A2C, 0xA2F1D648, 0xB9D6571B,
+0xD5081699, 0xD6689F89, 0x7FCA821B, 0xD83890F3, 0x7134F4A4, 0x894AA1BF, 0xED5365C5, 0xA3A65B5E,
+0xC207A02E, 0x4EE974FD, 0x8FC2207B, 0x30EE52AE, 0x2FE4FE59, 0x87D6E864, 0x4D367F68, 0xABE6E4DC,
+0x203ED5F4, 0xC53EB446, 0xC58517DA, 0x8A1498DD, 0xE889BCAD, 0xF2BE1331, 0xBD9A65C4, 0x2DAA7157,
+0x2BE3142E, 0xD64B234F, 0x3D302238, 0xD29137C5, 0xF9E1555C, 0x245D0397, 0x71E02802, 0x9307C54C,
+0xDC4CEE97, 0xACA8F3F9, 0x6912AD3A, 0xF77C6B7D, 0x0F5807B5, 0x53584305, 0x9148E059, 0xBE35AD62,
+0x6600CB79, 0x021E6386, 0x41BE35B2, 0x2E00D2A7, 0x291B1FBB, 0x5921F2F7, 0x0CA6E33A, 0x6866FA1C,
+0x951C3A33, 0x5A266202, 0x8DC7B8C5, 0xA5BA72D3, 0x53D8CA26, 0x3EA8F431, 0x6CA4D059, 0x20D7737F,
+0x53F3CF35, 0xFC56F722, 0xE2D2C805, 0x0026DA9E, 0x155F2698, 0xEF07872B, 0x93341450, 0xC4FE4A5D,
+0x9AC58E99, 0xCF395B72, 0x66CAB660, 0x4D01FDBC, 0x95FE69B1, 0xCE328E44, 0x38066B16, 0x91024DA3,
+0x87412BE8, 0xB10A1096, 0xDE6BB71D, 0xF44DC23C, 0x3895EA80, 0x3E2ECD3A, 0xD5A5C4ED, 0x5EFC4D57,
+0x441EAB20, 0xD89EBC65, 0xDF67679E, 0x46CFE107, 0x8B09981C, 0xDE837B4A, 0x8B0E3A90, 0x3FE48C97,
+0xF1B576C9, 0x74FBD1E6, 0x4E325589, 0xEE66C8E9, 0xB8DF6F03, 0xAD7E3DF4, 0xD94E3D71, 0xE3FAC0A5,
+0xCE151EAD, 0xE21AAEE0, 0x48B58550, 0x580FAB74, 0x423042FB, 0xB4DB7241, 0x71DCCEC6, 0xE3B2DC66,
+0x42B2DB02, 0xE0E9B300, 0xCB9057FE, 0x88E0BB81, 0x0173C5B3, 0xCCC9F2D5, 0x2DC1F1FD, 0x409706CD,
+0x0690B06C, 0x2FB088B0, 0x378657CB, 0x4E2C168D, 0x1CBE258C, 0x088B10AB, 0x9CB65C1A, 0x4779EDD8,
+0x0F2D2F3B, 0xF84BD38B, 0x2B86D747, 0xE69E2020, 0x41CD3E4D, 0x2E251208, 0x2987D685, 0x03153A8E,
+0xFE4691A7, 0x3A0ADE3F, 0xE382D144, 0x65583298, 0xE50F6CB5, 0x7CE84605, 0x32DFA961, 0x6E236B79,
+0x11758931, 0xA8F33F2B, 0x6190996D, 0xEB4C6963, 0x5CB04192, 0xE9B08EFE, 0x79B4BE5F, 0xA4106087,
+0x5553A085, 0x73A17F1F, 0x2F8CFD51, 0x5C38C46E, 0xF409B242, 0x9AF5B9F7, 0x2F5FCCF6, 0x5508D675,
+0xC9B8ADD3, 0x39D58273, 0x7F4D6600, 0x30D01F18, 0x28004E64, 0xA38289E1, 0x2E64C57F, 0x743DA4EB,
+0x98D06E2E, 0x3B47BC5E, 0xCA49C775, 0x78A5D518, 0xA539883E, 0x5976F3FB, 0x9BC8A93D, 0x2C3C0E42,
+0xD62541BF, 0x84BA1B87, 0xFA7B4D31, 0x9273473E, 0xFC11B974, 0x8F1258ED, 0x5A0C41E0, 0x04C0CE1F,
+0xFCAD9EFB, 0x839E88ED, 0xEFA69903, 0xB0C9341B, 0xA2EE0931, 0x422126CD, 0xC00A1E5A, 0x9E1488C5,
+0x7C58C7D1, 0xE1130A7E, 0xF3403482, 0xB214371B, 0x67176F13, 0x6219F239, 0x79222112, 0x8B41872A,
+0xC9FD6116, 0xE3793E28, 0x5FE4D216, 0x0CE3DF73, 0x80BDC314, 0x20C014B1, 0x8CE2209E, 0x179AE8A5,
+0x9DB17B8B, 0xFC7927C7, 0x9B98C704, 0x669703D4, 0xF5F16467, 0x2E9ED495, 0x5EC1076A, 0x4001E266,
+0x388BB861, 0xD55863B8, 0x69E37FC4, 0xAA42EACD, 0x5E3FF09B, 0x4EC6C5DF, 0x816FD923, 0x7B502266,
+0x133B67F0, 0x40A3A3FC, 0xD5ACE9AE, 0xFC5F4A63, 0x2DA76600, 0x9C0D0090, 0xCE5E9AB1, 0x54E62283,
+0x48A89475, 0x335106EC, 0x53FD6834, 0x737A4880, 0xDB1AB7B4, 0x2489D222, 0xD3CEC79C, 0x98F2DFE1,
+0x2425712A, 0x6327D3CD, 0x3D9BF730, 0x4487F47C, 0x1EC69134, 0x7E9842D0, 0x9D901998, 0x73C2255F,
+0x573BCE63, 0x58B60177, 0x00F3B8C6, 0x9DC4D24E, 0x828F9815, 0xF324BED6, 0xA3054D97, 0xEBBB8996,
+0x76E175B0, 0x6BCD49DB, 0x301BB4B5, 0xE88E27EC, 0x3CFEF894, 0x27DE100B, 0x448AA36B, 0x41C4D283,
+0x1AC1CF91, 0x4E5EF6EC, 0xC7F57E64, 0xB742DA76, 0xC0AC9FB1, 0x88304109, 0xD7773369, 0xE2CFB9EB,
+0xEB0A57B6, 0x51C9A034, 0xF020D7D6, 0x4659E65E, 0x19163F39, 0x8C812998, 0x841AED8D, 0x58B9C0A4,
+0xA70FB394, 0xB7D273E5, 0xD9B3CB65, 0xB520EA6D, 0x21183EDF, 0xCA756404, 0x6382002A, 0x7FE71217,
+0xD4B240B0, 0xC7CDF536, 0x63440D67, 0x5326DDA1, 0xBBAF42A4, 0x323CA8F3, 0xA1C79547, 0x02A2F253,
+0x372A1E69, 0xB6BCC9AC, 0x155C0E71, 0xCC39141E, 0xD3EF1BF7, 0xB02CD815, 0x25D22310, 0xDE2B51A6,
+0x9692DAF7, 0x524770B5, 0x190F6F64, 0x09B6564C, 0x7CFAEF1F, 0xE2BB66F6, 0x9D4D8850, 0xF938F565,
+0x8315B3B0, 0x79F76771, 0x304607B3, 0xE4AA625F, 0x6C8A536D, 0x0A7CDFEB, 0x63688D81, 0xE8F5A19F,
+0x74670357, 0x6BE33CEB, 0x503C3CB4, 0xE32B1A9F, 0xB72E02F7, 0xEB9691B9, 0xE13345BD, 0x2D732F70,
+0xE1FA180C, 0xEE098259, 0xA139C84A, 0x3623675F, 0xBAEA8D24, 0x1A0A9F80, 0xAE61F7AD, 0x73A28986,
+0x94C88E16, 0x3AA088EB, 0x27D202C6, 0xA049A1F4, 0x95D7863C, 0x481DD3BB, 0x8A1F638D, 0xD568CFE6,
+0x3F7D61F6, 0x0E1EBE55, 0x04C39285, 0x9B9ED9D0, 0xCDFDD378, 0x242714BD, 0xA44E32FD, 0xDFEC52E9,
+0xBF1BE9AA, 0x45891D6C, 0x15BFE468, 0x19E8C389, 0x690E9C5B, 0xC39B3FC0, 0xE292FBA3, 0xF37A619A,
+0x690DF6B5, 0x3D46B2E6, 0x04D1E0EB, 0xC58F184C, 0x918B0509, 0x170A6258, 0x1E823D6E, 0xC1D57271,
+0x29EEF57C, 0x7C26DD71, 0x80BE32D3, 0x3ED6C253, 0x66F11896, 0xCA33E9A2, 0x7BA50F3C, 0x103CF36D,
+0x978A999C, 0x660045B6, 0x3B9624AF, 0x45DBB300, 0xA266DD34, 0x592CDCCB, 0xCE7BA20C, 0xDEE75E11,
+0x8651A202, 0xB7EF7E17, 0x9069B54D, 0x62E3B951, 0xDA0E1759, 0x95DC6D47, 0x5BDD132F, 0xDE20C217,
+0xF080637A, 0xED874CF6, 0x264E496A, 0x67C9E6AB, 0xA83280CE, 0xF78A73F8, 0x8F29148C, 0xF75DFAA7,
+0x69323EE2, 0xFDE06C53, 0x130F2607, 0x80122406, 0x47037E17, 0xC1A0B288, 0x6E84355B, 0xA51B65D8,
+0xC83A4810, 0xCD128B93, 0x8D508F88, 0x9296567E, 0x8E13A7BA, 0x37C37EF4, 0x667728AA, 0x35C003F9,
+0x78FFC1FF, 0x968F456F, 0x939AFBBB, 0xF3225715, 0x7D8E5595, 0xC56ACAB5, 0x9A11DF08, 0x62C6DC3A,
+0xFADA116A, 0xA082CC4B, 0x53C3E0B8, 0xF9B03C3D, 0x50057DF1, 0xDFBEC49C, 0xFA700A4F, 0x3303067D,
+0x016B6D60, 0xFCDAC2FC, 0x6BC3B18B, 0xA44149D3, 0xE1D4331C, 0x6589515F, 0x32B07A36, 0xA1685825,
+0x0F5233D8, 0xE91EB794, 0x7BD42E73, 0x7088BCD1, 0x4CE8CBA6, 0x72D37749, 0xB5516C65, 0x14D67C2E,
+0xBAB4F31E, 0x45054561, 0x5188338B, 0x829E0D7C, 0x7811886F, 0x634DA477, 0x4B892331, 0x69479844,
+0x3ED48A26, 0xE82F5E82, 0x0FC4BF2B, 0x413AFCFA, 0xB9577258, 0xBAC9421C, 0x23C15BED, 0xA31F9CB1,
+0xEF7611DE, 0xC0783CFA, 0x77AFC381, 0x60226A61, 0xEEE74BBF, 0x9AABF658, 0x23809EFE, 0x6C7E029C,
+0xD4183F05, 0x7FEA8B71, 0xBA62417F, 0xA3B1264C, 0x80646126, 0x666AB49A, 0xC72D0818, 0x897AA151,
+0xDA2A4756, 0x47FBD448, 0x4171A7D8, 0xB61DBF8E, 0x7626976C, 0x94CCECC3, 0x15223675, 0x2FEF4818,
+0x1FA62CA4, 0x9313F222, 0xE70DD1D5, 0x140A4306, 0xC506427D, 0xACBCDD06, 0x9728B021, 0x30356A12,
+0xC563F782, 0xC15EF2A2, 0x4E7395C3, 0x5AC88F93, 0x39DF02EC, 0x21FBBF9E, 0x8CDEFFBC, 0xDFC99F8E,
+0xD25F34AA, 0xA261E8DE, 0x9B22DCC3, 0x79E6EA4A, 0x164161A7, 0x3FE0EDF7, 0xBE7A06AF, 0xFE524391,
+0x8F371811, 0x631DACC2, 0x11F5CCE8, 0x73318230, 0x341BF2C8, 0xC81303DA, 0xD12168F7, 0x175DD9FC,
+0xFA98B588, 0x0C16764A, 0xB5922E73, 0xEE7DBF97, 0xFDC2E3FB, 0xF3E44B12, 0x0FE258CF, 0xEB38B7FD,
+0xD09B8B8D, 0x9F7C44BA, 0x2793F802, 0xE969EF9C, 0x1B137DF1, 0xE527CBE4, 0xC9C8EE6D, 0x7F8E92EF,
+0xC34DBEBB, 0x3AA21CA0, 0xDE9C4445, 0x5BDD6AC2, 0xA7DEA994, 0x726BD3AA, 0x179FD96E, 0xDA29A64A,
+0x6179D76E, 0x2E6B573B, 0x717C596F, 0x0664F3BE, 0x55CA0E60, 0x830B2729, 0xAAE787AE, 0x2AF4E13E,
+0xBA9551ED, 0xF34EAF73, 0x14A64165, 0xB0F9846B, 0xA5FEF14F, 0xE238A2D1, 0x548CEA8D, 0x8A73CA02,
+0x8D1199EC, 0xB8D6DBD2, 0xB8BA17C8, 0x07CF3A91, 0x95B1848B, 0x29D510FE, 0xE855390B, 0x57F66D45,
+0xACB92FD9, 0x42B095E9, 0x4DFF1110, 0xADFF8A26, 0xB9446B43, 0xEB19C4DD, 0x9728EED5, 0xA7AB7F60,
+0xDAFF9D8A, 0xDA64BFB7, 0xD2DB25B4, 0xF39568F0, 0xDF622DD7, 0x7AFC290C, 0xFA0AF976, 0xA5F258C6,
+0x7F56E1A8, 0xD78394D4, 0x3D94BFA4, 0x80676BEC, 0x4F5E175C, 0x25E09CA0, 0xBD051758, 0x16D87FE6,
+0x7106A912, 0x329C151B, 0x8348B42C, 0xBF3876A8, 0xAAC78BEB, 0x59B5CDAE, 0x51DA8687, 0x9E5B095B,
+0x50C960DC, 0xBEBDC181, 0x1F04A4B3, 0x63A6646D, 0xB52C9D37, 0xA7AEDD8A, 0xC6ECA47C, 0x6143A211,
+0xB2E17F1E, 0x35A0B815, 0xEA904BFA, 0xB29CE22C, 0xCE0755DE, 0x00255DC1, 0x78D502D3, 0xA2E764C5,
+0xBFB89D3D, 0xA9D69BDB, 0x3639E576, 0xBE412864, 0xAAB5EE5B, 0x89527D80, 0x6194A848, 0x791BC502,
+0x072CE38D, 0x3EB190E6, 0x21D8893F, 0x45641B59, 0x1C9A7353, 0xDD68B0BA, 0x75696368, 0x078C8A44,
+0x9F55FA90, 0x4CDD029B, 0x15758672, 0x2AF197BB, 0x63785FAF, 0x2BD02BD3, 0x77A9B60D, 0x1E6EDB93,
+0x9DE2C3F8, 0xAF913E0E, 0x7F493455, 0xBD7B45E1, 0x8C788E94, 0x0F65AEF7, 0x2C7B6D98, 0x3D9F8CDA,
+0x52776C56, 0x924156A9, 0xD750F248, 0xE8D24CEC, 0xE41045A4, 0x6EF25D79, 0xF10DEC9D, 0xF122ECD7,
+0x69B9ECA3, 0x540585E0, 0x72A80B37, 0x7B6932E3, 0x67B32F50, 0x87DEEBD9, 0x6EE61CC5, 0x7809564E,
+0x47C3382A, 0x40A676EB, 0x66BC5E9A, 0x6D9433C9, 0x24249CF3, 0xCF042D5B, 0x1813ABFD, 0xA420031F,
+0x89F61552, 0x92F3FD62, 0x94994BBB, 0x97C8F1BF, 0x79BC17EE, 0x7DA1F415, 0x1C43C8B1, 0x4B91960E,
+0x7E623F10, 0xC5F599EC, 0x3D1D1DE5, 0x642140ED, 0x8404D41E, 0x61DF17E9, 0x8178DBD9, 0x942CB2D8,
+0x42E462A3, 0x29592E79, 0x092ECCA2, 0x46A54BC6, 0x105F512F, 0x191FC24E, 0x2898A27E, 0x9F521385,
+0xC942204C, 0x3B0048EE, 0x8C609EB5, 0xC14CEE9C, 0xE0DF5A09, 0xE1F03998, 0x9BBEF3FD, 0x7F3BF767,
+0xBABBCF8B, 0xB6B5AE3E, 0xC5999026, 0xCF0DCDE6, 0x66D7EAE5, 0x98F9C0D2, 0xED00CD12, 0x70C7ED76,
+0x043ABFE3, 0xE6CFC6A8, 0x795EBCC6, 0x9C885F92, 0x376A5C79, 0x2558F427, 0x91963B5C, 0x52D75389,
+0xDFC75359, 0x63760D9C, 0xA59664F3, 0x70598A01, 0xF73A0F66, 0x0B35CB89, 0xD680566E, 0x1CE462E7,
+0x4C495A9B, 0x2E5FD2E2, 0x36D1CF88, 0xE7CE2709, 0x80AA64D7, 0x7B23A4D6, 0x3E7D4F73, 0xA3BF09A4,
+0xDB5153B1, 0xE599358E, 0x15ED12EB, 0xDAD4ADCD, 0x4F830720, 0x3190B5AE, 0x17BBED4E, 0xB7283F17,
+0xEF486834, 0xBA18FF3A, 0x6649C474, 0x49529746, 0x492E1936, 0x2F0AD3AC, 0xD2B9B65D, 0x1BE63B6E,
+0x244B9C3E, 0x5B58F8A6, 0x6AFC1A8A, 0x660B054C, 0xA49E050C, 0x7A23DD36, 0xA1209822, 0x548C56B1,
+0x3706D079, 0x00BC29BD, 0x6E10B7E2, 0x8F92CADA, 0x8297B47D, 0x671A112F, 0x7385365B, 0xB6D3E535,
+0xA1361586, 0xADF9D85E, 0xF03F658E, 0x91F1F03C, 0x26F04972, 0xEFB3A424, 0x9D6387B4, 0x151601FC,
+0x2076B391, 0x816CF88A, 0x1485176F, 0xA2EE9511, 0xCCE365D6, 0x48C4AB39, 0x1833D903, 0x16B4BB6B,
+0x0D5CFABD, 0x99262584, 0x3030BFA0, 0xBAB6A1B2, 0x889C034B, 0x06E87698, 0xC7095B09, 0x1509AB21,
+0x4BDF688C, 0x141036C4, 0xE4746793, 0x99AA368E, 0x72C1903D, 0x47281D42, 0x1BA141CA, 0x9A13F8E6,
+0xA4506872, 0x4535F820, 0xB3757F20, 0x22F13428, 0x2BFF281B, 0x6E107E8E, 0x8E63FDAC, 0xDC14DDBE,
+0x76312FCF, 0x4C4BE8EB, 0x6E953B28, 0xD49088A2, 0x9DA0C745, 0x37FF4C95, 0xBF1A6F8C, 0x5E70C0F1,
+0x0693EF15, 0x75D72D8E, 0x1CBF4643, 0x944F2F2C, 0x25C6C70F, 0x812094F3, 0xB44F2CC4, 0x5ADB830E,
+0x9DB7E71E, 0x1453CA89, 0xF0270DEF, 0xCEA3E5F8, 0xC523CD4F, 0xE5E87A05, 0xC1E7C2B3, 0x87452DC0,
+0x9F3F0316, 0xA6AD8A1E, 0x9546B705, 0xCD5F9986, 0x21F979D2, 0x2A3739C4, 0xB75D2A8E, 0x7047B7D2,
+0xA90ACFDC, 0xE61BCC77, 0x710BA5FB, 0x0FE38AA9, 0xAF61AB02, 0xE36C9F0F, 0xACCDC6E3, 0xD2B2F773,
+0x569B8F8C, 0x9912DEC7, 0xF2B6FD6E, 0x2484AD9C, 0x23FC5FF0, 0x980AD270, 0xE29DA44C, 0x363CEBD3,
+0xA38B5E3E, 0x41D19279, 0xECE5233D, 0x5A3AEBF2, 0x7212CA1D, 0x1A6FC6B2, 0xA2A74689, 0xD6BF93EE,
+0x5B2E506A, 0x4C6D56E6, 0xF20BAB08, 0x2B934C74, 0x10EA086A, 0x37BF4D8B, 0xB21C2447, 0x226BB794,
+0x50824DB2, 0xCCBF91B5, 0xAE8FAC0A, 0xE155F7CA, 0xA39B0B54, 0xECCE7F35, 0xC70386D8, 0xA116E3C0,
+0x659EFBB7, 0xC54B5C59, 0x798F5C47, 0x55054523, 0xDE4C18C7, 0xF3466641, 0xFA80FF80, 0x8F3D1117,
+0x74834541, 0x25117B89, 0xE8370654, 0x930FF81E, 0x28D19458, 0x495AE13E, 0xBBEECF53, 0x9ADD8074,
+0xED81F067, 0x9E274197, 0x5CC43A07, 0xD7CF7D21, 0x2E367970, 0x3EC5A610, 0x45FF7F85, 0x73FA61C5,
+0xBC4CDC73, 0x90F910FD, 0xC94663C1, 0xC1433B88, 0x768F809D, 0x1500AFD4, 0xBB9C8BC1, 0x859F1144,
+0xE652AA57, 0xEEAFA128, 0x50445416, 0xE6807B30, 0xA9D18096, 0xF78F9F28, 0x8EDACFFE, 0x22854CCF,
+0xA897B07B, 0x4ACABFEB, 0x39A37021, 0x591F7530, 0x8EC1863B, 0x8AE09953, 0x06FF24C3, 0x12F4FB04,
+0x4BB0CBC5, 0x722A7D68, 0xF5AA825E, 0xA87F2D13, 0x4B1A42D3, 0x1F82CBD4, 0x62F2A771, 0x1388C77A,
+0x35E2DFAD, 0x98200797, 0x63E48400, 0x58C74F1C, 0x28B11F14, 0x299DB25A, 0x0289C4F2, 0xDE1196EA,
+0x626B2D9A, 0x669BF304, 0xE42A3995, 0x55772A6B, 0x4879BEF7, 0x5C753F03, 0xF2CB8F55, 0x8D8AB7A7,
+0xC47BFFD1, 0x8688A404, 0x51A04517, 0x9C328061, 0x05A0FEF3, 0x4C0E4952, 0x67953322, 0x2A88A667,
+0xD3ACB6A1, 0xAA9621B9, 0x5BEBBC63, 0x8C3D10BA, 0x8A0CD3D8, 0x28F043CA, 0x2F701338, 0x49C6390C,
+0x1B4F82BC, 0x9746CA0F, 0x9F02FFC8, 0x62CB6083, 0xFE26D0FF, 0x71378B83, 0x8A149306, 0x0A7FA5D3,
+0xF475509F, 0x131EA4CE, 0x0D0562ED, 0xE3701773, 0x3121E304, 0x1E3A9E3A, 0x54F0B084, 0xC0FC3CBB,
+0x9A52F393, 0xA0E0E494, 0x3D4626F8, 0x5506DEF5, 0xCA8F0810, 0x1BFA77C4, 0x29732E18, 0x716E6041,
+0xC988B925, 0x447407CF, 0x0C1AA125, 0x2D81F4B5, 0xB1D8EAEE, 0x266C8288, 0xB12ED462, 0x985DCD6B,
+0x9A30A4C8, 0x33CCC1AC, 0x0B46C193, 0x237766CC, 0xA131A25B, 0x97E4C4C9, 0x2ACCEFFB, 0x6386D771,
+0x24887DAF, 0xAEDB73F9, 0xA5039DB1, 0x261E34C4, 0x901AFE2E, 0xC4C73943, 0xACD338A7, 0x440AC99B,
+0x36D87C55, 0xA9CAE111, 0xF39315AD, 0xBCCEAEFB, 0xD6707FFB, 0xFE0C4930, 0x481B1A7E, 0xAB87834A,
+0x7CF99888, 0xE6F7FA15, 0xBB57D1E2, 0x25548F3E, 0x7E554B2B, 0x501BAEDF, 0x2CBB7A53, 0xBAC86997,
+0x6DA08811, 0x9852CBC1, 0x7969D2E7, 0xCF07BAD4, 0x72F9D3CC, 0x8EBB7C39, 0x0DC0DF51, 0x21DD3DCA,
+0x59C6D5FF, 0xADCAC315, 0xF5888126, 0x41C48D51, 0x89C7AA77, 0xC610CB03, 0xD9CFD565, 0xD6240844,
+0x0BC5A98A, 0x94F89CA3, 0xF124C316, 0x07EFB3EA, 0x4980178E, 0x08C7461D, 0x369DAC15, 0x83B1B59C,
+0x5B0864AB, 0x423CAF6C, 0x0AE8A5D2, 0x2D253600, 0x0BAB0808, 0x825C4408, 0x4F173848, 0xC10251B9,
+0x7AF9A39F, 0xCAFDBBD4, 0xAF847540, 0xFB401046, 0x63421B27, 0x1A2C719A, 0x7593A0E6, 0x0C216310,
+0xC19632E0, 0x10AD1DE2, 0x88D80EA7, 0x5981C17C, 0x7D1619D2, 0xDC76CF4D, 0x6D452705, 0xDB409642,
+0x40840A0B, 0x818BF4F9, 0x8786D8EE, 0x5DC94D6A, 0x5076D4DE, 0x28A198E1, 0xDD1C2882, 0xB9474AA8,
+0xC1325CC2, 0xDC8D9743, 0x13143275, 0xA9398B69, 0x26B9A8A1, 0xC93B1611, 0x74A427D4, 0x4FA660EB,
+0xB5E8E671, 0xB981CC04, 0x20417D3F, 0x8A88AB10, 0x34CEB142, 0x44314C30, 0xDF09BD2B, 0x09285A48,
+0xC87EC20E, 0xE4FC5967, 0x84EA4090, 0xCF4C1D87, 0x25E4D700, 0xA804B9D7, 0xB12DEDE2, 0xC7009C99,
+0xC1E03CDE, 0x85663754, 0xA3BDEEEC, 0x0D18C0DC, 0x2298251E, 0x6D667B4D, 0x7CF324A5, 0x6C5B7B56,
+0x72A4C4F7, 0x20DE7BC4, 0x75F467CB, 0x4A9B6A1A, 0xF19F8767, 0xDAD69149, 0x5CC885F5, 0x43751148,
+0xE5342D60, 0xB49042EB, 0xD88A530A, 0x2C755BBB, 0x5FCE45CC, 0x24AB105A, 0x556C762D, 0x182869F2,
+0xFD9A8D6E, 0x1E32EC15, 0x96934C10, 0x38D969B2, 0xB5EBB4BC, 0xF8C40495, 0xC31F9715, 0x462FD725,
+0xC08D8144, 0x78B55FB4, 0xE0DBEC83, 0x5D743A7B, 0x344449FC, 0xD037470B, 0x3D624032, 0x0F50ABD7,
+0xE912B442, 0x7CD3BD86, 0xAEFDBF98, 0x32AC45CB, 0x5E56A7A0, 0x72790E8F, 0x580409C9, 0x0D3EA4CA,
+0x2C57671D, 0x55B3A3FE, 0xDDF42B36, 0xF0A12BF1, 0x67252EF1, 0x4F039526, 0x6AAAE146, 0x649540B3,
+0x70F99AC7, 0xB31D4DA0, 0x444462FC, 0xE0AA2508, 0x50401598, 0xE1FAA1FB, 0xF682967A, 0x65375101,
+0xA4A4C564, 0xA9328246, 0xEE079066, 0x1A74F41F, 0x84A634F0, 0x3AD092DE, 0xD3E3E7C1, 0xB7EC9FD8,
+0xCB09936B, 0xB19EBBB5, 0xEA0A424B, 0xD4051D7D, 0xCD26A157, 0x13E610B3, 0x12784746, 0x2FE9045D,
+0xF981CEB6, 0x48AEE398, 0x7E2E012C, 0xFD54EBF4, 0x8FA3D388, 0x950F252D, 0xF11D9F46, 0xA2FB30A7,
+0x31E296FF, 0x4A51133A, 0x06C2369E, 0x9A06FF46, 0x476AC777, 0xAAA2C93C, 0x32C2A4F0, 0xC379EC3F,
+0xFD476C6A, 0x48ED6240, 0xE9A76186, 0x6D7E8586, 0xDF940966, 0x9A29F207, 0x1F70DAFE, 0xA9A92A95,
+0x6E693EF5, 0x78F474B5, 0xA571584D, 0x4DB2410F, 0x1448F4B6, 0x511CC978, 0x926CA244, 0xE6FBFF9F,
+0x0259FFCF, 0xD53BC433, 0xC42C8EF9, 0x441AC3BF, 0x482DA55B, 0x89BCEAD2, 0xCBADF571, 0x524A3F88,
+0xF7B68755, 0xD356E71F, 0xD9BA0B72, 0xCF421EFC, 0x1083B85B, 0xBD2E8168, 0xAF8EE23E, 0xD7A54862,
+0xF5D9AAD1, 0x71E827D3, 0x5B470D2D, 0xA388642F, 0xB09E26A4, 0x3A3C1595, 0xB791E8F9, 0xFED87B2E,
+0x19F30DAC, 0x3B5EC252, 0x65C438FE, 0x9C03E4E2, 0x6B10C500, 0xCB8C2E0D, 0x0FC4BB4D, 0x5E35EA38,
+0x9A43E089, 0xD1489AA3, 0x74EF27B8, 0x6175FBD9, 0x4C65D710, 0x9F324982, 0xC7FD2E32, 0x7BC10C56,
+0x12855B56, 0xC0621B7B, 0xA721AFD5, 0xF9E104A3, 0x2F656CDC, 0xABEA2668, 0xD7194507, 0xE5230D3D,
+0x085A282D, 0xD965BCE9, 0x9A8817D8, 0xC91D497F, 0x5D085ED9, 0x50AD9B03, 0x7A83EAF7, 0x9F457E89,
+0x4CD7F566, 0x48F63CA2, 0x16E47745, 0x40927AD7, 0xACFAB158, 0x826BBDD8, 0x652A1BE2, 0xC1CD56D0,
+0xB30FD0AC, 0x4198DB96, 0x35F12D70, 0x3DBF6C76, 0x0ADF0ABE, 0x571A0CA4, 0x089352FE, 0x3977605E,
+0x3BE2708B, 0x481644C7, 0x7F139BC6, 0x87DA1873, 0x54410E55, 0xA8AC8FDD, 0x82AFE611, 0xEE3A9FD5,
+0x93571AFA, 0xC4CB947A, 0xC711B6EF, 0x63B06995, 0x3A627E1C, 0x69E2B92D, 0x9E6DDEC2, 0x16BAE616,
+0xE0E89D8A, 0xE83A69FD, 0x957DE65C, 0xECE7FEDA, 0x309EF6AE, 0x19427668, 0xFF3676CD, 0xCC9AB718,
+0x46977EE3, 0x319B68AE, 0xCE2E1682, 0x9011B62A, 0x33EF14ED, 0xE41DD712, 0x3D010F0D, 0x3564FBEA,
+0xB7DE4559, 0xEB5D6F47, 0x66946EA1, 0x0B0A4939, 0xDBEA85C2, 0xF013BA92, 0x138F0233, 0x5EE22AB7,
+0xB345971A, 0x0EE7AA9F, 0x29028017, 0x73A8E1DB, 0x63935DE4, 0x7EB35F35, 0x1C187C45, 0xEAB6A5A5,
+0xD7CBCA3C, 0x29A4A1C9, 0xC94F597C, 0x399520C9, 0x634D7EDF, 0x83F69ABF, 0xE3C7C6C8, 0x158E6F93,
+0xFC6DCE86, 0x3531D491, 0x6F9DC3EB, 0xE4A4EDB6, 0x006DD6D2, 0x992AB170, 0x3A5F28ED, 0x2A5C00A8,
+0xE4C97A47, 0x21FB3259, 0xE52ECF2C, 0xB0E7CD8E, 0x5726F905, 0xE627D4CA, 0xCEB228F2, 0x79B3DC24,
+0x087BF665, 0xC3372CC9, 0xE3355BDD, 0x35B33E04, 0x3F638C2F, 0x18595758, 0x0A18F44C, 0x4C07C8F0,
+0xE65D0156, 0xE5DF26AD, 0x4397633A, 0xA31C7097, 0x07941DA9, 0x47C9BCEF, 0xD8858930, 0xAD44FE89,
+0xBBF2DD8D, 0x6F0298F2, 0x3F5AAC84, 0xC0ACBA49, 0xFB1D412D, 0x6815607E, 0x1A9EDAFD, 0x0CA7ABED,
+0xFC3B2B50, 0x0C2ACD93, 0x424561AA, 0xF5A64E46, 0x735BE47E, 0x331313D6, 0xADA64086, 0x627CB41F,
+0x0301416D, 0x7705D391, 0x4480140D, 0x16B44C4E, 0x537E6675, 0x4C74B3B7, 0xE971BDD6, 0x8C33434F,
+0xDAE65870, 0x2D300563, 0xC2953EAB, 0x3C989424, 0x683E2BB7, 0xB33AC4FA, 0xFDB2B7E8, 0x6846790E,
+0x56C96745, 0x7B69C89E, 0x40593AE7, 0x118D8D96, 0xA59A69FC, 0x4BF701D0, 0x7B84E744, 0xB1618F64,
+0xDBE9480A, 0x94773243, 0xB031102F, 0x0E4DE89F, 0x7BA308F7, 0xA1DB6C55, 0x8C3A0078, 0xA441811A,
+0x14E2999B, 0x0B87B52A, 0x0E06A980, 0xC48FE7AE, 0xAD45CFEF, 0x257C22F7, 0xFD895A3A, 0x30FA727D,
+0x1A863A39, 0xB32F2200, 0x44DEDE28, 0x674533CE, 0xA9595E4F, 0xF3F1F27C, 0x5783F3B8, 0x7DA14E17,
+0x0998C314, 0x9189CC2B, 0xF439ACF2, 0xE8F1D02C, 0xF7A826E8, 0x390FDB69, 0x86A78C65, 0xA806DBB4,
+0x20E1E0EF, 0xB2BFE356, 0x2A1D537E, 0xE870A8A9, 0xD56C8BC4, 0x6D214CD9, 0xB9E5A960, 0xF241CB94,
+0xF1F31607, 0xB78A4124, 0xB5395BBC, 0x9A1EC90D, 0x83DA9CF1, 0x6272C4D7, 0xCEACEEDC, 0x9198CFAC,
+0x051ABCAE, 0xB389A4F3, 0x7A5B5411, 0x76E13A67, 0x5B5D0139, 0x88DF77AA, 0x43A5C92A, 0x3E5E1C36,
+0xD67833E6, 0x4D95EBD0, 0x7BC72123, 0xFD1917B6, 0xA33979B9, 0x5AD5FE13, 0xF39742EC, 0x8F8636D9,
+0x441EABB7, 0xAE956495, 0x25C9565B, 0x81F422AE, 0x996A6D36, 0xDDEB60D9, 0x9BA2A1C8, 0xCBF8CF53,
+0x8F86892C, 0x6FD426A2, 0x60305D49, 0x90778948, 0x4459D40A, 0x1ADC58C8, 0x5622547C, 0x0DED60B1,
+0xD6E3BE9E, 0x696FF389, 0xE6BC9E6E, 0x855817BB, 0x13BC916A, 0x38313026, 0xE329B0B1, 0x665D3C7C,
+0xAE90B646, 0x7C5B27C3, 0x4662C6FB, 0x4E76D80F, 0xC955A255, 0x08F5F913, 0xC06227B5, 0x4574BCA5,
+0x821D7BD7, 0x7762EE33, 0x7D4512B0, 0x6D4ECB92, 0xC0FE8185, 0x8BF8D1CA, 0xF02EC54F, 0xAD775E47,
+0xBF56FCA8, 0xB047FF14, 0x55CDD696, 0x9D3E4B84, 0x95CC3159, 0x9C1DCBDA, 0x1EABB106, 0x5953DDD7,
+0x8AFCCFD6, 0x296F7E8F, 0xF00ED319, 0xDA27822C, 0xBD482F7A, 0x460354A1, 0x322DB633, 0x84244E7B,
+0xBCDB1EE1, 0xF67E620E, 0xA34B7AE9, 0xEAB1FB23, 0xF8E01253, 0x53FF2B8F, 0x76A32FF3, 0xE2228D81,
+0x1B11F1AC, 0xF72EE497, 0x445F244B, 0x3E12B74F, 0x7E27257C, 0x9A4DB072, 0xC6252B25, 0x7E3D9D5F,
+0x4D4530C1, 0xA8F61196, 0x7E824D4C, 0x416FD30F, 0x4CFD7319, 0xCD14AF34, 0x543AAE66, 0x5A9920A7,
+0x0C2A6C24, 0xBA450568, 0x5966129B, 0xC8F9ADAA, 0xD24F339F, 0x63A6B036, 0x6E281C0C, 0xE570501E,
+0x65856B11, 0x85D49B23, 0xC3E02861, 0xAE3F7F9A, 0xA38CBDAD, 0xBF60E7BB, 0x5CDC0434, 0xC28D68FF,
+0x977706AC, 0xD214F1B5, 0xC7F12D76, 0xF89E65F7, 0x0AEAC55C, 0x5A476DC6, 0xEB4F84AC, 0xF4F719B3,
+0xD6940C60, 0xBF74C603, 0x1DE3AE2E, 0x152FB080, 0x9ED1C387, 0x1A728EE7, 0x9D2DBDBE, 0x7AF499A2,
+0x20907A32, 0xC3F8CB34, 0xBD0A44E3, 0x50083BA2, 0xAFEDCCF8, 0xCA2E9484, 0x110AA26C, 0x667E8075,
+0x0DCEB0F2, 0x3C5322C1, 0x2EFA5D31, 0xC23366CA, 0xED335385, 0x754E5D36, 0xE7C4BD65, 0xEA48CE22,
+0x6F4A9D93, 0x7B6C32FD, 0x986FD711, 0x26CE3A2B, 0x28EDF54E, 0x83B26C8F, 0x1E64E7B5, 0x213DC8D0,
+0x928028D8, 0xBA75CCFF, 0x91983709, 0x69C0CB61, 0x19192D24, 0x80210CF5, 0x70B8E11B, 0xFD897335,
+0x0E599030, 0xBFC50609, 0xB2EA3E96, 0xE47CD50F, 0xF26703BA, 0xA6382279, 0x4358349B, 0x7D8CA768,
+0x25BF92C2, 0x33174E81, 0x739BEABB, 0x5D56853C, 0x41F74CA0, 0x8D121C4E, 0x1B3F4528, 0x22E85949,
+0x7431AC99, 0x10EAD138, 0x30047386, 0x428D2CD0, 0xFB04ABD8, 0xC94FB205, 0x0E1DCE9C, 0x4CC0B45C,
+0x5AC84448, 0xF30D27EA, 0x7196248D, 0x376C06CF, 0x28DCA40F, 0x52A30DDC, 0x972E1DFD, 0x26844B4B,
+0x090B1A18, 0xEF2FAEE5, 0x261B5C40, 0x435D3122, 0xDBA6F1A4, 0x05A5CF7E, 0x43084758, 0x90527E9C,
+0x739C5AAD, 0x7F22E2C6, 0xF5FAAB39, 0x7B2CBA1E, 0xAD7B5692, 0xF0001B8E, 0xE7507A68, 0x38307B9B,
+0xE83DCDD7, 0x74AEF382, 0xF978A62D, 0x4F36EAB0, 0xC4C910E3, 0xD149E038, 0x4B13F31B, 0x44DC9FFC,
+0xEAE7DBAD, 0x429C8D7C, 0x1C74FF29, 0x5B88A3CC, 0x93A51CB0, 0x47C69B2A, 0x7DAE77BE, 0xD44BA0DA,
+0xB9D30BBB, 0xAFD09D11, 0x13F20239, 0x4E15A406, 0xCC67861D, 0xD35C79DD, 0x71A41AF7, 0xE2975157,
+0xE477FAA5, 0x81A327E2, 0xDB5B8192, 0xFC208F91, 0x783D155C, 0x90C04C25, 0x513E9820, 0x0424D06D,
+0x78250639, 0x7EB00FEA, 0xFA27FD5F, 0xF154D67D, 0x8465E8B3, 0x2179A88C, 0xB32A25C2, 0x6D00821F,
+0xD8B07E48, 0xF3C9A2E0, 0xC5B17115, 0x5A1CCB38, 0x1F3DA89B, 0xAEBECFED, 0xEAD6A0E5, 0x3C72B362,
+0x6A0722A3, 0x027E5E4D, 0x5FA00AEB, 0x06707B90, 0x289CEF3A, 0x10A6B445, 0x261ECAB3, 0x1900638D,
+0x1C62B34C, 0xCE0C4162, 0x8F2DB801, 0x3783B001, 0x27F0CE6D, 0x06CBD44E, 0x0231A9F6, 0xA8B9E74F,
+0x4D1724BC, 0xF6D40DA7, 0xD1AA0036, 0x65881177, 0xF5E8201B, 0xD0C7E434, 0xCD4B6901, 0x0642D78B,
+0x806289DE, 0x4DF29991, 0x12124C6E, 0x5B5B80D5, 0x5988EA69, 0xCA320FA9, 0x5C7F3074, 0x5D84FB7C,
+0x98075357, 0x514B69B1, 0x5BCFD785, 0xE3B1B6E9, 0x4304D03E, 0x2108FF38, 0xAE509A6A, 0xCEF40539,
+0xF21930B3, 0xBBDBA850, 0x02864D37, 0x65DA618D, 0xE528A762, 0x492213BB, 0xCB58BEA6, 0x3A100339,
+0xAE3EA226, 0x941CC584, 0x1179D696, 0xB7B68643, 0xC7521660, 0xC274DFE5, 0x9E769B60, 0x6315D47A,
+0x09458E55, 0x7EC705F5, 0x318D9444, 0xBD2EE343, 0x63022E73, 0xBA883298, 0x51958B51, 0x69FEE24A,
+0xCFC0628E, 0xB4DECD22, 0x21B7A774, 0xB62CC69D, 0xCB3F8183, 0xB6566EB5, 0x249B57CD, 0xD1406267,
+0x45A3482F, 0x75F6BF44, 0x49734BBB, 0xE5ED014F, 0x92FB6175, 0x45BB34E4, 0xF5D51705, 0x280C02D6,
+0x087B8C9E, 0x1A01B617, 0xE0EAD652, 0x193CFB71, 0x66D390DF, 0xA82BA35C, 0x0E7961CE, 0x275A23C0,
+0x94E13CFC, 0x9B205848, 0x9A31CB69, 0x82C3C550, 0x1801CD3F, 0xC97B4A0F, 0x234070CE, 0x398C2BDD,
+0xC06EE056, 0xD2C1722B, 0x43F4ED13, 0xF545DE72, 0x08809292, 0x31CA4EA7, 0x403BFA64, 0xD5AD32F2,
+0x4B7632DE, 0x26452865, 0xD453AF35, 0xEC6E8EFA, 0x6CE167B5, 0x6B8EF90D, 0xEBE64DBF, 0x776FE3ED,
+0xFD3EA47D, 0x9D2F3BB6, 0x2E7AA6BC, 0x9668F961, 0x547E491B, 0x4A178E96, 0x723A2932, 0x351AA2B5,
+0x89C88F08, 0xC3DA4D4C, 0x37A0E0EA, 0x311F1391, 0x17EC539F, 0x8EA0FB89, 0x8BE0816B, 0xCC14943F,
+0x3BF24F91, 0xA85944BC, 0xAC3BF135, 0x9410503F, 0xEFB26FD2, 0x633E2E29, 0x3FAE6E4C, 0x47F76715,
+0x491E6B18, 0x11B54152, 0x0E5D2BC1, 0x9817DABB, 0xC0893D6A, 0xE826FE1B, 0xAF6778C3, 0xDBEF82FF,
+0xC7231AB3, 0x2324181B, 0x7930E43D, 0xBA8AA91D, 0x7295C089, 0x1E0C20B3, 0xA95487D8, 0xFDCDD82F,
+0x1D628AFD, 0x258F369F, 0x5EDCAA81, 0xF5215943, 0xC243C861, 0xB718945B, 0xCB080BAE, 0x7E9F4936,
+0xAA9678EF, 0x629B3A6F, 0x65239677, 0x7C6D66DE, 0x4A330D95, 0xFA462763, 0x5BB9DBAB, 0xDDE55C6F,
+0xEFDD0FAA, 0xC43398AC, 0x8431B0F7, 0x9BBB1922, 0xEF57F681, 0x8850B9DA, 0xA8E52A8C, 0x186ACB44,
+0xFCBE163C, 0xF83E874D, 0x90A8C01C, 0xE50427A5, 0xD4123496, 0xDA57C926, 0x5B93ACEC, 0x8C350FCA,
+0x00516A30, 0xC06250FB, 0x58B89482, 0xB1DDD46C, 0xDEA20B62, 0x82B22656, 0x62CE0736, 0x137552EA,
+0xBEF44669, 0xC1C85F91, 0xD827CD44, 0xE5B8A287, 0xA965090A, 0x3C8D660C, 0x0CB04D4D, 0x68950105,
+0x565953C3, 0x57D2EEE1, 0x9954182D, 0xE5B984E6, 0x8ACCB62E, 0xF31D3D96, 0x3ACCC27B, 0x9C477F91,
+0xD8C27EF2, 0x69FE8C3A, 0x8C278D1B, 0x6FC05169, 0x1CE3A1C9, 0xEC71B244, 0x5CB10A13, 0x17CCE8FD,
+0xFC16596D, 0x14061105, 0x151495BF, 0xB9853E8C, 0x4F5CD97C, 0x53F6E1D8, 0x42601D0A, 0x37430C15,
+0x70B43680, 0xE86745D7, 0xFDE13663, 0x84CF3DCD, 0xB835A695, 0x1AB7D951, 0xA2A3E918, 0xBD9AFB82,
+0x42522C99, 0xBAD1504B, 0x28C5AE27, 0xF51B0A29, 0xBCAD5041, 0x74A50F2A, 0xD9CB3D93, 0xBCBDA50E,
+0x77E59CEF, 0x0CA5DC3B, 0xE75C0030, 0xFFD2F6F9, 0xB3CBD8CF, 0x6AACA8D0, 0xC22D345E, 0xF3A4502B,
+0x256A3750, 0xA49A0902, 0x9105A84D, 0x8108F8B7, 0x6A45744B, 0xCF3525DD, 0xF0D06D17, 0x021FE098,
+0x5ECA7A2A, 0x78BDD4D6, 0x6B761906, 0x21D1489D, 0x8FA2ED9D, 0x66F3394D, 0xDA410406, 0x7EAAABDE,
+0x1D08AFF2, 0xD7D28DDD, 0xD16DA51D, 0x2D279EDA, 0x38341D85, 0xB4F9056C, 0x5DF3C32E, 0x4251DF5F,
+0x9E8116D4, 0x392724CA, 0xA3636129, 0xF7629626, 0xF305DA8C, 0xD93FAF51, 0xE7904418, 0x2A560EF3,
+0x268DD7EF, 0xC464E8E8, 0x9FD6C31B, 0xE1456AB8, 0xD0D28AE6, 0x82A7F874, 0x05EBE6B5, 0x2301205A,
+0xC9B99B6A, 0x49937D22, 0x49A11A71, 0xE3D12E23, 0xF6E607D1, 0x2522F375, 0x57B8971B, 0xE4921128,
+0x2DC8FC4A, 0xC477931C, 0x29AC3E15, 0x805CA6AE, 0x5E3A5A74, 0x90EE426F, 0x65CF4B29, 0x6CEA4860,
+0x0D6AB69E, 0x134C9865, 0x14849B2B, 0xFF433FD6, 0xD9359696, 0x03478795, 0x76D275C0, 0x4B4AF53E,
+0x2F998733, 0x79FAE455, 0x405A604B, 0x1BA873F7, 0x428BC164, 0x310B407D, 0xE47CEC81, 0x4475DFD1,
+0xB1A0163B, 0x8B1195E8, 0xFE0867A7, 0x160258E6, 0xD00DC8D7, 0x26A0F889, 0xFD5AD14A, 0xF6C40164,
+0xB196A08A, 0x801ED6E4, 0xA6E54DD4, 0xBDC81BA5, 0xC233AC28, 0x4AC75A24, 0x930E4478, 0xB95FCB52,
+0x2CEBEDEF, 0xF1888705, 0x9D925A5F, 0x2E43635D, 0x88EB2499, 0xA9B2D212, 0x1C92DCEF, 0x46978F91,
+0x59BC59D3, 0xE3D6E9EC, 0xA3968DAA, 0x4A0FD852, 0x4D841F6A, 0x347E5C4A, 0x3641F34F, 0x665870DD,
+0x5FBDD85B, 0x76EB351A, 0x2B49529A, 0x529BCB82, 0xD3E6E267, 0x45BBCFD0, 0xACB219E1, 0xB38DEA54,
+0x96BD745B, 0x9105C294, 0x6A04B429, 0x851020EF, 0x18CED74F, 0xF33B7F44, 0xA101CEEC, 0x49082099,
+0x82406B8B, 0xFCDBCA55, 0xC8065879, 0xE65D3A83, 0xD0CF8005, 0x09139227, 0xBD4EB20E, 0xF7F0EF30,
+0xCA67051A, 0x75B7CFD7, 0xDAF53F59, 0x75FB016C, 0x0117B380, 0x8C2D71DF, 0x72C35F60, 0xDED73CB7,
+0x088CF232, 0xBFA63931, 0xE97CE243, 0xEACB14B4, 0xB7F11B23, 0x39B22620, 0x7070E960, 0x44E11567,
+0x38123C71, 0xEF1233E9, 0xF1402E90, 0x0A16990C, 0x7DF3CA3F, 0xB9466F05, 0xC1768584, 0x898BA9CE,
+0x13466079, 0x974A12BD, 0x848002C7, 0xD5E45629, 0xAD89D510, 0xAD1B5C3F, 0xA93F6659, 0x192C7D01,
+0x7CB5FFCB, 0xE4341543, 0xAE3DA3D4, 0x63929DFF, 0x1C166631, 0x8F0F922B, 0x7C2333A7, 0x306A58AE,
+0x00DEE980, 0xD0A2F261, 0x586E5A1B, 0xBB48A528, 0x0445C541, 0x1BF41E80, 0x1E08C827, 0x1684BA6A,
+0x0E61CFE2, 0xFB8363E9, 0x25B05B60, 0x4930F6E9, 0x4EA3C7A8, 0xC85A4AA4, 0x4EA99E81, 0x87F88813,
+0x11421D6E, 0x1B0FCCAF, 0x7367A339, 0x1B95B03E, 0xD24FB1C9, 0xB0E8500B, 0x0FBD3DEA, 0x26B94FFC,
+0x39468E97, 0x30CA5372, 0xA08198DF, 0x4A589CE0, 0xC220A91B, 0x0A97219F, 0x0564DE79, 0x9AD0E27E,
+0x4F8E146D, 0x4427AA0A, 0xA3BEC8CC, 0x8AC00DB1, 0x54D041B1, 0x19760BEF, 0xBD5A0A3D, 0xF0C2B977,
+0x319E7819, 0xBC9ED2BD, 0x815DBDDA, 0xDBB17F6F, 0x4496866A, 0x4AC676B3, 0x65F642EC, 0x68D143F5,
+0x6C0BFB18, 0x6DBCA1F0, 0x431A1900, 0xB83CAC8A, 0xE6B2434D, 0x36228CC9, 0xE99FC3FE, 0xD017834E,
+0x8B4F4C28, 0x2202AC49, 0xFDF1E8FF, 0x5C1FF652, 0x7D2B1687, 0xBD6CFFA4, 0x4BD0482A, 0x2659E12C,
+0xFE53A419, 0xE12CFE25, 0xF25D31D7, 0x6D19C3AB, 0x28CCDA7E, 0xE55F1861, 0xC4F6936C, 0x2DB6A796,
+0x12C62437, 0xA6CEB390, 0xDD2DC745, 0xD9577DDC, 0xC1AD239A, 0x6D2FCAEA, 0xAC6C8EC7, 0xA174D7F5,
+0x33CAFE5C, 0x128C36F3, 0xFEC7A3A1, 0x522F2BCE, 0x5F410C86, 0xFD5F8676, 0x9116429C, 0xADB69908,
+0xD42DF186, 0xA28E22EB, 0xDBB38A30, 0xE9F811A4, 0x7F974B97, 0xECDE25B7, 0xF1CDC8D4, 0xCD72B4C2,
+0x8B03509A, 0x730814DD, 0x603FFF85, 0xF452078E, 0xB439919F, 0x15ABB02C, 0x9ED4045B, 0x4347DAA9,
+0xB61B7C1E, 0x82AECF0A, 0x081BB9C4, 0x00ADCF1A, 0x87E43D0F, 0x7EE81506, 0xEDEBF608, 0xBC97BA7C,
+0x54EB6919, 0x29D5DDC7, 0x0E0EF1FB, 0xB3E96001, 0xF771A215, 0xCAD807DA, 0x1A78F2DE, 0x239677B5,
+0x6092637D, 0xC5DBAA1E, 0xD5EAA9CD, 0x94C969E4, 0xED1E3908, 0xF07B07FD, 0xE54B5AE5, 0xF95044D4,
+0xF6048FA5, 0x6F60ACCF, 0xE874CD2B, 0xFF7F1D3E, 0x08A1FBE4, 0x71AE74AA, 0x99E370AF, 0xCB0C774A,
+0x09AB4879, 0x1E24A749, 0x3C4E8D5F, 0x5C81AB4D, 0x40A5B945, 0x84E61AA8, 0x89ACA459, 0x217D1A22,
+0x6FDA94C5, 0x9D949739, 0x3AC8DA27, 0xE58D250F, 0xC2D54AD3, 0xD86EE84C, 0x44375944, 0xCA34D867,
+0x5A607655, 0xD58FFABC, 0x7CFFD9B9, 0x9B3B66AD, 0x80E3F559, 0x2429253B, 0xDEA75FD6, 0x9DFCE670,
+0x29331115, 0x55FC478C, 0x2B0D99DE, 0x13C42252, 0xAF3BEBB0, 0x3DC68752, 0x164355DB, 0x0BEB0AC9,
+0x6C969A5D, 0xE8FF4F19, 0xBA0CB115, 0x37DD8F18, 0xA4D791D2, 0x5C351415, 0xC5A49549, 0x50E6C821,
+0xE4368188, 0xB2A8F975, 0xC05816C3, 0x800DCC37, 0xE93689B5, 0xC08B4CF6, 0x1FCF1D4E, 0x1C7899FA,
+0xCDCC97EC, 0xB91FD3B6, 0xC2B61546, 0x82AA2E3B, 0x75869ABE, 0x269F0DEC, 0x77A4AD81, 0x6E37E456,
+0xACC0015C, 0x9DC998AD, 0xC00D8B5E, 0xAC0070C3, 0x9EB853FD, 0xFE499BD9, 0x22CF4760, 0x45EC1F7F,
+0xCBB69CB6, 0xEDA53B9B, 0x8631B7C0, 0xEFC3E917, 0x65ACE1CC, 0x81AFE25F, 0x4C48925E, 0x07180D60,
+0xFDBC9130, 0x82762F27, 0xDD884420, 0x23A4AC73, 0x06B1BB77, 0x5D69103D, 0x02F2BA26, 0x84DA9087,
+0xB8772FE1, 0xA860CA12, 0xF62488B7, 0x2A063644, 0x15024BA7, 0xF0651A5C, 0xC5C80256, 0x054DA570,
+0x268C16F6, 0xA6784E38, 0x0C3E0D16, 0x96BBC786, 0x9B41C92E, 0xC12A7F7E, 0xA6CA431F, 0x404A7AE9,
+0x000915D5, 0x80B424AD, 0x0FADF41B, 0x425386E2, 0x7945F9A8, 0x4503B9DF, 0x25D3F075, 0xB95CA2DB,
+0x3095DA9C, 0xE22972EA, 0x5ABBBC38, 0x51180C12, 0xF1EC2E49, 0x4B8092BF, 0x8D0596D7, 0x34996104,
+0x8978AB28, 0x47B3FAEB, 0x8F34FEA6, 0xBA6DF242, 0x0427A31E, 0xCC1A8EB2, 0xB279D888, 0xAA24EBBD,
+0x81ED21EA, 0x841D9327, 0x6350239C, 0xC2D6A6AF, 0x5A6E9A7B, 0x3B85434A, 0x65549041, 0x15BEB41D,
+0xA0AA92D0, 0xC88C2272, 0x6B91B4E6, 0xE5E3EEC2, 0xDAE37694, 0xA3DEAC25, 0x0251B92A, 0x7E1AF3A2,
+0x13DB5046, 0x2FCE6A6B, 0xB35281DC, 0x149034F1, 0xE4F6B8F8, 0x74D7E63E, 0xF6283CC1, 0xC0D563EC,
+0xF309EC6E, 0xDB8286C7, 0xEF681315, 0x776EA07E, 0xDB9D4DC3, 0x3CCEDE79, 0xC9A22C94, 0x416DE780,
+0xB147692E, 0x383EEDAF, 0x6B74816D, 0x9A078780, 0xCD16090E, 0x3184B5C7, 0xD9B4BA14, 0x86362F3E,
+0x65B9DD21, 0x33312790, 0x4A379F5F, 0x8B5FDD38, 0x9C572177, 0xAECE46BD, 0x56864C29, 0xCD2DEF47,
+0xDC3AFD65, 0x209C6A64, 0x7B40FFE7, 0x41B67CC3, 0x8D85905A, 0x5FDA5E7B, 0xADC05ECF, 0x4AA6EBB5,
+0x81DC3A8A, 0x3D31E43D, 0x5613A286, 0xEAADF4F2, 0x95B3D8CC, 0xD485739B, 0xC846C401, 0xF5354BB7,
+0x3CB54C9C, 0x931C1B3F, 0x7CE09E2F, 0x83F07F4D, 0x8E77D6E9, 0xB6E2E4B9, 0x26311C6E, 0x035E9DB2,
+0x028C1688, 0xCD606FDC, 0x9FD11113, 0xE1C7AB1A, 0xD65A0D81, 0x968D840F, 0xB2081539, 0x408A8B2A,
+0xAC0286A5, 0x964563D9, 0x24290946, 0x62A613B7, 0x35A73B20, 0xC920807F, 0xAC04D23A, 0xFFA37FC6,
+0x90ED3F2D, 0x088D035A, 0xAB037BCB, 0xEF684D41, 0x47850DD3, 0x7664AEFD, 0xFDE3799E, 0x1B7FE91E,
+0x43BFA644, 0xE1E904A5, 0x47B58960, 0x1D378161, 0xDC272F1E, 0xF8643B7E, 0x7E69E2A4, 0x78AF722C,
+0x71698642, 0x87292972, 0x936F8A2F, 0x2E0AB21B, 0x8F6C4B1B, 0x343B0634, 0xFD46A428, 0xE27025B0,
+0x2115FF4B, 0xDD6CA1C4, 0xF438DBF0, 0x109A5926, 0x5B16DBC8, 0x0CF8B008, 0xD547981D, 0xB8C04F2E,
+0xE7F259BC, 0xCBC3CC8B, 0x3703BB18, 0x9985EADB, 0xD5B81C8C, 0xB3CE1246, 0x1128AA44, 0xAADB4A5F,
+0xF8FA385E, 0x5A4995F5, 0x37AD1F73, 0xFDABD258, 0x18C41A84, 0x637D051B, 0x4C9C4509, 0xBA74A1FD,
+0xA0D64564, 0x9C0D165F, 0x6D5B0938, 0x34FD4A05, 0x580A6635, 0x56E68ABB, 0x1DDE5F10, 0x7C28DA16,
+0x292C02A0, 0x18D0A38F, 0x3FF47A41, 0xE01DBCDE, 0xFE50F5EB, 0x914562DA, 0xF3C34204, 0x1AA5BCB9,
+0x062F054B, 0x2A4BB634, 0xA7EA7077, 0x468C0F8E, 0xF6B32B5C, 0xAD269FFA, 0x8AE00C12, 0x3822BAAC,
+0xD6DF44EB, 0xF005AEBE, 0xFB2E249F, 0x8C9C750D, 0x096A2BCB, 0x5F97D94E, 0xBDDBCCC7, 0x4A2E9D42,
+0x56C896C4, 0x7FCBDA75, 0xB5F4AA99, 0x2FA35F44, 0x1A5F4251, 0x9EB17199, 0x81C2F047, 0x389F13D0,
+0xABC62CB1, 0x64F7C99A, 0x37EDD14C, 0xEC956503, 0x00EE2BD7, 0x4EDA5E68, 0x692AA8C3, 0x3A652C87,
+0xB4A716DD, 0x3A509FDB, 0x3D9C13FA, 0x480ABA5A, 0x1E1D9BBB, 0x4881599B, 0xE4F2C9F0, 0xC8A51774,
+0x4578A4C0, 0xB566F94B, 0x03E616EA, 0xE167C53C, 0x47C8BB74, 0xEB0A0DB6, 0xC77CE645, 0x7A22128A,
+0xC39C0B8A, 0xBF707AE0, 0x4C503AC9, 0x9683F0F0, 0x786E5AF8, 0xEFA4E9D8, 0x4399FF89, 0xE311B8F5,
+0x6CBCF11C, 0xA1A3F8F8, 0x40F86C5D, 0x559F4416, 0x1FE764FA, 0x1293836E, 0x007CA8E4, 0xAD4CF895,
+0xBFC0034C, 0xBE4B9B96, 0x782A96AD, 0x4E4CEB02, 0x9E9E764D, 0x522F586B, 0xAA0059B4, 0xAD69C11D,
+0x4C985BA5, 0x37C0FB5A, 0x058E0974, 0xD504A341, 0x962A032F, 0x20ABCC5C, 0x9531737D, 0x600378F6,
+0xC9A3B5D8, 0xE2B08106, 0xC527AFEC, 0x42230944, 0x989274EE, 0x537F6D39, 0x40DBEE44, 0x5F36E98B,
+0xEA082D93, 0x3ADD06FE, 0x73C9F804, 0xD0C926F6, 0x264DA519, 0x71977E9B, 0x612AC314, 0x05B58735,
+0x2D374B6A, 0x6EF68917, 0x511BDF07, 0x5DB55FE9, 0x6FEFCDC2, 0x49B2619A, 0xF996DBFB, 0x5BA074E3,
+0x386D577E, 0x23E8B836, 0x08003165, 0x4E51B3EC, 0x1EE80503, 0x315088F7, 0xA52B6BCC, 0xA16A594C,
+0x85B52BE5, 0xBAECF6AD, 0x980F873B, 0x61BBD67C, 0x7A7C638C, 0x4F8E4601, 0x55838CE2, 0x3955D2A3,
+0x8F5F7EF5, 0x1F1B7380, 0xF0E8E824, 0x46C7A2F3, 0x81793432, 0x2FBA1269, 0x4BFB8133, 0x259BCE4D,
+0x36C40D01, 0x4EFB139A, 0xE51949FF, 0x5F3163D1, 0xCD7A141D, 0x4E1B073E, 0x12B6C556, 0x4C88C894,
+0xDF267E21, 0xE72CF49A, 0x379980BE, 0xB80F66EE, 0x3CE83A52, 0x1AB15659, 0x81CEEF28, 0x325EFBFD,
+0xD0177213, 0xD06AB649, 0x3B10355A, 0xAB957643, 0xE41F13DD, 0x2684CDB9, 0x8B91BD98, 0x1FA0B317,
+0x8E34200E, 0x765664B1, 0x7C15EB0C, 0x177E9BD6, 0x508D430D, 0x64F33D9E, 0xB5B80C36, 0x8A958075,
+0xA787CFF1, 0x7FE1061A, 0x22797FDA, 0x834054F1, 0xC06FE0A2, 0x00E19524, 0x3A15AAE1, 0x2AFFEFC2,
+0x19D2CE4C, 0x21AEE560, 0x5CB162C2, 0x7582C149, 0xA2308ED1, 0x6A9EE090, 0xA064A25C, 0xF5A2A407,
+0xAD7334DE, 0xBDB8245E, 0x98B668D7, 0x6F99DD58, 0x47BCF0B4, 0x409DE45C, 0x1972C82B, 0xD4FBE0DC,
+0x71AF8DAD, 0x5FC7D47E, 0xBE896EF3, 0xBC2F81BD, 0x815642CD, 0x8E960745, 0x0BC31BB2, 0x163E3906,
+0xB2A80825, 0xE848008E, 0x94DEC0C1, 0xD816BE27, 0xFA15B0F9, 0xE911E77D, 0x7A9A2DB5, 0x23A59589,
+0xAA07FF0D, 0x4977039D, 0x49FA7CD7, 0x18D353BD, 0xA08ED35C, 0x8BD8A411, 0x07F548DC, 0x9205A4CF,
+0xE516F486, 0x4D0A50A7, 0x46FFF585, 0x014BC4BC, 0x5FD0F5F2, 0x30C44B47, 0x0CAE8907, 0x54EE252A,
+0x0E8046C7, 0xF7125770, 0x6D5C1FA5, 0x4C89B455, 0x0539B043, 0xC75C9DA4, 0xDEAD3B69, 0x3FF0E6C8,
+0x54753CF5, 0xF72C4D2D, 0x3F35A3CC, 0x57DF978B, 0x2C9D0EFB, 0xF38571A9, 0xCD0281D0, 0x3D7C8E70,
+0xD67DD7F1, 0xCCA16EBA, 0x39E0613B, 0xD1226CCF, 0x99F05550, 0x5CBD6C7A, 0xB4996BDC, 0xB74F3E47,
+0x5DC27647, 0xE1F93622, 0x05135D65, 0x020451BE, 0xB20E4992, 0x3B4C1FFF, 0xEE891BE8, 0xE5ADAED1,
+0xEA859E6C, 0x24AAB4B2, 0x25B8C481, 0x21E410A2, 0xF5EB7450, 0xD1C217D8, 0xD902B086, 0x511BB85B,
+0x93699A35, 0x4A9891F5, 0x8785927B, 0x73FD177B, 0x07519435, 0x88CB51F7, 0x62966CB0, 0x1A6FA8F5,
+0x8765DDA3, 0xAA395C5D, 0x66E8A45F, 0x9ADC9BD4, 0xACF2BD28, 0x19FD6C0B, 0xAD4D68F9, 0xF269BEEE,
+0x63434017, 0xFD0FFDDB, 0x19014404, 0x56E861BD, 0x83706910, 0x3A60BC1A, 0x369DA75B, 0x84319BBF,
+0x6A3F3D10, 0x5E9EBA62, 0xFC61ADD3, 0x084440D5, 0x6E89E52A, 0xA0DFC376, 0x10F0A1D5, 0xD3E7FD9C,
+0xAA24A702, 0x1D055BAA, 0x468C7038, 0x0AE1C5CA, 0x61724EE0, 0x8C032A9E, 0x44A7ADDB, 0x08D9F147,
+0xABB1671E, 0xB604DB44, 0x59325458, 0x70DB73D4, 0xBE38ABCB, 0x69259502, 0x93485CF6, 0x39F6021E,
+0x23FDA072, 0xF6BA5985, 0xBF23782A, 0x9C5404D0, 0x66BD05DA, 0xAECD8C9A, 0xB8E3DC22, 0x33EAB727,
+0xB7B29565, 0xFE906F1A, 0x4064A0FC, 0x40887198, 0x5F9F0485, 0x9683BA92, 0x59A71C66, 0xF7CF4B4A,
+0x52A79ADA, 0x006837A4, 0x8D0D5A68, 0x34E3AF8C, 0x24349975, 0x61B931BA, 0xDAB547CD, 0x830F1586,
+0xE567670F, 0x953403E4, 0x243B12B0, 0x6C933E7D, 0x71DA6E4B, 0xFC9C84EA, 0x98009D3C, 0xF64998D4,
+0x9C30F04A, 0x024A1566, 0x7C3A27CD, 0xD63347F2, 0xB2D62AEA, 0xA3DDE823, 0xF1EFB537, 0x8DE54AFD,
+0x6713A377, 0xD7D7A5CB, 0xC1AD09EB, 0x9E6E5790, 0x31EF5A56, 0xFE35278A, 0x04BFF1F8, 0x698C9F72,
+0x71E6474A, 0x132D79A5, 0xAA280630, 0x9D27DAB8, 0x059EFC15, 0x365268E4, 0xAAD67836, 0xAB53B646,
+0x210F5E2F, 0x7AD376E2, 0x698EECC9, 0xE9530D68, 0x45F6925A, 0x6A8CBEE5, 0x58B3A6D7, 0x54BD2EEB,
+0xD9A8A6F4, 0x74646A91, 0x859BDD3B, 0x187C43B6, 0x364EA0ED, 0x74FC4C1E, 0x2F0DACBA, 0xFF31E040,
+0x0CE8CA63, 0x323E27C7, 0xAA34BCBE, 0xEE8061AB, 0x2AAED5B9, 0x1F51A1F7, 0xA3F61C8D, 0x6D9D6210,
+0x83200ECB, 0x5F9837FF, 0x7795BE91, 0xFA7CE310, 0x6EC451ED, 0x2432CA1C, 0x97BEB2FA, 0xD1651BA4,
+0x221623EC, 0x5D54393A, 0x4C442434, 0x6FADE696, 0xFAACDEA3, 0x61B74FF3, 0xBF5377B2, 0x05AB19B2,
+0x61754483, 0x9F1B9755, 0x0C488BA0, 0x604F41A6, 0x99908A32, 0xAD9D23F7, 0x91AA3B15, 0x2B655EB3,
+0xA79846AB, 0x0AF917A8, 0x46436EFC, 0x15DE8CB2, 0x352CE56E, 0x578208AC, 0x48D8446D, 0x22DDFD7B,
+0xB3C9F4A9, 0x313DCA07, 0x49647CEC, 0xD9995CA7, 0xD5EF120B, 0xE4C44326, 0x21559224, 0x5D3D4B20,
+0x13CE13D3, 0x99D4C852, 0xD0FB68BB, 0xEBB94B1B, 0xE8019838, 0x0C5F719F, 0xD9508790, 0x6B7F2F0D,
+0xCFC32E02, 0x210C459C, 0xBC778C8F, 0xA169EEA5, 0x88E71D5A, 0xD839E193, 0xEF357CFD, 0x522BB63E,
+0xD9B27516, 0x2DD7E5C0, 0xCA590E27, 0x2D50EDF2, 0xC435D654, 0xFF3C07D7, 0xA07A427B, 0xB496B4E6,
+0xBE35BFEB, 0x143B3677, 0xE4841E1D, 0xE3F2D82A, 0x34FC0EDC, 0x6EB123FF, 0x3886055F, 0x728B94C2,
+0x32B6B1A0, 0xB5225763, 0x80B54FAE, 0xE4F68614, 0x7B60CA55, 0x8A0CE816, 0xC540670B, 0x08791F27,
+0x29E7810D, 0x0E0C4E6F, 0x94895E97, 0xB8D81035, 0x035B8E7D, 0xF0208040, 0xC9209139, 0x81906E0E,
+0x9B8D2F40, 0x579271B8, 0x2FA197D0, 0xCCB0879E, 0xD1366A62, 0xF3D53FEC, 0x882263E2, 0x34BD80B3,
+0x866D45D9, 0x39829DA1, 0xF50BFC8B, 0xB93DB2E9, 0xE171193F, 0x6177BCDC, 0x35223EF0, 0x920A053F,
+0x954BFB77, 0xF472A895, 0x1E2851D9, 0x8770BC92, 0x2C7A5DDE, 0xAA88DBA4, 0xB8BB18DB, 0xA0BE5CAC,
+0x4517160A, 0x4868FE6A, 0xFD6521E3, 0x6E76D632, 0x1298A843, 0xB69BA623, 0x6FB6A51E, 0x429869B2,
+0x48D1DC90, 0x7C25014F, 0x4588B14A, 0x2DABF0E0, 0xC6EE6238, 0xDD3D04B4, 0x4F22D0EE, 0x3C16C3F0,
+0xA4A81F6E, 0xD0EAFB49, 0xB1795900, 0xD580863E, 0x463E2C20, 0x60E04A5D, 0xDABE2AB7, 0x38803CD2,
+0xEFADE568, 0xD283A2D4, 0x13685881, 0xACB7CDE7, 0x4AE6F60C, 0x8411EC30, 0x0FBE8C9F, 0x747C67ED,
+0xA8FC8C0B, 0xA40C9025, 0x021811E8, 0xEB7D9C3F, 0xFE77C080, 0x62A0A19F, 0x42F50AA8, 0x4F2EA25C,
+0x6FE5A308, 0x51909B6A, 0xA9D91BAE, 0x9968FD45, 0x4ACC294A, 0xF6DBEC0C, 0xFAB4A64F, 0xFB6992C0,
+0xB27A75DD, 0xC94CA22C, 0x76FAD773, 0x888705E8, 0x6366DDCF, 0xB4A1146A, 0x142FC494, 0xE0E73EFB,
+0x1E29ED93, 0x4754C836, 0x4B859867, 0xC669F576, 0xCA16D6B8, 0x5A0611EE, 0xADB6FA3C, 0x671A4432,
+0x53DCFB32, 0xE3400B91, 0x1A7EBDA7, 0xC6F131F8, 0x6CF48730, 0x927CC4B0, 0x7F84514B, 0x5FD29B5F,
+0x2B013549, 0xD5C424F0, 0x89BB0E25, 0xDA9F5173, 0x58024121, 0x2E06BE68, 0x380F0D28, 0x1B279569,
+0xBCA5F6E4, 0x9FC31779, 0x39057860, 0xD3894CDE, 0x22A22F4B, 0x166B594C, 0x7CCBAE13, 0x93779021,
+0x436E3E9B, 0xE523B877, 0x0F3104BE, 0x1C8EC70E, 0x1F331BAF, 0xFD25DE54, 0x7C05A168, 0x8B144CA8,
+0x2B618864, 0xBD56C7CA, 0x325EDD8A, 0x2591834E, 0x2A94123B, 0x07A92AFC, 0xE56437B6, 0x6CFF94B0,
+0xB61DDE99, 0xD2EC92A9, 0xD3DE3670, 0x5DDC3137, 0x555A0F1E, 0x3AC4F627, 0x55A869A9, 0xF934C0EA,
+0x6664A3AF, 0xD6FCD75C, 0xDD11936A, 0xEC46CC55, 0x7531545F, 0x7FBF69B7, 0xEC0CF805, 0x5D848806,
+0x6771B07E, 0xE8072CF2, 0xA0199B73, 0x450A6A49, 0x4CA3EEFE, 0xB680E631, 0x0A9B91FA, 0x8C251617,
+0x84C4C15A, 0xD17A9E9D, 0xA5C47DC4, 0x0266BE26, 0xFD22F321, 0xE957E174, 0x7C0D2602, 0x15FE5693,
+0x5DB68346, 0x21EB431C, 0x7718731F, 0x61A71EB6, 0xA14D9B09, 0xBF565898, 0x17836415, 0x3172E63D,
+0xAD2D6516, 0xDE98916E, 0x75701C53, 0x615BD719, 0x9FD12159, 0xEB9C9BC9, 0xE23E2CDF, 0x7D0E720B,
+0x83F13120, 0x23A9E520, 0x51B08D52, 0x54024761, 0x3C01479F, 0x9EEB10BB, 0x183BF990, 0x31A7FF37,
+0x61CBCF1D, 0x7A14BCCD, 0x0E785825, 0xDD76A8C7, 0xA3C06CCF, 0x34ADBD96, 0x0624BACE, 0x05831889,
+0xB0C8076A, 0x2C9F35C7, 0x406FCD15, 0x8D4C10A4, 0x1C9B24D7, 0xC12A42AD, 0xE343A444, 0xEA600C96,
+0x177DCD59, 0xE1527695, 0x233D5117, 0x68F768AE, 0x7B456AF7, 0x47B31F10, 0x76D89C56, 0x4522C538,
+0x2755668D, 0xDCCCE4D2, 0x5C93A3DA, 0xFAD7B27E, 0x777F6396, 0x893851D8, 0x32C92587, 0x47CB78C4,
+0xA8BCC73E, 0xB6B0C7AF, 0x5CAB31A2, 0xAA4A00D0, 0x40A56C0D, 0x4B8DBE55, 0x6A3BE00C, 0x7BD04AFE,
+0x95F4007B, 0x6F9E4C5C, 0x637DC4F2, 0x9A4949FC, 0x7661C65D, 0xBD6CDD9F, 0xC3F10F05, 0x9E8412CF,
+0x23349802, 0xE132E9B3, 0xFA403312, 0x6DB74F8E, 0x0AB4DC40, 0x15303772, 0xB67DB431, 0x28017839,
+0xEB9642AA, 0x4B7AA5B3, 0xC6BDADDE, 0x4D1DEB5A, 0x5A1EA112, 0x31009518, 0x1D5FA375, 0x44CBA8FA,
+0xAE30ACAB, 0xA6007CD5, 0x6432EEC8, 0xD11943B5, 0xBE64FAB7, 0x8F984D2A, 0xBA3D2989, 0x7983F60C,
+0xD1119340, 0x4B2E2DB7, 0x806EE2C4, 0x87E56FBD, 0xD4ED52AA, 0x1C298DB4, 0xC4161DAE, 0x185E1F08,
+0x71FAFB5A, 0x119C8051, 0x43AAE8B0, 0xA87FE225, 0xF5AD458A, 0xAD8EAEF0, 0xE75BC00A, 0xC4E904B0,
+0xB2B46367, 0x416934B0, 0xB7B86239, 0x545DF03A, 0x1B407FDA, 0x07049FD4, 0xCB0062E0, 0x85D2910A,
+0xA74A7FE3, 0xCFD1ADA2, 0xFB45DC9A, 0x2700E94B, 0x3B775F08, 0x7544D913, 0x9B72B1BA, 0x6C7A3986,
+0x25878BBB, 0xB9C2F5D9, 0xBF6769C1, 0xE27AFDE2, 0xC78933CD, 0x918C55FF, 0xA0FBD842, 0x830736EA,
+0x6F2D7DD7, 0x34666519, 0x114A4A74, 0x78560843, 0x5BBE8BAF, 0xEF05E6CE, 0xC3F4F485, 0x429888E7,
+0x84FDEB08, 0xD3BDF2FE, 0x6FCE9637, 0x9F97C94C, 0x3C30336F, 0xCBE6032E, 0xEE471FB7, 0x98ADB44B,
+0xE5DE2EF7, 0x47CC5448, 0x7052E307, 0xB2B3F5A3, 0x6E2BC151, 0xE512DB01, 0xB0EB7A3F, 0xBC036A9F,
+0xBF57B23E, 0xFC7089D6, 0xD07B5CBB, 0xA436EAD4, 0xF879382E, 0xC1795E88, 0xA1FAD360, 0xF571DB90,
+0x4B8340D9, 0x7E1C7D58, 0x233E3E9A, 0xD7C58AD7, 0xBABCC065, 0xF15CE488, 0xE2A42B3D, 0xEAB31D01,
+0xFD6C1323, 0xEE187DA2, 0xC0001E6F, 0xE5EAFDB3, 0x1A5CFBDC, 0x4DF22D84, 0xACC713C7, 0x678188D4,
+0x6D593AD5, 0x819061C2, 0xCBB04F4E, 0x36D3A918, 0x799FD615, 0x4F02B5B1, 0xBA224735, 0x368AC9FD,
+0xCC38C1F9, 0x4BF90922, 0xEBA3F0A9, 0xEABC82C9, 0x2876339E, 0x92F172C3, 0x6FEC6829, 0x9067448E,
+0x7657776D, 0x36EA04C4, 0xCD25084B, 0x25382EE6, 0x28D94AD2, 0x2E279B37, 0x7177DD44, 0x4C8B0EE2,
+0x1D64FCC4, 0x0615D6D8, 0x2F25DABD, 0x21A2FFB2, 0xBFAA523F, 0x08F9E5AF, 0x9A6274B0, 0x0DC390DA,
+0xF52BDC57, 0x327011E1, 0x32489F64, 0x37CC8E69, 0xECCED4ED, 0xBD9D677D, 0x86D95D44, 0x7584DF1C,
+0x673ACE44, 0x635E5B65, 0x88674126, 0xE0C03C60, 0x278747E8, 0x004268AB, 0x94FD9843, 0x972A1F1C,
+0x6F59C286, 0xED3A2706, 0x126A8A19, 0xA3255E47, 0x1331C798, 0x5500EFAB, 0x707006CD, 0xFB57357E,
+0x6549412C, 0xE9635596, 0x42D0D0E5, 0xE8A40F4B, 0x71640FDE, 0x58DBBEA3, 0x3B41CEDC, 0x3E66125E,
+0x5ABF464C, 0x8CE04338, 0xC3890112, 0xBACFA407, 0x5FF1D8E0, 0xB1457C65, 0x153DAE92, 0x21545B3E,
+0xD57B5CC4, 0x8DE0F77B, 0x056942EB, 0x59AB3DDA, 0x99D0CAFC, 0x54FA9D02, 0x60AFD1EF, 0x39257D10,
+0x209853C5, 0xF79DD4FF, 0x8CCDF2A1, 0x440AA344, 0x921328D6, 0x49C427BC, 0xB2F63E94, 0xE627B442,
+0x1DB6F74B, 0xB75A6BB8, 0x20E074EB, 0x64BF8BF0, 0x987C7373, 0x69076B1A, 0x8EBCA5AF, 0xFA471DBA,
+0xE5DC65E2, 0x2D677089, 0xCE975D99, 0x8590338E, 0x6D93A091, 0x6F8D0FFC, 0xF53FE0B3, 0x6D7D3C3B,
+0xDEA0F3B9, 0xA9A45959, 0xF3374DB1, 0x6054753E, 0x476420CC, 0xCBBA1475, 0x1BD09A13, 0x9FD3E12D,
+0xBBB1FA54, 0x741335B1, 0xE90C3045, 0x4D2E7F8B, 0xA5C4CC57, 0xF18AACED, 0x222C6205, 0xB1D55DDF,
+0xEA58F315, 0xF6915B6E, 0x61E225EF, 0x8B242DEF, 0x003E8C29, 0xC76FA5D8, 0x2026F690, 0xD587EA62,
+0xBB668AB0, 0xA203154A, 0xA6130CDC, 0xF591DF62, 0xB6C8A22A, 0x7E28F4B1, 0x249DD867, 0x61A08DCC,
+0x23F1013A, 0x220B5233, 0x8FB908AA, 0x5855698F, 0xE89578DA, 0x37E8600A, 0xFD1291BB, 0x3B244830,
+0x3F61E2A8, 0x6303CF00, 0xB45A21C3, 0x2E7BAFD8, 0xB9864E6D, 0xEF68C771, 0x31648A14, 0x4DF255A2,
+0x18E48360, 0xF3A4C605, 0xE39F9584, 0x6FEBC1F0, 0xA8C7870D, 0x11C843CA, 0xF184907C, 0xD6255160,
+0x6A8AE8F1, 0x5E7D4B9F, 0xFD51CF34, 0x9F668CB8, 0x43799251, 0x8DABAEBD, 0xFC0BDC57, 0xACDDA7FC,
+0xF243CE6C, 0x7A774259, 0x1728D301, 0x85781D07, 0x13DA17BA, 0x44B080A7, 0x681672FB, 0x24B9F6F5,
+0x45574E3C, 0x97704EA0, 0xFBE708E4, 0x9EE23C6B, 0x6F88BFB0, 0x4EE7F37A, 0xF6142280, 0xBFE3FE80,
+0xBA9DF3BC, 0x4AE94934, 0x62B9E60A, 0x5B317D44, 0x0BF1E147, 0x8934EB74, 0x96FCDD12, 0xEE85E889,
+0x523A349A, 0xD049ACE0, 0x2CF5071F, 0x7D8AE2EF, 0x449FB18C, 0x0020AE32, 0xF6362A99, 0xD0093341,
+0xF680F985, 0x13F76CC6, 0xB2FA6B78, 0x1B598DC7, 0x51BB90D0, 0x0843BBEF, 0xF6E9B564, 0x73B98CB4,
+0x8F917CF6, 0xE4564837, 0x724F4EC4, 0xE035D70A, 0xD7712E0E, 0x767A1246, 0x712FBF25, 0x706E917C,
+0xE5F276F5, 0x76987608, 0x6E671CAD, 0xF3D760F9, 0x6F7036C2, 0x85BF42B2, 0x051330EF, 0xE0210250,
+0xB0818632, 0xABF03CC6, 0x7906EF3F, 0xD94D6415, 0x31F0E3D7, 0x9C0F4DA5, 0x9B925AD7, 0x2F50CE6F,
+0x75342069, 0xEC1169F9, 0x089D57B5, 0x3A3DD8A9, 0x3B5FB744, 0x7B2F3525, 0x505C8C58, 0x3196A643,
+0x0686F3A5, 0xA8822E85, 0x81EAFE01, 0x92976B93, 0xD4D58B23, 0x9471F40A, 0xDD577A68, 0xE9AC4F5E,
+0x17C14A09, 0xC6FF7C5E, 0x7DB5F3C9, 0xFAF1347E, 0x2E562332, 0x3C085DD0, 0x7DD5327E, 0x4387CB02,
+0xCD4BA740, 0x9F90FB3F, 0x1B5834FD, 0x5FAEC309, 0xD794FC8D, 0x9076F648, 0xC890D337, 0x78574135,
+0x7E34EB95, 0xC76DC2EF, 0xB858DC96, 0xD110CC8C, 0x93B6FCF0, 0xD838CC4B, 0xD44C1129, 0xAE461167,
+0xA509B326, 0x8A6C953F, 0xA64894E3, 0x886B8564, 0x3196C1E5, 0x924BB8EE, 0x7C81288F, 0x0F14600D,
+0xE6315BD0, 0xC43D0216, 0xEC363E47, 0xE2C713D9, 0xF7F17D63, 0x4F3E0232, 0xBBBB7CD0, 0x69C9457C,
+0x6C7945E4, 0x96EA9AA2, 0x9CEF60D3, 0xFAB37B24, 0xE503D392, 0x046C965A, 0xC70B1ADC, 0xA88A5EE5,
+0x1FFC0BC2, 0x53B11C1B, 0x418B763B, 0x8673D204, 0x8AB2977F, 0xF2BEF55E, 0x9F8FC6F4, 0x4E94BBAA,
+0xEDF5C978, 0x3F2802F9, 0x800CB1ED, 0xA77180DC, 0x5A8E6FA8, 0xDFB46FDB, 0x86796C14, 0x5A153256,
+0x4BB46261, 0x02EC9F11, 0xC8ECBE7A, 0x7780F3A9, 0x9519680F, 0xD6E00585, 0xBBEB6F3D, 0x782D61EC,
+0x0FC7BA38, 0x6804A0D1, 0xB8BBF3C7, 0xA7AC151C, 0x47473583, 0x4774D1A7, 0x9CB611ED, 0x5712AF26,
+0xBDF931B0, 0x0091FB98, 0xDD0CBA57, 0x38568028, 0x143D1CD7, 0x4F58297F, 0x8925F58F, 0x0B07903B,
+0xE8B87E91, 0xE1C9DAB5, 0xD25BF034, 0xCB1B11B5, 0xE18F20CE, 0x4212CAB6, 0x2BF74577, 0x5B323C02,
+0x270B71A0, 0x506113B2, 0x9CF8F980, 0x73F832B4, 0x99287A13, 0x046E2836, 0x996B37B3, 0xB05E1167,
+0x5C112F25, 0x418E58E7, 0xBB74F97D, 0xD053958B, 0x6296EA7E, 0x35F6284C, 0xB3349BDF, 0xD68CDF0E,
+0xCF7A75DD, 0xF8175B55, 0x7D046245, 0xBD5CE425, 0x65E0A0F1, 0xA1A9E82B, 0xCD35E626, 0x22888D96,
+0x2816F50F, 0x30D6CBC6, 0xC65EDA02, 0x5A6EEFC5, 0x71DF5291, 0xCC56EE61, 0x1DACED8D, 0x966CFB66,
+0x253882B3, 0x6D9904AD, 0x775765B2, 0x23A5AA9B, 0xD1C945AB, 0x5200E563, 0x7B8AC3E6, 0xAAF3BEF0,
+0x1B1F8ACB, 0x37EF199E, 0xC61C9AE3, 0xAAC1A09B, 0xFF14A83D, 0x9F2DBB18, 0xF0B8E3E9, 0xD6966476,
+0x2E96C0B8, 0x017571EE, 0xCD1C836D, 0x0571C25F, 0x3C7D4E21, 0xDAA43CB7, 0x9D18274D, 0x20D4E22C,
+0xAD9B34C9, 0x26473FA4, 0x785D6256, 0x356CBFB3, 0x22BCA120, 0xACDE8C6D, 0x778F71AA, 0xD1F21449,
+0x050576C4, 0xF6B143EA, 0x3DFAD73A, 0x2A48C190, 0x4887D726, 0x5F93AA40, 0x717840E9, 0xCD762D95,
+0xB0EBFDB9, 0x46D4B509, 0xC03773B3, 0x028BE227, 0x3D35D437, 0x30B66B4C, 0x8DD2CB40, 0x35574D81,
+0xFDBD8E17, 0x64E35F5E, 0x7C0595C5, 0x9D8BCBBB, 0x794C0CCA, 0x8C584042, 0xC36D8783, 0xE76AB46E,
+0x69F023FD, 0x62837551, 0x5E324F24, 0xF9FB9050, 0x5F7505F2, 0xAF05470D, 0xCE72ED74, 0xD7A63879,
+0xEA02B1CC, 0xF2D55326, 0x3AD7EB30, 0xB7B52D35, 0x34D07C50, 0x34AF00A1, 0x0C498029, 0xE929BCFF,
+0x6958377C, 0xC192E954, 0x8D004AA8, 0x1E6B198F, 0x5868FEEE, 0xE31788EA, 0x9AFFDF6F, 0xE3354A0B,
+0xADD5B970, 0x012B2710, 0x71615EB4, 0x1C296631, 0x88705EB3, 0xDD4223E1, 0xC0E54DF5, 0xA1AC68C0,
+0x873AF178, 0x16BE3E56, 0xAAA7E917, 0x7035CAD7, 0xC2274000, 0xA41B5E09, 0xDD757966, 0x549EBCC2,
+0xE71FCE90, 0xE3555BDD, 0x82FF0174, 0x16FF3531, 0xCFC8E231, 0x12BD3387, 0x7BE376BC, 0xC96B8F85,
+0x2CE2DB16, 0x60E7BEE1, 0xD944BA54, 0x7E875E7F, 0xAA417677, 0x90CDA7D6, 0x9AE91EB4, 0x3CE6CE35,
+0x08ADF0F8, 0xA17582A1, 0x3D4D3A74, 0x6D849E35, 0x631169AF, 0xBDE1F7DF, 0x8FEFD71C, 0xE54D0133,
+0x5941DA0E, 0x72050E20, 0x2113D990, 0xFF0C25C9, 0x5F009BC0, 0xAD3D9029, 0xB4796847, 0x35CCBBB6,
+0x642B9B1C, 0xAB6E06B6, 0x2DC305CE, 0x0D8A7765, 0x9A77A0CC, 0xC0056FE0, 0x240B33C7, 0x5F94B3DD,
+0xF28F570A, 0x4DBC43BE, 0xD966CF57, 0x1DBA9BDA, 0xB5314C7B, 0x703BCCBC, 0xA374DB82, 0xEEDC5E21,
+0x810272AE, 0xFA52E231, 0x90954ECD, 0x62C89272, 0x67488724, 0x04B83B81, 0xC0FEE5EF, 0xD571FE8B,
+0xE8E89FDD, 0xF3884CF5, 0x97DFDCCB, 0xE856F5F7, 0xEF5062BC, 0xEE7BE697, 0x8DAF3F88, 0x7C51CD15,
+0xAD21FE14, 0x904BC689, 0xB3E57069, 0x02998236, 0x7E8515E8, 0x21E6F0A2, 0x585699C3, 0x6E6ADA19,
+0xBFB70CEA, 0x44C3E622, 0xA22B6388, 0x44997C58, 0xF7B0A01C, 0x34A84825, 0xAFFFBB8E, 0x61C819F1,
+0x7E1E4764, 0x11B5A6E9, 0xE3A938FA, 0x615F795C, 0xD86744F8, 0x9227E402, 0x28AE650A, 0x0FD4FDDC,
+0xEA5BE174, 0xBA19E682, 0xEDADF415, 0x0DF195FD, 0x6F57618A, 0x3529AA0E, 0xD582324E, 0x241FAEE1,
+0x945F7B5A, 0xC3C3ED7A, 0x148BD166, 0x25F7153C, 0x7FAF78F1, 0xF3A9F813, 0xD8509A1F, 0x5C3C99B5,
+0xF40DC861, 0x86D324FA, 0xB1F80B50, 0x15F21870, 0xBFE1F510, 0x18A30EF2, 0x7ADA192A, 0x3D29E855,
+0x7A69A04A, 0xC99080A2, 0xF42D58A3, 0x4A3EFE73, 0x27358B49, 0x15BEFA2E, 0xE59BAFA1, 0x650D6EB9,
+0x78281501, 0x28CFBC14, 0x6A457538, 0x115C22A6, 0x6EF1D5EB, 0xE8391ECB, 0xAFD438F0, 0xF79F26F1,
+0xEDCAF830, 0xCB34BCF8, 0xDF99EC9A, 0x305F5F16, 0x818068A0, 0xC57E6448, 0xE87F5F9E, 0xE4F138C6,
+0xA3CA7E5D, 0xA1E1199E, 0x5083B2DA, 0x4CC4F662, 0x94FD032D, 0xA63399DB, 0x85C6988E, 0x458C180E,
+0x760755EA, 0x2E05B624, 0xF3E37127, 0x09AE6E08, 0xF2BB4CF3, 0x8148ABCD, 0x699E2FE0, 0xEC923F2F,
+0x6880E94F, 0x540E1704, 0xBD2F30E5, 0xDA6BEF42, 0xF05705B0, 0x966B63A7, 0xBF7C9651, 0xBD83D2E7,
+0xE76A868D, 0x5FE0E74E, 0xD65EA061, 0x29AEFCEA, 0x56C2F024, 0x94FD6B7F, 0x9CAFA27D, 0xFF8DE76B,
+0xEF59FEBD, 0xECECF3B3, 0x1A8413BE, 0x1DDC3E06, 0xB4FAA732, 0xA71917FE, 0x7B1B3AF8, 0x67A3997D,
+0x8A2F1A99, 0x4343320F, 0x9EF075E2, 0xB1843B63, 0xD15005ED, 0x2859BFC8, 0x0D431370, 0x6D4A91BB,
+0xA03A1695, 0x3379A765, 0x923D32C3, 0x2D8607B4, 0x7671FCB9, 0xD5DC3F9E, 0x401D3AE6, 0xA67AC571,
+0xC4D6325F, 0xAEDB0B6D, 0x77C297BF, 0x9C841CE5, 0xCF37F3AF, 0xFE9ACF8A, 0xF7C7F21D, 0xC9BB7AF0,
+0xD37BE172, 0x467BBC88, 0x7FD4EAB1, 0xCAE6BCD9, 0x4CAC65C2, 0x010CACF8, 0x769BA878, 0x8B1D6720,
+0x0C922DB8, 0x0D52E03D, 0x7581C701, 0xBB95CFAE, 0xA8095E4A, 0xDB5A2E9C, 0x0ABA5D96, 0x7D271430,
+0x2C589A43, 0x81BA0736, 0xD97D242C, 0xC00D58CD, 0x73DB45FD, 0x7F2A6415, 0xDBE02C1B, 0xDD628420,
+0x5E3DCA24, 0x4F0E911B, 0x64D67ACA, 0xEAE5D641, 0xA607E4B4, 0x3C89BBBD, 0xE993B08C, 0x1ACF602E,
+0x71CA367E, 0xC38485D5, 0x96970E2C, 0x4EFC2060, 0xAA1013B8, 0x0567C61A, 0x509D9347, 0x1190DAFE,
+0xD80FE16E, 0x5111FE4B, 0x72C384E0, 0x445E0736, 0x53E7E3C3, 0x89E54E49, 0xB76CD9A3, 0xD55A5EC2,
+0x8F5F7A1C, 0x3B6E6A83, 0x03016E7E, 0xDAE8B551, 0xD040E492, 0xEBA39CA3, 0x8ED01CA1, 0x0D6C86CE,
+0x226E1428, 0x34435A0E, 0x3961460B, 0xCD213D84, 0x73B251B3, 0xCFD263D1, 0x060E320B, 0x24E32E20,
+0x02E4CDDF, 0x2F7B91C9, 0xB49E97A8, 0xE651443B, 0xBDDA9F2F, 0x9E069F39, 0xDF09DA1A, 0x681CF7B3,
+0x1CB9B91E, 0xB37859BA, 0xF479AB1B, 0x26C7CB3C, 0xCC497EB7, 0xDC877987, 0x15F397E3, 0x009C492A,
+0xBAA958D2, 0xF3D719E7, 0xFACBA665, 0x604CA805, 0x9B34F5C5, 0x2A9508A2, 0x6F133639, 0x861ABF45,
+0x9AD343F9, 0x719D547E, 0x9E1BBA24, 0x88CDE86D, 0xA13F9EDC, 0xF749DD1E, 0x8536EB74, 0x7E63EABB,
+0x9B258E84, 0x9F13D4F9, 0xCF838E2D, 0xC2AB8DB7, 0x64EDFF2D, 0x76149827, 0x9B888FFE, 0x02E21F5E,
+0x960BF381, 0xFC54A664, 0x71E3BA1B, 0xD7AE46EA, 0xF5E709C9, 0xF98821E7, 0x415D1A02, 0xA30E31DB,
+0xFFF7CF28, 0xD402EC32, 0xE19577A5, 0xD4A293A9, 0xC8DFE113, 0x6883DC5B, 0x366AE8B0, 0x41131116,
+0xB43AA782, 0x3A9530EC, 0xACFC3485, 0x528436C6, 0xA105434C, 0x8FE6A5BC, 0x65B64EA9, 0x346A3E56,
+0x9C925903, 0x90497D3C, 0x2A6F02AF, 0x8A1FA2AE, 0x42B75CB0, 0xE3E49F3E, 0x9007BA29, 0x8934BC82,
+0x22D7D036, 0x26997BC1, 0x4CDAA4B5, 0xE5355357, 0x8BE2969C, 0xAEC40262, 0x6ADE5122, 0xEDC496FA,
+0xB60AE5A5, 0xBF270D8F, 0x6A625877, 0xC0C1704D, 0x377D9A3D, 0xA04B9B2D, 0xA79A1E71, 0x8549C527,
+0xFF5290EC, 0x7B16677B, 0x75CD802F, 0xF4BE5FE9, 0x2A1AB881, 0x5E80DD22, 0x3CC53A05, 0x782BCC45,
+0xB5C5FC8C, 0x1DDD9806, 0xA034417E, 0x23C1CFD5, 0x98F55B89, 0xF1341C33, 0x9A386F24, 0xC9020627,
+0xF7C759CA, 0xCB825746, 0x568E69E4, 0x3B5711B3, 0x862A14C1, 0xEC7CDBD0, 0x0E69F58C, 0xC5783228,
+0x722858A4, 0xC08A1554, 0x1B7F712C, 0xD48139E8, 0xEC99259E, 0x0B911A64, 0x09B4918A, 0x42592957,
+0xFE51427D, 0x0297B068, 0xEE3EA10B, 0xADDF6994, 0xE4D06495, 0x9BE49B36, 0x5B76DDF3, 0xFA2BB197,
+0x8B642A0A, 0xC702D5BF, 0xAC1A3437, 0x2AAD3863, 0xEAD5B067, 0xB4B3B764, 0xCDAD8B0E, 0x16F60D26,
+0xC63A950F, 0x0C9E174C, 0x91ED0410, 0xA20E04F6, 0xAD778C3E, 0xF6C68B3D, 0x6F6C2778, 0x3CB61795,
+0x3806A177, 0x5D0F87C6, 0xB13CEBB2, 0x576C80AA, 0xE4C71E11, 0x876DA008, 0x66E6E5D2, 0xFFA30CCE,
+0x1DDFCADF, 0x9D8A38CB, 0xC9B95116, 0xAB1BC2D7, 0xA947EC2A, 0xB2908086, 0xF96C5481, 0x1838C0E9,
+0xDEC390EF, 0x7B92FF67, 0x371AE664, 0x61419B39, 0x7B7BE00F, 0xDD1BCE5E, 0xF02BAB0B, 0x76E325FC,
+0xED984D29, 0x68133B8D, 0xEF8B363C, 0xDABFE8E0, 0xC9765B4E, 0xA22FA9AB, 0xE2B25858, 0xF36D0474,
+0xFBD4334B, 0x37C4A154, 0x33B4B441, 0xDD750379, 0x18008253, 0xE544BBA5, 0xB396A43D, 0x52C4072E,
+0xF2215A05, 0xCA569911, 0x9EADDA26, 0x3D040817, 0xB688244B, 0x4C64FCFC, 0x1979BEE0, 0x6AB0C973,
+0x4602969B, 0x4B94CC16, 0x7BFED0B3, 0x203C3D9E, 0xE2EB672F, 0xC290D4E4, 0x59D27622, 0xBB39F784,
+0xE8EA2AD7, 0x6F70F28A, 0x958F38FA, 0x47A88BF1, 0xCC6ED794, 0xE3709C1C, 0xBB2EA7B8, 0xF9A3C1A0,
+0x814AB7EA, 0x7CFEFAB8, 0xB46ECE1D, 0x1F1A79C6, 0xC824A0BE, 0xC4FB075C, 0x3636CDFD, 0x8795C0CE,
+0x429DE9D9, 0xBA2C05EA, 0x384C7253, 0xD0BCE753, 0xDDE65C49, 0x81968A1F, 0xB88BCEDD, 0x34B86FDF,
+0x21403DA9, 0x1C1E7402, 0x0A61067E, 0x1A30E937, 0xD33BDB88, 0xD97A3F59, 0x49F18E1E, 0xDB7D2E8D,
+0xE459DF56, 0x37DA9F03, 0x572DF6C2, 0xE26E0D99, 0x16448565, 0x06EA1CEE, 0xC135798B, 0x3B13C90A,
+0x70863761, 0xF781CFAC, 0xE0BC46CB, 0x0352234B, 0xB858B105, 0xA438766C, 0x1CC2F5EF, 0x81185F85,
+0x2E53C11B, 0xC38F7C56, 0x17C1F28E, 0x1FC5072F, 0xF91CAC8F, 0xD8EDA611, 0x7F0AF366, 0x2AA1F458,
+0xED8863EB, 0x8E95C07C, 0x1898F8C6, 0xABDF7D1D, 0xEB579D78, 0x74D6802F, 0xAEE7833C, 0x5E683009,
+0x1FD2F69C, 0x0C8161B1, 0xDDB4E15E, 0xB98E5CA3, 0x537EBFAA, 0x48223200, 0x56075E47, 0x6960F98C,
+0xCA59D9AA, 0xE605A07C, 0x8BF00714, 0x34CA45B9, 0xC8362B8A, 0xD0AB4610, 0x25CF7C7E, 0xA82DA76A,
+0x571F0E94, 0x4EF08314, 0x6B9296B4, 0xC73DE6B8, 0x62A83C70, 0xB99DED3E, 0x357315B5, 0x5AD093AE,
+0xA21198B7, 0x58E05CAA, 0x9468247F, 0xB145BEB8, 0x2A05AF96, 0x22CCDB77, 0x183ADD50, 0x26CCD4B9,
+0x63BC561C, 0x474FEC3A, 0x42B5F587, 0xCBCF035F, 0x85D3FE8C, 0xADB501E6, 0x9056EA0C, 0x7F8DE118,
+0xF6E16389, 0x4F9AF8A9, 0x3ACBDF1C, 0x0ACED23B, 0x04A36F65, 0xE34370C0, 0x016AAC71, 0xDAC6C13F,
+0xA4E044EF, 0xDA2ACE2F, 0xDE266288, 0xF2E23035, 0x3A60AA27, 0x9505870E, 0x2ACCD170, 0xFB0BDA69,
+0x8BE886E6, 0x298DDF49, 0xC268CA7C, 0x3946C0BF, 0x17F4A822, 0xE13A428E, 0x39E3AC70, 0xD57EE475,
+0x89FAACFD, 0x568E54FF, 0x976DEE30, 0x2EC36762, 0xFED7A2BD, 0x5B6A9F82, 0x9D0FB240, 0x2F0C7F57,
+0xAC77C2BF, 0xBB457732, 0x552733F4, 0x34034967, 0x109C46F7, 0xAF1FE901, 0x9FEFBF89, 0xA4868DA4,
+0x053AA536, 0x235C8FDF, 0x913AEAC6, 0xDCBB6766, 0x59D5834B, 0x9B62A06F, 0x7F097360, 0xDD0B34F4,
+0x3D2A2984, 0xE3CC9441, 0x6D13AA81, 0x667D3613, 0xBF63CB62, 0xBD11E089, 0x8DCCC3BC, 0x50117695,
+0xAAD054CF, 0x243BCB9A, 0xB980F89D, 0x9F304DC6, 0x2BD53E91, 0x7DA37984, 0xD6E163C6, 0x3101CD85,
+0x772186B8, 0xC1F04FB2, 0x8EF737DD, 0x767CF252, 0x3A762AEA, 0xAAD79488, 0x2E18DFE1, 0xE3D7CA9C,
+0x38A292DB, 0x8ECF92EF, 0x0235EBC7, 0xCBE33E2A, 0x52517BAA, 0xD26F6319, 0xB74D8051, 0x2AB2A551,
+0xA2238C2B, 0xCE263C40, 0x06712042, 0x877AA5CD, 0x3DEF8FF0, 0x411615F1, 0x0A3662EA, 0xBE2B7330,
+0x8C950D81, 0x97D1A540, 0xFA74C344, 0xCD5B4343, 0x79B84A92, 0xC0CE24B6, 0x9FBD8BD2, 0xDDBB845F,
+0xEEDE3C67, 0xB6CD5C97, 0x33E96BBF, 0x3ECA93A0, 0x96A36CA1, 0xCB8CC896, 0x4AEC6EDA, 0x0B4DB12D,
+0x294F51FC, 0xA260439B, 0xDBC8E820, 0xCB26C698, 0x6F4ACAA7, 0x66CD3BF9, 0xC123F2CB, 0xACFC5037,
+0x2718B421, 0xC6F2A602, 0xF372D9E9, 0x2E182C51, 0x8B6F5126, 0x7E7039A4, 0x67CE3260, 0x0AEA7820,
+0x4028FD87, 0xBFA2FF8E, 0x7DC198AB, 0x519F5C93, 0x21E6C05D, 0x81591AA1, 0x717EA48F, 0x94BE29BA,
+0x0A9CA532, 0xBDDDC5DC, 0xEE604F31, 0x15E01F4B, 0x062D9728, 0x69B57D7A, 0xA1B204F4, 0x7CC74CA2,
+0x305B02F8, 0xFA5E169D, 0xA6EBBB98, 0xC21F3AB9, 0xB351C52E, 0x6D017DDB, 0xC474A315, 0x7CE71DE5,
+0x23DBC9FE, 0x32759C49, 0x8D5E1F6E, 0x7281E5BF, 0x9C261F99, 0xA03007AC, 0x8AA10F99, 0x25C777C4,
+0x0FC839FB, 0x4BCFDE13, 0xA5138848, 0x090F2F96, 0x2BFBB9E1, 0x85A62895, 0xC6B9EE2E, 0x39D33147,
+0xF003C35D, 0x76D86580, 0x433395E5, 0xAEFBCDFE, 0x29D8B056, 0xD90E3802, 0x6EF44449, 0x02BC49F8,
+0x7CFEB4DE, 0xC731E298, 0xB05E72E1, 0x9396AE34, 0xD70AA5B1, 0xCD584C1E, 0x1D589FC3, 0x42E872C2,
+0xBE3ED889, 0x83E9C6B1, 0x32697958, 0xBD24FA46, 0x1BC6BE13, 0xC4C98042, 0x92AFA9F0, 0xE1C490E1,
+0xF2D690BC, 0xBFF7A0E5, 0xFBC15E6A, 0xADAE6D9E, 0x63203084, 0x5127A143, 0xA3C8A943, 0xF0D06DF8,
+0xB9FF985B, 0x3DEDB832, 0x6921B7DB, 0xF777C635, 0xB9DC9ACF, 0x287E78D5, 0x0646E1B5, 0xAE3D73E7,
+0x01C08B8E, 0xA9789768, 0xFFC0CBC8, 0xA4D268B6, 0xD255B51A, 0x0539B484, 0x8A3AC683, 0xF3C7E7EB,
+0x9224D3FB, 0x8BB60DA8, 0xC192F9A1, 0x392FDE6D, 0x586A5860, 0x6CC69234, 0xE483CA64, 0x66ECEF6D,
+0x8602D0F6, 0xB9834E4A, 0x26C0E504, 0x6C7C2F94, 0xF74087E5, 0xF105814F, 0x9D489444, 0x2341ABE4,
+0x7C3E5764, 0x410D8F53, 0xC3866E74, 0xEAA88AF4, 0x91084CB0, 0x8D9895A2, 0xB6ACD52E, 0x2A0D6C4A,
+0x8EFE3E0A, 0x5F167FB8, 0xEE227E28, 0x564A32B8, 0xFECD7FD2, 0x856BEBB1, 0x3CD531D7, 0xA1114E9F,
+0x39981CD6, 0xC3D35198, 0x7D91D110, 0xBF6A6BB1, 0x90A47EEA, 0x0E0D3A73, 0x06E4614F, 0x74B4E05E,
+0xB8A5B1BB, 0xCCFE6219, 0x097CA90B, 0x89E50BA7, 0x4D56E27D, 0xDB0F2416, 0x085CDE45, 0x664F8F96,
+0xE41888E5, 0x3C675F52, 0x6585872D, 0x76419C5E, 0x72DB5736, 0x25B55B8F, 0x598077BD, 0x18120A48,
+0xDA8B3A87, 0x24861DD0, 0x4707E74D, 0xE2C58B31, 0xB4957709, 0x8B2A4CD0, 0x96484F42, 0x2E5250AB,
+0x1CF1063D, 0x51D278B1, 0x8BB984F1, 0xD1B3110E, 0x8B0692CC, 0xC0D8F656, 0xCDF9804E, 0x32812E8B,
+0x46672545, 0x63968947, 0xFA744357, 0x170DAB22, 0xC2E5D3C2, 0x54A41DEC, 0xFCED2ED2, 0x87AB05EA,
+0xB3599565, 0x54600149, 0x8D3405DF, 0x8C8531B9, 0x6E4F4805, 0x963CF8E6, 0x007BC2E5, 0x5DB2F691,
+0x11077699, 0x2DD25E48, 0x4B9F9816, 0x103C0363, 0xEA2F027D, 0x8730614F, 0x3BDABF3B, 0x994DDB9D,
+0x22160C43, 0xA6FACE88, 0x20D657E4, 0x50A0527B, 0x9E9D622E, 0x137535BE, 0xFE266B8E, 0xE58EFFBF,
+0x4710E79A, 0xA5D97C78, 0xB53FBE49, 0x21E4085D, 0x415A193A, 0x8AD31544, 0x5766E5B6, 0xC471FD7B,
+0xE5D0BAC5, 0xC02652EB, 0xC285542A, 0x99EC9B6A, 0x355D9045, 0xFEBF5BB3, 0xE5956A3C, 0x1821FAD4,
+0xB929B388, 0x3BC7952C, 0xE01328CD, 0x9CBB878A, 0x81C8D181, 0xD6C96DEB, 0x43D68531, 0x8281E434,
+0x8E0DCFAC, 0x382F9300, 0xE26D2D87, 0xF2298B86, 0xEEC54103, 0x19645DB5, 0xFC6AB172, 0x9582726B,
+0x1DD39449, 0xE8271885, 0x7B7C0053, 0x744FEC39, 0x8FD42F9F, 0x73487615, 0x65085D69, 0xC3F45DCF,
+0x623D10E1, 0x6C015821, 0xF411941F, 0x4CA2A785, 0x99853699, 0x4DDA0FEE, 0xA7B7E542, 0xAC4C9D3D,
+0x6423D9B5, 0x8E785DA1, 0xA4BFB4DC, 0xB6B253B0, 0xC62C8A43, 0x21976444, 0x5D3658F9, 0x3BD0BE15,
+0x42B947D0, 0x1D709753, 0x562A2A08, 0xDC6F192F, 0xF36612FF, 0xA29403DA, 0x4828C58B, 0x0BED552D,
+0x69C742AA, 0xE0A11A9A, 0x744E0691, 0x486355CF, 0x89B610C2, 0x40790382, 0x294653DA, 0x9AE4876E,
+0xC2D9D475, 0x751F6A92, 0x059028B4, 0x8A37BE16, 0xA4A3F53E, 0xA04123AF, 0xA8303537, 0xDC75F3ED,
+0x622F33CF, 0xB6BCE0DA, 0x3006A304, 0x81E99954, 0x93E6A2CF, 0x091FCBD4, 0x801FC666, 0x407FE9F6,
+0x695A262A, 0x388537C8, 0xAEE6F2B1, 0x4B22BF94, 0xF35F7DA6, 0x4C8424F4, 0xCB4F67DD, 0xBCD85CFD,
+0x3DF87CDD, 0x8FB5246D, 0x53C7895B, 0x7803C558, 0xE5EB9688, 0xB0B4A6AB, 0xF12EDBED, 0x165EC205,
+0xC65EC685, 0xECD677B9, 0xBD5B1AD7, 0xDD1BF355, 0xA90745BA, 0xCACF4E34, 0x6FB34046, 0xDD3B420B,
+0x3514BF2B, 0xAFF0423D, 0x77351964, 0x3D789691, 0xDC8AFA38, 0x84FAEF05, 0x139EA81F, 0xACFC483A,
+0x5596D279, 0x64991A70, 0xA8587360, 0x4BC6D1AC, 0x0E90B282, 0xDC5F6583, 0x395C213A, 0x435057A6,
+0xE44A6679, 0x95BBEDF2, 0x1002A4D4, 0x2D58ED1D, 0xC5C7A5C3, 0x0CD0CB33, 0x55B35A37, 0x2D125EFE,
+0x69BCBD55, 0xF076D596, 0xA68D2E54, 0x1C4BB716, 0xC93EE3C7, 0x10E4071F, 0xD53C52AD, 0x6F1C0245,
+0xE06DF271, 0xE17B09F9, 0x3AFE5809, 0x95884653, 0x4AE40768, 0x8FA052BC, 0xD9DAE49F, 0xE0A885A1,
+0x4A8863E1, 0xAED3608E, 0xD952EBC3, 0x49653686, 0x7C3542D8, 0x560CD521, 0xB0503905, 0x31604928,
+0x3B355D87, 0x5243CA51, 0x0611A190, 0x64E71D72, 0x325B52C7, 0x4A9230B5, 0x2E3CD9B4, 0xF6BD6265,
+0x742DD960, 0x3C657F33, 0xDF236A8A, 0x525E98EC, 0x3E654210, 0xB3891EFC, 0x0BD4ADF8, 0x294CFC01,
+0x4258C7DA, 0xD2AFB6AE, 0x9A1240B4, 0x43DFE4CE, 0x2C2FB8C6, 0xF6033F57, 0x90E94E9D, 0x86CEC412,
+0x67BF83B3, 0xC72E4812, 0x514DCCC5, 0xC65ACF39, 0x25222846, 0x71746F63, 0xEFF8262D, 0x03529FD1,
+0x6936D315, 0x138073CA, 0x9E7C26B8, 0xC8B3D577, 0x895EE153, 0x12D00656, 0x6CE7711C, 0x58456A4E,
+0x6266B9CA, 0x8004A38C, 0xF727539F, 0x15C3DDAE, 0x08DA6B2B, 0xE250F250, 0x64EF08BC, 0xC3F0DA08,
+0x3191DAA6, 0x666E9BB8, 0xE56337B3, 0xF51AA9AB, 0xA40714A1, 0x399829FA, 0x12CD1928, 0xBD80C944,
+0x64E4945B, 0xCBFF392B, 0xB999297F, 0x0D28E754, 0xF32EF2DA, 0x6DF14942, 0x5136630E, 0x96D2D3F7,
+0xBBEE7937, 0x49314A96, 0x3B04326B, 0x2F7B2692, 0x8FDC13E5, 0xC5014E35, 0x1AF3606A, 0x8BCDA02C,
+0xF3BE3BF4, 0x19D0E48E, 0xCE10F28A, 0xE5731201, 0x61C1BFCE, 0x7C1A7EA4, 0xA05AC8C4, 0x232D4CEF,
+0x1C5478CC, 0x0E54C714, 0x115E08A7, 0x57AB605D, 0x328B5829, 0x7EB89B5C, 0x4BED56A7, 0x798B7A8D,
+0x683FA582, 0x0BCAC1A0, 0xA1028FF1, 0x3B07A20A, 0xEB620661, 0x7AE0B9F3, 0x172558D8, 0x5B4D80B4,
+0xF8CF857B, 0x35A9409A, 0xCFBFC0A4, 0x16464977, 0x3FB45290, 0x1E7BFB82, 0x306C6E90, 0xEAAC5F5C,
+0x6446462F, 0x7AF7DD12, 0x7DC0CF6F, 0x52F05F88, 0x87AD082F, 0xE4DFAC28, 0x561AF728, 0x9234B42F,
+0x6A97A411, 0xD6A1C8A3, 0xFF549677, 0x4DC23BFF, 0x9E6C28F4, 0xD327198D, 0x63FEA27B, 0x59D08BB9,
+0x44D51EB3, 0x0D5EBA45, 0x6703931D, 0xEFD187A1, 0xBB426A37, 0x7AD12EC2, 0xEE40E499, 0x05FA3B09,
+0x36E740B3, 0x8F421380, 0x33ED2AA5, 0xE4EC11E5, 0xC9C0302F, 0xB64AC700, 0x46ACAFD5, 0x6B1CFB93,
+0x34EC261E, 0x6F43556E, 0xF45BBFEC, 0xE7282A4D, 0xDAB3D875, 0xEFC1972A, 0xF4E13ED9, 0xF8F9E5CF,
+0x21E0DD01, 0x4F256618, 0x20742F20, 0x8608848E, 0x522F6B9B, 0x9D9C5B73, 0xBF60C8A5, 0x7FAACA10,
+0x9AD637FD, 0x01F01C7C, 0xFD39686A, 0xE68A0DE8, 0xB854E4BA, 0xAB1C4D77, 0xF76649F5, 0x990927DA,
+0x50458B5A, 0x36138416, 0x8915BDC8, 0xF9173750, 0x8E5376D5, 0x249A2C9F, 0xDBE794EA, 0x3097FFD6,
+0x1A44839F, 0xDD142155, 0xD2358045, 0x9F214E58, 0xEE320C84, 0x41B328BC, 0x1B54C7B0, 0x88DA5B24,
+0xDADBC815, 0x834EA841, 0xF7AABD61, 0x2E23D767, 0xF4EBB2F1, 0x1D12367A, 0x8C8BDC8A, 0x0B1F2878,
+0x0C05428C, 0xFC87480E, 0x2CF3CF8F, 0x07B1BF27, 0x5B872128, 0x71087DEA, 0xA6331252, 0x38626835,
+0x123534F0, 0xF67F3407, 0x2D24CE15, 0xA1980770, 0x261D2BB5, 0x45C07622, 0xA2317BB9, 0x0ADFC814,
+0x1A96070A, 0x45151067, 0x5F8B1B40, 0xE66593B6, 0x09BB0C8E, 0xA45D5302, 0xAA087461, 0x0F2E6D33,
+0x17BB471E, 0xA11191AB, 0xA677941F, 0xA21589D3, 0x40F2B016, 0x83066959, 0xDFAED68A, 0xAAC86CD8,
+0xCB7FD230, 0x2803C5D0, 0x952589E2, 0x12CA8F27, 0x653F5B9D, 0xF4544BD9, 0xA79B8D52, 0x139D829C,
+0xFE99C152, 0xD28C77B2, 0x11698998, 0x04630AA7, 0x23CBEE43, 0x45066F11, 0xD0D72061, 0x39D7CAD3,
+0x8E0BD253, 0x650C2323, 0x81B2ACFF, 0xD5D90301, 0x5AA7876A, 0x54DF2D3E, 0x3D513568, 0x28332A56,
+0x6EB1D3D9, 0x1B2CFE9D, 0x13260E63, 0x51AB9D63, 0xFF560EAC, 0xF2A4E537, 0xA6AA8949, 0xDE92EA05,
+0x29DCF46F, 0x9DCE165A, 0x9A9520F2, 0xF1BCE597, 0xA62D8427, 0xA9D7EB29, 0x09B92C88, 0x33C4E296,
+0xA19C4290, 0x838AE131, 0x091870A5, 0x915F24F8, 0x4F70C8A5, 0xE32251DA, 0xC3A34438, 0x2C230184,
+0xE7B98522, 0x76C14D70, 0x8721CC13, 0x95244179, 0xBE041C80, 0xD38560C0, 0x563B9A80, 0xCD7E86BF,
+0x2F1C5B89, 0x8A0F117A, 0x3CF17DAA, 0xC1D2216C, 0x9F84AD26, 0xE28025C1, 0x345A9C37, 0x1FC38E80,
+0x2788BB81, 0xF56C429E, 0x82B80AB1, 0xE239C786, 0x37A510EF, 0xCBA4182E, 0xD7434661, 0x8CF27140,
+0x096CCB4C, 0xEFB587B0, 0x8277AF6F, 0xC6A7A52C, 0xE1E85E9C, 0x6C246819, 0xDC26933C, 0x6B2308B0,
+0xA0F7760C, 0x26FC0966, 0x87FB6EAB, 0x09CF1F80, 0xE22E2D50, 0x0676FADD, 0xC5CD1EC7, 0x05C6E35E,
+0x834E8E84, 0x7A04956E, 0xA4C3AA97, 0xB3FE5B8A, 0x415C5BD5, 0xE713EF5A, 0x934DD0DE, 0xEA5752D0,
+0xE3BE6902, 0x169A9976, 0x5E3EF248, 0x2287A8A8, 0x9E41DC14, 0xCFEA75CB, 0x2DAF9F7D, 0xCDBC9168,
+0x791E41D6, 0x25BDCCCA, 0x7F6316B0, 0x9DE7DC58, 0x47942420, 0xEB0E2376, 0xEABE4D30, 0x4BFA7E20,
+0x21CEEC1C, 0x1205FE79, 0x64DA59BB, 0xD9A6EC47, 0x64504FCF, 0x8755BEAE, 0xF1DBDE24, 0x7B41B206,
+0x8FBDA63B, 0x67691DCD, 0x6A277E4A, 0xE8677D56, 0x6932C843, 0x0E20DB4D, 0x5BA60961, 0x255B505E,
+0x11A55427, 0x04165C02, 0x9BF1AAAE, 0x7B9E36CD, 0xC49A0FAB, 0x0FDB2570, 0xA656417E, 0xC249E962,
+0x5A4D0390, 0x578F04BB, 0x543FD2E8, 0x53960FE3, 0x2EE39330, 0xC540BFCD, 0x7E4E30C5, 0x68A0C379,
+0x728F21BA, 0x1EA1A1FC, 0xDF94F22D, 0x98A8DFC4, 0x06558CC8, 0x4064A0D7, 0x1D8D38E7, 0xC30533CF,
+0x1BCF2279, 0x5EBFDFCD, 0x60B33E66, 0xE82AB503, 0x30AA8AC6, 0x8A1D1AE0, 0xCBFAA2D2, 0xDEF1DF2A,
+0xC74CDA90, 0x1562D19B, 0xC46FE8AA, 0xC40BE772, 0x8027FACC, 0xB10FFA6C, 0x1A81257C, 0x55A3EBDF,
+0x53662703, 0xE469B91A, 0x76E49912, 0x97B33AF0, 0xA9A32EF6, 0xD7B46BB4, 0xFA2D09FD, 0xB1DFB6C0,
+0x50D7740B, 0x05C48E98, 0x74C11B5E, 0x36EABAAC, 0xF3DEDA8C, 0xA890ED1E, 0x6772A065, 0x94C453E3,
+0xDB89E135, 0x198EC126, 0x0E4127FC, 0x078C3DA5, 0x3263C191, 0x84177D6D, 0x68958C33, 0x6662CFBC,
+0xBDE14B00, 0x0066834C, 0x9AE7F40F, 0xC1BD7E0C, 0xAD806889, 0xA77182FE, 0x229EEE6A, 0x2FCC07D0,
+0x354AA6FA, 0x8C2EC053, 0x3D7A9ECD, 0xDD254171, 0xF275F2EF, 0x4F684E52, 0x17747068, 0x12E16A23,
+0xDB090949, 0x1AEA59AB, 0x60B49681, 0x9214C1E3, 0xD045DA83, 0x6CC04F64, 0xA4666292, 0xE700E0A1,
+0xBCC958CC, 0xCE137FCF, 0xE3CAC1D3, 0xFE82956E, 0xB6FA9566, 0x06385B3E, 0xF10616D0, 0x3533FCE5,
+0xDF785F3A, 0xDC96FCAB, 0xD742EF9A, 0xADE108DD, 0x21507671, 0x7BEB52DE, 0x1FDCF4E2, 0x12E22EB7,
+0x54569648, 0x86B17DCA, 0x5697E57A, 0x4B2CE752, 0x2171F3FF, 0x0E72A96C, 0x77806D82, 0x7F33CF65,
+0x5CAD1587, 0xE92253CA, 0x9E8EE82E, 0x895AAB36, 0x9D4E8E03, 0x372575CB, 0xA705B22C, 0x266C3C58,
+0x0143EE16, 0x1BC8BE94, 0xA260051D, 0x9F6C2C38, 0x550A767B, 0x7A092D10, 0x7E0D1391, 0x3808950E,
+0xA0E37840, 0xDAB61E00, 0xCFE65EF6, 0xD73500C7, 0xE3534A40, 0x18F53A54, 0x4727BE29, 0x54A22D00,
+0x0741F85C, 0x0208E64B, 0x11FB8A3A, 0xC0C92E0C, 0x48DCBCBC, 0x51C68946, 0xA1197EBC, 0x24ED6535,
+0x30F1874F, 0xD0B6318E, 0x3348E242, 0x0A0B7748, 0xB020209E, 0xE2B57785, 0x1BACCEEF, 0xC1C487A8,
+0x6FF6E56A, 0xD2D137FA, 0x07309461, 0x1F354641, 0x0AF5D44D, 0x52321F6D, 0x662DFED4, 0x33875F5F,
+0x96C93894, 0x653850EE, 0xE59E9D1B, 0xA5126206, 0x7EB741B9, 0x5A5A1AAD, 0xA2EDDF61, 0x6B9AECEB,
+0x544E7D03, 0xC1D7EB89, 0xE4CD9986, 0xBDB9027D, 0xFA31D4AE, 0xF480606B, 0x49FCFF03, 0x3E2D5AD8,
+0xEA7975A2, 0x73EF3BD8, 0x1F5D672F, 0x83FFC29C, 0x0F2655B5, 0xDAE5FC35, 0xC3605B0B, 0xE99DFF03,
+0xE9C1B4CB, 0x04DF818E, 0xA5389EE4, 0x81F9294E, 0xEE976D1B, 0xE13C4343, 0x40A22449, 0x6B5374D0,
+0xB0F7B336, 0x42344A86, 0xEC54A941, 0xBF4FEA34, 0x2A062FC3, 0xEBDEAD74, 0xB1A9BE6B, 0x40947F58,
+0x56FCD143, 0x82FBF2D7, 0x59DFDD6B, 0x24308361, 0x85E90169, 0xF51D6F63, 0x4E817BA6, 0x44619ADF,
+0xDFF14483, 0x8A6AA020, 0xA871895B, 0x4F581A5F, 0x82454D61, 0x36241D50, 0x92DC4A45, 0x151E8670,
+0xBDCBE2B3, 0x2AD2E9E3, 0x6FB2168D, 0x403AE5EC, 0x010D8FA7, 0xD2B3A781, 0x49C80226, 0x160F6A4C,
+0x307E340F, 0x24B22497, 0x529361B9, 0xDB9FB808, 0xB2966AE2, 0x4B343C2D, 0x4B6AA3B6, 0x3F8C6AB0,
+0x85E6B76F, 0x0BA5C3C9, 0x57CE508F, 0x1DB376FD, 0x98AC9279, 0xA5B1340C, 0x2B6C697F, 0x025A6A55,
+0x76E4BA50, 0xC4E06CB6, 0xFE048DA7, 0x34D771FA, 0x3A73273C, 0xCA79520B, 0xF877D45E, 0x70BD692A,
+0x0C85A2C1, 0x1AD42988, 0xE6848DBA, 0x2D3AC5F7, 0x9ED19D54, 0x42AF11B0, 0x7C12898E, 0x02634287,
+0x68BC5DE9, 0x9C2E7A84, 0x2E047DE4, 0x821BA5CB, 0xFA4E37DF, 0xF3353235, 0x05901F41, 0xBC7E88FC,
+0xE6E19961, 0x5B851236, 0xC1FC6EC9, 0x0FCCEB32, 0x4894C192, 0xFE927B17, 0xA58FA871, 0xD0C7DA88,
+0x252ADD4D, 0x6282DC21, 0x3ABB4AAB, 0xA10278C9, 0x0C2D0D63, 0x0FD3C990, 0x6F6082B8, 0x97E73C7D,
+0xD1FCBE54, 0x85341D1C, 0x7D07BD47, 0x32F17DBA, 0x41547BD5, 0xF9447E13, 0x7EE6F795, 0x4B6AB1BD,
+0xBCF2CFFC, 0x910F1272, 0x893E8292, 0x0C9D01F8, 0x71C79C09, 0xFAFE8F02, 0xA9FA92C0, 0x3B4B47D0,
+0x9340C141, 0x6F484B8E, 0x8A7EB855, 0x74143954, 0xE6B333AC, 0x8A21A19F, 0x1E11ADFA, 0xD5D1A548,
+0xC376AEC3, 0x9750D7C2, 0x98232CC8, 0x0AF4FC06, 0x471794CA, 0x866576C7, 0xB3602C83, 0x7E0F07E2,
+0x1562BE28, 0x85407812, 0xC2372FC9, 0xC186E012, 0x8EF0A8CC, 0xEF9D0A5E, 0xED6F1FA4, 0x692373F0,
+0x7386AAB0, 0xCA786050, 0x01C45E1F, 0xB5D3DA28, 0xCC30133C, 0xC930168C, 0xA98A581F, 0x2F2A1EC2,
+0x1E513B06, 0x4896847F, 0xC7291216, 0x08AEE8D1, 0x721EF974, 0x60C7E96D, 0x0261263D, 0x2F26A2C4,
+0x4059C6BC, 0x350ECCA8, 0xBF6AA509, 0xBA221F9F, 0xB297D1E3, 0x6AC93ED2, 0x4E71F345, 0xE49D1CD1,
+0x3535A652, 0x3270A03F, 0xEC7C716C, 0x3F6C2AB7, 0x40B532CE, 0x3501A943, 0xBF797227, 0x2B761925,
+0xCE50734E, 0xF5442196, 0xF00374FD, 0x80242FB1, 0xB01ACD49, 0xD00965EF, 0x063A66D6, 0xC8931DB8,
+0x6C19FE11, 0x27FB7F53, 0xD8E916C7, 0x08C5F2E4, 0xAF5B1A0E, 0x7F8C1E41, 0x12927468, 0x4CDAC5D2,
+0x795A535A, 0xD630A4B7, 0x0F287915, 0xB5EFF720, 0xE22965EE, 0x4D06BFC9, 0xF0996D41, 0x07BFC95A,
+0x5DB43408, 0x378BAE72, 0x1868FF33, 0x8AC54D1F, 0x26B6F4D0, 0x8BBB07DF, 0x0FE1F9FC, 0xAE64EF72,
+0xB71072AD, 0xE03353FB, 0x409C5B8C, 0x051C1527, 0x06CE079A, 0x933813F4, 0x6AEB2E9D, 0x880429C8,
+0xCE5CE525, 0x0252604C, 0x13C01724, 0xF50646FA, 0x51900C30, 0x452969A0, 0x5E2D1250, 0x2C4F9ACC,
+0x7A270219, 0x95EA7C3E, 0xD44885CF, 0x1E8F9B40, 0x95229D3C, 0x4E1E83B4, 0xA280EA3F, 0x5A1B2ED1,
+0xCF495951, 0xF7292426, 0xE00507D1, 0xD6116027, 0x3791AFC7, 0xFDC5F3EF, 0xF3FBF0AF, 0x32523DC4,
+0x9F78BA9D, 0xE9F8D8CB, 0xBC791D31, 0x853B743B, 0x5C349214, 0x13221AC4, 0x8226C4F1, 0x62278364,
+0x17C6CB72, 0x3DF74902, 0x43A5C863, 0xA9D023B8, 0xF0A42316, 0x1AF2F4B7, 0x963BC671, 0x14BB5D4B,
+0x52F8EFEB, 0x99F3309D, 0x4DED1BD5, 0x216CE11C, 0x099CC70A, 0xF27709EA, 0x79F98F9F, 0x241D7955,
+0x8CC2C6EF, 0x94DB62EB, 0xF6E34D4F, 0x7BA6FB78, 0x5B162FC0, 0x2FB8A1E1, 0x4DA05BFA, 0x3E19E712,
+0xA5758CD9, 0x1019DDAC, 0x4594CD88, 0x249D4DB6, 0x4C4D591F, 0x081C384E, 0x4BE552A9, 0xD9CE1D91,
+0x234D5C96, 0x286B574C, 0xAB66E4B2, 0x1967298E, 0x5C3F1CDA, 0xCC49467E, 0xF54534A6, 0x8007D69C,
+0xF4722313, 0x3FA5A340, 0x75420AD1, 0x042BF44E, 0xADF5EBFC, 0xF06ACECA, 0x61768C77, 0x5DA24AF1,
+0x1372FB65, 0xE4B1EE2E, 0xD76A9FAF, 0xB223A0BC, 0x2AA1D1CE, 0xF532E255, 0x7D681D8F, 0x67B9CC8E,
+0x94073188, 0xD154B53A, 0x38078497, 0x740A55C4, 0x4D842E00, 0x06DA1C41, 0x4903761E, 0x15F1CEC2,
+0x83BDDF3F, 0xA0085898, 0x08BEDEF9, 0x6BBBB1C1, 0x0E32C9F3, 0x31FF3AA9, 0x3ABF5618, 0xB155B0B5,
+0x8AED22C5, 0x1D10104C, 0x16C120B5, 0x32C8828D, 0x797891AE, 0x7B2BEEC9, 0xD0F709E8, 0x980B20C5,
+0xD5FF887B, 0xB828BC3A, 0x04A6E80E, 0x2FB189E7, 0x2E144090, 0x936731C6, 0x3636EB2A, 0x2D93F7EE,
+0x3C263E52, 0x67154402, 0xD269C396, 0x784B0E01, 0x8A509173, 0x3DD2B720, 0xA076F243, 0x08082B92,
+0x061A75A5, 0xC1838877, 0x2211F04F, 0x80FB6124, 0xD9E114D9, 0xA1665B99, 0x303660AB, 0x7E716E89,
+0x0C3E5D52, 0x044CE562, 0xA6D211B2, 0x334FEE14, 0x223B383C, 0x185ACC0C, 0x0D11F6A3, 0x0E402B1E,
+0x59421308, 0x6379D60E, 0xE1C3C0AA, 0x1AAD85F7, 0x350DAFD9, 0xB3208832, 0xD96746B1, 0x7DC87D51,
+0x52542915, 0xFCA8EFA5, 0x9A929A94, 0xDCDAA4AC, 0x339C11B4, 0xADBA1598, 0x21C024B7, 0x720CB428,
+0x3D11A166, 0x132057B6, 0x897528B4, 0x259602D4, 0xFDA9CAC3, 0xBFE03BEF, 0x9E2AA763, 0xDFFC6401,
+0x1A4CAAFC, 0x34B17B95, 0x544C02DF, 0x78E171FA, 0x19658E6A, 0xFB66A203, 0x08B9E9C3, 0x65438E0B,
+0xD68432F9, 0xB072D333, 0x1D46A57F, 0x41AF2265, 0x0FA2F8AA, 0x416AC76E, 0x024F18CE, 0xD931FB2D,
+0x2D01831C, 0x58FE37FE, 0x07B2CEFA, 0xE19172D7, 0x08EEEEA2, 0x29A41B0B, 0xF2D26491, 0xE17FA8CF,
+0x6472B34D, 0xAA80D3BB, 0x3234C8D1, 0x196A7EE3, 0x35E595CF, 0x84FC3DA7, 0xE0F5AAD0, 0x922CAB6F,
+0xCB915521, 0x3DF4271D, 0x86D2A79F, 0x041467C1, 0x4673AF7D, 0xE413CF4D, 0x3B8F7D00, 0x23D41DD3,
+0xAA0CF1BB, 0x6129546B, 0x452E0B78, 0x7D24FD89, 0x8EAA9444, 0xA36D3051, 0x86F05885, 0x01871AE0,
+0xC78A1075, 0x4D285AE5, 0x64FEBF48, 0xD2CE5AE2, 0x61649921, 0x3158036E, 0x131E17AB, 0xD0A96DDD,
+0x0E70B710, 0x4E77BFE1, 0xA60BDF54, 0x45DE5BFF, 0x19B09B52, 0x726B33E4, 0xE38D0F9F, 0x0DC7441F,
+0x99FE3E07, 0xD4CCE509, 0x6309F07E, 0xF78CD2BD, 0xB652D836, 0x98BC294E, 0x55C067BC, 0x784052C5,
+0xF358D397, 0xA187A906, 0xA0BF427C, 0x382C3E88, 0xF3FA9DF0, 0xA90CC37C, 0xFA4C8769, 0xA32E1230,
+0x0F2DCB33, 0x7DDB7066, 0xC95B03FE, 0x17C88DA1, 0x5943A044, 0xD51DC261, 0x4BA4AC54, 0x4E7CE5B8,
+0x0A8309BC, 0xF8384A7D, 0x92DD7437, 0x9A02C88A, 0x0D4CF9A1, 0xD47F1331, 0x2A3CFA6C, 0x296E2B8B,
+0xC616F8CD, 0x98CEB522, 0xD413BA7C, 0xA916BBF7, 0xC0C418E2, 0xF318F032, 0x9D9918A8, 0x2CD82741,
+0x9D31B7C4, 0xA99E6BA2, 0x9DB16F65, 0xB723C376, 0xBDE602E6, 0x33FFCD5A, 0xF3ED1233, 0x3EE1B89A,
+0x645715C9, 0x494A7A77, 0xA2E238AD, 0xC3A77998, 0x2ED0171B, 0xCA6F156C, 0x39D47BCE, 0x0956AA00,
+0x5AA84479, 0x5A8C672D, 0xF4375C23, 0x8AABF3E2, 0xABF8343A, 0xF0826BD2, 0x97C6F9FB, 0x3931C08C,
+0x0301D14F, 0x62EB9F15, 0xD430B982, 0xBF1933AF, 0xCA365041, 0x1F5882ED, 0x7CBE7DB7, 0x4E21C007,
+0xEB44844B, 0x8FAB3940, 0xA9E33A22, 0xC8082C4B, 0x21E08B62, 0x26DD1BFA, 0xBCF4E568, 0x76C248B0,
+0x5A9A1AA0, 0xF7E6D126, 0x017E7D47, 0xC323F4D3, 0xE3C8AEBF, 0x875757A1, 0x3C57C87D, 0x1949B669,
+0x39C20BEF, 0x04C69B6D, 0x2E40F59E, 0xA4747E9C, 0x2C2B08FF, 0x31796DCE, 0x0C295E86, 0xEFD25E63,
+0x982206C5, 0xF5885FF8, 0x8421698C, 0x57C01F0A, 0x6356FAB8, 0xF092A118, 0xBEC9B8E7, 0x55FB969A,
+0xF1DCDCE0, 0xD9C25BDA, 0x7655E321, 0xEBC4732D, 0x7C4A5351, 0x19D1A89F, 0x720B5699, 0xAF0D15EA,
+0xCBB64A10, 0xB278C314, 0x09F65AC4, 0x59C8B9BA, 0x8582ABC2, 0xD6E7D16C, 0x562606E4, 0x8E9B001B,
+0x4D27A537, 0x19AAF3E8, 0x6D57C2CA, 0x3A7C1C6A, 0xAC82B5D9, 0xF67FB9CD, 0x6046CD4E, 0xC628A8A0,
+0x2EFBD0B4, 0x13E52867, 0xDD0E62FC, 0x282DC882, 0x9C6AE73E, 0x2523DE8C, 0x51F365C7, 0x9F1C292C,
+0x69D75407, 0xE743DCB4, 0x1BCF50EE, 0xACB7EFF5, 0x43EC82C9, 0xA1CA58DA, 0xCFC67002, 0x0EE8B543,
+0x27AE2F8D, 0x972326EF, 0x9677C0D7, 0xB323F8B6, 0xD82547C5, 0x0BBEA401, 0xFE83456C, 0xF481C334,
+0x40EBC9E1, 0x2A2D1CB3, 0x92F5FE68, 0x724DFD02, 0x82F579AB, 0xFED79CA7, 0x02084596, 0xB8A35FEF,
+0xC21D76AE, 0xA20076D7, 0x06797A8E, 0x5E361BA5, 0x94657A11, 0x9ED09425, 0xD3CF04BB, 0x0295FF4D,
+0x0E06F2F9, 0x39D0A16C, 0x8D455772, 0xC1990207, 0xB6084176, 0x7C310D4C, 0x5DC39CA4, 0x8344CEF0,
+0xCEAF6905, 0x7F8C5538, 0x30A57D9C, 0x5033C145, 0xDD7612B4, 0xE5519292, 0x244D4AAD, 0x1351F45E,
+0x32ABEEE7, 0x60476A9D, 0xB5615C60, 0x9DA8DC4A, 0xF0891303, 0x904B0922, 0xD23D5ABC, 0xFB89E734,
+0x4CE4650C, 0x8A07AF00, 0x3B6D31C0, 0xD25873CF, 0x9E2AC78B, 0x82972B69, 0x2FC2EE1B, 0xF6A51198,
+0xFBAC59B3, 0x34B0EE9E, 0x5AC747BD, 0xEDC97991, 0x20E4AB7E, 0x106E5707, 0x9C6F2D96, 0x362526ED,
+0xA913182C, 0xA872C537, 0x9EDEA867, 0x57A2059D, 0x85A1E293, 0x5EBF2F61, 0x8CCA1164, 0xAF6E4F36,
+0x344DAB26, 0xF3F78F07, 0xC107D186, 0x99AD3D38, 0x3D81D117, 0x53A89E1D, 0xA9F5076A, 0xD8F81F38,
+0x583FA48C, 0xF79D82EC, 0xF230B2BE, 0x55472A2B, 0x644EC53F, 0x4AF050BD, 0x3CAC65F9, 0xB2F85003,
+0x0E95AE0B, 0xDCF38CD1, 0x4F3D1B3E, 0x88602D7A, 0xAC6FFF4E, 0x01BA7D49, 0xF53DE7E6, 0xA726A545,
+0x3E6F9445, 0xA03F038E, 0x3D4D614D, 0x8A659B8A, 0xCC186406, 0x48C399E6, 0x40B75E78, 0xC283F4AD,
+0xDFF5A352, 0x3036F56F, 0x5459937F, 0xB9F55342, 0x1AAC1A6E, 0x424DED41, 0x57D301B9, 0x889ED31C,
+0x5C019532, 0x11B388E1, 0x7ACFE14D, 0x7643262B, 0xCB8A5446, 0x60850DC3, 0x6DAD54CE, 0xA9484BDE,
+0x7761E73A, 0xE4075243, 0xDBE1725E, 0x4B833AB3, 0x240789D9, 0x1508ED5B, 0x3FF1BCF3, 0x69025EF8,
+0xB94B23FA, 0x4319E965, 0x662E0B9A, 0x1350343D, 0xB28B3701, 0x1727B67E, 0x24FC6B5E, 0x608087E6,
+0x6B685916, 0x5C962C1C, 0x59E21F12, 0xD5FCAB01, 0x49C07ECF, 0x1AE17298, 0x14C41657, 0x819C943B,
+0x991D4CCF, 0xCE7F5B10, 0x37CBBFC4, 0xD32BE96F, 0x9B1C717B, 0xE9C44DC8, 0xCD27F3A8, 0x4A8A6E1E,
+0x85067A1E, 0xF8DE6635, 0x7B4233A9, 0x563B98A5, 0x9265FAAF, 0x65149172, 0xF62ECB76, 0x3CE5B647,
+0x3C3A512F, 0xE2B28ECA, 0xED87B194, 0x9F28E574, 0x85F5371D, 0xC4707A2B, 0x7A8B8E18, 0xBF061035,
+0x97FEE71F, 0xC5A750BD, 0x1C8F0CB6, 0xBB165B2D, 0xBA7C2ABC, 0x4FCD2003, 0xA5C4CFD8, 0x6569ECF1,
+0x9B3F0125, 0x422D4F5A, 0x22BEDAEA, 0x78B43662, 0x3B6C6175, 0xDD3FA110, 0x7ED29BF2, 0xB12281A1,
+0x76D82A0B, 0x48AC904F, 0x875C4618, 0xD205BD25, 0xACB715C1, 0x4E9D54CD, 0x0BB94AC1, 0xABE9F343,
+0x6DB10C81, 0x8676B8E4, 0x72B0E4EC, 0x1F56FBEE, 0x10507DA9, 0xB05DA277, 0x84552A62, 0x82122F1D,
+0x0869373C, 0x202B3957, 0x7EF928D5, 0xF22BC0A4, 0x0263DC5A, 0xDCE064AF, 0x0312DCC0, 0x2AB34635,
+0xACB7FD4D, 0x1F4F2102, 0x1B383CAB, 0xFA424AFC, 0x3D28C167, 0xCA3AEB67, 0xBAA372F5, 0x66F8978B,
+0x6F179C4C, 0xC5320FC5, 0x9A18BFD4, 0x1BF85F32, 0xF0FE9893, 0xA312C0E0, 0x962622A9, 0x8B34DA13,
+0x051F8BAA, 0xFF0136C1, 0x9B7B2938, 0x5D87387A, 0x1339C782, 0x48BF0CFD, 0x8DA87B9F, 0x8DDA69AB,
+0x9627DCF1, 0x63392130, 0xC03109BC, 0x41E6EDC6, 0x1DB99323, 0x4F01B880, 0x4D52BF90, 0x87A29CDB,
+0xE134EC5B, 0xD5ACE1D9, 0xDC963392, 0xCAAF225B, 0xE267ACCA, 0x15A09C5C, 0x1FB1FCCC, 0x81E56189,
+0x58E8A174, 0x8C7B4F47, 0x4D1262C1, 0x57AB8B98, 0xAF06413B, 0x4BBA092F, 0xA3FCD89B, 0xBBE77EF3,
+0x7493A2C1, 0x96C78275, 0x58A1DF38, 0xD76B4FDB, 0xF216F8A9, 0x93356FFA, 0xBD253203, 0x11D67E95,
+0xA4F0633A, 0x1D338CC0, 0x321587CE, 0x449BA5A0, 0x9BDABB64, 0x251B15A6, 0x2D8AAA5D, 0x8BC47764,
+0xDB2AF1A2, 0x78743DB8, 0x3C64F727, 0xB62E54C6, 0x8C9AFB2C, 0x2EC2D801, 0x95893E74, 0xAC0E2321,
+0xE3C8BF35, 0xC52D286B, 0x71BEB910, 0x5970AD84, 0x7C188B9D, 0xD183AA1E, 0x1AB6E131, 0x4F7AD6DF,
+0x7B23C4D7, 0xFC00AF44, 0x7A9CBEE3, 0xC470388D, 0xEB4C37BE, 0xF9210378, 0x04EED2F5, 0xE64A722F,
+0x9D99949D, 0xAADF0A56, 0x5CAE73DF, 0xA1E97E8C, 0xD3FC625D, 0xB91E1E9D, 0x692113BA, 0x8673045F,
+0x567F7372, 0x7F69FEA5, 0xA72E7D0A, 0x32050652, 0x61A8B39C, 0x86F52480, 0x4E7DFC53, 0x537E0E18,
+0x358F9445, 0xFC07D91D, 0xCAE3D612, 0xFF279495, 0x61B605AC, 0x75AE4016, 0x3B8CF8EA, 0x13760F01,
+0x04AC88BF, 0x6726AE23, 0x84FE18E6, 0xB247FB57, 0x712FDC2A, 0xE3AEFFB1, 0x1963D3F5, 0x90606CED,
+0x7559D840, 0x099CA4EC, 0xFA6D917E, 0x2A4042A5, 0x7BF61A7C, 0xF6FDDEFC, 0xCF4690D1, 0x92A5260F,
+0xE61BCADA, 0x3201E714, 0xDF769EE4, 0xCD552DC4, 0x4163BD1C, 0x963FFDA4, 0xDF5693AA, 0xA3EFB71D,
+0x3F46F542, 0x7799BC62, 0xB93632EE, 0x38F8C052, 0x4613F34B, 0x10A58B72, 0xDBB6A627, 0x9BE065A7,
+0x34F95B18, 0x366A44CD, 0x4A106B63, 0x437844B0, 0xB9D67E0D, 0xD47DFEBF, 0x7AE24A91, 0xF16AEFFE,
+0xBABF248E, 0x91F18DD7, 0x9A9D5060, 0xFBE984A2, 0xADD39A20, 0xD885B19A, 0xB67B965F, 0x3806F0DF,
+0x6AD86570, 0x9B7E27EB, 0xA3DB8956, 0x7C61C9EC, 0xCAA7AB96, 0x6813B44E, 0xA1FFAE06, 0x849F04BA,
+0x8C8E4DC7, 0x8BD65EA5, 0x9CA00844, 0xE77D378D, 0x5B35D35E, 0x7093C12F, 0x3218D6B6, 0x0F8543A2,
+0x1B613EC8, 0xD0F7E52C, 0x424520A3, 0x6F794AB3, 0x88DFFED5, 0xF6727E6A, 0x4C06FFFC, 0x5CB5FC0E,
+0x321F7AB1, 0xF85063CB, 0xAA063703, 0xA940F58B, 0x358304E5, 0xBE6B1468, 0xA575E695, 0xB0094E24,
+0xF8EB5640, 0x89BD63AE, 0xDC136843, 0x307DA417, 0xBCE3BF24, 0xB8CA7B60, 0x4FB9D25F, 0x30916DE9,
+0xB1E1A752, 0x9DB9062E, 0x41903696, 0xE418F349, 0x9E54140E, 0xC96C6B43, 0xA0B8B0F8, 0x03F2E88E,
+0x15F34ECB, 0x958C2190, 0xCFBE33F2, 0x1236C151, 0x324B6490, 0xD9623A62, 0x63CA6F42, 0xB898718B,
+0x14EF44D8, 0x339B0566, 0x06A49C05, 0x75254FA7, 0xDE9BD2A2, 0x7A9F54CA, 0x1688AD91, 0x8F319D4B,
+0x2A618567, 0x92163541, 0x9E310E7C, 0xA0A37AC6, 0xBA5FD20E, 0xD06F8850, 0xB8F64E27, 0xCEB4D9C0,
+0x03734FFD, 0x55619AE3, 0xDBC6A07F, 0x91E32D01, 0x093A279F, 0x23C4212A, 0x5D40B241, 0x35293808,
+0x4DC8D4AC, 0x6CE34B09, 0x6C99B547, 0xDFF2D32A, 0xFB9DF96D, 0x88C840E6, 0xD9A62866, 0xD9C2DAF8,
+0xE800D81B, 0xFF007DF8, 0xE40BC4DA, 0x643F4250, 0x8F338767, 0x502C7C52, 0xF33AC1B8, 0xF093CA30,
+0xAC32FD67, 0x843B0512, 0x26DE595B, 0x3CACCC1A, 0x55E807A6, 0x07536B85, 0x9E0231DD, 0xF0B59BE6,
+0xDB460B9C, 0x8810F008, 0x4AF17672, 0x275543BD, 0x3BB6A617, 0xC8780840, 0x0D89C1B7, 0x308A8F89,
+0x293DDA23, 0x445B26C2, 0xD101950C, 0x8AAA320D, 0x24F07CE2, 0x98F40184, 0x911ADD6C, 0x4B770A27,
+0x0EF002B3, 0x83E9E876, 0xF5DE2317, 0x43834ECE, 0x64070B09, 0xB706EE15, 0x4260F0AF, 0xB693A9F1,
+0x877176AF, 0x9CCCB1FE, 0x17A2CB0D, 0xFE98787D, 0xF3206400, 0x36BF117F, 0xDEA8FF1E, 0x9FE3A63B,
+0x215CB28C, 0x1EBB5D9E, 0x181CB55E, 0x85D8605A, 0x79853FBB, 0x8B5673AF, 0xB390656F, 0xE89C1F25,
+0x6784A90E, 0xEEF66279, 0x7319CCCB, 0x318275B4, 0xC373ACA2, 0x092B4CA0, 0x4F12E98C, 0xA69A4DD6,
+0x3408A8A1, 0x3636EB9C, 0x4C25797D, 0x1B8E2A42, 0x9E44291A, 0x1BDE1B0B, 0x69E73CBA, 0x37DE4745,
+0x554E9265, 0xDAA4D4A9, 0x63F28BAD, 0xE7D26E87, 0x9648BB27, 0x7C9D9B94, 0x9675DF17, 0xCC13B39A,
+0x2B9CA645, 0xBED41259, 0xF9B1628C, 0x03689EFB, 0x405723AC, 0xFA6DDBC8, 0xC2F25682, 0xD247F018,
+0xF93C3AA4, 0x8E0BAEC1, 0xD00953BA, 0xEBA68669, 0x256FBB19, 0x7B64C9C7, 0x7D22963D, 0x57BE200F,
+0x1A97B49A, 0x4199FE1A, 0xB69489AA, 0x17552B6B, 0xCB194236, 0xD01749E3, 0xF5A836EE, 0xBA916184,
+0x86A62FD3, 0xB0643371, 0x490BF12B, 0x3C3A333D, 0x6C1B4E92, 0x1E40AD9F, 0xC82E6CF6, 0x637D278C,
+0xC7356C5F, 0xA0B38759, 0xBCF51255, 0x112B4CB6, 0xCA61F7DC, 0x5080EAFD, 0x3A8162D7, 0x61E25932,
+0x4CF37DB9, 0xC0BC549D, 0x1018F71B, 0x987F5058, 0x3E1F8242, 0xA461A663, 0x8470563D, 0x7A630AA2,
+0x0EF7036B, 0x974C1A3E, 0x443969B3, 0xBC486E92, 0x98361A99, 0x1D0B45F3, 0xFAFDADAD, 0x2B4914D8,
+0xDB1532C4, 0x6DD912E7, 0x383A1C67, 0x088DDBCF, 0xB3ADBB15, 0x17DE28A3, 0x788FD1A3, 0xB4A98660,
+0x865E7F64, 0x4026859B, 0x9941428E, 0xD4C28726, 0x409F7F7C, 0x9A47A5D0, 0xF685C2C3, 0x4B44B2D0,
+0xCE4ABD3C, 0x1495017D, 0xDF058C95, 0x96AAA904, 0x901A7106, 0xF4018489, 0xF70F9575, 0x6C084A94,
+0xFB04F8FE, 0x3DCE9852, 0xA8BFF738, 0x021F4DB6, 0xC50EBF3D, 0x5EB1E21B, 0x01C0F0A3, 0x61CBF61C,
+0x272660FF, 0xF020B635, 0x691D2DF0, 0x825CADC6, 0x1A5D7638, 0xCCBA613B, 0x4D13A370, 0x920A044E,
+0x00FA769B, 0xE7F3F662, 0x6368C6FC, 0xC0A0B90B, 0x3E09BE5B, 0xA112B705, 0x7750B7B5, 0xB98DA78A,
+0xB70C12BD, 0x18D3C2CC, 0xF7ABE787, 0x69261BDE, 0x569FDBDC, 0x0EFD9F06, 0x9ACAA25C, 0xF994C353,
+0x5BCDAA88, 0x8F701A9A, 0x90390CE5, 0x9F1A9D71, 0x61AE0B0F, 0xED7ED525, 0x1F3CABD0, 0x6B99E5BF,
+0xE535BDCB, 0x4270F1B7, 0x504489AA, 0xE343DFEA, 0xD58C918F, 0xF84E285A, 0x76B22D47, 0x7A4D71F6,
+0xE05EFC3F, 0xED6B3987, 0x52BA9080, 0x701ACD19, 0x6CA3B1DE, 0xEAB471D1, 0x9E56C992, 0x7725C7E2,
+0xDE6522FD, 0x8675FB40, 0xDE58F416, 0xAA5E13C4, 0x25F1C06C, 0x8FBBB0D9, 0x8E21637C, 0xB6B74947,
+0x966ED7E3, 0x1D03A826, 0x508F1F46, 0x486A7189, 0x2A911ED4, 0x7AFCBC6B, 0x2496A9E1, 0x70973B12,
+0x5C7445C8, 0x28310AD9, 0xA8B45363, 0x881B316D, 0xD21E2FD8, 0x8A6F5F4E, 0xEF20128C, 0x84BAC11E,
+0xE8E0FE61, 0x2C437479, 0xB7BB5EAB, 0xDB8EC63F, 0x5587EE4B, 0x07FBB51A, 0xA529F4EE, 0x6C4B032A,
+0x3C64238B, 0x584BC281, 0x59F5E815, 0x56C60A0F, 0x84E736F4, 0x7356C6F3, 0xDF2D78F0, 0xC0CCC4E1,
+0xCEBA69A2, 0x05D7A493, 0x6D17F349, 0xFD3CE5D6, 0x57BB9B92, 0x7EC04032, 0x0DC07B21, 0xF74A3D7D,
+0x7AE6C268, 0x2AAA77C1, 0xF939FD36, 0x0DFC78E7, 0x24A4511A, 0xFE2E9B5E, 0xD5000A24, 0x868832CD,
+0x3742ABAB, 0x4F63A17C, 0xBDA9196E, 0xA711601F, 0xC3702EE3, 0xB1371E5A, 0x01049DA2, 0x096591E0,
+0xFD751C94, 0xDEE9D212, 0x64AEAC13, 0xB57523CA, 0x8307698D, 0x619A7B2D, 0xD0605A45, 0x6C38909F,
+0x7F901EAF, 0x2F4C1AEB, 0x0A0F4613, 0x1E4E7F57, 0x373D056B, 0xE989D87A, 0xEECD61D7, 0x55938BC2,
+0x3CC4D5F8, 0x6FB4EB46, 0x8366D040, 0xB6C6128D, 0xE4A9658F, 0xA208A015, 0x8228CF37, 0x24CF2801,
+0x33839AF2, 0x7CA3344D, 0xF9A24599, 0x7B7EE936, 0x4F5F7179, 0xD8920D3A, 0xC0302604, 0x91751E2C,
+0x295E3E9B, 0x48E83719, 0xC59C8F04, 0x567A6608, 0xEB6F699B, 0xD795F2A6, 0xA746313D, 0x03568016,
+0x7EE1C85A, 0x62CB23D7, 0xE28FA8A3, 0xCF8EDE88, 0x50BC0C5C, 0xC1C8B2D5, 0x3FC6E072, 0x8497D5A8,
+0x6BD3026E, 0xA71F7961, 0x7FC91930, 0x70565494, 0x95C9E1D9, 0x089F65DA, 0x0B22AF05, 0x05B7013C,
+0x65682329, 0xD16D99ED, 0xEA57A488, 0x5574DED7, 0xFCC13F47, 0x9E0D27DA, 0x7FFA5CC3, 0xE7238331,
+0x57417902, 0xB120601B, 0x6A60FE77, 0x221473CA, 0x88F4125D, 0xB62FCA8A, 0xA46D271D, 0x21B79E1F,
+0xFEEA0BF6, 0x632A233C, 0x4F3691E2, 0x2B644DBD, 0x691C42C3, 0xF5C65903, 0xCB6FB41A, 0xCC351AEC,
+0xB9DD2034, 0xF7B29FD7, 0x8D7216B1, 0x89E51AC2, 0xEAAF68EC, 0x15CE9A6C, 0x4143C51E, 0x1BED7FF1,
+0x27A1294B, 0x7C25A273, 0x530BE941, 0x81B18DC8, 0x593D928A, 0xF5343401, 0x8D451C31, 0x7DA22FEB,
+0xD5E7923D, 0x65776D2D, 0x2600F1E8, 0xD6D7CA12, 0x9FC5D768, 0x4AA43E47, 0x3F9DE7C5, 0x1121F545,
+0xF02682D5, 0x019E2524, 0x610AA9A4, 0x9ED9626D, 0xC2FAA4C0, 0x6F942473, 0xDC816FE7, 0xF29FEF8E,
+0x2B0785C4, 0xEFFA9EA5, 0x492A6FFF, 0xC9B5A241, 0x3343526E, 0x701742F3, 0x530EC700, 0xD098622B,
+0xA1F6EF68, 0xD242CD21, 0x09E2F496, 0xD25E7C7C, 0x1BDD85B0, 0xF40AEAF5, 0x2C78B182, 0x381C2861,
+0xDF6AF30E, 0x1A710C79, 0x99B982D4, 0x000B9457, 0x2866FD18, 0x947FFAF5, 0xC7B6C8C7, 0x2FB6B592,
+0x059E6CD5, 0xDABD4C88, 0xA9A7B4B4, 0xA03D66AD, 0x9E1ACC81, 0xA2D9178F, 0x20C6E7A9, 0x64A1D1D4,
+0x02EA98E6, 0x676F65E0, 0xC3414733, 0xFD528F3A, 0xBC3888CE, 0x0A84C78F, 0xE7C74314, 0xE277DEB1,
+0x36A1B3A4, 0xC3847E07, 0xA8E279EA, 0xC5B169FE, 0xD97E9D0D, 0xFA71F560, 0x337F75BB, 0x6D36A606,
+0xCA55A00B, 0xB923D623, 0x2ABCAB62, 0x8C91E4F5, 0x6D39D840, 0x2D497A42, 0x07A1B7E1, 0x597F072A,
+0x4EC2865F, 0x39B1AC22, 0x0ED14EE3, 0x395525E3, 0xA8C10042, 0xC7B11330, 0x793959FB, 0xC97018C6,
+0x6C890EDF, 0x43DE20E7, 0x66205C95, 0xD07807DC, 0xFC9A066A, 0x87E33C94, 0x57840BFE, 0x3336E90C,
+0xAC37C1EE, 0x5A550526, 0x9471AE44, 0x47361510, 0x32333225, 0xCDB09B80, 0x46CD52D3, 0x8057D88F,
+0x4125835B, 0x0D1D3D73, 0xC6EF2B71, 0x0DF9A767, 0xF9F8A436, 0x2443ADB4, 0x010E7B34, 0x8F00525E,
+0xF916DBAE, 0x66E736EB, 0xF39B435D, 0xC4CE4823, 0x96B50A8F, 0x9FDC50FB, 0xA844EF15, 0xA125586A,
+0x6BE798A4, 0x57B81051, 0x9B14D1C6, 0xFF588711, 0x632C7470, 0x26DA3FC2, 0xC7E151EC, 0xED405FC0,
+0x77041984, 0x0DA54E16, 0x8FE8B144, 0xACE8A931, 0x3B6D3F7C, 0x319A066F, 0xF5FC554B, 0x30685642,
+0xDB1D8A05, 0xB286F5CB, 0x483AFC94, 0xCB6306BC, 0x072E4A7D, 0x5A98CC9C, 0xFDC0A8A4, 0x77A2EC39,
+0x8E71F913, 0x4B923929, 0xE9BBE159, 0x9BB77F83, 0x92D55417, 0x593D825E, 0xA766144C, 0xED0CE0A9,
+0x498EC4B7, 0x5E2D365E, 0x9F9E06EB, 0x560E3D2E, 0x1B9222F6, 0x22FDDCBC, 0x36BFDAF4, 0x64150936,
+0xE8C6EB0E, 0x55D6A010, 0x38CB2396, 0xA2824ADF, 0x3F7DCB60, 0x4ADB4C42, 0xCC743547, 0x0223063D,
+0xD5F5737C, 0x4BE485EA, 0xCB8FC5EC, 0x1F52E951, 0x4CA515FA, 0xA0205721, 0x84F588CE, 0x9F8F3E37,
+0x772CC5A4, 0x2E846269, 0x90951DDB, 0x38DBEF61, 0xE1A6361B, 0x4B06D6B5, 0x4941EEE8, 0xF5A3F5CC,
+0x1CCD99AB, 0x66E8055F, 0x1F4FA05A, 0xD3DEF617, 0x8C4175D1, 0xA7AE3123, 0x4D77EAC6, 0x39858D8D,
+0x449F9CB6, 0x0CC1F6EF, 0xB3893268, 0x6ABB1DA5, 0xDD3078EA, 0x84E9CB86, 0xCAED6A06, 0x68C4A80D,
+0x370C21D7, 0xC6820D07, 0x00FA88C2, 0x08BC1D9C, 0x4C213FA4, 0x624474BF, 0x5DF2A996, 0x6318F2BA,
+0x6FACC31C, 0xCB91858A, 0x7D2D509F, 0x2F6ADE2E, 0x965DE97B, 0xD8C56403, 0xC73A11C0, 0xF5B3AF11,
+0x7A86349F, 0x2E839445, 0xD29F8066, 0x29347D30, 0x4CF77BBA, 0xF9124624, 0xA40AE457, 0xEF685022,
+0xE957C27B, 0x789D3C20, 0xB07F65F0, 0x32215C15, 0x77406FDE, 0x3DD57327, 0xF76201D7, 0x00B9DD26,
+0x1E89442F, 0xE8BFB55B, 0xDDE71153, 0x8F2AEDE9, 0xE222C19A, 0xD428B9EA, 0x53CEA914, 0x292CC330,
+0x14866B8D, 0x8FB1B4FD, 0xE0765FCF, 0x05925057, 0xCA6BA86A, 0x53247AB0, 0x478AF7C4, 0xFA72D500,
+0x0C023C1F, 0xC8BEF11D, 0xA0FE97CB, 0x18895B16, 0xB066C5B4, 0x51AC9A4A, 0x392C49EA, 0xDCA1C3F0,
+0x2C9BB41C, 0x2101448C, 0x3908D727, 0x5A926CC8, 0xA39DB1A7, 0x5E63131F, 0x92A77ED0, 0x14C46103,
+0x5C079BE6, 0x81473DF2, 0x014393FC, 0x61F67D6E, 0xA7BFF2A3, 0xE45F7B0F, 0xA00ADB9E, 0x4EF37511,
+0xEB444A9B, 0x39E1B0B6, 0x85B23024, 0xEFFF93E0, 0x7D3DB6FA, 0x484AC571, 0x92C2C867, 0x155B6809,
+0xF9C9F652, 0x0482BDCD, 0xF9938117, 0x1C51341F, 0x7CED2988, 0x9E227F80, 0xCCD06AEF, 0xB6D82258,
+0xCF5171AE, 0x0DD7ADAE, 0x25B988EF, 0x7E0EA9E9, 0xDA487995, 0x85A61C1F, 0xA0A1F4CA, 0xF986409B,
+0x483ED211, 0x732B849E, 0xD9DB224A, 0xE5A6073D, 0xA8423515, 0xF306169D, 0xA08C187A, 0xA4C00E53,
+0x0BDF87B6, 0x2E5B200A, 0x34651272, 0xE72BF73A, 0x9A2964DB, 0x9681F2F0, 0x29596C6D, 0x11CADE87,
+0x1305A9DA, 0xE57C7A97, 0xD818FCEE, 0x1AD2D2D0, 0xBD767A0E, 0xF484B370, 0xAE348ECF, 0x253C8BDD,
+0xEEF8D359, 0x717CB6AE, 0x6926A40A, 0x92D92712, 0xB628692C, 0xD0737524, 0xF53B994D, 0x6EA571A8,
+0xEAF1B531, 0x3CFF5E14, 0x9D2A9A74, 0x3990AE9B, 0x32F244F4, 0xECECA1D8, 0x9A287396, 0x285A82A6,
+0xEDD6F7FE, 0x94483586, 0xD567BF8E, 0xFF27C435, 0x1A59C1D2, 0xB51F5D14, 0x6E37BD18, 0x2B2948B2,
+0x866BC238, 0xBCF0E98E, 0x0B853BEF, 0x6045569D, 0x79DC0759, 0xCA57C24C, 0xED0E61AB, 0xA987005C,
+0xF188B2E3, 0x800ABE6B, 0x00659F17, 0xC9EA628C, 0x2A7ABE55, 0x48CBA34D, 0x02B98FF5, 0xDFF4072C,
+0x1C64E5B7, 0x98619663, 0x776AE424, 0x95FFF398, 0x1DC4A0D5, 0x974DEA4A, 0xF50366F8, 0x3C8288F2,
+0x2A1AE184, 0x1265ABB0, 0xA77A9F68, 0x89B7A816, 0x63F39BF1, 0xE4D59030, 0x9068E2BE, 0xD2D246B8,
+0x1976B03D, 0xA5A74284, 0xC6602165, 0x77965597, 0xB20906CB, 0xA9B6CF68, 0x9A79A886, 0xD5E076EA,
+0x23984A04, 0x10E9AFA2, 0x6E9DDF96, 0x522A4B3A, 0xC38DC720, 0xEBA6E4B9, 0xC486A3B4, 0xA589BC08,
+0x57D51157, 0xD6844F49, 0xDC1F2DA7, 0x11FDFA7D, 0xF0D67FB7, 0x21A8FB33, 0x7E00C2B1, 0x4C78042C,
+0xB4BA7C76, 0xC1FC0D85, 0x12E4203B, 0x9B57B6C1, 0xBB51F5FD, 0xCECEBF6E, 0x6C9E110E, 0xBAD34810,
+0x52D1E400, 0x1A082663, 0x8C5CBD35, 0x97E09FED, 0x7424A4B2, 0xB83C7CEF, 0xAF9C59EC, 0x66F530EE,
+0xCC92EDAA, 0xA96E1A86, 0xDE452F3C, 0x6406D6C7, 0xA6577D0E, 0xB0EC6CCA, 0xD096A5CD, 0x24C70ECB,
+0xED92D480, 0x1D5A0A1D, 0x49AD02ED, 0x15B61A68, 0xC3058D0B, 0xABC5D4D0, 0x2009AD43, 0x97ACDB77,
+0x70BFA542, 0xAF498F43, 0x666EDDD3, 0x28B5B8E0, 0x44F25DDD, 0x9C9A35CE, 0xD0A5FF5C, 0x6B7F3FB3,
+0xC869863D, 0xE4455110, 0xED887FB7, 0x818BF44A, 0xDC35C2F8, 0xBE17CAE0, 0x4AB01FEB, 0xA6739C69,
+0x902D2681, 0x1FC59015, 0x7BF9B963, 0x1E0B1228, 0x7215232A, 0x73DB827A, 0x964A54A8, 0xA620F5C7,
+0xD2CE8745, 0x335DB49A, 0x4F4A8DF4, 0xD42B1806, 0x3D6B4A4A, 0xD91DFC0E, 0x0FC19CC9, 0x61BE6107,
+0xC6082842, 0xCB878206, 0xFB499A48, 0x1C874FC2, 0x1D99DC5B, 0x274A288F, 0x4E3973C4, 0x7C1004F6,
+0x7EDFA477, 0x03FF7F15, 0xB25EF593, 0x55A99DEE, 0x439244A4, 0xC3A4729A, 0xD2F48F25, 0x128CC9E9,
+0x33A09A54, 0xFFA92295, 0x1A31CE34, 0x190DC122, 0x16CBCEEF, 0xBD1FA8F8, 0x1572B0F9, 0x553EBBED,
+0x04911C2D, 0x975B7D99, 0x3B84092E, 0x03FE58D0, 0x97E8BB40, 0x3FA989F4, 0x3B762A83, 0x7CECB9EA,
+0x788FFCD7, 0x1B5B99D7, 0x98E16F28, 0x61AE1271, 0x27297F17, 0x77217FA0, 0xB30816AF, 0x632F1B47,
+0xC60ACADD, 0xA9091170, 0xAD921AAC, 0x8C72463D, 0xE153C794, 0x71AF5649, 0x39F82FC9, 0x7A44F01E,
+0x870FDA3D, 0x56070FB8, 0xF5AE131C, 0xA0E0F41C, 0x8D3009BC, 0x39813B94, 0xEB77E8DB, 0x23878823,
+0x58790514, 0x775B9660, 0xF70030E8, 0xC1C47813, 0x2E7DA0B2, 0x1592D992, 0x2C4985F5, 0x09E166F6,
+0x730870D4, 0xD0CD57DC, 0xCBD79515, 0xBE52DE48, 0x39B8A328, 0x8F70A4E1, 0xCE175FEE, 0x52A9EE5B,
+0xB1AC6AA3, 0x31BD71E9, 0xA5D6034A, 0x1CA48E09, 0x814A2B68, 0x4122E7D6, 0x31F26425, 0xA11ED083,
+0x5B14D8DE, 0x5C4BDCF5, 0x0AEF98BA, 0x8E1E58D1, 0x005AC020, 0xBC29534F, 0xBA8FF289, 0x79504FF6,
+0xFA66E87A, 0xC4BD546D, 0xF56B6B26, 0x8AE83E59, 0xDB0188C0, 0x9B3BDA97, 0x6DFBD5B2, 0x2EFF8DF0,
+0x5F8914C2, 0x18BA0C96, 0x92FFED2F, 0x2DFCB0AE, 0xA9A7A95A, 0x05B5E170, 0xC9001EA1, 0xE11F306A,
+0x89BEAF2B, 0x1B4677E1, 0xDEA9D53E, 0x2E7F6C21, 0x0AC23CD4, 0x3C8527B1, 0x93E5D009, 0x292BF5BB,
+0xC4E08057, 0x147AA27D, 0xF153B253, 0xE40906C1, 0x7C9C17B6, 0xAF17F7A1, 0x5F7DAB4C, 0xDDF01165,
+0xFCAAEF31, 0x74343A45, 0x3A9AA0D9, 0x184BA564, 0xB3F1F3D8, 0xE31C7708, 0xE8FA39F9, 0x8DB1AC91,
+0xCF1A2976, 0x2CF4A7BA, 0xC93418FF, 0xCF0C787E, 0x14BFF00E, 0x8C9E8919, 0x67CFE50E, 0xE248421F,
+0x9F2575F7, 0xFB2183A7, 0x03705B77, 0xBFBED09B, 0x14A9ED48, 0x9142FF87, 0xBCEBBFDB, 0xE7635C00,
+0x98233D74, 0x0CE4F6B8, 0x29FB5FAE, 0xD8EB81B6, 0x9369C9F8, 0xCF6F5C18, 0x50A933DC, 0xEBAB61B6,
+0xAAAF31FB, 0xEEA54764, 0x84DFF79C, 0x741058B5, 0x734EB98E, 0xB2717FD0, 0x65DF5708, 0xE50EBF6C,
+0x1C6FA3E9, 0x7E308741, 0x5539B577, 0x995ECECB, 0x7971D6DB, 0x193223EB, 0x0308EA7B, 0xB390D9A9,
+0x722DB7FA, 0xF1CB12D1, 0x3310C32F, 0x1EEC8F08, 0x6238D318, 0x664B034E, 0x277DD49E, 0xC4067733,
+0x56E8F3E9, 0x7DEDCAC1, 0x9EA196F2, 0x5A8D0FA8, 0x0C9947B8, 0x11D9A7EE, 0x865EDF93, 0x326E4999,
+0x7831E420, 0xEB42D28C, 0xBBC3B33F, 0xA78A673B, 0x2B52AFF7, 0x09BE162B, 0x2F0D54F1, 0x5D1CC9B8,
+0xAE6D4423, 0xFE635146, 0x4A5E55B1, 0x08196FBA, 0x6154DF4C, 0x72E1AE7D, 0x320762DC, 0x77081391,
+0x1F830A19, 0x88CD5805, 0x86A91542, 0x86C2231E, 0x5ACF74FD, 0x85B67A01, 0x00D6C5FB, 0x17A5858C,
+0xE22FD865, 0x3CEA7BBC, 0x5BDDA2F7, 0xC50DA039, 0x1EAB2299, 0xB9656F00, 0xA17FDF87, 0x4413AB09,
+0x1EA8F400, 0x67805067, 0xF8C5FB1C, 0xB88B32B3, 0x86080E68, 0x0E84F810, 0x26E52DA7, 0x7CC080F1,
+0xE5A1504D, 0x3B9EA282, 0x27818AEB, 0x282F0922, 0x2EF4687A, 0xF2B4D7FD, 0xF8592688, 0xF0C8F63F,
+0xFE4A5426, 0xA45934CE, 0x5E466321, 0xDAC276B7, 0x9039DA93, 0x37B018B5, 0x1BE81C60, 0x32134688,
+0x6075DDC6, 0x0C502CC3, 0x51BED274, 0xCF8D5D23, 0x35FB0FFE, 0x9E8AC967, 0xD4D49531, 0x3C49442D,
+0xC4731E97, 0x3C83014B, 0xD301EF0F, 0x187D1677, 0xC055EEFD, 0x70FBFFCB, 0xB525F0F6, 0xF20065FC,
+0x6B2A7E6B, 0x3E39BA82, 0x6B422806, 0x1FC99178, 0x17D8BC3B, 0x6C7281AE, 0x9898CBAB, 0x1812F798,
+0xE329BF02, 0xEE7957A9, 0x893705E3, 0xBDECEC16, 0x648D0920, 0xCB905313, 0x828033EA, 0x379F98B5,
+0xFF806610, 0x3AFCA66F, 0xE92F11EC, 0x79796F55, 0x5BCD25CB, 0xBDFEFD63, 0xE6A8EB76, 0x7FDA10F7,
+0x3BA7E150, 0x8EE08F93, 0x6768233D, 0x72F54E37, 0xB963D0D6, 0x5A86A514, 0xEFD87EA6, 0x52414E91,
+0xBD07CCE6, 0x97F892EC, 0xB72D6D6E, 0x7B635295, 0xF9AA158F, 0xD7902FB5, 0x147E8CBC, 0x3F216464,
+0xA9821789, 0x9F6B7F36, 0x398C7815, 0xBDDCAED6, 0x751193CA, 0xF02D9D81, 0x21AC97A9, 0x6C8C7A94,
+0x2EC739B9, 0xEC1B3FDD, 0x9A199388, 0x19FD4833, 0xD314C910, 0x7DFB027B, 0xD9342BA2, 0xFC12C58F,
+0x75D4609F, 0x7FF0D9D6, 0xD14A0799, 0x5E71484F, 0x5C30D0E7, 0xABA0C23C, 0x388CB907, 0x92888735,
+0xA102DA5D, 0x299C5BF8, 0xCACED1B6, 0x3741545B, 0xBC91FBD1, 0x1983C03A, 0xC5047FB0, 0x3EA19C8E,
+0x6415CDA8, 0xE396612D, 0x196D730B, 0x66363B4E, 0xA10464AD, 0x8DEAD1B2, 0x0BFFC18C, 0xF79D64D0,
+0x0090A7B7, 0xE648FB62, 0x477BD324, 0xCA79A27F, 0x1DA2DE5C, 0xB7B2297A, 0x25F1BF00, 0x44352D1D,
+0xFB488F13, 0xDAA4B225, 0x4404B58F, 0x49DECA31, 0x94F0C9EE, 0x73F80CD7, 0x0093611B, 0xACDDDDC0,
+0x06A87C09, 0xD383B8ED, 0x296FCD7B, 0x0A6DB668, 0xE7E08CE1, 0x04874EDD, 0xC334179B, 0xC807DBC9,
+0x82AE28E5, 0x09B6913C, 0xEFEC29EC, 0x7247157A, 0xD1EB1B1A, 0x07FE61E9, 0x40C70947, 0x8C15DC0E,
+0x5F1E56BF, 0xAC219FC5, 0x75BA3595, 0xEC5E93B0, 0x1A2BF253, 0xD957992A, 0x4DC370F5, 0xDDC3671E,
+0xDDEEB330, 0xE6F96ADB, 0x0397AB16, 0xD7D61587, 0xEA7A9453, 0xA5590BFA, 0xA9CC5E06, 0x6DEDEC9D,
+0xD7A8269D, 0xBFDFC110, 0xCD315879, 0x307E63C7, 0x61EAADE6, 0x766C84F6, 0xE8BFF236, 0x1E3F566C,
+0x01C3792D, 0x54118C22, 0x9FD9555E, 0x96CC6E36, 0x0C7A6D4A, 0xFF6705D7, 0xC2E4A71E, 0xC24E4B08,
+0x42A83FA1, 0x1F5CA797, 0xA4E4550F, 0x3940F223, 0x1388266E, 0x36CF2CB6, 0x11D867EC, 0x5C66A363,
+0x2C7539E5, 0x0AB0EC87, 0x1233E393, 0x6B9113F8, 0x886B6E77, 0x128B1933, 0xE77B18FA, 0x9369578F,
+0xC58E23E8, 0x666C92C9, 0x517F1E5A, 0x801FA60F, 0x52E4C2AD, 0xEEDD99E9, 0x64D6D5E6, 0x16783B03,
+0x858111FA, 0x6EAA07CB, 0x6FDB3EB5, 0x133D5F69, 0x73F55435, 0x7868E0EA, 0x3614D375, 0xC3BD4636,
+0x575545F2, 0xC7E7B55B, 0x607FAEE2, 0x22D13130, 0x19718D77, 0xD06EE97F, 0xB13B33E7, 0x070340A1,
+0xB60306EB, 0x91EBF47E, 0x462D4C6A, 0xEFC6318D, 0x5799E847, 0x3B5EBD79, 0x00CE0311, 0x894FA835,
+0x9E6AB946, 0x34802BBC, 0x103F39CC, 0x3CFBFEF5, 0xF8D7A22E, 0xDBFD06C9, 0x4C3DA696, 0x2B6D3D77,
+0x62464620, 0x015DAF23, 0xF1150A70, 0xFFAACC26, 0x47C7098C, 0x6743FCE7, 0xA999A952, 0xC4C17002,
+0x124794FD, 0xFF2EC92D, 0xE110F9A5, 0xC5581233, 0x448FCBB1, 0x4AFB0E57, 0xA091DF75, 0x6B9E2756,
+0x62CC74B3, 0x4734EEBE, 0x0D20EFA3, 0xF3E49037, 0xB51D7DD9, 0x47E3F735, 0x016B3896, 0x60E61825,
+0x044C5F5F, 0x2B854C98, 0x7F0CBD1B, 0xED0BEEF8, 0x60D11C52, 0x5A243300, 0xC5CBD3B9, 0x3305FAF2,
+0x4967EE7F, 0x59F1F80E, 0x0D039C2E, 0xD7362414, 0x89BD8BA3, 0x7DADE255, 0xC80F2CA3, 0xAEF5B8E2,
+0x37563BE8, 0x08D89DEE, 0x45BC554C, 0x79456189, 0x709C9BDC, 0xCB3B9F72, 0xAFFE5FCD, 0x95A96266,
+0x24642EC2, 0xC51ADA81, 0xA84689F9, 0x58F6F6C5, 0x14C017EA, 0xA8FB9F10, 0xA19F7AC2, 0x7DA8AF56,
+0xACF56158, 0x02ABD7ED, 0x5786C1EE, 0x14B3BECC, 0xD7A98DC0, 0x5E4EBB4E, 0xD39EA8ED, 0xF9E453AE,
+0x1EC20C56, 0x99BD2408, 0xD8DAE3DA, 0x2A2DCC6F, 0x2C038DDF, 0x9F1FA5F5, 0x99710523, 0xC8F7ACD1,
+0x17F9BF0B, 0x8C5FC2C0, 0x76532764, 0xD3C00770, 0xD68B3CD6, 0x3C24CB1C, 0x0CB902DF, 0x1827831A,
+0xBD882783, 0x779ACDAE, 0x46A4A9DC, 0xCBB547D0, 0x6C14A2B7, 0x7AD71CA3, 0x6019881F, 0x2373E305,
+0x6BBA5BD3, 0xFBC23D6C, 0x945BADA2, 0x172CF2AA, 0x3A3D0B7C, 0x6F969298, 0xDC0E991E, 0x45720FAD,
+0x6B67C3E4, 0x7A792746, 0x0900D697, 0x3D792E82, 0x0A400DA6, 0x37A9118F, 0x702248B2, 0xF97663B4,
+0xD0660F82, 0xF622AEB3, 0x3F1D932E, 0x5F726B7F, 0x8D669DA7, 0xB5A23D8F, 0x5D952552, 0x3F726BE0,
+0x9CB56340, 0x4BD05FF0, 0xEF1CF476, 0x057FB34B, 0x0E0D452E, 0x8600B4F0, 0x7665253A, 0x3478DD68,
+0x10E55D02, 0xAFE1EFE9, 0x4CED8CD0, 0xE3D6EF6F, 0xA50A94C3, 0x7C77F117, 0x55887AF9, 0x33E62E72,
+0xB3C0F9FA, 0x8213E1A0, 0xC734D3F3, 0xAA330B53, 0xF203C6C9, 0xEA08DE7A, 0xC0BD1C9E, 0xCFECB09A,
+0xC50C2646, 0x9CFF90C8, 0x40D4D7E1, 0x9ADA8788, 0xCD0E0759, 0x89E2B130, 0xA1FCCA2E, 0x3EDFE273,
+0xE4147CB2, 0x4B0DA5E1, 0xCB9807AF, 0xAC7BF3B9, 0xA3241535, 0xB0B9AB7C, 0x2529C289, 0xF552B274,
+0xF3EC28F7, 0x9243800D, 0xA57CBB51, 0xA39A0597, 0x20BC8F26, 0x030CE154, 0xA54909AC, 0x35875D33,
+0x8B99C6DC, 0x0E1B4162, 0x1F82AA35, 0x2123B8ED, 0x615F9425, 0x38F78826, 0x3F2B0802, 0x361F97F6,
+0xE3F9E3F2, 0x6088F475, 0x89EA8F42, 0xCE214B09, 0x49997A70, 0xC4521131, 0xDF26F41C, 0x0152BA27,
+0x40347681, 0x5AA6C280, 0xBF1CA7C4, 0xBFA0CF31, 0xD1BC0DA4, 0xCF279CBA, 0x6ECD07F5, 0x605A0F77,
+0x80A6EF19, 0xB8EC0E03, 0x8EA0BF4D, 0x3FB36A12, 0x6EC5EA56, 0xB56BD813, 0x692E767B, 0x2C31379F,
+0xDBAE58AD, 0xDA9E347B, 0x919370BC, 0x7D9A74A9, 0x5A3182FA, 0xB98823AD, 0x424D2176, 0xC6FFB2EF,
+0x210101CC, 0x62C24467, 0x0AEE3657, 0x5AB19655, 0xAD8E227A, 0x37214472, 0x4B6D685B, 0x1D4B1A58,
+0xB44B20FF, 0x0EA9E865, 0x062194C8, 0xEE12D799, 0x9BC3A30D, 0xB3898BF0, 0x6B3D8DCB, 0x640DD2F5,
+0xAB31F909, 0xFC0E461B, 0x42B060E6, 0x0C2C2441, 0xCBC05104, 0x74C618B9, 0x3228C362, 0xA7C36346,
+0xB1D0B279, 0x238BA230, 0x273D2EE4, 0xF35A62A4, 0x5464AD9C, 0x046F021D, 0x7A5B47F0, 0xE0B000F4,
+0x0B10B7DF, 0xDF7F0C2D, 0xE3826B77, 0xB99A081C, 0x5D8728A7, 0x6C26C8F4, 0xCEDFA8E9, 0xB0C1ABF3,
+0xA334CEE2, 0x116D26C6, 0x923CB75D, 0x09DDC018, 0x25975138, 0x7C8BF208, 0x348B26C0, 0x7E4B2117,
+0x1AE7F579, 0xC71DF31C, 0xF1D57FEA, 0x1F916A46, 0x7AA35CC1, 0xAE406E98, 0x0BD8352E, 0xE2F4EE41,
+0x22095A3B, 0x4EA7B002, 0x644D64EC, 0x0945408D, 0xB86A19EB, 0xB493940B, 0x274EAD08, 0xC5264D9D,
+0xE5DC025C, 0xE31543CE, 0xF5B8E280, 0xA608AF16, 0xF6B5794A, 0xA0A9D6B1, 0x3ADEB5E4, 0x8F6A1FEA,
+0x9BAADD62, 0x1182C064, 0x6B478460, 0xC38756DE, 0xD6332AEA, 0x80AEE99C, 0xF6459323, 0xFE8CD12A,
+0xCF48C009, 0x6611AD75, 0xD537606D, 0x979641FD, 0x4E95B299, 0x9E8554A9, 0xEBEFB9F3, 0xB84C9173,
+0xFAA0D078, 0xDB19C027, 0x9627F31B, 0x7D5FC000, 0x50680E62, 0x6655F799, 0x28C7DB63, 0xF699DE5F,
+0xEDFC2D78, 0x6B559207, 0x586F95AC, 0x18E8CD31, 0x52C4C3E9, 0xC4721C3E, 0x0AD83756, 0x7C82ED24,
+0xE5899752, 0x4C08F218, 0x5D57CA65, 0x89375CBB, 0x09358B31, 0x93B2890A, 0x9CC85150, 0x05E400FE,
+0xE0BA00D5, 0xE6DB24D8, 0x9D878367, 0xE2063F30, 0x49664AF0, 0xA28EF5C6, 0x7A89A4B7, 0x465BA952,
+0x36527899, 0x5F147212, 0x4E1897F4, 0x4C27D7A6, 0xADFF6D3F, 0xF05FBAFB, 0x584A7D36, 0x59CFE6F7,
+0x15A9F322, 0x6D6678D9, 0x4A998794, 0xB1A29A75, 0x1E85C622, 0xA11C5F6A, 0x09FE4649, 0xEB407603,
+0x4E360ECF, 0x9DEC3F84, 0x0BD5F328, 0xA3EED5FC, 0x2C775CD3, 0x0684779A, 0x76D92516, 0x2CD87C9E,
+0x230B9697, 0xCBA833E7, 0xF98E586A, 0x3D2D07EB, 0x6F51A71D, 0x9A251433, 0xA9C3E01F, 0x494138AF,
+0xD365AABC, 0x12DA1306, 0xC527ECAE, 0x5159B080, 0xA09C6BEC, 0x1B3FDFE0, 0x80D746CF, 0x2B9D09B6,
+0x9DB93A6E, 0x7370465D, 0x5F7A3FA5, 0xEB5C1615, 0x07E4F2BF, 0x58B02F68, 0x82934112, 0x154FF910,
+0xB787BB2B, 0x1BEADB9B, 0x585C94E5, 0xB8D667D2, 0x2AA64141, 0x529DC97F, 0xC20AA180, 0xD285DDB3,
+0x8F7F14D3, 0xB2E5C3EE, 0x1B51F7A9, 0xEE4EAD0C, 0x46291D7C, 0x8EE58621, 0x26698CEC, 0x173AC40B,
+0xD4C08D25, 0x76C91043, 0x7238841D, 0xDC498844, 0x7F8C7858, 0xEC483940, 0x7110CA21, 0xC955CFF5,
+0xAE92E0E0, 0x6C0E073D, 0xE360FA44, 0xE60A2D8D, 0xAFE34775, 0x724DD6F6, 0xB5C49624, 0x7F6BC7BF,
+0x6904C763, 0xA8662D52, 0x42CF5251, 0x107AB2E4, 0x2059E6E0, 0x9F1DE504, 0x1C5D562C, 0xABF710A5,
+0x319EDEBC, 0xC6A71F64, 0xC9A0E9E6, 0x4A664C9D, 0x623946B4, 0xA8D5EB54, 0xD248E742, 0x0C0707A9,
+0xC8888485, 0xABAB3CBF, 0x27579523, 0x74441116, 0x5665ABD8, 0x819CFDD5, 0x816F1318, 0x0D79FDB5,
+0x7AF9C357, 0x3758CCB0, 0x81742160, 0xF9457280, 0x0EC13FB3, 0xC4B06F05, 0x78296209, 0x70DE0F4E,
+0xF3B1CCB9, 0x82C5B8F0, 0x9318D6A0, 0xDBD81693, 0x626FBBD2, 0xCD3C05A5, 0x479816DE, 0x87058FEE,
+0x4601F471, 0x3112D478, 0xF0E356C8, 0xD1ED3B8C, 0x8CB26573, 0xF09B292C, 0x67CD44FC, 0x4720D897,
+0xBE1E994F, 0x08D9159C, 0xE8FF698A, 0x1E50CB61, 0xD278460F, 0x7EF5C201, 0x3C9DF3DC, 0x7F25EC6E,
+0x79821767, 0xEE7C910D, 0x97A8ADCA, 0x85FA52D1, 0x3ABF7345, 0xAB626613, 0xCB9E0766, 0xAFAB1C08,
+0x591A48CB, 0xFEA52161, 0x43A2AC60, 0x6A698FBE, 0x5BAE71ED, 0xE3B054C7, 0x203664E0, 0x209B1883,
+0xFAAD65E1, 0xB1A698FC, 0xB95DAAD7, 0x70E35A36, 0xBA8E1B58, 0xC18F2F19, 0x29F76F91, 0x0FF20CD9,
+0x49CD915B, 0x20A2E120, 0x8D855E60, 0xF0B27DF7, 0x698C9622, 0x84E7F59A, 0x2A6569EE, 0x17AFB9E7,
+0x419FC3D6, 0xBBF96D34, 0x60A93583, 0xF823ADCE, 0x550EBC04, 0xAE1A2C9C, 0xB6BA7EC3, 0x30C58996,
+0x00E68E32, 0x551D43A2, 0xAE2BCAE6, 0x031665AD, 0x076ED910, 0x4E6EA25A, 0xBFCDD1EC, 0x4D4F25F3,
+0x3DABA3FF, 0xAD48885D, 0x1A31FC69, 0xB29179F8, 0xA07228E0, 0x73B985A9, 0x92F35C44, 0x456B4AB0,
+0x5FA242F0, 0xF84C4A25, 0x3B47B079, 0x46ED2DF2, 0x592E8556, 0x6568BA70, 0x7E64E56C, 0xC671E77E,
+0xF6341F5B, 0x1EB5467C, 0x3A98CC23, 0x01F4B720, 0x45FC277C, 0x8761D4EB, 0xA03C1C6E, 0xA79FE0D5,
+0x3237B290, 0x27636038, 0xD6792095, 0x59BDB42A, 0xAC4DFD4C, 0xB78D0BC0, 0x1EA78983, 0xD870BCE4,
+0x2155B6FD, 0x50293F75, 0x4948558C, 0x641C2167, 0x144A05F1, 0x6AF45265, 0xD4DEA95C, 0x5C06F089,
+0xDCA5E151, 0xC0DC1B63, 0xD85BDE69, 0x4675FA5B, 0x8D03F808, 0x666EB41F, 0xEDA0B2ED, 0x06519E77,
+0x5C9D3EB7, 0x03B97B14, 0x2C2FBB41, 0x1A636093, 0x836DF0BB, 0x5F9487A5, 0x33E22654, 0x31F595A6,
+0xE2BB64BF, 0x0AC715E5, 0x7A80C595, 0xEA6025AA, 0x335CF671, 0x3E5C6248, 0xF3309A94, 0x2CC8DF3F,
+0x470792F3, 0x1BD3CC7A, 0x110BEC2E, 0x05430E2A, 0xB0694B9F, 0x291BBC53, 0x57D45D96, 0x2D47F9AD,
+0x4BB8D917, 0x7296C8B7, 0xCE99B61A, 0xD33F6D46, 0xB91D8BF0, 0x50A15697, 0xFCF37C59, 0x5D250DAA,
+0xCB5374C7, 0x7EE1ABA4, 0x36B47602, 0xF0363BAE, 0x9A47135B, 0x8B5FA821, 0xEEC5AD03, 0x8AB7C694,
+0x1794A21B, 0xF7CB1956, 0xE2321FD5, 0xB8AA1763, 0x45A3904E, 0x4D5549EE, 0x550027D7, 0x356D04BA,
+0xD31A019E, 0xF70CE26F, 0x02B69CD6, 0xDDA1604A, 0x1D0DADBD, 0xA38759A1, 0xE25CB7FE, 0x13D2EA9A,
+0xC752490B, 0xF36417F0, 0x6774C47E, 0xE8028679, 0x3FC7758B, 0x5AE419C0, 0x0379C143, 0x5E49098D,
+0x7EAB576C, 0x53369AC2, 0x4EA90CCD, 0x0A526343, 0xE816AD29, 0x2987E996, 0x636EF430, 0x3B227E0B,
+0x41EA2D7D, 0xC70FA8A9, 0xC9F3D896, 0x503BD4B8, 0x994CCB25, 0xF882326F, 0xBE449682, 0x281A4347,
+0xF591DCDB, 0x0DCF2C2D, 0x9E0D7704, 0xA1C249BB, 0xF1666E71, 0x0A436474, 0xA6040917, 0x22FA6BF4,
+0x3586D7C4, 0x39632E63, 0xB939B46C, 0x21C1C525, 0x4D03D43E, 0x403472C5, 0xB2ACBD0C, 0x40F39918,
+0x749C61B6, 0x2437DED5, 0x556B0B38, 0xAE983AC6, 0xBE5C8F38, 0x59343451, 0x5C33D809, 0xD1D3E7D9,
+0xB3D3515B, 0x58102D8E, 0x8DF9D10D, 0x07304B50, 0xC1C0D4D0, 0x9FA97B0E, 0xB1A24787, 0x9D717A6E,
+0x777101D0, 0xD3405BF9, 0x1FBA50C3, 0x40C44BD8, 0x727E27FC, 0x655F3D18, 0xD184854F, 0x3B61645D,
+0x160FD8CE, 0xFB5795D1, 0x10003C64, 0x2DA06B03, 0xBF22FAE5, 0x2E7B7172, 0xCF102044, 0xCA64DEB6,
+0xB6BA4798, 0x52181EAB, 0x38ACB756, 0x132AB151, 0xC2D5A22B, 0xB1A94534, 0xC4FCD5B5, 0x37E4555F,
+0x6104C246, 0xC4832263, 0xD9D45C2B, 0xCBB1F87E, 0xFF5455F1, 0xD28D1939, 0x6F93912D, 0x538AB005,
+0x6D940AE1, 0xC4A825E6, 0x6371D594, 0x993EA751, 0xA47BAF73, 0x5A516348, 0xA7D4B42B, 0xF84A6A74,
+0x145C7A24, 0xB1CA2238, 0x034C76B3, 0xE2C238FA, 0x547364DC, 0xAE9AC390, 0x66312D44, 0xC6E489C3,
+0x5E416397, 0xD07777CE, 0xF5FC935A, 0xEC76417F, 0x49A249E3, 0xFDD7F282, 0x6C62FD24, 0x7269CE5B,
+0xF05B68AB, 0x182FE21A, 0x3AC9FCE6, 0xB92B69FA, 0xF4088B44, 0x0720D3B6, 0xB1D67954, 0xB9EDD34F,
+0x60B58FB0, 0x2A0F4C4C, 0x9DBF141E, 0x806D5423, 0x9215F6BB, 0xF66442FE, 0x8AF6B785, 0x4F6A5632,
+0xB9B77CEE, 0x4C4914C7, 0x6A23CB9E, 0x5BCB8275, 0x49DDF400, 0x93C5C1E2, 0xB1019FAF, 0xA110357C,
+0x6A13D7F6, 0xA1B689B9, 0x27891C76, 0xE3D36072, 0xB3405DAA, 0xB06BDE50, 0xF5B4C659, 0xEC711939,
+0x31632FFA, 0x76C50D85, 0x94FA5AED, 0x1D8CE452, 0xCC008650, 0xE9318569, 0x6B291305, 0x2402A538,
+0xC1B5518B, 0xCB7FD8A4, 0x24DB1FA8, 0x8B77BEC6, 0x2E9EA3C1, 0xFA9497B3, 0xF9E4FB9F, 0x8B755464,
+0xDB8B4B38, 0x38C41E91, 0x68F105DA, 0x52042886, 0xF20EF228, 0x5F619004, 0xA4BC24D0, 0xE86872A1,
+0x24D19BC5, 0xEDF48301, 0x5E3EB7AC, 0xFDE677A5, 0x449259CA, 0x095312CE, 0x0E7E737D, 0x9AC61227,
+0xC6F71522, 0xE859F251, 0x666DC0FA, 0xA7DE271C, 0x26F3ED2F, 0x2AD6888E, 0x7BDD3952, 0x5753243B,
+0x64F66597, 0xCD0E2D39, 0xFD866D2D, 0x1893BFA3, 0x394D72E1, 0xF688E31D, 0xEC2B161C, 0x3245E38C,
+0x3909AC66, 0x1A0AD7CE, 0xB8410AF9, 0x0FC8E6FC, 0xF4B7FE14, 0x3AEBC529, 0xD0E3C446, 0xC2D9E03E,
+0xF9666742, 0xD12FDBC4, 0x4FEBB7B0, 0xA0F9F5CB, 0x5E612C87, 0x85158C53, 0xBBD99634, 0x572E4603,
+0x7CB848F8, 0xA47E56AF, 0xF3B03151, 0xBFC5B3E2, 0xD09943EA, 0xDF6B528A, 0x1D7C66A2, 0xB412E28E,
+0xCC4AAD64, 0x5448CEFD, 0x7C894FD6, 0xAC50DB80, 0x71DD73CE, 0x47165052, 0x0800E168, 0xE628BA12,
+0xD5ED0578, 0xCF4009B1, 0xAD0DD838, 0x163A5167, 0x60A8E643, 0xFB2C8E10, 0xE323F5B2, 0x2F50F2D3,
+0x6760929F, 0xFC2ABEA9, 0xD8DB624C, 0xBBD8CCB5, 0x6BEC6865, 0x33FF3AE4, 0x711A6CEB, 0x5D7E03A7,
+0x74D6F550, 0x1B9C31FA, 0x01A0B325, 0x7060320D, 0xFE24A396, 0x24C0CBC7, 0x2817AC3D, 0xA343A744,
+0x469EFE01, 0x49F11332, 0x510CA786, 0xFFDB80F6, 0xC68F1FC2, 0x6D1421B9, 0x1BED0950, 0x7D40EEB7,
+0xD2DAB348, 0x233075E8, 0x95B50A3B, 0xCB421E83, 0x4BF264F1, 0x34DD72B7, 0x8A367C24, 0xBEF49F10,
+0xAE8D9D97, 0x03343B52, 0xA4FA2258, 0xC9FD39A6, 0x435B3A98, 0x53B05AFB, 0xA2532944, 0xE516696E,
+0x6D839F1B, 0x8F2858FF, 0x421EC2D9, 0xBF7DFCE7, 0xB0C857DE, 0xD6ED0D71, 0x1BBB506B, 0xE17A1E0E,
+0xB240E5A9, 0xE87CBF70, 0x840D03DF, 0x1DB673C1, 0x30CE6C44, 0x04D77890, 0x5A469FCB, 0x970FD56C,
+0x158FB957, 0x11497E7C, 0x74C3A7E8, 0x4C354116, 0xC0B9CB78, 0xAA61D06F, 0xF446C5E4, 0x8372261C,
+0x579B1AB2, 0xB7848B75, 0xDAB8FFC5, 0x3F79635F, 0x662CC2A7, 0xC99AA6C6, 0xBBC5C71B, 0xEC1FD803,
+0xECA599C9, 0x8B1FF932, 0xA5F2D6D7, 0x8BE6BB93, 0x35888E68, 0x8FD405BC, 0x5AF13D69, 0x6653EC82,
+0x954A7BCD, 0xA3863924, 0xC4E988FE, 0xCCA099E0, 0xD33C5155, 0x13F3537F, 0x5939D5C1, 0x2B3B2B2F,
+0x05DEB857, 0x14521261, 0x86283D41, 0x3FEAA9E4, 0x072CB422, 0xE42D4F15, 0xDAF91C57, 0xDA9D1A7E,
+0x823CA826, 0x569590BA, 0x9FA059A1, 0x20BEDC1F, 0x6BC5D88F, 0x3B3852E2, 0xC0A07D02, 0x4779505C,
+0xF887D861, 0xFA9CE970, 0x2B18D991, 0x5FA574B3, 0xFC34DF98, 0xE2D6D58E, 0x9A3D5637, 0xBFCD5096,
+0xBB9F11D4, 0x95C0D5DA, 0x2D4FF9F5, 0x485340D8, 0x71E8EDD7, 0x6B6C1200, 0x10F70513, 0xFA353B5B,
+0x488F78D0, 0xADC6B82D, 0x8412C67E, 0x5E511A81, 0x4CAD721E, 0xDBBDD591, 0x3D29ED76, 0xB99956CC,
+0x67113743, 0xB9DD8F02, 0xEA7D984B, 0x75BB7F76, 0x7E161462, 0x79AB8FEB, 0x3D08579C, 0xF0A81542,
+0x4A3E8E57, 0x3536DE63, 0x2BAD80EE, 0xB3468BF5, 0xDF5F6D37, 0xB67E493A, 0xB7394F5D, 0xAC359CB0,
+0xD4E279D6, 0x5F2ED238, 0x1FE5AB27, 0x41F01E78, 0xB014246F, 0xDDBCE331, 0x14F3A803, 0x8D8784CF,
+0x9227F41A, 0x682304DB, 0x1BC41D91, 0x96114D8C, 0x918F2B14, 0x0759D375, 0x0C42F949, 0x2A35392E,
+0x02BDCBBA, 0xF1633709, 0x365BA4C9, 0x698B25A4, 0x785E8404, 0x497BAD9C, 0xF00F93AF, 0xF703CDC9,
+0xA24491C0, 0xB612961A, 0xAE35BA29, 0xD4A107F3, 0xC787AD50, 0xEA2DDAEF, 0x691650E9, 0x889B5CE3,
+0xE4AD9B03, 0x53D8F895, 0x7D18A29E, 0x2B647A92, 0x0B7AE253, 0xA02C6E5A, 0xA39BBB7E, 0xC953694F,
+0x112F90C7, 0x19D0E054, 0xCFF320FB, 0x422CC31C, 0xE4B5423E, 0x7E384C38, 0x1966C6FC, 0x9848D6A6,
+0xE0CFF62F, 0xBAD2435F, 0x60F3C229, 0xAF4A4A0C, 0xE93C51BC, 0x85064694, 0x26D702B5, 0xE30E8B3B,
+0x2D5FC706, 0x1D110689, 0x341B12EB, 0xFB36CD5A, 0x1E0D9728, 0x036AD0CF, 0x80BD2D79, 0x2F9C4A79,
+0x3A2126A0, 0xD1E4C179, 0xB8777C0E, 0xAA4F6396, 0xBA0BACE2, 0xE25D7449, 0x58EA0C8F, 0x1FA939FE,
+0xF210281B, 0x24CEB15A, 0xED1ACC35, 0xB5177880, 0x67FFCEEF, 0x87236331, 0x27FE4099, 0x24A3CA65,
+0xE7F5B776, 0xFB0D9527, 0x160B773F, 0xDFD504EB, 0xEF051F04, 0x81F57A43, 0xF94146A0, 0x1433721F,
+0xC8543768, 0xAE3CBCF5, 0xE2567A80, 0x563C0360, 0x4856AE95, 0xB41AA084, 0x04C4AB4D, 0x5077E17F,
+0x09B1A17B, 0x031767C2, 0xD0778000, 0x2157D5E6, 0x5E3311E5, 0x7C5302EA, 0x6D2EAD3C, 0x91D84AF5,
+0xA73BFC4C, 0x65151C96, 0xC2286303, 0xCFD17D15, 0x30648A8E, 0xD58BA74A, 0x07FFF6B2, 0x72FDF622,
+0x98D704F8, 0xDFC78E48, 0x0698CCBD, 0x4F686FD4, 0x7BFFCE4A, 0xA08323FA, 0x4DE33ED0, 0xF85D2E2D,
+0xA01841DA, 0xC7CB82BB, 0xB0A72431, 0x015C44ED, 0xF0D37DF8, 0x329ACE97, 0xF796FF8C, 0x06C2B070,
+0x086F4272, 0xBE14C13C, 0xACA02C31, 0xBADA6217, 0x7AAE1BA6, 0x710B5029, 0x1D969017, 0x4A8D9006,
+0x7E55B156, 0x18E68BE0, 0x344074FB, 0x43EDAFDC, 0xEBED2D6F, 0x34B537FA, 0xFACF8615, 0x810ECC21,
+0xEFC318F8, 0x4BF3B14A, 0x33E41979, 0xE7A3D193, 0x0036E296, 0x6577358F, 0x385F4C25, 0x6F658825,
+0x4E36383A, 0x1B6A234E, 0x35AC67A4, 0xAB650E71, 0xEC294ABF, 0xDC05CE83, 0x9FC38BC6, 0x1F3CFBFB,
+0xF13BB7CF, 0x672D0C25, 0xAF580B8D, 0x689DF281, 0x2CD92768, 0xEBA0DD7E, 0x6CBFB264, 0x5C9CEAAC,
+0xB1E7F14A, 0x8D2E90A3, 0xB1D37F72, 0xD412A122, 0x63A62DFB, 0x489B5ECD, 0x425B8D42, 0x7A4B72DD,
+0x728C51CE, 0x6ABBB878, 0x1740B51F, 0x25422D91, 0x7F682225, 0x993D0F2A, 0xD7066DD1, 0xD1853CDA,
+0x2A03F5DA, 0xC010C3BA, 0x082792B2, 0x417FA730, 0x372392B9, 0xA49C931F, 0xEBB66482, 0x646CA306,
+0x86328040, 0x3DC7CB26, 0x54CF6513, 0x0CDED2F2, 0xD4CCEF84, 0x4051430E, 0xD825EAEE, 0x3B3ECD81,
+0x1E7BA695, 0xDCEF5E49, 0x9FD55275, 0xFD212237, 0x19121AEA, 0x880CC759, 0xA7EFD050, 0x0FB28435,
+0x7DAAAE6B, 0x10FDB328, 0x86487347, 0xE7668B6B, 0xC5261E34, 0x3B9E8268, 0x4BEB7995, 0x9EC68864,
+0x0EBE3E1C, 0xC13D45A0, 0xA71AF64D, 0x6D5B24DE, 0xBCA5B735, 0x74B24D9A, 0xD7CCD34F, 0x76B8B442,
+0x9073A97E, 0xE74F0DB1, 0x7C11133C, 0xBA848581, 0xF3D18840, 0x20F8F73F, 0x2B207CE5, 0xB71ECA75,
+0x353C6509, 0xC29ED415, 0x8A5D9FE1, 0x317E924A, 0x000355F9, 0x8FFB53B4, 0x90F2AB20, 0x362FFCC0,
+0xA675D642, 0xE2F83FBC, 0x4E387204, 0xD635747C, 0x0A3CDEFE, 0x98BA8728, 0x3B20230C, 0x6A955C37,
+0x158C3C25, 0xC97550C5, 0xD07738BB, 0x3764E264, 0x1A56D663, 0x531EE721, 0x205B5BB9, 0xADB6C7FB,
+0xFCC8300C, 0x53CB55A9, 0xC458BF81, 0x45522A13, 0x1B0EB13F, 0x529AD6AF, 0xA9FC1CEF, 0x93CE47A5,
+0x2375E080, 0xC361EB8B, 0x25C5400A, 0x9ED8AE25, 0x31227024, 0x9E3E2E6A, 0xD8FC244A, 0x6D7939C3,
+0x7CA99BF7, 0x725B55B3, 0xB0D51B0C, 0xD10AA1FB, 0xC188142E, 0x4E49460A, 0x971DF94E, 0xA00AE104,
+0x1D1C5B61, 0x20B13B1A, 0x32D787CC, 0x30F8FF65, 0x36C1F6F1, 0xDD2A979A, 0xA8EEF694, 0x2A537292,
+0xF3D79634, 0x0CEE3E57, 0x8CB51468, 0xCF9CB426, 0xBA8232E1, 0x6FAC5D54, 0x02EBF7F3, 0x14FD46E5,
+0xA02279DA, 0x20DE7EB9, 0x297668C4, 0x3950A64B, 0x438B6516, 0xDC899754, 0x2A4DA0B7, 0xFB022EA4,
+0xE1901651, 0xA9DE5429, 0x22D8BD34, 0x21421FC2, 0x39A45CE9, 0x9EA1F712, 0x564A2993, 0xB526FB33,
+0xC5451F69, 0x67CC6726, 0x9B3713D3, 0x033B21F1, 0xAF0DAD6E, 0xFD7B9066, 0x19145608, 0x5F868B3B,
+0x6F230CEC, 0x268BA4CD, 0x34E9B6B8, 0x276A8AC9, 0x8E30E3A3, 0xFBD79E72, 0x24F6C192, 0x4BDFA09C,
+0xC0F47089, 0x23DC6B54, 0x12637CD4, 0x6A0D69C5, 0x44F767A3, 0xF36E0671, 0xCA8C8659, 0x0DDECA20,
+0x3B6BB324, 0x29B5ABBC, 0x03CDECF0, 0x57F06121, 0x58AEEE90, 0xF454A387, 0x005BEEC6, 0xBCAA0F8C,
+0x8F5F2E61, 0x5DD28207, 0x88674A29, 0x0C98DE31, 0x24338D8C, 0xCF088A2A, 0x72B5C4FA, 0xE94A7546,
+0xD09C8607, 0xD64EDFAE, 0x0990B1B9, 0xD2A9032F, 0xAE0A2400, 0x1E0D8888, 0x436326A4, 0x32D7C088,
+0x5272CDA8, 0x1A75BA3E, 0x3C2A1D1E, 0x472514C4, 0x8BB0B575, 0x41589C2E, 0x9B5F657E, 0x96BC136A,
+0xF4475377, 0x917849ED, 0x37A525AD, 0x8D59BD8C, 0xFDD29214, 0x18B8AF46, 0x57525F87, 0x3B1DE2A1,
+0xEED994F0, 0x6C30431F, 0x6EA13AED, 0x013CCBB0, 0x374737BB, 0x070EB636, 0x761103D8, 0xBFB7FBC7,
+0x602D025E, 0xF7A007F6, 0x1B0588CE, 0x6C676C3A, 0x2969210E, 0xBBA122BA, 0x27E58097, 0x42E6CAEF,
+0x7C8BCC06, 0x686415CE, 0x936330B5, 0x530E96C1, 0x31249379, 0x1C49BD37, 0x90B122BE, 0xA1191575,
+0xB6F6B3D2, 0xF82E671E, 0x3CC88E92, 0x58D9ED3A, 0x2CC85E27, 0xF5505946, 0x4B9B367E, 0xD492870E,
+0xED8553C0, 0x0FFD1693, 0x18734961, 0x48D15B32, 0x75C5B4F6, 0x9FCD22D5, 0x9CCCE9B8, 0x44A54B02,
+0xC0CFDB65, 0xCDF8FF15, 0x56C0B84F, 0xC80E2BA2, 0x7CCCF8CB, 0x42BA6BD4, 0x392FEB52, 0x775A5A84,
+0xE55D8988, 0x5A0D1D5B, 0x19E72F65, 0x6496947B, 0x41902C44, 0x06C5005C, 0x928FE0E9, 0x29D11D8D,
+0xFBF2A5EC, 0x1C923895, 0x7F52DBF3, 0x51A16BD7, 0x60E48E22, 0xBA3DFCBB, 0xFDE1426B, 0x3D63FD5B,
+0xD349CB25, 0x0018A94B, 0xC9DDCC8F, 0x7C101661, 0x5A86A4E4, 0x4135BD68, 0x0E69BDE4, 0xF30C1273,
+0x825D5AFB, 0x7247FDFE, 0x78F8BDE1, 0x0B3B1888, 0xF219D9EB, 0x6392E7E1, 0x578B88D6, 0x7E96C01B,
+0x489C1916, 0x3FA77A6A, 0x4C7DA1B6, 0xF791AC7A, 0xE946573D, 0x76619D43, 0x99AF80E4, 0x6C83054F,
+0xBFBDD68B, 0x5D3A62AC, 0x83974FA2, 0x85BBA358, 0x45DD57FF, 0xF6DBEDAE, 0x8FEA813C, 0xE7699E6A,
+0xA1B2D3DA, 0x554EF911, 0xBC552D05, 0x069515D7, 0xF88959A2, 0xADDB36D6, 0xF932DFFD, 0xDE1BEF23,
+0x98D123F8, 0xA2B683FB, 0x8E88A2F7, 0x838C7933, 0x641C0809, 0x0EAB6364, 0xC79DF591, 0x4F73F4C0,
+0x35C81BFB, 0xCAF4ABC6, 0xBD341981, 0x4E56591C, 0xCA521619, 0x256B23B4, 0xA094AA0D, 0x9A2E39D0,
+0xD09B2DC0, 0xDB8B32FE, 0x50F5796A, 0x22EB2D14, 0xAD3C9F24, 0x3D69187E, 0xD8E1FDFF, 0xEC99C7BD,
+0x6542E468, 0x12C1C654, 0xAEA5B315, 0x8F139FEE, 0x99144D89, 0xB0650085, 0x1232F2BD, 0xDD4FD7F3,
+0x3D67DEBC, 0x3FF9EB9D, 0xCA2A6A2B, 0x9E45C6AD, 0x759E8CAC, 0x89E9505E, 0x3E1EED25, 0xBA3D6C02,
+0x93DEB55D, 0xB3B073DE, 0xE75E08B8, 0x4239743D, 0x5A2D9039, 0x097F1924, 0xECB912DA, 0x1A15A9B4,
+0x640933E8, 0x94FDB444, 0xDC0542EC, 0x7DF6957A, 0x2AA7D9C3, 0x00D6710D, 0x09ACF151, 0x2FCBDAA1,
+0x4A624FEB, 0x0706AF22, 0xDC4D2B60, 0x3A95C787, 0x81AAD582, 0x336DB225, 0x1D0DBB86, 0x9B53E7C0,
+0x16D5C773, 0x8909E1A9, 0x62172C05, 0x6F428268, 0xC667CE69, 0xE7D7F183, 0x1ACCF57A, 0xB90FDF85,
+0x1E9D93E1, 0x5246B0DC, 0x38524578, 0x07A59566, 0x3CE18598, 0x64978749, 0x55C8F304, 0x9E361B95,
+0xF5DD4879, 0x6F4FF673, 0x6D31AB79, 0x7D5C3C22, 0xE762CEFF, 0x704EA0EE, 0x47E0940B, 0x39AF77DE,
+0x7C8E7955, 0xF6D6B509, 0x69DD334F, 0xC8E5F10A, 0x12E1AA84, 0x820F442F, 0xDF308C32, 0xC04E73A5,
+0xED5572C8, 0xB96B70F3, 0xAB70ADFF, 0x5BA7561E, 0xC8E03ED5, 0xAAE29736, 0x6EAA2275, 0x14ED71C5,
+0x493686AA, 0xD7EFACDA, 0x95854A5A, 0x9C1A5393, 0xD231ABFD, 0xCDD97DA7, 0x861E13DA, 0x9B0350AB,
+0xD023FE9B, 0xB3F4DBAD, 0x4D7256B9, 0xBF93DB36, 0x31D65AF5, 0x87C84120, 0xDF29122B, 0x64324CE8,
+0x88B8303C, 0xE501336E, 0xE5774BD2, 0x2597C4EB, 0x8B41709F, 0x3B2C4933, 0xCFD0392D, 0xC778A7EF,
+0xB151F919, 0xF7FF484D, 0x3ED3BF66, 0x26D02AF7, 0x45B5B0F6, 0xBEDB4537, 0x31266A95, 0xE23326AF,
+0x1740F107, 0x3A3E8B04, 0x1F6D65EC, 0x9A558014, 0xAC3E87CB, 0xFAD638A7, 0xCCF75529, 0x2B0C3755,
+0x28328512, 0xF8183D1A, 0x75B41437, 0xD95CA9A0, 0x11CCE6B3, 0x95CE4509, 0xCDF35E60, 0x95514558,
+0x8277A1E9, 0x87BE39C0, 0xB7C97BC5, 0xE173E30D, 0x64FCFFA2, 0x5B7A88DD, 0xFBF229A3, 0x6678FD2B,
+0x829E4878, 0x676628B3, 0xD948C8C3, 0x8C517F41, 0xE5EF8FCF, 0x0469A13F, 0x066A05B7, 0xD2B57446,
+0xF7A05C2C, 0xF56EF2C6, 0x0AF351F6, 0x4A0DF5C8, 0xE32E81CD, 0xC4830735, 0x1DDA3EF1, 0x32B202C1,
+0x6AA018A0, 0xF6A8FE5B, 0xFF21269E, 0xA2615CBB, 0xA0FA1664, 0xC799A283, 0xC68D036F, 0xC808102B,
+0xC7FEA2B0, 0x96DF6F0A, 0xD42782AD, 0xC00533FA, 0x06D18F95, 0xB07A0AEA, 0x224FE723, 0x242C23A7,
+0xCF474863, 0xF711EB98, 0x297F248C, 0xBB338F75, 0x3B578854, 0x2242BEAF, 0xAA52CE96, 0x86A76D89,
+0xCB5423EC, 0xC816AAAF, 0xAF6A08D1, 0xAC009D08, 0x2FB1462C, 0xF0E62598, 0x47E60706, 0x6D7BC4FB,
+0x25C2F597, 0x19D6B1D6, 0x1052402E, 0xCAB6CDC4, 0x658136B7, 0x47946ED9, 0x62D3FD81, 0xCE6F3DAC,
+0x3E87BDC3, 0x775FF99F, 0x162D073F, 0x604EA83F, 0x5A076944, 0xB515056F, 0xB5418D58, 0xD958AA68,
+0x6A811972, 0xD9FDEA16, 0xFBAA932E, 0xB4278D72, 0x99CA36F3, 0xF4A8F8F3, 0x3C16CDBB, 0xF83C8B7A,
+0xF6F04243, 0xE6155EB2, 0xC8C2D813, 0x65AF1D71, 0x6BA455FB, 0x170B6F04, 0x087D2B68, 0x69989EC3,
+0x7205AF23, 0x65970658, 0x0F77B564, 0x4FD9CE91, 0x42FB3550, 0xB6080BA4, 0x7E9A53D9, 0xC4F6DBE0,
+0x77BEB339, 0x78412C18, 0x2A81A03A, 0x49CFDA5C, 0x9A62722A, 0xE2085761, 0xA7CDE305, 0xA783596F,
+0x750B8C62, 0x25E68BD0, 0x47212599, 0x4B439FBC, 0x1BF47FB9, 0x1522FC8D, 0x6DB2F959, 0x509AA49E,
+0x7D1D3622, 0x53F91D08, 0x32935AD3, 0x0E9AEC95, 0x9EBF9215, 0x6F0EEACF, 0x02BC6A28, 0x90230D32,
+0x547DE824, 0xED006E7C, 0x442DBD71, 0x61B641FE, 0xDC63432E, 0x6B6DD01C, 0x23F97889, 0x9DDFA18E,
+0x2C18873D, 0x1402840D, 0xA3149A56, 0x4CC4555F, 0xD1533803, 0xEDD05C24, 0x042D64D1, 0xA51F6065,
+0x3B3A02C1, 0x6F0FEC3A, 0xC0B06AD5, 0xF2D4E1C5, 0x5EDB0FEF, 0x5CAF7320, 0x092E789E, 0x4FA234A8,
+0x91AF0F13, 0x29E00E61, 0xF3809B4E, 0xA8753A68, 0x2703F32F, 0x019A8936, 0x1C598F93, 0x020932C2,
+0xAF4D53A2, 0x1DD63E42, 0xF888AAB1, 0xA1A9437A, 0x56AD96D9, 0xA4FEAB77, 0xFA338871, 0xCDEFB283,
+0x1B44F778, 0xE82DCCCD, 0x1E87F672, 0xA588F344, 0xB2DBE2C7, 0x2C24A0D0, 0xA9C3C082, 0x7F63243B,
+0x68D67881, 0xA4869916, 0x71668F2E, 0x4C5C92B4, 0xD5177F0B, 0x69496045, 0xDDAE0129, 0x4FF90241,
+0xDD4F2C89, 0x730DA05E, 0x305D0DF9, 0xEF8E1111, 0x6A3F5062, 0x6EE2D27D, 0xA25F832A, 0xBF3DC8CC,
+0x6C4E5C61, 0x888EC55A, 0xDD0A1911, 0xF0504ACE, 0x4B4139A1, 0xFE131A8F, 0x42FB1B36, 0xAF4107CE,
+0xC68C4DD6, 0x72D62776, 0xE3D36A26, 0x46020DF1, 0x17848DE3, 0x651BCB90, 0x9057F19E, 0xFD9A7CBF,
+0xA9D53882, 0xBA6D3AB0, 0xAD0D0C4A, 0x19F77EFD, 0x8AB94482, 0x8A50C903, 0x0047A43C, 0x709BD779,
+0x29C15595, 0x7C11479B, 0x8D236544, 0x7729CD27, 0xA953EA91, 0x515B2F8B, 0x55398462, 0x23227300,
+0x6262D755, 0x9D830867, 0xBDB88806, 0x546A0483, 0x9F1595EF, 0xD2BD7E6A, 0x91CA1405, 0xFD236F38,
+0x551B69E7, 0x54750D5A, 0xA4DC80CD, 0xA31671E2, 0xAE3F42E3, 0x6F13CAE7, 0x78A07231, 0xD515BAE5,
+0x18846FC0, 0x3E0A83BB, 0xC81739AA, 0x5EF52F6D, 0x3AB54CC9, 0xDEF34543, 0x03480819, 0x35256AFB,
+0x0C983290, 0x0E34EDD2, 0xC2839B23, 0xB613DAC6, 0x7683810B, 0xCF33F41A, 0x5ED1D841, 0x47E190E1,
+0xAA09E63C, 0x35BB090B, 0xFDB050D9, 0x3D7970C4, 0x3D3AB7A3, 0x1F134E92, 0xB10B8DC8, 0xAB36A361,
+0x4A582432, 0x0EBA1F40, 0x41C299FA, 0xCBCF07F3, 0x20F9542F, 0xC1912B25, 0xB37140BC, 0x21457DBA,
+0xE67456F6, 0x9A482FFF, 0xBD941CFC, 0xCD92FD3C, 0xA0EE3E0B, 0x91CE6103, 0x3FBA2916, 0x9DB85623,
+0xA9DDE015, 0x9D40B963, 0xA3E00664, 0x56878071, 0x9921AE33, 0x67B192BD, 0xD812C2FF, 0x83F3A198,
+0xF5D93310, 0xA1951760, 0xC5CE09C0, 0x19197BEB, 0xAAC8FC76, 0x30B26543, 0xACDC45A8, 0xD98ACC20,
+0x89DA80C3, 0x0340ECD0, 0x29EE54D8, 0xFB6400E0, 0x776FA124, 0xA7C88890, 0x37B74C8C, 0xC8E28E82,
+0x4E8D8857, 0xEACC569C, 0xDE977353, 0xC13C7678, 0x93E7A3A9, 0xC4DCD5FD, 0x1E96AB39, 0xC6A79E59,
+0xF07DB83F, 0xFD6E8BC2, 0xBD06572A, 0xF6EC0AE9, 0xCFA63F39, 0xB229D528, 0xF90C0F9A, 0xB5B7C0EE,
+0x5409D43F, 0x68F63CF2, 0xB4AF0E1D, 0x6B4FAFFD, 0x08C7E3E5, 0xAA74B957, 0x8B4EB73B, 0xA4EBF4C3,
+0xBB876632, 0xCC820F1A, 0xAD564EB9, 0x9156C081, 0xD3932643, 0x66CC0058, 0x21A7DC3D, 0x34502C3B,
+0x9B1408BE, 0x0A7AF2CC, 0x5798BBC6, 0x95CCFD73, 0xBA990A50, 0x5399A607, 0x74107F08, 0xDD34D3EB,
+0x49898BC9, 0x71358831, 0x79C5D4CF, 0x96D70969, 0x0246F22C, 0x0A19458D, 0x81959567, 0xC86E41CC,
+0xBC297346, 0x513017CD, 0x65246644, 0xACF9EA59, 0xBBE3530E, 0x3F044E4D, 0xFE35D7FA, 0xDD6F0265,
+0xFC383DC2, 0xFA0C5119, 0xBBBE55F5, 0x109B5D4F, 0xFA2BCDC6, 0xB8DE1F0B, 0x0B1E0E1D, 0x490BF9DC,
+0xFD6A5A6A, 0xCDFE25F9, 0x70216A55, 0xFA2B4E1F, 0x82952D43, 0x569FFFA1, 0x94EB9B15, 0x3351C2DC,
+0x1FBAA1DB, 0xB705EDD0, 0x8D068A15, 0x5673B06D, 0x6E8FE160, 0x8946A4C0, 0x4650C142, 0xAC2B717A,
+0x701A3C72, 0xCD9253A5, 0x805A1C92, 0x1859EA2A, 0x2871CCAA, 0xCD2F13BC, 0x93339A8B, 0xDA075F2D,
+0x1AE6A32A, 0x27C89599, 0x56C0D5E9, 0x427080BA, 0x315CBCB7, 0x1D355841, 0xEBF768EE, 0x762442D4,
+0x537721CD, 0xAC8A9994, 0x1854DA18, 0x0D96E04D, 0x5C16B8F8, 0xCB349C5E, 0xB3EA3976, 0x48D0FC43,
+0x229EC4AA, 0xC1E2472D, 0x4BA0643A, 0x610D7CD5, 0x511387B5, 0x079389FF, 0x968A75E3, 0x007DCF0D,
+0x408A0115, 0xFC761652, 0xE4ACD1B8, 0x49B1082A, 0xB6B52979, 0xD9F69B3A, 0x3D1FFB3C, 0x6DA6B845,
+0x75908CBB, 0xB3A6F665, 0xC8E82537, 0x596788D9, 0x1C920D40, 0xF3401693, 0xA3011A0F, 0xF9C45490,
+0xB2F15227, 0x28B2E3F6, 0x99E5EA7A, 0xF072B338, 0xB3774834, 0x073D4C19, 0x56D7C524, 0x19F59915,
+0x36C813B7, 0x276A31FC, 0x684EDE0A, 0xD78B8115, 0x3A159E83, 0x640765D4, 0xF77C5458, 0x19FB6DD9,
+0x454DC522, 0x9CF4757B, 0x56BDFD58, 0x496AECFB, 0xEB675D91, 0x927B6ED2, 0xE0A422E8, 0xB695922D,
+0xCC3C14F8, 0x24AA789E, 0x0B84BD9C, 0x2AF2BD02, 0x48AADA94, 0x0C81400C, 0x003981FB, 0x88191DDF,
+0x7FC02C05, 0xC3FD44A4, 0x6D0B7B65, 0xD6429286, 0xA2686C96, 0x65DC0C7A, 0xECCBF572, 0x97423977,
+0xF074258E, 0x6A86D494, 0x2CD3AB4F, 0x26D4DB84, 0x9F3B12DF, 0x60A0AE0B, 0xAC0E60CA, 0x5C530A3D,
+0x1CB3EE26, 0xED19BA56, 0xEECF130D, 0xD440A40A, 0x376B1E3E, 0xC5C5DB5B, 0x492895C0, 0x9101129E,
+0x4764F618, 0x6E4330BB, 0x1A23C38A, 0xF1E9FA3A, 0x7D62E226, 0xFB5C506D, 0x9F394906, 0x2E26B01C,
+0x0D3D918E, 0xC17CEDDC, 0x5242D9CC, 0x5E4A1742, 0xDD94E3B1, 0x83AFE58D, 0x29B7A77D, 0x0F80B3CB,
+0xC1483E97, 0x8D3F690D, 0x5902BD13, 0xEAFA0ACA, 0xD54B335D, 0x3165276A, 0x168DAE11, 0xC92A068C,
+0x4DA5E766, 0x8800738C, 0x184653A0, 0xCB124CF2, 0xF2899457, 0x8D0991AB, 0x6F887E05, 0x031DD841,
+0x32670679, 0x9EFED03C, 0x0B18800D, 0x4F968447, 0xD995CB60, 0x24F072D5, 0x4B0683E3, 0x557D1F67,
+0x8104852B, 0xB43F7E6D, 0x3804969E, 0x8BEEFE92, 0xBBAE0126, 0x785DBD89, 0x5555F260, 0x77B9291B,
+0x0A3D1A22, 0xFB747E7C, 0xEFFBFB88, 0x0BD81B4A, 0x7771989C, 0xED772604, 0x5E9A6C31, 0x55E8971E,
+0xD183644C, 0x55B0FAD6, 0xE10B0926, 0xFBE91A76, 0xF7112A03, 0xC367CE7D, 0x645952BC, 0xC6640B36,
+0xFED660D2, 0xA1F77AAB, 0x9DD389CC, 0x353B60FA, 0x06D3DB20, 0xC043EDD1, 0x48C03309, 0xF7976C58,
+0xC3998414, 0xF1D9C131, 0xAA32C6B6, 0x9750F59F, 0x4C1412B0, 0xD49E8912, 0xA8074C96, 0xD32EF3D6,
+0x98B8C3FF, 0x91555149, 0x3DDAF04D, 0x8C6474C4, 0xBB0A7886, 0xF2276495, 0x089F386D, 0x6F61BD0D,
+0x7CF0067F, 0xEBB91226, 0x8413855F, 0xAAD4A021, 0x0F9997BB, 0x3D0F0E50, 0x0BD89D3C, 0xF440013D,
+0x98EDC2F8, 0x9E90507D, 0x7073FE68, 0x57C6D663, 0x04136D94, 0x1178C3F9, 0x59B6871D, 0x66B47E91,
+0xC846C904, 0x57658E71, 0x91CA53B9, 0x725731F1, 0x8F0B725F, 0x818360A1, 0x54B06641, 0xA44857DF,
+0xFF4C3866, 0x5F2C4292, 0x04193207, 0x829680E8, 0xC69FE0DA, 0x5B7BB5E9, 0x6C340196, 0x05B5DFB1,
+0x31265B26, 0x501D2D4D, 0xD872F573, 0xCECB52F6, 0x98655667, 0xCA5EA49F, 0xD16F79F8, 0xAA1A32CC,
+0x6D10DB18, 0x862D488D, 0x5FCBF658, 0xBA0043A3, 0x10BCC1E5, 0xD0D78B23, 0xF5A2CA4C, 0x80A2FFC1,
+0x8C18CE87, 0xCFDF9E8C, 0xD275FE7C, 0x64C65010, 0x61ABAE89, 0xAB0F376E, 0xF6727620, 0xF86581EB,
+0x61B95115, 0x92FD88FE, 0x3877DE01, 0x4C1B0AD1, 0x6E397F47, 0xDB58729C, 0x0F924D47, 0x254E8D05,
+0xABD9AA67, 0xD6225DC9, 0xEED6BA29, 0x1E4A599B, 0x855602D3, 0xBC029C4C, 0xF09DB1B2, 0xC86AE01E,
+0x82241DBE, 0xEF7C5742, 0x1C8E1D8A, 0xA303787E, 0x8B5822BD, 0xDF71110F, 0x9D464CED, 0x05228FCA,
+0xF28E6338, 0x8EE69010, 0x14C7AAD7, 0x1AAB51AD, 0xEE4659AD, 0xBBA378E7, 0xC898B6F9, 0xE2F4C331,
+0x379B0D39, 0x31E4F1FC, 0x150E0338, 0x9AD5AE73, 0xC5B8C32F, 0x368FF01A, 0x1F084281, 0x909798E8,
+0xBF7D7D4C, 0xB92880DE, 0x1E4A2641, 0x020B44D6, 0xB1723B49, 0x9C167A39, 0xD54FCB11, 0xB17BF8DE,
+0xD1C1B121, 0x7FDDB630, 0xF9B04B08, 0x9AE3655E, 0x1F6B2152, 0xCE777420, 0x212E7998, 0x92D14853,
+0x9D068A27, 0x0F6C30C2, 0xFEF24216, 0x05AF0136, 0x88468632, 0xF234FCBA, 0xAA485EF9, 0x82D1D14A,
+0xCBF66595, 0xAF1315AA, 0xC816165E, 0x28059125, 0x578D0E9D, 0xD2D26B01, 0x67913FE7, 0xA1FE3A8A,
+0x4B27478E, 0x02E87586, 0x1C09C67A, 0x2BBBB475, 0x0C7768E5, 0x6E820303, 0x1608D8DC, 0x487BE9DA,
+0x729BCB22, 0x41F80907, 0x15A9D11B, 0xB1CA6071, 0x78FB8865, 0x215DB6E8, 0x7A5443A6, 0x59500893,
+0x004C3BAC, 0x48B99912, 0xDA537AB3, 0x52A3F3B0, 0xC9BDF7D2, 0xF094DDE1, 0xFB76A85D, 0xD9DF5441,
+0x010521FC, 0x56F3C658, 0x55A04730, 0xC1B30A94, 0xA6812901, 0x511F1F80, 0x642B6EFF, 0x8B7596C3,
+0xCE1731CA, 0x22928B1B, 0x629E41CB, 0xE0CAE6F1, 0x85584C45, 0x6CA696E9, 0x0024B027, 0xF33A93C0,
+0x67145E51, 0xF44FF3B5, 0x60539180, 0x4D86968F, 0xE3FD73B8, 0xF4E401C7, 0x2B9AF1C3, 0x2A402A60,
+0x775AA0B6, 0x352510E6, 0x60A4F7A1, 0xAF457108, 0x2481D084, 0x5A6F1EC9, 0xB4D2624A, 0xFC26DF4A,
+0xECA14108, 0x602FE4AE, 0x26AC03FC, 0xEC4CB272, 0x9F47E9E5, 0x4E4F9111, 0x73ED6A96, 0xEBC8F799,
+0xFAC9AD0A, 0x10F0CAB7, 0x371286AD, 0x861944A9, 0x75831483, 0x5CDF3C29, 0xB5DEA1B0, 0x5728420B,
+0xEDB68F1A, 0xA4CE95D2, 0x90D7F834, 0xAB14F67C, 0xC6A163E5, 0x22837C6F, 0x1C970D79, 0xBB56EBCA,
+0x2C30424A, 0xBCCFFBAC, 0x66234839, 0x884963D7, 0x4A4D5624, 0xC596EEFE, 0x218A3801, 0x79F25018,
+0xCEE05C5F, 0x650E457C, 0xB68525B7, 0x2E70BDBA, 0xF8D2EDC5, 0x158D9BA9, 0x27734D08, 0x688D2BA0,
+0x116D6C71, 0xDF4EBEE4, 0x342F36F8, 0xE5ABB3B8, 0x7E040921, 0x60B0376B, 0x50D0CEB0, 0x808F7CB8,
+0xA456B803, 0xBA533FDE, 0xC1B7A5EE, 0xD0E63050, 0x7814BFD5, 0xFB27E726, 0x8C556B18, 0x3B902E20,
+0x667FC950, 0x4D86C611, 0xABF570F7, 0x591A10BE, 0x6D04A22A, 0xB3CD06C1, 0xB46687BC, 0xAABC3451,
+0x7FB87753, 0x1D1D1C55, 0x7630FF6F, 0xEA89DA88, 0x1769A316, 0x71CB5469, 0x71714D35, 0xDA476975,
+0xB80519AF, 0x157B369B, 0x0F1B736F, 0x1049A4AE, 0xD3F0909F, 0x8EFD2FD6, 0xC3FDB34B, 0xA8569B82,
+0x463D18B9, 0xDB5F9564, 0x7C598616, 0xC65673BE, 0x6640C007, 0x51314EA9, 0xBCD5C061, 0x332ECC9A,
+0x59D0279B, 0x9B196D99, 0x9E07BFE9, 0xAC1A476D, 0x2AAA5B26, 0x31F08749, 0xA5C51BA6, 0xAB23F880,
+0xC210CA51, 0x026D795A, 0xDF69BF56, 0xE520E0E1, 0x62B58855, 0xC285AFDE, 0xA97FCE55, 0x1D15A264,
+0x528A431D, 0x965FEAA2, 0x02C3016B, 0xAB41A4C8, 0x13B2C114, 0x3D183A85, 0xDAFF3589, 0xDB47BD59,
+0x10924D5B, 0xF9B09EE2, 0x5DED4581, 0xD9E22C0E, 0xD0E92F8D, 0xFE906C4A, 0xDD5EBA2B, 0xF93BF96D,
+0xB53A6976, 0x1C8968CC, 0x2A917F39, 0x0305C9AB, 0xA67AA501, 0x6B319BF7, 0xA563694F, 0x7A1D3BC6,
+0x1754E830, 0xC9BD60B5, 0xE6A111A4, 0xA38764FB, 0x0DB4E910, 0x15263B67, 0xFCDF5CCA, 0x4419D4CB,
+0xA7CA24C8, 0x29D6F05B, 0xF709DA59, 0x940C105B, 0x0453F144, 0x98520819, 0xBCE28E9A, 0x90165AFC,
+0x8A87FCEB, 0x2A47E54E, 0x555B4B3E, 0xA33DD7B9, 0x5B716AD4, 0x5DB1C9FD, 0x64592908, 0x6E4D1384,
+0x1D1033EC, 0xDF058D82, 0x64EF27BC, 0xFE00F028, 0xD4B4B0E2, 0x83F30C58, 0x0197BDAA, 0xBB06BF86,
+0x9F1F035D, 0xC2D96634, 0x3EAF8099, 0xB5F8C0A9, 0x44B99326, 0xD058C116, 0x1ABC56BE, 0xBB756BB6,
+0xD1A79E35, 0x935B4CA2, 0x7AE3D2F7, 0x77018A9F, 0x8504E214, 0x830A7553, 0x874A3DE3, 0xB27FA654,
+0x0A30E306, 0xDE46E0AC, 0x71377E07, 0xB1092973, 0x951AF6F2, 0x4B2E304C, 0xF73BED84, 0xA2720185,
+0x804D93D2, 0xE3AEC74E, 0xAC381CBF, 0x0D4E2C6D, 0x49A3C6B4, 0xB99E255B, 0xF2434510, 0x290D0E12,
+0xBD34E466, 0x8455EC27, 0x21D9B20A, 0x4C50DCD4, 0x62CAB2EC, 0x9891E243, 0x7422C2A1, 0x460F60FE,
+0x88C3D841, 0x8FADFBA8, 0xCE396A16, 0xBA806459, 0x86FFD35C, 0x33F77F51, 0x20D1F3AF, 0xD5947026,
+0x90003B9B, 0x0BF1AEB3, 0x3E48F924, 0x179CB3BE, 0xF5A9BD43, 0x32393925, 0xFC2F41F6, 0x66A3B801,
+0xF50C30B1, 0xD6EF0BFD, 0xF458A6CE, 0x456A2E5C, 0x758AFB03, 0x61CFB3DE, 0x998E8909, 0x0FC0D7B7,
+0x60323FE1, 0x7BD177B2, 0x11299856, 0x89DC426B, 0xB62C0F7F, 0x1565A1FE, 0x0DC965CF, 0x0601A897,
+0x9FE51A10, 0x57F6C2F9, 0x69948A19, 0x81A06A44, 0x5F48F639, 0x6D1FA421, 0x2929E763, 0x7DE88979,
+0x19A8DA81, 0x3A93C6D9, 0xD9CBF56B, 0x7973EE49, 0x72E92108, 0xEB267388, 0x92D29215, 0xC265692E,
+0x6557FB86, 0xC5E9D67B, 0x5C9C3EF8, 0x8CD43B91, 0x68E9C4CA, 0x8E61B630, 0x890D8483, 0x648C6051,
+0x48189B10, 0x255F7A8C, 0x29C518FB, 0x020DA068, 0x0ADA8CAA, 0x21F56C4E, 0x27B555AE, 0xBA5F9567,
+0xFF06CB54, 0x3DEDD424, 0x9261A326, 0x03A98B1F, 0x388198DA, 0x293742E9, 0x171F6535, 0xAC7E9BF1,
+0xFA81A729, 0x6DA00CCC, 0x88122C99, 0x7746ABFB, 0xB1DFBFEA, 0x1DB875AB, 0x24520DB7, 0x18E32AA7,
+0xE7B39C81, 0xA7876E1E, 0x36FFEEFD, 0x4DDD6B9D, 0x1E4FF3CA, 0xED273162, 0x8AAC40B9, 0x20FDCB72,
+0x79F59609, 0x65A32DA1, 0x22943F94, 0xE62F3EF6, 0xFE30CC12, 0x63CCD59D, 0x0E73DBFB, 0x2207DB24,
+0x259C052C, 0x3CEDE035, 0x7C5CC26A, 0x5168343C, 0x9A26F520, 0xE6C0B0B4, 0x6BE1D305, 0x4FD8D07A,
+0x5450AE12, 0x09C17BB9, 0x1B5A0ADE, 0x18D942E1, 0xFBCCAE63, 0x094DEBC6, 0x21953671, 0x38F5A945,
+0x8A1671AA, 0xC0BE358E, 0x11B23A1E, 0x6CEDEB30, 0xDC328B7B, 0x34CF4BF2, 0x0D2145AA, 0xC86B8A2E,
+0xD2DA2DF5, 0x627254E9, 0x7C79C97C, 0x41E08166, 0xEDF42198, 0x7BF0B224, 0x7A2C97BD, 0x73392988,
+0xAC0252C9, 0x34C295B0, 0xDB377353, 0xF5C81C24, 0x5131092C, 0x5B0EFFA3, 0xAC4FD5F7, 0x4440C630,
+0xF22E8B0E, 0xEF87A34B, 0xF6DC6150, 0x2C7B05B5, 0x24D1D235, 0x3D83E644, 0x4A3736A5, 0x49FA1F30,
+0xFFEB785F, 0xEA1F8450, 0xC1129879, 0x5EFA59A1, 0x20DCAF7D, 0xDE360519, 0x52F7E98F, 0x2DBA7845,
+0x6E3B3603, 0x429382CC, 0xB25ED0AA, 0xBF377FFA, 0x9F4D4D46, 0xBA804811, 0x66018F10, 0xAE35A7F2,
+0x31DE67C0, 0xA0752695, 0x5A0EF737, 0x358DDA04, 0x693A15FC, 0x6B773826, 0xB5E9D232, 0x283E9778,
+0x76F9590F, 0x5AB29116, 0x637AE0D8, 0x18B7E325, 0x6285953E, 0x3F662E14, 0xE28B7B87, 0x2F1869CD,
+0x41013677, 0x0C652FAD, 0x77469594, 0xFCFBCEB1, 0xAC41D95A, 0xDE8BBD00, 0x2244EBA0, 0xE613796F,
+0x69F1CB2B, 0xF9B377E7, 0x748A4393, 0xE3B747F1, 0x003CBA21, 0xFF415B1E, 0x0F91EE06, 0xEAFFD7E1,
+0x2C0B913C, 0xAFC35015, 0x290ED873, 0x61DCB91B, 0xE4535223, 0x600D6F76, 0x90A6A15B, 0x09AB5426,
+0x85065262, 0x40DE4B72, 0x77FA6ED4, 0x7873E98E, 0xD4116C9F, 0xCEE0EAEC, 0x4213E812, 0x4C8DA4A9,
+0x8CA63F8F, 0x71F2D167, 0xC9DFE6E4, 0x89B91578, 0x73235E67, 0xAF0F6F92, 0x7CD6D67C, 0x496DFDD2,
+0x1CB28DAE, 0x2B3A143C, 0xF3E48DCF, 0x9B635323, 0x1F135873, 0xA95593CA, 0xA80AC13E, 0x396605CD,
+0xE805F429, 0xA8574245, 0x5E1106B2, 0x7A4C1F4F, 0xB49A3E6F, 0xE48BBBCE, 0x79C4C453, 0xF5FC1B50,
+0x972432AF, 0x7937AC0E, 0x0A58B7BC, 0x1065E2FE, 0xA59F0DDA, 0xC09A0D60, 0x406B0A01, 0x864B9C23,
+0x7E30496B, 0xF9E827AC, 0x36235000, 0x339657AB, 0x053919BF, 0xC48CC701, 0xA64EB3D8, 0xAA20A148,
+0x965D1982, 0x16757FE1, 0x7ED969C3, 0xB4723D2B, 0xBCFA333C, 0x3E1A8F55, 0x2DE90343, 0x0A4491FF,
+0x2804A4A3, 0x2114405D, 0xA09EB517, 0x840B43E6, 0xD7C6F909, 0x840B4C9F, 0x413771C5, 0x4CB74CE3,
+0xDC279D1E, 0xDAAE6C1B, 0xFD52DBE6, 0x632F3014, 0x949CEA1D, 0x99C3E56A, 0xA6B6C90E, 0x6FC82FAE,
+0x793C69EF, 0xED43D5F6, 0x27893F51, 0x923C3192, 0x3B563E20, 0xB236F8DA, 0x651BEDDE, 0x1AC20FA4,
+0xF63DBEEF, 0xA5D9D0C5, 0x6D6A9B42, 0xE87CCD02, 0x06869101, 0xD9FB9E0D, 0x8FDC6D44, 0x4610510B,
+0x03EC0906, 0x23BC0D41, 0xF19ACE2D, 0xC1F30102, 0x903C48E8, 0xB2F18887, 0x3EF9A790, 0xC1DE4138,
+0xD63E15CB, 0x13B921F2, 0xE184087C, 0x3A88B4E7, 0x67C5C7B1, 0x95878276, 0x647E0306, 0x42E800EF,
+0xDB3F28E9, 0x92D79809, 0xE4B91812, 0xB5616E3A, 0xC93C8499, 0x9608912B, 0x0F8D1ECB, 0xFED6AC28,
+0x07F77734, 0xD0589B1F, 0x1878FED5, 0xC3BA7A6E, 0x3D591483, 0x75E7DE1C, 0x65910241, 0x504DBAD0,
+0xB8AE56DE, 0x2438C8A2, 0x7B26C92B, 0xA6850111, 0xC845ECBB, 0x25CE75AD, 0xC0746262, 0x3B31DCA8,
+0x14C8FC33, 0x2A3F9E6E, 0x77596AF6, 0x216CF8DE, 0x1A6425E7, 0x1D800E4B, 0x8866D15A, 0x1F09A73D,
+0xD6C9E166, 0xC03A4259, 0x3D87718D, 0x2F2E9E97, 0x9B260A61, 0x5AC66A89, 0xDE364A5E, 0x626F7C93,
+0x480A7A7E, 0xD4C60F81, 0xDAE2FF13, 0x2AABE78F, 0xD1105AE6, 0x56F9EED3, 0xAD0E2D2A, 0xF198DDE5,
+0x527799F9, 0x957E244B, 0x0F806124, 0x9B28DA6E, 0xCCD95B65, 0xEC84B10E, 0xBE0B5F32, 0xED2FCBA9,
+0x1BCF6245, 0xE00B3362, 0x3BE4C48D, 0x24F0F9C0, 0x9C76DE78, 0x5F65C0B4, 0xFD7F0ACF, 0x87E895D6,
+0x2ABA7D19, 0xF33D9D72, 0x4CF032DC, 0x43055B8D, 0x5367F501, 0x04A4CBB4, 0x455C88E9, 0x7454DA46,
+0x0DC5715E, 0xDE1FCCF1, 0x5731ADA1, 0x7891B959, 0x76F4D335, 0x8F8BBC02, 0xD06153D4, 0x5B4DF240,
+0x87966E9A, 0x1326047E, 0xBD9E3101, 0x77D98295, 0xB53B1405, 0xA4DFA458, 0xDCDFCD32, 0xA2452A24,
+0xA79CE63F, 0x29C328BC, 0x750F8B65, 0xBDBBB49D, 0x5996695A, 0xE3D5115C, 0x6DAF0DD4, 0x992A8F04,
+0x1F22EF09, 0xAF7AE617, 0xA4B59F7F, 0xBD84F3DC, 0x4B6A29A4, 0xD23D43F0, 0x10E54877, 0xF0CC3F70,
+0x92B42E8F, 0x6ABB4BAB, 0xDF9B25EF, 0x2A7BE5A9, 0x6B71B06A, 0x403574DB, 0x6F70B0B2, 0xA53EC89E,
+0xEEFF8B97, 0xDA96BC10, 0xAF81B41C, 0x3EAE0F7C, 0x527F1B7B, 0x33C6C613, 0xE54F0F59, 0xC6029853,
+0xE4E9C411, 0x2B8548C9, 0xCEEA2762, 0x55BE8D10, 0x34E82A1B, 0x950D2022, 0x966F9923, 0x7E31EC5E,
+0xA073542A, 0x1E428768, 0x036D4154, 0xD9EFB408, 0x1735C5A0, 0x34C22B70, 0xBD68B3E7, 0x11B92DAE,
+0xE8101CF1, 0x37794FA9, 0xF76C98A6, 0xB4F18B60, 0x9243B052, 0x8FEFD973, 0x2350EEE7, 0xDBADA0F8,
+0xF19F55B1, 0xF3FFFC60, 0xBFC37037, 0x05EB4E45, 0x66B0704D, 0x4C285F0E, 0x4F223417, 0xCBCA3EFB,
+0x8883B274, 0xB81BE8FD, 0x145BA63E, 0x07875EB2, 0xE618A64B, 0x5A0264F4, 0x19CA6074, 0xF9887D07,
+0x3FCDCDF1, 0x611E8CC2, 0xDF253F0A, 0x92A681B8, 0xD028BE82, 0x935D0589, 0x18C913F6, 0x9AFD62A5,
+0x103C683E, 0xF96EDEC3, 0x1F181AED, 0x255B3A79, 0x02AF7EE9, 0xE8271353, 0x52A27C1C, 0x5B9FAE9C,
+0xC434173B, 0x3F0FCBE4, 0xC0E03D56, 0x39F26D2C, 0xE03D3ED3, 0x9BAD5F25, 0x3B0A9436, 0x08DA6FF2,
+0x0436DA6B, 0x3287FF91, 0x32CF9D83, 0xB386D9B9, 0xD0CCBB61, 0x029AE73B, 0x5E9FDEE1, 0xE927F97E,
+0x92CC4138, 0xA0354C6E, 0xE5096F7E, 0xF8286A87, 0x608A2B57, 0x3B824869, 0x5AFCB410, 0x7AD99F9C,
+0xE519AC4C, 0xB59328F8, 0x92956293, 0xEDAFE17F, 0xD1E89CA3, 0xB16C0D48, 0x8030AEB4, 0xC09076EB,
+0xBB07B105, 0x8A5BA94D, 0x284FB953, 0xE0444EB2, 0xAED1BAE9, 0x18A73D88, 0xB7224B7F, 0x8A33F058,
+0x86A96186, 0x98D23F98, 0x11E8CA47, 0xE1746AA7, 0x3D4C9887, 0xB6C5696D, 0x54F560BA, 0x98F1C39A,
+0xFCDFCCA9, 0x4F4C7F9B, 0x8BEC4F81, 0x48331B27, 0x4D971AE8, 0x0739EBBD, 0x20B92D27, 0x8FFD2319,
+0x277A3EC1, 0x48A3BFE8, 0xFCEB4D15, 0x5F74B95C, 0xC2CB16D5, 0xE9EAA5FA, 0xC5104175, 0xAAC97492,
+0xD3195374, 0x9263CD69, 0x90336EE7, 0x9EA47D06, 0xE12006F1, 0x036213D4, 0x8C88D124, 0x9B0F4A80,
+0xAADB746A, 0x277851B0, 0xEB449264, 0xAEC58495, 0x541BC7E5, 0xB7CC2F8C, 0xD018A160, 0xB68A097F,
+0x6426D9DB, 0x5725E526, 0x46752334, 0x6C69DF07, 0x61028AB5, 0x047606E3, 0xDF417615, 0x0B64BF9D,
+0x38E20222, 0xBF01C19E, 0xA458ED2E, 0x9DAB08E7, 0x4101D4D0, 0xC81961A3, 0xDA71B4E0, 0xB361F239,
+0x2F65D86C, 0x17347281, 0x810E83BB, 0x636AA128, 0x033D0568, 0x11BA7592, 0x1FB20041, 0x0B45E8F5,
+0x6E6CAFF8, 0xCF4D23E3, 0x2017C383, 0x211BCEF9, 0x1CFEDF09, 0x63A52CBA, 0xD2D1AC90, 0xA1ECEE7B,
+0x9839F663, 0x8F4B5BD2, 0x9FDB309C, 0x710096BF, 0x23E11044, 0xA08A9C18, 0xD9B0DCDB, 0x8DC5E407,
+0x8FF9018A, 0xEA2F683E, 0x45562206, 0x2BBA13D1, 0xCCF198A6, 0xECED8386, 0x4D12C762, 0xECBC9C6F,
+0xCB6A51AF, 0x25543E05, 0x0D2D26A1, 0x27986A34, 0xB1E729E2, 0x67633F96, 0x64118BAA, 0xBC51942F,
+0xB895ED68, 0xAE4EB198, 0xEC979F5C, 0x30496530, 0x800B213C, 0x2DF75228, 0x20573401, 0x7907E416,
+0x1CD01D41, 0x8BFF1832, 0x9E58AB56, 0x396D8387, 0xBE258DC0, 0x23909F15, 0x33A4A403, 0x951AFE82,
+0x957EE94B, 0x8C659DEC, 0x94405F25, 0x05419F8A, 0xDEE402F8, 0xFF007AC1, 0xC26A2900, 0x9A562276,
+0xE71BFB44, 0x8463C27E, 0x07C786E8, 0x86942879, 0xD6DEF782, 0x334133DE, 0x40865808, 0xC4293616,
+0x817CA370, 0xBBCCA77B, 0x1F89AC77, 0x0C097FF3, 0xA4F07B6F, 0x6AA8EF8B, 0xBEDCB06B, 0x23A82C6E,
+0xBFE20766, 0xC8FCB469, 0x073AB625, 0x8458DC88, 0x57D711C7, 0xB60C25A8, 0x3B0A9958, 0x0A834D8C,
+0x4B8EF433, 0x8C278A57, 0x6684C869, 0x079239D5, 0xC9636376, 0x87796DF5, 0x3DBE42C8, 0x433224AA,
+0xFBA08ED6, 0xC8875C64, 0x6D30C2E4, 0x11FAC4E8, 0x3DD95DE3, 0x8633C04B, 0x7331ED98, 0x7449DB21,
+0xF3DDB531, 0xA4499A6C, 0xF14391ED, 0x04BC7FF3, 0x4824A19A, 0x74FFF737, 0x59864F9C, 0x1F05270E,
+0x426ED320, 0xEA56520C, 0x3F363B94, 0xF65DEA06, 0xE5A6BE9B, 0x24398BE6, 0xA4722783, 0x38141458,
+0xCF060D10, 0x473DAE52, 0x76EA77A3, 0x7F794D02, 0x99D7B5E4, 0xD1AFBDD8, 0x6EB86915, 0x7BF66866,
+0x08F56B3C, 0x58FABAF7, 0x6E6138A0, 0xF66640E0, 0x7D11F246, 0xCD0F3072, 0xC1E8BDE4, 0x79B4B66C,
+0x3D1DA80F, 0x28BA7A9F, 0x134FE2A1, 0xB59B109D, 0xBC1A6E2C, 0xF5E2FF5A, 0xC8349457, 0xBB67F820,
+0x2A6AC4BD, 0x4FCCC069, 0x388401FE, 0xF794DAB6, 0x955245BF, 0x2A5CF186, 0x8103582E, 0x80F03187,
+0xE5E76E25, 0x83A754AB, 0x698739C1, 0x64EA7638, 0x31250B1A, 0x5E52D173, 0x2BFABA57, 0x699981F2,
+0x087FB892, 0xE23BC173, 0xA60BAA9C, 0x92145315, 0xE9FE01B4, 0x91310014, 0x17B55E48, 0xF8F7FA4A,
+0x9E1F40EF, 0xFE6687CE, 0x92394F38, 0x02DD9AE9, 0xD8975261, 0x326FDBA8, 0x057F9743, 0x8B5939C0,
+0x0EAF6EA0, 0x22D96902, 0xBEE82656, 0xDCAA8F0E, 0x001C1A26, 0xEB4D0941, 0x754D0F30, 0xFE224E12,
+0xC812C753, 0x45EDDEA0, 0x6485D247, 0x65185784, 0xB101EA74, 0x61320D73, 0x16F39A3B, 0xE3543FAE,
+0xA3537390, 0xA7247035, 0xA72D03B4, 0x30F56387, 0xC44E281F, 0xFCEEF4F2, 0xA9BE55AB, 0x0CF7DE13,
+0x5E532DFE, 0x8C27ABE2, 0x72FCD7A9, 0x7E9C5A06, 0x786412E0, 0x9C20F8B4, 0x131AF437, 0x9794D577,
+0xCB770C37, 0xA3B9A5B0, 0x4504141A, 0xDFE62965, 0xFA8EA16C, 0xB0A8A605, 0x87BEF7EB, 0xA3E56361,
+0xC934C04D, 0x5504E585, 0xE5F6F9EE, 0xEED04C7B, 0x83CAFA65, 0xBF95B7E6, 0xD15CA2B1, 0x5E0FDF53,
+0x15F7733D, 0xAEC15295, 0x771E5591, 0xFBE35A1E, 0xED6345D6, 0x54604CC0, 0x6D3DC34E, 0xCFCF5C9E,
+0x2CBF47E4, 0xE51E9543, 0x5B6E79DC, 0x6052D7C1, 0x738E8048, 0x17EFDC2B, 0xEA17CE79, 0xC72C787B,
+0x0C5F1042, 0x585657E0, 0xA9F9B5DF, 0x32DD94DB, 0xDB54A54F, 0xBF548130, 0x98956A51, 0x146B877E,
+0xFCCF3719, 0xD2C24DB3, 0xCB65B1B1, 0x2DDF8DAC, 0xB39B5EBF, 0xDB9E4A15, 0xF0B4BC80, 0xEF0DD4AE,
+0xB67734D7, 0x5675A198, 0x4814BB42, 0x10E806EE, 0x9468C11A, 0x2975ED23, 0x7A5617A1, 0x3ADAFCF1,
+0xE67AE272, 0x417DEFF3, 0xC2634FCF, 0xB0B75C12, 0x93907F35, 0x60C89FB1, 0x24669A3C, 0x70274D4C,
+0xC6D5B71B, 0x41C89A8B, 0x54CB931E, 0xCD88A095, 0x40C235DA, 0xE772B854, 0x0271DD09, 0x42973FAF,
+0x4032362C, 0xA34BAA62, 0xA0ED9370, 0xB68B21E3, 0x69940E6D, 0x9FEAAEEC, 0xC84E642C, 0x5C61CCFC,
+0x79BC2CE1, 0x15F6A425, 0xE9936854, 0xA60FE76D, 0x90090373, 0x2975CCE2, 0x9A5830E8, 0x0078E9D0,
+0xF6C0EDC7, 0xAACF05E8, 0xF5A192A3, 0xCD520E86, 0x14376299, 0x51CDB221, 0xA6AD3B2B, 0xEDC82758,
+0x90B16648, 0x49503CEB, 0xEDA52673, 0x9BAC1948, 0x46072ED4, 0x3147C1DC, 0xF3DAC94A, 0x6C0B5864,
+0x62B67FBA, 0xD598B87D, 0x4AA4A035, 0xFDE686ED, 0x6FDDD28A, 0xAEBC8166, 0x656D81BD, 0x412DC97C,
+0xFCA73082, 0x01DD4053, 0xFE07C5AC, 0x6A02CE12, 0x76DFB702, 0xB9FDE04E, 0x1FF4F933, 0x9DCF9695,
+0x7AA6ECA3, 0x9C4CFEA3, 0x8F010A83, 0xE524A88C, 0x557332A8, 0x6ABF07AC, 0x2A94EC32, 0x1C63B93B,
+0x193E7700, 0x8EA74DF1, 0xF1D2A5A6, 0x232C49CF, 0xE73D9D2A, 0x5C520F7E, 0x4CE868F7, 0x3C1588E1,
+0x420C5ADC, 0xAA75A439, 0x63616E05, 0x027295E7, 0xBCC58E5B, 0x3EF619C5, 0xDCF39F4B, 0x86A892C5,
+0x94AD4DEE, 0xAD67FF4C, 0xBBF235AF, 0x16231772, 0x04F51E04, 0xC07C3759, 0x53AE71DE, 0x54D6D680,
+0x235AFFB6, 0x2380B69E, 0x8A313848, 0x9C24F44E, 0xF273587C, 0xC1B58755, 0x108A4067, 0x09267E15,
+0xAD834FE6, 0xD78931DC, 0x2CC51526, 0x1FBA59E5, 0x8478163F, 0xD6349865, 0x45C0007E, 0xB431C458,
+0x4360A3AA, 0xFA0E1C71, 0x5AEB9669, 0x8C318476, 0x7C194BA0, 0x64F3A7B6, 0xC058BFFA, 0x31E90EFB,
+0x0557B3CA, 0x8D35CA4F, 0x0347114B, 0xC0C59FC3, 0x750FA794, 0xD67FDFA6, 0x1BEC8281, 0xB9722D7B,
+0x37B6FA11, 0x8133B179, 0xC694E38E, 0xFDE8F6C9, 0x8DF18F90, 0xA4B2B0C8, 0xB186F43B, 0x7F651B66,
+0x3A0E00BF, 0x8B1D0CD2, 0x1454C7FC, 0xE737845D, 0x77BDB7C4, 0x0DFE0AD5, 0x3444C54F, 0x03C5FA31,
+0x06F924B9, 0x06BDE2C2, 0xEE58F44D, 0xA39CF9E9, 0x889A3C16, 0x98CE32BF, 0x7CCC9C4B, 0x143FC19E,
+0x7C186474, 0x37B3D7B7, 0x167AAFDA, 0x2A95686D, 0xC5A12244, 0x83EF4752, 0xBF7D11FD, 0x49FECEF1,
+0xD6732818, 0x8064F12D, 0x6C12ADF5, 0x8D7E8B65, 0x7475DAAE, 0x55B1E3E3, 0x8B5AD171, 0x57A87164,
+0x38ACFEE8, 0xD5F267BE, 0xCB7EF34D, 0x9E20B8C3, 0xF1835AD0, 0x7C65C24C, 0x8D94D9B4, 0x4EDF473D,
+0x403F55AE, 0xAFBB2349, 0x3F5BBB9B, 0x4227C072, 0x5BCF789F, 0x96904984, 0xC2EE16BF, 0xC1CB8CED,
+0x86F9ED0E, 0xC638048E, 0x2D883774, 0xC495DDD1, 0x4504D244, 0x9DB41B24, 0x6C1C3CF8, 0x1FFEAC8F,
+0xAC37E680, 0x63B26D55, 0x011CF079, 0x1047859B, 0x772938AB, 0x33CDEC89, 0x62D815B0, 0xA5075E50,
+0xCA98DAFB, 0xF8C4201B, 0x4C7D111F, 0x785D2376, 0xB6A96E9C, 0x6B216066, 0x2DECF9B4, 0x8254B0BF,
+0x7E3754DB, 0x31559FE0, 0xFEE1D6F8, 0x290227F2, 0x1FB5EA98, 0x4B94140B, 0xB0242143, 0xB7C71399,
+0x6C1472EA, 0x43191179, 0xC26A1297, 0xB8A50660, 0xB809BA07, 0xE93F993F, 0xAAE17518, 0xC02B60EF,
+0xA89B4860, 0x3D32962A, 0xA0F80F28, 0xEEA7E72A, 0x4A240EAB, 0xA494B67F, 0x7B033F34, 0xBDC2EAF0,
+0xFA8D4263, 0xCC083200, 0x84C2C60A, 0xC1FC2270, 0x0695ED82, 0x42BB3925, 0xDC37BB7F, 0x2CC47B6B,
+0x0F1622EE, 0xAEC1CD73, 0x219FAC0A, 0x0A643317, 0xD9CC109D, 0xB4F1D282, 0xEC67B41D, 0x21B40082,
+0x1C0D73F5, 0x97B8E272, 0x3DAB12D8, 0x41598AC0, 0x67E11DE5, 0xCB05DBED, 0x5DFD7051, 0x383CBF69,
+0x7CBF0C7A, 0xFDC2EEE4, 0x57D8C0F5, 0xF2E18E8D, 0x9337191B, 0x0701E6F8, 0x94A35D95, 0xF844D9B7,
+0x2E6C16D7, 0xDCC3B120, 0xF45A5F18, 0xA6F06E87, 0xDA1E4282, 0xAE01E8A6, 0xB338F392, 0xC0B14122,
+0x4D2F9164, 0x3D18DFED, 0xA1D0C5EE, 0x2081CB9D, 0xAFADA8A7, 0x9299A97C, 0x79973F1E, 0xA660099B,
+0x32F70558, 0xA4EA1F49, 0x5B2965F5, 0x764DC85B, 0xA0AE89C7, 0x49D1226F, 0x9588ADBB, 0xABA78883,
+0xD52B4265, 0x2037F9D2, 0x56186463, 0x855975A5, 0x6B57ADD3, 0xD7D7AE76, 0xDB9EBE25, 0x10F9B66D,
+0xF6D87C43, 0xF17B14CC, 0x3BB2218C, 0xA57596F4, 0x1408CF9F, 0x661C1DFA, 0x9D5591B4, 0xEC0A42C4,
+0xB560367F, 0x0E1E2FFF, 0xEB2A57BB, 0x502C41E2, 0x765690E6, 0x444A0C05, 0x6E7047B1, 0x6A25C56A,
+0x7F899410, 0x26C910AA, 0xD17A08F3, 0x3B3EDAEB, 0x7FBB06A2, 0xF5FA9E59, 0xEC06162F, 0xC59ED914,
+0x19F36B94, 0x4962F843, 0xA279F7EB, 0x4148F36B, 0x0A0C3F1E, 0x854979F8, 0xF00FD66F, 0x73056727,
+0x5F323D97, 0xAD40BD48, 0xED820156, 0xE8AB1C1B, 0x171529B6, 0x7F762DA8, 0x0E175C09, 0xAF935890,
+0x6E54F25F, 0x7227CACA, 0xB10DF480, 0xF557F137, 0xD7D56F6A, 0x6746105A, 0x9CA4B391, 0x6C2B7197,
+0xB73B39F3, 0x30EC1405, 0x3D93B66D, 0x208F81E3, 0x5CE1FB82, 0x51E18F2D, 0x5AF8A45E, 0xE38A8356,
+0xA919AA34, 0xDD76953A, 0xA5AE738A, 0x8639CEA5, 0x7FB9D2F1, 0x26250A73, 0xD564E084, 0x8E326147,
+0x0974C7E7, 0x19ECE321, 0x6F670B92, 0xA7FD2F00, 0x5F768FEE, 0xF5BAD267, 0x72E19280, 0x487A4B5A,
+0xB114FEC0, 0x59FE6765, 0xDA956C27, 0x92E4E8E2, 0x53249EE6, 0x06BB2001, 0xC670945E, 0xED9A3C7B,
+0x40FF2579, 0x35EF7A15, 0xB05A3558, 0x4A2B2320, 0xE22EEC59, 0x63A14EA2, 0x8A38FA42, 0x39173E9C,
+0xA537986A, 0x9BBAEE31, 0x5544CEF5, 0xF495E23B, 0xF664469B, 0xE5080C82, 0x598AF1A1, 0x66795799,
+0x279BA207, 0xE0CB45E5, 0x5710E1AE, 0x497B1CE7, 0x6AC3F9E6, 0x035C1F86, 0x07EABDD7, 0xF454EF8D,
+0xAC4A1AC5, 0x9289CAB8, 0x43A9A6A4, 0xD111B8AE, 0xBDA3D130, 0xC96AD932, 0xA02CDA8A, 0x4ACBD448,
+0xB76A8044, 0xA331F02E, 0xE23B3709, 0x5FD183CE, 0xBD31B0E3, 0x85E39F18, 0xA1389A28, 0x9BEBBC0D,
+0x88809D84, 0x94FA754A, 0x4AECB79C, 0xEB69DA07, 0x11E1B585, 0x8A5AFDF0, 0x38EBFBC8, 0x31A2A0F0,
+0x9327A04E, 0x335C3495, 0xDE9B7F95, 0x767CC815, 0x4637FF59, 0xA67B5368, 0x9700B694, 0xC34AEF82,
+0x5731C158, 0xA7955122, 0x1ACF8346, 0x95AFF80B, 0xD67DE2B8, 0x7A874B67, 0x20C9FD00, 0xF04933FC,
+0x38FFBAAA, 0x5DFE5D43, 0xA37165AE, 0x2DA5A127, 0xE2E147ED, 0xE71B9491, 0x0AE89DAB, 0x7DAA7651,
+0xB8115A1F, 0x5660B638, 0x547270FE, 0x6E1A4FBC, 0xBE73407D, 0x38088AF8, 0x80E4E9AC, 0x6F3A71A3,
+0xD2602C2E, 0x88355E3F, 0x3EF5E155, 0xDFB6D4E6, 0xEF257B38, 0x4FFE4A2C, 0xAF673F12, 0x6E23887E,
+0xE2BF8DC0, 0x5B171C7E, 0xAD8EBF12, 0x6E5CA829, 0x48BCDC1B, 0x54329B96, 0x223AB3FA, 0x93343108,
+0x81F4EEE8, 0xA17D9849, 0x2B399728, 0x1B3547C9, 0x6583C408, 0xF17E71B0, 0xEEE8EF82, 0x822470D9,
+0xA1A7A775, 0x689D07A1, 0xCBBA0C75, 0x697526F8, 0x2BDF2C31, 0xBDC09863, 0x417BE57D, 0x52D7BD95,
+0x3B5A9040, 0xF3BDC992, 0x3556FB33, 0x4C382807, 0x753141BB, 0xC843D45C, 0x5D1475CF, 0x83106E77,
+0x553C9968, 0x55C83180, 0xEC75ED0B, 0xAA3EDCAC, 0x0DD4495E, 0xB39A61BC, 0x32A7FC78, 0x364115D9,
+0xB090D947, 0x31D36A17, 0x67FFEA2F, 0x3582BD77, 0xAFD63A04, 0x359D7F2F, 0x22F86E16, 0xF5CCFB61,
+0x3B34CDCD, 0x5B0B0BB9, 0x03AE8D7A, 0x602E7406, 0xBAD844AF, 0xD6B31978, 0xCF29D692, 0x3B77845C,
+0xC308FCF8, 0xFC49899B, 0x84E58155, 0x056179C9, 0x30DB561F, 0xB9F13532, 0x9571BCCA, 0x80EAAD24,
+0xB3410CEB, 0xA5FAE3D6, 0x7B4B1672, 0xF7BD85D3, 0x822260CA, 0xEB2B6639, 0xB7BAA4B3, 0xF26AE412,
+0xA6854FF8, 0x46F2DA6E, 0xAA5BEB2F, 0xB7E5AB7B, 0x3A1FC275, 0x905042C0, 0xFE531D6A, 0x8ECEE882,
+0x4E0F8509, 0xF2842F96, 0x80AC8438, 0x51E649EC, 0xE7FE7518, 0xE2D0A7F8, 0xF3C9A4C1, 0xE960A3D9,
+0x15DB1FFA, 0x3504F93E, 0xB470559F, 0x7DFB4D5F, 0x6D5BD803, 0xF0D5FF63, 0x6F47C915, 0xE32CFFC6,
+0xB38DD3C4, 0xE4AA0166, 0xE6854956, 0x4D072E4A, 0x44B40BC6, 0xC0B4CDE7, 0x9BDA6BC8, 0x69B501DD,
+0x35B648DA, 0x3427A073, 0xC146FA66, 0xDE3ED911, 0xBC025271, 0xE0EC69DB, 0x6770A791, 0xD688F52D,
+0xEDAF7881, 0xF8583873, 0xE9488954, 0x99E48B70, 0xA8CB00DA, 0x49BC5593, 0x9AC4F505, 0x96E4E8BC,
+0x960699EE, 0x3197E45F, 0x6505148C, 0x4453A794, 0x7F4F5F68, 0x8B8658DB, 0xD0D025E3, 0x4DDD0E04,
+0x23BA3289, 0x16D700B4, 0x0A658389, 0x15F4F657, 0xE500827F, 0xB0186CD5, 0x387ED359, 0x01C11803,
+0xC927F2EB, 0xBD3990BB, 0xD31B24FC, 0x9FAC4979, 0x6BB4C7F0, 0x8AF06C75, 0x81210183, 0xA10C7397,
+0x7D380DAC, 0x289C1ADB, 0xB15BF05E, 0x08E0ECA0, 0xD25FCC86, 0x9B03BB24, 0xFE025200, 0x582625F2,
+0x347A444C, 0x43537513, 0x6A867017, 0x8122A832, 0x0EF7FBD5, 0x518A8570, 0x56E66B0A, 0x100BEF2A,
+0x0AE51E05, 0x23A59325, 0xFE59A743, 0x1ECFB4ED, 0x3DE882BF, 0x6483A52A, 0x9F65CA9F, 0x324EC29B,
+0x6081CB05, 0x289838ED, 0xC20A463E, 0x20F46E0F, 0x7DF438F9, 0x5F1E9941, 0x14112F3F, 0xD4E7A7D1,
+0xD160343B, 0x52753B2F, 0x73560E39, 0x3BE29A4C, 0x085F2391, 0xF12355E9, 0x6E9D9F44, 0xDBC26FFE,
+0x09704623, 0x44073E66, 0x3BA24918, 0x19B48E90, 0xA4DB6CF1, 0x52D7AE1B, 0x6AFEC182, 0xB664FED1,
+0x3AEC52F7, 0x333EB295, 0x78BBB0ED, 0x87A8951F, 0x8D458825, 0xC431C602, 0x77D20A6D, 0xFE066F9D,
+0x6A2F14AE, 0xCCC7DCAF, 0x93387220, 0x7D91023F, 0xFF36BD09, 0xEA83799A, 0x572CC0B7, 0xF0C04329,
+0xAE51AADE, 0xA3A7025B, 0x8C7DB896, 0x205A4B53, 0xAFEF4E5E, 0x6FBD7FB3, 0xD98448C5, 0x46DDBFC3,
+0x1B425CAC, 0x2FC74D53, 0x2194444D, 0x0DD845C7, 0xEBAEEA0F, 0xA0F9A5D0, 0x962F7399, 0x4D5E5ECC,
+0x782C9462, 0x530896FA, 0x7EBFC44E, 0x5CA4FCF3, 0xF51FD23F, 0xCCD367F8, 0x62A44413, 0xCE5F2A9D,
+0xBFC63107, 0x9E216A3A, 0x2EAD13DE, 0x13BA6A64, 0x3B6A083F, 0x24D8D8C8, 0x6EFC8A98, 0xDB4B531F,
+0x923AAF87, 0xED19023F, 0x7FA194B7, 0x09647B61, 0x10C12E56, 0x7F57890E, 0x59DCDE9A, 0x3D2C3C6A,
+0x74C1300D, 0xFE98F830, 0xED485DA2, 0x013ECE3E, 0x9B44C443, 0xB5652447, 0xD1998258, 0xEF11F79B,
+0xD3243497, 0x15B24860, 0xABE38B54, 0x4FEE0E32, 0x67390224, 0x545B523C, 0xC2E883FA, 0x6A9D3B23,
+0x279EF878, 0x94C085BA, 0xA45FB106, 0x4898E215, 0x8256DB9E, 0x2297FFFC, 0x6F9EA57E, 0x2E2DC42F,
+0x35F1B82D, 0x1D7E7AA1, 0x816F892C, 0xA13B7C5F, 0x0E52C7AB, 0xE920949B, 0xF7634E10, 0x9E2E5C1B,
+0x28A22142, 0x5247E9C9, 0x2693D8EB, 0xDB5AD84A, 0x5F67EC32, 0x11F67676, 0xA086A74B, 0x19386BDA,
+0xAC0D5EFC, 0x6D2E4837, 0x78B1A728, 0xB13262EB, 0x814D6B5C, 0xF2FCE5EE, 0x9AF269E2, 0xB0F4BC26,
+0xDDFB08D3, 0x1B2FCE47, 0x76ECA9DE, 0xDBDEBC12, 0xD7DCCD71, 0xD1B8CA73, 0xF8CB5277, 0xDBE90A3A,
+0x29ADB904, 0x18CA2D0B, 0x83D6B916, 0x842D4113, 0x01ABAA3B, 0x49E1B41A, 0xE463992F, 0xDE731B20,
+0xCE567F2B, 0xAAAB71A6, 0xFE36BDD9, 0x265BB4E3, 0x78320DA6, 0xBFBA2AB3, 0xC5971F55, 0x92F2D09B,
+0x191B43BA, 0x060377BF, 0xD893219C, 0x8E592AD3, 0x902C5D63, 0x5B222600, 0x37E1FEC6, 0x213CC8DE,
+0x2949DEA1, 0xA23277F6, 0xFABBC4E3, 0xFCC44D00, 0xBCDF4066, 0x86D0925B, 0x55F0C523, 0x0A72279E,
+0x7F39513F, 0xE3CCE909, 0xC860EAB6, 0x485D7A40, 0x5753F2A1, 0x245CD88F, 0x02B534C0, 0x33F3D923,
+0x733F2880, 0xBDC6CDC9, 0x33ABF7A7, 0x96C22C8A, 0x7D709B32, 0xBF504979, 0xD440C634, 0x2B69DF76,
+0xEE3BC992, 0x9CABC4E4, 0x1335605F, 0x5CC9DC5F, 0x1657AF6E, 0x805FB905, 0x2190DEED, 0xAD0FF25E,
+0xF0E3E584, 0xED17E588, 0x42813B90, 0x5154E823, 0xCC32FA5A, 0xEBD1EF28, 0xE4470D7F, 0x30702E65,
+0x6DDC92FC, 0xB2081EF8, 0x3F010F7C, 0xBF54380D, 0xEED24502, 0x029304DC, 0xBE757AD0, 0xA012AEEC,
+0x767D4FC0, 0xD97C464E, 0x5FDBA169, 0xCF8286E3, 0x65DF14E7, 0xAAAD0C8E, 0x39654EA8, 0x530D943C,
+0xE9ED3476, 0x4DC195F8, 0x5E480DC2, 0x735B95FC, 0x5A105AAF, 0x551AC316, 0xF50BF9B7, 0x7FD6D539,
+0xF81463BC, 0x3BB6FE59, 0x7C63D982, 0x9FCAF79B, 0xFBA86DB3, 0xC51722BF, 0xED643CF4, 0xCDA17B41,
+0xB1FAA7A0, 0x884A59DD, 0x7EA13569, 0x0C2A02C1, 0xF2A80FEB, 0xFFD9B048, 0x04B03A05, 0xC57B450D,
+0x74F130BE, 0xD24DC8A2, 0x056B250F, 0x3EFA5305, 0x69BCABED, 0x2D671571, 0xDB36D53A, 0x4B84501D,
+0x6A23A25C, 0x37026537, 0xDA1F6197, 0x8BEDF995, 0x33798D9A, 0xA575F615, 0x59462AC8, 0x47C2272B,
+0x73AF76F4, 0x690B475C, 0xCB07DAE4, 0x92B8072A, 0x7AE7890F, 0x7EF871F5, 0x48226FCF, 0x2DAD7A71,
+0x863594ED, 0x341A17E8, 0xA9A786EC, 0x80D8DB7E, 0x9CAE948F, 0x13A43841, 0x7F22A8B1, 0x497DC250,
+0x05DAF15C, 0x1F88CC01, 0xD3C487A6, 0x17023B75, 0xCD0FCB72, 0xEF9818FF, 0x052663E1, 0x409380FB,
+0xCD9D3DBF, 0x08810414, 0xF52C80E9, 0x5C77E9F1, 0x1AA75A34, 0x3810C037, 0x22FBEA16, 0x06C8CB2C,
+0x19A8A533, 0xEB63C6E8, 0x4CAA85BF, 0xDB8D9412, 0xDD282B9D, 0x91DD143F, 0xF380FC94, 0x5293ACB6,
+0x470FDD9D, 0x3A11C4C5, 0x89E276C6, 0x8232628D, 0x70902E4A, 0x7139211B, 0x73631D97, 0xB04DBE41,
+0x173F034C, 0x907760AC, 0x2FA28BE3, 0x297DC1CB, 0x4F1759FD, 0x0FA9EEC4, 0x071E2909, 0x3B61ED52,
+0x57371188, 0xEB8665C1, 0xF520AF05, 0xE85CF849, 0xCDB95853, 0x80DCB620, 0x13C9927B, 0x5F49C4AC,
+0x6E254F4A, 0x8E75F4C1, 0xB1E41699, 0xA4093101, 0x81833280, 0x33DBC6C6, 0xC15BB9BC, 0x6484C5CF,
+0xDBF2B9F9, 0x07050F5B, 0x79326AA5, 0x31B6665D, 0x4FB4513C, 0x731C2801, 0x58F2090D, 0xC502B289,
+0xD780FFC4, 0x6489915B, 0xF93AD8D6, 0x96228286, 0x3FD4F0B3, 0xD3E7C623, 0xC6AD2584, 0x2AF7A02F,
+0xAEB3A9F6, 0x062797B3, 0xA76321FF, 0x1E7CC30C, 0x8268FB4A, 0x31F17B06, 0xD4DED8D4, 0x06895E63,
+0x5C8688E3, 0x6A5E885A, 0x82086BC4, 0xF4C19276, 0x64612C1D, 0x7E46F698, 0x7E091628, 0xE3222447,
+0x9EF5065E, 0x08491F76, 0xCEE658F6, 0xE4113BBC, 0x0CDA7C60, 0x6F46E13C, 0x7F04637F, 0x99890318,
+0x28BC85E0, 0x51FC742A, 0x504A4DA5, 0xD4BF5858, 0x5005BAA1, 0x77260C37, 0x3707988B, 0x5F3B5206,
+0x1346BE44, 0x74719ABF, 0xA07CB168, 0x47011B65, 0x4986FB38, 0x56276DDE, 0x1282CDBA, 0x5EABB0BD,
+0x7842D7E6, 0x534FDB3C, 0x7AA88612, 0xD886A755, 0x2E304B5E, 0xB51586CF, 0xE2DF9F08, 0x66DE376D,
+0x5AECD482, 0xEDDF24F9, 0x7447FA5A, 0xF4C42AE7, 0xA1B4FAD3, 0x1F34A686, 0xAC312B96, 0x8E19A4E6,
+0xBA71F861, 0x011F5DB3, 0xE31F8C71, 0x505EF6A0, 0x659A4074, 0x7B15A5F7, 0xBCDD5114, 0xCD84C120,
+0x3C5BBA36, 0x95E82097, 0xFCB1B8EB, 0x1EB80A30, 0xDB1C43E5, 0x9649124D, 0x357A4820, 0x5D0B20B4,
+0xDCA33652, 0xABEC786B, 0x3CD1A297, 0x95D66574, 0x63EC9306, 0x70185874, 0x9D477BFB, 0x12100003,
+0x3DC62078, 0x7D084665, 0xC5B253AD, 0xD2212A1A, 0xAF23618D, 0x76150BE3, 0x49D736C2, 0xA35DB578,
+0xF15DE874, 0x2BD9ABD1, 0x3897E248, 0x49039144, 0x5EF20F5E, 0xD9A27537, 0x91B7BD1E, 0x5A624697,
+0xCD6998C7, 0x7A2B8583, 0x82D5ABF7, 0xF8B1EAC6, 0xC0EDF224, 0xA3E71ADA, 0x3FB867A9, 0xD49EF97F,
+0x68974361, 0x9DF621C8, 0xC2CF18E8, 0x4CE66907, 0xB7F2CD92, 0x6CED3AEF, 0x7DB7E12D, 0x0D1B0FCC,
+0x488E99EA, 0xC9CC5398, 0xD6883A4F, 0xD8AB5651, 0x9C6D84FB, 0xA3BC9905, 0x42326D8E, 0x3A579025,
+0x7B567A35, 0x56746707, 0x1235E990, 0x4889818F, 0x6CC8D187, 0xE569324A, 0xC710A05D, 0x8E918D39,
+0xAF103B1E, 0x6E7CFC2E, 0xF4AAAC37, 0x0A52F145, 0xA633EC08, 0xA54093CE, 0x1E038198, 0x7D7FD586,
+0xED09C4D2, 0x68E84806, 0x7F088C1E, 0xF9CFC544, 0x2CA6A335, 0xFCF9BD47, 0x048D7E96, 0xE5D43AC4,
+0x14B850FB, 0xF58CC880, 0xDC576FB8, 0x2867F782, 0x454C06FD, 0x285DC89A, 0xCD23CA41, 0x5A5939F7,
+0xA8459596, 0xEF3F0E58, 0x01BE008F, 0xB46F556E, 0xB4BC6106, 0xDEEB2138, 0xB7224F91, 0x6DFF2328,
+0xC00CF169, 0x99E5B618, 0x52DDD898, 0x81E198C5, 0x91BF9B6F, 0xB446E436, 0xB975C7F1, 0x34448D45,
+0xBBC1B34B, 0xBEBF30D3, 0x25382A9F, 0x9BACEBF2, 0x4DCDDD50, 0x55C74F1C, 0x3AF22791, 0xD4E927D9,
+0xCA6C2B22, 0xB26769B2, 0xADFCC976, 0x9C12AAD8, 0x7F88F8F5, 0xF9A005D0, 0x5B6CD72F, 0xE9DC849B,
+0x0652AD5F, 0xCD1A704E, 0x44DA2DFE, 0x9AB1C1DA, 0x132F148A, 0x0E3F8C26, 0x720FED53, 0xCBD2FBBE,
+0x5AD60EC5, 0x0A7A8C12, 0xB6FDD0ED, 0x72861D28, 0xA364DB7E, 0xB83C717A, 0x5223B479, 0xBDCE9F34,
+0xEC1A6069, 0x17778456, 0xAE081B99, 0x7F30667B, 0x9237E17E, 0x4A9037DC, 0x2B78607C, 0xF611F338,
+0x31E61A36, 0x13B5F6CE, 0x89EE1123, 0x3FBB84CC, 0x4A626519, 0xED639292, 0x0DC0BB2F, 0x7F6E614F,
+0xFCA13FB4, 0x3E4CA95B, 0x937468ED, 0xD9C9C23D, 0xF6FC07AC, 0xC637CB36, 0x2F89C852, 0xF60F601C,
+0x3136B88E, 0x4311FEF5, 0x7B4AEAA4, 0x75BC98F7, 0x49ABC114, 0x78747197, 0x8A70F569, 0x54F870C9,
+0xC1445278, 0x92DA5E53, 0x0EB03743, 0x60A980DA, 0x9F9DC7B8, 0xEC3B5814, 0xBE044523, 0x027F77FF,
+0x54083B65, 0x6DDB4A88, 0x4E9CCC25, 0xC283B484, 0x9AE79A8F, 0xB5FA1A5E, 0x0276A23D, 0x223FF71D,
+0x7573C7B3, 0x2EF581C3, 0x84B3B0CB, 0xC943F03D, 0xF78383BD, 0x912FCD02, 0xBFF7BB5A, 0xFA774118,
+0xADE9D694, 0xD53F3C9C, 0xFCB7866D, 0x0266A8D1, 0x5D48EC6A, 0x14CBAE92, 0xDC14B147, 0xFD6047E2,
+0x8DEFE390, 0xBB536305, 0x733AE85D, 0x761421BA, 0xFE36826C, 0x3F09AABF, 0xCD49EB30, 0x12F6D43E,
+0x74E221B5, 0xB0335731, 0xF138D390, 0x27BCF092, 0x3B355B77, 0x1F89246A, 0x181F746D, 0x7E2A0C37,
+0x8C77C124, 0x7F411BCA, 0xB3F69D2F, 0xF35F3CD0, 0x9CFEDF54, 0x4C01EFFE, 0x0810EA37, 0xA9711E3D,
+0x31C58F23, 0xB3ED90B8, 0x298884F2, 0xDC374F01, 0x3AB192C3, 0x1835B714, 0xAF5800A6, 0x0E5A5536,
+0x52BE0AED, 0xDEDC5DEE, 0xDCD61382, 0xA3D42FA9, 0x9C1899BE, 0x1072718B, 0xA3D2D6F1, 0xD8B7DB2D,
+0x2DA35872, 0x8FB1C0D3, 0xEEDC057F, 0x01365C2B, 0x3006DF0D, 0xBCF0FF81, 0xA8C27461, 0x03D32DE8,
+0x8AD620B6, 0x3BE44996, 0x1DAFC3F7, 0x6EDACEE9, 0xA3B2444F, 0x9F14541B, 0xB3C23C4C, 0x94483385,
+0xDE8BE765, 0xCEDCAD0F, 0x92055D70, 0x0E6C10D5, 0x998AE353, 0x7D3B91AE, 0x7AAEE98E, 0x302114CE,
+0x213CBFDE, 0x6C6D094F, 0x27CB2403, 0x10E49184, 0x7F1EE84F, 0x0FE8C5BF, 0xFAEFBAA7, 0x20D9B8B4,
+0xB38DCAF1, 0xD718796E, 0x8E1F9435, 0xB041F170, 0x3FAD7ABA, 0xA4598FBF, 0xC9B4CBFD, 0x5B41DE51,
+0xD88B6C94, 0xAF05DB78, 0xAA6BB33E, 0x0FADFC4E, 0x9CA380DE, 0xE6FD5D05, 0x50456506, 0x4F5FEA57,
+0x8BC510FF, 0x86D1A38E, 0x3BBD5A44, 0x3EA61B9B, 0x33330F59, 0x5A48E3FD, 0x7E823996, 0xAAF152E3,
+0x702ACDEF, 0xC2C28F50, 0x9B44E1B1, 0x3127536D, 0xC8215C6C, 0x0072CD1E, 0xCED0FE5A, 0xCE791398,
+0x6CFEC619, 0x024EA53E, 0xCAF2757D, 0x2D7E5852, 0x7E44BC2F, 0x40B08D12, 0x37655441, 0x1EB07961,
+0x6E06FF39, 0xC7F7B68F, 0xF4219155, 0x1C32EDB8, 0x9C93973E, 0xF3CA93F1, 0xE465A1AD, 0xFBE1035A,
+0x436B85E9, 0xE6F54803, 0x384665F5, 0xAF6B0000, 0x004F3B08, 0x3F4C3E78, 0x70E63431, 0xDF185B7C,
+0x55FD8537, 0x50A0590F, 0x11244E7E, 0x7D8759F0, 0x31FC2700, 0xDB846718, 0x4A7812C0, 0x31C64734,
+0x735FFE69, 0x0BE302BF, 0xD9F93CA6, 0xF2A7A71B, 0x9EB563E4, 0x8989217E, 0x637DDB5F, 0x506AFC62,
+0xC4EE625E, 0xB9C636AC, 0x660C8D53, 0xBBC3A246, 0x26277AF8, 0x977BDCC4, 0x7F3BFE47, 0x69796D0B,
+0x9629B8EF, 0x46C6516A, 0xCCF89B08, 0xA5BAA661, 0x87CA6757, 0xE1AD4D22, 0x359D5BA7, 0x9A121FB1,
+0xE4F39581, 0x06DEE4F4, 0xD62751BC, 0x27E4DEB3, 0x5B9374D8, 0xF19C37BD, 0xF5C1B3D9, 0x413A57D8,
+0xE3A2DA6D, 0xE2B86FFF, 0xD5E6B0DA, 0x7477FFC4, 0xDEF1E02F, 0xF6DB3E4C, 0x88771070, 0x6A2633E8,
+0x159857CB, 0x294E4F71, 0x5F8BE5FB, 0x97107365, 0xCACBA4D4, 0xA6676638, 0x439A5BD1, 0xC083E3DA,
+0x417EBBD5, 0xA3A6D03F, 0xCA77257E, 0x40925442, 0x7391DCB9, 0xF1856061, 0x8C58298C, 0x5A00E42B,
+0xC6A88682, 0x336DC704, 0x1C38BC7A, 0x9AC0F42D, 0xEAD31592, 0x86B178D1, 0x328A4AAB, 0xC90E24F4,
+0xC9626527, 0xCC74FA6A, 0x81338BFB, 0x793D1DBA, 0x7F2A1C00, 0xC7A4F4FE, 0xC9FBC77F, 0xF42D7F84,
+0x518950FF, 0xAA0954F7, 0xF43880B2, 0x0F93E1E4, 0xB3A0D3A9, 0xE550C3BB, 0x293F1FCE, 0x1FCBD21D,
+0xDFB0EB30, 0x2E7DB5E9, 0xF6917105, 0x69EAC50B, 0x371AF8BE, 0x2E3E8938, 0xF4F6A919, 0xF94ED9E6,
+0x2751B0FE, 0xC60E244B, 0x856BCA3D, 0xC5519014, 0x7C4C4533, 0x37659371, 0x210BDD92, 0x5EE1C373,
+0x7D327C29, 0x006C04AF, 0x37567ABA, 0x5CB270F8, 0xB4A3A649, 0xE3940702, 0xE5771AD4, 0x44A8C9F5,
+0xB056870E, 0x0D924A40, 0x260EB604, 0x593F6E96, 0x4CC4704A, 0xC3154761, 0x412F4497, 0x69508E3D,
+0xD17F8821, 0x7C457FCC, 0x733FFB6C, 0xBB77477E, 0x961D13EE, 0x5AFCE245, 0xFA13FC43, 0xAC19BE95,
+0xC6CA120C, 0x7C603C43, 0xD2537D1D, 0xC7B23440, 0x18E669D4, 0x044CE9FB, 0x18AF0A95, 0x7EFCD99F,
+0xECF65E95, 0x08D00245, 0xCC206758, 0xCC2DD380, 0x03AB386A, 0xD95E50DE, 0xFA30F4E9, 0x206FB63D,
+0xC4C9D1A3, 0x39699796, 0x8EF4F1EF, 0x0A9EE614, 0x34F48AFD, 0x9C099ED1, 0x5E85E0CA, 0x4E91F855,
+0x2D7255FA, 0xD3C6C71E, 0x4EBFE08F, 0xFCC49647, 0x232798CD, 0x4745DA62, 0x6F8076DC, 0x948518FD,
+0x9641C986, 0x8C58CC87, 0x39FF43C7, 0xA5FE74A2, 0x1217A78C, 0xF4B6618B, 0xB57433EB, 0x734C75D3,
+0x62E6ACA8, 0x443DDA35, 0x62269D27, 0xC7574DB7, 0xA94C0D6E, 0x818BE86A, 0x6A652722, 0x1DB3A96A,
+0x692F312B, 0xDDD8FAC2, 0x53BD44D9, 0x2B907E1D, 0xA9489411, 0x54F91CC4, 0x326D4089, 0x21982811,
+0xD0B12B22, 0x5DD0A714, 0x3E91AC4B, 0x2723BCD6, 0xC144C09F, 0x75B2CCB0, 0x889BBE99, 0x895A520B,
+0xDC175D36, 0x2B7F8A7E, 0x0EBB2E9B, 0xCC51A086, 0xB2CA096B, 0x149EE399, 0x1C13EA89, 0x0902264C,
+0x8382F90E, 0x098E2145, 0xA03089F6, 0xEBD0B751, 0xEB6CD577, 0x86404ECF, 0x3EAED86D, 0x06F1A2D7,
+0xDBD17189, 0x18D211CB, 0xC5A2B230, 0x2AF5D855, 0xE2064134, 0x42B90C4D, 0xE5080400, 0x9067B6BC,
+0x1D00FF23, 0x8ED66535, 0xDBA41D15, 0x101D1708, 0x67FA32D7, 0xEF7CD264, 0x38C5C33D, 0x5DDE167B,
+0x6AA598F7, 0x4982D562, 0xC10F2496, 0x40C3F0F4, 0x52A205E2, 0x339C25FE, 0x99016613, 0xB66D58F8,
+0x62E30736, 0x71DBF3BE, 0x952D2C4B, 0xF108FEBD, 0x4135DBE5, 0xA985CD4C, 0xD933B0BB, 0xC6E9ED27,
+0xC8B771F3, 0x53FC6884, 0xA16CAEB7, 0x396C4C26, 0xEA598779, 0xFFCFC5F8, 0xF3913B1F, 0x938CD6AC,
+0x51D24D9C, 0xC3B6C81B, 0xD9E57812, 0x552C487D, 0x689DAD45, 0x1CEE594C, 0xA40C3D0A, 0x8F4442D7,
+0x3D5AA3D0, 0xC5D3E20F, 0xCF53347A, 0xED835BBE, 0x90DE7754, 0xA21DD586, 0x57C6CA31, 0x198217AC,
+0xFB2BD8F6, 0xD93CD029, 0x883BC81B, 0x7F23E96E, 0xAAB64834, 0x45B62A4C, 0xE146E40A, 0xF1CF5313,
+0xECE03B39, 0xAF43D14D, 0x2B40A933, 0x8145B5AC, 0x4483C371, 0x0A3CA63B, 0xACFFFB4E, 0xC9EA8C62,
+0x11C1B685, 0xBD698F1F, 0x1B1A4959, 0xD9DA20D8, 0xFEFE235F, 0xEFB2096D, 0x5B9AED2D, 0xD7096297,
+0xDFBA2146, 0xF2FAF89D, 0xB7B72F27, 0xE78BEA5A, 0xFC070993, 0xB89FEDF1, 0x82B53EC7, 0xD3AB50FA,
+0x92C112E6, 0x1BF155AA, 0x9081485A, 0xFCE1B00D, 0xACEC25D8, 0xCA328924, 0x7C8DD9D1, 0x52AD3AD3,
+0x08809A42, 0xDAF440D9, 0x1C87B807, 0x7977E339, 0x8A9D7B21, 0x6070643D, 0xCBE9943A, 0xDC7532FE,
+0xFF0C6268, 0x8013E0F5, 0x0DA545E1, 0xAB2DC211, 0x4D8F397F, 0x6CB4BDE3, 0x665824F8, 0x0AEA5305,
+0xC2D542D4, 0xD387302B, 0xC395ACF7, 0xB644898E, 0xB99A3BFA, 0xC008E902, 0x0880D948, 0xF876A2D6,
+0x19BA57BF, 0xADF07AFC, 0x84ACD1B4, 0xF87EC5C1, 0xF36C52D2, 0xCBB096F4, 0x4A3FF874, 0x109FEB95,
+0xE6CF6A10, 0xE5776074, 0xB2B57F76, 0xCA7FBC35, 0x01EB72BC, 0xC5D0293E, 0x72031094, 0x42FE9EE4,
+0x80BC93A5, 0xAEF1FC24, 0xE271206E, 0xC2E654A6, 0x33121A1D, 0x8E1E33D8, 0x27432979, 0x05572BCE,
+0x06E5A6FB, 0x0C1E510C, 0x3FF50717, 0xB7C4D8D6, 0x58EA35FB, 0x23FDA603, 0xBFB06974, 0xDBDF7CCA,
+0xD2DAA331, 0x7769FFEF, 0x0F1D12AB, 0x7DE3355E, 0x6D9EE833, 0xE4462A63, 0x78E88A13, 0xC64C0D1C,
+0xC29D73C0, 0xA0376B46, 0x9C4AD3FF, 0xACFF12D3, 0xBF0DA62F, 0x332202A8, 0xC579788A, 0x5076C11B,
+0xC7FCE2EA, 0xF8A67E2D, 0x0DDB76D0, 0x8B4D6DA9, 0xB831056D, 0x5CF3C530, 0xF72AC272, 0x88074923,
+0xCAE8356F, 0xCDB07218, 0xAC99B2A3, 0x60845E18, 0xE59B01ED, 0xD7342052, 0x924398EE, 0xF84F0395,
+0x979FDF1E, 0x2A2D4F61, 0x00DDD09B, 0x76D63FC0, 0x4388B9BF, 0xE377B413, 0x632F4D29, 0xFC1EAE7B,
+0xB5EFC875, 0xF87D5D73, 0x8180401C, 0x4FC3D8FD, 0x91F23685, 0xAF2E3A02, 0x6AAFFF19, 0x3C10F10F,
+0xE18DCD59, 0x1170ACB7, 0x4ED9FD9C, 0x0DFA1F1B, 0x30E5B5B0, 0xDC1D6716, 0xADFB4124, 0x3DAA46CA,
+0xCF899F72, 0x33EC7A39, 0xD7EB8B33, 0xEDDFBD63, 0x22B95F78, 0x30F85862, 0x81BE155D, 0xD7C2E2D1,
+0x99B624E9, 0x682F8FF9, 0xC5E8A728, 0xE5A57558, 0xDACF9EBC, 0x044A3E5C, 0x4BB49FE3, 0xAB4F90A0,
+0x42D399EC, 0xC71E8557, 0xF9ED9969, 0x32659101, 0x13857989, 0x255AEE64, 0x56A9333B, 0x9822A4B4,
+0x2DC0A81C, 0x24D30250, 0x06431B13, 0xE3443A91, 0x2F156D92, 0x993CFC0B, 0x2947309C, 0xA64563CD,
+0xAD8BD5E7, 0x070D3A34, 0x991A148D, 0xA921FB05, 0xD9707038, 0x8C156A94, 0x70851759, 0x7B95107F,
+0x7C195207, 0xD336804D, 0x77DCE9C6, 0x2D68E779, 0xD9D84A49, 0x8332FE5F, 0x90CEC4B0, 0xBE29178B,
+0x009E2226, 0x27BA18DB, 0xA61AEADC, 0x62B41D27, 0xF4A68F09, 0xD270834C, 0x2D3032D5, 0x0AEDCE3C,
+0x8F151C11, 0x1BA229AC, 0x79262083, 0x96BEC8FE, 0x59ECFD54, 0x39692E75, 0x41B3F95D, 0x859013AE,
+0xB5D4B7E9, 0x5B277D1D, 0xAC7234B4, 0x310E89F9, 0x7C3B6A04, 0x9E643B45, 0x27814157, 0x8C20A49C,
+0x7C384F9F, 0x440B487F, 0x76CA5B42, 0x10580C82, 0x278B25C1, 0x3F2DF6D9, 0x8E966F3B, 0xC316D126,
+0xAC9B6A1D, 0xE4A7B4F1, 0xE7A7A840, 0x00DD1D7A, 0xE7D649C9, 0x054986FF, 0xF37273B4, 0x098AC4AF,
+0xB1E84FE3, 0xE02A6FF4, 0x61AF5CBC, 0x25BD2043, 0xA466CFE3, 0xCA617C92, 0x75AE98F5, 0xA72A33A3,
+0xAE0E0CFE, 0xB0BC223C, 0xE478DF2B, 0x803D0BD3, 0x626EFF09, 0xBF2B1756, 0x220A445B, 0x075EACB2,
+0x362724FA, 0x0A6AF75A, 0x7C60693E, 0x18633301, 0x47E9C17F, 0xFD149F16, 0x03BED468, 0x655F22B4,
+0xEC60851A, 0x3D42B608, 0x5454299B, 0x22B8C51E, 0xEE19DCEF, 0x424B3614, 0x95854F1F, 0x6F516596,
+0xDDCDCCD2, 0xCC3E69FF, 0xF4F91087, 0x7F9707A0, 0x87B64E1C, 0xD5FE34CF, 0xB27B3F08, 0xC05E5538,
+0xEC45B36A, 0x3D0B6C0F, 0xC24D52DD, 0x613BE3E1, 0x36B5A512, 0x422C48DB, 0xC4A512C2, 0x951590C8,
+0x8B635D14, 0xBE33F7DE, 0x9A995DF9, 0x0674ABD8, 0x29E6B4F7, 0x4955AB9B, 0x44957B2C, 0x023C77FF,
+0xAEF009C3, 0x6CF34839, 0x1A7D8175, 0x9F54A9BA, 0xF7F90EF7, 0xD9815A83, 0x6F97E149, 0xB60853B0,
+0xDA5EA4EC, 0x014A884A, 0x5EB17F0A, 0x9A729E50, 0xB7967280, 0x694743A6, 0x3BCCFD53, 0x538A5306,
+0x7B29CFB5, 0x9CBACA71, 0xD3376C54, 0xEBB63F6F, 0xA5D92528, 0x15702F5F, 0x1D9C84F9, 0xBA91DF7B,
+0x90066A99, 0xFD87C31C, 0x9C78A387, 0x47F0A002, 0x762D8B75, 0x703309D1, 0xD5E66135, 0xF4A8138F,
+0xDC594EB6, 0x1F2F42C5, 0xEF65E510, 0x745AC66F, 0x26BEFB5A, 0xA9EF5055, 0x81B7DEC2, 0xAA0C1B98,
+0xD56C55E5, 0xC322586C, 0x665E2D62, 0x23F13BD7, 0xC693EBED, 0x2F20974B, 0x39EFF95B, 0x2AF34684,
+0x9724DC27, 0x02E32B6B, 0x25C03AEA, 0x929C7BEE, 0xAF747C1A, 0x88F04551, 0x80ADB7FD, 0x5D0C0062,
+0x5FDA72D6, 0x19D02245, 0xDA2BB4CC, 0x8DC6B46F, 0x6E8123DC, 0x73AE5733, 0x6D39A2D7, 0x4797A200,
+0x1A199C28, 0xE4BC4BAB, 0x05A60A20, 0x0EDDA651, 0xA9950571, 0xC5025A1F, 0xCADAF6C4, 0xC1E587B5,
+0x350838EB, 0x45765839, 0x02F274FF, 0x82BDD438, 0x6FD2E4F3, 0x5EDA1A56, 0x3502D5BF, 0x8B0AFD70,
+0x7D2B90A0, 0x41BC475F, 0xF5266682, 0xFE3E7305, 0x5E216B2C, 0x0FF22281, 0x7CE62360, 0x99A42FF1,
+0x86AE8D28, 0x7AB55B7C, 0xCF52E265, 0x20DB86C1, 0xE6C274BC, 0x37695DBD, 0x6D2EA0F5, 0x83399EE1,
+0x4B213B45, 0x0C6BFB38, 0x2DF1D0C7, 0xB333FD18, 0x8AA1B265, 0x2C5B12BB, 0x609A2B7B, 0x83902E4D,
+0x7AEC4C4A, 0x6F84BCDB, 0xE8778116, 0x16B78F0C, 0xC284662F, 0x1BA66DD1, 0xA6CBBE56, 0x0890F57C,
+0x4994D3FF, 0xE3D84CF9, 0x17CB4F27, 0x8FBA38D6, 0xE37FFA92, 0xCD3B32E7, 0x93B83BD4, 0xD55880FB,
+0x94926970, 0x6BF6B87F, 0x3755C879, 0x6639992A, 0xB11A984B, 0xAC75BA0A, 0x3C43E55B, 0x60A713F4,
+0x11714622, 0x79453459, 0xB7F5205E, 0x7E48E9C0, 0x6059F14D, 0x2DC42151, 0xA1670621, 0x04580721,
+0xF9E23293, 0x151A98E8, 0x0395CC66, 0x888DE40B, 0x461D2473, 0x07F4B254, 0xEFFBE210, 0x4449DCA9,
+0xCE403AAC, 0xCBDDAA12, 0x8DA1223F, 0x21065B24, 0x976A26B9, 0x8352C9A0, 0x9DBCCCD2, 0xFF31AC94,
+0x157D6D9F, 0x3234A2EA, 0x7CBEF6F9, 0x30B0E3BB, 0x67F3FA41, 0x2AD3361A, 0xEDCFA152, 0x639808B8,
+0xD526D797, 0x62A1E19F, 0xF1B1AB0F, 0x8E5C9255, 0x2221CC04, 0x8E5E2EE8, 0x09CD2B52, 0x92BC4A0C,
+0x298EB62A, 0x9AB885A1, 0xB576757A, 0x2F02AB53, 0xE337662E, 0x76C2A787, 0x10825834, 0xEF025D37,
+0x49F82846, 0x40E92860, 0x19E9870C, 0x0E4B54AC, 0xAD96A838, 0xD68A0554, 0x5BB8314D, 0x4F71FDBC,
+0x0DF9F948, 0x5C5B84FA, 0x0963F76A, 0xDC716E15, 0xA83960E2, 0x6D94E998, 0x226C2321, 0xBDD8BD07,
+0xA1E5B8B5, 0x7BEC5079, 0x04F0D684, 0x6DCE3A7F, 0x1BA2B008, 0x7EE525A5, 0x98B94CEF, 0xFC396FFA,
+0x0D639D31, 0x7B0D062D, 0x842216DC, 0xE0A07428, 0xACF7979F, 0x1A97D884, 0x887C9B1B, 0x69B77C40,
+0xFF6082BB, 0x64CEBD62, 0x163AF3D1, 0x2A33A48B, 0x245AB2B6, 0xD18AF0FC, 0x3DC1CA73, 0xDBD210D1,
+0xFB951A8B, 0x5F605B3E, 0x66FFF340, 0xB4D9418B, 0x69EC906D, 0x6FBF8639, 0xCED64B99, 0xE9B202F8,
+0xEA8546AC, 0x717131C4, 0x8B143152, 0xB9EFDAD9, 0xFCBE33A2, 0x5FA2091C, 0xA9B02922, 0x328DDB65,
+0x0DAE696F, 0xE12AC1BA, 0xB1618A0B, 0xE70BF658, 0x181F853B, 0xE6118D78, 0x3D5F24E6, 0x827E54C9,
+0xCC7B5DD4, 0xB2040EB2, 0x6D8772EE, 0x45852BE6, 0x9666C7B4, 0xBCD28246, 0x39F26C85, 0x9DD58512,
+0xBFA9CB64, 0x8EC5442E, 0x7E4424EB, 0xE238593E, 0x61093DD3, 0x1131E6A0, 0x3ECFA1BA, 0x3F7BDE13,
+0xA98C3FF8, 0xDB76D907, 0x55723DE7, 0x7CF217E3, 0x4411278E, 0xAF1E0E63, 0x578493C2, 0x7AFD3CDB,
+0xA91A5169, 0x8D08BEFE, 0x08CF7A1F, 0xAFC6ACA7, 0xAB7C838B, 0x532F4A49, 0x1D89D76D, 0xD9A98B62,
+0xEBE80F80, 0xB7917E3C, 0x280A2582, 0xAD53644C, 0x0E7A7FF0, 0x7BCA7E24, 0x989B7BAF, 0xB8EA09A6,
+0x3E151039, 0x69E5460D, 0x22067F45, 0x1C1ECCD7, 0x08755E52, 0x36E67020, 0xEE987297, 0xA2144C44,
+0x1BB0D95E, 0xD2F9B09A, 0xB6102267, 0xFF0AF40E, 0x4A6282C8, 0x8F8EDBFD, 0x30EA64B0, 0x99E7664F,
+0x826BECEE, 0x399D5D81, 0x489585DF, 0xAC57B8F9, 0x1C76A466, 0xC01587B6, 0x8A17B426, 0xB1E91261,
+0xC3C2E7F4, 0x5008CC75, 0x5BC11E99, 0x5C26DCA5, 0x250DD1A5, 0x5F2D3D80, 0xB74E3588, 0x92E09BE9,
+0x390DFEF1, 0xA3E54DFB, 0xC2480357, 0x26A6A9B7, 0x0D9FD0CB, 0xFDE54E21, 0xEB58C1E5, 0xF22B19F6,
+0xF82F39C1, 0xE74BCFEB, 0xC32FB9C7, 0x974233C9, 0x03E186DD, 0xB3B0C8A7, 0x4608841C, 0x54DAB8DA,
+0xBFE2AC5A, 0xC0CCC01D, 0xF0738C73, 0x83D3D259, 0x70D6FDD9, 0x40D39F81, 0xAA4C4CA3, 0xD160710C,
+0xF9AB640F, 0x263AE150, 0x769A352A, 0xB47E7644, 0x8A8B9737, 0x03058688, 0xC06F167A, 0xC3F6CB5C,
+0x1239969E, 0x0B874128, 0x7C107981, 0x38277EEB, 0xB53623E4, 0xA0E5B41A, 0x7EEE120F, 0xA00FB981,
+0x3A0A5532, 0x0563F62A, 0xC3AAA34B, 0x6E88464B, 0xF7C211F3, 0xD0FA5B8D, 0x5115DC23, 0x490BB846,
+0x906CC4EC, 0x00005923, 0xEEBDE12B, 0x57B887D5, 0x8F8A03B9, 0xD6B52BE0, 0x7EF6096E, 0xDB8075C3,
+0xAD6041EC, 0xBB291721, 0xF43C7B6C, 0xC6DE1B08, 0xFD027337, 0xB191A83B, 0x5A09136A, 0x2E2D5405,
+0x9E638E32, 0xB1F584F5, 0x1924F930, 0xF4644D99, 0x7CD36A93, 0xBFA15122, 0x3B83515C, 0x89CF3E4F,
+0xB78F575A, 0xFDE0A6BA, 0xBD8FEE93, 0xFBE56DC5, 0x4708394A, 0xBC1C6E6A, 0x72679FDE, 0x1EB1A711,
+0x64AE52BE, 0x36A218B4, 0xBB46081D, 0x08E6D692, 0x1D341DE1, 0x2E964BCD, 0x9C54E98C, 0x84D772F2,
+0xF7A09B35, 0xF25E1CFD, 0xDB1047CF, 0x97BEBEE2, 0x6445AEB5, 0x6EB52D9A, 0x9F57B07F, 0x8E8EF674,
+0x3A3ED643, 0xFA312974, 0x1E4C5786, 0x5E49832A, 0x49B209F8, 0xCC480789, 0xA27D19E5, 0xF508136B,
+0x25B890E2, 0x22D57585, 0x52E54A97, 0x1079CB97, 0x00007E89, 0xEE280100, 0x00C81508, 0x21010000,
+0x001800B8, 0xEBCCFF0D, 0x0CC1492A, 0x31FDB4E5, 0x961A1996, 0x98E253BB, 0x77ABBE28, 0xB3D617E7,
+0x77C028FC, 0x9E96FA0D, 0xF70F00C2, 0x1D497F9B, 0x989FAB61, 0x657AAC45, 0x00895901, 0x97A6F7CB,
+0xAD2C6244, 0x4EC9AFA3, 0xEC8FA893, 0x3AF2039B, 0xDC477053, 0xC494DC8B, 0xAC6F25A8, 0x7C831C47,
+0x3C9CCF62, 0x763F74D6, 0x7B338972, 0xB1322EA5, 0x8490632C, 0x1B484DF0, 0xF85FB51C, 0x0CBBBA29,
+0xD5A660DF, 0xA5905B51, 0xA4EAEFBE, 0x9A2E1457, 0x7C4F38CC, 0x91BB4129, 0xAA2E15C5, 0x0288E264,
+0x60FE5363, 0xE617D4B1, 0x4EF10E0B, 0x88B34E30, 0x16AEE068, 0xB6FF199F, 0xF64B9BF4, 0xAE18E8CA,
+0x325F4A92, 0x0CF47433, 0x5003F786, 0x9B028608, 0x55E04094, 0x16B2470D, 0xC37811EE, 0xCEDAA9EF,
+0x49BEC89B, 0x559590FA, 0xB6E4537D, 0x62FBF026, 0xAA1A6D6B, 0xCB741FA8, 0x6EB72869, 0xB01AF936,
+0xC04DFC3E, 0xF36D91B3, 0x1C1D53A4, 0xBF77ECD9, 0xD1B05D7A, 0xBDC68A41, 0xB89B60C1, 0x87484063,
+0x8234F2C2, 0x229CA380, 0xB2340AC6, 0x52E811CD, 0xD4C846D7, 0x89796641, 0x697F9390, 0x207EE87B,
+0xC5596E8F, 0x17E7DACA, 0xC0B68EB8, 0x6425E389, 0x20DF76CE, 0x797012DC, 0x0283D96C, 0x6EDB83F4,
+0xF33746CA, 0x38DABEAE, 0x29224653, 0x7A6B5FC7, 0x8B0E9AA6, 0xD32D36E0, 0x5860C6B7, 0x210F8E0B,
+0xA2EB975C, 0x701D6769, 0xAA20394D, 0x37F36CB6, 0xF06881FA, 0x420EB03B, 0x98B77708, 0xBA96FE32,
+0x17AF6DA3, 0x689F2AEF, 0xA0528347, 0x99116065, 0xE13B7B47, 0x8E888AAE, 0xAA9E0423, 0x144D5483,
+0x7F9D3DE5, 0xE0E5C4B7, 0x8BDEE23F, 0x6A136C08, 0xFD2448AF, 0x36E87337, 0x65C1BB0F, 0xF26EFEBE,
+0xF5284190, 0x671BA5B2, 0xCFD0C1B7, 0x9ACBB639, 0xABBEC38A, 0xB6BBCA95, 0x595DC82C, 0xCE55B4F4,
+0xC1C68DB8, 0x9F93D527, 0x49B620EF, 0x8514DC67, 0xD4ACC3DD, 0x49E215ED, 0xB6C0BA9C, 0x442D93AC,
+0xB874B6BF, 0x1D23B802, 0x1DA36CAA, 0xD8D1F4B3, 0x3863E2EC, 0x5DDF9A8E, 0x1F00110C, 0xE35260C7,
+0xB85EF3D1, 0x1C910693, 0x29B867A2, 0xCCA20ED8, 0xF841795A, 0x123AA2E3, 0x71E27806, 0x37F5FB7A,
+0xFC7321FF, 0xCFFF3927, 0x213A2790, 0x4B7A8D1E, 0x8B5FA9FE, 0x65121220, 0x7FA12C2C, 0xE1DA6108,
+0x5AB61124, 0x41C2E08C, 0x08BBEC5C, 0x31A3361F, 0x69BEE84C, 0x6DBBA98A, 0x3CCDB8CE, 0x6D640C66,
+0xFD459E9A, 0x06944B5C, 0xBFB7437D, 0xE5A64501, 0x68A7A2B1, 0xCFF4A539, 0xAA2C5A4A, 0x77479CA0,
+0x233A9E53, 0xDD65F37A, 0xA0E95A3E, 0xCB13FAAB, 0x0EEA3DAD, 0x7B580747, 0xF8E33B8C, 0x329C852C,
+0xC222265C, 0x167FB54B, 0xE0211909, 0x47FAB8DB, 0xAFF6888F, 0xA020D476, 0x68D5627A, 0xFFB737C6,
+0x28FA68C8, 0xEC478134, 0x62C8BEC3, 0xAF469EF5, 0x1B478428, 0xA788FA27, 0xEEF41A8A, 0x26BAE605,
+0xCF8B3CCE, 0x35417CF0, 0xCC508B43, 0x5DB39CB0, 0x020A165E, 0xD98F7841, 0xC2775956, 0xB4A9C5AB,
+0x9C77F71F, 0x0F5DD88B, 0xA127E222, 0xE3BB4532, 0xD9CCBD17, 0x5A593B38, 0x62EBDF9C, 0x04D3D1A7,
+0xF9405692, 0x198AA66D, 0xFBA2B7F9, 0x3FA13AB7, 0xB258652A, 0xDEB9776D, 0x9AB250DA, 0x319A3FA6,
+0x9CE48186, 0x1A01FCB9, 0x475894EE, 0xE9BDFF79, 0x49CCF056, 0xBBA97622, 0xF71D8C63, 0xDC3C8459,
+0x55CBD082, 0x1D700964, 0xA714DC62, 0xADA59C49, 0xF44CEBD8, 0xD8E3EFC4, 0x8895BB87, 0x81F6BBA3,
+0xA34D6603, 0xF3477138, 0x63704406, 0x81EFB6BF, 0x73A3EECB, 0xABA7B822, 0x034CEC9A, 0x2DEB7C37,
+0x5C8EDC55, 0x803103DE, 0x48BB005F, 0x69003E6C, 0x1C5D52D8, 0x86CD4D6F, 0xB41310DF, 0x725368AB,
+0x58AAB7DD, 0x61B53085, 0xDF1247D4, 0x497017E8, 0xDC660FA7, 0xF54AB784, 0xA7B932EF, 0x6A8580A8,
+0x6D8965C7, 0x0C468FBC, 0x1A2B36DC, 0xEF391076, 0x2DB66D8E, 0x8E68F38F, 0xBD0751D1, 0x9AD5C563,
+0xD8AEEA52, 0x29A1CAE3, 0x7215F79D, 0x8C43072E, 0x58C5C84B, 0x3F4E5E65, 0x9A19F314, 0xE582D83F,
+0x228678E3, 0xE2C1AC52, 0x3A073F31, 0x6EA55BA8, 0x8BDF1799, 0x1CE1CA2E, 0x917C6308, 0x5E2E185E,
+0x9ED29414, 0xA4550F88, 0x60A53B9D, 0x9B0495EC, 0x194E411A, 0xCA172D32, 0x2607E023, 0xA40815C7,
+0x1A156A5C, 0xAF42FE7F, 0x2EEC3F35, 0xC287731B, 0xDD41F71F, 0x45AB75E7, 0xBDBE2B31, 0xAF00719F,
+0x4169A7C1, 0x0998F49C, 0x3859F33C, 0xB7192225, 0xE18BEA5B, 0xCA906754, 0x932F1B62, 0x4AC206EC,
+0x653FA819, 0xCD2C9392, 0x9CF54FB8, 0x29C927D6, 0x1B1DBFE6, 0xFC6513B8, 0x2CB44D1F, 0x14DC82A1,
+0x271F1C9E, 0x019A7736, 0xAD01A951, 0x43856C33, 0x02746C41, 0x50EB34DF, 0x0645F2E0, 0x199A24E2,
+0x9DEC9848, 0x5B053FC2, 0x5FE3DD5E, 0x5757C216, 0x306AFB09, 0x1282E5BF, 0x4717B62F, 0xEEA39902,
+0xF4E1C332, 0x4E728E88, 0xF3543B07, 0x7E4DC35F, 0x8114C848, 0x5A2610C7, 0x90BD7547, 0x6817F94A,
+0x8DC9D128, 0x14B9D5E2, 0xB5CAF93F, 0xDE1B5DF1, 0x2B373CBB, 0xE97356D7, 0x0DF9E3E3, 0xCF0A2D74,
+0xF67CCA17, 0xE92BD8DF, 0xFF011BE5, 0xA23EE6B0, 0xF55860E0, 0x96CFB4E2, 0xC659EA32, 0x38E4E041,
+0x35510F53, 0xE8DFACED, 0xAE9F5413, 0xCB250CCF, 0xE64B7DC2, 0x3E25BC7D, 0x1FBC3864, 0xA2EBD050,
+0x6A2D159A, 0x3F3A8A9A, 0x4AC50709, 0x267050C5, 0x03FC2FD1, 0x6633C533, 0x48E3A07A, 0x92866199,
+0x67B1EF90, 0x637EEE2B, 0x15AE299D, 0xEB9AAB41, 0x49B8F126, 0xCE98D253, 0x7027FCC5, 0xCF470186,
+0x8A4AA1B8, 0x62BBA2DC, 0x71E825BA, 0x9AA0C8F6, 0x2CB78E3F, 0x7A3EC804, 0xEEA7C114, 0xAF3E0195,
+0xCACC62A0, 0x86DD96BC, 0x7D6A2586, 0xF8489F03, 0xC8C630A5, 0x5DD7E042, 0xF3631BBA, 0x52A36BBB,
+0x40639492, 0x1F7B5F9D, 0x129660E0, 0x60F0614C, 0xEFCCEC32, 0x4878A62D, 0x1CFDF9B5, 0x6AC163CC,
+0x21195331, 0x85568801, 0xB6456D19, 0x2BBA083A, 0x085CA11A, 0x6C70F3DE, 0xC7C64AA8, 0x6431A8BF,
+0xC2D271E9, 0x9A4EF247, 0xC01756A0, 0x09B71BAD, 0x4EAE7604, 0x90F897D5, 0x6B8AF1C6, 0x4F89E344,
+0xE92AA644, 0xDDC2E758, 0x7CB9C9A6, 0xA7E7D0A0, 0x9F2BEDC8, 0xBB28A848, 0xFEA59CD3, 0x6458BCC3,
+0x426D9DF9, 0xA4EE3C90, 0x64E5F4B0, 0xEB74711D, 0x9CA7E8C2, 0x9319EDC2, 0xCF251231, 0x989DBF4C,
+0xECFFB62C, 0x57F329FD, 0x8356D642, 0xBCC53529, 0x90722A3E, 0x5C0E1299, 0xE30B7EFA, 0xA1FB88E6,
+0xB3705C79, 0xD5379B09, 0xDC8BB14E, 0xD0E41F69, 0xCD272F35, 0x3CEBB837, 0x42748AD8, 0xEE2D221F,
+0xC833B487, 0x5C5C069E, 0x8CB9DB4A, 0xF79B710B, 0xCBB8C7F2, 0x3B2C7120, 0xB4274C8F, 0x874E803D,
+0x78D93F9C, 0xD2688E24, 0xBF13F47C, 0x334A9EB7, 0xEEE5A260, 0x43AE3EFE, 0x7EFA4C53, 0x0EBAB096,
+0xB4A5B667, 0x8D3B60D5, 0xCF1C53F3, 0xF9D5CF09, 0x237F0CBA, 0xD8EE033E, 0xBB8C2D63, 0xB4462EF6,
+0x1FFB0EA3, 0x041D5CEF, 0x908D992E, 0x504A40C2, 0xA9B7025B, 0x77310EF8, 0xAFCB6A2D, 0xFEF03F3D,
+0xF7283592, 0xAFED86B3, 0x90D14722, 0x657A5D03, 0xBD59A186, 0x18B3B941, 0x11B607F9, 0x0D03E3EE,
+0xA469170B, 0xF376AB51, 0x0525B7BA, 0xF0F527AD, 0xDCCD8196, 0xD0BAB1A4, 0x2175B222, 0x5831F355,
+0x01EF98A4, 0x71D639F4, 0x93B27CE8, 0x0B303607, 0x3E19FAC6, 0xC3DB2928, 0x91D58948, 0x16091CCD,
+0x7BACE411, 0x92A51DAC, 0x126D0365, 0x2C69AE1B, 0xB4A380E8, 0xD422E0ED, 0x2986F117, 0xE50E5EFF,
+0x19DE6586, 0x3B8D369E, 0x55F565A1, 0xC7DC9F55, 0xF20E0B0F, 0x5C7C7C75, 0xAF3B9F39, 0x968F1AA5,
+0x94B023C0, 0x6641F253, 0x70FC34B5, 0x94757032, 0x2614F797, 0xB0F9EE0E, 0x1E4E726A, 0xCFAE852B,
+0x5F2B71F7, 0x3A6554A3, 0x2E17DA14, 0xA52EB269, 0x9EE1D5AB, 0xFDD9DAC4, 0x20294CE1, 0x26A656EA,
+0x1844B192, 0xB771D2AE, 0xC619949D, 0x8D782B5E, 0xE6C72554, 0xA7E696DB, 0x244AC838, 0xE7C3E5F3,
+0x888517ED, 0x8351119A, 0x017E702C, 0x6A846A03, 0x1D40C725, 0xBC20E117, 0xC9E4FC80, 0x472C3CEB,
+0xDB10396B, 0x4D7BAAE6, 0x09683CF5, 0x536AAC20, 0x3FB9D7B9, 0x582EDF58, 0xCE2F616F, 0xB25331FE,
+0xBDC6D5BB, 0xF664E266, 0xAE84D117, 0x3A2668AF, 0x6344B315, 0xBE2DD120, 0x39183AAB, 0x7933CEAB,
+0x811DECC4, 0x69E6A820, 0x46B8909A, 0xE797F069, 0xE811D021, 0x60E2ACE1, 0x22955636, 0xC9E26266,
+0x1740086E, 0xEB4B460D, 0x34D84E54, 0x7C269FD9, 0x1BB28B0B, 0x56674258, 0xE6AA7369, 0x89D89D52,
+0x5CD6B514, 0x9B57BF14, 0xC3F39820, 0x84E28EE2, 0xD4D65DBC, 0x3E845C97, 0x50E72278, 0xBC7507BA,
+0xBCC50404, 0x0685D6E0, 0xC5EDEC15, 0x0113AF33, 0xFD4B21A3, 0x3533E7FB, 0x1E0DF6E8, 0xC0A805E1,
+0x29652C17, 0x7493B090, 0x0D03BD0B, 0xE44BDD43, 0x9E05A660, 0xDF6CD101, 0x8D6CC2C7, 0xD56C8873,
+0xE24FF842, 0xAC7708AC, 0xC26D42E4, 0xA904E945, 0x85F9982B, 0x39CC0249, 0x5AB68433, 0x97A88ADA,
+0xC0776174, 0x8A4C0734, 0x4FECCB2F, 0xF93F31E8, 0x6FD377CB, 0xBF213D6F, 0xF7B1DDE9, 0x48D4626E,
+0xF1A2548B, 0x2BACDDB4, 0x6AEF0217, 0x5037521D, 0x0D4C87B8, 0xD43D12F2, 0x85069847, 0x9B4F2CAE,
+0x9AAB7E6A, 0x448AC246, 0xE199EB87, 0x3680421E, 0xBCD31491, 0x26AE7E82, 0x7E409E20, 0x5B03953C,
+0x9AFFE444, 0x54792F4D, 0x9966F19B, 0x15BE5C7D, 0xC5A28684, 0x321F4BDF, 0x56F04CED, 0x7999DC68,
+0x699842F7, 0xF2F1A985, 0xCE8BC1C1, 0xDBEA5186, 0xB77D0460, 0xFFF3477E, 0x09A8D0AB, 0xEB48911A,
+0x9BEF3405, 0x38A0BBCC, 0xC7A8F68B, 0xE515604F, 0x49CB7263, 0xB8647087, 0xF401558A, 0x092BEE76,
+0x6B4D23DA, 0xD065FC24, 0x40D7FBA0, 0xFD897146, 0x499D309E, 0x0AB9B3CB, 0x6AB77513, 0xE38255D0,
+0xA65EB1B4, 0x4C1B2D28, 0x893C86D0, 0xEB55918C, 0xA8839BBA, 0x19A3FD94, 0xC0AAE2F4, 0x95D9860B,
+0x0A8798DD, 0x7D6BF9F0, 0x7D1EE1A8, 0xCD066659, 0xA133AB81, 0x6D0A0D85, 0x55AF042F, 0x2964D578,
+0x589877B4, 0x9F180A0A, 0xFCE85C45, 0xF95720E1, 0xDB9A59C2, 0xD2CF551F, 0x3AB01C64, 0x17CC71BF,
+0xECDD2F4E, 0x2491DBC5, 0x533609EF, 0x7520806B, 0x3C5734C8, 0x6FF89263, 0x0F9BED05, 0x9AC84CED,
+0xB5656F2F, 0xB69BE314, 0x9FF3747B, 0x3D724FA2, 0xA8E4F246, 0x3A243559, 0x0D586212, 0x2DFD5DC6,
+0x7F903116, 0x574E6338, 0xEA58F852, 0x34E32B2C, 0xB4C22015, 0x946505C3, 0xD2C392B4, 0xA2EEEE9B,
+0x8BC2E0B9, 0x9A0D9214, 0xB81C1EBE, 0xEE606D17, 0xDB259EAF, 0x13507D21, 0x40F85E3A, 0xAE53E106,
+0x14801F81, 0x5D31F60D, 0x2CD4EB75, 0x74633703, 0x3A24B3C7, 0x81915EF8, 0xDFAAE14C, 0x8F111AF6,
+0x0199F46E, 0x395F799C, 0x03FA79D2, 0x89A0D85B, 0x1EAB1765, 0x71CDE025, 0x5D85F4B1, 0x96E6D241,
+0xB69F0E48, 0x0D828E6A, 0x1581A7DB, 0x28F3684C, 0xE92B211C, 0xFFCF4F23, 0x338964B7, 0x37EBD01F,
+0x33D9E620, 0x4C6F47AD, 0xD54578C6, 0x85FB3966, 0x400763AB, 0x41625FF3, 0x76471CD0, 0x210FBCB3,
+0x70BFC2A9, 0x000CB8BF, 0x7183E59C, 0xCE737A01, 0xAADA31A9, 0x7487B719, 0xB30F54E1, 0x1F5D12B6,
+0xCF4B8F64, 0x8F1A1F52, 0xE6974BCF, 0xF0622B40, 0xE24E14AD, 0x347C13CF, 0x10EA1044, 0x616CD6DE,
+0x5D43C07C, 0xEE208F8E, 0xE93A43A3, 0x2D3686DA, 0x0FCEF9C6, 0xCB55494F, 0xED620010, 0xA29A923B,
+0x5343D547, 0x017AA25D, 0x624C85A6, 0x63C7AF31, 0xCBA9D269, 0xAFF39F58, 0x14305928, 0x0990DEC8,
+0x684E7425, 0x5FE99B9B, 0xEB26BB8B, 0xC7C9BF3D, 0xEE9CDA70, 0x74B4DE4C, 0x611F4190, 0x1B65D824,
+0xE31F1022, 0xF83C0513, 0x63AE3E47, 0x5438E321, 0xA39496D3, 0x7B19AB9C, 0x9CA4314D, 0x7931A531,
+0x7E4FFD4C, 0xE35C49D7, 0xDD3A74F0, 0xF76E73A8, 0x8A8D473E, 0x396DF01F, 0x85E5269D, 0xDFA5BDD0,
+0xF2C3162C, 0xF78ED18E, 0xF962F6F2, 0x1E5434A6, 0xBE78BD0E, 0xC16349C5, 0xFDF10485, 0x02FB518A,
+0x8E8264A8, 0x356E7F57, 0xE16770F4, 0x94A93303, 0x42AD1D24, 0x9C537819, 0x5EDCD9EB, 0xD206D1F7,
+0x610CB7A8, 0x0BA43458, 0xA6A08C95, 0x79B12B9B, 0x4BDF1455, 0x6BC95C1A, 0x6EB7B082, 0x877F85C5,
+0x9EEC5307, 0x65B4C6CA, 0x64DC8409, 0x0824086D, 0x7A14DB71, 0xFCC00684, 0x09BEF3B2, 0x644D35F6,
+0x593DC66A, 0x190855FF, 0xA9C70D1A, 0xB7E266BA, 0xC3F42FBC, 0x31346EE5, 0x581935CC, 0x55B5092B,
+0x2DDD9C60, 0x177D9DC3, 0xD3432EA5, 0x0DA7526F, 0x23143F15, 0xCC0DBD18, 0x79582601, 0x595EC015,
+0x529F35F4, 0xD6D62EC2, 0xAB0C6C8C, 0xBDBA4389, 0x587879DD, 0x57EFA888, 0x030B5FC8, 0x34861900,
+0x1518D989, 0x32B0C0BD, 0xAEDDF8D0, 0xFB70C7E6, 0xCF777945, 0x0B7A5EE3, 0x16A3384E, 0xE530C05D,
+0x79EFE4E6, 0xB1276EE7, 0x9C30D431, 0x49EE4719, 0xDBACC3B4, 0x50E7F26C, 0x72C090B0, 0xE46C54D7,
+0xE5456AC4, 0xE4776040, 0x22388227, 0xAC31940F, 0x8BE0D739, 0xB2E70B57, 0x5509208F, 0x311DBD4C,
+0x178F8D37, 0xF9B4EFB1, 0x9AE147E3, 0x32B705EF, 0x7677FB1E, 0x555B5EA7, 0xED4F3CF3, 0xCDD54FA4,
+0x87761A77, 0xB7B73FDF, 0x51542F1E, 0x85D55212, 0x5325CF81, 0x6B22FBF0, 0x0BDF4EE2, 0xBDC8841D,
+0xCE745609, 0xFD9CDC0B, 0x2BBC5DA5, 0x4DBDA905, 0xE765493C, 0xC2E2863C, 0x90EFCBD5, 0x6EA75CCF,
+0x9EFD002D, 0x6792606F, 0x6F4F0B66, 0xE1764D70, 0x7A257A4D, 0x2B8BA61F, 0x3325B5DA, 0xDCED2524,
+0xEA4DDD79, 0x1B84FEE4, 0x9DFDF92C, 0x397E840A, 0x8F728B54, 0x2F19AFB2, 0x7FF04B65, 0x31E122D1,
+0xC1E712FC, 0x8072D715, 0xA63FE5DF, 0x8F9980C3, 0xE9756EB5, 0xBB2F4003, 0x0E65A69E, 0xFDF6A69E,
+0xE918DA4F, 0x32C1A474, 0xCD10A990, 0xF51BD3A5, 0x37A229E1, 0x68475460, 0x4A129F8F, 0x4896AE2C,
+0x6BDDFFBA, 0x7F454DB2, 0xC0160EC3, 0xC56B60EE, 0xCBF45DE8, 0x5A4B2FE5, 0x1F41B6DB, 0xB0ED728B,
+0x94D27E61, 0x807EC8E1, 0x0C484A37, 0x14BECFD8, 0x4361A6F8, 0xDED8E847, 0x4D6FE491, 0xA0056D44,
+0x3C9C6E30, 0x2520FB9E, 0xE74E4B8C, 0x88EF60B2, 0xD6834EFF, 0xBF63DEFC, 0xA1FD4E62, 0x091BFF3A,
+0x31EF1BAC, 0xD5077DE1, 0xD73CD9B7, 0xEEA5D727, 0xFD2B45E0, 0xD65ADEE1, 0xB0909E30, 0x2FDFC7D4,
+0x8FAEFAE7, 0x5FEE370B, 0xA0572473, 0xECCD2289, 0xEB3FBC90, 0x29F6E90A, 0xF01B59AB, 0x8EE9D64C,
+0xFD23A722, 0xDC195C64, 0x4449FF3D, 0x2FAE6440, 0xC092D087, 0xDFF52D54, 0xEA9FB69D, 0xE42A7BD0,
+0x40B958B1, 0x27842429, 0xC13DBF62, 0xE7C2CD3D, 0x27CF3A88, 0x542AEE7C, 0x7A20D87D, 0xF3204235,
+0x7B9AACFF, 0x3879AFBC, 0x1C94C824, 0xA11464C4, 0xA1CA984E, 0xD09C965E, 0xF3867A85, 0x2326C3C4,
+0x763DF841, 0xDC848EB5, 0x4F14ECAE, 0x5F5194AB, 0xBDAA2B04, 0x344751B9, 0x71705B50, 0x2F5A98CA,
+0x3D4F6E74, 0x3464DF5D, 0xE41A1C94, 0x4EBEEF75, 0x289167B5, 0xE3C70703, 0x5264F794, 0xDC28216A,
+0x03B34FBD, 0x31E22FCC, 0x7E46B059, 0x72FE06C3, 0x7D4AF6A1, 0xD4867F7F, 0x940A4261, 0xEE50EA6E,
+0xC3D0BE5F, 0xFD8FA40C, 0x61316BAC, 0xE4EE2B84, 0x9CC7B64B, 0x536D654B, 0x0014F05F, 0x291DF366,
+0x06783E87, 0xA1E7AD8D, 0x5F03BCF4, 0x1FA4EC4E, 0xF5FC0177, 0x314BB872, 0x7667A5D8, 0xF0F5A9AF,
+0x2A0B1990, 0x03DB84DE, 0x1DFEEBB0, 0xBCADB6C3, 0xDC35061F, 0xD00EDD8A, 0x2BBEB858, 0x8B874BCC,
+0x783A6257, 0x4E8A11B6, 0x7B352A6E, 0x11F35AE6, 0x2EACE7F9, 0xF8F66C81, 0x5787E3EB, 0x16ADC665,
+0xF3B526A1, 0x09727026, 0x39B54904, 0x8ED9DC9B, 0xD1F26DFB, 0x301CF315, 0x2208DB38, 0xFD840AA6,
+0xB83217D9, 0x14B5E056, 0xD52B8CAB, 0x3963467D, 0x3903A3D1, 0xC70DFBEF, 0x63EE4D73, 0x049F5856,
+0xB587ECCA, 0xCBDC7514, 0x09EBA6FE, 0x99E92C3C, 0xF6C46FC6, 0x8223C494, 0x529860D4, 0xD819901C,
+0xDA72EC74, 0xF3DDD21C, 0x005E61BF, 0xB6AD0221, 0x16807FE1, 0x89522ED8, 0x34CB6DAE, 0x352409EB,
+0x9FC6DAA2, 0xC2C92249, 0xE71CF407, 0x9709A06F, 0xFB6292F3, 0x50C03953, 0x4868E223, 0xF1D4516E,
+0x5F0A3896, 0x2F4867DC, 0xAEDC559E, 0x5B998DFA, 0xF7F20B3D, 0xB4981616, 0xDB376598, 0xBBE08926,
+0x83CC376A, 0x65843DFC, 0x22E908C2, 0xA62C585E, 0xF99244FD, 0x33E5818F, 0xFB5616BB, 0xD04D7507,
+0x8957B509, 0x1F238068, 0x26440E99, 0x1579F43D, 0xEA286AE5, 0x6E4EE6FB, 0x2A54A910, 0xB72DE601,
+0x6EB0BCDF, 0xBE7A0139, 0x18F06F56, 0xC5B55E2D, 0x20CBF696, 0x4AB098B8, 0x92F505ED, 0x463D9BF3,
+0xDE88D91D, 0xB49C02BD, 0xB25D0407, 0xCC83501C, 0x8A1C2650, 0xCD3A2C11, 0x176C44BD, 0xB887D0F0,
+0x9F8B1A30, 0x15C4A621, 0x8268C74A, 0x3F775167, 0x6AC93C41, 0x27D90CE4, 0x83EEF789, 0x1C3BAC66,
+0x95D8CBAC, 0x27E1E5DC, 0x0548BEEC, 0x8C352BFF, 0x85FD1841, 0xCC191771, 0x827B2A76, 0xD9F62B8D,
+0x7B1EA3DC, 0x37137F8E, 0x866B23DD, 0xFA89ED34, 0xF83C7817, 0x9F2FE663, 0x08A4BE32, 0x6B0F2C13,
+0x8E7569F5, 0xE3CCF2C1, 0xE86EDE96, 0xB559B021, 0x328936ED, 0xFB848923, 0x7E96D299, 0xEAA4EA3B,
+0xB65F490E, 0x5A2ABB31, 0x448CB619, 0x3BE5E683, 0xAC8B847B, 0xFD3DCA68, 0x9E387BFD, 0x478D6298,
+0xE297272B, 0x2EAC81FE, 0x1EB2E23C, 0x8446E818, 0xD972CFFB, 0x31D15BE4, 0x7143BA38, 0x82AD309F,
+0x5C357B7B, 0xC70E79C1, 0x7ED1D83A, 0xFE7145D6, 0x7AD7F64D, 0xCCB0FCF1, 0xBEDB0A9E, 0xDC9901D6,
+0x4FDE165F, 0x6D96A22D, 0x52B3D14C, 0xF58C2DAE, 0x1369CCF0, 0x34AF7459, 0xF91163A6, 0x185AA6F3,
+0x6892E269, 0x49CEF363, 0xE9B233B1, 0x9DF6F6C7, 0x5B4ED2E7, 0xBFD99C38, 0xCCAD2DBD, 0x8F3F0A40,
+0xD80359BA, 0x9CB4AFF6, 0xDC7045CC, 0xBAC20F04, 0x3270BCDB, 0xC02F5C9A, 0x93209F9C, 0x00806AEE,
+0xCE892D58, 0x5719C6B7, 0xBFB656CF, 0x2D60DC6B, 0x7B35A8FB, 0xBE07DB57, 0x34EF0E5F, 0x23B4138E,
+0xFE132688, 0xCE994479, 0x0919396E, 0x25A4A2EA, 0x29E41BBE, 0x4D2D6F7D, 0x4BDE9773, 0x30281C3D,
+0x71616B3B, 0x1A0D6522, 0xEEF2F956, 0xC773360E, 0x0BDBB5CF, 0xE43A424D, 0x623CBD2C, 0x3A72F42D,
+0x8D4F3EF5, 0x4B829875, 0x5B2C6C03, 0x0758C1AB, 0xF76EFD8E, 0xCD36E235, 0x7C476E83, 0xDD1761E4,
+0x1D8D5B77, 0xE6F73EE4, 0x0F46D19E, 0x4C40D700, 0xBA79DCF6, 0xA4683913, 0xA408F195, 0x7C0FD977,
+0x3B3D1E9A, 0x007594AD, 0x4883042D, 0xEB5E9C42, 0xCF08D73A, 0x8D75F17F, 0x004B5F76, 0xB53E93E2,
+0x00AA862E, 0x0CF17D37, 0xB7448AEF, 0x97758E2C, 0xCF464D18, 0xB31BC188, 0x7C5DBE03, 0x60CE99E6,
+0x6A6A45E3, 0x46509CF3, 0x8779F3E6, 0x9612052F, 0x09976E47, 0x22E0D322, 0xB40560AA, 0x442C16ED,
+0x19159008, 0x82401A0C, 0x293F5381, 0xC9C704AC, 0x915D4173, 0xFCE78B7A, 0xA41BF705, 0xFFC51FE8,
+0x62379E26, 0xC9F3F2DD, 0x2F6B9410, 0xDF863CA5, 0x7BF41895, 0x549C28C5, 0x4E9C2B62, 0xD1618FAA,
+0xCC2DFB67, 0x7378D8AA, 0x8DDF5E4F, 0xED69BA5D, 0x5ED23D67, 0xFA2DA5AC, 0x4D1834CF, 0xF622934B,
+0x4B9C5540, 0xC894E710, 0x850B5A43, 0xFF8700D1, 0x3ACC3D0A, 0xB218109E, 0xDEA435C0, 0x15DE7EAB,
+0xA614D2E4, 0xB0CC1C69, 0x8B1F4023, 0x67E8C03A, 0xF247A3F9, 0x89343CF0, 0x76080F53, 0xA1D2F7A7,
+0x27EA2053, 0x64D69B4B, 0x1126AE1C, 0xEF0A4D22, 0x1304836B, 0xEA74F7F1, 0x0DA65EE1, 0x2AC6960C,
+0x33AF80B3, 0x621DEA7D, 0x5CC78B31, 0xB0BDCEED, 0xF25005A9, 0x11B081A7, 0x2AA25116, 0x212C6E06,
+0x1B1E5A74, 0x17601051, 0xFE742812, 0x3A831A14, 0x4050AC7B, 0x9B971DB9, 0x8305EC69, 0xA13D69C5,
+0x63BA4C2C, 0x268EDBDC, 0x56151C8F, 0xD73DD991, 0x94AAE4E4, 0xAC31919A, 0x30404BC2, 0x00558C64,
+0x2320492F, 0x48E4F391, 0x31811D5B, 0xBE8775FA, 0xE3C675BE, 0x9FDE1478, 0x5B3189E9, 0x53CCA5FA,
+0x7599CC60, 0x6C2A02AB, 0x5D8298ED, 0x3859C66E, 0x2201B044, 0x9AB534EA, 0xC9CA07F3, 0x6526AD6F,
+0x3A8D5C2B, 0x268CFC34, 0xD9B15D22, 0xBA5FD923, 0x315748A9, 0x61C4A7F9, 0xA3930287, 0x70D0F0A7,
+0xEECC5382, 0x76A83EF8, 0x9DF49E56, 0x783AB541, 0xC7D4DE63, 0xC7DFA87B, 0xBFE9A14E, 0x1570C526,
+0x1DFB80B0, 0x96CF6C46, 0x16CC8346, 0x7CAB2059, 0x028E56C1, 0x1C889BAF, 0x1608E0CF, 0x1256034E,
+0x31F1ECCB, 0x339D843A, 0x6CD72076, 0x968F65D9, 0x40DAEA9D, 0x33777952, 0x46098BDB, 0xD925EE65,
+0xA5C23316, 0xEC5F40BB, 0xB59E6129, 0x94ADDF1B, 0x8F148A4C, 0x9C8B3E9E, 0xE43912B8, 0x5BEFBA48,
+0x81DD2F11, 0x6A1C3ADD, 0xB20B17E5, 0xDC82D403, 0x477AF28A, 0x8B67E57B, 0xC3CE63D0, 0x6E1A9DE5,
+0x4E7FD821, 0x140BDF6B, 0x51D06A61, 0xB37F518D, 0xF3040D81, 0x59558249, 0x48DCF53D, 0xC3538DCD,
+0xFF29C2FC, 0xD0FC11BB, 0xA1832840, 0x44F18855, 0xCD216ABE, 0x88AEF298, 0x1F4D2825, 0x8A4687C2,
+0xFE971DAD, 0x76D6DA18, 0x223297BE, 0xDE8A36DD, 0x291A0003, 0x815E60EA, 0xAB351288, 0x4936E719,
+0xC3C07B51, 0x1CAB06E4, 0xC1397639, 0x737ACD8F, 0x1FED7EB8, 0x884451C1, 0xE8299E41, 0x47EA049A,
+0x5B34A359, 0x77D8BACF, 0x3C868258, 0xCB4455D1, 0x7AC6FE24, 0xE3A83445, 0x869B1308, 0xB1DEFED4,
+0x31D25C94, 0x95AF33CA, 0x55ACBE34, 0xA0ECD78C, 0x38F8662B, 0x97355174, 0xB35BADEC, 0x53CAC315,
+0x8762529C, 0xCAC8DA8C, 0x7416603F, 0x34728F93, 0xE334D7A6, 0xEA353F15, 0x6C251B46, 0x5B977C75,
+0x8B33FDEA, 0xE0F04DE9, 0x40A40BB5, 0x46130D08, 0x7199A9B0, 0x46380ED0, 0xD96E6222, 0x94BBB2C9,
+0x6A6289CA, 0x2EF18CFA, 0xF909FBB4, 0xFF8FEABA, 0xF6E857C8, 0xF44D0D59, 0xE117F723, 0x54428E74,
+0x7E4A4BC0, 0x36510D0B, 0xF8D1764B, 0xA712A292, 0xC56535F6, 0x4F7787F7, 0x9494D63C, 0x9C340655,
+0x604C6BF7, 0xB0729824, 0x1C9CFFE3, 0xB2022721, 0xB54E0464, 0x8CF4B8EB, 0xF96B5CB6, 0x44D35109,
+0x332EC8DB, 0xAAEDB768, 0x0CA5E9C1, 0x355DBC70, 0x27C1BC8C, 0x063BD3CD, 0x403CE322, 0x789C3446,
+0x03FA5FEB, 0x0C4A26E9, 0x1EF47A7A, 0x205BD3AF, 0x80A317DE, 0x76437524, 0x9EA876D0, 0x3969FA89,
+0x00FEBAF8, 0x788F2801, 0x15E70493, 0x851A3B6C, 0x97F6DC13, 0x897A0B8C, 0x5B72DF10, 0x63AC5B2E,
+0x7DA53A9B, 0xEEB98B56, 0xBDCD1D19, 0xC0136DAC, 0xB34D5996, 0x584195BD, 0x3723ED39, 0x8B320568,
+0x208287CF, 0x67121D3A, 0xDA467CF9, 0xE1743553, 0x4B096A86, 0x1153B8AC, 0xCC8F8872, 0xAE7AAC65,
+0x8C63A1F8, 0x2B9446D0, 0xB6ACFB88, 0xEBDB33C4, 0xAA8390BB, 0x8EFFD004, 0xE64AFC6C, 0x7B4EEC53,
+0x9D8ED08E, 0xBE105E67, 0x7FAD7251, 0x598C90B2, 0xEF6F25AA, 0x6C645473, 0xDE46292E, 0x0CEE99A2,
+0x27C9D105, 0xD142D6DD, 0x3EC26C47, 0x0D88F70D, 0x160D6C7D, 0x3BE24025, 0xA96737AB, 0x1059ED1D,
+0xEFCA9A71, 0x9B4070C8, 0xF0BE10AB, 0x7FEE5AA9, 0x30F46E1E, 0x32791375, 0x8FE94550, 0xD1F4F07D,
+0xCC08DF50, 0xEDF567C7, 0x41E36759, 0xA3CB8B27, 0x75DC1D8B, 0x2D38DCF8, 0xA2575AD5, 0xE3F73577,
+0x78B24EB8, 0x58887974, 0xBB2AF1FD, 0xD9045B92, 0xE864A60E, 0xC4ABF445, 0x3B23D152, 0x4F5C77BA,
+0x13BB0085, 0x631FEFEE, 0xF7996BF6, 0x985A742F, 0x6AA09972, 0xB507FF53, 0xC66F5115, 0x96DE50A7,
+0xC54CF980, 0x72C90ACD, 0x50046A38, 0xB21D0D74, 0xFC2C0CB3, 0x8332D4EF, 0x8B73A82E, 0xA3738D71,
+0x7765D30E, 0xAAD8D8DA, 0xFDB64623, 0x0CA9AB5F, 0x3DD79B8B, 0x3BD06382, 0x138F2147, 0x7C7B801F,
+0x6F210093, 0xE8018505, 0x0466ED7C, 0xD40D8EA4, 0x6D471036, 0xF9F6E347, 0xA8584BFC, 0x7E8656A5,
+0xC8C0277B, 0x6C0E2A00, 0x022F7061, 0x0DA20CA0, 0x1682732E, 0xE487BD34, 0x1D635375, 0x5295C397,
+0x23305EFC, 0x893137AB, 0x3AD90FE2, 0xB9EE87E1, 0xBEE3E6C3, 0xAF341557, 0xA223615C, 0xE1539571,
+0x03CD0771, 0xBBEAAEAC, 0x6672E661, 0xC2C05DFC, 0x72985DA2, 0x96E93A5F, 0xF16E34D0, 0x54C0E51A,
+0x2406A1B6, 0xABB738EA, 0x0DD43531, 0xA0CAC32F, 0x91B7E8C0, 0x317E45E0, 0xB5B75675, 0x866FC181,
+0x6E791CDC, 0xA0187FDF, 0xF3729CE7, 0x3C5207FA, 0xD678C5DF, 0x92AE4173, 0x972017B1, 0xC4876A82,
+0x8443BF8D, 0xFC6B9700, 0x0252980A, 0xA7CB68EE, 0x82D2A041, 0x29B10507, 0xB5D9EC8D, 0x10EE4008,
+0xE09CD7DE, 0x2D7A4B2F, 0x62B590C2, 0x4F5E073A, 0x3D3DB4FD, 0x2ACDCE82, 0x493F3F3F, 0x682FB7E0,
+0xDD6D6866, 0xB96D9DD5, 0x25E1A33B, 0x8DDE5DF9, 0xFFB8AD98, 0xAA54FC0B, 0x73144B98, 0xB481F50B,
+0xE8F3062A, 0xC553316B, 0x6D0A243A, 0x811BB096, 0x92169FC0, 0x88FE92D0, 0xE3699C1B, 0xD00683FA,
+0x2C16F9BC, 0x03A9A48D, 0x6A47302C, 0x6F64395D, 0x07B4E61C, 0x6DAB2662, 0x03D21786, 0x6BF71471,
+0x445139FF, 0x236A8F78, 0x3C01F132, 0x68C36EFA, 0xA22757AA, 0x4B111A90, 0x8522BCAF, 0x683E6961,
+0xAA174927, 0x134CF765, 0x070D53AC, 0xF4D0919A, 0xFBC69F5E, 0x62B6B9CF, 0xC3E60873, 0x3423B8DB,
+0xAD169717, 0x5D32ED70, 0x1D4CE464, 0xF851C158, 0x9C1AF11F, 0x4564D16F, 0xEF373A0D, 0x71BC27FF,
+0x992AAF1B, 0x5A08FFAC, 0x6CCD1E05, 0x1E7B2285, 0x169BB5DD, 0x13221E72, 0x17002DBA, 0x9CC1A834,
+0x2D666F82, 0x55ABD295, 0x32EBCC65, 0xEB01AC4F, 0xDEA65F03, 0x5A3F0092, 0xB65CF457, 0x2CC9FAA6,
+0x7BC5972E, 0x4C2B6CB2, 0xB5901AB9, 0x8A997821, 0x2AD54AA1, 0x5C7B22AF, 0x2C4B818C, 0x24990A53,
+0x96C0AF39, 0x635850EB, 0x68EA4B3E, 0x4C620579, 0xCCA51CCF, 0x0381080A, 0xC2737A84, 0x071FCCB7,
+0xD973CBFD, 0xA802347F, 0x8DC0EEB2, 0x99AC0060, 0x4D443DC0, 0xB786800F, 0xC3E79075, 0x07DF00D7,
+0xAB697E88, 0x1FC10E14, 0x62FAA955, 0x4ADE4D2F, 0x560A208B, 0xE56D6891, 0xE277871B, 0x67499D4F,
+0xFA595BE8, 0x239D56F9, 0x7422A7D6, 0xD7185E9B, 0xD225FF47, 0x1282966C, 0xB30E7AA4, 0xCB3B6043,
+0x975CF373, 0xB3B67523, 0xC1D23B10, 0x48B62190, 0x2E47A004, 0x5302EF3B, 0xB931D349, 0xDAAAAD00,
+0x7790CD15, 0x89D70181, 0x1196EF0A, 0x2A44C107, 0x69F38D4E, 0x2B6C56C0, 0x6152AB53, 0x418B7D96,
+0x8BA8A05A, 0xC5A34B92, 0x4A1EC1F2, 0xF8C3121B, 0x51298A4D, 0x91396C79, 0xEEE479C1, 0x6520AD2C,
+0x37ADBF8E, 0xC8FA9815, 0x8E96FB24, 0x664D1B27, 0x5CB87C44, 0x06B9D266, 0xC85303E5, 0xB5D0BB1A,
+0x13DE7B3F, 0x237DF3B2, 0x2D3B0759, 0xCCBA2655, 0xDD05304C, 0x13A39CC7, 0x3FA2F294, 0xDD17E024,
+0xA35F9017, 0x7CF8A6FC, 0x49B16B4E, 0x6F1D33D4, 0x702244C5, 0x9E6FB602, 0xC75E7CF2, 0xFE32CF11,
+0x25CAA45D, 0xBF5613B8, 0xA21BF43D, 0xD61CF1FE, 0x5A3F9177, 0x5D0F8B22, 0x4F2DECE5, 0x45DA54B0,
+0xBF888D99, 0x9CCDBB00, 0x719CF8D8, 0x12BBABAF, 0x3B01D368, 0x3823EEDD, 0x5E6C1A46, 0x9AD5D532,
+0xE023E40F, 0x4FA7062D, 0x8E01912E, 0x86B58359, 0x0F044596, 0xB546DCB4, 0xD2312A98, 0x1ACF862A,
+0x8E70D0C9, 0xBF67C350, 0x1F3FB5B1, 0x77ECB341, 0xE33E090B, 0xE6D2367A, 0xE39F9131, 0x464342A5,
+0xEB6CBE39, 0x1BFAB20F, 0xBE47DB00, 0x183D3561, 0xE2746518, 0x4799A80A, 0xBE3D9B4B, 0xD3D7C79A,
+0x2BBF3AC7, 0x3AA8E2BE, 0xA50B7341, 0x214DA9FE, 0x41D18718, 0xC9FDF107, 0x9C9036A3, 0x800754D5,
+0xD1F96572, 0x1A8DF676, 0xFD4EAE82, 0x067215DB, 0xBC076FFA, 0x70741D71, 0xC1D79E73, 0x8BFBDF67,
+0x8318DE61, 0x060F3FC3, 0x732822C4, 0xFB8E5C18, 0x4E168325, 0xCC4F39FE, 0x316E7F00, 0xF4C2D75A,
+0xDD050E79, 0x7CA0CDE1, 0x2BEB17DD, 0xD7C19929, 0x4753F9CC, 0x4B15C605, 0xAA444B3A, 0xFFC1D99D,
+0xF397269F, 0x22E127C8, 0x5F30E7B6, 0x9385DFCF, 0x0A21BBA6, 0x9868373E, 0x378BFC33, 0xA5F593D7,
+0x5ACED65A, 0xB8E30C15, 0x00E7AEFF, 0x6447395D, 0x9DEEE388, 0x9CADE217, 0x398D5B20, 0xD29A7AC6,
+0x11840E19, 0xDF101E8F, 0x13237691, 0x31C6B07A, 0x79736145, 0x723A73CE, 0xEA3B27EF, 0x851EDCA4,
+0x727E2DD6, 0x6FB2421E, 0x0FBDAAEE, 0x9E896FF4, 0xACB7C958, 0x13CD34D1, 0x0EFB8654, 0xD482A354,
+0x5C7ACEFC, 0xBE22EB5A, 0x258204F0, 0xBC7F6FB2, 0x75A2236C, 0x307E30FB, 0x62128F27, 0x095F64DA,
+0xFC229DEF, 0xF321957C, 0x15E0CB91, 0x57CC8E64, 0x718339C1, 0x9268DE1D, 0x0C3D8F9D, 0xCE8C7CE4,
+0x3F4F33FF, 0x935FCADB, 0x76744690, 0x4379041D, 0x8B71E939, 0x958F27B4, 0x581CBB77, 0x536F606D,
+0x2F0FC5B8, 0x7E91850E, 0xE6276AE9, 0x49F3CDEE, 0x8A311F45, 0xA0E99EA2, 0xC8BC9CD6, 0x2738254D,
+0xE3554C3C, 0xE4A5B93A, 0xC6601E5E, 0x53CCD088, 0xAAC99031, 0x50625D43, 0xDE173D64, 0xE4EA73CE,
+0x1C8F798D, 0xF57D4BE1, 0x64F1BB22, 0x6CEA9222, 0x160B8EC6, 0xD61A3A01, 0x3043F8A2, 0x31BB440B,
+0x49512B3A, 0x4845F2ED, 0x9AA0BF0F, 0xE8E0ACCC, 0x995F93DC, 0x01BDBB79, 0xEC4954BF, 0xCE88D05F,
+0x5E8955F1, 0x9F9F34CD, 0xC79355BB, 0xE767BEA5, 0xA80B1C57, 0x0A0C44D4, 0x59DDC68B, 0x8866EC16,
+0xBFB40EC0, 0x100A29FE, 0xF8B77EDD, 0x328DF923, 0x83963B0F, 0x8FF1F21F, 0xACD4D5F6, 0x036500E8,
+0x44358D61, 0x9B6E2CE7, 0x5FDC8FDC, 0x088B969C, 0x3B8365BB, 0x0CB79F75, 0xFF524B27, 0xD2F5A409,
+0xB1DF6BFE, 0x93B6D75A, 0x0C8CF3EE, 0xBB4937F4, 0x75BB6236, 0x16A062EE, 0x54649BA0, 0x9B03B856,
+0x8EB228FD, 0x81C402EE, 0xDBBBA239, 0x951B6DF8, 0xB22B4407, 0xF56E3934, 0x71680175, 0xA789083C,
+0x67485CDF, 0x3A5802E9, 0x166298F9, 0x529F962F, 0x1D3C2DFF, 0x80C473DC, 0xAD5F3BD0, 0x68AF9FD3,
+0xA1789C1B, 0xDA9A0D48, 0xA402526E, 0x6B05116C, 0x3F26AA13, 0x8B2E6929, 0xFABE3E01, 0x542C33BC,
+0x9C6AD1FF, 0x7550EA28, 0x6BB234D2, 0x827C2EC1, 0x369FB4FA, 0x954BE4F1, 0x1E2D67C3, 0xF58EB221,
+0x860596B9, 0x1FABEDCE, 0x607A0A94, 0xA97B5E2F, 0xF8C96674, 0x1495A1E1, 0x75A2BDE9, 0xB5FA4EB2,
+0x2EB53368, 0x0E48275F, 0x4C955964, 0x48678983, 0x00CBF7F1, 0xC25D5AA3, 0x3D2D949D, 0x8F25DFFF,
+0x77B1FE51, 0x720098F9, 0x6CE37BCC, 0xDD8203D6, 0x6621C9EB, 0xEA3B17D5, 0x9436C5A7, 0x7CFE03F6,
+0xBC6B96C9, 0xFFDF0064, 0x4D5CE5B1, 0x107D4AA1, 0x9DD58D53, 0x99D902C5, 0xD030F298, 0x20607ACE,
+0x17A24B05, 0x65BA0CE2, 0xDA0D84D0, 0x67417321, 0xDF108C38, 0x4D276534, 0x12E0A61B, 0x7AA36C63,
+0x898F0B6A, 0x9F02CEDC, 0x664A357C, 0xCF1083FB, 0x81481FBB, 0x1F88A400, 0x23A72D8A, 0xA380CF15,
+0xB42BCC21, 0x7DB4E9D6, 0xA873F34B, 0x5FB61DB4, 0xAFF2C633, 0xD6B8E9D6, 0x30E74E90, 0xB926B066,
+0x9296EDD6, 0x204D4FE4, 0x7EB2C9C7, 0x845A520C, 0x6B22B02A, 0x68E44FEE, 0x9D2AA135, 0xF9C902E3,
+0x58AB20EA, 0x359A0123, 0x436A710B, 0x1A54F77F, 0x780073EA, 0x27EEEDE4, 0xFBCBAF66, 0x96D796B5,
+0x9213DE37, 0x6605CA45, 0x4C371B3B, 0x91D79764, 0xA20DB3BD, 0x684B4DB0, 0x606DA970, 0xBDC30AA2,
+0x943852EF, 0x4A2BE7C9, 0xE42DC1A1, 0xD23ABE01, 0xEF307757, 0x54998E19, 0xFEEE0810, 0xEF01F2DD,
+0x822CB0CE, 0x55470FBC, 0x275FB17F, 0x20CBD332, 0xD330FAC5, 0x82260E78, 0x42E47683, 0x9383D845,
+0xBD35BCDD, 0xD68D98A0, 0xB9C1AB7C, 0x27E71EA9, 0xA71B031B, 0x5479D730, 0x6B866EC9, 0xB448E94C,
+0xD3035D24, 0x1C3E32DB, 0xDA79541F, 0x20ABFCCF, 0x1BAC9C9B, 0x692346BE, 0x606CD497, 0xE0F70F39,
+0x214CF3FE, 0x2556991B, 0x34C30461, 0x69F3AC47, 0x0E617B9D, 0xF30D21CF, 0x14BDC827, 0x64F63D8E,
+0xBEC3FFBC, 0x13DEA795, 0xBF745295, 0x35290F4B, 0xF535ABF3, 0x07B559A9, 0x07FA0FD7, 0x0CB177F3,
+0x1AF51C5B, 0xEE4F8748, 0x5F6B3C5D, 0x416DAAC8, 0x69EE9A0C, 0xDDF42DAF, 0x37E02084, 0x87B36BE6,
+0xCEB7AC61, 0x506B82B5, 0x4361EDD4, 0x96F980F7, 0xA2A722B7, 0x78051C59, 0x1C6DB690, 0xDCDE8DF1,
+0xCEEA2F98, 0x241A5701, 0xBA7FA3B2, 0x6FA53005, 0x04675679, 0xC4499534, 0xD533820D, 0x679E8961,
+0xE0D1029E, 0x5B599D68, 0x671A8EAE, 0x5DF39DDE, 0xEA5719D3, 0xACED82D8, 0x9149BCE4, 0x9C505A58,
+0xAEB5F0F9, 0xAA360A23, 0x5D091D88, 0xCDB3E429, 0xD551F854, 0x4CAB9BDA, 0x4F853C00, 0x1BCA7FBD,
+0x20994F30, 0xD0D65098, 0x39C6F520, 0x56EA1EA5, 0xA5F230D7, 0xBFD461B9, 0xECCFAA8D, 0xA6AFC6B0,
+0xE8085C0A, 0xC2A85D7E, 0x8D83DAB9, 0xE7FF862A, 0x3CCE194C, 0x211F0AAF, 0x320DF0ED, 0x93F868D7,
+0xF044F3AF, 0x4F558044, 0x0F03DDE4, 0x875295AC, 0x30A6D917, 0x5F032E7B, 0x1A0FA6D8, 0x2F325F7D,
+0x9CD2C706, 0xA081321B, 0xFD55C2DC, 0xC2380ADC, 0x1E81505E, 0xFE876244, 0x60B3B711, 0xAE28CD83,
+0xD81E18E1, 0x1EFF223B, 0x1BCB2E42, 0x5D383376, 0x6D873C5E, 0x0125B2FF, 0x3CA21017, 0x78909CC7,
+0x1ABA0DAD, 0xD166A3DB, 0xF20421A4, 0x3D42A75B, 0x955BAE19, 0x312D8175, 0x77535FC6, 0x58C012B5,
+0xC427761C, 0xDE0D6EA7, 0xFA57DCEF, 0x27F08509, 0xD5587685, 0xCFE7F8D9, 0x74DB29DC, 0xFF707A5C,
+0x6D2FBDBE, 0x3C10F477, 0xDE314AAE, 0x2A5DF404, 0x4A1A47DE, 0x64EB1429, 0x7D397046, 0x6FA787C7,
+0x018291CC, 0x188754D7, 0x49C797C8, 0x419F80EC, 0x507E88F2, 0x4EDE1750, 0x35A91E13, 0x8297C26B,
+0xA4A6027C, 0xA4530595, 0x8886246B, 0x427316AA, 0x67FC6702, 0x85C85747, 0xEDF19DC2, 0xFAEB8E26,
+0x754A8627, 0xA08887E2, 0xEA1E9CA1, 0x4CC863A1, 0x2ACED243, 0x53B814B0, 0x5A54A072, 0xEBE9C4A1,
+0xD593B504, 0xFD6A217E, 0x5B081FE4, 0x24122180, 0xB0290498, 0x078BE597, 0xE73160C1, 0x99741208,
+0x3EC7223B, 0xF701AD59, 0x6A3F8858, 0x6C3A0E1D, 0xD044F53B, 0x18DAB579, 0x2C7B6ABE, 0x6132A2BA,
+0x251E6070, 0x3F4163CF, 0x303226E1, 0xB2C500FD, 0x5D7456B4, 0xA0A25893, 0x09F03A81, 0x83E9E017,
+0x2E1EA8D8, 0x85227C2E, 0xDDD8060D, 0x1A2CCCF5, 0xF1DDC82C, 0x36E2A65D, 0x0C19B7D9, 0x9F52943E,
+0x5A1F8CC3, 0xEC737C32, 0xA0A0530A, 0x87D11F70, 0xD9484CBD, 0x4469012C, 0x52917A13, 0xC413DDB8,
+0xD5F7DB7D, 0x23B9544E, 0x64389DF8, 0x26E9B322, 0x4E7DF72D, 0x908C3E9C, 0x235B3087, 0xA86EFF5E,
+0x5443D79A, 0x2AD1284A, 0xAD4E4F73, 0x1FFA3965, 0x271E35D3, 0x531B34B6, 0xF46D8ECA, 0x5C12EB2E,
+0x56EBA3C0, 0xDBDC29A8, 0x6207C1D2, 0x85A24247, 0x0ED48E85, 0x0BB0D006, 0xF35D1956, 0xF64C8D93,
+0x831DBA6F, 0x0B175172, 0xB5395C4C, 0x0E77208A, 0xF0EED8BB, 0xCE8E0F15, 0xF322AB36, 0x6B142188,
+0xFE82BA80, 0xBC76704C, 0x3A9B55A5, 0xFCBB3471, 0x3C7F2C9C, 0xE018FDA8, 0x72D0D1A6, 0x40AE825E,
+0x3E68DB51, 0xDDCB8DA0, 0x6B0D9B28, 0x05DF5E52, 0x35A17D08, 0xC1AC4679, 0x3CC473F3, 0x3EF5189C,
+0x16121BC0, 0xF7D86C26, 0x466475F9, 0xF13EBD1F, 0xE721FACD, 0x10830BA9, 0x6A3E1505, 0xDF682845,
+0xA537346A, 0xA9858461, 0x24DDEC3C, 0xB75BF5EA, 0x36FCF546, 0x2E6B07BF, 0xCB4C2074, 0x480947BD,
+0xE8F6F40F, 0x00E704C5, 0x7559998F, 0x42195987, 0xA7276666, 0x958BE657, 0x0595C0A9, 0x8A64273A,
+0xAE4327BA, 0x813311EB, 0x333F2E4C, 0x981580A6, 0xC2122A7A, 0x36D723C6, 0xFB5E3E91, 0x60EA6F90,
+0xD674B458, 0xD7891CB5, 0xE25CDF71, 0x59EB56BC, 0x66934E66, 0x3EEC0250, 0x113B23B3, 0x172A9ACB,
+0x92A83BFB, 0x505B0049, 0x92A81CF6, 0x05EC2143, 0x11C6A513, 0x2EC28C46, 0x25424252, 0x3864CD44,
+0x663678E9, 0x0FAD454A, 0xDFDB35F9, 0x04B7EC34, 0x19F646E0, 0xA1BE0413, 0x5E6C63C0, 0x21557992,
+0xE989867E, 0x6FC837BA, 0xBA596F9F, 0xE13BD158, 0xFEE6DC8C, 0xC31CC35E, 0x6F47A087, 0x61E8BDAE,
+0x7D8F47E6, 0x2995F034, 0x1F4C4C1D, 0x45DC67FC, 0x476E2C61, 0x876CE42C, 0x2DD0B1B6, 0x9C8ADDB6,
+0x95C47227, 0x2960C6F5, 0xF101EDB4, 0x051F8E5F, 0x8AA909DB, 0xA30AD9E1, 0x4F09E05F, 0xA44968B1,
+0xCDCF6820, 0xCEA8B17D, 0x847BAD55, 0x6ADAFEB5, 0x5E18B04A, 0x79761FFD, 0x93DC2EB2, 0x2BA7451A,
+0xEC0DC3C5, 0xB2CE0B7F, 0x8234C08C, 0x00B48BC5, 0x084071F0, 0xAE6332B9, 0x1ADC403E, 0xC96B7F25,
+0xD26A98CC, 0x47FDAA01, 0xF4C0D545, 0xDADDE411, 0xB29D81F0, 0x3CB930BB, 0x602D5CAA, 0x1A29E39B,
+0x0E36914D, 0xAA201CFC, 0xBDD919D6, 0x3094620C, 0xEEBB9EBB, 0xE2E2DF8A, 0x414500F1, 0x287C2FC2,
+0x5C9A559E, 0xF0921F46, 0xDE880F80, 0x5DC1E061, 0x42C69A04, 0xD1D73FE6, 0x7E9C7219, 0xC413C6D6,
+0x179C0142, 0x7F1838A4, 0xA1665C37, 0x8D8B62E9, 0xE50FE67C, 0xBC0F090F, 0x904AEC7C, 0x2D777934,
+0x3910D7C7, 0xB06E0C89, 0xF417EF66, 0x7801EC2F, 0x5616E87D, 0x67C7CF3C, 0x712E07E7, 0x76F807B7,
+0xB002A2D8, 0x5BC43E05, 0x58D7E2B0, 0xBEA776AF, 0xA417311E, 0x2595E228, 0x13ED2560, 0xBDC002DE,
+0x9413606F, 0xE87EFB91, 0x1DC8EF8F, 0x6E02D68C, 0xDCB18575, 0x46BE2CBE, 0x74E545A2, 0xA14795A6,
+0xA464F25A, 0x7DA91C09, 0xDF3BD9EF, 0x4723384F, 0xCE102CCF, 0x4E96558E, 0x1AE2B115, 0x52A881AF,
+0x3E5ED6FC, 0x19DC33EC, 0xD520252B, 0x6E3E9106, 0x2E4C811C, 0xD1806A5C, 0x42F893F2, 0x3B6BD58B,
+0xC97DBA84, 0x5DF275EA, 0xA2AE97C1, 0xEC8AE632, 0xAE2AED24, 0x6627638B, 0x409A8525, 0xD6CFAAD1,
+0xFBB28F84, 0x4BA513C7, 0x1A6F6041, 0x24820FCF, 0x8191BDE4, 0x63419BEF, 0x571B6A39, 0x5D7DBEE5,
+0xF33AAD1B, 0x81B9E0C8, 0xCF61DECD, 0xAFB478AC, 0xE7CAD79D, 0x969E894B, 0xEB8DDE84, 0x1558C62E,
+0xCF2690FE, 0x1A64A897, 0xFD5C6AB4, 0x0EE4B5A5, 0xA7377F9D, 0x1835F8EF, 0x086BB7A9, 0x8B48C618,
+0x785D10C8, 0x70B32A02, 0x5CFA00B8, 0x9D00A26B, 0x95D41261, 0x382B91D9, 0x123F38F0, 0x036284B6,
+0x539130E2, 0x5275974B, 0x85D932E6, 0x65F8554E, 0x4E6DF122, 0xB3BFE89E, 0x31903EAA, 0xF7475443,
+0xE0D33611, 0x8A06C51C, 0x78663E1E, 0xFD356C35, 0xC16CF5F6, 0xEB3AB629, 0xC90D002B, 0x278793A3,
+0xD5B90E6E, 0x66281A87, 0x7F7DA095, 0x84BD0304, 0x3A47AEC0, 0xD0F1417D, 0xBF01F207, 0xFFAD4CCC,
+0x754EDB30, 0x483426F8, 0x0FB6BCE0, 0x26BBC3C9, 0x3BF10E31, 0x702F7F5E, 0x7CD28BB9, 0x6DA35DCD,
+0xB99C2B58, 0x29DE31A4, 0x597ACB5A, 0x29724DD2, 0xED88573B, 0x71A654DC, 0xEEB56734, 0x471CC595,
+0xB2494EE8, 0x9B8289F9, 0x5CBAA8A7, 0xEE89D51B, 0xEC759366, 0x6D77D6D8, 0xB793C755, 0x1993F1BF,
+0x55D295FA, 0xEDE034E4, 0xE64BE358, 0xFE384B3A, 0x12572C80, 0x078C5839, 0x975352DF, 0xAA5E1C90,
+0x6895C68B, 0x148533FE, 0x8CCDFDF4, 0xF3ABEC82, 0x98EF0249, 0xBCA61FDF, 0x7B68F439, 0x2D442637,
+0x7DD41CF7, 0x0309DC29, 0xEB33F3A6, 0x403F1DEF, 0xA03ABC56, 0xFDDE88C4, 0x27E36F29, 0xFD7B615F,
+0x23487BC2, 0x6D54DDF3, 0xDA114D83, 0xC87CCB75, 0xEF8ED28A, 0x04C1D362, 0x5B1771FC, 0x0FF68646,
+0x5F5B2AA1, 0xE8285C67, 0x07F9C945, 0x91AA0CC1, 0x0F9C2D08, 0x4F73C7A7, 0x79D213DB, 0xEB1C0944,
+0xF8FBE0A4, 0xBAAACCDE, 0x7DE71725, 0xDEA6FD92, 0xCB3763C1, 0xE2AEC2AD, 0xA529CBAA, 0x5388799F,
+0xDAD56912, 0x61FFC12A, 0x8121540F, 0xB49FBBE2, 0x42CD3F0E, 0x85915DC3, 0xA068521D, 0xF013282F,
+0xA2F5B19D, 0xF9A419B0, 0x033AB598, 0xBEBC890F, 0x12E214CC, 0xD7DF3537, 0x0738A57F, 0xC32FB7A7,
+0xC3647463, 0x6F6AF86A, 0xC8A5F5EB, 0x3F3969F3, 0x905B9350, 0x09A183DA, 0x025D1638, 0xACF4540A,
+0x9311D91E, 0xBEBAF1EF, 0x35C8AB84, 0x59A8E29A, 0xF665A0E4, 0x039DCA31, 0x6BA49520, 0x0EA5EEC2,
+0x76AB2AE5, 0x7BB101E4, 0x5B9C1385, 0xB7884E7E, 0xD0D3179C, 0x55884211, 0x325C37A6, 0x7818CBA5,
+0x2CA74EC9, 0x8CE055B4, 0x69FE6158, 0xBB11BF6E, 0x21730B47, 0x533BF028, 0x84D0A972, 0x42A0A072,
+0xF145A0ED, 0x1726AAD1, 0x9ECD4C28, 0xAFEAB898, 0xFD62ED9D, 0xD51582DF, 0x8B66D17A, 0xF4AEA174,
+0xF4817D44, 0xC2E7BFCA, 0x44365B5C, 0xB60A3D7D, 0xF8AED025, 0xF47A0FD2, 0x8F06A778, 0xBFB6DAD4,
+0x4140A0CD, 0xA15BD68C, 0x350393F2, 0xEA6E2054, 0xE7976B2C, 0xA38FBF05, 0x0B01AD32, 0xD3F3B5F0,
+0x2DFB5A26, 0xA9BEF40A, 0xE7D1CF76, 0xCFEF7434, 0x18C8098D, 0x7081AEAB, 0x16545537, 0x8520ACE4,
+0x44AB3C13, 0x648F238B, 0x9829FFB0, 0x6268D173, 0xCC90227D, 0xA7B33673, 0xED211C29, 0x726DEEB0,
+0x6D74E6A3, 0x95A56DF7, 0x08F7B2C0, 0x98B8AC3D, 0xF27AF96F, 0x7785CD71, 0x54FD7D56, 0x6A5756A1,
+0x61C2CE2D, 0xBB903A06, 0xF3C61FAC, 0x461420C8, 0x2D98696F, 0x4C27AC75, 0x717AF0FA, 0x17901721,
+0x984944AF, 0xBA9F7046, 0x0F40C43B, 0xE0F5995F, 0xA3A86486, 0x2BABA277, 0xFFC124E7, 0xD1784E16,
+0xE68D3C7F, 0xD07C4845, 0x2C40DE10, 0x11D32886, 0x739C38E5, 0xA6648302, 0x70975E9D, 0xA3915A11,
+0x03E57FA2, 0x6B802E96, 0x050A3334, 0xC84B6784, 0x19D27B06, 0x5E652D5D, 0xE1068392, 0xB683C9B0,
+0x5E0D51A4, 0x9E8ACC4B, 0xF709F5F7, 0x83E03C83, 0xFC9400DB, 0x1506AC5B, 0xF28E8819, 0x8E4A9EEC,
+0x38722E30, 0x59EC81D2, 0x29FC71A5, 0x6BD4B84A, 0x814C0E4A, 0x4122003A, 0x481AB59A, 0x6D9A0751,
+0x20816F3C, 0x0750172F, 0x6262299F, 0x0BE95420, 0x4CFC504A, 0xC0161F5D, 0xE8A50BB8, 0x8D5B0A49,
+0x3A66CAAF, 0xCF6895BF, 0x30C49A14, 0x9C971611, 0xFADAD172, 0xF4505969, 0x5D05F3E2, 0x26108954,
+0x0D38FB7A, 0x357423B6, 0xE84DA98F, 0x60F1AAAC, 0x9E95E865, 0xA343ED4C, 0x65379BAF, 0xD1A23F48,
+0xBDF5E2AD, 0x266D9A5D, 0x022F11F6, 0xBB4322EC, 0x74E1C37F, 0xE08FCB12, 0xF8631EB4, 0x083D5906,
+0x2746DF43, 0x9BF19F53, 0xA52CDACF, 0x07B1969D, 0xF5129C3E, 0x13F5A085, 0x405C60F2, 0x6F723B78,
+0x72399557, 0xCAA30994, 0x33DE86D7, 0x9C5D7EA2, 0x9E018DFF, 0x51EFA71A, 0x08B0C4EA, 0x8C9E4EC1,
+0x56720205, 0xB7F1E40B, 0x2C1ECC32, 0x8098AD3B, 0x91B4C3C4, 0x2E2458C0, 0xDFBD2826, 0xA6304817,
+0x4B6F6A86, 0xC360E071, 0xDC3B7519, 0xF8582520, 0x66AA0F38, 0x5C871BB1, 0xA98DFC94, 0x4F53E1BC,
+0x1C341F9F, 0xA7E644FD, 0x29C4FC3F, 0x993DCFA9, 0xE1E44B61, 0xFFFAA7C9, 0xE11E00DC, 0x77AF2D84,
+0xFB80DB56, 0x47555759, 0x810A4CDA, 0xAE27B49F, 0xEC29D5BA, 0xBE7ACA3A, 0xEF8DB840, 0xD5169D2F,
+0x93A45738, 0xADFA53C1, 0xDD3F789E, 0x1B867171, 0x0CBDB2CC, 0x77849E03, 0x30E59E8A, 0x73715D1F,
+0x6C260ABB, 0x8317853D, 0xE3D19B45, 0x50870B19, 0x6F22EB00, 0x4E3E5E71, 0xF2FC00A8, 0xAC2456FB,
+0x465AD3F2, 0xEAA44BE1, 0xC00E92A5, 0x45AC9B7D, 0xE2ED517B, 0xEC220119, 0xECB8C80F, 0xB9877749,
+0x6928DEE0, 0xF6E28760, 0x55921F7A, 0x014BFC5D, 0xE466C914, 0xBC8AFE44, 0x2D1FCB29, 0x847CFD9C,
+0xCC3685F9, 0x01435728, 0xC2E9ED74, 0x1CF8CB3D, 0xE496F17C, 0xFE41EF4E, 0xA16BEE88, 0x9EE51246,
+0xAE0F5A78, 0x173F91D1, 0xA2D8304E, 0xE1342DDD, 0xD50BACC3, 0xF579B35C, 0xB4D0F355, 0xE196643D,
+0xDDB877B9, 0xA2F553C3, 0x02C3937B, 0xDF798FCA, 0x1F5D2C3B, 0x1D34D242, 0x6806AAB9, 0xBF528CB3,
+0x1AF9674E, 0x7BF9CC12, 0xD4DE6627, 0x46CD7B7A, 0x73364F86, 0x34AE6780, 0xFB7ED545, 0xA507D29A,
+0x572C6570, 0xD31E9DB3, 0x79C6C3E4, 0xCD34E630, 0x51A9222B, 0x57CFC9CA, 0xEC0B61E4, 0x8EFB9990,
+0x8DE26F90, 0x92245676, 0x8BF198C2, 0x9ABE9D8D, 0x02B78E99, 0xA0AEC289, 0x95D08A2A, 0x0664E2F2,
+0x004C0E8D, 0x24EAF14B, 0xE95C14B5, 0xC097034F, 0x164E43BC, 0x00A1A94B, 0xF4232AA6, 0x94AE61E4,
+0x3CA492BF, 0x99C2F4C9, 0xE5272B6D, 0x4BE6B1C1, 0x2FEE2341, 0xE2C6AFE3, 0x61E25F26, 0x337480A0,
+0x5D5F2D48, 0x493743E8, 0xBF85F751, 0x11AB8DFA, 0x13C05A34, 0x368D253B, 0xEC6B442F, 0xF6E22236,
+0xC37E8C95, 0xC674C125, 0xF6A9B297, 0x8106BC01, 0x3CAB7979, 0x89F886DC, 0x00C182C5, 0xBBA9EA64,
+0xCD04BD37, 0x6E2114C8, 0x5D007AFE, 0x5FB4CC0E, 0xCCF24B6F, 0xD8239ED2, 0x72FBF010, 0x17B3B031,
+0xE31B75F7, 0x6E380A84, 0x43055C83, 0x0A590F8E, 0x0EE366EC, 0x88146C54, 0x1FA77EDB, 0xBD3D4957,
+0x4101E15F, 0xF99F92FD, 0x14037C22, 0x704F5282, 0x0985E9E4, 0xCCC6A6D1, 0xAC4ADC96, 0xB3483171,
+0xE5BDE69A, 0x3C1D1907, 0xFF993B9D, 0xD38C17EC, 0x58628C4C, 0xFA83A21A, 0xB8801D32, 0xBC3A5C09,
+0x98AAD1D1, 0xE566A1F3, 0x1E59AB28, 0xDE3981F4, 0x3398B506, 0x56159893, 0xA6E561E0, 0x90D49788,
+0x9CEDB148, 0x7E321E3E, 0x0DA3BB6A, 0xC9600F5A, 0x73B4C661, 0x53C2CC0B, 0x74AD4767, 0x3944D5A5,
+0xCB052163, 0xFE837AF6, 0x4F194493, 0xD1DCFE53, 0x14F720C4, 0xF72DE693, 0xD03E6F2B, 0xED7C6551,
+0xF7466755, 0xD05A0E71, 0xCB3DD973, 0xF9760DAC, 0x446314C1, 0xE72A3796, 0x0000B2B4, 0xF94BE2F7,
+0x70347C6A, 0x506961E7, 0xCE5F389D, 0x151C352D, 0x661C007F, 0x012725ED, 0xDE317A4B, 0xD6106150,
+0xD65CA167, 0x4BA2B5BA, 0x9E75E427, 0xD54BE884, 0x0F542554, 0xD900E37C, 0x56D6A797, 0xC2C960A5,
+0x307D4E76, 0xF80DD2AD, 0x84BF17A9, 0x29A9AB6E, 0xEEFC8213, 0x5507A3E8, 0xFC760155, 0xA8ED293F,
+0xBCD2A45D, 0xE9847BDA, 0x077A16E9, 0x78ECB368, 0xDC80849A, 0xB32B5C7A, 0x904AD718, 0xD48F387B,
+0x4A87C1E4, 0x64160BF5, 0x4318A1A1, 0x5D3BC0CA, 0x75CCF27E, 0xFDE74B99, 0x3D15C16A, 0x66E5924F,
+0xBAA39141, 0xB7FA3E70, 0x0F237E4C, 0x42E17CBB, 0xFC6933FF, 0x81FFD10D, 0xE5231C06, 0x5FA33043,
+0x2CB59DAC, 0x9C36D09C, 0x5F9D6867, 0x4F5F5058, 0xA9F66B7F, 0xFD1C8F83, 0x27D85962, 0x54E33D74,
+0xBD99F739, 0x24DB1C73, 0x70FB4433, 0x8982E6F6, 0x62B4541A, 0xFED573C5, 0xEE35E484, 0xAF4D475A,
+0xDB1ED407, 0xBEB7D9AE, 0x2E9C798A, 0xCD830401, 0x4879E382, 0xA87E130E, 0xAF4A0F2A, 0x9EB81D07,
+0xE9D6752C, 0x3C418B6A, 0xF2E187DC, 0xED7B8AA3, 0x35DCC657, 0x46D2621D, 0x7E698BE4, 0x31B8DC6F,
+0x56472C35, 0x73D89996, 0x0C22096F, 0x9A928513, 0x1E0F3D93, 0x4D97076C, 0x8E03FA95, 0x7BB29E4F,
+0x1361A400, 0x284E51DA, 0x06D1CF5D, 0xDCA831D0, 0xE229CE2E, 0x7D80A2FB, 0xCBB34A0C, 0xED0ADC2B,
+0x11A50774, 0x22E1BF98, 0x47092468, 0x983D2FD3, 0x4A8AFB17, 0x88E6E45B, 0xC93C86A7, 0x9D07D5E6,
+0x9D423E67, 0x339F75E1, 0x7DCD5642, 0xE157205C, 0xD22CE01A, 0xCCA9EB87, 0x3C8195F2, 0x6D1E4C32,
+0x8E9BC1DE, 0xB46F0AE3, 0xB3AC881E, 0xB040177E, 0x7841C7DE, 0x9AE2CCB4, 0x4C122735, 0x54FB154F,
+0x69DF1F69, 0x404EF749, 0xCDE542CF, 0x8976524C, 0x14CED881, 0x79E42E44, 0x33A6E992, 0xA22909CA,
+0x13D94D64, 0x5C9D5A95, 0x6169066C, 0xF199F08C, 0xC3B63BBC, 0x4A402EC1, 0x5CEB6A3B, 0x242BE48B,
+0xD1DD6EBB, 0x238C1671, 0x09744B2A, 0x1B74AF8A, 0xB46C7085, 0x1E8B3AD8, 0x05AA99A5, 0x611E69F1,
+0x6006FBB8, 0x99FEF2C7, 0x8EBDEDDC, 0x7D48E549, 0xD3A5EF0C, 0xFB212726, 0x8D1BE03C, 0xE5A36FD4,
+0xAC843BF1, 0x1A62C448, 0x5363299D, 0x7C1CCE62, 0x9CA7C418, 0x77486DE8, 0x23D98201, 0xF82FE8D2,
+0x015842D4, 0xFE86FEFE, 0x9194F5A1, 0x2EC87D13, 0x5727D96A, 0xCBC6B49C, 0x4A424786, 0xA2BCD077,
+0x86BF3261, 0x51FC91A0, 0x71A06A9B, 0x5F317082, 0x7A8E2917, 0x43B58F9B, 0x8AB73BD5, 0x6ED6EA28,
+0x3508B1E7, 0xD112964A, 0x2EBC5EDB, 0x5A12C214, 0x4F626CEA, 0xDC6E0215, 0x65C2D97F, 0x274287E6,
+0x0BEC89AD, 0x5AAF2EF3, 0xF0D431C7, 0xA78B5F4A, 0x2A0F2320, 0xCDDB7AAB, 0x03B9FCDC, 0xFE8A3683,
+0x62A3F451, 0x7A7DC508, 0x9B5928EC, 0xAD1499A3, 0x4BC9B683, 0x692EC20E, 0xADB9564A, 0x86EA14DA,
+0xFAFA7D22, 0xAE31C55B, 0xA62F17CC, 0x04AFF48F, 0x1E92A86A, 0x79EACED9, 0x805B630B, 0x4BF49DFD,
+0x6F4A7AEE, 0x9C7CA0B9, 0x2545036A, 0x89B6AF94, 0x0FF3E8AE, 0x63433303, 0xF214901F, 0x8C8BAAD0,
+0x65F85D3B, 0x59B36B36, 0x0FEAA887, 0xF649DEAC, 0xC7333026, 0x401D9AC9, 0x9A27C98F, 0x1842DDC9,
+0xEAB893F5, 0x5CB15DA2, 0x5823C2A9, 0x90484B8D, 0x49E97817, 0xE367177F, 0x91702341, 0x3EFFB945,
+0x348E635E, 0x58083E7E, 0xD15A8428, 0xDAB361D2, 0x0174E5B7, 0xCA71D69E, 0x00F5122E, 0x70D970B7,
+0x75DCD62B, 0x9D8C7796, 0x7E96229A, 0xF08BF172, 0x0C22320A, 0x20674A44, 0xF8724175, 0xA9771ACA,
+0xE240D4BA, 0x8D7F5B2A, 0x56BCE1FE, 0xF53B0DAE, 0xAC0AB511, 0xB9377C2B, 0x0F51A4C3, 0x921E2BFB,
+0xE61D3CE6, 0xCC482621, 0x13FC3172, 0x37D03F3C, 0x955C2259, 0x3509C496, 0xE895EC9E, 0x4223A76C,
+0x98DD4386, 0xEF1630A7, 0xA9D5D7DD, 0x59DCCEE4, 0x7729082B, 0x670E017D, 0xA41B9D75, 0x6FBB877F,
+0xCAA82CDC, 0x960C2843, 0x15C84B7E, 0x9111AE3E, 0x0C968C7C, 0x06F71115, 0x41E0C9D5, 0x13C597D6,
+0xED47B4AA, 0x9CC1478F, 0xE18D011C, 0x3033733C, 0xFE266947, 0x1BEC38CC, 0x742B0B45, 0xEE1D5AFD,
+0x69E936AC, 0x7AD8A0FD, 0xDC3A3175, 0xA4F71FFE, 0xD9702F04, 0xA42B3C3C, 0x4C6BECB4, 0x9743F94A,
+0x3698148D, 0xE965AB25, 0xD727AC00, 0x21B0BDE5, 0x63A26BB9, 0xAEE2BA8E, 0xAC6D12A8, 0xE189F65D,
+0x185C9CCD, 0x08091D3D, 0x6D5C97A3, 0xE8D4DF61, 0x9AABC501, 0x17BF097A, 0x64B43C56, 0xFBB525DC,
+0x91DAA05D, 0x39343139, 0xDA4218F2, 0x451CD5C5, 0xDF15798C, 0x2996B6C8, 0x1B67909B, 0xF9E2DCD8,
+0x1ECE9686, 0x7AC950B1, 0xC7F55195, 0xAA0F8B1B, 0x9863A065, 0x1450B3A1, 0xB5461EAC, 0xB59A9D93,
+0xB71FE9F9, 0xB436A914, 0x3A983DE1, 0x579933CD, 0x338BB063, 0xB1E4B764, 0x81B2A16A, 0x7FA8F3A8,
+0xCF16D71C, 0xA410479B, 0xF5F05B7F, 0xC5F34096, 0xC67A58D9, 0xF09E58BC, 0x1FE37504, 0xFD529DF3,
+0xF7E410A4, 0xF7985A49, 0x932BE662, 0x322F5520, 0x736EE2BA, 0xEDDF0E08, 0x4AFCB5EA, 0x8F0A3273,
+0x0B496D84, 0x3C198DAB, 0xE06FF6CF, 0x454A7C9F, 0xEFEF8BD0, 0xC85F2F6D, 0xAFE8AC17, 0xAA79EB3C,
+0xF49FBF20, 0x00DA3CD9, 0xAFE31603, 0x06D3585E, 0x02078006, 0xAFDE2791, 0xD0A96D13, 0xA8B73BF6,
+0x95094992, 0xC98CFDA6, 0x369DB081, 0xD961D3D6, 0x52EB0DF0, 0x8790E83D, 0x253CD917, 0x7EE2E3AA,
+0x17483DAC, 0xEC6FC539, 0xFAEB80A5, 0x0457DB34, 0xF8006FDE, 0xD55EEE86, 0x4C54743A, 0x7CB47E34,
+0x92FFA7CB, 0xEBC52972, 0x7409A7A5, 0x186B58E9, 0x28EB8922, 0x3C104FDF, 0x7E94CA0D, 0xEC5ED6D9,
+0xD6E80A89, 0xA6EE035D, 0xF4BFBD6B, 0x5B3BE436, 0x5E5B65C0, 0xB7A623A4, 0xD593B19D, 0xBCDCDE00,
+0xD808B6BA, 0x5D7885DC, 0x785FF9E0, 0x883EAAC7, 0xECF8FB1B, 0x65792D2E, 0xCF8EA18B, 0x7E43B69E,
+0x93F5A40C, 0x8A77B5F6, 0x68789A20, 0xFF5456DE, 0x86C41A3B, 0x2A9F6085, 0xA3BA1502, 0x0299FA5A,
+0xFA823A35, 0xDC9E21C6, 0x45174414, 0xFBDDEF4E, 0x65D5A42C, 0xAD9C7A40, 0xB8A9CE7C, 0x15532268,
+0x3065612E, 0xD24F06A3, 0x15D5B06A, 0xC137E461, 0x2B3EFAA3, 0x6196BA39, 0x4146E0C0, 0x3BB88789,
+0xD1AED24D, 0x54A975C5, 0xA5BC25CB, 0x5B08EE75, 0xC7FAA73D, 0xBE25EE4B, 0xCEF318B8, 0xD133652E,
+0x1A4E7125, 0xBB7C2C4E, 0x92000A29, 0x2D3EB449, 0x5DC929B1, 0xA134C0EF, 0xD7BB4A2D, 0x04697C1B,
+0xC6734E9A, 0x6F296C7F, 0x8A5558EF, 0x1FE686E4, 0x9DAB1545, 0x898612DE, 0xF0892053, 0xA8C0FA33,
+0x6A67A562, 0xBA60E1F0, 0xC03BBC1C, 0xB0EC9FF3, 0x9A101CCE, 0xF1EC26A8, 0x43E02214, 0x7CECD854,
+0x82DEE424, 0xA03E873F, 0x2F359EA1, 0xB73E1A92, 0xABF5558D, 0x9AAF0B56, 0xEFE3670C, 0x3891A4CC,
+0x2F394B5D, 0x75F3BC17, 0xA99AE38D, 0xFBB8636E, 0x508DA8A5, 0xCC4166C0, 0x50B445EF, 0x7AF6A7EB,
+0x42F782FE, 0x26902468, 0x555D046A, 0xC6908083, 0x38C87E5C, 0x3AB92D32, 0x8C4BDCF5, 0xFB918033,
+0x6FA82C9F, 0x5A105BD3, 0xADC74938, 0x5C273513, 0x62855BD9, 0xD8A06C6A, 0x41EB9D00, 0xA6D232D1,
+0xEE22EAB2, 0x2A18F99D, 0xCD9AF838, 0xA5C7BAE0, 0x84135DC8, 0xCBF938F9, 0x33F3FEEC, 0x4C656867,
+0x455EE81F, 0x8C9971C0, 0x843342B5, 0xDDD09FF2, 0x2E739D28, 0x47ABB36C, 0xF58F42EC, 0xDEE1DC1B,
+0x5FF2090D, 0x56CD5D1C, 0xADE9AE51, 0x0055E7DE, 0xCC34AA3D, 0x7166A716, 0x7B75C39A, 0x09120480,
+0xB03E0B98, 0x94AC3C31, 0x97A0A5B9, 0x95D390AA, 0x16EC2782, 0xAAB20DDF, 0x091FB0B1, 0xFDEC5B5B,
+0x5A1D272E, 0xAC7FA96C, 0xA4ED9104, 0x5C19F8EE, 0xFF5A8381, 0x0C8BFE7C, 0x25D25A73, 0x237D5FA0,
+0xEA163438, 0xF45FC0C2, 0xC6A75602, 0x9E52DF42, 0xE9B3BEB5, 0xEEB4374E, 0xD5BAB497, 0xB6B76DD8,
+0xE0A56A5A, 0x528771A0, 0x1D22EDD0, 0x29368D02, 0xD9A02AF7, 0xA3D30B39, 0xBDA0240E, 0x921B89AB,
+0x1D305A83, 0x29D018DD, 0x58CE6130, 0x25D2087E, 0x26FC9AA6, 0xE925EC69, 0x10030C79, 0x8DE3C0D9,
+0xBF773362, 0x8D4BCBA9, 0x05162685, 0x1F230B04, 0xD411853A, 0xA71493B0, 0xD3B0ECC7, 0x5969B612,
+0xC37B30A7, 0x84D8C748, 0x404A8E0A, 0x97EF7119, 0x20B37878, 0x54883AC2, 0x5109206E, 0x187BF16E,
+0x206F7485, 0x070B881A, 0x05FEF40F, 0xE1141F8C, 0xBAA7F8CC, 0xF6FCD35D, 0x464AAACA, 0xAD976225,
+0x4D4622A3, 0xA3C893A4, 0xDFF54078, 0x149BB42F, 0x7798A930, 0x7BE656A3, 0xD330E2B3, 0x6E1A50B9,
+0xA5B2846A, 0x95886E8D, 0xE5D1B4F7, 0x7F6A1474, 0xE6387134, 0x189FD426, 0x509C1E4C, 0x7BA81922,
+0x0F2ED951, 0x2E0D8099, 0x50CCE70C, 0xFD5DB755, 0xE56DFB20, 0x040FAE52, 0x7E0A19B3, 0x164F421B,
+0xCD69A564, 0x6B75FA64, 0x31DBB5F5, 0xCB40D3A0, 0xE5D166D6, 0xE6F93E91, 0x76CD18F0, 0xECB677C6,
+0x5930E97D, 0x37628C50, 0x17786C23, 0x54293507, 0x4C24B482, 0xDCD91A57, 0xB1D69D8F, 0x270D4AE3,
+0x74D35CC0, 0xF3ED156D, 0x1BE0A2C1, 0x9FBA2BA0, 0xBC1CC63D, 0xF3BA1A2D, 0x801CBE15, 0xFF125BA5,
+0x0BBE368A, 0xF1C6E506, 0xB022625C, 0x43501859, 0xE32389BA, 0xA7ED7E26, 0x7B38D2FF, 0x88C3F720,
+0x3D964F5C, 0x23BD3401, 0x782FE0C1, 0xEECE3E09, 0x3E45285B, 0x291A0422, 0x0DBE044F, 0x7B984864,
+0xEF84597A, 0x3EA2BD71, 0xEE6CB813, 0x57B94CF2, 0xEE672F50, 0x92E708D7, 0xDEA4C9C7, 0x67CC293F,
+0x89A0B4C5, 0xDFC89897, 0xC96A56F7, 0x8E0A890E, 0x34B1F541, 0x894F33A5, 0xBD77766B, 0x8EF5B1C4,
+0xDF947C3A, 0x080B00F4, 0x61EAC370, 0x54FC5499, 0x13E53AB6, 0x5BE04D67, 0xC7928018, 0x9E299BD5,
+0x48F0BF3C, 0xB70DA964, 0xAD214B20, 0x72446252, 0x62FE374C, 0x30F66091, 0x9074D065, 0x92EC1A6D,
+0xE269113F, 0x337CFB91, 0x807C311A, 0x1F954770, 0x645DA357, 0xFFB5F958, 0x140C5902, 0x302D0106,
+0x32ABA5A6, 0xEFC9DE7B, 0x34CEB585, 0xAAD6F7B6, 0xF05935D0, 0x4E8B2150, 0x86C4F9AE, 0x1F8942BC,
+0x5AD41C95, 0x74B2E4B0, 0x8CD5CC77, 0x1AAEE03B, 0x47D8AD11, 0x5708EEEE, 0xE209F1FB, 0xF5DD8A20,
+0x43428520, 0xD6E90637, 0x991C403A, 0xD857013F, 0x8BA2C153, 0x091AAD88, 0x7EE86E86, 0x3B6285C4,
+0x37BB42BA, 0x8BDEA364, 0xE40222B3, 0x49209852, 0xD54401B6, 0x62E69E92, 0xCC1F3C24, 0x0ECE62A0,
+0x87C8BA68, 0x475D4A0B, 0xB35291D2, 0xDEEF9878, 0xF1E679F0, 0xB78FCBA9, 0xE5C8F34D, 0x7F36D8DC,
+0x6E251689, 0xAF73BD36, 0x60CD4B35, 0x1E2D59B6, 0x1E79B6BE, 0xF4311D1A, 0x4D98BFA7, 0x6BBB8AE9,
+0x91EF299C, 0x0CCE1B73, 0x8E9498C3, 0xE6664CE6, 0xE37FD7BF, 0x4457B8F7, 0x0175DEF8, 0x60181CC8,
+0x80BE734B, 0xF735B7FA, 0xE17DE0FD, 0x3BE1929D, 0x219BBDE3, 0xBD628AD6, 0x52F67583, 0x47C9B49D,
+0x3DEA1263, 0xA4C8ECB2, 0x679094E0, 0x3B8D3017, 0xBF3A4273, 0xC174147B, 0xB97D234B, 0x7B308D5D,
+0x5C2D0A75, 0x313DD242, 0x4B2F8E40, 0x9A1E72B0, 0x5A6A9F9C, 0x118E4783, 0x4F634B7B, 0xF67CE658,
+0x724D9B4F, 0x585B8DFC, 0x3952B354, 0x88F0D221, 0x56409B43, 0x217FC007, 0x68C802D4, 0xF992D344,
+0xD6B84CC4, 0x01AE40B5, 0xBC44B846, 0x13FF979B, 0xAB32BC53, 0x56DA3273, 0x63C3EA59, 0xCFAB2A0A,
+0x5646A0ED, 0xA0F5D40B, 0xCAC8BDE1, 0xB1E7E7B8, 0x37BE73A8, 0x78337642, 0xCCA94122, 0xEA2E71F0,
+0x70991120, 0x07826E48, 0x0F006636, 0x003F4251, 0xD791CB7E, 0xE0B7F153, 0x6F7CB578, 0xC5038511,
+0x3F624AD8, 0xA6DC31B4, 0x14DE18A5, 0xC51A787B, 0xD032621B, 0x93A9CEAC, 0x7BE2C356, 0xD9F72666,
+0x651DDFA7, 0x39B23759, 0x143225D2, 0xC3E72137, 0x002BEAAF, 0x53EDAC77, 0x7DA50087, 0x83EE6071,
+0x9BA587A5, 0x595E0327, 0x45B9AB0D, 0x7A5CD430, 0x6D6676D3, 0x44D0FABD, 0x49C56D3A, 0x9FEB95A6,
+0x7A969452, 0x8F9125A6, 0xCDF5E61D, 0xBF44F1B8, 0xCA1CA5F0, 0x7871C194, 0x41AE508E, 0xA2724EB3,
+0x9A7733A0, 0x84517BA6, 0xE280FB33, 0x5AAE1B9C, 0x24D4F785, 0x68BAD34F, 0xA4924AB4, 0xFA70B6EB,
+0xF1BCEFF6, 0x07C5FF8C, 0xC438F7EB, 0x53247F36, 0xB25AEF0C, 0x6C711E72, 0x9AA40FEB, 0x2726B59E,
+0xED1F10B7, 0xFBAB73F4, 0x9A97E62B, 0x7F667BC7, 0xBE8566DC, 0xF1D18977, 0x94CB5935, 0xC24F08B9,
+0xAC728BD0, 0xB64BD18D, 0x4734EDDE, 0x9792FEC5, 0x23E045AF, 0x969AD868, 0x33F4C596, 0xAB88A8FE,
+0xCA7A6E05, 0x98CBA8A7, 0x8D8938EF, 0x38D72BB4, 0xB2461100, 0xD2F450B0, 0x24794E97, 0x81DF3D28,
+0xA48086A1, 0xF39CAD9D, 0x95CCAE0C, 0x4B8351AA, 0xEC3A0FCB, 0x7AE9CD6A, 0x857BEF9C, 0xFB66DC94,
+0xDD88277B, 0x496D7FC1, 0xD6C5CF94, 0xFB2528D9, 0x8CB61569, 0xD6E16BEB, 0xAF83031E, 0xF1311491,
+0x1EB1D239, 0xA0422461, 0x1F261C47, 0xF7665222, 0x3BDA713E, 0xAC073AD8, 0x43F8B63B, 0xF2BC1CB0,
+0x8B2DB78A, 0x698E6028, 0x1D4B21C1, 0xD6FE613F, 0xB3143DB5, 0x96505BC3, 0x9B7A7253, 0x0C8BD7A4,
+0xF6A00D79, 0x65060EDA, 0x6E01A463, 0x35B7DE6F, 0xC9BF8D34, 0x70B0D03E, 0xA74EFB1A, 0xF74F1283,
+0x04E3353F, 0xEB110549, 0xDF75AB2C, 0x468D1554, 0x9250AE9E, 0x58239CAE, 0x07C0B82F, 0x9B0D49BE,
+0x70FF4030, 0xE4E50A07, 0x576EBCC0, 0x163C18AC, 0x1ABD5F94, 0x4B41132B, 0x21897AA1, 0x7FD67D71,
+0x4756F5F0, 0x250005FF, 0x831EFFDC, 0x85A5E1A4, 0xF5975300, 0x318E41DF, 0xA1B16259, 0x9E4FD971,
+0x45F3C4A6, 0x76EA7B53, 0x68A3C022, 0x153431DE, 0x23188922, 0x745D76DF, 0x5C22F78C, 0x95FCDF5A,
+0x0925EFA4, 0xF634D7E7, 0x7A50278D, 0xDC77C185, 0x03AF0721, 0xD04BFC5F, 0x577826FC, 0xC6766086,
+0xBBC4861E, 0x66764AF0, 0x8B0FC48C, 0xB1D655BB, 0x9661D54E, 0x8C88C620, 0x78BBF3C9, 0x7166D8E7,
+0xB15D8A44, 0x701A731A, 0xDF2F4D0C, 0xD9B403DF, 0x1B94A956, 0xD2648FB0, 0x23069836, 0xF1E8AE8E,
+0x92403D3F, 0xE0F8B1DC, 0xB1A20C55, 0xF834C7E9, 0x9C0765FC, 0xE2D15FFE, 0x57954574, 0xBB6AF014,
+0x846C4D93, 0x6369162F, 0xFB584A70, 0x39D8466E, 0xF85B74B5, 0x4A418FD2, 0x9122C306, 0xF0062C54,
+0x357F19D2, 0xD4A3FE63, 0x79A037B6, 0x72F1AAD6, 0xB3C6B481, 0xEEDE7991, 0x86709B70, 0x18CA85BE,
+0xBCA4FF58, 0xBC91ED10, 0xD74A3828, 0xDD9D1402, 0xE47460B8, 0xEBFA6AD6, 0xEBECDA9A, 0xEB2F6608,
+0x6E8F670D, 0xE1C60BB5, 0x6A53BEDE, 0xC1ACDA91, 0x431D3DE7, 0xADE4BDDA, 0xCF231ECA, 0xD6DAC838,
+0x25BB6EB5, 0x39A3C965, 0x0162EEC5, 0x2B5D407A, 0x28C34763, 0x9C96743B, 0x7C6DA2D9, 0xF07941B6,
+0x36CC0B49, 0x4588D69D, 0x8E1EEEEF, 0x7AFA866D, 0xA06EDBEE, 0xF4BEC4A8, 0xC9C90024, 0xA9FA6CFB,
+0xF98974B6, 0xEBA5FA02, 0xF0AE4159, 0x3619BC7A, 0xC891842C, 0x2B813990, 0x895C9B91, 0xECFEAA84,
+0x85DC16C0, 0x2CC06D50, 0xA0B6626A, 0x29843942, 0x1A807BF5, 0x103E4F8E, 0x46E4C23D, 0x96D812A3,
+0x4061F596, 0x67F22F2F, 0x479E40BD, 0x6AB38541, 0xE1D99954, 0xE5ED5047, 0x29B2D5A9, 0x94B9F3A2,
+0x3C0C4835, 0xE6297402, 0xD1584B4A, 0xD71DA42C, 0x0DF5F0A6, 0x3E983F29, 0x74B01AA6, 0x7396188B,
+0x3AA87A64, 0xF2A3C81A, 0xC655DBF3, 0x73A382F3, 0xDA35525E, 0x2AEED9DC, 0x60A7A141, 0xACAD8C6A,
+0x2CD2F131, 0x977B32F2, 0x93685172, 0xAE3E4FD7, 0xA01BD508, 0x9E8F3EFA, 0x8131EDC5, 0x04EEBF0F,
+0xC35139DA, 0xDFC49695, 0x3E22BA73, 0xEABE05B2, 0xB2A1FC3B, 0x402FF7E9, 0x77A875E9, 0xA42DDC9E,
+0xD6F9417C, 0xB8BDF0F8, 0xEC39DBAE, 0x0E8E48A8, 0xFAF001A1, 0x02A1A5BC, 0xB9563D5E, 0x53FAAB67,
+0xD82B9442, 0x03FECAE0, 0x37B24D3D, 0x30714951, 0x1B5BBC59, 0x1A1E4895, 0xF260A35F, 0xFEF79104,
+0xA861B2EF, 0x6F6D5894, 0x3661AE78, 0xA18435A7, 0x4548B90A, 0x93EBFF46, 0x301BD8C2, 0x602A473E,
+0x7ABE048B, 0xE7EECE50, 0x39DDA3E6, 0xEB41C393, 0xFC677C56, 0x1FB0FC6D, 0x728C4A72, 0x9A6A48B6,
+0xA3B919F1, 0x46DB8DA4, 0x3BDC2536, 0xF2F265A3, 0x729132DE, 0xA51F9798, 0xDB7E92E7, 0x8C7EF38D,
+0xE0800B7D, 0x09A5BBE5, 0x316E1A4A, 0x45B2CFCC, 0x72633691, 0x96BA9F1B, 0x78F6AE54, 0x0CBE23E5,
+0x2490099C, 0x9A740C1D, 0x46B362E6, 0xE294F178, 0xC985B4ED, 0x2F231298, 0x2EFCB9BF, 0x4275724C,
+0xFC968D0B, 0xC72DF562, 0xE7510E15, 0x7ED7CA2C, 0xFF691B97, 0xB8CFCD45, 0xBE89291F, 0x5E1353A7,
+0xE9491E66, 0xFA65ECC5, 0xB18D8D99, 0x04C5B3DE, 0x73243C4C, 0x875D70FF, 0x99B97B7C, 0xCAD139B5,
+0xEC7B50CC, 0x60E2C878, 0x7C3CE949, 0x978D336F, 0xB173FDF4, 0x1F001910, 0xFF96FD8A, 0xA9CB4BC7,
+0x7211CAB8, 0x964312D1, 0xB5671C4B, 0x837E1F01, 0xEDFB7494, 0xDE2B10EC, 0x35554BE9, 0xF732A5C0,
+0xDF281043, 0x23D4C840, 0x16BC6C50, 0x8DE4F0BE, 0xF34CA4BB, 0xA383B585, 0xD2A36EE6, 0xF2925A59,
+0x874F828F, 0xFDB488F7, 0xAFD605A6, 0x458200EF, 0xC12045F3, 0x7C879678, 0xD847BF47, 0x3EA3F52E,
+0xFB00B7DA, 0x2F834A45, 0xAE6DC06D, 0x9462331E, 0x1EE00B1B, 0xD5175286, 0x3211327E, 0x5B062697,
+0xCA9D8807, 0xB38CEA75, 0xD079ABAC, 0x84616BDF, 0x78A8572B, 0xF125C336, 0x67C1D503, 0x0E9C7B3F,
+0xC521A1B9, 0x0767D737, 0x83429A83, 0xB48FB57F, 0x622B229A, 0xF0D699DD, 0x039239EB, 0xA28DADF4,
+0x3ABE6F34, 0x7EB5C118, 0x95B36624, 0x2E0CEA2C, 0xE83C77D9, 0x3E44C197, 0x576C6AB4, 0x14D6107A,
+0x5BC1A3E4, 0xBC0FE20F, 0x3EBE2CF7, 0x8B813F5D, 0x1BB34D6E, 0x56C9C81A, 0xF315F8E9, 0x09B26E8D,
+0x86C04DA9, 0x268DF668, 0xE2FE932A, 0xF98FC8F8, 0x24781367, 0x748DAD24, 0x643773CE, 0xB6F9DD9A,
+0x7BAA5CBC, 0xC3A222CF, 0x017E936E, 0x76AF597B, 0x3961FC57, 0xB718DA2D, 0x5F11BDE0, 0x4558FC29,
+0xD4C3B2A6, 0xD2B12C8F, 0x98D6A1DA, 0x900EFD1F, 0x19B2F2D8, 0xBC67A5AB, 0x011FF5F6, 0xACDC8120,
+0x72C42843, 0x367A6A56, 0xF5387C32, 0x6B81B755, 0x9E76D8BC, 0x3D4CB295, 0xA9CA744E, 0x7483E189,
+0xA45A0481, 0xD2DE59FC, 0x6AEBD019, 0x9245E994, 0x79B743DF, 0x235680B3, 0xBF40BF13, 0x3D544FC2,
+0x218886E4, 0x9180577F, 0x8F417A88, 0xADAA59B0, 0x0FFB051E, 0xF6983350, 0xB07FEC5F, 0x01345F6E,
+0x7832077D, 0x79E2F385, 0xB1765D5F, 0xA3E40861, 0x7F1712A9, 0xBE30800D, 0x9D58F845, 0xF503A7E5,
+0x00980BA3, 0x5F7EE4FD, 0x1BB4287A, 0xB3D928FA, 0x11A1F8D4, 0xB8515A18, 0x5AF247BF, 0x6B7C7649,
+0xA3DEE7D7, 0x906705D3, 0x7902607C, 0x2B7B46E7, 0x30DE6D50, 0xEE5414FF, 0xDAA48C6D, 0x1E045500,
+0x399EA8BC, 0x3EDDAE24, 0x226F06B7, 0x861B6311, 0x65404FCD, 0x056C064F, 0xC5E0C2B5, 0xFB189A68,
+0x67BE20F7, 0x63ADB024, 0xA2B22029, 0xB51DFA40, 0xDF04430F, 0x656FF9E0, 0x34B2CCFE, 0x5512D7A0,
+0x948DF1B6, 0x57E9C225, 0xF1D2F2D0, 0x0F422AFE, 0x5919C950, 0x75534C81, 0xCAA075A4, 0x9B21ED02,
+0xD82BCCA8, 0xF77A1FE2, 0xA1144C73, 0x3858F0C4, 0x6FC171F1, 0x4A72772A, 0xDF830321, 0x980ACDC6,
+0xBDA08F6F, 0xB41DC4B4, 0x7B337992, 0xEA806B42, 0x851D5CC2, 0x25013B53, 0x1F076E2A, 0x16EDF7D0,
+0x54227CAA, 0x5EAD7F19, 0x66474A7E, 0xCF20C573, 0x10A2C643, 0x4D81A3E1, 0x365EE9BD, 0x94019490,
+0x76DC1272, 0xD90F7A1E, 0x5B030F7D, 0x65C1884A, 0x981E6D34, 0x0AAB123A, 0x9093EAD6, 0xE01FD5C5,
+0x13C036CB, 0xB56D131E, 0xCD7EB760, 0x26B9D31F, 0x3F7B8A16, 0xA6820083, 0x54779B7C, 0xDABF7BED,
+0x77A3A225, 0x462917C4, 0x26AC14A6, 0xB98566A0, 0xFA2C3BA2, 0xD2F66487, 0x81954D35, 0x28ACC90E,
+0xE8A1A4CE, 0x8CECCFC7, 0x3F93C66C, 0xDC8C19B5, 0x5A5CFB13, 0xB232CEF9, 0x0F9706A7, 0x8695489D,
+0xCED5CA7C, 0x7EBE0B4D, 0x9C9F01A7, 0x2349C93C, 0xEA970CFE, 0x1834FCBF, 0x329BD296, 0xE9D86ACB,
+0x0539DFBC, 0x590A8A6D, 0x910DB214, 0x3CF7A1F8, 0xD797909F, 0xD2C73A02, 0x09091A61, 0x6D624D39,
+0x6DD350AE, 0x0173C85C, 0x20D0C88A, 0x66E11C4B, 0x79F50569, 0x86F290EA, 0xE7F12105, 0x741A43E5,
+0x5FBCC5B7, 0x769EDBE3, 0x71B76CF9, 0x21C7B1C3, 0x92A3A6CF, 0xE6447D65, 0x9DBA2A0C, 0xCF6A8F85,
+0x7A129931, 0x0DA01433, 0xC8D78A25, 0xEDDB2359, 0xCB1F0A85, 0x17FDDC6C, 0x6F75259E, 0x02DC0F46,
+0x47EEB2D2, 0x43FE1300, 0xD01D2A51, 0xD8D192AA, 0x5322AB94, 0xCBABA9E3, 0x6FE589C3, 0x021E00C6,
+0x0C990E84, 0x84B9467A, 0xF547C795, 0x53DB69B7, 0x7114932D, 0xADB602E2, 0xDD276EE6, 0x219F3A9E,
+0x8169FDAA, 0x7C2610D2, 0xEE246EE6, 0x947F58D6, 0x356D7599, 0x9ADD19C8, 0xF2957DC4, 0xE5E8EE08,
+0x902A55C0, 0x01A085E0, 0x676B5FA6, 0xB55F64CD, 0xF3D3F4E2, 0x656367D5, 0xA15BBC35, 0x6A71D392,
+0x867B9544, 0x0696A017, 0xE00FB571, 0x73F9761E, 0xB4C619A3, 0x0A4D46F2, 0x8DE431E7, 0x3F088FDC,
+0x538BC11F, 0x99A0F2F7, 0x4DE9865B, 0x22DB034D, 0xEC39BE0A, 0x9ADCCEA3, 0x3648F21C, 0x1C8A764B,
+0x8112E52F, 0x04C531FC, 0xAF494DE4, 0x35FAEBCC, 0x9F5C9DC6, 0x00A79A18, 0xF5FDDDDE, 0x4A95072D,
+0x7BEB6A7D, 0x477E1D48, 0xE3873265, 0xA7BD7725, 0xCC862870, 0x4FBA6CA1, 0xEF34BB74, 0x9C2A7A82,
+0x4B150632, 0x98179DFA, 0xF7DC5847, 0x0EAE3E77, 0x098B8997, 0x4531935C, 0x6025E91A, 0xDB351C9F,
+0xD1DE58C4, 0x116A0201, 0xB7D8D223, 0x554BEDC1, 0x95F36C8C, 0x4F7A9988, 0x4D2751FA, 0x28BDFCED,
+0xFD976424, 0xE1981D17, 0x59AFDF95, 0xC1882C92, 0x1E7FEC84, 0x47833DF5, 0xB938E01D, 0x441E7941,
+0x0411AB40, 0x510B5314, 0xD4D158D3, 0x96483DDD, 0x37C31DAE, 0x0B5000E9, 0xF5CB9285, 0xAF55425F,
+0xF4CCE229, 0x3468BE2B, 0xE342EB63, 0xEADEFA13, 0x9F84C33B, 0x681094CC, 0xADB9E79C, 0x0A1E551E,
+0x78E4BF87, 0x97700EFB, 0xD3A0ABE4, 0x1DC82E4B, 0x4B883081, 0x30765A53, 0x37D5BBF6, 0x70805702,
+0x51AC7B06, 0x35914588, 0xD08DCAEB, 0x5F3DD3A8, 0xBD2C4C92, 0x5A9FEC05, 0xE88EBB29, 0xDE80F4D7,
+0x0FA306F8, 0xC82D038C, 0x7958928D, 0x9063ADEA, 0xA494BD1E, 0xECD827C8, 0x075D61A2, 0x803A28C1,
+0xB9121ADE, 0xC22359D1, 0xED48DFE8, 0x40FBF66B, 0xA4A7014D, 0x91A66A49, 0x67EA3369, 0x971832BB,
+0x5423ABE5, 0x7A472180, 0xD10F2012, 0xED34E54B, 0xE5C73FE5, 0xED905CA8, 0x204116C1, 0x7AB31471,
+0xBD1613A3, 0x6A00DA93, 0x68A93BE1, 0x5F975C1B, 0x0256D1F2, 0x23420D5B, 0xF70F0D96, 0x318CD204,
+0xF55C6948, 0xD80230C7, 0x9100B009, 0x6D369DD3, 0x357F5032, 0xA2A25B6A, 0xEF0F0508, 0x44A7B2EB,
+0x2BCCD40E, 0x63CE59FE, 0xA476AADF, 0x45FD9632, 0xD3B58AD9, 0x5B4B655F, 0x95E31860, 0x5C9DF13B,
+0xB0AE74C7, 0x9D88A28A, 0xFB896737, 0x69159116, 0xCE07748F, 0x54524198, 0x199261B8, 0x247CAFB6,
+0x877B0884, 0xE93289CA, 0xB1F38990, 0xA25DFA97, 0x9DB517FF, 0x0857A690, 0x73C8E31C, 0x7C3B85A2,
+0x27EE6835, 0xED6495ED, 0xA42ED7B7, 0xCBCD7116, 0xCAAF1906, 0x932E50BC, 0x79A8E9B9, 0x45D3AA3D,
+0xD07BD4C9, 0x7C3B5B49, 0xFFCC2F06, 0xB6827243, 0x2BE3ADF2, 0x9DC3EE58, 0x318B151F, 0xE58D25EE,
+0x37157D27, 0xFE4280B2, 0xD6E87466, 0xBDC4F51E, 0xA8812EDC, 0xE74E5F37, 0x6203871B, 0x071BA122,
+0x4E77DDAE, 0x9301BA12, 0x56DED160, 0x360E3818, 0x9AF35646, 0x94490ED8, 0xF2D24ADD, 0x41F37E5A,
+0xEDCF2EFB, 0x057E545A, 0xFECFDE99, 0xBD578CCC, 0x18EA30A7, 0x7BAC43B5, 0x17E80452, 0x69C474A8,
+0xE6540427, 0x5B5C9FF0, 0x35328774, 0x7366AF28, 0xBB8C0F3E, 0xD92BA7A1, 0x26AEA3C4, 0xCF51E1AC,
+0xDCCF3954, 0x99009C05, 0x069CD64D, 0xFE9F500F, 0xAEC206A0, 0x3C56B71A, 0x02A0641B, 0xE29D502B,
+0x7C38EF89, 0x3BE50FDD, 0x1A2A324B, 0x150291FB, 0x04C2FE69, 0x515E476F, 0xDFA1E7B6, 0xA1072D74,
+0xAFA675D3, 0x7C26F916, 0x893481F1, 0xE8FA0813, 0x8134718C, 0x242FA8D5, 0x1643302F, 0xE81F2EC3,
+0xC92D0957, 0xB858993E, 0xF77CABA1, 0x1D9A1DB9, 0xCAD46D42, 0x18CE19D4, 0x634FA389, 0xA43B9CBE,
+0x20DE4480, 0x55A39DD0, 0x5CEDC741, 0x5FFDD0C4, 0x350CCEC8, 0x9E141623, 0x4901CD70, 0x3E292D27,
+0x2464C893, 0xD360D775, 0x467118A2, 0xDEF39D86, 0x120902B2, 0xCAA77C20, 0x1D98088B, 0x3A7C87C2,
+0xAEF6BD29, 0x0FE15817, 0xE397BC4D, 0x1DB763FC, 0x39B16CD1, 0xF6C2C9A8, 0x4A413089, 0xC2874FE4,
+0x5BDFA26C, 0x129B5591, 0xE4E1A4FB, 0xBCD711A4, 0x2329B9C0, 0xFAB2FFE9, 0x20A02A4A, 0xEA87F403,
+0xDE705D13, 0x9DFA9157, 0x2649272E, 0xC077AC17, 0x0AD7E558, 0xCFA8C7D2, 0x9388873C, 0xE438D102,
+0xE1A4086C, 0x74A2279E, 0x8FE2C658, 0x159BEB3F, 0x254CEEEA, 0xB6FAB7C7, 0x4FD53E61, 0x09C08851,
+0x4FCBB600, 0x72DC2984, 0x14C74CE3, 0xDF386575, 0xF82BF4D3, 0xAF64B941, 0xC0251CFA, 0xCB41F682,
+0xEED5D1C9, 0x37C3FA86, 0xBABF4B87, 0x869115DD, 0x0ECE0135, 0xF878D4CB, 0xE8D0023B, 0x2C552517,
+0xC8E149E3, 0x6F5D4C71, 0x04CED975, 0x90CBDBB1, 0x57EA700A, 0x05D4998A, 0xEB2ECA34, 0x93AFCCFC,
+0x77084284, 0x1FC57967, 0xA10F9DBF, 0x2433D510, 0x6FB76C30, 0xD3629282, 0xFFAC50D9, 0x89DA39AB,
+0x62C656A9, 0x63E39275, 0x35FCE861, 0x5CF95D14, 0xDE038C11, 0x671B6BDF, 0xEE73C242, 0x1A26B8BC,
+0xC1FE28CA, 0x4AEAA4AE, 0xA712E96A, 0x3D471E9C, 0xC40319E5, 0x854A00B8, 0xF3CEF377, 0xB56E9F9E,
+0xD6DEB35E, 0x0D412D6F, 0x6400E5DE, 0x59CD896E, 0x1FCA7CE6, 0xBFCF188C, 0xD8944C11, 0x56068B04,
+0xEF870729, 0x8E167366, 0x9A37EE1B, 0xBA0BEA5E, 0x0B719926, 0x4B2B8626, 0x39561BB8, 0x834C9D8E,
+0x3261C5FE, 0x9C16769D, 0x2BDC177E, 0x39326FB1, 0x1E0D3C71, 0x16C5B0C6, 0x9CB0382C, 0xC7D5E4C7,
+0xB6568367, 0xEB7F5D96, 0x02E34C12, 0xAC7C098C, 0x1A045DC5, 0x01E6BC7A, 0xCC0EE037, 0x5023BD94,
+0x6E68096D, 0xB528E8DB, 0x7784DD42, 0xC4821F08, 0x30A7DF9C, 0xFD3423FE, 0xBF818A40, 0xB2C5EEF6,
+0x04276C36, 0x2C6FBA76, 0x16889D0D, 0xC68B1634, 0x5F0EEEA6, 0xA9F404BF, 0xC4FBDDFB, 0x174BCC8F,
+0xE682830C, 0xECFA7BD4, 0x4A33036F, 0xC8185266, 0x24A0A65D, 0xB5DC6C95, 0x90E0A64B, 0xFCE6C803,
+0x59F83E9A, 0x0F92920F, 0xACBFFF67, 0xE4DD5422, 0xC9FC83F7, 0x943EDB91, 0x55D98CC2, 0x08FE53FB,
+0xE874A7B7, 0xD931A678, 0x8E0D8211, 0x58D1EB6D, 0x95137AE8, 0x3DA089E0, 0xB372B296, 0xBC038928,
+0x7DF311DE, 0x87039AC7, 0xC4382844, 0x2AD1BEF7, 0x095C7BF2, 0xD574EA13, 0x6CDDFCD5, 0xC536497C,
+0xB6B1E4A0, 0x86FA58AA, 0x9B8968D1, 0x5CA2951C, 0x62BB4687, 0xE315A790, 0x9DBFFC80, 0x9D2A27DC,
+0x383AB58E, 0xCDCA5239, 0x9F751CCD, 0xB431D245, 0x78193D4B, 0x529007F8, 0x053A4CAE, 0x839CF780,
+0x5908DCCD, 0xBD3AC416, 0xBD944897, 0x64EA6087, 0x3D8FAE2D, 0xABA7A3BF, 0xC48498E2, 0xB7840E78,
+0xB88BA567, 0xA725A1EA, 0x1F92E45F, 0xA12ACFFF, 0x9A72BD49, 0x69FB5A58, 0x47B6E106, 0x209A8B95,
+0x59212820, 0xDB8DAD92, 0xEB35120C, 0xD5C30B08, 0x8C4F3BDA, 0xE0B0F728, 0x89C5DCA0, 0x4337190B,
+0xC14162A9, 0x1BECF081, 0x1208E6E9, 0x4E6E652E, 0xABCE5C55, 0x71C19224, 0x0ED9A55C, 0x18932AD9,
+0x55A76F66, 0x24955703, 0xEAC8FE05, 0xCBFD55C9, 0x1578A37C, 0xFE69EC97, 0xBF74093F, 0x79249938,
+0x9D260825, 0xDC0AC626, 0xBBFD52F2, 0xC56C01AC, 0x4A9F4905, 0xDCA3DA4A, 0x95A5929B, 0xD5C5E9F5,
+0x7693A344, 0x92B13BAE, 0x1F162EA9, 0x450BE49A, 0x3D9DE395, 0x61281176, 0xF283E90F, 0x41E00B26,
+0x3BB0B6E9, 0x2A557680, 0xB4802472, 0x0D035E5C, 0x3402C710, 0xA194EADE, 0x366F2F4F, 0x3F315047,
+0x2F1D60E2, 0x54EB5F6F, 0x3DC8D3DA, 0xBBA2A833, 0xCA001152, 0x6F921EB7, 0x8C749DF0, 0x5228EDB0,
+0xC8C1359E, 0xC52734F9, 0xFD592C8C, 0xC387B179, 0x599F382C, 0xD5879EB2, 0x86AAC672, 0xE3D981CB,
+0x7412D9CF, 0x97D4109A, 0x589FB013, 0xB77617E7, 0xD264F153, 0xAAFF4305, 0x4593EA6E, 0xD9DCDEFF,
+0xEADC6CF0, 0xA1F0656A, 0xE47EDDA9, 0x641610CF, 0x6FEF783F, 0x7761EA0F, 0x2D088D81, 0x644ED3EF,
+0xAE31E714, 0xBC302217, 0xF1EFB551, 0xCA38A106, 0x7E53FBF9, 0xC26BEA3F, 0x7FA88305, 0x80C2EBE7,
+0x9D6F8C74, 0x08BEBBB5, 0x99639642, 0xBA09F88C, 0xC234D5D8, 0x291D2AA6, 0x157B79CB, 0x5C92D213,
+0xA8B348FD, 0x1E692B63, 0xF56ED26D, 0x5C73D3D1, 0x505AFD51, 0xC78066AE, 0xA726E055, 0x39AD667A,
+0x0927277D, 0xC9DE5265, 0x87450193, 0x72A287A6, 0x7860E56A, 0xD606B6C6, 0x988CE833, 0x01A7186F,
+0x024F409F, 0x504ED198, 0xE49EFAFD, 0x277BE1CF, 0x478CC47F, 0x52D099E0, 0xB40063AF, 0xED9956BF,
+0xF5B53703, 0x27F51159, 0x6FFC1768, 0x6F11C091, 0x8295AD7B, 0x24599241, 0xA0F8B369, 0x78A37755,
+0x0D160ED1, 0xFB585424, 0x2F7A608F, 0x2F91ED14, 0xB7793F25, 0x0770E62C, 0x449745BB, 0xD5E1EC8A,
+0x66C85E82, 0xE3A0B2BD, 0x154FEFB1, 0x7A8932C5, 0xD61ADB4B, 0xC05CF606, 0x9A688028, 0xD4389C52,
+0xF6E406BB, 0x8079829D, 0x5C5C40D8, 0xD55AD302, 0xCA4FD749, 0x5C22A99C, 0x5438DD4B, 0xEF58EEB3,
+0x3D8D6223, 0x6AC843E7, 0x0022DA58, 0x775FA992, 0xCF53204B, 0x4932E98B, 0x6546758A, 0xE113EC15,
+0x8000C771, 0x45419FE2, 0x32869CD1, 0xD8F7D04C, 0x279FF60B, 0x4AB071E9, 0x653F2011, 0x186F831D,
+0xE01A5E84, 0xAC36654F, 0xC9D16FE2, 0x1C981090, 0xF556374D, 0x8FBF81F3, 0x67B5CB6E, 0x931936A4,
+0x394591B6, 0x8830C7EF, 0x70EAE90E, 0x500619B7, 0x6EC896ED, 0x211A901E, 0x7B38A3B1, 0x6A80BFF0,
+0xA03F29D2, 0xDB536651, 0x5E771C6F, 0x9B04A2F4, 0xEA7B2B92, 0xE214CA33, 0xED30B55C, 0x245330E7,
+0xA86A5904, 0x704ADC24, 0xE20915C6, 0x14BB7C11, 0x52F9A956, 0xFB413EB2, 0x9401604A, 0xD01258F1,
+0xC5D979F2, 0xB04FD4CA, 0xFE74543D, 0x7116EA3E, 0x1AF69EC6, 0xE058A30C, 0x08511F31, 0x75511C3E,
+0xCFAA0E5F, 0x6EBCBDF3, 0xFD736F78, 0x5F082E44, 0x3811E77F, 0x8AA09260, 0x699B7214, 0x7A4EA846,
+0x1F89ADBE, 0xD8F5601B, 0x1850122F, 0x4CB76FE0, 0xD4EBF135, 0x9DA22818, 0x645BC605, 0x27B6BF83,
+0x2A9E4A8B, 0x608B776C, 0x3704E2C6, 0x97D83D29, 0x7AEB64E5, 0xECFD393F, 0x2CD7E6C2, 0xE5D47C5D,
+0x3C3A9850, 0x1A85507E, 0xF3D4D9BA, 0xCEF531E6, 0xB862D55F, 0xF22C5389, 0x7E30BFF3, 0x784373C7,
+0x7FF64DEC, 0x7AC488B5, 0x1BD246DD, 0x23772AC1, 0x749BEAB4, 0xE1A47D09, 0xFEA52591, 0x275CAECE,
+0x5B5DB369, 0xFD4A2EF6, 0x7CF2C39B, 0xD9092571, 0xBA8B7688, 0x452CC86D, 0xF6B285A9, 0x7AA53117,
+0x39924A80, 0xC38604EE, 0xE7125A79, 0xC8746352, 0xF8E4E8E8, 0x3A8E9EDF, 0x4779718C, 0x506CED30,
+0xE0B601D8, 0x77B4D2D5, 0xC4C1916E, 0x51075B2E, 0x1888817E, 0x974215D2, 0x3A06EA0C, 0x83546541,
+0xB1FCABE9, 0x25838968, 0x035F695E, 0x1F08119D, 0x30748D7D, 0xD9BAD65F, 0x612BF197, 0x21D1BA68,
+0xB61CFEDC, 0x0A291523, 0x086BB010, 0x18C0608E, 0x0DAF335B, 0xC78DD10E, 0x9F7CFD74, 0xB7AA73CE,
+0x30E0244D, 0x7FBF264B, 0x7E8D6859, 0x19E3E7C9, 0x8E15FDE1, 0x9B1D0F2D, 0xA062D6C7, 0x12B42EE3,
+0xDA012D5F, 0x39FB0A53, 0x5254F2CD, 0xD32B34F7, 0xACE1F0B2, 0xA07AF3A6, 0xEB8BE744, 0x41FAC203,
+0x03BB6FBC, 0xDABFC655, 0x0E33478C, 0x7941BB71, 0x01C8D2FC, 0x9C4D7904, 0x7D112992, 0xEA85C6FF,
+0xC159F365, 0xE9D277FB, 0x0B82F340, 0xBC0637E0, 0x898685B9, 0xC59536D1, 0x4CB7FEB4, 0x69386DD9,
+0xC66F14F2, 0x7B1C24CE, 0x330C9DAE, 0xD9A896C2, 0xB2CDEBE3, 0x5977E66E, 0x1F15812F, 0x3B41F6E7,
+0x7EB4B8D9, 0x414DCB67, 0x7B89397C, 0xD16F6E37, 0x8CC2203E, 0x6BB36E9C, 0x6600237D, 0x5B959C59,
+0xF10784F9, 0x01FDEBFB, 0xBEC0A605, 0x0F5843E9, 0x544A68F9, 0xA33049B2, 0x533D882F, 0x15BF900F,
+0x7FECBFD0, 0xC7B3BB8D, 0x6CEA0AD6, 0xE39D6ACF, 0x3651FF35, 0x89499432, 0x9C8224F8, 0xAD0E2ADD,
+0xE707C677, 0x97DDB08F, 0x9DED883E, 0x62A6D361, 0xB7923DCD, 0x1466A2E4, 0x49973BF1, 0xB1B0A27E,
+0xFBB17C05, 0x5008AAF7, 0x3E45C097, 0xCE9E7279, 0xF9DA5595, 0x6D1A104F, 0xA2C5F90C, 0x994E7871,
+0x56B8F407, 0xD5180183, 0x1CB750B1, 0x39F1B624, 0x79714EF7, 0xCC8A709F, 0x97EE957E, 0x1C5FE066,
+0x8FFB2BC2, 0xDB007283, 0x356142B0, 0x1D9C61FA, 0x6D76649A, 0x3C5BCC51, 0x8C4C9E92, 0x7B1D82AF,
+0xB147A39C, 0x5E5DE1D7, 0x2815387D, 0xE4BEE662, 0xB655E9A2, 0x9B574B72, 0x009295D1, 0x2BB99765,
+0x055989D4, 0xEBDC5771, 0x48C66BD7, 0x10B439E4, 0x177C1B85, 0x718848B2, 0xE4529727, 0x06A50EF0,
+0xC51E537F, 0xBC156ED7, 0x2DD651DB, 0x13B832F5, 0xBFBA538D, 0x0CC27D7F, 0xFA75B2FE, 0x70FC24C3,
+0x442B2CBE, 0x9ED06C3B, 0xE5BB9460, 0xB8A2202D, 0xAD35E3BB, 0x438F6790, 0x34FC1D44, 0x2061B61E,
+0x3CD7DFD7, 0x78D8ABCC, 0x9425C8F4, 0x88BBADE2, 0x317AE6B1, 0xDE50ECED, 0x1E48B0EB, 0x3691A063,
+0xECFE332D, 0x757F8062, 0x84E1D350, 0x093A74E0, 0xF7C239C2, 0x143BBC32, 0x02ED2103, 0x0E126ED1,
+0x75106B73, 0x0FA77AC2, 0x49266A8C, 0xC820FA19, 0x68AFFD03, 0xFCF6F50B, 0xF0C4B744, 0x1E6699C2,
+0x2711B68D, 0xA7D639E9, 0x0575A9F5, 0x4BFC81C8, 0xBCF83A29, 0xD925A097, 0x9CC2A55D, 0xBD9D8524,
+0x61DE6381, 0x3608F64E, 0x1F06D9F4, 0x7DDFFBCD, 0xEC14C368, 0x29D234C7, 0x7F3B8249, 0x43D9F4F5,
+0x14E98937, 0x60591D19, 0x38B31A20, 0x525E17A7, 0xE17C5675, 0x11FA7A70, 0x57F0AC67, 0xCCF09083,
+0x529CF561, 0x197577E4, 0x25389E51, 0xBC0D9414, 0x379EB2D5, 0xE615C6D3, 0x8A054BFA, 0x4182CD34,
+0x88747B34, 0x89D7FBD7, 0xB31765DD, 0xD24070BA, 0xC9EB7763, 0x512F986F, 0xEB571358, 0x6563D714,
+0x982C9B85, 0xB086641C, 0x586E393E, 0x742F61CA, 0x739E460F, 0xE7536053, 0x132E27AB, 0x82A7D8EA,
+0x8E4A7461, 0x2C2733BE, 0xC6F0E77A, 0x13FDC73F, 0x4BE87A60, 0x4A4300BD, 0x7446F0F0, 0x8D19828E,
+0xB45F83BA, 0xE1C33B78, 0x155F0857, 0xF2564226, 0xD5A05571, 0xF14988FB, 0x2B9519C9, 0x377FBA45,
+0x327B0FA1, 0x76FCB5DB, 0x53C9E5A5, 0xFFFE9A14, 0xD25F3199, 0x7C58D5A1, 0xC95AEEB4, 0x8A1EADB7,
+0x520CAC48, 0x7D4BE8EA, 0xAE3ACE6C, 0x68656BCD, 0x991E65BF, 0xE87B73CA, 0x838B1CC7, 0x6C5EBB6F,
+0xBF4C8B87, 0x350792E5, 0x23681DC8, 0x8B569636, 0xCB94EF60, 0x6A5280A2, 0x77BDD542, 0xC21ED6BF,
+0x7D06385F, 0xA36023BC, 0xBF1F15A3, 0xD4176DE6, 0x5455DB3D, 0x0591F880, 0x82C0DD2F, 0x7BC2F38E,
+0x6682A316, 0x7C248BAE, 0x4473C41E, 0x29F827AD, 0x4523FA52, 0x37CBF7D0, 0x70AC941C, 0x6474585A,
+0x972610D0, 0x880E577B, 0xEA54F527, 0x7087937E, 0x36FAA442, 0xBBB15D01, 0x48DA0BB5, 0x7A6029BA,
+0x26784126, 0x56576752, 0xCB1924C0, 0x2A1EBEEF, 0xDFCFC37E, 0xC286A3A2, 0x61655778, 0x85215DCE,
+0xE5804FD4, 0xB50C5AAF, 0xE5F96262, 0xDAB9F09F, 0x39496207, 0x736A244A, 0xC266263B, 0xF7744AD2,
+0x42A1ABC6, 0x225E5395, 0xD699FE9F, 0x10E9B94D, 0x865136A5, 0x713C069B, 0xC32A23C0, 0xC44749BD,
+0xA1BEE6AC, 0xBA03B218, 0x41EAE4B6, 0xBA17F326, 0x2F4FD67A, 0xAA3B0EF0, 0x482FA385, 0xB440BC4C,
+0xE485D1A0, 0x8D964A7E, 0x8F3885C3, 0x2E7C1B52, 0xAB3F5AE0, 0xBE340DCF, 0x6CA0BDD9, 0x2C66F84A,
+0xABA08781, 0x980861E2, 0xBF31F38E, 0x44EF56B5, 0x81B1EF31, 0xE8E85DEF, 0x40E23CFF, 0x7F75B367,
+0xAB209A7C, 0xF083261D, 0x2BDAF232, 0x936BC388, 0x1D250A21, 0x333747C9, 0xCFC4649A, 0x32DBA589,
+0x365794B8, 0x4BB7C59A, 0xE704896F, 0xB12D4617, 0xFE328507, 0x006B3EF3, 0x5EA8FF4A, 0x5DD6416D,
+0xD66F141C, 0x378A63B8, 0x954D1506, 0x2C013B8A, 0x15FD071B, 0x132673A3, 0x3294ACA3, 0x01F99C0F,
+0x5F6466FB, 0xCC4F21FE, 0x6622E21B, 0x77D65E11, 0x9EC5F076, 0xA8467085, 0x2D36C6C3, 0x45DFB3D1,
+0xFE54309E, 0xE868213C, 0x18623C9F, 0x3AEECC5B, 0xDC0F8357, 0xEBE25028, 0xE79FFCE6, 0x0C0B340C,
+0x7DAFC172, 0x5631F277, 0xFD4BC45D, 0xCDABD041, 0xA76006A1, 0xE819A7A5, 0xC1CC7F60, 0x5B11D97B,
+0x33F14879, 0x5EF865AB, 0x6832DA4C, 0x59669182, 0x0A4880C7, 0xB1E284BE, 0x94BECD76, 0x23029A41,
+0x3055350D, 0x6098C6BF, 0x16FA767C, 0xF42E3138, 0x37C8E86F, 0x5B19F4DA, 0x8EBA1CDA, 0x405B3C2A,
+0xF5A2BC53, 0x2EEB828D, 0xD4516D11, 0x895128AE, 0x5ECC5820, 0xC6555F6D, 0x723EDD41, 0x0248964A,
+0x8C1E400E, 0x40D58801, 0x7C4C5032, 0x0185B914, 0x1749A2D4, 0x1863CB59, 0x3BD8B3A7, 0xCB652FFF,
+0x8007D0DF, 0xEEB071D2, 0x96709E3E, 0x0569B347, 0xFC075D68, 0x315C49DE, 0x5E7CB840, 0x89AD6E26,
+0x6E0F1673, 0x9FEB5FB3, 0x2BB2C580, 0x343A96E6, 0x5455215A, 0x87CF9A3D, 0x5A280AA0, 0x7A4B1F15,
+0x30A24FE1, 0xA5BB6C9E, 0x22CA30CD, 0x0CA2DFB0, 0x76EEDD18, 0xDC39AE95, 0x8EEE054E, 0x63D260EB,
+0xD1F4B120, 0x6292759E, 0xC83890F7, 0x67E049FA, 0xB1F1D7E9, 0xA7089344, 0x4B7576E1, 0x97380852,
+0xAA3CE9C9, 0x17032BF7, 0x0F5D9EB5, 0x23D4849A, 0xDD75A301, 0xF56D9AEA, 0xCE1112AB, 0x07DFA7BF,
+0x67323E79, 0x5FF86A76, 0xF397A7F5, 0x76CA5292, 0xC180C651, 0x9670E055, 0x274070D4, 0x70C5F8F8,
+0xCA797166, 0xD38D7045, 0x376E811C, 0x809FE520, 0xE881E120, 0x092ACB47, 0xFDB35BAA, 0x77264775,
+0x64FF2B32, 0x189CAE97, 0x787AFDC3, 0x46FD1C37, 0xB4C4310E, 0xA3EB1820, 0x41ACF220, 0xF36050B1,
+0x0A5439B5, 0x6A20BA82, 0xEABA5976, 0x8481B6C4, 0x668BC753, 0x200582E4, 0x721D5871, 0xAB324482,
+0xC23F881A, 0x354299EA, 0xBE7FA458, 0x7DF43717, 0x9DAA974C, 0xF70683EB, 0x0B8E3FF1, 0x8C284F54,
+0xE9089DB4, 0x9CF6C7B1, 0x5269B948, 0x54CFFB35, 0xABB10EEF, 0x85134D91, 0xF422D276, 0x5132042B,
+0x2E5B7D71, 0xB24B14D2, 0x1AA06663, 0x527B3D48, 0x1EF7DF4B, 0x384813B4, 0xFBF9A3E7, 0x69B4CE17,
+0xB19B28BA, 0xE262E224, 0x5FF34CC0, 0x8CB78E01, 0xA7F603E9, 0x5768F5A5, 0x2AD9F10F, 0xB8640A15,
+0xDB296291, 0x5896FDB2, 0x0EFB8EF8, 0x2A6D62E6, 0xAE0C4BAA, 0x5CF51625, 0xC0FDF124, 0xF9AB6EDC,
+0x705EE3AA, 0x6E54AE77, 0x9DE38697, 0x8F930A1D, 0xB84F2DA4, 0xA93E9D28, 0x7670D11E, 0x6048467F,
+0x0B750843, 0xDF8760BC, 0xEC56C7D0, 0x07A8CDE1, 0x97868A98, 0x13932935, 0x4491B4C8, 0x69B4CFBE,
+0xE4F55974, 0xE481EBE2, 0xE716CC0A, 0x299AA690, 0xDEBCDCEB, 0x4F5E0CC7, 0xBD70B424, 0xE0AB3A44,
+0xA1F59B2B, 0xF11D3773, 0x6CA5372F, 0x62C5A462, 0x6D2DBE31, 0x3E81C5E8, 0xBAA0C2C8, 0x39209FAA,
+0xF15CD2C7, 0x18AA17AA, 0xC2E6BDD1, 0xE197E8D1, 0x8454A3D9, 0x8B1EBE69, 0x634D0399, 0xAE369B42,
+0xB44CDE50, 0x33E568C4, 0x2069C41D, 0x5711C6BB, 0xCA5944D0, 0x05D69D4A, 0x283B2F9A, 0x336A9B3E,
+0x341F1546, 0x3399A3D2, 0xD919F065, 0x0A298ACF, 0x31FC4258, 0xCCCE0B92, 0xE2BBCB28, 0x46382F08,
+0xF67A58FF, 0xA34174B5, 0xBE040E2C, 0xC2100CEF, 0xFC22CCCD, 0x3D5A4493, 0xFA697226, 0x436E0F54,
+0x83073BF3, 0x9ADD6FA0, 0x8D9A404E, 0x9D70E20D, 0xF38A70AF, 0x71AF4AE5, 0x858171CD, 0x9A4F83E0,
+0x59FCA9EF, 0x1CB5922D, 0xD0994DA1, 0x1C358B7B, 0xF4FD889F, 0x9B35ADC6, 0xA64C70BC, 0xAA171C90,
+0xAE616539, 0xB921D6A6, 0x011D3CCC, 0x7E6E0210, 0x2B709893, 0xDF4DD962, 0x239FEBAB, 0xA2D92D40,
+0x3A5C0EC8, 0xFBA8E686, 0xD5797BFA, 0x8C7B2D4D, 0xA3803D7A, 0xB406425B, 0x2396A08F, 0xA32331B7,
+0xABECEF9F, 0x9417EDAA, 0x9666B941, 0xBDE015C6, 0x650CF48C, 0xAEEE762D, 0x912CD4F6, 0x1BDD124A,
+0xC1FC66A9, 0xC75D3252, 0xCC0A057A, 0x1A55615C, 0x7DAB171D, 0xDB006062, 0x9E31F0EE, 0xB921709F,
+0x2FF5DDED, 0xF862968A, 0xBFAEBC14, 0x3A61592D, 0x606EDC18, 0x6AE42FD2, 0xE6E77358, 0x4B26B38A,
+0x048671DB, 0x1E543FF1, 0x3FEA5543, 0x0F961994, 0x51B6E0B0, 0x07E7259E, 0x023FB0B1, 0xB62208FB,
+0x907AD481, 0x0F0CFFF6, 0x0AD29D95, 0x9C4FCA3A, 0x7B513676, 0x1230D9E3, 0xD9449F24, 0x873104AD,
+0x1CA81527, 0xB63D8664, 0xD107CE86, 0x5D7C62A4, 0x36A12643, 0x5B220904, 0xE9E52889, 0x7B001E0A,
+0xDD0655CD, 0x963A4DE4, 0x32422EF6, 0x8F992F73, 0x707355CF, 0x4E1E5534, 0x9947DBD0, 0x8BB4922F,
+0x9AF089E1, 0xF9E04F6C, 0x198FC95A, 0x52FEF43F, 0xC39FBD5D, 0x14F66146, 0x28C71124, 0x81B7102F,
+0x8D2CED90, 0xDE8E785F, 0xEFB058FE, 0x351846C8, 0x8864A96F, 0x7FF723DB, 0xE0D8A8B7, 0x83A778DB,
+0x049308B9, 0x580D14DB, 0x30F64561, 0x6B15ACA8, 0xE08BCCCD, 0xFB3C9CCC, 0xE694AA1F, 0x12FC95CA,
+0x96BF0C05, 0xEBD85A9F, 0xED7022A7, 0xF383BBEC, 0xBE4AA92F, 0x0DDDFF15, 0x678B6CFC, 0x005B277F,
+0x65F174C3, 0x386B7BCA, 0x9B1D7E49, 0xBC361D3B, 0x63B3C900, 0xDF240A1B, 0xF58BA075, 0x8CA7A3AE,
+0x2FB54D64, 0xB8A768C1, 0x2B353760, 0xDEC084C7, 0xCDB598D5, 0x11C41187, 0xFD337132, 0xFBA86E7E,
+0xE12BA114, 0x1768ED30, 0x00767A59, 0x6D67835F, 0x8D426620, 0x5712012C, 0xC9F6CD3B, 0x8AB5562A,
+0x1515B836, 0x56F77FCD, 0xE5C77633, 0xB2EBE9F0, 0x18AF2F87, 0xBD763BEA, 0xA6775011, 0xA2A1AD08,
+0x284B90E7, 0xCE02EF4E, 0x401924D9, 0x49E93331, 0xED0383F5, 0xDFA16EA9, 0xC0740FED, 0xE0DADF70,
+0x24A6E7BB, 0x1FBF1D13, 0x0E1C5EC0, 0xBC7977B2, 0x9CCB8668, 0x5C294636, 0x25346CCA, 0xE289B473,
+0x2097803E, 0x427B0108, 0xAD04E755, 0x3116EC88, 0x56E0BD31, 0xCF290A5C, 0x80459080, 0x8FDA2652,
+0x04150CC6, 0x0414E94B, 0x74326504, 0xA1FEB743, 0x6D56F757, 0xBECD19F1, 0xAFDF1CB0, 0x09224880,
+0x11E81C18, 0xFE7EDC51, 0x94683332, 0x20725BEB, 0x488985C7, 0xB35775E3, 0x259A1461, 0x502D2330,
+0x3B7FAFBC, 0x1D06A0EA, 0x90BE168A, 0xF291CD80, 0x202A757D, 0xC8E99304, 0x4063BCE0, 0x38BA1350,
+0x561FF03A, 0x3EDC16F3, 0xE964FEF4, 0xFCCB0375, 0xAF4881D3, 0x89B69E36, 0xADABD4E0, 0x6BEA10D0,
+0x283CD36E, 0xBC49F369, 0x0AACC4AF, 0x88742EFD, 0xB33F0D30, 0x25DAC9EA, 0xDEB5A1C1, 0xF52B4ECC,
+0x07A5611F, 0xD1C67642, 0x16016CE0, 0x5FBD482C, 0x7D2DA07C, 0x388CCA20, 0x8341AABA, 0x049460F0,
+0x7DCF3796, 0x90D279DC, 0x889E6B9A, 0x35C49310, 0xB6D7A571, 0x2E0F4EEF, 0xD8ADC2CD, 0xA2B73838,
+0x3580FECE, 0xB5E6E170, 0xDBCC8906, 0xEBD05627, 0x29508E35, 0x1222D201, 0xD124C4C6, 0xA2E9AE21,
+0x0AE4B46E, 0x47A5DE21, 0x7AB361AC, 0x9A6BEDC0, 0x414A06F7, 0xB894718A, 0x620ECE68, 0xB510424E,
+0x59871BEF, 0x6D3B12C3, 0x7FBA323B, 0xC1A46C92, 0x31D28033, 0x55B99E9F, 0xE90C865E, 0x82FD8995,
+0x01A483B0, 0x767B199D, 0xC90D274F, 0xEBCCFEAB, 0x12C4332E, 0x636444C7, 0xBCD0AF83, 0xB2AF0696,
+0x328C04B0, 0x47AF4DB4, 0x3DCD6D1F, 0x6135F182, 0x4D3402FF, 0x1568D6D7, 0x62D4CEE4, 0xCA86C3CB,
+0x1F79E13C, 0x703C17C1, 0xB2F97D94, 0x6A2F258B, 0xDC0148EC, 0xB7AC3B56, 0x76047235, 0xA9925E7B,
+0xFDA12171, 0x91CBC95E, 0xB6C3D2B0, 0xF0D0C5F2, 0xB4886B9C, 0xDE0B5FC6, 0x2F4AB282, 0x3CD53A2C,
+0x73A0B634, 0x49A4FECD, 0xF257E092, 0xA1E9C616, 0xCB16A766, 0xF12DA780, 0xE1EC8710, 0x5D405B58,
+0x6F5D0788, 0x00730043, 0x17BF7ECD, 0x6AA567A8, 0x5030EC91, 0xB7CEF68A, 0xA2552CE2, 0x844B800C,
+0xD698C59A, 0x370C8907, 0xFA609154, 0xD6098497, 0x258C3A6D, 0xAC93339E, 0x6852CABF, 0x66E4F8AF,
+0xE285391C, 0x7A082264, 0xA0CF9073, 0x3DBD6A64, 0xBEAC937D, 0x7EC81E88, 0xA83841D3, 0x45798D9E,
+0x4E6F8636, 0xF7B2A35C, 0x437A0F60, 0x3FF3A825, 0xE97AFF50, 0xD05492B7, 0xF42905C5, 0x5C073352,
+0xEE51BD3F, 0x17541768, 0x429C27D8, 0xDB8BA3F3, 0xE2B87C94, 0x649D5E1A, 0xBFA58985, 0xF0EF3FE4,
+0xDACD9A40, 0xFD2ECB83, 0x1D56C200, 0x429FC3F2, 0x1440CB1D, 0x68989F61, 0x7C9FD283, 0x835F9926,
+0x55ED4845, 0x10C38A0E, 0x3EAB8F19, 0xE0CB1B51, 0xF5487F07, 0x8BABC3D5, 0xF4C7866C, 0xE022DA4A,
+0xED4D8DF4, 0x846FE20D, 0x3AC655B8, 0xF7827295, 0xDE143874, 0xF95A25D6, 0x0E54D953, 0x47B6E5E7,
+0x18A87794, 0x85857938, 0xD19A6BA0, 0x877806CE, 0x728ABAFB, 0xC6E6C86C, 0xBE64DD3D, 0x789DAE73,
+0xA92B3890, 0x1C0EA204, 0x4694EEB3, 0x56AAC524, 0xF4B57BDB, 0xB0F1ADCB, 0xD7239969, 0x68B90153,
+0xCA6350F8, 0x627C7D3E, 0xB68475BF, 0xC9546816, 0x079E3C89, 0x52C4308E, 0x6F3A3026, 0x2DC5C96F,
+0xB546FC88, 0xEA050968, 0xC236C116, 0x04D5D92F, 0xF68DCF30, 0xDFF65687, 0x844C5FE5, 0x6B9BD773,
+0xE7C993D7, 0xB528C945, 0xCC6840C0, 0x48F26620, 0x3BBCA213, 0x2792991D, 0x156C6BC4, 0xCB55441E,
+0xC9B16D29, 0x6E2A4EE1, 0xDE3ADD53, 0xFC3CF22E, 0xC4A83413, 0x114914E5, 0x04855DB0, 0x3664C86F,
+0xB3905AC8, 0xC47EEA65, 0xEDED377D, 0xCA6F5B56, 0x3F6AC498, 0xEF35A058, 0xF9E261AD, 0x55549419,
+0xA9811E81, 0x04B20543, 0x0DE05047, 0x9C176319, 0xAC98DAC4, 0x8E371B9B, 0x43FF0EE4, 0x64F241C4,
+0x7B47E0A0, 0x1788DB9B, 0xD76C3F94, 0x0E0EE070, 0x2E834DC7, 0xC8B058A0, 0x5232E828, 0x91B2E182,
+0xC2A867E2, 0x3A40DDCD, 0xF164CD46, 0x9C135EEC, 0x36DB715A, 0x31D3A1AE, 0x1BCC3C55, 0xA99F42AD,
+0xD771D8D4, 0x41922F14, 0x5F09DB82, 0x94A8987B, 0xCFB5D871, 0xE6E9BE2C, 0xE2C8C2C0, 0xAEC5ACB4,
+0xD1691B3E, 0xB1C5E59B, 0xF9BC8CEA, 0xFBE6ED91, 0xD35BFF1A, 0xC92A872B, 0x16855AF1, 0xD4FCCB63,
+0x835C5DEE, 0x61C134D8, 0x29DB70FD, 0x6A775D9F, 0x8610923B, 0xAD2BC954, 0xD0722999, 0xC71B3FED,
+0x5CDBF809, 0x3353C20C, 0x7DF183AC, 0x6FE96F3D, 0xA4A78545, 0x502C0B3E, 0x966DCB8F, 0xCD592443,
+0x004311D7, 0xBC6BB6B3, 0x2B75A38D, 0x6F87D7BD, 0x8B6FDF40, 0xE72187F4, 0x8D79E15A, 0x282DA323,
+0x7EA5A042, 0xD4932F58, 0xF34C940E, 0x615AD27E, 0x8D040BA5, 0x9086FE2B, 0x9899F4DF, 0x530941CA,
+0xB0CDAAD9, 0x1A15836A, 0x960CB6EF, 0x3F32E2E0, 0x22757CEB, 0x4A144E99, 0xF1D0ACA5, 0x38424906,
+0xD551FAAF, 0x3FF0E9F0, 0x93649306, 0x4DBBCD15, 0x745D711E, 0xAEF443A9, 0x0C8D601D, 0xAAA3439D,
+0x985493D6, 0xCDA789CE, 0x5E5EA38C, 0xA8D127C0, 0x33C75E39, 0x7BC76BF6, 0x310C272A, 0x9D955546,
+0xCE0EF6F3, 0x96630FC3, 0x9AAA69B3, 0x7C671DB0, 0x364CF291, 0xC09A19EB, 0x0CF29EA6, 0xA96FC33E,
+0x67970BB3, 0x2CEE2FE0, 0xC2F06763, 0x26514FB6, 0x4065989D, 0x36DBFEF7, 0x16539FEA, 0x7F660557,
+0x02D5CE4B, 0x854234A7, 0xACE89387, 0x061B592B, 0xE7B2A77F, 0x2831FB80, 0xAC79D1FB, 0x1978F376,
+0x623967E9, 0x7E33E1CB, 0xD2A7AD8B, 0xC1FDFD6A, 0x965C26B9, 0xA17C05A6, 0x6FCB6E5F, 0x8A8ADCFE,
+0xF545CCAC, 0xDAA61772, 0xA74096B7, 0x21BF49E2, 0x4E560CAC, 0x3DFFC903, 0x9FBB3E40, 0x98C302CD,
+0x28325152, 0x7D0DEA42, 0x78685F29, 0xD3503F41, 0x883B6190, 0xA4760CE1, 0xEBD21B9B, 0xB548B9D9,
+0x42CF92DA, 0xD1149BF8, 0x60C41855, 0xB1C576D7, 0x19070F24, 0x6BC1AE19, 0x756EF471, 0x36B95161,
+0x1A86B2F3, 0x072134D1, 0x2ABD36FA, 0x4541000B, 0xDE951F12, 0xD6B4464A, 0xA8464725, 0x0A6102A0,
+0x674DAC76, 0x4067487F, 0x13B70372, 0xCC783B5F, 0xDF611D38, 0x563DD2B4, 0x07120F73, 0xC7707F36,
+0xD7ECCFEB, 0xE1D4A6A8, 0x75D040F8, 0x555B9838, 0x460EEF26, 0xE843328B, 0x6E351CAD, 0xD46B79D7,
+0x562E146F, 0x635A2BAD, 0x1519F7BE, 0x6FC2265A, 0x87C6C42B, 0xBC0F6E4A, 0x7A04EAE2, 0xA38A11CE,
+0x132EB489, 0xBEC45AFB, 0x5A708867, 0xE3817AFC, 0xF79C515A, 0x776C04E9, 0xE1FC7F11, 0x404D70A6,
+0xA0B94D98, 0xF3328CED, 0x6FEEE3A9, 0xF3C27323, 0x843529CB, 0x6EF99E34, 0xE9818903, 0x1CA227A7,
+0xF0D72965, 0x0BA823CE, 0xAB81688F, 0xAC936B0A, 0xA9009917, 0xC67F3D41, 0x0239FA7C, 0xB3F0826A,
+0x72BE1CF7, 0x523281DD, 0xF067E6F8, 0x1402B9CD, 0xBEFDB723, 0x357045E8, 0x3BBA8436, 0x41C4AE33,
+0x53F7F359, 0x7CCE4D52, 0x8A66FE96, 0xBC0F6F3A, 0xDF19C617, 0x16829CCC, 0x8094F11A, 0x951B5E6A,
+0x72AFA94E, 0xC180EA4F, 0x7FFC08FB, 0x1EDD7326, 0xF3F39F01, 0x52EEF8D7, 0x3A09F163, 0xBEC75FB9,
+0x77249D8E, 0xC587BD59, 0xA2A5528B, 0xFCD04688, 0x3E358CBF, 0x83973DC1, 0xDC31AB40, 0x5D41A9D6,
+0x1825C050, 0xEC43F2F8, 0x2B4946CC, 0xD16C01DA, 0xB572D633, 0x8C0DCBD1, 0xB4456CF6, 0xA9F344D6,
+0x80F860E2, 0x6B3CED35, 0xE458E807, 0x201F05DA, 0xCC35DFDC, 0x532829B7, 0xA43233C0, 0xC5BAFDE0,
+0xDABD8545, 0x1906753A, 0x661FE3E4, 0xA2F521BE, 0xC82F36F2, 0x3FF3714A, 0x1C3716FF, 0x5A667933,
+0x81A6DD21, 0x56365965, 0xC99FBD03, 0xD871F227, 0x66DC5C1A, 0x819F496C, 0x515E89AB, 0x202A41C0,
+0xE19073BE, 0x78691435, 0x999136E2, 0x097E8FF8, 0x790D824E, 0x84473AC7, 0x9AFA8144, 0x22CD64C3,
+0x44974942, 0x9BD5BA36, 0x711E795E, 0xD510EDCE, 0x5236CA8C, 0x3624D92E, 0xE45C9A0A, 0x18C505A4,
+0xB6501166, 0xE706C56E, 0x41E2B852, 0x390DFEF5, 0x53E32D61, 0x1C734611, 0x55404637, 0x1D451D73,
+0xEF3EB8DC, 0x3C72B4E4, 0x8ECB469E, 0xBE2E0D7E, 0x1B777BAA, 0xE47059E8, 0x091445B7, 0x4ECB238A,
+0xF4A671A6, 0x1D5BFD35, 0x255CA51B, 0xC90A665B, 0x0CE478A6, 0x3A1897CE, 0x03B9ABD1, 0xED3EAD4E,
+0x7F7965CC, 0xB3858E14, 0x7336C3CF, 0x4AF31077, 0x35944E64, 0x3EC910A7, 0x53804D71, 0x873EB3F6,
+0x5C11A59A, 0xE3B58E65, 0x4383B0DB, 0xDCAC9847, 0x2745CD73, 0x873F1EED, 0x7CB578D9, 0x2C4A7A18,
+0x8589D09B, 0x5536A401, 0x7D3F1AEC, 0x2239893E, 0x8B4B3E47, 0xF2F7EBB0, 0x62BFF8B8, 0x320C5D52,
+0xB18920FF, 0x8E2ACBB4, 0xD02D5F18, 0xC48ED911, 0x8E067895, 0xC0AD9C71, 0x44F96F3B, 0x1D31B77B,
+0xBF9F3F9D, 0x7476400E, 0x4839AF49, 0x98B050CD, 0x0754C628, 0xF83857F2, 0x73A1D69A, 0x66A65A83,
+0xCF929A0C, 0xD2E787B8, 0x55D50416, 0x52E28353, 0x24FFB18A, 0x2103A3A3, 0xBAF115A1, 0x65269438,
+0xAA5C694E, 0x6D955122, 0x60BC9197, 0xA170CF30, 0x57197DF1, 0x1506527B, 0xC85D2988, 0x1488B140,
+0x90A1E546, 0x217A0EF5, 0x9F0394C9, 0xA271BE69, 0xEE300305, 0x8D3A1EA7, 0xBB57324C, 0x044E4AB4,
+0x9FAD562C, 0x68A8A995, 0x066DA6CE, 0x8EB94271, 0x0C3005EB, 0x59CB3670, 0x2965D5D1, 0xD541E99F,
+0x663DEEB7, 0x9D63DE33, 0xA19DFD70, 0x22AC6BF3, 0xF8DFC9EB, 0xC81EF172, 0xAECDA585, 0x7B93728A,
+0x825A368E, 0x58378F8B, 0x038A4FF3, 0xBBC6EA0C, 0xA2A3CC50, 0xBE6C7550, 0x45DC6BDF, 0xFDDF62E3,
+0xA4D3777B, 0x90032835, 0x32832F9D, 0xD6B9C199, 0x9721B14F, 0x42505B47, 0xF9CC7A32, 0xA5E6D7FB,
+0xD12590D0, 0xFC765A77, 0x4C3231D9, 0x9F67573A, 0x5436B8BA, 0x25FFD25A, 0x85216483, 0x85B3DBDF,
+0x5BCDA8BF, 0x1F1F9CF5, 0x6558B089, 0x66C6F076, 0x0B6C97FC, 0x9F180863, 0xD2A1573F, 0x029551BE,
+0x918CE91E, 0xB0107346, 0x83CD23EB, 0x0E612B24, 0x7F6934E6, 0x690724EF, 0x943E74AA, 0x8711D552,
+0x8369578C, 0x60357F5B, 0x207C5854, 0xE4A8A056, 0x8CA3D504, 0x5FE43AC5, 0x35CFA87D, 0x66C98465,
+0x24E69270, 0xA9F95426, 0xAB0F91EA, 0xDBAD033B, 0xD246DFF7, 0x0D161918, 0x36CEEA7F, 0x8CD6C345,
+0x4E89F65D, 0x9BCF080C, 0xA3ABB13E, 0x568C70DE, 0xCDCEDB9C, 0x03F58862, 0xE6A57149, 0x11A03417,
+0xC17729BC, 0x62E1D66B, 0x7D8F230D, 0x836FC76F, 0xBDBEB744, 0xA7E27E4D, 0xFEEFE769, 0x780878E7,
+0xA0F8994A, 0xE3ED2A59, 0x32EB0431, 0xE3687A7B, 0xC8901391, 0x952DF63B, 0xA673028E, 0xB08B45A5,
+0x268FB4CA, 0x250439A1, 0x19164FB2, 0x38A31A54, 0xD3841CCD, 0x6CDDB8BA, 0x004E7B6A, 0xB466449B,
+0x20F8A839, 0x67A856A2, 0x58E19764, 0x999E801A, 0x465F7683, 0x99AA73A7, 0x27A9DAF1, 0x3455910F,
+0x4E5B90E2, 0x0AB221A1, 0x732743FC, 0xF065CB08, 0xE8FAB961, 0x06317ED0, 0x252F923F, 0x7E60495D,
+0x43F1F590, 0x4FD29E4F, 0x98579527, 0xE170BA32, 0x344D38F9, 0xBEFE42EA, 0xC8C6E6AF, 0xEB287AAC,
+0x714FAC3F, 0xCEC588AE, 0x23BACF53, 0x04C20899, 0xF48E64B1, 0x4B1F0E17, 0x22636C0B, 0x81F1BB80,
+0x009CE594, 0xCB460570, 0x572E1CA8, 0x8DC537F6, 0x65009FE0, 0xF5A70C77, 0x4963B363, 0xC61821F4,
+0xB7ABD1E5, 0x7C51D7E1, 0x494DF9A0, 0xA9295790, 0xF66087D4, 0xE68798B5, 0xF183BF32, 0xCD4784D5,
+0x18C798E7, 0x6BA81C73, 0x6F9FA025, 0x247792A3, 0x77653B3C, 0x41F1191D, 0xCE7E72F3, 0x2BA83E4C,
+0x27968526, 0x627B93F4, 0x0DABBFBE, 0xDC4E036D, 0x6DEDD104, 0xC2D1ADDB, 0xA2D44053, 0xC603F82C,
+0x027D09E3, 0xB15FCAD7, 0x77ECE995, 0xDC228D3E, 0x85A6EED4, 0x3177BDD8, 0xB6E4269C, 0x67D3A6E3,
+0x7800A433, 0x08529F17, 0x38E67018, 0xCBCEA869, 0x2385EDCF, 0xFC6D6641, 0xF0B44054, 0x65DDDE28,
+0xEB95DBC4, 0x2640176F, 0x4679D9E6, 0x6869A79B, 0x9E39A06C, 0x8432032E, 0xB0E396D8, 0x7CCEB1F4,
+0x4858A2E6, 0x09956E1C, 0x75906B28, 0x7547FB24, 0xCF9E04F7, 0x719EF7E6, 0x53FF901F, 0x006EDD25,
+0x33F0A431, 0x3DC24946, 0x8A0B854B, 0x22B719C4, 0xB1B21DF7, 0xCE9D3D0F, 0x6523E5FB, 0x2123FA7F,
+0xDF45A1E0, 0x0E6CB5D1, 0x7C714B1C, 0x0C0DDB63, 0x7A6137FE, 0x58720032, 0xEE476138, 0x3DD6CA9F,
+0x41967F31, 0x5B3AC4CE, 0xCB3B024D, 0x125535C9, 0xC0DEF21C, 0x6F50A9AB, 0x4E5BFDD7, 0xE8718FB5,
+0x1C79C3CF, 0x60E199DA, 0xEF456295, 0xD51F2D13, 0xE65209B1, 0x3D67A888, 0x69AA1682, 0x618FE77E,
+0x3927B891, 0xE0383E69, 0x7D227A5C, 0xDFB0D6F3, 0x6B016C3A, 0xBE9D4B45, 0xF6386429, 0x20971347,
+0x761B40ED, 0x709979D0, 0xCD65A917, 0x12869EC7, 0x251DD116, 0xAB4A0C4A, 0xC2DBAE43, 0xB02923F8,
+0x46241D7A, 0xCD46A336, 0x781D810D, 0x3A07C5C7, 0x2BC4DE96, 0x8703A242, 0x85714547, 0x8C3123A6,
+0x973D14A1, 0xD9ACAEE3, 0x76788146, 0xF748B6DD, 0x25A524AE, 0x3AC2AEC0, 0xCDF9B452, 0xE9F7B50B,
+0xD0C1A597, 0x34122C58, 0x471A26C5, 0x2D113947, 0xA0220E9D, 0xFD84D112, 0x8E1691AF, 0x917E4F6B,
+0x543F03BF, 0xE36B4290, 0xCE054C7A, 0xB9FCD2AF, 0x2AB69C6D, 0x54A2979E, 0x36112D55, 0x25EFF8EE,
+0x07BC7233, 0x772C8047, 0xF2A3EF09, 0xB0040A7F, 0xD4803A71, 0xBFF72A37, 0x5B4810EA, 0x6C44ECF2,
+0x632452B7, 0xCA97DDAA, 0x86554E86, 0xAF8780B8, 0x7D6234C0, 0xA0F31757, 0xA650000D, 0xE6F26664,
+0xB2038F87, 0x4EAF09FC, 0xC675F433, 0x31E340FA, 0xE850168F, 0xC14BED41, 0xAC409318, 0x2F8ED18A,
+0xA7C05934, 0x2B5E1C8B, 0x4BBA9FED, 0xDE63BC93, 0xF53BC2F5, 0x6DAD8BC1, 0x657D0A0E, 0x037050CF,
+0x80BAA0CB, 0xF0821484, 0x90218A60, 0x431067B4, 0x3E21F6E5, 0x7F96C72D, 0xB6BD717C, 0x73B7BB10,
+0xB7C01C57, 0x842FB8FA, 0x3E5C8292, 0xD454B262, 0x061825AA, 0x607FABE6, 0xFD5B1C67, 0x2713FA6B,
+0x2E3832E2, 0x61B4A3C5, 0x2EFBAC7F, 0xCE311E24, 0xAA4CA1A0, 0x645F315C, 0x2B6C3676, 0xADF5A739,
+0x9E86C340, 0x4F541EFF, 0x13F21572, 0x6468FA31, 0xB3A0EFD0, 0x5E9720CD, 0x4B789876, 0x1C15EC78,
+0x850723C1, 0x2EE46EA8, 0xF96967E3, 0x947DA1C4, 0xE35246C6, 0x75C7378D, 0x2A522155, 0x91D76E96,
+0x8534CFD1, 0x67263708, 0x51C0650B, 0xB5F504EE, 0xE07ABB96, 0x28F59416, 0x5BCED238, 0xF8567EB8,
+0x9C119314, 0xEDDBF8F4, 0xAEB60E1F, 0x4EEF1582, 0x9928CD22, 0x354CFF57, 0xCEBF5616, 0x7F99941B,
+0x77D3269C, 0x111147FA, 0x760BA172, 0x7D80B6C1, 0x2DEA22D9, 0x22AF1CB2, 0x6988F291, 0xEB441D5C,
+0xECA66368, 0x780DEDBA, 0xFE286A76, 0x7082402F, 0x4B9565C1, 0xA5674177, 0x8BB0B1E4, 0x1F31D349,
+0x3144305F, 0xCE7836F0, 0xE41C4DA7, 0x768B9FF6, 0x0D5AC05D, 0x7E7838D6, 0xD913233E, 0x73173E9C,
+0xF0455501, 0xA14359D1, 0x585C3983, 0xB1554809, 0x31335685, 0x7816F9FF, 0xAFE0C62C, 0x3C90131B,
+0x304660D8, 0xE03861FE, 0x895FAF58, 0x71392DA5, 0x956D8D1F, 0xF4FB4EB4, 0x859B1C9A, 0xD8091A43,
+0x9C612914, 0xC03F5B3F, 0x89A716AB, 0x6017D6A8, 0x38637BB8, 0xEEE36C6A, 0x40C39DF4, 0x10FEC9ED,
+0xA027DF73, 0xDB53BC84, 0xD119458D, 0x1582F688, 0xEA0A9506, 0x64DB5505, 0x408276E3, 0xD98F867B,
+0xD2F2FFFC, 0xE7C2BE9B, 0x8CE16C57, 0xBFA493FA, 0x93C1D7FB, 0xC3837D7F, 0xD4393EB0, 0x5989143B,
+0xC02F5DD1, 0xA2F74144, 0x669D1F32, 0xFDE5BEBD, 0x466F1C16, 0x5BD3022B, 0x91189C1E, 0x1132A314,
+0x5F37D640, 0xA55550C1, 0xF8089A89, 0x6C7DEDC0, 0x48F15D6E, 0x3D4414C4, 0x8D1F9527, 0x183B33C6,
+0x29CCBA65, 0x3563B185, 0x797E7F7D, 0xB2F5C81F, 0xA25CD487, 0x482CE384, 0x40163141, 0xD8CA1E5B,
+0x77F46400, 0x324C87AC, 0xF0A2A178, 0x05AB5801, 0x16B512CF, 0xC200DB50, 0x10D072F9, 0x50498AE0,
+0x5991E7BA, 0xD92AEE92, 0xB0E397F4, 0x6C5635EB, 0x1EA0057A, 0x5A7012C5, 0xBBF46C2C, 0x1C2A9FAD,
+0x6D165507, 0x477BE54E, 0xCA6C1966, 0x61DF2ACA, 0x557F464E, 0x12A3E878, 0x58504498, 0x581D82D4,
+0xE5211BD8, 0xFBE087C2, 0x8E3CB9AE, 0x0C40A42C, 0xC1DD32EE, 0x54D4AC4E, 0x51240A17, 0x2805270C,
+0xBE1B1CC6, 0xA38E352B, 0x0F71EF4C, 0xECF22CFA, 0xCE830168, 0x03CFFBB5, 0x51694EBE, 0x65DFA884,
+0xB7C0CE55, 0x4785533E, 0x3D45D9A2, 0x0EBAD701, 0x5996CD91, 0x41AE2B29, 0x405E82D3, 0x052BDC8A,
+0x4DD136FA, 0xD1E0E04D, 0x6F204EB6, 0x70022E79, 0x3C41DC9B, 0x432F7147, 0x467207C9, 0xA6F120E2,
+0x0469FEF1, 0x045A76A9, 0x9D8CE561, 0x36262E75, 0x7A525545, 0xB02BE8C1, 0xBB18421A, 0xA08C1D28,
+0x613583A8, 0xBFFE197F, 0xCABD53B1, 0x27E4A39E, 0x57C93AB8, 0x92681AA4, 0xFE988046, 0x1AEC5241,
+0x7CB32236, 0xF1C1F7F7, 0xCB6D78AA, 0x469D4066, 0x75AEE823, 0x3157AB38, 0x85C6C976, 0x6F8FFC14,
+0xF5567D5A, 0x344E116A, 0xF9E04586, 0x8EBF6CF4, 0x17C8D067, 0x56442AAA, 0xDF3E777C, 0xEB4E3244,
+0x70B692A3, 0xA237C5CC, 0x604E85F3, 0x6D0D0CEB, 0x550E5B4F, 0x869477C7, 0xF5596513, 0xEE761AE8,
+0xEFCCBF6C, 0x937263EB, 0xAF2AA785, 0x82AD4746, 0x338772B6, 0xC37DCDFA, 0x4EF5B2EE, 0x56602B3A,
+0x702D05F3, 0x099ACFE5, 0xD8A75402, 0x382C234D, 0x3FCE293A, 0xCFC422F8, 0xE8BBD2C4, 0x4F9F2504,
+0x7FEBD340, 0xDC9A135F, 0x75FE9566, 0x735D7BE8, 0x9EE131C9, 0xB7AFD89A, 0x787CE755, 0x50F1FDCD,
+0xEFAF650E, 0x77B1DEEA, 0x918F4D3A, 0x3C0212B8, 0x1CE13583, 0xB93E8BF1, 0x3C4ABC85, 0x48BAA9C2,
+0xB90AF49F, 0x1E72B1FD, 0xB71F9B4A, 0xEB6EAC10, 0x028074B6, 0x5FC2FAC8, 0xE6E55B9F, 0x0792FFDF,
+0x976B8371, 0xC63C1417, 0x9DDD5DE9, 0x8E9AE235, 0x535AA34D, 0xA2DFCCF9, 0x1C0E1A15, 0x468A0DE5,
+0x13805FD7, 0x44AAD51D, 0x3E55E79D, 0xD7815310, 0xD3A63632, 0x7B2AC9A3, 0x574F1AF6, 0x29DA5CA9,
+0x4AF3893E, 0xCAD1C21C, 0xFB98BFC5, 0x2F6B7357, 0x1259F070, 0xBCEB5AEC, 0x6E9063E3, 0x2E1CA49C,
+0x86CD61EC, 0x9A6B06DD, 0xCB90DC95, 0x4165F05B, 0x37C9053A, 0x14D9963D, 0xD69FA2B1, 0x916E5C01,
+0xDE028221, 0x864A1E87, 0xE3F49A47, 0xBA5CFF4C, 0xDEFBB576, 0xFB7BF2E3, 0xA3C458D6, 0xB7491506,
+0x15A56BC7, 0x4F36DB1E, 0xBA1DDD76, 0x5A0A1C00, 0xD980F81B, 0xA2BCA310, 0x728B9414, 0xD89CBFCF,
+0x257503CF, 0x511ED7D7, 0x3073A542, 0x6F8018B2, 0x2788259F, 0xF16D31D6, 0xED92994D, 0x3BCB61BD,
+0x33BFB14D, 0x8B230F1E, 0xE8326524, 0xEEC2A08E, 0xA8F400F7, 0x47B876C7, 0xE1073E71, 0x19BE589E,
+0x13B66F12, 0x892669B7, 0xDCBD0C74, 0xBA30E9A8, 0x65ED0A21, 0x90431A04, 0xE5A8B5E5, 0x6D0E395E,
+0x17C19887, 0xDF48D1A6, 0x76F9D2E6, 0xDE9648A7, 0xC030F45E, 0x19CBE2C0, 0x914D8E92, 0xBC9F3DF5,
+0xCAB7C6CC, 0xD5414E12, 0xDB9E01A7, 0x13BCC6E6, 0x5C3C4C4D, 0x4F322BF0, 0xEF97A8CB, 0xC47BBEB3,
+0x8DF29866, 0xA1A0E734, 0xCD309AA8, 0xB45B7D55, 0x92690467, 0x5CD2C748, 0xED696D8A, 0x014EEBA4,
+0xDD1A8C98, 0x6C6E421F, 0xD7B24DE9, 0xE3E580C4, 0xF06787C5, 0xC5730F86, 0x27833155, 0xB94F2DFD,
+0x00382E42, 0xCF9C1905, 0x5965DDC6, 0xA6DC4B53, 0xAAA6A980, 0x6D20694D, 0xB70C92D8, 0x0F991B2A,
+0xCA5192C2, 0xACF67AC2, 0xBA378401, 0xA78B65C4, 0xB0A8D55E, 0x7B9BACCB, 0xB76ACB84, 0x20AB1967,
+0xFF799048, 0x0EF10F06, 0x2D601487, 0x3155BC2C, 0xD641E777, 0xE8370893, 0xB984873F, 0xA2073F99,
+0xF9322A7B, 0x2DA26C64, 0xAA02488B, 0x5FF7A619, 0x7A3B7DA1, 0xB376ABE4, 0xF8EE54CA, 0x80C958D8,
+0xCBD04677, 0xFC29AD0C, 0x18D40857, 0x03DBB55A, 0x43102A34, 0xAFC8FE71, 0xE780B1D9, 0x2F887179,
+0x029FD3A6, 0x8988A6CE, 0x938EFCDB, 0x9CDEEC12, 0xB0DA18CC, 0x4634FB5A, 0x1DB230F6, 0x8ECC6474,
+0x1D2FF0E0, 0x02590643, 0x873ECD85, 0x52956357, 0x383A41E0, 0x849BE256, 0x95267A05, 0x1C7AEA81,
+0x3F60C9FC, 0x37C705E6, 0x507E6DDA, 0xE2BD157C, 0x28A265C4, 0x21C2758F, 0xA37D8F6F, 0x03641DB9,
+0x5CCAF986, 0xD81ED899, 0x175EEE49, 0x6B86581B, 0x4D42FA53, 0xECF1804D, 0x7773EB1E, 0x25CB0847,
+0xD05F6760, 0xB08A2AF7, 0x9FFC59B3, 0xEC458A04, 0x14FAA174, 0x7FFAF74B, 0xBC92101A, 0xDE967479,
+0x40F08B4C, 0x48A209E1, 0x1ACA53AD, 0xD9807353, 0xC8B89AD1, 0x667893B7, 0x4A508620, 0x25BF6658,
+0x21624EF7, 0x5731E2C6, 0xAB5E2AA1, 0xCEE8DA7B, 0xC395A910, 0xCAD58285, 0xDF2977DC, 0x1F758290,
+0xB206188F, 0x9E5667F8, 0xDF3D885C, 0x80E1803A, 0x0BB73864, 0xD2B4BAC0, 0xF6BAF94F, 0x20AA1B14,
+0x76521C3C, 0x822E25D3, 0x4E2B5018, 0x49F9B3DD, 0x93F27A1C, 0x5433ABA5, 0x0252124C, 0x7B90CBF9,
+0x2FC2A7BF, 0x6D1C73A1, 0x231870D0, 0xBEC73691, 0x7A976D26, 0xE38EB8C5, 0x6846EC89, 0x7633465C,
+0xCBEA172F, 0xDD51F74A, 0x7E275D04, 0x5EB3BFD0, 0x9ECCDED4, 0x67893D8E, 0x857379A3, 0x0A8F197F,
+0x5458133D, 0x0AB42E83, 0x938E2734, 0x9C0485D1, 0x30CE3045, 0x7EBA3024, 0x7DF7D8A0, 0xAAD7FB69,
+0x0C1406F3, 0x5505331F, 0x3238C948, 0x00D7906C, 0x0D8526D4, 0x8173B26E, 0xEA7C43AC, 0x6F375D64,
+0xFA2619DC, 0x7AD1F948, 0xE1B6475D, 0x92055297, 0x8A5DF9FA, 0x84A028D8, 0xE3BD24C5, 0xEFD7BCC0,
+0x40AD2E6F, 0x127C894C, 0x33C4B62F, 0x2483D132, 0xB739C708, 0x6647955A, 0x03EB4BC8, 0x4D43F40C,
+0xB24E7E8B, 0x84DC79C7, 0x207A2CD2, 0x67E0A39D, 0xE246F115, 0x8CD3F651, 0x00861B82, 0x1CE2120E,
+0x3DE3019D, 0x24D5F1EC, 0x67F196E9, 0x591D856E, 0xAE74D44B, 0x634615BD, 0x9EE58B1D, 0x9D8F33F2,
+0xF8827838, 0xC3F4A61B, 0x478203F9, 0xE3D8A0E8, 0xCA7C41BF, 0xC1EF571C, 0x4381C645, 0x23D37EBD,
+0xE3CA771F, 0xEB8C5974, 0xDF958B0D, 0xCCA7797E, 0x7248B757, 0xAF02E95F, 0x36C1DD7C, 0x143769C9,
+0xC195B052, 0x3193B5EB, 0x9657C68D, 0x0D0631A1, 0xC23E7B2B, 0x79482F73, 0xF821C2CE, 0x4EACEBE2,
+0x04F497A5, 0x734283B9, 0x12EFB9F0, 0x6897CA40, 0xC66C1012, 0xAA732CAE, 0x1C2C04F2, 0x0EBC62BB,
+0x48ED1E30, 0x223EB3D7, 0x2BF2D148, 0x49175F9F, 0x13C41270, 0x16F48515, 0xC2078F15, 0x423B7E29,
+0x058F8C43, 0xCF95F57F, 0x251A7007, 0x6812C023, 0x5E245E74, 0x060ED458, 0xF5378C82, 0x52F4AB00,
+0x6DF797A5, 0x72F6B202, 0x792595C6, 0x723D8EC7, 0x39086585, 0x8D2FAC28, 0xC08C82C2, 0x892C2422,
+0x9CD201A1, 0x8BCE2E54, 0x5EA244BE, 0x25E652C8, 0xF0013E0C, 0x479C5F89, 0x52E38976, 0xE3A56543,
+0x948CF409, 0x4552DB23, 0x70E769D0, 0x5B704B75, 0x937902D1, 0x034585A3, 0xED4CAFC1, 0x12EC7634,
+0xCEEA9071, 0x5638B61C, 0xDA1E6779, 0x7E9278E9, 0x864B77FF, 0x37D2F048, 0x30F287D2, 0x9CB2B354,
+0x8231FBD4, 0x433A786A, 0x068734D8, 0xDC110178, 0xCE081F22, 0x50D7941A, 0xB2C8A894, 0x722735EE,
+0x6DDAD1C0, 0xE3301011, 0x6F342030, 0xAB74B23D, 0x5EBF7DA9, 0xF0F693C8, 0x073A573E, 0x132ADD13,
+0x1DDFB758, 0xFFFB892A, 0x8FE7E310, 0xA464611A, 0xBDF99641, 0x933E7AEA, 0xDE7D2EC4, 0xBDD1E639,
+0x2A685AC7, 0x52BA0E30, 0x3A497A93, 0x58C8059D, 0xA3D6700D, 0x43D93E37, 0x65818BCC, 0x815E10DF,
+0x4615A989, 0xBA0AA622, 0x4EEF9A09, 0x99F3172C, 0x85400FB1, 0x93EEE7CB, 0x9A9F37AA, 0xD9D81A0F,
+0xE3D77030, 0x8F356D93, 0x7278B06F, 0xF2E3289D, 0x6739F54F, 0x9C003B07, 0x402B41C4, 0xF0F69DF1,
+0x7A4DAB2E, 0xF4D2FC12, 0x72BB3115, 0xC825A4C7, 0x41B93ED7, 0xBE41096E, 0xBB1ADB4C, 0x64B463AB,
+0xE1DA6C1C, 0x04261B38, 0x7312B478, 0x1A96AE5F, 0x3719EB09, 0xF7A6CB52, 0x2B631E07, 0xC1647264,
+0xEC3A7E8D, 0xBC03D338, 0x4819CC53, 0x4987BD4E, 0x28058292, 0xC57FA697, 0xBC0EB27B, 0xFC865587,
+0xB63872A9, 0x97F74894, 0x65B9DF54, 0xAA9632D2, 0x2E3B413A, 0xD4E4967C, 0x1B7E4FED, 0xED31C095,
+0x53F6C2B1, 0xF40A8077, 0x11879CA7, 0x9D1B8DD0, 0x5DE7C09D, 0x7500C341, 0x2D5120AE, 0x67D03F9C,
+0xAE661169, 0x82EF3E4C, 0x77C6ADD0, 0x9E853799, 0x685E093F, 0x26D5C079, 0x5B970F25, 0x6EEBBDEF,
+0x10E23897, 0xF772608E, 0x187C56C8, 0x725C9FC0, 0x8BAAB04B, 0x39D75274, 0x209DA4E8, 0x58DEFFEB,
+0x260E6BC2, 0xF8B4ACFA, 0x0859D4C4, 0xF0BB3951, 0xB6216EBF, 0x8B49BA8F, 0x20C78E64, 0x2C4D11A2,
+0x74872CB5, 0xBA721771, 0x3654F691, 0x0F1A1C59, 0x339DE1E6, 0x9A750F5F, 0xF79E641E, 0x25B9E272,
+0x56E8C85B, 0xFB286B54, 0xC439D998, 0x27DCA6EA, 0x503F1E4F, 0x3D79AE7D, 0x3C2AAC5B, 0x2F08257F,
+0xFB0FF30D, 0x345490E8, 0xBF306331, 0xBD5E7B1A, 0xFF0DD17D, 0x8EC7BABB, 0x86B8DB0B, 0xCB89FFA9,
+0x141A5D4C, 0xEDD76826, 0x5123A7AD, 0xF4250FE0, 0xDF6D578A, 0xCC0AEBB6, 0x46C140EF, 0xA063E62F,
+0xBDC49DE4, 0xEDBE0D6C, 0x42149BFA, 0xE78506B0, 0x8DDC13C1, 0x790D21DB, 0xBCBC8D47, 0x4034D5CD,
+0x5428AB37, 0x34DEAB15, 0xBBBC9C19, 0xF2A9989C, 0xA23198D2, 0x60DBCAAE, 0xBF01F9EF, 0x7D509E5D,
+0x058CAE38, 0x1D3C161D, 0xB2CF3132, 0xA88FB40F, 0x8AFCD8DD, 0x6DF071E1, 0xD828BF5B, 0xDAC0D8C5,
+0xEA4CB220, 0xB9F43B6E, 0x84461ECA, 0x2C2190B6, 0x5FBF1D33, 0xCD069EA7, 0x45170D53, 0xD1B61EA2,
+0xCD27CE1A, 0xD6534322, 0xA6D2C05A, 0xB585B947, 0x11F35A03, 0x0E94CBA9, 0x3D835B1F, 0x24A17D3D,
+0xF03ECB39, 0xD9626CB7, 0x424949DE, 0x73AE8BC0, 0x1C6998AB, 0xE8D2C43B, 0x49D2A42D, 0x6FB3EE72,
+0x2B6F479C, 0x757C619F, 0xCE7D8F2B, 0x7EE3C5C7, 0x4DE3A4F2, 0x1FB059D6, 0x0F0B0891, 0xED6F4839,
+0xD162F52D, 0x4D40300A, 0xA75BF51D, 0xF83CC252, 0x22E7038F, 0x2E2FB863, 0x590C4322, 0xD9292A36,
+0x17DADF81, 0x50BE6850, 0x3212B8CE, 0x93DB7138, 0x4012133D, 0xD198BD1D, 0x7D6D0E71, 0x91DEDA18,
+0xDE75942E, 0x28D93AA3, 0x4BEA1E33, 0xCE86982F, 0x77FAC8F5, 0x429FEE23, 0xE1A88B24, 0xDA217329,
+0x089F229E, 0x0449C0A6, 0x6C2409F5, 0xA6B2AE5E, 0xAAF5B10C, 0x5D463650, 0x096FB2EF, 0x85B4E29B,
+0xC8115561, 0x3D285597, 0x963A6746, 0xAC277F6C, 0xF94B7E24, 0x6EEE4BE2, 0x76C4139E, 0x5692759D,
+0xCA1B5DEF, 0xA1FA869E, 0xF5128BCE, 0x8A12B748, 0x80B2BEB6, 0xA070420B, 0x6D2DD493, 0x3F0D9D10,
+0x8FF5DF97, 0x4A9C44D0, 0x3538B78D, 0xD1604C16, 0xAB779025, 0x44D32259, 0x21F23474, 0x91770A4E,
+0xBE1CD0C4, 0x01F992BD, 0xDD6FE58A, 0xA5A519DA, 0x51FF14F4, 0x11ACD764, 0xBF927913, 0x080B33E4,
+0xB1309DAE, 0xD5F55631, 0x2D12ADF3, 0x9E923543, 0xC2D06BEC, 0x159B249A, 0x96BE825B, 0x2054282D,
+0x7FE936F9, 0x741B77D3, 0xCE6FA780, 0xAF41958A, 0xF2C26129, 0x2710124B, 0xE8DE7B0E, 0x5A1F2AB7,
+0x0D726A31, 0x6EFE2006, 0xABE0BFB0, 0x8E2E8297, 0x7669D5CA, 0x12ADFEAD, 0xEFE7A442, 0xD6021475,
+0x3C8587A8, 0xDC8AE49B, 0xBDA2E0FD, 0x18E7A35E, 0x83C1FBEE, 0xC62DE1A2, 0xFE29C4D0, 0x1663C36D,
+0x680C184F, 0x6FBB3871, 0x4A8D3705, 0x10843CAD, 0x1178CCDE, 0x464820D3, 0xF958E1A0, 0xF8342457,
+0x4B432CED, 0x766F658E, 0x13291DC9, 0xE96C4693, 0x2A7785F4, 0x01A44E91, 0x76243F2A, 0x9E53ADC2,
+0x4D966301, 0x70BAAF1B, 0x8E51DEF1, 0x5A9CA3A4, 0x5DBD8F70, 0x82B988E2, 0x3669B63F, 0x8D920EE8,
+0x87963C9E, 0x56EE57E8, 0xF3BB59AE, 0x216B0A02, 0x74CD08FE, 0xBC8C0E36, 0x8EC9A8D9, 0x8ADBB5D6,
+0xE72ACB10, 0x6BF00F28, 0x132B633D, 0xD8827AE8, 0x1C8AA595, 0xBE679F28, 0x69C8872B, 0x3AD9FF05,
+0x10936EDB, 0x3E274683, 0xBE70B2F8, 0xA4D70986, 0x422A5280, 0x06C25B81, 0x0C7857F5, 0x65C59AF4,
+0x32AEBBFC, 0xFCAD53EC, 0x6B3850E2, 0x6EC416D7, 0x45F09DCF, 0x51FE0BF9, 0x4598E511, 0x0DB71B7D,
+0x5F6C15F7, 0xECA98874, 0x1A26A684, 0x89E6C2D3, 0x482D7993, 0xF9471D59, 0xF8B2BC94, 0x81439E95,
+0x5C83101A, 0x232D6723, 0x838B4FA4, 0xC40B6E0F, 0xD1A1887F, 0xAE13B7F4, 0x122488E4, 0xD3B4E148,
+0x7F7784FD, 0x40E23C49, 0xB8F3BE8A, 0x46EEC5FD, 0xB60DCAE9, 0x5A28C23C, 0x34FACEC0, 0x5E241177,
+0x63767155, 0x4FBDCFEA, 0xB1DC5646, 0x3BB91444, 0x4604B164, 0x215987F6, 0x2DAA983B, 0x4EF98652,
+0xCBF42099, 0x8CA1E9E6, 0x0003F4F7, 0xCDB0A441, 0xBA87828C, 0x5AEE1191, 0x96FCD183, 0x665D8641,
+0x02AFA6DF, 0xEEC323F0, 0x96714E18, 0xC2B601DA, 0x36226D30, 0x64B035B3, 0x474E5029, 0xC7389DC2,
+0x17DF7839, 0x2239C62E, 0x42AA0DF8, 0x63721BBE, 0xD1F7B976, 0x7C32C9E2, 0x0134ACF7, 0x4EB4662E,
+0xED39D2B4, 0x28969D40, 0x8ABDF232, 0xD3BC65E5, 0xE5B57986, 0xC2B598F5, 0x46C6EC93, 0xB5787060,
+0xB434DFC2, 0x1EA116C0, 0x71F9CF09, 0x4E0ED8D7, 0x48C55F43, 0x9AA021B8, 0x4B14B21D, 0xC216DD67,
+0x4F7FEB07, 0x4DBEA47B, 0x53BF0898, 0xE90DE844, 0x0760CFE8, 0xA8BEA38A, 0x17507656, 0x3F20E9D0,
+0x2581C414, 0x6CD9126A, 0x77428985, 0x7AF2EA25, 0xB1514B3C, 0xA8BAC06B, 0x7E179D0A, 0x6BF5E40F,
+0xB1539735, 0x79445E6F, 0x43BB0DB9, 0x8FCF7038, 0x8AC7851A, 0x33BDFBF4, 0xD30D0A75, 0x00B26D0F,
+0x8C6335D7, 0x2C5E87E2, 0x02E6A1FE, 0x4AF82D6D, 0x66960061, 0xE057EB37, 0x3F1FADF5, 0x941B3AD7,
+0x692B988A, 0x4A3716C6, 0x7C113D62, 0x15E77000, 0xD9CFE561, 0x86843D40, 0x8AE2BD1E, 0x657D87C3,
+0xF0F08AB0, 0xD8E2146E, 0x0CC4EF58, 0x923D8A86, 0x47449B2D, 0x3AD9891A, 0x519E4E05, 0xDFD40F98,
+0xEBEFD2AD, 0x210E2C99, 0x46BA28D1, 0x70DEDD19, 0x44888D41, 0xFF0051E1, 0x9FB8E418, 0x000BE6C9,
+0xE99483FB, 0x54D71798, 0x3AAB15DB, 0x34DC9C86, 0xD7D2DB58, 0x9CE50CB0, 0x475D7431, 0x94B04AC2,
+0x31A7AC8B, 0xBD00DA4F, 0x757CFD0B, 0x9A93F1EB, 0xA38D8E7A, 0xF85C768B, 0x98DD6CEA, 0x30B1B71B,
+0x4F46A1F0, 0x517C4514, 0x4FBD06A4, 0xBC74F806, 0xE67AE385, 0xF2C37CD4, 0xCB6B8BE3, 0x47EF9814,
+0xE75ADD75, 0x295DB6A6, 0xF8066E28, 0x1809BB65, 0x3A12A0CC, 0x5B0288E5, 0x2A449538, 0x1437CAE7,
+0x366C0F52, 0xFFF86BEF, 0xFA2DC710, 0x40CF9B6D, 0x141D2F66, 0xB497AA68, 0x0EF3B019, 0x567F5965,
+0x36741122, 0x8016CB0B, 0x049080CC, 0xAFEA82B6, 0xBF235473, 0x8F03F7EA, 0x39E93DE1, 0x2AA453C7,
+0xD3137DA5, 0xADE044BF, 0x61698591, 0xCE0F4109, 0xE729BE59, 0x343D23E3, 0x8620E571, 0xBE1825FC,
+0x0D453E2D, 0xFA318B64, 0x5DA15292, 0xA3DF6C63, 0x34CCFF9A, 0x08D1B23C, 0x8C4E0727, 0xD6BFE454,
+0x80FBF070, 0x6BD419B6, 0x11374BF3, 0x1CBA4922, 0x936D408D, 0xC63D53FA, 0xBA3463A4, 0x288DB8A6,
+0x2BFF2180, 0xAC43079F, 0x7748FDD8, 0xFDCB2A1E, 0x84475A33, 0x864B3535, 0xB1A25211, 0x6CDB9FA8,
+0x183152F4, 0xEE5CD2FB, 0xBC1BE840, 0xF84E0D5E, 0x343DA7B1, 0x034C9FC4, 0xC62EA093, 0x168CFDD6,
+0x9E78EF88, 0x7DEB8E05, 0x9A3C6005, 0x4144D6FF, 0x0B07DE33, 0x7C5A62B1, 0xC8BC4FD2, 0xA7D268E4,
+0x7B52189C, 0x1AD41908, 0x2D8FD608, 0x1F5C9F15, 0xFC1D47CD, 0xE75234A9, 0xD4339E3A, 0x3F255973,
+0xA802693E, 0xF70A0152, 0xC6FE715F, 0x360957C7, 0xBE415F93, 0xF9717F33, 0x6A827FF7, 0x08F3EC1C,
+0xE03C2416, 0xC8F444F6, 0x2D26732A, 0xF3D3B918, 0xBB85B49E, 0x6DF692D3, 0x3ABC4F2A, 0xCC2B8E11,
+0x49F58E12, 0x71B5FB13, 0x5F77FD04, 0x0F4E03B8, 0xF1C88456, 0x479F07D9, 0xA9457800, 0x88B50C48,
+0x2DBF8CB7, 0xE9772400, 0x4C9C5166, 0xE62C3512, 0x81B8335D, 0xBDD07053, 0x4966D618, 0x1CEEAF92,
+0x43BC89DE, 0x80B542BC, 0xF9710CDF, 0xE8B0005E, 0xFA8E60F7, 0xE1BBD82C, 0xB84F7B4E, 0x5F632D32,
+0xE2060FF5, 0x99CC0ADA, 0x2A74ACB6, 0xF3A0EBC2, 0x40F03962, 0xCA48671C, 0xE266C06C, 0x1F7FF443,
+0xAF1C1498, 0xCDC78F8C, 0x68757BC1, 0xE3E0DA20, 0x32BA7BDE, 0xEADB5757, 0xC22BEA1E, 0x7F11F6FD,
+0xE7391930, 0x0CC9EF59, 0xB3F12370, 0x373F2EA8, 0x794FC5E5, 0xF6709E03, 0x61C3DF70, 0x1C67C4A7,
+0x20A5524C, 0x046BD018, 0x3F5AEF27, 0xE6DCBC7B, 0x29809D43, 0x7389A2C0, 0x1CF0C14F, 0x9BD97AF7,
+0xE6B1D13E, 0xBD77BE0D, 0xBA26AAE3, 0x1271D9D6, 0xD0552698, 0x6994B051, 0x8375FC05, 0xF8C896E8,
+0x2C105258, 0x88A99529, 0x8B2A3DF3, 0x2992504B, 0xC4ED0E47, 0xFE0207B4, 0xCFDCE510, 0xD6D4AD94,
+0x92BED5BC, 0xDBEA8875, 0x84CD0E13, 0xA0E4875D, 0xB4FD3C0A, 0x32F9470B, 0x3CD8503B, 0xE4ABFDEF,
+0x8566E5E5, 0x4E1C5F07, 0x4477CF77, 0xFF0B450B, 0x7AB7F0D8, 0x133F6779, 0x3460F418, 0x40B94722,
+0x11F075E7, 0x9ACE36C8, 0x041E108A, 0xC5896937, 0x237012FC, 0x0E275786, 0x8084C0EB, 0xE07E7A6F,
+0xAA1AE5A8, 0x10155796, 0x2C430D59, 0xC8495A79, 0x688C1385, 0x528716DA, 0x7A09A3FA, 0x3B16F67B,
+0xFE95A615, 0x34387216, 0xCDADF93E, 0xE3FCFCC5, 0x162024D9, 0x53FFFF71, 0xD519FE0E, 0x39AD1D0C,
+0x69EA8488, 0xEA961652, 0xC3D2143B, 0xC2EC282C, 0x0D3FE020, 0x52740BD4, 0x50AFC5B7, 0x923DAF48,
+0x7D17C88F, 0x9950C799, 0x028D8B14, 0x869DA436, 0xA46886E5, 0x80AB5FD0, 0x67DBC34A, 0xC8119B5D,
+0xABBB4B27, 0x0AF5CA10, 0xFB543F78, 0xA36E6178, 0xA4E4884C, 0x95D933E0, 0x9ABEEA93, 0xDD1A94C3,
+0xF941FBB7, 0x4B682FDA, 0x7B487E7C, 0xDE98091E, 0xABE244C3, 0xD5450193, 0xE685B6BF, 0x7A51EB4A,
+0x013F08CF, 0xCC4EB6A1, 0x0D854F5F, 0xDD6DE019, 0x77CE753D, 0x64474177, 0x745AAA4F, 0xE6E983C6,
+0x004853E1, 0xC0DFF722, 0x73DB8BA5, 0xBCBF9698, 0x3E5FA793, 0xA5543D0F, 0x42D86F8E, 0xA180FA19,
+0x6036C90D, 0x5682C626, 0x963EB303, 0x1ADEC236, 0x401D54E7, 0xF028FE6A, 0xB44F808A, 0x96C92E39,
+0x4D167D1E, 0xBEE20644, 0x345C0061, 0xD411B4D2, 0xDFDBC9CE, 0x11B8940A, 0x09691478, 0x45C350CC,
+0xDAEB8F81, 0x1E50A348, 0x2D4C0977, 0xB8880EDE, 0xFB7EB8C3, 0x2F496D76, 0xE9BB1C5E, 0x400CA95D,
+0xF74ED820, 0x3B45F850, 0xE6E35B0E, 0x72B36ED6, 0x85987466, 0x8B13E2AB, 0xBAF1DBD3, 0x9ECEA01A,
+0x78411F79, 0xC6C13D20, 0xB54FD5BC, 0xE634BABC, 0x2135EB70, 0x3B0477F4, 0xDE803AD2, 0x3468DD90,
+0xCC46241D, 0x2EF6E708, 0x1289A6D1, 0x2A266044, 0x2ECEB929, 0x72EB258B, 0xDE1B45C3, 0x7E56CDFF,
+0xE38B6F96, 0x4CFE3AF3, 0x73F2B6BD, 0x0D3F63EC, 0x0D3097DD, 0x6B06C821, 0x86F88B7E, 0x50049E07,
+0xFC6A28DB, 0x4E24234E, 0xDBF2F8C0, 0xB2DAB42E, 0xAF854005, 0x9B3084DC, 0x0541F617, 0x628D5891,
+0x0FD0E96F, 0xA3A8AB6F, 0xCA0B27E2, 0x40F9151E, 0x7140A146, 0x7A0AEDFC, 0xF6397BDA, 0x060ECEBA,
+0x6DCA2568, 0x132B2DE7, 0x5F72D0E0, 0x3CFC6BD2, 0x64C79C6B, 0x74BE7784, 0x28D324A5, 0xEDBF7026,
+0x1120BE4D, 0x5D7B8694, 0x9EDE4745, 0xE9EDB711, 0x6DEE49DA, 0xFE17EF7C, 0xE194E550, 0x85782ADD,
+0xBFB45D39, 0xEA1F2B41, 0x33E90542, 0x44800689, 0x2CA733B1, 0x3B765410, 0x42522796, 0xE062E244,
+0x79BC3D76, 0x066F0449, 0xBDADE090, 0xB28C1278, 0x224CE538, 0xEC9A7259, 0xCFE1BCCD, 0x6833B640,
+0x9BED7C68, 0xB4B7FF94, 0x278A2257, 0xB34B843C, 0x8A1A3E00, 0x5A1AF597, 0xB89A2820, 0xD5129560,
+0xBDE8D68E, 0x7E01C7F9, 0x0D0F7BAF, 0xA2B13FA7, 0x5C714296, 0x0C5DA709, 0x3ADCF315, 0x9BD7DF1D,
+0xD27A229E, 0x8227449F, 0xBD34830C, 0x0D1986CD, 0xD74B84FE, 0x77C51793, 0x5E8872E8, 0xC51767C0,
+0x655481DD, 0x2DA5418C, 0x1FB0F298, 0xB008C480, 0x1CC176A9, 0x53908531, 0xE5A8B8D3, 0x176B1DCB,
+0xC326EE6D, 0x5C178705, 0xF298514A, 0x22B66E67, 0x85170DBE, 0x94882D58, 0x70965521, 0x49289EC6,
+0xE300D5D5, 0x79A2817C, 0x2ECAE6B2, 0x8BDAAD9E, 0x7E4F6A42, 0x50D2F08C, 0x0C5D81B2, 0xF1BDC968,
+0x9F23A866, 0x482738C9, 0x456A985D, 0x963ADFC2, 0x31F520DF, 0xA226B8AF, 0x3D2A72F2, 0x401C33D4,
+0x88C4D1C8, 0x9B697776, 0x1F895CA0, 0x71FD1945, 0x0583D582, 0x3E9FE6E7, 0xF40FEB6D, 0x6BFF615E,
+0xD0868A7F, 0x8E9EB84E, 0x205E182B, 0xEBC981E5, 0xD19F6C6F, 0x75F0454C, 0x52B88744, 0x52CCCCC5,
+0x398933E3, 0x22490DDF, 0xFA3EE9C6, 0x14B59263, 0x00D41CC6, 0xEF57E76B, 0x2098193F, 0xADE164C4,
+0xFB56C554, 0xA80607FD, 0x8E1ABCE0, 0x05725789, 0x9673B1C6, 0xBB267634, 0xA3DBC27A, 0x30D12A2E,
+0x0EADEE90, 0xD1AA581B, 0x28CA41BE, 0xA18443A0, 0x7125825D, 0x0F58704E, 0xC2563514, 0xA4CF91DF,
+0xD0868978, 0x9B208E60, 0x8EE34390, 0x7AE3786F, 0xAC35B088, 0x70651D71, 0x03D3D45C, 0x6E5D6A8D,
+0x7B8B71B2, 0xAA715C3C, 0xE8A39355, 0x1601B08E, 0xC8CA2F2C, 0x2C8F4616, 0x29E0A4BC, 0x2444641C,
+0xCE29FC12, 0x5C243236, 0xD8322C36, 0x56024EDF, 0x99EE388E, 0x1E54C35D, 0xE2A1768D, 0x737DBB87,
+0xA356DD32, 0x6513EDA7, 0xBD51B27C, 0x5334F98C, 0xED41CD65, 0xF7EF10BA, 0x1CAB2E84, 0x234B9B49,
+0x12173325, 0xDF50720A, 0x3C7CFA65, 0x29737AF6, 0x3AC48B10, 0xE37293BF, 0xF340C6D4, 0x752ED16A,
+0x8DCD2E3C, 0xE12E57B4, 0xA260DFCF, 0x647DC052, 0xB41D13CF, 0x72E38336, 0x5C478386, 0xA72D8862,
+0x095F69E3, 0x82A811F6, 0x9BC30BB3, 0x60F7A344, 0x61C846BC, 0x8A0ECEE1, 0x6CAB274A, 0xBBE47BE3,
+0xC4E3AAC9, 0x79667BDD, 0xC572F756, 0x028DD628, 0x2B4FF40F, 0x930F8360, 0x0A364020, 0xB84C795E,
+0x1EFAF3EE, 0x439611FC, 0xF63B8CFA, 0x67787326, 0x4B99B5D5, 0x2A222929, 0x9832C82B, 0x37F87E68,
+0x9E30B570, 0x315E3CE2, 0x463D4FE3, 0x7C09246B, 0xBE9134FE, 0x3055CF78, 0xAF142159, 0xD70CA14F,
+0x94A81FF4, 0xC712D53F, 0x7B31B2E8, 0xA2D3C77D, 0xA14ECDA7, 0xB2780E95, 0xC46D042C, 0x21E96713,
+0x876E2FCB, 0x5909AAAE, 0xE60C9F97, 0xA4D8CE34, 0x7515D555, 0x5D30DD56, 0xBF15F237, 0xBDC07828,
+0x07D427DE, 0x610FEDC2, 0x5676B27C, 0x69E21CD2, 0x0484521A, 0x67122242, 0x5A191F85, 0xD9EBD02C,
+0xBB54930D, 0x37FAE90C, 0x4BBDAC0A, 0xD7CB6225, 0x1D2196D4, 0x7B84EFD8, 0x002B8751, 0x9523ED79,
+0x5B8E6858, 0x2C7C05B0, 0xA99AA3CD, 0x2DC86D2B, 0x2AFC36B8, 0xC32B7601, 0x570D0A2C, 0xAD5A6D27,
+0x767D224D, 0x063C22E5, 0xB7DCC2FA, 0x422FFA4C, 0x3DB7E1AC, 0xDC49CA1F, 0x34C63A39, 0x2A7B8DE0,
+0xEC08C39E, 0x3F4328FB, 0xB4E7BF5F, 0x8BB5F8A6, 0xCAF0D723, 0x107F185D, 0xA592C042, 0x192F3FC1,
+0xE6BCD131, 0x5B0ECE12, 0x15ED9B65, 0xE01644C3, 0x75C912A6, 0x9EEDF6B2, 0xEAC22A4E, 0x3FCB9C1E,
+0xCC21BF36, 0x605C13A6, 0xEBF2B736, 0xBE67CD08, 0x4DC27B01, 0x9432DDB9, 0xF8DB75F4, 0x1ABB85F8,
+0x021673FB, 0x1400EC5A, 0xA9E79A09, 0xDD512D36, 0x838D2B9B, 0x1AA16517, 0x73AA0046, 0x7A4BAC6F,
+0x731AE4BF, 0x529EA682, 0x9A913569, 0x6C3D9DB4, 0xD005EE4E, 0x6AA0BE82, 0x611DD079, 0x1E887120,
+0x2C6DCF70, 0x13D486E6, 0x6C2A3201, 0xD4A8CB51, 0x3495C94A, 0x66B28A7E, 0x5D00F8C1, 0x99633D84,
+0x0D085857, 0x71778951, 0x34962BEA, 0x7ACF555C, 0x74E7BA7F, 0x081311F7, 0x0437BC95, 0x35E871B2,
+0xCC1AFA03, 0x1BAFCBCC, 0xB1DF7476, 0x43F4634E, 0x18E814A7, 0x5E8E6D91, 0x9AD25BF6, 0xA7AC884A,
+0x3A135F98, 0x852FB276, 0x6B66B785, 0x244F76FA, 0x7FF48E09, 0xFB137E74, 0x0AF5F4E5, 0x8CA15748,
+0x8163223E, 0x2DD07A99, 0xBA7B0A8E, 0x31966985, 0xEC9E810C, 0x933B6C1E, 0x724CA905, 0x5131B1A4,
+0x0691D0D3, 0x200AFC47, 0x15F4D0B5, 0x471F29AC, 0x176AF7B5, 0x515F72E9, 0x32CF250C, 0x4FE0552D,
+0x1B1F2E41, 0xFB2C9D11, 0x8E91D7D3, 0x1FE4B07C, 0x7B7F860A, 0x091A00F0, 0xC8A84CD1, 0xEAF15AC3,
+0xE639AF58, 0x97CA172C, 0x93DA6B32, 0x08FDDD7E, 0xC83D20AF, 0xB9B8F855, 0xC95C5BF3, 0x2221DD52,
+0xF0436CE1, 0xC4D4E3EB, 0x3A61426D, 0x2CB66A31, 0x556D2BE8, 0x5526F4BA, 0xF531998A, 0xC7898343,
+0x184068E3, 0x7E882EFD, 0xBEAB2254, 0x8D64C525, 0x15961EA7, 0x5D9941A2, 0xE9763D08, 0x9C3F62DE,
+0xF4B50E6C, 0x4A87F5CC, 0x7993AD33, 0xB96CCB7D, 0x85635CAD, 0x2B3E0337, 0x1ADCE09B, 0x461DD7E4,
+0x8FC87741, 0x182FC60E, 0x377D4725, 0x1A3FC65F, 0xDF59BC73, 0x3E583E5E, 0x4EE0B55A, 0x0595B24C,
+0x31AFC135, 0x216AA554, 0x11F2E15E, 0x3C7C5574, 0xDCB60F9A, 0xC8916484, 0xF00A610C, 0xF9FC4B6A,
+0x9DFD6860, 0xC03A0FEB, 0x273A5E04, 0x7CF55153, 0xAFA511A8, 0x22756FE5, 0x079147E3, 0x31471FB2,
+0xACCA1BEE, 0x65ADE059, 0x89220E05, 0x20BEC86A, 0x4FCDDC3E, 0xAE2CE61C, 0xCA8E21C2, 0x51BFE0F1,
+0xB742148A, 0x32247574, 0xBD2EA3F1, 0x15146F4D, 0x3031920E, 0xAD883AED, 0x5C8E3161, 0x2872994B,
+0xED60F088, 0xC075D1E5, 0x37E34730, 0x5493E87D, 0xDE0A500A, 0x3CE39350, 0x7ADE65B4, 0x82F16757,
+0x8474011A, 0x00F12128, 0xE7285382, 0x65B64172, 0x5B054116, 0xD418945E, 0xDE022F20, 0x3E897887,
+0xBC6C2776, 0x7CE0B079, 0xA4A9A6F7, 0x615B3E95, 0x4512B52A, 0x7FE9D5F4, 0xE151F317, 0x347FA0E1,
+0x5EC5CDA0, 0x0DDB22CA, 0x4EC7035B, 0xDDE57E76, 0x5229EA91, 0x6FE30834, 0x2FFD0728, 0xFB5E8AE6,
+0x4B6F301A, 0x607CA18E, 0x7FF08914, 0xC3564DC6, 0xB00A802E, 0x3560CFF1, 0xC162D542, 0xCFA1DD5F,
+0x38D67652, 0xE696D55A, 0xB2E8B688, 0x01946F0E, 0x554ACC9A, 0xF01B9724, 0xB1E88F50, 0x25CD613C,
+0x9034C162, 0x3925C87E, 0xC0713271, 0xB94F6E48, 0x42924FDC, 0x8333696F, 0x52F326C2, 0xEBB99A87,
+0x52493B6F, 0x2CF72E98, 0x2F50F709, 0x69370B7C, 0xCB2F531E, 0xABD07192, 0x446D0176, 0x18391EE9,
+0x261BF7C5, 0xE8F1F283, 0x9F397685, 0x7B5F5944, 0x40B3DD36, 0xCB71F496, 0x7DD24E1C, 0x4FCF4A66,
+0xED1EFA83, 0x91BC3756, 0x61C4BD3A, 0xD21200DE, 0xDDFD830B, 0x61074472, 0xE9F1715D, 0xCCF50098,
+0xC3F2DF0E, 0xE611FDF9, 0x6F66B09E, 0xB50BFDC0, 0xDA80A0C7, 0x19EE5E4C, 0x662FB3CC, 0x7C64453B,
+0x4F1BA73F, 0x5A77840A, 0xDDFE53A4, 0x791B97A1, 0x47C0CE9A, 0x012AE8A8, 0x822598B6, 0xA06A505B,
+0x48A1E715, 0x67056672, 0xD8103BB2, 0x9469193F, 0x4996F026, 0x24C0E302, 0x1CA1BEB8, 0x154BBB72,
+0x792FE696, 0xF84868C2, 0xACCFF1CE, 0x30260DB1, 0x23FB48B0, 0xEDDFD9CE, 0x38B9BDA4, 0x5BCDD427,
+0x06E93C6E, 0x563F72DE, 0xEEB663B0, 0xBE33D646, 0x5817C079, 0xD106479B, 0x56CC41EC, 0x89C7C92C,
+0xCC051B78, 0xEE8B694F, 0x913F76AD, 0x9EC8A72C, 0xD41B5D18, 0x02EB6E18, 0x22E1D610, 0x18E6630C,
+0xA9EE3DD6, 0x71662DC5, 0xAFA04188, 0x212444E0, 0x6E1B7177, 0x4640F5B5, 0x8A150FA1, 0x95E87A7E,
+0x72966EB4, 0xF777D85B, 0x6AD4FFF6, 0xA538BD85, 0x63D746C0, 0xF5B106A9, 0x4296528D, 0x1E1398E8,
+0x87C1240C, 0xA5BB6760, 0x27970653, 0x607549B2, 0xA759CFE1, 0xF7661793, 0x96D3F7AB, 0x632DF3A3,
+0x84E5EAA2, 0x0C33769D, 0x441395B6, 0xD16B9785, 0x2793B553, 0xF2F5B5A6, 0x1D2D54F4, 0x78472E8A,
+0x8A95C1D9, 0x3D3FEC01, 0xE08DC443, 0xA37B7760, 0xB15DFB2F, 0x0FFEF5DE, 0xE1FAE4AA, 0xD3A842B7,
+0x0EB73490, 0x6DD8F987, 0xFAC78BE3, 0x056D6435, 0xC45FB37E, 0x211B5BA3, 0x7564E60F, 0x05B0604F,
+0x4D76B62D, 0xA007C5C9, 0xABDF3515, 0x051494B3, 0x6C476D88, 0xAD4DFD40, 0x4B861DB3, 0xCC7AD0CD,
+0xD563E004, 0x7AF4E0E4, 0x0F3BE4B0, 0x7ACA39DA, 0x1C7FB0BF, 0xCAB3D993, 0xA2782472, 0x535FA506,
+0x52D0FD47, 0xFCD878F1, 0x42F554E0, 0xF12B3883, 0x02197770, 0xE9862A39, 0x2448E69F, 0xC0D4F6B7,
+0xB01B2597, 0xE4392D07, 0x4FFD3B36, 0xBBD1D538, 0x9F113131, 0x72F2DD7F, 0xA4D25B8F, 0x7B472BB6,
+0xB99E1BAF, 0x3212422B, 0x31CA7F87, 0x7B8B1483, 0x51A37CE9, 0xC877A3B6, 0xF87E675D, 0x95B767B8,
+0x94739ECF, 0x8F10BC9F, 0x66BF9486, 0x9DD2D502, 0xCB125598, 0x4E473BC4, 0xCCBD8742, 0x9ABAF3D9,
+0x8323B764, 0xA4DA6832, 0xCA49F3AD, 0x3EDECE50, 0x0A133FF7, 0xAED1F1AE, 0x7E377CC7, 0x16FF83EB,
+0xB932BFC6, 0x72C9A96D, 0x42E2697E, 0xF167B529, 0x53D12C1F, 0x9FEAB717, 0xCB6E40CC, 0x988CEF0B,
+0x9427621E, 0xF846C205, 0x7D53BFBA, 0x8533B802, 0xF1A9A03C, 0xD5C2CDE4, 0xC1E8D5DC, 0x11E233CF,
+0xDF8FCD78, 0x2B0CFF3A, 0x36C0D216, 0x951FB24E, 0x2E1C917F, 0x6DD532CA, 0x681E34A9, 0x73EE1874,
+0x3E9A7A28, 0xE0A89BFC, 0xF25949F7, 0x7FCDA693, 0x260EE842, 0x8FC5064A, 0xACCDD5BA, 0xA18D23B1,
+0x42C8A9BE, 0xE544E727, 0x55CE36C4, 0xA98AE180, 0x1B39FC3E, 0x6A9EC314, 0x917FBBF2, 0xE3A911BF,
+0x1BADCA6F, 0xE9CAAC05, 0xDF5BA9AB, 0x086281E7, 0x4258C96B, 0x7767C965, 0xB5B64790, 0x1A6CD944,
+0xF381CD4A, 0xF0F2CDF7, 0x6E265259, 0x467CFED8, 0xBD557A42, 0x63FA6F24, 0x65BA8A40, 0x57ABF700,
+0x0C0B0386, 0xDD1363A5, 0xF85FFB7A, 0x95E4718C, 0x8223AD65, 0xE26F39A4, 0x6AC71446, 0xA78C70B6,
+0xDF892513, 0xD452624E, 0x2324BBB5, 0x217590E8, 0x5AE3534E, 0xA02795E1, 0x1112F173, 0xDA71C532,
+0x1F6A97DC, 0xF23F658E, 0xD2FFF81C, 0x3ADD6F0B, 0x668A77FE, 0x8527EAC3, 0x11FD08EB, 0x09C2B61E,
+0x341BCB5F, 0xB6A16FC1, 0x7472C8C6, 0xAA0F3DC1, 0x5C84807A, 0xFBD929C3, 0x0749FF45, 0x07F67377,
+0xF27BB7A0, 0x9CB862C3, 0x4510CDF3, 0xB75C6698, 0x91FBD199, 0x65EAFA50, 0xE0CEC389, 0xCEF5C82C,
+0x000916D7, 0x64D03B19, 0x9DA4E91B, 0xD8558996, 0x334ABE33, 0xA75C0428, 0xA7B39089, 0xCF04D468,
+0xE95FC375, 0xEB9C2C1E, 0x53F1C86F, 0xE85AB32C, 0xE3845EA7, 0xB19A49B2, 0x6EA04453, 0x784119A7,
+0xBB60261F, 0x9382C629, 0xF3220F81, 0x89795D11, 0x1E009DD6, 0x79713D6F, 0xA4AA4866, 0x7DEF3677,
+0x8E5A9A92, 0x31C33565, 0x97749904, 0x64A3D55D, 0xAD760DEC, 0x594441A9, 0xFBD0B8DD, 0x020FDA3D,
+0xF8486FB2, 0x6D0D5EFD, 0xD0D82993, 0x420F5611, 0xED942967, 0x112FDCD6, 0x2AC4F5D5, 0x6C841575,
+0x53A9F409, 0x7E24DEF4, 0xB85D2F7E, 0xE0DF8406, 0x5B1E7723, 0xDBC2B870, 0x8CBF59AF, 0x83DF52A2,
+0x35CBC868, 0x6A54E05F, 0x63753B7F, 0xF4DEBEBE, 0x3A1029B5, 0xD42CF91E, 0xB51455EC, 0x9D4B7E8C,
+0xE4961DCC, 0x844E8158, 0xD0CCB269, 0x9C1C5F89, 0xCCB1F2CE, 0xB06E8C48, 0xF16CE625, 0xE38E5FE3,
+0xE27D57A7, 0x1AFFD03E, 0x3D30DE91, 0xD9BD4BD0, 0xDC3E5672, 0x927E7C39, 0x561BC151, 0x87663957,
+0xD904679A, 0x94E1A101, 0x52029C47, 0x286017ED, 0xCB8770B4, 0xDED221D9, 0x5E080A5A, 0x86653823,
+0x0CED39D2, 0xA6EE1650, 0x7DE558AC, 0xDFE774D0, 0x0E71B180, 0x82D383F0, 0x6CEBE831, 0x3C148AD4,
+0x7B65469D, 0x77E42273, 0x0F9C3AAB, 0x27FD6A96, 0xAAFDD0E1, 0x5BFF07BA, 0x44766DEA, 0xAAF19DAC,
+0x4B1384F7, 0x7CCA8C01, 0x2E9CFD70, 0xBC6A377D, 0xF3D908C3, 0xC1C3A0C6, 0xA0C2D65E, 0x0EA9C732,
+0x81C789E9, 0x36F541AB, 0x5DA078A9, 0x53AE74B2, 0x8E336B4A, 0xFDFC3584, 0xB7EDBDE7, 0xF74B18C8,
+0x76751ADC, 0x53AE36D2, 0x6BF56608, 0xC5417A42, 0x3ABF387E, 0xD0B19FB4, 0xDF4EC15F, 0xA55C0FF5,
+0xD92BC190, 0x1BF5B609, 0xED3D68CF, 0x62FB4B22, 0x75A54A90, 0x0C7F49CD, 0x998B616C, 0x4B113D6D,
+0xA1413C78, 0x49DEB3C9, 0xE813B35E, 0x4322EC86, 0x35F6E71F, 0x2CDF8662, 0xC9FC03F1, 0x30D96F8E,
+0x2E65DC20, 0x6A11F98F, 0x15432F5F, 0xBCD0A11E, 0x87BEED9D, 0x303A40F7, 0xC0149FC8, 0x73EEDA9F,
+0x781D6A5C, 0xEEFFF39C, 0x1BAC928B, 0x6741F472, 0xE567AA00, 0x1DDEF275, 0x6C8CF7D7, 0xE1E29485,
+0xF6ECCAB4, 0x9C471DA8, 0xD97DBBA5, 0x7554F015, 0x412AB94E, 0x7461743F, 0xD763D649, 0x69DE97AF,
+0x5083FEE3, 0x68A00F64, 0x1EDAB121, 0x61C6D1F9, 0x929CEBED, 0xA0EF54A1, 0x7365257D, 0xE99C2A39,
+0x9944C80F, 0x658A42BB, 0x4E79806B, 0xCF14EFB4, 0xE945E372, 0xDFCAF792, 0x3B7A1DB4, 0x86CC8177,
+0x914EF189, 0xA0264359, 0xDFCDEFF5, 0xFEB34806, 0x3BAB11E0, 0xDE76B5BE, 0xCEFFF11F, 0xCE128ABA,
+0x2A815CF8, 0x1ED82C44, 0xC4D72277, 0xFDCEBE45, 0x7E27F1F1, 0x3C2DBBAE, 0xC0976AB0, 0x33C06B4D,
+0xAB341D17, 0xD9583B49, 0x7F8A4123, 0x5437482E, 0xC63CE609, 0x549D51FE, 0xA5F1A905, 0xDC4879B9,
+0xC9F9C3C1, 0x15F15673, 0x5C9B8741, 0xA963FBEF, 0xC520A368, 0x6F08BCD2, 0x435D2494, 0x5CD67F1C,
+0xB3D43D0B, 0x03370069, 0xC213D680, 0xFDE4F0EB, 0xF76EA34F, 0x19314E14, 0x147C249D, 0xA68F39CB,
+0x98B7F090, 0x918718CA, 0xEB60D1D7, 0x266A1260, 0xE79C7F1C, 0xD81E0A7F, 0x22E72BFA, 0xF65E9C98,
+0xC9D5B928, 0x6630A63C, 0xBFD5D58E, 0x658254D4, 0x44DB5CD6, 0x365A1DC3, 0x352F691B, 0xCDA6EB17,
+0xA80A15BB, 0x9DD4EB18, 0x7B930F90, 0xDB6FF0E4, 0x9810B16F, 0x51CEECAD, 0x1DC9923F, 0xC20DA890,
+0x6C2F6512, 0x990E366A, 0x9184F936, 0x573CC0ED, 0x9687BE6C, 0x7529228D, 0x08C509CA, 0x0DB28A2A,
+0xD7E9273A, 0x5FBB88D1, 0x51D45946, 0x7DEFF919, 0x8FDA6EC4, 0x5672A04A, 0xF186B79B, 0xE18EF751,
+0xAE545F4D, 0xB121988E, 0x4262A69F, 0xB0959667, 0x343DE89A, 0x42E581A4, 0x81D1E4B3, 0x7059F3C3,
+0x67882730, 0xB777C8C3, 0x02830ABE, 0xFFD467E2, 0xC31BF1A1, 0xBA54B99B, 0x2899B3BF, 0x003298FE,
+0x51873FA0, 0x855E0231, 0x53BDFD81, 0x5EB44BAD, 0x99CD5DC9, 0x4D5EE86D, 0x656419F0, 0xEE26D5A8,
+0x83500312, 0x7380BDCF, 0x648E0E22, 0xEFB1F0C4, 0x38B24AB9, 0x16B0CBFF, 0x492EC0FA, 0x8CF750F8,
+0x63DC0F1F, 0xDE9A8DC3, 0x0FBDBC7D, 0x26C71D49, 0xAD8EB177, 0xF4FD3C20, 0xF1F06FA8, 0x0FDBCAEE,
+0x7550CCF0, 0xCAB9DBD0, 0x093142B5, 0x3DF08128, 0x5BE5D4A6, 0x8DC01B7E, 0x831C16D6, 0x6FFD1ED9,
+0x5ABB8504, 0x569706A9, 0xC8EEC05B, 0x88DFE3EF, 0xE84E472D, 0x7B9707B5, 0xEDDE50AB, 0x851CD0B2,
+0xF581B1AC, 0x9D2FCE84, 0xCFC54ECA, 0xBC9BFBD4, 0x06105902, 0x9C1BB23B, 0xE09CFF26, 0xDBA334EA,
+0xF3E20097, 0xDC1C0DDB, 0x4168BC67, 0x53B9EF69, 0xC956653B, 0x7840DAB7, 0x895D1A0A, 0x95D543E1,
+0x4DE4FEF2, 0x4FC8B5CB, 0xA929A3B5, 0x81770B74, 0xCEEA225F, 0x6EF5F1D5, 0xCA613E58, 0x0A9FCDAD,
+0xCC68F2D5, 0x13004021, 0x9C6C8F7D, 0x2A95E002, 0x30814FD1, 0xABF5F3C1, 0xE62AA7F2, 0x1E209D58,
+0xAB5E592E, 0x3F902EF7, 0x0238C5C0, 0x19726473, 0xEA0E9730, 0xD61BC3E9, 0x0E981493, 0xF707A59F,
+0x4F9965BA, 0x87585C8F, 0xA4E98C50, 0x82948700, 0xBF50EFA3, 0x12DD2B74, 0x90BFCC00, 0xC09EFEFC,
+0x6CE08665, 0x1F4E3F5D, 0xDF8CCF2B, 0x02618640, 0xA5B1149A, 0x716C0322, 0x021B58AC, 0xB3886DB6,
+0xD8EDD8EE, 0x6F7CFFA9, 0xFCE14E23, 0x5A1EB159, 0x75344D76, 0xCE6B28B5, 0xF0241B2B, 0x9E1A7D8A,
+0x02312BB6, 0xE5112AEB, 0x4F8DE98F, 0x64BAF726, 0x69FB95FB, 0x62E249A8, 0xCCF222F9, 0x97E6D597,
+0xE83EE39E, 0xFE5974AA, 0x0172E893, 0x1F2BC887, 0x76BE4D15, 0x7DE57F91, 0x4BF73DD8, 0xDBBAC033,
+0x69B2FB64, 0x67C25C68, 0x6F0F3415, 0x76B3D572, 0xE2D87758, 0x23672CF4, 0x7227B951, 0xD966FA29,
+0x46A2623D, 0x2D3F5621, 0x0A1E35E7, 0xCEF58C2E, 0xE83B13AC, 0xBFC5B420, 0xB3800C79, 0x6EB1FED9,
+0x2C066CDD, 0xD28EC628, 0x4E18BBDD, 0x9EF10D9F, 0x3324EF4C, 0x89BADC38, 0xEDC0230B, 0x52623944,
+0xCC040D30, 0x0158841F, 0x05238D11, 0x7A95938A, 0xDADC38A1, 0xD8924A3C, 0xDAB44F4E, 0x852472B6,
+0x22BE93E3, 0xBC67B6AD, 0xB07CDF31, 0xCDD6EA29, 0x5939DE4C, 0x556C941C, 0xC0E72A5F, 0x1EA2AAF5,
+0x9F5D7696, 0x82502836, 0x9B4D852F, 0xF2403F6F, 0x343660A2, 0x827674D9, 0xB668B7CE, 0xBA0942A0,
+0x5627448D, 0x33FE5971, 0xDB89FA62, 0x6158DA0C, 0x13B039CB, 0xBA0DE732, 0x5B6FE4F8, 0x9637EC96,
+0x82169F54, 0x8F5074BE, 0x32136A7F, 0x75C38495, 0x98D9E55C, 0x59CB798F, 0xA987F02A, 0x0B69727E,
+0x962C8A3E, 0x0C37D87B, 0xF58C5394, 0x561E67D9, 0x4CBE1E1D, 0x7362C119, 0x81933569, 0x9923EB28,
+0x92FFD8A5, 0xA4424E8F, 0x54732A7A, 0x0EB4617A, 0x32F23C48, 0x79548440, 0xF37D9DEB, 0xE8C122A2,
+0xE366E606, 0x53D881ED, 0x27438626, 0x39624E45, 0x5D42DDE8, 0x289F75DC, 0x6CEEDD81, 0x9F177997,
+0x4A1B0A9D, 0x0C849FCE, 0x38D34D80, 0xAE3ED483, 0x829980D1, 0xD7ABD90A, 0x1F319A9E, 0x14521C37,
+0x207FBE99, 0x15B55C72, 0x29F2C559, 0xAF03E046, 0x1A9C7DE4, 0xB08C2922, 0xCDA2349B, 0x4D0AAD3A,
+0x6BABA6EE, 0x954AD767, 0x938D11B8, 0x08088EB0, 0xF9CE3EEB, 0xDD1B3EAD, 0xF6F1483C, 0x2C45E43B,
+0x33B20658, 0xF851591F, 0xDEC5CC4F, 0x3F272F11, 0xDA0DD8B9, 0x7B8F45DA, 0xD3B113FD, 0xEFF7A817,
+0xD0A791F0, 0x53690DE6, 0x5965F0F4, 0x8D58D87E, 0x5E484399, 0x1824B436, 0xAE32A0F6, 0xFD6E7817,
+0xB418A6A3, 0x1412C26E, 0xC5E4F426, 0xF112D5C3, 0xD648E37D, 0xFE2A96DE, 0xA6E5C1CF, 0x1D650DDE,
+0xA7C762B6, 0x33A3553F, 0x0A244FAF, 0x4708310A, 0xC5C9C70C, 0xE69C681F, 0xA8EDBF87, 0xEE53F739,
+0x7FC6FAAE, 0x87CEA8F0, 0x09DA0487, 0x8EC150F7, 0x0D6B523A, 0x4E2D47CF, 0xAB71C5EA, 0x5DAC6EDE,
+0xE876ECA8, 0x5009DFBC, 0x2125599C, 0x062377E2, 0x767F73A7, 0xCABC448F, 0x5AC02D27, 0x186149B8,
+0x39EF721C, 0x56972BF1, 0xC498D702, 0x5748920F, 0xC40ED52B, 0x9BCCF471, 0x2781103A, 0x5F0FC675,
+0x553FD5A5, 0xA3DCF751, 0x1091F117, 0xB99540CE, 0x986FB98A, 0x63355C7C, 0x124DB2A4, 0x17ADD31C,
+0xEA632C39, 0xCF11DCCB, 0xFE3795B5, 0xC03D3329, 0xB109AC63, 0x1A4B19F9, 0xA456DB89, 0xA51BA1D4,
+0x43E42FBC, 0x9DB507F2, 0x62426CC0, 0x143C5F9C, 0x6EBFF554, 0x968CE934, 0x351863CF, 0x3A16D3E5,
+0x62F1877D, 0x4A3FE366, 0x2DC08D68, 0xE8001F0B, 0x09709DAA, 0x95471600, 0x626F74FC, 0x250BBE69,
+0xFAF71A4F, 0x99BC95BE, 0x1529D4F8, 0x20FFF20D, 0xDB84EC21, 0x968D7AD0, 0x8B51A950, 0xEDDAB4B3,
+0xF0F002B8, 0x7ECF17EC, 0x8786D255, 0x68F37B9C, 0x9EED0498, 0xAF45B94B, 0xDBCD7A2C, 0x873205AC,
+0x3B7AFFCC, 0xF834BBFB, 0x972E360B, 0x22B00331, 0xA4CE9548, 0x3183395F, 0x7348A736, 0xECD04560,
+0xEAE4F718, 0x61F01945, 0xD48BB0F6, 0xDD88B9CB, 0x7566D33C, 0x23E3FC3B, 0xF17BC349, 0x8E138333,
+0xBA8AF4E1, 0x7A1F3811, 0x37148468, 0x76279B39, 0x26836B94, 0x73023392, 0xB815899A, 0xBB8034FC,
+0x1F6E592A, 0x02BCDDF3, 0xB3FCA5FD, 0x0FE3C4AE, 0x8C58B4D7, 0x3F756247, 0x36908464, 0xCD71AE9D,
+0x9E0DBE56, 0xD4BF9B2E, 0x9DE97ABA, 0x0C722D45, 0x2A2A7D09, 0xB03720CE, 0xFE4648CB, 0xFEA63327,
+0x6E240646, 0xA1D7B396, 0xFAD30409, 0xD706CA05, 0xC4A4ACAA, 0x5A8A75DE, 0x0E526483, 0x7BE53E7D,
+0x84147FD2, 0xEF8B4D5E, 0xE088B089, 0xAEF7F1C5, 0x345E3BDF, 0x32D09960, 0xF8F17AFB, 0x08BA9749,
+0x1E085573, 0x5DAD96AD, 0xA3BA7CDA, 0xF9AB5CFF, 0xEBEAF5CB, 0x3B429538, 0xFC79D1F2, 0xA2768762,
+0xAF4BA7AC, 0x0D51B875, 0x6183C723, 0xCCD0ACF3, 0x15A1AF6B, 0xA9027DD9, 0xAB42C915, 0x5681E406,
+0xB1F7A34B, 0x1AD39023, 0x44477E95, 0xA8E876E8, 0x30F5D414, 0x460E7EF9, 0x971DFDAE, 0x1A65967B,
+0xE521BC89, 0xCB63893A, 0xFBA6CDA9, 0x03EC43AB, 0x58078C24, 0x8326D84B, 0xF232F49E, 0x03E7E967,
+0x359D6DC4, 0x3B76A9BF, 0xFA82D68A, 0xC72CAB76, 0xCE557D73, 0xA03E7256, 0xE8051DA4, 0x771B0F9C,
+0xB947E754, 0xF0670F9E, 0xA01D8D79, 0x5EA56E56, 0x54B39E3D, 0xFD0DE5B1, 0xACF6698F, 0x5015D538,
+0xE722FE64, 0xD43EDAFE, 0x357B1048, 0xD16266F6, 0xF6BC3520, 0xB705E482, 0x150B398D, 0x1640306A,
+0x16BF7671, 0x62D60DFB, 0x6A896F1E, 0xACC7E3D5, 0x5F0D1DB0, 0xF102C31A, 0x667DD887, 0x0881672D,
+0xE0149963, 0x19957276, 0xD07BF4D9, 0x929DD9D7, 0x001EAB97, 0xF1FD27F7, 0x5D13AD5E, 0xE7D17862,
+0xC3F6871B, 0x89334699, 0x8BA06CD3, 0x492AD61E, 0x84F32518, 0xFC93E678, 0x15E00211, 0xDE28FC10,
+0x2E339ECE, 0x5BBEFD8A, 0xF993F3D9, 0x9003BCA4, 0x06A8A250, 0x7670232B, 0x419E36D1, 0xA91F49CE,
+0xEC5FACEC, 0x45912BB5, 0x4AFFC101, 0x533E66D0, 0xAA862A72, 0x5B0F234E, 0xAEBC024B, 0x746859AB,
+0xEE264787, 0xCFE8A776, 0x1228310A, 0x4CE3EB3F, 0x68758255, 0x3634ADE4, 0xECF86DBE, 0x70373BB3,
+0x235DDB25, 0xDD28A6D4, 0x9CBDF5A4, 0x854C5470, 0x597D0B7C, 0x1E530F01, 0x53EC18F1, 0x5F5FC529,
+0x71AB0760, 0x83AE2B96, 0x0C9F10D4, 0x7095DD9C, 0xA6177564, 0x0F4A5371, 0x82826620, 0x0C1BF2D6,
+0x5015EC65, 0x2369E534, 0xA10E6CF6, 0xCE681DAE, 0xDC180DB2, 0x896F19B7, 0xF12BF03A, 0x8F0F0923,
+0x6318C47C, 0x5AAF7F18, 0x859FFB40, 0x2E17DAA2, 0x477CBC25, 0x6ACEE8D4, 0x3FDB2A4D, 0x0D2891E1,
+0x319217CC, 0x4E9A8013, 0x6DDF16FA, 0xE0571841, 0x2BEFD4F5, 0x066DC36A, 0x80173118, 0x5FC40E47,
+0x24FB8EFA, 0x19F1718E, 0x6F774571, 0x2B38C803, 0x358F223E, 0x7A405868, 0x2BCCA524, 0xAC1EDA43,
+0xB7AF78A9, 0x4662826D, 0xACA7387E, 0xCA167A79, 0x74EE9591, 0xDF3F8E10, 0x1CA26517, 0x35855775,
+0x1B92B5A6, 0x98270525, 0xD4466277, 0xBC8F04A6, 0xE6A25098, 0x769D6A98, 0xB6A2E79E, 0x21C5ACAD,
+0xB4FDBCF9, 0xB8A5F0C4, 0x1A98CF5B, 0xDC4045AB, 0xE3AF85EA, 0x10C6D269, 0x6D42120D, 0xC9165590,
+0x11C24CE0, 0x6C09134C, 0x41F215F6, 0xABE6F287, 0xCBB105F3, 0x9061EF87, 0x2B16ADDF, 0x49C27B96,
+0xC693B5A7, 0x273B4C73, 0xD59F59C6, 0xF7549FAD, 0x85EBFF60, 0x757C20B7, 0x6CE7FC56, 0xD9607663,
+0x91391EA1, 0xB9190456, 0x49A4DD52, 0x35E25749, 0xDB1D863E, 0xAC677D70, 0xC3F1F908, 0xDC5A6747,
+0xF7FCED03, 0x393E6D11, 0x3AA2C275, 0xC87C8A86, 0x07A29C47, 0xDE9C4C75, 0x508BC907, 0xC2A67F56,
+0x18061F90, 0x986D3C12, 0x40548D77, 0x485779A3, 0xAC0C091D, 0xB039410C, 0xB97E47FC, 0x1A263A94,
+0x18F0A858, 0x33EA8C39, 0x8C472F61, 0x7650A619, 0x111B54E2, 0x154A5793, 0x2FC562E0, 0xC0422212,
+0x084E27FA, 0x56F848DC, 0xE33E2B92, 0xE61A5D4B, 0x3E8CE744, 0xDD1CC654, 0xF0EC752E, 0x07638733,
+0xB3499817, 0xBDB944AF, 0x2A10D9E3, 0x5E678451, 0xFB3133D8, 0x7F8F63E6, 0x864876ED, 0x2D6BD6EE,
+0x8DDB05C7, 0xBD52570D, 0xD0A3DE16, 0x36FDFA02, 0x7A94F1A5, 0x463A90A8, 0x0B7FF098, 0xF70FB9AB,
+0xDA982C49, 0xACB09A27, 0x18C14D72, 0x57BD8686, 0x247215F0, 0xCE303EA9, 0xD9D5A146, 0xC447D9B4,
+0xAC291AAD, 0xF71EFD16, 0x1AB977E7, 0x51537D19, 0x972F7AEA, 0x844E454B, 0x4AD86C74, 0xC0319B61,
+0xEF678E69, 0xA510546F, 0xAA8A847D, 0xAFFFEE69, 0xD2E74F99, 0x5DF14E89, 0xA93FD3E8, 0x7C519915,
+0x5FA8BFC0, 0x502D3D92, 0x6CADBFE4, 0x32E7379B, 0x55E583A4, 0xD7339EF7, 0xD6F13846, 0x7F6A37D0,
+0xFF87C76D, 0x09C40A49, 0xFF85ED96, 0xD481098D, 0x35D6F3A8, 0xC80C1896, 0x45BBEF57, 0xEEE51670,
+0x7A83DE97, 0xFD78308C, 0x5CB15F9C, 0xDEF2E212, 0x1B496E98, 0xD5605242, 0x7920C737, 0xF76B2DBD,
+0x51BCD0E9, 0xDBE94489, 0x7E158D3A, 0x25686850, 0xC5671DF9, 0x56D58B18, 0x5153F40C, 0x75F1BBA5,
+0x3F20547E, 0x87E5686E, 0x1813B5EE, 0x0B1F0C27, 0x660255E7, 0xE90E4511, 0x4EE741ED, 0xE2D9376A,
+0x231BD097, 0x3DB1FDE8, 0x1554C6BF, 0x33AB16E5, 0x899BE0F1, 0xF9DAD5D6, 0x22AAEB4E, 0xBBE0B3CD,
+0x92133D1B, 0xE0708A29, 0x183E908E, 0x9B4DB814, 0x453F34F5, 0x1A21674B, 0x763757E8, 0x9D08F623,
+0xF9C99A02, 0x801C58F4, 0xE56DE81F, 0x79B260D6, 0x3FEBC0BA, 0xC1C005A1, 0x4702D925, 0xA365E9E9,
+0xCC90607B, 0xB798583A, 0x60C3F6ED, 0x4A0B2419, 0x1463A180, 0xF0CAA4DA, 0x4574D86F, 0xE8671AB4,
+0x8530B095, 0xC1329B12, 0x49F3EC5B, 0x7103CEAC, 0x06E85F02, 0x4B6E1F7A, 0xE3A48CA6, 0xACA50E11,
+0xDED8358E, 0xE7FDE9AB, 0x46198AEA, 0x17C8C720, 0x6356583B, 0xA02A30A2, 0x2C157E3A, 0x5D09949A,
+0x77CF0B61, 0xD3C695CA, 0xDD8F60B5, 0xDC038821, 0x922E8AEB, 0x8E7FFF78, 0xBAF9D310, 0xB329E8DA,
+0x601D37C6, 0xFAF1386D, 0x9D5A68EE, 0x95825284, 0x02F47121, 0x3DF180F8, 0x995D3102, 0x934CCFEF,
+0x909AC4D8, 0x3925AFE5, 0x19FDE1E1, 0xA9F8AEA8, 0x35160F65, 0x2042F7DF, 0x213A3283, 0x29F52C01,
+0x46B5D540, 0x3FFD83E7, 0xFFD74D4E, 0x4E5E688F, 0xD3E5604A, 0x317670C3, 0x06235C1B, 0xC4D507FF,
+0xCE6731C4, 0x99664CA8, 0x83630695, 0x80DA8AA5, 0x5AF2D59A, 0xE055477C, 0x958F7F20, 0x9520199B,
+0xBD14D9C3, 0xA3C9B7FA, 0x5D5A06C2, 0x32757785, 0x73CD36CF, 0x0886ABB2, 0xACC46E63, 0x15F79ED7,
+0x6AB7B829, 0x789384B6, 0x896381F5, 0xC95957AF, 0x4E1C0A41, 0x73144CA3, 0xDC0A23DF, 0xBA5D0350,
+0xFD4E6535, 0xBB2FAC0D, 0xBF066668, 0xCCFBB62A, 0xF2244FEF, 0xDD1A0D35, 0xE0384331, 0x9E7EE721,
+0x5E2515A4, 0x806E537C, 0x4E8DDC26, 0xBAA83BD6, 0x30F86D01, 0x6D556C79, 0x161B4CC0, 0x4C6320FE,
+0x0C7A26E0, 0x18C62A7D, 0xEE8A6F92, 0xC67EB1CE, 0x0163B54C, 0x2A3A3713, 0xFB7F62C3, 0xA361C3A3,
+0xF7AECE08, 0xA9CC8FF4, 0xAC2AE86D, 0x740C5886, 0x327E5BEB, 0x20897A78, 0x4D00A1D0, 0xAD3BF537,
+0x7DB22C40, 0x9171CBF1, 0xC47415A8, 0x14A68E68, 0xE06331BE, 0xB73748C0, 0xEC5FEA26, 0x5B4E9154,
+0x61DAC36C, 0x0C37F2AB, 0x55EE62BD, 0x91EA88D7, 0x3CDD8575, 0xA2D66DC1, 0xED1EA6EB, 0xA510221C,
+0x6D748A6F, 0x8C341726, 0x0AD62F98, 0x59D1921D, 0xB6CC74E3, 0x9BC948F2, 0x4FD59797, 0x11EFAF12,
+0x03B59190, 0x46D22F5B, 0xE127ACDB, 0x556BF50E, 0xE4CA6483, 0xDF4F768D, 0xAA392D5B, 0x0ACF79EC,
+0x941E66BA, 0x1FC790AF, 0x86EC5522, 0xC2301593, 0x078E1C67, 0x060AF267, 0x0AA8FE39, 0x4FEE548B,
+0x02726908, 0x3D87BB12, 0x2C66BC10, 0xB3A8A7D6, 0x4CDC8BA7, 0x16696152, 0xE5FCD20C, 0x3C7FEB93,
+0x07416530, 0x9C6EA09F, 0x96AD3F05, 0xA65F4C80, 0x22BDDA3C, 0xF8850CD3, 0x79DC76C0, 0x4317DB04,
+0x71CA3612, 0xAC3E1371, 0x687C0CA7, 0x0993CBBC, 0x08BFC62D, 0x6BFE576E, 0x7CF20C0B, 0x96AE19F2,
+0x5D8FC7D3, 0x84DA76B3, 0xC1F76905, 0x29564827, 0x0459541D, 0x757049BF, 0x6FA7C1FA, 0x41B8E740,
+0x282C5F54, 0xB275A494, 0xBCCF55C8, 0xA93337E5, 0xFDBADD7B, 0x86E54E21, 0x41C8FCBA, 0xD6369B1B,
+0x413A2DE1, 0xA0526353, 0x628F24A5, 0xC074633B, 0xB1D23637, 0x72612F1E, 0x1CE7070D, 0x5F855882,
+0xD4AB24C5, 0x502C4340, 0x285A668A, 0x0D316549, 0x00F5A9FC, 0xD781F86F, 0x16D1F1F3, 0xC0C82D34,
+0x8151D66A, 0x1320C84C, 0x4CFF2708, 0x844E86DD, 0xA2C9B426, 0x4FE4902E, 0x81286A2B, 0x9C4A0B92,
+0x272D5026, 0xDEEA9E13, 0x48C642D8, 0x56DE4DFA, 0xEA879FFD, 0x340075FC, 0x8CDED96C, 0x21D8410B,
+0x6F8FDE84, 0x6A0316FC, 0xC86BD063, 0x8B7C704B, 0x85AF0EAF, 0x758C352C, 0x4FEB22F2, 0x572DE0E6,
+0x60689567, 0xE46BB6BE, 0xA294CA5B, 0xF342CAB3, 0xC646EAF1, 0x7C98B203, 0x3E390C3E, 0x1FCBD988,
+0x8637A2C6, 0x8F7F3544, 0x548F94D3, 0xB27EDBFE, 0xEBDCA27F, 0xB537DD90, 0x0CA70858, 0xF39C4469,
+0x0A085D39, 0xC7A420C6, 0x80621068, 0xCF628683, 0xDAD39E59, 0x77F23CBC, 0x07946B11, 0x9E0D04FA,
+0x8A2C3154, 0xF3FDB0C9, 0x6F24CE82, 0x44CCE4F5, 0x0555F2F5, 0x364BB759, 0x8FB90935, 0x50567F90,
+0xD8D61C83, 0x03334640, 0x493354FB, 0x04A7F6BF, 0xC2992D19, 0x0F06EE27, 0xB4F853B0, 0x95D3F629,
+0x0194DD7D, 0x1520DBE9, 0x71DBEFC3, 0xF4ED1C1F, 0x8A7E7259, 0x143D4FB4, 0x2BDB56E3, 0x895CB919,
+0xD0394152, 0xA83B6C00, 0xD5FBA70C, 0x1CB3CF71, 0x1247E7DB, 0x96C9E28D, 0x03DAEBC5, 0x441A54CC,
+0xB7213264, 0x1F17717A, 0x028C0EA1, 0x96214BBF, 0xEA98E40B, 0x43EED86D, 0xA47A7C68, 0x309A441B,
+0xE66DC7FF, 0x66715E2E, 0x877BA9FC, 0x5E78531D, 0x065FA0D8, 0x9ACAE9A9, 0x8F8BDFAF, 0x4A6A82B5,
+0x7C958F99, 0x635F98B8, 0xB8F7B43A, 0xE95853E1, 0xCE219FBA, 0xB5B109FC, 0x7B8D0D52, 0x1320B405,
+0x2A8985D1, 0x2AFC721A, 0xD4A90FCE, 0x988E7D21, 0xE5C48A33, 0xAEBA5B07, 0xBA834B8E, 0xE8465B78,
+0xCBFF0199, 0xB96B0D54, 0xEC04DA84, 0x758C7E2F, 0xFE7D5B21, 0x195EFEA8, 0x5D7D5CF0, 0x3DE74AE0,
+0xAA4EC719, 0x3192AAFB, 0xC0731901, 0x94A7570F, 0x80152410, 0x13C9B524, 0xA6F9D085, 0x98E82174,
+0xBE02B53F, 0x2AABDF93, 0x723318BF, 0xE8852EBB, 0xADA4D319, 0xF4F6EA38, 0x746A92F5, 0xF760B900,
+0x2C85CC5F, 0xFB83C43E, 0x458C3D0C, 0xF9FA0AA1, 0x5B2AD68B, 0x098AFCCD, 0xA4F2D221, 0xB2501818,
+0x4F9BF598, 0xC48C05D1, 0x16B3E814, 0x1FEEF414, 0x70AF78A1, 0x8C824D14, 0xDDF775D7, 0x7A49E4D4,
+0x5BB09804, 0xCA85D571, 0xE14297A9, 0x410A68D6, 0x76A58501, 0x87CBB293, 0x9B11D7C4, 0xF5D44E6E,
+0xDDD98B0B, 0x0AFA5C58, 0x1068678B, 0xEA4ADF54, 0xA9245026, 0x48B02BAE, 0x107A2A2F, 0xE9130E9E,
+0x7D4F1213, 0x0D18EDEF, 0x65CCC1DE, 0x248DE379, 0x205D1EB6, 0x4FD69464, 0x048C797E, 0x905100E7,
+0x922BFA74, 0xCA3EF2A2, 0xD2EA1FFF, 0x5BB2A0C2, 0xAC77033D, 0x7A21CAFE, 0x7BA8DA8A, 0xA3068D5B,
+0x7D820982, 0x6981497E, 0xCE42402F, 0xCB9C5692, 0xADD12697, 0x1C518F68, 0xC9D5E7BD, 0xB1317F8F,
+0x5D189C69, 0xBB82572A, 0xD4F0E862, 0x253A04E8, 0x3DAE7C56, 0x40377E1C, 0x6BF4AC6E, 0x6F436A74,
+0x4CD66066, 0x31FF342F, 0x7C4B16E3, 0x7CB678D9, 0x6D4FD948, 0x5DC88CE9, 0x5993EA68, 0xB7BAA7F2,
+0x28EF3B22, 0xECAAC27D, 0x52BFB331, 0x3D26A50F, 0xC7028A49, 0x0D5EF20F, 0x1A800206, 0x6997D639,
+0x78C1AE33, 0x54F83717, 0x2AE660CB, 0x4E5AA315, 0x6484553B, 0x9564BA61, 0xA667ACCA, 0xE74D80B2,
+0xBE8B41BF, 0xEB543A00, 0xB89B7E54, 0x4B887CD5, 0xC955A437, 0x98D808CA, 0xA3108C7E, 0x30D5CCB4,
+0x76AA4015, 0x041E74A3, 0x2B85DDE7, 0x81A46932, 0x95C2FF0F, 0xE101526A, 0x6BC44AD4, 0xE6CC999A,
+0xF6A1E039, 0x0420BA52, 0x2579C67C, 0x09EF9E66, 0xADC6B625, 0x0E2072E7, 0xA2CBC1D3, 0xF6DE0A0C,
+0xC3BF7750, 0x36469944, 0x2E9D1583, 0x3AD5EE91, 0x7580331A, 0x225BE293, 0x14250866, 0xD23E9760,
+0x9DAE18BB, 0x663D1859, 0x54A15278, 0x96A88D19, 0x607BCAB5, 0x0E3B6C29, 0x4F54D699, 0xE1A924AD,
+0x39768D62, 0x7FFC4230, 0x5DE4B52F, 0xB48CCF1D, 0x84F5C74E, 0x81A80E63, 0x66EEF2DB, 0x9BCEEC15,
+0x9FDD3E14, 0x0E19DA06, 0xFB28D4EF, 0x604A4DB7, 0x90EB10B8, 0x5D164517, 0x42FE22AB, 0x4BCC666D,
+0x4BDC2B83, 0xDF7CC28F, 0xC1F7FD46, 0xEF403EA4, 0xE5D6DEEF, 0xBE6F04E2, 0x366D1DBE, 0x985129BC,
+0x3BECDE70, 0x78CCBA05, 0xE846BA3B, 0x1A1232D1, 0xE2BA6670, 0x92A3E5BC, 0x3552473D, 0x7B6B813C,
+0x53ACAD4C, 0xE9D5E244, 0xDEF0F2CB, 0x049D5DD2, 0xA8F1F248, 0x668DF9DF, 0xC7D2E4E1, 0x0CB5A116,
+0xCEE85D25, 0x886D63C7, 0x4237E635, 0x153111E0, 0x2474ACDB, 0xF98E0662, 0x8AF8A8E3, 0x17E28666,
+0xA970E71D, 0x4B48A6BA, 0x7D96DF12, 0x23B977F5, 0x42CDA368, 0xD036D8FB, 0x6690A159, 0x1603C23E,
+0x10921EA9, 0x8D7D51EB, 0x1D24EE9D, 0xE7610F7B, 0x1C79C031, 0x98739CEE, 0xB374F76F, 0x368DC9C7,
+0x8446F75F, 0x35B5AD6F, 0x623122A2, 0x59083A3E, 0x6D3B34CB, 0xD0E32C86, 0xAAB79EA1, 0xF5033A38,
+0x1DB92234, 0xBF0D1CEE, 0x1E1FCEEC, 0x5333CCB9, 0x8AB4AE62, 0xFA4A42B1, 0x22FFE1B3, 0x9F76DC90,
+0x91A6A381, 0xF5C99AB2, 0x5E5AB2FF, 0x4A470AA0, 0xB8A12F6E, 0x7A946E8D, 0x20EE56DC, 0x7440A2CE,
+0x64E6D92C, 0x282531C8, 0x43EFF44C, 0xDA67A0FE, 0xFCD53177, 0x840F5CE9, 0xA7AD8067, 0x8FD599BE,
+0xA2EF3AE1, 0xAD9AA6DD, 0x68C7A8D3, 0xADC2F032, 0x14205DAA, 0x54A9D51E, 0xBCAA2B96, 0x5EE93904,
+0xEA5BD44A, 0x2F2F44D2, 0x1FF36099, 0x6C15A856, 0x9FA30F04, 0xFAE61EB3, 0x5246E92E, 0x2B4A27E8,
+0x4F66D3F8, 0xF9C7BB7F, 0xB551C692, 0xA8E82CA8, 0xBCD1F661, 0xF21DFD23, 0xBE707055, 0x46A86DD6,
+0x0AE9776C, 0xF02479D3, 0x83E979D4, 0x75C85D20, 0x1C532FCF, 0x6279BA7D, 0x22126F2F, 0x6034FFBE,
+0xDF126931, 0xEDDDC3B7, 0x0234F508, 0xD3920F66, 0x712B761E, 0x77E32BC4, 0xF0B5D8F0, 0x67B78686,
+0x6CF4A6D9, 0xBF5AD5D2, 0xE3B88E4D, 0x93DDA523, 0x5018C5DC, 0x5AAEDCA2, 0x0A209212, 0xBE4610B8,
+0xB576FD7B, 0xDDECF69A, 0xA4BDEFAA, 0x084635DB, 0x404C733F, 0xD104B25E, 0xA9EDADD6, 0xB2A560FA,
+0x5B25349E, 0x34BE59A8, 0x319EA680, 0x15ADE316, 0xFB838DDA, 0xDA42E825, 0x04BFC3AE, 0xE9053C2A,
+0x6A86E28F, 0x17E18A3A, 0xE92DAECC, 0x03E25022, 0xA3CC0314, 0x1F9C5DA4, 0x2CEFAC1D, 0x1DC9C750,
+0xE2004BB0, 0x8821EB1D, 0xFC8F74AE, 0x0625CDBD, 0x527A1802, 0x70C153E3, 0xFAD0C3B2, 0xA9019608,
+0x87CAD0A4, 0xCEC5FE53, 0x70DA2E86, 0xFF0FA518, 0x8C1A72DF, 0xD1CD09C1, 0x11AAE8E2, 0x4675222B,
+0xB20DC00D, 0x3D462EFD, 0x9EFEA486, 0x8E285F95, 0x2784D849, 0x8D5D929B, 0x242AD864, 0xE3DCCEDD,
+0xB0F2C658, 0x6A53005B, 0x940CB25D, 0x27382889, 0xBC5648E0, 0x67027D59, 0x861A80C6, 0x08443379,
+0x0FE914A5, 0xBC80D44E, 0x2C7F0BD4, 0x68E0EDA7, 0x34FE9FE1, 0x12CDE3B1, 0x99FBA0D6, 0x703BD042,
+0xF37870CF, 0x7459C8E3, 0x958B8DFD, 0x25BB3572, 0xAC2FAF8B, 0xC650A8CA, 0xF45D376E, 0xF138F3F5,
+0xEFA0893E, 0x2FE26D8F, 0x4E8C89B2, 0x3A28C0FB, 0x1E306147, 0xD71CDC0D, 0xCE1602AF, 0xEDE7E411,
+0xD773FA28, 0xCE2D60BA, 0xE1DB81E9, 0x8F54F0C2, 0xDE565545, 0x040DC0DC, 0x4025E728, 0xB136644F,
+0x415BBC86, 0x2B849AC9, 0x9166059F, 0xEECB7DE5, 0xC278CC40, 0x6FF6051E, 0xBA08288A, 0x6CC0F835,
+0xB0C70C06, 0xEACA5212, 0xCAB2B43F, 0x5D6CB8CA, 0x97510DF3, 0x36A3F69C, 0x30F85B8E, 0x310A1820,
+0x8F13CBFA, 0x91F04649, 0x9C1EAD1B, 0x293562E4, 0x5F210EC9, 0xA8680EB0, 0x73C3A9C1, 0xEFDBD2A0,
+0xE0139181, 0x610CF53E, 0xF69D2BED, 0x4DF77FD9, 0x0DD95EDA, 0x425EC421, 0x62F1CBB6, 0x4D9E4DD5,
+0xBA99A833, 0x6A947676, 0xCCAB7858, 0xE98E653A, 0xB7B4E847, 0x69D0122D, 0xEFE98086, 0xD41F14B2,
+0x919EF9C7, 0x2FC9E0DD, 0x009F4DF3, 0x72F465F9, 0x986D8C40, 0x462EB86D, 0x99515241, 0x88762D4D,
+0xF23EF528, 0x3C1BACFF, 0x12B87A8C, 0x61C3F555, 0x7D540432, 0xE8B363F0, 0xEA6E9DAE, 0xA84005E6,
+0xBD2BFC95, 0x5E25108E, 0xDCC8C448, 0xB10B3621, 0x85115506, 0xC9ED7F4C, 0xC3D6C7DA, 0x7FA7ED59,
+0x3A5D28D8, 0xFB374D89, 0x878E63DA, 0x927FF2D8, 0x27D21C72, 0x01577311, 0x8BD376C9, 0x6AAEDE03,
+0x21054586, 0xDE505044, 0x4EDC6474, 0x3C3C6C14, 0xB7002A66, 0x92328C69, 0x7961BAFD, 0xA7BC4765,
+0x8DC8B894, 0x5248CBF2, 0xF1C2F813, 0x2B8D6685, 0x63875D33, 0x6DD6A706, 0xA7AF3135, 0x2D417BE5,
+0xD10FFFE0, 0x2A17BDB8, 0x68AA9A40, 0xC30165A6, 0xC43D0BD7, 0x29C66782, 0xFEEA6BE4, 0x0EF35A91,
+0x52148CC2, 0x14F9F29D, 0x140EE262, 0xE53E21EB, 0x77EEFA7E, 0x22D41580, 0xAAA73560, 0x50BD2D82,
+0xCAFB8794, 0xE976A037, 0xFFCAC0BE, 0x963724C2, 0xCE112F93, 0xD1CA4783, 0xA8E68154, 0x3045568C,
+0xFBF90A9C, 0xC0B0104D, 0x0E7AE67B, 0xFC1E4FA5, 0xC2D9C5F0, 0xE92F35F9, 0x573EEB69, 0x2FF6848C,
+0x056AE34E, 0xD8B15974, 0x58A9BE62, 0x159AFAC1, 0xC0B481FE, 0x04D60218, 0x32229B71, 0x23FB8783,
+0x78F3E397, 0x686B8AEF, 0xF3E120E6, 0xCBA8DEDB, 0xD9935AFE, 0xC83D9011, 0x2073C775, 0x185C67F4,
+0x2E761034, 0xE5758EFA, 0x392B74B8, 0x5A82977F, 0xF375CE20, 0x81B1B9E0, 0x276EA4C8, 0x023ECBB1,
+0x1CB27D31, 0xFA571A2F, 0xE2082418, 0x90AF8ED4, 0x35FCBAEB, 0x4D7E0932, 0x4176FD54, 0x5F44F761,
+0x06BE5820, 0xB7C154B4, 0x5F12C6FA, 0x1D1F7C77, 0x32DE7BF3, 0xE57755A3, 0x72591130, 0xB4A3DCA2,
+0x7C817A07, 0x91277B4F, 0x3C8E6D6A, 0x4D0269F4, 0x2F26CDCC, 0x81EE7D33, 0xFDF27281, 0x0480D628,
+0x1BCE6764, 0x5705C0FA, 0xACD7A37C, 0x7EA800C4, 0xB713FF59, 0xDDBF60A1, 0x790DE85F, 0x9D67F3B3,
+0x4F860D8D, 0xE16D2071, 0x3552A191, 0xE9E9AAEE, 0xA5E1B731, 0x89460B4B, 0x6A379052, 0x0ECDBE57,
+0x016FFBD7, 0x2766E208, 0xC3BA8FD2, 0x2CF02373, 0xC0169079, 0xED373B06, 0xE2154CCF, 0x41E8D2DD,
+0x1747F279, 0x3472C463, 0xF73B23B3, 0xB7799651, 0x4CA27202, 0x7699FB5F, 0x9724BF91, 0x1B9EBC43,
+0x4E72E44A, 0x17B14230, 0x6567ED99, 0x9AE87B3C, 0x351D547B, 0xE76B08B1, 0x9C509742, 0x4F30FFD3,
+0x27971575, 0xD480EDA8, 0x9F1DBE51, 0x4688DDD3, 0x7CE56047, 0x548D789D, 0xEE573899, 0xB1F7FF2B,
+0x6F9A6115, 0x8EBA8C33, 0xE77390EF, 0xC40E029D, 0x32C9939A, 0x6A34754D, 0x51D07A85, 0x9F3EADC1,
+0x542010DB, 0xFEB8B58E, 0x7631E3C1, 0xE51AEEA3, 0xFF2376E1, 0x46EB03D3, 0x29B8C708, 0x05417F70,
+0x04C48F0D, 0x95480107, 0x09144B08, 0x5DC0E172, 0xF3CDBCD5, 0x977D752D, 0x327630BC, 0x1AF8D4A7,
+0x67EB034D, 0xBB581BCE, 0x2A516987, 0x9D620A0C, 0xC684CA70, 0x888F97AC, 0xBF845C00, 0x20D04647,
+0x249502F6, 0x1B2C251F, 0xD114C818, 0x8EB7B384, 0x3CF1C173, 0x2A7EF3F8, 0xF9BAD7A1, 0xBF2FC3CA,
+0xB252AA0D, 0xAF791843, 0xCF468562, 0xBA6E55DC, 0x1E82A75E, 0x99D34C63, 0x4E83967A, 0x73CA11F1,
+0x0A4DF821, 0xA3769A52, 0x4052B2F2, 0x2674FFCA, 0x0AAF70AF, 0x2B25A1E0, 0xCB4E1759, 0x80ADB3D9,
+0x4D18467A, 0xCB246AE3, 0xDCD11104, 0x76EEF041, 0xA047A7A4, 0x7C2581EF, 0x108487DA, 0x47ECE202,
+0x92799B7E, 0xE5A5B103, 0x8D811E23, 0x3B338B56, 0x1D8FD4D6, 0x40287A4A, 0xD7DE0BCB, 0x065DC067,
+0xDA75B978, 0x4953E9B4, 0x49A72BBC, 0xF655DF53, 0x5FDA7BE9, 0xD45A8151, 0x362ED747, 0x374EC5CA,
+0xD273ABB5, 0xC25FDDB9, 0x5886D72D, 0x4A548636, 0x14CB1907, 0x23DB23FE, 0x273CB8AA, 0xCFB953B8,
+0x06C255BD, 0x457DC9FA, 0x0C2E8E2A, 0x95D8BB35, 0x00F2CA41, 0x1A29B8D3, 0xB68BFE32, 0x3CF22178,
+0x859D9F71, 0x6D5975E4, 0xA286692F, 0xBD14AD67, 0xDAE463E7, 0xEF2CD8D1, 0x360902B2, 0xF13597A9,
+0x8088943E, 0x3C280B16, 0x98E88DAB, 0x63D1EEF8, 0x8FCF232B, 0xF9488957, 0x252CAD3B, 0xA9B11FCE,
+0x4F797885, 0x1366D426, 0x63F2B8D1, 0xB34C4725, 0xCFBFE2DA, 0xB6B7111A, 0xE0E882A4, 0xAB795458,
+0x86F86F33, 0x6B52324D, 0x8A85712F, 0x39D5AF45, 0xDB9DA426, 0xF347F1F2, 0x3DC5BC31, 0x0C936484,
+0xA63534BE, 0xD87F8960, 0x75FFC9B3, 0x6C2A5C5F, 0x1D4C86C7, 0x4D46E497, 0x155A3BF0, 0x2A707ECF,
+0xDF754C44, 0x3CCB7DB7, 0xA50DA3DF, 0x08B43FCE, 0x97A0C33D, 0xE76FC54A, 0xE2F6F4BF, 0x5E82936C,
+0x11421252, 0xB9F04F91, 0x5033BF02, 0x8138E545, 0xF8FBA64C, 0xCF4AC71F, 0x0E4C76E1, 0x32B81FDE,
+0x79573F85, 0x3C52C23E, 0xD6236305, 0x4B69B09F, 0x296B3A59, 0xEB3C1475, 0xE504A98A, 0x17DF14D3,
+0x711156DD, 0x4C9CEEFC, 0xF5ED25CC, 0xD6B9E614, 0x173ACF9C, 0x89E168E2, 0xDE14EEF7, 0x844D006A,
+0x5A2FFF3C, 0xC885A1C3, 0x6831A527, 0x0DA1A1CD, 0x4030F565, 0x06213F83, 0x0C56DDC2, 0xB3D4C66C,
+0x62CD448F, 0x1AB8E960, 0x43C5A942, 0x01368190, 0x3B4C6703, 0x262EEA98, 0xCCDFFCF5, 0x63C0CF62,
+0xC0464DED, 0xECC42ED9, 0x79E3DA18, 0x1D7ED544, 0x7ECBE8B8, 0x25A08AEB, 0xF0B3FA01, 0xBE2A74C2,
+0x3D395E43, 0xA45561E7, 0x6756F3B5, 0xA42D0728, 0x77D31CD6, 0x7E4A8904, 0x3023F6BD, 0x03E75D20,
+0x0E9ECFC7, 0x978356DE, 0xBE1A9E63, 0xC95B5068, 0x9700A81D, 0x32F608D3, 0x2C849F7E, 0x4C7B1F64,
+0xB8D1A2C4, 0xFCCAA749, 0x99D1C5CF, 0xE183B506, 0x6A3A9702, 0xD6476BC1, 0x391E8627, 0x474A406C,
+0x01086080, 0xC6EAAC9E, 0x4CB1827B, 0x5A79B78C, 0x0A86008F, 0xFC269C8A, 0xB0496666, 0xDAE9E861,
+0xD329ADCB, 0xA1871288, 0x03286A5D, 0x3C861CF6, 0x23DFC0E1, 0x4C27FA3C, 0x52452C19, 0xCE33014B,
+0x5973B2C5, 0xEAC9DD1B, 0x25C51D78, 0x07D4E6A0, 0xA79CB1D3, 0xF697C6D5, 0x88FE9E75, 0x8094F70B,
+0xD3129926, 0xEBFF48EB, 0xA04E257C, 0x314E086B, 0x1F501809, 0x811E8D53, 0xE7B65EB8, 0xA456B321,
+0xEA4B99CB, 0x62CB3E99, 0xC686AEA5, 0xF4FE3DC8, 0x62BA74BE, 0xCD7EB4EA, 0x0D806C1A, 0xD1FF3E55,
+0x34824F71, 0x9F0F4365, 0xA87C0717, 0x5D2A4A36, 0x15A966DA, 0xB44CEB5C, 0x9C604B2A, 0xE38B459C,
+0xB0F08FEC, 0xB83A6F67, 0xABCF1E3B, 0xFBA4F984, 0x9317246D, 0x000B78C8, 0x58928934, 0x129E027B,
+0x139EC9C7, 0x22B3C060, 0xE311FA20, 0xC7B875C2, 0x58ECA16C, 0xABF65D79, 0xC7EEA4B3, 0x2FD8D5A1,
+0x7446218E, 0xF24B9927, 0x163E200C, 0xED4F6DD7, 0xC8B21CAF, 0x4B3CF442, 0x66AFBDD8, 0x63F38B78,
+0xF713C2EC, 0x5E6C60D9, 0x1713BA98, 0xBF6F3F00, 0xDD3ECAE3, 0x0527EEF4, 0x93D55CF3, 0x64D67F02,
+0x3F0F0C20, 0x2BFB55A7, 0x4FCCFC03, 0x7A254FE3, 0x8A6BBF5C, 0x6DC36FB3, 0x4BCCD86A, 0x9AD65B29,
+0xF185C50F, 0x431B046E, 0x6CB29454, 0xAA53DF41, 0xE158848E, 0xE3F1E6FD, 0xDD378909, 0xD4CB7842,
+0x001B967D, 0x2430FE21, 0x53FB9C0D, 0x0A7CC209, 0x718DADA0, 0x24F9AD42, 0x9242B035, 0xF6B2C49A,
+0xE6B6A873, 0xD05A3C3A, 0x192506BE, 0xD6CB884D, 0x29EA667F, 0xC4E7BB4A, 0x75BC5963, 0xDFEE55D6,
+0x3CE000CE, 0x40B8C236, 0x65C374D8, 0xB6ED54A4, 0xB016B931, 0x12055AD4, 0xE122E3E9, 0xE92DB1A7,
+0xB2E380B3, 0x4CA78270, 0x6A8C9D6A, 0xFAE2FA61, 0x22F6A054, 0xBD8176E9, 0x58E2303E, 0x274A8AE1,
+0x2DB4F7BC, 0xC97A5559, 0x6C568D27, 0xA5FE4C80, 0x8FA4F51C, 0x0C309F32, 0x0BB16F54, 0xD1D06881,
+0xD9489D58, 0x29738E14, 0x807813C8, 0x04E4D360, 0x6DADD03A, 0x2886C6FB, 0x44AD4505, 0x236CC5D2,
+0x247C406A, 0xD93A3E84, 0x00210EBE, 0x5E04B54C, 0x9B9F2787, 0xB2F9557F, 0x86940E7C, 0xD1F7D06A,
+0xEFAC25BE, 0x8163908D, 0x63EAA3C6, 0x9166F780, 0xBD72A21A, 0x00958F8D, 0x1DE6340A, 0xC5EE6A3F,
+0x21FE4062, 0xBBD475E0, 0x7D50826E, 0x096D58EC, 0xE1914D23, 0xC0459D14, 0x687C0D6A, 0x9E5DD759,
+0x71994A46, 0x60B0F118, 0x6BC82568, 0xF0AE494D, 0xBF6FCE02, 0x1B8AD847, 0x00C0D429, 0x4CF1D1E8,
+0x1C144B21, 0x847DD7F0, 0x02E04242, 0x63C0F8B1, 0x5B067970, 0x10176FCA, 0x9BBEDE95, 0xA031C3B2,
+0xC74B5443, 0x475B4856, 0xFE63F8D4, 0x2CA7F5AE, 0xA5FF12A1, 0x78CA5E1D, 0x835FFD39, 0xDDA87706,
+0xF46E8FEB, 0x8E1CE0C2, 0x1E27B355, 0x41136139, 0xC6A70E40, 0xF1736CA4, 0x05A0D574, 0xB2F7888D,
+0x4D07C65F, 0x15A600F0, 0xE9CDB213, 0xF2D6289A, 0x51A80630, 0x548DABC1, 0x1D842A18, 0x38E90861,
+0xB96DCB1E, 0x37EF0A33, 0x9E008745, 0xE6E3EF32, 0x7EA36649, 0x748F4ABF, 0x41A21C1F, 0x935E381E,
+0x5C7172DC, 0x77813AFF, 0xFFBC74FD, 0xF6EF2001, 0x98B0EBF1, 0x92D65404, 0x9B6E0D6D, 0x2A119293,
+0x1AC94A04, 0x65FCBE46, 0xC137C161, 0x2D047D4E, 0xD5814F95, 0xCA8B82BE, 0x70656260, 0x1BBE6C36,
+0x9EF8239A, 0x93B00361, 0xD329808B, 0x8DEDB2DE, 0x2C33A967, 0x9F8D8BE9, 0xEE653A27, 0xC9E803C9,
+0x8207C466, 0x77A0498F, 0xBCC2EA6B, 0x40CA46B8, 0x8B508549, 0x146DEA41, 0x175BD428, 0xA6691BD9,
+0x191D3DA0, 0x30BE01C9, 0x02BFFCF8, 0xA8CAAAB0, 0x54D5CB64, 0xA620CEFB, 0x71EE9D7D, 0x9B7DB05F,
+0x8D9C9183, 0x8003F93F, 0x8D61C5F6, 0xA1E30E98, 0x73BBF3F6, 0xD8C32C5F, 0x273C1DF2, 0x7362F197,
+0xEA7AD162, 0xBF512CEC, 0xFA06AD62, 0xF7C026EA, 0x39309E9F, 0x9666DE8D, 0x4CAFDF97, 0x60B57E27,
+0xFE98DC22, 0xD2CA2BE8, 0x879F0223, 0xFE84D109, 0xDDE8FE66, 0x11ABD48E, 0x0CEF2EA4, 0xC0D98D88,
+0x22F84B53, 0xA98C74B3, 0xE56FB3DB, 0x65788363, 0x766F40AC, 0x9CE91A44, 0xDD950BA0, 0x89EF6F0E,
+0xE5E6711F, 0x27F70CDA, 0x1605C897, 0xC2343CFA, 0x061CAD02, 0xADA76F86, 0xAC9FAB9D, 0xEA1534F7,
+0x67C2E4FB, 0xBF8326BB, 0xC3086846, 0x0FAD35A7, 0x96810504, 0x7DD2A1D6, 0xB9A3F3B2, 0x7EBB03F0,
+0xD93F4BA6, 0xCBA5AB7C, 0x0959C851, 0x481EB3BB, 0x75746291, 0x943AE051, 0x672E0C8C, 0xA50ED7EF,
+0xEE3EABC3, 0x5DB06C95, 0x20F47E17, 0xD0B3B1FC, 0x2E0B0CE4, 0x6B1617AC, 0x25982011, 0x19A94BBE,
+0xF74C8AAC, 0xD052F5C6, 0xAAF8DA70, 0x25D4405A, 0xDED653FA, 0x7D1915E4, 0x530A7F91, 0x4207698B,
+0x23B0E444, 0x1640D4FE, 0x478127F3, 0x7D0982F0, 0x27192B15, 0xF6BF3413, 0xE733A391, 0x3CA39D61,
+0x3722D9BB, 0xE7DD7F37, 0xBFAA51DF, 0x265685E5, 0xD4F34EB0, 0xF4E64826, 0x96B48926, 0x2183D6AA,
+0xC0044F11, 0x804E39F4, 0xA23F3AE2, 0xEC7E3DC7, 0xA8F234B8, 0x5B6356BC, 0x90DB4E29, 0xB012E937,
+0x5D88D89B, 0x84270CC0, 0x200F0D09, 0x74878657, 0xDE25B5C1, 0xC20E35C0, 0x8F325F6B, 0x7D4B64D9,
+0xFD836ED6, 0x83FD263B, 0x98418B5A, 0x252D0C9E, 0xE761C4D2, 0x2B1C24C2, 0x2CCC6940, 0x6F8CECFC,
+0x43DCC8C5, 0x37AA6681, 0x62BEF498, 0xC9BDFA47, 0x26C8AB99, 0x7684A332, 0x4484B877, 0xB015EC2B,
+0x2A95DB60, 0xD7A7044C, 0x6D2AB8E7, 0x88506421, 0xD0D93CC8, 0xFBE00118, 0x30221CC7, 0x1336FE5F,
+0x1783A8A8, 0x780381B9, 0xC8F57159, 0x8FB17067, 0x2BCD11BF, 0xB3E9F82C, 0x437A3742, 0xF45C5B84,
+0xCF87D938, 0xA4DD19C1, 0x2DF71583, 0x1D310D7A, 0x9499C0CC, 0xA69A7617, 0x1CE1074E, 0x1312E2FE,
+0x05C71DDF, 0xDCF5439B, 0xA4AFA54F, 0x0FC3E400, 0x35386A6F, 0x5DD706B0, 0x66C50222, 0x441A8FBA,
+0x3E6607DD, 0x67A1104E, 0xC33DF53C, 0x28F33A48, 0xA586238C, 0x68EB1C16, 0x9456693C, 0xD238C950,
+0x589804D7, 0x85A5FD8B, 0xADD5F152, 0x3D3A74F8, 0xA084CE1B, 0xFFFBDDAC, 0x8E32C073, 0xC1F7783C,
+0x8D00806E, 0x75628FE1, 0x3B4BF6A6, 0x486C5076, 0x920676EE, 0xBE614D98, 0xB6F0B871, 0xDCC097CE,
+0xD1A3A482, 0xF7D9A1A6, 0x80FDB0FF, 0x494E3984, 0x38DA26F4, 0xA2C28B48, 0x5B787230, 0xC6CAC8CF,
+0x663E3F7D, 0x608CED3E, 0x0E79F67F, 0xA5208267, 0xE595868F, 0x0A28A1CA, 0xF9AB22C7, 0x4B7A3CE0,
+0xD562C4D2, 0x915E13CE, 0x7F546353, 0x1001E2A1, 0x346E1B7D, 0x08A30D61, 0x4B140864, 0xF7E09CE8,
+0xB17101B1, 0xBDB10EF5, 0xF5F7167A, 0x25172C7A, 0x15709A1A, 0x5438D4DD, 0x4C8B4113, 0x0A57E1B6,
+0x106D32FF, 0xFFCA92FE, 0xDFA943DF, 0xC01C08E8, 0xE8A2983A, 0xAE895A2B, 0xA850D74C, 0x984F9D22,
+0xBD6F85C2, 0x8DF86E59, 0x30186AF3, 0x9B6DFAF7, 0x2B712296, 0xE5E7E29A, 0xE0E4B2D5, 0xD38BD076,
+0x5C73C637, 0x357D55BE, 0xA0B72355, 0xCF34F26F, 0xA424B44D, 0xBC84BDAE, 0xC14D3B7D, 0x9E47D557,
+0xCD1D295A, 0x054BA37C, 0x969A08B1, 0xF8721E0E, 0x9B00FB29, 0x40B11B39, 0x37C08E5F, 0xA2DF5285,
+0x767564C3, 0x6CE8E11F, 0x5D477067, 0x0442205A, 0x3BF39DFE, 0xC161C8B5, 0x463632F3, 0xB9EB8AB0,
+0x44679F93, 0xB0807648, 0xE9CA5611, 0x810AAFE7, 0xECF22A54, 0x2F54CC4B, 0xD240F72F, 0xF122EF43,
+0x744C3FB2, 0x48C7753B, 0x3BD6726A, 0x0653E525, 0xE18B746D, 0xDFDEB394, 0xDBB4A9AA, 0x2ECB72EA,
+0xC1221691, 0x99C56438, 0xCCB4958F, 0x97F34242, 0xFB6BD488, 0xDA24C3EB, 0x617D6A68, 0x0073DFC2,
+0x8AF3032B, 0xF53D3635, 0xF822643F, 0x79381900, 0x9719ED3A, 0xA8239DA8, 0xD0B017C0, 0xAB31A815,
+0xCE6003F0, 0x4643F80C, 0x016F36B1, 0xED982727, 0x12ECBF02, 0x0C47FBFE, 0x71E126E8, 0x023EC250,
+0x9F4B435D, 0xD374FC90, 0x0DBEC58E, 0x288DB609, 0xE4424AC9, 0x90AFF2CC, 0x5BE7617B, 0xB26A9A14,
+0xE49C56EC, 0x0F4DFD53, 0x9AB291CC, 0x30F888BA, 0x65402E6D, 0x776CC7A0, 0x14F78380, 0x6D218326,
+0xFE727596, 0xE8D1BE37, 0x9043B5F5, 0x7C27B997, 0x6695AEE5, 0xAADD34CA, 0xE8E23EDD, 0x1ED2641E,
+0xE4B98958, 0x1A863E73, 0x9B8118E1, 0x2686705F, 0x564075BC, 0xF010F113, 0xD9B4DB3B, 0x743E5F3B,
+0xA7BB8CDF, 0xF4C41436, 0x49626BFF, 0x3E0E28D8, 0x6D80911E, 0x6BC1CC28, 0xDD3276F2, 0xDBA28932,
+0xCF71E329, 0xBCC2CC5A, 0xC26C146C, 0x0F01CC99, 0xFA7924E2, 0x91FE78FD, 0xCD395BCD, 0xFA52C5A3,
+0xFE403EEA, 0xB7EDB459, 0xDAF2657C, 0xB27F6529, 0x74926D4B, 0x7DB3A732, 0xCD5EA28F, 0x27B94580,
+0xA581493D, 0x0F833C93, 0xA9F39125, 0x4245E34F, 0x3404BB50, 0x0D3AF47D, 0xADB0C9FF, 0x9A0D8F7C,
+0xDCD421FA, 0x107FD389, 0x47BF28B6, 0x8F7EE824, 0xA4ACADEB, 0xB68869B6, 0x97362D24, 0x4D822EB4,
+0xEFC2748F, 0x1B9DC420, 0xCC4DAD3A, 0x7B1875F9, 0xFB1C2325, 0x18CF25DD, 0x292278FD, 0x8C567661,
+0xB80C5547, 0x6FD8BEBB, 0x2AD4A0AC, 0x6C471937, 0x9EB6A7D9, 0xF4F581E2, 0x4C507665, 0x761D70CA,
+0x348C4804, 0x16DEEDB2, 0x4A19BDE6, 0x81B0ECCC, 0xA3A1AAC1, 0xE138C6FA, 0xB2E519C1, 0x1E45F128,
+0x77785922, 0x39D527E6, 0x00C11201, 0x26AC5381, 0xE2CD5E1B, 0x543C32E2, 0xD1072C48, 0xC079F5D4,
+0xFBA5B5E3, 0xD6642D02, 0xF4790BA5, 0x2C92C830, 0x4ED9B6A4, 0xE4980B8F, 0xDC5CEA8C, 0xCBD47D14,
+0xFB1360CF, 0xC8CD4523, 0x839CAE92, 0x01793853, 0x6354ACFD, 0x3BFFBA95, 0x6FD58D88, 0x4827B6F8,
+0x957260D2, 0x1A71CCB8, 0x9CA465AE, 0x01BDFA39, 0xF2BF3950, 0x991B7273, 0x0325EA9D, 0xD067C60A,
+0x3B67B50F, 0x08334C7C, 0xA38E9997, 0xAE824008, 0x4B21C839, 0x7494CA26, 0x20797448, 0xB50318ED,
+0x6E102584, 0xA60AD18C, 0x9B184804, 0x1D75CF78, 0xA3FD532A, 0xE71B25AE, 0x6D6E916C, 0x0B22691F,
+0x7307709F, 0xF58343DD, 0xB54FDE10, 0x0BE813DE, 0xE446F4A9, 0xDC8B529F, 0xF515EEC8, 0xAC673D76,
+0xF859D671, 0xDA2764E6, 0xC520FBC2, 0xB88DE771, 0x74889584, 0xE1F1C0C3, 0x66899572, 0x253E5671,
+0xD1C5FC48, 0x7D63CBDF, 0xB1D8738C, 0xC1C7D32B, 0x16F4C3B1, 0x9232C0A1, 0xF6FEB660, 0x300D5E75,
+0xCECF1B80, 0xC316B83C, 0xBBE44403, 0x96C1FA78, 0x3CB3ADF9, 0x1CA50FD3, 0x52489B06, 0x6201F0F3,
+0x6BA187EF, 0x58B97F9B, 0x833DC289, 0x4F485E32, 0xA3CDC2AB, 0x06BC6144, 0x9FF24B92, 0x392FB7AE,
+0x4C13A3D5, 0xFDDD1925, 0x88ECFD48, 0x5477C1E1, 0x3549E130, 0xE81967A5, 0xF6F40946, 0xC2CED3AD,
+0xE39A8316, 0x281506CC, 0x19C898AA, 0xE5839784, 0x2BD88542, 0x1F869E37, 0xBB18F74D, 0x15A91858,
+0x8C98EB42, 0xA4B0D47C, 0xA2B1F394, 0x10E50D03, 0x3F9BBC70, 0xDD4ACB93, 0x4F41DA9E, 0x9F016F82,
+0x1BB131CD, 0x107EA92F, 0x42A87593, 0x369AEE16, 0x3836465C, 0x9F1316A9, 0x5DB192EE, 0xF69B73CB,
+0x2106E6AA, 0x928CA87B, 0xE937F572, 0x1503CEDF, 0xC74E7473, 0x9A570676, 0xD23498DC, 0x1ECB9469,
+0x474FD95E, 0x7B49AACF, 0x5B32941F, 0x1975D341, 0x0B41FB79, 0x7A072DDB, 0x7FEEED48, 0x40DC0B84,
+0xF19492A7, 0xF09F3AA7, 0xB8EEE3B3, 0xB5EB92D9, 0xBA4FCFB3, 0x1A7AA2DA, 0xC9C2F3C4, 0x9F0A4E7A,
+0xB2B3CDD7, 0xDEEC0B40, 0xC3AA4D34, 0x6F64E563, 0xB768E9E9, 0x0514D621, 0x963DD80F, 0xF346ED2F,
+0x9B74FDCC, 0x30B93774, 0xB9F90C27, 0xA6502EE2, 0x2A340C44, 0x473A4FF2, 0x3F75A3CD, 0xD6B64314,
+0x639BDB0F, 0x3BBF3160, 0x020AA89C, 0x566DBE5C, 0x86BDCF88, 0x10C36BAD, 0x8438AE26, 0xBA8B8B70,
+0x67FEA635, 0xB6727758, 0x23C0CB1A, 0x484135CE, 0xB5B49AD1, 0xC3306C25, 0x1CB068B7, 0x99AC5720,
+0x6571AEE7, 0xB9DD9157, 0x31C668A0, 0x61BDB518, 0x894E1700, 0x6A9D128B, 0x9E15A011, 0x1832ECCB,
+0x62E339EC, 0x8AC7C389, 0xD4902DE5, 0xE6813995, 0xF5951667, 0xF1F1BB59, 0x61516EBD, 0xC6EF3828,
+0xB365FA40, 0x218FE0E4, 0x521362B5, 0xC9E013B7, 0xF175B9C2, 0x4D077EF1, 0x1209F0AB, 0x7E94C11F,
+0x6552235F, 0xF77608B4, 0x3799F1D9, 0x9F193425, 0xD492D52A, 0x5F1640A0, 0x0FCCFC01, 0xB1B6C4D1,
+0x0DAC7479, 0x5073702C, 0xF098288B, 0xA05EA575, 0x8EFA271F, 0x16C2155A, 0xE24FC62E, 0xB62AD581,
+0x4776B0D1, 0x95FECAFE, 0xEF0483D3, 0x5454CA30, 0x847A4629, 0x978AB39D, 0xEF7B5F09, 0xBA687E42,
+0x661FFD9B, 0x11DECBB2, 0xF6E7622F, 0xFCE79447, 0x21CAA875, 0x4814FE73, 0x5D8E99D9, 0x5E4616C6,
+0xE99817C9, 0x79EB1705, 0x4F20B8F7, 0x67B46E9C, 0x7D3794B7, 0xDB988296, 0x0A8A3C09, 0x53445BCB,
+0xCA09CC28, 0x905E774D, 0x7D30B5B8, 0xADF84E47, 0x72577741, 0x3DF34AAD, 0xEBECFEA8, 0x855BF662,
+0xD868EB2D, 0xABC7F767, 0xCD043289, 0xAE9300E6, 0x8B56E8E5, 0x7C50C3F8, 0x4D942E39, 0x1258CCCB,
+0xBC2321EA, 0xD30DBB53, 0x833E7185, 0x80BA6FF0, 0x621AA3A4, 0x7FBF6665, 0x431577B1, 0xE2C2F557,
+0xC8BB84CE, 0x69A03292, 0xB2458FF5, 0x6BBE17B0, 0x534F46F0, 0x56FB0373, 0x628203CB, 0x78E9492C,
+0x3598BF9B, 0x14B72D87, 0x68C33A31, 0x04FA7CBE, 0xE3F1A135, 0x180A64AC, 0xCC6D0BF2, 0x76801154,
+0x72A16DDF, 0xD027668F, 0xEED9766D, 0x364D327F, 0x32109E85, 0xBDA31DBB, 0xD9320B51, 0x143FB4B7,
+0xAB8055A1, 0x4A47186D, 0xD82CFFB2, 0x008D3FBA, 0xD1CA2FBB, 0xDB4325DE, 0x4819616B, 0xE3500D01,
+0x64E6B4AE, 0xC374CA24, 0xAD028CB4, 0x40E5DA81, 0x7C682267, 0x7CF2E259, 0x3E6A3074, 0xAB4B4449,
+0x3E6843EA, 0x48CAE6D3, 0x2371E9C8, 0x12769DCC, 0x5CE66916, 0x36C1F868, 0x516FD1DE, 0x2C839185,
+0xAAB5D018, 0xAE88FFF7, 0x77CA22FD, 0x8415BDCE, 0x67249005, 0x61976C4B, 0xDDB2C29A, 0x104D6CC9,
+0x32C27606, 0x77D83E11, 0x90E6D421, 0x805949E4, 0x0F22C4EC, 0x10A2F7EA, 0x9865C89F, 0x8976BF26,
+0xA4761377, 0x464FE9FD, 0xE9DDA0C3, 0x6505FEAA, 0x5A412BF6, 0x79E9842A, 0x68AC6198, 0xC58C6875,
+0x3507E5DE, 0xDD69753D, 0x4EF6E220, 0x1579A693, 0x711D03BC, 0x5B78C6ED, 0xEA165596, 0x1DAB9B2B,
+0x70A6B400, 0xBFB72B3E, 0x9348E007, 0x52887800, 0xD6A028F4, 0x9EA8BFA8, 0xFCCFA2D2, 0x104ECBAB,
+0x6C87CE5B, 0x9BC1B5AB, 0x1F96E4F9, 0x27335CAF, 0x42F759B6, 0x55A963DF, 0xA34B4D69, 0x04FF1B6F,
+0x7D7B0076, 0xF6E6366B, 0x012B9461, 0x359E4047, 0x9F451AD4, 0x86D78FAF, 0x26E998F2, 0x7963979B,
+0xEAAF7B0B, 0xC77E7A30, 0xD49B8365, 0x66EA8D3D, 0x1FA79780, 0x01ADD657, 0x8A05AED7, 0xCB2C7DD5,
+0xA867AC9B, 0x9D652AA7, 0x817B79A6, 0x57B0ABE9, 0x8A1A10BC, 0x6CDE2C3A, 0x45FC5799, 0xDBCF624A,
+0xCA115EDA, 0x3C0211C8, 0x620AD9B7, 0xFA69C5CF, 0x2A546642, 0x6BD3C086, 0x0ED57C32, 0x9996D9CC,
+0x8FA996B3, 0xA5D7004B, 0x7F64F5E5, 0x8E295C4E, 0x33B6EB7C, 0xC14805E5, 0xCC633917, 0xF0C330CD,
+0xB0BF1DDD, 0x4B49D854, 0x46E467FD, 0xA7C69D79, 0x2C6D17E5, 0xC22C11F1, 0x1B8B0C18, 0x894CDEDD,
+0xD17F669D, 0x13D3215C, 0x104769E6, 0x2ECDFE5E, 0x8438F1F1, 0x70281154, 0x765B8308, 0xE34D7B5E,
+0xD2856934, 0x80A44D91, 0xC7409836, 0xB3CF65F2, 0xED129DE2, 0x02ED9B5B, 0xD3756673, 0xEE5846C5,
+0x4C8264AB, 0x80EA4556, 0x0178F300, 0x306E4290, 0xCB9EF356, 0x376D9506, 0xA07201B5, 0x41EBE618,
+0xA8850AF8, 0xD89FCE71, 0xCEEA2638, 0x4F0F2477, 0x1872CE76, 0xDB03000D, 0xDE6E48CD, 0x20BE2FC2,
+0xE29E91C5, 0x18F45005, 0x5C80B913, 0x5094D73F, 0x88D530B7, 0x71B35F4A, 0x63DF1E7D, 0xA1E9449D,
+0x99B7E057, 0xB7446D93, 0xE776F329, 0x8EC37FC8, 0xA8B51E68, 0xE4E15611, 0xEB836485, 0xFDEC27EE,
+0xF40736BE, 0xE8731E68, 0x5A809563, 0x0C6CECAC, 0xA4FC8603, 0x0362490A, 0x9C55C759, 0x6FF9A9CE,
+0x884F9DB9, 0x85C3CBE5, 0x4B076414, 0x05146C1C, 0x23484A0A, 0xB5FC6C21, 0x539A9685, 0xAB06DDD0,
+0x595F12F7, 0xB48C4C9F, 0x45ECA53F, 0xD11B844F, 0x97BB58A5, 0x40C80C11, 0xE6F88DBF, 0x0AC62BF6,
+0x4C990DFB, 0xCDA4D064, 0x7D8C51D5, 0x8CBCDC70, 0xFD8144BF, 0x152A9C1A, 0xA1CBDEBA, 0x88C5163B,
+0xE80577A5, 0x15C04A59, 0x3363AACB, 0x0BD9CE52, 0x9DC1BAD4, 0x433BD764, 0x9B774BCF, 0x25C340A0,
+0xAED8B4D3, 0x791CC3D8, 0x00B7B196, 0x53E8747F, 0x9141A6C9, 0x9C50FAAD, 0x9F7BA73A, 0x4AB3FD88,
+0xF9847555, 0xB48E0B3C, 0xFEA1E69A, 0x43F2F13A, 0xB1AFBA53, 0x05BE1E3B, 0xA6D487DD, 0x4D27F402,
+0xEA107E20, 0xE7CD8C77, 0xA142993C, 0xD1E9E787, 0x1505E7ED, 0xA23B9DA7, 0xE19B3F0B, 0xBCA7FBB1,
+0xBD98ED63, 0xE67B395E, 0xBE2FD001, 0xCA541DA3, 0x38876D26, 0xD648DA98, 0xF6D271EC, 0x283256E1,
+0x3AF63766, 0x4C3DF100, 0x1D26B963, 0x25916616, 0x05BC79B5, 0x27926EFD, 0x439BE362, 0xB24E87FD,
+0xD496B3C0, 0x7EB531BB, 0xE11EE378, 0x5D95FA30, 0xFB1C64C4, 0xBEB6088A, 0xDF21D07A, 0x9DE0B326,
+0x6DF86DFF, 0x5312FB15, 0xA5AD0CFF, 0x75A94856, 0xCFA5106F, 0x5C711CE1, 0x097642E5, 0xCC746CFD,
+0x1AD0D174, 0xA63B5BC0, 0xFAAF994D, 0x9BA8711D, 0x99532E1A, 0xCD5A0512, 0x70D389F4, 0xF20B51CF,
+0x76144A0E, 0x4DBABA7E, 0xD1F2B55A, 0xFBC7B306, 0x5D8C32DE, 0x4800F83F, 0x5688DA82, 0x5FFDC75F,
+0xB24BF977, 0x7CBA2747, 0x9914C16D, 0xC23A8E8C, 0xFA16797C, 0x0EFC00EA, 0xF83FDADF, 0x8D54CE01,
+0xF3BC156C, 0xEB26A6A8, 0xE93D3FC8, 0x949A49CC, 0x42584A24, 0xA5480FD1, 0x39B9C7E5, 0x7E35FE71,
+0x2FD94014, 0xF458BD73, 0xCEBA0D7A, 0x08E95017, 0x85FBF157, 0xCC4243FB, 0x74E10AA1, 0x849E263A,
+0xFEB067E2, 0xF9AE9CDF, 0xBCF9A823, 0x2EB3FC61, 0x8D5AB353, 0x4A53E514, 0x50B7FD0E, 0x86CE6248,
+0xFF20EC40, 0x2AC7DA5B, 0x995C4C45, 0x4D24AE34, 0xE6FB05ED, 0x2D08F00F, 0x776D6308, 0x70E55715,
+0x3BD0AB57, 0x5238531F, 0x091EF2B1, 0x7B390811, 0x821AD649, 0xA2FACC00, 0xD60CD683, 0x5B0F7811,
+0x82FFA896, 0xCC9A626C, 0x9C8F9E85, 0xC2ABCBB9, 0x88CBDB00, 0xE8E20174, 0x93179896, 0xF9C55B8E,
+0x8D94C170, 0xABA59643, 0x7B59253E, 0x2628048C, 0xDCFA31F7, 0x0C28A263, 0xF93C79DE, 0x0BB5F7DE,
+0xADF2368A, 0x79386B6F, 0x06704B26, 0x87CB5616, 0x5BDE9721, 0xB2934199, 0xAA689C74, 0x7D16D96E,
+0xC7C7A546, 0x07309AE0, 0x4D4A0192, 0x682BDCA6, 0x62A5D518, 0x2E306E0F, 0x555D84F6, 0x290BACCF,
+0xB9E92ED4, 0xCD803429, 0xC4F6D7A5, 0x3F832E61, 0x9CD38A8D, 0xBD6CEBE9, 0x060E6A24, 0x8D3AD0AF,
+0x349E1D6E, 0xD8F27F61, 0x1B7CF9CC, 0x799930C4, 0x367A76EB, 0x03D26633, 0xCD0A1C68, 0x81803080,
+0xA869D370, 0xAFF14D76, 0xDFC56048, 0x8AE5EDAB, 0x2E21AF6E, 0x90B9C82A, 0x9C10C44E, 0x76324E7A,
+0x325382E1, 0xB49EB567, 0x15EDBDBF, 0xEE0F760C, 0x9F1F1ECD, 0xE8F6AD54, 0x5FBD81B6, 0x23838139,
+0xFA834BA8, 0xD83A3324, 0xF8543717, 0x01BE338B, 0xBE67E3EB, 0xA780E0F7, 0x665924DA, 0x3FE2DE1A,
+0x768548D5, 0x079BAD27, 0x25B20A05, 0xDC1BFDBE, 0xAC93937F, 0xAD8CFF54, 0x38D20861, 0xD1E6E311,
+0x95F6BB48, 0x897B82B9, 0x64080D75, 0xBB634026, 0x9F48821C, 0x9D903E1E, 0x4F2EB115, 0xCFD13D09,
+0xEEA0BA4D, 0x36C4D136, 0x2F8706AF, 0x01B732E4, 0x1B11BD62, 0xA0C20CA3, 0xC102C09D, 0xF9A11FEC,
+0x0A017394, 0xAFA083AC, 0xEF8F2C94, 0x60C385F6, 0x9EA5241B, 0x73B05202, 0x58CB8DA0, 0xA5C0CF86,
+0xB018C433, 0xEDCD5217, 0xD1C47D5B, 0x668FF345, 0x7E99D581, 0x045B0B87, 0x80633715, 0x635B76B8,
+0x63653BB2, 0xE4CA7731, 0x3DE005D2, 0xF3105BC8, 0x81C257CA, 0xBAA88696, 0xD39EADF3, 0x40A9E6E0,
+0x607CA7C8, 0x11C47969, 0x5B445BB0, 0x5F461A4D, 0x86703909, 0x66888BBE, 0x3F413BBE, 0x8FDEB28A,
+0x5D8B8119, 0xEB48A1A9, 0x1ABC1E7F, 0xEDFFEA88, 0xF283EA49, 0x330C08C4, 0xF41A858B, 0x4FFB40E7,
+0xDEEA4415, 0x71200F46, 0x058DEFED, 0x06ACDA8D, 0x52F2A73A, 0x1621572F, 0xF65EE68E, 0x220AF8CD,
+0xB6D48A7C, 0x82934217, 0x185A3CC6, 0x8A8572C7, 0xFB36BEE5, 0x0FA92AE3, 0x4F8C7846, 0xB967ACF0,
+0xE09E5CA4, 0xAEC89A5B, 0xB6028DD2, 0x756A771D, 0xBB57BD26, 0xAA00B76F, 0xD659E0DC, 0x16D6ADBF,
+0xCA3A329F, 0x5AAF37B2, 0x0F6767CD, 0x5A007C70, 0x3C1ACDEE, 0x2563BBA3, 0x97A6AD8A, 0x121BA303,
+0xB2AE7676, 0xFF4DE7A2, 0xE26CB1AB, 0x93500E42, 0x19B71765, 0x39C1ABC8, 0xF24C96AA, 0x16B5FD3E,
+0x5F43D275, 0xDF37293A, 0x08974B59, 0x0E618DAE, 0xB525D78D, 0x35D4BD7E, 0x0D6211B3, 0xC08F4F34,
+0x3D4123BC, 0xB5106EE2, 0x87184D47, 0x4EF76B46, 0xCC9C89CF, 0x525292F1, 0x0606651B, 0x01CF6EE8,
+0x661F7F3C, 0xCC632C5E, 0xFB4D2EF7, 0xD6FE1CD3, 0xECE1564D, 0xC0AFDB02, 0x774C0AA7, 0xA4A2207D,
+0x1BA6374D, 0xF30870C0, 0xD032DD5A, 0x3196D79D, 0x21EB9E1D, 0xECC6F3CE, 0xA71C1257, 0x28B23A0D,
+0xAA13C28F, 0x8E4BCA38, 0xFFF715C4, 0x32417EEC, 0x34CFD2AB, 0x65FDC94D, 0xFB484C0F, 0x4D77C908,
+0x53AE1414, 0x9209795B, 0xA3D6C15D, 0x6A970FDB, 0x6CC1A2BD, 0x1192924A, 0xBAA274CA, 0xAC1562D7,
+0xFDBD42AE, 0x50695AA8, 0x087CEC08, 0xB620FCBD, 0xD789351B, 0x0DBA8364, 0xB55783C1, 0x6C56D211,
+0x6DD76D60, 0xF7F3EC77, 0x08C08E12, 0xC44E5B93, 0xC96B5447, 0x9CED6C9C, 0xC887D405, 0x712398D5,
+0x4ACDE344, 0x5B5AD633, 0xA1D554AD, 0x703F864A, 0x4F9BB5D8, 0x62B7E024, 0x2A661BED, 0x5F6FF883,
+0x54164CAD, 0xA0B031B1, 0x44114DF4, 0x4253C7F1, 0x4354143A, 0x8E4289A7, 0x657FB50A, 0xB064170C,
+0xC4B5250A, 0x786B23EB, 0xECA633F7, 0xC352C0B4, 0x5500704D, 0x9B2E0B80, 0x150A24DF, 0x85A7781E,
+0xBD2050F5, 0x6B7A41EF, 0x69362B80, 0x4BC943DF, 0x09DDAD5F, 0x1407135A, 0x5E308986, 0x626AC480,
+0xC04CAC0C, 0x32C05EF2, 0xBFDEB6AB, 0x189E71BA, 0x5EA97F3D, 0xCDDFE2A6, 0xFE72D2F7, 0x63DD8831,
+0x500F53B6, 0x15036D15, 0x0103B9E9, 0x9E910004, 0xBC4E06DE, 0xE25A42B3, 0x4358B319, 0xEDF10CA3,
+0x580D1FDC, 0xFA8BB739, 0xF695FCD0, 0x390B1AEB, 0x9702FF90, 0xECD02CD2, 0x11D6230D, 0x6A58EA09,
+0x9C351CC1, 0xD7D18053, 0x0AB51A28, 0xE5805783, 0xF2036021, 0x1D6A258A, 0x148C8C08, 0xE34EC55D,
+0xED8F3628, 0x195B15E7, 0x5D0584AB, 0x585486C0, 0x332DD658, 0x8362A713, 0xEA8187C0, 0x6A14D708,
+0xB7C2F3AB, 0x5066A4AC, 0x36145A8C, 0xAAA63211, 0xDACE0D61, 0x0AF47EF2, 0xC8966F41, 0x16693F5F,
+0x4BA3A736, 0x40821E9F, 0x4C6211B0, 0xE6681EBE, 0x54A5D106, 0xB58F4FFE, 0x1062A2DF, 0x868BA08F,
+0x0366B4D5, 0x9500BE02, 0xB6677BCE, 0xE0C0DE04, 0x334DEEA2, 0x8A220289, 0x18B5EBB2, 0x3F108345,
+0x9EB89F89, 0xF58324E6, 0xFA677E76, 0x65E69428, 0x810C5C26, 0xACA01CFF, 0x4B644352, 0x8931A03C,
+0x4BBE4529, 0x20D9E61B, 0x3C7CC77E, 0x5F4D512F, 0xCBF07D04, 0x7293B08E, 0xC7A4046D, 0x9D96BDE5,
+0xE052CFDF, 0x4DBE66CE, 0x1A5ACD1E, 0xC3CE530D, 0xA594C78D, 0x1007B777, 0xCAB562A8, 0xE8BAF79E,
+0xB36B8DC7, 0x9514F8DB, 0x45EA8B0B, 0x561204D2, 0xBF004FFA, 0x464773A1, 0xFE666547, 0x3137E4CD,
+0x8BAE0AEF, 0x9AD966EB, 0xE7D97FFB, 0x37657419, 0x156298D2, 0x64EB79F1, 0x5D972BA5, 0x63CCB91B,
+0x04CE3EBE, 0xD96B9CD4, 0x5950FF01, 0xC727DB49, 0xE248C51E, 0x4320E39D, 0x9F761327, 0xA7FB23FB,
+0x75BD73C6, 0x75785734, 0xA2CCC66A, 0xE5468EDE, 0x97E57767, 0x0EAEF9DF, 0xCB5E49B2, 0x14EFCEB8,
+0x1A5768D2, 0x8BEF78FD, 0x2E8A0743, 0xFE41BC5B, 0x33A5A80F, 0xD0B5590B, 0x0A092B7A, 0x00AF6E21,
+0xBC990553, 0xDCE2CDEE, 0xD300BA6E, 0x237CF6E8, 0x8A137B26, 0x38D1A6CF, 0x63E7EFE7, 0x41F506CF,
+0xF234E448, 0x18A90D68, 0xF068C7BC, 0x8446F6CF, 0xE40DD4AD, 0x409E78B4, 0xBA36F537, 0xD1DA9CEE,
+0xF3BF8A3E, 0x72F65B93, 0x2B5400BE, 0xE498C426, 0x52497A2F, 0x641F746F, 0x3809F2A9, 0x87FCFDD2,
+0x777AD026, 0x2C0DC6F5, 0x2662A6E2, 0xA58FA2F7, 0x303200DB, 0xBB8226B3, 0x706FAAB7, 0x7E06C32D,
+0xF013431F, 0x26FE685C, 0x368AF941, 0xF4E1BCA7, 0x4C8A8526, 0xE5A83710, 0xD9CE8326, 0x2D845B62,
+0x6E476F69, 0x5243ED4A, 0xA74C81A9, 0xD60C73E7, 0x601D5A02, 0x0F05B26B, 0x43275EAC, 0x0549C980,
+0xEAEDAC80, 0x7571CEE4, 0x269DD440, 0xD3747FDA, 0x5FEE456C, 0x445C01F2, 0xCADF2A86, 0x272798C8,
+0x4532F82D, 0xEE6AF7F5, 0x0F9C491E, 0xB828B668, 0x56FB0D6A, 0xBC4D625C, 0x12E77CF0, 0xA9738DAA,
+0xED7D5A30, 0x59DA6490, 0x68D6EE66, 0xD62E299E, 0x4DC3254B, 0x4BEE0FEC, 0x52C6BAB8, 0xAF1BD16C,
+0x7086FAB3, 0xB3481E53, 0xBC18B2CB, 0xD3D533EC, 0xB6FBEE34, 0xFB82F89C, 0x1FEA1FE6, 0xCAB40885,
+0xCD846D6F, 0x5D6759E6, 0xD9737A2F, 0x142F6D40, 0xD0921A13, 0x990A406C, 0x605F82F7, 0xDBC17117,
+0x19789C1F, 0xF54229D8, 0x5D950FF4, 0x414E6435, 0xD41FBCC2, 0x25DB5DEA, 0x5EA5009E, 0x3704A31B,
+0x146E6EC4, 0x3DF4EC4B, 0x0481EBED, 0x5F12AE08, 0x3EADA6FD, 0x021D6D85, 0x678F9767, 0x68245F46,
+0xA2DDE9C0, 0xDA702635, 0x91ED9217, 0xCC5D7F0D, 0x39E20964, 0xC2C56B93, 0x3C57FA4C, 0x72F06DCD,
+0x6E933A73, 0x5C3CA86D, 0xF52A91AA, 0x039D4CB8, 0x29FECF87, 0x346124FB, 0xE973E41A, 0x7AE39FC5,
+0x5F5678C6, 0xF562FBFF, 0x6E045D41, 0xCF94047D, 0x605C3142, 0x6B1B80F5, 0x95F38B66, 0x26F3B529,
+0xFBB7D9F4, 0xCBDE6263, 0xA522CDF3, 0xD8B8F090, 0x34F4AD75, 0x81E906C3, 0x6CF665A9, 0xCBB7B106,
+0xDD699C28, 0x595F187C, 0xBF3202A2, 0x7A8B23D2, 0xD49908ED, 0x92D18B5B, 0x0D1E69FC, 0x8467D68C,
+0x87C14859, 0xFE5B0644, 0xB3F39A4A, 0xC25A118C, 0xD396669F, 0x72E8D932, 0x3E042BC6, 0xB0E72866,
+0x1C5855CB, 0xF29113FF, 0x07EFC126, 0x053586C5, 0x9CC4B7F9, 0x59639064, 0x31F672E6, 0x1307B18F,
+0x817BF93F, 0xC8CC6571, 0x1F8DDF0A, 0x5213FF33, 0x0F71BD62, 0xEDEC0BFC, 0x1ACB3727, 0x7AEE5A8D,
+0xADAE7ACD, 0x9F2ECA39, 0x8C966442, 0x62038E42, 0xE6A056B0, 0xB029AE5C, 0x6AE676A9, 0x0F40356D,
+0xC9621482, 0xEC2AE761, 0x72AC0603, 0x8DAC2939, 0x5A3A79D6, 0x12EF7853, 0x234E8183, 0x56CF6F12,
+0xA4575F6B, 0x6A363BD4, 0x7765D227, 0xA38BF5DC, 0x473A4C99, 0xF713EA5C, 0x12424B68, 0x7AF0B4C1,
+0x5789A20A, 0x43B059C5, 0xA0B1BBB5, 0x2DCC64B9, 0xB12C9C40, 0x98AC9721, 0xF150A076, 0xCE3284EA,
+0xE22E8713, 0x44DCC73B, 0xB258FD18, 0x76A8557B, 0x9B41C551, 0xB5B02D40, 0x6C3FD7D3, 0xC28406E4,
+0x4F407B7E, 0x3134DA87, 0x393CCCB0, 0xD7CEEC14, 0xEF8BA0DE, 0x7F3F98A8, 0x857D6B98, 0x7752E582,
+0xA6F6AD7B, 0xBB398679, 0xDA7B6330, 0x4EF42E74, 0x6913C527, 0x4499F129, 0xB00D31B6, 0xE802A22C,
+0x1D4E90EB, 0xC6118115, 0xDDB1373D, 0x034B9F18, 0xA67AAA85, 0x7F80A9D2, 0x80B5A0B4, 0xA1C4B10A,
+0x25E2B239, 0xACECE5B6, 0xEE7FCF72, 0x43EE8CB8, 0x246D8D98, 0x477483BD, 0x03FB8D38, 0xB2DCFB5A,
+0x27A5E59A, 0x67F7D724, 0xBE2A71D6, 0xAFA92B70, 0x56F296E4, 0x3B1101DE, 0x97C99E26, 0xE35A5800,
+0x603A02FD, 0x95AABC8B, 0x32B6DF70, 0x9FFC20AE, 0x069298AD, 0x43014F3F, 0x90AE1CC6, 0x657FABF0,
+0xD06D082D, 0xAD5F170B, 0xD3BC0015, 0xC984429E, 0x498C4890, 0x2F0BFEC1, 0xEC7596A1, 0xDD2B18CE,
+0x8ACB3D47, 0x0D337700, 0xD7BFF3EF, 0xF9860290, 0x00DBB75B, 0x9A104CA9, 0xB6E78208, 0xFE4ADFA5,
+0x5304EF35, 0x99A973AC, 0xCFDEEF3D, 0x4934140C, 0x155E8140, 0x19259F18, 0xA309DE73, 0x3DDA5AF8,
+0x57B56BF0, 0x3C45EE9C, 0x96898F2F, 0xBF8B07C9, 0x33E0D964, 0x7FC405B2, 0x13C31843, 0xB681206B,
+0x18AA19D4, 0x2C12C45A, 0x67DF8C56, 0x6C56B948, 0x334DB6D7, 0x9ECCA910, 0x1C8EC4FD, 0x778B60D0,
+0x8BC95C4A, 0x5AEA5FC4, 0xABA57E0A, 0x3FB4B4AE, 0x466A33D2, 0x4F1EDC0E, 0xE79CD38F, 0x3EF2AE22,
+0x1E763C96, 0x9BA605DF, 0x184CE2BF, 0x072B35C9, 0xED034BEC, 0x5103DF9B, 0x8A696929, 0x89A719FC,
+0x5485D93F, 0x06998E3D, 0x079ABA58, 0x5D5B1485, 0xCD88676A, 0x7A62CE41, 0x84201668, 0x89D4E64C,
+0xC95B0807, 0x9C33189C, 0x529A569D, 0x4B8DEB32, 0xF64D71AA, 0x53B1495D, 0x3259EC76, 0x05A9C520,
+0x653C5C43, 0xF66DD6EE, 0x9BAA0145, 0xBBD5665A, 0xD89F98DE, 0xF53C10D6, 0x0F66F8C0, 0x7BBE623D,
+0xFB985162, 0xD2B37100, 0xA9859043, 0x1F4A8D75, 0xF9931C9E, 0x2FACF6F9, 0x67723215, 0x6D3B7CE8,
+0x0AC9F1A9, 0xF6A81262, 0x11F88794, 0x5D2BEEB5, 0x866B0138, 0xF4F5CC81, 0xF977E316, 0x45F7E272,
+0xC6D2D58D, 0xBAF91C1A, 0x68AF6CD0, 0x0A33E6DE, 0xCE799DB5, 0x3FE00B40, 0x1A56FF6A, 0x561F49C0,
+0xF2E2E217, 0xFB7DF2C8, 0x3085180A, 0x1C281CD9, 0x48F67AC0, 0x5282DF34, 0xB1A8D190, 0x33C7C866,
+0x276F1CE5, 0x58F8A662, 0xE6DB35DC, 0x64D64D2D, 0x3D65AD6D, 0x53392EEE, 0xF6D8A189, 0xD92EB9FF,
+0x7DD09CE1, 0xE7F38B74, 0x9E5F0E31, 0x474366D0, 0x4A6728A4, 0x9A49F368, 0x3BBD7A84, 0x36638650,
+0xF7480052, 0xE1CF0E06, 0xB75F5BA6, 0xB090F509, 0xE7B7A220, 0x29662FE3, 0x907B44C5, 0xF5992E6C,
+0x477A5C30, 0xCAA0670E, 0xE75FEE1C, 0x3CA21577, 0x61DE8EB7, 0x9D8C8FCB, 0x4B0F8F68, 0x6DA5E0D4,
+0x259BA104, 0x0B4A7253, 0xE35AEBE5, 0xE3FB888E, 0x8E86D4B1, 0x26E9DA90, 0x35DCF63A, 0x34B87808,
+0xE266B7EF, 0x137045DC, 0x64975E4E, 0xA4CD42D2, 0x5AA05984, 0xE00A716D, 0x8A2211EE, 0xFCF1C4FB,
+0xC1B17FAD, 0x81062347, 0x7BDD4C74, 0xF5FE33B2, 0xAFF702FD, 0x6AF3C91A, 0xAE5E4ADB, 0xA2F97D74,
+0x756E272B, 0x6324061F, 0x265E2BEE, 0x2187D372, 0xF2A55D69, 0xE056A543, 0x7409B5B0, 0x4E4634E4,
+0x46AC4271, 0xE2F2A30B, 0x0B792AA7, 0x6043B50F, 0x3427703E, 0x8C5CBBCC, 0x7CD96194, 0x28CE8582,
+0x51A78418, 0xE2EC6444, 0x3206C654, 0x0260DD8A, 0xF4B65E46, 0x70AD8BD0, 0xE41CBF32, 0x6640316A,
+0x5D82F3E3, 0x01856BB7, 0x9F896BF3, 0x4274F376, 0x83ABFB53, 0x0BE9857A, 0xB3BC7EC0, 0xF49E75CE,
+0xE4AB4922, 0x59AECB9E, 0x9E77ED89, 0x716D7511, 0x725DCCBC, 0xF63B8262, 0xB7064215, 0xBF804604,
+0x7FB8BFF7, 0xD567921C, 0xF2243011, 0x6A491D6E, 0x09901253, 0x91D53E10, 0x769EAA34, 0x720A19A3,
+0xADED157E, 0xAE095C6D, 0x08C04ECA, 0x026A163F, 0xBAF30C7C, 0xBA584E3D, 0x21F2A751, 0x33FBAF10,
+0xF61F0F49, 0x3AD71B28, 0x62A6E445, 0x32ED383F, 0xA0D0DA78, 0x5B5F4477, 0x7E881CEE, 0x4BBBF84C,
+0x9F325980, 0xF1034A69, 0xCF34F889, 0x58AE9650, 0x0EB7A5D2, 0xB719031C, 0x832DEC40, 0x4DA847B6,
+0xA49666C5, 0x978BE654, 0x136C4354, 0xC98D290A, 0xB2E6E132, 0xB966E5AF, 0xB0EA90A6, 0xF04CE33D,
+0xAD1CC155, 0xAAD1353A, 0x65509624, 0x7170FC04, 0xE8358CEA, 0x08C8ACE3, 0xB8B87087, 0xD1B1BBF3,
+0xEFF2B4DA, 0xBE63B9E6, 0x0153DDF9, 0x191504CC, 0x105F1BCE, 0x386F0258, 0x46BE65F8, 0xD5F3A309,
+0xE83AEB5D, 0x6314CB45, 0x75B8A290, 0x5E71DC8A, 0xDF0D5F24, 0x0EB15029, 0x904744A2, 0xDE55C0DF,
+0x41DEF0DF, 0x42D626E8, 0x4FDA3985, 0x53B8A703, 0x139F555E, 0x0CDB305C, 0xD1B5512E, 0x3B2BDD8E,
+0xBBC06CA9, 0x398AE957, 0x145DE176, 0x6D638E90, 0xDD058DAC, 0xF967A057, 0x16FDE84F, 0x2EE1843D,
+0x8525BF55, 0xF63C303F, 0xF085141E, 0xC60C0357, 0x4822A399, 0x8E22F85E, 0xB64E76A5, 0xFA532A10,
+0x6038FAA9, 0x0DE94EF3, 0x307A22B7, 0x2CE70E62, 0xAA872D94, 0x2AD90839, 0x1CBF2807, 0xAB5C4433,
+0x2911B633, 0x3BCCC43A, 0x9140970D, 0xE14091D5, 0xF957DF19, 0x0A399824, 0xD28711C6, 0x02ACF788,
+0x17765EAF, 0x95EE40D5, 0xB368C9A6, 0x3BD9749D, 0x0EF427C0, 0x2ED1FFC4, 0x84709FC1, 0x0B081E2C,
+0x904CADD6, 0x09734067, 0xD5DEDE37, 0xDB7F9E9C, 0x52FA37EB, 0xEE5E4A48, 0xE294F915, 0xAF86C7C5,
+0x4049BB87, 0x654956C6, 0xFDED4C81, 0x0DA7488A, 0x43AD3D5E, 0x45DB415B, 0x8CBF2F05, 0xF91B1EC1,
+0x508DDB95, 0xCE0FAE2A, 0xD78EB905, 0x75E1224D, 0x464A8C3E, 0xA90B1266, 0x48A2C38C, 0x82583B9E,
+0x9D40057D, 0x01B79A6E, 0xEBE06B80, 0xCEB96A8E, 0x74B8603F, 0x29D6B9DE, 0x08F5FC16, 0x0C30B487,
+0x788171EC, 0x1C991899, 0xD62D9616, 0xDDEE30B0, 0xA25A5833, 0x4D57E119, 0x0E56A74D, 0x9916C3FD,
+0x033D32A0, 0x00390D76, 0x249AF587, 0x3D2AEB81, 0x6468E1A6, 0x0BE04BBC, 0x5C3109F9, 0x22958E27,
+0x42E810A1, 0xC6D4847B, 0xB6C02C89, 0xE5CBF737, 0xF729C7B2, 0x9605BB78, 0x36232D99, 0x04309787,
+0xB0167FEF, 0x79A1E4D7, 0xCEE77FC8, 0x792781B8, 0x0AD9DD2E, 0x2F0BF688, 0x58236486, 0x9A0104E5,
+0xCF127002, 0x9A80047B, 0xFC0A813C, 0x54ED2506, 0x7D5E306A, 0x0AC78C93, 0x6C54A584, 0x30DB9860,
+0xBA1CBD59, 0x9C5249E4, 0x9E2096A1, 0xC6E72399, 0x78FB8746, 0x89254CB5, 0x3FC8AFF8, 0x18C420B8,
+0x3ED6468E, 0x8826E453, 0x8F6375A4, 0x17B8E485, 0xDC1A0760, 0xB0A2E7F6, 0x3ED2BCE1, 0x05802B1E,
+0xBFE7F96E, 0x855972E2, 0xF30F2AAF, 0xEC3A888E, 0x463254C4, 0xBD14C53A, 0xABE2F44D, 0xEE00EAFE,
+0x462347F5, 0xB71E0440, 0xCF27477E, 0x4C5C76E5, 0xAAF3AAAB, 0x4DDF3EC8, 0xE6D3E296, 0x1716902D,
+0x200D1D75, 0x775BD8B1, 0xC8274D6E, 0x564DE0C0, 0xA9A7F44A, 0xDF45AFF6, 0x986687B9, 0x73F798C8,
+0xC69460C1, 0xA8AD8414, 0xDF83B455, 0x15422608, 0xE6EF90F4, 0x7E4ED88B, 0x02F9D5AC, 0xF6AEC31C,
+0x465C62BD, 0x5BB98A04, 0x2A5FEF48, 0x18797684, 0xE07BDB83, 0x4B8D6B05, 0xF3385384, 0x438245E9,
+0xC8CBF9F5, 0x095B1BF7, 0x9DC143F3, 0xE21C0266, 0x4F3CFAD4, 0x175222E4, 0x79E7139E, 0x4CA7CA07,
+0x63970FB0, 0x8B97EA27, 0x258F2F38, 0x4AA2BE56, 0x1D032F62, 0xE4B0F912, 0xFD877EF5, 0x9F37702E,
+0x6A377731, 0xC79336DA, 0xAD85FEF3, 0xB73AA4BF, 0x8F9D1F07, 0x1157C202, 0x20A07756, 0xD645DAFE,
+0x4ABC13BD, 0x48BE449B, 0xCC8F6CC2, 0x0F156230, 0x0AE6BC9F, 0x40C473C9, 0xEB5CC8E6, 0xEF3D55DC,
+0xFE7CD47B, 0x46C4D6B9, 0x2A2F6F9D, 0x100AF3ED, 0x4B43D383, 0xD254CEB0, 0xE99CE80A, 0x7C4DFE30,
+0xF32F655F, 0x958C3873, 0x559A02D1, 0xEAF08638, 0xAE3CE5C1, 0xF2B8E930, 0x0981EC57, 0xEA3321A2,
+0xD91BCFB1, 0xADB53844, 0x7EF3CB47, 0x64253867, 0x7BF10E88, 0x6B82CB42, 0xF403637A, 0x09A814EF,
+0x655A69DC, 0x70A7390A, 0x3B20620A, 0x1A9C0BC9, 0x21E17C10, 0xF3BF1D19, 0x7C07CE57, 0xFD01A385,
+0x8C8227AF, 0xB8D843EE, 0x69C0814A, 0x241E612A, 0xD936C4D9, 0x9F0EA690, 0x3A75E5E7, 0x0A52D7C5,
+0xF3C3285E, 0x2C429F8B, 0x25B7E534, 0x94BE83EF, 0xD073CA57, 0xE00D16F8, 0xBF210C52, 0xFFCB4F98,
+0xDAB6457C, 0x96ACEA53, 0xB01DFF20, 0x0FA8F2B9, 0x19FF426F, 0x74AAF4C5, 0x9F8E5CC7, 0xD8689BCD,
+0x352C0A7B, 0x9E61F62E, 0xC344CF08, 0x05ED1CC1, 0x0319ED10, 0xBF5C7663, 0x03633BAA, 0xCB996D54,
+0x324713F8, 0x6F9E2486, 0xFC949461, 0x944BAEBF, 0x76FAE5EB, 0x93DFFE34, 0x3B4CA6C0, 0x1C190D12,
+0x0FA8A697, 0xF4E928F6, 0x8A3BAE15, 0x7C803B00, 0x659355C6, 0x5C319379, 0x2DA90B42, 0xC2CE3772,
+0xFEB1FA7A, 0xC665B9CA, 0x78CFE8FD, 0xDDC68CDA, 0xC9813C31, 0x86B0EE94, 0x559224B3, 0xE35E37D5,
+0x2CB72CB3, 0x47E2FBAE, 0xD7AF8345, 0x827D1A90, 0xCBF99D2F, 0x6A597942, 0x1243A578, 0xAA481501,
+0xFF4D4D92, 0x2B29AC0F, 0x61C86C40, 0xA2F773DC, 0x41693D10, 0xD803282B, 0x16021C04, 0x1549CA57,
+0x0229CDBD, 0xF669ABE0, 0xBD010619, 0x79D9B2DB, 0xF5584BC6, 0xC70F2003, 0x7EBE840A, 0x224209D3,
+0x3440654D, 0xE5EB5CDA, 0xE06A9972, 0xCEF893DA, 0xC3202594, 0xF50D14AE, 0x971E16ED, 0x22DDA285,
+0xF59C39DB, 0x42091D77, 0x3FCC542C, 0xBE140DF3, 0xEB1FC088, 0x0219FE8C, 0xCC959BA7, 0xE1927150,
+0x8F77171A, 0x6076DCA7, 0x223A9DD4, 0xC10004A2, 0xA8CC8F8A, 0xC7BBD9E2, 0x292FF0B3, 0x3CF05F53,
+0x432E3A80, 0x78060171, 0x77B93C12, 0xAED35595, 0x6B4A0FB2, 0x3ABEE02E, 0x714BE2AA, 0xDC7ECBEB,
+0x74518E5C, 0x97DC698F, 0xB0E72360, 0x24058317, 0xEDADAC9F, 0x904771D2, 0xF4064759, 0x6FDAE38C,
+0x25885713, 0x5BAF81A4, 0x5475DDC8, 0xFB766281, 0xF9CE1986, 0xB94E6266, 0x188A0B09, 0x1F6A1530,
+0x8A95C0DD, 0x71C80045, 0xAF6CDDF5, 0x0CB0AEE0, 0xD6E655AB, 0xABDC800C, 0x26FC6082, 0x7501C8AE,
+0xBA5FC11E, 0x5DDCF831, 0x9772E813, 0xF08A0729, 0x020F3881, 0xD61B7499, 0x76D9F6EC, 0xF7E1BD24,
+0xBD9D8D3D, 0xD787014D, 0x3EA45869, 0x1DAFEBEA, 0xA25B605F, 0xD848C37F, 0xB6BD37A2, 0xC7101088,
+0xA737759A, 0x2D47DC54, 0xD399F473, 0x38DDFCF9, 0x40B1D36B, 0x045EBBF4, 0xFD0B3E1B, 0xCBB3EA00,
+0x8F5EB4C5, 0x88584C1C, 0x5886693F, 0xD2D4C16E, 0x6507FDB7, 0x376038A9, 0x6CDD577D, 0xDBBB59F3,
+0xE387720C, 0x1AD8E6A8, 0x5CAADEAB, 0x6DF010C7, 0x4ED2352B, 0x7DD9172B, 0x37742C38, 0x6C48E9A8,
+0xB8336421, 0x0318D0C7, 0x36C2F3A9, 0x11A9CD37, 0x2F636569, 0xF0C9A5F5, 0x623532DD, 0x4A220AB3,
+0xA032B835, 0xE1722D2E, 0x9B7ABC9B, 0x3B3A92C9, 0xC0A574FB, 0x143FE19D, 0x4E5B3D71, 0x5B84AC3E,
+0x335C0651, 0x0E44F3A3, 0x98BF2418, 0x0C6854D1, 0xA371D3DF, 0x7CB41A2F, 0x4676F600, 0x03B34E6B,
+0xFA0E24CF, 0xDC214128, 0xEEF4E3DB, 0xD93A5A42, 0xC536C5A1, 0x041C8E9F, 0x4C17366F, 0x967ED6B7,
+0x05D23D96, 0x88A7A74F, 0xC303EC9F, 0x90952997, 0x3DF4F34A, 0x62A41DF6, 0x9B7D1B0C, 0x6D93185C,
+0x057B02FF, 0x8314313B, 0xE237C043, 0xE3EF515D, 0x6D92F7EF, 0x928D3492, 0x87E5F6E2, 0xA275C377,
+0x0F69DAB3, 0xB9E42C7A, 0x97A6818A, 0x66711CFD, 0x6E71F9B6, 0xB650C1CD, 0x03F0EBDC, 0x2D470570,
+0xC6176F85, 0x6F99BA58, 0x2E8954F1, 0xF235E05D, 0x500B8569, 0x1A60BAAC, 0x17480761, 0x4E739B29,
+0x83805C9E, 0x04FB73EB, 0x386BAC60, 0x2C30A9AC, 0xA61FD69C, 0xF2FD11C2, 0x1E4D0A9C, 0x4B150FBA,
+0xD6DAAD47, 0xCD68F833, 0x0BD1DC69, 0x1775B2C3, 0xF89AD984, 0x7DD919CA, 0x55C8393D, 0xFA0D6C89,
+0x056FEB00, 0xFD749C86, 0x76E78D17, 0xCF6849B4, 0x997E1E0F, 0x2F1432AB, 0x2A51F0D6, 0xC3C336F1,
+0xADAC6C96, 0xB2A0CDD7, 0xE9C58D29, 0x98363C1A, 0x6485160A, 0x89E944ED, 0x405DAFD4, 0x9B2FEF8A,
+0x0F6D078A, 0x7E98BEDB, 0x3DB4D2CE, 0x3A9F88CA, 0x31407639, 0x1336543F, 0x8BD2CB36, 0xB12D71C0,
+0xC9FD5D93, 0xB7BAADCA, 0xC4B0AE31, 0xEE3358AE, 0xBC402483, 0x68E28511, 0xE18BCD67, 0x79A0524A,
+0xB05A6CC3, 0x055231D7, 0x571382B1, 0x5C5BDB89, 0xDED25235, 0x5C04A35E, 0xC34481B1, 0x921D3340,
+0xE1573CA5, 0xE037C597, 0xD7BE44F6, 0xC042AF60, 0x331CD227, 0x01975B29, 0x8800694B, 0xBD7A811D,
+0x5CFAD1AA, 0xD45EF65C, 0xF0475186, 0xFC1B73BA, 0x66EC1769, 0x80C10C40, 0x5FA365B6, 0x6C92286F,
+0xCC907E28, 0x3C173165, 0x2C6F7E77, 0x10E65B92, 0x1852B2D5, 0x24D1EE4D, 0xFA1E768F, 0xCD7FADFA,
+0xEB3FF0E5, 0xAD39104F, 0x8ED0778A, 0x6CE224A3, 0xB0136806, 0x3FB7C18F, 0x9D49F360, 0xC8BD5586,
+0x9F1369BE, 0x4E2D2C7C, 0x0860FA04, 0x51CB79E7, 0x4CF9BF3F, 0x89AE0951, 0x824F4298, 0x49B5B57C,
+0x2920ED07, 0xDE787E04, 0x58F5CE5D, 0x1232A7A9, 0x5E7DA22A, 0x35468393, 0x57D8A35F, 0x06CF9DE0,
+0xDBF4BD8F, 0x6B93DCF7, 0x986A3B9E, 0xDEF2B62D, 0x948162B1, 0x42709ACE, 0xB15B758C, 0x4E63DA36,
+0x72A785EE, 0xE911BD1C, 0x507BDACD, 0x632BB2BE, 0xA134FA3A, 0x0DB26965, 0x1174905F, 0xE0E49B10,
+0x23F6AA31, 0x06129680, 0xAE0943A3, 0x140D84ED, 0xF1C15B0C, 0x20699F6A, 0x4AB9B363, 0xBCE94645,
+0x877CC4D5, 0xDBB033CB, 0x0F63A6EA, 0xC65FD539, 0x2602E2FA, 0xB199ADEC, 0x4D0C1F79, 0x48AA4CF4,
+0x0F2E4EC1, 0x7BB29812, 0x3B7C4D0A, 0x30D9A31F, 0x6A0AED49, 0xE60263A1, 0xD21C0CFA, 0xC67F787E,
+0x074867BF, 0x0E5BEE50, 0xD29C1560, 0xCE0BCCC3, 0xC940B2C5, 0x48EB1F83, 0xA67AC95E, 0xE92C4C5B,
+0x64051504, 0x98A897B3, 0x0B9A6016, 0x2F51C7F6, 0x8914E004, 0xB6C061C6, 0x1DF12F45, 0xC0386451,
+0x2D83F963, 0x3DF359CB, 0x7E59F717, 0x5D1A2A51, 0xC356F9C0, 0xAC597C37, 0x5D7B96A4, 0x649E6C75,
+0xB7BA237D, 0x1B22FD0C, 0x28F7EF0F, 0x2A653844, 0x87FD6D02, 0x695E6377, 0xC4F2D2DD, 0xF233F2CB,
+0xD7D07614, 0x303B4CDF, 0x3045B6B1, 0x26A26E83, 0x61ED51E5, 0xBD35F65D, 0x272241B2, 0x1D834A19,
+0xFC3CE8D0, 0x80E5A308, 0x0E549668, 0x185CFAAD, 0x94015AB8, 0xB899DA4F, 0x1F7BB196, 0xF9CB0A0A,
+0x0D92F5E2, 0x50240497, 0x28EDA83D, 0x6AB90F02, 0xC8F102C4, 0x1D31B7BC, 0x97B1F7E6, 0xDC408B8C,
+0x3275C4FE, 0xE07E0732, 0xFD7BC37D, 0x9D254788, 0x72832E3D, 0xFCD5EE1A, 0xBB78E64F, 0x5A8C70A2,
+0xE0FFFD4D, 0xA0C025E2, 0x8EE949B8, 0xF21BD31E, 0x1E4DC92B, 0x1A48CCA6, 0x5C59E4D2, 0x73E2AA8F,
+0x0306BD28, 0x9A1519E3, 0x3F5DB3A7, 0xDD829E21, 0xBCE9B49C, 0xB14200B0, 0xC66CCA43, 0xEA51C6B9,
+0xB62213B8, 0x599ECA39, 0x9F6BC7D5, 0xDE727C27, 0x0C2D2485, 0x93AED117, 0xAA782119, 0x87DEF9E8,
+0xB4D61161, 0x98BE7B35, 0x5647F011, 0x3EFB8C6F, 0xFD14D329, 0x5518BDDA, 0x2943BB35, 0x26A7CC78,
+0xCAF0D1D3, 0x1AE19B3F, 0x6A2FB88A, 0xD2B61C0D, 0xD968E62F, 0x8CB3EC52, 0x34452CB5, 0x0B899E67,
+0x54DD54A8, 0x7FA2ABB3, 0x1C622DFB, 0xB543FD9F, 0x17A55A00, 0x9DA29A60, 0x9B30E3C7, 0xEDFE59A8,
+0x9541EAA9, 0xFB5D8466, 0x3C90B62B, 0xBA38F6FF, 0xAE7784DC, 0x74978ED5, 0x98814331, 0xA7D5E599,
+0x6F8926E2, 0xCBF3EA0A, 0x281FD7BD, 0x4614CF8A, 0x8E1595D2, 0x3E0919B1, 0xD4E965AC, 0x21278373,
+0xA7C1B065, 0x1195AC45, 0x7BEB3EF4, 0xB984DA54, 0x51B6F325, 0x4BC67E15, 0x82C28C05, 0xC52D0CF8,
+0xA9E008A9, 0x771E5FAD, 0x26D2AAAA, 0xAB79CA58, 0xC9C2FD4F, 0x6B5F3B96, 0x9E5A83C4, 0x3E8F4096,
+0x1A9CF4C3, 0x243B1CDB, 0xC905CA7E, 0x00D91040, 0xDFBF4BA2, 0xCEE79F94, 0xCDA9E9CA, 0xC61AC89F,
+0x104AC302, 0xBEB6D15A, 0xB424F5D6, 0x1F70FF4D, 0x72088D68, 0xAD3E4957, 0xC598734B, 0x9028C32A,
+0xB3CAB27E, 0xAA2AB05E, 0x627CAB35, 0x87871E6A, 0xF31D068D, 0x83CC03F2, 0xD357A80A, 0x0674F375,
+0x3DE79648, 0xFAF4B917, 0xEC369D83, 0xE9C40A9E, 0xC117AB8D, 0x5BF87C2E, 0x16DA5177, 0x47881626,
+0x7CF858A2, 0x669FCEC7, 0x510C7B19, 0xF6D9A200, 0xCC136A79, 0x541F818C, 0x6FCF1ED2, 0x894D60FC,
+0x29B232C3, 0xEC859AC1, 0x485D7EB5, 0x3727FF17, 0xD1DEE978, 0x6264F8F6, 0x0AFC70F8, 0x37D5EA98,
+0xC1C9AB1E, 0x0095E98E, 0x2B3EBD5D, 0x86A9D924, 0xC78048F1, 0xF12590B4, 0xE69750A7, 0x6DCD14EE,
+0x7E2BA031, 0x204B4BFA, 0x79C7E71E, 0xB7F0FAF8, 0x5AD05369, 0x0C4693CF, 0xD442059F, 0x2F3F41CE,
+0x442A61A2, 0x09FF2C72, 0xAA713529, 0x08EE294C, 0xA0F77A89, 0xB2383434, 0xB373F81C, 0xA2332383,
+0x77617B54, 0x95D42B1D, 0x802F7DFE, 0xA5DD9217, 0xB0A7FCBA, 0x260465F7, 0x1FBFE6C6, 0x1529A256,
+0x4AAD173F, 0x7D2437B2, 0x1D85EDF1, 0x3AEFFB1B, 0xC49A225D, 0xF5C3E614, 0xB9B604F1, 0x2509DE4E,
+0x8EBD99D9, 0xBBA30688, 0x95961940, 0x946C0327, 0x42121FCF, 0x688C6303, 0x367C1108, 0xC23C85B3,
+0x71339239, 0x15B43C60, 0xC264CFF3, 0xCAB01877, 0x381CC10E, 0x5C1B6303, 0x1C8E6561, 0x5C1F3B69,
+0x0865EDDF, 0x721B6AD5, 0xC20EBFAC, 0x753EA533, 0x36069125, 0x44FCD441, 0x99F96EFA, 0xA298B3ED,
+0x9A130B2D, 0xFEA4D969, 0xADD28ADA, 0x0D8E87C3, 0x7603D451, 0x971CACC5, 0x8B058FE5, 0x57A14373,
+0xE58C9A3E, 0x8B964727, 0xFC16CE4D, 0x648D3FCE, 0x879A10DB, 0x244245F3, 0xE8F5A2AF, 0x7BB7D5E1,
+0x4FB10453, 0xE6FE8A44, 0x18516E7A, 0xD745FE7B, 0x44A6CEAD, 0x0115767D, 0x15DA41AC, 0x7E3B8D9A,
+0x8AEF9F09, 0xC3C9A2C5, 0xA60A1A40, 0xC046506D, 0x62A3C87C, 0x8BDFA97F, 0x6CC68E11, 0xE26A90B1,
+0xD3666E45, 0xAC43FF68, 0x94F68F0D, 0x40585C97, 0x908A6385, 0x128C13A2, 0x8E75D1CD, 0x1CADA336,
+0xCCF961E4, 0x5FDFD169, 0x90116B77, 0x49B477C9, 0xCB3607DA, 0xCECB1D72, 0x0497A328, 0x67C3AB94,
+0xF7145E74, 0x96071759, 0xC73A8973, 0xD1C069B9, 0x9257631C, 0x5049CBFC, 0x1237E902, 0x7C11E0C7,
+0x4737A2F5, 0x3138382E, 0x69619086, 0x4ACD7F31, 0x2373A43D, 0x11699ECC, 0x2EE2B713, 0x7992B6DA,
+0x6B148B75, 0x5F058765, 0x63618B81, 0xB4260E12, 0xD4038AF2, 0x04FF10CB, 0xF28B179E, 0x6B210ADA,
+0xE4A5B0A5, 0x6D162684, 0x869380EF, 0x8C1F246F, 0xC00EE911, 0x63551552, 0xBF6929CE, 0x66F7B737,
+0x30F18876, 0x3E5EC0E5, 0x9E338EA5, 0x5EE8E39C, 0xB1A180D8, 0x8DD2A31E, 0xBD7CD148, 0xD3ED3348,
+0xAE81DEF1, 0xC26E19C2, 0x04B2D54F, 0xCC8DEB5F, 0x37B130DE, 0x595B6EEC, 0x28BAD54C, 0x02A4DB43,
+0x8FA5EA35, 0x2B15F6FB, 0xB1EE9F40, 0x1A96573A, 0xB01181B5, 0xCD8B15AD, 0x5CC1AB50, 0x59110736,
+0xB6F3DCB2, 0xBFE517B5, 0xAF21256A, 0xDC10AEF9, 0x8D24F1E4, 0xE1642B61, 0xE60872E0, 0x5DD0D9B3,
+0x49AFB14A, 0x26252E4E, 0xCCE80B95, 0xB9FE5280, 0x5E9F18CE, 0x67E46F19, 0x5F2109BB, 0x1FB97FC6,
+0x385AE25E, 0xC23ED76A, 0xBE31D7B9, 0xB34FEE7C, 0x0AB79BD3, 0x09C1ACDA, 0x4920E8DE, 0x2DCAE4DC,
+0x84E66411, 0x07821D6A, 0x034080B0, 0xE57F3C53, 0x0913B171, 0x3D0BA1B3, 0x096D0D38, 0x67EDC966,
+0xE65E058E, 0x781FC289, 0xB55A964F, 0x5C0F7748, 0xD9BEC30E, 0x3091AB20, 0xDC80D759, 0x53C6E687,
+0xA5B89B04, 0x25690C69, 0x6A67ABDD, 0x3C8B4407, 0xA59F5B03, 0x46B42669, 0xA6A80583, 0xFE004358,
+0xEF18C565, 0x90800862, 0x18547E3E, 0x09FE5B7D, 0x88CE1F52, 0xAE8F5F49, 0xB53D04C5, 0xE31E5ABD,
+0x462DBF86, 0x7C04A274, 0xD3E0DF29, 0x032085C4, 0xC8A4B037, 0x3298216C, 0x982F0E0C, 0xB47F154D,
+0xE5067B19, 0xD2EA8C29, 0xDDB457A6, 0x23E4798A, 0x285CED59, 0x5CBA5D57, 0x616551B0, 0x0FB270C8,
+0xF5143237, 0xD51E22AB, 0x5D837D70, 0x7834B050, 0x4BE51D48, 0x493E5C78, 0xB700A33F, 0x2F462FF7,
+0xABF4F84D, 0x7546247A, 0x71D24D1D, 0x8D35A651, 0xED192899, 0xE489A749, 0xFF2ED3ED, 0xEC15B82E,
+0xF01CC580, 0x2A54F526, 0x8787C5E7, 0x85171E79, 0x5E3DADCD, 0x11826D03, 0x8DFAF5CE, 0x05E56403,
+0x5ED4916F, 0xE14DF86D, 0x151FA591, 0xC83AAB61, 0xAA2C8590, 0x38DF22A0, 0x5DFC4DA1, 0xDD255F0B,
+0xA932DD5F, 0x91B599C5, 0x075BE2E7, 0x91F7CB84, 0x19A00D26, 0x2BB5B17C, 0xB8C5B1B0, 0xDEA0C9D1,
+0x18CDACA2, 0x14D69B25, 0x68DACD31, 0xEDCD75DC, 0x6DD9D543, 0x6DAC9EEB, 0x1F9E0617, 0x05A1FCF6,
+0xBDFF8945, 0x2235DD46, 0x8B6F9509, 0x6A311FDB, 0x60988F82, 0xB0250F12, 0x7E6B4DF6, 0xE01DE2ED,
+0xECB744AD, 0x6A040FD1, 0x82449AF2, 0x20ACA8A6, 0x023F56E5, 0x946C2E6C, 0xDBE2C494, 0x02899DFB,
+0x52CD73BE, 0x69B2B4F3, 0xDBEAD106, 0x49D05423, 0x5792809A, 0xA8A24F07, 0xD19D7E08, 0xB5BA39C3,
+0xAD355E83, 0xC3D46E86, 0x02FEC5FB, 0x8B3208DC, 0x74E39465, 0xD0B45B05, 0xFDF790E3, 0x1C6133E8,
+0xE8C80849, 0x833F1BBD, 0xFA3AAB6B, 0x7BF30A33, 0x303EB0C3, 0x3932B3F2, 0xAD962ECE, 0x8181DDE1,
+0x9FD48318, 0xCE1E2FAF, 0xC788E7BF, 0x240C5875, 0x422D6BB4, 0x76FAFD4B, 0x7DB4754B, 0xC8519A4F,
+0x42F6BD7E, 0xD064AB08, 0x00A11183, 0x185FCACB, 0x86015B28, 0xBBEAAE6C, 0xB85BEF00, 0xBBB97B7F,
+0xA3C0AF07, 0xC3A2335E, 0x862368AE, 0xE24D601E, 0x70516085, 0x1658EF1D, 0x0A6057DC, 0xCCA9CE0C,
+0x5A5807EF, 0xDF6C769D, 0xB3D8BDB1, 0x6C641575, 0x94A5D884, 0xE758DE45, 0x909B9FF4, 0x63AE6227,
+0xC9CDD076, 0xA1627EE7, 0x51745E6B, 0xD186FD30, 0x3D185295, 0x6195E810, 0x6675239E, 0xF82314A7,
+0x98229E67, 0x835AC114, 0xA29EA3DA, 0x38989724, 0xC419E52B, 0x44C0E999, 0xC26168AC, 0xCF3DB027,
+0x44F49737, 0xFC681A09, 0x3D8FFE73, 0xC754BA8E, 0x21E70A57, 0x67181F47, 0x1B8DEE90, 0x8ABA99E5,
+0x4F3DE196, 0x1067E129, 0xEE471AEF, 0xD05DE072, 0x324B09B6, 0x9AE74FEA, 0xBC2670FD, 0xB0E310D5,
+0xB0417D27, 0xF2FE3C08, 0x61C1820D, 0xFB5B220B, 0xC6722494, 0x9A2EDBFD, 0xDDF5F967, 0x2ADCEC1C,
+0x801E21EB, 0xF6E6E554, 0x4C4B4358, 0x3C03F065, 0x7E1032D7, 0x5ADA67C3, 0x7E6AFC37, 0x364D5818,
+0xBB5367FD, 0x91737F4A, 0xD06B7A97, 0xA9678529, 0xECFA6742, 0x975469D5, 0x0134B1E3, 0x1D702CAD,
+0xC326748B, 0x1635F403, 0x7254DC77, 0x318EC58D, 0x270A0D45, 0x770249D6, 0xE6771F77, 0xA1AF5F23,
+0xADF770DD, 0xD8F17915, 0xA57A2B4F, 0x6C5E973C, 0x49792380, 0x5B767B1C, 0x4735829A, 0x62ED0F1A,
+0x702D7EBE, 0x31F730CE, 0x79219CEB, 0x2C03091E, 0x71F54195, 0x3599262E, 0x991ECEC2, 0xA58CA835,
+0x06BAA76A, 0x48170B89, 0x9D720367, 0x1B460079, 0x98363BE7, 0x96075401, 0x0A117E33, 0x73A4BF8C,
+0xB111913D, 0x3663A0A1, 0x2068CCF2, 0x45493102, 0xEE7E59CA, 0xB4048DCA, 0x78F8C03E, 0x013BFE03,
+0x01A13EFA, 0x8C9130AC, 0x030D4F2F, 0xB350CD76, 0x19601C1F, 0xA2FF1EB1, 0x3F9D3AFF, 0x8220B3C4,
+0x2DFC404E, 0xD3DC9634, 0x73836F5F, 0xC744320B, 0xB5760896, 0xB07A923E, 0xD56C62AA, 0xABADF96B,
+0x7C85C885, 0xCF263D34, 0x4A3D3242, 0x3D77D0C3, 0x4E658019, 0x857818C5, 0xD54A1E71, 0x5DA29DF4,
+0x5E3B9804, 0xABF7B944, 0xEDA10BB8, 0xB228C699, 0xDCF41B32, 0xED00DB89, 0xFA544263, 0xD57EEBDE,
+0xE7122022, 0xD2A2F31F, 0xA4FBC8C7, 0x6D1FDDB7, 0x9D39DD63, 0x60396249, 0xF796BD26, 0x624D6316,
+0xE806BB76, 0x918CCD5A, 0xA545C7E5, 0xED9D99DF, 0xFE327531, 0x800AEBA1, 0x6D0AD353, 0xE85EE8D1,
+0xB4BE898B, 0x9983FA8E, 0x1387E540, 0x5E2D2B54, 0xBB58D349, 0x8A8A61CA, 0xC886AC48, 0x9436A26B,
+0xD25F7ECA, 0x1403F87E, 0x4802F849, 0x39F323B4, 0x7BF7FDEB, 0x981E406D, 0x0B7C164A, 0x33B4E2AE,
+0x5BC43B37, 0x85042345, 0xFE9FA48D, 0x0A03DC3C, 0xE50999AD, 0x6AF6EF6E, 0x75B9A393, 0x59D9B8A2,
+0x1984E12E, 0x7509F2A6, 0xF68C0580, 0x58DA2305, 0x1FA95817, 0x9257EFFF, 0x784D0150, 0x50EFE1C5,
+0xCFE9D0AB, 0x69B6F464, 0xEC015DDF, 0x11824109, 0x36B0C086, 0xF40FEC11, 0x153495B0, 0x6906E1A2,
+0xEBB1E5CB, 0x79CA3273, 0xAAD400D3, 0x58304A92, 0x837FB11C, 0x1962A86F, 0x46664CE9, 0x5BD84FF6,
+0xF413E29D, 0x74DFE940, 0x37BF0180, 0x04533A67, 0xDA3C9E8F, 0xEB795461, 0x08922D4A, 0x1A1CE524,
+0xFE1D8004, 0xA51C0452, 0xF080A47B, 0xA54D9A49, 0x219169D6, 0xBD756F32, 0x0B34B4C0, 0x72B15699,
+0xF5F75820, 0x58ECB552, 0xA1C4035D, 0x909EB70E, 0xBC26558A, 0x747BA064, 0x252C6ABE, 0xCDB5A3B2,
+0xE5C561F8, 0xECA6968C, 0x99947E9F, 0xA31483FD, 0xE2139538, 0x507A5DB5, 0xE4EF0D91, 0x5E1F8C1A,
+0x7BF297D5, 0x76A9BE0A, 0x48BBD365, 0x8F6DB036, 0x1A62BEE0, 0xD24C67B3, 0xCF7693CE, 0x8CC854CB,
+0x2C7EBECE, 0x82378F87, 0x5B6DAA36, 0xD2D1C578, 0x4E02BB0B, 0xDF96D281, 0xC9C7BA73, 0x6CE508E9,
+0x3366EB1D, 0x1FDA7C32, 0x34EBCAA4, 0xE0049054, 0x0D5D96EB, 0xD73F8611, 0xE16F47FE, 0x8CFD3780,
+0x55C38D0C, 0xD2151194, 0x70ECA4B1, 0xD2BB4D7F, 0xD948B64F, 0x9962158E, 0xD261067B, 0x778828D2,
+0xDD3344D9, 0x2218ED89, 0xE8CF324D, 0x92917EEF, 0x5DB9522C, 0xB9FE3FE3, 0x6F5CD86D, 0x14CF11A7,
+0x34975BE7, 0xC800193E, 0x9E2B9064, 0x69BACC64, 0xE95FC4E0, 0x84442D83, 0xC7DE01D5, 0xECEEB758,
+0x8F8CB088, 0xCC6EB650, 0xAC95C2A3, 0xB4888F4A, 0xF9CED741, 0x2BC76B91, 0xAEBF6CDB, 0x12E67D41,
+0x227DF2F4, 0x49BCC2AC, 0x95A746A4, 0x0C27AB09, 0x7DE5B90A, 0xF083EC10, 0x0B965BDC, 0x407BAB29,
+0xAF3FCAE0, 0x11120FCA, 0x2F80B9FA, 0xC7BEFB3F, 0x548EB8F3, 0xCB30AC15, 0xB806935C, 0x812181D0,
+0x80EFE2D8, 0x088AF328, 0x273A746D, 0xC5CA91F9, 0x80777C4E, 0xC2521184, 0xC27100A4, 0xE9BF30F9,
+0x509133C6, 0xB752C121, 0x167E65C0, 0x62CED660, 0x68EC17F5, 0xF1A16287, 0x26440B81, 0xB5EBCB64,
+0x9C075675, 0x64FC7BF1, 0x9ED72BF5, 0xAD83216C, 0x169FE163, 0x6E9B995C, 0xC6CF1785, 0x1FFA4D2F,
+0xA3D26AB3, 0xB98B24CA, 0x9EA3DD08, 0xCE21F865, 0x0D5C8752, 0x57A067BA, 0xC107B9DA, 0xED8F165F,
+0xEF71213D, 0xCD03F786, 0x5633A122, 0x79D2C45C, 0xFAA7D267, 0x6D21335C, 0x145F6835, 0x6C7F3BCC,
+0x397E8BE1, 0xBFE8A55A, 0x1DEED145, 0xFAA5F82D, 0x35B79597, 0x61D86A26, 0x0C39B250, 0xB7D3B234,
+0xE9F312FF, 0x7BA31E2B, 0x8C4902EB, 0x2D2E93E0, 0x52AF5DB6, 0x06CC35E3, 0x1FF3BC18, 0x3A0942FE,
+0x46E0FE43, 0x65259FA6, 0xB5FCA331, 0xB4D1B900, 0x0E1542FB, 0x39DF5038, 0xCF8B076A, 0xD0363FDB,
+0xABB29C8A, 0x36EADF74, 0x4C8AD7DE, 0x95A1DD3C, 0x2117B152, 0x5744FFA0, 0x11BBED83, 0xEEA41E75,
+0xEBFA7CE6, 0x95FD6470, 0x1BB293D2, 0x7363B3F5, 0x979A72E8, 0xB647739B, 0x7EB77276, 0x37B6687A,
+0x2E7512D6, 0x4FF9CD6D, 0x450897CF, 0x124D8B2A, 0xA3009CB7, 0xA48353B6, 0x56E80BD9, 0x8048C8F7,
+0x8D04C699, 0xA40E8002, 0x8DFAEE58, 0xB553E871, 0xFE09CF22, 0xA984071D, 0xDA07A432, 0x16445823,
+0x41B3ED06, 0x1E080EF0, 0xB51CD6A1, 0x55DEFDCA, 0x31BE6923, 0x5A828D0A, 0xEB784AE1, 0x5C77BB7A,
+0x82D12A97, 0x5D489F1B, 0xBCECDAA2, 0xCC37FBB5, 0x0D07C5D5, 0x85D6DCD0, 0xD77F5477, 0xA7CCED99,
+0x6B31B6FE, 0xE186F32B, 0x7B9E3DBE, 0x5A9D8CAB, 0xE219AFBF, 0xC874EF90, 0xF31F5469, 0xD174C75C,
+0x7488083C, 0x8A4CF574, 0x57307C3B, 0xC70EE462, 0x82AF66FF, 0x6AFD465A, 0xAB710629, 0xBF4770C2,
+0x83620FED, 0x72F45A63, 0x8E4330F4, 0x0BD3835A, 0x768B4F5E, 0x4E07E3F6, 0x435978E0, 0x5B02EBDC,
+0x4208B9E0, 0x9FDED662, 0x33720CA9, 0x1E6AD8F5, 0xF068AF27, 0x073A7E6D, 0x9F5F9E32, 0x22503370,
+0xF5F8A27E, 0x94A59571, 0xF9464C2B, 0xCE99F0CA, 0xA9891869, 0x6D9443D7, 0xA6CEDAF8, 0x4040F185,
+0x799E9747, 0x0CFE63D6, 0x38760D04, 0x9ADE6957, 0xE571A280, 0x96A29A94, 0x3CC5E201, 0x6783B76A,
+0xF22254C7, 0x694AE7E5, 0x09073B22, 0xAB989C29, 0xBE0B46F8, 0xD19B61C4, 0xC31AC5EF, 0x84F4D4C4,
+0x743C985D, 0x478F3C58, 0x85C90453, 0x678ABEAE, 0xC8CC13AD, 0xD2633643, 0xBD47E82F, 0xEF20EEE0,
+0x3B830346, 0x5F0BEAA7, 0x332FAB9E, 0x425908FD, 0xEF4936F0, 0x537F7FEB, 0xB10889E7, 0x7018D535,
+0x6EA364D9, 0x4F83EE98, 0x5EC7097C, 0x2930FA61, 0x2360E6EA, 0x217D6417, 0x159D0A5B, 0x58DAF58B,
+0xB234EBFD, 0xF0A25D89, 0xEBE5B38D, 0x34A7F339, 0x2A2E36D0, 0xE2C253F6, 0x35E64A74, 0x13184077,
+0xD899F40D, 0xC045B4C1, 0xE7ED2BE9, 0x0FD13F77, 0x270EF516, 0xD3AE694E, 0xF82BA061, 0xE37F0DEB,
+0xAFF5C845, 0xF56E0A3C, 0x4909E9E5, 0xCAA2A440, 0xAF602535, 0x30FFB0A8, 0xEA227D85, 0xF8232881,
+0x00CD1836, 0x237B18F4, 0x55CEFB89, 0x5A73BC3A, 0x00DCE9BA, 0x28010000, 0xC81508EE, 0x01000000,
+0x2000B821, 0xCCFF1100, 0x099022BA, 0x6F0F33A4, 0xC08270F6, 0x82D9F55F, 0x55E1B378, 0x01DA9AC0,
+0x73452873, 0x04930A3B, 0xCB8216C4, 0xD6468305, 0x8DC9062C, 0x9D6427D4, 0x7D21722D, 0xED6FB312,
+0xA05AFAC4, 0xBBF31DB3, 0xB5C99C54, 0x2982230A, 0x58CB9FE3, 0x3B8DD874, 0xF349B168, 0xA96583A4,
+0xA04F4ACB, 0x17092803, 0xB7A1DAB4, 0xE94C217E, 0xC01DEADD, 0x784CBE85, 0x40738F37, 0x67C56A6E,
+0x896BF507, 0xD4C8AEB0, 0xBA7B596E, 0x8FA8118A, 0xFEEB6DAD, 0x12D47898, 0x903BBDD0, 0xF3112AB2,
+0x0F9C24DD, 0xB1E14CB2, 0x064EE995, 0xFA2B80BE, 0xE00F3D1A, 0x02BF0616, 0x8C413221, 0xC1E4EDC5,
+0xBBC56A8A, 0x03C532B5, 0x4FF90FAF, 0x68F5B8AD, 0x6E44999A, 0xD46ECCEF, 0xB60A290D, 0xEF1D482E,
+0xA5AED03F, 0xACB0B2ED, 0xD0508144, 0x84D08B88, 0xB1649801, 0xBD9E6F17, 0x6790A7E9, 0x71291585,
+0x92CFE897, 0xC71EE7F4, 0x5EAE6C47, 0x86C126DC, 0xBB6D191F, 0xD0E699FA, 0xFB0622D8, 0x829871A4,
+0x98B8AE3E, 0x783062B2, 0xB15B5E8B, 0x4B66F060, 0x65FCC9ED, 0xCE4DCC61, 0x78E19E54, 0x4C3D19E4,
+0xE3552EA9, 0xDC19009D, 0x1B1CEF87, 0x7DEFB455, 0x3DCD35E3, 0x57CA4705, 0x2A88C34A, 0x1AA46EB7,
+0xC1F65032, 0x7DA42904, 0x37A3D067, 0xCF578C5D, 0x4463548E, 0x3A74C6CB, 0xE707521A, 0x00FD2805,
+0x660E49B3, 0xAEB295F8, 0xD0C964F9, 0xC9B4E737, 0xD0E2C154, 0x146184DD, 0xE7088A9F, 0xA72C3D29,
+0x946B9530, 0x17489689, 0xFA773198, 0xBFEEDF1C, 0x1F7D4634, 0x5C9A6DD7, 0x712AE554, 0x101A24EC,
+0x49C8F060, 0xF7486A07, 0x19BEBEA2, 0xA6BEC5A0, 0x6B872275, 0xDEB331E0, 0x279C31F1, 0x9F7253D3,
+0x0A44AB67, 0x25C1EC22, 0x1C2FF9AB, 0x5C1C79D7, 0xA1F61D3B, 0xB2AD8457, 0xEF044543, 0xED0CF0DA,
+0x7D6D974C, 0xF3BBF350, 0x25435C2E, 0x8169A49F, 0x68E28490, 0xD9308903, 0xBF0C3BCD, 0x06335363,
+0xEA85EBA5, 0x9AB888EC, 0x1CE844EE, 0x0A39663C, 0x97F874CB, 0xADDE0499, 0xDB8461D7, 0xD76AB2B3,
+0x2C19E420, 0x579A48E6, 0xAA7FAB16, 0xF9A4DF90, 0x1BB9BAA0, 0xE698FEBC, 0x3442BFB6, 0xAD91BE5B,
+0xD7FEBB47, 0x52A302BD, 0xCE053326, 0xE18B6E6A, 0x5CE21BCA, 0x489AB905, 0x3EE00182, 0x18BA57BB,
+0xD01A68EF, 0xBAD197AF, 0x124013D5, 0xA6B6B3D0, 0x6A91BA45, 0xE1BBD86C, 0x74DCC061, 0x742C8071,
+0x6C9AED54, 0x8FE96245, 0x1A3D415F, 0xAA7B911D, 0x503C6177, 0xE7A93062, 0xB7B5EE15, 0xE74FDF60,
+0x5163BE35, 0x4741D9A2, 0xDB4FBF1A, 0xEEEEDC27, 0xDB836F2D, 0xC3B59DA0, 0xC5C8D27F, 0xDDB77CDC,
+0x069000CF, 0xA3CAA8BC, 0xAD737B76, 0xF740A70C, 0xB51523C2, 0x93E95A43, 0x36F1EA55, 0x5073C8B5,
+0xBD6D6A4F, 0x5E1A7DFB, 0x7F8D6CFF, 0x335C2EAC, 0xE7BEFE30, 0x2CEFCBB3, 0xAF3F3FA9, 0xDE0D90C7,
+0xF68821C1, 0xB334B079, 0x0F0AF596, 0x2B028B9C, 0x6C823914, 0x2D282E29, 0xC0D492D8, 0x503C45A1,
+0x43F1653C, 0x73134C89, 0x0C987A89, 0xA7DDF4CC, 0x654426B4, 0x87824020, 0x458434B5, 0x278BACA3,
+0x8877E85B, 0x3BA9E348, 0xB8CB82A1, 0x6FB9418B, 0x40C787D9, 0x06438B52, 0x22BB6A63, 0xCD15747E,
+0x74AD446E, 0x65B6933B, 0xA8EE38B8, 0x2AC956CE, 0x2151B8AA, 0xDBB57812, 0x3381245C, 0x1709859E,
+0xE13CDAD9, 0xA25956A7, 0x76060002, 0xEAB2D164, 0x975FDA62, 0x041E2CF7, 0xD775E28F, 0x976A23DA,
+0xD21CBAB1, 0xE1A3E425, 0x39BCD8BC, 0x83DD24D3, 0x18CA6FB0, 0x35B1E936, 0x549C7D6C, 0x35CB30A9,
+0x43B09275, 0xA7FF90F6, 0x83E77CDF, 0x9F0E6862, 0x4436B09E, 0xC001EF57, 0x296ECCFB, 0xD8133D1B,
+0x8A62E995, 0x728A29EA, 0xC66FB5F0, 0xD8C0B23F, 0x6B58A1FA, 0xD155DD9A, 0xB638080B, 0xFEF57397,
+0x110FC204, 0x4CC75BD1, 0x498ED2E5, 0xEC66D814, 0x9BA645AB, 0xAE4602CE, 0x5089D436, 0x03DA1358,
+0x9BDFA9FE, 0xDA56E461, 0x14030769, 0xE172C7F2, 0xABE63374, 0x85337C87, 0x30031503, 0x4429AFE5,
+0x361EC504, 0xA604F272, 0x404F040F, 0xB624879E, 0x02716A3D, 0xC34DCD35, 0x2E96EAD6, 0x5F439991,
+0x26826033, 0x7C7EB2E2, 0x02BA284B, 0x777891C1, 0xCD91F04D, 0xEA9ED15A, 0x9FBADADC, 0xBE7C01A9,
+0xBE4F70F8, 0xF8D123BA, 0x265DAAF3, 0xAFE33D3E, 0xF64F5A34, 0xEDED0C9A, 0x21917BE9, 0xD728DC17,
+0xC4C099AA, 0xE220216A, 0x8B729D86, 0xF66A4FAF, 0x6EA66993, 0x24864366, 0x4C30A2AB, 0xA943999E,
+0x1205499B, 0xC2BE47C4, 0x527DA96F, 0x1A89F7E7, 0xC8257996, 0x42F1A5E5, 0x6725D9DF, 0x2C4A9240,
+0x1FE445FC, 0x7FB0D8B7, 0xE1333D86, 0xDB3E8D7C, 0x7EB4151B, 0x0CE5D4E8, 0x97B58AB6, 0xE15AF4D2,
+0xD04F9898, 0x8691BAD0, 0xD01DF263, 0xF55634F2, 0xC6B1D977, 0x12AFDA26, 0xCF120E91, 0xA07A9225,
+0x70E3FDD5, 0x7DFB22B3, 0x813A9320, 0x33898618, 0x45C404C5, 0xDF1DE57F, 0xA0D8880B, 0x00A8EDDE,
+0x1D387C41, 0x5C7AE583, 0x504569DA, 0x656C5F3F, 0xDD5520D5, 0x9990B815, 0xA7B5EF1A, 0x3037E3DA,
+0x46E2D7F7, 0x07FD74F6, 0x1BD2CE90, 0xD63FEB5E, 0x314241B9, 0x9232BE7D, 0xDABEDE6F, 0x6AD40FCC,
+0x95FCFC03, 0x672A392D, 0x7CAFF8AD, 0xC8D6516C, 0xCBA0DFE0, 0x849EF258, 0xF75E8761, 0x88940E35,
+0x82BF01C8, 0xBD199500, 0xEBCE29A1, 0x636BE86B, 0x45FFE256, 0xEEFC9CA7, 0x59B2DC8E, 0x62C560C7,
+0xD405F7B2, 0x15FA69A6, 0xFC246A61, 0xE1F49D5C, 0xB975C5E4, 0x2ADBBF85, 0x3041BDA2, 0xC7A36F27,
+0xE1BAA88C, 0x2CB9B8FF, 0x304CD83A, 0x2FDDA327, 0xDB2148D1, 0x95F93A69, 0x3BC8EEC9, 0x774A7482,
+0x95D9C66E, 0x2321611D, 0x4A79E998, 0xF61F152F, 0xD0504087, 0x6A53E010, 0xAF2A4D95, 0x8352ADF5,
+0x66DB8F1F, 0x03ACCA8B, 0x9EAE11BC, 0xDDC11356, 0x4E6DC32E, 0x6B83F6E8, 0xB68B469C, 0xF26A8573,
+0x97C41E54, 0xE1ECFE89, 0x80AC790A, 0x9E83D05F, 0xAE410483, 0x9B4D672F, 0x855D4373, 0x16ADC763,
+0x44B8E27A, 0x1F9657B0, 0x4B040829, 0x82B61CB0, 0x8DB52C26, 0xFBF6F207, 0x9D03CF91, 0x19EDFB5F,
+0x0D386FCB, 0xA0438BC8, 0xF617655C, 0x241B6C7D, 0x217578A4, 0x724984B6, 0xAB498CD8, 0x7D8ECEB4,
+0xFF3D2C64, 0x6487E6C8, 0x6CA2294B, 0x28D994F0, 0xAA4AEA5C, 0xE54F74ED, 0xD9C5AB3B, 0xE6196030,
+0x0B179AC3, 0x38442E52, 0x9668B000, 0xF16842C9, 0x556E8316, 0x294048A4, 0xB8B129B3, 0x359A18C2,
+0xE30561D5, 0x3DD3924F, 0xAA5AA117, 0x067BFB04, 0xE685BC1E, 0x0CB470F7, 0x9323639A, 0x7FEA819F,
+0xFDBABAC4, 0x196CFBAB, 0xF15690E6, 0x3FE81C27, 0x2004815D, 0x9D1C0772, 0x23EBF4F1, 0x7BDC7886,
+0x34553431, 0x32E2DE2A, 0x92FE3E2A, 0xAF09EC70, 0x081C70FC, 0xC7614A5F, 0x70826226, 0xF6C97B74,
+0x4AD8A187, 0x7AA80479, 0xD9292627, 0xDEB5D1FD, 0x6BB55AD3, 0x95288A22, 0xE1A76239, 0x3B2E6130,
+0x8240A600, 0x5EF301CB, 0x5896266B, 0x367DCBAA, 0xA54FF5B6, 0xB80D12BC, 0xF4DE907E, 0xCA700664,
+0xED88E602, 0xAEE77637, 0x882791E0, 0x2A9BD463, 0xFB2B106B, 0xDBF38251, 0x1DFB9855, 0x2238DAE0,
+0x6D4CD3EB, 0x29744529, 0xAC2579EE, 0x0D268653, 0x9FE50C65, 0x09A6A1E5, 0x79DF82E5, 0x32B9D290,
+0x9B3F5408, 0xA08D61DA, 0x668DB9F3, 0xBCDB7662, 0x8FB573AF, 0x22479418, 0x73CD956F, 0x598FC276,
+0x26AD306A, 0xE5FBB838, 0x5F5D879F, 0x656464A0, 0x5DE9E815, 0xE0462916, 0xB7288D19, 0xC6E06422,
+0xEB3D84C4, 0xD45492CA, 0xA534F5E4, 0x9C801B38, 0x61BC8F91, 0x78DA583F, 0x275D5322, 0x78621A92,
+0x9A337867, 0x7CC865E7, 0x26887ED6, 0x4D235E17, 0x6A568CA1, 0x59A05EFC, 0x52FC8440, 0xD2ED1DD9,
+0x91FE3D4D, 0x1773039C, 0x4F0ABBDD, 0x33F6CC2F, 0x2454A78B, 0xA4593C11, 0x8BAB244E, 0xC6150263,
+0x085F1AE7, 0x4FECAD42, 0x4936B695, 0x01D3EAA6, 0xE0E49EBB, 0xBE399395, 0xD6F0332B, 0x0F7AC161,
+0xE8898CC6, 0x706FFF01, 0x7EC60E20, 0xE42CA1D1, 0x4759418D, 0x3467B925, 0x3247D26E, 0x6CEDD985,
+0x699E0BA5, 0xB3F90020, 0x5E8E97AB, 0x4138A653, 0x4709410E, 0xBEAF9E93, 0xA9355966, 0xADBBE5FD,
+0xD54ADDD6, 0xDFF8DA79, 0x27BFC663, 0x5DFDD896, 0x2AD81F83, 0xEE5643EF, 0x0C309F4C, 0x21B3ECC8,
+0x0590943D, 0xC2682DE4, 0xA004D576, 0xD32C9A1D, 0x8B3872A8, 0x9C40F88B, 0x9E21EB38, 0xE82795E1,
+0xD57E4D3F, 0xEB8CA96F, 0xB526487F, 0x83C9FB19, 0x0C8FA349, 0x75D64C84, 0xAA8547C4, 0x67581719,
+0xDA374EF3, 0xD3492E58, 0x42A7CD60, 0x19C6BC53, 0xAAD9D984, 0x0A4F79CD, 0x7B6C643D, 0x8C8A3CCA,
+0x31BBBE0C, 0xC6A7A8B5, 0x62E12AD2, 0x9D4332E7, 0x14AEDF76, 0x9894279B, 0xFC7E5FE5, 0x9DEEB4C9,
+0xF578E1D6, 0x3B5040EE, 0x8271B2C2, 0xB7ACD5D0, 0x1BFE72ED, 0x0DCCA199, 0xB7F7D847, 0x981A8A07,
+0xE1E23A33, 0xE83D541B, 0xFE839583, 0x8FE28DBE, 0x327B4270, 0x74724117, 0x9BD318C3, 0x736F0616,
+0xCCB2D046, 0xB0BB7B6D, 0x36BA3D09, 0x943DFE1A, 0x809D3EDD, 0x9752CB05, 0x135F8ACC, 0x27ED417D,
+0xE7A60BE3, 0x8C76B1FB, 0xD586CE56, 0x91F451EC, 0x4C0C448B, 0x263B7582, 0x6B14720C, 0xA666CC21,
+0x51042050, 0x16C73884, 0x804F425E, 0xCA215DCA, 0x19A0C67E, 0x4FAE5F22, 0x7E2AA993, 0x3AB5ACEB,
+0x396AA55E, 0x7D7B3F89, 0x1D0CD20E, 0x30E15C45, 0x657F7950, 0x1A5D8867, 0x9186E0DA, 0x57E0975B,
+0x74522AE7, 0xBB38969B, 0xC6E633DE, 0xDC0B5569, 0x66EAFF21, 0x49E57FA8, 0x0C258948, 0xB341780F,
+0x6DD37873, 0x79245266, 0x6BFEDADE, 0xB4276BF0, 0x87DEEA4E, 0xDDE4BACD, 0x63DC7C31, 0x0757F038,
+0xBBFAB9C8, 0x18E3FAE3, 0xCCD64A42, 0xBE9854A3, 0x4D45FF05, 0x4D906A81, 0xFD2EA284, 0xF993FE4F,
+0x43477D2C, 0x4D970B12, 0x29EB7A7A, 0xFFF63972, 0xF3BF3705, 0x3DC428BA, 0x77BA401C, 0x7D81087C,
+0x0B959C87, 0x0C6F0C14, 0xCD453FFB, 0xB33EC8D9, 0xFBB5FE2D, 0xC2CE049C, 0x1F0750E0, 0x3029C1B1,
+0x81F75CC1, 0xAF58FBBA, 0x203EEC4A, 0x9177A13E, 0x315B0C04, 0xEC30CAAC, 0x8DF9012E, 0x01328CC5,
+0x43A65F1E, 0x9D617301, 0xC504D6B5, 0xD45C4D47, 0x42FC6B3A, 0x137D150C, 0xE6397B85, 0x12BA16EF,
+0x6C04AEB2, 0xF8D96FC9, 0xF79B51D6, 0x01936C52, 0xE555D47A, 0xFA7B2E47, 0xF7AC3A0A, 0x81B83EBB,
+0xE78B3D23, 0xCA3A276A, 0x1C839B09, 0xDE2D98AC, 0x34AC6412, 0x9E97F3CB, 0x9B8C9129, 0x7E87D68D,
+0x912124D5, 0x021AA627, 0xCED77CB8, 0x4C9AA3F8, 0xD65AAAD7, 0xB3368BAD, 0x2D6BE050, 0xB7A83B6E,
+0x62B718B9, 0xC2002B61, 0x3C18BDE2, 0xCA8D2275, 0x023D0C03, 0x5DC8DC38, 0x5CA6BF21, 0xE13E4D46,
+0x3E2F8C3B, 0x6185EC2A, 0x06DB3CE5, 0xD44E29BB, 0x5B76656F, 0x8410B0D2, 0xBB321644, 0x29922188,
+0x23BC5DFE, 0x87A44411, 0xC278B8F2, 0x1044BF18, 0xB40D1104, 0xB271DF05, 0x280572AD, 0x4F560F73,
+0x221771D6, 0x61B37F1C, 0x51A2934A, 0xA22C84FC, 0x95449B7C, 0xCDC06FC8, 0x718BCD55, 0xD6E248A4,
+0x19942893, 0x0F724EA4, 0x1430A8C4, 0xC1BAD8F6, 0xD4EF2E6C, 0x4D85B90E, 0x213BE8DE, 0x64C0C00C,
+0xE8813450, 0xC398D0A6, 0x0FDFEA5B, 0x4961B3B8, 0x959034F4, 0xB4928C15, 0xD45DB4CD, 0x36DCA361,
+0x029FF61B, 0xECB61218, 0x3E161BAD, 0x99A82EB6, 0x57C63F72, 0xE5339DE5, 0x3139E704, 0x20251646,
+0xAE401C4A, 0x2D8E47DA, 0x47090D28, 0x632873CA, 0xE56B4042, 0xE104252D, 0xAF164E64, 0x2C855A1E,
+0x05655647, 0x88BFD487, 0xF1F069AE, 0x3E36DCE5, 0x06687B12, 0x10E6F97C, 0x6A3C026E, 0xF6B418A7,
+0x3418CF50, 0x1B97D176, 0xDDE019B5, 0xEE5A65EC, 0xFAFC153F, 0x8A42D8CE, 0x09EE9FCE, 0x371DBFF5,
+0x7B9374A8, 0xD1FC907F, 0x0892D5A7, 0x04480C2F, 0x9D2ACA86, 0xAD43553D, 0x43316E6B, 0x6B508747,
+0xE537EDE9, 0xDBB3449F, 0xA79670BE, 0x81D73C26, 0x1BFD6822, 0xEBD79A57, 0xFC842F97, 0xF6D21A7D,
+0x86CD11F0, 0xCE178286, 0x13ECC67E, 0xF48D31A7, 0xBD8B4889, 0xE4C763EA, 0x5FD293A2, 0x78D477EE,
+0xFE6E6ADA, 0x1B64EEEA, 0x647554F1, 0xB684A4C7, 0x2230A47F, 0x2ACB2D96, 0xC0E6A281, 0x72E62C62,
+0x02A305AA, 0x8874066A, 0x29EE91E9, 0xC261D2D1, 0x7F14078F, 0x5624F2E4, 0x9EFE21A0, 0x4F23D91E,
+0xC1606962, 0x2A0D7490, 0x6460B01A, 0x06DC0321, 0xD3476256, 0x8D8AFF33, 0x5AD86289, 0x222AB619,
+0xFF08B559, 0x48142B54, 0x91096106, 0x307C296D, 0xF64A2A52, 0xA5BE783A, 0xFA2E9283, 0x96195BFF,
+0x0D8F9BE3, 0x147E35A4, 0xF227B910, 0xD8F48A81, 0x3928F386, 0xA2512E34, 0xA4E31E41, 0x3BC2B458,
+0xBB1E0FCE, 0xEF3F4BB2, 0xCC5B398B, 0xECE60906, 0x4E42DCB5, 0x40EC71DD, 0xE67D0A5F, 0x7E1AA9A2,
+0xF6E5B714, 0xFA5162C3, 0x87FF0F7B, 0xB4331210, 0x940F048E, 0xE26390AA, 0xBDA02F8E, 0x8B87A96E,
+0x39C60BAA, 0x96346A1A, 0xABB7D3BB, 0xB750E5AF, 0xBD9087FF, 0x8AA8A225, 0x7CAA1E86, 0xD7FD4D2C,
+0x990DAAF1, 0x78B3BCCF, 0xDB60895B, 0x1BB04D7B, 0xA65FB50D, 0xB5F4AF8C, 0xCE417039, 0x00103409,
+0x10E34660, 0x9DFB9539, 0xBD9D18CF, 0xB834BEB1, 0x55FCDC0A, 0xB54C0A22, 0xAE8EAE6C, 0xA57509DB,
+0x0B62CD5F, 0x5E7AC181, 0xA077E465, 0x91F1A691, 0xA62B4CE9, 0x0292FD25, 0xCB374F2C, 0x6124B185,
+0x1EEAE5A1, 0x9810C181, 0x6F038338, 0xF96EC8BD, 0x053F3ACF, 0x6919AA6D, 0x71915FB9, 0xAF6B2859,
+0x70848051, 0x7AD3A518, 0x0A255EA3, 0xB716744F, 0x7BE99708, 0x727CB4DC, 0x40208118, 0xBE776172,
+0xD07E2478, 0x9DC6E22F, 0x49FD659E, 0xFE684488, 0x3DE2EFBE, 0x49AC2802, 0x6454B145, 0x256A6496,
+0xEC18A24F, 0x33C36036, 0xA5C99FA8, 0x7AF104A3, 0x43556E4A, 0x1BE5DED6, 0x4C7C8B12, 0x8481B96A,
+0x6AE719F6, 0xD7087BBD, 0xE1A5BAD0, 0x4D6D02FE, 0xC915A90B, 0xA00CFEFE, 0xA3B3823D, 0xC87A7C10,
+0x2B38B66A, 0x3D83EE1D, 0x0B82AF27, 0x8F846443, 0x3390FB93, 0x5A899834, 0x745C299C, 0xBB8FABDF,
+0x9382D731, 0x1A618E76, 0xCB6F6721, 0x6A7944F2, 0xB0365835, 0x809A991C, 0x1AF87A6F, 0x6346D745,
+0xBB352889, 0x7ED3904A, 0xA7EF4756, 0x71EC2740, 0x0F32E2DD, 0xDFED2635, 0x0D16205D, 0xBE7D3CBE,
+0x1AC68E43, 0xF4D5DBFC, 0x345C1B9F, 0xEC4C3FB1, 0x562C69A7, 0x69C72E2D, 0xEAF27FA1, 0x427FA170,
+0x0B1A5423, 0xA3E99006, 0xC1426E06, 0xA59BCA48, 0x54DAA8A3, 0x6204AF20, 0x0615E69A, 0x5FA243DC,
+0xAF1E5A22, 0xAE0DBE3D, 0xFE8EF1EE, 0x4B7C9DA4, 0x6B5BA1B5, 0xFD4BF2CF, 0x0A579CF7, 0xBC777EFB,
+0xDFD5F692, 0x61DB2F4B, 0x995F2BD4, 0x461CD526, 0x040A233F, 0x96EF428C, 0x7FB5DAC2, 0x3965D419,
+0xDC4D12EF, 0x8CD8C161, 0xD3AD69E7, 0x351705EB, 0x2ACCAFA4, 0x7B459670, 0x5558B15C, 0x37E0C9A2,
+0x9F49737E, 0xECB28443, 0x9E201C0F, 0x089CAE44, 0x9804B149, 0xEF7FABB6, 0x5785AB57, 0xAC282A0E,
+0x6D3067FA, 0xE32054D3, 0xBFC3748A, 0x0ED455CD, 0x29D1F978, 0x6A05EED4, 0xDEA97C35, 0x6A781829,
+0x4D60D1F8, 0x971C1AE7, 0xA84DC023, 0x5DD09DF5, 0x69FDE39D, 0x8F9703D3, 0x0D612572, 0x5106C900,
+0x0273DA62, 0x146ED7FF, 0x3B4B2244, 0x05E724C0, 0x98C76D5B, 0xB45085F5, 0x13316C68, 0x381F1464,
+0x9CEE870E, 0x5B743B00, 0x8A3BA0CA, 0x6209618E, 0x797BEA2A, 0xD5D7FACE, 0x079A3C40, 0x79AE0C2D,
+0x5E6ADDDE, 0x36AAFBBA, 0x32FBFEBC, 0xDE48C6D9, 0x5AE87DF6, 0x695B13C7, 0x42442EF0, 0x4A4FF0D4,
+0x29999183, 0x176644B6, 0x6D29F7F6, 0x0119B7A6, 0xB27E4E6F, 0x6F73C2AD, 0x3222370F, 0x8ED8A390,
+0xAD465C06, 0x2B4B4186, 0xB446DA48, 0xC1563F42, 0xC5B57CE1, 0xF358A465, 0x6FCB73B1, 0x1111389C,
+0x4B23B00E, 0x8499015F, 0x44EA38A1, 0x919C1A02, 0xF22F04B9, 0x4D97C242, 0x2B3D0CA9, 0xD2B69D28,
+0xCE3DD31E, 0x93467E3D, 0xD5AEBB2E, 0xC6E2B2A4, 0x45608267, 0x959A7078, 0x2ADEA34D, 0xCCF73B03,
+0xB9BD5A23, 0x866CF71A, 0x57EEC420, 0x5FFC9650, 0x2A8B7A8F, 0xE794C106, 0xE931D1E5, 0x1EFB4A50,
+0x9EEEA84C, 0xA26BD6E7, 0x48A017F8, 0x8BCA80C2, 0x571FF8CF, 0x7BAF3F2B, 0xD31BC2C0, 0x52BF0AAA,
+0xFFF6FB50, 0x34DA240C, 0x8F64D71B, 0x87633E5B, 0xCCF1B8E7, 0xC4E31DD3, 0x702F6183, 0x9240B226,
+0x278B7BD2, 0xCD66154A, 0x6D6282B3, 0x3CAC9437, 0xA63CAACC, 0x8469388D, 0x0DD23575, 0x17D602DF,
+0x0B43D3A6, 0xA8A81276, 0xE98A2EB1, 0x9F592D69, 0x9A064E4C, 0x47226EE3, 0x61783057, 0x6C2A4CD5,
+0xF2BCACE5, 0xECB20FED, 0xE28A3068, 0xA9A487F6, 0xDBB6A72A, 0xB94175F6, 0x317CECBB, 0x36F1F45B,
+0x8EBAC8D5, 0xEEC4F05B, 0xA7911661, 0x100F6A40, 0x6CC264E1, 0x45814AC2, 0x7F2F32EB, 0xAFCF378D,
+0xC9382CBF, 0x588C6E86, 0xFBFA0BE7, 0x7BE91C0B, 0xB64EBBD1, 0x14B9326B, 0x45D092D0, 0x6E549483,
+0x60F86A15, 0xDE46EB7F, 0x909377B2, 0x216086E7, 0xFE5B5215, 0x364ED23D, 0xE985229E, 0xC608DB62,
+0xFF374FF0, 0xD7BBA91A, 0x58B0805D, 0x8B4B717A, 0x3EA3CEDB, 0xCB2BB029, 0x7BB4CC95, 0x72CFD083,
+0x383ADC39, 0x2C1AF964, 0x7C9A4501, 0x4E2071FF, 0x1DBED1AB, 0xFD68D9F7, 0x92A65E07, 0xE519434B,
+0x29A337AA, 0x4B5A1C79, 0x4FF264DD, 0x0273609D, 0x4C2899B2, 0x9B4F20EA, 0x37A19399, 0xBFEC3FEF,
+0x0B4DDC3F, 0x10BB0CC2, 0xA3040DC7, 0xC41B5FAF, 0x64B8055E, 0x3C3ED9C9, 0xBFC953D6, 0x459E1EF8,
+0x659FE5B9, 0x2B43142D, 0xFF799060, 0x894EA513, 0x337C887A, 0xAE0E992F, 0x8F8107B3, 0x41F3A4C8,
+0x76567F08, 0x93120548, 0x3276BFDA, 0xEED61A7B, 0x3D685340, 0xCDD755DE, 0x08576B33, 0xCBAC2237,
+0xB5A3105C, 0x10C807D3, 0x1B696EC0, 0x82D97227, 0xD8BDDB1A, 0x0C3CB277, 0x121EC191, 0xE3A12713,
+0x8B87B9CB, 0xAB83BF38, 0xE68B45BC, 0x45447204, 0x95462EF3, 0xEAE784D0, 0xDC206B7C, 0x35D890B4,
+0x4AB2D14B, 0x7C5B0CD3, 0xC5B10F1B, 0x767E599C, 0x67434A44, 0x3F388572, 0x934970DB, 0x7E212599,
+0x53351AC9, 0x07000BB6, 0x868941EB, 0x7B10D912, 0x41594DB9, 0x9C9B3474, 0x9BC88125, 0xDD3E832A,
+0x0718799E, 0x235720CA, 0x26B6473F, 0x60DBBD8F, 0x68A4317C, 0xED02F229, 0x18696FD4, 0x90FDDA73,
+0x703F7965, 0x925FC119, 0xE53A9486, 0x9DA65EE6, 0x4C336A48, 0xCDA044E0, 0x9DD663C9, 0x4D05E99D,
+0xDCA7847A, 0x5A4A87C5, 0xF3579A05, 0xE46B7E45, 0x9C79E10E, 0x8D939557, 0x26C81DA5, 0x5FF009FA,
+0x1628882A, 0x16AF3E20, 0x0007DB93, 0xE9849FBA, 0x6672F9D8, 0x14B56215, 0x07A5585A, 0x92AE6024,
+0x0A975C45, 0xA93B21AB, 0xAD562239, 0x31A5182E, 0x5474C91A, 0x6605894A, 0x044FB2BF, 0xC35198DD,
+0xCA247C94, 0xBE59F520, 0xE5E8F5CC, 0xC0A0B92F, 0x4D38EB5F, 0xBBE69229, 0x9E5FA556, 0x17D6316E,
+0x4F366F95, 0x5945D651, 0x37049586, 0xEE7CC72A, 0x39C3F4E6, 0xA7D6F94A, 0x6B0D3864, 0xBA5C95CD,
+0xF6DC6730, 0x62ADEDC6, 0x01227F91, 0xC7AFFBD2, 0x982EED48, 0xDB584CC9, 0x3D87EA3D, 0x1C21ABAD,
+0x81D3A766, 0x6DF2E0B6, 0x24F56EF5, 0xBBB79825, 0xA8C4F769, 0x5E980FD9, 0x66D32C1B, 0x94AF6D04,
+0x6A1F8A0F, 0x3F0A85FA, 0x25C56544, 0xAAFA195C, 0xCA3CFE2B, 0xA03C3DFB, 0x780F95D3, 0x757FD913,
+0x1DABA1AB, 0x5A7E1325, 0x55945472, 0x91435B86, 0x42C62ED9, 0x4FFD53EC, 0x2B665205, 0x9238633F,
+0x9EF64394, 0x44F2CA2F, 0x3240AA1D, 0x98DF7284, 0x7A8B119C, 0xA87732C3, 0xF093050E, 0x9CDB566E,
+0x29ECEA61, 0x77ACAD85, 0x533F9F18, 0x5C6A739E, 0xB828F2C4, 0xB3FD8CBD, 0x0C0E514A, 0x0A29173C,
+0x3EFC4861, 0xAA5E0F11, 0xF8BDD83F, 0xA23B996C, 0xF9D5C9CA, 0x297693CB, 0xF8FE4954, 0x6920A33F,
+0x29B7F300, 0xBE8A8D14, 0x17BE028D, 0xE7D0B881, 0x96314343, 0x6BDC223D, 0xB2E322ED, 0x65EB2768,
+0x01C6EEAF, 0x2A36A563, 0x8A1CD58B, 0xB104E910, 0x78A09546, 0x1464DCEE, 0x7872B43B, 0x72957462,
+0x786BAE6A, 0x7278ABF4, 0x076A9737, 0x3A31A660, 0xF1631F37, 0xB0CB6D81, 0xB126A8E9, 0xCE73197E,
+0xB1A30669, 0xB13340E3, 0x7B6A8E27, 0xDB7839C6, 0x593C1BCE, 0xCE88BA63, 0x74F128EE, 0x1B3654E3,
+0x72535362, 0xF4977975, 0xD94CD978, 0x56ECDE6C, 0xE9B42BD1, 0xF88A4605, 0x898163B3, 0xCFEC2231,
+0x9D4FAF5D, 0xBB5CFC77, 0xE3C5502F, 0x19F27BDF, 0x704BD4BA, 0xF1F4E6D2, 0x2B2AF12E, 0xF866F4A7,
+0x6A95A9A5, 0xE67B33C3, 0x38C02CAD, 0xEEC114BF, 0xC36951A3, 0x14EA898D, 0x641AF33C, 0xA7D56585,
+0x8C8EA265, 0xF24F450D, 0x3ED3CA7E, 0xB41F7987, 0x555C83C3, 0x44044850, 0x5B8579C9, 0xAA88077C,
+0x0C8446A6, 0x48E12E85, 0x8DE2BDB7, 0x15D187BB, 0x8A7B90B5, 0x6939CC09, 0x3E7689EF, 0x399C7596,
+0x715926D0, 0x1C910633, 0xE31A7110, 0xEAA42B49, 0x3ACA5E17, 0xCC44F48F, 0x23D8DF82, 0x22DE59A0,
+0x87272A1A, 0x46CEC045, 0x1690F25C, 0xF8835DC2, 0xB989BDAF, 0x4425EC6A, 0x384D36CF, 0x65AB9326,
+0x47AD6505, 0x1DC4EEEF, 0x49255EE7, 0x6CB64560, 0x2ED76932, 0xF04922F6, 0x8421BF4D, 0x41D2D6DA,
+0xD53F7CF6, 0x6802EFCA, 0x37FCBE31, 0x1E43C52F, 0x4623BA12, 0x0126D395, 0xAD3FE676, 0x739B39F2,
+0xDF20907D, 0xEECC9B0A, 0xC065651F, 0x30FBE910, 0x53A86697, 0x22105039, 0xB199A426, 0xF3A7F9F1,
+0x15E2C74B, 0x9AE982FC, 0x00FFF6E9, 0xD5F448DA, 0x3003770C, 0x4E331DF5, 0x6F677475, 0x0881E1D0,
+0x00FBF7DC, 0xD3C9E7CE, 0xD1D11035, 0xFAEDC90D, 0xFA3EED56, 0x06B57A4B, 0xD646EBC8, 0xBFE4F78A,
+0x4A07E674, 0xD1702F2F, 0xD3E3191A, 0x9F3253D7, 0x70D41744, 0x33D140ED, 0xEC4EE0EF, 0x64597171,
+0x6E15D910, 0xD19D4F63, 0x93B1FFC8, 0x9CBEE1A5, 0x1D39C0C9, 0xA415837D, 0x9E421AA1, 0x6D1E6FE9,
+0x73942A3E, 0x56017362, 0x520E7694, 0xE00D5333, 0x67DC4042, 0xE59F187B, 0x0A380B5C, 0xCC1EFBBC,
+0x53AD81D9, 0xD31467E6, 0xA2BDCBD8, 0xCAC2F551, 0xB0F7B1F0, 0xD1710874, 0xFB6E5792, 0x52AD7255,
+0x5382E5FE, 0xFBD655DC, 0x4BFDC4D4, 0xA6FADD61, 0x1D594336, 0x89511D41, 0x7A32CCA5, 0xF2925676,
+0x7B317C94, 0xC7DFF130, 0x6404A6F9, 0xEB5064B1, 0xAC46A221, 0x9268BD0B, 0x42C2A175, 0x127EE934,
+0xDD496F10, 0xE46A08D0, 0x248FC459, 0x964FBB90, 0xD695C5F2, 0x71C6A17A, 0x07D62A52, 0xE7FF1251,
+0x55F0268E, 0xA8D22C05, 0x0605720E, 0xDD8A22DB, 0xAAB2DBF6, 0x30CEBDD1, 0x1688391D, 0x332EE9A1,
+0xF9E09F1D, 0x9A22B5C9, 0x692B77AF, 0x9C654C31, 0xB9EA7EF0, 0x380CDF0F, 0x2FE02B88, 0x38C2EBB3,
+0x442A90E6, 0x81BE7144, 0x01044315, 0xC3777C9F, 0x86A8943C, 0x4BE33934, 0x7ED33D06, 0x7114EB7D,
+0x685A3A5E, 0xFB145596, 0xAB421391, 0xA16AB645, 0x17200117, 0xFFF1B70D, 0x83DEA97E, 0xA7242D65,
+0xACAABD4F, 0x6A450DD6, 0x5D0D228F, 0xFCF6216E, 0xE1D1193C, 0x1585004F, 0x2CB8C10F, 0xE3F3F074,
+0xD409A2A3, 0x53AE4B5D, 0x2EDC1E69, 0x8DE107BB, 0x774F5029, 0x97680454, 0x57CF5E70, 0x6ACA0BE1,
+0x90B3EF93, 0x657A93D1, 0xE17E38B2, 0x481B001F, 0xE394EBB5, 0x6A541747, 0xF3F79BD8, 0xC4E6215A,
+0xC609D041, 0x5FE8C56E, 0x691D07F7, 0xA9600E77, 0xA166835D, 0x11A553BA, 0xE6571063, 0x1FA416A5,
+0x050BCAC2, 0x36DABD6D, 0x660ED00A, 0x77A8D6A3, 0x2E46B647, 0xEEB3E375, 0x0A427F1B, 0x8164E201,
+0x31799502, 0x0731138B, 0xCBAA4E12, 0x3344B102, 0xC78192AF, 0x8465AD74, 0x181CF2B8, 0x8543B56F,
+0x60655BA9, 0x80A9A71E, 0x5736C41E, 0x8C0A479C, 0xB30FF21F, 0xFB7EF0B9, 0x6025FD7E, 0x2B5FC8A2,
+0x81181C5A, 0xC270452A, 0xFADBE423, 0xAEA9CA39, 0x623D69AE, 0x9B99E37B, 0x2BA826B1, 0xA8AD9F9F,
+0x02C6938F, 0x638C05A2, 0x746192B5, 0xC389891C, 0xF021D24D, 0x94876F6F, 0x329C4A0E, 0x54D6E605,
+0x354C0753, 0x8CFF7AA8, 0x5E1BDF69, 0x4020F512, 0xDF24E3A1, 0x4D71969A, 0xFD9DFDD0, 0xCEFE46C5,
+0x179C4AEB, 0x771EE35A, 0xC53A2D0B, 0xB3D69318, 0x4FB2A022, 0x50FF78A2, 0x8948F69C, 0x9675CBC2,
+0x3E26C86E, 0x5250995B, 0xEF4DF3EE, 0x1EE61128, 0xFF87D7E9, 0x4D11510C, 0x7C804D7D, 0x59691EF9,
+0xCFC52782, 0x79735DB8, 0x501FC82F, 0xEC0D8B1C, 0x978A2865, 0x1EA6E96B, 0x08B9BD18, 0xF15EE34A,
+0xDAC34333, 0x120A8618, 0xF46481EE, 0x6CC9B699, 0x0A8FD1DD, 0xD8A94A79, 0x702458CB, 0xFC05B7FF,
+0x70E852FA, 0x4EBDE17C, 0xEBA959B3, 0x465703AE, 0x71179F51, 0xCF71ADD1, 0x2C4E6DC1, 0x294E7534,
+0x1456E060, 0x20983352, 0x5E4E3EB2, 0xD865DB3C, 0xCA64BF3B, 0xBC7690E6, 0x87E91433, 0x29A513E0,
+0x4C7E54A6, 0x74E3B62B, 0x3B504089, 0xB2A03977, 0x3C3E7EC6, 0x17AAF309, 0x43106BF2, 0x619A5479,
+0x018D43E8, 0xDD345FA4, 0xFD0C14DF, 0x1D99F226, 0x75229DFF, 0x93AF996F, 0x141B03C6, 0xEAD59CC3,
+0x16CD8038, 0x95F205BF, 0x7AB27B9C, 0x158A5AF4, 0x5C9A9926, 0xCF649249, 0x1212126E, 0xF102552C,
+0x27E1CBC3, 0xAF8A4939, 0x8677CBD2, 0x2151DCA7, 0xB1AA58BA, 0x199C2FC4, 0xC90E8DF0, 0x77A9D1DF,
+0xD82AB97F, 0x9A6C3AEC, 0x5A316A8B, 0x174E3095, 0x7A5E3878, 0xEE851B03, 0x1BA83C0C, 0xEBDB9A89,
+0xDC4111BC, 0x1A7243FD, 0x5827078D, 0xDB1E1A86, 0x30355C3B, 0xB602D570, 0xA69D9E5F, 0x8EBD061A,
+0xAAD79A92, 0xD06D89D1, 0xC206BF02, 0xEC1D851A, 0xBF1313AC, 0x584F5E23, 0xC4A9EB23, 0x6A3E8E9B,
+0xEA42B018, 0x538445EF, 0x68A247A5, 0x2B292FAF, 0xD146ED1D, 0x9C827E17, 0xFAB024D7, 0xFB8A6FF4,
+0x27493148, 0xBE213AE2, 0x65A5ECE6, 0x9AF23D17, 0xBC32C4FB, 0xD046EEC3, 0xE246DFBC, 0x6F38860B,
+0xF61964F6, 0xA007D6A3, 0xDFE8B127, 0xECBD9B96, 0x14957673, 0x08B195C4, 0xCCF71DDD, 0xBEE95090,
+0x7167E7EF, 0x76CDBD94, 0x1319AD09, 0xA7C7846F, 0x490B6533, 0xFCB0F3BE, 0x58E66BB7, 0x379267F0,
+0x365F2CC5, 0xA1F805DC, 0xA6BE446C, 0x051FD8A1, 0x839C0C37, 0xD4209230, 0x67686E75, 0xAF8F88F6,
+0x9D98E56F, 0x7234B210, 0xCD4193B8, 0x5D62B97F, 0x4E10714E, 0xB67A5DAF, 0x876F76DF, 0xFF553BC9,
+0xD3BE9F1D, 0xA398F094, 0x5A8D94B6, 0xE0EABE75, 0x18EC78E8, 0x5B68D244, 0xD2C8DE2E, 0xF11AF35D,
+0x6B55B1F7, 0x678FB175, 0x3E0DB0AB, 0x94449DC1, 0x1551017E, 0xC0DEE9A8, 0xB1085563, 0xD31C7502,
+0x4B1E0F39, 0x7717479C, 0xDDD9F5E6, 0x880DBB2F, 0x9D8F7B40, 0x34437CE5, 0xB07748D5, 0xD6F87073,
+0x74331D73, 0x4C4AAD9F, 0xEFF531DB, 0xF46F17C1, 0x71A4FCAE, 0xFC09B342, 0xC2D6ECB1, 0xCE269157,
+0x3A582D37, 0x83582104, 0x451AE876, 0x33AA636D, 0x4390B7AD, 0x170DDFE1, 0x7F265602, 0x297BF606,
+0xD0B9C217, 0x52DF8D0B, 0xF1BD8002, 0x9CE34A1F, 0xF36C9AF3, 0x9545D9F4, 0x1BD02E1A, 0x6B315A27,
+0xACEBF9A5, 0xF7B42004, 0xBB331E1D, 0xF3FC0CF4, 0x27E1E6F3, 0x7E999802, 0xC9062BBA, 0x38DFBAF1,
+0x8056D51E, 0xA2A6BE65, 0x7436BEB5, 0x4A6DFE47, 0xD5422CDA, 0xEE324AC6, 0x61BDEBD7, 0x638A0820,
+0x9161B1B5, 0xBE5D0B87, 0x4F487B05, 0xE9913AC9, 0x2B12B8E7, 0xB2A0183F, 0xF33E05BE, 0x86277761,
+0x3CCC30F2, 0xCC5D39E8, 0x89D199BD, 0x6AA1AA67, 0x84A2EBF8, 0xFD588F0B, 0x61F6982B, 0x875FABC3,
+0x2FC3DC57, 0x34756957, 0xD434CD1E, 0xBE0825F8, 0xE91E3FA3, 0xDF97BD36, 0x1A381106, 0x824D65B0,
+0xC5C3D564, 0x740682B4, 0x848540EF, 0xC6B585A1, 0xB3C43771, 0x6DC2C375, 0xB151A9B5, 0x5D663B71,
+0xE2934F1C, 0xE3AC876B, 0x6FFFF7CB, 0x12B4D4C2, 0xC9B18411, 0x14224830, 0xFA7CAF09, 0x95F509D6,
+0xBE44BCC8, 0xD2A2A0D0, 0xAAE8AFCC, 0x007A5BA3, 0xC54FD4AB, 0x9AD2CCD2, 0xCF239A96, 0x9D8E51B7,
+0xAA3FF2D4, 0xE3AFAF35, 0x7617F673, 0x3D750FA1, 0x4F816811, 0xE799FDC0, 0xDF04EA1A, 0x42D810E2,
+0x8B027EB5, 0xC0A32DAE, 0x3F3B1A31, 0x884B2FF7, 0x4C345330, 0xB8736960, 0xD11E812B, 0x091C837C,
+0x79E585C8, 0x18C45FF5, 0xF953A255, 0x29C34483, 0xA26A0F41, 0x3875B65E, 0x7CB1A0E0, 0x5E45AF40,
+0xF1358002, 0xF5E3E3A2, 0x77014595, 0xC9FF75AA, 0x21919757, 0xB1164C35, 0x39E2223D, 0xC9D5CF04,
+0xAC2BE479, 0x4676BBD8, 0x4BEDF708, 0x2C07A976, 0x3FD465EA, 0x65D56844, 0xE1E3F6EA, 0x5F628402,
+0xF7142AE8, 0x06DDDC33, 0x251A9073, 0x2B212C68, 0xE0107681, 0x9658585C, 0xEAA63076, 0xA20D245B,
+0xFF6438F5, 0xF93126CC, 0xBD8AFB59, 0x246EE26C, 0x304A8E08, 0xA010EAF8, 0x26FAD8CF, 0x93690ABF,
+0x585DB8E7, 0xCE3B988F, 0x59A01C77, 0xC21935BD, 0x6E7BD93A, 0xDE8ADEDB, 0xA1C066B6, 0x06366652,
+0x4B327EE8, 0xD987A176, 0x69718F4C, 0x4F3ED5E5, 0xA9BE4364, 0x5E06603E, 0x53B7C01F, 0x1DD963A3,
+0xB0F50BD8, 0x5D3EA123, 0x1C435137, 0x88E078F3, 0x20099DA6, 0xB7BE062F, 0xD23FC53F, 0x026B53EB,
+0xAC8A273B, 0x9620A601, 0x114AFC34, 0x0EED03FD, 0x25558493, 0x8DFC8371, 0x60FD9091, 0x33C4C624,
+0x44AC9B41, 0x026942EF, 0x64774ABC, 0xB135F724, 0x9545E2D2, 0x13B3D916, 0x1F604953, 0x75584D1A,
+0x9BD9AD34, 0x3E51F9E5, 0x7DA2955D, 0x3B4092A9, 0x500027E9, 0xF08E729D, 0x342B4034, 0x9E69AEA9,
+0xD444D399, 0x0CD6A4D0, 0x83D1594E, 0xAC8261BA, 0x80E213DC, 0xCB7BFCD0, 0xD9EA5F4E, 0x8ADDC4A6,
+0x62B55624, 0x01A09EA1, 0x4EE9A1B7, 0x9FE23031, 0x6CE6793B, 0x8ADC85C7, 0xA7EE9674, 0x16EC31E9,
+0x9DD04D09, 0x4B17226C, 0x3F8FF58C, 0x2C403556, 0xF307EDDA, 0x57208C27, 0xABC6C4BD, 0x6795E1FE,
+0xB728C62E, 0x52BDF6A3, 0x725B60D2, 0x07AE9560, 0x492F1C5B, 0x91463D76, 0x4E394D43, 0xA99E8C33,
+0x9D7DFC1A, 0xADBBAEC1, 0xE5FBB0C5, 0x9F773558, 0xE08AB23C, 0x3DB41147, 0xF0818607, 0x4A794278,
+0x1F0CDABD, 0x24425C3A, 0x5F90A257, 0xBF499B72, 0x54F679FC, 0xC8791FE8, 0x9774A855, 0x81873DBF,
+0x15C589E3, 0x0D507B96, 0x95CD1D26, 0x993435EB, 0xD798FA12, 0x51960185, 0xEE625B44, 0x5C3DC7D5,
+0x6F17B6F8, 0x00AEC1E5, 0x05689B37, 0xECA19CF0, 0xDF0216A5, 0xF025F309, 0x565BD469, 0xC10723C4,
+0x79D05693, 0xA12757AC, 0x8787FD3A, 0xACC36B95, 0x23C47A37, 0x4BE5990F, 0x3CC5D7BE, 0x61B124E2,
+0xCCA82764, 0x2B9141D9, 0xF82EDC96, 0x00346DB2, 0x02F7B39F, 0x133B9F48, 0x0E49416A, 0x9D7411BD,
+0xEFE69778, 0x68574F06, 0x6EB645E7, 0x07DB7208, 0x8AFC0AA1, 0xDC15B1C1, 0x6A9DCA34, 0xF4D9BC9B,
+0x5F9B3860, 0xE7BAEA1D, 0x48F44B57, 0x756B3C2A, 0x321970B2, 0xE704E6FC, 0x1519CC77, 0xAABA7039,
+0x77853269, 0xA62DDAD0, 0x3B39D7A4, 0xA0ADC780, 0x2729BD11, 0x5CAD9FB4, 0x1720AE5C, 0xBFE9D564,
+0xB5E87625, 0x843F906A, 0xC8BA9194, 0xA75DA618, 0x0A4BE5D1, 0x8AD19DD8, 0xA7F2CA28, 0xAFDD6382,
+0xFDEE24C1, 0x6CA6FCE1, 0x9881E4D9, 0xB25BA59F, 0x3BFFC178, 0x6B12E50A, 0xCF4C4137, 0x9943532A,
+0x31712028, 0x9E1786F0, 0xCC4D9AFF, 0x2E6DC8AE, 0xBA78CFD7, 0xE38F1CED, 0x0B537CC2, 0x42210E19,
+0xDF7A2775, 0x2E208E49, 0x1F7A18D4, 0x30A0E0DA, 0x0DACDB8D, 0xA2487FCE, 0xB11D0018, 0xA73748B0,
+0xD7FB106E, 0x12135855, 0xA0A7F512, 0xC08618F9, 0x2E0A5850, 0x6D04F872, 0x29678E8D, 0x06A88F95,
+0xA7831CA0, 0x592E9D68, 0x751F858A, 0x424C85E2, 0x878CE8AD, 0xAFEE0DA7, 0x070F909A, 0xDF73045F,
+0x98D7E232, 0xE669DE8C, 0x7930359A, 0xB16461D2, 0x42E66397, 0xE0D03244, 0x109D7102, 0xCE342B6F,
+0x32DADEFA, 0x8C0BB116, 0x5FFCAEFC, 0x80285206, 0xFBA9E169, 0x0D7D4A43, 0xDB2BE8DD, 0xB9B9FCF5,
+0x70E990C3, 0xB25DEC08, 0x4F50010D, 0xD471FB00, 0x2B3BFB93, 0x68362B8B, 0x1E206AF3, 0xFC34D6AC,
+0xE0F8DD2B, 0xCB4D6F8A, 0x47A631EC, 0x9629061D, 0x96FC6586, 0x916172F6, 0x7B71CFAD, 0x3FF32F63,
+0xA7C33931, 0x5E077F3E, 0x66FE1878, 0x52657E10, 0x419A84D3, 0x4C3F45A8, 0xF1DAE237, 0x0D30C761,
+0x12BDB699, 0x3710AF54, 0x254CBD73, 0x8CC822D6, 0x5D802512, 0x8BD390FD, 0xBF9D5C87, 0x94CDD137,
+0xAB8E8847, 0x84E5CA5C, 0x52BC7389, 0xC8E2007F, 0x70DF1552, 0xD63EB947, 0x4F3C2286, 0xB619262B,
+0x6071EEE2, 0x5D491F34, 0xB6494AB4, 0xF088D460, 0x3D13A312, 0x6CF965AE, 0x9E6461B0, 0xDB2C6588,
+0xECBBCB27, 0x5F9280ED, 0xB2F974F6, 0x163078B2, 0x730045C7, 0xC04941C5, 0xEAB0F160, 0x3D992DCB,
+0x0AEAFB69, 0x8F2C2A3A, 0x44E2A927, 0x7B54E6EF, 0x9485BA4F, 0xEEFEE086, 0x09A382B9, 0x4C9285F3,
+0xD265A767, 0x6F8D70B2, 0xA897C830, 0xEA841571, 0x9D8DD923, 0x6286C776, 0xBB8ACD35, 0xB656A315,
+0xB0D33881, 0xF4B186A6, 0x67462B96, 0x62DCF308, 0xE4ED27F1, 0x0F64FEC7, 0x9FB059A3, 0xE050E30A,
+0x7BE58E65, 0xCC6EC8B3, 0x043F3271, 0xBB1A3703, 0x6BAA1C54, 0x5466B0A2, 0xA5FD0FEE, 0xAF0808A5,
+0x4C19E86A, 0x4E69D64C, 0xB788CDA8, 0x10DD5926, 0xDFEB238C, 0x091C95A6, 0x8E732125, 0x4F2D4A7C,
+0x63328F34, 0x3C7009A1, 0x4E12837E, 0x903BBAC6, 0x92D6B227, 0x9DD5A2E8, 0xDAA38799, 0x55CB9D54,
+0xC853767B, 0x0E2B32E0, 0x47B41ED3, 0x87ACAD80, 0x4CA2667B, 0xA61C1CB6, 0xA67A6C7F, 0xD83B3602,
+0x0F97D222, 0x63556658, 0xB2E5C01E, 0xA61B8534, 0x30407CC8, 0x14A95106, 0x72737AA0, 0x81DB6B44,
+0x4B0C4BE2, 0xDF075B63, 0x64279384, 0x3B501AE4, 0xE823A604, 0x554DD8E7, 0xAAD1117A, 0x94254DC0,
+0x786CBC50, 0xC06F5BD1, 0xD80F4942, 0x7760208F, 0xA1A1C612, 0x61B5DEEE, 0xAA0CC89F, 0xD29E06AB,
+0x3F97837B, 0xA1D65CBD, 0x35B9264F, 0xF16C8597, 0x095BFF89, 0xCEF88721, 0x6129C9F7, 0xC2E6F318,
+0xE37574D6, 0xC251CDD2, 0xAF632BCA, 0x052B535A, 0x86988EA7, 0x1B60B35C, 0xF8995F71, 0x25C7856D,
+0xBAF1C488, 0xEAC7E31E, 0x362325B7, 0xB7915814, 0x14CC8C7B, 0xA177C2B8, 0xB8CCAFA6, 0xD538B353,
+0xD42584A6, 0x25835233, 0x42A337A1, 0x0245940F, 0x1FF12AF9, 0x4B910E1F, 0xFAE16034, 0x85938567,
+0xAE985E6F, 0x47F4C93B, 0xF8F5A780, 0x8705E88E, 0xFEA2DE06, 0x9A5A1E8F, 0x85472D44, 0x2D088799,
+0xA0FA5714, 0x7C314E08, 0x9DD61B93, 0x4C7F80F6, 0x03DBC210, 0xB199258F, 0x88454BF4, 0xE2DEF6E5,
+0x99A8341D, 0x6D7C95B8, 0xCBD7F51E, 0xEB6025A7, 0x6A22AA5C, 0x0E2FB460, 0x9C8F2424, 0x117DD5FB,
+0x840B40AD, 0x50F88719, 0xD8F187F9, 0x5812BB83, 0x3AB49872, 0x7EDF9456, 0xBEE01609, 0xF5F1E5A6,
+0x9D3356DF, 0xB2980589, 0xEF1D5759, 0x575799A6, 0x7793C1EB, 0x9AB52FF2, 0x2933D526, 0x107D9154,
+0x7D3FCDC2, 0x56170396, 0x5CDF7437, 0x416DEAA8, 0xCCFDD0A1, 0x22FEB480, 0x32FC5FE2, 0x22E5ABCB,
+0xA1005683, 0xE0BC6B1F, 0xA1D89A3A, 0x7B0AEA9B, 0x5ADE1899, 0x97D78E0A, 0x40E6C728, 0x94D18FE3,
+0x50DA9D62, 0x694DDC5D, 0x1DAFACA0, 0xA98C9572, 0x0EAB70D0, 0x4981B0D7, 0x7E615D02, 0x9E6238AD,
+0xF1EFA015, 0xEAF7BC10, 0x8F574B47, 0xF40488A7, 0xEAED3611, 0xA62577D6, 0x89C1AF69, 0xDFF1528C,
+0xDA7FBCA8, 0xF9035D10, 0x49EDC3C3, 0xFB0D5907, 0x5284BE02, 0xBFA7C8D4, 0xBF3E5A04, 0x3AAD9526,
+0xD3AF3CCD, 0xD24DD20F, 0x904CA600, 0xC7005CD3, 0xAB0ADFC5, 0x9E60086D, 0x9208DBD2, 0x8E6D4D74,
+0x1BD58AFF, 0xEA48CBF6, 0x46E2E1B7, 0xA91BB158, 0x49AEAFBA, 0x86E1D48A, 0x45CE2C95, 0x3329A5DB,
+0x40425983, 0xF90F6473, 0x646D4DB5, 0x3DA762DB, 0x0A51518A, 0x56641A31, 0x699215A5, 0xCEA73B80,
+0x6E3F2569, 0x4D7BF774, 0xEB7C4256, 0x94CC002C, 0x755B08DF, 0x9D323344, 0x3143C16B, 0x392CA8EC,
+0xB5341BF6, 0x9973425D, 0x8BD6C798, 0xAA788E89, 0x1FA794B5, 0x403092BE, 0xAABB33AA, 0x6EBA4997,
+0x7EA6640F, 0x7B4C74DA, 0xCD11770D, 0x0CDF311A, 0xE51791DA, 0xEA835850, 0x18758898, 0x13D13CD2,
+0x40EE3C83, 0x8182E386, 0x8ED5E241, 0x28AD7D67, 0x39ACEA58, 0x4CE9A4A9, 0x338BE5B7, 0x0F3ABEC5,
+0x7CB5670E, 0x2B11EC76, 0xB0CEB2DA, 0xE3F87BDE, 0xB16614DA, 0x95EF8043, 0x9A45BF93, 0x740359FE,
+0xC68CB359, 0x8D73657F, 0x23EED822, 0x2635BECF, 0xCEE3799F, 0x7C04B9BA, 0x94A8C967, 0xB617D3B4,
+0xBF7FF2A4, 0xADFB83FB, 0x5DF32F72, 0xC2610488, 0xE52ACF62, 0x9F348513, 0x751E1EFB, 0xB78D9466,
+0x4BD1E030, 0x5FA2101F, 0x587E9FD2, 0xFEFCA956, 0xF2A61295, 0xD0984009, 0x44974206, 0x4150E8AA,
+0x1035943D, 0x9B449F9A, 0x8D008CA8, 0xC04D02CC, 0x86B60734, 0x8F4FF29B, 0x5B19C4E7, 0x7392D6CC,
+0xB9E4556A, 0xD4EE923A, 0xE6FFA0A3, 0x0932DC34, 0x9C8E69F9, 0xD3440710, 0x2E0ED777, 0x0242C402,
+0x7259BAEF, 0xBF93F519, 0x12C2FB87, 0x821A11AA, 0xCC2FEE64, 0x29E6A55A, 0x09ACDA34, 0x878E4627,
+0xF3510C71, 0x286A9723, 0xAE481AE1, 0x155FD639, 0xD9848A85, 0x168AE2B1, 0x4383E0F1, 0xC7850047,
+0xBE03B526, 0x402143C0, 0xB2B68D2C, 0x8896B00F, 0x99AF1408, 0xB2C0941F, 0x995D66C1, 0xA432FF7D,
+0x56172020, 0x5D99A17B, 0x683700D4, 0xFD7AE431, 0xD080E08D, 0x5A5FDE45, 0xB39FF1E4, 0x2827D84B,
+0x1C005883, 0x815A28E0, 0x518B1864, 0xA615F733, 0x580F3338, 0x68E5AC7F, 0x5E621923, 0x9C2AE09E,
+0x1165E3BE, 0xEF936C1B, 0x6E7A0B28, 0x996A6E4A, 0xBBA480F5, 0xE3C7B777, 0xD9BC5319, 0x2D12A122,
+0x078B6790, 0x7C739790, 0x20F54004, 0x34ADF351, 0x85411225, 0xAE11853F, 0x3189B94F, 0x392A9EBA,
+0xDCD77224, 0x612F5C10, 0x634BBD60, 0xD12B3122, 0x1BABCD90, 0x636D32F9, 0x60335813, 0xF8D50FAF,
+0xB8A750F6, 0x27F2528D, 0x07613594, 0xDC6243D3, 0x606B5C03, 0x210150CB, 0xC6CE96B0, 0xADA5DA56,
+0x466F428F, 0x1C1A05A9, 0x75424D31, 0xE953EB16, 0x0C2B30A1, 0x31011439, 0xC224139D, 0xEC216836,
+0xAAA57A1C, 0x3B114FC6, 0x42D414A6, 0x9425552C, 0xE7DF5204, 0x5A2BEA23, 0xDD9D125E, 0xB5352B96,
+0x9B6639A1, 0x16F68632, 0xDC7AC38B, 0xD11C923A, 0xEF5A4206, 0xE12A89BC, 0xDFEF828A, 0x14F048B9,
+0x98E54548, 0x6A25722E, 0x7EAF886D, 0xB906F1FE, 0x5812788D, 0xE67F1D95, 0x5D449271, 0xA441A541,
+0x1F7A32DD, 0x5CC17E8F, 0x0FBED091, 0x4061E141, 0x6D5C44AC, 0x65EE9A63, 0xEBD2D2F4, 0x6A787116,
+0x945C6F0C, 0x57781620, 0xB866A110, 0x4A962F52, 0x8F1D4767, 0x8B2324B9, 0x72C60D18, 0x9EEFCC48,
+0x475E332E, 0x1C0BBAAD, 0x51A9D7D4, 0x4AAB2808, 0x22C61026, 0x470CB6BF, 0xA98CD3AD, 0x7AD89D4B,
+0x9E242191, 0x781B9DC2, 0x780AAD91, 0xE5410C9F, 0xDEC41985, 0x02B64FBF, 0x4BE54437, 0x98A3914B,
+0x292CED1C, 0x3555B84F, 0x3E1F9BBC, 0x3582311C, 0x7B20FB3A, 0xB253C5B2, 0x5E8D83DA, 0x3552F438,
+0x7DE1B26B, 0x84CB5F3A, 0x9EBBAB9A, 0xE3649189, 0xAD089533, 0x80CBE90B, 0x905B87BB, 0x3AB4601C,
+0x073C09A8, 0xF2BB4D09, 0x99A51505, 0xA5FCEEEE, 0xB8671663, 0xB363186D, 0xA05EB4A6, 0xE3739E86,
+0x9CB24886, 0x301F7D67, 0x4738B464, 0x336CDCFA, 0x72227D8A, 0x3C45222D, 0xDF67027A, 0x874C2D98,
+0x8989C1C4, 0xE7C67CCB, 0x1FC1542C, 0x070DACD3, 0x39AF20A2, 0x81A690D0, 0xAE0E1C60, 0x3C93E1BB,
+0x1623E696, 0x86068093, 0xC934EA82, 0xA82D38A3, 0x9E1CE1B3, 0xF33EAF60, 0xB7C11C3B, 0xDABEF7F2,
+0x7314B450, 0x568FD3C5, 0xD42EA872, 0x14A78E18, 0xF3B95B98, 0x8A8E20D2, 0xAEBE296C, 0x26AAC52A,
+0x38896BDE, 0x4759C5B3, 0xA3534180, 0xA6163230, 0x3CF8EFAD, 0xB1408956, 0xCF3DA73B, 0x747E895E,
+0xF6179B84, 0xB1F33104, 0x8B8B8D76, 0x798392BC, 0x66B3FE37, 0x0C9FB0FF, 0xDE02169C, 0xF63B6BA6,
+0x278CA0D0, 0x1B839961, 0x9E8FB765, 0xFA0E90F1, 0x7D3D2144, 0x67100ACB, 0x87D38AB2, 0x1AEEC082,
+0x6620E3A7, 0x8968D7DE, 0xC6E9A644, 0xB1CF8EB9, 0x8CBE16AC, 0x8129E9F1, 0x55D6ADB8, 0x492D2D12,
+0x628CC5A8, 0x3420478D, 0x2C7A1B92, 0xBA4F6EF3, 0x7E0F88CA, 0x2C48962C, 0x7BD21552, 0x358C1ABC,
+0xA077C485, 0xD5AF6289, 0xB3554C83, 0x82763CE1, 0xDCA47801, 0x6C737358, 0x7215F747, 0x4AB859A5,
+0x63A42EDA, 0x7ECE75D8, 0xA289D9B5, 0x93A18E7C, 0xA7FCE5F5, 0x7ED406BB, 0x9AFE5EFD, 0x6E88E4BA,
+0x5D123BEE, 0xA10D62DE, 0xA3859628, 0x182CDBFF, 0x9EA7879C, 0x56DBFBE6, 0x20317634, 0x89F4E70A,
+0x65597020, 0xEB7BA8B6, 0xD34B77A5, 0x3BF26558, 0x7787538E, 0x6A7F1AAF, 0xBBF4E78D, 0x584BA8C5,
+0x2D43EB48, 0x36804640, 0x006B9320, 0x3D484A13, 0xAC66A974, 0x01AB615E, 0x135323DC, 0x5715A472,
+0x362CF0DC, 0x66FE0552, 0x45258FB9, 0x13E7E94E, 0xCB80D584, 0x4E496F96, 0xCE4D8805, 0x997F831D,
+0x799EF62C, 0x99CA3AC3, 0x5422BDB1, 0xB8BCD281, 0x9ED35575, 0xC91AA4EC, 0xDFF9A740, 0xE5891809,
+0x2EBECFAA, 0x4346B15B, 0xDE484FB5, 0xC9B304D1, 0x9655FD60, 0xC1817A85, 0xBF2AA87E, 0x97403B4E,
+0x22980E8E, 0xA2D6E124, 0xE9C783F2, 0xA625EFF0, 0x20992E90, 0x6C266A32, 0x671B189E, 0x032C9B64,
+0x75141BD2, 0x616E3381, 0x6E38A06A, 0x14E697B2, 0xA418B59D, 0x5BA84A4D, 0xF67893BF, 0x8049B3B2,
+0xF29DDDC3, 0xDB62EAFD, 0x4950B931, 0xC3E77C27, 0x2CCA07F0, 0x3B691D0F, 0xB597CB90, 0xB6CFD5C7,
+0xF73C28B7, 0x6328AA3E, 0x40388959, 0x14E6346B, 0x00B8ECA9, 0xF0295397, 0xA4544930, 0x0BDDBB1F,
+0x156F748C, 0xEC4F8D32, 0x277138C9, 0xCB9ED21B, 0xAA86FA12, 0xCF2F6ABB, 0x2BB757FA, 0x7AD28D05,
+0x2197C031, 0x2FAA779D, 0xC46BFF0E, 0xF3B85677, 0x5589313F, 0xB33E8DA1, 0xB1F4A782, 0x537DB0F0,
+0xAA1FEE5D, 0x7E174F11, 0x8BE42790, 0xF13899EA, 0x7190C7E4, 0x47F744A2, 0x39152AF1, 0x7FF63FD1,
+0x932CEFF1, 0xF321DF0D, 0xC775279F, 0xC8D96C8F, 0x067F85A3, 0x8E465747, 0xD5102265, 0x3DA69AD4,
+0x978EB0ED, 0x4760FD4C, 0x4E09A30C, 0xC6536C94, 0x38A83E00, 0x9E055EED, 0xDA9FBA2A, 0xE0E0E375,
+0x490B2D47, 0xE4F78BDF, 0x95150A04, 0x09CD12C0, 0xAF508AD1, 0x2CE9AB81, 0xA83B3947, 0xFF1C8260,
+0x83F43B50, 0xFA56F5AC, 0x47ACC0C7, 0x88B10418, 0x72B15484, 0x6292D2CB, 0xBED229E6, 0xEC9E774E,
+0x5DDF6E22, 0x49D18F84, 0xAA851075, 0xDCDDC904, 0x221E70A8, 0xCF034A13, 0x1FD64E86, 0xECE5A61F,
+0xB0CBC3FA, 0x510E1BCC, 0x885A8593, 0x79F892BF, 0x67135920, 0x0A8E33C0, 0x5BBED54A, 0x62AAF4E1,
+0xE2EF2BD2, 0x61B47B64, 0x5FBCB603, 0xC78A28E8, 0x4CE890D0, 0x0DE8FBF9, 0x1240E4EF, 0x7467594A,
+0xBEC42B69, 0xF96181CC, 0x2A4FE2EC, 0x22A66E71, 0x3FC5F0A4, 0x1C10E555, 0xC464F05F, 0x88FF4F3C,
+0x594D962D, 0x8874F41F, 0x68B47BF1, 0x43EAFDA2, 0xECFEC208, 0x8BD77720, 0x17426BD7, 0xA0B94822,
+0xBED6EDFD, 0xABEED4CF, 0x1AAD0FA9, 0xB5CFE53E, 0xDD078817, 0xDF6FB310, 0x542B1385, 0x98814DFC,
+0xDE7C87FE, 0xE9017DAD, 0x5C56896B, 0x261299FC, 0xC9451298, 0xB257BE6E, 0xE82D44B6, 0x5C481FBE,
+0xB75E037B, 0xF159EFDE, 0xF7914EA9, 0xECCA6E30, 0x57C7C38E, 0xDD9E9629, 0x0699DCB9, 0xCB8B901D,
+0xB692761E, 0x9480F302, 0x1C9AF163, 0x336461F9, 0x0CA713A4, 0x70F23D11, 0x1F4D7AF3, 0x9B6A7074,
+0x69747CA1, 0xD19DB888, 0x7EF5830A, 0xF872D4DB, 0x0B55EF1B, 0x79C4D1B5, 0x886F01F6, 0x90EEBAE9,
+0x09DB0C20, 0xC6B146F5, 0x3B2BE18F, 0x66AFEE6E, 0x53B231D5, 0x4F87C0A5, 0x8E8D01BB, 0x87C268FA,
+0x56169426, 0x580A39F0, 0xE0CA2289, 0x02FA1A13, 0xD88FA3BD, 0x65C79CAE, 0x2C1D4DC8, 0xFD16A400,
+0x66141D4D, 0x7C9543C4, 0xD3FF9D67, 0xB5035B84, 0xBBFD54F1, 0x5BA880E6, 0x8F722880, 0xE695336A,
+0x6605930E, 0x3D099EEC, 0x58FF5747, 0x373605A7, 0xA0BEDD1C, 0x82AB8460, 0x53276998, 0x4B52BED9,
+0xB8EF3EDC, 0x214F7181, 0x2CCF1B4E, 0x96E4B344, 0x0EF32A81, 0xAB89F0B6, 0xC2508950, 0xBF2E242A,
+0x9CF8606C, 0x6C6A8545, 0xDD62924E, 0x2D7C041E, 0x3E1621A8, 0x07FE338A, 0x04885B3B, 0xA9376C37,
+0xD1A30B77, 0x8BA64573, 0x9C17EBA2, 0x10C46112, 0xA7C789D5, 0xB27B7252, 0x64943188, 0xD7EF27AB,
+0x733FEFBE, 0x650BF2F6, 0x48DAAB88, 0x25E2A63E, 0x677F97D1, 0x998186A3, 0x2EF16465, 0xAA9CDD82,
+0x318AAFD2, 0xCB76E8C7, 0x2CD55DDA, 0x07A206D6, 0x62618626, 0x560F7149, 0xB2E9D64C, 0x4C9C386F,
+0x03D2A875, 0x32B001B7, 0x8A9089CE, 0x58B6D64B, 0x8D045412, 0x9EB73AE2, 0x0B7A8D09, 0x17FDD9A7,
+0x30EA3556, 0xFD73DDBC, 0x61897E1B, 0xC6762347, 0x4898C463, 0x7DE7B25A, 0x9F25220C, 0x9ABC2273,
+0x1A17F9C4, 0xB355482E, 0xF09A6753, 0x1D1A369F, 0x6AF306E2, 0xEB6E651C, 0x0B592FFB, 0x29FEF346,
+0x3476AAD2, 0x0A4A9F1F, 0x2163E16B, 0xB4F6669C, 0x87F9A447, 0xB6937F0F, 0x734D7263, 0x2232B0CE,
+0xF1854A9E, 0xFB09813B, 0xAE8DD21C, 0x8E7AF48F, 0x9BE3A97C, 0x833D92E6, 0x07A94607, 0xEFFB1895,
+0x3DAEFAAC, 0x5007B930, 0xF412C34C, 0xAEF9397E, 0x97C136AB, 0x8D0DA650, 0x712A1D06, 0x37B168DD,
+0xE3DCCDB6, 0x0CC45E6B, 0xA06A0D15, 0x6E85B4BD, 0x1B921E3A, 0x089956CC, 0x771E29A3, 0x1AA091AA,
+0x5DB3398B, 0xCF29B6EA, 0x4075D1B6, 0xFFA6559D, 0xEE2F2725, 0x5A2277E5, 0x0BE60F46, 0x2B4CB480,
+0xD47133FD, 0x823EEB5F, 0xE2E8A0EE, 0x341B9ABF, 0x9A24FD3B, 0xC43921D0, 0xB0768F8C, 0x4F4397B5,
+0xCBB0EAF2, 0x7570E1A5, 0xFA14485F, 0xC868CFB6, 0xE45D8739, 0x4DF5A971, 0x69802AF3, 0xD1CDD0E1,
+0xA5CC74D8, 0xC4F18AC0, 0xE500E30C, 0xF7FDE4CF, 0xD162729E, 0x6F3498A1, 0x35F6FBA4, 0x5F7B6A17,
+0x67442C51, 0x95B72844, 0x1E34249C, 0xC4DF1F92, 0xE77F1D32, 0x35FD98B9, 0x67DF04ED, 0x6A456F6D,
+0x17E8F2AA, 0x2B0F8A8B, 0x45E913AB, 0x853D38A7, 0x6FB1A5EC, 0x49EB9A34, 0xDFE71B2E, 0x9913F8E2,
+0xB41B7CE4, 0x8C93E6B0, 0x91ADB905, 0xDD1F3804, 0x92A9B1BA, 0x7D95406D, 0x3CCD91C5, 0xCA9073C5,
+0x85271FCB, 0xD4C4C3AF, 0x8E1C56B3, 0x0C8AB281, 0x1FD2F6B1, 0xB7702787, 0x04A39B6C, 0x7D29577B,
+0xAEB811A5, 0xD1795D31, 0xE15B82C7, 0xBB881790, 0x2FA03009, 0xD4F7C097, 0xF2830715, 0x04922477,
+0x12D78AF8, 0xAB0D8E13, 0x0AE0CA31, 0x0E033309, 0x83226011, 0x5CC5E259, 0xCDF21B4F, 0xC2DE2297,
+0x51010F04, 0xE7E55C6B, 0xB40205F8, 0x2286D286, 0xD05DCEC6, 0x1642C24B, 0x690459CB, 0x928D33FE,
+0x28033DB9, 0x213B6AA9, 0x6807ADD9, 0x20F36F7F, 0x9FACEB1E, 0x935A0270, 0x27EC266E, 0x6ED1C232,
+0x28862B6F, 0x4AF497D7, 0x2661710E, 0x90CD35F4, 0xC1C69B9F, 0x2B3AB2CB, 0x90587986, 0xBC39E2BF,
+0xA9031E49, 0xE9456BB0, 0x96CA37D3, 0x93566D93, 0x333E5515, 0x75C50949, 0x451D3E92, 0x637EF1BB,
+0x7B4AA07B, 0x3B6F7540, 0x1EFD45EF, 0x6D648F3C, 0xC1758BC4, 0xDF6C7A4A, 0x8D492618, 0x9DEC7541,
+0x365DF908, 0x003080B2, 0x00425374, 0x9E0E553E, 0x75FFEBA0, 0x668C2CF5, 0xFF493525, 0xC87C7308,
+0x1AAA49DA, 0xB660187D, 0x85667BA3, 0x8BD53246, 0xAAEEAACD, 0x9990A526, 0xF17C6173, 0xC39BADCA,
+0x474E1D8C, 0xD4C652B3, 0x185F732B, 0xF7DF897E, 0x57E6E1C1, 0x63F71C1F, 0x3AD98C96, 0xF3377BCB,
+0x575EE7AD, 0x364DA27A, 0xAAE20CCA, 0x37A6BE4F, 0x94DD82EF, 0x7DD6020A, 0xD168602B, 0xB03BAF6B,
+0x132CA05E, 0xFCAD3A58, 0x01BA3871, 0x0C95625B, 0xA897B3FB, 0xD9184145, 0x13A50D75, 0xCC8EA95D,
+0xEB6C042C, 0x81B41791, 0x6CB661CA, 0x5D99CA0D, 0x7626E76C, 0x65109EDF, 0x227C458E, 0xE8BDEC7E,
+0xF9DF5DE3, 0x9A2BE397, 0xE49130EB, 0x54A45D30, 0xEB05BB8D, 0x38CC5382, 0x628394E4, 0xDA226105,
+0x3FC4B803, 0xA2283596, 0xDDAF2F6F, 0x2D8D177A, 0xE1A44565, 0xD1A36929, 0xCCB1D4F3, 0x031D3973,
+0x8B1F3891, 0x223BC4D9, 0xFFF4952F, 0xD69A667B, 0x7483E3BD, 0x1AF2FA0C, 0x8C9ACA54, 0xEDA49128,
+0x647C21FC, 0x9EC7C1E5, 0xDF5FD00F, 0xD6F6EEAD, 0x08C327F2, 0x84EEE848, 0x8DE96674, 0x0D43357F,
+0xFC60B6B0, 0x7653D3C2, 0x3E8260C1, 0x18DBCB7A, 0x5A7BF472, 0x671B06F5, 0x8BA128D0, 0x1408A859,
+0x52488154, 0x542BAA4D, 0x51E22876, 0x59CF9050, 0x9CC16673, 0xF2EFEB61, 0x1830C850, 0x45059AD9,
+0x7AB772D9, 0xC4314FBF, 0x0FB4B9FC, 0x6AB68679, 0xE57FE00F, 0x1F92DC4E, 0x4235683D, 0xA04B862E,
+0x90321236, 0x58AB6532, 0x1F6A694D, 0xBF05B71B, 0xFEB58555, 0xB54DA8A5, 0x728512E9, 0xBEC2FEAF,
+0x97B0C8F8, 0x8D4E4EAD, 0xC368CFD6, 0xD015F05B, 0x5E247083, 0x91C91413, 0xC971E4A1, 0x416027E5,
+0x8D972076, 0x9539887D, 0xAE9EA965, 0x782B7048, 0xEE9FC52B, 0x41C13E41, 0x4517D2E7, 0x7FCCC054,
+0x583D7DC5, 0xC07729AE, 0xC1BE05C8, 0x2765EF26, 0xBCC455A7, 0xE56DA711, 0x359F86A9, 0x33A0CB66,
+0xF4951354, 0x9F06A3E2, 0xF8297445, 0x0882A3A0, 0x89537AD9, 0x44138D8D, 0x5ACF40E5, 0x22209EA2,
+0xC078868B, 0xF8E08098, 0xD7E6D980, 0x4D3990AE, 0xFE2A8F63, 0xCE160DD1, 0x463C7626, 0xC4468B37,
+0xBADF2CA7, 0xDD5FCE7A, 0xAB838526, 0xAF72BA06, 0x5554101C, 0x80F6C265, 0xCBFB1F3D, 0x773E97C5,
+0x7DDF5796, 0x7D3306E8, 0xEC3BA4C6, 0x459364D6, 0x3E469D2F, 0x5FA0EC84, 0x2EFEC871, 0x842CC4F0,
+0x1E74952B, 0xB39E08FC, 0xAD52D198, 0x75FD5E17, 0x84C08A7E, 0x16C52E5A, 0x9F576F8D, 0xF95072B1,
+0x8BF3364B, 0x413E758E, 0x76A5A71F, 0xC6300672, 0x9FD2B6A8, 0x56DEC040, 0x94A5867E, 0x4D426A56,
+0x0B77C35E, 0xC8457659, 0xA9B6B975, 0x8613070B, 0x2446DB8C, 0x75CEE82D, 0xE3FD402B, 0x81CB844E,
+0x7DDF3A8B, 0xEED77407, 0x8C9EB60A, 0x1E0E6B93, 0x8FC2C50C, 0x1AA12C8F, 0x94E83260, 0xF1C3CEBE,
+0x01A54F9A, 0xE4D75FE0, 0xDC4CD40C, 0x8CC95371, 0xA2B29FA9, 0x30FC0F33, 0x9876EC29, 0x44CE3C1C,
+0x88888B2A, 0xCABBB335, 0x4A2BD4A9, 0x3301956F, 0xC411480F, 0xA762BB62, 0xD33FF35A, 0x1A147348,
+0x739E186B, 0x09A332F5, 0x0F69F392, 0x4B667836, 0xBFC9B744, 0x17D291CA, 0x7644419A, 0xCAFFA6F2,
+0x57564F50, 0x6B478F58, 0x26C62A62, 0x8EB0F813, 0x38967949, 0x6B96F465, 0x22EC6726, 0x46D99057,
+0x8175E1C5, 0x9D7DEFFF, 0x935859B6, 0xCD8C89AE, 0xE166E900, 0xDD68AFE0, 0xEA1051A9, 0x208E19D6,
+0xB775B558, 0x5184E3CD, 0xD1A2659D, 0xF665E7E5, 0xA62737E4, 0x1AD4F79A, 0x66FF81D0, 0xA2731865,
+0x01A9624A, 0xE325B0BD, 0xD27FCFE0, 0xAA9C77A6, 0x3BF240D0, 0xDE954129, 0xCEA87B84, 0xAC6B3F36,
+0xB7B210B3, 0x6C73C2F2, 0x868F8CDA, 0x94D7D657, 0x5B946CEB, 0x408BF400, 0x581F5853, 0x05E52495,
+0x50AB3908, 0x34B24667, 0xDE610FDC, 0x72D42708, 0xB8E54C29, 0x1AC0C398, 0x996BFB81, 0x9C65F651,
+0x404424E9, 0xADCB95EE, 0x12C79038, 0x0A672EF7, 0xBB92E579, 0xAE90D59A, 0xDB12A64E, 0x0CF8681E,
+0x00FBBB10, 0x90E5E374, 0xB19C0800, 0xF2F9EC0A, 0x99540888, 0x2530915F, 0x8075FAFD, 0x4B1584AD,
+0xCBBCDC45, 0x4F722EC1, 0xF83250AF, 0x0E7550C9, 0xB95922F5, 0x6174227C, 0xE2F8AFB0, 0xE1DA675A,
+0x6D9EAEB0, 0x715C36A6, 0xD5F1EA54, 0x9F10B36E, 0x2088F3D9, 0x24C67D8C, 0xB4C6FAB2, 0x3456C275,
+0x408087F8, 0x17902A13, 0x48D3CFE4, 0xC5BF0C19, 0xE7FE3BC3, 0x88A2F9BA, 0xF3A1F0C6, 0xCF6DB57B,
+0x2FFC0D1D, 0x890024C2, 0x54096659, 0x834915A5, 0x48BF37ED, 0x3A9DF86E, 0xC45C456B, 0x2F99AFC8,
+0xFA05304E, 0xBE4CF6CE, 0x3E54CADC, 0xAF20B3C1, 0x2C5B7110, 0x8FDFDA69, 0x5AF6967D, 0xC9E09751,
+0x6CAF6856, 0x4FAC7856, 0xA5D7BC06, 0xC859EFDB, 0x421A92EF, 0x1F7924B7, 0x4791DE8F, 0x17BCA5E4,
+0x03E82249, 0x40609AFF, 0xE8CB1519, 0x21E0DEFD, 0x0D3639B5, 0x68638BDD, 0x36C13E73, 0x559EFBF8,
+0xD054ECB3, 0xE3328F8B, 0xA3F522D0, 0x1B98E460, 0x6E45C2B2, 0xCFFFFEBD, 0xE71D64AB, 0xB47B104C,
+0x6A5F5A63, 0x8B286A27, 0xE14CBDDA, 0xD65D725B, 0x70566FB5, 0x99B674DF, 0xF8B30575, 0xF73A6058,
+0x6B6EEAE3, 0x30672108, 0xA607277A, 0xC0BECE1B, 0x857A7B40, 0xE47DA931, 0xD0AD0F50, 0xDA294BDB,
+0x04F26C8D, 0x40C47D21, 0x1AA15674, 0xD9509E81, 0x4D2EA6C2, 0xB48CFCDD, 0x6C812F5C, 0x5E04C0EB,
+0xEEABF6FF, 0xEFDF13B4, 0xFC479BB1, 0x72678721, 0x8FB90701, 0x704BC48E, 0xFB55F3FD, 0x31ACBAB4,
+0x41458185, 0x4E02F871, 0x808EAC69, 0x34F34E08, 0x73FCE797, 0xA58D36FA, 0xAA6B2F8C, 0xF59B029D,
+0x6D36A6AD, 0x7D3A1D94, 0xAFD3A202, 0x257A5668, 0x841E20BC, 0xD5EF1C5F, 0x5FDBC0D4, 0x6015DF40,
+0x84D47130, 0xC6A3210C, 0x7E141808, 0x7BB1A41E, 0xC8383721, 0x48A55D26, 0x9979CABF, 0xCF3C6500,
+0x524DAC09, 0xDE5FBB58, 0x5105226C, 0x89B424E8, 0x61CDC933, 0xC6A77144, 0xC5E80667, 0x29F440E3,
+0xD9ED0E43, 0xEF06591B, 0xABF48D93, 0x1C3A6CE3, 0x7CDC2C07, 0x3B135DF5, 0xBE1AEA37, 0xF2E33289,
+0x949E4156, 0x642B3739, 0xF3BA878D, 0xA5E6AACC, 0x80B81065, 0x996C776D, 0x6A45F600, 0xB081C02D,
+0x01C28D04, 0xEBC03FF4, 0x95F67E42, 0x0F45156C, 0x05029BAB, 0xEFEAE2E7, 0xFF6DB4D3, 0xBED0E6C2,
+0x900A65D8, 0xB41054C3, 0x82A32E23, 0xF90F1F80, 0x644A334C, 0xFA7CC8E0, 0xC04E588A, 0x23A67CA8,
+0x4A90AFE3, 0x7672BC46, 0xD5BC7C3C, 0x3742149A, 0xC89A8831, 0x1892CD09, 0xD5AF872A, 0x46A59A9D,
+0x7CC268F4, 0x7C13D5DE, 0x3CED74AC, 0x4A92E20D, 0x8B2FC6AD, 0x0BF00A6D, 0x55771238, 0x62195843,
+0x0A736210, 0x323FA7E1, 0x595354B5, 0x9B173F04, 0xC7AF0A42, 0x377FF322, 0x8E26F1BD, 0x15C7B969,
+0x7219CAB4, 0x7B37E38A, 0x8032D0D7, 0x8E04575B, 0x73CB15CA, 0xD28DD36B, 0x9ED62B55, 0xEBB558A5,
+0x4ABD9021, 0x5C863005, 0x53CCF892, 0x4CE371ED, 0x39121DA0, 0x58966C3E, 0xA49057F2, 0x25BB061E,
+0xD56948A1, 0x7790F216, 0xF88EB622, 0xEB8A3EC3, 0xF70B0369, 0x11CC8A91, 0x8B376865, 0xCBC1FA80,
+0x7855654B, 0xA25626DB, 0x6E035593, 0x8906CE8F, 0x423B919F, 0x3EA9C1F2, 0x7E8CFBBB, 0x0DE06964,
+0xB1019B1F, 0x1A1D5368, 0xFE53305C, 0x867E87C7, 0xF588216E, 0x6EAD410D, 0x37D4E5A1, 0x92FB6425,
+0x9E7677B9, 0x1B82078F, 0xB376C35D, 0x0C20F572, 0x0594F0CE, 0xC5A2BEC9, 0xAE536F9C, 0x73919571,
+0xCCFEE417, 0x18EB3E9E, 0xB0942C6A, 0xA29D2BF0, 0x1439F247, 0x0C24C579, 0xBFB24E24, 0xA6CD89DE,
+0x26569AEB, 0xEB016890, 0x52D130EB, 0x71EBE191, 0xBF2EB2CD, 0xBC66AAA5, 0x2395F316, 0x1D1FCB28,
+0x21D2ED54, 0xFB558133, 0x2A1920D2, 0x10C9D4E1, 0x8AB0D97E, 0x6FA9AA21, 0x2498A45B, 0xA0C0349E,
+0xC1AC06A1, 0x72482CD4, 0xB4DBA676, 0xBA9AA374, 0x793C4B35, 0xCB6607E8, 0x5D58B9CB, 0x888637B9,
+0x6DFACFCA, 0x0CA039B7, 0x965344C7, 0xA02D1E49, 0x51ABB3C7, 0xB7E5A3F4, 0x2B495175, 0x7FD31CD4,
+0xF51E8BAC, 0x174E5736, 0x993C2E21, 0xC8A3892C, 0x2B739B70, 0xC182A48E, 0x638248D0, 0x01B7CEF8,
+0x6E61EE73, 0xA16D5D28, 0x3E010613, 0x8C6C88A6, 0xD24B15C4, 0x84DC55E6, 0x78394C46, 0x99F9FB7C,
+0x7A45BDBC, 0x1C921F88, 0x85A4D864, 0xC705D72B, 0x8E3EDFB4, 0x584EE671, 0x79AB3686, 0xA754D944,
+0x55ACE304, 0x92678C31, 0x4F13F591, 0x0DEAF8BE, 0xD9A5DD8E, 0x8906B27F, 0x29361733, 0x7E30FDE7,
+0xA6F2568D, 0x78642769, 0xCD1D1710, 0x584F3820, 0x457B245D, 0xEB8177D2, 0x77D7DB37, 0x8D5AEAD9,
+0xE49C455B, 0x7A19B3A7, 0x76BD3AC3, 0xBF7A615F, 0x724EC683, 0x1D484FCA, 0x1162F724, 0x1F6F1AEF,
+0x116DA833, 0xA46B86EC, 0x2D3B47BF, 0xBC3D9FA2, 0xA2EB6307, 0x324D3F1C, 0x752B1CA5, 0xEF3BFA44,
+0x000D7A9B, 0x425B5BE8, 0x487B09D4, 0x34B6DF9A, 0x4C8CEC57, 0x79ABA8C7, 0xFECF2BF7, 0xC14A17A5,
+0x8417E10D, 0x1367FC4D, 0x7DA04060, 0x0F85BBB9, 0x4D86071F, 0x1A9997DB, 0xFABAD829, 0x3B5CD32F,
+0x9B404444, 0x72C97F71, 0x6B57A447, 0xD8D89FE0, 0x568632D5, 0xCBD8F505, 0x0B89291B, 0x3D84D5E1,
+0x9E0D31DB, 0x443BD07D, 0x064A2D4C, 0xDEF64FD6, 0xEBC6E530, 0xFAB03A5F, 0xA8F688B8, 0xCEC382E8,
+0x2944A4D7, 0x6A85FEEB, 0xC0A1B6C7, 0x4BEC5E35, 0x0E87CCD4, 0x2B22A119, 0xFE084E10, 0xA5358194,
+0xCBF8D71B, 0xBFFF415A, 0xAC02D32F, 0x4F1C4863, 0xB14FBFB5, 0x62EB7204, 0x4DC4EA47, 0xD197FEB9,
+0xB9D5C675, 0xA14AFFC6, 0x8659F142, 0xE487B7FD, 0x9396DEC1, 0x209DAA63, 0xC6A8F0C0, 0x9EEAC9A8,
+0x2ECC146C, 0xF2AB4FF5, 0x0D6E336E, 0x25EE0986, 0xD25562C2, 0x48B43241, 0x8CB59E7D, 0xF43CBEF6,
+0x373D2660, 0x8B2AED07, 0xB52718B5, 0x5F2ABC13, 0xCF67BDFB, 0xEB02B471, 0x6F73A30F, 0x6D36FF69,
+0xB3C7CCA9, 0x39E99EA5, 0xFB1C8257, 0x7BAA9BE7, 0x00682A13, 0xF07EE703, 0x5658AA99, 0xBA14568A,
+0x8AC551C3, 0x91654E30, 0x2762B00A, 0xD3EC39EA, 0x1A124DDB, 0x7135A63D, 0x7B6BF8D1, 0xDB3A6465,
+0xE300BAC9, 0x4FE377CA, 0x65352F9C, 0x73765309, 0x9935BC81, 0xA250F190, 0xF04E68AA, 0x4A479453,
+0xF56189C7, 0x085B84FC, 0xA2212754, 0x5D6D5F7C, 0xB0E2A35C, 0x2A67624A, 0x15E422CB, 0x69D7F210,
+0xDE55BC44, 0xFC2BD304, 0x535956B0, 0x7856C999, 0xD0D70405, 0xF0F1CAD4, 0xBB1BD77C, 0x88D91FD4,
+0x5DE1DDF3, 0xC858C160, 0x0A1C76A2, 0xA0AC9093, 0x8483A0F2, 0xF45E8CE6, 0x19588270, 0x59CE234B,
+0x0DFEBF23, 0x89A1504A, 0xDCA7BFBD, 0x58DB55DC, 0xD5A5CE23, 0xC69CCBEE, 0x773EF650, 0xD3540881,
+0x26AA38F7, 0x5AE5B7D8, 0x988A07EB, 0x463872C2, 0x0F8FD724, 0x421E7DE1, 0x00FA76F9, 0x2EE6118F,
+0x332E6280, 0x061567D6, 0xC1397A51, 0x0D6BB038, 0xE6405B1E, 0xED26D71F, 0x076475FE, 0x1D5F89C9,
+0x16ABDDB2, 0x07CCBEE5, 0x50C9EFE6, 0x6F4B2B3E, 0xB9118A57, 0xA63D891F, 0x9BA0AC9B, 0x02B7A7CE,
+0x4646F292, 0x0DF5E5E3, 0x88DD011B, 0xF68C4F4C, 0xBC282072, 0x070AD533, 0x1ACA6DB7, 0x094519A3,
+0x33F7497D, 0x497D17E6, 0xB5F4553B, 0x3A54C163, 0xFC2B2A70, 0x0D58CEB5, 0xC4D4A977, 0x9A2FF900,
+0x516FCB7B, 0xD760E861, 0x49EBDDAD, 0x95A66E53, 0x5B98AA8F, 0xD9E7B96D, 0x073A7030, 0x161851CA,
+0xA3E1EBC3, 0x90FC729A, 0xA8454439, 0x324D01FB, 0xBD766484, 0x889B32E1, 0x31F697A3, 0x615C3E47,
+0xB7F07D5C, 0x9EBE713A, 0x817EB917, 0x15F2A17A, 0x0F9359B0, 0x4F79A1CB, 0x7023231F, 0xF18D09E4,
+0xC87F2C02, 0xD998B265, 0xC102E06D, 0x7C6BDBBF, 0xD015CAA9, 0x94DA9511, 0x0D99BD25, 0x3CEA6F2E,
+0xBAB91C40, 0xC44C025E, 0xCAB735B0, 0x4594DBE7, 0x76C05D4F, 0x8E771F65, 0x1504E5CF, 0x20971C3E,
+0xBFEBD061, 0x787D45BE, 0xC593B31F, 0x28A1AA56, 0x6F4C4C1E, 0xC7143FE5, 0xD76A3439, 0x4BD38D5B,
+0x54456739, 0x5FC33D68, 0xBB212B77, 0x916C9B1D, 0x74480292, 0x17B18DCB, 0x943AE53A, 0xBE131D1A,
+0x509F730D, 0x219CA561, 0xE8C125BF, 0x29BAB675, 0x59B59571, 0x163FC3C5, 0xD28D174E, 0xB1C4595A,
+0x078A887C, 0x2DE3F9E1, 0x9C59F0A4, 0xF001D626, 0x84B70E16, 0xCEACFDDC, 0xBFDC2843, 0xAE5D813E,
+0x31FC1440, 0x782A18E5, 0xEBDE58FD, 0xBC5C75B9, 0x1F11A53D, 0x87918B3B, 0x2ADCD9C2, 0xCAE117ED,
+0x35DDC70A, 0x6269D3D4, 0x1A2A7E02, 0xFEC74913, 0x1C7FE82A, 0x782101F0, 0xB94B55E8, 0x6E1EA979,
+0xCFDEF489, 0xD5339064, 0xD995C820, 0x21E78EBB, 0x8D0A5669, 0x96C1701D, 0x41C02D5C, 0x8FF82B03,
+0x4B376089, 0xDB05E03F, 0x754AD3D5, 0x781643DC, 0x370D3F34, 0x5EEA7837, 0xD4E32223, 0x72414C7B,
+0x647E05C7, 0x080410DC, 0x8FFA1EC0, 0x0CC7DF6A, 0xE70D6D76, 0xAE0771AB, 0xEA653B9F, 0x0B309201,
+0xDC06D1EE, 0x8AF5EDE1, 0xE7623936, 0xDD3D508C, 0xFBDA3B2D, 0xD2AB92CF, 0x150FA25C, 0xBFCAE571,
+0x00C87D9E, 0x2CC165E9, 0x7F1877EC, 0x09FB75A5, 0x472C13EB, 0xC1F49F15, 0x27E26382, 0x9762BC45,
+0xBE9C3909, 0x4F79C7B9, 0x422E8A2C, 0xCF5A320F, 0x9538902C, 0xB92F6C3A, 0x8B23772C, 0xA0F1D556,
+0xF7A32DB7, 0x47979DBB, 0x20F90924, 0x5ED605A1, 0x5B5F3E6B, 0x5C26F90C, 0xC9199EFE, 0xDAAF54BB,
+0x19B6FF28, 0x79982BBA, 0x352B63EB, 0x957BEC46, 0xF00E6688, 0x7461374D, 0x770FAF4A, 0xAA9F9894,
+0xAAA77C34, 0x9D55D280, 0xB7CF4566, 0x273ACBD5, 0x1F07C20D, 0xF394E6C4, 0x54D4DF7C, 0x7C2AEE6C,
+0xE145CF53, 0xC11C51F4, 0x573146C1, 0x905A39F6, 0x0FCD53C0, 0x999312FE, 0x94E64406, 0xB3A7F627,
+0x3AB843AC, 0x560C022D, 0xBB9C0161, 0x80E2934A, 0x1FE73490, 0x67A9CE6A, 0xE7BF4E55, 0x9E4B72C4,
+0x5C9880B6, 0x14C31C6C, 0xD9F576E9, 0x3F8FC43B, 0xB068CC6C, 0xC365E440, 0xBBF9BBAE, 0xF3A63042,
+0xC2FC724C, 0x6926EF24, 0x806F4915, 0xD95D4F30, 0xDEBF6BC5, 0xFB72A3FF, 0xBDB36D2F, 0xD6C8253F,
+0xAD976EE3, 0x1A78FD8C, 0xCEC7AA11, 0x731D6258, 0xBA040415, 0x7C48D708, 0xBC061406, 0xC33F8AA5,
+0x7A432CC3, 0xD935BE05, 0xE1B0160A, 0xB078AF25, 0x53F36FF1, 0x9904F8B0, 0x1C27E8CA, 0xF3926293,
+0xFFB05FD7, 0xA178A690, 0xACAFEADF, 0x0547F4FE, 0x32BC81E8, 0x01A44FB8, 0x9A68E8A6, 0x647CEA76,
+0x10009CF2, 0xA719F266, 0x1116F244, 0xEBC56512, 0x86902EF8, 0x5EA05BBA, 0x9CA194EC, 0x9F8E18D2,
+0xA9990914, 0x68D7EAB5, 0xB54757F7, 0xE5C64B1B, 0x0376CD05, 0xCD7F626D, 0x5DA0F89D, 0x4901A91B,
+0x9B76C857, 0xDAF13E74, 0xDF40E55A, 0xFC2D6573, 0x8CEC8641, 0xD15C2598, 0x78EB9FE3, 0x92E8F97C,
+0xD8E2F12F, 0xA35CF8EF, 0x7EAD9C05, 0x47705F0D, 0xD7C43216, 0x6C3827EE, 0x47E5C72C, 0x67410F73,
+0xA8CE1A41, 0x271BB4CD, 0xAAAD86AB, 0x43266F82, 0x74D75970, 0xC73FCCE7, 0x07448838, 0x8F38802F,
+0xA724B183, 0xCA8FC269, 0xC966CB42, 0x889EBA76, 0x9823BFC8, 0x9696A175, 0xDCE79C50, 0x93E0FD23,
+0x6B146608, 0xF270EADA, 0xDA381AF6, 0xF6B57CCB, 0x8C45B3EC, 0xF2DD407D, 0xDDC99F51, 0x0E9449B5,
+0xAE82055F, 0x278876CB, 0xEAC9C958, 0x19B720BB, 0x2CFF6712, 0x25B82C29, 0xB96CD996, 0xF568EF11,
+0x46984D96, 0x8E60736C, 0xF9D6243B, 0xABEBE869, 0x3CC46694, 0xA988C0E9, 0xE7F58D57, 0x3C348D77,
+0xE36E045A, 0xCAFE9B43, 0x74AE8366, 0x39FF370D, 0x3F1608BA, 0xE80B920C, 0x15BEE8C6, 0x8C9F9DEB,
+0xFBF9BF0F, 0x78207C4D, 0x85B5C7B7, 0x8EFCD66A, 0x8A0A782C, 0x1F226157, 0x507691B9, 0xE5BB69FD,
+0x3BE451A6, 0x39D4828E, 0x50677DA4, 0x22F1BA6B, 0x4A1B5D48, 0x367FBCE6, 0xAEFD8E95, 0x16691C8D,
+0xE2D00D99, 0x5D04FC12, 0x94CD3621, 0x996BC591, 0x1A9C995B, 0x1CEC0BB0, 0x7B3D07A9, 0x2203CC53,
+0x352409E9, 0xA27E1C87, 0x94E80EB9, 0xADE96312, 0x465C0F9C, 0x6C2EBE5A, 0xF90DD996, 0x045F553E,
+0x7A0CC3C7, 0x9B3A224B, 0x7F4A7CCC, 0x5CB21B44, 0x2A8ED6B6, 0x421559D0, 0x2944E93F, 0x4D41F7A6,
+0x571E4812, 0x4919EE7E, 0x9164DBA5, 0x16FE343D, 0xF5233C08, 0xED20D4F9, 0x638C8F46, 0x37C7CD83,
+0xDE62D102, 0x79CA9F9F, 0x19C979C7, 0x54266F2D, 0x231B97D5, 0x73EF287B, 0x8840E604, 0x021BB94F,
+0xA384F22C, 0x91F97936, 0xDF7D9A7E, 0x5F503243, 0xB3F1B66E, 0xFBAEDEFE, 0x3906D109, 0x0C668ED3,
+0xD8CBA250, 0x39AA9B7A, 0x9865F879, 0xE99F0FC8, 0x3248566F, 0xF1CD369A, 0xBD30522B, 0x3E3E5796,
+0x18DF0BB0, 0x1B6BCF58, 0xCF19A7E8, 0x17A53184, 0x03BECF3D, 0x9078471D, 0x6927D1A8, 0x0C8902DE,
+0x8B92E87A, 0xBC289334, 0x1B0888FD, 0x17014708, 0x8F895F99, 0x1A6BA76A, 0x372FCA2E, 0x0BF4BB90,
+0xF59BF380, 0x0EC39AEB, 0x8D6CBE73, 0x14A0156C, 0x1F89DA20, 0xFDB8FF3D, 0x2C3555D5, 0xD586C89B,
+0xA0F2C59E, 0x7D628269, 0x9312FC2C, 0x871406F6, 0x808F61F3, 0x248236AC, 0x952EDA0B, 0xA46A734E,
+0x1A6198FA, 0x07FF8B84, 0x3C8C2621, 0x6575BA49, 0xAFA4D917, 0xFE313E32, 0x243946F4, 0x0F68D837,
+0x6A14C20C, 0x088D3F05, 0x1A1F358F, 0x31641F35, 0xA769C930, 0xADE605C2, 0x2F91B081, 0x6B129B5B,
+0x3F791BC8, 0x5CF67868, 0x56088162, 0x8793F996, 0x672E2933, 0x3DFE19AF, 0x2BA51D31, 0x60621402,
+0xD04732DC, 0x05E46560, 0xD02D4A8A, 0xB2A21031, 0xE0F8D962, 0x1B724D3F, 0x1E4AB493, 0x14A91C0F,
+0x9DC2D411, 0x3C3FE00E, 0x85DB06E6, 0x212D59E0, 0x3421C031, 0x94879883, 0x6254B1D6, 0x7C877680,
+0xC6E1E2C0, 0x68793DCF, 0x1C760EF7, 0x9A0F644A, 0x04DBA772, 0x8AA1C0AB, 0x734C532A, 0x58713572,
+0x46240EB6, 0xE5D0431C, 0x69787C4B, 0x68AA1D4F, 0x99AE70AD, 0xD52F597F, 0x4666B107, 0xF8AD9E76,
+0xF1E3B6A5, 0x20952B6B, 0xF5608007, 0x8571AA5E, 0x525D0394, 0x784C2F46, 0x88ED2A40, 0x7238AC9D,
+0x93F377BA, 0xC43E6923, 0x4DC6F61C, 0xD165D1C7, 0x30819844, 0xBDE541B8, 0x13244700, 0x70889375,
+0x9A5EB09C, 0xB553B259, 0xD8569045, 0x9B6503D7, 0xF36C8A34, 0xB0A2A549, 0x8F1808B1, 0xCDE031A4,
+0x631AEBCA, 0x4A6EB1C3, 0xBB1CDADB, 0xD4F9C75E, 0x4AB84444, 0xF6872512, 0x7DE0B1B4, 0xF4963B3E,
+0x531E5C09, 0xC4B2212B, 0x21A11D03, 0x0DA929AA, 0x27684847, 0x32D0BF6E, 0x78E27F11, 0xB2CE731F,
+0x42F74BE9, 0x17569677, 0x89F71052, 0x5625BFF6, 0xC9C99C63, 0xF2C924C5, 0x42992864, 0x6BF1828C,
+0xF3CE42EF, 0xDE56DE27, 0x89B0CBAA, 0x8F65F111, 0x4A7EC686, 0x30D10863, 0xE7EE64A5, 0x5EC9F757,
+0x756B1C40, 0x2623285B, 0xC2496326, 0x91FCF3F8, 0x408836E4, 0x1F2A57CB, 0x8B754171, 0xA29DBC3F,
+0x7630941B, 0x69C024AD, 0x03C30E97, 0xC0113016, 0x14CBB6A0, 0xC2786BD3, 0x1B3FD84F, 0x07C443AF,
+0xF4886EE9, 0x2541D541, 0x821980BE, 0x83AEC7C2, 0x12E4FEE7, 0xDE72AEE5, 0x0DB468A2, 0xD41FBFE2,
+0x0296CADA, 0x11991E88, 0xE7E2ACFB, 0x9D570187, 0x85AE9A8A, 0x1A53E25C, 0x48165D79, 0xCA258F16,
+0x0E955DA7, 0xC9DF5574, 0x07A8059E, 0x5ED9EA5B, 0x8E2BAA80, 0x0AAC127C, 0x6C2C7816, 0xF82AC569,
+0xBF72A34D, 0xD27FFB25, 0x64447778, 0x3ACB2EB6, 0x37E19FD8, 0x81336FAD, 0xF4BCA891, 0x18C11136,
+0xC2ECA882, 0xEFC0D0BF, 0xDF01E322, 0x706B2262, 0xB8A51A8A, 0x569D20FD, 0x399188D4, 0xCA161CC9,
+0x36EB67E0, 0x702A4963, 0x151E893B, 0x9E28A80A, 0x6A5608E8, 0xD70C3DAA, 0xDD8B128B, 0xD091598A,
+0x8798444A, 0x52B6271E, 0xCE3F3F18, 0x6634EE41, 0xB3898542, 0x8A84502D, 0x1738C599, 0x613A0D06,
+0xD04A95ED, 0x09DFC497, 0xFBB0ACF4, 0xAAC32CA3, 0x1680ADA8, 0x28E18968, 0x480DB66C, 0xE550BDA6,
+0xBF24BEE9, 0xF242340B, 0x6350CF8A, 0xC46E2BBE, 0x48E9558C, 0xEAE575D1, 0xAC48CE78, 0x6A33333A,
+0x6C60B371, 0xB5D74B09, 0x3DC7A624, 0xB2D28473, 0x151489CB, 0xB0B569C2, 0xE445C4B2, 0x069D895D,
+0xD9860D32, 0xF3F6625B, 0x3D4372DB, 0x75F19157, 0x3E968A54, 0x00AB843C, 0xAB7FE991, 0xEE12BE4D,
+0x44531691, 0x34D36C18, 0x9FAD4CE8, 0x84AD076D, 0x66FD4CE8, 0x2CD841A4, 0xF20D4163, 0xA10EC833,
+0xEFA42504, 0x72F5C0C4, 0xACC195FA, 0x4BB58CFD, 0x93BA5222, 0xE060D802, 0xB64D5140, 0xE444F7A0,
+0xFEDAA8CF, 0xD75A483A, 0x2D02D004, 0x6820CC9C, 0xBCE6977C, 0xF0B53856, 0x1D3E4248, 0x21AA1051,
+0x9D0F39B5, 0x6B41DC21, 0x74E3FE9B, 0x6D0DC660, 0x95425103, 0x430E5ACD, 0xFA72634A, 0xF5F70B06,
+0xCB00ED9E, 0x5E739224, 0x6CBA0FF8, 0x77FCFECA, 0x9853D3A8, 0xF63F4F25, 0x07FB88ED, 0x078AD5EE,
+0xAC934CE3, 0x15A6FA32, 0x8E1CBEB2, 0xC484139D, 0xF8AB61CF, 0x7B661173, 0xECDF2FF9, 0x4ACE6064,
+0x5E7B3B6D, 0x51D00201, 0x4583E4F0, 0x1B765E89, 0x10A34D2B, 0xDEA60D8A, 0x79CECF14, 0x6DD0EEFA,
+0x6E17BE0B, 0x0FF6E9EA, 0x6843819D, 0xB2DEB8B2, 0xA6A41253, 0xA91F9D7E, 0x8C85B2F2, 0x98DD9A3D,
+0xC31DA238, 0xCBBFC46F, 0x05733D96, 0xF983277D, 0x2ACEB5E0, 0x1C6CEFE3, 0x3512EBCD, 0x06F1FE71,
+0x5855669C, 0xDDD87382, 0x3C763F3F, 0xD9B9F247, 0xB87BBCBF, 0x0AEBA6FD, 0xC6E9B1E0, 0x88EB069A,
+0xED47B4D2, 0x7DBC20DD, 0x6775C45D, 0xBB8EBE54, 0xF3860251, 0x6F5285A6, 0x111A153E, 0xD9258852,
+0x4A228859, 0xB80EA4C6, 0x3B6499CB, 0xB0973750, 0xF8C58130, 0x8466B48E, 0xEC221154, 0x7C21A2B7,
+0x25409940, 0x6883029B, 0x1776AB64, 0xD4B3B26B, 0xE4CB5F88, 0xEDD0EE87, 0xA7675CAC, 0xC3271BDA,
+0x3803754F, 0xF53D9264, 0x7001543C, 0x71A40CFE, 0xBE611192, 0x7AA888E3, 0xF1237CE3, 0x18C6EA95,
+0x6753D36A, 0x65EA700F, 0x521D0927, 0xF54CA6C5, 0xEB2EDBA4, 0xF674C238, 0x7030ECE3, 0x643687BF,
+0x5486F279, 0xD1EA2947, 0x2DF9D072, 0x8C1DAD35, 0xBB66BA80, 0x19ED320C, 0xD6BF62BA, 0xE7A7B740,
+0x35803567, 0xEAC098CB, 0x037F5A97, 0x8469B9FA, 0x647377B7, 0x6778B831, 0x903AA364, 0xE11B8BEA,
+0x85E5015F, 0xF8C3609C, 0x5A88CF90, 0x6A083C47, 0xDD08CE1D, 0x5E7C51D6, 0x0DEC1B93, 0xE3DCD8FC,
+0x8D2BC505, 0xD7471625, 0x56C6D139, 0xEB312986, 0xC1A61F80, 0xD0B1F552, 0xE675C13D, 0xFED68824,
+0xEE50773E, 0xAB4DD97E, 0x1CD178B2, 0xCC107750, 0x4B1C638A, 0x8F64383C, 0x632B1DBA, 0xA6B9E37B,
+0x63DB7871, 0xFF2A01E8, 0x9D1C1B79, 0x2659B1AB, 0x36A0630B, 0x0C128DF3, 0x8AD19D0F, 0x683C0631,
+0x38B3FFEF, 0x61A99E0D, 0x9EE884BF, 0xC261D28D, 0x55057D1F, 0xD83A2FDC, 0x3B3791AB, 0x057D6E8D,
+0x493ADBAE, 0x25D96D93, 0xD374E21B, 0x7D5125D9, 0x8CC49D97, 0x4C9C78E3, 0xE049E531, 0xDC0CA069,
+0x8998753E, 0x0ABCB3BE, 0xF9E8C5B4, 0x56A8A1EF, 0x4A1191B6, 0x400EA432, 0xF82F07EC, 0xEAA2283F,
+0xE04FFC78, 0xD5E52209, 0x3568804C, 0xAF153E82, 0x462AD2A2, 0x6243115D, 0xF3DD434F, 0xDBEB21C5,
+0xF96C79EF, 0x7CF80250, 0x9FDFF6A5, 0x1D323391, 0x32CFDD5D, 0xCB4B05CE, 0x1992AB22, 0x1CD22AF3,
+0x56FC5EF6, 0x60C218E1, 0xF3BF3DBA, 0x471570E9, 0x18D29CF7, 0x8D6E0950, 0x8B54A3C1, 0x482409C7,
+0x3361420D, 0xF5F62FAD, 0x87942B53, 0x17D06C48, 0x71D80486, 0x6234510C, 0xC36EA624, 0x897B4DF2,
+0xBBF87014, 0xEE9B03B6, 0xE1424F99, 0x58D1A167, 0xDC48ECD1, 0xF3C3E971, 0x252373A9, 0x1996D8C9,
+0x15D78343, 0x77D11C85, 0x98BEAA81, 0x66FE24D8, 0x905C51D5, 0x41B483EF, 0x7C18C8E4, 0x877F8D28,
+0x584DAC8B, 0x29753D41, 0x473CFF6A, 0xE256003E, 0x95F66F91, 0xBA25C00D, 0x7863BF7E, 0x041E359D,
+0x3654CD3A, 0xF9BCC8E2, 0x28606DB3, 0x1547FF7D, 0x97531ACA, 0x7AE4905D, 0xAA0EA4E3, 0x247C01F3,
+0xE811B883, 0xE6117E6C, 0x385229B5, 0x00EF3568, 0xA6F810F9, 0xB5066D76, 0xE3D54985, 0x12460605,
+0x64C3106A, 0xB66243CA, 0x93C0F6B8, 0x20BB5CDA, 0x598BA472, 0x1CA5D207, 0x2D522E4C, 0x69875FAD,
+0x9FFEA17D, 0x58841D18, 0x4D3A69C4, 0xBEA7ED87, 0xFE538C1A, 0xFAB58D5A, 0x4D0662A1, 0x39D1C569,
+0x474927D3, 0x2D40263C, 0xEFAD7875, 0xBB8D6E2F, 0x9C00F233, 0xD3D737CD, 0xB20A4227, 0x09932077,
+0x929402F5, 0x05ABE259, 0xDE446B6F, 0x35C3F286, 0x7EEB1A51, 0x5A079A69, 0xCB9F5811, 0x499589FD,
+0x2EA676EF, 0x808360FB, 0x5DCC4A85, 0x35F3E68C, 0x07C0B483, 0xE1683B22, 0xE8E28157, 0x939CA889,
+0x05C5F19E, 0x69E15198, 0xBE51D18C, 0xAF1726FB, 0x6A4DB80D, 0xA14AA5B9, 0x93441E4A, 0xA40C35C8,
+0x89C3835E, 0x2F1EBFB6, 0x2E45B5EA, 0x61CA286F, 0x0E221425, 0xAA1E187A, 0x0DA70B30, 0x99813D43,
+0xD42D0E2D, 0x3D0E8B0E, 0x2752A5E2, 0xD8B273EE, 0x3ED159F8, 0x2588F0DB, 0x456D381D, 0x751971E5,
+0x6604B121, 0x19257A73, 0x76F640F0, 0x5A5398FC, 0x701DF8C7, 0x4B3A4991, 0xB1F2831E, 0x90C31802,
+0x71974E0A, 0xB753FE1B, 0x5FE3ACC6, 0xFD96D276, 0x742AE605, 0x3FA74D3E, 0xE9F80BE8, 0x18951558,
+0x2E491F41, 0x0006CA99, 0x674C0463, 0x9800F691, 0x550043CB, 0x726C767C, 0x00DAF472, 0x0A33C6E9,
+0x2FDF3CBF, 0x27BA991B, 0x9893CFE1, 0x9A2F2FC8, 0x0497C3AD, 0x89567F15, 0xB8B702D4, 0xD4A3BCFB,
+0x4C62F2C6, 0x8F2142CE, 0x857342E7, 0x260A0AD1, 0xC58D20C2, 0xD727F045, 0xB55AEED2, 0xFDCA2EC8,
+0x68BFD114, 0x8D95B7A2, 0x0AA671AA, 0x197B289C, 0xF513EEF2, 0xC58D8B8F, 0xD03BFACE, 0x7B0955F8,
+0x42C31C5A, 0x896E55A6, 0xCF42F736, 0xD63F0FB5, 0x01FD3D5E, 0x30033A46, 0x0224F090, 0x1195D657,
+0x52DB5EC4, 0x4128A864, 0xE5D623DF, 0x6ACC096E, 0xF4463179, 0x0040D5DA, 0x096DB19C, 0x8DBB84C7,
+0x94C88A7C, 0xA1C0AA0C, 0xAD575BD3, 0x693E9F8B, 0xBAC706BB, 0x56E7D836, 0xB2E6E36F, 0xAABE1537,
+0x8289142A, 0x1C4608AA, 0x226C927D, 0xC76AE173, 0x93DFD85D, 0x28048460, 0xB83019CC, 0x95644AF3,
+0x53FE8732, 0xAFE4A1D8, 0x5F64821D, 0xD0E5EDE1, 0x2BFD6F10, 0x342E3482, 0xEAE3666A, 0x7339BF72,
+0xB8F3E7DC, 0x20C803DA, 0xB2E94F5D, 0xB5187F0D, 0x7182994E, 0x4B01ED2E, 0x93BC430C, 0xED5D1662,
+0xB0B638D3, 0xB5AEDAEB, 0x68884483, 0xE5C9AEBD, 0x5B44CF71, 0x28661EB8, 0x9EBBE74D, 0x932100DC,
+0xF007EB64, 0x9AC326FC, 0x8765019B, 0xCBBB274A, 0xC0E73A0A, 0x32A18F4D, 0xF68AADA5, 0xF890862B,
+0x719A4CEF, 0x270998E1, 0x76623797, 0x8728EE0C, 0xE985975D, 0x9FC1F5F2, 0x67BC80E2, 0xF479AA28,
+0x43FD321C, 0x8ACC8F72, 0x43187D03, 0x16A3ECFC, 0x3B66472E, 0x52157F39, 0xF981318C, 0x7CE17F45,
+0xD457794E, 0xA8E759D7, 0x2DA2CC3E, 0x352155DC, 0xF5887602, 0x6B2294E1, 0x1473BD77, 0x9BED96E3,
+0xD6D67074, 0x8B466147, 0x3BE65702, 0xE4F592E8, 0x41B0AAB9, 0xF6C76C08, 0x20323C14, 0x33523966,
+0x958D9C66, 0x87977311, 0x773FC541, 0x077E5799, 0xD63E37CD, 0xA9F646C0, 0x41F372B2, 0x3BBB1D0A,
+0xD5565ED4, 0xCC0EC5EC, 0x76CD2CB7, 0x6FA9BD78, 0x64F96493, 0xFD82C70A, 0xAE41720F, 0x5522F8AC,
+0xC0F03F28, 0x1B60D263, 0x4CD61E62, 0x09B9BE37, 0xD83BEFE3, 0x0849FE73, 0x33C8093E, 0xAFDF8FE0,
+0xB93E6FB6, 0x9A8339DA, 0xF3C77C20, 0x011CA501, 0xF7B3DF44, 0xF2EC47FC, 0xF3192132, 0x65A0BB0A,
+0xF64B2134, 0x2E5AAD97, 0x29ACAC19, 0x45ED6E20, 0x19478D15, 0x534851B1, 0x4AFAAE30, 0xEBA52C21,
+0x2644BE6C, 0x10D0FDBB, 0x46031702, 0x09EBF661, 0x4C9FBC3D, 0x49DB8964, 0xE28D4EBE, 0xBB862C63,
+0x49C8BFCC, 0x63E221BB, 0xD656B327, 0x053E3907, 0x51EB7548, 0x5EEE5E71, 0x185D9CF6, 0x17C95EDB,
+0x17050085, 0x67E85E92, 0xF2648890, 0xCCED2BBD, 0xDCF56C3E, 0xBBE3D400, 0x3F0BAA8C, 0x469F1D12,
+0xAFB81F95, 0xA898B43E, 0xE1823468, 0xA7DA17E0, 0x5F39A6FF, 0xC047A619, 0xFA57B4E2, 0x5B4803ED,
+0xCBCDE4B5, 0x68CCC54B, 0xF8B8DA39, 0x4D8A1B7F, 0x046D17CA, 0x427F2911, 0xC580329D, 0x195BF447,
+0xB8306301, 0xF46D54CE, 0x87F48D8D, 0x832E7928, 0x2F1F7086, 0x20F36982, 0x85672AF5, 0x2B288FD4,
+0x764523FF, 0x8F86B0B7, 0x44AFA51E, 0x1CDF8988, 0xBF4C35CB, 0x4928A84F, 0x7203E1B1, 0x65A35A03,
+0xCDA5BF53, 0x86CBEFF9, 0x02134F5A, 0x6DA788DC, 0x07BCBAAE, 0x69B17CE4, 0xDE0BAC2E, 0xDAD779EF,
+0x7142209B, 0xA734E9D6, 0x1D048593, 0x3A17A391, 0x90441048, 0x7AAD430D, 0xD51F4F22, 0x14D225EE,
+0xFAC0AEA7, 0x780D069D, 0xFF8B40A2, 0xE6C9E453, 0x8FB23982, 0x4AF363A0, 0x750CE377, 0x6B53FE27,
+0xB02EE00C, 0xA2A64F28, 0xE69A6DBB, 0xA76627EF, 0x4176D572, 0x019A0C7A, 0x24E651FA, 0xBBC8A97E,
+0x2042FF5F, 0x8166A276, 0x0A82888A, 0x720CFBE6, 0x0B92107B, 0x0EAF9E6B, 0x2E57A895, 0xD6C20488,
+0x973D8A73, 0x6D275DAD, 0x52057B07, 0x6E65BF2E, 0x9D29A51F, 0x0B0F7A79, 0xF67F3745, 0x39CBA5A1,
+0xE88A0F6C, 0x72150BF7, 0xADCE7DE7, 0xE6D0E8E2, 0x7EB2883D, 0x37F7CDEC, 0xBFFFD6C1, 0xE9B9CD44,
+0x04C1CD74, 0x46372101, 0x15EFD48A, 0xF2C65E1C, 0x7301AE28, 0xB10AD2A2, 0x860867B1, 0x978FC58D,
+0xE715462C, 0x925D0E1D, 0x567DC9F5, 0x1905A06D, 0x7DBD775B, 0x1864D876, 0x38A71C71, 0xC57172F4,
+0x1631B12A, 0xD37A6CF5, 0x0A2F0E04, 0x4C51055D, 0xCF6B0307, 0x47BC1CBF, 0xE95C14B6, 0xA2A55E1A,
+0x34A9536D, 0xBF637E43, 0xC67A05FF, 0x3FB2791B, 0x8B1CAA9A, 0x3F60AE00, 0xD6A9AE10, 0x1FF11176,
+0x3D50AE6A, 0x7E4DB59D, 0x0B4BACE2, 0x3C5984DA, 0x0BEAD343, 0x2A1ACFB7, 0xF64787D1, 0x0E87273A,
+0xF7DD20DA, 0x65A90F99, 0xCDD445B2, 0x9D119268, 0x064BD1A3, 0xB3742854, 0xAF73098F, 0x7F8947FD,
+0x4D1421A7, 0x77087BC5, 0xD450482D, 0xBADAF223, 0x6EBB1497, 0x2452FCA3, 0x23A391D9, 0xF4C33A15,
+0xC28E606C, 0xBF38B904, 0x7BF99922, 0xD3861514, 0xACFEAAE8, 0x1BF497BA, 0x04BF7968, 0x6C52E3D4,
+0xC67DE3A1, 0x766FE571, 0xEED7CC64, 0x0D9D96ED, 0x35AA57E1, 0x072D7F10, 0xEEF1C932, 0x70FAE8FC,
+0xCF43CE4B, 0xC74408D0, 0x64FCDCED, 0xA110FB8E, 0xA3AAA4ED, 0x6F03F9D0, 0xF251FC7E, 0x7183B0A4,
+0x158DCDDA, 0x1F20E8A4, 0xF878A367, 0x8B1422F5, 0xA6FB1CAE, 0x172C9460, 0xB2D0A253, 0x7AC500CA,
+0xF9302608, 0x5BFEA18B, 0xF82BF769, 0xDC6DA3BD, 0x7DE0335B, 0xD16A58A4, 0x5021F9E2, 0x46C5B22B,
+0x9AB1930D, 0x9635228C, 0xB6AED755, 0xDA956299, 0xF4918495, 0x6BEDA2CD, 0x8919B5CD, 0x234AC107,
+0xD58FC1F7, 0xFD21D2D8, 0x81A3D5D7, 0xCC139F26, 0x6A6B321A, 0x89898F45, 0xB017A18F, 0xB0D5BA1A,
+0x73D9D83D, 0x67751D62, 0xEA158509, 0xA8545413, 0x18B30E87, 0x0CA85C7B, 0x7E5687FE, 0x5C354D3D,
+0x77025FF6, 0x84D9B86E, 0x5C588975, 0xBD0E692D, 0x8CE9BA50, 0xC011707E, 0xDC6AAB2C, 0xBDD2F618,
+0x8BF0658E, 0x274DBFD4, 0xC653752C, 0x6F1329C2, 0x771A2390, 0x49A5A0D9, 0xEFA7EBF4, 0x3268C746,
+0xCFBE9DD2, 0x6E62D676, 0xC6FFCFBB, 0x1F1F89F2, 0x9A073FE7, 0xBCC035A6, 0x3CCC0B0E, 0x9203D54B,
+0x14E2FA33, 0xDE8FBEE9, 0x8D7A280F, 0xAE8A1EE4, 0xF9CF320A, 0xF7F698F3, 0x7A739419, 0x40B82FCD,
+0x17FA9BA0, 0x9DB614F5, 0xB78E1D66, 0x27E1175A, 0xBA6699AA, 0x34A2B522, 0xCACC827D, 0xC263D0AE,
+0xFBEC7016, 0xD6798BF8, 0xBB319326, 0x1653F434, 0xD2CDCB98, 0x4F18FA62, 0x3BAAF946, 0x16A2EF98,
+0x0EA05AB3, 0x675573F4, 0x2E947530, 0xC4324DD2, 0x048D927E, 0xAD8D6F9E, 0x7D681207, 0x2BA10E2E,
+0xA2939B6C, 0x631F0D51, 0xEDC20A7F, 0xAA81C52C, 0xF040A1D0, 0x13C5D383, 0x724C7B6E, 0x0A0D1DF6,
+0xBD4B72D5, 0xF241E258, 0xE3940323, 0xE847480F, 0x86D1BDC6, 0xCC62AA20, 0xF04096A1, 0x497D2070,
+0x9C4ADD71, 0xE53455DA, 0xD9EB7E0E, 0xAC2CE086, 0xDF5E6E20, 0x1FCDB725, 0xAC2AFC3F, 0x420F7919,
+0xCC2FD5C4, 0x1CC2524C, 0xF2631BFD, 0x7DA6B0CB, 0x31529F06, 0x48805F10, 0x0A4153F2, 0x549C7485,
+0x2FF9FC17, 0x959828FF, 0x0F85A1DF, 0xF3DBB783, 0x827C9392, 0x247FFDF8, 0x8BB3F5BD, 0xEEE5CC35,
+0xA56BACDE, 0xE174A053, 0x7459C437, 0xABD9BBD2, 0xBCD80914, 0x8AF67821, 0x807E1C0E, 0x4337DA56,
+0xD5FB359A, 0x941EC548, 0xC6C3CE33, 0x6CCCC7E1, 0x9EBDE864, 0x868D478B, 0xA9C22886, 0xC0F3D7F3,
+0x68592BD2, 0x0B59F88F, 0xA4791762, 0x0790073B, 0x207908DF, 0x09AC96FA, 0x57AB05FD, 0xFF677FEB,
+0x244FF9F5, 0xF08E4B63, 0xEB0E998B, 0x3C9A3605, 0xE5C1D856, 0xC6E8A0E1, 0x3EF130B1, 0xAEE5C0EE,
+0xA61B89E8, 0xD24C0408, 0xFFCF7B6F, 0x27A4E085, 0x66F02D79, 0x983553EA, 0xC297729E, 0xDEEC57C2,
+0xDECFAEB2, 0x4E841B14, 0x595AC9E6, 0x0E4E2203, 0x3AD86447, 0x7520F59A, 0xC17A8E7F, 0x761580A5,
+0x8756FBA9, 0x8E421D8D, 0xD4D1653E, 0x5A667941, 0x4F653DFF, 0x92BD18BB, 0xE389B8F2, 0xA06A0D4E,
+0xF99B4123, 0xCEAE8079, 0x284EB107, 0x73D98018, 0x60F8F561, 0x1F8064DD, 0x5EA3C1E1, 0x13BAF768,
+0x3FBFE9CD, 0x84F0F4C1, 0x62EA8DF1, 0xAF26929F, 0xBA0A9AB4, 0x8BB8A053, 0x0757AB3E, 0x58FF797A,
+0xBEC5623A, 0xCA165FF8, 0x18DF39FA, 0xF1D5E1A1, 0xBC131A30, 0xDFB48737, 0x2ACF55AF, 0xE120091F,
+0x91F1DA5E, 0x21E6C5ED, 0xD28D1C20, 0xB56B58E4, 0xA3A0BFA0, 0x8737332E, 0x64A8BEC6, 0x1133E382,
+0x4C33A13C, 0x13982F05, 0x80128663, 0x0391C930, 0x028605EF, 0xE3FB5667, 0xB435C68E, 0x1B2DFF4B,
+0x60A79B3D, 0x00E9309A, 0x4607104C, 0x57431027, 0x41469AE8, 0xE17235E2, 0xD01B323D, 0x342F99AF,
+0x94661631, 0x37A109A0, 0x0EBCE686, 0x5F9EA031, 0x18570C3E, 0xF3B4D978, 0x638AE05D, 0x71328A78,
+0x0DF96269, 0x5B2EF49C, 0x88AD88E0, 0x4F858EA1, 0x999A7D7D, 0x513B5BB3, 0x6F53C8ED, 0x900E05AB,
+0x5FEF7393, 0x1CE3EFB2, 0x2B213566, 0xE6AB86ED, 0x8AD0FA7C, 0x77868DD9, 0x01DF028E, 0xBC785B3F,
+0xE6BADD16, 0xE99F1833, 0x49320AF0, 0xF2022C3C, 0xE2DB4792, 0x7860533F, 0x5B8A0CA9, 0x71BB2090,
+0xB9A62EA7, 0x175FCC66, 0x31B5DD0C, 0x42867301, 0x5C9F885F, 0xC0F33001, 0x70797284, 0x8841DEC4,
+0xFEFF9139, 0x734D182F, 0x35BC4C2A, 0x98224B14, 0x15A6E4F4, 0xA6487F07, 0x432E7D76, 0xA167E34F,
+0x70C1214B, 0xAE340039, 0x595D27EF, 0xD2F79FC4, 0x9ADE8297, 0x6654B93F, 0x9446A83B, 0xAD28FEAF,
+0xF08A260D, 0xBA208E28, 0x3C880077, 0x256226F0, 0xCADEF027, 0xA061AD38, 0xB02CB147, 0xE26D668A,
+0x8B4D5DD5, 0xF575C293, 0xB1CA5EAA, 0xD06E992E, 0xAB1F299F, 0xE59FD591, 0xC6E4F716, 0x6E1B01BE,
+0xB8AA3DA5, 0x0655870C, 0x77115858, 0xC0512BAC, 0x94287825, 0x335052D2, 0x528B00C9, 0xA238F928,
+0xFE1ACF57, 0x48C1F2C7, 0xFDCB5BA7, 0x60AE65C8, 0x90FBF6C5, 0x4432E87A, 0x8282F26D, 0x77C89C8E,
+0xFE738B51, 0x2C1F3CDC, 0xE606A9D3, 0xE1660F79, 0xEE416967, 0x109D7D76, 0xBE86281A, 0xCB098241,
+0x90EB061D, 0x62296CFB, 0x66449B91, 0x163A10FE, 0x2E702086, 0x352B1A2B, 0xDF8773EF, 0xF4EAC438,
+0x180D06E9, 0x6DA41F92, 0x1C6501FF, 0x96F2D9B1, 0x45632767, 0x21076888, 0x08698B49, 0xCECAA244,
+0xE014BC15, 0x3F4B6019, 0x79F26C82, 0xFE1D7BBC, 0x549A41A5, 0xEAE859B3, 0xF9E42CD4, 0x83BA9573,
+0x9BB4E5BE, 0x89D5CC45, 0x79115353, 0x140E4EDD, 0xF04E9E9A, 0xAED48A37, 0x5066B4F9, 0x495C91FB,
+0x23F27090, 0x014841AE, 0xBC37B6E8, 0x13220C6C, 0xBEE06165, 0x8292E753, 0xF06D767F, 0x260DEDDB,
+0xBA279FC0, 0xEBAB983A, 0xFFB3FA28, 0x94A38A4D, 0x191CB2BC, 0x0B792965, 0x7CD918A4, 0xA4DC9D31,
+0x008ED47B, 0x6FF27445, 0x7749673F, 0x8D746873, 0x6981F3EB, 0x7925580B, 0x9F03B601, 0xBE4E19ED,
+0x7815163F, 0xA36B4A21, 0xADBC0A3D, 0x1DABC999, 0xAE87C1FB, 0xFC1B28A0, 0x882551B1, 0x64D8C2D9,
+0x8A8A1248, 0x76F15279, 0x7A0F5F03, 0x412D4606, 0x0BCB3CDA, 0x3BFBB163, 0x17A09A16, 0xC55D2BCF,
+0x537F42A6, 0x2AD565C3, 0xC7B30C9B, 0x803ED885, 0x935CCCEF, 0x2376634A, 0x5514AC38, 0x1ED46EB3,
+0x411825E4, 0xD294220B, 0x6F7BB77F, 0x09ADAB1D, 0x6A1A858B, 0xAA08BF30, 0xE28278B6, 0x3944FCAC,
+0xB3808137, 0x69C2536E, 0xD7972FC9, 0xDC0CAFA7, 0x23F4E739, 0x93B285F2, 0xA9CD8120, 0x1C9C4AE4,
+0xDC929340, 0x0575FEB3, 0x7C1C5A34, 0x766EBB02, 0x8E40FCB8, 0x53C2BCBD, 0x05DFCA4D, 0xD7632164,
+0x477193D0, 0x2B201C55, 0xDDEB6C7A, 0x406B53B4, 0x0683EB90, 0x9CDAC05D, 0xF30DEC5E, 0xF8AAFD25,
+0xA218E0B1, 0xED824A8D, 0x2504702A, 0xFB406B1C, 0x372CE297, 0x31C1F3E0, 0x1160DA76, 0x8077291F,
+0x3098A87A, 0x6B1454BA, 0x056461EB, 0xAD95CF55, 0x73C82B20, 0x7229871F, 0xEB1935FB, 0x2B8D6D5C,
+0xFF4F0726, 0x41ABA641, 0xC4573775, 0x6CC7AC02, 0x919BC98A, 0x96FEAB31, 0x78A6A6DF, 0x45C955E8,
+0xAF847CC0, 0xFA138B4C, 0x18C514DD, 0x0B2CA12F, 0x0815E13D, 0x2F3CF3B2, 0x72D86829, 0xFCF6A505,
+0xB2DF87C1, 0x3E7D3408, 0x6E0B6C4F, 0xCC98013D, 0x1B83A550, 0x79DBD3AE, 0xCD40107B, 0x4659048C,
+0x4B60DAA7, 0x42120A57, 0x8298F44D, 0x90073C00, 0x01519D71, 0xBE4F48D0, 0x446412BA, 0x8CD817F8,
+0x93F97D09, 0xA6D85656, 0x196D682B, 0x721747E1, 0x0024B5A3, 0x47B12260, 0xE396C679, 0x0141A2B2,
+0xDF84A081, 0x4DB2AE88, 0x185E2A8A, 0xB0633933, 0x15467A15, 0xB45461FB, 0x744D2E04, 0xD6CD3A5A,
+0x38F35ACA, 0xB5CF34AC, 0xC3ED4273, 0xE502AF34, 0x0B3D4AC1, 0xBD79EB1E, 0xDFA1CEBD, 0x399AF9C0,
+0xAD475C7A, 0x63CB2572, 0x2B2E15FA, 0x09579241, 0x68999129, 0xBD0A6D81, 0x42B4F0EB, 0x3B464202,
+0xFC26A4C5, 0xE7F62403, 0xF7FB3BB0, 0xC7B2EA5A, 0x350770A1, 0x349A50A6, 0xA30E2B9A, 0xB2940AAD,
+0x092FC5FD, 0xCA639C85, 0x0CDEE0D7, 0x79105B5C, 0xDBF32D1F, 0x5855D4D3, 0x3CA2424E, 0x29CB3838,
+0x8997BEBC, 0x54F5CDAB, 0xCA2D5636, 0xF00D07FB, 0x37845517, 0xBCBA6AE3, 0xFA6FB5EE, 0xF1DD7D39,
+0x32CAFECB, 0x9150AA94, 0xAE333F08, 0xFB18F9D4, 0x95214FC4, 0x57430730, 0x3FC8F724, 0x71DA6C5D,
+0xEC51E53D, 0x29A3CE52, 0xDC2701F5, 0x1A953B70, 0x2D66C48A, 0x3030D126, 0x6B0A4BF9, 0x52FDA691,
+0x69FE35BC, 0x4EB0DDCD, 0x80BF21DB, 0xE69A49CA, 0xE7F11236, 0xF2F88E41, 0x6873712E, 0x25EF81CE,
+0xE8320168, 0x1C128FB7, 0xE7879CB9, 0xBDDB2E0F, 0xA3FF4C36, 0xE6E95D55, 0x22FE35C0, 0xF851545A,
+0xD81129FC, 0xB7484036, 0x933CE712, 0xE0BA0641, 0xACB0C6BF, 0x98A5C3F8, 0xB1CB243A, 0x391D6C50,
+0x48EA545E, 0xF3E91E7C, 0x175231C4, 0x24F757EB, 0xDB707928, 0xC55CD523, 0xD48F7F6C, 0x33FC107E,
+0xCD8F2220, 0x2FBA7C5F, 0x14A9D7C3, 0xEFED5D22, 0x705BD45F, 0x8653C84D, 0xAB04328C, 0xD6C96750,
+0x9306F24B, 0x931D4AE8, 0x7BBC7072, 0xA0E1F81F, 0xB06A8B08, 0xC60C1FCD, 0xB1C0BCE7, 0x419F6556,
+0xB8137411, 0xD6E3A0AD, 0x2C832DAB, 0x32B9FBE0, 0x6B6B5236, 0x9B6FC87D, 0x498A614B, 0x86E378BB,
+0x74C5FA3A, 0x9D9A299C, 0x7A5037E7, 0x7AB2D043, 0x9A3B81CE, 0x4D05D2F2, 0x98FFBE19, 0x1385669D,
+0x6B17FC87, 0x7582720A, 0x95BFD9AF, 0xA88C53DB, 0xF5234A6A, 0x7FDB491D, 0x99363600, 0xC2BBC655,
+0xA1480ED7, 0x08CD36EA, 0xA4C88FB9, 0x4BFA520D, 0x39FCDA6A, 0xAD1FD1DB, 0x090C31F8, 0x0437B302,
+0x36FCC363, 0x2D4DAF98, 0xFCF03FF8, 0x7EE5DDF9, 0xD9E5EE07, 0xC9794DB3, 0x3AF8CA3A, 0x4D5DF4FE,
+0x874D4011, 0xBCF20F21, 0xF2E13CC1, 0x3674BD3A, 0x915FB52D, 0xAA06613D, 0x89C046AD, 0x457D0ED9,
+0x78A9C4CA, 0x693DB415, 0x88010947, 0xE3C401ED, 0xF691ADBC, 0x13685565, 0x3F600334, 0x307F0B82,
+0x79992888, 0x52A3845F, 0xF4707B6E, 0x953E473D, 0x24E9BD5F, 0x26C9E412, 0x4D350851, 0xC5AD5A09,
+0x860988DA, 0x05060428, 0x502799E2, 0x9622FD76, 0x56A9ECA0, 0xDC1223D5, 0x37C2D34D, 0x7E05BDEF,
+0x8133755A, 0x24D6F78A, 0xD82E7EDB, 0xB64C6689, 0x1797232F, 0x389EA70C, 0xEF26CF70, 0x1D01FB89,
+0xB37EAC44, 0x3EA98234, 0xC9AEF06F, 0x953CDA3B, 0x9233779B, 0xF698ACE3, 0x53120767, 0x3B575148,
+0x848ED483, 0x523B3C7B, 0x825732EB, 0x04EAFC78, 0x6C757D77, 0x0582F8AA, 0x76EA908F, 0x5E1BF45E,
+0xA2879FAD, 0xF8B0FBAF, 0xCF084F8B, 0x25462BB8, 0x2CBE2BD4, 0xC011FFD6, 0x85D78E77, 0x2167AE39,
+0xE9FDD492, 0xDE1C3CA7, 0xBDE5C9CE, 0x0B38DD6B, 0xE08D3A06, 0xE8247524, 0x458C44FA, 0xA37B92E5,
+0xA3ECED43, 0x890BF251, 0x291CCCE5, 0x60EADC95, 0xD3209BA4, 0x3EB48C73, 0x88798452, 0xCFB7CC7B,
+0xDDA87989, 0xD8D60004, 0xF860A821, 0x4616A5CA, 0x47783C9B, 0xF8B3636C, 0x4779F98E, 0x948E0469,
+0xD3CD7CE2, 0x0636C30A, 0xA643CBD4, 0x83816A80, 0x7547B715, 0x32E5FB17, 0xAD4F7481, 0x6C086F75,
+0x5434366A, 0x989C8A12, 0x98F20326, 0x8AB28D3E, 0x7BB5DE3B, 0x61C86D46, 0xB156DBAA, 0x206258A1,
+0xE90EB9E1, 0x6A4F5D66, 0xE4E1E226, 0x59A5B9F6, 0x357C27E6, 0x9D3C7867, 0x76FDE6D1, 0x55B91BFB,
+0xCB603D7A, 0x0AD2750F, 0x664D225E, 0xF39D7AB7, 0xAEE47655, 0x3959EF56, 0xC7194684, 0xACB93F22,
+0x5F08DED3, 0xD640A4FE, 0x37ED0E86, 0x8892730E, 0xCA167757, 0x755D6976, 0xFD1E624D, 0x6410650D,
+0xCDFA506C, 0x603BC9FB, 0xA1CFF416, 0x2AFD0326, 0x6181790F, 0xBF38DA7E, 0x24CC4158, 0x9856CB57,
+0x855972C3, 0x901C1C9F, 0x0C6A3188, 0x17360C7E, 0xD4D69F9F, 0x05AB7F3E, 0x8395C438, 0xF1CED753,
+0xDC57E338, 0x572B6030, 0xD7666634, 0x475681AB, 0xA78F6130, 0x58D20E73, 0x1FB08C1F, 0xB9B4C68C,
+0xCC6809F9, 0x474BB013, 0x389D9979, 0xAE0FDAED, 0xC573C16C, 0x960E2CA0, 0x41DB0590, 0x130DBCC4,
+0x85884EEC, 0xF3959F43, 0x69E8ECA0, 0x5DF588FD, 0x7FD1A059, 0x6BA18602, 0x2D2CCD38, 0x7F2CD9D5,
+0x9BFB46B2, 0xEEF7493E, 0x1F9A6881, 0xA3A6BBF1, 0x60647A37, 0x7093D946, 0x0F30E707, 0x8E1CD2E6,
+0xD07F2BFE, 0x33B451C0, 0x467CD63E, 0x9813BDDB, 0x72899590, 0xF9B07E0B, 0xA888DFF1, 0x170F25A8,
+0x9B559C40, 0xA89B952D, 0xF9472C85, 0x805A4999, 0x45E5F586, 0xFC73FD03, 0x9636E8CB, 0x69755317,
+0x25EF512D, 0xDE6051C9, 0xEA2645B9, 0x2FA5074E, 0x5D987F1A, 0x0EB556EB, 0x2441AF5B, 0xAA332606,
+0x7416B0BE, 0x8586D595, 0xA45FBFCB, 0x5D07D220, 0xA136572C, 0xBB0DFF3E, 0x77459FB4, 0x121D86BE,
+0xAD5624B6, 0x11840FED, 0x7CCA7161, 0xC2324995, 0x1458C2A7, 0x5685F191, 0xE5303439, 0x1C099DC6,
+0x67FEFA35, 0x1F491BD7, 0x6793649A, 0x91C53319, 0x5AA5123D, 0x6107DED9, 0x1F525558, 0x58020773,
+0x17D8F59A, 0x37DA0656, 0xA035CA03, 0x73E9A349, 0xC94EE0BE, 0xB68CF24D, 0x15B24C48, 0x34B2B4F5,
+0xD6B7992B, 0xF1B1468B, 0x19F98D3A, 0x7C293C83, 0x5345BA67, 0xE29E6F16, 0xB9FC966F, 0xBF8C7B46,
+0x2090B311, 0xC9405B96, 0x2CE62A89, 0x044B6B59, 0xC0478C8B, 0x0120BC65, 0x0348B1CB, 0x1F79BAC9,
+0xD053C63E, 0xF916490C, 0xBC500493, 0xAFD2F8D8, 0xD7B4CA3C, 0xD4377C8C, 0xCC21CBF9, 0x48E09FE1,
+0xCAF1E092, 0xA1C1E4CB, 0x86B356B8, 0x8F7581FA, 0x1BB44C1E, 0x7D29D75D, 0xBBA5347B, 0xA094A634,
+0x478A8561, 0x252F30B6, 0x191DFC6C, 0x01F6C9C1, 0xFEFEF628, 0xAB6DD532, 0xC051AD09, 0x9FD86873,
+0x6481B0B2, 0xE980BF2B, 0xBAF98674, 0x315C273E, 0xBC112D8D, 0x6910026F, 0x35CE3C1C, 0x1A2329A8,
+0x0AFA79A8, 0xF15BDBE8, 0x47554A40, 0x9DF4A165, 0x462B80F2, 0x0C952809, 0xDAE30E54, 0x6FF681B3,
+0x530A7646, 0xFAB58FC3, 0xB5C181B6, 0xE70CB85B, 0xC1BA6357, 0x55D772D5, 0x1CF15C6C, 0x1A2D8C23,
+0x3566B4DE, 0x98F6C364, 0xBD86BCA7, 0x628E7E94, 0xED7FADAC, 0xA6FC3603, 0x7D4AB1A0, 0xE20AF47C,
+0x4B863CB8, 0x1F281291, 0x1BC3DB31, 0xF65B73BB, 0xE589E147, 0xF3013D38, 0x95CF0D08, 0xF7062673,
+0x05EBCFDF, 0x0F444E85, 0x0E5FDA33, 0xA16C7399, 0x45C40069, 0xF645E98B, 0x3D2377AB, 0x4930643B,
+0xE3ED28E6, 0xB797447B, 0x8465C23B, 0x2655D010, 0x0FB1EAAA, 0x2D87AA53, 0x31CCC171, 0x24D5D436,
+0xAA168EBA, 0xBCACC164, 0xBD25EDE8, 0xF3DAC2EF, 0x5DBD3449, 0xD25F34C1, 0x92BA759E, 0xACF9A154,
+0x14CB6C6C, 0x0316ACBA, 0x2F277A9E, 0x3FBA5035, 0x55833724, 0xB2D1F9FC, 0xC161B772, 0x528FD62F,
+0xCEF3CAF2, 0xFDFE7165, 0x65025BAD, 0xFD179D98, 0x36C505C4, 0xA15AD311, 0x9290D6D7, 0xD9783E3B,
+0x05E4F971, 0xD2D3C91A, 0x3940FD30, 0xD1C65A7A, 0xD2161461, 0x4391D7D0, 0xA93155DD, 0x4E7E750A,
+0x61AFDA2D, 0xC2E9BCD2, 0x63A99B7E, 0x5ED1EBDF, 0x5675D215, 0x1E40E7EE, 0x53565C38, 0xEACFBC49,
+0x06088A47, 0x2F181BA6, 0xD7D73518, 0xF38982BF, 0x37734BCF, 0x1CECF6CC, 0xCDBBF0B0, 0x911347B8,
+0x9D494A95, 0x412E51D4, 0xB77CABC7, 0x64AD8BE8, 0xB93923FE, 0x1CC93B4B, 0x1560D8D6, 0x7AB75480,
+0x9C3B38D0, 0xC48BF0EF, 0x8E3C97ED, 0x658DBADE, 0x2B72105F, 0xB8AD06D9, 0xBCC9B2E6, 0x7945E119,
+0xA74522DD, 0x6B96FDD5, 0x1E767D66, 0xC41B13E5, 0xA64E8247, 0xAEFB0D69, 0x773C610C, 0x820AE8C0,
+0x27FEAF95, 0xDF4BF33D, 0x55300588, 0x5D98BC8E, 0x3EB72C59, 0xF7EF1007, 0x17FC7CC7, 0x0C2F7567,
+0x1F46B137, 0xF7EFE65D, 0x6371238A, 0x06733B2B, 0x7BCDA346, 0xA6F41E68, 0x4BA3F606, 0x8C41DC12,
+0xB324E78D, 0xE8B8D4AB, 0x3E0EB984, 0xED9E59C3, 0x4AF59658, 0xC7C6FFCD, 0x7A19175B, 0xDFD45664,
+0x91D1E302, 0x440D578D, 0x7359182D, 0x83988223, 0x956B73BB, 0xA950E523, 0x66258211, 0x80C43292,
+0x13A32745, 0x2CBA8645, 0x0289FA34, 0xA5F1AD25, 0x14430F9D, 0xF0B5FE00, 0x00F6CC2D, 0xCF8E67F8,
+0xF71D52F2, 0xB4D9D3A9, 0x6440EA04, 0x57916E86, 0x7AC00CCF, 0x9FC21FAA, 0x55C42611, 0x05A2B6A1,
+0xC3B39DC8, 0x85239FFF, 0x99EC16F8, 0x1FE5973E, 0xEBEE7388, 0xEC73F099, 0x15C311B5, 0xDDB456F4,
+0x3641511C, 0xD944CB7D, 0x0CA181CD, 0x6E427BD0, 0x43B225F6, 0x799FC38E, 0xEF75951F, 0xAB18C973,
+0x8B6CB426, 0x07DA899D, 0x7EF92557, 0xA1FC6101, 0xD736523B, 0x69928A25, 0xD8C59439, 0xD50225DE,
+0xD123E1FB, 0x6DCBEAAC, 0x8C6DD86D, 0xBC3EC8BE, 0x8D5422AC, 0x373ACCAE, 0x73C563B9, 0x111E1CFF,
+0xC98C11C3, 0x06FE2963, 0x2471476D, 0xED00D762, 0x870EF78F, 0x3E7E87F5, 0xF799D926, 0xACF500BA,
+0x8A111F64, 0x61572488, 0x08B44BDD, 0x7EF6241A, 0x0EF67BCB, 0x457DD7B1, 0x87B07F92, 0x821AA5EC,
+0x75FBA116, 0xAEC55FDE, 0xC876C555, 0x02273556, 0x3C639B5D, 0x11F66283, 0x41F32CE5, 0xF50CA18E,
+0x95D3D8B4, 0x474F57F6, 0xABE7FC6C, 0x64992099, 0x60E06FF2, 0x21A22D74, 0x1CF24624, 0x6269BA07,
+0x6C9335D5, 0x67D9485B, 0x840A7D69, 0x576E6D43, 0x511D4317, 0x9F670F9C, 0xC5F40038, 0x63742366,
+0x0963E3A8, 0xA0314831, 0xBB00FF00, 0xB964F104, 0x84A59002, 0x34315FE5, 0x69937505, 0x6A297A3D,
+0x03E5CB4A, 0xF8F87830, 0x16152768, 0xF68DAC7A, 0xF87FCD06, 0xABB660CC, 0x999EF033, 0x35A17008,
+0xC3B38E21, 0x8CB47BA6, 0x5238B14B, 0xE0900222, 0x68B39441, 0xDDB83FD5, 0x8719034A, 0xD5F64F60,
+0x1CF46B56, 0x36AB6110, 0x9B8B989B, 0x28A3526D, 0xF71056FE, 0xAD2086FC, 0x0B61966E, 0xCF7BDD0E,
+0xD8B34C23, 0xB61006E2, 0x692243B5, 0xB16AD49B, 0xA42C76C1, 0xB7A51CE8, 0x897286FC, 0xA5B0FFAB,
+0x784325B9, 0x69D82C93, 0xA3CB473D, 0x9C795138, 0x70A78E4E, 0xBFB239EF, 0xB6B870FC, 0x4FD056BF,
+0xD930685D, 0xF2F7A9F5, 0x7DCAF298, 0x0BB0D05B, 0xBBF41734, 0x67E57744, 0x53BC2FAA, 0x3A3843B8,
+0x27E79D27, 0x54CD2D1A, 0xD62E925A, 0xA1FC020B, 0x8AE1A462, 0x1B60DB28, 0x74464359, 0x74367FB9,
+0xC99EB928, 0x8F37EFC2, 0xD6BB18FD, 0x9C043B8E, 0xE331994A, 0xB1100555, 0xCA37E6F4, 0xED7B5B1B,
+0x0A8B68D6, 0xFF0C2ACE, 0x715B0542, 0x280FD906, 0x46A4A998, 0x8781DBC8, 0x19248EC7, 0x85AAFEB5,
+0x2A54201F, 0x2EBC4CBE, 0x768B2385, 0x6D5F3AA7, 0xB64556C7, 0xDFA972E7, 0x49CF4FF3, 0xE942D211,
+0x6587734A, 0x12FCDCC0, 0xD311FAAC, 0xCF1E6B5E, 0x30BAC063, 0x83ED01C8, 0x01A5E1A8, 0x0FD8BC81,
+0xD8717499, 0x62F2215F, 0x34E2C977, 0xB996A033, 0x8DE06621, 0x264309BF, 0x1E3AC765, 0x6BB0E35D,
+0x83F9F63C, 0x45A84A7E, 0x3FF3D281, 0xE49D5BD3, 0x60438D51, 0x2307724B, 0x0735C2C0, 0x1FF17505,
+0x5E249F5D, 0x4928880F, 0x1711D02F, 0x91C7F4AD, 0xDFE5A0CA, 0xDC20B5E7, 0xBC3C3513, 0x13DD2ED4,
+0xB69BE094, 0xF5AC975B, 0x42C0FDDB, 0x5D2BC6C2, 0x6AAF66A0, 0xD6B88191, 0x7FBB75DD, 0x90E3CB89,
+0x663DC6C0, 0xCC08E303, 0xD113963C, 0x739E16E1, 0x790D9E7B, 0xEA401FEB, 0x8F8BAF56, 0x3F86B968,
+0x79A3E7F0, 0x0E7A8F56, 0x9DB31BA4, 0x359B2B1C, 0x31F5D418, 0xBE287CE6, 0x32C5563E, 0x6FFE0CB4,
+0x3CB22ABC, 0x2E930653, 0x97B1068D, 0x40143FA6, 0xDF35AE7A, 0xFB3F902E, 0xBE9C4856, 0xF6BE41B3,
+0x104E0157, 0x3C2EC392, 0xA14C7395, 0x08F81395, 0xA0F0EBBC, 0xF4922702, 0x96BB8C01, 0x4EEC4373,
+0x532D98A3, 0x41E4EB0E, 0xA7FCB2E2, 0x6B88ED09, 0xF3787026, 0x390AC851, 0x7F10B24C, 0x7ADD4303,
+0x836841F7, 0xC0D915EE, 0x90FF0DD7, 0xFAE2C9A8, 0xE43A20EF, 0x5DCD5282, 0x2E37D621, 0x7BE59D67,
+0x3999AB6A, 0xD6EEECBE, 0x59E24FE8, 0xB4372C35, 0xB089B643, 0x5C3D325D, 0xCD193EB7, 0x76B3EC4C,
+0xAA8DFAD8, 0xE4EC31FB, 0x61422D0E, 0x2A6D82E6, 0x50E6AF30, 0xB6218F15, 0x130BEE59, 0x3AC1F77D,
+0x3E5E047D, 0x795E1224, 0x532CB0B9, 0x5823A84A, 0x9761B9BD, 0x8A891465, 0x3D8A6B39, 0x8E47BA44,
+0xAB0C4E89, 0x5F3C31A3, 0x89D89C98, 0x3CC20CBA, 0xFBFF4760, 0x6C1D41EA, 0xA9A5B21C, 0xBF3B8E5A,
+0xEAF5A54E, 0x2B1A4418, 0x1062DE07, 0x7023E70A, 0x9582E543, 0x3D8546CF, 0x9E480D53, 0x33A84DC9,
+0x0C84630A, 0xD091000B, 0xFE74898D, 0x32808550, 0xA8815A1E, 0x518C40AF, 0x413C3693, 0x8BBC677D,
+0xD925568C, 0xBA5C91EB, 0x446F983E, 0x3155E2D6, 0xA4A4DC35, 0x6FD20E39, 0xD4311C4B, 0x6224D7DB,
+0x8F273B5F, 0x665FF391, 0x452BD5A5, 0x28C14BFD, 0x426EA6EB, 0x47F89FF2, 0x1BB26756, 0xF62D88A5,
+0x22F902DF, 0xC412C696, 0xEBCD8185, 0x4EAE95F4, 0x02D947AD, 0x7C534940, 0x97CE9EC3, 0xBE08B4DF,
+0xE5181DAC, 0xEB154F42, 0x059C84D4, 0x127DECAF, 0xF85ECA9B, 0xEAB21FB5, 0xE04AE704, 0xBC6CC6DB,
+0x6108D835, 0x90308EAE, 0x4435A57A, 0x387C251E, 0xC2C8A345, 0x3C1FBE26, 0xAADAFC5A, 0x18BAE4C1,
+0x7E5756D2, 0x209D5E0D, 0x3BAD9BBE, 0x5E0F1E87, 0x3841A8F1, 0x7E70C725, 0x2095365A, 0x0A9F37AA,
+0xEF04CA3E, 0xA3C5DC19, 0x5F5E5D9A, 0xE2382FB7, 0x020A87A9, 0xE0487AB5, 0x91345C60, 0x1495AD92,
+0xAEEC1FA7, 0x032A09D6, 0x71E301DD, 0x8A3DEFEE, 0x08F852E9, 0x176C1409, 0x4152629F, 0xACB9C532,
+0x71A15F91, 0xE931A18E, 0xEE0CB5E4, 0xCB91D34F, 0x61D47A1C, 0x372C2B4A, 0xC91F6BC7, 0xB9D1A79A,
+0x29C23511, 0x36BB83EB, 0x87BE9DA9, 0xE10BC442, 0xE7A0EA66, 0x260CB1D6, 0x79D7A86F, 0xA8F6D873,
+0x39F47CC2, 0xEEEBFD50, 0xA18DEECA, 0x5D95ECE1, 0x3C64D5A3, 0xD8938A2E, 0x37362DBC, 0xB27E0063,
+0x90BECBF6, 0xBB5B076F, 0xC0D542B7, 0x8FE62730, 0xCD7B5C86, 0xC9E5C4E4, 0x122231D5, 0xB342AFEC,
+0x96BC8F01, 0x8373BEAD, 0x2642EA2F, 0xA6C23799, 0x53927368, 0xCC2C75EB, 0x00FF4E71, 0xD0E3A7B8,
+0x33220E67, 0x385EF867, 0x39D1298B, 0xFB5ECBB2, 0xB5C6E3D7, 0x5F68867A, 0x6800FCE6, 0xE0646F26,
+0x73373C3C, 0xA420D643, 0xE760DD8E, 0xB3495DB7, 0x2D270750, 0xE8A097D2, 0xD277B115, 0x978914E8,
+0xC881C926, 0x8494A56C, 0x69EFCC5E, 0xF3E743DF, 0xFF6D50A9, 0xE67C90F4, 0x9CE89EA0, 0x37A1BE29,
+0xC8844205, 0xE386D562, 0xB65B27C7, 0x395BEB08, 0x387DFA83, 0x84C6FD90, 0xCF867D9E, 0x29B28700,
+0xAA395CB2, 0x240E6C71, 0xBFC46193, 0xC167DA7C, 0x8AC657F6, 0xD3927B9C, 0x239A8447, 0xA0DFD740,
+0x60F653E1, 0x340BBBF6, 0x538A7F65, 0xAB466A2E, 0xCCB5D0D9, 0xEE7635F4, 0x75B2395F, 0xE1CF16D4,
+0xAA27E8EF, 0x44294B4E, 0xE1AA5F60, 0x5610C272, 0x7A3EC387, 0x8FB8E834, 0xE1F66221, 0xECEB4862,
+0xB443FBF1, 0x74C731C2, 0xF46811EE, 0x87A5EB56, 0x46F57C9C, 0x4095F719, 0x95C4F186, 0x96405D69,
+0x8256582C, 0x2558912A, 0x292EBD77, 0xA014C491, 0xC644EE5B, 0x63CBAE65, 0xD6148EDF, 0x2B56F4F7,
+0x2FE32DF0, 0x8637A789, 0x6876C3BC, 0x7FD9FD3C, 0x18AFFF90, 0xCAE4DB71, 0xBCB31D6D, 0xA5B6E9C0,
+0x37B7C800, 0x6DC9A068, 0xEDB08D64, 0xCA7D69CC, 0x3BCF606E, 0xFEF9008A, 0x5408B6A5, 0x2AB65F71,
+0x7C87966C, 0x393CE79D, 0x43E88A1C, 0xCB3B5520, 0xEC092C8B, 0x50E51634, 0x85ABFC16, 0x8092DBC4,
+0x486B920D, 0xA9338449, 0xF737399D, 0xFE040ED9, 0x7A73D2E6, 0x66651CF7, 0xDBA1003D, 0x217A424A,
+0x08E28A10, 0xCF2BA90B, 0xA39F05E8, 0xAC63942D, 0x3CED7F81, 0xD0B389E8, 0x50848D49, 0xD112D195,
+0x798FD253, 0xB275C6E7, 0x14DB2CEC, 0x71F45E70, 0x0E75AADC, 0xFFC19977, 0x70B3C6AD, 0x43F88E36,
+0x15CA7C0D, 0x6E852285, 0x587EDE09, 0x2EFA29BA, 0x8B86392A, 0x13DCF1DA, 0xC2522332, 0xB01C99F5,
+0x8A48D6E2, 0xB58C408D, 0x45279E73, 0xC3308C19, 0x069BFC95, 0xA34BC26C, 0xCE7FF15B, 0xE7345900,
+0xD253F9AF, 0x7E2A2209, 0xE5FD7D99, 0xDD524039, 0x991F9DE7, 0x22430A4A, 0x46F09C65, 0xC8EF098A,
+0xE3DBA4CA, 0x1650F44B, 0x83C06683, 0xB1CC2624, 0xFF2F6CA3, 0x5D47C7F0, 0x46E65658, 0xDF6EAED2,
+0x521EDD14, 0xBCBEF1E5, 0xE0A98DA3, 0xBE1D4CB4, 0x2E0F83BA, 0xFA3D90FD, 0x8A9A4714, 0xD829202D,
+0x238EEBAE, 0xA6224482, 0xCF1F4655, 0x50FDC0F9, 0xA836B245, 0x3141A295, 0x2787484A, 0x62F900C3,
+0xBE71E155, 0xFE9F2453, 0xE77EA224, 0xEAD83B10, 0xAF6F6938, 0x06573D19, 0x8A74B188, 0xF7DBE9D2,
+0x1CF1E71F, 0x69F0EE70, 0x0EE93A5D, 0xE51A33A7, 0x41913BC1, 0xCC93F22D, 0x1DD7C089, 0xD5D3B7C9,
+0x790A9DE6, 0xA9AD9A02, 0x86A2E28D, 0xDF883ACB, 0x0750915D, 0xFC95D80A, 0x4A392675, 0xBDD989F6,
+0xA1941591, 0xB6ED46C9, 0xEE1206C9, 0xE8824ADB, 0x80C0F086, 0x4F7B8861, 0x839B3875, 0x90C197FF,
+0xF8C41EAF, 0xB6D3CA72, 0x92D43679, 0x5EDE8A98, 0x3BF47F8B, 0xF9F56BCF, 0x25F076E6, 0xC3F33663,
+0x16FBA19D, 0xA0E34A36, 0xA0C4D4C4, 0x4216C634, 0x8D1DE769, 0x2A8A2EA4, 0x42173BA1, 0xDEE72251,
+0x09EED658, 0x37B51F7F, 0xCBA9A14E, 0x48E2A43F, 0x4057F7DC, 0xF267B93C, 0x5F12BE9B, 0xD233031A,
+0xD9882CB7, 0x2D520473, 0x8662B2C1, 0xCC7D939E, 0x27FFBAD4, 0x62B2C6D6, 0xE714F10C, 0x8E4AC4B2,
+0xDD8B97CC, 0x5153480B, 0x4B18356D, 0xBAF96002, 0x53812383, 0x3739BED4, 0x61AC610F, 0x79BC983D,
+0xE1FE689C, 0xFDF6E058, 0xE1B3969A, 0xF81B61F9, 0x1F65231E, 0x1B16F072, 0x2B624BE5, 0xC7CE3EEC,
+0xBAE28D60, 0xE56A14F9, 0x3F3E11A0, 0xD2E8603D, 0xD3D5327E, 0xB0821155, 0x032DFE80, 0x2DDC4D5C,
+0xB7AA9B57, 0x97F0AEAE, 0x92DF8F24, 0x9D786360, 0xEE9FA702, 0x61F9AF5C, 0xCA63BC45, 0xA8504A27,
+0xF543720D, 0xF5BDCC78, 0x7882971B, 0x11604BA9, 0x72331BCC, 0x642C28CC, 0x591291FF, 0x2DE98AC4,
+0x6156E8B5, 0x84BE10CC, 0x8C7FF059, 0xBB2B7FB7, 0xB11F8D4D, 0x72FF2B6B, 0xD3500383, 0x8279DA51,
+0xBBC0987A, 0xB52E1649, 0x36A73363, 0x95523F90, 0x5814C21A, 0x93BB871A, 0x6337E0EB, 0x7DCBFAF6,
+0x4CED8E28, 0x192B3E81, 0x457D0BFD, 0xE19019CC, 0xFBE829B5, 0xA8FF2C5A, 0x4B5E7812, 0xCD985C1C,
+0x94985A95, 0x220C0B07, 0x6EF8C67A, 0xAAF7235E, 0x66D80EFB, 0xE13FA7FA, 0xDE0F941F, 0x3F103CDE,
+0x7DABC90D, 0xB6F12F81, 0x524E0466, 0x5D4CF26C, 0x2DF5486C, 0xAE8BA786, 0xE4E69D98, 0xF74675DB,
+0x126A63D7, 0x5E81FCD8, 0x29E6A6AD, 0xF8676558, 0x1AECDCCD, 0xB8621068, 0x1919B812, 0xD256EB17,
+0x17548B13, 0x26651545, 0x546FD130, 0x78317F86, 0x649C8C28, 0x15344084, 0xF3FC78A3, 0xCB55D45A,
+0x22C96EDF, 0x150D45D4, 0x987C7D0D, 0x3885E587, 0x7D32383B, 0x325D3C99, 0x5A402FA9, 0x39759D58,
+0xFD66466E, 0x6F33F31A, 0x52B63662, 0xCE5524D1, 0xA27BC73A, 0x50F1ECF3, 0xF3CF8532, 0x121EB60B,
+0xF68E37D2, 0x123F4B31, 0x544CB489, 0xA21601BB, 0xD80A1FE4, 0x227FBA56, 0xF9B640F4, 0x439F4D6F,
+0xD6762A40, 0x14ACC299, 0xB0FB17E5, 0x5C2ED469, 0x6C66F06E, 0xF03CCA36, 0x9C17CD53, 0x06F2A080,
+0xF34EF76C, 0x0750A675, 0x0DC05C72, 0x4C1C6917, 0x3BA48FE1, 0xF3692128, 0x0EF1F37B, 0x9D1898A9,
+0x6A211453, 0x87E8FE93, 0xC538E323, 0x1E14E7AA, 0x71D98D71, 0x3E382221, 0x601F8AAF, 0x794EF7FA,
+0xAD063AFE, 0x0E909028, 0x444740CB, 0x8F291524, 0x675465FA, 0xB0D12C8C, 0x6A3ADC7D, 0x0F1D359D,
+0x4B8DF268, 0x70EF8A0F, 0x3E516582, 0xD790953C, 0x89351472, 0x9960A73D, 0xF22F7AA8, 0x69BDD32F,
+0x3D327B97, 0x4840AD9A, 0x4F9393F3, 0xA91BECA3, 0xC89C24EC, 0x1238D23D, 0xC992612A, 0x313AB46D,
+0x96956D01, 0xDA6863C6, 0x7DB5DB85, 0xB2C2634A, 0x139EE04F, 0x48796C7B, 0x4A7E7D4A, 0x5C4A7B76,
+0xF367CA7B, 0x9379346A, 0x3A29DFE1, 0xB4223575, 0xE4D6AF08, 0x1B76E75B, 0x99461D5F, 0x27077C91,
+0x5EDC6774, 0xB975CDAE, 0xFE8124BC, 0xE653BCF4, 0x1C423BE5, 0x61BED12C, 0x902AD28F, 0x36E2B668,
+0x3A9D6607, 0xE0EC2AA3, 0x80661580, 0x0E787C02, 0xD7D0928B, 0xAFA55455, 0xEB6AC81C, 0xAD8F6E04,
+0x695AEF2C, 0xCD3D3605, 0x2D5F6579, 0x30BF443D, 0x3EC01856, 0xB2A0AB9E, 0x0FA64557, 0xA762329E,
+0x82C6CFA3, 0xEF1E9A44, 0x0C1364E8, 0x06B9267A, 0xD6710BEF, 0xA93B4454, 0xF041A2B5, 0x418E8E67,
+0xE9D56860, 0x4EA5D950, 0x051E0923, 0x1F5AB850, 0x8B792B97, 0x0C6C7E4A, 0x0D62820D, 0x00E9E54D,
+0xE150F9C5, 0x3F7C2182, 0x4E399DA7, 0xBD805C50, 0x4FA24FBE, 0x25CC13D6, 0x08A5E84E, 0x809E5EB3,
+0x1B28F0D4, 0xE1B11F8E, 0x60273BA5, 0x4543EF22, 0x12ACE1E7, 0xC8A6477C, 0x0CFAD10F, 0x877923E1,
+0xE4FFE526, 0x2E833C9D, 0xED37DC88, 0x34B6A4EA, 0x38C9C594, 0x86C3854C, 0xBCAC065F, 0xE9B1D9B7,
+0x26F9B464, 0x487F2F6C, 0xEE2FAC31, 0xF18DFBC2, 0x0242E3D0, 0x615EB1F7, 0x5B1D5672, 0x005421BA,
+0x5989BC89, 0x1B0254AE, 0x09E37EE6, 0x5B6B6507, 0xD9E901CF, 0x0131E0F6, 0xD7B3F513, 0x460ED1D0,
+0xE0DE2D48, 0x42234CE3, 0xADF08FDD, 0xFC6EF8D1, 0x6E120DA0, 0xB1ECBEBD, 0x0A413E0A, 0xACEBF6B5,
+0x1E83D4D5, 0xCC6A09B3, 0x7BA9E064, 0xE20DA1BC, 0x23663F48, 0xC720111C, 0x1AD9C701, 0xBB8EF56C,
+0x124F9B69, 0xD5D1A61F, 0x68C7CAD4, 0xD9134C9D, 0x11C3A1B1, 0x3CECD1CB, 0xEC240159, 0x3E5FDA32,
+0xD19A8EF9, 0x27567453, 0xF24CE830, 0x3538D415, 0x8605CE47, 0x8552A337, 0x44CBA38D, 0x81064CB8,
+0xC690EB2A, 0x6B5F3808, 0x459C861C, 0xC4577153, 0x6DCA1C0D, 0x7422EE53, 0x53C3BCE3, 0xB015A094,
+0xF66FB034, 0x6455E9F0, 0xA1340035, 0x11AF6E40, 0xF7973C5D, 0x98977D20, 0x3ACCE833, 0x32EFC696,
+0x2CA05107, 0xC6C28CAF, 0xA495DDA8, 0x6387B5BA, 0x7D86A017, 0xA75D43E5, 0x774F1C3C, 0x832E7CA7,
+0x50AA1AD8, 0xEA2B021B, 0xE7A71F5A, 0xB0EE0DF2, 0xA30FC082, 0x53537833, 0x95C99C68, 0x9B6489DF,
+0x82121828, 0xC7FB57B8, 0x1082B309, 0xE333E676, 0xCA56876C, 0x41479C68, 0xF7590BE5, 0x29DCBBD8,
+0xC601FA73, 0xB76162F4, 0x9ED6F6C6, 0x9F15B830, 0x4D7BD029, 0xCAC2E513, 0x330EFC7A, 0x381884E5,
+0x168C5470, 0x80CBF483, 0x4EBD6649, 0xA95A7546, 0x139B5744, 0xA2CBFCCD, 0x40E737BA, 0xE9D01E0D,
+0x47778030, 0xE968E0A1, 0x790BDB3B, 0x3518FDF5, 0xC75104D3, 0xCDEBE0C2, 0xD3382243, 0x7E8EF9BC,
+0x1EF0C625, 0x5993BBD9, 0x5FBB6FD4, 0x47C74BFC, 0xFAC16B24, 0x2B69E3B2, 0x2A5E1346, 0x378FF779,
+0x2739581F, 0x635E5CA9, 0xCF407B9D, 0xDAC303F8, 0xB6795A89, 0x7183CDAC, 0x4FCE5570, 0xE8D1EEA3,
+0xA172187E, 0x0D329AA7, 0x38931B61, 0xF9756BC6, 0xC9E5F012, 0x3EF5DD97, 0x797A3856, 0x41780476,
+0x85A21203, 0xB4476482, 0x41CFB8FD, 0x41058A1E, 0xDAA818C8, 0xF5D4480E, 0xA1ABD4F9, 0x1185ECC4,
+0x80A1A902, 0x971506D7, 0x584B0235, 0x13BB33AF, 0x994154EE, 0x7CE6D108, 0x4EB6EC80, 0x227AB0DB,
+0x0A63076F, 0x1EBCE165, 0xE839590F, 0xFDC4F1A1, 0xF7B05E25, 0x9AA93C70, 0x0E9ACABC, 0x1453AADC,
+0xF1A6A62E, 0x698A6B94, 0x89F2FE5F, 0xB29FCE03, 0xBC2D4B23, 0x2DE23445, 0xABF5BB0F, 0xD2EA7C1D,
+0x2333C0EE, 0x29F0BD23, 0x54D7B1F1, 0xDD73C4B3, 0x72D93272, 0x1885708D, 0xC7B7AA07, 0x7E739030,
+0xFC1BB3FB, 0x93EA501B, 0x01020736, 0x6A419448, 0xB07B58FE, 0x9FFBD363, 0x4BDF00BE, 0xB3B829F9,
+0x5FED91D4, 0x08AC1F3C, 0xC10AED03, 0x282215B2, 0x0A0B24F3, 0x652AF2B0, 0xDC7D8076, 0x1A3B3E8B,
+0xD3B66C41, 0xA9CC3318, 0xD2DF75DF, 0xE1CB253E, 0x2E113076, 0x5BCAFAE2, 0xBD1C5F4B, 0xBEEB187E,
+0x816976B7, 0x24EDC300, 0x0FF4874F, 0x46E106F1, 0x1C088A46, 0x41A7B887, 0xDC5639C7, 0xABCBBBD8,
+0x985FD909, 0xB8DEF0A4, 0x35EAB70D, 0x150A95EB, 0x456F3386, 0x6AB22439, 0x4A7A6B54, 0xDB54D0F2,
+0xAB221604, 0xF4EDBCA3, 0x3B4BA68A, 0xC8619E9E, 0xC08E270A, 0x39A080E9, 0xDFAC2FEF, 0xE1F5ED42,
+0xC35AF663, 0xE5A8EAC3, 0x6836C4E3, 0x45C054C8, 0xC1A1E0D1, 0x32AC6118, 0xB85BF0AC, 0xBE1DF6FF,
+0x5EA299C0, 0x29D230C1, 0x22F35809, 0x01B321B7, 0x93ECC83D, 0x7AC3166B, 0x63AF86F0, 0x3EA4154E,
+0xED796A52, 0xC7E51C3A, 0xD2C04692, 0x79FEC8A1, 0xC1DEBADC, 0x0088AF08, 0x00A853F3, 0xD6156FC0,
+0xDFFD6442, 0x638271CE, 0x2E21EA14, 0x0E6FD273, 0x35C0C940, 0xB0AEB624, 0x01F367A1, 0x7256FA24,
+0xB04D60B9, 0x6A56DF35, 0x001EAC04, 0x1366F7E0, 0x8D678EA3, 0x81693040, 0x17FE5E86, 0xDE03E906,
+0x38FBAC33, 0xEFD05684, 0x310EE481, 0x1537CA90, 0xDD8E67A9, 0x42857616, 0x0E13D8B9, 0x8066EA0F,
+0xC5587F2E, 0x0BDE1E17, 0x6C59DFE6, 0xC2E6546D, 0x2B1A824F, 0xDD5DD14C, 0xD1DE9F39, 0x331555DD,
+0x8EDFF0BA, 0x9EF9D02D, 0x76D69A1C, 0x700619D9, 0xDE5A684C, 0xC17ED730, 0x175D216B, 0x005FFD20,
+0x32999438, 0x84E28117, 0x02CEFEEF, 0x5FD31BCE, 0xEDE4D6E2, 0xEE979A2D, 0x1E8B8A22, 0x913D778C,
+0x9D066405, 0x4086F49B, 0xCA82DCED, 0xFADD5B1C, 0xCD6773F0, 0x990A217A, 0x8BE9AFF1, 0x0969B8EF,
+0xB80CA2F5, 0x6C2E8778, 0x180C9350, 0x77F32C43, 0xB547ADF0, 0x42094F70, 0x36C0644E, 0x727AFA77,
+0xF94582FC, 0x1BDC2CCA, 0xCA32350E, 0xFD716333, 0x89ECEC0B, 0x70A3DA5F, 0x4F5F41A5, 0x933C222E,
+0x76952C9D, 0x02B35947, 0x85A29DD6, 0xC6527B75, 0x206527BF, 0x8C6BC2D7, 0xF10981DC, 0xC7CF6041,
+0x79F193B0, 0xBC74C931, 0x0D3AF533, 0x047084D9, 0x3B8D9990, 0xB0F00B6E, 0x373E75A3, 0x37C2BF9B,
+0xD4AA0B50, 0x964D508F, 0x5BC8DDDC, 0x668B902E, 0x20C66E5E, 0x453DA8B3, 0x55C1638A, 0x42D7DD2E,
+0x9321223C, 0x2FFCFCF0, 0x28EC0126, 0x3EAD4878, 0xC774A68E, 0xB07AF6B6, 0xACB179B8, 0x91E9006C,
+0x485DF74E, 0x5B55709C, 0x41FD02F2, 0x5F778D96, 0xB0FA8BAB, 0x56A91D17, 0x2A28A5C1, 0xAA292DD4,
+0xC89892E1, 0xAD9FB329, 0x0E4D06B9, 0xA5407A7D, 0x506D5654, 0x906F9D8E, 0x3F87BC25, 0xC831E092,
+0x5B3B4D9D, 0x6E8341A9, 0xD7379544, 0xA1AA25D4, 0xDC3A4141, 0x50B62D58, 0x4FABD74D, 0x2F337DB0,
+0xD7B6053D, 0x77629884, 0x7882970F, 0x95BD31B3, 0xE3C601CB, 0x1BF0A925, 0xA322C394, 0x569A04B4,
+0xBF0E517D, 0x4E0B5D3C, 0xDDCD4A47, 0x596E7449, 0x7C9B7A0B, 0x85D13864, 0x13598BEF, 0x0698B397,
+0xEF9F86F5, 0xC5AF4880, 0x24FDA8C2, 0x2A33B398, 0xE44B92D7, 0xD07EB429, 0x60692DA5, 0xFA8A220F,
+0xFD0123AE, 0x8C290FCE, 0x607C66C9, 0xFB220C16, 0x4643DA49, 0x8E0B9E15, 0x4F22EFE6, 0x5F6A3653,
+0x49AC88F9, 0x22D2B657, 0x91006331, 0x41E8C70B, 0x4EFA5410, 0x68A1E192, 0xC17E7B41, 0xE7C4D279,
+0xB5A62DB5, 0x5ED37888, 0x290A58FB, 0x8A01EC7E, 0x3AE77500, 0x2A871982, 0x2BB93033, 0x0EEB8334,
+0xBD07D574, 0xB93A811F, 0x5105AA15, 0xDD569817, 0x6EA806C6, 0x71C78BF8, 0xE0FB712E, 0x1C7A3CDC,
+0x6E18F9E1, 0xFFEF7903, 0x73B5B39C, 0xAD194939, 0xA41427A7, 0x04DA35C1, 0xEA6C205F, 0xF3517C66,
+0xBF8F0A3A, 0xCCA3CF36, 0xA976CD6A, 0xC7B307C8, 0x5EB7A1B6, 0x2B8A0870, 0x392DCFEF, 0x8EF13457,
+0x2F2D5944, 0x41976A8E, 0x2FD00A69, 0x5BC79D49, 0x903D5868, 0x0263583D, 0x5A494092, 0x084DAD30,
+0x8CDBD481, 0x634EF2E7, 0xC87627E5, 0x16351187, 0x540F709A, 0x6CAA9D50, 0x12D41CD5, 0xAB1CC08B,
+0xE0F1CC3F, 0x18260CB5, 0x6425485B, 0xA5DD636B, 0xB4672F86, 0x0DEB4FA5, 0x96D9B275, 0x5E976E45,
+0x379C289C, 0xCFD27539, 0x141BB4CF, 0xB95AE8CD, 0x2805BA85, 0x989E0754, 0xCAF6AF8C, 0xCD1DC003,
+0xB6148562, 0xFDCD4058, 0x71E6606C, 0x61F2222E, 0x9C7F6635, 0x78E6CBB3, 0xF31AB88F, 0x8F93A9C0,
+0xFCE6D3D5, 0x9A753DA8, 0xB22898D8, 0x968D1F51, 0x6B0433D4, 0xA667FCF4, 0x5AD20DFD, 0xAD2BFC60,
+0x6BAA8EDF, 0x1E1EF2D3, 0xA7EB263D, 0xF566C4A8, 0xF6F71716, 0xFCCF3EAC, 0xC86CA2CF, 0xBF7F2A4A,
+0x2ACE9EBE, 0x930844EC, 0x5F6A7E52, 0x550990FC, 0xBEC8E734, 0xC7CDEFB7, 0x9FF4647F, 0x27DAA445,
+0x16F89CE6, 0x2D9CA7B9, 0xC6991448, 0x87619615, 0xF731E45D, 0xA99D3EDD, 0x45E7A61B, 0x50FEB260,
+0xAAC3F0EB, 0x0F1D4345, 0x10E0CAE1, 0x3AF53AB6, 0xC4A3C0C4, 0x24BBC396, 0x3E0FA1D4, 0xA60ED194,
+0x31A33A13, 0x5D230DD5, 0xDB3E7C08, 0xA21E1972, 0xFD995F55, 0x8DF7135E, 0x7AF8126E, 0x72C114F7,
+0xE5A78239, 0x7351528C, 0x7DCE729A, 0xD6B25AC7, 0x6192C479, 0x0672A500, 0x271DC664, 0x15C8EC21,
+0x663ABA19, 0x7868525E, 0xAF6FBA52, 0x43018E87, 0x26973FD9, 0x7463A071, 0xCE4869D0, 0x8DB3AED0,
+0xCEE3289C, 0x8040D73E, 0x547501A3, 0x81756549, 0x7A4046AF, 0x396C5F94, 0x8E4178CE, 0x9EFA03A4,
+0xFD02829C, 0x3470C029, 0x57AAB449, 0x4FB9CA78, 0xF4797379, 0xE54253F7, 0xBFB8A570, 0x5A2C1CBE,
+0x873D1A83, 0xBED2E192, 0xC6F7C6CB, 0x17AA4656, 0x94D98A4A, 0xD6D5EE1A, 0x20E85BEF, 0x9885411E,
+0xCE0DE2AD, 0xCD33E9F8, 0xD4128C4D, 0x4AC1987D, 0x7FD236EC, 0x2EA3FCF6, 0xC676500B, 0xB68A3C1D,
+0xE8911A43, 0x98D1755D, 0x5C3E1280, 0xB4FE0674, 0xC33F803E, 0xEC69A298, 0xC7D7AF87, 0xB605D3A1,
+0x8C3469A1, 0x40DA8409, 0xF3AD218F, 0x780E35FC, 0xD4599E4F, 0xCE93487C, 0x22E6D4E0, 0x0B86253E,
+0x7553BD63, 0xC16E0610, 0x3591B10B, 0x6BE1366D, 0x6054FE80, 0x78EC0326, 0x3604344F, 0xC7AE078F,
+0x87DAE2BF, 0x5585B97C, 0x72244C58, 0x83A03D66, 0xCB219C07, 0x0C9FB7F8, 0x79DDE772, 0x713283CF,
+0xEB2E10F2, 0x9F2BEF2C, 0x161A3542, 0x1479D2AB, 0xC6111964, 0x0494F17D, 0x12858901, 0xAAD0E306,
+0xA2FC87DA, 0x3D19D1ED, 0x1385CF4B, 0x9FF8697B, 0xE9528D93, 0xA1691C10, 0xFF8AAB54, 0x5C4B0D31,
+0x7292CA6C, 0x847DB678, 0x536FD0D6, 0x20C5772F, 0x5DDE2A8C, 0x9E014A8F, 0x56336AA1, 0x70F2CA80,
+0xF698C2AD, 0x32AF8FEC, 0xB03C31D9, 0xCA60AF0C, 0xB681F3F4, 0x8DB27BF4, 0x0DB4963E, 0x5695C3FD,
+0x273D1A55, 0xAD2BD733, 0x7D6E425F, 0xEB9D4F8A, 0x17E547E3, 0x62E8738F, 0x32C6A0F0, 0x284BC286,
+0xF39E0584, 0xA0B63718, 0xD1A503E3, 0xE9F210D0, 0x59B4436C, 0xF72C1B3F, 0x4375C025, 0x73BAF15A,
+0xB97C23D8, 0xE9B26F7C, 0xBD1E160A, 0x02CF7F3D, 0xBA684918, 0xFE8286AE, 0x07A6C172, 0xDF995B3A,
+0xA7C891D7, 0x23F1650F, 0x13EE9B5C, 0x0E6121FC, 0x4CA77087, 0xE2B7F7B5, 0x7317284C, 0xC6995650,
+0x49861BB8, 0xDF8C30B4, 0x16D26EC6, 0x01CB4F82, 0x8380870B, 0x9AB62A5B, 0x2AA688F8, 0x06B168E5,
+0x4B32C5C8, 0xFEFC096A, 0x2BD7DBF4, 0xE489D3B7, 0x9A3C3496, 0x50B607ED, 0x80F5754B, 0x6476FD59,
+0xF2D7959D, 0xA7721582, 0x41758D05, 0x2E684B55, 0x62DA3CD2, 0x18673E89, 0x9180B046, 0xBFAC2AE8,
+0xB04C365B, 0x6B4F8E4A, 0xC5B974CE, 0x2171B005, 0xD54E3D6C, 0xB72A6A47, 0x5E8FF1E1, 0x36BDF390,
+0x86E61503, 0x8D1F1D96, 0x2D142E7B, 0x2154AC4E, 0xFF834027, 0x74C955D0, 0xB3ADC785, 0x58105D27,
+0xDF3761A1, 0x87704482, 0x9714936E, 0x4A1EDCC2, 0x85358DAF, 0xCF635622, 0x8D643DAC, 0x00F3B953,
+0xA875C869, 0x2AF69678, 0x570B9D26, 0xF649840B, 0x58A4BF94, 0x4CB9555C, 0x5063735B, 0x6EEDB2B2,
+0x87CBCF63, 0xB4B0AFC6, 0x8482430B, 0x7C5D082E, 0xD5A36865, 0x601E6808, 0x598D9447, 0xACE319DE,
+0xCB2C6570, 0x270D009D, 0x6EF0FA81, 0xD2BBE8BD, 0x9D21CFC0, 0xCA451652, 0x8FC5612E, 0xFFE85D09,
+0x8E054EE2, 0x05620065, 0xE64ED9DC, 0xB968A6B1, 0x7CCA67D3, 0x33509CD9, 0xB12D3A88, 0x0AE68661,
+0x1A13E4BC, 0xEC79280F, 0x625F80D6, 0xEE818B04, 0xC63BF731, 0xB94469E1, 0xF7EB5A3D, 0xE42DE76C,
+0x1F8A0E89, 0x490E3217, 0xFB18A69A, 0x99EE9E88, 0x7448AB7C, 0x2F817077, 0xEC25322E, 0x689A4F52,
+0xF850C67F, 0x67A5564E, 0xC41B57A5, 0x04F42C3E, 0x54606181, 0xF48AE0ED, 0x0E28AE96, 0xB46681E1,
+0x89261B96, 0x04327263, 0x43A602D2, 0x76EA199A, 0x1A3773BC, 0x01D6585F, 0xB0CB9C80, 0xD6202674,
+0xEC38170F, 0x9651ACA0, 0x7D9AE073, 0x5F615B24, 0xFB3E814A, 0x6E64FB9A, 0x47785877, 0x9B349787,
+0xD19F8F0A, 0xCB7DC201, 0x3178E3D1, 0x30A0F400, 0xE998D121, 0x82689024, 0xEB5CC8B2, 0x16738705,
+0x625B1FE2, 0x8E129B60, 0x8A2B5F24, 0x2B1AD040, 0xD4900622, 0x5EF1C5D4, 0xCE976B86, 0x27C47660,
+0x5AB75F88, 0x1C7A072D, 0x2288BDAA, 0xFAE3E5C6, 0xEF577322, 0xF8DF9832, 0x0764E993, 0xB7016099,
+0xCDDB6A8C, 0xD67AB2C3, 0xFEDDFEC4, 0xACD3CF54, 0x629CF7C5, 0xA195EA65, 0x4C78C32A, 0x8A788F90,
+0xC5566F71, 0x6624A95E, 0xBBE6C33A, 0xF3C6E442, 0x5880F8E3, 0x3976902E, 0x16EF850C, 0x95B1E502,
+0x470886CA, 0xC40CC7DC, 0x9CABCE72, 0xCBD288B4, 0xD3987B8C, 0xE64E4F47, 0x71B5E055, 0x84DC8B9F,
+0x007F6735, 0xBD107942, 0x6C8D8616, 0x89F33F78, 0xD87E22F6, 0xFA778990, 0xCCD4012A, 0x849DB989,
+0xB1F4B0C4, 0x8FB2357C, 0xA302CFC7, 0x697105AF, 0x2569E051, 0x9737EC32, 0xCCE1479A, 0xF8E85FDE,
+0x646AE3A3, 0x19D7CD9F, 0xCB7362A2, 0xB25F3AD7, 0xEFE95953, 0x55F6AC48, 0xCA083920, 0x2AF61036,
+0x1635C607, 0x8B63E834, 0x4CB5309B, 0xBAA79476, 0xEDD95EE2, 0xFC5213C2, 0x9A393CBB, 0x718187D7,
+0x5D7083C1, 0x45A8A2FD, 0x04BB53AD, 0x87F3F66B, 0xF91EFC80, 0x77B76BBD, 0x97C7A486, 0x6C51AA21,
+0x7AB5434C, 0x552B3BCA, 0x15D9D3D4, 0xC846B9D5, 0x0AFCB893, 0xF3C14A26, 0x360702D4, 0x6757F42D,
+0x70144C81, 0x15C4554D, 0x0556D5DE, 0xDCE4DF3E, 0x24B526F2, 0x9F9E3764, 0xBF35B73B, 0x66FD7984,
+0xC3938481, 0x5644A9A1, 0x5E5E25CF, 0x73DE2932, 0xA9324941, 0x30A42302, 0x15E4C841, 0x6216EADD,
+0x7468D04D, 0xA22F3BD2, 0xC53BA00A, 0x4C65F687, 0x2D91226C, 0x4293A82C, 0xAA035DC7, 0x88108FF0,
+0x3C2E2DDE, 0x71338591, 0x6C26D1ED, 0xD4F6156B, 0x3FEECA5B, 0x78AA4869, 0x55DA33F2, 0x96AA13A1,
+0x1F84A1C9, 0x209C7909, 0x48B2CAC5, 0x83CB83B3, 0xE6501552, 0xD006C674, 0x847B90F4, 0x5C374D1C,
+0xB2A8CE5A, 0x6EC319DA, 0xEFABA55C, 0xC5916A47, 0xF24A71EE, 0xEB07E5BC, 0x2A828896, 0xE72A76F5,
+0x2242ECDC, 0x10D0CAAC, 0xA3EDBBD5, 0xCAD38693, 0x757B1FAC, 0x33814B75, 0x52ACD923, 0x2788A991,
+0x72D4AF02, 0xAEAAAFB3, 0x69032E52, 0x0904A213, 0x236156FE, 0xE9C8AA01, 0xFBAF701F, 0xD7158BE5,
+0x621AC983, 0x1C9EEAF3, 0x167506CA, 0xC06E3FD2, 0x9365FF52, 0x9429A502, 0x6025A001, 0xF1D46020,
+0x1E5EE351, 0x8414CEB4, 0xD78F777D, 0xE52B0EA3, 0x9443E6CC, 0x1430573E, 0x7BC40DDA, 0x2980D668,
+0x3B76A56C, 0xB89DC728, 0xAAEA8783, 0x8841FC55, 0xDF680B89, 0x47E21CCC, 0x229E1FAB, 0x0DF06E1D,
+0xDAD4CB28, 0x03EBCDFC, 0x92250ED8, 0xAFBF4E1E, 0x08BD2DF9, 0x63030955, 0xEA489531, 0xDDA2C449,
+0x59B6522F, 0x0E0FA334, 0xA6F27263, 0xE851519C, 0x7CC19A5B, 0x994FB287, 0x37A4F6EC, 0xCF56E6A2,
+0x68898673, 0x900253C5, 0x7C4F6940, 0x4E7AA697, 0x3F293974, 0x57A38D78, 0x76CD4626, 0x1B553D17,
+0x10E69A10, 0x58EE4EAD, 0xE00AA419, 0x2840BA29, 0xCE156740, 0xC293D084, 0x7876A2A6, 0x61A01D59,
+0x0CB311E8, 0xF93CCD9D, 0x32AC59AD, 0xEC5A1A09, 0xD9081925, 0x07C76AA3, 0xACAA7F80, 0x3C83E1AC,
+0xE3BC5F86, 0xE27F80A9, 0x8306D180, 0xE6044545, 0x9DC4F115, 0x91228578, 0xB4648585, 0xFFDCB8B2,
+0xED3172B8, 0x01B4733B, 0xA52B1421, 0x5E477E6D, 0xFA69589C, 0xFE1A9F47, 0x1321DEDD, 0xB8B731FA,
+0x4939BB92, 0xD1D42896, 0x5B7EFBB8, 0x53BEC02F, 0x3F77E1C7, 0x4CDBD66E, 0xFA039164, 0x98B74C84,
+0x32868233, 0xB62F5F17, 0x40B205D2, 0xC213DD19, 0x0F4DB0A3, 0x42D69505, 0x4D7E5122, 0x5C9446DA,
+0x0699E007, 0x9CF8278B, 0xA9DE4CB8, 0x1ED8DD34, 0xA7D18FD3, 0xE11A1539, 0x1AF1B6F8, 0xA415A258,
+0x469DD1EE, 0x722022F8, 0x7696BA9A, 0xCFD690F0, 0xA28F7C22, 0x5B7E88EC, 0x0D2D122F, 0xB59E0C78,
+0xE54AF6AC, 0xC6A54C93, 0xAA42123C, 0x66A0794C, 0xAF1C888A, 0x59AF9D90, 0x451257BB, 0xC9E58B8C,
+0x318AF8A2, 0x22A43D2A, 0xA97B65DC, 0xB7A10BD2, 0x9E9502A4, 0x79E22C8C, 0x91DF64D0, 0x61AC034C,
+0x93DF97C1, 0x5B82E2EB, 0x7E322BD7, 0x95E21007, 0x432649CD, 0x873E9045, 0x2E2467F9, 0x3C4A2480,
+0x2F7921B4, 0x7EE4D067, 0xF6557A8C, 0xD033F53A, 0xC7B7228D, 0x7E81635A, 0x0BC585F3, 0xB26E6974,
+0x9D9DEB7B, 0x9A199C1E, 0x21636674, 0xDD21815E, 0xE346BE21, 0x8D8C516A, 0x11047F91, 0x78175672,
+0x63095502, 0x4C251CDC, 0xB535BD78, 0x4D1C0DCB, 0x6E8DD083, 0xCE5B20D2, 0xD00DA791, 0x7F568FEA,
+0x7043EA39, 0x32E5A155, 0xB7A93DD8, 0xEDC49C91, 0x8DF42116, 0x13759E07, 0x5046BE24, 0x4B8D7341,
+0x36F11649, 0x2F6E24CB, 0xA704BC49, 0xA9EC4A2B, 0x913924E3, 0xA576887A, 0x5CDA5093, 0x30232D87,
+0x8F2E47A9, 0xAE7131E6, 0x5F25B07C, 0x85BE9A22, 0x2D908DFB, 0xAEF621D6, 0x34C76CC9, 0xECC177C6,
+0x50A2DADE, 0x61330559, 0xE2E44FCC, 0x15D1CA16, 0x63BC8111, 0x6D4E8940, 0x3ADF0BDD, 0xA19CF596,
+0xF80D037E, 0x10F769E4, 0xC065E9C5, 0x34ECA227, 0x2F3AC1DA, 0xD7821BEB, 0x8BB5AA8D, 0xE13BAF4E,
+0xBA1F9733, 0x0FA18B2F, 0x3CA08253, 0xCF911863, 0x17A042F0, 0x55E6B2FC, 0x39BC3D8F, 0x3406AE8A,
+0x87603F94, 0x35A129F8, 0x200ADE17, 0x86CF1BEA, 0x0F06CAD3, 0x80AD990A, 0x6CF2DE9B, 0x2CF5C2E4,
+0x4733FFC9, 0xAFF6CD9C, 0x96332DAF, 0x9BF63081, 0xB852ECC2, 0x72121986, 0x6000CC48, 0x3CDD349F,
+0xB53732DE, 0xAEDB2ABA, 0x113751D9, 0x845D040C, 0x7AB1BA89, 0x5F7E72B5, 0x56152412, 0x74EF12C3,
+0x3D100BE3, 0x9E705152, 0x39D7C4C8, 0xDC22E1C6, 0xE6C655FF, 0x436D3494, 0x4A99AEB6, 0x20C1681C,
+0x6408A88F, 0x6282F4CB, 0x4D559532, 0xFC30EF8C, 0xD46E24CC, 0xD74D328E, 0x9703027A, 0x3CCB4C44,
+0x11AED7BE, 0x1118EBD9, 0x9B37F05C, 0x3F63C412, 0x4DAA0D23, 0x0045A977, 0xEBB14F0C, 0x89E48939,
+0xF2A30A78, 0x126EEA41, 0x4E706823, 0x2436489A, 0x137979B7, 0xBF82B33B, 0x78AA58C7, 0xAA5768A3,
+0x18E461C5, 0x617970AA, 0x3FBEA648, 0x9230B28A, 0x2FD71BBB, 0xB114CB9C, 0x0D4B25BC, 0xC4D55705,
+0x2BA0DAF8, 0xA40A7EAD, 0x8992FEF4, 0x5A64A5C0, 0xE3267F8C, 0xA3992715, 0x36BCF456, 0xE8493D33,
+0x8BFDE185, 0xAEAA2ECD, 0x6AD084F6, 0xB2B29AD3, 0x7AE82E70, 0xC801A416, 0x9C87D821, 0x2515090C,
+0xEA11BE8D, 0x9CE7F137, 0x2B057695, 0xBF030F66, 0xC02942D0, 0x3D0A2C67, 0x4E1BC932, 0x12A3CE64,
+0x17A6AD63, 0xC72198CA, 0x8A4722D5, 0x82F86B0A, 0x6F3936C8, 0xCA20E52E, 0x087026E4, 0x2213F594,
+0xE813B1DE, 0xF7FBEC42, 0x3B9B6BA4, 0x7D5BB4E4, 0x6FC60CE1, 0xC6A6370D, 0x64871763, 0x5B913480,
+0xE914FCA0, 0x65973093, 0x39B8587A, 0x6CD264F0, 0xC9BCBFB0, 0x54E3A650, 0xE015C8F6, 0x1B8464F3,
+0x9E3FCCE8, 0x82ED3000, 0xBF3A7979, 0x37C44C39, 0x765C419B, 0xD7CA91DB, 0x06BAF28E, 0xD62E24C3,
+0x6FB557A2, 0x5958184D, 0xDC9DA77B, 0xCCE78F12, 0x0D22F166, 0x5766E5C9, 0x16810BC3, 0xC8250D08,
+0xCEC9F6B3, 0xA728977B, 0x04555EAE, 0x57FEC645, 0x571DBABC, 0xC20D4668, 0x60A55FAD, 0x4DAED48B,
+0x955B2A6C, 0x3E9A21DD, 0x0055C481, 0xC70477B2, 0xA852CC0B, 0x4393AA5A, 0xC82E889E, 0x64F61568,
+0x73F01091, 0x6BD440EB, 0xC0189B38, 0xE8CE52A4, 0xE86180DC, 0x3AC1B136, 0x040AD62C, 0x734F046C,
+0x6C2C0411, 0x1A2C91FE, 0x66A1403E, 0x7CA182FD, 0xAC491D4E, 0xF415F620, 0x46BE09AA, 0x7F9145C7,
+0x2F6F595F, 0xF9021A38, 0xB201E90B, 0x66C84E55, 0x69C8AB5B, 0xE193CFF0, 0x826AB7AA, 0x8C230F53,
+0xCDDEC601, 0xA83B0FC1, 0x23857917, 0xB3B8F348, 0xB60FE46A, 0x38A96E14, 0x3278A0CC, 0xB5605DEA,
+0x98751B5E, 0x30A067CB, 0x83407EB9, 0xD3DF8520, 0x1C7C13C9, 0xC92FFF4E, 0x41BC9185, 0xCDCB6192,
+0x60C33952, 0xB409BFD9, 0x636EA2FD, 0x2E4DB9C9, 0x845510B1, 0xC8268990, 0xCFBF2FA3, 0x7994E13D,
+0x73E18381, 0xDF77457F, 0x9C030C66, 0xC215261E, 0xF4266929, 0xE6E30298, 0xB0B42683, 0x20AB91B9,
+0x5E56FBCE, 0x6339604A, 0xBFC65699, 0xF0F70999, 0x0BD3B8C9, 0xA0483342, 0x682B83D7, 0x8975B716,
+0x24F826F3, 0x87287857, 0xAD31793E, 0x03BEF9C0, 0xF14B7231, 0xEB5768AD, 0x339E7702, 0x010A19FA,
+0xD922B854, 0x42AF88FC, 0x39AB13F6, 0x3930D6B3, 0x953813D9, 0x38C0FB47, 0x721749D9, 0xB3F51393,
+0xDF1C0DFF, 0x2D0B6FF7, 0x75E87BCB, 0x23B736FB, 0x9B3AE126, 0x8E4F558B, 0x82C61EE2, 0x3D725345,
+0xAEF3A19D, 0x21051EBC, 0xB8396FD1, 0x39A8C7F6, 0xCDD3A764, 0x53BED9BC, 0x0FE5E9D8, 0x01C2A55D,
+0x3C794F2F, 0xFE0E0A93, 0x1B912D7D, 0x5FF8C4E0, 0xA19C7016, 0x52F38F9F, 0x3F074DE4, 0x91F85A21,
+0x8F9B5627, 0xFFC7D15E, 0xE71334E6, 0x4A002B88, 0x983F637F, 0x5CF60055, 0x21079700, 0xA2C62D18,
+0xC11F24B3, 0x049EACE5, 0x58370817, 0x4233B886, 0xA183BACD, 0xFC0A36F2, 0x99C1C193, 0x9807F863,
+0x20189D01, 0xFDE772A0, 0xC3F37859, 0x8387A383, 0xB6692045, 0x7C15617B, 0xB76BD2AD, 0x76EA153F,
+0x5CBEF329, 0x0D380533, 0x03ACC48C, 0xC0795EC4, 0xD006A597, 0xDBFA331A, 0xFEDFE4B0, 0x93C9041A,
+0xC97D0366, 0x0EE489F5, 0x16225A6A, 0xD4DD3783, 0xFFC1D521, 0xE4632220, 0x18BFE42C, 0x157EBEA3,
+0xE21D9CE3, 0x721C3261, 0x77B74ACA, 0x17EFCCC5, 0xA6191598, 0x1BF8787E, 0x94E7D9CB, 0x3BC40783,
+0x65F0D63C, 0x0369F912, 0xD7F27CD5, 0xB28E12FF, 0xA8367B45, 0x151594DA, 0x117358C2, 0x6FF14575,
+0x198C5830, 0xAE3292AF, 0xFC4A3A8A, 0x173B17BD, 0x9348FF04, 0x18A16950, 0x4811230C, 0x18CF651D,
+0x3025617A, 0x5D678961, 0x636AA8B7, 0x79CDF7AA, 0xC0A68D62, 0x465CF80F, 0xD1620B16, 0x1B834BC7,
+0x7634BB00, 0xA2C89842, 0xF45D599A, 0x23315542, 0xF2191656, 0xF4C42C78, 0x3F76047E, 0x8D6F721E,
+0xD40AC2C6, 0xED1BADE1, 0xADC3A172, 0xF8EB58EB, 0x6E69F690, 0x2741B6F9, 0xED82F218, 0x67FADBD8,
+0xEBD9B437, 0xCD69A692, 0xCFD93D44, 0x6CEDDA3F, 0x6D64929B, 0x864E2C5A, 0x26269E2D, 0xBB0136AA,
+0x6EF02515, 0x072CFC24, 0x46D20959, 0x4760E531, 0x3A64B0BE, 0x4C419FB0, 0x2CCB4268, 0x08112716,
+0x7DAB3EA0, 0x203DDCA2, 0xDDB50106, 0x88ED1ECD, 0x640DEACE, 0x49171048, 0x37B709FA, 0x26F23821,
+0xCA2BEB73, 0x5889BB7C, 0x67056BC9, 0x0D287F1A, 0x7CBD7422, 0x4EC7C8EC, 0xA0A87372, 0x508DD39C,
+0xCA5A5E41, 0xF8E118B8, 0x962A0753, 0xD0E09687, 0x08D7D202, 0x5EB9847F, 0x03104A2F, 0xF48722DD,
+0xF4A22DA3, 0x2DC19C4B, 0x947D884A, 0x4D2179E3, 0x49D8195B, 0xA44C26C5, 0xA91CBE60, 0x346D7F14,
+0x76CDB1C4, 0x2B0B988A, 0x2161206D, 0xD8ADE31F, 0x282A8CD2, 0x38F6267B, 0x6300167B, 0xDDE09F5B,
+0x0F7B729D, 0xC70EF13F, 0x0AD12F71, 0xFA37F827, 0x191CF7A2, 0xEC186913, 0x255BAFBC, 0x7C8D611B,
+0x53FF2451, 0xEC71F141, 0x0319F2F1, 0xD428938C, 0x91C233EC, 0xB7ABDA2A, 0x619EB80C, 0x58A8405F,
+0x58BF5AB9, 0x28CC0E0F, 0xEFA19E3D, 0xB624DA39, 0xD3E85B3E, 0x70112E7C, 0x460EE40C, 0x40CF0043,
+0xF5B345ED, 0xD162A5EB, 0x6225990A, 0xA2CDD7D0, 0xA78774F9, 0x49FB0910, 0x9922AC9C, 0xBB5EE9BE,
+0x1430DDB9, 0x6031071C, 0xA531E7AD, 0x655245B0, 0x968DE517, 0x06347A6E, 0x93189A83, 0xFBC43E65,
+0x54835E5E, 0xE9544BE9, 0xC7DB5980, 0x76F3F00D, 0xF9FB0469, 0x0EC819E7, 0xB7C257DC, 0xA9E06724,
+0x25EA1F8B, 0x0FBDA996, 0x4FA908FE, 0x8B7507C2, 0xBE317FA2, 0xB9BAE649, 0xB8371359, 0x854B5BB0,
+0xF287F42D, 0xB0396A3C, 0x1646E8F5, 0x858A70B9, 0xF3476A1C, 0x7139D617, 0xB9E86C91, 0xA176707E,
+0x72E9B6B2, 0xEACBE46E, 0xAEB40324, 0xA1F9CEEA, 0xFB2EE76B, 0x3653C09C, 0xF545C056, 0x17B3BC48,
+0xC87812D8, 0x0DDD5959, 0x2E63721F, 0xCD0F2CFA, 0x31494B4D, 0xDCAC69A3, 0xDF371FC4, 0x653B627A,
+0x0198CF14, 0xFCE0599F, 0x09BA712B, 0x9E9D65DD, 0xCAA393C9, 0xF35A5CD1, 0xC83567B4, 0xCDEFCD1D,
+0xE6E599BB, 0x059319A1, 0xEEA3589D, 0x5A978EF1, 0x741CB36A, 0x51DC8D3A, 0xF6BC1930, 0xF17C8A46,
+0x704173BA, 0xE181AA97, 0x24843098, 0x6F08E975, 0x6514C47F, 0xA79679A5, 0xA2976FB6, 0x4CF89CD6,
+0x7DAF10AB, 0x1CCBC1D5, 0x49514559, 0xC27AA3E6, 0x0FE79CC2, 0x8F32374C, 0x99DE4030, 0x41BF2B05,
+0xFC9A7EC9, 0x38FCD6BD, 0xE9454828, 0xDA851327, 0x4FA9E5FE, 0x4C51E6CF, 0xF2DDAF64, 0xA765D473,
+0xEE623989, 0xD44D07C6, 0xF0318F71, 0x2027F4CE, 0x2A8D142B, 0x1D4E8F05, 0xBFF85DA6, 0xE3A4630F,
+0xFA701328, 0x531FC998, 0xD022A046, 0x6C78C7E6, 0xAEE798DE, 0x07D7DBEF, 0x54BA3A1C, 0x24BC6504,
+0x5E00E1DF, 0x9715C246, 0x9AC3B517, 0x8F84A74B, 0xB20DD25D, 0x09F633B5, 0xAED25214, 0x18DBA44C,
+0x53FEBE48, 0x82137BFF, 0xC5F7A01E, 0xEBC77A60, 0x8A79DFDE, 0xAF1BA9D6, 0xD838727A, 0x3FD5F294,
+0x63ABC92B, 0x58345987, 0x88FA1751, 0x1B3596A3, 0xF8C6760F, 0xC3484A19, 0xEEAC4B10, 0x62AFADAA,
+0x860C0C24, 0x8947D571, 0x0BA7D964, 0x8BAD8602, 0x9E39FBB6, 0x6BA27AD8, 0xCD8323FE, 0xD2AB0220,
+0x27B7374C, 0x652AEC4F, 0x688FEF11, 0x377B9E22, 0x17B4CC96, 0x2D2DBD9F, 0xFB4CD8B7, 0xEAF94F76,
+0x6F30E80C, 0x6993B343, 0xD40B74CA, 0xFADD2F21, 0xC880FFA4, 0x75E86B31, 0xB810927F, 0xA8BE43BE,
+0x39F4BCF6, 0x394169AE, 0x3CB25935, 0x09BEA3E7, 0x5D4FAC10, 0x3E1CC5BD, 0x452AC8F4, 0x3512653B,
+0xA89A1C2A, 0xCFAAC15B, 0x96D89640, 0x3C507599, 0x80A3D728, 0x70BC8EF3, 0xF95800F4, 0x4B4D7E35,
+0x0B175923, 0x5616708E, 0x23BAF0CF, 0x2360182B, 0xDB8432B9, 0x7882A224, 0xAAF6B954, 0xACBF6AC9,
+0x14C8ED43, 0x5C28892B, 0xFFDC18A1, 0x16CFE6BE, 0xDE2D96F5, 0x6AB1E109, 0x85D4DC03, 0x25EF0369,
+0x5B8ABABF, 0xEC35DABD, 0xC46F17FB, 0xF378E987, 0xD2F2E3D6, 0xAEA27E3A, 0x9FB84972, 0xA2B3ECF2,
+0xD941FD47, 0x1F14D2A1, 0xF3CC85E9, 0xB50836DF, 0x47D56F4D, 0xD12C056A, 0x33D230F9, 0x7CE63F1E,
+0x83C73D56, 0xACCE2EFE, 0x34DEAA8B, 0xBB4EDCCE, 0x222ECA3C, 0x68B5ABE1, 0x14FAA0D3, 0x5FAAFEDB,
+0xA5606CED, 0xAC0E0781, 0xE01F3F0E, 0xDF09E62F, 0xADA44834, 0x3DF4EE4D, 0x8B247E61, 0x1CB9CA3C,
+0x0904BBCC, 0xCBF60B3A, 0x59535405, 0x97B57FAF, 0x0DD2DD95, 0x975084E6, 0x11C57B0C, 0xAE6D8477,
+0xAC160D95, 0x406162B3, 0x58C74E40, 0x32627B6D, 0xE745545C, 0x8E496B68, 0xA1076E68, 0x136AE044,
+0x418C2031, 0xF087EB55, 0x60157DCF, 0x96593A66, 0xF54B16DF, 0xE1BB1029, 0x3E8BB269, 0xFE5AFA8B,
+0x76B77C2E, 0x42DAADD4, 0x836E546D, 0x4A770628, 0x22CE1257, 0x25CB0FFD, 0x30BEFDEA, 0xF500A6B1,
+0x1C8FC5E6, 0xD897C3F1, 0x45DA1466, 0xF22C2653, 0x0047230E, 0xE9DD4635, 0x30CE6533, 0xB714C36F,
+0x148F31EE, 0xED3EF1B4, 0xACD71E92, 0x0ABD02FD, 0x2E4916AB, 0xDFEF9FBD, 0xF78E9A5B, 0xFD9BB4B6,
+0x36E34DDD, 0xE659BEC3, 0x0139FB47, 0xC917796A, 0x8CB18D9C, 0x77DB56A2, 0xA621D895, 0x06BD84BF,
+0x2397D2D6, 0x848062F4, 0xCB2208F0, 0xABCF37D0, 0x21EBC155, 0xB3266BFD, 0x7FD6CBCF, 0x7E1B5C23,
+0xB57238FD, 0x73EB8EE5, 0x2A9102F9, 0x3D192500, 0x286CB6F2, 0x3FEE5665, 0xDB4B5AF8, 0x21491A70,
+0xD8BA37A6, 0x27F61B50, 0x69713CCA, 0x034EB332, 0x69D28EDA, 0xD89570E4, 0x6A0A1B91, 0x97C3B30B,
+0xFEE8862B, 0xD6ACBE58, 0xFF2C0BDA, 0xFA774A2E, 0xC385CCCD, 0x42953D28, 0xBBEB074C, 0x69F6C84E,
+0x0381E40D, 0xD5FB82C9, 0xB7EB8FD6, 0x03CFCB65, 0x8D9D78EE, 0xD5D30429, 0x23D19F5C, 0x7A6CE7B2,
+0xD92CF3B1, 0x0DB87243, 0xDC99AC07, 0x0905A3B2, 0xBD81CB7C, 0x64C4F2D5, 0x357885D2, 0xB063391B,
+0xA22CF1C4, 0x0B7642EE, 0x2B742AF5, 0x39E19E13, 0xB487BD97, 0x269F25C1, 0x30546C8D, 0x1472D230,
+0x1F2BB569, 0xDBC35BC3, 0x411110D7, 0xB375C7B4, 0x47860097, 0x9A394F43, 0xF6346439, 0xEE4A1DC0,
+0x51A2D6FD, 0x82D5A3ED, 0x6D6363ED, 0x2A1FFB65, 0xD4BB6FE3, 0x41392E80, 0xE7DBF578, 0x728D87A9,
+0x269FD63C, 0x88C8F830, 0x988EE836, 0x6C719C9E, 0xF9BB4461, 0xDD685BE4, 0xBFBB36E8, 0x019073B6,
+0xB1110D16, 0x62090C0D, 0xBE7A9645, 0x33D0DF64, 0xD798259F, 0x391ACC42, 0xB4605ABF, 0x5752A2BC,
+0x93247660, 0x220D35A5, 0x56CA5913, 0xF994E22A, 0x96086B1E, 0x6EA3EBF2, 0x8E70DC32, 0xB55070AF,
+0x39D7A962, 0x5D79A8C9, 0x583E6B27, 0x8CB32F9E, 0xBBFC36B8, 0xC11AE946, 0x3D4C7520, 0xE17AA243,
+0xA0764E70, 0xF365EA97, 0xAD433B24, 0xBE162ABB, 0x368015E0, 0xCD8748D6, 0x77A7E3E1, 0xFD56D541,
+0xCD9C628C, 0xF5B6273A, 0xE62DE1CD, 0x0DD98CB5, 0x14ADBD7C, 0x5E5ABC2F, 0xE8A3D7F0, 0x8395C16B,
+0xCA893DE3, 0xA2D831CC, 0x9A40D863, 0xF2082BFC, 0x75714AA4, 0x3BC44CEC, 0x0EEA002A, 0x522FBF18,
+0x9CAD864E, 0x717E1943, 0x71E13EA4, 0xC53822C2, 0xC582A7C9, 0x84378669, 0x06699A87, 0x0B5F1E50,
+0x261A31D4, 0xCA157D0F, 0xC878334A, 0xF6A9898D, 0xDC90F434, 0xEB638290, 0x0A25867A, 0x43586A26,
+0x24DB3304, 0x63AB34AC, 0xEC349DED, 0x2A5A2594, 0x57AB01FE, 0xA00FCFF9, 0x5577A8E3, 0x142A125B,
+0x611E2E90, 0x47D55A88, 0xA2B95B28, 0x69A7BC17, 0x08E5B019, 0x08E3293C, 0x80AE154A, 0xFA8CC0A4,
+0x4ABC6C21, 0x2C4C71A2, 0xBDEA251A, 0x31957268, 0xCED25DE3, 0x3542B0FC, 0x5CD67112, 0x0EA1B466,
+0x76F73807, 0x422FC440, 0x17DB4C79, 0xE62C6193, 0x6C9B2F45, 0x7AF86CB3, 0x7E4E2374, 0x82931304,
+0x1D2C3ECD, 0xF2065B64, 0x8CB3A441, 0x34EE6117, 0x502F4C4A, 0xF9C62861, 0xE2D39AD0, 0xD5D7017F,
+0x69B31D1D, 0x561B4D56, 0xE4C157D4, 0x8D78C883, 0x7DF827FB, 0xBCF5D78A, 0x980183EF, 0x46F7A6E2,
+0x37C374FA, 0x47AE2919, 0x2E6A2173, 0xF401D5F1, 0xF8F94262, 0x7ABCF218, 0x2FFAEE0E, 0xCBF73EFB,
+0x0F951267, 0x0AD5C6B7, 0x90D90298, 0x03E20E58, 0x03F49C0D, 0x90012559, 0x87838C2C, 0x5D51E749,
+0x88A1376B, 0xFD3D4ACF, 0x8E0D862E, 0x25B4733A, 0x6021A407, 0xDD7A20EE, 0x662D55E5, 0x5E8DC25B,
+0xD3EB1EE3, 0xD99EB680, 0x3D75EEBD, 0x86A76FD1, 0xA8E7CAB2, 0x0650F4F5, 0xBA628F22, 0x40ACD3D1,
+0xC8ED8DA1, 0x9765D9C7, 0xCB622CFD, 0x408C3E34, 0x615F4F5D, 0x5CD52716, 0x14DE2CDE, 0x0CF5FF08,
+0xE8C09736, 0x5B52BE7D, 0xF267903A, 0xE27365E0, 0xD4B65A74, 0x6C0E017C, 0xFE7FAC1F, 0x4D24A776,
+0xCB9F14B0, 0xF77C820B, 0x79E4BD32, 0x1B463DB6, 0x136ADCD7, 0x9784085F, 0x6A5D2B2C, 0xBD5259A9,
+0x9E62BC50, 0x311F199B, 0xD609DF3A, 0x4AB4026C, 0xA2237EAD, 0x089B98FC, 0x4DCFFD49, 0xABD2489E,
+0x34479E15, 0x6DD38498, 0x708C552F, 0x2C468571, 0x28E30EAB, 0xD5DAC89E, 0xA8E82710, 0x49D22CE4,
+0xE00DE226, 0x6F9A014E, 0xB6EC8AE8, 0xA1246441, 0x8149E447, 0x8BFD56A9, 0x624634C0, 0x162D7299,
+0x9B237F24, 0x4F6DB9C0, 0x9F242DA3, 0xC3C261F2, 0x3E1AA6DB, 0xB3033008, 0x6F7056FF, 0x88C57A7F,
+0x22230816, 0x329491CB, 0xD87E8284, 0x22AF90F1, 0x9EFA2CE3, 0x09D299B9, 0x0566FC65, 0xDEFDB6A1,
+0x5BE6B84C, 0xAE063903, 0x17A7E101, 0x2E160B38, 0x73FE20BD, 0x65AB2D79, 0xA4C77F2B, 0xD575966B,
+0x6D0E265F, 0x13BCCF70, 0xC6E163F9, 0x66A6567F, 0x3008D09D, 0xA8A0316A, 0x3EDC23EF, 0xEADD993C,
+0x5B01C514, 0xDB6C5BB2, 0x5F827B89, 0x8A4F5ACC, 0xFB559C58, 0xB9262806, 0xC8FA584B, 0x54AEEC57,
+0x149B534F, 0x26C0E6A0, 0x03DD5E5F, 0xCCE95A04, 0x05211689, 0xB7A55BBC, 0x9F41346F, 0x52F408FB,
+0x58A5CE8B, 0xBA6ABD3D, 0x8319BE4F, 0x0BE8ECD9, 0x51066E5A, 0x51738953, 0x17D07503, 0x69B8CFF7,
+0x45CA5CA0, 0xD3430A55, 0x2A8DB959, 0x736AEE6F, 0x510360C6, 0x9BA4004D, 0x908DCC51, 0xC5A1A46A,
+0x57F7783A, 0xEA17D935, 0x163A1BF5, 0xF7CBFC21, 0xF20E0822, 0xFF621B79, 0xAE2B3E47, 0x24322B3E,
+0xACBEA59D, 0x9FE4D1CD, 0xB7F4B0BD, 0x580EA6EC, 0x938E46CB, 0x401A9F99, 0xC4C260E4, 0xFA16D1D6,
+0x3E982E0E, 0xE1663C76, 0xAE53386A, 0xD143CA4B, 0x116A5325, 0xBEB58599, 0xB6760BBF, 0x736EEA76,
+0x821A4900, 0xC6BF7176, 0x341395FC, 0xA7AECDD5, 0xE1625E90, 0x385C250F, 0x2B0CF0EF, 0x804A3FAE,
+0x30A6C63E, 0x03C5FB61, 0x7B068F5A, 0x4B04AC72, 0xC1FB9CB3, 0xB4FFD4C6, 0x70081407, 0x0A792732,
+0xC386E978, 0x28542FE8, 0xA9C6F781, 0xEFE1C95A, 0xD8745538, 0x6E13D99D, 0x2E54F430, 0x83BF72C6,
+0xFDAD1FC2, 0x6340FC96, 0x6874F6A0, 0xA31310D6, 0x41DA22B7, 0x9D994089, 0xE32C83FF, 0x6D9E48FE,
+0x3FFB1AA3, 0x942F3405, 0x4E675F9D, 0x66B86AD6, 0x6C588382, 0xFC09C38C, 0x5398980F, 0x7BC05BC5,
+0xB8CCDDF8, 0x0616CFBC, 0x31CAFA84, 0xF5252FC8, 0x1D602103, 0x81D4C092, 0x289D6C29, 0xCA003E93,
+0x2BD87528, 0xC73F3C98, 0x69E05875, 0x567C8C4E, 0xB7121C7D, 0x7AECD3A4, 0x46012349, 0x6429C860,
+0x6A772964, 0x1B8AC080, 0xA4432D49, 0xA33C75AA, 0x2E74B197, 0xAEB5CFF9, 0xB5B99CE3, 0x7FEF92C7,
+0xE99A3D72, 0x4A321E2F, 0x1BEBE06C, 0xF3E62E9A, 0xC64DAF74, 0x4736714E, 0x54B2716B, 0x53750D5D,
+0x4F0D87AB, 0xE7FD1241, 0xD6148414, 0x81FEB577, 0x52DDE917, 0x2126F5CC, 0xE108056A, 0x3A881227,
+0x4C4819A7, 0xDA1E0927, 0x7977553A, 0x0339078A, 0x1B312A0E, 0xFE54DB3A, 0xB0A014CB, 0xE5811210,
+0x1847EA4F, 0x1D38E462, 0x1825E28B, 0x65E62763, 0xB1FC2669, 0x26F1D969, 0x418D554A, 0x30718734,
+0x7C24A9FF, 0x321FCF99, 0x4E1066B5, 0x7B479836, 0x050A6175, 0x8EEF24B7, 0x50B265A8, 0xA820F7A6,
+0x04C47426, 0xF99391D6, 0x47284A56, 0xF295A13E, 0x0D809D93, 0x3C496E36, 0xF09C7808, 0xCCD2AA0B,
+0xCC3AF5E6, 0x991537E8, 0x6D81599E, 0x2ABAEADA, 0xEB96BECB, 0x19825DC1, 0x680D0559, 0xA8B78A15,
+0x5D1905FD, 0xFB5A81E6, 0x061711FA, 0x6AC2C433, 0x341EB4FE, 0xAAB17BAD, 0xEBBE75D8, 0xBCF58FAD,
+0x4161AA18, 0x7137A8D6, 0xF437C60E, 0xE1DC1B19, 0xAB33E2EF, 0xD80E1910, 0x4762AA79, 0x63C62AA2,
+0xDF63493C, 0x9415753F, 0x6444195B, 0x708346F6, 0x485F6FA4, 0x1B8A3D79, 0x6F2D22CD, 0xB75EC241,
+0xACF923F8, 0x5327A4FD, 0x41082EC2, 0xB23DBB63, 0x4C7B28DF, 0xA408FCEB, 0x17EC3F13, 0xD591A168,
+0x560AC48C, 0xF1A0F925, 0x04C9EF85, 0x95C3CAFA, 0xD2C37207, 0xE72DD086, 0x135C883C, 0x311AFCD0,
+0x0BE767CD, 0x46B2BFC8, 0xDD514BE0, 0x57EAE293, 0xCD7877F3, 0x9FF5A201, 0x703787A2, 0xA0B64AA1,
+0xACD01800, 0x545523BA, 0x583282B7, 0x4601AC8C, 0xDEF9CABE, 0x93E178B2, 0xA7632F7E, 0xC1855415,
+0x1FA5D587, 0x55B6F996, 0xE263D1FC, 0xFBA91955, 0xCC67DF58, 0xF36D692A, 0x5F5E1C4A, 0x22C32A5D,
+0xCD734279, 0xCA57C83B, 0x7A5E4CFD, 0xFD7DB7AF, 0x3407B07C, 0xF8CEF24A, 0x5893CE69, 0xF158B7CA,
+0x5E2057C8, 0x9A133BE1, 0xC3CD89E9, 0xD5A721A1, 0x78642C8B, 0xAED34C63, 0x0C1502C0, 0x5DAFDA02,
+0x0CE48CB1, 0x5B781DC3, 0x64A83732, 0x0027B327, 0x47203944, 0xEAE16A96, 0xD08E80CE, 0x12E3E68A,
+0xF62F2D7E, 0xA2504F2F, 0x3AFBA710, 0x90940C1C, 0x5D1BD6BB, 0x3F3DD39F, 0xEC0BCC49, 0x391423EF,
+0x094D3809, 0x30F9FE17, 0xAD7CC0E1, 0x70F1F810, 0x3E8F1401, 0x09B05937, 0x19CF83E0, 0x459CB8B2,
+0xF662725D, 0xD03D742A, 0xC712BD3A, 0x80C12165, 0xD4416981, 0x231A662D, 0xDEA97545, 0x22484B98,
+0xD4F1344A, 0x44F0606C, 0x2563E7A4, 0xBCF53773, 0xB7F59A99, 0x1F1686C7, 0x98AEDD8F, 0x9D4903F3,
+0xF1E758DC, 0xAE92879A, 0x45EEFADE, 0x78F530F9, 0x6A37DE49, 0x184E90DA, 0x106959D5, 0xF60DB4CB,
+0xB05A8441, 0x0AD99DA7, 0x9B4963F2, 0xF6F30E5C, 0x9B9B271D, 0xBB5CFC3B, 0x9B13249B, 0xDC80AE7B,
+0x358C9751, 0x93DE77A8, 0x627C9A72, 0x81BF53CF, 0xCB0D6A71, 0x46EA552C, 0xF5BA4B3D, 0x25C89632,
+0x08FF1756, 0x052C678D, 0x46F3E9E8, 0x4D05C2F0, 0x5A3CBA6F, 0x5B06BE2C, 0x8FFEB2B8, 0x1110A5D3,
+0x6409DD0E, 0x3860E7DF, 0x219A21C1, 0x86D850D7, 0x51B6CAF1, 0xC5160DAF, 0x01B724D8, 0x465A82F6,
+0x5A5CDA81, 0x82F0EA25, 0xE181FCD9, 0xC3E52AD5, 0x36FC2F36, 0x42BD2C2A, 0x7ABC12D5, 0x73D29288,
+0xF6087B91, 0x5553123D, 0xA30C749B, 0xD37707BE, 0x271B1E3A, 0xBAD7BE5E, 0x771BB9B6, 0xAAA7CB59,
+0x18130D20, 0xD8136A6A, 0x03AD95E0, 0x5100880E, 0x7D218893, 0xAFA45308, 0xEF5DD6E7, 0x91CF84FD,
+0xB114F698, 0x7A27BE25, 0x49DC8853, 0x3045A4DB, 0x5ABE31D2, 0x604BB529, 0xDC2D43E6, 0xC42112E5,
+0x3608A5F2, 0x9CE20022, 0xFA1DCB9D, 0x6217FC2C, 0xF7FF2C83, 0x16F66015, 0x75E4BF6B, 0x910F83AC,
+0x7FB92D69, 0x53C7EDFF, 0x589F7E06, 0xF54B4CA0, 0x78983E6D, 0xC5BF4ECA, 0x969884D5, 0x49C0928C,
+0x6930A7A0, 0xEEAB2109, 0x039AE3BC, 0x637388A2, 0xAB36FE8A, 0xEE57CC5B, 0xAC6D2372, 0xA337D3CA,
+0x1AB40DFB, 0x1B2A7C72, 0xE23E3E0B, 0x6CA05F98, 0xB1279672, 0x92E18C1C, 0x1889AD3D, 0xD6C80946,
+0x602ED292, 0x51E0C248, 0x964438F9, 0x6D772F39, 0xD822077B, 0xEB2796DA, 0x203A336E, 0xBCA9473C,
+0x2AEC09FC, 0x834EE11E, 0x6DF50336, 0x903C22A2, 0xE0643379, 0xC8F37952, 0x0EDD90FE, 0x65A525BF,
+0x2D33C163, 0x9DEA70B3, 0xB65CD6C2, 0x296951D9, 0x3D00E4B8, 0x41716423, 0x971A9390, 0x43968204,
+0x2652FA3F, 0x40BA06EB, 0xE004F669, 0xE0772D11, 0x619C3EBD, 0x40951299, 0x93509CB5, 0x7F3C5DA0,
+0xB101B219, 0xBD08D073, 0x4EA43B99, 0x1D1831EB, 0x601F1830, 0xECA7F784, 0x36997F01, 0xA55F641F,
+0x4C476562, 0xDD403E60, 0xCAD7B922, 0x5CE46E99, 0xFB83D954, 0xBEDC3811, 0xD98ABB0E, 0xE2C60D65,
+0x05446E7E, 0x3D4375CD, 0x0B2F834F, 0xB6B3F8C8, 0xFC40031C, 0xD22E12F4, 0x9FEAFDE9, 0xF4C61A97,
+0x574AE42F, 0x66569BA2, 0xD02EE9A2, 0xC7F43518, 0x54C08084, 0x0EC8CC5C, 0x79BB0FE5, 0xB8E18365,
+0x1B5E3111, 0xC9FE0260, 0x3091E191, 0xED4C72B1, 0x2BC66818, 0x282D0346, 0xB073FD0A, 0xFF0D267C,
+0xDE8D80E5, 0x73E892C7, 0x85763283, 0xDEFC9B3C, 0x09DC77D7, 0x3D061EE2, 0x1A2A06EA, 0xE0B0E23D,
+0x0055E7F6, 0xE89B22C7, 0x0ED65FC8, 0xE60EDA3F, 0xCED5D306, 0x912EC0B0, 0xABB4B8FA, 0x7897F2DE,
+0xCDA835A8, 0x9FF970EE, 0x4D918EAA, 0xA139CB94, 0x54184C70, 0x217F65F8, 0x6198523F, 0x5AFC3A86,
+0x528FCE02, 0x225C19E0, 0x16847294, 0x8243DD02, 0xF56CBFFC, 0xC6491913, 0x0E058E68, 0x4305003E,
+0xD4F147C7, 0x200E8023, 0x0B404289, 0x8A70051F, 0xEA0C2146, 0xF9E003FA, 0x8FBF68AD, 0x70CF9D73,
+0xB128224A, 0x11E85854, 0x9130316E, 0x1A4B3318, 0xA854F623, 0x19725E37, 0x0C5C631C, 0x45D3EB8C,
+0x5C925E34, 0x519F9674, 0xBBC9E1C5, 0x5AF24CF0, 0x42B6ABCB, 0xDAF3ADE3, 0xFAC8E4D9, 0x73A099F5,
+0x41562B2B, 0x18E2BFF7, 0xED07CAC9, 0x0C46ED9B, 0xBE5C1FEC, 0xC687DD68, 0x08E49F25, 0x8C634C3F,
+0x6E77B0B1, 0xFEFB4E69, 0xD3573C44, 0x8F54EC37, 0xEF488229, 0x9FF94483, 0x56E37D25, 0xB184465F,
+0x112124B1, 0x8782FA83, 0x55928D16, 0xA22F2E66, 0x1A420A5B, 0x786937AD, 0xFAF51C74, 0x9B4A8C67,
+0x78E8078B, 0xAB11EACB, 0x373C426A, 0x16DD1852, 0x90DE57F5, 0xDC3F9228, 0xE88E4B97, 0xFB321FE9,
+0xACAA00BF, 0x5C12D40C, 0x2029CD81, 0x6D22A4A6, 0x6360FC2C, 0x1F3AA71B, 0x1AACAB17, 0xA446BF84,
+0x56504653, 0xA05D4F52, 0x8F3B6129, 0xD0DB2F6C, 0xC152F5D4, 0x2723A3E1, 0xF19EEC05, 0x736179DF,
+0xA59070F2, 0x731A794A, 0xE2E542DA, 0x686067A4, 0x1A452D93, 0x76A01F6D, 0x41960175, 0xB2EDC5AC,
+0x9D024FAD, 0x6C24B22A, 0xFE1DD9FE, 0xF1237D38, 0x37DE0968, 0xC13AC9BE, 0x63511054, 0xBE03E3DE,
+0xF710FACC, 0x9699A0E1, 0x15332FAF, 0x54B49E8C, 0x5A5BDC7C, 0x9A5C4F83, 0x278D4D48, 0xCD3B4C03,
+0x9CCFE0B7, 0x6F9A4C82, 0xBB6774CC, 0x48AFFE2F, 0x63C24CAF, 0x45350F3A, 0x7E4249AE, 0xF63E559E,
+0xF58C2634, 0xFCFCED60, 0x31D12D2E, 0x82E356FB, 0xADDFB0C4, 0x4303FF95, 0xD6F0F14B, 0xCEEB5FCB,
+0x7DA23217, 0xA40B66AB, 0x0D953FA4, 0x33F5BD29, 0x4B9EC61B, 0x529CD2A4, 0x9BACC5E6, 0xFA38D32E,
+0xF80C615A, 0xF74A511E, 0xE305DA64, 0xC2D57C89, 0x4E030EB6, 0xD3217088, 0x86D929EF, 0x0E57B343,
+0x37FA7049, 0x59D5430A, 0x1DC9E3D0, 0xBD314475, 0xD7B2EC05, 0xDAD60C29, 0x0BDF3CC8, 0xC071108E,
+0x4971BB50, 0x35EA16E1, 0x15CD789E, 0x03EE2DA3, 0x80FA5D39, 0x38DADAA7, 0x20E637C3, 0xF9CE9A63,
+0x931A0A2D, 0x50B07AB7, 0x18A8A1F9, 0x5BCC474A, 0xEC7E494A, 0x19011681, 0xF63E7A1A, 0xBFF340E6,
+0xD32E441E, 0xE27E5DA5, 0x05B0732E, 0x3AA0EE87, 0xE91FD4D2, 0x1EC8FB4E, 0x6798ACD3, 0x3F1414E5,
+0x7B4945E3, 0x91A7C838, 0xB52EEA71, 0xDE3DADC6, 0x0FE1745A, 0x1CC536D1, 0x1203021F, 0x4528DDC6,
+0xA7BE7DC3, 0xD57559E3, 0x07E9C19C, 0x1F30DCE7, 0x39827E7D, 0xE108E8E8, 0xDED8D1D3, 0x200C9A1B,
+0x9D0191EB, 0xA9EB49E5, 0x7200D1D2, 0x0F8F54DD, 0x19687A97, 0x3E28007D, 0x0A8D1D90, 0xCEB4E07F,
+0xF582F79D, 0x76BB9194, 0x6EBF754D, 0x33304AFB, 0xA64EE4EB, 0xC933CEC0, 0x00A21E5D, 0xCE65F82B,
+0xCD809BFB, 0x8029E213, 0xF71FE774, 0xEF2FD381, 0x2677BD22, 0x032E25A3, 0xCCB42850, 0x4E3E07AC,
+0x2EF166FD, 0x14AC1008, 0x3AFF7BD1, 0xA767E721, 0x99E8BCEA, 0x274E31CB, 0x25E6BEF2, 0x7EED221A,
+0xF68307AE, 0xFE7FB24D, 0x18543E02, 0x692E50A4, 0x5F4C40DB, 0x5440D072, 0xE5537215, 0x9A3A32DE,
+0xF148E654, 0x00C9F0BB, 0xB0777943, 0xA1B97BED, 0xEA6EDF2D, 0xFDD37C8D, 0x5AD7654E, 0x378BCCAC,
+0x0F6EC5B2, 0xFE96AE42, 0x9E324E78, 0x907D8610, 0x6B6E797A, 0x9248D8A7, 0x7A0C3CDB, 0x2D25CC93,
+0xB2F14A6A, 0x9FA746FB, 0x2403D51F, 0xF270BE7C, 0x561C1E5D, 0x62EBAF6E, 0xFA5AA526, 0xCD259075,
+0x9CFD4714, 0xA20629FF, 0x448938D6, 0x7346C81F, 0x642700C6, 0xD5F65DD6, 0xF5BECB2B, 0x7E0EF9A7,
+0xE8801123, 0x22E38975, 0x1701A46F, 0x847C685A, 0xA603A017, 0x7F527D68, 0x9C38ADFA, 0x7D68871B,
+0xC9955FDA, 0xA816872E, 0x58F3954D, 0x8D3157AE, 0x99842582, 0xC49EBDF9, 0x59758BCB, 0x54D1E39E,
+0x7E1EAA25, 0xF7BB9007, 0x42044459, 0xD8D9FE45, 0xB5253E79, 0x7C4A811A, 0x90232F56, 0x8EBB10C3,
+0x64280EB7, 0x0EEEF68F, 0x62104C54, 0xB638D54F, 0xFCDD99D3, 0x27E41652, 0xEC570387, 0x5B6C8467,
+0x27538FB6, 0xA8CF8F2C, 0xCCFBD625, 0xF96CAC8F, 0xBC4B674F, 0x3EA9959C, 0x9DBF79DB, 0x2715F831,
+0x2DF36FD0, 0xB712A64C, 0x828C3B68, 0x611E5CA6, 0x471753EF, 0x039D975C, 0xF15B5606, 0x5639EA59,
+0x4C89BA8A, 0xF8F87927, 0x8C4D1572, 0x47CDD656, 0x7EACA882, 0x8C04F52D, 0xA1FABFBF, 0x2F8E4E30,
+0x1E4277FC, 0x6BC5D6CF, 0x2F26EC1E, 0xAC6DE086, 0x54E95BAF, 0xA094C788, 0xEA8B2702, 0x5CF4FED5,
+0xDCD10611, 0xA74EE0B6, 0xB5994CF0, 0x040AE4C9, 0xE967E7B0, 0x066BE956, 0x620F1112, 0x7A621777,
+0x0267BE08, 0x99FA90F1, 0x3A75DA27, 0xE1014CF3, 0xD2F80601, 0xA61A3B99, 0x089CA4AD, 0x6CF315AF,
+0x4A919BF1, 0xDE9CDAF3, 0x7701A8EB, 0x01AE4870, 0x4F0A9015, 0x536D7500, 0x256E046D, 0xFBB69DA7,
+0x1551E1C9, 0xCC8B40EF, 0x8354270F, 0x98444916, 0x165AF7B4, 0x538A1BA5, 0x596344DB, 0x8BD69E1B,
+0x3964CFCA, 0xF68E0606, 0x62A2C685, 0x1A5FA05A, 0x59A12EA7, 0xBE36FA00, 0x971C0FE1, 0x49408B80,
+0x72D0608C, 0x2540C27E, 0xFBD81868, 0x95301659, 0x7110A3E2, 0xB41FCC9C, 0x779D3A0D, 0x12A8B9B1,
+0xBEDE8C23, 0xB34CFC79, 0xEA603DF0, 0xB7775405, 0x3D5D431F, 0x7F3CB759, 0x49D93B48, 0x17CC3A94,
+0xA36E5155, 0x25B349C3, 0x1C6C5538, 0xAD3AAC7D, 0x5D4B791A, 0xA147EDD5, 0xC61A94E0, 0x0D7D17D8,
+0xE7B26D86, 0xEB521E97, 0x0A397953, 0x844BB10B, 0x3678DA9E, 0x830A4311, 0xC50F5B66, 0x1D19C08B,
+0xD3F0A9ED, 0xA00D0C77, 0x5194A89B, 0xE9424FC1, 0xBBC9D225, 0x8EBC8373, 0x9C3BE301, 0x1B46C283,
+0xE419292F, 0x289F55CA, 0xB5DA3BB7, 0xF92A7BF6, 0x2D428B16, 0xD0541B15, 0x8A8BE88D, 0x53CDE533,
+0x1EE66F0B, 0x44742FE9, 0xFC8FE69F, 0x365B2824, 0x988411E3, 0xE81E2253, 0x83715EBC, 0x00DF0B03,
+0x0A143D64, 0x06DB850A, 0xF32E4F7F, 0x7B9C1F00, 0xFF265370, 0xB79603BB, 0x2A4E4ADF, 0x99ADB7FF,
+0x46E82A2A, 0xD5724538, 0x8C2942A8, 0xFE47DD34, 0x14D10FAA, 0x52FBAE61, 0x6C12DD27, 0x3086CF4A,
+0x75DFDBCE, 0x60A460A3, 0x667316C3, 0xA53CA812, 0x4A3DF192, 0xF4B528D2, 0x3A39ED9F, 0x9FC60585,
+0x172A69CC, 0xCDE080A0, 0x5545087E, 0x850E950E, 0xC9E76C05, 0x3D427224, 0xC05DEB5B, 0xC46841B0,
+0x3D9DBD02, 0x62AD07F2, 0x8257BA4B, 0x1229B33E, 0x23319CA6, 0xD8FB0965, 0x5E6AF955, 0x47210623,
+0xE0883B61, 0x8295A9C8, 0xBD80EC9D, 0x817C7FA8, 0xA60A692C, 0x0794A628, 0xC3208F89, 0xBB76E382,
+0x83184881, 0xB48F6CBB, 0x5A2D6542, 0xF2AD647F, 0xADD1D61C, 0xEC024594, 0x96AAF884, 0xBBB13755,
+0x2C8E7C57, 0x119F3AD2, 0xE0BCD718, 0x5F98CFD6, 0x8715BD8E, 0xFBADE958, 0xCE0B81AF, 0xF8C8C304,
+0x44B72C4F, 0xAE007E73, 0x35FFA29E, 0x44B2B93E, 0xCCB9D4A7, 0xA3AD7D00, 0x20E99DA4, 0x1DF2DB69,
+0xAC24A596, 0x44E0AE5C, 0x9E8ECF9C, 0x1A4C880C, 0x10AACE63, 0xB2C5E7E8, 0xB30907AB, 0x8620B2B3,
+0xCBC07822, 0x0C669685, 0xA7810804, 0x0A187711, 0xC5CEFE1A, 0x5F87DC5D, 0xD8C2E944, 0x2017547D,
+0x5811946E, 0x7D02208E, 0xD61839FD, 0x9C3886CB, 0x8974AAA5, 0x25F557E3, 0x91DC5F69, 0xD500E994,
+0xF5C9A83A, 0x78E626D7, 0x781C09F2, 0x34E27BF8, 0xF4F1FCE5, 0x23EBEE07, 0x1BD080BE, 0x0307E38D,
+0x2EDA7E1D, 0x2C9ABB75, 0x2DD93C3C, 0x7A08D061, 0xBEFC9BD4, 0xDA69CC1C, 0xBE44C2BE, 0x8F095FF5,
+0xD9FE956F, 0xCEF9AD4E, 0x30B67F42, 0x021BF521, 0xC2F0C74F, 0x2C1F6921, 0x45F02C66, 0x2E1B0B8D,
+0xB421417A, 0xD9BB12C7, 0xFDF282C8, 0x3D7B3655, 0x6E47A9B8, 0xA4C1C334, 0x03F0D2E5, 0x46641266,
+0x7C1C4063, 0x38376E92, 0xA1AE9CFA, 0x98780A65, 0x69D8BAD0, 0x0FFF0C14, 0x04DF7DB0, 0x4F50303D,
+0xD2BA66BF, 0x5CD5EAE6, 0x1F0AD3C9, 0xF81B00EF, 0x40AEAEF0, 0xB6FC9BA4, 0xBCFD86B5, 0xB1733B1B,
+0xFD33E5D9, 0xF08C3386, 0x80B3364E, 0x7C58ABA5, 0x982DEB34, 0x863B266E, 0x04A3BE1D, 0x480420B4,
+0xFDC10AF3, 0xF936EF92, 0x3C9D859C, 0xEFFDA70D, 0x3AA2A51D, 0xEBD5F85C, 0xE4AA87E6, 0x8A4CA526,
+0x97E4D8A4, 0x4284B9CA, 0x3CD41D8F, 0xD5F21383, 0xDA99B09A, 0x23354896, 0x74CC69ED, 0xB381BB6C,
+0xFB1BA43B, 0xC1FB6005, 0x98C4CA77, 0x0C9251B0, 0x076186E1, 0x765830E7, 0x6B1AE2EE, 0x1A69B438,
+0x64D5547C, 0x8571322E, 0xD56523C1, 0xD703C929, 0x389866A8, 0x49AAF0DA, 0xC65505F2, 0x2F86F6EF,
+0x87214F48, 0x79300983, 0x437A2ED5, 0xCD0B8D89, 0xC754A24D, 0x5F2EB734, 0xCCC7A06B, 0x4DDF8C8D,
+0x4E2D179C, 0x08066493, 0x5A6F6D12, 0x870B8AFE, 0x48C5167B, 0xC9813443, 0x84744E2B, 0x654C7AF7,
+0x2D3926AF, 0x082C5379, 0x12C8A777, 0xE350C305, 0x8CF45493, 0x87AA672F, 0x55EBCB9B, 0x05D7B894,
+0xEDEE9B8B, 0x5EC5B6F2, 0xF664560B, 0x4C0080C7, 0x923C2AD7, 0x20F98BD3, 0x1B94DF82, 0x0BD38763,
+0xCECDDA07, 0x1C850480, 0xF89136D4, 0x18CC90DD, 0xACEF13E1, 0xFA8FF167, 0x718C8CBD, 0x423CE2B0,
+0xDDD9F649, 0xA77BC5F5, 0xBEEF83F4, 0x5ABAA031, 0x8A6661B9, 0xBB410347, 0xD2981E67, 0x91580539,
+0x1A53A016, 0xB5408A7D, 0x31DF70F9, 0x536123F7, 0x8ACF2A36, 0x70A4BC99, 0xE63E2120, 0x1489A7FF,
+0x5C02BCBC, 0xA635AA04, 0x574F1587, 0x2D2B70B9, 0xCCCEA94C, 0x84B87968, 0x2A038225, 0x93E83063,
+0xC8E8CDFF, 0x8107F2B1, 0x7980893D, 0x9F032920, 0x86965E88, 0x74AB411E, 0xC36E0F2B, 0x19358623,
+0x4CC27A7E, 0x50C3A417, 0xE5EA69A8, 0x4B16E4BE, 0x083B6D83, 0x84E5F188, 0xF7234E82, 0xC19A0F20,
+0x99C3249E, 0xB4341F49, 0x910CA4F5, 0x94858539, 0xA6E059CF, 0xB8398612, 0x0DF98129, 0x7BF27BA8,
+0xC345CE4F, 0x95BBF592, 0x074B4626, 0xF2037E77, 0xE745D3F8, 0x2D4F0FA5, 0x96C2A04B, 0x3A57BD44,
+0x2E0CDFDF, 0xE7AA5336, 0x614EB9F9, 0x856B67BF, 0x5233336C, 0x72988694, 0xE2EBDBA8, 0x211AA208,
+0x8777B835, 0xC43A292D, 0xFBE803F1, 0x4495DBEF, 0xDCBB9CCA, 0xBF70B650, 0x21236C92, 0x2827E438,
+0xEAF2DC3A, 0xC8BD61F0, 0x5237BA7F, 0xC5E2F1FD, 0x509B1406, 0x3C98243D, 0x72B7D471, 0x893F5818,
+0x43746857, 0x6D47D6BF, 0xDEF59262, 0xB5A14066, 0xF015B000, 0x5B77161A, 0x66366B3A, 0x22F4EB60,
+0x08CD774D, 0xDA925144, 0x31D31848, 0xB47F1B57, 0x5290046A, 0x90EC2494, 0x3FF1A834, 0x49A47299,
+0xFC773A7D, 0x9FB39199, 0x22E8F559, 0xD83C0983, 0xA20B6960, 0x2EB1F3C1, 0xE1CE145F, 0x07D652AF,
+0xD07BF719, 0x53B9108F, 0x8F3CC691, 0xC9207CC0, 0x665766D2, 0x2BE8CD7C, 0x856B3D5C, 0x0DFC489F,
+0xAD22B73A, 0x1EA1221E, 0x03071B7A, 0x2E8D4228, 0x849311FC, 0x5986A05F, 0x50A0DF43, 0x4F435ECC,
+0x7F66A0F2, 0x0DC6B717, 0x9341798E, 0x38B6B14F, 0x28004D8F, 0xC48D400C, 0xD8861BF7, 0x5A26807B,
+0x74100F05, 0x8A18EF20, 0x88C0003A, 0xAFDB2395, 0xD4C9F2D2, 0xE8561D73, 0x546491AA, 0xB8FE32E6,
+0xE875B91F, 0x30E21295, 0xF4B99289, 0xE9960B54, 0xC810AC5B, 0x82A8A5A2, 0x53030D46, 0xAFFFC4CB,
+0xC51B992E, 0x394153D1, 0xED174370, 0x36AF3555, 0xF4AD12F0, 0x6F413933, 0x03D4B417, 0x8672B695,
+0x3179B9CF, 0xE6F22CC9, 0x2F99BDF2, 0x6EB141D9, 0x6342D23F, 0x710EE01C, 0x1C046AE1, 0x30022353,
+0x5CA09A6A, 0xD0355DD1, 0x51692F1D, 0x3B7D7E34, 0x9AF5BA0F, 0x548896F3, 0xF6DCB5D6, 0x90D80084,
+0x74572E90, 0xD810298A, 0xE176F783, 0x1EAF493F, 0x3CF2F15A, 0x3E6AFC8C, 0x9C8A4244, 0xCDD073EB,
+0xC7EDAA8F, 0x07062709, 0x76A7E0E7, 0x1617F110, 0x4E3175D3, 0x407003A4, 0x1A9F69F6, 0x16070077,
+0xA64A3B9A, 0x3E3384CE, 0x43AB698B, 0xBCA55C2A, 0xD685AB49, 0xA8BA27E3, 0x7E1DA038, 0x10A72E43,
+0x2B21721C, 0x8A936AD8, 0x71267A5E, 0xE585EC40, 0x4BDC565D, 0xBB8E635C, 0x9CDCFEFE, 0xF9CC5758,
+0xE38643E9, 0x1D756123, 0x169D63C3, 0x23B1419D, 0x380414AB, 0xD6FF2531, 0x747B6826, 0x939C3928,
+0x6D5596B5, 0x0A68F2F9, 0x7957EE1C, 0xF3991AE7, 0xB8233DEF, 0x84639CE2, 0x7482F30A, 0x7880D6C1,
+0x448DF278, 0x6DEFB370, 0x596BB8A3, 0x6C9F2215, 0xEA89EDF2, 0xD203C462, 0x0F996617, 0xB2505814,
+0xEF181666, 0xA9B9D4C3, 0xCEA5AF7F, 0x2CF3FFB5, 0xF572BF15, 0x24BCAF50, 0x785EB049, 0xEE998DD7,
+0x68D98DC6, 0x477B8B63, 0x9F6D5036, 0x68A5374D, 0xD7803E3D, 0xDF8A9663, 0x3A00FED7, 0x92A6399C,
+0x08A21A4C, 0x9517934F, 0x859DA558, 0xF285B952, 0x5A4CC738, 0xF9677F6D, 0xF708AF77, 0xAE4D7F49,
+0xBB110DC8, 0xD9C83D85, 0x2C8A7D5A, 0xF46D8249, 0x11FFF17E, 0x56D61414, 0xF477869F, 0x83AF09BF,
+0x5CBEFA7B, 0xA8962DC3, 0x7ACB5143, 0xF5CC1860, 0x3F29A937, 0x82CB7BC5, 0x742D2A1E, 0xB35745FB,
+0xD6B29965, 0xD88DE315, 0xF2BC0719, 0x7D5804BE, 0xA33600FF, 0x137D2574, 0x4FB9E231, 0x73AB7409,
+0xD6B17D2C, 0x9BBB9181, 0xC0F4FA97, 0xCF8A201F, 0xEB3E1B67, 0x124FEA57, 0xACAC5B32, 0xCB2EB8CE,
+0xED2EC3D4, 0x0912B28B, 0xC009C0AC, 0x4BDFFF62, 0x568170C2, 0x5A8ABC1E, 0x88A1DA3F, 0xE2A46047,
+0xAB58A0C3, 0xDDD185CE, 0x68ED5503, 0x0F6F8C6D, 0x3D0E8F58, 0x6752A9A0, 0x0DCE7E51, 0xC75E3961,
+0x23D19A8C, 0xB6B3BF60, 0xDF0AE66C, 0xE4E96FA3, 0x7F1E9DAA, 0x327BA52D, 0x8757808F, 0x378AC2BE,
+0xACCB81B7, 0x7E558316, 0x7264AF4C, 0x7768818A, 0x69D93DC0, 0x4B81C3A4, 0xA0115507, 0xF83313DB,
+0xD95104E8, 0xC750E77F, 0x3EB83723, 0x670FBD56, 0xE9BF1660, 0x711A084C, 0x6AE408E7, 0x0691CFD9,
+0x85D84348, 0x8D286708, 0x3452FB24, 0xBAEEB96E, 0x9ECC03FB, 0xFDD8ED0B, 0x8059D0C2, 0x11109159,
+0x99ABBD79, 0x6FB745D8, 0xF437776A, 0x645CD47B, 0xC54F6BA7, 0xA58E048F, 0x5DEDD8F2, 0x5130C353,
+0x0209638D, 0x3BFD2022, 0xCE6D0858, 0x4704D029, 0x70F79FCC, 0xAE37E4E5, 0x157B69E9, 0x75020487,
+0xBC2F2832, 0xBE550DD2, 0x4056C199, 0x60A04C16, 0x88612259, 0x750506BA, 0xBF1C08B7, 0x598C7679,
+0x9FCE5325, 0x22727318, 0x9767018B, 0x9D89DD30, 0x2D8BB93D, 0x218C1547, 0x44DF4955, 0x1D389543,
+0xFB866B03, 0x2A614345, 0xCB82AE08, 0x6864D985, 0x8D8D9A5F, 0x8F173E29, 0x807C266A, 0xDD2BFD07,
+0x1468C609, 0xD39F3EBC, 0xB605A991, 0x8D5AFD1C, 0x24087830, 0x82C61EDD, 0xDEE36E90, 0x3051724C,
+0x34215B07, 0x1C5CE92F, 0xC628CDB3, 0x37BDD004, 0x4EFDAFDF, 0xB0F83FF3, 0xD48FAE43, 0x8668AB25,
+0x285D6C56, 0x08E51DC2, 0x40264368, 0xDE229DAC, 0xB7C9ABB0, 0x333D7624, 0xCDD397FC, 0xCD59B13A,
+0xECE6984B, 0xAF6F4729, 0x2FB801B8, 0xB60B0D7D, 0xF91948DF, 0xEB92EA54, 0x63278DA7, 0x1D4DA070,
+0x5FAB2CCA, 0x734EA997, 0x9C830C69, 0xDEA9A7AE, 0x50A79C11, 0x59C7B066, 0x6EE79943, 0x6FE69821,
+0xC6A56BF9, 0xCE054BA7, 0x805F98A2, 0x747FB472, 0x1EE884EE, 0x96232CA8, 0xCE6E0430, 0x5990153C,
+0x4BFEBBC5, 0xEE8D596E, 0xE358A038, 0x50D1068C, 0x4572BBE1, 0x9F136015, 0x43D15336, 0x71BDE73D,
+0x476DF641, 0xA4ED7B59, 0x03D9D52E, 0x2DD66EBA, 0x220D3E65, 0x6F4180F1, 0x3C7AC8EF, 0xA4F32986,
+0xDD6093F8, 0xBBC1CD2F, 0x5A64F5AF, 0xD42E1C5D, 0xAAF52A4B, 0xC605DE2A, 0x5E6BC8FC, 0x15B00E17,
+0x0F1E3D6A, 0x9E17D43D, 0xA601EBCC, 0xF11BF4D2, 0x2B8E6AC2, 0xA6D5AF27, 0x4C0D25DE, 0xD4F801DE,
+0x9D8FB993, 0x290C172C, 0xA9235C21, 0x68D2C19F, 0xCF8A672A, 0x5B7ACC8F, 0xB4337203, 0x4D0AC122,
+0xDA539F84, 0x86249854, 0xF6E1C0D3, 0xB6C38F21, 0xAC434864, 0x5D687727, 0x6874E622, 0x2AA6CDA4,
+0x33ED7076, 0x8D3E14C5, 0x15898B1A, 0xECB43C2C, 0xBBDAA60F, 0x0EFA179C, 0x71E7C299, 0xAD56AC8E,
+0x578C721F, 0x4675C0D9, 0xB01184E2, 0xC30567B4, 0x0788B77C, 0xBA6010FF, 0x9FBCADDE, 0x85BC4B94,
+0x335CB422, 0xF37F3E3C, 0x56459AA4, 0x73498D24, 0x0E02CA3F, 0x0BAAD638, 0x1DD2B5BC, 0xA3A8E6C5,
+0x635AEE42, 0x8BC7B236, 0x766EB672, 0x6D56643C, 0x70B92344, 0xEE5E9FED, 0x6C629BE7, 0x61D8BDFA,
+0x7737D65A, 0xC72FE063, 0x18490179, 0x9310B8CD, 0x14521571, 0x73A15D18, 0x1A6EE75E, 0x88E1AD86,
+0x86BB73FF, 0x5543BB63, 0x4E1490A5, 0x83DA734B, 0x05D162BD, 0xED9C51FC, 0x3D32600E, 0x73C54D82,
+0xE4925E4F, 0x0DEB5CDD, 0x446E6247, 0x5AD2BC58, 0x3D94B373, 0xB20D6CEB, 0xBADE798F, 0x656141DE,
+0xFFD99A46, 0x2D81EA9A, 0x299F721B, 0xA0BFA116, 0x2345D164, 0xB01E7D52, 0x2521C8FD, 0xD0F4AEAD,
+0xA75ADCD1, 0xF678B8B3, 0x789C46A3, 0xECD969A5, 0xE45E4C5B, 0xD53DDB56, 0xA2A04F2B, 0xFCDD6A22,
+0xE805D8A8, 0x3646CE0E, 0x2DAF5756, 0xA543B643, 0x7804CEFB, 0x8492E815, 0x38BE71D2, 0x6AE86DE9,
+0x9D0FC6D8, 0xC656BF78, 0x44712D0A, 0xDEACFDB3, 0x7A4CD3CF, 0xB69E231C, 0x8A6E8062, 0x4B1E26DA,
+0x4B310653, 0xEB708E1C, 0xC9F53531, 0xF60F3401, 0x8CD0C7E4, 0xA9C435DF, 0xC26CA6E6, 0x6D405601,
+0xD10BDF5C, 0x64ABFB0F, 0xB10B4A08, 0xFCA1C92D, 0x7EC95A93, 0x50CFCF70, 0x2868A87F, 0x96918822,
+0x6F49A432, 0x041ADBA0, 0x86AC1050, 0x8471C94F, 0xECD99895, 0xC6D66290, 0x74B75E74, 0x97442EB1,
+0x8E4119A9, 0x43909E5A, 0x393C0361, 0xE86ACBC6, 0x411A2084, 0xB3B21B59, 0xB489CFC8, 0x3E92D001,
+0x4594C07F, 0xC277CBDA, 0x99F5B000, 0x9DD1C1D0, 0x854EF077, 0x7FB7DC47, 0xE90FE14B, 0x5B410226,
+0x88E8D388, 0x223E18D9, 0x5D9FE487, 0x79B9D82B, 0xA0CAB577, 0x381FC4B2, 0x0D93FEF4, 0x955F5E58,
+0x36EDC20E, 0x2A4F705D, 0x2FC4AB62, 0xE689F613, 0xAE7C7D4C, 0x071965E6, 0x2F732EBB, 0x9FC20690,
+0x14A67C03, 0x6BCC18E6, 0xA01E4BD8, 0x035380F1, 0x7F4F03D7, 0x0DF34A48, 0xDC8BA45F, 0x8A4616EB,
+0x8E15CA30, 0xDFF2F584, 0x2706CB4A, 0x2FB45D3F, 0xE3553791, 0x9AADC745, 0xFBFA9102, 0xB844EB61,
+0x3A3A7AFF, 0xFCC21FC4, 0x73395893, 0x372CF9EB, 0xF9385101, 0x2B1E591F, 0xFB163768, 0xBBA87E7F,
+0x636725EF, 0x4257414F, 0x30240037, 0x4DFFF0BC, 0x813D6B67, 0x5FE5D93D, 0xA5982754, 0xA75DF96D,
+0xFCA08670, 0x20FC83D2, 0x471AF2AC, 0xC496E899, 0x8CE790A2, 0xFC2473A3, 0x18493F51, 0x6E8DCE8F,
+0x1552D6C7, 0x0822FA02, 0xE1EBE157, 0xF9A39338, 0xDC9B4CCE, 0x54470576, 0xC2C3BD3B, 0x8551B03C,
+0x52D752FF, 0x471BA667, 0xF1E982ED, 0x9700E7A7, 0xF7766A7A, 0xEA164C0C, 0x39AAF81D, 0x1519A3BA,
+0x20A98053, 0xC93F0E31, 0xA0AA9E44, 0xC83B9732, 0x97A9AC33, 0xDA538080, 0x5C9E1201, 0x1D6BEA10,
+0x05DD5319, 0x615E12D6, 0xE6CD765F, 0xD9781B3D, 0xFE42F0FF, 0x41F88DC2, 0xDD191BCB, 0x6F9D10C8,
+0xF68D5C47, 0xB79D72D2, 0x5D440F9E, 0xEBC18FE9, 0x8442AEB3, 0x03236356, 0xAEDF2D82, 0x8E3F684B,
+0xDF7E637E, 0xACC6682E, 0x7979B0E0, 0x909D6353, 0xFE3C276D, 0xA8E74C25, 0xECEA94AA, 0x16FFDCFB,
+0x2D0EC864, 0x0D49FE1E, 0x69C3044D, 0x2E72ED0B, 0x368D7CB7, 0x9277148C, 0x4221E6E3, 0xD293A6D2,
+0x1311A123, 0x4B71C728, 0x071E4764, 0x8E7F6C40, 0x2198368B, 0x512622DF, 0x51CFD46F, 0x7C7EFCEF,
+0xE8CB7E00, 0x287477FB, 0x51771AF6, 0xB7F29325, 0x443373DF, 0x859C8C09, 0xBD78D86B, 0xB55A5175,
+0x0E88C952, 0xCE331789, 0xBF7C66A8, 0x56A3C6BA, 0x6BE9EE85, 0xEA07C82C, 0x1ECA73EF, 0x62E75BC6,
+0x4A399DB9, 0x21206EE3, 0x8D82253A, 0x50E3A80A, 0x64DFE6D1, 0x6DD4F0C8, 0x270B32CD, 0xBC26B171,
+0xC91747FF, 0x2450F3A5, 0xD4E7F9FC, 0xEBD69EAD, 0xD7DCB8AF, 0x46D471B4, 0x737C8BFA, 0xBAC86C5B,
+0xAB017A96, 0xFF2A5FFB, 0xCE1EE791, 0x1434136B, 0x87763177, 0x45FFFAA0, 0xEA09E33D, 0xE9CE043B,
+0xFBF55EF1, 0xA4628E31, 0x09AB7924, 0x63E1C080, 0xE87A491B, 0x18C8A661, 0x691F835A, 0x3B7C3E97,
+0x6461168F, 0xD52B49CA, 0xB8443FDE, 0xF17FFF2C, 0xA961E7FC, 0x90B36A57, 0x89296792, 0x7C04A08C,
+0x8FFA0F4A, 0x32F8AC70, 0xA67E29B2, 0x979BC260, 0xD87EFCE6, 0x59358566, 0x4342D1D3, 0x39E6EAF1,
+0xAC69E559, 0x7782D3E1, 0x90A6D7A4, 0x9AE02CD2, 0x808D8C6E, 0xABE48962, 0x67562920, 0x79EBE887,
+0xFB00A7CF, 0xB95FA74D, 0xFDD0EB34, 0xBBFA8BA4, 0x770679D4, 0x2CD95A23, 0x34AAC975, 0xE8BB16AB,
+0x689BA1C9, 0x8E3B94BC, 0x19C3B6E2, 0x2FE2B270, 0x44DF2E2A, 0x85FFA3A6, 0xC61F7823, 0x6BBDB736,
+0xC74AF9B5, 0x2F439836, 0x50080ACA, 0x22D5018E, 0x31D3D3A4, 0xFBF5A38F, 0xF79AE7E9, 0x6C592507,
+0x8D352F76, 0x24075D14, 0xD0222D0E, 0x4792E6D9, 0xD8607047, 0xA79C6604, 0xB5DE722E, 0x27455235,
+0xCD9D85BB, 0xF9DDA5F0, 0x5E9CCC25, 0x7F23207D, 0xC2425EC8, 0x5496D886, 0x4A8DB81D, 0xB70FF7E8,
+0x5E84019A, 0xA2F0D1E0, 0x6CB4BCFA, 0xA4D2AB89, 0xFBF01572, 0x179BB5D3, 0xF6AF7BA0, 0x35466EC7,
+0xF188C724, 0x98659952, 0xE5EDBFBD, 0xEF0EEDB9, 0xDE404E9A, 0xE4BC7C66, 0x415B3203, 0xD8686237,
+0xBA1FBCDA, 0xB8DF2E72, 0xCE57F057, 0xAEEE6516, 0xA0360BDB, 0x42741231, 0xFBF5E43A, 0x9A39F297,
+0x26051FBB, 0x8BFFF70B, 0x81BEEB87, 0xD8F8DBB4, 0xDB1206A2, 0x5436A2B1, 0x7D09AB6E, 0x66070C4C,
+0xCA2CEE6C, 0x43400C34, 0x922BF793, 0xAD8D8CA3, 0x501D42A6, 0xF30A1BB1, 0x0D4393E7, 0x2428C118,
+0xBEAAE7AC, 0xDD8C99F7, 0xDCAB1656, 0x3DECC327, 0x5F9AA61B, 0x9A3035BC, 0x98FD42C4, 0xF3146FCC,
+0x92B429C9, 0xB72B4641, 0xED5F77F7, 0xFCA3D557, 0xEA8BF96A, 0xC5CA6425, 0x96EFBAC3, 0xF1F532E2,
+0x4DFAEC99, 0x3D1DF568, 0x75727EE0, 0x352EB193, 0xCAEB9BB3, 0x9585F0A5, 0xA7270D5D, 0x8A053967,
+0xC29F0853, 0x9F3AE3C5, 0x08C2E6B0, 0xA0A290B0, 0xC997ADAA, 0x715F6205, 0xD2F5EDAF, 0xD5E55FDF,
+0xAC7C521F, 0x70FB23F7, 0x68F19FD1, 0x67292412, 0x9F8AD5D9, 0x1DB15B1D, 0x59FCE2F4, 0x04B7E5B5,
+0x0377360A, 0x38983453, 0x72FAE3BD, 0x6931F127, 0xA7597A54, 0x847349CB, 0xD66019F3, 0x5896139E,
+0x0C8DFF0A, 0x25CE810F, 0xC6975744, 0x23471DE8, 0x9101A85B, 0xF1DCC348, 0xEAD388AF, 0xD26FFE2B,
+0x36EDBF6A, 0x0DA99F82, 0x4E3ADBE5, 0x388A24AF, 0x2A30D960, 0xC830B5AB, 0x0EEDF81C, 0xAE76F1FF,
+0xB7059873, 0x5BF96756, 0x39B2A9C9, 0x84DF87B6, 0x508693DD, 0x868F2586, 0x9B247DC6, 0xA349B94F,
+0xAA9BCC87, 0xD0D0A076, 0x40357CD6, 0xC1755D21, 0x501632CF, 0xE223F620, 0xA8229CB7, 0xB87896F2,
+0xBFDBB996, 0x4E5C6543, 0x16C1152C, 0xE912A954, 0x348A0CA1, 0x71B8B67D, 0x605BF611, 0xD73DF22D,
+0xDCFD9F2E, 0x46E941D5, 0x6E43265F, 0x4C0F0448, 0xD6E8983F, 0xBB4592D9, 0x8C7F2449, 0x46BA0C4A,
+0x17BB1E51, 0xE44EDEC9, 0xFCFEC13D, 0x1168C755, 0xCCFDEF67, 0x238F7BC1, 0xE4E7DD80, 0x711713C4,
+0x8F4930D6, 0x87C140B9, 0x1286EE7C, 0x9A6D8DE0, 0x88141ABC, 0x3AE14005, 0x06E2682D, 0x29B27502,
+0xE77B00F6, 0x41852380, 0xDAB350FA, 0x87C4620B, 0x3B80F6A3, 0xE25C640C, 0x81CC136C, 0xAB9440DF,
+0x440B8A11, 0x566DF70E, 0xD094801B, 0x52A5A7C8, 0x2B5AF7BF, 0x63639B8B, 0x925DD002, 0xB6452063,
+0x54ED8245, 0x6C164FE6, 0xB7EBB934, 0x437C21B9, 0x37E8991B, 0x55D1351D, 0x8032AC80, 0xE9751BC2,
+0x20CE379A, 0x24BE7BFD, 0x9FD7BDF1, 0x509A597A, 0x5A49FF50, 0xCA1099C9, 0x3DE2983C, 0x9586CFF3,
+0xF2D7104B, 0x5D1F8503, 0x02AD3079, 0x9ACCCADA, 0xEDED24EA, 0xE79F2A9F, 0xB70233A6, 0xD757823E,
+0x0B01375C, 0xBEC27CAF, 0xEFA5EA41, 0x0B00581E, 0xA09AC115, 0xAF34A8D6, 0x0F8ACA32, 0x4B7106E5,
+0x2DE402E7, 0x6596B50B, 0x0EAE02B0, 0x9FE67548, 0xDF612DF3, 0x10DF5F4F, 0x6F43B8A5, 0x761D0077,
+0xB04B3BB4, 0xE04F50C9, 0xE54CA710, 0x78965B5E, 0x3C105DF5, 0xDB289816, 0x3DCE68A5, 0xEEF06CA6,
+0x71435FE6, 0xB3FE9A5E, 0x0C53B194, 0xD196C146, 0x44A6A870, 0xC7420FF8, 0xB09D3237, 0x95EF6499,
+0x7E1ACA3B, 0xC45A6689, 0xFAE3D080, 0x225F55B7, 0x81941564, 0x677C2DB0, 0xBC8138D1, 0xC59542F5,
+0x232693E3, 0xA1370E19, 0xB52A1C5E, 0xC380592C, 0xC17A24B3, 0xC592B4F8, 0xE61B4D81, 0xD3183F48,
+0x4A307929, 0x8FB19F1A, 0x534C997C, 0x1036AD28, 0x5BB4F5CF, 0x0496C75D, 0xE319362B, 0xF75B9A92,
+0x282BD320, 0xBD1EE1CA, 0x1618F7D4, 0xC1764092, 0x661E612F, 0xFB276B50, 0xC05892F8, 0x7452A7DD,
+0x66A16882, 0x79E668B7, 0xE2E49892, 0xE15A57F6, 0x50D322DC, 0xC63B6B18, 0x9626C55B, 0x9E6F37DE,
+0x5902975A, 0x4BE72023, 0x2F7A1833, 0x6C14263A, 0xD87AA3E5, 0xB28ECEED, 0x58BA36A7, 0x0F3DA708,
+0xB3B5F190, 0x49D1ECC7, 0xFE0566AF, 0x465107B7, 0x34082671, 0x649A986A, 0x562D64FE, 0x35940549,
+0xEB81CCC4, 0xD083355A, 0x10E5FBF8, 0x112C8EC4, 0x6A165236, 0x96EFBBB9, 0xDB64221A, 0xE50195CB,
+0x2E5D8D65, 0xD72B1D0A, 0x9C146EC3, 0x1F3CEC30, 0xCE15EFC1, 0xA0170B18, 0xEA1DF4E1, 0xE3040C13,
+0x38498F3F, 0xAB8213C5, 0xEA4F2439, 0x4DA0D46F, 0x81B3D25B, 0xB30EF95D, 0xA81AA5C6, 0xEFEA200B,
+0xAC5F6BD0, 0xC2BE96E3, 0x7BC03461, 0xC9ACF06C, 0x4A394893, 0xCC996D19, 0xF1478ED0, 0x050B88EF,
+0x393F9BF9, 0xEC38599E, 0xC6A0B397, 0xD645F2EF, 0xDADADE37, 0xAF03EB84, 0xDFBD3FDD, 0xC6B2A34D,
+0xD9972D81, 0xECB3CDEB, 0x6CD5322E, 0x92B67522, 0xA2C7D6CB, 0x91129018, 0x8D21E293, 0xD07E1F29,
+0x64B3F215, 0xBEC879C0, 0xEF43BC18, 0x8D4B03E1, 0xA02FDE48, 0xC9EB9FF0, 0x5CAA2811, 0x1FBFE6C7,
+0xE9DCC57A, 0x18E0BBF7, 0x39A57A9C, 0x4F3DB278, 0x8551A063, 0xA709022A, 0x27CF003D, 0xCBA65479,
+0xFB4D8D25, 0xD9D78A52, 0x6AE066F9, 0x82F4D52B, 0x89DF3A6C, 0x0BB8D99D, 0x346B1DE0, 0xE6FEED9B,
+0x15768F83, 0xB709B18A, 0x66BE3538, 0x76105144, 0x5EEA8B10, 0x7FDCA6F5, 0x1C7CE4E5, 0x6C1DE70C,
+0xDFF50253, 0x7CCAC380, 0xB77B3410, 0x33E5C7CD, 0xD660E893, 0xD865922A, 0x2F5C6BB7, 0x75B6E1D2,
+0x57518BC7, 0x7CD2A233, 0xF80138E8, 0x70C330E6, 0x24104C28, 0x3D62E742, 0xAEA00E95, 0x1FC7075A,
+0xB50360E7, 0xF917199C, 0xB7B2452C, 0xAF9EFC97, 0x2A18FFC5, 0x8CE733B4, 0x26E984C9, 0xA0E724D2,
+0x36DDAF98, 0x90336B00, 0x8F5A123E, 0x5D3ACB07, 0xC569A972, 0x48008A86, 0x1AAE8699, 0xCEAE01AD,
+0x6D7DF315, 0xDC7F08AF, 0xFA19DBBE, 0xD688482C, 0xAA5D4B77, 0xCDF879AB, 0x38FAA00F, 0x2EDD8A34,
+0x6FF8FD32, 0xE72304B2, 0x693F3C63, 0x2025496C, 0xD86BCE31, 0x611617A8, 0x3F4F50B4, 0x82333D91,
+0x155C9EDD, 0xFA65DB71, 0x618E5367, 0xF7FC7EE1, 0xDF127567, 0x3838A8BA, 0x52911433, 0xEEECA14A,
+0x7F42A016, 0x537C8867, 0x0907AF93, 0x4E621305, 0xD93AF0EE, 0x475DDCCC, 0x8A8EB380, 0xC614C049,
+0x8B23ECDA, 0x1075BFD0, 0xD171F6DB, 0x71ABBE9B, 0x0AEB683C, 0xD2FB7273, 0xAD92CE7C, 0xD4F817C4,
+0x17301DF2, 0xBAD4D0FF, 0xB3989201, 0xDA68892C, 0x62034695, 0x1F373748, 0xCBF9318F, 0xA0000080,
+0x7CE61F3E, 0xD7F47165, 0xC3200102, 0xB0A7BEA3, 0x189FED8B, 0xA841019D, 0x8AD079CE, 0xF7480972,
+0x031FFAE0, 0xD1E6850E, 0x31CFD109, 0x7574BBFF, 0x497400B6, 0x0453ED00, 0xD8647A0A, 0xE0BA7B9A,
+0xB3280F06, 0x36CD37BA, 0xE6BD5F6C, 0x1EC4E2E4, 0x482634A0, 0x47F8778F, 0x53B4B04E, 0x4E192677,
+0xBECB5339, 0xE28420B8, 0x215092AA, 0xFC06AD17, 0xAE14F2CF, 0xAB4A0E33, 0x98A58331, 0x755059E2,
+0xDE2E9AE2, 0x6CBEEF8D, 0xB870CF68, 0xD97210FE, 0xFC20CCB8, 0xF98E9DA8, 0x64F88F8D, 0xC55DC401,
+0x6584E1D0, 0xE69AC30D, 0x34B7E788, 0x871FD038, 0xEDB02E8E, 0x035A8E16, 0xE18049D9, 0x6B69F0E1,
+0xC0F8B9C6, 0x49DF4779, 0xBF584DAA, 0x2E7C6F4A, 0x1B74F687, 0xC30C0C6B, 0x748D1EA5, 0x145F2FCE,
+0xA108DC0A, 0x7DD4129E, 0xC3E56DAE, 0x1B4D66CD, 0x0D0CE2AF, 0x87B08290, 0xB28109F8, 0xBC60AE3F,
+0xE7621B80, 0xB955B592, 0x689E85E8, 0xBEDF733F, 0xBCEDBE4F, 0x22FACC23, 0x66CD6B2B, 0x7E136CBD,
+0x9B477195, 0x935D8E78, 0x9C4894C1, 0x10D478C8, 0xF25609F0, 0x46FCBADC, 0xC5C3CBE8, 0xFBA0257F,
+0x3A72383D, 0x850F3B6C, 0x5670CA1F, 0x9B026446, 0xDA888383, 0x2762B57B, 0xF4A23DC0, 0x9DD90D55,
+0x18ABD70D, 0x9A1B8761, 0xC22E05CA, 0xE38A0102, 0x361B8AE8, 0x64F5BCFF, 0x9A84409D, 0x0B8E4162,
+0xB11E19A6, 0x868CE6FC, 0x5938CB48, 0x7C419FD2, 0x1D2BFEDC, 0xCDDE6496, 0x65CDB919, 0xD174740E,
+0xC2CF5428, 0x25D814F9, 0x9805810E, 0x36D054CC, 0x11E9C97E, 0x4F7E4239, 0x10A0CC59, 0xA527B6C8,
+0x5366EA7B, 0x0E912D06, 0xC2F88284, 0xF8C358DC, 0xBAE85C3B, 0x897A6472, 0x1A0007C4, 0x6EB62C3A,
+0x2DC86A2D, 0xBEB06598, 0x0943AAAC, 0x005AAD75, 0x31AF420F, 0x57FD06B4, 0x06E62468, 0x41F8D424,
+0xEB773626, 0x3604D26E, 0xF10CECA1, 0xF92C7BE4, 0xBCC7DA20, 0x67B5497F, 0xBB606619, 0xABEDEDC3,
+0x0E41AFB8, 0xF1097F4F, 0x08F8331E, 0xEEF4C387, 0x76D5B044, 0x611DDF34, 0x86F4B485, 0xC972FBF7,
+0xA6500835, 0xD43B2D45, 0xABE67441, 0x4D179A13, 0xCF24E83F, 0x34BF477F, 0xC736E5D7, 0x2D6AE6A8,
+0x23800BB9, 0x3A7A0C9A, 0x7E2AD4FB, 0x7774A98B, 0x9BA720FF, 0x05D97159, 0xA602749F, 0xEB8B2032,
+0x2D84F244, 0x0092CED5, 0x1C01F94D, 0x4C564946, 0x6AAC3EE8, 0x5F0A22D5, 0xB1553723, 0xCC6ACBC7,
+0x279362F7, 0x21109B4A, 0x16A3D163, 0xF3F75F48, 0xACD8B5D0, 0xD903B548, 0xBC0DEB8B, 0xF527F869,
+0x36F4A9C3, 0xEB0ABC08, 0x38C0798A, 0xB5F58518, 0x9D2A513D, 0x82953E6F, 0x65F51863, 0xB8F7CB92,
+0x30D0BEF5, 0xA1AA4A3A, 0xA68E6047, 0x4F6FAF2B, 0x6F2F1B19, 0xF6724551, 0x2FA597F6, 0x4D14100B,
+0x338AC13A, 0x4BF1D396, 0xCF5180F0, 0xB11E2EFA, 0x029A504E, 0xDD020C71, 0xD033DC56, 0x51F38932,
+0xF84F903A, 0xC9D9E0F8, 0x1B398FEF, 0x77D49A2B, 0x5284A17C, 0xB816BC1B, 0x03EB597A, 0xB25862F9,
+0x1E4D38FC, 0xB30F5DF1, 0xAB21CDDE, 0x5C276856, 0x8D68C4AD, 0x540134A0, 0x8A6E616F, 0xF194E656,
+0x713CE738, 0xA5E652C5, 0xD660A995, 0xFD5990EC, 0xC77A667D, 0x302CA419, 0x0585345F, 0xBF6C8EDA,
+0xA8DA76EC, 0x39A00390, 0xB6CC0FEF, 0x0E274A29, 0x1EEBD1FC, 0x0D1B6203, 0x6098728D, 0x1ECBFA9B,
+0x1287DB52, 0xDBCA11CC, 0xDB8D44FC, 0x4DEA7922, 0x36F89C94, 0x651BEC46, 0x09F29A83, 0xE04FBB32,
+0x49514D62, 0x40E8DD17, 0xCA6911A1, 0x0AB2CD52, 0xCC1EF395, 0xC601BA0C, 0x7FA8BA9C, 0x82BDA3EF,
+0xA98C1496, 0x6427BAEA, 0x2DFF7AD0, 0x10D2CA47, 0x70DB9E07, 0x1038E602, 0x85B273ED, 0xE1028DBF,
+0x2DB15E0A, 0x4223B4A3, 0xA8DEF7C0, 0xBE7BB7CD, 0x7860CA17, 0x719478CF, 0x7994CF25, 0xFED55BC0,
+0xA3EBAB7E, 0xD81FAFAF, 0xFDF86E86, 0x3B0E1EDF, 0x8E285837, 0x98F9A41D, 0x72F0619C, 0x8644DB89,
+0xC65344A7, 0xC207E683, 0x5A4B1C65, 0xE1E37558, 0x9CAD1E27, 0x375B4694, 0x1D5F32B9, 0x04A1730B,
+0x8C5656A2, 0x74C646E3, 0xB5935849, 0x320A8DB8, 0xE7D7A870, 0x417BC4EC, 0xE2F2E16C, 0x6A1F0FC1,
+0xAB1FD004, 0x08E0A736, 0x8FE9D26B, 0x86757E6D, 0xDDAB713E, 0xAD3154CB, 0xB8C35B05, 0x2F4B6CA5,
+0xC1F3C2FB, 0xCC4D4733, 0xE06713B4, 0x8E556BB2, 0xF78AEC8D, 0xFECE6698, 0xD87827C6, 0x9B8B1267,
+0x6762EB56, 0xCFF23D65, 0xFE786729, 0x69A15FF3, 0x143C7A11, 0x1182C0C0, 0xF3733EED, 0x9FAA74AC,
+0xE05E99DA, 0xCB1DAE1E, 0xEDFD7CC0, 0x212F07BF, 0x7A00C7E7, 0x5C258873, 0xBF96E481, 0x4554CDC8,
+0x34736C56, 0x50986F60, 0xE890E9CB, 0xA14ADF4C, 0xCE2AD1C7, 0x59B52361, 0x8D5CB6F0, 0xE58824DB,
+0x1830EED9, 0xFA2F3654, 0x288BE01F, 0x250D2DA6, 0xBA08C802, 0xF2BFA217, 0xD1131EB1, 0xE8BD0DFC,
+0x1346A42A, 0x3A566D72, 0x0F65D1EC, 0x48C3A07F, 0x5486796C, 0x531EB796, 0x9C670921, 0xEA9B76FB,
+0x2774DF3B, 0x9DB62B31, 0xC73609CE, 0x1060A72B, 0x9C7D8F51, 0xA13E9625, 0xC4619C13, 0x921D8020,
+0x78A98927, 0x627CCA1D, 0xD850F2D4, 0xA9569748, 0xE88D0EE4, 0x0ED7B571, 0x150B3DBF, 0xB33A9850,
+0x5D3341BA, 0x19DE8477, 0x85A1B280, 0x49049383, 0xAEEC635C, 0xBE6BB886, 0x710F148D, 0xD289CC93,
+0x5F74EF7F, 0x91BB2BA1, 0x30B14294, 0x7EA955F3, 0x571EBD19, 0x0A4447BD, 0xAED1AA3E, 0x7A24D0D0,
+0x5DF2ABA7, 0x27B9E948, 0x7D9FFDC9, 0xB912E3FB, 0x857EF027, 0xB39C4214, 0xAC0AF5FD, 0x08BF7139,
+0xF780B46D, 0x3708E57F, 0x374D9C24, 0xCDEEBAFB, 0xFEB318AC, 0xD956A1F0, 0x83BA9857, 0xCBE5109F,
+0xB3DEA0CE, 0xA538620B, 0x799DAC49, 0x1BC31E9A, 0xD25BB6B6, 0xF1B19B3E, 0xEA514B94, 0x5A3638C1,
+0x4CBBDA80, 0x744E1A9C, 0x3559CB89, 0xD8276C3F, 0x11BC3A68, 0x0A8DBB18, 0x0E85B851, 0x3C8F2B0A,
+0x81DE9154, 0x699B2DFE, 0xDD1B0450, 0x75A6DED5, 0xEAF94374, 0xA08DC970, 0xA61E30A6, 0x83CE67AF,
+0x3C94EFB8, 0x7CD03C3B, 0x3340877F, 0xCA7161D3, 0x8BAFAE95, 0xD8F9B09E, 0x35E79F8E, 0x5FCCB9F0,
+0xA269E5B8, 0x8F221C0A, 0x05FA4CE6, 0xFF164ED6, 0x06C9BCA0, 0xC4E65BE2, 0xE097575D, 0xD044D694,
+0xBC7A57FA, 0x4D47D608, 0x26B52595, 0xB268F3FE, 0xA4D72583, 0x28273E19, 0x7177C252, 0x23721130,
+0x462B2D10, 0x9C073D45, 0x80E57641, 0x1F871294, 0x3FA502A8, 0xA56B47AF, 0x1F4FFD3B, 0x3517AEA6,
+0x43DB0436, 0xCD16ED0B, 0xEDE401D8, 0x5233E0E9, 0x0FF81323, 0x7463B8AC, 0xAD7970AB, 0x5CF52641,
+0x2CF24E08, 0x74FBBC90, 0xFFC9D21E, 0x19436B6A, 0xAA3491DC, 0x69EDA24C, 0xE0B4F2B9, 0xBCD8C75E,
+0x4F50DF3A, 0xF670D2A5, 0xC40FDF00, 0x9F35E1E6, 0xE9EAD428, 0xA10A7665, 0x2135385C, 0x172E8965,
+0x5098242D, 0x3444FE1E, 0x0146CB12, 0x5384211B, 0x34E4931C, 0xDC3A55C4, 0x1C77CAFA, 0x33C07842,
+0x1D09BD13, 0xF6CF4323, 0x2F005025, 0x6EC9C9D1, 0xA793E060, 0x76AF8B45, 0x24BAD02F, 0xC396102D,
+0x5193A155, 0x7CD154F4, 0x25FD4EF6, 0xF6A01FC1, 0x4FFC7D3F, 0xD0A958F4, 0xD6665F4A, 0xEEC26955,
+0x61C729EB, 0x44B49454, 0x534B5974, 0xFBAD25B4, 0x968B8AF2, 0xBBF2F5FF, 0xE8C285E4, 0x22289D54,
+0x2EF73406, 0xA0EA7974, 0x295137BB, 0xEEDD1DA3, 0xB531AABB, 0x6DDF6718, 0xDBF77C00, 0x1EAE526F,
+0xC232C631, 0x3F6782F7, 0x68990F98, 0x2C8D5904, 0x95C827DF, 0x694DADA6, 0x52BA6427, 0x1EB204D4,
+0x756BA728, 0x6922BD6F, 0xB119B5D3, 0xF8EBBCF9, 0x5C4AD6FB, 0x72ACC48D, 0x62C478EF, 0x859639B9,
+0xE6E31573, 0x78A499CA, 0x3538838E, 0xEC4C2F80, 0x25135D3C, 0xC8700110, 0xAAA382B8, 0xEBD06CDF,
+0x445D79BF, 0xB890235F, 0x3463A70D, 0x50A90DDB, 0x551CA120, 0x12B7B32C, 0xE2B3DBF3, 0x26388065,
+0xBFB72363, 0x81B625B9, 0x52A73AE6, 0xB80CB7EA, 0x6BAF9DCF, 0x5A34763A, 0xD8F4CE36, 0x528154BD,
+0x43A612E3, 0xB07380BB, 0xC83B4210, 0xDA45A69F, 0x586340E6, 0xE3CF0261, 0x2EE4B792, 0x9B74BA6C,
+0xCB1D2868, 0x0E9C89F2, 0xE7A12B96, 0xEB8469D7, 0xDC3BBDF7, 0x3953B10A, 0x7CF813D0, 0xBA6F4E63,
+0x0CF28290, 0xC4E7D3F6, 0x028A37DA, 0x3F77ECBE, 0x7B8A8272, 0x57B3F8AF, 0xB2283A86, 0x687E9915,
+0x5D7D27D8, 0x0F073C43, 0xDB0F3516, 0xCC236A38, 0xA7AF9D57, 0x6861F46C, 0xD9A1061C, 0x094EBE8A,
+0x5872284D, 0xDEBE059A, 0x16037989, 0x66D5B460, 0xC5E7EE58, 0x1A83B7E0, 0x902AE0F2, 0x07E5F3FE,
+0x76DC07B8, 0xF247E1D2, 0x92A8EF09, 0xEA010DD9, 0xCC80A87E, 0x45755BFE, 0xFBB2CE03, 0x3FEE90FF,
+0x4CC6970E, 0x3F760158, 0x97412A84, 0xF1547599, 0xC8AADED6, 0xF9FE6806, 0xED0A6DDE, 0xEE6078E1,
+0x1C1E2317, 0x07E08EDB, 0x130695A0, 0x11A7275B, 0x782613DD, 0xAD41EA87, 0xC27263B7, 0x07438F56,
+0xC9284F5C, 0x81F0722C, 0x28F2AB79, 0x56925D3E, 0xAC9A7666, 0x62C1F75A, 0x8BE70085, 0xD4C4F544,
+0xF99BB46E, 0x1379A4E1, 0xCD163AA0, 0x58D3DD75, 0xA5C267B1, 0x45BF2CA1, 0xC70BD003, 0x69CB4FF7,
+0x7BC7FEA9, 0x874B3A4F, 0xE404ABDD, 0x8AF48318, 0x6749C9CA, 0x11B1E799, 0x0D882828, 0x80080A05,
+0x0AF842FF, 0xF3589CB5, 0xFC7D3202, 0x10FEE68A, 0x9A789E84, 0x8917DC8F, 0xBD6B6A46, 0xB55223E4,
+0x3984DF92, 0x344C226F, 0x04992A87, 0x0CB8CB15, 0x7B64E3F0, 0x871BBBFD, 0xF07112C9, 0x90BE45BB,
+0xEEA32D76, 0xA8F42ADF, 0xEC6C6A6F, 0x58ACE09E, 0x3E74AFF6, 0x5BD68AC2, 0x7B30D035, 0xC9057689,
+0x68AD809A, 0x272B497B, 0x45EFF333, 0x787582B7, 0xD18BD1E0, 0xD94C18C3, 0x7EA92B26, 0xB3A60A87,
+0x1B455289, 0x6B9E159C, 0x411985E4, 0x6C481726, 0xBE2CB4C5, 0x106392F0, 0x25C8D28A, 0x97E6ADF2,
+0x0B104730, 0x7287AB26, 0xE833D287, 0x52E47F7D, 0x32AC6CC6, 0x8FB735ED, 0xA51B4B34, 0x850967CD,
+0x79B36678, 0xBEA788E2, 0x2C82ADAD, 0x95F2283A, 0x06B55673, 0x903EBECD, 0x57B74F84, 0xA47F8DCB,
+0xB1D41EE0, 0x2E35AB4E, 0x36CF39BE, 0xCD6CFC0A, 0xFD68A174, 0x83D50D2F, 0x615B4D30, 0x39034643,
+0xA5E26F36, 0x6590D085, 0x6FA7D454, 0x04603BFD, 0x0338642A, 0x2A03D365, 0x37B57F61, 0x0326E959,
+0x4C2238D7, 0x004682E7, 0x02547CD3, 0x074C7DEE, 0x8C3F46C0, 0xA0A98FAB, 0x183C20CB, 0x958E9B6E,
+0xDCC946BB, 0x0920D576, 0xCF69D32B, 0x734DFAB9, 0xD8DBFAFB, 0x39067349, 0xE91D5473, 0x755CD025,
+0x43578C54, 0xCEFA8848, 0x9F73EEE8, 0xBA653E9E, 0xDD5F40D0, 0xCD52DC31, 0x4875D057, 0x5305E7DD,
+0x463689B0, 0x61983A3D, 0x3899E0A7, 0xBCFFC00E, 0xC15E6BDD, 0x58DB2056, 0xD54B2B17, 0x4C92CE57,
+0x0631F0C3, 0xB8E2B51F, 0xEAD37223, 0x6FD7B0C3, 0x236987E9, 0x5C5EA5BA, 0x077C57A0, 0xB82F75A7,
+0x241AEA98, 0x7B8A4E89, 0x5EA04F15, 0x654C4089, 0xCBF3FBED, 0x8D831AF0, 0x494EA94D, 0xD4C17FC9,
+0xA0A7DB6A, 0x63E8D126, 0xB9C23782, 0xB4FFB1BF, 0x56D57810, 0xD985714E, 0x940964FF, 0xBA7AED9E,
+0x577FE2E7, 0xE27B0EB3, 0x237582B2, 0x907D976B, 0x3706E9EB, 0x7375938D, 0x275A9C80, 0x705F5645,
+0xFD650C25, 0x6ACAAF3A, 0xF27BDDEB, 0xEB830EB6, 0xCA42FA8C, 0xB752531A, 0xF38907B8, 0xEEEAAEEF,
+0xD5CD67A9, 0xD384C4E6, 0x4F02FACB, 0xB9F5B311, 0xCCE91A9D, 0xC2F5044C, 0x2BC0DFB9, 0xDED91680,
+0xDFF68E74, 0x09650866, 0xA1241469, 0x3651F4C9, 0x604FFFD3, 0x963C0F05, 0x8D06B08A, 0x2562AC82,
+0x2B3B2BFA, 0x7DA7E6E5, 0x27DD2C08, 0xDBB57428, 0x2ACDFFEF, 0x9DE8D171, 0xD8C7D583, 0x3C664679,
+0xC0F7AA7B, 0xCE8DBBA9, 0xDDDA4DD2, 0xA5A53A62, 0xF0E1AAB4, 0xAB3CDA1D, 0xC70125A8, 0x9C2796CA,
+0x3A3DA34B, 0x4AF41FE6, 0xF3B03F57, 0x39652EEE, 0x051EEC2B, 0xD5C5C02A, 0x63BA1A72, 0xFDFB3C8D,
+0x7D66F5E7, 0x5BC4BAB8, 0xE37ADFC3, 0xBA34BD8D, 0xB1FC7B9C, 0xA75F70B9, 0x3023CBD1, 0xB228FA75,
+0xEA74DBEC, 0xA4692C82, 0xD83F08B0, 0x187670DA, 0x4D728AD0, 0x61D642C4, 0xDFA56A9A, 0x6396E006,
+0xBC19E014, 0x47642743, 0xA7A5E789, 0x2154FBDD, 0xEA1B3E83, 0x74FD8B60, 0xF81B3945, 0x330F70E4,
+0xC3FB7292, 0xDDBDE126, 0x8C54896F, 0x2726F183, 0x9E1C2C2B, 0x41359CE5, 0xE861A920, 0xC87F22A5,
+0x5EBB48D9, 0x013B28AB, 0xB1951CC4, 0x582E87B9, 0x6908F37E, 0x135A9AB9, 0x98F840A6, 0x66674CED,
+0x333B7951, 0xAFA3B57B, 0x26E30E5C, 0xADDCB74E, 0xDFD729D4, 0x3F9D9B36, 0x670B3410, 0x1CEF93B0,
+0xA0043D01, 0xD3338A25, 0x53DE41E2, 0xDD58F970, 0xDA3D122E, 0xDCE8DF1A, 0xD0F55CAD, 0xA654B5BF,
+0xDEBBF766, 0x8DBCBFF0, 0x88AD2530, 0x213B2347, 0x0BD345FA, 0x5DA3FDEA, 0x0190B302, 0x9A0275FD,
+0x78EBBEE5, 0xB62215E4, 0x435A18DC, 0x5646E4E9, 0xBA90EDAB, 0x85285911, 0x3C3902FB, 0x94D6E0D9,
+0xB14706A1, 0xC0E3174A, 0x6CC5152D, 0xBF302BBB, 0x04277864, 0x4E105F8A, 0xAEAF9B9D, 0x494CFF14,
+0xCA05D61B, 0x7F4AF589, 0x5C0CB1F0, 0xCC3727C6, 0x7B995549, 0x995F631F, 0xE5760912, 0x17C37C61,
+0xC70C8A79, 0xE7912CC7, 0x35E7E194, 0x3E94A392, 0xDAF5BE13, 0xAC1BC7D3, 0x62726BE5, 0x5AC550A1,
+0x2223F45B, 0xC9154F1C, 0x263FD7F9, 0x53F19F92, 0x804A7076, 0x8123BAF4, 0x7EF7A9C7, 0xAC79808A,
+0x5C2E83BD, 0xBFDE6293, 0xBC2B7188, 0xF1D75B47, 0x5A4C1975, 0x2E2497DF, 0x3E0E9016, 0xA7751D0B,
+0xB681A3D9, 0x5B45904B, 0x9108D3EE, 0xE2014D3D, 0x6CCFB8B6, 0xFD148112, 0x4B9FA8DD, 0x4CC8DB6A,
+0x06D1C1D2, 0x18E352E5, 0x24C0ACDE, 0xF2F7EE22, 0x42C4D956, 0x1D9775EB, 0xA31F5A3D, 0x3D0888FA,
+0x728C2705, 0x47D349E9, 0xE6A1AEA5, 0xB87C3498, 0x97EE60B4, 0x8B0EDDC2, 0xF87FCF46, 0x0D377C1B,
+0xB9C1911F, 0xA5B61DA3, 0x26908D55, 0x985655D5, 0x0094CAB5, 0x59F2E857, 0xB5B3FC80, 0xFC3F4CD6,
+0xD20CE7FF, 0x0DC85387, 0x37107871, 0xC3D9BD1B, 0xBECDED3A, 0x5008CABA, 0x4CDE000E, 0x535A9188,
+0x62732615, 0x618B6C2E, 0x4C9B1FCF, 0xDE4268B1, 0xFF1E8C98, 0x2D309538, 0x24298C08, 0x0BCC089B,
+0x1CE3EF28, 0xFF44F607, 0xFC2437E9, 0x3146ADE4, 0x29C248D5, 0xE90A5399, 0x372AC451, 0x565A5C5B,
+0x789EE62C, 0x088C03D7, 0xCAAA03F1, 0x5754B4BB, 0x843BC9D2, 0x8B048732, 0x354CF94A, 0x191AECF5,
+0x7303AD72, 0x2877F887, 0xBF1F252D, 0xBE8B8877, 0x16059CB3, 0x9BF637BE, 0x94CD036C, 0x136F40B1,
+0xBC98F966, 0x9EC1B228, 0x662E1095, 0x05AE05EE, 0x29782732, 0x4FE954C6, 0x43911E6F, 0xB682A030,
+0x8C021B52, 0xD29D9A2E, 0xD5D5BFF9, 0x2566054D, 0x5750CEF8, 0x73BCFBF0, 0x1C387F01, 0x9B0A1543,
+0xE26FA7BE, 0xAE2601FE, 0xCD25ECC3, 0xB50DA648, 0x8AE871B2, 0x8050C26B, 0xFAB0A65F, 0x8F4C1E93,
+0x67AD34FC, 0xB34F1674, 0xE2D3FE21, 0x2B15B8C3, 0x0005F1BD, 0x46E1CB56, 0x6867B6BF, 0xD1838A97,
+0x5C0AA880, 0x4DA1E310, 0x3E35CC63, 0x31A6AD70, 0x4B363063, 0xF81EDEF8, 0xA54A1A17, 0x9524515C,
+0xDCF24155, 0xA4734CFF, 0x04DD2E97, 0x55AFD0F2, 0x61F350AD, 0x3DDEEA4A, 0x1BEE6F7B, 0xDD9D7A23,
+0xBEF25BBD, 0x42CDFEE6, 0x0CFAE152, 0x209652C9, 0x3A2960A3, 0x840EFCBA, 0xD726D092, 0x3625B49E,
+0xCFA6136B, 0xAA669D7D, 0x496997E5, 0xF355F0C3, 0x06E5BEE5, 0xFB00FA24, 0x86F2968D, 0xDD76D04F,
+0xECF30692, 0x932FDD82, 0xA0872A00, 0x138DF81F, 0x12E8DB4C, 0xDFCFB06D, 0x30076541, 0x30BBCDE9,
+0x45C8D12C, 0x2DA0B978, 0xBDAFF140, 0x3BC5FF6B, 0x5D5C3B18, 0x2B6043A2, 0xDFD16F7C, 0x5D19370E,
+0x05332A9B, 0xC33612A3, 0x4C31AE3A, 0xC57EEB33, 0x0DEAE0DB, 0xBDB09CF0, 0x30370CD9, 0x38F6B6E2,
+0x126B8C41, 0xBAB1484E, 0xCC0581AD, 0x800FC957, 0x8E49FEC3, 0xB971C9F6, 0x17E85F6A, 0x008BB7B7,
+0x3E99DB48, 0xC80EF763, 0xC0F9DE4F, 0x8B33A2E7, 0xE83311F7, 0xCB7C89CD, 0x59377ACA, 0x2938D562,
+0xBA422574, 0xBCD2B79E, 0xD13F6A47, 0x42DA8632, 0xD70D6F3D, 0x83D707A7, 0xC0D83CBB, 0xD17E0B48,
+0x40C6BCBA, 0xCA628F8C, 0xD3CB4CA2, 0x2E920F6A, 0xF55F4495, 0x7CF92059, 0xC743641D, 0x715CBBB0,
+0x5791D47B, 0xF0FE7D05, 0xAC51A217, 0x41BC9166, 0x655D0E9A, 0xDEF35DBF, 0x74066BE7, 0x4CC27F15,
+0x09BA9148, 0xB84D1022, 0xD9E30764, 0x4B822C08, 0x0D2E7752, 0x4C425031, 0xB3AB8E77, 0x727BEAC4,
+0xE7B148CB, 0xEEF24209, 0x1E8FC5CC, 0x8ED21323, 0x85575B39, 0xC030F922, 0x9760C042, 0x0FFE79F6,
+0xAC577C78, 0xC876B48F, 0xF5A25211, 0x462739F5, 0xCB5EA0BA, 0x23E16B02, 0xB2C1DABE, 0x60A28D58,
+0x2E93BBA6, 0xFC6C3277, 0x3F62475A, 0x9BED4405, 0xD8CB8769, 0x00BE0CC2, 0xB909A058, 0x7C5B60C5,
+0x3D15573B, 0xB65FB912, 0x1724D03C, 0x88E5CA5A, 0xD9B6FE4A, 0x3FD6EAA5, 0x3A8E3EAE, 0x5A6D2894,
+0xA6F210AD, 0x6191DA1A, 0x6207EC46, 0xB15DCEEA, 0x3F20CFC5, 0x62EDBC06, 0xFF8BEBEF, 0x5D826C8D,
+0x562F971B, 0x3D681531, 0xB29E9A1A, 0x3BAD4AB5, 0x6062A16F, 0x7957983D, 0xA1D6A316, 0x5D47954B,
+0x4198C7AB, 0x5E7570D4, 0x0468255A, 0x5A5518A8, 0x59E59550, 0x5D0EE66C, 0xA91A4BCC, 0xDE50D32D,
+0x0D3CBA6D, 0xC2D95D15, 0x7EE8B6DA, 0x8F22781C, 0x1D991B40, 0x095512CD, 0x88BC700D, 0x23396959,
+0xCB168E2C, 0x577478EB, 0xC585C693, 0xBC15862D, 0x81BD212A, 0x1F393CF2, 0xDAC2CEF9, 0xBAA0C9F8,
+0xC05F7DF8, 0x0EA11439, 0xFDA008DD, 0xE79B7EBC, 0xCD813D10, 0x651E694F, 0xE103AEB7, 0xA0FA6A12,
+0x36FF237E, 0x963C62C7, 0x907B0C5D, 0x912BFF6F, 0x3DEF272A, 0xBCD587B2, 0x4755C286, 0x878B2BB7,
+0x477AFF86, 0x384B19BF, 0xC6F90B48, 0x94A30967, 0xA5318B5A, 0x5C791266, 0xA18AC834, 0xDE623908,
+0x531514C3, 0xE7C147D3, 0x9BB66FAD, 0x719854BA, 0x782E3740, 0xB434467A, 0xC36D6AB4, 0xC48E34A5,
+0x42964F67, 0x33D20DD3, 0x48B244D7, 0xCA65A598, 0xB3D94255, 0x69C348B0, 0x15A137EB, 0xF3536C1A,
+0xDDE6D720, 0x31D2E0C1, 0xA36D7FD0, 0x415717D7, 0x4650906A, 0x472CA25C, 0x97A9FDD7, 0xE1F3F40C,
+0x558586FA, 0x625DB25B, 0x3C2F10D9, 0xDB660434, 0x9D8A0397, 0x5CE8AE85, 0xDCB98B0D, 0x2FD1CCF0,
+0xB4EA1B2A, 0xFCD32A47, 0x21A4BC77, 0xC421B676, 0x84E993D6, 0x97AFDB84, 0x13109FF9, 0x0D3625A7,
+0x088EFBF5, 0x749AA5DD, 0xAD1D04C6, 0xF3270412, 0xA3361046, 0x5B40B39B, 0xB21C90DE, 0xAE7960EB,
+0xEB2D803A, 0x56A941C2, 0x6F949727, 0x7868BCCB, 0x9E93F412, 0xD7B2EA07, 0xE3DCFAFA, 0x02B8456C,
+0x0D27E6E1, 0x30C1A19D, 0x364E8873, 0x5E87E918, 0x5519DBBE, 0x09DA5BDF, 0x66C94EAE, 0xA2400B16,
+0x93F3FEC5, 0xAD051D9F, 0x48DE4CF8, 0x4EC94DBE, 0x3AA4A72E, 0x10A59AAF, 0xD59A0208, 0x8737FCC3,
+0x0C8621E6, 0xAAB205D4, 0xC182861B, 0x6D6F7231, 0x942420FE, 0xB7A15BF6, 0x3F69F50C, 0xB16F276B,
+0xB6188407, 0xE7B6D28B, 0x99613835, 0xAE80FD34, 0x6E944BFD, 0x30A9A918, 0x09C871B2, 0x9BF81F32,
+0xE4803F08, 0xC91037D7, 0x3B665743, 0xE84D3028, 0x76E2D46D, 0xCF67CFEB, 0x36DBFD3F, 0x274113E0,
+0x6C849C66, 0x4DCFF426, 0xC4DD7D37, 0x6420BFA3, 0xC3007E9A, 0xC0096AAE, 0x15661456, 0xE9656BC3,
+0xAC24D6D2, 0x8A8FEC34, 0x0FD02B17, 0x193D1C64, 0x2AC5462D, 0x4D7010EF, 0x54A27F58, 0x41652233,
+0x43BE05C4, 0x89EB3F59, 0xC731278A, 0x5117063D, 0x1C7E5576, 0xB706C18A, 0x3FAB301E, 0x124B9EB7,
+0x4A82530A, 0x04787801, 0x1D9AABBD, 0x533172B9, 0x05E1FCE9, 0xDA3A7D38, 0x30798AE3, 0xDB186334,
+0xA6912F26, 0xA22C036C, 0xEE2B5496, 0x4C4AAD1A, 0xA70ECFF0, 0x64134EE0, 0x22D4240D, 0xEA65C9A8,
+0xFE5DAFC0, 0x519FCAEA, 0x09D5BB5D, 0xAD112F88, 0x56CAB7FE, 0xD2C6090D, 0x999D78EC, 0xA0C60BF2,
+0xF873959A, 0x625F987F, 0x51D0A843, 0x84F2181E, 0xAC97191F, 0xF0690743, 0x7AAF12C1, 0xBA15007C,
+0x1B2BF569, 0xB72FE48D, 0xF138E2F7, 0x9504D8F6, 0x7DFC69A7, 0x725C18AB, 0xD30F6582, 0x218EF8E4,
+0xD9070B11, 0x6CB70318, 0x41C5DB3B, 0xE4860176, 0x430B641C, 0x9A34FE3A, 0x5B5AABAA, 0x11518512,
+0xB3F28AEB, 0x470305A4, 0xC54B36B2, 0x5C71F575, 0xE9280207, 0x460A21DD, 0xA9BC96A7, 0x1541AC18,
+0x02A267BA, 0xA06CC976, 0xEC348862, 0x4EC4BA68, 0xA455DF9E, 0xC5D8C81B, 0x677C4901, 0xA71B0D5D,
+0x817CC83C, 0x080B680F, 0x770E91E5, 0x2BDD9F86, 0xD36F8282, 0x33577DC0, 0x630E9671, 0x4C9C6B19,
+0xF8A55F06, 0xF2EA8BFD, 0x1E1C55D8, 0x5B8B9DB1, 0xB117D98F, 0x4A8685A5, 0xFED37FA1, 0xCE5FDED1,
+0x95A1AB62, 0x23F47E0A, 0x105DE781, 0x1AB2347E, 0x8F31726E, 0xB3A2374B, 0xFE7A0138, 0x77F7EB42,
+0x16279D42, 0x127B9D91, 0x3078E07B, 0x7F6E3A90, 0x0F2E22CC, 0xB1320877, 0xE2B72947, 0xDDEE4922,
+0xA23434B9, 0xAD9F106F, 0xA9929B8F, 0x6103787A, 0x934F274D, 0x26BF0CBC, 0x00B677EB, 0xDA35158D,
+0xCE6F5145, 0x25706408, 0x3E699AB5, 0xEFC7907D, 0xD59F401C, 0xB421B741, 0x5ECFF73B, 0x9E6499FF,
+0x5D6CE1D8, 0xCD2FF39C, 0x7B44B475, 0x050032B5, 0x0066C7A0, 0x4F75038D, 0x5840E2FF, 0x0CDEF933,
+0xDB39DC96, 0x370D8D7A, 0xC658F6C1, 0x671E6DFF, 0x70828BD1, 0x8B180FFB, 0xCB81674B, 0x717251D7,
+0xB37D01AE, 0xAF2B2EC1, 0x0FED6C98, 0x63340CCF, 0x4E62F7C8, 0xACFF6A37, 0xA0788C70, 0x64D7AE58,
+0x1CC231F1, 0x8EB8FE84, 0x4D905161, 0x5BAF8F72, 0x88645DBD, 0xA28E3836, 0x0ECEA0B4, 0x87D7638A,
+0x32493B77, 0xDB0A8524, 0x5CC37BA3, 0x4334E47E, 0x485D8A1E, 0x887C788A, 0x17113AE8, 0x146E7611,
+0xE21F0A9D, 0x94E827FA, 0xCF409144, 0xFED6599B, 0xBC9B2026, 0xF431CDB9, 0x18AD6771, 0x973C341E,
+0x9666EC80, 0x49DE4908, 0x3BCD39B5, 0x0399EAE3, 0xDE615F4C, 0x2CCF7936, 0x979F48CC, 0x3A14DF08,
+0x6B0394EC, 0x648C5D71, 0x928A4E04, 0xA1B4E20B, 0xDC7441EC, 0x30DA15E7, 0xCE4C2D1B, 0x6760556C,
+0xBF4D7710, 0xCEA8755A, 0x4E341CB2, 0x50C186A2, 0x8AA6EC8C, 0x152E5B04, 0xCFA10BF5, 0xDE6A2957,
+0x09036F4D, 0xF33013A0, 0xA15FB5A0, 0x3C8201F0, 0xA99D305F, 0xFBC91708, 0x1CF67FC1, 0x320FB9B6,
+0xF52943DB, 0x9F03F0AE, 0xF77838AF, 0x8EDCB9B9, 0x23C43CB6, 0x73F4CBBB, 0xD361F71D, 0x04FC81D9,
+0x8A32ED0B, 0xCC109BDA, 0x5D666D29, 0x16F0C693, 0xD3AF7147, 0xC4D3FEAC, 0xDBA1D7C2, 0x36896D9D,
+0x3D220D4A, 0x87535B5E, 0x8C155B6E, 0x8639FC0C, 0x2EDF6AE5, 0xB341C1B4, 0x1AD29AB7, 0xF752F5DA,
+0xF7A3AA67, 0xD35E4185, 0xCA430375, 0xC57DB3A8, 0x8ACDBC03, 0x7FBA8011, 0x429FF3DA, 0x93FEAD99,
+0xE5071BF3, 0x9039D0A5, 0x4EC6FBD9, 0xBED3DA8C, 0xEAE53F45, 0x2D883887, 0x20E428B7, 0x2C640675,
+0x7E2FBADF, 0xB2D873FE, 0xFBBA3F11, 0x1B750EB9, 0x2729CC0F, 0x667881BC, 0x9183DA2F, 0x1908E84E,
+0x0F2ECD96, 0xDB09FF55, 0x127340B6, 0x53FB30B0, 0x6E527A59, 0x81CD261A, 0x4F732E21, 0x82F73A1C,
+0xA3750353, 0x6EABCB76, 0xAC7C543A, 0x4754E01D, 0x134BDF4F, 0x7BD783D2, 0x94A9B98F, 0xFC0770FE,
+0x703D669F, 0x9537883E, 0x7E6DB566, 0x4737EE5C, 0xA087C4A9, 0x352F8F7D, 0x61AB52A7, 0xBAEC6682,
+0xA27C316C, 0x7F615393, 0xEC97E789, 0x822A3488, 0x94B8FD13, 0x8ABEF74F, 0xFF7C75A8, 0x35AF3ADE,
+0xD37225DB, 0x97D665CA, 0x83170D7D, 0x791F2093, 0xE03DEE27, 0x48E86470, 0x11C5A0EC, 0x71A461F6,
+0x0E7D77F5, 0x2D49BD18, 0xEF30BF0A, 0x02FC3616, 0x005EC083, 0xB75F5035, 0xB6C379F8, 0xFCBDDA48,
+0x53E2D3D5, 0x50974BF2, 0x19B724E7, 0x8F65342B, 0xDC419F7F, 0x8420A82E, 0xA89267BA, 0xCEE3F22C,
+0xFF77B588, 0xAD5176F4, 0x9E206279, 0x51E70AD0, 0xE309CFCF, 0x970F6088, 0x092704F6, 0x827A5EEB,
+0x06739576, 0xD855C67A, 0x973FA490, 0x115F51E8, 0x4BC9F158, 0x43D08B41, 0x627BDFA0, 0x1B46C98D,
+0x3B9E0C11, 0x9373B021, 0x712087B8, 0x8DDF12BC, 0x04EDCD6F, 0x150DD0FE, 0x1D39C525, 0x68BC55A5,
+0xC7EF4AB7, 0x14A9D8B6, 0x8FD48D85, 0x570D6E42, 0x1C768FB5, 0x23ADCB15, 0x05136041, 0xF19F0DA3,
+0xCFCA13CF, 0x08A24719, 0x5302CDD8, 0xC3E794FD, 0xF3882AB4, 0x4641AC8F, 0xAABF9DF1, 0xB32EF4FD,
+0xFE222F6C, 0x0D3026A7, 0x3E2BD7F0, 0x71CF0CE7, 0xD3CA03AD, 0x00342AD2, 0xC3E2DEED, 0x50A1F8E6,
+0x1EEFE15E, 0xF0C86B79, 0xD2578198, 0xDB963AC1, 0xF5E3D0A9, 0x884F895F, 0x2990ECBB, 0xEACEA7DA,
+0x4B0F8F40, 0x52E7573E, 0x48DED5F3, 0x1376DC1F, 0x882FEF6D, 0x0214C93D, 0xFC47FC82, 0x1AF2AF09,
+0x8EC1531C, 0xA43A7B80, 0x04B55281, 0x2048A200, 0x4E800473, 0xEBA61EBF, 0x7123CCC2, 0x71D81A81,
+0xE4551938, 0x03FCBB3A, 0x87C70115, 0xE244CD71, 0xA7574DFA, 0x353F73CC, 0x88F9C549, 0xF605FEAE,
+0x1E389F7B, 0x24297973, 0x7ECDF545, 0x4880D073, 0x4DFD47FE, 0x8D6C98AD, 0x5F90B551, 0xE40DD74B,
+0xB3A52B52, 0x1A259EC9, 0x3FBED1F6, 0xCFDFB4E0, 0x0D725072, 0xB75FE892, 0xF62FBC1A, 0xC37A9AD2,
+0xC07177BA, 0x48240935, 0x8E12BA0C, 0x644234DC, 0x22C4649A, 0x4007487E, 0x6670BD7D, 0x5F3BDB7D,
+0xE0539334, 0xDCBF1ED0, 0xA0D686AF, 0x43584A78, 0x41BCDE7C, 0x35C062C8, 0x71E6353D, 0x36BA3502,
+0x0C868719, 0x1E165907, 0x83B96D6A, 0x8992F78C, 0xDA23BC32, 0xD7C6BF6D, 0xB66C72F6, 0x0496AC7F,
+0x166A9AF8, 0x43BA7DAC, 0x1D9FB238, 0xD6E288F9, 0xDDAD676F, 0x7803CCD0, 0x6BF419E5, 0x61D0E4DB,
+0xA37ADC4D, 0x4C8A713F, 0xA63259D3, 0xB56478C7, 0xFFEB5890, 0x368D19F5, 0x0BA89299, 0x89E73C8D,
+0xB1828CB3, 0x73B233FD, 0xB3A1D668, 0xF75724BA, 0x6DE197D0, 0xE3676AD9, 0x459131F9, 0x8E6C0587,
+0x979DDA7B, 0x793607C8, 0xD5EFEE9B, 0x35168CB7, 0x964518D0, 0x0012BA4E, 0xBDD71E66, 0x620DCBE6,
+0x259D10E8, 0x626F3930, 0x55988283, 0xF110A30A, 0x6599BEEC, 0xB45CD48A, 0x5B1E18D6, 0x3A4208A9,
+0x89EE46B9, 0xAFC09C53, 0x1386182D, 0x1179B5E4, 0x5092DA6F, 0x9112638D, 0x3C820D25, 0xA12DC640,
+0x2D4F64FD, 0x202E4C20, 0xB02BB612, 0x1C4131CF, 0xE940B078, 0x97B67A8B, 0xC1CFE072, 0x93EE9D3E,
+0x437281DA, 0x674AE4CE, 0x7D932027, 0x1457C6C3, 0x96EECED7, 0x08559090, 0x2B6B8593, 0xD5E62EA0,
+0xE8D02267, 0xBED70A54, 0xDA0D45A4, 0xF0A43287, 0xA084AFA6, 0xB78C7ECC, 0x7F46DC77, 0x67F04589,
+0x4122DE3D, 0x96C81D44, 0xA6A7885A, 0xF632215E, 0x10F05D4B, 0x9F5FE6D2, 0xC3205E3F, 0xE177F244,
+0x2F593EC6, 0x6A481A9C, 0x82534468, 0xA225805A, 0x6A32AD76, 0x5E674755, 0xE1D8CF68, 0xFBD03404,
+0x22DCA22A, 0xB14E7497, 0x03E4084D, 0xDB8169ED, 0x05707975, 0x1BD00FB4, 0xA471C6A8, 0x4F3398A6,
+0x3592BA51, 0x1080A5D0, 0x4E67291A, 0xF8981DE5, 0xBCAD692C, 0x4EBFDE51, 0x75A3F25F, 0x97692F3A,
+0x31627731, 0xB0F29D9E, 0x03183B44, 0xD072CFC9, 0x44802F9B, 0x6ACE4B36, 0x4BB52D6D, 0x1CEA521E,
+0xCE9BDE36, 0x3246E0FD, 0x41221932, 0x711F0E3E, 0x0A6D400F, 0xF6EC086B, 0x89E30859, 0xAC380466,
+0xA2472634, 0xA27EC988, 0x539C9228, 0x26ECA97F, 0xAFD7CA47, 0x941D3CB5, 0x741AC664, 0xAF2418EB,
+0xE636131E, 0x3BAE5D84, 0x66D90DA7, 0x6065382A, 0xB95DC7E6, 0x43BC9C83, 0x653A3F89, 0x6AC55C28,
+0x10BD5F93, 0xD39A87E1, 0x145F5802, 0x290A19F2, 0x05FE6D45, 0x4E5F3479, 0x8E7753CB, 0x34585C3C,
+0x40416C30, 0x923D8577, 0xAA995230, 0xFDC56762, 0x9A7C9A43, 0x74408429, 0x4C84DEA2, 0xB4D7998F,
+0xF4852883, 0x3C9F9CA0, 0x6F675EEE, 0x47B731AF, 0xE006AA34, 0x85CDEBA7, 0xB1975D77, 0x5D85A840,
+0x0AA2FAEE, 0x469291FB, 0x33A19633, 0xC3557F2A, 0xBD15006D, 0x53B0D614, 0xA39F4492, 0x78131263,
+0xE1D7F46E, 0x6C77934C, 0xC00C7813, 0x5C100BE8, 0xFEA888C7, 0x728BBE3C, 0xCDA8598D, 0x30D62656,
+0xBEE6180F, 0xE93AB83E, 0x924A4A9A, 0x60851BFB, 0x38C15661, 0xB0D2A237, 0xC72C3B3A, 0x1DE93213,
+0x1067CDC1, 0x9ADB772D, 0xF599A0D2, 0xECD7DEFE, 0xC7D04251, 0x23D66C56, 0x6A7E1B33, 0xD4F75301,
+0x24F83023, 0xEE38A7C2, 0xC87CEFF4, 0x71FFC6F3, 0x00345775, 0xAE37DE9D, 0x0B4983FF, 0x1AA440F8,
+0xB0B5B7D6, 0x89425A75, 0x262413AC, 0x967770A9, 0x24098DB3, 0x4BB9D050, 0x3142C093, 0xDE3C95AB,
+0x169E7A54, 0x31A3A6E7, 0x8DC84BA1, 0xB458C465, 0xC7C3C91D, 0x22076B42, 0x429F4D21, 0x9FAFFE8C,
+0x4937FCB4, 0x1B4B668E, 0x5105B4E3, 0xE8214018, 0x6B912F64, 0x47BB541A, 0xC312F9CC, 0xE77A78B2,
+0x8F3BC4BC, 0xBCB87E58, 0x1601E14E, 0x2CCDF1CB, 0x28895927, 0x596DD05F, 0x7372B433, 0x2D5AF04B,
+0x080A1DE4, 0xF1048C8A, 0xD2B124AA, 0x046AF5D3, 0x05A62524, 0x8773584F, 0x0A4C4C98, 0xF29E9157,
+0x66BD588F, 0x8B351DB2, 0xB993A9B9, 0x0DE9C1D5, 0x9E168DC5, 0x601E57D8, 0x16647A0A, 0xA591DC6E,
+0x86C21334, 0xE12D25C3, 0x901E07F1, 0x62F9573E, 0x1DCCCBC0, 0xAE3F2677, 0x897912C1, 0xF89487B5,
+0x746FF3D4, 0xA3A6A2C2, 0x41F55C82, 0xA35A57BD, 0x18A0BF71, 0xF0F313BD, 0x35334913, 0x42C22CA1,
+0x4176329E, 0xE90AFA5E, 0xA1E1C4BC, 0xDD427086, 0xBEB8AC32, 0x9435A7D4, 0xC9B2F280, 0xA4FBB17E,
+0x639B6914, 0x99E1003A, 0x91205C5B, 0x97BCE18B, 0xC32ADACE, 0x061F2DEA, 0xB0E4216C, 0x4F9EAE0C,
+0x12BC947A, 0xB7F9C2B7, 0xF4CA473B, 0x8CC146EF, 0x4151087E, 0xAEAB96AE, 0x5D20B712, 0x624C5D2D,
+0xEC230ABE, 0xD0D87374, 0x88F72076, 0x8458B48F, 0xB9581D71, 0xAF43D236, 0xF314A906, 0xBACCF3D6,
+0xD93BA8CD, 0x578217FD, 0x2B49F7EA, 0xE931CA8F, 0x0EA36F43, 0xC4D9C33E, 0x5DDB6823, 0x9279B8A0,
+0xB03BEF4C, 0xD2C9EEEF, 0x4E7A2FDD, 0x57DD8BE7, 0xED48DCEC, 0x541B048B, 0x97D00012, 0xB05FCD2B,
+0x8A48A22A, 0x79317DFF, 0xCE1D2E2E, 0x7BD45209, 0x04E9CBB0, 0xB4F7E22C, 0x30AB6233, 0xFA48AAE5,
+0x95759369, 0xDF350371, 0xC41BE93E, 0xF9E037C4, 0x44BB8E2E, 0xE45DD37E, 0x2E9B1441, 0x9FF60608,
+0xF647FC5E, 0xFAB4EE17, 0x7CAE2B41, 0xDA622CE1, 0x23DBAA3E, 0x0ED48F22, 0xEE5EE337, 0x914179E5,
+0x00EE2EF4, 0xA7BC699C, 0xC3797468, 0xF51D234C, 0xA8CC971B, 0x7B7AE131, 0x16778FD6, 0x4BD14AAA,
+0xACF47606, 0xBB7D2B77, 0x2AC8BA66, 0x4F8977D0, 0x8BF39E2B, 0x647B1CAE, 0x2474FF15, 0x9ED7A83B,
+0xD3DB5A56, 0xE01135AC, 0x89970554, 0xA664F564, 0x05182DB2, 0x7963CF28, 0x674E8AE3, 0x55B97431,
+0xC6E5BBCA, 0xC538C5C5, 0x630371C5, 0xF4704510, 0x6915283C, 0xDF0453C5, 0xE1978AAD, 0x71BE7C90,
+0x8ACFC96D, 0xFDC4D237, 0xE4DF7AD1, 0xD97C283D, 0x9A8B5C0B, 0xF2BC4AAB, 0xAF23B6D9, 0xB748F371,
+0xE539EFC3, 0xC4A91441, 0x960BABFF, 0xCAFD75AD, 0x6CAAA7A3, 0x19E1E3EE, 0xFC84ED29, 0x7A863ED5,
+0xC1F69225, 0x55584958, 0x8BDE38BC, 0x9944CC45, 0x1A7E3A2C, 0xB96883D9, 0xCE609B1C, 0x9A93053F,
+0xE51BC249, 0x3C6694FE, 0x471C2377, 0x5488CEAC, 0x6A9B34CA, 0x4B6C65B1, 0xE8C41EDA, 0x4E1072CC,
+0x8039D575, 0x8C4BB001, 0xE1B7976C, 0xFB923C70, 0x5DE5AF60, 0x138F7412, 0x76D251C9, 0xA30D0B47,
+0xA85D1033, 0x3657F333, 0x161089C2, 0x1C67A150, 0x09AC0B5B, 0x87B9BC2F, 0x90AC4C42, 0x1FAD2EDE,
+0x58E7123B, 0x8653D907, 0x2C041410, 0x3C946AA0, 0x8DFFDD5B, 0xA93CD070, 0xE281A6E3, 0x3F7F125F,
+0xB73C3F8D, 0x32BDDF19, 0x4E5F7B11, 0x5191CA41, 0x089B0D31, 0x397E9036, 0x74529BA9, 0x220DF3F5,
+0xDB366B7F, 0xA577EFF9, 0x084C4CAC, 0x8009CAA9, 0x21E9AB15, 0x9C49C126, 0x69D041BA, 0x92657158,
+0x75B873CE, 0xA7CA9410, 0xB57C8450, 0xB5904BB4, 0xF1FB6CBE, 0xAFCCB825, 0x55771D9F, 0xED015431,
+0xBD2AE623, 0xF4FC5691, 0x622FF355, 0x093741A8, 0x925CF183, 0xF3EF3E68, 0x709DE0D0, 0x7FCDD0FB,
+0x2301CEA6, 0xF95023F9, 0x013013C9, 0xE2518496, 0x8ED117F1, 0x341C8AFE, 0xA4586CA2, 0x50B1B146,
+0x545C831E, 0xD73CAC4C, 0x06455708, 0xDB97F8C9, 0xCCB5C863, 0x3168CE2B, 0x9BDB8D9B, 0x5EF4BA5C,
+0xEF878A9E, 0xCD5CA9DF, 0x6CC132B0, 0xF5504C0D, 0xF913DF41, 0x6E01269B, 0x7C9EDD73, 0x864D625A,
+0x41D2702B, 0x1E2E5ACD, 0xCECC6F2A, 0x767EBC6E, 0x24D17667, 0x4601EADA, 0x9EC62979, 0xABD0FA16,
+0x3271A458, 0xB68164C1, 0x8B77093E, 0x47BF81E9, 0xCDC1FD3B, 0xA8423B5D, 0x44984445, 0x3EF62CCD,
+0x76C69936, 0x29A174BD, 0x4A2D80A5, 0x3A527D85, 0x034CFDCA, 0x4CD80338, 0x6149CCDD, 0x3A55C383,
+0x3E1405B0, 0xA68AD38C, 0xA27FBFBF, 0xA156E8CA, 0xF239F0E4, 0x865DCB90, 0xE3D96F32, 0x50F411EB,
+0x0A1B7D1E, 0x0113D508, 0xAEA3B78A, 0x205ED53B, 0x3266821F, 0xF3C462D0, 0xFC0431FF, 0x79909A97,
+0x2B6F16FE, 0x321D4CBE, 0xD8EA94F4, 0x86CBC131, 0x9F7DBABB, 0x82820CBB, 0x5E06B42A, 0xA5E011DA,
+0x5EE7564F, 0xAFB699C9, 0xE2A35C29, 0x7B84E2F4, 0xFFBCFFAF, 0x2E7AECA2, 0x535FCF8E, 0x634468DC,
+0x3F3A6B96, 0x126A535D, 0x5A0D9699, 0x34FA5D75, 0xF3F16D1B, 0xCA588829, 0xD860D4A3, 0xB795C858,
+0x337A4C9F, 0xBF76ED3B, 0x4CA538FE, 0xC1260EF0, 0x8325BCA0, 0x650AAF3C, 0x55DC3218, 0x9BE0ECFE,
+0x4720EC9E, 0xF963BEEE, 0x3D12E6C5, 0x107EEDDB, 0x377B8357, 0xC93F0A7E, 0xEEE47094, 0x2238B031,
+0x6352D5AE, 0xC74BE66B, 0x281A384A, 0x2A3C108F, 0x3BE641C9, 0xA1205FF6, 0x1B345902, 0xE89A07EC,
+0x4B38D5D9, 0x6861224F, 0x64CAC088, 0x3BFBE148, 0x58AD3CDD, 0x6E197E42, 0x09566B13, 0x5C5459F7,
+0x0424C53D, 0x4FC8F9A1, 0x6BBECF79, 0x4345FAC5, 0x823201C6, 0xD8D7B5C3, 0xBBFA219C, 0x6E687516,
+0xD3715429, 0x6C4CB802, 0x98F89722, 0x44490F5B, 0x0CFE1819, 0x7E837971, 0xF0BB06B7, 0x1DFDBED6,
+0xB1B7471F, 0x431CA680, 0x464F8800, 0xEC9AD8B5, 0x871D619F, 0x50F1C9A7, 0x6E63D530, 0xF7351C05,
+0xBEAC97F8, 0x1284EFAE, 0xCA7B3FBC, 0x841A36BD, 0x64FCA7C7, 0x466957AF, 0xA0B58DAD, 0x457358B4,
+0x1E46846F, 0x09DF6BE8, 0xFC1E19B0, 0xF2E4C602, 0x3273D976, 0x50C23A2F, 0x2899CF5E, 0x7099232F,
+0xEC1E12AA, 0xEC9E96AD, 0xAB41A284, 0xACCA969F, 0x5621871E, 0x4032C827, 0xEF573703, 0x3AED41C2,
+0x0FEA9001, 0xF5ACB436, 0x1BFC788A, 0xE8C7261D, 0x463B4C9E, 0xF9DCC18E, 0x966358D7, 0x8D97AEBB,
+0x8CC16548, 0x73BF4C51, 0x1C1F1057, 0x2D509B39, 0xCE11B83A, 0x33C5D866, 0x5F745798, 0x23FED34A,
+0x54103C59, 0x143182C3, 0x0D9D45B2, 0x11DA5C01, 0x72AA41EC, 0xC69B4533, 0x1ECFD26D, 0x50302E1B,
+0x5EBB9CA1, 0x18C001F1, 0xFD001166, 0x502A530F, 0xC56188E0, 0xF58F9B54, 0xB81DB602, 0x9F59905D,
+0x24178664, 0x901396F5, 0xF6C11514, 0x2C450933, 0x7C9C5FC5, 0x84BA4C4C, 0x7075CEBA, 0xEEC37FBC,
+0xB44A1D26, 0xA05F4DDB, 0xFE78CCB4, 0x42C5A85D, 0xA913B384, 0xBA484FDA, 0xBEE50341, 0x444752AF,
+0x9A1A0C9F, 0x1CFC3CD6, 0x62F0D128, 0x54C2E27B, 0xD11D5993, 0xBD8C71BA, 0xED4E9100, 0x8C532E21,
+0x71D8D57E, 0x1B86FE62, 0xA45CDD23, 0x7249C268, 0x828894F7, 0xA30FF004, 0x4FED45D3, 0x06070222,
+0xEDC95B36, 0xB1068CC9, 0x87152F58, 0x3B04725F, 0xF7909711, 0xDB33A2A7, 0xE847C763, 0x5A133463,
+0x9424875A, 0x23278294, 0xFE7AC725, 0xA936C10C, 0x46E4D03A, 0x9EEB11DD, 0xB6A21DEE, 0x84AB43F8,
+0x01CB88E7, 0x73E8D8E0, 0x5188F1D7, 0xBEE4A4DE, 0xA5C41CD1, 0xC8B4CB79, 0x0319E1DA, 0x252A8362,
+0x68052060, 0x23F22076, 0x088422DB, 0xBDB87BC7, 0x014723C8, 0x331F3F37, 0x0B85978A, 0x02BEDD26,
+0xCA70B6B5, 0xBB3A0F70, 0x257FF76B, 0xB0DF0E27, 0xB92D0C2C, 0x59E2BD3D, 0xF35CAE92, 0x1E3D6ECC,
+0x1268165B, 0xCA5F2DC7, 0x8FC2C620, 0x39D16D4B, 0x88BF9D13, 0x68B9E285, 0x5961EDFF, 0x92D3B09B,
+0x154FAE0E, 0xF0B5577C, 0xECDB0F23, 0xCC1BA7D9, 0x64CF376C, 0x33281974, 0x87D2D81E, 0xAAAFE970,
+0x4519A8EC, 0xF77BD8D8, 0xE950AA77, 0xC839A4AF, 0x261F0F98, 0x01F8D93C, 0x17B521EC, 0xAE2FBB9B,
+0x00F2F2C7, 0x7318CCB2, 0x15A30C68, 0xC6670E47, 0xA384B462, 0x11554596, 0x9490EED8, 0xDD50CEDD,
+0x97868988, 0x587ACAC3, 0x80F30F49, 0x65270B5D, 0x9D7EFCD1, 0x70E08FA3, 0x18833A06, 0x47032BEF,
+0xADE260AE, 0xA6C871AB, 0xC99BC917, 0xDCF85DE5, 0x56D1CC0B, 0xE8BC7405, 0xBE992374, 0x11BAC674,
+0x2F634FAD, 0x8B93F53E, 0xA6EE1938, 0x530A158F, 0xAD66195E, 0x9A121568, 0x02D61763, 0x86DD21F4,
+0xA6491176, 0xE55E4BCF, 0x2C3CB63C, 0x024841CD, 0x5F52B460, 0x66454FAD, 0xDF23807A, 0x38083862,
+0x3714AFD8, 0xBA9A56D8, 0x5CCA73F5, 0xF29645D9, 0xC75F5738, 0x618D9680, 0xD4E1A8DD, 0x5456F102,
+0x3B724821, 0x19A52ACC, 0x38CFF4E9, 0x3F183725, 0x6A793538, 0x5C3EEF68, 0x8A7F5C22, 0x4056A550,
+0xCAF07283, 0x77B3C800, 0xA9208212, 0x28A753A9, 0x03DF4E8D, 0xB9B464A6, 0x73EBADEE, 0x13AB7414,
+0xA7CF129C, 0x7A54F7A9, 0x1B242187, 0x40B1910A, 0xEA2064FA, 0xD123011B, 0x8D18E5F8, 0xE52FF965,
+0x89A32FB9, 0x22D2A1ED, 0x5668DEA9, 0xA6541D98, 0x0BCDCBAE, 0x11560EFC, 0xBC598BE3, 0x5AE2FD26,
+0x021BDB7C, 0x603D2B36, 0xCB181A55, 0x98A5B26E, 0x2EDCB3A3, 0x10D654D3, 0xE90E8021, 0xECC30DED,
+0x9BFAC61E, 0xEA7AAF2A, 0xBC440D50, 0xD4F1A092, 0xF5E58CD6, 0x3F94061F, 0xE24333AF, 0x3BDD5838,
+0x27195798, 0xBCAE82A7, 0x2B94514C, 0x2DEF8A09, 0xD15CB6A6, 0x936C59FD, 0x32A6F8E9, 0x491327B4,
+0x78473BDE, 0x24AF481E, 0xB0BE7E58, 0xB61B70EA, 0x4AD0FD79, 0xF3ADDF3D, 0xA91BD37C, 0xC624AB2C,
+0x1B9CD5FE, 0xB371F1F3, 0x27E21FAB, 0x368C6BDE, 0xCE429A32, 0x4A53A07F, 0x48018E89, 0x14D3730C,
+0x7D4115CA, 0x579A7695, 0xA8E54C50, 0x99718AF1, 0x0C1AE2B7, 0x90B6A91A, 0x7A1C4DC0, 0x03006B33,
+0xC6CC20BB, 0xE0F59637, 0x5432F267, 0x722246C3, 0x29A5EA45, 0xE24049EC, 0x7CACB2EF, 0xE5C01490,
+0x55DC0AD2, 0x0371EF63, 0xCE0EB43C, 0x141EC101, 0x8F6C05A6, 0x0D1DF470, 0xA42DCF3A, 0x2DEBA57B,
+0x82BD31A2, 0x3A243D6D, 0x567F7515, 0xBEC1533F, 0xD0AC62C3, 0xFA470B40, 0x5D2A3BE6, 0x646670DF,
+0xFE5F1200, 0x9EC09A2B, 0x47F11DD3, 0xF7590403, 0xE47B252C, 0x23D199A2, 0x4D896673, 0x4BC41B23,
+0x4278021F, 0x90E82996, 0x007C3C5A, 0xDB6C4854, 0x2FAE59D4, 0x04164760, 0xAFEAA058, 0x86BFC02C,
+0x6082C555, 0xB9B2EB5B, 0x7CB8F105, 0x7AA38B7C, 0xB8FD1B5B, 0x0EB4DCA0, 0xB516AE4A, 0x61061288,
+0x13CF4E2C, 0xE0D2D218, 0x641C2EA8, 0x0810D9B9, 0xE9A51A54, 0xA3E41E40, 0xFE702981, 0xA1B8F354,
+0x128C4E44, 0x062659EB, 0x873A928A, 0xBA1C46EF, 0x26C34637, 0x78B2D337, 0x614078B0, 0xC2F79E70,
+0x6C2DAAB5, 0xD3EFAF99, 0x6E83591F, 0x14BC5C80, 0xD96BCB5D, 0xBC0D1588, 0x9994D4FF, 0xABEA5A5F,
+0x37DC0547, 0x56A71307, 0x8E4D4A65, 0x0767D446, 0x94990CEF, 0x7DBE8230, 0xC063E3AE, 0x057726DA,
+0xE4D8CCEE, 0xA714D42F, 0x1140BF42, 0x409D0987, 0xC84722B8, 0x1F2FB59B, 0xB9CD9BF0, 0x29A33DFA,
+0xF8AC31AE, 0x05457C68, 0xEE3EB76E, 0xD163A9DA, 0xBE6BF0D4, 0x5A8616F9, 0x545B68C9, 0x120E9972,
+0xCCC19BED, 0x255EFD86, 0xC60FDF6F, 0x044EEDBA, 0x5F17A10A, 0x7EB6A3B7, 0x62135187, 0x71CDB472,
+0x9CE4C789, 0x714453F3, 0xCE593514, 0x9B527E5E, 0x5D3E21CE, 0x3D4FDB90, 0x4576C774, 0x67ED805D,
+0x61D5847F, 0xDBCFB12E, 0x4E0CC524, 0xB3D92BF4, 0x9E37A38F, 0x32412F0B, 0x3B9D1043, 0x45C85C10,
+0x3BD1A515, 0x19FD9668, 0xDC56254C, 0x411978F2, 0x2EA0560C, 0xFD04A4FE, 0x1F9E8474, 0x4544A2D2,
+0xEEFDA116, 0x6DD2BCE1, 0x6690D499, 0xEA8A0669, 0xA7271868, 0x4626A9D9, 0xE741923F, 0xB68F2ADF,
+0x1F234011, 0xFF29768E, 0xFCF5D15D, 0xEB4E8253, 0x33B5F3E0, 0xE80728DE, 0x6B261BA7, 0x005BA67D,
+0x11EECC54, 0x03FDA702, 0x13F53F65, 0x20F1401D, 0x286D4059, 0xBA6B8A7D, 0x4A6411DA, 0x0A20F086,
+0xBF471544, 0xAD32D9D6, 0xFACF6642, 0x8920FC6C, 0x29039AF7, 0x1E7B95CC, 0xAFFC82B8, 0x9F8F2B7B,
+0x575D5C7C, 0x540F3B73, 0x41101C3F, 0x63984069, 0x0F165A68, 0x1A944AE5, 0x1FBC7092, 0x8444DACE,
+0xFBA7388E, 0xF6DB0446, 0x067DF1E5, 0x94232D00, 0x5FD1940E, 0x3F3407FC, 0x709E2FC2, 0x97056DA8,
+0xF7AD2367, 0xE28A66FC, 0x2BB2A05D, 0xAA7331B2, 0x9B377EA7, 0x8B261806, 0x4729210E, 0x707855AE,
+0xCB3305D5, 0xA5BA8A25, 0xB102B865, 0xF6ACC915, 0xCFBBBB1D, 0xF7A3D1AB, 0x9C0A2AEC, 0x9AAB192A,
+0x567EF3B7, 0xC94ED2CF, 0x6D66067E, 0xF47983B7, 0x3C440BD6, 0xFF5DA5B8, 0xFB577C5A, 0x5BE08925,
+0x11A02141, 0x4D725EA0, 0xD68ADB69, 0xA2EB6B60, 0x568D2AA1, 0x981BE08B, 0xB2B33D13, 0x546B44C5,
+0xE76BF4F6, 0xCB5018C9, 0x506645CE, 0x231A95C7, 0x500FF67E, 0xFC652ABC, 0xDEB37B2C, 0xFB5FEAB7,
+0xBBDC28C4, 0x4EF10EA4, 0x674FFA04, 0x41A2E9B7, 0x06ADE38D, 0x2E9CD55D, 0x2312B550, 0x86EE49B5,
+0xA339C9F2, 0x7309C7B7, 0xD0BE4ED0, 0xD3D882B1, 0xED0C2E1D, 0x30E5DA36, 0x5E500A54, 0x70773D2F,
+0x51AC33D8, 0xA6CCCB21, 0x38C7B329, 0xB72F3DF4, 0x4FD2A223, 0x7D54A3E4, 0xC1A0405A, 0x278C4E5E,
+0x147527AD, 0xB3D23DD5, 0x28C1153B, 0xCF046310, 0xB8824B43, 0xD6B99F2F, 0x11716863, 0xF52244F5,
+0xA2D2892A, 0x3898E03A, 0x4E8AAEF4, 0x1F35150B, 0xC40C85C7, 0x278E4CDE, 0xABA76BB5, 0x1ED8CD03,
+0xAE50C0BD, 0xC1F6B5C0, 0x612BF29B, 0xAF04116D, 0x0A0BDBBD, 0x13DD7603, 0xFA520AB8, 0xAF366247,
+0x59518452, 0x787FAAA9, 0xE6B26149, 0xE584C0E3, 0x5142AFE7, 0x06340D06, 0xC3394302, 0x755D1D66,
+0x81A3DA4D, 0xCA9A01CE, 0x7D808FB6, 0x9B521E91, 0x050AF792, 0x5EB03721, 0xF71C9310, 0x1588F196,
+0x68CA25D6, 0x5EC2BF29, 0x0216A510, 0x071D0ED8, 0x14AD0E0B, 0xCA229A85, 0x4F13119B, 0xAA572358,
+0xF602E1C1, 0xF4131626, 0x747F4DD6, 0x68BC1D8A, 0xF859A58B, 0x89215DB6, 0x6DBCBD21, 0xD380D013,
+0x32DF7DAD, 0x4D0E7C91, 0xCD8A4D60, 0x5D96610A, 0x2F0D0960, 0x316ABFF7, 0x3BC5FA4C, 0x14A3CF2C,
+0x8A153A1A, 0x2870CF55, 0x0E9FA8EC, 0x3756E2F8, 0xADA02437, 0xD0676072, 0xCE8AAD88, 0xD0378108,
+0xB6DECFBB, 0x4B416368, 0x81D5FE74, 0x2F204FF9, 0x2B2B520E, 0x7C26385A, 0x549E057C, 0xBCDCC81B,
+0xAD1D8630, 0x95BFD88C, 0xDA4F1086, 0xEAFC162A, 0x2D130AB5, 0x34663942, 0xEC553367, 0x6916CC61,
+0xAE36D16F, 0x98FDBFD8, 0x34961045, 0x9AB0F7B1, 0x01E7DBA2, 0xD2EA4862, 0x22F1F602, 0xC06849B9,
+0x2B32985A, 0x7D6DBDD5, 0x4B069666, 0x7AB33A9D, 0x6C65F10B, 0x2DC8D145, 0xBC803BFD, 0xBBA97E95,
+0xBA78A360, 0x700D784D, 0xB2829C9D, 0x3D3A862C, 0x70B3AD89, 0xC687C83D, 0xA3C41719, 0x007219B0,
+0x5DB76593, 0xB02804D0, 0x1DB48EF2, 0xAD213485, 0xF6ED5385, 0xFFA5E961, 0xBF034957, 0xF1A629D7,
+0xF3E6D3A2, 0xB2077771, 0x6600CAA0, 0x08014A62, 0x26E16FAC, 0xF455176A, 0xA26E4B8C, 0x1C60D8D7,
+0xA1DB4B95, 0xD0EDF137, 0x85150791, 0x9A88BFE4, 0x6FF50DE1, 0xCC7F8D5C, 0xEBBD7552, 0x2FC83CD2,
+0xC524687B, 0x0BFCA5EB, 0xB2A60EBC, 0xC08EF816, 0x68B96617, 0xA7FFF8E1, 0xA85D57C7, 0xBBADDFF0,
+0x52519496, 0x5251FC13, 0xC4CEA0FF, 0x27E06771, 0xBF1A9964, 0x2618F9A8, 0x54CFE977, 0xF325CCDD,
+0x5F1F4017, 0xC16F50FF, 0x1CA4D98F, 0x1DA107D7, 0x1F7EF04E, 0xBDA4D86A, 0xCF748C69, 0x0BE8B6C7,
+0x7FBF325A, 0xA5EE15CD, 0xF3FAF33F, 0x19B90B23, 0x0CE4FD63, 0x882009B3, 0x6C781DF4, 0xB02B86CA,
+0xA272B039, 0x62CD9C74, 0x9B2C2CE3, 0xB1EB9CC6, 0x25C8C3E8, 0xED01FCF0, 0xEC31DE19, 0x1CC88913,
+0x5DF560D5, 0x91749BDD, 0x10CC46BB, 0xF46BD60A, 0x078B76B5, 0xAAB5C3E9, 0x60CA8EF9, 0xC6D3EEE8,
+0x9D074245, 0x2C3D5D1C, 0x714345B0, 0xC4FC7D5E, 0x41AD6820, 0x567B7382, 0x5665DE0B, 0xDC030FB7,
+0x978AA503, 0x3A42A120, 0x98C84797, 0x478461CB, 0xE5A44B0E, 0x1B19283D, 0x8F6FF924, 0x3CC9C5A5,
+0x0066FDC5, 0x533E6B43, 0x98821864, 0xE0E59E98, 0xDE121AE1, 0x9FEADBD2, 0xA9EEE36B, 0xA4B36B2A,
+0x2F45AFDA, 0x950D3FF2, 0x0E867090, 0x3024FA4D, 0x78C2C934, 0xC1600CD3, 0x5415DD7B, 0x67A44995,
+0x8A8A53E1, 0xCE95BB4D, 0x9B66BA28, 0x3D8C9876, 0x7299D3F9, 0xAF50FD77, 0x0EB94542, 0xC4001006,
+0x05C8E75B, 0x5355BC54, 0x2DB73C63, 0x9D923898, 0x92BC7511, 0x86CC56AC, 0xED93574D, 0x36CC4CC4,
+0xE8362989, 0xB7C92660, 0x7F854BE9, 0xC3214180, 0x1BBDEB13, 0x58F33CCD, 0x2F83CBF7, 0x732A0EDD,
+0x63BC358F, 0xA66D6AE2, 0x82BF9F19, 0x4B096252, 0x036D66ED, 0x6C98EE11, 0x687CCDD2, 0x7495C374,
+0xB90C489C, 0x1688D94B, 0xECFF0BCE, 0xA3185401, 0xCB6FAEEE, 0xFBCECE2F, 0xB2A3B461, 0x8C739F4A,
+0xEFDD98B6, 0x89075340, 0xC31C7226, 0xD269DD8E, 0x53FCB36F, 0x796E1C3D, 0xD33E0D30, 0xD4D941B0,
+0xBE033E0E, 0x4636FF78, 0x34A9BE67, 0x842FE639, 0xC71CCC14, 0xC17276FB, 0xFD74422D, 0x4C1DCAAD,
+0x814B0E6E, 0x1C0E0A0F, 0x04A0ACAE, 0xBED3D8B1, 0x84DF92B8, 0x519D9670, 0x7157E2CA, 0xA3BA65AA,
+0x9ED809FF, 0xFDD88464, 0xC4FFECE7, 0x06332FD2, 0xC8807C6D, 0xA41AA69A, 0xFC66E534, 0x139FA663,
+0x3662C32A, 0xA669A93E, 0xFAB2C6A5, 0xCDB799F9, 0x03105F03, 0x49ABDCCA, 0x97BDB5B4, 0x6B91E34E,
+0xEFE63394, 0xED76E2EA, 0x9A5523D1, 0x12384C0B, 0x05112E66, 0x8B6B2605, 0xFD4CEFFA, 0x00000080,
diff --git a/board/rda/common/include/coda7l_fw.h b/board/rda/common/include/coda7l_fw.h
new file mode 100644
index 0000000000..51f3efc7f8
--- /dev/null
+++ b/board/rda/common/include/coda7l_fw.h
@@ -0,0 +1,11789 @@
+#ifndef __CODA7L_FW_H__
+#define __CODA7L_FW_H__
+
+//==============================================================================
+// BIT ASSEMBLY CODE TABLE
+// generated with <Falcon.out>
+// generated at Tue Jun 17 14:30:19 2014
+//==============================================================================
+static const unsigned short bit_code[94208] = {
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x072a, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0147, 0xe40e, 0x007e, 0xe40e,
+ 0x0153, 0xe40e, 0x014f, 0xe40e, 0x015b, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x0449, 0xe40e, 0x045c, 0xe41e,
+ 0x018a, 0xe40e, 0x007e, 0xe41e, 0x020b, 0xe40e, 0x007e, 0x284d,
+ 0xa184, 0xe41e, 0x015f, 0xe41e, 0x020c, 0xe40e, 0x007e, 0x284d,
+ 0xa184, 0xe41e, 0x015f, 0xe41e, 0x03a1, 0xe40e, 0x007e, 0xe41e,
+ 0x03d2, 0xe40e, 0x007e, 0x284d, 0xa184, 0xe41e, 0x015f, 0xe41e,
+ 0x0580, 0xe40e, 0x007e, 0xe41e, 0x0405, 0xe40e, 0x007e, 0xe428,
+ 0xe0c0, 0x0040, 0xa211, 0xae17, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x2000, 0xd113, 0x000b, 0xe1e1, 0xe42e,
+ 0xe167, 0x05d2, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184, 0x017a,
+ 0x9e16, 0x3517, 0x3d17, 0xe0c0, 0x0069, 0xe167, 0x0ba0, 0x3d17,
+ 0x3517, 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b, 0x3d17,
+ 0x3517, 0xe42e, 0xd152, 0x0000, 0xd130, 0x0000, 0x22f0, 0x4ef1,
+ 0xa200, 0xc401, 0xe188, 0x07ff, 0x3d11, 0x36f0, 0x3ef1, 0xe41e,
+ 0x03f0, 0xa2fe, 0x3c10, 0x3c20, 0x3c48, 0xe0c2, 0x0079, 0xe0c2,
+ 0x007a, 0xa206, 0x3cbe, 0xa200, 0xcc44, 0x3cd6, 0x3c4e, 0x3c4b,
+ 0xe0c2, 0x0072, 0xe0c2, 0x006c, 0xa202, 0xe0c2, 0x0078, 0xe0c0,
+ 0x0062, 0xaf02, 0x301e, 0xaf02, 0xa806, 0x3c75, 0xe41e, 0x06a5,
+ 0xe41e, 0x1318, 0xe41e, 0x1787, 0xe41e, 0x059d, 0x286d, 0xe408,
+ 0x0206, 0x28a4, 0xa10e, 0xf798, 0xe41e, 0x132b, 0xe41e, 0x06d7,
+ 0xe128, 0xe41e, 0x0c52, 0xf71a, 0xa2fe, 0x3c10, 0x2050, 0x4c51,
+ 0xae08, 0xe0c2, 0x0071, 0xe0c2, 0x004f, 0x2850, 0xe002, 0x0080,
+ 0xf2e0, 0x2851, 0xe002, 0x0080, 0xf2a0, 0x281e, 0xf0da, 0x2813,
+ 0xa104, 0xf0aa, 0x28df, 0xe0c2, 0x0074, 0xa004, 0xe0c2, 0x0073,
+ 0x28de, 0x3cdc, 0xf09e, 0x2816, 0xa004, 0xe0c2, 0x0073, 0xa200,
+ 0xe0c2, 0x0074, 0x3cdc, 0xa200, 0x3c6d, 0x285d, 0xae04, 0x4c1a,
+ 0xae02, 0x4c18, 0xae10, 0x4c1c, 0xae10, 0x4c4d, 0xe0c2, 0x007b,
+ 0xe41e, 0x065c, 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0x3c6d,
+ 0xe0c2, 0x0070, 0xe42e, 0xe42e, 0xa2fe, 0xe0c2, 0x004c, 0xe0c2,
+ 0x004d, 0xe0c2, 0x004e, 0xe0c2, 0x007b, 0xa200, 0xcc44, 0xcc4a,
+ 0xcc4c, 0x3c4c, 0x3c55, 0xe0c2, 0x007a, 0x3c5c, 0xd14b, 0x0200,
+ 0xa2fc, 0xe0c2, 0x0077, 0xa202, 0xe0c2, 0x0076, 0x286e, 0xf07a,
+ 0xe41e, 0x0754, 0xe41e, 0x0586, 0xa200, 0x3c6e, 0xe41e, 0x0f0a,
+ 0xf05a, 0xa202, 0x3c6c, 0xe40e, 0x0332, 0x2875, 0xa802, 0xf06a,
+ 0xa200, 0x3c69, 0x3c6b, 0xe41e, 0x067d, 0xe41e, 0x12e3, 0xd152,
+ 0x0000, 0xd130, 0x0000, 0xd1e0, 0x0003, 0xd1ff, 0x03b0, 0xd1fd,
+ 0x03d0, 0xd199, 0x0224, 0xd1fc, 0x0700, 0xd03a, 0x0000, 0xd04c,
+ 0x0000, 0xd008, 0x0000, 0x288e, 0xf10a, 0x288f, 0xf1c2, 0x28db,
+ 0xe41a, 0x129b, 0xe41e, 0x17cd, 0x28c1, 0x3c8f, 0x3c39, 0x2848,
+ 0xe412, 0x17ed, 0xe40e, 0x0332, 0xe41e, 0x17c1, 0xf048, 0xa2ff,
+ 0xe0c3, 0x0077, 0xf03a, 0x286c, 0xf06a, 0x2848, 0xe412, 0x17ed,
+ 0xe40e, 0x0332, 0xa2fc, 0xe0c2, 0x0077, 0xa200, 0x3caa, 0x3cab,
+ 0x288e, 0xf038, 0x28c1, 0x3cbf, 0xa202, 0x3c49, 0x288e, 0xf0da,
+ 0x288a, 0x3ca3, 0x288b, 0x3ca5, 0x288f, 0x3cc1, 0xe41e, 0x04d1,
+ 0xe41e, 0x0bb2, 0xe40e, 0x02dc, 0xe41e, 0x059d, 0x28a4, 0xf7da,
+ 0xa102, 0xe40a, 0x02dc, 0xa108, 0xf784, 0xe40a, 0x02dc, 0xa102,
+ 0xf17a, 0xa102, 0xf0fa, 0xa102, 0xf10a, 0xa102, 0xf14a, 0xa102,
+ 0xf16a, 0xa102, 0xf14a, 0xa102, 0xf2aa, 0xa10e, 0xf662, 0xe40e,
+ 0x02da, 0xe41e, 0x132b, 0xf2fe, 0xe41e, 0x1356, 0xf2ce, 0xe41e,
+ 0x0f12, 0xf29e, 0xba44, 0xe41e, 0x0862, 0xf25e, 0x2875, 0xa802,
+ 0xe408, 0x0398, 0x286b, 0xf0ca, 0x2875, 0xa802, 0xe016, 0x3c6c,
+ 0xe41e, 0x051d, 0x2848, 0xe412, 0x17ed, 0xe40e, 0x0332, 0x287f,
+ 0xf038, 0x287d, 0xf03a, 0xa202, 0x3ca9, 0xf0de, 0xba0e, 0xe002,
+ 0x00ff, 0xf058, 0xba4e, 0xe41e, 0x05e9, 0xf798, 0xe41e, 0x0862,
+ 0xe40e, 0x028c, 0xe40e, 0x028c, 0xe165, 0x07c8, 0x28a5, 0x3d15,
+ 0x28a3, 0x3d15, 0x2830, 0x3d15, 0x28d3, 0x3d15, 0x288e, 0xf098,
+ 0xa2fe, 0x3cc1, 0xe41e, 0x08f5, 0x2a57, 0xa003, 0xe40b, 0x0398,
+ 0x2a7e, 0xa103, 0xe40b, 0x0332, 0xe40a, 0x028c, 0x28a3, 0x3c84,
+ 0x28a5, 0x3c85, 0x2a3b, 0x28bf, 0x18c1, 0xf0ca, 0x28be, 0xa106,
+ 0xf0aa, 0xe41e, 0x04e6, 0xe41e, 0x04fb, 0x2848, 0xe412, 0x17ed,
+ 0xf2ae, 0x4ebe, 0x3ebe, 0xa200, 0x3c49, 0x3c8e, 0xe41e, 0x186e,
+ 0x282f, 0xa002, 0x3c2f, 0x28a3, 0x4c34, 0xf048, 0x28c1, 0xe41e,
+ 0x178d, 0x28a3, 0xe418, 0x1461, 0x2834, 0xe41a, 0x1143, 0x2834,
+ 0xaa02, 0x4432, 0xe41a, 0x1176, 0x28d3, 0x3cd7, 0xe41e, 0x065c,
+ 0x2832, 0xf09a, 0x2a75, 0xf04b, 0x2834, 0xe41a, 0x0549, 0x2834,
+ 0xe40a, 0x0278, 0x286c, 0xf04a, 0xe41e, 0x1296, 0x3cdc, 0xe41e,
+ 0x119f, 0xf032, 0x2a6c, 0xb7b6, 0xe049, 0x1ad4, 0xf045, 0xa2fa,
+ 0x2a6b, 0xb7f2, 0xe0c2, 0x0071, 0xe0c0, 0x0071, 0x3c48, 0xa200,
+ 0x2a48, 0xf0f4, 0x3e0a, 0xaf09, 0x2072, 0x4c73, 0xf06b, 0x2070,
+ 0x4c71, 0x2a0a, 0xa81f, 0x3e0a, 0x5c0a, 0x5c0a, 0xa806, 0xae20,
+ 0x2a5c, 0xae13, 0x4e33, 0xae05, 0x4e19, 0xae03, 0x4e32, 0xae21,
+ 0x4e55, 0xae05, 0xe056, 0x4c30, 0xe0c2, 0x0073, 0x2a48, 0xf1b5,
+ 0xaf09, 0xf0fb, 0x2070, 0x4c71, 0x2a48, 0xa81f, 0x3e0a, 0xa207,
+ 0x5a0a, 0x5a0a, 0xe013, 0xa103, 0xe052, 0x3470, 0x3c71, 0xf0be,
+ 0x2072, 0x4c73, 0xa207, 0x5a48, 0x5a48, 0xe013, 0xa103, 0xe052,
+ 0x3472, 0x3c73, 0x284c, 0xe0c2, 0x0072, 0x2c4b, 0xa002, 0x3c4b,
+ 0xe0c2, 0x0070, 0xa200, 0x3c7e, 0xc84a, 0xc84d, 0xae20, 0xe056,
+ 0xe0c2, 0x0053, 0xe41e, 0x1301, 0xe41e, 0x0563, 0xa202, 0xe42e,
+ 0xe41e, 0x1301, 0xa2fe, 0xe0c2, 0x0072, 0xa200, 0xe0c2, 0x0076,
+ 0xe42e, 0xd152, 0x0000, 0xd130, 0x0000, 0xe41e, 0x0170, 0xca28,
+ 0xf7f8, 0xe0c0, 0x0060, 0xe42a, 0xe0c0, 0x0042, 0xce20, 0xd111,
+ 0x0620, 0xd112, 0x0100, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0042, 0xe000, 0x1000, 0xce20, 0xd111, 0x0ba8, 0xd112, 0x004c,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xa200, 0xe41e, 0x0c0a, 0xe004,
+ 0x0040, 0xe41e, 0x0c0a, 0xe0c0, 0x0060, 0x3cd4, 0xe0c0, 0x0061,
+ 0x3c67, 0xe42e, 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xce20, 0xd111,
+ 0x0000, 0xd112, 0x0080, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0061, 0x3ca7, 0xa202, 0x3ca6, 0xe41e, 0x06d7, 0xe128, 0xe0c0,
+ 0x0060, 0xf048, 0xe41e, 0x132b, 0xf03e, 0xe41e, 0x1356, 0xe42e,
+ 0xe0c0, 0x0040, 0xa201, 0xae17, 0xe042, 0xe005, 0x3f00, 0xae03,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0450, 0xd112, 0x00c8,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0060, 0xf08a,
+ 0xe0c0, 0x0061, 0x2298, 0x4e99, 0xe046, 0xaf12, 0xae02, 0x3c9b,
+ 0xe180, 0xe41e, 0x06d7, 0xe41e, 0x0799, 0xe41e, 0x1318, 0xe41e,
+ 0x1787, 0xe41e, 0x0539, 0x28de, 0x2a1e, 0xb616, 0x3cdc, 0xa200,
+ 0x3cd6, 0x3cda, 0x3cd9, 0x3cdb, 0x3cd8, 0xe166, 0x05ab, 0xc710,
+ 0x3d16, 0xe166, 0x0054, 0x9e06, 0xf16a, 0x28d4, 0xa102, 0xcc44,
+ 0xa200, 0x3c68, 0xe184, 0x0440, 0x9e06, 0x5c68, 0xa802, 0xf07a,
+ 0x2868, 0xe000, 0x0518, 0xe09e, 0xa208, 0x3d07, 0x2868, 0xa002,
+ 0x3c68, 0xe190, 0xa200, 0x3c63, 0xe41e, 0x06e8, 0xa202, 0x3c6e,
+ 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa206, 0xe41e,
+ 0x0465, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa236, 0xe41e,
+ 0x047b, 0xe41e, 0x0491, 0xe42e, 0xa234, 0xe41e, 0x047b, 0xe41e,
+ 0x04b1, 0xa204, 0xe41e, 0x0465, 0xe42e, 0x3ced, 0xe0c0, 0x0041,
+ 0xe005, 0x0280, 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ed, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0298,
+ 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x00c0, 0xd112, 0x0040, 0x88ed, 0x0113, 0xca28, 0xf7f8,
+ 0xe42e, 0xe161, 0x07e0, 0x8911, 0x0145, 0x8911, 0x0144, 0x8911,
+ 0x0146, 0x8911, 0x0147, 0x8911, 0x0148, 0x8911, 0x0152, 0x8911,
+ 0x0153, 0x2111, 0x4d11, 0xce80, 0x2111, 0x4d11, 0xce82, 0x2111,
+ 0x4d11, 0xce84, 0x2111, 0x4d11, 0xce86, 0x2111, 0x4d11, 0xcc72,
+ 0xe42e, 0xe161, 0x07e0, 0x8b11, 0x0145, 0x8b11, 0x0144, 0x8b11,
+ 0x0146, 0x8b11, 0x0147, 0x8b11, 0x0148, 0x8b11, 0x0152, 0x8b11,
+ 0x0153, 0xca80, 0x3511, 0x3d11, 0xca82, 0x3511, 0x3d11, 0xca84,
+ 0x3511, 0x3d11, 0xca86, 0x3511, 0x3d11, 0xc872, 0x3511, 0x3d11,
+ 0xe42e, 0xe165, 0x07cc, 0x2915, 0x3c30, 0x2915, 0x3c32, 0x2915,
+ 0x3c3b, 0x2915, 0x3c33, 0x2915, 0x3c34, 0x2915, 0x3c3a, 0x2915,
+ 0x2915, 0x2915, 0x3c3c, 0x2915, 0x3cd3, 0xe42e, 0xe165, 0x07cc,
+ 0x2830, 0x3d15, 0x2832, 0x3d15, 0x283b, 0x3d15, 0x2833, 0x3d15,
+ 0x2834, 0x3d15, 0x283a, 0x3d15, 0x3d15, 0x3d15, 0x283c, 0x3d15,
+ 0x28d3, 0x3d15, 0xe42e, 0xa202, 0x3c8e, 0x28a3, 0x3c8a, 0x28a5,
+ 0x3c8b, 0x28c1, 0x3c8f, 0xe165, 0x07c8, 0x2915, 0x3ca5, 0x2915,
+ 0x3ca3, 0x2915, 0x3c30, 0x2915, 0x3cd3, 0xa202, 0x3c32, 0x3c34,
+ 0x3ca5, 0x28be, 0xa802, 0x3c33, 0xa200, 0x3c3a, 0x3c52, 0xe41e,
+ 0x051d, 0x28be, 0x4c3b, 0x3cbe, 0xe42e, 0x28be, 0xaa06, 0x3c3b,
+ 0x2abf, 0x3ec1, 0x3e0a, 0xaf09, 0x2072, 0x4c73, 0xf06b, 0x2070,
+ 0x4c71, 0x2a0a, 0xa81f, 0x3e0a, 0x2a3b, 0x5a0a, 0x5a0a, 0xe056,
+ 0x2ac1, 0xaf09, 0xf04b, 0x3470, 0x3c71, 0xe42e, 0x3472, 0x3c73,
+ 0xe42e, 0xe161, 0x0100, 0xa200, 0xc73f, 0x3d11, 0x3c68, 0xd022,
+ 0x000f, 0xe184, 0x0547, 0xe41e, 0x178d, 0x2868, 0xa002, 0x3c68,
+ 0xe42e, 0xe0c0, 0x005c, 0xe008, 0x0400, 0xe42a, 0xe004, 0x0400,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0,
+ 0x005d, 0xe008, 0x0400, 0xe190, 0xf7b8, 0xa200, 0x3c69, 0x3c6b,
+ 0xe41e, 0x067d, 0xe42e, 0xe167, 0x0518, 0xa200, 0x3c68, 0xd022,
+ 0x0007, 0xe184, 0x0571, 0x2b17, 0xa81f, 0x5a68, 0xe056, 0x2a68,
+ 0xa009, 0x3e68, 0xa200, 0x3c68, 0xd022, 0x0007, 0xe184, 0x057e,
+ 0x2b17, 0xa81f, 0x5a68, 0xe056, 0x2a68, 0xa009, 0x3e68, 0xe42e,
+ 0xa200, 0x3c69, 0x3c6b, 0x3c6c, 0x3c4b, 0xe42e, 0xd146, 0x00c0,
+ 0xd147, 0x00ff, 0xd148, 0x00c0, 0xd144, 0x00c0, 0xd145, 0x0000,
+ 0xd14b, 0x0200, 0xe004, 0x0180, 0xce30, 0xca32, 0xca32, 0xce84,
+ 0xca32, 0xce86, 0xd144, 0x00c1, 0xe42e, 0xcaa2, 0xaf10, 0xa102,
+ 0xf09a, 0xcaa0, 0xe190, 0x286d, 0xe428, 0xca9c, 0xe418, 0x0754,
+ 0xf75e, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0xcaa0,
+ 0x3c00, 0xca9c, 0xe418, 0x0754, 0x2800, 0xaf0e, 0xf6b8, 0x2800,
+ 0xaf0a, 0x3ca3, 0x2800, 0xa83e, 0x3ca4, 0x2a49, 0xf04b, 0xa10a,
+ 0xe016, 0x3ca5, 0xa200, 0x3ca8, 0x3ca7, 0x3ca0, 0xe41e, 0x05cc,
+ 0xe41e, 0x06d7, 0xe128, 0xe42e, 0x28a0, 0x44a1, 0xf048, 0xd149,
+ 0x0000, 0xf03e, 0xd149, 0x0080, 0xd14a, 0x0000, 0xd14c, 0x0001,
+ 0xca9c, 0xe418, 0x0754, 0xca9a, 0xf7c8, 0xca9c, 0xf7a8, 0xca9e,
+ 0x3ca6, 0xcc92, 0xca94, 0x00a8, 0x0ca7, 0x34a8, 0x3ca7, 0xcc90,
+ 0xe42e, 0x28a6, 0xe016, 0xc871, 0xa011, 0xe428, 0xaf07, 0xe009,
+ 0x07ff, 0x28a7, 0xe008, 0x07ff, 0xe046, 0xf15a, 0xf0de, 0xe161,
+ 0x05e1, 0x2901, 0xc871, 0xa011, 0xaf07, 0xe009, 0x07ff, 0xe008,
+ 0x07ff, 0xe046, 0xf08a, 0xe049, 0xe011, 0xaf15, 0xe421, 0xe420,
+ 0xa200, 0xe42e, 0xc868, 0xa80e, 0xf028, 0xa210, 0x3c95, 0x7895,
+ 0xa203, 0x5a95, 0xaf03, 0xe046, 0xe42e, 0x28a3, 0x2aa5, 0x3c8a,
+ 0x3e8b, 0x28a7, 0x2aa6, 0x3c8c, 0x3e8d, 0xa202, 0x3c86, 0xe0c0,
+ 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029c, 0xae11, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113,
+ 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa, 0xe42e, 0x288a, 0x2a8b,
+ 0x3ca3, 0x3ea5, 0x288c, 0x2a8d, 0x3ca7, 0x3ea6, 0xcc90, 0xcc93,
+ 0xa200, 0x3c86, 0x3ca8, 0x3ca0, 0xe0c0, 0x0041, 0x22f0, 0x4ef1,
+ 0xe042, 0xe005, 0x029c, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0080, 0xd113, 0x0013, 0xca28, 0xf7f8,
+ 0xe41e, 0x06d7, 0xe128, 0xe42e, 0xe0c0, 0x0048, 0xe002, 0x0200,
+ 0xca89, 0xe003, 0x00c0, 0xa105, 0xae07, 0xe042, 0xca8b, 0xe015,
+ 0xa80f, 0xe042, 0xa002, 0x2298, 0x4e99, 0xe045, 0xf047, 0x2e9a,
+ 0xae11, 0xe042, 0xe0c1, 0x0048, 0xe045, 0xe003, 0x0200, 0xf037,
+ 0xe000, 0x0200, 0xe0c2, 0x0046, 0xe42e, 0xa200, 0x3c9b, 0x2875,
+ 0xaf02, 0xa802, 0xf05a, 0xe0c0, 0x0068, 0x3498, 0x3c99, 0x2098,
+ 0x4c99, 0xe0c1, 0x0067, 0xe042, 0xe0c1, 0x0069, 0xa80f, 0xf02b,
+ 0xe042, 0xe005, 0x0049, 0xe093, 0x9f01, 0xe004, 0xffff, 0x3c9a,
+ 0xe41e, 0x06d7, 0xe41e, 0x0799, 0xa200, 0x3c63, 0xe41e, 0x06e8,
+ 0xe41e, 0x0754, 0xe41e, 0x0586, 0xe42e, 0xa200, 0x3c9b, 0xe0c0,
+ 0x0062, 0xaf0c, 0xa802, 0xf10a, 0xe0c1, 0x0048, 0xe0c0, 0x0060,
+ 0xe045, 0xaf13, 0xae03, 0xa109, 0x3e9b, 0xf063, 0xe0c0, 0x0061,
+ 0xae04, 0xe042, 0x3c9b, 0xe0c0, 0x0060, 0x3498, 0x3c99, 0xe0c0,
+ 0x0061, 0xae04, 0x3c9a, 0xe41e, 0x06d7, 0xe41e, 0x0799, 0xa200,
+ 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c63, 0xe41e, 0x06e8, 0xd071,
+ 0x802a, 0xe181, 0xe41e, 0x0754, 0xe41e, 0x0586, 0xe42e, 0xd030,
+ 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036,
+ 0x007f, 0xd037, 0x0000, 0xd038, 0x0000, 0xd04b, 0x0001, 0xe42e,
+ 0x3c64, 0xe08e, 0x3c65, 0xe41e, 0x06f4, 0xe41e, 0x070f, 0x2865,
+ 0xe09e, 0x2864, 0x3c63, 0xe42e, 0x2863, 0xae08, 0xe000, 0x0538,
+ 0xe09e, 0x8b17, 0x0033, 0x8b17, 0x0034, 0x8b17, 0x0035, 0x8b17,
+ 0x0036, 0x8b17, 0x0037, 0x8b17, 0x0038, 0xc860, 0x3517, 0x3d17,
+ 0xc862, 0x3517, 0x3d17, 0xc864, 0x3517, 0x3d17, 0xe42e, 0x2864,
+ 0xae08, 0xe000, 0x0538, 0xe09e, 0x8917, 0x0033, 0x8917, 0x0034,
+ 0x8917, 0x0035, 0x8917, 0x0036, 0x8917, 0x0037, 0x8917, 0x0038,
+ 0x2117, 0x4d17, 0xcc60, 0x2117, 0x4d17, 0xcc62, 0x2117, 0x4d17,
+ 0xcc64, 0xe42e, 0xc000, 0x2863, 0xe408, 0x1380, 0x28a6, 0xf188,
+ 0x28a0, 0xf068, 0xe41e, 0x05cc, 0xd04c, 0x0000, 0xe470, 0xc896,
+ 0xf05a, 0xe41e, 0x074a, 0xd04c, 0x0000, 0xe004, 0x0080, 0x2aa1,
+ 0xb616, 0xcc6e, 0xd04b, 0x0001, 0xa202, 0x3ca2, 0xe470, 0xd04c,
+ 0x0000, 0xe470, 0xa200, 0x3ca2, 0xe41e, 0x05cc, 0x28a6, 0xcc96,
+ 0x28a1, 0xe016, 0x3ca1, 0xe42e, 0x286b, 0xf0ba, 0xe004, 0x0180,
+ 0xce30, 0xe41e, 0x07e6, 0xe41e, 0x0809, 0xd14e, 0x0000, 0xe42e,
+ 0xe082, 0x3c9c, 0xe004, 0x0048, 0xe092, 0xd027, 0x0000, 0x2869,
+ 0xe41a, 0x07a3, 0xd027, 0x0001, 0x286d, 0xf278, 0xca28, 0xf7f8,
+ 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0xce20, 0xd111, 0x00c0,
+ 0xd112, 0x0040, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa032, 0xce26,
+ 0xca28, 0xf7f8, 0x2c9b, 0xe000, 0x0002, 0x3c9b, 0x1c9a, 0xf024,
+ 0x3c9b, 0xf052, 0x2869, 0x3c6b, 0xe418, 0x07eb, 0x2098, 0x4c99,
+ 0x2e9b, 0xae11, 0xe042, 0x9f01, 0x289c, 0xe092, 0xd14e, 0x0000,
+ 0xe42e, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0xe005, 0x0048,
+ 0xe093, 0x9f01, 0xe42e, 0xe0c1, 0x0043, 0xa809, 0xe429, 0xa200,
+ 0x3c9d, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0x8111, 0x9e89,
+ 0xe045, 0xf043, 0x2c9a, 0xae10, 0xe041, 0xe003, 0x0200, 0x2869,
+ 0xb606, 0x3c69, 0xe423, 0xe001, 0x0200, 0x3e6a, 0x2869, 0xe428,
+ 0xe0c0, 0x0045, 0xaf04, 0xa802, 0x3c69, 0xf648, 0x2875, 0xa802,
+ 0xf03a, 0x3c69, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf068, 0xe0c0,
+ 0x0045, 0x306d, 0x286d, 0xe428, 0x289d, 0xf548, 0xe0c0, 0x005c,
+ 0xe008, 0x4000, 0xf4fa, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2,
+ 0x005d, 0xa202, 0xce00, 0x3c9d, 0xe40e, 0x07a9, 0xcbe1, 0xf7f9,
+ 0xcba1, 0xf7f9, 0xe42e, 0x286a, 0xe42a, 0xe41e, 0x07e6, 0xaf04,
+ 0xe000, 0x0180, 0xce30, 0x286a, 0xa806, 0xf10a, 0xa209, 0xe045,
+ 0xae07, 0x3e0a, 0xa2ff, 0x5a0a, 0xca32, 0xca32, 0xe051, 0xca30,
+ 0xa104, 0xe008, 0x01ff, 0xce30, 0xce33, 0xe005, 0x01f0, 0x1a6a,
+ 0xf095, 0xe004, 0x010b, 0xce32, 0xa200, 0xce32, 0xce32, 0xce32,
+ 0xe42e, 0xa021, 0xaf05, 0xe42b, 0xa200, 0xce32, 0xa103, 0xf7e1,
+ 0xe42e, 0xba0c, 0xf03a, 0xbcfc, 0xe42e, 0xba4c, 0xa20c, 0x3c96,
+ 0x2896, 0xa002, 0x3c96, 0xa140, 0xf0d2, 0xba40, 0xf7aa, 0x5896,
+ 0xa102, 0x349e, 0x3c9f, 0x2896, 0xe41e, 0x0856, 0x009e, 0x0c9f,
+ 0xe42e, 0xe16b, 0xe42e, 0xba0c, 0xf03a, 0xbe7e, 0xe42e, 0xba4c,
+ 0xa20c, 0x3c96, 0x2896, 0xa002, 0x3c96, 0xa140, 0xf162, 0xba40,
+ 0xf7aa, 0x5896, 0xa102, 0x349e, 0x3c9f, 0x2896, 0xe41e, 0x0856,
+ 0x009e, 0x0c9f, 0x3c9f, 0x8c9f, 0x0000, 0xa002, 0xaf02, 0xe012,
+ 0xe42c, 0xe012, 0xe16a, 0xe42e, 0xe16b, 0xe42e, 0xa120, 0xf050,
+ 0xa020, 0x3c97, 0x7497, 0xe42e, 0x3c97, 0xba5e, 0x5897, 0x7697,
+ 0xe056, 0xe42e, 0xba40, 0xe42a, 0xc868, 0xa80e, 0x3c00, 0xe016,
+ 0xe428, 0x7400, 0xe016, 0xe42e, 0x2a30, 0xa103, 0x2826, 0xe425,
+ 0xf02b, 0x2827, 0xb7f4, 0xa002, 0x3c46, 0xa104, 0xe424, 0xf04a,
+ 0xa25a, 0x3c47, 0xe42e, 0xbc0e, 0x3c00, 0xe42d, 0x281f, 0xf02a,
+ 0xbc0e, 0x3c01, 0xe42d, 0x2801, 0xae06, 0x4c00, 0x3c47, 0xe161,
+ 0x0708, 0xe164, 0x0700, 0x8840, 0x0022, 0xe41e, 0x089d, 0xe42d,
+ 0x2830, 0xa104, 0xe428, 0x2841, 0xe161, 0x0768, 0xe164, 0x0704,
+ 0x8841, 0x0022, 0xe41e, 0x089d, 0xe42e, 0xe082, 0xa040, 0xe094,
+ 0xa040, 0xe096, 0xe004, 0x00ff, 0x3c03, 0xa200, 0x3c05, 0x3c06,
+ 0x3c07, 0x3c08, 0x3c09, 0xe184, 0x08e9, 0xba40, 0xf0ba, 0xe0c6,
+ 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080, 0x4603, 0xe056, 0x3d11,
+ 0xf0ce, 0xa202, 0x5800, 0xae10, 0x3d11, 0x2206, 0x4e07, 0xa202,
+ 0x5805, 0xe056, 0x3406, 0x3c07, 0x281f, 0xf22a, 0xba40, 0xf14a,
+ 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080, 0x4603, 0xe056,
+ 0x3d12, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080, 0x4603,
+ 0xe056, 0x3d13, 0xf0de, 0xa202, 0x5801, 0xae10, 0x3d12, 0x3d13,
+ 0x2208, 0x4e09, 0xa202, 0x5805, 0xe056, 0x3408, 0x3c09, 0x2805,
+ 0xa002, 0x3c05, 0x2006, 0x4c07, 0xe014, 0x3514, 0x3d14, 0x2208,
+ 0x4e09, 0xe015, 0x3714, 0x3f14, 0xe42e, 0xe0c4, 0x3fff, 0xe40d,
+ 0x0aa7, 0x3c4a, 0x284a, 0xe01a, 0x4488, 0xe408, 0x0aa7, 0x2a7f,
+ 0xf039, 0x2a89, 0xf03b, 0xe408, 0x0aa7, 0xa200, 0x3c89, 0xbc12,
+ 0xe40d, 0x0aa7, 0xa10a, 0xb4a8, 0xa104, 0xe400, 0x0aa7, 0xb7b4,
+ 0xa006, 0x3c30, 0x2849, 0xf0da, 0xbdfe, 0xe40d, 0x0aa7, 0x1820,
+ 0xf0ea, 0x0820, 0x3c20, 0xe41e, 0x136a, 0xe40a, 0x0aa7, 0xf07e,
+ 0xbdfe, 0xe40d, 0x0aa7, 0x1820, 0xe408, 0x0aa3, 0x2849, 0xf04a,
+ 0x7411, 0x3c31, 0xf05e, 0x7411, 0x1831, 0xe408, 0x0aa3, 0x2849,
+ 0xf0ca, 0xa200, 0x3c32, 0x3c33, 0x2818, 0xf138, 0xba40, 0x3c32,
+ 0xf10a, 0xba40, 0x3c33, 0xf0de, 0x2818, 0xf0b8, 0xba40, 0x1832,
+ 0xe408, 0x0aa3, 0x2832, 0xf05a, 0xba40, 0x1833, 0xe408, 0x0aa3,
+ 0x2849, 0xf2aa, 0x281b, 0x5c32, 0x3c3c, 0xa200, 0x3c34, 0x2832,
+ 0xf10a, 0xe41e, 0x0ab4, 0x3c34, 0xe016, 0x3c35, 0xf0aa, 0xa202,
+ 0x3c35, 0x28a3, 0xe01a, 0x3c36, 0x2831, 0x3c37, 0x2833, 0x3c38,
+ 0x2832, 0xe016, 0x4419, 0x3c3a, 0x2832, 0x0833, 0xb674, 0x3c3b,
+ 0xa106, 0xf0aa, 0xa202, 0x5830, 0x2a3b, 0xa105, 0xf029, 0xae06,
+ 0x2a55, 0xe055, 0x3e55, 0x2849, 0xe40a, 0x09ce, 0x287e, 0xa104,
+ 0xe40a, 0x09cc, 0x2875, 0xa802, 0xf26a, 0xe0c0, 0x0065, 0xa808,
+ 0xf108, 0x3c7f, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xe40a, 0x09cc,
+ 0xa102, 0xf07a, 0xa102, 0xf02a, 0xf09e, 0x28a3, 0xf07a, 0xf3de,
+ 0xa202, 0x3c7f, 0x28a5, 0xf02a, 0xf38e, 0xa2fa, 0xe0c2, 0x0071,
+ 0x2855, 0xae04, 0x4c30, 0x2a5c, 0xae3d, 0xe056, 0xe0c2, 0x0073,
+ 0xa200, 0xe42e, 0x287f, 0xf0fa, 0x28a5, 0xf21a, 0x284a, 0xf1f8,
+ 0x287c, 0xf23a, 0x2a32, 0xf04b, 0x2a34, 0xe409, 0x09b0, 0xa102,
+ 0x3c7c, 0xf15e, 0x287d, 0xf19a, 0xa102, 0xf06a, 0xa102, 0xf060,
+ 0x28a3, 0xf04a, 0xf12e, 0x28a5, 0xf108, 0x287c, 0x2a32, 0xf04b,
+ 0x2a34, 0xe409, 0x09c4, 0xa102, 0xf04a, 0x3c7c, 0xa200, 0xe42e,
+ 0xa202, 0x3c89, 0x3c7e, 0xe42e, 0xa204, 0x3c7e, 0x2849, 0xf09a,
+ 0x28a5, 0xf10a, 0xe41e, 0x0819, 0xe40d, 0x0aa7, 0x3c3d, 0xf0ae,
+ 0x28a5, 0xf08a, 0xe41e, 0x0819, 0xe40d, 0x0aa7, 0x1c3d, 0xe408,
+ 0x0aa3, 0x2849, 0xf10a, 0xe41e, 0x1100, 0x28c8, 0xe008, 0x03ff,
+ 0x2a3b, 0xa105, 0xf029, 0xae14, 0xe0c1, 0x007a, 0xe055, 0xe0c3,
+ 0x007a, 0xf2de, 0x2813, 0xa102, 0xf034, 0xf13a, 0xf28e, 0x7414,
+ 0x1ce3, 0xe408, 0x0aa3, 0x2832, 0xe016, 0x4422, 0xf20a, 0xe41e,
+ 0x0833, 0xe40d, 0x0aa7, 0x10e4, 0x1ce5, 0xe408, 0x0aa3, 0xf17e,
+ 0x2815, 0xf158, 0xe41e, 0x0833, 0xe40d, 0x0aa7, 0x10e3, 0x1ce4,
+ 0xe408, 0x0aa3, 0x2832, 0xe016, 0x4422, 0xf09a, 0xe41e, 0x0833,
+ 0xe40d, 0x0aa7, 0x10e5, 0x1ce6, 0xe408, 0x0aa3, 0x2830, 0xa104,
+ 0xf038, 0xba40, 0x3c3e, 0x2824, 0x3c40, 0x2825, 0x3c41, 0x2830,
+ 0xf0ea, 0xba40, 0xf0ca, 0xbc3e, 0x3c40, 0xe40d, 0x0aa7, 0x2830,
+ 0xa104, 0xf058, 0xbc3e, 0x3c41, 0xe40d, 0x0aa7, 0x2849, 0xf0ba,
+ 0x2834, 0xf078, 0xe41e, 0x17cd, 0x28c1, 0xf054, 0x3c39, 0xf03e,
+ 0x2839, 0x3cc1, 0x2849, 0xf05a, 0xe41e, 0x1451, 0xe41e, 0x0ace,
+ 0x2830, 0xe016, 0xe41a, 0x0ad7, 0xe40a, 0x0aa7, 0xe41e, 0x086c,
+ 0xe40d, 0x0aa7, 0x2849, 0xf06a, 0xe41e, 0x0ffb, 0xe40a, 0x0aa7,
+ 0xf1fe, 0x28a3, 0xf1da, 0x28a5, 0xf04a, 0xba40, 0xba40, 0xf18e,
+ 0xba40, 0xf16a, 0xbc0c, 0xe40d, 0x0aa7, 0xf12a, 0xa106, 0xf08a,
+ 0xa104, 0xf79a, 0xe41e, 0x0819, 0xe40d, 0x0aa7, 0xf74e, 0xe41e,
+ 0x0819, 0xe40d, 0x0aa7, 0xbc40, 0xe40d, 0x0aa7, 0xf6ce, 0x2830,
+ 0xe01a, 0x4421, 0xf03a, 0xbc04, 0xf2bd, 0x3c3f, 0xe0c6, 0x0033,
+ 0xf27d, 0x0828, 0xa400, 0xa566, 0x3c42, 0xa200, 0x3c43, 0x3c44,
+ 0x3c45, 0x282a, 0xf10a, 0xbc04, 0xf1bd, 0x3c43, 0xa102, 0xf0ba,
+ 0xbe0c, 0xf16d, 0xae02, 0xa83e, 0x3c44, 0xbe0c, 0xf11d, 0xae02,
+ 0xa83e, 0x3c45, 0x2a3a, 0x284a, 0xe419, 0x0ac7, 0x3c4a, 0x183c,
+ 0xf072, 0xa202, 0xe42e, 0x283c, 0x3c4a, 0xa202, 0xe42e, 0xe16a,
+ 0x28c1, 0xf094, 0xe41e, 0x178d, 0x28c1, 0xe41e, 0x1794, 0x28c1,
+ 0xe41e, 0x179b, 0xa200, 0xe42e, 0x28a5, 0xe016, 0xe42a, 0x2835,
+ 0xe42a, 0x2838, 0x1833, 0xe42a, 0x28a3, 0xf048, 0x2836, 0xe016,
+ 0xe42e, 0x2836, 0xe42a, 0x2837, 0x1831, 0xe016, 0xe42e, 0xe049,
+ 0xc70f, 0x7e50, 0xaf21, 0xae02, 0xe046, 0xe42e, 0xe41e, 0x0bb2,
+ 0xd1f3, 0x0000, 0xe162, 0x0270, 0x2912, 0xcfe4, 0xe42e, 0xe161,
+ 0x0270, 0x2830, 0xa102, 0xf03a, 0xe161, 0x0290, 0x2840, 0x3c04,
+ 0xe162, 0x01b0, 0xe41e, 0x0b4f, 0xe42a, 0xd1f3, 0x0000, 0xe162,
+ 0x01b0, 0x8840, 0x0022, 0xe184, 0x0aee, 0x2912, 0xcfe4, 0x2830,
+ 0xa104, 0xe428, 0x2841, 0x3c04, 0xe161, 0x02b0, 0xe162, 0x01d0,
+ 0xe41e, 0x0b4f, 0xe42a, 0xd1f3, 0x0020, 0xe162, 0x01d0, 0x8841,
+ 0x0022, 0xe184, 0x0b04, 0x2912, 0xcfe4, 0xe161, 0x05e0, 0xa23e,
+ 0xc71f, 0x3d11, 0x2840, 0xe000, 0x01b0, 0xe094, 0x2a40, 0x8840,
+ 0x0022, 0xe184, 0x0b18, 0x290a, 0xe000, 0x05e0, 0xe092, 0x3f01,
+ 0xa103, 0xd1f9, 0x0000, 0xe162, 0x05e0, 0xd022, 0x001f, 0xe184,
+ 0x0b22, 0x2912, 0xcff0, 0xe162, 0x01d0, 0x2902, 0x3cc2, 0xe41e,
+ 0x0c03, 0xe41e, 0x0c2f, 0x34c5, 0x3cc6, 0x2902, 0xae02, 0xe000,
+ 0x0160, 0xe09e, 0x2117, 0x4d17, 0x2317, 0x4f17, 0x10c7, 0x1cc8,
+ 0x12c7, 0x1ec8, 0xe010, 0xe011, 0xe046, 0xb624, 0xb608, 0x3ccf,
+ 0x2902, 0xe41e, 0x0bfc, 0xa102, 0xb628, 0x3ccd, 0x2902, 0xaf02,
+ 0xe000, 0x01a0, 0xe09e, 0x2907, 0x3cce, 0xa202, 0xe42e, 0xba40,
+ 0xf098, 0x8804, 0x0022, 0xe184, 0x0b56, 0x2911, 0x3d12, 0xa202,
+ 0xe42e, 0x28c0, 0xe42a, 0xe082, 0x3c08, 0x2c12, 0x5832, 0x3400,
+ 0x3c01, 0x2c31, 0x5832, 0x0832, 0x3402, 0x3c03, 0x2804, 0x3c05,
+ 0xe163, 0x05e0, 0xa200, 0xc71f, 0x3d13, 0xbc06, 0xe40d, 0x0baf,
+ 0xf06a, 0xa102, 0xf13a, 0xa102, 0xf1ba, 0xf28e, 0xe41e, 0x0819,
+ 0xe40d, 0x0baf, 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032, 0x0000,
+ 0x0c01, 0x3402, 0x3c03, 0xa203, 0xf0de, 0xe41e, 0x0819, 0xe40d,
+ 0x0baf, 0xa002, 0x0002, 0x0c03, 0x1000, 0x1c01, 0xf70e, 0xbc40,
+ 0xa2ff, 0xe41e, 0x0bcc, 0xf1c4, 0x3d12, 0xe41e, 0x0be7, 0x2805,
+ 0xa102, 0x3c05, 0xa004, 0xe42a, 0xf51e, 0x2808, 0xa102, 0xe092,
+ 0xe163, 0x05e0, 0x2805, 0xf0a4, 0x2913, 0x8111, 0xf7e8, 0x2901,
+ 0x3d12, 0x2805, 0xa102, 0x3c05, 0xf76e, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0x28c1, 0xe424, 0xae04, 0x08c1, 0x08c1, 0xe000,
+ 0x0620, 0xe09e, 0xe166, 0x020d, 0xe165, 0x0214, 0xd022, 0x0002,
+ 0xe184, 0x0bc5, 0x2117, 0x4d17, 0x9f16, 0x9f15, 0x28c1, 0xe41e,
+ 0x0c2f, 0x34c3, 0x3cc4, 0xe42e, 0x3c06, 0x3e07, 0xe163, 0x0230,
+ 0x2816, 0xa102, 0xe424, 0xae02, 0xa002, 0xcc44, 0xe184, 0x0be4,
+ 0x2d13, 0x2b0b, 0x1c06, 0x1a07, 0xf078, 0xf069, 0xe086, 0xe002,
+ 0x0230, 0xaf02, 0xe42e, 0x8113, 0x8113, 0xa2fe, 0xe42e, 0x3c09,
+ 0x2808, 0xe092, 0x28c0, 0xa102, 0xcc44, 0xe184, 0x0bf2, 0x2901,
+ 0x1809, 0xf03a, 0x8111, 0xe42e, 0xe082, 0x1808, 0xe000, 0x05e0,
+ 0xe096, 0xa202, 0x3d03, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0101,
+ 0xe09e, 0x2907, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0103, 0xe09e,
+ 0x2907, 0xe42e, 0x3c0a, 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xe000,
+ 0x0180, 0x080a, 0xce20, 0xd111, 0x05e0, 0xd112, 0x0020, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042,
+ 0xe005, 0x055a, 0xae0f, 0x0a0a, 0xe042, 0xce20, 0xd111, 0x05e0,
+ 0xd112, 0x0020, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x3c0a,
+ 0xaf02, 0xae06, 0xe0c1, 0x0041, 0xe042, 0x22f0, 0x4ef1, 0xe042,
+ 0xe005, 0x055a, 0xae0f, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x05e0, 0xd112, 0x0004, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe004,
+ 0x05e0, 0xe09e, 0x2117, 0x4d17, 0x2a0a, 0xa803, 0xe42b, 0x2117,
+ 0x4d17, 0xe42e, 0xba4e, 0x3c4d, 0xa184, 0xe404, 0x0d5b, 0xa170,
+ 0xe400, 0x0d5b, 0xba46, 0x3c5d, 0xba46, 0xe408, 0x0d5b, 0xba4e,
+ 0x3c1c, 0xa112, 0xe404, 0x0d5b, 0xa154, 0xe400, 0x0d5b, 0xbc3e,
+ 0x3c10, 0xa202, 0x3c1f, 0x284d, 0xa1c8, 0xf2f8, 0xbc06, 0x3c1f,
+ 0xbc08, 0xe408, 0x0d5b, 0xbc08, 0xe408, 0x0d5b, 0xba40, 0xba40,
+ 0x3cb0, 0xf23a, 0xa201, 0x3eb2, 0x3eb4, 0xe160, 0x0000, 0xba40,
+ 0xf11a, 0x2ab2, 0xae03, 0xe056, 0x3cb2, 0xe080, 0xe41e, 0x0eb0,
+ 0x2ab4, 0xae03, 0xe056, 0x3cb4, 0xe080, 0xa201, 0xe41e, 0x0ee3,
+ 0xf07e, 0x2ab2, 0xae03, 0x3eb2, 0x2ab4, 0xae03, 0x3eb4, 0xe080,
+ 0xa002, 0xe090, 0xa110, 0xf648, 0xbc18, 0xe40d, 0x0d5b, 0xa008,
+ 0x3c11, 0xa202, 0x5811, 0x3c12, 0xbc04, 0x3c13, 0xe40d, 0x0d5b,
+ 0xa102, 0xf034, 0xf06a, 0xf21e, 0xbc18, 0xa008, 0x3c14, 0xf1de,
+ 0xba40, 0x3c15, 0xe41e, 0x0833, 0x34e7, 0x3ce8, 0xe41e, 0x0833,
+ 0x34e9, 0x3cea, 0xbdfe, 0xe40d, 0x0d5b, 0x3ceb, 0xf0ea, 0xa102,
+ 0xcc44, 0xe162, 0x0250, 0xe184, 0x0cc8, 0xe41e, 0x0833, 0x3512,
+ 0x3d12, 0xe41e, 0x0e2a, 0xf01e, 0xe40d, 0x0d5b, 0xbc20, 0xe40d,
+ 0x0d5b, 0x3c16, 0xba40, 0x3c17, 0x2250, 0x4e51, 0xe0c4, 0x007f,
+ 0xe40d, 0x0d5b, 0xa002, 0x3c50, 0xe0c4, 0x007f, 0xe40d, 0x0d5b,
+ 0xa002, 0x3c51, 0x8450, 0x8251, 0xe018, 0x3c1b, 0x2c57, 0xf1ba,
+ 0x2050, 0x4c51, 0xe046, 0xf20a, 0x2c57, 0xaf10, 0xe008, 0x00ff,
+ 0x1850, 0xf064, 0x2c57, 0xe008, 0x00ff, 0x1851, 0xf152, 0x2050,
+ 0x4c51, 0xae08, 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0xa2fe, 0x3c57,
+ 0xe40e, 0x0d5b, 0x2850, 0xe008, 0x00ff, 0xae10, 0x2a51, 0xe009,
+ 0x00ff, 0xe056, 0x3c57, 0xa200, 0x3c19, 0xba40, 0x3c18, 0xf098,
+ 0xba40, 0x3c19, 0x2851, 0xae02, 0x3c51, 0x281b, 0xae02, 0x3c1b,
+ 0xe0c0, 0x0059, 0xa102, 0xf038, 0xe41e, 0x0de7, 0xba40, 0x3c1a,
+ 0x4c18, 0xf3aa, 0xba40, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0xf14a,
+ 0xe41e, 0x0819, 0x3c58, 0xe41e, 0x0819, 0x3c59, 0xe41e, 0x0819,
+ 0x2a18, 0xf029, 0xae02, 0x3c5a, 0xe41e, 0x0819, 0x2a18, 0xf029,
+ 0xae02, 0x3c5b, 0xf21d, 0xe0c0, 0x0059, 0xa102, 0xf0e8, 0x2a1f,
+ 0x2058, 0x4c59, 0xf02b, 0xae02, 0xe0c2, 0x0076, 0x205a, 0x4c5b,
+ 0xf02b, 0xae02, 0xe0c2, 0x0077, 0xa200, 0x3c82, 0x3c83, 0x281d,
+ 0x3cde, 0x3cdf, 0xba40, 0xe016, 0xe41a, 0x0e3f, 0xf05a, 0xe41e,
+ 0x0862, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x0819,
+ 0x3c20, 0xbc3e, 0xe40d, 0x0de4, 0x1810, 0xf0ea, 0x0810, 0x3c10,
+ 0xe41e, 0x1343, 0x3c66, 0xa202, 0xe41e, 0x06e8, 0xa203, 0x3e94,
+ 0x2866, 0xe40a, 0x0de4, 0xba40, 0x3c21, 0xba40, 0x3c22, 0xbc0e,
+ 0xe40d, 0x0de4, 0x3c23, 0xe408, 0x0de4, 0xbc3e, 0xe40d, 0x0de4,
+ 0x3c24, 0xbc3e, 0x3c25, 0xe40d, 0x0de4, 0xba40, 0x3c26, 0xba42,
+ 0x3c27, 0xbe34, 0xe40d, 0x0de4, 0xa034, 0x3c28, 0xe404, 0x0de4,
+ 0xa168, 0xe402, 0x0de4, 0xbe34, 0xe40d, 0x0de4, 0xa034, 0xe404,
+ 0x0de4, 0xa168, 0xe402, 0x0de4, 0xbe18, 0xe40d, 0x0de4, 0x3c29,
+ 0x3c2d, 0xba40, 0x3c2a, 0xba40, 0x3c2b, 0xba40, 0x3c2c, 0xa200,
+ 0x3c2e, 0x3cb1, 0x2820, 0x3c02, 0xe41e, 0x1409, 0xe41e, 0x05f7,
+ 0xf30a, 0xba40, 0x3c2e, 0xba40, 0x3cb1, 0xf28a, 0xa201, 0x3eb3,
+ 0x3eb5, 0xe160, 0x0000, 0xe080, 0xa10c, 0x182e, 0x182e, 0xf132,
+ 0xba40, 0xf11a, 0x2ab3, 0xae03, 0xe056, 0x3cb3, 0xe080, 0xe41e,
+ 0x0eb0, 0x2ab5, 0xae03, 0xe056, 0x3cb5, 0xe080, 0xa203, 0xe41e,
+ 0x0ee3, 0xf07e, 0x2ab3, 0xae03, 0x3eb3, 0x2ab5, 0xae03, 0x3eb5,
+ 0xe080, 0xa002, 0xe090, 0xa110, 0xf5f8, 0xbe18, 0xf06d, 0x3c2d,
+ 0xe41e, 0x0862, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x2a1c,
+ 0xa115, 0xe004, 0x0129, 0xf2d7, 0xa103, 0xe004, 0x02a3, 0xf297,
+ 0xa113, 0xe004, 0x06f6, 0xf257, 0xa103, 0xe004, 0x0dec, 0xf217,
+ 0xa113, 0xe004, 0x17bb, 0xf1d7, 0xa103, 0xe004, 0x34bc, 0xf197,
+ 0xa103, 0xe004, 0x3c00, 0xf157, 0xa113, 0xe004, 0x6000, 0xf117,
+ 0xa103, 0xe004, 0x6600, 0xf0d7, 0xa111, 0xe004, 0x1437, 0xae08,
+ 0xf087, 0xa103, 0xe004, 0x21c0, 0xae08, 0xf037, 0xe004, 0x17bb,
+ 0xae12, 0x841b, 0xe182, 0x0180, 0xe019, 0xc407, 0xd022, 0x000f,
+ 0xe184, 0x0e24, 0xe046, 0xf034, 0x8117, 0xe190, 0xe08e, 0xa520,
+ 0x3c1d, 0xe42e, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005,
+ 0x029e, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0250,
+ 0xd112, 0x0200, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xba40,
+ 0xf15a, 0xba4e, 0xe0c1, 0x0059, 0xa103, 0xf039, 0xe0c2, 0x006c,
+ 0xe002, 0x00ff, 0xf0b8, 0xba5e, 0xba5f, 0xae20, 0xe056, 0xe0c1,
+ 0x0059, 0xa103, 0xf039, 0xe0c2, 0x006c, 0xba40, 0xf02a, 0xba40,
+ 0xba40, 0xf08a, 0xba44, 0xba40, 0xba40, 0xf04a, 0xba4e, 0xba4e,
+ 0xba4e, 0xba40, 0xf03a, 0xbc0a, 0xbc0a, 0xba40, 0xf08a, 0xba7e,
+ 0xe0c2, 0x0079, 0xba7e, 0xe0c2, 0x007a, 0xba40, 0xba40, 0x3c82,
+ 0xe016, 0xe161, 0x05bc, 0xe41a, 0x0e95, 0xf1da, 0xba40, 0x3c83,
+ 0xe016, 0xe161, 0x05c1, 0xe41a, 0x0e95, 0xf15a, 0x2882, 0x4c83,
+ 0xf02a, 0xba40, 0xba40, 0x3c4f, 0xba40, 0xf0aa, 0xba40, 0xbc20,
+ 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0x3cde, 0xbc20, 0x3cdf, 0xe16a,
+ 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x0819, 0xcc44,
+ 0xa002, 0x3d11, 0xba46, 0xba46, 0xe184, 0x0ea2, 0xe41e, 0x0819,
+ 0xe41e, 0x0819, 0xba40, 0xba48, 0xa002, 0x3d11, 0xba48, 0xa002,
+ 0x3d11, 0xba48, 0xa002, 0x3d11, 0xba48, 0x3d11, 0xa202, 0xe42e,
+ 0xd022, 0x000f, 0xa10c, 0xf034, 0xd022, 0x003f, 0xe161, 0x05e0,
+ 0xa210, 0x3c06, 0x3c07, 0xa200, 0x3c08, 0x3c09, 0xe09c, 0xe09e,
+ 0xe184, 0x0ee0, 0x2807, 0xf10a, 0xe41e, 0x0833, 0xe42d, 0x0806,
+ 0xe000, 0x0100, 0xe008, 0x00ff, 0x3c07, 0x4c09, 0xe01a, 0xe016,
+ 0xe09e, 0xa202, 0x3c09, 0x2807, 0xf028, 0x2806, 0x3c06, 0xe08d,
+ 0xa003, 0xe09d, 0xa803, 0xf059, 0xe085, 0xae11, 0xe056, 0x3d11,
+ 0xe094, 0xe08e, 0xe42e, 0x3e08, 0x3c06, 0xa211, 0x3e07, 0xa10c,
+ 0xf064, 0xb690, 0xa00c, 0x3c06, 0xa240, 0x3c07, 0x2806, 0x2a08,
+ 0xf02b, 0xa01c, 0xae08, 0x3c06, 0xe0c0, 0x0041, 0x22f0, 0x4ef1,
+ 0xe042, 0xe005, 0x02ab, 0xae11, 0xe042, 0x0806, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x05e0, 0x2807, 0xce24, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0x2875, 0xa802, 0xe42a, 0xe0c0, 0x0045, 0xaf04,
+ 0xa802, 0xe42e, 0xa200, 0xba4f, 0xe042, 0xe003, 0x00ff, 0xf7cb,
+ 0x3c00, 0xa200, 0xba4f, 0xe042, 0xe003, 0x00ff, 0xf7cb, 0x3c01,
+ 0xe41e, 0x0f29, 0xe42a, 0xe41e, 0x05e9, 0xf6d8, 0xe41e, 0x0862,
+ 0xe42e, 0x2800, 0xf10a, 0xa102, 0xf11a, 0xa104, 0xf12a, 0xa102,
+ 0xf13a, 0xa102, 0xf14a, 0x2a01, 0xf04b, 0xba4e, 0xa103, 0xf7e9,
+ 0xa202, 0xe42e, 0xe41e, 0x0f51, 0xf0de, 0xe41e, 0x0f78, 0xf0ae,
+ 0xe41e, 0x0fd3, 0xf07e, 0xe41e, 0x0fe3, 0xf04e, 0xe41e, 0x0ff1,
+ 0xf01e, 0xe42a, 0xc868, 0xa80e, 0xe016, 0xe428, 0xe41e, 0x0862,
+ 0xe42e, 0xbc3e, 0x1810, 0xf0da, 0x0810, 0x3c10, 0xe41e, 0x1343,
+ 0x3c66, 0xa200, 0xe41e, 0x06e8, 0xa201, 0x3e94, 0x2866, 0xe42a,
+ 0x2882, 0xe161, 0x05bc, 0xe418, 0x0f6c, 0x2883, 0xe161, 0x05c1,
+ 0xe418, 0x0f6c, 0xa202, 0xe42e, 0x2911, 0xa102, 0xcc44, 0xe184,
+ 0x0f76, 0x2901, 0xe41e, 0x0856, 0x2901, 0xe41e, 0x0856, 0xe42e,
+ 0xe166, 0x004c, 0x2882, 0xe161, 0x05be, 0xf038, 0xe161, 0x05c3,
+ 0x4c83, 0xf09a, 0x2911, 0xe41e, 0x0856, 0x2911, 0xe41e, 0x0856,
+ 0x2911, 0xf02e, 0xa230, 0x3c02, 0x284f, 0xe016, 0xe428, 0xba46,
+ 0xe0c2, 0x007b, 0xa112, 0xb604, 0xe42a, 0xa012, 0xe049, 0xa200,
+ 0xa107, 0xb426, 0xa105, 0xb426, 0xa105, 0xb5f6, 0xcc44, 0xe184,
+ 0x0fd0, 0xa201, 0xba40, 0xf038, 0x9f96, 0xf2be, 0xba42, 0xba40,
+ 0xba48, 0xba40, 0x3c03, 0xba40, 0xba40, 0xae32, 0xe055, 0xba4e,
+ 0xe055, 0x2803, 0xf0ba, 0xba4a, 0xae10, 0xe055, 0xba4a, 0xae1c,
+ 0xe055, 0xba48, 0xae28, 0xe055, 0xf10e, 0xba40, 0xf0ea, 0xba4a,
+ 0xae10, 0xe055, 0xba40, 0xf09a, 0xba4a, 0xae1c, 0xe055, 0xba40,
+ 0xf04a, 0xba48, 0xae28, 0xe055, 0x9f96, 0x2802, 0xe41e, 0x0856,
+ 0xe190, 0xa202, 0xe42e, 0x2801, 0xf0da, 0xa102, 0xcc44, 0xe004,
+ 0x00ff, 0xe184, 0x0fdc, 0xba4f, 0xe052, 0xe002, 0x00ff, 0xe016,
+ 0xe42a, 0xa202, 0xe42e, 0xa202, 0xba4f, 0xe003, 0x00ff, 0xf039,
+ 0xba4f, 0xa204, 0xba4f, 0xa002, 0x2a01, 0xe045, 0xf7c1, 0xa202,
+ 0xe42e, 0x2801, 0xa420, 0xa102, 0xcc44, 0xe184, 0x0ff8, 0xba4e,
+ 0xe190, 0xa202, 0xe42e, 0x2c31, 0x3cd0, 0xa202, 0x3cd1, 0xa200,
+ 0x3cd2, 0x3cd3, 0x28a3, 0xe016, 0xe428, 0x28a5, 0xf0ca, 0xe41e,
+ 0x1098, 0xba40, 0xba40, 0xb7f0, 0xb634, 0x3cd1, 0xa200, 0x3cd0,
+ 0xa202, 0xe42e, 0xba40, 0xf048, 0xa202, 0x3cd2, 0xe42e, 0x2816,
+ 0xe42a, 0xae02, 0x3c09, 0x2812, 0x5832, 0x3400, 0x3c01, 0x2c31,
+ 0x5832, 0x0832, 0x3402, 0x3c03, 0xbc0c, 0xe40d, 0x1095, 0xe40a,
+ 0x1093, 0xa102, 0xf0ca, 0xa102, 0xf1da, 0xa102, 0xf24a, 0xa102,
+ 0xf3aa, 0xa102, 0xe40a, 0x1073, 0xe40e, 0x107b, 0xe41e, 0x0819,
+ 0xe40d, 0x1095, 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032, 0x0000,
+ 0x0c01, 0xa203, 0xe41e, 0x109f, 0xe408, 0x1048, 0xa203, 0x3ed2,
+ 0xf5ce, 0xbc40, 0xe40d, 0x1095, 0xa2ff, 0xe41e, 0x109f, 0xe40a,
+ 0x1095, 0xf53e, 0xe41e, 0x0819, 0xe40d, 0x1095, 0xa002, 0x1002,
+ 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01, 0x3c06, 0xa802, 0x4432,
+ 0xbc21, 0xf34d, 0x5a32, 0xe041, 0x3e07, 0xe41e, 0x10b7, 0xf2ea,
+ 0xe40e, 0x1024, 0xbc20, 0xf2ad, 0xa102, 0x5832, 0x0832, 0xe41e,
+ 0x10d2, 0xe40e, 0x1024, 0xe41e, 0x1098, 0xa202, 0x3cd3, 0xa200,
+ 0x3cd0, 0xe40e, 0x1024, 0xbc20, 0xf19d, 0x3cd0, 0x28d0, 0x5832,
+ 0x0832, 0xa2ff, 0xe41e, 0x109f, 0xf7a8, 0x2832, 0xf09a, 0x2834,
+ 0xf078, 0x28d0, 0xae02, 0xa2ff, 0xe41e, 0x109f, 0xf7b8, 0xa2fe,
+ 0x3cd1, 0xe40e, 0x1024, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xc410, 0xe161, 0x01f1, 0xa200, 0xc71f, 0x3d31, 0xe42e, 0x3c04,
+ 0x3e05, 0xe161, 0x01f0, 0x8809, 0x0022, 0xe184, 0x10b2, 0x2d11,
+ 0x2b09, 0x1c04, 0x1a05, 0xf068, 0xf059, 0x8111, 0xa200, 0x3d09,
+ 0xf05e, 0x8111, 0x8111, 0xa200, 0xe42e, 0xa202, 0xe42e, 0x2807,
+ 0xa2ff, 0xe41e, 0x109f, 0xf7c8, 0xe161, 0x01f0, 0x8809, 0x0022,
+ 0xe184, 0x10cd, 0x2d11, 0x2b09, 0x1c06, 0xf078, 0xf067, 0x2807,
+ 0x3d11, 0xa2fe, 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200, 0xe42e,
+ 0xa202, 0xe42e, 0x3c08, 0xe161, 0x01f0, 0x8809, 0x0022, 0xe184,
+ 0x10e2, 0x2d11, 0x2b09, 0x1808, 0xf056, 0xf043, 0x8111, 0xa200,
+ 0x3d09, 0x8111, 0x8111, 0xe42e, 0x2816, 0x184e, 0xf112, 0x884e,
+ 0x0022, 0xe161, 0x0102, 0xe184, 0x10f6, 0x2911, 0xf06a, 0x2909,
+ 0xe412, 0x178d, 0xa200, 0x3d11, 0xe082, 0xa006, 0xe092, 0x2816,
+ 0xb62c, 0x3c4e, 0x2813, 0xa104, 0xe428, 0xe41e, 0x1296, 0xe42e,
+ 0x2813, 0xa102, 0xf034, 0xf0fa, 0xf2be, 0x7414, 0x3ce3, 0x2832,
+ 0xe016, 0x4422, 0xe418, 0x0833, 0xe42d, 0x34e4, 0x3ce5, 0xe41e,
+ 0x11d7, 0xf20e, 0xa200, 0x34e3, 0x3ce4, 0x34e5, 0x3ce6, 0x2815,
+ 0xf0f8, 0xe41e, 0x0833, 0xe42d, 0x34e3, 0x3ce4, 0x2822, 0xf08a,
+ 0x2832, 0xf068, 0xe41e, 0x0833, 0xe42d, 0x34e5, 0x3ce6, 0xe41e,
+ 0x1213, 0xf08e, 0x34e3, 0x3ce4, 0x34e5, 0x3ce6, 0xf03e, 0xe41e,
+ 0x1256, 0x2832, 0x2a33, 0xf0b9, 0xf078, 0x20c9, 0x4cca, 0x22cb,
+ 0x4ecc, 0xe066, 0xf06e, 0x20c9, 0x4cca, 0xf03e, 0x20cb, 0x4ccc,
+ 0x34c7, 0x3cc8, 0xe42e, 0x281e, 0xf04a, 0x2813, 0xa104, 0xf088,
+ 0x28c1, 0x3c01, 0xe41e, 0x1794, 0xe41e, 0x12d3, 0xe42e, 0x28a5,
+ 0x4cd3, 0xe418, 0x1296, 0x28d8, 0xae02, 0xe000, 0x0578, 0xe092,
+ 0x20c7, 0x4cc8, 0x3511, 0x3d11, 0x28d8, 0xe000, 0x059a, 0xe092,
+ 0x28c1, 0x3d11, 0x28d8, 0xa002, 0x3cd8, 0xa200, 0x3c0c, 0xe41e,
+ 0x17b1, 0xf098, 0xe41e, 0x129b, 0x280c, 0xa180, 0xf052, 0xa082,
+ 0x3c0c, 0xf76e, 0xe42e, 0xe41e, 0x1787, 0xe42e, 0x28c1, 0xe424,
+ 0xe000, 0x06e0, 0xe092, 0x20aa, 0x4cab, 0x8450, 0x8251, 0xe019,
+ 0xe41e, 0x1188, 0xe049, 0xa141, 0xf027, 0xa240, 0x3d01, 0xe42e,
+ 0x3e0a, 0xa201, 0xf032, 0xe012, 0xa203, 0x3e0e, 0x3c0b, 0xaf20,
+ 0xc70f, 0x7c0a, 0x3c0c, 0xaf20, 0xae20, 0x4c0b, 0xc70f, 0x7c0a,
+ 0x3c0d, 0x200c, 0x4c0d, 0x2a0e, 0xe42b, 0xe012, 0xe42e, 0xe41e,
+ 0x0f0a, 0xf04a, 0xe41e, 0x1296, 0xf0be, 0x287f, 0xf04a, 0xe41e,
+ 0x1296, 0xf06e, 0x28dc, 0xf04a, 0xa102, 0x3cdc, 0xf1ee, 0x28db,
+ 0xf1ca, 0x28da, 0xe000, 0x05ab, 0xe092, 0x28da, 0xa002, 0x3cda,
+ 0xa122, 0xf028, 0x3cda, 0x28db, 0xa102, 0x3cdb, 0x287f, 0xf0ba,
+ 0x28db, 0xf05a, 0x2901, 0xe41e, 0x179b, 0xf6ae, 0x281e, 0xf03a,
+ 0x28de, 0x3cdc, 0x2901, 0xe42e, 0xe41e, 0x0f0a, 0xf078, 0x286c,
+ 0xf058, 0x287d, 0xf03a, 0xa2fc, 0xe42e, 0xa2fe, 0xe42e, 0xa202,
+ 0x5814, 0xaf02, 0x3c06, 0x28a5, 0x2ad7, 0xf078, 0xf099, 0x20e6,
+ 0x4ce7, 0x22e8, 0x4ee9, 0xf07e, 0xa200, 0xa201, 0xf04e, 0xa200,
+ 0x22ea, 0x4eeb, 0x3400, 0x3c01, 0x3602, 0x3e03, 0x2ee3, 0x1202,
+ 0x1e03, 0xf071, 0xe013, 0x1e06, 0xf085, 0x0c06, 0x0c06, 0xf05e,
+ 0x1e06, 0xf037, 0x1c06, 0x1c06, 0x3404, 0x3c05, 0x0ce3, 0x34c9,
+ 0x3cca, 0x00e4, 0x0ce5, 0x34cb, 0x3ccc, 0x28a3, 0xf0ca, 0x20c9,
+ 0x4cca, 0x34ea, 0x3ceb, 0x2004, 0x4c05, 0x34e6, 0x3ce7, 0x2ce3,
+ 0x34e8, 0x3ce9, 0xe42e, 0xe41e, 0x1267, 0x28eb, 0xf30a, 0x2000,
+ 0x4c01, 0x0c31, 0xf2c6, 0x2aa3, 0xe017, 0xe046, 0xa102, 0xf274,
+ 0xe188, 0x000f, 0x7ceb, 0x3402, 0x3c03, 0xe41e, 0x1281, 0x28eb,
+ 0xa102, 0xcc44, 0xe161, 0x0250, 0xa200, 0xe184, 0x1230, 0x0111,
+ 0x0d11, 0xae02, 0x3404, 0xe008, 0xffff, 0xaf02, 0x3c05, 0x8403,
+ 0x8204, 0xe018, 0xae1e, 0x8205, 0xe01c, 0xe161, 0x0250, 0x8802,
+ 0x0022, 0xe184, 0x1244, 0x0111, 0x0d11, 0xf02e, 0xa200, 0x2aa3,
+ 0xf039, 0x00e7, 0x0ce8, 0x00e3, 0x0ce4, 0x34c9, 0x3cca, 0x00e9,
+ 0x0cea, 0x00e5, 0x0ce6, 0x34cb, 0x3ccc, 0xe42e, 0xe41e, 0x1267,
+ 0x28a5, 0xe016, 0xf08a, 0x2000, 0x4c01, 0x0c31, 0xae02, 0x2aa3,
+ 0xe017, 0xe046, 0x34c9, 0x3cca, 0x34cb, 0x3ccc, 0xe42e, 0x28d7,
+ 0xf05a, 0xa200, 0x34e1, 0x3ce2, 0x3ce0, 0x28a5, 0xe016, 0xf09a,
+ 0x20e1, 0x4ce2, 0x2ee0, 0x1e31, 0xf047, 0xa203, 0x5a11, 0xe042,
+ 0x3400, 0x3c01, 0x2831, 0x3ce0, 0x2000, 0x4c01, 0x34e1, 0x3ce2,
+ 0xe42e, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029e,
+ 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0250, 0xd112,
+ 0x0200, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0x28d8, 0xe426,
+ 0xe41e, 0x129b, 0xf7ce, 0x28d8, 0xe426, 0xe161, 0x0578, 0xe162,
+ 0x0578, 0x2111, 0x4d11, 0xa201, 0x3e00, 0xa203, 0x28d8, 0xa104,
+ 0xf0e4, 0xcc44, 0xe184, 0x12b5, 0x2112, 0x4d0a, 0x1111, 0x1d11,
+ 0xf054, 0xe082, 0xa104, 0xe094, 0x3e00, 0xa003, 0xe084, 0xa004,
+ 0xe092, 0x2800, 0xe000, 0x059a, 0xe098, 0xa002, 0xe096, 0x2904,
+ 0x3c01, 0xe41e, 0x1794, 0x28d8, 0x1800, 0xa104, 0xf0a4, 0xcc44,
+ 0xe184, 0x12cf, 0x2911, 0x3d12, 0x2911, 0x3d12, 0x2913, 0x3d14,
+ 0x28d8, 0xa102, 0x3cd8, 0x28d9, 0xe000, 0x05ab, 0xe092, 0x2801,
+ 0x3d01, 0x28d9, 0xa002, 0x3cd9, 0xa122, 0xf028, 0x3cd9, 0x28db,
+ 0xa002, 0x3cdb, 0xe42e, 0xa200, 0x3c68, 0x28d4, 0xa102, 0xcc44,
+ 0xe184, 0x12ff, 0xe0c0, 0x0054, 0x5c68, 0xa802, 0xf0b8, 0x2868,
+ 0xe049, 0xe001, 0x0518, 0xe09f, 0x2b07, 0xa809, 0xe419, 0x179b,
+ 0xf05e, 0x2868, 0xa209, 0xe41e, 0x17aa, 0x2a68, 0xa003, 0x3e68,
+ 0xe42e, 0xe004, 0x0518, 0xe09e, 0xe004, 0x0054, 0xe09c, 0x28d4,
+ 0xa102, 0xcc44, 0xa200, 0x3c68, 0xe184, 0x1315, 0x2b17, 0xaf05,
+ 0xa803, 0x5a68, 0xe056, 0x2a68, 0xa003, 0x3e68, 0x9f06, 0xe42e,
+ 0xe161, 0x05e0, 0xa200, 0x3d11, 0x3c02, 0xd022, 0x011f, 0xe184,
+ 0x1325, 0xe41e, 0x1407, 0x2802, 0xa002, 0x3c02, 0xa200, 0x3c94,
+ 0x3c90, 0x3c91, 0xe42e, 0xba4e, 0xba40, 0xba40, 0xba40, 0xba40,
+ 0xba46, 0xba4e, 0xbc3e, 0xf0dd, 0x3c00, 0x1810, 0xf038, 0xa2fe,
+ 0x3c10, 0x2800, 0xe000, 0x0100, 0xe41e, 0x138d, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0xa204, 0x3c94, 0x2810, 0xe000, 0x0100,
+ 0xe41e, 0x13d9, 0xe42a, 0xe41e, 0x0c52, 0xf05a, 0xe41e, 0x10e4,
+ 0xa202, 0xe42e, 0xa2fe, 0x3c10, 0xa200, 0xe42e, 0xe41e, 0x0819,
+ 0xf0fd, 0x3c01, 0xe002, 0x00ff, 0xf0b0, 0x2801, 0x1820, 0xf038,
+ 0xa2fe, 0x3c20, 0x2801, 0xe41e, 0x138d, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0xa202, 0x3c94, 0x2820, 0xe41e, 0x13d9, 0xe42a,
+ 0xe41e, 0x0d5e, 0x3c66, 0xa200, 0xe41e, 0x06e8, 0xa201, 0x3e94,
+ 0x2866, 0xf03a, 0xa202, 0xe42e, 0xa2fe, 0x3c20, 0xa200, 0xe42e,
+ 0x2863, 0xa102, 0xf06a, 0x2092, 0x4c93, 0xe41e, 0x1433, 0xe470,
+ 0x2080, 0x4c81, 0xe41e, 0x1442, 0xe470, 0x3c02, 0xe41e, 0x1409,
+ 0xa200, 0x3c03, 0xe161, 0x05e0, 0x2901, 0xa203, 0x3f11, 0xf10a,
+ 0x28a7, 0x1901, 0xf0d0, 0x28a7, 0xe002, 0x0200, 0xf092, 0x8111,
+ 0x2111, 0x4d11, 0x3404, 0x3c05, 0xa202, 0x3c03, 0xf08e, 0x2090,
+ 0x4c91, 0x3404, 0x3c05, 0x8111, 0x3511, 0x3d11, 0xe41e, 0x1426,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0x28a7, 0xa00e, 0xaf06,
+ 0xae02, 0xce24, 0xd113, 0x0012, 0xca28, 0xf7f8, 0x28a6, 0xf0a8,
+ 0xe41e, 0x05cc, 0x2004, 0x4c05, 0xe000, 0x0200, 0x3404, 0x3c05,
+ 0xf66e, 0xe161, 0x05e1, 0x28a7, 0x3d01, 0x2a03, 0xf089, 0xa00e,
+ 0xaf06, 0xae06, 0x0090, 0x0c91, 0x3490, 0x3c91, 0xe41e, 0x1407,
+ 0xe42e, 0x3c02, 0xe41e, 0x1409, 0xe161, 0x05e0, 0x2911, 0xe42a,
+ 0x8111, 0x2111, 0x4d11, 0x3404, 0x3c05, 0x2894, 0xa102, 0xf0ba,
+ 0xe41e, 0x1426, 0xe41e, 0x1433, 0xa204, 0xe41e, 0x06e8, 0xe004,
+ 0x0090, 0xf0ae, 0xe41e, 0x1426, 0xe41e, 0x1442, 0xa202, 0xe41e,
+ 0x06e8, 0xe004, 0x0080, 0xcc66, 0xcc6a, 0xcc6e, 0xa01e, 0xcc6c,
+ 0xa200, 0xcc60, 0xcc68, 0xcc70, 0xe128, 0xa202, 0xe42e, 0xa204,
+ 0xf02e, 0xa206, 0x3c0a, 0xe41e, 0x1419, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x05e0, 0xd112, 0x0004, 0x880a, 0x0113, 0xca28, 0xf7f8,
+ 0xe42e, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02a2,
+ 0xae11, 0xe042, 0x2a02, 0xae07, 0xe042, 0xe42e, 0xe0c0, 0x0041,
+ 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02ae, 0xae11, 0xe042, 0x2204,
+ 0x4e05, 0xe042, 0xe42e, 0xca29, 0xf7f9, 0xce20, 0xa080, 0x3492,
+ 0x3c93, 0xd111, 0x0090, 0xd112, 0x0010, 0xd113, 0x0013, 0xca28,
+ 0xf7f8, 0xe42e, 0xca29, 0xf7f9, 0xce20, 0xa080, 0x3480, 0x3c81,
+ 0xd111, 0x0080, 0xd112, 0x0010, 0xd113, 0x0013, 0xca28, 0xf7f8,
+ 0xe42e, 0x2816, 0xe42a, 0xa102, 0x3c00, 0x28a3, 0xe01a, 0x4417,
+ 0xe418, 0x1580, 0xe41e, 0x1593, 0xe41e, 0x15c7, 0xe41e, 0x15ec,
+ 0xe42e, 0x28d3, 0xf11a, 0x20c9, 0x4cca, 0x10c7, 0x1cc8, 0x34c9,
+ 0x3cca, 0x20cb, 0x4ccc, 0x10c7, 0x1cc8, 0x34cb, 0x3ccc, 0xa200,
+ 0x34c7, 0x3cc8, 0x3c37, 0x2c31, 0x2aa5, 0x4ed3, 0xb612, 0x3cd5,
+ 0x2816, 0xe42a, 0xa102, 0x3c00, 0x2831, 0x3c01, 0x2834, 0xe016,
+ 0x44d2, 0xe418, 0x1516, 0x28d2, 0xe41a, 0x1544, 0x2834, 0xe408,
+ 0x14da, 0xe41e, 0x149a, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0101,
+ 0xe09e, 0x2907, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0103, 0xe09e,
+ 0x2907, 0xe42e, 0xc420, 0xe161, 0x0102, 0x8800, 0x0022, 0xe184,
+ 0x14a3, 0x2901, 0xf03a, 0x8131, 0xe42e, 0xe082, 0xe002, 0x0102,
+ 0xaf04, 0x3c0a, 0x283b, 0x3d09, 0x28d1, 0x3d09, 0x28d0, 0x3d31,
+ 0x8109, 0x28c1, 0x3d11, 0xe082, 0xe000, 0x005c, 0xe094, 0xe002,
+ 0x0160, 0xaf02, 0xe000, 0x0140, 0xe092, 0x20c7, 0x4cc8, 0x3511,
+ 0x3d11, 0x2a3b, 0xa105, 0x2112, 0x4d0a, 0xf03b, 0x20c9, 0x4cca,
+ 0x3512, 0x3d12, 0x2112, 0x4d0a, 0xf035, 0x20cb, 0x4ccc, 0x3512,
+ 0x3d12, 0x280a, 0xe000, 0x01a0, 0xe092, 0xa206, 0x183b, 0xe01a,
+ 0x3d01, 0xe42e, 0xe161, 0x0100, 0x8800, 0x0022, 0xe184, 0x14e7,
+ 0x2d11, 0x2b11, 0x1cd0, 0x1ad1, 0xf028, 0xf04b, 0x8111, 0x8111,
+ 0xe42e, 0xa206, 0x3d01, 0xe082, 0xe000, 0x005e, 0xe094, 0xe002,
+ 0x0160, 0xaf02, 0xe000, 0x0140, 0xe092, 0xe002, 0x0140, 0xaf02,
+ 0x3c0a, 0x20c7, 0x4cc8, 0x2311, 0x4f09, 0xe066, 0x3511, 0x3d11,
+ 0xf41e, 0xc420, 0xe161, 0x0102, 0x8800, 0x0022, 0xe184, 0x150a,
+ 0x2901, 0xf03a, 0x8131, 0xe42e, 0xa206, 0x3d09, 0xa202, 0x3d09,
+ 0x2801, 0x3d31, 0x8109, 0xa2fe, 0x3d11, 0xe42e, 0xa200, 0xc420,
+ 0xe161, 0x0102, 0x8800, 0x0022, 0xe184, 0x1520, 0x2b31, 0xe01b,
+ 0xe042, 0x1816, 0xe424, 0xa203, 0xae21, 0xe161, 0x0102, 0x8800,
+ 0x0022, 0xe184, 0x153d, 0x2909, 0xf10a, 0x2909, 0xf0d6, 0x2901,
+ 0x1c01, 0xf026, 0x1c12, 0x0c01, 0xe046, 0xf062, 0xe042, 0xe049,
+ 0xe082, 0xa004, 0xe094, 0x8111, 0x8111, 0x8131, 0xa200, 0x3d12,
+ 0x2912, 0xe412, 0x178d, 0xe42e, 0xe161, 0x0100, 0xe162, 0x01f0,
+ 0x8800, 0x0022, 0xe184, 0x157e, 0x2832, 0xf098, 0x2912, 0x3c02,
+ 0x2912, 0x3c03, 0xe01a, 0xb670, 0x3c04, 0xf15e, 0x2912, 0xaf02,
+ 0x3c02, 0x2912, 0x3c03, 0xe01a, 0x3c04, 0x8112, 0x290a, 0xe01a,
+ 0xae02, 0x4c04, 0x3c04, 0xa802, 0xf068, 0x2912, 0xaf02, 0x3c02,
+ 0x290a, 0x3c03, 0x2804, 0x8112, 0x8112, 0xf08a, 0x2802, 0x3d11,
+ 0x2803, 0x3d11, 0x2804, 0x3d11, 0xf0ae, 0x8111, 0x8111, 0x2901,
+ 0xa201, 0x3f11, 0xf04a, 0x2901, 0xe412, 0x178d, 0x8111, 0xe42e,
+ 0x28a5, 0xe428, 0x2834, 0xe428, 0x2cd5, 0x3c01, 0x2801, 0xa002,
+ 0xc70f, 0x7c12, 0xaf20, 0x3c01, 0x1c31, 0xe42a, 0xe41e, 0x1516,
+ 0xe41e, 0x1501, 0xf74e, 0xe161, 0x0100, 0xe162, 0x01f0, 0x8800,
+ 0x0022, 0xe184, 0x15bb, 0x2832, 0xf0c8, 0x2911, 0x3d12, 0x2911,
+ 0x2b11, 0xa807, 0xb616, 0x3d12, 0xa200, 0x3d12, 0x3d12, 0xf14e,
+ 0x2911, 0xae02, 0xa002, 0x1833, 0x3d12, 0x2911, 0x2b09, 0xa803,
+ 0xb616, 0x3d0a, 0x2912, 0x8112, 0xaa02, 0x3d12, 0x2911, 0x2b11,
+ 0xa805, 0xb616, 0x3d12, 0x8111, 0xe161, 0x0230, 0xe162, 0x01f0,
+ 0xd022, 0x003f, 0xe184, 0x15c5, 0x2912, 0x3d11, 0xe42e, 0x2832,
+ 0xf0d8, 0xe41e, 0x162e, 0x2808, 0xe000, 0x0270, 0xe096, 0xe41e,
+ 0x166f, 0x2808, 0x0809, 0x3cc0, 0xe42e, 0xe41e, 0x162e, 0xe163,
+ 0x0270, 0x2808, 0xe41e, 0x172d, 0x3c08, 0xe000, 0x0270, 0xe096,
+ 0xe41e, 0x166f, 0x2808, 0xe000, 0x0270, 0xe096, 0x2809, 0xe41e,
+ 0x172d, 0x0808, 0x3cc0, 0xe42e, 0x2832, 0xf158, 0xe41e, 0x16a8,
+ 0x2808, 0xe000, 0x0290, 0xe096, 0xe41e, 0x166f, 0x2808, 0xe000,
+ 0x02b0, 0xe096, 0xe41e, 0x166f, 0x2808, 0x0809, 0x3cc0, 0xe41e,
+ 0x1770, 0xe42e, 0xe41e, 0x16a8, 0xe163, 0x0290, 0x2808, 0xe41e,
+ 0x172d, 0xe163, 0x02b0, 0x2808, 0xe41e, 0x172d, 0x3c08, 0x2808,
+ 0xe000, 0x0290, 0xe096, 0xe41e, 0x166f, 0x2808, 0xe000, 0x0290,
+ 0xe096, 0x2809, 0xe41e, 0x172d, 0x2808, 0xe000, 0x02b0, 0xe096,
+ 0xe41e, 0x166f, 0x2808, 0xe000, 0x02b0, 0xe096, 0x2809, 0xe41e,
+ 0x172d, 0x0808, 0x3cc0, 0xe41e, 0x1770, 0xe42e, 0xe161, 0x05e0,
+ 0xa200, 0xc70f, 0x3d11, 0x2832, 0xb674, 0x3c05, 0xa200, 0x3c08,
+ 0xc420, 0xe163, 0x0270, 0xa2fe, 0x3c06, 0xa203, 0xae21, 0xe013,
+ 0xe161, 0x0102, 0xe162, 0x05e0, 0x8800, 0x0022, 0xe184, 0x165e,
+ 0x2912, 0xf158, 0x2909, 0x1805, 0xf114, 0x2909, 0xf0e6, 0x2901,
+ 0x1c31, 0xf026, 0x1c12, 0x0c31, 0xe046, 0xf076, 0xe042, 0xe049,
+ 0xe084, 0xe002, 0x05e1, 0x3c06, 0x8111, 0x8111, 0x8131, 0x2806,
+ 0xe424, 0xe000, 0x05e0, 0xe094, 0xa202, 0x3d02, 0x2806, 0xae02,
+ 0x3d13, 0x2808, 0xa002, 0x3c08, 0x1816, 0xf4e8, 0xe42e, 0xe161,
+ 0x05e0, 0xa200, 0xc70f, 0x3d11, 0x2832, 0xb674, 0x3c05, 0xa200,
+ 0x3c09, 0xc420, 0xa2fe, 0x3c07, 0xa221, 0xe161, 0x0102, 0xe162,
+ 0x05e0, 0x8800, 0x0022, 0xe184, 0x1697, 0x2912, 0xf118, 0x2909,
+ 0x1805, 0xf0d4, 0x2909, 0xf0a2, 0x2901, 0xe046, 0xf072, 0xe042,
+ 0xe049, 0xe084, 0xe002, 0x05e1, 0x3c07, 0x8111, 0x8111, 0x8131,
+ 0x2807, 0xe424, 0xe000, 0x05e0, 0xe094, 0xa202, 0x3d02, 0x2807,
+ 0xae02, 0x3d13, 0x2809, 0xa002, 0x3c09, 0x1816, 0xf548, 0xe42e,
+ 0xe161, 0x05e0, 0xa200, 0xc70f, 0x3d11, 0x2832, 0xb674, 0x3c05,
+ 0xa200, 0x3c0a, 0xc420, 0xe163, 0x0290, 0xe164, 0x02b0, 0xa2fe,
+ 0x3c06, 0x3c07, 0xe161, 0x0102, 0xe162, 0x05e0, 0xe165, 0x0140,
+ 0x8800, 0x0022, 0xe184, 0x16f3, 0x2912, 0xf2c8, 0x2909, 0x1805,
+ 0xf284, 0x2909, 0xf256, 0x2115, 0x4d0d, 0x10c7, 0x1cc8, 0xf110,
+ 0x2806, 0xf064, 0x2115, 0x4d0d, 0x100c, 0x1c0d, 0xf196, 0x2115,
+ 0x4d0d, 0x340c, 0x3c0d, 0xe084, 0xe002, 0x05e1, 0x3c06, 0xf10e,
+ 0x2807, 0xf064, 0x2115, 0x4d0d, 0x100e, 0x1c0f, 0xf092, 0x2115,
+ 0x4d0d, 0x340e, 0x3c0f, 0xe084, 0xe002, 0x05e1, 0x3c07, 0x8111,
+ 0x8111, 0x8131, 0x8115, 0x8115, 0x2806, 0xf094, 0xe000, 0x05e0,
+ 0xe094, 0xa202, 0x3d02, 0x2806, 0xae02, 0x3d13, 0x2807, 0xf094,
+ 0xe000, 0x05e0, 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02, 0x3d14,
+ 0x280a, 0xa002, 0x3c0a, 0x1816, 0xe408, 0x16b7, 0xe086, 0xe002,
+ 0x0290, 0x3c0c, 0xe088, 0xe002, 0x02b0, 0x3c0d, 0xf09a, 0xa102,
+ 0xcc44, 0xe164, 0x02b0, 0xe184, 0x171e, 0x2914, 0x3d13, 0x280c,
+ 0xf09a, 0xa102, 0xcc44, 0xe163, 0x0290, 0xe184, 0x1728, 0x2913,
+ 0x3d14, 0x280c, 0x080d, 0x3c08, 0xe42e, 0xe42a, 0xa102, 0x3c0c,
+ 0xe086, 0xe098, 0xe161, 0x05e0, 0x880c, 0x0022, 0xe184, 0x1748,
+ 0x2903, 0xae02, 0xe000, 0x0102, 0xe094, 0x2902, 0xa802, 0xf03a,
+ 0x2903, 0x3d11, 0x2902, 0xa804, 0xf04a, 0x2903, 0xa002, 0x3d11,
+ 0x8113, 0xe082, 0xe002, 0x05e0, 0xe42a, 0xa102, 0x3c0c, 0x3c0d,
+ 0x2833, 0x3c0e, 0xe161, 0x05e0, 0x880c, 0x0022, 0xe184, 0x175d,
+ 0x2901, 0xf044, 0xa802, 0x180e, 0xf06a, 0x8111, 0x280e, 0xe016,
+ 0x3c0e, 0xf71e, 0x2901, 0x3d14, 0xa2fe, 0x3d01, 0x280e, 0xe016,
+ 0x3c0e, 0x280d, 0xa102, 0x3c0d, 0xf662, 0x280c, 0xa002, 0xe42e,
+ 0x28c0, 0xa102, 0xe426, 0xcc44, 0xe163, 0x0290, 0xe164, 0x02b0,
+ 0xe184, 0x177d, 0x2913, 0x1914, 0xe428, 0xe190, 0xe163, 0x0291,
+ 0xe164, 0x02b0, 0x290b, 0x3d14, 0x2903, 0x3d14, 0xe42e, 0xe161,
+ 0x0518, 0xa200, 0xc71f, 0x3d11, 0xe42e, 0xe000, 0x0518, 0xe09e,
+ 0x2907, 0xa80c, 0x3d07, 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907,
+ 0xa80a, 0x3d07, 0xe42e, 0x3cd6, 0xe000, 0x0518, 0xe09e, 0x2907,
+ 0xa806, 0x3d07, 0x28d6, 0xa002, 0x3cd6, 0x18d4, 0xe428, 0xa200,
+ 0x3cd6, 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907, 0xe056, 0x3d07,
+ 0xe42e, 0xe161, 0x0518, 0x28d4, 0xa102, 0xcc44, 0xa200, 0xe184,
+ 0x17bc, 0x2b11, 0xa807, 0xe01b, 0xe042, 0x18df, 0xa102, 0xe01a,
+ 0xe42e, 0xe161, 0x0518, 0x28d4, 0xa102, 0xcc44, 0xe184, 0x17cb,
+ 0x2911, 0xe016, 0xf028, 0xe190, 0xe42e, 0x28d6, 0x3c00, 0x2800,
+ 0xe000, 0x0518, 0xe092, 0x2901, 0xf12a, 0x2800, 0xa002, 0x3c00,
+ 0x18d4, 0xf038, 0xa200, 0x3c00, 0x2800, 0x18d6, 0xf718, 0xa200,
+ 0x3cd6, 0xa2fe, 0x3cc1, 0xe0c2, 0x0077, 0xe42e, 0xa20e, 0x3d01,
+ 0x2800, 0x3cc1, 0xe0c2, 0x0077, 0xe42e, 0xe0c0, 0x0060, 0xe049,
+ 0xa861, 0xe42b, 0xe0c1, 0x0044, 0xae1b, 0xe0c3, 0x0102, 0xe049,
+ 0xa83e, 0x3caf, 0xaf0b, 0x3eae, 0x2848, 0xae04, 0x0848, 0x0848,
+ 0xe000, 0x0620, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117,
+ 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xa200,
+ 0xe0c2, 0x0140, 0xe0c2, 0x0149, 0x2867, 0xe0c2, 0x0141, 0xe0c0,
+ 0x0064, 0xe0c2, 0x014c, 0x2850, 0xa102, 0xae20, 0x4c51, 0xa102,
+ 0xe0c2, 0x0142, 0x28ae, 0xae08, 0x2aaf, 0xa81f, 0xe056, 0xe0c2,
+ 0x014e, 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2,
+ 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0xa200, 0x3cad, 0xe41e,
+ 0x184b, 0xe41e, 0x1862, 0x28ad, 0xa8fe, 0x1851, 0xf798, 0xa204,
+ 0xae1c, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe190, 0xe0c1,
+ 0x014b, 0xf7e9, 0xe42e, 0xa205, 0x28ad, 0xb615, 0xa903, 0x3e0d,
+ 0x2848, 0xe000, 0x06e0, 0xe092, 0x2901, 0xae04, 0x4c0d, 0xae1c,
+ 0x4cad, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe42e, 0x28ad, 0xe000, 0x0080, 0x3cad, 0xaf0e, 0x1850,
+ 0xe428, 0x28ad, 0xa8fe, 0xa002, 0x3cad, 0xe42e, 0xe41e, 0x1939,
+ 0xe41e, 0x19d7, 0xe41e, 0x18e8, 0xe41e, 0x1bc6, 0x285c, 0x4ca3,
+ 0xe01a, 0x3c5c, 0xa200, 0x3c52, 0x3c4a, 0xa202, 0x3c88, 0xe41e,
+ 0x1ac7, 0x2852, 0xf048, 0xcba2, 0xe40a, 0x18e3, 0x183c, 0xe402,
+ 0x18e3, 0xe41e, 0x059d, 0x28a4, 0xf7da, 0xa102, 0xf11a, 0xa108,
+ 0xf794, 0xf0ea, 0xa10a, 0xe40a, 0x18e3, 0xa102, 0xe40a, 0x18e3,
+ 0xa102, 0xf32a, 0xa10e, 0xf6e2, 0xf3be, 0x283c, 0x3c4a, 0x28a3,
+ 0xe01a, 0x2a84, 0xe01b, 0xe05a, 0xf338, 0x28a5, 0x1885, 0xf308,
+ 0xe41e, 0x0615, 0xe41e, 0x1a5c, 0xf5da, 0x2888, 0xf06a, 0x283c,
+ 0x3c0d, 0xe41e, 0x1aff, 0xf24e, 0xe41e, 0x0636, 0x28a3, 0x3c84,
+ 0x28a5, 0x3c85, 0xe41e, 0x08f5, 0xf4da, 0xa201, 0x3e88, 0x284a,
+ 0x3c0d, 0x1852, 0xf474, 0xe410, 0x1aff, 0x284a, 0x183c, 0xe402,
+ 0x18e3, 0xe40e, 0x187f, 0xba0e, 0xe002, 0x00ff, 0xf058, 0xba4e,
+ 0xe41e, 0x05e9, 0xf798, 0xe41e, 0x0862, 0xe40e, 0x1889, 0x2852,
+ 0x183c, 0xe402, 0x18df, 0x283c, 0x3c0d, 0xe41e, 0x1aff, 0x2884,
+ 0x3ca3, 0x2885, 0x3ca5, 0xe41e, 0x1cdf, 0xcbcc, 0xf7f8, 0xe42e,
+ 0x281f, 0xae02, 0x4c2e, 0xae0a, 0x2a2d, 0xa83f, 0xe056, 0xae0a,
+ 0x2a29, 0xa83f, 0xe056, 0xae02, 0x4c1a, 0xae02, 0x4c21, 0xae02,
+ 0x4c3a, 0xcf80, 0x28a3, 0xe01a, 0xae02, 0x4c18, 0xae02, 0x4c1a,
+ 0xae02, 0x4c3a, 0xcfc2, 0x2850, 0xa102, 0xae02, 0x4c2b, 0xae02,
+ 0x4c32, 0xae02, 0x4c33, 0xae02, 0x4c3a, 0xcf00, 0xd1d3, 0x000b,
+ 0xd185, 0x0001, 0x20c3, 0x4cc4, 0xcfc6, 0xd1e5, 0x0001, 0xc420,
+ 0xe161, 0x0101, 0xa200, 0xd022, 0x000f, 0xe184, 0x1921, 0x2b31,
+ 0xae02, 0xb42a, 0xcfe8, 0x20c7, 0x4cc8, 0xcfea, 0x20c9, 0x4cca,
+ 0xcfec, 0x20cb, 0x4ccc, 0xcfee, 0xe004, 0x0060, 0xce30, 0xe161,
+ 0x0160, 0xd022, 0x001f, 0xe184, 0x1937, 0x2111, 0x4d11, 0xce32,
+ 0xe42e, 0xa200, 0xe161, 0x00b6, 0xc707, 0x3d11, 0x28b0, 0x4cb1,
+ 0xf028, 0xe42e, 0xe161, 0x00b6, 0xa20e, 0x3c00, 0x28b0, 0xf39a,
+ 0x28b2, 0x5c00, 0xa802, 0xf108, 0x2a00, 0xa10f, 0xf049, 0xa202,
+ 0x3d11, 0xf17e, 0x2a00, 0xa109, 0xf049, 0xa204, 0x3d11, 0xf11e,
+ 0xa20a, 0x3d11, 0xf0ee, 0x28b4, 0x5c00, 0xa802, 0xf08a, 0x2800,
+ 0xa10a, 0xa205, 0xf024, 0xa203, 0x3f11, 0xf03e, 0xa206, 0x3d11,
+ 0x2800, 0xa102, 0x3c00, 0xa102, 0xf5c8, 0x28b2, 0xe00c, 0x00ff,
+ 0x2ab4, 0xe056, 0x5c00, 0xa802, 0xf06a, 0xa203, 0x2800, 0xb655,
+ 0x3f11, 0xf03e, 0xa206, 0x3d11, 0x2800, 0xa102, 0x3c00, 0xf6ea,
+ 0xe161, 0x00b6, 0xa20e, 0x3c00, 0x28b1, 0xe42a, 0x28b3, 0x5c00,
+ 0xa802, 0xf188, 0x2800, 0xa10e, 0xf088, 0x2ab0, 0xf03b, 0x8111,
+ 0xf1e9, 0xa202, 0x3d11, 0xf1be, 0x2a00, 0xa109, 0xf089, 0x2ab0,
+ 0xf03b, 0x8111, 0xf149, 0xa204, 0x3d11, 0xf11e, 0xa20a, 0x3d11,
+ 0xf0ee, 0x28b5, 0x5c00, 0xa802, 0xf08a, 0x2800, 0xa10a, 0xa205,
+ 0xf024, 0xa203, 0x3f11, 0xf03e, 0xa208, 0x3d11, 0x2800, 0xa102,
+ 0x3c00, 0xa102, 0xf548, 0x28b3, 0x5c00, 0x4cb0, 0xa802, 0xf068,
+ 0xa203, 0x2800, 0xb655, 0x3f11, 0xf16e, 0x28b5, 0xe00c, 0x00ff,
+ 0x2ab3, 0xe052, 0x5c00, 0xa802, 0xf0c8, 0x28b3, 0x5c00, 0xa802,
+ 0xf06a, 0xa203, 0x2800, 0xb655, 0x3f11, 0xf05e, 0x8111, 0xf03e,
+ 0xa208, 0x3d11, 0x2800, 0xa102, 0x3c00, 0xf5ea, 0xe42e, 0xa202,
+ 0xe0c2, 0x013c, 0xa200, 0x3c00, 0x3c01, 0xe161, 0x00b6, 0xe162,
+ 0x04c8, 0x2911, 0xa104, 0xf066, 0xa106, 0xe40a, 0x1a26, 0xa004,
+ 0xf112, 0xa004, 0xae06, 0x3c04, 0x2800, 0xa10c, 0xf064, 0x2804,
+ 0xae04, 0xe000, 0x0018, 0x3c04, 0xe004, 0x0450, 0x0804, 0x3c04,
+ 0xf2ee, 0xa201, 0x3e02, 0xa211, 0x3e03, 0xf04a, 0xe005, 0x00e0,
+ 0x3e02, 0x2800, 0x2a00, 0xae09, 0xa10c, 0xf05a, 0xa102, 0xf058,
+ 0xe005, 0x00a0, 0xa240, 0x3c03, 0x0a02, 0x3e02, 0xe0c0, 0x0041,
+ 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02ab, 0xae11, 0xe042, 0x0802,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05e0, 0x2803, 0xce24, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe004, 0x05e0, 0x3c04, 0x2800, 0xa10c,
+ 0xa20f, 0xf024, 0xa23f, 0xcc45, 0x2804, 0xe096, 0xe184, 0x1a40,
+ 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b03, 0xaf11, 0xe0c3, 0x013f,
+ 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b13, 0xe009, 0x00ff, 0xe0c3,
+ 0x013f, 0xe162, 0x04c8, 0x2a01, 0xe001, 0x0010, 0x3e01, 0x2800,
+ 0xa002, 0x3c00, 0xa10c, 0xe404, 0x19e1, 0xe162, 0x04d8, 0xe40a,
+ 0x19e1, 0xe001, 0x0030, 0x3e01, 0xa104, 0xe408, 0x19e1, 0xe16a,
+ 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa200, 0x3c88, 0xe41e, 0x0819,
+ 0xe40d, 0x1ac3, 0x2a3a, 0xe419, 0x0ac7, 0x183c, 0xe402, 0x1ac3,
+ 0xbc12, 0xe40d, 0x1ac3, 0xa10a, 0xb4a8, 0xa104, 0xe400, 0x1ac3,
+ 0xbdfe, 0xe40d, 0x1ac3, 0x1820, 0xf03a, 0xa202, 0x3c88, 0x7411,
+ 0x1831, 0xf03a, 0xa202, 0x3c88, 0x2818, 0xf0d8, 0xba40, 0x1832,
+ 0xf03a, 0xa202, 0x3c88, 0x2832, 0xf06a, 0xba40, 0x1833, 0xf03a,
+ 0xa202, 0x3c88, 0x28a5, 0xf09a, 0xe41e, 0x0819, 0xe40d, 0x1ac3,
+ 0x1c3d, 0xf03a, 0xa202, 0x3c88, 0x2813, 0xa102, 0xf034, 0xf14a,
+ 0xf29e, 0x7414, 0x1ce3, 0xf03a, 0xa202, 0x3c88, 0x2832, 0xe016,
+ 0x4422, 0xf20a, 0xe41e, 0x0833, 0xf1fd, 0x10e4, 0x1ce5, 0xf03a,
+ 0xa202, 0x3c88, 0xf17e, 0x2815, 0xf158, 0xe41e, 0x0833, 0xf14d,
+ 0x10e3, 0x1ce4, 0xf03a, 0xa202, 0x3c88, 0x2832, 0xe016, 0x4422,
+ 0xf09a, 0xe41e, 0x0833, 0xf08d, 0x10e5, 0x1ce6, 0xf03a, 0xa202,
+ 0x3c88, 0xa202, 0xe42e, 0xe16a, 0xa200, 0x3c86, 0xe42e, 0xa200,
+ 0x3ca2, 0x28a6, 0xf098, 0xa202, 0x3ca0, 0x3ca2, 0x3ca1, 0xd036,
+ 0x00ff, 0xd037, 0x0080, 0xe16a, 0x284a, 0x3c52, 0xe41e, 0x1b12,
+ 0x2821, 0xf138, 0x2852, 0x183c, 0xf0d2, 0xe41e, 0x1b55, 0xf1ed,
+ 0x283a, 0xe418, 0x1b55, 0xf1ad, 0xcb86, 0xa102, 0xf740, 0xc894,
+ 0xf728, 0xe41e, 0x0862, 0xe42e, 0xe41e, 0x1b41, 0x2852, 0x183c,
+ 0xf0a2, 0xe41e, 0x1b55, 0xf0ad, 0x283a, 0xe418, 0x1b55, 0xf06d,
+ 0xbb60, 0xf75a, 0xe41e, 0x0864, 0xe42e, 0xe16a, 0xe42e, 0x28a5,
+ 0xe016, 0x3c30, 0xe41e, 0x1b12, 0x2852, 0x180d, 0xf0b2, 0xe41e,
+ 0x1b92, 0x283a, 0xe418, 0x1b92, 0x284c, 0xa002, 0x083a, 0x3c4c,
+ 0xf74e, 0xe42e, 0x2829, 0x182d, 0xe01a, 0xae04, 0x4c43, 0xae0a,
+ 0x4c44, 0xae0a, 0x4c45, 0xcf30, 0x2841, 0xae0a, 0x4c40, 0xae04,
+ 0x4c30, 0xcf82, 0xd1c3, 0x0000, 0x2842, 0xcf96, 0x2841, 0xae08,
+ 0x4c40, 0xae02, 0x4ccf, 0xae02, 0x4cce, 0xae02, 0x4ccd, 0xae02,
+ 0x4c3e, 0xae04, 0x4c30, 0xcfc4, 0x8846, 0x01fa, 0x20c5, 0x4cc6,
+ 0xcfc8, 0xd188, 0x0001, 0x2830, 0xa104, 0xe428, 0xd1e5, 0x0002,
+ 0xe42e, 0xc868, 0xa80e, 0x3c97, 0x7497, 0xe004, 0x01fe, 0xcc86,
+ 0xba50, 0xcc88, 0x2830, 0xe01a, 0x083f, 0xae0c, 0x4c42, 0xcc82,
+ 0xd040, 0x0003, 0xc884, 0xf7f8, 0xe42e, 0x2852, 0xe0c2, 0x003f,
+ 0xd185, 0x0002, 0xd1d0, 0x003f, 0xe190, 0xe180, 0x28a2, 0xe418,
+ 0x074a, 0xe181, 0xcba0, 0xa810, 0xcba3, 0xf239, 0xf7c8, 0xe41e,
+ 0x1c91, 0xcbe0, 0xf7f8, 0x2856, 0xe41a, 0x1cba, 0xcba0, 0xcba3,
+ 0xf189, 0xf7d8, 0xd186, 0x0001, 0xd185, 0x0004, 0xe41e, 0x1cd1,
+ 0xe41e, 0x1862, 0xcb06, 0x3c52, 0xcb8a, 0xaf04, 0x4421, 0xe42a,
+ 0xe004, 0x01fe, 0xcc86, 0xba50, 0xcc88, 0xd040, 0x0001, 0xe42e,
+ 0xd1d0, 0x0000, 0xd1d1, 0x0000, 0xcb1c, 0xf7f8, 0xcbe0, 0xf7f8,
+ 0xe16b, 0xe42e, 0x2852, 0xe0c2, 0x003f, 0xd185, 0x0002, 0xd186,
+ 0x0000, 0xd1c2, 0x0001, 0xd1c5, 0x0000, 0xd1c4, 0x0000, 0xd1d0,
+ 0x000e, 0xcba0, 0xf7f8, 0x284b, 0xf098, 0xd1c2, 0x0000, 0xd1c5,
+ 0x0003, 0xd1c4, 0x0003, 0xd1c8, 0x0000, 0xd1d0, 0x0020, 0xe41e,
+ 0x1c91, 0xa200, 0xe0c2, 0x012a, 0xcbe0, 0xf7f8, 0x2856, 0xe41a,
+ 0x1cba, 0xcba0, 0xf7f8, 0xd186, 0x0001, 0xd185, 0x0004, 0xe41e,
+ 0x1cd1, 0xe41e, 0x1862, 0xcb06, 0x3c52, 0xe42e, 0xa200, 0xe0c2,
+ 0x0100, 0xe0c2, 0x013d, 0xcc8e, 0xe004, 0x00ce, 0xe0c2, 0x017c,
+ 0xa218, 0xe0c2, 0x017d, 0xe0c0, 0x0050, 0x3008, 0xaf02, 0x3009,
+ 0xaf02, 0x300a, 0xaf02, 0x300b, 0xaf0a, 0x300c, 0xaf02, 0x300d,
+ 0xaf02, 0x300e, 0xaf02, 0x300f, 0xaf06, 0xa802, 0xe005, 0x0ba6,
+ 0xe09f, 0x3d17, 0x280c, 0x4408, 0x3c08, 0x280d, 0x4409, 0x3c09,
+ 0x280e, 0x440a, 0x3c0a, 0x280f, 0x440b, 0x3c0b, 0xa200, 0xe0c2,
+ 0x0168, 0x2a08, 0xf02b, 0xa904, 0x2a09, 0xf02b, 0xa912, 0x2a0a,
+ 0xf02b, 0xa940, 0x2a0b, 0xf02b, 0xa980, 0xe005, 0x0ba6, 0xe09f,
+ 0x2b17, 0xae05, 0xe056, 0xe0c2, 0x0169, 0xe0c1, 0x0041, 0xe004,
+ 0x0010, 0xae10, 0xe042, 0x2a0c, 0xf06b, 0xe004, 0x05d2, 0xe09e,
+ 0x2117, 0x4d17, 0xcf0e, 0xe0c1, 0x0041, 0xe004, 0x0050, 0xae10,
+ 0xe042, 0x2a0d, 0xf06b, 0xe004, 0x05d4, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x0103, 0xa202, 0xe0c2, 0x0210, 0xe0c1, 0x0041, 0xe004,
+ 0x007c, 0xae10, 0xe042, 0x2a0e, 0xf06b, 0xe004, 0x05d6, 0xe09e,
+ 0x2117, 0x4d17, 0xe0c2, 0x0211, 0xe0c1, 0x0041, 0xe004, 0x00bc,
+ 0xae10, 0xe042, 0x2a0f, 0xf06b, 0xe004, 0x05d8, 0xe09e, 0x2117,
+ 0x4d17, 0xe0c2, 0x0212, 0x2050, 0x4c51, 0xae08, 0xe0c2, 0x0101,
+ 0xe0c2, 0x0283, 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0x2a1f, 0x2058,
+ 0x4c59, 0xf02b, 0xae02, 0xe0c2, 0x0078, 0x205a, 0x4c5b, 0xf02b,
+ 0xae02, 0xe0c2, 0x0079, 0x281f, 0xe016, 0xae08, 0xe0c1, 0x0044,
+ 0xa80f, 0xe056, 0xae1a, 0x4c67, 0xe0c2, 0x0102, 0x283a, 0xae02,
+ 0x4c32, 0xae02, 0x4c33, 0xe0c2, 0x0104, 0xe0c1, 0x0065, 0xaf19,
+ 0xa803, 0xae17, 0xe056, 0xe0c2, 0x0204, 0xa200, 0xe0c2, 0x0208,
+ 0xe41e, 0x1d53, 0xe41e, 0x1d04, 0xe41e, 0x1d27, 0xa202, 0xe0c2,
+ 0x0106, 0x2a3a, 0xae07, 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x1dc5,
+ 0xe42e, 0xcb02, 0xaf02, 0xe0c2, 0x0113, 0xe0c2, 0x030d, 0xcb15,
+ 0xae03, 0xe056, 0xe0c2, 0x022b, 0xcb94, 0xe0c2, 0x0115, 0xe41e,
+ 0x1da4, 0xcba4, 0xe0c2, 0x012a, 0xcb8a, 0xe0c2, 0x0114, 0xa802,
+ 0x3c56, 0xe42a, 0xcb14, 0xae0a, 0xcb19, 0xe056, 0xe0c2, 0x0120,
+ 0xcb8c, 0xe0c2, 0x0121, 0xcb8e, 0xe0c2, 0x0122, 0xcb90, 0xe0c2,
+ 0x0123, 0xe42e, 0xcbd0, 0xe0c2, 0x030c, 0xcbd2, 0xe0c2, 0x0309,
+ 0xcbd8, 0xe0c2, 0x030a, 0xcbda, 0xe0c2, 0x030b, 0x2846, 0xe0c2,
+ 0x0320, 0xe42a, 0x2847, 0xe0c2, 0x0321, 0xcbf6, 0xe0c2, 0x0322,
+ 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0x28af,
+ 0xaf08, 0x4cae, 0xe42a, 0xa202, 0xe0c2, 0x014a, 0xe42e, 0xe0c0,
+ 0x0111, 0xf7e8, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xf09a, 0x283c,
+ 0x1852, 0xf068, 0xcba2, 0xf048, 0xe0c0, 0x0281, 0xf7ea, 0x28af,
+ 0x4cae, 0xe42a, 0x2832, 0x5434, 0xe428, 0xe0c0, 0x014b, 0xf7e8,
+ 0xa204, 0xae1c, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe190,
+ 0xe0c0, 0x014b, 0xf7e8, 0xe42e, 0xa202, 0xe0c2, 0x0302, 0x2816,
+ 0xe42a, 0xa102, 0xcc44, 0xe160, 0x0004, 0xe161, 0x0103, 0xe163,
+ 0x0380, 0xe184, 0x1d22, 0x8531, 0xc786, 0xe018, 0xb608, 0xe000,
+ 0x0620, 0xe094, 0x2112, 0x4d12, 0x9f13, 0x2112, 0x4d12, 0x9f13,
+ 0x2112, 0x4d12, 0x9f13, 0xa200, 0xe0c2, 0x0302, 0xe42e, 0xa202,
+ 0xae02, 0xa902, 0xe0c2, 0x0312, 0xa802, 0xe42a, 0xe162, 0x01b0,
+ 0x2912, 0xaf02, 0x3c0a, 0x2912, 0xaf02, 0x3c0b, 0x2830, 0xa104,
+ 0xf068, 0xe162, 0x01d0, 0x2912, 0xaf02, 0x3c0b, 0x280a, 0x180b,
+ 0xf0d8, 0xe162, 0x01b0, 0xd022, 0x001f, 0xe184, 0x1d4c, 0x2912,
+ 0xaf02, 0x3c0b, 0x180a, 0xf028, 0xe190, 0x280b, 0xae08, 0x4c0a,
+ 0xe0c2, 0x0313, 0xe42e, 0xa200, 0x3caf, 0x3cae, 0x3cad, 0x2848,
+ 0xe404, 0x1da3, 0xe0c0, 0x0060, 0xe049, 0xa861, 0xe40b, 0x1da3,
+ 0xe049, 0xa83e, 0x3caf, 0xaf0b, 0x3eae, 0x2848, 0xae04, 0x0848,
+ 0x0848, 0xe000, 0x0620, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143,
+ 0x2117, 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145,
+ 0xa200, 0xe0c2, 0x0140, 0xe0c2, 0x0149, 0x2867, 0xe0c2, 0x0141,
+ 0xe0c0, 0x0064, 0xe0c2, 0x014c, 0x2850, 0xa102, 0xae20, 0x4c51,
+ 0xa102, 0xe0c2, 0x0142, 0x28ae, 0xae08, 0x2aaf, 0xa81f, 0xe056,
+ 0xe0c2, 0x014e, 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062,
+ 0xe0c2, 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0x2834, 0xf04a,
+ 0x2851, 0xaf02, 0x3cad, 0xe42e, 0xcb94, 0xa87e, 0x22aa, 0x4eab,
+ 0xe042, 0x34aa, 0x3cab, 0x28af, 0x4cae, 0xf17a, 0xa203, 0x28ad,
+ 0xb615, 0x3e0d, 0xa203, 0x3e0e, 0x2848, 0xe000, 0x06e0, 0xe092,
+ 0x2901, 0xae02, 0x4c0d, 0xae02, 0x4c0e, 0xae1c, 0x4cad, 0xe0c1,
+ 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xe42e, 0xe0c0, 0x0065, 0xaf18,
+ 0xa802, 0xe40a, 0x1e47, 0xae0a, 0xe0c1, 0x0060, 0xaf0d, 0xa80f,
+ 0xe056, 0xe0c1, 0x0044, 0xa811, 0xe056, 0xae0c, 0xe0c1, 0x0044,
+ 0xa80f, 0xe056, 0xe167, 0x0ba7, 0x2f17, 0xe056, 0xe0c2, 0x0282,
+ 0xe0c0, 0x006e, 0xe0c2, 0x0284, 0xaf20, 0xe0c1, 0x0282, 0xa809,
+ 0xf04b, 0xe049, 0xae1f, 0xf06e, 0xe049, 0xa011, 0xaf09, 0xae07,
+ 0xae21, 0xe056, 0xe0c2, 0x028c, 0xe167, 0x0ba8, 0x2d17, 0x4917,
+ 0xe0c2, 0x0285, 0xe167, 0x0baa, 0x2d17, 0x4917, 0xe0c2, 0x0286,
+ 0xe41e, 0x1e48, 0xe0c0, 0x004a, 0xe0c2, 0x0289, 0xe0c0, 0x004b,
+ 0xe0c2, 0x028a, 0xe0c0, 0x0055, 0xe0c2, 0x028b, 0xe0c1, 0x0041,
+ 0xe004, 0x0100, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba0, 0x2d17, 0x4917, 0xe0c2, 0x0287, 0xe0c1, 0x0041,
+ 0xe004, 0x0118, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba2, 0x2d17, 0x4917, 0xe0c2, 0x0288, 0xe0c1, 0x0041,
+ 0xe004, 0x0120, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba4, 0x2d17, 0x4917, 0xe0c2, 0x028d, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xe0c2, 0x0280, 0xa210, 0xe0c2, 0x0168, 0xe42e,
+ 0xe167, 0x0bac, 0xe165, 0x028e, 0xe166, 0x02c0, 0xd022, 0x0008,
+ 0xe184, 0x1e5b, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02d2, 0xd022, 0x0008,
+ 0xe184, 0x1e67, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190,
+ 0xe166, 0x02db, 0xd022, 0x0008, 0xe184, 0x1e73, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02e4, 0xd022, 0x0008,
+ 0xe184, 0x1e7e, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe42e,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x068c, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0147, 0xe40e, 0x007e, 0xe40e,
+ 0x0153, 0xe40e, 0x014f, 0xe40e, 0x015b, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x0442, 0xe40e, 0x0455, 0xe41e,
+ 0x018a, 0xe40e, 0x007e, 0xe41e, 0x0207, 0xe40e, 0x007e, 0x284d,
+ 0xa184, 0xe41e, 0x015f, 0xe41e, 0x0208, 0xe40e, 0x007e, 0x284d,
+ 0xa184, 0xe41e, 0x015f, 0xe41e, 0x038c, 0xe40e, 0x007e, 0xe41e,
+ 0x03bd, 0xe40e, 0x007e, 0x284d, 0xa184, 0xe41e, 0x015f, 0xe41e,
+ 0x04f3, 0xe40e, 0x007e, 0xe41e, 0x03f0, 0xe40e, 0x007e, 0xe42a,
+ 0xe0c0, 0x0040, 0xa201, 0xae17, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x2000, 0xd113, 0x000b, 0xe1e1, 0xe42e,
+ 0xe167, 0x05d2, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184, 0x017a,
+ 0x9e16, 0x3517, 0x3d17, 0xe0c0, 0x0069, 0xe167, 0x0ba0, 0x3d17,
+ 0x3517, 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b, 0x3d17,
+ 0x3517, 0xe42e, 0xd152, 0x0000, 0xd130, 0x0000, 0x22f0, 0x4ef1,
+ 0xa200, 0xc401, 0xe188, 0x07ff, 0x3d11, 0x36f0, 0x3ef1, 0xe41e,
+ 0x03db, 0xa2fe, 0x3c10, 0x3c20, 0x3c48, 0xe0c2, 0x0079, 0xe0c2,
+ 0x007a, 0xa200, 0xcc44, 0x3cd6, 0x3c4e, 0x3c4b, 0xe0c2, 0x0072,
+ 0xe0c2, 0x006c, 0xa202, 0xe0c2, 0x0078, 0xe0c0, 0x0062, 0xaf02,
+ 0x301e, 0xaf02, 0xa806, 0x3c75, 0xe41e, 0x0607, 0xe41e, 0x1619,
+ 0xe41e, 0x18ae, 0xe41e, 0x0512, 0x286d, 0xe408, 0x0202, 0x28a4,
+ 0xa10e, 0xf798, 0xe41e, 0x162c, 0xe41e, 0x0639, 0xe128, 0xe41e,
+ 0x0ec3, 0xf71a, 0xa2fe, 0x3c10, 0x2050, 0x4c51, 0xae08, 0xe0c2,
+ 0x0071, 0xe0c2, 0x004f, 0x2850, 0xa1f0, 0xf2d0, 0x2851, 0xa188,
+ 0xf2a0, 0x281e, 0xf0da, 0x2813, 0xa104, 0xf0aa, 0x28df, 0xe0c2,
+ 0x0074, 0xa004, 0xe0c2, 0x0073, 0x28de, 0x3cdc, 0xf09e, 0x2816,
+ 0xa004, 0xe0c2, 0x0073, 0xa200, 0xe0c2, 0x0074, 0x3cdc, 0xa200,
+ 0x3c6d, 0x285d, 0xae04, 0x4c1a, 0xae02, 0x4c18, 0xae10, 0x4c1c,
+ 0xae10, 0x4c4d, 0xe0c2, 0x007b, 0xe41e, 0x05c7, 0xa202, 0xe0c2,
+ 0x0070, 0xe42e, 0xa200, 0x3c6d, 0xe0c2, 0x0070, 0xe42e, 0xe42e,
+ 0xe167, 0x0620, 0x2117, 0x4d17, 0xe0c2, 0x007d, 0x2117, 0x4d17,
+ 0xe0c2, 0x007e, 0x2117, 0x4d17, 0xe0c2, 0x007f, 0xa2fe, 0xe0c2,
+ 0x004c, 0xe0c2, 0x004d, 0xe0c2, 0x004e, 0xe0c2, 0x007b, 0xa200,
+ 0xcc44, 0xcc4a, 0xcc4c, 0x3c4c, 0x3c62, 0x3c55, 0xe0c2, 0x007a,
+ 0x3c5c, 0xd14b, 0x0200, 0xe41e, 0x1137, 0xe0c1, 0x0065, 0xa841,
+ 0xf0ab, 0xe167, 0x05e0, 0xc703, 0x3d17, 0xe41e, 0x0434, 0xe004,
+ 0x0088, 0x3c46, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa, 0xe0c2, 0x0071,
+ 0xa202, 0xe0c2, 0x0076, 0x286e, 0xf07a, 0xe41e, 0x06c8, 0xe41e,
+ 0x04f9, 0xa200, 0x3c6e, 0xe41e, 0x117d, 0xf05a, 0xa202, 0x3c6c,
+ 0xe40e, 0x0325, 0x2875, 0xa802, 0xf06a, 0xa200, 0x3c69, 0x3c6b,
+ 0xe41e, 0x05df, 0xe41e, 0x15e4, 0xd152, 0x0000, 0xd130, 0x0000,
+ 0xd1e0, 0x0003, 0xd1ff, 0x03b0, 0xd199, 0x0224, 0xd03a, 0x0000,
+ 0xd04c, 0x0000, 0xd008, 0x0000, 0xe41e, 0x18e8, 0xf048, 0xa2ff,
+ 0xe0c3, 0x0077, 0xf05a, 0x2886, 0xf088, 0x286c, 0xf06a, 0x2848,
+ 0xe412, 0x1915, 0xe40e, 0x0325, 0xa2fc, 0xe0c2, 0x0077, 0xa200,
+ 0x3caa, 0x3cab, 0xa202, 0x3c63, 0xe41e, 0x09da, 0xe41e, 0x0512,
+ 0x28a4, 0xf7da, 0xa102, 0xe40a, 0x02d6, 0xa108, 0xf784, 0xe40a,
+ 0x02d6, 0xa102, 0xf17a, 0xa102, 0xf0fa, 0xa102, 0xf10a, 0xa102,
+ 0xf14a, 0xa102, 0xf16a, 0xa102, 0xf14a, 0xa102, 0xf27a, 0xa10e,
+ 0xf662, 0xe40e, 0x02d1, 0xe41e, 0x162c, 0xf2ce, 0xe41e, 0x1653,
+ 0xf29e, 0xe41e, 0x1185, 0xf26e, 0xba44, 0xe41e, 0x07da, 0xf22e,
+ 0x286b, 0xf05a, 0x2875, 0xa802, 0xe016, 0x3c6c, 0x287f, 0xf038,
+ 0x287d, 0xf01a, 0x2875, 0xa802, 0xf08a, 0x2849, 0xf06a, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe40e, 0x0359, 0xf0de, 0xba0e, 0xe002, 0x00ff,
+ 0xf058, 0xba4e, 0xe41e, 0x0561, 0xf798, 0xe41e, 0x07da, 0xe40e,
+ 0x0286, 0x2863, 0xe40a, 0x0302, 0xe40e, 0x0286, 0x2863, 0xf12a,
+ 0xa202, 0x3c62, 0xe41e, 0x07e4, 0x2a57, 0xa003, 0xe40b, 0x0359,
+ 0xe40a, 0x0286, 0x28a3, 0x3c84, 0x28a5, 0x3c85, 0xa200, 0x3c63,
+ 0xf13e, 0x28a3, 0xe01a, 0x2a84, 0xe01b, 0xe05a, 0xf118, 0x28a5,
+ 0x1885, 0xf0e8, 0xe41e, 0x08b2, 0xe40a, 0x0286, 0x2801, 0xe408,
+ 0x0286, 0x2888, 0xf058, 0xe41e, 0x09f4, 0xe40e, 0x0286, 0xe41e,
+ 0x0580, 0xf01e, 0x2875, 0xa802, 0xf04a, 0x287e, 0xf34a, 0xf07e,
+ 0x287e, 0xe40a, 0x027f, 0xa102, 0xf028, 0xf18e, 0x2884, 0x3ca3,
+ 0x2885, 0x3ca5, 0xe41e, 0x1996, 0x282f, 0xa002, 0x3c2f, 0x28a3,
+ 0xf048, 0x28c1, 0xe41e, 0x18b4, 0x28a3, 0xe418, 0x1754, 0xe41e,
+ 0x1446, 0xe41e, 0x1479, 0x28d3, 0x3cd7, 0x286c, 0xf04a, 0xe41e,
+ 0x1599, 0x3cdc, 0xe41e, 0x14a2, 0xf032, 0x2a6c, 0xb7b6, 0xe049,
+ 0x1ad4, 0xf045, 0xa2fa, 0x2a6b, 0xb7f2, 0xe0c2, 0x0071, 0xe0c0,
+ 0x0071, 0x3c48, 0x2830, 0x2a5c, 0xae3d, 0xe056, 0x2a55, 0xae05,
+ 0xe056, 0xe0c2, 0x0073, 0x284c, 0xe0c2, 0x0072, 0x2c4b, 0xa002,
+ 0x3c4b, 0xe0c2, 0x0070, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2,
+ 0x0053, 0xe41e, 0x1137, 0xe41e, 0x1602, 0xe41e, 0x04d2, 0xa202,
+ 0xe42e, 0xe41e, 0x1137, 0xe41e, 0x0366, 0xe41e, 0x1602, 0xa2fe,
+ 0xe0c2, 0x0072, 0xa200, 0xe0c2, 0x0076, 0xe42e, 0xe0c0, 0x0065,
+ 0xe008, 0x0100, 0xe42a, 0xe167, 0x0518, 0xe166, 0x05e0, 0xd022,
+ 0x0007, 0xe184, 0x037a, 0x2917, 0xae08, 0x4d17, 0xae08, 0x4d17,
+ 0xae08, 0x4d17, 0x3d16, 0xe190, 0xca28, 0xf7f8, 0xe167, 0x05c8,
+ 0x2117, 0x4d17, 0xce20, 0xd111, 0x05e0, 0xd112, 0x0008, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xd152, 0x0000, 0xd130, 0x0000,
+ 0xe41e, 0x0170, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0xe42a, 0xe0c0,
+ 0x0042, 0xce20, 0xd111, 0x0620, 0xd112, 0x00c0, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20, 0xd111,
+ 0x0ba8, 0xd112, 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0060, 0x3cd4, 0xe0c0, 0x0061, 0x3c67, 0xe0c0, 0x0062, 0x3472,
+ 0x3c73, 0xe0c0, 0x0063, 0x3c74, 0xe42e, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113, 0x0013,
+ 0xca28, 0xf7f8, 0xe0c0, 0x0061, 0x3ca7, 0xa202, 0x3ca6, 0xe41e,
+ 0x0639, 0xe128, 0xe0c0, 0x0060, 0xf048, 0xe41e, 0x162c, 0xf03e,
+ 0xe41e, 0x1653, 0xe42e, 0xe0c0, 0x0040, 0xa201, 0xae17, 0xe042,
+ 0xe005, 0x3f00, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0450, 0xd112, 0x00c8, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0xe0c0, 0x0060, 0xf08a, 0xe0c0, 0x0061, 0x2298, 0x4e99, 0xe046,
+ 0xaf12, 0xae02, 0x3c9b, 0xe180, 0xe41e, 0x0639, 0xe41e, 0x070d,
+ 0xe41e, 0x1619, 0xe41e, 0x18ae, 0xe41e, 0x04c2, 0x28de, 0x2a1e,
+ 0xb616, 0x3cdc, 0xa200, 0x3cd6, 0x3cda, 0x3cd9, 0x3cdb, 0x3cd8,
+ 0xe166, 0x05ab, 0xc710, 0x3d16, 0xe166, 0x0054, 0x9e06, 0xf16a,
+ 0x28d4, 0xa102, 0xcc44, 0xa200, 0x3c68, 0xe184, 0x042b, 0x9e06,
+ 0x5c68, 0xa802, 0xf07a, 0x2868, 0xe000, 0x0518, 0xe09e, 0xa208,
+ 0x3d07, 0x2868, 0xa002, 0x3c68, 0xe190, 0xa200, 0x3c35, 0xe41e,
+ 0x064a, 0xa202, 0x3c6e, 0xe42e, 0xca28, 0xf7f8, 0xe0c0, 0x006b,
+ 0xce20, 0xd111, 0x05e0, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa206,
+ 0xe41e, 0x045e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa236,
+ 0xe41e, 0x0474, 0xe41e, 0x048a, 0xe42e, 0xa234, 0xe41e, 0x0474,
+ 0xe41e, 0x04a6, 0xa204, 0xe41e, 0x045e, 0xe42e, 0x3ced, 0xe0c0,
+ 0x0041, 0xe005, 0x0280, 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ed,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005,
+ 0x0298, 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x00c0, 0xd112, 0x0040, 0x88ed, 0x0113, 0xca28,
+ 0xf7f8, 0xe42e, 0xe161, 0x07e0, 0x8911, 0x0145, 0x8911, 0x0144,
+ 0x8911, 0x0146, 0x8911, 0x0147, 0x8911, 0x0148, 0x2111, 0x4d11,
+ 0xce80, 0x2111, 0x4d11, 0xce82, 0x2111, 0x4d11, 0xce84, 0x2111,
+ 0x4d11, 0xce86, 0x2111, 0x4d11, 0xcc72, 0xe42e, 0xe161, 0x07e0,
+ 0x8b11, 0x0145, 0x8b11, 0x0144, 0x8b11, 0x0146, 0x8b11, 0x0147,
+ 0x8b11, 0x0148, 0xca80, 0x3511, 0x3d11, 0xca82, 0x3511, 0x3d11,
+ 0xca84, 0x3511, 0x3d11, 0xca86, 0x3511, 0x3d11, 0xc872, 0x3511,
+ 0x3d11, 0xe42e, 0xe161, 0x0100, 0xa200, 0xc73f, 0x3d11, 0x3c68,
+ 0xd022, 0x000f, 0xe184, 0x04d0, 0xe41e, 0x18b4, 0x2868, 0xa002,
+ 0x3c68, 0xe42e, 0xe167, 0x0518, 0xa200, 0x3c68, 0xd022, 0x0007,
+ 0xe184, 0x04e0, 0x2b17, 0xa81f, 0x5a68, 0xe056, 0x2a68, 0xa009,
+ 0x3e68, 0xe0c2, 0x007d, 0xa200, 0x3c68, 0xd022, 0x0007, 0xe184,
+ 0x04ef, 0x2b17, 0xa81f, 0x5a68, 0xe056, 0x2a68, 0xa009, 0x3e68,
+ 0xe0c2, 0x007e, 0xe42e, 0xa200, 0x3c69, 0x3c6b, 0x3c6c, 0x3c4b,
+ 0xe42e, 0xd146, 0x00c0, 0xd147, 0x00ff, 0xd148, 0x00c0, 0xd144,
+ 0x00c0, 0xd145, 0x0000, 0xd14b, 0x0200, 0xa200, 0x3c86, 0xe004,
+ 0x0180, 0xce30, 0xca32, 0xca32, 0xce84, 0xca32, 0xce86, 0xd144,
+ 0x00c1, 0xe42e, 0x2886, 0xe408, 0x05a1, 0xcaa2, 0xaf10, 0xa102,
+ 0xf09a, 0xcaa0, 0xe190, 0x286d, 0xe428, 0xca9c, 0xe418, 0x06c8,
+ 0xf75e, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0xcaa0,
+ 0x3c00, 0xca9c, 0xe418, 0x06c8, 0x2800, 0xaf0e, 0xf6b8, 0x2800,
+ 0xaf0a, 0x3ca3, 0x2800, 0xa83e, 0x3ca4, 0xa10a, 0xe016, 0x3ca5,
+ 0xa200, 0x3ca8, 0x3ca7, 0x3ca0, 0xe41e, 0x0544, 0xe41e, 0x0639,
+ 0xe128, 0xa200, 0x3c3a, 0xe42e, 0x28a0, 0x44a1, 0xf048, 0xd149,
+ 0x0000, 0xf03e, 0xd149, 0x0080, 0xd14a, 0x0000, 0xd14c, 0x0001,
+ 0xca9c, 0xe418, 0x06c8, 0xca9a, 0xf7c8, 0xca9c, 0xf7a8, 0xca9e,
+ 0x3ca6, 0xcc92, 0xca94, 0x00a8, 0x0ca7, 0x34a8, 0x3ca7, 0xcc90,
+ 0xe42e, 0x28a6, 0xe016, 0xc871, 0xa011, 0xe428, 0xaf07, 0xe009,
+ 0x07ff, 0x28a7, 0xe008, 0x07ff, 0xe046, 0xf08a, 0xe049, 0xe011,
+ 0xaf15, 0xe421, 0xe420, 0xa200, 0xe42e, 0xc868, 0xa80e, 0xf028,
+ 0xa210, 0x3c95, 0x7895, 0xa203, 0x5a95, 0xaf03, 0xe046, 0xe42e,
+ 0x28a3, 0x2aa5, 0x3c8a, 0x3e8b, 0x28a7, 0x2aa6, 0x3c8c, 0x3e8d,
+ 0xa202, 0x3c86, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005,
+ 0x029c, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa,
+ 0xe42e, 0x288a, 0x2a8b, 0x3ca3, 0x3ea5, 0x288c, 0x2a8d, 0x3ca7,
+ 0x3ea6, 0xcc90, 0xcc93, 0xa200, 0x3c86, 0x3ca8, 0x3ca0, 0xe0c0,
+ 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029c, 0xae11, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113,
+ 0x0013, 0xca28, 0xf7f8, 0xe41e, 0x0639, 0xe128, 0xe42e, 0xe0c0,
+ 0x0048, 0xe002, 0x0200, 0xca89, 0xe003, 0x00c0, 0xa105, 0xae07,
+ 0xe042, 0xca8b, 0xe015, 0xa80f, 0xe042, 0x2298, 0x4e99, 0xe045,
+ 0xf047, 0x2e9a, 0xae11, 0xe042, 0xe0c2, 0x0046, 0xe42e, 0xa200,
+ 0x3c9b, 0x2875, 0xaf02, 0xa802, 0xf05a, 0xe0c0, 0x0068, 0x3498,
+ 0x3c99, 0x2098, 0x4c99, 0xe0c1, 0x0067, 0xe042, 0xe0c1, 0x0069,
+ 0xa80f, 0xf02b, 0xe042, 0xe005, 0x0049, 0xe093, 0x9f01, 0xe004,
+ 0xffff, 0x3c9a, 0xe41e, 0x0639, 0xe41e, 0x070d, 0xa200, 0x3c35,
+ 0xe41e, 0x064a, 0xe41e, 0x06c8, 0xe41e, 0x04f9, 0xe42e, 0xa200,
+ 0x3c9b, 0xe0c0, 0x0062, 0xaf0c, 0xa802, 0xf10a, 0xe0c1, 0x0048,
+ 0xe0c0, 0x0060, 0xe045, 0xaf13, 0xae03, 0xa109, 0x3e9b, 0xf063,
+ 0xe0c0, 0x0061, 0xae04, 0xe042, 0x3c9b, 0xe0c0, 0x0060, 0x3498,
+ 0x3c99, 0xe0c0, 0x0061, 0xae04, 0x3c9a, 0xe41e, 0x0639, 0xe41e,
+ 0x070d, 0xa200, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c35, 0xe41e,
+ 0x064a, 0xd071, 0x802a, 0xe181, 0xe41e, 0x06c8, 0xe41e, 0x04f9,
+ 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035,
+ 0x0000, 0xd036, 0x007f, 0xd037, 0x0000, 0xd038, 0x0000, 0xd04b,
+ 0x0001, 0xe42e, 0x3c64, 0xe08e, 0x3c65, 0xe41e, 0x0656, 0xe41e,
+ 0x0671, 0x2865, 0xe09e, 0x2864, 0x3c35, 0xe42e, 0x2835, 0xae08,
+ 0xe000, 0x0538, 0xe09e, 0x8b17, 0x0033, 0x8b17, 0x0034, 0x8b17,
+ 0x0035, 0x8b17, 0x0036, 0x8b17, 0x0037, 0x8b17, 0x0038, 0xc860,
+ 0x3517, 0x3d17, 0xc862, 0x3517, 0x3d17, 0xc864, 0x3517, 0x3d17,
+ 0xe42e, 0x2864, 0xae08, 0xe000, 0x0538, 0xe09e, 0x8917, 0x0033,
+ 0x8917, 0x0034, 0x8917, 0x0035, 0x8917, 0x0036, 0x8917, 0x0037,
+ 0x8917, 0x0038, 0x2117, 0x4d17, 0xcc60, 0x2117, 0x4d17, 0xcc62,
+ 0x2117, 0x4d17, 0xcc64, 0xe42e, 0xc000, 0x2835, 0xf0ca, 0xa102,
+ 0xe40a, 0x1679, 0xa102, 0xe40a, 0x1679, 0xe41e, 0x0b08, 0xd04c,
+ 0x0000, 0xe470, 0x28a6, 0xf078, 0x283a, 0xf088, 0xe41e, 0x09df,
+ 0xe41e, 0x0544, 0xd04c, 0x0000, 0xe470, 0xe41e, 0x0aec, 0x28a1,
+ 0xf088, 0xa202, 0x3ca1, 0xd037, 0x0000, 0xd04c, 0x0000, 0xe470,
+ 0xa200, 0x3ca1, 0xd037, 0x0080, 0xd04c, 0x0000, 0xe470, 0xe40e,
+ 0x1679, 0xe41e, 0x0b08, 0xd04c, 0x0000, 0xe470, 0xa200, 0x3ca2,
+ 0xe41e, 0x0aec, 0x28a6, 0xcc96, 0x28a1, 0xe016, 0x3ca1, 0xe42e,
+ 0x286b, 0xf0ba, 0xe004, 0x0180, 0xce30, 0xe41e, 0x075e, 0xe41e,
+ 0x0781, 0xd14e, 0x0000, 0xe42e, 0xe082, 0x3c9c, 0xe004, 0x0048,
+ 0xe092, 0xd027, 0x0000, 0x2869, 0xe41a, 0x0717, 0xd027, 0x0001,
+ 0x286d, 0xf278, 0xca28, 0xf7f8, 0x2098, 0x4c99, 0x2e9b, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x00c0, 0xd112, 0x0040, 0xe0c0, 0x0043,
+ 0xa806, 0xae02, 0xa032, 0xce26, 0xca28, 0xf7f8, 0x2c9b, 0xe000,
+ 0x0002, 0x3c9b, 0x1c9a, 0xf024, 0x3c9b, 0xf052, 0x2869, 0x3c6b,
+ 0xe418, 0x0763, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0x9f01,
+ 0x289c, 0xe092, 0xd14e, 0x0000, 0xe42e, 0x2098, 0x4c99, 0x2e9b,
+ 0xae11, 0xe042, 0xe005, 0x0048, 0xe093, 0x9f01, 0xe42e, 0xe0c1,
+ 0x0043, 0xa809, 0xe429, 0xa200, 0x3c9d, 0x2098, 0x4c99, 0x2e9b,
+ 0xae11, 0xe042, 0x8111, 0x9e89, 0xe045, 0xf043, 0x2c9a, 0xae10,
+ 0xe041, 0xe003, 0x0200, 0x2869, 0xb606, 0x3c69, 0xe423, 0xe001,
+ 0x0200, 0x3e6a, 0x2869, 0xe428, 0xe0c0, 0x0045, 0xaf04, 0xa802,
+ 0x3c69, 0xf648, 0x2875, 0xa802, 0xf07a, 0xe0c1, 0x0059, 0xa103,
+ 0xb616, 0x3c69, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf068, 0xe0c0,
+ 0x0045, 0x306d, 0x286d, 0xe428, 0x289d, 0xf508, 0xe0c0, 0x005c,
+ 0xe008, 0x4000, 0xf4ba, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2,
+ 0x005d, 0xa202, 0xce00, 0x3c9d, 0xe40e, 0x071d, 0xcbe1, 0xf7f9,
+ 0xcba1, 0xf7f9, 0xe42e, 0x286a, 0xe42a, 0xe41e, 0x075e, 0xaf04,
+ 0xe000, 0x0180, 0xce30, 0x286a, 0xa806, 0xf10a, 0xa209, 0xe045,
+ 0xae07, 0x3e0a, 0xa2ff, 0x5a0a, 0xca32, 0xca32, 0xe051, 0xca30,
+ 0xa104, 0xe008, 0x01ff, 0xce30, 0xce33, 0xe005, 0x01f0, 0x1a6a,
+ 0xf095, 0xe004, 0x010b, 0xce32, 0xa200, 0xce32, 0xce32, 0xce32,
+ 0xe42e, 0xa021, 0xaf05, 0xe42b, 0xa200, 0xce32, 0xa103, 0xf7e1,
+ 0xe42e, 0xba0c, 0xf03a, 0xbcfc, 0xe42e, 0xba4c, 0xa20c, 0x3c96,
+ 0x2896, 0xa002, 0x3c96, 0xa140, 0xf0d2, 0xba40, 0xf7aa, 0x5896,
+ 0xa102, 0x349e, 0x3c9f, 0x2896, 0xe41e, 0x07ce, 0x009e, 0x0c9f,
+ 0xe42e, 0xe16b, 0xe42e, 0xba0c, 0xf03a, 0xbe7e, 0xe42e, 0xba4c,
+ 0xa20c, 0x3c96, 0x2896, 0xa002, 0x3c96, 0xa140, 0xf162, 0xba40,
+ 0xf7aa, 0x5896, 0xa102, 0x349e, 0x3c9f, 0x2896, 0xe41e, 0x07ce,
+ 0x009e, 0x0c9f, 0x3c9f, 0x8c9f, 0x0000, 0xa002, 0xaf02, 0xe012,
+ 0xe42c, 0xe012, 0xe16a, 0xe42e, 0xe16b, 0xe42e, 0xa120, 0xf050,
+ 0xa020, 0x3c97, 0x7497, 0xe42e, 0x3c97, 0xba5e, 0x5897, 0x7697,
+ 0xe056, 0xe42e, 0xba40, 0xe42a, 0xc868, 0xa80e, 0x3c00, 0xe016,
+ 0xe428, 0x7400, 0xe016, 0xe42e, 0xa2fe, 0x3cc1, 0xe0c4, 0x3fff,
+ 0xe40d, 0x08a5, 0x3c4a, 0x2a7f, 0xf03b, 0xe408, 0x08a5, 0xbc12,
+ 0xe40d, 0x08a5, 0xa10a, 0xb4a8, 0xa104, 0xe400, 0x08a5, 0xb7b4,
+ 0xa006, 0x3c30, 0xbdfe, 0xe40d, 0x08a5, 0x1820, 0xf0da, 0x0820,
+ 0x3c20, 0xe41e, 0x1667, 0xf088, 0xe0c0, 0x0076, 0xa904, 0xe0c2,
+ 0x0076, 0xe40e, 0x08a5, 0x7411, 0x3c31, 0x281b, 0x3c3c, 0x284a,
+ 0x183c, 0xe402, 0x08a5, 0x28a5, 0xf06a, 0xe41e, 0x0791, 0xe40d,
+ 0x08a5, 0x3c3d, 0xe41e, 0x1411, 0x28c8, 0xe008, 0x03ff, 0xe0c2,
+ 0x007a, 0xe40d, 0x08a5, 0x282c, 0xf07a, 0xe41e, 0x0791, 0xe40d,
+ 0x08a5, 0xe408, 0x08a5, 0x2875, 0xa802, 0xf24a, 0xe0c0, 0x0065,
+ 0xa808, 0xf0f8, 0x3c7f, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xf3da,
+ 0xa102, 0xf07a, 0xa102, 0xf02a, 0xf08e, 0x28a3, 0xf06a, 0xf35e,
+ 0xa202, 0x3c7f, 0x28a5, 0xf318, 0xa2fa, 0xe0c2, 0x0071, 0x2830,
+ 0x2a5c, 0xae3d, 0xe056, 0xe0c2, 0x0073, 0xa200, 0x3c7e, 0xe40e,
+ 0x08a3, 0x287f, 0xf08a, 0x28a5, 0xf18a, 0x287c, 0xf1ea, 0xa102,
+ 0x3c7c, 0xf13e, 0xe0c0, 0x0066, 0xf18a, 0x287d, 0xf16a, 0xa102,
+ 0xf06a, 0xa102, 0xf068, 0x28a3, 0xf04a, 0xf0fe, 0x28a5, 0xf0d8,
+ 0x287c, 0xa102, 0xf06a, 0x3c7c, 0xa200, 0x3c7e, 0xe40e, 0x08a3,
+ 0xa202, 0x3c7e, 0xe40e, 0x08a3, 0xa204, 0x3c7e, 0x2824, 0x3c40,
+ 0x2830, 0xf07a, 0xba40, 0xf05a, 0xbc3e, 0x3c40, 0xe40d, 0x08a5,
+ 0xe41e, 0x18f5, 0xe41e, 0x1746, 0x2830, 0xf0ba, 0xba40, 0xf09a,
+ 0xbc06, 0xf1cd, 0xa106, 0xf05a, 0xe41e, 0x0791, 0xf17d, 0xf79e,
+ 0xe41e, 0x131b, 0xf13a, 0xe0c6, 0x0033, 0xf10d, 0x282a, 0xf09a,
+ 0xbc04, 0xf0cd, 0xa102, 0xf05a, 0xbe0c, 0xf08d, 0xbe0c, 0xf06d,
+ 0x2823, 0xe418, 0x0d13, 0xa202, 0xe42e, 0xe16a, 0x28c1, 0xf094,
+ 0xe41e, 0x18b4, 0x28c1, 0xe41e, 0x18bb, 0x28c1, 0xe41e, 0x18c2,
+ 0xa200, 0xe42e, 0xa200, 0x3c88, 0xe0c4, 0x3fff, 0xe40d, 0x090d,
+ 0x3c4a, 0x183c, 0xe402, 0x090d, 0xbc12, 0xe40d, 0x090d, 0xa10a,
+ 0xb4a8, 0xa104, 0xe400, 0x090d, 0xbdfe, 0xe40d, 0x090d, 0x1820,
+ 0xf03a, 0xa202, 0x3c88, 0x7411, 0x1831, 0xf03a, 0xa202, 0x3c88,
+ 0x28a5, 0xf09a, 0xe41e, 0x0791, 0xe40d, 0x090d, 0x1c3d, 0xf03a,
+ 0xa202, 0x3c88, 0x2813, 0xa102, 0xf034, 0xf12a, 0xf25e, 0x7414,
+ 0x1ce3, 0xf03a, 0xa202, 0x3c88, 0x2822, 0xf1ea, 0xe41e, 0x07ab,
+ 0xf25d, 0x10e4, 0x1ce5, 0xf03a, 0xa202, 0x3c88, 0xf15e, 0x2815,
+ 0xf138, 0xe41e, 0x07ab, 0xf1ad, 0x10e3, 0x1ce4, 0xf03a, 0xa202,
+ 0x3c88, 0x2822, 0xf09a, 0xe41e, 0x07ab, 0xf10d, 0x10e5, 0x1ce6,
+ 0xf03a, 0xa202, 0x3c88, 0x282c, 0xf06a, 0xbcfe, 0xf07d, 0xf03a,
+ 0xa201, 0x3e88, 0x3c01, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xe41e, 0x098e, 0xd1f3, 0x0000, 0xe162, 0x0270, 0x2912, 0xcfe4,
+ 0xe42e, 0x2840, 0x3c04, 0xe161, 0x0270, 0xe162, 0x01b0, 0xe41e,
+ 0x092e, 0xe42a, 0xd1f3, 0x0000, 0xe162, 0x01b0, 0x8840, 0x0022,
+ 0xe184, 0x092b, 0x2912, 0xcfe4, 0xa202, 0xe42e, 0xba40, 0xf098,
+ 0x8804, 0x0022, 0xe184, 0x0935, 0x2911, 0x3d12, 0xa202, 0xe42e,
+ 0x28c0, 0xe42a, 0xe082, 0x3c08, 0x2c12, 0x3400, 0x3c01, 0x2c31,
+ 0x3402, 0x3c03, 0x2804, 0x3c05, 0xe163, 0x05e0, 0xa200, 0xc71f,
+ 0x3d13, 0xbc06, 0xe40d, 0x098b, 0xf06a, 0xa102, 0xf13a, 0xa102,
+ 0xf1ba, 0xf28e, 0xe41e, 0x0791, 0xe40d, 0x098b, 0xa002, 0x1002,
+ 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01, 0x3402, 0x3c03, 0xa203,
+ 0xf0de, 0xe41e, 0x0791, 0xe40d, 0x098b, 0xa002, 0x0002, 0x0c03,
+ 0x1000, 0x1c01, 0xf70e, 0xbc40, 0xa2ff, 0xe41e, 0x09aa, 0xf1c4,
+ 0x3d12, 0xe41e, 0x09c5, 0x2805, 0xa102, 0x3c05, 0xa004, 0xe42a,
+ 0xf51e, 0x2808, 0xa102, 0xe092, 0xe163, 0x05e0, 0x2805, 0xf0a4,
+ 0x2913, 0x8111, 0xf7e8, 0x2901, 0x3d12, 0x2805, 0xa102, 0x3c05,
+ 0xf76e, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x28c1, 0xe424,
+ 0x28c1, 0xae04, 0x08c1, 0x08c1, 0xe000, 0x0620, 0xe09e, 0x2117,
+ 0x4d17, 0xe0c2, 0x020d, 0xe0c2, 0x0214, 0x2117, 0x4d17, 0xe0c2,
+ 0x020e, 0xe0c2, 0x0215, 0x2117, 0x4d17, 0xe0c2, 0x020f, 0xe0c2,
+ 0x0216, 0xe42e, 0x3c06, 0x3e07, 0xe163, 0x0230, 0x2816, 0xa102,
+ 0xe424, 0xae02, 0xa002, 0xcc44, 0xe184, 0x09c2, 0x2d13, 0x2b0b,
+ 0x1c06, 0x1a07, 0xf078, 0xf069, 0xe086, 0xe002, 0x0230, 0xaf02,
+ 0xe42e, 0x8113, 0x8113, 0xa2fe, 0xe42e, 0x3c09, 0x2808, 0xe092,
+ 0x28c0, 0xa102, 0xcc44, 0xe184, 0x09d0, 0x2901, 0x1809, 0xf03a,
+ 0x8111, 0xe42e, 0xe082, 0x1808, 0xe000, 0x05e0, 0xe096, 0xa202,
+ 0x3d03, 0xe42e, 0xa200, 0x3c34, 0x3c32, 0x3c33, 0xe42e, 0x2862,
+ 0xe42a, 0x2032, 0x4c33, 0x2272, 0x4e73, 0xe042, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113, 0x0012, 0xca28,
+ 0xf7f8, 0xa204, 0x3c62, 0xe42e, 0xe161, 0x05e0, 0x284a, 0x3d11,
+ 0x2032, 0x4c33, 0xae10, 0x3511, 0x3d11, 0x2a74, 0xae15, 0xaf10,
+ 0xe045, 0xe003, 0x0200, 0xf287, 0x2862, 0xa104, 0xf098, 0x2032,
+ 0x4c33, 0xe000, 0x0200, 0x3432, 0x3c33, 0xa200, 0x3c62, 0x2032,
+ 0x4c33, 0x2272, 0x4e73, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0000, 0xd112, 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0x2032,
+ 0x4c33, 0xe000, 0x0200, 0x3432, 0x3c33, 0x2a74, 0xae15, 0xe045,
+ 0x28a6, 0xf0b8, 0xf071, 0xe0c0, 0x0076, 0xa908, 0xe0c2, 0x0076,
+ 0xf04e, 0xe41e, 0x0544, 0xf5ce, 0xe161, 0x05e2, 0x28a8, 0xe008,
+ 0x00ff, 0x4d01, 0x3d11, 0x28a7, 0x3d01, 0x2834, 0xe41e, 0x0b29,
+ 0x2834, 0xa002, 0x3c34, 0xe42e, 0x3c00, 0x2834, 0xe40a, 0x0aa2,
+ 0xa102, 0x3c04, 0xe161, 0x05e0, 0xe004, 0x270f, 0x3c02, 0xa2fe,
+ 0x3c03, 0xe41e, 0x0b3d, 0x2901, 0x1800, 0xf12a, 0x2901, 0x1802,
+ 0xf052, 0x2901, 0x3c02, 0x2804, 0x3c03, 0x2804, 0xa102, 0x3c04,
+ 0xf712, 0x2803, 0xe404, 0x0aa2, 0x3c04, 0xe41e, 0x0b3d, 0xa200,
+ 0x3ca1, 0x2901, 0x3c4a, 0xe004, 0x270f, 0x3d11, 0x2111, 0x4d09,
+ 0xaf10, 0xe41e, 0x0b5d, 0x2804, 0xe41e, 0x0b29, 0xe004, 0x0000,
+ 0xe005, 0x007f, 0xe41e, 0x0b52, 0x2111, 0x4d01, 0xaf10, 0xe000,
+ 0x0200, 0x3436, 0x3c37, 0x2911, 0xe008, 0x00ff, 0xae20, 0x4d01,
+ 0x34a8, 0x3ca7, 0xcc90, 0xe002, 0x0200, 0x3438, 0x3c39, 0xb604,
+ 0xb628, 0x3ca6, 0xcc92, 0xa202, 0x3c3a, 0x28a6, 0xe428, 0xa202,
+ 0x3ca1, 0xe41e, 0x0aec, 0xa200, 0x3ca1, 0xd036, 0x00ff, 0xd037,
+ 0x0080, 0xe42e, 0x283c, 0x3c4a, 0xe42e, 0x3c00, 0x3e01, 0x3e39,
+ 0x2834, 0xf0ea, 0xa102, 0x3c04, 0xe161, 0x05e0, 0xe41e, 0x0b3d,
+ 0x2901, 0x1800, 0xf07a, 0x2804, 0xa102, 0x3c04, 0xf782, 0xa200,
+ 0xe42e, 0xca28, 0xf7f8, 0xe004, 0x270f, 0x3d11, 0x2111, 0x4d09,
+ 0xaf10, 0x2a01, 0xe41e, 0x0b6f, 0x2804, 0xe41e, 0x0b29, 0x2801,
+ 0xae0a, 0xe000, 0x0000, 0xa23f, 0xe41e, 0x0b52, 0x2801, 0xae04,
+ 0xe000, 0x0310, 0xe094, 0x2111, 0x4d01, 0xaf10, 0xe000, 0x0080,
+ 0x3512, 0x3d12, 0x2911, 0xe008, 0x00ff, 0xae20, 0x4d01, 0x34a8,
+ 0x3ca7, 0xcc90, 0xe002, 0x0080, 0x3512, 0x3d12, 0xb604, 0xb628,
+ 0x3ca6, 0xcc92, 0xa202, 0xe42e, 0xd115, 0x0001, 0xe190, 0xca28,
+ 0xf7f8, 0x2036, 0x4c37, 0xe41e, 0x0b5d, 0xd115, 0x0000, 0x2036,
+ 0x4c37, 0xe000, 0x0200, 0x3436, 0x3c37, 0x2038, 0x4c39, 0xe002,
+ 0x0200, 0x3438, 0x3c39, 0xb604, 0xb628, 0x3ca6, 0xcc92, 0xe42e,
+ 0xe082, 0x3c9c, 0xca28, 0xf7f8, 0x2839, 0xae04, 0xe000, 0x0310,
+ 0xe092, 0x2111, 0x4d09, 0x2a39, 0xe41e, 0x0b6f, 0x2111, 0x4d09,
+ 0xe000, 0x0080, 0x3511, 0x3d11, 0x2111, 0x4d09, 0xe002, 0x0080,
+ 0x3511, 0x3d11, 0xb604, 0xb628, 0x3ca6, 0xcc92, 0x289c, 0xe092,
+ 0xe42e, 0xae06, 0xe005, 0x0144, 0xae11, 0xe042, 0xe0c1, 0x0041,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05e0, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x2804, 0xae06, 0xe005,
+ 0x0144, 0xae11, 0xe042, 0xe0c1, 0x0041, 0xe042, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x05e0, 0xd112, 0x0004, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe42e, 0xcc66, 0xcc6a, 0xcc6e, 0xe042, 0xcc6c, 0xa200,
+ 0xcc60, 0xcc68, 0xcc70, 0xe128, 0xe42e, 0x2272, 0x4e73, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xe004, 0x0080, 0x2aa1, 0xb616, 0xce22,
+ 0xd112, 0x0080, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xae0b,
+ 0xe001, 0x0000, 0xce23, 0x2272, 0x4e73, 0xe042, 0xce20, 0xd112,
+ 0x0020, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xa206, 0xe41e,
+ 0x064a, 0xe004, 0x004e, 0xe0c2, 0x017c, 0xa218, 0xe0c2, 0x017d,
+ 0xa200, 0x3cb9, 0x3cba, 0xe41e, 0x0bda, 0x28ba, 0xa002, 0x3cba,
+ 0x18b1, 0xf7a4, 0xa200, 0x3c52, 0x3c53, 0x3c54, 0xe41e, 0x0bd1,
+ 0x3cba, 0x2852, 0x183c, 0xe402, 0x0bcd, 0xe41e, 0x0bd1, 0x3cb3,
+ 0x18ba, 0xe418, 0x0c82, 0x28b3, 0x3cba, 0x28b9, 0xe41a, 0x0c87,
+ 0xe41e, 0x0caf, 0x28b9, 0xf07a, 0xe41e, 0x1ac8, 0xf0cc, 0xe16a,
+ 0xa200, 0x3cb9, 0x28a5, 0xe016, 0x3c30, 0xe41e, 0x1af4, 0x284c,
+ 0xa002, 0x3c4c, 0xe41e, 0x0cd0, 0xcb04, 0x3453, 0x3c54, 0x28b9,
+ 0xe40a, 0x0b99, 0xcb86, 0xa102, 0xf550, 0xc894, 0xf538, 0xe41e,
+ 0x07da, 0xa200, 0x3cb9, 0xe40e, 0x0b99, 0xa200, 0xe41e, 0x064a,
+ 0xe42e, 0x2853, 0xe41a, 0x0cdb, 0xe004, 0x0290, 0x0853, 0xe094,
+ 0x2902, 0xe42e, 0xe161, 0x03b0, 0x2830, 0x3d11, 0x2840, 0x3d11,
+ 0x2842, 0x3d11, 0x2843, 0x3d11, 0x2844, 0x3d11, 0x2845, 0x3d11,
+ 0xcb86, 0x3d11, 0xcb96, 0x3d11, 0x28b9, 0x3d11, 0x28a8, 0x3d11,
+ 0x28a7, 0x3d11, 0x28a6, 0x3d11, 0xe162, 0x01b0, 0xd022, 0x000f,
+ 0xe184, 0x0bfb, 0x2912, 0x3d11, 0x8b11, 0x0034, 0x8b11, 0x0033,
+ 0xc860, 0x3511, 0x3d11, 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511,
+ 0x3d11, 0x8b11, 0x0035, 0x8b11, 0x0036, 0x8b11, 0x0037, 0x8b11,
+ 0x0038, 0x28ba, 0xae0e, 0xe005, 0x00fc, 0xae11, 0xe042, 0xe0c1,
+ 0x0041, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x03b0, 0xd112,
+ 0x0028, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x28b3, 0xae0e,
+ 0xe005, 0x00fc, 0xae11, 0xe042, 0xe0c1, 0x0041, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x03b0, 0xd112, 0x0028, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe161, 0x03b0, 0x2911, 0x3c30, 0x2911, 0x3c40,
+ 0x2911, 0x3c42, 0x2911, 0x3c43, 0x2911, 0x3c44, 0x2911, 0x3c45,
+ 0xe41e, 0x1ab3, 0x2911, 0xcf86, 0x2911, 0xcf96, 0x2911, 0x3cb9,
+ 0x2911, 0x3ca8, 0x2911, 0x3ca7, 0xcc90, 0x2911, 0x3ca6, 0xcc92,
+ 0xe162, 0x01b0, 0xd022, 0x000f, 0xe184, 0x0c5f, 0x2911, 0x3d12,
+ 0xd1f3, 0x0000, 0xe162, 0x01b0, 0x8840, 0x0022, 0xe184, 0x0c69,
+ 0x2912, 0xcfe4, 0x28b3, 0x3c39, 0x8911, 0x0034, 0x8911, 0x0033,
+ 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11, 0xcc62, 0x2111, 0x4d11,
+ 0xcc64, 0x8911, 0x0035, 0x8911, 0x0036, 0x8911, 0x0037, 0x8911,
+ 0x0038, 0xe42e, 0xe41e, 0x0bda, 0xe41e, 0x0c26, 0xe42e, 0x2852,
+ 0x2ab3, 0xe41e, 0x0aa5, 0xe42a, 0xe41e, 0x1a01, 0xe16a, 0xe42a,
+ 0xe41e, 0x1ab3, 0xe41e, 0x0c97, 0xa202, 0x3cb9, 0xe42e, 0xa203,
+ 0x5ab3, 0xe00d, 0x00ff, 0xe161, 0x0330, 0x8850, 0x0022, 0xe184,
+ 0x0ca3, 0x2901, 0xe052, 0x3d11, 0x28bb, 0xe052, 0x3cbb, 0x28bc,
+ 0xe052, 0x3cbc, 0xe42e, 0xa200, 0x3cbb, 0x3cbc, 0xe42e, 0x2853,
+ 0xe41a, 0x0cab, 0x2853, 0xe000, 0x0330, 0xe092, 0x28bb, 0x5cb3,
+ 0xa802, 0x3cbd, 0x2911, 0x5cb3, 0xa802, 0xae02, 0x4cbd, 0x3cbd,
+ 0x2911, 0x5cb3, 0xa802, 0xae04, 0x4cbd, 0x3cbd, 0x28bc, 0x5cb3,
+ 0xa802, 0xae06, 0x4cbd, 0x3cbd, 0xcf12, 0xd18a, 0x0000, 0xe42e,
+ 0x2853, 0xe000, 0x0330, 0xe092, 0x2901, 0x3cbc, 0xa202, 0x58b3,
+ 0x3d01, 0x3cbb, 0xe42e, 0x2854, 0xae10, 0xe005, 0x0100, 0xae11,
+ 0xe042, 0xe0c1, 0x0041, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0290, 0x2850, 0xa006, 0xe008, 0x007c, 0xce24, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0x3cb2, 0xa002, 0x3cb1, 0x281b, 0x3c3c,
+ 0xbc0c, 0x3cb0, 0xe42d, 0xe40a, 0x0d33, 0xa102, 0xe40a, 0x0d6b,
+ 0xa102, 0xe40a, 0x0d88, 0xa106, 0xe406, 0x0d0b, 0xa102, 0xe40a,
+ 0x0e72, 0xe16b, 0xe42e, 0xba40, 0x3cb4, 0xe41e, 0x0791, 0xe42d,
+ 0xa002, 0x3cb5, 0xe42e, 0xa200, 0x3cb8, 0x28b0, 0xa106, 0xe424,
+ 0xa104, 0xe420, 0x283c, 0x08b5, 0xa102, 0xc70f, 0x7cb5, 0xe008,
+ 0xffff, 0xe41e, 0x0eac, 0x3cb8, 0x74b8, 0x3cb6, 0x84b6, 0x82b5,
+ 0xe018, 0x643c, 0x3cb6, 0x28b0, 0xa108, 0xe404, 0x0dda, 0xe40a,
+ 0x0e48, 0xe40e, 0x0e48, 0xe161, 0x05e0, 0x88b2, 0x0022, 0xe184,
+ 0x0d3d, 0xe41e, 0x0791, 0xe42d, 0xa002, 0x3d11, 0xe161, 0x05e0,
+ 0xe162, 0x0290, 0xa200, 0x3cb3, 0x3c00, 0x3c53, 0x3c54, 0x2800,
+ 0xa002, 0x3c00, 0x1901, 0xf0e6, 0xa200, 0x3c00, 0x28b3, 0xa002,
+ 0x3cb3, 0x8111, 0x18b2, 0xf746, 0xa200, 0x3cb3, 0xe161, 0x05e0,
+ 0xf6fe, 0x28b3, 0x3d12, 0x2853, 0xa002, 0x3c53, 0x1850, 0xf684,
+ 0x3c53, 0xe41e, 0x0e90, 0x2854, 0xa002, 0x3c54, 0x1851, 0xe162,
+ 0x0290, 0xf5e4, 0xe42e, 0xa200, 0x3c54, 0xe162, 0x0290, 0x8454,
+ 0x82b1, 0xe018, 0xaf02, 0xc70f, 0x7cb1, 0xaf20, 0x2a50, 0xa103,
+ 0xcc45, 0xe184, 0x0d7f, 0x3d12, 0xa002, 0xe049, 0x1ab1, 0xb616,
+ 0xe41e, 0x0e90, 0x2854, 0xa002, 0x3c54, 0x1851, 0xf674, 0xe42e,
+ 0xe167, 0x05e0, 0x28b2, 0xa102, 0xcc44, 0xe184, 0x0d96, 0xe41e,
+ 0x0791, 0xe42d, 0x3d17, 0xe41e, 0x0791, 0xe42d, 0x3d17, 0xe162,
+ 0x0290, 0x2850, 0xa102, 0x3c04, 0x28b1, 0xa102, 0x8604, 0x3d12,
+ 0xa200, 0x3c54, 0xe41e, 0x0e90, 0x2854, 0xa002, 0x3c54, 0x1851,
+ 0xf7a4, 0x28b1, 0xa104, 0x3cb3, 0x28b3, 0xae02, 0xe000, 0x05e0,
+ 0xe092, 0x2911, 0xc70f, 0x7c50, 0x3400, 0x3c02, 0x2911, 0xc70f,
+ 0x7c50, 0x3401, 0x3c03, 0x2802, 0x3c54, 0x1803, 0xf170, 0xca2c,
+ 0xf7fa, 0xe41e, 0x0e92, 0x2800, 0xe000, 0x0290, 0xe094, 0x2801,
+ 0x1800, 0xf054, 0x3c04, 0x28b3, 0x8604, 0x3d12, 0xe41e, 0x0e90,
+ 0x2854, 0xa002, 0x3c54, 0x1803, 0xf6d6, 0x28b3, 0xa102, 0x3cb3,
+ 0xf542, 0xe42e, 0xe162, 0x0310, 0xa2fe, 0x2a1b, 0xa01f, 0xaf09,
+ 0x3e00, 0x8600, 0x3d12, 0x8450, 0x28b6, 0xe40a, 0x0e31, 0x2850,
+ 0x18b4, 0xaf02, 0x3c53, 0x2851, 0x18b4, 0xaf02, 0x3c54, 0x2850,
+ 0xa102, 0x3c07, 0x2851, 0xa102, 0x3c08, 0xa2fe, 0x08b4, 0x3c04,
+ 0xa200, 0x08b4, 0x3c05, 0xa200, 0x3c00, 0x3c01, 0x3c02, 0xa202,
+ 0x3c03, 0xe41e, 0x0eb3, 0xf0aa, 0x2901, 0xe05a, 0x3d01, 0x2800,
+ 0xa002, 0x3c00, 0x2800, 0x18b6, 0xf25a, 0x2853, 0x0804, 0xa400,
+ 0x6407, 0x3c53, 0x2854, 0x0805, 0xa400, 0x6408, 0x3c54, 0x2802,
+ 0xa002, 0x3c02, 0x1803, 0xf668, 0x3c02, 0x2803, 0x0801, 0x3c03,
+ 0xa202, 0x1801, 0x3c01, 0x28b4, 0xf078, 0x2804, 0x2a05, 0xe013,
+ 0x3e04, 0x3c05, 0xf57e, 0x2804, 0x2a05, 0xe012, 0x3e04, 0x3c05,
+ 0xf51e, 0xa200, 0x3c54, 0xe162, 0x0290, 0xa200, 0x3c53, 0xe41e,
+ 0x0eb3, 0xe01a, 0x3d12, 0x2853, 0xa002, 0x3c53, 0x1850, 0xf784,
+ 0xe41e, 0x0e90, 0x2854, 0xa002, 0x3c54, 0x1851, 0xf6d4, 0xe42e,
+ 0x28b4, 0xf038, 0x28b6, 0xf03e, 0x283c, 0x18b6, 0x3c00, 0xa200,
+ 0x3c54, 0xe162, 0x0290, 0xa200, 0x3c53, 0x8450, 0x8254, 0xe018,
+ 0x0853, 0x2ab0, 0xa109, 0xf05b, 0x8451, 0x8253, 0xe018, 0x0854,
+ 0x1800, 0x2ab4, 0xf024, 0xe017, 0x3f12, 0x2853, 0xa002, 0x3c53,
+ 0x1850, 0xf6c4, 0xe41e, 0x0e90, 0x2854, 0xa002, 0x3c54, 0x1851,
+ 0xf614, 0xe42e, 0xe41e, 0x0791, 0xe42d, 0xa002, 0x183c, 0xe408,
+ 0x0d09, 0x28b2, 0xe41e, 0x0eac, 0x3c00, 0xa200, 0x3c54, 0xe162,
+ 0x0290, 0x2850, 0xa102, 0xcc44, 0xe184, 0x0e87, 0x7400, 0x3d12,
+ 0xe41e, 0x0e90, 0x2854, 0xa002, 0x3c54, 0x1851, 0xf714, 0xe42e,
+ 0xa204, 0xf02e, 0xa206, 0x3c09, 0x2854, 0xae10, 0xe005, 0x0100,
+ 0xae11, 0xe042, 0xe0c1, 0x0041, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0290, 0x2850, 0xa006, 0xe008, 0x007c, 0xce24, 0x8809,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xa201, 0xf04a, 0xaf02, 0xa003,
+ 0xf7e8, 0xe04a, 0xe42e, 0x8254, 0xe018, 0x0853, 0x3c52, 0xaf08,
+ 0xe000, 0x0310, 0xe092, 0x2852, 0xa81e, 0x3c06, 0xa203, 0x5a06,
+ 0x2901, 0xe052, 0xe42e, 0xba4e, 0x3c4d, 0xba46, 0x3c5d, 0xa810,
+ 0xf04a, 0xe004, 0x0042, 0x3c4d, 0xba46, 0xe408, 0x0fc3, 0xba4e,
+ 0x3c1c, 0xbc3e, 0x3c10, 0xa202, 0x3c1f, 0x284d, 0xa1c8, 0xf2f8,
+ 0xbc06, 0x3c1f, 0xbc08, 0xe408, 0x0fc3, 0xbc08, 0xe408, 0x0fc3,
+ 0xba40, 0xba40, 0x3cb0, 0xf23a, 0xa201, 0x3eb2, 0x3eb4, 0xe160,
+ 0x0000, 0xba40, 0xf11a, 0x2ab2, 0xae03, 0xe056, 0x3cb2, 0xe080,
+ 0xe41e, 0x10dd, 0x2ab4, 0xae03, 0xe056, 0x3cb4, 0xe080, 0xa201,
+ 0xe41e, 0x1110, 0xf07e, 0x2ab2, 0xae03, 0x3eb2, 0x2ab4, 0xae03,
+ 0x3eb4, 0xe080, 0xa002, 0xe090, 0xa110, 0xf648, 0xbc18, 0xe40d,
+ 0x0fc3, 0xa008, 0x3c11, 0xa202, 0x5811, 0x3c12, 0xbc04, 0x3c13,
+ 0xe40d, 0x0fc3, 0xa102, 0xf034, 0xf06a, 0xf21e, 0xbc18, 0xa008,
+ 0x3c14, 0xf1de, 0xba40, 0x3c15, 0xe41e, 0x07ab, 0x34e7, 0x3ce8,
+ 0xe41e, 0x07ab, 0x34e9, 0x3cea, 0xbdfe, 0xe40d, 0x0fc3, 0x3ceb,
+ 0xf0ea, 0xa102, 0xcc44, 0xe162, 0x0250, 0xe184, 0x0f32, 0xe41e,
+ 0x07ab, 0x3512, 0x3d12, 0xe41e, 0x1057, 0xf01e, 0xe40d, 0x0fc3,
+ 0xbc20, 0xe40d, 0x0fc3, 0x3c16, 0xba40, 0x3c17, 0x2250, 0x4e51,
+ 0xbcfe, 0xe40d, 0x0fc3, 0xa002, 0x3c50, 0xbcfe, 0xe40d, 0x0fc3,
+ 0xa002, 0x3c51, 0x8450, 0x8251, 0xe018, 0x3c1b, 0x2c57, 0xf1ba,
+ 0x2050, 0x4c51, 0xe046, 0xf20a, 0x2c57, 0xaf10, 0xe008, 0x00ff,
+ 0x1850, 0xf064, 0x2c57, 0xe008, 0x00ff, 0x1851, 0xf152, 0x2050,
+ 0x4c51, 0xae08, 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0xa2fe, 0x3c57,
+ 0xe40e, 0x0fc3, 0x2850, 0xe008, 0x00ff, 0xae10, 0x2a51, 0xe009,
+ 0x00ff, 0xe056, 0x3c57, 0xa200, 0x3c19, 0xba40, 0x3c18, 0xf098,
+ 0xba40, 0x3c19, 0x2851, 0xae02, 0x3c51, 0x281b, 0xae02, 0x3c1b,
+ 0xe0c0, 0x0059, 0xa102, 0xf038, 0xe41e, 0x1014, 0xba40, 0x3c1a,
+ 0x4c18, 0xf3aa, 0xba40, 0x3c58, 0x3c59, 0x3c5a, 0x3c5b, 0xf14a,
+ 0xe41e, 0x0791, 0x3c58, 0xe41e, 0x0791, 0x3c59, 0xe41e, 0x0791,
+ 0x2a18, 0xf029, 0xae02, 0x3c5a, 0xe41e, 0x0791, 0x2a18, 0xf029,
+ 0xae02, 0x3c5b, 0xf21d, 0xe0c0, 0x0059, 0xa102, 0xf0e8, 0x2a1f,
+ 0x2058, 0x4c59, 0xf02b, 0xae02, 0xe0c2, 0x0076, 0x205a, 0x4c5b,
+ 0xf02b, 0xae02, 0xe0c2, 0x0077, 0xa200, 0x3c82, 0x3c83, 0x281d,
+ 0x3cde, 0x3cdf, 0xba40, 0xe016, 0xe41a, 0x106c, 0xf05a, 0xe41e,
+ 0x07da, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x0791,
+ 0x3c20, 0xbc3e, 0xe40d, 0x1011, 0x1810, 0xf0ea, 0x0810, 0x3c10,
+ 0xe41e, 0x1644, 0x3c66, 0xa202, 0xe41e, 0x064a, 0xa203, 0x3e94,
+ 0x2866, 0xe40a, 0x1011, 0xba40, 0xe408, 0x1011, 0xba40, 0x3c22,
+ 0xbc0e, 0xf30d, 0x3c23, 0xf04a, 0xe41e, 0x0cf3, 0xf2bd, 0xbc3e,
+ 0xe40d, 0x1011, 0x3c24, 0xbc3e, 0xe40d, 0x1011, 0xba40, 0xba42,
+ 0xbe34, 0xe40d, 0x1011, 0xa034, 0x3c28, 0xe404, 0x1011, 0xa168,
+ 0xe402, 0x1011, 0xbe34, 0xe40d, 0x1011, 0xa034, 0xe404, 0x1011,
+ 0xa168, 0xe402, 0x1011, 0xbe18, 0xe40d, 0x1011, 0x3c29, 0xba40,
+ 0x3c2a, 0xba40, 0x3c2b, 0xba40, 0x3c2c, 0xe41e, 0x07da, 0xa202,
+ 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x2a1c, 0xa115, 0xe004, 0x0129,
+ 0xf2d7, 0xa103, 0xe004, 0x02a3, 0xf297, 0xa113, 0xe004, 0x06f6,
+ 0xf257, 0xa103, 0xe004, 0x0dec, 0xf217, 0xa113, 0xe004, 0x17bb,
+ 0xf1d7, 0xa103, 0xe004, 0x34bc, 0xf197, 0xa103, 0xe004, 0x3c00,
+ 0xf157, 0xa113, 0xe004, 0x6000, 0xf117, 0xa103, 0xe004, 0x6600,
+ 0xf0d7, 0xa111, 0xe004, 0x1437, 0xae08, 0xf087, 0xa103, 0xe004,
+ 0x21c0, 0xae08, 0xf037, 0xe004, 0x17bb, 0xae12, 0x841b, 0xe182,
+ 0x0180, 0xe019, 0xc407, 0xd022, 0x000f, 0xe184, 0x1051, 0xe046,
+ 0xf034, 0x8117, 0xe190, 0xe08e, 0xa520, 0x3c1d, 0xe42e, 0xe0c0,
+ 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029e, 0xae11, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0250, 0xd112, 0x0200, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xba40, 0xf15a, 0xba4e, 0xe0c1,
+ 0x0059, 0xa103, 0xf039, 0xe0c2, 0x006c, 0xe002, 0x00ff, 0xf0b8,
+ 0xba5e, 0xba5f, 0xae20, 0xe056, 0xe0c1, 0x0059, 0xa103, 0xf039,
+ 0xe0c2, 0x006c, 0xba40, 0xf02a, 0xba40, 0xba40, 0xf08a, 0xba44,
+ 0xba40, 0xba40, 0xf04a, 0xba4e, 0xba4e, 0xba4e, 0xba40, 0xf03a,
+ 0xbc0a, 0xbc0a, 0xba40, 0xf08a, 0xba7e, 0xe0c2, 0x0079, 0xba7e,
+ 0xe0c2, 0x007a, 0xba40, 0xba40, 0x3c82, 0xe016, 0xe161, 0x05bc,
+ 0xe41a, 0x10c2, 0xf1da, 0xba40, 0x3c83, 0xe016, 0xe161, 0x05c1,
+ 0xe41a, 0x10c2, 0xf15a, 0x2882, 0x4c83, 0xf02a, 0xba40, 0xba40,
+ 0x3c4f, 0xba40, 0xf0aa, 0xba40, 0xbc20, 0xbc20, 0xbc20, 0xbc20,
+ 0xbc20, 0x3cde, 0xbc20, 0x3cdf, 0xe16a, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0xe41e, 0x0791, 0xcc44, 0xa002, 0x3d11, 0xba46,
+ 0xba46, 0xe184, 0x10cf, 0xe41e, 0x0791, 0xe41e, 0x0791, 0xba40,
+ 0xba48, 0xa002, 0x3d11, 0xba48, 0xa002, 0x3d11, 0xba48, 0xa002,
+ 0x3d11, 0xba48, 0x3d11, 0xa202, 0xe42e, 0xd022, 0x000f, 0xa10c,
+ 0xf034, 0xd022, 0x003f, 0xe161, 0x05e0, 0xa210, 0x3c06, 0x3c07,
+ 0xa200, 0x3c08, 0x3c09, 0xe09c, 0xe09e, 0xe184, 0x110d, 0x2807,
+ 0xf10a, 0xe41e, 0x07ab, 0xe42d, 0x0806, 0xe000, 0x0100, 0xe008,
+ 0x00ff, 0x3c07, 0x4c09, 0xe01a, 0xe016, 0xe09e, 0xa202, 0x3c09,
+ 0x2807, 0xf028, 0x2806, 0x3c06, 0xe08d, 0xa003, 0xe09d, 0xa803,
+ 0xf059, 0xe085, 0xae11, 0xe056, 0x3d11, 0xe094, 0xe08e, 0xe42e,
+ 0x3e08, 0x3c06, 0xa211, 0x3e07, 0xa10c, 0xf064, 0xb690, 0xa00c,
+ 0x3c06, 0xa240, 0x3c07, 0x2806, 0x2a08, 0xf02b, 0xa01c, 0xae08,
+ 0x3c06, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02ab,
+ 0xae11, 0xe042, 0x0806, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05e0,
+ 0x2807, 0xce24, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe0c0,
+ 0x0065, 0xaf0c, 0xa80e, 0xe42a, 0xca28, 0xf7f8, 0xe0c0, 0x006a,
+ 0xce20, 0xd111, 0x05c6, 0xd112, 0x000c, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xc410, 0xe167, 0x05c6, 0xe0c0, 0x0065, 0xe008, 0x0100,
+ 0x3d17, 0xa220, 0x3d17, 0x8137, 0xe0c0, 0x0065, 0xe008, 0x0080,
+ 0xae04, 0x3d17, 0x281b, 0x3d17, 0x8137, 0xe0c0, 0x0065, 0xa880,
+ 0xae08, 0x2aa5, 0xf069, 0x2a4d, 0xa185, 0xf02b, 0xa002, 0xa002,
+ 0x3d17, 0x281b, 0x3d17, 0x8137, 0xe0c0, 0x0065, 0xaf0c, 0xa80e,
+ 0xe42a, 0xe0c0, 0x006a, 0xce20, 0xd111, 0x05c6, 0xd112, 0x000c,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x2875, 0xa802, 0xe42a,
+ 0xe0c0, 0x0045, 0xaf04, 0xa802, 0xe42e, 0xa200, 0xba4f, 0xe042,
+ 0xe003, 0x00ff, 0xf7cb, 0x3c00, 0xa200, 0xba4f, 0xe042, 0xe003,
+ 0x00ff, 0xf7cb, 0x3c01, 0xe41e, 0x119c, 0xe42a, 0xe41e, 0x0561,
+ 0xf6d8, 0xe41e, 0x07da, 0xe42e, 0x2800, 0xf10a, 0xa102, 0xf11a,
+ 0xa104, 0xf12a, 0xa102, 0xf13a, 0xa102, 0xf14a, 0x2a01, 0xf04b,
+ 0xba4e, 0xa103, 0xf7e9, 0xa202, 0xe42e, 0xe41e, 0x11c4, 0xf0de,
+ 0xe41e, 0x11eb, 0xf0ae, 0xe41e, 0x1246, 0xf07e, 0xe41e, 0x1256,
+ 0xf04e, 0xe41e, 0x1259, 0xf01e, 0xe42a, 0xc868, 0xa80e, 0xe016,
+ 0xe428, 0xe41e, 0x07da, 0xe42e, 0xbc3e, 0x1810, 0xf0da, 0x0810,
+ 0x3c10, 0xe41e, 0x1644, 0x3c66, 0xa200, 0xe41e, 0x064a, 0xa201,
+ 0x3e94, 0x2866, 0xe42a, 0x2882, 0xe161, 0x05bc, 0xe418, 0x11df,
+ 0x2883, 0xe161, 0x05c1, 0xe418, 0x11df, 0xa202, 0xe42e, 0x2911,
+ 0xa102, 0xcc44, 0xe184, 0x11e9, 0x2901, 0xe41e, 0x07ce, 0x2901,
+ 0xe41e, 0x07ce, 0xe42e, 0xe166, 0x004c, 0x2882, 0xe161, 0x05be,
+ 0xf038, 0xe161, 0x05c3, 0x4c83, 0xf09a, 0x2911, 0xe41e, 0x07ce,
+ 0x2911, 0xe41e, 0x07ce, 0x2911, 0xf02e, 0xa230, 0x3c02, 0x284f,
+ 0xe016, 0xe428, 0xba46, 0xe0c2, 0x007b, 0xa112, 0xb604, 0xe42a,
+ 0xa012, 0xe049, 0xa200, 0xa107, 0xb426, 0xa105, 0xb426, 0xa105,
+ 0xb5f6, 0xcc44, 0xe184, 0x1243, 0xa201, 0xba40, 0xf038, 0x9f96,
+ 0xf2be, 0xba42, 0xba40, 0xba48, 0xba40, 0x3c03, 0xba40, 0xba40,
+ 0xae32, 0xe055, 0xba4e, 0xe055, 0x2803, 0xf0ba, 0xba4a, 0xae10,
+ 0xe055, 0xba4a, 0xae1c, 0xe055, 0xba48, 0xae28, 0xe055, 0xf10e,
+ 0xba40, 0xf0ea, 0xba4a, 0xae10, 0xe055, 0xba40, 0xf09a, 0xba4a,
+ 0xae1c, 0xe055, 0xba40, 0xf04a, 0xba48, 0xae28, 0xe055, 0x9f96,
+ 0x2802, 0xe41e, 0x07ce, 0xe190, 0xa202, 0xe42e, 0x2801, 0xf0da,
+ 0xa102, 0xcc44, 0xe004, 0x00ff, 0xe184, 0x124f, 0xba4f, 0xe052,
+ 0xe002, 0x00ff, 0xe016, 0xe42a, 0xa202, 0xe42e, 0xe41e, 0x125d,
+ 0xe42e, 0xe41e, 0x125d, 0xa202, 0xe42e, 0xe0c0, 0x0065, 0xa878,
+ 0xa140, 0xf0aa, 0x2801, 0xa102, 0xcc44, 0xe184, 0x1268, 0xba4e,
+ 0xe190, 0xe40e, 0x12c3, 0xa201, 0xe41e, 0x1307, 0x2907, 0xa002,
+ 0x3c0c, 0x3d17, 0xa120, 0xf6f0, 0x2907, 0x0801, 0xa00e, 0xaf06,
+ 0xae06, 0xe049, 0xaf1f, 0xf0db, 0xa201, 0xe41e, 0x1307, 0x8117,
+ 0x8117, 0x2907, 0xa202, 0x3d07, 0xa201, 0xe41e, 0x1305, 0xf5be,
+ 0x3d17, 0xa201, 0xe41e, 0x1305, 0xe167, 0x05e0, 0x2800, 0x3d17,
+ 0x2801, 0x3d17, 0x2a0c, 0xe41e, 0x1305, 0xa200, 0x3c0b, 0xa200,
+ 0xe167, 0x05e0, 0xc703, 0x3d17, 0xe167, 0x05e0, 0x280b, 0xa002,
+ 0x3c0b, 0xba4f, 0x2846, 0xa002, 0x3c46, 0xa802, 0xf058, 0x280a,
+ 0xae10, 0xe056, 0x3d17, 0x3e0a, 0x2846, 0xa80e, 0xe41a, 0x12c5,
+ 0x2801, 0x180b, 0xf6c0, 0x2846, 0xa80e, 0xf0ea, 0x2a46, 0xa803,
+ 0xf04b, 0x280a, 0xae10, 0x3d17, 0x2a46, 0xa00f, 0xaf07, 0xae07,
+ 0x3e46, 0xe418, 0x12c5, 0xa202, 0xe42e, 0xe0c0, 0x006c, 0xe000,
+ 0x0088, 0x1846, 0xf242, 0xe0c0, 0x0065, 0xaf12, 0xa802, 0xf0da,
+ 0xa201, 0xe41e, 0x1307, 0x8117, 0x8117, 0x2907, 0xa202, 0x3d07,
+ 0xa201, 0xe41e, 0x1305, 0xe42e, 0xe004, 0x0200, 0xe0c1, 0x005d,
+ 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x005d, 0xe008,
+ 0x0200, 0xe190, 0xf7b8, 0xe004, 0x0090, 0x3c46, 0xca28, 0xf7f8,
+ 0xe0c0, 0x006b, 0x0846, 0xa110, 0xce20, 0xd111, 0x05e0, 0xd112,
+ 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xa200, 0xe167, 0x05e0,
+ 0xc703, 0x3d17, 0xe167, 0x05e0, 0xe42e, 0xa204, 0xf02e, 0xa206,
+ 0x3c0d, 0xca28, 0xf7f8, 0xe0c0, 0x006b, 0xae07, 0xe042, 0xce20,
+ 0xd111, 0x05e0, 0xd112, 0x0004, 0x880d, 0x0113, 0xca28, 0xf7f8,
+ 0xe167, 0x05e0, 0xe42e, 0x2c31, 0x3cd0, 0xa202, 0x3cd1, 0xa200,
+ 0x3cd2, 0x3cd3, 0x28a3, 0xe016, 0xe428, 0x28a5, 0xf0ca, 0xe41e,
+ 0x13a9, 0xba40, 0xba40, 0xb7f0, 0xb634, 0x3cd1, 0xa200, 0x3cd0,
+ 0xa202, 0xe42e, 0xba40, 0xf048, 0xa202, 0x3cd2, 0xe42e, 0x2816,
+ 0xe42a, 0xae02, 0x3c09, 0x2812, 0x3400, 0x3c01, 0x2c31, 0x3402,
+ 0x3c03, 0xbc0c, 0xe40d, 0x13a6, 0xe40a, 0x13a4, 0xa102, 0xf0ba,
+ 0xa102, 0xf1ca, 0xa102, 0xf23a, 0xa102, 0xf35a, 0xa102, 0xf3aa,
+ 0xe40e, 0x1391, 0xe41e, 0x0791, 0xe40d, 0x13a6, 0xa002, 0x1002,
+ 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01, 0xa203, 0xe41e, 0x13b0,
+ 0xe408, 0x1364, 0xa203, 0x3ed2, 0xf5de, 0xbc40, 0xe40d, 0x13a6,
+ 0xa2ff, 0xe41e, 0x13b0, 0xe40a, 0x13a6, 0xf54e, 0xe41e, 0x0791,
+ 0xe40d, 0x13a6, 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032, 0x0000,
+ 0x0c01, 0x3c06, 0xbc20, 0xf2bd, 0x3c07, 0xe41e, 0x13c8, 0xf27a,
+ 0xe40e, 0x1341, 0xbc20, 0xf23d, 0xa102, 0xe41e, 0x13e3, 0xe40e,
+ 0x1341, 0xe41e, 0x13a9, 0xa202, 0x3cd3, 0xa200, 0x3cd0, 0xe40e,
+ 0x1341, 0xbc20, 0xf14d, 0x3cd0, 0x28d0, 0xa2ff, 0xe41e, 0x13b0,
+ 0xf7c8, 0xf07e, 0x28d0, 0xae02, 0xa2ff, 0xe41e, 0x13b0, 0xf7b8,
+ 0xa2fe, 0x3cd1, 0xe40e, 0x1341, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0xc410, 0xe161, 0x01f1, 0xa200, 0xc71f, 0x3d31, 0xe42e,
+ 0x3c04, 0x3e05, 0xe161, 0x01f0, 0x8809, 0x0022, 0xe184, 0x13c3,
+ 0x2d11, 0x2b09, 0x1c04, 0x1a05, 0xf068, 0xf059, 0x8111, 0xa200,
+ 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200, 0xe42e, 0xa202, 0xe42e,
+ 0x2807, 0xa2ff, 0xe41e, 0x13b0, 0xf7c8, 0xe161, 0x01f0, 0x8809,
+ 0x0022, 0xe184, 0x13de, 0x2d11, 0x2b09, 0x1c06, 0xf078, 0xf067,
+ 0x2807, 0x3d11, 0xa2fe, 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200,
+ 0xe42e, 0xa202, 0xe42e, 0x3c08, 0xe161, 0x01f0, 0x8809, 0x0022,
+ 0xe184, 0x13f3, 0x2d11, 0x2b09, 0x1808, 0xf056, 0xf043, 0x8111,
+ 0xa200, 0x3d09, 0x8111, 0x8111, 0xe42e, 0x2816, 0x184e, 0xf112,
+ 0x884e, 0x0022, 0xe161, 0x0102, 0xe184, 0x1407, 0x2911, 0xf06a,
+ 0x2909, 0xe412, 0x18b4, 0xa200, 0x3d11, 0xe082, 0xa006, 0xe092,
+ 0x2816, 0xb62c, 0x3c4e, 0x2813, 0xa104, 0xe428, 0xe41e, 0x1599,
+ 0xe42e, 0x2813, 0xa102, 0xf034, 0xf0da, 0xf27e, 0x7414, 0x3ce3,
+ 0x2822, 0xe418, 0x07ab, 0xe42d, 0x34e4, 0x3ce5, 0xe41e, 0x14da,
+ 0xf1ee, 0xa200, 0x34e3, 0x3ce4, 0x34e5, 0x3ce6, 0x2815, 0xf0d8,
+ 0xe41e, 0x07ab, 0xe42d, 0x34e3, 0x3ce4, 0x2822, 0xf06a, 0xe41e,
+ 0x07ab, 0xe42d, 0x34e5, 0x3ce6, 0xe41e, 0x1516, 0xf08e, 0x34e3,
+ 0x3ce4, 0x34e5, 0x3ce6, 0xf03e, 0xe41e, 0x1559, 0x20c9, 0x4cca,
+ 0x22cb, 0x4ecc, 0xe066, 0x34c7, 0x3cc8, 0xe42e, 0x281e, 0xf04a,
+ 0x2813, 0xa104, 0xf088, 0x28c1, 0x3c01, 0xe41e, 0x18bb, 0xe41e,
+ 0x15d4, 0xe42e, 0x28a5, 0x4cd3, 0xe418, 0x1599, 0x28d8, 0xae02,
+ 0xe000, 0x0578, 0xe092, 0x20c7, 0x4cc8, 0x3511, 0x3d11, 0x28d8,
+ 0xe000, 0x059a, 0xe092, 0x28c1, 0x3d11, 0x28d8, 0xa002, 0x3cd8,
+ 0xa200, 0x3c0c, 0xe41e, 0x18d8, 0xf098, 0xe41e, 0x159e, 0x280c,
+ 0xa180, 0xf052, 0xa082, 0x3c0c, 0xf76e, 0xe42e, 0xe41e, 0x18ae,
+ 0xe42e, 0x28c1, 0xe424, 0xe000, 0x0700, 0xe092, 0x20aa, 0x4cab,
+ 0x8450, 0x8251, 0xe019, 0xe41e, 0x148b, 0xe049, 0xa141, 0xf027,
+ 0xa240, 0x3d01, 0xe42e, 0x3e0a, 0xa201, 0xf032, 0xe012, 0xa203,
+ 0x3e0e, 0x3c0b, 0xaf20, 0xc70f, 0x7c0a, 0x3c0c, 0xaf20, 0xae20,
+ 0x4c0b, 0xc70f, 0x7c0a, 0x3c0d, 0x200c, 0x4c0d, 0x2a0e, 0xe42b,
+ 0xe012, 0xe42e, 0xe41e, 0x117d, 0xf04a, 0xe41e, 0x1599, 0xf0be,
+ 0x287f, 0xf04a, 0xe41e, 0x1599, 0xf06e, 0x28dc, 0xf04a, 0xa102,
+ 0x3cdc, 0xf1ee, 0x28db, 0xf1ca, 0x28da, 0xe000, 0x05ab, 0xe092,
+ 0x28da, 0xa002, 0x3cda, 0xa122, 0xf028, 0x3cda, 0x28db, 0xa102,
+ 0x3cdb, 0x287f, 0xf0ba, 0x28db, 0xf05a, 0x2901, 0xe41e, 0x18c2,
+ 0xf6ae, 0x281e, 0xf03a, 0x28de, 0x3cdc, 0x2901, 0xe42e, 0xe41e,
+ 0x117d, 0xf078, 0x286c, 0xf058, 0x287d, 0xf03a, 0xa2fc, 0xe42e,
+ 0xa2fe, 0xe42e, 0xa202, 0x5814, 0xaf02, 0x3c06, 0x28a5, 0x2ad7,
+ 0xf078, 0xf099, 0x20e6, 0x4ce7, 0x22e8, 0x4ee9, 0xf07e, 0xa200,
+ 0xa201, 0xf04e, 0xa200, 0x22ea, 0x4eeb, 0x3400, 0x3c01, 0x3602,
+ 0x3e03, 0x2ee3, 0x1202, 0x1e03, 0xf071, 0xe013, 0x1e06, 0xf085,
+ 0x0c06, 0x0c06, 0xf05e, 0x1e06, 0xf037, 0x1c06, 0x1c06, 0x3404,
+ 0x3c05, 0x0ce3, 0x34c9, 0x3cca, 0x00e4, 0x0ce5, 0x34cb, 0x3ccc,
+ 0x28a3, 0xf0ca, 0x20c9, 0x4cca, 0x34ea, 0x3ceb, 0x2004, 0x4c05,
+ 0x34e6, 0x3ce7, 0x2ce3, 0x34e8, 0x3ce9, 0xe42e, 0xe41e, 0x156a,
+ 0x28eb, 0xf30a, 0x2000, 0x4c01, 0x0c31, 0xf2c6, 0x2aa3, 0xe017,
+ 0xe046, 0xa102, 0xf274, 0xe188, 0x000f, 0x7ceb, 0x3402, 0x3c03,
+ 0xe41e, 0x1584, 0x28eb, 0xa102, 0xcc44, 0xe161, 0x0250, 0xa200,
+ 0xe184, 0x1533, 0x0111, 0x0d11, 0xae02, 0x3404, 0xe008, 0xffff,
+ 0xaf02, 0x3c05, 0x8403, 0x8204, 0xe018, 0xae1e, 0x8205, 0xe01c,
+ 0xe161, 0x0250, 0x8802, 0x0022, 0xe184, 0x1547, 0x0111, 0x0d11,
+ 0xf02e, 0xa200, 0x2aa3, 0xf039, 0x00e7, 0x0ce8, 0x00e3, 0x0ce4,
+ 0x34c9, 0x3cca, 0x00e9, 0x0cea, 0x00e5, 0x0ce6, 0x34cb, 0x3ccc,
+ 0xe42e, 0xe41e, 0x156a, 0x28a5, 0xe016, 0xf08a, 0x2000, 0x4c01,
+ 0x0c31, 0xae02, 0x2aa3, 0xe017, 0xe046, 0x34c9, 0x3cca, 0x34cb,
+ 0x3ccc, 0xe42e, 0x28d7, 0xf05a, 0xa200, 0x34e1, 0x3ce2, 0x3ce0,
+ 0x28a5, 0xe016, 0xf09a, 0x20e1, 0x4ce2, 0x2ee0, 0x1e31, 0xf047,
+ 0xa203, 0x5a11, 0xe042, 0x3400, 0x3c01, 0x2831, 0x3ce0, 0x2000,
+ 0x4c01, 0x34e1, 0x3ce2, 0xe42e, 0xe0c0, 0x0041, 0x22f0, 0x4ef1,
+ 0xe042, 0xe005, 0x029e, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0250, 0xd112, 0x0200, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0xe42e, 0x28d8, 0xe426, 0xe41e, 0x159e, 0xf7ce, 0xe161, 0x0578,
+ 0xe162, 0x0578, 0x2111, 0x4d11, 0xa201, 0x3e00, 0xa203, 0x28d8,
+ 0xa104, 0xf0e4, 0xcc44, 0xe184, 0x15b6, 0x2112, 0x4d0a, 0x1111,
+ 0x1d11, 0xf054, 0xe082, 0xa104, 0xe094, 0x3e00, 0xa003, 0xe084,
+ 0xa004, 0xe092, 0x2800, 0xe000, 0x059a, 0xe098, 0xa002, 0xe096,
+ 0x2904, 0x3c01, 0xe41e, 0x18bb, 0x28d8, 0x1800, 0xa104, 0xf0a4,
+ 0xcc44, 0xe184, 0x15d0, 0x2911, 0x3d12, 0x2911, 0x3d12, 0x2913,
+ 0x3d14, 0x28d8, 0xa102, 0x3cd8, 0x28d9, 0xe000, 0x05ab, 0xe092,
+ 0x2801, 0x3d01, 0x28d9, 0xa002, 0x3cd9, 0xa122, 0xf028, 0x3cd9,
+ 0x28db, 0xa002, 0x3cdb, 0xe42e, 0xa200, 0x3c68, 0x28d4, 0xa102,
+ 0xcc44, 0xe184, 0x1600, 0xe0c0, 0x0054, 0x5c68, 0xa802, 0xf0b8,
+ 0x2868, 0xe049, 0xe001, 0x0518, 0xe09f, 0x2b07, 0xa809, 0xe419,
+ 0x18c2, 0xf05e, 0x2868, 0xa209, 0xe41e, 0x18d1, 0x2a68, 0xa003,
+ 0x3e68, 0xe42e, 0xe004, 0x0518, 0xe09e, 0xe004, 0x0054, 0xe09c,
+ 0x28d4, 0xa102, 0xcc44, 0xa200, 0x3c68, 0xe184, 0x1616, 0x2b17,
+ 0xaf05, 0xa803, 0x5a68, 0xe056, 0x2a68, 0xa003, 0x3e68, 0x9f06,
+ 0xe42e, 0xe161, 0x05e0, 0xa200, 0x3d11, 0x3c02, 0xd022, 0x011f,
+ 0xe184, 0x1626, 0xe41e, 0x16fc, 0x2802, 0xa002, 0x3c02, 0xa200,
+ 0x3c94, 0x3c90, 0x3c91, 0xe42e, 0xba4e, 0xba40, 0xba40, 0xba40,
+ 0xba40, 0xba46, 0xba4e, 0xbc3e, 0xf0dd, 0x3c00, 0x1810, 0xf038,
+ 0xa2fe, 0x3c10, 0x2800, 0xe000, 0x0100, 0xe41e, 0x1686, 0xa202,
+ 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa204, 0x3c94, 0x2810, 0xe000,
+ 0x0100, 0xe41e, 0x16ce, 0xe42a, 0xe41e, 0x0ec3, 0xe42a, 0xe41e,
+ 0x13f5, 0xa202, 0xe42e, 0xe41e, 0x0791, 0xf0fd, 0x3c01, 0xe002,
+ 0x00ff, 0xf0b0, 0x2801, 0x1820, 0xf038, 0xa2fe, 0x3c20, 0x2801,
+ 0xe41e, 0x1686, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa202,
+ 0x3c94, 0x2820, 0xe41e, 0x16ce, 0xe42a, 0xe41e, 0x0fc6, 0x3c66,
+ 0xa200, 0xe41e, 0x064a, 0xa201, 0x3e94, 0x2866, 0xe42a, 0xa202,
+ 0xe42e, 0x2835, 0xa102, 0xf06a, 0x2092, 0x4c93, 0xe41e, 0x1728,
+ 0xe470, 0x2080, 0x4c81, 0xe41e, 0x1737, 0xe470, 0x3c02, 0xe41e,
+ 0x16fe, 0xa200, 0x3c03, 0xe161, 0x05e0, 0x2901, 0xa203, 0x3f11,
+ 0xf0ca, 0x28a7, 0x1901, 0xf090, 0x8111, 0x2111, 0x4d11, 0x3404,
+ 0x3c05, 0xa202, 0x3c03, 0xf08e, 0x2090, 0x4c91, 0x3404, 0x3c05,
+ 0x8111, 0x3511, 0x3d11, 0xe41e, 0x171b, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0x28a7, 0xa00e, 0xaf06, 0xae02, 0xce24, 0xd113,
+ 0x0012, 0xca28, 0xf7f8, 0x28a6, 0xf0a8, 0xe41e, 0x0544, 0x2004,
+ 0x4c05, 0xe000, 0x0200, 0x3404, 0x3c05, 0xf66e, 0xe161, 0x05e1,
+ 0x28a7, 0x3d01, 0x2a03, 0xf089, 0xa00e, 0xaf06, 0xae06, 0x0090,
+ 0x0c91, 0x3490, 0x3c91, 0xe41e, 0x16fc, 0xe42e, 0x3c02, 0xe41e,
+ 0x16fe, 0xe161, 0x05e0, 0x2911, 0xe42a, 0x8111, 0x2111, 0x4d11,
+ 0x3404, 0x3c05, 0x2894, 0xa102, 0xf0ba, 0xe41e, 0x171b, 0xe41e,
+ 0x1728, 0xa204, 0xe41e, 0x064a, 0xe004, 0x0090, 0xf0ae, 0xe41e,
+ 0x171b, 0xe41e, 0x1737, 0xa202, 0xe41e, 0x064a, 0xe004, 0x0080,
+ 0xcc66, 0xcc6a, 0xcc6e, 0xa01e, 0xcc6c, 0xa200, 0xcc60, 0xcc68,
+ 0xcc70, 0xe128, 0xa202, 0xe42e, 0xa204, 0xf02e, 0xa206, 0x3c0a,
+ 0xe41e, 0x170e, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05e0, 0xd112,
+ 0x0004, 0x880a, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0041,
+ 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02a2, 0xae11, 0xe042, 0x2a02,
+ 0xae07, 0xe042, 0xe42e, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042,
+ 0xe005, 0x02ae, 0xae11, 0xe042, 0x2204, 0x4e05, 0xe042, 0xe42e,
+ 0xca29, 0xf7f9, 0xce20, 0xa080, 0x3492, 0x3c93, 0xd111, 0x0090,
+ 0xd112, 0x0010, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xca29,
+ 0xf7f9, 0xce20, 0xa080, 0x3480, 0x3c81, 0xd111, 0x0080, 0xd112,
+ 0x0010, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0x2816, 0xe42a,
+ 0xa102, 0x3c00, 0x28a3, 0xe01a, 0x4417, 0xe418, 0x17fb, 0xe41e,
+ 0x180c, 0xe41e, 0x182a, 0xe42e, 0x28d3, 0xf10a, 0x20c9, 0x4cca,
+ 0x10c7, 0x1cc8, 0x34c9, 0x3cca, 0x20cb, 0x4ccc, 0x10c7, 0x1cc8,
+ 0x34cb, 0x3ccc, 0xa200, 0x34c7, 0x3cc8, 0x2c31, 0x2aa5, 0x4ed3,
+ 0xb612, 0x3cd5, 0x2816, 0xe42a, 0xa102, 0x3c00, 0x2831, 0x3c01,
+ 0x28d2, 0xe418, 0x17a8, 0x28d2, 0xe41a, 0x17d6, 0xe41e, 0x1779,
+ 0xe42e, 0xc420, 0xe161, 0x0102, 0x8800, 0x0022, 0xe184, 0x1782,
+ 0x2901, 0xf03a, 0x8131, 0xe42e, 0xe082, 0xe002, 0x0102, 0xaf04,
+ 0x3c0a, 0xa206, 0x3d09, 0x28d1, 0x3d09, 0x28d0, 0x3d31, 0x8109,
+ 0x28c1, 0x3d11, 0xe42e, 0xc420, 0xe161, 0x0102, 0x8800, 0x0022,
+ 0xe184, 0x179c, 0x2901, 0xf03a, 0x8131, 0xe42e, 0xa206, 0x3d09,
+ 0xa202, 0x3d09, 0x2801, 0x3d31, 0x8109, 0xa2fe, 0x3d11, 0xe42e,
+ 0xa200, 0xc420, 0xe161, 0x0102, 0x8800, 0x0022, 0xe184, 0x17b2,
+ 0x2b31, 0xe01b, 0xe042, 0x1816, 0xe424, 0xa203, 0xae21, 0xe161,
+ 0x0102, 0x8800, 0x0022, 0xe184, 0x17cf, 0x2909, 0xf10a, 0x2909,
+ 0xf0d6, 0x2901, 0x1c01, 0xf026, 0x1c12, 0x0c01, 0xe046, 0xf062,
+ 0xe042, 0xe049, 0xe082, 0xa004, 0xe094, 0x8111, 0x8111, 0x8131,
+ 0xa200, 0x3d12, 0x2912, 0xe412, 0x18b4, 0xe42e, 0xe161, 0x0100,
+ 0xe162, 0x01f0, 0x8800, 0x0022, 0xe184, 0x17f9, 0x2912, 0x3c02,
+ 0x2912, 0x3c03, 0xe01a, 0xb670, 0x3c04, 0x2804, 0x8112, 0x8112,
+ 0xf08a, 0x2802, 0x3d11, 0x2803, 0x3d11, 0x2804, 0x3d11, 0xf0ae,
+ 0x8111, 0x8111, 0x2901, 0xa201, 0x3f11, 0xf04a, 0x2901, 0xe412,
+ 0x18b4, 0x8111, 0xe42e, 0x28a5, 0xe428, 0x2cd5, 0x3c01, 0x2801,
+ 0xa002, 0xc70f, 0x7c12, 0xaf20, 0x3c01, 0x1c31, 0xe42a, 0xe41e,
+ 0x17a8, 0xe41e, 0x1793, 0xf74e, 0xe161, 0x0100, 0xe162, 0x01f0,
+ 0x8800, 0x0022, 0xe184, 0x181e, 0x2911, 0x3d12, 0x2911, 0x2b11,
+ 0xa807, 0xb616, 0x3d12, 0xa200, 0x3d12, 0x3d12, 0x8111, 0xe161,
+ 0x0230, 0xe162, 0x01f0, 0xd022, 0x003f, 0xe184, 0x1828, 0x2912,
+ 0x3d11, 0xe42e, 0xe41e, 0x1836, 0x2808, 0xe000, 0x0270, 0xe096,
+ 0xe41e, 0x1876, 0x2808, 0x0809, 0x3cc0, 0xe42e, 0xe161, 0x05e0,
+ 0xa200, 0xc70f, 0x3d11, 0xa206, 0x3c05, 0xa200, 0x3c08, 0xc420,
+ 0xe163, 0x0270, 0xa2fe, 0x3c06, 0xa203, 0xae21, 0xe013, 0xe161,
+ 0x0102, 0xe162, 0x05e0, 0x8800, 0x0022, 0xe184, 0x1865, 0x2912,
+ 0xf158, 0x2909, 0x1805, 0xf114, 0x2909, 0xf0e6, 0x2901, 0x1c31,
+ 0xf026, 0x1c12, 0x0c31, 0xe046, 0xf076, 0xe042, 0xe049, 0xe084,
+ 0xe002, 0x05e1, 0x3c06, 0x8111, 0x8111, 0x8131, 0x2806, 0xe424,
+ 0xe000, 0x05e0, 0xe094, 0xa202, 0x3d02, 0x2806, 0xae02, 0x3d13,
+ 0x2808, 0xa002, 0x3c08, 0x1816, 0xf4e8, 0xe42e, 0xe161, 0x05e0,
+ 0xa200, 0xc70f, 0x3d11, 0xa206, 0x3c05, 0xa200, 0x3c09, 0xc420,
+ 0xa2fe, 0x3c07, 0xa221, 0xe161, 0x0102, 0xe162, 0x05e0, 0x8800,
+ 0x0022, 0xe184, 0x189d, 0x2912, 0xf118, 0x2909, 0x1805, 0xf0d4,
+ 0x2909, 0xf0a2, 0x2901, 0xe046, 0xf072, 0xe042, 0xe049, 0xe084,
+ 0xe002, 0x05e1, 0x3c07, 0x8111, 0x8111, 0x8131, 0x2807, 0xe424,
+ 0xe000, 0x05e0, 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02, 0x3d13,
+ 0x2809, 0xa002, 0x3c09, 0x1816, 0xf548, 0xe42e, 0xe161, 0x0518,
+ 0xa200, 0xc713, 0x3d11, 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907,
+ 0xa80c, 0x3d07, 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907, 0xa80a,
+ 0x3d07, 0xe42e, 0x3cd6, 0xe000, 0x0518, 0xe09e, 0x2907, 0xa806,
+ 0x3d07, 0x28d6, 0xa002, 0x3cd6, 0x18d4, 0xf038, 0xa200, 0x3cd6,
+ 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907, 0xe056, 0x3d07, 0xe42e,
+ 0xe161, 0x0518, 0x28d4, 0xa102, 0xcc44, 0xa200, 0xe184, 0x18e3,
+ 0x2b11, 0xa807, 0xe01b, 0xe042, 0x18df, 0xa102, 0xe01a, 0xe42e,
+ 0xe161, 0x0518, 0x28d4, 0xa102, 0xcc44, 0xe184, 0x18f2, 0x2911,
+ 0xe016, 0xf038, 0xe190, 0xe42e, 0xe42e, 0x28d6, 0x3c00, 0x2800,
+ 0xe000, 0x0518, 0xe092, 0x2901, 0xf12a, 0x2800, 0xa002, 0x3c00,
+ 0x18d4, 0xf038, 0xa200, 0x3c00, 0x2800, 0x18d6, 0xf718, 0xa200,
+ 0x3cd6, 0xa2fe, 0x3cc1, 0xe0c2, 0x0077, 0xe42e, 0xa20e, 0x3d01,
+ 0x2800, 0x3cc1, 0xe0c2, 0x0077, 0xe42e, 0xe0c0, 0x0060, 0xe049,
+ 0xa861, 0xe42b, 0xe0c1, 0x0044, 0xae1b, 0xe0c3, 0x0102, 0xe049,
+ 0xa83e, 0x3caf, 0xaf0b, 0x3eae, 0x2848, 0xae04, 0x0848, 0x0848,
+ 0xe000, 0x0620, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117,
+ 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xa200,
+ 0xe0c2, 0x0140, 0xe0c2, 0x0149, 0x2867, 0xe0c2, 0x0141, 0xe0c0,
+ 0x0064, 0xe0c2, 0x014c, 0x2850, 0xa102, 0xae20, 0x4c51, 0xa102,
+ 0xe0c2, 0x0142, 0x28ae, 0xae08, 0x2aaf, 0xa81f, 0xe056, 0xe0c2,
+ 0x014e, 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2,
+ 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0xa200, 0x3cad, 0xe41e,
+ 0x1973, 0xe41e, 0x198a, 0x28ad, 0xa8fe, 0x1851, 0xf798, 0xa204,
+ 0xae1c, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe190, 0xe0c1,
+ 0x014b, 0xf7e9, 0xe42e, 0xa205, 0x28ad, 0xb615, 0xa903, 0x3e0d,
+ 0x2848, 0xe000, 0x0700, 0xe092, 0x2901, 0xae04, 0x4c0d, 0xae1c,
+ 0x4cad, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe42e, 0x28ad, 0xe000, 0x0080, 0x3cad, 0xaf0e, 0x1850,
+ 0xe428, 0x28ad, 0xa8fe, 0xa002, 0x3cad, 0xe42e, 0xe41e, 0x1a71,
+ 0xe41e, 0x19c2, 0xe41e, 0x1b28, 0xe41e, 0x0910, 0x285c, 0x4ca3,
+ 0xe01a, 0x3c5c, 0x2823, 0xf04a, 0xe41e, 0x0b7e, 0xf19e, 0xa200,
+ 0x3c52, 0x2852, 0x183c, 0xf142, 0x2852, 0xa201, 0xe41e, 0x0a44,
+ 0x284a, 0x1852, 0xf774, 0xf06a, 0xe41e, 0x1aa4, 0x284a, 0x183c,
+ 0xf072, 0xe41e, 0x1a01, 0xf6ea, 0xe41e, 0x1a83, 0xf6be, 0xe41e,
+ 0x1c91, 0xe42e, 0xa202, 0xae0c, 0x2a29, 0xa83f, 0xe056, 0xae0a,
+ 0x2a29, 0xa83f, 0xe056, 0xae06, 0xcf80, 0xa200, 0xae02, 0xa902,
+ 0xae04, 0xcfc2, 0x2823, 0xe01a, 0xae0e, 0x4c50, 0xa102, 0xae02,
+ 0x4c2b, 0xae06, 0xcf00, 0xd1d3, 0x000b, 0xd185, 0x0001, 0xc420,
+ 0xe161, 0x0101, 0xa200, 0xd022, 0x000f, 0xe184, 0x19e9, 0x2b31,
+ 0xae02, 0xb42a, 0xcfe8, 0x20c7, 0x4cc8, 0xcfea, 0x20c9, 0x4cca,
+ 0xcfec, 0x20cb, 0x4ccc, 0xcfee, 0xe004, 0x0060, 0xce30, 0xe161,
+ 0x0160, 0xd022, 0x001f, 0xe184, 0x19ff, 0x2111, 0x4d11, 0xce32,
+ 0xe42e, 0xe0c4, 0x3fff, 0xbc12, 0xa10a, 0xb4a8, 0xa104, 0xb7b4,
+ 0xa006, 0x3c30, 0xbdfe, 0x7411, 0x28a5, 0xf03a, 0xe0c4, 0xffff,
+ 0x2813, 0xa102, 0xf034, 0xf07a, 0xf0de, 0x7414, 0x2822, 0xe418,
+ 0x07ab, 0xf08e, 0x2815, 0xf068, 0xe41e, 0x07ab, 0x2822, 0xe418,
+ 0x07ab, 0x282c, 0xe418, 0x0791, 0x2824, 0x3c40, 0x2830, 0xf05a,
+ 0xba40, 0xf03a, 0xbc3e, 0x3c40, 0x2830, 0xe016, 0xe41a, 0x0919,
+ 0xe40a, 0x1a6e, 0x28a3, 0xf1aa, 0x28a5, 0xf04a, 0xba40, 0xba40,
+ 0xf15e, 0xba40, 0xf13a, 0xbc0c, 0xe40d, 0x1a6e, 0xf0fa, 0xa106,
+ 0xf07a, 0xa104, 0xf79a, 0xe41e, 0x0791, 0xf29d, 0xf75e, 0xe41e,
+ 0x0791, 0xf25d, 0xbc40, 0xf23d, 0xf6fe, 0xe0c6, 0x0033, 0xf1fd,
+ 0x0828, 0xa400, 0xa566, 0x3c42, 0xa200, 0x3c43, 0x3c44, 0x3c45,
+ 0x282a, 0xf10a, 0xbc04, 0xf13d, 0x3c43, 0xa102, 0xf0ba, 0xbe0c,
+ 0xf0ed, 0xae02, 0xa83e, 0x3c44, 0xbe0c, 0xf09d, 0xae02, 0xa83e,
+ 0x3c45, 0x2823, 0xf02a, 0x74b8, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0xa202, 0xe0c2, 0x013c, 0xa200, 0xa221, 0xd022, 0x00df,
+ 0xe184, 0x1a7e, 0xe0c2, 0x013e, 0xe0c3, 0x013f, 0xa002, 0xa200,
+ 0xe0c2, 0x013c, 0xe42e, 0xa200, 0x3ca2, 0x28a6, 0xf048, 0xa202,
+ 0x3ca0, 0x3ca2, 0xe16a, 0x284a, 0x3c52, 0xe41e, 0x1ab3, 0x2852,
+ 0x183c, 0xf092, 0xe41e, 0x1ac8, 0xf09d, 0xcb86, 0xa102, 0xf780,
+ 0xc894, 0xf768, 0xe41e, 0x07da, 0xe42e, 0xe41e, 0x1af4, 0x284c,
+ 0xa002, 0x3c4c, 0xe16a, 0xe42e, 0x28a5, 0xe016, 0x3c30, 0xe41e,
+ 0x1ab3, 0x2852, 0x184a, 0xf072, 0xe41e, 0x1af4, 0x284c, 0xa002,
+ 0x3c4c, 0xf78e, 0xe42e, 0x2843, 0xae0a, 0x4c44, 0xae0a, 0x4c45,
+ 0xcf30, 0x2840, 0xae04, 0x4c30, 0xcf82, 0xd1c3, 0x0000, 0x2842,
+ 0xcf96, 0x2840, 0xae0c, 0x4c30, 0xcfc4, 0xd188, 0x0001, 0xe42e,
+ 0x2852, 0xe0c2, 0x003f, 0xd185, 0x0002, 0xd1d0, 0x003f, 0xcba0,
+ 0xa810, 0xcba3, 0xf189, 0xf7c8, 0xe41e, 0x1c31, 0xe41e, 0x198a,
+ 0xcbe0, 0xf7f8, 0x2856, 0xe41a, 0x1c73, 0xcba0, 0xcba3, 0xf0b9,
+ 0xf7d8, 0xd186, 0x0001, 0xd185, 0x0004, 0xe41e, 0x1c83, 0xcb06,
+ 0x3c52, 0xe42e, 0xd1d0, 0x0000, 0xd1d1, 0x0000, 0xcb1c, 0xf7f8,
+ 0xcbe0, 0xf7f8, 0xe16b, 0xe42e, 0x2852, 0xe0c2, 0x003f, 0xd185,
+ 0x0002, 0xd186, 0x0000, 0xd1c2, 0x0001, 0xd1c5, 0x0000, 0xd1c4,
+ 0x0000, 0xd1d0, 0x000e, 0xcba0, 0xf7f8, 0x284b, 0xf098, 0xd1c2,
+ 0x0000, 0xd1c5, 0x0003, 0xd1c4, 0x0003, 0xd1c8, 0x0000, 0xd1d0,
+ 0x0020, 0xe41e, 0x1c31, 0xe41e, 0x198a, 0xa200, 0xe0c2, 0x012a,
+ 0xcbe0, 0xf7f8, 0x2856, 0xe41a, 0x1c73, 0xcba0, 0xf7f8, 0xd186,
+ 0x0001, 0xd185, 0x0004, 0xe41e, 0x1c83, 0xcb06, 0x3c52, 0xe42e,
+ 0xa200, 0xe0c2, 0x0100, 0xe0c2, 0x013d, 0xcc8e, 0xe004, 0x00ce,
+ 0xe0c2, 0x017c, 0xa218, 0xe0c2, 0x017d, 0xe0c0, 0x0050, 0x3008,
+ 0xaf02, 0x3009, 0xaf02, 0x300a, 0xaf02, 0x300b, 0xaf0a, 0x300c,
+ 0xaf02, 0x300d, 0xaf02, 0x300e, 0xaf02, 0x300f, 0xaf06, 0xa802,
+ 0xe005, 0x0ba6, 0xe09f, 0x3d17, 0x280c, 0x4408, 0x3c08, 0x280d,
+ 0x4409, 0x3c09, 0x280e, 0x440a, 0x3c0a, 0x280f, 0x440b, 0x3c0b,
+ 0xa200, 0xe0c2, 0x0168, 0x2a08, 0xf02b, 0xa904, 0x2a09, 0xf02b,
+ 0xa912, 0x2a0a, 0xf02b, 0xa940, 0x2a0b, 0xf02b, 0xa980, 0xe005,
+ 0x0ba6, 0xe09f, 0x2b17, 0xae05, 0xe056, 0xe0c2, 0x0169, 0xe0c1,
+ 0x0041, 0xe004, 0x000c, 0xae10, 0xe042, 0x2a0c, 0xf06b, 0xe004,
+ 0x05d2, 0xe09e, 0x2117, 0x4d17, 0xcf0e, 0xe0c1, 0x0041, 0xe004,
+ 0x004c, 0xae10, 0xe042, 0x2a0d, 0xf06b, 0xe004, 0x05d4, 0xe09e,
+ 0x2117, 0x4d17, 0xe0c2, 0x0103, 0xa202, 0xe0c2, 0x0210, 0xe0c1,
+ 0x0041, 0xe004, 0x007c, 0xae10, 0xe042, 0x2a0e, 0xf06b, 0xe004,
+ 0x05d6, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0211, 0xe0c1, 0x0041,
+ 0xe004, 0x00bc, 0xae10, 0xe042, 0x2a0f, 0xf06b, 0xe004, 0x05d8,
+ 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0212, 0x2050, 0x4c51, 0xae08,
+ 0xe0c2, 0x0101, 0xe0c2, 0x0283, 0xe0c2, 0x006f, 0xe0c2, 0x004f,
+ 0x2a1f, 0x2058, 0x4c59, 0xf02b, 0xae02, 0xe0c2, 0x0078, 0x205a,
+ 0x4c5b, 0xf02b, 0xae02, 0xe0c2, 0x0079, 0xe0c0, 0x0044, 0xa80e,
+ 0xae1a, 0x4c67, 0xe0c2, 0x0102, 0xa200, 0xe0c2, 0x0104, 0xe0c2,
+ 0x0208, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xae16, 0xe0c2, 0x0204,
+ 0xa200, 0x3caf, 0x3cae, 0x3cad, 0x2848, 0xe404, 0x1c23, 0xe0c0,
+ 0x0060, 0xe049, 0xa861, 0xe40b, 0x1c23, 0xe049, 0xa83e, 0x3caf,
+ 0xaf0b, 0x3eae, 0x2848, 0xae04, 0x0848, 0x0848, 0xe000, 0x0620,
+ 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117, 0x4d17, 0xe0c2,
+ 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xa200, 0xe0c2, 0x0140,
+ 0xe0c2, 0x0149, 0x2867, 0xe0c2, 0x0141, 0xe0c0, 0x0064, 0xe0c2,
+ 0x014c, 0x2850, 0xa102, 0xae20, 0x4c51, 0xa102, 0xe0c2, 0x0142,
+ 0x28ae, 0xae08, 0x2aaf, 0xa81f, 0xe056, 0xe0c2, 0x014e, 0xe0c0,
+ 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2, 0x0147, 0xe0c0,
+ 0x0063, 0xe0c2, 0x0148, 0xe41e, 0x1cae, 0xe41e, 0x1cd1, 0xa202,
+ 0xe0c2, 0x0106, 0xa201, 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x1cf5,
+ 0xe42e, 0xa200, 0xe0c2, 0x0113, 0xe0c2, 0x030d, 0xe0c2, 0x022b,
+ 0xcb94, 0xe0c2, 0x0115, 0xa87e, 0x22aa, 0x4eab, 0xe042, 0x34aa,
+ 0x3cab, 0x28af, 0x4cae, 0xf17a, 0xa203, 0x28ad, 0xb615, 0x3e0d,
+ 0xa203, 0x3e0e, 0x2848, 0xe000, 0x0700, 0xe092, 0x2901, 0xae02,
+ 0x4c0d, 0xae02, 0x4c0e, 0xae1c, 0x4cad, 0xe0c1, 0x014b, 0xf7e9,
+ 0xe0c2, 0x014d, 0xcba4, 0xe0c2, 0x012a, 0xcb8a, 0xe0c2, 0x0114,
+ 0xa802, 0x3c56, 0xe42a, 0xcb14, 0xae0a, 0xcb19, 0xe056, 0xe0c2,
+ 0x0120, 0xcb8c, 0xe0c2, 0x0121, 0xcb8e, 0xe0c2, 0x0122, 0xcb90,
+ 0xe0c2, 0x0123, 0xe42e, 0xcbd0, 0xe0c2, 0x030c, 0xcbd2, 0xe0c2,
+ 0x0309, 0xcbd8, 0xe0c2, 0x030a, 0xcbda, 0xe0c2, 0x030b, 0xa200,
+ 0xe0c2, 0x0320, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2,
+ 0x0110, 0x28af, 0xaf08, 0x4cae, 0xe42a, 0xa202, 0xe0c2, 0x014a,
+ 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065, 0xaf18, 0xa802,
+ 0xf04a, 0xe0c0, 0x0281, 0xf7ea, 0x28af, 0x4cae, 0xe42a, 0xe0c0,
+ 0x014b, 0xf7e8, 0xa204, 0xae1c, 0xe0c2, 0x014d, 0xa202, 0xe0c2,
+ 0x014a, 0xe190, 0xe0c0, 0x014b, 0xf7e8, 0xe42e, 0xa202, 0xe0c2,
+ 0x0302, 0x2816, 0xe42a, 0xa102, 0xcc44, 0xe160, 0x0004, 0xe161,
+ 0x0103, 0xe163, 0x0380, 0xe184, 0x1ccc, 0x8531, 0xc786, 0xe018,
+ 0xb608, 0xe000, 0x0620, 0xe094, 0x2112, 0x4d12, 0x9f13, 0x2112,
+ 0x4d12, 0x9f13, 0x2112, 0x4d12, 0x9f13, 0xa200, 0xe0c2, 0x0302,
+ 0xe42e, 0xa202, 0xae02, 0xa902, 0xe0c2, 0x0312, 0xa802, 0xe42a,
+ 0xe162, 0x01b0, 0x2912, 0xaf02, 0x3c0a, 0x2912, 0xaf02, 0x3c0b,
+ 0x280a, 0x180b, 0xf0d8, 0xe162, 0x01b0, 0xd022, 0x001f, 0xe184,
+ 0x1cee, 0x2912, 0xaf02, 0x3c0b, 0x180a, 0xf028, 0xe190, 0x280b,
+ 0xae08, 0x4c0a, 0xe0c2, 0x0313, 0xe42e, 0xe0c0, 0x0065, 0xaf18,
+ 0xa802, 0xe40a, 0x1d77, 0xae0a, 0xe0c1, 0x0060, 0xaf0d, 0xa80f,
+ 0xe056, 0xe0c1, 0x0044, 0xa811, 0xe056, 0xae0c, 0xe0c1, 0x0044,
+ 0xa80f, 0xe056, 0xe167, 0x0ba7, 0x2f17, 0xe056, 0xe0c2, 0x0282,
+ 0xe0c0, 0x006e, 0xe0c2, 0x0284, 0xaf20, 0xe0c1, 0x0282, 0xa809,
+ 0xf04b, 0xe049, 0xae1f, 0xf06e, 0xe049, 0xa011, 0xaf09, 0xae07,
+ 0xae21, 0xe056, 0xe0c2, 0x028c, 0xe167, 0x0ba8, 0x2d17, 0x4917,
+ 0xe0c2, 0x0285, 0xe167, 0x0baa, 0x2d17, 0x4917, 0xe0c2, 0x0286,
+ 0xe41e, 0x1d78, 0xe0c0, 0x004a, 0xe0c2, 0x0289, 0xe0c0, 0x004b,
+ 0xe0c2, 0x028a, 0xe0c0, 0x0055, 0xe0c2, 0x028b, 0xe0c1, 0x0041,
+ 0xe004, 0x033c, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba0, 0x2d17, 0x4917, 0xe0c2, 0x0287, 0xe0c1, 0x0041,
+ 0xe004, 0x0354, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba2, 0x2d17, 0x4917, 0xe0c2, 0x0288, 0xe0c1, 0x0041,
+ 0xe004, 0x035c, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba4, 0x2d17, 0x4917, 0xe0c2, 0x028d, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xe0c2, 0x0280, 0xa210, 0xe0c2, 0x0168, 0xe42e,
+ 0xe167, 0x0bac, 0xe165, 0x028e, 0xe166, 0x02c0, 0xd022, 0x0008,
+ 0xe184, 0x1d8b, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02d2, 0xd022, 0x0008,
+ 0xe184, 0x1d97, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190,
+ 0xe166, 0x02db, 0xd022, 0x0008, 0xe184, 0x1da3, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02e4, 0xd022, 0x0008,
+ 0xe184, 0x1dae, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe42e,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x060d, 0x0d14, 0x1414, 0x1c1c, 0x1c1c, 0x2020, 0x2025, 0x252a,
+ 0x0a0e, 0x0e14, 0x1414, 0x1818, 0x1818, 0x1b1b, 0x1b1e, 0x1e22,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x060a, 0x0a0d, 0x0b0d, 0x1010, 0x1010, 0x1212, 0x1212, 0x1217,
+ 0x1717, 0x1717, 0x1719, 0x1919, 0x1919, 0x1919, 0x1b1b, 0x1b1b,
+ 0x1b1b, 0x1b1b, 0x1d1d, 0x1d1d, 0x1d1d, 0x1d1f, 0x1f1f, 0x1f1f,
+ 0x1f21, 0x2121, 0x2121, 0x2424, 0x2424, 0x2626, 0x2628, 0x282a,
+ 0x090d, 0x0d0f, 0x0d0f, 0x1111, 0x1111, 0x1313, 0x1313, 0x1315,
+ 0x1515, 0x1515, 0x1516, 0x1616, 0x1616, 0x1616, 0x1818, 0x1818,
+ 0x1818, 0x1818, 0x1919, 0x1919, 0x1919, 0x191b, 0x1b1b, 0x1b1b,
+ 0x1b1c, 0x1c1c, 0x1c1c, 0x1e1e, 0x1e1e, 0x2020, 0x2021, 0x2123,
+ 0x0000, 0x0001, 0x0004, 0x0008, 0x0005, 0x0002, 0x0003, 0x0006,
+ 0x0009, 0x000c, 0x000d, 0x000a, 0x0007, 0x000b, 0x000e, 0x000f,
+ 0x0000, 0x0001, 0x0008, 0x0010, 0x0009, 0x0002, 0x0003, 0x000a,
+ 0x0011, 0x0018, 0x0020, 0x0019, 0x0012, 0x000b, 0x0004, 0x0005,
+ 0x000c, 0x0013, 0x001a, 0x0021, 0x0028, 0x0030, 0x0029, 0x0022,
+ 0x001b, 0x0014, 0x000d, 0x0006, 0x0007, 0x000e, 0x0015, 0x001c,
+ 0x0023, 0x002a, 0x0031, 0x0038, 0x0039, 0x0032, 0x002b, 0x0024,
+ 0x001d, 0x0016, 0x000f, 0x0017, 0x001e, 0x0025, 0x002c, 0x0033,
+ 0x003a, 0x003b, 0x0034, 0x002d, 0x0026, 0x001f, 0x0027, 0x002e,
+ 0x0035, 0x003c, 0x003d, 0x0036, 0x002f, 0x0037, 0x003e, 0x003f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x059a, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0143, 0xe40e, 0x007e, 0xe40e,
+ 0x0147, 0xe40e, 0x007e, 0xe40e, 0x014b, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x0316, 0xe40e, 0x0332, 0xe41e,
+ 0x014f, 0xe40e, 0x007e, 0xe41e, 0x015a, 0xe40e, 0x007e, 0xe41e,
+ 0x01ab, 0xe40e, 0x007e, 0xe41e, 0x015c, 0xe40e, 0x007e, 0xe41e,
+ 0x0429, 0xe40e, 0x007e, 0xe41e, 0x018b, 0xe40e, 0x007e, 0xe41e,
+ 0x01c1, 0xe41e, 0x0216, 0xe41e, 0x072b, 0xe41e, 0x0afa, 0xe41e,
+ 0x01e6, 0xe42e, 0xa202, 0xe42e, 0xd130, 0x0001, 0xe41e, 0x0404,
+ 0xca29, 0xf7f9, 0xe0c0, 0x0060, 0xe42a, 0xe0c0, 0x0042, 0xce20,
+ 0xd111, 0x0700, 0xd112, 0x00c4, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20, 0xd111, 0x0ba8, 0xd112,
+ 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0x3c98,
+ 0xe0c0, 0x0061, 0x3cb4, 0xe41e, 0x0b35, 0xe41e, 0x0dea, 0xa200,
+ 0xe0c2, 0x0054, 0xe42e, 0xe0c0, 0x0060, 0xf08a, 0xe0c0, 0x0061,
+ 0x22b9, 0x4eba, 0xe046, 0xaf12, 0xae02, 0x3cbc, 0xa200, 0x3cc8,
+ 0x3cc9, 0x3cca, 0x3ccb, 0x3ccc, 0xcc92, 0xcc8e, 0xa202, 0x3cde,
+ 0xe41e, 0x054b, 0xe41e, 0x0b35, 0xe161, 0x07c5, 0xe0c0, 0x0054,
+ 0x3511, 0x3d01, 0xe42e, 0xe41e, 0x022b, 0x28cd, 0xe418, 0x052b,
+ 0x28cd, 0xe016, 0x44de, 0xe418, 0x0573, 0xa200, 0x3cde, 0xe41e,
+ 0x0786, 0xe41e, 0x05b4, 0x28d6, 0xa104, 0xf7aa, 0xe41e, 0x029c,
+ 0xe42e, 0xd130, 0x0001, 0xd03a, 0x0001, 0xd008, 0x0000, 0xd039,
+ 0x0000, 0xd049, 0x0000, 0xd047, 0x0000, 0xa200, 0xe0c2, 0x0168,
+ 0x22f0, 0x4ef1, 0xa200, 0xc401, 0xe188, 0x07ff, 0x3d11, 0x36f0,
+ 0x3ef1, 0xe0c0, 0x0062, 0xaf02, 0x3089, 0xaf02, 0x30cd, 0xaf02,
+ 0x30ce, 0xaf02, 0x3096, 0xaf02, 0x308a, 0xe42e, 0xd049, 0x0000,
+ 0xd047, 0x0000, 0x2016, 0x4c17, 0xe0c2, 0x0071, 0xe0c2, 0x004f,
+ 0x2822, 0xa102, 0xb608, 0xae20, 0x4c21, 0xe0c2, 0x0072, 0x2897,
+ 0xe0c2, 0x0073, 0x2899, 0xe0c2, 0x0074, 0x2a19, 0xe017, 0x281c,
+ 0xae02, 0x4c18, 0xae02, 0xe056, 0xae10, 0x4c11, 0xae10, 0x4c10,
+ 0xe0c2, 0x007b, 0x281f, 0xae10, 0x4c20, 0xe0c2, 0x006c, 0xe41e,
+ 0x04f1, 0x2893, 0xe016, 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x0040,
+ 0xa221, 0xae17, 0xe042, 0xe005, 0x1f00, 0xae03, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x05f0, 0xd112, 0x0100, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0xa200, 0xcc4a, 0xcc4c, 0xd130, 0x0001,
+ 0xd03a, 0x0001, 0xd008, 0x0000, 0xd049, 0x0000, 0xd047, 0x0000,
+ 0xa200, 0xe0c2, 0x0168, 0xe0c0, 0x0050, 0xe049, 0xe008, 0x001f,
+ 0x3cb7, 0xaf11, 0xe009, 0x001f, 0x3eb8, 0x46b7, 0x3eb7, 0xe0c0,
+ 0x0050, 0xaf1c, 0xa802, 0xe005, 0x0ba6, 0xe09f, 0x3d17, 0xa200,
+ 0x2ab7, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2ab7, 0xa805, 0xf03b,
+ 0xe00a, 0x0009, 0x2ab7, 0xa809, 0xf03b, 0xe00a, 0x0020, 0x2ab7,
+ 0xa811, 0xf03b, 0xe00a, 0x0040, 0x2ab7, 0xa821, 0xf03b, 0xe00a,
+ 0x0010, 0xe005, 0x0ba6, 0xe09f, 0x2b17, 0xae05, 0xe056, 0xe0c2,
+ 0x0169, 0xa200, 0x3ca4, 0x3ca5, 0x3ca6, 0xe0c0, 0x0060, 0xe049,
+ 0xa81f, 0x3ea6, 0xaf08, 0x30a5, 0xaf02, 0x30a4, 0xe0c0, 0x0066,
+ 0x3cd4, 0xe0c0, 0x0065, 0xaf04, 0xa80e, 0x3cd5, 0xa200, 0x3cd6,
+ 0xe41e, 0x0308, 0xa200, 0x3cd7, 0x3cd8, 0x3cd9, 0x3cda, 0xe41e,
+ 0x19a2, 0x2833, 0x3c53, 0xa01e, 0xaf08, 0x3c55, 0x2834, 0x3c54,
+ 0xa01e, 0xaf08, 0x3c56, 0xe42e, 0xd049, 0x0000, 0xd047, 0x0000,
+ 0x20a0, 0x4ca1, 0xe0c2, 0x0070, 0x289c, 0xe000, 0x07ca, 0xe094,
+ 0x2902, 0x2ad6, 0xb7b2, 0xe0c2, 0x0071, 0x2895, 0xe0c2, 0x0072,
+ 0x2a4b, 0xa805, 0xe01b, 0x284c, 0xa804, 0xe01a, 0xe052, 0xe016,
+ 0xae0e, 0x4c50, 0xae02, 0x4c4f, 0xae02, 0x4c4e, 0xae04, 0x4c4a,
+ 0xae20, 0x4c4b, 0xae06, 0x2a4a, 0xf02b, 0x4c4c, 0xe0c2, 0x0073,
+ 0x2053, 0x4c54, 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0xa200, 0xe162,
+ 0x07ce, 0x2902, 0xa83e, 0xe162, 0x07e8, 0x2b02, 0xaf05, 0xa807,
+ 0xb616, 0x2a9c, 0xa103, 0xb612, 0xae06, 0x2a9c, 0xae05, 0xe001,
+ 0x07e4, 0xe095, 0x2b02, 0xaf07, 0xa80f, 0xe056, 0x2ad6, 0xb612,
+ 0xe0c2, 0x0074, 0xa200, 0x28d6, 0xae04, 0xe0c2, 0x0075, 0x2894,
+ 0xe016, 0xe0c2, 0x0076, 0xe162, 0x07c7, 0x2902, 0xb7e8, 0x2a94,
+ 0xb7d2, 0x2ad6, 0xb7d2, 0xe0c2, 0x0077, 0xc84a, 0xc84d, 0xae20,
+ 0xe056, 0xe0c2, 0x0053, 0xe41e, 0x030f, 0xe41e, 0x195d, 0xe42e,
+ 0xe0c0, 0x0054, 0xe165, 0x07c5, 0x3515, 0x3d0d, 0xe42e, 0xe165,
+ 0x07c5, 0x2115, 0x4d0d, 0xe0c2, 0x0054, 0xe42e, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xa206, 0xe41e, 0x0344, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0x283c, 0xa104, 0xf07a, 0xa226, 0xe41e,
+ 0x035a, 0xe41e, 0x0386, 0xe42e, 0xa236, 0xe41e, 0x0370, 0xe41e,
+ 0x03c4, 0xe42e, 0x283c, 0xa104, 0xf07a, 0xa224, 0xe41e, 0x035a,
+ 0xe41e, 0x03a5, 0xf06e, 0xa234, 0xe41e, 0x0370, 0xe41e, 0x03e4,
+ 0xa204, 0xe41e, 0x0344, 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005,
+ 0x0280, 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ed, 0x0113, 0xca28,
+ 0xf7f8, 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11,
+ 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0000, 0xd112, 0x0100, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e,
+ 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042, 0x22f0,
+ 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x00c0, 0xd112,
+ 0x0040, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe161, 0x07e0,
+ 0x8911, 0x0034, 0x8911, 0x0033, 0x8911, 0x0035, 0x8911, 0x0036,
+ 0x8911, 0x0037, 0x8911, 0x0038, 0x8911, 0x004b, 0x8911, 0x004c,
+ 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11, 0xcc62, 0x2111, 0x4d11,
+ 0xcc64, 0x2111, 0x4d11, 0xcc72, 0xe42e, 0xe161, 0x07e0, 0x8b11,
+ 0x0034, 0x8b11, 0x0033, 0x8b11, 0x0035, 0x8b11, 0x0036, 0x8b11,
+ 0x0037, 0x8b11, 0x0038, 0x8b11, 0x004b, 0x8b11, 0x004c, 0xc860,
+ 0x3511, 0x3d11, 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511, 0x3d11,
+ 0xc872, 0x3511, 0x3d11, 0xe42e, 0xe161, 0x07e0, 0x8911, 0x0145,
+ 0x8911, 0x0144, 0x8911, 0x0146, 0x8911, 0x0147, 0x8911, 0x0148,
+ 0x8911, 0x0152, 0x8911, 0x0153, 0x2111, 0x4d11, 0xce80, 0x2111,
+ 0x4d11, 0xce82, 0x2111, 0x4d11, 0xce84, 0x2111, 0x4d11, 0xce86,
+ 0x2111, 0x4d11, 0xcc72, 0xe42e, 0xe161, 0x07e0, 0x8b11, 0x0145,
+ 0x8b11, 0x0144, 0x8b11, 0x0146, 0x8b11, 0x0147, 0x8b11, 0x0148,
+ 0x8b11, 0x0152, 0x8b11, 0x0153, 0xca80, 0x3511, 0x3d11, 0xca82,
+ 0x3511, 0x3d11, 0xca84, 0x3511, 0x3d11, 0xca86, 0x3511, 0x3d11,
+ 0xc872, 0x3511, 0x3d11, 0xe42e, 0xe161, 0x0550, 0xe0c0, 0x0064,
+ 0x3511, 0x3d11, 0xe0c0, 0x0065, 0x3511, 0x3d11, 0xe0c0, 0x0066,
+ 0x3511, 0x3d11, 0xe0c0, 0x0067, 0x3511, 0x3d11, 0xe0c0, 0x0068,
+ 0x3511, 0x3d11, 0xe0c0, 0x0069, 0xe167, 0x0ba0, 0x3d17, 0x3517,
+ 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b, 0x3d17, 0x3517,
+ 0xe42e, 0xa200, 0x3cbf, 0x3cc8, 0x3cc9, 0x3cca, 0x3ccb, 0x3ccc,
+ 0x3c91, 0xcc92, 0xcc8e, 0xe42e, 0xd146, 0x00c0, 0xd147, 0x00ff,
+ 0xd144, 0x00c0, 0xd145, 0x0000, 0xd14b, 0x0200, 0xe004, 0x0180,
+ 0xce30, 0xca32, 0xca32, 0xce84, 0xca32, 0xce86, 0xd144, 0x00c1,
+ 0xe42e, 0xa200, 0xf02e, 0xa202, 0x3ce3, 0xa200, 0x3cc4, 0x3cc3,
+ 0x3cc1, 0x3ccc, 0xe41e, 0x06fb, 0xf05a, 0xa214, 0x3cc0, 0xa200,
+ 0xe42e, 0xcaa2, 0xaf10, 0xa102, 0xf07a, 0xcaa0, 0xe190, 0xca9c,
+ 0xe418, 0x04af, 0xf70e, 0x28e3, 0xf07a, 0xcaa2, 0x3c03, 0xa83e,
+ 0x3cc0, 0xa202, 0xe42e, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0xcaa0,
+ 0xe190, 0xcaa0, 0x3c03, 0xca9c, 0xe418, 0x04af, 0xe41e, 0x06fb,
+ 0xf05a, 0xa214, 0x3cc0, 0xa200, 0xe42e, 0x2803, 0xaf0e, 0xf5e8,
+ 0x2803, 0xa83e, 0x3cc0, 0xe41e, 0x0581, 0xe41e, 0x05bd, 0xa202,
+ 0xe42e, 0x28c1, 0xe428, 0xe004, 0x0080, 0x2ac5, 0xb616, 0xce92,
+ 0xd14a, 0x0000, 0xd14c, 0x0001, 0xca9c, 0xe418, 0x04c6, 0xf098,
+ 0xca9a, 0xf7b8, 0xca9c, 0xf798, 0xca94, 0x3cc2, 0xca9e, 0x3cc1,
+ 0x28c2, 0x00c4, 0x0cc3, 0x34c4, 0x3cc3, 0xcc90, 0xcc8c, 0x28c1,
+ 0xcc92, 0xcc8e, 0xe428, 0x28c5, 0xe016, 0x3cc5, 0xe42e, 0x28c8,
+ 0xf048, 0xe41e, 0x0623, 0xe42e, 0x28ca, 0xf0e8, 0xa202, 0x3cca,
+ 0xca90, 0xe002, 0x00c0, 0xa004, 0xa87e, 0xe000, 0x00c0, 0xce90,
+ 0xd14e, 0x0000, 0xe42e, 0xa202, 0x3ccb, 0xe42e, 0x28c8, 0xf058,
+ 0xe41e, 0x0623, 0xa200, 0xe42e, 0x28ca, 0xf0f8, 0xa202, 0x3cca,
+ 0xca90, 0xe002, 0x00c0, 0xa004, 0xa87e, 0xe000, 0x00c0, 0xce90,
+ 0xd14e, 0x0000, 0xa200, 0xe42e, 0x28cb, 0xe428, 0xca94, 0x3cc2,
+ 0xa202, 0x3cc1, 0x3ccb, 0xd148, 0x00c0, 0xd14e, 0x0000, 0xca9c,
+ 0xf03a, 0xd14e, 0x0000, 0xca9a, 0xf7b8, 0xca9c, 0xf798, 0xa202,
+ 0xe42e, 0xa201, 0x283c, 0xa104, 0xb635, 0xe0c0, 0x0048, 0xe002,
+ 0x0200, 0xf099, 0xe002, 0x0200, 0xe0c1, 0x0059, 0xa103, 0xf039,
+ 0xe000, 0x0200, 0xf0c9, 0xc867, 0xe009, 0x007f, 0xa107, 0xae05,
+ 0xe042, 0xc869, 0xaf07, 0xe015, 0xa807, 0xf0ae, 0xca89, 0xe003,
+ 0x00c0, 0xa105, 0xae07, 0xe042, 0xca8b, 0xe015, 0xa80f, 0xe042,
+ 0x2a3c, 0xa105, 0xf0eb, 0x22b9, 0x4eba, 0xe045, 0xf0a7, 0xe0c2,
+ 0x007d, 0x2abb, 0xae11, 0xe0c3, 0x007e, 0xe042, 0xe0c2, 0x007f,
+ 0xe0c2, 0x0046, 0xe42e, 0x28ce, 0xf05a, 0xe0c0, 0x0068, 0x34b9,
+ 0x3cba, 0xe0c0, 0x0067, 0x34cf, 0x3cd0, 0xa2fe, 0x3cbb, 0xf0ce,
+ 0xe0c0, 0x0060, 0x34b9, 0x3cba, 0xe0c0, 0x0061, 0xae14, 0x34cf,
+ 0x3cd0, 0xaf10, 0x3cbb, 0x28cd, 0xe418, 0x06fe, 0x28cd, 0xe418,
+ 0x0708, 0xa200, 0x3cbc, 0xe0c0, 0x0062, 0xaf0c, 0xa802, 0xf10a,
+ 0xe0c1, 0x0048, 0xe0c0, 0x0060, 0xe045, 0xaf13, 0xae03, 0xa109,
+ 0x3ebc, 0xf063, 0xe0c0, 0x0061, 0xae04, 0xe042, 0x3cbc, 0xa200,
+ 0x3cc8, 0x3cc9, 0x3cca, 0x3ccb, 0x3ccc, 0xcc92, 0xcc8e, 0xe41e,
+ 0x0662, 0x28de, 0xf02a, 0xe180, 0xe41e, 0x0581, 0xd071, 0x802a,
+ 0x28de, 0xe428, 0xe181, 0x283c, 0xa104, 0xf04a, 0xe41e, 0x05bd,
+ 0xf05e, 0xe41e, 0x0623, 0xe41e, 0x0434, 0x28cd, 0xe418, 0x0716,
+ 0xe42e, 0xd030, 0x0000, 0xd031, 0x0000, 0xd032, 0x0000, 0xd034,
+ 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037,
+ 0x0000, 0xd038, 0x0000, 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c,
+ 0x0000, 0xe42e, 0xca29, 0xf7f9, 0xc896, 0xf05a, 0xe41e, 0x05d2,
+ 0x3cc7, 0xf058, 0xd04b, 0x0001, 0xa200, 0x3cc7, 0x28c6, 0xcc6e,
+ 0xd04c, 0x0000, 0xe470, 0xa202, 0x3cc7, 0xe41e, 0x05d2, 0xcc96,
+ 0xe42a, 0x28c6, 0xcc6e, 0xe42e, 0xc896, 0xe428, 0xd04b, 0x0001,
+ 0x28c6, 0xcc6e, 0xd04c, 0x0000, 0xe42e, 0xa200, 0x3cc5, 0x3cc6,
+ 0xe41e, 0x05d2, 0x3cc7, 0xd04b, 0x0001, 0x28c6, 0xcc6e, 0xe190,
+ 0xe128, 0x28c6, 0xa104, 0xe420, 0xe41e, 0x06b0, 0xe42a, 0x28c6,
+ 0xcc6e, 0xe42e, 0xe41e, 0x06b0, 0xe428, 0x283c, 0xa104, 0xf04a,
+ 0xe41e, 0x05e7, 0xf03e, 0xe41e, 0x0489, 0xe41e, 0x06d1, 0xe428,
+ 0xe004, 0x0080, 0x2ac5, 0xb616, 0x3cc6, 0xa200, 0xe42e, 0xe082,
+ 0x3cbd, 0xe004, 0x0048, 0xe092, 0xd027, 0x0000, 0xe41e, 0x0670,
+ 0xd027, 0x0001, 0xca28, 0xf7f8, 0x28c8, 0x2ac9, 0xb602, 0xf248,
+ 0x20b9, 0x4cba, 0x2ebc, 0xae11, 0xe042, 0xce20, 0x9f01, 0xe004,
+ 0x0080, 0x2ac5, 0xb616, 0xce22, 0xd112, 0x0080, 0xe0c0, 0x0043,
+ 0xa806, 0xae02, 0xa022, 0xce26, 0xca28, 0xf7f8, 0x2cbc, 0xe000,
+ 0x0002, 0x3cbc, 0x1cbb, 0xf024, 0x3cbc, 0x20b9, 0x4cba, 0x2ebc,
+ 0xae11, 0xe042, 0x9f01, 0x28bd, 0xe092, 0x28c8, 0xe428, 0x28c5,
+ 0xe016, 0x3cc5, 0xe42e, 0xe082, 0x3cbd, 0xe004, 0x0048, 0xe092,
+ 0xd027, 0x0000, 0xe41e, 0x0670, 0xd027, 0x0001, 0xca28, 0xf7f8,
+ 0x28c8, 0x2ac9, 0xb602, 0xf2c8, 0x20b9, 0x4cba, 0x2ebc, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x00c0, 0xd112, 0x0040, 0xe0c0, 0x0043,
+ 0xa806, 0xae02, 0xa032, 0xce26, 0xca28, 0xf7f8, 0x2cbc, 0xe000,
+ 0x0002, 0x3cbc, 0x1cbb, 0xf024, 0x3cbc, 0x20b9, 0x4cba, 0x2ebc,
+ 0xae11, 0xe042, 0x9f01, 0xe004, 0x00c0, 0x2ac8, 0xf06b, 0x2ac9,
+ 0xa00f, 0xaf07, 0xa87f, 0xe042, 0xce90, 0xd14e, 0x0000, 0x28bd,
+ 0xe092, 0xe42e, 0xe082, 0x3cbd, 0x20b9, 0x4cba, 0x2ebc, 0xae11,
+ 0xe042, 0xe005, 0x0048, 0xe093, 0x9f01, 0x28bd, 0xe092, 0xe42e,
+ 0xe0c0, 0x0043, 0xa808, 0xe428, 0xa200, 0x3cbe, 0xe0c0, 0x0045,
+ 0xaf04, 0x4ccd, 0x30bf, 0x20b9, 0x4cba, 0x2ebc, 0xae11, 0xe041,
+ 0x8111, 0x9e09, 0xe046, 0xf042, 0x2ebb, 0xae11, 0xe042, 0xe002,
+ 0x0200, 0xe422, 0xe000, 0x0200, 0x3cc9, 0x28bf, 0x3cc8, 0xe428,
+ 0xe0c0, 0x0059, 0xa102, 0xf078, 0xe0c0, 0x0045, 0xa802, 0xf03a,
+ 0xe16b, 0xe42e, 0x28be, 0xf5b8, 0xe0c0, 0x005c, 0xe008, 0x4000,
+ 0xf56a, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0x3cbe, 0xf4ce, 0xc868, 0xa80e, 0x3c00, 0x7400, 0xe42e,
+ 0x283c, 0xa104, 0xf0aa, 0x28c8, 0xe42a, 0x28cc, 0xf0ca, 0xa102,
+ 0xf160, 0xa202, 0x3ccb, 0xf0de, 0x28c1, 0xe42a, 0x28cc, 0xf03a,
+ 0xa102, 0xf0d0, 0x28c6, 0xa004, 0x3cc6, 0xa202, 0x3ccc, 0xe42e,
+ 0x28c6, 0xa002, 0x3cc6, 0xa204, 0x3ccc, 0xe42e, 0xe16b, 0xa202,
+ 0xe42e, 0x283c, 0xa104, 0xf19a, 0x28c8, 0xe42a, 0x28c9, 0xf0ca,
+ 0xe004, 0x0080, 0x2ac5, 0xb616, 0x2ac9, 0xa007, 0xaf05, 0xe042,
+ 0x3cc6, 0xa202, 0xe42e, 0xe004, 0x0080, 0x2ac5, 0xb616, 0xa004,
+ 0x3cc6, 0xa202, 0x3ccc, 0xe42e, 0x28c1, 0xe42a, 0x28c2, 0xf74a,
+ 0xe004, 0x0080, 0x2ac5, 0xb616, 0x2ac2, 0xa007, 0xaf05, 0xe042,
+ 0x3cc6, 0xa202, 0xe42e, 0x28c8, 0x44cb, 0xe42e, 0xa200, 0xe0c0,
+ 0x0045, 0xaf04, 0x30bf, 0xe42a, 0xa200, 0x34cf, 0x3cd0, 0xe42e,
+ 0xe082, 0x3cbd, 0x20b9, 0x4cba, 0x22cf, 0x4ed0, 0xe042, 0xe005,
+ 0x0049, 0xe093, 0x9f01, 0x28bd, 0xe092, 0xe42e, 0xe0c1, 0x0059,
+ 0xa103, 0xf049, 0xe0c0, 0x0064, 0xf03e, 0xe0c0, 0x0069, 0xa80e,
+ 0x2a3c, 0xa105, 0xf05b, 0xa102, 0xe424, 0xba4f, 0xf7de, 0xa102,
+ 0xe424, 0xcaa1, 0xf7de, 0xe0c0, 0x0067, 0xe049, 0xa806, 0x3c3c,
+ 0xa809, 0xe41b, 0x09b3, 0xe41e, 0x0538, 0xa200, 0x3c90, 0x3c91,
+ 0x3c93, 0xe16a, 0x283c, 0xa104, 0xf0c8, 0xe41e, 0x09f1, 0xf1ca,
+ 0xe41e, 0x1057, 0xd1ff, 0x0000, 0xf17d, 0xe41e, 0x0760, 0xf06e,
+ 0xe41e, 0x0f73, 0xd1ff, 0x0000, 0xf0fd, 0x2816, 0xf0d6, 0xe002,
+ 0x0800, 0xf0a0, 0x2817, 0xf086, 0xe002, 0x0800, 0xf050, 0xa200,
+ 0x3c93, 0xa202, 0xe42e, 0xa202, 0x3c93, 0xe16a, 0xa200, 0xe42e,
+ 0xe41e, 0x044b, 0xe42a, 0xa200, 0x3c90, 0x28c0, 0xa118, 0xf0ca,
+ 0x28c0, 0xa11a, 0xf09a, 0x28c0, 0xa11c, 0xf08a, 0x28c0, 0xa11e,
+ 0xf0ba, 0xa200, 0xe42e, 0xa202, 0xe42e, 0xe41e, 0x0449, 0xe41e,
+ 0x10f2, 0xe40e, 0x0760, 0xe41e, 0x0449, 0xe41e, 0x1057, 0xf03d,
+ 0xe40e, 0x0760, 0xa202, 0x3c93, 0xa200, 0xe42e, 0xe41e, 0x0b58,
+ 0xf068, 0xe41e, 0x08d5, 0xe41e, 0x08da, 0xe42e, 0x2810, 0xa104,
+ 0xe408, 0x0795, 0xe40e, 0x07dd, 0xe42e, 0xa200, 0x3c94, 0x3c95,
+ 0xe162, 0x0570, 0xc73f, 0x3d12, 0xe16a, 0xe41e, 0x06fb, 0xf03a,
+ 0xa202, 0x3c91, 0xe41e, 0x09e6, 0xf0da, 0xa202, 0x3c91, 0x2891,
+ 0xf09a, 0xa208, 0x3c4b, 0x3c4c, 0xe41e, 0x08ca, 0xe41e, 0x08da,
+ 0xe42e, 0xe41e, 0x113d, 0xd1ff, 0x0001, 0xf06c, 0xa208, 0x3c4b,
+ 0x3c4c, 0xa202, 0x3c94, 0x28d5, 0xe418, 0x0ab5, 0xf078, 0xe41e,
+ 0x08ca, 0xe41e, 0x0935, 0xe41e, 0x08da, 0x2041, 0x4c42, 0xe005,
+ 0x0030, 0xae21, 0xe046, 0xe422, 0x2041, 0x4c42, 0xae06, 0xc873,
+ 0xe046, 0xe426, 0xe049, 0xa83f, 0xf05b, 0x3e00, 0xe046, 0x7600,
+ 0xe426, 0xba7f, 0xa140, 0xf7e0, 0xe42e, 0xa200, 0x3c90, 0x3c92,
+ 0xa200, 0x3c51, 0x3c52, 0x3c57, 0x2892, 0xe428, 0x2890, 0xf108,
+ 0x283c, 0xa104, 0xf058, 0xe41e, 0x0449, 0xf2ea, 0xf09e, 0xe41e,
+ 0x06fb, 0xf2a8, 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0x3cc0, 0xa200,
+ 0x3c90, 0x28c0, 0xa114, 0xf20a, 0x28c0, 0xa116, 0xf27a, 0x28c0,
+ 0xa118, 0xf26a, 0x28c0, 0xa11a, 0xf27a, 0x28c0, 0xa11c, 0xf28a,
+ 0x28c0, 0xa11e, 0xf2da, 0x28c0, 0xa136, 0xf37a, 0x28c0, 0xa138,
+ 0xf34a, 0x28c0, 0xa13a, 0xf31a, 0x28c0, 0xa13c, 0xf2ea, 0x28c0,
+ 0xa13e, 0xf2ba, 0xf4ae, 0xa202, 0x3c91, 0xa208, 0x3c4b, 0x3c4c,
+ 0xe41e, 0x08ca, 0xe41e, 0x08da, 0xe42e, 0xe40e, 0x07e4, 0xe41e,
+ 0x08a3, 0xe40e, 0x07e4, 0xe41e, 0x0848, 0xe40e, 0x07e4, 0xe41e,
+ 0x10f2, 0xe41e, 0x112e, 0xd1ff, 0x0000, 0xe40e, 0x07e4, 0xe41e,
+ 0x1057, 0xe41e, 0x10c5, 0xe41e, 0x0b55, 0xa200, 0x3c91, 0xd1ff,
+ 0x0000, 0xe42d, 0xe40e, 0x07e4, 0xe41e, 0x19bf, 0xe40e, 0x07e4,
+ 0xa200, 0x3c94, 0x3c95, 0xe162, 0x0570, 0xc73f, 0x3d12, 0xe16a,
+ 0xe41e, 0x1154, 0x28df, 0xf098, 0x2855, 0xae10, 0x2a54, 0xa01f,
+ 0xaf09, 0xe056, 0x3cdf, 0xf15e, 0x28df, 0xa002, 0xf0da, 0x2cdf,
+ 0xaf10, 0x1855, 0xf094, 0x28df, 0xe008, 0x00ff, 0x2a54, 0xa01f,
+ 0xaf09, 0xe046, 0xf062, 0xa2fe, 0x3cdf, 0xa202, 0x3c92, 0xe16b,
+ 0xd1ff, 0x0001, 0xf06c, 0xa208, 0x3c4b, 0x3c4c, 0xa202, 0x3c94,
+ 0x28d5, 0xe418, 0x0ab5, 0xf058, 0xe41e, 0x08ca, 0xe41e, 0x0935,
+ 0x284a, 0xa106, 0x2a4b, 0xa109, 0xb636, 0xf05a, 0xe41e, 0x08da,
+ 0xa202, 0x3c92, 0x2892, 0xe428, 0x2851, 0xa002, 0x3c51, 0xe41e,
+ 0x0a31, 0xe428, 0x28d6, 0xe428, 0xa202, 0x3c94, 0x284e, 0x3c52,
+ 0xa200, 0x3c57, 0xe41e, 0x0bb3, 0xe41e, 0x0935, 0xe41e, 0x08da,
+ 0xa202, 0x3c92, 0xe42e, 0x284a, 0xa106, 0xe428, 0x2851, 0xa102,
+ 0xe428, 0x28d6, 0xf118, 0xe41e, 0x116b, 0xd1ff, 0x0001, 0xf03c,
+ 0xa202, 0x3c94, 0x28d7, 0xe016, 0x3cd7, 0xe41e, 0x0bb3, 0xe41e,
+ 0x0935, 0xe41e, 0x08da, 0xa202, 0x3c92, 0xe42e, 0x28d6, 0xe428,
+ 0xe41e, 0x1177, 0xd1ff, 0x0001, 0xf03c, 0xa202, 0x3c94, 0xe41e,
+ 0x0935, 0xe42e, 0xe41e, 0x0b5d, 0xe41e, 0x0bb3, 0xe41e, 0x0dfa,
+ 0xe41e, 0x18b3, 0xe41e, 0x17e7, 0xe42e, 0xe41e, 0x0b75, 0xe41e,
+ 0x17e7, 0xe42e, 0xe41e, 0x186d, 0xe42e, 0xa200, 0x3c87, 0x3c88,
+ 0x3c86, 0x2886, 0xe0c2, 0x003f, 0xa200, 0xe0c2, 0x0113, 0xe0c2,
+ 0x030d, 0xa200, 0xe0c2, 0x0114, 0xe0c2, 0x0115, 0xe0c2, 0x0116,
+ 0xe0c2, 0x0130, 0x2888, 0x1857, 0x4c87, 0xe016, 0xe0c2, 0x0131,
+ 0xa200, 0xe0c2, 0x012a, 0xa23e, 0xe0c2, 0x030f, 0xa200, 0xe0c2,
+ 0x0309, 0xe004, 0x0055, 0xe0c2, 0x030c, 0xa200, 0xe0c2, 0x030a,
+ 0xe0c2, 0x030b, 0xe162, 0x03b0, 0xa200, 0xd022, 0x001f, 0xe184,
+ 0x0912, 0x9f12, 0xe190, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2,
+ 0x0110, 0x28a7, 0xe418, 0x1886, 0xe41e, 0x1b49, 0xd1ff, 0x0002,
+ 0x2886, 0xa002, 0x3c86, 0x2887, 0xa002, 0x3c87, 0x1855, 0xe404,
+ 0x08e1, 0xa200, 0x3c87, 0x2888, 0xa002, 0x3c88, 0x1856, 0xe404,
+ 0x08e1, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xe166, 0x07c7, 0x2906,
+ 0xe424, 0xe41e, 0x151f, 0xe41e, 0x1638, 0x2894, 0xf038, 0xe16a,
+ 0xf02e, 0xe16b, 0x284b, 0xa108, 0xe40a, 0x08dd, 0xe42a, 0xa2fe,
+ 0xcf08, 0xd18c, 0x0001, 0xcb18, 0xf7f8, 0xa200, 0x3c87, 0x3c88,
+ 0x3c86, 0x2886, 0xe0c2, 0x003f, 0xe41e, 0x1ab9, 0xe41e, 0x1ad3,
+ 0xe41e, 0x1b31, 0x28a7, 0xe418, 0x1886, 0xe41e, 0x1b49, 0xd1ff,
+ 0x0002, 0x2886, 0xa002, 0x3c86, 0x2887, 0xa002, 0x3c87, 0x1855,
+ 0xf694, 0xa200, 0x3c87, 0x2888, 0xa002, 0x3c88, 0x1856, 0xf322,
+ 0xa202, 0x2a3e, 0xe419, 0x11a6, 0xe40a, 0x099e, 0x2810, 0xa104,
+ 0xf598, 0xc894, 0x4c6b, 0xf568, 0x2894, 0xf218, 0xe41e, 0x0a73,
+ 0xf1ea, 0xe41e, 0x1177, 0xd1ff, 0x0001, 0xf19d, 0x2888, 0x1857,
+ 0xf168, 0x2856, 0x1857, 0xf136, 0xe41e, 0x151f, 0xe41e, 0x1638,
+ 0xa200, 0x3c87, 0x2857, 0x3c88, 0x8488, 0x8255, 0xe018, 0x3c86,
+ 0x28d7, 0xe016, 0x3cd7, 0xe16a, 0xe40e, 0x0951, 0xe16b, 0xe40e,
+ 0x0951, 0x2856, 0xcf08, 0xd18c, 0x0001, 0xcb18, 0xf7f8, 0xe0c0,
+ 0x0111, 0xf7e8, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xf04a, 0xe0c0,
+ 0x0281, 0xf7ea, 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033,
+ 0x0000, 0xd035, 0x0000, 0xd036, 0x007f, 0xd037, 0x0000, 0xd038,
+ 0x0000, 0xe181, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0xce20, 0xd111,
+ 0x0000, 0xd112, 0x0020, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022,
+ 0xce26, 0xca28, 0xf7f8, 0xe128, 0x28cd, 0xf08a, 0xe0c0, 0x0064,
+ 0xa80e, 0xa102, 0xf034, 0xba4f, 0xf7de, 0xba3f, 0xe009, 0x0085,
+ 0xe003, 0x0085, 0xa204, 0xb636, 0x3c3c, 0xe42e, 0x203a, 0x4c3b,
+ 0xf074, 0x229e, 0x4e9f, 0xe046, 0xf030, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0x2890, 0xf108, 0x283c, 0xa104, 0xf058, 0xe41e, 0x0449,
+ 0xf2ca, 0xf09e, 0xe41e, 0x06fb, 0xf288, 0xba4e, 0xba4e, 0xba4e,
+ 0xba4e, 0x3cc0, 0x28c0, 0xa114, 0xf20a, 0x28c0, 0xa116, 0xf25a,
+ 0x28c0, 0xa118, 0xf22a, 0x28c0, 0xa11a, 0xf1fa, 0x28c0, 0xa11c,
+ 0xf1ca, 0x28c0, 0xa11e, 0xf15a, 0x28c0, 0xa136, 0xf16a, 0x28c0,
+ 0xa138, 0xf13a, 0x28c0, 0xa13a, 0xf10a, 0x28c0, 0xa13c, 0xf0da,
+ 0x28c0, 0xa13e, 0xf0aa, 0xf4ee, 0xa202, 0x3c90, 0xa200, 0xe42e,
+ 0xa202, 0x3c90, 0xa202, 0xe42e, 0xa200, 0x3c90, 0xe40e, 0x09f1,
+ 0xe42e, 0x2890, 0xf108, 0x283c, 0xa104, 0xf058, 0xe41e, 0x0449,
+ 0xf2ca, 0xf09e, 0xe41e, 0x06fb, 0xf288, 0xba4e, 0xba4e, 0xba4e,
+ 0xba4e, 0x3cc0, 0x28c0, 0xa114, 0xf20a, 0x28c0, 0xa116, 0xf1da,
+ 0x28c0, 0xa118, 0xf1ea, 0x28c0, 0xa11a, 0xf17a, 0x28c0, 0xa11c,
+ 0xf14a, 0x28c0, 0xa11e, 0xf11a, 0x28c0, 0xa136, 0xf16a, 0x28c0,
+ 0xa138, 0xf13a, 0x28c0, 0xa13a, 0xf10a, 0x28c0, 0xa13c, 0xf0da,
+ 0x28c0, 0xa13e, 0xf0aa, 0xf4ee, 0xa202, 0x3c90, 0xa200, 0xe42e,
+ 0xa202, 0x3c90, 0xa202, 0xe42e, 0xe41e, 0x19bf, 0xa200, 0x3c90,
+ 0xe40e, 0x0a31, 0xe42e, 0x2890, 0xf108, 0x283c, 0xa104, 0xf058,
+ 0xe41e, 0x0449, 0xf2ca, 0xf09e, 0xe41e, 0x06fb, 0xf288, 0xba4e,
+ 0xba4e, 0xba4e, 0xba4e, 0x3cc0, 0x28c0, 0xa114, 0xf20a, 0x28c0,
+ 0xa116, 0xf21a, 0x28c0, 0xa118, 0xf1aa, 0x28c0, 0xa11a, 0xf17a,
+ 0x28c0, 0xa11c, 0xf14a, 0x28c0, 0xa11e, 0xf11a, 0x28c0, 0xa136,
+ 0xf16a, 0x28c0, 0xa138, 0xf13a, 0x28c0, 0xa13a, 0xf10a, 0x28c0,
+ 0xa13c, 0xf0da, 0x28c0, 0xa13e, 0xf0aa, 0xf4ee, 0xa202, 0x3c90,
+ 0xa200, 0xe42e, 0xa200, 0x3c90, 0xa202, 0xe42e, 0xe41e, 0x19bf,
+ 0xa200, 0x3c90, 0xe40e, 0x0a73, 0xe42e, 0x28cd, 0xf17a, 0x28d5,
+ 0xf3ea, 0xa102, 0xf06a, 0xa102, 0xf08a, 0xa104, 0xf0aa, 0xf33e,
+ 0x284b, 0x4c4c, 0xf308, 0xf33e, 0x284b, 0x4c4c, 0xf30a, 0xf2be,
+ 0x284b, 0x4c4c, 0xa804, 0xf2b8, 0xf26e, 0x28d5, 0xf28a, 0xa102,
+ 0xf06a, 0xa102, 0xf0ca, 0xa104, 0xf12a, 0xf1de, 0x284b, 0x4c4c,
+ 0xf168, 0x28d4, 0xf1c6, 0xa102, 0x3cd4, 0xf11e, 0x284b, 0x4c4c,
+ 0xf16a, 0x28d4, 0xa102, 0x3cd4, 0xf0e6, 0xf09e, 0x284b, 0x4c4c,
+ 0xa804, 0xf0d8, 0x28d4, 0xa102, 0x3cd4, 0xf056, 0xa204, 0x3cd6,
+ 0xa202, 0xe42e, 0xa202, 0x3cd6, 0xa202, 0xe42e, 0xa200, 0x3cd6,
+ 0xa200, 0xe42e, 0xa202, 0x3c8d, 0xa202, 0x3c8e, 0x283f, 0x2a10,
+ 0xa105, 0xb636, 0x3c8b, 0xa200, 0x3c8c, 0x2840, 0xb630, 0x2a10,
+ 0xa105, 0xb636, 0x3c8f, 0xa204, 0x2a8f, 0xb452, 0xa004, 0x3c97,
+ 0xa104, 0xf030, 0xa206, 0x3c97, 0xa200, 0x2a8f, 0xb432, 0xa002,
+ 0x2a89, 0xb616, 0x3c99, 0x288d, 0x4c8e, 0xb630, 0x3c9a, 0xa200,
+ 0x289a, 0x2a89, 0xb612, 0x3c9a, 0x288f, 0x3c9b, 0x2a89, 0xb616,
+ 0x3c9b, 0xa200, 0x3c9c, 0xa002, 0x2a89, 0xb616, 0x3c9c, 0xa202,
+ 0x3c9d, 0xa200, 0x3c9e, 0x3ca0, 0xe42e, 0xe165, 0x06e0, 0xa200,
+ 0xd022, 0x001f, 0xe184, 0x0b3d, 0x3d15, 0xa002, 0xe165, 0x07c3,
+ 0xa200, 0x3515, 0x3d15, 0x3515, 0x3d15, 0xe165, 0x07c7, 0xa2fa,
+ 0xc708, 0x3d15, 0x2816, 0xa01e, 0xaf08, 0xae08, 0x3ca2, 0x2817,
+ 0xa01e, 0xaf08, 0xae08, 0x3ca3, 0xe42e, 0xa202, 0x3c9d, 0xe42e,
+ 0xe41e, 0x0dcd, 0xb60c, 0xb620, 0xe42e, 0xe41e, 0x0c3c, 0xe41e,
+ 0x0c73, 0xe41e, 0x0cf7, 0xe41e, 0x0d20, 0xe41e, 0x0d2a, 0xa200,
+ 0x3c9d, 0x209e, 0x4c9f, 0x2a91, 0xb436, 0x349e, 0x3c9f, 0x20a0,
+ 0x4ca1, 0xa002, 0x34a0, 0x3ca1, 0xe42e, 0xa2fa, 0xe162, 0x07c7,
+ 0x3d02, 0xe162, 0x07db, 0xe163, 0x07eb, 0xe164, 0x07ef, 0xd022,
+ 0x0003, 0xe184, 0x0b84, 0x290b, 0x3d0c, 0xd022, 0x0003, 0xe184,
+ 0x0b8a, 0x290b, 0x3d0c, 0xd022, 0x0003, 0xe184, 0x0b90, 0x290a,
+ 0x3d0c, 0xe162, 0x07c7, 0xe163, 0x07cb, 0xe164, 0x07cc, 0x290b,
+ 0x3d0c, 0x290b, 0x3d0c, 0x290a, 0x3d0c, 0xe162, 0x07e8, 0x28a4,
+ 0x4ca5, 0xae02, 0x4d02, 0x3d12, 0x28a4, 0xae02, 0x4ca5, 0xae08,
+ 0x4ca6, 0xae14, 0x4d02, 0x3d02, 0xe41e, 0x0d20, 0xe41e, 0x0d2a,
+ 0xa200, 0x3c9d, 0xe42e, 0xe004, 0x004b, 0x0851, 0xe094, 0x2902,
+ 0xa80c, 0xe428, 0x2851, 0xe408, 0x0bff, 0x2852, 0xae02, 0xe000,
+ 0x07d5, 0xe094, 0xa10a, 0xe096, 0x2902, 0x3d03, 0x2852, 0xe016,
+ 0xae02, 0xe000, 0x07d5, 0xe094, 0xa10a, 0xe096, 0x2902, 0x3d03,
+ 0xa206, 0x2a52, 0xb616, 0x2a4a, 0xa107, 0xb612, 0xe000, 0x0067,
+ 0xe094, 0x2852, 0xae02, 0xe000, 0x07d1, 0xe096, 0x290a, 0xae0c,
+ 0x4d0a, 0xae02, 0x4d0a, 0x3d03, 0xa206, 0x2a52, 0xb612, 0x2a4a,
+ 0xa107, 0xb612, 0xe000, 0x0067, 0xe094, 0x2852, 0xe016, 0xae02,
+ 0xe000, 0x07d1, 0xe096, 0x290a, 0xae0c, 0x4d0a, 0xae02, 0x4d0a,
+ 0x3d03, 0xe162, 0x07d4, 0xa200, 0xc703, 0x3d12, 0xe42e, 0x2852,
+ 0xae02, 0xe000, 0x07d1, 0xe094, 0xa102, 0xe096, 0x2902, 0x3d03,
+ 0x2852, 0xe016, 0xae02, 0xe000, 0x07d5, 0xe094, 0xa102, 0xe096,
+ 0x2902, 0x3d03, 0xa206, 0x2a52, 0xb616, 0x2a4a, 0xa107, 0xb612,
+ 0xe000, 0x0067, 0xe094, 0x2852, 0xae02, 0xe000, 0x07d1, 0xe096,
+ 0x290a, 0xae0c, 0x4d0a, 0xae02, 0x4d0a, 0x3d03, 0xa206, 0x2a52,
+ 0xb612, 0x2a4a, 0xa107, 0xb612, 0xe000, 0x0067, 0xe094, 0x2852,
+ 0xe016, 0xae02, 0xe000, 0x07d5, 0xe096, 0x290a, 0xae0c, 0x4d0a,
+ 0xae02, 0x4d0a, 0x3d03, 0xe42e, 0xe162, 0x07d8, 0x2836, 0xae02,
+ 0x4c38, 0xae06, 0x4c37, 0xae06, 0x4c39, 0xae02, 0x4c5c, 0xae02,
+ 0x4c8c, 0xae04, 0x4c5b, 0xae02, 0xe0c1, 0x0065, 0xaf19, 0xa803,
+ 0xf069, 0x2a36, 0x4e38, 0x4e5c, 0x468b, 0xb432, 0xae02, 0x2a5b,
+ 0xb633, 0x468c, 0xb432, 0xae02, 0xa900, 0xae02, 0xa900, 0x3d12,
+ 0xa200, 0xae02, 0xa900, 0xae08, 0xa900, 0xae04, 0x4c10, 0xae04,
+ 0x4c4a, 0xae06, 0x4c4b, 0xae06, 0x4c4c, 0x3d12, 0x2853, 0x3d12,
+ 0x2854, 0x3d12, 0xe42e, 0x284b, 0xa804, 0xe408, 0x0ccd, 0xe162,
+ 0x07c7, 0xe163, 0x07c8, 0xa203, 0x2913, 0xe419, 0x0d8a, 0x2903,
+ 0x2a91, 0xb7f2, 0xe41b, 0x0d35, 0x3d02, 0xe162, 0x07d8, 0xe163,
+ 0x07dc, 0xe164, 0x07e0, 0xd022, 0x0003, 0xe184, 0x0c90, 0x2914,
+ 0x3d13, 0xd022, 0x0003, 0xe184, 0x0c96, 0x2912, 0x3d13, 0xe162,
+ 0x07c7, 0xe163, 0x07c8, 0xe164, 0x07c9, 0x2914, 0x3d13, 0x2912,
+ 0x3d13, 0x289b, 0xe016, 0xae04, 0xe000, 0x07df, 0xe094, 0xe163,
+ 0x07eb, 0xe164, 0x07ef, 0xd022, 0x0003, 0xe184, 0x0cb0, 0x290b,
+ 0x3d0c, 0xd022, 0x0003, 0xe184, 0x0cb6, 0x290b, 0x3d0c, 0xd022,
+ 0x0003, 0xe184, 0x0cbc, 0x290a, 0x3d0c, 0x289b, 0xe016, 0xe000,
+ 0x07c8, 0xe094, 0xe163, 0x07cb, 0xe164, 0x07cc, 0x290b, 0x3d0c,
+ 0x290b, 0x3d0c, 0x290a, 0x3d0c, 0xe42e, 0xe41e, 0x0d57, 0xe162,
+ 0x07c7, 0x3d02, 0xe162, 0x07db, 0xe163, 0x07eb, 0xe164, 0x07ef,
+ 0xd022, 0x0003, 0xe184, 0x0cdd, 0x290b, 0x3d0c, 0xd022, 0x0003,
+ 0xe184, 0x0ce3, 0x290b, 0x3d0c, 0xd022, 0x0003, 0xe184, 0x0ce9,
+ 0x290a, 0x3d0c, 0xe162, 0x07c7, 0xe163, 0x07cb, 0xe164, 0x07cc,
+ 0x290b, 0x3d0c, 0x290b, 0x3d0c, 0x290a, 0x3d0c, 0xe42e, 0xe162,
+ 0x07e8, 0x28a4, 0x4ca5, 0xae02, 0x4d02, 0x3d12, 0x28a4, 0xae02,
+ 0x4ca5, 0xae08, 0x4ca6, 0xae14, 0x4d02, 0x3d02, 0x289c, 0xe42a,
+ 0xe163, 0x07cb, 0x2903, 0xe424, 0xe162, 0x07e8, 0x2902, 0xa81c,
+ 0xe42a, 0xe162, 0x07ce, 0xe163, 0x07cb, 0x2903, 0x3d02, 0xe41e,
+ 0x0d57, 0x3d0b, 0x2902, 0x2b02, 0x1b03, 0xe419, 0x0d9c, 0xe42e,
+ 0x289c, 0xa002, 0xe000, 0x07ca, 0xe094, 0x2902, 0xe424, 0xe41e,
+ 0x0dae, 0xe42e, 0xe162, 0x07ca, 0x2912, 0xe412, 0x0d79, 0x289c,
+ 0xe426, 0x2912, 0xe412, 0x0d79, 0xe42e, 0xe165, 0x07c3, 0x2115,
+ 0x4d15, 0x2315, 0x4f15, 0xe056, 0xe165, 0x06e0, 0x2a98, 0xf0b7,
+ 0xa103, 0xcc45, 0xe184, 0x0d49, 0x2b15, 0x3e01, 0xe049, 0x5e01,
+ 0xa803, 0xf03b, 0xa2fa, 0xe42e, 0xe165, 0x07c3, 0x2115, 0x4d0d,
+ 0xa203, 0x5a01, 0xe056, 0x3515, 0x3d0d, 0x2801, 0xe42e, 0xe165,
+ 0x07c3, 0x2115, 0x4d15, 0x2315, 0x4f15, 0xe056, 0xe165, 0x06e0,
+ 0x2a98, 0xf0b7, 0xa103, 0xcc45, 0xe184, 0x0d6b, 0x2b15, 0x3e01,
+ 0xe049, 0x5e01, 0xa803, 0xf03b, 0xa2fa, 0xe42e, 0xe165, 0x07c5,
+ 0x2115, 0x4d0d, 0xa203, 0x5a01, 0xe056, 0x3515, 0x3d0d, 0x2801,
+ 0xe42e, 0xe424, 0x3c01, 0x2898, 0xa102, 0x1801, 0xe424, 0xe165,
+ 0x07c5, 0x2115, 0x4d0d, 0xa203, 0x5a01, 0xe056, 0x3515, 0x3d0d,
+ 0x2801, 0xe42e, 0xe424, 0x3c01, 0x2898, 0xa102, 0x1801, 0xe424,
+ 0xe165, 0x07c3, 0x2115, 0x4d0d, 0xa203, 0x5a01, 0xe015, 0xe052,
+ 0x3515, 0x3d0d, 0x2801, 0xe42e, 0xe424, 0x3c01, 0x2898, 0xa102,
+ 0x1801, 0xe424, 0xe165, 0x07c5, 0x2115, 0x4d0d, 0xa203, 0x5a01,
+ 0xe015, 0xe052, 0x3515, 0x3d0d, 0x2801, 0xe42e, 0xe424, 0x3c01,
+ 0x2898, 0xa102, 0x1801, 0xe424, 0xe165, 0x06e0, 0x2a98, 0xf087,
+ 0xa103, 0xcc45, 0xe184, 0x0dbe, 0x2b15, 0x1a01, 0xf03b, 0xa2fa,
+ 0xe42e, 0xc845, 0xf067, 0xe184, 0x0dc7, 0x290d, 0x3d15, 0x8115,
+ 0x2801, 0x810d, 0x3d15, 0x2801, 0xe42e, 0xa200, 0x3c02, 0xe165,
+ 0x07c3, 0x2115, 0x4d15, 0x2315, 0x4f15, 0xe056, 0xe165, 0x06e0,
+ 0x2a98, 0xf0f7, 0xa103, 0xcc45, 0xe184, 0x0de7, 0x2b15, 0x3e01,
+ 0xe049, 0x5e01, 0xa803, 0xf049, 0x2a02, 0xa003, 0x3e02, 0xe190,
+ 0x2802, 0xe42e, 0xe165, 0x0505, 0xa2fa, 0x3d15, 0x3d15, 0x3d15,
+ 0xe165, 0x0500, 0xa200, 0xd022, 0x0002, 0xe184, 0x0df8, 0x3d15,
+ 0xa002, 0xe42e, 0xa200, 0x3cb1, 0x3cb2, 0xe162, 0x0500, 0xe163,
+ 0x0501, 0xe164, 0x0502, 0xe165, 0x0504, 0xe166, 0x0503, 0xe167,
+ 0x0505, 0x284b, 0xa808, 0xf2c8, 0x284b, 0xa804, 0xf188, 0x2904,
+ 0x2b02, 0x3d02, 0x2903, 0x3f03, 0x3d04, 0x2902, 0xa806, 0x2a4a,
+ 0xae11, 0xe056, 0x3d02, 0x289b, 0xe000, 0x0500, 0xe098, 0x2906,
+ 0x3d05, 0x2904, 0x3d06, 0x2902, 0x3d07, 0xe42e, 0x2904, 0x2b03,
+ 0x3d03, 0x3f04, 0x2903, 0xa806, 0x2a4a, 0xae11, 0xe056, 0x3d03,
+ 0x2906, 0x3d05, 0x2903, 0x3d06, 0x2903, 0x3d07, 0xe42e, 0x2906,
+ 0x3d05, 0x2902, 0x3d06, 0x2902, 0x3d07, 0xe42e, 0xe162, 0x0505,
+ 0x2b02, 0xaf11, 0xa807, 0xa107, 0xe40b, 0x0e87, 0x2eb1, 0xaf03,
+ 0xa8ff, 0xe001, 0x0380, 0xe095, 0x2eb1, 0xa803, 0xa83e, 0xf03b,
+ 0xae10, 0x4d02, 0x3d02, 0x2cb1, 0xa002, 0x3cb1, 0xe008, 0x00ff,
+ 0xf09a, 0x2887, 0x1855, 0xa002, 0xe424, 0x2888, 0x1856, 0xa002,
+ 0xe424, 0xe162, 0x0505, 0x2b02, 0xa807, 0xa103, 0xa200, 0xb4a6,
+ 0xb4a2, 0xae16, 0x2eb1, 0xaf03, 0xa103, 0xb60b, 0xaf0f, 0xae11,
+ 0xe042, 0xe005, 0x029c, 0xae11, 0xe042, 0xe0c1, 0x0041, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0380,
+ 0xd112, 0x0080, 0xd113, 0x0002, 0xca29, 0xf7f9, 0xe42e, 0x2a87,
+ 0xaf03, 0xe001, 0x0380, 0xe095, 0x2a87, 0xa803, 0xa83e, 0xf03b,
+ 0xae10, 0x4d02, 0x3d02, 0x2887, 0x1855, 0xa002, 0xe424, 0x2855,
+ 0xa00e, 0xaf06, 0xae04, 0x3cae, 0x84ae, 0x8288, 0xe018, 0xae02,
+ 0x3cb0, 0xe162, 0x0505, 0x2b02, 0xa807, 0xa103, 0xa200, 0xb4a6,
+ 0xb4a2, 0xae02, 0x2a51, 0xb4b2, 0xae14, 0x08b0, 0xe005, 0x029c,
+ 0xae11, 0xe042, 0xe0c1, 0x0041, 0xe042, 0x22f0, 0x4ef1, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0380, 0x28ae, 0xce24, 0xd113,
+ 0x0002, 0xca29, 0xf7f9, 0xe42e, 0xe162, 0x0504, 0x2b02, 0xaf11,
+ 0xa807, 0xa107, 0xe40b, 0x0eff, 0x2cb2, 0xe008, 0x00ff, 0xf208,
+ 0xe162, 0x0504, 0x2b02, 0xa807, 0xa103, 0xa200, 0xb4a6, 0xb4a2,
+ 0xae16, 0x0cb2, 0xe005, 0x029c, 0xae11, 0xe042, 0xe0c1, 0x0041,
+ 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0400, 0xd112, 0x0080, 0xd113, 0x0003, 0xca29, 0xf7f9, 0x2cb2,
+ 0xaf02, 0xa8fe, 0xe000, 0x0400, 0xe094, 0x2902, 0x2eb2, 0xa803,
+ 0xf02b, 0xaf10, 0xa83e, 0x2eb2, 0xa003, 0x3eb2, 0xe42e, 0x28aa,
+ 0xe408, 0x0f67, 0x28ab, 0xa802, 0xe408, 0x0f67, 0x28a8, 0xa00e,
+ 0xaf06, 0xae04, 0x3cae, 0x28ab, 0xaf02, 0x3caf, 0x84ae, 0x82af,
+ 0xe018, 0xae02, 0x3cb0, 0xe162, 0x0504, 0x2b02, 0xa807, 0xa103,
+ 0xa200, 0xb4a6, 0xb4a2, 0xae16, 0x08b0, 0xe005, 0x029c, 0xae11,
+ 0xe042, 0xe0c1, 0x0041, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0400, 0x28ae, 0xce24, 0xd113, 0x0003,
+ 0xca29, 0xf7f9, 0xe162, 0x0504, 0x2b02, 0xa807, 0xa103, 0xa200,
+ 0xb4a6, 0xb4a2, 0xae02, 0xa00a, 0xae14, 0x08b0, 0xe005, 0x029c,
+ 0xae11, 0xe042, 0xe0c1, 0x0041, 0xe042, 0x22f0, 0x4ef1, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0480, 0x28ae, 0xce24, 0xd113,
+ 0x0003, 0xca29, 0xf7f9, 0xe164, 0x0400, 0xe165, 0x0480, 0x28ae,
+ 0xf0f6, 0xa102, 0xcc44, 0xe184, 0x0f66, 0x2904, 0x0915, 0xaf02,
+ 0xe049, 0xaf10, 0xa83e, 0xae10, 0xa83f, 0xe056, 0x3d14, 0x28aa,
+ 0xaf02, 0xe000, 0x0400, 0xe094, 0x2902, 0x2aaa, 0xa803, 0xf02b,
+ 0xaf10, 0xa83e, 0xe42e, 0xe41e, 0x06ab, 0xba4e, 0xba4f, 0xae11,
+ 0xe056, 0xba4f, 0xae21, 0xe056, 0xb7f4, 0xe005, 0x00ff, 0xae21,
+ 0xe00b, 0xffff, 0xe045, 0xb7f6, 0x343a, 0x3c3b, 0xba4e, 0x3c3c,
+ 0xe008, 0x0085, 0xe002, 0x0085, 0xe408, 0x1039, 0xba4e, 0xba4f,
+ 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe055,
+ 0xa109, 0xe405, 0x1039, 0xba42, 0x3c10, 0xba40, 0x3c48, 0xba40,
+ 0x3c49, 0xba44, 0x3c13, 0xba48, 0x3c14, 0xba40, 0x3c2c, 0xba40,
+ 0x3c43, 0xba40, 0x3c3d, 0xba40, 0x3c44, 0xba40, 0x3c2d, 0xba40,
+ 0x3c2e, 0xba42, 0x3c2f, 0xba40, 0x3c30, 0xba40, 0x3c45, 0xba40,
+ 0x3c31, 0xba40, 0x3c3e, 0xba40, 0x3c3f, 0xba44, 0x3c40, 0xba42,
+ 0x3c32, 0xba40, 0x3c1b, 0xba40, 0x3c46, 0x2813, 0xae04, 0xa004,
+ 0x3c21, 0xa202, 0x3c22, 0x2848, 0xe408, 0x1039, 0x2849, 0xe408,
+ 0x1039, 0x2810, 0xa104, 0xe40a, 0x1039, 0x2844, 0xe40a, 0x1039,
+ 0x2843, 0xe408, 0x1039, 0x2810, 0xa104, 0xb7f4, 0xa004, 0x3c10,
+ 0xf047, 0xba4e, 0xa103, 0xf7e1, 0xba4e, 0xba4f, 0xae11, 0xe056,
+ 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056, 0x3c17, 0x3c34,
+ 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f,
+ 0xae31, 0xe056, 0x3c16, 0x3c33, 0xa200, 0x2a3c, 0xe003, 0x00c5,
+ 0xb636, 0x3c3c, 0xa100, 0xe40a, 0x103a, 0xba4e, 0xba4f, 0xae11,
+ 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056, 0xe049,
+ 0xa118, 0xf06a, 0xf287, 0xba4e, 0xa103, 0xf7e1, 0xf24e, 0xba44,
+ 0x3c11, 0xba40, 0xba46, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f,
+ 0xae21, 0xe056, 0xe161, 0x0658, 0x3511, 0x3d11, 0xba4e, 0xba4f,
+ 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056,
+ 0xe161, 0x0618, 0x3511, 0x3d11, 0xba4e, 0xba4e, 0xba4e, 0xba4e,
+ 0xf02e, 0xe16b, 0xe42e, 0xe161, 0x0618, 0xe162, 0x0658, 0xba48,
+ 0x3c27, 0xf156, 0xa102, 0xcc44, 0xba46, 0xa00c, 0x3c00, 0xba46,
+ 0xa008, 0x3c01, 0xe184, 0x1055, 0xba5e, 0xa002, 0x5800, 0x3511,
+ 0x3d11, 0xba5e, 0xa002, 0x5801, 0x3512, 0x3d12, 0xe42e, 0xba42,
+ 0xa102, 0x3c10, 0xba44, 0x3c11, 0xba42, 0x3c12, 0xba44, 0x3c13,
+ 0xba48, 0x3c14, 0xba40, 0x3c15, 0xba56, 0xa002, 0xae02, 0x3c16,
+ 0x3c53, 0xba56, 0xa002, 0xae02, 0x3c17, 0x3c54, 0xba40, 0x3c18,
+ 0xba40, 0x3c19, 0xba40, 0x3c1a, 0xba40, 0x3c1b, 0xba40, 0xba40,
+ 0x3c1c, 0xa200, 0x3c43, 0x3c45, 0xa202, 0x3c44, 0x3c46, 0xa200,
+ 0x3c21, 0x3c22, 0xba40, 0xe40a, 0x10c0, 0xba5a, 0xa002, 0x3c1d,
+ 0xba5a, 0xa002, 0x3c1e, 0xba40, 0xf15a, 0xba46, 0xe049, 0xa11f,
+ 0xf069, 0xba4e, 0x3c1f, 0xba4e, 0x3c20, 0xf0ce, 0xe049, 0xe000,
+ 0x05f0, 0xe098, 0xe001, 0x0600, 0xe09b, 0x2904, 0x3c1f, 0x2905,
+ 0x3c20, 0xba40, 0xf16a, 0xba40, 0xf0f8, 0xba4e, 0xa80e, 0xe000,
+ 0x0610, 0xe098, 0x2904, 0x3c21, 0xe004, 0x03e8, 0xba47, 0xa103,
+ 0xb422, 0x3c22, 0xf06e, 0xba5e, 0xa002, 0x3c21, 0xa240, 0x3c22,
+ 0xba40, 0xf07a, 0xba4e, 0x3c23, 0xba4e, 0x3c24, 0xba4e, 0x3c25,
+ 0xba40, 0x3c26, 0xe418, 0x103b, 0xe42e, 0x2810, 0xf0c4, 0xa104,
+ 0xf0a0, 0x2816, 0xf086, 0x18a2, 0xf060, 0x2817, 0xf046, 0x18a3,
+ 0xf020, 0xf08e, 0xa204, 0x3c10, 0x28a2, 0x3c16, 0x28a3, 0x3c17,
+ 0xe16b, 0xe42e, 0xe161, 0x0658, 0xe162, 0x0698, 0x2827, 0xf126,
+ 0xa102, 0xcc44, 0xe184, 0x10f0, 0xba4e, 0xa002, 0x3c00, 0x8400,
+ 0x8311, 0xe018, 0xae20, 0x8400, 0x8311, 0xe019, 0xe042, 0xaf10,
+ 0x3d12, 0xe42e, 0xba40, 0x3c28, 0xba40, 0x3c29, 0xba40, 0x3c2a,
+ 0xba40, 0x3c2b, 0xba40, 0x3c2c, 0xba40, 0x3c2d, 0xba40, 0x3c2e,
+ 0xba42, 0x3c2f, 0xba40, 0x3c30, 0xba40, 0x3c31, 0xba42, 0x3c32,
+ 0x2826, 0xe418, 0x10da, 0x2816, 0x3c33, 0x2817, 0x3c34, 0xba40,
+ 0xf09a, 0xba56, 0xa002, 0xae02, 0x3c33, 0xba56, 0xa002, 0xae02,
+ 0x3c34, 0xa200, 0x3c35, 0x282e, 0xf03a, 0xba40, 0x3c35, 0xa200,
+ 0x3c37, 0xba40, 0x3c36, 0xf03a, 0xba44, 0x3c37, 0xa200, 0x3c39,
+ 0xba40, 0x3c38, 0xe42a, 0xba44, 0x3c39, 0xe42e, 0x2833, 0xf086,
+ 0x1816, 0xf060, 0x2834, 0xf046, 0x1817, 0xf020, 0xf06e, 0x2816,
+ 0x3c33, 0x2817, 0x3c34, 0xe16b, 0xe42e, 0xa200, 0x3c51, 0x3c52,
+ 0x3c57, 0x3c6b, 0xe41e, 0x11c7, 0xd039, 0x0000, 0xa208, 0x3c4b,
+ 0x3c4c, 0x2041, 0x4c42, 0xa102, 0xe426, 0xe16a, 0xe41e, 0x11e1,
+ 0xe42d, 0xe41e, 0x1326, 0xe42e, 0xa200, 0x3c51, 0x3c52, 0x3c57,
+ 0x3c6b, 0xe16a, 0xe41e, 0x123e, 0xe42d, 0x284b, 0xa108, 0xe418,
+ 0x12e1, 0xe42d, 0x284a, 0xa106, 0xf048, 0x284e, 0xe016, 0x3c52,
+ 0xe41e, 0x1326, 0xe42e, 0x284e, 0x3c52, 0xa200, 0x3c57, 0x3c6b,
+ 0xe16a, 0xe41e, 0x12e1, 0xe42d, 0xe41e, 0x1326, 0xe42e, 0x2851,
+ 0x2a56, 0xb615, 0xba50, 0xe046, 0x3c57, 0xba40, 0xe42a, 0xa200,
+ 0x3c6b, 0xe162, 0x004a, 0xe163, 0x0510, 0xd022, 0x0038, 0xe184,
+ 0x118a, 0x2912, 0x3d13, 0xe16a, 0xe41e, 0x123e, 0xf0dd, 0x284b,
+ 0xa108, 0xe418, 0x12e1, 0xf08d, 0xe41e, 0x133b, 0xf05d, 0xe41e,
+ 0x1326, 0xf02d, 0xe42e, 0xe162, 0x0510, 0xe163, 0x004a, 0xd022,
+ 0x0038, 0xe184, 0x11a4, 0x2912, 0x3d13, 0xe42e, 0x283e, 0xf1ea,
+ 0xba40, 0xf1c8, 0xe41e, 0x06ab, 0xa200, 0xba4f, 0xae10, 0xe056,
+ 0xba4f, 0xae10, 0xe056, 0xe002, 0x00aa, 0xf0ba, 0xa102, 0xf03a,
+ 0xa200, 0xe42e, 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xba4e,
+ 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xa202, 0xe42e, 0xe41e,
+ 0x06ab, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056,
+ 0x3441, 0x3c42, 0xba4e, 0x283c, 0xa102, 0xe428, 0xba4e, 0xba4f,
+ 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056,
+ 0xe42e, 0x281b, 0xf02a, 0xba40, 0xba42, 0xa200, 0x2a3f, 0xf03b,
+ 0xba40, 0x3c5c, 0x2a40, 0xf039, 0xba40, 0xf02e, 0xb800, 0x3c4b,
+ 0x3c4c, 0xa106, 0xf088, 0xb808, 0x3c5d, 0xa12c, 0xf048, 0xa204,
+ 0x3c4b, 0x3c4c, 0xe004, 0x004b, 0x0851, 0xe092, 0x2901, 0x3c85,
+ 0x2861, 0x2a85, 0xa803, 0xb636, 0x2a85, 0xa103, 0xb436, 0xa802,
+ 0x3c61, 0x2885, 0xa802, 0xf028, 0xba4c, 0xe41e, 0x1351, 0xa200,
+ 0x2a2e, 0xf02b, 0xb804, 0x3c62, 0x2885, 0xa804, 0xf068, 0xa200,
+ 0x2a3d, 0xf02b, 0xba42, 0x3c5b, 0x2833, 0x2a5b, 0xa803, 0xf03b,
+ 0xa002, 0xaf02, 0x3c53, 0xa01e, 0xaf08, 0x3c55, 0x2834, 0x2a5b,
+ 0xa805, 0xf03b, 0xa002, 0xaf02, 0x3c54, 0xa01e, 0xaf08, 0x3c56,
+ 0xe41e, 0x13b8, 0xe41e, 0x1416, 0xe41e, 0x1460, 0xe41e, 0x14b7,
+ 0xa202, 0x3c4e, 0xa200, 0x3c5f, 0x3c60, 0xe42e, 0xa200, 0x2a19,
+ 0xf02b, 0xb80a, 0x3c4a, 0xa106, 0xf05a, 0xb802, 0x3c4b, 0x3c4c,
+ 0xf0ee, 0xba44, 0xae02, 0x3c4c, 0xe004, 0xaf50, 0x5c4c, 0xa806,
+ 0x3c4b, 0xe004, 0xbb44, 0x5c4c, 0xa806, 0x3c4c, 0x284b, 0xa108,
+ 0xf05a, 0x281a, 0xf03a, 0xba4e, 0x3c4d, 0xa200, 0x3c50, 0x3c4f,
+ 0xa202, 0x3c4e, 0x2818, 0xf0ca, 0x2819, 0xf08a, 0x281c, 0xf068,
+ 0xba40, 0x3c4e, 0xba40, 0x3c4f, 0xf03e, 0xba42, 0x3c50, 0x282a,
+ 0xf28a, 0xa202, 0x2a19, 0xb616, 0x2a1c, 0xb612, 0xa002, 0x3c47,
+ 0x2850, 0x084f, 0x2a18, 0xb616, 0x0847, 0x3c47, 0xba40, 0xf19a,
+ 0xe161, 0x06b8, 0xe162, 0x06c4, 0xe163, 0x06d0, 0xe164, 0x06d6,
+ 0x2847, 0xf0f6, 0xa102, 0xcc44, 0xe184, 0x1297, 0xba62, 0x3511,
+ 0x3d11, 0xba62, 0x3512, 0x3d12, 0xba5a, 0x3d13, 0xba5a, 0x3d14,
+ 0x284b, 0xa108, 0xe42a, 0xe004, 0x004b, 0x0851, 0xe092, 0x2901,
+ 0x3c85, 0xba40, 0x3c61, 0xa200, 0x2a19, 0xf02b, 0xba40, 0x3c58,
+ 0x2a1b, 0x284a, 0xa100, 0xb611, 0xa200, 0xf02b, 0xba40, 0x3c59,
+ 0x284a, 0xa100, 0x2a85, 0xa107, 0xb632, 0xf07a, 0x284a, 0xa106,
+ 0x2a85, 0xa805, 0xb636, 0xf038, 0xb808, 0x3c5d, 0x282b, 0x2a4a,
+ 0xa107, 0xb612, 0x2a85, 0xa805, 0xb612, 0xf0ca, 0xba42, 0xe049,
+ 0xa107, 0xf079, 0xba41, 0xf05b, 0xa002, 0xe049, 0xa121, 0xf7b7,
+ 0x3c5e, 0x2833, 0x3c53, 0xa01e, 0xaf08, 0x3c55, 0x2834, 0x3c54,
+ 0xa01e, 0xaf08, 0x2a4a, 0xa107, 0xf039, 0xa002, 0xaf02, 0x3c56,
+ 0xe42e, 0xe004, 0x004b, 0x0851, 0xe092, 0x2901, 0x3c85, 0xe41e,
+ 0x1351, 0xa200, 0x2a15, 0xf02b, 0xba42, 0x3c5a, 0x284a, 0xa104,
+ 0x2a85, 0xa107, 0xb632, 0xf038, 0xb808, 0x3c5d, 0xa200, 0x3c5f,
+ 0x3c60, 0x284a, 0xa106, 0xf118, 0x2885, 0xa102, 0xf09a, 0x2885,
+ 0xa106, 0xf0b8, 0xa202, 0x3c5f, 0xa200, 0x3c60, 0xf06e, 0xba40,
+ 0x3c5f, 0xf038, 0xba40, 0x3c60, 0x2885, 0xa802, 0xf0ea, 0xa200,
+ 0x2a2e, 0xf02b, 0xb804, 0x3c62, 0x2a35, 0x284a, 0xa100, 0xb615,
+ 0xa200, 0xf02b, 0xb804, 0x3c63, 0xe41e, 0x13b8, 0xe41e, 0x1416,
+ 0xe42d, 0xe41e, 0x1460, 0xe41e, 0x14b7, 0xe42e, 0x287b, 0xf026,
+ 0xf05e, 0xa202, 0x3c7b, 0x3c7c, 0xe16b, 0xf0cd, 0x283c, 0xa104,
+ 0xf08a, 0x2041, 0x4c42, 0xe005, 0x0030, 0xae21, 0xe046, 0xf022,
+ 0xf02e, 0xe16b, 0xe42e, 0xe162, 0x0510, 0x284a, 0x1912, 0xf108,
+ 0xe162, 0x0519, 0x2853, 0x1912, 0xf0b8, 0x2854, 0x1912, 0xf088,
+ 0x2855, 0x1912, 0xf058, 0x2856, 0x1912, 0xf028, 0xf02e, 0xe16b,
+ 0xe42e, 0xba49, 0x3e7a, 0xa111, 0xa200, 0xf021, 0xba40, 0x3c7d,
+ 0x287a, 0x2a32, 0xa101, 0xf0a9, 0x2a7a, 0xa111, 0xf077, 0x2a7a,
+ 0xa139, 0xb5ae, 0xf037, 0xae02, 0xa13e, 0x3c7b, 0x3c7c, 0x2a32,
+ 0xa105, 0xf0c3, 0xa003, 0xf073, 0xa200, 0x2a7a, 0xa111, 0xb62e,
+ 0x3c7e, 0xe42e, 0xba40, 0x3c7e, 0xe42e, 0x2832, 0xa802, 0x3c7e,
+ 0xe42e, 0xa200, 0x3c7f, 0xa206, 0x3c80, 0xa202, 0x3c82, 0x2a2f,
+ 0xa803, 0xf059, 0x2a2f, 0xa805, 0xf259, 0xe42e, 0xba40, 0xe42a,
+ 0x3c7f, 0xba42, 0x3c80, 0xf09a, 0xa102, 0xf0aa, 0xa102, 0xf11a,
+ 0xba40, 0x3c82, 0xe42a, 0xf1ce, 0xa21e, 0x3c81, 0xf19e, 0xba42,
+ 0xae04, 0x3c81, 0xe004, 0x936c, 0x5c81, 0xa81e, 0x3c81, 0xf10e,
+ 0xba42, 0xae04, 0x3c81, 0xe004, 0x1248, 0x5c81, 0xa81e, 0x3c81,
+ 0xf07e, 0xa202, 0x3c7f, 0xa200, 0x3c80, 0xa21e, 0x3c81, 0xba44,
+ 0xe049, 0xa10f, 0x087b, 0xa002, 0xf029, 0xba48, 0x3c7c, 0xe42e,
+ 0xa200, 0xe162, 0x0065, 0xc705, 0x3d12, 0xa202, 0x2a85, 0xa103,
+ 0xf05b, 0x2a85, 0xa107, 0xf1cb, 0xf33e, 0x2a4a, 0xa105, 0xf059,
+ 0xba41, 0xa202, 0xb672, 0xf2ce, 0xa208, 0x2a7b, 0xa119, 0xb60e,
+ 0x3c64, 0xb80e, 0xe049, 0xaf05, 0x3e65, 0xf02b, 0xb810, 0x0864,
+ 0xae02, 0x3c64, 0xe004, 0xe42d, 0x5c64, 0xa806, 0xf19e, 0x2a4a,
+ 0xa101, 0xf05b, 0x2a4a, 0xa107, 0xf06b, 0xf12e, 0xba41, 0xa200,
+ 0xb632, 0xf0ee, 0xa208, 0x2a7b, 0xa119, 0xb60e, 0x3c64, 0xb810,
+ 0x0864, 0xae02, 0x3c64, 0xe004, 0xe42d, 0x5c64, 0xa806, 0x3c64,
+ 0x284a, 0xa104, 0x2a85, 0xa803, 0xb636, 0xf038, 0xba40, 0x3c65,
+ 0x2865, 0xe42a, 0x284a, 0xa106, 0xf058, 0xb836, 0x3068, 0xaf02,
+ 0x3065, 0x2865, 0xf05a, 0xba4a, 0x3c66, 0xba4a, 0x3c67, 0x2868,
+ 0xf05a, 0xba4a, 0x3c69, 0xba4a, 0x3c6a, 0xe42e, 0xa200, 0x3c6d,
+ 0x3c6e, 0x3c6f, 0xc411, 0xe162, 0x006f, 0x2a4a, 0xa101, 0x2885,
+ 0xa102, 0xb631, 0x2864, 0xa106, 0xb631, 0xe41b, 0x15f3, 0xe42d,
+ 0xc411, 0xe162, 0x006f, 0x2a4a, 0xa107, 0x2885, 0xa106, 0xb631,
+ 0xe41b, 0x15f3, 0xe42d, 0xc411, 0xe162, 0x006f, 0x2a4a, 0xa107,
+ 0x2885, 0xa106, 0xb611, 0xe419, 0x15f3, 0xe42d, 0xc409, 0xe162,
+ 0x006e, 0x2a4a, 0xa107, 0x2885, 0xa802, 0xb615, 0xe419, 0x15f3,
+ 0xe42d, 0xc411, 0xe162, 0x006f, 0x2a4a, 0xa105, 0x2885, 0xa802,
+ 0xb631, 0xe41b, 0x15f3, 0xe42d, 0xc409, 0xe162, 0x006e, 0x2a10,
+ 0xa105, 0x2885, 0xa802, 0xb631, 0xe41b, 0x15f3, 0xe42d, 0xe42e,
+ 0xe004, 0x0024, 0x3c74, 0x2885, 0xa802, 0xe42a, 0x284a, 0xa104,
+ 0xf05a, 0x284a, 0xa106, 0xf0aa, 0xf11e, 0xba42, 0xe000, 0x0051,
+ 0x2a64, 0xa107, 0xb492, 0x3c70, 0xf09e, 0xba44, 0xe000, 0x0041,
+ 0x2a64, 0xa107, 0xb492, 0xb492, 0x3c70, 0xa202, 0x2a4a, 0xa101,
+ 0xf07b, 0x2a5f, 0xf091, 0xba42, 0xe000, 0x003d, 0xf08e, 0xba42,
+ 0xe000, 0x0031, 0xf04e, 0xba44, 0xe000, 0x0035, 0x3c73, 0x2a4a,
+ 0xa101, 0xf05b, 0xba44, 0xe000, 0x0029, 0xf04e, 0xba42, 0xe000,
+ 0x0025, 0x3c74, 0x2a4a, 0xa105, 0x2885, 0xa802, 0xb635, 0xa200,
+ 0xf049, 0xba42, 0xe000, 0x0020, 0x3c71, 0x284a, 0xa104, 0x2a85,
+ 0xa107, 0xb632, 0xf08a, 0x2a4a, 0xa101, 0x2864, 0xa106, 0xb611,
+ 0xa200, 0xf04b, 0xba42, 0xe000, 0x001c, 0x3c72, 0xe42e, 0xa200,
+ 0x3c7f, 0x2885, 0xa802, 0xf0fa, 0x282f, 0xe418, 0x1379, 0xa202,
+ 0x3c75, 0xa200, 0x3c76, 0x2830, 0xf06a, 0xba40, 0x3c75, 0xf03a,
+ 0xba42, 0x3c76, 0xa200, 0x3c6c, 0x2831, 0xf17a, 0x2885, 0xa106,
+ 0xf14a, 0xa204, 0x2a7b, 0xa113, 0xf083, 0x2810, 0xa104, 0x2a85,
+ 0xa803, 0xb632, 0xf0a8, 0xb80c, 0x3c6c, 0xc401, 0xe162, 0x006d,
+ 0xa106, 0xe41a, 0x15f3, 0xe42d, 0x2843, 0x2a85, 0xa803, 0xb612,
+ 0xf02a, 0xba40, 0x3c83, 0x2a83, 0x2885, 0xa802, 0xb636, 0x4445,
+ 0xf02a, 0xba40, 0x3c84, 0xe004, 0x005d, 0x3c78, 0x3c79, 0x2884,
+ 0xf198, 0x287a, 0xa110, 0xa203, 0xb601, 0xb806, 0xb611, 0xb472,
+ 0xe000, 0x005d, 0x3c78, 0x3c79, 0x2885, 0xa802, 0xf0b8, 0x287a,
+ 0xa110, 0xa203, 0xb601, 0xb806, 0xb611, 0xb472, 0xe000, 0x005d,
+ 0x3c79, 0xba40, 0xe000, 0x0059, 0x3c77, 0x2810, 0xa104, 0x2a85,
+ 0xa803, 0xb632, 0x2a2f, 0xb636, 0xe41a, 0x1379, 0xe42e, 0x2857,
+ 0xae10, 0x4c55, 0xae10, 0x4c56, 0xcf24, 0xcf44, 0xcfc6, 0xcf04,
+ 0xa200, 0x4c46, 0xae02, 0x4c84, 0xae04, 0x4c10, 0xae02, 0x4c2d,
+ 0xae04, 0x4c4a, 0xae04, 0xe005, 0x004b, 0x0a51, 0xe093, 0x4d01,
+ 0xae02, 0x4c51, 0xae02, 0x4c52, 0xae04, 0x4c6c, 0xae02, 0x4c75,
+ 0xae02, 0x4c5f, 0xae02, 0x4c60, 0xae04, 0x4c64, 0xae04, 0x4c62,
+ 0xae04, 0x4c63, 0xae0a, 0x4c5d, 0xae0a, 0x4c5e, 0xcf46, 0xcfc8,
+ 0xcf06, 0xa200, 0x4c46, 0xae02, 0x4c84, 0xae02, 0x2a7a, 0xa111,
+ 0xb42e, 0xae04, 0x4c7f, 0xae04, 0x4c80, 0xae08, 0x4c81, 0xae02,
+ 0x4c82, 0xae02, 0x4c75, 0xae04, 0x4c76, 0xae0a, 0x4c7b, 0xae0a,
+ 0x4c7c, 0xae02, 0x4c7d, 0xae02, 0x4c7e, 0xae02, 0x2a77, 0xe003,
+ 0x0059, 0xe056, 0xae04, 0x2a78, 0xe003, 0x005d, 0xe056, 0xae04,
+ 0x2a79, 0xe003, 0x005d, 0xe056, 0xcf48, 0xcf64, 0xa200, 0x2a70,
+ 0xe003, 0x0041, 0xa83f, 0xe056, 0xae08, 0x2a74, 0xe003, 0x0024,
+ 0xa81f, 0xe056, 0xae04, 0x2a72, 0xe003, 0x001c, 0xa807, 0xe056,
+ 0xae04, 0x2a71, 0xe003, 0x0020, 0xa807, 0xe056, 0xae08, 0x2a73,
+ 0xe003, 0x0031, 0xa81f, 0xe056, 0xcf4a, 0xe0c1, 0x0041, 0xe004,
+ 0x0000, 0xae10, 0xe042, 0x2ab8, 0xa803, 0xf05b, 0xe161, 0x0550,
+ 0x2111, 0x4d11, 0x4c6d, 0xcf4c, 0xcf1a, 0xe0c1, 0x0041, 0xe004,
+ 0x0010, 0xae10, 0xe042, 0x2ab8, 0xa803, 0xf07b, 0xe161, 0x0550,
+ 0x2111, 0x4d11, 0x2ae2, 0xe042, 0x4c6e, 0xcf4e, 0xcf1c, 0xe0c1,
+ 0x0041, 0xe004, 0x0020, 0xae10, 0xe042, 0x2ab8, 0xa803, 0xf08b,
+ 0xe161, 0x0550, 0x2111, 0x4d11, 0x2ae2, 0xe042, 0xe042, 0x4c6f,
+ 0xcf50, 0xcf1e, 0xe0c1, 0x0041, 0xe004, 0x0030, 0xae10, 0xe042,
+ 0x2ab8, 0xa803, 0xf09b, 0xe161, 0x0550, 0x2111, 0x4d11, 0x2ae2,
+ 0xe042, 0xe042, 0xe042, 0xcf00, 0xe165, 0x07c0, 0x2115, 0x4d15,
+ 0xcf02, 0xe004, 0x0033, 0x2ab7, 0xa803, 0xb616, 0xcf14, 0x2053,
+ 0x4c54, 0xcfc4, 0xe42e, 0xe082, 0xa104, 0xe400, 0x1634, 0x2855,
+ 0xae10, 0x4c56, 0xcf24, 0xd190, 0x0100, 0xcb20, 0xcb23, 0xe409,
+ 0x1634, 0xf7c8, 0xcb26, 0x3d02, 0xa100, 0xe42a, 0xa202, 0x3c6b,
+ 0xe41e, 0x1a80, 0xca28, 0xf7f8, 0xe083, 0xa103, 0xa200, 0xb486,
+ 0xb482, 0xae04, 0xe000, 0x0000, 0xae10, 0xe0c1, 0x0041, 0xe042,
+ 0x2ab8, 0xa803, 0xf0db, 0xe083, 0xa103, 0xa200, 0xf045, 0x08e2,
+ 0xf027, 0x08e2, 0xe163, 0x0550, 0x2313, 0x4f13, 0xe042, 0xce20,
+ 0xd111, 0x0100, 0x28e1, 0xce24, 0x28b7, 0xa802, 0xae0a, 0xa904,
+ 0xce26, 0xca28, 0xf7f8, 0xe42e, 0xd191, 0x0000, 0xe16b, 0xe42e,
+ 0xe41e, 0x165a, 0xe41e, 0x16ad, 0xe41e, 0x175d, 0x2857, 0xe428,
+ 0xa202, 0xe0c2, 0x0106, 0x2a4a, 0xa105, 0xe017, 0xae15, 0xa921,
+ 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x1c1b, 0xe42e, 0xe0c0, 0x0111,
+ 0xf7e8, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xf04a, 0xe0c0, 0x0281,
+ 0xf7ea, 0xe42e, 0x2810, 0xae08, 0xa902, 0xe0c2, 0x0100, 0xe004,
+ 0x00d6, 0xe0c2, 0x017c, 0xe004, 0x0014, 0xe0c2, 0x017d, 0x2055,
+ 0x4c56, 0xae08, 0x2a4b, 0xa109, 0xf06b, 0x2a10, 0xa105, 0xf039,
+ 0x2053, 0x4c54, 0xe0c2, 0x0101, 0x2a53, 0xa01f, 0xaf09, 0xae29,
+ 0x2854, 0xa01e, 0xaf08, 0xae08, 0xe056, 0xe0c2, 0x0283, 0xe0c0,
+ 0x0044, 0xa80e, 0xae1a, 0x4cb4, 0xe0c2, 0x0102, 0xe0c1, 0x0041,
+ 0xe004, 0x0050, 0xae10, 0xe042, 0x2ab8, 0xa805, 0xf05b, 0xe161,
+ 0x0552, 0x2111, 0x4d11, 0xe0c2, 0x0103, 0xe004, 0x004b, 0x0851,
+ 0xe092, 0x2901, 0x2b01, 0xa809, 0xb632, 0xae04, 0x4c4a, 0xae02,
+ 0x4c52, 0xe0c2, 0x0104, 0xa200, 0x2a6c, 0xa101, 0xb432, 0x2a4b,
+ 0xa109, 0xb616, 0xe0c2, 0x0105, 0xe42e, 0xa200, 0xe0c2, 0x0320,
+ 0x2a4b, 0xa109, 0xf2bb, 0xe165, 0x07d0, 0x2b15, 0xa803, 0xb452,
+ 0x2b15, 0xa803, 0xb432, 0xae04, 0x2b15, 0xa803, 0xb452, 0x2b15,
+ 0xa803, 0xb432, 0xae04, 0x2b15, 0xa803, 0xb452, 0x2b15, 0xa803,
+ 0xb432, 0xae04, 0x2b15, 0xa803, 0xb452, 0x2b15, 0xa803, 0xb432,
+ 0xae04, 0xc420, 0xe165, 0x07dc, 0x2b35, 0xaf0f, 0xa803, 0xb452,
+ 0x2b35, 0xaf0f, 0xa803, 0xb432, 0xae04, 0x2a64, 0xb456, 0xa803,
+ 0xb432, 0xae02, 0x4c61, 0xe0c2, 0x0303, 0xe165, 0x07d0, 0xe166,
+ 0x0304, 0xd022, 0x0003, 0xe184, 0x16f3, 0x2915, 0xaf02, 0xae18,
+ 0x2b15, 0xaf03, 0xe042, 0x9f16, 0xc420, 0xe165, 0x07dd, 0xa200,
+ 0x2b35, 0xaf0d, 0xa807, 0xa101, 0xb673, 0xe042, 0x2b35, 0xaf0d,
+ 0xa807, 0xa101, 0xb673, 0xae05, 0xe042, 0xe0c2, 0x0308, 0x2857,
+ 0xe428, 0xa202, 0xe0c2, 0x0302, 0xe162, 0x0380, 0xe165, 0x07c8,
+ 0x8505, 0x2905, 0xf042, 0xe165, 0x07c7, 0x8505, 0xc786, 0xe018,
+ 0xe000, 0x0700, 0xe092, 0xd022, 0x0002, 0xe184, 0x1721, 0x2111,
+ 0x4d11, 0x9f12, 0xe162, 0x0383, 0xe165, 0x07c9, 0x8505, 0x2905,
+ 0xf042, 0xe165, 0x07c8, 0x8505, 0xf042, 0xe165, 0x07c7, 0x8505,
+ 0xc786, 0xe018, 0xe000, 0x0700, 0xe092, 0xd022, 0x0002, 0xe184,
+ 0x173b, 0x2111, 0x4d11, 0x9f12, 0xe162, 0x0386, 0xe165, 0x07c7,
+ 0x8505, 0xc786, 0xe018, 0xe000, 0x0700, 0xe092, 0xd022, 0x0002,
+ 0xe184, 0x174c, 0x2111, 0x4d11, 0x9f12, 0xa200, 0xe0c2, 0x0302,
+ 0xa202, 0xae02, 0xa902, 0xe0c2, 0x0312, 0xa802, 0xe42a, 0x2851,
+ 0xa002, 0xae08, 0xe0c2, 0x0313, 0xe42e, 0xa202, 0xae04, 0x2a10,
+ 0xa807, 0xe056, 0xae04, 0xe005, 0x004b, 0x0a51, 0xe093, 0x2b01,
+ 0xa807, 0xe056, 0xae04, 0x2a4a, 0xa807, 0xe056, 0xae02, 0x2a52,
+ 0xa803, 0xe056, 0xe0c1, 0x0065, 0xaf19, 0xa803, 0xae17, 0xe056,
+ 0xe0c2, 0x0204, 0xa204, 0x2a6c, 0xa101, 0xb612, 0x2a2c, 0xb612,
+ 0x2a6c, 0xa101, 0xb492, 0x2a4b, 0xa109, 0xf029, 0xa204, 0xe0c2,
+ 0x0208, 0xe0c1, 0x0041, 0xe004, 0x0090, 0xae10, 0xe042, 0x2ab8,
+ 0xa821, 0xf05b, 0xe161, 0x0558, 0x2111, 0x4d11, 0xe0c2, 0x0209,
+ 0xa204, 0x2a6c, 0xa101, 0xb612, 0x2a2c, 0xb612, 0x4c2c, 0x2a4b,
+ 0xa109, 0xf029, 0xa204, 0xe0c2, 0x0210, 0xe0c1, 0x0041, 0xe004,
+ 0x00e0, 0xae10, 0xe042, 0x2ab8, 0xa809, 0xf05b, 0xe161, 0x0554,
+ 0x2111, 0x4d11, 0xe0c2, 0x0211, 0xe0c1, 0x0041, 0xe004, 0x00e0,
+ 0xe000, 0x0080, 0xae10, 0xe042, 0x2ab8, 0xa811, 0xf05b, 0xe161,
+ 0x0556, 0x2111, 0x4d11, 0xe0c2, 0x0212, 0xa200, 0xe0c2, 0x020a,
+ 0xe0c2, 0x020b, 0xe0c2, 0x020c, 0xe165, 0x07c7, 0x8505, 0xc786,
+ 0xe018, 0xe000, 0x0700, 0xe092, 0x2111, 0x4d11, 0xe0c2, 0x020d,
+ 0xe0c2, 0x0214, 0x2111, 0x4d11, 0xe0c2, 0x020e, 0xe0c2, 0x0215,
+ 0x2111, 0x4d11, 0xe0c2, 0x020f, 0xe0c2, 0x0216, 0xe42e, 0xe162,
+ 0x07cb, 0xe163, 0x07e8, 0xe164, 0x07e9, 0xe165, 0x07ea, 0xa200,
+ 0xa202, 0x2a9c, 0xb616, 0x2b03, 0xa819, 0xb616, 0x2b03, 0xa805,
+ 0xb632, 0x2b02, 0xb60a, 0x3ca7, 0xe42a, 0xe004, 0x012c, 0xe0c2,
+ 0x0140, 0x28b4, 0xe0c2, 0x0141, 0x2b03, 0xa805, 0xf03b, 0xe0c0,
+ 0x0064, 0xe0c2, 0x014c, 0x2915, 0xe008, 0x7fff, 0xa01e, 0xaf08,
+ 0x3ca8, 0x2915, 0xe008, 0x7fff, 0xa01e, 0xaf08, 0x3ca9, 0x84a8,
+ 0x82a9, 0xe018, 0x3cad, 0xa200, 0x3caa, 0x3cab, 0x3cac, 0x28a8,
+ 0xa102, 0xae20, 0x4ca9, 0xa102, 0xe0c2, 0x0142, 0x2903, 0xaf0e,
+ 0xe0c2, 0x0149, 0x2904, 0xaf1e, 0xa802, 0xae08, 0x2b04, 0xaf15,
+ 0xa81f, 0xe056, 0xe0c2, 0x014e, 0xe165, 0x07ce, 0x8505, 0xc786,
+ 0xe018, 0xe000, 0x0700, 0xe092, 0x2111, 0x4d11, 0xe0c2, 0x0143,
+ 0x2111, 0x4d11, 0xe0c2, 0x0144, 0x2111, 0x4d11, 0xe0c2, 0x0145,
+ 0x2b03, 0xa805, 0xf169, 0xe165, 0x07cb, 0x8505, 0xc786, 0xe018,
+ 0xe000, 0x0700, 0xe092, 0x2111, 0x4d11, 0xe0c2, 0x0146, 0x2111,
+ 0x4d11, 0xe0c2, 0x0147, 0x2111, 0x4d11, 0xe0c2, 0x0148, 0xf0de,
+ 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2, 0x0147,
+ 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0xe42e, 0x28a7, 0xe42a, 0xe41e,
+ 0x1886, 0xf7e8, 0xe0c0, 0x014b, 0xf7e8, 0xa200, 0x28b3, 0xae04,
+ 0xa904, 0xae0e, 0x4caa, 0xae0e, 0x4cab, 0xe0c2, 0x014d, 0xa202,
+ 0xe0c2, 0x014a, 0xe0c0, 0x014b, 0xf7e8, 0xe42e, 0xa200, 0x2aac,
+ 0x1aad, 0xe423, 0xe0c0, 0x014b, 0xf7e8, 0xa200, 0xe41e, 0x0ec4,
+ 0x3cb3, 0xae02, 0x2aac, 0xb422, 0xae02, 0x2aac, 0x1aad, 0xb42a,
+ 0xae0e, 0x4caa, 0xae0e, 0x4cab, 0xe0c2, 0x014d, 0xa202, 0xe0c2,
+ 0x014a, 0xa202, 0x2aac, 0xa003, 0x3eac, 0x2aaa, 0xa003, 0x3eaa,
+ 0x1aa8, 0xe425, 0xa201, 0x3eaa, 0x2aab, 0xa003, 0x3eab, 0x1aa9,
+ 0xe425, 0xa200, 0xe42e, 0xe0c0, 0x0065, 0xaf10, 0xa802, 0xe418,
+ 0x18c6, 0xe0c0, 0x0065, 0xaf0e, 0xa802, 0xe418, 0x18ee, 0xe0c0,
+ 0x0065, 0xaf0c, 0xa802, 0xe418, 0x191e, 0xe42e, 0xca28, 0xf7f8,
+ 0xe0c0, 0x006a, 0xce20, 0xd111, 0x0200, 0xd112, 0x0004, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe161, 0x0200, 0xe162, 0x055a, 0xa202,
+ 0xae30, 0xa920, 0x3511, 0x3d11, 0x2111, 0x4d11, 0x3512, 0x3d12,
+ 0xca28, 0xf7f8, 0xe0c0, 0x006a, 0xce20, 0xd111, 0x0200, 0xd112,
+ 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xca28, 0xf7f8,
+ 0xe0c0, 0x006a, 0xa010, 0xce20, 0xd111, 0x0200, 0xd112, 0x0004,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe161, 0x0200, 0xe162, 0x055c,
+ 0xa204, 0xae10, 0x3d11, 0x8455, 0x8256, 0xe018, 0x2a4a, 0xa107,
+ 0xf029, 0xae02, 0x3d11, 0x2111, 0x4d11, 0x3512, 0x3d12, 0xca28,
+ 0xf7f8, 0xe0c0, 0x006a, 0xa010, 0xce20, 0xd111, 0x0200, 0xd112,
+ 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xca28, 0xf7f8,
+ 0xe0c0, 0x006a, 0xa020, 0xce20, 0xd111, 0x0200, 0xd112, 0x0004,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xa200, 0x2a4b, 0x4e4c, 0xa803,
+ 0xf09b, 0xa204, 0x2a4b, 0xa107, 0xf05b, 0x2a4c, 0xa107, 0xf02b,
+ 0xa202, 0x3cda, 0xe161, 0x0200, 0xe162, 0x055e, 0xa208, 0xae10,
+ 0x4cda, 0x3d11, 0x8455, 0x8256, 0xe018, 0x2a4a, 0xa107, 0xf029,
+ 0xae02, 0x3d11, 0x2111, 0x4d11, 0x3512, 0x3d12, 0xca28, 0xf7f8,
+ 0xe0c0, 0x006a, 0xa020, 0xce20, 0xd111, 0x0200, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0065, 0xaf10,
+ 0xa802, 0xe42a, 0xe161, 0x0200, 0xe163, 0x07c3, 0xe164, 0x07c5,
+ 0xa200, 0x3c01, 0xd022, 0x0007, 0xe184, 0x197f, 0xa200, 0xae08,
+ 0x2313, 0x4f0b, 0x5e01, 0xa803, 0xb452, 0x2314, 0x4f0c, 0x5e01,
+ 0xa803, 0xb492, 0x2a01, 0xa003, 0x3e01, 0xa807, 0xf719, 0x3d11,
+ 0xe162, 0x07c7, 0x2902, 0xf0f4, 0xaf04, 0xe000, 0x0200, 0xe092,
+ 0xa218, 0x2b02, 0xa807, 0xae05, 0xe046, 0x3c01, 0xa202, 0x5801,
+ 0x4d01, 0x3d01, 0xca28, 0xf7f8, 0xe162, 0x055a, 0x2112, 0x4d12,
+ 0xce20, 0xd111, 0x0200, 0xd112, 0x0008, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0xe0c0, 0x0065, 0xaf0a, 0xa802, 0xe42a, 0xa200,
+ 0x3cdb, 0x3cdc, 0x3cdd, 0xe162, 0x0200, 0x3d12, 0x3d12, 0x3d12,
+ 0x3d12, 0xca28, 0xf7f8, 0xe0c0, 0x006b, 0xce20, 0xd111, 0x0200,
+ 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe0c0,
+ 0x0065, 0xaf0a, 0xa802, 0xe42a, 0x2cdb, 0xa87e, 0xa120, 0xe422,
+ 0xa200, 0xe41e, 0x1a19, 0x28c1, 0xf7ca, 0x20c4, 0x4cc3, 0xc871,
+ 0xaf07, 0xe046, 0xf760, 0xa202, 0xe41e, 0x1a19, 0x2cdb, 0xa002,
+ 0x3cdb, 0xe161, 0x0200, 0x28c0, 0x3d11, 0xc870, 0xaf06, 0x3d11,
+ 0xa200, 0x3d11, 0x3d11, 0xc870, 0xaf16, 0xf09a, 0xa220, 0x3cdb,
+ 0xe161, 0x0201, 0xa200, 0x3d11, 0x3d11, 0x3d11, 0xca28, 0xf7f8,
+ 0xe0c0, 0x006b, 0x2edb, 0xa87f, 0xae07, 0xe042, 0xce20, 0xd111,
+ 0x0200, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe161,
+ 0x0200, 0x2cdb, 0xa87e, 0x3d11, 0x2cdc, 0x3d11, 0x2cdb, 0xaf10,
+ 0x3d11, 0xa200, 0x3d11, 0xca28, 0xf7f8, 0xe0c0, 0x006b, 0xce20,
+ 0xd111, 0x0200, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8,
+ 0xe42e, 0xf278, 0xe0c0, 0x006c, 0x1cdd, 0xf2c0, 0xe0c0, 0x0065,
+ 0xaf14, 0xa802, 0xf068, 0xe0c0, 0x005c, 0xe008, 0x0200, 0xf098,
+ 0xba4e, 0x2cdb, 0xa87e, 0xa203, 0xae11, 0xe042, 0x3cdb, 0xe42e,
+ 0xe0c0, 0x005d, 0xe00a, 0x0200, 0xe0c2, 0x005d, 0xa202, 0xce00,
+ 0xe0c0, 0x005d, 0xe008, 0x0200, 0xf7c8, 0xa200, 0x3cdd, 0xf0ae,
+ 0x2cdd, 0xa80e, 0xe42a, 0x2cdd, 0xa00e, 0xaf06, 0xae06, 0x3cdd,
+ 0xf20e, 0x2cdd, 0xa80e, 0xf088, 0xe161, 0x0200, 0xa200, 0x3d11,
+ 0x3d11, 0x3d11, 0x3d11, 0x2cdd, 0xa80e, 0xaf02, 0xe000, 0x0200,
+ 0xe092, 0x2cdd, 0xa802, 0xf058, 0xba4e, 0xae10, 0x3d11, 0xf04e,
+ 0xba4e, 0x4d01, 0x3d11, 0x2cdd, 0xa002, 0x3cdd, 0xa80e, 0xe428,
+ 0xca28, 0xf7f8, 0xe0c0, 0x006b, 0xe000, 0x0088, 0x2edd, 0xa103,
+ 0xaf07, 0xae07, 0xe042, 0xce20, 0xd111, 0x0200, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0x2cdc, 0xa010, 0x3cdc, 0xe42e,
+ 0x2855, 0xa01e, 0xaf08, 0x3c02, 0x8402, 0x8256, 0xe018, 0xa008,
+ 0xaf04, 0xae04, 0x3ce1, 0xae02, 0xe049, 0xe003, 0x0100, 0xf063,
+ 0xe005, 0x0100, 0xe004, 0x0200, 0xf06e, 0xe009, 0x00ff, 0xf03b,
+ 0xe003, 0x0100, 0xe046, 0x3ce2, 0xe42e, 0x2887, 0xae10, 0x4c88,
+ 0xcf52, 0xcfca, 0xcf08, 0xd18c, 0x0001, 0xd18b, 0x0000, 0xcb16,
+ 0xf7f8, 0xd1e1, 0x0000, 0xcbc2, 0xf7f8, 0xe42e, 0xcb18, 0xf7f8,
+ 0xd18b, 0x0001, 0xd1e1, 0x0001, 0xcb16, 0xcbc3, 0xf7e8, 0xf7d9,
+ 0xe42e, 0xe41e, 0x1a9d, 0xf12d, 0xd1a0, 0x0001, 0xcb40, 0xcb43,
+ 0xf0a9, 0xf7d8, 0xf08d, 0xcb54, 0xcf66, 0xcf0a, 0xcfd0, 0xcb56,
+ 0xcf6c, 0xe42e, 0xd1a1, 0x0000, 0xe16b, 0xd1a0, 0x0000, 0xcb40,
+ 0xf7f8, 0xf72e, 0xe42e, 0xf1dd, 0xd1b0, 0x0001, 0xe180, 0x28c7,
+ 0xe41a, 0x05ab, 0xe181, 0xe41e, 0x1afd, 0xcb8a, 0xe41e, 0x0e3e,
+ 0xe41e, 0x1b7e, 0xe41e, 0x1bbd, 0xcb60, 0xcb63, 0xf089, 0xf7d8,
+ 0xf06d, 0xcb68, 0xcf0e, 0xcb6a, 0xcf10, 0xe42e, 0xd1e0, 0x0000,
+ 0xe41e, 0x1afd, 0xd1b1, 0x0000, 0xa200, 0xcf0e, 0xcf10, 0xe0c0,
+ 0x0124, 0xe0c2, 0x0124, 0xe16b, 0xe42e, 0xa200, 0xe0c2, 0x0113,
+ 0xcb90, 0xe0c2, 0x030d, 0xcb88, 0xe0c2, 0x0114, 0xcb8a, 0xe0c2,
+ 0x0115, 0xcb8c, 0xe0c2, 0x0130, 0x2888, 0x1857, 0x4c87, 0xe016,
+ 0xe0c2, 0x0131, 0xcb8e, 0xe0c2, 0x012a, 0xcb82, 0xe0c2, 0x0221,
+ 0xcb84, 0xe0c2, 0x0220, 0x287b, 0xe0c2, 0x022c, 0xcbd0, 0xf7f8,
+ 0xcb92, 0xe0c2, 0x030f, 0xf0da, 0xcbd2, 0xe0c2, 0x0309, 0xcbd4,
+ 0xe0c2, 0x030c, 0xcbd6, 0xe0c2, 0x030a, 0xcbd8, 0xe0c2, 0x030b,
+ 0xe42e, 0xcb80, 0xe0c2, 0x0116, 0xcbda, 0xcf12, 0xe161, 0x0224,
+ 0xd022, 0x0007, 0xd186, 0x0000, 0xe184, 0x1b3f, 0xcb86, 0x9f11,
+ 0xe41e, 0x1aae, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110,
+ 0xe42e, 0x2895, 0xb43a, 0x3c95, 0x2896, 0xe42a, 0xf0fc, 0x2888,
+ 0xae0e, 0x0887, 0xaf08, 0xe000, 0x0570, 0xe098, 0x2887, 0xa81e,
+ 0x3c00, 0xa202, 0x5800, 0x4d04, 0x3d04, 0x2887, 0xa1aa, 0xe424,
+ 0x2888, 0xa1ac, 0x2a88, 0xa80f, 0xa10f, 0xb636, 0xe424, 0xe0c0,
+ 0x0042, 0x2a88, 0xaf07, 0xae0f, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0570, 0xd112, 0x0040, 0xd113, 0x0002, 0xca29, 0xf7f9,
+ 0xe164, 0x0570, 0xa200, 0xc73f, 0x3d14, 0xe42e, 0xe0c0, 0x0065,
+ 0xaf0e, 0xa802, 0xe42a, 0xa200, 0xf02c, 0xa204, 0x4cd7, 0xae0c,
+ 0xcb8b, 0xa83f, 0xe056, 0x2ed8, 0xaf03, 0xa8ff, 0xe001, 0x0280,
+ 0xe095, 0x2ed8, 0xa803, 0xf03b, 0x4d02, 0xf02e, 0xae10, 0x3d02,
+ 0x2cd8, 0xa002, 0x3cd8, 0xe008, 0x00ff, 0xf09a, 0x2887, 0x1855,
+ 0xa002, 0xe424, 0x2888, 0x1856, 0xa002, 0xe424, 0xe162, 0x055c,
+ 0x2112, 0x4d12, 0x2ed8, 0xaf03, 0xa103, 0xb60b, 0xaf0f, 0xae11,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0280, 0xd112, 0x0080,
+ 0xd113, 0x0002, 0xca29, 0xf7f9, 0xe42e, 0xe0c0, 0x0065, 0xaf0c,
+ 0xa802, 0xe42a, 0x28da, 0xe42a, 0xa200, 0xcb55, 0xaf3d, 0xa803,
+ 0xf0a9, 0xcbd5, 0xaf0d, 0xa803, 0xf06b, 0xe0c1, 0x03b0, 0xa202,
+ 0xae3e, 0xe056, 0x2ed9, 0xaf03, 0xa8ff, 0xe001, 0x0300, 0xe095,
+ 0x3512, 0x3d12, 0x2cd9, 0xa008, 0x3cd9, 0x2ada, 0xa103, 0xf1ab,
+ 0xa200, 0xcb55, 0xaf3d, 0xa803, 0xf0a9, 0xcbd5, 0xaf0f, 0xa803,
+ 0xf06b, 0xe0c1, 0x03c0, 0xa202, 0xae3e, 0xe056, 0x2ed9, 0xaf03,
+ 0xa8ff, 0xe001, 0x0300, 0xe095, 0x3512, 0x3d12, 0x2cd9, 0xa008,
+ 0x3cd9, 0xe008, 0x00ff, 0xf09a, 0x2887, 0x1855, 0xa002, 0xe424,
+ 0x2888, 0x1856, 0xa002, 0xe424, 0xe162, 0x055e, 0x2112, 0x4d12,
+ 0x2ed9, 0xaf03, 0xa103, 0xb60b, 0xaf0f, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0300, 0xd112, 0x0080, 0xd113, 0x0002,
+ 0xca29, 0xf7f9, 0xe42e, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xe40a,
+ 0x1c9d, 0xae0a, 0xe0c1, 0x0060, 0xaf0d, 0xa80f, 0xe056, 0xe0c1,
+ 0x0044, 0xa811, 0xe056, 0xae0c, 0xe0c1, 0x0044, 0xa80f, 0xe056,
+ 0xe167, 0x0ba7, 0x2f17, 0xe056, 0xe0c2, 0x0282, 0xe0c0, 0x006e,
+ 0xe0c2, 0x0284, 0xaf20, 0xe0c1, 0x0282, 0xa809, 0xf04b, 0xe049,
+ 0xae1f, 0xf06e, 0xe049, 0xa011, 0xaf09, 0xae07, 0xae21, 0xe056,
+ 0xe0c2, 0x028c, 0xe167, 0x0ba8, 0x2d17, 0x4917, 0xe0c2, 0x0285,
+ 0xe167, 0x0baa, 0x2d17, 0x4917, 0xe0c2, 0x0286, 0xe41e, 0x1c9e,
+ 0xe0c0, 0x004a, 0xe0c2, 0x0289, 0xe0c0, 0x004b, 0xe0c2, 0x028a,
+ 0xe0c0, 0x0055, 0xe0c2, 0x028b, 0xe0c1, 0x0041, 0xe004, 0x01e0,
+ 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba0,
+ 0x2d17, 0x4917, 0xe0c2, 0x0287, 0xe0c1, 0x0041, 0xe004, 0x01f8,
+ 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba2,
+ 0x2d17, 0x4917, 0xe0c2, 0x0288, 0xe0c1, 0x0041, 0xe004, 0x0200,
+ 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba4,
+ 0x2d17, 0x4917, 0xe0c2, 0x028d, 0xe0c0, 0x0065, 0xaf18, 0xa802,
+ 0xe0c2, 0x0280, 0xa210, 0xe0c2, 0x0168, 0xe42e, 0xe167, 0x0bac,
+ 0xe165, 0x028e, 0xe166, 0x02c0, 0xd022, 0x0008, 0xe184, 0x1cb1,
+ 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0x2517, 0x4d17, 0x9f16, 0x9e85,
+ 0xf7fb, 0xe190, 0xe166, 0x02d2, 0xd022, 0x0008, 0xe184, 0x1cbd,
+ 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02db,
+ 0xd022, 0x0008, 0xe184, 0x1cc9, 0x2517, 0x4d17, 0x9f16, 0x9e85,
+ 0xf7fb, 0xe190, 0xe166, 0x02e4, 0xd022, 0x0008, 0xe184, 0x1cd4,
+ 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe42e, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0001, 0x000c, 0x000a, 0x0010, 0x0028, 0x0018, 0x0014,
+ 0x0020, 0x0050, 0x0012, 0x000f, 0x0040, 0x00a0, 0x0000, 0x0000,
+ 0x0000, 0x0001, 0x000b, 0x000b, 0x000b, 0x0021, 0x000b, 0x000b,
+ 0x000b, 0x0021, 0x000b, 0x000b, 0x0021, 0x0063, 0x0000, 0x0000,
+ 0x0000, 0x0018, 0x0019, 0x001e, 0x0032, 0x003c, 0x0030, 0x0048,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x0a5e, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0143, 0xe40e, 0x007e, 0xe40e,
+ 0x0147, 0xe40e, 0x007e, 0xe40e, 0x014b, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x042e, 0xe40e, 0x0444, 0xe41e,
+ 0x014f, 0xe40e, 0x007e, 0xe41e, 0x01b7, 0xe40e, 0x007e, 0xe41e,
+ 0x01b8, 0xe40e, 0x007e, 0xe41e, 0x0351, 0xe40e, 0x007e, 0xe41e,
+ 0x04b3, 0xe40e, 0x007e, 0xe41e, 0x0387, 0xe40e, 0x007e, 0xd130,
+ 0x0002, 0xa200, 0xe0c2, 0x0169, 0xe41e, 0x037d, 0xe41e, 0x04be,
+ 0xe0c0, 0x0062, 0x3003, 0xaf04, 0x30b4, 0xaf02, 0x30b5, 0xe41e,
+ 0x0a11, 0xe41e, 0x05b9, 0xf24a, 0x2852, 0xae20, 0x4c53, 0xe0c2,
+ 0x0071, 0xe0c2, 0x004f, 0xe41e, 0x018c, 0xe0c2, 0x0072, 0x2825,
+ 0xae10, 0x4c2e, 0xae10, 0x4c2d, 0xe0c2, 0x007b, 0x282f, 0xe0c2,
+ 0x006c, 0xa208, 0x0803, 0xe0c2, 0x0073, 0xa202, 0x3caf, 0xe0c2,
+ 0x0074, 0xe41e, 0x0b47, 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200,
+ 0x3ca0, 0xe0c2, 0x0070, 0xe42e, 0x2827, 0xe42a, 0xa231, 0xa102,
+ 0xf21a, 0xa102, 0xf12a, 0xa102, 0xa003, 0xf0fa, 0xa102, 0xa00b,
+ 0xf19a, 0xa102, 0xf0aa, 0xa102, 0xa029, 0xf07a, 0xa102, 0xa015,
+ 0xf11a, 0xa102, 0xb7f0, 0xe428, 0x3e51, 0x2a29, 0xae21, 0x2828,
+ 0xa002, 0x3c50, 0x8450, 0x8251, 0xe018, 0xe008, 0xffff, 0xe056,
+ 0xe42e, 0xe004, 0x03e7, 0x3c28, 0xa002, 0x3c29, 0xf6ee, 0xe42e,
+ 0xa2fe, 0xe0c2, 0x004c, 0xe0c2, 0x004d, 0xe0c2, 0x004e, 0xa200,
+ 0xcc4a, 0xcc4c, 0x3c3b, 0x3cea, 0x3c85, 0x3ce4, 0xcc72, 0xe0c2,
+ 0x007d, 0xe0c2, 0x007e, 0xe0c2, 0x007f, 0x3c4b, 0xe0c2, 0x007a,
+ 0xa2fc, 0xe0c2, 0x0077, 0x3c12, 0xa2fa, 0xe0c2, 0x0071, 0xa202,
+ 0xe0c2, 0x0076, 0xe0c0, 0x0065, 0xaf0a, 0xa81e, 0xf1ea, 0x30d9,
+ 0xaf02, 0x30d8, 0xaf02, 0x30d7, 0xaf02, 0x30d6, 0xe0c0, 0x006c,
+ 0xe002, 0x0088, 0x3ce6, 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xf0da,
+ 0xe0c0, 0x006a, 0xca29, 0xf7f9, 0xce20, 0xd112, 0x000c, 0xd111,
+ 0x02f0, 0xd113, 0x0003, 0xe1e1, 0x28aa, 0xf10a, 0xa200, 0x3c0e,
+ 0xe41e, 0x0a70, 0xa202, 0x3c0e, 0xe41e, 0x0a70, 0xa200, 0x3c0e,
+ 0xd037, 0x0080, 0xe128, 0xa200, 0x3caa, 0x28b4, 0xf068, 0xe41e,
+ 0x0b28, 0xe40a, 0x0258, 0xf07e, 0xe0c0, 0x0045, 0xaf04, 0xa802,
+ 0xe40a, 0x0258, 0x28af, 0xf296, 0x2817, 0xf074, 0x2a15, 0x282a,
+ 0xa104, 0xf02a, 0x2a16, 0x3e17, 0x28af, 0xa102, 0x3caf, 0x2221,
+ 0x4e22, 0xa003, 0x3621, 0x3e22, 0xa202, 0x3c1c, 0x2817, 0xf074,
+ 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xe418, 0x03db, 0x28af, 0xf194,
+ 0x2a03, 0x2814, 0xf02b, 0x2816, 0xe0c2, 0x0071, 0x3c17, 0xa200,
+ 0xe0c2, 0x0072, 0xe40e, 0x0328, 0x28af, 0xf0b4, 0x2814, 0x2a03,
+ 0xf02b, 0x2816, 0x3c17, 0xe0c1, 0x0060, 0xaf09, 0xa807, 0xf559,
+ 0xa2fe, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0072, 0xe40e, 0x0328,
+ 0x28b4, 0xf05a, 0xe41e, 0x09e8, 0xe40e, 0x025e, 0xa2fe, 0xe0c2,
+ 0x0077, 0xe41e, 0x03ff, 0xe41e, 0x1090, 0xe42a, 0xa2fc, 0xe0c2,
+ 0x0077, 0xd130, 0x0002, 0xd03a, 0x0002, 0xd04b, 0x0001, 0xd04c,
+ 0x0000, 0xd008, 0x0000, 0x28a4, 0xe016, 0x4ca1, 0xe41a, 0x1058,
+ 0x28a4, 0x3ca1, 0xe41e, 0x05eb, 0x2ab4, 0xf04b, 0x2a3b, 0xe409,
+ 0x031f, 0xe40a, 0x0337, 0xe404, 0x021a, 0x28b4, 0xf26a, 0xe0c0,
+ 0x0065, 0xa808, 0xe40a, 0x0295, 0x2840, 0xe408, 0x02fd, 0xa2fa,
+ 0x3c15, 0xa200, 0x3c42, 0xe40e, 0x031f, 0xe0c0, 0x0065, 0xaf06,
+ 0xa806, 0x3ca3, 0xe40a, 0x02fd, 0xa102, 0xf068, 0x2840, 0x4c49,
+ 0xe408, 0x02fd, 0xf06e, 0xa102, 0xf048, 0x2842, 0xe40a, 0x02fd,
+ 0xa2fa, 0x3c15, 0xe40e, 0x031f, 0x28a4, 0xf11a, 0x2848, 0xa102,
+ 0xe016, 0x443b, 0x4c40, 0xf47a, 0x28a2, 0xe40a, 0x02fd, 0x2a32,
+ 0x563b, 0x3e3b, 0xb5f6, 0x3ca2, 0xe40e, 0x027a, 0x28a3, 0xe40a,
+ 0x02fd, 0xa102, 0xf04a, 0xa102, 0xf09a, 0xf0ae, 0x2848, 0xa102,
+ 0xe016, 0x443b, 0x4c40, 0xf328, 0xf03e, 0x2842, 0xf2fa, 0x28a2,
+ 0x2a32, 0x563b, 0x3e3b, 0xb5f6, 0xf04a, 0x3ca2, 0xe40e, 0x027a,
+ 0xe41e, 0x03b7, 0x2834, 0xa106, 0xe01a, 0xae02, 0x4c25, 0xae02,
+ 0x4c3c, 0xae06, 0x28d5, 0x2a34, 0xa103, 0xae04, 0x4c3e, 0xae02,
+ 0x4c3a, 0xae02, 0x4c39, 0xae04, 0x4c3d, 0xae02, 0x4c32, 0xae24,
+ 0xe056, 0xe0c2, 0x0073, 0xa204, 0xe0c2, 0x0075, 0x2800, 0xe0c2,
+ 0x0072, 0xa2fa, 0xe0c2, 0x0071, 0xe42e, 0xe41e, 0x0ba6, 0xe40a,
+ 0x0337, 0xe41e, 0x04d3, 0xd182, 0x0007, 0x2804, 0x4c05, 0xe418,
+ 0x1015, 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065, 0xaf18, 0xa802,
+ 0xf04a, 0xe0c0, 0x0281, 0xf7ea, 0x2832, 0x543b, 0x3c3b, 0x2ab4,
+ 0xf05b, 0x283b, 0xe418, 0x03c4, 0x283b, 0xe408, 0x027a, 0xa200,
+ 0xe41e, 0x0d8a, 0x2817, 0xf052, 0xa2fa, 0x3c17, 0xe0c2, 0x0071,
+ 0x2852, 0xae20, 0x4c53, 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0xe41e,
+ 0x0417, 0x2817, 0x3c4e, 0xa202, 0xe0c2, 0x0076, 0xe42e, 0x2852,
+ 0xae20, 0x4c53, 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0x28a9, 0xf06a,
+ 0xa2fa, 0xe0c2, 0x0071, 0xa200, 0x3ca9, 0xa2fa, 0x3c17, 0xe0c2,
+ 0x0071, 0xe41e, 0x0d8a, 0xe41e, 0x0417, 0xa200, 0xe0c2, 0x0076,
+ 0xe42e, 0xd130, 0x0002, 0xe41e, 0x0b8f, 0xe0c0, 0x0060, 0xe42a,
+ 0xe0c0, 0x0060, 0x3c23, 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xce20,
+ 0xd111, 0x0100, 0xd112, 0x00c4, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20, 0xd111, 0x0ba8, 0xd112,
+ 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0061, 0x3c06,
+ 0xaf02, 0x3c07, 0xe41e, 0x1058, 0xe42e, 0xa200, 0xc401, 0xe188,
+ 0x07ff, 0x3d11, 0xcc72, 0xa2fe, 0x3421, 0x3c22, 0xe42e, 0xe0c0,
+ 0x0060, 0xf08a, 0xe0c0, 0x0061, 0x2208, 0x4e09, 0xe046, 0xaf12,
+ 0xae02, 0x3c0b, 0xa200, 0x3cae, 0xe180, 0xe41e, 0x0a51, 0xe41e,
+ 0x0ac4, 0xe41e, 0x1058, 0xe166, 0x0054, 0x9e06, 0xf16a, 0x2823,
+ 0xa102, 0xcc44, 0xa200, 0x3cb3, 0xe184, 0x03b2, 0x9e06, 0x5cb3,
+ 0xa802, 0xf07a, 0x28b3, 0xe000, 0x02b0, 0xe09e, 0xa208, 0x3d07,
+ 0x28b3, 0xa002, 0x3cb3, 0xe190, 0xa202, 0x3caa, 0xe42e, 0xe41e,
+ 0x089c, 0xba2e, 0xa102, 0xe40a, 0x03bf, 0xba4e, 0xf7be, 0x2832,
+ 0x543b, 0x3c3b, 0xf778, 0xe42e, 0xe0c0, 0x005c, 0xe008, 0x0400,
+ 0xe42a, 0xe004, 0x0400, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d,
+ 0xa202, 0xce00, 0xe0c0, 0x005d, 0xe008, 0x0400, 0xe190, 0xf7b8,
+ 0xe41e, 0x09e8, 0xe42e, 0xa200, 0x3c3b, 0x3c58, 0x3c59, 0xe0c2,
+ 0x0140, 0xe0c2, 0x0149, 0xe41e, 0x0fb3, 0xe41e, 0x0ec5, 0xa202,
+ 0x3c95, 0xa203, 0xe41e, 0x0fef, 0xe41e, 0x100a, 0xf798, 0xa200,
+ 0x3c95, 0xa201, 0xe41e, 0x0fef, 0xe0c1, 0x014b, 0xf7e9, 0x2818,
+ 0xe000, 0x02d0, 0xe094, 0x2902, 0xa81c, 0x3d02, 0xe42e, 0xa200,
+ 0x3cb1, 0x2823, 0xa102, 0xcc44, 0xe184, 0x0415, 0xe0c0, 0x0054,
+ 0x5cb1, 0xa802, 0xf058, 0x28b1, 0xe41e, 0x10ad, 0xf05e, 0x28b1,
+ 0xa209, 0xe41e, 0x10a6, 0x2ab1, 0xa003, 0x3eb1, 0xe42e, 0xe004,
+ 0x02b0, 0xe09e, 0xe004, 0x0054, 0xe09c, 0x2823, 0xa102, 0xcc44,
+ 0xa200, 0x3cb1, 0xe184, 0x042b, 0x2b17, 0xaf05, 0xa803, 0x5ab1,
+ 0xe056, 0x2ab1, 0xa003, 0x3eb1, 0x9f06, 0xe42e, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xa206, 0xe41e, 0x044d, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0x3cef, 0xa226, 0xe41e,
+ 0x0463, 0xe41e, 0x047d, 0xe42e, 0xa224, 0xe41e, 0x0463, 0xe41e,
+ 0x0498, 0xa204, 0xe41e, 0x044d, 0xe42e, 0x3ced, 0xe0c0, 0x0041,
+ 0xe005, 0x0280, 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ed, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0x2aef, 0xa80f, 0xa10d, 0xe42b, 0x3ced,
+ 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042, 0x22f0, 0x4ef1,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100,
+ 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe161, 0x07e0, 0x8911,
+ 0x0034, 0x8911, 0x0033, 0x8911, 0x0035, 0x8911, 0x0036, 0x8911,
+ 0x0037, 0x8911, 0x0038, 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11,
+ 0xcc62, 0x2111, 0x4d11, 0xcc64, 0x2111, 0x4d11, 0xcc72, 0xe42e,
+ 0xe161, 0x07e0, 0x8b11, 0x0034, 0x8b11, 0x0033, 0x8b11, 0x0035,
+ 0x8b11, 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038, 0xc860, 0x3511,
+ 0x3d11, 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511, 0x3d11, 0xc872,
+ 0x3511, 0x3d11, 0xe42e, 0xa200, 0x3cae, 0x3cab, 0x3cbe, 0x3c1c,
+ 0x3c21, 0x3c22, 0x3c2a, 0xa202, 0x3caf, 0xe42e, 0xe0c0, 0x0040,
+ 0xa231, 0xae17, 0xe042, 0xe005, 0x1500, 0xae03, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0400, 0xd112, 0x0210, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0xd1b3, 0x0001, 0xa200, 0x3c57, 0x3c58,
+ 0x3c59, 0x3c47, 0x3c84, 0x3c82, 0x3c81, 0xcf64, 0xcf62, 0xe16a,
+ 0x28b4, 0xf11a, 0xc872, 0x26b8, 0x4eb9, 0xae07, 0xe045, 0xf0b3,
+ 0xa202, 0x3c82, 0x2857, 0x3c83, 0x3c81, 0x3c47, 0x2a54, 0x1a83,
+ 0x3e84, 0xf26e, 0xba2c, 0xf068, 0xe41e, 0x0524, 0x2882, 0xf208,
+ 0xf0ce, 0x2a47, 0xe41b, 0x09db, 0xf0bd, 0x2a47, 0xa103, 0xe01b,
+ 0x2840, 0xe016, 0xe051, 0xf079, 0xe41e, 0x0934, 0xf08c, 0xe41e,
+ 0x0524, 0xf0ee, 0xa200, 0xe41e, 0x09b5, 0xf7ad, 0xa201, 0xe41e,
+ 0x0583, 0x2258, 0x4e59, 0xcf63, 0xf4c8, 0xa200, 0xe42e, 0xa200,
+ 0x3c82, 0x2885, 0x0884, 0x3c85, 0x2881, 0xe408, 0x05ae, 0xe41e,
+ 0x0598, 0xf638, 0xa202, 0xe42e, 0xf06c, 0xe16a, 0xa202, 0x3c82,
+ 0x2857, 0x3c83, 0xe41e, 0x055d, 0x2ada, 0xe017, 0x3eda, 0xf17a,
+ 0xe41e, 0x09db, 0xf29d, 0x8455, 0x8245, 0xe018, 0x2a47, 0xa103,
+ 0xe042, 0x3c46, 0x2882, 0xf058, 0x2857, 0x1846, 0xf1d8, 0xf07e,
+ 0x2846, 0x1854, 0xf192, 0x2883, 0x1846, 0xf160, 0x2882, 0xf11a,
+ 0x2a57, 0x3e83, 0x2a54, 0x2881, 0xf028, 0x2a46, 0x1a83, 0xf073,
+ 0xa202, 0x3c81, 0x2a57, 0x3e83, 0x2a54, 0x1a83, 0x3e84, 0xe16a,
+ 0xa202, 0x3c47, 0xe42e, 0xe16b, 0xf48e, 0xe41e, 0x0894, 0xba3e,
+ 0xe008, 0x00ff, 0xa102, 0x3c45, 0xf1a4, 0xe002, 0x00ae, 0xf170,
+ 0xba7e, 0xe190, 0xba48, 0x3c64, 0xae02, 0x4c65, 0xae04, 0xcb23,
+ 0xa807, 0xe056, 0xcf22, 0xba40, 0xf06a, 0xba4e, 0xba40, 0xf03a,
+ 0xba4e, 0xf7de, 0xd182, 0x0007, 0xa202, 0xe42e, 0xa202, 0x3c81,
+ 0x3c82, 0xa200, 0xe42e, 0xf049, 0x2847, 0xa102, 0x3c47, 0x2857,
+ 0xa002, 0x3c57, 0xcf64, 0x2858, 0xa002, 0x3c58, 0x1855, 0xe428,
+ 0xd1b3, 0x0004, 0x3c58, 0x2859, 0xa002, 0x3c59, 0x1844, 0xe42e,
+ 0x2884, 0xe42a, 0xd186, 0x0008, 0xa102, 0xcc44, 0xe184, 0x05ac,
+ 0xa202, 0x2a40, 0xe41b, 0x09b5, 0x2840, 0xe418, 0x0e03, 0xa203,
+ 0xe41e, 0x0583, 0x2258, 0x4e59, 0xcf63, 0xe42e, 0xa202, 0xe41e,
+ 0x09b5, 0xa203, 0xe41e, 0x0583, 0x2258, 0x4e59, 0xcf63, 0xe42a,
+ 0xf76e, 0xe41e, 0x0894, 0xba3e, 0xe008, 0x00ff, 0xf058, 0x8c4f,
+ 0x0000, 0xf23d, 0xe16a, 0xba6e, 0xe41e, 0x0b28, 0xa201, 0x8c4f,
+ 0x0000, 0xb63b, 0xe0c3, 0x0070, 0xe16a, 0xe428, 0x28a0, 0xf188,
+ 0xba4e, 0xe002, 0x00b3, 0xf09a, 0xa108, 0xf64a, 0xa102, 0xf02a,
+ 0xf61e, 0xe41e, 0x0673, 0xf5ee, 0xa203, 0xe41e, 0x0637, 0xa202,
+ 0x3c4f, 0xf06b, 0x28b4, 0xf568, 0xe16a, 0xa202, 0xe42e, 0xa200,
+ 0xe0c2, 0x0070, 0xe42e, 0xa203, 0xe41e, 0x0894, 0xba6e, 0x28b4,
+ 0xf058, 0xe41e, 0x0b28, 0xb7f0, 0xe428, 0x28b4, 0xf09a, 0xc872,
+ 0x26b8, 0x4eb9, 0xae07, 0xe045, 0xf031, 0xa200, 0xe42e, 0xba4e,
+ 0xf2da, 0xe002, 0x00b3, 0xf06a, 0xa108, 0xf67a, 0xa102, 0xf22a,
+ 0xf64e, 0xa201, 0xe41e, 0x0637, 0xf29b, 0x284a, 0xf0b8, 0x2855,
+ 0xe008, 0x00ff, 0xae10, 0x2a56, 0xe009, 0x00ff, 0xe056, 0x3c4a,
+ 0xf0fe, 0x284a, 0xaf10, 0xe008, 0x00ff, 0x1855, 0xf064, 0x284a,
+ 0xe008, 0x00ff, 0x1856, 0xf042, 0xa2fe, 0x3c4a, 0xf0fe, 0xe40e,
+ 0x05ec, 0xe41e, 0x0673, 0xe40e, 0x05ec, 0x2a4a, 0xe405, 0x0635,
+ 0xe41e, 0x068d, 0xa202, 0xb616, 0xe42e, 0xa200, 0xe42e, 0xa200,
+ 0x3c24, 0x3c26, 0x3c28, 0x3c29, 0x3ce3, 0xba56, 0xe40a, 0x0671,
+ 0x3c52, 0xe002, 0x0780, 0xf026, 0xf2de, 0x2852, 0xa01e, 0xaf08,
+ 0x3c55, 0xba56, 0xf27a, 0x3c53, 0xe002, 0x0480, 0xf026, 0xf22e,
+ 0x2853, 0xa01e, 0xaf08, 0x3c56, 0x3c44, 0x8455, 0x8256, 0xe018,
+ 0x3c54, 0xba46, 0x3c2f, 0xf16a, 0xba46, 0x3c27, 0xf13a, 0xba62,
+ 0xba40, 0xf10a, 0xba52, 0xba40, 0xe41e, 0x0849, 0xf0b8, 0xa200,
+ 0xe41e, 0x0719, 0xe049, 0x2824, 0xe41a, 0x0704, 0xf03b, 0xa203,
+ 0xe42e, 0xa201, 0xe42e, 0xa202, 0x3ce3, 0xa201, 0xba40, 0xae32,
+ 0xe055, 0xba48, 0xae28, 0xe055, 0xba4a, 0xae1c, 0xe055, 0xba40,
+ 0xba4a, 0xae10, 0xe055, 0xba4a, 0xe055, 0xe0c3, 0x004c, 0xba40,
+ 0xba40, 0xa202, 0xe41e, 0x0719, 0xe42e, 0xa204, 0x3ce3, 0xba52,
+ 0x2a3b, 0xf02b, 0xae14, 0xe0c1, 0x007a, 0xe055, 0xe0c3, 0x007a,
+ 0xba44, 0xe40a, 0x0702, 0x2a34, 0x3e48, 0x3c34, 0xa102, 0xa201,
+ 0xb635, 0x3e40, 0xa102, 0xa201, 0xb635, 0x3e41, 0xa102, 0xa201,
+ 0xb635, 0x3e42, 0xa102, 0xe400, 0x0702, 0xf048, 0x4c24, 0xe016,
+ 0x3c49, 0x2834, 0x2a3b, 0xa102, 0xf02b, 0x64ea, 0x3cea, 0xa201,
+ 0xa104, 0xb635, 0x3eeb, 0xba5f, 0x2824, 0xf08a, 0x2840, 0xf298,
+ 0xba46, 0x2841, 0xf268, 0xba46, 0xf24e, 0x2840, 0x4c49, 0xe162,
+ 0x0200, 0xe163, 0x0204, 0xf1d8, 0xba40, 0x3c7d, 0x4424, 0xf338,
+ 0xba44, 0xf31a, 0xa102, 0x3d12, 0x3d02, 0xa221, 0x5b12, 0x3f13,
+ 0x3f13, 0x2841, 0xf0e8, 0xba40, 0x3c7e, 0x4424, 0xf248, 0xba44,
+ 0xf22a, 0xa102, 0x3d12, 0x3d02, 0xa221, 0x5b02, 0x3f13, 0x3f03,
+ 0xba40, 0xf03a, 0xba4e, 0xf7de, 0xa202, 0xe41e, 0x0719, 0xf13a,
+ 0x2834, 0xa108, 0xf0ba, 0xa202, 0x5834, 0xaf02, 0x2a3d, 0xa107,
+ 0xf08b, 0x2a3d, 0xa105, 0xf029, 0xae06, 0x2a4b, 0xe055, 0x3e4b,
+ 0xa203, 0xe42e, 0xa201, 0xe42e, 0xa200, 0x3c36, 0x3c35, 0x3c37,
+ 0x3c33, 0x3c3a, 0x3c38, 0x3c30, 0xa202, 0x3c3c, 0x3c31, 0x3c3e,
+ 0x3c25, 0xa206, 0x3c3d, 0x2853, 0xa01e, 0xaf08, 0x3c56, 0x3c44,
+ 0xe42e, 0x3c51, 0xe41e, 0x088f, 0xba3e, 0xe008, 0x00ff, 0xe002,
+ 0x00b2, 0xf18a, 0xa106, 0xe428, 0xba7e, 0xe190, 0xba46, 0xa102,
+ 0xf3ca, 0xa102, 0xe40a, 0x076b, 0xa102, 0xe40a, 0x0773, 0xa102,
+ 0xe40a, 0x077b, 0xa106, 0xe40a, 0x0783, 0xa102, 0xe40a, 0x078b,
+ 0xf62e, 0x28d9, 0xf268, 0xba7e, 0xe190, 0xe0c0, 0x0065, 0xaf0a,
+ 0xa802, 0xf59a, 0xe162, 0x0800, 0x28e3, 0x3d12, 0xa200, 0x3d12,
+ 0xa202, 0x3d12, 0xa200, 0x3d12, 0xe0c1, 0x006b, 0x28e4, 0xa002,
+ 0xae06, 0xe041, 0xaf06, 0x3ce4, 0xca28, 0xf7f8, 0xce21, 0xd111,
+ 0x0800, 0xd112, 0x0004, 0xd113, 0x0002, 0xe1e1, 0xe40e, 0x071a,
+ 0xe41e, 0x08a1, 0xe40e, 0x071a, 0xa202, 0x3c24, 0xe41e, 0x0796,
+ 0xf2cb, 0xe40e, 0x071a, 0xa202, 0x3c24, 0xe41e, 0x07bc, 0x4e51,
+ 0xf24b, 0xe40e, 0x071a, 0xa202, 0x3c24, 0xe41e, 0x07cc, 0x4e51,
+ 0xf1cb, 0xe40e, 0x071a, 0xa202, 0x3c24, 0xe41e, 0x0838, 0x4e51,
+ 0xf14b, 0xe40e, 0x071a, 0xa202, 0x3c24, 0xe41e, 0x0824, 0x4e51,
+ 0xf0cb, 0xe40e, 0x071a, 0xa202, 0x3c24, 0xe41e, 0x07e0, 0xf05b,
+ 0xe40e, 0x071a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xba40, 0xba44,
+ 0x3c2d, 0xba46, 0x3c2e, 0xba40, 0x3c25, 0x2a53, 0xf04a, 0xa01f,
+ 0xaf09, 0xf04e, 0xa03f, 0xaf0b, 0xae03, 0x3e56, 0xba42, 0xa102,
+ 0xf128, 0xba42, 0xf108, 0xba42, 0xf0e8, 0xba56, 0xf0c8, 0xba40,
+ 0xf0aa, 0xba4e, 0xf088, 0xba40, 0xba42, 0x3c28, 0xba48, 0x3c29,
+ 0xa203, 0xe42e, 0xa201, 0xe42e, 0xba44, 0xba40, 0xf07a, 0xba4e,
+ 0xf0aa, 0xba4e, 0xf08a, 0xba4e, 0xf06a, 0xba5a, 0xba40, 0xba5a,
+ 0xa203, 0xe42e, 0xa201, 0xe42e, 0xe41e, 0x0849, 0xf108, 0xa200,
+ 0x3c50, 0xd022, 0x0001, 0xe184, 0x07da, 0xba41, 0xf03b, 0xc73f,
+ 0xba4e, 0x4e50, 0x3e50, 0xf039, 0xa203, 0xe42e, 0xa201, 0xe42e,
+ 0xe162, 0x0200, 0xe163, 0x0204, 0xd022, 0x0003, 0xe184, 0x07ed,
+ 0xba46, 0xa102, 0x3d02, 0xa221, 0x5b12, 0x3f13, 0xba43, 0x3e30,
+ 0xba43, 0x3e3d, 0xf30b, 0xa103, 0x3233, 0xaf03, 0x3e31, 0xe017,
+ 0x3e32, 0x283b, 0xf03a, 0x2831, 0xf268, 0x2a31, 0x8455, 0x8256,
+ 0xe018, 0xf029, 0xaf02, 0x3c54, 0x2856, 0xf029, 0xaf02, 0x3c44,
+ 0xba40, 0x3c39, 0xba40, 0x3c3c, 0xba40, 0x3c38, 0xba40, 0x3c36,
+ 0xba40, 0x3c37, 0xba40, 0x3c35, 0xba40, 0x3c3a, 0xba40, 0xba40,
+ 0x3c3e, 0xa203, 0xba40, 0xe42a, 0xba40, 0xba44, 0x3cd5, 0xba5e,
+ 0xa203, 0xe42e, 0xa201, 0xe42e, 0xa202, 0x2a25, 0xf04b, 0x083a,
+ 0x0839, 0xf03e, 0x0831, 0x083a, 0xae02, 0xa102, 0xcc44, 0xe184,
+ 0x0833, 0xba5e, 0xba40, 0xf03a, 0xa203, 0xe42e, 0xa201, 0xe42e,
+ 0xba40, 0xba4e, 0xba40, 0xba4c, 0xba40, 0xf0aa, 0xba66, 0xba40,
+ 0xf07a, 0xba6a, 0xba40, 0xf04a, 0xba6a, 0xa203, 0xe42e, 0xa201,
+ 0xe42e, 0xba41, 0xf21b, 0xe0c3, 0x013c, 0xa200, 0x3c7c, 0xe161,
+ 0x0220, 0x287c, 0xe0c2, 0x013e, 0xa002, 0x3c7c, 0xba4e, 0x3d11,
+ 0xe0c2, 0x013f, 0xa110, 0xf328, 0xd022, 0x003e, 0xe184, 0x0869,
+ 0x287c, 0xe0c2, 0x013e, 0xa002, 0x3c7c, 0xba4e, 0xf27a, 0x3d11,
+ 0xe0c2, 0x013f, 0xe190, 0xba40, 0xf19a, 0xe0c2, 0x013c, 0xae02,
+ 0xe055, 0xe004, 0x0040, 0x3c7c, 0xe162, 0x0260, 0xd022, 0x003f,
+ 0xe184, 0x0883, 0x287c, 0xe0c2, 0x013e, 0xa002, 0x3c7c, 0xba4e,
+ 0xf0da, 0x3d12, 0xe0c2, 0x013f, 0xe190, 0x4e26, 0x3e26, 0xe0c3,
+ 0x013d, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa202, 0xe42e, 0xd180,
+ 0x0004, 0xcb00, 0xf7f8, 0xe42e, 0xd180, 0x0004, 0x28be, 0x4ca0,
+ 0xcf0a, 0xcb00, 0xf7c8, 0xe42e, 0xc868, 0xa80e, 0x3c7a, 0x747a,
+ 0xe42e, 0xba7e, 0x2ad9, 0x28e4, 0xa120, 0xb615, 0x3ed9, 0xe42b,
+ 0xa200, 0x3ce2, 0xe162, 0x0800, 0xba4e, 0x2ae2, 0xa803, 0xf049,
+ 0xae10, 0x3ce1, 0xf03e, 0x4ce1, 0x3d12, 0x2ae2, 0xa003, 0x3ee2,
+ 0xa80f, 0xe41b, 0x0917, 0x28d9, 0xf0aa, 0xba2e, 0xa102, 0xf02a,
+ 0xf6ce, 0x28e2, 0xa802, 0xf03a, 0x28e1, 0x3d12, 0xa211, 0x28e2,
+ 0xa80e, 0xf0ba, 0xe045, 0xaf03, 0xf06b, 0xa103, 0x3e50, 0xa201,
+ 0x8650, 0x3f12, 0xe41e, 0x0917, 0xa201, 0xba2e, 0xa102, 0xb631,
+ 0xe162, 0x0800, 0x28e3, 0x3d12, 0x28e2, 0x3d12, 0x3f12, 0xa200,
+ 0x3d12, 0xe0c1, 0x006b, 0x28e4, 0xa002, 0xae06, 0xe041, 0xaf06,
+ 0x3ce4, 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0800, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xe1e1, 0x28d9, 0xe41a, 0x088f, 0xe42e, 0xa200,
+ 0x3ce7, 0xe0c0, 0x005c, 0xe0c1, 0x0065, 0xaf12, 0xa802, 0xaf15,
+ 0xa803, 0xe016, 0xe056, 0xf04a, 0xa200, 0x3cd9, 0xe42e, 0x28e8,
+ 0xf05a, 0xe0c0, 0x005d, 0xe42a, 0xf7be, 0xe0c0, 0x005d, 0xe00a,
+ 0x0200, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3ce8, 0xf71e, 0xd112,
+ 0x0004, 0xe0c0, 0x006b, 0xe000, 0x0088, 0x08e7, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x0800, 0xd113, 0x0002, 0xe1e1, 0xe162, 0x0800,
+ 0x28e5, 0x2ae7, 0xa010, 0xa011, 0x3ce5, 0x3ee7, 0x1ae6, 0xe41b,
+ 0x08f7, 0xa200, 0x3ce8, 0xe42e, 0x2857, 0xe0c2, 0x003f, 0xd180,
+ 0x0002, 0xcb00, 0xcb03, 0xe409, 0x0999, 0xf7c8, 0xcb0c, 0x3060,
+ 0xaf02, 0x3061, 0xaf02, 0x306f, 0xaf02, 0x3070, 0xaf02, 0x306a,
+ 0xaf02, 0x3065, 0xaf02, 0xf03a, 0xcb16, 0x3c64, 0xa200, 0x2a70,
+ 0x4e60, 0xe017, 0x4641, 0xb632, 0x3c6e, 0xcf24, 0xcb22, 0xaf08,
+ 0xa802, 0x4c6f, 0xae02, 0x4c70, 0x2a60, 0xe055, 0xb636, 0x3c79,
+ 0x286a, 0x4c70, 0x4c6f, 0xf08a, 0xd190, 0x0001, 0xcb20, 0xcb03,
+ 0xe409, 0x0999, 0xf7c8, 0x746a, 0xa200, 0x1860, 0x2a61, 0xf03b,
+ 0xb808, 0xf28d, 0xcf08, 0xe0c2, 0x012a, 0xa200, 0x2a60, 0xe017,
+ 0x4e6e, 0x4e6a, 0xb652, 0xcf20, 0xd180, 0x0001, 0xcb00, 0xcb03,
+ 0xf199, 0xf7d8, 0xcb20, 0xcb03, 0xf159, 0xf7d8, 0x7449, 0xa200,
+ 0x2a60, 0xb636, 0xcf04, 0xa200, 0x2a6a, 0xe017, 0x4660, 0xb6d2,
+ 0xcf04, 0xa200, 0x2a6e, 0xb652, 0xcf04, 0xa200, 0xe41e, 0x0e03,
+ 0xe42e, 0xe16b, 0xa200, 0xcf02, 0xe42e, 0xe167, 0x02a0, 0xe166,
+ 0x02a8, 0xcb26, 0xd022, 0x0003, 0xe184, 0x09a7, 0x3116, 0xaf02,
+ 0xcb2a, 0x3517, 0x3d17, 0xcb2c, 0x3517, 0x3d17, 0xcb2e, 0x3517,
+ 0x3d17, 0xcb30, 0x3517, 0x3d17, 0xe42e, 0x3c50, 0x2857, 0xe0c2,
+ 0x003f, 0xd192, 0x0002, 0xd182, 0x0001, 0xcb0c, 0xaf04, 0xa806,
+ 0xf038, 0xa210, 0xcf0c, 0xa200, 0x3c60, 0x2a41, 0xb652, 0xcf04,
+ 0xd190, 0x0002, 0xcb20, 0xcb03, 0xf0b9, 0xf7d8, 0x286f, 0xae02,
+ 0x4c70, 0xb634, 0x3c79, 0x2850, 0xe41e, 0x0e03, 0xe42e, 0xe16b,
+ 0xa200, 0xcf02, 0xe42e, 0xa201, 0xb800, 0xe42d, 0xf08a, 0xa17e,
+ 0xf7ca, 0xa102, 0xa87e, 0xe041, 0x3e47, 0xe42e, 0xa043, 0xf75e,
+ 0xa200, 0x3c0b, 0x2208, 0x4e09, 0x28b5, 0xf05a, 0xe0c1, 0x0068,
+ 0x3608, 0x3e09, 0xe0c0, 0x0069, 0xe042, 0xe41e, 0x0b89, 0xe41e,
+ 0x0b68, 0xe004, 0xffff, 0x3c0a, 0xe41e, 0x0a51, 0xe41e, 0x0ac4,
+ 0xd071, 0x802a, 0xe181, 0xa200, 0x3c0e, 0xe41e, 0x0a70, 0xa202,
+ 0x3c0e, 0xe41e, 0x0a70, 0xa200, 0x3c0e, 0xd037, 0x0080, 0xe128,
+ 0xe42e, 0xa200, 0x3c0b, 0xe41e, 0x0b60, 0xe0c0, 0x0062, 0xaf0c,
+ 0xa802, 0xf10a, 0xe0c1, 0x0048, 0xe0c0, 0x0060, 0xe045, 0xaf13,
+ 0xae03, 0xa109, 0x3e0b, 0xf063, 0xe0c0, 0x0061, 0xae04, 0xe042,
+ 0x3c0b, 0xe0c0, 0x0060, 0x3408, 0x3c09, 0xe0c0, 0x0061, 0xae04,
+ 0x3c0a, 0x28b4, 0xf0aa, 0xe0c1, 0x0060, 0xe0c0, 0x0064, 0xe042,
+ 0xe41e, 0x0b89, 0xe41e, 0x0b68, 0xe41e, 0x0a51, 0xe41e, 0x0ac4,
+ 0xd071, 0x802a, 0xe181, 0xa200, 0x3c0e, 0xe41e, 0x0a70, 0xa202,
+ 0x3c0e, 0xe41e, 0x0a70, 0xa200, 0x3c0e, 0xd037, 0x0080, 0xe128,
+ 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035,
+ 0x0000, 0xd036, 0x00ff, 0xd038, 0x0000, 0xe42e, 0xcb21, 0xa80d,
+ 0xf7e9, 0xd04c, 0x0001, 0xe41e, 0x0a70, 0xd04c, 0x0000, 0xe004,
+ 0x0080, 0x2a0e, 0xb616, 0xcc6e, 0x280e, 0xe016, 0x3c0e, 0xe470,
+ 0xca28, 0xf7f8, 0x28ab, 0xf0da, 0xa802, 0xf06a, 0x3cbe, 0x28a6,
+ 0xe01a, 0x3ca5, 0xe42e, 0xe41e, 0x0b12, 0xa202, 0x3cab, 0xe42e,
+ 0xe082, 0x3c0c, 0xe004, 0x0048, 0xe092, 0xd027, 0x0000, 0xe41e,
+ 0x0ace, 0xd027, 0x0001, 0x28a0, 0x4ca5, 0xf348, 0xe004, 0x0000,
+ 0x2a0e, 0xf03b, 0xe000, 0x0080, 0xce22, 0x2008, 0x4c09, 0x2e0b,
+ 0xae11, 0xe042, 0xce20, 0xd112, 0x0080, 0xe0c0, 0x0043, 0xa806,
+ 0xae02, 0xa022, 0xce26, 0x2c0b, 0xe000, 0x0002, 0x3c0b, 0x1c0a,
+ 0xf024, 0x3c0b, 0x28a6, 0xf168, 0x2008, 0x4c09, 0x2e0b, 0xae11,
+ 0xe042, 0x9f01, 0x28ae, 0xf0ea, 0xa201, 0x20ac, 0x4cad, 0xe002,
+ 0x0200, 0x34ac, 0x3cad, 0xb64d, 0x3eab, 0xf04b, 0xe000, 0x0200,
+ 0x3cad, 0x280c, 0xe092, 0xe42e, 0x2008, 0x4c09, 0x2e0b, 0xae11,
+ 0xe042, 0xe005, 0x0048, 0xe093, 0x9f01, 0xe42e, 0xe0c1, 0x0043,
+ 0xa809, 0xe429, 0x28b4, 0x4cae, 0xe428, 0xa200, 0x3c0d, 0xe0c0,
+ 0x0045, 0xaf04, 0x305d, 0x2008, 0x4c09, 0x2e0b, 0xae11, 0xe042,
+ 0x8111, 0x9e89, 0xe045, 0xf043, 0x2c0a, 0xae10, 0xe041, 0xe003,
+ 0x0200, 0xe423, 0x285d, 0xf08a, 0xe001, 0x0200, 0x36ac, 0x3ead,
+ 0xa202, 0x3cae, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf068, 0xe0c0,
+ 0x0045, 0x30a0, 0x28a0, 0xe428, 0x28a6, 0xe01a, 0x3ca5, 0xe428,
+ 0x280d, 0xf568, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf51a, 0xe0c0,
+ 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c0d,
+ 0xf47e, 0xe42e, 0xe004, 0x0000, 0x2a0e, 0xf039, 0xe000, 0x0200,
+ 0x08ad, 0xe049, 0xa807, 0x3ead, 0xaf04, 0xb432, 0x3cb0, 0xe008,
+ 0x00ff, 0xcc78, 0xa200, 0xcc7a, 0xe004, 0x01b7, 0xcc7a, 0xe42e,
+ 0x28b4, 0xf1b8, 0x28ab, 0xa802, 0xe42a, 0xc867, 0x1ab0, 0xa105,
+ 0xe04a, 0xe000, 0x00fe, 0xf030, 0xe001, 0x0100, 0xa202, 0xb60a,
+ 0xe429, 0xc869, 0xb636, 0xe42b, 0xa208, 0x18ad, 0xaf07, 0xe046,
+ 0xe049, 0xa200, 0xb62e, 0xe42e, 0xe41e, 0x0b7d, 0xe42e, 0xe0c0,
+ 0x0048, 0xe002, 0x0400, 0xc867, 0xe009, 0x007f, 0xa107, 0xae05,
+ 0xe042, 0xc869, 0xaf07, 0xe015, 0xa807, 0xe042, 0x2208, 0x4e09,
+ 0xe045, 0xf047, 0x2e0a, 0xae11, 0xe042, 0xe0c2, 0x0046, 0xe42e,
+ 0xe161, 0x0800, 0xa200, 0x3d11, 0xe004, 0x01b7, 0x3d11, 0xe42e,
+ 0xca29, 0xf7f9, 0xe0c0, 0x0049, 0xe049, 0xaf06, 0xae06, 0xa80f,
+ 0xe01b, 0xae07, 0xe042, 0xce20, 0xd111, 0x0800, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xc872, 0xe049, 0xa80f,
+ 0xe01b, 0xaf06, 0xe042, 0x22b8, 0x4eb9, 0xe045, 0xa200, 0xb62e,
+ 0xe42e, 0xe0c1, 0x0049, 0xe045, 0x36b8, 0x3eb9, 0xe42e, 0xe0c0,
+ 0x0066, 0x3cba, 0x34bb, 0xe0c0, 0x0067, 0x3cbc, 0x34bd, 0xe0c0,
+ 0x0069, 0xe167, 0x0ba0, 0x3d17, 0x3517, 0xe0c0, 0x006a, 0x3d17,
+ 0x3517, 0xe0c0, 0x006b, 0x3d17, 0x3517, 0xe42e, 0xa200, 0xe0c2,
+ 0x0320, 0xcc8e, 0x283b, 0xe408, 0x0cd5, 0xa200, 0x3c04, 0x3c05,
+ 0xa200, 0x3cdb, 0x3ce9, 0x3cda, 0xe004, 0x00c6, 0xe0c2, 0x017c,
+ 0xe004, 0x0004, 0xe0c2, 0x017d, 0xe0c0, 0x0050, 0xaf04, 0x3002,
+ 0xaf02, 0x305e, 0xaf06, 0x3071, 0xaf08, 0x3010, 0xaf02, 0x305f,
+ 0xaf06, 0x3072, 0xe0c0, 0x0050, 0xaf1c, 0xa802, 0xe005, 0x0ba6,
+ 0xe09f, 0x3d17, 0x2810, 0x4402, 0x3002, 0x285f, 0x445e, 0x305e,
+ 0x2872, 0x4471, 0x3071, 0x285e, 0xae02, 0x4c02, 0xae06, 0x4c71,
+ 0xae04, 0xe0c2, 0x0169, 0xe0c0, 0x0044, 0xa80e, 0xae1a, 0x4c06,
+ 0xe0c2, 0x0102, 0x2824, 0xe016, 0xae08, 0xa904, 0xe0c2, 0x0100,
+ 0x2855, 0xae20, 0x4c56, 0xae08, 0xe0c2, 0x0101, 0xe0c2, 0x0283,
+ 0xcf60, 0xa200, 0xe0c2, 0x0103, 0xe0c2, 0x0113, 0xe0c2, 0x0120,
+ 0xe0c2, 0x0121, 0xe0c2, 0x0122, 0xe0c2, 0x0123, 0xe0c2, 0x0303,
+ 0xe0c2, 0x0168, 0xa27e, 0xe0c2, 0x012a, 0x2826, 0xe0c2, 0x013d,
+ 0xe418, 0x1028, 0x2842, 0xf078, 0x2a2a, 0xa105, 0xe017, 0x2813,
+ 0xe419, 0x10b5, 0x2803, 0x4442, 0xf218, 0x2a03, 0xe41e, 0x1070,
+ 0xe404, 0x0d7f, 0x3c12, 0x3c15, 0xe0c2, 0x0077, 0xa204, 0xe0c2,
+ 0x0208, 0xe0c2, 0x0210, 0x8412, 0xc786, 0xe018, 0xe000, 0x0100,
+ 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x020d, 0x2117, 0x4d17, 0xe0c2,
+ 0x020e, 0x2117, 0x4d17, 0xe0c2, 0x020f, 0x2803, 0xf0ca, 0xa201,
+ 0xe41e, 0x1070, 0xe404, 0x0d7f, 0x3c11, 0x3c15, 0x2a42, 0xf03b,
+ 0xe0c2, 0x0077, 0x2842, 0x3c43, 0xf128, 0x2816, 0x3c15, 0x2812,
+ 0x2a03, 0xf05b, 0x2812, 0xe41e, 0x10ad, 0x2811, 0x3c16, 0x2814,
+ 0x3c13, 0x2812, 0x3c14, 0xa205, 0xe412, 0x10a6, 0x284e, 0xf074,
+ 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xe418, 0x0fb3, 0xe41e, 0x0e63,
+ 0x2815, 0xe0c2, 0x0071, 0xf024, 0x3c17, 0xa202, 0xe0c2, 0x0302,
+ 0xa202, 0xae02, 0xa902, 0xe0c2, 0x0312, 0xa220, 0xe0c2, 0x0313,
+ 0x8413, 0xc786, 0xe018, 0xe000, 0x0100, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x0380, 0x2117, 0x4d17, 0xe0c2, 0x0381, 0x2117, 0x4d17,
+ 0xe0c2, 0x0382, 0x8414, 0xc786, 0xe018, 0xe000, 0x0100, 0xe09e,
+ 0x2117, 0x4d17, 0xe0c2, 0x0383, 0x2117, 0x4d17, 0xe0c2, 0x0384,
+ 0x2117, 0x4d17, 0xe0c2, 0x0385, 0xa200, 0xe0c2, 0x0302, 0x2803,
+ 0xf35a, 0xe0c1, 0x0041, 0xe004, 0x0000, 0xae10, 0xe042, 0x2a10,
+ 0xf03b, 0x20bb, 0x4cba, 0xe0c2, 0x0211, 0xe0c1, 0x0041, 0xe004,
+ 0x003c, 0xae10, 0xe042, 0x2a5f, 0xf03b, 0x20bd, 0x4cbc, 0xe0c2,
+ 0x0212, 0x8411, 0xc786, 0xe018, 0xe000, 0x0100, 0xe09e, 0x2117,
+ 0x4d17, 0xe0c2, 0x0214, 0x2117, 0x4d17, 0xe0c2, 0x0215, 0x2117,
+ 0x4d17, 0xe0c2, 0x0216, 0xa202, 0xe0c2, 0x0210, 0xa200, 0xcf68,
+ 0x2842, 0xf04a, 0xa200, 0xe0c2, 0x0208, 0xe0c0, 0x0065, 0xaf18,
+ 0xa802, 0xae10, 0xa960, 0x4c34, 0xa102, 0x2a42, 0xb432, 0xae04,
+ 0x4c32, 0xae02, 0x4c33, 0xe0c2, 0x0204, 0x2a24, 0xe017, 0x2849,
+ 0xae02, 0x4c40, 0xae02, 0x4c41, 0xae02, 0x4c3b, 0xae02, 0x4c39,
+ 0xae02, 0x4c7e, 0xae02, 0x4c7d, 0xae02, 0x4c38, 0xae04, 0x4c30,
+ 0xae02, 0x4c3c, 0xae04, 0x4c3d, 0xae04, 0x4c34, 0xae02, 0x4c37,
+ 0xae02, 0xe056, 0xcf06, 0xe162, 0x0200, 0xd022, 0x0003, 0xe184,
+ 0x0d0a, 0xae08, 0x4d12, 0xcf28, 0xa202, 0xae02, 0x4c35, 0xae0a,
+ 0x4c32, 0xae02, 0x4c33, 0xe0c2, 0x0104, 0xa202, 0xe0c2, 0x0106,
+ 0xa201, 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x117c, 0xe0c0, 0x0065,
+ 0xaf0a, 0xa81e, 0xe40a, 0x0d6e, 0x28d6, 0xf27a, 0xa210, 0x3c50,
+ 0xe162, 0x02b0, 0xe163, 0x02e8, 0xa201, 0xd022, 0x0002, 0xe184,
+ 0x0d34, 0x2912, 0xa81e, 0xe055, 0xae09, 0x2912, 0xa81e, 0xe055,
+ 0x3f13, 0x2850, 0xa102, 0xf03a, 0x3c50, 0xf6fe, 0xe162, 0x02f2,
+ 0x2112, 0x4d02, 0xca29, 0xf7f9, 0xce20, 0xd112, 0x0008, 0xd111,
+ 0x02e8, 0xd113, 0x0002, 0xe1e1, 0xe162, 0x02f0, 0xc410, 0xa200,
+ 0x2ad6, 0xb632, 0xae10, 0x3d12, 0xa220, 0x3d12, 0x8132, 0xa200,
+ 0x2ad7, 0xb652, 0xae10, 0x3d12, 0x2854, 0x5832, 0x3d12, 0x8132,
+ 0x2ad8, 0x28ea, 0xe01a, 0xe051, 0xa200, 0xb692, 0xae10, 0x4cea,
+ 0x3d12, 0x2854, 0x5832, 0xb616, 0x3d12, 0x8132, 0xa200, 0xe0c2,
+ 0x0103, 0xe0c2, 0x0113, 0xe0c2, 0x0120, 0xe0c2, 0x0121, 0xe0c2,
+ 0x0122, 0xe0c2, 0x0123, 0xe0c2, 0x0303, 0xa202, 0xe42e, 0xe16a,
+ 0x2812, 0xe412, 0x109f, 0x2803, 0xe42a, 0x2811, 0xe412, 0x109f,
+ 0xa200, 0xe42e, 0xf04a, 0x3c15, 0xe0c2, 0x0071, 0x2a2a, 0x2842,
+ 0xb435, 0x3e2a, 0xa107, 0xf039, 0xa204, 0x3c2a, 0x2842, 0x3c43,
+ 0x2021, 0x4c22, 0xa002, 0x3421, 0x3c22, 0xe0c2, 0x0070, 0x2885,
+ 0xe0c2, 0x0072, 0x2834, 0xa106, 0xe01a, 0xae02, 0x4c25, 0xae02,
+ 0x4c3c, 0xae06, 0x4cd5, 0xae04, 0x4c3e, 0xae02, 0x4c3a, 0xae02,
+ 0x4c39, 0xae04, 0x4c3d, 0xae02, 0x4c32, 0xae24, 0x2a34, 0xa103,
+ 0xe056, 0x2a4b, 0xae05, 0xe056, 0xe0c2, 0x0073, 0xe41e, 0x018c,
+ 0xe0c2, 0x0057, 0x282f, 0xe0c2, 0x0056, 0xc84a, 0xc84d, 0xae20,
+ 0xe056, 0xe0c2, 0x0053, 0xe0c0, 0x0065, 0xaf0a, 0xa802, 0xf13a,
+ 0xe162, 0x0800, 0x28e4, 0x3d12, 0x28e5, 0x3d12, 0xe0c0, 0x006b,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0800, 0xd112, 0x0004, 0xd113,
+ 0x0002, 0xe1e1, 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xf0da, 0xe0c0,
+ 0x006a, 0xca29, 0xf7f9, 0xce20, 0xd112, 0x000c, 0xd111, 0x02f0,
+ 0xd113, 0x0002, 0xe1e1, 0xa200, 0x3ce5, 0x3ce4, 0x3cd9, 0x3ce7,
+ 0x3ce8, 0x284e, 0xe424, 0x2818, 0xe000, 0x02d0, 0xe094, 0x2902,
+ 0xa81c, 0x3d02, 0xe42e, 0x2ad7, 0xf07b, 0xae02, 0x4cda, 0xae0c,
+ 0x4c64, 0xe41e, 0x10bd, 0x2803, 0xe40a, 0x0e14, 0xd1b6, 0x0001,
+ 0xd1b5, 0x0001, 0xcb6a, 0xf7f8, 0x2865, 0xae08, 0x4c60, 0xe0c2,
+ 0x0114, 0x2836, 0xae0a, 0x4c64, 0xe0c2, 0x0115, 0xe0c0, 0x012a,
+ 0xe0c2, 0x0116, 0x2ad8, 0x28ea, 0xe01a, 0xe051, 0xf28b, 0xe004,
+ 0x0780, 0x08e9, 0xe094, 0x2860, 0xf208, 0x2a79, 0xa803, 0xae1f,
+ 0xe0c0, 0x03b0, 0xb616, 0x3512, 0x3d0a, 0x2902, 0xe008, 0x7fff,
+ 0xe056, 0x3d12, 0x8112, 0x28ea, 0xa102, 0xf0fa, 0x2a79, 0xa805,
+ 0xae1d, 0xe0c0, 0x03c0, 0xb616, 0x3512, 0x3d0a, 0x2902, 0xe008,
+ 0x7fff, 0xe056, 0x3d12, 0x8112, 0xe41e, 0x1103, 0xe0c0, 0x0111,
+ 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0xe41e, 0x0f2e, 0xe0c0, 0x0060,
+ 0xaf08, 0xa806, 0xe42a, 0x284e, 0xf064, 0xa202, 0x3c95, 0xa203,
+ 0xe41e, 0x0fef, 0xe42e, 0x284e, 0xf1d4, 0x280f, 0xf1ba, 0xa210,
+ 0x3c50, 0xa201, 0xe161, 0x02d0, 0xa200, 0x3c1e, 0xd022, 0x0003,
+ 0xe184, 0x0e80, 0x2911, 0xa80e, 0xf0aa, 0x1850, 0xf082, 0x0850,
+ 0xe049, 0xa803, 0xf04b, 0x3c50, 0x281e, 0x3c18, 0x281e, 0xa002,
+ 0x3c1e, 0x281c, 0xe428, 0xa2fe, 0x3c1a, 0x3c1b, 0xa200, 0x3c1e,
+ 0x3c1d, 0xe161, 0x02d0, 0xd022, 0x0003, 0xe184, 0x0ea4, 0x2901,
+ 0x3c50, 0x4c1d, 0xf058, 0x281e, 0x3c19, 0xa202, 0x3c1d, 0x2850,
+ 0xe049, 0xa804, 0xf03a, 0x281e, 0x3c1a, 0xa809, 0xf03b, 0x281e,
+ 0x3c1b, 0x281e, 0xa002, 0x3c1e, 0x8111, 0x2819, 0xe000, 0x02d0,
+ 0xe094, 0x2842, 0xe016, 0xae04, 0xa902, 0x3d02, 0x2842, 0xe428,
+ 0x281b, 0xf084, 0xe000, 0x02d0, 0xe094, 0x2902, 0xa904, 0xa816,
+ 0x3d02, 0x282a, 0xa104, 0xe428, 0x281a, 0xe424, 0xe000, 0x02d0,
+ 0xe094, 0x2902, 0xa81a, 0x3d02, 0xe42e, 0x284e, 0xf1b4, 0xa210,
+ 0x3c50, 0xa201, 0xe161, 0x02d0, 0xa200, 0x3c1e, 0xd022, 0x0003,
+ 0xe184, 0x0ee0, 0x2911, 0xa80e, 0xf0aa, 0x1850, 0xf082, 0x0850,
+ 0xe049, 0xa803, 0xf04b, 0x3c50, 0x281e, 0x3c18, 0x281e, 0xa002,
+ 0x3c1e, 0xa200, 0x3c1e, 0x3c1d, 0x2812, 0xf144, 0xe161, 0x02d0,
+ 0xd022, 0x0003, 0xe184, 0x0ef8, 0x2901, 0x3c50, 0xa81e, 0x4c1d,
+ 0xf058, 0x281e, 0x3c19, 0xa202, 0x3c1d, 0x281e, 0xa002, 0x3c1e,
+ 0x8111, 0x281a, 0xf154, 0xe161, 0x02d0, 0xd022, 0x0003, 0xe184,
+ 0x0f07, 0x2901, 0xe049, 0xa810, 0xf03a, 0xa86f, 0x3f01, 0x8111,
+ 0x281a, 0xe000, 0x02d0, 0xe094, 0x2902, 0xa910, 0x3d02, 0x281a,
+ 0xf084, 0x281a, 0xe000, 0x02d0, 0xe094, 0x2902, 0xa87a, 0x3d02,
+ 0x2819, 0xe000, 0x02d0, 0xe094, 0xa22a, 0xa201, 0xb632, 0x3d02,
+ 0x281b, 0xf0a4, 0xe000, 0x02d0, 0xe094, 0x2902, 0xa904, 0xa876,
+ 0x3d02, 0x281b, 0x3c1a, 0x2819, 0x3c1b, 0xe42e, 0x2a64, 0x2858,
+ 0xa802, 0xf0e8, 0xae11, 0x3e96, 0x2858, 0xa002, 0x1855, 0xe428,
+ 0x2858, 0xaf02, 0xe000, 0x0300, 0xe09e, 0x3f07, 0xf20e, 0x2a96,
+ 0x2858, 0xaf02, 0xe000, 0x0300, 0xe09e, 0x4e64, 0x3f07, 0x2858,
+ 0xa002, 0x1855, 0xe428, 0xf13e, 0x2a58, 0x2897, 0xa803, 0xe429,
+ 0x2858, 0xe41a, 0x0f89, 0x2858, 0xaf02, 0xe000, 0x0340, 0xe09e,
+ 0x2907, 0xe049, 0xaf10, 0xa83f, 0x3e97, 0xe42e, 0x2855, 0xa002,
+ 0xaf02, 0xa006, 0xa2f9, 0xe052, 0xae02, 0x3c50, 0x2859, 0x2a32,
+ 0xf03b, 0xae02, 0x0833, 0x3c51, 0xe0c1, 0x0041, 0x20f0, 0x4cf1,
+ 0xe041, 0xe004, 0x029c, 0xae10, 0xe042, 0x2a19, 0xae1b, 0xe042,
+ 0x8451, 0x8250, 0xe019, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0300, 0x2850, 0xaf02, 0xce24, 0xd113, 0x0002, 0xca28, 0xf7f8,
+ 0xe42e, 0x2855, 0xa002, 0xaf02, 0xa006, 0xa2f9, 0xe052, 0xae02,
+ 0x3c50, 0x2859, 0x2a3b, 0xf02b, 0x0844, 0x3c51, 0xe0c1, 0x0041,
+ 0x20f0, 0x4cf1, 0xe041, 0xe004, 0x029c, 0xae10, 0xe042, 0x2a18,
+ 0xae1b, 0xe042, 0x8451, 0x8250, 0xe019, 0xe042, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x0340, 0x2850, 0xaf02, 0xce24, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0xa202, 0x3c0f, 0xe0c0, 0x0060, 0xaf08,
+ 0x3004, 0xaf02, 0x3005, 0xe0c1, 0x0060, 0xa81f, 0xae08, 0xe055,
+ 0xe0c3, 0x014e, 0x2855, 0xa102, 0xae20, 0x4c56, 0xa102, 0xe0c2,
+ 0x0142, 0x2806, 0xe0c2, 0x0141, 0xe0c0, 0x0064, 0xe0c2, 0x014c,
+ 0x8417, 0xc786, 0xe018, 0xe000, 0x0100, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x0143, 0x2117, 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17,
+ 0xe0c2, 0x0145, 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062,
+ 0xe0c2, 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0xe42e, 0x2858,
+ 0x4c59, 0xe01a, 0x3c94, 0x4605, 0xe419, 0x0f4c, 0xae02, 0x4c94,
+ 0xae02, 0x4c95, 0xae0e, 0x4c58, 0xae0e, 0x2a3b, 0xf02b, 0x0844,
+ 0x0859, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2,
+ 0x014a, 0xe42e, 0x2858, 0xa002, 0x3c58, 0x1855, 0xe428, 0x3c58,
+ 0x2859, 0xa002, 0x3c59, 0x1856, 0xe42e, 0xa204, 0xae0e, 0x4c55,
+ 0xa102, 0xae0e, 0x4c56, 0xa102, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2,
+ 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe0c1, 0x014b, 0xf7e9, 0xe42e,
+ 0xa802, 0xf14a, 0xe0c2, 0x013c, 0xa200, 0x3c7c, 0xe161, 0x0220,
+ 0xd022, 0x003f, 0xe184, 0x103b, 0x287c, 0xe0c2, 0x013e, 0xa002,
+ 0x3c7c, 0x2911, 0xe0c2, 0x013f, 0xe190, 0x2826, 0xaf02, 0xf15a,
+ 0xe0c2, 0x013c, 0xe004, 0x0040, 0x3c7c, 0xe162, 0x0260, 0xd022,
+ 0x003f, 0xe184, 0x1052, 0x287c, 0xe0c2, 0x013e, 0xa002, 0x3c7c,
+ 0x2912, 0xe0c2, 0x013f, 0xe190, 0xa200, 0xe0c2, 0x013c, 0xe42e,
+ 0xa2fa, 0x3c15, 0x3c12, 0x3c17, 0x3c4e, 0x3c16, 0x3c11, 0x3c13,
+ 0x3c14, 0xa200, 0x3cb2, 0x3c43, 0xe161, 0x02b0, 0x2a23, 0xa103,
+ 0x3e50, 0x8650, 0x3d11, 0xe161, 0x02d0, 0xc703, 0x3d11, 0xe42e,
+ 0x28b2, 0x3cb3, 0x28b3, 0xe000, 0x02b0, 0xe092, 0x2901, 0xf0da,
+ 0x28b3, 0xa002, 0x3cb3, 0x1823, 0xf038, 0xa200, 0x3cb3, 0x28b3,
+ 0x18b2, 0xf718, 0xa2fe, 0xe42e, 0xa208, 0xb652, 0x3d01, 0x28b3,
+ 0xa002, 0x3cb2, 0x1823, 0xf038, 0xa200, 0x3cb2, 0x28b3, 0xe42e,
+ 0xe161, 0x02b0, 0x2823, 0xa102, 0xcc44, 0xa200, 0xe184, 0x109b,
+ 0x2b11, 0xa80d, 0xe01b, 0xe042, 0x1823, 0xe01a, 0xe42e, 0xe424,
+ 0xe000, 0x02b0, 0xe092, 0xa200, 0x3d01, 0xe42e, 0xe000, 0x02b0,
+ 0xe092, 0x2901, 0xe056, 0x3d01, 0xe42e, 0xe424, 0xe000, 0x02b0,
+ 0xe092, 0x2901, 0xa806, 0x3d01, 0xe42e, 0xe424, 0xe000, 0x02b0,
+ 0xe092, 0x2901, 0xa80a, 0x3d01, 0xe42e, 0x2a57, 0xa803, 0xf139,
+ 0xae10, 0x3cdc, 0x2a3b, 0xe017, 0x4632, 0xe429, 0x2a54, 0xa103,
+ 0x1a57, 0xe429, 0xe005, 0x0700, 0x0adb, 0xe095, 0x3d02, 0xe41e,
+ 0x10ed, 0xe42e, 0x4cdc, 0xe005, 0x0700, 0x0adb, 0xe095, 0x3d02,
+ 0x28db, 0xa002, 0x3cdb, 0xe002, 0x0080, 0xf068, 0xe41e, 0x10ed,
+ 0xa200, 0x3cdb, 0xe42e, 0x2a3b, 0xe017, 0x4632, 0xe429, 0x2854,
+ 0xa102, 0x1857, 0xe41a, 0x10ed, 0xe42e, 0x2a57, 0x283b, 0xf02a,
+ 0x0a54, 0xaf11, 0xae11, 0xe162, 0x02f6, 0x2112, 0x4d02, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd112, 0x0080, 0xd111, 0x0700, 0xd113,
+ 0x0002, 0xe1e1, 0xe42e, 0x2860, 0xf08a, 0xa201, 0xa204, 0x58eb,
+ 0xa102, 0x3c50, 0x8650, 0x3f12, 0x28e9, 0x2aeb, 0xa004, 0xb452,
+ 0x3ce9, 0xe002, 0x0080, 0xf068, 0xe41e, 0x1123, 0xa200, 0x3ce9,
+ 0xe42e, 0x2a3b, 0xe017, 0x4632, 0xe429, 0x2854, 0xa102, 0x1857,
+ 0xe41a, 0x1123, 0xe42e, 0x28eb, 0xe016, 0x3c50, 0x2a57, 0x283b,
+ 0xf02a, 0x0a54, 0xaf0b, 0x5e50, 0xae11, 0xe162, 0x02fa, 0x2112,
+ 0x4d02, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd112, 0x0080, 0xd111,
+ 0x0780, 0xd113, 0x0002, 0xe1e1, 0xe42e, 0x3e88, 0xa201, 0xf032,
+ 0xe012, 0xa203, 0x3e8c, 0x3c89, 0xaf20, 0xc70f, 0x7c88, 0x3c8a,
+ 0xaf20, 0xae20, 0x4c89, 0xc70f, 0x7c88, 0x3c8b, 0x208a, 0x4c8b,
+ 0x2a8c, 0xe42b, 0xe012, 0xe42e, 0xe167, 0x0bac, 0xe166, 0x02c0,
+ 0xd022, 0x0008, 0xe184, 0x1160, 0x2d17, 0x9f16, 0x2517, 0x4d17,
+ 0x9f16, 0xe166, 0x02d2, 0xd022, 0x0008, 0xe184, 0x1169, 0x2517,
+ 0x4d17, 0x9f16, 0xe166, 0x02db, 0xd022, 0x0008, 0xe184, 0x1172,
+ 0x2517, 0x4d17, 0x9f16, 0xe166, 0x02e4, 0xd022, 0x0008, 0xe184,
+ 0x117a, 0x2d17, 0x9f16, 0xe42e, 0xe0c0, 0x0065, 0xaf18, 0xa802,
+ 0xe40a, 0x11fe, 0xae0a, 0xe0c1, 0x0060, 0xaf0d, 0xa80f, 0xe056,
+ 0xe0c1, 0x0044, 0xa811, 0xe056, 0xae0c, 0xe0c1, 0x0044, 0xa80f,
+ 0xe056, 0xe167, 0x0ba7, 0x2f17, 0xe056, 0xe0c2, 0x0282, 0xe0c0,
+ 0x006e, 0xe0c2, 0x0284, 0xaf20, 0xe0c1, 0x0282, 0xa809, 0xf04b,
+ 0xe049, 0xae1f, 0xf06e, 0xe049, 0xa011, 0xaf09, 0xae07, 0xae21,
+ 0xe056, 0xe0c2, 0x028c, 0xe167, 0x0ba8, 0x2d17, 0x4917, 0xe0c2,
+ 0x0285, 0xe167, 0x0baa, 0x2d17, 0x4917, 0xe0c2, 0x0286, 0xe41e,
+ 0x11ff, 0xe0c0, 0x004a, 0xe0c2, 0x0289, 0xe0c0, 0x004b, 0xe0c2,
+ 0x028a, 0xe0c0, 0x0055, 0xe0c2, 0x028b, 0xe0c1, 0x0041, 0xe004,
+ 0x005c, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167,
+ 0x0ba0, 0x2d17, 0x4917, 0xe0c2, 0x0287, 0xe0c1, 0x0041, 0xe004,
+ 0x0074, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167,
+ 0x0ba2, 0x2d17, 0x4917, 0xe0c2, 0x0288, 0xe0c1, 0x0041, 0xe004,
+ 0x007c, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167,
+ 0x0ba4, 0x2d17, 0x4917, 0xe0c2, 0x028d, 0xe0c0, 0x0065, 0xaf18,
+ 0xa802, 0xe0c2, 0x0280, 0xa210, 0xe0c2, 0x0168, 0xe42e, 0xe167,
+ 0x0bac, 0xe165, 0x028e, 0xe166, 0x02c0, 0xd022, 0x0008, 0xe184,
+ 0x1212, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0x2517, 0x4d17, 0x9f16,
+ 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02d2, 0xd022, 0x0008, 0xe184,
+ 0x121e, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166,
+ 0x02db, 0xd022, 0x0008, 0xe184, 0x122a, 0x2517, 0x4d17, 0x9f16,
+ 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02e4, 0xd022, 0x0008, 0xe184,
+ 0x1235, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe42e, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0005, 0x5555, 0x0004, 0x0000, 0x0003, 0x3333, 0x0002, 0xaaaa,
+ 0x0002, 0x4924, 0x0002, 0x0000, 0x0001, 0xc71c, 0x0001, 0x9999,
+ 0x0001, 0x745d, 0x0001, 0x0000, 0x0f1e, 0x261e, 0x0f00, 0x0b1d,
+ 0x2820, 0x0d03, 0x0a1c, 0x2821, 0x0e03, 0x091b, 0x2822, 0x0f03,
+ 0x081a, 0x2623, 0x1104, 0x0719, 0x2723, 0x1204, 0x0618, 0x2724,
+ 0x1304, 0x0616, 0x2625, 0x1405, 0x0515, 0x2626, 0x1505, 0x0c1f,
+ 0x2920, 0x0c00, 0x0a1e, 0x2820, 0x0d03, 0x091c, 0x2921, 0x0e03,
+ 0x081b, 0x2922, 0x0f03, 0x081a, 0x2823, 0x1003, 0x0719, 0x2724,
+ 0x1104, 0x0617, 0x2726, 0x1204, 0x0516, 0x2726, 0x1404, 0x0515,
+ 0x2626, 0x1505, 0x0b1f, 0x2b20, 0x0b00, 0x0817, 0x211a, 0x091d,
+ 0x0819, 0x251d, 0x0b12, 0x0719, 0x2721, 0x0d0b, 0x0719, 0x2822,
+ 0x0e08, 0x0618, 0x2824, 0x1006, 0x0617, 0x2825, 0x1105, 0x0515,
+ 0x2826, 0x1305, 0x0514, 0x2727, 0x1405, 0x0c1e, 0x2b1f, 0x0c00,
+ 0x0b1b, 0x281e, 0x0c08, 0x0a1a, 0x281f, 0x0d08, 0x0a19, 0x2721,
+ 0x0e07, 0x0918, 0x2722, 0x0f07, 0x0917, 0x2722, 0x1007, 0x0816,
+ 0x2624, 0x1107, 0x0814, 0x2625, 0x1207, 0x0813, 0x2525, 0x1308,
+ 0x0b1f, 0x2c1f, 0x0b00, 0x091d, 0x2b20, 0x0b04, 0x091c, 0x2a21,
+ 0x0c04, 0x081a, 0x2b22, 0x0d04, 0x0719, 0x2a24, 0x0e04, 0x0717,
+ 0x2a25, 0x0f04, 0x0616, 0x2926, 0x1104, 0x0615, 0x2826, 0x1205,
+ 0x0513, 0x2828, 0x1305, 0x0820, 0x3020, 0x0800, 0x071d, 0x3021,
+ 0x0902, 0x061c, 0x2f23, 0x0a02, 0x061a, 0x2f24, 0x0b02, 0x0518,
+ 0x2f26, 0x0c02, 0x0417, 0x2e27, 0x0e02, 0x0415, 0x2d29, 0x0f02,
+ 0x0313, 0x2c2b, 0x1003, 0x0312, 0x2b2b, 0x1203, 0x0520, 0x3620,
+ 0x0500, 0x041e, 0x3622, 0x0600, 0x031b, 0x3625, 0x0700, 0x0319,
+ 0x3527, 0x0800, 0x0217, 0x3529, 0x0900, 0x0215, 0x332a, 0x0b01,
+ 0x0213, 0x322c, 0x0c01, 0x0111, 0x312e, 0x0e01, 0x010f, 0x3030,
+ 0x0f01, 0x001c, 0x481c, 0x0000, 0x0018, 0x491f, 0x0000, 0x0015,
+ 0x4723, 0x0100, 0x0012, 0x4627, 0x0100, 0x000f, 0x442b, 0x0200,
+ 0x000c, 0x422f, 0x0300, 0x000a, 0x3f33, 0x0400, 0x0008, 0x3d36,
+ 0x0500, 0x0006, 0x3a3a, 0x0600, 0xff1a, 0x4e1a, 0xff00, 0xff16,
+ 0x4e1e, 0xff00, 0xff12, 0x4d23, 0xff00, 0xff0f, 0x4b27, 0x0000,
+ 0xff0c, 0x492c, 0x0000, 0xff0a, 0x472f, 0x0100, 0x0008, 0x4333,
+ 0x0200, 0x0006, 0x3f38, 0x0300, 0x0004, 0x3c3c, 0x0400, 0xff17,
+ 0x5417, 0xff00, 0xff13, 0x541c, 0xfe00, 0xff10, 0x5221, 0xfe00,
+ 0xff0c, 0x5125, 0xff00, 0xff09, 0x4e2b, 0xff00, 0xff07, 0x4b30,
+ 0xff00, 0xff05, 0x4735, 0x0000, 0x0003, 0x423a, 0x0100, 0x0002,
+ 0x3e3e, 0x0200, 0xfe15, 0x5a15, 0xfe00, 0xfe10, 0x5a1a, 0xfe00,
+ 0xff0c, 0x581f, 0xfe00, 0xff09, 0x5624, 0xfe00, 0xff06, 0x532b,
+ 0xfd00, 0xff04, 0x4f30, 0xfe00, 0x0002, 0x4a36, 0xfe00, 0x0000,
+ 0x463c, 0xfe00, 0x00ff, 0x4141, 0xff00, 0x2a2c, 0x2a00, 0x1d3b,
+ 0x2305, 0x1a3b, 0x2605, 0x173b, 0x2806, 0x153a, 0x2b06, 0x1239,
+ 0x2d08, 0x1037, 0x3009, 0x0e36, 0x320a, 0x0c34, 0x340c, 0x233a,
+ 0x2300, 0x1d3b, 0x2305, 0x1a3c, 0x2505, 0x173c, 0x2805, 0x153b,
+ 0x2a06, 0x123a, 0x2d07, 0x1038, 0x2f09, 0x0e36, 0x320a, 0x0c34,
+ 0x340c, 0x213e, 0x2100, 0x1d3d, 0x2204, 0x1a3d, 0x2504, 0x173d,
+ 0x2705, 0x143c, 0x2a06, 0x123a, 0x2d07, 0x1038, 0x3008, 0x0e36,
+ 0x320a, 0x0c34, 0x340c, 0x2040, 0x2000, 0x1c3e, 0x2204, 0x193e,
+ 0x2504, 0x163d, 0x2805, 0x143c, 0x2b05, 0x113b, 0x2d07, 0x0f39,
+ 0x3008, 0x0d37, 0x3309, 0x0b35, 0x350b, 0x1f42, 0x1f00, 0x1634,
+ 0x1b1b, 0x1537, 0x2014, 0x1438, 0x2410, 0x1238, 0x280e, 0x1038,
+ 0x2c0c, 0x0f37, 0x2e0c, 0x0e35, 0x310c, 0x0d33, 0x330d, 0x2040,
+ 0x2000, 0x1a3a, 0x1f0d, 0x183a, 0x220c, 0x163a, 0x240c, 0x1438,
+ 0x280c, 0x1237, 0x2b0c, 0x1135, 0x2d0d, 0x1034, 0x2f0d, 0x0e32,
+ 0x320e, 0x1f41, 0x2000, 0x1b3d, 0x2008, 0x183d, 0x2308, 0x163c,
+ 0x2608, 0x143a, 0x2909, 0x1239, 0x2c09, 0x1038, 0x2e0a, 0x0e36,
+ 0x310b, 0x0d33, 0x330d, 0x115d, 0x1200, 0x0e5c, 0x1600, 0x0a5b,
+ 0x1b00, 0x0858, 0x2000, 0x0655, 0x2500, 0x0450, 0x2c00, 0x034a,
+ 0x3201, 0x0245, 0x3801, 0x013f, 0x3f01, 0x1060, 0x1000, 0x0c60,
+ 0x1400, 0x095e, 0x1900, 0x075b, 0x1e00, 0x0557, 0x2400, 0x0352,
+ 0x2b00, 0x024c, 0x3200, 0x0146, 0x3900, 0x013f, 0x3f01, 0x0e64,
+ 0x0e00, 0x0a64, 0x1200, 0x0762, 0x1700, 0x055e, 0x1d00, 0x035a,
+ 0x2300, 0x0254, 0x2a00, 0x014e, 0x3100, 0x0147, 0x3800, 0x0040,
+ 0x4000, 0x0c68, 0x0c00, 0x0868, 0x1000, 0x0665, 0x1500, 0x0461,
+ 0x1b00, 0x025d, 0x2100, 0x0157, 0x2800, 0x0050, 0x3000, 0x0048,
+ 0x3800, 0x0040, 0x4000, 0x7f01, 0x7808, 0x7010, 0x6818, 0x6020,
+ 0x5828, 0x5030, 0x4838, 0x4040, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x10bf, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x014b, 0xe40e, 0x013f, 0xe40e, 0x007e, 0xe40e,
+ 0x0143, 0xe40e, 0x007e, 0xe40e, 0x0147, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x0155, 0xe40e, 0x0168, 0xe41e,
+ 0x1800, 0xe40e, 0x007e, 0xe41e, 0x18ae, 0xe40e, 0x007e, 0xe41e,
+ 0x18af, 0xe40e, 0x007e, 0xe41e, 0x01f4, 0xe40e, 0x007e, 0xe41e,
+ 0x18cc, 0xe40e, 0x007e, 0x2885, 0xf058, 0xe41e, 0x01fe, 0xe40e,
+ 0x007e, 0xe41e, 0x197f, 0xe40e, 0x007e, 0xe0c0, 0x005a, 0x3cee,
+ 0xe41e, 0x0100, 0xa206, 0xe41e, 0x0171, 0xe0c0, 0x005a, 0x3cee,
+ 0xe41e, 0x0100, 0xa226, 0xe41e, 0x0187, 0xe41e, 0x019d, 0xe42e,
+ 0xa224, 0xe41e, 0x0187, 0xe41e, 0x01b8, 0xa204, 0xe41e, 0x0171,
+ 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0c00, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0x3ced,
+ 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042, 0x22f0, 0x4ef1,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100,
+ 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe161, 0x07e0, 0x8911,
+ 0x0034, 0x8911, 0x0033, 0x8911, 0x0035, 0x8911, 0x0036, 0x8911,
+ 0x0037, 0x8911, 0x0038, 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11,
+ 0xcc62, 0x2111, 0x4d11, 0xcc64, 0x2111, 0x4d11, 0xcc72, 0xe42e,
+ 0xe161, 0x07e0, 0x8b11, 0x0034, 0x8b11, 0x0033, 0x8b11, 0x0035,
+ 0x8b11, 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038, 0xc860, 0x3511,
+ 0x3d11, 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511, 0x3d11, 0xc872,
+ 0x3511, 0x3d11, 0xe42e, 0xe167, 0x0212, 0xa200, 0x3c06, 0xd022,
+ 0x0007, 0xe184, 0x01e1, 0x2b17, 0xa81f, 0x5a06, 0xe056, 0x2a06,
+ 0xa009, 0x3e06, 0xe0c2, 0x007d, 0xa200, 0x3c06, 0xd022, 0x0007,
+ 0xe184, 0x01f0, 0x2b17, 0xa81f, 0x5a06, 0xe056, 0x2a06, 0xa009,
+ 0x3e06, 0xe0c2, 0x007e, 0xe42e, 0xa200, 0x3c9a, 0x3c99, 0x3c4a,
+ 0x3c4b, 0x3c6e, 0x3c6f, 0xa202, 0x3c9c, 0xe42e, 0x288b, 0xe418,
+ 0x10cf, 0xa200, 0xcc4a, 0xcc4c, 0xcc72, 0x3c8b, 0x3ce7, 0x3cd9,
+ 0x3c3f, 0x3c9d, 0x3c9e, 0x3c9f, 0xe0c2, 0x0074, 0xa2fc, 0xe0c2,
+ 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0xa202, 0xe0c2, 0x0076, 0xe0c0,
+ 0x006c, 0xe002, 0x0088, 0x3cdd, 0xe0c0, 0x0065, 0xaf0a, 0x30e3,
+ 0xe41e, 0x11a4, 0xe408, 0x039a, 0x2890, 0xf24a, 0x2892, 0xa108,
+ 0xf218, 0x28a4, 0xf064, 0xe000, 0x02b2, 0xe09e, 0x2907, 0x3c74,
+ 0xe41e, 0x0fa9, 0xe419, 0x0f6e, 0x28a2, 0x2a63, 0xf02b, 0x28a6,
+ 0x3ca5, 0xe0c2, 0x0071, 0x3ca4, 0xa200, 0x3c92, 0xa202, 0x3c76,
+ 0x244a, 0x4c4b, 0xa002, 0x344a, 0x3c4b, 0xe41e, 0x0547, 0xe40e,
+ 0x038a, 0xe41e, 0x03eb, 0xe42a, 0x2883, 0xe428, 0xe0c0, 0x0065,
+ 0xa802, 0xe0c2, 0x0075, 0xa2fe, 0xe0c2, 0x0077, 0xe41e, 0x0547,
+ 0xe41e, 0x0538, 0xe42a, 0xa2fc, 0xe0c2, 0x0077, 0xd130, 0x0003,
+ 0xd03a, 0x0003, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000,
+ 0xa200, 0xe0c2, 0x030a, 0x3c46, 0x2830, 0xe418, 0x05b2, 0xe404,
+ 0x039a, 0x2830, 0xe41a, 0x055e, 0xe404, 0x039a, 0xe40d, 0x03d1,
+ 0x288f, 0xf08a, 0x2825, 0xf718, 0x288d, 0xf36a, 0xa102, 0x3c8d,
+ 0xf6ce, 0xe0c0, 0x0066, 0xf30a, 0x288e, 0xf2ea, 0xa102, 0xf04a,
+ 0xa102, 0xf05a, 0xf07e, 0x2825, 0xf27a, 0xf04e, 0x2825, 0xa104,
+ 0xf238, 0x288d, 0xa102, 0xf04a, 0x3c8d, 0xe40e, 0x026c, 0xe0c0,
+ 0x0066, 0xa102, 0xf196, 0xe41e, 0x0480, 0x2825, 0xa104, 0xe01a,
+ 0xae12, 0x4cae, 0xae2a, 0x4c25, 0xe0c2, 0x0073, 0xa204, 0xe0c2,
+ 0x0075, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0x3ca5, 0xe0c2, 0x0071,
+ 0x3ca4, 0xe40e, 0x039a, 0x2890, 0xf22a, 0x282e, 0xf208, 0x287d,
+ 0xf1ea, 0x28a4, 0xf064, 0xe000, 0x02b2, 0xe09e, 0x2907, 0x3c74,
+ 0xe41e, 0x0fa9, 0xe419, 0x0f6e, 0xa200, 0x3c7d, 0x28a3, 0x3ca5,
+ 0xe0c2, 0x0071, 0x3ca4, 0xa206, 0x3c92, 0xa202, 0x3c76, 0x244a,
+ 0x4c4b, 0xa002, 0x344a, 0x3c4b, 0xe40e, 0x038a, 0x2825, 0xa802,
+ 0x447d, 0xf06a, 0x28a3, 0xe41e, 0x04fb, 0xa200, 0x3c7d, 0x2890,
+ 0xf19a, 0x2825, 0xf178, 0x2892, 0xa106, 0xf14a, 0x2892, 0xa806,
+ 0xe01a, 0xf10a, 0x287f, 0xf0ea, 0x28a3, 0xe000, 0x0212, 0xe092,
+ 0x2901, 0xe049, 0xa809, 0xf06b, 0xa806, 0x3d01, 0xa200, 0x3c92,
+ 0x3c7d, 0xe41e, 0x0b4f, 0x286d, 0xa80c, 0xe016, 0x4466, 0xe408,
+ 0x03d1, 0x282e, 0x2a3f, 0xe017, 0x3e70, 0x2ac3, 0xa103, 0xe017,
+ 0x4e70, 0xe052, 0xf218, 0xe162, 0x0200, 0xa200, 0xc711, 0x3d12,
+ 0x3c44, 0x3c3e, 0x3c0d, 0x3c0c, 0x3cb5, 0x3cb6, 0x3c6c, 0x3c0b,
+ 0x282e, 0xf068, 0x2825, 0xa104, 0xf038, 0xa200, 0x3c66, 0x2852,
+ 0x3c43, 0xa202, 0x3c42, 0xe004, 0x1000, 0xcf02, 0xe41e, 0x1382,
+ 0xa200, 0x3c46, 0xf0fe, 0x2836, 0xe016, 0x4430, 0xf078, 0xe41e,
+ 0x1251, 0xe40a, 0x03d1, 0xe40e, 0x0339, 0xe41e, 0x12ab, 0xe40a,
+ 0x03d1, 0xe41e, 0x0d8f, 0x264a, 0x4e4b, 0xa003, 0x364a, 0x3e4b,
+ 0xa103, 0x2890, 0xe40a, 0x0383, 0x2825, 0xf0ea, 0xa102, 0xf15a,
+ 0xa102, 0xf138, 0x2892, 0xa102, 0xf038, 0xa202, 0x3c7d, 0xa204,
+ 0x3c92, 0xe40e, 0x0383, 0x28a2, 0x2a63, 0xf02b, 0x28a6, 0xe0c2,
+ 0x0071, 0x3ca5, 0x3ca4, 0xf2fe, 0xe41e, 0x0a5f, 0xba3e, 0xe002,
+ 0x01b6, 0xf10a, 0x2892, 0xa102, 0xf048, 0xa208, 0x3c92, 0xf23e,
+ 0x28a2, 0x2a63, 0xf02b, 0x28a6, 0xe0c2, 0x0071, 0x3ca5, 0x3ca4,
+ 0xf1ae, 0x2892, 0xa102, 0xf028, 0xf16e, 0xa2fe, 0x3ca5, 0x3ca4,
+ 0xa202, 0x3c92, 0x244a, 0x4c4b, 0xa102, 0x344a, 0x3c4b, 0xa2fa,
+ 0xe0c2, 0x0071, 0xf08e, 0xf079, 0xa2fe, 0x3ca5, 0x3ca4, 0xa2fa,
+ 0xe0c2, 0x0071, 0x244a, 0x4c4b, 0xe0c2, 0x0070, 0x2825, 0xa104,
+ 0xe01a, 0xae12, 0x4cae, 0xae2a, 0x4c25, 0xe0c2, 0x0073, 0x2846,
+ 0xe0c2, 0x0072, 0x286d, 0xa808, 0xf09a, 0xe41e, 0x0494, 0x287f,
+ 0xf138, 0xa2fe, 0xe0c2, 0x0071, 0xf0fe, 0x287f, 0xf0d8, 0xe0c0,
+ 0x0077, 0x2a63, 0xf06b, 0x2a2e, 0xe017, 0x4690, 0x28a6, 0xb7d2,
+ 0xe0c2, 0x0071, 0x3ca4, 0x2889, 0xae20, 0x4c8a, 0xe0c2, 0x006f,
+ 0xe0c2, 0x004f, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053,
+ 0xe41e, 0x0521, 0x2825, 0xa104, 0xe01a, 0xae12, 0x4cae, 0xae2a,
+ 0x4c25, 0xe0c2, 0x0073, 0xe41e, 0x01d3, 0xe41e, 0x11de, 0xa202,
+ 0xe42e, 0x2889, 0xae20, 0x4c8a, 0xe0c2, 0x006f, 0xe0c2, 0x004f,
+ 0x2825, 0xa104, 0xe01a, 0xae12, 0x4cae, 0xae2a, 0x4c25, 0xe0c2,
+ 0x0073, 0xa2fc, 0xe0c2, 0x0077, 0xe41e, 0x0521, 0xe16a, 0xa200,
+ 0xe0c2, 0x0076, 0xe42e, 0xe0c0, 0x0065, 0x3082, 0xaf02, 0x3083,
+ 0xaf02, 0x308f, 0xaf02, 0xa806, 0x3c8e, 0xe0c0, 0x0066, 0x3c8d,
+ 0x288f, 0xf06a, 0xa200, 0x3082, 0x3083, 0xe40e, 0x047b, 0x288d,
+ 0xf028, 0x3c8e, 0x288e, 0xf09a, 0x288d, 0xa102, 0xf04a, 0xa200,
+ 0x3c82, 0xf03e, 0xa202, 0x3c82, 0x2882, 0xe40a, 0x047b, 0x28ee,
+ 0x3c84, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa224, 0xe41e,
+ 0x0187, 0xe41e, 0x01b8, 0xa204, 0xe41e, 0x0171, 0x2830, 0xf048,
+ 0xe41e, 0x055e, 0xf03e, 0xe41e, 0x05b2, 0xf11d, 0x2881, 0xf0f8,
+ 0xa206, 0x3c82, 0xa200, 0x3c81, 0x2830, 0xf048, 0xe41e, 0x055e,
+ 0xf03e, 0xe41e, 0x05b2, 0xf03d, 0x2881, 0xf0aa, 0xa200, 0x3c81,
+ 0xe41e, 0x00f3, 0xa200, 0x3c82, 0xe0c2, 0x0075, 0xe42e, 0x288d,
+ 0xf33a, 0x288e, 0xf31a, 0xa102, 0xf04a, 0xa102, 0xf05a, 0xf07e,
+ 0x2825, 0xf2aa, 0xf04e, 0x2825, 0xa104, 0xf268, 0xe082, 0x3c14,
+ 0xe004, 0x0048, 0xe092, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042,
+ 0x9f01, 0x2814, 0xe092, 0xa200, 0x3c82, 0x2825, 0xa104, 0xe01a,
+ 0xae12, 0x4cae, 0xae2a, 0x4c25, 0xe0c2, 0x0073, 0xa202, 0xe0c2,
+ 0x0075, 0xa200, 0xe0c2, 0x0072, 0xa2fa, 0xe0c2, 0x0071, 0x3ca5,
+ 0x3ca4, 0xa200, 0xe42e, 0xe41e, 0x00f3, 0xa200, 0x3c82, 0xa202,
+ 0xe0c2, 0x0075, 0xf04e, 0xa204, 0xe0c2, 0x0075, 0xa202, 0xe42e,
+ 0x2830, 0xf0a8, 0xe41e, 0x0a5f, 0xe41e, 0x0a5f, 0xba2e, 0xa102,
+ 0xe42a, 0xba4e, 0xf7ae, 0xe41e, 0x0a5f, 0xba2a, 0xa140, 0xe42a,
+ 0xa13e, 0xe42a, 0xba4e, 0xf78e, 0xa200, 0xe0c2, 0x0072, 0x289c,
+ 0xf0e6, 0x289c, 0xa102, 0x3c9c, 0xe41e, 0x04b7, 0x2a63, 0x28a1,
+ 0xf02b, 0x28a3, 0xe0c2, 0x0071, 0x3ca4, 0xe42e, 0x289c, 0xe424,
+ 0x28a1, 0x2a63, 0xf02b, 0x28a3, 0x3ca3, 0xe0c1, 0x0060, 0xaf09,
+ 0xa807, 0xe419, 0x04b7, 0xa2fe, 0xe0c2, 0x0071, 0xe42e, 0x28a4,
+ 0xe424, 0xe000, 0x02b2, 0xe09e, 0x2907, 0x3c74, 0xe41e, 0x0fa9,
+ 0xe419, 0x0f6e, 0xe42e, 0xa200, 0x3c4a, 0x3c4b, 0x3c74, 0x3c75,
+ 0xa2fe, 0x3ca2, 0x3ca3, 0x3ca4, 0x3ca5, 0x3ca0, 0x3ca1, 0xa200,
+ 0x3c6d, 0x3ca7, 0x3c76, 0xe161, 0x0212, 0x2a4d, 0xa103, 0x3e70,
+ 0x8670, 0x3d11, 0xe42e, 0x28a7, 0x3c06, 0x2806, 0xe000, 0x0212,
+ 0xe092, 0x2901, 0xf0da, 0x2806, 0xa002, 0x3c06, 0x184d, 0xf038,
+ 0xa200, 0x3c06, 0x2806, 0x18a7, 0xf718, 0xa2fe, 0xe42e, 0xa208,
+ 0xb652, 0x3d01, 0x2806, 0xa002, 0x3ca7, 0x184d, 0xf038, 0xa200,
+ 0x3ca7, 0x2806, 0xe42e, 0xe424, 0xe000, 0x0212, 0xe092, 0xa200,
+ 0x3d01, 0xe42e, 0xe000, 0x0212, 0xe092, 0x2901, 0xe056, 0x3d01,
+ 0xe42e, 0xe424, 0xe000, 0x0212, 0xe092, 0x2901, 0xa806, 0x3d01,
+ 0xe42e, 0xe424, 0xe000, 0x0212, 0xe092, 0x2901, 0xa908, 0x3d01,
+ 0xe42e, 0xe424, 0xe000, 0x0212, 0xe092, 0x2901, 0xa80a, 0x3d01,
+ 0xe42e, 0xe004, 0x0212, 0xe09e, 0xe004, 0x0054, 0xe09c, 0x284d,
+ 0xa102, 0xcc44, 0xa200, 0x3c06, 0xe184, 0x0535, 0x2b17, 0xaf05,
+ 0xa803, 0x5a06, 0xe056, 0x2a06, 0xa003, 0x3e06, 0x9f06, 0xe42e,
+ 0xe161, 0x0212, 0x284d, 0xa102, 0xcc44, 0xa200, 0xe184, 0x0543,
+ 0x2b11, 0xa80d, 0xe01b, 0xe042, 0x184d, 0xe01a, 0xe42e, 0xa200,
+ 0x3c06, 0x284d, 0xa102, 0xcc44, 0xe184, 0x055c, 0xe0c0, 0x0054,
+ 0x5c06, 0xa802, 0xf058, 0x2806, 0xe41e, 0x0509, 0xf04e, 0x2806,
+ 0xe41e, 0x0511, 0x2a06, 0xa003, 0x3e06, 0xe42e, 0xa200, 0x3cae,
+ 0xd198, 0x0000, 0xd180, 0x0000, 0xd190, 0x0004, 0x8881, 0x0198,
+ 0xcb20, 0xf7d8, 0xe41e, 0x11a4, 0xe428, 0x2885, 0xf08a, 0xc872,
+ 0x2687, 0x4e88, 0xae07, 0xe045, 0xa200, 0xe427, 0xba7e, 0xe002,
+ 0x0100, 0xf374, 0xa13e, 0xf030, 0xe40e, 0x0564, 0xa102, 0xf314,
+ 0xe002, 0x000f, 0xf060, 0xe41e, 0x066c, 0xf2ba, 0xe40e, 0x0564,
+ 0xe002, 0x0081, 0xf058, 0xe41e, 0x0644, 0xe40e, 0x0564, 0xa104,
+ 0xf058, 0xe41e, 0x090f, 0xe40e, 0x0564, 0xa102, 0xf058, 0xe41e,
+ 0x0737, 0xe40e, 0x0564, 0xa104, 0xf058, 0xe41e, 0x064b, 0xe40e,
+ 0x0564, 0xa102, 0xf058, 0xe41e, 0x0742, 0xf0ba, 0xe42e, 0x2a76,
+ 0xe40b, 0x0564, 0xa11a, 0xe408, 0x0564, 0xba7e, 0xe40e, 0x0564,
+ 0xe16b, 0xe42e, 0x282f, 0xe01a, 0xae0c, 0xa920, 0xcf00, 0xd198,
+ 0x0000, 0xd190, 0x0004, 0x8881, 0x0198, 0xcb20, 0xf7d8, 0xe41e,
+ 0x11a4, 0xe428, 0x2885, 0xf08a, 0xc872, 0x2687, 0x4e88, 0xae07,
+ 0xe045, 0xa200, 0xe427, 0x282f, 0xf06a, 0xba60, 0xe41e, 0x0a8c,
+ 0xf07a, 0xe42e, 0xba6a, 0xe41e, 0x0805, 0xf02a, 0xe42e, 0xe16b,
+ 0xe42e, 0xba5e, 0x2860, 0xa120, 0x3c48, 0x7448, 0x2852, 0xe41e,
+ 0x0a3a, 0x3c48, 0x7448, 0x3c01, 0x1852, 0xf034, 0x2852, 0x3c01,
+ 0xba48, 0x3c28, 0xba40, 0xe40a, 0x0625, 0xa201, 0xba40, 0xb431,
+ 0xf7e8, 0xba40, 0xe40a, 0x0625, 0x2c21, 0xe41e, 0x0a3a, 0x3c48,
+ 0x7448, 0x3c2c, 0xba40, 0xe40a, 0x0625, 0xba42, 0x3c25, 0xa106,
+ 0xe016, 0x3c3f, 0xba44, 0xe000, 0x0120, 0xe09e, 0x2907, 0x3c27,
+ 0x2825, 0xf1ca, 0xba44, 0x3c29, 0x3c0c, 0xa102, 0x3c2a, 0x3c1d,
+ 0xa202, 0x582a, 0xa102, 0x3c2b, 0x3c1e, 0x2825, 0xa104, 0xf0e8,
+ 0xba44, 0x3c0d, 0xa102, 0x3c1f, 0xa202, 0x581f, 0xa102, 0x3c20,
+ 0xe004, 0x0040, 0x4c0d, 0xae0c, 0x4c0c, 0x2801, 0xe42e, 0x3c05,
+ 0xf028, 0xba60, 0xba40, 0xf17a, 0x2852, 0xe41e, 0x0a44, 0x3c48,
+ 0x7648, 0x3e01, 0xa116, 0xf046, 0xf037, 0xba40, 0xf0ca, 0x2805,
+ 0xf038, 0xba48, 0x3c28, 0xba40, 0xf06a, 0x2805, 0xf028, 0xba42,
+ 0x2801, 0xe42e, 0xa2fe, 0xe42e, 0xba4e, 0x3ce0, 0xa200, 0x3cd8,
+ 0xe41e, 0x090a, 0xe42e, 0xba40, 0xf08a, 0xba46, 0xa102, 0xe424,
+ 0xa108, 0xe420, 0xba44, 0xe42a, 0xba46, 0xa102, 0xe428, 0xba40,
+ 0xf08a, 0xba44, 0xba40, 0xba40, 0xf04a, 0xba4e, 0xba4e, 0xba4e,
+ 0xe41e, 0x0a14, 0xe42a, 0xa202, 0x3cd8, 0xe41e, 0x090a, 0xe41e,
+ 0x0a14, 0xe42a, 0xba7e, 0xe42e, 0xa202, 0x3c00, 0xba40, 0xba4e,
+ 0x3ce1, 0xba40, 0xf0ba, 0xba46, 0xa102, 0xe404, 0x0735, 0xa108,
+ 0xe400, 0x0735, 0xa00a, 0x3c00, 0xba44, 0xba46, 0x3c7e, 0xa11e,
+ 0xf0a8, 0xba4e, 0xe40a, 0x0735, 0xba4f, 0xe40b, 0x0735, 0xae11,
+ 0xe056, 0x3ce2, 0xba40, 0xf1da, 0xba42, 0xa102, 0xe408, 0x0735,
+ 0xba40, 0xba40, 0xf16a, 0xba5c, 0xba40, 0xe40a, 0x0735, 0xba5c,
+ 0xba40, 0xe40a, 0x0735, 0xba5c, 0xba40, 0xe40a, 0x0735, 0xba44,
+ 0xba54, 0xba40, 0xe40a, 0x0735, 0xba5c, 0xba40, 0xe40a, 0x0735,
+ 0xba42, 0xe408, 0x0735, 0xba40, 0xe40a, 0x0735, 0xa202, 0x3c22,
+ 0xba5e, 0xe40a, 0x0735, 0x3c21, 0xba40, 0xe40a, 0x0735, 0xba40,
+ 0x3ceb, 0xe40a, 0x06c3, 0x2c21, 0xe41e, 0x0a3a, 0x3c48, 0x7448,
+ 0xe40a, 0x0735, 0x3c22, 0xba40, 0xe40a, 0x0735, 0xba58, 0x3c89,
+ 0xa01e, 0xaf08, 0x3c50, 0xba41, 0xba58, 0x3c8a, 0xa01e, 0xaf08,
+ 0x3c51, 0xe40a, 0x0735, 0xe002, 0x0080, 0xe400, 0x0735, 0x2850,
+ 0xe40a, 0x0735, 0xe002, 0x0080, 0xe400, 0x0735, 0xe40b, 0x0735,
+ 0xba40, 0xe40a, 0x0735, 0xba40, 0x3cad, 0xba40, 0xe40a, 0x0735,
+ 0x2a00, 0xa103, 0xb636, 0xb652, 0x3c48, 0x7648, 0xf11b, 0xa103,
+ 0xe40b, 0x0735, 0xa103, 0xe04a, 0xe016, 0x3cc2, 0xa103, 0xe40b,
+ 0x0735, 0xba4a, 0x3cc3, 0xba42, 0x3cc5, 0xba40, 0x3cc4, 0xba40,
+ 0xe408, 0x0735, 0xba40, 0x3c0e, 0xf07a, 0xba40, 0xe418, 0x0a64,
+ 0xba40, 0xe418, 0x0a78, 0x2800, 0xa102, 0xe40a, 0x0711, 0xba40,
+ 0x3c94, 0xba40, 0xe40a, 0x0735, 0xba40, 0xba40, 0x3c23, 0xe40a,
+ 0x071a, 0xba40, 0x3c24, 0x2800, 0xa102, 0xe40a, 0x0724, 0xba40,
+ 0xf03a, 0xba42, 0xba40, 0xba40, 0x3c2d, 0xba40, 0xe408, 0x0735,
+ 0xe41e, 0x0a14, 0xf0ba, 0xa204, 0x3cd8, 0xe41e, 0x090a, 0x8450,
+ 0x8251, 0xe018, 0x3c52, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xba62,
+ 0xba40, 0xba40, 0xe41e, 0x0a14, 0xe42a, 0xa206, 0x3cd8, 0xe41e,
+ 0x090a, 0xe42e, 0xa200, 0x3cae, 0x3cac, 0xba42, 0x3c25, 0xa106,
+ 0xe016, 0x3c3f, 0xa201, 0xba40, 0xb431, 0xf7e8, 0x3e70, 0xba40,
+ 0xe40a, 0x0803, 0x2c21, 0xe41e, 0x0a3a, 0xa102, 0xf022, 0xa200,
+ 0xa002, 0x3c48, 0x7448, 0x3c2c, 0x2aeb, 0xae3f, 0xe056, 0xe0c2,
+ 0x004e, 0x2825, 0xa104, 0xf0fa, 0x28a9, 0x3ca8, 0x0870, 0x3ca9,
+ 0x84a9, 0x8221, 0xe018, 0x082c, 0x3c4e, 0x28b0, 0x3caf, 0x284e,
+ 0x3cb0, 0xf1ee, 0x28a8, 0x0870, 0x3c70, 0x8470, 0x8221, 0xe018,
+ 0x082c, 0x3c4e, 0x28b2, 0xf048, 0x284e, 0x18af, 0x3cb2, 0x28af,
+ 0xc70f, 0x7cb2, 0x3c70, 0x28b0, 0xc70f, 0x7cb2, 0x1870, 0xae02,
+ 0x3cb3, 0x284e, 0xc70f, 0x7cb2, 0x1870, 0xae02, 0x3cb4, 0xba40,
+ 0xe40a, 0x0803, 0xba40, 0x3c2e, 0xe40a, 0x0801, 0xa200, 0x3c26,
+ 0x2825, 0xa102, 0xf05a, 0xa104, 0xf058, 0x28c2, 0xf03a, 0xba40,
+ 0x3c26, 0x282d, 0xf07a, 0x2825, 0xa104, 0xf042, 0xba40, 0xe408,
+ 0x0803, 0xba44, 0xe000, 0x0120, 0xe09e, 0x2907, 0x3c27, 0x28ad,
+ 0xf05a, 0xba40, 0x3cae, 0xba40, 0x3cac, 0x283f, 0x44c2, 0x2ac3,
+ 0xe01b, 0xe052, 0xf23a, 0xe162, 0x02f0, 0xd022, 0x0001, 0xe184,
+ 0x07d5, 0xb83c, 0xe40d, 0x0803, 0xf0ea, 0xa102, 0x3c70, 0xba40,
+ 0xf078, 0xa205, 0x5a70, 0xa103, 0x7470, 0xe046, 0xf04e, 0x5870,
+ 0x7670, 0xe056, 0x3d12, 0xba40, 0xe40a, 0x0803, 0x28c4, 0xf06a,
+ 0xb83e, 0xe40d, 0x0803, 0x3c70, 0x7470, 0xba48, 0x3c28, 0x2825,
+ 0xe40a, 0x0801, 0xba44, 0x3c29, 0x3c0c, 0xe40a, 0x0803, 0xa102,
+ 0x3c2a, 0x3c1d, 0xa202, 0x582a, 0xa102, 0x3c2b, 0x3c1e, 0x2825,
+ 0xa104, 0xf108, 0xba44, 0x3c0d, 0xe40a, 0x0803, 0xa102, 0x3c1f,
+ 0xa202, 0x581f, 0xa102, 0x3c20, 0xe004, 0x0040, 0x4c0d, 0xae0c,
+ 0x4c0c, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0x3c7e, 0xba4e,
+ 0x3c2c, 0xba40, 0xe40a, 0x0908, 0xba40, 0xe408, 0x0908, 0xba40,
+ 0xba40, 0xba40, 0xba44, 0x3c02, 0xa10e, 0xe40a, 0x0831, 0xba40,
+ 0x3c25, 0xba40, 0x3c39, 0xba44, 0xe408, 0x0908, 0xba48, 0x3c28,
+ 0xba40, 0xe408, 0x0908, 0xe41e, 0x0a27, 0xe40a, 0x0908, 0xa200,
+ 0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c3a, 0x3c26, 0x3c38, 0xe40e,
+ 0x08c6, 0xa202, 0x3c3a, 0xa200, 0x3c02, 0xba44, 0x3c03, 0xa102,
+ 0xe400, 0x0908, 0xe404, 0x0859, 0xba44, 0x3c02, 0xa10c, 0xe418,
+ 0x0a27, 0xba40, 0x3c38, 0xba40, 0x3c39, 0xba42, 0xe408, 0x0908,
+ 0xba40, 0x3c34, 0xba40, 0x3c35, 0xba40, 0x3c36, 0xba44, 0xe408,
+ 0x0908, 0xba40, 0x3c37, 0xba40, 0xe40a, 0x0908, 0xba44, 0xe408,
+ 0x0908, 0xba44, 0xa102, 0xe400, 0x0908, 0xa002, 0x3c25, 0xba42,
+ 0xe408, 0x0908, 0xba40, 0x3c26, 0xba44, 0xa102, 0xe408, 0x0908,
+ 0xba40, 0xe408, 0x0908, 0x2802, 0xa10c, 0xf228, 0x2803, 0xf20a,
+ 0xba46, 0x3c7e, 0xe40a, 0x0908, 0xba50, 0xa002, 0xae04, 0x3c89,
+ 0xa01e, 0xaf08, 0x3c50, 0x3c32, 0xba40, 0xe40a, 0x0908, 0xba50,
+ 0xae04, 0x3c8a, 0xa01e, 0xaf08, 0x3c51, 0x3c31, 0xa132, 0xe406,
+ 0x088f, 0x2832, 0xae02, 0x3c32, 0x2831, 0xaf02, 0x3c31, 0x287e,
+ 0xf0ca, 0xa11e, 0xf0a8, 0xba4e, 0xe40a, 0x0908, 0xba4f, 0xe40b,
+ 0x0908, 0xae11, 0xe056, 0x3ce2, 0x2838, 0x4403, 0xf11a, 0xba40,
+ 0xe000, 0x03e8, 0xba4d, 0xe40b, 0x0908, 0x3c22, 0x3e21, 0xe004,
+ 0x1b77, 0xae10, 0xe00a, 0x0040, 0xc70f, 0x7c21, 0x3c21, 0x2838,
+ 0xf05a, 0xba42, 0xae10, 0x4c2c, 0x3c2c, 0x2839, 0x4403, 0xf07a,
+ 0xba40, 0x3c3b, 0xf048, 0xba40, 0xe40a, 0x0908, 0x2836, 0x4403,
+ 0xf04a, 0xba42, 0xe408, 0x0908, 0xba48, 0x3c28, 0xba40, 0xf03a,
+ 0xba4e, 0xf7de, 0x8450, 0x8251, 0xe018, 0x3c52, 0x2836, 0xf05a,
+ 0xa202, 0xe41e, 0x0627, 0xf358, 0x2838, 0xf078, 0xe004, 0x03e9,
+ 0x3c22, 0xe004, 0x7530, 0x3c21, 0xa200, 0x3c23, 0x3c24, 0xa202,
+ 0x3c29, 0x3c0c, 0x3c2e, 0xa200, 0x3c2a, 0x3c2b, 0xe167, 0x0120,
+ 0x2907, 0x3c27, 0x2839, 0xf1ba, 0x283a, 0xf038, 0xa200, 0xf17e,
+ 0x283b, 0xf15a, 0xa204, 0x2a50, 0xa12d, 0xf057, 0xa002, 0xa12d,
+ 0xf027, 0xa002, 0x3c70, 0xa204, 0x2a51, 0xa125, 0xf057, 0xa002,
+ 0xa125, 0xf027, 0xa002, 0xae06, 0x4c70, 0xf01e, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0xba3e, 0xe002, 0x01b2, 0xe428, 0xba7e, 0xa200,
+ 0x3cdf, 0x2ae3, 0xe0c0, 0x0065, 0xaf0a, 0xa802, 0xe017, 0xe052,
+ 0x3ce7, 0xe41e, 0x0b07, 0xf1aa, 0x28e3, 0xf3a8, 0x2891, 0xf098,
+ 0xba2e, 0xa102, 0xe42a, 0xe41e, 0x0a0a, 0xe428, 0xba4e, 0xf79e,
+ 0xba2e, 0xa102, 0xe42a, 0xe41e, 0x0a0a, 0xe428, 0xba4e, 0xe002,
+ 0x0070, 0xf778, 0xa202, 0x3c0f, 0xf74e, 0x28e3, 0xf218, 0xe42e,
+ 0xe164, 0x0530, 0xe163, 0x052c, 0xe162, 0x0528, 0xd022, 0x0003,
+ 0xe184, 0x0954, 0xba2e, 0xa102, 0xe42a, 0xba4e, 0x3d03, 0x2adf,
+ 0xa803, 0xf049, 0xae10, 0x3cde, 0xf03e, 0x4cde, 0x3d14, 0x2913,
+ 0x1912, 0x2adf, 0xa003, 0x3edf, 0xe428, 0xa202, 0xe42e, 0x2ae3,
+ 0x28d9, 0xa120, 0xb615, 0x3ee3, 0xf42b, 0x2891, 0xf168, 0xba2e,
+ 0xa102, 0xf2fa, 0xba4e, 0x2adf, 0xa803, 0xf049, 0xae10, 0x3cde,
+ 0xf03e, 0x4cde, 0x3d14, 0x2adf, 0xa003, 0x3edf, 0xa80f, 0xe41b,
+ 0x09eb, 0x28e3, 0xf31a, 0xf6ce, 0xba2e, 0xa102, 0xf1aa, 0xba4e,
+ 0xe002, 0x0070, 0xf038, 0xa203, 0x3e0f, 0xe000, 0x0070, 0x2adf,
+ 0xa803, 0xf049, 0xae10, 0x3cde, 0xf03e, 0x4cde, 0x3d14, 0x2adf,
+ 0xa003, 0x3edf, 0xa80f, 0xe41b, 0x09eb, 0x28e3, 0xf15a, 0xf65e,
+ 0x2adf, 0xa803, 0xf03b, 0x28de, 0x3d14, 0xa211, 0x28df, 0xa80e,
+ 0xf0ba, 0xe045, 0xaf03, 0xf06b, 0xa103, 0x3e70, 0xa201, 0x8670,
+ 0x3f14, 0xe41e, 0x09eb, 0xa201, 0xba2e, 0xa102, 0xf04a, 0xba4e,
+ 0xa203, 0xf7be, 0x3ee7, 0xe162, 0x0530, 0x28d8, 0x3d12, 0x28df,
+ 0x3d12, 0x28e7, 0x3d12, 0xa200, 0x3d12, 0xe0c1, 0x006b, 0x28d9,
+ 0xa002, 0xae06, 0xe041, 0xaf06, 0x3cd9, 0xca28, 0xf7f8, 0xe180,
+ 0xce21, 0xd111, 0x0530, 0xd112, 0x0004, 0xd113, 0x0002, 0xe1e1,
+ 0xe181, 0x28e3, 0xe428, 0xa200, 0x3cdb, 0xe0c0, 0x005c, 0xe0c1,
+ 0x0065, 0xaf12, 0xa802, 0xaf15, 0xa803, 0xe016, 0xe056, 0xf04a,
+ 0xa200, 0x3ce3, 0xe42e, 0x28dc, 0xf05a, 0xe0c0, 0x005d, 0xe42a,
+ 0xf7be, 0xe0c0, 0x005d, 0xe00a, 0x0200, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0x3cdc, 0xf71e, 0xe0c0, 0x006b, 0xe000, 0x0088, 0x08db,
+ 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd111, 0x0530, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xe1e1, 0xe181, 0xe164, 0x0530, 0x28da, 0x2adb,
+ 0xa010, 0xa011, 0x3cda, 0x3edb, 0x1add, 0xe41b, 0x09cb, 0xa200,
+ 0x3cdc, 0xe42e, 0x2885, 0xe42a, 0xc872, 0x2687, 0x4e88, 0xae07,
+ 0xe045, 0xa200, 0xb62e, 0xe42e, 0xe41e, 0x0a5f, 0xba2e, 0xa102,
+ 0xe016, 0x4c80, 0xe428, 0xba4e, 0x2885, 0xf08a, 0xc872, 0x2687,
+ 0x4e88, 0xae07, 0xe045, 0xa202, 0xe427, 0xf71e, 0xe42e, 0x2802,
+ 0xae04, 0xe000, 0x0100, 0xe09e, 0x2917, 0x3c89, 0xaf08, 0x3c50,
+ 0x2917, 0x3c8a, 0xaf08, 0x3c51, 0x2917, 0x3c32, 0x2907, 0x3c31,
+ 0xe01a, 0xe42e, 0xa102, 0xa201, 0xf04a, 0xaf02, 0xa003, 0xf7e8,
+ 0xe04a, 0xe428, 0xa202, 0xe42e, 0xa102, 0xa15e, 0xf0d6, 0xa166,
+ 0xf0d6, 0xe002, 0x0129, 0xf0c6, 0xe002, 0x04a4, 0xf0b6, 0xe002,
+ 0x1290, 0xf0a6, 0xf0be, 0xa20c, 0xe42e, 0xa20e, 0xe42e, 0xa212,
+ 0xe42e, 0xa216, 0xe42e, 0xa21a, 0xe42e, 0xa21c, 0xe42e, 0xc868,
+ 0xa80e, 0x3c49, 0x7449, 0xe42e, 0xe004, 0x0040, 0xe165, 0x0232,
+ 0xba4f, 0xf05b, 0x3e70, 0x3f15, 0xa102, 0xf7b0, 0xf06a, 0xa102,
+ 0x3c71, 0x2a70, 0x8671, 0x3f15, 0x28aa, 0xa902, 0x3caa, 0xe42e,
+ 0xe004, 0x0040, 0xe165, 0x0272, 0xba4f, 0xf05b, 0x3e70, 0x3f15,
+ 0xa102, 0xf7b0, 0xf06a, 0xa102, 0x3c71, 0x2a70, 0x8671, 0x3f15,
+ 0x28aa, 0xa904, 0x3caa, 0xe42e, 0xba48, 0xa002, 0x3c2f, 0xe406,
+ 0x0ad4, 0xa104, 0xe400, 0x0ad4, 0xba4e, 0x3c2c, 0xba44, 0xe404,
+ 0x0ad4, 0xa10c, 0xe400, 0x0ad4, 0xa008, 0xe41e, 0x0ad6, 0xba42,
+ 0x3c25, 0xa102, 0xe400, 0x0ad4, 0xba40, 0xba48, 0x3c28, 0xba40,
+ 0xf03a, 0xba4e, 0xf7de, 0xa200, 0x3c39, 0x3c34, 0x3c35, 0x3c36,
+ 0x3c37, 0x3c3a, 0x3c26, 0x3c38, 0x3c23, 0x3c24, 0xa202, 0x3c29,
+ 0x3c0c, 0x3c2e, 0xe167, 0x0120, 0x2907, 0x3c27, 0x2851, 0xa132,
+ 0xe406, 0x0ac8, 0x2832, 0xae02, 0x3c32, 0x2831, 0xaf02, 0x3c31,
+ 0x8450, 0x8251, 0xe018, 0x3c52, 0xe004, 0x03e9, 0x3c22, 0xe004,
+ 0x7530, 0x3c21, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xf092, 0xa002,
+ 0xf04a, 0xba4e, 0xba4f, 0xf21e, 0xba5e, 0xba5f, 0xf1ee, 0xa207,
+ 0xe045, 0xf107, 0xae05, 0xe001, 0x0100, 0xe09f, 0x2917, 0x3c89,
+ 0x2917, 0x3c8a, 0x2917, 0x3c32, 0x3c50, 0x2907, 0x3c31, 0x3c51,
+ 0xe42e, 0xf07b, 0xe004, 0x00a0, 0xe005, 0x0078, 0xe40e, 0x0afc,
+ 0xe004, 0x0140, 0xe005, 0x00f0, 0x3c89, 0x3e8a, 0xa01e, 0xa01f,
+ 0xaf08, 0xaf09, 0x3c32, 0x3c50, 0x3e31, 0x3e51, 0xe42e, 0xe164,
+ 0x0530, 0xba3f, 0xe004, 0x4469, 0xae20, 0xe00a, 0x7658, 0xe046,
+ 0xf0ba, 0xe004, 0x5876, 0xae20, 0xe00a, 0x6944, 0xe046, 0xf1ca,
+ 0xa200, 0x3cdf, 0xe42e, 0xa20a, 0x3cdf, 0xba4e, 0x3d14, 0xba4e,
+ 0x3d14, 0xba4e, 0x3d14, 0xba4e, 0x3d14, 0xa202, 0x3c91, 0xba4e,
+ 0x3d14, 0xa16a, 0xf02a, 0xe42e, 0x28d1, 0xf058, 0xa200, 0x3cd2,
+ 0xa202, 0x3cd0, 0xe42e, 0xa208, 0x3cdf, 0xe004, 0x0058, 0x3d14,
+ 0xe004, 0x0076, 0x3d14, 0xe004, 0x0069, 0x3d14, 0xe004, 0x0044,
+ 0x3d14, 0xa202, 0x3cd1, 0xa200, 0x3cd0, 0xba1e, 0xa118, 0xf056,
+ 0xa200, 0x3cd2, 0xa202, 0xe42e, 0xa202, 0x3cd2, 0xe42e, 0xa200,
+ 0xcc8e, 0xe0c2, 0x0320, 0x3cd7, 0x3cd6, 0x3cd4, 0x2837, 0xae02,
+ 0x4c36, 0xae02, 0x4c35, 0xae02, 0x4c34, 0xae04, 0x4c30, 0xae08,
+ 0xa906, 0xe0c2, 0x0100, 0xe004, 0x00d6, 0xe0c2, 0x017c, 0xe004,
+ 0x0014, 0xe0c2, 0x017d, 0xe0c0, 0x0050, 0x30bd, 0xaf02, 0x30be,
+ 0xaf02, 0x30bc, 0xaf02, 0x30ec, 0xaf0a, 0x30bf, 0xaf02, 0x30c0,
+ 0xaf02, 0x30c1, 0xaf02, 0x30ed, 0xe0c0, 0x0050, 0xaf1c, 0xa802,
+ 0xe005, 0x0ba6, 0xe09f, 0x3d17, 0x28bf, 0x44bd, 0x3cbd, 0x28c0,
+ 0x44be, 0x3cbe, 0x28c1, 0x44bc, 0x3cbc, 0x28ed, 0x44ec, 0x3cec,
+ 0xa200, 0x2abd, 0xf03b, 0xe00a, 0x0002, 0x2abe, 0xf03b, 0xe00a,
+ 0x0009, 0x2abc, 0xf03b, 0xe00a, 0x0020, 0x2aec, 0xf03b, 0xe00a,
+ 0x0040, 0xe005, 0x0ba6, 0xe09f, 0x2b17, 0xae05, 0xe056, 0xe0c2,
+ 0x0169, 0x2835, 0x4c63, 0xf19a, 0xe0c1, 0x0041, 0xe004, 0x0148,
+ 0xae10, 0xe042, 0x2ac1, 0xf03b, 0x20cc, 0x4ccd, 0xe0c2, 0x0211,
+ 0xe0c1, 0x0041, 0xe004, 0x0188, 0xae10, 0xe042, 0x2aed, 0xf03b,
+ 0x20ce, 0x4ccf, 0xe0c2, 0x0212, 0xe0c0, 0x0041, 0xe005, 0x0011,
+ 0xae11, 0xe042, 0x2ac0, 0xf03b, 0x20ca, 0x4ccb, 0xe0c2, 0x0103,
+ 0xe161, 0x0460, 0x2111, 0x4d11, 0xcf42, 0xe0c1, 0x0041, 0xe004,
+ 0x0140, 0xae10, 0xe042, 0x2abf, 0xf03b, 0x20c8, 0x4cc9, 0xcf44,
+ 0x2aaa, 0xe0c3, 0x013d, 0xa803, 0xa200, 0xe419, 0x0de4, 0x2aaa,
+ 0xa805, 0xa202, 0xe419, 0x0de4, 0x2ad2, 0xf05b, 0x2889, 0xae20,
+ 0x4c8a, 0xf05e, 0x2850, 0xae20, 0x4c51, 0xae08, 0xe0c2, 0x0101,
+ 0x2850, 0xae20, 0x4c51, 0xae08, 0xe0c2, 0x0283, 0xcf60, 0x2837,
+ 0xcf68, 0x2a25, 0xa105, 0xe017, 0x462e, 0x3e66, 0x2830, 0xae04,
+ 0x4c3e, 0xae02, 0x4c94, 0xae06, 0x4c0d, 0xae06, 0x4c0c, 0xcf46,
+ 0x28d1, 0xae02, 0x4cd0, 0xae04, 0xa904, 0x4cad, 0xae04, 0x4c2f,
+ 0xaf02, 0xae04, 0x4c30, 0xae02, 0xa902, 0xae04, 0x4c25, 0xae02,
+ 0x4cae, 0xcf00, 0x2834, 0xae02, 0x4c35, 0xae02, 0x4c23, 0xae02,
+ 0x4c24, 0xae02, 0x4c37, 0xcf24, 0xe0c0, 0x0044, 0xa80e, 0xae1a,
+ 0x4c62, 0xe0c2, 0x0102, 0x2863, 0x4466, 0xf088, 0x2a63, 0xe41e,
+ 0x04db, 0xe0c2, 0x0077, 0x3ca2, 0x3ca5, 0x28a0, 0x2a66, 0xe41b,
+ 0x0519, 0x2a63, 0xf08b, 0xa201, 0xe41e, 0x04db, 0x3ca6, 0x3ca5,
+ 0xe0c2, 0x0077, 0x2876, 0xf048, 0x2875, 0xaa02, 0x3c75, 0x28a4,
+ 0xf064, 0xe000, 0x02b2, 0xe09e, 0x2907, 0x3c74, 0x28a5, 0xe000,
+ 0x02b2, 0xe09e, 0x2875, 0x3d07, 0x2866, 0x3c76, 0xf188, 0x2825,
+ 0xe016, 0x303e, 0x28a2, 0xa205, 0xe412, 0x0502, 0x28a3, 0x3ca5,
+ 0x28a2, 0x2a63, 0xf07b, 0x287f, 0xf05a, 0x28a2, 0xe41e, 0x0509,
+ 0x28a6, 0x3ca3, 0x28a1, 0x3ca0, 0x28a2, 0x3ca1, 0xa206, 0xae08,
+ 0x4c25, 0xae06, 0xe0c1, 0x0065, 0xaf19, 0xa803, 0xae17, 0xe056,
+ 0xe0c2, 0x0204, 0xa204, 0x2a35, 0x4e63, 0xb632, 0xe0c2, 0x0210,
+ 0xa204, 0x2a63, 0x4666, 0x4e35, 0xb612, 0xe0c2, 0x0208, 0xf139,
+ 0x84a2, 0xc786, 0xe018, 0xe000, 0x03a0, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x020d, 0x2117, 0x4d17, 0xe0c2, 0x020e, 0x2117, 0x4d17,
+ 0xe0c2, 0x020f, 0x2835, 0x4c63, 0xf16a, 0x84a6, 0x2a35, 0xf02b,
+ 0x84a2, 0xc786, 0xe018, 0xe000, 0x03a0, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x0214, 0x2117, 0x4d17, 0xe0c2, 0x0215, 0x2117, 0x4d17,
+ 0xe0c2, 0x0216, 0x28a1, 0xf344, 0xa202, 0xe0c2, 0x0302, 0x28a0,
+ 0xf062, 0x28a1, 0xae04, 0x08a1, 0x08a1, 0xf05e, 0x28a0, 0xae04,
+ 0x08a0, 0x08a0, 0xe000, 0x03a0, 0xe09e, 0x2117, 0x4d17, 0xe0c2,
+ 0x0380, 0x2117, 0x4d17, 0xe0c2, 0x0381, 0x2117, 0x4d17, 0xe0c2,
+ 0x0382, 0x28a1, 0xae04, 0x08a1, 0x08a1, 0xe000, 0x03a0, 0xe09e,
+ 0x2117, 0x4d17, 0xe0c2, 0x0383, 0x2117, 0x4d17, 0xe0c2, 0x0384,
+ 0x2117, 0x4d17, 0xe0c2, 0x0385, 0xa200, 0xe0c2, 0x0302, 0xa204,
+ 0x4c94, 0xae02, 0x4c26, 0xe0c2, 0x0303, 0xa202, 0xae02, 0xa902,
+ 0xe0c2, 0x0312, 0xa220, 0xe0c2, 0x0313, 0xa200, 0xe0c2, 0x0308,
+ 0xe0c2, 0x0168, 0xa200, 0x3c77, 0x3c78, 0x3c73, 0xa202, 0x3c7a,
+ 0x28a4, 0xe412, 0x0fa9, 0x28a5, 0xe0c2, 0x0071, 0xf024, 0x3ca4,
+ 0xa202, 0x3c6b, 0xa201, 0x28ac, 0xb6d1, 0xae0b, 0xe0c3, 0x0104,
+ 0x286d, 0xa80c, 0xf058, 0x286d, 0x2a66, 0xb436, 0x3c6d, 0xa202,
+ 0xe0c2, 0x0106, 0xa201, 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x1dfd,
+ 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xe40a, 0x0d6e, 0xca29, 0xf7f9,
+ 0xe180, 0xe0c1, 0x006a, 0xce21, 0xd111, 0x0518, 0xd112, 0x000c,
+ 0xd113, 0x0003, 0xca29, 0xf7f9, 0xe181, 0x30e4, 0xaf02, 0x30e5,
+ 0xaf02, 0x30e6, 0x28e6, 0xe40a, 0x0d6e, 0xa210, 0x3c70, 0xe162,
+ 0x0212, 0xe163, 0x0510, 0xa201, 0xd022, 0x0002, 0xe184, 0x0d53,
+ 0x2912, 0xa81e, 0xe055, 0xae09, 0x2912, 0xa81e, 0xe055, 0x3f13,
+ 0x2870, 0xa102, 0xf03a, 0x3c70, 0xf6fe, 0xe162, 0x051a, 0x2112,
+ 0x4d12, 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd111, 0x0510, 0xd112,
+ 0x0008, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe162, 0x0518,
+ 0xc410, 0xa200, 0x2ae6, 0xb632, 0xae10, 0x3d12, 0xa220, 0x3d12,
+ 0x8132, 0xa200, 0x2ae5, 0xb652, 0xae10, 0x3d12, 0x2852, 0x3d12,
+ 0x8132, 0x2ae4, 0x2825, 0xe01a, 0xe051, 0xa200, 0xb692, 0xae10,
+ 0x4c25, 0x3d12, 0x2852, 0xb616, 0x3d12, 0x8132, 0xe42e, 0xe0c0,
+ 0x0065, 0xaf0a, 0xa802, 0xf16a, 0xe162, 0x0530, 0x28d9, 0x3d12,
+ 0x28da, 0x3d12, 0xe0c0, 0x006b, 0xca29, 0xf7f9, 0xe180, 0xce20,
+ 0xd111, 0x0530, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8,
+ 0xe181, 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xf10a, 0xe0c0, 0x006a,
+ 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd112, 0x000c, 0xd111, 0x0518,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181, 0xa200, 0x3cda, 0x3cd9,
+ 0x3ce3, 0x3cdb, 0x3cdc, 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xf04a, 0xe0c0, 0x0281, 0xf7ea, 0x2877, 0x4c73,
+ 0xe42a, 0xa204, 0xae0e, 0x4c50, 0xa102, 0xae0e, 0x4c51, 0xa102,
+ 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a,
+ 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0xe161, 0x0232, 0xa201, 0xf05a,
+ 0xe161, 0x0272, 0xe005, 0x0040, 0xa202, 0xe0c2, 0x013c, 0xd022,
+ 0x003f, 0xe184, 0x0df8, 0x2911, 0xe0c3, 0x013e, 0xe0c2, 0x013f,
+ 0xa003, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xe0c0, 0x0064, 0x3cc9,
+ 0x34c8, 0xe0c0, 0x0065, 0x3ccb, 0x34ca, 0xe0c0, 0x0066, 0x3ccd,
+ 0x34cc, 0xe0c0, 0x0067, 0x3ccf, 0x34ce, 0xe0c0, 0x0069, 0xe167,
+ 0x0ba0, 0x3d17, 0x3517, 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0,
+ 0x006b, 0x3d17, 0x3517, 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20,
+ 0xd111, 0x0ba8, 0xd112, 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0xe42e, 0xa201, 0x3ee8, 0x2ae5, 0xf07b, 0xae02, 0x4cd7, 0xae0c,
+ 0x4c5d, 0xe41e, 0x103b, 0x280e, 0xae0a, 0x4c5d, 0xe0c2, 0x0115,
+ 0xa27f, 0x2858, 0xf028, 0x2a5e, 0xe0c3, 0x012a, 0xa27e, 0xe0c2,
+ 0x0116, 0x28ab, 0xae08, 0x4c58, 0xe0c2, 0x0114, 0x2835, 0x4c63,
+ 0xf07a, 0x2859, 0x4435, 0xe016, 0xae0a, 0x4c5d, 0xcf6a, 0x2858,
+ 0xe41a, 0x0e9b, 0x2ae4, 0x2825, 0xe01a, 0xe051, 0xf2eb, 0xe004,
+ 0x0680, 0x08d4, 0xe094, 0x2858, 0xf268, 0x2ae8, 0xa803, 0xae1f,
+ 0xe0c0, 0x03b0, 0xb616, 0x3512, 0x3d0a, 0x280b, 0xe418, 0x10af,
+ 0x2902, 0xe008, 0x7fff, 0xe056, 0x3d12, 0x8112, 0x2825, 0xa102,
+ 0xf12a, 0x2ae8, 0xa805, 0xae1d, 0xe0c0, 0x03c0, 0xb616, 0x3512,
+ 0x3d0a, 0x280b, 0xe418, 0x10af, 0x2902, 0xe008, 0x7fff, 0xe056,
+ 0x3d12, 0x8112, 0xe41e, 0x1079, 0x2823, 0xf078, 0x2858, 0xe016,
+ 0x4c66, 0xf038, 0xe41e, 0x15c5, 0xe41e, 0x0eec, 0xe0c0, 0x0111,
+ 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0xe41e, 0x0fed, 0x2877, 0x4c73,
+ 0xe418, 0x0f81, 0xe42e, 0x2a0b, 0xe0c3, 0x030d, 0xa200, 0x2a66,
+ 0xf03b, 0x2a6c, 0xb676, 0x2a5b, 0xb672, 0x2a0b, 0xb632, 0x3c70,
+ 0xae06, 0x4c70, 0x3c70, 0xae0c, 0x4c70, 0xe0c2, 0x0309, 0x2866,
+ 0x2a6c, 0xa105, 0xe017, 0xe052, 0xe016, 0x3c64, 0xa200, 0x2a6c,
+ 0xa107, 0xb62a, 0x4466, 0x3c65, 0xae02, 0x4c64, 0x3ce8, 0xae04,
+ 0x4ce8, 0x3ce8, 0xae08, 0x4ce8, 0xe0c2, 0x030c, 0xa200, 0x2a0b,
+ 0x4664, 0xf08b, 0x28b5, 0xae0a, 0x4cb5, 0xae0a, 0x4cb6, 0xae0a,
+ 0x4cb6, 0xe0c2, 0x030a, 0xa202, 0xae20, 0xe00a, 0x0842, 0x2a0b,
+ 0x4665, 0xf09b, 0x2ab7, 0xae0b, 0x4eb7, 0xae0b, 0x4eb8, 0xae0b,
+ 0x4eb8, 0xe056, 0xe0c2, 0x030b, 0x2825, 0xa104, 0xe42a, 0x2823,
+ 0xe428, 0xe41e, 0x15c5, 0xe42e, 0x286b, 0xe0c2, 0x0131, 0xa200,
+ 0x3c6b, 0x285c, 0xe0c2, 0x0130, 0xe42e, 0x2069, 0x4c6a, 0xcf48,
+ 0x2856, 0x4c58, 0x4c59, 0xf09a, 0xd1b3, 0x0008, 0xd1b3, 0x0010,
+ 0x283f, 0xf058, 0xe40e, 0x0f2e, 0x283f, 0xf11a, 0x2859, 0x2ac6,
+ 0xe016, 0xe017, 0xe052, 0xf0b8, 0xe162, 0x02f0, 0x2112, 0x4d0a,
+ 0xcf4c, 0x2112, 0x4d0a, 0xcf54, 0xe40e, 0x0f2e, 0xe162, 0x0201,
+ 0x2112, 0x4d12, 0xcf4c, 0x2112, 0x4d12, 0xcf4e, 0x2112, 0x4d12,
+ 0xcf50, 0x2112, 0x4d12, 0xcf52, 0x2866, 0xf09a, 0x8112, 0xc418,
+ 0x2112, 0x4d32, 0xcf54, 0x2112, 0x4d32, 0xcf58, 0x286c, 0xe016,
+ 0x4466, 0x443e, 0xe40a, 0x0f5f, 0xca28, 0xf7f8, 0xa202, 0xcf62,
+ 0xcf64, 0xe0c0, 0x0041, 0xe005, 0x01a8, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xe180, 0xce20, 0xd111, 0x04d0, 0xd112, 0x0008, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe0c0, 0x0041, 0xe005, 0x01a8,
+ 0xae11, 0xe042, 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd111, 0x0048,
+ 0xd112, 0x0002, 0xd113, 0x001b, 0xca28, 0xf7f8, 0xe181, 0xd1a0,
+ 0x0001, 0xcb40, 0xf7f8, 0x286c, 0xe016, 0x4466, 0x443e, 0xe42a,
+ 0x2853, 0xcf64, 0x2054, 0x4c55, 0xcf62, 0xe42e, 0xa200, 0x3c54,
+ 0x3c55, 0xa202, 0x3c7a, 0xe41e, 0x0f81, 0xe41e, 0x1030, 0xf7c8,
+ 0xa200, 0x3c7a, 0xe41e, 0x0f81, 0xe190, 0xe0c1, 0x014b, 0xf7e9,
+ 0xe42e, 0x2854, 0x4c55, 0xe01a, 0x3c79, 0x2873, 0xf11a, 0x2854,
+ 0xe41a, 0x1003, 0x2854, 0xaf02, 0xe000, 0x0360, 0xe09e, 0x2907,
+ 0x2a54, 0xa803, 0xf029, 0xaf10, 0xe008, 0x001f, 0x3c7b, 0x287b,
+ 0xae02, 0x4c79, 0xae02, 0x4c7a, 0xae0e, 0x4c54, 0xae0e, 0x4c55,
+ 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a,
+ 0xe42e, 0xe0c0, 0x0060, 0xe049, 0xa861, 0xe42b, 0xe049, 0xa81e,
+ 0x3c78, 0xaf09, 0x3277, 0xaf03, 0x3273, 0x84a4, 0xc786, 0xe018,
+ 0xe000, 0x03a0, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117,
+ 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xa200,
+ 0xe0c2, 0x0140, 0xe0c2, 0x0149, 0x2862, 0xe0c2, 0x0141, 0xe0c0,
+ 0x0064, 0xe0c2, 0x014c, 0x2850, 0xa102, 0xae20, 0x4c51, 0xa102,
+ 0xe0c2, 0x0142, 0x2873, 0xae08, 0x4c78, 0xe0c2, 0x014e, 0xe0c0,
+ 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2, 0x0147, 0xe0c0,
+ 0x0063, 0xe0c2, 0x0148, 0xa203, 0xe42e, 0x2854, 0xaf02, 0xe000,
+ 0x0320, 0xe09e, 0x2907, 0x2a54, 0xa803, 0x4c5d, 0xf039, 0x285d,
+ 0xae10, 0x3d07, 0x2854, 0xa002, 0x1850, 0xe41a, 0x1000, 0xe42e,
+ 0x2a75, 0xa204, 0xf03e, 0x2a74, 0xa206, 0x3c06, 0x3e07, 0xe0c0,
+ 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029c, 0xae11, 0xe042,
+ 0x2a07, 0xae09, 0x4e07, 0xae13, 0xe042, 0x2a55, 0xae0f, 0xe042,
+ 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd111, 0x0320, 0x2806, 0xa802,
+ 0xf03a, 0xd111, 0x0360, 0x2850, 0xa002, 0xaf02, 0xa006, 0xa2f9,
+ 0xe052, 0xce24, 0x8806, 0x0113, 0xca28, 0xf7f8, 0xe181, 0xe42e,
+ 0x2854, 0xa002, 0x3c54, 0x1850, 0xe428, 0x3c54, 0x2855, 0xa002,
+ 0x3c55, 0x1851, 0xe42e, 0x2a53, 0xa803, 0xf0f9, 0xae10, 0x3cd5,
+ 0x2a52, 0xa103, 0x1a53, 0xe429, 0xe005, 0x0600, 0x0ad6, 0xe095,
+ 0x3d02, 0xe41e, 0x1063, 0xe42e, 0x4cd5, 0xe005, 0x0600, 0x0ad6,
+ 0xe095, 0x3d02, 0x28d6, 0xa002, 0x3cd6, 0xe002, 0x0080, 0xf068,
+ 0xe41e, 0x1063, 0xa200, 0x3cd6, 0xe42e, 0x2852, 0xa102, 0x1853,
+ 0xe41a, 0x1063, 0xe42e, 0x2a53, 0xaf11, 0xae11, 0xe162, 0x051e,
+ 0x2112, 0x4d12, 0xe042, 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd111,
+ 0x0600, 0xd112, 0x0080, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181,
+ 0xe42e, 0x2858, 0xf08a, 0xa201, 0xa204, 0x5866, 0xa102, 0x3c70,
+ 0x8670, 0x3f12, 0x28d4, 0x2a66, 0xa004, 0xb452, 0x3cd4, 0xe002,
+ 0x0080, 0xf068, 0xe41e, 0x1095, 0xa200, 0x3cd4, 0xe42e, 0x2852,
+ 0xa102, 0x1853, 0xe41a, 0x1095, 0xe42e, 0x2866, 0xe016, 0x3c70,
+ 0x2a53, 0xaf0b, 0x5e70, 0xae11, 0xe162, 0x0522, 0x2112, 0x4d12,
+ 0xe042, 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd111, 0x0680, 0xd112,
+ 0x0080, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe42e, 0x8112,
+ 0xa204, 0x5894, 0xa102, 0x3ce9, 0x2902, 0x44e9, 0x3cea, 0x2902,
+ 0xaf02, 0x5c94, 0x5894, 0xae04, 0x4cea, 0x3d0a, 0xe42e, 0xcb41,
+ 0xf7f9, 0xd04c, 0x0001, 0xe41e, 0x10dd, 0xd04c, 0x0000, 0xe004,
+ 0x0080, 0x2a16, 0xb616, 0xcc6e, 0xe017, 0x3e16, 0xe470, 0xa200,
+ 0x3c16, 0xe41e, 0x10dd, 0xa202, 0x3c16, 0xe41e, 0x10dd, 0xa200,
+ 0x3c16, 0xd037, 0x0080, 0xe128, 0xe42e, 0xca28, 0xf7f8, 0x2899,
+ 0xf08a, 0xa802, 0xe428, 0xe41e, 0x1186, 0xa202, 0x3c99, 0xe42e,
+ 0xe082, 0x3c14, 0xe004, 0x0048, 0xe092, 0xd027, 0x0000, 0xe41e,
+ 0x112f, 0xd027, 0x0001, 0x2880, 0x4c81, 0xf378, 0xe004, 0x0000,
+ 0x2a16, 0xf03b, 0xe000, 0x0080, 0xce22, 0x2010, 0x4c11, 0x2e13,
+ 0xae11, 0xe042, 0xce20, 0xd112, 0x0080, 0xa226, 0xe0c0, 0x0043,
+ 0xa806, 0xae02, 0xa022, 0xce26, 0x2c13, 0xe000, 0x0002, 0x3c13,
+ 0x1c12, 0xf024, 0x3c13, 0x2882, 0xf078, 0x2010, 0x4c11, 0x2e13,
+ 0xae11, 0xe042, 0x9f01, 0x2885, 0xe016, 0x449a, 0xf0ea, 0xa201,
+ 0x2097, 0x4c98, 0xe002, 0x0200, 0x3497, 0x3c98, 0xb64d, 0x3e99,
+ 0xf04b, 0xe000, 0x0200, 0x3c98, 0x2814, 0xe092, 0xe42e, 0xe0c1,
+ 0x0043, 0xa809, 0xe429, 0x2885, 0xe428, 0x2885, 0xe016, 0x449a,
+ 0xe428, 0xa200, 0x3c15, 0x2885, 0xf08a, 0xe0c0, 0x0059, 0xa102,
+ 0xf048, 0x2886, 0xf02a, 0xf23e, 0x2010, 0x4c11, 0x2e13, 0xae11,
+ 0xe042, 0x8111, 0x9e89, 0xe045, 0xf043, 0x2c12, 0xae10, 0xe041,
+ 0xe003, 0x0200, 0xe423, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0xf08a,
+ 0xe001, 0x0200, 0x3697, 0x3e98, 0xa202, 0x3c9a, 0xe42e, 0x2885,
+ 0xf06a, 0x2886, 0xf048, 0xa202, 0x3c86, 0xe42e, 0xe0c0, 0x0059,
+ 0xa102, 0xf068, 0xe0c0, 0x0045, 0x3080, 0x2880, 0xe428, 0x2882,
+ 0xe01a, 0x3c81, 0xe428, 0x2815, 0xf508, 0xe0c0, 0x005c, 0xe008,
+ 0x4000, 0xf4ba, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d,
+ 0xa202, 0xce00, 0x3c15, 0xe40e, 0x1144, 0xe42e, 0xe004, 0x0000,
+ 0x2a16, 0xf039, 0xe000, 0x0200, 0x0898, 0xe049, 0xa807, 0x3e98,
+ 0xaf04, 0xb432, 0x3c9b, 0xe008, 0x00ff, 0xcc78, 0xa201, 0xcc7b,
+ 0xa002, 0xe008, 0x00ff, 0xcc78, 0xe004, 0x01b1, 0x2a30, 0xf03b,
+ 0xe004, 0x0080, 0xcc7a, 0xe42e, 0x2885, 0xf1f8, 0x2899, 0xa802,
+ 0xe42a, 0xc867, 0x1a9b, 0xa105, 0xe04a, 0xe000, 0x00fe, 0xf030,
+ 0xe001, 0x0100, 0xa202, 0xb60a, 0xf0b9, 0xc869, 0xb636, 0xf08b,
+ 0xa208, 0x1898, 0xaf07, 0xe046, 0xe049, 0xa200, 0xb62e, 0xb7f0,
+ 0x2a6d, 0xb691, 0x3e6d, 0xe42e, 0xe41e, 0x1218, 0xe42e, 0xd030,
+ 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036,
+ 0x00ff, 0xd038, 0x0000, 0xe42e, 0x2010, 0x4c11, 0x2e13, 0xae11,
+ 0xe042, 0xe005, 0x0048, 0xe093, 0x9f01, 0xe42e, 0xe0c0, 0x0048,
+ 0xe002, 0x0400, 0xc867, 0xe009, 0x007f, 0xa107, 0xae05, 0xe042,
+ 0xc869, 0xaf07, 0xe015, 0xa807, 0xe042, 0x2210, 0x4e11, 0xe045,
+ 0xf047, 0x2e12, 0xae11, 0xe042, 0xe0c2, 0x0046, 0xe42e, 0xe161,
+ 0x0800, 0xa200, 0x3d11, 0xe004, 0x01b1, 0x2a30, 0xf03b, 0xe004,
+ 0x0080, 0x3d11, 0xe42e, 0xca29, 0xf7f9, 0xe0c0, 0x0049, 0xe049,
+ 0xaf06, 0xae06, 0xa80f, 0xe01b, 0xae07, 0xe042, 0xce20, 0xd111,
+ 0x0800, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e,
+ 0xc872, 0xe049, 0xa80f, 0xe01b, 0xaf06, 0xe042, 0x2287, 0x4e88,
+ 0xe045, 0xa200, 0xb7ee, 0xe42e, 0xe0c1, 0x0049, 0xe045, 0x3687,
+ 0x3e88, 0xe42e, 0x283c, 0xf1ba, 0xf0c4, 0x283c, 0xaf10, 0xe008,
+ 0x00ff, 0x1850, 0xf064, 0x283c, 0xe008, 0x00ff, 0x1851, 0xf182,
+ 0x2050, 0x4c51, 0xae08, 0xe0c2, 0x006f, 0x2889, 0xae20, 0x4c8a,
+ 0xe0c2, 0x004f, 0xa2fe, 0x3c3c, 0xa200, 0xe42e, 0x2850, 0xe008,
+ 0x00ff, 0xae10, 0x2a51, 0xe009, 0x00ff, 0xe056, 0x3c3c, 0xa202,
+ 0xe42e, 0xe41e, 0x122a, 0xe42a, 0xd1b3, 0x0001, 0xa223, 0x2825,
+ 0xf0ca, 0x2a0c, 0xa021, 0xa102, 0xf08a, 0x283f, 0xf068, 0x280c,
+ 0x2a0d, 0xe061, 0xa021, 0xa425, 0x3e60, 0x2825, 0xf068, 0xe161,
+ 0x0200, 0xa200, 0xc711, 0x3d11, 0x2828, 0x3c42, 0xa200, 0x3c72,
+ 0x3c43, 0x3c44, 0xcf64, 0xcf62, 0x2844, 0x4c72, 0xf14a, 0x2836,
+ 0xf088, 0xe41e, 0x13f5, 0xf0da, 0xe41e, 0x05d9, 0x3c43, 0xf0be,
+ 0xe41e, 0x1433, 0xf06a, 0xa200, 0xe41e, 0x0627, 0x3c43, 0xf03e,
+ 0x2852, 0x3c43, 0x2844, 0x1843, 0xf680, 0xf07a, 0xe41e, 0x1382,
+ 0x2843, 0x3c44, 0x1852, 0xf16a, 0xa202, 0x3c72, 0x2823, 0xf068,
+ 0xe41e, 0x12ff, 0xd1b3, 0x0002, 0xf06e, 0xe41e, 0x1428, 0xd1b3,
+ 0x0002, 0xe428, 0x286b, 0xa002, 0x3c6b, 0x2844, 0x1852, 0xe404,
+ 0x1274, 0xa202, 0xe42e, 0xe41e, 0x122a, 0xe42a, 0xd1b3, 0x0001,
+ 0x2828, 0x3c42, 0xa200, 0x3c43, 0x3c44, 0x3c33, 0xcf64, 0xcf62,
+ 0xa2fe, 0x3c40, 0x2844, 0x1843, 0xf072, 0xe41e, 0x1382, 0x2843,
+ 0x3c44, 0x1852, 0xf31a, 0xe41e, 0x12ff, 0x2843, 0x0832, 0x3c43,
+ 0x2833, 0xa002, 0x3c33, 0x2844, 0x1852, 0xf26a, 0x282f, 0xf6b8,
+ 0x2844, 0x1843, 0xf094, 0xba20, 0xa102, 0xf658, 0xd1b3, 0x0002,
+ 0x286b, 0xa002, 0x3c6b, 0xe41e, 0x140a, 0x3c41, 0xf12a, 0xba60,
+ 0xba48, 0x3c41, 0x2840, 0xba43, 0xf038, 0xe046, 0xf758, 0xba48,
+ 0x3c28, 0x2841, 0x3c33, 0x8433, 0x8232, 0xe018, 0x3c43, 0xf4be,
+ 0x2852, 0x3c43, 0xf48e, 0xa22c, 0xe41e, 0x13ad, 0xa17e, 0xf048,
+ 0xe41e, 0x0a5f, 0xba6a, 0xe41e, 0x0a5f, 0xa202, 0xe42e, 0x2ad7,
+ 0xe017, 0x3ed7, 0x2828, 0x3c61, 0x2832, 0x0843, 0x3c45, 0x2843,
+ 0x3c53, 0xc70f, 0x7c50, 0x3454, 0x3c55, 0x2853, 0x1852, 0xe40a,
+ 0x137d, 0xe41e, 0x1508, 0xe40a, 0x1380, 0x285d, 0x3c61, 0x2853,
+ 0xa002, 0x3c53, 0xcf64, 0x2885, 0xf0ba, 0x2853, 0x1852, 0xf08a,
+ 0xc872, 0x2687, 0x4e88, 0xae07, 0xe045, 0xe405, 0x1380, 0xe41e,
+ 0x1458, 0xe01a, 0x3c7a, 0x2054, 0x4c55, 0xcf62, 0x2825, 0xa104,
+ 0xf05a, 0x2836, 0xf348, 0x2830, 0xf398, 0x2825, 0xa104, 0xf1c8,
+ 0xe41e, 0x13d0, 0xf0ca, 0x2854, 0xf06a, 0xe41e, 0x15eb, 0xa802,
+ 0xe408, 0x130d, 0xba40, 0xe41e, 0x0a5f, 0xf38e, 0xe41e, 0x13b8,
+ 0xe40a, 0x130d, 0xe41e, 0x15eb, 0xa802, 0xe408, 0x130d, 0xba40,
+ 0xe41e, 0x0a5f, 0xf2be, 0xd190, 0x0008, 0xcb20, 0xf7f8, 0xe41e,
+ 0x13d0, 0xf05a, 0xba40, 0xe41e, 0x0a5f, 0xf20e, 0xe41e, 0x13b8,
+ 0xe40a, 0x130d, 0xba40, 0xe41e, 0x0a5f, 0xf18e, 0xe41e, 0x13e9,
+ 0xe40a, 0x130d, 0xe41e, 0x0a5f, 0xf11e, 0x2853, 0x1845, 0xe408,
+ 0x130d, 0x2861, 0x3c28, 0xba20, 0xa102, 0xf08a, 0xa222, 0xe41e,
+ 0x13ad, 0xa102, 0xf038, 0xe41e, 0x0a5f, 0x2853, 0x3c44, 0xe42e,
+ 0xe16a, 0xf7ce, 0x244a, 0x4c4b, 0xe016, 0x3c58, 0xe016, 0x3c59,
+ 0x2842, 0x3c5d, 0xa200, 0x3c5b, 0x3c5f, 0x3c5c, 0x2844, 0x3c53,
+ 0xc70f, 0x7c50, 0x3454, 0x3c55, 0x2853, 0x1843, 0xf122, 0xe41e,
+ 0x0ef5, 0xa202, 0xe41e, 0x0e29, 0x2853, 0xa002, 0x3c53, 0xcf64,
+ 0xe41e, 0x1458, 0xe01a, 0x3c7a, 0x2054, 0x4c55, 0xcf62, 0xf6de,
+ 0x2843, 0x1844, 0x0846, 0x3c46, 0xe42e, 0x3c48, 0xc869, 0xa80f,
+ 0xe042, 0x3c49, 0x7849, 0xa203, 0x5a48, 0xa103, 0xe052, 0xe42e,
+ 0xc868, 0xa80e, 0xa102, 0xb6e8, 0xa002, 0x3c48, 0x7848, 0xa203,
+ 0x5a48, 0xaf03, 0xa103, 0xe046, 0xe016, 0xe42a, 0xa22e, 0x0848,
+ 0x3c48, 0x7848, 0xa203, 0xae2f, 0xa103, 0xe052, 0xe016, 0xe42e,
+ 0xc868, 0xa80e, 0xa102, 0xb6e8, 0xa002, 0x3c48, 0x7848, 0xa203,
+ 0x5a48, 0xaf03, 0xa103, 0xe046, 0xe016, 0xe42a, 0x2860, 0x0848,
+ 0x3c48, 0x7848, 0xa203, 0x5a60, 0xa103, 0xe052, 0xa102, 0xe016,
+ 0xe42e, 0xc869, 0xa80f, 0x3e48, 0x7848, 0xe016, 0xa023, 0x3e48,
+ 0xe42a, 0x7848, 0xa102, 0xe016, 0xe42e, 0xe41e, 0x0a5f, 0x7860,
+ 0xa102, 0xe016, 0xe428, 0xba2c, 0xe42a, 0xba4e, 0x2885, 0xf0aa,
+ 0xc872, 0x2687, 0x4e88, 0xae07, 0xe045, 0xe403, 0x1409, 0xa200,
+ 0xe42e, 0xf6ee, 0xba20, 0xa102, 0xf0ea, 0x2885, 0xf0aa, 0xc872,
+ 0x2687, 0x4e88, 0xae07, 0xe045, 0xe403, 0x1418, 0xa200, 0xe42e,
+ 0xba40, 0xf71e, 0xba2a, 0xa83e, 0x3c41, 0xe42a, 0xa13e, 0xe42a,
+ 0x2841, 0x1833, 0xf6b4, 0x2841, 0x1832, 0xf682, 0x2841, 0xe42e,
+ 0x2825, 0xa104, 0xf058, 0xe41e, 0x1382, 0xa202, 0xe42e, 0xe41e,
+ 0x1bb3, 0xa200, 0xe42e, 0xe41e, 0x0a5f, 0xba20, 0xa102, 0xf0ea,
+ 0xba4e, 0x2885, 0xf0aa, 0xc872, 0x2687, 0x4e88, 0xae07, 0xe045,
+ 0xe403, 0x1444, 0xa200, 0xe42e, 0xf71e, 0xba2a, 0xa83e, 0xe42a,
+ 0xa13e, 0xe42a, 0xa03e, 0xaf08, 0xf6ca, 0xe42e, 0xa200, 0x3c58,
+ 0x3c5f, 0x2825, 0xe418, 0x0ef5, 0xa200, 0xe41e, 0x0e29, 0xe42e,
+ 0xd188, 0x0001, 0x2854, 0xa002, 0x3c54, 0x1850, 0xe428, 0xd1b3,
+ 0x0004, 0x3c54, 0x2855, 0xa002, 0x3c55, 0x1851, 0xe42e, 0xba42,
+ 0xe000, 0x0128, 0xe09e, 0x2907, 0x0861, 0xa402, 0xa53e, 0x3c5d,
+ 0xe42e, 0x2837, 0xf75a, 0xba40, 0xf0da, 0xba40, 0xae0a, 0x0861,
+ 0xe000, 0x012c, 0xe09e, 0x2907, 0x0861, 0xa402, 0xa53e, 0x3c5d,
+ 0xe42e, 0xba48, 0x3c5d, 0xe42e, 0xe161, 0x0200, 0x280b, 0xf03a,
+ 0xa203, 0xf03e, 0x2a5b, 0xb673, 0x3f11, 0xcc45, 0xe184, 0x149c,
+ 0xe41e, 0x149e, 0xe42d, 0x3d11, 0xe41e, 0x149e, 0xe42d, 0x3d11,
+ 0x280b, 0xf03a, 0x8111, 0x8111, 0xe190, 0xe42e, 0xb80c, 0xa140,
+ 0xe42d, 0xe42a, 0x582a, 0x762a, 0x1a2b, 0xf030, 0xe046, 0xe046,
+ 0xe042, 0xe42e, 0x286c, 0xa802, 0xe40a, 0x14c8, 0x280c, 0x3c29,
+ 0x281d, 0x3c2a, 0x281e, 0x3c2b, 0xe161, 0x0200, 0x2a0b, 0x3f11,
+ 0xcc45, 0xe184, 0x14c7, 0xe41e, 0x149e, 0xe42d, 0x3d11, 0xe41e,
+ 0x149e, 0xe42d, 0x3d11, 0x280b, 0xf03a, 0x8111, 0x8111, 0xe190,
+ 0x286c, 0xf20a, 0xa106, 0xf1ea, 0x280d, 0x3c29, 0x281f, 0x3c2a,
+ 0x2820, 0x3c2b, 0xe161, 0x0200, 0x2a0b, 0x3f01, 0xe161, 0x0209,
+ 0x3f11, 0xcc45, 0xe184, 0x14e8, 0xe41e, 0x149e, 0xe42d, 0x3d11,
+ 0xe41e, 0x149e, 0xe42d, 0x3d11, 0x280b, 0xf03a, 0x8111, 0x8111,
+ 0xe190, 0xe42e, 0x28b0, 0x18af, 0xf02a, 0x3c69, 0x284e, 0x18af,
+ 0x3c6a, 0xe42e, 0xe161, 0x0200, 0xe162, 0x0209, 0xa206, 0x3d11,
+ 0x3d12, 0xe41e, 0x1505, 0x3d11, 0x3d12, 0xe42d, 0xe41e, 0x1505,
+ 0x3d11, 0x3d12, 0xe41e, 0x14ea, 0xe42e, 0xb80c, 0xa140, 0xe42e,
+ 0x2861, 0xcf34, 0x2830, 0xe408, 0x1580, 0x2866, 0xf0da, 0xe41e,
+ 0x15eb, 0xcf36, 0xa802, 0x2ac2, 0xe017, 0xe052, 0xf05a, 0xe004,
+ 0x1000, 0xcf02, 0xf08e, 0xd190, 0x0002, 0xcb20, 0xf7f8, 0xcb22,
+ 0xe408, 0x157b, 0xcb02, 0x30b8, 0xaf02, 0x30b7, 0xaf02, 0x30b6,
+ 0xaf02, 0x30b5, 0xaf02, 0x30c6, 0xaf02, 0x300b, 0xaf02, 0x30ab,
+ 0xaf02, 0x305c, 0xaf06, 0x305b, 0xaf02, 0x3058, 0xaf02, 0x3059,
+ 0xaf02, 0x3056, 0xaf02, 0xe049, 0xa807, 0x3e6c, 0xaf04, 0xe049,
+ 0xa83f, 0x3e5d, 0xaf0a, 0x3c5e, 0x2859, 0xf308, 0x2856, 0x2a56,
+ 0xe418, 0x14ea, 0xf1d9, 0x2866, 0xf0aa, 0x286c, 0xe41a, 0x14f2,
+ 0x286c, 0xe418, 0x14aa, 0xe40d, 0x157b, 0xf07e, 0x2858, 0x4cc6,
+ 0xe41a, 0x1484, 0xe40d, 0x157b, 0x2858, 0x2a61, 0x1a27, 0xb606,
+ 0x2a66, 0xb612, 0x3c5f, 0xcf26, 0xd190, 0x0001, 0x2a25, 0xe419,
+ 0x0ef5, 0xcb20, 0xf7f8, 0xa202, 0x3cbb, 0xcb22, 0xe408, 0x157b,
+ 0xa200, 0xe41e, 0x0e29, 0xa202, 0xe42e, 0xa208, 0x3c6c, 0xe41e,
+ 0x144e, 0xa202, 0xe42e, 0xd191, 0x0000, 0xe16a, 0xa200, 0xe42e,
+ 0xd190, 0x0002, 0xcb20, 0xf7f8, 0xcb22, 0xe408, 0x15c0, 0xcb02,
+ 0xaf0e, 0xe049, 0xa807, 0x3e5c, 0xaf06, 0x305b, 0xaf02, 0x3058,
+ 0xaf02, 0x3059, 0xaf08, 0xe049, 0xa83e, 0x3c5d, 0xaf0b, 0x3e5e,
+ 0x2859, 0xf238, 0x2858, 0xf078, 0x2839, 0x443a, 0xf02a, 0xf03e,
+ 0xe41e, 0x1484, 0xe40d, 0x15c0, 0x2834, 0xe016, 0x4458, 0x3c5f,
+ 0x2858, 0x4434, 0xae02, 0x4c5f, 0xcf26, 0xd190, 0x0001, 0x2825,
+ 0xe418, 0x0ef5, 0xcb21, 0xf7f9, 0xcb22, 0xe408, 0x15c0, 0xa200,
+ 0xe41e, 0x0e29, 0xa202, 0xe42e, 0xe41e, 0x144e, 0xa202, 0xe42e,
+ 0xd191, 0x0000, 0xe16a, 0xa200, 0xe42e, 0x2854, 0xaf04, 0xe000,
+ 0x0300, 0xe09e, 0x2a54, 0xa807, 0xa107, 0xe013, 0xae05, 0x3e70,
+ 0xa21f, 0x5a70, 0xa2fe, 0xe059, 0x2907, 0xe052, 0x2a59, 0xf05b,
+ 0x5a70, 0xe056, 0x3d07, 0xf0ae, 0x2ab5, 0xae03, 0x4eb6, 0xae03,
+ 0x4e0b, 0xae03, 0x5a70, 0xe056, 0x3d07, 0x2854, 0xa002, 0x1850,
+ 0xe41a, 0x15fd, 0xe42e, 0x2854, 0xe41a, 0x15ff, 0x2854, 0xaf04,
+ 0xe000, 0x0300, 0xe092, 0x2a54, 0xa807, 0xa107, 0xe013, 0xae05,
+ 0x3e70, 0x2901, 0x5c70, 0xa81e, 0xe42e, 0xa204, 0xf02e, 0xa206,
+ 0x3c06, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02e0,
+ 0xae11, 0xe042, 0x2a55, 0xae0d, 0xe042, 0xca29, 0xf7f9, 0xe180,
+ 0xce20, 0xd111, 0x0300, 0xd112, 0x0020, 0x8806, 0x0113, 0xca28,
+ 0xf7f8, 0xe181, 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0060, 0x0008, 0x0006,
+ 0x00b0, 0x0090, 0x000b, 0x0009, 0x0160, 0x0120, 0x0016, 0x0012,
+ 0x02c0, 0x0240, 0x0058, 0x0012, 0x0580, 0x0480, 0x0160, 0x0012,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0063, 0x000d, 0x000f, 0x0011, 0x0013, 0x0015, 0x0017, 0x0000,
+ 0xffff, 0xfffe, 0x0001, 0x0002, 0x0000, 0x0002, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0000, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0002, 0x0001, 0xfffb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x22f0, 0x4ef1, 0xd130, 0x0003, 0xa200, 0xc401, 0xe188, 0x07ff,
+ 0x3d11, 0x36f0, 0x3ef1, 0xe41e, 0x1899, 0xe41e, 0x18fc, 0xe162,
+ 0x0528, 0xe004, 0x0044, 0x3d12, 0xe004, 0x0069, 0x3d12, 0xe004,
+ 0x0076, 0x3d12, 0xe004, 0x0058, 0x3d12, 0xa202, 0xe0c2, 0x0078,
+ 0xe0c0, 0x0067, 0xa211, 0xe045, 0xf07b, 0x30d0, 0xaf02, 0x30d1,
+ 0xaf02, 0x30d2, 0xf06e, 0xa200, 0x3cd1, 0xa202, 0x3cd2, 0x3cd0,
+ 0xe0c0, 0x0062, 0x3063, 0xaf02, 0x307f, 0xaf02, 0x3085, 0xaf02,
+ 0x3093, 0xe41e, 0x1940, 0xe41e, 0x1901, 0xe40a, 0x1894, 0xe41e,
+ 0x11de, 0x2830, 0xf08a, 0xe41e, 0x11c7, 0xe128, 0xe0c0, 0x0060,
+ 0xe0c2, 0x0046, 0x280f, 0x3c90, 0x2089, 0x4c8a, 0xe0c2, 0x0071,
+ 0xe0c2, 0x004f, 0x2c22, 0xa102, 0xae20, 0x4c21, 0xe0c2, 0x0072,
+ 0x28c3, 0xa80e, 0xae02, 0x4c35, 0xae02, 0x4c30, 0xae02, 0x4c24,
+ 0xae02, 0x4c23, 0xe0c2, 0x0075, 0x28ad, 0xe016, 0x2ae0, 0xae02,
+ 0xe01b, 0xe056, 0xae0e, 0xf09b, 0x2ae0, 0xa81f, 0xe056, 0xae10,
+ 0x2ae0, 0xaf09, 0xe056, 0xf03e, 0xae10, 0x4ce1, 0xe0c2, 0x007b,
+ 0x28e2, 0xae08, 0x4c7e, 0xe0c2, 0x006c, 0x2863, 0x2a35, 0xb612,
+ 0x3c63, 0xa208, 0x0863, 0xe0c2, 0x0073, 0xa200, 0x3c80, 0x2a90,
+ 0xf029, 0xa202, 0x3c9c, 0xe0c2, 0x0074, 0x2823, 0xe016, 0x3c09,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0x3c80, 0xe0c2, 0x0070,
+ 0xe42e, 0xe0c0, 0x0040, 0xa23d, 0xae17, 0xe042, 0xe005, 0x1700,
+ 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0100, 0xd112,
+ 0x0100, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe42e, 0xd130,
+ 0x0003, 0xe41e, 0x0dfd, 0xe0c0, 0x0060, 0xe42a, 0xca28, 0xf7f8,
+ 0xe0c0, 0x0042, 0xce20, 0xd111, 0x03a0, 0xd112, 0x00c4, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0x3c4d, 0xe0c0, 0x0061,
+ 0x3c62, 0xe41e, 0x04c3, 0xe42e, 0xe0c0, 0x0060, 0xf08a, 0xe0c0,
+ 0x0061, 0x2210, 0x4e11, 0xe046, 0xaf12, 0xae02, 0x3c13, 0xa200,
+ 0x3c9a, 0xe180, 0xe41e, 0x11c7, 0xe41e, 0x11d4, 0xe41e, 0x04c3,
+ 0xe166, 0x0054, 0x9e06, 0xf16a, 0x284d, 0xa102, 0xcc44, 0xa200,
+ 0x3c06, 0xe184, 0x18f7, 0x9e06, 0x5c06, 0xa802, 0xf07a, 0x2806,
+ 0xe000, 0x0212, 0xe09e, 0xa208, 0x3d07, 0x2806, 0xa002, 0x3c06,
+ 0xe190, 0xa202, 0x3c8b, 0xe42e, 0xa200, 0xcc72, 0xe0c2, 0x006c,
+ 0xe42e, 0xd198, 0x0004, 0xd190, 0x0004, 0x2880, 0xa908, 0xcf30,
+ 0xcb20, 0xf7c8, 0xe41e, 0x11a4, 0xf328, 0x2880, 0xf308, 0xcb30,
+ 0xaf08, 0xa102, 0xf1ea, 0xa102, 0xf23a, 0xba3e, 0xe002, 0x01b0,
+ 0xf058, 0xba7e, 0xe41e, 0x0644, 0xf67e, 0xba7e, 0xe002, 0x012f,
+ 0xf630, 0xe000, 0x000f, 0xf604, 0xe41e, 0x066c, 0xf5da, 0xa200,
+ 0x3c30, 0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c2f, 0xa202, 0xe42e,
+ 0xba6a, 0xe41e, 0x0805, 0xf50a, 0xa202, 0x3c30, 0xe42e, 0xba60,
+ 0xe41e, 0x0a8c, 0xf49a, 0xa202, 0x3c30, 0xe42e, 0xa200, 0xe42e,
+ 0xa200, 0x3c13, 0x3c16, 0xe41e, 0x11f7, 0xe0c0, 0x0062, 0xaf0c,
+ 0xa802, 0xf10a, 0xe0c1, 0x0048, 0xe0c0, 0x0060, 0xe045, 0xaf13,
+ 0xae03, 0xa109, 0x3e13, 0xf063, 0xe0c0, 0x0061, 0xae04, 0xe042,
+ 0x3c13, 0xe0c0, 0x0060, 0x3410, 0x3c11, 0xe0c0, 0x0061, 0xae04,
+ 0x3c12, 0xe41e, 0x11c7, 0xe41e, 0x11d4, 0xd071, 0x802a, 0xe181,
+ 0x2885, 0xf0aa, 0xe0c1, 0x0060, 0xe0c0, 0x0064, 0xe042, 0xe41e,
+ 0x1224, 0xe41e, 0x1203, 0xe41e, 0x10dd, 0xa202, 0x3c16, 0xe41e,
+ 0x10dd, 0xa200, 0x3c16, 0xd037, 0x0080, 0xe128, 0xe42e, 0x288b,
+ 0xe418, 0x10cf, 0xa200, 0xcc4a, 0xcc4c, 0x3c8b, 0x3ce7, 0x3cd9,
+ 0x3c3f, 0x3c9e, 0x3c9f, 0xe0c2, 0x0074, 0xa2fc, 0xe0c2, 0x0077,
+ 0xa2fa, 0xe0c2, 0x0071, 0xa202, 0xe0c2, 0x0076, 0xe0c0, 0x006c,
+ 0xe002, 0x0088, 0x3cdd, 0xe0c0, 0x0065, 0xaf0a, 0x30e3, 0xe0c0,
+ 0x0045, 0xaf04, 0xa802, 0xf22a, 0x289c, 0xa102, 0x3c9c, 0xf194,
+ 0x28a4, 0xf0a4, 0xe000, 0x02b2, 0xe09e, 0x2907, 0x3c74, 0xe41e,
+ 0x0fa9, 0xe419, 0x0f6e, 0x28a3, 0x3ca5, 0xe0c2, 0x0071, 0x3ca4,
+ 0x287f, 0xe408, 0x1b53, 0xa2fe, 0xe0c2, 0x0071, 0xe40e, 0x1b53,
+ 0xa2fe, 0xe0c2, 0x0071, 0xe40e, 0x1b53, 0xe41e, 0x1b81, 0xa204,
+ 0xe0c2, 0x0075, 0xa2fe, 0xe0c2, 0x0077, 0xe41e, 0x0547, 0xe41e,
+ 0x0538, 0xe42a, 0xa2fc, 0xe0c2, 0x0077, 0xd130, 0x0003, 0xd03a,
+ 0x0003, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000, 0xa200,
+ 0xe0c2, 0x030a, 0x3c46, 0x2830, 0xe418, 0x05b2, 0xe404, 0x19f7,
+ 0xe40d, 0x1b6d, 0x2830, 0xe41a, 0x055e, 0xe404, 0x19f7, 0xe40d,
+ 0x1b6d, 0xe0c0, 0x0065, 0xa808, 0xf0fa, 0x2825, 0xf0da, 0xa2fa,
+ 0xe0c2, 0x0071, 0x3ca5, 0x3ca4, 0x28ae, 0xae2a, 0x4c25, 0xe0c2,
+ 0x0073, 0xe40e, 0x1b45, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0x3c8e,
+ 0xf17a, 0xa102, 0xf048, 0x2825, 0xf13a, 0xf06e, 0xa102, 0xf048,
+ 0x2825, 0xa104, 0xf0d8, 0xa2fa, 0xe0c2, 0x0071, 0x3ca5, 0x3ca4,
+ 0x28ae, 0xae2a, 0x4c25, 0xe0c2, 0x0073, 0xe40e, 0x1b45, 0x2890,
+ 0xe016, 0x4c2e, 0xf218, 0x287d, 0xf1fa, 0x28a4, 0xf064, 0xe000,
+ 0x02b2, 0xe09e, 0x2907, 0x3c74, 0xe41e, 0x0fa9, 0xe419, 0x0f6e,
+ 0xa200, 0x3c7d, 0x28a3, 0x3ca5, 0xe0c2, 0x0071, 0x3ca4, 0xa206,
+ 0x3c92, 0x3c9c, 0xa202, 0x3c76, 0x246e, 0x4c6f, 0xa002, 0x346e,
+ 0x3c6f, 0xe40e, 0x1b39, 0x2825, 0xa802, 0x447d, 0xf06a, 0x28a3,
+ 0xe41e, 0x04fb, 0xa200, 0x3c7d, 0x2890, 0xf14a, 0x2825, 0xf128,
+ 0x287d, 0xf10a, 0x287f, 0xf0ea, 0x28a3, 0xe000, 0x0212, 0xe092,
+ 0x2901, 0xe049, 0xa809, 0xf06b, 0xa806, 0x3d01, 0xa200, 0x3c92,
+ 0x3c7d, 0xe41e, 0x0b4f, 0x286d, 0xa80c, 0xe016, 0x4466, 0xe408,
+ 0x1b6d, 0x282e, 0x2a3f, 0xe017, 0x3e70, 0x2ac3, 0xa103, 0xe017,
+ 0x4e70, 0xe052, 0xf218, 0xe162, 0x0200, 0xa200, 0xc711, 0x3d12,
+ 0x3c44, 0x3c3e, 0x3c0d, 0x3c0c, 0x3cb5, 0x3cb6, 0x3c6c, 0x3c0b,
+ 0x282e, 0xf068, 0x2825, 0xa104, 0xf038, 0xa200, 0x3c66, 0x2852,
+ 0x3c43, 0xa202, 0x3c42, 0xe004, 0x1000, 0xcf02, 0xe41e, 0x1382,
+ 0xa200, 0x3c46, 0xf0fe, 0x2836, 0xe016, 0x4430, 0xf078, 0xe41e,
+ 0x1251, 0xe40a, 0x1b6d, 0xe40e, 0x1aa1, 0xe41e, 0x12ab, 0xe40a,
+ 0x1b6d, 0xe41e, 0x0d8f, 0x244a, 0x4c4b, 0xa002, 0x344a, 0x3c4b,
+ 0xa102, 0xe0c1, 0x0062, 0xa811, 0xa201, 0xe055, 0x2890, 0xf3ca,
+ 0x2825, 0xf06a, 0xa102, 0xf0ea, 0xa102, 0xf36a, 0xf0be, 0x28a2,
+ 0x2a63, 0xf02b, 0x28a6, 0x3ca5, 0xe0c2, 0x0071, 0x3ca4, 0xe40e,
+ 0x1b39, 0xa202, 0x3c92, 0xc872, 0x2687, 0x4e88, 0xae07, 0xe045,
+ 0xaf07, 0xa10b, 0xe403, 0x1ad6, 0x28a2, 0x2a63, 0xf02b, 0x28a6,
+ 0x3ca5, 0xe0c2, 0x0071, 0x3ca4, 0xe40e, 0x1b39, 0xa2fa, 0xe0c2,
+ 0x0071, 0x3ca5, 0x3ca4, 0xa202, 0x3c9d, 0x3c7d, 0x3c9c, 0x246e,
+ 0x4c6f, 0xa102, 0x346e, 0x3c6f, 0xa202, 0xae20, 0xa902, 0xe0c2,
+ 0x0076, 0xe40e, 0x1b39, 0x244a, 0x4c4b, 0xa102, 0xf088, 0xa2fa,
+ 0xe0c2, 0x0071, 0x3ca5, 0x3ca4, 0xe40e, 0x1b39, 0x2890, 0xf3ba,
+ 0x2825, 0xf09a, 0xa102, 0xf10a, 0xa102, 0xf02a, 0xf0de, 0xa204,
+ 0x3c92, 0xf31e, 0x28a2, 0x2a63, 0xf02b, 0x28a6, 0xe0c2, 0x0071,
+ 0x3ca5, 0x3ca4, 0xf2fe, 0xe41e, 0x0a5f, 0xba3e, 0xe002, 0x01b6,
+ 0xf10a, 0x2892, 0xa102, 0xf048, 0xa208, 0x3c92, 0xf23e, 0x28a2,
+ 0x2a63, 0xf02b, 0x28a6, 0xe0c2, 0x0071, 0x3ca5, 0x3ca4, 0xf1ae,
+ 0x2892, 0xa102, 0xf028, 0xf16e, 0xa2fe, 0x3ca5, 0x3ca4, 0xa202,
+ 0x3c92, 0x244a, 0x4c4b, 0xa102, 0x344a, 0x3c4b, 0xa2fa, 0xe0c2,
+ 0x0071, 0xf08e, 0xf079, 0xa2fe, 0x3ca5, 0x3ca4, 0xa2fa, 0xe0c2,
+ 0x0071, 0x244a, 0x4c4b, 0xe0c2, 0x0070, 0x28ae, 0xae2a, 0x4c25,
+ 0xe0c2, 0x0073, 0x2846, 0xe0c2, 0x0072, 0x287f, 0xf0d8, 0xe0c0,
+ 0x0077, 0x2a63, 0xf06b, 0x2a2e, 0xe017, 0x4690, 0x28a6, 0xb7d2,
+ 0xe0c2, 0x0071, 0x3ca4, 0x2889, 0xae20, 0x4c8a, 0xe0c2, 0x006f,
+ 0xe0c2, 0x004f, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053,
+ 0xe41e, 0x0521, 0x28ae, 0xae2a, 0x4c25, 0xe0c2, 0x0073, 0xe41e,
+ 0x01d3, 0xe41e, 0x11de, 0xa202, 0xe42e, 0x2889, 0xae20, 0x4c8a,
+ 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0x2825, 0xe0c2, 0x0073, 0xa2fc,
+ 0xe0c2, 0x0077, 0xe41e, 0x0521, 0xe16a, 0xa200, 0xe0c2, 0x0076,
+ 0xe42e, 0x289d, 0xf04a, 0xa200, 0x3c9d, 0xe42e, 0xa200, 0x3c86,
+ 0x3c16, 0x3c13, 0x2210, 0x4e11, 0x2893, 0xf05a, 0xe0c1, 0x0068,
+ 0x3610, 0x3e11, 0xe0c0, 0x0069, 0xe042, 0xe41e, 0x1224, 0x2010,
+ 0x4c11, 0xe042, 0xe005, 0x0049, 0xe093, 0x9f01, 0xe004, 0xffff,
+ 0x3c12, 0xe41e, 0x11c7, 0xe41e, 0x11d4, 0xe41e, 0x1203, 0xe41e,
+ 0x10dd, 0xa202, 0x3c16, 0xe41e, 0x10dd, 0xa200, 0x3c16, 0xd037,
+ 0x0080, 0xe128, 0xe42e, 0x2ad7, 0xe017, 0x3ed7, 0x2828, 0x3c61,
+ 0x2832, 0x0843, 0x3c45, 0xe160, 0x0006, 0x2825, 0xf0a8, 0xe41e,
+ 0x1c08, 0xe40a, 0x1c06, 0xe41e, 0x1c66, 0xe40a, 0x1c06, 0xf09e,
+ 0xe41e, 0x1c9d, 0xe40a, 0x1c06, 0xe41e, 0x1cfd, 0xe40a, 0x1c06,
+ 0xa200, 0x3c4f, 0x2843, 0x3c53, 0xc70f, 0x7c50, 0x3454, 0x3c55,
+ 0x2828, 0x3c61, 0x3c5d, 0x2853, 0x1852, 0xe40a, 0x1c03, 0xe41e,
+ 0x1d7f, 0xe40a, 0x1c06, 0x285d, 0x3c61, 0x2853, 0xa002, 0x3c53,
+ 0xcf64, 0x2885, 0xf0ba, 0x2853, 0x1852, 0xf08a, 0xc872, 0x2687,
+ 0x4e88, 0xae07, 0xe045, 0xe405, 0x1c06, 0xe41e, 0x1458, 0xe01a,
+ 0x3c7a, 0x2054, 0x4c55, 0xcf62, 0x2853, 0x1845, 0xe408, 0x1bdb,
+ 0xba40, 0xe41e, 0x0a5f, 0x2853, 0x3c44, 0xe42e, 0xe16a, 0xf7ce,
+ 0xd1b3, 0x0020, 0xa200, 0x3c67, 0xe161, 0x0700, 0xe004, 0x0700,
+ 0x3c68, 0x2843, 0x3c53, 0x2853, 0x1852, 0xe402, 0x1c5b, 0x2861,
+ 0xcf34, 0xd198, 0x0000, 0xa203, 0x2861, 0x1827, 0xb605, 0x3e5f,
+ 0xa909, 0xcf27, 0xd190, 0x0002, 0xcb20, 0xf7f8, 0xcb22, 0xe408,
+ 0x1c60, 0xcb02, 0xaf20, 0xe049, 0xa8fe, 0xae02, 0x4c5f, 0xae06,
+ 0xa908, 0x3d11, 0xa83f, 0x3e5d, 0x2a5f, 0xf0bb, 0xcb2a, 0x3511,
+ 0x3d11, 0xcb2c, 0x3511, 0x3d11, 0xcb2e, 0x3511, 0x3d11, 0xf02e,
+ 0x8131, 0xe082, 0xe002, 0x07f0, 0xf084, 0xe41e, 0x1de5, 0x2867,
+ 0xa002, 0x3c67, 0xe161, 0x0700, 0x285f, 0xf058, 0xd190, 0x0008,
+ 0xcb20, 0xf7f8, 0x285d, 0x3c61, 0x2853, 0xa002, 0x3c53, 0xcb30,
+ 0xa808, 0xe40a, 0x1c13, 0xba64, 0x2a53, 0x3e45, 0xa202, 0xe42e,
+ 0xd191, 0x0000, 0x2843, 0x3c53, 0xa200, 0xe42e, 0x1a43, 0xa103,
+ 0xcc45, 0x2867, 0xf07a, 0xe41e, 0x1de5, 0xa200, 0x3c67, 0xe41e,
+ 0x1de7, 0xe161, 0x0700, 0xe184, 0x1c8c, 0xba40, 0xb809, 0xf22d,
+ 0xae08, 0xe056, 0xae16, 0x2b01, 0xe056, 0x3d11, 0x8131, 0xe082,
+ 0xe002, 0x07f0, 0xf0a4, 0xe41e, 0x1de5, 0x2867, 0xa002, 0x3c67,
+ 0xe41e, 0x1de7, 0xe161, 0x0700, 0xe190, 0x2867, 0xf09a, 0xe41e,
+ 0x1de5, 0xa200, 0x3c67, 0xe41e, 0x1de7, 0xa202, 0x3c67, 0xa202,
+ 0xe42e, 0x2843, 0x3c53, 0xa200, 0xe42e, 0xd1b3, 0x0020, 0xa200,
+ 0x3c67, 0xe161, 0x0700, 0x2843, 0xe005, 0x0700, 0x3c53, 0x3e68,
+ 0x2853, 0x1852, 0xe402, 0x1cf4, 0xba40, 0xe40a, 0x1cb1, 0x3d11,
+ 0xf2ce, 0xb802, 0xa10e, 0xe40d, 0x1cf9, 0xf77a, 0xa00e, 0x3058,
+ 0xaf02, 0x305a, 0xaf02, 0x305b, 0xaf02, 0x3c01, 0x285a, 0xae04,
+ 0x4c01, 0xae0e, 0x4c58, 0xae02, 0x4c5b, 0xae02, 0x3d11, 0x2858,
+ 0xf118, 0x285b, 0xb670, 0xcc44, 0xe184, 0x1cd7, 0xe41e, 0x149e,
+ 0xe40d, 0x1cf9, 0x3d11, 0xe41e, 0x149e, 0xe40d, 0x1cf9, 0x3d11,
+ 0xf04e, 0x2858, 0xf02a, 0x8131, 0xe082, 0xe002, 0x07f0, 0xf084,
+ 0xe41e, 0x1de5, 0x2867, 0xa002, 0x3c67, 0xe161, 0x0700, 0x2853,
+ 0xa002, 0x3c53, 0xd198, 0x0002, 0xd190, 0x0008, 0xcb20, 0xf7f8,
+ 0xcb30, 0xa808, 0xe40a, 0x1ca8, 0xba60, 0x2a53, 0x3e45, 0xa202,
+ 0xe42e, 0x2843, 0x3c53, 0xa200, 0xe42e, 0x1a43, 0xa103, 0xcc45,
+ 0x2867, 0xf07a, 0xe41e, 0x1de5, 0xa200, 0x3c67, 0xe41e, 0x1de7,
+ 0xe161, 0x0700, 0xe184, 0x1d6c, 0x2901, 0x3c70, 0xe049, 0xa803,
+ 0xe40b, 0x1d17, 0x2861, 0x3c5d, 0x3f11, 0xe40e, 0x1d5e, 0xaf02,
+ 0x305b, 0xaf02, 0x3058, 0xaf12, 0x305a, 0x2858, 0xae04, 0x4c5a,
+ 0xae12, 0xcf02, 0x2861, 0xcf34, 0x2858, 0x2a61, 0x1a27, 0xb606,
+ 0x3c5f, 0xa908, 0xcf26, 0xd190, 0x0002, 0x2870, 0xe008, 0x07ff,
+ 0x3c70, 0xcb20, 0xf7f8, 0xcb22, 0xe408, 0x1d79, 0xcb02, 0xaf0e,
+ 0x305c, 0xaf12, 0xa23f, 0xe051, 0x3e5d, 0xaf0e, 0x3c5e, 0x285c,
+ 0xae08, 0x4c5e, 0xae0e, 0x4c5d, 0xae02, 0x4c5f, 0xae06, 0x4c70,
+ 0x3d11, 0x2858, 0xf0fa, 0x285f, 0xf0ba, 0xcb2a, 0x3511, 0x3d11,
+ 0xcb2c, 0x3511, 0x3d11, 0xcb2e, 0x3511, 0x3d11, 0xf08e, 0x8131,
+ 0xf06e, 0x8111, 0x8111, 0x285b, 0xf02a, 0x8131, 0xe082, 0xe002,
+ 0x07f0, 0xf0a4, 0xe41e, 0x1de5, 0x2867, 0xa002, 0x3c67, 0xe41e,
+ 0x1de7, 0xe161, 0x0700, 0x285d, 0x3c61, 0x2867, 0xf09a, 0xe41e,
+ 0x1de5, 0xa200, 0x3c67, 0xe41e, 0x1de7, 0xa202, 0x3c67, 0xa202,
+ 0xe42e, 0xd191, 0x0000, 0x2843, 0x3c53, 0xa200, 0xe42e, 0x2861,
+ 0xcf34, 0x2868, 0xe092, 0x2911, 0x3059, 0x2a59, 0xe409, 0x1dd8,
+ 0xaf02, 0x305b, 0xaf02, 0x3058, 0xaf02, 0x305f, 0xaf02, 0xa23f,
+ 0xe051, 0x3e5d, 0xaf0a, 0xa27f, 0xe051, 0x3e5e, 0xaf0c, 0x3c5c,
+ 0x2858, 0xf0c8, 0xe162, 0x0201, 0xa20e, 0x2a5b, 0xb636, 0xcc44,
+ 0xe184, 0x1da3, 0x2911, 0x3d12, 0xf0ee, 0x285f, 0xf0ba, 0x2111,
+ 0x4d11, 0xcf2a, 0x2111, 0x4d11, 0xcf2c, 0x2111, 0x4d11, 0xcf2e,
+ 0xf02e, 0x8131, 0x285e, 0xae08, 0x4c59, 0xae02, 0x4c58, 0xae02,
+ 0x4c5b, 0xae14, 0xcf02, 0x285f, 0xcf26, 0xd190, 0x0001, 0x2825,
+ 0xe418, 0x0ef5, 0xcb20, 0xf7f8, 0xcb22, 0xf188, 0xa200, 0xe41e,
+ 0x0e29, 0xe082, 0x3c68, 0xe002, 0x07f0, 0xf094, 0xe41e, 0x1de7,
+ 0x2867, 0xa002, 0x3c67, 0xe004, 0x0700, 0x3c68, 0xa202, 0xe42e,
+ 0xd181, 0x1000, 0xe41e, 0x144e, 0xf6de, 0xd191, 0x0000, 0xe16a,
+ 0x2846, 0xa002, 0x3c46, 0xa200, 0xe42e, 0xa204, 0xf02e, 0xa206,
+ 0x3c06, 0xe0c0, 0x0041, 0xe005, 0x0050, 0x0a67, 0x0a67, 0xae11,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0700, 0xd112, 0x0100,
+ 0x2806, 0xce26, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0065, 0xaf18,
+ 0xa802, 0xe40a, 0x1e7f, 0xae0a, 0xe0c1, 0x0060, 0xaf0d, 0xa80f,
+ 0xe056, 0xe0c1, 0x0044, 0xa811, 0xe056, 0xae0c, 0xe0c1, 0x0044,
+ 0xa80f, 0xe056, 0xe167, 0x0ba7, 0x2f17, 0xe056, 0xe0c2, 0x0282,
+ 0xe0c0, 0x006e, 0xe0c2, 0x0284, 0xaf20, 0xe0c1, 0x0282, 0xa809,
+ 0xf04b, 0xe049, 0xae1f, 0xf06e, 0xe049, 0xa011, 0xaf09, 0xae07,
+ 0xae21, 0xe056, 0xe0c2, 0x028c, 0xe167, 0x0ba8, 0x2d17, 0x4917,
+ 0xe0c2, 0x0285, 0xe167, 0x0baa, 0x2d17, 0x4917, 0xe0c2, 0x0286,
+ 0xe41e, 0x1e80, 0xe0c0, 0x004a, 0xe0c2, 0x0289, 0xe0c0, 0x004b,
+ 0xe0c2, 0x028a, 0xe0c0, 0x0055, 0xe0c2, 0x028b, 0xe0c1, 0x0041,
+ 0xe004, 0x0240, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba0, 0x2d17, 0x4917, 0xe0c2, 0x0287, 0xe0c1, 0x0041,
+ 0xe004, 0x0258, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba2, 0x2d17, 0x4917, 0xe0c2, 0x0288, 0xe0c1, 0x0041,
+ 0xe004, 0x0260, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba4, 0x2d17, 0x4917, 0xe0c2, 0x028d, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xe0c2, 0x0280, 0xa210, 0xe0c2, 0x0168, 0xe42e,
+ 0xe167, 0x0bac, 0xe165, 0x028e, 0xe166, 0x02c0, 0xd022, 0x0008,
+ 0xe184, 0x1e93, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02d2, 0xd022, 0x0008,
+ 0xe184, 0x1e9f, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190,
+ 0xe166, 0x02db, 0xd022, 0x0008, 0xe184, 0x1eab, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02e4, 0xd022, 0x0008,
+ 0xe184, 0x1eb6, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe42e,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x0b3a, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0143, 0xe40e, 0x007e, 0xe40e,
+ 0x0147, 0xe40e, 0x007e, 0xe40e, 0x014b, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x03d4, 0xe40e, 0x03e7, 0xe41e,
+ 0x014f, 0xe40e, 0x007e, 0xe41e, 0x01c1, 0xe40e, 0x007e, 0xe41e,
+ 0x01c2, 0xe40e, 0x007e, 0xe41e, 0x02a1, 0xe40e, 0x007e, 0xe41e,
+ 0x0452, 0xe40e, 0x007e, 0xe41e, 0x02d5, 0xe40e, 0x007e, 0xd130,
+ 0x0003, 0xa200, 0xc401, 0xe188, 0x07ff, 0x3d11, 0xa200, 0x3c63,
+ 0x3c64, 0x3c65, 0x3c62, 0x3c61, 0x3c60, 0xa200, 0x3c72, 0x3c77,
+ 0x3c8d, 0x3c8e, 0x3c68, 0x3c69, 0x3c6a, 0x3c2b, 0xa202, 0xe0c2,
+ 0x0078, 0xe0c0, 0x0062, 0xaf04, 0x3073, 0xaf02, 0x3078, 0x2873,
+ 0xf17a, 0xe0c0, 0x0063, 0xe049, 0xe009, 0xffff, 0x3e71, 0xa01f,
+ 0xaf09, 0x3e31, 0xe049, 0xaf21, 0xe009, 0xffff, 0x3e70, 0xa01f,
+ 0xaf09, 0x3e30, 0x8430, 0x8231, 0xe018, 0x3c32, 0xf0ae, 0xe41e,
+ 0x0b0e, 0xe0c0, 0x0062, 0x3041, 0xe41e, 0x0532, 0xe40a, 0x01bc,
+ 0x2873, 0xe40a, 0x019c, 0xa200, 0x3c2b, 0x3c74, 0xe41e, 0x0afc,
+ 0xa202, 0x3c52, 0x3c23, 0x3c59, 0x2070, 0x4c71, 0xe0c2, 0x0071,
+ 0x2c21, 0xa102, 0xae20, 0x4c20, 0xe0c2, 0x0072, 0xa200, 0xe0c2,
+ 0x0075, 0x2841, 0xae02, 0xa006, 0xe0c2, 0x0073, 0xa200, 0x3c72,
+ 0xe0c2, 0x0074, 0xa202, 0xae20, 0xe0c2, 0x007b, 0xe41e, 0x0c4d,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0x3c72, 0xe0c2, 0x0070,
+ 0xe42e, 0xe42e, 0xa200, 0xcc4a, 0xcc4c, 0xcc72, 0xa2fc, 0xe0c2,
+ 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0xa202, 0xe0c2, 0x0076, 0x2877,
+ 0xf06a, 0xe41e, 0x0b4b, 0xe128, 0xa200, 0x3c77, 0xe0c0, 0x0045,
+ 0xaf04, 0xa802, 0x4473, 0xb7f0, 0xf04a, 0xe0c2, 0x0071, 0xe42e,
+ 0xa2fe, 0xe0c2, 0x0077, 0xe41e, 0x0305, 0xe41e, 0x0333, 0xf058,
+ 0xa2fc, 0xe0c2, 0x0071, 0xe42e, 0xa2fc, 0xe0c2, 0x0077, 0xd130,
+ 0x0003, 0xd03a, 0x0003, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008,
+ 0x0000, 0xa200, 0xe0c2, 0x030a, 0x3c29, 0x288e, 0xf228, 0xa200,
+ 0x3c74, 0x2873, 0xf04a, 0xe41e, 0x0ad1, 0xf05e, 0xe41e, 0x069a,
+ 0x288e, 0xf178, 0xe41e, 0x06bc, 0x2a73, 0xf0eb, 0xe0c1, 0x0065,
+ 0xa809, 0xf0ab, 0x2a22, 0xf08b, 0xa2fa, 0xe0c2, 0x0071, 0x2822,
+ 0xe0c2, 0x0073, 0xe42e, 0xe40a, 0x0266, 0xe41e, 0x0c33, 0xf19a,
+ 0x2a44, 0x4e42, 0xf03b, 0x288d, 0xf06a, 0xa2fe, 0xe0c2, 0x0071,
+ 0xa202, 0xe42e, 0xa202, 0x3c8d, 0x2a79, 0x3e7b, 0x287a, 0x3c7d,
+ 0xe0c2, 0x0071, 0xe41e, 0x093c, 0xe41e, 0x0342, 0xa202, 0xe42e,
+ 0xe41e, 0x0750, 0x2825, 0xf0a8, 0xa200, 0x3c28, 0x2832, 0x3c27,
+ 0xe41e, 0x04af, 0xa200, 0x3c29, 0xf05e, 0xe41e, 0x0458, 0xe40a,
+ 0x0266, 0xe41e, 0x097d, 0x2c2b, 0xa002, 0x3c2b, 0xe0c2, 0x0070,
+ 0x2822, 0xe0c2, 0x0073, 0x2070, 0x4c71, 0xe0c2, 0x006f, 0x2829,
+ 0xe0c2, 0x0072, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053,
+ 0xe41e, 0x031c, 0xa202, 0xe0c2, 0x0076, 0xe42e, 0xe41e, 0x097d,
+ 0xe41e, 0x031c, 0xa200, 0xe0c2, 0x0076, 0xe42e, 0x2834, 0x4c35,
+ 0xe01a, 0x3c46, 0x2842, 0xf11a, 0x2834, 0xe41a, 0x039a, 0x2834,
+ 0xaf02, 0xe000, 0x0640, 0xe09e, 0x2907, 0x2a34, 0xa803, 0xf029,
+ 0xaf10, 0xe008, 0x001f, 0x3c43, 0x2843, 0xae02, 0x4c46, 0xae02,
+ 0x4c47, 0xae0e, 0x4c34, 0xae0e, 0x4c35, 0xe0c1, 0x014b, 0xf7e9,
+ 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe42e, 0x2834, 0xa002,
+ 0x3c34, 0x1830, 0xe428, 0x3c34, 0x2835, 0xa002, 0x3c35, 0x1831,
+ 0xe42e, 0xd130, 0x0003, 0xca28, 0xf7f8, 0xe41e, 0x0724, 0xe0c0,
+ 0x0060, 0xe42a, 0xca29, 0xf7f9, 0xe0c0, 0x0042, 0xce20, 0xd111,
+ 0x0300, 0xd112, 0x00c0, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0060, 0x3c2c, 0xe0c0, 0x0061, 0x3c40, 0xe41e, 0x0a03, 0xe42e,
+ 0xe0c0, 0x0040, 0xa24d, 0xae17, 0xe042, 0xe005, 0x1700, 0xae03,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0100, 0xd112, 0x0100,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0060, 0xf08a,
+ 0xe0c0, 0x0061, 0x2210, 0x4e11, 0xe046, 0xaf12, 0xae02, 0x3c13,
+ 0xa200, 0x3c6a, 0xe180, 0xe41e, 0x0b2d, 0xe41e, 0x0b99, 0xe41e,
+ 0x0a03, 0xe166, 0x0054, 0x9e06, 0xf16a, 0x282c, 0xa102, 0xcc44,
+ 0xa200, 0x3c3c, 0xe184, 0x0300, 0x9e06, 0x5c3c, 0xa802, 0xf07a,
+ 0x283c, 0xe000, 0x03c0, 0xe09e, 0xa208, 0x3d07, 0x283c, 0xa002,
+ 0x3c3c, 0xe190, 0xa202, 0x3c77, 0xe42e, 0x282c, 0xa102, 0xcc44,
+ 0xa200, 0x3c3c, 0xe184, 0x031a, 0xe0c0, 0x0054, 0x5c3c, 0xa802,
+ 0xf058, 0x283c, 0xe41e, 0x0a43, 0xf04e, 0x283c, 0xe41e, 0x0a4a,
+ 0x2a3c, 0xa003, 0x3e3c, 0xe42e, 0xe004, 0x03c0, 0xe09e, 0xe004,
+ 0x0054, 0xe09c, 0x282c, 0xa102, 0xcc44, 0xa200, 0x3c3c, 0xe184,
+ 0x0330, 0x2b17, 0xaf05, 0xa803, 0x5a3c, 0xe056, 0x2a3c, 0xa003,
+ 0x3e3c, 0x9f06, 0xe42e, 0xe161, 0x03c0, 0x282c, 0xa102, 0xcc44,
+ 0xa200, 0xe184, 0x033e, 0x2b11, 0xa80d, 0xe01b, 0xe042, 0x182c,
+ 0xe01a, 0xe42e, 0xa200, 0x3c34, 0x3c35, 0xa202, 0x3c47, 0xe41e,
+ 0x026e, 0xe41e, 0x0296, 0xf7c8, 0xa200, 0x3c47, 0xe41e, 0x026e,
+ 0xe190, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0x2a24, 0x2834, 0xa802,
+ 0xf0e8, 0xae11, 0x3e8a, 0x2834, 0xa002, 0x1830, 0xe428, 0x2834,
+ 0xaf02, 0xe000, 0x0600, 0xe09e, 0x3f07, 0xf0ee, 0x2a8a, 0x2834,
+ 0xaf02, 0xe000, 0x0600, 0xe09e, 0x4e24, 0x3f07, 0x2834, 0xa002,
+ 0x1830, 0xe428, 0xf01e, 0x2830, 0xa002, 0xaf02, 0xa006, 0xa2f9,
+ 0xe052, 0xae02, 0x3c3b, 0x2879, 0xa806, 0x3c3d, 0xe0c1, 0x0041,
+ 0xe004, 0x029c, 0xae10, 0xe042, 0x843d, 0xe182, 0x2000, 0xe019,
+ 0xe042, 0x8435, 0x823b, 0xe019, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0600, 0x283b, 0xaf02, 0xce24, 0xa204, 0xce26, 0xca28,
+ 0xf7f8, 0xe42e, 0x2a34, 0x288b, 0xa803, 0xf02b, 0xe42e, 0x2834,
+ 0xe41a, 0x03ad, 0x2834, 0xaf02, 0xe000, 0x0640, 0xe09e, 0x2907,
+ 0xe049, 0xaf10, 0xa83f, 0x3e8b, 0xe42e, 0x2830, 0xa002, 0xaf02,
+ 0xa006, 0xa2f9, 0xe052, 0xae02, 0x3c3b, 0x287b, 0xa806, 0x3c3d,
+ 0xe0c1, 0x0041, 0xe004, 0x029c, 0xae10, 0xe042, 0x843d, 0xe182,
+ 0x2000, 0xe019, 0xe042, 0x8435, 0x823b, 0xe019, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0640, 0x283b, 0xaf02, 0xce24, 0xa206,
+ 0xce26, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e,
+ 0x0100, 0xa206, 0xe41e, 0x03f0, 0xe0c0, 0x005a, 0x3cee, 0xe41e,
+ 0x0100, 0xa226, 0xe41e, 0x0406, 0xe41e, 0x041c, 0xe42e, 0xa224,
+ 0xe41e, 0x0406, 0xe41e, 0x0437, 0xa204, 0xe41e, 0x03f0, 0xe42e,
+ 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11, 0xe042, 0x22f0,
+ 0x4ef1, 0xe042, 0xce20, 0xca29, 0xf7f9, 0xd111, 0x0000, 0xd112,
+ 0x0c00, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0x3ced, 0xe0c0,
+ 0x0041, 0xe005, 0x0298, 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100, 0x88ed,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe161, 0x07e0, 0x8911, 0x0034,
+ 0x8911, 0x0033, 0x8911, 0x0035, 0x8911, 0x0036, 0x8911, 0x0037,
+ 0x8911, 0x0038, 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11, 0xcc62,
+ 0x2111, 0x4d11, 0xcc64, 0x2111, 0x4d11, 0xcc72, 0xe42e, 0xe161,
+ 0x07e0, 0x8b11, 0x0034, 0x8b11, 0x0033, 0x8b11, 0x0035, 0x8b11,
+ 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038, 0xc860, 0x3511, 0x3d11,
+ 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511, 0x3d11, 0xc872, 0x3511,
+ 0x3d11, 0xe42e, 0xa200, 0x3c6a, 0x3c69, 0x3c2b, 0x3c8d, 0xe42e,
+ 0x2824, 0xe0c2, 0x0115, 0xa202, 0xcf66, 0xa200, 0x3c33, 0x3c28,
+ 0xcf64, 0xcf62, 0xa200, 0x3c51, 0x2833, 0x0850, 0x3c51, 0x2a51,
+ 0x1a32, 0xf037, 0x2a32, 0x3e51, 0xe41e, 0x047a, 0x2a3a, 0xa003,
+ 0x3e3a, 0x1851, 0xf064, 0x2851, 0x1832, 0xf6f4, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0x2866, 0x5401, 0x3c66, 0x2833, 0xc70f, 0x7c30,
+ 0x3434, 0x3c35, 0x2833, 0xe002, 0x0094, 0xf028, 0xe190, 0xe41e,
+ 0x04d0, 0xe40a, 0x04a6, 0x2873, 0xf08a, 0xc872, 0x2676, 0x4e75,
+ 0xae07, 0xe045, 0xe405, 0x04a6, 0xe41e, 0x0518, 0x2034, 0x4c35,
+ 0xcf62, 0x2833, 0xe002, 0x00c8, 0xf028, 0xe190, 0x2833, 0x1851,
+ 0xf628, 0xa204, 0xcf66, 0x2833, 0x3c28, 0xe42e, 0x2833, 0x3c28,
+ 0x2851, 0x3c27, 0xe41e, 0x04af, 0x2833, 0xe16a, 0xf73e, 0x2c2b,
+ 0xe016, 0x3c36, 0xe016, 0x3c37, 0xa200, 0x3c38, 0x2828, 0x3c33,
+ 0xc70f, 0x7c30, 0x3434, 0x3c35, 0x2833, 0x1827, 0xf0d2, 0x2822,
+ 0xe418, 0x0c7b, 0xa202, 0xe41e, 0x09b4, 0xe41e, 0x0518, 0x2034,
+ 0x4c35, 0xcf62, 0xf72e, 0x2827, 0x1828, 0x0829, 0x3c29, 0xe42e,
+ 0x2853, 0xae06, 0xcf26, 0xd190, 0x0002, 0xcb20, 0xf7f8, 0xcb22,
+ 0xe408, 0x0513, 0xcb02, 0xaf0e, 0x3038, 0xaf08, 0x3036, 0xaf02,
+ 0x3037, 0xaf12, 0x3c39, 0x2836, 0x4c37, 0xe41a, 0x0c66, 0x2836,
+ 0x4c37, 0xe418, 0x052c, 0x2822, 0xf068, 0x8839, 0x0182, 0xe190,
+ 0xcb04, 0x3c39, 0x2837, 0x4422, 0xe418, 0x0c7b, 0xe40d, 0x0513,
+ 0x2837, 0xf158, 0x2836, 0xcf26, 0x2839, 0xae08, 0x4c37, 0xae02,
+ 0x4c36, 0xae16, 0xcf02, 0xd190, 0x0001, 0x2822, 0xe418, 0x0c7b,
+ 0xf0bd, 0xcb20, 0xf7f8, 0xcb22, 0xe408, 0x0513, 0xa200, 0xe41e,
+ 0x09b4, 0xa202, 0xe42e, 0xd191, 0x0000, 0xe16a, 0xa200, 0xe42e,
+ 0xa202, 0xcf10, 0x2833, 0xa002, 0x3c33, 0xcf64, 0x2834, 0xa002,
+ 0x3c34, 0x1830, 0xe428, 0xa208, 0xcf66, 0xa200, 0x3c34, 0x2835,
+ 0xa002, 0x3c35, 0x1831, 0xe42e, 0xa201, 0xe161, 0x03e0, 0x3f11,
+ 0x3f11, 0xe42e, 0xe41e, 0x071f, 0x2872, 0xf138, 0xba3e, 0x3c00,
+ 0x3401, 0xe004, 0x4646, 0x1800, 0xf088, 0xe004, 0x5249, 0x1801,
+ 0xf048, 0xe41e, 0x0572, 0xf038, 0xba4e, 0xf6fe, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0xba3e, 0x3c00, 0x3401, 0xe080, 0x1800, 0xf068,
+ 0xe082, 0x1801, 0xf038, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xba7e,
+ 0x3402, 0x3c03, 0x2c02, 0x2e02, 0xaf10, 0xe008, 0x00ff, 0xae11,
+ 0xe009, 0xff00, 0xe056, 0x3c02, 0x2c03, 0x2e03, 0xaf10, 0xe008,
+ 0x00ff, 0xae11, 0xe009, 0xff00, 0xe056, 0x3c03, 0x2c03, 0x0c02,
+ 0xe01a, 0xe42e, 0xa200, 0x3c05, 0xe160, 0x4646, 0xe161, 0x5249,
+ 0xe41e, 0x054a, 0xba7e, 0xba7e, 0xe160, 0x4920, 0xe161, 0x4156,
+ 0xe41e, 0x054a, 0xe408, 0x058c, 0xe160, 0x4958, 0xe161, 0x4156,
+ 0xe41e, 0x054a, 0xe40a, 0x068d, 0xba7e, 0xa200, 0xe160, 0x5354,
+ 0xe161, 0x4c49, 0xe41e, 0x054a, 0xf0fa, 0xba7e, 0xe41e, 0x0557,
+ 0xe160, 0x7669, 0xe161, 0x6d6f, 0xe41e, 0x054a, 0xba7f, 0xe408,
+ 0x0688, 0xe40e, 0x0686, 0xe160, 0x6968, 0xe161, 0x6176, 0xe41e,
+ 0x054a, 0xf29a, 0xba7e, 0xe41e, 0x0557, 0x2802, 0xaf04, 0xa114,
+ 0x3c04, 0xba7e, 0xba7e, 0xba7e, 0xba7e, 0xba7e, 0xba7e, 0xba7e,
+ 0xba7e, 0xe41e, 0x0557, 0x2802, 0x3c70, 0xa01e, 0xaf08, 0x3c30,
+ 0xe41e, 0x0557, 0x2802, 0x3c71, 0xa01e, 0xaf08, 0x3c31, 0x8430,
+ 0x8231, 0xe018, 0x3c32, 0x2804, 0xf04a, 0xba7f, 0xa102, 0xf7de,
+ 0xe40e, 0x0686, 0xe160, 0x7268, 0xe161, 0x7374, 0xe41e, 0x054a,
+ 0xe40a, 0x063c, 0xba7e, 0xe41e, 0x0557, 0x2802, 0xaf04, 0xa114,
+ 0x3c04, 0xe160, 0x6473, 0xe161, 0x7669, 0xe41e, 0x054a, 0xba7f,
+ 0xf32a, 0xa202, 0x3c05, 0xe160, 0x7633, 0xe161, 0x6469, 0xe41e,
+ 0x054a, 0xf238, 0xe160, 0x5633, 0xe161, 0x4449, 0xe41e, 0x054a,
+ 0xf1c8, 0xe160, 0x7634, 0xe161, 0x6469, 0xe41e, 0x054a, 0xf158,
+ 0xe160, 0x5634, 0xe161, 0x4449, 0xe41e, 0x054a, 0xf0e8, 0xe160,
+ 0x3433, 0xe161, 0x6d70, 0xe41e, 0x054a, 0xf078, 0xe160, 0x3433,
+ 0xe161, 0x4d50, 0xe41e, 0x054a, 0x3c52, 0xba7f, 0x2804, 0xa102,
+ 0x3c04, 0xf0ae, 0xe160, 0x6473, 0xe161, 0x6175, 0xe41e, 0x054a,
+ 0xba7f, 0xa200, 0x3c05, 0xba7e, 0xba7e, 0xba7e, 0x2805, 0xf048,
+ 0xba7e, 0xba7e, 0xf07e, 0xe41e, 0x068f, 0x3c21, 0xe41e, 0x068f,
+ 0x3c20, 0xba7e, 0xba7e, 0xba7e, 0xba7e, 0x2804, 0xf04a, 0xba7f,
+ 0xa102, 0xf7de, 0xe40e, 0x0686, 0xe160, 0x7266, 0xe161, 0x7374,
+ 0xe41e, 0x054a, 0xe40a, 0x0685, 0xba7e, 0xe41e, 0x0557, 0x2802,
+ 0xaf04, 0x3c04, 0x2805, 0xf33a, 0x2804, 0xa10a, 0x3c04, 0xba7e,
+ 0xe41e, 0x0557, 0x2802, 0xa01e, 0xaf08, 0x3c30, 0xe41e, 0x0557,
+ 0x2802, 0xa01e, 0xaf08, 0x3c31, 0x8430, 0x8231, 0xe018, 0x3c32,
+ 0xba7e, 0xe160, 0x7633, 0xe161, 0x6469, 0xe41e, 0x054a, 0xf158,
+ 0xe160, 0x5633, 0xe161, 0x4449, 0xe41e, 0x054a, 0xf0e8, 0xe160,
+ 0x7634, 0xe161, 0x6469, 0xe41e, 0x054a, 0xf078, 0xe160, 0x5634,
+ 0xe161, 0x4449, 0xe41e, 0x054a, 0x3c52, 0xba7f, 0x2804, 0xf04a,
+ 0xba7f, 0xa102, 0xf7de, 0xe40e, 0x0686, 0xba7e, 0xe40e, 0x058d,
+ 0xa202, 0x3c23, 0x3c59, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xba4e,
+ 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31,
+ 0xe056, 0xe42e, 0xe41e, 0x071f, 0xe160, 0x7831, 0xe161, 0x6964,
+ 0xe41e, 0x054a, 0xe408, 0x06b5, 0xe160, 0x6462, 0xe161, 0x3030,
+ 0xe41e, 0x054a, 0xe408, 0x06b7, 0xe160, 0x6463, 0xe161, 0x3030,
+ 0xe41e, 0x054a, 0xf058, 0xba4e, 0xf68e, 0xa202, 0x3c8e, 0xba7e,
+ 0xe41e, 0x0557, 0xf62a, 0xe42e, 0x2873, 0xf04a, 0x2076, 0x4c75,
+ 0xe42a, 0xba42, 0x3c22, 0x3c26, 0xba48, 0x3c24, 0x2822, 0xf2b8,
+ 0xa224, 0x3c56, 0xa228, 0x3c57, 0xa22c, 0x3c55, 0xa232, 0x3c54,
+ 0xa202, 0x3c23, 0xba48, 0xa12c, 0xe406, 0x071d, 0x3c50, 0x2831,
+ 0xc70f, 0x7c50, 0x3c50, 0x8430, 0x8250, 0xe018, 0x3c50, 0xba40,
+ 0xf05a, 0xba40, 0xa235, 0xe042, 0x3c54, 0xba40, 0xf05a, 0xba40,
+ 0xa22f, 0xe042, 0x3c55, 0xba40, 0xa225, 0xe042, 0x3c56, 0xa004,
+ 0x3c57, 0xf27e, 0xa224, 0x3c56, 0xa228, 0x3c57, 0xa22c, 0x3c55,
+ 0xa232, 0x3c54, 0xa238, 0x3c58, 0x2859, 0xf04a, 0x2823, 0xe016,
+ 0xf02e, 0xa202, 0x3c23, 0xba40, 0x3c53, 0xba40, 0xf08a, 0xba41,
+ 0xa22e, 0xe042, 0x3c55, 0xa234, 0xe042, 0x3c54, 0xba40, 0xa225,
+ 0xe042, 0x3c56, 0xa004, 0x3c57, 0xba40, 0xa239, 0xe042, 0x3c58,
+ 0xa202, 0x3c25, 0xa202, 0xe42e, 0xba7e, 0xa200, 0xe42e, 0xc868,
+ 0xa80e, 0x3c2a, 0x742a, 0xe42e, 0xe0c0, 0x0064, 0x3c81, 0x3480,
+ 0xe0c0, 0x0065, 0x3c83, 0x3482, 0xe0c0, 0x0066, 0x3c85, 0x3484,
+ 0xe0c0, 0x0067, 0x3c87, 0x3486, 0xe0c0, 0x0069, 0xe167, 0x0ba0,
+ 0x3d17, 0x3517, 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b,
+ 0x3d17, 0x3517, 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20, 0xd111,
+ 0x0ba8, 0xd112, 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0xa200, 0xcf24, 0xcf46, 0xcf68, 0xe0c2, 0x0104, 0xe0c2, 0x0140,
+ 0xe0c2, 0x0149, 0xe0c2, 0x0308, 0xe0c2, 0x030d, 0xe0c2, 0x0309,
+ 0xe0c2, 0x030a, 0xe0c2, 0x030b, 0xe0c2, 0x0168, 0xcc8e, 0xe0c2,
+ 0x0320, 0xa200, 0x3c66, 0x3c62, 0x3c60, 0xa246, 0xe0c2, 0x0100,
+ 0xe004, 0x00d6, 0xe0c2, 0x017c, 0xe004, 0x0014, 0xe0c2, 0x017d,
+ 0xe0c0, 0x0050, 0x3048, 0xaf02, 0x3049, 0xaf02, 0x304a, 0xaf02,
+ 0x304b, 0xaf0a, 0x304c, 0xaf02, 0x304d, 0xaf02, 0x304e, 0xaf02,
+ 0x304f, 0xe0c0, 0x0050, 0xaf1c, 0xa802, 0xe005, 0x0ba6, 0xe09f,
+ 0x3d17, 0x284c, 0x4448, 0x3c48, 0x284d, 0x4449, 0x3c49, 0x284e,
+ 0x444a, 0x3c4a, 0x284f, 0x444b, 0x3c4b, 0xa200, 0x2a48, 0xf03b,
+ 0xe00a, 0x0002, 0x2a49, 0xf03b, 0xe00a, 0x0009, 0x2a4a, 0xf03b,
+ 0xe00a, 0x0020, 0x2a4b, 0xf03b, 0xe00a, 0x0040, 0xe005, 0x0ba6,
+ 0xe09f, 0x2b17, 0xae05, 0xe056, 0xe0c2, 0x0169, 0xe0c1, 0x0041,
+ 0xe004, 0x0044, 0xae10, 0xe042, 0x2a4e, 0xf03b, 0x2084, 0x4c85,
+ 0xe0c2, 0x0211, 0xe0c1, 0x0041, 0xe004, 0x0080, 0xae10, 0xe042,
+ 0x2a4f, 0xf03b, 0x2086, 0x4c87, 0xe0c2, 0x0212, 0x2854, 0xa132,
+ 0xae04, 0xe049, 0x2855, 0xa12c, 0xe055, 0xae03, 0x2856, 0xa124,
+ 0xe055, 0xcf33, 0xe0c1, 0x0041, 0xe004, 0x003c, 0xae10, 0xe042,
+ 0x2a4c, 0xf03b, 0x2080, 0x4c81, 0xcf44, 0xa220, 0x4c22, 0xae02,
+ 0xcf00, 0xa200, 0xcf46, 0x2830, 0xae20, 0x4c31, 0xae08, 0xe0c2,
+ 0x0101, 0xe0c2, 0x0283, 0xcf60, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0x2a4d, 0xf03b, 0x2082, 0x4c83, 0xe0c2, 0x0103,
+ 0xe0c0, 0x0044, 0xa80e, 0xae1a, 0x4c40, 0xe0c2, 0x0102, 0x287b,
+ 0xe412, 0x0a35, 0x2879, 0x3c7b, 0xe412, 0x0a3c, 0x2841, 0x3c3e,
+ 0xe41e, 0x0a12, 0xe0c2, 0x0077, 0x3c79, 0x3c7a, 0x2a41, 0xf07b,
+ 0xa200, 0x3c3e, 0xe41e, 0x0a12, 0x3c7c, 0x3c7a, 0xa206, 0xae08,
+ 0x4c22, 0xae06, 0xe0c1, 0x0065, 0xaf19, 0xa803, 0xae17, 0xe056,
+ 0xe0c2, 0x0204, 0xa204, 0x1841, 0xe0c2, 0x0210, 0xa204, 0xe0c2,
+ 0x0208, 0x8479, 0xc786, 0xe018, 0xe000, 0x0300, 0xe09e, 0x2117,
+ 0x4d17, 0xe0c2, 0x020d, 0x2117, 0x4d17, 0xe0c2, 0x020e, 0x2117,
+ 0x4d17, 0xe0c2, 0x020f, 0x2841, 0xf13a, 0x847c, 0xc786, 0xe018,
+ 0xe000, 0x0300, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0214, 0x2117,
+ 0x4d17, 0xe0c2, 0x0215, 0x2117, 0x4d17, 0xe0c2, 0x0216, 0x287b,
+ 0xf2d4, 0xa202, 0xe0c2, 0x0302, 0x287b, 0xae04, 0x087b, 0x087b,
+ 0xe000, 0x0300, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0380, 0x2117,
+ 0x4d17, 0xe0c2, 0x0381, 0x2117, 0x4d17, 0xe0c2, 0x0382, 0xe004,
+ 0x0055, 0xe0c2, 0x030c, 0xa208, 0x4c23, 0xe0c2, 0x0303, 0xa202,
+ 0xae02, 0xa902, 0xe0c2, 0x0312, 0xa220, 0xe0c2, 0x0313, 0xa200,
+ 0xe0c2, 0x0308, 0xa200, 0xe0c2, 0x0302, 0xa200, 0x3c44, 0x3c45,
+ 0x3c42, 0xa202, 0x3c47, 0x287d, 0xf3d4, 0xe0c0, 0x0060, 0xa87e,
+ 0xe049, 0xaf08, 0xf37a, 0x3044, 0xaf02, 0x3042, 0xa81f, 0x3e45,
+ 0x847d, 0xc786, 0xe018, 0xe000, 0x0300, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x0143, 0x2117, 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17,
+ 0xe0c2, 0x0145, 0x2840, 0xe0c2, 0x0141, 0xe0c0, 0x0064, 0xe0c2,
+ 0x014c, 0x2830, 0xa102, 0xae20, 0x4c31, 0xa102, 0xe0c2, 0x0142,
+ 0x2842, 0xae08, 0x4c45, 0xe0c2, 0x014e, 0xe0c0, 0x0061, 0xe0c2,
+ 0x0146, 0xe0c0, 0x0062, 0xe0c2, 0x0147, 0xe0c0, 0x0063, 0xe0c2,
+ 0x0148, 0x287a, 0x3c7d, 0xe0c2, 0x0071, 0xa202, 0x3c3a, 0xa202,
+ 0xe0c2, 0x0106, 0xa201, 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x0c87,
+ 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xe42a, 0xca29, 0xf7f9, 0xe180,
+ 0xe0c1, 0x006a, 0xce21, 0xd112, 0x000c, 0xd111, 0x0508, 0xd113,
+ 0x0003, 0xca29, 0xf7f9, 0xe181, 0x3063, 0xaf02, 0x3064, 0xaf02,
+ 0x3065, 0x2865, 0xf2aa, 0xa210, 0x3c3b, 0xe162, 0x03c0, 0xe163,
+ 0x0500, 0xa201, 0xd022, 0x0002, 0xe184, 0x0901, 0x2912, 0xa81e,
+ 0xe055, 0xae09, 0x2912, 0xa81e, 0xe055, 0x3f13, 0x283b, 0xa102,
+ 0xf03a, 0x3c3b, 0xf6fe, 0xe162, 0x050a, 0x2112, 0x4d12, 0xca29,
+ 0xf7f9, 0xe180, 0xce20, 0xd112, 0x0008, 0xd111, 0x0500, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe162, 0x0508, 0xe160, 0x0002,
+ 0xa200, 0x2a65, 0xb632, 0xae10, 0x3d12, 0xa220, 0x3d12, 0x8132,
+ 0xa200, 0x2a64, 0xb652, 0xae10, 0x3d12, 0x2832, 0x3d12, 0x8132,
+ 0x2a63, 0x2822, 0xe01a, 0xe051, 0xa200, 0xb692, 0xae10, 0x4c22,
+ 0x3d12, 0x2832, 0x3d12, 0xe42e, 0xe0c0, 0x0060, 0xe049, 0xa81e,
+ 0x3c45, 0xaf09, 0x3244, 0xaf03, 0x3242, 0x847d, 0xc786, 0xe018,
+ 0xe000, 0x0300, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117,
+ 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xa200,
+ 0xe0c2, 0x0140, 0xe0c2, 0x0149, 0x2840, 0xe0c2, 0x0141, 0xe0c0,
+ 0x0064, 0xe0c2, 0x014c, 0x2830, 0xa102, 0xae20, 0x4c31, 0xa102,
+ 0xe0c2, 0x0142, 0x2842, 0xae08, 0x4c45, 0xe0c2, 0x014e, 0xe0c0,
+ 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2, 0x0147, 0xe0c0,
+ 0x0063, 0xe0c2, 0x0148, 0xa203, 0xe42e, 0x2824, 0x3c43, 0xe0c0,
+ 0x0065, 0xaf0c, 0xa80e, 0xf10a, 0xca29, 0xf7f9, 0xe180, 0xe0c0,
+ 0x006a, 0xce20, 0xd112, 0x000c, 0xd111, 0x0508, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe181, 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xf04a, 0xe0c0, 0x0281, 0xf7ea, 0x2844, 0x4c42,
+ 0xe42a, 0xa204, 0xae0e, 0x4c30, 0xa102, 0xae0e, 0x4c31, 0xa102,
+ 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a,
+ 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0x2a64, 0xf0cb, 0xa802, 0xae02,
+ 0x2a66, 0xa803, 0xe056, 0xae0c, 0x2a24, 0xa87f, 0xe056, 0xe41e,
+ 0x0a67, 0xa27f, 0x2836, 0xf028, 0x2a39, 0xe0c3, 0x012a, 0x2836,
+ 0xe0c2, 0x0114, 0x2841, 0xf06a, 0x2837, 0xe016, 0xae0a, 0x4c24,
+ 0xcf6a, 0x2a63, 0x2822, 0xe01a, 0xe051, 0xf16b, 0xe004, 0x0480,
+ 0x0860, 0xe094, 0x2836, 0xf0e8, 0xa202, 0xae1f, 0xe0c0, 0x03b0,
+ 0xb616, 0x3512, 0x3d0a, 0x2902, 0xe008, 0x7fff, 0xe056, 0x3d12,
+ 0x8112, 0xe41e, 0x0aa5, 0xe41e, 0x09fa, 0xe0c0, 0x0111, 0xf7e8,
+ 0xa202, 0xe0c2, 0x0110, 0xe41e, 0x0355, 0x2844, 0x4c42, 0xe418,
+ 0x026e, 0xe42e, 0x283a, 0xe0c2, 0x0131, 0xa200, 0x3c3a, 0x4c38,
+ 0xe0c2, 0x0130, 0xe42e, 0xa2fe, 0x3c7b, 0x3c79, 0x3c7a, 0x3c7d,
+ 0xa200, 0x3c7e, 0xe161, 0x03c0, 0x2a2c, 0xa103, 0x3e3b, 0x863b,
+ 0x3d11, 0xe42e, 0x287e, 0x3c3c, 0x283c, 0xe000, 0x03c0, 0xe092,
+ 0x2901, 0xf10a, 0x283c, 0xa002, 0x3c3c, 0x182c, 0xf038, 0xa200,
+ 0x3c3c, 0x283c, 0x187e, 0xf718, 0x283c, 0xe0c2, 0x007f, 0xa2fe,
+ 0xe42e, 0xa208, 0x5c3e, 0x3d01, 0x283c, 0xa002, 0x3c7e, 0x182c,
+ 0xf038, 0xa200, 0x3c7e, 0x283c, 0xe42e, 0xe000, 0x03c0, 0xe092,
+ 0x2901, 0xa808, 0x3d01, 0xe42e, 0xe000, 0x03c0, 0xe092, 0x2901,
+ 0xa904, 0x3d01, 0xe42e, 0xe000, 0x03c0, 0xe092, 0x2901, 0xa804,
+ 0x3d01, 0xe42e, 0xe000, 0x03c0, 0xe092, 0x2901, 0xa908, 0x3d01,
+ 0xe42e, 0x2834, 0x4c35, 0xe01a, 0x3c46, 0x2843, 0xae02, 0x4c46,
+ 0xae02, 0x4c47, 0xae0e, 0x4c34, 0xae0e, 0x4c35, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe42e, 0x2a33,
+ 0xa803, 0xf0f9, 0xae10, 0x3c61, 0x2a32, 0xa103, 0x1a33, 0xe429,
+ 0xe005, 0x0400, 0x0a62, 0xe095, 0x3d02, 0xe41e, 0x0a8f, 0xe42e,
+ 0x4c61, 0xe005, 0x0400, 0x0a62, 0xe095, 0x3d02, 0x2862, 0xa002,
+ 0x3c62, 0xe002, 0x0080, 0xf068, 0xe41e, 0x0a8f, 0xa200, 0x3c62,
+ 0xe42e, 0x2832, 0xa102, 0x1833, 0xe41a, 0x0a8f, 0xe42e, 0x2a33,
+ 0xaf11, 0xae11, 0xe162, 0x050e, 0x2112, 0x4d12, 0xe042, 0xca29,
+ 0xf7f9, 0xe180, 0xce20, 0xd112, 0x0080, 0xd111, 0x0400, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe42e, 0x2836, 0xf04a, 0xa201,
+ 0x3f12, 0x3f12, 0x2860, 0xa004, 0x3c60, 0xe002, 0x0080, 0xf068,
+ 0xe41e, 0x0abb, 0xa200, 0x3c60, 0xe42e, 0x2832, 0xa102, 0x1833,
+ 0xe41a, 0x0abb, 0xe42e, 0x2a33, 0xaf0d, 0xae11, 0xe162, 0x0512,
+ 0x2112, 0x4d12, 0xe042, 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd112,
+ 0x0080, 0xd111, 0x0480, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181,
+ 0xe42e, 0xa200, 0x3c13, 0x3c16, 0xe0c1, 0x0067, 0xe0c0, 0x0069,
+ 0xa80e, 0xe041, 0x3676, 0x3e75, 0x2878, 0xf05a, 0xe0c0, 0x0068,
+ 0x3410, 0x3c11, 0x2010, 0x4c11, 0xe042, 0xe005, 0x0049, 0xe093,
+ 0x9f01, 0xe004, 0xffff, 0x3c12, 0xe41e, 0x0b2d, 0xe41e, 0x0b99,
+ 0xe41e, 0x0b4b, 0xa202, 0x3c16, 0xe41e, 0x0b4b, 0xa200, 0x3c16,
+ 0xd037, 0x0080, 0xe128, 0xe42e, 0xa200, 0x3c13, 0xe0c0, 0x0060,
+ 0x3410, 0x3c11, 0xe0c0, 0x0061, 0xae04, 0x3c12, 0xe41e, 0x0b2d,
+ 0xe41e, 0x0b99, 0xd071, 0x802a, 0xe181, 0xe42e, 0xa200, 0x3c13,
+ 0xe0c0, 0x0060, 0x3410, 0x3c11, 0xe0c0, 0x0061, 0xae04, 0x3c12,
+ 0xe41e, 0x0b2d, 0xe41e, 0x0b99, 0xd071, 0x802a, 0xe181, 0xa200,
+ 0x3c16, 0xe41e, 0x0b4b, 0xa202, 0x3c16, 0xe41e, 0x0b4b, 0xa200,
+ 0x3c16, 0xd037, 0x0080, 0xe128, 0xe42e, 0xd030, 0x0000, 0xd034,
+ 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd038,
+ 0x0000, 0xe42e, 0xcb41, 0xf7f9, 0xd04c, 0x0001, 0xe41e, 0x0b4b,
+ 0xd04c, 0x0000, 0xe004, 0x0080, 0x2a16, 0xb616, 0xcc6e, 0x2816,
+ 0xe016, 0x3c16, 0xe470, 0xca28, 0xf7f8, 0x2869, 0xf08a, 0xa802,
+ 0xe428, 0xe41e, 0x0c18, 0xa202, 0x3c69, 0xe42e, 0x2816, 0xf048,
+ 0xd111, 0x0000, 0xf03e, 0xd111, 0x0080, 0xe082, 0x3c14, 0xe004,
+ 0x0048, 0xe092, 0xd027, 0x0000, 0xe41e, 0x0ba3, 0xd027, 0x0001,
+ 0x2872, 0xf2d8, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042, 0xce20,
+ 0xd112, 0x0080, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022, 0xce26,
+ 0x2c13, 0xe000, 0x0002, 0x3c13, 0x1c12, 0xf024, 0x3c13, 0x2010,
+ 0x4c11, 0x2e13, 0xae11, 0xe042, 0x9f01, 0x2873, 0xe016, 0x446a,
+ 0xf0ea, 0xa201, 0x2067, 0x4c8f, 0xe002, 0x0200, 0x3467, 0x3c8f,
+ 0xb64d, 0x3e69, 0xf04b, 0xe000, 0x0200, 0x3c8f, 0x2814, 0xe092,
+ 0xe42e, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042, 0xe005, 0x0048,
+ 0xe093, 0x9f01, 0xe42e, 0xe0c1, 0x0043, 0xa809, 0xe429, 0x2873,
+ 0xe428, 0x2873, 0xe016, 0x446a, 0xe428, 0xa200, 0x3c15, 0x2010,
+ 0x4c11, 0x2e13, 0xae11, 0xe042, 0x8111, 0x9e89, 0xe045, 0xf043,
+ 0x2c12, 0xae10, 0xe041, 0xe003, 0x0200, 0xe423, 0xe0c0, 0x0045,
+ 0xaf04, 0xa802, 0xf08a, 0xe001, 0x0200, 0x3667, 0x3e8f, 0xa202,
+ 0x3c6a, 0xe42e, 0x2873, 0xf06a, 0x2874, 0xf048, 0xa202, 0x3c74,
+ 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf068, 0xe0c0, 0x0045, 0x3072,
+ 0x2872, 0xf128, 0x2815, 0xf548, 0xe0c0, 0x005c, 0xe008, 0x4000,
+ 0xf4fa, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0x3c15, 0xf45e, 0xe42e, 0xa806, 0xe42a, 0xa102, 0xf11a,
+ 0xa102, 0xf1ba, 0xe084, 0xcc76, 0xcc78, 0xc87a, 0xe005, 0xffff,
+ 0xae21, 0xe00b, 0xff00, 0xe052, 0xcc7a, 0x8112, 0xa202, 0xe42e,
+ 0xe084, 0xcc76, 0xcc78, 0xc87a, 0xe005, 0xff00, 0xae21, 0xe052,
+ 0xcc7a, 0x8112, 0xa206, 0xe42e, 0xe084, 0xcc76, 0xcc78, 0xc87a,
+ 0xe005, 0xffff, 0xae21, 0xe052, 0xcc7a, 0x8112, 0xa204, 0xe42e,
+ 0xe004, 0x0000, 0x2a16, 0xf039, 0xe000, 0x0200, 0x088f, 0xe049,
+ 0xa807, 0x3e8f, 0xaf04, 0xb432, 0x3c68, 0xe008, 0x00ff, 0xcc78,
+ 0xe005, 0x6964, 0xcc7b, 0xa002, 0xe008, 0x00ff, 0xcc78, 0xe004,
+ 0x7831, 0xcc7a, 0xe42e, 0x2869, 0xa802, 0xe42a, 0xc867, 0x1a68,
+ 0xa105, 0xe04a, 0xe000, 0x00fe, 0xf030, 0xe001, 0x0100, 0xa202,
+ 0xb60a, 0xe429, 0xc869, 0xb636, 0xe42b, 0xa208, 0x188f, 0xaf07,
+ 0xe046, 0xe049, 0xa200, 0xb62e, 0xe42e, 0xe0c0, 0x0048, 0xe002,
+ 0x0400, 0xc867, 0xe009, 0x007f, 0xa107, 0xae05, 0xe042, 0xc869,
+ 0xaf07, 0xe015, 0xa807, 0xe042, 0x2210, 0x4e11, 0xe045, 0xf047,
+ 0x2e12, 0xae11, 0xe042, 0xe0c2, 0x0046, 0xe42e, 0x6858, 0xe42d,
+ 0xe161, 0x03e0, 0xf088, 0xba4a, 0xa140, 0x3d11, 0xba4a, 0xa140,
+ 0x3d11, 0xe42e, 0xe049, 0xa87e, 0xa140, 0x3d11, 0xaf0d, 0xa87f,
+ 0xa141, 0x3f11, 0xe42e, 0xd1a5, 0x0000, 0xe161, 0x03e0, 0x2111,
+ 0x4d11, 0xcf4c, 0xd1a0, 0x0001, 0xcb41, 0xf7f9, 0xe42e, 0xe0c0,
+ 0x0065, 0xaf18, 0xa802, 0xe40a, 0x0d09, 0xae0a, 0xe0c1, 0x0060,
+ 0xaf0d, 0xa80f, 0xe056, 0xe0c1, 0x0044, 0xa811, 0xe056, 0xae0c,
+ 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe167, 0x0ba7, 0x2f17, 0xe056,
+ 0xe0c2, 0x0282, 0xe0c0, 0x006e, 0xe0c2, 0x0284, 0xaf20, 0xe0c1,
+ 0x0282, 0xa809, 0xf04b, 0xe049, 0xae1f, 0xf06e, 0xe049, 0xa011,
+ 0xaf09, 0xae07, 0xae21, 0xe056, 0xe0c2, 0x028c, 0xe167, 0x0ba8,
+ 0x2d17, 0x4917, 0xe0c2, 0x0285, 0xe167, 0x0baa, 0x2d17, 0x4917,
+ 0xe0c2, 0x0286, 0xe41e, 0x0d0a, 0xe0c0, 0x004a, 0xe0c2, 0x0289,
+ 0xe0c0, 0x004b, 0xe0c2, 0x028a, 0xe0c0, 0x0055, 0xe0c2, 0x028b,
+ 0xe0c1, 0x0041, 0xe004, 0x0100, 0xae10, 0xe042, 0xe167, 0x0ba6,
+ 0x2b17, 0xf05b, 0xe167, 0x0ba0, 0x2d17, 0x4917, 0xe0c2, 0x0287,
+ 0xe0c1, 0x0041, 0xe004, 0x0118, 0xae10, 0xe042, 0xe167, 0x0ba6,
+ 0x2b17, 0xf05b, 0xe167, 0x0ba2, 0x2d17, 0x4917, 0xe0c2, 0x0288,
+ 0xe0c1, 0x0041, 0xe004, 0x0120, 0xae10, 0xe042, 0xe167, 0x0ba6,
+ 0x2b17, 0xf05b, 0xe167, 0x0ba4, 0x2d17, 0x4917, 0xe0c2, 0x028d,
+ 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xe0c2, 0x0280, 0xa210, 0xe0c2,
+ 0x0168, 0xe42e, 0xe167, 0x0bac, 0xe165, 0x028e, 0xe166, 0x02c0,
+ 0xd022, 0x0008, 0xe184, 0x0d1d, 0x2d17, 0x9f16, 0x9e85, 0xf7fb,
+ 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02d2,
+ 0xd022, 0x0008, 0xe184, 0x0d29, 0x2517, 0x4d17, 0x9f16, 0x9e85,
+ 0xf7fb, 0xe190, 0xe166, 0x02db, 0xd022, 0x0008, 0xe184, 0x0d35,
+ 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02e4,
+ 0xd022, 0x0008, 0xe184, 0x0d40, 0x2d17, 0x9f16, 0x9e85, 0xf7fb,
+ 0xe190, 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0060, 0x0008, 0x0006,
+ 0x00b0, 0x0090, 0x000b, 0x0009, 0x0160, 0x0120, 0x0016, 0x0012,
+ 0x02c0, 0x0240, 0x0058, 0x0012, 0x0580, 0x0480, 0x0160, 0x0012,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0063, 0x000d, 0x000f, 0x0011, 0x0013, 0x0015, 0x0017, 0x0000,
+ 0xffff, 0xfffe, 0x0001, 0x0002, 0x0000, 0x0002, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0000, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0002, 0x0001, 0xfffb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x0af4, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0145, 0xe40e, 0x007e, 0xe40e,
+ 0x0149, 0xe40e, 0x007e, 0xe40e, 0x014d, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x03d5, 0xe40e, 0x03e8, 0xe41e,
+ 0x0153, 0xe40e, 0x007e, 0xe41e, 0x01a9, 0xe40e, 0x007e, 0xe41e,
+ 0x01aa, 0xe41e, 0x0a4b, 0xe40e, 0x007e, 0xe41e, 0x02bd, 0xe40e,
+ 0x007e, 0xe41e, 0x04db, 0xe40e, 0x007e, 0xe41e, 0x0369, 0xe41e,
+ 0x0a48, 0xe40e, 0x007e, 0xd130, 0x0004, 0xa200, 0xc401, 0xe188,
+ 0x07ff, 0x3d11, 0xa200, 0x3c51, 0x3c52, 0x3c85, 0x3c89, 0x3c81,
+ 0x3c93, 0x3c94, 0xe0c0, 0x0062, 0xaf02, 0x3054, 0xaf02, 0x3080,
+ 0xaf02, 0x307f, 0x2880, 0xf0da, 0xe0c0, 0x0064, 0xa80e, 0xe049,
+ 0xa809, 0xf03b, 0xba7f, 0xa806, 0xae06, 0xf03a, 0xe092, 0x9201,
+ 0xe41e, 0x0ab4, 0xe41e, 0x0a2a, 0xe41e, 0x0a91, 0xa2fa, 0x3c45,
+ 0xe41e, 0x07b2, 0xf23a, 0xe41e, 0x0ab4, 0xe41e, 0x0ae7, 0xe128,
+ 0x2810, 0xf06a, 0xba7e, 0xa108, 0xba4f, 0xa102, 0xf7e0, 0x2016,
+ 0x4c17, 0xe0c2, 0x0071, 0xe0c2, 0x004f, 0x2012, 0x4c13, 0xe0c2,
+ 0x0072, 0x2856, 0xe0c2, 0x006c, 0xa208, 0xe0c2, 0x0073, 0xa202,
+ 0xe0c2, 0x0074, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0xe0c2, 0x0070,
+ 0xe42e, 0xe42e, 0xa200, 0xcc4a, 0xcc4c, 0x3c50, 0x3cba, 0x3cbb,
+ 0x3cbc, 0xa2fa, 0xe0c2, 0x0071, 0xa2fc, 0xe0c2, 0x0077, 0xa2fe,
+ 0xe0c2, 0x0073, 0x3c44, 0x3c21, 0xa202, 0xe0c2, 0x0076, 0x288a,
+ 0xf0fa, 0xa200, 0x3c7e, 0xe41e, 0x0b39, 0xa202, 0x3c7e, 0xe41e,
+ 0x0b39, 0xa200, 0x3c7e, 0xd037, 0x0080, 0xa200, 0x3c8a, 0xa2fe,
+ 0xe0c2, 0x0077, 0xe41e, 0x039b, 0xe41e, 0x03c9, 0xe40a, 0x028d,
+ 0xa2fc, 0xe0c2, 0x0077, 0xd130, 0x0004, 0xd1e0, 0x0001, 0xd1e1,
+ 0x03b0, 0xd03a, 0x0004, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008,
+ 0x0000, 0xd1f3, 0x0040, 0xd022, 0x00bf, 0xe184, 0x01f0, 0xa200,
+ 0xcfe8, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0x4480, 0xf20a, 0x2845,
+ 0x3c90, 0xf0c4, 0x2a8c, 0xe045, 0xf039, 0xa200, 0xf07e, 0x2a8d,
+ 0xe045, 0xf039, 0xa202, 0xf02e, 0xa204, 0x3c91, 0x2843, 0x3c45,
+ 0xe0c2, 0x0071, 0xe41e, 0x02ec, 0x3c46, 0xa2ff, 0x3e43, 0xe40e,
+ 0x028d, 0xa2fe, 0xe0c2, 0x0071, 0xe40e, 0x028d, 0x2880, 0xf08a,
+ 0x2051, 0x4c52, 0xf03a, 0xe41e, 0x0b06, 0xe40e, 0x0259, 0x2880,
+ 0xf398, 0xe41e, 0x0c35, 0xf36a, 0xa2fe, 0xe0c2, 0x0071, 0x2854,
+ 0xf158, 0x2845, 0x3c90, 0xe404, 0x028d, 0x2a8c, 0xe045, 0xf039,
+ 0xa200, 0xf07e, 0x2a8d, 0xe045, 0xf039, 0xa202, 0xf02e, 0xa204,
+ 0x3c91, 0xe41e, 0x02ec, 0xe40e, 0x028d, 0x2845, 0x3c90, 0xe404,
+ 0x028d, 0x2a8c, 0xe045, 0xf039, 0xa200, 0xf07e, 0x2a8d, 0xe045,
+ 0xf039, 0xa202, 0xf02e, 0xa204, 0x3c91, 0xe41e, 0x02ec, 0x2843,
+ 0x3c45, 0xe404, 0x028d, 0xe0c2, 0x0071, 0x3c46, 0xa2fa, 0x3c43,
+ 0xf35e, 0xe41e, 0x04e2, 0x2880, 0xf26a, 0x28c0, 0xf24a, 0xa2fc,
+ 0xe0c2, 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0x2051, 0x4c52, 0xe0c2,
+ 0x0070, 0xe41e, 0x03b2, 0x2821, 0xa104, 0xe01a, 0xae3c, 0x4c21,
+ 0xe0c2, 0x0073, 0x2016, 0x4c17, 0xe0c2, 0x006f, 0xe0c2, 0x004f,
+ 0xa200, 0xe0c2, 0x0072, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2,
+ 0x0053, 0xe42e, 0x2893, 0x4c94, 0xe418, 0x0ebd, 0x2a54, 0x2845,
+ 0xf029, 0x2844, 0xe0c2, 0x0071, 0x3c46, 0xe41e, 0x03b2, 0x2821,
+ 0xa104, 0xe01a, 0xae3c, 0x4c21, 0xe0c2, 0x0073, 0x2016, 0x4c17,
+ 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0x2850, 0xe0c2, 0x0072, 0x2844,
+ 0xe0c2, 0x0077, 0x2051, 0x4c52, 0xa002, 0x3451, 0x3c52, 0xe0c2,
+ 0x0070, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xa2fb,
+ 0x2891, 0xf0a4, 0xa102, 0xf032, 0x3e8c, 0xf06e, 0xa102, 0xf032,
+ 0x3e8d, 0xf02e, 0x3e8e, 0xa202, 0xe42e, 0xd130, 0x0004, 0xe41e,
+ 0x0c76, 0xe0c0, 0x0060, 0xe42a, 0xca28, 0xf7f8, 0xe0c0, 0x0042,
+ 0xce20, 0xd111, 0x0100, 0xd112, 0x0060, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe0c0, 0x0042, 0xe000, 0x0180, 0xce20, 0xd111, 0x0160,
+ 0xd112, 0x0004, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe004, 0x0160,
+ 0xe09e, 0x2117, 0x4d17, 0x3440, 0x3c41, 0xe0c0, 0x0060, 0x3c53,
+ 0xe0c0, 0x0061, 0x3c55, 0xe42e, 0x2891, 0xe424, 0xe0c0, 0x0060,
+ 0xe049, 0xa861, 0xe42b, 0xe049, 0xa81e, 0x3c95, 0xaf0b, 0x3294,
+ 0x2890, 0xae04, 0x0890, 0x0890, 0xe000, 0x0100, 0xe09e, 0x2117,
+ 0x4d17, 0xe0c2, 0x0143, 0x2117, 0x4d17, 0xe0c2, 0x0144, 0x2117,
+ 0x4d17, 0xe0c2, 0x0145, 0xa200, 0xe0c2, 0x0140, 0xe0c2, 0x0149,
+ 0x2855, 0xe0c2, 0x0141, 0xe0c0, 0x0064, 0xe0c2, 0x014c, 0x2818,
+ 0xa102, 0xae20, 0x4c19, 0xa102, 0xe0c2, 0x0142, 0x2894, 0xae08,
+ 0x4c95, 0xe0c2, 0x014e, 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0,
+ 0x0062, 0xe0c2, 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0xa200,
+ 0x3c96, 0x3c97, 0x3c98, 0x3c61, 0xe41e, 0x034b, 0x2861, 0xa002,
+ 0x3c61, 0x2897, 0xa002, 0x3c97, 0x1818, 0xf068, 0x3c97, 0x2898,
+ 0xa002, 0x3c98, 0x1819, 0xf718, 0xe41e, 0x034b, 0xe190, 0xe0c1,
+ 0x014b, 0xf7e9, 0xe42e, 0xa203, 0x2861, 0xb615, 0x3e99, 0xa203,
+ 0x2898, 0x1819, 0xb615, 0x3e9a, 0x2894, 0xf03a, 0xe41e, 0x0e84,
+ 0xae02, 0x4c99, 0xae02, 0x4c9a, 0xae0e, 0x4c97, 0xae0e, 0x4c98,
+ 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a,
+ 0xe42e, 0xe0c0, 0x0060, 0xf08a, 0xe0c0, 0x0061, 0x2278, 0x4e79,
+ 0xe046, 0xaf12, 0xae02, 0x3c7b, 0xa200, 0x3c85, 0xe180, 0xe41e,
+ 0x0ae7, 0xe41e, 0x0b74, 0xe41e, 0x0a2a, 0xe41e, 0x0a91, 0xe166,
+ 0x0071, 0x9e06, 0xf16a, 0x2853, 0xa102, 0xcc44, 0xa200, 0x3c9f,
+ 0xe184, 0x0396, 0x9e06, 0x5c9f, 0xa802, 0xf07a, 0x289f, 0xe000,
+ 0x0170, 0xe09e, 0xa204, 0x3d07, 0x289f, 0xa002, 0x3c9f, 0xe190,
+ 0xa202, 0x3c8a, 0xe42e, 0xa200, 0x3c9f, 0x2853, 0xa102, 0xcc44,
+ 0xe184, 0x03b0, 0xe0c0, 0x0054, 0x5c9f, 0xa802, 0xf058, 0x289f,
+ 0xe41e, 0x0a39, 0xf04e, 0x289f, 0xe41e, 0x0a41, 0x2a9f, 0xa003,
+ 0x3e9f, 0xe42e, 0xe004, 0x0170, 0xe09e, 0xe004, 0x0054, 0xe09c,
+ 0x2853, 0xa102, 0xcc44, 0xa200, 0x3c9f, 0xe184, 0x03c6, 0x2b17,
+ 0xaf03, 0xa803, 0x5a9f, 0xe056, 0x2a9f, 0xa003, 0x3e9f, 0x9f06,
+ 0xe42e, 0xe161, 0x0170, 0x2853, 0xa102, 0xcc44, 0xe184, 0x03d3,
+ 0x2911, 0xe016, 0xe428, 0xe190, 0xe42e, 0xe0c0, 0x005a, 0x3cee,
+ 0xe41e, 0x0100, 0xa206, 0xe41e, 0x03f1, 0xe0c0, 0x005a, 0x3cee,
+ 0xe41e, 0x0100, 0xa226, 0xe41e, 0x0407, 0xe41e, 0x041d, 0xe42e,
+ 0xa224, 0xe41e, 0x0407, 0xe41e, 0x0438, 0xa204, 0xe41e, 0x03f1,
+ 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0c00, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0x3ced,
+ 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042, 0x22f0, 0x4ef1,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100,
+ 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe161, 0x07e0, 0x8911,
+ 0x0034, 0x8911, 0x0033, 0x8911, 0x0035, 0x8911, 0x0036, 0x8911,
+ 0x0037, 0x8911, 0x0038, 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11,
+ 0xcc62, 0x2111, 0x4d11, 0xcc64, 0x2111, 0x4d11, 0xcc72, 0xe42e,
+ 0xe161, 0x07e0, 0x8b11, 0x0034, 0x8b11, 0x0033, 0x8b11, 0x0035,
+ 0x8b11, 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038, 0xc860, 0x3511,
+ 0x3d11, 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511, 0x3d11, 0xc872,
+ 0x3511, 0x3d11, 0xe42e, 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xe42a,
+ 0xca28, 0xf7f8, 0xe0c0, 0x006a, 0xce20, 0xd111, 0x05a0, 0xd112,
+ 0x000c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe160, 0x0003, 0xe161,
+ 0x05a2, 0xe162, 0x0500, 0x2911, 0x3d12, 0x2931, 0x3d12, 0x2911,
+ 0x3d12, 0x2931, 0x3d12, 0x2911, 0x3d12, 0x2931, 0x3d12, 0xe0c0,
+ 0x0065, 0xaf10, 0xa802, 0xf19a, 0xe161, 0x05a0, 0xa202, 0xae10,
+ 0x3d11, 0xa220, 0x3d11, 0xe162, 0x0500, 0x2112, 0x4d12, 0x3511,
+ 0x3d11, 0xe0c0, 0x006a, 0xce20, 0xd111, 0x05a0, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe0c0, 0x0065, 0xaf0e, 0xa802,
+ 0xf1da, 0xe161, 0x05a0, 0xa204, 0xae10, 0x3d11, 0x281a, 0x3d11,
+ 0xe0c0, 0x0041, 0xe162, 0x0502, 0x2312, 0x4f12, 0xe042, 0x3511,
+ 0x3d11, 0xe0c0, 0x006a, 0xa010, 0xce20, 0xd111, 0x05a0, 0xd112,
+ 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0x2821, 0x3cbd, 0xe0c0,
+ 0x0065, 0xaf0c, 0xa802, 0xf1fa, 0xe161, 0x05a0, 0xa208, 0xae10,
+ 0x2abd, 0xe056, 0x3d11, 0x281a, 0x3d11, 0xe0c0, 0x0041, 0xe162,
+ 0x0504, 0x2312, 0x4f12, 0xe042, 0x3511, 0x3d11, 0xe0c0, 0x006a,
+ 0xa020, 0xce20, 0xd111, 0x05a0, 0xd112, 0x0004, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0xa200, 0x3c65, 0x3c85, 0x3c51, 0x3c52,
+ 0x3c89, 0xe42e, 0xa200, 0x3ca0, 0x2810, 0xf058, 0xe41e, 0x084a,
+ 0xe40e, 0x0520, 0xe41e, 0x080b, 0xe016, 0x3ca0, 0xe41e, 0x0453,
+ 0x2880, 0xf1ea, 0xe0c0, 0x0065, 0xa808, 0xf06a, 0x2821, 0xf18a,
+ 0xa202, 0x3cc0, 0xe42e, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xf10a,
+ 0xa102, 0xf04a, 0xa102, 0xf05a, 0xf08e, 0x2821, 0xf068, 0xf08e,
+ 0x2821, 0xa104, 0xf02a, 0xf04e, 0xa202, 0x3cc0, 0xe42e, 0xa200,
+ 0x3cc0, 0x2821, 0xf062, 0x2051, 0x4c52, 0xa200, 0xb620, 0x3c21,
+ 0xf03e, 0x3ca0, 0x3ca3, 0x28a3, 0xf04a, 0x2821, 0x3ca3, 0x3ca0,
+ 0x2823, 0x3c25, 0x2821, 0xa104, 0xf05a, 0x2823, 0x3c24, 0x3c25,
+ 0xf04e, 0x2824, 0x6423, 0x3c25, 0xe41e, 0x063c, 0x2845, 0x3c90,
+ 0xf0c4, 0x2a8c, 0xe045, 0xf039, 0xa200, 0xf07e, 0x2a8d, 0xe045,
+ 0xf039, 0xa202, 0xf02e, 0xa204, 0x3c91, 0xe41e, 0x0a9c, 0x2844,
+ 0xf0d4, 0x2a8c, 0xf043, 0x3c8c, 0xa201, 0xf08e, 0x2a8d, 0xf043,
+ 0x3c8d, 0xa203, 0xf03e, 0x3c8e, 0xa205, 0x3e92, 0xe41e, 0x0ca6,
+ 0x2821, 0xae02, 0x4c11, 0xcf80, 0xcfc6, 0xd1d3, 0x000b, 0x2818,
+ 0xa102, 0xae04, 0x4c21, 0xae02, 0x4c11, 0xcf00, 0x2826, 0xa200,
+ 0xcf02, 0xd184, 0x0001, 0x2818, 0xae20, 0x4c19, 0xae08, 0xcfc4,
+ 0x2040, 0x4c41, 0xcfca, 0x2835, 0xcfce, 0xd1e6, 0x0000, 0xa200,
+ 0x3c61, 0x3c97, 0x3c98, 0x28a0, 0xf110, 0xe41e, 0x059a, 0x2aba,
+ 0xe017, 0x3eba, 0xf0ba, 0x2861, 0x181a, 0xf132, 0xe41e, 0x0890,
+ 0xf05a, 0x2860, 0x1861, 0xf7b4, 0xf71a, 0x2821, 0xf088, 0x2051,
+ 0x4c52, 0xf05a, 0xa204, 0x4c11, 0xcf80, 0xcfc6, 0xe41e, 0x05bc,
+ 0x2810, 0xe418, 0x0629, 0xd1e6, 0x0001, 0xe41e, 0x0da0, 0xcbe2,
+ 0xf7f8, 0xe42e, 0xe41e, 0x05c9, 0x2861, 0x181a, 0xf162, 0xe41e,
+ 0x0664, 0xf15d, 0x2897, 0xa002, 0x3c97, 0x1818, 0xf058, 0x3c97,
+ 0x2898, 0xa002, 0x3c98, 0xcb86, 0xa102, 0xf6f0, 0x2861, 0x181a,
+ 0xf042, 0xe41e, 0x05e3, 0xf698, 0xa202, 0xe42e, 0x28ba, 0xe016,
+ 0x3cba, 0xe16a, 0xa200, 0xe42e, 0x2861, 0xe41a, 0x05c9, 0x2861,
+ 0x181a, 0xf072, 0xe41e, 0x06b3, 0x2850, 0xa002, 0x3c50, 0xf78e,
+ 0xe42e, 0x2822, 0xcf82, 0xd1c3, 0x0000, 0x2823, 0xcf96, 0xd188,
+ 0x0001, 0x281c, 0xa102, 0x181d, 0xe016, 0x3c1e, 0x281d, 0xa002,
+ 0x3c1d, 0xae02, 0xe000, 0x0200, 0xe092, 0x2111, 0x4d11, 0xae06,
+ 0x341f, 0x3c20, 0xe42e, 0x2810, 0xf358, 0x2811, 0xf298, 0xba04,
+ 0xa23b, 0xae21, 0xe428, 0xe00b, 0x1c10, 0xba2e, 0xe046, 0xf1da,
+ 0xba30, 0xe046, 0xf19a, 0xba32, 0xe046, 0xf15a, 0xba34, 0xe046,
+ 0xf11a, 0xba36, 0xe046, 0xf0da, 0xba38, 0xe046, 0xf09a, 0xba3a,
+ 0xe046, 0xf05a, 0xba3c, 0xe046, 0xe428, 0xba40, 0xba40, 0xba40,
+ 0xba40, 0xba40, 0xba40, 0xba40, 0xba6e, 0xa200, 0xe42e, 0xba1e,
+ 0xba2f, 0xe428, 0xb636, 0xe428, 0xba5e, 0xba40, 0xf7fa, 0xa200,
+ 0xe42e, 0x281e, 0xe428, 0xc872, 0x101f, 0x1c20, 0xa00e, 0xe424,
+ 0xa10e, 0xe012, 0x3c63, 0xb60c, 0xe42a, 0x7863, 0xe428, 0x7463,
+ 0xe42e, 0xe41e, 0x08dd, 0x281a, 0xae10, 0x1014, 0x1c15, 0xf0c4,
+ 0xc872, 0xaf06, 0x1014, 0x1c15, 0xe012, 0xf064, 0xe426, 0xba4f,
+ 0xa102, 0xf7e0, 0xe42e, 0xe42e, 0x2821, 0xa104, 0xf09a, 0x2830,
+ 0x1831, 0xf022, 0x0834, 0x3c32, 0x2830, 0x3c31, 0xe42e, 0x2831,
+ 0x1830, 0xf022, 0x0834, 0x3c33, 0x2832, 0x1833, 0xa400, 0x3c33,
+ 0x2833, 0xae1c, 0xc70f, 0x7c32, 0x3c35, 0x2832, 0x1833, 0xae1c,
+ 0xc70f, 0x7c32, 0x3c36, 0xe005, 0x3fff, 0x2835, 0xe066, 0x3c35,
+ 0x2836, 0xe066, 0x3c36, 0xe42e, 0x2861, 0xe0c2, 0x003f, 0xd184,
+ 0x0002, 0xd185, 0x0000, 0xe190, 0xd1d0, 0x003f, 0xcba0, 0xa810,
+ 0xcba3, 0xf389, 0xf7c8, 0xe41e, 0x0dac, 0xcbe0, 0xf7f8, 0x2862,
+ 0xe41a, 0x0dc2, 0xe41e, 0x0dc6, 0xcba0, 0xcba3, 0xf2b9, 0xf7d8,
+ 0xd185, 0x0001, 0xd184, 0x0004, 0xa200, 0xe41e, 0x0703, 0xe41e,
+ 0x073d, 0xe41e, 0x0dd3, 0xe41e, 0x0e36, 0x2893, 0x4c94, 0xf17a,
+ 0x2890, 0xf154, 0xe0c0, 0x014b, 0xf7e8, 0x2894, 0xe418, 0x0e84,
+ 0x3c9d, 0x2a61, 0xae04, 0xa902, 0xb442, 0xae0e, 0x4c97, 0xae0e,
+ 0x0898, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xcb06, 0x3c61,
+ 0xe42e, 0xd1d0, 0x0000, 0xd1d1, 0x0000, 0xcb0c, 0xf7f8, 0xcbe0,
+ 0xf7f8, 0xe16b, 0xe42e, 0x2861, 0xe0c2, 0x003f, 0xd184, 0x0002,
+ 0xd185, 0x0000, 0x8823, 0x01ca, 0xd1c4, 0x0000, 0xd1c2, 0x0001,
+ 0xd1c5, 0x0000, 0xd1d0, 0x000e, 0xcba0, 0xf7f8, 0x2051, 0x4c52,
+ 0xf058, 0xd1c2, 0x0000, 0xd1c5, 0x0003, 0xd1d0, 0x0030, 0xe41e,
+ 0x0dac, 0xa200, 0xe0c2, 0x012a, 0xcbe0, 0xf7f8, 0x2862, 0xe41a,
+ 0x0dc2, 0xe41e, 0x0dc6, 0xcba0, 0xf7f8, 0xd185, 0x0001, 0xd184,
+ 0x0004, 0xa202, 0xe41e, 0x0703, 0xe41e, 0x073d, 0xe41e, 0x0dd3,
+ 0xe41e, 0x0e36, 0x2893, 0x4c94, 0xf14a, 0xe0c0, 0x014b, 0xf7e8,
+ 0x2894, 0xe418, 0x0e84, 0x2a61, 0xae04, 0xa902, 0xb442, 0xae0e,
+ 0x4c97, 0xae0e, 0x0898, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a,
+ 0xcb06, 0x3c61, 0xe42e, 0xe0c1, 0x0065, 0xaf0f, 0xa803, 0xe42b,
+ 0xa802, 0xae0e, 0x2aba, 0xa803, 0xae0d, 0xe055, 0xcb94, 0xa83e,
+ 0xe056, 0x2abb, 0xa83f, 0xaf03, 0xe001, 0x0510, 0xe093, 0x2abb,
+ 0xa803, 0xf05b, 0x2b01, 0xe056, 0x3d01, 0xf03e, 0xae10, 0x3d01,
+ 0x28bb, 0xa002, 0x3cbb, 0xa83e, 0xf04a, 0x28bb, 0x181a, 0xe428,
+ 0xca28, 0xf7f8, 0xe166, 0x0502, 0x2116, 0x4d16, 0x2abb, 0xa103,
+ 0xaf0b, 0xae0b, 0xe042, 0xce20, 0xd111, 0x0510, 0xd112, 0x0010,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0065, 0xaf0c,
+ 0xa802, 0xe42a, 0x28bd, 0xe42a, 0xca28, 0xf7f8, 0x28bd, 0xa102,
+ 0xf1b8, 0xa201, 0xcb8a, 0xa802, 0xf068, 0xa202, 0xae3e, 0xe0c1,
+ 0x03b0, 0xe055, 0x28bc, 0xa87e, 0xae02, 0xe000, 0x0520, 0xe092,
+ 0x3711, 0x3f11, 0x28bc, 0xa002, 0x3cbc, 0x181a, 0xf392, 0x28bc,
+ 0xa87e, 0xf36a, 0xe42e, 0xa201, 0xcb8a, 0xa802, 0xf0da, 0x28bc,
+ 0xa83e, 0xae04, 0xe000, 0x0520, 0xe092, 0xa201, 0x3f11, 0x3f11,
+ 0x3f11, 0x3f11, 0xf1ce, 0xcb88, 0xa112, 0xf06a, 0xa202, 0xae3e,
+ 0xe0c1, 0x03b0, 0xe055, 0x28bc, 0xa83e, 0xae04, 0xe000, 0x0520,
+ 0xe092, 0x3711, 0x3f11, 0xcb88, 0xa112, 0xb609, 0xf064, 0xa202,
+ 0xae3e, 0xe0c1, 0x03c0, 0xe055, 0x3711, 0x3f11, 0x28bc, 0xa002,
+ 0x3cbc, 0x181a, 0xf052, 0x28bc, 0xa83e, 0xf02a, 0xe42e, 0xe166,
+ 0x0504, 0x2116, 0x4d16, 0x2abd, 0xa103, 0xf069, 0x2abc, 0xa103,
+ 0xaf0d, 0xae11, 0xf05e, 0x2abc, 0xa103, 0xaf0b, 0xae11, 0xe042,
+ 0xce20, 0xd111, 0x0520, 0xd112, 0x0080, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0xa200, 0x3c10, 0x3c11, 0x3c00, 0x3c01, 0x3ca3,
+ 0x3c16, 0x3c17, 0xe41e, 0x08dd, 0xe004, 0x5555, 0x3c03, 0xe005,
+ 0x5649, 0xae21, 0xe00b, 0x444f, 0x288b, 0xe408, 0x0808, 0xba3e,
+ 0xe046, 0xf11a, 0xe042, 0x1403, 0x1803, 0xf28a, 0xba2e, 0xa102,
+ 0xf29a, 0xba4e, 0x3c02, 0x2000, 0x4c01, 0xae10, 0x4c02, 0x3400,
+ 0x3c01, 0xf6be, 0xba7e, 0xa202, 0x3c10, 0xe004, 0x2000, 0x3c34,
+ 0xe41e, 0x08e2, 0xe41e, 0x0c5d, 0xf24a, 0xe41e, 0x080b, 0xf21a,
+ 0x2816, 0x3ca1, 0x2817, 0x3ca2, 0x2816, 0xa01e, 0xaf08, 0x3c18,
+ 0x2817, 0xa01e, 0xaf08, 0x3c19, 0xe42e, 0xba7e, 0xa200, 0x3c11,
+ 0xf04e, 0xba6e, 0xa202, 0x3c11, 0xa200, 0x3c12, 0xa21e, 0x3c13,
+ 0xe004, 0x0100, 0x3c34, 0xe41e, 0x0947, 0xf03a, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x08dd, 0xa209, 0xba7e, 0xe045,
+ 0xf055, 0xa208, 0x3414, 0x3c15, 0xf32e, 0x3414, 0x3c15, 0xba7e,
+ 0xe190, 0xba5e, 0xe190, 0xba5e, 0xe190, 0xba7e, 0xe190, 0xba7e,
+ 0xf266, 0xe002, 0x0100, 0xf230, 0xe000, 0x0100, 0x3c1c, 0xe161,
+ 0x0200, 0x281c, 0xa102, 0xcc44, 0xe184, 0x083b, 0xba7e, 0xe190,
+ 0xe016, 0xf02a, 0x3ca0, 0xba7e, 0x2214, 0x4e15, 0xe045, 0xf031,
+ 0xa203, 0x3ea0, 0x3511, 0x3d11, 0xd039, 0x0000, 0xa200, 0x3c1d,
+ 0x28a0, 0xf058, 0xe41e, 0x0862, 0xf02a, 0xe42e, 0xd039, 0x0000,
+ 0xa200, 0xe42e, 0xe41e, 0x08dd, 0x2811, 0xf0e8, 0xba1e, 0xe002,
+ 0x5555, 0xf03a, 0xba4e, 0xf7be, 0xba5e, 0xba1e, 0xe002, 0x5555,
+ 0xf768, 0xba5e, 0xf02e, 0xba6e, 0xe41e, 0x0947, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0xba40, 0xf2b8, 0x7411, 0xf298, 0x7411, 0xf278,
+ 0xba42, 0xa102, 0xb608, 0x3c21, 0x7411, 0xba48, 0x3c23, 0xa13e,
+ 0xf1ea, 0x2811, 0xe016, 0xf06a, 0xba40, 0xf198, 0xba40, 0xf178,
+ 0xba42, 0x3c22, 0xba40, 0x3c26, 0xba58, 0x3c30, 0xe41e, 0x09c7,
+ 0x2805, 0x3c16, 0x2806, 0x3c17, 0xe41e, 0x0999, 0x741b, 0x3c60,
+ 0xf068, 0x181a, 0xf040, 0x7411, 0xa202, 0xe42e, 0xa200, 0xe42e,
+ 0x2810, 0xf1c8, 0xba40, 0xe40a, 0x08db, 0x741b, 0x3c60, 0x181a,
+ 0xe402, 0x08db, 0x281b, 0xa116, 0xf036, 0xba40, 0xf3da, 0xba48,
+ 0x3c23, 0xa13e, 0xf39a, 0x2811, 0xe016, 0xf02a, 0xba42, 0x3c22,
+ 0xba40, 0xf32a, 0xba42, 0xa202, 0xe42e, 0xba40, 0xf2d8, 0x7411,
+ 0xf2b8, 0x7411, 0xf298, 0xba42, 0xa102, 0xb608, 0x1821, 0xf248,
+ 0x7411, 0xba48, 0x3c23, 0xa13e, 0xf1fa, 0x2811, 0xe016, 0xf06a,
+ 0xba40, 0xf1a8, 0xba40, 0xf188, 0xba42, 0x3c22, 0xba40, 0x1826,
+ 0xf138, 0xba58, 0x1830, 0xf108, 0xe41e, 0x09c7, 0x2805, 0x1816,
+ 0xf0b8, 0x2806, 0x1817, 0xf088, 0x741b, 0x3c60, 0x181a, 0xf042,
+ 0x7411, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xc868, 0xa80e, 0x3c64,
+ 0x7464, 0xe42e, 0xba1e, 0xe002, 0x5256, 0xe016, 0xe42a, 0xba5e,
+ 0xba1e, 0xe002, 0x3430, 0xf07a, 0xba1e, 0xe002, 0x3330, 0xe016,
+ 0xe42a, 0xa202, 0x3c11, 0xba5e, 0xba5e, 0x3c28, 0x3c16, 0xba5e,
+ 0x3c29, 0x3c17, 0xe41e, 0x0999, 0xba5e, 0xba5e, 0xba5e, 0xba4e,
+ 0xba5e, 0x3c13, 0xba4e, 0xe004, 0x00ff, 0x3c12, 0xba7e, 0xe190,
+ 0xba7e, 0xaf18, 0xa81e, 0xa10a, 0xa203, 0xae21, 0xa913, 0xf026,
+ 0xa003, 0xe0c3, 0x007b, 0x2811, 0xf098, 0x2000, 0x4c01, 0xa144,
+ 0xf2b6, 0xba4f, 0xa102, 0xf28a, 0xf7de, 0xa203, 0xae21, 0xa911,
+ 0xe0c3, 0x007b, 0xa200, 0x3c27, 0xe161, 0x01d0, 0x2816, 0x3d11,
+ 0x2817, 0x3d11, 0x2000, 0x4c01, 0xa144, 0xf166, 0xba4f, 0xae05,
+ 0x3f11, 0xba4f, 0xae05, 0x3f11, 0x2a27, 0xa003, 0x3e27, 0xa111,
+ 0xf0d3, 0xa104, 0xf740, 0x2827, 0xa002, 0x3c27, 0x2827, 0xa002,
+ 0xaf02, 0xa506, 0x3c27, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c8,
+ 0xfffe, 0xe40d, 0x0989, 0xe002, 0x7fff, 0x3c04, 0x2804, 0xa802,
+ 0xf398, 0xe004, 0x00b0, 0x3c16, 0xe004, 0x0090, 0x3c17, 0x2804,
+ 0xaf02, 0xa802, 0xf03a, 0xa200, 0x3c16, 0x2804, 0xaf04, 0xa83e,
+ 0x3c23, 0x2804, 0xaf0e, 0xe008, 0x00ff, 0x3c30, 0xd20c, 0xf22d,
+ 0xf0aa, 0xa104, 0xf05a, 0xa102, 0xf09a, 0xe40e, 0x0989, 0xa200,
+ 0x3c21, 0xf06e, 0xa202, 0x3c21, 0xf03e, 0xa204, 0x3c21, 0x2816,
+ 0xe41a, 0x098c, 0x2816, 0x3ca1, 0x2817, 0x3ca2, 0xe41e, 0x0999,
+ 0xa200, 0x3c60, 0x2811, 0xe016, 0xf02a, 0xba42, 0x3c22, 0xa202,
+ 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xba46, 0x3c56, 0xba50, 0xa002,
+ 0xae04, 0x3c16, 0xba40, 0xe42a, 0xba50, 0xae04, 0x3c17, 0xa202,
+ 0xe42e, 0x2816, 0xa01e, 0xaf08, 0x3c18, 0x2817, 0xa01e, 0xaf08,
+ 0x3c19, 0x8418, 0x8219, 0xe018, 0x3c1a, 0xf0de, 0x2816, 0xa01e,
+ 0xaf08, 0x3ca4, 0x2817, 0xa01e, 0xaf08, 0x3ca5, 0x84a4, 0x82a5,
+ 0xe018, 0x3ca6, 0xa160, 0xa20d, 0xf116, 0xa166, 0xf0e6, 0xe002,
+ 0x0129, 0xf0a6, 0xe002, 0x04a4, 0xf066, 0xe002, 0x1290, 0xf026,
+ 0xa003, 0xa005, 0xa005, 0xa005, 0xa003, 0x3e1b, 0xe42e, 0x2811,
+ 0xf0da, 0x2827, 0xf0fa, 0x7427, 0xae02, 0xe000, 0x01d0, 0xe092,
+ 0x2911, 0x3c05, 0x2911, 0x3c06, 0xe42e, 0x2821, 0xf08a, 0xba40,
+ 0xf06a, 0x2816, 0x3c05, 0x2817, 0x3c06, 0xe42e, 0xe005, 0x00a0,
+ 0xba44, 0xf1ca, 0xa102, 0xf19a, 0xa102, 0xf16a, 0xa102, 0xf13a,
+ 0xa102, 0xf10a, 0xa102, 0xf0ca, 0xa102, 0xf09a, 0xa201, 0xba4e,
+ 0xe041, 0xe002, 0x00ff, 0xf7ca, 0xae05, 0xf08e, 0xa081, 0xe001,
+ 0x0120, 0xa041, 0xa0a1, 0xa081, 0xa021, 0x3e05, 0xe005, 0x0078,
+ 0xba44, 0xf27a, 0xa102, 0xf24a, 0xa102, 0xf21a, 0xa102, 0xf1ea,
+ 0xa102, 0xf1ba, 0xa102, 0xf17a, 0xa102, 0xba41, 0xf088, 0xf049,
+ 0xe005, 0x00b4, 0xf16e, 0xe005, 0x0168, 0xf13e, 0xf049, 0xe005,
+ 0x0240, 0xf0fe, 0xa201, 0xba4e, 0xe041, 0xe002, 0x00ff, 0xf7ca,
+ 0xae05, 0xf07e, 0xe001, 0x00c0, 0xa061, 0xa0c1, 0xa019, 0xa019,
+ 0x3e06, 0xe42e, 0xe167, 0x0170, 0xa200, 0xc70f, 0x3d17, 0xa200,
+ 0x3c47, 0xe42e, 0xe000, 0x0170, 0xe09e, 0x2907, 0xa804, 0x3d07,
+ 0xe42e, 0xe424, 0xe000, 0x0170, 0xe09e, 0x2907, 0xa802, 0x3d07,
+ 0xe42e, 0xe000, 0x0170, 0xe09e, 0x2907, 0xa904, 0x3d07, 0xe42e,
+ 0xe41e, 0x0a2a, 0xe42e, 0xe0c1, 0x0065, 0xaf11, 0xa803, 0xe42b,
+ 0xe167, 0x0170, 0xe166, 0x05a0, 0xd022, 0x0007, 0xe184, 0x0a5f,
+ 0x2917, 0xae08, 0x4d17, 0xae08, 0x4d17, 0xae08, 0x4d17, 0x3d16,
+ 0xe190, 0xca28, 0xf7f8, 0xe166, 0x0500, 0x2116, 0x4d16, 0xce20,
+ 0xd111, 0x05a0, 0xd112, 0x0008, 0xd113, 0x0002, 0xca28, 0xf7f8,
+ 0xe42e, 0x2847, 0x3c00, 0x2800, 0xe000, 0x0170, 0xe09e, 0x2907,
+ 0xf0ea, 0x2800, 0xa002, 0x3c00, 0x1853, 0xf028, 0x3c00, 0x2800,
+ 0x1847, 0xf728, 0xa200, 0x3c47, 0xa2fe, 0xe42e, 0xa206, 0x3d07,
+ 0x2800, 0xa002, 0x3c47, 0x1853, 0xf038, 0xa200, 0x3c47, 0x2800,
+ 0xe42e, 0xa2fa, 0x3c42, 0x3c43, 0x3c46, 0x3c90, 0x3c91, 0x3c92,
+ 0x3c8c, 0x3c8d, 0x3c8e, 0xe42e, 0xe41e, 0x0a71, 0x3c44, 0x2821,
+ 0xa104, 0xf0ea, 0x2844, 0x2a54, 0xf02b, 0x2843, 0x3c45, 0x2842,
+ 0xe412, 0x0a32, 0x2843, 0x3c42, 0x2844, 0x3c43, 0xe42e, 0x2844,
+ 0x3c45, 0xe41e, 0x0a32, 0xe42e, 0xa200, 0x3c7b, 0xe0c0, 0x0062,
+ 0xaf0c, 0xa802, 0xf10a, 0xe0c1, 0x0048, 0xe0c0, 0x0060, 0xe045,
+ 0xaf13, 0xae03, 0xa109, 0x3e7b, 0xf063, 0xe0c0, 0x0061, 0xae04,
+ 0xe042, 0x3c7b, 0xe0c0, 0x0060, 0x3478, 0x3c79, 0xe0c0, 0x0061,
+ 0xae04, 0x3c7a, 0xe41e, 0x0ae7, 0xe41e, 0x0b74, 0xd071, 0x802a,
+ 0xe181, 0xa200, 0x3c7e, 0xe41e, 0x0b39, 0xa202, 0x3c7e, 0xe41e,
+ 0x0b39, 0xa200, 0x3c7e, 0xd037, 0x0080, 0xe128, 0xe42e, 0xd030,
+ 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036,
+ 0x00ff, 0xd038, 0x0000, 0xe42e, 0xe41e, 0x0b39, 0x287e, 0xf088,
+ 0xa202, 0x3c7e, 0xd037, 0x0000, 0xd04c, 0x0000, 0xe470, 0xa200,
+ 0x3c7e, 0xd037, 0x0080, 0xd04c, 0x0000, 0xe470, 0xa200, 0x3c81,
+ 0x3c7b, 0xe0c1, 0x0067, 0x287f, 0xf05a, 0xe0c0, 0x0068, 0x3478,
+ 0x3c79, 0x2078, 0x4c79, 0xe042, 0xe005, 0x0049, 0xe093, 0x9f01,
+ 0xe004, 0xffff, 0x3c7a, 0xe41e, 0x0ae7, 0xe41e, 0x0b74, 0xa200,
+ 0x3c7e, 0xe41e, 0x0b39, 0xa202, 0x3c7e, 0xe41e, 0x0b39, 0xa200,
+ 0x3c7e, 0xd037, 0x0080, 0xe128, 0xe0c0, 0x0069, 0xa80e, 0xe049,
+ 0xa809, 0xf03b, 0xba7f, 0xa806, 0xae06, 0xf03a, 0xe092, 0x9201,
+ 0xe42e, 0xca28, 0xf7f8, 0x287e, 0xf048, 0xd111, 0x0000, 0xf03e,
+ 0xd111, 0x0080, 0xe082, 0x3c7c, 0xe004, 0x0048, 0xe092, 0xd027,
+ 0x0000, 0xe41e, 0x0b7e, 0xd027, 0x0001, 0x288b, 0xf238, 0x2078,
+ 0x4c79, 0x2e7b, 0xae11, 0xe042, 0xce20, 0x9f01, 0xd112, 0x0080,
+ 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022, 0xce26, 0x2880, 0xf058,
+ 0x2889, 0xf038, 0xe41e, 0x0bc8, 0x2c7b, 0xe000, 0x0002, 0x3c7b,
+ 0x1c7a, 0xf024, 0x3c7b, 0x2078, 0x4c79, 0x2e7b, 0xae11, 0xe042,
+ 0x9f01, 0x287c, 0xe092, 0xe42e, 0x2078, 0x4c79, 0x2e7b, 0xae11,
+ 0xe042, 0xe005, 0x0048, 0xe093, 0x9f01, 0xe42e, 0xe0c1, 0x0043,
+ 0xa809, 0xe429, 0xa200, 0x3c7d, 0x2880, 0xf038, 0x2885, 0xf228,
+ 0xe0c0, 0x0045, 0xaf04, 0xe0c1, 0x0059, 0xa107, 0xb612, 0x3065,
+ 0x2078, 0x4c79, 0x2e7b, 0xae11, 0xe042, 0x8111, 0x9e89, 0xe045,
+ 0xf043, 0x2c7a, 0xae10, 0xe041, 0xe003, 0x0200, 0xe423, 0x2880,
+ 0xf03a, 0x2881, 0xe42e, 0x2880, 0xf088, 0x2865, 0xa802, 0xf05a,
+ 0x2885, 0xa002, 0x3c85, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf068,
+ 0xe0c0, 0x0045, 0x308b, 0x288b, 0xf138, 0x287d, 0xf528, 0xe0c0,
+ 0x005c, 0xe008, 0x4000, 0xf4da, 0xe0c0, 0x005d, 0xe00a, 0x4000,
+ 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c7d, 0xe40e, 0x0b88, 0xe42e,
+ 0x2885, 0xe42a, 0xa102, 0xe40a, 0x0c06, 0xa102, 0xf288, 0x8111,
+ 0x9e09, 0x2278, 0x4e79, 0xe046, 0xe008, 0x03ff, 0x3c88, 0xe008,
+ 0x01ff, 0x3c86, 0x2888, 0xaf04, 0xe001, 0x0000, 0xe042, 0xe094,
+ 0x2886, 0xe005, 0x0200, 0xe045, 0xa109, 0xf0e3, 0xe41e, 0x0c09,
+ 0xe005, 0x0200, 0x1a86, 0xe045, 0xe084, 0xcc78, 0xa200, 0xf17b,
+ 0xcc7a, 0xa109, 0xf7de, 0xe41e, 0x0c09, 0xf01e, 0xe084, 0xcc78,
+ 0xe004, 0x5555, 0xae20, 0xe005, 0x5555, 0xe056, 0x2811, 0xf03a,
+ 0xe004, 0x0100, 0xcc7a, 0xa202, 0x3c89, 0xe42e, 0xa200, 0x3c89,
+ 0xe42e, 0xa806, 0xe42a, 0xa102, 0xf11a, 0xa102, 0xf1ba, 0xe084,
+ 0xcc76, 0xcc78, 0xc87a, 0xe005, 0xffff, 0xae21, 0xe00b, 0xff00,
+ 0xe052, 0xcc7a, 0x8112, 0xa202, 0xe42e, 0xe084, 0xcc76, 0xcc78,
+ 0xc87a, 0xe005, 0xff00, 0xae21, 0xe052, 0xcc7a, 0x8112, 0xa206,
+ 0xe42e, 0xe084, 0xcc76, 0xcc78, 0xc87a, 0xe005, 0xffff, 0xae21,
+ 0xe052, 0xcc7a, 0x8112, 0xa204, 0xe42e, 0x2885, 0xa104, 0xf032,
+ 0xa200, 0xe42e, 0xf0b0, 0xc866, 0x2a85, 0xaf0e, 0x2a88, 0xaf13,
+ 0xe05a, 0xf04a, 0xa200, 0xf00e, 0xe42e, 0xa241, 0xc868, 0xe045,
+ 0xa00f, 0xaf07, 0xc866, 0xae04, 0xa118, 0xe042, 0x2a85, 0xa105,
+ 0xf07b, 0x2a88, 0xaf13, 0xf02b, 0xa205, 0xae13, 0xe042, 0xa008,
+ 0x2a88, 0xe045, 0xa200, 0xb62e, 0xe42e, 0xe0c0, 0x0048, 0xe002,
+ 0x0400, 0xc867, 0xe009, 0x007f, 0xa107, 0xae05, 0xe042, 0xc869,
+ 0xaf07, 0xe015, 0xa807, 0xe042, 0x2278, 0x4e79, 0xe045, 0xf047,
+ 0x2e7a, 0xae11, 0xe042, 0xe0c2, 0x0046, 0xe42e, 0xe0c0, 0x0064,
+ 0x3cb1, 0x34b0, 0xe0c0, 0x0065, 0x3cb3, 0x34b2, 0xe0c0, 0x0066,
+ 0x3cb5, 0x34b4, 0xe0c0, 0x0067, 0x3cb7, 0x34b6, 0xe0c0, 0x0068,
+ 0x3cb9, 0x34b8, 0xe0c0, 0x0069, 0xe167, 0x0ba0, 0x3d17, 0x3517,
+ 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b, 0x3d17, 0x3517,
+ 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20, 0xd111, 0x0ba8, 0xd112,
+ 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xa200, 0xcc8e,
+ 0xe0c0, 0x0060, 0xaf08, 0x3093, 0xaf02, 0x3094, 0xe0c0, 0x0060,
+ 0xa81e, 0x2a94, 0xae09, 0xe056, 0xe0c2, 0x014e, 0x2855, 0x2a93,
+ 0x4e94, 0xf2cb, 0xe0c2, 0x0141, 0xe0c0, 0x0064, 0xe0c2, 0x014c,
+ 0x2818, 0xa102, 0xae20, 0x4c19, 0xa102, 0xe0c2, 0x0142, 0x8490,
+ 0xc786, 0xe018, 0xe000, 0x0100, 0xe09e, 0x2117, 0x4d17, 0xe0c2,
+ 0x0143, 0x2117, 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2,
+ 0x0145, 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2,
+ 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0x2811, 0xae08, 0xa908,
+ 0xe0c2, 0x0100, 0xe004, 0x00ce, 0xe0c2, 0x017c, 0xe004, 0x000c,
+ 0xe0c2, 0x017d, 0xa208, 0xae04, 0x4c11, 0xae04, 0x4c21, 0xae06,
+ 0xe0c1, 0x0065, 0xaf19, 0xa803, 0xae17, 0xe056, 0xe0c2, 0x0204,
+ 0xa200, 0xe0c2, 0x0208, 0x2821, 0xae06, 0xe0c2, 0x0104, 0xe0c0,
+ 0x0050, 0x3000, 0xaf02, 0x3001, 0xaf02, 0x3002, 0xaf02, 0x3003,
+ 0xaf0a, 0x3004, 0xaf02, 0x3005, 0xaf02, 0x3006, 0xaf02, 0x3007,
+ 0xe0c0, 0x0050, 0xaf1c, 0xa802, 0xe005, 0x0ba6, 0xe09f, 0x3d17,
+ 0x2804, 0x4400, 0x3c00, 0x2805, 0x4401, 0x3c01, 0x2806, 0x4402,
+ 0x3c02, 0x2807, 0x4403, 0x3c03, 0xa200, 0x2a00, 0xf03b, 0xe00a,
+ 0x0002, 0x2a01, 0xf03b, 0xe00a, 0x0009, 0x2a02, 0xf03b, 0xe00a,
+ 0x0020, 0x2a03, 0xf03b, 0xe00a, 0x0040, 0xe005, 0x0ba6, 0xe09f,
+ 0x2b17, 0xae05, 0xe056, 0xe0c2, 0x0169, 0xe0c1, 0x0041, 0xe004,
+ 0x0000, 0xae10, 0xe042, 0x2a04, 0xf03b, 0x20b0, 0x4cb1, 0xcfc8,
+ 0xe0c1, 0x0041, 0xe004, 0x0040, 0xae10, 0xe042, 0x2a05, 0xf03b,
+ 0x20b2, 0x4cb3, 0xe0c2, 0x0103, 0x2826, 0xe016, 0xe0c2, 0x0210,
+ 0xe0c1, 0x0041, 0xe004, 0x0070, 0xae10, 0xe042, 0x2a06, 0xf03b,
+ 0x20b4, 0x4cb5, 0xe0c2, 0x0211, 0xe000, 0x4000, 0x2a07, 0xf03b,
+ 0x20b6, 0x4cb7, 0xe0c2, 0x0212, 0x2818, 0xae20, 0x4c19, 0xae08,
+ 0xe0c2, 0x0101, 0xe0c2, 0x0283, 0xe0c0, 0x0044, 0xa80e, 0xae1a,
+ 0x4c55, 0xe0c2, 0x0102, 0xa200, 0xae0a, 0x4c25, 0xe0c2, 0x0217,
+ 0xe41e, 0x0dda, 0xe41e, 0x0df4, 0xe41e, 0x0e2c, 0xa200, 0xe0c2,
+ 0x030d, 0x2036, 0x4c35, 0xe0c2, 0x0310, 0xa202, 0xe0c2, 0x0106,
+ 0x2a11, 0xae19, 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x0ed2, 0xe42e,
+ 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xf04a,
+ 0xe0c0, 0x0281, 0xf7ea, 0xe42e, 0xcb94, 0xe0c2, 0x0115, 0xcba4,
+ 0xe0c2, 0x012a, 0xcb8a, 0xe0c2, 0x0114, 0xa802, 0x3c62, 0xe42a,
+ 0xcb12, 0xe0c2, 0x0120, 0xcb8c, 0xe0c2, 0x0121, 0xcb8e, 0xe0c2,
+ 0x0122, 0xe42e, 0xcbd0, 0xe0c2, 0x0311, 0xe42e, 0xcb40, 0xe0c2,
+ 0x0224, 0xcb42, 0xe0c2, 0x0225, 0xcb44, 0xe0c2, 0x0226, 0xcb46,
+ 0xe0c2, 0x0227, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2,
+ 0x0110, 0xe42e, 0x2844, 0xae04, 0x0844, 0x0844, 0xe000, 0x0100,
+ 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x020d, 0xe0c2, 0x0214, 0x2117,
+ 0x4d17, 0xe0c2, 0x020e, 0xe0c2, 0x0215, 0x2117, 0x4d17, 0xe0c2,
+ 0x020f, 0xe0c2, 0x0216, 0xe42e, 0xa200, 0xe0c2, 0x030a, 0xe004,
+ 0x0082, 0xa202, 0xae20, 0xe00a, 0x0842, 0xe0c2, 0x030b, 0xa202,
+ 0xe0c2, 0x0302, 0x8442, 0xc786, 0xe018, 0xb608, 0xe000, 0x0100,
+ 0xe094, 0x2112, 0x4d12, 0xe0c2, 0x0380, 0x2112, 0x4d12, 0xe0c2,
+ 0x0381, 0x2112, 0x4d12, 0xe0c2, 0x0382, 0x8443, 0xc786, 0xe018,
+ 0xb608, 0xe000, 0x0100, 0xe094, 0x2112, 0x4d12, 0xe0c2, 0x0383,
+ 0x2112, 0x4d12, 0xe0c2, 0x0384, 0x2112, 0x4d12, 0xe0c2, 0x0385,
+ 0xa200, 0xe0c2, 0x0302, 0xe42e, 0xa202, 0xae02, 0xa902, 0xe0c2,
+ 0x0312, 0xa220, 0xe0c2, 0x0313, 0xe42e, 0xe42e, 0x2892, 0xe424,
+ 0x2861, 0xa802, 0xf06a, 0xcb95, 0xa83f, 0x289b, 0xe056, 0xf09e,
+ 0xcb94, 0xa83e, 0xae10, 0x3c9b, 0x2a61, 0xa003, 0x1a1a, 0xe429,
+ 0x2a61, 0xe009, 0x00ff, 0xaf03, 0xe001, 0x0400, 0xe09f, 0x3d07,
+ 0x2861, 0xa002, 0x181a, 0xf06a, 0x2861, 0xa002, 0xe008, 0x00ff,
+ 0xe428, 0x2861, 0xe008, 0xff00, 0xe005, 0x029c, 0xae11, 0xe042,
+ 0x2a92, 0x8492, 0xe182, 0x1fe0, 0xe019, 0xe042, 0xe0c1, 0x0041,
+ 0xe042, 0xe0c1, 0x005a, 0xae1f, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xe004, 0x0080, 0x2a61, 0xa003, 0x1a1a, 0xf078, 0x2861, 0xe008,
+ 0x00ff, 0xa006, 0xe008, 0x00fc, 0xce24, 0xd111, 0x0400, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x2890, 0xe424, 0x2861, 0xe008,
+ 0x00ff, 0xf208, 0x2861, 0xe008, 0xff00, 0xe005, 0x029c, 0xae11,
+ 0xe042, 0x8491, 0xe182, 0x1fe0, 0xe019, 0xe042, 0xe0c1, 0x0041,
+ 0xe042, 0xe0c1, 0x005a, 0xae1f, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xe004, 0x0080, 0xce24, 0xd111, 0x0480, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0x2861, 0xa802, 0xf0a8, 0x2861, 0xe008, 0x00ff, 0xaf02,
+ 0xe000, 0x0480, 0xe09e, 0x2907, 0x3c9c, 0x289c, 0x2a61, 0xa803,
+ 0xf029, 0xaf10, 0xe008, 0x001f, 0xe42e, 0x2890, 0xe424, 0xe0c0,
+ 0x014b, 0xf7e8, 0x289d, 0xae04, 0xa004, 0xae0e, 0x4c97, 0xae0e,
+ 0x0898, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe0c0, 0x014b,
+ 0xf7e8, 0xe42e, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xe40a, 0x0f54,
+ 0xae0a, 0xe0c1, 0x0060, 0xaf0d, 0xa80f, 0xe056, 0xe0c1, 0x0044,
+ 0xa811, 0xe056, 0xae0c, 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe167,
+ 0x0ba7, 0x2f17, 0xe056, 0xe0c2, 0x0282, 0xe0c0, 0x006e, 0xe0c2,
+ 0x0284, 0xaf20, 0xe0c1, 0x0282, 0xa809, 0xf04b, 0xe049, 0xae1f,
+ 0xf06e, 0xe049, 0xa011, 0xaf09, 0xae07, 0xae21, 0xe056, 0xe0c2,
+ 0x028c, 0xe167, 0x0ba8, 0x2d17, 0x4917, 0xe0c2, 0x0285, 0xe167,
+ 0x0baa, 0x2d17, 0x4917, 0xe0c2, 0x0286, 0xe41e, 0x0f55, 0xe0c0,
+ 0x004a, 0xe0c2, 0x0289, 0xe0c0, 0x004b, 0xe0c2, 0x028a, 0xe0c0,
+ 0x0055, 0xe0c2, 0x028b, 0xe0c1, 0x0041, 0xe004, 0x0220, 0xae10,
+ 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba0, 0x2d17,
+ 0x4917, 0xe0c2, 0x0287, 0xe0c1, 0x0041, 0xe004, 0x0238, 0xae10,
+ 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba2, 0x2d17,
+ 0x4917, 0xe0c2, 0x0288, 0xe0c1, 0x0041, 0xe004, 0x0240, 0xae10,
+ 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba4, 0x2d17,
+ 0x4917, 0xe0c2, 0x028d, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xe0c2,
+ 0x0280, 0xa210, 0xe0c2, 0x0168, 0xe42e, 0xe167, 0x0bac, 0xe165,
+ 0x028e, 0xe166, 0x02c0, 0xd022, 0x0008, 0xe184, 0x0f68, 0x2d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb,
+ 0xe190, 0xe166, 0x02d2, 0xd022, 0x0008, 0xe184, 0x0f74, 0x2517,
+ 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02db, 0xd022,
+ 0x0008, 0xe184, 0x0f80, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb,
+ 0xe190, 0xe166, 0x02e4, 0xd022, 0x0008, 0xe184, 0x0f8b, 0x2d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe42e, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x0529, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0143, 0xe40e, 0x007e, 0xe40e,
+ 0x0147, 0xe40e, 0x007e, 0xe40e, 0x014b, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x03ff, 0xe40e, 0x0412, 0xe41e,
+ 0x0221, 0xe40e, 0x007e, 0xe41e, 0x0264, 0xe40e, 0x007e, 0xe41e,
+ 0x027d, 0xe40e, 0x007e, 0xe41e, 0x03b3, 0xe40e, 0x007e, 0xe41e,
+ 0x04b2, 0xe40e, 0x007e, 0xe41e, 0x05cf, 0xe40e, 0x007e, 0xa2fa,
+ 0x3c66, 0x3c67, 0x3c68, 0x3c6b, 0xa200, 0x3c6a, 0xe42e, 0xe167,
+ 0x0300, 0xa200, 0xc71f, 0x3d17, 0xa200, 0x3c5e, 0xe42e, 0xe000,
+ 0x0300, 0xe09e, 0x2907, 0xa80a, 0x3d07, 0xe42e, 0xe424, 0xe000,
+ 0x0300, 0xe09e, 0x2907, 0xa804, 0x3d07, 0xe42e, 0xe000, 0x0300,
+ 0xe09e, 0x2907, 0xa908, 0x3d07, 0xe42e, 0x285e, 0x3c49, 0x2849,
+ 0xe000, 0x0300, 0xe09e, 0x2907, 0xf0fa, 0x2849, 0xa002, 0x3c49,
+ 0x1835, 0xf034, 0xa200, 0x3c49, 0x2849, 0x185e, 0xf718, 0xa200,
+ 0x3c5e, 0xa2fe, 0xe42e, 0xa20e, 0x3d07, 0x2849, 0xa002, 0x3c5e,
+ 0x1835, 0xf038, 0xa200, 0x3c5e, 0x2849, 0xe42e, 0xa2fa, 0x3c59,
+ 0x3c5a, 0x3c5c, 0x3c5b, 0xe42e, 0x285a, 0xe412, 0x015f, 0xe42e,
+ 0x285b, 0x3c5c, 0x2819, 0xa104, 0xf0ea, 0x2a56, 0xa105, 0x2859,
+ 0x3c5d, 0xa2fe, 0x3c5b, 0xe42b, 0x2859, 0x3c5a, 0x285c, 0x3c5d,
+ 0x3c59, 0xe42e, 0x2a56, 0xa105, 0xe42b, 0x2859, 0x3c5a, 0x285c,
+ 0x3c59, 0x2819, 0x3c56, 0xe42e, 0x285b, 0x3c5c, 0xe41e, 0x0175,
+ 0x3c5b, 0x2819, 0xa104, 0xf0ea, 0x2a56, 0xa105, 0x2819, 0x3c56,
+ 0x2859, 0x3c5d, 0xe42b, 0x2859, 0x3c5a, 0x285c, 0x3c5d, 0x3c59,
+ 0xe42e, 0x285b, 0x3c5d, 0xe41e, 0x015f, 0x2a56, 0xa105, 0xe42b,
+ 0x2859, 0x3c5a, 0x285c, 0x3c59, 0x2819, 0x3c56, 0xe42e, 0xa200,
+ 0x3c70, 0x2835, 0xa102, 0xcc44, 0xe184, 0x01f4, 0xe0c0, 0x0054,
+ 0x5c70, 0xa802, 0xf058, 0x2870, 0xe41e, 0x0166, 0xf04e, 0x2870,
+ 0xe41e, 0x016e, 0x2a70, 0xa003, 0x3e70, 0xe42e, 0xe004, 0x0300,
+ 0xe09e, 0xe004, 0x0054, 0xe09c, 0x2835, 0xa102, 0xcc44, 0xa200,
+ 0x3c70, 0xe184, 0x020a, 0x2b17, 0xaf05, 0xa803, 0x5a70, 0xe056,
+ 0x2a70, 0xa003, 0x3e70, 0x9f06, 0xe42e, 0x285b, 0xe000, 0x0300,
+ 0xe09e, 0x2b07, 0xa80d, 0x3f07, 0xe42e, 0xe161, 0x0300, 0x2835,
+ 0xa102, 0xcc44, 0xe184, 0x021f, 0x2911, 0xe016, 0xe428, 0xe190,
+ 0xe42e, 0xd130, 0x0005, 0xe004, 0x004e, 0xe0c2, 0x017c, 0xe004,
+ 0x004c, 0xe0c2, 0x017d, 0xa200, 0x3c3c, 0x3c3b, 0xc401, 0xe188,
+ 0x07ff, 0x3d11, 0xe0c0, 0x0062, 0xaf02, 0x30b9, 0xaf02, 0x30b6,
+ 0xaf02, 0x30b7, 0xe41e, 0x04bf, 0xe41e, 0x0157, 0xe41e, 0x0196,
+ 0xe41e, 0x064c, 0x2010, 0x4c11, 0xe0c2, 0x0071, 0xe0c2, 0x004f,
+ 0xe41e, 0x0487, 0xe0c2, 0x0072, 0xa208, 0xe0c2, 0x0073, 0xa202,
+ 0xe0c2, 0x0074, 0x2813, 0xe0c2, 0x006c, 0x2815, 0xae10, 0x4c17,
+ 0xae10, 0x4c16, 0xe0c2, 0x007b, 0xe41e, 0x0265, 0xe41e, 0x05ff,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xe42e, 0xa200, 0x3c50, 0x3c47,
+ 0x3c38, 0x3cbb, 0x3cbc, 0x3cbd, 0x3cba, 0x3cbf, 0x3cc0, 0x3cbe,
+ 0x3cc2, 0x3cc3, 0x3cc4, 0x3cc5, 0x3cc1, 0x3cc8, 0x3cc7, 0x3cc6,
+ 0x3c64, 0xa2fa, 0x3c55, 0x3c5d, 0xe42e, 0xa200, 0xcc4a, 0xcc4c,
+ 0x3c3a, 0x3ca3, 0x3c57, 0xe0c2, 0x007d, 0xe0c2, 0x007e, 0xe0c2,
+ 0x007f, 0xe0c2, 0x0072, 0x285d, 0x3c55, 0xe0c2, 0x007a, 0xa2fa,
+ 0xe0c2, 0x0071, 0xd152, 0x0005, 0xd130, 0x0005, 0xd03a, 0x0005,
+ 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000, 0xe0c0, 0x0065,
+ 0xaf0a, 0xa81e, 0xf18a, 0x30bd, 0xaf02, 0x30bc, 0xaf02, 0x30bb,
+ 0xaf02, 0x30ba, 0xe0c0, 0x006c, 0xe002, 0x0088, 0x3cc6, 0xe0c0,
+ 0x006a, 0xce20, 0xd112, 0x000c, 0xd111, 0x0436, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe41e, 0x0b63, 0x28b6, 0x2a47, 0xb616, 0xe418,
+ 0x04ef, 0x2ab6, 0xf07b, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0xe408,
+ 0x0384, 0x2838, 0xe408, 0x0384, 0xe41e, 0x0f77, 0x28a8, 0xe408,
+ 0x0384, 0xa2fa, 0xe0c2, 0x0077, 0xe41e, 0x01df, 0xe41e, 0x0215,
+ 0xf098, 0xa2fe, 0xe0c2, 0x0077, 0xd152, 0x0000, 0xd153, 0x0000,
+ 0xe42e, 0xe41e, 0x06b7, 0x28a8, 0xe408, 0x0384, 0x28b0, 0xe418,
+ 0x0b1a, 0x28b1, 0xf24a, 0x2ab6, 0xf19b, 0xa2fa, 0xe0c2, 0x0071,
+ 0xa2fc, 0xe0c2, 0x0077, 0x2819, 0xa104, 0xe01a, 0xae0e, 0x4c1c,
+ 0xae02, 0x4c1f, 0xae02, 0x4c1e, 0xae06, 0x2a1d, 0xe017, 0xe056,
+ 0xae24, 0x4c19, 0xe0c2, 0x0073, 0xe42e, 0xe41e, 0x0ece, 0x2819,
+ 0xe0c2, 0x0073, 0x28b1, 0xa102, 0xe42a, 0xf54e, 0x28a8, 0xe408,
+ 0x0384, 0xe41e, 0x01bc, 0xe41e, 0x0936, 0x2860, 0x4c61, 0xe418,
+ 0x0e44, 0x2847, 0xa002, 0x3c47, 0x2a19, 0xa105, 0xe419, 0x019c,
+ 0xe41e, 0x01f6, 0xe41e, 0x0d6d, 0xe41e, 0x020d, 0xd152, 0x0000,
+ 0xd153, 0x0000, 0x2ab9, 0xf07b, 0x2847, 0xf058, 0xa2fa, 0xe0c2,
+ 0x0071, 0xf07e, 0xf03b, 0x285d, 0xf02e, 0x285b, 0xe0c2, 0x0071,
+ 0x2819, 0xa104, 0xe01a, 0xae0e, 0x4c1c, 0xae02, 0x4c1f, 0xae02,
+ 0x4c1e, 0xae06, 0x2a1d, 0xe017, 0xe056, 0xae24, 0x4c1a, 0xe0c2,
+ 0x0073, 0x2857, 0xe0c2, 0x0072, 0x2847, 0xe0c2, 0x0070, 0x285b,
+ 0xe0c2, 0x0077, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053,
+ 0xa2fb, 0x286b, 0xf0a4, 0xa102, 0xf032, 0x3e66, 0xf06e, 0xa102,
+ 0xf032, 0x3e67, 0xf02e, 0x3e68, 0xd152, 0x0000, 0xd153, 0x0000,
+ 0x2847, 0xa102, 0xe426, 0xa202, 0x3c64, 0xd152, 0x0000, 0xd153,
+ 0x0000, 0xe41e, 0x05ff, 0xe42e, 0x2860, 0x4c61, 0xe418, 0x0e5f,
+ 0xa2fe, 0x3c5d, 0xe0c2, 0x0071, 0xa200, 0x3c60, 0x3c61, 0xd152,
+ 0x0000, 0xd153, 0x0000, 0xe42e, 0xa2fc, 0xe0c2, 0x0077, 0xe41e,
+ 0x01a0, 0x2859, 0x3c5d, 0xe0c2, 0x0071, 0x2855, 0xa002, 0xe424,
+ 0xe41e, 0x0afb, 0x2838, 0xe408, 0x0374, 0xe0c0, 0x0060, 0xaf08,
+ 0x3060, 0xaf02, 0x3061, 0x2847, 0xe0c2, 0x0070, 0xa202, 0x3c38,
+ 0x2860, 0x4c61, 0xe418, 0x0e5f, 0xd152, 0x0000, 0xd153, 0x0000,
+ 0xe42e, 0xe41e, 0x0ece, 0xa2fa, 0xe0c2, 0x0071, 0xd152, 0x0000,
+ 0xd153, 0x0000, 0xe42e, 0xd130, 0x0005, 0xe41e, 0x03d0, 0xe0c0,
+ 0x0060, 0xe42a, 0xe0c0, 0x0060, 0x3c35, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0042, 0xce20, 0xd111, 0x0110, 0xd112, 0x00c4, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe0c0, 0x0061, 0x3c36, 0xe41e, 0x014f, 0xe42e,
+ 0xe004, 0x01d4, 0xe09e, 0xe0c0, 0x0064, 0x3517, 0x3d17, 0xe0c0,
+ 0x0065, 0x3517, 0x3d17, 0xe0c0, 0x0066, 0x3517, 0x3d17, 0xe0c0,
+ 0x0067, 0x3517, 0x3d17, 0xe0c0, 0x0069, 0xe167, 0x0ba0, 0x3d17,
+ 0x3517, 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b, 0x3d17,
+ 0x3517, 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20, 0xd111, 0x0ba8,
+ 0xd112, 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe0c0,
+ 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa206, 0xe41e, 0x041b, 0xe0c0,
+ 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa236, 0xe41e, 0x0431, 0xe41e,
+ 0x0447, 0xe42e, 0xa234, 0xe41e, 0x0431, 0xe41e, 0x0467, 0xa204,
+ 0xe41e, 0x041b, 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0280,
+ 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ed, 0x0113, 0xca28, 0xf7f8,
+ 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x00c0,
+ 0xd112, 0x0040, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe161,
+ 0x07e0, 0x8911, 0x0145, 0x8911, 0x0144, 0x8911, 0x0146, 0x8911,
+ 0x0147, 0x8911, 0x0148, 0x8911, 0x0152, 0x8911, 0x0153, 0x2111,
+ 0x4d11, 0xce80, 0x2111, 0x4d11, 0xce82, 0x2111, 0x4d11, 0xce84,
+ 0x2111, 0x4d11, 0xce86, 0x2111, 0x4d11, 0xcc72, 0xe42e, 0xe161,
+ 0x07e0, 0x8b11, 0x0145, 0x8b11, 0x0144, 0x8b11, 0x0146, 0x8b11,
+ 0x0147, 0x8b11, 0x0148, 0x8b11, 0x0152, 0x8b11, 0x0153, 0xca80,
+ 0x3511, 0x3d11, 0xca82, 0x3511, 0x3d11, 0xca84, 0x3511, 0x3d11,
+ 0xca86, 0x3511, 0x3d11, 0xc872, 0x3511, 0x3d11, 0xe42e, 0x2814,
+ 0xe42a, 0xa231, 0xa102, 0xf21a, 0xa102, 0xf12a, 0xa102, 0xa003,
+ 0xf0fa, 0xa102, 0xa00b, 0xf19a, 0xa102, 0xf0aa, 0xa102, 0xa029,
+ 0xf07a, 0xa102, 0xa015, 0xf11a, 0xa102, 0xb7f0, 0xe428, 0x3e71,
+ 0x2a3b, 0xae21, 0x283c, 0xa002, 0x3c70, 0x8470, 0x8271, 0xe018,
+ 0xe008, 0xffff, 0xe056, 0xe42e, 0xe004, 0x03e7, 0x3c3c, 0xa002,
+ 0x3c3b, 0xf6ee, 0xa200, 0x3ca6, 0x3ca7, 0x3ca8, 0x3cab, 0x3ca0,
+ 0x3c38, 0x3c3a, 0x3c47, 0x3ca2, 0x3ca1, 0xcc92, 0xe42e, 0xe41e,
+ 0x0615, 0xa200, 0x3c9b, 0xe0c0, 0x0062, 0xaf0c, 0xa802, 0xf10a,
+ 0xe0c1, 0x0048, 0xe0c0, 0x0060, 0xe045, 0xaf13, 0xae03, 0xa109,
+ 0x3e9b, 0xf063, 0xe0c0, 0x0061, 0xae04, 0xe042, 0x3c9b, 0xe0c0,
+ 0x0060, 0x3498, 0x3c99, 0xe0c0, 0x0061, 0xae04, 0x2ab6, 0xb7f2,
+ 0x3c9a, 0x28b6, 0xf0aa, 0xe0c1, 0x0060, 0xe0c0, 0x0064, 0xe042,
+ 0xe41e, 0x063e, 0xe41e, 0x061d, 0xe41e, 0x0503, 0xe42e, 0xa200,
+ 0x3c9b, 0x2298, 0x4e99, 0x28b7, 0xf05a, 0xe0c1, 0x0068, 0x3698,
+ 0x3e99, 0xe0c0, 0x0069, 0xe042, 0xe41e, 0x063e, 0xe41e, 0x061d,
+ 0xe41e, 0x0503, 0xe42e, 0xe41e, 0x0518, 0xe41e, 0x0551, 0xd071,
+ 0x802a, 0xe181, 0xa200, 0x3ca6, 0x3ca7, 0x3ca8, 0x3ca9, 0x3caa,
+ 0x3cab, 0x3cac, 0xe41e, 0x055b, 0xe41e, 0x0f03, 0xe128, 0xe42e,
+ 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000,
+ 0xd036, 0x007f, 0xd037, 0x0000, 0xd038, 0x0000, 0xd04b, 0x0001,
+ 0xe42e, 0x28a0, 0xf1a8, 0x28a3, 0xf088, 0xd04c, 0x0001, 0xe41e,
+ 0x0f35, 0xd04c, 0x0000, 0xe470, 0xc896, 0xf05a, 0xe41e, 0x0547,
+ 0xd04c, 0x0000, 0xe004, 0x0080, 0x2aa4, 0xb616, 0xcc6e, 0xd04b,
+ 0x0001, 0xa202, 0x3c58, 0xe470, 0xd04c, 0x0000, 0xe470, 0xa200,
+ 0x3c58, 0xe41e, 0x0f35, 0x28a0, 0xcc96, 0x28a4, 0xe016, 0x3ca4,
+ 0xe42e, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0xe005, 0x0048,
+ 0xe093, 0x9f01, 0xe42e, 0x28a6, 0xf308, 0xa200, 0x3cad, 0xca28,
+ 0xf7d8, 0xe082, 0x3c9c, 0xe004, 0x0048, 0xe092, 0xd027, 0x0000,
+ 0xe41e, 0x0591, 0xd027, 0x0001, 0x28a6, 0x2aa7, 0xb602, 0xf1d8,
+ 0xca28, 0xf7f8, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0xce20,
+ 0x9f01, 0xd111, 0x00c0, 0xd112, 0x0040, 0xe0c0, 0x0043, 0xa806,
+ 0xae02, 0xa032, 0xce26, 0xca28, 0xf7f8, 0x2c9b, 0xe000, 0x0002,
+ 0x3c9b, 0x1c9a, 0xf024, 0x3c9b, 0xd14e, 0x0000, 0x289c, 0xe092,
+ 0xe42e, 0xe0c1, 0x0043, 0xa809, 0xe429, 0xa200, 0x3c9d, 0x28b6,
+ 0xe418, 0x0b4b, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0x3cab, 0x2098,
+ 0x4c99, 0x2e9b, 0xae11, 0xe042, 0x8111, 0x9e89, 0xe045, 0xf043,
+ 0x2c9a, 0xae10, 0xe041, 0xe003, 0x0200, 0xe421, 0xca8a, 0xe001,
+ 0x0200, 0xa011, 0xe041, 0x3ea7, 0xca94, 0x3cac, 0x28ab, 0x3ca6,
+ 0xe428, 0x28b6, 0xf03a, 0x3cab, 0xe42e, 0x289d, 0xf5c8, 0xe0c0,
+ 0x005c, 0xe008, 0x4000, 0xf57a, 0xe0c0, 0x005d, 0xe00a, 0x4000,
+ 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c9d, 0xe40e, 0x059a, 0xe0c0,
+ 0x0060, 0xf08a, 0xe0c0, 0x0061, 0x2298, 0x4e99, 0xe046, 0xaf12,
+ 0xae02, 0x3c9b, 0xe180, 0xe41e, 0x0518, 0xe41e, 0x0551, 0xe41e,
+ 0x0157, 0xe41e, 0x0196, 0xe166, 0x0054, 0x9e06, 0xf16a, 0x2835,
+ 0xa102, 0xcc44, 0xa200, 0x3c70, 0xe184, 0x05fa, 0x9e06, 0x5c70,
+ 0xa802, 0xf07a, 0x2870, 0xe000, 0x0300, 0xe09e, 0xa208, 0x3d07,
+ 0x2870, 0xa002, 0x3c70, 0xe190, 0xa202, 0x3cb8, 0xe42e, 0xe0c0,
+ 0x0048, 0xca89, 0xe003, 0x00c0, 0xa105, 0xae07, 0xe042, 0xca8b,
+ 0xe015, 0xa80f, 0xe042, 0x2298, 0x4e99, 0xe045, 0xf047, 0x2e9a,
+ 0xae11, 0xe042, 0xe0c2, 0x0046, 0xe42e, 0xe161, 0x0800, 0xa200,
+ 0x3d11, 0xe004, 0x01b1, 0x3d11, 0xe42e, 0xca29, 0xf7f9, 0xe0c0,
+ 0x0049, 0xe049, 0xaf06, 0xae06, 0xa80f, 0xe01b, 0xae07, 0xe042,
+ 0xce20, 0xd111, 0x0800, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0xc872, 0xe049, 0xa80f, 0xe01b, 0xaf06, 0xe042,
+ 0x224a, 0x4e4b, 0xe045, 0xa200, 0xb62e, 0xe42e, 0xe0c1, 0x0049,
+ 0xe045, 0x364a, 0x3e4b, 0xe42e, 0xcaa0, 0xe190, 0x28ad, 0xa002,
+ 0x3cad, 0xca9c, 0xe418, 0x055b, 0xa203, 0xae1f, 0xcea7, 0xcaa2,
+ 0xaf10, 0xa102, 0xf728, 0xcaa0, 0xe190, 0x28ad, 0xa002, 0x3cad,
+ 0xca9c, 0xe418, 0x055b, 0xcaa0, 0xe190, 0x28ad, 0xa002, 0x3cad,
+ 0xca9c, 0xe418, 0x055b, 0xa200, 0x3ca2, 0x3ca1, 0x3ca3, 0xe41e,
+ 0x0f28, 0xba4e, 0xba4e, 0xe002, 0x00b0, 0xf5f8, 0xba4e, 0x3c16,
+ 0xa140, 0xf03a, 0xe16b, 0xe42e, 0xba4e, 0x3c17, 0xba40, 0x3c15,
+ 0x2a10, 0xba5a, 0xf2ca, 0x3c10, 0xf04b, 0x2810, 0xe045, 0xf275,
+ 0xa01e, 0xaf08, 0x3c43, 0x2a11, 0xba5a, 0xf21a, 0x3c11, 0xf04b,
+ 0x2811, 0xe045, 0xf1c5, 0xa01e, 0xaf08, 0x3c44, 0x3c65, 0xba42,
+ 0x3c12, 0xba44, 0xba46, 0x3c13, 0xba46, 0x3c14, 0xf038, 0xe16b,
+ 0xe42e, 0xba7c, 0xba40, 0x3c18, 0xba6a, 0x2810, 0xae20, 0x4c11,
+ 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0xa202, 0xe42e, 0x2810, 0xae20,
+ 0x4c11, 0xe0c2, 0x006f, 0xe0c2, 0x004f, 0xa200, 0xe16b, 0xe42e,
+ 0xcaa0, 0x28ad, 0xa002, 0x3cad, 0xca9c, 0xe418, 0x055b, 0xa203,
+ 0xae1f, 0xcea7, 0xe41e, 0x0f77, 0xe428, 0xcaa2, 0x3c70, 0xaf10,
+ 0xa102, 0xf6f8, 0x2870, 0xe008, 0x00ff, 0xe049, 0xe003, 0x00b1,
+ 0xf3bb, 0xe002, 0x00af, 0xf030, 0xa202, 0xe42e, 0xcaa0, 0xe190,
+ 0x28ad, 0xa002, 0x3cad, 0xca9c, 0xe418, 0x055b, 0xcaa0, 0xe190,
+ 0x28ad, 0xa002, 0x3cad, 0xca9c, 0xe418, 0x055b, 0xe41e, 0x0f28,
+ 0x2870, 0xe008, 0x00ff, 0xe002, 0x00af, 0xf030, 0xa202, 0xe42e,
+ 0xba4e, 0xba4e, 0xe002, 0x00b0, 0xf12a, 0xa102, 0xf15a, 0xa102,
+ 0xf17a, 0xa102, 0xf22a, 0xa104, 0xe40a, 0x075d, 0xa102, 0xe40a,
+ 0x0791, 0xa102, 0xe40a, 0x07f8, 0xe40e, 0x06b7, 0xe41e, 0x066e,
+ 0xe42d, 0xe40e, 0x06b7, 0xa202, 0x3c3a, 0xe40e, 0x06b0, 0x28bd,
+ 0xf088, 0xba4e, 0xe41e, 0x0f1c, 0xf7d8, 0xe190, 0xe40e, 0x06b7,
+ 0xe41e, 0x0833, 0xe40e, 0x06b7, 0xa202, 0x3c3a, 0x3cae, 0xba5e,
+ 0xba40, 0xa102, 0xf028, 0xba6e, 0xba40, 0xba4e, 0x3c1b, 0x2818,
+ 0xa102, 0xf028, 0xbdfe, 0xba40, 0xe049, 0x3c1c, 0xa103, 0xf02b,
+ 0xba40, 0x3c1d, 0xe016, 0x3c2a, 0xba40, 0x3c1e, 0xba40, 0x3c1f,
+ 0xba40, 0x3c20, 0xba4a, 0x3c21, 0x281c, 0x4c1d, 0xf038, 0xba40,
+ 0x3c22, 0xba46, 0xba40, 0x3c26, 0xf078, 0xba40, 0xf05a, 0xbe7e,
+ 0x3c23, 0xbe7e, 0x3c24, 0x2a1d, 0xf089, 0x2844, 0xe049, 0xaf02,
+ 0xae02, 0xe045, 0x0a44, 0x3e44, 0x2844, 0xaf02, 0x3c45, 0x2a1d,
+ 0x8443, 0x8244, 0xe018, 0x3c6c, 0xcf9a, 0xf029, 0xaf02, 0x3c37,
+ 0x2800, 0x3c19, 0xe40e, 0x06b7, 0xe190, 0xba46, 0xa104, 0xf0aa,
+ 0xa104, 0xf0fa, 0xa106, 0xf14a, 0xa108, 0xf18a, 0xf11e, 0xe40e,
+ 0x06b7, 0xba46, 0xba40, 0xf02a, 0xba6e, 0xba7c, 0xe40e, 0x06b7,
+ 0xba62, 0xba68, 0xba6c, 0xba6a, 0xe40e, 0x06b7, 0xba4e, 0xe41e,
+ 0x0f1c, 0xf7d8, 0xe190, 0xe40e, 0x06b7, 0xba7e, 0xba6c, 0xba6c,
+ 0xba6c, 0xba60, 0xba60, 0xba60, 0xba60, 0xba60, 0xba60, 0xba6c,
+ 0xba6c, 0xba6c, 0xba6c, 0xba6c, 0xba7e, 0xba40, 0xba7e, 0xe40e,
+ 0x06b7, 0xa202, 0x3c3a, 0xba5e, 0xba42, 0x3c30, 0xa104, 0xf04a,
+ 0xa204, 0x3cae, 0xf03e, 0xa206, 0x3cae, 0xba4e, 0x3c1b, 0x2818,
+ 0xf02a, 0xbdfe, 0xba40, 0x3c1c, 0xf068, 0xba40, 0x3c1d, 0xf048,
+ 0xba40, 0xf02e, 0x3c1d, 0xba40, 0x3c1e, 0xba40, 0x3c1f, 0xba40,
+ 0x3c20, 0xba4a, 0x3c21, 0x2830, 0xa104, 0x2a1d, 0xa103, 0xe056,
+ 0xf03a, 0xba40, 0x3c25, 0xba46, 0xba40, 0x3c22, 0xba40, 0x3c26,
+ 0xf078, 0xba40, 0xf05a, 0xbe7e, 0x3c23, 0xbe7e, 0x3c24, 0x2830,
+ 0xa104, 0xf18a, 0x2a1d, 0xf089, 0x2844, 0xe049, 0xaf02, 0xae02,
+ 0xe045, 0x0a44, 0x3e44, 0x2a1d, 0x8443, 0x8244, 0xe018, 0x3c6c,
+ 0xcf9a, 0xf029, 0xaf02, 0x3c37, 0xa202, 0x3c19, 0xe40e, 0x06b7,
+ 0xe190, 0x2a1d, 0xf089, 0x2844, 0xe049, 0xaf02, 0xae02, 0xe045,
+ 0x0a44, 0x3e44, 0x2a1d, 0x8443, 0x8244, 0xe018, 0x3c6c, 0xcf9a,
+ 0xf029, 0xaf02, 0x3c37, 0xa204, 0x3c19, 0xe40e, 0x06b7, 0xe190,
+ 0xe40e, 0x06b7, 0xe190, 0xba4e, 0x2810, 0xe002, 0x0af0, 0xf024,
+ 0xba44, 0x2820, 0xf058, 0xba40, 0x3c27, 0xba4a, 0x3c28, 0x2819,
+ 0xf27a, 0xba40, 0x3c2e, 0xf24a, 0x281d, 0xf03a, 0xa204, 0xf07e,
+ 0x282b, 0xf04a, 0xa202, 0x2a1a, 0xf02b, 0xa208, 0x3c70, 0xe161,
+ 0x0100, 0xe162, 0x0104, 0xe163, 0x0108, 0xe164, 0x010c, 0xa102,
+ 0xcc44, 0xe184, 0x082c, 0xba4e, 0x3d11, 0xba4e, 0x3d12, 0xba40,
+ 0xba4e, 0x3d13, 0xba4e, 0x3d14, 0xba40, 0xba40, 0x3c2d, 0x28be,
+ 0xe016, 0x3cbe, 0xe42e, 0x2abd, 0x28c4, 0xa120, 0xb615, 0x3ebd,
+ 0xe42b, 0xa200, 0x3cc2, 0xe162, 0x0420, 0xba4e, 0x2ac2, 0xa803,
+ 0xf049, 0xae10, 0x3cc1, 0xf03e, 0x4cc1, 0x3d12, 0x2ac2, 0xa003,
+ 0x3ec2, 0xa80f, 0xe41b, 0x08a0, 0x28bd, 0xf0aa, 0xe41e, 0x0f1c,
+ 0xf6d8, 0x28c2, 0x28c2, 0xa802, 0xf03a, 0x28c1, 0x3d12, 0xa211,
+ 0x28c2, 0xa80e, 0xf0ba, 0xe045, 0xaf03, 0xf06b, 0xa103, 0x3e70,
+ 0xa201, 0x8670, 0x3f12, 0xe41e, 0x08a0, 0xe162, 0x0420, 0x28c3,
+ 0x3d12, 0x28c2, 0x3d12, 0xa200, 0x3d12, 0x3d12, 0xe0c1, 0x006b,
+ 0x28c4, 0xa002, 0xae06, 0xe041, 0xaf06, 0x3cc4, 0xce21, 0xd111,
+ 0x0420, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e,
+ 0xa200, 0x3cc7, 0xe0c0, 0x005c, 0xe0c1, 0x0065, 0xaf12, 0xa802,
+ 0xaf15, 0xa803, 0xe016, 0xe056, 0xf04a, 0xa200, 0x3cbd, 0xe42e,
+ 0x28c8, 0xf05a, 0xe0c0, 0x005d, 0xe42a, 0xf7be, 0xe0c0, 0x005d,
+ 0xe00a, 0x0200, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3cc8, 0xf71e,
+ 0xd112, 0x0004, 0xe0c0, 0x006b, 0xe000, 0x0088, 0x08c7, 0xce20,
+ 0xd111, 0x0420, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe162, 0x0420,
+ 0x28c5, 0x2ac7, 0xa010, 0xa011, 0x3cc5, 0x3ec7, 0x1ac6, 0xe41b,
+ 0x0880, 0xa200, 0x3cc8, 0xe42e, 0x2a40, 0xa803, 0xf139, 0xae10,
+ 0x3cc0, 0x2a2b, 0xe017, 0x462a, 0xe429, 0x2a6c, 0xa103, 0x1a40,
+ 0xe429, 0xe005, 0x0320, 0x0abf, 0xe095, 0x3d02, 0xe41e, 0x08ec,
+ 0xe42e, 0x4cc0, 0xe005, 0x0320, 0x0abf, 0xe095, 0x3d02, 0x28bf,
+ 0xa002, 0x3cbf, 0xe002, 0x0080, 0xf068, 0xe41e, 0x08ec, 0xa200,
+ 0x3cbf, 0xe42e, 0x2a2b, 0xe017, 0x462a, 0xe429, 0x286c, 0xa102,
+ 0x1840, 0xe41a, 0x08ec, 0xe42e, 0x2a40, 0xaf11, 0xae11, 0xe162,
+ 0x043c, 0x2112, 0x4d02, 0xe042, 0xce20, 0xd112, 0x0080, 0xd111,
+ 0x0320, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xcb86, 0xa802,
+ 0xf08a, 0xa201, 0x2819, 0xae02, 0xa102, 0x3c70, 0x8670, 0x3f12,
+ 0x282c, 0x2a19, 0xa103, 0xa004, 0xb452, 0x3c2c, 0xe002, 0x0080,
+ 0xf068, 0xe41e, 0x0920, 0xa200, 0x3c2c, 0xe42e, 0x2a2b, 0xe017,
+ 0x462a, 0xe429, 0x286c, 0xa102, 0x1840, 0xe41a, 0x0920, 0xe42e,
+ 0x2819, 0xa802, 0x3c70, 0x2a40, 0xaf0b, 0x5e70, 0xae11, 0xe162,
+ 0x0440, 0x2112, 0x4d02, 0xe042, 0xce20, 0xd112, 0x0080, 0xd111,
+ 0x03a0, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xa200, 0x3c40,
+ 0x3cbf, 0x3c2c, 0x3c2b, 0x3cc0, 0xcea6, 0xe016, 0x3cbe, 0x2819,
+ 0x3c1a, 0xe41e, 0x0afb, 0xe41e, 0x0b73, 0xe41e, 0x0971, 0x281b,
+ 0x2a1d, 0xf029, 0xae02, 0xe0c2, 0x007a, 0x281d, 0xf178, 0xa202,
+ 0x3c2b, 0x28b6, 0xf03a, 0xe41e, 0x0a13, 0x281b, 0xae02, 0xa002,
+ 0xe0c1, 0x007a, 0xae14, 0xe055, 0xe0c3, 0x007a, 0x2819, 0xb634,
+ 0x3c19, 0xe41e, 0x0b73, 0xe41e, 0x0971, 0x2819, 0xa104, 0xf02a,
+ 0xcfca, 0xa202, 0xe0c2, 0x0076, 0xe42e, 0xa200, 0xe0c2, 0x0076,
+ 0xe42e, 0xd1c6, 0x0001, 0xe16a, 0xa200, 0x3c3f, 0x3c41, 0x3c42,
+ 0xa2fe, 0x3c33, 0x281b, 0xcfc8, 0x2833, 0xcf8a, 0x2842, 0xae0e,
+ 0x4c41, 0xcf94, 0x2841, 0xf1c8, 0x2833, 0xf1a0, 0xe41c, 0x09fc,
+ 0xe41d, 0x09e7, 0x3c70, 0x28a3, 0xf0d8, 0xa200, 0x3c58, 0x28a0,
+ 0xf098, 0xa202, 0x3ca3, 0x3c58, 0x3ca4, 0xd036, 0x00ff, 0xd037,
+ 0x0080, 0x2870, 0xf05a, 0xe41e, 0x07fb, 0xe41e, 0x0c3d, 0xe41e,
+ 0x0a40, 0xe41c, 0x0a4d, 0xe41d, 0x0a2f, 0xe41e, 0x0d07, 0xe41d,
+ 0x0ee5, 0xe41e, 0x09bc, 0xcb8a, 0x3c33, 0x2837, 0x183f, 0xf538,
+ 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xf04a,
+ 0xe0c0, 0x0281, 0xf7ea, 0xe42e, 0xd1c8, 0x0001, 0x283f, 0xa002,
+ 0x3c3f, 0x2840, 0xa002, 0x3c40, 0x2841, 0xa002, 0x3c41, 0x1843,
+ 0xe428, 0xd1c6, 0x0004, 0x3c41, 0x2842, 0xa002, 0x3c42, 0xe42e,
+ 0x2819, 0xa104, 0xf0ca, 0x2851, 0x3c70, 0x2850, 0x3c51, 0x2852,
+ 0x3c50, 0x2870, 0x3c52, 0x2819, 0x3c56, 0xe42e, 0x2853, 0x3c70,
+ 0x2852, 0x3c53, 0x2870, 0x3c52, 0x2819, 0x3c56, 0xe42e, 0xa200,
+ 0x3ca3, 0x2a29, 0x1a42, 0xe429, 0xe16a, 0xd153, 0x0000, 0xcaa0,
+ 0xe190, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0x28ad, 0xa006, 0x3cad,
+ 0xe41e, 0x0f28, 0xa202, 0xe42e, 0xc894, 0xf05a, 0x283f, 0xf03a,
+ 0xa200, 0xe42e, 0xe41e, 0x0a2a, 0xcaa0, 0xe190, 0xcaa0, 0xe190,
+ 0xcaa0, 0xe190, 0x28ad, 0xa006, 0x3cad, 0xa200, 0x3ca3, 0xe41e,
+ 0x0f28, 0xa202, 0xe42e, 0xe0c0, 0x005c, 0xe008, 0x0400, 0xe42a,
+ 0xe004, 0x0400, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202,
+ 0xce00, 0xe0c0, 0x005d, 0xe008, 0x0400, 0xe190, 0xf7b8, 0xe41e,
+ 0x04ef, 0xe42e, 0xc868, 0xa80e, 0x3c70, 0x7470, 0xe42e, 0xa2fe,
+ 0x3c33, 0xd1ce, 0x0000, 0xd1c3, 0x0000, 0xcbc0, 0xf7f8, 0xd1c0,
+ 0x0020, 0xd1e0, 0x0010, 0xcbc0, 0xf7f8, 0xd1e0, 0x000a, 0xe42e,
+ 0x2842, 0xae0e, 0x4c41, 0xcf94, 0x2840, 0xcf98, 0xd1c3, 0x0000,
+ 0xcbc0, 0xf7f8, 0xd1e0, 0x0005, 0xe42e, 0xcbc0, 0xf7f8, 0xe190,
+ 0xe180, 0x2858, 0xe418, 0x0547, 0xe181, 0xd1c0, 0x000f, 0xcb9d,
+ 0xcb80, 0xf0c9, 0xf7d8, 0xd1e0, 0x000a, 0x2826, 0xf038, 0xd1c0,
+ 0x0010, 0xcbc0, 0xf7f8, 0xe16a, 0xe42e, 0xd1c0, 0x0000, 0xd1ce,
+ 0x0000, 0xe16b, 0xe42e, 0x286a, 0xe424, 0xcba9, 0xa87f, 0x3e6d,
+ 0x2841, 0xa802, 0xf0e8, 0xae11, 0x3e6f, 0x2841, 0xa002, 0x1843,
+ 0xe428, 0x2841, 0xaf02, 0xe000, 0x0200, 0xe09e, 0x3f07, 0xf0ee,
+ 0x2a6f, 0x2841, 0xaf02, 0xe000, 0x0200, 0xe09e, 0x4e6d, 0x3f07,
+ 0x2841, 0xa002, 0x1843, 0xe428, 0xf01e, 0x2843, 0xa002, 0xaf02,
+ 0xa006, 0xa2f9, 0xe052, 0xae02, 0x3c70, 0x2842, 0x2a1d, 0xf039,
+ 0xae02, 0x082b, 0x3c71, 0xe0c1, 0x0041, 0xe004, 0x029c, 0xae10,
+ 0xe042, 0x846a, 0xe182, 0x2000, 0xe019, 0xe042, 0x8471, 0x8270,
+ 0xe019, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0200, 0x2870,
+ 0xaf02, 0xce24, 0xa204, 0xce26, 0xca28, 0xf7f8, 0xe42e, 0x2a41,
+ 0x286e, 0xa803, 0xf06b, 0xe049, 0xa13f, 0xe427, 0xa23e, 0xe42e,
+ 0x2841, 0xe41a, 0x0ad2, 0x2841, 0xaf02, 0xe000, 0x0280, 0xe09e,
+ 0x2907, 0xe049, 0xaf10, 0xa87f, 0x3e6e, 0xe049, 0xa13f, 0xe427,
+ 0xa23e, 0xe42e, 0x2843, 0xa002, 0xaf02, 0xa006, 0xa2f9, 0xe052,
+ 0xae02, 0x3c70, 0x2842, 0x2a2b, 0xf02b, 0x0845, 0x3c71, 0xe0c1,
+ 0x0041, 0xe004, 0x029c, 0xae10, 0xe042, 0x846b, 0xe182, 0x2000,
+ 0xe019, 0xe042, 0x8471, 0x8270, 0xe019, 0xe042, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x0280, 0x2870, 0xaf02, 0xce24, 0xa206, 0xce26,
+ 0xca28, 0xf7f8, 0xe42e, 0x2855, 0xf0c4, 0x2a66, 0xe045, 0xf039,
+ 0xa200, 0xf07e, 0x2a67, 0xe045, 0xf039, 0xa202, 0xf02e, 0xa204,
+ 0x3c6b, 0xa2ff, 0x285b, 0xf0d4, 0x2a66, 0xf043, 0x3c66, 0xa201,
+ 0xf08e, 0x2a67, 0xf043, 0x3c67, 0xa203, 0xf03e, 0x3c68, 0xa205,
+ 0x3e6a, 0xe42e, 0x28b0, 0xf2da, 0xa102, 0xf06a, 0xa102, 0xf12a,
+ 0xa104, 0xf0aa, 0xf12e, 0x28ae, 0xa102, 0xf138, 0x28af, 0xf216,
+ 0xa102, 0x3caf, 0xf0ee, 0x28ae, 0xa102, 0xf1ba, 0xa102, 0xf19a,
+ 0xf04e, 0x28ae, 0xa102, 0xf15a, 0x28af, 0xa102, 0x3caf, 0xf056,
+ 0xa204, 0x3cb1, 0xa202, 0xe42e, 0x285d, 0xe0c2, 0x0071, 0xa2fc,
+ 0xe0c2, 0x0077, 0xa200, 0xe0c2, 0x0074, 0xa202, 0x3cb1, 0xe42e,
+ 0xa200, 0x3cb1, 0xe42e, 0x2098, 0x4c99, 0xe0c1, 0x0067, 0xe042,
+ 0xe0c1, 0x0069, 0xa80f, 0xe042, 0x8111, 0x9f09, 0xe0c0, 0x0045,
+ 0xaf04, 0xa802, 0x3cab, 0xe42e, 0xe0c0, 0x0069, 0xa80e, 0xa102,
+ 0xe424, 0xcaa0, 0xf7de, 0xe0c0, 0x0066, 0x3caf, 0xe0c0, 0x0065,
+ 0xaf04, 0xa80e, 0x3cb0, 0xa200, 0x3cb1, 0x28b8, 0xe418, 0x0503,
+ 0xa200, 0x3cb8, 0xe42e, 0xa200, 0xcc8e, 0xa20a, 0xe0c2, 0x0100,
+ 0xe004, 0x00ce, 0xe0c2, 0x017c, 0xe004, 0x004c, 0xe0c2, 0x017d,
+ 0xe0c0, 0x0050, 0xe049, 0xe008, 0x000f, 0x3c0c, 0xaf11, 0xe009,
+ 0x000f, 0x3e0d, 0x460c, 0x3e0c, 0xe0c0, 0x0050, 0xaf1c, 0xa802,
+ 0xe005, 0x0ba6, 0xe09f, 0x3d17, 0xa200, 0x2a0c, 0xa803, 0xf03b,
+ 0xe00a, 0x0002, 0x2a0c, 0xa805, 0xf03b, 0xe00a, 0x0009, 0x2a0c,
+ 0xa809, 0xf03b, 0xe00a, 0x0020, 0x2a0c, 0xa811, 0xf03b, 0xe00a,
+ 0x0040, 0xe005, 0x0ba6, 0xe09f, 0x2b17, 0xae05, 0xe056, 0xe0c2,
+ 0x0169, 0xe0c1, 0x0041, 0xe004, 0x0010, 0xae10, 0xe042, 0x2a0d,
+ 0xa805, 0xf05b, 0xe167, 0x01d6, 0x2117, 0x4d17, 0xe0c2, 0x0103,
+ 0x2843, 0xae20, 0x4c44, 0xae08, 0xe0c2, 0x0101, 0xe0c2, 0x006f,
+ 0x2a10, 0xa01f, 0xaf09, 0xae29, 0x2811, 0xa01e, 0xaf08, 0xae08,
+ 0xe056, 0xe0c2, 0x0283, 0x2844, 0xae0e, 0x4c43, 0xcf96, 0x2823,
+ 0xa87e, 0xae0c, 0x2a24, 0xa87f, 0xe056, 0xcf8e, 0x2826, 0xcfd6,
+ 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xe01a, 0x4464, 0xe418, 0x0e09,
+ 0x2825, 0xae02, 0x4c1d, 0xae02, 0x4c2b, 0xcfc2, 0x282b, 0xf098,
+ 0x2820, 0xae0c, 0x4c21, 0xae02, 0x4c22, 0xae04, 0x4c19, 0xcf82,
+ 0x2819, 0xcf88, 0xe0c0, 0x0044, 0xa80e, 0xae1a, 0x4c36, 0xe0c2,
+ 0x0102, 0x282a, 0xa908, 0xae04, 0x4c19, 0xae04, 0x4c2a, 0xae02,
+ 0x4c2b, 0xe0c2, 0x0104, 0x2a2a, 0x28ef, 0xae08, 0x4c19, 0xae04,
+ 0xe056, 0xae02, 0x4c2b, 0xe0c1, 0x0065, 0xaf19, 0xa803, 0xae17,
+ 0xe056, 0xe0c2, 0x0204, 0x282b, 0xe41a, 0x0cc2, 0xe41e, 0x0c75,
+ 0xe161, 0x01d0, 0x2111, 0x4d01, 0xcfc6, 0xe0c1, 0x0041, 0xe004,
+ 0x0000, 0xae10, 0xe042, 0x2a0d, 0xa803, 0xf05b, 0xe167, 0x01d4,
+ 0x2117, 0x4d17, 0xcfc4, 0xa202, 0xe0c2, 0x0106, 0xa201, 0xe167,
+ 0x0ba7, 0x3f17, 0xe41e, 0x0f96, 0xe42e, 0xa200, 0x3c57, 0xa2fe,
+ 0x3c33, 0xcf8a, 0x2827, 0xae0c, 0x4c28, 0xae02, 0x4c2e, 0xae02,
+ 0x4c2d, 0xcf84, 0xd1c6, 0x0002, 0xe161, 0x0100, 0xe162, 0x0104,
+ 0xe163, 0x0108, 0xe164, 0x010c, 0x2911, 0xae10, 0x4d11, 0xae10,
+ 0x4d11, 0xae10, 0x4d01, 0xcfce, 0x2912, 0xae10, 0x4d12, 0xae10,
+ 0x4d12, 0xae10, 0x4d02, 0xcfd0, 0x2913, 0xae10, 0x4d13, 0xae10,
+ 0x4d13, 0xae10, 0x4d03, 0xcfd2, 0x2914, 0xae10, 0x4d14, 0xae10,
+ 0x4d14, 0xae10, 0x4d04, 0xcfd4, 0xe42e, 0x2826, 0xf19a, 0xa204,
+ 0xe0c2, 0x0208, 0xe0c2, 0x0210, 0x845b, 0xc786, 0xe018, 0xe000,
+ 0x0110, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x020d, 0x2117, 0x4d17,
+ 0xe0c2, 0x020e, 0x2117, 0x4d17, 0xe0c2, 0x020f, 0xe42e, 0xa200,
+ 0xe0c2, 0x0208, 0xa202, 0xe0c2, 0x0210, 0xe0c1, 0x0041, 0xe004,
+ 0x0040, 0xae10, 0xe042, 0x2a0d, 0xa809, 0xf05b, 0xe167, 0x01d8,
+ 0x2117, 0x4d17, 0xe0c2, 0x0211, 0xe000, 0x4000, 0x2a0d, 0xa811,
+ 0xf05b, 0xe167, 0x01da, 0x2117, 0x4d17, 0xe0c2, 0x0212, 0x845b,
+ 0xc786, 0xe018, 0xe000, 0x0110, 0xe09e, 0x2117, 0x4d17, 0xe0c2,
+ 0x0214, 0x2117, 0x4d17, 0xe0c2, 0x0215, 0x2117, 0x4d17, 0xe0c2,
+ 0x0216, 0xe42e, 0xa202, 0xe0c2, 0x0302, 0xa202, 0xae02, 0xa902,
+ 0xe0c2, 0x0312, 0xa220, 0xe0c2, 0x0313, 0x845a, 0xc786, 0xe018,
+ 0xe000, 0x0110, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0380, 0x2117,
+ 0x4d17, 0xe0c2, 0x0381, 0x2117, 0x4d17, 0xe0c2, 0x0382, 0x8459,
+ 0xc786, 0xe018, 0xe000, 0x0110, 0xe09e, 0x2117, 0x4d17, 0xe0c2,
+ 0x0383, 0x2117, 0x4d17, 0xe0c2, 0x0384, 0x2117, 0x4d17, 0xe0c2,
+ 0x0385, 0x845b, 0xc786, 0xe018, 0xe000, 0x0110, 0xe09e, 0x2117,
+ 0x4d17, 0xe0c2, 0x0386, 0x2117, 0x4d17, 0xe0c2, 0x0387, 0x2117,
+ 0x4d17, 0xe0c2, 0x0388, 0xa200, 0xe0c2, 0x0302, 0xe42e, 0xcba6,
+ 0xe0c2, 0x0114, 0xcba8, 0xe0c2, 0x0115, 0xcbaa, 0xe0c2, 0x012a,
+ 0xcbac, 0xe0c2, 0x0117, 0xcbae, 0xe0c2, 0x0120, 0xcbb0, 0xe0c2,
+ 0x0121, 0xcbb2, 0xe0c2, 0x0123, 0xe0c0, 0x0111, 0xf7e8, 0xf08c,
+ 0xe0c0, 0x0124, 0xe0c2, 0x0124, 0xa200, 0xe0c2, 0x0320, 0x2abc,
+ 0x281a, 0xe01a, 0xe051, 0xf2db, 0xe004, 0x03a0, 0x082c, 0xe094,
+ 0xcb86, 0xa802, 0xf248, 0xcbdf, 0xaf05, 0xa803, 0xe017, 0xae1f,
+ 0xe0c0, 0x03b0, 0xb616, 0x3512, 0x3d0a, 0x2902, 0xe008, 0x7fff,
+ 0xe056, 0x3d12, 0x8112, 0x281a, 0xa102, 0xf11a, 0xcbdf, 0xaf1d,
+ 0xa803, 0xe017, 0xae1f, 0xe0c0, 0x03c0, 0xb616, 0x3512, 0x3d0a,
+ 0x2902, 0xe008, 0x7fff, 0xe056, 0x3d12, 0x8112, 0xe41e, 0x08fe,
+ 0xa202, 0xe0c2, 0x0110, 0xcbc0, 0xf7f8, 0xe41e, 0x0a6b, 0xa200,
+ 0xb63a, 0x2abb, 0xf07b, 0xae02, 0x4cbe, 0xae0c, 0x4c6d, 0xe41e,
+ 0x08bc, 0x2864, 0xe418, 0x0de2, 0xe42e, 0xe0c0, 0x0065, 0xaf0a,
+ 0xa81e, 0xe40a, 0x0db5, 0x28ba, 0xf1fa, 0xe167, 0x0300, 0xe166,
+ 0x0428, 0xd022, 0x0007, 0xe184, 0x0d84, 0x2917, 0xae08, 0x4d17,
+ 0xae08, 0x4d17, 0xae08, 0x4d17, 0x3d16, 0xe190, 0xe167, 0x0438,
+ 0x2117, 0x4d17, 0xce20, 0xd111, 0x0428, 0xd112, 0x0008, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe162, 0x0436, 0xc410, 0xa200, 0x2aba,
+ 0xb632, 0xae10, 0x3d12, 0xa220, 0x3d12, 0x8132, 0xa200, 0x2abb,
+ 0xb652, 0xae10, 0x3d12, 0x2837, 0x582a, 0x3d12, 0x8132, 0x2abc,
+ 0x281a, 0xe01a, 0xe051, 0xa200, 0xb692, 0xae10, 0x4c1a, 0x3d12,
+ 0x2837, 0x582a, 0xb616, 0x3d12, 0x8132, 0xe0c0, 0x0065, 0xaf0a,
+ 0xa802, 0xf12a, 0xe162, 0x0420, 0x28c4, 0x3d12, 0x28c5, 0x3d12,
+ 0xe0c0, 0x006b, 0xce20, 0xd111, 0x0420, 0xd112, 0x0004, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xf0ca,
+ 0xe0c0, 0x006a, 0xce20, 0xd112, 0x000c, 0xd111, 0x0436, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xa200, 0x3cc5, 0x3cc4, 0x3cbd, 0x3cc7,
+ 0x3cc8, 0xe42e, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xe42a, 0x2842,
+ 0x2a2b, 0xf02b, 0x0845, 0x1865, 0xe42a, 0x2841, 0x4c42, 0xe01a,
+ 0x4c2b, 0x3c62, 0x2861, 0xe418, 0x0ab7, 0xae02, 0x4c62, 0xae02,
+ 0xa902, 0xae0e, 0x4c41, 0xae0e, 0x2a2b, 0xf02b, 0x0845, 0x0842,
+ 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a,
+ 0xe42e, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0x3060, 0xaf02, 0x3061,
+ 0xe0c1, 0x0060, 0xa81f, 0xae08, 0xe055, 0xe0c3, 0x014e, 0x2843,
+ 0xa102, 0xae20, 0x4c65, 0xa102, 0xe0c2, 0x0142, 0x2836, 0xe0c2,
+ 0x0141, 0xe0c0, 0x0064, 0xe0c2, 0x014c, 0x8455, 0xc786, 0xe018,
+ 0xe000, 0x0110, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117,
+ 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xe0c0,
+ 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2, 0x0147, 0xe0c0,
+ 0x0063, 0xe0c2, 0x0148, 0xe42e, 0x2855, 0xe424, 0x2869, 0xae04,
+ 0xa004, 0xae0e, 0x4c41, 0xae0e, 0x4c42, 0x2a2b, 0xf04b, 0x2a44,
+ 0xaf03, 0xe042, 0xe190, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d,
+ 0xa202, 0xe0c2, 0x014a, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0x2855,
+ 0xe424, 0xe0c0, 0x0060, 0xe049, 0xa81f, 0xa860, 0xe42a, 0x2861,
+ 0xae08, 0xe056, 0xe0c2, 0x014e, 0x2843, 0xa102, 0xae20, 0x4c65,
+ 0xa102, 0xe0c2, 0x0142, 0x2836, 0xe0c2, 0x0141, 0xe0c0, 0x0064,
+ 0xe0c2, 0x014c, 0x8455, 0xc786, 0xe018, 0xe000, 0x0110, 0xe09e,
+ 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117, 0x4d17, 0xe0c2, 0x0144,
+ 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xe0c0, 0x0061, 0xe0c2, 0x0146,
+ 0xe0c0, 0x0062, 0xe0c2, 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148,
+ 0xa200, 0x3c41, 0x3c42, 0x3c3f, 0x3c2b, 0xe41e, 0x0de2, 0x283f,
+ 0xa002, 0x3c3f, 0x2841, 0xa002, 0x3c41, 0x1843, 0xf778, 0x3c41,
+ 0x2842, 0xa002, 0x3c42, 0x283f, 0x1837, 0xf708, 0x281d, 0xf188,
+ 0xa202, 0x3c2b, 0xa200, 0x3c41, 0x3c42, 0x3c3f, 0xe41e, 0x0de2,
+ 0x283f, 0xa002, 0x3c3f, 0x2841, 0xa002, 0x3c41, 0x1843, 0xf778,
+ 0x3c41, 0x2842, 0xa002, 0x3c42, 0x283f, 0x1837, 0xf708, 0xe41e,
+ 0x0e44, 0xe0c1, 0x014b, 0xf7e9, 0xe190, 0xe42e, 0xcaa2, 0xaf10,
+ 0xa102, 0xf058, 0xe41e, 0x0f28, 0x2aa8, 0xe429, 0xcaa2, 0xe008,
+ 0x00ff, 0xe002, 0x00b1, 0xf09a, 0xa104, 0xf07a, 0xa106, 0xf05a,
+ 0xcaa0, 0xcaa0, 0xcaa0, 0xf6fe, 0xe42e, 0x2857, 0xf198, 0xd153,
+ 0x0000, 0xca9c, 0xe418, 0x055b, 0xe41e, 0x0f77, 0xe428, 0xcaa2,
+ 0xaf10, 0xa102, 0xf09a, 0xcaa0, 0x28ad, 0xa002, 0x3cad, 0xe41e,
+ 0x0f89, 0xf6ee, 0xe190, 0xcaa2, 0xe008, 0x00ff, 0x3c29, 0x2857,
+ 0xa002, 0x3c57, 0xe42e, 0xd152, 0x0005, 0xd146, 0x00c0, 0xd147,
+ 0x00ff, 0xd148, 0x00c0, 0xd144, 0x00c0, 0xd145, 0x0000, 0xd14b,
+ 0x0200, 0xe004, 0x0180, 0xce30, 0xca32, 0xca32, 0xce84, 0xca32,
+ 0xce86, 0xd144, 0x00c1, 0xe42e, 0xca9e, 0xf09a, 0xc870, 0xaf06,
+ 0xa002, 0xc891, 0xe046, 0xf034, 0xa200, 0xe42e, 0xa202, 0xe42e,
+ 0xe41e, 0x0f35, 0xe41e, 0x0518, 0xca94, 0xcc90, 0x34a2, 0x3ca1,
+ 0xe128, 0xe190, 0xa200, 0x3cad, 0xe42e, 0x28a8, 0xe428, 0xa200,
+ 0x3cac, 0x28a6, 0xf04a, 0x28a7, 0x18ad, 0x3ca7, 0x28a3, 0x44a4,
+ 0xf048, 0xd149, 0x0000, 0xf03e, 0xd149, 0x0080, 0xd14a, 0x0000,
+ 0xd14c, 0x0001, 0xca9c, 0xe418, 0x055b, 0xca9a, 0xf7c8, 0xca9c,
+ 0xf7a8, 0xca9e, 0x3ca0, 0xcc92, 0xca94, 0x00a2, 0x0ca1, 0x34a2,
+ 0x3ca1, 0xcc90, 0x28a6, 0xf09a, 0xca94, 0x18ac, 0x2aa7, 0xe045,
+ 0x3ea7, 0xf031, 0xa202, 0x3ca8, 0xe42e, 0x28a6, 0x44a8, 0xf04a,
+ 0xa202, 0x3c3a, 0xe42e, 0x2aa6, 0xf05b, 0x28a7, 0xa106, 0x18ad,
+ 0xf036, 0xa200, 0xe42e, 0xa202, 0x3c3a, 0x3ca8, 0xe42e, 0x28a6,
+ 0x44a8, 0xf04a, 0xa202, 0x3c3a, 0xe42e, 0x2aa6, 0xf05b, 0x28a7,
+ 0xa108, 0x18ad, 0xf036, 0xa200, 0xe42e, 0xa202, 0x3c3a, 0x3ca8,
+ 0xe42e, 0x28a8, 0xe428, 0x28a6, 0xf09a, 0x28a7, 0x18ad, 0x3ca7,
+ 0xa201, 0x3ead, 0xf032, 0xa202, 0x3ca8, 0xe42e, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xe40a, 0x1018, 0xae0a, 0xe0c1, 0x0060, 0xaf0d,
+ 0xa80f, 0xe056, 0xe0c1, 0x0044, 0xa811, 0xe056, 0xae0c, 0xe0c1,
+ 0x0044, 0xa80f, 0xe056, 0xe167, 0x0ba7, 0x2f17, 0xe056, 0xe0c2,
+ 0x0282, 0xe0c0, 0x006e, 0xe0c2, 0x0284, 0xaf20, 0xe0c1, 0x0282,
+ 0xa809, 0xf04b, 0xe049, 0xae1f, 0xf06e, 0xe049, 0xa011, 0xaf09,
+ 0xae07, 0xae21, 0xe056, 0xe0c2, 0x028c, 0xe167, 0x0ba8, 0x2d17,
+ 0x4917, 0xe0c2, 0x0285, 0xe167, 0x0baa, 0x2d17, 0x4917, 0xe0c2,
+ 0x0286, 0xe41e, 0x1019, 0xe0c0, 0x004a, 0xe0c2, 0x0289, 0xe0c0,
+ 0x004b, 0xe0c2, 0x028a, 0xe0c0, 0x0055, 0xe0c2, 0x028b, 0xe0c1,
+ 0x0041, 0xe004, 0x009f, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17,
+ 0xf05b, 0xe167, 0x0ba0, 0x2d17, 0x4917, 0xe0c2, 0x0287, 0xe0c1,
+ 0x0041, 0xe004, 0x00b7, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17,
+ 0xf05b, 0xe167, 0x0ba2, 0x2d17, 0x4917, 0xe0c2, 0x0288, 0xe0c1,
+ 0x0041, 0xe004, 0x00bf, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17,
+ 0xf05b, 0xe167, 0x0ba4, 0x2d17, 0x4917, 0xe0c2, 0x028d, 0xe0c0,
+ 0x0065, 0xaf18, 0xa802, 0xe0c2, 0x0280, 0xa210, 0xe0c2, 0x0168,
+ 0xe42e, 0xe167, 0x0bac, 0xe165, 0x028e, 0xe166, 0x02c0, 0xd022,
+ 0x0008, 0xe184, 0x102c, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0x2517,
+ 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02d2, 0xd022,
+ 0x0008, 0xe184, 0x1038, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb,
+ 0xe190, 0xe166, 0x02db, 0xd022, 0x0008, 0xe184, 0x1044, 0x2517,
+ 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02e4, 0xd022,
+ 0x0008, 0xe184, 0x104f, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190,
+ 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x0d6d, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0143, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x0a2b, 0xe40e, 0x0a22, 0xe41e,
+ 0x0966, 0xe40e, 0x007e, 0xe41e, 0x0998, 0xe40e, 0x007e, 0xe41e,
+ 0x09a2, 0xe40e, 0x007e, 0xe41e, 0x0999, 0xe40e, 0x007e, 0xa202,
+ 0xcf22, 0xa202, 0xe42e, 0xa204, 0xcf22, 0xa202, 0xe42e, 0xe008,
+ 0x00ff, 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22, 0xaf18, 0xa802,
+ 0xe42e, 0xe004, 0x0080, 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22,
+ 0xaf18, 0xa802, 0xe42e, 0xa102, 0xcc44, 0xa201, 0xe184, 0x0172,
+ 0xe004, 0x0080, 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22, 0xaf18,
+ 0xa802, 0xae03, 0xe055, 0xe04a, 0xe42e, 0xd022, 0x0006, 0xa201,
+ 0xe184, 0x0184, 0xe004, 0x0080, 0xae08, 0xa908, 0xcf22, 0xe190,
+ 0xcb22, 0xaf18, 0xa802, 0xae03, 0xe055, 0xe04a, 0xae02, 0xb634,
+ 0xe42e, 0xd022, 0x0007, 0xa201, 0xe184, 0x0198, 0xe004, 0x0080,
+ 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22, 0xaf18, 0xa802, 0xae03,
+ 0xe055, 0xe04a, 0xe42e, 0xe004, 0x0080, 0xae08, 0xa908, 0xcf22,
+ 0xe190, 0xcb22, 0xaf18, 0xa802, 0xe42e, 0xe004, 0x00f0, 0xa908,
+ 0xcf02, 0xe42e, 0xd130, 0x0007, 0xa203, 0xae03, 0x2822, 0xe016,
+ 0xe055, 0xae03, 0x2829, 0xe055, 0xae03, 0x2828, 0xe055, 0xae03,
+ 0x283b, 0xe055, 0xae11, 0x2814, 0xe055, 0xae11, 0x2815, 0xe055,
+ 0xcf01, 0xa200, 0x3c92, 0x2a22, 0xe017, 0x2829, 0x4428, 0xe056,
+ 0x3092, 0xe166, 0x0102, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d06,
+ 0xae10, 0x4c3f, 0xcf24, 0xe41e, 0x033e, 0x2880, 0xf08a, 0x2822,
+ 0xf048, 0xe41e, 0x0310, 0xf03e, 0xe41e, 0x0321, 0x2822, 0xe42a,
+ 0xe166, 0x0106, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xcf30, 0xe166, 0x0109, 0x290e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xcf32, 0x283e, 0xae10, 0x4c3d, 0xae10, 0x4c3c, 0xcf34,
+ 0xe166, 0x010a, 0x2916, 0x2b16, 0xae21, 0xe056, 0xe166, 0x011d,
+ 0x2b16, 0xae11, 0xe056, 0x2b16, 0xae31, 0xe056, 0xcf26, 0xe166,
+ 0x010f, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10, 0x4d06,
+ 0xcf28, 0xe166, 0x0112, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d06,
+ 0xcf2a, 0xe166, 0x0122, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e,
+ 0xae10, 0x4d06, 0xcf2c, 0xe166, 0x0125, 0x290e, 0xae10, 0x4d0e,
+ 0xae10, 0x4d06, 0xcf2e, 0xe166, 0x0127, 0x290e, 0xae10, 0x4d06,
+ 0xae10, 0xe166, 0x0114, 0x4d0e, 0xae10, 0x4d06, 0xcf36, 0xe166,
+ 0x0118, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10, 0x4d06,
+ 0xe005, 0x00f8, 0xe00b, 0x8000, 0xcf3b, 0xcf3c, 0xe190, 0xe166,
+ 0x011c, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10, 0x4d06,
+ 0xe005, 0x00f8, 0xe00b, 0x8001, 0xcf3b, 0xcf3c, 0xe190, 0xe166,
+ 0x012b, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10, 0x4d06,
+ 0xe005, 0x00fc, 0xe00b, 0x8000, 0xcf3b, 0xcf3c, 0xe190, 0xe166,
+ 0x012f, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10, 0x4d06,
+ 0xe005, 0x00fc, 0xe00b, 0x8001, 0xcf3b, 0xcf3c, 0xe190, 0xe42e,
+ 0xa201, 0x282f, 0xe055, 0xae11, 0x2832, 0xe055, 0xae0d, 0x2891,
+ 0xe055, 0xae07, 0x282e, 0xe055, 0xae0d, 0x282d, 0xe055, 0xae03,
+ 0x282b, 0xe055, 0xcfa1, 0xa201, 0xe166, 0x0580, 0x2916, 0xe008,
+ 0x00ff, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae10, 0xe055, 0x2916,
+ 0xe008, 0x00ff, 0xae20, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae30,
+ 0xe055, 0xcfa3, 0xa201, 0xe166, 0x0584, 0x2916, 0xe008, 0x00ff,
+ 0xe055, 0x2916, 0xe008, 0x00ff, 0xae10, 0xe055, 0x2916, 0xe008,
+ 0x00ff, 0xae20, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae30, 0xe055,
+ 0xcfa5, 0xa201, 0xe166, 0x058c, 0x2916, 0xe008, 0x00ff, 0xe055,
+ 0x2916, 0xe008, 0x00ff, 0xae10, 0xe055, 0x2916, 0xe008, 0x00ff,
+ 0xae20, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae30, 0xe055, 0xcfa7,
+ 0xa201, 0xe166, 0x0588, 0x2916, 0xe008, 0x00ff, 0xe055, 0x2916,
+ 0xe008, 0x00ff, 0xae10, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae20,
+ 0xe055, 0x2916, 0xe008, 0x00ff, 0xae30, 0xe055, 0xcfa9, 0xe005,
+ 0x0080, 0xae21, 0xe00b, 0x0100, 0xcfab, 0xe005, 0x011f, 0xae21,
+ 0xe004, 0x013f, 0xe055, 0xcfad, 0xe005, 0x009f, 0xae21, 0xe004,
+ 0x00bf, 0xe055, 0xcfb7, 0xa200, 0xcfb0, 0xe41e, 0x0337, 0xe42e,
+ 0x2885, 0xae10, 0x4c86, 0xcf06, 0xe42e, 0xa200, 0x4c82, 0xae02,
+ 0x4c84, 0xae02, 0x4c81, 0xae02, 0x4c83, 0xae08, 0x3c96, 0xe42e,
+ 0xe004, 0x001f, 0xae20, 0xe00a, 0x0000, 0xcf40, 0xe004, 0x0100,
+ 0xcf42, 0xe005, 0x011f, 0xae21, 0xe004, 0x013f, 0xe055, 0xcf45,
+ 0xe42e, 0xe004, 0x00ff, 0xae20, 0xe00a, 0x0000, 0xcf60, 0xe004,
+ 0x0100, 0xcf62, 0xe005, 0x011f, 0xae21, 0xe004, 0x013f, 0xe055,
+ 0xcf65, 0x2838, 0xae02, 0x4c37, 0xae04, 0xcf68, 0xe42e, 0xe004,
+ 0x001f, 0xae20, 0xe00a, 0x0000, 0xcfc0, 0xe42e, 0xe004, 0x0080,
+ 0x3c00, 0xe166, 0x0130, 0xe160, 0x0002, 0x2800, 0xae10, 0x4d16,
+ 0xcf38, 0x2a00, 0xae07, 0xd022, 0x0004, 0xe184, 0x0356, 0xe04a,
+ 0xae10, 0x8116, 0x4d0e, 0xae10, 0x4d36, 0xcf3e, 0xa003, 0xa203,
+ 0x2800, 0xa806, 0xa104, 0xb655, 0x2800, 0xe042, 0x3c00, 0xaf10,
+ 0xf028, 0xf64e, 0xe42e, 0xa2fe, 0x3c42, 0x3c43, 0x3c44, 0x3c45,
+ 0x3c4a, 0xa200, 0x3c46, 0x3c47, 0x3c4b, 0x3c4c, 0x3c49, 0x3c48,
+ 0xe0c0, 0x0061, 0x3c40, 0xe0c0, 0x0060, 0x3c41, 0xe41e, 0x0a0e,
+ 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0620, 0xd112, 0x00c0, 0xd113,
+ 0x0003, 0xe41e, 0x0a0e, 0xa202, 0xe42e, 0xa2fc, 0x3c42, 0xe0c0,
+ 0x0054, 0x3c47, 0x3446, 0xa202, 0xe42e, 0x2843, 0x3c42, 0x2842,
+ 0xa002, 0x2a41, 0xe045, 0xb616, 0x3c42, 0x2a43, 0xe045, 0xf099,
+ 0xa2fe, 0xe0c2, 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0xa200, 0xe42e,
+ 0x2a44, 0xe045, 0xf6db, 0x2a45, 0xe045, 0xf6ab, 0x2446, 0x4c47,
+ 0x5c42, 0xa802, 0xf658, 0xa202, 0xe42e, 0x2843, 0x3c42, 0x2842,
+ 0xa002, 0x2a41, 0xe045, 0xb616, 0x3c42, 0x2a43, 0xe045, 0xf059,
+ 0xa2fe, 0x3c42, 0xa200, 0xe42e, 0x2a44, 0xe045, 0xf71b, 0x2a45,
+ 0xe045, 0xf6eb, 0x2446, 0x4c47, 0x5c42, 0xa802, 0xf698, 0x2824,
+ 0xf08a, 0xa202, 0x5842, 0x2646, 0x4e47, 0xe056, 0x3c47, 0x3446,
+ 0xa202, 0xe42e, 0xa200, 0x3ca8, 0x3ca9, 0x2a43, 0x283a, 0xf028,
+ 0x2a42, 0x3ea9, 0x2836, 0xf0fa, 0xa102, 0xf048, 0x28a9, 0x3c45,
+ 0xf0ae, 0xa102, 0xf048, 0x2844, 0x3c45, 0xf05e, 0xa2fe, 0x3ca8,
+ 0xa200, 0x3c45, 0x2835, 0xf0fa, 0xa102, 0xf048, 0x28a9, 0x3c44,
+ 0xf0ae, 0xa102, 0xf048, 0x2845, 0x3c44, 0xf05e, 0xa2fe, 0x3ca8,
+ 0xa200, 0x3c44, 0x2833, 0xf03a, 0x2842, 0x3c44, 0x2834, 0xf03a,
+ 0x2842, 0x3c45, 0x283a, 0xf048, 0x2842, 0x3c4a, 0xf04e, 0x2842,
+ 0x3c43, 0x3c4a, 0x2448, 0x4c49, 0xa002, 0x3c49, 0x3448, 0xa200,
+ 0x2a43, 0xf045, 0xa203, 0x5a43, 0xe056, 0x2a44, 0xf045, 0xa203,
+ 0x5a44, 0xe056, 0x2a45, 0xf045, 0xa203, 0x5a45, 0xe056, 0x2a42,
+ 0xf045, 0xa203, 0x5a42, 0xe056, 0x344b, 0x3c4c, 0x28a8, 0xf038,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x029c,
+ 0xae11, 0xe042, 0xe41e, 0x0493, 0x3452, 0x3c53, 0xe000, 0x08a0,
+ 0xe41e, 0x0493, 0x3459, 0x3c5a, 0xe000, 0x0ac0, 0xe0c0, 0x0041,
+ 0xe005, 0x002c, 0xae15, 0xe042, 0xe41e, 0x0493, 0x345c, 0x3c5d,
+ 0xe42e, 0xe167, 0x05b5, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184,
+ 0x0453, 0x9e16, 0x3517, 0x3d17, 0xe0c0, 0x006c, 0xf098, 0xe0c0,
+ 0x0041, 0xe005, 0x0034, 0xae15, 0xe042, 0xe41e, 0x0493, 0x3454,
+ 0x3c55, 0xe0c0, 0x0069, 0xe167, 0x0ba0, 0x3d17, 0x3517, 0xe0c0,
+ 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b, 0x3d17, 0x3517, 0xe0c0,
+ 0x0042, 0xe000, 0x1000, 0xce20, 0xd111, 0x0ba8, 0xd112, 0x004c,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0050, 0xe049,
+ 0xe008, 0x000f, 0x3c51, 0xaf11, 0xe009, 0x000f, 0x3e50, 0x4651,
+ 0x3e51, 0xe0c0, 0x0050, 0xaf1c, 0xa802, 0xe005, 0x0ba6, 0xe09f,
+ 0x3d17, 0xa202, 0xe42e, 0xa00e, 0xaf06, 0xae06, 0xe42e, 0xe41e,
+ 0x04a7, 0xe40a, 0x04a5, 0xe41e, 0x04cf, 0xe40a, 0x04a5, 0xe41e,
+ 0x0502, 0xe40a, 0x04a5, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xba4e,
+ 0xa188, 0xf198, 0xba4e, 0xa196, 0xf168, 0xba4e, 0xa192, 0xf138,
+ 0xba4e, 0xa18c, 0xf108, 0xba5e, 0xba5e, 0xba7e, 0xba5e, 0xba5e,
+ 0xe41e, 0x04c4, 0x3c1a, 0xe41e, 0x04c4, 0x3c19, 0xba7e, 0xba7e,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xba4e, 0xba4f, 0xae11, 0xe056,
+ 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056, 0xe42e, 0xba4e,
+ 0x3c00, 0xba4e, 0x3c01, 0xba4e, 0x3c02, 0xba4e, 0x3c03, 0x2803,
+ 0xae10, 0x4c02, 0xae10, 0x4c01, 0xae10, 0x4c00, 0x3420, 0x3c21,
+ 0xd022, 0x0007, 0xe184, 0x04e5, 0xba4e, 0xe190, 0xe190, 0xa200,
+ 0xcc72, 0x3c79, 0xa202, 0xe42e, 0xe41e, 0x04cf, 0xf09a, 0xe41e,
+ 0x0502, 0xf06a, 0xe41e, 0x0706, 0xf03a, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xa202, 0x3c80, 0xe41e, 0x05b9, 0xf03a, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0xa200, 0x3c94, 0xba4e, 0xba4f, 0xae11, 0xe056,
+ 0xba4f, 0xae21, 0xe055, 0xe04a, 0xa802, 0x3c22, 0xe04a, 0xaf02,
+ 0xa80e, 0x3c23, 0xe04a, 0xaf08, 0xa802, 0x3c24, 0xe04a, 0xaf0a,
+ 0x3425, 0x3c26, 0x2879, 0xa006, 0x3c79, 0xe41e, 0x06e2, 0x2822,
+ 0xf3d8, 0x2810, 0x3ca4, 0x2811, 0x3ca5, 0xba4e, 0xe005, 0x009d,
+ 0xe046, 0xe408, 0x056c, 0xba4e, 0xe005, 0x0001, 0xe046, 0xe408,
+ 0x056c, 0xba4e, 0xe005, 0x002a, 0xe046, 0xe408, 0x056c, 0xba4e,
+ 0xe049, 0xba4e, 0xae10, 0xe055, 0xe04a, 0xe008, 0x3fff, 0x3c10,
+ 0xe04a, 0xaf1c, 0xa806, 0x3c12, 0xba4e, 0xe049, 0xba4e, 0xae10,
+ 0xe055, 0xe04a, 0xe008, 0x3fff, 0x3c11, 0xe04a, 0xaf1c, 0xa806,
+ 0x3c13, 0x2879, 0xa00e, 0x3c79, 0x2810, 0x18a4, 0xf07a, 0xf04e,
+ 0x2811, 0x18a5, 0xf03a, 0xa202, 0x3c94, 0x2810, 0xa01e, 0xaf08,
+ 0x3c14, 0x2811, 0xa01e, 0xaf08, 0x3c15, 0xcca4, 0x8214, 0xe018,
+ 0x3c16, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0x2812, 0x4c13,
+ 0xf068, 0x2810, 0x3c17, 0x2811, 0x3c18, 0xe42e, 0xa202, 0x2a12,
+ 0xa103, 0xb6b6, 0xa103, 0xb6b6, 0xa103, 0xb656, 0x3c00, 0xa202,
+ 0x2a12, 0xa103, 0xb696, 0xa103, 0xb676, 0xa103, 0xb636, 0x3c01,
+ 0xa202, 0x2a13, 0xa103, 0xb6b6, 0xa103, 0xb6b6, 0xa103, 0xb656,
+ 0x3c02, 0xa202, 0x2a13, 0xa103, 0xb696, 0xa103, 0xb676, 0xa103,
+ 0xb636, 0x3c03, 0x2810, 0xcca4, 0x8200, 0xe018, 0xc70f, 0x7c01,
+ 0xe190, 0x3c17, 0x2811, 0xcca4, 0x8202, 0xe018, 0xc70f, 0x7c03,
+ 0xe190, 0x3c18, 0xe42e, 0x2817, 0xa01e, 0xaf08, 0x1814, 0x2a18,
+ 0xa01f, 0xaf09, 0x1a15, 0xf044, 0xf035, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe41e, 0x0147, 0x2822, 0xf068, 0xe41e, 0x0159, 0x3c27,
+ 0xe41e, 0x0159, 0xe41e, 0x0159, 0x3c28, 0xf2fa, 0xe41e, 0x0159,
+ 0x3c29, 0xe41e, 0x0159, 0x3c2a, 0xf1ca, 0xe41e, 0x0159, 0x3c2b,
+ 0xe166, 0x0580, 0xa20e, 0x3ca6, 0xe41e, 0x072f, 0xe41e, 0x072f,
+ 0xe41e, 0x072f, 0xe41e, 0x072f, 0xe166, 0x0584, 0xa20c, 0x3ca6,
+ 0xe41e, 0x072f, 0xe41e, 0x072f, 0xe41e, 0x072f, 0xe41e, 0x072f,
+ 0x2829, 0xf0ba, 0xe166, 0x0100, 0xa210, 0x3ca6, 0xe41e, 0x0740,
+ 0xe41e, 0x0740, 0xe41e, 0x0740, 0xe41e, 0x0159, 0x3c2c, 0xa20c,
+ 0xe41e, 0x0163, 0x3c2d, 0xa206, 0xe41e, 0x0163, 0x3c2e, 0xa200,
+ 0x3c30, 0xe41e, 0x0159, 0x3c2f, 0xf1da, 0xe41e, 0x0159, 0x3c30,
+ 0xf19a, 0xe166, 0x0588, 0xa20c, 0x3ca6, 0xe41e, 0x074c, 0xe41e,
+ 0x074c, 0xe41e, 0x074c, 0xe41e, 0x074c, 0xe166, 0x058c, 0xa20c,
+ 0x3ca6, 0xe41e, 0x074c, 0xe41e, 0x074c, 0xe41e, 0x074c, 0xe41e,
+ 0x074c, 0xa204, 0xe41e, 0x0163, 0x3c31, 0xa202, 0x5831, 0x3c31,
+ 0xe406, 0x06e0, 0xa110, 0xe400, 0x06e0, 0xa20e, 0xe41e, 0x0163,
+ 0x3c32, 0xe166, 0x05b0, 0xa208, 0x3ca6, 0xe41e, 0x075c, 0xe41e,
+ 0x075c, 0xe41e, 0x075c, 0xe41e, 0x075c, 0xe41e, 0x075c, 0x2822,
+ 0xf1da, 0xe41e, 0x0159, 0x3c33, 0xe41e, 0x0159, 0x3c34, 0xa200,
+ 0x3c35, 0x2833, 0xf058, 0xa204, 0xe41e, 0x0163, 0x3c35, 0xa200,
+ 0x3c36, 0x2834, 0xf058, 0xa204, 0xe41e, 0x0163, 0x3c36, 0xe41e,
+ 0x0159, 0x3c37, 0xe41e, 0x0159, 0x3c38, 0xe41e, 0x0159, 0x3c39,
+ 0xf058, 0xe004, 0x0002, 0xe41e, 0x0c4a, 0x2822, 0xf048, 0xa202,
+ 0x3c3a, 0xf04e, 0xe41e, 0x0159, 0x3c3a, 0xe167, 0x0130, 0xa200,
+ 0x3c00, 0x2800, 0xa108, 0xf1ba, 0x2800, 0xe41e, 0x0c59, 0xe165,
+ 0x0900, 0xe004, 0x0108, 0x3c01, 0x2915, 0xe41e, 0x014f, 0x2b07,
+ 0xf04a, 0xe41e, 0x0189, 0xe049, 0x3f17, 0x2801, 0xa102, 0x3c01,
+ 0xf748, 0xe190, 0x2800, 0xa002, 0x3c00, 0xf64e, 0xa200, 0x3c3f,
+ 0xe41e, 0x0159, 0x3c3b, 0xf04a, 0xe41e, 0x0189, 0x3c3f, 0x2822,
+ 0xe40a, 0x06de, 0xe41e, 0x0189, 0x3c3c, 0xe41e, 0x0189, 0x3c3d,
+ 0xe41e, 0x0189, 0x3c3e, 0xe166, 0x0103, 0xe41e, 0x0159, 0xf0da,
+ 0xe41e, 0x0189, 0x3d16, 0xe41e, 0x0189, 0x3d16, 0xe41e, 0x0189,
+ 0x3d16, 0xe41e, 0x0189, 0x3d16, 0xe166, 0x0107, 0xe41e, 0x0159,
+ 0xf0aa, 0xe41e, 0x0189, 0x3d16, 0xe41e, 0x0189, 0x3d16, 0xe41e,
+ 0x0189, 0x3d16, 0xe41e, 0x0c75, 0xe165, 0x0550, 0xe166, 0x010a,
+ 0xa200, 0x3c00, 0xa126, 0xf08a, 0x2915, 0xe41e, 0x076c, 0x2800,
+ 0xa002, 0x3c00, 0xf78e, 0xa200, 0x3c00, 0xa126, 0xf08a, 0x2915,
+ 0xe41e, 0x076c, 0x2800, 0xa002, 0x3c00, 0xf78e, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0x2823, 0xf078, 0xa201, 0x3e8e, 0x3e8f, 0x3e90,
+ 0x3e91, 0xf1ce, 0xa102, 0xf088, 0xa201, 0x3e8e, 0x3e91, 0xa203,
+ 0x3e8f, 0x3e90, 0xf13e, 0xa102, 0xf088, 0xa201, 0x3e8f, 0x3e91,
+ 0xa203, 0x3e8e, 0x3e90, 0xf0ae, 0xa102, 0xf078, 0xa203, 0x3e8e,
+ 0x3e8f, 0x3e90, 0x3e91, 0xf02e, 0xf60e, 0xe42e, 0x2822, 0xf228,
+ 0xe41e, 0x0c32, 0xa200, 0x3c2b, 0xe166, 0x0580, 0xd022, 0x0007,
+ 0xe184, 0x0713, 0x3d16, 0xe190, 0xe190, 0xa200, 0xe166, 0x0588,
+ 0xd022, 0x0007, 0xe184, 0x071d, 0x3d16, 0xe190, 0xe190, 0xa202,
+ 0x3c33, 0x3c34, 0xa200, 0x3c35, 0x3c36, 0xa200, 0x3c37, 0x3c38,
+ 0xf05e, 0xa203, 0x2890, 0xb611, 0x3e8c, 0xa202, 0xe42e, 0xe41e,
+ 0x0159, 0xf0ca, 0x28a6, 0xe41e, 0x0163, 0x3d06, 0xe41e, 0x0159,
+ 0x2b06, 0xf02a, 0xe013, 0x3f16, 0xf03e, 0xa200, 0x3d16, 0xe42e,
+ 0xe41e, 0x0159, 0xf06a, 0x28a6, 0xe41e, 0x0163, 0x3d16, 0xf04e,
+ 0xe004, 0x00ff, 0x3d16, 0xe42e, 0xe41e, 0x0159, 0xf0ca, 0x28a6,
+ 0xe41e, 0x0163, 0x3d06, 0xe41e, 0x0159, 0x2b06, 0xf02a, 0xe013,
+ 0x3f16, 0xf02e, 0x8116, 0xe42e, 0xe41e, 0x0159, 0xf0ca, 0x28a6,
+ 0xe41e, 0x0163, 0x3d06, 0xe41e, 0x0159, 0x2b06, 0xf02a, 0xe013,
+ 0x3f16, 0xf02e, 0x3d16, 0xe42e, 0xe41e, 0x014f, 0x2b06, 0xf04a,
+ 0xe41e, 0x0175, 0xe049, 0x3f16, 0xe42e, 0xa200, 0x3cb9, 0xa2fe,
+ 0x3cba, 0xa202, 0x3c80, 0x2822, 0x3c81, 0xe016, 0x3c83, 0xa200,
+ 0x3c82, 0x3c84, 0xe41e, 0x0305, 0xe41e, 0x01aa, 0xe41e, 0x0fed,
+ 0xe41e, 0x01a5, 0xe41e, 0x0fe3, 0x2861, 0x4c62, 0xf03a, 0xe41e,
+ 0x0bd5, 0xe41e, 0x07d5, 0xe41e, 0x0888, 0xe166, 0x0590, 0x2831,
+ 0xa102, 0xf0fa, 0xa102, 0xcc44, 0xe184, 0x07a7, 0xba4e, 0xe049,
+ 0xba4e, 0xae10, 0xe055, 0xba4e, 0xae20, 0xe055, 0x3716, 0x3f16,
+ 0xe190, 0xa200, 0x3c80, 0x3c83, 0x3c81, 0xa202, 0x3c82, 0x3c84,
+ 0xe41e, 0x0305, 0xe41e, 0x0278, 0x2831, 0xf15a, 0xa102, 0xf098,
+ 0xe41e, 0x08ac, 0xe41e, 0x01a5, 0xe41e, 0x07f9, 0xa202, 0xe42e,
+ 0xe41e, 0x08c4, 0xe41e, 0x08ac, 0xe41e, 0x01a5, 0xe41e, 0x0800,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0x2822, 0xe016, 0x4c33, 0x4c34,
+ 0xf03a, 0x2832, 0x3c8d, 0xa202, 0xe42e, 0xa2fe, 0x3c87, 0xa200,
+ 0x3c86, 0x3cbb, 0xe16a, 0xa200, 0x3c85, 0x2a87, 0xa003, 0x3e87,
+ 0xe41e, 0x0aa7, 0xf0fd, 0x2885, 0xa002, 0x3c85, 0x1814, 0xf764,
+ 0x2886, 0xa002, 0x3c86, 0x1815, 0xf6f4, 0xe41e, 0x0ad4, 0xa202,
+ 0xe42e, 0x2887, 0x3cba, 0x2a16, 0xe045, 0x3ebb, 0xe16a, 0xa200,
+ 0xe42e, 0xe41e, 0x0147, 0xe41e, 0x084d, 0xe41a, 0x0870, 0xe42e,
+ 0xa2fe, 0x3c87, 0xa200, 0x3c86, 0x3c85, 0x3c9e, 0xe16a, 0x2886,
+ 0x2a31, 0xa103, 0xe052, 0x3c9e, 0x2886, 0x1831, 0xf072, 0x2886,
+ 0xe418, 0x0dfb, 0xe41e, 0x0147, 0xf09e, 0xe41e, 0x0e2e, 0xe41e,
+ 0x014b, 0xe004, 0x0011, 0xe41e, 0x0e41, 0xe41e, 0x0834, 0xf10d,
+ 0xe41e, 0x0e1d, 0xe004, 0x0010, 0xe41e, 0x0e41, 0x2886, 0xa002,
+ 0x3c86, 0x1815, 0xf5d4, 0xe41e, 0x0ad4, 0xa202, 0xe42e, 0xe41e,
+ 0x0870, 0xe16a, 0xa200, 0xe42e, 0x2880, 0xf158, 0xa200, 0x3c85,
+ 0x28ba, 0x2a87, 0xa003, 0x3e87, 0xf044, 0x2887, 0x18ba, 0xf0b2,
+ 0xe41e, 0x0aa7, 0xf08d, 0x2885, 0xa002, 0x3c85, 0x1814, 0xf714,
+ 0xa202, 0xe42e, 0xe16b, 0xa200, 0xe42e, 0xa2fe, 0x3c87, 0xa200,
+ 0x3c86, 0xe16a, 0xa200, 0x3c85, 0x28ba, 0x2a87, 0xa003, 0x3e87,
+ 0xf044, 0x2887, 0x18ba, 0xf122, 0xe41e, 0x0aa7, 0xf0fd, 0x2885,
+ 0xa002, 0x3c85, 0x1814, 0xf714, 0x2886, 0xa002, 0x3c86, 0x1815,
+ 0xf6a4, 0xe41e, 0x0ad4, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xe16a, 0xe41e, 0x0ae9, 0xf12d, 0x2885, 0xa002, 0x3c85, 0x1814,
+ 0x2a87, 0xa003, 0x3e87, 0xf764, 0xa200, 0x3c85, 0x2886, 0xa002,
+ 0x3c86, 0x1815, 0xf6f4, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xa200, 0x2625, 0x4e26, 0xe042, 0x2e79, 0xe042, 0xae06, 0xc873,
+ 0xe045, 0xf191, 0xc873, 0xe046, 0xe049, 0xf13a, 0xaf0a, 0xa102,
+ 0xf0b4, 0xcc44, 0xe184, 0x08a1, 0xba4e, 0xba4e, 0xe190, 0xba4e,
+ 0xba4e, 0xe190, 0xe190, 0xe04a, 0xa83e, 0xf03a, 0xe09c, 0x9206,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0x2625, 0x4e26, 0xe042,
+ 0x2e79, 0xe042, 0x2a31, 0xa103, 0xf0e5, 0xf04b, 0xcca5, 0xc783,
+ 0xe01c, 0xae06, 0xc873, 0xe045, 0xf061, 0xc873, 0xe046, 0xe40e,
+ 0x0894, 0xe190, 0xa200, 0xe42e, 0xe166, 0x0590, 0xe167, 0x05a0,
+ 0xa200, 0x2625, 0x4e26, 0xe042, 0x2e79, 0xe042, 0x2a31, 0xa111,
+ 0xf151, 0x2a31, 0xa103, 0xf127, 0xcca5, 0xc783, 0xe01c, 0x3517,
+ 0x3d17, 0x2a31, 0xa103, 0xa103, 0xcc45, 0xe184, 0x08e3, 0x2716,
+ 0x4f16, 0xe042, 0x3517, 0x3d17, 0xe190, 0xa202, 0xe42e, 0xa200,
+ 0xe0c2, 0x0074, 0xe0c2, 0x0076, 0xe0c2, 0x0077, 0x2819, 0xa102,
+ 0xb608, 0xae20, 0x4c1a, 0xe0c2, 0x0072, 0xa2fe, 0xe0c2, 0x006c,
+ 0xa20a, 0xe0c2, 0x0073, 0x2010, 0x4c11, 0xe0c2, 0x0071, 0x2823,
+ 0xe0c2, 0x007b, 0xe41e, 0x095e, 0xe0c2, 0x0075, 0x2895, 0xe0c2,
+ 0x0070, 0xa202, 0xe42e, 0xa200, 0xe0c2, 0x0075, 0xe0c2, 0x0078,
+ 0xe0c2, 0x0079, 0xe0c2, 0x0072, 0x2842, 0x2a70, 0xb7d2, 0xe0c2,
+ 0x0077, 0x2842, 0xe049, 0xa003, 0xb7b6, 0x2a24, 0xb7b6, 0x2a70,
+ 0xb7f2, 0x2a61, 0x4e62, 0x4670, 0xb7f2, 0xe0c2, 0x0071, 0x2446,
+ 0x4c47, 0xe0c2, 0x0054, 0x2014, 0x4c15, 0xae08, 0xe0c2, 0x006f,
+ 0x2448, 0x4c49, 0xe0c2, 0x0070, 0x28bb, 0xe0c2, 0x0072, 0x2822,
+ 0xa802, 0xe0c2, 0x0073, 0xe41e, 0x095e, 0xe0c2, 0x007c, 0xa200,
+ 0x2a44, 0xe009, 0x00ff, 0xe056, 0xae10, 0x2a45, 0xe009, 0x00ff,
+ 0xe056, 0xae10, 0x2a43, 0xe009, 0x00ff, 0xe056, 0xae0e, 0x4c23,
+ 0xae02, 0x4c24, 0xe0c2, 0x007a, 0x2888, 0xae02, 0x2a42, 0xb626,
+ 0x2a70, 0xb632, 0xe0c2, 0x0076, 0xa202, 0xe42e, 0x2812, 0xae04,
+ 0x4c13, 0xae1c, 0x4c10, 0xae1c, 0x4c11, 0xe42e, 0x22f0, 0x4ef1,
+ 0xa200, 0xc401, 0xe188, 0x07ff, 0x3d11, 0x36f0, 0x3ef1, 0xcc4a,
+ 0xcc4c, 0xd130, 0x0007, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008,
+ 0x0000, 0xd03a, 0x0000, 0xe41e, 0x0a11, 0xe41e, 0x042c, 0xe41e,
+ 0x0d39, 0xa100, 0xf0fa, 0xe41e, 0x0497, 0xa100, 0xf0ba, 0xe41e,
+ 0x056e, 0x2822, 0xf078, 0xa202, 0x3c95, 0xe41e, 0x0d39, 0xe41e,
+ 0x04a7, 0xe41e, 0x08e7, 0xe41e, 0x0ea1, 0xe41e, 0x0fc8, 0xe42e,
+ 0xe42e, 0xd130, 0x0007, 0xe41e, 0x0363, 0xe41e, 0x0449, 0xe41e,
+ 0x0b8e, 0xe42e, 0xa200, 0xcc44, 0xcc4a, 0xcc4c, 0x3c20, 0x3c21,
+ 0x3c88, 0xd130, 0x0007, 0xd008, 0x0000, 0xd03a, 0x0000, 0xe0c0,
+ 0x0065, 0xa808, 0xe01a, 0xe0c1, 0x0065, 0xa831, 0xa111, 0xe017,
+ 0xe056, 0x3c6e, 0xe41e, 0x0385, 0xe41e, 0x038d, 0xe42a, 0x2870,
+ 0xe41a, 0x0d57, 0xe41e, 0x047d, 0xe41e, 0x0c8d, 0xe41e, 0x0fcd,
+ 0xe41e, 0x0b95, 0xe41e, 0x118e, 0xe41e, 0x0dc7, 0x3c70, 0x2870,
+ 0xf298, 0xe41e, 0x0a1e, 0xe41e, 0x04ec, 0xf24a, 0xe41e, 0x0a1e,
+ 0x2870, 0xf208, 0xe41e, 0x05ab, 0xf1da, 0xe41e, 0x0a1e, 0xe41e,
+ 0x04f9, 0xf18a, 0xe41e, 0x0a1e, 0x2839, 0xe418, 0x0a16, 0x286e,
+ 0x4422, 0xf02a, 0xf0fe, 0xf0e8, 0xe41e, 0x0a1e, 0xe41e, 0x03ad,
+ 0xf09a, 0xe41e, 0x0a1e, 0xe41e, 0x0775, 0xe41e, 0x03d2, 0xe41e,
+ 0x0a1a, 0xe41e, 0x07cc, 0xe41e, 0x0ca2, 0xe41e, 0x1083, 0xe41e,
+ 0x0bb2, 0xe41e, 0x090b, 0x2842, 0xa002, 0xe418, 0x0ea7, 0xc84a,
+ 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xe42e, 0xca28, 0xf7f8,
+ 0xe42e, 0xe41e, 0x0c32, 0xe41e, 0x115e, 0xe42e, 0xa204, 0xe41e,
+ 0x0c4a, 0xe42e, 0xa206, 0xe41e, 0x0c4a, 0xe42e, 0x2888, 0xa002,
+ 0x3c88, 0xe42e, 0xa224, 0xe41e, 0x0a57, 0xe41e, 0x0a8c, 0xa204,
+ 0xe41e, 0x0a41, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xa206, 0xe41e, 0x0a41, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe0c0, 0x005b, 0x3cef, 0xa226, 0xe41e, 0x0a57, 0xe41e, 0x0a71,
+ 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0c00, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0x2aef,
+ 0xa80f, 0xa10d, 0xe42b, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0298,
+ 0xae11, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0100, 0x88ed, 0x0113, 0xca28, 0xf7f8,
+ 0xe42e, 0xe161, 0x07e0, 0x8911, 0x0034, 0x8911, 0x0033, 0x8911,
+ 0x0035, 0x8911, 0x0036, 0x8911, 0x0037, 0x8911, 0x0038, 0x2111,
+ 0x4d11, 0xcc60, 0x2111, 0x4d11, 0xcc62, 0x2111, 0x4d11, 0xcc64,
+ 0x2111, 0x4d11, 0xcc72, 0xe42e, 0xe161, 0x07e0, 0x8b11, 0x0034,
+ 0x8b11, 0x0033, 0x8b11, 0x0035, 0x8b11, 0x0036, 0x8b11, 0x0037,
+ 0x8b11, 0x0038, 0xc860, 0x3511, 0x3d11, 0xc862, 0x3511, 0x3d11,
+ 0xc864, 0x3511, 0x3d11, 0xc872, 0x3511, 0x3d11, 0xe42e, 0xcb05,
+ 0xe009, 0x2222, 0x2885, 0xae10, 0x4c86, 0xcf06, 0xf058, 0xe16a,
+ 0xe41e, 0x0afb, 0xf0ae, 0xf03b, 0xe41e, 0x0b0d, 0xcb05, 0xaf21,
+ 0xa803, 0xf03b, 0xe41e, 0x0b50, 0x2896, 0xa908, 0xcf02, 0x2896,
+ 0xa902, 0xcf02, 0x2a80, 0xcb02, 0xa802, 0xf7e8, 0xe429, 0xcb04,
+ 0xaf14, 0xa802, 0xf7da, 0xe41e, 0x108f, 0xe41e, 0x10e5, 0x2a6a,
+ 0x4e6b, 0xe419, 0x0ce1, 0xe42e, 0x2880, 0xcb05, 0xe009, 0x2222,
+ 0xf07a, 0xf03b, 0xe41e, 0x0b0d, 0xe41e, 0x0b36, 0xe42e, 0xcb05,
+ 0xaf21, 0xa803, 0xf03b, 0xe41e, 0x0b50, 0x2892, 0xe418, 0x0b74,
+ 0xe42e, 0x2885, 0xae10, 0x4c86, 0xcf06, 0x2896, 0xa908, 0xcf02,
+ 0x2896, 0xa906, 0xcf02, 0xcb02, 0xa802, 0xf7e8, 0xe41e, 0x108f,
+ 0xe41e, 0x10e5, 0xe42e, 0x2a80, 0xa200, 0x3c56, 0x3c97, 0x3c5b,
+ 0x3c98, 0xf0b9, 0xe41e, 0x0b1c, 0xe41e, 0x0b1c, 0x2892, 0xf058,
+ 0xe41e, 0x0b5a, 0xe41e, 0x0b5a, 0xe42e, 0x3eaa, 0x2880, 0xa845,
+ 0xf05a, 0xf03b, 0xe41e, 0x0b36, 0xe42e, 0x2aaa, 0xe009, 0x0200,
+ 0xf03b, 0xe41e, 0x0b1c, 0xe42e, 0x2054, 0x4c55, 0x2e56, 0xae11,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0x2a97, 0xe004, 0x0100, 0xf03b,
+ 0xe004, 0x0120, 0xce22, 0xd112, 0x0020, 0xd113, 0x0019, 0x2897,
+ 0xaa02, 0x3c97, 0x2c56, 0xa002, 0x3c56, 0xe42e, 0x2054, 0x4c55,
+ 0x2e56, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20, 0x2a97, 0xe004,
+ 0x0100, 0xf03b, 0xe004, 0x0120, 0xce22, 0xd112, 0x0020, 0xd113,
+ 0x0018, 0x2897, 0xaa02, 0x3c97, 0x2c56, 0xa002, 0x3c56, 0xe42e,
+ 0x2880, 0xf088, 0x2892, 0xf04a, 0xe41e, 0x0b74, 0xe42e, 0xe41e,
+ 0x0b5a, 0xe42e, 0x2059, 0x4c5a, 0x2e5b, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0x2a98, 0xe004, 0x0080, 0xf03b, 0xe004, 0x00a0,
+ 0xce22, 0xd112, 0x0020, 0xd113, 0x0019, 0x2898, 0xaa02, 0x3c98,
+ 0x2c5b, 0xa002, 0x3c5b, 0xe42e, 0x2059, 0x4c5a, 0x2e5b, 0xae11,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0x2a98, 0xe004, 0x0080, 0xf03b,
+ 0xe004, 0x00a0, 0xce22, 0xd112, 0x0020, 0xd113, 0x0018, 0x2898,
+ 0xaa02, 0x3c98, 0x2c5b, 0xa002, 0x3c5b, 0xe42e, 0xa2fe, 0x3c63,
+ 0xa200, 0x3c61, 0x3c62, 0xa202, 0xe42e, 0xe0c0, 0x0060, 0xa81e,
+ 0x3c60, 0x2863, 0xf084, 0xe0c0, 0x0060, 0xaf08, 0x3061, 0xaf02,
+ 0x3062, 0xf04e, 0xa200, 0x3c61, 0x3c62, 0xa200, 0x3c67, 0x3c68,
+ 0x2814, 0xe008, 0x007f, 0x3c65, 0x2815, 0xe008, 0x007f, 0x3c66,
+ 0xa202, 0xe42e, 0x2861, 0x4c62, 0xf1ba, 0x2867, 0x4c68, 0xe41e,
+ 0x0bd5, 0x2868, 0x1866, 0xf062, 0xe41e, 0x0c0e, 0xe41e, 0x0c24,
+ 0xf79e, 0xe0c0, 0x014b, 0xf7e8, 0xa204, 0xae1c, 0xe0c2, 0x014d,
+ 0xa202, 0xe0c2, 0x014a, 0xe190, 0xe0c0, 0x014b, 0xf7e8, 0x2824,
+ 0x2a42, 0xb7f5, 0x3e63, 0xa202, 0xe42e, 0x8463, 0xc786, 0xe018,
+ 0xe000, 0x0620, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0143, 0x2117,
+ 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2, 0x0145, 0xe0c0,
+ 0x0061, 0xe0c2, 0x0146, 0xe0c0, 0x0062, 0xe0c2, 0x0147, 0xe0c0,
+ 0x0063, 0xe0c2, 0x0148, 0xa200, 0x3c64, 0xe0c2, 0x0140, 0xe0c2,
+ 0x0149, 0x2840, 0xe0c2, 0x0141, 0xe0c0, 0x0064, 0xe0c2, 0x014c,
+ 0x2865, 0xa102, 0xae20, 0x4c66, 0xa102, 0xe0c2, 0x0142, 0xa200,
+ 0xae08, 0x4c60, 0xe0c2, 0x014e, 0xa202, 0xe42e, 0x2a68, 0x1a66,
+ 0x2867, 0xae0e, 0x4c68, 0xe423, 0xa203, 0xb615, 0x3eab, 0x2a64,
+ 0xae03, 0x4eab, 0xae03, 0xa903, 0xae1d, 0xe056, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe0c2, 0x014d, 0xe42e, 0xa202, 0xe0c2, 0x014a, 0x2a67,
+ 0xa003, 0x3e67, 0x1a65, 0xf065, 0x2a68, 0xa003, 0x3e68, 0xa201,
+ 0x3e67, 0xe42e, 0xa200, 0xe0c1, 0x0040, 0xe042, 0xe005, 0x0036,
+ 0xae17, 0xe042, 0xe005, 0x1500, 0xae03, 0xe042, 0xca29, 0xf7f9,
+ 0xce20, 0xd111, 0x0100, 0xd112, 0x0450, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe42e, 0x3ca0, 0x2052, 0x4c53, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0100, 0xd112, 0x0450, 0x28a0, 0xce26, 0xca28, 0xf7f8,
+ 0xe42e, 0xcca4, 0xe182, 0x0108, 0xe018, 0xae02, 0xe0c1, 0x0040,
+ 0xe042, 0xe005, 0x0036, 0xae17, 0xe042, 0xe005, 0x1950, 0xae03,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0900, 0xd112, 0x0108,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xa200, 0xe0c1, 0x0040,
+ 0xe042, 0xe005, 0x0036, 0xae17, 0xe042, 0xe005, 0x1e50, 0xae03,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0550, 0xd112, 0x0028,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0065, 0xaf0c,
+ 0x306b, 0xaf02, 0x306a, 0xaf02, 0x3069, 0xe0c0, 0x006a, 0x346c,
+ 0x3c6d, 0x2869, 0x4c6a, 0x4c6b, 0xf04a, 0xa206, 0xe41e, 0x0ce9,
+ 0xa202, 0xe42e, 0x2869, 0x4c6a, 0x4c6b, 0xf3aa, 0x2869, 0xe166,
+ 0x07c8, 0xa201, 0x3f06, 0xf0aa, 0xe166, 0x07c8, 0xa202, 0xae10,
+ 0x3d16, 0xa220, 0x3d16, 0xe41e, 0x0cf8, 0x286a, 0xe166, 0x07cc,
+ 0xa201, 0x3f06, 0xf0ca, 0xe166, 0x07cc, 0xa200, 0x2a42, 0xb646,
+ 0xae10, 0x3d16, 0x8414, 0x8215, 0xe018, 0x3d16, 0x286b, 0xe166,
+ 0x07d0, 0xa201, 0x3f06, 0xf11a, 0xe166, 0x07d0, 0xa200, 0x2a42,
+ 0xb686, 0x2a22, 0xb616, 0xae10, 0xa002, 0x3d16, 0x8414, 0x8215,
+ 0xe018, 0x2a22, 0xb616, 0x3d16, 0xa204, 0xe41e, 0x0ce9, 0xa202,
+ 0xe42e, 0x286a, 0xe418, 0x0d37, 0x2822, 0x446b, 0xe418, 0x0d38,
+ 0xe42e, 0x3ca0, 0xe41e, 0x0a0e, 0x246c, 0x4c6d, 0xce20, 0xd111,
+ 0x07c8, 0xa218, 0xce24, 0x28a0, 0xce26, 0xe41e, 0x0a0e, 0xe42e,
+ 0xe166, 0x07c0, 0xa200, 0xc707, 0x3d16, 0xe166, 0x07c0, 0xa200,
+ 0x3ca7, 0x2841, 0xf256, 0xa006, 0xaf04, 0xa102, 0xcc44, 0xe184,
+ 0x0d26, 0xa200, 0xae08, 0x2646, 0x4e47, 0x5ea7, 0xa803, 0xb492,
+ 0x2a43, 0x1aa7, 0xe017, 0x3e00, 0x2a44, 0x1aa7, 0xe017, 0x4e00,
+ 0x3e00, 0x2a45, 0x1aa7, 0xe017, 0x4e00, 0xb452, 0x2a42, 0x1aa7,
+ 0xb436, 0x2aa7, 0xa003, 0x3ea7, 0xa807, 0xf659, 0x3d16, 0xe41e,
+ 0x0a0e, 0xe166, 0x07ca, 0x2516, 0x4d16, 0xce20, 0xd111, 0x07c0,
+ 0xd112, 0x0008, 0xd113, 0x0002, 0xe41e, 0x0a0e, 0xe42e, 0xe42e,
+ 0xe42e, 0xe0c0, 0x0060, 0x3457, 0x3c58, 0xe0c1, 0x0061, 0xae15,
+ 0x3677, 0x3e78, 0xe042, 0x347e, 0x3c7f, 0xe0c0, 0x0048, 0x347c,
+ 0x3c7d, 0xe41e, 0x0ef8, 0x247c, 0x4c7d, 0xe41e, 0x0f61, 0xe41e,
+ 0x0dde, 0xe41e, 0x0dc9, 0xa200, 0x3c79, 0xa202, 0xe42e, 0xe0c0,
+ 0x0048, 0x347c, 0x3c7d, 0xe41e, 0x0ebf, 0xf0d8, 0x247c, 0x4c7d,
+ 0xe41e, 0x0f61, 0xe41e, 0x0dde, 0xe41e, 0x0dc9, 0xa200, 0x3c79,
+ 0xa202, 0xe42e, 0xe16a, 0xa202, 0xe42e, 0xe41e, 0x0d70, 0xe470,
+ 0xca28, 0xf7f8, 0xe004, 0x0200, 0x3c7a, 0xaf04, 0xce24, 0x2871,
+ 0xae0e, 0xce22, 0x2672, 0x4e73, 0xce21, 0x247e, 0x4c7f, 0xe046,
+ 0xe002, 0x0200, 0xf062, 0xe000, 0x0200, 0x3c7a, 0xaf04, 0xce24,
+ 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022, 0xce26, 0x2472, 0x4c73,
+ 0x087a, 0x3472, 0x3c73, 0x147e, 0x1c7f, 0xf054, 0x2457, 0x4c58,
+ 0x3472, 0x3c73, 0xca28, 0xf7f8, 0x287a, 0xe002, 0x0200, 0xf212,
+ 0x287a, 0xaf04, 0x2a71, 0xae0f, 0xe042, 0xce22, 0x287a, 0xe005,
+ 0x0200, 0xe045, 0x3e7a, 0x2472, 0x4c73, 0xce20, 0x287a, 0xaf04,
+ 0xce24, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022, 0xce26, 0x2472,
+ 0x4c73, 0x087a, 0x3472, 0x3c73, 0xca28, 0xf7f8, 0xd04c, 0x0000,
+ 0x2871, 0xae0e, 0xcc6e, 0x2871, 0xe016, 0x3c71, 0xe42e, 0x28c1,
+ 0xe42e, 0xa200, 0x3c71, 0xe41e, 0x0d70, 0xe41e, 0x0d70, 0xe128,
+ 0x2876, 0xa80e, 0xa102, 0xf074, 0xcc44, 0xe184, 0x0dd8, 0xba4e,
+ 0xe190, 0xe190, 0xd071, 0x2020, 0xe181, 0xe42e, 0xd030, 0x0000,
+ 0xd031, 0x0000, 0xd032, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000,
+ 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0000, 0xd038, 0x0000,
+ 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd046, 0x0000,
+ 0xd047, 0x0000, 0xe42e, 0xe004, 0x05a0, 0x2a9e, 0xae03, 0xe042,
+ 0xe09c, 0x2516, 0x4d16, 0x267c, 0x4e7d, 0xa019, 0xe042, 0xe049,
+ 0xa80e, 0xe045, 0x3672, 0x3e73, 0x3c76, 0x2472, 0x4c73, 0x267e,
+ 0x4e7f, 0xe045, 0xf061, 0x2677, 0x4e78, 0xe046, 0x3472, 0x3c73,
+ 0xe41e, 0x0dde, 0xe41e, 0x0dc9, 0xe42e, 0xe004, 0x08c0, 0x2a9e,
+ 0xae05, 0xe042, 0xe09c, 0x2072, 0x4c73, 0x3516, 0x3d16, 0x2876,
+ 0x3d16, 0x2871, 0x3d16, 0xe41e, 0x0e53, 0xe42e, 0xe41e, 0x0dde,
+ 0xe004, 0x08c0, 0x2a9e, 0xae05, 0xe042, 0xe09c, 0x2116, 0x4d16,
+ 0x3472, 0x3c73, 0x2916, 0x3c76, 0x2916, 0x3c71, 0xe41e, 0x0e79,
+ 0xe42e, 0x3ca0, 0xca29, 0xf7f9, 0xd111, 0x0000, 0x289e, 0xae14,
+ 0x265c, 0x4e5d, 0xe042, 0xce20, 0xd112, 0x0100, 0x28a0, 0xce26,
+ 0xca29, 0xf7f9, 0xe42e, 0xe004, 0x0800, 0x2a9e, 0xcca5, 0xc798,
+ 0xe01c, 0xe09c, 0xc860, 0x3516, 0x3d16, 0xc862, 0x3516, 0x3d16,
+ 0xc864, 0x3516, 0x3d16, 0xc866, 0x3d16, 0xc868, 0x3d16, 0xc86a,
+ 0x3d16, 0xc86c, 0x3d16, 0xc86e, 0x3d16, 0xc870, 0x3d16, 0xc872,
+ 0x3516, 0x3d16, 0xc88c, 0x3516, 0x3d16, 0xcb20, 0x3516, 0x3d16,
+ 0xe42e, 0xe004, 0x0800, 0x2a9e, 0xcca5, 0xc798, 0xe01c, 0xe09c,
+ 0x2116, 0x4d16, 0xcc60, 0x2116, 0x4d16, 0xcc62, 0x2116, 0x4d16,
+ 0xcc64, 0x2916, 0xcc66, 0x2916, 0xcc68, 0x2916, 0xcc6a, 0x2916,
+ 0xcc6c, 0x2916, 0xcc6e, 0x2916, 0xcc70, 0x2116, 0x4d16, 0xcc72,
+ 0x2116, 0x4d16, 0xcc8c, 0x2116, 0x4d16, 0xaf08, 0xae08, 0xcf20,
+ 0xe42e, 0x247c, 0x4c7d, 0x08c2, 0x347c, 0x3c7d, 0xf09e, 0x247c,
+ 0x4c7d, 0xa018, 0x2620, 0x4e21, 0xe042, 0x347c, 0x3c7d, 0x267e,
+ 0x4e7f, 0xe045, 0xf081, 0x247c, 0x4c7d, 0x2677, 0x4e78, 0xe046,
+ 0x347c, 0x3c7d, 0x247c, 0x4c7d, 0xe0c2, 0x0048, 0xe42e, 0x247c,
+ 0x4c7d, 0x3472, 0x3c73, 0xa219, 0x36c3, 0x3ec4, 0xd027, 0x0000,
+ 0xe41e, 0x0f92, 0xd027, 0x0001, 0xf2a8, 0x247c, 0x4c7d, 0xe41e,
+ 0x0f61, 0xe41e, 0x0f68, 0x2876, 0xaf02, 0xe000, 0x0700, 0xe092,
+ 0x2876, 0xa802, 0xe41e, 0x0f30, 0x3420, 0x3c21, 0xf186, 0x2677,
+ 0x4e78, 0xe046, 0xf142, 0x247c, 0x4c7d, 0x3472, 0x3c73, 0x2620,
+ 0x4e21, 0xa019, 0x36c3, 0x3ec4, 0xd027, 0x0000, 0xe41e, 0x0f92,
+ 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b, 0xa202, 0xe42e,
+ 0x247c, 0x4c7d, 0x3472, 0x3c73, 0xa241, 0x36c3, 0x3ec4, 0xd027,
+ 0x0000, 0xe41e, 0x0f92, 0xd027, 0x0001, 0xe408, 0x0f2e, 0x247c,
+ 0x4c7d, 0xe41e, 0x0f61, 0xe41e, 0x0f68, 0x2876, 0xa00c, 0xaf02,
+ 0xe000, 0x0700, 0xe092, 0x2876, 0xa802, 0xe41e, 0x0f30, 0xe008,
+ 0xffff, 0x3cc2, 0xa140, 0xf124, 0x247c, 0x4c7d, 0x3472, 0x3c73,
+ 0x2ac2, 0xa02d, 0x36c3, 0x3ec4, 0xd027, 0x0000, 0xe41e, 0x0f92,
+ 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b, 0xa202, 0xe42e,
+ 0xf0a8, 0x2911, 0xe008, 0xffff, 0xae20, 0x2b11, 0xe009, 0xffff,
+ 0xe042, 0xf0fe, 0x2911, 0xe008, 0x00ff, 0xae20, 0x2b11, 0xe009,
+ 0xffff, 0xe042, 0xae10, 0x2b11, 0xe009, 0xff00, 0xaf11, 0xe042,
+ 0xe049, 0xaf31, 0xe009, 0x00ff, 0xe093, 0xe049, 0xaf21, 0xe009,
+ 0x00ff, 0xe095, 0xe049, 0xaf11, 0xe009, 0x00ff, 0xe008, 0x00ff,
+ 0xae10, 0xe056, 0xae10, 0xe085, 0xe056, 0xae10, 0xe083, 0xe056,
+ 0xe42e, 0xe049, 0xa80e, 0xe045, 0x3672, 0x3e73, 0x3c76, 0xe42e,
+ 0xca28, 0xf7f8, 0xd111, 0x0700, 0x2472, 0x4c73, 0xce20, 0x267e,
+ 0x4e7f, 0xe045, 0xe004, 0x0040, 0xe065, 0xaf03, 0xce25, 0xe41e,
+ 0x0f89, 0xa240, 0xca25, 0xe046, 0xe426, 0xca28, 0xf7f8, 0xce24,
+ 0xe000, 0x0700, 0xce22, 0x2657, 0x4e58, 0xce20, 0xe41e, 0x0f89,
+ 0xe42e, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa002, 0xce26, 0xca28,
+ 0xf7f8, 0xe42e, 0xa200, 0x3cc0, 0xe0c0, 0x0045, 0xaf04, 0x307b,
+ 0x28c0, 0xf09a, 0xe0c0, 0x0049, 0x2674, 0x4e75, 0xe046, 0xf75a,
+ 0xa200, 0x3cc0, 0xe0c0, 0x0049, 0x3474, 0x3c75, 0x2474, 0x4c75,
+ 0x2672, 0x4e73, 0xe046, 0xf032, 0x0077, 0x0c78, 0x26c3, 0x4ec4,
+ 0xe045, 0xa200, 0xe427, 0x287b, 0x3cc1, 0xe428, 0x28c0, 0xf5d8,
+ 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf58a, 0xe0c0, 0x005d, 0xe00a,
+ 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3cc0, 0xf4ee, 0xe42e,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0046, 0xe42e, 0xa20e, 0xa940, 0xe0c2,
+ 0x0100, 0xa200, 0xe0c2, 0x013d, 0xe004, 0x00ce, 0xe0c2, 0x017c,
+ 0xa218, 0xe0c2, 0x017d, 0xe0c0, 0x0044, 0xa80e, 0xae1a, 0x4c40,
+ 0xe0c2, 0x0102, 0xe42e, 0xa202, 0xe0c2, 0x0106, 0xa201, 0xe167,
+ 0x0ba7, 0x3f17, 0xe41e, 0x11a9, 0xe42e, 0xa20e, 0xa940, 0xe0c2,
+ 0x0100, 0xa200, 0xe0c2, 0x013d, 0xe004, 0x00ce, 0xe0c2, 0x017c,
+ 0xa218, 0xe0c2, 0x017d, 0xe0c1, 0x0041, 0xe004, 0x0000, 0xae10,
+ 0xe042, 0x2a50, 0xa805, 0xf05b, 0xe161, 0x05b7, 0x2111, 0x4d11,
+ 0xe0c2, 0x0103, 0xa202, 0xe0c2, 0x0210, 0xe0c1, 0x0041, 0xe004,
+ 0x0030, 0xae10, 0xe042, 0x2a50, 0xa809, 0xf05b, 0xe161, 0x05b9,
+ 0x2111, 0x4d11, 0xe0c2, 0x0211, 0xe0c1, 0x0041, 0xe004, 0x0030,
+ 0xe000, 0x0040, 0xae10, 0xe042, 0x2a50, 0xa811, 0xf05b, 0xe161,
+ 0x05bb, 0x2111, 0x4d11, 0xe0c2, 0x0212, 0x2014, 0x4c15, 0xae08,
+ 0xe0c2, 0x0101, 0xe0c2, 0x0283, 0xe0c0, 0x0044, 0xa80e, 0xae1a,
+ 0x4c40, 0xe0c2, 0x0102, 0x2822, 0xa802, 0xae06, 0xe0c2, 0x0104,
+ 0xa20e, 0xae04, 0xa904, 0xae04, 0x4c22, 0xae06, 0xa900, 0xe0c1,
+ 0x0065, 0xaf19, 0xa803, 0xae17, 0xe056, 0xe0c2, 0x0204, 0xa200,
+ 0xe0c2, 0x0208, 0x8442, 0xc786, 0xe018, 0xe000, 0x0620, 0xe09e,
+ 0xe166, 0x020d, 0xe165, 0x0214, 0xd022, 0x0002, 0xe184, 0x1063,
+ 0x2117, 0x4d17, 0x9f16, 0x9f15, 0x282c, 0xe0c2, 0x0217, 0xe166,
+ 0x05b0, 0x2916, 0xe0c2, 0x0154, 0x2116, 0x4d16, 0xe0c2, 0x0155,
+ 0x2116, 0x4d16, 0xe0c2, 0x0156, 0xe41e, 0x1176, 0xe41e, 0x1149,
+ 0xe41e, 0x10f3, 0xa200, 0xe0c2, 0x0113, 0xe0c2, 0x030d, 0xe0c2,
+ 0x022b, 0xa202, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xf04a, 0xe0c0, 0x0281, 0xf7ea, 0xe42e, 0x2a61,
+ 0x4e62, 0xcbb2, 0xaf10, 0xa8fe, 0x3c99, 0xae30, 0xe0c2, 0x0115,
+ 0xe419, 0x0c0e, 0xcbb2, 0xa820, 0xa27f, 0xb611, 0xe0c3, 0x012a,
+ 0xcbb2, 0x309a, 0xe049, 0xa803, 0xae03, 0xe05a, 0xa814, 0xe01a,
+ 0xae14, 0xcbb3, 0xa81f, 0xe056, 0xe0c2, 0x0114, 0x289a, 0xcbb5,
+ 0xf178, 0xa105, 0x209c, 0x4c9d, 0xf039, 0xae02, 0xf06e, 0xa103,
+ 0xf049, 0xe049, 0xae02, 0xe056, 0xe0c2, 0x030a, 0xe004, 0x0055,
+ 0xe0c2, 0x030c, 0xe0c0, 0x03b0, 0x34ac, 0x3cad, 0xe42e, 0x2885,
+ 0xa002, 0x1814, 0xe01a, 0x2a86, 0xe01b, 0xe052, 0xa201, 0xb691,
+ 0x2885, 0xb431, 0x2886, 0xb451, 0xe04a, 0xa806, 0xa106, 0xb495,
+ 0xb495, 0xe0c3, 0x0120, 0xcbb8, 0xe0c2, 0x0121, 0xcbba, 0xe0c2,
+ 0x0122, 0xcbbc, 0xe0c2, 0x0123, 0xe42e, 0x2a61, 0x4e62, 0xe0c0,
+ 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0xe42b, 0x2868, 0x1866,
+ 0xe414, 0x0c24, 0xe42e, 0xa200, 0xe0c2, 0x030b, 0xa202, 0xe0c2,
+ 0x0302, 0xe163, 0x06e0, 0x2843, 0x3d13, 0x2843, 0x3d13, 0x2844,
+ 0x3d13, 0x2845, 0x3d13, 0xe161, 0x06e0, 0xe163, 0x0380, 0xd022,
+ 0x0003, 0xe184, 0x111a, 0x8511, 0xc786, 0xe018, 0xb608, 0xe000,
+ 0x0620, 0xe094, 0x2112, 0x4d12, 0x9f13, 0x2112, 0x4d12, 0x9f13,
+ 0x2112, 0x4d12, 0x9f13, 0xa200, 0xe0c2, 0x0302, 0xe004, 0x0421,
+ 0x3c9c, 0xe004, 0x0842, 0x3c9d, 0xa200, 0xe0c2, 0x0303, 0x288c,
+ 0xae0c, 0xe0c2, 0x0330, 0xa200, 0xe0c2, 0x0308, 0x288c, 0xe166,
+ 0x05e0, 0xe167, 0x0331, 0xf038, 0xe166, 0x05c0, 0xd022, 0x0007,
+ 0xe184, 0x1141, 0x2916, 0xae10, 0x4d16, 0xae10, 0x4d16, 0xae10,
+ 0x4d16, 0x9f17, 0xe190, 0xa202, 0xae02, 0xa902, 0xe0c2, 0x0312,
+ 0xe42e, 0xa202, 0xe0c2, 0x013c, 0xa201, 0xe166, 0x0100, 0xd022,
+ 0x00ff, 0xe184, 0x1158, 0x2916, 0xe0c3, 0x013e, 0xe0c2, 0x013f,
+ 0xa003, 0xe190, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa200, 0xe0c1,
+ 0x0040, 0xe042, 0xe005, 0x0036, 0xae17, 0xe042, 0xe005, 0x1e80,
+ 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05c0, 0xd112,
+ 0x0040, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xa200, 0xe0c1,
+ 0x0040, 0xe042, 0xe005, 0x0036, 0xae17, 0xe042, 0xe005, 0x1ec0,
+ 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0100, 0xd112,
+ 0x0100, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xa200, 0x2a51,
+ 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2a51, 0xa805, 0xf02b, 0xa912,
+ 0x2a51, 0xa809, 0xf02b, 0xa940, 0x2a51, 0xa811, 0xf02b, 0xa980,
+ 0xe005, 0x0ba6, 0xe09f, 0x2b17, 0xae05, 0xe056, 0xe0c2, 0x0169,
+ 0xe42e, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xe40a, 0x122b, 0xae0a,
+ 0xe0c1, 0x0060, 0xaf0d, 0xa80f, 0xe056, 0xe0c1, 0x0044, 0xa811,
+ 0xe056, 0xae0c, 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe167, 0x0ba7,
+ 0x2f17, 0xe056, 0xe0c2, 0x0282, 0xe0c0, 0x006e, 0xe0c2, 0x0284,
+ 0xaf20, 0xe0c1, 0x0282, 0xa809, 0xf04b, 0xe049, 0xae1f, 0xf06e,
+ 0xe049, 0xa011, 0xaf09, 0xae07, 0xae21, 0xe056, 0xe0c2, 0x028c,
+ 0xe167, 0x0ba8, 0x2d17, 0x4917, 0xe0c2, 0x0285, 0xe167, 0x0baa,
+ 0x2d17, 0x4917, 0xe0c2, 0x0286, 0xe41e, 0x122c, 0xe0c0, 0x004a,
+ 0xe0c2, 0x0289, 0xe0c0, 0x004b, 0xe0c2, 0x028a, 0xe0c0, 0x0055,
+ 0xe0c2, 0x028b, 0xe0c1, 0x0041, 0xe004, 0x08c8, 0xae10, 0xe042,
+ 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba0, 0x2d17, 0x4917,
+ 0xe0c2, 0x0287, 0xe0c1, 0x0041, 0xe004, 0x08e0, 0xae10, 0xe042,
+ 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba2, 0x2d17, 0x4917,
+ 0xe0c2, 0x0288, 0xe0c1, 0x0041, 0xe004, 0x08e8, 0xae10, 0xe042,
+ 0xe167, 0x0ba6, 0x2b17, 0xf05b, 0xe167, 0x0ba4, 0x2d17, 0x4917,
+ 0xe0c2, 0x028d, 0xe0c0, 0x0065, 0xaf18, 0xa802, 0xe0c2, 0x0280,
+ 0xa210, 0xe0c2, 0x0168, 0xe42e, 0xe167, 0x0bac, 0xe165, 0x028e,
+ 0xe166, 0x02c0, 0xd022, 0x0008, 0xe184, 0x123f, 0x2d17, 0x9f16,
+ 0x9e85, 0xf7fb, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190,
+ 0xe166, 0x02d2, 0xd022, 0x0008, 0xe184, 0x124b, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02db, 0xd022, 0x0008,
+ 0xe184, 0x1257, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190,
+ 0xe166, 0x02e4, 0xd022, 0x0008, 0xe184, 0x1262, 0x2d17, 0x9f16,
+ 0x9e85, 0xf7fb, 0xe190, 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0070, 0x0056, 0x008c, 0x0025, 0x00a2,
+ 0x0065, 0x00cc, 0x00a2, 0x0080, 0x00e1, 0x0092, 0x00ac, 0x0093,
+ 0x00d6, 0x0027, 0x009c, 0x0080, 0x0081, 0x0084, 0x004b, 0x0091,
+ 0x00b2, 0x00ce, 0x00ef, 0x00fe, 0x00fe, 0x00a4, 0x0080, 0x00cc,
+ 0x00aa, 0x0077, 0x00eb, 0x008c, 0x00e6, 0x00e4, 0x0080, 0x0082,
+ 0x0082, 0x004a, 0x0094, 0x00b4, 0x00cb, 0x00ec, 0x00fe, 0x00fe,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x00fd, 0x0088, 0x00fe, 0x00ff, 0x00e4, 0x00db, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x00bd, 0x0081, 0x00f2, 0x00ff,
+ 0x00e3, 0x00d5, 0x00ff, 0x00db, 0x0080, 0x0080, 0x0080, 0x006a,
+ 0x007e, 0x00e3, 0x00fc, 0x00d6, 0x00d1, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0001, 0x0062, 0x00f8, 0x00ff, 0x00ec, 0x00e2,
+ 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x00b5, 0x0085, 0x00ee,
+ 0x00fe, 0x00dd, 0x00ea, 0x00ff, 0x009a, 0x0080, 0x0080, 0x0080,
+ 0x004e, 0x0086, 0x00ca, 0x00f7, 0x00c6, 0x00b4, 0x00ff, 0x00db,
+ 0x0080, 0x0080, 0x0080, 0x0001, 0x00b9, 0x00f9, 0x00ff, 0x00f3,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00b8, 0x0096,
+ 0x00f7, 0x00ff, 0x00ec, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x004d, 0x006e, 0x00d8, 0x00ff, 0x00ec, 0x00e6, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0065, 0x00fb, 0x00ff,
+ 0x00f1, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00aa,
+ 0x008b, 0x00f1, 0x00fc, 0x00ec, 0x00d1, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0025, 0x0074, 0x00c4, 0x00f3, 0x00e4, 0x00ff,
+ 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0001, 0x00cc, 0x00fe,
+ 0x00ff, 0x00f5, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00cf, 0x00a0, 0x00fa, 0x00ff, 0x00ee, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0066, 0x0067, 0x00e7, 0x00ff, 0x00d3,
+ 0x00ab, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0098,
+ 0x00fc, 0x00ff, 0x00f0, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x00b1, 0x0087, 0x00f3, 0x00ff, 0x00ea, 0x00e1, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0050, 0x0081, 0x00d3, 0x00ff,
+ 0x00c2, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001,
+ 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x00f6, 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00c6, 0x0023, 0x00ed, 0x00df, 0x00c1, 0x00bb, 0x00a2, 0x00a0,
+ 0x0091, 0x009b, 0x003e, 0x0083, 0x002d, 0x00c6, 0x00dd, 0x00ac,
+ 0x00b0, 0x00dc, 0x009d, 0x00fc, 0x00dd, 0x0001, 0x0044, 0x002f,
+ 0x0092, 0x00d0, 0x0095, 0x00a7, 0x00dd, 0x00a2, 0x00ff, 0x00df,
+ 0x0080, 0x0001, 0x0095, 0x00f1, 0x00ff, 0x00dd, 0x00e0, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x00b8, 0x008d, 0x00ea, 0x00fd,
+ 0x00de, 0x00dc, 0x00ff, 0x00c7, 0x0080, 0x0080, 0x0080, 0x0051,
+ 0x0063, 0x00b5, 0x00f2, 0x00b0, 0x00be, 0x00f9, 0x00ca, 0x00ff,
+ 0x00ff, 0x0080, 0x0001, 0x0081, 0x00e8, 0x00fd, 0x00d6, 0x00c5,
+ 0x00f2, 0x00c4, 0x00ff, 0x00ff, 0x0080, 0x0063, 0x0079, 0x00d2,
+ 0x00fa, 0x00c9, 0x00c6, 0x00ff, 0x00ca, 0x0080, 0x0080, 0x0080,
+ 0x0017, 0x005b, 0x00a3, 0x00f2, 0x00aa, 0x00bb, 0x00f7, 0x00d2,
+ 0x00ff, 0x00ff, 0x0080, 0x0001, 0x00c8, 0x00f6, 0x00ff, 0x00ea,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x006d, 0x00b2,
+ 0x00f1, 0x00ff, 0x00e7, 0x00f5, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x002c, 0x0082, 0x00c9, 0x00fd, 0x00cd, 0x00c0, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0001, 0x0084, 0x00ef, 0x00fb,
+ 0x00db, 0x00d1, 0x00ff, 0x00a5, 0x0080, 0x0080, 0x0080, 0x005e,
+ 0x0088, 0x00e1, 0x00fb, 0x00da, 0x00be, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0016, 0x0064, 0x00ae, 0x00f5, 0x00ba, 0x00a1,
+ 0x00ff, 0x00c7, 0x0080, 0x0080, 0x0080, 0x0001, 0x00b6, 0x00f9,
+ 0x00ff, 0x00e8, 0x00eb, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x007c, 0x008f, 0x00f1, 0x00ff, 0x00e3, 0x00ea, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0023, 0x004d, 0x00b5, 0x00fb, 0x00c1,
+ 0x00d3, 0x00ff, 0x00cd, 0x0080, 0x0080, 0x0080, 0x0001, 0x009d,
+ 0x00f7, 0x00ff, 0x00ec, 0x00e7, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0079, 0x008d, 0x00eb, 0x00ff, 0x00e1, 0x00e3, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x002d, 0x0063, 0x00bc, 0x00fb,
+ 0x00c3, 0x00d9, 0x00ff, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0001,
+ 0x0001, 0x00fb, 0x00ff, 0x00d5, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x00cb, 0x0001, 0x00f8, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0089, 0x0001, 0x00b1,
+ 0x00ff, 0x00e0, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00fd, 0x0009, 0x00f8, 0x00fb, 0x00cf, 0x00d0, 0x00ff, 0x00c0,
+ 0x0080, 0x0080, 0x0080, 0x00af, 0x000d, 0x00e0, 0x00f3, 0x00c1,
+ 0x00b9, 0x00f9, 0x00c6, 0x00ff, 0x00ff, 0x0080, 0x0049, 0x0011,
+ 0x00ab, 0x00dd, 0x00a1, 0x00b3, 0x00ec, 0x00a7, 0x00ff, 0x00ea,
+ 0x0080, 0x0001, 0x005f, 0x00f7, 0x00fd, 0x00d4, 0x00b7, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x00ef, 0x005a, 0x00f4, 0x00fa,
+ 0x00d3, 0x00d1, 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x009b,
+ 0x004d, 0x00c3, 0x00f8, 0x00bc, 0x00c3, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0001, 0x0018, 0x00ef, 0x00fb, 0x00da, 0x00db,
+ 0x00ff, 0x00cd, 0x0080, 0x0080, 0x0080, 0x00c9, 0x0033, 0x00db,
+ 0x00ff, 0x00c4, 0x00ba, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0045, 0x002e, 0x00be, 0x00ef, 0x00c9, 0x00da, 0x00ff, 0x00e4,
+ 0x0080, 0x0080, 0x0080, 0x0001, 0x00bf, 0x00fb, 0x00ff, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00df, 0x00a5,
+ 0x00f9, 0x00ff, 0x00d5, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x008d, 0x007c, 0x00f8, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0010, 0x00f8, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00be,
+ 0x0024, 0x00e6, 0x00ff, 0x00ec, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0095, 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x00e2, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00f7, 0x00c0, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x00f0, 0x0080, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0086,
+ 0x00fc, 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x00d5, 0x003e, 0x00fa, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0037, 0x005d, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00ca, 0x0018, 0x00d5, 0x00eb, 0x00ba, 0x00bf, 0x00dc, 0x00a0,
+ 0x00f0, 0x00af, 0x00ff, 0x007e, 0x0026, 0x00b6, 0x00e8, 0x00a9,
+ 0x00b8, 0x00e4, 0x00ae, 0x00ff, 0x00bb, 0x0080, 0x003d, 0x002e,
+ 0x008a, 0x00db, 0x0097, 0x00b2, 0x00f0, 0x00aa, 0x00ff, 0x00d8,
+ 0x0080, 0x0001, 0x0070, 0x00e6, 0x00fa, 0x00c7, 0x00bf, 0x00f7,
+ 0x009f, 0x00ff, 0x00ff, 0x0080, 0x00a6, 0x006d, 0x00e4, 0x00fc,
+ 0x00d3, 0x00d7, 0x00ff, 0x00ae, 0x0080, 0x0080, 0x0080, 0x0027,
+ 0x004d, 0x00a2, 0x00e8, 0x00ac, 0x00b4, 0x00f5, 0x00b2, 0x00ff,
+ 0x00ff, 0x0080, 0x0001, 0x0034, 0x00dc, 0x00f6, 0x00c6, 0x00c7,
+ 0x00f9, 0x00dc, 0x00ff, 0x00ff, 0x0080, 0x007c, 0x004a, 0x00bf,
+ 0x00f3, 0x00b7, 0x00c1, 0x00fa, 0x00dd, 0x00ff, 0x00ff, 0x0080,
+ 0x0018, 0x0047, 0x0082, 0x00db, 0x009a, 0x00aa, 0x00f3, 0x00b6,
+ 0x00ff, 0x00ff, 0x0080, 0x0001, 0x00b6, 0x00e1, 0x00f9, 0x00db,
+ 0x00f0, 0x00ff, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0095, 0x0096,
+ 0x00e2, 0x00fc, 0x00d8, 0x00cd, 0x00ff, 0x00ab, 0x0080, 0x0080,
+ 0x0080, 0x001c, 0x006c, 0x00aa, 0x00f2, 0x00b7, 0x00c2, 0x00fe,
+ 0x00df, 0x00ff, 0x00ff, 0x0080, 0x0001, 0x0051, 0x00e6, 0x00fc,
+ 0x00cc, 0x00cb, 0x00ff, 0x00c0, 0x0080, 0x0080, 0x0080, 0x007b,
+ 0x0066, 0x00d1, 0x00f7, 0x00bc, 0x00c4, 0x00ff, 0x00e9, 0x0080,
+ 0x0080, 0x0080, 0x0014, 0x005f, 0x0099, 0x00f3, 0x00a4, 0x00ad,
+ 0x00ff, 0x00cb, 0x0080, 0x0080, 0x0080, 0x0001, 0x00de, 0x00f8,
+ 0x00ff, 0x00d8, 0x00d5, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00a8, 0x00af, 0x00f6, 0x00fc, 0x00eb, 0x00cd, 0x00ff, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x002f, 0x0074, 0x00d7, 0x00ff, 0x00d3,
+ 0x00d4, 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0001, 0x0079,
+ 0x00ec, 0x00fd, 0x00d4, 0x00d6, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x008d, 0x0054, 0x00d5, 0x00fc, 0x00c9, 0x00ca, 0x00ff,
+ 0x00db, 0x0080, 0x0080, 0x0080, 0x002a, 0x0050, 0x00a0, 0x00f0,
+ 0x00a2, 0x00b9, 0x00ff, 0x00cd, 0x0080, 0x0080, 0x0080, 0x0001,
+ 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x00f4, 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00ee, 0x0001, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00b0, 0x00f6, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00df, 0x00f1, 0x00fc, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f9,
+ 0x00fd, 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00f4, 0x00fc, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ea, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f6, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ef, 0x00fd,
+ 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb,
+ 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fd, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fb, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe,
+ 0x00fd, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fa, 0x00ff, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00d9, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00e1, 0x00fc, 0x00f1, 0x00fd, 0x00ff,
+ 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ea, 0x00fa,
+ 0x00f1, 0x00fa, 0x00fd, 0x00ff, 0x00fd, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00df, 0x00fe, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ee,
+ 0x00fd, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f9, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fd, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f7, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fd, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ba, 0x00fb, 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ea, 0x00fb, 0x00f4, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb, 0x00fb,
+ 0x00f3, 0x00fd, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fd, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ec, 0x00fd, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb,
+ 0x00fd, 0x00fd, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00f8, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fa, 0x00fe, 0x00fc, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe,
+ 0x00f9, 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fd, 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f6, 0x00fd, 0x00fd, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc,
+ 0x00fe, 0x00fb, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fc, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe, 0x00fd,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f5, 0x00fb,
+ 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fd, 0x00fd, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb, 0x00fd, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc,
+ 0x00fd, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00f9, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00ed, 0x00f6, 0x00fd, 0x00fd, 0x00fe, 0x00fe, 0x00fe, 0x00fe,
+ 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fa, 0x00fa,
+ 0x00fc, 0x00fe, 0x00fe, 0x00e7, 0x00f3, 0x00f5, 0x00fd, 0x00fe,
+ 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe,
+ 0x00fe, 0x00fb, 0x00fb, 0x00fe, 0x00fe, 0x00fe, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0080, 0x0000, 0x0000, 0x0000, 0x0070, 0x0010, 0x0000,
+ 0x0000, 0x0060, 0x0020, 0x0000, 0x0000, 0x0050, 0x0030, 0x0000,
+ 0x0000, 0x0040, 0x0040, 0x0000, 0x0000, 0x0030, 0x0050, 0x0000,
+ 0x0000, 0x0020, 0x0060, 0x0000, 0x0000, 0x0010, 0x0070, 0x0000,
+ 0x0000, 0x0080, 0x0000, 0x0000, 0x0006, 0x007b, 0x000c, 0x0004,
+ 0x008b, 0x006c, 0x0024, 0x0021, 0x0009, 0x005d, 0x0032, 0x0018,
+ 0x00d0, 0x004d, 0x004d, 0x0043, 0x0006, 0x0032, 0x005d, 0x0024,
+ 0x0048, 0x0024, 0x006c, 0x002e, 0x0001, 0x000c, 0x007b, 0x0018,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000a,
+ 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0011,
+ 0x0012, 0x0013, 0x0014, 0x0014, 0x0015, 0x0015, 0x0016, 0x0016,
+ 0x0017, 0x0017, 0x0018, 0x0019, 0x0019, 0x001a, 0x001b, 0x001c,
+ 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024,
+ 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b,
+ 0x002c, 0x002d, 0x002e, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032,
+ 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a,
+ 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042,
+ 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a,
+ 0x004b, 0x004c, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051,
+ 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059,
+ 0x005b, 0x005d, 0x005f, 0x0060, 0x0062, 0x0064, 0x0065, 0x0066,
+ 0x0068, 0x006a, 0x006c, 0x006e, 0x0070, 0x0072, 0x0074, 0x0076,
+ 0x007a, 0x007c, 0x007e, 0x0080, 0x0082, 0x0084, 0x0086, 0x0088,
+ 0x008a, 0x008c, 0x008f, 0x0091, 0x0094, 0x0097, 0x009a, 0x009d,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b,
+ 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013,
+ 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b,
+ 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023,
+ 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b,
+ 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033,
+ 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003c,
+ 0x003e, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048, 0x004a, 0x004c,
+ 0x004e, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005a, 0x005c,
+ 0x005e, 0x0060, 0x0062, 0x0064, 0x0066, 0x0068, 0x006a, 0x006c,
+ 0x006e, 0x0070, 0x0072, 0x0074, 0x0077, 0x007a, 0x007d, 0x0080,
+ 0x0083, 0x0086, 0x0089, 0x008c, 0x008f, 0x0092, 0x0095, 0x0098,
+ 0x009b, 0x009e, 0x00a1, 0x00a4, 0x00a7, 0x00aa, 0x00ad, 0x00b1,
+ 0x00b5, 0x00b9, 0x00bd, 0x00c1, 0x00c5, 0x00c9, 0x00cd, 0x00d1,
+ 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00ea, 0x00ef, 0x00f5,
+ 0x00f9, 0x00fe, 0x0103, 0x0108, 0x010d, 0x0112, 0x0117, 0x011c,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x0d3d, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0143, 0xe40e, 0x0147, 0xe40e,
+ 0x014b, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x014f, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x03e8, 0xe40e, 0x0427, 0xe41e,
+ 0x0153, 0xe40e, 0x007e, 0xe41e, 0x0177, 0xe40e, 0x007e, 0xe41e,
+ 0x0183, 0xe40e, 0x007e, 0xe41e, 0x01cc, 0xe40e, 0x007e, 0xe41e,
+ 0x01fa, 0xe40e, 0x007e, 0xe41e, 0x0244, 0xe40e, 0x007e, 0xe41e,
+ 0x0c94, 0xe40e, 0x007e, 0xd130, 0x0008, 0xa200, 0xc401, 0xe188,
+ 0x07ff, 0x3d11, 0xe41e, 0x038f, 0xa200, 0x3c2a, 0x3c33, 0xcc72,
+ 0xcc44, 0x3ccb, 0x3ccc, 0xe41e, 0x0275, 0xf0ea, 0xe41e, 0x06f9,
+ 0xe41e, 0x0d18, 0x2815, 0xe418, 0x09ea, 0xe41e, 0x0d10, 0xa202,
+ 0xe0c2, 0x0070, 0xe42e, 0xa200, 0xe0c2, 0x0070, 0xe42e, 0x28be,
+ 0xe428, 0x28bf, 0xf06a, 0xa200, 0x3c4d, 0xe41e, 0x0db3, 0xe42e,
+ 0xe41e, 0x0d8b, 0xe42e, 0xa200, 0xcc44, 0xcc4a, 0xcc4c, 0x28bf,
+ 0xf0fa, 0x28c0, 0xf09a, 0xe0c0, 0x0066, 0x344a, 0x3c4b, 0xe0c0,
+ 0x0067, 0xae04, 0x3c4c, 0xa200, 0x3c4d, 0xe41e, 0x0db3, 0xd130,
+ 0x0008, 0xd1e0, 0x0000, 0xd1ff, 0x03b0, 0xd199, 0x0224, 0xd03a,
+ 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000, 0xe41e,
+ 0x048b, 0x28bf, 0xf06a, 0xe41e, 0x0d8b, 0xe41e, 0x0658, 0xf05e,
+ 0x28be, 0xf03a, 0xe41e, 0x0d96, 0x2c2a, 0xa002, 0x3c2a, 0x2c33,
+ 0xa002, 0x3c33, 0xe0c2, 0x0070, 0x2829, 0xe0c2, 0x0071, 0x281f,
+ 0xe0c2, 0x0073, 0xd039, 0x0000, 0xc84a, 0xc84d, 0xae20, 0xe056,
+ 0xe0c2, 0x0053, 0xa202, 0xe42e, 0xd130, 0x0008, 0xe41e, 0x01e5,
+ 0xe0c0, 0x0060, 0xe42a, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0570,
+ 0xd112, 0x0030, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060,
+ 0x3c32, 0xe0c0, 0x0061, 0x3c70, 0xe42e, 0xe0c0, 0x0064, 0x3cd1,
+ 0x34d0, 0xe0c0, 0x0065, 0x3cd3, 0x34d2, 0xe0c0, 0x0066, 0x3cd5,
+ 0x34d4, 0xe0c0, 0x0067, 0x3cd7, 0x34d6, 0xe0c0, 0x0069, 0x3cd9,
+ 0x34d8, 0xe42e, 0xd130, 0x0008, 0x28bf, 0xf0fa, 0x28c0, 0xf09a,
+ 0xe0c0, 0x0061, 0x344a, 0x3c4b, 0xe0c0, 0x0062, 0xae04, 0x3c4c,
+ 0xa200, 0x3c4d, 0xe41e, 0x0db3, 0xe0c0, 0x0060, 0xa806, 0xf08a,
+ 0xa102, 0xf1aa, 0xa102, 0xf1ba, 0xa102, 0xf1ba, 0xe42e, 0xe0c0,
+ 0x0060, 0xaf06, 0xa802, 0x3078, 0xf0ca, 0xe0c0, 0x0063, 0x3479,
+ 0x3c7a, 0xe0c1, 0x0064, 0x367b, 0x3e7c, 0xe056, 0xe01a, 0x3c78,
+ 0xe41e, 0x036c, 0xf0ee, 0xe41e, 0x0377, 0xf0be, 0xa214, 0xf02e,
+ 0xa216, 0x3c30, 0xa200, 0x3c2f, 0xe41e, 0x0661, 0xe41e, 0x0688,
+ 0x28bf, 0xf06a, 0xe41e, 0x0d8b, 0xe41e, 0x0658, 0xf05e, 0x28be,
+ 0xf03a, 0xe41e, 0x0d96, 0xe42e, 0xe41e, 0x0d2c, 0xe0c0, 0x0060,
+ 0xa802, 0xf158, 0xe0c0, 0x0060, 0xaf04, 0xa802, 0x3078, 0xf0ca,
+ 0xe0c0, 0x0063, 0x3479, 0x3c7a, 0xe0c1, 0x0064, 0x367b, 0x3e7c,
+ 0xe056, 0xe01a, 0x3c78, 0xe41e, 0x05c1, 0xf03e, 0xe41e, 0x05f6,
+ 0xc870, 0xaf06, 0x3c45, 0xe0c2, 0x0070, 0xe004, 0x0080, 0xcc6e,
+ 0xbadf, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100,
+ 0xd113, 0x0012, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0074, 0xa806,
+ 0x3cc9, 0xe0c0, 0x0074, 0xaf04, 0x3cca, 0xe0c0, 0x0064, 0x3450,
+ 0x3c51, 0x3c71, 0x2850, 0xaf08, 0x3c50, 0x2851, 0xaf08, 0x3c51,
+ 0xe0c0, 0x0065, 0x3418, 0x3c17, 0x2818, 0xa002, 0x3c18, 0xe0c0,
+ 0x0062, 0x3019, 0xaf02, 0x301a, 0xaf02, 0x301b, 0xaf06, 0x30b8,
+ 0xe0c1, 0x0071, 0x3eb9, 0xaf02, 0x30c8, 0xaf02, 0x30c7, 0xaf02,
+ 0x30ce, 0xe0c0, 0x0068, 0xe049, 0xa83f, 0xae3f, 0xaf3f, 0x3e24,
+ 0xe049, 0xaf0b, 0x3226, 0xe049, 0xaf0d, 0xa807, 0x3e2c, 0xe049,
+ 0xaf11, 0xa81f, 0xaf41, 0xae41, 0xae03, 0x3e2d, 0xe049, 0xaf19,
+ 0xa81f, 0xaf41, 0xae41, 0xae03, 0x3e2e, 0xe049, 0xaf21, 0xa803,
+ 0x3e6b, 0x282c, 0x4c2d, 0x4c2e, 0xe01a, 0x3c25, 0xe0c0, 0x0069,
+ 0x3037, 0xaf02, 0x3038, 0xaf02, 0x3c39, 0xe0c0, 0x006a, 0x3c14,
+ 0xe0c0, 0x006b, 0x3015, 0x3481, 0xaf02, 0xe008, 0x7fff, 0x3c80,
+ 0xe0c0, 0x006b, 0x2881, 0xaf1e, 0x30ac, 0x2881, 0xe008, 0x7fff,
+ 0x3c81, 0xe0c0, 0x006c, 0x3482, 0x3c83, 0xe0c0, 0x006d, 0x3c1c,
+ 0xa20a, 0x3c10, 0xa002, 0x3c12, 0xa202, 0x3c13, 0xa102, 0x3c22,
+ 0xa200, 0x3c21, 0x3c20, 0x3c27, 0xa204, 0x3c11, 0xa234, 0x3c23,
+ 0x8450, 0x8251, 0xe018, 0x3c52, 0xa201, 0xe002, 0x00c8, 0xb425,
+ 0xe002, 0x0190, 0xb425, 0x3e36, 0xe0c0, 0x006e, 0x3472, 0x3c73,
+ 0xe0c0, 0x006f, 0x3474, 0x3c75, 0x2850, 0x2a51, 0xaf06, 0xaf07,
+ 0x3c07, 0x3e08, 0x8407, 0x8208, 0xe018, 0x3cc1, 0xa104, 0xf032,
+ 0xa204, 0x3cc1, 0x2851, 0xaf02, 0x3c07, 0x8407, 0x8250, 0xe018,
+ 0x3cc3, 0x3cc6, 0xa202, 0x3c1e, 0xe0c0, 0x0043, 0xaf06, 0x30be,
+ 0xaf02, 0x30bf, 0xaf02, 0x30c0, 0xa202, 0xe42e, 0xcb04, 0xaf20,
+ 0xe000, 0x0540, 0xe09e, 0xc872, 0x3d07, 0xcb04, 0xaf20, 0xa002,
+ 0x1850, 0xe428, 0xcb04, 0xe008, 0xffff, 0xae0e, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xe0c1, 0x0042, 0xe042, 0xce20, 0xd111, 0x0540,
+ 0xd112, 0x002e, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x204a,
+ 0x4c4b, 0x2e4d, 0xae11, 0xe042, 0x0840, 0xe161, 0x04e4, 0x3511,
+ 0x3d11, 0x281f, 0xae04, 0xe005, 0x0012, 0xae11, 0xe042, 0xe0c1,
+ 0x0042, 0xe042, 0xce20, 0xd111, 0x04e4, 0xd112, 0x0004, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xa206, 0x3c2f, 0xa20e, 0x3c30,
+ 0xe41e, 0x0661, 0xe41e, 0x05c1, 0xe41e, 0x0688, 0xe42e, 0xa206,
+ 0x3c2f, 0xa210, 0x3c30, 0xe41e, 0x0661, 0xe41e, 0x05f6, 0xe41e,
+ 0x0688, 0xe42e, 0xa200, 0x3c2f, 0xa212, 0x3c30, 0xe41e, 0x0661,
+ 0xa204, 0xba84, 0xe41e, 0x064e, 0xe41e, 0x0688, 0xe42e, 0xe0c0,
+ 0x0040, 0xe005, 0x003e, 0xae17, 0xe042, 0xe005, 0x1000, 0xae03,
+ 0xe042, 0xce20, 0xd111, 0x03b0, 0xd112, 0x0100, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0x281e, 0xf208, 0x281d, 0x181c, 0xf3f2,
+ 0x2853, 0xa008, 0x18c2, 0xf3b4, 0x28c2, 0x08c1, 0x18c6, 0xf0b4,
+ 0x28c4, 0xa002, 0xc70f, 0x7cc1, 0xaf20, 0x3cc4, 0x3cc2, 0x281c,
+ 0x3c1d, 0xf2be, 0x281d, 0xa002, 0x3c1d, 0x28c2, 0x08c1, 0xc70f,
+ 0x7cc6, 0xaf20, 0x3cc2, 0xf21e, 0x281d, 0x181c, 0xf202, 0x2853,
+ 0xa008, 0x18c3, 0xf1c4, 0x28c3, 0x08c1, 0x1852, 0xf0c4, 0x28c5,
+ 0xa002, 0xc70f, 0x7cc1, 0xaf20, 0x3cc5, 0x08c6, 0x3cc3, 0x281c,
+ 0x3c1d, 0xf0be, 0x281d, 0xa002, 0x3c1d, 0x28c3, 0x08c1, 0xc70f,
+ 0x7c52, 0xaf20, 0x3cc3, 0xf01e, 0xa202, 0xe42e, 0xa200, 0xe42e,
+ 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xa206, 0xe41e, 0x045f,
+ 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0x3cef,
+ 0xa226, 0xe41e, 0x0473, 0xe161, 0x07e0, 0x8911, 0x0034, 0x8911,
+ 0x0033, 0x8911, 0x0035, 0x8911, 0x0036, 0x8911, 0x0037, 0x8911,
+ 0x0038, 0x2111, 0x4d11, 0xcc60, 0xe0c2, 0x007d, 0x2111, 0x4d11,
+ 0xcc62, 0x2111, 0x4d11, 0xcc64, 0x2111, 0x4d11, 0xcc72, 0xe0c2,
+ 0x007e, 0xe161, 0x00f9, 0x2111, 0x4d11, 0xce88, 0xe0c2, 0x007f,
+ 0x2111, 0x4d11, 0xce84, 0x2111, 0x4d11, 0xce80, 0xe42e, 0xe161,
+ 0x07e0, 0x8b11, 0x0034, 0x8b11, 0x0033, 0x8b11, 0x0035, 0x8b11,
+ 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038, 0xc860, 0x3511, 0x3d11,
+ 0xe0c2, 0x007d, 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511, 0x3d11,
+ 0xc872, 0x3511, 0x3d11, 0xe0c2, 0x007e, 0xe161, 0x00f9, 0xca88,
+ 0x3511, 0x3d11, 0xe0c2, 0x007f, 0xca84, 0x3511, 0x3d11, 0xca80,
+ 0x3511, 0x3d11, 0xf06e, 0xe161, 0x07e0, 0xa200, 0xc70f, 0x3d11,
+ 0xa224, 0xe41e, 0x0473, 0xa204, 0xe41e, 0x045f, 0xe42e, 0x3ced,
+ 0xd112, 0x0800, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xce20, 0xd111, 0x0000, 0x88ed, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0x2aef, 0xa80f, 0xa10b, 0xe42b, 0x3ced,
+ 0xd112, 0x0100, 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xce20, 0xd111, 0x0000, 0x88ed, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0x2824, 0xa83e, 0xae06, 0xcf80, 0xd1f3,
+ 0x0000, 0x2835, 0xcfe4, 0xa200, 0xcfc2, 0xd1e8, 0x0055, 0x2850,
+ 0xa102, 0xae02, 0x4c26, 0xae06, 0xcf00, 0xd1d3, 0x000d, 0xd185,
+ 0x0001, 0xe41e, 0x0cc7, 0xe41e, 0x0cca, 0x281b, 0xe418, 0x0382,
+ 0xe41e, 0x04cc, 0x283c, 0x3c2b, 0xe41e, 0x0d15, 0x2829, 0xf05a,
+ 0x281e, 0xa002, 0xa802, 0x3c1e, 0xe41e, 0x06fc, 0xe41e, 0x05bb,
+ 0xa200, 0x3c53, 0x3c1f, 0x2831, 0xf028, 0x3ccf, 0xe41e, 0x0517,
+ 0x2853, 0x1852, 0xf7c4, 0x28cf, 0xa002, 0x3ccf, 0xe41e, 0x087c,
+ 0x2815, 0xe418, 0x0a8e, 0xe42e, 0xe0c0, 0x0065, 0xa804, 0xf06a,
+ 0xa200, 0x3c2a, 0x3cb6, 0xe016, 0x3c8d, 0x2814, 0xf048, 0x2c2a,
+ 0xf07a, 0xf0ae, 0x28b6, 0xf04a, 0x2a14, 0xe046, 0xf058, 0x3c29,
+ 0xa202, 0x3cb6, 0xf05e, 0xa202, 0x3c29, 0x08b6, 0x3cb6, 0xa200,
+ 0x3c77, 0xe0c0, 0x0065, 0xa802, 0xe418, 0x0501, 0xe0c0, 0x0063,
+ 0x3c3c, 0x2815, 0xf09a, 0x2829, 0xe418, 0x0a49, 0xe41e, 0x0a4a,
+ 0x3c3c, 0xe419, 0x0501, 0x2c2a, 0xe016, 0x3c31, 0xa004, 0x3c2f,
+ 0xe42e, 0xa202, 0x3c29, 0x3c77, 0x8435, 0xc786, 0xe018, 0xe000,
+ 0x0570, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0060, 0x2117, 0x4d17,
+ 0xe0c2, 0x0061, 0x2117, 0x4d17, 0xe0c2, 0x0062, 0xe42e, 0x2a31,
+ 0xa20a, 0xb636, 0x3c30, 0xe41e, 0x0661, 0xe41e, 0x061b, 0xa202,
+ 0x3ccb, 0xe41e, 0x052e, 0xe41e, 0x064e, 0xe41e, 0x0688, 0x281a,
+ 0xe418, 0x034f, 0x281f, 0xa002, 0x3c1f, 0xe42e, 0x282b, 0xcf96,
+ 0x282c, 0xae0a, 0x2a2d, 0xa83f, 0xe056, 0xae0a, 0x2a2e, 0xa83f,
+ 0xe056, 0xcf30, 0x2829, 0xcfc4, 0xcf82, 0xd188, 0x0001, 0xa200,
+ 0xcf86, 0x3c3a, 0xa202, 0x3c3b, 0x2853, 0xe002, 0x000f, 0xe408,
+ 0x054a, 0xe190, 0xe41e, 0x056d, 0xe41e, 0x05be, 0x8a5e, 0x0039,
+ 0x2819, 0xe418, 0x032e, 0xe41e, 0x0582, 0xc872, 0x1c5e, 0xe008,
+ 0xffff, 0x3c5f, 0x2a15, 0xcb96, 0xe419, 0x0b17, 0x2853, 0x1852,
+ 0xf042, 0x283a, 0xe40a, 0x0544, 0xcb86, 0xf02a, 0xbbfc, 0x2a15,
+ 0xcb96, 0xf02b, 0x3c2b, 0xa202, 0xe42e, 0x2837, 0x2a38, 0xe42a,
+ 0xe409, 0x0577, 0xc870, 0x1c39, 0xe424, 0xe40e, 0x057f, 0x283b,
+ 0x1839, 0x2a3b, 0xa003, 0x3e3b, 0xe428, 0xa202, 0x3c3b, 0xa202,
+ 0x3c3a, 0xe42e, 0xd185, 0x0002, 0xd186, 0x0000, 0x2855, 0xae02,
+ 0x4c54, 0xcf8a, 0x2859, 0xcf94, 0xa200, 0xcfdc, 0xcf84, 0x2858,
+ 0xcfd2, 0xd1d0, 0x00c0, 0xcba0, 0xf7f8, 0x2854, 0xf16a, 0xcb18,
+ 0x3c00, 0x2855, 0xf088, 0xe0c0, 0x0121, 0xcf8c, 0xe0c0, 0x0122,
+ 0xcf8e, 0xf07e, 0x2856, 0x4400, 0xa104, 0xe012, 0xae38, 0xcf8c,
+ 0x2857, 0x4400, 0xcf90, 0xf03e, 0xcbd2, 0xcf9a, 0xd1d0, 0x003f,
+ 0xcba0, 0xf7f8, 0xe41e, 0x0d04, 0xd186, 0x0001, 0xd185, 0x0004,
+ 0xcb06, 0x3c53, 0xe42e, 0xe41e, 0x081a, 0xe42e, 0xe41e, 0x0847,
+ 0xe42e, 0xe004, 0x0042, 0xba8e, 0xbac0, 0xbac0, 0xbac0, 0xbac4,
+ 0xa23d, 0xba8f, 0xa200, 0xbbfc, 0x2810, 0xa108, 0xbbfc, 0x2811,
+ 0xbbfc, 0x2813, 0xbbfc, 0xbac0, 0x2850, 0xa102, 0xbbfc, 0x2851,
+ 0xa102, 0xbbfc, 0xbae0, 0xbae0, 0x2878, 0xf038, 0xbac0, 0xf0fe,
+ 0xbae0, 0x2879, 0xaf02, 0xbbfc, 0x287a, 0xaf02, 0xbbfc, 0x287b,
+ 0xaf02, 0xbbfc, 0x287c, 0xaf02, 0xbbfc, 0xe190, 0xbac0, 0xe41e,
+ 0x064e, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa200, 0xbbfc,
+ 0xa200, 0xbbfc, 0xbac0, 0x2820, 0xba80, 0x2821, 0xbbfc, 0xe408,
+ 0x0618, 0x2822, 0xbbfc, 0xa200, 0xbbfc, 0xbac0, 0xbac1, 0x2823,
+ 0xa134, 0xbbfe, 0xa200, 0xbbfe, 0x2824, 0xbbfe, 0x2825, 0xba80,
+ 0x2826, 0xba80, 0x2827, 0xba80, 0xe41e, 0x064e, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0x2853, 0xbbfc, 0x2829, 0xe016, 0xae02,
+ 0xa00a, 0xbbfc, 0xa200, 0xbbfc, 0x2c2a, 0x7010, 0x2831, 0xf03a,
+ 0x28cf, 0xbbfc, 0x2829, 0xf03a, 0xbac0, 0xbac0, 0x282f, 0xe40a,
+ 0x0639, 0x2831, 0xe40a, 0x0638, 0xbac0, 0xbac0, 0xe40e, 0x0639,
+ 0xbac0, 0x282b, 0x1823, 0xbbfe, 0x2825, 0xe40a, 0x064a, 0x282c,
+ 0xbbfc, 0xa102, 0xe40a, 0x064a, 0x282d, 0xaf02, 0xbbfe, 0x282e,
+ 0xaf02, 0xbbfe, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xbae0, 0xc868,
+ 0xa80e, 0xe42a, 0xa110, 0xe012, 0x3c48, 0xa200, 0x7048, 0xe42e,
+ 0xa200, 0x3c40, 0xd142, 0x01ff, 0xd140, 0x0680, 0xd141, 0x0000,
+ 0xe42e, 0xc872, 0xa050, 0xcc72, 0x2840, 0xaf02, 0xe000, 0x0680,
+ 0xe098, 0x2840, 0xa802, 0x3c41, 0xa200, 0xe41e, 0x06e4, 0xa200,
+ 0xe41e, 0x06e4, 0xa200, 0xe41e, 0x06e4, 0xa202, 0xe41e, 0x06e4,
+ 0x282f, 0xae0a, 0x4c30, 0xe41e, 0x06e4, 0xe088, 0xe002, 0x0680,
+ 0xae02, 0x0841, 0x3c40, 0xe41e, 0x0d2c, 0xa2fe, 0x3c43, 0xe42e,
+ 0xc866, 0xe008, 0x007f, 0xe002, 0x0000, 0xae04, 0x3c45, 0xc868,
+ 0xaf06, 0x0845, 0x3c45, 0xe42a, 0xc86e, 0xe000, 0x0080, 0xcc6e,
+ 0xbadf, 0xc870, 0xa140, 0xcc70, 0xc872, 0xa140, 0xcc72, 0xe41e,
+ 0x06b5, 0xe42e, 0xc000, 0xc86e, 0xf06a, 0xd141, 0x0000, 0xe41e,
+ 0x06b5, 0xe42e, 0xd141, 0x0100, 0xe41e, 0x06b5, 0xe42e, 0xe004,
+ 0x0200, 0x3c45, 0xe41e, 0x06b5, 0xe42e, 0x2849, 0xf048, 0xd141,
+ 0x0000, 0xf03e, 0xd141, 0x0100, 0xd147, 0x0000, 0x8840, 0x0146,
+ 0x8843, 0x0145, 0x2845, 0xa102, 0xce86, 0xd149, 0x0000, 0xd148,
+ 0x0001, 0xca94, 0xf7fa, 0xa106, 0xf0b4, 0xe41e, 0x0d59, 0xd146,
+ 0x0000, 0xd148, 0x0001, 0xca94, 0xf7fa, 0xa106, 0xf77a, 0x8a40,
+ 0x0146, 0x8a43, 0x0145, 0x2840, 0xe002, 0x0200, 0xe428, 0xe41e,
+ 0x0d59, 0xa200, 0x3c40, 0xe42e, 0x2a41, 0xe409, 0x06ec, 0xae10,
+ 0x3d04, 0xe017, 0x3e41, 0xe42e, 0x4d04, 0x3d14, 0xe017, 0x3e41,
+ 0xe089, 0xe003, 0x0780, 0xe429, 0xe41e, 0x0d59, 0xe164, 0x0680,
+ 0xe42e, 0xa200, 0x3c34, 0xe42e, 0xe41e, 0x09ba, 0xa210, 0xe0c2,
+ 0x0100, 0x2a29, 0xa25e, 0xf029, 0xa250, 0xe0c2, 0x017c, 0xa200,
+ 0xe0c2, 0x017d, 0xe0c2, 0x013d, 0xe0c0, 0x0050, 0x3000, 0xaf02,
+ 0x3001, 0xaf02, 0x3002, 0xaf02, 0x3003, 0xaf04, 0x3005, 0xaf06,
+ 0x3006, 0xaf02, 0x3007, 0xaf02, 0x3008, 0xaf02, 0x3009, 0xaf04,
+ 0x300a, 0x2806, 0x4400, 0x3c00, 0x2807, 0x4401, 0x3c01, 0x2808,
+ 0x4402, 0x3c02, 0x2809, 0x4403, 0x3c03, 0x280a, 0x4405, 0x3c05,
+ 0xa200, 0xe0c2, 0x0168, 0x2a00, 0xf03b, 0xe00a, 0x0002, 0x2a01,
+ 0xf03b, 0xe00a, 0x0009, 0x2a02, 0xf03b, 0xe00a, 0x0020, 0x2a03,
+ 0xf03b, 0xe00a, 0x0040, 0x2a05, 0xf03b, 0xe00a, 0x0004, 0xe0c2,
+ 0x0169, 0xe0c1, 0x0041, 0xe004, 0x0000, 0xae10, 0xe042, 0x2a06,
+ 0xf03b, 0x20d0, 0x4cd1, 0xcf0e, 0xe0c1, 0x0041, 0xe004, 0x0040,
+ 0xae10, 0xe042, 0x2a07, 0xf03b, 0x20d2, 0x4cd3, 0xe0c2, 0x0103,
+ 0xa200, 0xe0c2, 0x0208, 0xa202, 0xe0c2, 0x0210, 0xe0c1, 0x0041,
+ 0xe004, 0x0070, 0xae10, 0xe042, 0x2a08, 0xf03b, 0x20d4, 0x4cd5,
+ 0xe0c2, 0x0211, 0xe000, 0x4000, 0x2a09, 0xf03b, 0x20d6, 0x4cd7,
+ 0xe0c2, 0x0212, 0xa202, 0xae02, 0xa902, 0xe0c2, 0x0312, 0xe0c0,
+ 0x0064, 0x3c76, 0x2a77, 0xf02b, 0xa200, 0xe0c2, 0x0138, 0x2850,
+ 0xae20, 0x4c51, 0xae08, 0xe0c2, 0x0101, 0x2a77, 0xaa03, 0x4676,
+ 0xa803, 0xf05b, 0x2851, 0xae20, 0x4c50, 0xae08, 0xe0c2, 0x0142,
+ 0xe0c0, 0x0044, 0xa81e, 0xae1a, 0x4c70, 0xe0c2, 0x0102, 0x2829,
+ 0xae06, 0xe0c2, 0x0104, 0xa210, 0xae0e, 0xe0c2, 0x0204, 0xe0c0,
+ 0x0060, 0xe0c2, 0x0143, 0xe0c0, 0x0061, 0xe0c2, 0x0144, 0xe0c0,
+ 0x0062, 0xe0c2, 0x0145, 0x2870, 0x2a77, 0xaa03, 0x4676, 0xa803,
+ 0xf02b, 0x2871, 0xe0c2, 0x0141, 0x8434, 0xc786, 0xe018, 0xe000,
+ 0x0570, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x020d, 0xe0c2, 0x0214,
+ 0x2117, 0x4d17, 0xe0c2, 0x020e, 0xe0c2, 0x0215, 0x2117, 0x4d17,
+ 0xe0c2, 0x020f, 0xe0c2, 0x0216, 0xa202, 0xe0c2, 0x0302, 0x8435,
+ 0xc786, 0xe018, 0xe000, 0x0570, 0xe09e, 0x2117, 0x4d17, 0xe0c2,
+ 0x0380, 0xe0c2, 0x0183, 0x2117, 0x4d17, 0xe0c2, 0x0381, 0x2117,
+ 0x4d17, 0xe0c2, 0x0382, 0xa200, 0xe0c2, 0x0302, 0x2834, 0xe0c2,
+ 0x0072, 0x3c35, 0xa002, 0x3c34, 0x1832, 0xf028, 0x3c34, 0xa228,
+ 0xae20, 0xe00a, 0x1111, 0xe0c2, 0x0119, 0xa200, 0xe0c2, 0x0113,
+ 0xe0c2, 0x022b, 0xe0c2, 0x030d, 0xe0c2, 0x0320, 0xe0c2, 0x030a,
+ 0xe0c2, 0x030b, 0xe004, 0x0055, 0xe0c2, 0x030c, 0xe004, 0x003f,
+ 0xe0c2, 0x012a, 0xa202, 0xe0c2, 0x0106, 0xe0c2, 0x0139, 0xe41e,
+ 0x0957, 0xe42e, 0xa2f6, 0x3c53, 0xe0c2, 0x003f, 0xa202, 0xe0c2,
+ 0x0110, 0xa2f8, 0x3c53, 0x2853, 0xe0c2, 0x003f, 0xa002, 0xf094,
+ 0xe41e, 0x0940, 0xa200, 0x3ccc, 0xe41e, 0x0cd3, 0xe41e, 0x0927,
+ 0xe41e, 0x09db, 0x2829, 0xe418, 0x09df, 0xa202, 0xe0c2, 0x0110,
+ 0x2829, 0xe0c2, 0x018b, 0x2829, 0xe418, 0x08f5, 0xe41e, 0x0890,
+ 0xe41e, 0x08d3, 0x2853, 0xa002, 0x3c53, 0xf5e4, 0xe42e, 0x2853,
+ 0xe0c2, 0x003f, 0xe002, 0x0062, 0xf028, 0xe190, 0x2852, 0x1853,
+ 0xa108, 0xa201, 0xb62d, 0x3e5a, 0xe41e, 0x0940, 0xe41e, 0x0ceb,
+ 0x283a, 0xe418, 0x0cca, 0xe41e, 0x0cd3, 0xe41e, 0x0927, 0xe41e,
+ 0x09db, 0x285a, 0xe016, 0x4429, 0xe418, 0x09df, 0xa202, 0xe0c2,
+ 0x0110, 0x285a, 0xe016, 0x4429, 0xe0c2, 0x018b, 0xe41e, 0x0915,
+ 0xe41e, 0x08e4, 0x285a, 0xf088, 0x2829, 0xe418, 0x08f5, 0xe41e,
+ 0x0890, 0xe41e, 0x08d3, 0xe42e, 0xe41e, 0x09db, 0x2852, 0xe0c2,
+ 0x003f, 0xa202, 0xe0c2, 0x0110, 0xe41e, 0x09db, 0xa202, 0xe0c2,
+ 0x0110, 0xe41e, 0x09db, 0xe0c0, 0x0118, 0xa802, 0xf7da, 0xe42e,
+ 0xe0c0, 0x015d, 0xe049, 0xaf20, 0xe009, 0xffff, 0xe066, 0xe0c1,
+ 0x015c, 0xe065, 0x283c, 0xaf04, 0xe000, 0x0430, 0xe09e, 0x1b07,
+ 0x28ce, 0xb62a, 0x3c01, 0xe0c0, 0x0197, 0x3c06, 0x2829, 0xe016,
+ 0x0b07, 0xf0c8, 0xe001, 0x0280, 0x1e06, 0xb62a, 0x2a1c, 0xf068,
+ 0xe419, 0x03a3, 0x2a01, 0xb615, 0x3e01, 0x3c00, 0x2877, 0xe016,
+ 0xf048, 0xa200, 0x3c00, 0x3c01, 0x2801, 0x2a3c, 0xa109, 0xb60e,
+ 0x3c01, 0x2801, 0xae02, 0x4c00, 0xe0c2, 0x0114, 0x2800, 0xe42a,
+ 0xe0c0, 0x0161, 0xaf20, 0x3c03, 0x2801, 0xe42a, 0xe0c0, 0x015e,
+ 0xaf20, 0x3c02, 0xe42e, 0x2853, 0xa806, 0xae04, 0xe000, 0x0200,
+ 0xe092, 0x2801, 0xae02, 0x4c00, 0x3d11, 0x2802, 0x3d11, 0x2803,
+ 0x3d11, 0x2804, 0x3d11, 0xe42e, 0x2853, 0xa806, 0xae04, 0xe000,
+ 0x0200, 0xe092, 0x2911, 0x3054, 0xaf02, 0x3055, 0x2911, 0x3c56,
+ 0x2911, 0x3c57, 0x2911, 0x3c58, 0xe42e, 0xe0c0, 0x0195, 0x3c04,
+ 0xae06, 0x4c04, 0xae06, 0x4c04, 0xae06, 0x4c04, 0x3c04, 0xe0c2,
+ 0x0309, 0x2853, 0xa806, 0xae06, 0xe000, 0x0210, 0xe092, 0xe162,
+ 0x0191, 0xe163, 0x03b0, 0xc420, 0xd022, 0x0003, 0xe184, 0x0913,
+ 0x9e12, 0x3511, 0x3d11, 0x9f33, 0xe42e, 0x2853, 0xa806, 0xae06,
+ 0xe000, 0x0210, 0xe092, 0xe005, 0x0080, 0xd022, 0x0003, 0xe184,
+ 0x0925, 0xcfd5, 0xa011, 0x2111, 0x4d11, 0xcfd6, 0xe42e, 0x2864,
+ 0xe0c2, 0x0120, 0x2862, 0xe0c2, 0x011b, 0x2853, 0xa002, 0xa806,
+ 0xae04, 0xe000, 0x0201, 0xe092, 0x2911, 0x4464, 0xa104, 0xe012,
+ 0xae38, 0xe0c2, 0x0121, 0x2901, 0x4464, 0xe0c2, 0x0123, 0xe42e,
+ 0x2805, 0x3c59, 0x2a15, 0x4629, 0x282b, 0xe419, 0x0ac2, 0x3c05,
+ 0x2805, 0x0824, 0xa400, 0xa566, 0xe000, 0x0450, 0xe09c, 0x2906,
+ 0xae0c, 0x4d06, 0xae0c, 0x4c05, 0xe0c2, 0x0115, 0xe42e, 0x2072,
+ 0x4c73, 0x2a0a, 0xf03b, 0x20d8, 0x4cd9, 0xe0c2, 0x0187, 0x2074,
+ 0x4c75, 0xe0c2, 0x0188, 0x2851, 0xae08, 0xa102, 0xae20, 0x2a50,
+ 0xae09, 0xa103, 0xe056, 0xe0c2, 0x0181, 0x2870, 0xe0c2, 0x0189,
+ 0xe0c2, 0x018a, 0xe0c0, 0x0060, 0xe0c2, 0x0182, 0xe0c0, 0x0044,
+ 0xe0c2, 0x0199, 0xa201, 0x282b, 0xa154, 0xf0c4, 0xa27f, 0xae03,
+ 0xa106, 0xf084, 0xae05, 0xa106, 0xf054, 0xae03, 0xa104, 0xf024,
+ 0xae03, 0x283c, 0xa558, 0xa41c, 0xaf02, 0xa10e, 0x0836, 0xa51e,
+ 0x3c04, 0xae04, 0xe000, 0x03f0, 0xe09e, 0x2117, 0x4d17, 0xe042,
+ 0xe0c2, 0x0184, 0x2107, 0x4d17, 0xe0c2, 0x0185, 0x2917, 0xe0c2,
+ 0x019a, 0x2804, 0xae04, 0xe000, 0x03b0, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x019f, 0x2117, 0x4d17, 0xe0c2, 0x019e, 0x2829, 0x2a6b,
+ 0xae05, 0xe056, 0xe0c2, 0x0186, 0xe004, 0x01a6, 0x4c29, 0xe0c2,
+ 0x0180, 0xe42e, 0xe004, 0x3211, 0xae20, 0xe00a, 0x2100, 0xe0c2,
+ 0x0155, 0xe004, 0x9211, 0xae20, 0xe00a, 0x2100, 0xe0c2, 0x0158,
+ 0xe004, 0x1000, 0xae20, 0xe00a, 0x0000, 0xe0c2, 0x0156, 0xe0c2,
+ 0x0159, 0xe004, 0x0104, 0xe0c2, 0x0154, 0xe0c2, 0x0157, 0xa202,
+ 0xe0c2, 0x015a, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xe0c0,
+ 0x018c, 0xf7e8, 0xe42e, 0xe0c0, 0x0198, 0xf7ea, 0xa200, 0xe0c2,
+ 0x0198, 0xe42e, 0xa254, 0x3ccd, 0xa268, 0x3c84, 0xa218, 0x3c86,
+ 0xa266, 0x2ac8, 0xf03b, 0xe0c0, 0x0072, 0x3c85, 0xa210, 0x3c87,
+ 0xe004, 0x0440, 0x3c88, 0x2814, 0x2a52, 0x3c89, 0x3e8f, 0x2c17,
+ 0xc710, 0x7c18, 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c8b, 0x3cbb,
+ 0xe004, 0x6000, 0x2ac7, 0xf03b, 0xe0c0, 0x0073, 0x3c8c, 0x2889,
+ 0xe016, 0x3c8a, 0xf06a, 0x288b, 0x3c89, 0xe004, 0x1000, 0x3c8c,
+ 0x8418, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e17, 0xe41e, 0x0bb2,
+ 0x3c98, 0x8498, 0x8280, 0xe018, 0xa279, 0xe41e, 0x0b9b, 0x3498,
+ 0x3c99, 0xae06, 0x2a84, 0xe41e, 0x0b9b, 0x349e, 0x3c9f, 0xa202,
+ 0x3c8d, 0xa205, 0x1a36, 0xae03, 0xa011, 0x3e94, 0x2a8f, 0x5a94,
+ 0xe013, 0x36ae, 0x3eaf, 0x28b9, 0x2ab8, 0xf049, 0xe41e, 0x0b40,
+ 0x64cd, 0x3c90, 0xa004, 0x6086, 0x6485, 0x3c91, 0xe41e, 0x0b64,
+ 0xe42e, 0xe42e, 0x2829, 0x3c8e, 0xa201, 0x3ead, 0x3ecc, 0xe418,
+ 0x0b22, 0xa200, 0x3ca0, 0x3ca1, 0x288e, 0xf238, 0x288d, 0xf05a,
+ 0xa200, 0x3c8d, 0x2890, 0xf31e, 0x2889, 0xa102, 0xf7ca, 0x2ab8,
+ 0xf03b, 0x2890, 0xf2ae, 0x848f, 0x82b5, 0xe019, 0xe04a, 0xaf02,
+ 0x00a2, 0x0ca3, 0xe41e, 0x0bb2, 0xa21f, 0x3e94, 0x2a89, 0xc70f,
+ 0x7e94, 0xe009, 0xffff, 0xa405, 0xe046, 0x6086, 0x64cd, 0xf15e,
+ 0xa200, 0x3c9c, 0x3c9d, 0x28c9, 0x3094, 0xaf02, 0x5494, 0xf08a,
+ 0x2891, 0xa104, 0x6093, 0x2a91, 0xa005, 0xe066, 0xf02e, 0x2891,
+ 0x2aad, 0xf02b, 0x2885, 0x3c93, 0x2aad, 0xe42e, 0xc872, 0xe41e,
+ 0x0b6d, 0x288e, 0xf0ea, 0x20a0, 0x4ca1, 0xc710, 0x7c8f, 0xe008,
+ 0xffff, 0xa002, 0xaf02, 0x3c91, 0x20a0, 0x4ca1, 0x00a2, 0x0ca3,
+ 0x34a2, 0x3ca3, 0x28b5, 0xa002, 0x3cb5, 0x288e, 0xf028, 0x3cb5,
+ 0x288e, 0xf0f8, 0x2a89, 0xa103, 0x20a6, 0x4ca7, 0xe41e, 0x0b9b,
+ 0x34aa, 0x3cab, 0x10a6, 0x1ca7, 0xe012, 0x34a8, 0x3ca9, 0xf0ae,
+ 0x22a8, 0x4ea9, 0x12aa, 0x1eab, 0x288a, 0xb606, 0xb611, 0x36a8,
+ 0x3ea9, 0xe42e, 0x28c9, 0xf07a, 0x2852, 0x1853, 0xa102, 0xf038,
+ 0x2805, 0xe42e, 0x229c, 0x4e9d, 0x209e, 0x4c9f, 0xe041, 0xf0c7,
+ 0xe045, 0xe045, 0x2893, 0xf0f5, 0x369c, 0x3e9d, 0xa002, 0x6086,
+ 0x6485, 0x3c93, 0xf08e, 0x369c, 0x3e9d, 0x2893, 0xa102, 0x6086,
+ 0x6485, 0x3c93, 0x2893, 0x6086, 0x6485, 0x3c93, 0x28cc, 0xa002,
+ 0x3ccc, 0x2ac9, 0xf08b, 0xa103, 0xf22b, 0xa103, 0xf07b, 0xa103,
+ 0xf0ab, 0xf24e, 0x2893, 0x3c94, 0xf21e, 0x28cb, 0xf18a, 0xa200,
+ 0x3ccb, 0xf06e, 0x28cc, 0x18ca, 0xf124, 0xa200, 0x3ccc, 0x2853,
+ 0xa002, 0xf04a, 0xcb97, 0xcb96, 0xf03e, 0x2a2b, 0x282b, 0xa105,
+ 0x6293, 0xa004, 0xe066, 0x3c93, 0x3c94, 0xf08e, 0xcb96, 0x3c94,
+ 0x2853, 0xa002, 0xf038, 0x282b, 0x3c94, 0x2894, 0xe42e, 0x00a0,
+ 0x0ca1, 0x34a0, 0x3ca1, 0x285f, 0x1892, 0x009c, 0x0c9d, 0x349c,
+ 0x3c9d, 0xe42e, 0x20a8, 0x4ca9, 0x10a6, 0x1ca7, 0x848c, 0xe41e,
+ 0x0be9, 0x0098, 0x0c99, 0xf052, 0x2aac, 0xf039, 0xa203, 0x3ead,
+ 0xe41e, 0x0b81, 0x2298, 0x4e99, 0xaf07, 0xe062, 0x349a, 0x3c9b,
+ 0xc710, 0x7c8f, 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c92, 0xe42e,
+ 0x8489, 0x2098, 0x4c99, 0xe41e, 0x0bdd, 0x8487, 0xe41e, 0x0bdd,
+ 0x2a89, 0xa103, 0x0a87, 0xe41e, 0x0b9b, 0x349a, 0x3c9b, 0x288f,
+ 0x3cb0, 0x209a, 0x4c9b, 0xae04, 0x009a, 0x0c9b, 0xae02, 0xc70f,
+ 0x7cb0, 0xe008, 0xffff, 0xaf08, 0xa010, 0xaf08, 0x0836, 0xa51e,
+ 0x0888, 0xe09e, 0x2907, 0xe42e, 0x8480, 0x8281, 0xe018, 0x34a4,
+ 0x3ca5, 0xa200, 0x34a6, 0x3ca7, 0xe42e, 0xe0c2, 0x007d, 0x1098,
+ 0x1c99, 0x00a6, 0x0ca7, 0xa27f, 0xae31, 0xe066, 0x34a6, 0x3ca7,
+ 0x22ae, 0x4eaf, 0xe046, 0xf032, 0x36a6, 0x3ea7, 0x20a6, 0x28a7,
+ 0xe42e, 0x2a81, 0xe42b, 0x22a4, 0x4ea5, 0x12a6, 0x1ea7, 0xe066,
+ 0xf051, 0x2aac, 0xf039, 0xa203, 0x3ead, 0x2282, 0x4e83, 0xe42b,
+ 0x22a4, 0x4ea5, 0x12a6, 0x1ea7, 0x0298, 0x0e99, 0x1282, 0x1e83,
+ 0xa401, 0xe062, 0xe42e, 0x3eb0, 0xa201, 0xf032, 0xe012, 0xa203,
+ 0x3eb4, 0x3cb1, 0xaf20, 0xc70f, 0x7cb0, 0x3cb2, 0xaf20, 0xae20,
+ 0x4cb1, 0xc70f, 0x7cb0, 0x3cb3, 0x20b2, 0x4cb3, 0x2ab4, 0xe42b,
+ 0xe012, 0xe42e, 0x36b0, 0x3eb1, 0xa201, 0x3eb2, 0x22b0, 0x4eb1,
+ 0x5ab2, 0xe045, 0xf061, 0x2ab2, 0xa003, 0x3eb2, 0xa121, 0xf775,
+ 0x2ab2, 0xf039, 0xa200, 0xe42e, 0xa103, 0x3eb2, 0xcc45, 0xa201,
+ 0x3eb3, 0xe184, 0x0bda, 0x2ab3, 0xae03, 0x3eb3, 0x22b0, 0x4eb1,
+ 0x5ab2, 0xe045, 0xf061, 0xe013, 0xe04a, 0x2ab3, 0xa003, 0x3eb3,
+ 0x2ab2, 0xa103, 0x3eb2, 0x28b3, 0xe42e, 0xae02, 0x34b1, 0xe008,
+ 0xffff, 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xae1e, 0x82b0, 0xe01c,
+ 0xe42e, 0xae02, 0x34b1, 0xe008, 0xffff, 0xaf02, 0x3cb0, 0x82b0,
+ 0xe018, 0xaf1e, 0x82b1, 0xe01c, 0xe42e, 0xae02, 0x34b1, 0xe008,
+ 0xffff, 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xa103, 0x3eb2, 0x58b2,
+ 0x82b0, 0xa11f, 0xe013, 0x3eb2, 0xe019, 0x5eb2, 0xe042, 0xe42e,
+ 0x34bd, 0x3cbc, 0x28bd, 0xa002, 0x3cbd, 0x2cbc, 0xc710, 0x7cbd,
+ 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c8b, 0x18bb, 0xe42a, 0x288b,
+ 0x3cbb, 0x28bc, 0x2abd, 0x3c17, 0x3e18, 0x8418, 0xe182, 0x7530,
+ 0xe018, 0xae02, 0x2e17, 0xe41e, 0x0bb2, 0x3c98, 0x8498, 0x8280,
+ 0xe018, 0xa279, 0xe41e, 0x0b9b, 0x3498, 0x3c99, 0xae06, 0x2a84,
+ 0xe41e, 0x0b9b, 0x349e, 0x3c9f, 0xa200, 0x3cb5, 0x34a2, 0x3ca3,
+ 0x2889, 0xe428, 0xe016, 0x3c8a, 0x288b, 0x3c89, 0xe42e, 0x3cb7,
+ 0x2a89, 0xe046, 0xf028, 0xe42e, 0x28b6, 0x2ab7, 0xe046, 0xf034,
+ 0xa200, 0x3cb6, 0x28b7, 0x3c89, 0x3c14, 0x2815, 0xe42a, 0x2889,
+ 0xe016, 0x3c8a, 0xf03a, 0x2a8b, 0x3e89, 0x2a89, 0x28b6, 0xe045,
+ 0xf0c6, 0x20a6, 0x4ca7, 0xe41e, 0x0b9b, 0x34aa, 0x3cab, 0x10a6,
+ 0x1ca7, 0xe012, 0x34a8, 0x3ca9, 0xe42e, 0x3cba, 0x2815, 0xe42a,
+ 0x2880, 0x2aba, 0xe046, 0xe42a, 0x3e80, 0x8418, 0xe182, 0x7530,
+ 0xe018, 0xae02, 0x2e17, 0xe41e, 0x0bb2, 0x3c98, 0x8498, 0x8280,
+ 0xe018, 0xa279, 0xe41e, 0x0b9b, 0x3498, 0x3c99, 0xae06, 0x2a84,
+ 0xe41e, 0x0b9b, 0x349e, 0x3c9f, 0xa200, 0x3cb5, 0x34a2, 0x3ca3,
+ 0xe42e, 0x2a15, 0xe42b, 0xf042, 0xa201, 0x3eb8, 0xe42e, 0x3cb9,
+ 0x3c90, 0xa203, 0x3eb8, 0xe42e, 0xe0c1, 0x0060, 0xa803, 0xf05b,
+ 0xe0c0, 0x0061, 0xe41e, 0x0c3f, 0xe0c1, 0x0060, 0xa805, 0xf05b,
+ 0xe0c0, 0x0062, 0xe41e, 0x0c89, 0xe0c1, 0x0060, 0xa809, 0xf05b,
+ 0xe0c0, 0x0063, 0xe41e, 0x0c65, 0xe0c1, 0x0060, 0xa811, 0xf05b,
+ 0xe0c0, 0x0064, 0xe41e, 0x0c08, 0xe0c1, 0x0060, 0xa821, 0xf04b,
+ 0xe0c0, 0x0065, 0x3c1c, 0xe0c1, 0x0060, 0xa841, 0xf08b, 0xe0c0,
+ 0x0066, 0x3037, 0xaf02, 0x3038, 0xaf02, 0x3c39, 0xe42e, 0xa200,
+ 0x3c63, 0xe42e, 0xe161, 0x0100, 0xa200, 0xe188, 0x007f, 0x3d11,
+ 0xe41e, 0x0d0c, 0xe42e, 0x2863, 0xe41a, 0x0d0c, 0x2863, 0xe000,
+ 0x0101, 0xe09c, 0x2860, 0xae02, 0x4c61, 0xae02, 0x4d0e, 0xae02,
+ 0x4d06, 0xae02, 0x4c60, 0x3c64, 0x2863, 0xe000, 0x0180, 0xe09c,
+ 0x2906, 0x3c62, 0xe42e, 0x2853, 0xa806, 0xae04, 0xe000, 0x0200,
+ 0xe092, 0x2863, 0xe000, 0x0100, 0xe09c, 0x2906, 0x3c61, 0x2826,
+ 0xe016, 0x4d01, 0xa802, 0x3d06, 0x3c60, 0x2863, 0xa002, 0x3c63,
+ 0x1850, 0xe428, 0x3c63, 0xe42e, 0xcb04, 0xaf20, 0xe000, 0x0180,
+ 0xe09c, 0xcb54, 0x3d06, 0xe42e, 0xa200, 0x3c60, 0x3c61, 0xe42e,
+ 0xa200, 0x3cc2, 0x3cc4, 0x3cc5, 0xe42e, 0xa200, 0x3c1d, 0xe42e,
+ 0xa200, 0x3c4d, 0xe0c0, 0x0060, 0x344a, 0x3c4b, 0xe0c0, 0x0061,
+ 0xae04, 0x3c4c, 0xe41e, 0x0d2c, 0xe41e, 0x0db3, 0xd071, 0x802a,
+ 0xe181, 0xe41e, 0x0658, 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000,
+ 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0080,
+ 0xd038, 0x0000, 0xa200, 0x3c49, 0xe42e, 0xe41e, 0x06af, 0x2849,
+ 0xf068, 0xa202, 0x3c49, 0xd037, 0x0000, 0xe470, 0xa200, 0x3c49,
+ 0xd037, 0x0080, 0xe470, 0xd141, 0x0000, 0xe41e, 0x06af, 0xd037,
+ 0x0000, 0xe470, 0xd141, 0x0100, 0xe41e, 0x06af, 0xd037, 0x0080,
+ 0xe470, 0xd111, 0x0680, 0xe082, 0x3c4e, 0xe004, 0x0048, 0xe092,
+ 0xe41e, 0x0dbd, 0x204a, 0x4c4b, 0x2e4d, 0xae11, 0xe042, 0xce20,
+ 0x8111, 0x9f01, 0xd112, 0x0100, 0xe0c0, 0x0043, 0xa806, 0xae02,
+ 0xa000, 0xce26, 0xca28, 0xf7f8, 0xa200, 0xe0c2, 0x0074, 0x2c4d,
+ 0xe000, 0x0002, 0x3c4d, 0x1c4c, 0xf064, 0x2abf, 0xe01b, 0xe0c3,
+ 0x0074, 0x3c4d, 0x204a, 0x4c4b, 0x2e4d, 0xae11, 0xe042, 0x9f01,
+ 0x284e, 0xe092, 0xe42e, 0xe41e, 0x0d59, 0xe004, 0x0049, 0xe092,
+ 0x9e01, 0x0840, 0xe002, 0x0200, 0x9f01, 0xe42e, 0xd111, 0x0680,
+ 0xe004, 0x0048, 0xe092, 0xe41e, 0x0dbd, 0x204a, 0x4c4b, 0x2e4d,
+ 0xae11, 0xe042, 0xce20, 0x8111, 0x9f01, 0xd112, 0x0100, 0xe0c0,
+ 0x0043, 0xa806, 0xae02, 0xa000, 0xce26, 0xca28, 0xf7f8, 0x9e01,
+ 0x0840, 0x9f01, 0xe42e, 0x204a, 0x4c4b, 0x2e4d, 0xae11, 0xe042,
+ 0xe005, 0x0049, 0xe093, 0x9f01, 0xe42e, 0xe0c1, 0x0043, 0xa809,
+ 0xe429, 0x2abf, 0xe429, 0xa200, 0x3c4f, 0x204a, 0x4c4b, 0x2e4d,
+ 0xae11, 0xe042, 0x9e81, 0xe045, 0xf041, 0x2c4c, 0xae10, 0xe041,
+ 0xe003, 0x0200, 0xe421, 0x284f, 0xf718, 0xe0c0, 0x005c, 0xe008,
+ 0x8000, 0xf6ca, 0xe0c0, 0x005d, 0xe00a, 0x8000, 0xe0c2, 0x005d,
+ 0xa202, 0xce00, 0x3c4f, 0xf62e, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x000f, 0x0d0b, 0x0907, 0x0501, 0x000f, 0x0d0b, 0x0907, 0x0501,
+ 0x001e, 0x1a16, 0x120e, 0x0a02, 0x001e, 0x1a16, 0x120e, 0x0a02,
+ 0x002d, 0x2721, 0x1b15, 0x0f03, 0x003c, 0x342c, 0x241c, 0x1404,
+ 0x004b, 0x4137, 0x2d23, 0x1905, 0x005a, 0x4e42, 0x362a, 0x1e06,
+ 0x0069, 0x5b4d, 0x3f31, 0x2307, 0x0078, 0x6858, 0x4838, 0x2808,
+ 0x0087, 0x7563, 0x513f, 0x2d09, 0x00a5, 0x8f79, 0x634d, 0x370b,
+ 0x00c3, 0xa98f, 0x755b, 0x410d, 0x00e1, 0xc3a5, 0x8769, 0x4b0f,
+ 0x00e1, 0xc3a5, 0x8769, 0x4b0f, 0x00e1, 0xc3a5, 0x8769, 0x4b0f,
+ 0x0020, 0x0008, 0x0008, 0x0008, 0x0030, 0x0008, 0x0010, 0x0008,
+ 0x0030, 0x0008, 0x0010, 0x0008, 0x0040, 0x0008, 0x0018, 0x0008,
+ 0x0050, 0x0010, 0x0018, 0x0010, 0x0060, 0x0018, 0x0020, 0x0018,
+ 0x0080, 0x0018, 0x0040, 0x0018, 0x00a0, 0x0020, 0x0060, 0x0020,
+ 0x00c0, 0x0030, 0x0080, 0x0030, 0x0100, 0x0040, 0x00c0, 0x0040,
+ 0x0140, 0x0060, 0x0100, 0x0060, 0x0180, 0x0070, 0x0140, 0x0070,
+ 0x01c0, 0x0080, 0x0180, 0x0080, 0x0200, 0x00a0, 0x01c0, 0x00a0,
+ 0x0300, 0x0180, 0x0200, 0x0180, 0x0400, 0x0200, 0x0240, 0x0200,
+ 0x0080, 0x00a0, 0x00c0, 0x0100, 0x0180, 0x0200, 0x0300, 0x0400,
+ 0x0500, 0x0600, 0x0800, 0x0a00, 0x0c00, 0x0000, 0x0000, 0x0000,
+ 0x0028, 0x0027, 0x0027, 0x0026, 0x0026, 0x0025, 0x0024, 0x0023,
+ 0x0022, 0x0021, 0x0020, 0x001f, 0x001e, 0x001d, 0x001c, 0x001b,
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001d, 0x001e,
+ 0x001f, 0x0020, 0x0020, 0x0021, 0x0022, 0x0022, 0x0023, 0x0023,
+ 0x0024, 0x0024, 0x0025, 0x0025, 0x0025, 0x0026, 0x0026, 0x0026,
+ 0x0027, 0x0027, 0x0027, 0x0027, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0149,
+ 0xe470, 0xe190, 0xe40e, 0x012b, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xa2fe, 0x3cee, 0x3cef, 0xe0c0, 0x005c,
+ 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0, 0x005c, 0xe0c1,
+ 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d,
+ 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e, 0x0061, 0xe0c0,
+ 0x005b, 0x18ef, 0xe418, 0x0078, 0xe0c0, 0x005a, 0x18ee, 0xe418,
+ 0x0071, 0xe0c0, 0x0059, 0xae02, 0xe000, 0x012b, 0xe16a, 0xc000,
+ 0xe67c, 0xe0c0, 0x005a, 0x3cee, 0xe0c0, 0x005b, 0x3cef, 0xe40e,
+ 0x0035, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008,
+ 0xe0c0, 0x0059, 0xf7ea, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xe42e, 0x28ee, 0xe424, 0xe41e, 0x00e9, 0xe41e, 0x00a5, 0xe42e,
+ 0xe0c0, 0x005b, 0xf1ea, 0xa102, 0xf1ba, 0xa102, 0xf18a, 0xa102,
+ 0xf15a, 0xa102, 0xf12a, 0xa102, 0xf0fa, 0xa106, 0xf0ca, 0xa104,
+ 0xf09a, 0xa102, 0xf07a, 0xa104, 0xf03a, 0xa200, 0xf0ae, 0xa008,
+ 0xa004, 0xa008, 0xa004, 0xa008, 0xa018, 0xa00c, 0xa00c, 0xa018,
+ 0xae16, 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112,
+ 0x1800, 0xd113, 0x0005, 0xe1e1, 0xe42e, 0xe0c0, 0x0041, 0xe005,
+ 0x0000, 0xae11, 0xe042, 0xe0c1, 0x005a, 0xae19, 0xe042, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0800, 0xd113, 0x0001, 0xca28, 0xf7f8,
+ 0xe0c0, 0x0041, 0xe005, 0x0040, 0xae11, 0xe042, 0xe0c1, 0x005a,
+ 0xae15, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100, 0xd113,
+ 0x0009, 0xca28, 0xf7f8, 0xe161, 0x00f0, 0x8911, 0x0034, 0x8911,
+ 0x0033, 0x8911, 0x0035, 0x8911, 0x0036, 0x8911, 0x0037, 0x8911,
+ 0x0038, 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11, 0xcc62, 0x2111,
+ 0x4d11, 0xcc64, 0x2111, 0x4d11, 0xcc72, 0x2111, 0x4d11, 0xce88,
+ 0xe42e, 0xe161, 0x00f0, 0x8b11, 0x0034, 0x8b11, 0x0033, 0x8b11,
+ 0x0035, 0x8b11, 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038, 0xc860,
+ 0x3511, 0x3d11, 0xc862, 0x3511, 0x3d11, 0xc864, 0x3511, 0x3d11,
+ 0xc872, 0x3511, 0x3d11, 0xca88, 0x3511, 0x3d11, 0xe0c0, 0x0041,
+ 0xe005, 0x0000, 0xae11, 0xe042, 0x2aee, 0xae19, 0xe042, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0800, 0xd113, 0x0000, 0xca28, 0xf7f8,
+ 0xe0c0, 0x0041, 0xe005, 0x0040, 0xae11, 0xe042, 0x2aee, 0xae15,
+ 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100, 0xd113, 0x0008,
+ 0xca28, 0xf7f8, 0xe42e, 0xe40e, 0x03e5, 0xe40e, 0x014b, 0xe40e,
+ 0x014f, 0xe40e, 0x0153, 0xe40e, 0x015b, 0xe40e, 0x0059, 0xe40e,
+ 0x0059, 0xe40e, 0x015f, 0xe40e, 0x0059, 0xe40e, 0x0059, 0xe40e,
+ 0x0059, 0xe40e, 0x0059, 0xe40e, 0x0059, 0xe40e, 0x0059, 0xe40e,
+ 0x0059, 0xe40e, 0x0059, 0xe41e, 0x0171, 0xe40e, 0x0059, 0xe41e,
+ 0x01bc, 0xe40e, 0x0059, 0x2806, 0xa184, 0xe41a, 0x0163, 0xe41e,
+ 0x01bd, 0xe40e, 0x0059, 0xe41e, 0x024f, 0xe40e, 0x0059, 0xe41e,
+ 0x0261, 0xe40e, 0x0059, 0xe0c0, 0x0040, 0xa219, 0xae15, 0xe042,
+ 0xce20, 0xd111, 0x0000, 0xd112, 0x1800, 0xd113, 0x0005, 0xe1e1,
+ 0xe42e, 0xd130, 0x0000, 0xa200, 0xc401, 0xe188, 0x07ff, 0x3d11,
+ 0xe41e, 0x027d, 0xa2fe, 0x3c10, 0x3c20, 0x3c48, 0xa200, 0x3cd6,
+ 0xa200, 0x3c4d, 0xe41e, 0x037a, 0xe41e, 0x0aaf, 0xe41e, 0x106b,
+ 0xe41e, 0x029b, 0x28ad, 0xa10e, 0xf7c8, 0xe41e, 0x0ac2, 0xe41e,
+ 0x0394, 0xe128, 0xe41e, 0x0580, 0xf74a, 0xa2fe, 0x3c10, 0x2050,
+ 0x4c51, 0xae08, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0072, 0xe0c0,
+ 0x0062, 0xaf02, 0x301e, 0xf0da, 0x2813, 0xa104, 0xf0aa, 0x28df,
+ 0xa004, 0xe0c2, 0x0073, 0x28de, 0x3cdc, 0xe0c2, 0x0074, 0xf09e,
+ 0x2816, 0xa004, 0xe0c2, 0x0073, 0xa200, 0xe0c2, 0x0074, 0x3cdc,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xe42e, 0xa200, 0xcc4a, 0xcc4c,
+ 0x3c4e, 0xe41e, 0x109e, 0xe40a, 0x0230, 0xd130, 0x0000, 0xd1e0,
+ 0x0003, 0xd1ff, 0x03b0, 0xd199, 0x0224, 0xd03a, 0x0000, 0xd04b,
+ 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000, 0xa202, 0x3c49, 0x282f,
+ 0xe002, 0x00a8, 0xf028, 0xe190, 0xe41e, 0x029b, 0x28ad, 0xf7da,
+ 0xa102, 0xf30a, 0xa108, 0xf794, 0xf2da, 0xa102, 0xf17a, 0xa102,
+ 0xf0fa, 0xa102, 0xf10a, 0xa102, 0xf14a, 0xa102, 0xf16a, 0xa102,
+ 0xf14a, 0xa102, 0xf13a, 0xa10e, 0xf682, 0xe40e, 0x0210, 0xe41e,
+ 0x0ac2, 0xf17e, 0xe41e, 0x0ae9, 0xf14e, 0xe41e, 0x07ce, 0xf11e,
+ 0xba44, 0xe41e, 0x04ab, 0xf0de, 0xf0ce, 0xba0e, 0xe002, 0x00ff,
+ 0xf058, 0xba4e, 0xe41e, 0x033d, 0xf798, 0xe41e, 0x04ab, 0xf4de,
+ 0xf4ce, 0xa2fe, 0x3cc1, 0xe41e, 0x0bdc, 0xf47a, 0xa200, 0x3c49,
+ 0xe41e, 0x10c6, 0x282f, 0xa002, 0x3c2f, 0x28ac, 0x4c34, 0xf048,
+ 0x28c1, 0xe41e, 0x1071, 0x28ac, 0xe418, 0x0d45, 0x2834, 0xe41a,
+ 0x0965, 0x28d3, 0x3cd7, 0x2832, 0xf04a, 0x2834, 0xe40a, 0x01d5,
+ 0xe41e, 0x098e, 0xe404, 0x01d5, 0xe0c2, 0x0071, 0x2848, 0xe412,
+ 0x107f, 0xe0c0, 0x0071, 0x3c48, 0x2830, 0xe0c2, 0x0073, 0x284e,
+ 0xe0c2, 0x0072, 0x2c4d, 0xa002, 0x3c4d, 0xe0c2, 0x0070, 0xc84a,
+ 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xa202, 0xe42e, 0xe0c0,
+ 0x0042, 0xce20, 0xd111, 0x0600, 0xd112, 0x0100, 0xd113, 0x0001,
+ 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0x3cd4, 0xe0c0, 0x0061, 0x3c70,
+ 0xe42e, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080,
+ 0xd113, 0x0009, 0xca28, 0xf7f8, 0xe0c0, 0x0061, 0x3ca5, 0xa202,
+ 0x3ca2, 0xe41e, 0x0394, 0xe128, 0xe0c0, 0x0060, 0xf048, 0xe41e,
+ 0x0ac2, 0xf03e, 0xe41e, 0x0ae9, 0xe42e, 0xe0c0, 0x0040, 0xe000,
+ 0x2e00, 0xce20, 0xd111, 0x0500, 0xd112, 0x0100, 0xd113, 0x0001,
+ 0xca28, 0xf7f8, 0xe42e, 0xe164, 0x0700, 0x2514, 0x4d14, 0xce88,
+ 0xa208, 0x3ca0, 0xd142, 0x01ff, 0xd143, 0x01ff, 0xd140, 0x0700,
+ 0xd141, 0x0000, 0xe42e, 0x28a0, 0xaf02, 0xe000, 0x0700, 0xe098,
+ 0x28a0, 0xa802, 0x3ca1, 0xca88, 0xaf10, 0xa102, 0xf04a, 0xe41e,
+ 0x0320, 0xf7ae, 0xca88, 0xe008, 0x00ff, 0x3c00, 0xaf0e, 0xf788,
+ 0x2800, 0xaf0a, 0x3cac, 0x2800, 0xa83e, 0x3cad, 0xa10a, 0xe016,
+ 0x3cae, 0xe088, 0xe002, 0x0700, 0xae02, 0x08a1, 0x3ca0, 0xa200,
+ 0x3ca6, 0x3ca5, 0x3ca7, 0xd149, 0x0000, 0x88a0, 0x0146, 0xe41e,
+ 0x02d2, 0xe41e, 0x0394, 0xe128, 0xe42e, 0x88a4, 0x0149, 0xe41e,
+ 0x02d2, 0xe42e, 0x28a7, 0x44a8, 0xf048, 0xd141, 0x0000, 0xf03e,
+ 0xd141, 0x0100, 0xd140, 0x0700, 0x88a0, 0x0146, 0xd143, 0x01ff,
+ 0xd147, 0x0000, 0xd148, 0x0000, 0xca94, 0xf7fa, 0xa106, 0xf0b4,
+ 0xe41e, 0x0407, 0xd146, 0x0000, 0xd148, 0x0000, 0xca94, 0xf7fa,
+ 0xa106, 0xf77a, 0xca94, 0xa802, 0xca8f, 0xa803, 0xf0f8, 0xf0eb,
+ 0xca8c, 0xe002, 0x0200, 0xf068, 0xe41e, 0x0407, 0xa200, 0x3ca0,
+ 0xce8c, 0xd148, 0x0000, 0xca94, 0xf7fa, 0xca94, 0xa802, 0x3ca2,
+ 0xcc92, 0xca8c, 0x3ca0, 0xca8e, 0x00a6, 0x0ca5, 0x34a6, 0x3ca5,
+ 0xcc90, 0x8aa4, 0x0149, 0xca8e, 0xe41a, 0x0320, 0x28a0, 0xe002,
+ 0x0200, 0xe428, 0xe41e, 0x0407, 0xa200, 0x3ca0, 0xce8c, 0xe42e,
+ 0x2aa1, 0x2904, 0xf099, 0xaf10, 0xca89, 0xae11, 0xe055, 0xce89,
+ 0xa203, 0x3ea1, 0xe42e, 0xe008, 0x00ff, 0xca89, 0xae11, 0xe055,
+ 0xce89, 0xa201, 0x3ea1, 0x8114, 0xe089, 0xe003, 0x0800, 0xe429,
+ 0xe41e, 0x0407, 0xe164, 0x0700, 0xe42e, 0x28a2, 0xe016, 0xc871,
+ 0xa011, 0xe428, 0xaf07, 0xe009, 0x07ff, 0x28a5, 0xe008, 0x07ff,
+ 0xe046, 0xf08a, 0xe049, 0xe011, 0xaf15, 0xe421, 0xe420, 0xa200,
+ 0xe42e, 0xc868, 0xa80e, 0xf028, 0xa210, 0x3c95, 0x7895, 0xa203,
+ 0x5a95, 0xaf03, 0xe046, 0xe42e, 0xe161, 0x05d1, 0x2901, 0xc871,
+ 0xa011, 0xaf07, 0xe009, 0x07ff, 0xe008, 0x07ff, 0xe046, 0xf08a,
+ 0xe049, 0xe011, 0xaf15, 0xe421, 0xe420, 0xa200, 0xe42e, 0xc868,
+ 0xa80e, 0xf028, 0xa210, 0x3c95, 0x7895, 0xa203, 0x5a95, 0xaf03,
+ 0xe046, 0xe42e, 0xa200, 0x3c9b, 0xe0c0, 0x0060, 0x3498, 0x3c99,
+ 0xe0c0, 0x0061, 0xae04, 0x3c9a, 0xe41e, 0x0394, 0xe41e, 0x042f,
+ 0xa200, 0x3c6b, 0xe41e, 0x03a3, 0xd071, 0x002a, 0xe181, 0xe41e,
+ 0x0407, 0xe41e, 0x028b, 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000,
+ 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x007f, 0xd037, 0x0000,
+ 0xd038, 0x0000, 0xe42e, 0x3c6c, 0xe08e, 0x3c6d, 0xe41e, 0x03af,
+ 0xe41e, 0x03ca, 0x286d, 0xe09e, 0x286c, 0x3c6b, 0xe42e, 0x286b,
+ 0xae08, 0xe000, 0x0470, 0xe09e, 0x8b17, 0x0033, 0x8b17, 0x0034,
+ 0x8b17, 0x0035, 0x8b17, 0x0036, 0x8b17, 0x0037, 0x8b17, 0x0038,
+ 0xc860, 0x3517, 0x3d17, 0xc862, 0x3517, 0x3d17, 0xc864, 0x3517,
+ 0x3d17, 0xe42e, 0x286c, 0xae08, 0xe000, 0x0470, 0xe09e, 0x8917,
+ 0x0033, 0x8917, 0x0034, 0x8917, 0x0035, 0x8917, 0x0036, 0x8917,
+ 0x0037, 0x8917, 0x0038, 0x2117, 0x4d17, 0xcc60, 0x2117, 0x4d17,
+ 0xcc62, 0x2117, 0x4d17, 0xcc64, 0xe42e, 0xc000, 0x286b, 0xf05a,
+ 0xa102, 0xf1ca, 0xa102, 0xf1aa, 0x28a2, 0xf158, 0xe41e, 0x02cd,
+ 0x28a7, 0xf11a, 0x28a8, 0xf088, 0xa202, 0x3ca8, 0xd037, 0x0000,
+ 0xd04c, 0x0000, 0xe470, 0xa200, 0x3ca8, 0xd037, 0x0080, 0xd04c,
+ 0x0000, 0xe470, 0xd04c, 0x0000, 0xe470, 0xe40e, 0x0b0f, 0xd111,
+ 0x0700, 0xe082, 0x3c9c, 0xe0c0, 0x005a, 0xae02, 0xe000, 0x0048,
+ 0xe092, 0xe41e, 0x043c, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042,
+ 0xce20, 0x9f01, 0xd112, 0x0100, 0xa202, 0xe0c1, 0x0043, 0xa803,
+ 0xb676, 0xce26, 0xca28, 0xe408, 0x0422, 0x2c9b, 0xe000, 0x0002,
+ 0x3c9b, 0x1c9a, 0xf024, 0x3c9b, 0x289c, 0xe092, 0xe42e, 0x2098,
+ 0x4c99, 0x2e9b, 0xae11, 0xe042, 0xe0c1, 0x005a, 0xae03, 0xe001,
+ 0x0048, 0xe093, 0x9f01, 0xe42e, 0xe0c1, 0x0043, 0xa805, 0xe429,
+ 0xa200, 0x3c9d, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0x8111,
+ 0x9e89, 0xe045, 0xf043, 0x2c9a, 0xae10, 0xe041, 0xe003, 0x0200,
+ 0xe421, 0x289d, 0xf708, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf6ba,
+ 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00,
+ 0x3c9d, 0xf61e, 0xba0c, 0xf03a, 0xbcfc, 0xe42e, 0xba4c, 0xa20c,
+ 0x3c96, 0x2896, 0xa002, 0x3c96, 0xa140, 0xf0d2, 0xba40, 0xf7aa,
+ 0x5896, 0xa102, 0x349e, 0x3c9f, 0x2896, 0xe41e, 0x049f, 0x009e,
+ 0x0c9f, 0xe42e, 0xe16b, 0xe42e, 0xba0c, 0xf03a, 0xbe7e, 0xe42e,
+ 0xba4c, 0xa20c, 0x3c96, 0x2896, 0xa002, 0x3c96, 0xa140, 0xf162,
+ 0xba40, 0xf7aa, 0x5896, 0xa102, 0x349e, 0x3c9f, 0x2896, 0xe41e,
+ 0x049f, 0x009e, 0x0c9f, 0x3c9f, 0x8c9f, 0x0000, 0xa002, 0xaf02,
+ 0xe012, 0xe42c, 0xe012, 0xe16a, 0xe42e, 0xe16b, 0xe42e, 0xa120,
+ 0xf050, 0xa020, 0x3c97, 0x7497, 0xe42e, 0x3c97, 0xba5e, 0x5897,
+ 0x7697, 0xe056, 0xe42e, 0xba40, 0xe42a, 0xc868, 0xa80e, 0x3c00,
+ 0xe016, 0xe428, 0x7400, 0xe016, 0xe42e, 0x2a30, 0xa103, 0x2826,
+ 0xe425, 0xf02b, 0x2827, 0xb7f4, 0xa002, 0x3c46, 0xa104, 0xe424,
+ 0xf04a, 0xa25a, 0x3c47, 0xe42e, 0xbc0e, 0x3c00, 0xe42d, 0x281f,
+ 0xf02a, 0xbc0e, 0x3c01, 0xe42d, 0x2801, 0xae06, 0x4c00, 0x3c47,
+ 0xe161, 0x02d0, 0x8840, 0x0022, 0xe41e, 0x0547, 0xe42d, 0x2830,
+ 0xa104, 0xe428, 0x2841, 0xe161, 0x0390, 0x8841, 0x0022, 0xe41e,
+ 0x0547, 0xe42e, 0xcb02, 0x3067, 0xaf02, 0x3065, 0xe004, 0x007f,
+ 0x3c00, 0xa002, 0xe012, 0x3c01, 0xe004, 0x03ff, 0x3c02, 0xa002,
+ 0xe012, 0x3c03, 0xa21e, 0x3c0c, 0xc440, 0xe161, 0x02d0, 0xcbd8,
+ 0x5c0c, 0xa83e, 0x3c0d, 0xcbda, 0x5c0c, 0xa83e, 0x3c0e, 0x280d,
+ 0xe41e, 0x1433, 0xf374, 0x280e, 0xe41e, 0x1433, 0xf334, 0x280d,
+ 0x2a65, 0xf059, 0xa83c, 0xe000, 0x0140, 0xf04e, 0xae02, 0xe000,
+ 0x0160, 0xe096, 0x280e, 0x2a65, 0xf059, 0xa83c, 0xe000, 0x0140,
+ 0xf04e, 0xae02, 0xe000, 0x0160, 0xe098, 0x2113, 0x4d0b, 0x1114,
+ 0x1d0c, 0xf18a, 0x2a3a, 0x4665, 0x20c7, 0x4cc8, 0xf07b, 0x2a67,
+ 0x20c9, 0x4cca, 0xf03b, 0x20cb, 0x4ccc, 0xe41e, 0x1410, 0xaf04,
+ 0xe000, 0x0040, 0xf074, 0xe002, 0x00c0, 0xf040, 0xe000, 0x0080,
+ 0xf02e, 0xa240, 0x3c08, 0xe004, 0x0040, 0x1808, 0x3d11, 0x2808,
+ 0x3d11, 0x280c, 0xa10a, 0x3c0c, 0xe402, 0x04f7, 0xe42e, 0xe004,
+ 0x01ff, 0x3c02, 0xaf02, 0x3c03, 0xe184, 0x057e, 0xba40, 0xf0aa,
+ 0xe41e, 0x047c, 0x4402, 0x3d11, 0xe41e, 0x047c, 0x4403, 0x3d11,
+ 0xf06e, 0xa202, 0x5800, 0x3d11, 0xa200, 0x3d11, 0x281f, 0xf058,
+ 0xe082, 0xa008, 0xe092, 0xf1be, 0xba40, 0xf12a, 0xe41e, 0x047c,
+ 0x4402, 0x3d11, 0xe41e, 0x047c, 0x4403, 0x3d11, 0xe41e, 0x047c,
+ 0x4402, 0x3d11, 0xe41e, 0x047c, 0x4403, 0x3d11, 0xf08e, 0xa202,
+ 0x5801, 0x3d11, 0xa201, 0x3f11, 0x3d11, 0x3f11, 0xe190, 0xe42e,
+ 0xba4e, 0x3c06, 0xa1c8, 0xba41, 0xba41, 0xba41, 0xf01a, 0xba40,
+ 0xba46, 0xe408, 0x0634, 0xba4e, 0x3c1c, 0xbc3e, 0x3c10, 0xa202,
+ 0x3c1f, 0x2806, 0xa1c8, 0xf2f8, 0xbc06, 0x3c1f, 0xbc08, 0xe408,
+ 0x0634, 0xbc08, 0xe408, 0x0634, 0xba40, 0xba40, 0x3cb8, 0xf23a,
+ 0xa201, 0x3eba, 0x3ebc, 0xe160, 0x0000, 0xba40, 0xf11a, 0x2aba,
+ 0xae03, 0xe056, 0x3cba, 0xe080, 0xe41e, 0x0775, 0x2abc, 0xae03,
+ 0xe056, 0x3cbc, 0xe080, 0xa201, 0xe41e, 0x07a8, 0xf07e, 0x2aba,
+ 0xae03, 0x3eba, 0x2abc, 0xae03, 0x3ebc, 0xe080, 0xa002, 0xe090,
+ 0xa110, 0xf648, 0xbc18, 0xe40d, 0x0634, 0xa008, 0x3c11, 0xa202,
+ 0x5811, 0x3c12, 0xbc04, 0x3c13, 0xe40d, 0x0634, 0xa102, 0xf034,
+ 0xf06a, 0xf21e, 0xbc18, 0xa008, 0x3c14, 0xf1de, 0xba40, 0x3c15,
+ 0xe41e, 0x047c, 0x34e8, 0x3ce9, 0xe41e, 0x047c, 0x34ea, 0x3ceb,
+ 0xbdfe, 0xe40d, 0x0634, 0x3cec, 0xf0ea, 0xa102, 0xcc44, 0xe162,
+ 0x0250, 0xe184, 0x05ee, 0xe41e, 0x047c, 0x3512, 0x3d12, 0xe41e,
+ 0x0703, 0xf01e, 0xe40d, 0x0634, 0xbc20, 0xe40d, 0x0634, 0x3c16,
+ 0xba40, 0x3c17, 0xbcee, 0xf39d, 0xa002, 0x3c50, 0xbc86, 0xf35d,
+ 0xa002, 0x3c51, 0x8450, 0x8251, 0xe018, 0x3c1b, 0xa200, 0x3c19,
+ 0xba40, 0x3c18, 0xf098, 0xba40, 0x3c19, 0x2851, 0xae02, 0x3c51,
+ 0x281b, 0xae02, 0x3c1b, 0xe41e, 0x06c0, 0xba40, 0x3c1a, 0x4c18,
+ 0xf1ca, 0xba40, 0xf0aa, 0xe41e, 0x0462, 0xe41e, 0x0462, 0xe41e,
+ 0x0462, 0xe41e, 0x0462, 0xf11d, 0xa200, 0x3c8b, 0x3c8c, 0x281d,
+ 0x3cde, 0x3cdf, 0xba40, 0xe016, 0xe41a, 0x0717, 0xf06a, 0xe41e,
+ 0x04ab, 0xf03a, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xe41e,
+ 0x0462, 0x3c20, 0xbc3e, 0xe40d, 0x06bd, 0x1810, 0xf0ea, 0x0810,
+ 0x3c10, 0xe41e, 0x0ada, 0x3c6e, 0xa202, 0xe41e, 0x03a3, 0xa203,
+ 0x3e94, 0x286e, 0xe40a, 0x06bd, 0xba40, 0x3c21, 0xba40, 0x3c22,
+ 0xbc0e, 0xe40d, 0x06bd, 0x3c23, 0xe408, 0x06bd, 0xbc3e, 0xe40d,
+ 0x06bd, 0x3c24, 0xbc3e, 0x3c25, 0xe40d, 0x06bd, 0xba40, 0x3c26,
+ 0xba42, 0x3c27, 0xbe34, 0xe40d, 0x06bd, 0xa034, 0x3c28, 0xe404,
+ 0x06bd, 0xa168, 0xe402, 0x06bd, 0xbe34, 0xe40d, 0x06bd, 0xa034,
+ 0xe404, 0x06bd, 0xa168, 0xe402, 0x06bd, 0xbe18, 0xe40d, 0x06bd,
+ 0x3c29, 0x3c2d, 0xba40, 0x3c2a, 0xba40, 0x3c2b, 0xba40, 0x3c2c,
+ 0xa200, 0x3c2e, 0x3cb9, 0x2820, 0x3c02, 0xe41e, 0x0b8e, 0xe41e,
+ 0x035c, 0xf2fa, 0xba40, 0x3c2e, 0xba40, 0x3cb9, 0xf28a, 0xa201,
+ 0x3ebb, 0x3ebd, 0xe160, 0x0000, 0xe080, 0xa10c, 0x182e, 0x182e,
+ 0xf132, 0xba40, 0xf11a, 0x2abb, 0xae03, 0xe056, 0x3cbb, 0xe080,
+ 0xe41e, 0x0775, 0x2abd, 0xae03, 0xe056, 0x3cbd, 0xe080, 0xa203,
+ 0xe41e, 0x07a8, 0xf07e, 0x2abb, 0xae03, 0x3ebb, 0x2abd, 0xae03,
+ 0x3ebd, 0xe080, 0xa002, 0xe090, 0xa110, 0xf5f8, 0xbe18, 0x3c2d,
+ 0xe41e, 0x04ab, 0xf03a, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0x281c, 0xa114, 0xf146, 0xa102, 0xf156, 0xa112, 0xf166, 0xa102,
+ 0xf176, 0xa112, 0xf186, 0xa102, 0xf196, 0xa102, 0xf1a6, 0xa112,
+ 0xf1b6, 0xa102, 0xf1c6, 0xe004, 0x17bb, 0xf1ce, 0xe004, 0x0129,
+ 0xf19e, 0xe004, 0x02a3, 0xf16e, 0xe004, 0x06f6, 0xf13e, 0xe004,
+ 0x0dec, 0xf10e, 0xe004, 0x17bb, 0xf0de, 0xe004, 0x17bb, 0xf0ae,
+ 0xe004, 0x3c00, 0xf07e, 0xe004, 0x5e70, 0xf04e, 0xe004, 0x6600,
+ 0xf01e, 0xae12, 0x841b, 0xe182, 0x0180, 0xe019, 0xc407, 0xd022,
+ 0x000f, 0xe184, 0x06fd, 0xe046, 0xf034, 0x8117, 0xe190, 0xe08e,
+ 0xa520, 0x3c1d, 0xe42e, 0xe0c0, 0x0041, 0xe0c1, 0x005a, 0xae1b,
+ 0xe042, 0xe005, 0x0052, 0xae11, 0xe042, 0xce20, 0xd111, 0x0250,
+ 0xd112, 0x0200, 0xd113, 0x0000, 0xca28, 0xf7f8, 0xe42e, 0xba40,
+ 0xf07a, 0xba4e, 0xe002, 0x00ff, 0xf038, 0xba5e, 0xba5e, 0xba40,
+ 0xf02a, 0xba40, 0xba40, 0xf08a, 0xba44, 0xba40, 0xba40, 0xf04a,
+ 0xba4e, 0xba4e, 0xba4e, 0xba40, 0xf03a, 0xbc0a, 0xbc0a, 0xba40,
+ 0xf05a, 0xba7e, 0xe190, 0xba7e, 0xba40, 0xba40, 0x3c8b, 0xe016,
+ 0xe161, 0x04f4, 0xe41a, 0x075a, 0xf1ca, 0xba40, 0x3c8c, 0xe016,
+ 0xe161, 0x04f9, 0xe41a, 0x075a, 0xf14a, 0x288b, 0x4c8c, 0xf02a,
+ 0xba40, 0xba40, 0x3c8d, 0xba40, 0xf0aa, 0xba40, 0xbc20, 0xbc20,
+ 0xbc20, 0xbc20, 0xbc20, 0x3cde, 0xbc20, 0x3cdf, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0xe41e, 0x0462, 0xcc44, 0xa002, 0x3d11, 0xba46,
+ 0xba46, 0xe184, 0x0767, 0xe41e, 0x0462, 0xe41e, 0x0462, 0xba40,
+ 0xba48, 0xa002, 0x3d11, 0xba48, 0xa002, 0x3d11, 0xba48, 0xa002,
+ 0x3d11, 0xba48, 0x3d11, 0xa202, 0xe42e, 0xd022, 0x000f, 0xa10c,
+ 0xf034, 0xd022, 0x003f, 0xe161, 0x05d0, 0xa210, 0x3c06, 0x3c07,
+ 0xa200, 0x3c08, 0x3c09, 0xe09c, 0xe09e, 0xe184, 0x07a5, 0x2807,
+ 0xf10a, 0xe41e, 0x047c, 0xe42d, 0x0806, 0xe000, 0x0100, 0xe008,
+ 0x00ff, 0x3c07, 0x4c09, 0xe01a, 0xe016, 0xe09e, 0xa202, 0x3c09,
+ 0x2807, 0xf028, 0x2806, 0x3c06, 0xe08d, 0xa003, 0xe09d, 0xa803,
+ 0xf059, 0xe085, 0xae11, 0xe056, 0x3d11, 0xe094, 0xe08e, 0xe42e,
+ 0x3e08, 0x3c06, 0xa211, 0x3e07, 0xa10c, 0xf064, 0xb690, 0xa00c,
+ 0x3c06, 0xa240, 0x3c07, 0x2806, 0x2a08, 0xf02b, 0xa01c, 0xae08,
+ 0x3c06, 0xe0c0, 0x0041, 0xe0c1, 0x005a, 0xae1b, 0xe042, 0xe005,
+ 0x005f, 0xae11, 0xe042, 0x0806, 0xce20, 0xd111, 0x05d0, 0x2807,
+ 0xce24, 0xd113, 0x0000, 0xca28, 0xf7f8, 0xe42e, 0xa200, 0xba4f,
+ 0xe042, 0xe003, 0x00ff, 0xf7cb, 0x3c00, 0xa200, 0xba4f, 0xe042,
+ 0xe003, 0x00ff, 0xf7cb, 0x3c01, 0xe41e, 0x07e5, 0xe42a, 0xe41e,
+ 0x033d, 0xf6d8, 0xe41e, 0x04ab, 0xe42e, 0x2800, 0xf0ba, 0xa102,
+ 0xf0ca, 0xa104, 0xf0da, 0xa102, 0xf0ea, 0xa102, 0xf0fa, 0xa200,
+ 0xe42e, 0xe41e, 0x0808, 0xf0de, 0xe41e, 0x082f, 0xf0ae, 0xe41e,
+ 0x0831, 0xf07e, 0xe41e, 0x0832, 0xf04e, 0xe41e, 0x0834, 0xf01e,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x11b1, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0143, 0xe40e, 0x0147, 0xe40e,
+ 0x014b, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x014f, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x0510, 0xe40e, 0x0547, 0xe41e,
+ 0x0153, 0xe40e, 0x007e, 0xe41e, 0x016d, 0xe40e, 0x007e, 0xe41e,
+ 0x0179, 0xe40e, 0x007e, 0xe41e, 0x0216, 0xe40e, 0x007e, 0xe41e,
+ 0x0230, 0xe40e, 0x007e, 0xe41e, 0x04a9, 0xe40e, 0x007e, 0xe41e,
+ 0x04d6, 0xe40e, 0x007e, 0xd130, 0x000b, 0xe41e, 0x0264, 0xe41e,
+ 0x0496, 0xe41e, 0x027d, 0xf0ea, 0xe41e, 0x0c11, 0xe41e, 0x1164,
+ 0x283f, 0xe418, 0x0e37, 0xe41e, 0x10dc, 0xa202, 0xe0c2, 0x0070,
+ 0xe42e, 0xa200, 0xe0c2, 0x0070, 0xe42e, 0x28b5, 0xe428, 0x28b6,
+ 0xf06a, 0xa200, 0x3c13, 0xe41e, 0x129d, 0xe42e, 0xe41e, 0x124f,
+ 0xe42e, 0xa202, 0xe0c2, 0x0106, 0xa200, 0xcc4a, 0xcc4c, 0x3cdf,
+ 0x3c45, 0xe0c2, 0x003f, 0xe0c2, 0x0074, 0x28b6, 0xf0fa, 0x28b7,
+ 0xf09a, 0xe0c0, 0x0066, 0x3410, 0x3c11, 0xe0c0, 0x0067, 0xae04,
+ 0x3c12, 0xa200, 0x3c13, 0xe41e, 0x129d, 0xd130, 0x000b, 0xd1b3,
+ 0x0001, 0xd03a, 0x0003, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008,
+ 0x0000, 0xa200, 0xe0c2, 0x030a, 0xe0c2, 0x030b, 0xe41e, 0x03aa,
+ 0xe41e, 0x10e1, 0x282c, 0xf05a, 0x28c5, 0xa002, 0xa802, 0x3cc5,
+ 0xe41e, 0x0c2c, 0x2830, 0xe41a, 0x0a15, 0x2830, 0xe418, 0x0a7c,
+ 0xe41e, 0x05ab, 0x283f, 0xe418, 0x0f66, 0x2e20, 0x2c2b, 0x0821,
+ 0xe045, 0xb60e, 0x3c2b, 0x28b6, 0xf06a, 0xe41e, 0x124f, 0xe41e,
+ 0x1176, 0xf05e, 0x28b5, 0xf03a, 0xe41e, 0x1270, 0x2c3b, 0xa002,
+ 0x3c3b, 0xe0c2, 0x0070, 0xe002, 0x00f3, 0xf028, 0x283b, 0x2824,
+ 0xe0c2, 0x0071, 0x282f, 0xe0c2, 0x0073, 0xd039, 0x0000, 0xa200,
+ 0x3cd9, 0x3cda, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053,
+ 0xe0c0, 0x0065, 0xaf06, 0xa80e, 0xe418, 0x01f0, 0xa202, 0xe42e,
+ 0xe162, 0x0510, 0xc410, 0x280d, 0xae10, 0x3d12, 0x2852, 0x3d12,
+ 0x8132, 0x280e, 0xae12, 0x4c2c, 0x3d12, 0x2852, 0xae04, 0x3d12,
+ 0x8132, 0x280f, 0xae14, 0x4c2f, 0x3d12, 0x282f, 0xae06, 0x3d12,
+ 0xe180, 0xe0c0, 0x0068, 0xce20, 0xd112, 0x000c, 0xd111, 0x0510,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe42e, 0xd130, 0x000b,
+ 0xe41e, 0x0c14, 0xe0c0, 0x0060, 0xe42a, 0xe0c0, 0x0042, 0xce20,
+ 0xd111, 0x03a0, 0xe0c0, 0x0060, 0x3c3c, 0x843c, 0xc786, 0xe018,
+ 0xce24, 0xd113, 0x0003, 0xe1e1, 0xe0c0, 0x0061, 0x3c70, 0xe42e,
+ 0xd130, 0x0008, 0x2830, 0xe428, 0x28b6, 0xf0fa, 0x28b7, 0xf09a,
+ 0xe0c0, 0x0061, 0x3410, 0x3c11, 0xe0c0, 0x0062, 0xae04, 0x3c12,
+ 0xa200, 0x3c13, 0xe41e, 0x129d, 0xe0c0, 0x0060, 0xa806, 0xf06a,
+ 0xa102, 0xf09a, 0xa102, 0xf0aa, 0xe42e, 0xe41e, 0x099f, 0xe41e,
+ 0x09a4, 0xf07e, 0xe41e, 0x09e6, 0xf04e, 0xe41e, 0x0a07, 0xf01e,
+ 0x28b6, 0xf06a, 0xe41e, 0x124f, 0xe41e, 0x1176, 0xe42e, 0x28b5,
+ 0xe42a, 0xe41e, 0x1270, 0xe42e, 0x22f0, 0x4ef1, 0xa200, 0xc401,
+ 0xe188, 0x07ff, 0x3d11, 0x36f0, 0x3ef1, 0x3cd9, 0x3cda, 0x3c2b,
+ 0x3c3b, 0x3c48, 0x3c0d, 0x3cdc, 0x3cdd, 0x3cde, 0x3c33, 0x3c72,
+ 0x3c74, 0x3c57, 0x3c93, 0xcc72, 0xe42e, 0xe0c0, 0x0074, 0xa806,
+ 0x3c65, 0xe0c0, 0x0074, 0xaf04, 0x3c67, 0xe0c0, 0x0064, 0x347a,
+ 0x3c7b, 0x3c71, 0xe0c0, 0x0065, 0x3421, 0x3c20, 0x2821, 0xa002,
+ 0x3c21, 0x2c20, 0xc710, 0x7c21, 0xe008, 0xffff, 0xa002, 0xaf02,
+ 0x3c3d, 0xe0c0, 0x0062, 0x302d, 0xaf02, 0x302e, 0xaf04, 0xaf04,
+ 0x30bb, 0xe0c1, 0x0071, 0x3ebc, 0xaf02, 0x30ca, 0xaf02, 0x30cb,
+ 0x287a, 0xa01e, 0xaf08, 0x3c50, 0x287b, 0xa01e, 0xaf08, 0x3c51,
+ 0xe0c0, 0x0063, 0xaf06, 0x3030, 0xf1d8, 0xa200, 0x3c34, 0x3c35,
+ 0x3c36, 0x3c37, 0x3c6b, 0xe0c0, 0x0066, 0x3022, 0xaf02, 0x3023,
+ 0x2a23, 0x4622, 0x3e23, 0xaf02, 0xa80e, 0x3c46, 0xe0c0, 0x0066,
+ 0xaf0a, 0x3048, 0xaf02, 0x30c9, 0x2823, 0x4422, 0x3c23, 0xe40e,
+ 0x034c, 0xe0c0, 0x0067, 0x3c56, 0x3037, 0xaf02, 0x3036, 0xaf02,
+ 0x3035, 0xaf02, 0x3034, 0xaf02, 0x306b, 0x2834, 0xe408, 0x03a6,
+ 0x283d, 0xa11e, 0xe404, 0x03a6, 0xe167, 0x0204, 0xc420, 0xa202,
+ 0x3c47, 0x2850, 0xae08, 0x1937, 0xe40a, 0x0324, 0x2847, 0xa002,
+ 0x3c47, 0xa10a, 0xe408, 0x02e9, 0xa202, 0x3c56, 0xa20c, 0x3c47,
+ 0x287b, 0xe002, 0x0190, 0xf086, 0xe002, 0x0190, 0xf0b6, 0xe002,
+ 0x0160, 0xf116, 0xf19e, 0x2850, 0x3c32, 0x2851, 0x3c31, 0xe40e,
+ 0x033a, 0x2850, 0xae02, 0x3c32, 0x2851, 0xa002, 0xaf02, 0x3c31,
+ 0xe40e, 0x033a, 0x2850, 0xae04, 0x3c32, 0x2851, 0xa006, 0xaf04,
+ 0x3c31, 0xe40e, 0x033a, 0x2850, 0xae06, 0x3c32, 0x2851, 0xa00e,
+ 0xaf06, 0x3c31, 0xe40e, 0x033a, 0x812f, 0x8117, 0x2851, 0xae08,
+ 0x1907, 0xe408, 0x02ee, 0x2847, 0xae04, 0xe000, 0x0200, 0xe09e,
+ 0x2917, 0xaf08, 0x3c50, 0x2917, 0xaf08, 0x3c51, 0x2917, 0x3c32,
+ 0x2907, 0x3c31, 0xa200, 0x2a20, 0xe003, 0x7530, 0xb632, 0x2a21,
+ 0xe003, 0x03e9, 0xb632, 0x3c38, 0xf08a, 0x2856, 0xf068, 0x2821,
+ 0xa102, 0xe408, 0x03a6, 0x3c38, 0xe0c0, 0x0069, 0x3008, 0xaf02,
+ 0x3009, 0xaf02, 0x3c0a, 0xe0c0, 0x006a, 0x3c40, 0xe0c0, 0x006b,
+ 0x303f, 0x3481, 0xaf02, 0xe008, 0x7fff, 0x3c80, 0xf028, 0x3c3f,
+ 0x2881, 0xaf1e, 0x30ac, 0x2881, 0xe008, 0x7fff, 0x3c81, 0xe0c0,
+ 0x006c, 0x3482, 0x3c83, 0xe0c0, 0x006d, 0x3c41, 0x8450, 0x8251,
+ 0xe018, 0x3c52, 0xa201, 0xe002, 0x00c8, 0xb425, 0xe002, 0x0190,
+ 0xb425, 0x3e44, 0xe0c0, 0x0043, 0xaf06, 0x30b5, 0xaf02, 0x30b6,
+ 0xaf02, 0x30b7, 0x2850, 0x2a51, 0xaf06, 0xaf07, 0x3cea, 0x3eeb,
+ 0x84ea, 0x82eb, 0xe018, 0x3cc6, 0xa104, 0xf032, 0xa204, 0x3cc6,
+ 0x2851, 0xaf02, 0x3cea, 0x84ea, 0x8250, 0xe018, 0x3cc2, 0x3cc7,
+ 0xa202, 0x3cc5, 0xe0c0, 0x006e, 0x347c, 0x3c7d, 0xe0c0, 0x006f,
+ 0x347e, 0x3c7f, 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0xe0c2,
+ 0x0070, 0xe42e, 0xa200, 0x3c1f, 0xe0c0, 0x0065, 0xa804, 0xf03a,
+ 0xa200, 0x3c3b, 0x2840, 0x4c3b, 0xe016, 0x3c4b, 0x28b9, 0x1840,
+ 0xe01a, 0x2ab9, 0xe01b, 0xe052, 0xe016, 0x2a40, 0xe01b, 0xe052,
+ 0x4c4b, 0xa203, 0xb611, 0x3e24, 0x3e2c, 0xa202, 0xf02b, 0x08b9,
+ 0x3cb9, 0xe0c0, 0x0065, 0xa802, 0xe418, 0x03df, 0xe0c0, 0x0063,
+ 0x3c27, 0xa204, 0x1830, 0x3c28, 0x283f, 0xe42a, 0x282c, 0xe41a,
+ 0x0f20, 0xe41e, 0x0f21, 0x3c27, 0xe419, 0x03df, 0xe42e, 0xa202,
+ 0x3c24, 0x3c2c, 0x3c1f, 0x843a, 0xc786, 0xe018, 0xe000, 0x03a0,
+ 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0060, 0x2117, 0x4d17, 0xe0c2,
+ 0x0061, 0x2117, 0x4d17, 0xe0c2, 0x0062, 0xe42e, 0x2833, 0xae0c,
+ 0x4c5d, 0x2ae8, 0xa803, 0xf0f9, 0xae10, 0x3cdc, 0x2a52, 0xa103,
+ 0x1ae8, 0xe429, 0xe005, 0x0600, 0x0add, 0xe095, 0x3d02, 0xe41e,
+ 0x0421, 0xe42e, 0x4cdc, 0xe005, 0x0600, 0x0add, 0xe095, 0x3d02,
+ 0x28dd, 0xa002, 0x3cdd, 0xe002, 0x0080, 0xf068, 0xe41e, 0x0421,
+ 0xa200, 0x3cdd, 0xe42e, 0x2852, 0xa102, 0x18e8, 0xe41a, 0x0421,
+ 0xe42e, 0x2ae8, 0xaf11, 0xae11, 0xe162, 0x0512, 0x2112, 0x4d12,
+ 0xe042, 0xe180, 0xce20, 0xd112, 0x0080, 0xd111, 0x0600, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe42e, 0xe004, 0x0680, 0x08de,
+ 0xe094, 0x2858, 0xf07a, 0xae3e, 0x3512, 0x3d0a, 0xe41e, 0x0450,
+ 0xe42e, 0xe0c0, 0x03b0, 0x3512, 0x3d0a, 0x2b02, 0xe009, 0x8000,
+ 0xf05b, 0x2b02, 0xe009, 0x7fff, 0x3f02, 0xe41e, 0x0450, 0xe42e,
+ 0x28de, 0xa004, 0x3cde, 0xe002, 0x0080, 0xf068, 0xe41e, 0x0461,
+ 0xa200, 0x3cde, 0xe42e, 0x2852, 0xa102, 0x1853, 0xe41a, 0x0461,
+ 0xe42e, 0x2ae8, 0xaf0d, 0xae11, 0xe162, 0x0516, 0x2112, 0x4d12,
+ 0xe042, 0xe180, 0xce20, 0xd112, 0x0080, 0xd111, 0x0680, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe42e, 0xe167, 0x0520, 0xa201,
+ 0x3f17, 0x2ae8, 0xe045, 0x3f17, 0xc872, 0x22df, 0x4e45, 0xe046,
+ 0x3517, 0x3d17, 0xc872, 0x34df, 0x3c45, 0x282f, 0xae06, 0xe167,
+ 0x051a, 0x2317, 0x4f17, 0xe042, 0xce20, 0xd111, 0x0520, 0xd112,
+ 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0040,
+ 0xe005, 0x0046, 0xae17, 0xe042, 0xe005, 0x1600, 0xae03, 0xe042,
+ 0xce20, 0xd111, 0x0200, 0xd112, 0x016c, 0xd113, 0x0003, 0xe1e1,
+ 0xe42e, 0xe0c0, 0x0060, 0xa806, 0xf06a, 0xa102, 0xf09a, 0xa102,
+ 0xf0aa, 0xe42e, 0xe41e, 0x099f, 0xe41e, 0x09a4, 0xf06e, 0xe41e,
+ 0x09e6, 0xf03e, 0xe41e, 0x0a07, 0xc868, 0xaf06, 0xc867, 0xe003,
+ 0x0080, 0xae05, 0xe042, 0x3c4b, 0xe0c2, 0x0070, 0xc86e, 0xd037,
+ 0x00c0, 0xbad7, 0xcc6e, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0100,
+ 0xd112, 0x0080, 0xd113, 0x0012, 0xe1e1, 0xe42e, 0xe0c1, 0x0060,
+ 0xa803, 0xf05b, 0xe0c0, 0x0061, 0xe41e, 0x0ec9, 0xe0c1, 0x0060,
+ 0xa805, 0xf05b, 0xe0c0, 0x0062, 0xe41e, 0x0f15, 0xe0c1, 0x0060,
+ 0xa809, 0xf05b, 0xe0c0, 0x0063, 0xe41e, 0x0eef, 0xe0c1, 0x0060,
+ 0xa811, 0xf05b, 0xe0c0, 0x0064, 0xe41e, 0x0e90, 0xe0c1, 0x0060,
+ 0xa821, 0xf04b, 0xe0c0, 0x0065, 0x3c41, 0xe0c1, 0x0060, 0xa841,
+ 0xf08b, 0xe0c0, 0x0066, 0x3008, 0xaf02, 0x3009, 0xaf02, 0x3c0a,
+ 0xe0c1, 0x0060, 0xa881, 0xf04b, 0xe0c0, 0x0067, 0x3c48, 0xe42e,
+ 0xe0c0, 0x005a, 0x3cee, 0xa206, 0xe41e, 0x057f, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0x3cef, 0xa226, 0xe41e,
+ 0x0593, 0xe161, 0x07e0, 0x8911, 0x0034, 0x8911, 0x0033, 0x8911,
+ 0x0035, 0x8911, 0x0036, 0x8911, 0x0037, 0x8911, 0x0038, 0x2111,
+ 0x4d11, 0xcc60, 0x2111, 0x4d11, 0xcc62, 0x2111, 0x4d11, 0xcc64,
+ 0x2111, 0x4d11, 0xcc72, 0xe161, 0x00f9, 0x2111, 0x4d11, 0xce88,
+ 0x2111, 0x4d11, 0xce84, 0x2111, 0x4d11, 0xce80, 0xe42e, 0xe0c0,
+ 0x00ed, 0xa106, 0xf29a, 0xa102, 0xf2fa, 0xe161, 0x07e0, 0x8b11,
+ 0x0034, 0x8b11, 0x0033, 0x8b11, 0x0035, 0x8b11, 0x0036, 0x8b11,
+ 0x0037, 0x8b11, 0x0038, 0xc860, 0x3511, 0x3d11, 0xc862, 0x3511,
+ 0x3d11, 0xc864, 0x3511, 0x3d11, 0xc872, 0x3511, 0x3d11, 0xe161,
+ 0x00f9, 0xca88, 0x3511, 0x3d11, 0xca84, 0x3511, 0x3d11, 0xca80,
+ 0x3511, 0x3d11, 0xf06e, 0xe161, 0x07e0, 0xa200, 0xc70f, 0x3d11,
+ 0xa224, 0xe41e, 0x0593, 0xa204, 0xe41e, 0x057f, 0xe42e, 0x3ced,
+ 0xd112, 0x0800, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xce20, 0xd111, 0x0000, 0x88ed, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0x2aef, 0xa80f, 0xa10b, 0xe42b, 0x3ced,
+ 0xd112, 0x0100, 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xce20, 0xd111, 0x0000, 0x88ed, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0x2827, 0x3c62, 0xa200, 0x3cd8, 0x3ce0,
+ 0x3ce1, 0x3ce2, 0x3ce3, 0x3ce4, 0x3ce5, 0x3c53, 0x3c54, 0x3c55,
+ 0x3cdd, 0x3cde, 0x3c33, 0x3ce8, 0x3ce6, 0x3ce7, 0x3c04, 0x3c05,
+ 0x3c06, 0x3c2f, 0xcf64, 0xcf62, 0xe0c2, 0x0113, 0xe0c2, 0x030d,
+ 0xa202, 0xe0c2, 0x0130, 0xa2fe, 0x2a22, 0xb616, 0x3c16, 0xe004,
+ 0x0055, 0xe0c2, 0x030c, 0x2836, 0xe016, 0x4430, 0xe408, 0x0651,
+ 0xa223, 0x2824, 0xe40a, 0x05de, 0x2a28, 0xa021, 0x3e61, 0xa200,
+ 0x3c0b, 0xcc70, 0xa202, 0x3c0c, 0x2822, 0xe418, 0x0b6e, 0xa202,
+ 0xe0c2, 0x0110, 0x280b, 0xa802, 0xf03a, 0xa202, 0x3c72, 0xe41e,
+ 0x08c7, 0xe408, 0x0643, 0x2805, 0xf1fa, 0x280b, 0xa802, 0xe418,
+ 0x06e9, 0x2858, 0x2a62, 0x1a26, 0xb606, 0x3c5f, 0xcf26, 0xe41e,
+ 0x0716, 0x2824, 0xe418, 0x095e, 0x280d, 0xe418, 0x03f6, 0x2858,
+ 0xae04, 0x4c59, 0xcf02, 0x2835, 0xf06a, 0x2859, 0xe016, 0xae0a,
+ 0x4c5d, 0xcf6a, 0xe190, 0xe41e, 0x06b1, 0x283f, 0xe016, 0x4c22,
+ 0xf038, 0x8a6e, 0x0039, 0x2805, 0xe418, 0x071e, 0x285d, 0x2ad4,
+ 0x3c62, 0x3e63, 0x283f, 0x2a22, 0xf18a, 0xc872, 0xf0ab, 0xc870,
+ 0xc440, 0xa217, 0xe001, 0x046a, 0xe095, 0x0932, 0x0902, 0x3c4b,
+ 0x1c6e, 0xe008, 0xffff, 0x3c6f, 0x2a22, 0x284b, 0xf02b, 0x3c6e,
+ 0x285d, 0x2a05, 0xe419, 0x1000, 0xe41e, 0x1127, 0x20e6, 0x4ce7,
+ 0xcf62, 0xe40e, 0x05ea, 0x2822, 0xe418, 0x0b81, 0xa202, 0xe41e,
+ 0x070e, 0x2836, 0xf048, 0xe41e, 0x0b05, 0xe42e, 0xe41e, 0x0b0f,
+ 0xe42e, 0xa202, 0xe0c2, 0x0110, 0xa200, 0x3c4a, 0xf0fe, 0xa202,
+ 0x3c72, 0x2808, 0xf0ba, 0xbacf, 0xbae0, 0x284a, 0xba88, 0xbac1,
+ 0x285d, 0x3c27, 0xba88, 0xd1b3, 0x0002, 0xa200, 0x3c49, 0xe41e,
+ 0x08c7, 0xe408, 0x06ae, 0x8a6e, 0x0039, 0x2805, 0xf1ca, 0x2858,
+ 0x2a62, 0x1a26, 0xb606, 0x3c5f, 0xcf26, 0xe41e, 0x0716, 0x2824,
+ 0xe418, 0x095e, 0x280d, 0xe418, 0x03f6, 0x2858, 0xae04, 0x4c59,
+ 0xcf02, 0x2835, 0xf06a, 0x2859, 0xe016, 0xae0a, 0x4c5d, 0xcf6a,
+ 0xe41e, 0x0753, 0x285d, 0x2ad4, 0x3c62, 0x3e63, 0xc872, 0x1c6e,
+ 0xe008, 0xffff, 0x3c6f, 0x2a3f, 0x4605, 0x285d, 0xe419, 0x1000,
+ 0xe41e, 0x1127, 0x20e6, 0x4ce7, 0xcf62, 0x2805, 0xe40a, 0x0667,
+ 0x2849, 0xa002, 0x3c49, 0x1832, 0xe408, 0x0667, 0x284a, 0xa002,
+ 0x3c4a, 0x1831, 0xe408, 0x0657, 0xe40e, 0x0667, 0xe41e, 0x0b0f,
+ 0xe42e, 0x2808, 0x2a09, 0xe42a, 0x2822, 0xf239, 0x2a05, 0xe42b,
+ 0xf0d8, 0x2a0b, 0xaf03, 0x3e0b, 0xe429, 0xc870, 0x1c0a, 0xe424,
+ 0xa210, 0x3c0b, 0xa202, 0x3c66, 0xe42e, 0x2a0b, 0xaf03, 0x3e0b,
+ 0xe429, 0xc870, 0xc440, 0xa217, 0xe001, 0x046a, 0xe095, 0x0932,
+ 0x0902, 0x1c0a, 0xe424, 0xa210, 0x3c0b, 0xa202, 0x3c66, 0xe42e,
+ 0x280c, 0x180a, 0x2a0c, 0xa003, 0x3e0c, 0x2a0b, 0xaf03, 0x3e0b,
+ 0xe428, 0xa202, 0x3c0c, 0xe004, 0x0020, 0x3c0b, 0xa208, 0x3c66,
+ 0xe42e, 0x2833, 0xe016, 0x3c33, 0xa200, 0xe41e, 0x070e, 0x2822,
+ 0xf05a, 0xe41e, 0x0b81, 0xe41e, 0x0b6e, 0x2809, 0xf038, 0xd038,
+ 0x0000, 0x2862, 0x3c27, 0xe41e, 0x0a49, 0x283f, 0x4422, 0xf0aa,
+ 0xc870, 0xc440, 0xa217, 0xe001, 0x046a, 0xe095, 0x0932, 0x0902,
+ 0x3c6e, 0xd1b3, 0x0002, 0xa200, 0x3c0b, 0xe42e, 0x2a2e, 0x4e0f,
+ 0xe419, 0x0475, 0x282f, 0xa002, 0x3c2f, 0xe42e, 0xd190, 0x0002,
+ 0xcb20, 0xa804, 0xf7e8, 0xcb04, 0x3c5e, 0xe42e, 0x28e8, 0xe0c2,
+ 0x003f, 0x2a36, 0x2822, 0xe409, 0x0753, 0x2a24, 0xe40a, 0x072c,
+ 0xe40b, 0x080c, 0xe40e, 0x0837, 0x2859, 0x7024, 0xe428, 0x285b,
+ 0xae02, 0x4c5a, 0xae02, 0x4c58, 0x3c4f, 0xa200, 0x0824, 0x3c00,
+ 0x285e, 0xa806, 0xae06, 0x4c4f, 0x6c00, 0x285c, 0x7058, 0xa20a,
+ 0x1858, 0x3c00, 0x285e, 0xaf04, 0x6c00, 0x285a, 0xe418, 0x0869,
+ 0x2858, 0xe41a, 0x0888, 0x8877, 0x0194, 0xd190, 0x0001, 0xcb20,
+ 0xa802, 0xf7e8, 0xe42e, 0x2859, 0x7024, 0xe428, 0x285b, 0xae02,
+ 0x4c5a, 0xae02, 0x4c58, 0x3c4f, 0xa200, 0x0824, 0x0824, 0x0824,
+ 0x3c00, 0x285e, 0xa806, 0xae06, 0x4c4f, 0x6c00, 0xa20a, 0x1858,
+ 0x3c00, 0x285e, 0xaf04, 0x6c00, 0x285a, 0xe418, 0x086e, 0x2858,
+ 0xe41a, 0x087a, 0xcb3e, 0xe016, 0xa802, 0x4437, 0xe418, 0x08b2,
+ 0xa201, 0xe0c3, 0x0134, 0xf098, 0x8877, 0x0194, 0xd190, 0x0001,
+ 0xcb20, 0xa802, 0xf7e8, 0xe42e, 0xa20c, 0x3c4d, 0x2a4d, 0xe427,
+ 0xa103, 0x3e4d, 0x285f, 0xe418, 0x0793, 0x285e, 0x5c4d, 0xa802,
+ 0xe418, 0x07a2, 0xf74e, 0xa20a, 0xe046, 0xae0c, 0xcf3a, 0xcf3c,
+ 0xcb38, 0xe005, 0x00fe, 0xe066, 0xe049, 0xe003, 0x0080, 0xb7f6,
+ 0xba8e, 0xe42e, 0xe41e, 0x07a7, 0xe41e, 0x07d7, 0xe42e, 0x2877,
+ 0x5c4d, 0x5c4d, 0xa806, 0xe005, 0x02ac, 0xf07a, 0xe005, 0x02fc,
+ 0xa106, 0xf03a, 0xe005, 0x033c, 0xe09f, 0x8117, 0xe165, 0x0482,
+ 0xe166, 0x04c2, 0xa27c, 0xcc44, 0xa20a, 0x2a4d, 0xe046, 0xae0c,
+ 0x3c4b, 0xa200, 0xa201, 0x3cdb, 0xe184, 0x07d5, 0x284b, 0x4d17,
+ 0xcf3a, 0xcf3c, 0xcb38, 0xe008, 0x0fff, 0xb435, 0xf07a, 0x3f15,
+ 0x3d16, 0xa201, 0x28db, 0xa002, 0x3cdb, 0xe190, 0xe42e, 0xe165,
+ 0x0482, 0xe166, 0x04c2, 0x28db, 0xa104, 0xcc44, 0xe184, 0x07e5,
+ 0x2915, 0xae18, 0x4d16, 0xb914, 0xe41d, 0x07ef, 0xa202, 0xae0c,
+ 0x4d15, 0xae18, 0x4d16, 0xb914, 0xe41d, 0x07ef, 0xe42e, 0xe16a,
+ 0x810e, 0xa207, 0xba8d, 0xaf18, 0xba8c, 0x2906, 0xae30, 0xaf30,
+ 0xe049, 0xe002, 0x007f, 0xe001, 0x007f, 0xf050, 0xf045, 0x2916,
+ 0xba8e, 0xe42e, 0xe004, 0x0080, 0xba8e, 0x2906, 0xa83e, 0xba88,
+ 0x2916, 0xaf0a, 0xba8a, 0xe42e, 0x285b, 0xae02, 0x4c5a, 0xae02,
+ 0x4c58, 0x3c4f, 0x285e, 0xa806, 0xae06, 0x4c4f, 0xb900, 0x285a,
+ 0xe418, 0x0869, 0x285f, 0xf06a, 0xd190, 0x0001, 0xcb20, 0xa802,
+ 0xf7e8, 0xa203, 0xe41e, 0x0b3c, 0x285c, 0xba80, 0x285e, 0xaf04,
+ 0xb908, 0xa205, 0xe41e, 0x0b3c, 0x8877, 0x0194, 0xd190, 0x0004,
+ 0xcb20, 0xa808, 0xf7e8, 0xa201, 0xe41e, 0x0b3c, 0xe42e, 0x2859,
+ 0xba80, 0xe428, 0x285b, 0xae02, 0x4c5a, 0xae02, 0x4c58, 0x3c4f,
+ 0x285e, 0xa806, 0xae06, 0x4c4f, 0xb902, 0x2858, 0xe41a, 0x0888,
+ 0xa203, 0xe41e, 0x0b3c, 0x285c, 0x7058, 0xa20a, 0x1858, 0x3c00,
+ 0x285e, 0xaf04, 0x6c00, 0x285a, 0xe418, 0x0869, 0xd190, 0x0001,
+ 0xcb20, 0xa802, 0xf7e8, 0xa205, 0xe41e, 0x0b3c, 0x8877, 0x0194,
+ 0xd190, 0x0004, 0xcb20, 0xa808, 0xf7e8, 0xa201, 0xe41e, 0x0b3c,
+ 0xe42e, 0x286c, 0xa002, 0xb628, 0xba82, 0xe42e, 0x2837, 0xe40a,
+ 0x0869, 0x286c, 0xa140, 0xe404, 0x0877, 0xba82, 0xe42e, 0x286c,
+ 0xba8a, 0xe42e, 0x285b, 0xb670, 0xcc44, 0xe161, 0x0100, 0xe184,
+ 0x0886, 0x2911, 0xa040, 0xb90c, 0x2911, 0xa040, 0xb90c, 0xe42e,
+ 0xe162, 0x0100, 0x285b, 0xb670, 0xcc44, 0xe184, 0x0895, 0x2912,
+ 0xe41e, 0x0897, 0x2912, 0xe41e, 0x0897, 0xe190, 0xe42e, 0xe40a,
+ 0x08af, 0xe404, 0x08a4, 0xa102, 0xe049, 0x5c29, 0xa002, 0xa040,
+ 0xb90c, 0x462a, 0x7229, 0xe42e, 0xa002, 0xe012, 0xe049, 0x5c29,
+ 0xa002, 0xe012, 0xa040, 0xb90c, 0x462a, 0x7229, 0xe42e, 0xa040,
+ 0xb90c, 0xe42e, 0xe004, 0x017f, 0xcc44, 0xa202, 0xe0c2, 0x0134,
+ 0xa200, 0xe184, 0x08c2, 0xe0c2, 0x0135, 0xa002, 0xe0c1, 0x0136,
+ 0xe003, 0xff80, 0xf03b, 0xa200, 0xe42e, 0xa202, 0xe42e, 0xe41e,
+ 0x0e25, 0x2824, 0x4406, 0xe418, 0x0e30, 0x2804, 0xe428, 0xa202,
+ 0xe0c2, 0x0110, 0x2824, 0x4406, 0xe0c2, 0x018b, 0xa200, 0x3c5b,
+ 0x3c5c, 0x3c77, 0x3c59, 0xe41e, 0x08f2, 0xe41e, 0x0de5, 0xe41e,
+ 0x1147, 0x2a05, 0x2858, 0xe017, 0xe016, 0x4e30, 0xe055, 0xf099,
+ 0xe0c0, 0x0130, 0xaf06, 0x305c, 0xe0c1, 0x0132, 0xb615, 0x3e77,
+ 0xa200, 0xe42e, 0x2806, 0xf23a, 0x2824, 0xf08a, 0xe0c0, 0x0195,
+ 0xe01a, 0x3c5b, 0xe0c0, 0x0197, 0x3c6a, 0x2824, 0xe016, 0xf0b8,
+ 0xe0c1, 0x015c, 0xe001, 0x0200, 0x1e6a, 0xb62a, 0x2a41, 0xf038,
+ 0xe419, 0x10e4, 0x3c58, 0x2a1f, 0xf03b, 0xa201, 0x3e58, 0x2a5b,
+ 0xb611, 0x3e5b, 0xf04b, 0x28d8, 0xa940, 0x3cd8, 0x2a3f, 0x462c,
+ 0x4605, 0x2827, 0xf0eb, 0xe41e, 0x0f9a, 0x2a65, 0xf02b, 0x28e9,
+ 0x2ad8, 0xa803, 0xf02b, 0x2862, 0x1862, 0xa504, 0xa4fc, 0x0862,
+ 0x3c5d, 0x2a3f, 0x462c, 0x4605, 0x2827, 0xf0db, 0x2893, 0x2a65,
+ 0xf02b, 0x28c8, 0x2ad8, 0xa811, 0xf02b, 0x2863, 0x1863, 0xa504,
+ 0xa4fc, 0x0863, 0x3cd4, 0x285d, 0x1862, 0x3c6c, 0x2a37, 0xf18a,
+ 0xf17b, 0x2862, 0xe000, 0x022c, 0xe09e, 0xe160, 0x0020, 0x286c,
+ 0x1937, 0xe40a, 0x0952, 0x286c, 0x1907, 0xe40a, 0x0955, 0x285d,
+ 0xe40e, 0x0956, 0xa244, 0xe40e, 0x0956, 0xa246, 0x3c6c, 0x286c,
+ 0xe01a, 0x3c5a, 0x28d8, 0xaf02, 0x3cd8, 0xe42e, 0xe162, 0x0100,
+ 0x2869, 0xe09a, 0x2b15, 0x3e5b, 0x2915, 0x4d0d, 0x4c5a, 0x4c58,
+ 0x4c5b, 0x4c5e, 0xe01a, 0xe016, 0x3c59, 0x2858, 0xae04, 0x4c59,
+ 0xcf02, 0x2858, 0xf258, 0x2a5b, 0xcf4b, 0x2115, 0x4d15, 0xcf4c,
+ 0xf0ab, 0x2115, 0x4d15, 0xcf4e, 0x2115, 0x4d15, 0xcf50, 0x2115,
+ 0x4d15, 0xcf52, 0xd1a0, 0x0001, 0xcb40, 0xa802, 0xf7e8, 0xcb4c,
+ 0x3512, 0x3d12, 0xf0ab, 0xcb4e, 0x3512, 0x3d12, 0xcb50, 0x3512,
+ 0x3d12, 0xcb52, 0x3512, 0x3d12, 0xe08a, 0x3c69, 0xe42e, 0xd1a0,
+ 0x0001, 0xcb40, 0xa802, 0xf7e8, 0xa200, 0x3c5b, 0xe42e, 0xbacf,
+ 0xe004, 0x0100, 0xba9e, 0xe42e, 0xa204, 0x2ac9, 0xb632, 0x3c00,
+ 0xbacf, 0xe004, 0x0120, 0xba9e, 0xbac0, 0xbae7, 0xbae0, 0x2800,
+ 0xba86, 0xbae2, 0xbae3, 0xbac0, 0xbac1, 0xbae0, 0x2c20, 0xba9e,
+ 0xbae0, 0x2821, 0xa102, 0xe01a, 0xba80, 0xf07a, 0x2c20, 0xe41e,
+ 0x0b18, 0x3c4e, 0x2821, 0x704e, 0xbae0, 0x287a, 0x2a7b, 0xba98,
+ 0xbae0, 0xba99, 0xbae0, 0xbac0, 0xbae0, 0xa200, 0x7000, 0xbac0,
+ 0xbac0, 0x2800, 0xa102, 0xf02a, 0xbac0, 0xbae0, 0xbac0, 0x2822,
+ 0xba80, 0xf03a, 0x2823, 0xba80, 0x2800, 0xa102, 0xe40a, 0x09e2,
+ 0xbac0, 0xbac0, 0xbac0, 0xe41e, 0x0b05, 0xe42e, 0xbacf, 0xe004,
+ 0x01b0, 0xba9e, 0x2850, 0xa116, 0xf090, 0x2851, 0xa112, 0xf060,
+ 0x283d, 0xa11e, 0xf030, 0xa202, 0xf11e, 0x2850, 0xa12c, 0xf0d0,
+ 0x2851, 0xa124, 0xf0a0, 0x283d, 0xa13c, 0xf070, 0xa01e, 0xf030,
+ 0xa204, 0xf04e, 0xa206, 0xf02e, 0xa208, 0xba8e, 0xe42e, 0xbacf,
+ 0xe004, 0x01b5, 0xba9e, 0xbae0, 0xa202, 0xba86, 0xa202, 0xba84,
+ 0xbae3, 0xbac0, 0xe41e, 0x0b05, 0xe42e, 0xbacf, 0xe004, 0x01b6,
+ 0xba9e, 0x2824, 0xba82, 0x2c3b, 0xf0aa, 0x2c2b, 0xf038, 0xbae0,
+ 0xf06e, 0x1c20, 0xf046, 0x1821, 0xf022, 0xbae0, 0xbac0, 0xbae0,
+ 0x2c20, 0xe41e, 0x0b18, 0x3c4e, 0x2c2b, 0x704e, 0xbae0, 0xbae0,
+ 0x2824, 0xa102, 0xf038, 0x2825, 0xba80, 0x2846, 0xba84, 0xe000,
+ 0x0220, 0xe09e, 0x2907, 0x3c26, 0x2827, 0xba88, 0x2824, 0xe42a,
+ 0x2828, 0xba84, 0xa102, 0x3c29, 0xa202, 0x5829, 0xa102, 0x3c2a,
+ 0xe42e, 0x2836, 0xe408, 0x0ae4, 0xe41e, 0x0b05, 0xbacf, 0x2861,
+ 0xa120, 0x3c4e, 0xa202, 0x704e, 0x2852, 0xe41e, 0x0b18, 0x3c4e,
+ 0x28e8, 0x704e, 0x2827, 0xba88, 0x2848, 0xba80, 0xe42a, 0x2c3b,
+ 0xf0aa, 0x2c2b, 0xf038, 0xbae0, 0xf06e, 0x1c20, 0xf046, 0x1821,
+ 0xf022, 0xbae0, 0xbac0, 0xbae0, 0x2c20, 0xe41e, 0x0b18, 0x3c4e,
+ 0x2c2b, 0x704e, 0xbae0, 0x2824, 0xba82, 0x2846, 0xba84, 0x2824,
+ 0xe42a, 0x2828, 0xba84, 0xe42e, 0xe41e, 0x0b0f, 0xbacf, 0xa240,
+ 0xba8a, 0x2c3b, 0xe008, 0x00ff, 0xba8e, 0xbae0, 0xbac0, 0xbac0,
+ 0xbac0, 0xbac0, 0x2856, 0xf0a8, 0x2847, 0xba84, 0x2824, 0xba80,
+ 0xbac3, 0x2827, 0xba88, 0xbac0, 0xf3ee, 0xa20e, 0xba84, 0xbae2,
+ 0x2847, 0xba84, 0x2838, 0xba80, 0xbac2, 0x2834, 0xba80, 0x2835,
+ 0xba80, 0x2836, 0xba80, 0xbac2, 0x2837, 0xba80, 0xbae0, 0xbac2,
+ 0x2824, 0xba84, 0xbac1, 0x2825, 0xba80, 0xbae2, 0xbac0, 0x2847,
+ 0xa10c, 0xf0b8, 0xa204, 0xba86, 0x287a, 0xaf04, 0xa102, 0xba90,
+ 0xbae0, 0x287b, 0xaf04, 0xba90, 0x2838, 0xf10a, 0x2821, 0xe002,
+ 0x03e9, 0xe016, 0xba80, 0x8421, 0xe182, 0x0708, 0xe018, 0xc70f,
+ 0x7c20, 0xba8c, 0x2c3b, 0xaf10, 0xba82, 0xa200, 0x7036, 0x7036,
+ 0x2827, 0xba88, 0xbac0, 0xa200, 0x3ce8, 0x2836, 0xe418, 0x0ae4,
+ 0x2846, 0xe000, 0x0220, 0xe09e, 0x2907, 0x3c26, 0xa202, 0x3c28,
+ 0xa200, 0x3c29, 0x3c2a, 0xe42e, 0x28e8, 0xf0ba, 0xc868, 0xa80e,
+ 0xf06a, 0xa110, 0xe012, 0x3c4e, 0xa200, 0x704e, 0xba9e, 0xbae0,
+ 0xbae0, 0x2852, 0xe41e, 0x0b21, 0x3c4e, 0x2ae8, 0x724e, 0xa116,
+ 0xf046, 0x2ae8, 0xf02b, 0xbae0, 0x28e8, 0xf03a, 0x2827, 0xba88,
+ 0xbae0, 0x28e8, 0xf02a, 0xbac1, 0xe42e, 0xbac0, 0xc868, 0xa80e,
+ 0xe42a, 0xa110, 0xe012, 0x3c4e, 0xa2fe, 0x704e, 0xe42e, 0xc868,
+ 0xa80e, 0xe42a, 0xa110, 0xe012, 0x3c4e, 0xa200, 0x704e, 0xe42e,
+ 0xa102, 0xa201, 0xf05a, 0xaf02, 0xa003, 0xe408, 0x0b1b, 0xe04a,
+ 0xe42e, 0xa102, 0xa15e, 0xf0d6, 0xa166, 0xf0d6, 0xe002, 0x0129,
+ 0xf0c6, 0xe002, 0x04a4, 0xf0b6, 0xe002, 0x1290, 0xf0a6, 0xf0be,
+ 0xa20c, 0xe42e, 0xa20e, 0xe42e, 0xa212, 0xe42e, 0xa216, 0xe42e,
+ 0xa21a, 0xe42e, 0xa21c, 0xe42e, 0xf049, 0x20d9, 0x4cda, 0xcc72,
+ 0x2816, 0xf048, 0xc872, 0x34d9, 0x3cda, 0x2816, 0xae06, 0xe000,
+ 0x046a, 0xe092, 0xc860, 0x3511, 0x3d11, 0x8b11, 0x0034, 0x8b11,
+ 0x0038, 0x8b11, 0x0033, 0x8b11, 0x0035, 0x8b11, 0x0037, 0x8b11,
+ 0x0036, 0x3e16, 0xae07, 0xe001, 0x046a, 0xe093, 0x2111, 0x4d11,
+ 0xcc60, 0x8911, 0x0034, 0x8911, 0x0038, 0x8911, 0x0033, 0x8911,
+ 0x0035, 0x8911, 0x0037, 0x8911, 0x0036, 0xe42e, 0xe41e, 0x1198,
+ 0xe004, 0x00a4, 0x3c18, 0xe004, 0x0164, 0x3c19, 0xa200, 0x3c1a,
+ 0x3c1b, 0x2816, 0xa201, 0x3e16, 0xe424, 0xa201, 0xe41e, 0x0b3c,
+ 0xe42e, 0x2824, 0xe408, 0x0b8a, 0xe004, 0x006b, 0xba8c, 0xbaeb,
+ 0xe40e, 0x0b8d, 0xa23e, 0xba88, 0xbaeb, 0xe41e, 0x0b92, 0xe41e,
+ 0x0bc5, 0xe42e, 0xc872, 0x34d9, 0x3cda, 0x281a, 0xe40a, 0x0bb5,
+ 0x2818, 0xe002, 0x00a4, 0x3c1c, 0xe41e, 0x1225, 0xd04c, 0x0000,
+ 0xe004, 0x00a4, 0x3c18, 0xe41e, 0x11ff, 0xe004, 0x0800, 0x3c1e,
+ 0xe161, 0x0080, 0xe41e, 0x0bf6, 0xc872, 0x34d9, 0x3cda, 0x281c,
+ 0xa102, 0x3c1c, 0xf718, 0xe41e, 0x11ff, 0xa203, 0xe41e, 0x0b3c,
+ 0xc870, 0xe008, 0x07ff, 0x3c1e, 0xe161, 0x0080, 0xbadf, 0xe41e,
+ 0x0bf6, 0xc872, 0x34d9, 0x3cda, 0xe42e, 0x281b, 0xe40a, 0x0be6,
+ 0x2819, 0xe002, 0x0164, 0x3c1c, 0xe41e, 0x123a, 0xd04c, 0x0000,
+ 0xe004, 0x0164, 0x3c19, 0xe41e, 0x1212, 0xe004, 0x0800, 0x3c1e,
+ 0xe161, 0x00c0, 0xe41e, 0x0bf6, 0xc872, 0x34d9, 0x3cda, 0x281c,
+ 0xa102, 0x3c1c, 0xe408, 0x0bd3, 0xe41e, 0x1212, 0xa205, 0xe41e,
+ 0x0b3c, 0xc870, 0xe008, 0x07ff, 0x3c1e, 0xe161, 0x00c0, 0xbadf,
+ 0xe41e, 0x0bf6, 0xc872, 0x34d9, 0x3cda, 0xe42e, 0xe082, 0xcc76,
+ 0xa201, 0xe41e, 0x0b3c, 0xa201, 0x281e, 0xaf0a, 0xe40a, 0x0c06,
+ 0xa102, 0xcc44, 0xe184, 0x0c05, 0xc87a, 0xbabe, 0x281e, 0xa83e,
+ 0xe42a, 0x3c1e, 0xa140, 0xe012, 0x3c1d, 0xc87a, 0x5c1d, 0x701e,
+ 0xe42e, 0xa200, 0x3c39, 0xe42e, 0xe004, 0x0502, 0xe09e, 0xe0c0,
+ 0x0064, 0x3517, 0x3d17, 0xe0c0, 0x0065, 0x3517, 0x3d17, 0xe0c0,
+ 0x0066, 0x3517, 0x3d17, 0xe0c0, 0x0067, 0x3517, 0x3d17, 0xe0c0,
+ 0x0069, 0x3517, 0x3d17, 0xe42e, 0x2837, 0xae02, 0x4c36, 0xae02,
+ 0x4c35, 0xae06, 0x4c30, 0xae08, 0xa916, 0xe0c2, 0x0100, 0xe004,
+ 0x003f, 0xe0c2, 0x012a, 0xe0c0, 0x0050, 0xe049, 0xe008, 0x003f,
+ 0x3ccc, 0xaf11, 0xe009, 0x003f, 0x3ecd, 0x46cc, 0x3ecc, 0xa200,
+ 0xe0c2, 0x0168, 0x2acc, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2acc,
+ 0xa805, 0xf03b, 0xe00a, 0x0009, 0x2acc, 0xa809, 0xf03b, 0xe00a,
+ 0x0020, 0x2acc, 0xa811, 0xf03b, 0xe00a, 0x0040, 0x2acc, 0xa841,
+ 0xf03b, 0xe00a, 0x0004, 0xe0c2, 0x0169, 0xe004, 0x0037, 0xe0c2,
+ 0x017c, 0xe004, 0x0014, 0xe0c2, 0x017d, 0xe0c0, 0x0041, 0xe005,
+ 0x0000, 0xae11, 0xe042, 0x2acd, 0xa805, 0xf09b, 0xe004, 0x0502,
+ 0xe09e, 0xe160, 0x0002, 0x0937, 0x2117, 0x4d17, 0xe0c2, 0x0103,
+ 0xa202, 0xae02, 0xa902, 0xe0c2, 0x0312, 0xe0c0, 0x0064, 0x2a1f,
+ 0xf02b, 0xa200, 0xe0c2, 0x0138, 0xe008, 0x000f, 0x3c75, 0x287a,
+ 0xae20, 0x4c7b, 0xe0c2, 0x0142, 0x2870, 0xe0c2, 0x0141, 0x2850,
+ 0xae20, 0x4c51, 0xae08, 0xe0c2, 0x0101, 0xcf60, 0x2a1f, 0xaa03,
+ 0x4675, 0xa803, 0xf05b, 0x2851, 0xae20, 0x4c50, 0xae08, 0xe0c2,
+ 0x0142, 0xe0c0, 0x0044, 0xa81e, 0xae1a, 0x4c70, 0xe0c2, 0x0102,
+ 0x282c, 0xae06, 0xe0c2, 0x0104, 0xe0c0, 0x0060, 0xe0c2, 0x0143,
+ 0xe0c0, 0x0061, 0xe0c2, 0x0144, 0xe0c0, 0x0062, 0xe0c2, 0x0145,
+ 0x2870, 0x2a1f, 0xaa03, 0x4675, 0xa803, 0xf02b, 0x2871, 0xe0c2,
+ 0x0141, 0x2835, 0xf27a, 0xe0c1, 0x0041, 0xe004, 0x0040, 0xae10,
+ 0xe042, 0x2acd, 0xa809, 0xf09b, 0xe004, 0x0502, 0xe09e, 0xe160,
+ 0x0004, 0x0937, 0x2117, 0x4d17, 0xe0c2, 0x0211, 0xe0c1, 0x0041,
+ 0xe004, 0x0080, 0xae10, 0xe042, 0x2acd, 0xa811, 0xf09b, 0xe004,
+ 0x0502, 0xe09e, 0xe160, 0x0006, 0x0937, 0x2117, 0x4d17, 0xe0c2,
+ 0x0212, 0x2837, 0xcf68, 0xa204, 0x2a35, 0xb632, 0xe0c2, 0x0210,
+ 0xb612, 0xe0c2, 0x0208, 0xa216, 0xae08, 0x4c24, 0xae06, 0xe0c2,
+ 0x0204, 0x8439, 0xc786, 0xe018, 0xe000, 0x03a0, 0xe09e, 0x2117,
+ 0x4d17, 0xe0c2, 0x020d, 0xe0c2, 0x0214, 0x2117, 0x4d17, 0xe0c2,
+ 0x020e, 0xe0c2, 0x0215, 0x2117, 0x4d17, 0xe0c2, 0x020f, 0xe0c2,
+ 0x0216, 0x2824, 0xf3aa, 0xa202, 0xe0c2, 0x0302, 0x843a, 0xc786,
+ 0xe018, 0xe000, 0x03a0, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0380,
+ 0x2117, 0x4d17, 0xe0c2, 0x0381, 0x2117, 0x4d17, 0xe0c2, 0x0382,
+ 0xa200, 0xe0c2, 0x0302, 0xe0c0, 0x0380, 0xe0c2, 0x0183, 0xa204,
+ 0xae02, 0x4c25, 0xe0c2, 0x0303, 0xa200, 0xe0c2, 0x0308, 0xe41e,
+ 0x0d85, 0x2830, 0xae12, 0x4c28, 0xcf46, 0xe0c1, 0x0041, 0xe004,
+ 0x00a0, 0xae10, 0xe042, 0x2acd, 0xa803, 0xf06b, 0xe004, 0x0502,
+ 0xe09e, 0x2117, 0x4d17, 0xcf44, 0x2822, 0xae02, 0x4c23, 0xae02,
+ 0x4c37, 0xcf24, 0x2830, 0xae06, 0x4c24, 0xae02, 0xcf00, 0x2839,
+ 0xe0c2, 0x0072, 0x3c3a, 0xa002, 0x3c39, 0x183c, 0xf028, 0x3c39,
+ 0xa202, 0x3c66, 0xe0c2, 0x0139, 0xe0c0, 0x0065, 0xaf06, 0xe049,
+ 0x300d, 0xaf02, 0x300e, 0xaf02, 0x300f, 0xa80f, 0xe42b, 0xe180,
+ 0xe0c1, 0x0068, 0xce21, 0xd112, 0x000c, 0xd111, 0x0510, 0xd113,
+ 0x0003, 0xca29, 0xf7f9, 0xe181, 0xe42e, 0x207c, 0x4c7d, 0x2acd,
+ 0xa841, 0xf07b, 0xe004, 0x0502, 0xa010, 0xe09e, 0x2117, 0x4d17,
+ 0xe0c2, 0x0187, 0x207e, 0x4c7f, 0xe0c2, 0x0188, 0xa200, 0xe0c2,
+ 0x019e, 0xe0c2, 0x019f, 0xe0c0, 0x0044, 0xe0c2, 0x0199, 0x2870,
+ 0xe0c2, 0x018a, 0xe0c2, 0x0189, 0x2851, 0xae08, 0xa102, 0xae20,
+ 0x2a50, 0xae09, 0xa103, 0xe056, 0xe0c2, 0x0181, 0xe0c0, 0x0060,
+ 0xe0c2, 0x0182, 0x282c, 0xe0c2, 0x0186, 0x2827, 0xaf02, 0x0844,
+ 0xa51e, 0xe049, 0xae02, 0xe042, 0xe000, 0x026c, 0xe09e, 0x8117,
+ 0x8117, 0x210f, 0x4d07, 0xe0c2, 0x0184, 0xa200, 0xe0c2, 0x0185,
+ 0x2917, 0xe0c2, 0x019a, 0x2830, 0xf09a, 0x2835, 0xf048, 0xe004,
+ 0x0140, 0xf06e, 0xe004, 0x0152, 0xf03e, 0xe004, 0x0192, 0x4c2c,
+ 0xe0c2, 0x0180, 0xe004, 0x0400, 0x3c68, 0x3c69, 0xd008, 0x000d,
+ 0xd009, 0x0400, 0xd00a, 0x0436, 0xe42e, 0x28d4, 0xae0c, 0x4cd4,
+ 0xae0c, 0x4cd4, 0xe0c2, 0x0115, 0x2866, 0xa802, 0xe0c2, 0x0131,
+ 0x2866, 0xaf02, 0x3c66, 0x2858, 0xe0c2, 0x0114, 0xf038, 0xe41e,
+ 0x0dfe, 0x280e, 0x442c, 0xe418, 0x0435, 0xe42e, 0x2868, 0xe09a,
+ 0x2a5b, 0x3f15, 0xe162, 0x0191, 0x9e12, 0x3515, 0x3d15, 0xcf4c,
+ 0xf0db, 0x9e12, 0x3515, 0x3d15, 0xcf4e, 0x9e12, 0x3515, 0x3d15,
+ 0xcf50, 0x9e12, 0x3515, 0x3d15, 0xcf52, 0x285b, 0xcf4a, 0xd1a0,
+ 0x0002, 0xcb41, 0xa805, 0xf7e9, 0xe08a, 0x3c68, 0xe004, 0x06db,
+ 0x2a5b, 0xb616, 0xe0c2, 0x0309, 0xe42e, 0xe0c0, 0x0111, 0xf7e8,
+ 0xe0c0, 0x0118, 0x3004, 0xaf02, 0x3005, 0xaf02, 0x3006, 0xe42e,
+ 0xe0c0, 0x0198, 0xf7ea, 0xa200, 0xe0c2, 0x0198, 0xe42e, 0xa232,
+ 0x3c07, 0xa240, 0x3c84, 0xa204, 0x3c86, 0xa23e, 0x2aca, 0xf03b,
+ 0xe0c0, 0x0072, 0x3c85, 0xa20c, 0x3c87, 0xe004, 0x029c, 0x3c88,
+ 0x2840, 0x2a52, 0x3c89, 0x3e8f, 0x283d, 0x3c8b, 0x3cbe, 0xe004,
+ 0x6000, 0x2acb, 0xf03b, 0xe0c0, 0x0073, 0x3c8c, 0x2889, 0xe016,
+ 0x3c8a, 0xf06a, 0x288b, 0x3c89, 0xe004, 0x1000, 0x3c8c, 0x8421,
+ 0xe182, 0x7530, 0xe018, 0xae02, 0x2e20, 0xe41e, 0x1099, 0x3c98,
+ 0x8498, 0x8280, 0xe018, 0xa279, 0xe41e, 0x1082, 0x3498, 0x3c99,
+ 0xae06, 0x2a84, 0xe41e, 0x1082, 0x349e, 0x3c9f, 0xa202, 0x3c8d,
+ 0xa205, 0x1a44, 0xae03, 0xa011, 0x3e94, 0x2a8f, 0x5a94, 0xe013,
+ 0x36ae, 0x3eaf, 0x28bc, 0x2abb, 0xf049, 0xe41e, 0x1029, 0x6407,
+ 0x3c90, 0xa004, 0x6086, 0x6485, 0x3c91, 0xe41e, 0x104d, 0xe42e,
+ 0x34c0, 0x3cbf, 0x28c0, 0xa002, 0x3cc0, 0x2cbf, 0xc710, 0x7cc0,
+ 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c8b, 0x18be, 0xe42a, 0x288b,
+ 0x3cbe, 0x28bf, 0x2ac0, 0x3c20, 0x3e21, 0xa200, 0x3c2b, 0x8421,
+ 0xe182, 0x7530, 0xe018, 0xae02, 0x2e20, 0xe41e, 0x1099, 0x3c98,
+ 0x8498, 0x8280, 0xe018, 0xa279, 0xe41e, 0x1082, 0x3498, 0x3c99,
+ 0xae06, 0x2a84, 0xe41e, 0x1082, 0x349e, 0x3c9f, 0xa200, 0x3cb8,
+ 0x34a2, 0x3ca3, 0x2889, 0xe428, 0xe016, 0x3c8a, 0x288b, 0x3c89,
+ 0xe42e, 0x3cba, 0x2a89, 0xe046, 0xf028, 0xe42e, 0x28b9, 0x2aba,
+ 0xe046, 0xf034, 0xa200, 0x3cb9, 0x28ba, 0x3c89, 0x3c40, 0x283f,
+ 0xe42a, 0x2889, 0xe016, 0x3c8a, 0xf03a, 0x2a8b, 0x3e89, 0x2a89,
+ 0x28b9, 0xe045, 0xf0c6, 0x20a6, 0x4ca7, 0xe41e, 0x1082, 0x34aa,
+ 0x3cab, 0x10a6, 0x1ca7, 0xe012, 0x34a8, 0x3ca9, 0xe42e, 0x3cbd,
+ 0xf028, 0x3c3f, 0x283f, 0xe42a, 0x2880, 0x2abd, 0xe046, 0xe42a,
+ 0x3e80, 0x8421, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e20, 0xe41e,
+ 0x1099, 0x3c98, 0x8498, 0x8280, 0xe018, 0xa279, 0xe41e, 0x1082,
+ 0x3498, 0x3c99, 0xae06, 0x2a84, 0xe41e, 0x1082, 0x349e, 0x3c9f,
+ 0xa200, 0x3cb8, 0x34a2, 0x3ca3, 0xe42e, 0x2a3f, 0xe42b, 0xf042,
+ 0xa201, 0x3ebb, 0xe42e, 0x3cbc, 0x3c90, 0xa203, 0x3ebb, 0xe42e,
+ 0xe42e, 0x282c, 0x3c8e, 0xa201, 0x3ead, 0xe418, 0x100b, 0xa200,
+ 0x3ca0, 0x3ca1, 0x3c74, 0x288e, 0xf238, 0x288d, 0xf05a, 0xa200,
+ 0x3c8d, 0x2890, 0xf31e, 0x2889, 0xa102, 0xf7ca, 0x2abb, 0xf03b,
+ 0x2890, 0xf2ae, 0x848f, 0x82b8, 0xe019, 0xe04a, 0xaf02, 0x00a2,
+ 0x0ca3, 0xe41e, 0x1099, 0xa21f, 0x3e94, 0x2a89, 0xc70f, 0x7e94,
+ 0xe009, 0xffff, 0xa405, 0xe046, 0x6086, 0x6407, 0xf15e, 0xa200,
+ 0x3c9c, 0x3c9d, 0x2865, 0x30eb, 0xaf02, 0x54eb, 0xf08a, 0x2891,
+ 0xa104, 0x6093, 0x2a91, 0xa005, 0xe066, 0xf02e, 0x2891, 0x2aad,
+ 0xf02b, 0x2885, 0x3c93, 0x3c27, 0x2aad, 0xe42e, 0xc872, 0xe41e,
+ 0x1056, 0x288e, 0xf0ea, 0x20a0, 0x4ca1, 0xc710, 0x7c8f, 0xe008,
+ 0xffff, 0xa002, 0xaf02, 0x3c91, 0x20a0, 0x4ca1, 0x00a2, 0x0ca3,
+ 0x34a2, 0x3ca3, 0x28b8, 0xa002, 0x3cb8, 0x288e, 0xf028, 0x3cb8,
+ 0x288e, 0xf0f8, 0x2a89, 0xa103, 0x20a6, 0x4ca7, 0xe41e, 0x1082,
+ 0x34aa, 0x3cab, 0x10a6, 0x1ca7, 0xe012, 0x34a8, 0x3ca9, 0xf0ae,
+ 0x22a8, 0x4ea9, 0x12aa, 0x1eab, 0x288a, 0xb606, 0xb611, 0x36a8,
+ 0x3ea9, 0xe42e, 0x28e8, 0xf038, 0x2893, 0x3c57, 0x2ae8, 0x1a52,
+ 0xa007, 0xf0b5, 0x28d7, 0x3ce9, 0xe42b, 0xa103, 0x28d6, 0x3ce9,
+ 0xe42b, 0x28d5, 0x3ce9, 0xe42e, 0x229c, 0x4e9d, 0x209e, 0x4c9f,
+ 0xe041, 0xf0c7, 0xe045, 0xe045, 0x2893, 0xf0f5, 0x369c, 0x3e9d,
+ 0xa002, 0x6086, 0x6485, 0x3c93, 0xf08e, 0x369c, 0x3e9d, 0x2893,
+ 0xa102, 0x6086, 0x6485, 0x3c93, 0x2874, 0xa002, 0x3c74, 0x2a65,
+ 0xf08b, 0xa103, 0xf1cb, 0xa103, 0xf07b, 0xa103, 0xf0ab, 0xf19e,
+ 0x2893, 0x3cc8, 0xf16e, 0x2872, 0xf12a, 0xa200, 0x3c72, 0xf06e,
+ 0x2874, 0x1867, 0xf0c4, 0xa200, 0x3c74, 0x2a57, 0xa105, 0x6293,
+ 0x2857, 0xa004, 0xe066, 0x3c93, 0x3cc8, 0xf03e, 0x2857, 0x3cc8,
+ 0x28c8, 0x3c57, 0x28e8, 0xf078, 0x28c8, 0x3cd5, 0x3cd6, 0x3cd7,
+ 0x3ce9, 0xe42e, 0x28d7, 0x2a65, 0xa805, 0xf029, 0x3cc8, 0x3ce9,
+ 0x28d6, 0x3cd7, 0x28d5, 0x3cd6, 0x2857, 0x3cd5, 0x28c8, 0xe42e,
+ 0x00a0, 0x0ca1, 0x34a0, 0x3ca1, 0x286f, 0x1892, 0x009c, 0x0c9d,
+ 0x349c, 0x3c9d, 0xe42e, 0x20a8, 0x4ca9, 0x10a6, 0x1ca7, 0x848c,
+ 0xe41e, 0x10d0, 0x0098, 0x0c99, 0xf052, 0x2aac, 0xf039, 0xa203,
+ 0x3ead, 0xe41e, 0x1068, 0x2298, 0x4e99, 0xaf07, 0xe062, 0x349a,
+ 0x3c9b, 0xc710, 0x7c8f, 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c92,
+ 0xe42e, 0x8489, 0x2098, 0x4c99, 0xe41e, 0x10c4, 0x8487, 0xe41e,
+ 0x10c4, 0x2a89, 0xa103, 0x0a87, 0xe41e, 0x1082, 0x349a, 0x3c9b,
+ 0x288f, 0x3cb0, 0x209a, 0x4c9b, 0xae04, 0x009a, 0x0c9b, 0xae02,
+ 0xc70f, 0x7cb0, 0xe008, 0xffff, 0xaf08, 0xa010, 0xaf08, 0x0844,
+ 0xa51e, 0x0888, 0xe09e, 0x2907, 0xe42e, 0x8480, 0x8281, 0xe018,
+ 0x34a4, 0x3ca5, 0xa200, 0x34a6, 0x3ca7, 0xe42e, 0x1098, 0x1c99,
+ 0x00a6, 0x0ca7, 0xa27f, 0xae31, 0xe066, 0x34a6, 0x3ca7, 0x22ae,
+ 0x4eaf, 0xe046, 0xf032, 0x36a6, 0x3ea7, 0x20a6, 0x28a7, 0xe42e,
+ 0x2a81, 0xe42b, 0x22a4, 0x4ea5, 0x12a6, 0x1ea7, 0xe066, 0xf051,
+ 0x2aac, 0xf039, 0xa203, 0x3ead, 0x2282, 0x4e83, 0xe42b, 0x22a4,
+ 0x4ea5, 0x12a6, 0x1ea7, 0x0298, 0x0e99, 0x1282, 0x1e83, 0xa401,
+ 0xe062, 0xe42e, 0x3eb0, 0xa201, 0xf032, 0xe012, 0xa203, 0x3eb4,
+ 0x3cb1, 0xaf20, 0xc70f, 0x7cb0, 0x3cb2, 0xaf20, 0xae20, 0x4cb1,
+ 0xc70f, 0x7cb0, 0x3cb3, 0x20b2, 0x4cb3, 0x2ab4, 0xe42b, 0xe012,
+ 0xe42e, 0x36b0, 0x3eb1, 0xa201, 0x3eb2, 0x22b0, 0x4eb1, 0x5ab2,
+ 0xe045, 0xf061, 0x2ab2, 0xa003, 0x3eb2, 0xa121, 0xf775, 0x2ab2,
+ 0xf039, 0xa200, 0xe42e, 0xa103, 0x3eb2, 0xcc45, 0xa201, 0x3eb3,
+ 0xe184, 0x10c1, 0x2ab3, 0xae03, 0x3eb3, 0x22b0, 0x4eb1, 0x5ab2,
+ 0xe045, 0xf061, 0xe013, 0xe04a, 0x2ab3, 0xa003, 0x3eb3, 0x2ab2,
+ 0xa103, 0x3eb2, 0x28b3, 0xe42e, 0xae02, 0x34b1, 0xe008, 0xffff,
+ 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xae1e, 0x82b0, 0xe01c, 0xe42e,
+ 0xae02, 0x34b1, 0xe008, 0xffff, 0xaf02, 0x3cb0, 0x82b0, 0xe018,
+ 0xaf1e, 0x82b1, 0xe01c, 0xe42e, 0xa200, 0x3cc1, 0x3cc3, 0x3cc4,
+ 0xe42e, 0xa200, 0x3c42, 0xe42e, 0x28c5, 0xf1f8, 0x2842, 0x1841,
+ 0xf3d2, 0x2853, 0x18c1, 0xf3a4, 0x28c1, 0x08c6, 0x18c7, 0xf0b4,
+ 0x28c3, 0xa002, 0xc70f, 0x7cc6, 0xaf20, 0x3cc3, 0x3cc1, 0x2841,
+ 0x3c42, 0xf2ae, 0x2842, 0xa002, 0x3c42, 0x28c1, 0x08c6, 0xc70f,
+ 0x7cc7, 0xaf20, 0x3cc1, 0xf20e, 0x2842, 0x1841, 0xf1f2, 0x2853,
+ 0x18c2, 0xf1c4, 0x28c2, 0x08c6, 0x1852, 0xf0c4, 0x28c4, 0xa002,
+ 0xc70f, 0x7cc6, 0xaf20, 0x3cc4, 0x08c7, 0x3cc2, 0x2841, 0x3c42,
+ 0xf0be, 0x2842, 0xa002, 0x3c42, 0x28c2, 0x08c6, 0xc70f, 0x7c52,
+ 0xaf20, 0x3cc2, 0xf01e, 0xa202, 0xe42e, 0xa200, 0xe42e, 0x2805,
+ 0xf12a, 0xd188, 0x0001, 0x28e8, 0xa002, 0x3ce8, 0xcf64, 0x28e6,
+ 0xa002, 0x3ce6, 0x1850, 0xf078, 0xd1b3, 0x0004, 0x3ce6, 0x28e7,
+ 0xa002, 0x3ce7, 0x2853, 0xa002, 0x3c53, 0x2854, 0xa002, 0x3c54,
+ 0x1850, 0xe428, 0x3c54, 0x2855, 0xa002, 0x3c55, 0xe42e, 0x28e4,
+ 0x3ce5, 0x28e3, 0x3ce4, 0x28e2, 0x3ce3, 0x28e1, 0x3ce2, 0x28e0,
+ 0x3ce1, 0x286c, 0xa83e, 0xae02, 0x4c5a, 0xae02, 0x4c58, 0x3ce0,
+ 0x2a3f, 0x462c, 0x28e5, 0x3058, 0xe429, 0xaf02, 0x305a, 0xaf02,
+ 0xae3e, 0xaf3e, 0x3c6c, 0xe42e, 0xa200, 0x3c13, 0xe0c0, 0x0060,
+ 0x3410, 0x3c11, 0xe0c0, 0x0061, 0xae04, 0x3c12, 0xe41e, 0x1189,
+ 0xe41e, 0x129d, 0xd071, 0x802a, 0xe181, 0xe42e, 0xd030, 0x0000,
+ 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x007f,
+ 0xd037, 0x0000, 0xc872, 0xa130, 0xcc72, 0xc870, 0xa130, 0xcc70,
+ 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035,
+ 0x0000, 0xd036, 0x007f, 0xd037, 0x0000, 0xd038, 0x0000, 0xe42e,
+ 0xa210, 0xe000, 0x046a, 0xe094, 0xa200, 0xc703, 0x3d12, 0xe004,
+ 0x0080, 0xc702, 0x3d12, 0xe000, 0x003f, 0x3d12, 0xa200, 0xc703,
+ 0x3d12, 0xe004, 0x00c0, 0xc702, 0x3d12, 0xe000, 0x003f, 0x3d12,
+ 0xe42e, 0x2816, 0xf06a, 0xa102, 0xf0ba, 0xa102, 0xf0ea, 0xe470,
+ 0xe004, 0x0080, 0xe41e, 0x11c9, 0xd04c, 0x0000, 0xe470, 0xe41e,
+ 0x1225, 0xd04c, 0x0000, 0xe470, 0xe41e, 0x123a, 0xd04c, 0x0000,
+ 0xe470, 0xce24, 0xd111, 0x0000, 0xe082, 0x3c14, 0xe004, 0x0048,
+ 0xe092, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042, 0x34e9, 0x3c4b,
+ 0xe41e, 0x12a7, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042, 0xce20,
+ 0x8111, 0x9f01, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa020, 0xce26,
+ 0xca28, 0xf7f8, 0x2c13, 0xe000, 0x0002, 0x3c13, 0x1c12, 0xf074,
+ 0x2ab6, 0xf04b, 0xa203, 0xe0c3, 0x0074, 0x3c13, 0x2010, 0x4c11,
+ 0x2e13, 0xae11, 0xe042, 0x9f01, 0x2814, 0xe092, 0xe42e, 0xe0c0,
+ 0x0041, 0x2a18, 0xae11, 0xe042, 0xce20, 0xd111, 0x0080, 0xd112,
+ 0x0040, 0xd113, 0x0013, 0xca28, 0xf7f8, 0x2818, 0xe000, 0x0001,
+ 0x3c18, 0xe42e, 0xe0c0, 0x0041, 0x2a19, 0xae11, 0xe042, 0xce20,
+ 0xd111, 0x00c0, 0xd112, 0x0040, 0xd113, 0x0013, 0xca28, 0xf7f8,
+ 0x2819, 0xe000, 0x0001, 0x3c19, 0xe42e, 0xe0c0, 0x0041, 0x2a18,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0080, 0xd112, 0x0040, 0xd113,
+ 0x0012, 0xca28, 0xf7f8, 0x2818, 0xe000, 0x0001, 0x3c18, 0xa202,
+ 0x3c1a, 0xe42e, 0xe0c0, 0x0041, 0x2a19, 0xae11, 0xe042, 0xce20,
+ 0xd111, 0x00c0, 0xd112, 0x0040, 0xd113, 0x0012, 0xca28, 0xf7f8,
+ 0x2819, 0xe000, 0x0001, 0x3c19, 0xa202, 0x3c1b, 0xe42e, 0xc868,
+ 0xaf06, 0xc867, 0xe003, 0x0000, 0xae05, 0xe042, 0x3c4c, 0xc86e,
+ 0xd037, 0x0080, 0xbad7, 0xcc6e, 0xe004, 0x0080, 0xe41e, 0x11c9,
+ 0xe004, 0x0049, 0xe092, 0x9e01, 0x2210, 0x4e11, 0xe045, 0xf049,
+ 0x2210, 0x4e11, 0xe042, 0x084c, 0xe002, 0x0200, 0x9f01, 0xe42e,
+ 0xc866, 0xcc78, 0xc860, 0xcc7a, 0xd111, 0x0000, 0xe004, 0x0048,
+ 0xe092, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042, 0x34e9, 0x3c4b,
+ 0x2ab6, 0xe41b, 0x12a7, 0x20e9, 0x4c4b, 0xce20, 0x8111, 0x9f01,
+ 0xd112, 0x0100, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa020, 0xce26,
+ 0xca28, 0xf7f8, 0xc868, 0xaf06, 0xc867, 0xe003, 0x0000, 0xae05,
+ 0xe042, 0x9e81, 0xe042, 0x9f01, 0xe42e, 0x2010, 0x4c11, 0x2e13,
+ 0xae11, 0xe042, 0xe005, 0x0049, 0xe093, 0x9f01, 0xe42e, 0xe0c1,
+ 0x0043, 0xa809, 0xe429, 0xe0c1, 0x0043, 0xa821, 0xe429, 0xa200,
+ 0x3c15, 0x20e9, 0x4c4b, 0x9e81, 0xe045, 0xf041, 0x2c12, 0xae10,
+ 0xe041, 0xe003, 0x0200, 0xe421, 0x2815, 0xf748, 0xe0c0, 0x005c,
+ 0xe008, 0x8000, 0xf6fa, 0xe0c0, 0x005d, 0xe00a, 0x8000, 0xe0c2,
+ 0x005d, 0xa202, 0xce00, 0x3c15, 0xf65e, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0060, 0x0008, 0x0006,
+ 0x00b0, 0x0090, 0x000b, 0x0009, 0x0160, 0x0120, 0x0016, 0x0012,
+ 0x02c0, 0x0240, 0x0058, 0x0012, 0x0580, 0x0480, 0x0160, 0x0012,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0063, 0x000d, 0x000f, 0x0011, 0x0013, 0x0015, 0x0017, 0x0000,
+ 0xffff, 0xfffe, 0x0001, 0x0002, 0x0000, 0x0002, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0000, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0002, 0x0001, 0xfffb, 0x0200, 0x0000, 0x0008, 0x0200,
+ 0x0000, 0x0010, 0x0200, 0x0008, 0x0020, 0x0200, 0x0010, 0x0040,
+ 0x0200, 0x0020, 0x0080, 0x0200, 0x0040, 0x00c0, 0x0200, 0x0060,
+ 0x0100, 0x0200, 0x0080, 0x0140, 0x0200, 0x00c0, 0x0180, 0x0200,
+ 0x0100, 0x01c0, 0x0200, 0x0140, 0x0200, 0x0200, 0x0180, 0x0280,
+ 0x0200, 0x0200, 0x0300, 0x0200, 0x0200, 0x0300, 0x0200, 0x0200,
+ 0x0300, 0x0200, 0x0200, 0x0300, 0x001a, 0x0019, 0x0018, 0x0017,
+ 0x0016, 0x0015, 0x0014, 0x0013, 0x0012, 0x0011, 0x0010, 0x000f,
+ 0x000e, 0x000d, 0x000c, 0x000a, 0x0000, 0x0001, 0x0008, 0x0010,
+ 0x0009, 0x0002, 0x0003, 0x000a, 0x0011, 0x0018, 0x0020, 0x0019,
+ 0x0012, 0x000b, 0x0004, 0x0005, 0x000c, 0x0013, 0x001a, 0x0021,
+ 0x0028, 0x0030, 0x0029, 0x0022, 0x001b, 0x0014, 0x000d, 0x0006,
+ 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, 0x0038,
+ 0x0039, 0x0032, 0x002b, 0x0024, 0x001d, 0x0016, 0x000f, 0x0017,
+ 0x001e, 0x0025, 0x002c, 0x0033, 0x003a, 0x003b, 0x0034, 0x002d,
+ 0x0026, 0x001f, 0x0027, 0x002e, 0x0035, 0x003c, 0x003d, 0x0036,
+ 0x002f, 0x0037, 0x003e, 0x003f, 0x0000, 0x0008, 0x0010, 0x0018,
+ 0x0001, 0x0009, 0x0002, 0x000a, 0x0011, 0x0019, 0x0020, 0x0028,
+ 0x0030, 0x0038, 0x0039, 0x0031, 0x0029, 0x0021, 0x001a, 0x0012,
+ 0x0003, 0x000b, 0x0004, 0x000c, 0x0013, 0x001b, 0x0022, 0x002a,
+ 0x0032, 0x003a, 0x0023, 0x002b, 0x0033, 0x003b, 0x0014, 0x001c,
+ 0x0005, 0x000d, 0x0006, 0x000e, 0x0015, 0x001d, 0x0024, 0x002c,
+ 0x0034, 0x003c, 0x0025, 0x002d, 0x0035, 0x003d, 0x0016, 0x001e,
+ 0x0007, 0x000f, 0x0017, 0x001f, 0x0026, 0x002e, 0x0036, 0x003e,
+ 0x0027, 0x002f, 0x0037, 0x003f, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0008, 0x0009, 0x0010, 0x0011, 0x000a, 0x000b, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x000f, 0x000e, 0x000d, 0x000c, 0x0013, 0x0012,
+ 0x0018, 0x0019, 0x0020, 0x0021, 0x001a, 0x001b, 0x0014, 0x0015,
+ 0x0016, 0x0017, 0x001c, 0x001d, 0x001e, 0x001f, 0x0022, 0x0023,
+ 0x0028, 0x0029, 0x0030, 0x0031, 0x002a, 0x002b, 0x0024, 0x0025,
+ 0x0026, 0x0027, 0x002c, 0x002d, 0x002e, 0x002f, 0x0032, 0x0033,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x003c, 0x003d, 0x003e, 0x003f, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0131,
+ 0xe470, 0xe190, 0xe40e, 0x0113, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x012f, 0xe40e, 0x0131,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0x3cf0, 0x3cf1, 0xa2fe, 0x3cee, 0x3cef,
+ 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d, 0xce00, 0xf11e, 0xe0c0,
+ 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a,
+ 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe41e,
+ 0x008c, 0xe41e, 0x00ab, 0xe0c0, 0x005a, 0x18ee, 0xe0c1, 0x0059,
+ 0xa115, 0xb636, 0x2aee, 0xb60a, 0xe418, 0x00fb, 0xe0c0, 0x005b,
+ 0xe0c1, 0x005e, 0xae11, 0xe056, 0x18ef, 0xe0c1, 0x0059, 0xa117,
+ 0xb636, 0xe418, 0x00b0, 0xe0c0, 0x005a, 0x18ee, 0x2aee, 0xb60a,
+ 0xe0c1, 0x0059, 0xa117, 0xb636, 0xe418, 0x00f3, 0xd071, 0x802a,
+ 0xe181, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x0059,
+ 0xae02, 0xe000, 0x0113, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a,
+ 0x3cee, 0xe41e, 0x0100, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11,
+ 0xe056, 0x3cef, 0xe40e, 0x0037, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xe0c2, 0x0008, 0xe0c0, 0x0059, 0xf7ea, 0xa11e, 0xf0e8,
+ 0xa202, 0xe0c2, 0x0058, 0xe004, 0x093d, 0xe0c2, 0x0070, 0xa200,
+ 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xf6fe, 0xa202, 0xe0c2, 0x0008,
+ 0xe0c2, 0x0058, 0xe42e, 0xd101, 0x0001, 0xc70f, 0xa000, 0xe42e,
+ 0xa200, 0xe0c1, 0x005b, 0xf27b, 0xa220, 0xa103, 0xf2eb, 0xa230,
+ 0xa103, 0xf2bb, 0xa23c, 0xa103, 0xf24b, 0xa258, 0xa103, 0xf25b,
+ 0xa260, 0xa103, 0xf22b, 0xa200, 0xa103, 0xf1fb, 0xa26c, 0xa103,
+ 0xf1cb, 0xe004, 0x003e, 0xa103, 0xf18b, 0xe004, 0x0044, 0xa105,
+ 0xf14b, 0xe004, 0x0046, 0xa103, 0xf10b, 0xe004, 0x0000, 0xa107,
+ 0xf0cb, 0xa200, 0xe0c1, 0x005e, 0xf08b, 0xe004, 0x004c, 0xf05e,
+ 0xe0c1, 0x005e, 0xf02b, 0xa010, 0xae16, 0xe0c1, 0x0040, 0xe041,
+ 0xca28, 0xf7f8, 0xce21, 0xd111, 0x0000, 0xd112, 0x2000, 0xd113,
+ 0x000b, 0xe1e1, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e, 0x0100,
+ 0xe004, 0x0133, 0xe67c, 0xe41e, 0x0100, 0xe004, 0x0135, 0xe67c,
+ 0x28ee, 0xe008, 0x03ff, 0xcca4, 0xe182, 0x0029, 0xe018, 0x2eee,
+ 0xaf15, 0xcca5, 0xe182, 0x0029, 0xe019, 0xae15, 0xe042, 0xae14,
+ 0x34f0, 0x3cf1, 0xe42e, 0xe40e, 0x0764, 0xe40e, 0x0137, 0xe40e,
+ 0x013b, 0xe40e, 0x013f, 0xe40e, 0x0147, 0xe40e, 0x007e, 0xe40e,
+ 0x0153, 0xe40e, 0x014f, 0xe40e, 0x015b, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e, 0x007e, 0xe40e,
+ 0x007e, 0xe40e, 0x007e, 0xe40e, 0x0464, 0xe40e, 0x0477, 0xe41e,
+ 0x018a, 0xe40e, 0x007e, 0xe41e, 0x020d, 0xe40e, 0x007e, 0x284d,
+ 0xa184, 0xe41e, 0x015f, 0xe41e, 0x020e, 0xe40e, 0x007e, 0x284d,
+ 0xa184, 0xe41e, 0x015f, 0xe41e, 0x03bc, 0xe40e, 0x007e, 0xe41e,
+ 0x03ed, 0xe40e, 0x007e, 0x284d, 0xa184, 0xe41e, 0x015f, 0xe41e,
+ 0x059e, 0xe40e, 0x007e, 0xe41e, 0x0420, 0xe40e, 0x007e, 0xe428,
+ 0xe0c0, 0x0040, 0xa211, 0xae17, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x2000, 0xd113, 0x000b, 0xe1e1, 0xe42e,
+ 0xe167, 0x05d3, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184, 0x017a,
+ 0x9e16, 0x3517, 0x3d17, 0xe0c0, 0x0069, 0xe167, 0x0ba0, 0x3d17,
+ 0x3517, 0xe0c0, 0x006a, 0x3d17, 0x3517, 0xe0c0, 0x006b, 0x3d17,
+ 0x3517, 0xe42e, 0xd152, 0x0000, 0xd130, 0x0000, 0x22f0, 0x4ef1,
+ 0xa200, 0xc401, 0xe188, 0x07ff, 0x3d11, 0x36f0, 0x3ef1, 0xe41e,
+ 0x040b, 0xa2fe, 0x3c10, 0x3c20, 0x3c48, 0x3cbf, 0x3c5f, 0xa206,
+ 0x3cbe, 0xa200, 0xcc44, 0x3cd6, 0x3c4e, 0x3c4b, 0xe0c2, 0x0072,
+ 0xe0c2, 0x006c, 0xa202, 0xe0c2, 0x0078, 0xe0c0, 0x0062, 0xaf02,
+ 0x301e, 0xaf02, 0xa806, 0x3c75, 0xe41e, 0x06df, 0xe41e, 0x137d,
+ 0xe41e, 0x1865, 0xe41e, 0x1f2e, 0xa200, 0x3c60, 0xe41e, 0x05bb,
+ 0x286d, 0xe408, 0x0208, 0x28a4, 0xa10e, 0xf798, 0xe41e, 0x1390,
+ 0xe41e, 0x0711, 0xe128, 0xe41e, 0x0ca0, 0xf71a, 0xa2fe, 0x3c10,
+ 0x2050, 0x4c51, 0xae08, 0xe0c2, 0x0071, 0xe0c2, 0x004f, 0x2850,
+ 0xe002, 0x0080, 0xf2e0, 0x2851, 0xe002, 0x0080, 0xf2a0, 0x281e,
+ 0xf0da, 0x2813, 0xa104, 0xf0aa, 0x28df, 0xe0c2, 0x0074, 0xa006,
+ 0xe0c2, 0x0073, 0x28de, 0x3cdc, 0xf09e, 0x28df, 0xa006, 0xe0c2,
+ 0x0073, 0xa200, 0xe0c2, 0x0074, 0x3cdc, 0xa200, 0x3c6d, 0x285d,
+ 0xae04, 0x4c1a, 0xae02, 0x4c18, 0xae10, 0x4c1c, 0xae10, 0x4c4d,
+ 0xe0c2, 0x007b, 0xe41e, 0x0696, 0xa202, 0xe0c2, 0x0070, 0xe42e,
+ 0xa200, 0x3c6d, 0xe0c2, 0x0070, 0xe42e, 0xe42e, 0xa2fe, 0xe0c2,
+ 0x004c, 0xe0c2, 0x004d, 0xe0c2, 0x004e, 0xe0c2, 0x007b, 0xa200,
+ 0xcc44, 0xcc4a, 0xcc4c, 0x3c4c, 0x3c55, 0x3ced, 0xe0c2, 0x006d,
+ 0xe0c2, 0x007a, 0x3c5c, 0xd14b, 0x0200, 0xa2fc, 0xe0c2, 0x0077,
+ 0xa202, 0xe0c2, 0x0076, 0x286e, 0xf07a, 0xe41e, 0x078e, 0xe41e,
+ 0x05a4, 0xa200, 0x3c6e, 0xe41e, 0x0f5b, 0xf05a, 0xa202, 0x3c6c,
+ 0xe40e, 0x034a, 0x2875, 0xa802, 0xf06a, 0xa200, 0x3c69, 0x3c6b,
+ 0xe41e, 0x06b7, 0xe41e, 0x1348, 0xd152, 0x0000, 0xd130, 0x0000,
+ 0xd1e0, 0x0003, 0xd1ff, 0x03b0, 0xd1fd, 0x03d0, 0xd199, 0x0224,
+ 0xd1fc, 0x0700, 0xd03a, 0x0000, 0xd04c, 0x0000, 0xd008, 0x0000,
+ 0xe41e, 0x1df4, 0x288e, 0xf0da, 0x288f, 0xf162, 0x28db, 0xe41a,
+ 0x1300, 0xe41e, 0x18ae, 0x28c1, 0x3c8f, 0x3c39, 0xe40e, 0x034a,
+ 0xe41e, 0x18a1, 0xf048, 0xa2ff, 0xe0c3, 0x0077, 0xf03a, 0x286c,
+ 0xf03a, 0xe40e, 0x034a, 0xa2fc, 0xe0c2, 0x0077, 0xa200, 0x3caa,
+ 0x3cab, 0x288e, 0xf038, 0x28c1, 0x3cbf, 0xa202, 0x3c49, 0x288e,
+ 0xf0da, 0x288a, 0x3ca3, 0x288b, 0x3ca5, 0x288f, 0x3cc1, 0xe41e,
+ 0x04ef, 0xe41e, 0x0bff, 0xe40e, 0x02e9, 0xe41e, 0x05bb, 0x28a4,
+ 0xf7da, 0xa102, 0xe40a, 0x02e9, 0xa108, 0xf784, 0xe40a, 0x02e9,
+ 0xa102, 0xf23a, 0xa102, 0xf1ba, 0xa102, 0xf1ca, 0xa102, 0xf20a,
+ 0xa102, 0xf22a, 0xa102, 0xf20a, 0xa102, 0xf33a, 0xa106, 0xf08a,
+ 0xa10a, 0xe40a, 0x02e6, 0xa002, 0xf612, 0xe40e, 0x02e4, 0xa203,
+ 0x3e5e, 0xe41e, 0x1390, 0xa201, 0x3e5e, 0xf2fe, 0xe41e, 0x1390,
+ 0xf2ce, 0xe41e, 0x13c1, 0xf29e, 0xe41e, 0x0f63, 0xf26e, 0xba44,
+ 0xe41e, 0x089c, 0xf22e, 0x2875, 0xa802, 0xe408, 0x03b3, 0x286b,
+ 0xf09a, 0x2875, 0xa802, 0xe016, 0x3c6c, 0xe41e, 0x053b, 0xe40e,
+ 0x034a, 0x287f, 0xf038, 0x287d, 0xf03a, 0xa202, 0x3ca9, 0xf0de,
+ 0xba0e, 0xe002, 0x00ff, 0xf058, 0xba4e, 0xe41e, 0x0623, 0xf798,
+ 0xe41e, 0x089c, 0xe40e, 0x028d, 0xe40e, 0x028d, 0xa202, 0xe41e,
+ 0x1f36, 0xe165, 0x07c8, 0x28a5, 0x3d15, 0x28a3, 0x3d15, 0x2830,
+ 0x3d15, 0x28d3, 0x3d15, 0x288e, 0xf0d8, 0xa2fe, 0x3cc1, 0xe41e,
+ 0x092f, 0xf0e8, 0xe41e, 0x1f36, 0xa200, 0x2a57, 0xa003, 0xe40b,
+ 0x03b3, 0x2a7e, 0xa103, 0xe40b, 0x034a, 0xe40a, 0x028d, 0x28a3,
+ 0x3c84, 0x28a5, 0x3c85, 0x2a3b, 0x28bf, 0x18c1, 0xf09a, 0x28be,
+ 0xa106, 0xf07a, 0xe41e, 0x0504, 0xe41e, 0x0519, 0xf34e, 0x4ebe,
+ 0x3ebe, 0xa200, 0x3c49, 0x3c8e, 0xe41e, 0x191a, 0x282f, 0xa002,
+ 0x3c2f, 0x28a3, 0x4c34, 0xf048, 0x28c1, 0xe41e, 0x186b, 0x28a3,
+ 0xe418, 0x1508, 0x2ac1, 0x285e, 0xb7f1, 0x3e5f, 0x2834, 0xf058,
+ 0xe41e, 0x1f20, 0xe418, 0x1194, 0x2834, 0xaa02, 0x4432, 0xe41a,
+ 0x11d0, 0x28d3, 0x3cd7, 0xa200, 0xe41e, 0x1f36, 0xe41e, 0x0696,
+ 0x2832, 0xf09a, 0x2a75, 0xf04b, 0x2834, 0xe41a, 0x0567, 0x2834,
+ 0xe40a, 0x0279, 0x2848, 0xe412, 0x18d5, 0x286c, 0xf04a, 0xe41e,
+ 0x12fb, 0x3cdc, 0xe41e, 0x11f9, 0xf032, 0x2a6c, 0xb7b6, 0xe049,
+ 0x1ad4, 0xf045, 0xa2fa, 0x2a6b, 0xb7f2, 0xe0c2, 0x0071, 0xe0c0,
+ 0x0071, 0x3c48, 0xa200, 0x2a48, 0xf0f4, 0x3e0a, 0xaf09, 0x2072,
+ 0x4c73, 0xf06b, 0x2070, 0x4c71, 0x2a0a, 0xa81f, 0x3e0a, 0x5c0a,
+ 0x5c0a, 0xa806, 0xae20, 0x2a5c, 0xae13, 0x4e33, 0xae05, 0x4e19,
+ 0xae03, 0x4e32, 0xae21, 0x4e55, 0xae05, 0xe056, 0x4c30, 0xe0c2,
+ 0x0073, 0x2a48, 0xf1b5, 0xaf09, 0xf0fb, 0x2070, 0x4c71, 0x2a48,
+ 0xa81f, 0x3e0a, 0xa207, 0x5a0a, 0x5a0a, 0xe013, 0xa103, 0xe052,
+ 0x3470, 0x3c71, 0xf0be, 0x2072, 0x4c73, 0xa207, 0x5a48, 0x5a48,
+ 0xe013, 0xa103, 0xe052, 0x3472, 0x3c73, 0x284c, 0xe0c2, 0x0072,
+ 0x2c4b, 0xa002, 0x3c4b, 0xe0c2, 0x0070, 0xa200, 0x3c7e, 0xc84a,
+ 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xe41e, 0x1366, 0xe41e,
+ 0x0581, 0xa202, 0xe42e, 0xe41e, 0x1366, 0xa2fe, 0xe0c2, 0x0072,
+ 0xa200, 0xe0c2, 0x0076, 0xe42e, 0xd152, 0x0000, 0xd130, 0x0000,
+ 0xe41e, 0x0170, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0xe42a, 0xe0c0,
+ 0x0042, 0xce20, 0xd111, 0x0620, 0xd112, 0x0100, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xe000, 0x1000, 0xce20, 0xd111,
+ 0x0ba8, 0xd112, 0x004c, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xa200,
+ 0xe41e, 0x0c58, 0xe004, 0x0040, 0xe41e, 0x0c58, 0xe0c0, 0x0060,
+ 0x3cd4, 0xe0c0, 0x0061, 0x3c67, 0xe42e, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113, 0x0013,
+ 0xca28, 0xf7f8, 0xe0c0, 0x0061, 0x3ca7, 0xa202, 0x3ca6, 0xe41e,
+ 0x0711, 0xe128, 0xe0c0, 0x0060, 0xf048, 0xe41e, 0x1390, 0xf03e,
+ 0xe41e, 0x13c1, 0xe42e, 0xe0c0, 0x0040, 0xa201, 0xae17, 0xe042,
+ 0xe005, 0x3f00, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0450, 0xd112, 0x00c8, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0xe0c0, 0x0060, 0xf08a, 0xe0c0, 0x0061, 0x2298, 0x4e99, 0xe046,
+ 0xaf12, 0xae02, 0x3c9b, 0xe180, 0xe41e, 0x0711, 0xe41e, 0x07d3,
+ 0xe41e, 0x137d, 0xe41e, 0x1865, 0xe41e, 0x0557, 0x28de, 0x2a1e,
+ 0xb616, 0x3cdc, 0xa200, 0x3cd6, 0x3cda, 0x3cd9, 0x3cdb, 0x3cd8,
+ 0xe166, 0x05ab, 0xc710, 0x3d16, 0xe166, 0x0054, 0x9e06, 0xf16a,
+ 0x28d4, 0xa102, 0xcc44, 0xa200, 0x3c68, 0xe184, 0x045b, 0x9e06,
+ 0x5c68, 0xa802, 0xf07a, 0x2868, 0xe000, 0x0518, 0xe09e, 0xa208,
+ 0x3d07, 0x2868, 0xa002, 0x3c68, 0xe190, 0xa200, 0x3c63, 0xe41e,
+ 0x0722, 0xa202, 0x3c6e, 0xe42e, 0xe0c0, 0x005a, 0x3cee, 0xe41e,
+ 0x0100, 0xa206, 0xe41e, 0x0480, 0xe0c0, 0x005a, 0x3cee, 0xe41e,
+ 0x0100, 0xa236, 0xe41e, 0x0499, 0xe41e, 0x04af, 0xe42e, 0xa234,
+ 0xe41e, 0x0499, 0xe41e, 0x04cf, 0xa204, 0xe41e, 0x0480, 0xe42e,
+ 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11, 0xe042, 0x22f0,
+ 0x4ef1, 0xe042, 0x2a60, 0xae19, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ed, 0x0113, 0xca28, 0xf7f8,
+ 0xe42e, 0x3ced, 0xe0c0, 0x0041, 0xe005, 0x0298, 0xae11, 0xe042,
+ 0x22f0, 0x4ef1, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x00c0,
+ 0xd112, 0x0040, 0x88ed, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe161,
+ 0x07e0, 0x8911, 0x0145, 0x8911, 0x0144, 0x8911, 0x0146, 0x8911,
+ 0x0147, 0x8911, 0x0148, 0x8911, 0x0152, 0x8911, 0x0153, 0x2111,
+ 0x4d11, 0xce80, 0x2111, 0x4d11, 0xce82, 0x2111, 0x4d11, 0xce84,
+ 0x2111, 0x4d11, 0xce86, 0x2111, 0x4d11, 0xcc72, 0xe42e, 0xe161,
+ 0x07e0, 0x8b11, 0x0145, 0x8b11, 0x0144, 0x8b11, 0x0146, 0x8b11,
+ 0x0147, 0x8b11, 0x0148, 0x8b11, 0x0152, 0x8b11, 0x0153, 0xca80,
+ 0x3511, 0x3d11, 0xca82, 0x3511, 0x3d11, 0xca84, 0x3511, 0x3d11,
+ 0xca86, 0x3511, 0x3d11, 0xc872, 0x3511, 0x3d11, 0xe42e, 0xe165,
+ 0x07cc, 0x2915, 0x3c30, 0x2915, 0x3c32, 0x2915, 0x3c3b, 0x2915,
+ 0x3c33, 0x2915, 0x3c34, 0x2915, 0x3c3a, 0x2915, 0x2915, 0x2915,
+ 0x3c3c, 0x2915, 0x3cd3, 0xe42e, 0xe165, 0x07cc, 0x2830, 0x3d15,
+ 0x2832, 0x3d15, 0x283b, 0x3d15, 0x2833, 0x3d15, 0x2834, 0x3d15,
+ 0x283a, 0x3d15, 0x3d15, 0x3d15, 0x283c, 0x3d15, 0x28d3, 0x3d15,
+ 0xe42e, 0xa202, 0x3c8e, 0x28a3, 0x3c8a, 0x28a5, 0x3c8b, 0x28c1,
+ 0x3c8f, 0xe165, 0x07c8, 0x2915, 0x3ca5, 0x2915, 0x3ca3, 0x2915,
+ 0x3c30, 0x2915, 0x3cd3, 0xa202, 0x3c32, 0x3c34, 0x3ca5, 0x28be,
+ 0xa802, 0x3c33, 0xa200, 0x3c3a, 0x3c52, 0xe41e, 0x053b, 0x28be,
+ 0x4c3b, 0x3cbe, 0xe42e, 0x28be, 0xaa06, 0x3c3b, 0x2abf, 0x3ec1,
+ 0x3e0a, 0xaf09, 0x2072, 0x4c73, 0xf06b, 0x2070, 0x4c71, 0x2a0a,
+ 0xa81f, 0x3e0a, 0x2a3b, 0x5a0a, 0x5a0a, 0xe056, 0x2ac1, 0xaf09,
+ 0xf04b, 0x3470, 0x3c71, 0xe42e, 0x3472, 0x3c73, 0xe42e, 0xe161,
+ 0x0100, 0xa200, 0xc73f, 0x3d11, 0x3c68, 0xd022, 0x000f, 0xe184,
+ 0x0565, 0xe41e, 0x186b, 0x2868, 0xa002, 0x3c68, 0xe42e, 0xe0c0,
+ 0x005c, 0xe008, 0x0400, 0xe42a, 0xe004, 0x0400, 0xe0c1, 0x005d,
+ 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x005d, 0xe008,
+ 0x0400, 0xe190, 0xf7b8, 0xa200, 0x3c69, 0x3c6b, 0xe41e, 0x06b7,
+ 0xe42e, 0xe167, 0x0518, 0xa200, 0x3c68, 0xd022, 0x0007, 0xe184,
+ 0x058f, 0x2b17, 0xa81f, 0x5a68, 0xe056, 0x2a68, 0xa009, 0x3e68,
+ 0xa200, 0x3c68, 0xd022, 0x0007, 0xe184, 0x059c, 0x2b17, 0xa81f,
+ 0x5a68, 0xe056, 0x2a68, 0xa009, 0x3e68, 0xe42e, 0xa200, 0x3c69,
+ 0x3c6b, 0x3c6c, 0x3c4b, 0xe42e, 0xd146, 0x00c0, 0xd147, 0x00ff,
+ 0xd148, 0x00c0, 0xd144, 0x00c0, 0xd145, 0x0000, 0xd14b, 0x0200,
+ 0xe004, 0x0180, 0xce30, 0xca32, 0xca32, 0xce84, 0xca32, 0xce86,
+ 0xd144, 0x00c1, 0xe42e, 0xcaa2, 0xaf10, 0xa102, 0xf09a, 0xcaa0,
+ 0xe190, 0x286d, 0xe428, 0xca9c, 0xe418, 0x078e, 0xf75e, 0xcaa0,
+ 0xe190, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0xcaa0, 0x3c00, 0xca9c,
+ 0xe418, 0x078e, 0x2800, 0xaf0e, 0xf6b8, 0xa200, 0x3cec, 0x2800,
+ 0xaf0a, 0x3ca3, 0x2800, 0xa83e, 0x3ca4, 0x2a49, 0xf04b, 0xa10a,
+ 0xe016, 0x3ca5, 0x28a4, 0xa128, 0xe016, 0x3c5e, 0xf13a, 0xcaa0,
+ 0x3c00, 0xaf0e, 0xf0f8, 0xca9c, 0xe418, 0x078e, 0x2800, 0xaf0c,
+ 0xa802, 0xe016, 0x3ca5, 0xcaa0, 0xe190, 0xcaa0, 0xe190, 0xaf04,
+ 0x30ec, 0xca9c, 0xe418, 0x078e, 0xa200, 0x3ca8, 0x3ca7, 0x3ca0,
+ 0xe41e, 0x0606, 0xe41e, 0x0711, 0xe128, 0xe42e, 0x28a0, 0x44a1,
+ 0xf048, 0xd149, 0x0000, 0xf03e, 0xd149, 0x0080, 0xd14a, 0x0000,
+ 0xd14c, 0x0001, 0xca9c, 0xe418, 0x078e, 0xca9a, 0xf7c8, 0xca9c,
+ 0xf7a8, 0xca9e, 0x3ca6, 0xcc92, 0xca94, 0x00a8, 0x0ca7, 0x34a8,
+ 0x3ca7, 0xcc90, 0xe42e, 0x28a6, 0xe016, 0xc871, 0xa011, 0xe428,
+ 0xaf07, 0xe009, 0x07ff, 0x28a7, 0xe008, 0x07ff, 0xe046, 0xf15a,
+ 0xf0de, 0xe161, 0x05e1, 0x2901, 0xc871, 0xa011, 0xaf07, 0xe009,
+ 0x07ff, 0xe008, 0x07ff, 0xe046, 0xf08a, 0xe049, 0xe011, 0xaf15,
+ 0xe421, 0xe420, 0xa200, 0xe42e, 0xc868, 0xa80e, 0xf028, 0xa210,
+ 0x3c95, 0x7895, 0xa203, 0x5a95, 0xaf03, 0xe046, 0xe42e, 0x28a3,
+ 0x2aa5, 0x3c8a, 0x3e8b, 0x28a7, 0x2aa6, 0x3c8c, 0x3e8d, 0xa202,
+ 0x3c86, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029c,
+ 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112,
+ 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa, 0xe42e,
+ 0x288a, 0x2a8b, 0x3ca3, 0x3ea5, 0x288c, 0x2a8d, 0x3ca7, 0x3ea6,
+ 0xcc90, 0xcc93, 0xa200, 0x3c86, 0x3ca8, 0x3ca0, 0xe0c0, 0x0041,
+ 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029c, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113, 0x0013,
+ 0xca28, 0xf7f8, 0xe41e, 0x0711, 0xe128, 0xe42e, 0xe0c0, 0x0048,
+ 0xe002, 0x0200, 0xca89, 0xe003, 0x00c0, 0xa105, 0xae07, 0xe042,
+ 0xca8b, 0xe015, 0xa80f, 0xe042, 0xa002, 0x2298, 0x4e99, 0xe045,
+ 0xf047, 0x2e9a, 0xae11, 0xe042, 0xe0c1, 0x0048, 0xe045, 0xe003,
+ 0x0200, 0xf037, 0xe000, 0x0200, 0xe0c2, 0x0046, 0xe42e, 0xa200,
+ 0x3c9b, 0x2875, 0xaf02, 0xa802, 0xf05a, 0xe0c0, 0x0068, 0x3498,
+ 0x3c99, 0x2098, 0x4c99, 0xe0c1, 0x0067, 0xe042, 0xe0c1, 0x0069,
+ 0xa80f, 0xf02b, 0xe042, 0xe005, 0x0049, 0xe093, 0x9f01, 0xe004,
+ 0xffff, 0x3c9a, 0xe41e, 0x0711, 0xe41e, 0x07d3, 0xa200, 0x3c63,
+ 0xe41e, 0x0722, 0xe41e, 0x078e, 0xe41e, 0x05a4, 0xe42e, 0xa200,
+ 0x3c9b, 0xe0c0, 0x0062, 0xaf0c, 0xa802, 0xf10a, 0xe0c1, 0x0048,
+ 0xe0c0, 0x0060, 0xe045, 0xaf13, 0xae03, 0xa109, 0x3e9b, 0xf063,
+ 0xe0c0, 0x0061, 0xae04, 0xe042, 0x3c9b, 0xe0c0, 0x0060, 0x3498,
+ 0x3c99, 0xe0c0, 0x0061, 0xae04, 0x3c9a, 0xe41e, 0x0711, 0xe41e,
+ 0x07d3, 0xa200, 0x3c69, 0x3c6a, 0x3c6b, 0x3c6c, 0x3c63, 0xe41e,
+ 0x0722, 0xd071, 0x802a, 0xe181, 0xe41e, 0x078e, 0xe41e, 0x05a4,
+ 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035,
+ 0x0000, 0xd036, 0x007f, 0xd037, 0x0000, 0xd038, 0x0000, 0xd04b,
+ 0x0001, 0xe42e, 0x3c64, 0xe08e, 0x3c65, 0xe41e, 0x072e, 0xe41e,
+ 0x0749, 0x2865, 0xe09e, 0x2864, 0x3c63, 0xe42e, 0x2863, 0xae08,
+ 0xe000, 0x0538, 0xe09e, 0x8b17, 0x0033, 0x8b17, 0x0034, 0x8b17,
+ 0x0035, 0x8b17, 0x0036, 0x8b17, 0x0037, 0x8b17, 0x0038, 0xc860,
+ 0x3517, 0x3d17, 0xc862, 0x3517, 0x3d17, 0xc864, 0x3517, 0x3d17,
+ 0xe42e, 0x2864, 0xae08, 0xe000, 0x0538, 0xe09e, 0x8917, 0x0033,
+ 0x8917, 0x0034, 0x8917, 0x0035, 0x8917, 0x0036, 0x8917, 0x0037,
+ 0x8917, 0x0038, 0x2117, 0x4d17, 0xcc60, 0x2117, 0x4d17, 0xcc62,
+ 0x2117, 0x4d17, 0xcc64, 0xe42e, 0xc000, 0x2863, 0xe408, 0x13eb,
+ 0x28a6, 0xf188, 0x28a0, 0xf068, 0xe41e, 0x0606, 0xd04c, 0x0000,
+ 0xe470, 0xc896, 0xf05a, 0xe41e, 0x0784, 0xd04c, 0x0000, 0xe004,
+ 0x0080, 0x2aa1, 0xb616, 0xcc6e, 0xd04b, 0x0001, 0xa202, 0x3ca2,
+ 0xe470, 0xd04c, 0x0000, 0xe470, 0xa200, 0x3ca2, 0xe41e, 0x0606,
+ 0x28a6, 0xcc96, 0x28a1, 0xe016, 0x3ca1, 0xe42e, 0x286b, 0xf0ba,
+ 0xe004, 0x0180, 0xce30, 0xe41e, 0x0820, 0xe41e, 0x0843, 0xd14e,
+ 0x0000, 0xe42e, 0xe082, 0x3c9c, 0xe004, 0x0048, 0xe092, 0xd027,
+ 0x0000, 0x2869, 0xe41a, 0x07dd, 0xd027, 0x0001, 0x286d, 0xf278,
+ 0xca28, 0xf7f8, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0xce20,
+ 0xd111, 0x00c0, 0xd112, 0x0040, 0xe0c0, 0x0043, 0xa806, 0xae02,
+ 0xa032, 0xce26, 0xca28, 0xf7f8, 0x2c9b, 0xe000, 0x0002, 0x3c9b,
+ 0x1c9a, 0xf024, 0x3c9b, 0xf052, 0x2869, 0x3c6b, 0xe418, 0x0825,
+ 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042, 0x9f01, 0x289c, 0xe092,
+ 0xd14e, 0x0000, 0xe42e, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042,
+ 0xe005, 0x0048, 0xe093, 0x9f01, 0xe42e, 0xe0c1, 0x0043, 0xa809,
+ 0xe429, 0xa200, 0x3c9d, 0x2098, 0x4c99, 0x2e9b, 0xae11, 0xe042,
+ 0x8111, 0x9e89, 0xe045, 0xf043, 0x2c9a, 0xae10, 0xe041, 0xe003,
+ 0x0200, 0x2869, 0xb606, 0x3c69, 0xe423, 0xe001, 0x0200, 0x3e6a,
+ 0x2869, 0xe428, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0x3c69, 0xf648,
+ 0x2875, 0xa802, 0xf03a, 0x3c69, 0xe42e, 0xe0c0, 0x0059, 0xa102,
+ 0xf068, 0xe0c0, 0x0045, 0x306d, 0x286d, 0xe428, 0x289d, 0xf548,
+ 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf4fa, 0xe0c0, 0x005d, 0xe00a,
+ 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c9d, 0xe40e, 0x07e3,
+ 0xcbe1, 0xf7f9, 0xcba1, 0xf7f9, 0xe42e, 0x286a, 0xe42a, 0xe41e,
+ 0x0820, 0xaf04, 0xe000, 0x0180, 0xce30, 0x286a, 0xa806, 0xf10a,
+ 0xa209, 0xe045, 0xae07, 0x3e0a, 0xa2ff, 0x5a0a, 0xca32, 0xca32,
+ 0xe051, 0xca30, 0xa104, 0xe008, 0x01ff, 0xce30, 0xce33, 0xe005,
+ 0x01f0, 0x1a6a, 0xf095, 0xe004, 0x010b, 0xce32, 0xa200, 0xce32,
+ 0xce32, 0xce32, 0xe42e, 0xa021, 0xaf05, 0xe42b, 0xa200, 0xce32,
+ 0xa103, 0xf7e1, 0xe42e, 0xba0c, 0xf03a, 0xbcfc, 0xe42e, 0xba4c,
+ 0xa20c, 0x3c96, 0x2896, 0xa002, 0x3c96, 0xa140, 0xf0d2, 0xba40,
+ 0xf7aa, 0x5896, 0xa102, 0x349e, 0x3c9f, 0x2896, 0xe41e, 0x0890,
+ 0x009e, 0x0c9f, 0xe42e, 0xe16b, 0xe42e, 0xba0c, 0xf03a, 0xbe7e,
+ 0xe42e, 0xba4c, 0xa20c, 0x3c96, 0x2896, 0xa002, 0x3c96, 0xa140,
+ 0xf162, 0xba40, 0xf7aa, 0x5896, 0xa102, 0x349e, 0x3c9f, 0x2896,
+ 0xe41e, 0x0890, 0x009e, 0x0c9f, 0x3c9f, 0x8c9f, 0x0000, 0xa002,
+ 0xaf02, 0xe012, 0xe42c, 0xe012, 0xe16a, 0xe42e, 0xe16b, 0xe42e,
+ 0xa120, 0xf050, 0xa020, 0x3c97, 0x7497, 0xe42e, 0x3c97, 0xba5e,
+ 0x5897, 0x7697, 0xe056, 0xe42e, 0xba40, 0xe42a, 0xc868, 0xa80e,
+ 0x3c00, 0xe016, 0xe428, 0x7400, 0xe016, 0xe42e, 0x2a30, 0xa103,
+ 0x2826, 0xe425, 0xf02b, 0x2827, 0xb7f4, 0xa002, 0x3c46, 0xa104,
+ 0xe424, 0xf04a, 0xa25a, 0x3c47, 0xe42e, 0xbc0e, 0x3c00, 0xe42d,
+ 0x281f, 0xf02a, 0xbc0e, 0x3c01, 0xe42d, 0x2801, 0xae06, 0x4c00,
+ 0x3c47, 0xe161, 0x0708, 0xe164, 0x0700, 0x8840, 0x0022, 0xe41e,
+ 0x08d7, 0xe42d, 0x2830, 0xa104, 0xe428, 0x2841, 0xe161, 0x0768,
+ 0xe164, 0x0704, 0x8841, 0x0022, 0xe41e, 0x08d7, 0xe42e, 0xe082,
+ 0xa040, 0xe094, 0xa040, 0xe096, 0xe004, 0x00ff, 0x3c03, 0xa200,
+ 0x3c05, 0x3c06, 0x3c07, 0x3c08, 0x3c09, 0xe184, 0x0923, 0xba40,
+ 0xf0ba, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080, 0x4603,
+ 0xe056, 0x3d11, 0xf0ce, 0xa202, 0x5800, 0xae10, 0x3d11, 0x2206,
+ 0x4e07, 0xa202, 0x5805, 0xe056, 0x3406, 0x3c07, 0x281f, 0xf22a,
+ 0xba40, 0xf14a, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080,
+ 0x4603, 0xe056, 0x3d12, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7,
+ 0x0080, 0x4603, 0xe056, 0x3d13, 0xf0de, 0xa202, 0x5801, 0xae10,
+ 0x3d12, 0x3d13, 0x2208, 0x4e09, 0xa202, 0x5805, 0xe056, 0x3408,
+ 0x3c09, 0x2805, 0xa002, 0x3c05, 0x2006, 0x4c07, 0xe014, 0x3514,
+ 0x3d14, 0x2208, 0x4e09, 0xe015, 0x3714, 0x3f14, 0xe42e, 0xe0c4,
+ 0x3fff, 0xe40d, 0x0ae9, 0x3c4a, 0x284a, 0xe01a, 0x4488, 0xe408,
+ 0x0ae9, 0x2a7f, 0xf039, 0x2a89, 0xf03b, 0xe408, 0x0ae9, 0xa200,
+ 0x3c89, 0xbc12, 0xe40d, 0x0ae9, 0xa10a, 0xb4a8, 0xa104, 0xe400,
+ 0x0ae9, 0xb7b4, 0xa006, 0x3c30, 0x2849, 0xf0da, 0xbdfe, 0xe40d,
+ 0x0ae9, 0x1820, 0xf0ea, 0x0820, 0x3c20, 0xe41e, 0x13d5, 0xe40a,
+ 0x0ae9, 0xf07e, 0xbdfe, 0xe40d, 0x0ae9, 0x1820, 0xe408, 0x0ae5,
+ 0x2849, 0xf04a, 0x7411, 0x3c31, 0xf05e, 0x7411, 0x1831, 0xe408,
+ 0x0ae5, 0x2849, 0xf0ca, 0xa200, 0x3c32, 0x3c33, 0x2818, 0xf138,
+ 0xba40, 0x3c32, 0xf10a, 0xba40, 0x3c33, 0xf0de, 0x2818, 0xf0b8,
+ 0xba40, 0x1832, 0xe408, 0x0ae5, 0x2832, 0xf05a, 0xba40, 0x1833,
+ 0xe408, 0x0ae5, 0x2849, 0xf2aa, 0x281b, 0x5c32, 0x3c3c, 0xa200,
+ 0x3c34, 0x2832, 0xf10a, 0xe41e, 0x0af6, 0x3c34, 0xe016, 0x3c35,
+ 0xf0aa, 0xa202, 0x3c35, 0x28a3, 0xe01a, 0x3c36, 0x2831, 0x3c37,
+ 0x2833, 0x3c38, 0x2832, 0xe016, 0x4419, 0x3c3a, 0x2832, 0x0833,
+ 0xb674, 0x3c3b, 0xa106, 0xf0aa, 0xa202, 0x5830, 0x2a3b, 0xa105,
+ 0xf029, 0xae06, 0x2a55, 0xe055, 0x3e55, 0x2849, 0xe40a, 0x0a08,
+ 0x287e, 0xa104, 0xe40a, 0x0a06, 0x2875, 0xa802, 0xf26a, 0xe0c0,
+ 0x0065, 0xa808, 0xf108, 0x3c7f, 0xe0c0, 0x0065, 0xaf06, 0xa806,
+ 0xe40a, 0x0a06, 0xa102, 0xf07a, 0xa102, 0xf02a, 0xf09e, 0x28a3,
+ 0xf07a, 0xf3de, 0xa202, 0x3c7f, 0x28a5, 0xf02a, 0xf38e, 0xa2fa,
+ 0xe0c2, 0x0071, 0x2855, 0xae04, 0x4c30, 0x2a5c, 0xae3d, 0xe056,
+ 0xe0c2, 0x0073, 0xa200, 0xe42e, 0x287f, 0xf0fa, 0x28a5, 0xf21a,
+ 0x284a, 0xf1f8, 0x287c, 0xf23a, 0x2a32, 0xf04b, 0x2a34, 0xe409,
+ 0x09ea, 0xa102, 0x3c7c, 0xf15e, 0x287d, 0xf19a, 0xa102, 0xf06a,
+ 0xa102, 0xf060, 0x28a3, 0xf04a, 0xf12e, 0x28a5, 0xf108, 0x287c,
+ 0x2a32, 0xf04b, 0x2a34, 0xe409, 0x09fe, 0xa102, 0xf04a, 0x3c7c,
+ 0xa200, 0xe42e, 0xa202, 0x3c89, 0x3c7e, 0xe42e, 0xa204, 0x3c7e,
+ 0x2849, 0xf09a, 0x28a5, 0xf10a, 0xe41e, 0x0853, 0xe40d, 0x0ae9,
+ 0x3c3d, 0xf0ae, 0x28a5, 0xf08a, 0xe41e, 0x0853, 0xe40d, 0x0ae9,
+ 0x1c3d, 0xe408, 0x0ae5, 0x2849, 0xf10a, 0xe41e, 0x1151, 0x28c8,
+ 0xe008, 0x03ff, 0x2a3b, 0xa105, 0xf029, 0xae14, 0xe0c1, 0x007a,
+ 0xe055, 0xe0c3, 0x007a, 0xf2de, 0x2813, 0xa102, 0xf034, 0xf13a,
+ 0xf28e, 0x7414, 0x1ce3, 0xe408, 0x0ae5, 0x2832, 0xe016, 0x4422,
+ 0xf20a, 0xe41e, 0x086d, 0xe40d, 0x0ae9, 0x10e4, 0x1ce5, 0xe408,
+ 0x0ae5, 0xf17e, 0x2815, 0xf158, 0xe41e, 0x086d, 0xe40d, 0x0ae9,
+ 0x10e3, 0x1ce4, 0xe408, 0x0ae5, 0x2832, 0xe016, 0x4422, 0xf09a,
+ 0xe41e, 0x086d, 0xe40d, 0x0ae9, 0x10e5, 0x1ce6, 0xe408, 0x0ae5,
+ 0x2830, 0xa104, 0xf038, 0xba40, 0x3c3e, 0x2824, 0x3c40, 0x2825,
+ 0x3c41, 0x2830, 0xf0ea, 0xba40, 0xf0ca, 0xbc3e, 0x3c40, 0xe40d,
+ 0x0ae9, 0x2830, 0xa104, 0xf058, 0xbc3e, 0x3c41, 0xe40d, 0x0ae9,
+ 0x2849, 0xf0da, 0x2834, 0xf078, 0xe41e, 0x18ae, 0x28c1, 0xf074,
+ 0x3c39, 0xf05e, 0x2839, 0x3cc1, 0xe0c2, 0x0077, 0x2849, 0xf0ba,
+ 0x285e, 0xf05a, 0x28a5, 0xf03a, 0xe41e, 0x14f6, 0xe41e, 0x14bc,
+ 0xe41e, 0x0b10, 0x2830, 0xe016, 0xe41a, 0x0b19, 0xe40a, 0x0ae9,
+ 0xe41e, 0x08a6, 0xe40d, 0x0ae9, 0x2849, 0xf06a, 0xe41e, 0x104c,
+ 0xe40a, 0x0ae9, 0xf1fe, 0x28a3, 0xf1da, 0x28a5, 0xf04a, 0xba40,
+ 0xba40, 0xf18e, 0xba40, 0xf16a, 0xbc0c, 0xe40d, 0x0ae9, 0xf12a,
+ 0xa106, 0xf08a, 0xa104, 0xf79a, 0xe41e, 0x0853, 0xe40d, 0x0ae9,
+ 0xf74e, 0xe41e, 0x0853, 0xe40d, 0x0ae9, 0xbc40, 0xe40d, 0x0ae9,
+ 0xf6ce, 0x2830, 0xe01a, 0x4421, 0xf03a, 0xbc04, 0xf2bd, 0x3c3f,
+ 0xe0c6, 0x0033, 0xf27d, 0x0828, 0xa400, 0xa566, 0x3c42, 0xa200,
+ 0x3c43, 0x3c44, 0x3c45, 0x282a, 0xf10a, 0xbc04, 0xf1bd, 0x3c43,
+ 0xa102, 0xf0ba, 0xbe0c, 0xf16d, 0xae02, 0xa83e, 0x3c44, 0xbe0c,
+ 0xf11d, 0xae02, 0xa83e, 0x3c45, 0x2a3a, 0x284a, 0xe419, 0x0b09,
+ 0x3c4a, 0x183c, 0xf072, 0xa202, 0xe42e, 0x283c, 0x3c4a, 0xa202,
+ 0xe42e, 0xe16a, 0x28c1, 0xf094, 0xe41e, 0x186b, 0x28c1, 0xe41e,
+ 0x1872, 0x28c1, 0xe41e, 0x187b, 0xa200, 0xe42e, 0x28a5, 0xe016,
+ 0xe42a, 0x2835, 0xe42a, 0x2838, 0x1833, 0xe42a, 0x28a3, 0xf048,
+ 0x2836, 0xe016, 0xe42e, 0x2836, 0xe42a, 0x2837, 0x1831, 0xe016,
+ 0xe42e, 0xe049, 0xc70f, 0x7e50, 0xaf21, 0xae02, 0xe046, 0xe42e,
+ 0xe41e, 0x0bff, 0xd1f3, 0x0000, 0xe162, 0x0270, 0x2912, 0xcfe4,
+ 0xe42e, 0xe161, 0x0270, 0x2830, 0xa102, 0xf03a, 0xe161, 0x0290,
+ 0x2840, 0x3c04, 0xe162, 0x01b0, 0xe41e, 0x0b91, 0xe42a, 0xd1f3,
+ 0x0000, 0xe162, 0x01b0, 0x8840, 0x0022, 0xe184, 0x0b30, 0x2912,
+ 0xcfe4, 0x2830, 0xa104, 0xe428, 0x2841, 0x3c04, 0xe161, 0x02b0,
+ 0xe162, 0x01d0, 0xe41e, 0x0b91, 0xe42a, 0xd1f3, 0x0020, 0xe162,
+ 0x01d0, 0x8841, 0x0022, 0xe184, 0x0b46, 0x2912, 0xcfe4, 0xe161,
+ 0x05e0, 0xa23e, 0xc71f, 0x3d11, 0x2840, 0xe000, 0x01b0, 0xe094,
+ 0x2a40, 0x8840, 0x0022, 0xe184, 0x0b5a, 0x290a, 0xe000, 0x05e0,
+ 0xe092, 0x3f01, 0xa103, 0xd1f9, 0x0000, 0xe162, 0x05e0, 0xd022,
+ 0x001f, 0xe184, 0x0b64, 0x2912, 0xcff0, 0xe162, 0x01d0, 0x2902,
+ 0x3cc2, 0xe41e, 0x0c51, 0xe41e, 0x0c7d, 0x34c5, 0x3cc6, 0x2902,
+ 0xae02, 0xe000, 0x0160, 0xe09e, 0x2117, 0x4d17, 0x2317, 0x4f17,
+ 0x10c7, 0x1cc8, 0x12c7, 0x1ec8, 0xe010, 0xe011, 0xe046, 0xb624,
+ 0xb608, 0x3ccf, 0x2902, 0xe41e, 0x0c4a, 0xa102, 0xb628, 0x3ccd,
+ 0x2902, 0xaf02, 0xe000, 0x01a0, 0xe09e, 0x2907, 0x3cce, 0xa202,
+ 0xe42e, 0xba40, 0xf098, 0x8804, 0x0022, 0xe184, 0x0b98, 0x2911,
+ 0x3d12, 0xa202, 0xe42e, 0x28c0, 0xe42a, 0xe082, 0x3c08, 0x2c12,
+ 0x5832, 0x3400, 0x3c01, 0x2c31, 0x5832, 0x0832, 0x3402, 0x3c03,
+ 0x2804, 0x3c05, 0xe163, 0x05e0, 0xa200, 0xc71f, 0x3d13, 0xbc0a,
+ 0xe40d, 0x0bfc, 0xf0aa, 0xa102, 0xf17a, 0xa102, 0xf26a, 0xa104,
+ 0xf1da, 0xa102, 0xf1ba, 0xf2fe, 0xe41e, 0x0853, 0xe40d, 0x0bfc,
+ 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01, 0x3402,
+ 0x3c03, 0xa203, 0xf14e, 0xe41e, 0x0853, 0xe40d, 0x0bfc, 0xa002,
+ 0x0002, 0x0c03, 0x1000, 0x1c01, 0xf70e, 0xe41e, 0x0853, 0xe40d,
+ 0x0bfc, 0x2832, 0xa2fd, 0xf03e, 0xbc40, 0xa2ff, 0xe41e, 0x0c19,
+ 0xf1c4, 0x3d12, 0xe41e, 0x0c35, 0x2805, 0xa102, 0x3c05, 0xa004,
+ 0xe42a, 0xf46e, 0x2808, 0xa102, 0xe092, 0xe163, 0x05e0, 0x2805,
+ 0xf0a4, 0x2913, 0x8111, 0xf7e8, 0x2901, 0x3d12, 0x2805, 0xa102,
+ 0x3c05, 0xf76e, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x28c1,
+ 0xe424, 0xae04, 0x08c1, 0x08c1, 0xe000, 0x0620, 0xe09e, 0xe166,
+ 0x020d, 0xe165, 0x0214, 0xd022, 0x0002, 0xe184, 0x0c12, 0x2117,
+ 0x4d17, 0x9f16, 0x9f15, 0x28c1, 0xe41e, 0x0c7d, 0x34c3, 0x3cc4,
+ 0xe42e, 0x3c06, 0x3e07, 0xe163, 0x0230, 0x2816, 0x2a5e, 0xb5f6,
+ 0xe424, 0xae02, 0xa002, 0xcc44, 0xe184, 0x0c32, 0x2d13, 0x2b0b,
+ 0x1c06, 0x1a07, 0xf078, 0xf069, 0xe086, 0xe002, 0x0230, 0xaf02,
+ 0xe42e, 0x8113, 0x8113, 0xa2fe, 0xe42e, 0x3c09, 0x2808, 0xe092,
+ 0x28c0, 0xa102, 0xcc44, 0xe184, 0x0c40, 0x2901, 0x1809, 0xf03a,
+ 0x8111, 0xe42e, 0xe082, 0x1808, 0xe000, 0x05e0, 0xe096, 0xa202,
+ 0x3d03, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0101, 0xe09e, 0x2907,
+ 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0103, 0xe09e, 0x2907, 0xe42e,
+ 0x3c0a, 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xe000, 0x0180, 0x080a,
+ 0xce20, 0xd111, 0x05e0, 0xd112, 0x0020, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x055c,
+ 0xae0f, 0x0a0a, 0xe042, 0xce20, 0xd111, 0x05e0, 0xd112, 0x0020,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x3c0a, 0xaf02, 0xae06,
+ 0xe0c1, 0x0041, 0xe042, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x055c,
+ 0xae0f, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05e0, 0xd112,
+ 0x0004, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe004, 0x05e0, 0xe09e,
+ 0x2117, 0x4d17, 0x2a0a, 0xa803, 0xe42b, 0x2117, 0x4d17, 0xe42e,
+ 0xba4e, 0x3c4d, 0xa184, 0xe404, 0x0dae, 0xa17c, 0xe400, 0x0dae,
+ 0xba4a, 0x3c5d, 0xba42, 0xe408, 0x0dae, 0xba4e, 0x3c1c, 0xa112,
+ 0xe404, 0x0dae, 0xa154, 0xe400, 0x0dae, 0xbc3e, 0x3c10, 0xa202,
+ 0x3c1f, 0x284d, 0xa1c8, 0xf06a, 0xa124, 0xf04a, 0xa114, 0xf02a,
+ 0xf2fe, 0xbc06, 0x3c1f, 0xbc08, 0xe408, 0x0dae, 0xbc08, 0xe408,
+ 0x0dae, 0xba40, 0xba40, 0x3cb0, 0xf23a, 0xa201, 0x3eb2, 0x3eb4,
+ 0xe160, 0x0000, 0xba40, 0xf11a, 0x2ab2, 0xae03, 0xe056, 0x3cb2,
+ 0xe080, 0xe41e, 0x0f01, 0x2ab4, 0xae03, 0xe056, 0x3cb4, 0xe080,
+ 0xa201, 0xe41e, 0x0f34, 0xf07e, 0x2ab2, 0xae03, 0x3eb2, 0x2ab4,
+ 0xae03, 0x3eb4, 0xe080, 0xa002, 0xe090, 0xa110, 0xf648, 0xbc18,
+ 0xe40d, 0x0dae, 0xa008, 0x3c11, 0xa202, 0x5811, 0x3c12, 0xbc04,
+ 0x3c13, 0xe40d, 0x0dae, 0xa102, 0xf034, 0xf06a, 0xf21e, 0xbc18,
+ 0xa008, 0x3c14, 0xf1de, 0xba40, 0x3c15, 0xe41e, 0x086d, 0x34e7,
+ 0x3ce8, 0xe41e, 0x086d, 0x34e9, 0x3cea, 0xbdfe, 0xe40d, 0x0dae,
+ 0x3ceb, 0xf0ea, 0xa102, 0xcc44, 0xe162, 0x0250, 0xe184, 0x0d1b,
+ 0xe41e, 0x086d, 0x3512, 0x3d12, 0xe41e, 0x0e7e, 0xf01e, 0xe40d,
+ 0x0dae, 0xbc20, 0xe40d, 0x0dae, 0x3c16, 0xba40, 0x3c17, 0x2250,
+ 0x4e51, 0xe0c4, 0x007f, 0xe40d, 0x0dae, 0xa002, 0x3c50, 0xe0c4,
+ 0x007f, 0xe40d, 0x0dae, 0xa002, 0x3c51, 0x8450, 0x8251, 0xe018,
+ 0x3c1b, 0x2c57, 0xf1ba, 0x2050, 0x4c51, 0xe046, 0xf20a, 0x2c57,
+ 0xaf10, 0xe008, 0x00ff, 0x1850, 0xf064, 0x2c57, 0xe008, 0x00ff,
+ 0x1851, 0xf152, 0x2050, 0x4c51, 0xae08, 0xe0c2, 0x006f, 0xe0c2,
+ 0x004f, 0xa2fe, 0x3c57, 0xe40e, 0x0dae, 0x2850, 0xe008, 0x00ff,
+ 0xae10, 0x2a51, 0xe009, 0x00ff, 0xe056, 0x3c57, 0xa200, 0x3c19,
+ 0xba40, 0x3c18, 0xf098, 0xba40, 0x3c19, 0x2851, 0xae02, 0x3c51,
+ 0x281b, 0xae02, 0x3c1b, 0xe0c0, 0x0059, 0xa102, 0xf038, 0xe41e,
+ 0x0e3a, 0xba40, 0x3c1a, 0x4c18, 0xf3aa, 0xba40, 0x3c58, 0x3c59,
+ 0x3c5a, 0x3c5b, 0xf14a, 0xe41e, 0x0853, 0x3c58, 0xe41e, 0x0853,
+ 0x3c59, 0xe41e, 0x0853, 0x2a18, 0xf029, 0xae02, 0x3c5a, 0xe41e,
+ 0x0853, 0x2a18, 0xf029, 0xae02, 0x3c5b, 0xf21d, 0xe0c0, 0x0059,
+ 0xa102, 0xf0e8, 0x2a1f, 0x2058, 0x4c59, 0xf02b, 0xae02, 0xe0c2,
+ 0x0076, 0x205a, 0x4c5b, 0xf02b, 0xae02, 0xe0c2, 0x0077, 0xa200,
+ 0x3c82, 0x3c83, 0x281d, 0x3cde, 0x3cdf, 0xba40, 0xe016, 0xe41a,
+ 0x0e93, 0xf05a, 0xe41e, 0x089c, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0xe41e, 0x0853, 0x3c20, 0xbc3e, 0xe40d, 0x0e37, 0x1810,
+ 0xf0ea, 0x0810, 0x3c10, 0xe41e, 0x13ab, 0x3c66, 0xa202, 0xe41e,
+ 0x0722, 0xa203, 0x3e94, 0x2866, 0xe40a, 0x0e37, 0xba40, 0x3c21,
+ 0xba40, 0x3c22, 0xbc0e, 0xe40d, 0x0e37, 0x3c23, 0xe408, 0x0e37,
+ 0xbc3e, 0xe40d, 0x0e37, 0x3c24, 0xbc3e, 0x3c25, 0xe40d, 0x0e37,
+ 0xba40, 0x3c26, 0xba42, 0x3c27, 0xbe34, 0xe40d, 0x0e37, 0xa034,
+ 0x3c28, 0xe404, 0x0e37, 0xa168, 0xe402, 0x0e37, 0xbe34, 0xe40d,
+ 0x0e37, 0xa034, 0xe404, 0x0e37, 0xa168, 0xe402, 0x0e37, 0xbe18,
+ 0xe40d, 0x0e37, 0x3c29, 0x3c2d, 0xba40, 0x3c2a, 0xba40, 0x3c2b,
+ 0xba40, 0x3c2c, 0xa200, 0x3c2e, 0x3cb1, 0x2820, 0x3c02, 0xe41e,
+ 0x1474, 0xe41e, 0x0631, 0xf30a, 0xba40, 0x3c2e, 0xba40, 0x3cb1,
+ 0xf28a, 0xa201, 0x3eb3, 0x3eb5, 0xe160, 0x0000, 0xe080, 0xa10c,
+ 0x182e, 0x182e, 0xf132, 0xba40, 0xf11a, 0x2ab3, 0xae03, 0xe056,
+ 0x3cb3, 0xe080, 0xe41e, 0x0f01, 0x2ab5, 0xae03, 0xe056, 0x3cb5,
+ 0xe080, 0xa203, 0xe41e, 0x0f34, 0xf07e, 0x2ab3, 0xae03, 0x3eb3,
+ 0x2ab5, 0xae03, 0x3eb5, 0xe080, 0xa002, 0xe090, 0xa110, 0xf5f8,
+ 0xbe18, 0xf06d, 0x3c2d, 0xe41e, 0x089c, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0x2a1c, 0xa115, 0xe004, 0x0129, 0xf2d7, 0xa103,
+ 0xe004, 0x02a3, 0xf297, 0xa113, 0xe004, 0x06f6, 0xf257, 0xa103,
+ 0xe004, 0x0dec, 0xf217, 0xa113, 0xe004, 0x17bb, 0xf1d7, 0xa103,
+ 0xe004, 0x34bc, 0xf197, 0xa103, 0xe004, 0x3c00, 0xf157, 0xa113,
+ 0xe004, 0x6000, 0xf117, 0xa103, 0xe004, 0x6600, 0xf0d7, 0xa111,
+ 0xe004, 0x1437, 0xae08, 0xf087, 0xa103, 0xe004, 0x21c0, 0xae08,
+ 0xf037, 0xe004, 0x17bb, 0xae12, 0x841b, 0xe182, 0x0180, 0xe019,
+ 0xc407, 0xd022, 0x000f, 0xe184, 0x0e77, 0xe046, 0xf034, 0x8117,
+ 0xe190, 0xe08e, 0xae02, 0xa520, 0x3c1d, 0xe42e, 0xe0c0, 0x0041,
+ 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029e, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0250, 0xd112, 0x0200, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0xba40, 0xf15a, 0xba4e, 0xe0c1, 0x0059,
+ 0xa103, 0xf039, 0xe0c2, 0x006c, 0xe002, 0x00ff, 0xf0b8, 0xba5e,
+ 0xba5f, 0xae20, 0xe056, 0xe0c1, 0x0059, 0xa103, 0xf039, 0xe0c2,
+ 0x006c, 0xba40, 0xf02a, 0xba40, 0xba40, 0xf08a, 0xba44, 0xba40,
+ 0xba40, 0xf04a, 0xba4e, 0xba4e, 0xba4e, 0xba40, 0xf03a, 0xbc0a,
+ 0xbc0a, 0xba40, 0xf06a, 0xba7e, 0xe190, 0xba7e, 0xe190, 0xba40,
+ 0xba40, 0x3c82, 0xe016, 0xe161, 0x05bd, 0xe41a, 0x0ee6, 0xf1ca,
+ 0xba40, 0x3c83, 0xe016, 0xe161, 0x05c2, 0xe41a, 0x0ee6, 0xf14a,
+ 0x2882, 0x4c83, 0xf02a, 0xba40, 0xba40, 0x3c4f, 0xba40, 0xf09a,
+ 0xba40, 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0x3cdf,
+ 0xe16a, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x0853,
+ 0xcc44, 0xa002, 0x3d11, 0xba46, 0xba46, 0xe184, 0x0ef3, 0xe41e,
+ 0x0853, 0xe41e, 0x0853, 0xba40, 0xba48, 0xa002, 0x3d11, 0xba48,
+ 0xa002, 0x3d11, 0xba48, 0xa002, 0x3d11, 0xba48, 0x3d11, 0xa202,
+ 0xe42e, 0xd022, 0x000f, 0xa10c, 0xf034, 0xd022, 0x003f, 0xe161,
+ 0x05e0, 0xa210, 0x3c06, 0x3c07, 0xa200, 0x3c08, 0x3c09, 0xe09c,
+ 0xe09e, 0xe184, 0x0f31, 0x2807, 0xf10a, 0xe41e, 0x086d, 0xe42d,
+ 0x0806, 0xe000, 0x0100, 0xe008, 0x00ff, 0x3c07, 0x4c09, 0xe01a,
+ 0xe016, 0xe09e, 0xa202, 0x3c09, 0x2807, 0xf028, 0x2806, 0x3c06,
+ 0xe08d, 0xa003, 0xe09d, 0xa803, 0xf059, 0xe085, 0xae11, 0xe056,
+ 0x3d11, 0xe094, 0xe08e, 0xe42e, 0x3e08, 0x3c06, 0xa211, 0x3e07,
+ 0xa10c, 0xf064, 0xb690, 0xa00c, 0x3c06, 0xa240, 0x3c07, 0x2806,
+ 0x2a08, 0xf02b, 0xa01c, 0xae08, 0x3c06, 0xe0c0, 0x0041, 0x22f0,
+ 0x4ef1, 0xe042, 0xe005, 0x02ac, 0xae11, 0xe042, 0x0806, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x05e0, 0x2807, 0xce24, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0x2875, 0xa802, 0xe42a, 0xe0c0, 0x0045,
+ 0xaf04, 0xa802, 0xe42e, 0xa200, 0xba4f, 0xe042, 0xe003, 0x00ff,
+ 0xf7cb, 0x3c00, 0xa200, 0xba4f, 0xe042, 0xe003, 0x00ff, 0xf7cb,
+ 0x3c01, 0xe41e, 0x0f7a, 0xe42a, 0xe41e, 0x0623, 0xf6d8, 0xe41e,
+ 0x089c, 0xe42e, 0x2800, 0xf10a, 0xa102, 0xf11a, 0xa104, 0xf12a,
+ 0xa102, 0xf13a, 0xa102, 0xf14a, 0x2a01, 0xf04b, 0xba4e, 0xa103,
+ 0xf7e9, 0xa202, 0xe42e, 0xe41e, 0x0fa2, 0xf0de, 0xe41e, 0x0fc9,
+ 0xf0ae, 0xe41e, 0x1024, 0xf07e, 0xe41e, 0x1034, 0xf04e, 0xe41e,
+ 0x1042, 0xf01e, 0xe42a, 0xc868, 0xa80e, 0xe016, 0xe428, 0xe41e,
+ 0x089c, 0xe42e, 0xbc3e, 0x1810, 0xf0da, 0x0810, 0x3c10, 0xe41e,
+ 0x13ab, 0x3c66, 0xa200, 0xe41e, 0x0722, 0xa201, 0x3e94, 0x2866,
+ 0xe42a, 0x2882, 0xe161, 0x05bd, 0xe418, 0x0fbd, 0x2883, 0xe161,
+ 0x05c2, 0xe418, 0x0fbd, 0xa202, 0xe42e, 0x2911, 0xa102, 0xcc44,
+ 0xe184, 0x0fc7, 0x2901, 0xe41e, 0x0890, 0x2901, 0xe41e, 0x0890,
+ 0xe42e, 0xe166, 0x004c, 0x2882, 0xe161, 0x05bf, 0xf038, 0xe161,
+ 0x05c4, 0x4c83, 0xf09a, 0x2911, 0xe41e, 0x0890, 0x2911, 0xe41e,
+ 0x0890, 0x2911, 0xf02e, 0xa230, 0x3c02, 0x284f, 0xe016, 0xe428,
+ 0xba46, 0xe0c2, 0x007b, 0xa112, 0xb604, 0xe42a, 0xa012, 0xe049,
+ 0xa200, 0xa107, 0xb426, 0xa105, 0xb426, 0xa105, 0xb5f6, 0xcc44,
+ 0xe184, 0x1021, 0xa201, 0xba40, 0xf038, 0x9f96, 0xf2be, 0xba42,
+ 0xba40, 0xba48, 0xba40, 0x3c03, 0xba40, 0xba40, 0xae32, 0xe055,
+ 0xba4e, 0xe055, 0x2803, 0xf0ba, 0xba4a, 0xae10, 0xe055, 0xba4a,
+ 0xae1c, 0xe055, 0xba48, 0xae28, 0xe055, 0xf10e, 0xba40, 0xf0ea,
+ 0xba4a, 0xae10, 0xe055, 0xba40, 0xf09a, 0xba4a, 0xae1c, 0xe055,
+ 0xba40, 0xf04a, 0xba48, 0xae28, 0xe055, 0x9f96, 0x2802, 0xe41e,
+ 0x0890, 0xe190, 0xa202, 0xe42e, 0x2801, 0xf0da, 0xa102, 0xcc44,
+ 0xe004, 0x00ff, 0xe184, 0x102d, 0xba4f, 0xe052, 0xe002, 0x00ff,
+ 0xe016, 0xe42a, 0xa202, 0xe42e, 0xa202, 0xba4f, 0xe003, 0x00ff,
+ 0xf039, 0xba4f, 0xa204, 0xba4f, 0xa002, 0x2a01, 0xe045, 0xf7c1,
+ 0xa202, 0xe42e, 0x2801, 0xa420, 0xa102, 0xcc44, 0xe184, 0x1049,
+ 0xba4e, 0xe190, 0xa202, 0xe42e, 0x2c31, 0x3cd0, 0xa202, 0x3cd1,
+ 0xa200, 0x3cd2, 0x3cd3, 0x28a3, 0xe016, 0xe428, 0x28a5, 0xf0ca,
+ 0xe41e, 0x10e9, 0xba40, 0xba40, 0xb7f0, 0xb634, 0x3cd1, 0xa200,
+ 0x3cd0, 0xa202, 0xe42e, 0xba40, 0xf048, 0xa202, 0x3cd2, 0xe42e,
+ 0x2816, 0xe42a, 0xae02, 0x3c09, 0x2812, 0x5832, 0x3400, 0x3c01,
+ 0x2c31, 0x5832, 0x0832, 0x3402, 0x3c03, 0xbc0c, 0xe40d, 0x10e6,
+ 0xe40a, 0x10e4, 0xa102, 0xf0ca, 0xa102, 0xf1da, 0xa102, 0xf24a,
+ 0xa102, 0xf3aa, 0xa102, 0xe40a, 0x10c4, 0xe40e, 0x10cc, 0xe41e,
+ 0x0853, 0xe40d, 0x10e6, 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032,
+ 0x0000, 0x0c01, 0xa203, 0xe41e, 0x10f0, 0xe408, 0x1099, 0xa203,
+ 0x3ed2, 0xf5ce, 0xbc40, 0xe40d, 0x10e6, 0xa2ff, 0xe41e, 0x10f0,
+ 0xe40a, 0x10e6, 0xf53e, 0xe41e, 0x0853, 0xe40d, 0x10e6, 0xa002,
+ 0x1002, 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01, 0x3c06, 0xa802,
+ 0x4432, 0xbc21, 0xf34d, 0x5a32, 0xe041, 0x3e07, 0xe41e, 0x1108,
+ 0xf2ea, 0xe40e, 0x1075, 0xbc20, 0xf2ad, 0xa102, 0x5832, 0x0832,
+ 0xe41e, 0x1123, 0xe40e, 0x1075, 0xe41e, 0x10e9, 0xa202, 0x3cd3,
+ 0xa200, 0x3cd0, 0xe40e, 0x1075, 0xbc20, 0xf19d, 0x3cd0, 0x28d0,
+ 0x5832, 0x0832, 0xa2ff, 0xe41e, 0x10f0, 0xf7a8, 0x2832, 0xf09a,
+ 0x2834, 0xf078, 0x28d0, 0xae02, 0xa2ff, 0xe41e, 0x10f0, 0xf7b8,
+ 0xa2fe, 0x3cd1, 0xe40e, 0x1075, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0xc410, 0xe161, 0x01f1, 0xa200, 0xc71f, 0x3d31, 0xe42e,
+ 0x3c04, 0x3e05, 0xe161, 0x01f0, 0x8809, 0x0022, 0xe184, 0x1103,
+ 0x2d11, 0x2b09, 0x1c04, 0x1a05, 0xf068, 0xf059, 0x8111, 0xa200,
+ 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200, 0xe42e, 0xa202, 0xe42e,
+ 0x2807, 0xa2ff, 0xe41e, 0x10f0, 0xf7c8, 0xe161, 0x01f0, 0x8809,
+ 0x0022, 0xe184, 0x111e, 0x2d11, 0x2b09, 0x1c06, 0xf078, 0xf067,
+ 0x2807, 0x3d11, 0xa2fe, 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200,
+ 0xe42e, 0xa202, 0xe42e, 0x3c08, 0xe161, 0x01f0, 0x8809, 0x0022,
+ 0xe184, 0x1133, 0x2d11, 0x2b09, 0x1808, 0xf056, 0xf043, 0x8111,
+ 0xa200, 0x3d09, 0x8111, 0x8111, 0xe42e, 0x2816, 0x184e, 0xf112,
+ 0x884e, 0x0022, 0xe161, 0x0102, 0xe184, 0x1147, 0x2911, 0xf06a,
+ 0x2909, 0xe412, 0x186b, 0xa200, 0x3d11, 0xe082, 0xa006, 0xe092,
+ 0x2816, 0xb62c, 0x3c4e, 0x2813, 0xa104, 0xe428, 0xe41e, 0x12fb,
+ 0xe42e, 0x2813, 0xa102, 0xf034, 0xf0fa, 0xf2be, 0x7414, 0x3ce3,
+ 0x2832, 0xe016, 0x4422, 0xe418, 0x086d, 0xe42d, 0x34e4, 0x3ce5,
+ 0xe41e, 0x123c, 0xf20e, 0xa200, 0x34e3, 0x3ce4, 0x34e5, 0x3ce6,
+ 0x2815, 0xf0f8, 0xe41e, 0x086d, 0xe42d, 0x34e3, 0x3ce4, 0x2822,
+ 0xf08a, 0x2832, 0xf068, 0xe41e, 0x086d, 0xe42d, 0x34e5, 0x3ce6,
+ 0xe41e, 0x1278, 0xf08e, 0x34e3, 0x3ce4, 0x34e5, 0x3ce6, 0xf03e,
+ 0xe41e, 0x12bb, 0x2832, 0x2a33, 0xf0b9, 0xf078, 0x20c9, 0x4cca,
+ 0x22cb, 0x4ecc, 0xe066, 0xf06e, 0x20c9, 0x4cca, 0xf03e, 0x20cb,
+ 0x4ccc, 0x34c7, 0x3cc8, 0xe42e, 0x281e, 0xf04a, 0x2813, 0xa104,
+ 0xf0b8, 0x28c1, 0x2a60, 0xae1f, 0xe056, 0x3c01, 0xe41e, 0x1872,
+ 0xe41e, 0x1338, 0xe42e, 0x28a5, 0x4cd3, 0x2a5e, 0xe017, 0xe052,
+ 0xe418, 0x12fb, 0x28d8, 0xae02, 0xe000, 0x0578, 0xe092, 0x20c7,
+ 0x4cc8, 0x3511, 0x3d11, 0x28d8, 0xe000, 0x059a, 0xe092, 0x28c1,
+ 0x2a60, 0xae1f, 0xe056, 0x3d11, 0x28d8, 0xa002, 0x3cd8, 0xa200,
+ 0x3c0c, 0xe41e, 0x1891, 0xf098, 0xe41e, 0x1300, 0x280c, 0xa180,
+ 0xf052, 0xa082, 0x3c0c, 0xf76e, 0xe42e, 0xe41e, 0x1865, 0xe42e,
+ 0x28c1, 0xe424, 0xe000, 0x06e0, 0xe092, 0x20aa, 0x4cab, 0x8450,
+ 0x8251, 0xe019, 0xe41e, 0x11e2, 0xe049, 0xa141, 0xf027, 0xa240,
+ 0x3d01, 0xe42e, 0x3e0a, 0xa201, 0xf032, 0xe012, 0xa203, 0x3e0e,
+ 0x3c0b, 0xaf20, 0xc70f, 0x7c0a, 0x3c0c, 0xaf20, 0xae20, 0x4c0b,
+ 0xc70f, 0x7c0a, 0x3c0d, 0x200c, 0x4c0d, 0x2a0e, 0xe42b, 0xe012,
+ 0xe42e, 0xe41e, 0x0f5b, 0xf04a, 0xe41e, 0x12fb, 0xf0be, 0x287f,
+ 0xf04a, 0xe41e, 0x12fb, 0xf06e, 0x28dc, 0xf04a, 0xa102, 0x3cdc,
+ 0xf29e, 0x28db, 0xf27a, 0x28da, 0xe000, 0x05ab, 0xe092, 0x28da,
+ 0xa002, 0x3cda, 0xa124, 0xf028, 0x3cda, 0x28db, 0xa102, 0x3cdb,
+ 0x287f, 0xf0ba, 0x28db, 0xf05a, 0x2901, 0xe41e, 0x187b, 0xf6ae,
+ 0x281e, 0xf03a, 0x28de, 0x3cdc, 0x2901, 0xe049, 0xe009, 0x8000,
+ 0xf08b, 0xe0c1, 0x006d, 0xa903, 0xe0c3, 0x006d, 0xe008, 0x7fff,
+ 0xe42e, 0xe41e, 0x0f5b, 0xf078, 0x286c, 0xf058, 0x287d, 0xf03a,
+ 0xa2fc, 0xe42e, 0xa2fe, 0xe42e, 0xa202, 0x5814, 0xaf02, 0x3c06,
+ 0x28a5, 0x2ad7, 0xf078, 0xf099, 0x20e6, 0x4ce7, 0x22e8, 0x4ee9,
+ 0xf07e, 0xa200, 0xa201, 0xf04e, 0xa200, 0x22ea, 0x4eeb, 0x3400,
+ 0x3c01, 0x3602, 0x3e03, 0x2ee3, 0x1202, 0x1e03, 0xf071, 0xe013,
+ 0x1e06, 0xf085, 0x0c06, 0x0c06, 0xf05e, 0x1e06, 0xf037, 0x1c06,
+ 0x1c06, 0x3404, 0x3c05, 0x0ce3, 0x34c9, 0x3cca, 0x00e4, 0x0ce5,
+ 0x34cb, 0x3ccc, 0x28a3, 0xf0ca, 0x20c9, 0x4cca, 0x34ea, 0x3ceb,
+ 0x2004, 0x4c05, 0x34e6, 0x3ce7, 0x2ce3, 0x34e8, 0x3ce9, 0xe42e,
+ 0xe41e, 0x12cc, 0x28eb, 0xf30a, 0x2000, 0x4c01, 0x0c31, 0xf2c6,
+ 0x2aa3, 0xe017, 0xe046, 0xa102, 0xf274, 0xe188, 0x000f, 0x7ceb,
+ 0x3402, 0x3c03, 0xe41e, 0x12e6, 0x28eb, 0xa102, 0xcc44, 0xe161,
+ 0x0250, 0xa200, 0xe184, 0x1295, 0x0111, 0x0d11, 0xae02, 0x3404,
+ 0xe008, 0xffff, 0xaf02, 0x3c05, 0x8403, 0x8204, 0xe018, 0xae1e,
+ 0x8205, 0xe01c, 0xe161, 0x0250, 0x8802, 0x0022, 0xe184, 0x12a9,
+ 0x0111, 0x0d11, 0xf02e, 0xa200, 0x2aa3, 0xf039, 0x00e7, 0x0ce8,
+ 0x00e3, 0x0ce4, 0x34c9, 0x3cca, 0x00e9, 0x0cea, 0x00e5, 0x0ce6,
+ 0x34cb, 0x3ccc, 0xe42e, 0xe41e, 0x12cc, 0x28a5, 0xe016, 0xf08a,
+ 0x2000, 0x4c01, 0x0c31, 0xae02, 0x2aa3, 0xe017, 0xe046, 0x34c9,
+ 0x3cca, 0x34cb, 0x3ccc, 0xe42e, 0x28d7, 0xf05a, 0xa200, 0x34e1,
+ 0x3ce2, 0x3ce0, 0x28a5, 0xe016, 0xf09a, 0x20e1, 0x4ce2, 0x2ee0,
+ 0x1e31, 0xf047, 0xa203, 0x5a11, 0xe042, 0x3400, 0x3c01, 0x2831,
+ 0x3ce0, 0x2000, 0x4c01, 0x34e1, 0x3ce2, 0xe42e, 0xe0c0, 0x0041,
+ 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x029e, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0xd111, 0x0250, 0xd112, 0x0200, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0x28d8, 0xe426, 0xe41e, 0x1300, 0xf7ce,
+ 0x28d8, 0xe426, 0xe161, 0x0578, 0xe162, 0x0578, 0x2111, 0x4d11,
+ 0xa201, 0x3e00, 0xa203, 0x28d8, 0xa104, 0xf0e4, 0xcc44, 0xe184,
+ 0x131a, 0x2112, 0x4d0a, 0x1111, 0x1d11, 0xf056, 0xe082, 0xa104,
+ 0xe094, 0x3e00, 0xa003, 0xe084, 0xa004, 0xe092, 0x2800, 0xe000,
+ 0x059a, 0xe098, 0xa002, 0xe096, 0x2904, 0x3c01, 0xe41e, 0x1872,
+ 0x28d8, 0x1800, 0xa104, 0xf0a4, 0xcc44, 0xe184, 0x1334, 0x2911,
+ 0x3d12, 0x2911, 0x3d12, 0x2913, 0x3d14, 0x28d8, 0xa102, 0x3cd8,
+ 0x28d9, 0xe000, 0x05ab, 0xe092, 0x2801, 0x3d01, 0x28d9, 0xa002,
+ 0x3cd9, 0xa124, 0xf028, 0x3cd9, 0x28db, 0xa002, 0x3cdb, 0xe42e,
+ 0xa200, 0x3c68, 0x28d4, 0xa102, 0xcc44, 0xe184, 0x1364, 0xe0c0,
+ 0x0054, 0x5c68, 0xa802, 0xf0b8, 0x2868, 0xe049, 0xe001, 0x0518,
+ 0xe09f, 0x2b07, 0xa809, 0xe419, 0x187b, 0xf05e, 0x2868, 0xa209,
+ 0xe41e, 0x188a, 0x2a68, 0xa003, 0x3e68, 0xe42e, 0xe004, 0x0518,
+ 0xe09e, 0xe004, 0x0054, 0xe09c, 0x28d4, 0xa102, 0xcc44, 0xa200,
+ 0x3c68, 0xe184, 0x137a, 0x2b17, 0xaf05, 0xa803, 0x5a68, 0xe056,
+ 0x2a68, 0xa003, 0x3e68, 0x9f06, 0xe42e, 0xe161, 0x05e0, 0xa200,
+ 0x3d11, 0x3c02, 0xd022, 0x013f, 0xe184, 0x138a, 0xe41e, 0x1472,
+ 0x2802, 0xa002, 0x3c02, 0xa200, 0x3c94, 0x3c90, 0x3c91, 0xe42e,
+ 0xba4e, 0xba40, 0xba40, 0xba40, 0xba40, 0xba46, 0xba4e, 0xbc3e,
+ 0xf10d, 0x3c00, 0x1810, 0xf038, 0xa2fe, 0x3c10, 0x2800, 0xe000,
+ 0x0100, 0x2a5e, 0xf02b, 0xa040, 0xe41e, 0x13f8, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0xa204, 0x3c94, 0x2810, 0xe000, 0x0100,
+ 0x2a5e, 0xf02b, 0xa040, 0xe41e, 0x1444, 0xe42a, 0xe41e, 0x0ca0,
+ 0xf05a, 0xe41e, 0x1135, 0xa202, 0xe42e, 0xa2fe, 0x3c10, 0xa200,
+ 0xe42e, 0xe41e, 0x0853, 0xf0fd, 0x3c01, 0xe002, 0x00ff, 0xf0b0,
+ 0x2801, 0x1820, 0xf038, 0xa2fe, 0x3c20, 0x2801, 0xe41e, 0x13f8,
+ 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa202, 0x3c94, 0x2820,
+ 0xe41e, 0x1444, 0xe42a, 0xe41e, 0x0db1, 0x3c66, 0xa200, 0xe41e,
+ 0x0722, 0xa201, 0x3e94, 0x2866, 0xf03a, 0xa202, 0xe42e, 0xa2fe,
+ 0x3c20, 0xa200, 0xe42e, 0x2863, 0xa102, 0xf06a, 0x2092, 0x4c93,
+ 0xe41e, 0x149e, 0xe470, 0x2080, 0x4c81, 0xe41e, 0x14ad, 0xe470,
+ 0x3c02, 0xe41e, 0x1474, 0xa200, 0x3c03, 0xe161, 0x05e0, 0x2901,
+ 0xa203, 0x3f11, 0xf10a, 0x28a7, 0x1901, 0xf0d0, 0x28a7, 0xe002,
+ 0x0200, 0xf092, 0x8111, 0x2111, 0x4d11, 0x3404, 0x3c05, 0xa202,
+ 0x3c03, 0xf08e, 0x2090, 0x4c91, 0x3404, 0x3c05, 0x8111, 0x3511,
+ 0x3d11, 0xe41e, 0x1491, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000,
+ 0x28a7, 0xa00e, 0xaf06, 0xae02, 0xce24, 0xd113, 0x0012, 0xca28,
+ 0xf7f8, 0x28a6, 0xf0a8, 0xe41e, 0x0606, 0x2004, 0x4c05, 0xe000,
+ 0x0200, 0x3404, 0x3c05, 0xf66e, 0xe161, 0x05e1, 0x28a7, 0x3d01,
+ 0x2a03, 0xf089, 0xa00e, 0xaf06, 0xae06, 0x0090, 0x0c91, 0x3490,
+ 0x3c91, 0xe41e, 0x1472, 0xe42e, 0x3c02, 0xe41e, 0x1474, 0xe161,
+ 0x05e0, 0x2911, 0xe42a, 0x8111, 0x2111, 0x4d11, 0x3404, 0x3c05,
+ 0x2894, 0xa102, 0xf0ba, 0xe41e, 0x1491, 0xe41e, 0x149e, 0xa204,
+ 0xe41e, 0x0722, 0xe004, 0x0090, 0xf0ae, 0xe41e, 0x1491, 0xe41e,
+ 0x14ad, 0xa202, 0xe41e, 0x0722, 0xe004, 0x0080, 0xcc66, 0xcc6a,
+ 0xcc6e, 0xa01e, 0xcc6c, 0xa200, 0xcc60, 0xcc68, 0xcc70, 0xe128,
+ 0xa202, 0xe42e, 0xa204, 0xf02e, 0xa206, 0x3c0a, 0xe41e, 0x1484,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05e0, 0xd112, 0x0004, 0x880a,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0041, 0x22f0, 0x4ef1,
+ 0xe042, 0xe005, 0x02a2, 0xae11, 0xe042, 0x2a02, 0xae07, 0xe042,
+ 0xe42e, 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02af,
+ 0xae11, 0xe042, 0x2204, 0x4e05, 0xe042, 0xe42e, 0xca29, 0xf7f9,
+ 0xce20, 0xa080, 0x3492, 0x3c93, 0xd111, 0x0090, 0xd112, 0x0010,
+ 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xca29, 0xf7f9, 0xce20,
+ 0xa080, 0x3480, 0x3c81, 0xd111, 0x0080, 0xd112, 0x0010, 0xd113,
+ 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xe41e, 0x14ce, 0x2816, 0xe42a,
+ 0xa102, 0x3c00, 0x28a3, 0xe01a, 0x4417, 0xe418, 0x1627, 0xe41e,
+ 0x163a, 0xe41e, 0x1672, 0xe41e, 0x16a5, 0xe42e, 0x285e, 0xe42a,
+ 0x2a16, 0xae05, 0xe001, 0x0100, 0xe093, 0xa200, 0x3d11, 0xa2fc,
+ 0x3d11, 0xa206, 0x3d11, 0x285f, 0x3d11, 0x2a16, 0xae03, 0xe001,
+ 0x0140, 0xe09b, 0x2a16, 0xae05, 0xe001, 0x0160, 0xe09d, 0x2a16,
+ 0xe001, 0x01a0, 0xe09f, 0x20c7, 0x4cc8, 0x3515, 0x3d15, 0x3516,
+ 0x3d16, 0x3516, 0x3d16, 0xa200, 0x3d07, 0xe42e, 0xc418, 0xe161,
+ 0x0102, 0xa201, 0x2816, 0xe426, 0xa102, 0xcc44, 0xe184, 0x1506,
+ 0x2911, 0xf05a, 0x2909, 0xe41e, 0x186b, 0x3f11, 0x8131, 0xe42e,
+ 0x28d3, 0xf11a, 0x20c9, 0x4cca, 0x10c7, 0x1cc8, 0x34c9, 0x3cca,
+ 0x20cb, 0x4ccc, 0x10c7, 0x1cc8, 0x34cb, 0x3ccc, 0xa200, 0x34c7,
+ 0x3cc8, 0x3c37, 0x2c31, 0x2aa5, 0x4ed3, 0xb612, 0x3cd5, 0x2816,
+ 0xe42a, 0xa102, 0x3c00, 0x2831, 0x3c01, 0x2834, 0xe016, 0x44d2,
+ 0xe418, 0x15bd, 0x28d2, 0xe41a, 0x15eb, 0x2834, 0xe408, 0x1581,
+ 0xe41e, 0x1541, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0101, 0xe09e,
+ 0x2907, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0103, 0xe09e, 0x2907,
+ 0xe42e, 0xc420, 0xe161, 0x0102, 0x8800, 0x0022, 0xe184, 0x154a,
+ 0x2901, 0xf03a, 0x8131, 0xe42e, 0xe082, 0xe002, 0x0102, 0xaf04,
+ 0x3c0a, 0x283b, 0x3d09, 0x28d1, 0x3d09, 0x28d0, 0x3d31, 0x8109,
+ 0x28c1, 0x3d11, 0xe082, 0xe000, 0x005c, 0xe094, 0xe002, 0x0160,
+ 0xaf02, 0xe000, 0x0140, 0xe092, 0x20c7, 0x4cc8, 0x3511, 0x3d11,
+ 0x2a3b, 0xa105, 0x2112, 0x4d0a, 0xf03b, 0x20c9, 0x4cca, 0x3512,
+ 0x3d12, 0x2112, 0x4d0a, 0xf035, 0x20cb, 0x4ccc, 0x3512, 0x3d12,
+ 0x280a, 0xe000, 0x01a0, 0xe092, 0xa206, 0x183b, 0xe01a, 0x3d01,
+ 0xe42e, 0xe161, 0x0100, 0x8800, 0x0022, 0xe184, 0x158e, 0x2d11,
+ 0x2b11, 0x1cd0, 0x1ad1, 0xf028, 0xf04b, 0x8111, 0x8111, 0xe42e,
+ 0xa206, 0x3d01, 0xe082, 0xe000, 0x005e, 0xe094, 0xe002, 0x0160,
+ 0xaf02, 0xe000, 0x0140, 0xe092, 0xe002, 0x0140, 0xaf02, 0x3c0a,
+ 0x20c7, 0x4cc8, 0x2311, 0x4f09, 0xe066, 0x3511, 0x3d11, 0xf41e,
+ 0xc420, 0xe161, 0x0102, 0x8800, 0x0022, 0xe184, 0x15b1, 0x2901,
+ 0xf03a, 0x8131, 0xe42e, 0xa206, 0x3d09, 0xa202, 0x3d09, 0x2801,
+ 0x3d31, 0x8109, 0xa2fe, 0x3d11, 0xe42e, 0xa200, 0xc420, 0xe161,
+ 0x0102, 0x8800, 0x0022, 0xe184, 0x15c7, 0x2b31, 0xe01b, 0xe042,
+ 0x1816, 0xe424, 0xa203, 0xae21, 0xe161, 0x0102, 0x8800, 0x0022,
+ 0xe184, 0x15e4, 0x2909, 0xf10a, 0x2909, 0xf0d6, 0x2901, 0x1c01,
+ 0xf026, 0x1c12, 0x0c01, 0xe046, 0xf062, 0xe042, 0xe049, 0xe082,
+ 0xa004, 0xe094, 0x8111, 0x8111, 0x8131, 0xa200, 0x3d12, 0x2912,
+ 0xe412, 0x186b, 0xe42e, 0xe161, 0x0100, 0xe162, 0x01f0, 0x8800,
+ 0x0022, 0xe184, 0x1625, 0x2832, 0xf098, 0x2912, 0x3c02, 0x2912,
+ 0x3c03, 0xe01a, 0xb670, 0x3c04, 0xf15e, 0x2912, 0xaf02, 0x3c02,
+ 0x2912, 0x3c03, 0xe01a, 0x3c04, 0x8112, 0x290a, 0xe01a, 0xae02,
+ 0x4c04, 0x3c04, 0xa802, 0xf068, 0x2912, 0xaf02, 0x3c02, 0x290a,
+ 0x3c03, 0x2804, 0x8112, 0x8112, 0xf08a, 0x2802, 0x3d11, 0x2803,
+ 0x3d11, 0x2804, 0x3d11, 0xf0ae, 0x8111, 0x8111, 0x2901, 0xa201,
+ 0x3f11, 0xf04a, 0x2901, 0xe412, 0x186b, 0x8111, 0xe42e, 0x28a5,
+ 0xe428, 0x2834, 0xe428, 0x2cd5, 0x3c01, 0x2801, 0xa002, 0xc70f,
+ 0x7c12, 0xaf20, 0x3c01, 0x1c31, 0xe42a, 0xe41e, 0x15bd, 0xe41e,
+ 0x15a8, 0xf74e, 0xe161, 0x0100, 0xe162, 0x01f0, 0x8800, 0x0022,
+ 0x285e, 0xf03a, 0x8816, 0x0022, 0xe184, 0x1666, 0x2832, 0xf0c8,
+ 0x2911, 0x3d12, 0x2911, 0x2b11, 0xa807, 0xb616, 0x3d12, 0xa200,
+ 0x3d12, 0x3d12, 0xf14e, 0x2911, 0xae02, 0xa002, 0x1833, 0x3d12,
+ 0x2911, 0x2b09, 0xa803, 0xb616, 0x3d0a, 0x2912, 0x8112, 0xaa02,
+ 0x3d12, 0x2911, 0x2b11, 0xa805, 0xb616, 0x3d12, 0x8111, 0xe161,
+ 0x0230, 0xe162, 0x01f0, 0xd022, 0x003f, 0xe184, 0x1670, 0x2912,
+ 0x3d11, 0xe42e, 0x2832, 0xf148, 0xe41e, 0x1703, 0x2808, 0xe000,
+ 0x0270, 0xe096, 0xe41e, 0x1744, 0x2808, 0x0809, 0x3cc0, 0xe000,
+ 0x0270, 0xe096, 0xe41e, 0x1803, 0x08c0, 0x3cc0, 0xe42e, 0xe41e,
+ 0x1703, 0xe163, 0x0270, 0x2808, 0xe41e, 0x180b, 0x3c08, 0xe000,
+ 0x0270, 0xe096, 0xe41e, 0x1744, 0x2808, 0xe000, 0x0270, 0xe096,
+ 0x2809, 0xe41e, 0x180b, 0x0808, 0x3cc0, 0xe000, 0x0270, 0xe096,
+ 0xe41e, 0x1803, 0x08c0, 0x3cc0, 0xe42e, 0x2832, 0xf238, 0xe41e,
+ 0x177e, 0x2808, 0xe000, 0x0290, 0xe096, 0xe41e, 0x1744, 0x2808,
+ 0xe000, 0x02b0, 0xe096, 0xe41e, 0x1744, 0x2808, 0x0809, 0x3cc0,
+ 0xe41e, 0x184e, 0x28c0, 0xe000, 0x0290, 0xe096, 0xe41e, 0x1803,
+ 0x28c0, 0xe000, 0x02b0, 0xe096, 0xe41e, 0x1803, 0x08c0, 0x3cc0,
+ 0xe42e, 0xe41e, 0x177e, 0xe163, 0x0290, 0x2808, 0xe41e, 0x180b,
+ 0xe163, 0x02b0, 0x2808, 0xe41e, 0x180b, 0x3c08, 0x2808, 0xe000,
+ 0x0290, 0xe096, 0xe41e, 0x1744, 0x2808, 0xe000, 0x0290, 0xe096,
+ 0x2809, 0xe41e, 0x180b, 0x2808, 0xe000, 0x02b0, 0xe096, 0xe41e,
+ 0x1744, 0x2808, 0xe000, 0x02b0, 0xe096, 0x2809, 0xe41e, 0x180b,
+ 0x0808, 0x3cc0, 0xe41e, 0x184e, 0x28c0, 0xe000, 0x0290, 0xe096,
+ 0xe41e, 0x1803, 0x28c0, 0xe000, 0x02b0, 0xe096, 0xe41e, 0x1803,
+ 0x08c0, 0x3cc0, 0xe42e, 0xe161, 0x05e0, 0xa200, 0xc70f, 0x3d11,
+ 0x2832, 0xb674, 0x3c05, 0xa200, 0x3c08, 0xc420, 0xe163, 0x0270,
+ 0xa2fe, 0x3c06, 0xa203, 0xae21, 0xe013, 0xe161, 0x0102, 0xe162,
+ 0x05e0, 0x8800, 0x0022, 0xe184, 0x1733, 0x2912, 0xf158, 0x2909,
+ 0x1805, 0xf114, 0x2909, 0xf0e6, 0x2901, 0x1c31, 0xf026, 0x1c12,
+ 0x0c31, 0xe046, 0xf076, 0xe042, 0xe049, 0xe084, 0xe002, 0x05e1,
+ 0x3c06, 0x8111, 0x8111, 0x8131, 0x2806, 0xe424, 0xe000, 0x05e0,
+ 0xe094, 0xa202, 0x3d02, 0x2806, 0xae02, 0x3d13, 0x2808, 0xa002,
+ 0x3c08, 0x1816, 0xf4e8, 0xe42e, 0xe161, 0x05e0, 0xa200, 0xc70f,
+ 0x3d11, 0x2832, 0xb674, 0x3c05, 0xa200, 0x3c09, 0xc420, 0xa2fe,
+ 0x3c07, 0xa221, 0xe161, 0x0102, 0xe162, 0x05e0, 0x8800, 0x0022,
+ 0xe184, 0x176d, 0x2912, 0xf128, 0x2909, 0x1805, 0xf0e4, 0x2909,
+ 0xa002, 0xf0a8, 0x2901, 0xe046, 0xf072, 0xe042, 0xe049, 0xe084,
+ 0xe002, 0x05e1, 0x3c07, 0x8111, 0x8111, 0x8131, 0x2807, 0xe424,
+ 0xe000, 0x05e0, 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02, 0x3d13,
+ 0x2809, 0xa002, 0x3c09, 0x1816, 0xf538, 0xe42e, 0xe161, 0x05e0,
+ 0xa200, 0xc70f, 0x3d11, 0x2832, 0xb674, 0x3c05, 0xa200, 0x3c0a,
+ 0xc420, 0xe163, 0x0290, 0xe164, 0x02b0, 0xa2fe, 0x3c06, 0x3c07,
+ 0xe161, 0x0102, 0xe162, 0x05e0, 0xe165, 0x0140, 0x8800, 0x0022,
+ 0xe184, 0x17c9, 0x2912, 0xf2c8, 0x2909, 0x1805, 0xf284, 0x2909,
+ 0xf256, 0x2115, 0x4d0d, 0x10c7, 0x1cc8, 0xf110, 0x2806, 0xf064,
+ 0x2115, 0x4d0d, 0x100c, 0x1c0d, 0xf196, 0x2115, 0x4d0d, 0x340c,
+ 0x3c0d, 0xe084, 0xe002, 0x05e1, 0x3c06, 0xf10e, 0x2807, 0xf064,
+ 0x2115, 0x4d0d, 0x100e, 0x1c0f, 0xf092, 0x2115, 0x4d0d, 0x340e,
+ 0x3c0f, 0xe084, 0xe002, 0x05e1, 0x3c07, 0x8111, 0x8111, 0x8131,
+ 0x8115, 0x8115, 0x2806, 0xf094, 0xe000, 0x05e0, 0xe094, 0xa202,
+ 0x3d02, 0x2806, 0xae02, 0x3d13, 0x2807, 0xf094, 0xe000, 0x05e0,
+ 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02, 0x3d14, 0x280a, 0xa002,
+ 0x3c0a, 0x1816, 0xe408, 0x178d, 0xe086, 0xe002, 0x0290, 0x3c0c,
+ 0xe088, 0xe002, 0x02b0, 0x3c0d, 0xf09a, 0xa102, 0xcc44, 0xe164,
+ 0x02b0, 0xe184, 0x17f4, 0x2914, 0x3d13, 0x280c, 0xf09a, 0xa102,
+ 0xcc44, 0xe163, 0x0290, 0xe184, 0x17fe, 0x2913, 0x3d14, 0x280c,
+ 0x080d, 0x3c08, 0xe42e, 0x285e, 0xe42a, 0x2816, 0xae02, 0x0833,
+ 0x3d03, 0xa202, 0xe42e, 0xe42a, 0xa102, 0x3c0c, 0xe086, 0xe098,
+ 0xe161, 0x05e0, 0x880c, 0x0022, 0xe184, 0x1826, 0x2903, 0xae02,
+ 0xe000, 0x0102, 0xe094, 0x2902, 0xa802, 0xf03a, 0x2903, 0x3d11,
+ 0x2902, 0xa804, 0xf04a, 0x2903, 0xa002, 0x3d11, 0x8113, 0xe082,
+ 0xe002, 0x05e0, 0xe42a, 0xa102, 0x3c0c, 0x3c0d, 0x2833, 0x3c0e,
+ 0xe161, 0x05e0, 0x880c, 0x0022, 0xe184, 0x183b, 0x2901, 0xf044,
+ 0xa802, 0x180e, 0xf06a, 0x8111, 0x280e, 0xe016, 0x3c0e, 0xf71e,
+ 0x2901, 0x3d14, 0xa2fe, 0x3d01, 0x280e, 0xe016, 0x3c0e, 0x280d,
+ 0xa102, 0x3c0d, 0xf662, 0x280c, 0xa002, 0xe42e, 0x28c0, 0xa102,
+ 0xe426, 0xcc44, 0xe163, 0x0290, 0xe164, 0x02b0, 0xe184, 0x185b,
+ 0x2913, 0x1914, 0xe428, 0xe190, 0xe163, 0x0291, 0xe164, 0x02b0,
+ 0x290b, 0x3d14, 0x2903, 0x3d14, 0xe42e, 0xe161, 0x0518, 0xa200,
+ 0xc71f, 0x3d11, 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907, 0xa80c,
+ 0x3d07, 0xe42e, 0xe008, 0x7fff, 0xe000, 0x0518, 0xe09e, 0x2907,
+ 0xa80a, 0x3d07, 0xe42e, 0x3cd6, 0xe000, 0x0518, 0xe09e, 0x2907,
+ 0xa806, 0x3d07, 0x28d6, 0xa002, 0x3cd6, 0x18d4, 0xe428, 0xa200,
+ 0x3cd6, 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907, 0xe056, 0x3d07,
+ 0xe42e, 0xe161, 0x0518, 0x28d4, 0xa102, 0xcc44, 0xa200, 0xe184,
+ 0x189c, 0x2b11, 0xa807, 0xe01b, 0xe042, 0x18df, 0xa102, 0xe01a,
+ 0xe42e, 0xe161, 0x0518, 0x28d4, 0xa102, 0xe049, 0xcc44, 0xe184,
+ 0x18aa, 0x2911, 0xb5f1, 0xa202, 0xb60e, 0xe42e, 0x28d6, 0x3c00,
+ 0x2800, 0xe000, 0x0518, 0xe092, 0x2901, 0xf12a, 0x2800, 0xa002,
+ 0x3c00, 0x18d4, 0xf038, 0xa200, 0x3c00, 0x2800, 0x18d6, 0xf718,
+ 0xa200, 0x3cd6, 0xa2fe, 0x3cc1, 0xe0c2, 0x0077, 0xe42e, 0x2a60,
+ 0xae03, 0xe0c0, 0x006d, 0xe056, 0xe0c2, 0x006d, 0xa20e, 0x3d01,
+ 0x2800, 0x3cc1, 0xe0c2, 0x0077, 0xe42e, 0xe0c0, 0x0060, 0xe049,
+ 0xa861, 0xe42b, 0xe0c1, 0x0044, 0xae1b, 0xe0c3, 0x0102, 0x28ad,
+ 0xa8fe, 0x1851, 0xf092, 0xe41e, 0x18f7, 0xe41e, 0x190e, 0x28ad,
+ 0xa8fe, 0x1851, 0xf798, 0xa204, 0xae1c, 0xe0c2, 0x014d, 0xa202,
+ 0xe0c2, 0x014a, 0xe190, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0xa205,
+ 0x28ad, 0xb615, 0xa903, 0x3e0d, 0x2848, 0xe000, 0x06e0, 0xe092,
+ 0x2901, 0xae04, 0x4c0d, 0xae1c, 0x4cad, 0xe0c2, 0x014d, 0xa202,
+ 0xe0c2, 0x014a, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0x28ad, 0xe000,
+ 0x0080, 0x3cad, 0xaf0e, 0x1850, 0xe428, 0x28ad, 0xa8fe, 0xa002,
+ 0x3cad, 0xe42e, 0xe41e, 0x19eb, 0xe41e, 0x1a89, 0xe41e, 0x199a,
+ 0xe41e, 0x1c78, 0x285c, 0x4ca3, 0xe01a, 0x3c5c, 0xa200, 0x3c52,
+ 0x3c4a, 0xa202, 0x3c88, 0xe41e, 0x1b79, 0x2852, 0xf048, 0xcba2,
+ 0xe40a, 0x1995, 0x183c, 0xe402, 0x1995, 0xe41e, 0x05bb, 0x28a4,
+ 0xf7da, 0xa102, 0xf17a, 0xa108, 0xf794, 0xf14a, 0xa10a, 0xe40a,
+ 0x1995, 0xa102, 0xe40a, 0x1995, 0xa102, 0xf38a, 0xa104, 0xf6ea,
+ 0xa102, 0xa10a, 0xe40a, 0x1951, 0xa002, 0xf682, 0xf3be, 0x283c,
+ 0x3c4a, 0x28a3, 0xe01a, 0x2a84, 0xe01b, 0xe05a, 0xf338, 0x28a5,
+ 0x1885, 0xf308, 0xe41e, 0x064f, 0xe41e, 0x1b0e, 0xf57a, 0x2888,
+ 0xf06a, 0x283c, 0x3c0d, 0xe41e, 0x1bb1, 0xf24e, 0xe41e, 0x0670,
+ 0x28a3, 0x3c84, 0x28a5, 0x3c85, 0xe41e, 0x092f, 0xf47a, 0xa201,
+ 0x3e88, 0x284a, 0x3c0d, 0x1852, 0xf414, 0xe410, 0x1bb1, 0x284a,
+ 0x183c, 0xe402, 0x1995, 0xe40e, 0x192b, 0xba0e, 0xe002, 0x00ff,
+ 0xf058, 0xba4e, 0xe41e, 0x0623, 0xf798, 0xe41e, 0x089c, 0xe40e,
+ 0x1935, 0x2852, 0x183c, 0xe402, 0x1991, 0x283c, 0x3c0d, 0xe41e,
+ 0x1bb1, 0x2884, 0x3ca3, 0x2885, 0x3ca5, 0xe41e, 0x1d93, 0xcbcc,
+ 0xf7f8, 0xe42e, 0x281f, 0xae02, 0x4c2e, 0xae0a, 0x2a2d, 0xa83f,
+ 0xe056, 0xae0a, 0x2a29, 0xa83f, 0xe056, 0xae02, 0x4c1a, 0xae02,
+ 0x4c21, 0xae02, 0x4c3a, 0xcf80, 0x28a3, 0xe01a, 0xae02, 0x4c18,
+ 0xae02, 0x4c1a, 0xae02, 0x4c3a, 0xcfc2, 0x2850, 0xa102, 0xae02,
+ 0x4c2b, 0xae02, 0x4c32, 0xae02, 0x4c33, 0xae02, 0x4c3a, 0xcf00,
+ 0xd1d3, 0x000b, 0xd185, 0x0001, 0x20c3, 0x4cc4, 0xcfc6, 0xd1e5,
+ 0x0001, 0xc420, 0xe161, 0x0101, 0xa200, 0xd022, 0x000f, 0xe184,
+ 0x19d3, 0x2b31, 0xae02, 0xb42a, 0xcfe8, 0x20c7, 0x4cc8, 0xcfea,
+ 0x20c9, 0x4cca, 0xcfec, 0x20cb, 0x4ccc, 0xcfee, 0xe004, 0x0060,
+ 0xce30, 0xe161, 0x0160, 0xd022, 0x001f, 0xe184, 0x19e9, 0x2111,
+ 0x4d11, 0xce32, 0xe42e, 0xa200, 0xe161, 0x00b6, 0xc707, 0x3d11,
+ 0x28b0, 0x4cb1, 0xf028, 0xe42e, 0xe161, 0x00b6, 0xa20e, 0x3c00,
+ 0x28b0, 0xf39a, 0x28b2, 0x5c00, 0xa802, 0xf108, 0x2a00, 0xa10f,
+ 0xf049, 0xa202, 0x3d11, 0xf17e, 0x2a00, 0xa109, 0xf049, 0xa204,
+ 0x3d11, 0xf11e, 0xa20a, 0x3d11, 0xf0ee, 0x28b4, 0x5c00, 0xa802,
+ 0xf08a, 0x2800, 0xa10a, 0xa205, 0xf024, 0xa203, 0x3f11, 0xf03e,
+ 0xa206, 0x3d11, 0x2800, 0xa102, 0x3c00, 0xa102, 0xf5c8, 0x28b2,
+ 0xe00c, 0x00ff, 0x2ab4, 0xe056, 0x5c00, 0xa802, 0xf06a, 0xa203,
+ 0x2800, 0xb655, 0x3f11, 0xf03e, 0xa206, 0x3d11, 0x2800, 0xa102,
+ 0x3c00, 0xf6ea, 0xe161, 0x00b6, 0xa20e, 0x3c00, 0x28b1, 0xe42a,
+ 0x28b3, 0x5c00, 0xa802, 0xf188, 0x2800, 0xa10e, 0xf088, 0x2ab0,
+ 0xf03b, 0x8111, 0xf1e9, 0xa202, 0x3d11, 0xf1be, 0x2a00, 0xa109,
+ 0xf089, 0x2ab0, 0xf03b, 0x8111, 0xf149, 0xa204, 0x3d11, 0xf11e,
+ 0xa20a, 0x3d11, 0xf0ee, 0x28b5, 0x5c00, 0xa802, 0xf08a, 0x2800,
+ 0xa10a, 0xa205, 0xf024, 0xa203, 0x3f11, 0xf03e, 0xa208, 0x3d11,
+ 0x2800, 0xa102, 0x3c00, 0xa102, 0xf548, 0x28b3, 0x5c00, 0x4cb0,
+ 0xa802, 0xf068, 0xa203, 0x2800, 0xb655, 0x3f11, 0xf16e, 0x28b5,
+ 0xe00c, 0x00ff, 0x2ab3, 0xe052, 0x5c00, 0xa802, 0xf0c8, 0x28b3,
+ 0x5c00, 0xa802, 0xf06a, 0xa203, 0x2800, 0xb655, 0x3f11, 0xf05e,
+ 0x8111, 0xf03e, 0xa208, 0x3d11, 0x2800, 0xa102, 0x3c00, 0xf5ea,
+ 0xe42e, 0xa202, 0xe0c2, 0x013c, 0xa200, 0x3c00, 0x3c01, 0xe161,
+ 0x00b6, 0xe162, 0x04c8, 0x2911, 0xa104, 0xf066, 0xa106, 0xe40a,
+ 0x1ad8, 0xa004, 0xf112, 0xa004, 0xae06, 0x3c04, 0x2800, 0xa10c,
+ 0xf064, 0x2804, 0xae04, 0xe000, 0x0018, 0x3c04, 0xe004, 0x0450,
+ 0x0804, 0x3c04, 0xf2ee, 0xa201, 0x3e02, 0xa211, 0x3e03, 0xf04a,
+ 0xe005, 0x00e0, 0x3e02, 0x2800, 0x2a00, 0xae09, 0xa10c, 0xf05a,
+ 0xa102, 0xf058, 0xe005, 0x00a0, 0xa240, 0x3c03, 0x0a02, 0x3e02,
+ 0xe0c0, 0x0041, 0x22f0, 0x4ef1, 0xe042, 0xe005, 0x02ac, 0xae11,
+ 0xe042, 0x0802, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x05e0, 0x2803,
+ 0xce24, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe004, 0x05e0, 0x3c04,
+ 0x2800, 0xa10c, 0xa20f, 0xf024, 0xa23f, 0xcc45, 0x2804, 0xe096,
+ 0xe184, 0x1af2, 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b03, 0xaf11,
+ 0xe0c3, 0x013f, 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b13, 0xe009,
+ 0x00ff, 0xe0c3, 0x013f, 0xe162, 0x04c8, 0x2a01, 0xe001, 0x0010,
+ 0x3e01, 0x2800, 0xa002, 0x3c00, 0xa10c, 0xe404, 0x1a93, 0xe162,
+ 0x04d8, 0xe40a, 0x1a93, 0xe001, 0x0030, 0x3e01, 0xa104, 0xe408,
+ 0x1a93, 0xe16a, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa200, 0x3c88,
+ 0xe41e, 0x0853, 0xe40d, 0x1b75, 0x2a3a, 0xe419, 0x0b09, 0x183c,
+ 0xe402, 0x1b75, 0xbc12, 0xe40d, 0x1b75, 0xa10a, 0xb4a8, 0xa104,
+ 0xe400, 0x1b75, 0xbdfe, 0xe40d, 0x1b75, 0x1820, 0xf03a, 0xa202,
+ 0x3c88, 0x7411, 0x1831, 0xf03a, 0xa202, 0x3c88, 0x2818, 0xf0d8,
+ 0xba40, 0x1832, 0xf03a, 0xa202, 0x3c88, 0x2832, 0xf06a, 0xba40,
+ 0x1833, 0xf03a, 0xa202, 0x3c88, 0x28a5, 0xf09a, 0xe41e, 0x0853,
+ 0xe40d, 0x1b75, 0x1c3d, 0xf03a, 0xa202, 0x3c88, 0x2813, 0xa102,
+ 0xf034, 0xf14a, 0xf29e, 0x7414, 0x1ce3, 0xf03a, 0xa202, 0x3c88,
+ 0x2832, 0xe016, 0x4422, 0xf20a, 0xe41e, 0x086d, 0xf1fd, 0x10e4,
+ 0x1ce5, 0xf03a, 0xa202, 0x3c88, 0xf17e, 0x2815, 0xf158, 0xe41e,
+ 0x086d, 0xf14d, 0x10e3, 0x1ce4, 0xf03a, 0xa202, 0x3c88, 0x2832,
+ 0xe016, 0x4422, 0xf09a, 0xe41e, 0x086d, 0xf08d, 0x10e5, 0x1ce6,
+ 0xf03a, 0xa202, 0x3c88, 0xa202, 0xe42e, 0xe16a, 0xa200, 0x3c86,
+ 0xe42e, 0xa200, 0x3ca2, 0x28a6, 0xf098, 0xa202, 0x3ca0, 0x3ca2,
+ 0x3ca1, 0xd036, 0x00ff, 0xd037, 0x0080, 0xe16a, 0x284a, 0x3c52,
+ 0xe41e, 0x1bc4, 0x2821, 0xf138, 0x2852, 0x183c, 0xf0d2, 0xe41e,
+ 0x1c07, 0xf1ed, 0x283a, 0xe418, 0x1c07, 0xf1ad, 0xcb86, 0xa102,
+ 0xf740, 0xc894, 0xf728, 0xe41e, 0x089c, 0xe42e, 0xe41e, 0x1bf3,
+ 0x2852, 0x183c, 0xf0a2, 0xe41e, 0x1c07, 0xf0ad, 0x283a, 0xe418,
+ 0x1c07, 0xf06d, 0xbb60, 0xf75a, 0xe41e, 0x089e, 0xe42e, 0xe16a,
+ 0xe42e, 0x28a5, 0xe016, 0x3c30, 0xe41e, 0x1bc4, 0x2852, 0x180d,
+ 0xf0b2, 0xe41e, 0x1c44, 0x283a, 0xe418, 0x1c44, 0x284c, 0xa002,
+ 0x083a, 0x3c4c, 0xf74e, 0xe42e, 0x2829, 0x182d, 0xe01a, 0xae04,
+ 0x4c43, 0xae0a, 0x4c44, 0xae0a, 0x4c45, 0xcf30, 0x2841, 0xae0a,
+ 0x4c40, 0xae04, 0x4c30, 0xcf82, 0xd1c3, 0x0000, 0x2842, 0xcf96,
+ 0x2841, 0xae08, 0x4c40, 0xae02, 0x4ccf, 0xae02, 0x4cce, 0xae02,
+ 0x4ccd, 0xae02, 0x4c3e, 0xae04, 0x4c30, 0xcfc4, 0x8846, 0x01fa,
+ 0x20c5, 0x4cc6, 0xcfc8, 0xd188, 0x0001, 0x2830, 0xa104, 0xe428,
+ 0xd1e5, 0x0002, 0xe42e, 0xc868, 0xa80e, 0x3c97, 0x7497, 0xe004,
+ 0x01fe, 0xcc86, 0xba50, 0xcc88, 0x2830, 0xe01a, 0x083f, 0xae0c,
+ 0x4c42, 0xcc82, 0xd040, 0x0003, 0xc884, 0xf7f8, 0xe42e, 0x2852,
+ 0xe0c2, 0x003f, 0xd185, 0x0002, 0xd1d0, 0x003f, 0xe190, 0xe180,
+ 0x28a2, 0xe418, 0x0784, 0xe181, 0xcba0, 0xa810, 0xcba3, 0xf239,
+ 0xf7c8, 0xe41e, 0x1d41, 0xcbe0, 0xf7f8, 0x2856, 0xe41a, 0x1d6a,
+ 0xcba0, 0xcba3, 0xf189, 0xf7d8, 0xd186, 0x0001, 0xd185, 0x0004,
+ 0xe41e, 0x1d81, 0xe41e, 0x190e, 0xcb06, 0x3c52, 0xcb8a, 0xaf04,
+ 0x4421, 0xe42a, 0xe004, 0x01fe, 0xcc86, 0xba50, 0xcc88, 0xd040,
+ 0x0001, 0xe42e, 0xd1d0, 0x0000, 0xd1d1, 0x0000, 0xcb1c, 0xf7f8,
+ 0xcbe0, 0xf7f8, 0xe16b, 0xe42e, 0x2852, 0xe0c2, 0x003f, 0xd185,
+ 0x0002, 0xd186, 0x0000, 0xd1c2, 0x0001, 0xd1c5, 0x0000, 0xd1c4,
+ 0x0000, 0xd1d0, 0x000e, 0xcba0, 0xf7f8, 0x284b, 0xf098, 0xd1c2,
+ 0x0000, 0xd1c5, 0x0003, 0xd1c4, 0x0003, 0xd1c8, 0x0000, 0xd1d0,
+ 0x0020, 0xe41e, 0x1d41, 0xa200, 0xe0c2, 0x012a, 0xcbe0, 0xf7f8,
+ 0x2856, 0xe41a, 0x1d6a, 0xcba0, 0xf7f8, 0xd186, 0x0001, 0xd185,
+ 0x0004, 0xe41e, 0x1d81, 0xe41e, 0x190e, 0xcb06, 0x3c52, 0xe42e,
+ 0xa200, 0xe0c2, 0x0100, 0xe0c2, 0x013d, 0xcc8e, 0xe004, 0x00ce,
+ 0xe0c2, 0x017c, 0xa218, 0xe0c2, 0x017d, 0xe0c0, 0x0050, 0x3008,
+ 0xaf02, 0x3009, 0xaf02, 0x300a, 0xaf02, 0x300b, 0xaf0a, 0x300c,
+ 0xaf02, 0x300d, 0xaf02, 0x300e, 0xaf02, 0x300f, 0xaf06, 0xa802,
+ 0xe005, 0x0ba6, 0xe09f, 0x3d17, 0x280c, 0x4408, 0x3c08, 0x280d,
+ 0x4409, 0x3c09, 0x280e, 0x440a, 0x3c0a, 0x280f, 0x440b, 0x3c0b,
+ 0xa200, 0xe0c2, 0x0168, 0x2a08, 0xf02b, 0xa904, 0x2a09, 0xf02b,
+ 0xa912, 0x2a0a, 0xf02b, 0xa940, 0x2a0b, 0xf02b, 0xa980, 0xe005,
+ 0x0ba6, 0xe09f, 0x2b17, 0xae05, 0xe056, 0xe0c2, 0x0169, 0xe0c1,
+ 0x0041, 0xe004, 0x0010, 0xae10, 0xe042, 0x2a0c, 0xf06b, 0xe004,
+ 0x05d3, 0xe09e, 0x2117, 0x4d17, 0xcf0e, 0xe0c1, 0x0041, 0xe004,
+ 0x0050, 0xae10, 0xe042, 0x2a0d, 0xf06b, 0xe004, 0x05d5, 0xe09e,
+ 0x2117, 0x4d17, 0xe0c2, 0x0103, 0xa202, 0xe0c2, 0x0210, 0xe0c1,
+ 0x0041, 0xe004, 0x007c, 0xae10, 0xe042, 0x2a0e, 0xf06b, 0xe004,
+ 0x05d7, 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0211, 0xe0c1, 0x0041,
+ 0xe004, 0x00bc, 0xae10, 0xe042, 0x2a0f, 0xf06b, 0xe004, 0x05d9,
+ 0xe09e, 0x2117, 0x4d17, 0xe0c2, 0x0212, 0x2050, 0x4c51, 0xae08,
+ 0xe0c2, 0x0101, 0xe0c2, 0x0283, 0xe0c2, 0x006f, 0xe0c2, 0x004f,
+ 0x2a1f, 0x2058, 0x4c59, 0xf02b, 0xae02, 0xe0c2, 0x0078, 0x205a,
+ 0x4c5b, 0xf02b, 0xae02, 0xe0c2, 0x0079, 0x281f, 0xe016, 0xae08,
+ 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xae1a, 0x4c67, 0xe0c2, 0x0102,
+ 0x283a, 0xae02, 0x4c32, 0xae02, 0x4c33, 0xe0c2, 0x0104, 0xe0c1,
+ 0x0065, 0xaf19, 0xa803, 0xae17, 0xe056, 0xe0c2, 0x0204, 0xa200,
+ 0xe0c2, 0x0208, 0xe41e, 0x1da4, 0xe41e, 0x1dc8, 0xa202, 0xe0c2,
+ 0x0106, 0x2a3a, 0xae07, 0xe167, 0x0ba7, 0x3f17, 0xe41e, 0x1e65,
+ 0xe42e, 0xcb02, 0xaf02, 0xe0c2, 0x0113, 0xe0c2, 0x030d, 0xcb15,
+ 0xae03, 0xe056, 0xe0c2, 0x022b, 0xcb94, 0xe0c2, 0x0115, 0xe41e,
+ 0x1e40, 0xcba4, 0xe0c2, 0x012a, 0xcb8a, 0xe0c2, 0x0114, 0xa802,
+ 0x3c56, 0xe42a, 0xcb14, 0xae0a, 0xcb19, 0xe056, 0xe0c2, 0x0120,
+ 0xcb8c, 0xe0c2, 0x0121, 0xcb8e, 0xe0c2, 0x0122, 0xcb90, 0xe0c2,
+ 0x0123, 0xe42e, 0xcbd0, 0xe0c2, 0x030c, 0xcbd2, 0xe0c2, 0x0309,
+ 0xcbd8, 0xe0c2, 0x030a, 0xcbda, 0xe0c2, 0x030b, 0x2846, 0xe0c2,
+ 0x0320, 0xe42a, 0x2847, 0xe0c2, 0x0321, 0xcbf6, 0xe0c2, 0x0322,
+ 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0x28af,
+ 0xaf08, 0x4cae, 0xe42a, 0x28ad, 0xa8fe, 0x1851, 0xe422, 0xa202,
+ 0xe0c2, 0x014a, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xf09a, 0x283c, 0x1852, 0xf068, 0xcba2, 0xf048,
+ 0xe0c0, 0x0281, 0xf7ea, 0xe42e, 0xa202, 0xe0c2, 0x0302, 0x2816,
+ 0xe42a, 0x2a5e, 0xb5f6, 0xcc44, 0xe160, 0x0004, 0xe161, 0x0103,
+ 0xe163, 0x0380, 0xe184, 0x1dc3, 0x8531, 0xc786, 0xe018, 0xb608,
+ 0xe000, 0x0620, 0xe094, 0x2112, 0x4d12, 0x9f13, 0x2112, 0x4d12,
+ 0x9f13, 0x2112, 0x4d12, 0x9f13, 0xa200, 0xe0c2, 0x0302, 0xe42e,
+ 0xa202, 0xae02, 0xa902, 0xe0c2, 0x0312, 0xa802, 0xe42a, 0xe162,
+ 0x01b0, 0x2912, 0xaf02, 0x3c0a, 0x2912, 0xaf02, 0x3c0b, 0x2830,
+ 0xa104, 0xf068, 0xe162, 0x01d0, 0x2912, 0xaf02, 0x3c0b, 0x280a,
+ 0x180b, 0xf0d8, 0xe162, 0x01b0, 0xd022, 0x001f, 0xe184, 0x1ded,
+ 0x2912, 0xaf02, 0x3c0b, 0x180a, 0xf028, 0xe190, 0x280b, 0xae08,
+ 0x4c0a, 0xe0c2, 0x0313, 0xe42e, 0xa200, 0x3caf, 0x3cae, 0x3cad,
+ 0x2848, 0xe404, 0x1e64, 0xe0c0, 0x0060, 0xe049, 0xa861, 0xe40b,
+ 0x1e64, 0xe049, 0xa83e, 0x3caf, 0xaf0b, 0x3eae, 0x2848, 0xae04,
+ 0x0848, 0x0848, 0xe000, 0x0620, 0xe09e, 0x2117, 0x4d17, 0xe0c2,
+ 0x0143, 0x2117, 0x4d17, 0xe0c2, 0x0144, 0x2117, 0x4d17, 0xe0c2,
+ 0x0145, 0xa200, 0xe0c2, 0x0140, 0xe0c2, 0x0149, 0x2867, 0xe0c2,
+ 0x0141, 0xe0c0, 0x0064, 0xe0c2, 0x014c, 0x2850, 0xa102, 0xae20,
+ 0x4c51, 0xa102, 0xe0c2, 0x0142, 0x28ae, 0xae08, 0x2aaf, 0xa81f,
+ 0xe056, 0xe0c2, 0x014e, 0xe0c0, 0x0061, 0xe0c2, 0x0146, 0xe0c0,
+ 0x0062, 0xe0c2, 0x0147, 0xe0c0, 0x0063, 0xe0c2, 0x0148, 0xe42e,
+ 0xcb94, 0xa87e, 0x22aa, 0x4eab, 0xe042, 0x34aa, 0x3cab, 0x28af,
+ 0x4cae, 0xf1ba, 0x28ad, 0xa8fe, 0x1851, 0xf172, 0xa203, 0x28ad,
+ 0xb615, 0x3e0d, 0xa203, 0x3e0e, 0x2848, 0xe000, 0x06e0, 0xe092,
+ 0x2901, 0xae02, 0x4c0d, 0xae02, 0x4c0e, 0xae1c, 0x4cad, 0xe0c1,
+ 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xe42e, 0xe0c0, 0x0065, 0xaf18,
+ 0xa802, 0xe40a, 0x1ee7, 0xae0a, 0xe0c1, 0x0060, 0xaf0d, 0xa80f,
+ 0xe056, 0xe0c1, 0x0044, 0xa811, 0xe056, 0xae0c, 0xe0c1, 0x0044,
+ 0xa80f, 0xe056, 0xe167, 0x0ba7, 0x2f17, 0xe056, 0xe0c2, 0x0282,
+ 0xe0c0, 0x006e, 0xe0c2, 0x0284, 0xaf20, 0xe0c1, 0x0282, 0xa809,
+ 0xf04b, 0xe049, 0xae1f, 0xf06e, 0xe049, 0xa011, 0xaf09, 0xae07,
+ 0xae21, 0xe056, 0xe0c2, 0x028c, 0xe167, 0x0ba8, 0x2d17, 0x4917,
+ 0xe0c2, 0x0285, 0xe167, 0x0baa, 0x2d17, 0x4917, 0xe0c2, 0x0286,
+ 0xe41e, 0x1ee8, 0xe0c0, 0x004a, 0xe0c2, 0x0289, 0xe0c0, 0x004b,
+ 0xe0c2, 0x028a, 0xe0c0, 0x0055, 0xe0c2, 0x028b, 0xe0c1, 0x0041,
+ 0xe004, 0x0100, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba0, 0x2d17, 0x4917, 0xe0c2, 0x0287, 0xe0c1, 0x0041,
+ 0xe004, 0x0118, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba2, 0x2d17, 0x4917, 0xe0c2, 0x0288, 0xe0c1, 0x0041,
+ 0xe004, 0x0120, 0xae10, 0xe042, 0xe167, 0x0ba6, 0x2b17, 0xf05b,
+ 0xe167, 0x0ba4, 0x2d17, 0x4917, 0xe0c2, 0x028d, 0xe0c0, 0x0065,
+ 0xaf18, 0xa802, 0xe0c2, 0x0280, 0xa210, 0xe0c2, 0x0168, 0xe42e,
+ 0xe167, 0x0bac, 0xe165, 0x028e, 0xe166, 0x02c0, 0xd022, 0x0008,
+ 0xe184, 0x1efb, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02d2, 0xd022, 0x0008,
+ 0xe184, 0x1f07, 0x2517, 0x4d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190,
+ 0xe166, 0x02db, 0xd022, 0x0008, 0xe184, 0x1f13, 0x2517, 0x4d17,
+ 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe166, 0x02e4, 0xd022, 0x0008,
+ 0xe184, 0x1f1e, 0x2d17, 0x9f16, 0x9e85, 0xf7fb, 0xe190, 0xe42e,
+ 0x287d, 0xe016, 0x4c62, 0xe01a, 0xe428, 0x28c1, 0xf064, 0xe41e,
+ 0x1872, 0x28c1, 0xe41e, 0x187b, 0xa200, 0xe42e, 0xa202, 0x3c60,
+ 0xa204, 0xe41e, 0x0480, 0xa200, 0x3c60, 0xe42e, 0x3c05, 0x2860,
+ 0x1805, 0xe42a, 0x2805, 0xf03a, 0x2820, 0x3c61, 0xa204, 0xe41e,
+ 0x0480, 0x2805, 0x3c60, 0xe0c0, 0x0041, 0xe005, 0x0280, 0xae11,
+ 0xe042, 0xe0c1, 0x005a, 0x0a60, 0xae19, 0xe042, 0x3400, 0x3c01,
+ 0xe004, 0x0100, 0x3c02, 0xe004, 0x01b0, 0x3c04, 0xe41e, 0x1f93,
+ 0xe004, 0x00d5, 0xe41e, 0x1f90, 0xe004, 0x00d7, 0xe41e, 0x1f90,
+ 0xe004, 0x004e, 0xe41e, 0x1f90, 0xe004, 0x0035, 0x3c02, 0xe004,
+ 0x003a, 0x3c04, 0xe41e, 0x1f93, 0xe004, 0x00c1, 0xe41e, 0x1f90,
+ 0x28c1, 0x3cbf, 0xe004, 0x00be, 0xe41e, 0x1f90, 0xe004, 0x00e0,
+ 0x3c02, 0xe004, 0x00ec, 0x3c04, 0xe41e, 0x1f93, 0xa2fe, 0x3c20,
+ 0x3c10, 0x2805, 0xe428, 0x3c5e, 0x2861, 0x3c20, 0xe41e, 0x13d5,
+ 0xe42e, 0xe41e, 0x1fe4, 0xae02, 0x2600, 0x4e01, 0xe042, 0xe42e,
+ 0x3c02, 0xa002, 0x3c04, 0xca28, 0xf7f8, 0x2802, 0xa806, 0xf20a,
+ 0xd111, 0x05e0, 0x2802, 0xe41e, 0x1f89, 0xce20, 0xd112, 0x0004,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe004, 0x05e0, 0x2a02, 0xa807,
+ 0xe042, 0xe09c, 0x2802, 0xe09e, 0x2916, 0x3d17, 0xe08e, 0xa806,
+ 0xf05a, 0xe08e, 0x1804, 0xf02a, 0xf78e, 0xe08e, 0x3c02, 0x2802,
+ 0xce22, 0xe41e, 0x1f89, 0xce20, 0x2804, 0x1802, 0xe41e, 0x1fe4,
+ 0xf08a, 0xce24, 0x0802, 0x3c02, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0x2804, 0x1802, 0xf19a, 0xd111, 0x05e0, 0x2802, 0xe41e, 0x1f89,
+ 0xce20, 0xd112, 0x0004, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe166,
+ 0x05e0, 0x2802, 0xe09e, 0x2804, 0x1802, 0xa102, 0xcc44, 0xe184,
+ 0x1fe2, 0x2916, 0x3d17, 0xe42e, 0xaf04, 0xae04, 0xe42e, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x060d, 0x0d14, 0x1414, 0x1c1c, 0x1c1c, 0x2020, 0x2025, 0x252a,
+ 0x0a0e, 0x0e14, 0x1414, 0x1818, 0x1818, 0x1b1b, 0x1b1e, 0x1e22,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x060a, 0x0a0d, 0x0b0d, 0x1010, 0x1010, 0x1212, 0x1212, 0x1217,
+ 0x1717, 0x1717, 0x1719, 0x1919, 0x1919, 0x1919, 0x1b1b, 0x1b1b,
+ 0x1b1b, 0x1b1b, 0x1d1d, 0x1d1d, 0x1d1d, 0x1d1f, 0x1f1f, 0x1f1f,
+ 0x1f21, 0x2121, 0x2121, 0x2424, 0x2424, 0x2626, 0x2628, 0x282a,
+ 0x090d, 0x0d0f, 0x0d0f, 0x1111, 0x1111, 0x1313, 0x1313, 0x1315,
+ 0x1515, 0x1515, 0x1516, 0x1616, 0x1616, 0x1616, 0x1818, 0x1818,
+ 0x1818, 0x1818, 0x1919, 0x1919, 0x1919, 0x191b, 0x1b1b, 0x1b1b,
+ 0x1b1c, 0x1c1c, 0x1c1c, 0x1e1e, 0x1e1e, 0x2020, 0x2021, 0x2123,
+ 0x0000, 0x0001, 0x0004, 0x0008, 0x0005, 0x0002, 0x0003, 0x0006,
+ 0x0009, 0x000c, 0x000d, 0x000a, 0x0007, 0x000b, 0x000e, 0x000f,
+ 0x0000, 0x0001, 0x0008, 0x0010, 0x0009, 0x0002, 0x0003, 0x000a,
+ 0x0011, 0x0018, 0x0020, 0x0019, 0x0012, 0x000b, 0x0004, 0x0005,
+ 0x000c, 0x0013, 0x001a, 0x0021, 0x0028, 0x0030, 0x0029, 0x0022,
+ 0x001b, 0x0014, 0x000d, 0x0006, 0x0007, 0x000e, 0x0015, 0x001c,
+ 0x0023, 0x002a, 0x0031, 0x0038, 0x0039, 0x0032, 0x002b, 0x0024,
+ 0x001d, 0x0016, 0x000f, 0x0017, 0x001e, 0x0025, 0x002c, 0x0033,
+ 0x003a, 0x003b, 0x0034, 0x002d, 0x0026, 0x001f, 0x0027, 0x002e,
+ 0x0035, 0x003c, 0x003d, 0x0036, 0x002f, 0x0037, 0x003e, 0x003f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+};
+
+#endif //__CODA7L_FW_H__
+
diff --git a/board/rda/common/include/coda7l_regs.h b/board/rda/common/include/coda7l_regs.h
new file mode 100644
index 0000000000..4b2d1b36fa
--- /dev/null
+++ b/board/rda/common/include/coda7l_regs.h
@@ -0,0 +1,587 @@
+//--=========================================================================--
+// This file is a part of VPU Reference API project
+//-----------------------------------------------------------------------------
+//
+// This confidential and proprietary software may be used only
+// as authorized by a licensing agreement from Chips&Media Inc.
+// In the event of publication, the following notice is applicable:
+//
+// (C) COPYRIGHT 2006 - 2011 CHIPS&MEDIA INC.
+// ALL RIGHTS RESERVED
+//
+// The entire notice above must be reproduced on all authorized
+// copies.
+//
+//--=========================================================================--
+//#include "../config.h"
+
+#ifndef __CODA7L_REGS_H__
+#define __CODA7L_REGS_H__
+
+//------------------------------------------------------------------------------
+// REGISTER BASE
+//------------------------------------------------------------------------------
+#define BIT_BASE 0x0000
+#define GDMA_BASE 0x1000
+#define MBC_BASE 0x0400
+#define ME_BASE 0x0600
+#define DBK_BASE 0x0800
+#define MC_BASE 0x0C00
+#define DMAC_BASE 0x2000
+
+#define BW_BASE 0x03000000
+//------------------------------------------------------------------------------
+// HARDWARE REGISTER
+//------------------------------------------------------------------------------
+#define BIT_CODE_RUN (BIT_BASE + 0x000)
+#define BIT_CODE_DOWN (BIT_BASE + 0x004)
+#define BIT_INT_REQ (BIT_BASE + 0x008)
+#define BIT_INT_CLEAR (BIT_BASE + 0x00C)
+#define BIT_INT_STS (BIT_BASE + 0x010)
+#define BIT_CODE_RESET (BIT_BASE + 0x014)
+#define BIT_CUR_PC (BIT_BASE + 0x018)
+#define BIT_SW_RESET (BIT_BASE + 0x024)
+#define BIT_SW_RESET_STATUS (BIT_BASE + 0x034)
+
+//------------------------------------------------------------------------------
+// GLOBAL REGISTER
+//------------------------------------------------------------------------------
+#define BIT_CODE_BUF_ADDR (BIT_BASE + 0x100)
+#define BIT_WORK_BUF_ADDR (BIT_BASE + 0x104)
+#define BIT_PARA_BUF_ADDR (BIT_BASE + 0x108)
+#define BIT_BIT_STREAM_CTRL (BIT_BASE + 0x10C)
+#define BIT_FRAME_MEM_CTRL (BIT_BASE + 0x110)
+#define BIT_BIT_STREAM_PARAM (BIT_BASE + 0x114)
+
+#define BIT_RD_PTR (BIT_BASE + 0x120)
+#define BIT_WR_PTR (BIT_BASE + 0x124)
+
+
+#define BIT_AXI_SRAM_USE (BIT_BASE + 0x140)
+#define BIT_BYTE_POS_FRAME_START (BIT_BASE + 0x144)
+#define BIT_BYTE_POS_FRAME_END (BIT_BASE + 0x148)
+#define BIT_FRAME_CYCLE (BIT_BASE + 0x14C)
+
+#define BIT_FRM_DIS_FLG (BIT_BASE + 0x150)
+
+#define BIT_BUSY_FLAG (BIT_BASE + 0x160)
+#define BIT_RUN_COMMAND (BIT_BASE + 0x164)
+#define BIT_RUN_INDEX (BIT_BASE + 0x168)
+#define BIT_RUN_COD_STD (BIT_BASE + 0x16C)
+#define BIT_INT_ENABLE (BIT_BASE + 0x170)
+#define BIT_INT_REASON (BIT_BASE + 0x174)
+#define BIT_RUN_AUX_STD (BIT_BASE + 0x178)
+
+// MSG REGISTER ADDRESS changed
+#ifdef CNM_FPGA_PLATFORM
+#define BIT_MSG_0 (BIT_BASE + 0x1F4)
+#define BIT_MSG_1 (BIT_BASE + 0x1F8)
+#define BIT_MSG_2 (BIT_BASE + 0x1FC)
+#define BIT_MSG_3 (BIT_BASE + 0x1FC) // only 3 MSG registers in coda7l
+
+#define MBC_BUSY (MBC_BASE + 0x044)
+#define MC_BUSY (MC_BASE + 0x004)
+#endif
+
+
+#define CMD_SET_FRAME_AXI_SCLY_ADDR (BIT_BASE + 0x1A4)
+#define CMD_SET_FRAME_AXI_SCLC_ADDR (BIT_BASE + 0x1A8)
+#define CMD_SET_FRAME_AXI_SCL_PACKED_SYNC_ADDR (BIT_BASE + 0x1AC)
+
+//------------------------------------------------------------------------------
+// [ENC SEQ INIT] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_SEQ_BB_START (BIT_BASE + 0x180)
+#define CMD_ENC_SEQ_BB_SIZE (BIT_BASE + 0x184)
+#define CMD_ENC_SEQ_OPTION (BIT_BASE + 0x188) // HecEnable,ConstIntraQp, FMO, QPREP, AUD, SLICE, MB BIT
+#define CMD_ENC_SEQ_COD_STD (BIT_BASE + 0x18C)
+#define CMD_ENC_SEQ_SRC_SIZE (BIT_BASE + 0x190)
+#define CMD_ENC_SEQ_SRC_F_RATE (BIT_BASE + 0x194)
+#define CMD_ENC_SEQ_MP4_PARA (BIT_BASE + 0x198)
+#define CMD_ENC_SEQ_263_PARA (BIT_BASE + 0x19C)
+#define CMD_ENC_SEQ_264_PARA (BIT_BASE + 0x1A0)
+#define CMD_ENC_SEQ_SLICE_MODE (BIT_BASE + 0x1A4)
+#define CMD_ENC_SEQ_GOP_NUM (BIT_BASE + 0x1A8)
+#define CMD_ENC_SEQ_RC_PARA (BIT_BASE + 0x1AC)
+#define CMD_ENC_SEQ_RC_BUF_SIZE (BIT_BASE + 0x1B0)
+#define CMD_ENC_SEQ_INTRA_REFRESH (BIT_BASE + 0x1B4)
+#define CMD_ENC_SEARCH_BASE (BIT_BASE + 0x1B8)
+#define CMD_ENC_SEARCH_SIZE (BIT_BASE + 0x1BC)
+#define CMD_ENC_SEQ_INTRA_QP (BIT_BASE + 0x1C4)
+#define CMD_ENC_SEQ_RC_QP_MAX (BIT_BASE + 0x1C8)
+#define CMD_ENC_SEQ_RC_GAMMA (BIT_BASE + 0x1CC)
+#define CMD_ENC_SEQ_RC_INTERVAL_MODE (BIT_BASE + 0x1D0) // mbInterval[32:2], rcIntervalMode[1:0]
+#define CMD_ENC_SEQ_INTRA_WEIGHT (BIT_BASE + 0x1D4)
+#define CMD_ENC_SEQ_ME_OPTION (BIT_BASE + 0x1D8)
+#define CMD_ENC_SEQ_RC_PARA2 (BIT_BASE + 0x1DC)
+#define CMD_ENC_SEQ_QP_RANGE_SET (BIT_BASE + 0x1E0)
+#define CMD_ENC_SEQ_RC_MAX_INTRA_SIZE (BIT_BASE + 0x1F0)
+
+#define CMD_ENC_SEQ_FIRST_MBA (BIT_BASE + 0x1E4)
+#define CMD_ENC_SEQ_HEIGHT_IN_MAP_UNITS (BIT_BASE + 0x1E8)
+#define CMD_ENC_SEQ_OVERLAP_CLIP_SIZE (BIT_BASE + 0x1EC)
+
+//------------------------------------------------------------------------------
+// [ENC SEQ END] COMMAND
+//------------------------------------------------------------------------------
+#define RET_ENC_SEQ_END_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [DEC][MINI-PIPPEN] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_DEC_PIC_SCL_TGT_SIZE (BIT_BASE + 0x1B8)
+#define CMD_DEC_PIC_SCL_ADDR_Y (BIT_BASE + 0x128)
+#define CMD_DEC_PIC_SCL_ADDR_CB (BIT_BASE + 0x12C)
+#define CMD_DEC_PIC_SCL_ADDR_CR (BIT_BASE + 0x154)
+
+//------------------------------------------------------------------------------
+// [ENC PIC RUN] COMMAND
+//------------------------------------------------------------------------------
+
+#define CMD_ENC_PIC_SRC_INDEX (BIT_BASE + 0x180)
+#define CMD_ENC_PIC_SRC_STRIDE (BIT_BASE + 0x184)
+#define CMD_ENC_PIC_SRC_ADDR_Y (BIT_BASE + 0x180)
+#define CMD_ENC_PIC_SRC_ADDR_CB (BIT_BASE + 0x184)
+#define CMD_ENC_PIC_SRC_ADDR_CR (BIT_BASE + 0x188)
+#define CMD_ENC_PIC_QS (BIT_BASE + 0x18C)
+#define CMD_ENC_PIC_ROT_MODE (BIT_BASE + 0x190)
+#define CMD_ENC_PIC_OPTION (BIT_BASE + 0x194)
+#define CMD_ENC_PIC_BB_START (BIT_BASE + 0x198)
+#define CMD_ENC_PIC_BB_SIZE (BIT_BASE + 0x19C)
+#define CMD_ENC_PIC_PARA_BASE_ADDR (BIT_BASE + 0x1A0)
+#define CMD_ENC_PIC_SUB_FRAME_SYNC (BIT_BASE + 0x1A4)
+
+
+
+#define RET_ENC_PIC_FRAME_NUM (BIT_BASE + 0x1C0)
+#define RET_ENC_PIC_TYPE (BIT_BASE + 0x1C4)
+#define RET_ENC_PIC_FRAME_IDX (BIT_BASE + 0x1C8)
+#define RET_ENC_PIC_SLICE_NUM (BIT_BASE + 0x1CC)
+#define RET_ENC_PIC_FLAG (BIT_BASE + 0x1D0)
+#define RET_ENC_PIC_SUCCESS (BIT_BASE + 0x1D8)
+
+//------------------------------------------------------------------------------
+// [ENC ROI INIT] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_ROI_MODE (BIT_BASE + 0x180) // [1]: RoiType, [0]: RoiEn
+#define CMD_ENC_ROI_NUM (BIT_BASE + 0x184) // [3:0] RoiNum
+
+#define CMD_ENC_ROI_POS_0 (BIT_BASE + 0x188) // [31:24]: MbyEnd, [23:16]: MbyStart, [15:8]: MbxEnd, [7:0]: MbxStart
+#define CMD_ENC_ROI_QP_0 (BIT_BASE + 0x18C) // [05:04]: RoiQp
+#define CMD_ENC_ROI_POS_1 (BIT_BASE + 0x190)
+#define CMD_ENC_ROI_QP_1 (BIT_BASE + 0x194)
+#define CMD_ENC_ROI_POS_2 (BIT_BASE + 0x198)
+#define CMD_ENC_ROI_QP_2 (BIT_BASE + 0x19C)
+#define CMD_ENC_ROI_POS_3 (BIT_BASE + 0x1A0)
+#define CMD_ENC_ROI_QP_3 (BIT_BASE + 0x1A4)
+#define CMD_ENC_ROI_POS_4 (BIT_BASE + 0x1A8)
+#define CMD_ENC_ROI_QP_4 (BIT_BASE + 0x1AC)
+#define CMD_ENC_ROI_POS_5 (BIT_BASE + 0x1B0)
+#define CMD_ENC_ROI_QP_5 (BIT_BASE + 0x1B4)
+#define CMD_ENC_ROI_POS_6 (BIT_BASE + 0x1B8)
+#define CMD_ENC_ROI_QP_6 (BIT_BASE + 0x1BC)
+#define CMD_ENC_ROI_POS_7 (BIT_BASE + 0x1C0)
+#define CMD_ENC_ROI_QP_7 (BIT_BASE + 0x1C4)
+#define CMD_ENC_ROI_POS_8 (BIT_BASE + 0x1C8)
+#define CMD_ENC_ROI_QP_8 (BIT_BASE + 0x1CC)
+#define CMD_ENC_ROI_POS_9 (BIT_BASE + 0x1D0)
+#define CMD_ENC_ROI_QP_9 (BIT_BASE + 0x1D4)
+
+#define RET_ENC_ROI_SUCCESS (BIT_BASE + 0x1D8)
+
+
+//------------------------------------------------------------------------------
+// [ENC SET FRAME BUF] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_SET_FRAME_SUBSAMP_A (BIT_BASE + 0x188)
+#define CMD_SET_FRAME_SUBSAMP_B (BIT_BASE + 0x18C)
+
+#define CMD_SET_FRAME_DP_BUF_BASE (BIT_BASE + 0x1B0)
+#define CMD_SET_FRAME_DP_BUF_SIZE (BIT_BASE + 0x1B4)
+
+//------------------------------------------------------------------------------
+// [ENC HEADER] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_HEADER_CODE (BIT_BASE + 0x180)
+#define CMD_ENC_HEADER_BB_START (BIT_BASE + 0x184)
+#define CMD_ENC_HEADER_BB_SIZE (BIT_BASE + 0x188)
+#define CMD_ENC_HEADER_FRAME_CROP_H (BIT_BASE + 0x18C)
+#define CMD_ENC_HEADER_FRAME_CROP_V (BIT_BASE + 0x190)
+
+
+#define RET_ENC_HEADER_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [ENC_PARA_SET] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_PARA_SET_TYPE (BIT_BASE + 0x180)
+#define RET_ENC_PARA_SET_SIZE (BIT_BASE + 0x1c0)
+#define RET_ENC_PARA_SET_SUCCESS (BIT_BASE + 0x1C4)
+
+//------------------------------------------------------------------------------
+// [ENC PARA CHANGE] COMMAND :
+//------------------------------------------------------------------------------
+#define CMD_ENC_PARAM_CHANGE_ENABLE (BIT_BASE + 0x180) // FrameRateEn[3], BitRateEn[2], IntraQpEn[1], GopEn[0]
+#define CMD_ENC_PARAM_CHANGE_GOP_NUM (BIT_BASE + 0x184)
+#define CMD_ENC_PARAM_CHANGE_INTRA_QP (BIT_BASE + 0x188)
+#define CMD_ENC_PARAM_CHANGE_BITRATE (BIT_BASE + 0x18C)
+#define CMD_ENC_PARAM_CHANGE_F_RATE (BIT_BASE + 0x190)
+#define CMD_ENC_PARAM_CHANGE_INTRA_REFRESH (BIT_BASE + 0x194) // update param
+#define CMD_ENC_PARAM_CHANGE_SLICE_MODE (BIT_BASE + 0x198) // update param
+#define CMD_ENC_PARAM_CHANGE_HEC_MODE (BIT_BASE + 0x19C) // update param
+#define CMD_ENC_SEQ_PARA_CABAC_MODE (BIT_BASE + 0x1A0) // entropyCodingMode==2
+#define CMD_ENC_SEQ_PARA_PPS_ID (BIT_BASE + 0x1B4) // entropyCodingMode==2
+
+#define RET_ENC_SEQ_PARA_CHANGE_SECCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [DEC SEQ INIT] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_DEC_SEQ_BB_START (BIT_BASE + 0x180)
+#define CMD_DEC_SEQ_BB_SIZE (BIT_BASE + 0x184)
+#define CMD_DEC_SEQ_OPTION (BIT_BASE + 0x188)
+#define CMD_DEC_SEQ_SRC_SIZE (BIT_BASE + 0x18C)
+#define CMD_DEC_SEQ_START_BYTE (BIT_BASE + 0x190)
+
+#define CMD_DEC_SEQ_PS_BB_START (BIT_BASE + 0x194)
+#define CMD_DEC_SEQ_PS_BB_SIZE (BIT_BASE + 0x198)
+
+#define CMD_DEC_SEQ_MP4_ASP_CLASS (BIT_BASE + 0x19C)
+#define CMD_DEC_SEQ_VC1_STREAM_FMT (BIT_BASE + 0x19C)
+#define CMD_DEC_SEQ_X264_MV_EN (BIT_BASE + 0x19C)
+
+// For MPEG2 only
+#define CMD_DEC_SEQ_USER_DATA_OPTION (BIT_BASE + 0x194)
+#define CMD_DEC_SEQ_USER_DATA_BASE_ADDR (BIT_BASE + 0x1AC)
+#define CMD_DEC_SEQ_USER_DATA_BUF_SIZE (BIT_BASE + 0x1B0)
+
+
+#define CMD_DEC_SEQ_INIT_ESCAPE (BIT_BASE + 0x114)
+
+
+#define RET_DEC_SEQ_BIT_RATE (BIT_BASE + 0x1B4)
+#define RET_DEC_SEQ_EXT_INFO (BIT_BASE + 0x1B8)
+#define RET_DEC_SEQ_SUCCESS (BIT_BASE + 0x1C0)
+#define RET_DEC_SEQ_SRC_SIZE (BIT_BASE + 0x1C4)
+#define RET_DEC_SEQ_ASPECT (BIT_BASE + 0x1B0)
+#define RET_DEC_SEQ_FRAME_NEED (BIT_BASE + 0x1CC)
+#define RET_DEC_SEQ_FRAME_DELAY (BIT_BASE + 0x1D0)
+#define RET_DEC_SEQ_INFO (BIT_BASE + 0x1D4)
+#define RET_DEC_SEQ_VP8_SCALE_INFO (BIT_BASE + 0x1D4)
+
+#define RET_DEC_SEQ_CROP_LEFT_RIGHT (BIT_BASE + 0x1D8)
+#define RET_DEC_SEQ_CROP_TOP_BOTTOM (BIT_BASE + 0x1DC)
+#define RET_DEC_SEQ_SEQ_ERR_REASON (BIT_BASE + 0x1E0)
+
+#define RET_DEC_SEQ_SRC_F_RATE (BIT_BASE + 0x1C8)
+#define RET_DEC_SEQ_FRATE_NR (BIT_BASE + 0x1E8)
+#define RET_DEC_SEQ_FRATE_DR (BIT_BASE + 0x1E4)
+
+#define RET_DEC_SEQ_HEADER_REPORT (BIT_BASE + 0x1EC)
+#define RET_DEC_SEQ_VUI_INFO (BIT_BASE + 0x18C)
+#define RET_DEC_SEQ_VUI_PIC_STRUCT (BIT_BASE + 0x1A8)
+
+#define RET_DEC_SEQ_MP2_BAR_LEFT_RIGHT (BIT_BASE + 0x1D8)
+#define RET_DEC_SEQ_MP2_BAR_TOP_BOTTOM (BIT_BASE + 0x1DC)
+
+
+
+
+//------------------------------------------------------------------------------
+// [DEC SEQ END] COMMAND
+//------------------------------------------------------------------------------
+#define RET_DEC_SEQ_END_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [DEC PIC RUN] COMMAND
+//----------------------------------------------------
+#define CMD_DEC_PIC_ROT_MODE (BIT_BASE + 0x180)
+#define CMD_DEC_BUF_FLUSH_TYPE (BIT_BASE + 0x180)
+#define CMD_DEC_BUF_FLUSH_RDPTR (BIT_BASE + 0x184)
+#define CMD_DEC_PIC_ROT_INDEX (BIT_BASE + 0x184)
+#define CMD_DEC_PIC_ROT_ADDR_Y (BIT_BASE + 0x184)
+#define CMD_DEC_PIC_ROT_ADDR_CB (BIT_BASE + 0x188)
+#define CMD_DEC_PIC_ROT_ADDR_CR (BIT_BASE + 0x18C)
+#define CMD_DEC_PIC_ROT_STRIDE (BIT_BASE + 0x190)
+
+
+#define CMD_DEC_PIC_OPTION (BIT_BASE + 0x194)
+
+#define CMD_DEC_PIC_CHUNK_SIZE (BIT_BASE + 0x19C)
+#define CMD_DEC_PIC_BB_START (BIT_BASE + 0x1A0)
+#define CMD_DEC_PIC_START_BYTE (BIT_BASE + 0x1A4)
+
+#define CMD_DEC_PIC_USER_DATA_BASE_ADDR (BIT_BASE + 0x1AC)
+#define CMD_DEC_PIC_USER_DATA_BUF_SIZE (BIT_BASE + 0x1B0)
+#define CMD_DEC_PIC_THO_PIC_PARA (BIT_BASE + 0x198)
+#define CMD_DEC_PIC_THO_QMAT_ADDR (BIT_BASE + 0x1A0)
+#define CMD_DEC_PIC_THO_MB_PARA_ADDR (BIT_BASE + 0x1A4)
+#define RET_DEC_PIC_VUI_PIC_STRUCT (BIT_BASE + 0x1A8)
+#define RET_DEC_PIC_AVC_FPA_SEI0 (BIT_BASE + 0x19C)
+#define RET_DEC_PIC_AVC_FPA_SEI1 (BIT_BASE + 0x1A0)
+#define RET_DEC_PIC_AVC_FPA_SEI2 (BIT_BASE + 0x1A4)
+#define RET_DEC_PIC_HRD_INFO (BIT_BASE + 0x1B8)
+#define RET_DEC_PIC_SIZE (BIT_BASE + 0x1BC)
+#define RET_DEC_PIC_FRAME_NUM (BIT_BASE + 0x1C0)
+#define RET_DEC_PIC_FRAME_IDX (BIT_BASE + 0x1C4)
+#define RET_DEC_PIC_DISPLAY_IDX (BIT_BASE + 0x1C4)
+#define RET_DEC_PIC_ERR_MB (BIT_BASE + 0x1C8)
+#define RET_DEC_PIC_TYPE (BIT_BASE + 0x1CC)
+#define RET_DEC_PIC_POST (BIT_BASE + 0x1D0) // for VC1
+#define RET_DEC_PIC_MVC_REPORT (BIT_BASE + 0x1D0) // for MVC
+#define RET_DEC_PIC_OPTION (BIT_BASE + 0x1D4)
+#define RET_DEC_PIC_SUCCESS (BIT_BASE + 0x1D8)
+#define RET_DEC_PIC_CUR_IDX (BIT_BASE + 0x1DC)
+#define RET_DEC_PIC_DECODED_IDX (BIT_BASE + 0x1DC)
+#define RET_DEC_PIC_CROP_LEFT_RIGHT (BIT_BASE + 0x1E0) // for AVC, MPEG-2
+#define RET_DEC_PIC_CROP_TOP_BOTTOM (BIT_BASE + 0x1E4) // for AVC, MPEG-2
+#define RET_DEC_PIC_MODULO_TIME_BASE (BIT_BASE + 0x1E0) // for MP4
+#define RET_DEC_PIC_VOP_TIME_INCREMENT (BIT_BASE + 0x1E4) // for MP4
+#define RET_DEC_PIC_RV_TR (BIT_BASE + 0x1E8)
+#define RET_DEC_PIC_VP8_PIC_REPORT (BIT_BASE + 0x1E8)
+#define RET_DEC_PIC_ATSC_USER_DATA_INFO (BIT_BASE + 0x1E8) // H.264, MEPEG2
+#define RET_DEC_PIC_VUI_INFO (BIT_BASE + 0x1EC)
+#define RET_DEC_PIC_ASPECT (BIT_BASE + 0x1F0)
+#define RET_DEC_PIC_VP8_SCALE_INFO (BIT_BASE + 0x1F0)
+#define RET_DEC_PIC_FRATE_NR (BIT_BASE + 0x1F4)
+#define RET_DEC_PIC_FRATE_DR (BIT_BASE + 0x1F8)
+#define RET_DEC_PIC_POC_TOP (BIT_BASE + 0x1AC)
+#define RET_DEC_PIC_POC_BOT (BIT_BASE + 0x1B0)
+#define RET_DEC_PIC_POC (BIT_BASE + 0x1B0)
+#define RET_DEC_PIC_SEQ_EXT_INFO (BIT_BASE + 0x1D0) // for MP2
+
+#define RET_DEC_PIC_MP2_BAR_LEFT_RIGHT (BIT_BASE + 0x180)
+#define RET_DEC_PIC_MP2_BAR_TOP_BOTTOM (BIT_BASE + 0x184)
+
+#define RET_DEC_PIC_MP2_OFFSET1 (BIT_BASE + 0x19C) // for MP2
+#define RET_DEC_PIC_MP2_OFFSET2 (BIT_BASE + 0x1A0) // for MP2
+#define RET_DEC_PIC_MP2_OFFSET3 (BIT_BASE + 0x1A4) // for MP2
+#define RET_DEC_PIC_MP2_OFFSET_NUM (BIT_BASE + 0x1A8) // for MP2
+
+
+//------------------------------------------------------------------------------
+// [DEC SET FRAME BUF] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_SET_FRAME_BUF_NUM (BIT_BASE + 0x180)
+#define CMD_SET_FRAME_BUF_STRIDE (BIT_BASE + 0x184)
+
+#define CMD_SET_FRAME_SLICE_BB_START (BIT_BASE + 0x188)
+#define CMD_SET_FRAME_SLICE_BB_SIZE (BIT_BASE + 0x18C)
+#define CMD_SET_FRAME_AXI_BIT_ADDR (BIT_BASE + 0x190)
+#define CMD_SET_FRAME_AXI_IPACDC_ADDR (BIT_BASE + 0x194)
+#define CMD_SET_FRAME_AXI_DBKY_ADDR (BIT_BASE + 0x198)
+#define CMD_SET_FRAME_AXI_DBKC_ADDR (BIT_BASE + 0x19C)
+#define CMD_SET_FRAME_AXI_OVL_ADDR (BIT_BASE + 0x1A0)
+#define CMD_SET_FRAME_AXI_ME_ADDR (BIT_BASE + 0x1A4) //for coda7L ME_SRAM
+
+#define CMD_SET_FRM_AXI_SCLY_ADDR (BIT_BASE + 0x1A4)
+#define CMD_SET_FRM_AXI_SCLC_ADDR (BIT_BASE + 0x1A8)
+#define CMD_SET_FRM_AXI_SCL_PACKED_SYNC_ADDR (BIT_BASE + 0x1AC)
+
+
+#define CMD_SET_FRAME_MB_BUF_BASE (BIT_BASE + 0x1B0)
+
+#define CMD_SET_FRAME_MAX_DEC_SIZE (BIT_BASE + 0x1B8)
+#define CMD_SET_FRAME_DELAY (BIT_BASE + 0x1BC)
+
+#define RET_SET_FRAME_SUCCESS (BIT_BASE + 0x1C0)
+
+
+//------------------------------------------------------------------------------
+// [DEC_PARA_SET] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_DEC_PARA_SET_TYPE (BIT_BASE + 0x180)
+#define CMD_DEC_PARA_SET_SIZE (BIT_BASE + 0x184)
+
+#define RET_DEC_PARA_SET_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [DEC_BUF_FLUSH] COMMAND
+//------------------------------------------------------------------------------
+#define RET_DEC_BUF_FLUSH_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [SLEEP/WAKE] COMMAND
+//------------------------------------------------------------------------------
+#define RET_SLEEP_WAKE_SUCCESS (BIT_BASE + 0x1C0)
+
+
+//------------------------------------------------------------------------------
+// [SET PIC INFO] COMMAND
+//------------------------------------------------------------------------------
+#define GDI_PRI_RD_PRIO_L (GDMA_BASE + 0x000)
+#define GDI_PRI_RD_PRIO_H (GDMA_BASE + 0x004)
+#define GDI_PRI_WR_PRIO_L (GDMA_BASE + 0x008)
+#define GDI_PRI_WR_PRIO_H (GDMA_BASE + 0x00c)
+#define GDI_PRI_RD_LOCK_CNT (GDMA_BASE + 0x010)
+#define GDI_PRI_WR_LOCK_CNT (GDMA_BASE + 0x014)
+#define GDI_SEC_RD_PRIO_L (GDMA_BASE + 0x018)
+#define GDI_SEC_RD_PRIO_H (GDMA_BASE + 0x01c)
+#define GDI_SEC_WR_PRIO_L (GDMA_BASE + 0x020)
+#define GDI_SEC_WR_PRIO_H (GDMA_BASE + 0x024)
+#define GDI_SEC_RD_LOCK_CNT (GDMA_BASE + 0x028)
+#define GDI_SEC_WR_LOCK_CNT (GDMA_BASE + 0x02c)
+#define GDI_SEC_CLIENT_EN (GDMA_BASE + 0x030)
+#define GDI_CONTROL (GDMA_BASE + 0x034)
+#define GDI_PIC_INIT_HOST (GDMA_BASE + 0x038)
+
+#define GDI_HW_VERINFO (GDMA_BASE + 0x050)
+#define GDI_PINFO_REQ (GDMA_BASE + 0x060)
+#define GDI_PINFO_ACK (GDMA_BASE + 0x064)
+#define GDI_PINFO_ADDR (GDMA_BASE + 0x068)
+#define GDI_PINFO_DATA (GDMA_BASE + 0x06c)
+#define GDI_BWB_ENABLE (GDMA_BASE + 0x070)
+#define GDI_BWB_SIZE (GDMA_BASE + 0x074)
+#define GDI_BWB_STD_STRUCT (GDMA_BASE + 0x078)
+#define GDI_BWB_STATUS (GDMA_BASE + 0x07c)
+
+#define GDI_STATUS (GDMA_BASE + 0x080)
+
+#define GDI_DEBUG_0 (GDMA_BASE + 0x084)
+#define GDI_DEBUG_1 (GDMA_BASE + 0x088)
+#define GDI_DEBUG_2 (GDMA_BASE + 0x08c)
+#define GDI_DEBUG_3 (GDMA_BASE + 0x090)
+#define GDI_DEBUG_PROBE_ADDR (GDMA_BASE + 0x094)
+#define GDI_DEBUG_PROBE_DATA (GDMA_BASE + 0x098)
+
+
+
+// write protect
+#define GDI_WPROT_ERR_CLR (GDMA_BASE + 0x0A0)
+#define GDI_WPROT_ERR_RSN (GDMA_BASE + 0x0A4)
+#define GDI_WPROT_ERR_ADR (GDMA_BASE + 0x0A8)
+#define GDI_WPROT_RGN_EN (GDMA_BASE + 0x0AC)
+#define GDI_WPROT_RGN0_STA (GDMA_BASE + 0x0B0)
+#define GDI_WPROT_RGN0_END (GDMA_BASE + 0x0B4)
+#define GDI_WPROT_RGN1_STA (GDMA_BASE + 0x0B8)
+#define GDI_WPROT_RGN1_END (GDMA_BASE + 0x0BC)
+#define GDI_WPROT_RGN2_STA (GDMA_BASE + 0x0C0)
+#define GDI_WPROT_RGN2_END (GDMA_BASE + 0x0C4)
+#define GDI_WPROT_RGN3_STA (GDMA_BASE + 0x0C8)
+#define GDI_WPROT_RGN3_END (GDMA_BASE + 0x0CC)
+#define GDI_WPROT_RGN4_STA (GDMA_BASE + 0x0D0)
+#define GDI_WPROT_RGN4_END (GDMA_BASE + 0x0D4)
+#define GDI_WPROT_RGN5_STA (GDMA_BASE + 0x0D8)
+#define GDI_WPROT_RGN5_END (GDMA_BASE + 0x0DC)
+
+#define GDI_BUS_CTRL (GDMA_BASE + 0x0F0)
+#define GDI_BUS_STATUS (GDMA_BASE + 0x0F4)
+
+
+
+#define GDI_SIZE_ERR_FLAG (GDMA_BASE + 0x0e0)
+#define GDI_ADR_RQ_SIZE_ERR_PRI0 (GDMA_BASE + 0x100)
+#define GDI_ADR_RQ_SIZE_ERR_PRI1 (GDMA_BASE + 0x104)
+#define GDI_ADR_RQ_SIZE_ERR_PRI1 (GDMA_BASE + 0x104)
+#define GDI_ADR_RQ_SIZE_ERR_PRI2 (GDMA_BASE + 0x108)
+#define GDI_ADR_WQ_SIZE_ERR_PRI0 (GDMA_BASE + 0x10c)
+#define GDI_ADR_WQ_SIZE_ERR_PRI1 (GDMA_BASE + 0x110)
+#define GDI_ADR_WQ_SIZE_ERR_PRI2 (GDMA_BASE + 0x114)
+
+#define GDI_ADR_RQ_SIZE_ERR_SEC0 (GDMA_BASE + 0x118)
+#define GDI_ADR_RQ_SIZE_ERR_SEC1 (GDMA_BASE + 0x11c)
+#define GDI_ADR_RQ_SIZE_ERR_SEC2 (GDMA_BASE + 0x120)
+
+#define GDI_ADR_WQ_SIZE_ERR_SEC0 (GDMA_BASE + 0x124)
+#define GDI_ADR_WQ_SIZE_ERR_SEC1 (GDMA_BASE + 0x128)
+#define GDI_ADR_WQ_SIZE_ERR_SEC2 (GDMA_BASE + 0x12c)
+
+#define GDI_INFO_CONTROL (GDMA_BASE + 0x400)
+#define GDI_INFO_PIC_SIZE (GDMA_BASE + 0x404)
+#define GDI_INFO_BASE_Y (GDMA_BASE + 0x408)
+#define GDI_INFO_BASE_CB (GDMA_BASE + 0x40C)
+#define GDI_INFO_BASE_CR (GDMA_BASE + 0x410)
+
+#define GDI_XY2_CAS_0 (GDMA_BASE + 0x800)
+#define GDI_XY2_CAS_F (GDMA_BASE + 0x83C)
+
+#define GDI_XY2_BA_0 (GDMA_BASE + 0x840)
+#define GDI_XY2_BA_1 (GDMA_BASE + 0x844)
+#define GDI_XY2_BA_2 (GDMA_BASE + 0x848)
+#define GDI_XY2_BA_3 (GDMA_BASE + 0x84C)
+
+#define GDI_XY2_RAS_0 (GDMA_BASE + 0x850)
+#define GDI_XY2_RAS_F (GDMA_BASE + 0x88C)
+
+#define GDI_XY2_RBC_CONFIG (GDMA_BASE + 0x890)
+#define GDI_RBC2_AXI_0 (GDMA_BASE + 0x8A0)
+#define GDI_RBC2_AXI_1F (GDMA_BASE + 0x91C)
+#define GDI_TILEDBUF_BASE (GDMA_BASE + 0x920)
+
+//------------------------------------------------------------------------------
+// Product, Reconfiguration Information
+//------------------------------------------------------------------------------
+#define DBG_CONFIG_REPORT_0 (GDMA_BASE + 0x040) //product name and version
+#define DBG_CONFIG_REPORT_1 (GDMA_BASE + 0x044) //interface configuration, hardware definition
+#define DBG_CONFIG_REPORT_2 (GDMA_BASE + 0x048) //standard definition
+#define DBG_CONFIG_REPORT_3 (GDMA_BASE + 0x04C) //standard detail definition
+#define DBG_CONFIG_REPORT_4 (GDMA_BASE + 0x050) //definition in cnm_define
+#define DBG_CONFIG_REPORT_5 (GDMA_BASE + 0x054)
+#define DBG_CONFIG_REPORT_6 (GDMA_BASE + 0x058)
+#define DBG_CONFIG_REPORT_7 (GDMA_BASE + 0x05C)
+
+//------------------------------------------------------------------------------
+// MEMORY COPY MODULE REGISTER
+//------------------------------------------------------------------------------
+#define ADDR_DMAC_PIC_RUN (DMAC_BASE+0x000)
+#define ADDR_DMAC_PIC_STATUS (DMAC_BASE+0x004)
+#define ADDR_DMAC_PIC_OP_MODE (DMAC_BASE+0x008)
+#define ADDR_DMAC_ID (DMAC_BASE+0x00c) //the result muse be 0x4d435059
+
+#define ADDR_DMAC_SRC_BASE_Y (DMAC_BASE+0x010)
+#define ADDR_DMAC_SRC_BASE_CB (DMAC_BASE+0x014)
+#define ADDR_DMAC_SRC_BASE_CR (DMAC_BASE+0x018)
+#define ADDR_DMAC_SRC_STRIDE (DMAC_BASE+0x01c)
+
+#define ADDR_DMAC_DST_BASE_Y (DMAC_BASE+0x020)
+#define ADDR_DMAC_DST_BASE_CB (DMAC_BASE+0x024)
+#define ADDR_DMAC_DST_BASE_CR (DMAC_BASE+0x028)
+#define ADDR_DMAC_DST_STRIDE (DMAC_BASE+0x02c)
+
+#define ADDR_DMAC_SRC_MB_POS_X (DMAC_BASE+0x030)
+#define ADDR_DMAC_SRC_MB_POS_Y (DMAC_BASE+0x034)
+#define ADDR_DMAC_SRC_MB_BLK_X (DMAC_BASE+0x038)
+#define ADDR_DMAC_SRC_MB_BLK_Y (DMAC_BASE+0x03c)
+
+#define ADDR_DMAC_DST_MB_POS_X (DMAC_BASE+0x040)
+#define ADDR_DMAC_DST_MB_POS_Y (DMAC_BASE+0x044)
+#define ADDR_DMAC_DST_MB_BLK_X (DMAC_BASE+0x048)
+#define ADDR_DMAC_DST_MB_BLK_Y (DMAC_BASE+0x04c)
+
+#define ADDR_DMAC_SET_COLOR_Y (DMAC_BASE+0x050)
+#define ADDR_DMAC_SET_COLOR_CB (DMAC_BASE+0x054)
+#define ADDR_DMAC_SET_COLOR_CR (DMAC_BASE+0x058)
+
+#define ADDR_DMAC_SUB_SAMPLE_X (DMAC_BASE+0x060)
+#define ADDR_DMAC_SUB_SAMPLE_Y (DMAC_BASE+0x064)
+
+
+
+//------------------------------------------------------------------------------
+// DMAC
+//------------------------------------------------------------------------------
+#define DMAC_DMAC_RUN (DMAC_BASE + 0x00)
+#define DMAC_SOFT_RESET (DMAC_BASE + 0x04)
+#define DMAC_DMAC_MODE (DMAC_BASE + 0x08)
+#define DMAC_DESC_ADDR (DMAC_BASE + 0x0c)
+#define DMAC_DESC0 (DMAC_BASE + 0x10)
+#define DMAC_DESC1 (DMAC_BASE + 0x14)
+#define DMAC_DESC2 (DMAC_BASE + 0x18)
+#define DMAC_DESC3 (DMAC_BASE + 0x1c)
+#define DMAC_DESC4 (DMAC_BASE + 0x20)
+#define DMAC_DESC5 (DMAC_BASE + 0x24)
+#define DMAC_DESC6 (DMAC_BASE + 0x28)
+#define DMAC_DESC7 (DMAC_BASE + 0x2c)
+
+
+//------------------------------------------------------------------------------
+// [FIRMWARE VERSION] COMMAND
+// [32:16] project number =>
+// [16:0] version => xxxx.xxxx.xxxxxxxx
+//------------------------------------------------------------------------------
+#define RET_FW_VER_NUM (BIT_BASE + 0x1c0)
+#define RET_FW_CODE_REV (BIT_BASE + 0x1c4)
+
+
+#endif //__CODA7L_REGS_H__
+
diff --git a/board/rda/common/include/coda7l_test_video.txt b/board/rda/common/include/coda7l_test_video.txt
new file mode 100644
index 0000000000..2d52fc6460
--- /dev/null
+++ b/board/rda/common/include/coda7l_test_video.txt
@@ -0,0 +1,9435 @@
+0x01000000, 0x1F404D27, 0x5A408D8D, 0x0000903D, 0xEE280100, 0x00C81508, 0x25010000, 0x000200B8,
+0xB4CC7F00, 0x1A917434, 0x778F4F3E, 0x94966C10, 0x036EB76C, 0xE3D1E21C, 0x7842BB5F, 0x1C857462,
+0x65111D33, 0xA363E24F, 0xDACFE14B, 0x21CE79E2, 0xB953854A, 0x75AC19AB, 0xC17FE329, 0xAF3F84BC,
+0xD8B7E21F, 0x1FCFF248, 0x5187EDB8, 0x6253B4AC, 0xE71F2548, 0x5BAE0113, 0xF6A98FBD, 0xFE997DFE,
+0x4DB8D2CD, 0xBB1D42E6, 0xDC771AD8, 0xBBA84A47, 0xE394F269, 0xB1865720, 0xF36CE7CF, 0x292917BC,
+0xE0E43EEB, 0xF9F3BF0B, 0x24924B12, 0x7583492D, 0xB71F5655, 0x0F5FAECD, 0xEF9036B6, 0xDDDC2581,
+0x3A10C8E2, 0x2F0354D7, 0x1702D9FA, 0xDDA471E6, 0x1FF5279D, 0x8FB6335D, 0x4FC973BE, 0x00ABB163,
+0x66976F24, 0xCE5DC065, 0x81BD5CD0, 0x1A36046B, 0xC6662FDE, 0xE81B47C1, 0xBFC15FB7, 0xB29507EE,
+0x2CA2CBBA, 0xA41ECCC1, 0x2FC88D3C, 0xF793B9E8, 0x7C46E6E1, 0xB193B580, 0xCEFE0BC8, 0xB72CA7AD,
+0x10ED37F8, 0x5BB9C37B, 0x24D26758, 0x791A472C, 0x3FC6CE0B, 0xF976A6A6, 0xF40DCD94, 0x04877935,
+0x49E010F1, 0x8638A128, 0x0584AEF1, 0x27A70AEF, 0x356FB08E, 0x5648D135, 0xB4A38A5B, 0xE51E6C69,
+0xC02E9621, 0x4AE0D7CE, 0xBD8FE74B, 0x3C7DF817, 0xB465142E, 0x104B2371, 0x5E7B61D5, 0xCF697BFA,
+0xBAD206D2, 0x3D5470B0, 0x9DB5FA0A, 0xAA94FBE1, 0xFEC6683E, 0x55C4C532, 0x31BB4BB6, 0xCDF9DC97,
+0x2263D167, 0x294F913A, 0x06D405E0, 0xCB11E6AB, 0xD7E6A708, 0x1E01542A, 0xBDBFAD22, 0xBED866F9,
+0xD99F0443, 0xD204DC7D, 0xD57E3C3D, 0xFB542E4E, 0x70562917, 0xB6EA34D2, 0x7953B0E6, 0xAD649B2E,
+0x6E03B5F2, 0x32D09FCB, 0xB7E19873, 0xC6546843, 0x3059A8B0, 0x5F6A65FF, 0x383F4531, 0x72DB461D,
+0x6C4CD85F, 0xF3138808, 0x5FB5982C, 0x8AD199C1, 0x67DB38D4, 0x607DBF5D, 0x1D4ACDD1, 0xB142488B,
+0xFD42458F, 0xA99A8A01, 0x6708D4F2, 0x8BBB782A, 0xD51FA650, 0xCC255367, 0x628FBB6D, 0x34060CFE,
+0x0CD22EDB, 0x9285AA7D, 0x086F0589, 0xADE23CC4, 0x5B64EDDB, 0x72DCFC71, 0x30842B8A, 0x855A5D76,
+0x2F858613, 0x809B07BC, 0xF26295DB, 0xF72797D5, 0x608C8662, 0x207AEA1E, 0x74150B7F, 0x48919CCD,
+0xC5D2DB54, 0x4B68880A, 0x167DCA39, 0xC2EBF403, 0xC2379C97, 0x81E739AE, 0x1675D97D, 0x5CEE9592,
+0xA3839961, 0xE5E97F95, 0x98938117, 0x4C59A62B, 0xF9B7642F, 0x27ED2194, 0xA5B48FE9, 0x9DBE245F,
+0x44C01ECA, 0x21587121, 0xEE047B89, 0xDD22B3CD, 0x60D35F67, 0x23D61382, 0x9B5BC1B6, 0xB32CDB1F,
+0x893165C3, 0x52717FB8, 0x36834659, 0x01BC42DE, 0xE59794D0, 0x3E694FD3, 0xA4CC8667, 0x07BFD9F2,
+0x8035EA1E, 0x519C0B99, 0x79EE2888, 0xF6D67FC5, 0xFC196B6B, 0xFF0F810F, 0xE76D6CFE, 0x73D9114A,
+0x55DC5D9B, 0xA5FAE39D, 0x669A88BA, 0x2ABA3EF7, 0x28B41E00, 0x77455A7F, 0x5ED23953, 0x7E627F7E,
+0xAC6DDB01, 0x16479748, 0x57636FD0, 0x24EC1FC0, 0xA94CFC71, 0x1332CFE4, 0x9A049B05, 0x1F17AD9A,
+0xE69D6C81, 0xDD125C45, 0x476E7CEE, 0x7E70F050, 0x685C421B, 0x6461779A, 0x065EB196, 0xD486EEB9,
+0xA0079090, 0xF8963C08, 0x9A48CE81, 0xFD6BB425, 0x9EFA89E1, 0x5B7F5394, 0x6EAA5D11, 0x4AEE12B7,
+0xED82AF74, 0x13DB9668, 0xE389D188, 0x1A6740F3, 0xDD97291D, 0x84E3F294, 0x82444DD1, 0xEA841497,
+0x684F55BE, 0x870572FB, 0xD0081B00, 0xD2E46E60, 0x5AFFE4E6, 0xBB584138, 0xB20AB467, 0x22EDB941,
+0xEBC98524, 0x2F1A6434, 0x54578E11, 0x04E1F2CA, 0x5E897233, 0x57F9950E, 0x990DA8F8, 0x3A9CBB07,
+0xF92B9E9C, 0x1EE2B205, 0xADDE8043, 0x7C33E7DF, 0xC0E12E54, 0xEA0F571C, 0xEB26302A, 0xCFC906F9,
+0x4DA2074B, 0xAF74A68F, 0x00201E9E, 0x089E05E4, 0xA6AE02A1, 0x309FB5C0, 0xB1CDD680, 0x39DA0328,
+0x66AD8CDF, 0x5D9CE75E, 0xFA215794, 0x4417EC3A, 0x6D90CB21, 0xFCC6390B, 0xB423B4F2, 0xD1CE41E0,
+0x0419C01B, 0x53A1BBBF, 0x78A01250, 0x6E57058A, 0x5ADDDDA1, 0xAF636191, 0xB2B68CFC, 0x67648C29,
+0xE9C8703F, 0x4CDCA944, 0x406D7026, 0x2BBA3EB5, 0x382963EC, 0x0ABBA19B, 0xE2BAA3BC, 0x45E7F715,
+0x28F91065, 0x77C02B68, 0x3B87A7C4, 0xF03B7259, 0xDB2CADDF, 0x26593C6B, 0x8AF1814A, 0x8F96B6FB,
+0xBCC3A90A, 0xF99A80DA, 0xDE110C49, 0xBED673D9, 0x130EE126, 0x0B93B69E, 0x7D7737C3, 0xE66BCBDB,
+0xD218C88C, 0x59BF6AC3, 0xDD06CD32, 0x4733644E, 0x6514D1BE, 0x0D5D3D84, 0x23FCFC26, 0x424CF9FD,
+0x538B6400, 0xC3ACBEEE, 0x83469CDF, 0x627D8A69, 0x3C120BDF, 0xD0D48639, 0x2CEC0A12, 0x218338EB,
+0x0BDD176F, 0x3C891030, 0xC5431FC9, 0x651A7B62, 0x60E8E5AB, 0x9F45983F, 0x33D9BACA, 0x6CB63448,
+0x86D85E5E, 0xC28E7397, 0xB954FCB3, 0x0385E1EA, 0xB7E3FC29, 0x52054F36, 0x873E9C0B, 0xFF61EECC,
+0x326A3E06, 0x35C6871E, 0x43EEA7BA, 0xCB97494B, 0x03358D9E, 0x32C1CEB6, 0xC9BF6F51, 0xD5C311F2,
+0x889FC519, 0xD573BE09, 0xDFF9585D, 0x7AE23F2F, 0xBF90825D, 0x64E32A3B, 0x8972EC9B, 0x006FE3D8,
+0x05C46F2A, 0xF37FF7B2, 0xCAC80273, 0xD79F2784, 0x2476D000, 0xD8A7752F, 0xF6A679E7, 0x3CB4C80F,
+0x7A3C01D7, 0x4EA105A4, 0x32029165, 0x39F63AE1, 0xF81147CA, 0x43230048, 0xA53080A1, 0x3EC01BA3,
+0x44A10A6C, 0xF79F603A, 0xBEAB2F4F, 0xEDDCFE14, 0xE1C51172, 0x30DFF361, 0xA46E90F7, 0x73AF0A0A,
+0x0903E05B, 0x96B0B552, 0x79E024E9, 0x88A7DBD4, 0x00AB633A, 0x72CA0DDC, 0xD0BF266D, 0x7BBF62B3,
+0x175377EF, 0x7B70283D, 0x85E78587, 0x5EFF9A7C, 0x2AAC9724, 0x512E8998, 0x53D106E5, 0x60AA3620,
+0xF881155E, 0x8A83A58C, 0x9E248734, 0x12473BC1, 0xCD8E485F, 0x7F3EF67A, 0xDEB71265, 0xF68FBB5F,
+0x87A7DFEB, 0x46F2BFA5, 0xEE2A213B, 0xB3B6F3F8, 0x724DA9AA, 0xBC19314F, 0x35EEEAB6, 0x38C6811B,
+0x6113E099, 0x9C11E04F, 0x3016D827, 0x7FA8E2DB, 0x4DB0302D, 0x2B9DFB6C, 0x2FA14FEE, 0x3F2D1E1F,
+0x7000B0ED, 0xBC6B4B1F, 0xAB02C6BD, 0x189B6F6F, 0x1AC167F8, 0x4BCAC0F0, 0x84BDB593, 0x34F20634,
+0x6C4063FC, 0x5B69D619, 0x5E329343, 0x9A1C6D66, 0x1985ADBE, 0x734B262B, 0x978CB2B5, 0x59AE9AD4,
+0x8F4BD91C, 0x1735A843, 0x98A1B996, 0x9AC8576E, 0xC36E239C, 0x10354985, 0xDD3D6D2C, 0x69994D30,
+0xA7F7593C, 0xFA540656, 0x978A8CFA, 0xF9015E9D, 0x7CB50E22, 0x40329D6D, 0x73092A94, 0xD5D886D2,
+0x00ACE8BD, 0xD223AEE4, 0xB614B52C, 0x39B1701B, 0xC2D65C39, 0x84CBB065, 0x5B05C8DC, 0x36FE57DA,
+0x4754B784, 0x0BF154F4, 0xDB3390ED, 0x22FCC82C, 0x415A4479, 0x3E3A4600, 0xB2D49E95, 0x19199A55,
+0xF8E56AFD, 0xCA195645, 0x9238E80A, 0x6F64E1CE, 0x9AB851E2, 0x990E8106, 0xF6120060, 0x3EC5E06A,
+0xD5764449, 0xB1832144, 0x89C3231D, 0x1C14E6AE, 0x67D952F1, 0xAEEFD026, 0xFDF020EA, 0x5453F648,
+0x5A8513F2, 0xDEAA9199, 0x84869341, 0xFB41A696, 0x76EFFA54, 0xED6627D9, 0x0AE8D001, 0x04D5DC05,
+0xD0299147, 0xF1E7D634, 0x6AAF9021, 0x27A79A46, 0x7849C572, 0x03EC69BB, 0x19EBF068, 0x37787183,
+0x3339450A, 0xA7C84CB8, 0x848959EF, 0x072E4637, 0x29833214, 0x02A5AFD0, 0x7562EE8F, 0xDAF15F9F,
+0x01C38819, 0x2541A47C, 0x1D9D1582, 0xB434F16A, 0x8EDA91FD, 0x9D8ACC85, 0x12117953, 0xC4BD73BF,
+0x66E22182, 0x4ECC4305, 0x597AF136, 0xB8D50A41, 0x4498AAE6, 0x2A1003CC, 0x5B17A853, 0x9676898B,
+0xD5E320DD, 0xF6072ECF, 0x7865DBA0, 0xD01C61ED, 0xD09029E5, 0xA65B6B55, 0x67B1FE47, 0xF60CE961,
+0xC64F12FB, 0x0E0869A0, 0xC9AC33F9, 0xA9FC3751, 0x70499745, 0xC3DB37F3, 0x321FE32D, 0xE90317D6,
+0x560A8159, 0xD855F789, 0x8DF8907F, 0x47DA9450, 0x4447B407, 0x0E5661FC, 0xD56A1A98, 0xDD6A1376,
+0xB431B72C, 0xF1A7FD41, 0xE827CABF, 0x858090C1, 0xEEEFE633, 0x1342DFD1, 0xA9D86010, 0x2A676096,
+0xE8CB23E4, 0xDA9D607E, 0x877CFD78, 0xBB60C7BE, 0x2EF63637, 0x8E8F5664, 0xF2568EF6, 0xCF72BE29,
+0x44B4D7DB, 0x45C944EB, 0xF58A3303, 0x132892E1, 0x534F4471, 0xEF2BDDAB, 0xD3E213FD, 0xB8CFEC86,
+0x449E6CDD, 0x8709837D, 0xF15DEB2F, 0xCDA1688E, 0xE6365419, 0x7AAFC431, 0x61AB843F, 0x6BB98522,
+0xF51337BA, 0x7994DE1F, 0x9127E5BA, 0x66BA5218, 0xDA748A6E, 0xFABCBB41, 0xEC5A6C26, 0xA130B02E,
+0xF593176F, 0x092F137D, 0xE180C586, 0x88F302CB, 0xD547CA5E, 0xAA2405EA, 0x4748D00F, 0xD9F1BB55,
+0x9CB165DC, 0x8EFFFF49, 0x09C50DAF, 0x424D2362, 0x9FCE3586, 0x8B77E5A2, 0x6748A122, 0x936A9323,
+0xDCAAC792, 0xD55D7F4A, 0xE2B7DEF9, 0xD4DAB540, 0x1FBF280D, 0x3097239A, 0xB8161ECB, 0xA99CB83D,
+0xEC736F56, 0x98482FA8, 0x6F59722D, 0x28CD3D73, 0xA60D7B9B, 0xF75792A4, 0x23090991, 0x3FFBD218,
+0xF2613771, 0xD96106C3, 0x6C006966, 0x3B3E773D, 0x5AD50907, 0x1C23119E, 0x262BC867, 0x4B9725C4,
+0x6563BE30, 0x0BCFA5C9, 0x699E742E, 0xB1A2D413, 0xC54A75CA, 0x425A6960, 0xB3E9B9CA, 0x56BE16C7,
+0x509D0EFA, 0x711BACAF, 0x1FA533C6, 0xDEB3E840, 0x96BBCAF9, 0xDA1B91FD, 0x737824A5, 0x245EA66E,
+0x0A3AC030, 0x01B0567C, 0x2EB29709, 0xCD80BE54, 0x1594BC69, 0xFE5A259E, 0xF7B80C9A, 0xE19DEE42,
+0x6618912C, 0xF785BFF0, 0x1568100D, 0x3955FCF6, 0xAC20E9B7, 0x93E6051A, 0x47B2B4D3, 0x2E167443,
+0xAE2D9E53, 0x5CAF111A, 0xE75380AC, 0xD57874AC, 0xD8CD3A4E, 0xE63CA533, 0xBB63C2FB, 0x80894BC6,
+0xC29A79AE, 0x5027A02F, 0x6C8A9F7F, 0xA59756F0, 0x5B123878, 0xC9DEDA6D, 0x77E1BDC0, 0x46D1449B,
+0x0A15ADDD, 0xAD9409F4, 0xCFD7BD38, 0xE97BB9A6, 0x6AED2A6F, 0xF8F8BDE1, 0x71A796D1, 0xDBDB169D,
+0x32CF0AFF, 0x3C606182, 0x2736E085, 0x1970C282, 0x46B58A9E, 0x79B61D4A, 0x74905075, 0x0C87BBBB,
+0x5E4E8C8B, 0xAA8E22C2, 0xAB4C450A, 0x0008CCFA, 0xAD62BA5F, 0x5A18143A, 0xDFF5BCDA, 0x22F82703,
+0xF5097260, 0x530C4C05, 0x7025F44B, 0x49CA1071, 0xA4CC6E3E, 0xD58275D4, 0xA9154295, 0x25675EFB,
+0xFF684E8D, 0x47725301, 0x3A1547D6, 0x3E46C884, 0x9F119E3A, 0x6BB83C78, 0xD6FB8970, 0xBD5925C9,
+0x1D58DC0C, 0xFAC6E06C, 0x80D91C92, 0x11356574, 0x8C99CCB8, 0x83773943, 0x427441F7, 0xCAA489C6,
+0xA5C39422, 0x10FD56B3, 0xC1A8E13E, 0x6229C0D9, 0x4723EF29, 0x79393AA7, 0xC8BB915B, 0xB6C6B49F,
+0x22F82630, 0x160E9F7F, 0x47A3C803, 0xE4882D8C, 0xA3AB2B1A, 0xE037857A, 0xC382EF6A, 0x412CD54B,
+0x41C458FC, 0xC4727B80, 0x5F1C3CE7, 0xAAEAD12B, 0x708944D3, 0x8E382DD9, 0x8A34E39D, 0x6E8A18B1,
+0x00F11D4C, 0x2F3988BD, 0x48425CC4, 0xECC81390, 0x0E4CAF45, 0x5A55FBC1, 0x830B4563, 0x5220A656,
+0x9941DE92, 0x7E91FDEC, 0x0F5069FA, 0x793D3275, 0xF6F3E65F, 0xBB0685F9, 0xA32FD9CB, 0x54DDB520,
+0x5A40783E, 0x3F8B810D, 0x2312716D, 0x3B99C1B8, 0x43A9B70D, 0x374A41B6, 0x8F3E6E55, 0x9201BAC4,
+0x827E8D38, 0x6F10265B, 0x3BB2140D, 0x4994CFE5, 0x42E99637, 0x2A815ADB, 0xA891980C, 0xD81EE1BC,
+0x579EB4BF, 0x5F790C8C, 0x1C72777B, 0x9AC4AFBE, 0xB1888D24, 0xA0EE1141, 0x7C5B03C6, 0x3262BDC9,
+0x715B019D, 0x9BDD420E, 0x829C837E, 0xFE004623, 0xBA32A3E7, 0x95E6CA65, 0x0BFD959A, 0xB36AFEF5,
+0x5E1E0D60, 0x3D72EFC2, 0xC0884171, 0x1D323552, 0x671A8D28, 0x996EA039, 0xF0D36479, 0xAE697A68,
+0x374DF2DC, 0xBBE2D052, 0xA8C1E2E7, 0xD554975E, 0xADD912CA, 0x7B4184FB, 0xB0571035, 0xD5062473,
+0xBA731F9B, 0x4F6840AE, 0x72E58EA8, 0xAAE7C93B, 0x73B7D4B8, 0xF21E7740, 0xAE5899D2, 0x1FDBC933,
+0x03D770F5, 0x0E5D8C5D, 0x608201C9, 0xA789AC0F, 0x3FBF5156, 0xFE8E9773, 0xC8DB8478, 0x78F6979B,
+0xB9318291, 0x46F92879, 0xA48CDF60, 0xEA93954B, 0x4B0830A0, 0xA2B8E5DC, 0x9FEB7A64, 0x4A605414,
+0xE6537FEB, 0xF2AF57CC, 0x2CFA60AB, 0xC3AC37D2, 0x947C555A, 0x2577864B, 0x994BB97D, 0x7F4B586D,
+0x828F6C9B, 0x83024746, 0x2E233069, 0x666EE7E8, 0xC8103A7B, 0xFD3B0D7A, 0x7EE8830D, 0xA469D2FE,
+0x5D7E1AAE, 0xE41F61EF, 0x871D68DE, 0xB9C67CDD, 0x869B5F5F, 0xB33CD68D, 0x4B60EDA9, 0xAD80518D,
+0xB3158411, 0x9DD39A3C, 0x5A936D57, 0x318989B4, 0xC916BCC6, 0x9217B199, 0x0ED06DEF, 0x497EB6B5,
+0x03EF9E42, 0x4EA9446B, 0x2BCA9B02, 0x93C52283, 0xF897384A, 0x1EA3DCDB, 0x0B416E4E, 0xE36959AD,
+0xC5830660, 0x64DBBEF8, 0xF5BB114C, 0x780A591B, 0x7D732E23, 0xDFB989CE, 0x16C94402, 0x876F6B87,
+0x5058A414, 0x346FF0C6, 0x05B9B0EA, 0xFEE50A07, 0x6BA6292E, 0x7034444F, 0x7E7DA797, 0xF04E12FD,
+0x5192CA94, 0xF6B5C008, 0x4F37FEAC, 0x3073B0DC, 0xC567E987, 0x5B280E71, 0x78FAA6C1, 0xB860A3D3,
+0x12549672, 0x613068F9, 0x6E1897C9, 0x0B829187, 0xC1805597, 0xD2BB5B4F, 0x3FF35DA8, 0xE7BFD141,
+0xA8023E48, 0x720E53D1, 0xE3A086BB, 0x9256E92F, 0xDD4D1DCF, 0x4CB58E57, 0x5D021ABD, 0xF96ABE06,
+0x6EF73591, 0xD0E65634, 0x3ED3A2FB, 0x37EB721B, 0xAC9F0EF2, 0x251D6C58, 0x46419DDD, 0x9BB25141,
+0xE4B96BAA, 0x8E9E0F61, 0xEEC9BAF3, 0x4185E0DC, 0xCECF5A0B, 0xD2A19F3A, 0xDD42158D, 0x394F06FD,
+0xF032C197, 0x56A5B802, 0xDFF58F81, 0x937AF962, 0x3A46008A, 0xE7366D47, 0xF8358616, 0xC078A837,
+0x3121C679, 0xC799A4CE, 0xEAC9E5B1, 0x8B212081, 0x79F8C981, 0xBA5BDF98, 0x1D1D10F0, 0x72D4544C,
+0xE23C1A0C, 0x433B92F4, 0x07B6EB30, 0x636F8301, 0x37A93752, 0xFB69BCF2, 0x82336B53, 0xD036EE94,
+0x8765094B, 0xA5D04083, 0xD36ADA1D, 0x685986D4, 0xDC938C49, 0x7E9A6ED7, 0xFAA5997E, 0xD6FACBEC,
+0xFEC6D38C, 0x167BFA8D, 0x42042EB0, 0x21A1BDAE, 0xD4478552, 0xA4FEB1A6, 0x9F6C427F, 0xD870B3A1,
+0xB4B3DF28, 0x464C98BD, 0x5527FA32, 0x2BE9C252, 0x0FD75DAC, 0x30E6F346, 0x334505FB, 0x1FAB7108,
+0x5A3B3376, 0xBD79356A, 0x13B07454, 0x84F36E30, 0x95E290AA, 0xE9464978, 0xFC5D699C, 0x20D182FD,
+0xBF2EB125, 0xB419E0ED, 0x4705F149, 0x9EFAE500, 0x5B3D167F, 0x6ED27824, 0x36403042, 0xA75A5E01,
+0x164CBBAB, 0xA6112173, 0xEAEE9FBB, 0xCA374E07, 0xFA98CE54, 0xE01A0277, 0x95F1B55A, 0x6645E022,
+0xDB713217, 0xBF540D46, 0x5B6F4670, 0xBD98B5D0, 0x028B3B45, 0x90969F97, 0x762263FF, 0xB67775A0,
+0x4D5CEEBC, 0x0AB2D43B, 0x7103F547, 0x30DB1BF2, 0xC0612D3F, 0xCDAB3293, 0x9091F589, 0xA9A050C8,
+0x4732838A, 0x0F395305, 0xFE1BD1E6, 0x2297ABCA, 0x47347FAC, 0x46B53AFE, 0xA770AB88, 0x6E1E9FBC,
+0x2BA0CB38, 0x9CFAF0AD, 0x55D51230, 0xB2936266, 0xF71C44FD, 0xAFDE4A72, 0xB5392784, 0xB7BCCB2B,
+0x754BAEED, 0x8A825FA3, 0x6847501A, 0x19C26A27, 0x2843DCF1, 0x865C8067, 0xDE19E8F3, 0x2AC8CC2E,
+0xFF4904EA, 0x45FF9404, 0xC2E12847, 0x5AA3EEC8, 0x2BC0420E, 0xE2A5DDA7, 0x2C354810, 0xB3547B50,
+0x0F27CF64, 0x8BFCA797, 0x7ECF3E67, 0x72C61626, 0x3C141591, 0x1FECA24C, 0x773ED62E, 0x69499216,
+0xEF20FA69, 0xC41A9A8C, 0x51C81EE9, 0xB1A4E905, 0x9A1B159A, 0x2FDDAAFE, 0xF31DDD13, 0x827AACB3,
+0x976636D9, 0xC9171196, 0x4D8C228E, 0xB54527EF, 0x358AA1B7, 0x8810C401, 0x87895A3C, 0xB47EC300,
+0xC05100F8, 0xD4597922, 0xC64C98E9, 0xD9ED3FF6, 0x72F4A767, 0x4DBE707E, 0x2CC17755, 0x0685C40A,
+0xAA0CC571, 0x5C1FB0BB, 0xE6912B10, 0x9AA80780, 0x26ADDAAB, 0x59F21B0A, 0x090FE93E, 0x7FC485C7,
+0xC9886028, 0x6763EF23, 0x04AB56B0, 0x44239D93, 0x486C7B2C, 0x0A9C73B9, 0x4D78A764, 0x1C51C33B,
+0x193E3F2A, 0xD8A13960, 0x555DFA30, 0x7E0EFBC8, 0x960942ED, 0xE00756AE, 0x6444DA83, 0x2625C7B3,
+0xB779E79B, 0xEB088AA7, 0x7183184A, 0x5C14377D, 0xDEE30417, 0x4ECBD0C2, 0x85BE804E, 0x8F9EF7B0,
+0x6D09B953, 0x0433510E, 0x86589451, 0x6725592E, 0xE3C9F88B, 0xFB75A6CE, 0xC30084A9, 0x0704B518,
+0xB071ED43, 0x2AC44BC4, 0x7EFDCB6F, 0xCF627B06, 0x304CC702, 0x4498EDD6, 0x61E90C37, 0x27A67DB3,
+0x044509A6, 0xCB79DB0B, 0x3983FD2C, 0x5A1D7D8A, 0x4387CE04, 0xC2684450, 0xC15F4356, 0x88F44F02,
+0xD44A09DC, 0x2533FBCA, 0x33B0B17C, 0x6D5472FF, 0xA0072358, 0xA007A061, 0xACBAA627, 0x096A1A35,
+0x9CDCA9AA, 0xBEF025EB, 0x08C7D839, 0x98A117D9, 0xF7777474, 0x4C9AE47E, 0x69F3E323, 0x114A2B25,
+0x1EC68CF4, 0x369D9674, 0xDA226457, 0xCD3C1171, 0xEB67E55F, 0x1E6AF7FC, 0x20D6D85F, 0xC6F81415,
+0xF620AFAA, 0xF00D2B66, 0x2210F6E6, 0x671297E4, 0x63B75846, 0xBC00A992, 0xDE47ED85, 0x8EBFA92F,
+0xDCFE3F6E, 0xE80900EC, 0x68A09953, 0xC8830FD2, 0x7EEA0D19, 0x67A57976, 0xFEF296BD, 0xD8552878,
+0x36F567CF, 0xCD49B260, 0x792E89F4, 0x7D18B0EA, 0xAD583D6E, 0xEB0E93D8, 0x30D2F8AE, 0xA0CE2D13,
+0x33DE013E, 0x0B16E189, 0x09D1EDA4, 0xF312C7EA, 0x092DD044, 0xB07FC8EC, 0xE757DFB6, 0x1ADA01A5,
+0x47C37E22, 0x3EBAB823, 0x37089A4B, 0xDBDCBED0, 0x53345B00, 0xAB3825BD, 0x984C6D21, 0xCE5B9306,
+0x178C8D03, 0x712CC435, 0x2328CACE, 0xF81D3D29, 0x7D7B5CCC, 0xBCA8238E, 0x680D898D, 0xFBA30DE8,
+0x2D02CD06, 0xEF3C88C7, 0xFF235FB8, 0xAE38E9A7, 0xBC62BFC8, 0x7FF16E59, 0x2221E3C1, 0x772DB294,
+0x8FDF9126, 0x20A758B7, 0x37B4C8CA, 0x68417893, 0x4AEE9F93, 0xBBB42F0F, 0xBD1A23F3, 0x8DB5B4E7,
+0xA1D27012, 0x52EF7C85, 0xB43E13E4, 0x82F257E8, 0xC5F954A0, 0x3A359ED1, 0x89F928A4, 0x8045E708,
+0xA54A9780, 0x95A48372, 0x9F7C0FB6, 0xBD26A8E2, 0x18034988, 0x3EFC34D0, 0x365A1CE7, 0x68CDD487,
+0x925D24B0, 0x711F2A9E, 0x555B6B22, 0xD1ECEEBB, 0x189D1304, 0x8FF63612, 0x61D0C2AE, 0xCFD880E7,
+0xCBCC7B91, 0xC7906DA2, 0x786F58D8, 0x3C5F0613, 0xEAB28D8A, 0x333EE3B3, 0x824AA6D3, 0x37216DA9,
+0x90450566, 0xEB7415ED, 0x67B944CA, 0x536D9E34, 0xB2FF0AF0, 0x4225D8B7, 0xA640802B, 0xA451BE99,
+0xE2BC3DFC, 0x6E2B90DA, 0x6D91FE73, 0x98D523DF, 0x7094A0FC, 0x6FBF4CDE, 0x75CD09EB, 0x274CD0A3,
+0x67A42206, 0x05959B93, 0xFFE773DC, 0xCD22920D, 0x7F200DBD, 0x2A51F2FE, 0x29ECA1CF, 0x7933890C,
+0x386C6112, 0x43416ED9, 0x9A9F714A, 0x403DAA7B, 0x78D13BC1, 0xF639E404, 0x66ADAEA6, 0xD2CB7399,
+0x07E2FECD, 0xE3E66A4D, 0xA9BA0B94, 0xEE1FF833, 0x0EB87F00, 0x0EE6CB93, 0x503FA9AC, 0xFB55257E,
+0xAC9F7BA2, 0x35A8D278, 0xC08F4601, 0xF7140A7F, 0x6C25324C, 0xED34D2CE, 0x52FA7846, 0xD42B0A6F,
+0x50CB24A3, 0xAEFB9DED, 0x27C5FC74, 0x7CAA05DC, 0xC1444FAB, 0x0262B994, 0x1F5AC2B1, 0x43AE78A0,
+0x8B9834F1, 0x66F914B6, 0x12B329FC, 0xA45418F7, 0xD34F9921, 0xE993C34E, 0x836780BD, 0x253D4D88,
+0x62DEF1FA, 0xC6F068CF, 0x37B7685C, 0x344BF579, 0xF7543EB4, 0x038BCC06, 0xE644F5C1, 0x04E0D35C,
+0x587780AB, 0x59610AD2, 0x8143BBFB, 0xF9253FBF, 0x9237A412, 0x728FEF2E, 0x9285293F, 0xE2F77C4B,
+0xCFD56D74, 0x59F628FD, 0x8C288849, 0xDF6B392D, 0x999E28FC, 0xB0E4E351, 0x86285050, 0xA43CC297,
+0x2DC95193, 0x4502FDA0, 0xF8F8E3C5, 0x3D1084E3, 0x113F727D, 0x599334E1, 0xDC0C9185, 0x9E4BAAC1,
+0x12776BC7, 0x86040AD9, 0x6DCCBADD, 0x6B78ADF4, 0x083A501A, 0x5513514F, 0xD0E81500, 0x62BD750E,
+0xAD598E5C, 0x1A6C181D, 0x2B11BD1A, 0x9A1CE66C, 0xDB0224D8, 0x6DB0D59C, 0x5B1D2BA8, 0x5B97E962,
+0x1442A9AE, 0xB25152F4, 0x7BCB0DFA, 0x9E7A819C, 0xE64FB7EC, 0x2D595361, 0xF03086B2, 0xF21D5609,
+0x3242BC9C, 0x2A2F214B, 0x583D8684, 0xD60D331D, 0x6E48AAE4, 0x3D8BDCD2, 0xEEDD3A18, 0x1740EC46,
+0xE163D2B6, 0xECC2659C, 0x8C420A45, 0x6ABEC74E, 0xBE396A47, 0x65F43387, 0x37D0F6E9, 0x5A939080,
+0xF0F03E63, 0xD86B0490, 0xAD8724C0, 0xACABA55E, 0x64DFEA7D, 0x6BB09207, 0xA8453F08, 0x7C3BB61C,
+0xBE91DE3A, 0x72BA5E8D, 0xAB4EB4BD, 0x8A4ED6A5, 0xE9D5F645, 0xB1B55C23, 0x942EC4C0, 0xEDDDF6BF,
+0xEDD813E1, 0xB380E62E, 0xAD000615, 0x566AAD43, 0xEEC2EC36, 0xD2E16D62, 0x048C30CB, 0x87736D9E,
+0x17B84C63, 0xE92A2C70, 0x4E97625E, 0x1E69C343, 0x53D4555F, 0xE024F026, 0x0A2087CC, 0x31776B72,
+0x3996C666, 0xD11FD9E2, 0x8EDEEC93, 0xF9C65DBF, 0xE1F1080B, 0x8674BEBB, 0x82A7691B, 0x738A6068,
+0x2A4FF45D, 0xF05918ED, 0x8A8320F1, 0x47383DD4, 0x5BA9F6B3, 0xDEC56C4D, 0x6AD12E81, 0x2E9FF078,
+0x85A79507, 0x7EF062CF, 0x545EA9A8, 0x838D378F, 0x1DBA6078, 0x34FCED33, 0x695B435E, 0x7700ECA4,
+0xE095194D, 0x00C26F89, 0x1DC8BB75, 0xB027C575, 0xBA4F3994, 0x5BF02AFF, 0x1C33B925, 0xBE6B00F6,
+0x2AD1B19C, 0xE0D61FF2, 0x0CDCE55E, 0x843AF970, 0x11093D88, 0xF0076C30, 0x75A05DEC, 0xC659A34D,
+0x57718705, 0xB6006A36, 0x56B8B677, 0x8C9C061F, 0x0150543E, 0x196FC7AC, 0x386DD5BE, 0x0CF47365,
+0x97E7C756, 0x49B1AFD6, 0xB19526D1, 0x8E314EB8, 0x710433BD, 0xB8140597, 0x1F8CE466, 0xFBE6FB6C,
+0x2649F7F6, 0x7A552EDF, 0x53EE6160, 0x99DEAA60, 0x264798E8, 0x4F306F02, 0xF2A1D772, 0x8A59019C,
+0x07ABE819, 0x9DEB907D, 0xCB945796, 0x4BB74AF1, 0x0C552F16, 0x4EC51632, 0xDB8D3871, 0x0D80C0B7,
+0x40EF8967, 0x8CA21EEE, 0x9B88CB33, 0x9E7B6ABC, 0xE9BDF20D, 0xD2757446, 0x4B390984, 0x2A6F1D49,
+0xEB3F0D93, 0xFFECDEB1, 0xB593AEF2, 0xA82B97C5, 0x7FB1CE40, 0x94942574, 0xD5B41F1D, 0x9DAA758D,
+0x91972960, 0xFA795014, 0xAE24264D, 0x116D38A2, 0x4A90FAE6, 0x65948392, 0xD9A15FB9, 0x8C987CA5,
+0x1B64434E, 0xEDE081F7, 0xB9586D7C, 0xD14366F8, 0x249C38CC, 0xE76BCC52, 0xDFB8D0DD, 0xFBDEBF70,
+0xEE27CD1B, 0x8A0D0F8C, 0xCBFA5E45, 0x841C2491, 0xCE7918FC, 0xDA1F3368, 0xA5822A71, 0xDC630DB1,
+0xB07CB392, 0x462130BF, 0xCAFA1890, 0x635BF5F7, 0xD1D67A71, 0x324A1ACA, 0xB5D802B7, 0xBCDBDCBD,
+0x1D08E638, 0x45A44C23, 0xA56B29E3, 0x894E23F5, 0x84D319B7, 0xDFBFD556, 0x8BB8F200, 0x348AFE3C,
+0xECC51A28, 0xBEF73AF0, 0xF21BE5D4, 0x64931578, 0xDA218701, 0xF20F0D5E, 0x03B0F024, 0xE63DFA91,
+0x61CA617B, 0x6318C85E, 0x71BC8CCD, 0x681AD1BF, 0x02F1A58A, 0x01E85E37, 0x7D4FCD78, 0xE8161FAB,
+0x5F66ED55, 0xF3597A19, 0xE350B1DF, 0xA6A728EC, 0x225B547E, 0x64F7980A, 0x16EBA6D5, 0x5F13ED11,
+0x3438A8F1, 0x906BCE68, 0xF5842F2A, 0xDD5F72A9, 0xAA093A35, 0x30774324, 0x74FD9282, 0x07606EF3,
+0x54CD7273, 0x567CD13A, 0x5B0909DC, 0x03149BF2, 0x152474A2, 0x93F86425, 0x5246CDAA, 0xFA585836,
+0x50AD3C7C, 0xDC9CD6A8, 0xC985309F, 0x4A51D448, 0x19C943B0, 0xC0C1CC52, 0xB2CBE81C, 0xF9C09730,
+0xEBE64749, 0xA3C9BE5C, 0x9C9B601F, 0xD14DA0A1, 0xA0E9816D, 0x6CC67A0B, 0x853A57D6, 0xD32A6851,
+0xE2B5BECD, 0xE26728FB, 0x5F8913FF, 0xDECAF8CF, 0x8F1035B0, 0xA1166690, 0x516B4C34, 0x630EF3C6,
+0x407E646A, 0xF2EABB03, 0x7EF93A7B, 0x99F997B4, 0x615A8FF0, 0x077F453A, 0x90EEC700, 0x0131839A,
+0x2FD86383, 0x98092AA8, 0x5F59D796, 0x83C3FD4C, 0x75E7A68F, 0x585C80B7, 0x02FA5BBE, 0xE6F36613,
+0x8FF550E6, 0x940E3F53, 0x24B081DD, 0x8F1FBADE, 0x42D49195, 0xED226FE3, 0xC93AD2F3, 0xA6CA12A8,
+0x482BEE5E, 0x943AFB68, 0x352C5C3E, 0x7053EF76, 0x633C49C8, 0x0462F0EB, 0x9629428A, 0x7461B020,
+0xE3247B08, 0x2582B67A, 0x1BDC919F, 0xE41BCCBD, 0x89F7A3CA, 0xE3093735, 0xC2CCDB19, 0xAD7CC13F,
+0x6A7C8F69, 0xB5259883, 0xDE447EC9, 0xE07DAA22, 0xFD8518B9, 0x02ABC2F3, 0xCE33AFF3, 0xC1C43C26,
+0x442541A0, 0xE26CAA7B, 0x59E1B080, 0xDAF43718, 0xDFC60757, 0xFCFA1709, 0x4F1C0962, 0x8B517E09,
+0xC1BC4458, 0x84D24B44, 0x64B473D2, 0x0070DC3F, 0xA9B65665, 0xE0D2CCF9, 0x83D23629, 0x95268ACD,
+0xDBCD5D92, 0x1078B701, 0xD15CE57C, 0x756A96D6, 0x6C6D13BA, 0x7834A87C, 0x5B255238, 0xD39A3F84,
+0x47D2CECB, 0x8670E868, 0xFC2E8176, 0x33F20419, 0xC48544B2, 0x3A25898D, 0x10D1042E, 0x3528F73C,
+0x1EEB7008, 0xD76163F6, 0x9ABEDEDD, 0x117837F9, 0x0B22D2D7, 0x9264CAC8, 0x974D0AC0, 0x14CA2672,
+0xCB5B4F8B, 0xFE01B9C5, 0x44B08D88, 0x9C230C8E, 0xF4FAB2D7, 0xA6556792, 0xC9975265, 0xCF2E6FF5,
+0xE9D0FC77, 0x3EE1843F, 0x5DB82B7F, 0x67C7D561, 0xBF169373, 0x6614765A, 0x6CFD928B, 0x9E69C01F,
+0x03D5B3E8, 0x25162AF3, 0x66A670AA, 0xCE8DDC8E, 0x3CF8800F, 0xD48CD2AC, 0xE05D77F6, 0xA9AD51A2,
+0xA2763361, 0xBEC2A22A, 0x88E5B605, 0x16B7DB32, 0xD9701E3F, 0xB13618A8, 0x7F2E9F76, 0xAF24435C,
+0x9377BF0B, 0x473D9BBA, 0xB870A7C7, 0x3FB3E107, 0x878BD0DA, 0x32DD1D08, 0x48E0BC83, 0xA915A2CC,
+0x6D806E9F, 0x8061960B, 0xD5D47D67, 0xCDA76139, 0xD3968190, 0x84C5CA68, 0x9B62B2FE, 0x1BCC335C,
+0xC53FD613, 0x610C42A2, 0x5CAD10AA, 0xF91875B5, 0xE1581DE5, 0x4BE3C9D6, 0x704CC8FA, 0x7011E928,
+0xF2B8D332, 0x4D9FC8CB, 0xF984AA6B, 0xCD4218B9, 0x48E9E4E1, 0x5ABC2C6B, 0xA07FB999, 0x73A049DD,
+0x69137C0A, 0xBFA09B18, 0x6B0499BE, 0x5A4E7074, 0x9CDE5819, 0x79F4FF10, 0xBFE830E9, 0x9CA657CC,
+0xD4EB9BE5, 0x672331DA, 0x2D9A7B65, 0x7B57A4A7, 0x8E5DA28D, 0x84D5E876, 0xF08E7A00, 0x02E35B6C,
+0xDD177514, 0xB06DD2C9, 0xADF0793B, 0xC3CE41E1, 0x8916C3A1, 0x58385D16, 0x6D68C7DC, 0x1A5D3608,
+0x57CFA292, 0xFB9C489E, 0x335DCC50, 0x61E5F71C, 0xFEBF39DE, 0x884DAEDB, 0xEC4FD57B, 0x0AD9FCEE,
+0x48AB892D, 0xC8D5BA2A, 0x60AA326F, 0x8CD50044, 0x16D85EDC, 0xD0193631, 0xCF548AD6, 0x22C1E0BB,
+0xC33C4267, 0xF8203163, 0xB1A9D5B3, 0xB6FC5FCC, 0x7E1EFACC, 0xBB29CA10, 0x0B330320, 0x2E24BBFD,
+0xA54008F3, 0xD52A1EAF, 0xF630B8B5, 0xB5909883, 0x6D2CA03A, 0x2EBE0D07, 0xAF1CADD1, 0xA0789920,
+0xCAEEA5AB, 0x3F4D221A, 0x4BF969BA, 0xCEE889A2, 0xF646EE86, 0xE663E88E, 0xA6986428, 0x8D908870,
+0x34F05503, 0x0D7DF200, 0xAD2DCBFE, 0xDA73B161, 0x475888E9, 0x26611969, 0xCB298086, 0x9EC32B17,
+0x74A3E100, 0x55EAF1AE, 0xB16FCA97, 0x2DB23F0D, 0x988DE949, 0x432FA15C, 0x9E3EA0DC, 0x6D444EA3,
+0x82D0F898, 0xE59F3BF9, 0xE574694C, 0xF8C411D5, 0x8C96F27E, 0x15CD962F, 0x8683412D, 0x267F9838,
+0x6F814561, 0x014600D0, 0x01D3A8FC, 0x86F71A84, 0xCCE1031A, 0x7B1E99F5, 0x9F8D0196, 0xA8775197,
+0x61A5FB5F, 0xDFB82065, 0xBF9937F1, 0xE6015406, 0xA5EC2A95, 0x0470C4B7, 0xC8C9BC90, 0xE0E67D82,
+0xB3A95358, 0x339B108F, 0x444427F7, 0x679127EF, 0xBC49B6D7, 0x1CED2592, 0xBEEC2A73, 0xE505FA0D,
+0x29EDB02F, 0xDEB12CFB, 0xE38C52A7, 0x7DDE902F, 0xCE1F29C9, 0x9052D03C, 0xBD7376AF, 0x90C7CD10,
+0x0DF0B996, 0xABBFBD0F, 0x80676540, 0x83004B54, 0x544C7E7A, 0xCF9A1537, 0x71AF3EEF, 0xDE516C9D,
+0x3AF7F507, 0x54C0E2CF, 0x1B5F1263, 0x8F0D8ED6, 0xF42BE504, 0x28531A1E, 0x4377EDED, 0x5223BFA1,
+0xD29470C5, 0xA7130F7F, 0x01F6BA7E, 0xE44806D4, 0x8476C85E, 0x3A55E362, 0x48EC78BD, 0x2D40DFFD,
+0x0B9C3613, 0x8EDA7141, 0x8EEDE441, 0xD5C43007, 0xDF3DCA4D, 0x2F3C9A09, 0xE932D6DB, 0xA971060A,
+0x53CE3E4A, 0x2FF0D9E5, 0x505EDE8F, 0xE8EE22DC, 0x11E2E124, 0x55E064C8, 0x55F2436F, 0x2732014D,
+0xD8880AB4, 0xF6387898, 0x6EF54046, 0x9C0A9E23, 0x1CD89B32, 0x9FBAFE46, 0xF595DB45, 0xE33BE42E,
+0x10FFAE29, 0xDD04C1CE, 0x7244ABD7, 0xAB77A233, 0x3388BF45, 0xDB86A856, 0x6FA6FA48, 0xB13275D1,
+0xB26CD86C, 0x248E6B36, 0x462C2349, 0xDB4582FF, 0x0DBE90AC, 0x7CB23103, 0x3492C619, 0x35A900E6,
+0x5864F70E, 0x6368C2C8, 0x6FE875E0, 0x715FC6FC, 0x46288BEF, 0xFA297C73, 0x95189975, 0xE9AE5467,
+0x8E99502F, 0x335B19D2, 0x0F075297, 0x840AFB74, 0xF13B4D0B, 0x6E2B2212, 0xBDC23B08, 0x1F48AFF0,
+0xC62BA865, 0x8A8AD3AA, 0x3C93DEB6, 0x5C738B30, 0x8BD0239C, 0x0D520B0D, 0x201FB5B6, 0x3663F0A0,
+0xA1E07882, 0xE41FAFB3, 0x82C58817, 0x012BDEA7, 0x5855AD05, 0xB9BEBC5C, 0xBAE32BC4, 0x1F975FCB,
+0xD94F9185, 0x0D35FCB7, 0x44AA89FF, 0x262888A4, 0xEC678293, 0xAF965269, 0x97A1919D, 0x70C0C7A2,
+0xCC6D9D93, 0xBDF9219B, 0x73BA08D3, 0x74B6D191, 0x7D559A4D, 0x53F956BC, 0x782A90AB, 0xD21648A6,
+0x0CADEF6B, 0x458BBBC5, 0x6031BFDE, 0xF0F86459, 0x6EFF479D, 0xB3412F5F, 0xBAC451B0, 0xA6CBD0C5,
+0xAD8A1285, 0xCBEC5DE4, 0x6E76A972, 0xF8116483, 0xE40220C1, 0x93745A74, 0x557BFE3A, 0xCA34716C,
+0xE6243D5E, 0xA7C51E0D, 0x58408427, 0x35F78EF7, 0xC793463D, 0x3D6314B6, 0x1CF6BE96, 0x7849946F,
+0xAF9F0E63, 0x65DD4EA4, 0x13EEA10C, 0xC626F2E8, 0xD372BBC8, 0x32F61316, 0x3C5DF7A2, 0x18095E32,
+0x60DD640B, 0xB9712B41, 0x4203CCDB, 0xA497936C, 0x129CB630, 0xD83F5693, 0xB4F22A01, 0x32D3ED0E,
+0x0BA5B983, 0xE1044697, 0x0783346B, 0xC8F45395, 0xC3211DE4, 0xEF32F4E5, 0x1A1D176B, 0x0AD5ED21,
+0x596F4531, 0xCB17D5E1, 0x7D6C03BC, 0x481DF76E, 0x7807DE65, 0x61953DD8, 0x707E3F70, 0xD76F5E00,
+0xD98250B7, 0xEA1FB2CD, 0xF72104F7, 0x8F1C0468, 0xE5716DD0, 0x5A873483, 0xAFF9B4FC, 0xA234A8E5,
+0x9EFAA48B, 0xED1A6657, 0x11AAD1D2, 0x15F1D920, 0x7825207D, 0xC318C3E0, 0x076480A7, 0x970EBC1D,
+0x1A960072, 0xE20FE4DA, 0x66C5E2D7, 0x338F315B, 0xB7CF37F7, 0xCBCB2A1F, 0xADCA2DC3, 0x7B23ECBF,
+0xEEBC855D, 0xF65DB4C8, 0x7A6EB54E, 0xC97C6590, 0xB338A892, 0x578B412B, 0xCB19F660, 0xD5450F72,
+0x6F3619BF, 0x6EAF22E1, 0x67684512, 0x87AE2A7C, 0xF356780E, 0xE7317307, 0x3BECDCD6, 0xA6BA2D1C,
+0x1816253D, 0x81383451, 0x4AE82283, 0xC8F0E414, 0x922D254F, 0xC417D148, 0xE20D8896, 0x73B91EF9,
+0x3295ABD6, 0xCF061502, 0xE092904B, 0x60BBA7F5, 0x056B7411, 0x8C639850, 0x773C1556, 0xAE1CFF54,
+0xE0F4DF70, 0x30F4E407, 0x205CBE41, 0x27A18454, 0xB17447F2, 0x1AC1A053, 0xABDBDCD0, 0xDB9EE133,
+0x9E00D4D8, 0xA362C873, 0xA145FF07, 0xFF7D6B3C, 0x4A5A21C3, 0x11156237, 0xB7954FCE, 0xD112BC77,
+0xC6D0AFB5, 0x60760F22, 0x2AFC3703, 0xC959A856, 0x106EA485, 0xB0B9E5CA, 0xED30898C, 0x02548F32,
+0x2EB68C9B, 0xB28DC4E3, 0xDFF3A4E4, 0x4D054D2F, 0xC643157B, 0xC643DD7A, 0x2F73D0E2, 0xEE93A530,
+0xEB0F39CA, 0xEF7834E5, 0xC1D1A9A2, 0x25C318A1, 0x65374B79, 0x0D15E2AD, 0xFD9C9DCF, 0x6FC79BAC,
+0xABE9FC98, 0x63D43E42, 0xD9CF5632, 0x4678B21F, 0x46398922, 0xE2129DB5, 0xA2F2E07B, 0xAF23B525,
+0x0C0387AC, 0xE1C9DCCF, 0x74563362, 0xFD423BB2, 0x394C8DE4, 0x07F03FB8, 0xB88FC37F, 0x5C37BCC5,
+0x45460469, 0xBD167F03, 0xC8773749, 0x4C4DB59C, 0x7B89B031, 0xBAE54A05, 0xEA97299C, 0x65D7AAC8,
+0x2D5F0722, 0xEFB3DA52, 0x7C08FA1A, 0x7F93B11D, 0x3E887405, 0x4448A12E, 0x68A1F701, 0xE86DAA98,
+0x14C30C03, 0x6185565E, 0x8749EF93, 0x386E027C, 0x06D8EDE4, 0x5D7E8750, 0x9652ECE2, 0xC649C797,
+0x7889FB2F, 0x78985166, 0x67AF1F02, 0x3D683248, 0x1843021A, 0xD8DCFE89, 0x7A093C3F, 0xFCA54153,
+0xFDEA59F9, 0x6CFBF225, 0x5CEB88CC, 0x88C4CE87, 0xFAE5BC61, 0x80A5B0BB, 0x5DB34A9F, 0xE88372D5,
+0xF7B1E589, 0xFB55A144, 0x537038EF, 0xC211DFA0, 0x55C9ED24, 0x33162013, 0x545BA55B, 0x7784B040,
+0xBB7B23F3, 0x94DEA502, 0xAAA508EF, 0xCC98CBC2, 0x93B69E2F, 0x24E6FF0C, 0x5BCF4D05, 0x3548316A,
+0xC25B857B, 0x5BF57803, 0x7C00D72B, 0x772D021F, 0x2EFFEFA5, 0xCC85A7AC, 0x17D079B5, 0x74A3FA45,
+0xC522D7FC, 0xF27B1F74, 0x0654D6FA, 0x377E0456, 0x728FD297, 0x98DA6648, 0xD9FCB1B1, 0x1140E5B4,
+0xB9207DF6, 0x414066B5, 0xC605EC63, 0x4C2318C5, 0x010539B2, 0x303781C1, 0xF46048C8, 0x84951645,
+0x7B1AB72E, 0xA8D244E7, 0x298ACBD8, 0x345FBFD1, 0x62BE176F, 0x2B1BF6D5, 0x0AE9AF94, 0x6CE4BDAB,
+0x4337171B, 0x504368E1, 0xF4B8CCCB, 0x0887326B, 0x39D64F96, 0x0A5D2FB8, 0x8E92C18D, 0x2F9DA412,
+0x294D15A4, 0xF2CB91D8, 0xD4FC077D, 0x88FA1DFE, 0xD099B27B, 0xA2C6DA6B, 0xC1E8B636, 0x92B3B1F3,
+0xF0A2DCAF, 0x3520F00B, 0xDEDFDA74, 0xF8646D44, 0xC8B2FC81, 0x54C9A111, 0xB9D33B1A, 0x830D91F0,
+0x84BEB781, 0x83017E37, 0x863C7E72, 0xF293CBE6, 0x3D4544A2, 0x12615760, 0xDE760B75, 0x76F2DC20,
+0xB5C1C527, 0xC993EBA6, 0xC52ED04E, 0x955B86D2, 0x8AD37451, 0x072E023B, 0x77F8418D, 0xA6BF2DCA,
+0x6C26BCE1, 0x8BDAE22A, 0xBA63EA8E, 0xD9C63A76, 0x5C3222CE, 0x657FE0C3, 0xBD8C2EB7, 0x565A2478,
+0x82846B81, 0xBB52D0A0, 0xA9123881, 0x853BBDAF, 0xEA7F1C44, 0xF2D965DE, 0xD6D31120, 0x498DA93A,
+0x662D20E4, 0xFDEA7EBB, 0x623F6B65, 0xBAB424FB, 0xAAADA078, 0xB3E90F8A, 0x9B22BC2E, 0xA80506A9,
+0x1BF0F704, 0xF080C4A4, 0x27EE88DF, 0xCB7954AC, 0x379D92D6, 0xC9E04061, 0xC6648FDA, 0x5F60E173,
+0x52C040E0, 0xF2864793, 0xA84AA5CB, 0x957E9A7A, 0xEEC521EB, 0x2C09AC92, 0x7ED73960, 0xEE5F1B86,
+0xD467E04F, 0x367B1DF8, 0x381093F1, 0x734F81B3, 0xC31CB745, 0x53E35528, 0x119B2735, 0xD0D6F47E,
+0x279F5D2C, 0xBADCFE98, 0xD8B66865, 0xB61809AA, 0x99BF8935, 0xCF97D5B1, 0x74455008, 0xD2B9DB07,
+0x51A5C738, 0xFC686F16, 0xB81751FF, 0x6A31DA67, 0x2950E0F9, 0x0E1A3990, 0x05E77151, 0x57A1F7C2,
+0x8457C73C, 0x4697ECC5, 0x255EE7CB, 0xA8DFF4D6, 0x90F797A4, 0x28D91138, 0x6341B65B, 0x3187CCB2,
+0x654D019D, 0xC7533AF3, 0x7CA7FC80, 0xD67756DA, 0xD0EB6941, 0x932181FB, 0x18461301, 0xECE36F2E,
+0xB6D046AE, 0x8AF3922C, 0xFB4D5782, 0xB211000E, 0x22BC024F, 0x1FB8D3B9, 0x4B362DD4, 0xCCCCA92E,
+0x604D87A1, 0xC82B1A46, 0x2E1B0B82, 0xE3B470C2, 0xEA3CACC9, 0x7A5F9F6C, 0x2CAB26DD, 0x0891BD39,
+0x6215AC99, 0x9F78E233, 0xA281573F, 0x90F20661, 0x09AA8C2E, 0xA9BE7E13, 0x7FE0E016, 0x3E15B108,
+0xE019AA4D, 0xC79D86F6, 0xA56CE631, 0x83E4878A, 0xBA3A6D26, 0x6AA9FDF3, 0x0AE58CEF, 0x02072AC8,
+0xF1C59C96, 0x1A156164, 0xBF199F54, 0x4113354C, 0xA021BE32, 0xEC9AB738, 0x7A6A3CD0, 0x661DC739,
+0x528084EF, 0xDFF6D058, 0x2A0C689A, 0x9DCBDC51, 0xC4872AB8, 0xD9B76BF8, 0x26D8A9A9, 0x412F6D2C,
+0x3AB023FB, 0xDFF787AB, 0x9C91FF92, 0x02E9C39B, 0xE2E7C429, 0x31BD0833, 0x4B16FA40, 0x05C1F62B,
+0xEEB50493, 0xABF0B93E, 0xCA75FD59, 0x4F6CE034, 0x4F961BDD, 0xDA12193B, 0x52C1DB05, 0x88CC7E90,
+0x9F173AF7, 0xF569221D, 0x68D1C2E7, 0x35C5886E, 0x812B27DD, 0x44286FAB, 0xD0BA7320, 0x9292A6EA,
+0x6D66A040, 0xF92C40D2, 0xA170D276, 0xB0103AB5, 0x93638466, 0x6D237351, 0x663577A1, 0xC4515E27,
+0x4B5BCCE9, 0xEBA2B23E, 0x73B50F75, 0x1859CCC1, 0xCB2C29E9, 0xB7439A36, 0x7BB5AA92, 0x18F69F06,
+0xB28FD83D, 0x0B05E8CE, 0x84BE43E9, 0xE10A7D9E, 0x18EBFBA1, 0x137DE590, 0xEB583094, 0x6A5ECE23,
+0x108C1342, 0x5F2DDCF2, 0xA3048976, 0x936717DC, 0x505262E9, 0xA17741DC, 0x9F4BA14D, 0xC537A859,
+0x1B630153, 0xD40F5074, 0x0EF7E0B6, 0xF4524CE4, 0xD78A2893, 0xC4ED232B, 0x7D09EE1A, 0x868CBF2F,
+0xCE7D2509, 0xFE11D038, 0xE4F9C9E8, 0xC6BC82AA, 0xB4F4CE51, 0xE4D1486A, 0xF0C52371, 0x57E96A1D,
+0x1055626C, 0xABD63605, 0x09DDCEF3, 0xB1156B76, 0xCBF7A5FB, 0x1E9ECE1C, 0xAF72FFF6, 0x183E2FCD,
+0x84CF6BFB, 0xCF079722, 0xDEB771A4, 0x00ED3CB8, 0x5DCD7ABE, 0x796A726B, 0xDDFEBAD4, 0x287A0175,
+0xB1251254, 0xC9E331E9, 0xF5F9D510, 0x64F3893C, 0xF285A27C, 0x158C9235, 0xC07DAD29, 0x7E95209E,
+0x5D7F32AA, 0x860F77BD, 0x9B629F9F, 0x988DC372, 0x1C54C08A, 0x90AC2E61, 0x995A1755, 0x86A6C885,
+0x85680A2C, 0x46214629, 0xEBF2D3A4, 0xE74C067B, 0x4E7B5093, 0xB262C2DD, 0xBF0DDDA1, 0x0CDA76FB,
+0xFAF093F7, 0x009855EE, 0x2C6F9176, 0x1D7DE000, 0x3FAD559F, 0xFDC9401E, 0x2FC28804, 0xD8C6F27E,
+0x1C2ADD23, 0x61AB9345, 0xDE5E8C13, 0xEF801106, 0x9C38C374, 0x69955B91, 0xBDB22A52, 0x18366C9A,
+0x864E3A5A, 0x641757B9, 0x48AF921D, 0x4BB0D7CE, 0xEDB4EEEF, 0xA5304777, 0x337E1E23, 0x93609A27,
+0xA3069C34, 0x392C852C, 0xEF63CB19, 0xAF9A4D42, 0xF7E30EA9, 0xD360E65D, 0xE6164311, 0x20E17D7B,
+0x95F8ACEA, 0xEAD62CA2, 0x9153B035, 0xD1AFAA3A, 0x4402307E, 0x390A5683, 0xBE970F6D, 0x1EC34117,
+0xA874F452, 0x07ACD80E, 0xC5548C07, 0xE83C95C7, 0x5AE6A252, 0x08D49D51, 0x356B1339, 0x035B505A,
+0x12AF595A, 0xBC8D141D, 0x75A02302, 0x13E73ECE, 0x946BF769, 0xF1BBD331, 0x452187BB, 0x9DCB8F15,
+0xC922309B, 0xC5CF22BC, 0x37936534, 0xDEAFE3BA, 0x76D989DC, 0x81C2F900, 0xE3326243, 0x0B671097,
+0x86703EEF, 0x8B551E5A, 0x207CC6D6, 0x252ADE6C, 0x9323612D, 0xC8EEA328, 0xF73D1080, 0xFD9ECA27,
+0x4A1D94D4, 0x8A032C91, 0x170FC288, 0x2168E93D, 0x799E9B33, 0xC5D40448, 0xE14414F1, 0x2CEAA69A,
+0xEF377802, 0xF1FADD45, 0xCEF2E94C, 0xDE324A4A, 0x12D21C85, 0x634D2E3F, 0x7ED77CDE, 0x2F4F2994,
+0x551B7F04, 0x99D4547B, 0xB77AD3E1, 0x35288CEB, 0xBE17E96E, 0xB2C7402B, 0x0BD57D76, 0x113CE4C9,
+0x1CCB5C7D, 0xE102B849, 0x5B60A28A, 0x197EE5FD, 0x232014EB, 0x612DC2AB, 0xCE9BF0C3, 0xC67C8290,
+0x55156ECA, 0x8DC5C6C8, 0xCF04654E, 0x54149807, 0x4CA15887, 0x75261E7E, 0x2F91712F, 0xB7BCCB00,
+0xE7C0844F, 0x92DFCEFF, 0xF1EE0649, 0xFBA166AB, 0xB516193D, 0x59F78E4E, 0xEB2EDFEE, 0x30E60877,
+0x4C3587DB, 0xDEFCDEFE, 0xFA518021, 0xA28048A9, 0x67BF12EB, 0x809A17E9, 0x811D15A9, 0x42330CCF,
+0xBDFC234C, 0x13BE5BBE, 0x43601D42, 0x8D9188B3, 0xB290FE12, 0xC305A19F, 0x14D1473C, 0xFAE824FA,
+0x9D4B8550, 0xFD48ADE4, 0x4551FA67, 0x7DCFD5FC, 0xD50BEAED, 0x26E463A6, 0x10F435DB, 0x08B1248A,
+0x0B93A27B, 0xC0F763B0, 0x8D3426BE, 0x2D3BD5C9, 0x53A7AF3F, 0x7FEFF26E, 0xCB66B021, 0x9A118038,
+0x5CBC1F50, 0x260D312B, 0x54C3C472, 0x5466E57D, 0xAB0A1E09, 0xD186E2FF, 0x4DF70664, 0x0ADDEA44,
+0xB29C9CF0, 0x49DDF6BA, 0x090A0554, 0x3DEEC576, 0x030C744D, 0xC608436E, 0xDA92029D, 0x9A6D3529,
+0xC77D82C1, 0x3AC83BA5, 0x330931AA, 0xCA11E69D, 0x8C172753, 0x4772E2C9, 0x51E414E8, 0xF1AB0DA0,
+0x49E362B3, 0x63D20D55, 0xBF6A1F0C, 0x62CAE575, 0x8CE999B5, 0x6DD3118D, 0xAF3EEADB, 0x692ECF4B,
+0x9A824F8D, 0xBFD1A615, 0x31CB4303, 0xB9F91B30, 0xBBFF64F6, 0x1B4CFDC6, 0xC36D71E0, 0xFEE22E8F,
+0x8AA98AD7, 0xDA17AFCD, 0x6569F61A, 0xB02C5405, 0x0464C25C, 0x118CB69D, 0x826AE05D, 0x6678742A,
+0x7E6625D7, 0xC352EED7, 0x06888091, 0x44A196F2, 0xBAEB3E3B, 0x9AAC362D, 0xB54C9D2E, 0xF840F568,
+0xD38ACAFC, 0x62E899BA, 0x4B7E9E48, 0x3B5DC94A, 0xD0F70846, 0x98B8AD0A, 0x13F42CC1, 0x0F4D806E,
+0x12634EE6, 0xBCBE0C27, 0xF667F936, 0x4A12A991, 0x22AEE891, 0x2542863D, 0xBD7E2303, 0x23766B08,
+0xD08DCB9A, 0xE6C76671, 0xEE8FB26F, 0x18C09139, 0x51D2274D, 0x5577194C, 0x0488953E, 0xA372B917,
+0xEA383B58, 0xA23AB567, 0xF07C851F, 0x7D90A797, 0x4BDB0E8B, 0xDAD1FA1C, 0x594B2F25, 0xE49D161B,
+0x19A63816, 0xE501FEB8, 0xA0DE9BCD, 0xA77C094D, 0xFCCE7EEA, 0xD8C431A2, 0x53C12D30, 0x9BBB3914,
+0xBE9D3942, 0x0C1339B6, 0x7188997A, 0x429A80FA, 0x2AB7E888, 0xE7E35A98, 0xBFA8F4E9, 0xB59E9365,
+0x9DB0613F, 0xA75F7B4F, 0x3880507A, 0x16B7052C, 0xC07E464D, 0xE06E951F, 0x0061CD03, 0xDD2A3FD5,
+0x0F024843, 0x4C118574, 0xB67A01CF, 0xBD612BA8, 0xE25CAF73, 0xEEB5511B, 0x69DBAC81, 0x457053EB,
+0xAE761CD4, 0xBA117EAC, 0xB49EA260, 0xB480CA36, 0xCAEAA378, 0x2662BD80, 0x640FE50A, 0x23922A42,
+0x12DD1C0F, 0x89539C47, 0xA5CD8B12, 0xCFD3BF0C, 0x0C6B582C, 0x66CB79FC, 0xF66D6E42, 0x8751797B,
+0x7BB7738F, 0x16FB9AE3, 0x0751FC32, 0x4F0667C3, 0xB497E0B5, 0x70D47DB1, 0x04D58BEB, 0x06DBA107,
+0x4512A7D5, 0x7E85A67B, 0xC6C6EABA, 0x5EC1D180, 0x32029941, 0xF542EECB, 0x03322B08, 0x4425CA3F,
+0xA63F00CD, 0x8155F84B, 0x9BCDB43B, 0x50A6075B, 0x428C81C4, 0x4ACA1A60, 0x312D8BEA, 0x9EED4495,
+0xA987C59A, 0x619F406D, 0x8E8E4549, 0x051483E4, 0xB77ECAD8, 0x2449F012, 0x848E3125, 0x9FCBE306,
+0x6CD65BA4, 0x7DCAA6D0, 0x4B917C72, 0x24949A85, 0xD05E4C27, 0x42EFE9CE, 0x8BC9C9D8, 0x60447ABE,
+0x76A7CD17, 0x0718C8D3, 0xBCEB2B22, 0x01D492F2, 0xFC443601, 0x4C52F68C, 0x64B90929, 0xBE9BEDE4,
+0xA58D9B10, 0x67884D4C, 0xEAB6E090, 0x8AE25178, 0x04EE5952, 0x38C2E09F, 0xB80FF06D, 0xFA8D1AC9,
+0xF18FD49C, 0x27EA1DFE, 0xF719A5E7, 0xA996580C, 0x2421C03A, 0x692B130B, 0xC20B2D7C, 0x8C25055D,
+0xF330C3A4, 0xF62CA692, 0x25B3824E, 0x6405924B, 0x07AAD5F8, 0x70BC5C1F, 0x6BBFA88F, 0x94A4353D,
+0x4B0E8A43, 0x13C4D8C6, 0x4CD115E5, 0xC32BF25C, 0xCE173564, 0x2B013336, 0x323D8BA3, 0xD75DDC08,
+0x0E29EF6D, 0xBF77C55F, 0x3D96338C, 0x0C432B53, 0x260236A6, 0x7D55F382, 0x26711D25, 0xC642FA9B,
+0x09079642, 0x11B7B2D7, 0x342421F8, 0x059194AB, 0xDBC9AD75, 0x8693F977, 0x1395DB57, 0xDEABFD4B,
+0xC2FE8E05, 0x20CEDF84, 0xDA7219D4, 0xE41D9B17, 0xEAAC586C, 0x7263E0DF, 0xD4A582E5, 0x09FD68D0,
+0x3A955725, 0xD0E76C79, 0x0E434D78, 0x9946EF46, 0x0AAA0E8C, 0xDEA725D0, 0x1245B67D, 0xFB8AA0E6,
+0xD078276A, 0x0CD02822, 0x21F3B278, 0x5427583C, 0x7344EE82, 0x471C6798, 0xDA0C2B60, 0x3E88868D,
+0x386D09E6, 0xBBE18A73, 0x6FDA784D, 0xDB2DB845, 0x5D68D37E, 0xC9E0D5B6, 0x3636609A, 0x1014A874,
+0xBE84D285, 0x9D5DE353, 0x3E9D0220, 0xD1486542, 0x43190F93, 0x4C52FBE3, 0x20B2B160, 0xE6F2CEF4,
+0x1D965DDD, 0x915C8487, 0xA422EB8A, 0xB7CB8B28, 0xF1772A3F, 0xA491D7A7, 0xA58A3164, 0x50144DC8,
+0x9B7BD399, 0x99499D75, 0x82CFD7D4, 0xBF998880, 0x0B6BD3B8, 0x31AB2801, 0x88588453, 0x814039BA,
+0x4052CE58, 0x7B206915, 0x935FD27B, 0x596D0FFA, 0xB42C783D, 0xFCFDF82A, 0x44323157, 0xA481B561,
+0x82D9C331, 0x88795B1A, 0x52DC1C46, 0x50E18F14, 0x765B05DB, 0x87B71124, 0x0F92760E, 0xD84FD688,
+0x720F350F, 0xA826A768, 0x410BD606, 0x926B7444, 0xF6B35E0C, 0x38827D8F, 0x7CA42D08, 0x0627BB34,
+0x9CB56090, 0x397AD15A, 0xA09FBAC9, 0x329A444E, 0x358F1C25, 0xAD68E595, 0x2831B81F, 0x3F187C2A,
+0xE8236A77, 0xA8178CDC, 0xDCA50512, 0xE5E2CC7B, 0x1BBC190F, 0xB2FA63D1, 0x04B4843A, 0x9820390B,
+0x7D876B1B, 0x4BAA8E02, 0xB0729B6E, 0x579FDC55, 0x11D72892, 0xD0713773, 0x6258A613, 0xA06512F9,
+0x9DFD9B61, 0x1BDD85AF, 0x72662303, 0xED0CE132, 0x7F2AE821, 0x7F34B131, 0x906AEC1C, 0x5DB05071,
+0x6C600596, 0xE68332DD, 0x74D359E2, 0x3765CABF, 0x7C9D6AE0, 0xDB34E55D, 0x3E9CCC5C, 0xE0D64EAB,
+0x6C99F22B, 0x7BF71127, 0x8C94CEE5, 0x5E9D2F94, 0xC9B6E763, 0x32353D5B, 0x44DDD0CC, 0xC12347ED,
+0xC95D1C5A, 0x0BBBA29F, 0x3B3AE013, 0x13BB5FC9, 0x77B21C20, 0x9AC7DB4A, 0x0ADB2137, 0x877996C3,
+0xB1D0B506, 0xF1A177B2, 0xD2DC2026, 0x69CE0552, 0xC956AA93, 0xFF9FC3A4, 0x78206024, 0x22653D88,
+0xFFFD0F44, 0x80341FB6, 0x003C3E9A, 0x1899C150, 0x61316623, 0x8ECB5C8B, 0xD99F15BC, 0x9DDF64E8,
+0xD8E2E56D, 0x6444ED1B, 0xCFDA83AD, 0x20F4212D, 0x5C2020E7, 0xCAA5BCB0, 0xF1282D53, 0xA3948855,
+0xC7DB9D27, 0x634BE86C, 0xEDED875F, 0xDEB19CC7, 0x9B8EB45F, 0x61BCEFD0, 0xEA3A422F, 0x7C387B0A,
+0xF285DD16, 0x677457C0, 0x5B20FC71, 0xBF39CBB4, 0xCDBD43F1, 0x163FA749, 0x19635EE2, 0x74C13D8B,
+0xD5B5122F, 0xEB78A65E, 0xBC6D2C63, 0xF5312EA0, 0x459597AE, 0xEFF606AD, 0xBE2541CD, 0x8B485786,
+0xF096ABE6, 0xA018F718, 0x7DC8EB97, 0x8DF87CD0, 0xDD57A453, 0x13B327A3, 0x0A26F064, 0x95BBF130,
+0xBA32CAA9, 0x44575EDB, 0x4B5E20D7, 0xF3F54EED, 0xB5A33F3B, 0xBD66214A, 0xD376A298, 0xCDD9612A,
+0xEEE81843, 0x303735A4, 0x196CD919, 0x993DA9A6, 0x1EE8B1AB, 0xBCD33313, 0xB0176308, 0x8F23F919,
+0xAD614866, 0xE3430D48, 0x01049615, 0xF56A78A7, 0x760BFB90, 0xBC2CAF35, 0x02661841, 0x5EDB2A21,
+0x7EC463BF, 0xFE62511B, 0xAEE58806, 0x210757EE, 0x131A6BFC, 0x0B55EB40, 0x5AA83B3D, 0xD2199AF0,
+0xA8A53073, 0x8D9805EE, 0x8875D3FE, 0x75A84978, 0x05494D57, 0x93E348C4, 0x20EEEA14, 0x411BD21F,
+0x6AC989D4, 0x71033233, 0x7B6DB1D9, 0x31E22CDF, 0xBFC52995, 0xB4EE1EC5, 0x36EAF1C6, 0xA1544137,
+0x017D822B, 0xC4786634, 0x66A2EF64, 0x46486A57, 0x2069A4EC, 0xD79B40DF, 0x28374836, 0x451A30BD,
+0x77A32770, 0x0767B583, 0xA33BA849, 0xAF03F972, 0xCE41CF1A, 0x156AC806, 0xE051B38B, 0xF083D6CC,
+0xD1ACCF16, 0x422E0D6D, 0xC02DB943, 0x85B7D01F, 0x191B4ECE, 0x5CBC289F, 0x0E96D416, 0x676CA878,
+0x4972B7D5, 0x258A24BD, 0x4455D73C, 0x38BC88BB, 0x093FDE80, 0x9FAED363, 0x0FB31457, 0x5F21E4AB,
+0x8A4130F7, 0x6D210533, 0x8DD49050, 0xFC2690D7, 0x2EF3D46B, 0x6F589286, 0x5017CDAF, 0xC8638B08,
+0xE35AB496, 0x7B038DDC, 0xCD205D9F, 0x30F195C7, 0x741AC82F, 0x07CE1C7E, 0x4D46B07D, 0x1F9175B4,
+0xBEE9D651, 0x50F1636E, 0xDCDD37B2, 0xA7DCD513, 0xE0811C14, 0x5DE7C2CE, 0xAB2B6892, 0x7542DFEB,
+0x00301E12, 0xF9488F11, 0x74CC6271, 0x27F4028F, 0x5DF2C19C, 0xC48EA1B8, 0x0E889C74, 0xEF048882,
+0xA6FF799D, 0xC00DEEC5, 0x5797CE6D, 0x62C37C00, 0x481D8BCD, 0x378505E0, 0xF75712C4, 0x3461018C,
+0x456FF446, 0x951F66DE, 0x97D2B946, 0x8E27F26F, 0xD52F9B09, 0x666A1568, 0x8ADCE910, 0x9DB23545,
+0x4525AF2D, 0x69E19EF0, 0x949FFAD2, 0xED9FE4C4, 0xF5C0D1E5, 0x83946D4E, 0xF7041A78, 0x5961CEAA,
+0xADF68CA6, 0x438514E5, 0xFF1F6995, 0x46CAD0B1, 0x9C495209, 0x0E6BD9B1, 0x0D7B64AC, 0x5366F738,
+0xEEBC75F1, 0x9EB3B403, 0x8D887AA1, 0xB557FE91, 0x4123F145, 0x7B46ACB8, 0xBA1CBE8B, 0xC878533E,
+0xA41CCE93, 0x4C0347E0, 0x88B4986F, 0x71F1E501, 0x711B5C3F, 0x8AAC2D3E, 0x7E9D7305, 0x6C73AD8F,
+0x58000DBC, 0x1FEDC963, 0xE8A6265E, 0x061EE996, 0x9316E029, 0x87830C08, 0x41411A0E, 0xB4BC2FB0,
+0x0408EBA1, 0x17371739, 0x04E7DA57, 0x32911D36, 0xDB7229D3, 0x689BF087, 0x9599C4CF, 0xB9CAB876,
+0x79A103AB, 0x0EA5C521, 0x91189B28, 0x742B366B, 0x3FA5B74D, 0x5E73CB57, 0x3C39B9D8, 0x3455FFC7,
+0x4F1EBCA6, 0x2FBED350, 0xB2C8236C, 0x7AF33FFA, 0xE36297DE, 0x4093062D, 0xE7A57FC5, 0x61570497,
+0x694B0176, 0xE8CB60F3, 0x331CA60D, 0x8DF3FE16, 0x0D8B14AC, 0xB3720C70, 0xD146867A, 0x6DA90646,
+0xFD11DC53, 0x2312F44E, 0x4CFB98B9, 0x0D7E20DE, 0xA0FD4731, 0xE9D3DC7F, 0x25559CEE, 0x8DD2F969,
+0xB0A107EB, 0xE1E6CC28, 0x38675B80, 0x35980E6B, 0x50A7B398, 0x130512C8, 0x63BA9DE3, 0xE4305478,
+0x6049316B, 0x84828CC6, 0x3FEC2B40, 0xF470626F, 0x78DE24A1, 0xEE8F00F4, 0x46EC8519, 0x22CA103B,
+0x5661BA3F, 0x7F2AAD8A, 0x144FD42B, 0x99328821, 0x03AED743, 0x81932576, 0x516313C6, 0x604367CB,
+0x6BB5F91D, 0x74B69D68, 0x7D5977F7, 0x25A54573, 0x8CB872C6, 0x87A0ED2C, 0x4654BDB1, 0x7FE7A522,
+0x5245FB57, 0x630F8D0B, 0x5F938553, 0xC9363CF7, 0x79CF9D91, 0xD6E1FE14, 0xAA2A4DA8, 0x7954106E,
+0xFAA7B921, 0xDE840293, 0x1470D60A, 0xA4FBBE7F, 0x334E8943, 0x5B1D87A6, 0x84477363, 0x86F5A024,
+0xA589DC1A, 0x92D44FB4, 0x14A2491A, 0x75A4EDF1, 0x9B49F26A, 0xB6FCD416, 0x59DF2E5C, 0x521DABCB,
+0xB1413F2B, 0x9867F016, 0x9F219937, 0x3F7DA527, 0x9190FECA, 0xD4CFAB96, 0x05C232DE, 0xA6DC5573,
+0x82199645, 0x15B2AF32, 0x0DD4CA45, 0xDDB2FAA4, 0x7612CA5E, 0x446C5900, 0xD5C54E2B, 0xD63DB3A3,
+0xDA37A059, 0xF39B307A, 0xFF69295A, 0x94204880, 0x9C4C55EC, 0x72786E19, 0xBDEF71D5, 0x226EE464,
+0xFF6510FC, 0x165AC3BF, 0x306A9375, 0xDDB815C0, 0x28A4348A, 0x25B5908B, 0xCEE45A2B, 0xB57622D4,
+0xEE3AEAA0, 0xF1E141AD, 0xC8B1B941, 0xFF28EBA6, 0xC47AFAA4, 0xE09D59AA, 0x70E655C8, 0x2AEC0B9E,
+0xC5C63278, 0xDF0AE9F3, 0x75B40507, 0xB40B2DEE, 0x51753DEF, 0x64F2864C, 0x5C8D54DD, 0x03BDF108,
+0x4941F5C4, 0xF4DD49CE, 0x7A13FB62, 0xC337655C, 0xB4B1EA3C, 0x08A88880, 0x039E14DC, 0x9CBD5FC1,
+0x7B0F073E, 0xBB773BE2, 0xB1E711E0, 0xE954724B, 0xF2321689, 0x3BAF6573, 0xFACF72C9, 0x3AA16AA7,
+0x1CEEE3BA, 0x40648E02, 0xD1AC08E3, 0xB4A1E630, 0xFE506A1A, 0x20805C6E, 0x5C26A335, 0x84B7425E,
+0x04F2CDF4, 0x7B5F51A6, 0x1069C406, 0xD41A1ACD, 0x322DBDE2, 0x1EBC735B, 0xF9BA3CD1, 0xAEB293F0,
+0x6C72DE97, 0xA9B1904E, 0x2E76B61B, 0xABDF7E82, 0x778EA43C, 0x9CF9FA31, 0xD9E50AEC, 0x5D66E667,
+0x350D59B3, 0xD388DBB0, 0xC04C3A64, 0x888F742B, 0x168D8AED, 0xDE38994B, 0xABB5E842, 0xB7AADD37,
+0x45FE0BCB, 0x33C4073B, 0x6872F0D1, 0x293B6E5F, 0x117805A6, 0x8E2BE9ED, 0x4A7408AA, 0x7694C122,
+0x47131BA0, 0x7103FB53, 0xDBA54586, 0x6B3739B4, 0x5785CE0A, 0xC2C4BC36, 0xA5DD0AEE, 0xCE1FB8C8,
+0xED406D4C, 0x87FB13FC, 0x99E4613D, 0x58743DFC, 0xF35CF7C5, 0x08EAFDD4, 0x8859978A, 0x4835FFDA,
+0xE8D00FCE, 0x3012833A, 0x0B6FE733, 0x9BF5DFE5, 0x008E02EA, 0xFBE6E9FE, 0xF9FA5945, 0x481629F1,
+0x90BE20F4, 0x148BC467, 0xE12EBBD8, 0xB3D6A60A, 0xBBE6B942, 0x9C0B7F37, 0x168E4E19, 0x4B148669,
+0xB5CE76DA, 0xC7B93633, 0x674C1EA3, 0x64D424B7, 0x477B54CE, 0x2B628341, 0x410B5E30, 0x4B10F88A,
+0xB1B9ABFE, 0x45FBB97E, 0xE2ED304A, 0x63DC56AE, 0x2E3383BE, 0x2D9FDF1B, 0x20CA1E9F, 0x35A160A3,
+0x3D8A619B, 0x00180394, 0x86C2268C, 0xF08E99E4, 0x1CC43BDA, 0x3649763D, 0x6795E8DF, 0x18EBCBA9,
+0xECEBF1C2, 0x566D6863, 0x44FEDFAE, 0xF3315F91, 0x1F97A9EC, 0xB32B9A80, 0x7C9C77DC, 0xA6706E6E,
+0xF4F60CE5, 0xCE007426, 0x691E5BC3, 0x3605FE3B, 0x4C597FBB, 0x1061D964, 0x7999C01C, 0xF6236619,
+0x8287EC72, 0xC8D6455D, 0x038C2614, 0x10C70451, 0x1E6B6A48, 0x413394C4, 0x9CDE203B, 0x9B287813,
+0xA308D1DF, 0x7BD97196, 0x1B2FDA9B, 0xEEB9E12B, 0x40CC1585, 0xDC55C3A0, 0x6029157B, 0x894B2B6D,
+0xC8CEA8B5, 0x4220D5E3, 0x6D684A16, 0x3F576C6C, 0xBC46DCB5, 0xCA94B202, 0x7922C5E1, 0x90E68C58,
+0xFB318AFC, 0x9CA8FB41, 0xE08C4F28, 0xC8DD12FC, 0x31FA3B4C, 0x0CCE2227, 0xD6D90D34, 0xB606B3A3,
+0x4C255EA5, 0x923719B7, 0x66ACD230, 0x5294E6BC, 0x211F762E, 0xB47FB894, 0x1FB69BDE, 0xC81B8CB6,
+0xF402FCA5, 0xEA3449C4, 0xFB8678DD, 0x65FBB78E, 0x25C46F05, 0x1D8489C3, 0x84961D68, 0x8F3078CF,
+0x5048E098, 0xF3DF3894, 0x499C2D16, 0x2F195419, 0x6077F591, 0xBD77C52E, 0xC2F9B63D, 0xB0977D7F,
+0xFB09EE48, 0x28CB3366, 0xBF341D64, 0x61608E31, 0x525B208C, 0xE1EB0E3B, 0x40A61D57, 0x1FB22998,
+0x25339FD1, 0xE647F031, 0x57231168, 0x0BE58538, 0x4189F5AA, 0x128E3DF4, 0x7CCD8FB5, 0xE236992C,
+0xE607091D, 0xCFD3E193, 0xB00249CB, 0x98838D19, 0x59B8C7F7, 0x7545037B, 0xF070B5CA, 0x6964DD51,
+0x7A631F9B, 0xB1D406DE, 0x8C9AED9D, 0xCF82338E, 0x2E3FEEFC, 0xF804AF3F, 0x4BC4C3C4, 0x01CDBAC1,
+0x76D61BFD, 0x43113762, 0xE2AC9B5D, 0x8C23F4D3, 0xF7191457, 0x267B6E3D, 0x2B7DC1AA, 0x4D3190ED,
+0x0DC94E66, 0x9145A24C, 0x0D5AF72B, 0xE3E0E379, 0x0C50CD00, 0xB765362E, 0xC75643AA, 0x31FE40CF,
+0xDDBEE882, 0xC479A5B4, 0xBD041A89, 0x3BAE54A8, 0xF4FC1191, 0xC408C0D5, 0xDF3874D8, 0xF31C4289,
+0x58253D34, 0xEA10234D, 0x7E5B7101, 0x7B13D0A5, 0xBF372FA0, 0x81D11627, 0xC426FBE4, 0x19362853,
+0x0F6D6ED7, 0x59C1B4F0, 0x8C107C95, 0xAFA616FB, 0x5BB68C90, 0xB29930EA, 0x57F1AF36, 0x8B0F66CB,
+0xEF5A4711, 0x04E1A98F, 0x2B65C4D9, 0x3DBE6895, 0xE68863C8, 0x1656177F, 0x4571DD83, 0x3C8C61B0,
+0xBB6D4D15, 0xE002E7F7, 0x419A5C8B, 0xFC469773, 0xCA95D35E, 0x38DAF167, 0x2056BE2C, 0xC3624820,
+0xE205BAEA, 0x849E997B, 0x7FE0F146, 0x736C31FF, 0xF584E3A2, 0xBCC06819, 0x91E7CD36, 0x78DC7D8D,
+0xB8F16EFC, 0xF335A625, 0x5C69384C, 0xBC2A2C1C, 0x529E181C, 0xBF8068A2, 0xC2CE1349, 0xF4F95B0F,
+0x2DFA1888, 0x924E2F46, 0xC0EF6C77, 0xE3653935, 0x411F5A99, 0xFB449E13, 0xFC41887C, 0x95E98235,
+0x1EF50EC8, 0x1B88164C, 0xE3EC302A, 0x1BADAEA3, 0xA1C47D54, 0x40EB7F6B, 0xF4254076, 0xE6442D06,
+0x9F2E6311, 0xC4D524FA, 0x87B56BB7, 0x33686B78, 0xF6EE3112, 0x9BBFE6BC, 0xE61DE256, 0x6C1276E1,
+0xD54B1937, 0x95662A8E, 0x7A4D0484, 0xE620EC37, 0x3599FC8A, 0x1B9AD56A, 0x1BBEB6DE, 0xC324817D,
+0xC5090DFB, 0x49B7400E, 0xD954D28B, 0x23F71CCF, 0x58C8D410, 0xB72FFC35, 0x9648CFF7, 0xE0AEEC24,
+0x274965BC, 0x48E3D11F, 0xA6B31485, 0xF03FB19E, 0xE8CB5D96, 0xEC71909A, 0x5C34DB9A, 0xC922B4FE,
+0x2D8B389B, 0xAEE531C3, 0xA8159D94, 0x5E81E698, 0x1C2C18DB, 0x29BC33A2, 0x72142D5C, 0x7E4D9B4A,
+0xA2E7A9BD, 0x9E432666, 0x3C194038, 0xD045ACF4, 0xDB8F91E8, 0x07AD1857, 0xE6B68BC7, 0xA8234731,
+0x7B7DC32E, 0x74A1F73F, 0x4C45EDBD, 0x65249F49, 0xB58EA40B, 0x40AC72CB, 0x7127BE00, 0x2A5B59C1,
+0xD7B4D7D8, 0x487E9EDB, 0x68E6B2F8, 0x1F52C963, 0x98CB77BD, 0x507D436B, 0xC49D69A5, 0x828A0B35,
+0x174D78B3, 0x2D0F7493, 0xB7DFBC68, 0x2C1B5A3F, 0x9DC7F245, 0x3D8C6510, 0xBEC23F9D, 0x28781772,
+0x061E8345, 0xAFD115CB, 0x52B7CD6D, 0xBE581DCD, 0x0E04745E, 0x15CDB2A7, 0x7AA3FC5B, 0x6D7FD51D,
+0xFAFAF459, 0x20366E02, 0x2A1B3A66, 0x73B335AB, 0x26DDD2F9, 0x1B5FB2A9, 0x6659CA68, 0x81973312,
+0x6162FFB7, 0x49302BF5, 0x9B0C23B9, 0xE0202203, 0xE09F210C, 0x93875C88, 0x098131AF, 0x64E671B3,
+0x87E896E4, 0x41951FB5, 0x3E68EC68, 0xE774DD4B, 0xFD6B8094, 0x45BC2AAB, 0x25A4F53C, 0xD268758F,
+0x48BA56D7, 0x4B56CBCA, 0x7934066D, 0x24376CC1, 0xDDBAC1FB, 0xF209854E, 0x429A7F5A, 0x36D1655C,
+0xB9F09155, 0x404B3CEF, 0x589FB5C3, 0x778D963D, 0x803BFCCC, 0xF915296F, 0x5CEFA412, 0x06663CBB,
+0xCA23FA9E, 0x6339B6A5, 0x2823DB8C, 0xDC974160, 0x45A33FB8, 0x7A3B9BF7, 0x017AED2B, 0xFA15A7F1,
+0x2D0B30A8, 0x08938698, 0xCCE76A64, 0x197E91A0, 0x5539FB3F, 0x8E1349FE, 0xFF818C8C, 0xE385A53B,
+0x19362269, 0x2E3B887B, 0x4D7AA675, 0x36E733FE, 0x9C1D4273, 0xDDFD5729, 0x861A22A0, 0xD27965F6,
+0x6D402930, 0x060D2B6C, 0xE5E79B5C, 0xCB518AF7, 0xA329AF4A, 0x4E891DAD, 0x74E48BF5, 0xB00C06FD,
+0x7982054E, 0xE92DEA0D, 0x700CBD6D, 0xC9153418, 0x4380AFB8, 0x9B673348, 0xE73CE76B, 0x83987BE6,
+0xFFC318D5, 0xE1087850, 0xBE1E6267, 0xC6862487, 0xE3142554, 0xBBEADC69, 0xF41BD83C, 0x52C31147,
+0x45E8FEBD, 0xD01F44F3, 0xC55DD381, 0x4D27F631, 0x1D812FCF, 0x4B2EE5B4, 0xEB9062E2, 0xCABF55BB,
+0x01C15984, 0x8B4BAAD8, 0x63A20298, 0x1FA74348, 0xAF17BF9D, 0x8AC939D7, 0x52A1E12D, 0xE9659B11,
+0x61475AD0, 0xB176F3F6, 0x0559AB54, 0x0E220E95, 0x261ECC8C, 0x1B21041C, 0x5AA1A47D, 0x7F73F5D8,
+0x85DE0D7E, 0x2CDB5BCC, 0x5A555890, 0xB15D7E12, 0x71DBE55C, 0x7A4C0E70, 0x83FF5C9F, 0x63BCEE81,
+0x833C3CBE, 0xAD0B79FD, 0x586F3F68, 0xC79FE836, 0x61A453BE, 0x2FB720A6, 0x4EE3415E, 0xBE6BC803,
+0x59D68ADB, 0x9B22A4A4, 0xEE0A42DC, 0xDA0447BA, 0x3A44F745, 0xB4D95B6A, 0xB7F5CF46, 0x4513E524,
+0xB1CF227C, 0x75848CC6, 0xAAEBE7A2, 0x6E9EA949, 0x40195124, 0x9378DAF8, 0xCCEA8884, 0x8A75FF5D,
+0x493B51CC, 0xF0915AA3, 0x61C7B5E3, 0xB53C109F, 0x67F6FF60, 0xF2A2379E, 0x4ADAE5AD, 0xDF756FBA,
+0x04CA82BF, 0x9EF8999E, 0x8855F9CC, 0x04F56CE9, 0x83C078FA, 0xF33F7946, 0xF4B8FB2D, 0xE820C635,
+0x0B39212D, 0xE74FC94B, 0xF92D81E9, 0xB9945937, 0x2D110DDB, 0xED1F975D, 0x04EDDEE3, 0x5FBC0F21,
+0xA056343F, 0xBA59C76D, 0x93827DE1, 0x2C1A9473, 0x621D0D1F, 0xA41F093F, 0xA51CFB8A, 0x8C8F090D,
+0xF3FAA0E0, 0x1CD5D83A, 0x28610BAB, 0x77C430EE, 0xDD640E44, 0x7A413C61, 0x2D992DC3, 0xB4BC3192,
+0x6A78BBC7, 0xFE21DD09, 0x10BAD134, 0x78DE6C64, 0x958A9EFE, 0x51C69DE1, 0x87414531, 0x6E9C8A5A,
+0x74801EAA, 0xCB174B7C, 0x892DCBCC, 0x47756F6B, 0xAF259239, 0xB886B64D, 0xE4548C2B, 0x5A50854D,
+0xB8851712, 0x17F22319, 0x5C18D542, 0x24E9DDBE, 0xAC2DF965, 0xCDEF6C7D, 0x6050FF2F, 0x097E2D7F,
+0x847FA769, 0xE4AC9A8C, 0x27429578, 0x495DB991, 0x4DD6EF27, 0xEDF9078B, 0xC08929C4, 0xEAC64FFB,
+0x259DC574, 0x15B9BFA1, 0x0F403351, 0x1C2C72C9, 0x3ADB4CFC, 0x26ED26E0, 0xE339B609, 0x8A88BBAC,
+0x9702AF42, 0xA95F5BE2, 0x462A539A, 0x481BF124, 0xEF492462, 0x5288A6AC, 0x6E63D2AD, 0xA8DAAE7B,
+0x9E4AF901, 0x0DBF35E1, 0x8B843DC1, 0x3E893339, 0x83D7F744, 0x83CD24A3, 0x8A902E27, 0x8A38CEEF,
+0x30B40BDA, 0xF4A279EC, 0x60FA4352, 0xB7162049, 0x522E2756, 0x2DE51A1A, 0xB9E8FFD1, 0x342B6E4D,
+0x3BD482CD, 0x54B0E535, 0x1DCA24C3, 0x29E7D6B7, 0xA147EB01, 0xE6DF1B7C, 0x00751C29, 0x093F30DB,
+0x09608579, 0x45D76DF5, 0xA751A4E0, 0x9DB9D1F3, 0xF3433288, 0x51D851E3, 0xC98D9C4C, 0xD8AF101E,
+0x1966B174, 0xD96008B1, 0x4743E941, 0x8A8D96C0, 0xEFC9F7E9, 0xD49B21EB, 0x0BE35710, 0x31B8A572,
+0xD1E181DA, 0xFBD6EA80, 0x892123DA, 0xEB3B4B61, 0xECE94A2B, 0x7C857D55, 0x1599E19A, 0x313DAF50,
+0xB18B3D3D, 0x0325DBE3, 0x25452E90, 0xA9219E9D, 0x5D20EE42, 0x4252632D, 0xBBC0532A, 0xAE7468D9,
+0xCEC41E3A, 0x719EF96A, 0xB4B24FDF, 0x222DCE4E, 0x3B193065, 0x95A257B0, 0x4E377B34, 0x97D92D89,
+0x808669CF, 0x69912988, 0x18AF596A, 0x4498E26E, 0x578E6025, 0x551E1819, 0xA8F93C84, 0xB344E70B,
+0x0E8A37AF, 0xFFBACB0C, 0xBBA9BA1C, 0x0F3C9781, 0xA9027F7D, 0x5BF0F96F, 0xB2BF3779, 0xB02AD4E6,
+0x56EB561F, 0xB21806A1, 0xE2F9CD6B, 0x46065F36, 0x6F6AA524, 0x9CB492EF, 0x03C77385, 0xD3685650,
+0xE854D368, 0x534A15EA, 0x74A973E6, 0x802D108B, 0xCA70EA8A, 0x77710C43, 0x34E800D9, 0xBC235904,
+0x1C5BA6D7, 0x2EE70470, 0xC5DAC237, 0xAE7C1D30, 0xA75BF4EC, 0x2447F06D, 0x0443AD6B, 0x62D2B28A,
+0xD5C794C2, 0xCB439F83, 0x7798238A, 0xF4A16B76, 0x0B4BCC61, 0xE77E7022, 0x233FF75C, 0x00476EA8,
+0xA987C31D, 0x2FB4FC81, 0xC99DE8E6, 0xD0227CC1, 0xA4E1EC43, 0xEE01C059, 0x83DF3C81, 0x48A21172,
+0x38DBA9F4, 0x56B1036A, 0x233E360B, 0xC6EF0F95, 0xED204E29, 0xC38135F4, 0x3A92824F, 0x031C1FF3,
+0xFD17F236, 0x90B397BC, 0xD11942BB, 0x1C766641, 0xADF23984, 0x93BB523C, 0x164E1F80, 0xDB1E8C10,
+0x8BA1FE1D, 0xC4DF3E4E, 0x09D4F5ED, 0xA43017D1, 0xAD5ADF0E, 0x31940493, 0x2D0CEC7A, 0xCDFC62F2,
+0x337F593B, 0xE6010E97, 0x810FFFFC, 0x5D9C224E, 0xBAA90C01, 0xF6B2229F, 0xC307788B, 0x0E49BE82,
+0x1E305432, 0xB2AEB2C4, 0x219D5105, 0x82A25E85, 0x393C87C4, 0x8C00F433, 0xF360A4F2, 0x409038BE,
+0x3B02C3FB, 0xB61CD5E3, 0x1507C179, 0xE96513B4, 0x0D416326, 0x639163CA, 0x90B641F5, 0x005C5B25,
+0xEE0ED051, 0xCB904834, 0xC23FB88E, 0x53DB07C4, 0x8C5E5008, 0xDC761D5A, 0xDE4DF9EA, 0x2E1D8891,
+0xEA65CB1D, 0xAFBA485E, 0x462337D6, 0xC2B3B615, 0x428BCC6D, 0x2175AE94, 0x900F7414, 0x361C0C8A,
+0x46724D17, 0x5704BBAB, 0x315CE32E, 0x609136D0, 0x869B616E, 0x4C0D04BB, 0x26F28EDF, 0x679BB1E1,
+0x949B91C1, 0xEA49C3B6, 0xBFC1532E, 0xE193D093, 0x6BA78653, 0x9A0D88BE, 0x66699B7B, 0xCD4122D4,
+0x2D1676EC, 0x419BDC28, 0x70136A8D, 0xAD501681, 0x5DBD472B, 0xAA0D6A34, 0x754BAA34, 0x15582827,
+0xFD22EBA5, 0x7ED6A139, 0x20303210, 0x3A27862B, 0xCE267336, 0xD71428FA, 0x40900871, 0xA171CCA2,
+0x13CA7FAF, 0x366F0215, 0x14809A1B, 0x71BE349F, 0xBE3F93A2, 0x60A01B52, 0x8EAF3267, 0x99036ABF,
+0xB32B749A, 0x840D392E, 0x63A75622, 0x6C7CA5DB, 0x05839EBF, 0x6A28E5A8, 0x6B42CAB5, 0x096D9C07,
+0x3BF0BD14, 0x9D50DD88, 0x806EED7F, 0x7AF3FC35, 0x37908883, 0x28B531F4, 0xCF1A1260, 0x886C6075,
+0x20C631D9, 0x9FE9231C, 0x16A75145, 0x758492A1, 0x94A289DE, 0x8CDDA7B0, 0x34506ADD, 0x40DB7D49,
+0x7748BCF3, 0x41036080, 0xD0EF0C52, 0x95F30F1F, 0xA01B5DBC, 0xA4052374, 0xB1711493, 0x5377457F,
+0x42636B2F, 0xB7724955, 0x508DB458, 0xA2073380, 0x5597F574, 0x4083EB30, 0x9EC2B5CE, 0xCDCD1ED2,
+0x241F264D, 0xC7FFB0B3, 0x762FE97B, 0x5745F58A, 0x16A6C86B, 0xFDAA68B3, 0xB5DEB9D5, 0xB1C468C2,
+0xA2171C49, 0x4D89B1D5, 0x20785292, 0x1712E2D9, 0x56564C80, 0x793E6282, 0x306EFCCA, 0x3B8C0FFD,
+0xEF98D63D, 0x84CB177E, 0x689BD6F2, 0x265329B1, 0x1458EF64, 0xE501BABE, 0x819DBE56, 0x0C1F7E92,
+0x1C436124, 0xEB734300, 0xB2BC8903, 0x58BCA34B, 0xEA1E8FF7, 0xDFDA3F3F, 0xB7A2EBE8, 0xBCEB7DE2,
+0x7FB27DFA, 0x24BE1FCF, 0x5D0C33B1, 0x05BAB875, 0x581D4BB0, 0x7119499F, 0x41765F91, 0xD90664E4,
+0x66CD7BDC, 0xED20159E, 0x99760C4A, 0x05D63A40, 0xD261E9C1, 0xC4F46F9A, 0xBD27001C, 0x161F9F4C,
+0x1AF2F5EC, 0xE62B7C83, 0x5D3718B3, 0xF36B8EB0, 0x29B84117, 0xA41A98CB, 0xD9700735, 0x919F809F,
+0xE75896F9, 0xA87BE74E, 0xD4737E20, 0x2BD13345, 0x3AB73965, 0x9025C018, 0x0641011D, 0x039249D6,
+0x2CE068F6, 0x8981C1E4, 0x4523FDCC, 0x48C44CD0, 0x232A9FA6, 0x62BCC3DE, 0x909F2E7A, 0x79A52D3F,
+0x05999ACB, 0x7EAB8D63, 0x2CFC765A, 0xF39E2ACF, 0xD3D01C74, 0x297671E8, 0x7A374364, 0xCF55CF5D,
+0xD87680D9, 0x4B57E67B, 0xA7E8DE70, 0x9188FFE1, 0x6C5AA2FD, 0x4B5B606C, 0xD8BE0AE3, 0xE257AC6C,
+0xECE1BA33, 0xD8734FD7, 0x816898D0, 0x0D02782C, 0xAD4CF639, 0x0DED9D84, 0x62DAFF3E, 0xF36DDA38,
+0xE187EC35, 0x10A062EA, 0xC6D3B24C, 0x37EFAA30, 0x45AEFD7D, 0x90CE0B8B, 0xEF617F6F, 0xC8D6E2C2,
+0x8E2435F0, 0xF8E452B9, 0x11622DA8, 0xADFD0721, 0x541EBC86, 0xA97DC7FA, 0xC4C473C4, 0x42164D78,
+0xA88BF580, 0x09855D5F, 0xE19615FF, 0x47906E22, 0xC5737AB5, 0x28367714, 0xF8D05388, 0xDDD9FE86,
+0x81868E6D, 0xB969A629, 0x764FA6C6, 0xB3DA6EBB, 0x195722EF, 0x14599489, 0xAE6139FA, 0x28B497D0,
+0x83B31FCB, 0x818C84C9, 0x37B759D3, 0xA73F176D, 0xEF599104, 0xA0DD614C, 0x7E362EA7, 0x3FD2BDB1,
+0xB24AAF8A, 0x5F0DD67B, 0x3015756A, 0x1AD6FEA3, 0x67E44FCD, 0x4BE62A04, 0x0B1D6367, 0x049B1549,
+0xE44EF528, 0x986CE1BF, 0xA7ADF43B, 0x29FBA9BF, 0xF5D1133C, 0x8A35F1C4, 0x92B1F6F4, 0x2B2D6010,
+0xD4C43F5A, 0x3F5F2FF4, 0x25EEA770, 0x623B02C3, 0xC88F5580, 0x7DBF3C57, 0x29005EF6, 0x779B3BEF,
+0xED74AD9F, 0x4EAAFF68, 0x353B92AF, 0xE22F8856, 0xC18A0C64, 0x654D06B3, 0xFAA01149, 0xCAFCE46B,
+0x2F7087D1, 0x21373E0C, 0xAB9F292F, 0x87BE5FF0, 0xFE0231F0, 0xD01C2979, 0x16612193, 0x76CCB223,
+0xDB010008, 0x68F60795, 0xEA2DF2D0, 0x80557394, 0x27555151, 0x09CDBDEC, 0xDC089988, 0x991CAE23,
+0xEBC66539, 0xD1D0408C, 0xFE030811, 0x5AADC3A8, 0x2510BB5E, 0xE32525DB, 0xDA5D43BC, 0x40F451CA,
+0x37070F0C, 0xBC00C2EC, 0x9A5D0A20, 0xBDE04719, 0x7F1B8677, 0xEB30110D, 0xEFD74613, 0x3D175BA2,
+0x7DC2D4B5, 0x4C00D555, 0x8001E68C, 0x65472E31, 0x20AE84D7, 0x21DB3170, 0x10CA8336, 0xEFFE0E58,
+0x2E3F5E2A, 0xD46681D0, 0x17197F49, 0x15CBD653, 0x869BC6A8, 0x69570941, 0x03EA74E1, 0x3F9B2634,
+0x739F846B, 0x376B8D20, 0xD0196F80, 0x610DC200, 0xDD4D3365, 0x56FD73AF, 0x501F1A40, 0xF58F542C,
+0xE7C82CED, 0xDB0828ED, 0xF42889AE, 0x320DE034, 0x162CAF15, 0xFC442873, 0x42CEBD8B, 0xAD9493B8,
+0x27F2A0EA, 0x28BA25A8, 0x7F3A124E, 0x7AB7CC27, 0x85F90DCB, 0xCE763323, 0x7A484EE4, 0x25E6ED44,
+0x52A1593D, 0x0149B185, 0x8B9EEBCD, 0x2F35C384, 0xA6591AA1, 0x1D3107A7, 0x151EE085, 0x4188EAEE,
+0x9A0B2D06, 0x471A2126, 0x5FCABD35, 0x3ECBA228, 0x319EDD7D, 0xCA8C465A, 0x68249CCD, 0xDFD820CB,
+0xCBB17816, 0xA97F6683, 0xC9A2B3AA, 0x96D7DE87, 0xDD6B7EE1, 0x6C62EFBB, 0x5F0337CA, 0x0F83D673,
+0x5EBDA6DD, 0xDD7C3D10, 0xFC066799, 0x9FBC3B25, 0x4623D3DD, 0xB0FE6731, 0x4ECBC2FF, 0x5C849F79,
+0x9F1897DB, 0x71BC96DD, 0xE67BCC4B, 0x8DA2C0B5, 0x92F3F77A, 0xF92EE3FD, 0x89A181B5, 0xA8499DAB,
+0x61B95854, 0xCCF8E9F5, 0xEE8A65C7, 0xA836E604, 0xC037E869, 0xC9334479, 0x65F7964C, 0x5F39DE78,
+0xAAE13B63, 0x57CEC1B4, 0xD3CA7CFE, 0xD76015B3, 0x4B3B9288, 0x6D48C079, 0xB703CF61, 0x35740AC4,
+0xA301467F, 0x2CA805D3, 0x3D882F6E, 0x71FA9B22, 0xA33C0A04, 0x744903D4, 0x35091EA8, 0xD67822D4,
+0x8E304B2A, 0x779DC84D, 0xF8489870, 0x1067EC0D, 0x252094E5, 0x10E0B93D, 0x05C2EA1F, 0xEA7A915D,
+0x87FD60D3, 0x8074FC35, 0xD549E611, 0xF7E07715, 0xA18D70E1, 0xF5635A80, 0x952BCFD9, 0x0E49EF2D,
+0x579ACD63, 0x5D938D1E, 0x776F7244, 0xE403BC02, 0x38CC14DB, 0x60241ECF, 0x5C7CC728, 0xC5796F4C,
+0x71180F22, 0xF1FEC001, 0x2F88DDED, 0x9F918EA7, 0x755B843A, 0xDE8CA430, 0xAAADDF5F, 0x2C6EEB69,
+0x2A367FC6, 0x6C8574B5, 0xA6CAF718, 0xCBE6E7C0, 0x5C901A1F, 0xB944C531, 0xDB1ACED6, 0x2B376C07,
+0x506D75EF, 0x4488A688, 0x0BF23A09, 0xA7BB7D41, 0xF6A27C7C, 0xA2C9EC42, 0x9D9761C2, 0x0AF2C3CF,
+0xB265C15E, 0x239A7153, 0xBC0A62FA, 0x7CC887EE, 0x6076E138, 0x6E37104B, 0x1702FB6A, 0x50949241,
+0x92D6DB0C, 0x7EABE7FB, 0xFFA309C7, 0xC3613031, 0x12BBE853, 0x3C5AE121, 0xA89882B5, 0x8E371457,
+0xC8897E88, 0xA55B8863, 0x90BF3FF1, 0x39CCCC73, 0x19BCA577, 0x6143FA70, 0x6803DAD9, 0xFC0AC4A6,
+0x5F7AA621, 0x372847AA, 0x84F160E4, 0xFAC32800, 0x6E88005A, 0x70F9FE9E, 0x75068450, 0xAC537FCB,
+0x96399BBE, 0x46B33FEE, 0x85636E2B, 0x115AD7DC, 0xB2020F8A, 0x21D1537F, 0x712EE6F7, 0x7BA50CA0,
+0x384A2F03, 0xCBF4A8A1, 0x7D149EF6, 0xA1F8484B, 0xD012A3A4, 0xA066B338, 0xF8F496AA, 0xDC74BD4D,
+0xB41E8CEE, 0xD4E13883, 0x6681075F, 0x76172A4F, 0x2F0183CD, 0x797E1592, 0x9A0E90CF, 0xEBB21435,
+0x8FBA08B4, 0x9C30AFB4, 0xE22782A1, 0x2FFA210F, 0x654D11BC, 0x31AB68D1, 0xA25A9ACC, 0x995F9193,
+0x1F6BC38E, 0xD07CFB7A, 0x74FD9E39, 0xFBFF90AA, 0xFBD945D6, 0xF805E5DC, 0x87DBD87C, 0xA113B3AB,
+0x0E2948D2, 0x8373801C, 0xD4B8C46C, 0x97144C86, 0x89E5850D, 0x56B1E155, 0x225E0544, 0xCC64943C,
+0x6C0CFA13, 0x6E0F3A5C, 0x282F96A2, 0xEEBD0F27, 0x771CB21D, 0x96C7D5BA, 0x264D9638, 0xEC947004,
+0xF8C543BE, 0xE9E4719F, 0x7EFABAC8, 0x1E647B9A, 0xBD4A9A14, 0x106B778A, 0x69ACC3A4, 0x619F5F9C,
+0xD0BD42D2, 0xF36BBAFE, 0xCFF239B7, 0x16CA52A7, 0x391EE01D, 0x4602C067, 0x0B0C97CB, 0x90529772,
+0x15FE8157, 0xB3C8972D, 0x63BCE8DD, 0x3ECC04BB, 0x22248347, 0xA14D22A9, 0x1182F809, 0x6B0D3920,
+0xE5260429, 0xAFA8BC0B, 0x1F9FD024, 0x2849EFDD, 0xC27FB9EE, 0x9B682EAF, 0x951C4320, 0x101BD9D4,
+0x9ADBAF14, 0x9074D0F6, 0x302805A5, 0x97CFAE71, 0xF7275454, 0xF5BE8849, 0x7A2E8CAF, 0x6949813F,
+0x2A114208, 0x04154BFA, 0xF00FAF04, 0x1DBBBD02, 0x21699F8A, 0x87862B2C, 0x483AA0CD, 0xE33003F5,
+0x7F8F2F73, 0x230B80C3, 0x21271421, 0x4209A103, 0xB11FE2A7, 0x8C40732E, 0xCB284A5B, 0x8091926A,
+0x369843B4, 0x56242C1D, 0x26454C01, 0x12ACBD51, 0x54DFEAE3, 0xCD71CB1B, 0x0909ACC4, 0x233D4CF0,
+0x7DA58505, 0x6EFF56D8, 0x07094DAE, 0x4EF1E7A2, 0xFFCB1E77, 0x44013A96, 0x2C4FAF50, 0xB86B06DA,
+0xA7292C38, 0xDEB11D10, 0x58D93A37, 0xE8812A41, 0xDE87FFA8, 0xBD83BB1B, 0xBD6CE0AE, 0xDE630256,
+0xEBF71125, 0x817C4538, 0x52753EF2, 0x5D246DEA, 0x20A0E21A, 0x8387ADAD, 0xAED32A5E, 0x5F182C56,
+0x2B23983D, 0x15ECC944, 0x00407AC1, 0xC6C4CD65, 0xAAD58D38, 0x0FE01094, 0xD69731F4, 0x6EB5FA33,
+0x581F6B7B, 0xC0BFBE18, 0xA4D7ACA6, 0xEA3190F2, 0x269698EF, 0x0441742C, 0x6F534357, 0x3CC2E0D2,
+0x14E410B1, 0xE5A70771, 0xFF55EBCE, 0x172B7F20, 0x4AA314B3, 0x69435097, 0x8CD002C2, 0x2DFA4497,
+0xA5F0CD2B, 0xBBA26EC7, 0xAEA752C0, 0x69895AA9, 0xCEEC78D7, 0x42B91422, 0x659DC35E, 0x67519A8A,
+0x79FCBD92, 0xCF7EE746, 0xEA621809, 0x5FA3CF4D, 0x02F39BBC, 0x6D46BBA4, 0xF0E9069D, 0xFD793EA1,
+0x70DDBFFE, 0x399A65CE, 0x453B7284, 0x70355AB6, 0x0D14DB19, 0x8BA8D341, 0xCAABC1EB, 0x4E2E449B,
+0x95F00A16, 0x8EFB5A6B, 0x4FF24BB1, 0x04802DB4, 0x9C8569FE, 0x05191AE6, 0xE7DFF525, 0xEF4932D3,
+0x3ACB9FA7, 0xD269BE3A, 0xD434E508, 0x5153DCF9, 0x3CF3208F, 0x470D4376, 0xF46AA41F, 0xCB9C9C46,
+0xA8456976, 0xB024969A, 0x6B03E24C, 0xB30D128A, 0x88677707, 0xA3159CFD, 0xA6FD329B, 0x30A4454A,
+0x5E2CB01B, 0xD5E0F5CB, 0x1CAB95FF, 0x79C9F0B5, 0xB8F3D7C9, 0xA3FCC591, 0xADFABF59, 0xB32D78A6,
+0x641E6ACE, 0x08D9C498, 0x08EFF142, 0x2BA99138, 0x0DDA0A71, 0x05C22216, 0x1BF05B76, 0xA3B44A15,
+0xFA30C07B, 0x380E0F2D, 0x9649A559, 0x6F76CD40, 0xE4E5F567, 0x8F212E63, 0xB9A2578C, 0xC07CA12C,
+0xB74B678C, 0x47E8EFFF, 0x70AA85DD, 0xFE78012B, 0x0DC794DE, 0xFEFE3E8F, 0xB8DBABA9, 0xE937DDFD,
+0x7AFF870F, 0x0236EA69, 0xA0A94817, 0xE5E94CA5, 0x4CDF4B79, 0x04412B6C, 0xC052EF19, 0x83FE886F,
+0x48FDBC94, 0xA0F32659, 0x86022216, 0x89F3A9A4, 0xEE5721C2, 0x048A289B, 0xD55C4EBB, 0x7F7C76FE,
+0xB9431CA4, 0x5C5EF0C2, 0xE4118DE6, 0xEC55B9B8, 0x9C07EA90, 0x0726FCC2, 0x60055B56, 0x8B77A672,
+0xE5113CC7, 0x4696F341, 0x84152552, 0x577831C7, 0x17DDFF99, 0x738435AB, 0xF1D52733, 0x6B0EB4C6,
+0x29117C81, 0xB8ABEFF7, 0xA4DECF58, 0x25990DD7, 0x8EB570A3, 0x112F3857, 0xC7920260, 0xCE895926,
+0x7C3B5A78, 0x7D999F89, 0xC4622B47, 0x146BF5A9, 0x14636242, 0x6E1164AF, 0xC0E40F8C, 0xCDE9B3FE,
+0xB1A8E76B, 0xC75373EA, 0xC1AC7402, 0x33A10C98, 0x08EF9CA6, 0x8C1D8070, 0x06EE4359, 0xA7C5CD64,
+0xD3FED4FD, 0xDB49E91E, 0x3FDDCAA0, 0x5B1AC483, 0xCAF9FD4F, 0x184AB609, 0xF93173C5, 0xD40228B9,
+0x5503553E, 0xA4A41290, 0xC1415566, 0x6DF10206, 0xC56C1B6B, 0xEEB8F8C7, 0xCB7C3F54, 0x21BC2C30,
+0x9A4CF955, 0x5257CEA3, 0x73A0B4BC, 0xEA24B74E, 0x26E7E2C6, 0x22B37D85, 0x5E242E46, 0x0711038F,
+0x5620B9CB, 0x6CF9173F, 0x01A00C0B, 0xC47E2B7F, 0x42C50B67, 0xF4F74EAA, 0x87F510B1, 0x4FCA2BE8,
+0xDBF15CF4, 0x04668A3A, 0xDB080359, 0xFCCEFEA5, 0x4EDBD7FA, 0x0357EF45, 0x19E7DA70, 0xD6C3891A,
+0x2B9C7EA0, 0xD7DF4D77, 0xAF9065C0, 0x2BD39A55, 0x0AD4036F, 0x8A298335, 0x52A3F7F5, 0xD0A8657A,
+0x2E016994, 0x23A0019A, 0x1CF18D3D, 0xF1793725, 0xEA6BCAD2, 0xFECC0512, 0x69D0EE6B, 0x300C9947,
+0x880DD287, 0x652150F6, 0x95635A9E, 0x748ED0A3, 0x1695E7FE, 0xD89733C1, 0x21B34049, 0x2D9497CD,
+0x2CB97081, 0x37CED5A9, 0xB9136612, 0xD6DB03AE, 0x811362B6, 0x67F8B280, 0xFDB0022C, 0x2E1B4F76,
+0xA87CEA01, 0xE08AF03A, 0xCDAD3250, 0x040C28A3, 0xC962FC6F, 0x44170E5A, 0x2C1B5DCD, 0x5C6F08B4,
+0x9F7B8DFE, 0x055EDA4F, 0x708715B3, 0x96639EB8, 0xA3DF7C9A, 0x237800E9, 0x8EFD5F77, 0xB12AA966,
+0xC4516C49, 0x54C52528, 0xD6D3A3E1, 0x6C01007A, 0xA0A8BECC, 0x4C7F3D7A, 0x80F917BA, 0x1B6954ED,
+0x080DBFD3, 0x0588DC9C, 0x9056EDA3, 0x2561554A, 0xCFA5CC0E, 0x77235C56, 0xC43BB8BB, 0x4A46E2D2,
+0x8952B27B, 0xA1ECACBB, 0x9A19C704, 0xCA5CE4EA, 0x3419633F, 0x82632F43, 0xB5E4321D, 0x76C7C72A,
+0xD2FDDE75, 0xD7736EA7, 0xA5BAC47B, 0xCA8D8C7F, 0x26153433, 0xD210FD8C, 0x9D35DA96, 0x6EC7C54D,
+0xDD51216A, 0x6B0A2EF1, 0x88C8C3AA, 0xA47E35CF, 0xDDF875D3, 0xCA2D0EAC, 0x21C6F026, 0xD99CC58C,
+0x84DE75CB, 0xDAB3EC6D, 0xDCFE2C60, 0xF4D7A616, 0x09CF70B1, 0x235B3BA4, 0x6054285A, 0xE38C6435,
+0x91C4821D, 0x0D5815FF, 0xD89B0253, 0x15D19B66, 0xFC335C42, 0x20DAAA1C, 0xD2A0F16B, 0x096741E1,
+0x5C12489D, 0x74EEC058, 0x35EB45F0, 0x37F35795, 0xB1953242, 0x41610845, 0xBE94C01C, 0xF59179E0,
+0xEECBAAF6, 0xE4DCBA0E, 0xB6EB7877, 0x454828DA, 0xC1E74063, 0x049F3598, 0x35ADA9E4, 0xBB776343,
+0xFF95EEE5, 0xAC4BD43C, 0x8D9D62C5, 0x35FE598E, 0x0B0BFEC0, 0x01A0402D, 0x216495EB, 0x0DD97A36,
+0xBF873E23, 0x174E3F47, 0x356A420A, 0x1A7772C1, 0xE4A44075, 0xC6D825BE, 0xC7AC4C00, 0x93DC7525,
+0x3D33D228, 0xE708CB36, 0x097E648D, 0xDF38F112, 0x66CF3201, 0xFEF3AEB8, 0x95E5E9FB, 0x0AB11C27,
+0x4B9B2A35, 0x504BD97E, 0xF6CC3BE4, 0x63E2BAD2, 0x967A534B, 0x5D064D7F, 0x9D5385AC, 0x87730C86,
+0xA28299E1, 0x3A498CA0, 0xC1FC1225, 0xDE61625A, 0xDC150629, 0xDEB1F259, 0x7DDE20CF, 0xD4735A38,
+0x230DAB21, 0xAD752F67, 0x899F9963, 0xDD76FEDA, 0x08C89F90, 0xBF3DFF64, 0x5DF12700, 0x27ED3B44,
+0xE4646F5C, 0x6CCCFF90, 0x6DAEF6E4, 0xF92D58F4, 0x9A8D70EE, 0x8F41CD4B, 0xF232CD54, 0xB0B920A9,
+0xA1495FA9, 0x98BC5EAC, 0x23FB6120, 0x1877795E, 0x1AEB9993, 0xB09DBB35, 0xDC5DAF9D, 0xD4ECF14D,
+0x5BE827A0, 0x72B4FADB, 0x33E9DBA8, 0x112D2B51, 0x1A973D41, 0xBA445F07, 0x80BFE95E, 0x6ED2D10C,
+0xC5A6798B, 0xA2DA752F, 0x83C85CDA, 0xE9E79989, 0x6139A1BC, 0x35930DD5, 0x0007AC6D, 0x2DC81374,
+0xCE668BEC, 0x1503D440, 0x267048F5, 0x9E84E08E, 0x334B8D26, 0xFE14EA1E, 0xE056A2FB, 0x37B34EFA,
+0x66CF37C9, 0xFD7041F0, 0x56A11AA9, 0x3FE4645B, 0xF4CF037B, 0xC9A0C614, 0xD393AC34, 0x5894877F,
+0x266E1F36, 0xFB546F00, 0x247EA7BF, 0xC402F5E9, 0x27552B9A, 0xB2018328, 0xA0243327, 0xFE288804,
+0x45D5693C, 0x2FD3AD1A, 0xE629BD49, 0x3E6D69F9, 0x95AD1190, 0xD44DC254, 0xDCE1FA55, 0x19EE981B,
+0xA20B3C0B, 0xBB053CAD, 0x1C5DC555, 0x4BF9B1D7, 0xC7B68A4E, 0xD7CE1D39, 0x9781FD1A, 0xE65DAB64,
+0x70592BCD, 0x01857227, 0x938E6F4B, 0x2773A880, 0x3C4614CD, 0x4EBB1862, 0xC634ECF7, 0xAC0089A1,
+0xD94D9AD5, 0xE6ACFD17, 0x92CE5F6F, 0x23DB4EB8, 0x29479074, 0x1D9F3AE5, 0xCA48D1AC, 0xEBD4138F,
+0x04551A43, 0xD147AC3E, 0x35289458, 0x660C5C63, 0x6B544364, 0x3908F5EF, 0x81ACFD2C, 0xA2D303FD,
+0x5E7573AE, 0x8C9D4E82, 0xC2B231D6, 0xABFCD763, 0x9D9E5824, 0x11D0A863, 0x28982D6E, 0x8D8E0D14,
+0xA4220B5B, 0xF807E5C6, 0xCB24E39A, 0xCA032549, 0x09B7EADE, 0x035620A7, 0x099D3E2A, 0x3964D9D8,
+0x3F11FF14, 0xE96CC0A2, 0x16927B06, 0x7850CE20, 0x27E2C70D, 0xE647D3CA, 0xA7E8F5C9, 0x2C5E1B4A,
+0x217CF6F7, 0x8B1F9431, 0x6AA68A4F, 0xB028940C, 0xF420979B, 0x80C1E643, 0x61B500E6, 0x1E266BAA,
+0xCDB052D7, 0xDA728084, 0x3C4DE83C, 0x9EC365C9, 0xA8C9B3EC, 0x50279C45, 0x613C6447, 0x716206C9,
+0x9C5914D8, 0xBD3EAFB4, 0x15BFF53E, 0xE5972A7A, 0x0832DDAF, 0x0B7320F7, 0x4EC8C962, 0x618602A8,
+0xB6770429, 0x9E65ECD5, 0xFE895C5B, 0x69FF382A, 0xB728D097, 0xD51D1010, 0x0F0AFEF9, 0xAFBA03A7,
+0x15FC83A8, 0x3AEEB118, 0x1537C9C3, 0x7F425C16, 0xBC76CD23, 0x970A42E8, 0x0242CBCD, 0x83FE2B06,
+0x6642413D, 0xBE4AD24F, 0x1020EDF1, 0x7F0D4663, 0x8E4C5C47, 0x18CE27A3, 0x63F48CD3, 0x275C379D,
+0x970862C4, 0xD966A2BA, 0x4B0C2634, 0x21CC4642, 0x4BD699FB, 0xA662C8CC, 0x5F2C9595, 0xAB0AFAB2,
+0x158F5F87, 0x868DEB5B, 0xC9EE6FD6, 0x5FFC242E, 0x450A9F37, 0x12EC566F, 0x136C94B9, 0xBA617379,
+0x53498D9C, 0xEC09D94A, 0xF1F25DF5, 0xAE96A2C2, 0x86FBCE2D, 0xAB941DC9, 0x0654D221, 0x57EDD712,
+0x9D08498F, 0x6ED43E68, 0x05197400, 0xCF4AA911, 0x79AAE513, 0xA067663B, 0x3B6B0663, 0x0232D57E,
+0xB9CA4A1A, 0xF072331A, 0x4C8D26BB, 0x2F2B1D27, 0x868918D3, 0xDB7ED78F, 0x64839ADA, 0x40151E11,
+0x6E0E61F5, 0xE3359B31, 0x29D04AEB, 0xF29B312D, 0xFDC35CCD, 0x2DF80844, 0x2B16E7CD, 0x494334CC,
+0x8B08BAEB, 0x155B01FA, 0x7DF68A7F, 0xE4A16C60, 0x3535A3FB, 0x2C927402, 0x534C22FB, 0x8729E412,
+0xB526554F, 0x23581F14, 0x093EFB39, 0x72AD8FC9, 0x5D0C2294, 0x668BD32A, 0x9E354B1E, 0x27AC7640,
+0xA31C3659, 0x77715A06, 0xB2F9EE25, 0x49E72FC1, 0x363F6345, 0x13390B93, 0xA080ABB9, 0xCC022657,
+0xC4A73042, 0x6C5E717A, 0x970BE40F, 0x7343ABF7, 0xB31D916E, 0x169B1E63, 0xA8007D38, 0x668D97CE,
+0x75F8620C, 0x6D55D21A, 0x5B85D52F, 0xF2F609DF, 0x04F4DE12, 0xCE8684C5, 0x868F7811, 0xBF3680BB,
+0x56650838, 0xF43CB060, 0x2CADDB00, 0x61CE35EB, 0xF72F0885, 0xF704E126, 0x0237C276, 0xC0D3174E,
+0x2BD69FB4, 0x45D0D5CF, 0x486A9E14, 0xF9340C0B, 0x3E5A497E, 0x9E5F8618, 0x0309E2F5, 0x32CC45F1,
+0x901AED73, 0xBA813526, 0x7423513D, 0x67EDC6BF, 0x7FA6072B, 0x6AD06A39, 0xEE303E8C, 0xD4B1D5DA,
+0xC07C5AFE, 0x35658BC0, 0x9541EF67, 0xFA50D3E8, 0xAFB2DDEC, 0x7C9F3407, 0xCBE35D94, 0x77E2FB59,
+0x34121F01, 0x96FA5F46, 0x632340C6, 0xBD24B32F, 0xF0AA4CB8, 0xF7A1E0E7, 0xBF526B67, 0xE9A97452,
+0x4D7F4DD3, 0x98739B2D, 0xA72D710C, 0x4F26029F, 0x7142BF6E, 0xF052DF2F, 0x3B1EE526, 0xD89E483B,
+0xAD00DB33, 0x4C153AAE, 0x12754715, 0x2342BB2C, 0xF87879E6, 0xD821B638, 0x1F7DEC6A, 0x284EA412,
+0x4B910F80, 0x9E688224, 0x153FF659, 0x31129D33, 0x0241BB9F, 0xCA816636, 0x47288330, 0xF606D238,
+0xC39B0CE4, 0x6C897087, 0x15EB4379, 0x5E350CAF, 0x704594AC, 0xF72FAF05, 0xD5C4A335, 0x1964F28B,
+0x76435D85, 0x8DB079C8, 0x151BB1B3, 0x1B471C5E, 0x18BD2F0C, 0xB4A9A3C9, 0x53E9AFC5, 0x416C61FF,
+0xF435DD5D, 0x55B3353B, 0xFFCF7AB2, 0x886C762B, 0x6FD3E847, 0xA747D048, 0xDFB4BDF9, 0x2E107F3E,
+0xBFBCAE22, 0x7ED74CF7, 0x12711EF3, 0x3D36C697, 0xECE9B734, 0x99B9E50E, 0x4B897A9A, 0xA3564B55,
+0x5EFEE874, 0x7DE70ACF, 0x224854CF, 0xA5CB547D, 0x7A01D811, 0x176BB532, 0x10637608, 0xFD8758A0,
+0x42ED17C0, 0xB4A710E6, 0xF3480F0E, 0xB4320358, 0xBFD16477, 0x285C26C7, 0x08FD97A1, 0x5D04E877,
+0x23A48826, 0x5F804D9B, 0xF7E80AF5, 0xBD6324A2, 0xF33DE98C, 0x46A0E7F0, 0x8B7A04CA, 0xE0EC7434,
+0xEC1591D9, 0xC362D67D, 0x9EC41882, 0x9ECCAC25, 0x60887BBE, 0x7B91746A, 0x5F95E329, 0xE22D9467,
+0xEC596A9E, 0x1CFF95E8, 0xFD538DB3, 0x6868B6FC, 0x6ADA8A41, 0x4F6B26F4, 0x7E897B05, 0x5757DAAE,
+0x1DF016C8, 0xD4A40804, 0x36E316F9, 0x974C728A, 0x4CCD2110, 0x52BACE0F, 0xE365A94E, 0x48FF7300,
+0xFDA17ECE, 0x1B48580C, 0xFF98264C, 0xBFDF81EE, 0x65DD077F, 0x1E7BC0D7, 0x11A4EE75, 0xBB3AE49A,
+0x75BFFEC7, 0x7BA6DA39, 0xE17D963C, 0xCC4548BA, 0x8E9993D4, 0x66E2E2DC, 0xB9C85D12, 0x2CF42B66,
+0x70111F71, 0xC0FE0C6D, 0xF12283AD, 0xF892D999, 0x0CBF5623, 0x4837FDC9, 0x45F05120, 0xCFE687DC,
+0x9207F337, 0x073DC33B, 0xB3009E66, 0xDF082DB8, 0x820085F4, 0xB02C3DA0, 0x614A3DD4, 0x5B3E0585,
+0x8FE0BCC8, 0xB2A96313, 0x7F6FBD8D, 0x60BCF576, 0x81EE41B1, 0x288245A7, 0xF3630E79, 0x0499D21F,
+0x7F0C547B, 0xE5269378, 0xF71CB069, 0xC60E4BBB, 0x8BC3812E, 0x964C5557, 0xFC38CB6F, 0x9D485DAC,
+0xB39812D8, 0x744A19F6, 0xF23E83D2, 0xC16BF730, 0xE568D382, 0x25BFF269, 0x873C26BC, 0x7911C6AE,
+0xA5FF08FD, 0x07EB9141, 0x0873C591, 0x24283899, 0x48D2A7CD, 0x0C3CC10A, 0xF1B2A109, 0xEBA445D3,
+0xB00BB976, 0xB87985B5, 0x0585297E, 0x86AA6079, 0x4BF0633B, 0xDEF62E74, 0xBB3AF095, 0x3A69711A,
+0x615854B6, 0xD5D86808, 0xD1EA77F9, 0xD075A75A, 0x6AF41A2F, 0x8F975A37, 0x84B56474, 0xA3E55D0A,
+0xCAB264D4, 0x262F0EC2, 0xF2B041F2, 0xCB845BB9, 0x95A5B54B, 0x37062BE7, 0x21E51E9A, 0x71DA1B76,
+0x9CA1FB14, 0x445A77C1, 0x25267A77, 0x8E3E8181, 0x3A7E5C30, 0x02B4BBDE, 0x744A6C9B, 0x69FEB17D,
+0xA2ADC47B, 0x5B93D38C, 0xD656416E, 0x89C9BD5E, 0x739D8E0D, 0x99392899, 0x7A4497CB, 0xB06A288A,
+0xA166FCAC, 0x21CF2A35, 0x06C9B3EC, 0xFBEA1008, 0xDF863B8C, 0x739F0C34, 0xC68B97D7, 0x52FD7352,
+0x33377FA3, 0xA346C384, 0x4F7B2113, 0x6EDF5EC4, 0x81E6AC6E, 0x1E7BC567, 0xB2C98DFB, 0x3EA1135D,
+0xEBF55340, 0xF51BE270, 0x64C62461, 0x552F1E20, 0xB9FA5354, 0x545E7DC7, 0xD963EB8C, 0x580FB050,
+0xD45BC642, 0x20C303AE, 0x405C05F1, 0x499DBA9E, 0xA6450B51, 0x1ED340D5, 0x03130800, 0x09423970,
+0xC930F092, 0xAA1A9508, 0x03503254, 0x2DE1605D, 0x0DA0D33D, 0x06EB2972, 0x95079176, 0x78FC657D,
+0xB278B6D2, 0xB73AFD78, 0x7992466C, 0xC1BFF487, 0xC7B2250D, 0x2B45F4BA, 0x7AC4F221, 0x1C0CDB95,
+0x1D2B15D2, 0xB38AC383, 0xD4EBDE1F, 0x4CD52742, 0x6C0EC81A, 0x153B3432, 0xF11BAA12, 0xA7798762,
+0x0EA0CBDF, 0x85233D19, 0x801B9E28, 0x51285B16, 0x85F062D8, 0x56E227B7, 0x84D00AE9, 0xA3FB62DE,
+0x0C138963, 0x2BEB5DC8, 0xC159E31A, 0x5292A044, 0x2944B6F5, 0xC7D416E9, 0x4679572B, 0xAE8E9E64,
+0xAA961FF8, 0x45C340CA, 0xCDC9883F, 0x3B526D70, 0xC1D8B19D, 0x4A52EE51, 0xB859AB81, 0x8A69593D,
+0x1BB3D655, 0xFB0BB9C6, 0x7F7747EF, 0xB932FA77, 0x07D16E42, 0xE0D4E1AA, 0x86BEB763, 0x5EB8E25E,
+0xBEB7F990, 0x38A66BDE, 0x0A9CDF5C, 0x1495D296, 0xD9CA701F, 0xB322ADE2, 0xC00BE820, 0x8480BD8C,
+0x159A2CA3, 0xF43F4C2F, 0xB8DA3C80, 0x1256A60C, 0xCE8CFA0D, 0xC1E3BB53, 0x804F296F, 0x8D7501E2,
+0x877A5D42, 0xEB25911C, 0xB656665C, 0x7D317A8A, 0x6D709C91, 0xA65D2AC3, 0x74815F92, 0x52E53C84,
+0x341D8D59, 0x2A0F040A, 0x7FCED632, 0x98D08163, 0x6887F261, 0xCD148089, 0x9E559D83, 0xAAFF21D1,
+0x552A91DE, 0x537A6807, 0xB5B87547, 0x255C158E, 0xFC8CDFB5, 0x04F16A33, 0x427238E3, 0x56262B5D,
+0x7DF544C0, 0x0A8C2F65, 0x5457B250, 0x73747E22, 0x75B61442, 0x9FD08805, 0x23796528, 0x8A9D05F2,
+0x02AC7F17, 0x25F4C9A5, 0x2C6EC210, 0xFE30DDEE, 0xABD301CF, 0x42EAAFFC, 0xA7B0632A, 0xFFC7F959,
+0xC048456D, 0x85601627, 0x25A8B5CE, 0x77BB93D5, 0xB8AC2ECC, 0x7324607B, 0x52FCD408, 0x0FF52A50,
+0x499FAC98, 0x3D46EC1F, 0xBA624AEE, 0x29343C66, 0x0D498207, 0xBDD0246F, 0xD6AF27AF, 0x03AE8225,
+0x226E60E6, 0xDC7D2D72, 0x82FB0CB6, 0xF86454CB, 0x3C5D6597, 0x2A234C71, 0x582D3A23, 0x6E30ED25,
+0x7C235ED2, 0x9BD1CD8E, 0xE8255C57, 0x438978DE, 0xCFDF0909, 0x7AD29EB5, 0x140422FD, 0xE9C51416,
+0xDBD5B281, 0x6B60FDC7, 0x667B05A4, 0xB2A1FF0B, 0x8A265EA3, 0x5AC6FC81, 0x1F99EECB, 0xE06CF4C0,
+0x28E084B7, 0x4CE4FA5C, 0x4BB172FB, 0x42DADC2A, 0x067118FF, 0xD0FD6F7D, 0xD382F568, 0xB38CBE6A,
+0x2339C065, 0xDF06B518, 0x04DB606B, 0x150BA130, 0x905175D9, 0x889DFAB3, 0xB4F72F4F, 0xBE07CE3E,
+0xED97BE9D, 0xF50C6182, 0x25B852A1, 0x1BE709CD, 0x00C0FA06, 0xB7D0B293, 0xBA676608, 0x47B30FD4,
+0x6E3DD0FC, 0xF868D131, 0x753FD92E, 0x0BCFFE38, 0x7524AAE6, 0xF101002D, 0xEF2940E7, 0x0E90A1B5,
+0xF159EE28, 0xA7B87790, 0x5C474E69, 0x2EABB31B, 0x41DCB2DB, 0xE8BF2BC1, 0xD9408B49, 0x5708B7B3,
+0x462A6DC9, 0xA58AD06B, 0x48B500ED, 0xF0B84AF3, 0xE1CAAF6A, 0x7660B3A1, 0x52046D15, 0xDF19E8DE,
+0xF74070E7, 0xDF9C1C39, 0xE4CE118B, 0x69307239, 0x7BD01868, 0xA96A52E6, 0x4109B89C, 0xD320DF40,
+0xFD21670C, 0xD22724B6, 0xB7A70D4B, 0x10F10842, 0x3156F7C5, 0xBEF36EC5, 0xB0E06C20, 0xF7DC0034,
+0x59EE2898, 0xFF72A0BA, 0xA6B0CBE9, 0x8B4C0C53, 0xBF3B680E, 0x43E5FA55, 0x9F192B7D, 0x4B6561AC,
+0xFAB89919, 0x4367EAA6, 0x53A63FC9, 0x24C30D36, 0x37B12989, 0xBA35DBA4, 0x520D072C, 0xDE65BCFE,
+0xB2BE252C, 0xD6BC607E, 0x37D61556, 0xF07E7C13, 0xAEA0DEEA, 0xAEC5611B, 0xC122E9E2, 0x219B55BF,
+0x35F88F8F, 0xFB0D3357, 0x64542554, 0xA0B01424, 0x461E731F, 0xE2AD76D8, 0x0D9F4274, 0xCC2702D9,
+0x624F42E1, 0x7EC67254, 0x6E3DD12C, 0x76E4EA9F, 0x3663D7DE, 0x2F0B1DE3, 0x6CB9BDB3, 0x97E72A00,
+0xECD8E1E1, 0x2E11262D, 0xDDE581CA, 0xBB4FB126, 0x47780CA2, 0xD06DD577, 0xF2C61D90, 0x54479CD1,
+0x9FAD1BC0, 0x8F981889, 0x567ABF1F, 0x6A36896D, 0x8FE6AFC0, 0x16B40217, 0x79659624, 0x39C65776,
+0x8F877F23, 0x2B6D9FC2, 0x3EB21BA4, 0x8831B14A, 0x46A12DC8, 0x3652BDF5, 0x52D0F3C7, 0x3B223FB2,
+0xB6D26234, 0x03715DA3, 0x8DE115E1, 0x0B466905, 0x13C5CD4D, 0x37B7E0C8, 0x99CF1AAC, 0xEE9A2463,
+0xE5C51115, 0xE454CDF3, 0xDBBA4719, 0xE65118C1, 0x5025AD41, 0x9964C320, 0x27BF7CC7, 0x97C9CD24,
+0xC4E680AD, 0x62FF8E85, 0xDB293555, 0x3E41CA0E, 0x755F51C8, 0xB98B32CF, 0xAE3B5261, 0x1C568861,
+0x4A822003, 0x1E8CED93, 0xCEE738C6, 0x79FEBFCD, 0xBF02B1A3, 0x65413267, 0x6A53D405, 0x56BDE411,
+0x88ED74CF, 0x8B3770A0, 0xC4C5F50E, 0x8DA0A7A4, 0xD2FFBA24, 0xE42740ED, 0xAC2755AA, 0xF9FBD89C,
+0x065F1A82, 0x73EE8B7E, 0x452615DF, 0x9A06BC9F, 0x379DE38F, 0xE1D6FECB, 0x8113C57F, 0x3F2DB44A,
+0x9C78D647, 0x85620625, 0xB162CBA1, 0xCE4119E1, 0xEF707515, 0xF0559624, 0xAF8F216A, 0xA6AAA7CA,
+0x86EF3D92, 0x4F472A1F, 0x3725665D, 0xDFA61B0D, 0x5F9492F5, 0x85F72D28, 0x23F64B5C, 0x79B567AB,
+0x8BE74765, 0x98D6DC55, 0x002E5721, 0x11A19981, 0xDE2FC7ED, 0x5FE83674, 0xCE9C6FD7, 0x506422FD,
+0x6E14C61C, 0x9F0918D8, 0x2B2D20F2, 0x444EF5EE, 0x606D0DBE, 0xB9D74E7D, 0xE85D0BF8, 0x6DEFC9E6,
+0x3CDC3CDE, 0x7FA63B2C, 0x6E9045A1, 0x8419BAA7, 0xCCD943A3, 0xC1F7AF89, 0xE2F77BFE, 0x1873262D,
+0xB342F617, 0x29A17F50, 0xBFF56D20, 0x8070F707, 0x9F4588E8, 0xB612DF52, 0x9E88606D, 0xA86135C2,
+0x9E33A05F, 0xBF32E10A, 0x5C1A1F90, 0x29122B11, 0x3D99248C, 0x380C980B, 0xFBEEF11B, 0x778451B8,
+0x143605ED, 0xA8C749E4, 0x778AB490, 0x80F349FE, 0xEE56956C, 0x03EE6856, 0x5D1F89B7, 0x676183F5,
+0xD56BE6A8, 0xA2501F95, 0xFB8BD976, 0xEA1E16A6, 0x47F52109, 0x547E7678, 0x967D8710, 0x2042B4C3,
+0xB21A0DEF, 0x3BC787F6, 0x4B14111E, 0xD869E374, 0xBEF6AD1B, 0x28717EAC, 0x383D55D1, 0x9F01E76F,
+0xCAD6D50C, 0x75F3A963, 0xA859FD6C, 0x28171792, 0x11C02E05, 0x4CB7E3DE, 0xB3255E30, 0x106C050D,
+0xB2B53A61, 0x4B05205B, 0xAD925ABB, 0xC6BF9686, 0xEC68490F, 0x39C70CF7, 0x16FED8C7, 0x27BA92E3,
+0x62C5E4DD, 0x453E9D9E, 0x5A561046, 0x33CBA391, 0x4A5F5D1B, 0xCB03C86A, 0xFEF8CECE, 0xA929E503,
+0x6E7E624D, 0x08204E2E, 0xB582D058, 0x09224AF6, 0x3FFB70D9, 0x2BB15A19, 0xA52DB0DE, 0x01329430,
+0x90B0898F, 0xB83FBEE1, 0x2D3A747F, 0x31135012, 0xD9656B23, 0x2D3D3D68, 0xD2AA104B, 0x17EFE358,
+0xE3BAAD89, 0xBB6C387B, 0x47F3AC9E, 0xB78FF47E, 0x7EAD9E9A, 0x6BB79AB2, 0x8AAC196C, 0x1146D3AA,
+0xCF7453EB, 0xF0FE7D16, 0x49D6C647, 0x3EEC835A, 0x5E9661D3, 0x97A912A5, 0x8C18F518, 0x0F05270D,
+0xD0F4FEC3, 0x3AB47E0F, 0x926ACE6D, 0x65CBC498, 0xBA4086A5, 0x3BCD1C00, 0x699479F6, 0x7BBD7980,
+0xFF52E385, 0x49DD2D9E, 0x473CE3CA, 0x098C9517, 0xE6CCCB04, 0x3BDED97D, 0x3C89A2B8, 0x272FF2FE,
+0x49AF9D09, 0xA8FDCBD5, 0xF58A1D4C, 0xB1065426, 0x3FFA4CFF, 0x9557A6B4, 0x5402AD35, 0x8756A64C,
+0x53E8D14B, 0x4DCE7AE7, 0xCA47BA40, 0xD13CDE03, 0xC28FB861, 0x08592B47, 0x707FDBDA, 0x39205414,
+0x05A44D65, 0x7C7CB4DD, 0x197EE68E, 0x884C4C24, 0xEE046FE6, 0x6DD7E0C3, 0xA685D3AC, 0x820A643F,
+0xD6612232, 0xAED49F63, 0x447E5F89, 0xF0894793, 0x63A5DB6C, 0x84BDAD5F, 0x4319F8F0, 0x74FC6E49,
+0x47E85A3C, 0x57FB7F73, 0x4095D21B, 0xE5242524, 0xAF3593CA, 0x6B5A964F, 0x6E164024, 0x71AD962F,
+0x5A189FAB, 0xCF5E9825, 0x0AEBA7F3, 0xFC450763, 0x28BEF433, 0xDFFC3FE2, 0x20045A8F, 0xE3694168,
+0xB85A011F, 0x78EA3FF2, 0xD6163276, 0xB5ECCED2, 0xA81E96AA, 0xBA3AB11A, 0x5F9A776D, 0xCA84DCB5,
+0xA7B8EDC3, 0x21659650, 0xAA26350D, 0x97922094, 0x3A07CE1A, 0x70DCB07C, 0xE55D0A49, 0xFB688415,
+0xE35A2D9C, 0x632CF582, 0x85C76C53, 0xE30C3E9D, 0x211E0E50, 0x05976574, 0xD359DE1E, 0xBB611534,
+0x4D9FF10B, 0xD31B6375, 0xB2788C63, 0xE8E2374C, 0x49DDE046, 0x3D5CDFEC, 0x70CF458B, 0xAD88F6E9,
+0xDAF95880, 0xF1ED05D8, 0x165BCBA0, 0x450A5829, 0x3CB1F77F, 0x9A622B96, 0x2F2B8A82, 0x444FD639,
+0xBBC0549A, 0x9988DF65, 0x8AD0A572, 0xF0B4D7DB, 0x18105AA3, 0x90DAA7F6, 0x541D244F, 0x333B1F82,
+0x3A8D7E1C, 0xCE9EE462, 0x55EE3597, 0xB5351039, 0xB79A7CE5, 0xF314478D, 0x7E914D91, 0x405B16ED,
+0x65BB63DC, 0x0D2B9237, 0xDA54799A, 0xDD6B3E2F, 0x0C896C5C, 0x9097F721, 0x4E419998, 0x84115A65,
+0xFBE74550, 0xEDD5F717, 0x8D609E3F, 0x868B6F1C, 0x786F4758, 0xFA14BB7C, 0x2E97E4F9, 0x45EA07AB,
+0x322EC337, 0x90AA7FD3, 0xCEF54251, 0x38AF8287, 0xE44CCD17, 0x339D2BE2, 0x48065FB5, 0xBA6252B7,
+0x4E1FB3C7, 0x7BE96AEC, 0xB100D667, 0xC272829D, 0x170237E0, 0x2D89FDAB, 0x3C5B7435, 0x9B2DCD61,
+0x44CB33E1, 0x0FA2DFCC, 0xC33CD9BE, 0x2E2D57FE, 0xDD376F22, 0x3922C4E5, 0xA7E3087C, 0xB14A5ECE,
+0x390599C7, 0x3D17BCFC, 0x03611AF6, 0xC7823F41, 0x5E77CC1E, 0xA3B58D1A, 0xCF45B9F6, 0xA7521F56,
+0x9EEBA2AB, 0xB415B7A9, 0x22E23831, 0x87FB9F93, 0x7F828C95, 0x5B2A1551, 0x0DC5745D, 0xD0FCB903,
+0xD4A59A16, 0xD8CE1F21, 0xFA42DBEF, 0xA64956B5, 0xCF2E486F, 0x7DEAA05C, 0x06019FA2, 0x1E167764,
+0x1F5685EF, 0xDD8DF3C1, 0x82DF8D3E, 0xD5B8B903, 0xF287018F, 0x02A8AB01, 0xBDC01806, 0x4471C480,
+0xEA5F5FAB, 0x8DBD97A3, 0xB70AB2F0, 0x2B0F89EE, 0xEF9D8CC5, 0x1C297BAA, 0xC9E256F7, 0xBE180FCE,
+0x9E21B59D, 0x37ED8208, 0x6BE58039, 0xFAC10E6B, 0xEC84A0B5, 0xCE6E13A3, 0x2D94BB60, 0xC3AA8A48,
+0xFC539247, 0x80ADDEB0, 0x2517EE41, 0x363000D0, 0xDC71DC45, 0xE036CDE6, 0xE1EED33D, 0xDBC23631,
+0x11266DE9, 0xAF618CA0, 0x612F5144, 0x89CF98B1, 0xE84F02C2, 0xD08E65BF, 0xE4CE9CF9, 0xC8A1C5C2,
+0xEB1A262F, 0x201DE4CE, 0xB8249D35, 0x126B59C9, 0x3CEB3B12, 0xD0A4ADAA, 0x367B9F7F, 0x5E53091A,
+0xF202389D, 0x55278FF6, 0x5ECB6B56, 0xAF32B6EB, 0x53AF7426, 0xBA7CADB0, 0x8374AEF6, 0x3769A8A4,
+0xCDB468DF, 0x73B0280A, 0xF31C3030, 0x452939CB, 0x7CDF5911, 0x395FA27B, 0x09866F00, 0x1827E99F,
+0x1102E058, 0x843446E1, 0xF6F6AF67, 0xE68DD2E3, 0xE2549944, 0xDB61C34F, 0xAD2074A9, 0x1C7D52F6,
+0x4EEFD279, 0x9B0324D6, 0xE4C73DAE, 0xE7F31016, 0x527E03E9, 0xE591771D, 0xD4E0DE10, 0x35A67CAB,
+0xD21CD938, 0x3DD3052A, 0x936AFD21, 0xDA2DAAD0, 0x9DC58F2F, 0x9FC89E22, 0xDF672D49, 0xDC6B1BC4,
+0x5A17F0AA, 0x3192A488, 0xA444601A, 0x1620153B, 0xCB986EDF, 0x0E0949C8, 0x3D687E1F, 0x3AD8EDE1,
+0x58B1C13F, 0x7B35FD8C, 0x3672E1C3, 0x875616A0, 0xAD2318B3, 0x724E9531, 0x8DBBA36E, 0xCE36CBFA,
+0xA236029A, 0x6C517735, 0x921C5EA5, 0xA0B3979B, 0xD8BCB382, 0x381AABC7, 0xCFF0A756, 0x3F2D4CCC,
+0xD512DBA4, 0x400BE468, 0x08BCFEB4, 0x909FE931, 0xA83E6539, 0xD3449EB3, 0x0C0202CE, 0x0A6436EB,
+0xA1498F1A, 0xB5F46D8B, 0x0E0E0CDE, 0xD6787940, 0xAB2ECA19, 0xEC189448, 0xA6C29D4F, 0xAE250E19,
+0x7C034C57, 0x6645723F, 0x263F05C6, 0x0EAFFC8C, 0x16B70F45, 0xB223D92E, 0x6F16ACD3, 0x7798C8AD,
+0x82F43151, 0x41BF70A5, 0xB3D9C2B4, 0x86DE8B4C, 0x7F5E0DC2, 0xB13601BB, 0xAF1B5242, 0x0EE35438,
+0x51C00958, 0x15D19FE3, 0xE422BE08, 0x3E5FA99D, 0xA8EFBFC7, 0xF705E600, 0x191D39D3, 0xE2B3645C,
+0xDC0BCA4A, 0x813B4633, 0xA51EBC0B, 0x7F4F5F79, 0x188304EE, 0x78E60FDB, 0xF9E7A9BF, 0xED37464A,
+0xB50CF6D6, 0x7AA8BC05, 0xF9ED17DB, 0x614E6943, 0x9F8EF03C, 0xADA6A241, 0xCF8CB1CF, 0xACFC79E9,
+0xA5A4D1B1, 0xAB36F70A, 0xDEE61603, 0x72627A19, 0xE3F15FD4, 0xBC16E996, 0xD0E7400D, 0x41840E72,
+0x94532AAA, 0x181AC380, 0xCC4CCE85, 0x18AA9394, 0xD4214272, 0x28C157DC, 0x5787BCD4, 0x1F7E3B04,
+0x02D05AC4, 0x6A79C37B, 0x88507255, 0xDBAC73AB, 0x455B2C1C, 0xA483AB67, 0xDCBDC573, 0x790EB00A,
+0x42F716BB, 0xC59CAC77, 0xEDFE7837, 0xC39CF907, 0x4D48EE0B, 0x2E6F65B6, 0xFB5FCCE6, 0x69272066,
+0xACD4A973, 0x8F97390B, 0x95D540D4, 0x80CF26EA, 0x5C2BCA1E, 0x0E31F1FB, 0x2E4CAA86, 0xB86158DF,
+0x6EBE1922, 0x9035A5F5, 0x70496A2F, 0x7D87E53E, 0x102EA28E, 0xC40D46B6, 0xDFEFB247, 0x34EA4ADA,
+0x9D641748, 0x486EBF7A, 0xEC8BBAC2, 0x6FBA3ADA, 0xD352316E, 0x26CC6598, 0xA30B7E24, 0x3ED80016,
+0xB922DA0F, 0x942BA41E, 0x46FC7CB7, 0x64C5B046, 0x7F440696, 0x61B298CA, 0xB019AF23, 0x27F2AD86,
+0xBBD20A14, 0x1868C4C3, 0xFF745A65, 0x491AAD18, 0xEAC59DDA, 0x47261606, 0x40322C59, 0x959792A7,
+0xEACD124B, 0xA8A8AE63, 0x3A8DDD8A, 0xDF98AAB8, 0x4F1C0203, 0x8C7B0DBC, 0xD5FADAB3, 0x18946267,
+0xC481ED3B, 0x4921B5A9, 0x7D1A5253, 0xE8D7DB8D, 0x55CADD00, 0xE4A59A2B, 0x53C9D61E, 0xA4FBAD2F,
+0x04C66ECC, 0xCB9A50A5, 0x24FE6F4A, 0x96A1B1F7, 0x8D0C763C, 0xB6DF8497, 0xC884839A, 0xB9EC744D,
+0xED902877, 0x4DE53658, 0x54B47357, 0x56D36CA8, 0xE731B252, 0x6ABF0EB0, 0xB2149A1E, 0x8059D3B4,
+0xF789CAD3, 0x365C98FA, 0x90827EF9, 0xCBA8C533, 0xD21E0074, 0x6420124A, 0x839CFFFA, 0xEBF13478,
+0x7F36DD2F, 0x1620F61F, 0xD2678579, 0xFF7DB946, 0x44F8D802, 0x13A10B4D, 0x538753BC, 0xCDDE73E0,
+0x8D64FBDD, 0xACAFF90B, 0x054F81B6, 0x4EA70BC8, 0xE4FFEE99, 0x1654D0B0, 0x4D53E3EA, 0x5DAB4987,
+0x70F3EB46, 0x579E73A7, 0x7E564B65, 0xCDC6B1AE, 0x0B41EFC0, 0x9CC99198, 0x77BF7E12, 0x2310487A,
+0x2792795A, 0x98ABCB94, 0xEAD4B5AF, 0x0D680FFA, 0xF510C14C, 0x84C0DD4F, 0xC1260042, 0xA79AADA6,
+0x23AD38FB, 0x0D18BDFB, 0x42ECE623, 0xB063DEE0, 0x86D58167, 0x2AAC4E15, 0xF6BCF522, 0xDA2E040D,
+0x5053C10C, 0x866E7548, 0x3F3066DC, 0x49BFA33C, 0xA21E5CBF, 0xBC931F42, 0xCAA0302B, 0x64A0809F,
+0x475B5FB5, 0x675709FA, 0x108DF6A8, 0x88F89657, 0x0365C097, 0x567A6073, 0xB1740AB8, 0xD6C2BEB0,
+0xBABA6CB6, 0xD2DD7E03, 0x44B0B92C, 0x59D97C9E, 0x9BE5DC5B, 0xF2715F39, 0xABD7274F, 0x3AFEB562,
+0xFAD36FC2, 0xBAED6F95, 0x73C79D86, 0x919B9886, 0x06B66E41, 0x2E38C1A7, 0x2811DF3E, 0xAC76DBD1,
+0xB8508261, 0x36E95343, 0xAE01B389, 0xB875AF44, 0x0DE554D0, 0xC11EE05B, 0xCA4A3EF6, 0x88542E89,
+0x038112C6, 0x71951542, 0x7A6FC15E, 0x468CBC5A, 0xE39CCC65, 0x43ADC64C, 0xD8DB19CD, 0xF5F0587F,
+0x48D8347D, 0xAE5C5166, 0x16261728, 0xCC0D3767, 0xE937BD50, 0xAC11EC8B, 0xBE7FB5B8, 0xFFBC8752,
+0x41EAD313, 0x62ECB2DA, 0x46729597, 0x2520E568, 0x54485FA3, 0xBDE87D19, 0x12076833, 0x6BF52D62,
+0x2638BBC5, 0xE46DD40F, 0x67D462D5, 0x1FDB2B4E, 0x0AC26013, 0x14FC595F, 0x9C2F5AD4, 0x668FA5B7,
+0xCFE9196E, 0x2469D093, 0x9DF7131F, 0x58943A74, 0x61BA759F, 0x975B866B, 0x4CD77A81, 0x96A478B8,
+0x4DF4AFAD, 0x1AAF89AC, 0x7968B20E, 0xA2DC14C2, 0x3FEF7855, 0x12715DEE, 0xC437CC00, 0x4068483B,
+0x37E54814, 0x2CE8C492, 0x0A37C273, 0x4DA18379, 0x171E1184, 0x51A9ECCA, 0x1200182A, 0x998BF404,
+0xA087839C, 0x3C089D86, 0x3CE8C514, 0x212D9160, 0xA2608068, 0xF2FFBE7D, 0x6D95027E, 0x04910B40,
+0x985336A7, 0x4FC1D5C9, 0x6A412B08, 0x6696ED43, 0x0A4AB037, 0xF475D703, 0x9E037413, 0x750BF48E,
+0x4156B115, 0x058FD78E, 0x5CC8640C, 0xED122538, 0x696EB227, 0xD8F3A01E, 0xC577498E, 0xA83C6864,
+0x2D5F8823, 0x8A5C6D33, 0x695E904B, 0x8FE8A56A, 0xE312BB30, 0xA5695DE8, 0xF46A72B8, 0x2722BFAC,
+0x968E2E7D, 0xC82FA33C, 0xAA8D3EF8, 0x58BE395F, 0xDFA44F08, 0x06EE5ECB, 0x9F4B1983, 0x31D7A5CF,
+0xDEC34178, 0xE672FB60, 0x73085E8B, 0x730E268B, 0x8D80545C, 0xFD49B2C9, 0xF7DB4E62, 0x4CAEC62B,
+0x616D21BA, 0xD3C77F4C, 0x26747212, 0x1FDCD57C, 0xD9471FB8, 0x50FDD530, 0x571D3AC6, 0x8FAADCC8,
+0xE27524C9, 0x9D53B3FE, 0x912DF517, 0x96554AD2, 0xB34BBDA2, 0x87FA7389, 0x6A414E82, 0x6A977FE5,
+0xA6EC46B3, 0xA3E59D41, 0x87278941, 0x27BFC554, 0xB3E4DCC8, 0x5B0FF34D, 0x5B8BCA0B, 0x527568D9,
+0xC765B059, 0x6FDCE035, 0x69647982, 0xFFEF86BD, 0x086F2ACF, 0x202677DB, 0xCE9D69C7, 0x13F81506,
+0xF227F21F, 0x44B3C764, 0x935B6248, 0x9DD60FDE, 0xBBF34C0C, 0xC7F1B262, 0x13157D46, 0x2DAEDF0C,
+0xE26FC539, 0x56352BD1, 0x9C87B997, 0xD2E3A0C3, 0x2FA2AA3F, 0x1ECE25EB, 0xFDA84E47, 0x8F17F4E7,
+0x446D6263, 0xA3256CC2, 0x6B5A21D3, 0x55CEC56D, 0x732549A6, 0xF908D006, 0x8D808DE6, 0x7556C547,
+0x6AB8735E, 0x27487DBB, 0xAB8638FF, 0x458E079B, 0xFF2C3BBB, 0xDF707BC1, 0x3AB2444C, 0xD21BE809,
+0xDDD26F3F, 0x176FE989, 0xDBF7BC40, 0x3034B4B7, 0x3877BAE6, 0xD31E63A3, 0x39828D42, 0x4B0EB093,
+0x8B5B0C44, 0x0F196D3E, 0x605DF67D, 0xCCE1905D, 0x5CD43C7F, 0x1F769CBD, 0xF86B605E, 0x1F54EDBD,
+0x6197F1DA, 0xF0C5A935, 0x80BA12ED, 0x3A610D99, 0xE4C50652, 0xF0F0DDC6, 0xAD577FE6, 0x0C26CFD3,
+0x879DF4E5, 0x6A474C0D, 0x2925A1C4, 0x2089FB9E, 0xDD6F6671, 0x56995500, 0xD798478C, 0xE42D6038,
+0x8E06DEFC, 0xA445A834, 0xDA136409, 0x05F60DE8, 0x52CA7B18, 0xF62A816E, 0xD225C71D, 0x8B583FF8,
+0xA9233DE4, 0xC1EFDD55, 0x381D76A6, 0xE20136F6, 0x9CC7CD82, 0x0F07A748, 0x50B0EBF2, 0xAC385D55,
+0x0D778006, 0xDFD57BAC, 0x637D336E, 0xC4CFB2CF, 0x771227D1, 0x3149A346, 0x7A56F5D3, 0xEC63513A,
+0xC9CE2926, 0xCE6A086D, 0x9F448185, 0x9D367EAB, 0xB90759C7, 0x9C3187BE, 0x50ABE688, 0xB7C9FB27,
+0x6F2CD098, 0x694B72C8, 0xE55CE99E, 0xB26DE61F, 0x60806D51, 0x4E6BF2AD, 0x463AFDB7, 0x5B6442A9,
+0x62D35801, 0x4292A772, 0x4018843F, 0xDB49857B, 0x93FFA3C1, 0x441E75D4, 0x21176EE3, 0x8A090C0D,
+0xBC56833C, 0xD3BAEA9A, 0x29AF9A3E, 0x4C2C73DE, 0xA3028968, 0xF3ED51C3, 0xDBD0DAEC, 0xF037C61D,
+0x6204B6D0, 0x4838DE19, 0x433BBA4C, 0x445F7F57, 0xC202062D, 0xAC69F2A1, 0x45BCE16D, 0xE93F7CBB,
+0x2F7A3E1E, 0xD814A791, 0x001947D9, 0x2CC46C53, 0x038B8B18, 0x5E918BCD, 0xB4E848F5, 0xE99A4DDC,
+0x89E1F4D4, 0xC316A7A7, 0x7B0CC1FA, 0xE22D7BA0, 0x8DED7A6B, 0x618E7859, 0x40812A8F, 0xC97D4297,
+0xA3890B46, 0xE5F71041, 0xB1160E27, 0x23F3A2A7, 0xB6D3D6F9, 0xF7975EB6, 0x8EAFD72E, 0x4B3E0F0C,
+0x4BDED2F0, 0xA194B970, 0x39A38700, 0xB44B7F55, 0xA74590DE, 0xEE1678A5, 0x371C7F93, 0x755BF60A,
+0x25BE310B, 0x8CBA4DB4, 0xD8E9E44A, 0xC081DE2B, 0x1A38452F, 0x1E866C13, 0x569A7589, 0xC6F20E79,
+0xCD806FB3, 0x7C5A4FF9, 0xBF31055D, 0x4499925C, 0x5C4F7798, 0x2CD0A95F, 0x29206850, 0x3A94C23F,
+0xEA5A843E, 0x2B2182E3, 0xBAA4F718, 0x3555308C, 0x1A49761F, 0xE89CB348, 0x9C001544, 0x8A262368,
+0x7BF14316, 0xB07B5C3A, 0x61E0CD7D, 0xDA7967B4, 0xACEE245C, 0xB7ED5ABE, 0xEB70A7DC, 0x3A4EC61B,
+0xAE50707C, 0xD67D8794, 0xB461ACE1, 0x0D1DDFC6, 0xB50C045D, 0x6682E5CE, 0x5D3DF0D3, 0x2371B91D,
+0x85F52231, 0x1206709F, 0xC03FF11C, 0x1D6B8752, 0x7B26916F, 0x2E0D60AA, 0xC4F0A860, 0xEC7F522F,
+0xC0A58A04, 0x96069EFF, 0x05DDA420, 0x28E923B3, 0x43773C03, 0xE179FB6F, 0xAE75920C, 0x2F49DA53,
+0x19B5AC11, 0x047431C5, 0x1D39FB1E, 0x401E50AC, 0xBDDE233C, 0xE7868E44, 0x13FB1CE0, 0xFB698357,
+0x349FB64A, 0x2ED4D4D8, 0x391EA651, 0xED36EE31, 0x84C13592, 0xA8F2F1F7, 0x095868E1, 0x3CA4670D,
+0x455BA573, 0xC81F4AE2, 0x5C4C1949, 0x31E35E2B, 0x9618ED64, 0x08F98E18, 0xC4D02827, 0x4D5EC946,
+0x2A7D556C, 0x26BD5C1F, 0xC97A9BF8, 0x11510F25, 0x10221F37, 0x8C365FB9, 0x5C8756BD, 0x62F39F25,
+0x28B9B4CB, 0x0990DD7B, 0x41B51C3C, 0x1EC0E28D, 0x32BDE4FA, 0xDE6090FA, 0xB2B33B73, 0x1CF7A4EC,
+0x6C28B204, 0x86BB2CFE, 0xE6CCB5D1, 0xC482BB2F, 0xC1C0E88A, 0xC2FC6E5C, 0x4B4DF624, 0x222ABAB3,
+0xE1D32A43, 0xDA9D1059, 0xCBC6EC82, 0x3791C49F, 0x499B6AF7, 0x7F670EEF, 0x5FB22393, 0xC8DA0C1D,
+0x243D9234, 0xBECC8114, 0xF3E96881, 0x7C42A57F, 0x61798E78, 0x0B4DD034, 0x098FD7A7, 0x6E6C3D85,
+0x18C39794, 0xC94F6A28, 0xF07EC569, 0x808D18B3, 0x4CAAEB0D, 0x283C260D, 0x8BF8645A, 0x7C799DBB,
+0xB2B04672, 0x77458D5A, 0xA6A22E60, 0x5415C1F9, 0x56C7D671, 0xBC3D6973, 0x386F817C, 0xBD9D834A,
+0x7987771B, 0x966CD878, 0x5E8D0D5E, 0x04455106, 0x7A0B7C06, 0xE8D14867, 0x2866F15D, 0xB91853F5,
+0x44BD3BDB, 0xB396D451, 0xDC9E75C8, 0xEE7F4F6E, 0x4DF60299, 0x9026D5E3, 0xA38E6013, 0x48D3D24D,
+0x2AEBC534, 0x49D0BBDD, 0x2E1859B4, 0x63C4069B, 0x2B46A09B, 0xE305256F, 0x7714EBB4, 0x1C8031F5,
+0x40EB1D4E, 0x51BD8C26, 0x0346740C, 0x535957C1, 0x0D74E3A0, 0xE53112CD, 0xF1929482, 0xFDD40D98,
+0x09B517B2, 0x5CEA4554, 0xD051B165, 0x15E0EE68, 0x159866BB, 0x0B1FA137, 0x528E6778, 0x7B685E78,
+0x4A5CCB92, 0xD0BA20E6, 0x85C24D60, 0xD408B04E, 0x8FAC5719, 0xDA0A2D82, 0x95F08C32, 0x5153976A,
+0xF9534B3C, 0x17A49228, 0xECF0065F, 0xF9D6A6B9, 0x71DFD17A, 0x5DB0B7DB, 0xD30114EF, 0xCB8B9046,
+0x3C518818, 0x291B75CA, 0x55CB99DB, 0x2437702B, 0x39A20D7F, 0xE7CDFC24, 0x1509C682, 0xDA719289,
+0xBA3FE4BD, 0x62DBD9B1, 0xA60EDEC2, 0x164DE94B, 0x0807339A, 0x5BBDAFFC, 0x2107111C, 0xA9DB5C48,
+0xA47C6E94, 0x6DC10668, 0x963C0707, 0x0F279A49, 0x67B254F3, 0xA8847527, 0xB0BCAFF8, 0x4AA0E743,
+0x351A4AD3, 0xB95062C5, 0x78790CF9, 0xED966A6F, 0xA5F3B20F, 0x865EE7D6, 0x59BBACD1, 0xE10E180D,
+0x8F4A2839, 0x2356061E, 0xC5B0EF0C, 0xC9E85E13, 0xBE842A38, 0x5303C46C, 0x7B3D260B, 0x2829EBA8,
+0x6B447459, 0x267866A8, 0xA0CA2C73, 0x71595EFF, 0x97AF07E8, 0x587C7AD1, 0x3C82D12B, 0x16174051,
+0x4A3CA8C9, 0xC2A72439, 0x516185C5, 0xE3CAD929, 0xC56FFF5D, 0x48859480, 0xABA06383, 0x52998B4D,
+0x12CB19CF, 0x3860C085, 0xF974A829, 0xE429AEFF, 0x04A51694, 0x20925EE5, 0xC39FF294, 0x646C1B8B,
+0xE20E0B21, 0x9FF8DF58, 0xFF17C52C, 0x82FE4AF2, 0x98BB032E, 0x71A8C8AB, 0x806DE01F, 0x1CD465D9,
+0xA29B6862, 0x8520F640, 0x52594C09, 0x810BC25A, 0xDC9DDEA8, 0x9A3629FC, 0x30EB5222, 0xBB8D8A0F,
+0x72A15F9C, 0xFC577EB8, 0x73135DC3, 0x882B7F89, 0xA24CF781, 0xCCF90100, 0x0C7B1BDD, 0x675FCBB4,
+0x24C84604, 0xAB7F3CB2, 0xCF32B7FB, 0xD3CED7C3, 0xEAF76D70, 0xA8AA7C7A, 0x7A23D0DB, 0xF7B53C09,
+0x6BF4DB28, 0xEE331C00, 0x01794743, 0x7075FEC5, 0xF4DB3162, 0xE1597B02, 0x2D718442, 0x82775FD9,
+0xBD2EF353, 0x0C1F160F, 0x025713D0, 0xEA6823E5, 0x7CB302D5, 0xBED10AB9, 0x64BC55CE, 0xB4F78FC9,
+0x61B600FB, 0xCF0BE1CB, 0x8546B7E2, 0xD354D7FA, 0xC9F52A70, 0x3FF77F05, 0xE41029A4, 0x9CF6D48D,
+0xF1C565FE, 0xD57EC6EC, 0x53DB47F3, 0xF7729520, 0xC43B5372, 0x1739666E, 0x676AEC10, 0xA0751250,
+0xCB0F525C, 0x1A766C7C, 0x733373F3, 0x0BDB46D8, 0xF94199D9, 0x15E1F5F8, 0x07ED189F, 0x301A93AC,
+0xF8AC46BF, 0x35A411C6, 0x233541FC, 0xA53877BC, 0x9A99C79A, 0x34AA1A35, 0x42ACF6B3, 0x8C914F4D,
+0x713A0519, 0xE868FA46, 0x2B680C15, 0x42D28454, 0x2AF666AF, 0x220B8A84, 0x473279F4, 0xE74E1594,
+0x79F999F8, 0x465C7A97, 0x58ED2C82, 0xA83322D2, 0x22F732A2, 0x8BAF4B58, 0xEEAD392C, 0xC72FA1C5,
+0xD871E3E0, 0xAD1DA69B, 0x24E713FC, 0x45C1C638, 0xBD567A6F, 0x7C1BD483, 0x69166610, 0x979BCFFC,
+0xF6279437, 0xF7F85E57, 0xEB8D6420, 0x9092590C, 0x4EA05C8F, 0xCB418CC6, 0x14725D7A, 0xC0000DF9,
+0xD26895E3, 0x8C3FC349, 0x07869505, 0x72560B38, 0xCBC50304, 0xC1AB1912, 0xCFA978F5, 0xD6436A2A,
+0x156BF3D3, 0xBCBB7CDC, 0x491C82A5, 0x040B3FC7, 0x0703AFCD, 0x063FB6B2, 0xB537A658, 0xCED11AA3,
+0x7D44B143, 0x437E8A76, 0x159CCF67, 0xE370D2A1, 0xD82D9916, 0x5F4D1A5A, 0x6DE05C21, 0x8A50973A,
+0x7E1971A2, 0xB23175D4, 0xA4697F5F, 0xEF4CC468, 0x4895DC43, 0x777F12EA, 0xCCEEB5E1, 0x8C647933,
+0x0B76E2C3, 0x8A70EF37, 0xCD7B7165, 0x44775A0F, 0xE1134263, 0x5F5E901B, 0x34803BC5, 0xC0C7FF3A,
+0xAF5DC3A6, 0x83EDE58E, 0xB5CEBECE, 0x212C72F7, 0xF896904B, 0x6C3579C6, 0x099C9B1C, 0xF86DECD6,
+0x9501918E, 0x771BD0F2, 0xDA30FBCB, 0x43DD1D0B, 0xBAC63EEA, 0x06BA1105, 0x8FB75DC5, 0x52FC8D42,
+0x372448A1, 0x39B8ACD0, 0x65CDEABA, 0xEF3EE42F, 0x7F9051D5, 0x1D56D3E5, 0xDC62FB68, 0x5A937FA6,
+0x9847842E, 0xC8403BA4, 0x314571D5, 0x4741708A, 0xBA284C36, 0x22717CCD, 0x72106F71, 0xB34FFAD5,
+0x466BD227, 0xA345F983, 0x44886F94, 0x8423DC2C, 0x303C6B7F, 0x316BFEE4, 0x2237D88B, 0x1D149772,
+0xFCA9AB21, 0x2A6959B3, 0x33F7E87B, 0x2EA47C9F, 0x93715167, 0x53C1E052, 0xA30318F2, 0xE02C2170,
+0x0A8D8B1F, 0x745155B3, 0xC58AB504, 0xCC5BE4D5, 0xAD500E0C, 0xA66CF352, 0x1A4FA4EE, 0x9529ED88,
+0x5AA1BBF7, 0x2602AAD2, 0xFD0F79EB, 0x66C44CAB, 0xE1620A2B, 0x3622F04B, 0xCA1D0E43, 0x0BD3E25F,
+0x87162562, 0x220542A4, 0x987FF450, 0x491C44A2, 0x72ECAAAE, 0x59F9E414, 0x6480AC74, 0x437F1653,
+0x2DEE6165, 0x1526585E, 0x82A60696, 0xFB772BB7, 0x48723003, 0x90D441B6, 0xE8978596, 0x90426522,
+0xC84EE48E, 0xE5C714C3, 0x1FF182B8, 0xF2F6F750, 0xC3F2FA3F, 0x921850BC, 0x37E68A1D, 0x00927298,
+0xA4F61BBB, 0x45741ED6, 0x516E135F, 0xB7627335, 0xE1B9900F, 0x86B8A0C1, 0x3B6DE490, 0x8972DFFB,
+0xE434D68C, 0xF46FC4CA, 0xA45EE13B, 0xAC2B7BFA, 0xC332E85C, 0xFCE11481, 0x9EBA3F97, 0x329C06C7,
+0xF4DB9C7D, 0x4DE01650, 0xFCA6AD16, 0x9DD20774, 0x357675AC, 0xC44F6DBA, 0x547EE49F, 0xF349AD35,
+0x084EC421, 0x7721F147, 0x3277A7C4, 0x5A6A5298, 0x05D9D820, 0x65EA1D24, 0x6BFFBE28, 0x40F2A9EF,
+0x4E4DDBFA, 0xDE7DDD24, 0x279A111B, 0x78EA73D9, 0x6468A631, 0x38D5E919, 0x86C2BC3E, 0x1D2DBD64,
+0xA7E8EA5C, 0x7BF0155D, 0x2AF8D3E0, 0x322A9448, 0x2D956CD5, 0x97CE1809, 0xC1525ACD, 0x9A46DCDF,
+0xFE04A7F1, 0x5AE5BDA0, 0x3B927CE8, 0x91BF32AD, 0xAFD1C4D1, 0xDA1D8736, 0xBEFAD191, 0x45115737,
+0xD9E8DE37, 0x3CFE6A2D, 0xAF12003C, 0x8457CADB, 0x652364FB, 0x530CF671, 0x4AD4A9CD, 0xF7B1EC74,
+0x8D88A5E2, 0x012FFA5F, 0x7B295ADC, 0xD025EE77, 0x6C2D5590, 0xF0814785, 0x7EF6BA42, 0x86E1E326,
+0xA1DF3F1C, 0x53D473EC, 0x8FDDEAF2, 0xF5345804, 0x06CC2D9A, 0xD655F3D9, 0xA7DAF477, 0x38A88CF0,
+0x1AB92D61, 0x19AECD7D, 0xF80E9E6B, 0x5172B84B, 0x433A058B, 0x6958464B, 0xD2DA3C2B, 0xFA47E1BA,
+0xF2010964, 0x78B27A91, 0x981C4533, 0x6C229B50, 0xCB3809CC, 0x090BD672, 0x4935362F, 0xC8D585B3,
+0xC660F11C, 0xA542BEBE, 0x39240B6C, 0x61C39E90, 0x4715FAB0, 0x3A7544D2, 0x2452157D, 0x2B5B75BD,
+0xE695C04F, 0x23883012, 0x9FB70E2D, 0xBA4B88C9, 0x941226FB, 0x2B5578B5, 0x8778807E, 0x19DBC272,
+0x8120628F, 0xE0649715, 0xE5296767, 0x4D66E3AB, 0xCAF1A9B2, 0xF34A9FC9, 0x2C34FB5B, 0xA5A67966,
+0x0AF06247, 0xF8F2CDEE, 0x2C00AD3C, 0x67388BDF, 0xA9D3021F, 0x0C28F383, 0xA9AB0C7C, 0x2CAA3FB8,
+0x439E9FB3, 0xA369ACB4, 0x2E9D769B, 0xC3ABCF4E, 0xA31D352A, 0x43537888, 0x40A06C1F, 0xAFAFAF6F,
+0xBF76DF2C, 0x254361DD, 0x79AD440F, 0x7D40453A, 0xF7CE8429, 0x6EBA88E3, 0xEAFF55C1, 0x492C0813,
+0x6D07CC21, 0xB5662DA1, 0x341E9129, 0x9C1D8114, 0xBEF7E3B2, 0x84EC3F96, 0x6D78FA46, 0x357C0054,
+0xAEA3394B, 0x019F120C, 0x0E4033A2, 0x7205FB35, 0xF7B8025F, 0xEED3E55B, 0xDC2E0AED, 0x4EEE8689,
+0xCBD9643D, 0x5D580397, 0xF5AA1609, 0xBF0B943D, 0xD8F8AB67, 0x22F6CBF1, 0x67297126, 0x297B2AEE,
+0xA7204D4C, 0x84C29465, 0x3821955B, 0x583D5EB6, 0x8BE0A826, 0x45E56B5A, 0x83F50169, 0xC8BBBD54,
+0xFF7D06EF, 0x11B37399, 0x70B898F6, 0xEFE3F6AC, 0xF355D203, 0x0224303C, 0x731BD171, 0xFB5F73A9,
+0x6853649A, 0xE010B842, 0x1F4F40C6, 0x5748083F, 0x36A81E93, 0x2E46027F, 0x6FB48DD0, 0xEFB68B40,
+0x7B2D07A8, 0x8A8A1533, 0xD9656DED, 0xA36195CE, 0xB5481EF0, 0xF1DE50CE, 0x7C6DE91E, 0x257B37D2,
+0x47C90D4A, 0xE4E4B373, 0x5C6D452A, 0xD2FDE3F4, 0xDD522539, 0x835979E6, 0xF9866BDE, 0x9F38F738,
+0x91A4DBB8, 0x0E9ADA94, 0x57700CCF, 0x2BD4065B, 0x3F3A9349, 0x8A150476, 0xBBDDA2FD, 0xDDCC32B5,
+0xA89F81E0, 0x6EF8F1D2, 0x3E18ED9C, 0x52F6B5CB, 0xBD22C8D0, 0x270C214C, 0x168AB1F5, 0x4978E2D9,
+0xE2ED07B5, 0x0DA137E0, 0x1745C537, 0x23BE6EB3, 0xD7F7B04D, 0x63030EFD, 0xC0A6290C, 0xC075E55A,
+0x3483FED6, 0x8FC297B9, 0x44949BA5, 0x5B4843B7, 0x6EA0D039, 0xCC65B533, 0x0087CA87, 0xF83EB581,
+0x5140F79D, 0x789471F3, 0xD65A6DBB, 0x8423457D, 0xAD1ACCD0, 0x4197D6C8, 0x108B7EC2, 0xFA429B02,
+0x6FBACD6F, 0xC5B1B9E0, 0x389574EB, 0x7821F04E, 0xD95827B9, 0xDA90D3F4, 0x217F5FD0, 0xBD21D9C8,
+0x6809172D, 0x6540E5FC, 0x46DCD3E9, 0x8D5D901D, 0xFBE4A484, 0x740CB247, 0x46E34610, 0x0D32092B,
+0x88EC7027, 0x669F899C, 0xC15C86CB, 0x9442D67D, 0x7803C072, 0xC651FA6E, 0x8F84AD30, 0xBF1191E0,
+0x84A1F034, 0xE07D27B5, 0x0D4D3F94, 0xF9B45A05, 0x32FBF008, 0x9AA6D73D, 0xC4F5BCD4, 0x68D3BDD1,
+0x2DC2EE41, 0xA2A80527, 0x34776B16, 0x4F0B7410, 0x3D63B042, 0xD908CDC9, 0x1FEB6DBC, 0x7E16B919,
+0x91DA2E91, 0x00324D43, 0xC561D0DE, 0x1101B20F, 0x1092D0F9, 0x547B05DB, 0xE493C081, 0x29649EDE,
+0x6AABD632, 0x192BF64D, 0x3D77F4AC, 0x19F4E1DD, 0xA3239122, 0xC5131E86, 0xE9951BDF, 0x1F84B86E,
+0x3C9331E9, 0xD2599B5D, 0x58D269C7, 0xF8F27C57, 0x324DCA3F, 0x8DE899E5, 0x1DBE4DC0, 0x5712B814,
+0x67C40DC2, 0x9F0306B8, 0xFCBA4394, 0x3CBA9E78, 0x4EA32158, 0x1FE1A70C, 0x5F182C44, 0x0C845F63,
+0x4DAC4FD0, 0xB98E27E0, 0xE1BD3EA1, 0xDCD22A4C, 0xF196A4BF, 0x1C2703AC, 0xF6C9F63D, 0xEAD82F01,
+0x09F5C63F, 0xF4FA7976, 0x8C75F27C, 0xAF0F8B1A, 0xFA723F3D, 0x3A9AD33A, 0x56306A76, 0xDD22BBCE,
+0xEF745CC3, 0x3BFC0CA3, 0x3273AA93, 0xD3C53794, 0xAE94A512, 0xF0B0D74A, 0xA20B3344, 0x9B506F26,
+0x98C0945A, 0xB6BC7903, 0xA9883A8A, 0xE309C2FA, 0x402C7ED0, 0x6B05B781, 0x6A979AC3, 0x0D57D66A,
+0x3C7561FC, 0xABAFA207, 0xD75D13A8, 0x8376BD80, 0xF1B6AF08, 0xFB960265, 0xAAA05A70, 0xC1A66F48,
+0x1B18281D, 0x4B9DA85B, 0x0D6D8D5E, 0x101473A5, 0xB607484A, 0x0BFC6486, 0xA78A5F47, 0x90B5C16A,
+0xD5E27662, 0xA8076BE6, 0x715504EF, 0x2B206730, 0x2FE5279C, 0x57A5C564, 0xE4EC9BB0, 0x3F029544,
+0xEEAB34E9, 0x2E925D68, 0xC3111FC1, 0x2747BFAF, 0xA9A9E48B, 0x0E3773B9, 0xB2AB874C, 0xE343323A,
+0xEA7F95BE, 0xB45FFBA7, 0x1C2D7621, 0x237692AC, 0x104CBBEB, 0x248D9999, 0xB198D664, 0xBF72DD46,
+0xAD13341A, 0x067A386F, 0xBC304B8C, 0xD1C2B5A4, 0xD973BAC1, 0x25584F5B, 0x92067834, 0x66BA7BF3,
+0xA5C9210D, 0xDCBA1B66, 0x96A3DC7A, 0xBCA58FB1, 0xFEDB85FD, 0xED0ACF52, 0x172092F8, 0x351ABCE1,
+0xA22C0521, 0xFA95F17C, 0xFA3777C1, 0xE11420E9, 0xC0057E37, 0xF9F7B8AE, 0x246AFE03, 0x7FF4CA83,
+0x1E365CEB, 0xD21DAD3A, 0xC71FF662, 0xB228BACC, 0x6F1260ED, 0xF5283F5F, 0x6747C4D9, 0xC84BF13F,
+0xCC767A4D, 0x76FF1920, 0x99CFBB58, 0xCBB4279F, 0xA15913B0, 0x7B8A081C, 0x18C5B0E7, 0x87BDD80D,
+0x2CF65104, 0xAFE0DE65, 0x952FD5EA, 0xC82DEE20, 0x6D859C4E, 0xA90F5F26, 0xFC5E9002, 0x83F88E8D,
+0x00048E4C, 0x4074C10C, 0xF14ED9FA, 0x3A793821, 0xE4D1669E, 0x7701E706, 0x8B262F62, 0x80C0EC42,
+0x43C31234, 0x76675075, 0x7A32DC4F, 0x632020B3, 0x9CC37B74, 0x8EA83C9C, 0x660E7247, 0xA42D59E4,
+0x73E6E4AB, 0xE8FAEF4A, 0xABFC811C, 0x22B14C6A, 0x1DCBC593, 0x0A4CDC07, 0x7F470384, 0x13B47FC2,
+0xA4883520, 0xA63A1780, 0xC616A0F9, 0x14AB69BE, 0x7C9EA960, 0x7EEEE9AD, 0x31138E8D, 0xE20659E2,
+0x7FA5F29F, 0xC139CF0A, 0xA387AA7B, 0xB636074B, 0x89604517, 0xE37B65C2, 0xADC19C4D, 0x68E6F7FE,
+0x002C7A7B, 0x5CBAF0F6, 0x07304EE3, 0x9C2B4E3C, 0x8EF1773F, 0x15859273, 0x173ABC39, 0x86415B91,
+0xA7F811F9, 0x9B372955, 0x8EDA61E1, 0x5B027D09, 0x81447806, 0x5A57DCD7, 0x999AE023, 0x36BFE274,
+0x17A9967A, 0x08A77FCF, 0x8A377E30, 0x3512EB8A, 0xE5AC05C4, 0xB68F9DE5, 0x9F6C0D3D, 0x3CD8B3FF,
+0x4F06C279, 0xF0CC2D24, 0xEB5270EB, 0xE0F15FB3, 0x199FE525, 0x12D83CF9, 0xBDBD98D6, 0x0CD3E859,
+0x4CAC1D38, 0x92A18330, 0xFD109561, 0x3F017A29, 0xFB49D4C4, 0xEEC9DDD9, 0x7E0165C7, 0x54F2180C,
+0x15A1EEB8, 0x3843BEF2, 0x8EB53F7E, 0xAF3A0C64, 0x340B44D7, 0x44470B93, 0xA2E2D99D, 0x0F2ADD1A,
+0xA7C62554, 0x1DD8432E, 0xB778BDC5, 0x2E90BB49, 0x603776EB, 0x233642E7, 0x237FA08B, 0xC6AF6265,
+0x73B66A44, 0x22A46A66, 0x3700BDEE, 0x54DD3190, 0x78E5C5A8, 0xFD8909A3, 0x432C1E6A, 0xE2FF84E2,
+0xDCBD184C, 0x85F4BBFF, 0xE5D4E14D, 0xBFB9C2EC, 0x6EF1FC04, 0xAFEBE858, 0xEBAEC9D8, 0xD4EC7B89,
+0xA9143D31, 0x4EA40E63, 0xDA077A60, 0x79EB8DEE, 0x6F5B77CB, 0x5914C66D, 0xC41F5EA6, 0xB37517CD,
+0x4AB239D4, 0xFD2B60D5, 0x848BCCCB, 0xF1A3AB64, 0xB30938E6, 0x17B76BA0, 0x1E055E72, 0xF1FC21E5,
+0xEB04B9DA, 0x78CCAA89, 0x799A0B74, 0xC019405E, 0x8A85C880, 0xF1301E6B, 0xABDE64A1, 0x06CB9A31,
+0xD0BE8DAB, 0xABFA201E, 0xB9B9619F, 0x9603A16D, 0xE390A0F8, 0x65EC1D92, 0xF875EDE6, 0xE82E921D,
+0xB7D501EC, 0x62272289, 0xB5C03901, 0x9AA90713, 0x8DCA3747, 0xBA6A7218, 0x329F4F4A, 0xAE80F9BD,
+0x49EEC150, 0x6E75D093, 0x009C4F20, 0x61A6A86B, 0x139FF8AF, 0x5A384818, 0x65573BD5, 0x2AADFAEA,
+0xB0110223, 0xCB140698, 0x28C82398, 0x2602109E, 0x99B47FAC, 0x6E67A822, 0xA587D90B, 0x9FCB5225,
+0xF5C743A1, 0xD1FD1A8A, 0x3395BAE1, 0x77EBA3A7, 0x1C177AD1, 0x15C79170, 0xF0DF08FB, 0x768BFE82,
+0xB27DA091, 0x4757853A, 0x1F45282F, 0x69667370, 0x6D4E9B0F, 0xFAEB6401, 0xA26994BF, 0x6E0FFE6B,
+0x3F646313, 0x1116710A, 0xBF9AF35D, 0xF6C19B4F, 0x1489EC8C, 0x64B7749E, 0x508D76B8, 0x63EE03AE,
+0x216EE867, 0x83BCB8FF, 0x7333C0C8, 0xF7612B6A, 0xC3F10DAF, 0xB605252C, 0x00CDD44E, 0x6957811C,
+0xE44B0835, 0x57832A91, 0x6A3FB143, 0xB1DF1302, 0xE1F1B355, 0x30320BD4, 0x9667EDD8, 0x2C89A5F4,
+0x77B457C7, 0x9814F3DD, 0x669D4898, 0x6939BA77, 0x62DB6D48, 0x00A140EA, 0x6556C9DB, 0x9424C7EB,
+0xB2CC8BB3, 0xC0191BB3, 0x01233FD8, 0x750BF9F3, 0x4D394540, 0x4E28919E, 0x63EC0CF9, 0x941DA512,
+0xEFEA7CC1, 0x75BED4E8, 0x11338903, 0xD1FD593F, 0x452A40B6, 0x854C2894, 0x44249756, 0x90E6FD8B,
+0x8906DC6B, 0x4E4A272E, 0x6D2BC1D0, 0x90D619C6, 0xBB55F1E2, 0xF1DB6E19, 0x03669951, 0x67D8676C,
+0x03C63194, 0x1CE8BC8E, 0x12CD29CD, 0xB38EF78A, 0x1C04308F, 0x3F0E4DEF, 0xA820F36E, 0xB4FEF8E8,
+0x19A84FBE, 0x79CF8D9B, 0xB4249F10, 0x75BE5D68, 0x8CD8C9A4, 0xA7B1BC0B, 0xD98F941A, 0xA5D7E0B5,
+0x6F0113B9, 0xB94BF71E, 0x56936A16, 0x6A07B203, 0x05AD9EA4, 0x03648117, 0xC715FF0D, 0x6E03834F,
+0xE375231A, 0x695DC343, 0x3EC3EC67, 0x92B8FBC8, 0x5CF2DF27, 0x7E7ED1B4, 0x01DB2B40, 0xCF4018A7,
+0x5BC4B01A, 0x14536E9B, 0xB164891F, 0xB52684C5, 0x6EA5D94F, 0x395216CF, 0x267FC826, 0xBEA9B065,
+0xE37DED53, 0xC201924A, 0xFC1A3C01, 0xDAC088E9, 0x65F9B989, 0x65B02D44, 0xD4AC8121, 0x0C70AA8C,
+0x9F3C6564, 0x93583D31, 0x7C0F98EC, 0xECA564E9, 0x61F68E35, 0x132F8A4B, 0x5BE5420D, 0x1CDF7226,
+0x64E0F33F, 0xB78371BB, 0xD2C545CC, 0x3709DB44, 0xFDCF8BB7, 0x3753E8D5, 0x698FFCD6, 0xD8B6F1B0,
+0x960E870F, 0x14EFD3E4, 0x39E8D58C, 0x834BE4D8, 0x4EA534A8, 0x28416AD8, 0x6CD30E20, 0xCAA1EE30,
+0x0A825F81, 0xE0AECBDC, 0xA68D620E, 0xA493EE52, 0xB0F83122, 0xCD5C6C74, 0xE0A21433, 0xEBD9F889,
+0x3AE44B77, 0x543436F2, 0x4488CC85, 0x3678C313, 0x50DCB4D3, 0xF4E18CEE, 0xA2308F9F, 0xDB15C7CE,
+0x4E154C06, 0xDB0F867D, 0x341F64F2, 0x2DC20D9F, 0x587F0DCA, 0xC04FAAA6, 0x26B68354, 0x0EF03D29,
+0x9F66833D, 0xD9672AE3, 0x553C6366, 0x80CA96BE, 0x671AF7EE, 0x276EFEFF, 0x25CF4FC1, 0x8B6DDF7A,
+0x42CEA28D, 0x4499D0F9, 0xF67FE7CF, 0xEDC8F2F2, 0xFDFB048A, 0xE6565CB6, 0x6155B075, 0x061EE15F,
+0xF0FB56E7, 0xA935DE26, 0x724D242C, 0x2297E226, 0x0CA8EAA0, 0xDFA0D4F3, 0xF0F1DE83, 0x7B34D896,
+0xD24E6852, 0x053A0D38, 0x2FB6704F, 0xB59A0A57, 0xFC512A75, 0x578A1006, 0xA4712A7F, 0xF3AC12C6,
+0xE236147A, 0x67F02220, 0x21CDF4B1, 0x4FD9F791, 0x01EA38F9, 0x10F6D1EE, 0x177DAF89, 0xC6C30754,
+0x1A00372B, 0xA31DD039, 0xFFC34645, 0xE6471101, 0x0CC42A81, 0xF72C3F89, 0xA83C51DB, 0x07E0694E,
+0x651F722A, 0x226DDD9B, 0x7E23B2EE, 0x2E5617EC, 0x2D7C854F, 0x75C1D2FA, 0x17C10F26, 0x7B8537AC,
+0xE7046BC4, 0xAE2A0F1C, 0x2BA04313, 0x82956553, 0xEE72B439, 0x6B1B427F, 0x246DBE5F, 0xACBAB66D,
+0x505A78A7, 0xA6EE6D92, 0xAC5CD52F, 0x8AF4D565, 0xA425A77B, 0x04A94391, 0xA5B4CBF7, 0xC7447038,
+0xE99045E4, 0x95B112CA, 0xC6076842, 0x11B19B4C, 0xA2A4911B, 0xAAA255AF, 0x335844A6, 0xAE8D32E5,
+0x718C624D, 0x9CDE225A, 0x36A0BDF9, 0xFD9E9648, 0x2D42B2CE, 0xA4B76C50, 0x8C368E38, 0xA8DD2027,
+0xBEA18AEF, 0xDCA71164, 0x873A330F, 0x8D218C4E, 0x600729C2, 0x7EF79E93, 0x4283C55C, 0xE1943E2A,
+0xAA8C396C, 0x8022FF3E, 0x3224ACBF, 0x56F21CFB, 0x3ACE8C83, 0xC9096525, 0x4BF84AFD, 0x3C1E15A2,
+0x994DF494, 0x86D8AAC0, 0x0E7706BB, 0xA8743727, 0x9C054BF2, 0xAA723357, 0xB4DC582E, 0xD10DBD0F,
+0x254F6C18, 0x11769930, 0x970E17D5, 0xBC5D9C57, 0x46F9B0A9, 0xC0D87C47, 0x757FE7F0, 0x77381B1C,
+0x62C3DD96, 0xD5697AD0, 0xD0A183E6, 0xE5A0D2BF, 0x8D5ABEBD, 0x9D23C455, 0xBACD4AC4, 0xAC4293C7,
+0xC8ED7D9D, 0xA1A7D958, 0xC281774B, 0xA218FE2F, 0xC05CC9E5, 0x505608B3, 0x67B27F75, 0xC736D34B,
+0xC0DC779D, 0x6E847A98, 0xBA3A9824, 0xFAD39FE8, 0xBECCD3ED, 0x1A3180EC, 0xE5CC32E2, 0xB0BBA58B,
+0xF8BD0FA2, 0xD0770025, 0x0451D609, 0xE7D92FB7, 0xA07439BA, 0x5647C1BA, 0xBBDAF6F8, 0x33F8A662,
+0xCC43D0F8, 0x5C675D0F, 0x9200AF6C, 0xABE45D9D, 0x4CDBF2AC, 0x65A5E40D, 0xF7B16419, 0xAB624768,
+0x304D3AEE, 0x0D3755EE, 0x788575B9, 0x149894CC, 0xA27B0C0D, 0x65899800, 0x6120D6CD, 0x4A8C1E84,
+0x0FDD1AED, 0xFC960EBE, 0x73F0611B, 0x8EDDAECB, 0x9302BB86, 0xD63B1B63, 0x8FCF8B3F, 0xBD3F85E1,
+0xFB2E6C2F, 0xE2CF90F8, 0xBEF849A3, 0x081649CE, 0x90B8881F, 0x49ACC0FA, 0xBAC0A04C, 0x396ECB3D,
+0x1308082C, 0x1D148968, 0xA26DA2BE, 0x1C54EE67, 0x7314E835, 0x64B9F3AF, 0x707A4F14, 0x23F51370,
+0x44316DA9, 0x08A1D0AF, 0xC1BB3392, 0x0A8CD39D, 0xBCD7354A, 0x0A0A1EFC, 0xAFD4E21F, 0x3506A066,
+0x89F24D76, 0x59463BEC, 0xEE86242D, 0x0FEC35D7, 0xBBA43ADF, 0xCFB5FDAB, 0x816E8732, 0x3BEC7037,
+0x746FB47A, 0xC37B2383, 0x80DBDAEE, 0x13BD90EF, 0xCA0E9FD9, 0x987D03AE, 0x4EBD85DE, 0x4F1292A6,
+0x2DEDF463, 0x78858435, 0xE5BDD02D, 0x2A4C0738, 0x47BAFD8B, 0x412D840B, 0x99EA0F3E, 0xA9FF7CE1,
+0x5A1FDABE, 0xDE3622F3, 0xDFC834F4, 0x8E25BC47, 0x6BE5B410, 0x97C5130E, 0x9FCB41F9, 0x51B6B156,
+0xC5FF6D0C, 0x4A7650D5, 0xFED7CDBF, 0x0B64E51E, 0xFDC5463C, 0x327CD22F, 0xA1D7E302, 0x16FABF06,
+0xEAF7EB60, 0x19489D32, 0x249461D6, 0xFD67EE99, 0x86CDE3E3, 0x788DDE7A, 0x1300DAB4, 0xA362FB5E,
+0x861038F3, 0xF137750E, 0x1CF10201, 0xA884590A, 0x8B00C92D, 0x40B3A47E, 0x1C9DE80A, 0x7B24FFE0,
+0xB6EC004F, 0x2A0697DB, 0xF88FBEBD, 0x9535A96F, 0xBD1E42C6, 0x7C17ED8C, 0x152FB994, 0x599F7F64,
+0xF8DD11AF, 0x872B00E5, 0x5784F551, 0xD462BB89, 0x88FC6046, 0x17F4F5FD, 0x5EC0A1FD, 0x10D99DA8,
+0x7545828D, 0x310A0BE8, 0xC89F10A7, 0x06991284, 0x1AEEF033, 0x188F1A9B, 0x759B72A5, 0x11395ED5,
+0xD8280076, 0xF4D058C0, 0xF6C88E17, 0xECB427C6, 0x3C4ACE4A, 0x24D6C046, 0x3B4FFBB4, 0x7E7222BA,
+0xD0323827, 0x26B9C507, 0x8F7E01DB, 0x134B2482, 0x8BB6E417, 0x789B4E1B, 0x5D0FC38E, 0x56EF41E9,
+0x7A9E1F94, 0xF12A7ABE, 0xA57CE9E5, 0xEC16A753, 0x8D69AC9E, 0x995C0235, 0xF802B3C0, 0x4C66D6E1,
+0x67AFC0DE, 0x2547B753, 0xD62EEE26, 0xBF5BB54B, 0x38E5D79E, 0xC9D43868, 0xA71E3124, 0x600CA6ED,
+0xA06594AE, 0xC47A4D0A, 0xD614B988, 0xEBE0F009, 0x3FC40EA8, 0xC0F2A90F, 0x79C16E49, 0xBE1F81C6,
+0xF6198C51, 0x6E9F36D1, 0x1E5D8B5A, 0x6953AF46, 0x6461CCD8, 0xBDE24730, 0x00D3CA84, 0x0200C10F,
+0x372347E9, 0xCEAF544C, 0x6E7CE5D5, 0xF33C33B5, 0xE86B596B, 0x1458C86A, 0x89D03BAC, 0xE32AFDBA,
+0xD270BFAC, 0x3DDB0A06, 0x92195934, 0xB577AD3F, 0xDE78F6EE, 0x994A211C, 0x0F8C4D7E, 0xEE3DEC6F,
+0x044BF5E2, 0xF926EB32, 0xF9F34B38, 0xD8945628, 0xF2914045, 0x2FD09B70, 0x30DA045C, 0x246771C5,
+0x29F072F5, 0xEE5A146E, 0x9DC980EC, 0x242B4B7E, 0xA0878E41, 0xA9937B9F, 0x8861D98A, 0x54D853F4,
+0x567DF861, 0xB6C79D67, 0x671F8A3E, 0x05052892, 0x95D5D212, 0x8385B5BB, 0xB18F044E, 0x6678527F,
+0x80F2BC9A, 0x8B6B5ACF, 0x0FB03D74, 0xB31F0E5B, 0x32B2CDD0, 0x48E4B63B, 0xD60A37D5, 0xD7716ABD,
+0x2DEC1CA3, 0xA577F56F, 0xA01ABE63, 0xCD26D64A, 0x52E6D7E3, 0x92523A5A, 0x017BCC53, 0xB2A0277A,
+0xE058C41F, 0xABAE6567, 0x89F06C76, 0x0411AF75, 0xD31D56C7, 0x587CA7E0, 0x5E3FBED1, 0xA5360EC5,
+0x71D1C7E1, 0xACFA69DB, 0x8F9099A1, 0x87F2E577, 0x252CD402, 0xF18E0E71, 0xF46BB4AE, 0xA1E701F9,
+0xEBCC7737, 0xA8C521A8, 0x3873F4C6, 0x83D49135, 0x6679F7B6, 0x3204C6BE, 0x9D6FBF11, 0x18E9F169,
+0x2A123F8E, 0x0C5A2A4F, 0x5032053D, 0xD50BBC96, 0xC3689503, 0xE2486286, 0x0EA0D015, 0xEA93E557,
+0x8F70C752, 0x6BF06424, 0xC9F8B655, 0x088BD0F4, 0x10ECC552, 0x0D1DA257, 0xA29AF3E3, 0x531AD83E,
+0xFD5ECFF5, 0x1E805684, 0xE794A491, 0x4B0FB9A1, 0x4197B12A, 0xCD1F7634, 0x72A5DFC1, 0x836B6598,
+0x5CB429AC, 0x7FCB8F79, 0x9358A572, 0x63349DCA, 0x679268A3, 0xE5937A7E, 0xB7FEA645, 0xD7265D8B,
+0x4E4F4074, 0x92281828, 0xA58DCBD7, 0x9C227FBF, 0x70A8D5DE, 0xB1A7D30A, 0xE7D7E30D, 0xD2889EC2,
+0xC99D33DD, 0x529BD858, 0x907C11E0, 0xA32485EF, 0x79322E7E, 0x0C62EB78, 0x4B455909, 0xCC13486D,
+0xDE3769F3, 0xCD679EEE, 0xF71AA570, 0x5A44ECBC, 0xAA4D27AA, 0x5E15C5D9, 0x391F93C8, 0x39AC5B52,
+0x9BE6EE23, 0xE08E3E0F, 0x38DB5A5D, 0xD6EEE4CA, 0xD528D2D2, 0xF04B0DFD, 0x3F2198A8, 0x92671A31,
+0xCFDD63E2, 0xDE808221, 0x8090CF01, 0x79CB8139, 0x37035E97, 0x6E9091CA, 0x65E1FB50, 0x5FA5F1A3,
+0xE0DD265A, 0x3583D61F, 0x44427BE5, 0xE2298589, 0x4B289245, 0xC08F2AA3, 0x7F3125EA, 0xDAC0A6FB,
+0x5A3CEF67, 0x2F5D4BE5, 0x35441962, 0x7D88B9A3, 0xDF90B658, 0x766CE50F, 0x628F8F72, 0xFBD73E21,
+0x646741BF, 0x40AE116F, 0x4E2B7C93, 0xE7172F0C, 0x63677EC4, 0x1841D819, 0x82F4D227, 0x9A97D7CD,
+0x178C29ED, 0x61C30D78, 0x9B007D18, 0x79CDA101, 0xCAC8AD26, 0x13106379, 0x1CE85578, 0x17F7D1DC,
+0x2A7E08B5, 0x63E567C1, 0x43230C44, 0x936015AF, 0x46016F3E, 0x401900D5, 0x032AE639, 0x29C4A785,
+0x58C95D0D, 0x83A60211, 0x474E7869, 0x30A296AA, 0x384A27FA, 0xE0CBB80F, 0x9B080DB6, 0x50D9A329,
+0xF1714DEC, 0xA404A99C, 0xF17E9FB1, 0x5E21B265, 0x9CE86773, 0x834BC0D7, 0x7BC7B2E5, 0x0B8A54F7,
+0x056AC810, 0x4DFFAB03, 0xD9B1ECC7, 0x7552E32D, 0xAC19DA77, 0xB4786F96, 0x02C72853, 0xC9B0BA8D,
+0x413190E3, 0x007DA626, 0x69FA3EFD, 0xE052763A, 0xA55EB742, 0x996FE4D4, 0x491BB556, 0xE870AFF4,
+0x35795058, 0x7C86FE1A, 0x4588AFEC, 0xE305258B, 0x2B2AB4AA, 0xD46A65CA, 0xDFABFC23, 0xEF9DAFCC,
+0x56927960, 0x7637FB8B, 0x27F5F681, 0x72295E26, 0x95295A5B, 0x5D068A79, 0x677080D6, 0xD3296987,
+0x6047CA1A, 0x541780C1, 0x9E8F8FD5, 0xCF552DDB, 0xB9C3ECF3, 0x582C708F, 0xC1DB77B3, 0x1F4E5473,
+0xC7408372, 0xDA7DDBFB, 0x0F6DFB44, 0xE38595A3, 0x75F78A56, 0x52FB4BDC, 0xAF504085, 0xF9A89C1C,
+0x54222F7F, 0x0BF5360D, 0x2E4C3E8A, 0x370F186E, 0x92E96F12, 0x10A1778E, 0x6ADFDBCD, 0x66B70E60,
+0xA51C6200, 0xFDA50AE7, 0x203C5496, 0x07CA9067, 0xAAE8E3D7, 0x838D0204, 0x91257988, 0xE1A1370E,
+0x79EE053F, 0xC2C14149, 0xC2354CBF, 0xC0C307F3, 0x0AEA30FC, 0xD0DB98A7, 0x4E5F1169, 0xC1EFC42C,
+0xD75576E5, 0x83BD1491, 0x4947AD3C, 0x9839B96C, 0x96D8A2F4, 0x6F55D5AD, 0xD9D9748B, 0x3774BEF2,
+0x82E469E5, 0x7AC1F831, 0x94C1BCEC, 0xB5653C15, 0xAA6AB576, 0xFE96BFCA, 0xD829B98A, 0x07D3BDCE,
+0x3B5A007C, 0x1D03A663, 0xF561D1CD, 0x7ADADBDC, 0xB252DFCE, 0xE3900F12, 0xCDA3F71A, 0xEBF0F63D,
+0xBE8FC28A, 0xE91F739C, 0xE88BDC01, 0xC66C2A0E, 0x3AC4B70B, 0xF3541A2C, 0x72D639DA, 0xD9E76C32,
+0x3EA26877, 0x66D69E16, 0x5CF37941, 0xC5C65B43, 0xF7FC1D61, 0x546FD36C, 0xB72EF7D7, 0x23C4FFC2,
+0x7E9E5EB2, 0xFA770443, 0x6FAEA748, 0x89E86067, 0x2788733F, 0x0D32EE97, 0xBBD25E5B, 0x8C88C0EF,
+0x57C2E551, 0xCEAF048E, 0xE2839CC4, 0x88DF2869, 0x71DD83F3, 0x1596A529, 0x0498C4E4, 0x5A322E96,
+0x34D5186E, 0xBC567A84, 0xAF3BA23C, 0x591D0B4A, 0x5685F42A, 0x8146E6AF, 0xC49381A9, 0x2CDCD238,
+0xCE568A1D, 0x92B1AA3C, 0xA668B4F7, 0x6DBB0304, 0xEE0342C3, 0x3E170A63, 0xA2EAF604, 0x76CB8430,
+0x58D7F54A, 0xE90EDF69, 0x12DA3B18, 0xD0DA15C6, 0x775FA363, 0xF32D1C0C, 0xCA01F072, 0x71F7A79A,
+0xE0027593, 0x135E7B2F, 0x9F0A07E9, 0xCB20C3EF, 0xE6DFD428, 0x3D3D0094, 0x7E9247E9, 0xC641523A,
+0xCC20D8AB, 0x67FEF7F0, 0x7E160EA9, 0x06C05AD4, 0xD34F44CD, 0xAC793418, 0xE19A015A, 0xDA6CD4FD,
+0xFED63BC8, 0xE02BF77B, 0xC4ACA992, 0xD53E40B8, 0xEA181BD8, 0xD359B76A, 0x49D90A20, 0xFCEE7FF5,
+0x58C7A2D7, 0xB1B82991, 0x9B5AF51D, 0x2DFDE665, 0xC269F4A9, 0x2988A0D7, 0x573F2C6A, 0xB815208C,
+0x503F6373, 0x5636E9E5, 0xFC83F31A, 0xABF3E274, 0x18E14DC9, 0x1EC488B8, 0x3DD31AD4, 0x768717F7,
+0xAE09562F, 0x15194A17, 0x8CD6A7CC, 0xB6DD6892, 0x769A17FE, 0xD1B417C8, 0xF791E1F9, 0x4711210F,
+0x3F3F8A14, 0x42F6E922, 0xFB42CFDA, 0x3FBDEF73, 0xFCDA7C43, 0x88B3233D, 0xB576BAA8, 0x68F81E25,
+0x9DFBE9A7, 0xA9677723, 0x3D5F3375, 0x5D2D342A, 0x20627CBC, 0x9B869425, 0x60C326F6, 0x1C8B02B5,
+0x2ECD03A6, 0x6DD1FA36, 0x05081156, 0x32BAC693, 0x11930112, 0xBE01DD0B, 0xA31814EC, 0x12D80F3F,
+0x9572E2D6, 0xB3606054, 0xB0157BEF, 0xB1FACDBF, 0x4D8C1F68, 0xE1282C8B, 0x358FF46A, 0x167FF4A3,
+0x056F186E, 0x84DEBFFA, 0xA6662F8D, 0x20224F54, 0xE45A163B, 0x1B4CC4CE, 0x5193436B, 0xD1E72605,
+0x523F6288, 0xC56D755C, 0x53DD280B, 0x490F2A22, 0x4DEF687D, 0xBA007462, 0xC8129773, 0xF904263D,
+0x52733F43, 0xFA57A820, 0x62DBC08E, 0x0702E55C, 0xD7CF0C23, 0x9430AAE2, 0x0DA7D598, 0x1E217C5B,
+0xF849799A, 0x1E1B8015, 0xF099727E, 0x0D4A9EBD, 0x32808C01, 0x9A343D0D, 0x2CCB1D5E, 0x2BF17EAF,
+0x53C57EEC, 0xB90B7362, 0x28CCF6F0, 0xC3885013, 0xA1A6C69B, 0xB33A3E7F, 0x8777DFD5, 0x9594ECEE,
+0xB9C0E9B0, 0xBA526F1C, 0x2556FB5E, 0x4166BEAC, 0x9A7F9648, 0xD490C784, 0x92D0967E, 0x47430D83,
+0x5B4C40B2, 0x310BC0B1, 0xAB3DD8A0, 0xD8CFBE70, 0xFD67154F, 0xD6F8A08E, 0x125A5DDC, 0x71C59969,
+0x0E0C2C01, 0xE39BEB58, 0xB945D12F, 0x3A244BAF, 0x7FADE4F5, 0x1D01CD3D, 0xBB0D030C, 0xF795F226,
+0xE38D66D6, 0x82211E98, 0x0563C7BD, 0xC7082350, 0x6B35871B, 0xDE0687D6, 0x3ACD6763, 0x762092B1,
+0xCC869A13, 0x991608C6, 0x5A699D58, 0xD4FDFB70, 0x197A7987, 0x6C34B3EC, 0x9E0651CF, 0x0BBD3056,
+0x70925594, 0xACF24D0E, 0x8C2388FF, 0xC9B2BEA6, 0xAD95EE3C, 0x3020DB95, 0xD10D26DA, 0x3C881B05,
+0x6A27A75A, 0xF27D6FC3, 0x20AFC1D5, 0xB39F73DD, 0x53F12ED4, 0xF3A87F97, 0x23A0C68E, 0x53B96B9C,
+0x6003569E, 0xC23029BC, 0x9F8EEFD9, 0x6EB6288E, 0x89E3AE17, 0xD674B053, 0x5DF37C71, 0xE3032360,
+0xEB9443F3, 0xA18B9608, 0x7EC177DA, 0xB74E0D2A, 0xDD2C8ADB, 0x7843008C, 0x3F24ED96, 0x3AD91D5F,
+0x3C761B66, 0x50467E77, 0x1EA94F42, 0xA5E7B377, 0xB3DD8110, 0xBC758B48, 0x22EFC775, 0x9637C386,
+0xD9C4EAFE, 0xF575CD42, 0x3213302D, 0x692B81F1, 0xA06F75F2, 0xD1BF42D0, 0x506B2BFD, 0xC3AFFDFF,
+0x75D55F54, 0x70F65176, 0x7C271A8B, 0x8818BB52, 0xC2A2266D, 0xF4E8F5B4, 0xD636D303, 0xADC0D6A3,
+0xE69C0AFF, 0x6C67A933, 0xEE862379, 0x32A1ACAE, 0x8D091AD0, 0xFA47EB4F, 0xBF150982, 0x9773FE10,
+0x92E2A30A, 0x4280C325, 0x4A79D79E, 0xA9456358, 0x21B9CE9B, 0xDF50A099, 0xF769A5B0, 0x4333B423,
+0xBA0D9ECC, 0x20D5B35F, 0x4717D31A, 0xC3606D78, 0xC94E4B13, 0x8210A52B, 0x9821D712, 0x3F1E698B,
+0x66A97457, 0xE03BB50F, 0x2EE4F7BB, 0x514F7591, 0xC3C50A9D, 0x7C716A2C, 0x469C0446, 0x046DA319,
+0x15753190, 0xFFDB0ED9, 0x3E7BE38A, 0xD3F915E4, 0xDA52C88C, 0x0B8D1D9E, 0x849604E5, 0x944129E6,
+0x4E385C9C, 0x5008EF0D, 0x2946AA78, 0xB5DFE0E4, 0x035528CF, 0x14F1B926, 0xEF6A3AB8, 0x01BE5BE3,
+0xACFAED91, 0x856E8EAC, 0xF1542BA8, 0x78AC4B00, 0xA2730F63, 0xCD822E0A, 0xD4090068, 0x5C406A04,
+0xFAAF96F4, 0x97BB3778, 0x7B900E0D, 0x60140446, 0x48BEB882, 0x8DA5BF7E, 0x01337609, 0x515A420A,
+0x7F4F0811, 0x16090F97, 0x42EBF4B9, 0x7BA1B43E, 0xCDFA7391, 0xB619142B, 0xC6132DF0, 0x686BC914,
+0xE408351A, 0xE000A017, 0x99F518BC, 0x1FD9099E, 0x92452FC5, 0x0E82373D, 0x5F6E8DAD, 0xA9E613C7,
+0xD207A0D6, 0x7F7D568B, 0x09F2DA95, 0x2E3466EF, 0xFFBC82C5, 0xC79994FF, 0x1B4158C6, 0x912338F5,
+0x9E0EFE57, 0x1D4E74C8, 0xDB66FB69, 0xF0A9B6C2, 0x47FA566B, 0x15B60619, 0x02633485, 0xEBDE31C0,
+0x13FF50F7, 0x9C7C4786, 0x52E8B73B, 0x95D23C98, 0x045842E6, 0xC87B2B9E, 0x54844130, 0xF0C79E0C,
+0x88DCCDC6, 0xF59B2919, 0x14894F64, 0x90A399B8, 0x14922494, 0x77E9B8AF, 0xCBE7866A, 0xD4B34909,
+0x950B3C71, 0x1D36BB9C, 0xEAF298AE, 0x0DC0466D, 0xDEA47713, 0x112BE6CD, 0x1DE5F13E, 0x50EF2F24,
+0x4C3AB1CB, 0xE4465E26, 0xDA20B996, 0x74E8CCE5, 0xEE043CB0, 0xFDA1C984, 0xEF8A2288, 0x2AA50B85,
+0x0ED3D755, 0x0AD5829E, 0x12361AB2, 0xF675CD48, 0x6B22945A, 0xA37B622C, 0x79462C3E, 0x2C1002E6,
+0xA1234373, 0xF7BAEAB2, 0x0B4776D7, 0xF9DE1D52, 0x8A1051D8, 0xEDDB31C9, 0x871592C0, 0x2CFF679F,
+0x8DCB8CC3, 0x6A496740, 0xF6D8F706, 0x2C7B496E, 0x54F268D9, 0xEC22D858, 0x9EA713D5, 0x06061A05,
+0xAEE52324, 0xE683F218, 0xAE07F2E2, 0x8F87F54C, 0x1F4B0BB5, 0x0BC23906, 0xBD3A5542, 0x896B1B67,
+0xEDCA0250, 0x17F160E9, 0xAD700300, 0xC1D076E5, 0x22096381, 0x28D572E3, 0xA11A3EBA, 0xBC294F74,
+0x335430EE, 0xDCEC4A2E, 0xCF08D5A5, 0xADC26690, 0x3C379E4E, 0xF5D6DC5B, 0xD33AEBC7, 0xFE94928D,
+0x11623C87, 0x4ED72EB7, 0x7D66A27E, 0xA0572250, 0x9C3AFFA1, 0xA98DED5A, 0x8BC5D473, 0x79A1D360,
+0x5DEA4033, 0xAE07DE7B, 0xCC3D05BB, 0x7BFD4889, 0xFC296C03, 0xA0A2858E, 0x91CB28ED, 0x164788C5,
+0xDE55BD88, 0xA40BB751, 0xB7A9E272, 0x15AA5918, 0xD45EA1F0, 0x27F8B850, 0x84A9B8B3, 0xAC4D2BC0,
+0x53676E6F, 0x1EB9FF0B, 0xC0867410, 0xB3C697AF, 0xB4B1D5CC, 0xB06B3D2D, 0xE70A610E, 0x1AD29E19,
+0x3476B5C9, 0x9E1F0C0E, 0xA0B15EBB, 0xF9166BC1, 0x35AEF82D, 0xD7878128, 0xBBD749B5, 0x01D8F6F1,
+0x9B4C2C70, 0xDF992C89, 0x1EE19298, 0x608787C9, 0xA98DA78F, 0x73902BA4, 0xFE1DAA08, 0xDF82E61C,
+0x4C1F4FA5, 0xF70E50E2, 0xF8A40A7F, 0x84CF57D5, 0xBBEF61D1, 0x73E9476C, 0xCDB5EC87, 0x5CA4DF02,
+0x41DD71A9, 0x9338134F, 0xCE15336A, 0x03A77BF8, 0xA0FAEE51, 0x4F26EF94, 0x202E314D, 0xD90DFA54,
+0x7C590280, 0xEF677EFB, 0xC9BA5127, 0x4A997145, 0x2DAD098A, 0xEABF961B, 0x1121AF5F, 0x09F650D0,
+0x906D7BC3, 0xB2FC29D3, 0x6F297816, 0x2B23F2FD, 0xD6A48CD2, 0x7E3FE712, 0xD556DB6E, 0x4865F8BE,
+0x4D102491, 0x31685335, 0x4D896C97, 0x7DDCCFD8, 0xB1FD44E8, 0x8C0C66F4, 0x777E48C7, 0xFEAF7103,
+0x9B86A05A, 0x32590096, 0x45C4663A, 0xBF223C87, 0x0B4CE12B, 0xBBA265EC, 0x98EC4579, 0xC5B1F1A0,
+0xD6FCF37F, 0x7F0B7874, 0x84A38372, 0xCB533499, 0xDD3B4428, 0x92BAF3A4, 0xD8294549, 0x71ED68F4,
+0x109A8F25, 0xAAB79074, 0x07CF61AF, 0x973144DC, 0xC6F31BA6, 0x55ADCF90, 0x3F046158, 0x0755354C,
+0x599141ED, 0xB88AB562, 0x0E2DD843, 0xEF71C7CB, 0x164EFEC2, 0x3C8BAF37, 0x7728D83B, 0x273C1E94,
+0x13C9ABD8, 0xB72BE93E, 0x08D6FD9A, 0x3CC96C97, 0x492D97C1, 0x0CCA60AE, 0x697848D2, 0x5C95FD7E,
+0x1020E6F7, 0x3B58813E, 0x2D336349, 0x5D85E3AD, 0xA4724669, 0x7D15A837, 0x971BE73F, 0xAA2E00E4,
+0x2F1A538F, 0x2CAE746C, 0xF589C086, 0x7083A361, 0x34A307D2, 0x5DCC1815, 0x910DDA76, 0x5765E931,
+0xE9A82AB1, 0x9B00129F, 0x1351577E, 0xCD2E9550, 0x7BA16D82, 0xDA56D9D2, 0x4918C8E6, 0xAA2B21EE,
+0x88110613, 0xFE618535, 0x95511DBA, 0x0ED6371A, 0xA36E7B5E, 0xB380877D, 0xB776FAB1, 0x00379DFC,
+0x5447FCCB, 0xA34ECB69, 0x81D967E8, 0xAF40B7F4, 0x4BEC1FF1, 0x8D6F9ECD, 0x278799D3, 0x67EC0B39,
+0x4AEB5570, 0xD67D143A, 0x9E6364F1, 0x8428E81A, 0x0705F5AE, 0xC985BBA6, 0xCD423B27, 0x7272DC37,
+0xF2B4F7EB, 0xA73DDFE0, 0x0A7F31C9, 0xBDDACADF, 0x1D4DA612, 0x98466907, 0x8E499E56, 0xD7F79740,
+0x8F8A8511, 0xB0DD52FC, 0x1B1CE1CD, 0xC7BFF0A5, 0x92A126D8, 0xDB2A32B8, 0x025FF64F, 0x17100EC0,
+0x6581075D, 0x700CDA51, 0x4DAC606A, 0xD3385E52, 0xA8A76245, 0x5D536D78, 0x73AD09E3, 0x36258D5F,
+0xE763CE77, 0x9B8F8D6B, 0x4E9843BB, 0xBDEE06DC, 0x5096E8E8, 0xDD189431, 0x24A51E84, 0xDC41A118,
+0x1DF8A758, 0xA383C784, 0x9735541C, 0xEEB9C990, 0xF9DE2F7A, 0xE4F3EA60, 0x60E9732F, 0x1B6F0828,
+0x6CF59676, 0xA98E7528, 0x6990EC94, 0x401D4827, 0x9E2B2EAC, 0x6C383CED, 0x8CC351B4, 0xC470F891,
+0xD49AEEDD, 0x323C3ACE, 0x163ECAAF, 0xCAB5840F, 0xC02EE28D, 0x7A6284FE, 0x795F8FB5, 0x52990FA1,
+0x8655D7E7, 0x50E66599, 0xADEF336C, 0x0663F4D3, 0x8A9185F3, 0x7E8C321E, 0x5E112445, 0xD9BFEC59,
+0x0E4E13A7, 0x9EB6754C, 0x44872D67, 0x8DDA7DB0, 0x74B6D0D6, 0x25E2A721, 0x5ADFEB71, 0x88262CD9,
+0x0491CBEC, 0x5CE452A6, 0x2B01A6AF, 0xE9B01889, 0x9021503C, 0x8B006D60, 0xE0D57880, 0x6994AB02,
+0xE33556C6, 0x1DC42D53, 0x67BD17BB, 0xD1A88798, 0x01170829, 0x8333809F, 0x05AFC238, 0x33134E6C,
+0xCCF1D1D2, 0xF2B9DCE3, 0x5130D4E5, 0xF05129C8, 0x9D0E0DBB, 0x8E6464DC, 0x8902CA94, 0x3B0A6690,
+0x70692A79, 0xDB172297, 0x5254C97C, 0x189ACBD7, 0x782FE0D4, 0xC39375C9, 0x784DEB86, 0x17F567DC,
+0x237BE2C9, 0xDB1A8E1D, 0x3378E37A, 0x1922DB06, 0x986E6705, 0x404214FB, 0xDB772CAD, 0xDF03CAC5,
+0x6CC0C532, 0xFC27EC4B, 0x6A406FCB, 0x89538ADA, 0x2BEF638B, 0x86B06CB6, 0x4CCF69AA, 0x033CC66D,
+0xD036DE31, 0x68AF7413, 0x53A8C9DE, 0x0BD7DD8E, 0xDDCA7B0D, 0xEE7F09D3, 0x042AF330, 0x900B4832,
+0x5490191F, 0x730329AE, 0xB3F38397, 0x1310C477, 0xF3D267CD, 0x5ECD71FE, 0xC9B9B71C, 0xBC9CB2CA,
+0xDD5FD6EA, 0xE6091526, 0xD8164E7C, 0xD127976E, 0xE3036CCE, 0x58DB908A, 0x464E730C, 0xCA9D9DF2,
+0x168388F5, 0x2E9EE1AB, 0x2B91F637, 0x168002E2, 0xDB111761, 0x4DA3D73B, 0x97FB3A03, 0xBEA5162F,
+0xC8B299B9, 0x2254C75D, 0x7FB90D4A, 0x226C09C7, 0xA7205C52, 0xE53B9D42, 0x1280E30E, 0x38F23BD7,
+0x00528987, 0xBAAFDCF9, 0x5905E5B4, 0x9D36A234, 0xEAE2746E, 0x49FD16D4, 0x59ABC1CB, 0xC0AF1997,
+0x17210C5B, 0x9DBA88DA, 0x04F105F2, 0x1D9E8F0B, 0x6B5967FB, 0xDA5D3CF7, 0xE330E116, 0x9A440E5B,
+0x8AE7A296, 0x5D985C6D, 0x04391785, 0x2F32C515, 0x3FFE542A, 0x2AA9C6DA, 0xBA547D48, 0xC1664BA0,
+0xB3B11970, 0x14F42F2A, 0x0A8695D0, 0xFC25A971, 0x6FC224D7, 0xAF06C8C3, 0x8DCE76DB, 0xCC5E458F,
+0x9222B203, 0x468F4113, 0xBAE4192B, 0xF5539AC1, 0x6EBA6985, 0x7B98DE30, 0x4F112A2D, 0xA72DEA02,
+0x2B7EEABD, 0x4D7F12D3, 0x102D4977, 0xB212CC22, 0xFC516438, 0xCA7A3930, 0xE2C1B59C, 0xF45C28A8,
+0x1571DF90, 0x4D9C1F8A, 0xBA01E8FB, 0x7FCFD17C, 0x847E67C8, 0x27391ADA, 0xC98E822F, 0x6665B008,
+0x0EE19BFA, 0xF2047F03, 0xC6225C2C, 0xD266FE22, 0x98877ACA, 0x3C72BE92, 0xD4791B18, 0xD2CAEEC8,
+0x1B9A2F36, 0xBE926A67, 0xCAFBC318, 0xA353A235, 0x1B8C9A2E, 0x9975D1AC, 0x24B6E169, 0xB7B50C31,
+0x41184520, 0x8762248B, 0x032188B8, 0xC057436D, 0xB7902D1C, 0x40921D9F, 0x78F8D84E, 0x5E0879C4,
+0xCC457736, 0xF066CCB6, 0xDBE7E504, 0xD24B5FA6, 0x839213FA, 0xD9A1E631, 0xD9B01EA3, 0x36B1DCD3,
+0xF25BFA69, 0x361CB034, 0x7F006204, 0x3EAF8E5F, 0x8EDEF3FE, 0xBA6A037B, 0x5E31BC6F, 0x1CA499AA,
+0x5DC7E021, 0x130EC535, 0xA9B8F4F5, 0x089BD54F, 0x0CA0FA78, 0x16BB91C5, 0x5FACA984, 0x33ECFB59,
+0xE55DB5D4, 0x06B2F441, 0x300F7FA2, 0x53338F19, 0xA03A0BFB, 0x42BD817B, 0x7DD4F98F, 0x046A9399,
+0x94B63CFE, 0x60101483, 0x02AFD570, 0x7ADA4B77, 0x77D42B75, 0x1BF00546, 0xD69DC07C, 0x274B638E,
+0x780E87C1, 0x7E2868B9, 0xFA5EFB9F, 0xB1CB539C, 0x576A6294, 0x716E5007, 0x1F18B02F, 0x3C65DA7A,
+0x51DE34F7, 0x7EB60A30, 0xFC6B9339, 0x2C324C5F, 0x60AD1F84, 0x07D2663E, 0xA6F1B8CA, 0xF64CD929,
+0xF19FD8B9, 0x03A041B5, 0x6BD8CDCF, 0x62DB39BB, 0x8DF279AB, 0x110310C3, 0x18158879, 0x81B7FAAF,
+0x9429BCEB, 0x4D413488, 0x8C819EF9, 0x059E511D, 0x3239BD57, 0x6DBF9FED, 0x67804DDA, 0xCFB8D84D,
+0x86C68758, 0x386E1FA0, 0x4A11A09A, 0x26D8697B, 0x873158AE, 0x0BA0930D, 0x1EF872BB, 0x174BD67D,
+0x3509922D, 0xE1A1CEFE, 0x4225B0F3, 0x9A4F3169, 0x1682C30E, 0x4A049A34, 0x47A3DD47, 0xE23468FE,
+0x81ECD06D, 0x5234643A, 0x3C190B65, 0xF824B940, 0x47F76598, 0x7D49E1D7, 0xFCD5C0D4, 0x030BCDD9,
+0xEB7CC364, 0xFCC89100, 0x67231CC5, 0x210A3AED, 0x897A4B64, 0x94F9A587, 0xF4CF9D81, 0x4E145356,
+0xD4173F97, 0x3B5BA133, 0x570A221F, 0x5DBBEAAF, 0x52AF91BC, 0x91BB068D, 0xD7248F71, 0x17B5A789,
+0xF484E09C, 0x81549791, 0x5F8DCCDB, 0x4D9AD057, 0x8B4198F7, 0xE44EDB47, 0x03067184, 0xB5EF6323,
+0x379EEC14, 0x94559494, 0xDEEA9115, 0x97A5DE5B, 0xB44FC8D8, 0x476FE085, 0x07430CE9, 0x134EEE95,
+0xAC216CF0, 0xFAEC19BC, 0x4F3C0863, 0xAE4CD804, 0xDC452121, 0xBB10E14E, 0xCBC3ABC5, 0xD3930651,
+0x5D8ED92E, 0x04934BE6, 0x1673A977, 0x471356EA, 0xB7B27090, 0x8765E5A8, 0x3D7DEE60, 0x2D11E7D5,
+0x904C6B67, 0xDE431C15, 0x57A27E90, 0xABBD657D, 0x4A8AD688, 0x9A101266, 0x4D5193C4, 0xA008A63F,
+0x03D465CD, 0xB887F64C, 0xBE012507, 0xE267FF9C, 0x75E257BB, 0x8540D835, 0xC841BCC5, 0x662D9F5C,
+0x162E10FF, 0x94EF5E94, 0x2CA87E2D, 0xDF42E8AF, 0x837A1806, 0x91E8A606, 0x10BB8435, 0x68F5E10E,
+0x9C1BFCBB, 0xA20D8660, 0xFBD47BF4, 0x6D43CE3E, 0xAA663B7D, 0xFB4DC948, 0xC1282C86, 0x2B808BC5,
+0x91463D75, 0xFF255493, 0x41AEE346, 0xCE3F79A5, 0xC054F7CD, 0xE0642C38, 0xEFF57DD8, 0xB1301861,
+0xF10421FD, 0x1F548901, 0xB74DE34E, 0x5F33D346, 0x45E041D5, 0x71669294, 0xE0057754, 0xE6538F38,
+0xCEDBDFDE, 0xFB9711C3, 0xEF07363D, 0x76287D1F, 0xF5B1732A, 0xCD959267, 0xC8FB1415, 0x83B821DA,
+0xE5ABA175, 0x64384EEB, 0xAD8D557D, 0x25ADFD19, 0x1A01ED8C, 0xF01E0692, 0xEF00EBB7, 0x0084A885,
+0xC1CC07A7, 0x12A88E58, 0x83AB48FE, 0xCBF0460A, 0xE97A742E, 0xA3235F85, 0xE22AB49D, 0xF0CA1006,
+0x4682660C, 0xFFDE2885, 0x8EEB4A78, 0x132A4FF5, 0x808CA259, 0xE669E252, 0xCA4A0318, 0x54CF71AD,
+0xB96E6194, 0x04A8B40A, 0xCF4C1D29, 0x11B613BB, 0x272F40CF, 0x36C7C846, 0xE8B39B40, 0xF624DA4C,
+0x8E281B89, 0xE2A45999, 0x515411DF, 0x8F0ABC76, 0xFFEEA866, 0x4374CD07, 0xA8444ABA, 0xD324FC21,
+0x5474C5C5, 0xD1EA5BD8, 0x844F1B4A, 0x5DD1E418, 0xD8E3D60A, 0x2073FC9C, 0xE13D36BB, 0x77CC84D0,
+0xC36B462B, 0x39ACAD20, 0x20A313AF, 0x7F867554, 0x7B00418B, 0xC6A334E0, 0xD00FB6F8, 0xC99BAA41,
+0xD75FAC78, 0xD8AF6166, 0xB650CE4C, 0x3C80F53F, 0xD1026B6B, 0xCD745939, 0xF757137A, 0xCEE4F821,
+0x99629DE8, 0x9F486455, 0xB8CBDC83, 0x82335DC9, 0xB7D2D21E, 0x7819CBBA, 0xDD046A68, 0x4352DBD7,
+0x83E6FDE0, 0xFE1F22E8, 0xDF6E4D85, 0xE9DF2D5F, 0xD33A4223, 0xF43BBD94, 0xD4111AB4, 0x8644384A,
+0x8AF9253B, 0x203C702F, 0x5A1B935B, 0x147B225B, 0xA64F1FC3, 0x854A7149, 0x1ED18F07, 0x5159E70B,
+0x18CE5E71, 0x87CF9C3C, 0x7BCAE373, 0x561F4E31, 0xE74B3432, 0x822B4611, 0x598650D4, 0xEF814CB1,
+0xB5D1C1D3, 0x70801817, 0x45D70A8A, 0xD7BD22C1, 0xBAB1F8F7, 0xD46FE964, 0x6DEC7D64, 0x29D1FA16,
+0xEB10E70E, 0xDE54CF9F, 0x2E20F34C, 0xE1353330, 0x5AC18754, 0x4CF8141B, 0xD601021B, 0x5B495C27,
+0xDFD70354, 0xA7CDC5BF, 0x4BFB1828, 0x1BECAD51, 0x8B04A8B8, 0x0B859B96, 0x33F83406, 0xE3ECEEB4,
+0xCDA1AB34, 0x89A5121F, 0xFC1FD1BF, 0xF268D35E, 0xE2EBF736, 0x1FBC7E60, 0xABE2F06B, 0xE41CA81D,
+0x33476F80, 0x084D6150, 0x70246185, 0xCA873BF2, 0xC37F16D5, 0x4498A2A2, 0xCDEBC088, 0xA194690D,
+0xEAD1E1BB, 0xAD3FB858, 0xE72F1A87, 0x5E765344, 0xDAE5E328, 0xEA744954, 0x8CA2CE38, 0x81BCE672,
+0x8903C721, 0x5A45CC84, 0x5FE6C7C6, 0xC8B78AFF, 0x5C07349D, 0x5D2358BF, 0x8E571608, 0xABB0F657,
+0x6034E0D4, 0xEF1B77B2, 0xDDD7939E, 0x54C0D90F, 0x52C9B968, 0x3BECC4A0, 0x8152132F, 0xC7E90A16,
+0xE5BC3C8C, 0xD625AF7A, 0x2376FB58, 0xC7DCA1C6, 0xDB03F393, 0xBAFC540E, 0xBF1680AF, 0x7A272850,
+0x8FC85A18, 0x56102817, 0x67F82779, 0x2D837FF0, 0xCCBCFC26, 0xCF6089C0, 0x688FF8FE, 0xE877F59D,
+0xBB205140, 0x4E18158D, 0x45ACDF3D, 0x64904793, 0xCD2BFEE9, 0xAE59D395, 0x42E96AC4, 0x1EE0F905,
+0x973E6542, 0x0A690906, 0xA7797772, 0x8E1C3CE9, 0xD7C0E25D, 0x015B9859, 0xEAE09BEF, 0x6DBB51CD,
+0x7829BF74, 0x9A137266, 0x9BFD705B, 0x0BBDF61E, 0x47052D8E, 0xD2984F66, 0x46F5557B, 0x0206C20C,
+0x4FBB6651, 0x5F99FDDF, 0x796FEF28, 0xAE5D6165, 0x49752A9F, 0x5C673974, 0x0F0A30A2, 0xF8CE2B8C,
+0x59D8EB51, 0x736EFBC9, 0x1D10F952, 0x67F3C321, 0xEEC5D188, 0xC07E622A, 0x6F6AE08E, 0x6069585B,
+0x40ECF152, 0xAEF35FBA, 0x03653AC3, 0x0966F754, 0x65373827, 0xDF1094DE, 0x50835427, 0x479F39C2,
+0x6331EB56, 0xA213B9B8, 0xB28F0B7D, 0xEF0E69AE, 0x72AAFEE5, 0xEA824D17, 0x3B859388, 0x9A52103C,
+0xA3376005, 0x50587163, 0x8B3F1774, 0x1BC2B5AF, 0x154C299F, 0x7E523FF5, 0x47E0C199, 0x5D9BFFBF,
+0x5D5E0D51, 0xEFC8F370, 0x7EBD2C38, 0xC61476F0, 0xE83243A1, 0x1472747E, 0x97A6312D, 0x20694737,
+0x36934AED, 0xCEA7FF7B, 0xE152F058, 0xE4AC4069, 0x2D7E0C71, 0x2500F12F, 0xB0CCC0A1, 0x1AE97AD8,
+0x1ED18FE7, 0x85567A6B, 0x380E5DFF, 0xCBF17615, 0xFBD47A0B, 0xF77429F4, 0xA5E65668, 0x7BBF7F1D,
+0x6B2595CB, 0x88A60555, 0xF5B160CE, 0x1E9845F8, 0x39BDD0F0, 0xD0C97DFD, 0x39917595, 0xDBAA661A,
+0x645E486D, 0x0C83430A, 0x0D4B5F11, 0x01A8DE01, 0x8CD733E0, 0xA01E1255, 0x147718C6, 0xCEC233A3,
+0xB794AD60, 0x1B2A815E, 0x783A0BA4, 0x03E59A09, 0xE2A0DF9E, 0x93C866A0, 0x06230CF1, 0xFBE66858,
+0x7E756B3F, 0xB64B1564, 0xCBF38CEB, 0x37310440, 0x3BBD6347, 0x4A3F4D7F, 0x38FAE7AB, 0x2641550F,
+0x7AA09073, 0xCCBCBE5D, 0x1900E3AF, 0xDD88EA6A, 0x448E1482, 0xDF9CE6FB, 0x0095998F, 0xDFD8A6CD,
+0x6E8C3EE8, 0x40718D89, 0xFEFB13A7, 0xEF37F3A1, 0xC263C653, 0xD198EDE6, 0x7C4E226B, 0xC593E5A5,
+0x01A5B00F, 0x6C132BD6, 0x790392C7, 0x7690F298, 0xCB974DD7, 0x9A058585, 0xE9350E85, 0x2E643FDE,
+0x16A2A9E8, 0xC403C9BC, 0x5221C174, 0x65B77FFC, 0xD0B81E03, 0xAB4C2F04, 0x696AAEBF, 0x5D4071BE,
+0xA0A9773B, 0xCA5EDA53, 0x5CA25068, 0xFD396CB8, 0xE37299AA, 0xB4DF7E00, 0x63034646, 0x070D28EF,
+0xD302694A, 0x1C4909F6, 0x65C7106E, 0x1816736E, 0x52AD7CB5, 0xC811E05E, 0xA5F42568, 0x1868915B,
+0x388D1A26, 0xCBAA997E, 0xB6B2B825, 0x1DB89C99, 0x1C8F8DFD, 0x188DC457, 0xE6C7CD0C, 0x4D938E42,
+0xB9464023, 0x6C2F4FD3, 0xA9DCCDD4, 0xB24410D6, 0x4A43F1B0, 0xC6594DF5, 0x513E1330, 0x16BD29B4,
+0xCC12A778, 0x6A574199, 0x589207C6, 0x473EBDAF, 0x4ED87641, 0x87D421A3, 0x0A5A4344, 0xBFA1C2D0,
+0x413A8087, 0x4A008551, 0x02399D93, 0x9385BEFA, 0x45FF2FD1, 0x80D866EC, 0xCEE80C62, 0xE25BE67F,
+0x9EBB325B, 0xA960FFCF, 0x38F992AA, 0xDA92D62C, 0xD1D4238C, 0xA2B55846, 0xF3B2500A, 0x45A9507C,
+0x1306382B, 0xAA25C153, 0x8669C5F7, 0x62C95956, 0xADD97638, 0x2ECA05E7, 0x01A3AAE4, 0x7DBD1ECB,
+0x17301C45, 0x049FFFE4, 0xF757C1F9, 0x96C8F800, 0x85F90AF2, 0xA686F342, 0xAF116C18, 0x2697A8B1,
+0xF95806E3, 0x30C00AC1, 0xEFBEA358, 0xCBA8213F, 0xC267E6FD, 0x5E0F26EB, 0x61E9B9C8, 0xEFC2C48B,
+0x1DA72F18, 0x48BC6780, 0x1CD16226, 0xDDCF7802, 0x27D72145, 0xC3771E0A, 0x13CF93A2, 0xE1B9C48A,
+0xD907E973, 0xF419F305, 0x8D98667F, 0x08821769, 0x0EB4247C, 0x116AD33E, 0x676DA50D, 0x24DDE618,
+0x7D05CCC4, 0x58F5C27C, 0x41984332, 0x3E037761, 0xC638F792, 0xF092F3CF, 0x572C80F7, 0xB952693B,
+0x03BB5BBB, 0x2B67C852, 0xF5E0D919, 0xA8FFBC49, 0xD2DF1602, 0xB3EBC095, 0xCBE16B7C, 0xD482E9A1,
+0x221534EA, 0xA4E6BBE1, 0x373E29A4, 0xEBC0DC9E, 0x140CB315, 0x5DD3B074, 0xC9A8E0E5, 0xDDC160D2,
+0x94E5803A, 0x18A847C4, 0x0B7E77D9, 0x9B13DF00, 0x80555597, 0x05F587C4, 0x92E7FFCB, 0x918E45FF,
+0x83D46C93, 0x4B5C1696, 0x089EB46C, 0x9BC5901B, 0xA0841C25, 0x88291BFD, 0xB32CB40F, 0xCA7D1A47,
+0x6C2D3317, 0xBD49B5DF, 0x4B3A4DBB, 0x12AE840C, 0xEF41B098, 0x2FBA9D4D, 0x7276DE11, 0xD49985DD,
+0xBDB76941, 0x5FD29434, 0x03336C99, 0x9D4253B6, 0x11A43B8B, 0x09051B7B, 0x48513FE8, 0xAF64BD39,
+0xA38E6C42, 0xCF5B866F, 0xFE396D75, 0xABA00EAB, 0x27D7F1C4, 0x91C04CC8, 0x60A95D8F, 0xF5AB715C,
+0xE0D581E5, 0xE4EFA58D, 0xE934BD9F, 0x5E217166, 0x5640ED0D, 0x82450A54, 0x4F80418F, 0x4BE34E48,
+0xC5A00B3A, 0x2D4D947B, 0xB3B6215F, 0xDADFD46E, 0x7B2CFFE5, 0x9E9342C6, 0x2B624088, 0x93604AEC,
+0x6821AE7F, 0x5DA29405, 0x674C8576, 0x4B4835D8, 0x8BB44040, 0x2790A7CB, 0x00B89ECF, 0x7D23B14B,
+0x130F28E4, 0x6EB70D72, 0xF5E2D843, 0x4B1D45A3, 0x875E290C, 0x4B66747F, 0x3D42A6C0, 0x717563E7,
+0x9FCD31C4, 0x029E486C, 0xF0819394, 0xE972DF03, 0x941C9693, 0x93684C58, 0xA8E15004, 0x0C0AE973,
+0x96D84137, 0x3C7B1E3B, 0xD08347B9, 0xBD33D999, 0xBF81F15D, 0xE73A474E, 0xD1F9B960, 0x0404E5E3,
+0x6BA6673C, 0x9D04A7BF, 0x4A8B73A1, 0x485109F1, 0xA900AA1B, 0x18BCC444, 0xAA1CB02E, 0xB1FBEEBF,
+0x0EDBA89A, 0x75360E2A, 0x79EC4BBE, 0xC002A4A7, 0x538A87E5, 0x5DF3D135, 0x12D667FF, 0xBFAFF270,
+0x167053CB, 0x58B3F0BE, 0x775015C2, 0x122300E5, 0xF1CF37B0, 0xB6635D5B, 0x634EFB9A, 0x3EECFC24,
+0x3D329CEF, 0x04B1465D, 0xA6F6D8A3, 0xD00008E6, 0x7D6A526F, 0x984F9AF0, 0x542F55EF, 0x12324F61,
+0x6DD113BF, 0xE78A01A0, 0x34F2696D, 0x26ABBDDF, 0xBB91A1ED, 0x83E122F0, 0x7448AF07, 0x6C992838,
+0x651BECF6, 0xD19B807D, 0x65DD1C2B, 0x9D840027, 0x3AC2D678, 0x6D81CAC9, 0x4FC3E60F, 0xD44C214F,
+0xA97A20A6, 0xCA02A8E8, 0x9CED053B, 0x6BD034F0, 0x57E5A57D, 0x2AF14E58, 0x8F4D05AA, 0x1CEF9F7E,
+0xD9F44BAA, 0x0681F7CB, 0x9A70B794, 0xB691980F, 0x3C475B7C, 0xC8C6701D, 0xB847A80B, 0xBEB68F01,
+0x7A94B463, 0x853E7AD3, 0xC193B6D3, 0x5B4E95B2, 0x6E6EBADF, 0x26B0F42B, 0x4C4F313D, 0xE79F00C2,
+0x217B7F33, 0xA5601596, 0x655A407B, 0x285928DA, 0x6EF4A141, 0x8E7109C3, 0x78506DE3, 0x23B2DBBD,
+0x7D127B05, 0x21C39EFB, 0xF8704A39, 0xE0AB6ACD, 0x7B43F5E0, 0xEF8731AC, 0xABA0176A, 0x7F515FFC,
+0x9FD30617, 0xD8D9FF79, 0x484E0FEE, 0x63B526CF, 0x9DDA5EB0, 0x76D9A498, 0x3E1D6AC6, 0xAD42DC41,
+0xD5D54A5C, 0xEDC269BC, 0x0B6140EA, 0xD387E853, 0x9B32D654, 0x33C55557, 0xC9ED4666, 0x13CE030C,
+0x8BD08C1C, 0x32D818D3, 0x0925A303, 0x4A5446CF, 0xB587F851, 0xFBD66834, 0xF96201D1, 0xF731DEF0,
+0x09851CAB, 0x79370F35, 0xBD2BA142, 0xE488493E, 0x58E7552B, 0xEE8DA8F8, 0x85822209, 0x6445BEEE,
+0xC81D4435, 0xF3418F5C, 0x5A618C2B, 0x00D11AB9, 0xFCD8E28A, 0x36828FB5, 0x99EF4A67, 0x789D5CF1,
+0x0E02251B, 0x3D9F069A, 0x0AE125EF, 0xEAEB8BA1, 0xED8F6105, 0xDC360541, 0x823E025A, 0x5319281C,
+0xADA9B71D, 0xD2FA565B, 0x9A007CCF, 0x67726781, 0xCD46D150, 0xA73980C2, 0xCF45C710, 0xB4F1A342,
+0x5EE386D1, 0x3D1B752D, 0x39DBEDFE, 0x307846A8, 0xE10EC459, 0x43AFD85D, 0xB6CB6875, 0x110D95A5,
+0x30C24D42, 0xD66E085F, 0xDFD8449B, 0x48C6DFB5, 0x7A9B4578, 0x8B9796B2, 0xDF59CA29, 0x2D49BACC,
+0x9F14CFAC, 0x8F488F6B, 0xAC43CED1, 0xF57036DC, 0x138A3372, 0x409E6DB2, 0x40A4840A, 0x833EAEAD,
+0xC9C69F13, 0xD3F55AE1, 0x3449C56E, 0xB76F0E76, 0xB03665F0, 0x5011C39D, 0x86A77E5E, 0x65DE699A,
+0x345D4CF2, 0x21B3537F, 0xD3E59D47, 0xF74431EF, 0x1AB8DA92, 0xD0362F7C, 0x490AF423, 0x6A8441D7,
+0x2853BE9E, 0xD246F0D3, 0x4F614F04, 0xF60FB23E, 0x27760D4C, 0x9BA867EF, 0xA4E6FC5C, 0x79F6866D,
+0xFB772324, 0xD06EBCA1, 0x1FAB1594, 0xFE1FB8A8, 0xABBAC8A0, 0xDC839F28, 0x87330C2D, 0x8D93273D,
+0xD5788BD7, 0xEC7128A6, 0xE581AFB2, 0x827B67FF, 0x097238FE, 0x1693EFBA, 0xF21CA68E, 0x0F046CDF,
+0xCFC57252, 0x0804F738, 0xB6F3DC4D, 0x82D4D835, 0x6B922BD4, 0x9763F141, 0x7D43C10B, 0x72F15E20,
+0x05FB5F38, 0xB0B1EB80, 0x78E02FE5, 0x1A18D933, 0x43F8532D, 0xF12A9AC3, 0xBB4DC408, 0x5479CD32,
+0xF7ED4F9F, 0xB0D36317, 0x921C8C47, 0x4CC1F433, 0xF2AA83C2, 0xC25F635D, 0x4CBCB244, 0xF831C365,
+0x376E0843, 0x03DAE64D, 0x935212D8, 0xDD5031FB, 0x074DE47F, 0xA1FEC58A, 0x6EBB4448, 0xB6EEB9EE,
+0x6CF04BBD, 0xC61B6AAB, 0x8FD787C6, 0x035C9F6D, 0x22E78216, 0xC0AB7858, 0xE96031CF, 0x20DE56CD,
+0x2AA419B7, 0x8CC7A04A, 0x1EDAEAE7, 0x6E5F267D, 0xFE6FE774, 0x3FFCED10, 0xA24ACA0A, 0xD83641D1,
+0xAECE2DBA, 0x1363E381, 0x5A960483, 0x027D56BA, 0x58F470BD, 0xE5A160F8, 0x62B76486, 0x3106631E,
+0x7D30D00E, 0xB414E180, 0xAA7FC0B7, 0xF99139E5, 0x1F4F8FBD, 0xCCF6FD03, 0x0E3D8747, 0x69D525D4,
+0x43EB6D5C, 0xC8A722CB, 0xEF119D49, 0xCF6BC51A, 0xD01BE46F, 0xC5273193, 0x1FD35294, 0xE9A53F44,
+0xD109D6D9, 0x6E748D02, 0x9B9F2F6E, 0x84F4F977, 0x67296301, 0x80C5257D, 0xB58E0F19, 0x2584F7E8,
+0x17AD9502, 0xFBAFE062, 0x0D45B369, 0xB7D7DC0A, 0xCF352269, 0xDFAF15DC, 0x221BEE89, 0x08BBE405,
+0x781A9736, 0x10575D04, 0x8EF3804A, 0xC15DF182, 0x48370789, 0x8075D8DF, 0x5F7C972F, 0x16805542,
+0x56483CFC, 0x85420DBC, 0xF090FD70, 0x53D755D7, 0xB0ABDF00, 0xB7B9167D, 0x2E3B9BE6, 0xFDD87E23,
+0x33BC18C3, 0xF9C525E0, 0xB5B6A051, 0x0D12AA4F, 0xF5CA2DF7, 0x893273EA, 0xC3FF61E7, 0x1018BA6C,
+0x8E30C37D, 0x4E4DAC18, 0xA66856C0, 0x0C531416, 0xBEDE6BB8, 0xA170CDB0, 0xE08BA0FD, 0xB107895E,
+0xF9EA3B13, 0x7EFEEE27, 0x57948CC2, 0x8CA463A3, 0xEC81931E, 0x161E3BC4, 0x8841D882, 0x42EDA2BD,
+0x5B2B4766, 0x0CE91077, 0xD0B66BE9, 0xD6977748, 0x9E4E2523, 0xEB6F9A72, 0x359D0CED, 0xD0100259,
+0xC0F8B92A, 0x4EEBCA52, 0xF7D8147F, 0x447E20EB, 0xF1EF2016, 0x2D0A7E0F, 0x51DEA63C, 0x73D7C6CC,
+0x64796DCB, 0x20153445, 0x275D581D, 0x2033A599, 0xCD785E74, 0xE08A2916, 0x09BF856E, 0x2BF41965,
+0x72070189, 0x97AC49F7, 0xB37CB840, 0x39136D10, 0x0339BAFD, 0x8A263964, 0xAF4AE6B5, 0xEFD51EAE,
+0x0DA1899D, 0x0143C7EF, 0xB28FF096, 0x40750E67, 0x8BAD003C, 0xEE02C429, 0xCD8D41C3, 0xF3C7555C,
+0xB0A0E42B, 0xF20CB794, 0x7F9FA8EF, 0xAE3E8026, 0x91164A7A, 0x85927AFA, 0x4CAF33D1, 0x444C01EE,
+0xAB941694, 0x042FD810, 0x4AF70803, 0x8E718D94, 0xF0191592, 0xFF9B74CF, 0xDC46D48E, 0xF3E87BCE,
+0x7291D55F, 0x1E4727AD, 0x8181269F, 0x404E1CB1, 0xFE3BF645, 0xDCB607E3, 0x1ABBD77B, 0xE69C73AD,
+0xB1FD4585, 0x727917D9, 0x3261AE53, 0x0BA4ACEA, 0xEEA6C2EB, 0x7E96BF14, 0x305B63BE, 0x16495AF9,
+0x0D7C8F4A, 0xD185DEE3, 0x46DD1729, 0xAC28A01F, 0x0A7821F3, 0xC906AEF1, 0xC9793AA4, 0xE831A948,
+0xD9C9C925, 0x1717DCB7, 0x62C9C674, 0xA80979AA, 0xE6AC7F25, 0x76E69679, 0x3C66FB70, 0xC8A3774C,
+0x40466544, 0xC9752EA4, 0x45C57C05, 0x0FC5426C, 0x1992A34F, 0xDF0BD03E, 0x1FC6D715, 0x0F4F07EA,
+0x47E884B0, 0x1E893318, 0xBA282DB8, 0xAD6BB431, 0x24E5A72F, 0x379120CC, 0x4A1DD1A2, 0x67EC7C02,
+0x2B20359B, 0x084E13D5, 0x1168C4B8, 0x049B43C3, 0xA94E64C1, 0x2C8C2916, 0x5C21A39D, 0x2A154DD7,
+0xFBBE34DC, 0x567E1767, 0xED2EB711, 0x4C8222E1, 0x24CE1639, 0x2069A466, 0x24E94AE2, 0xA2DD21B5,
+0x2B9074B3, 0x533823D5, 0xFCE6D3E5, 0x1CDF1D1A, 0x8F2CE560, 0x97A18EDF, 0x7C45C5BA, 0x6D0453E6,
+0xAA72352B, 0x7AFEAF2F, 0x843D3FD8, 0xBA266437, 0xF7A59755, 0x67281E84, 0xC7CA22E9, 0x706DBA8B,
+0xE95C7513, 0x57BB99D9, 0xE66AAAA5, 0x709CC011, 0x6CF6B70A, 0xC045BA5C, 0xE461272B, 0xD620A1FB,
+0x86BF7B7E, 0xC3AE7AF2, 0x7A9DDFCD, 0x0C403610, 0x4FDDF225, 0xC552EE71, 0xF31011A2, 0x12E78796,
+0x90929C7A, 0x9D04F189, 0x7AA26019, 0x5C242471, 0x8E3B0619, 0x131CBDDB, 0xD1A0C42F, 0x6D6A32B0,
+0xC982090F, 0x317104F6, 0x21B87821, 0x2E3BE64D, 0x2CCBE517, 0x08B06D8E, 0xA6B33E37, 0x8C3A1AD3,
+0x696F6A2C, 0xC3B89FA9, 0xC7D0453C, 0x2DD36638, 0xBDF5E933, 0x67BFC3CC, 0x1E3BDD75, 0x4B2C9233,
+0xE391965F, 0xA74E54CC, 0x94324C9F, 0xDE56205F, 0xDF631A73, 0x82712EB3, 0xF57CD6BA, 0x9B7FDB97,
+0x19F8282A, 0x89ED78FE, 0xF76330A3, 0xBFA22535, 0xABB9D8FE, 0xC1BCCB90, 0x1A9DFC1C, 0x49EE2A4B,
+0xD0C740C3, 0xEDCA6BAA, 0x8C850E96, 0x9D14269F, 0xDA0FFD64, 0x26FB34CF, 0xDE024897, 0xAF7F20F3,
+0xEC9EC13A, 0x27322961, 0x1AB1E5AF, 0xAEB68928, 0x39F4817A, 0x8EB28DF2, 0xF91556CF, 0xD8368F5B,
+0x127262F9, 0x73384242, 0x640065DA, 0x46ECF68D, 0xBBC0123E, 0xFD82280B, 0x0DBA8C3D, 0x3F9185CB,
+0xA3EB7D96, 0x4B87B953, 0xC11348D2, 0xF2FF54EF, 0xC71D5A83, 0xC22658DA, 0xFB432CA0, 0x5EA81BFD,
+0x7534CB71, 0x433E4A3F, 0x76C69344, 0xCBD62DB1, 0x95B2B7D0, 0xF52DA1FC, 0xCD0312C8, 0x2BC4C75D,
+0xBB119A7F, 0x8C314DA9, 0xFC59FB82, 0x20D7E11C, 0xB8C7FDE9, 0xAD4E7B87, 0x4EBF702F, 0x6070C3BC,
+0xB53D73E8, 0xF395190A, 0xAD6A7A45, 0x45EC30D1, 0x31C45895, 0xF6C4D31B, 0x4F5D6E64, 0x37128EFE,
+0x2F05B34A, 0x1667E0C9, 0xE6D022EA, 0xDAB972CB, 0x56BC00A8, 0xF7F8B2B5, 0x5EA5EE25, 0x8B8E32AB,
+0xCF765C2E, 0xF1839B54, 0x958461A2, 0x613D4C53, 0x9FBB49EB, 0x0F999076, 0x1E9FBDC4, 0xA650DB17,
+0xD95FF3E9, 0xFF73628E, 0x7901DEF6, 0x743B79E1, 0x3C1A451D, 0x6DE7B555, 0xB7BF0A62, 0x26097FFA,
+0x7D06DF9E, 0xD5C00983, 0xEAAF4BBE, 0xC358F85F, 0xCF7C1986, 0x1A70E33C, 0x31462F85, 0xF4B327BE,
+0xA0FE3BE9, 0xB46E46B8, 0xA5A12562, 0x6C383DA8, 0x4C7526B5, 0x9B1EC82B, 0xBAF0EBEB, 0x637FD747,
+0xD7AA18D1, 0xD063B0EB, 0x0FB31A1A, 0x4B84300D, 0x72EDCE2C, 0xDA95DE43, 0xD10E35E0, 0x74208CE9,
+0x94987D4B, 0x727F4202, 0xEBB3E331, 0xB4FCCF5D, 0x23B506F9, 0x76C91860, 0x2126B259, 0x448D69EB,
+0x7E15B225, 0x211671ED, 0x644C182D, 0x1BDD8E94, 0x61869DE6, 0x44D84A28, 0x768AAC2D, 0x87B15935,
+0x3B18FA77, 0x5D29B92B, 0x4259BE4E, 0x4FC51F56, 0xA279D0C2, 0x82B91061, 0x33477304, 0x17D6DC1B,
+0x821F7533, 0x052F863B, 0xF5AB9597, 0xD7CC4D90, 0xB9AC2DED, 0x4E86BDB5, 0x29F4C960, 0x0E251554,
+0x594A6FD8, 0xB45EF25D, 0xC8076AC7, 0xABD4881E, 0x1208448C, 0x3654BEA6, 0xCADFE822, 0xC3592E95,
+0x8CC9D956, 0xF13CFD6D, 0xA24DF1A6, 0xE7026046, 0xE68E2781, 0xE78D1AEF, 0x45B92784, 0x41B407D2,
+0x17AD3C95, 0x7A6457B8, 0xAEF16C10, 0xC0C834F2, 0xAA486FF2, 0x72A33D0F, 0xED734574, 0x113F0D96,
+0xB24BA392, 0x1D352B6C, 0x1E68CE83, 0xF9A219EE, 0x5C16CF26, 0xB1653592, 0xB612A615, 0xB74ABA4C,
+0xECA04A52, 0x63F9FC3A, 0x2C4187C5, 0xDAF69D5F, 0xFBD43FD2, 0x48B0CF9F, 0x4990B1F2, 0x4521FA85,
+0xB52C6E16, 0xE7596445, 0x24D91C7D, 0x4F8E0C76, 0x3C9E1AF1, 0xA578E554, 0x4820A09C, 0x9CA8F89E,
+0x2E2047AD, 0xA6614F5E, 0xFD5DB530, 0xA8B82478, 0xD9515A06, 0xC72BEB1A, 0x2BF87F6E, 0xBDE3708A,
+0x1B998871, 0xED834083, 0x577A3ACA, 0xAF4A28F7, 0x75E49568, 0xFD15A11D, 0xA89636EE, 0x5948EFE9,
+0x78E7661A, 0xE0FAB2A1, 0x8B16E84F, 0x27B9D842, 0x72BA8995, 0xED45C31C, 0xB1925131, 0x7611A14B,
+0xCA47A7F2, 0xB994E8DF, 0x8516264F, 0x05E17765, 0x99BD5B4D, 0x2047FF0E, 0x57590C08, 0x7256FC83,
+0xD0281685, 0x4627E8C0, 0xC4E8D748, 0x314E4A1C, 0x61F92E3B, 0x9CB58D47, 0xB9D83F8B, 0x4545EFCA,
+0xE2AB8F1F, 0x9C4B58AC, 0x0AC14094, 0x5DB61D11, 0x00BAE796, 0x2B913386, 0x19D9FBE1, 0x090DB602,
+0x5CDD0FFC, 0xF49A7634, 0x983580A4, 0x31F3C5B3, 0xA3B01502, 0xDBA57CE6, 0x6E3AACE0, 0xF7C0E24B,
+0xF673BC59, 0x0BA5A2F2, 0x1CC62964, 0x83CC33EE, 0xA1733EA6, 0x08EF8B2E, 0x0261DF0D, 0xE0D840DF,
+0x0D367458, 0xE99EA7EC, 0x2635F727, 0x566EFB7B, 0x99F8764B, 0xC2AB44E5, 0x4023A3FC, 0x8EF44648,
+0x618CDF81, 0x8BF901C5, 0xB9C7E513, 0x2C31C254, 0xCF3A3993, 0x504E5751, 0x0C3E6B49, 0x6A44C9ED,
+0xD173B209, 0xD32D5DA0, 0x7874AF7C, 0xE79B8E96, 0x40594FFA, 0x2B5C3685, 0x052093A5, 0x301083C7,
+0x57F45B9D, 0x3F5718C0, 0xE90B7114, 0xAC019105, 0xA892CBD4, 0x6675FFA0, 0x45DF6BAD, 0x01A97D18,
+0x0262D1FC, 0x7CA8B825, 0xF43EA1BF, 0xA0025865, 0xD91EBE4D, 0x0ACCA51F, 0xA56C6C47, 0x09CCBA11,
+0x73FD115B, 0x5F645B1E, 0xE4889FC4, 0x153891B2, 0xB924DF79, 0x0C31C686, 0x88D725AF, 0x25B8107B,
+0xD7E919BE, 0xA5A010E9, 0x6AD2B147, 0xB64ECE98, 0x8D67A67F, 0xDF9DEF70, 0x91081236, 0x375892AB,
+0xB1CD64CE, 0xC45AF036, 0x8F79C5DC, 0x0FA21525, 0x6516090A, 0x9D92D300, 0x63EE6D9D, 0xDECB3D6B,
+0xC8BF5DEB, 0x6026314E, 0x5FB1B658, 0x933726D7, 0x80792C4E, 0xBAFBA820, 0x10550519, 0x3B207267,
+0xA4978F5A, 0xC850DE56, 0x3674300E, 0xB0AD6EF1, 0x8B343AED, 0xB393BEE8, 0xF77913D6, 0x0708C363,
+0x450442E5, 0x6EFF26E4, 0x751F2270, 0x910F216A, 0x17FA197D, 0xC9BD308B, 0xB0FD0DE3, 0x4147FC93,
+0xAC447C81, 0x38DDD14B, 0x72E5E71F, 0xFC932F79, 0x1DAAAB19, 0x7874E738, 0xB86D263B, 0xAFB8A7B7,
+0xAB3B9B5A, 0xBAF75E32, 0x228A92FB, 0x37522A0D, 0xA74EB93B, 0x5B478776, 0x86D612FF, 0xA19AEE41,
+0x2FA9F3C1, 0x607822CB, 0x35C6AAD5, 0x07EE7326, 0x3DCB0DCE, 0x4528A01C, 0xF4848080, 0xD4D20CDE,
+0xEBB535E5, 0x61DD2A56, 0xD8AA4C32, 0xFEFA3404, 0x99FC6C82, 0xCB16EFAD, 0x58FB6A93, 0xA3FE7E43,
+0x420B70B4, 0xEAE354F0, 0x5F898F52, 0xC6CAC35C, 0x9344D341, 0x4A8AB6B0, 0x3D05440A, 0x1C8188B4,
+0x806165B9, 0x830B21C5, 0x51CD245F, 0x72CC9494, 0x2368F864, 0xDC10CEF1, 0x52FD5B19, 0xC666D9E9,
+0xFE221D1D, 0x9B1AF36C, 0x927B180C, 0xD82B3E62, 0x65F4358E, 0x0AF473D3, 0xBB2D39BA, 0x362A3FBE,
+0x44CC83FA, 0x49E62EEF, 0xC3675065, 0x11BCD356, 0xC3463EAF, 0x3198B5A2, 0x747F2661, 0x83CBF2CB,
+0x7097A867, 0x5D85E9C0, 0x227C7E98, 0x09833B0C, 0xDDA1A188, 0x69C3F1DA, 0x14E3F73A, 0x5E012D77,
+0x64ABC0BA, 0xA58B664D, 0x09DD4874, 0x635C5A25, 0x99E97CE9, 0x3A83F90E, 0x47FB5F1F, 0x9A606FA0,
+0x936E38D2, 0xC8C093CC, 0x7C44B512, 0xC4C3C4CA, 0x7B71B601, 0xB514C790, 0xA8C5DA80, 0x18877483,
+0xB005D89D, 0x2B9F847D, 0x96167EDA, 0x72DB2C93, 0x7F9487FF, 0xDD368942, 0x82CFB6A9, 0xF28FBE89,
+0x4C987356, 0xDA31063B, 0x35A7D253, 0x36F90D16, 0x0FD2EB71, 0xC6EB60CF, 0x9FC8407C, 0x15951E54,
+0xD47CF912, 0x27CBC0AF, 0xB1AA2D4B, 0xC6597585, 0x39DB3E0E, 0x691EBE42, 0x766AEDBA, 0x080D44F9,
+0xCCC33EE2, 0x57981280, 0x737F7824, 0xD88EEACE, 0xC0387FFF, 0x90B0D322, 0x1FDC8DB6, 0x9261E66D,
+0x0989148A, 0xE58CC8B7, 0xEB33DCEC, 0x317F74CD, 0xEB797708, 0x111FFB7F, 0x485238A7, 0x3036F633,
+0x874593B1, 0x766292CE, 0x941BCB32, 0x35570830, 0x05F7B764, 0xA070E647, 0xDF712EA3, 0x6666509F,
+0x437B9331, 0x1DA14731, 0xAAFDD0AA, 0xC4138230, 0x8F012CE9, 0x0F962F06, 0x210C0F54, 0x7E7588EB,
+0x66ED6EB3, 0x257E738C, 0x91F695D6, 0xE5A8FDB6, 0x1447BEB3, 0xF0601C23, 0x8594F584, 0x753A7E70,
+0xD7824B51, 0x0B604F94, 0xEC2102EE, 0xDA090F1C, 0x51173307, 0x112ED951, 0x5BF10719, 0x959B2562,
+0x4D5F9EDD, 0x387D6E0D, 0x86725EF8, 0x2B3035E5, 0xDE0346C5, 0x8313C8D2, 0xF88A5FC0, 0xAA96911F,
+0x65B961E0, 0xB5B141B6, 0x1A7923D9, 0x073D560D, 0x28E029DF, 0x7C3739A4, 0xA86CA1BA, 0xF0624891,
+0x35B97405, 0xE9AE7CBA, 0x998B4B70, 0xFF930F47, 0xD8B46E9E, 0xBBBAEAAD, 0xC3568D03, 0x7523C6A7,
+0x4652574B, 0x9EB806CD, 0x6C392335, 0x9106D6C1, 0x28B44846, 0xD2C51D00, 0x40D874C1, 0x5B400D33,
+0x47EDFC19, 0x62AD2432, 0xBA0FBD94, 0x18F0A0D0, 0x5ACB402B, 0x05C27F98, 0xBEAC1452, 0x78AEDB3E,
+0x0DCD7A1D, 0x4CF0091C, 0x0DB748C1, 0x54EB09EC, 0x096AF5A9, 0x98AF5F37, 0x225D6EDB, 0x12CDD24B,
+0xB5BA1C9D, 0xD2083A7E, 0x6C74C038, 0x1E676194, 0x3EBB3EE1, 0xC71C957C, 0xED6FDD8E, 0x9C11524B,
+0x8A015DAA, 0x9F357EE1, 0x407095F2, 0x52C4216F, 0x7F735C36, 0xBD816CED, 0xFCB47039, 0x4448753F,
+0xFA99F867, 0x2FE2A7B8, 0x6F68F559, 0x12FF3C2C, 0x07CEE877, 0x29FC702E, 0x987BD10B, 0x4937A66A,
+0x87FAE5CA, 0xFFC5BB4F, 0xAE886374, 0xB6EC3E38, 0x103AB02C, 0x8BB293EF, 0xCEF076DF, 0xB7F28293,
+0x9BB55C08, 0x51680622, 0x60B54894, 0xA7CD2D8A, 0xBF10457C, 0x67542513, 0xB08CED7D, 0x723964E0,
+0x0323CBC3, 0xB22B11C2, 0x1FCF4675, 0xFAA4DE4B, 0x57BCB393, 0x356F8771, 0xED6AB676, 0xF2740E08,
+0x853CD356, 0x1E58A18F, 0x9982D209, 0xD86F398F, 0xB1487AC0, 0xF31A4D71, 0x56CCB6FE, 0x8F5D2A66,
+0x6A3E9047, 0x5FD2E964, 0xBDD9D56F, 0x502C95C5, 0x085F756B, 0xB94AA4AC, 0x7AD8EA87, 0x98BBC894,
+0x96774ADF, 0xEF7F90D2, 0xC018A1FE, 0xC10F0C7F, 0x7D665401, 0xA95014D0, 0x8CC84EE8, 0x2C44DDC6,
+0xE6392C76, 0xADAD5C4C, 0x25719996, 0xE3056258, 0x76DCCF7E, 0xD4A0E41F, 0x0C6749FC, 0xEA7E930A,
+0x8B4C2F8C, 0x5D4CF8E1, 0x764BBED0, 0x3E01AE3B, 0x41D8EDBB, 0x55FEDBB0, 0x97028E79, 0x7507D07F,
+0xF3CBFFAB, 0x74536F6D, 0x042072C1, 0x749BB156, 0xD71867D0, 0x9458A0BD, 0x978A81BD, 0x32CB4D7F,
+0x60FD2409, 0x0D7A26A4, 0x6DBB2232, 0xA4C5B937, 0xA158757C, 0x31D6BEBE, 0x30258A81, 0x33F78E10,
+0x41FDAF1A, 0x30C714FC, 0xF765A5B1, 0x290DA12D, 0xCE39CB4F, 0x7E9C0DEF, 0xBC54D54B, 0x61F084E8,
+0x03A27B13, 0xB6E474B7, 0xE0F3935A, 0x72105878, 0x79B8172A, 0xD4093DFE, 0xE23D65FE, 0x24A6DD2C,
+0x1E0FB04F, 0xC7DFE641, 0xCBECFFE2, 0x90B41C0C, 0xEAC847E2, 0x5410299C, 0xCEDEB0E3, 0xABB3E1A5,
+0xEEE150E3, 0x79AC1EC8, 0x14BA60EA, 0x6AE14CE1, 0xCB3A6968, 0xA69E7D7C, 0xFF99AB43, 0xE5962428,
+0xB4C4F2FD, 0x90D4F868, 0x19147B57, 0x202EF376, 0xCDE44A5E, 0x0284F9AC, 0xCF2F4147, 0x8ACCE692,
+0xE6025102, 0x4FDF6128, 0x5100C9D2, 0xF5223DAA, 0x82662E9A, 0xE85E825D, 0x0CEC1983, 0x3C6C3A14,
+0x525D79EA, 0xA7A6B995, 0x197AD578, 0x063F78F5, 0x40D0FC05, 0xF9462B79, 0x1336EA74, 0x0C110057,
+0x494454C6, 0xC2D8848C, 0x035D5E9A, 0x5EDEBFA0, 0x780C81E5, 0xA3109215, 0x50D2A7C9, 0x44384B4A,
+0xE3DD1CCD, 0x6830711B, 0xE3F3B261, 0xAB1F4878, 0x68952D1F, 0xD243EAB1, 0x62D8C850, 0x8A584CD0,
+0x88C45162, 0x5A40DCCE, 0x39201652, 0x9F1F65A6, 0xA443C272, 0xE6927C39, 0xF2463CF7, 0xBD2F60A5,
+0x7F7E56EC, 0xBBA867B4, 0x274265A5, 0x4BFE68D6, 0x8C86AD9A, 0xFFD07465, 0xBBCD3235, 0x5ADF6F2D,
+0xDFE2759D, 0xE11CD4F3, 0xA4C0F76E, 0x0247BBF6, 0x93388C6C, 0xB717A417, 0x673859D9, 0xC66DFC56,
+0x54F8E50D, 0xB46BF98C, 0x3797074A, 0x160EB9D9, 0x70C9497D, 0xC9E43A27, 0x9A6C812C, 0x27C51065,
+0x47646CDF, 0x1D145805, 0x129355B5, 0x4E9E6058, 0x496FAC43, 0x2F010E01, 0xE272EA3E, 0x6AD69FE4,
+0x368A2035, 0x9597A845, 0x31EB1D18, 0x84D5B935, 0x267C2A79, 0xDDE3EC38, 0x4F97B70B, 0x9BF32D63,
+0xB9E1FB72, 0x513D572D, 0x7D71CF4A, 0xF082A6C4, 0x6D3B4D77, 0x28B3F7F6, 0x37A79E9A, 0xE260E20C,
+0xD2AA1DAF, 0x064DA7F5, 0x9C7499CA, 0x28DAB13C, 0x4371F9D3, 0x51161B65, 0xA6A75791, 0xB27B18CB,
+0xEAA6E34D, 0xB3C2FEA2, 0xAD70B7D7, 0xDFFB1A60, 0x7D068222, 0x466188C7, 0xA12350D7, 0x7B32FCDF,
+0xD283A8F1, 0xAD56875D, 0x43FE20EE, 0x489D5FE8, 0x78A5DAFD, 0x81DDA121, 0xBD8F4935, 0x16E4C181,
+0x3B4AC586, 0xF63F68B6, 0xC2296C84, 0xEC255FE7, 0xEFA111A6, 0xF9F538AA, 0x7F937411, 0x39E353D4,
+0x5A69C422, 0x03D0D45D, 0xEA8061BC, 0x9552614D, 0x49898D34, 0xE2DF9ABA, 0x15772C81, 0xCC613B64,
+0x7B3556A3, 0x61AEB9D6, 0xFCEB0EFA, 0xA4CF8F6F, 0x71B929A1, 0x81EA0CFA, 0x851A6EAC, 0xDBE6BF91,
+0x36B91A12, 0x41618552, 0x7D684540, 0x2A2FB362, 0xBFA8CF27, 0x52BE58F8, 0xADB3D817, 0x7277A6BC,
+0xED6D6AA7, 0x086B725C, 0x5B0F0404, 0x9B4F1003, 0x659A2066, 0x8C4B4863, 0xDA55B8F0, 0x523EA03D,
+0x78955954, 0xEABC1732, 0x1506C66F, 0x9BF9ED0A, 0x0C147397, 0xF659AA14, 0x432ABD1D, 0xFCAA0BC9,
+0xA38A235E, 0x31FB96CF, 0xD26F221A, 0x0E71F97D, 0x86642AD2, 0x52071652, 0xCE75DE04, 0x7FABCCC4,
+0x541566E2, 0x2E601C85, 0x4348B434, 0xE5827576, 0x0705D291, 0x681B5794, 0x4B81DE3B, 0x96F5EAB4,
+0x863CD49B, 0x30AFB331, 0xEDCD6E16, 0x6129E3A8, 0xF38EB51E, 0xE13F3826, 0x1081753F, 0xF2C03AA5,
+0x462DC4EF, 0xB2E1D24D, 0xE88170A3, 0x465D6D4A, 0xEB94CD09, 0xE7CBC0CD, 0x0EAA930F, 0x958AB368,
+0xB25C6F22, 0x2045307E, 0x5D6A8601, 0x091DF2FD, 0x8AC31752, 0x80AA58BC, 0x15913B7B, 0x294FD703,
+0xCAA32BEA, 0x0DAA7EEE, 0xECDD11D3, 0x79FB2995, 0x322CE7B3, 0x6399DEA7, 0x30FA5B95, 0x137FEB9A,
+0xC1FF9C26, 0x11AD4EE1, 0x94343CEC, 0x8B53502E, 0x5CED371D, 0x71E77511, 0x023F37DF, 0x1D9E027D,
+0x1321AF28, 0x9F23B423, 0x66644058, 0x1F32AA7C, 0x425AA462, 0xD148FD20, 0x56E090F8, 0x446DE745,
+0xF9CA25D5, 0xAEDAAB58, 0x61B1E017, 0xE3797555, 0x5B29DD2A, 0x85BE1E21, 0xB44C2250, 0xEE4E3AD8,
+0x6CB36616, 0xA9949170, 0x4FD493D6, 0xFB94E3DD, 0xF19BA95B, 0x4F36D202, 0xA75C4D4F, 0xD629275D,
+0x3A895A28, 0x22163F59, 0x0A32490C, 0xB437CB03, 0x17648588, 0x7A94055D, 0x7B9E5904, 0x7F044510,
+0x2DC1BA37, 0xF4A3EBBA, 0x04EEE261, 0x0FBD3432, 0xC6FF74EE, 0xA5B59C6D, 0xA27FBE4B, 0xEFB62C47,
+0xE6579E67, 0x011EF7E7, 0x1BA2A0C8, 0x8B3CFF54, 0x5C3A3956, 0xEC79FFE2, 0x29B1E564, 0x9E4190FF,
+0x21B23847, 0x8EF46880, 0xF7CFB17A, 0xCD4620C1, 0x5A0C11B7, 0x103AE4F4, 0x1B9DD87F, 0x5623F5E6,
+0xCA34AC2D, 0x831E5AA1, 0xF1F4B239, 0xA6DEEB5E, 0x9AD8D392, 0xA8B16123, 0x09F377FD, 0x3EBE1D9E,
+0x09BD0285, 0x3F5F337E, 0x227AF0B6, 0x32E22DB7, 0xA28F572C, 0xEF14CE27, 0x9254A849, 0x0F250D64,
+0x677B1282, 0x913E04B7, 0x4D3F41B0, 0x6EE65094, 0x95891DF2, 0x89518988, 0x61B31DFF, 0x3D5BA5AE,
+0x98929359, 0xF7A8912E, 0xC04C4F2C, 0x4FAC70EF, 0x52E14421, 0xBFDCBEB4, 0x4F6558E0, 0x5E83CBED,
+0x375CF9E6, 0x22AE824B, 0x8BCE640C, 0x8D43D547, 0x48D0CBA2, 0xED0E9010, 0xB8132930, 0x3701B552,
+0x634F0E1E, 0x1E48576A, 0xAEAC23C5, 0xF999D695, 0x5BA33BD8, 0xF7D56351, 0xDD538C90, 0xDD9EEF21,
+0x91EADC87, 0xBAFE9D91, 0x549B0C9B, 0x2A38EF21, 0x6DF170F8, 0xF32C92AE, 0x9400E5ED, 0x26A02BDB,
+0xFA312656, 0x0CB187A2, 0xFA898893, 0x5382E5FC, 0x5B15AD0F, 0xC28321E3, 0x64B5351B, 0xC7F0ABDB,
+0xA00E8710, 0x6721CBBE, 0xA1E15EFD, 0x05599A79, 0x3DAEEB31, 0x306BF8AB, 0xD057B007, 0xBAE51A8D,
+0x897BFAA7, 0xCDDD2D92, 0x0E81896D, 0x61D17899, 0x0ED5FD72, 0x0D6A06C8, 0x7DCD1B15, 0xEE72CAC1,
+0x44E8FB6E, 0xD750E2F7, 0x14C5D89E, 0x2ACBA8CD, 0x77BA933E, 0xC50C06E4, 0xCEFC8614, 0x50C0B64E,
+0xA12EC6AB, 0x62C8F30B, 0xAEDB3E76, 0xB7AA5547, 0xBD1FFBAF, 0x7B2FDEF0, 0x23F5024A, 0xE7FE1CA1,
+0x5988DC9A, 0xAD5FFF82, 0xC5788E7C, 0xD50C9682, 0x239ABC9C, 0x82464DD9, 0xD3B06E7C, 0xA62CF766,
+0xEB7E5CFD, 0x4A08A417, 0xAD0562D6, 0x8AB1BD71, 0x0BB57ED7, 0x455A67C8, 0x2C7DA283, 0x814FB4A4,
+0xEC00D8DA, 0x86D8794A, 0xC6B70277, 0x29FA1CBB, 0x9C8FEFD1, 0xF7EB9A48, 0xEA97ED18, 0xE59D4B05,
+0x9DA9E41D, 0xF3DEDDA1, 0x08B9CB50, 0x79E6ABA8, 0x1642EDF8, 0x63EF8C4B, 0x622B74D9, 0x7C2F9255,
+0x0A23F739, 0x95C6DAA9, 0x906EDB62, 0x3D6C6A49, 0xBF6239A9, 0x0B0092DE, 0xBCB29B0E, 0xE2E77868,
+0xE324A742, 0x0D998BA0, 0xC8BACDFD, 0xB9FDCCC7, 0x9AAA2579, 0xC981BE1C, 0xEE51D5B4, 0x05D76A5F,
+0xF4564BD5, 0x113B4933, 0x60AA3A7B, 0x1E1D2F8D, 0xBA3B334C, 0x6BEA7221, 0xFAA0DD85, 0x945F10C4,
+0xA0239B41, 0x264A2E5E, 0x2CAA755B, 0x82ABD1FB, 0x9B0BB668, 0x0CD8A0C9, 0xD6B40C1D, 0x5EC0CF9E,
+0x668CFBBD, 0xD7CF80C6, 0xF54134E3, 0x84C078EE, 0x8FBFF663, 0x07DE8E9D, 0xBDD6D972, 0x46E414D7,
+0xFE24309C, 0x2EBBAF06, 0x69C28595, 0x1C35A643, 0xE677A7E0, 0x9F4C6877, 0x78339799, 0xA4AD07C5,
+0x82157E63, 0x7AA25C1C, 0x1E016BE6, 0x160B9A8A, 0x3143891B, 0x3DB41AF1, 0xC3A82217, 0x2B2CEA6A,
+0x98F9111A, 0x22B1A66D, 0x9E601F62, 0xEE8BE489, 0xDBABAA4C, 0x4183CD0D, 0x8CA4D0B9, 0x75ECE727,
+0x3DFC0E29, 0xDD7BACEB, 0x1E56C6A0, 0x1E9A1983, 0x58FDA38F, 0x37163F09, 0x3CD5EBAA, 0x092F88C6,
+0x82D41E82, 0x5A97E6F1, 0xB554EFFA, 0x1AC740D1, 0x7315C92D, 0x921105F4, 0x33797504, 0xD04491CD,
+0xE96B1FFE, 0x98FEC58C, 0xB3C2AF07, 0x08BFF5CA, 0x89186834, 0xB8E6FEAB, 0x169CA1F0, 0x286DD576,
+0x43096824, 0x34625CB1, 0xCD891D3E, 0x8475E3F5, 0x3A232C63, 0x2B342F27, 0x2721FEEC, 0xE34ACD42,
+0xC9DE786B, 0x481C13BB, 0x659A21D1, 0x5D991E8F, 0x1E5E9993, 0xF7DFCBD8, 0x9748DB93, 0x658A71B6,
+0xFD1AC2A9, 0x85F3F240, 0xF3527474, 0x96126C7D, 0x4CE45963, 0x3A22377B, 0xDC909604, 0x6FD21F0D,
+0x0109263C, 0x9EF4ACAB, 0xE682A0A6, 0x2B50285D, 0xB9DD9A56, 0xD27E6613, 0xFFAB5B04, 0x8F46D245,
+0xC5B7B3F7, 0xFB9E0540, 0x1B7546EC, 0x4DF5948E, 0x9DE0FC99, 0xC0F62516, 0x295AF1E0, 0xDA7E65B0,
+0x571E7285, 0xF8A61FD2, 0x47A0CB2B, 0x139C60ED, 0xCB4C05D2, 0xD46ED015, 0x8D923755, 0xC50A7F65,
+0xDE91D794, 0x2012FE6C, 0x45C447C0, 0x22818F44, 0x8D2E01FA, 0x1464939C, 0xEC3F7FC2, 0xFCAA1EBC,
+0x7B846CB2, 0x0746CE31, 0x28AC7196, 0xE2D70692, 0x4E2FFA27, 0xB8B072E1, 0x09D781EE, 0x12DE1B58,
+0xBF173DCB, 0xD5A58A41, 0xBADDED39, 0xB3BCF74E, 0x8016AC4E, 0x8548D7D3, 0xD9A2DDF1, 0xD942CFD6,
+0xBDE8635C, 0x78C4A6D8, 0x90A0C3E4, 0x66A9441C, 0x319EB5C5, 0x92E41239, 0x25F7FAE6, 0x3D2A21EA,
+0x9C097830, 0x3347DCF1, 0xDFF96800, 0x388B672A, 0x2DE5DA0A, 0x1CDC5A07, 0x16985AB2, 0xB0A259FC,
+0x82037EB5, 0xF2E5E90E, 0xA1D5BE78, 0x62F6E68C, 0xB6F1AB0E, 0xBA707FE8, 0x4D49D24D, 0x96840C2A,
+0x82D8620A, 0xB6425B7F, 0x78733B26, 0xEC782193, 0x94F500CA, 0xC675C53F, 0x6E60CDA3, 0x3E0F1175,
+0x86280B0D, 0x94A8B2C2, 0xD3953897, 0xFB377B2C, 0xF562C71D, 0x5179C4BE, 0xF4B621BE, 0x5ABB145C,
+0x4BA73320, 0xFF7577C7, 0xD87CFF31, 0x6203CEEC, 0xE53722BC, 0xD639A5F5, 0x6A089B47, 0xD2DD3438,
+0x48A2E3FF, 0xA8E11C98, 0x4FEB0C8F, 0x0F8BE561, 0xEEA68C33, 0x76FFF875, 0x4235A8E3, 0x25FF3C94,
+0x01CFE832, 0x0D464D93, 0x2B76DB46, 0x8FAA9ED9, 0xA3EA749F, 0xD7AEC0FF, 0x29BAE5AD, 0x23642330,
+0x3E1AFA83, 0xC0B7AC1F, 0x4EA1EFC1, 0x8BB5404F, 0x5DB720A8, 0xDD419944, 0xEB663BC9, 0x9CAF265B,
+0x97FC6536, 0xC518B17B, 0x3BB5635E, 0x8D3629AE, 0x5B328308, 0x72E48D34, 0x6BBB8DC2, 0x1F96C1D1,
+0xC3FB633A, 0x5127AD61, 0x2D6C09AB, 0x7F176551, 0x279EE7EB, 0x038A65F9, 0xFED247F3, 0x5CE333DF,
+0x89B0CE1E, 0x42BA2023, 0x2387BA6F, 0xF32B32FF, 0x251ADC4B, 0x1427D19F, 0x565EE32D, 0xCF3EB879,
+0x922468B4, 0x1E40514B, 0xCC36A9C1, 0x02960AE9, 0x0D6C386F, 0x25A058A2, 0x680680EC, 0xA80EAD6F,
+0xE58047C8, 0xBA7DA595, 0xAF613EEE, 0x32958DD5, 0x8E0C97FE, 0x17AABEF2, 0x9DA2C70B, 0x4322E81B,
+0xE1D04169, 0x68A325E6, 0x3303DD05, 0x65698F56, 0xBE96836D, 0x46ED42CA, 0xC800DF7A, 0x6F44E212,
+0x0A665479, 0xF962261B, 0xD7AC3A84, 0x7FC1A0E8, 0xD938384E, 0x1271B56F, 0xD58DEA15, 0xAC2FEECF,
+0x63330955, 0xB11BE0C9, 0xAF98A175, 0xA438CC87, 0x4F402564, 0xE68F1A1F, 0x0D9E974D, 0x32DE3E22,
+0xE934CCF0, 0x09227CAB, 0x8B38BE92, 0xBB247AC7, 0x49495D6C, 0xB2D45139, 0x8942F978, 0x53044CA2,
+0xD5A76337, 0x70EA12C3, 0xB576179B, 0x4D1BE8BB, 0x2837ACDF, 0xBDC7CD08, 0xB6DFBDAD, 0x430FF667,
+0x87BBDA48, 0x7175480B, 0xF58816BE, 0xE42D751D, 0xD864D0A4, 0x8CFD3041, 0x13C59E4E, 0x7A9A121E,
+0xB39A92C6, 0xE8D8EF8E, 0x9300D855, 0xB98DFF83, 0x1A59C41B, 0x7FFF8906, 0x044B1532, 0x0E956D2D,
+0x5CC65DEC, 0x98AAE220, 0x1D64569B, 0x95172397, 0xB5BD8290, 0x06DB4309, 0x3F28C49A, 0xDEE0DE2B,
+0xDB0EB677, 0x0BA2A0D5, 0xD8A0E0F5, 0xD38E8882, 0x14891068, 0x021E9667, 0x54F29D17, 0x2E5848BB,
+0x1D4DB6BC, 0xF8FD1B92, 0x55F898F6, 0xDDA50A22, 0x7BD5519C, 0xD70FDCA3, 0x34868E4A, 0xDFFCE14F,
+0xDE12856A, 0x9DEDDE65, 0x379FE16F, 0x64FDAC5C, 0xAD60F49D, 0x2FE75F27, 0x9FAFB374, 0x96C6037A,
+0xEC5D98AE, 0xA9567614, 0x3AD21E81, 0xA6827B6F, 0x9D4835B1, 0xEE28E803, 0x4D8DC897, 0x63692653,
+0xD3CA885C, 0xBDC2F644, 0xE1B06094, 0x8C97E92C, 0x40524384, 0xC6C0691B, 0xAB35094F, 0x3C2512BA,
+0x0BD8CA99, 0x3742FE88, 0xFED7D969, 0x0DDB6F3C, 0xE4971C10, 0xC5917CBC, 0xBB178D48, 0x28192F28,
+0xBB655F3D, 0xD12D0322, 0x85BD5D5F, 0x06E92F4F, 0xB937704B, 0xA03C2201, 0xCED0FD68, 0x5E299677,
+0xCE4A1550, 0x1FB313FF, 0x14315AC9, 0x764D9ABF, 0xA6FAC7E4, 0xCB8C0110, 0xB2776179, 0x2D60F3CE,
+0x098E8DE2, 0x7E5B38B1, 0x69CA5CE9, 0xA54CC6ED, 0x0A70D379, 0x9EE00F1D, 0xE5EFF95B, 0x00687B73,
+0x94006524, 0xCDF3729F, 0xCCE17354, 0x4FE9845B, 0x3BA86520, 0xD4CD8E72, 0x15DC4100, 0x4559094D,
+0xD7598B9C, 0x1E5A1DCB, 0xE25EA299, 0x3BDE63B1, 0x77BC1F2B, 0xFB30EA6F, 0xABE78606, 0x2F798C3B,
+0x90842BAD, 0x8C2E7592, 0x13F11A73, 0xA3B1A6D7, 0x8CC16561, 0x6F236FFF, 0x8E74AA61, 0x321B94D9,
+0x6B1540F5, 0x3F25E6FB, 0xF1B75A2A, 0xAE87DCA3, 0x600869FC, 0x6CAA885D, 0x39171B42, 0xF80CA1F5,
+0xFD432DF1, 0xC8F5AE2F, 0xD16CD2DE, 0x5417DF19, 0x45AECD8C, 0x0F64DFD2, 0xABB74F56, 0xD630E330,
+0xB6C44F10, 0x99C97D5B, 0xEA8D597C, 0xFAF680A4, 0x1243E2F0, 0x231CA4A4, 0x783F0F85, 0x51F47614,
+0x5DEAB2E1, 0xE33B213C, 0xB2D1780D, 0xEC4001FE, 0x89E2B6CD, 0x21C14239, 0x716C2A54, 0x1F3BB09A,
+0xEA37EDC0, 0xFFF79D24, 0xEBDF214B, 0xCB248539, 0x9EC47A71, 0x991DEFBB, 0xCD71C6A7, 0xA3CE1A43,
+0x37BE5A06, 0x54C93BA0, 0x53522571, 0xB9931225, 0x27AE802A, 0xBCD3024F, 0xCE6188DB, 0x52D6197D,
+0x9211E80E, 0x9FCEF1F2, 0x09CDF5E5, 0x8CEE1108, 0x47D82867, 0xD4D4B5BA, 0xA447D614, 0xB81A2B2D,
+0xAC61694B, 0xE721DAFB, 0x5659011B, 0x578F5524, 0x0C4A59C5, 0x760DD4B6, 0x21AE47F4, 0xA090144F,
+0x8720024E, 0x1257EDA6, 0x4B0773B4, 0x3F413BD7, 0x9BF705CB, 0x6C77FD3D, 0x7473159C, 0x66D0E4BA,
+0x37B0AEB6, 0x94E74861, 0xE65FF73A, 0x5E87541E, 0x250932DB, 0x72EE2AE8, 0x4761C377, 0x5D6A7706,
+0xBC399C51, 0x293447BD, 0x2B7C053D, 0x41E03A7C, 0x876F16C9, 0x2034B677, 0xC8F0D3E3, 0x9DC5D3DE,
+0x07AD224A, 0x41D05F19, 0x07F2BCA6, 0xD87C49CF, 0x3A66AF66, 0xFA8EF828, 0x6D8DEFFA, 0xC6531E73,
+0xFA83345A, 0x42F89CD7, 0x71FB2AB7, 0x73C911F5, 0xA114F046, 0x2D113941, 0x5540B734, 0x6A0A3596,
+0x394C977D, 0x40076456, 0xD3837F00, 0x389A5136, 0x1D60E1E6, 0xCAE72955, 0xE4A2DB02, 0xB13931A1,
+0x905BF013, 0xB4EE14E6, 0x59F09BC7, 0x5492DC61, 0xD6C2C6FF, 0x6DA28D56, 0x17BFEDB7, 0x0B209519,
+0x3A4BF72D, 0xCB6FECFA, 0x2631423A, 0xBA699B92, 0x7D68DD28, 0x911534EA, 0xAA952FA4, 0x78EC698A,
+0x9125706F, 0x169F61E3, 0xB72596AE, 0xB4CFD16F, 0x92F9243B, 0x01CC9ABC, 0x88E478DE, 0xF1678D79,
+0xE931EBA5, 0xBC21B0B1, 0x485AAB36, 0x8DAAE3F5, 0x7203439B, 0x2C6538D7, 0x59906D7D, 0x37AE92B7,
+0x3C8789FF, 0x1F398DE5, 0x6A3FE834, 0x48E2BC9D, 0xD7FAF99E, 0x65F862A6, 0xF1580B61, 0x0C28DA1B,
+0x3FA6FD94, 0x6377F7D3, 0x253B74E4, 0x2220F36F, 0x8E31FE5E, 0xF1832793, 0xFBB3A582, 0x80878CA5,
+0x06D62764, 0x74D4E912, 0x1B6A310C, 0x2FDDC59B, 0xF3FC052C, 0x28CB4E50, 0xEA44243E, 0xD5062421,
+0x3B2E2451, 0xD95157F0, 0xF251A27C, 0xB9BB612D, 0x5611DD27, 0xB785440C, 0x874F0179, 0x7D7D6715,
+0xDCC83160, 0x3E731CD0, 0x2F2CE80A, 0xA1A74938, 0xCBE2BC5C, 0xEB5AF40B, 0x657E4FDD, 0x2C8549CA,
+0xC87DC4E9, 0xC054EF96, 0x4281B11D, 0x2AE701B9, 0x0A5111D7, 0x11D84A98, 0x78DC59DA, 0xCEC60C84,
+0xCD840BDF, 0x95538392, 0xA34157D4, 0x2D1B64FC, 0xAEDD0308, 0x18BC20B4, 0x329D3A52, 0x1AAE49ED,
+0x9A200966, 0x9B7EBB99, 0xF1322781, 0xE2E8F249, 0xA1081034, 0xD5723D57, 0x4D350F93, 0x759A4AFF,
+0x177EB854, 0x4402E976, 0x528D239F, 0x759525DF, 0xD3AAA26F, 0x2F2068A0, 0xB6756198, 0x764D6B2B,
+0x1E3FD697, 0xD4B77C0F, 0x28C5EA32, 0x7EA1BD49, 0xE75618BB, 0x06F56F36, 0xEE29273C, 0x74DF4817,
+0xD72B4578, 0x72AB0A34, 0x81C16FA0, 0x88AF86AA, 0x5BE345E0, 0x92FC1852, 0x8FA6CCDC, 0x91BABE1E,
+0x36D9BB0B, 0x3AB548F3, 0x1529502C, 0xE2AA6D99, 0x3704DFBF, 0x81B7374E, 0x42D5D18D, 0xCA611E84,
+0xE20D1C57, 0xB7D075E8, 0xA3EAD7CC, 0x3644692D, 0x2215D9EC, 0xCFFA0A21, 0x16049D2F, 0x97D47000,
+0xF3D97A71, 0x5F8801A5, 0xCD58A4F4, 0x158A556D, 0x2C0F5E82, 0x136829E8, 0x11DCB9E0, 0x39CCA163,
+0xB7D2C450, 0x189914D7, 0x1D098912, 0xCC2CB445, 0x8F72231F, 0x998512EA, 0x00E7E936, 0x0F2A9833,
+0xB56B296A, 0x2C8F7768, 0xF2F7EE92, 0x29A69352, 0x92B129EF, 0x91217930, 0x820FCA82, 0xC357591D,
+0x37B6669B, 0x3AC0817E, 0x074008A3, 0x7DB32D9A, 0x42462F7F, 0x8752DAFB, 0xD2FD51CA, 0xB79B9726,
+0x68D3A85D, 0xF81C3DEA, 0x49CD8389, 0x76CD6B7D, 0x2BE63F21, 0xC52186C3, 0x9C799772, 0xDD4B4D94,
+0xFEF723A2, 0x66C222FD, 0x6CFB4D3B, 0x903B9816, 0x9003100C, 0x6689EF84, 0x065D93B0, 0x9A37E621,
+0xC85D5BBC, 0x92B002B6, 0x1395A722, 0xB749293A, 0x460A5390, 0x08908916, 0xF6FA5166, 0x0F320C4D,
+0xA91D8C13, 0xD87BDCDF, 0x04AAE762, 0x4397B825, 0xE6B009EC, 0x189880B8, 0x6F4FE4DB, 0x1226D381,
+0x087CBB93, 0xF2123496, 0x9F6514C3, 0x2A2A732A, 0x04D12B21, 0xA77BEC94, 0x3C72D9B3, 0xED925AE6,
+0x4BA17DAF, 0x684C5DE7, 0x08E9DAD4, 0x486D8971, 0x54F9BC75, 0x3F161389, 0xD82E3F96, 0x6D043C7D,
+0x42F09286, 0x05BBBFCF, 0xFBC723F1, 0x77FFBDE5, 0xB1E0BA58, 0xC0150675, 0xD537F2E0, 0x5F8D86F9,
+0xC0014D7A, 0x51C6CF01, 0x0F282256, 0xC430503D, 0x519FBD37, 0xDF724AC4, 0xF9BEBF25, 0xF903F9B0,
+0x50DCEA82, 0xA9AFCC4B, 0xD9B803E5, 0xEFEB8B03, 0x9CB74F5A, 0x0AF7E0FA, 0xB8D2A6F2, 0xDECC5B2C,
+0xBC215AFC, 0x39C6FD5B, 0xB98F5B9B, 0x3A874B2C, 0x9AB4667B, 0x4076CACB, 0x6B5A59CA, 0x4F4FB3A5,
+0xDBD8AC99, 0xD2FE2A6D, 0x9361CAC1, 0x8BBDBE97, 0xFA258A51, 0x60DA9B13, 0xDDB82ED3, 0xABCB7D5C,
+0xDFCC042A, 0x36C7D40E, 0x92736514, 0xCF76D269, 0x50138C62, 0x3A0CC959, 0x1BFE761B, 0x76802AA7,
+0x2F026550, 0x69FB4610, 0x63184D65, 0x5E33B750, 0x4B0B6AD6, 0x99368701, 0xF623B859, 0xD372FABF,
+0x3812253C, 0x1224587B, 0xACB65BF8, 0x3F754FAE, 0xB47849C8, 0x79B09962, 0xD456411C, 0x647CAC4E,
+0xA3B43C17, 0x86BEC15B, 0x4C93D421, 0x6648B91E, 0xF0962855, 0xF98C3076, 0x59F8364A, 0x1DE6F375,
+0x312C028A, 0x12BA5EC8, 0x1A1A73F3, 0xBD07AAA7, 0x8B7863D7, 0xE7ECE2AE, 0xC5E653B8, 0xAA4DA932,
+0x078DC729, 0xAA51FADF, 0x68E01FDD, 0xA75F2BF3, 0x85C5B164, 0x9519EE12, 0x659C8392, 0xB843CA14,
+0x3A828EB8, 0xF40E22CB, 0x13A16919, 0x1376989D, 0x75B51883, 0x0194A26A, 0x66B0A444, 0xB44E0FA8,
+0xA58A4016, 0x31038220, 0x232B2FA8, 0xA00502FA, 0xC86AC08B, 0x26D433F3, 0x5D4C2143, 0xA67161FE,
+0xC0952F9E, 0xB4D31F48, 0x57495CBA, 0x9EAF6720, 0x8B0C9DD4, 0xC1CC998E, 0xB21B3201, 0x3FAC0914,
+0x39B04E2E, 0xE36B8B59, 0xA92ED20B, 0x97C5CBF1, 0x75ED65E1, 0xCACE47D5, 0xA95F550E, 0x2CDDB48C,
+0x49C8ACBB, 0xAD0EE5E6, 0x908ED91F, 0xBA98A655, 0x49D32B96, 0x7AF36465, 0xB3A09407, 0x3715F4C4,
+0x226598B3, 0x495B2519, 0x0D176082, 0x40B5D5FD, 0xDF2E36ED, 0xF72CA8F9, 0xBB8EDEB8, 0xA24489D4,
+0x71D1441A, 0x41EEA26B, 0x8D2EF29A, 0x9662D9D0, 0x1D78D17C, 0xB57994E8, 0x4F3CFB07, 0xA5F9925E,
+0x8AB1F0D3, 0xAB8F25EC, 0x6155BEBC, 0xCA2EC32B, 0xB6B0F054, 0xEDE18C34, 0x2B4FAD1F, 0x032FF3CC,
+0x18311320, 0xDC05D2A9, 0xCF30382F, 0x41B1DC4B, 0x72FFFC57, 0x178FA1F8, 0xB2880E3D, 0xA8366C7D,
+0x1A4C5228, 0x6F24B888, 0xDEB6C899, 0xF339419C, 0x4823AE1E, 0x5B71C7F1, 0x72DFD257, 0x4E7FA9DA,
+0x7E63A37D, 0xC61EE5BE, 0x2B2EE7F7, 0x6AECFEB8, 0xD2A49445, 0x442245B0, 0x38F89A83, 0x42B923AE,
+0xA5FFDA12, 0xFEA8A632, 0x8958B70F, 0xD179EC46, 0xDD49EFF4, 0x76222FBE, 0x9CAB4A29, 0xBBC25732,
+0xC87D0F98, 0x417B799A, 0x681773F2, 0x394471B8, 0x7BA29A5D, 0x0B6F0B2F, 0x884B2CC8, 0xDBA6A124,
+0xD4D7D53B, 0x100DCA3F, 0xDB5B8D44, 0xC9C4975E, 0x2DDD9880, 0xDFCA2D72, 0x278D0B7A, 0x3B72C902,
+0xF8351BF5, 0x9BCEF0D3, 0x6484DE01, 0xFD2913B4, 0x0AE42F3A, 0x4DE80110, 0x62138729, 0xE83663B0,
+0xB3B5C492, 0x1C58D093, 0x69BB9028, 0x44655E26, 0xE2A6AE51, 0x7838C314, 0x34C7B2A3, 0xDA10A9D9,
+0x7B1FD2BF, 0x275F2588, 0x4E05CA1A, 0xC971F920, 0xAA04E88E, 0xD56701D3, 0xEFC24E99, 0x1698ADD1,
+0xBF215AD7, 0x68FE82C5, 0x799B3AE0, 0x2F1C9DD6, 0x394CC3FC, 0xF873C476, 0x87D972D4, 0x77A9B5A7,
+0x36D3B3A7, 0x69C5B04B, 0xB42156D4, 0x0628EC73, 0x9BFE3E10, 0xB5365719, 0xFDEDA2F4, 0x730ED8FF,
+0x1A68E6DD, 0x567E010E, 0x7F69D66B, 0xB9446F8F, 0xD2E7C295, 0xAC9F1373, 0x2A9D4BE9, 0x1CBAFF5B,
+0xB23E3C9F, 0xE520F972, 0xF4B2D740, 0x2756943D, 0x21F5F313, 0x740913BE, 0xA5170976, 0xC858B4F0,
+0x90A51B36, 0x182FA94A, 0xA71904B8, 0x1BCC47D6, 0x145A95EB, 0x3072FA4B, 0xEBFA087B, 0xE64CE5B1,
+0xAAB0D342, 0x6813C6A3, 0x60B09175, 0x5DA00775, 0xFBB2A0B1, 0xA27DC5C7, 0x19221AB7, 0xE44065E5,
+0xB1BA49CA, 0xDBF25219, 0x90A56951, 0xFA610231, 0x8D80CDB8, 0x2FBAB7F8, 0x55C4BF9D, 0xE65F97E3,
+0xDE8973A1, 0x50CD8D9C, 0xD77FBB4F, 0x314F0A60, 0x4634F51D, 0xE2A78D1F, 0x5A18A87F, 0xC6B9F9DE,
+0x733C65F8, 0x91E582A6, 0x4AF1713E, 0x08B8F86F, 0x23AD5CCE, 0xA079E4F5, 0x01BC0950, 0xBEF7AA06,
+0x07BE4DFF, 0x198BDB90, 0x5520D6C1, 0x31F0CF40, 0xD9A67616, 0x004C7679, 0xB1DCA811, 0x991CB570,
+0xCB5021AB, 0x99E34AE7, 0xDE897EF5, 0xC77B7DF9, 0xE8AA44DD, 0x33ECD437, 0x88020260, 0x51B12FE9,
+0x9F33BFC5, 0xDD222461, 0x58077CFE, 0x4ED8F606, 0x9ECFB4C4, 0x77C2EA7A, 0xC86EE11B, 0x4A9281F5,
+0x6655F139, 0x3548B811, 0x0D61761E, 0xCD608544, 0x244B8194, 0x5461E203, 0xD5AD7DF8, 0x5960D7F8,
+0x5A506B6A, 0xC6DB0EA7, 0x3FAFA57D, 0x97F6C5E6, 0x53FE9B58, 0x122C884A, 0xA8DC9AF9, 0x547B7D41,
+0x97C5CCB5, 0xE53C8FA8, 0xD2096662, 0x53C409EE, 0x9EAB21D6, 0xAA44354D, 0x68176D55, 0x8940D23E,
+0xAEF5A6E5, 0x54F9CDD3, 0xBDB3C6FE, 0xA2DCD2C5, 0x09E930F4, 0xCBB536F8, 0xFBA346FC, 0x66FC95F4,
+0xAA58974F, 0x9A8D1D12, 0x227D276C, 0xFE79E4A3, 0x9045E1C9, 0x11B6BCDF, 0x0283A553, 0x6FBD33DF,
+0xB054F9D9, 0x76FFB76C, 0x2ABEA70F, 0xF9913FA4, 0xD76BE912, 0x97B76067, 0x89288C3B, 0x9D098EA6,
+0x81E34200, 0x6AB87A0C, 0x43F1F55D, 0xCBF1434B, 0x935D3528, 0xBA54DF1E, 0xC743C7FF, 0x5A323A3A,
+0xBA96DB5B, 0xBFDC35B5, 0xD4B0863A, 0x6032F63F, 0xFE9685DB, 0x61286A3D, 0xDC97A7BF, 0x711890A1,
+0xA2AD349C, 0x0FD12FE3, 0xBC6F8683, 0xF81D5A1C, 0x126B0DAD, 0xC5562B2A, 0x1D6E4F54, 0x803624CC,
+0x06D49D9A, 0x477509C2, 0x564AF72F, 0xBDD164E9, 0x7EBAD41A, 0xC8912CE0, 0x8411FE2E, 0xD387F25A,
+0xBB57D720, 0x4F1BFD4B, 0x92DB5218, 0x56177113, 0xC63A24E3, 0x548E4434, 0x01DD2688, 0x94F03C11,
+0xBA0EBE83, 0x88EBE978, 0x7E826456, 0x1B3A0F36, 0x4C54E7F7, 0x1D2763E6, 0x5BA5CD4B, 0xFB942F78,
+0x86FFA522, 0xECE9B27D, 0x718FDE1A, 0x1B3D05F3, 0xF4FF17A4, 0xC11846A2, 0xDC50A04D, 0x23AFC130,
+0x9D0E46DD, 0xE614403E, 0x5E092260, 0xB8D4D872, 0x211F652F, 0x49AB04AB, 0x19AA1C83, 0xDBC38F04,
+0x87F85BB0, 0x6D182A30, 0xCBD4D962, 0xFAE138CC, 0x55DB685C, 0x6D73973B, 0xCC3E752A, 0x17294C65,
+0xA3266005, 0x1191A126, 0x32B6CEC2, 0x1C1CFD40, 0xEF05589E, 0x7B4F31F1, 0xD6700908, 0xDD2BB41B,
+0xBBCCC633, 0x2CE80886, 0x5DC98AAC, 0x1BD26C95, 0x2455040D, 0xB8303139, 0xE8670E87, 0x591688DB,
+0xDD0E7D79, 0x5496C0F2, 0xE7840640, 0x00F1B831, 0x5E9C215E, 0xA2F6FAF3, 0xCFB1B6A2, 0x893C6CB2,
+0x69F53734, 0xF1144C70, 0xD090F522, 0x7DB774C8, 0x95D1C82E, 0xCC953785, 0x3A1A9CFA, 0x764D8915,
+0x17020F0E, 0xFD384A7C, 0x6BF59E26, 0xF8623CDE, 0xF4DBFC89, 0x4D7AC535, 0xC09D671F, 0x788F89E8,
+0xD4737A38, 0x1CB1AECD, 0x99621BF7, 0x9D034435, 0x18DE20C7, 0x26506C46, 0xB444C631, 0xAE33DB83,
+0x9A4A8A2D, 0xADA64479, 0xD2A07C91, 0x5AE94342, 0x74CE59E4, 0x5EBE34C2, 0xC59B74B6, 0x13641B79,
+0xF3824758, 0x6327E01B, 0x735A1035, 0x641D50C9, 0xAC40D27B, 0x457B8E4A, 0xDAF056EC, 0xCF3541C0,
+0x197FD4BA, 0x485B50F5, 0x161D6AF1, 0x7B36A52E, 0x4C6C6F1E, 0xEAC2425F, 0x54D59936, 0x8452761E,
+0xBB7F965E, 0x0C199CF3, 0x1194535D, 0xFD20099C, 0x7B380738, 0xFE89C3EF, 0x04ACC111, 0xCD45D964,
+0x9355A468, 0x03136077, 0xEF2EEBD7, 0x9EA9172C, 0x7F71319A, 0xBC2FB9B2, 0x1C5E0E59, 0xE463BD1E,
+0x3D02F830, 0xE51E5AC6, 0xF84CB2DD, 0xDED7D885, 0x3114F02F, 0xB51909AA, 0xA0B0D8F3, 0xEAB0C70F,
+0xCB6AB05D, 0xF411A396, 0xDD409630, 0x7F2087AF, 0x222105A4, 0x2BFB95D1, 0x732644DA, 0x4FF62527,
+0x6601F67D, 0xF8A548DD, 0xE16AF702, 0xB2F4C5F8, 0x143A7FD4, 0xF33688DF, 0xB4BBA276, 0x223FB420,
+0x0989FD1F, 0xF5F3D5F2, 0x6B8826C8, 0xA0539EA5, 0xAD5B0C4A, 0xC493EA17, 0x514D58BF, 0x9CC29707,
+0xA306DE3B, 0xD8B9DDCB, 0x61676126, 0x028323C3, 0x6E055E1D, 0xD8B3436A, 0x2E386321, 0x38044258,
+0x69D80E3F, 0x5FF85C58, 0xA305EEF2, 0xEA655D91, 0x5BA499D8, 0x45A74D84, 0xA0492327, 0xD84A2E23,
+0x492CB9E8, 0x2F7205B1, 0x02BEAA10, 0xDFB1FD14, 0x9133134E, 0x83B92011, 0xBC344D20, 0xA1139FBE,
+0xA263AC84, 0x2AB06969, 0x2546A979, 0xF8607254, 0x5079C71C, 0xAF721999, 0x4479A115, 0x189B1C94,
+0x59EFE52A, 0xEFE5117A, 0x697F8C12, 0x51776EE1, 0xA8BDCD03, 0xD668F29C, 0x967E713B, 0x120D4D6E,
+0x0FEB0FB6, 0x839118EC, 0x02278A51, 0xB5F3860A, 0xF982F521, 0xFEDFE778, 0xC0E02F8F, 0x4F8AAF4A,
+0x5F2200E1, 0x74A66691, 0x6296CC5E, 0x6AECD567, 0xDAF59008, 0xD77DF64E, 0xE3A200F9, 0xEDEC49DE,
+0xE8FAEE0F, 0x59C737B5, 0x3A09C162, 0x584C4D53, 0x4884236B, 0x44900365, 0x19F736C3, 0x982C84F7,
+0x8DD68A09, 0x6A15068B, 0x647F85BF, 0x20B1DA5E, 0x7D944D71, 0x11B989D6, 0x08A284B7, 0x3327615B,
+0xFDB6F4B2, 0xC49F11B6, 0xAE2BCB8A, 0x2811DC80, 0x9FFB1DCD, 0x816294DD, 0x1D2515CD, 0x98D60D65,
+0x87593B28, 0x52B4B063, 0xAE145509, 0x1CD0271E, 0xB0EEAF62, 0x6BE9015A, 0x8B8BA620, 0xA77A1305,
+0xE8743091, 0x406D85B9, 0x9A816922, 0x1C9D6063, 0x57D7E948, 0xB700E56A, 0x42F09F82, 0xC107D08D,
+0xC2660B0F, 0x4C729EB4, 0xC7502523, 0x981F16A4, 0xEBFA6348, 0x2EB4D81C, 0xEF01BF40, 0xE73FC8F0,
+0x848A5E79, 0x936D4B31, 0xDD02FED3, 0xEC65624A, 0xA133D455, 0x7B8F5E5C, 0x2F7F8DB8, 0x5F1BF357,
+0x2E431485, 0x890C7F2C, 0x470DBE37, 0x7358A862, 0x0CF5EA0D, 0xF8143988, 0x7E97A6B1, 0x95E80B90,
+0xF9515A85, 0x6B8E4AAE, 0x187C470D, 0x9A555A6C, 0xCC33B36E, 0x70850750, 0xAE42F1FE, 0xB87A5262,
+0x89D5F7BF, 0x2B4E5E66, 0xC29F7863, 0x9E1615C2, 0x06D0454B, 0x5AF9C0BF, 0x8576DDD8, 0xD70F1949,
+0x876AF78A, 0x63AC4D04, 0x41B9EFBD, 0x185EFA67, 0x0EF695C3, 0x58B0C129, 0x34C0C43E, 0xDFC14A89,
+0x6C1CD26E, 0x7208E8EE, 0xDFDF300B, 0x2B19D913, 0x0B21D74D, 0x1D0EFF79, 0x41A954A0, 0xB2F9BE6B,
+0x379E1980, 0xA3D7B77C, 0x7E809767, 0x4355B3F4, 0x2C9B9526, 0x34319653, 0xD7D63F73, 0x6AC4846C,
+0x0DF4C8D8, 0x0C8C2645, 0x74C5E273, 0x6F1D2AE5, 0x7D9F5FF8, 0xECFCC9BA, 0xA08E8E73, 0x17D5CAD6,
+0xBC0F0156, 0x58DD047C, 0x0EF6A669, 0x1C301B10, 0x03123AF5, 0x033B2E95, 0xDFDEC6E3, 0x5A892BB5,
+0x9EA034CB, 0x222EA8B6, 0x6B03EE4E, 0xE7A2264E, 0xB2B8D2EB, 0x1881F1E5, 0xEC145FE2, 0x1B493D80,
+0x5D3BADAB, 0x239470DD, 0x1D2FFEDE, 0x905875F4, 0xA6F0A011, 0x71BC27D0, 0x2422F6EE, 0x38A5992E,
+0x8E517DCB, 0x1751343D, 0x2F211B85, 0x1D50F340, 0x0F6B3F85, 0x1F57B74D, 0xDA42999B, 0xAD1099A6,
+0x3B7B3EE5, 0xA1FF38F7, 0xB2E58D22, 0xA9D22B28, 0xEDBBA90E, 0xCEBE82B3, 0xED420F0E, 0x8BAFEB3F,
+0x35F7D1C2, 0x9EA5FA7F, 0xCAA33F65, 0x7E45FEE7, 0x3A2E99B2, 0x24CEA5C2, 0x40153EDD, 0x3B127ECF,
+0x8B208544, 0x07BB40D9, 0x73485CC0, 0x3F0523FB, 0xAD79C41C, 0x541E712A, 0xAEC6423E, 0x41E8905C,
+0xEDA20EC9, 0xBBDB531D, 0xBD1B0B13, 0x0DE1F512, 0x101A4C66, 0x899DC367, 0x21AF3ACA, 0x46AC75F0,
+0x694AEB1D, 0x7BB7875B, 0xA95A2F5D, 0xEF4E5203, 0x09EA7015, 0x41E16591, 0x31DE9E72, 0xAF631142,
+0xED39B07C, 0x5F0AB0CC, 0x8B3E4862, 0xB6D56B5D, 0x3BEE9B8A, 0x428250C5, 0x56EA98E5, 0xAC64104B,
+0x6C6D5890, 0xAD0A1062, 0xC6B5A590, 0x5DDD0DEA, 0xFAFAE4B5, 0xF02E510F, 0x00E1A468, 0xA89EE83C,
+0x53289084, 0x3F51353F, 0x65912FF5, 0xE7ECC235, 0x5907C273, 0x406DD05E, 0x18AE23A2, 0x7F394AFB,
+0x1E648D78, 0xCCD2DC69, 0xA9B5C004, 0xF5E83E21, 0xF5901322, 0x869BAB26, 0x0A239201, 0x9EA43261,
+0x06DEE371, 0xBC4420CE, 0x521FA025, 0x6C4D997A, 0x7D6A0486, 0x45D67D6F, 0x3EC5DFEB, 0x4F555E03,
+0x41D101D8, 0xE2F9C79C, 0x0AE656E5, 0xB0DB736B, 0x7461E64E, 0xD6962FDC, 0xA2A452AB, 0xA360E983,
+0x34E8BC2F, 0xE73FF225, 0xED4154CA, 0x2380E14D, 0x20822143, 0x2E7319DE, 0x1652A57D, 0x84434644,
+0x2AED4BD5, 0x5D77599E, 0x4F7DDC7E, 0x150F3C3B, 0x76E2F0C5, 0xA9A21BC7, 0x5D8F9D7D, 0x0BE08E2A,
+0x01AE91E5, 0xC901FCC2, 0x10359FD1, 0xDCD4D6CF, 0x6DF965C5, 0x213BB6F8, 0xCA119222, 0xD5158BA6,
+0x4B8195BD, 0xE039E59A, 0xA7621A2A, 0xBF779070, 0xE619DCFC, 0x8F4B22EC, 0xA8A18A1A, 0x3E155F89,
+0x03843350, 0x8BA61FBC, 0xFBC42DB9, 0xC8F9C192, 0x060BD800, 0x32D9AD03, 0xC6F33E46, 0x506DF5FA,
+0xF2F3D8DB, 0xBD69A734, 0x1ABD8E96, 0x74A7E973, 0x7C5567EC, 0x033F983C, 0x3DA9F782, 0x9322CFCA,
+0xEAADAD1D, 0x631D6AF7, 0xD4264046, 0x6AB4E000, 0xA7BBB3C3, 0x65277FDC, 0x2F87DC17, 0x831FE13D,
+0x758519A0, 0x393CC415, 0x68B78E4D, 0x33773401, 0xE934BED2, 0xD4A93A09, 0xAE64E1A0, 0xD460086B,
+0xB9321432, 0xE9143944, 0xFE5EBF60, 0xB3B2DC29, 0x355EB5EE, 0x037EAB46, 0xB51D5C45, 0xA37754DB,
+0x88C8CAE3, 0x59184F98, 0x715EED08, 0xE96B125F, 0x2A0573D6, 0x9C96C719, 0x0E111A5B, 0x1C257BD2,
+0xA245C7A5, 0x685B2D8B, 0xBAC7CAB0, 0xE5105419, 0xA867DA60, 0xA1F30546, 0xAC63E4D8, 0xF1781B58,
+0x8E803635, 0x9D06A1B3, 0x26DB98EC, 0x05C58EC1, 0x2CAFC1BD, 0x46D67812, 0x02684602, 0x36524F9B,
+0xAD747DA2, 0x621D16BE, 0x41A1FCB4, 0x30494DCB, 0x10918C6E, 0xEC4E41C6, 0x9749892A, 0x3147CF41,
+0xE6E6C059, 0xE3402713, 0x0A64568F, 0x048CBB18, 0xC0589B37, 0x5BF41988, 0x4AF8DFB5, 0x773240E7,
+0x0998B9A1, 0xE0557C69, 0xC2D4426D, 0x787A40B3, 0xF31D84FC, 0x8AE1CF73, 0x2217607F, 0x2862A4BE,
+0x22B40145, 0x1F58C873, 0x909BFD58, 0xB5C83DBF, 0x98581F0E, 0x55429332, 0x532EAA28, 0x8124E6F1,
+0xDBE9FAA6, 0x10EDA428, 0x2F763A61, 0xC9F04CF2, 0xD8EAF853, 0x744DE63C, 0x37E7838F, 0x5BAA6FBB,
+0x5A390B1E, 0xE8D29ABD, 0x11763CD6, 0x45717771, 0xE990FFAC, 0xF964925C, 0x19C54847, 0xFF10170B,
+0x785D75A0, 0xCB2DA1FA, 0xB4DB62D4, 0x82F57457, 0xD6AB0ED6, 0xA6B6FB45, 0xB110EE4E, 0x04979D30,
+0x88584C75, 0x966C003F, 0xBF6FACE4, 0x8B8159E8, 0x7384E9A3, 0x104ECEB2, 0x0BA09669, 0x1431AED9,
+0xE9CD1AB3, 0x4ECFB69E, 0xBDD757D9, 0xD565155F, 0xC1AE2041, 0xE75F1ED9, 0x4607BB33, 0x4F3531FC,
+0x845776E5, 0x0159A0A7, 0x02BAC3B8, 0x878C4D15, 0x6B86D344, 0xF3158AA9, 0x01739220, 0xC6B0F1B4,
+0x6E4B2EDB, 0x2B23235E, 0x33681190, 0xC602975C, 0xB98D3A34, 0x514397C8, 0xEE79585F, 0x260E033B,
+0x1140B016, 0xA4E95612, 0xEB71B0C5, 0x0F52BF8B, 0xBE19FD2B, 0x38CE7269, 0x892AC90D, 0x6B15F3A5,
+0x085BDB96, 0x94C0BB87, 0x0C1F9CF7, 0x764A1AD2, 0x88DA0BD4, 0xA65A39F2, 0x85423E1D, 0xBAA78416,
+0xD42091E2, 0x55D0618D, 0x7EFF4BF1, 0x6968B742, 0xC641E9BF, 0x5D537C81, 0x99B38DAE, 0x21EB077C,
+0x33647AA0, 0xB617EAFD, 0x05ED722B, 0xD918EACB, 0x53370C07, 0x90454D31, 0x06BD7ACC, 0x338E0829,
+0x589457CE, 0x1B5F8785, 0x0021C3C3, 0x27F54DDC, 0x76A03EC9, 0xFC0D486A, 0xD7F140D3, 0x4B1C96DA,
+0x37918F87, 0x0860C602, 0x1FF3BD6C, 0xF6A6D12E, 0x3E4EFC7E, 0xFB786F83, 0x5FBB8302, 0x4B74E4E4,
+0x6BE5DAC5, 0x6FFB4683, 0xE7135941, 0xAC869133, 0x2C3E211B, 0x12107940, 0x3399D55D, 0x05926699,
+0xF8BA612D, 0x8D811FF4, 0x034FCE20, 0x72266EC9, 0x7927C901, 0xF2B9BA55, 0xF9E5D63E, 0xD627BE1B,
+0x93365A03, 0xD2D810FC, 0x3323A853, 0xEF2F2108, 0xE38E5DAD, 0x1E675BDE, 0xB711F982, 0x19CFA67D,
+0x42DA19EC, 0x82C7478B, 0x02945258, 0xC6712460, 0x20DC8BFA, 0xA74172C1, 0xB5D700DF, 0xF5C31B65,
+0x67DCF7B4, 0x3A253E26, 0x49BEED64, 0x6E15A952, 0xA7B99719, 0xD6FC0449, 0x0EBE1F07, 0x3E899DD2,
+0x5267BDF1, 0xECEF1B97, 0x20033CD6, 0x3C4F39A5, 0x30192C48, 0x95BFC4A7, 0x75BF1487, 0x305DEEF2,
+0x24D75D80, 0x20A13FAC, 0x8BFA7DDF, 0xF49B7A6E, 0xDACB75DC, 0x46B784C3, 0xE77CF329, 0x706A1D73,
+0xFD1CCE3F, 0x1933BF35, 0x79933E6C, 0x71AA1C5C, 0xBBFBDBB1, 0x97778FE9, 0xB64FC34C, 0x8593E867,
+0x3F3EAAE1, 0xEFF66B62, 0x4FAFDC87, 0xE33AECFA, 0xFFA3A413, 0x6C00007B, 0xE4BC9767, 0xA09ECB42,
+0x2CD31620, 0xA99CF74A, 0x414835D2, 0xEFC1F10C, 0xD1634C60, 0x63163380, 0xA805B5A6, 0xA918B5A3,
+0x00EFC448, 0x5DB346C0, 0x1830F2C6, 0x0CFAB7B6, 0x9891AF84, 0x9ABFFA7F, 0xD62E28C9, 0xEB5D3748,
+0xC68CB7E7, 0xD9D304B0, 0xFCE7BA78, 0x008B5A6A, 0x3424621E, 0x6280514C, 0xD5994076, 0x037E596E,
+0xADF36511, 0xC9749593, 0xEA531410, 0x1A850D8A, 0x43D097CD, 0xEA34B126, 0x251C0E8B, 0xAC85A388,
+0x7C3CABD4, 0x78553C76, 0xDCF5D913, 0x55566B64, 0x4E218B6F, 0x17607A9D, 0x802EE0F8, 0xC76E92B2,
+0x356BEA39, 0xBAF40206, 0xB1E06399, 0x67A94B65, 0xA901E744, 0x5560C5AA, 0x75E59A05, 0x69E7E10C,
+0xFCAA9C0F, 0x4BECF588, 0xD9A594E7, 0x8D82FFBF, 0x269F208C, 0x1FEC1233, 0x7CA65669, 0x3C14C39F,
+0x4C106051, 0x3E6AD776, 0xD3A2FB29, 0xDE9272DF, 0x8EF8FDD2, 0x287B9CD6, 0x07345047, 0xC95A8248,
+0x22056B09, 0xDF83AE95, 0x64ECA754, 0xD886F2A3, 0x6CCDF9DD, 0xE6FD86EF, 0x75FC9B54, 0x3E3BBAF8,
+0x92EE237B, 0xB206163F, 0x490D80C2, 0x5DEDFCA1, 0x303A1599, 0x7A5D14F0, 0x919EBA61, 0x4BD3E687,
+0xF8467D06, 0x1EF2F29E, 0xFED60615, 0xE006E468, 0xAE3A65BA, 0xDBB8B688, 0x2F56AC19, 0xF03F9B77,
+0x939A985A, 0x45C57E63, 0x129814A9, 0xF69336AB, 0x4DF09657, 0x57E94904, 0x5D81C156, 0xABE4CB96,
+0x060DE748, 0x05F048DB, 0x9A3CAA96, 0xB84DEA7D, 0xD5719793, 0x0B2724B6, 0x797E878A, 0xC9DD9FB5,
+0x7DB9BD91, 0xB5D368DD, 0xBA08995D, 0x686F7D57, 0x6BBA5984, 0xDDD163D7, 0x22264B62, 0x86BFF6E6,
+0x8AACC040, 0x9D4C3520, 0x91964355, 0xD4C3B129, 0xF0240433, 0xDC7C902D, 0xB6C78075, 0x8A7B6F47,
+0x883124FF, 0xFF23A1B1, 0x3938F92D, 0xB9B2D975, 0xD0392ECF, 0x51F92D2C, 0x042EF3C3, 0x47B00F3B,
+0xFB685985, 0xE7944F7B, 0x36EAECA9, 0x113F3145, 0x0F201201, 0x95855715, 0x2FF8A903, 0xDA4A9E3E,
+0x6EB2B774, 0x1F0950C9, 0x0ED56C61, 0xB1FEBB62, 0x9DE54E5A, 0x885E6119, 0x2720C084, 0xE9609736,
+0xF254DE16, 0xC47B9A6D, 0xA472A245, 0x2B166E8E, 0xCAF168ED, 0x4111DBBC, 0x5722DB62, 0xF3034C31,
+0xA8B7A39F, 0xF3B4C9E1, 0xF6A366BB, 0x5C590FEA, 0x77AE1A4F, 0xA725AA75, 0x5DF9C8CF, 0xA3D0B97C,
+0x16DA9FE8, 0x13CE9CD1, 0x73EE2F94, 0xE590786A, 0x77143C5E, 0x92C26B2C, 0xF8C190C9, 0x151D81CD,
+0x47347BEE, 0x5FCC0A45, 0xE7FA9FDA, 0xC6124AA4, 0x24B32701, 0x43815A74, 0xE8A8857E, 0xF7B7E45C,
+0x5914ABB9, 0x40F3FDF9, 0x5875E486, 0xD40CAAEA, 0x1BFD781A, 0x1D1353AF, 0x9C27AD70, 0x3A6A5917,
+0x8371D12E, 0xDCE83920, 0x5DAB2F87, 0xBD43C254, 0x6266ADA1, 0xC310FD98, 0x98DEA88A, 0x40B0B57D,
+0x40F033A8, 0xFC31F60F, 0xCAEB7C1F, 0xD7E1FF09, 0x57366036, 0x3A7144F5, 0x17E49DDD, 0xA1A12E60,
+0x6FF7A0CB, 0x960D040B, 0x3574BB76, 0xCE7FF2A5, 0x572BDB09, 0xFB49FF8C, 0x137CB77B, 0x9D49947F,
+0xDD0F7571, 0xB0B3BD6E, 0xE246488A, 0xDA07946B, 0xEEEC5525, 0xFC8689BF, 0xA58777D7, 0x5227B5DB,
+0xD9AA04E8, 0x7614270B, 0xF11531B3, 0xA63062CC, 0x8F7FFFB5, 0x30A126AB, 0xD4109032, 0xB479CD29,
+0xF74FE9A7, 0x7FD4B5B8, 0xEF40C19B, 0x49C2B544, 0xAF31BCFC, 0x190EABE4, 0x03CBD144, 0xB334D996,
+0xCA78BA7C, 0x695D0810, 0x14AE1A62, 0xCBDD72B9, 0xE175B94F, 0xC140393C, 0x4A5C92B2, 0xC9D48908,
+0xCF4FB538, 0xD62E8B7B, 0xFD7F805B, 0xC04608BC, 0x2428D36D, 0x03CBDF4C, 0x42558D46, 0x74A80CD4,
+0xD9AF7043, 0x0F0DA696, 0x61F5D344, 0xA7B3F55D, 0x3F815B40, 0xC28F82CC, 0xA4DC3914, 0x0E89AA38,
+0x85DA997D, 0x7835A951, 0x55A8D414, 0x2737D798, 0xBCEDE401, 0x8A14F338, 0xC6593108, 0xECA585F9,
+0xC6863B29, 0xF14BC18A, 0x7E5E4574, 0x240CF283, 0xA7EA2AA7, 0xC5D1A9FB, 0x04985FD4, 0x6D4FD522,
+0x8CE18D67, 0xD218BB93, 0xF5F96EDD, 0xFC10A292, 0x2E2A6A20, 0x8885F939, 0xAA4C98C1, 0xA35E7378,
+0x1A9621BC, 0xBF32E434, 0x98B8217C, 0x5A714EE5, 0x8F7FAD2D, 0xAF4F8173, 0x6C212B26, 0x60BB4410,
+0x58499202, 0xE5D406B5, 0x40545B75, 0xF8F22ACE, 0xC325B4B8, 0x5A55EF32, 0x978182E8, 0x5A427CD7,
+0xC7294F68, 0x3396748B, 0xE8112581, 0xDCD3E510, 0x3EF2C9DF, 0xA27BDD79, 0xEB2FFFE4, 0x66326732,
+0x91CA77C9, 0xF5135CF8, 0x349C8C93, 0x99A4996C, 0x9B31E5CC, 0xEB4248AD, 0x08C3F036, 0xB46C4FDE,
+0xEFF2159A, 0x38E2E0C4, 0x9C07A78B, 0xFFC45A4F, 0xB1A93B39, 0xD101BC95, 0x156A82B1, 0x9436B49C,
+0x37F242D3, 0x2169156D, 0x3EEE69A5, 0xFF2F5143, 0x80E31511, 0x576897DB, 0x259A80B9, 0x6D15AF5A,
+0x781F0410, 0x6E0329FC, 0x31D0FFB1, 0x72E70AFB, 0x58A77319, 0x4B433AA6, 0x17AF4C1E, 0xB96CF30F,
+0x99D6A0EF, 0xD90B39A5, 0xC65CEB87, 0x3412398A, 0x85BDE896, 0xEF876BEB, 0xA7F3FB4F, 0x231AAC32,
+0x07ED194E, 0xD10258E7, 0xFA5D9F1A, 0xADAB4E54, 0xFDB5B488, 0xB4CFCAE5, 0xE11589F9, 0x8286D975,
+0xA82BC973, 0xC407936B, 0x37A6754D, 0x6371802B, 0x91B1E879, 0xB7A875B6, 0x28CAB7C7, 0x8CDE66FB,
+0x06DF63A9, 0x8BAA6F08, 0x01A0B2E9, 0xBC2B30A5, 0xC0D80075, 0x48454AC0, 0x74BFF018, 0x6F78628F,
+0x6E8474F0, 0x6AC7B24E, 0x05900453, 0x9EFC1070, 0x59F621B3, 0x9AB684D6, 0x48776EC3, 0x35C99CBF,
+0x7D240BB7, 0xBD03E7A0, 0xE20ECFEC, 0x5BBAA2AE, 0xC4F54766, 0x893ADA3D, 0xE51AD2E3, 0xD9438F15,
+0x04F4670A, 0x40957D60, 0xE071C9AD, 0xB784785F, 0x13B3B4D7, 0xBC116EDF, 0x206C2DAE, 0xC64F2577,
+0x68F442CE, 0xCAFA5B51, 0x3DBE99F5, 0x95D66E01, 0xE3146546, 0xCBE0E42E, 0xE057D3F8, 0xC368531E,
+0x6BF0A59C, 0x738AD924, 0xAD56A4E0, 0xDFB77C22, 0x9421A7BD, 0x9474F0C7, 0x32EF6B0B, 0xCEEAEB68,
+0x6312F893, 0xADFE9A5B, 0x663701FF, 0xFC71171B, 0x22E92C6A, 0xA1E06C5D, 0x5103149A, 0xD56A6F20,
+0x6A0B1DA7, 0x1BBDF10F, 0x9AD6ED1F, 0x71EF38D5, 0x7D79806F, 0xE44BB833, 0x68455FE7, 0xFBABC508,
+0x3F267811, 0x88C5FF5A, 0x9CD44CFE, 0xB3419688, 0xE26117FE, 0xEF787C65, 0x3812ED00, 0x04E8C842,
+0x459E066B, 0xF5E00839, 0x75FE7FB8, 0x464F15FF, 0xE8779349, 0x9D4B4E46, 0x9D4FF3E2, 0x0B45DA32,
+0x3100090B, 0x0B67C4A6, 0x84D0FC78, 0xA7D9C80A, 0x3588703F, 0x7FCD0E59, 0xCD8DEB80, 0xD5EAA7D6,
+0x2E0294EA, 0x8A7CDA57, 0x5087A0E7, 0x85718377, 0xD714C48E, 0xE797AD5B, 0x480E1503, 0x79A780D1,
+0x555B20D7, 0x2589671D, 0x27B8CE27, 0x3C04821D, 0xD3E265FF, 0x9A5DB575, 0x04385B7A, 0xAC2A70F2,
+0x4BDEB2E1, 0xDDD33195, 0xB8888747, 0xC50C52A4, 0x93825A8F, 0x07E8FEDB, 0xB09134BC, 0xF3130C30,
+0x76F5A60C, 0x00FDF180, 0x8B388989, 0xD99406B1, 0xF7D3490B, 0xF2165FCF, 0xD3FA78EB, 0x38C4A3DE,
+0x141498DA, 0xB03D987A, 0x0A840D15, 0x1ED5F5AE, 0xA6C22C74, 0xDD184C83, 0xF0D9F022, 0xBB58D1E2,
+0x524D7C3B, 0x2696001C, 0x002818D4, 0x6BE1A832, 0x7562CBBF, 0x86F0943A, 0xF4990CFB, 0xCE040871,
+0x2366493B, 0x6B34146F, 0x1E7A31E8, 0x9B7FF83E, 0x587E02BB, 0x2C93F21C, 0x02CB2D60, 0x673E80B2,
+0x9C0133F9, 0xF3E90BD2, 0xC4B186E0, 0x68E76246, 0xCF25A08A, 0x9DB3ED2C, 0x171C2BAA, 0x06CB5EDD,
+0xC726F8EF, 0x642D2DD7, 0x9EF9BBA9, 0xA03528C7, 0xABBBAE45, 0x68BEF025, 0x6796E64D, 0xC5038E8C,
+0x107CABE0, 0x08C3036F, 0x2478BC1F, 0x70FCF36A, 0x18DB85C9, 0x91B415DD, 0xAD86B252, 0x8031B7C3,
+0xAD822E05, 0x22CF8EBC, 0xEE66319E, 0x0B4791A3, 0xF3466873, 0x9BF4CF47, 0x2E3FD724, 0xA9A3AA6E,
+0x961975EC, 0x2D73B6BA, 0x9CBAC7F0, 0x68657649, 0x4226C3AE, 0x639ACD49, 0x87BCD68C, 0xF3EE9EEC,
+0x358C4D36, 0x5B98C7FB, 0xC814661F, 0x3F8FB913, 0x5783B64F, 0x343387D4, 0x78B234ED, 0xA8474C30,
+0xA888066F, 0xE03CD6E4, 0xD06CE24C, 0x2BF17EF8, 0xB96622BD, 0x19E4DC10, 0xB48DB3CC, 0x735ACAAB,
+0xC44CF27D, 0x20BDFFDB, 0x6384F87A, 0x0F0DB6D1, 0x875B0688, 0x7B19CEC0, 0x2782B8A7, 0x46A402A7,
+0x79D2CE3E, 0x7AA3A220, 0xA929DDDD, 0x8E819834, 0x241B1D64, 0xD8D6426B, 0xF9178FF3, 0x581A2F1E,
+0x0DAB447D, 0x1BF8CB3A, 0x3825A6EF, 0xA936D2B9, 0x2016486D, 0x7733E6EF, 0xDC0300D4, 0x236CCFB7,
+0xF41E140E, 0xA41DC640, 0x460C9C8A, 0x0D66679E, 0xD2A315D8, 0xD0B1DFB5, 0x7205E89F, 0xF6C4F3E1,
+0x3739626D, 0x1A6C1559, 0xD5939F17, 0xB984D1E0, 0xE9B26DD5, 0xC33482D7, 0x66A6B00B, 0xC36CC495,
+0x5427665A, 0x187562B5, 0x9A0F21AB, 0x8A68E6C3, 0x19D91D37, 0x21FCD995, 0x63A28CDA, 0x149B5AB2,
+0x1E9C2835, 0xDFC7F935, 0xDE9C1851, 0x804FF48C, 0x6F4BD097, 0xD0B52BBC, 0x5ED62BC7, 0x52C6D6F0,
+0xF2CE81AA, 0xA51ACEC6, 0xE8E75E1B, 0x3C644E53, 0xC120739E, 0x9B5AFE94, 0x17FDE2B7, 0xFAE96931,
+0x71F7C241, 0x86AA4AA2, 0xD5F883AF, 0x46BFA992, 0x8169EAA3, 0xA7FDE43A, 0xAB878042, 0x55B4CFE6,
+0x4E05082F, 0x107A19EE, 0xBD31BB80, 0x28F9970B, 0xAF976692, 0xE9223119, 0x693FDD65, 0xB94C2F41,
+0x3CDB1D44, 0xEAC0B3D1, 0x7D435884, 0x7E0CE872, 0x22BB9AB3, 0x8652B579, 0x56CA92AF, 0x2C4B593F,
+0x9466C9F5, 0x4EA987FE, 0x4469D1B0, 0xE335FACB, 0x1E747154, 0x34F46D5B, 0x0383A233, 0xBFD2A786,
+0xE7976417, 0xBF752936, 0xF065351A, 0x261FCEC1, 0xC170FEE2, 0x26A980D2, 0x20354697, 0x96D1579D,
+0x6D446264, 0xA850513F, 0x0CFF226C, 0x2E93EAD5, 0xD018E982, 0xF0DD4071, 0x4FED9228, 0x9ED3A6F2,
+0x45562D4A, 0x984A68E7, 0x3FEF14B3, 0x770006AA, 0x003E8D81, 0x5880CE62, 0xCAAB163B, 0xCFBA9992,
+0xD1471777, 0xBF31CB81, 0x9CE61583, 0xACA70532, 0xE9EEE9E7, 0x38A0D918, 0x6AEB9F05, 0x028D7F75,
+0x299E249E, 0xB305BA7E, 0x38706181, 0xDE5AC05A, 0x477074D6, 0x6193FDA1, 0x18E52EDC, 0x31C5AE51,
+0xBDFB2554, 0x35D87A1A, 0x0D7CA721, 0x217E6012, 0x4270DE24, 0x4DA567F0, 0x7DC1B84D, 0xCFD72006,
+0xA14FDE70, 0xAE499235, 0xC67831B2, 0xF7710DD0, 0x9FB40263, 0x982F4CFB, 0x364A6D58, 0xE51655B5,
+0x9815A9AA, 0x1EB63FE4, 0x439D0550, 0x5D91FC06, 0x682582E6, 0x52CCC663, 0x1DDB91E9, 0x574754A7,
+0x2A027E18, 0x05B88CFE, 0x6BBDA9A9, 0xF461548E, 0x585926B9, 0xF919DF6A, 0x94240891, 0xD74E94E3,
+0x44F72991, 0xDB96C8A7, 0x74D6A142, 0xA295A2E5, 0x83C1A956, 0x0BF2D2D4, 0xCD80397F, 0x45A0460D,
+0x84DC0BDE, 0x8508437B, 0x24591F48, 0x9E06679F, 0x3E0E60A9, 0xA4B45017, 0x9D8B36AC, 0x1AA030D8,
+0x873B4723, 0x92DF44B2, 0x909F1F09, 0x50C9AA57, 0x1CF86D7C, 0x47626EA5, 0x5E1A6A1B, 0xFF95977A,
+0xFE85ED70, 0xB7F3ECFC, 0x6948F321, 0x4FE9C8D6, 0x1F87C415, 0x74CFFD70, 0xFADC2C26, 0x9DF19F50,
+0xDE68B6C7, 0x54470069, 0xC3979087, 0xD61A2866, 0x0225EC19, 0xF344E99A, 0x84E8F539, 0xD6FFEECD,
+0xFF172DB7, 0xFA307A2B, 0x4E7C9929, 0x8679284D, 0xD3BC4E38, 0xD0E732DB, 0x4B40AA1A, 0x1B825D30,
+0x7EEF32AD, 0x1833A2E3, 0x3CE5F273, 0xE0987D87, 0xA2870FFF, 0x74AD65C3, 0x5B334835, 0x3F5C6A98,
+0x38EDE675, 0xE845CA0B, 0xB6D8508B, 0xD56DC7C4, 0xC8D1FD3E, 0x0B19C910, 0xF53AFAE8, 0x5F0DF98C,
+0x8AE41609, 0xE9110BC6, 0x806F516C, 0xC97102C4, 0xF5C3B7E6, 0xAFC27D96, 0x00000030, 0x08EE2801,
+0x0000C815, 0xB8210100, 0x05000800, 0xE9B3CCFF, 0xB0F9E94D, 0x31E35821, 0x7494CC20, 0x08346CAB,
+0xA1726061, 0x9DF43210, 0xCB1B1762, 0xC7D61457, 0x1387924C, 0xB703B219, 0x8D3B4B56, 0xC9CC0A0E,
+0xBDCC6919, 0x7F52A10D, 0xA04B3F02, 0x44C66129, 0xC2BE105B, 0x34587A7A, 0x5EFC9E4E, 0xC3665F3F,
+0xD5D8C5DE, 0x36040A30, 0x71FD16E6, 0xE68B048F, 0xB47CA1C9, 0x912AE7FE, 0xCB1C7E6D, 0x2E1B7570,
+0x7DC11A23, 0x768E8385, 0xF74D5C03, 0xB5C3D75A, 0x64099B5C, 0x544EE0F2, 0x906D3C6C, 0x512D53A5,
+0x365A343F, 0xB2A1FF6B, 0x2F72AFCE, 0x838F5D4D, 0xE29011B9, 0xEED386BA, 0x422EA606, 0xCF5FB22C,
+0xBBB8B3C5, 0x95850F4E, 0xC309A54B, 0xA891B6DA, 0xD77DEF78, 0x720A940F, 0xECDD2893, 0xDF928D90,
+0xAD0561E1, 0x94E1F48F, 0x71C268E8, 0x396A158E, 0xFB922E34, 0x772A8340, 0xECEEF40D, 0x5E7CEA47,
+0x4ADDB7CE, 0xD9C7FE9F, 0xA0BDB761, 0x71947FB3, 0x0F5FE948, 0x0C1CA98A, 0xFDCC9165, 0x6BDF67B6,
+0x4F328792, 0x3D8FF3FE, 0x42DB8A3A, 0xAA29E00F, 0xE5E7038A, 0xD0447542, 0x620E94DF, 0x2796933B,
+0x41B1E118, 0xC54E546F, 0x3FC26DCD, 0xA7AF4C78, 0xCDEB00BB, 0x53E924E5, 0x29B02C70, 0x0049CBFC,
+0x3858952C, 0xB6A29A9F, 0x1AB4FC6A, 0x57571A41, 0xF93036FA, 0xD63A0B3D, 0x210D5C19, 0xE14E5B65,
+0xB08E4726, 0x3FCEE410, 0xF834EC65, 0xBF339EA6, 0x1EF11FD8, 0x88564DF2, 0xC320917A, 0x3F86F98C,
+0xF8E0E26E, 0xD5D73540, 0x025A13B4, 0x52CD9C1E, 0x4817BFF7, 0xAD421297, 0xE444A36B, 0x289E057D,
+0xE383E02C, 0xE870A2F7, 0xACCE282E, 0x17D42E1A, 0x09BFEB98, 0xA07F442C, 0x8119479D, 0x225B6211,
+0xE0FAFDA1, 0xBB1ED2AF, 0x9EE903D2, 0x0A083E7B, 0x3C9D3705, 0x96FF3849, 0x3FC0B64A, 0xE949928D,
+0x6E6C294C, 0x920262C9, 0x9A9C190B, 0xEC094B7A, 0xBA029911, 0x25F46C0F, 0xAFFE4EF9, 0x37F2F4DA,
+0x21836444, 0x22CB68CB, 0x2D1D9FE5, 0x0761DB29, 0x4905ED73, 0x09BAB25F, 0x46AB0E19, 0x87CA324B,
+0x91B4BFD7, 0x70E016EA, 0xDED226F7, 0x2219FC25, 0x885E0FAA, 0x385251DD, 0xF3DD1A15, 0xB7CC3952,
+0x8381C9A4, 0x3B687E5C, 0xA23C47F1, 0x5298E1BB, 0x70821BDA, 0xB4881570, 0xE47E0D2D, 0x94EAC7FE,
+0x019E27B5, 0x35892368, 0x98733F79, 0x53559098, 0xBD28FC99, 0xC2388D42, 0xBC903A93, 0x030662EB,
+0xAB0EC5AD, 0x5380C22D, 0x5076C153, 0x74493ABD, 0xAD391E7C, 0x020D2BFD, 0xD3F4E8E3, 0x2A8A0851,
+0x0F11BA73, 0x7A1B892E, 0xFA54F5EF, 0x985B231A, 0xFB80B5DD, 0x56AC47C2, 0x3EA7628F, 0x6352CFD1,
+0x619D76D9, 0x3627ADB3, 0x6BE56236, 0x46CF4819, 0x691110AB, 0xCF779C9E, 0xBB7FDBFD, 0xF7188841,
+0x06E6232C, 0xB8C69D8B, 0x94E3FC8D, 0xE252B7FA, 0x27C069D6, 0x19EB4D06, 0x4ED7730C, 0x26CE4630,
+0xD7277AC2, 0xDA5A53A5, 0x8F456797, 0x4A88573F, 0xA640ECFB, 0xAFEF5949, 0x7CFD8A95, 0x69723860,
+0x55C89700, 0xA60E96E7, 0xA8E1FE2A, 0x6B0C2A3E, 0x3567AEA8, 0x1BB89C42, 0x3A34B8AB, 0xCAE635BA,
+0xDAE52A47, 0x3D203944, 0xD732E8D3, 0x0E867799, 0xEBF2B250, 0x8E960920, 0xE4D7E31A, 0x74459A13,
+0x0EA9756E, 0xE0D72D68, 0x2360738A, 0x116C7253, 0x5E609FF3, 0x7715A861, 0x0F84ADA1, 0x7B6A9002,
+0x0D66B815, 0x1621CA75, 0x55239B19, 0xB9169473, 0x17E81BC9, 0x68512DE2, 0x6A8CE1DD, 0x29B898C0,
+0x97C81A2A, 0x4AC12981, 0xF88A9C5B, 0xA3527037, 0x983676D7, 0xB98EDBE2, 0xA305B8DA, 0x0F2B2B2B,
+0xBC46F69B, 0x78E7A345, 0xC4E72BF1, 0x26058A5C, 0xD7216FF5, 0x2C43357F, 0x5194B3D9, 0x88DA3C2B,
+0xA6846E00, 0xD0AE7995, 0xB3891DC7, 0x27A94AF0, 0x3911AFDA, 0x13EEBC95, 0xE7346F7B, 0xDE4EF8A6,
+0xE2CEB9BF, 0x62BE4796, 0x5FE33284, 0x33209FE9, 0xAAC9E16A, 0xCD2FB48F, 0xF6FB7D66, 0xBB4F7AC5,
+0x4BD3991B, 0xA738C5CD, 0x363C2CA8, 0x0D4F3E23, 0x193BF90B, 0x4BFA4EB4, 0x05DF2E96, 0x08211524,
+0xB6AB7B6D, 0xEF5A6B08, 0xCB23BB16, 0xC5C2D552, 0xE08FACF4, 0xDDCDA0BC, 0x1EACBB93, 0xD75E782A,
+0xC46D66F0, 0x9EAC6E44, 0xE39C6126, 0x5A32AC57, 0x8F495DD3, 0x531398AF, 0xD82129CD, 0x9909FBE2,
+0x3B4CCF5D, 0x6B46AE4D, 0xCEB51EE0, 0xFBFD8FB9, 0x1896F01F, 0x58B08AC5, 0x7A919320, 0xCF5D011C,
+0x3FA169B5, 0x9D4F57BB, 0x0275901B, 0x80B4FD4F, 0xD572B55A, 0x4F8411F7, 0x5C1CE104, 0xFEBF177A,
+0x9F0AE461, 0x8A2CF537, 0x6B5B721D, 0x44242E08, 0xCBB0BF9F, 0xD3C0DA0D, 0x4F055730, 0x2A2BB0C9,
+0xFA391EB9, 0xDFE6DCE3, 0xFDF6FD49, 0x6D1D5DDD, 0xEB7BB5F9, 0xF75E0931, 0x303F1440, 0xD173E473,
+0x259CBFA5, 0x617DA0F1, 0xA6F32066, 0x9B128CCD, 0x1CF2C076, 0x7FECDC07, 0xF36FBE22, 0x8D718586,
+0x09B8B40E, 0xE49E533F, 0xF7FF0AA6, 0xF7FF7F18, 0x7D2E91BD, 0xC8B9E44C, 0x5947F461, 0xDFA24ED2,
+0xA563E948, 0x0366FFD8, 0x8C8DD48D, 0x8356BD93, 0xEC504FC6, 0x6C9EF6B3, 0xECAF8E10, 0x166F5CCC,
+0xDFE5FE8D, 0xBDD57DF5, 0xFFD796F8, 0x62D4E2E1, 0x740F3647, 0xA4240C1E, 0xDC67E20F, 0x7A5A4977,
+0xF4BC9730, 0xDE512C35, 0x90FDC902, 0xED68C41F, 0x42A3D49B, 0x57FFAB0C, 0xFBF9EDAE, 0xD0CA2677,
+0x43039D26, 0xE152772C, 0xA041E3E7, 0x1139AF52, 0x993AC9D4, 0x3201E265, 0x0D8FAB0D, 0x5401E702,
+0x3163D7CC, 0x75330AD7, 0x80E9D3D4, 0x72F56470, 0xDDBFBCF7, 0xC009CB12, 0xE7B4A647, 0x9E16326F,
+0xFDE635E0, 0xE1A1AD3C, 0x2D0885C0, 0x970B15F7, 0xF819F23A, 0x8429A503, 0x37C0C07C, 0x5E8504CB,
+0xEEAC2660, 0x4A9318A1, 0x8FBA7412, 0x0DF263FF, 0x21436FC4, 0xCFD91DCC, 0x156AE85C, 0x2A96B0AA,
+0x99952BEB, 0x18935429, 0xDFBA5F8A, 0x22449EE6, 0x0249D238, 0xBA6A765C, 0xD97BD24C, 0xFDD9267F,
+0xD186B443, 0x78A17D62, 0x92815446, 0xCD682FF5, 0x82993C7E, 0x54CF26CA, 0x1AE9BBA0, 0x9282703B,
+0xE53CBC52, 0x68BFED43, 0xD9BF6D07, 0xA973AC91, 0xCCCBE2F0, 0x85EACBC3, 0x8842DF00, 0x1336D73D,
+0x5DA010D1, 0x6B9E8362, 0x917AA513, 0x564BB13C, 0x1823055D, 0xA40BFF96, 0xCE873722, 0xF662FB3C,
+0xD7656973, 0x9481393D, 0x90B73D85, 0x5A5AD45F, 0xD3A585D8, 0x1AC1EC4D, 0x775C8DD0, 0xA74E09EF,
+0xD00F4921, 0x12148075, 0x02C74E1B, 0xC8D3CD9C, 0x5CD9D514, 0x52649944, 0x94D8DEC3, 0x6F9CC776,
+0x751C9466, 0x1228DCE2, 0xB04A9008, 0xB497315D, 0x321C4A70, 0x12577C2E, 0xC85F77F0, 0x94DACC67,
+0x63FCF230, 0x1A53C462, 0x834E3322, 0x32AC9883, 0xEE263B3E, 0x8A2F33C0, 0xD599BBB9, 0x9B5C9891,
+0x2956E232, 0x2D386439, 0x42229AD4, 0xEB437B50, 0x5A8324A8, 0x1210C288, 0x19CC687C, 0x7C30C472,
+0x028A6862, 0x8D43A2E4, 0x266B7BA4, 0x76396DB7, 0x120F5338, 0xB40E2D37, 0xEAACE293, 0x18CB6882,
+0x1831EEB6, 0xCF740E88, 0xEB1F6CB7, 0x3B06EF5B, 0x0C0769E0, 0xC2657560, 0x45D8AECD, 0xC9C5CBEA,
+0xF1F7EF92, 0x270A655E, 0x174FE952, 0x0569FC7F, 0x11CFC63D, 0x3699F432, 0x375CAB57, 0x262F36CF,
+0x143B148E, 0x9322FCF0, 0x8004E808, 0x3D5A7053, 0x86E4EE4E, 0x34E99284, 0x6259E3E2, 0x4349DB43,
+0x4FEAF6A9, 0xDDEFE586, 0x70059150, 0x7F1670FE, 0x4D193636, 0x33351D3F, 0xDBE25013, 0x7FE52579,
+0x022D94B0, 0x9D019043, 0x9A08D080, 0x1450DFD1, 0x7A28F9F2, 0x8173C824, 0x38E485E3, 0x570A4749,
+0x6150EADC, 0x2FBD0820, 0x0D7682A1, 0x20C076E2, 0x34F63E0F, 0x83A98D46, 0xF340B7FA, 0xF340E43F,
+0xC5F3F4C8, 0xCEC2AB2A, 0x7D1AA2E2, 0x8D290599, 0x0D89D389, 0xD66B431B, 0x634FC129, 0x00A0B1D2,
+0x8EB1F61B, 0x00F78827, 0xA11F6680, 0xAA8EE07E, 0x707090D9, 0x85FF62ED, 0x1239F07A, 0x7526D6A5,
+0x04DF818E, 0x803FF3AF, 0xB87DE596, 0xE62E4CFD, 0xC3621835, 0x8769ABE3, 0xD7A2B597, 0x99E92F10,
+0x7E4DAB1B, 0x8571ABC7, 0xC7A4CF59, 0xE9750F43, 0xB6A066CA, 0x5C32676E, 0x115CB810, 0xE19806A9,
+0x59CB9298, 0x1BEC5E17, 0x87F63798, 0xEB0FDAAC, 0x2980F517, 0x3D29DAC5, 0x2AE76ED1, 0x26584DFD,
+0x688A59E9, 0xF0518F90, 0x38608293, 0x6C60685C, 0x4C01F24A, 0xDE5B5F8F, 0x1B5B00D7, 0x76F8D227,
+0xF6B95C68, 0x43A80B3E, 0x5C692E8A, 0xE1F8F40B, 0x30691737, 0x10B0320E, 0x10D7FE2B, 0x3A306091,
+0xCF08F0FA, 0x7AEF5509, 0xA14CCB00, 0xB683394E, 0xF801E926, 0x7E3E75CA, 0xAB8BC97C, 0xB974BAC0,
+0x263CA657, 0x59706C68, 0x4C46F0CB, 0x93FAEFAC, 0x7AFB5E3F, 0x409BD6CB, 0xC38BF83C, 0xFD963537,
+0xCD7BC6C7, 0x37940909, 0xA77502D6, 0xBD255175, 0xF78052E8, 0xCDF4CF75, 0x0F1D7D43, 0xBF31369E,
+0x90845858, 0x0437C1D5, 0x61094D9D, 0x13F09D67, 0x0C6037BE, 0x3CD48D79, 0x829B8EC9, 0xA2B369D8,
+0x2682EC61, 0x91B20626, 0x9DE5A7DF, 0x946B1CB8, 0xD0D6357A, 0x9EA6A2AF, 0xC2A94F92, 0xE9AFFA1D,
+0x3CA59108, 0x35753ADE, 0x7802DA0D, 0x4212BE47, 0x8FA0C3BA, 0xA196A3FD, 0x048717F0, 0x94BA34C7,
+0x0CDDDA35, 0xD113F4E8, 0x29822849, 0x8EE19B64, 0xB86053FD, 0x8BDD22EF, 0x43712A3D, 0xC3A8119A,
+0xCB0F5F31, 0xFE2A813A, 0x74989914, 0xA464F5FC, 0x86C46C05, 0x1D323D6E, 0x52301A99, 0x10CE0D15,
+0x4F79DB98, 0x912F1BD1, 0x5F002B37, 0x94828097, 0x05A0F74B, 0xFBE55396, 0x652BBD82, 0x9EE3650C,
+0xDCF4861A, 0x49114C6B, 0xC2491D96, 0x61F53D9F, 0x83CD32A6, 0x49BAE76B, 0xA246EDFD, 0x76CD71AA,
+0x3DB53798, 0x94C89487, 0x6C6E8EDC, 0xA7B18851, 0x730E33DD, 0x6E12ACD2, 0x6A3F7A5E, 0xDAC959AC,
+0x8303095F, 0x128ED70C, 0x35DF9BB8, 0xA7789403, 0x3C0378D2, 0xFF20510E, 0x62DFE51E, 0xFCCCAB2B,
+0xD3A92492, 0xD3FC0596, 0x2A18AEFB, 0xD00C785C, 0x4E90996C, 0x230A0AA7, 0xCA38B59D, 0x293E8B23,
+0x4F7787AE, 0x6E5FB200, 0x3F580C5A, 0xBADF9E8A, 0x086B89F6, 0x4618CABE, 0x8D616559, 0xC22A0F68,
+0x6FEB17A7, 0x39BFEC4B, 0x870F2A6A, 0x3ADBD66E, 0xB30E5112, 0x7261ECBC, 0x479E19B2, 0x433CFA06,
+0xAB8D1432, 0xF78F9D54, 0x066687EE, 0x07902053, 0x671A7EF1, 0x158A9BD2, 0x8C600D8D, 0x51A04487,
+0x02852097, 0x805A8DB7, 0xA9245C84, 0xF7078862, 0x0FC0D102, 0xC6391FE8, 0xD116EF5C, 0x2DAB183C,
+0xD29AA967, 0xEC96B649, 0xEA7E5BA4, 0x7EEC21B0, 0x0960D758, 0x66D501B5, 0x718E00C1, 0x7C141634,
+0x133E1894, 0x71FFA5E5, 0xC5B97AF2, 0x068F6FE4, 0x3E1AE6AA, 0x86647227, 0x752723BD, 0x13C01974,
+0x9681F840, 0x6A9C529F, 0xDF819572, 0x9D9D588F, 0xE98B1AF6, 0x7E58BC49, 0xFBC0C2F3, 0x3EA027F3,
+0x905FE59F, 0x98FE118A, 0x57EEA2B6, 0xAE5E598C, 0x28EE873A, 0x40E8B830, 0x6F38844E, 0x27584781,
+0x8AA9385B, 0x593E1B65, 0xB694B5BE, 0x2633E083, 0x3B5D05A8, 0xC544038A, 0xF4277CAF, 0x10063DD8,
+0x329663F1, 0x92DB1B3D, 0x8D847AB4, 0x4D01C864, 0x26C695F3, 0x1577E2AA, 0xDB911A67, 0xE56C0F67,
+0x1D8BB0A8, 0x7FDE0F8B, 0xFD352DFC, 0x097942BE, 0x47E5948C, 0x287FF721, 0x6C398175, 0x1C87E8A2,
+0x5997F8B2, 0xD64CC96B, 0xAF42025E, 0x35804B65, 0x54D31628, 0x0FF13872, 0x119329E8, 0x3142F071,
+0x04381593, 0xD6C2C03B, 0xF17DD033, 0x8F580203, 0x7872A033, 0xDF1E84AA, 0x980FABD8, 0x7CF64BAE,
+0x14D09582, 0x271C8FA9, 0x3DEC35A9, 0x094AC5BD, 0xBA4E7205, 0xDEF2E28E, 0xD2F91B55, 0xCFA7323E,
+0x2BBD8C1D, 0x9289C889, 0x58641710, 0x2F7940CA, 0x436E45C2, 0xD48752E1, 0xDF794003, 0x0CAAF1E1,
+0xBC4BF5C7, 0x2BA20E50, 0x041787E9, 0x7D072C35, 0x6221CF24, 0x0E06C8B0, 0x90F49643, 0xC0978D81,
+0x4EAC3DB4, 0xDCE2E8AA, 0xE3D3E047, 0x8E2DFC3F, 0xCB28788D, 0x5225A207, 0xD4844199, 0xF727A852,
+0xFE6AD071, 0xFE9B4E28, 0x81DCD9A8, 0x2ADFA9F2, 0x47E85E9D, 0x32D6018A, 0x5F71E52D, 0x1D493A4C,
+0x5065BD1E, 0x46047F4E, 0x7B6C7373, 0xCC6E2673, 0x1BA15E95, 0x7BE637FC, 0x08978E84, 0x11A23352,
+0x889C446F, 0xB08E227F, 0x35726485, 0xF88DD7ED, 0xB6EEA4BA, 0x43822102, 0x4AB0FA13, 0x9B68426D,
+0xD1776975, 0x6FC06168, 0x649D0C19, 0x8A0B8773, 0x735A3881, 0xCB1CA2E7, 0x8C9BE4BB, 0xE3D42E95,
+0x0628B8C6, 0x823932E5, 0xC4F6EDB3, 0xBB65F9C1, 0x53CA68BF, 0xDBF2F7B7, 0xD198C8D0, 0xF5629A73,
+0x4855D8FB, 0x478F0F17, 0xACABC351, 0xF1B4E144, 0x899CD43C, 0x8474F9CC, 0x45CB1672, 0xE90BDA39,
+0xA32E884C, 0xDCAC099F, 0xBE85B1A4, 0xA68E7775, 0xA0D9BDCB, 0x3C4E521A, 0x4816A088, 0xCC55837B,
+0x71F88709, 0x2527A398, 0x5359B28B, 0xBB4A7BCA, 0xCE70C29B, 0x3E2FD3D0, 0xEE344A67, 0xC76A49A8,
+0x66A3D3A3, 0x8312A42B, 0x7C024536, 0xC28BE601, 0x2FFA7513, 0xAFE8793C, 0xC65F9FB0, 0x0152A307,
+0xEDB90DEB, 0x025621E8, 0x7589CAB7, 0xA054DB95, 0x2657FB2F, 0xB4D84261, 0x16C901BE, 0x49E0E776,
+0xB7AB0FC6, 0x4EF68C9D, 0x22452D46, 0xE5BD27E1, 0x789C2FA2, 0xA4376C93, 0xAB097DE1, 0x2D8D8A2D,
+0x27246E78, 0x07E95A16, 0x7E91D74A, 0xCE556BA7, 0xA695585F, 0xFEA54B93, 0x3E282375, 0x9797FCDA,
+0xCCAA6230, 0xE1C3CB8D, 0xD30B2309, 0xDAEC3C0F, 0xBDB8517E, 0x08AAD2EE, 0xC3A9E966, 0x133A5F1C,
+0xC9EDD346, 0x198A5253, 0x9DA1CEA0, 0x21B200A5, 0x34BD2873, 0xF695202D, 0xEC0638B8, 0x3EB23CD8,
+0xAAFDF7BB, 0x094BB481, 0xB60A0F72, 0x93972355, 0xE24ED828, 0x95A9D765, 0xFE598F67, 0x1835DCAA,
+0x5EEC2D73, 0x1B97A54A, 0xDC1B16E3, 0xF27DBFB1, 0x0D51EAFF, 0xAA146E87, 0x21F2ED44, 0x1B7085BB,
+0x8CD33974, 0x0AB82E30, 0x36F786A6, 0x5E8CF2E4, 0x35E78230, 0xC9F4B192, 0xCD74DB8F, 0xF26E9766,
+0x0607E849, 0x6D65AAEC, 0x8C6D7656, 0x07EFF093, 0xA2FD3479, 0x12FDA3B8, 0xC0DF4A33, 0xF43E871C,
+0xD9C1FC48, 0xBA264127, 0xD3D5CCF2, 0x7720FD35, 0x5E6AE991, 0x0275975E, 0x59E498F9, 0x13147F3E,
+0x57B75629, 0x89739DD9, 0x03271D85, 0xBBE74BD4, 0x76D7219E, 0x7AD9A056, 0xE33196AA, 0xF0C3F92F,
+0xF98AD7D1, 0x7695D2FA, 0x072BB938, 0x53FB24C3, 0xF97526E3, 0x35326DCD, 0x6761886E, 0x55FB32C6,
+0x11AFC6F4, 0x24126703, 0x1B2ED4BC, 0x8D13C28D, 0xA72E89EA, 0xFF4BE745, 0xC41D4BDB, 0xA424321A,
+0xA7AB9612, 0xD936C961, 0x6E06326F, 0x8AEAD33A, 0x08D15422, 0x9380A6EE, 0x80808F7A, 0xCAA57D8E,
+0xADE57F3C, 0x84884492, 0x579D66A1, 0x6894237C, 0x6702A15A, 0x7054FFF7, 0x53976432, 0x6B34A772,
+0x31C7BAEB, 0x8D6D4ED0, 0x0D931C33, 0x1A444D1E, 0x46DED36F, 0x7079E7CE, 0xEEC2335E, 0x56FC39F1,
+0x5B80E529, 0xC6427F2C, 0xCE00DF85, 0x08E9AFE7, 0xCC5C98D8, 0xF9E6005C, 0x61982DF6, 0xDC223538,
+0xD2D6DEB6, 0x325DE76C, 0x05602E65, 0xB863C02E, 0xF2E5AE4C, 0x784B45E2, 0x878235BB, 0xE10E8C90,
+0x2903A7E7, 0x3FEE9958, 0x60720324, 0x9443CA3B, 0xEC26646E, 0x76E8BA9E, 0x09674982, 0x5B0D6C67,
+0xE755E27C, 0x0616578D, 0xDC4C0BCD, 0xEF3CE14D, 0xEB39AA89, 0x57A6DC95, 0x17055A2C, 0xCC75BB61,
+0xC0E7DA69, 0x0B3E7A80, 0x6CD7F9C6, 0xB0E9D916, 0xF6D1018F, 0x68936B4B, 0xD7DFE656, 0x4CB638FB,
+0x5FE8D845, 0x3E18D7D0, 0x66F49D69, 0xC00B0336, 0x15B08753, 0x86F79AC1, 0x4DDF5E75, 0x65910D7B,
+0x2C15835E, 0x83E32CD3, 0xF88322BC, 0x5CBD2E3F, 0xA0063767, 0x0B6B64B3, 0xEB8043F7, 0xF44AEB45,
+0x97E9F38F, 0x4DE40032, 0xB2AF75B8, 0x16819D6B, 0x96CCDF2F, 0xFE66F73D, 0x10911C6B, 0xAEAA0026,
+0xAED530A2, 0x6A2227B4, 0x071AED32, 0xCA08F5D6, 0x9A3BECBB, 0x1FDE422F, 0xF7554E2B, 0xA14F5301,
+0xBCCAEAC9, 0xC75B5837, 0xFD1BDAF3, 0xB51D0D85, 0x567D6961, 0x13F240B4, 0xA11997F9, 0x1FABAF69,
+0x4852D097, 0xF024A7AF, 0xBE3C1EF8, 0xD25C4126, 0xFDB40A7A, 0xA783FA9A, 0xA488B3BC, 0x41F3FB3C,
+0x47798859, 0xF00E68A0, 0x43819930, 0x227D6CB8, 0x354CA9EE, 0xEECD99BF, 0x68207B50, 0x10096B9F,
+0xEAC16886, 0x45636038, 0xB686C426, 0x97EDF7E6, 0x6A70EF59, 0x2BDE1EE7, 0xC8EA690F, 0xB1D5B919,
+0xA4B5FE23, 0xE2A8F448, 0x1C845AD3, 0x72DFE60E, 0xEA184454, 0xF01010D9, 0x1A9D1F00, 0x5DF4EF6B,
+0x7E921620, 0x899EFE53, 0x79154C54, 0x32E8FAD8, 0x247D9405, 0xCA638734, 0xA4A7F00C, 0xA73B9607,
+0xC35D2828, 0xE5967A67, 0x74D4688F, 0x0B62719B, 0x9FEA547F, 0x629542B0, 0xF52963A4, 0xB67CC263,
+0xD55F45E9, 0x5B20D41A, 0xF34E63F9, 0x89170001, 0x83D5E334, 0x9656FA76, 0xE478EF19, 0x7B84998C,
+0x3B39663F, 0x101B80E4, 0x4D22AFE7, 0x6E6F3FB6, 0x19E5E0B1, 0x511B1EE0, 0x9CA407E3, 0xF8B0A979,
+0x12ECC697, 0xCCC69BAE, 0xFAB91A3F, 0xF63E13CA, 0xB871E007, 0xD63CA85D, 0xC880C1BF, 0xE5E19DCB,
+0x0551A17F, 0xC29E28D1, 0xF526C48C, 0x5DBC7134, 0x762C6809, 0x107EC32A, 0x4D69CA96, 0x144FE42D,
+0xEBBB04F5, 0xFC9CE28C, 0xF46F7AA9, 0xA3B7C18F, 0x78C8E708, 0x604969DF, 0x94186A6F, 0xC99272B0,
+0xC9123AAD, 0x798857F2, 0x146D722D, 0xD35D515B, 0xD1F046CF, 0x109E5E79, 0xC8059CD2, 0x0009672B,
+0x66381C21, 0xE45FF363, 0xC0A52A31, 0x640DD517, 0x31558813, 0xEBF7AF88, 0x5FEDA5D3, 0xD7D2D61A,
+0x07D75AAC, 0x45789EE4, 0x2707CF06, 0x4726C4A1, 0x7CB2B1BE, 0x7DCA2A3C, 0xD425C223, 0x15FF65FF,
+0x958C008E, 0x1C9489D8, 0x0E16E59D, 0xD94EFCB2, 0x36D0319B, 0x99A108C0, 0x93594F8A, 0x7756AD2B,
+0xEA21D92E, 0x1A3194C5, 0xCDA87AD5, 0xD2BD977B, 0x63FF1CDA, 0xB42B04C6, 0xE38B13E7, 0x110E96D6,
+0x6C250B03, 0x869FC357, 0xBA7D01C8, 0x28987AE2, 0x9A6E9F55, 0x62442ABC, 0xD3B9107E, 0x4801D4FA,
+0xC9E4EF8C, 0x70735BE4, 0x53FA1DC8, 0x36706CAE, 0xC08AB8E5, 0x727E2BF8, 0xCD514FCE, 0x657ABDF6,
+0x26721EF8, 0xD0BEADBD, 0xC9D81927, 0xCF05280E, 0xC4A47A3F, 0x8C3BCB23, 0x5D9BA72B, 0x7DD8EA02,
+0x0D18B396, 0x448A7F5D, 0xDFC12288, 0xC81E6659, 0x6FC24337, 0x8E7401A8, 0xB0F053DF, 0x1CC5F22A,
+0x55E1F7D2, 0x4A185673, 0xC7D9B2F8, 0x449E0CB5, 0x22D22DFB, 0x1E720E24, 0x954CF3AD, 0x862FDCC2,
+0xD3B2A949, 0x24F6A218, 0xD805E581, 0x767FAB52, 0x69491CE3, 0x1CC3FCAA, 0x0DA73284, 0xD6F92B89,
+0xF55BBAD8, 0x4E4899ED, 0xF4ACEC82, 0x265D6B18, 0xDBAEA62B, 0x420BF91E, 0x82F0752E, 0xFED6C16F,
+0x6D08148F, 0xABAF92C7, 0x4AB5EA24, 0xE23E5FDF, 0xE85FBFB2, 0x5F1C64ED, 0x8C0888EA, 0xF0E55607,
+0xFDD10F70, 0x3AB4FB1C, 0xAB563F9C, 0x2361B192, 0x10EE7134, 0x490EEB05, 0x58C01038, 0x57CF38C2,
+0x0C6FA86E, 0x51D1CC21, 0xF23D04E1, 0xC5CC5B79, 0xB54DD001, 0xB6468B0E, 0x5B1D67EC, 0x446AFF98,
+0xDC3EC785, 0x46E370EA, 0x879C0D2B, 0x2071C143, 0x3A4C7848, 0x029E6E92, 0x977C6D1C, 0xAA86531F,
+0x8D2990B1, 0x085778AD, 0xE31D90C4, 0xFF27205F, 0xB5051AC5, 0xB1D8680C, 0xE9E3594C, 0x5E9977FB,
+0x07234810, 0x071D5383, 0x8374CE3B, 0x02658425, 0xB337A5C7, 0x8B3D52FA, 0x823D5257, 0x34F79844,
+0xDF1FC965, 0x62C8213A, 0xA7DFB11F, 0xE9AD493E, 0xDB5B14FE, 0x1884ABC8, 0xDAD3B931, 0x23807890,
+0x2AFB8947, 0xACE556CC, 0x84560C6A, 0x9B103FFE, 0x35EA0ECC, 0xC46F0DFC, 0xDDD1B043, 0xA6E5EEB3,
+0xEEA73FDD, 0x5ED00404, 0xEF1A294C, 0xB5618A0F, 0x8B459BC5, 0x0D3584C2, 0xFF69BD41, 0x00072808,
+0xAAEB8015, 0xA2B1FE6B, 0x78B3DC7B, 0x4D1B3984, 0xD072F054, 0x735BC178, 0x11F0ED8F, 0x6AADFE11,
+0x54AF3EE7, 0xEF662288, 0x38B51A33, 0xF7959EE3, 0x2EEA0E14, 0xF4F9A177, 0xF7E80F9A, 0x898A52DF,
+0x42845664, 0xB396D7B5, 0xCBFE8362, 0x44E3672C, 0xF750193A, 0x2AD83E09, 0xC0DD0233, 0x69046204,
+0x03A22364, 0xB4BCB7F6, 0x50AE94E7, 0xEDE655A8, 0xA0EB7644, 0x7A4C0FB0, 0x7A66BE61, 0xA0BB6451,
+0xF4F2B007, 0xAC5369BA, 0xD178B2C4, 0xD247C69E, 0xD33B58D1, 0x59C0697F, 0x3FD32DD5, 0xFE1D93B1,
+0xE0F7E7A7, 0x8E9C5CC3, 0xB6C6D2D8, 0x34CB98B6, 0x55FC9D46, 0x0B8967C3, 0xF4BEA9C1, 0xEF47168C,
+0x65E9501D, 0xCEBEA097, 0xE401DAF6, 0x02BC404F, 0x54D24BDF, 0xBA695027, 0xC3B1E5DD, 0xA0031A4C,
+0x1970CA0B, 0x4A695E64, 0xCADFFE84, 0x5B4221AD, 0x2C586028, 0x202CA200, 0x1F89A113, 0x981042D0,
+0xB408815C, 0x3EF3F88B, 0xB60E543E, 0x65828493, 0x4E609042, 0xBF584BFD, 0xCF9DF3FC, 0x285D106A,
+0x79051F14, 0x8ADC62A6, 0x19421F09, 0x6DC3400F, 0x0FFF91F3, 0x6ADFD28A, 0xC9094B67, 0x8EFF6541,
+0x24F9161E, 0x0D2EEB4B, 0x56E6ADBC, 0xAAAECE6D, 0x97454E20, 0xBCBB33AB, 0x1D322FD3, 0x7E69496E,
+0xEC0FA690, 0x433A1CD7, 0xAEA95853, 0xD134D57B, 0x28A0A8D5, 0xC1196887, 0x0B5A862D, 0x8493C50A,
+0xF63670DC, 0x6A5166D6, 0x8B8B661B, 0x9D7DB3EC, 0xD164D407, 0xC06D5C30, 0xB7E06D24, 0x3E3C46EE,
+0xCBCE9C9A, 0x1AF6CC7E, 0xE4230059, 0x832F9635, 0x1C0A5E58, 0x68356F2C, 0x27F3CA73, 0xCA56D82A,
+0x7A6FE895, 0x9175A634, 0xBA82625F, 0x1C470B52, 0x33C4A692, 0xEE83D457, 0xB62CA72B, 0xA525E9B5,
+0xCBDD324A, 0xF29E2775, 0x99DBBBCF, 0xF415E3A5, 0x186ACD78, 0x2EDEA341, 0xEC6B188B, 0x46E70A5E,
+0x420F3045, 0x8B9E93C9, 0xD609BCD7, 0xA36D47F6, 0xEE301517, 0x71A7369C, 0x689C8A35, 0x3613A7E2,
+0x26DE7B00, 0xD9618DB2, 0x7E637B4F, 0x6732D54D, 0x4410B542, 0xA7C625D6, 0xABCA00BC, 0x0CF604B3,
+0xDE0B9D6E, 0xEF761B73, 0xDC8D94BE, 0x64D4A943, 0xA0BB6BFD, 0x2A504F5F, 0xCBD5D4F5, 0x42FAA763,
+0xC3F9C57C, 0x77F14670, 0x0332B65A, 0xB9BFDA5A, 0x8855630A, 0x9B8BB0F6, 0x870F9980, 0xE44F5D78,
+0xEAE8E50B, 0xBCF974BF, 0xD5512A5B, 0x1119C956, 0xAD03D914, 0x9109FFDE, 0xA94DE145, 0x256CEB13,
+0x26C6B060, 0x96247EC9, 0x38DAA7F2, 0x1C9A6454, 0x0124130B, 0xB0D3FB40, 0xCD30E7BC, 0x7FDA2D99,
+0xECCAE34F, 0x600F967B, 0x85462BBF, 0xA9343641, 0x12B7582F, 0xA87940F9, 0x2216B6F2, 0x021A38DB,
+0x2A750E86, 0x31223A3C, 0xCB0FD1F2, 0x41158F20, 0x260C3B53, 0x062A03E6, 0x713C6044, 0x018AA426,
+0x0A17B103, 0x68CBDE65, 0x72173B35, 0xCB75FF5A, 0x36239C0F, 0x8EE1E823, 0xEA390AEF, 0xAB0208BB,
+0xD9038EA7, 0x394B5706, 0x9356377D, 0x3250BE5D, 0xD09DA9D7, 0x6BB70833, 0xD13F6BD2, 0x0590F536,
+0xC700B303, 0x56CFD609, 0xAF522074, 0x756A3395, 0xBE2DB9A3, 0x7402A47D, 0x11439AF0, 0x74610783,
+0xA1670A5E, 0xAEF44211, 0x3CC17E51, 0xEFBCC352, 0xC7011F9A, 0x52B2E070, 0x6DD1E3D4, 0x8BD1EF9A,
+0xED91B4C8, 0x4E672BC4, 0x6BBF5C05, 0x2B83ABDE, 0x822D8BC4, 0x27358A29, 0x6072799B, 0xD21BB64A,
+0x70ACDFC0, 0xDCB206C3, 0x6F57CC50, 0xDF3CACC3, 0xC2EFCDC5, 0x0A4E600C, 0xF50BE5B4, 0x3EBC6165,
+0xAC5D5695, 0xAA36163E, 0x30910E52, 0x886A5F47, 0xA0A9DE4E, 0x6A8E06BA, 0x41996AE3, 0x12FED84E,
+0xC3176D47, 0xC21F5EDF, 0xD7DDC6B0, 0x825AADCD, 0x78C3B52A, 0xA174B0BF, 0x66DE1AF2, 0x94B3688E,
+0xF2CB7292, 0x00895BDE, 0xA076458F, 0x10DC57A7, 0x69F9D799, 0x652C7E49, 0xF24E3D8A, 0xB04E6703,
+0xAFC89CB4, 0x1D80FC36, 0x5930B067, 0xFD70D046, 0x0C12D7F6, 0xD028ADB7, 0x9CF6E35F, 0xD33625DE,
+0xCA00EBEB, 0xB50ECE4D, 0xFC78BA47, 0x84D923DE, 0x7776365F, 0x22904970, 0xEA68601D, 0x64EC81A9,
+0x495802BD, 0x6C456ED2, 0x29C49D8B, 0x332DB2C2, 0x62D30E11, 0x7FA7F605, 0x21635285, 0xD2DB3C8C,
+0xC0C05AC3, 0x9224DB97, 0xF083E30E, 0x1CB11373, 0x45E3229F, 0x030497A8, 0x88CE5FD1, 0xA10291CF,
+0x7CB9F3D3, 0xC3044295, 0x3E6A1D81, 0x93C58632, 0x53022E85, 0xF424B722, 0x8FBD4A05, 0x3191BD14,
+0xCF8C5337, 0x1BF56FBC, 0x862556A4, 0x487177A0, 0x5B771A18, 0x5B4C0C9A, 0xC1D82DD5, 0x428C5EB6,
+0x1EFC4099, 0x97751E5D, 0x7EAD4394, 0x241876ED, 0x4E4FC13F, 0x72C91FC8, 0x8365434B, 0x1A13E19D,
+0x112B7207, 0xF628C4DC, 0x33B61149, 0x53A85A40, 0x1FA51D9A, 0x1703708C, 0x18F7D8B1, 0xC082DA58,
+0xEA658097, 0xDF47F734, 0x09013F7D, 0x212456D1, 0xB9FE2D0B, 0x931356BC, 0x686058E4, 0x9C7F6E6F,
+0x0801495F, 0xD88D5C1C, 0x1124F7C4, 0x367A61C5, 0xC1B7FD94, 0xDAA84FFB, 0x1473F174, 0xA40D618A,
+0x1598EA05, 0xFFD1AFE0, 0x9CD01D4B, 0x19F3104D, 0x916D3F25, 0x1339203E, 0xD241549B, 0x63CA9350,
+0x69B7F2F9, 0xEC5BE3EE, 0xB0E97069, 0xB101D561, 0x53C3CC95, 0x41E2136C, 0x75CEBF8B, 0x094474FA,
+0x25D5AF92, 0xACCD8389, 0xBC37D06B, 0xD9190E66, 0x95B66C45, 0xD1BC7183, 0xF34E05C3, 0xE1B97925,
+0xDD0696E2, 0xA804181E, 0xA387B704, 0x811862DA, 0xCB08E67D, 0xDE684329, 0x37AF0D0D, 0x3DAD6309,
+0x16F78DAA, 0xD6622F21, 0x0D099A80, 0x6D5504D3, 0x904F1385, 0x7D9CD9F8, 0xB54812BF, 0x067E399B,
+0x44D535D3, 0x6A3FA7C5, 0xECF8B694, 0xEAC1FF44, 0x2B184E53, 0x6A49C85B, 0x55947787, 0x4567D02C,
+0xDB58B0CB, 0x8E615984, 0xE5AF8FEF, 0x79942F52, 0xF40BCAAD, 0x3DE37C8C, 0x78A5D409, 0x711642BB,
+0x35A4EF56, 0xF6C9A9CA, 0xFEAA7F23, 0x58D51B84, 0x92579DFA, 0xB5A195F2, 0xCD3D20E4, 0x6183BE2D,
+0x92ED900E, 0xF299ECC9, 0x0171F050, 0x643F9CEB, 0x6729582E, 0x80CE4768, 0x42446F84, 0x4C1FD1DC,
+0x91DA55C0, 0x2B46A71C, 0x630728B4, 0xA52A2266, 0xDA03DF7F, 0xFD5DC38B, 0x06383DAD, 0xA7EF94C6,
+0x0470EE07, 0x05B95048, 0x518DEA55, 0x7BEDC97F, 0xD68C582F, 0xAF1FFBAF, 0x025D629B, 0xAC423B3B,
+0xFE03CC46, 0xCB3A9F8B, 0xE8109815, 0x94DC1412, 0xEDFD3124, 0xD261A9B9, 0x43E56003, 0xBAD36DB5,
+0xD763D69B, 0x232068DA, 0x1FB60A46, 0x565A00AB, 0x930A1A6C, 0xAAC8A49D, 0x116F7034, 0xCDFCD9E8,
+0x53A1E35A, 0xE7F4BBAB, 0x091C99C4, 0x297CE572, 0x8A6C7276, 0xA8103E4D, 0xDA49B59B, 0xA5FBB1BE,
+0x88078638, 0x2A2244B9, 0x6D06476C, 0xB53636D1, 0x71B001CA, 0xB68F25A0, 0xA87AAE50, 0x0F735BC3,
+0x14C0F3B7, 0x6850B9D0, 0xF80EDE7E, 0x7B779E95, 0x5331DFFF, 0x1A48F52B, 0x6B75B80E, 0x1709C76D,
+0x78FF3531, 0x0A457E6A, 0x1E5F4951, 0xDC538674, 0xD5C4F20F, 0x48D97C2B, 0xAEAEE8D9, 0xB5947402,
+0x9ABC685B, 0xD01AB465, 0x8835AF98, 0xD9F0FB22, 0xA68F3D2C, 0xCD95939E, 0xA87DB5CC, 0x3C7407E8,
+0x280FA0F8, 0x76AA2574, 0x8E8DF71C, 0x791AFCA2, 0x65FA3BDC, 0x2F4B56B3, 0x926F864A, 0x21DC16C2,
+0x574D92C0, 0x90F3D100, 0xD042ADE4, 0x5D525DDA, 0x1411C557, 0xA6E42FAC, 0xDC37B7C6, 0xAD75A2BC,
+0x9AA8A5A7, 0x4013EA8E, 0xFBCCE335, 0xF0B24EC1, 0xF7F09432, 0xD21CBF58, 0xC78FF032, 0x390FA129,
+0xCABA11C1, 0x339D261A, 0x8F046D3F, 0xD1F503F4, 0xA87EEA41, 0x70297564, 0xCE59F016, 0x83825A66,
+0x77E31FE1, 0x971D7175, 0xCD01FA88, 0x24E70AC8, 0x953EEB55, 0xC9200762, 0xA0739CDF, 0x25FBC23F,
+0x4EA6D0F4, 0xA4DF7683, 0xDAFD3479, 0x7D5D2110, 0x20FE0B34, 0x5F877513, 0xDF5E20CA, 0xF52B2753,
+0x591816C9, 0x385E9006, 0x45F8EF58, 0x46B7DFB3, 0x1F75F9DB, 0x8A1FE36B, 0x497BC4C7, 0x360A3E5E,
+0xF2EDE339, 0x3B761322, 0xE4788227, 0x3BC6F8E2, 0x1F42C60C, 0x81AF5E51, 0xAB9F9818, 0xD3585B56,
+0xE1724ACB, 0x39D61AAB, 0x00EA5B1D, 0x304A93B4, 0x7ED32261, 0x721A4803, 0x713C0D94, 0x4302A8BF,
+0xD034F87A, 0x4CA28D9C, 0xEE1AB55A, 0x25FFE4BC, 0x8107BEBD, 0x74034C02, 0x28A9FD16, 0x537B13CB,
+0x40AEC378, 0x80C0FB68, 0x8B3270CB, 0x5A857B2C, 0xF978D2C2, 0x7DAAF00A, 0x1478962D, 0x7B11E36F,
+0x1D67BBCB, 0xC04A9439, 0x32BC2090, 0x138D0F41, 0x2D9A8196, 0x1D6CD593, 0x24947DCD, 0xAED0E737,
+0x5E90A3A9, 0x29DDDF82, 0x3DFA08B3, 0x625A724A, 0x110E8F28, 0x55CAACF1, 0xB223E9E6, 0x155A06AA,
+0xE252E25D, 0x9DE91399, 0x20E93845, 0x3A29D887, 0x0B565D7B, 0x11586AE8, 0x3C8B656C, 0xAA6938CB,
+0xB5689467, 0x1FFBA440, 0x8B2EA4BA, 0xCAF468FD, 0xB72B5A27, 0x81ABBAD4, 0xC91350BE, 0xB245A4F9,
+0x072947D7, 0xFA2D4FAD, 0x9211C114, 0x815ED6B4, 0xB7A6F6BB, 0xD0D31B4E, 0xDB8A4F84, 0x819F421B,
+0x8B0E0C1B, 0x85231A03, 0x7D4E104A, 0x93CF8A74, 0x0A62BF7B, 0xB95F5B96, 0x2491423F, 0x9B4EC076,
+0xEF31E1C2, 0x88D968F8, 0xCE9782F7, 0x2B362DDE, 0x3BCBB81F, 0x8284DF56, 0x65BA6E6B, 0x0A9EEBCF,
+0xB0984102, 0x34A93950, 0x2A371E49, 0x83BC7AAB, 0xEAA69C52, 0xAA92EE2F, 0xE872590E, 0xC97E91DD,
+0xD956202B, 0x11B8F3CA, 0x8B765395, 0x1B255E2D, 0x7DF7E2E4, 0xEC5B18B2, 0xF59497D7, 0xADD67250,
+0xB34EC926, 0x9BD617EF, 0x06BD96A1, 0xCD4EE899, 0xDC481836, 0xC2FDAECD, 0x81C4C11F, 0x86F82F66,
+0x455D0777, 0x36C5FAB9, 0xAF70570E, 0x8990CAA3, 0x1E04C740, 0x3F8B7202, 0x83F8E32D, 0xD38CB528,
+0x36473447, 0x5C1431BD, 0x000D3172, 0x2C04005E, 0x5FD21444, 0x46A03F64, 0x70F7FAA9, 0xE8918076,
+0x0540D3D7, 0x5213F207, 0xF762354B, 0x4B71D2F6, 0x47D324C2, 0x35D02EE2, 0xF67A2E2A, 0x597E2714,
+0x2698F844, 0x7A7545A3, 0x52178814, 0x777379F1, 0xB047D17E, 0x7C0F5471, 0x16B56124, 0x3D711873,
+0xCFAB932B, 0xBC610747, 0x90393816, 0xE6AFC301, 0x64FC04F7, 0xEC5CCB5C, 0x9AC0F027, 0xE7D1F49E,
+0xD34B8963, 0x0362F269, 0x0C733978, 0x2C7BE554, 0x596FB15F, 0x3B7752EA, 0x70428D84, 0x14EAF5F3,
+0x8D6400AC, 0x2DAB6101, 0x410C0305, 0x3E223C07, 0x3A98AF2F, 0xEF112DFB, 0x90DA342D, 0xD789F152,
+0xC5D78455, 0xE668C32A, 0xFD26652B, 0x2D0852F5, 0x10441ACD, 0x70F7F3FE, 0xCE09F4CF, 0xA38B7EC3,
+0x8F964686, 0xA55852A9, 0x129A204D, 0x6B7FD6D0, 0xE8C62ACE, 0x596811B2, 0x277116DA, 0xE8917394,
+0xE9EBE51E, 0x63A75B95, 0x2A094022, 0x479FCE9E, 0xA6D0EECD, 0x96B2CCDF, 0x765C2A19, 0x29D9D52B,
+0xADEFA175, 0x579CBA27, 0x918B258B, 0xCFA93F99, 0x2699E044, 0x74B37A02, 0xEF777565, 0xE33144AF,
+0xB860D3BA, 0xB540DBDA, 0xB4857A92, 0xA795E506, 0x46B8AE9B, 0xC1A919FE, 0x2E39E227, 0x341D0B13,
+0x6B03084D, 0xD665ED6B, 0x813CEF99, 0x3D786BD7, 0xEDF7434B, 0x6899FF1F, 0x2B6F1E45, 0x0AB2524B,
+0x3A8356FC, 0x3623E4E7, 0x34C92464, 0xCB54F487, 0x74BC75C4, 0x45EE5745, 0xA3B1909B, 0x1F9CABB3,
+0x9C593646, 0xAC348EE1, 0x7226BE6D, 0xB490A17C, 0x9373D2A8, 0x2A6599F6, 0x1093781F, 0x5DD0574C,
+0xC47477A4, 0x01A06DAB, 0x1E343788, 0x5BB900B5, 0xCD8E3651, 0xCF920C88, 0xEBB7C979, 0x567200B1,
+0x631EB852, 0xBCECD05A, 0x5483BFDB, 0x76EC31A7, 0xB22B91C9, 0x18897915, 0x208B6625, 0xB2482C03,
+0x53C2FFD9, 0x162D140A, 0x42A60D62, 0xF1554C72, 0x59544C7A, 0x8A3720A8, 0x3921A49A, 0xFCDFB87A,
+0x4B9E2075, 0x3BCCF6A1, 0xC380A282, 0xDE1E804E, 0xEC6909C5, 0x72F80C48, 0x0CEEACD7, 0x30D22A33,
+0xCA5F95B6, 0xD1F29E98, 0x22AA69EC, 0x508DE016, 0x58E6EFCE, 0xC17723D0, 0x1228AC9E, 0xB0A64D0C,
+0xF85DB93B, 0x8F95B133, 0x375D4692, 0x00F047CE, 0x332E18B1, 0x25F19F3B, 0xF67F49DE, 0x324A3515,
+0x63290123, 0x5278A22F, 0x55AA0E4C, 0x0C1D8889, 0xC8579B92, 0x5E1D9AFF, 0x8D1F9540, 0xFB676F49,
+0xC5AAF7A9, 0xCA1A8D2E, 0xFB48FF2D, 0x653D0C73, 0x8BBD52C1, 0x25D23B90, 0x6C4F505B, 0x14B28217,
+0x74394AB2, 0xA453C799, 0x4808F346, 0x68FCF9CD, 0x68DF3BAB, 0xD8D43143, 0xD5E82B6A, 0x18BAB0B4,
+0x1A2E8C73, 0xD72800F4, 0x1480D800, 0xDBD822A8, 0x35BFCEDD, 0xCC631970, 0x26B76E31, 0x6514B917,
+0xA70AAB5A, 0xB9DDE68E, 0x197FF865, 0x98542D5D, 0x858E95C4, 0xE8979488, 0x7BD90938, 0x5D29D45C,
+0xEE933EB0, 0x7582FFA8, 0x325FE3F2, 0xB8853334, 0x78BA1FF6, 0x0D986CC8, 0xFB94E324, 0x9555E31C,
+0xC553B021, 0x31FB7A43, 0xB52DAE56, 0xA6C2D62E, 0x3B5C3AF0, 0x3CA39EB1, 0xCCD2555D, 0xAA3A3512,
+0xA21BB280, 0x100AF56B, 0xC8532443, 0xFE2615AA, 0x8E655DA5, 0x98262D8B, 0x3AEB54C5, 0xEFA5DC74,
+0xF5E1594C, 0x21A8E3A4, 0xB4105DF2, 0x3F237BFF, 0xCA7C5B63, 0x05C8794B, 0x4602271E, 0x54BDB1EB,
+0xC7B19A51, 0xC004F0C7, 0x0C9A2585, 0x9A89B88A, 0x1618D942, 0x9CB94715, 0x07DABFF3, 0xFC9A3A14,
+0x35CDF303, 0x90338C65, 0x78BAC3EB, 0xCFD474C9, 0x6A552CF0, 0xFA112F45, 0x95D25004, 0x9646B6BA,
+0xEDCBB7AE, 0x698B6DC5, 0x7EDD8BC7, 0xA92D9255, 0xEAEA8A89, 0xEB2C05F8, 0x815AB3FC, 0xA265F7CD,
+0x236EF70E, 0x9BB2DEFE, 0xA771B1FD, 0x0DFBDD77, 0x7ECC3965, 0x95AAA906, 0x7DF2BDE4, 0xFE2553F4,
+0x5938E7B9, 0x8624D907, 0xD4FC907A, 0xB599B883, 0x41D063EC, 0x41E7DECF, 0xDE01B6F5, 0x2F7FF42D,
+0x62BA9157, 0xDC502A4D, 0xDCD4AEC2, 0x6B50B68E, 0x8D3BF027, 0xDFB385D0, 0xA0F54EE6, 0x3EEDB3A4,
+0xDDF21C63, 0x81C29D72, 0x99F8C648, 0xC043641F, 0x2D0E1FAF, 0xB72CB180, 0x7B815760, 0x9082B7E3,
+0x2F214D22, 0x9323F8EA, 0x0E10436C, 0x6C8DFE41, 0xBA87F6B7, 0x374E1D57, 0x48BAFE64, 0x16A6C44E,
+0xA6F7E6AC, 0xB2FF1C1E, 0x391F7975, 0x683184A9, 0xFA78F2CB, 0x7ED14207, 0xA7AE9EF0, 0x12CA3F7D,
+0x9783CE5C, 0x759A78F7, 0xCF29293A, 0x05AD1B2E, 0x6BF5A7D3, 0x8F42537A, 0xD924973B, 0x6AA8245E,
+0x28BDA411, 0x8D4047CF, 0x18F98A88, 0xE41FD38C, 0x7E0DDB5E, 0xB83F94C3, 0x0BAE0B90, 0x3DFEC35C,
+0xFED15FAC, 0x2D891E21, 0xAE76C19E, 0x759BAABB, 0x728E3406, 0xFA9ADE51, 0x30A82725, 0xD142A61C,
+0xD66E5404, 0x51DFECCA, 0xD63CFFAE, 0xB804FDC4, 0x3372F255, 0x43CDB684, 0x60D0CAEB, 0x120A595C,
+0xAD60237C, 0xF5460401, 0x47A32A10, 0x12D4CD26, 0xF5555FA3, 0x8FF9AB6C, 0x1F9DD8F4, 0x06ED06FC,
+0xFB0CE61D, 0xF67F9D06, 0x23DEA208, 0xB347EBC9, 0x85F20A2F, 0xB3693D44, 0x5A751EDC, 0xF1BD3F7B,
+0x9C74E633, 0x42E7ECF7, 0xBF01E590, 0x0D498C86, 0x991A5273, 0x12E72425, 0xDA362F6C, 0xE2E492A1,
+0x9F045882, 0x26BD9F7F, 0xFCC9B144, 0x2CE0A170, 0x4B1EE6E2, 0xA27ADEB5, 0x404E9066, 0xFAB15B2A,
+0xBADD7C09, 0x3ABFBE22, 0xB24F8C17, 0x7B2807D0, 0xC19EFC66, 0x82AF2D00, 0xAE26A16B, 0x004179E0,
+0x8ACD48A7, 0xE72D98E0, 0x6928F330, 0xDFE90F1A, 0x44F9A389, 0xFD6323DF, 0x3B7DDBDE, 0x991230E6,
+0xC2CF982F, 0x32B64EA9, 0x1BC2F2A2, 0x92B8FAF0, 0x8E8C0EC8, 0xD03A18FE, 0x861D67B6, 0x5B922F48,
+0x0A76B0E9, 0xB37E4642, 0x26F2AF7F, 0x27638CAB, 0x4DECB0AF, 0x5EF451B2, 0x60DA55F6, 0x3D18E83E,
+0x9477F5B9, 0x99D46E20, 0xA884D027, 0xD60721B3, 0xD4C361FA, 0xBDC2B64D, 0xC08AEE9D, 0xAE0261D7,
+0xB1841CED, 0xC166950A, 0x680B7B36, 0xA432E9E6, 0x86FCEEAE, 0xEE979362, 0xE4081703, 0xCB2F9D00,
+0x28415805, 0x025668E2, 0x4C4D3B05, 0xD4170B42, 0x49DBF6EB, 0xE4DE331E, 0x6B8412C5, 0x23EC52B9,
+0xAACEB01A, 0xCF27B968, 0xD7DF3BCE, 0x63FCF79B, 0x005775A1, 0x7701291A, 0x3E305D5E, 0x8E785A6C,
+0xCD82FEC8, 0x85704A74, 0xC57FFC20, 0x489AF53C, 0xE98C60DF, 0xDD3EDF87, 0x86204C28, 0x728E5AAA,
+0x4515DEF3, 0xBD599A6F, 0xDBE26004, 0xADD0E34B, 0x4340E9B3, 0xD463A01A, 0x63085936, 0x25F89747,
+0x87778CEC, 0x79253F43, 0xF9CB3184, 0x249F26B2, 0xD6176A9D, 0x43B32A35, 0x1677176C, 0xAE0C045D,
+0x122C6A2E, 0xC0D9F6AE, 0x640A4471, 0xFB690337, 0x56D2EA19, 0x6D6ECB9C, 0x838475E3, 0x6EA39D50,
+0x7B6F7AF3, 0x2A9435E2, 0x44225183, 0x2914CB62, 0xDDF7E9FC, 0x833CA00D, 0x8EB2E52B, 0x1F313F6C,
+0xCBD584F7, 0x754993AC, 0x26BAC8FD, 0x59FB4EFD, 0x9BAB0D3C, 0xE4B86708, 0xC38169FC, 0xEA949AA2,
+0x1864E728, 0x36671F5B, 0x73D6765D, 0xCB166875, 0xFD8F4E09, 0xFCCCBE6D, 0x43A1687A, 0xFFD6892F,
+0x0FE93E2A, 0x5C62D4EB, 0xA15C69DF, 0x507372A3, 0x6C56F388, 0xF0107D50, 0x9B8DD756, 0x65CFA559,
+0x1C284B5A, 0xFFF1891F, 0x7FEFD8B4, 0xBB08D26D, 0xCB5F6DEF, 0x473CB317, 0x8A2BFE19, 0x44B075FF,
+0xB6891D77, 0xB4E5E269, 0xD5FB217D, 0xDFE8C646, 0x14D83A40, 0xA1BEA298, 0xD1A849F8, 0xEEC33BB7,
+0x799D011A, 0x59265727, 0x3EF06C12, 0x225A5123, 0xA3DC9505, 0x9CDD91D9, 0xDF6FEE18, 0xC316DDE6,
+0xCBB28D32, 0x67B2B263, 0xFF1AB7E3, 0x7F053B5D, 0x4308E21E, 0xE6852931, 0x9C885742, 0x977D37BB,
+0xE45B8C39, 0xE6802165, 0xC4B04700, 0xA2990690, 0x1A2AF12D, 0xB18E257A, 0x2B232B51, 0x613C1262,
+0x1A531C49, 0xF951AB82, 0x983A1149, 0x044299DF, 0x9A2AD4CC, 0x520C5989, 0x19B319C7, 0xFF0BDAAA,
+0x41D9F004, 0x2DFCC0E4, 0x2998EF88, 0x25049623, 0xAD668F07, 0x04873C1B, 0x37EB1DD9, 0x30DC7669,
+0xCAB242C0, 0xF3B2EEFB, 0xE13D60ED, 0x8D6B5551, 0xE717A45D, 0x8E69A9C9, 0x00A89B2D, 0x099F0249,
+0x69800F11, 0xC513F42B, 0xB54D46C8, 0x07937899, 0x13683A57, 0x847034D5, 0xDCE9CE55, 0xA5CE37BA,
+0xBA6F40A3, 0x73F6C18D, 0x2139D2E3, 0x17ADB942, 0x0E77C2D5, 0x026130B3, 0x0E5C8F9F, 0x5694CD71,
+0xE1C64069, 0x58CF3C06, 0xB743290F, 0x97A9EFEF, 0xBC684C43, 0x53FC3616, 0x3398C4D2, 0xDE3B9045,
+0xF43BEACC, 0x2E8E97F9, 0x1FA00D39, 0x6F575310, 0x59A2A077, 0x553E002B, 0x01DB2379, 0xCE453047,
+0x5AF000D7, 0xE81ADAE6, 0x7635C6BF, 0x1CC3A052, 0xEE192B9D, 0xDB2B8DC0, 0xF8E27B3A, 0x114002DB,
+0x9146751B, 0x2A03E68C, 0x3AFD8344, 0x2243EE4E, 0xF7B1A301, 0x29DA8195, 0xACF4FA33, 0xC43904F4,
+0x5D6700C4, 0x66018B3B, 0x5FC85EA0, 0xAEBCD7B8, 0xEB65E5D6, 0x64CDC3D9, 0x09A355D8, 0x70A04801,
+0x10E7A090, 0x198942DA, 0x81A85918, 0x30E84FDF, 0x657F7AE7, 0xA7FC58E3, 0xE6102506, 0xB6C5E4ED,
+0xAF1ABB7C, 0x8BAC68A9, 0x23CA54F6, 0xB2E91CCC, 0x0C812084, 0x8422C909, 0x903E60F9, 0x2F1DD76D,
+0xCC559227, 0x42B67BF7, 0xAC90696C, 0xFA474D22, 0xDC94FB08, 0x8AC3D5F0, 0x798FBB67, 0x511E73EC,
+0x0878996D, 0x4C03D7DF, 0x221BCEA2, 0x0CF05D06, 0x16DD9834, 0xB24D0ABF, 0x8250FB40, 0x1A8F19FB,
+0x7D04D343, 0x1C21C224, 0x69530CD0, 0x1F50AFFB, 0xE622E050, 0xA6052E42, 0x46236785, 0xB3EC6CEF,
+0x76BA0DD7, 0xC00FE112, 0x6B6F3540, 0xDCE13F05, 0x68434E8A, 0x3FC986B9, 0x5464EF23, 0x344DA2FA,
+0xDB5990BF, 0xEF87562B, 0x598E4128, 0x363D6C9E, 0x10D7386F, 0xBC90577D, 0x72559037, 0x2F37E3BE,
+0xDA5EAE77, 0xBB67CD57, 0x4F66E062, 0xCE89EA5E, 0xD0CBED36, 0x0E1CE526, 0x44BACCB3, 0x6638DD27,
+0x0564046E, 0x5B159265, 0x90711C5E, 0xAA07D5FE, 0x752F9FE7, 0x975EFCA0, 0xF153F9A3, 0xD64844C7,
+0x57221695, 0x48BA7E9B, 0x0DD7644F, 0x1BC0562D, 0xFCA4F4A2, 0x967ED195, 0xEB342564, 0xC2B7591F,
+0xF18EC503, 0xB7320B35, 0x99E211CA, 0x41F60C24, 0x2420A9E5, 0x563EF3D1, 0x1D237A00, 0xF7E51BAB,
+0xA9604A49, 0x601F6400, 0x2EB74683, 0x53265E52, 0x3D5E1D69, 0x5209A1F2, 0x85C1D9BB, 0xDF55AE52,
+0xF0A881AE, 0x92B5C92F, 0x13323451, 0x1881575F, 0x11077678, 0x4B5D708F, 0xF14EAD8A, 0x11F82391,
+0xDCDF5565, 0xC2807F9E, 0x603A8484, 0x63FB9357, 0xED38BF38, 0xE960D5F4, 0x006465EF, 0x82B572B6,
+0x45E686DB, 0x4DD0540B, 0x272E2474, 0x0EF657FC, 0x92432E0C, 0xCCB257C6, 0x9F1EE79C, 0x7E4835DF,
+0xB0EDE7F0, 0xAAB99902, 0x12391AF2, 0x874442A9, 0x2B54BA9C, 0x06F6B6EE, 0x8E99631D, 0x53A32536,
+0x563CE2CF, 0x5E788ABF, 0x9EC04FB7, 0x52B56869, 0x12F8B139, 0x17A8E7AA, 0x135D92D0, 0x96503588,
+0xFC474D3B, 0x837FDEA7, 0x7E71DD7E, 0x41CF280C, 0x3A7270E9, 0xDF55C061, 0xF7EA416D, 0x6B00E231,
+0x21B617F8, 0x4EF5F0C3, 0x27F0536D, 0x9E3EC042, 0x25CEDDD7, 0x034DCFB8, 0xC3A18C12, 0x0F1D0CDB,
+0x1ABA294D, 0x90ADF8C5, 0x789D7777, 0x2EBC3657, 0xB50D48EF, 0x1B4CE224, 0x92C89843, 0x0D630AEC,
+0x6E1D0C47, 0x0A718A96, 0x1614A112, 0x2CF9CB28, 0x06138451, 0xD3A4A165, 0xC2DFA542, 0x9AC482F9,
+0x8CAE43F0, 0xAFC16085, 0x068C62BD, 0xFF639CEA, 0xADB97D5C, 0x6FE541E5, 0x3FA082E3, 0x9D54DAA6,
+0xD950435B, 0xF333678D, 0x908EF601, 0xBD43B552, 0xA6BC1374, 0x4E15CB96, 0x91FD32FE, 0x58F98368,
+0xB1743395, 0x1BDE8877, 0x2A579A13, 0x3819D0C7, 0x822BBA0F, 0x1C69B1A8, 0x05A0F9AD, 0x1887177F,
+0x69FBF6C7, 0xA4CD6B35, 0x09253A80, 0xC85E534F, 0x8DFCD230, 0x8C7AC423, 0x746CC59D, 0x26B600CE,
+0xA3A2D1CC, 0xBF2A4A90, 0x7740B71B, 0x775C13C3, 0x208A69BF, 0xC32B187A, 0xA3858371, 0xDE9C8CCD,
+0xAF829893, 0xD0F84F9B, 0x54A986D7, 0x184A96F1, 0xBFFDD1A9, 0xF99B7691, 0x0D45BFA2, 0x80D59196,
+0x2DCC42A6, 0x7920D8DA, 0x3C601077, 0x3BDA951A, 0x37E80F23, 0xE9DF0358, 0x5F686A16, 0x486D8BE5,
+0xD357C033, 0x7ECCCF43, 0xC09A7E93, 0x70FB102F, 0x9D0E70E0, 0x16DE02B2, 0x4EEDE6B2, 0xC2E58BD5,
+0xBA80E79C, 0x5AFBFE6F, 0xCDC6DA04, 0x5A699BBA, 0x6BF5FED1, 0x6E7FE565, 0xE27906BA, 0x4D710F53,
+0x3F8F4D84, 0x8C377A82, 0xDD9D1CB6, 0x1F7BA40F, 0x2F04BA1C, 0x86EC14DA, 0xE2FA51CF, 0x72C5E2E3,
+0x09750F5B, 0x115015A6, 0x9867DB23, 0x9E5E0F44, 0x6BD66F76, 0xEB87B706, 0x9CD2AF93, 0xBE35460C,
+0x968D4081, 0x7F123058, 0x535B1F68, 0x278E4502, 0xDCF00CC6, 0x6D330A16, 0x19922CD3, 0x3D766931,
+0x2B8FD77A, 0xAE25913E, 0x93763276, 0x2DBA7B6F, 0x3021E762, 0xCE610941, 0x9950F488, 0x4888655B,
+0xC457EC2E, 0xB75689AA, 0xEB43579D, 0xF1466FE5, 0x55619AC8, 0x96078E30, 0x0F3A3F3D, 0xE22633CB,
+0xE4DC1FDE, 0xBB97FC19, 0x1CB99D70, 0xAD57E313, 0x948C0926, 0x4423AB2A, 0x8E5560A6, 0x1248BF21,
+0x1B5C1D01, 0x93711AA7, 0xB9F07F38, 0x2AFC9710, 0x6FFFF837, 0xF8C0ED89, 0xD7C18CC7, 0xDB3DB409,
+0xE0D3C632, 0xA971A11C, 0x98C750A2, 0x48420B4B, 0x6E8CBB8A, 0x2DFB9FEA, 0xF315B312, 0x09CC634F,
+0x00FD34F8, 0xEC2C563C, 0x7B684331, 0x2053F8FD, 0xC9D33334, 0xDA3ED8E1, 0x085C0F55, 0x6384393C,
+0xE2EB2593, 0xBCDB8D85, 0x7E4B9712, 0xA331EED3, 0xC87EB9D9, 0x673698A5, 0x84E3FCC4, 0xE1A0D62C,
+0x71D0A070, 0x4F3776ED, 0xBC963BDB, 0x04FFCCAA, 0x65138621, 0xF2436869, 0x4FECAD1D, 0x218A89D2,
+0x889C49DC, 0xD1369DBC, 0xFE4C2085, 0xF4140B8A, 0xE78FF605, 0x09676EFD, 0xB0F29CF8, 0x467CF351,
+0x125182B1, 0x9BFABBFA, 0xADA50BA1, 0xBB235990, 0xBEE03B21, 0x81DB12EA, 0x2A171DAD, 0xBC890AB2,
+0x97FE9ECD, 0xE6CE6949, 0x74D32BFB, 0x4CE4A7CD, 0xEDA73441, 0x877C99D0, 0xE68B2600, 0x4B143945,
+0x12061584, 0xF3398B84, 0x55E1F797, 0xDB16707D, 0x3C952CA7, 0x47262660, 0xA7C14E19, 0x58552DE3,
+0x9D19157B, 0x44E6701A, 0x271226F0, 0x9A1E4FDE, 0xAD8E9EF5, 0xF9993651, 0x78A7ABBE, 0xC51BB9B5,
+0x458B894E, 0x295CABAA, 0x3E1A5E55, 0x9250D2B0, 0x5940EA32, 0xE68A98C0, 0x9FFFF32B, 0xB6AB64B5,
+0x3103A85A, 0x214FEC60, 0x820744D5, 0x30F7D2E0, 0xE956904F, 0xA5CD2311, 0x27938F0C, 0x4F305B2A,
+0xCAD6A0C2, 0xD3B3A9DF, 0x480BE333, 0xFABAAC4E, 0xB54A4CA2, 0xDD07E603, 0xD7A04E07, 0xC3139E40,
+0x80913129, 0x2B4509F4, 0xBEF8D39F, 0xE98A181C, 0xC6D0A9E8, 0x07B46043, 0x9E7E673E, 0xFAFC3F58,
+0xE4E7191F, 0x22617E2A, 0xB40B7490, 0xB8979AE7, 0x8CA4FE50, 0x88F474FC, 0x7D77A9EF, 0x2F20B8F7,
+0x0DBD19DC, 0x2F2FDDDA, 0xAB8E9BCE, 0x0B58658A, 0x7DEC251F, 0x8CA07B8D, 0x38883427, 0x2722FC4E,
+0x191DE3F3, 0x23AE92F6, 0x7BC134AA, 0x8ADBF4A8, 0x4A1B9302, 0x6993E935, 0x5F2860B2, 0x9EBC0040,
+0xEC8A9BDD, 0x30FA8617, 0xF68A4C21, 0xAFC36AE6, 0x1B0B33E8, 0x2A608411, 0x231F301E, 0xEF21FF57,
+0x3248BCE7, 0xC2F2822E, 0x3A77D9DF, 0xD5EB9E45, 0x48D08CF7, 0x92AF2792, 0x97A4FBD2, 0xCBF277B2,
+0xB7DA972D, 0xFDE98142, 0x1A65B6DF, 0x87871329, 0x0269F829, 0xA4C59D13, 0x29CBDFF3, 0x30A8A3AE,
+0x69183FB3, 0xE97159AC, 0x3D7D501B, 0x28D895F8, 0xF8A51A95, 0x43999E00, 0x4E1A0011, 0x934A23D7,
+0xD89A2B43, 0x6E7C749D, 0x1876E0A2, 0xB1C6E58B, 0xC58250F5, 0x98036FB9, 0x8E9455CA, 0x3CFC94A9,
+0xD7BF911B, 0xA19FB376, 0xD3B14331, 0xCB262E18, 0x1CB012DB, 0x92407243, 0xA6B20FD1, 0xA8D2896A,
+0xACDA3A3B, 0x07DCF688, 0x679B424C, 0x130B8AD3, 0x5182B6D5, 0x8DDE37DF, 0xEAD66DFD, 0x62646FC2,
+0xCA3186D2, 0x41C817F7, 0x7D23CD9C, 0x42D44AF6, 0x245CAA01, 0xFE1966FB, 0x666C065A, 0x559D679F,
+0x9AA8FAD2, 0x2260EAF6, 0xE922C7CB, 0xC3769D98, 0x1FB48668, 0xD6B1AD5B, 0xCACAEF99, 0xF753239D,
+0xB4A8BA42, 0xE4C35981, 0x77438F5F, 0x986A5C75, 0x6D609E32, 0x1043D271, 0x85DC72A4, 0xBA7C1ABE,
+0x8C822D8C, 0x2D01AF24, 0x7883D3D6, 0xA7468F13, 0x144F7C01, 0x2E46CE3B, 0x49EC3E1A, 0xC965771D,
+0xA64DD072, 0xA71165D3, 0xE2AC8C37, 0x8F55FE0F, 0x5CF12CC9, 0x2A7ED9B7, 0x191058F5, 0xA3739098,
+0x1F4AA2A6, 0x64A4F657, 0x61224F08, 0xE0288CF7, 0x6FABB056, 0x5D08BF3A, 0x905C52FD, 0x833EAEC3,
+0xB7091D20, 0xFF055767, 0x9B319C6E, 0x21192A0C, 0xD225088C, 0x3E5C1E35, 0x61669699, 0x20AE31EB,
+0x0270916C, 0x3CA63965, 0x13278323, 0x31F0208A, 0x1B8391F4, 0xABEC2AF8, 0xB50EACE3, 0x8F3B34E6,
+0x6615D84E, 0x87788342, 0xB8F54A03, 0x6D2498F8, 0x0AD4E7EC, 0x27D3F9FA, 0xF3F2D794, 0x84475EDA,
+0x1E00F3E4, 0x0AAD3053, 0x69E46B34, 0x96C396C0, 0xAEDEAB2A, 0xBA4296DA, 0x903F86ED, 0xA4E62978,
+0x2F906B50, 0x7456FEA0, 0x7C58C7AE, 0x6CADB288, 0xDC5C36A9, 0xDA35B521, 0x166AAC5D, 0x6089CD8F,
+0x59DE3F9A, 0x1D7B4CD4, 0x6F417D58, 0xCF304C35, 0x7DDD32B8, 0x6ECA8599, 0xCCC0908B, 0xE7959E96,
+0xF646EB41, 0x3EC16CFB, 0x9AE433A6, 0xA604401D, 0xC046BFA3, 0x9BB92775, 0xCEB74658, 0xFCFB8F8C,
+0x7ED8C541, 0x9D7256A3, 0xFC495EF5, 0x46B396CC, 0xD3307BEA, 0x918581F1, 0x1B1DFDD9, 0xE81D91CC,
+0x2A696B73, 0x03C0382F, 0xAA0B030B, 0x47C565FE, 0x1A750C68, 0xB8247BA6, 0x8B3362D6, 0x6A6D650F,
+0x746B3AC4, 0xEE44F48F, 0x98CF832E, 0x24586684, 0xA408C9D2, 0x653D225D, 0x2DBE3ED4, 0x5F2258C2,
+0x614F2F9E, 0xEB837791, 0x7BB5F307, 0xA7385FC5, 0xC4DABFFE, 0x81CA4CA7, 0x9B913213, 0x87633BA2,
+0xC6C8436B, 0x018E8623, 0x6BE16E6C, 0x38DDCFE0, 0x15C3FF38, 0x0450110E, 0xE294559B, 0x237ED74A,
+0x449499F1, 0xDD0D0CD9, 0x57A89C66, 0x67DCEB88, 0x88593F6B, 0x14D8BA87, 0xBD63E2E3, 0x894921DE,
+0xC35B1541, 0x2378AC14, 0x3999BF88, 0x34B03C0E, 0x4920E6B7, 0xAF2C013D, 0x34371225, 0xDF631663,
+0x6940D35C, 0x58CEB5F3, 0x2E6E5474, 0xEE5C354D, 0x7CD23279, 0xB9FC8447, 0x09053175, 0x49059A53,
+0xABB75D60, 0x7F9C722E, 0x1642C6CA, 0xB71B17D8, 0xFE12644D, 0x85E123F2, 0x85D24541, 0xBE8D2CB4,
+0x216C41E0, 0xF3B2BB88, 0xBF80859A, 0x294E4786, 0x03C13B3D, 0x0A29B25A, 0xC05EC9D9, 0x4F660511,
+0x3C538FC2, 0x4D505BFC, 0xD9FF1B28, 0x126EDB03, 0x08724C91, 0xD7554BA5, 0x60E991EB, 0x00FD7DEF,
+0x39754B0A, 0xAABA40A9, 0x2A20DBED, 0xFBC0E313, 0x5755464A, 0x3BFF3B51, 0x2F1E2751, 0xEBC1CB3A,
+0xC12E52AB, 0xBC0D081E, 0x447F0ABF, 0xA4FFB0E2, 0x4A76E064, 0x37D82EB6, 0xEE1E6335, 0x4AF66F28,
+0x7B9A132D, 0x85EDC0A7, 0xC5D940E3, 0x9389BD34, 0x3D7E63AA, 0x363719A0, 0x6D12B8F7, 0x1B4CD68C,
+0xF2F3AB18, 0x33FFF6FE, 0x8A9B6585, 0xE05A9E34, 0x78BB79BD, 0x8D869414, 0x6E2B0805, 0x2020AC20,
+0x50F2557A, 0x8FE80DD3, 0xAACDB347, 0x91E6B4A7, 0x852455E0, 0xC8123BF7, 0xA170B837, 0xC0CFEF9E,
+0x55A0C4E6, 0x8661ED07, 0xBC9EDE97, 0x22E6AA87, 0xCC354866, 0xBD9EACE5, 0x5C7E9576, 0x86E7805F,
+0xF278A44C, 0x3949E443, 0x3CFBFB9E, 0xBAE7F1E3, 0xBEC6D089, 0x007FFB28, 0x80BA2E75, 0x004EE8A9,
+0x4EFF9A66, 0xDA6ED872, 0x9C33CFBC, 0xF5652336, 0x0E34F858, 0x2F422800, 0x1908EC80, 0x62484528,
+0x99133778, 0xE9652EFB, 0x1747978B, 0x87C7B4E2, 0xC1A2F974, 0x291A99FD, 0xD06625DD, 0xA0C2D4BD,
+0xECB49E5C, 0x836816A1, 0x0EAD0C54, 0xDD9839AF, 0xCB4464B2, 0x2ADC0B28, 0x6AD27C99, 0x7F8853BA,
+0x38135F38, 0xA1C9C210, 0x94283282, 0x9D3D9CA3, 0x6A409592, 0x0ED4535F, 0xB09C125E, 0x798B2E89,
+0x8437BE69, 0x9DCA2EC7, 0xD1528E8A, 0x9AFFF9D4, 0x9B47EA02, 0x2D2DB411, 0x1361445C, 0xB0E5C42B,
+0x9899A6BE, 0xAA3B60BD, 0xFBE2379F, 0x12A42920, 0xC92EC49C, 0xE3235E84, 0xDA56C35D, 0x8DEB9B4E,
+0xF841E698, 0x40356CC2, 0x67852838, 0x326CEEF4, 0xE42C2EC0, 0x1CBD0D8F, 0x0A1244C6, 0xEC7662CC,
+0xF90AA04A, 0x53BE36A7, 0x5A4F9542, 0x2603D588, 0xC7AAD35F, 0x7351796D, 0x132057FC, 0x69FD460F,
+0x6953C83D, 0x1088F10F, 0x5C32E209, 0xC0732876, 0x023ED680, 0x84AFA161, 0x846CD791, 0xA0BF6C47,
+0xDA1E22B5, 0xCA8B98C2, 0x00C874C9, 0xAF1A2DEF, 0xEB741F10, 0xAE633A12, 0xC72ADC78, 0x851A6506,
+0xAE77018F, 0x221B7BB2, 0x5C7D067F, 0xD95F962F, 0xCD630125, 0x2AC771BB, 0xCD02E190, 0xEDEB451A,
+0xB25DF03B, 0xAD078861, 0x8161E567, 0x796F4A7D, 0xAC77CC8D, 0x702F977F, 0x2419C877, 0xCF38E5AC,
+0x6BB577DB, 0x5DF81FB7, 0xED84E447, 0x22BD3CA6, 0x37A9E347, 0x87BEEE59, 0x3D98B8B4, 0x11BDF7D9,
+0x4DBDAECD, 0xB657E144, 0xFE49F640, 0x39F8E47C, 0x1F630988, 0xB8FBD570, 0x99D3FCF5, 0xFB5A6791,
+0x8AACD9A5, 0x38BC5870, 0xC8DC698C, 0x5B244A36, 0x841920BA, 0x48AD62B8, 0x3C503787, 0xFC69E955,
+0xCEDC66DA, 0x12076544, 0xFE4ED59B, 0x1C42BAA7, 0x0EEBCDE3, 0x3C3A084C, 0x7664C93D, 0xF74EB9CA,
+0xC15E8DCB, 0x95930BFC, 0xCD9A38B4, 0x4BB6789C, 0xD62992DD, 0x0E983D3C, 0x9A7D15CC, 0xA0F9BE43,
+0xEB96764D, 0x6780F364, 0x94BBC35A, 0xE4232FEC, 0x605DAEE7, 0x161A411C, 0x5408DAFA, 0x0EE8FF61,
+0x150F9557, 0x1A7D3773, 0x83D769A5, 0x5548DC89, 0x5E1C9B0B, 0x3C7BA737, 0x656BB33F, 0x04FCE61B,
+0x83269122, 0xC681CA8D, 0x945029B0, 0x771592A8, 0xC44E348A, 0xE786C71C, 0xB6659C7B, 0x077CC8B5,
+0xC0282FB6, 0xC5A0C5D4, 0x4967F477, 0x8284384F, 0xDAA1871B, 0x5D01F300, 0xE2F22B1A, 0x7A59B865,
+0x31AEE727, 0xB823964E, 0xE0E2146C, 0xA0FC3B1F, 0x6CA21B9F, 0x2950E75C, 0x70E9E29E, 0x91C6D5E6,
+0x78D69D09, 0xCDD1EDD0, 0x1781A233, 0xD2AF10F3, 0x5FE43271, 0x2DD9EED9, 0x8EE6401E, 0x09FFCBC0,
+0x01C95948, 0x58FF9398, 0x404E21DB, 0x09E644FD, 0x90AA291E, 0xC5B7A999, 0x8ECC5A5E, 0xE1578206,
+0xBC4867D1, 0x5E87E2DD, 0xBB21FB01, 0xF65CB429, 0x83A769A7, 0xD8F698B6, 0x414995AC, 0xE14EAE9A,
+0x68E2CB76, 0x54268D03, 0x209A9FD8, 0x17CA9BF2, 0xF6F062A5, 0x1948487B, 0x15D42942, 0xBBE27FFC,
+0x153D6877, 0x1CEE846F, 0xFB233FBB, 0x085A2E3E, 0xC432C376, 0x5427EB51, 0xFB855170, 0xFAEC3C1A,
+0x18C6D0E9, 0x223542DE, 0xFBD68B09, 0x4844E25D, 0x033FD554, 0x567A5C2B, 0x2924F76B, 0xE28E947B,
+0xACC4A6D5, 0x4E8A5AC5, 0x180FAA33, 0xAD12EAD5, 0x4717EB9D, 0xAC3BF6E9, 0xB69468AD, 0x8D605672,
+0x8A86CF03, 0x6AF27C60, 0xDD29D455, 0xA44BDD2B, 0xC22A7E93, 0xD56073F2, 0x2A4F36C0, 0xF48F4600,
+0xDE94CC84, 0xE6321651, 0xB6C94C26, 0xCCD3CAEE, 0xECBE8EAE, 0x74798028, 0xDBB5378C, 0x934CBD7E,
+0x66F097D2, 0x722F6B04, 0x66C66213, 0xE15CC9AB, 0xFAAFF397, 0x5802E8C7, 0xE129ED16, 0x49CC4C31,
+0xF80F5BA0, 0xCDF9D3F6, 0xD6F4A956, 0x9002BA85, 0x70C86FC4, 0x26323BC2, 0x9AB39A2A, 0x3BC2CA10,
+0x8D6A2377, 0xC49B0E1E, 0xC54EEB59, 0x80F5D4D3, 0xC6C90809, 0x7969A606, 0x289AADCE, 0x27F34035,
+0x5C2E4361, 0xCE98FB6B, 0x9741C0F2, 0x0712AB94, 0x2EF67312, 0xEF7EBCB4, 0xA38D5C3B, 0xD0C1F008,
+0xCFAF87A6, 0x67387A8D, 0x4480CFEF, 0x52EB8CA5, 0x83EC9ECB, 0xB1328A14, 0x30C65063, 0xD2EF61FA,
+0x34724D6F, 0x6126C34F, 0x042F899E, 0xFD83ED48, 0x5C54418A, 0xBE58E38D, 0x91D83BE5, 0x9F6348DB,
+0x77FFB583, 0x988CC5B5, 0x583C9C62, 0xB56F4907, 0xCD3811A3, 0xE6881589, 0x26A63570, 0x4A1B1F95,
+0x8026FD7F, 0x3BFABE54, 0x20922B05, 0x0BA52582, 0x7B82E9CF, 0x3980E175, 0x1C4B3947, 0x4923CEAC,
+0xE1945B72, 0xA66686E2, 0xA63F589D, 0xDC5072A5, 0x8283C634, 0xCE658393, 0xC02859B0, 0xB1AB1B5B,
+0x4F6E04CB, 0xD6009FA2, 0xD72A4CB9, 0x27F37909, 0x2B1AC9EE, 0xF068BCA1, 0x050C7A37, 0xDDA25754,
+0x9EF5A3EC, 0xA2A7EB4A, 0x50CB3FDF, 0x9128B0D9, 0xAD685147, 0x78634C7A, 0x79AAFC7C, 0xFD603B35,
+0x55EFA667, 0x4B80B9CA, 0xD3A89567, 0x252089B8, 0x97F90A50, 0x4040EEB4, 0xAC387F54, 0xABB99B38,
+0x4C223A24, 0x9DA17C29, 0x1AC7BFDB, 0xD579638E, 0xB9259051, 0x916CEC18, 0x734A1A89, 0x13A9FB2A,
+0xE8AC4B50, 0x7C6E8261, 0x01770447, 0x7B4586D6, 0xB4243C3F, 0xD9EDE82C, 0x09B7616A, 0x51B5E8B4,
+0x80470128, 0x06B27EF8, 0xDB037F8F, 0x32845EEE, 0x2C098D53, 0xFCDF3848, 0x14EB9002, 0xE36474A7,
+0xBDBDB485, 0x703C5577, 0xA42F3F09, 0x26F84998, 0x4E63D8FD, 0x302FC3AD, 0xF2A4E32E, 0xA2BAD016,
+0xBCE69C53, 0xD87F390C, 0xD5E0FB5F, 0xF5985C1E, 0x7973C143, 0xAA526AE5, 0xFD4EFA90, 0x989444C8,
+0xD8CE43F5, 0x86DA96C8, 0x48A41E02, 0x63132574, 0x2B97A572, 0x4E22DEA8, 0xFBE44D51, 0xEA905EFD,
+0x6999AE5B, 0x03EADD49, 0x22AAA99D, 0x26B8F7E7, 0xCE7CF0BD, 0xB1CB5EF0, 0x5DD56091, 0x928D8165,
+0xCE6D8B9F, 0xE3014E10, 0x1751D3F8, 0x0A25DBC0, 0x450322E4, 0xF33A495F, 0xC1648204, 0xC073962B,
+0x056E53AF, 0x62121EFD, 0xA9C1D820, 0x5B285805, 0x6C82AE1C, 0xF6FB1EDE, 0xEB81ADA6, 0x2BF4BB72,
+0x2258261F, 0x2C8D95A4, 0x7CEF5A52, 0x36C40CBE, 0xDA4256C8, 0x8DA05FC3, 0xA7826D71, 0x1373B267,
+0xAFFFAE2E, 0xADF7069B, 0x0BA0A83A, 0x59D86887, 0x2F8A336B, 0xD4E104CA, 0xDB93F452, 0x2A06CC3D,
+0x84B9EB13, 0xAFC69509, 0x37C9F73D, 0x73BD1C13, 0x3D327D13, 0x06556C2D, 0x33AD604D, 0xD14BBBD9,
+0x3C60898C, 0xEB3A259E, 0x48380C34, 0xCE2C9716, 0x24BE8821, 0xB22C8C23, 0x681C9CE5, 0x27814E40,
+0xB602C05D, 0x362EF3D8, 0x6CD13862, 0x1B1A7E9D, 0xA021DA91, 0x0921CEDF, 0xEE3FC75C, 0x65B2DA03,
+0x21BD2CC1, 0x259CBF85, 0x27B9C1B8, 0x9EB436B8, 0x78D97CF2, 0xBF6BC2FA, 0x74CD07F7, 0x29A4BD39,
+0x62A6C2FD, 0xD3A60EDB, 0xB5F6B403, 0xE0E3A4BE, 0x4D001D2A, 0x3F9C824A, 0x736D2494, 0x5EFA5712,
+0x3B4DC3EF, 0xFDAC1688, 0x03C2831F, 0xD3CA9DDA, 0xE1D53C96, 0xFEC66D66, 0x993447E4, 0x9AE4D75F,
+0xE34ECB2F, 0xAF74373C, 0xD415AF94, 0x13A85BE3, 0x8EF4C6D8, 0x160D25E2, 0xB2C99097, 0x42C7E5EF,
+0x64EAF4CC, 0x661316B8, 0x223F5C17, 0x30A263AE, 0x402439D7, 0xC6F6ADA1, 0x96309A79, 0x243BD552,
+0xABD53249, 0x1AED196A, 0x92FAAB3C, 0xBB2A2C34, 0xD0044C36, 0x85819797, 0x2107A65D, 0x328B1586,
+0x24079CF4, 0xC9647B2B, 0x10042769, 0xA3BDF83F, 0x5B1B3C9A, 0x694B5F04, 0x9E335017, 0xD5620A61,
+0x8194FE9C, 0xCED79182, 0x8166F967, 0x7B5B6758, 0x48D8C2A5, 0x7FB69A34, 0x56241192, 0x0252F9CA,
+0xFD3F72B9, 0xAA4B2E46, 0xDA137615, 0x49C035EE, 0x4F1D4AF3, 0x7CC6DD0C, 0x09F25760, 0x9B9856C2,
+0xBD3F8F5E, 0xC6A7E5A5, 0x3432050F, 0x199D3B8F, 0xA9FEE3AA, 0xC4CB8B18, 0x33FE292E, 0xD7CADFD2,
+0xFB212E47, 0x36298090, 0x1AE26AFA, 0xEA598749, 0x1E74E11E, 0xFE2AA1BC, 0xAFE8AB59, 0x27212F7F,
+0x4B4968F6, 0xF7C1B1D5, 0xE5C9BDDD, 0x339908B2, 0x410D4C78, 0x11E30EA0, 0x5A7C5067, 0xEB99BECA,
+0x5D48C3B9, 0x96DCB47D, 0x778774F5, 0xA6A2BC89, 0x466762C8, 0x92FCBF75, 0x932FCC82, 0x25EB944E,
+0xA64264B6, 0x584D9D79, 0x8183EF40, 0xBC04B76C, 0xC630D906, 0x7D9909F2, 0xF2BAB2A7, 0x7918FA75,
+0x294748B2, 0x8A9262DB, 0x6718CBC5, 0xF68B5D39, 0x129A8A9E, 0x1B226816, 0x8B525BE7, 0x1FDC0AF8,
+0xC5EB696E, 0xF23EF486, 0xE7E09401, 0xEF4A9F0C, 0xF42BDB2C, 0x1AA0124E, 0x7A70E801, 0xC5FB735A,
+0xD9B49901, 0xA67B4D69, 0x45A6B530, 0x942116A6, 0x7790C709, 0x6C8BF722, 0x9E4395CC, 0x478FCA44,
+0xAD0F4687, 0x4684D9D7, 0x128BE69B, 0xC10D0CA4, 0x6B72E818, 0x230D5B89, 0x8C5B68A1, 0x037D370C,
+0xD012F0C9, 0x755F7CDE, 0x5AA0D14B, 0xF89BF37E, 0xAEBB502B, 0x8D290022, 0x9695B1D5, 0x7D2C2820,
+0xC396000C, 0x99274DB9, 0x28625320, 0x91385B5D, 0xA60992D9, 0x7AF6A213, 0xAFF3F8CF, 0x43AFDC11,
+0x6DF75AE6, 0x9290C537, 0x8499FC98, 0x60D39CB7, 0x20F29DEC, 0xEFB5662C, 0x30627C7C, 0xFCAE34D5,
+0x6E4D78A9, 0x84754ADB, 0x7052C065, 0x5C51D8BB, 0x64B8FBD8, 0xF163E40E, 0x130F0ABD, 0xDFEB8AA8,
+0x6B311D2B, 0xE47090D1, 0xBC96504D, 0x2FB4795B, 0x87712E9A, 0x6245B7CD, 0xAD9BDCDD, 0xD8B61C8D,
+0x1F356992, 0xCB88F305, 0x2546006B, 0x7DA5501B, 0xF8A600DF, 0x52692F52, 0xA0F95A59, 0xC57F2C60,
+0xAE95D435, 0xE0FF6CB7, 0x272E666A, 0xEF27BE2A, 0x63D7761A, 0x722EC586, 0xAD08EABE, 0x3519DE2B,
+0xC0E5A041, 0x19DC1F80, 0x23222D31, 0xAEDE7187, 0x93D8C3DE, 0xB63C5354, 0x01DB0B6E, 0xEA1A5673,
+0x6F3276A2, 0x44CB9870, 0x34F21B9B, 0x1CFF5837, 0x897C3E24, 0xC18F3888, 0x431917C8, 0xFA5CBE52,
+0xFE29B5BB, 0x70387388, 0x1AE91D4C, 0xBBD86DFE, 0xF7812DC1, 0x5F8B9E3C, 0x66DA6151, 0x286D1AD2,
+0x3D7E78A0, 0x427D9A4F, 0x9E1C94A1, 0xF139585C, 0xCEA6FA34, 0xDE0561DA, 0x35516AF9, 0x7EFD2806,
+0x93CB7D9E, 0xC4769720, 0xDD32EA9E, 0x07A39E34, 0xB154BAAE, 0x0070BDB6, 0xFCEF36ED, 0xD86481DC,
+0x41286F95, 0x6B6F65AE, 0x5E3ADBDA, 0xEBC12281, 0x33783EF1, 0xEF2C4D39, 0xB82E8023, 0xF613E065,
+0x3C3E3C0F, 0x8DA4DDC4, 0x4D1AF7BF, 0xF57D5CF3, 0x787AB9C4, 0xCBEE2AB5, 0x9E295E1E, 0x3CC23A16,
+0xA621F5DE, 0x8D96C0F8, 0xABFE03F7, 0x95D75DFE, 0x8E0D1914, 0x22C27986, 0x9FF46471, 0x7ABC8D94,
+0xA09227BE, 0xC97F8780, 0xD292D09C, 0x7717720E, 0x776402DB, 0xFDFDEED8, 0xC25914DC, 0x33B7CD9E,
+0x6859ACA8, 0x320CA38D, 0x0817EFD7, 0xA9997EC2, 0x99A69576, 0xDDB44C5C, 0x19759958, 0x703777A9,
+0x1EE50183, 0xF40EE6E0, 0xBDCF7DC3, 0x3A826444, 0x8EC42040, 0x02F7382A, 0xA774A2DE, 0x2C15BC70,
+0x023096D7, 0x2B5752E7, 0xA4E8F1EC, 0x4E76B5FB, 0x61667BBD, 0xCC799F9B, 0x75B44D4B, 0xF4F180DF,
+0xA96A0494, 0x8C8835C4, 0x28456AA8, 0x1B671CB5, 0xE9D2B9A2, 0xE5E07091, 0x30AEFC59, 0x22E52337,
+0x59C1EE68, 0x036B6FE3, 0xFADB1CBD, 0x28D291B7, 0x131EB0B8, 0x52C91F4B, 0x0368F7A3, 0x329894E9,
+0x7635578C, 0xCE89CA55, 0x27B0C5CB, 0x50355106, 0xC2012814, 0x9BEC2B22, 0x6C2DC454, 0x9B554F4F,
+0x04BCD549, 0xF74206F8, 0x5527CF0B, 0x1FE6626F, 0x1670B8E6, 0x67DE1B8C, 0x5B12D684, 0xA07F3F64,
+0x9A3B8C42, 0x874445E1, 0x80569B07, 0x55738DFA, 0x93A3E1B6, 0xE613324E, 0xDB822718, 0xBF69588A,
+0xDD867109, 0xBDB34399, 0x78383020, 0x54CDD5A2, 0xFEF7BE68, 0x90958EEC, 0x394B6C51, 0xAE3CC805,
+0xC2E01D3E, 0xAD92F829, 0x9F3E0DE0, 0xC26AD6C2, 0x3DD54FD2, 0xAA9F01D4, 0xAD647B2B, 0x44947995,
+0x00F6EA98, 0xBEF575B7, 0x24AD7E6F, 0xF1D2B5DF, 0xD83E2335, 0x100FCDA1, 0x90A1D687, 0x72F84E11,
+0xA3E8B00B, 0xB18E5751, 0xB936722F, 0x3B240FE7, 0x245EC3C5, 0x2F1B56A9, 0xC96CBD46, 0x9F9A7992,
+0x0783492B, 0x4642036E, 0x20495611, 0x4ABC088B, 0x35C04E34, 0x191DBAC1, 0xC1AE201B, 0xA598EC30,
+0x6F22C27A, 0x4668319D, 0x9D968791, 0x23421F2C, 0x71E2A33B, 0x3DDC73C6, 0xD7F219A5, 0x78F1E473,
+0xB8614CFB, 0x15832535, 0xED1DD3E5, 0x58EF6DB4, 0x8531D6B3, 0x0CA23DBA, 0xC102B41D, 0x617FF9E9,
+0x11BB757C, 0x5141F016, 0x70CAB8A9, 0x644E9AF8, 0xE408D957, 0x8EAAE8C5, 0x1DB17648, 0xF06F556E,
+0x85B6CDC8, 0x11CDA394, 0x9DD1E788, 0x1FD26783, 0x30AD9E93, 0x03565FD2, 0x9DDCD7DC, 0xCA2C5604,
+0x5AA991F9, 0xFEDC5EEC, 0xE6989483, 0x4AA05575, 0xCCD081A5, 0x00DB8CAD, 0x631EDC79, 0x85271137,
+0x40BA9F7D, 0x54119580, 0xDD8CBE0A, 0x68A30E34, 0x3102E306, 0x707150A5, 0x02DD4439, 0xCB4F16DF,
+0x1D5335DF, 0xF8DD397D, 0x06CE5723, 0x19B40EF3, 0xAF8698C8, 0xB5929FB4, 0xD5CB880B, 0x03FAC8AD,
+0xC195F125, 0x45087230, 0x6191A666, 0xAA6BD5C8, 0xB44245B9, 0x3C35CFC8, 0x474182FD, 0xAE3A4560,
+0xAA2B9B05, 0xDF406169, 0xB7E2E155, 0x6C0ED4A8, 0x56CD59A1, 0xA78E4772, 0x4AE06DF6, 0xD0E0C455,
+0x4373299A, 0x7260634B, 0xF507FA31, 0x6BD1CE68, 0x03D0FFC6, 0x86FCF9D4, 0x54C0A34B, 0x1F1FFFFD,
+0xD3F0EB1C, 0x024037CD, 0x95C1EBE9, 0x12AF2EC6, 0x04B36C5C, 0x219E76EC, 0xEF5252E1, 0x1C0974EB,
+0xC3FC8F8B, 0xBFFA763A, 0x8781C8CD, 0xAAF1C768, 0x295A9D8E, 0xC8725F3F, 0x38488CBD, 0xF4E5BD61,
+0xEFD2B949, 0xA355F6A3, 0xC7D84A63, 0x406D79D4, 0xF3AB6455, 0x866DF6C6, 0x1AAAF996, 0xA72AC116,
+0x991EDA00, 0xAFFA3C73, 0x821065BD, 0x6D28DC22, 0xB399B669, 0xC39F9D43, 0xA75917F3, 0x2EAC0ACB,
+0xDED1D722, 0x40A4BEDB, 0x616E3888, 0x9D93C103, 0x694C9DBC, 0xBC049E9C, 0x895981D2, 0x1843A5F7,
+0xC6EF872D, 0x0267C583, 0x079DE167, 0x96311F37, 0x7C0127CD, 0x2B9988BD, 0x8AEB599A, 0x808EF6AA,
+0x779B9C66, 0xC54F057D, 0x147EB5DC, 0x89440599, 0x0BB8CB7B, 0x9667F554, 0x3B51968A, 0xCD5B61F9,
+0x7F4BEF9D, 0x6C5BF3C3, 0x599C2AD6, 0xF7610866, 0x6FF959CD, 0x6CFACC58, 0x120FDBE5, 0x51013756,
+0x32D60FB4, 0xD5291CC3, 0xF03B9E5D, 0x668CFFB0, 0x8BB6525F, 0x61659B0A, 0x80FED5C3, 0xBC85486C,
+0x2D336CD0, 0x556BF083, 0x7D3FC03C, 0x6CEA3D9B, 0xE45DF134, 0x180270AB, 0xC3F8B058, 0x3A46AEA0,
+0xE00D0789, 0xD2EC57DA, 0x44A9BFC6, 0x86843458, 0x42C567AD, 0x78B76EDB, 0xCBECE4BC, 0x77331CF0,
+0xBC021F00, 0x1F6B744C, 0x63B47B23, 0x2BE2809C, 0x44112A87, 0x0C46EAA4, 0xBABF926D, 0x2565AF3D,
+0x9D6928BC, 0x7CE454AE, 0x7F3A8A42, 0xFCE57CDC, 0x983F38CD, 0xEAAFD839, 0x0FA5CE59, 0x57A35B87,
+0xB62AE6CD, 0x1F33F653, 0x8FA969E7, 0xC6577998, 0x3BD45CA0, 0x32BD3D1B, 0xC24C41C2, 0xC66A44FE,
+0xD3DD230F, 0xE4ABC8C3, 0x1F96153D, 0x4AC83E7B, 0xA760B1AC, 0x86BBAA65, 0x9B32DD02, 0xBDF4C1B0,
+0x358FC323, 0x88167BBD, 0xB04B1114, 0x68A80FAC, 0x495AE750, 0xE82038A4, 0x07B154B1, 0xA3EC3C6C,
+0x2FBE88AF, 0xB63CD24F, 0x5FCA63CD, 0x8F5BD07B, 0x7265846C, 0x91C97516, 0x5D5FDF7B, 0x294A05F8,
+0x067E3983, 0xFE06655F, 0x0AF6398E, 0x641B2BA0, 0x96A15E0D, 0x0C72A563, 0x4AE15B4B, 0x4286A8F4,
+0xEF06F20D, 0xE65583C3, 0x204E231E, 0x04D2737F, 0x7D5F625A, 0xABA6F641, 0x2E839A6A, 0xB148146A,
+0xDA626A25, 0x71B2BD81, 0x62283F5F, 0x59216082, 0xF0C4C6C3, 0x4BC99FCD, 0x6EF48FBD, 0x9AB4575F,
+0x01CE9D84, 0xBAF63774, 0xA47664F6, 0x5833FC1E, 0xD07ECCA5, 0xCC797BA9, 0xEF0D3D84, 0xB4BDB9E2,
+0x1E42B452, 0x1D0A0A93, 0x8043995F, 0xE5873D84, 0xC0381B9D, 0x4BDD4A34, 0xD3B0BF24, 0xFE5AA067,
+0xA097C131, 0x99F2BF99, 0x1F53CEEF, 0x47E39823, 0xEC16DF39, 0x144C2ADE, 0xDD7A747D, 0xC80871AD,
+0xB99CBF4A, 0x0DFE6015, 0x2FB40380, 0x78EAD52C, 0x4EAC5E60, 0xF015AC11, 0x47EDE742, 0x8FE992AF,
+0xAE4CA01B, 0xAAF1943B, 0x7C1EE9C0, 0x72377844, 0x4132926A, 0x338A790E, 0xB7EA62FA, 0xF879A23B,
+0xFBAF5B57, 0xACDA3DD7, 0x3CE615E3, 0x4E6EA265, 0xF3C176F2, 0x2EFEEDA8, 0x8BF3722F, 0xEAA342DD,
+0xBC94B67D, 0x4028C93C, 0x28ACB674, 0x2EEB8373, 0x397C3CAB, 0xA29DA5C0, 0xBA5793D5, 0x85796C98,
+0x24DD4BAD, 0xCA9F2EAA, 0x9F9583B9, 0xDEBD6DE3, 0x3838D253, 0xB7D8E6B2, 0x4E2FACB6, 0x7F016E6E,
+0x82B052EB, 0x688B640B, 0x110D6055, 0xF22CCA1B, 0xA191FD4D, 0x83F65B39, 0x37A7716E, 0x9DC83832,
+0x23D1E8FC, 0x9431DF35, 0xCF682EE7, 0x9A468743, 0x3C53E3AE, 0xB60F8B8D, 0x39F6E2F3, 0x0D36E26E,
+0x1D1EB9BA, 0xC159E212, 0x5EBD72D7, 0x96C99D45, 0x2ECAE166, 0x3A584A30, 0x3CEBF19F, 0xF481BF2C,
+0xA9198CEF, 0xB512B524, 0x24BEA85D, 0x3C4D7EAF, 0x882D34D2, 0x2E8E6527, 0x08C01600, 0x91FEE566,
+0xDB0FC95F, 0xE4CFF1B6, 0x7890D1E7, 0x155C7F66, 0x6B3D0022, 0xECD8DDA2, 0x139A607F, 0x91C4204D,
+0x3ED0AFAE, 0x4AC59EA9, 0x03559486, 0xF08AF8C7, 0x6BFE540B, 0x13577D76, 0xACE4A5B4, 0xBA2BA5A0,
+0xC651D2AE, 0xDCB2DCD6, 0x44A41C35, 0xDFD05B65, 0x1706F73D, 0x44D1BE9B, 0x402977C9, 0x6AB4673E,
+0x84107197, 0xFBFF24E3, 0xA730793F, 0x123EF539, 0xFDBCDF54, 0x2CE92344, 0x6A4DB7B6, 0xBCCBEDC1,
+0x97702BED, 0xDCD92303, 0x64043E20, 0xDA08A239, 0x4A9F251F, 0x6F3E03FB, 0x4C21C63A, 0x1242CDE5,
+0xEBFE0BA4, 0xD03A9CB6, 0x0AE91043, 0x57781236, 0xFAD1B92A, 0x96FE0387, 0x99D5E0B3, 0x1B863938,
+0x11A6AA76, 0x0F19375F, 0xE812A77D, 0xD0D341A4, 0x276B1A06, 0x80E9A020, 0x9E74B849, 0x12A2343C,
+0xC2925F53, 0x8A78E85A, 0x7A968764, 0xBB88B3A1, 0x1F723605, 0xF37F0834, 0x4CF5946D, 0xFD4C9E17,
+0x71B9DC32, 0x6F655CDA, 0xB2239577, 0xC8F15795, 0x05F2183B, 0xEF59FAE2, 0xFBEFC97C, 0xF7454742,
+0xE71EE2CF, 0xB7352824, 0x3AA2B416, 0xE157C1EF, 0xDDE0FEFD, 0xA75D505F, 0xE915FE28, 0x55E967F9,
+0x9EAC8EE1, 0xC2E9D7FF, 0xC6F0E652, 0x8412D07E, 0xAA76E009, 0x790486B5, 0x8A8099F3, 0x753E2352,
+0x68C0C87E, 0x34D502FC, 0xD4510C0B, 0x95165A90, 0xA4338601, 0xE7C98921, 0xEC20EDC4, 0x606932F4,
+0xB94D0E8B, 0xDC6B10BF, 0x6778CBED, 0x2D187F4B, 0xB4E146EF, 0xE32E5133, 0x593ED010, 0xC6D87EFA,
+0x9BB62892, 0xA8752F1D, 0xD2849B5D, 0x5167717F, 0xF107E8BF, 0xC1C0A848, 0x6EB47725, 0x5814CB23,
+0x76A90C24, 0x7E8D0F93, 0xD4AD0CB4, 0x8DCF355C, 0x76A70822, 0x609CBD0D, 0xE206D029, 0x14A590C0,
+0x930445D8, 0xB5C02E36, 0x31F8FE82, 0xF4979C82, 0x9EBDF209, 0x20400CFD, 0x32672A81, 0x3C3E4B08,
+0xFFFD93D4, 0xF477E001, 0xE32DEE05, 0x70E94D65, 0xB9DFD06C, 0x29BDD521, 0x9EE64DA0, 0xA22B630F,
+0x32A56E24, 0x5BD6F4B6, 0x55E47CF5, 0x545A0103, 0x57169EF6, 0x1B745369, 0x90384A2D, 0x1A7D7454,
+0x95E66CE2, 0x45EC327F, 0xBF7E06AB, 0xA9EB6FE2, 0xF32253C0, 0x88482687, 0xB7D578E8, 0x465C359D,
+0x5EB500C5, 0x68F95519, 0x933A8F54, 0x75291994, 0x49E86EFE, 0x46AB6C66, 0x4E56ADE4, 0x483B1E9D,
+0x5719F72F, 0x084F371C, 0x1C57AE33, 0x1C68BF97, 0x084A33D5, 0xB26FB9A0, 0x6C67B352, 0x50D9BC43,
+0x7B14B387, 0x78E80611, 0x03D7793A, 0x479F313B, 0x15D387E2, 0xF81D9EDE, 0xBC30A4B8, 0x41C1E58C,
+0x6447DE23, 0x5BF8A71E, 0x13A0DDBC, 0x245C8286, 0x9A11BA7A, 0x1C2067BC, 0x0C16E93F, 0x8E32D409,
+0x5C9B61C8, 0xB7EA690A, 0xD90800BC, 0x7B73B3DA, 0x8E4E1B9F, 0x05A51637, 0x5E39EDDA, 0x9F3AC1ED,
+0x625F7DDD, 0x4A0C19FA, 0xDD7FC414, 0xE6A05418, 0x7CE86E8E, 0x5E774B48, 0xB33348BB, 0x67F2A8B8,
+0x1AB68A02, 0xEE9040EB, 0x8366A567, 0xF0397665, 0x4700437F, 0x8D958652, 0x131AB69B, 0xBB52E49C,
+0x1A5F2106, 0x8DB824D6, 0xB34587BF, 0x684EFF34, 0xF72E26DB, 0x7F3FE362, 0xC84511E4, 0xBE84E9E6,
+0x952285E4, 0xCE26531B, 0x69C6A7C2, 0x75E1A7C1, 0xE8EFDBD9, 0xBBA62E72, 0xDAFDF1EA, 0x17781A9A,
+0x2AC8A642, 0x217A60F4, 0xF1AAECB2, 0x63781BAD, 0x53371F05, 0xD30E02B5, 0x9E6F67C2, 0xAC0B6674,
+0x9A2F16A0, 0x4BBA18B5, 0xC6AD7A78, 0x8D871328, 0x1DFAB563, 0x84598D88, 0x866889C5, 0xB1BC1FD4,
+0x926FC6E7, 0x762FE293, 0xA002FDDA, 0xA8728CD9, 0x7DC62CD8, 0x713E92C4, 0x9296E5C9, 0xF076EF30,
+0x8CFF96D2, 0x6CA8E954, 0xD2085D2A, 0x8574FECA, 0x6F96F4D5, 0x7B90FA10, 0x0425DD40, 0xC0275BAB,
+0x2E6AFAB9, 0xD22FD871, 0x9A23EE76, 0x69116877, 0xD61BB6BE, 0xE3F49F13, 0x65926382, 0x2954DD29,
+0x3A6BFF0F, 0xFB557AFF, 0xFDCC00FD, 0x81678272, 0x0F602E57, 0xA8AA0EB5, 0x02E90147, 0x0F1E4E60,
+0x03263CE0, 0x48726EC2, 0x5D8CB519, 0x72FB6C13, 0x423AEEBB, 0xFE2E4CB9, 0xD1165D84, 0xF27270AD,
+0x00B17B5F, 0x4674F4F2, 0x5A29E304, 0xB86CCA7C, 0x085C79D8, 0x79EC5BF2, 0x7E7A2E8F, 0x9CEA190F,
+0x0A444B76, 0x15070BC3, 0x6BFEE1FC, 0xEED77351, 0xF6609DB2, 0x3E1751F8, 0x63DDAB72, 0x9B182A6C,
+0x83906D10, 0x2FC6122A, 0xC45CCA38, 0xABF1357A, 0xD5D40172, 0xA220BC6C, 0xCE5DCFD3, 0x739D0F7D,
+0x2CCC0527, 0xE5287227, 0xDF4943AC, 0xD815996A, 0x03797CC8, 0xCFF2F422, 0xAA98DA09, 0xB9AD0BB7,
+0xCEF00746, 0x933DFB14, 0x35C18510, 0x0BC27FC0, 0xC5B41A0D, 0x32D69E7F, 0x8A14DD35, 0x6ACD5711,
+0xE36D428A, 0x42F73825, 0x745FCA1F, 0xA3509529, 0x801396E0, 0xB3601614, 0x4A7C365C, 0xDE1A0154,
+0xD446A67F, 0x7A417246, 0xB9C99D62, 0x6BBDC151, 0xE5E3BD42, 0x558B58F6, 0x737A8C89, 0xDF2E7C0C,
+0xED97E7C4, 0x88379DA8, 0xBB204AA6, 0x0F8E42B0, 0xDF5C8040, 0x659B0335, 0xC1BAA03E, 0xB663C534,
+0x3AC10660, 0x06FFC2B0, 0x20DCCEF5, 0x842CDA00, 0x0BB8CC84, 0x33E1C6AE, 0x04B79C73, 0xD02E14C1,
+0x8C3917D1, 0x6951AC94, 0x747127CA, 0x183C0E4A, 0x81ADB556, 0x9115EC2B, 0x8B67F9BD, 0x17193923,
+0x0F8499E8, 0x4EB31366, 0x8FD8F070, 0x1B010332, 0x8A4AD8F2, 0x1E29523F, 0x30277A05, 0xF2B1A6D5,
+0x24D08A6A, 0xBD800EA1, 0xD0DDA072, 0xE873F3BC, 0xFBAFEAB7, 0x1B5014FC, 0x1E8710A8, 0x17B335EA,
+0x0C1B4F50, 0x4DE90A99, 0xBE1212E4, 0x991B47F0, 0xD902418C, 0xD97C9F5C, 0xB1EFA984, 0xD271BE62,
+0x1F289AAC, 0x07AAABAA, 0xD12B615B, 0x56364A04, 0x5554DF1B, 0x5C8FA8B3, 0x83AEEB2A, 0xBC3C30AE,
+0xDCF87FB4, 0x123DF923, 0x1622EC67, 0x10BBC5FD, 0xC37376AC, 0xA74EE611, 0xA13F629B, 0xFD20365D,
+0x798CB6F1, 0xBC3E442B, 0xFE4ACBB9, 0xC4FB5348, 0xD99B6188, 0xB44CD2B1, 0x18A18DF7, 0xA62A8D58,
+0x78782477, 0x06E5D221, 0x56A74380, 0x73BBA931, 0x84EA2ABB, 0x9DB472A0, 0x92D2671F, 0x6A1F050C,
+0xB1DA781E, 0xB6BAA602, 0x66ECCE55, 0x8439AE74, 0x06DEB8D2, 0x8FD11528, 0x9ECB557C, 0x64C45B04,
+0x340F136A, 0xBF53265A, 0xFAFC5DF5, 0x8101700C, 0xEF45B4FF, 0xDC3370ED, 0xF079335C, 0x2F1FAE1A,
+0xEA88F825, 0x174444E9, 0xBC2CAB6C, 0x338CC1EC, 0xCFC07477, 0x33BADC93, 0xF6B0CC6F, 0x1AD6FC15,
+0x1D66A95B, 0xDF18CE3D, 0xDE5466C8, 0x5D2DC306, 0xFE3B2FF2, 0x6C2319D9, 0xBE757297, 0xA121236E,
+0x65C229BD, 0xA682A965, 0x57FDC798, 0x723B246A, 0x3B6A17D1, 0x2937C09C, 0xAD637651, 0xBA743BC2,
+0x666F95D9, 0x919D6C9D, 0x7E3664A5, 0xEE12713C, 0xE1E97B77, 0x5798D501, 0xB3CF1198, 0x2073F160,
+0xD49C9D08, 0xB2F1A07E, 0x6BCE617B, 0x5B61C8CB, 0x91DD5303, 0x04C31178, 0xAC49C9D1, 0xB8E22C1F,
+0x0AB504F1, 0xA5C0C636, 0xF77649DE, 0x035FD000, 0xCDF277FF, 0xCF633D68, 0xE24624E6, 0x1873C847,
+0x2B03ABC3, 0x3D572D00, 0x657280DA, 0xEABDA565, 0x07F81F31, 0xECE8C18C, 0x6D273DBF, 0x96BC6D0D,
+0x35096386, 0xED7BEA25, 0x600E7B51, 0xA076E775, 0x6A165CA6, 0x1790EE9E, 0x444C1436, 0x13A8D6AB,
+0x9E611E02, 0xF739D729, 0x60763711, 0xE2A97D2D, 0x7D976A3F, 0xC4C5E613, 0x47F02CAD, 0x36CB7250,
+0x5CE5970A, 0xC0C1098F, 0x1DCB355B, 0xB2B7781A, 0x4567CE94, 0xBEBAD27E, 0xA974EBF0, 0x887C7AAC,
+0x4A201A8E, 0x418E39C6, 0x95F6A7C5, 0x5D668B0F, 0x1DC03E7C, 0x239F6A4F, 0x10239E9D, 0xF52B1717,
+0xF93A90C7, 0x22864F77, 0x0DA6FECA, 0xC56C58C6, 0xD899F668, 0x4D856093, 0xCF8396EE, 0x8E948371,
+0x20C5D7B0, 0xBF87E21B, 0x14B66D34, 0x6590C39A, 0x8A82DA37, 0xE029A4F7, 0xEE2B9E17, 0x5D342765,
+0xDD3CEDE6, 0xD60A9018, 0xEADC72FB, 0xF6A9113A, 0xFCEF5F47, 0x098A66DF, 0xC1003A36, 0x4B160974,
+0xD71B1184, 0xC6090C0D, 0x4D1E2C83, 0x64A19FFF, 0x1B0112C9, 0xC08C7248, 0xE7EDE2C8, 0xAEA46CDA,
+0x3784F475, 0x3389F3C9, 0xF4F00D4E, 0x9E88D6DC, 0xAFACF274, 0x47EBD7A3, 0x6089595A, 0xF8E5046F,
+0x1B6D16BC, 0x92774906, 0xB648041A, 0x0F44870A, 0xF1338569, 0x2672DE05, 0x9359B529, 0x31613099,
+0xB7A732E6, 0xD2D7D1B1, 0xF601F859, 0xA32E4027, 0x03649FB2, 0x2333575E, 0x715224C9, 0x4E006A0D,
+0x84FFF610, 0x542382A2, 0x048B6F10, 0x02990AE4, 0x134FC3A9, 0x433BCF6B, 0x1BD0F428, 0x2B6F63AD,
+0xACADC006, 0x0F869865, 0xDE2688D2, 0x91C41AB4, 0x5B9CDA26, 0xFAE9C671, 0xC8A3805B, 0x2D9B33F3,
+0xAC559481, 0x2D3AA121, 0x6994E531, 0xDCD0AB88, 0xF9ED8CD5, 0x02624805, 0x59A36500, 0xFEA459C3,
+0xF9ECB7D2, 0x4F0E72B5, 0x8921510C, 0xB4F36790, 0x734ED5CE, 0x0C5EE8F7, 0x5E11C118, 0xF79515D8,
+0x90FB6FCB, 0xDF9051A3, 0x9EA92828, 0xD518CE2B, 0x4EA54CAD, 0x216C701D, 0xE9F889BD, 0x87DC92BC,
+0x49D52221, 0xD76E809C, 0x58850DA0, 0xFFC01213, 0xF36039F3, 0x640BF0E3, 0x85A6DEB0, 0x2B7D8059,
+0x9126D876, 0x688CAC88, 0xFD2BF9CD, 0x60FD3125, 0xED9D67C4, 0xBE4F9415, 0x118AEE07, 0x2621C6C5,
+0xE5A30D30, 0x1177FFC4, 0x9051C53F, 0x47C48B01, 0x8D4AF6C2, 0x1A9ACB1B, 0x7A6FA6D5, 0xD8631E8D,
+0xCFD20834, 0x3EC4AE59, 0x33B20CD1, 0x0407F3CA, 0x5BCADD6A, 0x3F13572D, 0xD5305EA4, 0xF15E5C6B,
+0xB7640FB6, 0x6615ADF5, 0x4C4DC22D, 0xE0AD9EEC, 0x4A87CD47, 0x194CCB65, 0xA6F0486F, 0x6DA01A04,
+0x78F774C4, 0x056B511E, 0x6013D933, 0xF9A5EEC7, 0x32A66365, 0xC19E36E5, 0x92749546, 0xE7E9C0B6,
+0xBA8B9A11, 0xC0071D39, 0x2617B608, 0x49A90BF2, 0xCFCA8290, 0x51F6911A, 0xA9B9C187, 0x8A31DE46,
+0xFE3A634E, 0x6235503F, 0x0F60FBD8, 0x6FD17A6E, 0x164DB21A, 0xB60F7E82, 0xF7082C77, 0x679C36F8,
+0xBAC74C2B, 0x8A9B7451, 0xC9A1E2D2, 0x367B4107, 0x5EA840C0, 0x227D285E, 0x3836D41D, 0xF90424D8,
+0x086FC8CF, 0x0EEE37A3, 0xE4D02BD4, 0x77777315, 0xBEECAAA6, 0x095529C2, 0xD8152EF1, 0x808F41B2,
+0xC35DB6AC, 0x259BA058, 0x1F69E363, 0x817BC5A5, 0x420163FB, 0x06620FF5, 0x15D2D3E8, 0xF3389F83,
+0xED4EB13E, 0xDC01D6DB, 0x678DFEFC, 0xCD10FF4D, 0xCC22F773, 0x26EC3939, 0xCE4F8014, 0xE69466D9,
+0xB030A652, 0x9A134FFB, 0xE6048124, 0xA8D829F4, 0x024FB915, 0xAA99B715, 0xFA210F32, 0xDE6C630A,
+0x87AD736F, 0x86B6CEFE, 0x1F58C8D1, 0x34C8C239, 0xD5D58738, 0x57225962, 0x771CD1CC, 0x5327404B,
+0xE43A05AB, 0xADBA7D08, 0xC3C64919, 0x3C3EE8F7, 0xFF277443, 0x4442689A, 0x2EF8D7BE, 0x456DB68A,
+0xEBAA5709, 0xEF29E3D0, 0x0B329958, 0x52B129F4, 0xCFD3369B, 0x1BA7487D, 0xE587457D, 0xCF08C59C,
+0x95AF47F1, 0x2BB1B670, 0x56699E03, 0xD121FD5D, 0xBA2FA1D7, 0xBD8456AE, 0x9E2304CA, 0x983CBD97,
+0xAFDAD727, 0x2A1B0B59, 0xEB566C07, 0x582A5092, 0x216BB9A6, 0x7A6E6E87, 0xC63F26D1, 0x43DEA08E,
+0xF486A10D, 0x48B5D917, 0x9FE7FC17, 0xCF7AE84E, 0x9A970760, 0xB29998C9, 0xD2D914F0, 0x1A41618F,
+0xA3B900E1, 0x275CAFCE, 0x20AED682, 0x558E4573, 0x7F081029, 0xC4273E28, 0x56191FCD, 0x198AF4BC,
+0xB95E4E59, 0x2DAA36C1, 0x76511657, 0x31172F9C, 0x09913B4B, 0xDE46DBB2, 0xA4AF891B, 0x9C4E28F5,
+0xE7E93E3E, 0x45017E36, 0x021AD5B7, 0xE298C71B, 0xC9C43EFB, 0x5491C603, 0xAD9D13CF, 0xFE796297,
+0x05ABC989, 0x5CEEB07D, 0x518C1CAF, 0xEA8AA2B1, 0x0D0B9426, 0x891E2C84, 0xCDC7EBE3, 0xFD6D357E,
+0x80366016, 0x00CD064A, 0xE8BBE5CB, 0xE36F84D2, 0x723F932C, 0xD604CE6B, 0x7243594C, 0x8F5D7D05,
+0xD9A52136, 0x40CCC637, 0x96A4BAC3, 0x5C0E8514, 0x25514CC4, 0x8B2A3B5C, 0xEF2CAC6A, 0x9D5BFD02,
+0x86F49FF7, 0xBE51CD61, 0x349D0486, 0xA8BC822C, 0x6221F68E, 0x83CB4712, 0x8C6FB95A, 0x25937ACA,
+0xBFD064E9, 0xD46DA074, 0x9D90AB37, 0x3E250559, 0x9650F590, 0xF331C521, 0x602DC069, 0x7E1952FD,
+0xE39DEF5F, 0x135833B9, 0x7DE8AF71, 0x21229A2D, 0xDAE09F2D, 0xD1336324, 0xFBB15708, 0x4B852BE3,
+0xEA9B559E, 0xD3350D31, 0x41152400, 0x42F72CA4, 0xD4FE0DF9, 0x0EB3DF27, 0x9A92DE04, 0xBF609AA3,
+0x1BEBC546, 0x9E0ED1E4, 0x7EF4EBD8, 0x06DE8DE3, 0x9228A837, 0xAB8FF261, 0x736817D0, 0x99CEE520,
+0x4EEBEB89, 0x0C6A5B54, 0x760137B6, 0xC3644648, 0x50A4E9A0, 0x6B6029A5, 0x5B700EB9, 0xC04BD95A,
+0x899F6A7F, 0x244D7493, 0x1A68F5C0, 0xAD4EE3D5, 0x65F5123F, 0x0B2181EC, 0xAFAEB22C, 0x77693969,
+0x0AB54D25, 0x546A0C4F, 0x4371074B, 0x96E413BA, 0x9413A6DF, 0x8286FBE6, 0x4396E3E2, 0xC689E8F2,
+0xED21BA75, 0x6181784D, 0xC0EE59CD, 0xBA2DAD10, 0x3806D0CE, 0xE3B8BE86, 0x1CD62013, 0xBD95F674,
+0xFD876B81, 0x71B4947F, 0xB6F8927A, 0x1AFEA8FE, 0x0624D58D, 0x7248DCDE, 0x51FF9974, 0x5C48B4EB,
+0x46C474CA, 0xF25678A2, 0x94B505D5, 0x441262FF, 0x775669D9, 0xAAD15BD7, 0x3B206B40, 0x249C9B07,
+0x62C7DF1A, 0xDA187DFD, 0x73321CD5, 0xF425DB40, 0xC743BD18, 0x34A473B0, 0x9711263E, 0xB02DEA1B,
+0xFA013314, 0xF1912BC1, 0xC9B1E2ED, 0x4BBCBF75, 0x3C90F798, 0xBF9203CC, 0x0E31BCC7, 0x9A3BE8ED,
+0x63BEBE12, 0xED97C225, 0xE84CDD08, 0x0726E956, 0x10120C1C, 0x1CD4723D, 0xD581203F, 0x54D61B29,
+0x78C9CF46, 0xA62044D4, 0x337F6D6C, 0xF145AF8F, 0xA3AFF663, 0x82E9E0FB, 0x8B95267F, 0x7ADC5461,
+0xF5DCC771, 0x261C4F52, 0x048B52E3, 0x059D80CF, 0x0A45FB6F, 0x39CFE8E7, 0x29EECC81, 0xF876A2AA,
+0xD388ACE0, 0x60806508, 0x7D43FA44, 0xA602707E, 0xED1BFFC0, 0x94C157B9, 0xE11477F9, 0x62FFDB70,
+0xF0D90E05, 0x69BA1D9D, 0xAFAE191E, 0xF029FAAC, 0x72D035E3, 0x08976DB2, 0x08E29902, 0x10561D09,
+0x499E54D2, 0x58DD97AF, 0x4B17571A, 0x51299B3E, 0x9422B96A, 0xBD9941ED, 0x43CF5768, 0x29B550B8,
+0x326238B8, 0x747BFDA0, 0xA6C72881, 0x2FD8439D, 0xBC829FF7, 0xC6BB689F, 0x2690B2E0, 0xFEABFA14,
+0x5901A5A9, 0xEBBADDC9, 0xDBDB6B49, 0x49A11FC7, 0x3C0F11E3, 0xA5942119, 0x317FC897, 0x020E8E74,
+0xC6B671D8, 0xD199E6FE, 0x23EB6DEC, 0xE3AAC3CB, 0xB64190CC, 0xBC228B29, 0xBC5FBA3D, 0xC0F9F462,
+0xB18E728B, 0x2AC17716, 0xB5FBB56B, 0x865C3C03, 0xFCE61B60, 0xF846FF73, 0xB41A3B94, 0xE3A4F540,
+0x5327B801, 0xC206939B, 0xE0E4A47A, 0x88AC3CB6, 0xC987AF51, 0x90408B6C, 0x5C5701DC, 0x25CE6AFA,
+0xC8D5A6ED, 0xCFD1689D, 0xDAC8AACC, 0x3783BA73, 0xB8F961D0, 0xD60C2A1B, 0x17A8E11E, 0xD063D033,
+0xAAEA362D, 0x1149F9EC, 0x1A5FE975, 0x68BB028F, 0x860D62E6, 0x9226AE9D, 0xBAA41964, 0x3C83252F,
+0x479E3DCD, 0x144FD2AF, 0xEB154AA5, 0x92183D30, 0x947A4C41, 0x4C8C11ED, 0x7C457AAA, 0xA0CC78E5,
+0xCE18C766, 0xC1A8EB39, 0x4E6AB3D5, 0xFA38F6AE, 0x593077AF, 0xD8739077, 0x2ECE9CA1, 0x7360B319,
+0x2875DDC1, 0x518D39F3, 0x4B9CD2E7, 0x53E7BC18, 0xB69445C2, 0x2A17DE87, 0x282F1F92, 0x31312C00,
+0x496F8702, 0xC9B2BF07, 0x5F702779, 0x23853EF9, 0xA9E0F9AC, 0x63131931, 0x1E73E3DC, 0xCA774CF9,
+0x38B2B9B7, 0x605B1CF1, 0xFF7EA14C, 0xA34AA0E3, 0xD89AB924, 0x0B901F6A, 0x490D5CEC, 0xF02B2002,
+0x5B4359D2, 0xC7434C56, 0xEF239EF0, 0xF5908D86, 0x121D3CC6, 0x9B9D474B, 0x9CCB19AA, 0xCE38C783,
+0xFEDF04AB, 0x53E6696C, 0x1BADD657, 0x14A953EC, 0x3A1CCF11, 0x227B2E97, 0xF1EC327B, 0x0FB596EA,
+0x497623D0, 0xA2EB7604, 0xBF23CB76, 0xC8DCA096, 0x68A682F6, 0x909EEAA9, 0x873F75E6, 0xD21016DA,
+0x6D9D6F82, 0x03ACA324, 0xEE40DAF7, 0xFB7C1CB8, 0x0A2BC4BE, 0xC53D8ED2, 0xEE0706E0, 0x3D5DB2EB,
+0x27CF2F4F, 0x7DC29D5F, 0xE47E0E17, 0xA8FF12BD, 0xDC37692B, 0xDB464772, 0x06524FA1, 0xE2958C5D,
+0x307E60B3, 0xFD8B3B8A, 0x8BEB9145, 0xFBE15AD5, 0xE54E66DC, 0x8C43D7DE, 0x29BE6B0C, 0x05E82721,
+0x6DCEAE3F, 0xDD02F4F3, 0xAE78110E, 0x56648C22, 0xAAEAD907, 0xA2571594, 0x62717F32, 0x6AB7AF9F,
+0x2CE0A13F, 0x00420EF4, 0xF22956D0, 0x303C08D5, 0x9F9A1A23, 0xC2513D78, 0xBC9D679C, 0xAEEB40A8,
+0xAF5F8334, 0x50A98527, 0xAC376404, 0x1373F4C7, 0xA25810A9, 0x7431A21A, 0xE40E3482, 0x0429F1EB,
+0xB7A76120, 0x0276D01C, 0xAAC970EE, 0x2F08F242, 0xBD2A1D1B, 0x474DACC8, 0x7FF56513, 0xC5656835,
+0x9B5AF797, 0x2EC771C4, 0x68BD28C5, 0xD59F6F55, 0xC9780A89, 0xE1A2BEB7, 0x818E32B7, 0x9F7D8524,
+0xEDA5F626, 0x89465676, 0xE46A3251, 0x982A0CDF, 0xAF1AA2A7, 0x2CA81106, 0x53AD3038, 0xE4DDA2E4,
+0x82B16295, 0x29D055A8, 0x515042FB, 0x38BB515F, 0x1AFABD5A, 0x1D0EE564, 0x8D159AB4, 0xDDFF6C6C,
+0x02D88E4D, 0xCFC94AAB, 0x7002B9FF, 0x83DBE0F7, 0xE59BBBA9, 0xE54AE718, 0x14FC437C, 0xCA1338FB,
+0x91E983D2, 0x3E2833EF, 0x7C4DD1B7, 0x2EE12CF6, 0x8A7FB172, 0xB40A845C, 0x17C91250, 0x9E82B1FA,
+0x0D12840A, 0x50231693, 0x50F037A4, 0xB38B10FA, 0xCF59E800, 0xC095BC6D, 0x51036AE7, 0x4B18A520,
+0x2E69FB3D, 0x9E367F6C, 0x6832EE5A, 0x5B11B364, 0x26DFBF3C, 0xD9032750, 0xD344EF75, 0xF38F31F8,
+0xE54A38C0, 0x2D708F4E, 0x2A9CC883, 0x88080CC9, 0xDB5C33C9, 0x113C4133, 0x970FD4DD, 0xD61AF0D6,
+0xF7DF3DAA, 0x72CF461F, 0x0E83576E, 0x7295597E, 0xFA444CDD, 0x948F5F6E, 0x18421F2B, 0xB7CD7C83,
+0xD9F0DB11, 0xECF86C5A, 0x67B13BF2, 0xA03C761B, 0x3302AE97, 0x967B6FD6, 0xA936B80A, 0x216BC8A8,
+0xCEF42582, 0xD2A3750C, 0x4433A79C, 0x4375B235, 0xB49E9130, 0x8F675490, 0xCF2E5A7E, 0xF473738B,
+0xCE6794A2, 0x091AFDCF, 0x0158A863, 0x5E3AEB76, 0x05961E71, 0x2948FD97, 0x799E48E0, 0x10268554,
+0xCC0B4818, 0xB72A022E, 0x005BE738, 0x65CB2D07, 0x8C34133F, 0x6D4E1DDD, 0xE25341A6, 0x145BC3E0,
+0x2B99F2E3, 0x6B21994F, 0x1B291813, 0x52D046F8, 0x9C016F61, 0x58A365FE, 0x79C9EFD7, 0xF771AA43,
+0x3961D9FF, 0x1D463228, 0x9041AA30, 0xB41C0A03, 0x5438AEA2, 0x03665364, 0xFBF37169, 0xF5FDDFB7,
+0xA8F28317, 0x783C07D7, 0xA51BBE4B, 0x6EDD0AB1, 0x250090D5, 0xF412B6B8, 0x1CDE0452, 0xC84A74DC,
+0x87BC8615, 0x0A8A4B89, 0x7A2C7E17, 0xA9B958DD, 0xA58DDE53, 0xE9D06789, 0x4FEE883B, 0x5953466C,
+0xA58A4434, 0xCDB0FA71, 0x352CEC8A, 0x2074B2FF, 0x70265CB7, 0xCBED7D6B, 0xB5A5849E, 0x4D3C3C37,
+0x4838D5B5, 0x9DF68689, 0x5E51341B, 0xE5AAC618, 0x97049FE5, 0x33FB1F00, 0xADCE18A3, 0x9EE62E87,
+0x3E3D5814, 0xC074AE55, 0x3B281446, 0x1E36BBB1, 0xC545FAF0, 0x90E4B8DD, 0xBCD465B1, 0xF2CF8302,
+0xAF4212BD, 0xC3E97947, 0x31ECB7EC, 0xCE6FA8E3, 0x122A0C39, 0x08486CEE, 0xE0547909, 0x90B6B643,
+0x23A62B97, 0x0187E297, 0xE4274CE5, 0xFD437D70, 0x47DD6F77, 0xE828DAE4, 0x778293A3, 0xDE21AFA4,
+0x7C6C25E7, 0x63BDC069, 0x3B870C9F, 0xA6846818, 0x743AE544, 0xA46E1918, 0xDEA38050, 0xB35D865E,
+0x5EE513FF, 0xD98FC52E, 0xCCCE44BA, 0x2E696362, 0xEBEAA51D, 0x3A2BE3F2, 0xC1297E2F, 0x720A2170,
+0x02A8A42F, 0x0C3415B8, 0x3FF890B0, 0x57EFC621, 0x3A108023, 0xF871639F, 0xB26238ED, 0x9232826E,
+0x33D2AE10, 0x5D6C7418, 0x862E5304, 0x47050CFE, 0x3F8D014E, 0x18DB898D, 0xB06C6B36, 0x8C61690A,
+0x64E22423, 0x0A7265B2, 0xF73B76AC, 0x3FF837C6, 0x24A42F3C, 0xEC853A92, 0x30E5436C, 0xBDCF7A59,
+0x4570F03C, 0xE32298E9, 0xB3E492B9, 0xA5E1D631, 0x29BA402F, 0x235C9B1C, 0x26D86DC3, 0x4DB89A9F,
+0xDBEF5975, 0x19707AB6, 0xB10A2A94, 0x7ABC5122, 0x3735713E, 0x04F3AEE7, 0x8824EA96, 0x9ADA4821,
+0x187B7AF3, 0xC5A88ABA, 0x1B7559D6, 0xF91F076B, 0x9E218CF6, 0x51B1E4C4, 0xF4B1EBC2, 0xB88F3745,
+0x9DB14E68, 0xABD52BD9, 0x505668EE, 0x3C77E66B, 0xD301F222, 0xFE0F27D7, 0xCF2E2BF8, 0x886E525C,
+0xCC7706B9, 0x11D7BAF0, 0xD28472C6, 0xB55BF474, 0x10C7B572, 0x2C100FDF, 0x92A201EE, 0xC2542858,
+0x84B3DAFC, 0x6EEF015C, 0x6F255531, 0x184E97CE, 0xB7951BF3, 0xEB7E7CB8, 0x05BF6D86, 0x7278430D,
+0x28786DF8, 0x434BA744, 0xF8C04569, 0xBC3AA792, 0xDE24F8B5, 0x0B9C572D, 0xDA9695B3, 0x5A54E509,
+0xD1D51A39, 0xDAE6249A, 0x07D8D662, 0x3C87ED82, 0x6DDFF34D, 0x890E7E54, 0x4200BC29, 0x45DE24D0,
+0x4C03B12A, 0x0CAB8FFC, 0x01A3A53B, 0x1385433C, 0xDBAB2AC1, 0xE10F7F6A, 0x0BA75644, 0x00229DA9,
+0xE81CBD4C, 0xF4D9268F, 0x244203EA, 0x006EDF74, 0x2B8C7663, 0xCCF65890, 0xD830FE51, 0xBD451F67,
+0xA8FB7E43, 0xBABFB289, 0xBABDD2B8, 0xECE88C35, 0x648B6FAE, 0x9FB25F27, 0x9C22C97A, 0x2C484507,
+0x49953354, 0x70C1185B, 0x152E497E, 0xD6666F77, 0xB7E17FDB, 0x66D7E834, 0xF82B252D, 0x3B099AD6,
+0x0DDEB682, 0x57824C17, 0x889EC358, 0xE71487BB, 0x96242BE9, 0x65559B79, 0xAD158004, 0x51AAE97B,
+0x5625E114, 0x53E9CE68, 0x7BAF432B, 0xD1952E0E, 0x65A8DCC5, 0x97D77C97, 0x0B1E0356, 0x4BAB0719,
+0x18B0473E, 0x3E47E844, 0x91284EF8, 0x14462B88, 0xE762688A, 0xD5194EEE, 0x1306AC0E, 0x213B4603,
+0x990473CA, 0xDB12B9B7, 0x548AB165, 0x27B0FF10, 0x13ABE397, 0x2176DEBF, 0xF720CDDB, 0xA2C3298E,
+0x72F54E2A, 0x87C94CB3, 0x7B858A71, 0x1E09EFE0, 0x81EBAB9F, 0x02A52A63, 0x147964F4, 0x8D3FC63C,
+0xA5E9086E, 0xA9CB6110, 0x1435E201, 0x1419C18E, 0xA957590E, 0xDCBBBAD0, 0x544908D4, 0x827CD2CB,
+0xD4D7F633, 0x17C84C7B, 0x326DA9A7, 0xD399C5E1, 0x5B89B414, 0xA8655C70, 0xFF8E6795, 0xEF4F7469,
+0x06FA5216, 0xB7F10D17, 0xC999BB88, 0xBBBF6F49, 0xA390BC72, 0xDAB75930, 0xF184BE4A, 0xA9549D0C,
+0x051403C9, 0xE93D44EE, 0x21B27511, 0x9A50D69D, 0xFA291F12, 0x948B7008, 0xE8D49441, 0x1E1281DE,
+0xABE5EF5E, 0x8782CBE4, 0xBDB1D8FA, 0xAE74112C, 0xE6DEA89C, 0xF49E5BFC, 0x57DD7547, 0x3B340D00,
+0x264C9CF0, 0x4DB9CB69, 0x235EE963, 0xC77F42F2, 0x1581A01D, 0xC19AD952, 0x788C3223, 0x9996E36D,
+0xD989CCFC, 0x64624E8A, 0xD467E4E8, 0x4A2F6181, 0xABC999A1, 0xAC0C707E, 0xB0D35045, 0xD7E4C16B,
+0x9193D8E8, 0xEF5A645A, 0xEFE5B04D, 0x0152FD60, 0x89A9788D, 0xDA6E0CEB, 0xF5EA7567, 0x0240B1E3,
+0xB5B7A126, 0xC4CA12CD, 0x19D77745, 0x70739B4C, 0xEC8DBC84, 0x6CAE3383, 0x9C0AF05D, 0x003B8D10,
+0x01568C42, 0xE1EE5634, 0xA99E68C1, 0x65FD91FC, 0x66E34346, 0x4D0E3CEB, 0xC1A2CC8F, 0xF89A56BC,
+0x04E71C7F, 0x094D0BD2, 0x9B1E55F9, 0xCD558CCA, 0x15FB131A, 0x2D6426F8, 0xD6434923, 0x41352BE8,
+0x0DF247BF, 0xAFA406E8, 0xD4FC6B7E, 0x40585D67, 0x6AEADB39, 0x5E7AF0AD, 0xF37476B0, 0x52A09076,
+0xE4BDF711, 0x3FE99843, 0x3D248F3E, 0xE2D4A1BD, 0x17662F84, 0xAE577626, 0x6E95A4FD, 0x54296106,
+0x57286225, 0xA2859B68, 0xD119CD44, 0x4FF5769A, 0x6062AD57, 0x714F61A9, 0x7478996A, 0xD3E45A57,
+0xF73D3370, 0x9C843E13, 0x0318406D, 0xC3706D67, 0x2B42F00A, 0x83F63775, 0x21E44631, 0x33673F6B,
+0x31386C76, 0xA430B5CF, 0xEC81DD43, 0xDE3B39E8, 0x9DAB9351, 0x797A6117, 0x2CCA9E14, 0x4F2533B4,
+0x48258FC9, 0x98E70939, 0xCE5F0C96, 0xFBE9F5F5, 0x1FFEECBF, 0x2FB9A0CC, 0xC2EAC6FF, 0x69BB06E8,
+0xD5F1474F, 0xC843AA43, 0x27016880, 0x7A3E70C6, 0x640C4FCC, 0x7C793B19, 0x73F897CD, 0x45F62281,
+0x9A9B78B4, 0xF7C852E6, 0x3D5032CE, 0x95AD8038, 0x83360C2A, 0x5F619760, 0x106C4E29, 0xC6DB72D0,
+0xD90C9920, 0xC4C7FDA7, 0xDB08D698, 0x4629F765, 0x2C191C56, 0xE8BB31AC, 0xA6EE38AC, 0xF9DB4F6B,
+0x8731B075, 0x2FB509F1, 0x155F1BAD, 0x5828A6AF, 0x9327CB91, 0x0FA69EE5, 0x6A432C94, 0xA4B47960,
+0xED441C64, 0x9E1E5B0B, 0x391D454D, 0x6C6F4A0F, 0x79FF46F8, 0x236827FD, 0x55A02EFC, 0x682588EF,
+0xFE9FBFDF, 0x3EBF73BD, 0x1F3E94E0, 0xBC8A5772, 0xDE418A19, 0xA4D436CB, 0x49C9FE70, 0xC06E0D1C,
+0x17C80F6F, 0x6522EF30, 0xECCE2576, 0xF59B9875, 0x42487A0C, 0x221CC6FB, 0xDF1F1E52, 0x687E66BA,
+0x0AF8ACAF, 0x7FEBA232, 0x7CEB4C7B, 0xEE5C8F38, 0x02D95B68, 0xC1E0020D, 0x2C7EE51A, 0xC83CFACB,
+0xEC1D1C1C, 0x81905F23, 0x47F7EC17, 0x45454960, 0xF42355D2, 0x410CB210, 0x219BAC83, 0x80E80E81,
+0xBC1B83FC, 0xD2AB6420, 0x2523C65C, 0xF8ABA1D1, 0x81EEAE4D, 0x757B46B9, 0xB97C85EF, 0xDA7ECCE3,
+0x7884C70E, 0x47879DC8, 0x8DFA8197, 0x26484763, 0x3BD8E842, 0x583F40EF, 0x0D32D2C6, 0x07210083,
+0x7877183E, 0x9E5E4F5E, 0xC0807872, 0xC4806FBF, 0x9D28CE47, 0xEDBF7F94, 0x71FC2537, 0x76F4B1BB,
+0x600372DA, 0x693721D5, 0xE328E461, 0xAEC54757, 0x7E1624B6, 0x2B207CE4, 0xA611F58A, 0xCC1BFF90,
+0xB74F5311, 0x48ED99A8, 0x9B7804D7, 0xC8B98CE7, 0xF918649D, 0xBE344F76, 0x3ABD2ED3, 0xF61265AD,
+0x885F156A, 0xAADC5C99, 0x819D1604, 0xA120E3D1, 0x225CEC7C, 0xAE037E81, 0xC64C8114, 0xC5A112F3,
+0x080265EB, 0x0063D4C2, 0x7066AFBC, 0xA33EB420, 0x9C968FCB, 0x4400212A, 0x2D893AA3, 0xC7E75F32,
+0x30E0348A, 0x4FD2D880, 0x1FD1E8C7, 0x84A827C1, 0x65D8AB1C, 0x3CF9574C, 0x6FDEFD18, 0x2D71DA26,
+0x503CD1F1, 0x872002B6, 0x73BDA2A3, 0x4992E6F8, 0xDD230CA5, 0x80256D21, 0x5DD1986F, 0x034EB2F3,
+0x9A22A763, 0x1BCAFA54, 0x1093EE80, 0xB26EA350, 0xE88CBFA8, 0xC574FC99, 0x9940DD13, 0xD6C04EB9,
+0x9F8854C9, 0x279E6327, 0xFC8B4383, 0x324CBFBA, 0x895B4867, 0xAE98C1C9, 0xCC06491F, 0xD2594E7A,
+0x5F5EA830, 0x36614050, 0xDE853794, 0x37F62442, 0x964DD747, 0x8E10B6AF, 0x61942874, 0x31D3CDDB,
+0x3941CBAB, 0x0362513E, 0xD23B1A8D, 0xCB01C493, 0x4E98413B, 0x030237E4, 0x9262F8B3, 0x04747573,
+0x4F52B436, 0xDEB6F19C, 0x47FBFBC4, 0x346C08BA, 0xCA553F6B, 0x1830E82D, 0x3AE126C8, 0x90E4370E,
+0x387AE623, 0xDC1996AB, 0xC644351E, 0xD3D76924, 0x94A1B4C7, 0xB5E45DB9, 0xD169E5C7, 0x439B0E0C,
+0x096CA39C, 0xEBD83E4E, 0x2DCBA20F, 0xCD698EF1, 0xF721954E, 0x8093F246, 0xA73ECF88, 0x06D66754,
+0x6738986F, 0xAEBBA1AC, 0xD940FDC0, 0xE05972B9, 0x915851CB, 0xF2C8F3DC, 0x7AA4882E, 0x94EE155F,
+0xB91DD6EB, 0x53741E95, 0x8875942A, 0xE6B7C1E9, 0x7C39EF9C, 0x89531300, 0x05CB561C, 0x75697AEA,
+0x3544910F, 0xFC958CC8, 0x55CADF7B, 0x7DE4728B, 0xF046DA6F, 0x3582DFC1, 0x347D872D, 0xC88B8A61,
+0xA71E2866, 0xECFAEA42, 0xF087F153, 0x184E47CE, 0xC00E2DF7, 0x0E7990D0, 0xEA3829F4, 0xD94127D3,
+0xF8CFC029, 0x45A136BB, 0x54218EF1, 0x0D048451, 0x4ED23715, 0xDFD73323, 0x0B924A62, 0x73FB0C83,
+0xEB9ACDC3, 0xE6C8DAE3, 0xB1CBB567, 0x8959DD13, 0x959C4A6F, 0x8BC855A9, 0xD7CEEF28, 0x59B79B99,
+0x23E8F18A, 0x2E58C6C1, 0x57CAD534, 0xC8F0F91D, 0xF5060A18, 0xA285E163, 0x94C46415, 0x89378509,
+0x465FB6C1, 0xCEC5B531, 0x247DBA2F, 0xDED3E167, 0xCC29301B, 0x1C19B2FC, 0x0D7D98DA, 0xB7B69CB3,
+0xEBED2BA4, 0xA7B89A92, 0x02A65421, 0x9035D447, 0x2A6D953A, 0x2BB1E014, 0x40A2F03F, 0xA75591A7,
+0xA4388C98, 0xAD200555, 0x87B822C9, 0x982F0393, 0x62124ED4, 0xEF39ACCC, 0x7E870A47, 0xE697C63D,
+0xF242DF94, 0x58274318, 0xABCAAF08, 0x6187FFAB, 0xA7D9BC8F, 0xADD5ED91, 0x1D7A7010, 0x5AD9F4EA,
+0x4F500CF4, 0x817CACC2, 0x0DF443F0, 0xDA9B2A67, 0x8C3561D7, 0xAA5C731A, 0x53451818, 0xBED66469,
+0x04231962, 0x893DD323, 0x1A2AFD64, 0x6A1220ED, 0x8DAAD653, 0xB5A9C8DB, 0x33513F8A, 0x92848DD1,
+0xDB631210, 0x8BCCD1E3, 0xA418E22F, 0x98DFA30C, 0xF99052F5, 0x60778874, 0xB53F7E43, 0x220BDB76,
+0xF0DC716C, 0x22B1CE8B, 0x64223A88, 0x7FF644FB, 0x78AC782D, 0x9632F2CF, 0x720F1147, 0x89F23F45,
+0xC3122EDC, 0x303B9E7C, 0xA3842EBC, 0x186F073C, 0x3093BE12, 0xA4ECD18E, 0xE733A1C6, 0xD235C8CA,
+0x9F6C2B14, 0x4E6DD578, 0xB78BCEEE, 0x73D75A65, 0x8E3B6346, 0x6BF8330E, 0x2E150520, 0x31973EDE,
+0x26AB436A, 0x323C70C3, 0xB555C71A, 0xD462BCE2, 0x81AA5F92, 0x18AC7F03, 0x10383A2B, 0x0B5CB00A,
+0x89E77C60, 0xF3C9C767, 0xBCDAEC38, 0xF21E396C, 0xB0A96B74, 0xA0A99C12, 0xDF852706, 0xB0A31333,
+0xD69DF93F, 0xC7FF183C, 0x0AAF6841, 0x06F64CE3, 0x4B83A74E, 0x6061F7C5, 0x701550A3, 0x709EC681,
+0x171E5DDE, 0x55BC8AD0, 0xC695289B, 0x0EC4BDCF, 0xE3C24BDC, 0x07B82327, 0x7EBDA34C, 0x51DC6593,
+0x8DB86DFE, 0xF0315354, 0xB34C03F6, 0xB9F94007, 0xE7E98AE8, 0x47871B2A, 0x9BFA9196, 0xD2D7E31F,
+0xF6969485, 0x9389B11B, 0xECD2A62D, 0x5863C336, 0x4F9CC985, 0xBF9A6339, 0x0EC6EFCA, 0xE9072505,
+0x6B3C38DD, 0x1322D595, 0xCA026C9A, 0xAEB90F4A, 0x08C00D47, 0x10BCA3E4, 0xBB5D2705, 0x5544E0F0,
+0x3FBB148E, 0xC9AC0D30, 0x3802C22E, 0x2D14AFEB, 0x81DD1CF9, 0x49A5841A, 0x3F3961BC, 0xF8089921,
+0x402C33B8, 0x59BC9E43, 0x65F2ED10, 0x594EF1AE, 0xBA7CD1E2, 0x08B100C5, 0xD7B34ECF, 0x7F1B1815,
+0xA8D05C8A, 0x8878AFDE, 0xEB074439, 0x432048DD, 0x355DDF30, 0xAB38A030, 0x6BD7C98F, 0x7F4EC058,
+0xE5B79A23, 0x6A3C29C4, 0xCB4DAEB6, 0x53ED073D, 0x9322224B, 0x34C4DAD0, 0x659F2F0B, 0xBF75B2B1,
+0xBB5357F0, 0x3015D5C2, 0x48210CFD, 0xFD073767, 0x62434E48, 0xE63BC2F8, 0x3F04B5B8, 0x9C022BB3,
+0x12BABD3C, 0xDB45EDD4, 0xF406AFB1, 0xB44CC7E7, 0x92C47073, 0x51E6342E, 0xB8CD7817, 0x18F17E07,
+0x3E9D0D35, 0x399DB7DE, 0xA0B85173, 0x65648166, 0x0EEBA718, 0x6AB41F3D, 0x84705E6F, 0x5E39C92C,
+0x62AFD046, 0x4BA65FE3, 0xFC63658D, 0x2FC9BE9C, 0xA33D9C3C, 0x5129A142, 0xBAE0E79A, 0x68007967,
+0xA383E488, 0xAADC7AB5, 0x78956605, 0x05DCB28E, 0x668ED6BE, 0x11A0BF41, 0x73E614AA, 0xF7A67983,
+0x19A6C9E5, 0x566ABCD7, 0x84FDAD83, 0x2D597DC4, 0x71E15588, 0xBB006C8B, 0xD98E8F72, 0x209EA6EC,
+0x5777B0D4, 0x14E38A4E, 0xFD74556C, 0xAE66554E, 0x13F09199, 0xC9D6696D, 0x592CE6EC, 0x243CDB90,
+0x02E8B373, 0x45249F79, 0x5BED18F7, 0xFEC37BC9, 0x78F5D6F7, 0xA260AAED, 0x6FACD9E3, 0x0F42EDD9,
+0x7BFEFAF5, 0x262A0021, 0x2ED01BCA, 0x5BDEBDD8, 0x980F3BD4, 0xFF8D42BD, 0x2F33387F, 0x1205FF01,
+0x6EA73785, 0x258217C1, 0x17E50326, 0x25968F46, 0x2073EBD7, 0xF9FBF02A, 0xC56FFDAA, 0x354BA73C,
+0x407B6343, 0xFBE01482, 0xDB6B052F, 0xB91CFD5F, 0xC17FA064, 0xDCF318FC, 0xE1E971DB, 0xA8606A64,
+0x858378D8, 0x7E149A09, 0xB6EB7274, 0x70014F6C, 0xBCB2FCCB, 0xC5A33B7F, 0xE16BCF91, 0x0A35FA55,
+0x030FB33B, 0x4C023CDF, 0x58B24A5D, 0x6E399926, 0xD69A4E7E, 0x5B0FEC0B, 0x4BDAE774, 0xC0604817,
+0x1D2F0F2B, 0x2D5B4236, 0xE7238253, 0x579A0469, 0x70854919, 0x16EF5FC7, 0xA6004ADF, 0xD90F7B77,
+0xB19C3470, 0xD4AAE8B5, 0x83520CA1, 0x5B7D4AA5, 0x3AFAE319, 0xFCB9BA2E, 0x5C18108E, 0xEF1F7E63,
+0xD195A8CA, 0xF2CFA6FB, 0x53218058, 0xEBDC33E4, 0x0C6C7755, 0x7CB20E9E, 0x5DCF0E3D, 0x546C16A0,
+0x6AA6B423, 0x1E084C31, 0x0A0F9C88, 0x2252D9F4, 0xBDF1E501, 0xA64C3043, 0x0E54938A, 0x76E42863,
+0x2BDA6A02, 0xAA80E7B8, 0x9F775408, 0xF33CA09E, 0xF0D03CA2, 0x03845CD0, 0x48F6A7A6, 0xFB03873C,
+0xA1738CB6, 0xFE81B06C, 0x712A4E9F, 0xE0496310, 0x7BC50DA3, 0xE38D7F27, 0xD150A18C, 0xCEE802C7,
+0x40A27F6D, 0x579D7EDB, 0x4C4C9C7F, 0x519B6C2E, 0x5AB7D5EA, 0x9DA932F1, 0x4AF0B4E7, 0x588EFDA0,
+0xE0B2D2A6, 0x6B23E2DD, 0xD083B64D, 0xBF27F300, 0x2F35CD4D, 0x1387E2C5, 0x517520E3, 0x12126975,
+0x93631ABA, 0x1413FC08, 0xC5100CB8, 0x342496EE, 0xCDA9EC12, 0xE47DFA38, 0x2F8F73B4, 0x0322EBE1,
+0x498ED5D9, 0xFC46A83D, 0x37639318, 0x50DF2920, 0xE8BA0061, 0xB3664B84, 0x2CC2C67E, 0x0DF5398B,
+0x8BD59217, 0x2C7A3970, 0xFE602EA2, 0xD135D057, 0x116784E0, 0x5987B7AD, 0x7AC908CE, 0x76F8DDDE,
+0x05554226, 0x4A19B62E, 0xA49BC1AA, 0xDB7DCC1A, 0xC0A5D42B, 0xBA22609C, 0x4F9B7BDA, 0xB44F201D,
+0x17672024, 0x6C9927ED, 0x5FFC734F, 0x167EB748, 0x35B9CC48, 0x73537142, 0x2E4F6334, 0xB2E1493D,
+0xA9A505D5, 0x0C7A25D4, 0x7C6CA18A, 0x4854412D, 0xB3EDFC5D, 0xBAB51EA2, 0xCC4E3EF0, 0xD301DA35,
+0xD4D74894, 0x5309046B, 0x11D0D4D7, 0x8F09EF7F, 0xCED5BB58, 0xBD48CBC2, 0x6492371F, 0x60AEAE7D,
+0x06C8E76D, 0x3005753C, 0x4507427A, 0x94AF090E, 0xFEAA3407, 0xD5456133, 0xF6A082EF, 0x751C58B1,
+0x07C4C93B, 0x21AC212B, 0x1A4DA350, 0xB7FB9984, 0xFD4F3006, 0xEF2EA340, 0xEED5E57E, 0x28682D7D,
+0xF46C4CEE, 0xE2FBAA71, 0x8FE5C7F2, 0x62DD17FD, 0x6ED8D062, 0x152FFC0D, 0xE5EC7346, 0xBFCF3D61,
+0x82BB1D87, 0x508D6B06, 0x986726A3, 0x6643D1EB, 0x733F0DCD, 0x1F573197, 0x2710CB58, 0x87290C89,
+0x572C1697, 0x3B6F8216, 0x1A4CC74A, 0x2EB056C6, 0xD1FA5595, 0x2D6543E8, 0x2C5C2ED9, 0x6E7ABC47,
+0x2431A143, 0x52D18738, 0xBD52DF7E, 0xD68513A6, 0x5B02E253, 0xBF918782, 0xC340DB19, 0x0EFE00FE,
+0x97695793, 0x0224BDFD, 0x020F6E17, 0xEE2DF3B4, 0xD300AB23, 0xEF47375B, 0xCD46370D, 0x7D7B2306,
+0x550BBC45, 0x6D359CF8, 0x0F307394, 0x64A93C8C, 0x60B70CC7, 0x69C5C539, 0x31864D3A, 0x320C44C2,
+0x64C2D3C1, 0x74831223, 0x12E7731B, 0xE68BE9F6, 0x4CA6C693, 0xF9BA780B, 0xC2736BD3, 0x2AA9807D,
+0x1B757C54, 0x5B0F52C5, 0x99D0D0A2, 0xE221FD39, 0x74845B75, 0x5766C0C6, 0x622F4185, 0x913EE127,
+0x330A758A, 0xA9ED60BF, 0xF3519644, 0xB55F5935, 0xE37EE72E, 0x9F02F710, 0x89A3D956, 0x821DCCA6,
+0x96A3C60D, 0xB519C50D, 0xC3ED4285, 0xC5CECA39, 0x105D3D4E, 0x3C45ABFE, 0x27040EBA, 0xFC7222B5,
+0xD8E0E6CE, 0x398D6B77, 0x878EE56D, 0xE320A73C, 0x860A3245, 0x47280D0E, 0x0CB8D4A6, 0x26BD9D77,
+0x384EE16D, 0x278D1407, 0xBCE95D31, 0x79752718, 0x570AB1C1, 0xA11A90F8, 0xB719C079, 0x049815D3,
+0x6A9FBB63, 0xD20733E1, 0xEF2F175D, 0x1B9ACB46, 0x1D4B26B8, 0x273FA79D, 0x0D78FF91, 0xAEC6B611,
+0x93CF3367, 0xC213B868, 0x8C137FAA, 0x046043D6, 0x86E74403, 0x4B84103F, 0xA2676501, 0x92652CF7,
+0xCED3C0F9, 0x6035844B, 0xE404B3CE, 0xA96E85BB, 0xCB059AAE, 0xAE725491, 0xBAC40A63, 0x035E3ADA,
+0xE490F8BD, 0x3CE4C5FE, 0xD2A885CF, 0x121E1E81, 0xC14D1568, 0x0507A73F, 0x177EE0B5, 0xA593E2CB,
+0x259D2659, 0x9CDA5EE0, 0x07D73D58, 0xE7C0E4C5, 0x4393224D, 0x0B8C5E70, 0xF840C56B, 0x8E18DA9F,
+0x66EFC76D, 0x9FCB9462, 0xD0FB3E6C, 0xA8BCEEDF, 0x88FBA126, 0x694B2BA9, 0x8348FE06, 0x1508915B,
+0xEB41A320, 0xEE5F5597, 0x4C6BD9F3, 0xEEBCA0DE, 0x33477BB1, 0x15316327, 0x51BD78CB, 0x0B02D3A9,
+0x64FD9222, 0xF0C6B5EB, 0xE75299A5, 0xC56E62EE, 0x0B647CAE, 0xE6CB84CE, 0xF9F61EE5, 0x898E984C,
+0x6F556DBA, 0x8431E4ED, 0x9C889BA6, 0xFC7C9C89, 0x3FBDFACD, 0x70D893F1, 0x189C2560, 0xF75DFE98,
+0x7D866D71, 0x16BB3438, 0x729D1CD7, 0x8BCD79D9, 0x218FDBF2, 0xF7C71E81, 0x9DC2C197, 0x73CA992A,
+0xD9795BCE, 0x156A2B92, 0x360A226C, 0x3223F098, 0x69609B0C, 0xF626B222, 0x13A451FF, 0x05E2659B,
+0xEA646FA5, 0xA5FB337F, 0xE030A738, 0x63725FEF, 0x06C06D99, 0xBC48516E, 0xAFB9EE7D, 0x8F45EAAE,
+0x414FCF42, 0x3207A7FF, 0x5A0DB008, 0xE94746DD, 0x3C60A596, 0x2931817B, 0x70BE30A5, 0x8A47A79D,
+0x984D96B8, 0x6FE7EDAE, 0x65D37147, 0xCE816BBC, 0xADEC7988, 0x0D312D4D, 0x78BEB534, 0xEFC0F8C2,
+0xB1A7488F, 0xC1C51DFA, 0x33FE1817, 0x1A76E200, 0xE8619B08, 0x0245AC7B, 0x9C60AC24, 0x1AF5A612,
+0x032811C4, 0xD340E6ED, 0xFF754FD2, 0x634D2623, 0x08DF951F, 0x8863453B, 0xBC6E4193, 0xD7B14526,
+0xFD742732, 0xF8D10475, 0x9E9FE012, 0x44278C0C, 0x60C53678, 0x8DA7BAA2, 0xE2A2758F, 0x7D1FA07C,
+0x79700546, 0x1EE3198F, 0xC12A2BAD, 0x741F1603, 0xE672EE51, 0xA888327D, 0x2D2126DA, 0xD04B14F4,
+0xC1EB3ECB, 0x62413C66, 0x41B74729, 0xB8014C05, 0x09CAED8E, 0x07DE9FBC, 0x9F48AE52, 0x7DA8D3EE,
+0x4E6B3A11, 0x5098E38D, 0x018E2364, 0x1D50CAED, 0xCA682249, 0xFDBB0C6E, 0x7CD75789, 0x2E8322CF,
+0xCFD9C56E, 0x6D0B4C16, 0x19354DD1, 0x6E0F1A85, 0x35F133BC, 0x05F2B561, 0x47F6D291, 0x13E5E9C9,
+0xFF6ADA3D, 0xEA9166B6, 0xB68F6C71, 0xAE104F7F, 0xE2A5D135, 0x3A2A0099, 0x36F5EF7B, 0x0C0AD237,
+0x25E524DC, 0xC7872E12, 0xAE1BF3F5, 0xEBF6F6DA, 0xE954263E, 0x2C3ADD8C, 0xF6A0DA96, 0xC30414FB,
+0xF8E4B1C6, 0x684F1187, 0x40278008, 0x31F78F98, 0xA7D15FB6, 0x5F2E7CC3, 0x030BF6DF, 0xB2A094B4,
+0x8E0A4F50, 0x0165022B, 0x0F187D4D, 0x9F4FE97E, 0x654C819E, 0x18E6A2EA, 0x4F6CA6B6, 0x54E4D842,
+0xF04DC145, 0x8CA2F0E6, 0x3E2426ED, 0xB0589F92, 0x239B526E, 0x31A6D7C7, 0x09CCB6BA, 0xA8F977FF,
+0x75484338, 0x1DEBE3E1, 0x3EACDA64, 0x80B67739, 0xB6580270, 0x39952CC4, 0x74606259, 0xA6A56723,
+0x79FA1CD8, 0x67591369, 0x3B2ED4BA, 0xAF59BC57, 0xA8D40A66, 0xCB993850, 0xDE1EB780, 0xA1B34D00,
+0x93E5FCFD, 0xCD9AE425, 0x2204B495, 0xE8BA5845, 0x94CC73C1, 0x4F8E9A1A, 0xDE1115A8, 0x6A7038EB,
+0xE72065F9, 0x4C4009D4, 0x2F99BC98, 0x1C5B960A, 0xA48C790D, 0x74EB2DD8, 0xB98427BC, 0x94BD5974,
+0xC1F7F402, 0xE7EFD672, 0x361B4658, 0x1251F5BE, 0xA4CC593F, 0x015E859E, 0x62F0AFEB, 0xA150C8C4,
+0x8B15C471, 0x47B2B504, 0x71CCC85D, 0x7995B434, 0x8D0BAE03, 0x6181D247, 0x35EE395C, 0x0C0ECF92,
+0x8B5EF199, 0x0E22E6AA, 0x549035D2, 0xA681EAF7, 0xE40903AE, 0x002AA799, 0x54BEDFA1, 0x09F498A2,
+0x5EB615C5, 0x2066C13A, 0x2C005FC5, 0x42E706C8, 0x20774CD6, 0xE5650B49, 0x84250489, 0x14D8473E,
+0x076AED30, 0x94837103, 0xE9510D30, 0x6403B9C6, 0xD8538F5F, 0x072FE6E2, 0xB95B6B76, 0xA19610A6,
+0xE25446A0, 0x607FDABD, 0x525A423B, 0x58A0234A, 0xBCDA94EF, 0xF31FCEB2, 0xFC84EA99, 0x859D787B,
+0x1AE07BA2, 0x766DE2CC, 0x6743A695, 0x63F32EA3, 0x8C08AACD, 0xAAA497B0, 0xC1C650BC, 0x4649BC46,
+0x3392B679, 0x93605680, 0x102D3642, 0xFBFC8E3A, 0xFDB4A7E0, 0x43E0F8C0, 0xBF45A83C, 0xF76B63BD,
+0x9676C78D, 0xCE4CA113, 0x35DBBD2A, 0xF1621C7E, 0x71B394C0, 0x0EB22BFC, 0x3685C753, 0x5C30B7D4,
+0x6C25AF0A, 0xCE2AAD72, 0x73CAF8F0, 0xEB02C1C1, 0xF96FDCDD, 0x0B53B939, 0xC1D79173, 0xC3AE3BE0,
+0x24C6B984, 0x7B6825D9, 0x470AB642, 0xCFE9FAC1, 0xD87383F0, 0xC555A44D, 0x1107A74C, 0xA52CA957,
+0xE7A995DE, 0xF82215CE, 0x420147B4, 0x96BF80B3, 0x11ECDD55, 0xEC9B7176, 0xD85F60B8, 0xF6B51087,
+0x97FD0558, 0x7B6C73CC, 0x49155AF6, 0x187CE297, 0xEEE36578, 0x6EED508F, 0xDDAD7B78, 0x7C47343D,
+0x140312E3, 0x2C808455, 0x1974362C, 0xA003B72E, 0xEE92B4E5, 0xF204E25B, 0x8B7D5D2B, 0x9ECA2990,
+0x50460468, 0xA47685FA, 0x4C01A7A7, 0xEE00934F, 0x54443224, 0x2251CFA9, 0xCAA5D043, 0x7BFB7061,
+0x79CE2AA8, 0x23183806, 0x7751B3B2, 0xE4DCE189, 0xA513228F, 0x7DBB5CCC, 0x8000E8D0, 0x33498E74,
+0x414A930B, 0x3AC39630, 0x894C121C, 0x6F6E3991, 0x00BCCFDE, 0xE2B6A1D0, 0xF528388E, 0x476FEA55,
+0x826F145D, 0x3904E293, 0x6C792EFB, 0xD5DBD68E, 0xE828FF9A, 0x84740905, 0xEBCE3432, 0x57B0CDD8,
+0x6097D7BF, 0x6CD19A09, 0x7B2515D8, 0xBBA3CF2E, 0x8306B6AC, 0xC700891E, 0xA88B94AC, 0x80C281D1,
+0xEA022ED1, 0x51FA2BF4, 0x5CB96B6A, 0xF189743D, 0x268CEF51, 0x704CF361, 0xCA46AB3B, 0xF0602CF2,
+0xDD66A0B2, 0x54B8DC32, 0x24DBCC9F, 0xE377ECD4, 0xF02C9FAC, 0xF2D13335, 0x65D9F34E, 0x24AB5E96,
+0x3B9C5A3B, 0x277697D6, 0xAC2A67B0, 0x0D2D81D8, 0x2660F369, 0xDAB0C30C, 0x0DBDB225, 0x42F60A43,
+0x72FD0331, 0xA266AB0D, 0xA0F34B4D, 0x04AAAB56, 0xEC5759CD, 0x6CB651A8, 0x4F34A9ED, 0xE13A432B,
+0xB2825814, 0xC9DA2543, 0xB8808191, 0x18062961, 0xA68A9CC5, 0x3B5BA014, 0xE90F9BB9, 0x9A94A173,
+0x4FD2E119, 0x4E848F17, 0x136099EC, 0x9776FAFE, 0xAE944E9E, 0x8CFB2772, 0x75E8E495, 0xF7364E92,
+0xBD9DA97D, 0x24E36233, 0x0A4D19CE, 0x631B512D, 0xE72B674C, 0xF9F2AA0D, 0xF6937352, 0x3CD05E50,
+0x2B27C65D, 0x5242576A, 0xDCE5FC1F, 0x4C79CD12, 0x197BB218, 0xF69B4F5D, 0x7FB68837, 0x2ACD41D1,
+0x1BCCC6CE, 0x3869ED63, 0xB0DCDE45, 0xC894015D, 0x9D87E2C7, 0x3FDD3B38, 0xD41D1E1D, 0x88590CE4,
+0x2FE1C113, 0x99FED4EB, 0x1ECED753, 0xDEA03CF6, 0x8B35F86D, 0xE8B57ED7, 0xD60ED17F, 0x4A573CA4,
+0x64180CBE, 0x7A297917, 0x6A18DE32, 0xC1298D49, 0x2FAF6DB0, 0x9FAC958D, 0xEFBC2C5F, 0x2C90C08A,
+0x7B35FB20, 0xE35F0AC8, 0xE1F43436, 0x4BECB674, 0x3AA4A6BB, 0x699511D4, 0xC00F527D, 0xD53CECAC,
+0xB0FCC511, 0x3DC97A31, 0xD07322FE, 0x3C9CF2B2, 0x848B57F6, 0x67EEB3DE, 0x8B01C142, 0x231259BC,
+0xCD1C9B91, 0x4244679C, 0x91A7F8F3, 0x5A6B9A9C, 0x31CED625, 0x17329BC2, 0x1B5A1484, 0x65144EED,
+0xFCD02636, 0x950F754B, 0x24148D42, 0xF8459B66, 0x9A4F6608, 0x28933ABB, 0x240AA608, 0xB5C6FD5C,
+0x1B77DBB5, 0x767644A6, 0xEEB9736C, 0x14AB9D0B, 0xF3E9D0C5, 0x6ACC65BC, 0xDDAB560E, 0x44DBC9F8,
+0x1E042891, 0x11410561, 0xAD301FED, 0xBA1AAECD, 0x328B738E, 0xB8A4D702, 0xE6C06BFE, 0xCABFC047,
+0x7A705DBC, 0x839C9CA1, 0x972FE5A4, 0x40E715CA, 0xBAB211CF, 0xBA20D38D, 0x7B55E9B1, 0x2B3E1F60,
+0xFF73CBFF, 0xB52CCAA8, 0xC7F43CA8, 0x325B722D, 0xB4E00219, 0x7540C74E, 0x712BFA61, 0xC72FF52B,
+0xAED47249, 0xBE3AE39A, 0x3C6A8423, 0x4CB3F042, 0x845DEA7A, 0x48F10849, 0x5B34929C, 0x3579F28C,
+0x7155D0B8, 0x2F2D47A9, 0xC9452030, 0xFAEA5E6E, 0x4E5377E9, 0x05C3E359, 0x579B9833, 0x357F30DE,
+0x83333D4C, 0x562B331B, 0x291EAC3F, 0xF9324886, 0x909B63BD, 0xB5CFB1A5, 0x39C62C3C, 0x8B35F217,
+0x734ECB33, 0x32E36157, 0x003495A8, 0xEEA7226D, 0x0EAF4B07, 0x3A346E87, 0xB354867D, 0x3762682D,
+0x157BABBE, 0xCC2B3956, 0x27982456, 0x98540822, 0x9770A322, 0xC27B8CD3, 0xF85BDBB8, 0x1E7B933F,
+0xF711C385, 0x50A08DC3, 0x13E5B979, 0x30DA4030, 0xC546C9CD, 0xD697B668, 0xCC698D5A, 0xA4BAEBD6,
+0xF9B8A735, 0x05A891EE, 0x7D489ABF, 0xA0D06B01, 0x139FA6FF, 0x1CC05FFF, 0xF5710576, 0x36442081,
+0xA9118DFC, 0xD3EDD897, 0x43D88DC2, 0x5A5F7C1B, 0x246F69BB, 0xEB5285C9, 0x1C49BCDD, 0x63C2FE89,
+0x7AA9E1D3, 0xA8B18154, 0x7CFEE42B, 0x9F0D196E, 0x52F7721F, 0xA0B30A5D, 0xB93FCEEA, 0x82A4EF1D,
+0xC6BFD84C, 0x6D20C7D9, 0x426CB5B4, 0xB046083E, 0xC9CE9FF7, 0x68EFC18A, 0xF797FB2A, 0x1F1618DE,
+0x9A652127, 0xEED4C263, 0x392EA7F1, 0x34FF5674, 0x0946AE90, 0xF8C0F1C4, 0x5D156B19, 0x7B644EEE,
+0xC7EC8C0E, 0xDD6D64BA, 0x4A48F3E2, 0x35065AD3, 0xF7E96954, 0x9E9D7E1A, 0xDA3D04F7, 0x6D093E1B,
+0x21D88C62, 0xF1E4DC9B, 0x350FDB51, 0xBA88566A, 0x1C3E38E6, 0xF20A1B8D, 0x1C813B07, 0x028A2100,
+0xAE459CD6, 0x51CCAFEE, 0x91242FAC, 0x03F7C137, 0x51ED12CF, 0x285F437D, 0x7687EF54, 0xB5D7FACC,
+0xCD6C9DE5, 0xE9933CFA, 0x9D82164A, 0x7A465A9F, 0x642D9095, 0xBEEE1170, 0xA9F7E924, 0x0A17D964,
+0x98A1A9C3, 0xF7441167, 0x0C7329B9, 0xAA8DF026, 0xCFB559C9, 0x22DD9B98, 0xED91AFCC, 0x788A4CDD,
+0x6EADDAC6, 0x6A5E5158, 0x4787F4FD, 0xF31A0503, 0x2E2BB7B3, 0xD8551417, 0x7BC27FE4, 0x11985712,
+0xAC9D1DA7, 0xB26283D7, 0x782E5096, 0x22371E8D, 0x6990A694, 0x4DD605D5, 0x80EF76DC, 0xEB4D87B7,
+0xB930957A, 0x4BCA3023, 0x17F7C5E1, 0xF7F9FE64, 0x67DD7FC9, 0x5F747D95, 0xCEA979AB, 0x6C4478FA,
+0xE4F33B2B, 0xA1F72DB7, 0x6BED9D70, 0xA35F77D0, 0xB1A52D57, 0xC981B946, 0x5F332CF6, 0x1F858762,
+0x6F2EDA3F, 0x44B7054A, 0x33072297, 0x8EB14F2F, 0x446B4E21, 0xAAEE4E4F, 0xECD71265, 0x88A7BC00,
+0x5ED7E687, 0x46E5DC6B, 0x16C39F4B, 0xAD5170C6, 0x1E6FFDB1, 0x13C7E019, 0x9F423851, 0x8B8707F5,
+0x74A09794, 0x5DF4F203, 0xCB2D5116, 0x5CF61B23, 0xAC39A93F, 0xE35212C7, 0x85DEB440, 0xA22DE216,
+0xE6452009, 0x605F480C, 0xD56E09F9, 0x98086410, 0x1ECC4BF6, 0xB3D31414, 0xA92DCFA4, 0x34C36855,
+0x850056E1, 0x70B8AFC1, 0x242A7A4C, 0x9C651ECE, 0x59EECDCB, 0xDA071C2D, 0xD3E4553F, 0xB51465F8,
+0x8F1BCD30, 0x1839828C, 0x0F7F1D65, 0xF254D47F, 0xDA311ABA, 0x44C788C1, 0x907F9944, 0x007D6C52,
+0xB351A7A6, 0x0C9F0392, 0x89EAD9EC, 0x7911CC8A, 0x6D48C982, 0x3D2268D3, 0x6FDECA91, 0xE1F9B221,
+0x5088F4A5, 0x1AC4DB00, 0x068566BD, 0x5DC3631D, 0xCA8C2B07, 0x0A148535, 0xE4817FA8, 0xDF1F5F4F,
+0xFFD686A2, 0x19FCF369, 0x89DAD255, 0x556AB0C8, 0xC219AD1E, 0x2D4586E0, 0x6B5C61B1, 0x6895B9F5,
+0x1A367293, 0x27F7076D, 0x43399837, 0xC53D1447, 0xC279DEE2, 0x0D64C71C, 0x231E2F9D, 0x94A71688,
+0xB6413E72, 0xC2F284D3, 0xE7E69933, 0x75FBF0C6, 0x79652A17, 0xC14086DB, 0x8AB7A3D2, 0x4E0CD468,
+0x134ABBB3, 0x0D38BD47, 0x61CDF788, 0x2C2D9FEB, 0x8D027548, 0xF43D26AC, 0x329D0694, 0x5A8D5719,
+0x6EEA028D, 0xCAA74174, 0x679D4AAC, 0x41EB42E0, 0xD8E13D56, 0x8A30BC1F, 0x2887DF9F, 0x4362EA57,
+0x5D949254, 0xCBC43B4C, 0xE6B2AD46, 0xA0BD1679, 0x20E36936, 0xED4AF7AD, 0x4061FF56, 0x77A93D67,
+0x05C66111, 0x3908A0DC, 0xAB2420A3, 0x7D132988, 0x9B79DA4B, 0xF307FDC9, 0x3B1D7D8F, 0x787DABE9,
+0xB7DBF455, 0xFE8D7A9C, 0x233C5F77, 0x8481F10F, 0xD628A0B0, 0xD6EEAC12, 0xCA927C57, 0x69F861D0,
+0x0F8BE4A5, 0xE2C4D698, 0x5133CCE6, 0x4314F808, 0x73D19279, 0x681A3FE9, 0x6DCCF1FB, 0xE7A6368E,
+0x587DADC2, 0xA7A09669, 0x576B2E85, 0x526FC630, 0xAA6AE901, 0x9BBC9BDE, 0xC36B688C, 0x302A1E0C,
+0xEC1EE811, 0xCD51ED4B, 0x0729016A, 0x80B34A4C, 0xB04A6DB8, 0x067A4F27, 0x835C00FE, 0x85045AA0,
+0x54C1BF27, 0xF60293D2, 0x4DC337B2, 0xDE7396FA, 0x04305E70, 0x1C455069, 0x115AFB2B, 0x8017338E,
+0x64DA8CFC, 0xDE0271BD, 0xF417F48D, 0x24AE9716, 0x766D8BC4, 0x5B43A05D, 0x8938206F, 0x6E85C130,
+0xDB0D0D8A, 0x365F7BD4, 0x7C359B51, 0xB5975669, 0x841CDB23, 0x4C3757EB, 0x638621AE, 0xA5532ACE,
+0xB954972B, 0x0532C8C6, 0x1B79D0FC, 0x66B940D9, 0xA50B7DF8, 0xD7B92DD4, 0x41A80EDD, 0x078F8AF2,
+0xA82DB215, 0xA1D235D1, 0xCDCA8DDD, 0xB4B2253B, 0x42C6623F, 0x61303B1A, 0xCCCADDDD, 0xDE5F8415,
+0x5B4427F6, 0xA5269FBD, 0xFB8ADC1C, 0xCCFFC4CD, 0x7C938EAA, 0x2163232B, 0x10671B0C, 0xC9EB3872,
+0x0C50E2F0, 0x3EDF5195, 0xCB39D871, 0x28BF8B8D, 0x4CCDCE44, 0x9292D579, 0x707B19BC, 0xF555F6E0,
+0x30B9AD20, 0x6A0A135C, 0x576F4AC5, 0x8B62A418, 0xBE20D59C, 0xBC3E5D78, 0xAE3F49AE, 0x013BE550,
+0xC0B362B3, 0x4148B854, 0xBAC1A1FB, 0x761D12A2, 0xA5237792, 0x2FF03A6A, 0xA254A79B, 0xB95F63BA,
+0x01882576, 0xCEB589E4, 0x7AFD4546, 0x832E6B2F, 0xF6E1D6D0, 0x20A03765, 0x8FA56B76, 0x3C91E78F,
+0x19787F61, 0x2A87E1A5, 0x89B29F24, 0xC8A99071, 0x7D4A7CD1, 0xA8BD9B44, 0x9622DC5B, 0xBF198437,
+0x064C8D44, 0xF81E7A7E, 0x3265998C, 0x870F4956, 0x913D85D5, 0x6798FD26, 0xB28C6113, 0x4C2CFFC4,
+0x50BBBE16, 0x2EAEC9EA, 0xA1B9B384, 0xA73B2C5E, 0x207514CC, 0xEE7FB218, 0x5B0C497C, 0x78A975E2,
+0x417AEBEE, 0x3111A70D, 0x670B765C, 0xE5ECAF1B, 0x74EFA997, 0x27F1AB44, 0x39E8BA2C, 0xADACAB1F,
+0x8ED57648, 0x5111776B, 0x4E18C180, 0x3D54E82B, 0xA8A39488, 0x613B9E76, 0x177E71E5, 0x68A610D1,
+0x9D637FAC, 0x05F68943, 0xDF7C6CC3, 0xD014BB03, 0xF82E4500, 0x9D7C0529, 0x475FDCE3, 0x32CCCA54,
+0x1B2511CF, 0x7CDB47FE, 0xD05F3D82, 0x5EB39BA5, 0xE0717275, 0x00ED3216, 0x313A0A55, 0x7649D54B,
+0x4B8CE911, 0x4BDFC6FC, 0x30764B82, 0xA7507198, 0xBB748004, 0xA3FF29E6, 0x19E35357, 0x9240B38E,
+0x0D60A802, 0xC7F111B0, 0xADD2EA69, 0x80C3B771, 0xB336A612, 0xA818BDF0, 0xE216BF13, 0x216334CB,
+0xDA311045, 0x12F545DD, 0x3CA8F7E3, 0xC37F4EA4, 0xF16E3B36, 0x789F780A, 0xE4CAF585, 0x44B6F9B2,
+0xC95EB0D1, 0x971723D6, 0xB1338DA0, 0x1A5A5F15, 0x8DD07B78, 0x21B0F6F4, 0x58CEDE08, 0xB6EEDA2E,
+0x6D679A2C, 0x29C1B312, 0x16B9E4E0, 0xA5C99162, 0xA4DFBF52, 0x68568914, 0x5BD0209D, 0x76AEAD36,
+0x9E01006F, 0x955B2EC2, 0xAAC8B641, 0x36641DAF, 0x7FD50A95, 0x1C24ADDB, 0xF43FE7AA, 0xE17DC86D,
+0x8630F6E9, 0x31020901, 0x9F46CF57, 0xFC05383B, 0x6BB3E045, 0x5B64E7CA, 0x68858A15, 0x79DD3AC3,
+0x771837B2, 0xBB4CB6BD, 0xEBA018D6, 0x680D3CC4, 0x1A547316, 0x5672E9D8, 0xEE4F8249, 0xC46FF58C,
+0x26157485, 0x2F0B8838, 0x42C520F3, 0x438B21FA, 0xECB96F31, 0x5A062FB0, 0xB5398E59, 0x2E790B1E,
+0x2C267973, 0x1BCEC5FF, 0x133653FC, 0x18458B06, 0x378E3D47, 0x94736FB9, 0x9607D81F, 0x014F53D2,
+0xD6E58013, 0x6D2E22F3, 0xC9E7383B, 0xBEDEC5D8, 0x46E53217, 0x84D1F864, 0x2973BA64, 0xE557078A,
+0xB04E9F27, 0x498E6758, 0x1240DEDF, 0x94C12F02, 0xCC1ABE57, 0xF437453A, 0x90B4F724, 0x716F1ECA,
+0x936EDDE4, 0x822CC8A7, 0x1575C6C1, 0x16683F4C, 0x58B9ECBA, 0xB6E35426, 0xCDCDBEBF, 0xEE88B639,
+0x7F5358A4, 0x245F3628, 0x8CF06878, 0x4CFE15A7, 0x6DE65997, 0x49397B4C, 0xA7D7D848, 0x67D26322,
+0x379E5555, 0x5172E98A, 0x0E72D15C, 0x48BC5997, 0x14C2D1EC, 0x62352055, 0xF052DF91, 0x19E1AD8D,
+0x833877ED, 0x8E78F2F8, 0x60C38B73, 0x7794F403, 0xF73E9FCD, 0x3F526EA6, 0x2283E5F5, 0x2295CB82,
+0x6073DD1E, 0x9589A8B6, 0xB1B085D5, 0xE8EA07DE, 0x5231F6D6, 0xD24C2CA2, 0x6EDD1DCA, 0x4793EF2D,
+0x2339C57A, 0xCE7CD77E, 0xCD5AE93B, 0x2972C192, 0x77D71690, 0x5724F722, 0x8FC609C8, 0xDB8AFAFC,
+0xFFA0827B, 0xAACA3CB6, 0x03D5F10A, 0xE5655625, 0xE0E8C0A0, 0xB3FE8AC8, 0x7A2F8723, 0x0627F583,
+0xC5EC6097, 0x19B87DDA, 0xF15238FF, 0x32C9EA48, 0xC5E4E5D4, 0xCAEC2DB7, 0x1821DE2D, 0x7A0FD404,
+0x0274BAF9, 0x6095FADB, 0xAC08BD48, 0x7A1D0F51, 0xD3164C76, 0x2765CC87, 0x1764312A, 0x1EFCC2A4,
+0x327D1B96, 0x0B3B6D9C, 0xF0C88EA3, 0x3F6DF531, 0xBF4C408F, 0x0EAAC364, 0xAE4420E5, 0xA808EA27,
+0x4FA41203, 0x51240C97, 0x3DA44528, 0x276BA419, 0x5A6D9A04, 0xC6655011, 0x3E4C6CEB, 0x16E80DA8,
+0xE3C46B96, 0x6C7B8D20, 0xBDC15F09, 0xAAC8E87A, 0x0881B2DF, 0x44686FF7, 0xC194C0D5, 0xBCC48CD7,
+0x952EB66A, 0x5F449B2F, 0x3DC80E65, 0x4EF4B1D6, 0x4735A26B, 0x146081C9, 0x18BEE1B8, 0xB4E59023,
+0x7AE01122, 0xEF1C6F20, 0xD5081208, 0xBD2B6875, 0xC1C95387, 0x11E48BD7, 0xCBB59435, 0xBA72EC66,
+0x3DDCA5AE, 0x95A27B95, 0x44AEBCCF, 0x27FC8818, 0x41BCD0B1, 0x4225079F, 0x0D235FC1, 0x790DCCB5,
+0x5C8D6441, 0x73BFA917, 0x0D9E9B41, 0xCC28BE3F, 0x887940F1, 0x1F962CD9, 0x081F3C03, 0x88A685FF,
+0x842701CF, 0x144AA26C, 0xE546A61E, 0xD668B640, 0x997C9EED, 0x211B4463, 0xD73AE5D8, 0x9F96D378,
+0xA5B7DA6F, 0x1F19A87B, 0xC30A714F, 0xA8AE3046, 0x2140CC1E, 0x9D941D1D, 0x5393B460, 0xCB353405,
+0x8DED99C3, 0xBB7EB056, 0x4C8CB1EB, 0x4F419098, 0x75CF7D45, 0x60A56A6E, 0x4F6CFBBC, 0x4F4EF791,
+0x0DC42B4F, 0x7FFCF071, 0x061BBA90, 0xB746609B, 0x444AEA7E, 0xCB0FE886, 0x56FF4060, 0xF7D40D66,
+0x0B9A4882, 0x7AF877AB, 0x8AFF0B88, 0xF918650A, 0x78EED88B, 0xE38D4100, 0x377C1DD7, 0x3F6FE51E,
+0xBFFA3752, 0x18241B3C, 0x4D767235, 0xE25A878E, 0x5AA1ECFD, 0xB7A39805, 0x28CB8398, 0xF81795B6,
+0xA181CD1E, 0xA624A8E1, 0x38630F87, 0x5E1C53CE, 0xA3B871F1, 0xB5B3683D, 0x1CB098DC, 0x732FD13D,
+0xE7F2CE65, 0x5AD728AE, 0x5B717C86, 0x824C1EE2, 0xA82B42AE, 0xE0752370, 0xE6298D55, 0x412BFD70,
+0x174A1E12, 0x4B04DEB5, 0x5E51B93B, 0x3AF43C6E, 0xDBFD7225, 0xE9B045A7, 0xE851322D, 0xA2D348BD,
+0x8BFB32E6, 0x0DB35D2E, 0x39CC3122, 0x20FBDF1D, 0x0796F0AF, 0xC27D678C, 0x4C0C63B0, 0x3A80541E,
+0x3A81B8DF, 0xFFBF6DE2, 0xC00BAFCE, 0x0CC6B2B1, 0x0622E953, 0x9C2752B6, 0x2544F557, 0x18405771,
+0xCBC8F69B, 0xB0EA5666, 0xFE685D49, 0x0010D3E5, 0x6E133F57, 0x14074F43, 0x0D66F958, 0x9B7D90F7,
+0x5C0745E8, 0xC80874B8, 0x0B3C75AC, 0x0C81AB93, 0xC88EB4FE, 0x1F2FE10F, 0xE4EC853E, 0x3CB80600,
+0xA761516B, 0xBD2B0C26, 0x39EBFA01, 0x85687945, 0xADB42E1B, 0xF0A86E26, 0x7F8E2D4F, 0x9946983D,
+0xEA0D5533, 0x72ECB175, 0xEC64A9D6, 0x11F34AB2, 0x1C64A3DC, 0x8CA38565, 0x37D57FD7, 0xF78B86F4,
+0xD5B5DDA9, 0x4133662C, 0x67DD90C6, 0xDB82722D, 0xE45879C7, 0xEB37369F, 0xACFD7A11, 0xCF1649CF,
+0xD966D60B, 0x53E6F62F, 0xAA17BF74, 0xA13056D0, 0xFE51AA17, 0xBC22CBAE, 0x7EFF200C, 0x7CFFB3DA,
+0xAFC5199C, 0x857BFDF4, 0xB832B855, 0x08F7569F, 0x586B1F67, 0xD3894453, 0xAA355744, 0xF004621F,
+0xF4C2E5D3, 0xAD8D97D1, 0x1EEA9A8B, 0xA8751FF6, 0xE2F42F63, 0x10AFA1FA, 0x1DB79AA4, 0x270C0C4C,
+0xFAAE9363, 0x1FAF6EAE, 0xCB857DD7, 0xF0BEC87D, 0x9309B4BE, 0x90FD6EA2, 0x4B6391F2, 0xCC0DB5E6,
+0x599AD6E0, 0x6FB5E275, 0x0293B2DC, 0xF9CAAB19, 0x452B8B7A, 0xFA1636B9, 0x12000AE6, 0xAB22E51C,
+0x569A0D7C, 0x9FE5F19A, 0xC4D6920D, 0xCBCBA7B3, 0x06768849, 0xC0DBF1FA, 0xE346270E, 0x2DF44AAC,
+0x7F80E46A, 0xAD32FB18, 0xE3B21A75, 0xF936D280, 0xFCE901B5, 0x3BA661E1, 0x5F1EDB39, 0xA4088BAD,
+0xA08DF5D2, 0x4094B0F2, 0x387E7EB4, 0x0994D536, 0x3DBDE857, 0x1B972C99, 0x040BED60, 0xD0704ABE,
+0x9CA01152, 0x8966D7A0, 0xBA28C340, 0x9D36E039, 0x79A3EFF4, 0xADBA0E00, 0xEC1BC15C, 0x0567928D,
+0xED4C45AC, 0x3FD63778, 0x6A764161, 0xBD4703B4, 0x7FF9C783, 0xB920643C, 0xB45B34B6, 0xC38190EC,
+0xB7AB7E5A, 0x8C2A88BD, 0x8E6E38DA, 0x9B9C8CC5, 0x0C3A3F2F, 0xE2ED3FE4, 0x1667761F, 0xC30DE4F0,
+0xDFB1EB30, 0x708798C0, 0x0D1F2ED8, 0x134B0279, 0x50D48C34, 0xD826BC3C, 0x7CE70224, 0x5F79DBD3,
+0x8BF3014A, 0x61399E4A, 0xFD8BB0F8, 0xDA5C0ED3, 0xF865387A, 0x968011BD, 0x19CE6584, 0xF7817AF9,
+0x72243B6B, 0x5DD661A2, 0x408A4601, 0xB888F194, 0x8A76421F, 0xCCF8CBCF, 0xCDCC3DBC, 0x8351C8E7,
+0xAC50D1E6, 0x5ECA547F, 0x52B50795, 0x1742D1DA, 0xDE0A5D65, 0xEA472875, 0x992B3603, 0x423BDCAA,
+0x3B4AF7FA, 0xBD6676A6, 0x1EE8DA35, 0x5D0DB86E, 0xD1601B46, 0x7A9D1D76, 0x24A7A6D8, 0xDC497EAA,
+0xD236E6EF, 0x10135A51, 0x3D7E593A, 0x53410F4D, 0x61D1BBE1, 0x4BE826E5, 0x85708B0E, 0x5C3F830F,
+0xBE4FE3BF, 0x8AA59FBF, 0xCF2968D0, 0x36990DC7, 0x8AEDD04F, 0xDC99B33E, 0xA89A1B14, 0xBD430779,
+0x112200E1, 0xE4FFCA36, 0x4A52ACCB, 0x6E3A3BDB, 0xA1403A23, 0xC7D2847D, 0x797352E6, 0xA01C3F84,
+0x7E71C33C, 0x0EB570D7, 0xA32F833F, 0x4638AA8E, 0x10F5AC71, 0x5579D408, 0xB16B7DD0, 0xDDBD5C1D,
+0x7D539F1C, 0x8C698F60, 0x900061DA, 0x5A43D484, 0x1DB25CD5, 0x62502A33, 0x1927BA1B, 0x293E8753,
+0xB7999D7A, 0x5AB59C8F, 0xA630C32C, 0x87220671, 0x87ED868F, 0xBF5FE56E, 0x194021F0, 0x432AB7D6,
+0x94D263B6, 0x104FAE57, 0x9C0B39EE, 0x90D8B0C4, 0x7DB1CD4A, 0x5513DB01, 0xB7786D57, 0x73C8C8F0,
+0x90739A0F, 0xA6A7CE3A, 0x1FF481D7, 0x0414692E, 0x58CDD654, 0xE7217961, 0x09BD3E6A, 0xE86D750C,
+0xA92FEFE0, 0x794D2703, 0x5D71C3B0, 0x6CA37372, 0x172D10EC, 0x853C8FE0, 0x62DB0EED, 0x63675C0D,
+0xCC48B8E9, 0x89069A40, 0x2BC49672, 0x3B3E0B9E, 0x306D9CE8, 0x51715F36, 0xB72BD373, 0x082D0531,
+0xACFD7320, 0xF3ED1FDD, 0xD31A6AA7, 0xE1BE0884, 0xE0733F9B, 0x986739D6, 0xD92D2A09, 0xC67CC3E3,
+0xE15760FA, 0x897BFFD7, 0xC8FE8FED, 0xF8147480, 0xEC93DF29, 0x8BA6A5A1, 0x9C81E110, 0x3806168C,
+0xF718AB72, 0xCD12942B, 0x7F18E4B1, 0x2AACD76B, 0xC41C8017, 0x03D0EC11, 0xD1CD913E, 0x0D439705,
+0x3B421A08, 0x5088433F, 0x21531E8A, 0x4ED5BBE4, 0xD8C961F7, 0x96271EDB, 0x2D9B537E, 0x3D4E243C,
+0xCEFC450B, 0x05F97683, 0xAB8B8038, 0xDBF346A8, 0x7ED39111, 0xE4893F0A, 0x1C631C5F, 0x78A4417C,
+0x610F3DC8, 0x438C6E4E, 0x40904212, 0xB0935EBE, 0x369A6EEF, 0xBB01BC96, 0x823C2856, 0xEE5C8D84,
+0x73221981, 0x452D15BA, 0x6938D927, 0x9BF7DBF8, 0xFFA467A4, 0x5BC6C1ED, 0xFD546816, 0x252320FE,
+0xCA37A7B7, 0x22ACB393, 0x7438B9D9, 0xBC498359, 0x410D7AE9, 0x515022CD, 0x684B759B, 0x11266A73,
+0xA1D9A353, 0x37C88B01, 0x433ABC26, 0xD5E5D424, 0x4D165EB2, 0x8DBDB431, 0x6C27E12E, 0xB6B2EF38,
+0xB4F818C9, 0x60BBE60D, 0x78167100, 0x5283E4DF, 0xAE40AB4B, 0x01E76AF7, 0x5C889FBC, 0x8C85120E,
+0x6EE569EC, 0xDC6E3B34, 0xCE222684, 0x98A92947, 0x8F8BBA71, 0xAD95DE4B, 0x2E310CEF, 0x5D4994BD,
+0x9F2BC9A0, 0x56CEDA44, 0xFB9016E5, 0xE3562D0B, 0x6B956314, 0xE85A7C1B, 0x0F57BFD5, 0x1D6B24B7,
+0x7D4C2E6F, 0x2E12E58F, 0x7B294930, 0xFA531B58, 0xF2569702, 0x5F2C9B2A, 0x6E25E7F7, 0xB272EA05,
+0x0664168F, 0x67850BD1, 0xB4A37ECD, 0xCDE246C3, 0x56EFDE32, 0xC14ED363, 0x210E3B54, 0x42CE2FFD,
+0xC4D2DA0B, 0x42A8514B, 0xC6B9C98C, 0x393E6320, 0xD6FC1157, 0xABF2B731, 0x8A7E0A65, 0xE45BA9F4,
+0x939B27CD, 0xF6F1C067, 0xF07BD9AE, 0x75833DBC, 0xD3C5A2B9, 0x4BF86D17, 0xB114694F, 0xBFC11099,
+0x941540E6, 0x467B4B9A, 0xF2691002, 0x63E5120B, 0x07971BF8, 0xD0BFC719, 0x9692FBD2, 0x2A92AA18,
+0x57E84560, 0xB83576EA, 0xF406B56F, 0x5F898E2A, 0x660675BD, 0x42175D91, 0x35EAD6DC, 0x9E895B10,
+0xC06B0C27, 0x6BF4EE3A, 0x2480D6E3, 0x8FA52C96, 0x33B27CEF, 0xF23B92B9, 0xA228396E, 0x2340D260,
+0x0D65E741, 0xBC9A5249, 0xBC805A1C, 0xCECD433F, 0x0507FAE3, 0x194B21E6, 0xF6C52929, 0x7243ECDC,
+0x6BB0E572, 0x616AF8C6, 0xA82EF0F3, 0x5A331FD0, 0xE818A5B9, 0xE807B474, 0x691CF8E1, 0x0B9BF172,
+0xADBB8AA0, 0xC683E0FE, 0xD08AA029, 0xA4C93DB0, 0x5B7E212B, 0xEC636465, 0x023402F2, 0xC5A75B72,
+0xCCB8F71F, 0x5EC3526A, 0x73DE1C6F, 0x406CE7C6, 0x8E4CAE35, 0x693E9435, 0x54DEFC85, 0x280A503D,
+0x4AC130F7, 0x634EC85C, 0x325D591B, 0x972A239B, 0x0863510D, 0x0F645C58, 0xC46ED3FD, 0x25542CF8,
+0xB0720428, 0x0679E9B1, 0x7EFFEB1E, 0x2FB58D73, 0xA099BBF6, 0xB425BC96, 0x183959A1, 0x513CE23A,
+0xCB6925F4, 0x60C0D55E, 0x8FEABA12, 0x49B633DD, 0xBAAA8A85, 0x5565A4E4, 0xBB01BC16, 0x1D277588,
+0x8965BA43, 0xBCDA8EDE, 0x1061F4C6, 0xC4EC2C04, 0x002FDC77, 0x8F9BF3CC, 0xCE01F430, 0x3F009E42,
+0x666E92A6, 0xC7949414, 0xFCF87011, 0x656F1E8A, 0x739EBEFD, 0x0146AEE0, 0x4310191B, 0x91354912,
+0xC844082E, 0x1C066719, 0x760BE80B, 0x4941C1BD, 0x7456AC6D, 0xD6B18AA2, 0x6C638DA3, 0xE1FF1576,
+0x318D6F57, 0x4A56232D, 0x721FFAF1, 0xABF62BDD, 0x989FD578, 0xACCD0B1A, 0x5288CABF, 0x5DA37833,
+0xD8D51886, 0xBD3647C1, 0x17AEA717, 0xE899423C, 0xAFF5FBD3, 0x6A39D27B, 0x03C638FF, 0xB121DDDD,
+0xDF8D0F55, 0x3463E23F, 0x15ED5CA1, 0x09DC7667, 0x42741205, 0x7263D75D, 0xC76F84DA, 0x6690E64D,
+0xBE012976, 0x49B7F3FF, 0x797DDD34, 0x2C5EA435, 0x871D89A6, 0x360A631F, 0xDE5F43B4, 0x8B351E3D,
+0x74A98F9A, 0xA0B2CA45, 0x4E71AC7E, 0xBDB52E46, 0x485082AD, 0x342AF83D, 0xDFC9BDCD, 0xB22E833B,
+0x71418D5D, 0x629FEAA5, 0xA345F53E, 0x5C988BDF, 0xFBDDCCD3, 0xD258BB57, 0xA334225B, 0xDE8A8242,
+0x4F765EFF, 0x3BCBC9BC, 0x1A0B2EDE, 0x1FC58B2A, 0x7C6EB47C, 0xDAA5330B, 0x487F2E96, 0x1ED99B42,
+0x150F9AC8, 0x60A31979, 0x697BF962, 0x9EB0447D, 0x60F5DD9B, 0xB10F9619, 0x36B744EC, 0x5ACAF594,
+0xA8B85EC8, 0x315509E8, 0xFF9CC62A, 0xBD7CB589, 0xFEF500CB, 0xE1AD063A, 0x8170DFEE, 0x1FCDB66D,
+0x591F050C, 0x16DD9A36, 0x64AADC16, 0x3E99E2EE, 0xD4CB4008, 0x9710C673, 0x4E02A6EF, 0xD41584FC,
+0xB3CC6B14, 0x263D6FA7, 0x633E5181, 0x89730D1D, 0x94FD5744, 0xF411B76B, 0x6DDA8C0F, 0xBD1D04DF,
+0xD3C85612, 0xFC868BCD, 0xB710121F, 0xFA75A685, 0x5491B0CF, 0xF971E96B, 0x3B21B894, 0x4E8272E7,
+0x0CA25A2E, 0xDCB49000, 0xF2DC9EB1, 0xA47EF2D0, 0x14E1BC34, 0x3D963E79, 0x38841B77, 0x25B51EBE,
+0x966EE47E, 0x0084B701, 0x10D61A7E, 0x51C04A06, 0x3A56677F, 0xDC0FE5AA, 0xE40DF065, 0xA4636466,
+0x5A40DF40, 0xED7A1847, 0x5086899B, 0xC6B9770A, 0x9229E101, 0x91670DF6, 0x289CADD8, 0xA68F55A2,
+0x0466B959, 0x10DD337F, 0x5E1A07F2, 0x9521565C, 0xB51660CA, 0xD965B5F7, 0x5A6DB72F, 0x8B2A974B,
+0x5D7C5A77, 0xCFB70F5E, 0xA9C03C94, 0x77A82906, 0xE2A38B7C, 0xCF9F64F3, 0x62DBC030, 0x80FCFD63,
+0x88EBB7A8, 0xFA1353A6, 0x1870C508, 0xE8A472DA, 0x9F3A2A76, 0xCAC7612E, 0x763CA0A4, 0x593B2F84,
+0xCFE7A234, 0xEB5C2274, 0x08C1BE26, 0xA1FDEE5A, 0xBA3C5BAF, 0xAE0E888D, 0xEB6668A2, 0xAE7EAFCB,
+0xAB0F6C54, 0xD67CBFB7, 0xBEF60121, 0xAB392A32, 0x01DDE68E, 0x25578732, 0xF4199539, 0x34034FDB,
+0x29754BC5, 0x50E16B49, 0xAB4D190A, 0xC5104DDE, 0xF79C89EB, 0x0522E4A4, 0xC50CE475, 0xFD544402,
+0x57F61C87, 0x322E307D, 0x39A915C7, 0x9DC2D9EC, 0xFBF3B86E, 0xA9A8192C, 0x97DA16D3, 0xB545C8BA,
+0xC0ECC08D, 0x7F5DBA51, 0x0A89EFDB, 0x9CE4279F, 0xC436637B, 0x0D5D2A39, 0xAC47C482, 0x84F47211,
+0x41EF9DD5, 0xFD22F322, 0xEFF64DD1, 0x4DA3219E, 0x58F38C5F, 0x54884DC4, 0x5D37EB3A, 0x8E8FBA6E,
+0x9B19CCC5, 0x430811EB, 0x52699A9F, 0x432F52A1, 0xDF547F2E, 0x8AA3A699, 0xD75B4998, 0x608F4F18,
+0xFD3E82A3, 0x8F6B8537, 0x209F2756, 0x4A9B5F47, 0xE9CED0DE, 0x3A051CDD, 0xD81CBFC0, 0x05B62B5A,
+0xACF6D81F, 0x86B9F234, 0xC6E68F35, 0x142DE5C7, 0xD657D43A, 0x35A28D80, 0x479B1D3A, 0xE28C0DF8,
+0x27A4CE9A, 0xB4ED83AD, 0xA08CD2AD, 0x740D53D5, 0xC5DF8C22, 0xDD409E5B, 0x52664A00, 0x9F2B4939,
+0x463EAAB2, 0x8C377516, 0xC3918CC4, 0x92D1D7B1, 0x6D0FF7EB, 0x5E6F35E9, 0x5D77FB8B, 0x4C6C1D55,
+0x4585A3C2, 0xD33823CF, 0x833EE5B0, 0xE1258E44, 0x95F16184, 0xB8F2EE99, 0x66E9AB03, 0xA1632668,
+0xF252F830, 0x42D42939, 0x9FF7879B, 0xB53D74A8, 0x8162E510, 0x7F5CF5C1, 0xF9C80EB4, 0x2397492F,
+0x773DF4A4, 0x7D36B55A, 0x1D598ABC, 0x8E9D8B4F, 0x5E3F971D, 0x99F84599, 0xCFDB9542, 0xA7EF2353,
+0x8C2B2D7D, 0xD22F8376, 0x5149EA03, 0x0C3285A6, 0xBBF89EEB, 0xA2026AFC, 0xCA366642, 0xDEFEB108,
+0xCC7E5D32, 0x07585EDE, 0x57BD88F6, 0x3535D18D, 0x2796A87F, 0x835AE13F, 0x29EC49B5, 0x648FE072,
+0x65B3A356, 0xCF8D2EFA, 0x4E4E4A4E, 0x8E17A2DE, 0xC0E4471F, 0xC1CD9AE4, 0x683D6972, 0xE51DAEE6,
+0xCF69BDCA, 0x93483C89, 0x2D85EB27, 0x29647590, 0x582A90B4, 0xDA538593, 0x0AF0293D, 0xD2CF2C89,
+0x866C3856, 0xC97DE2F7, 0xF0476A55, 0xA9084655, 0x04A74CE2, 0x5BFF2151, 0xDF51E466, 0x340A26E2,
+0x2DA91E23, 0x1204CE8C, 0x5FF4CBE4, 0x2F3B694F, 0xEF73DEB2, 0x4F78CCD4, 0x13B94AD6, 0x6765AAE3,
+0xE4238E12, 0x04F1F2F5, 0x22B4C9D4, 0xC2552440, 0xD549C2D8, 0xB63AFA5F, 0x4F851F69, 0x690F1A3B,
+0x6EBCD972, 0xC843CD81, 0xCF726F91, 0xB4E5BDFB, 0x58DEBC1C, 0xB32D95BD, 0x63A4FF48, 0x74EAB228,
+0xFC313FC9, 0x00F10399, 0xB8E76B9D, 0xA702B16E, 0xEEE0B695, 0xFB611538, 0xD4882BE6, 0x10BA2D9B,
+0xBB33EBDA, 0x966922D1, 0x3DB81B3F, 0x24E371E8, 0xCFEA288D, 0xEC425070, 0x86A56BF1, 0xFEEF2599,
+0x8E745D1B, 0xBCB55D3B, 0x71B9BEF1, 0xC128B8C8, 0xB2AC1103, 0x3E3FD8A0, 0x66628486, 0xD49C7B4B,
+0x27DA5FF8, 0x093AD5A1, 0xDBF292A0, 0xBF1F2ECD, 0x9065CD5D, 0xF111CF45, 0x0B5A3378, 0x98C111B8,
+0x055EBA4F, 0x1008ABFF, 0xA1F07BDF, 0xA3C82E5A, 0xEB35993C, 0x319512D3, 0x2EE26880, 0x0855DA1F,
+0xC30F72DC, 0xC4A4DA0C, 0x96C68A55, 0xEE4812D9, 0x217560D7, 0xF83A508C, 0x2167D9A3, 0xE56F4BEF,
+0x195003B9, 0xEC2919F5, 0x84796172, 0x8F8A73D2, 0x31DB7704, 0x1FA34D60, 0x8612BC56, 0xF89B61B4,
+0x0678BD2C, 0x715F611D, 0x539F3643, 0x3219DCB8, 0x8656B8DC, 0xE64242B7, 0xEA23CB66, 0xC83A3A49,
+0x958DFD1B, 0x888DB2DC, 0x20F09289, 0x637BD030, 0xACAADF2B, 0xC718C6C6, 0xB3AAAF0B, 0x614B814C,
+0x52D0C973, 0x80C8D5D9, 0x7E6D01CC, 0x90236801, 0x515242B8, 0x9F913BD4, 0xF077017A, 0xD5D10C3A,
+0xA188DB66, 0xEFB3D074, 0x64604CA5, 0xAB6B2B8E, 0xDA6B6BC0, 0x433ACE2B, 0x7F484BFB, 0xF6527E35,
+0x8ADF71CE, 0xBB0A0832, 0x5F6E0DB3, 0xDBD5D0D0, 0x3F5A5A2B, 0x7603B388, 0x370AC581, 0x65AAC2EC,
+0x60DFE345, 0xB6E03BF6, 0x3EFBFBCE, 0x2468E224, 0x4D56BFB8, 0x3135DCFF, 0xAB253423, 0x4203311E,
+0xAAE03C7E, 0x0D4CD467, 0x191DC2EE, 0x1F883851, 0x90C7A6FC, 0xE39A1B95, 0xF63C2CE9, 0xCFDB7783,
+0xC0085C59, 0x90C90D26, 0x39845D0D, 0xF7DFC948, 0x87095B03, 0xA009D876, 0xB4E80F99, 0x3C16AF1F,
+0x8D2A19A3, 0x6BBCC4E5, 0xBEE4D9A0, 0x7ACC7827, 0x5142BAF7, 0xAF23D313, 0xEE4FF65E, 0x2D463E23,
+0xE266502C, 0xA544BE7A, 0x42FE2FE6, 0x2B957860, 0x20332B6B, 0xE2D9CB3D, 0x7330D49F, 0x170F4D79,
+0xA859AA54, 0xFB2276B1, 0x0EC07E62, 0x58B9BED2, 0xFB347A98, 0xEB25876B, 0x5E37528B, 0x9F2ECAA1,
+0xFA03B668, 0x30A0964F, 0x304AF3A8, 0x022DD97E, 0xFDEBA9D7, 0x051A966E, 0x8A7BD86F, 0xF3DB401D,
+0x9F77BC7F, 0x77AFDCD6, 0xA7A44568, 0xA1EB8FE8, 0x86191E06, 0xEDAD91C9, 0x6EFF7C12, 0x2A5EA5D6,
+0x872B8CE9, 0x23E1DF2E, 0xBA4B5408, 0x891022BB, 0x8D9BB0AE, 0xD844F00D, 0x4E97A07B, 0x15196146,
+0x2F89B9BA, 0xC1A7F733, 0x9ACFA3A1, 0xB2899EFC, 0xC2A91F38, 0xDF9248C4, 0x0185F43E, 0x7B659F4F,
+0x87BF7806, 0x4AD5583E, 0xBB19E8F8, 0xEE0ACA9E, 0x8CBD35BB, 0x681DBB65, 0x1DFC06A3, 0xB5D5062C,
+0x4E598191, 0xE3170867, 0x6D45BC04, 0x2BF8DCF7, 0xF26B27CD, 0x16A2ACFE, 0x50876872, 0xA686B837,
+0x1F790A0A, 0x49DC8A83, 0x851331E1, 0xC6E8A9A2, 0x32DDE39C, 0x04404109, 0x8B8C2556, 0x7142F324,
+0xD6E78DBD, 0xA8908034, 0xD6D71AE0, 0x866CD5C9, 0x915E6E8B, 0x6BC2C215, 0x08E2FC53, 0xAB27A9E0,
+0x5287B8DD, 0x1FF670D7, 0xEC40CB5D, 0x524C3FC6, 0x6C6FF42A, 0x8178CDE2, 0x5F684C25, 0xCC84733E,
+0x0443519A, 0xC10242CA, 0xE8F442D4, 0x3FBA5804, 0xA7442FF6, 0x3ACA0544, 0x0A377AD9, 0xE94AE25A,
+0xB1FBE045, 0x83834AEC, 0x2F11C169, 0x851749F8, 0xCB28C482, 0x68197561, 0xCF7923AE, 0xF4EC7BBF,
+0xDC7FF90C, 0x12E37025, 0x91DED1AD, 0x3AE363FE, 0x1DC619CA, 0x9CD3B86F, 0x0708C89F, 0xEDCB219F,
+0x0FA3EF6A, 0xEAD2FC8F, 0x6E5A1361, 0xB5C4C74D, 0xAC12B764, 0x339DFEE9, 0x6833066A, 0xFF495407,
+0x0337CAAD, 0xB11CEEB4, 0xDA64C6AE, 0x49C6D83A, 0x31BBF77C, 0x835FD18B, 0xA718AC93, 0x00BCAD55,
+0x7E7305CB, 0x2BE726E8, 0x21E64155, 0x74F1B259, 0xA0E0F261, 0xAB5A9540, 0x306B7E5F, 0x0708DA30,
+0xB36F236B, 0xBCD88C25, 0xAFCE094F, 0x78A5EAF0, 0xBDC4BACF, 0x7B2498D6, 0xDD4294F4, 0x0B70FBD5,
+0x9D502371, 0xC282BE9E, 0xF79FAF42, 0xBBFC2907, 0x2411F591, 0x8DB0C290, 0xAA4547B8, 0xEAF8914A,
+0x3B918C54, 0x57237DF9, 0x52EA8703, 0xA7C92153, 0xC1D1E825, 0x7A92C8B3, 0xB024B0D9, 0xA6183325,
+0x62DF76B6, 0xEE402006, 0xC067CC1B, 0x452F80C5, 0xA16B7E36, 0x30BFF6CF, 0xE5E2DBC7, 0xB1DF6264,
+0x7ED27581, 0xFE9E5DC4, 0xE310362C, 0x83441C79, 0x484E2212, 0xA43EA7D1, 0x60FF6B99, 0xC5942AAC,
+0x1554EF63, 0x42887B0F, 0x103198FA, 0x5A854185, 0xEC1498C2, 0x1D29D870, 0x39D16249, 0xB6D03FAD,
+0x7BC4A3B0, 0xA328CF90, 0xF0B7031A, 0xD10AF140, 0x6890398D, 0x484E66DC, 0xB212FDEB, 0xDBC55C6E,
+0xCF602EE1, 0x1818F24C, 0x9A160424, 0xC6EF3892, 0xDE7F4C0C, 0x80DD8251, 0x882C7A47, 0x13206288,
+0x2144F5D1, 0x85F0AB2B, 0x85A2E6F5, 0xF8D146C4, 0x37898139, 0x9539A1B6, 0x645AC633, 0xFCB0ED60,
+0x6EC9BB89, 0x7165086A, 0xD5C71335, 0xEE4EA404, 0x395C8AFE, 0x7BBBCA67, 0xB5CF4196, 0xB0FEF031,
+0x8CAD28C8, 0x30EA6E13, 0xEB1B92DB, 0x3FA7F458, 0x0002A9CE, 0x7D62E01B, 0xF5D23D00, 0xBD6C3BBD,
+0x5E29FBD6, 0x2031FADE, 0x9F1B678D, 0x81EE1509, 0xE328332A, 0x69CE067D, 0xA668B62A, 0x21DF023C,
+0xAC4C9DB0, 0x0B0D6877, 0x916D3F7C, 0xD4D70E20, 0x8E9E6DA7, 0xE3F054DD, 0x7AAA921D, 0x72972367,
+0x708E902C, 0xFB5BC3CB, 0x8247A203, 0x5D01600C, 0x79D71093, 0x972D6F06, 0x4BF195FB, 0x116E6978,
+0x20ED8901, 0x1A3E962F, 0xE3B9EFBA, 0xB09FE00B, 0xE3E38587, 0xC18EE07A, 0xCB3FF20C, 0x2D441F65,
+0x2D12556E, 0x7BDA02D9, 0x8DFCA2E2, 0xC6A5736E, 0x966A49C6, 0x2A94AF9A, 0x21F8A97E, 0x5F1D0C19,
+0xBE8F8E69, 0x0B2BDE5E, 0x770F9709, 0x0DFD384C, 0x568B1977, 0xCA8ADF72, 0x3B58106D, 0xAECA6BAF,
+0xDC2EFE48, 0x7D3CCC1D, 0x50EFA74B, 0xD8DB5154, 0x259B63BC, 0x573CFB88, 0x0722091C, 0x267D4C73,
+0xE71CD51B, 0xBF0F4B85, 0x73013632, 0x184E6BF7, 0xDEF40D56, 0x8A487D17, 0x75936A2A, 0x57819F6C,
+0xA6DDB0C0, 0x7519F08A, 0xE18FB13D, 0x08C0A38A, 0x8BA364F8, 0x12867EDD, 0x96063692, 0x4136C311,
+0x5A3AA14A, 0xA8A8E3EA, 0x9881E844, 0x468BB61D, 0x5285BF2D, 0x65CACF90, 0xF1FBB470, 0x5115D52C,
+0x2D3DB764, 0xD581E746, 0x3CC9E72C, 0x637AE033, 0x9E87A1EB, 0x890C9ECE, 0xD747796C, 0x831DFD3D,
+0x1129D2FE, 0x18199AA8, 0xDCCA4780, 0xFF7936EE, 0x54A8EAB6, 0x386819E7, 0x2C26006F, 0xE628E689,
+0x85D8BDE0, 0xBCF533CE, 0x3533E360, 0x8AD34A72, 0xF3B0F733, 0xF3CC5803, 0xE11B1B9F, 0xE41C3B97,
+0xD303D558, 0x2106C0EC, 0x74F62248, 0x8D433C6A, 0xCFB55DD9, 0x6E8AA99B, 0xDC7C70D8, 0x770F8737,
+0x66870C69, 0x02C6A9BB, 0x3D0F07D7, 0x2AE17F83, 0xD18BFC91, 0x7F0BEA6C, 0x60F930B4, 0x5010CAE4,
+0x8B67411B, 0x1DD2B988, 0x2F786EE7, 0x3707D293, 0x785C7DB7, 0x4DB654DB, 0xC5871A59, 0x7419DE3C,
+0xBAE7C6DB, 0x1AAD0464, 0x26DB028D, 0x9BB79CBE, 0x7A16A2DA, 0xC54EA363, 0xFAD2847C, 0x87DBD05B,
+0xED9219C0, 0xFE5B4687, 0x92A9D381, 0xA7D1245D, 0x84C663DF, 0xD2CF98C0, 0x6FC11080, 0x9CCCD086,
+0x92A410F1, 0x5727AE24, 0x5A5397CE, 0xEB42D5A0, 0x00DAA948, 0x09C270B9, 0xD35DE3F1, 0x10E21885,
+0xBA2CD15A, 0x610C8856, 0xEA9C7FA7, 0x19403110, 0xC095B67C, 0x4648E03E, 0xF79F6AB8, 0x9BEE241D,
+0x1B8C7695, 0x0B5F3738, 0x3A6E3AA8, 0x48D42FB0, 0x01E9C742, 0x33594576, 0x02E45BA0, 0x78FB0FCD,
+0x9DA02293, 0x8972D610, 0x88DF7491, 0xF6DFFE5C, 0x40152E6E, 0xCA2BB241, 0x697B1DB7, 0xD1A16E7D,
+0xCFB544C1, 0xB1F4B749, 0x35357EEC, 0x3A28B866, 0x3BD57D29, 0x72455350, 0x85568D37, 0x938A5FCB,
+0xDAE3739B, 0x04D9608A, 0xAB0A582C, 0xF174A904, 0xB9D3D79E, 0xEE0988A3, 0xECB5C418, 0x2AA1ADA6,
+0x76F2F23A, 0x01EF7576, 0x4B23D9CF, 0x57FCDB70, 0x7DCF3306, 0x70196B49, 0x726349EB, 0xDDBC54B6,
+0x9945F0BD, 0x17AA2F51, 0xF6A162EA, 0xD79BE1A9, 0xB91FCCE8, 0x30617037, 0xC0421A6E, 0x2D7E8197,
+0x545D9665, 0xA5B3D026, 0x066AB49C, 0x06FD5D72, 0x3381030E, 0xD58C7301, 0x9B06DB6A, 0xD891D74D,
+0x1B54F28D, 0x79CFF5B1, 0x1E3134AD, 0x5534CBC4, 0x204EAE08, 0x408F10D3, 0xE9C7DD0A, 0x880B2BB9,
+0x0ECE6FF1, 0xDC412797, 0x8565B9F7, 0xDCDFE064, 0x285B04C9, 0xAD30C6B5, 0xD2799BF2, 0x2605D2A1,
+0x374738E8, 0xE6A236F6, 0x3EEDFDDA, 0x6B3D5311, 0xDAD2CB18, 0x8569B838, 0x13C8940F, 0xFAB2C147,
+0xF6D08430, 0xA64D40DD, 0x22FCD007, 0x0C72DFFE, 0x1215DD0A, 0x30E1CBF3, 0xB6767A29, 0x1D4533B4,
+0x95E414C2, 0x693EE63A, 0x3A55070F, 0x78391602, 0x728CB8F1, 0x4AE86117, 0xD4BFCD8B, 0xBAA0176D,
+0x8E8369D2, 0x0FEB0620, 0x57FAE46F, 0x518A24DC, 0xCE15AAAB, 0x42417622, 0x7A4D9195, 0x806DB441,
+0x44A24B5E, 0xDC13D870, 0x29FF8A78, 0x14C76469, 0xCA70F555, 0xD69E9ACD, 0x4521664D, 0x3D01425B,
+0x15F3F23E, 0xF58802F8, 0x7DA3B7F8, 0x09B22DFF, 0xF28289AE, 0x169D40B2, 0xC7999EEB, 0xFF340705,
+0xCB1B7447, 0x74C27636, 0xA1211C64, 0xA25F37CC, 0x5CC35C83, 0x3EEDACA9, 0xBC10D248, 0xE2763053,
+0xA142D355, 0x5920BE48, 0xE74D6929, 0x47F80126, 0xCA7016AE, 0xCA3B4721, 0xEF19DD25, 0xA345E801,
+0x4A1E7EF2, 0x51576124, 0x362423A7, 0xDB896F16, 0xFDB515C8, 0xA664760C, 0x9728D404, 0xA927EED2,
+0x0238D74B, 0x3EB20B81, 0x75813DB5, 0x03036C54, 0x6800A868, 0x97622119, 0x188A86BF, 0x14231C36,
+0x87AFC0F5, 0x0A8A02DB, 0x04AA874C, 0x96330C5C, 0x7B7DC976, 0xC1ED4E74, 0xC8E0BC9E, 0xFBAAB049,
+0x3FA68960, 0x841C2F1C, 0x11DAF804, 0x228AF3A5, 0xC28CB657, 0xB0C475F7, 0xEA9539AC, 0x86119D1F,
+0x5E4588A2, 0xA9CF24AA, 0x9FF1F54C, 0xD73ED890, 0xEB8DE282, 0xBFFDBB0C, 0x8AAB8E03, 0xC78F4B2B,
+0x4B57BB45, 0x7861570D, 0xAEDBA12B, 0xF157D111, 0xF406575F, 0x0D5280D6, 0x1AB6C6D5, 0x3841742E,
+0x853D6EA9, 0x2CDD198D, 0x18B2C450, 0x43ED0F21, 0x5F1287CA, 0x2185765D, 0xD27F393C, 0x465059EB,
+0x0A88A485, 0x37BC7F83, 0x799129AD, 0x9A29FBAB, 0x31E2FA0B, 0xC7471143, 0x48398E33, 0x3FFEB845,
+0xEB23DBC7, 0xECB9EF54, 0x0E2CFBDF, 0x3C4F9072, 0xD55AC85F, 0x04F7801B, 0xC62C15E2, 0xBB031AF4,
+0x1634EE42, 0x83E2CB09, 0xB8282D18, 0x07DFE580, 0x0E80A440, 0xC1303FF0, 0xA4DD15E8, 0x85EF476C,
+0x56E25FE9, 0x3030A053, 0x7CE49196, 0x438FB610, 0x29BAD37A, 0x079EA2E0, 0xDBBAFA1A, 0x81A67A05,
+0x90D29F0F, 0xE8E14A51, 0x2ADF8DF9, 0xB4E7886D, 0xCD9D12CF, 0xA09CE449, 0x334A6D9F, 0xA4DE9E4E,
+0xC72C5F02, 0x9DFD81C3, 0x2580CE72, 0x911372A4, 0x0BBA5CC5, 0x0DF229B4, 0x02738598, 0xD2602BDC,
+0x8235EEC9, 0x28C023EC, 0xEB9A4767, 0xE1070DDC, 0x767896D8, 0x8A7A0B84, 0x0FCD1A72, 0xFCD15AFC,
+0xFA7639BB, 0xAABADF22, 0x7F2E4431, 0xB259C608, 0x25CC4C4C, 0x9061EF9D, 0x50FCDC8C, 0xD8BB6A4E,
+0xEA35AE7F, 0x36D119B8, 0xA08DE49E, 0x929E9BCA, 0xBC5C4D5C, 0xF42184C8, 0xEC7D8D3B, 0xAFEC39CE,
+0xF4B2D3B4, 0xB52E89C5, 0xBD6CB51D, 0x7762F8F2, 0x2AB5A9C5, 0x26B56851, 0x4EC10AD5, 0xC6E8B4A8,
+0x4083570B, 0xE4D67E27, 0xF07FB6AA, 0xA8630A98, 0x25C55C05, 0x18DBEC84, 0x240E0FCE, 0x07F1D6AB,
+0xB42534DA, 0xDA00AC87, 0x107985F6, 0x39521145, 0xA5F02ED2, 0x37E0637F, 0x5E1B9B13, 0xAFDBE047,
+0x7303E84A, 0xC4FA2DB6, 0x7C274EBF, 0x113CEC4D, 0x207F5AF3, 0x5A417D06, 0xBFF81B90, 0x9DCA12B8,
+0xEB79DEED, 0xD93839B5, 0x0D2C4326, 0x133E6298, 0x58D4AA62, 0x3FFFF1F7, 0xA6D0D33B, 0xCF4B9370,
+0x41922EC2, 0x0E65A523, 0x056AC929, 0x83729F61, 0xE9F11F1D, 0xAC8E9509, 0x9DE91E92, 0x09D4DBE9,
+0x460623CE, 0xD7E08973, 0x28E92210, 0xDCE994F1, 0xAB54123C, 0x50E353AA, 0x41778C6B, 0x344F864B,
+0x76A38B7E, 0x48CA161E, 0x2CF37C5A, 0x32335975, 0x6496758F, 0x9A242A51, 0xE18CC42D, 0x95E67270,
+0x614DCE5C, 0x374D810D, 0x0A936B0D, 0x64A62E03, 0x7ADC5FE6, 0xBAE14E74, 0x0B0B9D28, 0x1C9B1411,
+0xC2E96CB3, 0xF6C5A162, 0x499AA991, 0x95C1C8D7, 0xA4095211, 0xF101D9CF, 0xD76C35E8, 0xDF930812,
+0x2860BEB3, 0x8569EB89, 0xF485FD4A, 0x9316165F, 0x55CC0DBB, 0xF210095F, 0xBF881F77, 0xF3D52B94,
+0x381DC778, 0x31EA9BE0, 0x72583645, 0x1CC0A66A, 0xCC71F87E, 0x4DFF6F3E, 0x9EB07CC4, 0x6C3E0C21,
+0x14C6279D, 0x9F9F0391, 0x02A31881, 0x89C082BB, 0xCABFF9CB, 0x6BA6809D, 0xF220A08D, 0x13C33CE5,
+0x7DCE64BE, 0xE330064B, 0x77D88E2F, 0x586F6895, 0xEB2581EB, 0xF638EB82, 0x8F7E50BA, 0xCAFDEC36,
+0x29455D05, 0x9DFF2898, 0xDCABD83A, 0x3D29153C, 0x0669F6B5, 0x121E7978, 0xFF60D759, 0x526697E5,
+0x3CDDFF8C, 0x3E22C3EB, 0x02D1D52D, 0xEE6E2C3A, 0x7ECF4A6D, 0xB8D6FD22, 0xA9FE43D3, 0xAFA6A2E2,
+0xDDCCA5EF, 0x45ADAAF6, 0xF43A5ABB, 0x2577CA9C, 0xD24CC9D4, 0xCF71F589, 0xB15129C8, 0x808C3A42,
+0x1F841C1C, 0x69BB04A6, 0x46E3AB8F, 0x0BA265FE, 0xC21A1942, 0x5D098000, 0x4766F0BB, 0x4049C102,
+0x9BC247CA, 0x2E0E92C5, 0x5A5E9800, 0xD3B53DDC, 0xE70733CC, 0xE5011472, 0x28C9B5FE, 0xCED8601E,
+0x373026FE, 0x6442F090, 0x0114BF0D, 0x37887ADE, 0x79BE41AA, 0x8A2FC687, 0x36ACD006, 0xD9304BCE,
+0xFF69BC6B, 0xB81D7357, 0xEEB700E2, 0xC8E5AB38, 0xC523FB98, 0x2CE0C24B, 0x93DF905E, 0xFB6D7B7E,
+0x94D96296, 0x800CA8C9, 0xCBB69D9B, 0xCDE98B48, 0x3A9A95D3, 0x022E49E5, 0x39EC018A, 0x9CE9A5BC,
+0xAF551C97, 0x8C91B71B, 0x55E8FD04, 0x913C8BEE, 0x49F22AB2, 0x1921F7E8, 0x7DDC7226, 0xBC0ECAAE,
+0xBF175E32, 0x89CFBFD3, 0x50274DE6, 0x8DFC3246, 0xEF6CA70A, 0x1422075F, 0xA70FAD92, 0x83C0184B,
+0xCCCB4EF7, 0x7776A553, 0x1EB96648, 0xEF14F53F, 0x62F53F23, 0xF2C5C73B, 0x1E15CF76, 0x1E1377EF,
+0x3E4A43DF, 0x825BA698, 0x96E5893B, 0x040B32E5, 0x7831717F, 0x8A29C45D, 0x27003F21, 0xDC0B53CE,
+0xB571C54E, 0x445E9EE4, 0x9BFE0FE4, 0x23A2A15C, 0x081869DC, 0x4C7024A8, 0x79DD2785, 0x810B1F9C,
+0xA4C6FF4C, 0xC39C9C0E, 0x54E5C848, 0xC2B8DE26, 0x1FB0DF3F, 0x38265114, 0x3EE200F2, 0xDBF5DDF4,
+0x6419CF35, 0x20300E06, 0xE901F6F5, 0xC4803EE3, 0xDA7AD525, 0xEEB32C6D, 0x1DFA4BF3, 0x0A1C8339,
+0x319B469C, 0x4BA971CF, 0xBDF0780A, 0xC528E9BE, 0xE40F8DFD, 0xCCE6DDD1, 0xB6403BB1, 0x54A1705B,
+0x03CE0415, 0xC4A8986C, 0x0CB1A59B, 0xA8342AEE, 0x24ED8F1C, 0x2FA2A6BE, 0xAC6DAAE3, 0xB5D872FE,
+0x5B2EA4CF, 0xE68107F3, 0x77EA9546, 0x63A101F2, 0x730B52CC, 0xA08B0DF0, 0x766EA23A, 0x6C3A55B9,
+0xF28A95D5, 0xC5E07BBD, 0x00F8D838, 0xB008A076, 0xE3B3EE44, 0x252DD34F, 0x4DE9793F, 0x9F55BF4A,
+0x06D566FF, 0xCBF6FA3B, 0x66201C0E, 0xA93577EE, 0x3C62A94B, 0xE62D518A, 0x7429E10E, 0x97574FE9,
+0xAAA0039B, 0x03BCFB92, 0x0814E3EF, 0xEF663004, 0xE2C98B10, 0x24CAFA9F, 0x046D9643, 0xE7AD45F7,
+0x8679E688, 0xA242E163, 0x7630A5D2, 0xBD81359D, 0x087A07C5, 0xC476E8D6, 0x6A4BE7A1, 0x11E74891,
+0xC61B9D9D, 0x51BCBBBF, 0xC27BC001, 0x5994E3B4, 0x107BB381, 0xBEE12D17, 0x1F2918B3, 0xEA22C031,
+0xE7FF3702, 0xF2043DF8, 0xEB70B907, 0xE7EDEC2E, 0x24D7F90A, 0xC7B449D0, 0x39DA2B20, 0x973FFCC2,
+0x9F15D267, 0x646F0473, 0xF87CE38B, 0x15656947, 0x1D373EAD, 0x46A9F971, 0x16A995EF, 0xC24B34A5,
+0xF62BA5EA, 0x4048962A, 0x377258DC, 0x4ECC2946, 0x150BA596, 0xC586F59F, 0x2A858F82, 0xA000A6F1,
+0x4AB89772, 0x5CB3AEA2, 0x8BDF56F5, 0xA957E37E, 0x840C5E47, 0xACB8EF8E, 0xF94FA97B, 0x791750DF,
+0x36199CDC, 0x595600E0, 0x3297E183, 0x4F45F7F2, 0xE6E277CD, 0xCD914E06, 0x3FDE08D9, 0x07E274AC,
+0x9E03A739, 0x79EB99BD, 0xC4DFE450, 0x10B0EF84, 0xE1A1B3C1, 0x47A4CA68, 0xC2BDCDDE, 0xE64FB7F3,
+0x32AEC806, 0xDB04A33F, 0xBA8E6B89, 0x6772F74E, 0x85AD090F, 0xC841F738, 0x15F683F4, 0xB9098E68,
+0x31B5F01B, 0xF13E66A1, 0xBE676664, 0x91966B78, 0x2D0E5DC2, 0x6D3901F2, 0x4595B848, 0x447D816C,
+0xC800ACF6, 0x6EE4A2AD, 0x0DCB2B9D, 0x667E1AD4, 0x91D008C0, 0xCB84C7CB, 0xF83E49BD, 0x75EC41E8,
+0xE837916B, 0x1B5F4A54, 0xD93BAEA7, 0x9A7A283E, 0xA1D6E631, 0xF4E81483, 0x020FEB25, 0x3D9ED70A,
+0xB8F2065B, 0xF6EF4D4B, 0xC4C740FA, 0x87470DBF, 0x0E465A84, 0xDD88AB8B, 0x2D2949B8, 0xC702908F,
+0xE22E0A90, 0xE9DE590E, 0xD912056B, 0xC59155EB, 0xAD52AC49, 0x43D2942A, 0x497563CA, 0xCC0C268D,
+0x85D4F709, 0x2312B34F, 0x34B336EB, 0xB4859892, 0x7B3E2632, 0x30DF267F, 0xB93F6F13, 0xB9FB2899,
+0xBFC32C55, 0xE74C8A7C, 0xB04BAEFE, 0xA5474587, 0x5DD76396, 0xD5B3A3DC, 0x2384D177, 0x39A9D1AC,
+0xCE2CFB62, 0x186DBB90, 0x8599504A, 0x4A4BF673, 0x58765415, 0x230A9268, 0xE276DB42, 0x9951F745,
+0x96874B13, 0x02BC71DF, 0x47945B68, 0x0E0B5D4B, 0xDDBF57EC, 0xE03491B6, 0x889A019E, 0x4CB38D9F,
+0xE4F9B787, 0x9D97075B, 0x1C6A9F9B, 0xEF9C5AF0, 0x6CE67B55, 0x54903EF8, 0xE46D1CAA, 0x7ECD4760,
+0x91F82A8F, 0x5CCD5754, 0x4EC6846F, 0x39BAEA8F, 0xDE8B932B, 0xBA44A872, 0x20459592, 0x7DD70D32,
+0x5D895FDD, 0x4AF257A7, 0x710DEEA4, 0xF0B1783F, 0x373D6D70, 0xBADE2E95, 0xB9DB71C5, 0x5759617C,
+0xB794DDEF, 0xC529C881, 0xBE0B5C15, 0x6BCFA3EB, 0xA80E4778, 0x2B9080CA, 0xA95A01C1, 0x6F63A873,
+0x9BDFE335, 0xD0D90C26, 0xC35F3425, 0xAE40D937, 0xC541764A, 0x7E1B48A4, 0x03151753, 0xFCDA217D,
+0x3F49CD65, 0xAC0FC580, 0x6D37FA50, 0xEE9C710C, 0x7FA9375C, 0x18BAE1E6, 0xB06F04FB, 0x731F5B1E,
+0x5CB23BDA, 0xFABB0F5C, 0x026FA1FD, 0xCE320F5E, 0xEEAA2E1A, 0xE4BC5E22, 0x2A434197, 0x22059947,
+0xAC4EF7D1, 0xC887EE6A, 0x038583CE, 0x3001A1B4, 0x3AB922F5, 0xF8D9CB1C, 0x6346C9AE, 0x9936FCBE,
+0xF5429F23, 0xD8A2ECCC, 0xB4311234, 0x9696840A, 0x50E3AAFE, 0xBDAEB25F, 0xB59A91E8, 0xE6C9FD7D,
+0x58CED712, 0x9653F25B, 0x1B865C4E, 0x4263836A, 0x1C5FC30A, 0x279F1702, 0xBD22FD48, 0x8DE92DE2,
+0x95B579B3, 0x743420DB, 0x962C694B, 0x901E2495, 0xF5B05F8C, 0x39721EA4, 0x6B70CF72, 0x0CE1332E,
+0xBB9C55E0, 0x4C85DD60, 0xF4B16B46, 0x41B8028A, 0x9EE56A2C, 0x9A7521A7, 0x07AEDA8E, 0x3D640CF1,
+0xD7346E8E, 0x0AB61FF7, 0x64FD73A8, 0xEEDF558F, 0x8185D333, 0xE4F7D436, 0x15AE6299, 0xD62CDDD1,
+0x74E5E0FB, 0x4D94B509, 0xEF0096B1, 0x54F1C077, 0x130C5F7E, 0x0B929569, 0x186B82EB, 0x72722717,
+0x649B21F7, 0xADD857C3, 0x9DDB95C1, 0x03D1E82D, 0x5C3F39BA, 0x7A7B53A6, 0xCCD4B31A, 0x50B0B436,
+0x42A89FA5, 0x4D78602E, 0x4280F71C, 0x5ED4C6F5, 0xE501880E, 0xEF321396, 0xEFDDE2CF, 0x1C4A059E,
+0x2CFB4699, 0xD591ED04, 0xED9D624E, 0x97162B94, 0x33155D94, 0x16A4666C, 0x4664A065, 0xD8309258,
+0x14A6AFB4, 0x3585DB97, 0x0C0B94D1, 0x5FA83487, 0x8021EEB8, 0xC3AFE506, 0xBB020E67, 0xED885B94,
+0x7EC1602E, 0xB43689E5, 0x80B72CEC, 0x280A473D, 0xBF192D69, 0xDD55A60B, 0x9619CF2D, 0xD9F99480,
+0x3FC7AA6A, 0x30294C4B, 0x0A3B4BC4, 0x6F505157, 0xBD8F38FB, 0x3A01E0F7, 0x20E74CE2, 0x03BC247F,
+0xDEFCF647, 0xC39FAA32, 0xCEAFFCE7, 0x21E1A31F, 0x45C127FF, 0x5C25C6C6, 0xE83ED033, 0xC9EE7689,
+0x4FBE08F7, 0xCB68460C, 0x6876E3FC, 0x1C40799E, 0x4A782F65, 0x0FDF5ACD, 0xB23ACF9E, 0x1855C1CD,
+0x0AB468C9, 0xA7B5B5BB, 0x38A2C3BC, 0x9A6E9A14, 0x67DF2BE3, 0x6C36A065, 0x46038DB9, 0x061E201A,
+0x1268021A, 0xA1197250, 0xDAA4000E, 0x4C50831B, 0x0378AFF9, 0xD790EC61, 0x3F4BE3B2, 0xD9244003,
+0xCE510DDC, 0x69AE4608, 0x4872D21F, 0x9A1776DD, 0x6838FA37, 0x9E3F1476, 0x495646D1, 0x5443B6DC,
+0xBC8D3B2C, 0x78447681, 0x2589FFA7, 0xEA475822, 0xD9C7835A, 0x8AE2D099, 0xCEFDC65F, 0x2DCE9035,
+0x8613F636, 0x5BAAF7E5, 0x0DD5B24A, 0x16BC1D6F, 0xA26B1E45, 0xC1FBC4A6, 0x4CD320B0, 0x3292B5D1,
+0xA5377259, 0x00914340, 0x8CBEB298, 0x40C6BCD8, 0xF8C8AF63, 0x8C996C19, 0xD7163112, 0x496BB667,
+0xA7479EE7, 0x9B5DCE17, 0x27643E8B, 0x619347A1, 0xC6BE6EAF, 0xD6C2FC45, 0x9540D2E8, 0xC90F17B0,
+0x57AD2721, 0xB3A50E41, 0x5A709148, 0xC8A321CB, 0x803EB1F6, 0x2A77F422, 0xC759D5A0, 0xDAF3E31F,
+0x84F83CE1, 0x400F64AA, 0x2FDC48FF, 0x10812E6B, 0x5680BE76, 0x8162C340, 0x18A6A6E1, 0xB498504F,
+0xDC58FE1E, 0xF8AB6577, 0xB18ECC02, 0x702B9DC2, 0x4833926C, 0xABC5A556, 0xBF5801A6, 0x8FA3C049,
+0x7BE367B9, 0x840E9B00, 0xDB198D1B, 0xAD322FB3, 0x44418A67, 0xC211B5BB, 0x2BAF572C, 0x0B87A24F,
+0x6953A63F, 0xF4092A68, 0xC0D0D013, 0x6240B908, 0x0253B037, 0x8B8B23EB, 0xC47851A9, 0x2C171C30,
+0xAFB13ED7, 0x311E07DC, 0xD69B0A83, 0xF1FE6B81, 0xCF5B9016, 0xF01D059A, 0xC6D94E3B, 0x7477D8E5,
+0xA48FBA98, 0xF284B61F, 0x81107878, 0x66920A9B, 0x3ED60747, 0x41C35CA9, 0x6B9C701C, 0x55C256FA,
+0x625CBBEC, 0x18C5D546, 0xA3270784, 0x5E9E3F84, 0x61B61797, 0xFA53B1CA, 0xD76FB0FC, 0xE4398681,
+0x7F3BEFFC, 0x8121DBFC, 0x0AE052C9, 0xC8E61B74, 0xBE98006C, 0xE602A5A6, 0x88A8E645, 0x1E1CC372,
+0x06FCCC77, 0xFEF6AB1B, 0xDD7DD3DF, 0x0A597FB7, 0x3E9BB049, 0xB717362E, 0x13323F72, 0x3CC00064,
+0x4CC7E2C6, 0x7870A39A, 0x62BC049A, 0xB21B3624, 0x186A0A72, 0x31C65192, 0x0058A7C4, 0x180EF77D,
+0xD35AC42F, 0x84E21953, 0xEA175F16, 0x960D2C0D, 0xDCC033D8, 0xA923B1C8, 0xDCF09AD0, 0xFD8789B7,
+0x6981E637, 0xE8B665A1, 0x87AE2D30, 0x6FC06C1E, 0x519793FB, 0x997BB59A, 0x79F7BCDD, 0x17B66C4A,
+0xDEE62492, 0x34C34F25, 0xFA07E8D8, 0x6DDC2488, 0x0B084071, 0x2FAE7096, 0x5911AD67, 0xA6990537,
+0x01BDA18C, 0xA339B90E, 0x207FCDDF, 0x286A8037, 0xDD1978C4, 0x7618E581, 0xBBF64A5A, 0x304844A0,
+0x0D2FA562, 0x54D8279F, 0x196D1379, 0x05F206C9, 0xF12CF70E, 0xF60D9361, 0xED65FBCF, 0xFEBE04F6,
+0xE9B65673, 0xF0382C49, 0x359B8FC7, 0x4C945929, 0x63112EA3, 0x9AB8D78B, 0x985CAC30, 0x394A7DBB,
+0x010A63CB, 0x71E10351, 0x74A29D0E, 0x2BB888DD, 0x6E5C5180, 0x7AD83658, 0xF159FAD3, 0x3B21767D,
+0xC1078516, 0xD03C57C6, 0x09085F44, 0x634F018B, 0xCC97BBC9, 0x04EC1F76, 0x075BB21F, 0x7A23B91B,
+0x6777AACF, 0x0A37BBB2, 0xF4A5141A, 0x0FEDDA32, 0x3077BAC0, 0x5858932B, 0x57906956, 0xA028735C,
+0xD7F573F8, 0xE6F497BB, 0x089725A8, 0x9142D298, 0x2786DDB6, 0x0F660B05, 0xF56189EC, 0xAF630A64,
+0x3F7BDA5E, 0xC6612B1D, 0x1651117A, 0x7A411B73, 0x85F5EAB0, 0x66593768, 0x03A5F21E, 0xB1CEA415,
+0xEDD21D00, 0xC5F607BD, 0x8C66DF61, 0x769ABDB1, 0xE7BD101C, 0x16AC6F85, 0x7F66F1C3, 0xCF14CDD5,
+0xFBCFE7AD, 0x5DF6D413, 0x88DCD87B, 0x59A493C1, 0x6FE3D71B, 0xA7977986, 0x7C0A9BBC, 0x413075F6,
+0x8ED85D9A, 0x26892277, 0xB9F1362D, 0xAD7AEE99, 0x3B5C254C, 0xA67ECFAC, 0xB32AA260, 0xFCBFB6CE,
+0xF8F464F9, 0x3ABC41B3, 0x038F42D0, 0xEC964BFC, 0x196791EB, 0x559306E2, 0x5B826A8D, 0x27CE4905,
+0xC40EF108, 0xE8015E86, 0x61E5C4EC, 0x74F815C7, 0x434889CA, 0x8F686B89, 0xEFB15C4F, 0x057355D0,
+0xB7F94996, 0x8EE49C90, 0xA532EBE5, 0xD12753F3, 0xEE2E2796, 0xA474A1B5, 0x8A4E47EE, 0xC7AACCCA,
+0x96021FA2, 0xF20BBF82, 0xC9247E8E, 0x8A57AA06, 0x5AA5BD7A, 0x686264C6, 0x65A3F1F1, 0xFDC90536,
+0x12325582, 0x4793FA9C, 0x83E0DBE0, 0xAC0C4BA9, 0xC1B51EF2, 0x4A626265, 0xAA0E7096, 0xF46824E7,
+0x767F0BF5, 0x31E7737E, 0xBECCBC46, 0xB0D7BA0F, 0xE371B63D, 0x9CA64619, 0x7FD90557, 0xDAF79DDD,
+0x7DB14E07, 0x210B7D0D, 0x18FB70FF, 0x9C409A2E, 0x7B77F498, 0x5E280BBE, 0xA624C324, 0xDDE0EB92,
+0x045BD1E3, 0xE86B6C70, 0x89FCFCE2, 0xA2FB88C8, 0x2778FF79, 0x6FB1B1E9, 0x90993333, 0xC1E87C91,
+0x9EFC2D05, 0x08EDEA21, 0x96F0B847, 0xD34A977A, 0x985A533B, 0x8BB76C68, 0x51EA153F, 0xEDCE51B8,
+0xA4B99A17, 0x60BCACE9, 0x8D2BC268, 0x2C63191B, 0xB04FE43E, 0x9CA77C69, 0x7584B168, 0x542CCB5A,
+0xC3D228C2, 0x51EC51A0, 0x88B6796C, 0xDA672778, 0xAFBFFD7B, 0xC91C1208, 0xEE1B48D0, 0x5F347DB8,
+0x6C3C6BE8, 0x359B8DD7, 0x3D52DF32, 0xCA6402B7, 0xA668DCB0, 0xA64473E5, 0x2F77E682, 0x0857251C,
+0x35C50EB3, 0x6C6C6BFB, 0x1023F3E4, 0x60E0C558, 0x4EFBA66C, 0xBD908A4D, 0x146A19BC, 0xF19D08A4,
+0x1C22496E, 0x6BFDC8A6, 0x2EF90D8D, 0x3CD02CBE, 0xEC7233E9, 0x0A070305, 0xA3322D52, 0x9F7B6CDD,
+0xF926071F, 0x994B5347, 0xF343898C, 0xD8FBF287, 0xF2CDEFBC, 0xBD0EC308, 0x9EFAACE2, 0xB393D560,
+0xFCBCF4B8, 0x057D50B3, 0x9D89DBE0, 0xA985219C, 0xE746DB37, 0xAD693BBC, 0x5300DC72, 0x57655487,
+0x8C8FE7EA, 0xCECCB28C, 0x5A027EB1, 0x22C173BD, 0xDFC2B262, 0xB2FD87C7, 0x18952506, 0x951398DB,
+0xCA58FB70, 0x08D1464F, 0xFF43A82E, 0x2FF774F5, 0xD7435051, 0xB2DF2CFA, 0x69EFAAB9, 0x4566E5C4,
+0x1B3D7CBF, 0x550F7110, 0xDB75A8E5, 0xECAA6F3C, 0x55E253AD, 0xD12D9C57, 0xF941BF3D, 0xFEA101B4,
+0x2C5CF0C1, 0x34059B10, 0xF4CEF140, 0x94F117FA, 0x5EE4CB46, 0xF43F5309, 0x32494ACA, 0xCCA4BD7E,
+0x1AA2628F, 0xA4B6EC68, 0x50F6B963, 0x43D92199, 0xD3FB93F3, 0x24055494, 0xBFC5807D, 0x36983F42,
+0x402FC75B, 0x71DA61CA, 0xE955A0DF, 0xDE1B402A, 0x6A27984A, 0xAE00140F, 0xD48F7631, 0x6B171A24,
+0x5EB2AB7E, 0xA88D22E2, 0x81FD329E, 0x810E91A1, 0xBF1CF398, 0x8F3F73E0, 0xE063FDAD, 0xF7CB3A6A,
+0x8EB0FE31, 0x085092CE, 0xED56BB65, 0x58EDF89C, 0x47DA8D05, 0x0A1547A8, 0xB0753620, 0x8E65D77B,
+0x0C217651, 0x61FE87B1, 0x963C25F6, 0x2202B76F, 0xD13075CF, 0x548E454F, 0xA42171E9, 0x35DE7417,
+0xDF504ED9, 0xE1AD5B4E, 0x1722C2E0, 0x8EA5CA57, 0xB61A7B0B, 0x723B7076, 0x3505DFAF, 0x736AD147,
+0x1AF183C2, 0xF565E531, 0xC1BF4488, 0x10F03A4B, 0x2D201177, 0xE3014466, 0x5AFF4DE1, 0x8C5D9FAA,
+0x73E608B9, 0x58093492, 0xD00B2AE2, 0xDA960316, 0x0431E5F0, 0x08E666ED, 0x9941DE91, 0xE4AF32AD,
+0x58FC4CB3, 0xE7BA926D, 0x2D4ADDF1, 0x695D10B0, 0x4B57735D, 0x40BAFC75, 0x2CE44AFC, 0x64AC19C7,
+0x73B4F5E0, 0x9FBEAC16, 0xF35AA693, 0x9A2BF34E, 0x1083C518, 0xE7C11BB1, 0x8E63D0C8, 0xED605FFC,
+0xA7363256, 0xA87A0D2C, 0xB261DFEA, 0x8D110780, 0xDA534972, 0xFF962076, 0x7D6083DA, 0x42B2D7DF,
+0xDE33CA5C, 0x91BFB81D, 0xCDA6F533, 0x16FF9C0A, 0xDCCC78F4, 0x74BCEAFA, 0x54325F20, 0xFBDBE5EF,
+0x0B1D1FCE, 0xEE5E3423, 0xEB7FBC6E, 0x1843E497, 0xFE1ADE1A, 0xD2058474, 0x0DE662AD, 0xB37FBC41,
+0x80A56489, 0x57E30E19, 0xB9F2F779, 0xF52ED086, 0x01DB73E2, 0x8CDC5DF5, 0xF7922B56, 0x99C6C2ED,
+0x1425100D, 0x5BAB8D1E, 0x3D52636A, 0xB7BB7159, 0x9320F0A3, 0x82206CC8, 0x583BBB2C, 0xB51C0AB7,
+0x2429014E, 0x2115D50B, 0xD4B712AA, 0x8BD2F978, 0x792ECFE7, 0x8B7FF8C1, 0x50E9767A, 0x02B68F59,
+0x5EBF4FEE, 0x45EF225F, 0x51FE67DA, 0x5D87BC62, 0xF5F1CAA8, 0x0E8705E0, 0x9990CA23, 0x4FC9DB23,
+0x42510ECF, 0x89F7EC86, 0x4061E6D0, 0x0DEF3637, 0x51A2A50A, 0x7051B5FA, 0xC216ADBE, 0x529B1897,
+0x5D1CBB6E, 0xB9616ED7, 0x8E2D0B6D, 0x78B3D475, 0x9B997D79, 0x7E91ACE6, 0xADFDF8F5, 0x996809E0,
+0x25E33EED, 0x0264ADDF, 0x70FEECC1, 0x7DAD8CA0, 0x3B91730D, 0x7B8C7979, 0x5CFB2C14, 0x520DA686,
+0x92063F0E, 0xCFF92FE8, 0xEB4092D4, 0xD835D734, 0x9880BC6A, 0x87E6A12F, 0x86E44F67, 0xAEAA148C,
+0x006921CB, 0x9873BA07, 0x20E4A8D1, 0xD4651630, 0x1F55F5F5, 0xC36ED2AA, 0x981C9534, 0x3D070D31,
+0x519D5B34, 0x68D6E29C, 0x2D525D11, 0x8F946B0B, 0x1681F727, 0xE6721F96, 0xD098714F, 0x03962EE0,
+0x6F3209C7, 0x82CBE6BD, 0x936511B4, 0xDE65C9C5, 0x097D729E, 0x113EB172, 0x2A24CFF9, 0x166F5BE8,
+0x945D2380, 0x0C1D90AE, 0xB55E1DFC, 0x880EDBDA, 0xA7625EA5, 0xBD1C972C, 0xFF43E24E, 0x8AE7A816,
+0xBFBDE42A, 0x4125C166, 0x1A0925F7, 0x2266D3F1, 0x7B46D726, 0xA966DA0E, 0x85771B38, 0x7245DF6E,
+0x5BFF728F, 0x8C6D0B40, 0xCAF881CF, 0x45E9F053, 0x42A39C80, 0x2C0A3585, 0x68974BE6, 0x05E74B84,
+0x0BA0543B, 0xD9DFE172, 0x93599D29, 0x3B0EE77C, 0xBC63438F, 0x052CA937, 0x7CB7585F, 0x0B55EECC,
+0x778AF8C8, 0x1020C8B6, 0x86A7E22B, 0x2467FDEB, 0x7C789BE8, 0x2E92381C, 0xC00B34C8, 0x3E1B2C38,
+0xE401A790, 0x69AE6EC0, 0x71A02007, 0x32A6A315, 0x935736A0, 0x86481B75, 0x75759340, 0x44896848,
+0x0D7A7517, 0xF55C63E5, 0x1D0D764F, 0xE4432BDF, 0x43B678BB, 0x3C156BBD, 0x8E7B85D4, 0xEF8B54BA,
+0x04EE3BAA, 0xEEF0C918, 0x4CF03731, 0x0DC4EDD3, 0x1240B79C, 0x28BCBA21, 0x3A518EA5, 0xE7F4366B,
+0x75428CB2, 0x54654CAB, 0x4186DCE4, 0x2536CBDA, 0xC864BDA1, 0xA91AB1CE, 0x6828EE73, 0xC97FF72C,
+0xA475AECA, 0x99892DC9, 0x8A6BAEFA, 0x115C02A0, 0xC57623AC, 0xA4297A71, 0x6BDC2C7B, 0x8940BA5F,
+0xB51B2778, 0xECBD05F0, 0x99F79B77, 0x84E219AE, 0x0E518040, 0xB1667275, 0xC163C1D9, 0xF4C273D1,
+0xBCF7733D, 0xA9B1392E, 0x327C48FE, 0x46DDCF8F, 0x6DE53CAA, 0x3504CE73, 0x2A86A0A1, 0xD05D5D8F,
+0xC36BA519, 0xC43984FB, 0x26A5FDEB, 0x931C6147, 0x8E6F927E, 0xE98A22A0, 0xD2CA0741, 0x3AC5952F,
+0xF9168BA4, 0xEC53DF17, 0x26DEA04A, 0x063C8259, 0xBAFF2B61, 0x5F486787, 0x994B5320, 0x7C7A3BAE,
+0x1D2E407A, 0x37B7FC71, 0x36A57131, 0x707A3855, 0x40AC19E1, 0x5CC82F64, 0x8780ABD3, 0xE6C5BC7E,
+0x88FAF549, 0x3920D001, 0x451E171D, 0xF876A52B, 0x67EC342B, 0x202EF5C6, 0xEF1C4F32, 0xCA728EA0,
+0x33A92400, 0x7103502D, 0xFB8F9E8F, 0x4E73C2DF, 0x178B2141, 0xFA326F0C, 0xD25B19EF, 0xA897B976,
+0x0277AD08, 0x8B061686, 0x33271B46, 0xBE0605F3, 0xA14F7666, 0x4266385F, 0x752A7363, 0x309EB9BB,
+0x924D8D4C, 0xE19CA77B, 0x02D8EABC, 0x29AE6EE5, 0x76C20C1D, 0x57BB0C32, 0xC58E2138, 0xE211CECC,
+0xA01C2A94, 0xF2319F98, 0x9BD9C755, 0x2B9BB428, 0x51C42DBE, 0xD4CF2EE7, 0xB1E0C1DD, 0xA3D29AE5,
+0x7C857DD4, 0xB998A210, 0x202C027C, 0xF2DBFF0B, 0xC4423D3E, 0xC2D670F3, 0x09EB5084, 0xA760FBD4,
+0x80FAFDA0, 0x5744AED0, 0xB1194BD0, 0x345FE405, 0x6F9B6071, 0xC41AF692, 0x5A34952D, 0x7F49D1CA,
+0x81020C73, 0xA7B398E7, 0x104DC7C0, 0x05A1085F, 0xFF3E5000, 0x00CD23EC, 0xDD67B12D, 0x4C553F41,
+0x26AAAB14, 0xDD8A606C, 0x561FF148, 0xB01A7E09, 0x866B3CEC, 0xB73BDFEE, 0x13CD694C, 0xE4C0ECC2,
+0x703E1B9E, 0x139D636F, 0xC4BAF1FF, 0x923A73CD, 0x42D01209, 0x5D6CC1D4, 0x47E60630, 0x84B8EE9D,
+0x3A62CF94, 0x96A3D4D0, 0x7A57FA15, 0xA50183C0, 0x23655813, 0xC2A5DDAD, 0x00B48EB8, 0xB758DBF4,
+0x1BE22316, 0xAEF5A6E2, 0x58025F1D, 0x01FC9019, 0x1DBEFEA9, 0xA0F60553, 0x770DDC4E, 0x829FBAAE,
+0xB6CF3D33, 0x16E10FE4, 0xC97355EC, 0x76182257, 0xC41E33B2, 0x06AD3AAF, 0x686E0DD9, 0xA6D09DD9,
+0xF932D9C3, 0xA3EC10B3, 0x58828629, 0x710EE05D, 0xF834452D, 0xE99BB384, 0xB717948D, 0x55E3D7A3,
+0xD0B4C7A8, 0x23B3A5C1, 0x5930D320, 0xA7CE4987, 0x9C21AA74, 0x39D0CE9A, 0xC0217FB4, 0xB5C3B6E2,
+0x2FFA8A8E, 0xDB15959E, 0xCECEE916, 0x00365680, 0x1C77DF00, 0xFE17A96E, 0x93EB6232, 0x8CEA84CB,
+0xA0B64FE4, 0xCCC7F289, 0x7700B153, 0x63EF32E0, 0x2B924F1C, 0xF66EE0A1, 0x30D4CAA1, 0x444C8048,
+0xEA514469, 0xEFCF45BC, 0x083968B3, 0x93A86421, 0x07F34F9E, 0x13D8A850, 0x39B55666, 0x4E40A64A,
+0xA0BB3061, 0x7BCAB147, 0x1E26CD32, 0xF7D6522E, 0xEF8B6F78, 0x0815BC5A, 0x9C0C8395, 0x6DE7D1F2,
+0x1ECEC1A8, 0x692344F8, 0x7AC8C42C, 0x08AFDA4D, 0x4D0678F5, 0xDB7AA16B, 0x6FC02B10, 0x19A95D3C,
+0xCB28FF38, 0x9DC19893, 0x26E1DB71, 0xAEF835BE, 0x296EEE39, 0xDF6AAE46, 0x97FF40F9, 0x0872A526,
+0x85ADF52D, 0xF67CB517, 0x6F5EA2E6, 0xDCBC258C, 0x6CD5ECCD, 0x9B7A27E7, 0x8D80DEEE, 0x5DA9E644,
+0xF7357A0F, 0xEDBA9553, 0xA13FD2D7, 0x8A44DCF7, 0x15638E9C, 0x09CECAB6, 0x75AB72E9, 0xE99DC1B1,
+0x54AE1A14, 0x53ADC344, 0x53D038D9, 0x55F46012, 0x14B5FBC4, 0xF8DDC63C, 0xA8BB00E9, 0x62B8C870,
+0x41FEE2B2, 0x52E81EE8, 0x97CBDBD7, 0x847F0C90, 0x945C6C57, 0xD5FAEDD2, 0x71CCC802, 0x022D7AB2,
+0x668D09EE, 0x80D830CC, 0x89ECC393, 0xC0412D73, 0x357549AD, 0x2CEFE744, 0xD5957EED, 0xE40892A7,
+0xAFAED584, 0x76FBCD5C, 0xCB07887D, 0x979B6DCA, 0x59E7907A, 0x9690366D, 0x1F4C9547, 0x735F3C95,
+0x102FA6B9, 0xE40CEFA4, 0xB30B69C4, 0x56FB0059, 0xFF595E98, 0x7FC6143C, 0x73BF2EBD, 0xA22208EC,
+0x2E8024BD, 0xC952D2B5, 0x99141147, 0x70C54201, 0x97BB8D7C, 0x068D083E, 0xF5DC090A, 0x3FAFE69C,
+0x4D7676A2, 0xC4E27D58, 0x0FED72BD, 0xCDDBB071, 0xC7925DCE, 0x6E46EF52, 0x3D385410, 0x7C62A71A,
+0x687C8D22, 0xED6FC373, 0x9C84D68D, 0x55DB7E02, 0xB68F5739, 0x853A6583, 0x97A62103, 0xCC2D2A37,
+0x37D8C788, 0x0690356C, 0x90362BED, 0xC6DBEB38, 0xFB08AF49, 0x78C4DA5C, 0x95E43163, 0x21DFCAD4,
+0xC42E285C, 0xC66502E9, 0xD0CB80F6, 0x5A1475F8, 0xFDA08EFD, 0x656082CE, 0xEF09B824, 0x9F66648D,
+0x01AC761D, 0xAAFD152B, 0xDF3BFD1F, 0x388DE30D, 0x3952E445, 0x507A7645, 0x3615BD4A, 0x72879449,
+0x133ECC14, 0x75409980, 0xD22FB1A0, 0x9367C9B8, 0x0A2C0B01, 0xB771AB2E, 0x58A1336D, 0xF485EC32,
+0x8180D87F, 0x94C98715, 0xC04F7793, 0xE4C119DA, 0x05FBBBC6, 0x7C1ACCDC, 0x76493BA2, 0x0949326B,
+0x7CA83E79, 0x395340C4, 0x1AD771E9, 0x89D15370, 0xF77B74B5, 0x2EF5EA97, 0xFCBD324D, 0x6F89FCEE,
+0xDCFA4131, 0xF5091067, 0x47B4DC15, 0x4B33955C, 0x5739D700, 0x1CE96A56, 0x5EFF5784, 0xF70A94BE,
+0x74961112, 0x5FE30476, 0xB5767CBE, 0x97EE1E9B, 0x8CA41057, 0x841E6E78, 0xE0FBD7E3, 0xAA7AFC78,
+0x65B4E56B, 0x48DD3445, 0x6AB2F243, 0x373FAFB6, 0xAA20034A, 0x46DAFF42, 0xCF30B366, 0xA3E4BFF7,
+0x52A19BD8, 0x165A856B, 0x7D818F10, 0xBAA20093, 0xCEFD377D, 0x6268AE7F, 0xA1D61948, 0x3237FA30,
+0x046CD2B9, 0xE1856D9A, 0x6C4884E2, 0x9F67DF4D, 0x33958457, 0xA9012903, 0xCF0B819F, 0xAA157840,
+0x05D9BFB6, 0x44A94495, 0xE622F7BB, 0x59E2320A, 0x1E07DF4B, 0x72A770B4, 0x069B0B33, 0x7D364FC6,
+0x9430D5BD, 0xFDE981B0, 0x1B8608EF, 0x683A4C33, 0xD5DD6A7F, 0xCFCEA0FB, 0xE8F9E9F9, 0x13E1C6D6,
+0x016167DA, 0x5600C032, 0x4D60736C, 0x0AEC6183, 0xDCC02D82, 0xC913B3D5, 0x0F9D62C8, 0xD117235E,
+0xA42BB54D, 0x74C2FE99, 0x9EF95C0C, 0x223F9C17, 0xD1B2B2B4, 0xEFB7AA8A, 0xBE4595CB, 0x10CE6BBE,
+0x0594F9AE, 0x90C937C5, 0xEA876E83, 0xBB0D5D89, 0x1E353AC9, 0xDF7E1ED3, 0x611947D7, 0xB6F4D0B5,
+0xC148D8AC, 0xD4FA17D4, 0x65C2F6DA, 0x51A252D9, 0xA13D2C7E, 0x2FAE1352, 0x3CDF20CB, 0xEBEB4875,
+0xB2AA241D, 0xC65BCD52, 0x8E885A2A, 0x88872A22, 0xC44E0B75, 0xF3F6365C, 0x940D7528, 0xA09CB6C7,
+0x64049964, 0xDE808ED5, 0x71DD7EDE, 0x56A44134, 0x93C4CE34, 0x19AE18E0, 0xAB739752, 0xC95E5D9F,
+0xCDC9EACC, 0x83E5B444, 0xF0C06EE3, 0xDC8D8FE0, 0xE08565DE, 0x842C4DC9, 0x9F8339A9, 0x07A019E0,
+0xAAB11D80, 0xCFA31621, 0x6D7E327F, 0x7CCA815D, 0x7D8F5B85, 0xFE519374, 0xEA63C186, 0xA175C72F,
+0x5485CCF9, 0xD1241403, 0x2F990327, 0x52DBF7EA, 0x3A0E8745, 0xD3AE1684, 0x62D7B04C, 0xA9B1923E,
+0x84DA5E3C, 0x6D610635, 0xDB75E859, 0xF201063A, 0x5AD2BF88, 0x6AAE41C7, 0xC7E9E89D, 0x6E30C3F3,
+0x1453BF61, 0xCF67B926, 0x53AD8FA4, 0x4369D6F0, 0xCFBCBB73, 0x7B48735C, 0x21DB1D3E, 0x06FB8EEE,
+0x0C509BB0, 0x641B9A71, 0x68657D4F, 0xA6E1E187, 0x02D95976, 0xA4C17387, 0xFA522DE1, 0x4145E5F0,
+0x7EB2B7D0, 0x462B43E8, 0xF12FB7EF, 0xBA45D255, 0x443BB243, 0xFC52450C, 0x9B039135, 0xA104CDEC,
+0xB49B69B9, 0x0158B35D, 0x88DB062D, 0xC4B0006A, 0x5AA2C9C4, 0x75032923, 0xD157D8AE, 0x95EEF107,
+0xFD94EA01, 0x273D4A54, 0xCA4D58DF, 0x424B91FB, 0x66F3F836, 0x01FB76E3, 0x0991D4D7, 0xD9AFA2AD,
+0xFAEB6232, 0xDE0A4FC9, 0xC2B6BA52, 0xDC1A7D08, 0x4D223A2D, 0x8F0111B5, 0x7E39DCF7, 0xE91969AE,
+0xFA01675E, 0x831A6FA3, 0xD364B41C, 0x1C2E29FC, 0xBA26D0AD, 0xAF955969, 0x932E8957, 0xF3A704C9,
+0x08033395, 0x04B07368, 0xC84EBC50, 0x27BDB42F, 0x989236F2, 0x6A1F2104, 0x7C244FA0, 0x1AC14D17,
+0x847BE265, 0xA9E30FA9, 0x2B13BEA9, 0x6383EB68, 0x423A50C6, 0x80E66C94, 0x8EECFE2C, 0x159BBDA9,
+0xCEDFAD8C, 0xCA0BC3FE, 0x5952FB78, 0x21CEB408, 0x3007306A, 0x868FB311, 0xCEFDF115, 0x53D92E77,
+0xC72CED4C, 0xB815E2B8, 0x13523A3F, 0x1FB69EEA, 0xD3E0E73E, 0x067DD598, 0x2E803B0E, 0x24D40822,
+0xBECB1449, 0xAE47DE87, 0x9AA9C74D, 0xF5EC139A, 0x4C98D81E, 0xB596D281, 0x6E5EB221, 0xB098F1E9,
+0xBDD13740, 0x1440BD5B, 0x61E45F93, 0x8BF44779, 0xED37A69F, 0x26042D96, 0x15E13DFA, 0xAA83FF68,
+0xC6A8E496, 0x233333BC, 0xEB6359E0, 0xF46B0161, 0xF98635BA, 0x3CCEFC17, 0xE69464D3, 0x729710DA,
+0xD11F1B4D, 0x489B9C1A, 0x5417DDB0, 0xDF9CB3B8, 0xE54221A0, 0xFA1A37B6, 0xB40476B1, 0xF6CF192A,
+0xD69DBFD8, 0x320D72DB, 0xA3F8B92E, 0xBE8E4EBA, 0x7EE6639A, 0x44825E8C, 0x9E5777F4, 0x61F41408,
+0x9DCCE0E5, 0x735BB4CC, 0xC7FAFA5A, 0xF087A098, 0xDDE0035E, 0x726DEE06, 0x3F059343, 0x904B0667,
+0x5335714F, 0xD467B4E7, 0x5055FD2D, 0x366FD4FF, 0x65F4B5F3, 0x3FB1C910, 0xB44CA156, 0x8C84F5B0,
+0x7B2DED59, 0xD898240C, 0xA9450DE1, 0x5A72619E, 0x432338E6, 0x55FD7FDC, 0x63985A80, 0x7205E37B,
+0xF03E3910, 0xAE1867F9, 0xB9D4850B, 0xB9C8CBBE, 0x347392D5, 0x6BC60E7B, 0x106EE79A, 0xD9FBC697,
+0x3B5E8BAC, 0xE962CF6B, 0xEA450B9A, 0x28008ECD, 0xAF12EF09, 0xBBAB0B82, 0x2DB6EFDD, 0xCB0FBD6A,
+0x038673A6, 0xDB0AA5A2, 0x780FE9DA, 0xD9D1E453, 0x45636652, 0x03BEE2B4, 0x89AE5020, 0xD6F80653,
+0x27A49F9D, 0x0C95BA89, 0x34C91A0B, 0xF466635D, 0xCAD1C1AC, 0xAAA87C12, 0x8386374E, 0xB6906E20,
+0xF399242D, 0x507B8564, 0x587C12E6, 0x29701AC4, 0x7923928D, 0x98C8F667, 0x45F928A1, 0x164A9AE2,
+0xE965C304, 0x4050242B, 0xC4CABA23, 0x98A77D1D, 0xA9865775, 0xCB946AA6, 0xFE40919F, 0x5CA77126,
+0x1B8F3062, 0x8D491C64, 0x4B07756C, 0xE8F3EB3A, 0xF243EA3A, 0xDF795074, 0xC6424AD6, 0x808C3821,
+0xB0518FF7, 0x5842E383, 0x2A252D78, 0x3996019D, 0x6D34296A, 0x7751C734, 0x98D12825, 0x447B66AE,
+0xE4B432EA, 0xD53204C2, 0xDDFD71AB, 0x832BF0D2, 0x996297FB, 0xC647BD11, 0xB1F7CC74, 0x73F2ADB0,
+0x3DAF2422, 0x657F70EC, 0x132308A0, 0xAFECDD5D, 0x9A111CE3, 0x956A6A68, 0x17B80B90, 0x196057B3,
+0x490D4279, 0x758AEC31, 0x75988042, 0xC7A78ADB, 0x29C7C57A, 0x2C128F46, 0x740B4E65, 0xB9DCC799,
+0x5B4B5719, 0x9206F710, 0x8C180BE5, 0xD89AF01C, 0xABEA968C, 0xFB512F86, 0x3DC63DDA, 0xA36A6AE9,
+0xD5C96E0A, 0xA3BFA929, 0x12E4C05E, 0x7223F5AC, 0x734960F8, 0x8538E990, 0xAD7A9FE9, 0xCC8500BD,
+0xAF237258, 0x560F3DE4, 0x4F183B12, 0x7A64EFE7, 0x08F1E011, 0x79FB11CD, 0xEC20AA0F, 0x410E99E6,
+0x543BD6CD, 0xA7F80DE2, 0x97D35A2E, 0x2FE551D0, 0x43261DE6, 0xF20F7417, 0x83235BA3, 0x024F3626,
+0x312663CA, 0xDE8377CF, 0x7ECEEDF7, 0x84007518, 0x4953369A, 0xA2990362, 0x39389728, 0x49FA3641,
+0x46232612, 0xC739C091, 0x26D33CD9, 0xE02B91F3, 0x5EEEB76E, 0xCC596F25, 0x5CDFCE80, 0x2DF9D838,
+0x5EA09432, 0xD4171EB7, 0x2B3F8D6A, 0x56F0B282, 0x06286721, 0x91575B66, 0x95E1867E, 0xC35E3200,
+0x776B65EB, 0xD839E75D, 0xD3B174DD, 0xF47834D6, 0x55577C24, 0x81BF2DD4, 0xB172F9F2, 0x21AA9825,
+0x61FA6B52, 0x46142973, 0x1162D640, 0x80272F71, 0x9A4FC06F, 0x38860B80, 0xCE6E4962, 0x0A078BB4,
+0x4D1D4BC6, 0xB21EBDD1, 0x508A9CF4, 0x4A8814DB, 0x584C3A3A, 0x8F4CA5ED, 0xC960AB76, 0x58E41AB3,
+0xF89786EB, 0x0E6B0EA9, 0xFA186776, 0x92BB4E8A, 0x494D74A2, 0x44BDA619, 0xE9E82DA5, 0x0CE6A223,
+0x2F091BC1, 0x45CBB2B6, 0x973F981D, 0x9E4BE59C, 0xFB284854, 0x82B45F77, 0xA7CA1D38, 0xDBA1F6F0,
+0xCF69E070, 0x33D2E348, 0x383C9572, 0x834CAF4B, 0xC7549D2E, 0x68E7FA14, 0x16D3E358, 0x25F3D24D,
+0xC48BAC23, 0x451D5F55, 0xC2B76E19, 0xD665A4B8, 0x2672963A, 0x69CD1E62, 0xEF282B2C, 0xD7E64C22,
+0x83C3DBDA, 0x8028A994, 0x7C60EA1D, 0xD8B9F149, 0x98AC57EC, 0x86165CEB, 0x4288EE10, 0x37803854,
+0xED158763, 0x15791229, 0x0226BE27, 0x600795B7, 0x444E19B3, 0x4C9CE815, 0x025E938C, 0x6B090631,
+0xE2010B43, 0x3174314B, 0xB2C77CAD, 0x20C12D6C, 0x68548CEA, 0x74E45545, 0x21BBD3BB, 0x39643BF6,
+0x51E46EF9, 0x03740E9F, 0x44FDFE78, 0xB673ABC1, 0x716D65F2, 0xB79B7BFE, 0x94BBC414, 0x800D402E,
+0xF89F953B, 0xA64D076A, 0x5FB9EA3B, 0x3C8BEF0D, 0x58CCDE3B, 0xBF4A746D, 0xD538FC2C, 0x84A855E7,
+0xB4F2A2A4, 0x6BCC4E50, 0x984EE4BB, 0xB1531A76, 0x0727C5E8, 0x214CA246, 0x7E943806, 0xF056CA23,
+0x7D07C7DE, 0xE25138B3, 0x987CC060, 0x7C6F8DCB, 0xB0731309, 0xDD6870EB, 0x0C53B77D, 0x7D56683F,
+0x54A41D16, 0x8CEED4BF, 0x20848E9B, 0x7C61E121, 0xCC3C5E0F, 0x97CDE6DD, 0x3B441595, 0x099FC7F8,
+0x1E065809, 0xB1A60D54, 0xFC22BB8A, 0xC86F6B12, 0x3BC08D42, 0x626273AE, 0x12B11E89, 0xB3DA2809,
+0x399D64AA, 0x46816F1B, 0xDF8EA16C, 0xC65EC591, 0x27205CC3, 0xEEBC0D08, 0x52BD43D6, 0xEBA0252E,
+0xF5D6B00B, 0x8472E730, 0x3EBA8BC5, 0x3D33C940, 0xCACDCE93, 0xA446A41B, 0x3C0E52AC, 0xD02BBAD3,
+0x5681D160, 0x6B75E8D1, 0x9810762E, 0xA2630B24, 0x669DECB8, 0x336DBED5, 0xA3E9AC16, 0x9F13DCE2,
+0xAD5DB586, 0xA2A891D8, 0xFE0CF917, 0x281D101D, 0xBA95E5ED, 0xA0106EED, 0x59BF1171, 0x98E79903,
+0x45EF841A, 0xA548646D, 0x9DD54300, 0xD0D2B0F1, 0x2E76BEF8, 0xDFC40650, 0x40813970, 0xF56BF39A,
+0xAD2C87BF, 0x58BD7DD5, 0xE1B9956B, 0x1654D5E2, 0x3C83CF8D, 0x78D206A9, 0x54EC581F, 0x75341A53,
+0x858A66A2, 0x3C72FF36, 0x8A5EB98B, 0xDDFA3D6B, 0x9B0E4CDC, 0x5DB40593, 0x5438E1A3, 0x9F33E310,
+0x30F61A65, 0xF1DA3CED, 0xD70538CC, 0x9883A5FD, 0x88F319E5, 0xCDC1AAF7, 0xD851A8E2, 0xF5CAC613,
+0xBDF2E135, 0x1D5CAC53, 0x622BD0D1, 0xC8267338, 0x3FA49EBC, 0xF114303D, 0x8C9DC3FB, 0x53891641,
+0x176537C6, 0x170EAD3C, 0xD703CAA6, 0x10A38F20, 0x77CCA30F, 0x72263F18, 0xA5EDAF9B, 0x0A8DF3FE,
+0xD6EF5EA5, 0xD49CBE34, 0xF5813FEB, 0xA23C5A9D, 0x10B0E4A8, 0x62113835, 0x5DB33B58, 0xAA77A0BE,
+0xD97AD569, 0x4CD35C2D, 0xBCA7EB19, 0xB82CB7FD, 0xA71CD66C, 0xCC6D0021, 0xA3711DA0, 0x3729C805,
+0xF9B16E03, 0x659608FE, 0x670A9A39, 0xFA29FDA0, 0xEFD61D2D, 0x293C54F9, 0x3F552619, 0x9B68A61F,
+0xA13712A4, 0x0DD48E8D, 0x00716EF5, 0xCD1C65D8, 0x6D961EFC, 0x349431F2, 0x2F9CAE64, 0x1A9A81BA,
+0xD0DA605E, 0xDC0948A2, 0xADD30CCC, 0x3803BF23, 0xEEB65563, 0x5B52E1BF, 0x76912A32, 0x81B1574F,
+0x4FD7DA42, 0x58DC2FF7, 0xDA7C5381, 0xC3CFED68, 0xDBA61890, 0x093CEF95, 0x98940C84, 0xF885D506,
+0xC1FAAD92, 0xDC6578FC, 0x6A90E4C4, 0xB81A8B86, 0xF99F0D06, 0x02480E0C, 0x38C583B2, 0xE5B1AE4F,
+0xAC7F0E3C, 0x15F9D921, 0x61CAF3EF, 0xD16C1A1D, 0x52F1DA6F, 0x460CA66D, 0xF5604440, 0x0DFC55B5,
+0x36481EF8, 0x872ACE8A, 0x31CC4F83, 0xBB4E2BE9, 0x266E0E5F, 0xEC2E0D1A, 0x4CF6C3DE, 0xBB869A10,
+0x20321549, 0x7B7C0FB8, 0x611D1E91, 0x6B88BD63, 0x3676FB0D, 0xF74B0083, 0x7751D0E6, 0x399070AE,
+0x9787C182, 0xB78A0C4A, 0xC47BB57B, 0x47F74B66, 0x3472A654, 0xBB311980, 0x122990F1, 0x95076F29,
+0xFEB024E3, 0x6754F64E, 0xA02F66DF, 0xC00C44F9, 0x70378529, 0x4EDF102E, 0x258BA96B, 0x7330CB04,
+0x49C159C9, 0x3BC465C5, 0x3F792B85, 0x0805DC17, 0x68060135, 0xD0742806, 0x97ECFCBE, 0xF9D0A11A,
+0x36EEF328, 0x6DDF6E26, 0xBDD7C85A, 0xAEE7F0C5, 0xF4B5A59D, 0xDEDD6CA3, 0x15BB8F57, 0xDB685E58,
+0xABD7AE19, 0x8E0059B3, 0xE671ABFA, 0xB566449E, 0xACBC570E, 0x6D6FE3CA, 0x21926EBA, 0x8E35A2F5,
+0x7A40AF75, 0x8E14526C, 0x2114881B, 0x5C19666D, 0x13B44B3E, 0xF4BAAFB4, 0x8B9EF547, 0x3CE6D857,
+0x83FFFB5C, 0x9BAA0A62, 0x8ED161DC, 0xB74EBFE7, 0x59406879, 0xEFE14282, 0x94C71134, 0x70D6F6B5,
+0x22396A58, 0xA869D0D6, 0xB3E772F9, 0xF8E56E16, 0x1C077909, 0xA0CEEAAD, 0xE2DEFF6E, 0xB8CCD437,
+0xEAEAAA37, 0xC29D81D4, 0x919423EE, 0x678D0B76, 0xF1AF7F10, 0x141D3098, 0x6BB371F4, 0x5C526586,
+0x077CC2D3, 0x8810BF02, 0xA80E1511, 0x98085540, 0x57EBF442, 0x833CEB05, 0xE96FC52A, 0xB7E7A987,
+0xC7DAFFA4, 0xD60B8002, 0xC0D3A3C8, 0x891C40BF, 0x10E78852, 0x49850833, 0x7B2AF95A, 0x6FF99583,
+0xACE9365E, 0x440176A9, 0xE07A2633, 0x9DA35B2A, 0xB0F0094D, 0xBCD4EEF5, 0xB3F93A42, 0x425E4454,
+0x8CE0FC5F, 0x374146A1, 0x000CEED2, 0x6A34EAA9, 0xF0C872B1, 0x47EC61D0, 0x6C62F617, 0x45CA6765,
+0x3FC1C9E8, 0x9FE035A7, 0x773F428E, 0xDCC87926, 0xA44B5ED1, 0x53DFC2BE, 0xFAA74361, 0xB22570AD,
+0xB9A4771C, 0xD6354D12, 0x64A261DE, 0x4D674DD3, 0x2C12CE0D, 0x448521B4, 0xE0A22F5B, 0x78D46290,
+0xEF07E4E9, 0x18BB1FEC, 0x9D7B81C9, 0x05637E31, 0x111B9BD3, 0x8D903629, 0xB6A83EE3, 0x07E863DA,
+0xA05EE491, 0xCE150D3E, 0x679B5368, 0x37A1B255, 0x1507B772, 0x37DB2A2D, 0xDA1BCCC9, 0x4264F4B9,
+0x81279C06, 0x55F2C871, 0xBD9B0CBD, 0xC83D757C, 0x099BCBD2, 0x297911A8, 0x40063831, 0x827AE64F,
+0x935575B3, 0xE9BB4676, 0xD4DF7867, 0x36330183, 0xAED29146, 0x6C35ED61, 0x398FD046, 0xE9A9D43E,
+0xAF9775DA, 0xAC01FE1B, 0x330EE451, 0x242F686C, 0x8D5101F0, 0xD49DB358, 0x07ABCCA8, 0xDB70D7D0,
+0xB45D8EC8, 0x84334EEF, 0x84BD0E03, 0x6744173C, 0x7B434223, 0x4F986A2C, 0x3875499A, 0x019CA30D,
+0xB54847A3, 0x6173EBE7, 0x68A21E87, 0x258FF7DF, 0x28FFCE2E, 0x3458AB54, 0x9818AB9D, 0xF91D72F3,
+0x97C6DE56, 0x63726AF8, 0x3C72FB01, 0x422315F1, 0x59A57288, 0x4A9856FF, 0x4B4A8435, 0xECC4D97D,
+0xF4D10D8A, 0xE929DC18, 0x1E20732B, 0xA4062F42, 0xDD739ED5, 0x62FF4973, 0x1C4F203C, 0x1127CB87,
+0x0264D80E, 0x347D66E7, 0x80D33A52, 0xAD3F086B, 0x4588A08E, 0x6741E08C, 0xD558B252, 0x0D69C0FC,
+0x31B3F495, 0x0752B806, 0x5B96B55D, 0xE84671FC, 0x721991AB, 0x5DC73ED5, 0x8C4C5CD1, 0x6C1A765B,
+0x9AF35912, 0xF11C2E49, 0xE93FAA16, 0x6AD86B62, 0x2F82E882, 0x97B2DB94, 0x61E7252D, 0x108A36B2,
+0x6E53F5FD, 0xD7BB1A46, 0x3F517A5A, 0xC5966C03, 0x9362386D, 0x44291788, 0x512A1B9D, 0xE94680F6,
+0x89E96E35, 0x1A6384C1, 0xFF41B9F4, 0x16E4ABD1, 0xCD1AFE96, 0x1D8ACF47, 0x3DB1797F, 0xB1684B8C,
+0xE8915542, 0xA0B81895, 0x3C6F29B8, 0xF6A8516F, 0x0E0D6282, 0x87FE2FCB, 0x237A2D76, 0x49D141D7,
+0x24E995EE, 0xEF804F40, 0xED5D7A12, 0xCBED9CCE, 0xFEBE5F35, 0x9D6DCEDE, 0x83F07807, 0x71A4B1FA,
+0x8C969FFE, 0x54000F85, 0x99356014, 0x10A04A4F, 0x128E12F4, 0xB34423E8, 0xE8ACEA4F, 0x0205EB3A,
+0xDBD9A624, 0x85C15E15, 0x292B8AB2, 0x58C125FE, 0xC8367F20, 0x6E6BEB7D, 0xB145BAD9, 0x1C84EF58,
+0xAA47316E, 0xD46FE53F, 0x5CFF1A57, 0x2ED231BB, 0xE9E4A179, 0xA4F30AB2, 0xC67F8632, 0x19178757,
+0xE463E48B, 0x4CBDDEBF, 0x5419C565, 0xA312CEF7, 0x8A237BB1, 0xA3029D38, 0xEC156B61, 0x7E906B8E,
+0xDB603DF3, 0xA32B0849, 0x85CA2483, 0xBAAFFDEA, 0xBE75EBCD, 0x16624524, 0xF5893343, 0xBFBFC92A,
+0xB0143997, 0x714A9A5E, 0x120A37E5, 0x0E158903, 0x96A52220, 0x587A2D00, 0xFC6DBE81, 0x86CB9304,
+0xD2C9BEB9, 0xA61193DA, 0x671CA4D1, 0x016AEA6F, 0x442D1BE7, 0x1C95117F, 0xFEE7D0B9, 0x1BDA679D,
+0x9C1CAB8D, 0xAA70B289, 0xEA518F6A, 0x9E1F3601, 0x6140BA62, 0xE7B5E07C, 0x42D9C265, 0x5FD8A48B,
+0x1EB9F5FF, 0x18645913, 0x386FC0F3, 0xB4A0CF6A, 0x40DE5AD9, 0x91410061, 0x761B820D, 0x9AC8568B,
+0x31285BD3, 0x37FAFA88, 0x4F35D943, 0x76D8EF4E, 0xB307A3BE, 0x20194E03, 0x77610C3B, 0xC233C362,
+0x27B7E0BB, 0x1128B24D, 0xF9A02430, 0xF4FCD644, 0x4F444CF9, 0x59413ED9, 0x3BCBD6B1, 0xEF7AF80E,
+0x11886B38, 0x17BF5623, 0x3FA27ACB, 0xA454ACB6, 0xD18E2E83, 0xF245DF45, 0x896E7D06, 0xFA85AC48,
+0xC93A7048, 0x8096C4EA, 0x399FA871, 0xDE055751, 0x3B57F01A, 0x278E30FC, 0x1E228C6F, 0x50B41501,
+0xE70C369B, 0x754BBC18, 0x3782AB1D, 0xE1473C73, 0x217ED25D, 0x3234034F, 0x23CE4524, 0xB215E1E8,
+0x817C1DAC, 0x3D050FA0, 0xC78C5783, 0xA7DDFBC6, 0xA4764F6F, 0xBB78A184, 0x68E455BC, 0xB4104A19,
+0x79F21354, 0x0EE2D815, 0xF2E9851B, 0x90F95809, 0xDEC06D05, 0x4D7CD06D, 0xEF551A66, 0x7062FA13,
+0x98ABFFA1, 0xF1D17316, 0x217FDF2C, 0x6EB6238C, 0x0B966129, 0xD96F3D53, 0x1C1D63AB, 0x47CF4EF9,
+0xF5AE5E8A, 0xCF004CCB, 0x1E591A78, 0x08ACF747, 0xB980FA9B, 0x0996BB89, 0xB98BD3F1, 0x74C4B3DA,
+0xAE37FCDF, 0xDB6A230B, 0x90DD253B, 0xED3C0F46, 0x716D1A4D, 0xC6AA3318, 0x9614D34C, 0x803432B0,
+0x8FADD2D5, 0x31151B26, 0x370870AB, 0xC3EB4DA6, 0x802B5190, 0x8125EA9B, 0xBD2754E7, 0x93396431,
+0x8D2C5218, 0x405F11AA, 0x4AB0815F, 0x572DC5FB, 0x997AACAC, 0xAC092203, 0x360EB362, 0x029FFFAC,
+0x2E2FB599, 0x27AF0254, 0xA072A2BC, 0x90B04BB1, 0xAA27C1FA, 0xF6BD3AB2, 0x67B79274, 0x5F29A181,
+0x74EEAAC3, 0xD548EE09, 0xDFAE0C26, 0x6F7AE0A4, 0x92AD9AB1, 0x72A7C5AE, 0x0A91ABDE, 0x786CED01,
+0x1EC7376F, 0x9008F198, 0x9D2D868F, 0xA0770E4C, 0xCE47A3A9, 0xE9971865, 0xF6BCBEE1, 0x4F44DF6F,
+0xBFD56AA1, 0xC26A0164, 0xC417EDB6, 0x031858A5, 0xD57C0849, 0x893F6675, 0xAD9A38A5, 0x419120E4,
+0x1E5A828E, 0x19334125, 0xA0F7E0FF, 0xDE646AAF, 0x9A06F6D0, 0x7E2834FB, 0xE790A669, 0x665CBC89,
+0x18CB33FC, 0x13FA93CA, 0xFF085B85, 0x8F7BAE1B, 0xFEC29793, 0xEB8AF498, 0x385CDAC5, 0x713782FE,
+0xD98899C3, 0x43526A18, 0xDB1FBA38, 0x06D5290E, 0xB80C43C6, 0xA7BB39C8, 0xE489AAFE, 0x167692CA,
+0x13E65476, 0xF237473F, 0x455E5E21, 0x9548C631, 0xDC682CD1, 0xF13B37AA, 0x383CFF24, 0xFF0CF4A6,
+0x8806841E, 0x738FDF22, 0x453A58A9, 0x9D6B02EA, 0x069A983D, 0x74C1AF4E, 0x4C4A1DF1, 0x5AEF518F,
+0x3FCF5E84, 0xC0BEA405, 0xBB35EC76, 0x2753B724, 0x0AECF8FC, 0xCBF0C96A, 0x28B6582F, 0x004B6264,
+0x1B5F0EE0, 0x1409557C, 0x1198E09B, 0x42812F43, 0x9F21B65F, 0x9685071E, 0xDC04B2CF, 0xCC7E38ED,
+0x8FACD7E3, 0x97AB56CF, 0x1852A0BA, 0x8879C93F, 0xC9FC64B0, 0xE4E189DD, 0xB8E2627C, 0x6E066322,
+0xE876D846, 0x1778E2FB, 0xA7745912, 0x6621B759, 0x0FD8A6DC, 0x192FB0A9, 0x47D87CC3, 0x1B7F88D0,
+0x130F1B10, 0xE4155067, 0xD7B9163A, 0xB84709C1, 0xD2CBFA06, 0xD9A30301, 0xF999A281, 0x58A3B8C5,
+0x865263E5, 0xA2B3B1A7, 0xAA6927B4, 0xA738CB2B, 0x20ABF523, 0x5D474571, 0x5CD7CDD9, 0xA485A431,
+0x6DE52362, 0x9020F5F8, 0x993FE7A1, 0x6FAB0634, 0xE4D58733, 0xF05710C0, 0x80D929FF, 0x2DFD8DE7,
+0x06CFFB9A, 0xB5FC4445, 0x8A357AAB, 0xD79F05DD, 0xDE718016, 0x309ACFF6, 0x3C45D1E4, 0x9F3B285E,
+0xBEC11C17, 0x0FDF346F, 0xBE877C2E, 0x7A011F47, 0x9D991748, 0x92410C2B, 0x49DE4DB9, 0x7D27D292,
+0xF86AC8F0, 0x4BAEA13B, 0xDA0CA6DC, 0xB3F03F92, 0x6BA04645, 0xB0478992, 0x7E7C14C1, 0x83B519C3,
+0x2AE2DED7, 0xACE0B749, 0x106C6CE0, 0xE8DD9C0B, 0x6BB1A294, 0xDD346E03, 0x90DE8228, 0xC65C647D,
+0xA808D319, 0x7DA46295, 0xE0CEC3D1, 0x5F5CB184, 0x399F0BA4, 0x298682B0, 0x10DAA55C, 0x3FD77509,
+0x4281CF18, 0x8751FA15, 0xB42D18E6, 0x45F22B27, 0x903270B7, 0x6CD24D1C, 0x86109CA6, 0xC75B4C8C,
+0xF81E91DC, 0xD06B9A33, 0x9DA1AECB, 0xCF51353E, 0x67DA9C4B, 0xB44F0B36, 0x0D509A6C, 0xF6B02FBD,
+0x1B502BE6, 0xC7E0F74F, 0x82FD0EFE, 0x9B6E0EE4, 0x2549172E, 0xEF112E40, 0x6BBDCBA5, 0x646558F5,
+0xB708B67F, 0xB3C60F4A, 0xFE854F61, 0x3A3229FD, 0xC8160E45, 0x5AAB6AF0, 0x80858741, 0xAF0DB08B,
+0xA0B2AB0E, 0xBE7255C3, 0x6AA2881C, 0xD1720D78, 0x9EE61004, 0xFD3B0570, 0x8EEBF51F, 0xDAE04A72,
+0x423A6E55, 0x49E80697, 0x0708A00B, 0xD903A455, 0x95ACE62C, 0x96B3C516, 0x803F720D, 0x60AA7FBE,
+0x63904070, 0x9F386353, 0x2ADADCD7, 0x84692134, 0xEF0C5F65, 0x61B1BFB2, 0x567F0044, 0xEFEB5558,
+0x2AE17AE9, 0x7F797E0C, 0x801F7A75, 0xF33577D6, 0xAA687A49, 0xF993E90C, 0x6D24C726, 0xFDA020EE,
+0x340CA818, 0x27B13BD7, 0xCD383A0E, 0xD5217EEC, 0xC1E7F14A, 0x252BF9E0, 0x908AE93F, 0xEF5B5DEE,
+0x51BE200C, 0x1A208495, 0xCDAD0A6B, 0x009DBAFC, 0x5F318480, 0x48AF59E0, 0xB5BD917A, 0x7C3F3E73,
+0x17DA21B7, 0x7392C2BE, 0x32C1318E, 0xE00104B8, 0x6B1772FD, 0x9FA5DF5E, 0x16400616, 0x28A55036,
+0x5CB8B0B2, 0xE6DDFBF0, 0x72A1EAC9, 0x6DFDF9AA, 0x502293DA, 0x59496A56, 0xB832C02D, 0xA504A18F,
+0x54A63777, 0xD3F94024, 0x1865E66A, 0xC14C44B3, 0xAFEA53F4, 0x0C17E655, 0xA3254559, 0x830881B7,
+0xB6C55A49, 0x72970A79, 0xAE465647, 0x374A183B, 0x7B8FD51B, 0x7870F326, 0x6AA10552, 0x73C08181,
+0x71C9571A, 0xFD9DF46B, 0x467CBA6C, 0x553F9C10, 0x26F4F09F, 0x9BF54DA6, 0x8170D5F3, 0x113DC77D,
+0xE87006C0, 0x6077B2F6, 0x96A1AA14, 0x3E74F943, 0x469C8049, 0xF5FF9AF5, 0xE77EB75F, 0x58FA94CD,
+0x4A007918, 0x3FD3879D, 0xF2650CB0, 0x67AB51FF, 0x62B5C84C, 0x19399BA2, 0x0F43C008, 0x6DC27004,
+0xD2238E9F, 0xEE15E5A3, 0xAE8CEE51, 0x0B18A929, 0xC2E1819B, 0xE3381019, 0x0043F134, 0x148F1157,
+0xBAFC16EF, 0x6CB1B3DE, 0xED471E87, 0xCC752A89, 0x3B04A3DB, 0x799CE87B, 0xC5BE22C9, 0xA5E609FF,
+0xDCE8AB1A, 0x457B0770, 0x3F258007, 0x3367274F, 0xB33D1443, 0xE3938107, 0x65CAE5DE, 0xFE60E0EE,
+0xD08DD83D, 0xD396B659, 0xDC5B389C, 0x0AE84525, 0xF3C9CDA3, 0x8246D739, 0x105CE72A, 0xD1D22BAA,
+0xDAF5D6F9, 0xF047B06E, 0x7327901C, 0x589796AD, 0x9D9DE407, 0x013882B1, 0xBE8E6FC4, 0xC1687D83,
+0xE0CBEBBA, 0x898FBD0E, 0xF2C79DCF, 0xA7F4071E, 0x734ABA42, 0xE8B067C1, 0x69D2550B, 0x51D8DA31,
+0x034572E0, 0x19937B81, 0x19791770, 0xB106492F, 0x1E092861, 0x243FDD41, 0x1CDE20DB, 0x6654B88C,
+0x12C04F96, 0x178C2EEF, 0xAD39C7DB, 0xC905BA54, 0x27E97BB6, 0xD27A6761, 0xDE84D729, 0xDC8ADE7E,
+0x402150E0, 0x2B1F46F6, 0x71FF6117, 0x0485FD1A, 0x72663CD1, 0x80DE6926, 0x98A9FD4B, 0x6FEBE039,
+0x84113D87, 0x5309C89F, 0x9D516D24, 0xF763095F, 0xAEE72CCE, 0xFC89967B, 0x16C71981, 0xA5BA0FAE,
+0x5F46FE91, 0x0E3C59C3, 0x3EF5CD3A, 0xEA7FD8B2, 0x01C1102A, 0xA5D211CE, 0xC95A97C6, 0xD0C4192F,
+0x8A7CD0FA, 0x26AD3214, 0xD7074A6F, 0x3A4D19A0, 0x44B54AFC, 0xFFB4FDB7, 0x8837E9AD, 0x150DC17F,
+0xCB4D39EE, 0x8A815111, 0x13AB130C, 0x10ADCA43, 0xB8189682, 0x49EC0415, 0x9044C764, 0xE97882A0,
+0x3C131A57, 0x142B2EEC, 0x34043849, 0xB0FB7110, 0x7C88F230, 0x46A5BF98, 0xD40413AF, 0x7166EADD,
+0x20EBA889, 0x0316F7AA, 0xCFD7B352, 0xE8BF7564, 0x828B7F4F, 0xB54B6D5B, 0x6EEB15C1, 0x8457BA73,
+0x0E6041E6, 0x1BC55EF0, 0x118FDE2E, 0x34F44951, 0xE759C66D, 0x93F2D8AC, 0x6A5FD094, 0x179DEE93,
+0xECAD5B05, 0x87068559, 0x81DA9D4B, 0x23EDD368, 0x5E86BD6F, 0xE312F0F8, 0xAF9FCDC0, 0x2E54CCC5,
+0x384DF14B, 0x54279837, 0xF17F75AA, 0x9A88F3EE, 0x1503BF5C, 0xE54F0935, 0xFD786074, 0xB5848182,
+0x53ECEE44, 0x63CD4FC2, 0x9399BDC0, 0xDBA00A2E, 0x11AB3D90, 0xFACE915D, 0xD8A939F8, 0x224DACFD,
+0xF323D539, 0x9A790E21, 0x46D4609F, 0xBA170761, 0xB3E70425, 0xF67A7D5F, 0xC76C2F2F, 0x6734AA0C,
+0x74549819, 0x228D1509, 0xF08953A3, 0x13A28E54, 0x7CE1111F, 0x9EB6716D, 0x5FEAC64D, 0x65D46922,
+0x62442699, 0xEDFAB567, 0xF87F2E4E, 0x7C4071E7, 0x189EF617, 0xD3C2EF7E, 0x21B7FB52, 0xE03AB834,
+0xC4D4BA28, 0xFA267C1C, 0x9F9BF7F0, 0x81B01E11, 0x73C3DB63, 0xE033813B, 0x26AC5248, 0xC0F65307,
+0x98230C8B, 0x7595F3CD, 0x5439C393, 0x5B3928C6, 0x2580C663, 0xE8605476, 0xA0E132E9, 0x521D34C0,
+0xF391636F, 0xC449581C, 0x21F281E1, 0xA260F25F, 0xF6B58ED8, 0xD0C17278, 0x2213A635, 0xF23E26CA,
+0x0C110C93, 0x14361CA3, 0x33D855A9, 0x42559FCC, 0x71F36EE0, 0x39FDB650, 0x02A6B260, 0xE1A5452D,
+0x4CE58C01, 0xD723DD4C, 0xA4A1426E, 0x00D9452B, 0x650113E0, 0xD1756BD3, 0xEEF2E8F0, 0xAE04F74F,
+0x936EFF4A, 0x1DA4959F, 0xD1A0B321, 0xD0B1BD4A, 0x4395FB07, 0x9A8472DC, 0x2294BF70, 0x91E12D73,
+0x797C57DF, 0x76D3C7D5, 0x61629676, 0xBD0921F7, 0x3EDDB1C6, 0xF82FC7E7, 0x62600F61, 0xAB32926A,
+0xD963B8A8, 0x1B84130A, 0x5C2FE2AE, 0x2158682B, 0xCB3CCC56, 0x16DF6C84, 0xA078394F, 0x02D6A09F,
+0x7582AFB5, 0xAE0450C2, 0xCBB338A7, 0x519FF22E, 0x1E7DD37A, 0x7AAA3F56, 0xFE8FBB0A, 0xC1AEF62B,
+0xE419301E, 0xE709A47D, 0x970C482B, 0x708FB253, 0x0CD70AC3, 0xADEDE2EC, 0xBE406A71, 0x0FF0D2D1,
+0xDE88C87A, 0xC86D0C7D, 0xF4EEFFC8, 0xEA66D9EB, 0xB291E623, 0x6DE25CE7, 0x2761E41F, 0x7647AA76,
+0x974B8A52, 0x02DD49BD, 0x1830B74F, 0xDE136709, 0x0128041E, 0x985C2CD4, 0x28C49523, 0x6BD4A553,
+0x6F89C71D, 0x4EAFDB0E, 0x2A8F6D12, 0x9BBA3A1C, 0x36D1101E, 0x5239D894, 0xA8021F97, 0x9DF06ED0,
+0x395A1612, 0xA99F3790, 0xC24853F3, 0x32D6BE8E, 0x7362E650, 0xF4956099, 0x77A905DF, 0xDE2D5A38,
+0xEBFD087C, 0x8913EF61, 0xDEF60201, 0x02235A29, 0x3B68F4DE, 0xA8DECCE2, 0xA32E3B67, 0x84A31DC1,
+0x66D19301, 0x29397FA5, 0xDEA9E980, 0x7339A694, 0xA8F916F5, 0x87BDD0A1, 0xEEE4D9D0, 0xDF11B029,
+0x3A0C4E40, 0x3028E972, 0x9F72ECF8, 0x0D9D7BAE, 0xF34A939D, 0xE7D37A5B, 0x98AA9F6C, 0xA83F090C,
+0x946DAAD8, 0x16FF776D, 0x59C0582A, 0x3FA6B89B, 0xAED3034C, 0xD30E190C, 0x83C0E5B3, 0x651AFF14,
+0x58D1A004, 0x53B97065, 0xBBE65068, 0xD06A98C4, 0x719ABBC5, 0xB5A3B5E1, 0xCDF35AFD, 0xF78DB73A,
+0xC45E9699, 0xF712C01D, 0x03F5BEC5, 0x9117398F, 0x9D27BB23, 0x92B3513F, 0xA7B0D119, 0xA20D15FD,
+0xCF9A0949, 0x85EC0EFE, 0x4F7EC0C1, 0x2C9BBC17, 0xE637654A, 0xFB67E3B0, 0x7D01938F, 0xFD45C8B6,
+0xE2270487, 0x3F4DE4AE, 0x01E62DAA, 0xB9361F3C, 0xD32A2DD4, 0xB9040F55, 0x2E448B70, 0x3478F2D7,
+0xDEEB4292, 0x5B6E5E7C, 0x6C29C3BD, 0x2A3AC71B, 0x9DA1B8E2, 0x79864ACD, 0x8C4862F2, 0x930B5130,
+0xD2EA08ED, 0xA7B1D544, 0xE48F8F01, 0x288F4868, 0xAD3D1AC7, 0x15FC9B50, 0x534E6724, 0x544D51C7,
+0x05EE84A6, 0xE261F1BE, 0x6A8F0520, 0x797E2D9B, 0xBC06AEE6, 0xD1A187C3, 0x418CAB49, 0x316C425A,
+0x8ABB12B7, 0x5C96C41D, 0xF6FEC518, 0x4BDA97F4, 0x15CBE1A2, 0x9A617318, 0x4CD83C74, 0xD7AD000F,
+0xECA12604, 0xFEAC4ED9, 0x2B518844, 0xA4741DA6, 0x5D4DEE55, 0x13BDAFB8, 0xDA5047C2, 0xFEA8BD50,
+0xC766C2F4, 0x0FC8772B, 0x4EA3F2A6, 0x6A768CC2, 0x008CA71A, 0xA34FB9D7, 0x6710B027, 0x092AD03D,
+0x78F83EB9, 0x0E088C79, 0x9F172537, 0x7222CE39, 0x01022A19, 0x3122DAED, 0x737715FA, 0x89746E51,
+0xA71F6861, 0xC78A560B, 0x70C068C6, 0xF6DCCA97, 0x90E963D7, 0x2A6A1972, 0xC27F7576, 0x717B49DC,
+0xBDEC18C1, 0x9EF7F9B9, 0xDCC2CA58, 0x30C0F552, 0xDB3166DC, 0x30B36DDC, 0x331B195E, 0xE6526E9E,
+0xB49E2BDB, 0xA9175B92, 0x717BEE07, 0x50F8E909, 0x46DEB72E, 0x06D488B1, 0xCD254E10, 0x29A23BCE,
+0x4AD8FFF7, 0x4DCBBF5C, 0x3BBDCF48, 0xD2CB6DC6, 0x4DCD1231, 0x365ADE6F, 0xF6B5B3FC, 0xFB92C89F,
+0x90870588, 0x042D37EA, 0x52646AF2, 0xBEC2A575, 0xEB4EFB74, 0xD290B1FC, 0x6FA15AFD, 0x0B906B7A,
+0x3938C5C1, 0x3DBD3D0F, 0xD9BFBBFE, 0x0BCA89D4, 0xFCB10029, 0x19AE4DAC, 0xA051AC68, 0xFA34C800,
+0xD9C5AB51, 0xC02548F1, 0x8F1509B3, 0x63024535, 0xFC2A74F7, 0xCE09F328, 0x8B6C6736, 0x5D44EC6F,
+0x8BACCC3F, 0xFD83F3FF, 0xD5871375, 0xE8CCF0DD, 0x29CF28A3, 0x8BA943B3, 0xA1A624D7, 0x4BDC23BE,
+0x70078BE2, 0x869CB401, 0xBCF4C509, 0x26A0F21C, 0x2BF4C703, 0x026BC425, 0xC1D29636, 0xF4C2ECDC,
+0xAE212E90, 0xBCA19BED, 0x3B5164E7, 0x5DC819EC, 0x4A951438, 0xDE5640C9, 0xD9A3434F, 0x67250039,
+0x788CFB11, 0x85216D3C, 0xADCDB841, 0xCF2E13C7, 0xBCBEB8C6, 0xE91E3784, 0x74C91EF5, 0x96029319,
+0x9319052C, 0x757CEA4B, 0x25882C63, 0x411EEC3F, 0xEE0DC227, 0xB7FBD3C9, 0xACB71E19, 0x2C309913,
+0x2AD60A12, 0xD59DF564, 0x7693C7CC, 0x830ECC10, 0x9B7064AA, 0x694F9EE4, 0x36732186, 0x227D295B,
+0x9BC7564E, 0x137CBFA9, 0x5FD6AE63, 0xCF100347, 0xE472D4DB, 0xD223EBC7, 0xDE0ABBBB, 0xBF5BFD45,
+0xB7EDEAA6, 0x6C8E647B, 0x7DF3B6B9, 0x27267E30, 0x446235C6, 0xBB0DD9E7, 0x79B54A6B, 0x4CBADD4A,
+0xCC03C7F8, 0xFBFDCBFE, 0xE864A2B3, 0x6BF96B04, 0x6043D417, 0x425B0126, 0x02EFA634, 0x978059E7,
+0x977882F9, 0x223D3D25, 0xBF958E5A, 0xB6E24F0E, 0x92EF130C, 0xF61BF1F0, 0xF27FA187, 0x91F48D63,
+0x11963C06, 0x45509BDF, 0xF079C4B9, 0x7E90F5CC, 0x741E7055, 0x0863A686, 0xBF40A749, 0x77139196,
+0x3DCB1CF8, 0x64DA5F85, 0xA3B977CC, 0xB60FB84F, 0x4D748EB3, 0xDB1097EE, 0xDAC5DD1A, 0x903ED527,
+0x71CA25BF, 0x3A43F8C5, 0xA7F30187, 0x8C0F489A, 0x6337E4C5, 0x0086A4C3, 0xE320B8F1, 0x4B1BC351,
+0x1B574566, 0x069B3FE0, 0xFB2567B1, 0x353D962C, 0x6D13A62C, 0xE5B27A04, 0x52D12C66, 0x1E23E33E,
+0x4174097A, 0xABFB5BC1, 0xB7A0CDF3, 0x8B1AFC3C, 0x93C542F9, 0xDAED1112, 0x499BD20C, 0x7D3BC982,
+0x0B5445E4, 0x982AE838, 0x82433906, 0x8CBE886F, 0xC9BA6DEA, 0xBC678EC5, 0x5F3EEB39, 0x41BE3940,
+0x6A4CD2C1, 0xCD0F643A, 0xAC32B402, 0x98859FFA, 0xFC123199, 0xCF08DE65, 0xF05451AD, 0xD71D3499,
+0x61B2C6DD, 0x74B6F4DC, 0x73ADF800, 0xF3FA79DD, 0xBFDE6FD8, 0xE5CD4346, 0x730292B2, 0x1C4FAB19,
+0x4BF89CA4, 0x23C43FD3, 0x3B8E5E0C, 0x930531DF, 0xB4ED85CE, 0x916FE142, 0xD4AC7304, 0x3117884F,
+0xAA2C11C0, 0xA128ECDE, 0x3D5DCC40, 0x9458CE17, 0x103EE05E, 0xC69C80BB, 0xE09B9F00, 0x364E61D4,
+0xAB4EA263, 0x0F56569E, 0x4FF9F45B, 0x6EC47A03, 0x605E9678, 0xB458D818, 0x2C75FE20, 0xEFD3F4CB,
+0x8715647D, 0x59AAC64B, 0x9EC69B04, 0x4E1CBEA6, 0xCC99BF2B, 0x17968B62, 0xE137DA02, 0xCF91015C,
+0x7ECF8D02, 0x67C4C125, 0xEF3A68D2, 0x14BAB088, 0x1BE1C6C3, 0x37326498, 0xC7254FD3, 0xA55E3B94,
+0xA92761B5, 0x2E1A2B18, 0xEA661A9D, 0x4C42E15A, 0x8B7F8B2A, 0x6B63AACD, 0xA17CF923, 0x1A90823C,
+0xDF018E0F, 0x6BC1C9DB, 0xF2CD8ED8, 0x5897045F, 0xEA46257B, 0x6B43B85E, 0x8F51FAAD, 0x69C4F395,
+0xFE4797EC, 0xB2EED575, 0x3D0C1CED, 0xB70AE9FC, 0xE1376729, 0xAA5BC206, 0x785D4D7E, 0xC6BF7492,
+0x13C442FC, 0x3F642924, 0x0C2850CE, 0xA2A1FE58, 0x89363FB6, 0x4C7EF408, 0xE335EB6B, 0x980F5643,
+0xC66A40EB, 0x08C86E2C, 0x7F800EF9, 0xE9AF4F03, 0x8B679AA2, 0xBF4AEC34, 0x5F6CE393, 0x96F1B50B,
+0x99237FC3, 0x5B9F445D, 0x3CAD0BE0, 0xB79AFB3A, 0x02F56137, 0x0C225E87, 0xE331D0AD, 0x53010FDC,
+0xD1369D6B, 0x1825DA93, 0xB8F4D890, 0x6BB8725A, 0x5F206BF2, 0x2EF3AD77, 0x79B7AC5A, 0x4E351DF2,
+0x8CF3D3F9, 0x5FC9F804, 0xEA2F9A3D, 0x45091FAC, 0x38E782C8, 0x8EABC710, 0xBC44535C, 0x56C9EB10,
+0x3B14214A, 0x1D2075B8, 0xBE45D912, 0xED5EF5E3, 0xA1E43297, 0x7D85DBC5, 0x5413C626, 0xAB398A69,
+0x6953E3C1, 0x1D280D5D, 0x2728258C, 0x81B3DD4D, 0xA9CD5B99, 0x01C4CE81, 0xD190997E, 0x343FE676,
+0xE0028643, 0xF87360D5, 0x62E32090, 0x84B3F709, 0x460E44CF, 0x37E17132, 0x3EBD5C0B, 0xFD41AFB3,
+0x63B26E76, 0x56929CE3, 0xEC744D60, 0xDABA62F5, 0x97749EB3, 0xBEC5BAE0, 0x9DCB6730, 0xEA949EC1,
+0x69691E55, 0xE712C0E8, 0xF333A2F1, 0xC3080ABF, 0x92C6AC37, 0x31508249, 0x660A8785, 0x5A6F17DB,
+0x4A8D7BFE, 0x033B54A0, 0xE4566F09, 0x658B6AA5, 0x9E785DCE, 0x6D3CAF4E, 0x67866644, 0xD1D61B11,
+0xA26F2F09, 0x065021C1, 0x5C1E7ADB, 0xEC903053, 0x4ADE939A, 0x63434B8C, 0xFA8F478E, 0x4277DC58,
+0x3DDE2C62, 0xF9EC07E9, 0xBF32EB3A, 0xD41684E6, 0xC66735C7, 0x46972496, 0x24CAD5F3, 0x94815901,
+0x17B12F25, 0x1E85A0C8, 0xCA3F66CA, 0x1E396EE4, 0xF901A417, 0x4ABB6E2B, 0x082E86BD, 0x7E7EA85B,
+0xDDAD398F, 0x83C0B8E0, 0x08EAC4E8, 0x789F8BE7, 0x4654FAE2, 0x4D9ED05F, 0xC1FA1B29, 0x9CECB8D1,
+0x7A469694, 0x4662B9E5, 0x21943C8F, 0x303C1FD4, 0xF0E43971, 0xF9B9DEF5, 0x9C536EB8, 0x3B3945B0,
+0x5B532DF4, 0x582C9387, 0xA94713AB, 0x2A3E2B22, 0x5626CB68, 0xBE5ABF88, 0x854A3B2C, 0xC461689E,
+0x8DC5EC03, 0x21DE4F1D, 0xD559D640, 0x05CEE688, 0x3263423A, 0x875D7D30, 0x7A3621DC, 0xE4D8D233,
+0x5D6EC3EC, 0xA5573EC1, 0x0DD13E20, 0x412D54B4, 0xA680EEB6, 0xCE8514EA, 0x0A11620A, 0xDD50377E,
+0xB54294EC, 0x7343AD0A, 0x83EDDB2D, 0xF0D1CB95, 0xEB8A9FDD, 0xEB93FF43, 0x370C2D07, 0x615472BF,
+0xC87BF7A7, 0x7848A841, 0xAB1448F7, 0xF907393D, 0x965C08EA, 0x42FF1104, 0xC4B7B5A8, 0x4CEA8E61,
+0x8020A315, 0x2C451C60, 0x0AE9E5A9, 0xEC79FB31, 0x0E3685A1, 0xBB76D29C, 0x0407225E, 0xEDEA4A6A,
+0x87ABEF4D, 0x9D44E6D6, 0xE9EEEB34, 0xF48DA7C0, 0xB286B6A7, 0x21D11406, 0x7AF37184, 0xFDC058CC,
+0x7D44D71F, 0x8824E3CC, 0x2ADDD69E, 0x05FDCC2D, 0x5ACFD83F, 0x9C8EE90B, 0x84631A92, 0x9F7CB67C,
+0x940202CF, 0x7C055D8A, 0x4742BC9D, 0x7F537BD3, 0x808F0190, 0xB02E187D, 0x23582F1A, 0x765E8238,
+0x149937D0, 0xA86CA561, 0x68915FAB, 0xF2E8708F, 0x6E42B5C4, 0x91B332ED, 0x4D54A518, 0x672DB127,
+0xA0A94918, 0x6AEBA676, 0xB9886E91, 0x72ABE5CF, 0xF8E4324F, 0xC905CF2C, 0x1E95A7D6, 0xB3EC5C28,
+0xA9B42440, 0xD5F3D5C3, 0x719C87DC, 0x06D4AA19, 0xC6F1150E, 0x67BFD362, 0x4DB75AA5, 0x6CC23B21,
+0xD217D9CD, 0xB6ADEE58, 0xFF3596C0, 0xBCC1EC3E, 0xDD0B192B, 0xE2F9E013, 0x0CA521DB, 0xB45C1FC3,
+0x56C07A90, 0x0CE951B5, 0x4F98114B, 0xAA595993, 0x7D824B50, 0x67D965B8, 0xAED67DCC, 0x899C6795,
+0x7CC20A09, 0xF0B9ABF9, 0xA2F75557, 0x25F6E6DA, 0x74B2E4C2, 0xB00A1E4E, 0x18068E5A, 0x5FA9A580,
+0x2908635C, 0x5A8228ED, 0xA98F905E, 0x0F067D41, 0xB4C3075E, 0xCB6D3A7C, 0x11F8689A, 0xC1D61C25,
+0xE9E41E7D, 0xE1C0D4D8, 0x51CF8A61, 0x9390DD61, 0xEF88DBBA, 0x634FBEF3, 0x85BFEB4A, 0x6FBBE404,
+0xF2D11D86, 0x19A2712C, 0xAE7DE5DE, 0x072DC18B, 0x682558FA, 0x2353681E, 0x2EB6F055, 0xD8D52034,
+0x440F56BD, 0x89B0212B, 0xD2C3DDB1, 0x053BF3AF, 0xC46CAEB7, 0x6CC58716, 0x4D9F71B5, 0x041863C6,
+0xA504733F, 0x74CF7B73, 0x28BC09FE, 0x52728A9E, 0x97C60B97, 0x869D5E78, 0x45AE40DC, 0x9DC63AA4,
+0x04730129, 0x3D8E0121, 0x3520CE7A, 0x4A48E934, 0xDD73E7D0, 0x2CF7BFDB, 0x0BF9B41A, 0xD7BC097D,
+0x94A0AC97, 0xD16DBBAF, 0xD1EB76F9, 0x7D308E74, 0xCB4F914D, 0x37C6B42D, 0xDA68CF4B, 0x989DE68B,
+0x9B8EE5C3, 0xC2B3CAA7, 0x4763794D, 0xC7BF1B9B, 0xE83B4B77, 0x9001FA9F, 0x7A0C36A1, 0x1BADDB53,
+0xEC1A0536, 0x117B5A6A, 0xCB39ECF0, 0x7CF1CFDA, 0x976FB23C, 0xA9704974, 0x15B6835B, 0x8B98902B,
+0xB615713D, 0x27916EC8, 0x119C4D98, 0xEE15AA87, 0x9F8498AD, 0x01783C37, 0xB707B779, 0x5928DEDB,
+0x458ABC65, 0x5D6BCB99, 0x0448D269, 0xE2E3FECF, 0x8C642BA9, 0x6F129863, 0x1A5DACB1, 0xE6CD93FE,
+0x3E43D823, 0x8B9E9748, 0x0BC6DB63, 0xF3B342FF, 0x8C110F7B, 0xC4018B87, 0x41AFC184, 0xE52D580D,
+0xEFE64CAF, 0x13BC4F05, 0x73825D5A, 0xC9920B1C, 0x1247A636, 0xEDD65842, 0x1741A972, 0xDA7088EA,
+0xEA017A8E, 0xC7AF34D5, 0x6EC6BF76, 0x6BEE53C8, 0x8D4BE390, 0xEF532677, 0x90F01479, 0x0104E7C7,
+0xD49033D2, 0xE3D3AB24, 0x982955E4, 0xCA9B07AE, 0x7002C959, 0xE8A386C3, 0x3AA78756, 0x63FC1792,
+0x83166DEC, 0x8ABD08E5, 0x41A7A16B, 0x3591DD42, 0xA9EA381A, 0x66B00392, 0x4052FECC, 0x0A701A2E,
+0x3804EAAD, 0x59BC7151, 0x1169B993, 0xE0436279, 0x4AD72241, 0x394CDAE2, 0x0437C116, 0x979C9F1A,
+0x5C2533E7, 0xB57C0D1E, 0x3F64F3CB, 0x83352F78, 0x0E4F5AE6, 0xADF6FFB7, 0x106460EB, 0x043EC5E1,
+0xC74330AD, 0xE1BF757D, 0x21CE054E, 0x0529E68F, 0xFAD006A9, 0xB1044483, 0x21B76E82, 0x2A97FAEC,
+0x356DF2DF, 0x1B2CF356, 0xB46500C9, 0xA212AEA3, 0xA4A0C646, 0xA089FCF9, 0x92A6B030, 0x5EB6AC00,
+0x2A2B38A0, 0xA1B86250, 0xDD45B1E5, 0x37F7EB90, 0xC255CEC0, 0xF0780E5F, 0x74FD2AE5, 0x105498C8,
+0x4EDD1660, 0x29F8CB60, 0x89E529C2, 0x676659D3, 0xF97AE5CB, 0x0642028D, 0xD2521788, 0x1F4EDCC2,
+0xE85CB0DA, 0xD8233F3F, 0xDCCE2512, 0x6560172A, 0x5C290F38, 0x9BDEEB0C, 0xFC34E199, 0x8D74D80B,
+0xD479B342, 0xD852BC65, 0x0B5C8052, 0x2E50FF42, 0x35FFF608, 0xB9FC62B1, 0xA5899CD1, 0x6ABC49EE,
+0x3C9CC257, 0x2C01DD94, 0xA1D50C82, 0xF9B48CC7, 0x2070A3C1, 0xD59BF546, 0xC1B12057, 0x10F406AB,
+0x081158E9, 0xFD276C38, 0xA7670182, 0x85DBB31B, 0x1C4C9516, 0x896E5A08, 0x60F2EB3D, 0x7E45F303,
+0x9278FF4D, 0xBFEC1921, 0x39F4089D, 0x3881236A, 0x11ABC3F2, 0x3B149510, 0x0D392911, 0xE39EE7D9,
+0xC380EF64, 0x6D49F24E, 0xC49047B4, 0x2D0590E6, 0x6AB038F7, 0x55969AEB, 0x207C9B5E, 0x59D366CB,
+0x6F27B953, 0xA11DD3BB, 0x8E95ED54, 0x6A5D8AAD, 0xA09CA15A, 0x8E5CD63F, 0xC0F6B3EE, 0x9C2845DA,
+0xD1201028, 0x0E32C6E1, 0x3B2D860B, 0x868FCF2E, 0x6D0A3C3E, 0xC20ACDAD, 0xC1B0CAC2, 0x52015515,
+0x2AF1B5CD, 0xF293C98C, 0xDC267F70, 0x22FC8897, 0xE4678852, 0xA1FDB588, 0xA85579C8, 0x7E22449E,
+0x52CF26CE, 0x426FC61A, 0x758FE5D1, 0x00B47EF1, 0xB3066A51, 0xA543C66E, 0xFBB3E3B9, 0x56F08715,
+0x32A8735E, 0x2B0B17CE, 0xF9BAC6E2, 0xC06FB0B3, 0x2FD8453A, 0x9BD43928, 0x9169D874, 0xAA56893C,
+0xDEF28816, 0x129D8BE7, 0x9BA825E6, 0xCB83FFCB, 0xF747986A, 0x7DE33D7E, 0x155BA74C, 0x39058D4E,
+0x1288DEE7, 0xA4F9C752, 0x73F8C42B, 0x8F4D9E83, 0x91CB6A82, 0x61B4D0FF, 0xABB7C890, 0x24F8F865,
+0x0A24148C, 0x6A9566A3, 0xDBC294BF, 0x1AE2AE66, 0xB2BA8C3C, 0x63ABDDC6, 0x81FB845D, 0x89F7B4CB,
+0xA9CBA253, 0x8696EA38, 0xB5D8C22D, 0x15714247, 0xEA9B1D08, 0xFCBF1AA9, 0x512AC3EB, 0x8D40498C,
+0x62259E10, 0xAD02915A, 0x647EF3B4, 0x0EF41476, 0xEAAC9ADE, 0x2BED2209, 0x5C6D9A2D, 0x7A9182D5,
+0xB3E0CC2D, 0xE99A9F3E, 0x36945078, 0x2897E634, 0xF9E61BFA, 0x9F410342, 0x67738FA5, 0x43D76134,
+0x8D3CFD4F, 0xC240E164, 0x0400291F, 0x94D76A7E, 0xF1311655, 0xE024356F, 0x933C84C4, 0x58F1AA63,
+0xAF50B15D, 0xA3256121, 0x2BB9E89C, 0x459CCAF4, 0x598A89BF, 0xDDC47747, 0x2F04AF74, 0x2B56233F,
+0x26545BA7, 0xFEDD4B4D, 0xE7C43B9D, 0xF0A1FC75, 0xD5E3B6F2, 0xB1FEBF14, 0xA386F190, 0x6E926729,
+0xEA53C649, 0x7689540A, 0x13DAA020, 0x5AB9B98B, 0xB32D0642, 0x137CD23A, 0x023C42DB, 0xBA62F36A,
+0x5CAE806F, 0x320F3FD0, 0x12722EA7, 0x13B9A36F, 0xE9235FE9, 0x5D77CCF5, 0x8CA7FA8B, 0xA9110410,
+0xC50367DF, 0x6B58EFCF, 0x5E748E3B, 0xC3574389, 0xA6C5753E, 0xD42F01C2, 0xE70BC5BD, 0xE9A61F4F,
+0xB5D70B69, 0x55515E64, 0xB2252626, 0xCAE69FDD, 0x85662B46, 0x69B71119, 0xB4C33D07, 0xCB39042E,
+0x28FB156E, 0x8C2C043C, 0xD1279B31, 0xAD7AE7A7, 0x5A1415A5, 0xE7A0B9A7, 0xC9481012, 0x7EAEBB15,
+0xCA6D0BAF, 0x05CE65D9, 0x5525107F, 0xA2A19472, 0x8BB6D7F8, 0x4BF0C74A, 0x4A5D3A7F, 0xA006D6E3,
+0x0D59702B, 0xAAC40856, 0x8DC91E75, 0xC368A5AA, 0xF3F0D49C, 0xE8A11029, 0x68F30D10, 0xFE4282B1,
+0xEED8FD68, 0xB38391BA, 0x721654AC, 0x7F3E22C3, 0x1976F1AB, 0xC2D0908C, 0x7C05EA10, 0xC8C29F18,
+0x8D0B4416, 0x04576021, 0x8939DAAF, 0xA49DF248, 0xC007EC59, 0x99FAF431, 0xF6360028, 0x5B212E14,
+0xF3306E44, 0xA1E6F7EC, 0x4918DD03, 0x6CB6CD41, 0x2276AC84, 0xA3083C3E, 0x07AE0D56, 0xA21F46E0,
+0x2E4D3241, 0xFE6F46A2, 0x0E8A9AB8, 0x60A2FE33, 0xC6DFEFAB, 0x339F5A96, 0x2D7EE85E, 0x5FAA61D7,
+0x85A3D905, 0x1497AED1, 0x451C5F24, 0x03AF3EEE, 0xEF7CF9F9, 0xE0B6DA22, 0x79D5ABAA, 0x513FEEFC,
+0x05CB757C, 0xCB5A538B, 0xA5780082, 0x86FE5C70, 0x0F2AE76D, 0xB687E3EB, 0x24B915E4, 0x6E4ECB44,
+0xCB517EC9, 0xD909B448, 0x52CB69B8, 0x808FC9AF, 0x392E74FB, 0x91495C56, 0x15C91079, 0x63CDF30C,
+0x1280CCFB, 0x32590364, 0x0EFA9597, 0x591B6CBA, 0x638DCB5C, 0x74A4D44F, 0x9AC5EE71, 0x3D2B2DD9,
+0xC187DFA5, 0x6C98A7BB, 0xB7CCFA71, 0x0D6BB7C8, 0x2EF4CD11, 0x79964B1C, 0x7816B179, 0x3E0297DD,
+0xDB698FC7, 0xA07BDC3A, 0x3FB03242, 0x4E19450B, 0xAF81C394, 0x908470CE, 0x263D8843, 0xBD6E8FAB,
+0x4711AAF5, 0x8D9F691C, 0x69FA1061, 0x38B3EB22, 0xCDCB6CB3, 0x9F9BEFBC, 0x631C012A, 0xDA2CF503,
+0x7E919C2C, 0x035ECBD5, 0xF22262CA, 0xF6F062A4, 0x51FE7F55, 0x8D1E12B1, 0x310C95DE, 0x53664A96,
+0xD6593DDE, 0x7625B0DA, 0x3BDFE19D, 0xEB132C8E, 0x514D1F8F, 0x78F1D473, 0x74EB7DFD, 0x2587E03E,
+0xFC03386C, 0x25C154F0, 0xFECB9BA5, 0x55906B94, 0xBFBDE79F, 0x36BC025E, 0xA794F41F, 0xA3268CF9,
+0xA660E9D3, 0xEA746ACA, 0x004437B5, 0x17D6D84B, 0xA4C212BB, 0x0CB76F5B, 0xA3CB3233, 0x71DBEFA2,
+0x615B9649, 0x75626768, 0xD19AEA59, 0x8BE64212, 0x2778F1D8, 0xCFD73E5E, 0x327B4AAE, 0xC9C1BC23,
+0x69ADE73E, 0xA5D7C876, 0x35BC0CDE, 0x35B5C866, 0x27AC83DA, 0xF7EFF4EE, 0xAF3C691F, 0x31B7611F,
+0x9E7C337E, 0xA2C84840, 0x2A6D66E9, 0x0FADAA66, 0xC030D4ED, 0xAB8A522D, 0x5E0B6A83, 0x4EBC19F8,
+0x68623D59, 0x48964232, 0xA94A0DB1, 0x8EDB546E, 0x1BC0606B, 0xEE112DF0, 0xD44D7BD3, 0x6C04F67C,
+0xADB38D60, 0xD7B5EB12, 0x0C6D758E, 0x25FA398B, 0x6B5FD9C6, 0xE56F0D95, 0xCAC3B098, 0x0F0AAE53,
+0x75F313E9, 0xDFD6F095, 0xC35A2291, 0x834273D9, 0xAF9B5E84, 0xB1C7BA72, 0x91C7402F, 0x92A729B9,
+0x8644096B, 0xCAB99219, 0x8D1CDC31, 0x6377816E, 0x4C3B9134, 0x1598B9EA, 0xB3E89D26, 0x1B90FF24,
+0xFBA97023, 0xE9DA1716, 0x61FF88BE, 0x4F726A54, 0x16E02B68, 0xB0C98468, 0xDD65E0A2, 0x8763C5EC,
+0x47B06BD0, 0xE246D7B0, 0x17654727, 0xAFD84D54, 0x3F76E6FD, 0xAF0C2D98, 0x70BCF348, 0x1D276322,
+0x4CA2964A, 0xF1F07D1B, 0xC2485011, 0x8A832195, 0x1750742F, 0x7600B150, 0x9001C4DF, 0xAF324F55,
+0xA4CE9578, 0xAD834453, 0x42C6D0A7, 0xC2BDFA37, 0x27CAFD7D, 0x67EC9660, 0xD178AEEB, 0x45BB211B,
+0x745F2DDD, 0xCC3C4218, 0xE386B6D2, 0x2BC0590D, 0x9C1D3447, 0x0FA63885, 0x0912A63E, 0x6BBEC8A8,
+0xB721E406, 0x48C42E73, 0x6D9AFA1E, 0x72D5BD54, 0x4DE50EC5, 0x2DADFAD0, 0xB524BF1B, 0x7D0025C7,
+0xFE7B5CF2, 0x9FEDA729, 0xD45070AC, 0x1BEA8B3C, 0xFDF72DD0, 0x95B5A4A3, 0xFD3DE55C, 0x36B2503F,
+0xD02F2662, 0xDDFCECF9, 0x7230F3C1, 0x88B33048, 0x69574FAC, 0xD283A8B8, 0xE6B9F640, 0xCE146F49,
+0x7710BEDD, 0x4755FEBD, 0x794C2179, 0x0808500F, 0x44EAE55B, 0x2AE5FF83, 0xA670E9BE, 0xEE6701E7,
+0xB1637D95, 0xE2D1863B, 0x5E9816EF, 0x0057ED8A, 0xBFB5C58B, 0x7AC055F4, 0x3FD57354, 0x98F60F2D,
+0x6AD3C390, 0x25299641, 0xEDFC6F17, 0x0B12F768, 0xE734E1E7, 0x986596F0, 0x2F882457, 0xA570BD17,
+0xD71C027D, 0x0850B1C2, 0x98385271, 0xB3248C5B, 0x0B322A2B, 0xAA66B8F4, 0xC2570CFF, 0x1EA2C4EF,
+0x5C758B4C, 0x01E9F997, 0x7CB295D0, 0x7C64D469, 0xDD526C22, 0xD143F52D, 0x809DB931, 0x2DB7A6FE,
+0xECF8A7B2, 0x694B5D00, 0xEA41658D, 0xBA48AF1D, 0xBEDE65FD, 0x816C7DAC, 0xB5738FFF, 0xF5C2D671,
+0x08CFD530, 0x6787B523, 0x6EF5D032, 0x4B5D21F3, 0xFFF5979D, 0x8B31208B, 0xE80567A3, 0x2528BBB8,
+0xEBA40302, 0x31089438, 0x8BC683BA, 0xA411ED0E, 0xA38186A1, 0xFB072253, 0x020896A9, 0xF734BD7B,
+0x40EFFA0C, 0x0929E1A5, 0xBB086F0B, 0x47B0B6D6, 0x4AF844C8, 0x06DE77B5, 0x1AC52D85, 0x4B118C82,
+0xE9FBA4C9, 0x385D98C2, 0x28CA9308, 0x113F408A, 0xF1281C98, 0xB532A876, 0xB24D8AF0, 0x9176A3B1,
+0x3B6B3B24, 0x3303EFB0, 0x7BF3524E, 0xD9E575AB, 0x41FC3112, 0xE918E7EC, 0x406CE733, 0x2F8AA58C,
+0x2D18B8C5, 0x29AA62B1, 0x8B6B2EF9, 0x78D261E0, 0x7D57FCD5, 0xA6184606, 0x5E607DD8, 0x244CD7B7,
+0x6D883199, 0x4EF29B9B, 0x0692988C, 0x41BBC851, 0x59F534C9, 0x00EA0B49, 0xA31ACB52, 0x568B73E3,
+0xEBF62CE0, 0xBBFC682C, 0x4059AB28, 0x61C94BD9, 0xAB55E65E, 0x7BEA1897, 0x29CF3BDE, 0x5F6B62D0,
+0x0561294F, 0xF55EEEBF, 0x49133897, 0x1FB17426, 0x12C476C9, 0x229A2887, 0xFBC37C15, 0x6024E2DF,
+0xE8A423A8, 0x38A1CBAD, 0x0F9973FE, 0x6A4A07EB, 0xF21DC56B, 0x397F81E2, 0xA35CF76A, 0xDAC2517B,
+0x92E516C3, 0x30BEF999, 0x766218C6, 0xB99E77DB, 0xD6007539, 0x9D5D4426, 0xE4D8EBA7, 0xA16842E6,
+0xEB7C10F6, 0x5EDFE45E, 0xBAB9E2B8, 0x4A8C9019, 0xF9EA66A8, 0xDFD30BBD, 0xEBF78C69, 0x92D39DDD,
+0xF63431B8, 0x656A52D9, 0x7DAB24B1, 0x729B275E, 0x29E3E231, 0xC1493578, 0x490B44A5, 0x684CBCD6,
+0xA8C80E95, 0x73280370, 0x0A28FD0F, 0x6FB6F486, 0x8432DFB8, 0x26708CAA, 0x820C0A39, 0x7C071B87,
+0x5304164E, 0xF504434B, 0xBBF63214, 0xE4083F8E, 0x7E346178, 0x1A72A75B, 0x840783CC, 0x583AF2A4,
+0x32E77FAE, 0xCD565DF8, 0xF1B3305B, 0x4C3584DE, 0xA71854BE, 0x7BA2D06F, 0x7AEB2B50, 0xBAB2C2BE,
+0x2E687CA1, 0x4B5710BC, 0xF6D53BB6, 0x6CE91A1A, 0xFC82BD2D, 0xAD929E9C, 0xF2F8281C, 0x8E6863AD,
+0x964362D1, 0x4C5EF524, 0xC2471CFC, 0xB6C2CC5C, 0x4A8DC76A, 0xAAADAA4D, 0x35060B89, 0x5D5CBB01,
+0xBEB47E82, 0xD751B953, 0xC9EDAE6E, 0x3F872A36, 0xCD05B5CB, 0xE0CF02D3, 0x131AC2AC, 0x8DF0774A,
+0x9F020FFA, 0x9FDC9AA7, 0x867E531B, 0xB5AB45D9, 0xDC8355B1, 0x3F4217E7, 0xBCD47E82, 0xF2A8B6A2,
+0x05C20623, 0xFC0CDC6A, 0xEA188B5A, 0xE5CA2ADA, 0xDF20AACA, 0x7F48ACFD, 0x4179D3D8, 0x698881FD,
+0x6A204EE2, 0x9CC6D5BD, 0x6A2AA115, 0xAB4ABD76, 0x5EAD8C63, 0x561B232E, 0x786D4DA0, 0x5EC9243C,
+0xEFA61457, 0x3DDE54ED, 0xF7D3155A, 0x7B88B8E1, 0x7662F849, 0x53CCA1BA, 0x3B34A7D3, 0x1BB0959B,
+0xEA441C5F, 0xFAB99EEF, 0x53B9F4AF, 0x57A4D980, 0xA9E04C8B, 0x66BC848E, 0xC6C78D94, 0x716CBD7A,
+0x79BF8EF9, 0x3BAB451D, 0x0F91D1D6, 0xC9EBBCB6, 0x91D6A8E7, 0x22B0506D, 0x96F9DC15, 0xF4E6E6FE,
+0xD57F0A3D, 0x2D78F75E, 0xFF21D3D5, 0x51C44317, 0x471330A8, 0x22F6F845, 0x5DA8453F, 0xA69C6A75,
+0x20E51725, 0x41A6F110, 0x5DD91F05, 0x50D1D1E4, 0xD42556E2, 0xBF6CCB41, 0x9E366AC2, 0x98EFFF62,
+0x53D67990, 0xB9C86280, 0x8718DAB3, 0x9086F80F, 0x2BC922C4, 0x00F11DB1, 0xFC24AA63, 0xD4137540,
+0x6DC742E6, 0x364B8387, 0xF448FCDC, 0xC8E9FE8F, 0xAEB1CB7B, 0xA0FD432A, 0x0BE7FE30, 0x2108D7F1,
+0x7CD3C71C, 0xB5032E8A, 0x99B7D294, 0xCB9245B8, 0xD7E55046, 0x7C278467, 0x5C547181, 0x3A95DBE7,
+0xD94CCDB0, 0x08E40FF7, 0xC4090E62, 0x523A1F0C, 0x8541E20E, 0x0FF30BA8, 0x81D61545, 0x16573985,
+0xC606F9D5, 0xE103DC16, 0xE20D5469, 0xB13B4262, 0xDADC0C96, 0x7B688879, 0xFAC3ECFF, 0x16D9BDC6,
+0x80F83200, 0xC1539DD1, 0x81B7239B, 0x5B812A5E, 0x2FA4D402, 0x602A79AE, 0x7053C397, 0x5894BF83,
+0x546AF3D8, 0x10048410, 0x360E102B, 0x09B0D141, 0xAC7A701E, 0x79951C5F, 0x92E9C658, 0x59FD9E67,
+0xFA3F8565, 0x66A03F65, 0x13BB499D, 0xA60A29EE, 0xC0A82901, 0x7001188D, 0x3CD9CF64, 0x8DF5091C,
+0x96BA13B0, 0x547F4EB8, 0x726B10DF, 0xDB3BEA76, 0x65A1DF95, 0x74CAC214, 0x7FB3BBB3, 0x00780837,
+0x9F3BA54C, 0xB89DA30C, 0xE2A21CEE, 0x54592790, 0x37CCAF03, 0xD2ADFA1C, 0xC2233BC9, 0xCA53BC86,
+0xDF7E3158, 0x4CA54725, 0xC65909D4, 0x25D5B207, 0x11C3BA8B, 0x140A8B42, 0x92E33EB5, 0xD1EA67AB,
+0x85DE2454, 0x4222623E, 0xEAC4B1A4, 0x79C7FC60, 0x38ED9556, 0x9E6DD64F, 0xE0F1624F, 0xB03B158A,
+0x7B92E57E, 0x7BAB2432, 0xFD8EF1E1, 0x0A22EF3F, 0xAF22F0DA, 0x2C0E3320, 0x760E0BFE, 0x2F6C6B06,
+0xEE8ECF82, 0x86450211, 0xEAB8862B, 0xC6368E02, 0x710EDB80, 0x940D7F51, 0x78D0848D, 0x89501185,
+0x315A99CD, 0xC10B7BA6, 0x6E76714A, 0xE7807CB6, 0xF9B7CDD4, 0xC7F6F050, 0x3AF4BF50, 0x333A1ECB,
+0x1FDB8D73, 0x836DD895, 0x60736C60, 0x45E3EFAE, 0x7CA8D9C9, 0x9C136408, 0x43D4B49C, 0x0233D913,
+0x360A26D8, 0x693A1D99, 0x2E8D9BA6, 0x6D41A2FF, 0x02D58D46, 0xEF2CBFEE, 0x482EE0C4, 0x91A0B4C5,
+0x6ABF13CF, 0x8271B463, 0x581BFE43, 0x1232CA9D, 0xFA42C2A3, 0x9CFE0CC5, 0xD1EE684D, 0x91573C25,
+0x2FAB994F, 0xE24B23D8, 0x7E915DA3, 0xC9FFC28C, 0x83A83A20, 0x6CB63631, 0x2FFF845B, 0xF292E991,
+0x407F48F5, 0xE2290BD1, 0x44AF9163, 0xF6E80362, 0x3D0E2DD1, 0x2F6E1DB6, 0xFEBFDE20, 0x587A8BEA,
+0xB82D1416, 0xADD51F77, 0x1BCBFCE2, 0x4700018F, 0x09344330, 0x2063EDDB, 0x5B20DFB7, 0x1507C7CA,
+0xB17AA810, 0xA7546B99, 0x9387CBD3, 0xBE423F27, 0x1BCEEA9F, 0xD2BFF386, 0x13C3DE92, 0x02D84F63,
+0x24DC6A8A, 0x5C47E85F, 0xEC8030F9, 0xB4A053BA, 0x2581E75F, 0xD0B29F66, 0x9A80C6EE, 0xE466D0D2,
+0x7C3D6457, 0x47EFD0B1, 0xBEF2E1DF, 0x9565A7DD, 0x8393C59D, 0x415E8ABF, 0x29BF862A, 0xACF25FC7,
+0x0A43ED36, 0xC5F77C63, 0x951E70FB, 0x6CB68F17, 0xEB143EA9, 0x357F6FE8, 0xCC10E76B, 0x5EC1AB7E,
+0xC9FB7AFD, 0x4138B589, 0xA5DAB82D, 0x1A9249DB, 0x93D66478, 0x98740BAA, 0xDA47BF97, 0x7F80BB9A,
+0x9562362D, 0x5A682458, 0x3BE1030F, 0x0EAF6D2F, 0xB3CE0024, 0x1184D993, 0x532237E7, 0x6D4ECCB8,
+0xF8985ACB, 0x87ED39A2, 0xA1C148FA, 0x4A29BB7B, 0x1DF6485D, 0x197B5702, 0x19FB5FA9, 0x769EFBAE,
+0x796E640F, 0x83C6399C, 0xB10D98FF, 0x9FE97615, 0xADFA38BA, 0x4F85B1F1, 0x3673D7AF, 0x965FDBA5,
+0xEEFB9CB4, 0x36BDF56C, 0x48BDF381, 0x7A5C4943, 0xE815DEDF, 0x335E5A6B, 0x39E14DF0, 0xE7941CA6,
+0x303D68BA, 0x4E2A5C00, 0xCCA1EB5D, 0xABDCAE6B, 0xEBE19138, 0x042AA1C1, 0x229CA490, 0xD1455E6A,
+0xA236CE5F, 0x3A8B1240, 0x3ADB6DB0, 0x69793087, 0xD64F47F0, 0xD1F05527, 0x93881E10, 0xAEBA31F7,
+0x880BFE93, 0x9D50186B, 0x5217899B, 0xB78E36BE, 0xFBF24A71, 0xFD4BE12E, 0xA0A0598B, 0xFA9B5C18,
+0x0F7EE7A5, 0xFA2EAB1D, 0xE1E2FCC2, 0x88A3942E, 0x511775C5, 0x99130607, 0xEF1C936D, 0x959C0163,
+0xDAD04CC2, 0xE3D9A36A, 0xCF71BBC4, 0xA329E3EB, 0xD6C08A5C, 0x2ADD1069, 0x09B4D5C4, 0x1470BA55,
+0x7B0034B6, 0x28EA2A8A, 0x1D728FF3, 0x1A2E8AD5, 0x610A3C3D, 0x51EF1115, 0xDC1E4A8E, 0x87BFE03A,
+0x6DB3E609, 0xBE620662, 0x762F5244, 0xE11812A7, 0x7E1C5622, 0xCF8E1570, 0x3D9C49A8, 0xB671B439,
+0xBD8F0A49, 0x2052C805, 0x3CC95BA3, 0xEE0D340E, 0x1321A909, 0x39B46B56, 0xD33E8A58, 0x00000080,
+0x08EE2801, 0x0000C815, 0xB8210100, 0x09001000, 0x38E0CCFF, 0xEF8A9526, 0xC077002C, 0xB114E42E,
+0x10DF7E2B, 0xF5DDAB7C, 0x8DDF14A7, 0x690CE2C3, 0x24E2FA2E, 0x792EF46D, 0xD1A91E4B, 0xE9315D01,
+0x90FB7BDF, 0x36020522, 0x47038D4C, 0x6F7EEB9F, 0x3DA02813, 0x06E7113A, 0x2989BC35, 0x46CAA7EA,
+0xE95967D9, 0x4D7A1DE2, 0x337AE768, 0xC7BDDEC1, 0xF4562DC8, 0xF464CFC9, 0xFE6BB4D8, 0x9EE54F37,
+0x09E9FDCB, 0x5B9A9F1C, 0x7D2683EB, 0xAB91D77D, 0x00EC3B7E, 0xB9D06B31, 0x7AA1399E, 0xB94C8AF0,
+0x2C40862E, 0x705B2D77, 0x7DC2DF50, 0xE0787AF1, 0x0F5EB614, 0x11115B10, 0x01998416, 0x6B4C291C,
+0xAC9CCFE1, 0x99D43034, 0xDE69F0AC, 0x0285D62F, 0xA56FE2D3, 0x5DAD4FA8, 0x857512DC, 0xF7D1E783,
+0x07B80394, 0xFCC4248C, 0xB3DDC89E, 0xDC038D53, 0x011B9247, 0x6CC6566D, 0xB9604F4A, 0xBEAB66A2,
+0xAC984C58, 0x56AFBA3C, 0x48D82B52, 0x1AB83ED4, 0x92FF6290, 0x706F8544, 0x0A9F54CB, 0xFB047BE1,
+0x5F080805, 0x57B33D84, 0x3887F274, 0x49785DA5, 0xF7AC3138, 0x8B47BB27, 0x9146873A, 0xD4CCDCDC,
+0xE556EBA5, 0x42385DFD, 0x6CED0355, 0x92F187CD, 0xD5E03A10, 0x1177B404, 0x11BF6210, 0xA2D9B60E,
+0x38BA9D7A, 0xE79C394B, 0xA4AFB066, 0x7C02E18A, 0xCF46ACB3, 0x9FE73EC8, 0x8F29583D, 0x8D83AD1E,
+0x8D5A041B, 0x25A40E7A, 0xEF3D0F69, 0x52474FE0, 0xD8BD7D42, 0x0C4EB27F, 0x14B0327A, 0x02CD59DA,
+0x4EEA2A58, 0x9F9BF44A, 0x1D07F843, 0xA7847B72, 0xFE3155BA, 0x8C1A8B06, 0x9D0C67AF, 0x05FA6271,
+0x0541E1BE, 0xD3B5DD51, 0x74368F9A, 0x46D45FE9, 0x32935664, 0x807D129F, 0x3039879B, 0x72E7BB5F,
+0xB1EEF35F, 0x3665B0A5, 0x488216BE, 0x59074D94, 0xE25DBD1B, 0x81B4C592, 0xDE49E335, 0x5CD90BA8,
+0x49F79A56, 0xDF56B0F8, 0xF1840B3F, 0xD99DA1B8, 0x711B3F03, 0xCC01FBBC, 0xBD6478AE, 0x24F33841,
+0x23853263, 0x247F3656, 0x92061558, 0x0919B434, 0x395A4B72, 0xC5E73ACB, 0x9AA03FC1, 0xFDF68E3D,
+0xB6E7D08E, 0xE2285098, 0x49EF5627, 0x28B9E7BA, 0x1A770C5E, 0x8F82DEBB, 0xE16BE859, 0x30B50B90,
+0xC77EB57E, 0xD5E62BD1, 0x398B5EAF, 0x132680C3, 0xE69E938A, 0xDF721687, 0xF8BD667F, 0x4D37360E,
+0x00706393, 0xC7E93AC4, 0xCCC14F78, 0x67258AF2, 0xB9942F74, 0xADC4CE0B, 0x5425B178, 0x5EF79AD7,
+0xE7DF5DF5, 0x6F7A6DBF, 0x396D7F12, 0x370B28DA, 0x9DA64CAE, 0x1653ECDE, 0x208878C6, 0xE9CF3477,
+0x0E972504, 0xAF3564DE, 0xBF1A6ECE, 0xDE2E046E, 0x63E62260, 0x22D796CA, 0xED332941, 0x488DE9D2,
+0x2C538E6C, 0xEE49564D, 0x4593F0DC, 0x08B1A4F6, 0xC765BF2C, 0x1B99FC32, 0x2993235F, 0x57A89036,
+0x1E454120, 0x919DF22A, 0xE021DE80, 0xA945CC73, 0x5C53921D, 0x1654381D, 0xA81172D9, 0x0154B7F2,
+0xE8D163BE, 0xFECD5CE9, 0x28DF25A5, 0xDF83F9D3, 0xDA1E36E0, 0xDC37DB36, 0x3E08E111, 0x3EC4DC51,
+0x4A65B933, 0x2159313F, 0x64FCC935, 0xC9934FCE, 0xC79FEFED, 0x6DA67D53, 0x48E27F8A, 0x088CFF2C,
+0xD9A02D55, 0xE8DAB471, 0x7863BC24, 0x5EDB032F, 0x13B64D03, 0xA3583F47, 0x129C90C6, 0xC6FDF4C4,
+0x4B76A8D3, 0x50BA2BD9, 0xBE0909FC, 0x9922442E, 0x5DF17A9B, 0x6C5CEFDA, 0x41085D61, 0x95F4C523,
+0xD62A7E2D, 0x9A5BD1FB, 0xAA9CC554, 0xAA6843BA, 0x72B17A6A, 0xC91E1489, 0xE1BE496A, 0x4DD54628,
+0xE559D789, 0xB4F4D03E, 0x918FEB2D, 0xBA411BA7, 0x9C1355A4, 0x2BD94F85, 0xD2B0106C, 0x81C313DF,
+0x6B74D7ED, 0xD9570902, 0x6F0DE39B, 0xE8AF0E28, 0x10E4ADA1, 0x08CDD548, 0x66A85A1D, 0x4529FF12,
+0xDA69287D, 0x6ABF799C, 0x8D33EAC2, 0x9D2AC33D, 0xC37D210F, 0x138B274B, 0x418F4D56, 0x847B3A27,
+0xF57EF528, 0xFC860404, 0x65A0B2C5, 0x6FBFD1AD, 0x5F964FDA, 0x9583F550, 0x9C1187FE, 0x7A1CF638,
+0xCDB6566D, 0x260BFB43, 0x4D51BAFB, 0x804AB1AF, 0x67B1E3B7, 0x11909FDF, 0x8EA7F4D7, 0x3E4D5741,
+0xD5BEFC86, 0x475BAED5, 0xA9B22FEA, 0x9D6A77B4, 0x028D5912, 0x7A5DDD2B, 0xD67B03D5, 0x795513D8,
+0x242DC0D5, 0xED3ADD28, 0xCD0410DA, 0xD64572AA, 0x29FE2848, 0x855E03A2, 0x578F9621, 0x7C06B3F0,
+0x721602DF, 0x52B7B3A4, 0x86C7FD47, 0xC724BFB1, 0xFBFEA73E, 0x93A90446, 0x7EB71866, 0xEB41588E,
+0xCE421F01, 0xB27ACE75, 0x2D1B4D46, 0xFA417D9B, 0x68F745E7, 0xD7763AE4, 0x4379CBC8, 0xBDAAE290,
+0xEE5DB94B, 0xBE38E081, 0xE033D37D, 0xAB118262, 0x52112D06, 0x1A5FF446, 0x46F2096C, 0xFD6C0DDE,
+0xF825C38A, 0x1B79B90C, 0x9453E03E, 0x60E91ACA, 0xBA01BFCB, 0x0E5D2F7E, 0x3AFD9E3F, 0x59308152,
+0xB7B8E5ED, 0x2D289E06, 0x10E67F2F, 0xDA27D654, 0x74B2001A, 0x580EFF9B, 0xCB9E9503, 0x7CD61887,
+0xFE86737D, 0xF905B5A5, 0x5A3D97E4, 0x5DAFD690, 0xF0D964B3, 0x6D6DCE26, 0xEB448573, 0xC60B28A7,
+0x4C4487D6, 0xD00E334B, 0x004D3F50, 0xDE00C0A4, 0xAD4D788A, 0xFD01E8FA, 0xA466F964, 0x2184D7B5,
+0xF2267AF5, 0x46D8F921, 0x336B9D1F, 0xE9C38DF5, 0x8E0E9362, 0x25DC483F, 0x568BA439, 0x1293A16A,
+0xF299771B, 0xB619BA21, 0xEF7770BE, 0xF99B86E0, 0xE081155E, 0x6BA2B7DE, 0x5C34B13E, 0xC67EB215,
+0x81053222, 0xEFA8DC54, 0x0CED9DE0, 0x219F22E8, 0xFB6236C9, 0xF34D3EAC, 0x021B0A72, 0x16842953,
+0xEC40ABEF, 0x3E10BBE8, 0x6624CC7E, 0x58B2B7D2, 0xCE45004F, 0xAA922F05, 0xAEF606AC, 0x9D8A1CAD,
+0x371ACA11, 0x3AE21095, 0xD14FDEFD, 0x3750BEA1, 0xF523630E, 0x7786BB79, 0x4D013407, 0x8FE2AF68,
+0x716F75BE, 0x29468C72, 0x01B39930, 0xB513D027, 0x62BCB16D, 0x0E638DB5, 0x0B16EEB5, 0x0A47B80D,
+0x30AF90C5, 0xC7EB5B65, 0xE9190916, 0xD1776E37, 0x3C6CCC8C, 0x8DE23D8D, 0x13C9BF6C, 0x55E5E72B,
+0x3B3AD033, 0xD4538BAC, 0x1EB09743, 0x8520B252, 0x9BE74080, 0x43CAD475, 0x9BE236ED, 0xC0D8C2BD,
+0xFADEA8F1, 0x758D3C7B, 0xB740AB2F, 0x3119B1EF, 0xB96AB7DE, 0x760012E5, 0xF0EF1B1B, 0xB4CC0F44,
+0x2AA171FC, 0xCC7564CB, 0xC27B90B7, 0xCEC74E2D, 0x8FF2718E, 0xAD0698B0, 0x214775A3, 0xEBEDB4FD,
+0xE9F91445, 0x872B6318, 0x2AE47B1E, 0x74039535, 0x38C67C89, 0xEF8F7148, 0xA2727993, 0xEE0D6404,
+0x04A5E9DD, 0x780DE3AD, 0xF5A528CE, 0x9EC7E079, 0x10AFB15C, 0x98244F79, 0x85D42287, 0xC33E68B0,
+0xEE8DF4D7, 0x02EE5063, 0x79E41C5E, 0x1204084E, 0xB4D000C8, 0xF21875CA, 0xE7623161, 0x7278ED9D,
+0x9D76887A, 0x1BC78DC5, 0xE463C7EF, 0x2355C474, 0x29392ED3, 0x6BB67A6D, 0x37DCEB96, 0xBE8B9564,
+0x074A7C9B, 0xC8ADF1EF, 0xE0BCC36E, 0x03DD918E, 0xAD2DF7B1, 0xE668AC1F, 0x398B2201, 0x47FB0D1F,
+0xB821310F, 0x0ACA0E5D, 0x754454F5, 0x02AAE519, 0xCF8FE2E2, 0x36199865, 0x432AE52B, 0x354A6AAC,
+0xEE143348, 0x4DC20855, 0xAEBD6BEF, 0x07DEB153, 0xD2D4AFAB, 0x70CC7806, 0xCADB2C8F, 0x766CB29A,
+0xC5741F02, 0xDE6EA007, 0x701CF719, 0xE443F639, 0x13F5B2EA, 0xE9455F3F, 0x08D9E851, 0xB861A547,
+0x0D6DAB98, 0x82EAD8AF, 0x64D4D25B, 0xF71810E6, 0xEB9C6F3C, 0xCF9FDBFC, 0x659C969F, 0xA18B2928,
+0x1E271F0C, 0xA52AA484, 0xC9BFA831, 0x70615E8E, 0x5A3382BA, 0x622B431A, 0xCCB98DAF, 0x3AA38D76,
+0xC323712F, 0x0238B667, 0x649C870A, 0x4F5DAA44, 0xB3C0FA92, 0x2B8117BB, 0xDF394236, 0x0AD3FBBF,
+0x640A384B, 0xE91D8DA5, 0x318842D7, 0x34210950, 0xC51C756B, 0x8E866E06, 0xAA78DC0F, 0xEE54391C,
+0xE2E64A75, 0xAEA5A1C9, 0x1283EF13, 0x29104D57, 0x1450FAAC, 0x3CEC171A, 0x51BC2169, 0xFBC856D9,
+0x8DC8BBCD, 0xAABD8BC3, 0x0A5D2C9A, 0xC9EABD50, 0xEBBB70DF, 0x2F7ADC31, 0xEAD87E06, 0x4597590C,
+0x5E39CC3E, 0x80332527, 0x90590D7C, 0x2C01704A, 0xCB4445B1, 0x2BCB4969, 0xC1ED25B8, 0xE2492174,
+0x7336A339, 0x81E7CE21, 0x805F163F, 0x9BA5774C, 0x4946B2B4, 0x24266760, 0x8CE96E98, 0x2A36C25D,
+0x8D0A6EF2, 0xE8A02D44, 0x5F3BDD7A, 0x367FBF28, 0x076A3465, 0x150D6634, 0x6E3A83AD, 0x655C0BCF,
+0x0A417E24, 0x8795B5F3, 0x91E80C14, 0x958D8F0F, 0xD123BE49, 0x3AC9FD77, 0xF689D0C2, 0x172F4B94,
+0x6F7C31C2, 0xF8AFD998, 0x1222F4FE, 0x2904FB0B, 0x2A6EDC12, 0xB14F3F0B, 0xB79D8133, 0x3AF7CBDF,
+0xC9CB2597, 0x8D76563A, 0x558577AC, 0xCC6C30E0, 0xFBFD69DE, 0xFD8570E1, 0x986C88B7, 0x1475D92B,
+0x68F58DC4, 0x5B4CC0A9, 0xA3D1CC2F, 0x9625BE02, 0xBFDA8D68, 0xE3EC908A, 0x4C0630A4, 0x5AC4E7CE,
+0x85C28B16, 0xC1D75F9F, 0xCBB03088, 0xC38371D1, 0x9D943390, 0x56197215, 0x9D712671, 0x6E7E0A5C,
+0xCC3EAA95, 0xA9FC2DCE, 0x75AFAF59, 0xA47F7C8B, 0x7858A4BE, 0xD55F9DA7, 0xAAFA3D9D, 0x0505BD4A,
+0x2813988B, 0x290E1228, 0xE73FE1EA, 0x20CB273C, 0x472F29A4, 0x23548BA7, 0xBA90E795, 0xCD9C0FA7,
+0x822B6E1A, 0x7E54BB5C, 0xDAC5FBAD, 0xD1A21177, 0xC0EE7333, 0x21977A07, 0x61A4D1D2, 0xA08945CB,
+0x01936F95, 0x6A5E2D5C, 0xDC1B48B6, 0x96B5F9A5, 0x623941DE, 0xB185505D, 0x9DDBB834, 0x8F631A70,
+0xE93E25D8, 0x9EB24AF7, 0x00884F97, 0xD4E736AB, 0xA95203B3, 0x9946C0C7, 0x6A2F94D4, 0xFFFE38E6,
+0xF5B2567B, 0x884512D9, 0xF485F2BA, 0x6E5512D3, 0x941E42E4, 0xDDC5FDBD, 0xF797D4EF, 0xFBB413B8,
+0xEBE3C7B6, 0xD5D7A606, 0x7D42826D, 0x94AE8CC4, 0x06FA6152, 0x4EE54A72, 0x791877D3, 0xD04A8311,
+0x8B435009, 0x5DFB693A, 0x7F67E83E, 0xFE35C921, 0x8601B8D4, 0x5F43B955, 0x0211F643, 0xA5322ACB,
+0x71BABDD6, 0x16433BD9, 0xD645DDBA, 0xD24582E6, 0x89801163, 0x31BABB54, 0x65090095, 0x23D29705,
+0x08D1A370, 0xDD0AAD43, 0xDB0AEC35, 0x1311B496, 0x6AD3023B, 0xFE5C946D, 0xB9B8E10C, 0xEDC762F5,
+0x71FC7B0A, 0x19E14018, 0x8A68F910, 0xD8A0BCF3, 0x79C746D2, 0x77DE2407, 0x45BB8231, 0x2C712E28,
+0x0C5FF050, 0x7E582A8D, 0x4485E76F, 0x08DD67BA, 0xD4C85C27, 0xA53B2B9A, 0x6440257C, 0xC6FC3217,
+0x9154B197, 0xE1501FAD, 0x829484A9, 0xBDC846AB, 0x9220931E, 0x5D2CA706, 0x0E40BE8E, 0x396A64F7,
+0x68BEA10B, 0x72713E3E, 0xFF0BC500, 0x0DA0C83C, 0x71CA9071, 0x88F5A6C4, 0x8DE256B9, 0x0E046A5F,
+0x7C3752DB, 0x9E24D86A, 0x326E8082, 0x178521C9, 0xF7E42C83, 0xFCDB4261, 0xCF62D66D, 0x5557E617,
+0x0A1AC409, 0x1B0564CF, 0xA27BC07F, 0x848F2EB5, 0x3666FA7A, 0xE8D95065, 0x54C28A18, 0xC43907F2,
+0x35F0F4A9, 0xC7B37D53, 0x58E0C9AA, 0xB55155F5, 0xB50D1C59, 0x13C0CE21, 0xA8A89C0A, 0x9E70E23B,
+0xD1643DDD, 0x2A0B0793, 0x81229EBD, 0x0B851258, 0x3434B9B1, 0x519FD091, 0xB22BB565, 0xBC79D222,
+0x79CB3192, 0xC0F0D4E3, 0x8B880974, 0x21F272F5, 0x435D8E25, 0x16983B3C, 0xD973A311, 0x8EDFF8BD,
+0x4E7D9A9E, 0xB6A56F26, 0xB0678F9A, 0x9BFC1B18, 0x49C8213F, 0x18D6AD50, 0xE174EAC4, 0x2DF53117,
+0xBD88C6F2, 0x9246DE1F, 0x4D48E252, 0x21542EBC, 0xC0189CD3, 0xCE44D965, 0x1F06BB69, 0x38EC61A0,
+0x58C31898, 0x5303CBD0, 0xA309490F, 0x1D2BC7FB, 0x5CF18CAA, 0x3A0765FD, 0x22A4CF69, 0xB1AB3493,
+0x0DD6516E, 0x736A516A, 0x2E48D4E1, 0x41AA6E21, 0xE720EBF1, 0x5935EFE7, 0xFF471DC3, 0x0316ADAF,
+0x662CEA0B, 0xA57639CB, 0x011DFDA4, 0xAAD168E8, 0x62F2295E, 0x6C88DC15, 0x710BD009, 0x0AF3B457,
+0x70D89FEB, 0x94DEBF39, 0x56B42EEF, 0x2F4C8CE0, 0x6C0DE854, 0x18D76EE7, 0x5C80755F, 0xBB170D1D,
+0xFD380D25, 0xC2FF6750, 0x201C86C6, 0x04C664A5, 0x371BC1FB, 0x4FA67824, 0x4BBE1415, 0xB6CD8F0D,
+0x906D7C0B, 0xA82E0599, 0xC30BA1D9, 0x63785C64, 0xF955B43B, 0xACBE22E7, 0x7F99424C, 0xAD9315AC,
+0xE0643AF3, 0x44C6A15B, 0x85C6565B, 0x52EB16C0, 0x9E1EB083, 0xA6E08613, 0x0FDFE149, 0xD926429E,
+0x89CB72BC, 0xEB3DF22D, 0xDF3E2E62, 0xEBFDC12E, 0xCC347EDD, 0x218AA829, 0x16FB6683, 0x894E858A,
+0x197AABE6, 0xB267D6D1, 0x48FD98A8, 0x406A1EE2, 0xBE979829, 0x58B1F7A3, 0xB3F1C8CB, 0xFE3194BF,
+0xA6189E74, 0x1531D773, 0x6495E13B, 0x22CBCB7D, 0xA5159B88, 0xE0F99A15, 0x08B3CABE, 0x3FF5E7B4,
+0x63E1C4F2, 0x75557ED4, 0x655F4400, 0xA7BF1739, 0x10515164, 0x9FFB46BF, 0xDDDC3A85, 0xAA2DF180,
+0x727476AF, 0x167F07FD, 0xAD144D5B, 0xB7D57993, 0xB07FA537, 0x6D7ECFA3, 0xDEE44577, 0xCCFD0014,
+0x27B2EB01, 0xCB8E8CEB, 0x24A4DB26, 0x709F1FA2, 0xC871779A, 0xA310F5A8, 0x4C3FBA78, 0xCD4145E6,
+0x0665FEBF, 0x89636364, 0x61676506, 0x36134902, 0xAA38D6E8, 0x3930FA28, 0x2574BC74, 0xEA0154F5,
+0xDAC72865, 0x0FF7ACBB, 0x9941ACE1, 0xA8D8EF03, 0x237A3D9D, 0x4D56D716, 0xC13FDBE2, 0x0CCDF98B,
+0xEA7764F9, 0xA70BDA7F, 0xDEDE556B, 0x34126CB6, 0x6FFDE046, 0xF2774694, 0x51984769, 0x02FE95FD,
+0x66CC12DF, 0xF0316A72, 0xAF978C47, 0x3A4F56F0, 0x705CF5A8, 0x59658B04, 0xAC47628B, 0xF3BD1AEF,
+0x0500B647, 0xA58E70D0, 0xA4363C89, 0xF114181F, 0x945C8B61, 0x8CBBA9CB, 0xF4BDF530, 0xBC280F73,
+0x595FC4BB, 0x2F99CFFB, 0x538A348E, 0x5397E658, 0x0A7910B6, 0x1C68E616, 0xF35B2AD2, 0x6E6D8BBF,
+0x71958768, 0xB9442797, 0x8365927D, 0x14DFF4B7, 0x7680B8A1, 0x4A4DA64B, 0x92B2C138, 0x31B9D9DD,
+0xBB21F269, 0xE6175EDC, 0xAC3EF84B, 0xA536BC4B, 0xBBE21FBF, 0xB3134324, 0xE12C65F1, 0x20D6960F,
+0x309B393D, 0x6EEEB9CA, 0xFBCA7CA4, 0x9A7B9AE4, 0xB1F143E7, 0x2CABB77E, 0x322C651E, 0x7E5E2FCB,
+0xA0A9173E, 0x28B1FCB9, 0x732C4F61, 0x7C6AFDC8, 0x114B5C20, 0x0B2718C9, 0x1BC254B6, 0x95257A21,
+0x7037E1E4, 0xA7180208, 0x537806EB, 0xC4441F30, 0x5C1A7B55, 0x804027E8, 0xB5D3F1EA, 0xDDA9CFCB,
+0x9CB432AD, 0x5EEF2E84, 0x7EFC3BDB, 0x1580198A, 0x898115DE, 0x214DD3E1, 0xEBF336BC, 0x358F807E,
+0x87F02300, 0xBCB8DE05, 0x9C5FC4E3, 0x049DFACC, 0xC96F4EBC, 0xFBFBC5AB, 0xC0D18EAB, 0xCC2B21C4,
+0x4B241CD1, 0x32C3435A, 0x1D8736D3, 0xCA5AF306, 0x6FFD1BD5, 0xA2DFBEF8, 0xF0E45DD3, 0xC25F96B9,
+0x29D968DE, 0x31853FC0, 0x69C2B59E, 0xFCE52357, 0x3460A5FD, 0xE6991AF1, 0xDB230B5C, 0xD0F254A2,
+0x5027B6B5, 0xF0338E6D, 0xF7984956, 0x835F0CF7, 0xEAD3A942, 0x48ADA804, 0xF2FA4E3E, 0xA7C43FF3,
+0xD0801DE9, 0x09E7692C, 0xB6223CC2, 0x75187259, 0x8ECBD406, 0xA865DDAC, 0x3EF567DA, 0x83DD5968,
+0x8ED49933, 0xF1F7D31B, 0xF638706B, 0xCBF710A0, 0x1D55FFF7, 0xEB6A47A5, 0xDCEC8F31, 0x498705DD,
+0x3068C7A7, 0x3EEBDAF7, 0x3FCAD353, 0xD39CB7CE, 0x66249B2A, 0x061043D0, 0x8DB7BF56, 0x32F08C09,
+0x8902C2B6, 0x4BA38A5A, 0xBF4DFA47, 0x4AD86A1C, 0xC9640E93, 0x3AC87D45, 0x9F4627F1, 0x1DC5BF84,
+0x717F4FEE, 0x5308923D, 0x0C4A46F4, 0xD6CCBDA3, 0x22048C34, 0xB00E4B6E, 0x87494543, 0xE5C27406,
+0x1A5B8AB7, 0xAF16F412, 0xD5B264DB, 0x76F0668F, 0x658627A7, 0x354F2295, 0x5E95E9A0, 0x3FE5A9C8,
+0x53E9A5EC, 0xE872DD89, 0xABF82495, 0xB58C8853, 0xAD8A3A8E, 0xAF6AADA4, 0xB29AE15B, 0xBC43A1B4,
+0xB049EED2, 0x97021929, 0xC561C2C3, 0xFC0397DE, 0x5C26F259, 0x4E91857E, 0x444A2BB9, 0xADC4B9C5,
+0xD0D20C47, 0xAEFF02B4, 0xE5A250FA, 0xB05C6374, 0x7024B462, 0x7F1AB75B, 0x4290CEC1, 0x0169C2DB,
+0x5FC0B755, 0x68C3902A, 0x1EC03924, 0x2115E717, 0x1268E413, 0x399AB990, 0x329110DD, 0xA6215C39,
+0x25727191, 0xC921D208, 0x590DB343, 0x101DC0A9, 0x2FCE4A0A, 0x6009AC84, 0x56EC3F6F, 0x64E4A1C3,
+0x1DFBA900, 0x4A08E272, 0xAC6244B0, 0x472E0CBD, 0xC1B293C3, 0xF6281C07, 0x1AD43485, 0xDD4F0B6C,
+0x5C0FB653, 0x12A90ED6, 0x511EC6FB, 0xC8A7AEE7, 0xFC6F6814, 0x609AF11B, 0x1CEAFAFF, 0x81FF5983,
+0x0FF9B1B6, 0x8449FB1A, 0x937DCFD3, 0x5D70D6F4, 0x6E40E0F6, 0x6080D1D7, 0xB79E3BAF, 0x699BE2CD,
+0x96AEDF88, 0xCD6FEE9C, 0xD3F83FDD, 0xBDA387D6, 0xB301DF58, 0xFB6BE299, 0x5C6E8BFD, 0x7B776E31,
+0x46DA82B1, 0x7E77EF0E, 0x631B8058, 0xA56B1524, 0xD4EE4273, 0xED6251D4, 0x4F722D74, 0x6146C3D0,
+0x77ACEAD0, 0x72EF40EF, 0x84F960EB, 0xA23E9097, 0x8AA4C45F, 0xE8FC33B2, 0x2BA812A0, 0x2B0831B9,
+0x488266D9, 0x0C4EAE8C, 0x71A2CF26, 0x35A15B3D, 0x211CF384, 0x99EAD436, 0x0034D1B6, 0x7B98D6E9,
+0xAF4D54C0, 0xD90646B3, 0x236AB313, 0x9023D984, 0x4AEE7091, 0x850D6D93, 0x8FF67069, 0xA55E88CD,
+0x4DE88661, 0xCA5B71CD, 0xFD757B9B, 0x76F0B93A, 0xD88CAD10, 0x2BD428A5, 0xFB75E379, 0xC5AF1A8B,
+0x563FC872, 0x3A271D92, 0xD24991FD, 0x969F7F3F, 0xEA4F33F6, 0x82C53410, 0x23B17971, 0xECD5EA79,
+0xB2C66FC4, 0xD1F27F40, 0x39B10D16, 0xC08D89C4, 0x1F7AACD7, 0x99222454, 0x0324255D, 0xB572C8FF,
+0xC5EA3D54, 0x45984107, 0x2AE17815, 0x8BDF2D21, 0x57E5C3AB, 0x3CB898C6, 0x2CFF5B38, 0xD2EC9756,
+0x1B330EBA, 0xF15DD0E3, 0xEFFCBCFB, 0xB4C9035C, 0x2D38AC35, 0xE015DF1B, 0x41FF7A04, 0xE7EF0621,
+0x85190286, 0x31F7BA4D, 0x04ED9CB0, 0xF09100DF, 0xFF01AB27, 0x4D510010, 0xE1C22892, 0x4EE9F0A3,
+0x0D3CA3C7, 0x84245201, 0x6F25AF1B, 0x78AC01E2, 0x04BEAF57, 0x62B34DA3, 0x458C4366, 0xC70597B1,
+0xE1A578FE, 0xE8299DC9, 0x1472DFFF, 0xD411862C, 0x9FD29C2B, 0xC0FE4527, 0x41E1A201, 0x875CA4FF,
+0x25772B34, 0xC4BE01B0, 0xB2F5D0AB, 0xA78F6505, 0x80DABEDE, 0xD953C25C, 0x1352A1A6, 0xA8FEEC1E,
+0x4C27FA65, 0x4C5BBE84, 0x6820FC36, 0x00EEEAB2, 0x067C571E, 0xB8E56EA6, 0x13EF0BA8, 0x1B817418,
+0xCFDF4B09, 0x49062F99, 0xFAB32F9D, 0x771B6686, 0x180A3897, 0x7E856E42, 0x9A35290E, 0xB918C7B7,
+0xEB0D1B7D, 0x7171FA5C, 0x81442E8C, 0xAD0FEFF5, 0x641FC88A, 0xC546B04B, 0x9F64AB87, 0x512394F5,
+0x100B4294, 0x84954610, 0x4617E032, 0x48C4CBAA, 0x335BEA78, 0x65EF6506, 0xB9471080, 0x28FC4FC2,
+0x4DBD6017, 0xC8C3964A, 0x94C29E19, 0xA5007A93, 0x4793011B, 0x0DB75905, 0xB1ACEDF9, 0x83DE12E2,
+0xD8993C6C, 0x04250170, 0x1CA92C8D, 0xF06B6395, 0x4DB9B129, 0x1D86DD79, 0x44779A0C, 0x725879D7,
+0xC63AE387, 0xFF6EA877, 0x680ADD96, 0x2DACA363, 0x1F42607B, 0x855265EC, 0x80F849BD, 0x7C395A62,
+0x0043974B, 0xC5A4D9CA, 0xE6FB45E9, 0x14F62526, 0x93E0A038, 0x77D3F11C, 0x2F1F757E, 0x68FB1E01,
+0x0C46FD1B, 0x6ABBF5C6, 0xD2100D0A, 0x63FD6670, 0x3C865F59, 0x4529F5E3, 0x8D67C2BD, 0x87E927C1,
+0x45CE8950, 0xDC228783, 0x55856A1A, 0x6DEB35D3, 0xD5B4F25E, 0xC563A145, 0x188963DE, 0x7CBFD45F,
+0xB6AC8822, 0x3D3ED94D, 0xEF7E957A, 0x41F20458, 0x58ABA251, 0x1B8E171E, 0x485C7AF3, 0x73ECEC95,
+0x9DAFCB2A, 0x3C3A158F, 0xD632E8B3, 0xD22BDDA0, 0xA69FCCC4, 0x7C3CA76E, 0xB594516B, 0x06FA6880,
+0x095AC77F, 0xC5410FBC, 0x4C27C1B6, 0x881B626B, 0x238AD918, 0x954D3464, 0xF71C874D, 0x63FB622A,
+0xA1CA105B, 0x87B5C742, 0x6CED6C71, 0x9AA593DA, 0x7C9A8736, 0xF491007F, 0x8FAB6062, 0xC6FB5E85,
+0x4893ACEE, 0xDCCD04E2, 0x0CC0BC4B, 0x4063E450, 0x8CB1F295, 0x1B6036A3, 0xBCA6C0DB, 0xB97E4EC0,
+0x0B1B7B7D, 0x67E86A05, 0x5D17BACC, 0xBEA49F2D, 0x46E5BE0C, 0x38DF1B5F, 0x2536674C, 0x9BB83892,
+0xFD02538C, 0xE2286F37, 0xC4E2FFEA, 0xEBBDE649, 0xC7163C10, 0x911E1129, 0xFB51FEC8, 0x0C77BE9A,
+0xE0248718, 0x66F2DF66, 0x9F3A3F7D, 0x06AFE789, 0xB9018DDD, 0xE198C884, 0x695A7EF6, 0xABCBEACC,
+0x6D2D593F, 0x4D406D27, 0x2B269CF7, 0x487FAEA1, 0x0FD84880, 0x82458619, 0xBF4E6508, 0x89DC021D,
+0x1CAED290, 0x4A0B5DE3, 0x6FFB61CB, 0x2203DB58, 0xE7C505C3, 0xA5638E27, 0xE4E339D6, 0xA30153FA,
+0xFFDAA5AF, 0x6C9E06AD, 0xECC58011, 0x863C5CF0, 0x393A43B0, 0x23DF7414, 0x089F5B30, 0x90DCF312,
+0xFB4F4AA7, 0x638113F3, 0x9605FA37, 0x6D2BB8C5, 0x27029174, 0xEB4D7382, 0x1C0814CC, 0x493BC40B,
+0xB205AADB, 0x5F1750C4, 0x0BDEB3A2, 0x19316BC5, 0x31C1FECA, 0xB5BDB6D5, 0xFD8CE40F, 0x88EDE490,
+0xF5317F83, 0x1DC737B0, 0x787EE42A, 0x4B5D7461, 0xFBDE94D2, 0x4EEC9A1A, 0xA3A6F6FD, 0x26B1DB16,
+0x536F3C2E, 0x2AA76218, 0xC265DAAB, 0x85B7EEAD, 0x163BA402, 0xBAD8E175, 0xF14F7B80, 0xE9D19AED,
+0x16BD26F1, 0x161945B0, 0x98C7E704, 0x655888E9, 0xDF86B625, 0x17F0A5B7, 0x7B4ECE21, 0x4016E031,
+0x8EEFD039, 0xF46B3667, 0xDC2BFF92, 0xC48A7788, 0xB09A3068, 0x509653CC, 0xA4B69EAD, 0x9038129D,
+0xF43D6F7D, 0x14DB3A89, 0x5344AB38, 0x10A50916, 0x48C69979, 0x4E198EC6, 0xFC56B4EC, 0xD8443079,
+0x5FE2579A, 0x4CDDA75D, 0x137F6169, 0x78D9B2C0, 0xC1FC00B9, 0x63CE56CF, 0xB6B54488, 0x8DCF6127,
+0x49C3C734, 0x65D3A548, 0xB0919B79, 0x337CD6AC, 0x8EDB8A8B, 0x782D6139, 0x82D527A1, 0x07768CDA,
+0xAEE307E7, 0xFDC52163, 0xC8436BC9, 0x5EF6A497, 0x43190395, 0x79444279, 0x33872364, 0x90E5B2A0,
+0x846E2793, 0x4428D767, 0x8FD4F18C, 0xA6CC0D35, 0xB4EBB5AE, 0xA0039DEE, 0xD2A1DAE9, 0xA90C3C10,
+0x527E2B24, 0x82BCDBF9, 0x9C65725C, 0xA0F62242, 0xAF8E79F8, 0x50547CBF, 0x46E3D18B, 0x0F3AFCE5,
+0x936E7E96, 0x2C0DFAE8, 0x64715EB4, 0x61BAA9A5, 0xEAE2134B, 0x2DF98D48, 0xBB340C45, 0xF337ABEA,
+0xF9B1E628, 0x28BE2E82, 0x6E3D3B2E, 0xF525A802, 0x42260D6F, 0x76677900, 0xDF76E24E, 0x95BD1C3D,
+0x9F9A7E3A, 0x2FF2E4B1, 0x6F4D4EAE, 0x2145E100, 0x57345625, 0xCFBB5119, 0x296755A1, 0xCEC8107E,
+0x56BC0A0B, 0xC6A0C921, 0xB129FD5D, 0x24661F99, 0x6338FC73, 0x2EACC7B4, 0xEE279B7D, 0xFD3FDD98,
+0x14ECC496, 0xD7FB206D, 0xE8F55381, 0x6069598C, 0x1D9F7F4F, 0xACAB6AB9, 0x83C3D042, 0xC5E502B3,
+0x4A02A037, 0xCDA8922D, 0xC5558CEA, 0xF48FDBDE, 0xCFBEA9C7, 0x93C786AC, 0x5C54C665, 0x4A2A9B20,
+0x76022A5C, 0xAAD96F83, 0x6C0CC497, 0x3D758F43, 0x6B4A2267, 0xDF4A8B20, 0xBFDCF200, 0xF7D68C98,
+0x2074465E, 0x9461CA57, 0x7457D093, 0xB285D724, 0x84408D50, 0x438B2932, 0xD85CD316, 0x34284145,
+0xA92FCF17, 0xEB2E38B1, 0xCB4BDB1D, 0x8AE63455, 0x0EBB0FD6, 0x077D00A1, 0x89864EBC, 0x6F284CA9,
+0x77E4D31C, 0xBB21C2D6, 0x98FF201D, 0xC61506F9, 0xAD6686B0, 0x7795D1A7, 0x0198C10F, 0x7BB11C16,
+0x74C523F9, 0x566D9F4F, 0x88151912, 0x2D7A4523, 0x91180601, 0x137C8B99, 0x7BA9080A, 0xBBE0FE7E,
+0x33D6D60B, 0xBF9F0D38, 0x804A89A7, 0x2F27651A, 0x261A7D7C, 0xFAF11983, 0xC1EFDD77, 0x94C1C802,
+0x9EDD5402, 0x77825C78, 0x18C737E2, 0x8EA1DEEE, 0xF9201157, 0x99F57FED, 0x28CCE01A, 0x3B1122CC,
+0xEE68A419, 0x92D6556F, 0x1BA6FEC4, 0x8FDCAAFD, 0x42B79DEC, 0x8E9FC6D4, 0x9A5E47ED, 0xCC1E682E,
+0xE369E295, 0x76B0FF4A, 0x3706895B, 0xFA769C09, 0xEE2191CF, 0xB10D819C, 0xEE2C5873, 0x9FA9FED4,
+0x826E6A36, 0xD57E0403, 0x92F4CB15, 0x3697B5D4, 0xDCD7A269, 0xC6760F9F, 0xC208D0B9, 0x3A88B6D0,
+0xCFF16304, 0x0A7ACE33, 0xDA372041, 0x78F692D5, 0x1EA2EA76, 0x977A9049, 0xD5D597A2, 0xE9446110,
+0x7AF8C9ED, 0x78FFD712, 0xEF9CBC70, 0xD46CD797, 0x02ECF3AB, 0x6A5FCF17, 0xE2570232, 0x1C1FCB88,
+0xC03ADF93, 0x85CD44B5, 0x7061F853, 0x31006CD9, 0x52C307DF, 0x25630DFA, 0x04D98485, 0x66924D2D,
+0x583115C2, 0xD5064CD4, 0xB847B89B, 0xE1C09CD5, 0x669AACD1, 0x6771E7C0, 0x5D0D905D, 0xB3C702A2,
+0x56F412F0, 0x764525B2, 0x06E4A3D0, 0x72387640, 0x603A63B5, 0x87AF7D11, 0x9AC5F4D7, 0xD8F8E832,
+0x89253459, 0x01F84A7A, 0x2A2674E5, 0x7DBC8636, 0x0316CBB5, 0x7DD4445E, 0xC938310A, 0x4A01DBBD,
+0x6639FD04, 0x2B980CA1, 0xD8665E11, 0xE2EA7DCF, 0xCE6FCCDC, 0x46F914B3, 0x82F325DC, 0x3C391BB3,
+0x32AF96D8, 0x89037C7E, 0x3A963039, 0xF2C52B7C, 0x8F73538E, 0xAE95FABF, 0xD30AAF96, 0xE7919209,
+0x1CF99345, 0x250B5151, 0xB0EE8ECF, 0x4F29D375, 0x7B655A0B, 0x63B4204F, 0x9D9267E8, 0x7EFFB98B,
+0x09B46658, 0x98DB4958, 0xB9EFEDD0, 0x4B2D22E5, 0x1F842D16, 0x1445DB7E, 0x7C34F247, 0x1EAFE641,
+0x4403F7DF, 0xC2BDA903, 0x44305BBB, 0x971E08B1, 0x7F7731B3, 0x3FA8F4D1, 0x4E095726, 0x179BD242,
+0x311072AE, 0x94E4E88E, 0x8DEDA398, 0x6367C78B, 0x34B74DF3, 0x8ACC5B5D, 0x3AD6AD78, 0xB91D573F,
+0x2AAE8AD5, 0x13BE6A8C, 0x87679C51, 0xA4F665BD, 0x6DD35A79, 0x6C2E6A6D, 0x74937653, 0x51C88092,
+0x082C7516, 0xC2BBCEE4, 0x351628BD, 0xD95EA50F, 0xEF474E07, 0x2A5EE5E9, 0xBF796704, 0xA92F7325,
+0x05C0B69B, 0x6E102E16, 0x178462CB, 0x5D184FBB, 0x27EF35E4, 0x2EF44206, 0x4FF6550A, 0xAC047819,
+0x78DD14AF, 0x88993D5F, 0x197E07B7, 0x7ECDC5E8, 0xF37C39A3, 0x6CF231B7, 0x5CD6C70C, 0x3D5FBF89,
+0x169785B2, 0x01FB0913, 0xF3A321CD, 0xF53227B9, 0x869A001F, 0x7F401BF1, 0x61B30855, 0xB610C10C,
+0x014E6533, 0x4E0EDA1B, 0x947F9DCA, 0xE03529DC, 0xB5749569, 0x5ED1DAE9, 0xCBADA852, 0xF38BB057,
+0x321F6FC6, 0x7F257FA0, 0x265DC58D, 0xA52EF6BA, 0xF49A36E9, 0x1BD63A2C, 0xA2F1D648, 0xB9D6571B,
+0xD5081699, 0xD6689F89, 0x7FCA821B, 0xD83890F3, 0x7134F4A4, 0x894AA1BF, 0xED5365C5, 0xA3A65B5E,
+0xC207A02E, 0x4EE974FD, 0x8FC2207B, 0x30EE52AE, 0x2FE4FE59, 0x87D6E864, 0x4D367F68, 0xABE6E4DC,
+0x203ED5F4, 0xC53EB446, 0xC58517DA, 0x8A1498DD, 0xE889BCAD, 0xF2BE1331, 0xBD9A65C4, 0x2DAA7157,
+0x2BE3142E, 0xD64B234F, 0x3D302238, 0xD29137C5, 0xF9E1555C, 0x245D0397, 0x71E02802, 0x9307C54C,
+0xDC4CEE97, 0xACA8F3F9, 0x6912AD3A, 0xF77C6B7D, 0x0F5807B5, 0x53584305, 0x9148E059, 0xBE35AD62,
+0x6600CB79, 0x021E6386, 0x41BE35B2, 0x2E00D2A7, 0x291B1FBB, 0x5921F2F7, 0x0CA6E33A, 0x6866FA1C,
+0x951C3A33, 0x5A266202, 0x8DC7B8C5, 0xA5BA72D3, 0x53D8CA26, 0x3EA8F431, 0x6CA4D059, 0x20D7737F,
+0x53F3CF35, 0xFC56F722, 0xE2D2C805, 0x0026DA9E, 0x155F2698, 0xEF07872B, 0x93341450, 0xC4FE4A5D,
+0x9AC58E99, 0xCF395B72, 0x66CAB660, 0x4D01FDBC, 0x95FE69B1, 0xCE328E44, 0x38066B16, 0x91024DA3,
+0x87412BE8, 0xB10A1096, 0xDE6BB71D, 0xF44DC23C, 0x3895EA80, 0x3E2ECD3A, 0xD5A5C4ED, 0x5EFC4D57,
+0x441EAB20, 0xD89EBC65, 0xDF67679E, 0x46CFE107, 0x8B09981C, 0xDE837B4A, 0x8B0E3A90, 0x3FE48C97,
+0xF1B576C9, 0x74FBD1E6, 0x4E325589, 0xEE66C8E9, 0xB8DF6F03, 0xAD7E3DF4, 0xD94E3D71, 0xE3FAC0A5,
+0xCE151EAD, 0xE21AAEE0, 0x48B58550, 0x580FAB74, 0x423042FB, 0xB4DB7241, 0x71DCCEC6, 0xE3B2DC66,
+0x42B2DB02, 0xE0E9B300, 0xCB9057FE, 0x88E0BB81, 0x0173C5B3, 0xCCC9F2D5, 0x2DC1F1FD, 0x409706CD,
+0x0690B06C, 0x2FB088B0, 0x378657CB, 0x4E2C168D, 0x1CBE258C, 0x088B10AB, 0x9CB65C1A, 0x4779EDD8,
+0x0F2D2F3B, 0xF84BD38B, 0x2B86D747, 0xE69E2020, 0x41CD3E4D, 0x2E251208, 0x2987D685, 0x03153A8E,
+0xFE4691A7, 0x3A0ADE3F, 0xE382D144, 0x65583298, 0xE50F6CB5, 0x7CE84605, 0x32DFA961, 0x6E236B79,
+0x11758931, 0xA8F33F2B, 0x6190996D, 0xEB4C6963, 0x5CB04192, 0xE9B08EFE, 0x79B4BE5F, 0xA4106087,
+0x5553A085, 0x73A17F1F, 0x2F8CFD51, 0x5C38C46E, 0xF409B242, 0x9AF5B9F7, 0x2F5FCCF6, 0x5508D675,
+0xC9B8ADD3, 0x39D58273, 0x7F4D6600, 0x30D01F18, 0x28004E64, 0xA38289E1, 0x2E64C57F, 0x743DA4EB,
+0x98D06E2E, 0x3B47BC5E, 0xCA49C775, 0x78A5D518, 0xA539883E, 0x5976F3FB, 0x9BC8A93D, 0x2C3C0E42,
+0xD62541BF, 0x84BA1B87, 0xFA7B4D31, 0x9273473E, 0xFC11B974, 0x8F1258ED, 0x5A0C41E0, 0x04C0CE1F,
+0xFCAD9EFB, 0x839E88ED, 0xEFA69903, 0xB0C9341B, 0xA2EE0931, 0x422126CD, 0xC00A1E5A, 0x9E1488C5,
+0x7C58C7D1, 0xE1130A7E, 0xF3403482, 0xB214371B, 0x67176F13, 0x6219F239, 0x79222112, 0x8B41872A,
+0xC9FD6116, 0xE3793E28, 0x5FE4D216, 0x0CE3DF73, 0x80BDC314, 0x20C014B1, 0x8CE2209E, 0x179AE8A5,
+0x9DB17B8B, 0xFC7927C7, 0x9B98C704, 0x669703D4, 0xF5F16467, 0x2E9ED495, 0x5EC1076A, 0x4001E266,
+0x388BB861, 0xD55863B8, 0x69E37FC4, 0xAA42EACD, 0x5E3FF09B, 0x4EC6C5DF, 0x816FD923, 0x7B502266,
+0x133B67F0, 0x40A3A3FC, 0xD5ACE9AE, 0xFC5F4A63, 0x2DA76600, 0x9C0D0090, 0xCE5E9AB1, 0x54E62283,
+0x48A89475, 0x335106EC, 0x53FD6834, 0x737A4880, 0xDB1AB7B4, 0x2489D222, 0xD3CEC79C, 0x98F2DFE1,
+0x2425712A, 0x6327D3CD, 0x3D9BF730, 0x4487F47C, 0x1EC69134, 0x7E9842D0, 0x9D901998, 0x73C2255F,
+0x573BCE63, 0x58B60177, 0x00F3B8C6, 0x9DC4D24E, 0x828F9815, 0xF324BED6, 0xA3054D97, 0xEBBB8996,
+0x76E175B0, 0x6BCD49DB, 0x301BB4B5, 0xE88E27EC, 0x3CFEF894, 0x27DE100B, 0x448AA36B, 0x41C4D283,
+0x1AC1CF91, 0x4E5EF6EC, 0xC7F57E64, 0xB742DA76, 0xC0AC9FB1, 0x88304109, 0xD7773369, 0xE2CFB9EB,
+0xEB0A57B6, 0x51C9A034, 0xF020D7D6, 0x4659E65E, 0x19163F39, 0x8C812998, 0x841AED8D, 0x58B9C0A4,
+0xA70FB394, 0xB7D273E5, 0xD9B3CB65, 0xB520EA6D, 0x21183EDF, 0xCA756404, 0x6382002A, 0x7FE71217,
+0xD4B240B0, 0xC7CDF536, 0x63440D67, 0x5326DDA1, 0xBBAF42A4, 0x323CA8F3, 0xA1C79547, 0x02A2F253,
+0x372A1E69, 0xB6BCC9AC, 0x155C0E71, 0xCC39141E, 0xD3EF1BF7, 0xB02CD815, 0x25D22310, 0xDE2B51A6,
+0x9692DAF7, 0x524770B5, 0x190F6F64, 0x09B6564C, 0x7CFAEF1F, 0xE2BB66F6, 0x9D4D8850, 0xF938F565,
+0x8315B3B0, 0x79F76771, 0x304607B3, 0xE4AA625F, 0x6C8A536D, 0x0A7CDFEB, 0x63688D81, 0xE8F5A19F,
+0x74670357, 0x6BE33CEB, 0x503C3CB4, 0xE32B1A9F, 0xB72E02F7, 0xEB9691B9, 0xE13345BD, 0x2D732F70,
+0xE1FA180C, 0xEE098259, 0xA139C84A, 0x3623675F, 0xBAEA8D24, 0x1A0A9F80, 0xAE61F7AD, 0x73A28986,
+0x94C88E16, 0x3AA088EB, 0x27D202C6, 0xA049A1F4, 0x95D7863C, 0x481DD3BB, 0x8A1F638D, 0xD568CFE6,
+0x3F7D61F6, 0x0E1EBE55, 0x04C39285, 0x9B9ED9D0, 0xCDFDD378, 0x242714BD, 0xA44E32FD, 0xDFEC52E9,
+0xBF1BE9AA, 0x45891D6C, 0x15BFE468, 0x19E8C389, 0x690E9C5B, 0xC39B3FC0, 0xE292FBA3, 0xF37A619A,
+0x690DF6B5, 0x3D46B2E6, 0x04D1E0EB, 0xC58F184C, 0x918B0509, 0x170A6258, 0x1E823D6E, 0xC1D57271,
+0x29EEF57C, 0x7C26DD71, 0x80BE32D3, 0x3ED6C253, 0x66F11896, 0xCA33E9A2, 0x7BA50F3C, 0x103CF36D,
+0x978A999C, 0x660045B6, 0x3B9624AF, 0x45DBB300, 0xA266DD34, 0x592CDCCB, 0xCE7BA20C, 0xDEE75E11,
+0x8651A202, 0xB7EF7E17, 0x9069B54D, 0x62E3B951, 0xDA0E1759, 0x95DC6D47, 0x5BDD132F, 0xDE20C217,
+0xF080637A, 0xED874CF6, 0x264E496A, 0x67C9E6AB, 0xA83280CE, 0xF78A73F8, 0x8F29148C, 0xF75DFAA7,
+0x69323EE2, 0xFDE06C53, 0x130F2607, 0x80122406, 0x47037E17, 0xC1A0B288, 0x6E84355B, 0xA51B65D8,
+0xC83A4810, 0xCD128B93, 0x8D508F88, 0x9296567E, 0x8E13A7BA, 0x37C37EF4, 0x667728AA, 0x35C003F9,
+0x78FFC1FF, 0x968F456F, 0x939AFBBB, 0xF3225715, 0x7D8E5595, 0xC56ACAB5, 0x9A11DF08, 0x62C6DC3A,
+0xFADA116A, 0xA082CC4B, 0x53C3E0B8, 0xF9B03C3D, 0x50057DF1, 0xDFBEC49C, 0xFA700A4F, 0x3303067D,
+0x016B6D60, 0xFCDAC2FC, 0x6BC3B18B, 0xA44149D3, 0xE1D4331C, 0x6589515F, 0x32B07A36, 0xA1685825,
+0x0F5233D8, 0xE91EB794, 0x7BD42E73, 0x7088BCD1, 0x4CE8CBA6, 0x72D37749, 0xB5516C65, 0x14D67C2E,
+0xBAB4F31E, 0x45054561, 0x5188338B, 0x829E0D7C, 0x7811886F, 0x634DA477, 0x4B892331, 0x69479844,
+0x3ED48A26, 0xE82F5E82, 0x0FC4BF2B, 0x413AFCFA, 0xB9577258, 0xBAC9421C, 0x23C15BED, 0xA31F9CB1,
+0xEF7611DE, 0xC0783CFA, 0x77AFC381, 0x60226A61, 0xEEE74BBF, 0x9AABF658, 0x23809EFE, 0x6C7E029C,
+0xD4183F05, 0x7FEA8B71, 0xBA62417F, 0xA3B1264C, 0x80646126, 0x666AB49A, 0xC72D0818, 0x897AA151,
+0xDA2A4756, 0x47FBD448, 0x4171A7D8, 0xB61DBF8E, 0x7626976C, 0x94CCECC3, 0x15223675, 0x2FEF4818,
+0x1FA62CA4, 0x9313F222, 0xE70DD1D5, 0x140A4306, 0xC506427D, 0xACBCDD06, 0x9728B021, 0x30356A12,
+0xC563F782, 0xC15EF2A2, 0x4E7395C3, 0x5AC88F93, 0x39DF02EC, 0x21FBBF9E, 0x8CDEFFBC, 0xDFC99F8E,
+0xD25F34AA, 0xA261E8DE, 0x9B22DCC3, 0x79E6EA4A, 0x164161A7, 0x3FE0EDF7, 0xBE7A06AF, 0xFE524391,
+0x8F371811, 0x631DACC2, 0x11F5CCE8, 0x73318230, 0x341BF2C8, 0xC81303DA, 0xD12168F7, 0x175DD9FC,
+0xFA98B588, 0x0C16764A, 0xB5922E73, 0xEE7DBF97, 0xFDC2E3FB, 0xF3E44B12, 0x0FE258CF, 0xEB38B7FD,
+0xD09B8B8D, 0x9F7C44BA, 0x2793F802, 0xE969EF9C, 0x1B137DF1, 0xE527CBE4, 0xC9C8EE6D, 0x7F8E92EF,
+0xC34DBEBB, 0x3AA21CA0, 0xDE9C4445, 0x5BDD6AC2, 0xA7DEA994, 0x726BD3AA, 0x179FD96E, 0xDA29A64A,
+0x6179D76E, 0x2E6B573B, 0x717C596F, 0x0664F3BE, 0x55CA0E60, 0x830B2729, 0xAAE787AE, 0x2AF4E13E,
+0xBA9551ED, 0xF34EAF73, 0x14A64165, 0xB0F9846B, 0xA5FEF14F, 0xE238A2D1, 0x548CEA8D, 0x8A73CA02,
+0x8D1199EC, 0xB8D6DBD2, 0xB8BA17C8, 0x07CF3A91, 0x95B1848B, 0x29D510FE, 0xE855390B, 0x57F66D45,
+0xACB92FD9, 0x42B095E9, 0x4DFF1110, 0xADFF8A26, 0xB9446B43, 0xEB19C4DD, 0x9728EED5, 0xA7AB7F60,
+0xDAFF9D8A, 0xDA64BFB7, 0xD2DB25B4, 0xF39568F0, 0xDF622DD7, 0x7AFC290C, 0xFA0AF976, 0xA5F258C6,
+0x7F56E1A8, 0xD78394D4, 0x3D94BFA4, 0x80676BEC, 0x4F5E175C, 0x25E09CA0, 0xBD051758, 0x16D87FE6,
+0x7106A912, 0x329C151B, 0x8348B42C, 0xBF3876A8, 0xAAC78BEB, 0x59B5CDAE, 0x51DA8687, 0x9E5B095B,
+0x50C960DC, 0xBEBDC181, 0x1F04A4B3, 0x63A6646D, 0xB52C9D37, 0xA7AEDD8A, 0xC6ECA47C, 0x6143A211,
+0xB2E17F1E, 0x35A0B815, 0xEA904BFA, 0xB29CE22C, 0xCE0755DE, 0x00255DC1, 0x78D502D3, 0xA2E764C5,
+0xBFB89D3D, 0xA9D69BDB, 0x3639E576, 0xBE412864, 0xAAB5EE5B, 0x89527D80, 0x6194A848, 0x791BC502,
+0x072CE38D, 0x3EB190E6, 0x21D8893F, 0x45641B59, 0x1C9A7353, 0xDD68B0BA, 0x75696368, 0x078C8A44,
+0x9F55FA90, 0x4CDD029B, 0x15758672, 0x2AF197BB, 0x63785FAF, 0x2BD02BD3, 0x77A9B60D, 0x1E6EDB93,
+0x9DE2C3F8, 0xAF913E0E, 0x7F493455, 0xBD7B45E1, 0x8C788E94, 0x0F65AEF7, 0x2C7B6D98, 0x3D9F8CDA,
+0x52776C56, 0x924156A9, 0xD750F248, 0xE8D24CEC, 0xE41045A4, 0x6EF25D79, 0xF10DEC9D, 0xF122ECD7,
+0x69B9ECA3, 0x540585E0, 0x72A80B37, 0x7B6932E3, 0x67B32F50, 0x87DEEBD9, 0x6EE61CC5, 0x7809564E,
+0x47C3382A, 0x40A676EB, 0x66BC5E9A, 0x6D9433C9, 0x24249CF3, 0xCF042D5B, 0x1813ABFD, 0xA420031F,
+0x89F61552, 0x92F3FD62, 0x94994BBB, 0x97C8F1BF, 0x79BC17EE, 0x7DA1F415, 0x1C43C8B1, 0x4B91960E,
+0x7E623F10, 0xC5F599EC, 0x3D1D1DE5, 0x642140ED, 0x8404D41E, 0x61DF17E9, 0x8178DBD9, 0x942CB2D8,
+0x42E462A3, 0x29592E79, 0x092ECCA2, 0x46A54BC6, 0x105F512F, 0x191FC24E, 0x2898A27E, 0x9F521385,
+0xC942204C, 0x3B0048EE, 0x8C609EB5, 0xC14CEE9C, 0xE0DF5A09, 0xE1F03998, 0x9BBEF3FD, 0x7F3BF767,
+0xBABBCF8B, 0xB6B5AE3E, 0xC5999026, 0xCF0DCDE6, 0x66D7EAE5, 0x98F9C0D2, 0xED00CD12, 0x70C7ED76,
+0x043ABFE3, 0xE6CFC6A8, 0x795EBCC6, 0x9C885F92, 0x376A5C79, 0x2558F427, 0x91963B5C, 0x52D75389,
+0xDFC75359, 0x63760D9C, 0xA59664F3, 0x70598A01, 0xF73A0F66, 0x0B35CB89, 0xD680566E, 0x1CE462E7,
+0x4C495A9B, 0x2E5FD2E2, 0x36D1CF88, 0xE7CE2709, 0x80AA64D7, 0x7B23A4D6, 0x3E7D4F73, 0xA3BF09A4,
+0xDB5153B1, 0xE599358E, 0x15ED12EB, 0xDAD4ADCD, 0x4F830720, 0x3190B5AE, 0x17BBED4E, 0xB7283F17,
+0xEF486834, 0xBA18FF3A, 0x6649C474, 0x49529746, 0x492E1936, 0x2F0AD3AC, 0xD2B9B65D, 0x1BE63B6E,
+0x244B9C3E, 0x5B58F8A6, 0x6AFC1A8A, 0x660B054C, 0xA49E050C, 0x7A23DD36, 0xA1209822, 0x548C56B1,
+0x3706D079, 0x00BC29BD, 0x6E10B7E2, 0x8F92CADA, 0x8297B47D, 0x671A112F, 0x7385365B, 0xB6D3E535,
+0xA1361586, 0xADF9D85E, 0xF03F658E, 0x91F1F03C, 0x26F04972, 0xEFB3A424, 0x9D6387B4, 0x151601FC,
+0x2076B391, 0x816CF88A, 0x1485176F, 0xA2EE9511, 0xCCE365D6, 0x48C4AB39, 0x1833D903, 0x16B4BB6B,
+0x0D5CFABD, 0x99262584, 0x3030BFA0, 0xBAB6A1B2, 0x889C034B, 0x06E87698, 0xC7095B09, 0x1509AB21,
+0x4BDF688C, 0x141036C4, 0xE4746793, 0x99AA368E, 0x72C1903D, 0x47281D42, 0x1BA141CA, 0x9A13F8E6,
+0xA4506872, 0x4535F820, 0xB3757F20, 0x22F13428, 0x2BFF281B, 0x6E107E8E, 0x8E63FDAC, 0xDC14DDBE,
+0x76312FCF, 0x4C4BE8EB, 0x6E953B28, 0xD49088A2, 0x9DA0C745, 0x37FF4C95, 0xBF1A6F8C, 0x5E70C0F1,
+0x0693EF15, 0x75D72D8E, 0x1CBF4643, 0x944F2F2C, 0x25C6C70F, 0x812094F3, 0xB44F2CC4, 0x5ADB830E,
+0x9DB7E71E, 0x1453CA89, 0xF0270DEF, 0xCEA3E5F8, 0xC523CD4F, 0xE5E87A05, 0xC1E7C2B3, 0x87452DC0,
+0x9F3F0316, 0xA6AD8A1E, 0x9546B705, 0xCD5F9986, 0x21F979D2, 0x2A3739C4, 0xB75D2A8E, 0x7047B7D2,
+0xA90ACFDC, 0xE61BCC77, 0x710BA5FB, 0x0FE38AA9, 0xAF61AB02, 0xE36C9F0F, 0xACCDC6E3, 0xD2B2F773,
+0x569B8F8C, 0x9912DEC7, 0xF2B6FD6E, 0x2484AD9C, 0x23FC5FF0, 0x980AD270, 0xE29DA44C, 0x363CEBD3,
+0xA38B5E3E, 0x41D19279, 0xECE5233D, 0x5A3AEBF2, 0x7212CA1D, 0x1A6FC6B2, 0xA2A74689, 0xD6BF93EE,
+0x5B2E506A, 0x4C6D56E6, 0xF20BAB08, 0x2B934C74, 0x10EA086A, 0x37BF4D8B, 0xB21C2447, 0x226BB794,
+0x50824DB2, 0xCCBF91B5, 0xAE8FAC0A, 0xE155F7CA, 0xA39B0B54, 0xECCE7F35, 0xC70386D8, 0xA116E3C0,
+0x659EFBB7, 0xC54B5C59, 0x798F5C47, 0x55054523, 0xDE4C18C7, 0xF3466641, 0xFA80FF80, 0x8F3D1117,
+0x74834541, 0x25117B89, 0xE8370654, 0x930FF81E, 0x28D19458, 0x495AE13E, 0xBBEECF53, 0x9ADD8074,
+0xED81F067, 0x9E274197, 0x5CC43A07, 0xD7CF7D21, 0x2E367970, 0x3EC5A610, 0x45FF7F85, 0x73FA61C5,
+0xBC4CDC73, 0x90F910FD, 0xC94663C1, 0xC1433B88, 0x768F809D, 0x1500AFD4, 0xBB9C8BC1, 0x859F1144,
+0xE652AA57, 0xEEAFA128, 0x50445416, 0xE6807B30, 0xA9D18096, 0xF78F9F28, 0x8EDACFFE, 0x22854CCF,
+0xA897B07B, 0x4ACABFEB, 0x39A37021, 0x591F7530, 0x8EC1863B, 0x8AE09953, 0x06FF24C3, 0x12F4FB04,
+0x4BB0CBC5, 0x722A7D68, 0xF5AA825E, 0xA87F2D13, 0x4B1A42D3, 0x1F82CBD4, 0x62F2A771, 0x1388C77A,
+0x35E2DFAD, 0x98200797, 0x63E48400, 0x58C74F1C, 0x28B11F14, 0x299DB25A, 0x0289C4F2, 0xDE1196EA,
+0x626B2D9A, 0x669BF304, 0xE42A3995, 0x55772A6B, 0x4879BEF7, 0x5C753F03, 0xF2CB8F55, 0x8D8AB7A7,
+0xC47BFFD1, 0x8688A404, 0x51A04517, 0x9C328061, 0x05A0FEF3, 0x4C0E4952, 0x67953322, 0x2A88A667,
+0xD3ACB6A1, 0xAA9621B9, 0x5BEBBC63, 0x8C3D10BA, 0x8A0CD3D8, 0x28F043CA, 0x2F701338, 0x49C6390C,
+0x1B4F82BC, 0x9746CA0F, 0x9F02FFC8, 0x62CB6083, 0xFE26D0FF, 0x71378B83, 0x8A149306, 0x0A7FA5D3,
+0xF475509F, 0x131EA4CE, 0x0D0562ED, 0xE3701773, 0x3121E304, 0x1E3A9E3A, 0x54F0B084, 0xC0FC3CBB,
+0x9A52F393, 0xA0E0E494, 0x3D4626F8, 0x5506DEF5, 0xCA8F0810, 0x1BFA77C4, 0x29732E18, 0x716E6041,
+0xC988B925, 0x447407CF, 0x0C1AA125, 0x2D81F4B5, 0xB1D8EAEE, 0x266C8288, 0xB12ED462, 0x985DCD6B,
+0x9A30A4C8, 0x33CCC1AC, 0x0B46C193, 0x237766CC, 0xA131A25B, 0x97E4C4C9, 0x2ACCEFFB, 0x6386D771,
+0x24887DAF, 0xAEDB73F9, 0xA5039DB1, 0x261E34C4, 0x901AFE2E, 0xC4C73943, 0xACD338A7, 0x440AC99B,
+0x36D87C55, 0xA9CAE111, 0xF39315AD, 0xBCCEAEFB, 0xD6707FFB, 0xFE0C4930, 0x481B1A7E, 0xAB87834A,
+0x7CF99888, 0xE6F7FA15, 0xBB57D1E2, 0x25548F3E, 0x7E554B2B, 0x501BAEDF, 0x2CBB7A53, 0xBAC86997,
+0x6DA08811, 0x9852CBC1, 0x7969D2E7, 0xCF07BAD4, 0x72F9D3CC, 0x8EBB7C39, 0x0DC0DF51, 0x21DD3DCA,
+0x59C6D5FF, 0xADCAC315, 0xF5888126, 0x41C48D51, 0x89C7AA77, 0xC610CB03, 0xD9CFD565, 0xD6240844,
+0x0BC5A98A, 0x94F89CA3, 0xF124C316, 0x07EFB3EA, 0x4980178E, 0x08C7461D, 0x369DAC15, 0x83B1B59C,
+0x5B0864AB, 0x423CAF6C, 0x0AE8A5D2, 0x2D253600, 0x0BAB0808, 0x825C4408, 0x4F173848, 0xC10251B9,
+0x7AF9A39F, 0xCAFDBBD4, 0xAF847540, 0xFB401046, 0x63421B27, 0x1A2C719A, 0x7593A0E6, 0x0C216310,
+0xC19632E0, 0x10AD1DE2, 0x88D80EA7, 0x5981C17C, 0x7D1619D2, 0xDC76CF4D, 0x6D452705, 0xDB409642,
+0x40840A0B, 0x818BF4F9, 0x8786D8EE, 0x5DC94D6A, 0x5076D4DE, 0x28A198E1, 0xDD1C2882, 0xB9474AA8,
+0xC1325CC2, 0xDC8D9743, 0x13143275, 0xA9398B69, 0x26B9A8A1, 0xC93B1611, 0x74A427D4, 0x4FA660EB,
+0xB5E8E671, 0xB981CC04, 0x20417D3F, 0x8A88AB10, 0x34CEB142, 0x44314C30, 0xDF09BD2B, 0x09285A48,
+0xC87EC20E, 0xE4FC5967, 0x84EA4090, 0xCF4C1D87, 0x25E4D700, 0xA804B9D7, 0xB12DEDE2, 0xC7009C99,
+0xC1E03CDE, 0x85663754, 0xA3BDEEEC, 0x0D18C0DC, 0x2298251E, 0x6D667B4D, 0x7CF324A5, 0x6C5B7B56,
+0x72A4C4F7, 0x20DE7BC4, 0x75F467CB, 0x4A9B6A1A, 0xF19F8767, 0xDAD69149, 0x5CC885F5, 0x43751148,
+0xE5342D60, 0xB49042EB, 0xD88A530A, 0x2C755BBB, 0x5FCE45CC, 0x24AB105A, 0x556C762D, 0x182869F2,
+0xFD9A8D6E, 0x1E32EC15, 0x96934C10, 0x38D969B2, 0xB5EBB4BC, 0xF8C40495, 0xC31F9715, 0x462FD725,
+0xC08D8144, 0x78B55FB4, 0xE0DBEC83, 0x5D743A7B, 0x344449FC, 0xD037470B, 0x3D624032, 0x0F50ABD7,
+0xE912B442, 0x7CD3BD86, 0xAEFDBF98, 0x32AC45CB, 0x5E56A7A0, 0x72790E8F, 0x580409C9, 0x0D3EA4CA,
+0x2C57671D, 0x55B3A3FE, 0xDDF42B36, 0xF0A12BF1, 0x67252EF1, 0x4F039526, 0x6AAAE146, 0x649540B3,
+0x70F99AC7, 0xB31D4DA0, 0x444462FC, 0xE0AA2508, 0x50401598, 0xE1FAA1FB, 0xF682967A, 0x65375101,
+0xA4A4C564, 0xA9328246, 0xEE079066, 0x1A74F41F, 0x84A634F0, 0x3AD092DE, 0xD3E3E7C1, 0xB7EC9FD8,
+0xCB09936B, 0xB19EBBB5, 0xEA0A424B, 0xD4051D7D, 0xCD26A157, 0x13E610B3, 0x12784746, 0x2FE9045D,
+0xF981CEB6, 0x48AEE398, 0x7E2E012C, 0xFD54EBF4, 0x8FA3D388, 0x950F252D, 0xF11D9F46, 0xA2FB30A7,
+0x31E296FF, 0x4A51133A, 0x06C2369E, 0x9A06FF46, 0x476AC777, 0xAAA2C93C, 0x32C2A4F0, 0xC379EC3F,
+0xFD476C6A, 0x48ED6240, 0xE9A76186, 0x6D7E8586, 0xDF940966, 0x9A29F207, 0x1F70DAFE, 0xA9A92A95,
+0x6E693EF5, 0x78F474B5, 0xA571584D, 0x4DB2410F, 0x1448F4B6, 0x511CC978, 0x926CA244, 0xE6FBFF9F,
+0x0259FFCF, 0xD53BC433, 0xC42C8EF9, 0x441AC3BF, 0x482DA55B, 0x89BCEAD2, 0xCBADF571, 0x524A3F88,
+0xF7B68755, 0xD356E71F, 0xD9BA0B72, 0xCF421EFC, 0x1083B85B, 0xBD2E8168, 0xAF8EE23E, 0xD7A54862,
+0xF5D9AAD1, 0x71E827D3, 0x5B470D2D, 0xA388642F, 0xB09E26A4, 0x3A3C1595, 0xB791E8F9, 0xFED87B2E,
+0x19F30DAC, 0x3B5EC252, 0x65C438FE, 0x9C03E4E2, 0x6B10C500, 0xCB8C2E0D, 0x0FC4BB4D, 0x5E35EA38,
+0x9A43E089, 0xD1489AA3, 0x74EF27B8, 0x6175FBD9, 0x4C65D710, 0x9F324982, 0xC7FD2E32, 0x7BC10C56,
+0x12855B56, 0xC0621B7B, 0xA721AFD5, 0xF9E104A3, 0x2F656CDC, 0xABEA2668, 0xD7194507, 0xE5230D3D,
+0x085A282D, 0xD965BCE9, 0x9A8817D8, 0xC91D497F, 0x5D085ED9, 0x50AD9B03, 0x7A83EAF7, 0x9F457E89,
+0x4CD7F566, 0x48F63CA2, 0x16E47745, 0x40927AD7, 0xACFAB158, 0x826BBDD8, 0x652A1BE2, 0xC1CD56D0,
+0xB30FD0AC, 0x4198DB96, 0x35F12D70, 0x3DBF6C76, 0x0ADF0ABE, 0x571A0CA4, 0x089352FE, 0x3977605E,
+0x3BE2708B, 0x481644C7, 0x7F139BC6, 0x87DA1873, 0x54410E55, 0xA8AC8FDD, 0x82AFE611, 0xEE3A9FD5,
+0x93571AFA, 0xC4CB947A, 0xC711B6EF, 0x63B06995, 0x3A627E1C, 0x69E2B92D, 0x9E6DDEC2, 0x16BAE616,
+0xE0E89D8A, 0xE83A69FD, 0x957DE65C, 0xECE7FEDA, 0x309EF6AE, 0x19427668, 0xFF3676CD, 0xCC9AB718,
+0x46977EE3, 0x319B68AE, 0xCE2E1682, 0x9011B62A, 0x33EF14ED, 0xE41DD712, 0x3D010F0D, 0x3564FBEA,
+0xB7DE4559, 0xEB5D6F47, 0x66946EA1, 0x0B0A4939, 0xDBEA85C2, 0xF013BA92, 0x138F0233, 0x5EE22AB7,
+0xB345971A, 0x0EE7AA9F, 0x29028017, 0x73A8E1DB, 0x63935DE4, 0x7EB35F35, 0x1C187C45, 0xEAB6A5A5,
+0xD7CBCA3C, 0x29A4A1C9, 0xC94F597C, 0x399520C9, 0x634D7EDF, 0x83F69ABF, 0xE3C7C6C8, 0x158E6F93,
+0xFC6DCE86, 0x3531D491, 0x6F9DC3EB, 0xE4A4EDB6, 0x006DD6D2, 0x992AB170, 0x3A5F28ED, 0x2A5C00A8,
+0xE4C97A47, 0x21FB3259, 0xE52ECF2C, 0xB0E7CD8E, 0x5726F905, 0xE627D4CA, 0xCEB228F2, 0x79B3DC24,
+0x087BF665, 0xC3372CC9, 0xE3355BDD, 0x35B33E04, 0x3F638C2F, 0x18595758, 0x0A18F44C, 0x4C07C8F0,
+0xE65D0156, 0xE5DF26AD, 0x4397633A, 0xA31C7097, 0x07941DA9, 0x47C9BCEF, 0xD8858930, 0xAD44FE89,
+0xBBF2DD8D, 0x6F0298F2, 0x3F5AAC84, 0xC0ACBA49, 0xFB1D412D, 0x6815607E, 0x1A9EDAFD, 0x0CA7ABED,
+0xFC3B2B50, 0x0C2ACD93, 0x424561AA, 0xF5A64E46, 0x735BE47E, 0x331313D6, 0xADA64086, 0x627CB41F,
+0x0301416D, 0x7705D391, 0x4480140D, 0x16B44C4E, 0x537E6675, 0x4C74B3B7, 0xE971BDD6, 0x8C33434F,
+0xDAE65870, 0x2D300563, 0xC2953EAB, 0x3C989424, 0x683E2BB7, 0xB33AC4FA, 0xFDB2B7E8, 0x6846790E,
+0x56C96745, 0x7B69C89E, 0x40593AE7, 0x118D8D96, 0xA59A69FC, 0x4BF701D0, 0x7B84E744, 0xB1618F64,
+0xDBE9480A, 0x94773243, 0xB031102F, 0x0E4DE89F, 0x7BA308F7, 0xA1DB6C55, 0x8C3A0078, 0xA441811A,
+0x14E2999B, 0x0B87B52A, 0x0E06A980, 0xC48FE7AE, 0xAD45CFEF, 0x257C22F7, 0xFD895A3A, 0x30FA727D,
+0x1A863A39, 0xB32F2200, 0x44DEDE28, 0x674533CE, 0xA9595E4F, 0xF3F1F27C, 0x5783F3B8, 0x7DA14E17,
+0x0998C314, 0x9189CC2B, 0xF439ACF2, 0xE8F1D02C, 0xF7A826E8, 0x390FDB69, 0x86A78C65, 0xA806DBB4,
+0x20E1E0EF, 0xB2BFE356, 0x2A1D537E, 0xE870A8A9, 0xD56C8BC4, 0x6D214CD9, 0xB9E5A960, 0xF241CB94,
+0xF1F31607, 0xB78A4124, 0xB5395BBC, 0x9A1EC90D, 0x83DA9CF1, 0x6272C4D7, 0xCEACEEDC, 0x9198CFAC,
+0x051ABCAE, 0xB389A4F3, 0x7A5B5411, 0x76E13A67, 0x5B5D0139, 0x88DF77AA, 0x43A5C92A, 0x3E5E1C36,
+0xD67833E6, 0x4D95EBD0, 0x7BC72123, 0xFD1917B6, 0xA33979B9, 0x5AD5FE13, 0xF39742EC, 0x8F8636D9,
+0x441EABB7, 0xAE956495, 0x25C9565B, 0x81F422AE, 0x996A6D36, 0xDDEB60D9, 0x9BA2A1C8, 0xCBF8CF53,
+0x8F86892C, 0x6FD426A2, 0x60305D49, 0x90778948, 0x4459D40A, 0x1ADC58C8, 0x5622547C, 0x0DED60B1,
+0xD6E3BE9E, 0x696FF389, 0xE6BC9E6E, 0x855817BB, 0x13BC916A, 0x38313026, 0xE329B0B1, 0x665D3C7C,
+0xAE90B646, 0x7C5B27C3, 0x4662C6FB, 0x4E76D80F, 0xC955A255, 0x08F5F913, 0xC06227B5, 0x4574BCA5,
+0x821D7BD7, 0x7762EE33, 0x7D4512B0, 0x6D4ECB92, 0xC0FE8185, 0x8BF8D1CA, 0xF02EC54F, 0xAD775E47,
+0xBF56FCA8, 0xB047FF14, 0x55CDD696, 0x9D3E4B84, 0x95CC3159, 0x9C1DCBDA, 0x1EABB106, 0x5953DDD7,
+0x8AFCCFD6, 0x296F7E8F, 0xF00ED319, 0xDA27822C, 0xBD482F7A, 0x460354A1, 0x322DB633, 0x84244E7B,
+0xBCDB1EE1, 0xF67E620E, 0xA34B7AE9, 0xEAB1FB23, 0xF8E01253, 0x53FF2B8F, 0x76A32FF3, 0xE2228D81,
+0x1B11F1AC, 0xF72EE497, 0x445F244B, 0x3E12B74F, 0x7E27257C, 0x9A4DB072, 0xC6252B25, 0x7E3D9D5F,
+0x4D4530C1, 0xA8F61196, 0x7E824D4C, 0x416FD30F, 0x4CFD7319, 0xCD14AF34, 0x543AAE66, 0x5A9920A7,
+0x0C2A6C24, 0xBA450568, 0x5966129B, 0xC8F9ADAA, 0xD24F339F, 0x63A6B036, 0x6E281C0C, 0xE570501E,
+0x65856B11, 0x85D49B23, 0xC3E02861, 0xAE3F7F9A, 0xA38CBDAD, 0xBF60E7BB, 0x5CDC0434, 0xC28D68FF,
+0x977706AC, 0xD214F1B5, 0xC7F12D76, 0xF89E65F7, 0x0AEAC55C, 0x5A476DC6, 0xEB4F84AC, 0xF4F719B3,
+0xD6940C60, 0xBF74C603, 0x1DE3AE2E, 0x152FB080, 0x9ED1C387, 0x1A728EE7, 0x9D2DBDBE, 0x7AF499A2,
+0x20907A32, 0xC3F8CB34, 0xBD0A44E3, 0x50083BA2, 0xAFEDCCF8, 0xCA2E9484, 0x110AA26C, 0x667E8075,
+0x0DCEB0F2, 0x3C5322C1, 0x2EFA5D31, 0xC23366CA, 0xED335385, 0x754E5D36, 0xE7C4BD65, 0xEA48CE22,
+0x6F4A9D93, 0x7B6C32FD, 0x986FD711, 0x26CE3A2B, 0x28EDF54E, 0x83B26C8F, 0x1E64E7B5, 0x213DC8D0,
+0x928028D8, 0xBA75CCFF, 0x91983709, 0x69C0CB61, 0x19192D24, 0x80210CF5, 0x70B8E11B, 0xFD897335,
+0x0E599030, 0xBFC50609, 0xB2EA3E96, 0xE47CD50F, 0xF26703BA, 0xA6382279, 0x4358349B, 0x7D8CA768,
+0x25BF92C2, 0x33174E81, 0x739BEABB, 0x5D56853C, 0x41F74CA0, 0x8D121C4E, 0x1B3F4528, 0x22E85949,
+0x7431AC99, 0x10EAD138, 0x30047386, 0x428D2CD0, 0xFB04ABD8, 0xC94FB205, 0x0E1DCE9C, 0x4CC0B45C,
+0x5AC84448, 0xF30D27EA, 0x7196248D, 0x376C06CF, 0x28DCA40F, 0x52A30DDC, 0x972E1DFD, 0x26844B4B,
+0x090B1A18, 0xEF2FAEE5, 0x261B5C40, 0x435D3122, 0xDBA6F1A4, 0x05A5CF7E, 0x43084758, 0x90527E9C,
+0x739C5AAD, 0x7F22E2C6, 0xF5FAAB39, 0x7B2CBA1E, 0xAD7B5692, 0xF0001B8E, 0xE7507A68, 0x38307B9B,
+0xE83DCDD7, 0x74AEF382, 0xF978A62D, 0x4F36EAB0, 0xC4C910E3, 0xD149E038, 0x4B13F31B, 0x44DC9FFC,
+0xEAE7DBAD, 0x429C8D7C, 0x1C74FF29, 0x5B88A3CC, 0x93A51CB0, 0x47C69B2A, 0x7DAE77BE, 0xD44BA0DA,
+0xB9D30BBB, 0xAFD09D11, 0x13F20239, 0x4E15A406, 0xCC67861D, 0xD35C79DD, 0x71A41AF7, 0xE2975157,
+0xE477FAA5, 0x81A327E2, 0xDB5B8192, 0xFC208F91, 0x783D155C, 0x90C04C25, 0x513E9820, 0x0424D06D,
+0x78250639, 0x7EB00FEA, 0xFA27FD5F, 0xF154D67D, 0x8465E8B3, 0x2179A88C, 0xB32A25C2, 0x6D00821F,
+0xD8B07E48, 0xF3C9A2E0, 0xC5B17115, 0x5A1CCB38, 0x1F3DA89B, 0xAEBECFED, 0xEAD6A0E5, 0x3C72B362,
+0x6A0722A3, 0x027E5E4D, 0x5FA00AEB, 0x06707B90, 0x289CEF3A, 0x10A6B445, 0x261ECAB3, 0x1900638D,
+0x1C62B34C, 0xCE0C4162, 0x8F2DB801, 0x3783B001, 0x27F0CE6D, 0x06CBD44E, 0x0231A9F6, 0xA8B9E74F,
+0x4D1724BC, 0xF6D40DA7, 0xD1AA0036, 0x65881177, 0xF5E8201B, 0xD0C7E434, 0xCD4B6901, 0x0642D78B,
+0x806289DE, 0x4DF29991, 0x12124C6E, 0x5B5B80D5, 0x5988EA69, 0xCA320FA9, 0x5C7F3074, 0x5D84FB7C,
+0x98075357, 0x514B69B1, 0x5BCFD785, 0xE3B1B6E9, 0x4304D03E, 0x2108FF38, 0xAE509A6A, 0xCEF40539,
+0xF21930B3, 0xBBDBA850, 0x02864D37, 0x65DA618D, 0xE528A762, 0x492213BB, 0xCB58BEA6, 0x3A100339,
+0xAE3EA226, 0x941CC584, 0x1179D696, 0xB7B68643, 0xC7521660, 0xC274DFE5, 0x9E769B60, 0x6315D47A,
+0x09458E55, 0x7EC705F5, 0x318D9444, 0xBD2EE343, 0x63022E73, 0xBA883298, 0x51958B51, 0x69FEE24A,
+0xCFC0628E, 0xB4DECD22, 0x21B7A774, 0xB62CC69D, 0xCB3F8183, 0xB6566EB5, 0x249B57CD, 0xD1406267,
+0x45A3482F, 0x75F6BF44, 0x49734BBB, 0xE5ED014F, 0x92FB6175, 0x45BB34E4, 0xF5D51705, 0x280C02D6,
+0x087B8C9E, 0x1A01B617, 0xE0EAD652, 0x193CFB71, 0x66D390DF, 0xA82BA35C, 0x0E7961CE, 0x275A23C0,
+0x94E13CFC, 0x9B205848, 0x9A31CB69, 0x82C3C550, 0x1801CD3F, 0xC97B4A0F, 0x234070CE, 0x398C2BDD,
+0xC06EE056, 0xD2C1722B, 0x43F4ED13, 0xF545DE72, 0x08809292, 0x31CA4EA7, 0x403BFA64, 0xD5AD32F2,
+0x4B7632DE, 0x26452865, 0xD453AF35, 0xEC6E8EFA, 0x6CE167B5, 0x6B8EF90D, 0xEBE64DBF, 0x776FE3ED,
+0xFD3EA47D, 0x9D2F3BB6, 0x2E7AA6BC, 0x9668F961, 0x547E491B, 0x4A178E96, 0x723A2932, 0x351AA2B5,
+0x89C88F08, 0xC3DA4D4C, 0x37A0E0EA, 0x311F1391, 0x17EC539F, 0x8EA0FB89, 0x8BE0816B, 0xCC14943F,
+0x3BF24F91, 0xA85944BC, 0xAC3BF135, 0x9410503F, 0xEFB26FD2, 0x633E2E29, 0x3FAE6E4C, 0x47F76715,
+0x491E6B18, 0x11B54152, 0x0E5D2BC1, 0x9817DABB, 0xC0893D6A, 0xE826FE1B, 0xAF6778C3, 0xDBEF82FF,
+0xC7231AB3, 0x2324181B, 0x7930E43D, 0xBA8AA91D, 0x7295C089, 0x1E0C20B3, 0xA95487D8, 0xFDCDD82F,
+0x1D628AFD, 0x258F369F, 0x5EDCAA81, 0xF5215943, 0xC243C861, 0xB718945B, 0xCB080BAE, 0x7E9F4936,
+0xAA9678EF, 0x629B3A6F, 0x65239677, 0x7C6D66DE, 0x4A330D95, 0xFA462763, 0x5BB9DBAB, 0xDDE55C6F,
+0xEFDD0FAA, 0xC43398AC, 0x8431B0F7, 0x9BBB1922, 0xEF57F681, 0x8850B9DA, 0xA8E52A8C, 0x186ACB44,
+0xFCBE163C, 0xF83E874D, 0x90A8C01C, 0xE50427A5, 0xD4123496, 0xDA57C926, 0x5B93ACEC, 0x8C350FCA,
+0x00516A30, 0xC06250FB, 0x58B89482, 0xB1DDD46C, 0xDEA20B62, 0x82B22656, 0x62CE0736, 0x137552EA,
+0xBEF44669, 0xC1C85F91, 0xD827CD44, 0xE5B8A287, 0xA965090A, 0x3C8D660C, 0x0CB04D4D, 0x68950105,
+0x565953C3, 0x57D2EEE1, 0x9954182D, 0xE5B984E6, 0x8ACCB62E, 0xF31D3D96, 0x3ACCC27B, 0x9C477F91,
+0xD8C27EF2, 0x69FE8C3A, 0x8C278D1B, 0x6FC05169, 0x1CE3A1C9, 0xEC71B244, 0x5CB10A13, 0x17CCE8FD,
+0xFC16596D, 0x14061105, 0x151495BF, 0xB9853E8C, 0x4F5CD97C, 0x53F6E1D8, 0x42601D0A, 0x37430C15,
+0x70B43680, 0xE86745D7, 0xFDE13663, 0x84CF3DCD, 0xB835A695, 0x1AB7D951, 0xA2A3E918, 0xBD9AFB82,
+0x42522C99, 0xBAD1504B, 0x28C5AE27, 0xF51B0A29, 0xBCAD5041, 0x74A50F2A, 0xD9CB3D93, 0xBCBDA50E,
+0x77E59CEF, 0x0CA5DC3B, 0xE75C0030, 0xFFD2F6F9, 0xB3CBD8CF, 0x6AACA8D0, 0xC22D345E, 0xF3A4502B,
+0x256A3750, 0xA49A0902, 0x9105A84D, 0x8108F8B7, 0x6A45744B, 0xCF3525DD, 0xF0D06D17, 0x021FE098,
+0x5ECA7A2A, 0x78BDD4D6, 0x6B761906, 0x21D1489D, 0x8FA2ED9D, 0x66F3394D, 0xDA410406, 0x7EAAABDE,
+0x1D08AFF2, 0xD7D28DDD, 0xD16DA51D, 0x2D279EDA, 0x38341D85, 0xB4F9056C, 0x5DF3C32E, 0x4251DF5F,
+0x9E8116D4, 0x392724CA, 0xA3636129, 0xF7629626, 0xF305DA8C, 0xD93FAF51, 0xE7904418, 0x2A560EF3,
+0x268DD7EF, 0xC464E8E8, 0x9FD6C31B, 0xE1456AB8, 0xD0D28AE6, 0x82A7F874, 0x05EBE6B5, 0x2301205A,
+0xC9B99B6A, 0x49937D22, 0x49A11A71, 0xE3D12E23, 0xF6E607D1, 0x2522F375, 0x57B8971B, 0xE4921128,
+0x2DC8FC4A, 0xC477931C, 0x29AC3E15, 0x805CA6AE, 0x5E3A5A74, 0x90EE426F, 0x65CF4B29, 0x6CEA4860,
+0x0D6AB69E, 0x134C9865, 0x14849B2B, 0xFF433FD6, 0xD9359696, 0x03478795, 0x76D275C0, 0x4B4AF53E,
+0x2F998733, 0x79FAE455, 0x405A604B, 0x1BA873F7, 0x428BC164, 0x310B407D, 0xE47CEC81, 0x4475DFD1,
+0xB1A0163B, 0x8B1195E8, 0xFE0867A7, 0x160258E6, 0xD00DC8D7, 0x26A0F889, 0xFD5AD14A, 0xF6C40164,
+0xB196A08A, 0x801ED6E4, 0xA6E54DD4, 0xBDC81BA5, 0xC233AC28, 0x4AC75A24, 0x930E4478, 0xB95FCB52,
+0x2CEBEDEF, 0xF1888705, 0x9D925A5F, 0x2E43635D, 0x88EB2499, 0xA9B2D212, 0x1C92DCEF, 0x46978F91,
+0x59BC59D3, 0xE3D6E9EC, 0xA3968DAA, 0x4A0FD852, 0x4D841F6A, 0x347E5C4A, 0x3641F34F, 0x665870DD,
+0x5FBDD85B, 0x76EB351A, 0x2B49529A, 0x529BCB82, 0xD3E6E267, 0x45BBCFD0, 0xACB219E1, 0xB38DEA54,
+0x96BD745B, 0x9105C294, 0x6A04B429, 0x851020EF, 0x18CED74F, 0xF33B7F44, 0xA101CEEC, 0x49082099,
+0x82406B8B, 0xFCDBCA55, 0xC8065879, 0xE65D3A83, 0xD0CF8005, 0x09139227, 0xBD4EB20E, 0xF7F0EF30,
+0xCA67051A, 0x75B7CFD7, 0xDAF53F59, 0x75FB016C, 0x0117B380, 0x8C2D71DF, 0x72C35F60, 0xDED73CB7,
+0x088CF232, 0xBFA63931, 0xE97CE243, 0xEACB14B4, 0xB7F11B23, 0x39B22620, 0x7070E960, 0x44E11567,
+0x38123C71, 0xEF1233E9, 0xF1402E90, 0x0A16990C, 0x7DF3CA3F, 0xB9466F05, 0xC1768584, 0x898BA9CE,
+0x13466079, 0x974A12BD, 0x848002C7, 0xD5E45629, 0xAD89D510, 0xAD1B5C3F, 0xA93F6659, 0x192C7D01,
+0x7CB5FFCB, 0xE4341543, 0xAE3DA3D4, 0x63929DFF, 0x1C166631, 0x8F0F922B, 0x7C2333A7, 0x306A58AE,
+0x00DEE980, 0xD0A2F261, 0x586E5A1B, 0xBB48A528, 0x0445C541, 0x1BF41E80, 0x1E08C827, 0x1684BA6A,
+0x0E61CFE2, 0xFB8363E9, 0x25B05B60, 0x4930F6E9, 0x4EA3C7A8, 0xC85A4AA4, 0x4EA99E81, 0x87F88813,
+0x11421D6E, 0x1B0FCCAF, 0x7367A339, 0x1B95B03E, 0xD24FB1C9, 0xB0E8500B, 0x0FBD3DEA, 0x26B94FFC,
+0x39468E97, 0x30CA5372, 0xA08198DF, 0x4A589CE0, 0xC220A91B, 0x0A97219F, 0x0564DE79, 0x9AD0E27E,
+0x4F8E146D, 0x4427AA0A, 0xA3BEC8CC, 0x8AC00DB1, 0x54D041B1, 0x19760BEF, 0xBD5A0A3D, 0xF0C2B977,
+0x319E7819, 0xBC9ED2BD, 0x815DBDDA, 0xDBB17F6F, 0x4496866A, 0x4AC676B3, 0x65F642EC, 0x68D143F5,
+0x6C0BFB18, 0x6DBCA1F0, 0x431A1900, 0xB83CAC8A, 0xE6B2434D, 0x36228CC9, 0xE99FC3FE, 0xD017834E,
+0x8B4F4C28, 0x2202AC49, 0xFDF1E8FF, 0x5C1FF652, 0x7D2B1687, 0xBD6CFFA4, 0x4BD0482A, 0x2659E12C,
+0xFE53A419, 0xE12CFE25, 0xF25D31D7, 0x6D19C3AB, 0x28CCDA7E, 0xE55F1861, 0xC4F6936C, 0x2DB6A796,
+0x12C62437, 0xA6CEB390, 0xDD2DC745, 0xD9577DDC, 0xC1AD239A, 0x6D2FCAEA, 0xAC6C8EC7, 0xA174D7F5,
+0x33CAFE5C, 0x128C36F3, 0xFEC7A3A1, 0x522F2BCE, 0x5F410C86, 0xFD5F8676, 0x9116429C, 0xADB69908,
+0xD42DF186, 0xA28E22EB, 0xDBB38A30, 0xE9F811A4, 0x7F974B97, 0xECDE25B7, 0xF1CDC8D4, 0xCD72B4C2,
+0x8B03509A, 0x730814DD, 0x603FFF85, 0xF452078E, 0xB439919F, 0x15ABB02C, 0x9ED4045B, 0x4347DAA9,
+0xB61B7C1E, 0x82AECF0A, 0x081BB9C4, 0x00ADCF1A, 0x87E43D0F, 0x7EE81506, 0xEDEBF608, 0xBC97BA7C,
+0x54EB6919, 0x29D5DDC7, 0x0E0EF1FB, 0xB3E96001, 0xF771A215, 0xCAD807DA, 0x1A78F2DE, 0x239677B5,
+0x6092637D, 0xC5DBAA1E, 0xD5EAA9CD, 0x94C969E4, 0xED1E3908, 0xF07B07FD, 0xE54B5AE5, 0xF95044D4,
+0xF6048FA5, 0x6F60ACCF, 0xE874CD2B, 0xFF7F1D3E, 0x08A1FBE4, 0x71AE74AA, 0x99E370AF, 0xCB0C774A,
+0x09AB4879, 0x1E24A749, 0x3C4E8D5F, 0x5C81AB4D, 0x40A5B945, 0x84E61AA8, 0x89ACA459, 0x217D1A22,
+0x6FDA94C5, 0x9D949739, 0x3AC8DA27, 0xE58D250F, 0xC2D54AD3, 0xD86EE84C, 0x44375944, 0xCA34D867,
+0x5A607655, 0xD58FFABC, 0x7CFFD9B9, 0x9B3B66AD, 0x80E3F559, 0x2429253B, 0xDEA75FD6, 0x9DFCE670,
+0x29331115, 0x55FC478C, 0x2B0D99DE, 0x13C42252, 0xAF3BEBB0, 0x3DC68752, 0x164355DB, 0x0BEB0AC9,
+0x6C969A5D, 0xE8FF4F19, 0xBA0CB115, 0x37DD8F18, 0xA4D791D2, 0x5C351415, 0xC5A49549, 0x50E6C821,
+0xE4368188, 0xB2A8F975, 0xC05816C3, 0x800DCC37, 0xE93689B5, 0xC08B4CF6, 0x1FCF1D4E, 0x1C7899FA,
+0xCDCC97EC, 0xB91FD3B6, 0xC2B61546, 0x82AA2E3B, 0x75869ABE, 0x269F0DEC, 0x77A4AD81, 0x6E37E456,
+0xACC0015C, 0x9DC998AD, 0xC00D8B5E, 0xAC0070C3, 0x9EB853FD, 0xFE499BD9, 0x22CF4760, 0x45EC1F7F,
+0xCBB69CB6, 0xEDA53B9B, 0x8631B7C0, 0xEFC3E917, 0x65ACE1CC, 0x81AFE25F, 0x4C48925E, 0x07180D60,
+0xFDBC9130, 0x82762F27, 0xDD884420, 0x23A4AC73, 0x06B1BB77, 0x5D69103D, 0x02F2BA26, 0x84DA9087,
+0xB8772FE1, 0xA860CA12, 0xF62488B7, 0x2A063644, 0x15024BA7, 0xF0651A5C, 0xC5C80256, 0x054DA570,
+0x268C16F6, 0xA6784E38, 0x0C3E0D16, 0x96BBC786, 0x9B41C92E, 0xC12A7F7E, 0xA6CA431F, 0x404A7AE9,
+0x000915D5, 0x80B424AD, 0x0FADF41B, 0x425386E2, 0x7945F9A8, 0x4503B9DF, 0x25D3F075, 0xB95CA2DB,
+0x3095DA9C, 0xE22972EA, 0x5ABBBC38, 0x51180C12, 0xF1EC2E49, 0x4B8092BF, 0x8D0596D7, 0x34996104,
+0x8978AB28, 0x47B3FAEB, 0x8F34FEA6, 0xBA6DF242, 0x0427A31E, 0xCC1A8EB2, 0xB279D888, 0xAA24EBBD,
+0x81ED21EA, 0x841D9327, 0x6350239C, 0xC2D6A6AF, 0x5A6E9A7B, 0x3B85434A, 0x65549041, 0x15BEB41D,
+0xA0AA92D0, 0xC88C2272, 0x6B91B4E6, 0xE5E3EEC2, 0xDAE37694, 0xA3DEAC25, 0x0251B92A, 0x7E1AF3A2,
+0x13DB5046, 0x2FCE6A6B, 0xB35281DC, 0x149034F1, 0xE4F6B8F8, 0x74D7E63E, 0xF6283CC1, 0xC0D563EC,
+0xF309EC6E, 0xDB8286C7, 0xEF681315, 0x776EA07E, 0xDB9D4DC3, 0x3CCEDE79, 0xC9A22C94, 0x416DE780,
+0xB147692E, 0x383EEDAF, 0x6B74816D, 0x9A078780, 0xCD16090E, 0x3184B5C7, 0xD9B4BA14, 0x86362F3E,
+0x65B9DD21, 0x33312790, 0x4A379F5F, 0x8B5FDD38, 0x9C572177, 0xAECE46BD, 0x56864C29, 0xCD2DEF47,
+0xDC3AFD65, 0x209C6A64, 0x7B40FFE7, 0x41B67CC3, 0x8D85905A, 0x5FDA5E7B, 0xADC05ECF, 0x4AA6EBB5,
+0x81DC3A8A, 0x3D31E43D, 0x5613A286, 0xEAADF4F2, 0x95B3D8CC, 0xD485739B, 0xC846C401, 0xF5354BB7,
+0x3CB54C9C, 0x931C1B3F, 0x7CE09E2F, 0x83F07F4D, 0x8E77D6E9, 0xB6E2E4B9, 0x26311C6E, 0x035E9DB2,
+0x028C1688, 0xCD606FDC, 0x9FD11113, 0xE1C7AB1A, 0xD65A0D81, 0x968D840F, 0xB2081539, 0x408A8B2A,
+0xAC0286A5, 0x964563D9, 0x24290946, 0x62A613B7, 0x35A73B20, 0xC920807F, 0xAC04D23A, 0xFFA37FC6,
+0x90ED3F2D, 0x088D035A, 0xAB037BCB, 0xEF684D41, 0x47850DD3, 0x7664AEFD, 0xFDE3799E, 0x1B7FE91E,
+0x43BFA644, 0xE1E904A5, 0x47B58960, 0x1D378161, 0xDC272F1E, 0xF8643B7E, 0x7E69E2A4, 0x78AF722C,
+0x71698642, 0x87292972, 0x936F8A2F, 0x2E0AB21B, 0x8F6C4B1B, 0x343B0634, 0xFD46A428, 0xE27025B0,
+0x2115FF4B, 0xDD6CA1C4, 0xF438DBF0, 0x109A5926, 0x5B16DBC8, 0x0CF8B008, 0xD547981D, 0xB8C04F2E,
+0xE7F259BC, 0xCBC3CC8B, 0x3703BB18, 0x9985EADB, 0xD5B81C8C, 0xB3CE1246, 0x1128AA44, 0xAADB4A5F,
+0xF8FA385E, 0x5A4995F5, 0x37AD1F73, 0xFDABD258, 0x18C41A84, 0x637D051B, 0x4C9C4509, 0xBA74A1FD,
+0xA0D64564, 0x9C0D165F, 0x6D5B0938, 0x34FD4A05, 0x580A6635, 0x56E68ABB, 0x1DDE5F10, 0x7C28DA16,
+0x292C02A0, 0x18D0A38F, 0x3FF47A41, 0xE01DBCDE, 0xFE50F5EB, 0x914562DA, 0xF3C34204, 0x1AA5BCB9,
+0x062F054B, 0x2A4BB634, 0xA7EA7077, 0x468C0F8E, 0xF6B32B5C, 0xAD269FFA, 0x8AE00C12, 0x3822BAAC,
+0xD6DF44EB, 0xF005AEBE, 0xFB2E249F, 0x8C9C750D, 0x096A2BCB, 0x5F97D94E, 0xBDDBCCC7, 0x4A2E9D42,
+0x56C896C4, 0x7FCBDA75, 0xB5F4AA99, 0x2FA35F44, 0x1A5F4251, 0x9EB17199, 0x81C2F047, 0x389F13D0,
+0xABC62CB1, 0x64F7C99A, 0x37EDD14C, 0xEC956503, 0x00EE2BD7, 0x4EDA5E68, 0x692AA8C3, 0x3A652C87,
+0xB4A716DD, 0x3A509FDB, 0x3D9C13FA, 0x480ABA5A, 0x1E1D9BBB, 0x4881599B, 0xE4F2C9F0, 0xC8A51774,
+0x4578A4C0, 0xB566F94B, 0x03E616EA, 0xE167C53C, 0x47C8BB74, 0xEB0A0DB6, 0xC77CE645, 0x7A22128A,
+0xC39C0B8A, 0xBF707AE0, 0x4C503AC9, 0x9683F0F0, 0x786E5AF8, 0xEFA4E9D8, 0x4399FF89, 0xE311B8F5,
+0x6CBCF11C, 0xA1A3F8F8, 0x40F86C5D, 0x559F4416, 0x1FE764FA, 0x1293836E, 0x007CA8E4, 0xAD4CF895,
+0xBFC0034C, 0xBE4B9B96, 0x782A96AD, 0x4E4CEB02, 0x9E9E764D, 0x522F586B, 0xAA0059B4, 0xAD69C11D,
+0x4C985BA5, 0x37C0FB5A, 0x058E0974, 0xD504A341, 0x962A032F, 0x20ABCC5C, 0x9531737D, 0x600378F6,
+0xC9A3B5D8, 0xE2B08106, 0xC527AFEC, 0x42230944, 0x989274EE, 0x537F6D39, 0x40DBEE44, 0x5F36E98B,
+0xEA082D93, 0x3ADD06FE, 0x73C9F804, 0xD0C926F6, 0x264DA519, 0x71977E9B, 0x612AC314, 0x05B58735,
+0x2D374B6A, 0x6EF68917, 0x511BDF07, 0x5DB55FE9, 0x6FEFCDC2, 0x49B2619A, 0xF996DBFB, 0x5BA074E3,
+0x386D577E, 0x23E8B836, 0x08003165, 0x4E51B3EC, 0x1EE80503, 0x315088F7, 0xA52B6BCC, 0xA16A594C,
+0x85B52BE5, 0xBAECF6AD, 0x980F873B, 0x61BBD67C, 0x7A7C638C, 0x4F8E4601, 0x55838CE2, 0x3955D2A3,
+0x8F5F7EF5, 0x1F1B7380, 0xF0E8E824, 0x46C7A2F3, 0x81793432, 0x2FBA1269, 0x4BFB8133, 0x259BCE4D,
+0x36C40D01, 0x4EFB139A, 0xE51949FF, 0x5F3163D1, 0xCD7A141D, 0x4E1B073E, 0x12B6C556, 0x4C88C894,
+0xDF267E21, 0xE72CF49A, 0x379980BE, 0xB80F66EE, 0x3CE83A52, 0x1AB15659, 0x81CEEF28, 0x325EFBFD,
+0xD0177213, 0xD06AB649, 0x3B10355A, 0xAB957643, 0xE41F13DD, 0x2684CDB9, 0x8B91BD98, 0x1FA0B317,
+0x8E34200E, 0x765664B1, 0x7C15EB0C, 0x177E9BD6, 0x508D430D, 0x64F33D9E, 0xB5B80C36, 0x8A958075,
+0xA787CFF1, 0x7FE1061A, 0x22797FDA, 0x834054F1, 0xC06FE0A2, 0x00E19524, 0x3A15AAE1, 0x2AFFEFC2,
+0x19D2CE4C, 0x21AEE560, 0x5CB162C2, 0x7582C149, 0xA2308ED1, 0x6A9EE090, 0xA064A25C, 0xF5A2A407,
+0xAD7334DE, 0xBDB8245E, 0x98B668D7, 0x6F99DD58, 0x47BCF0B4, 0x409DE45C, 0x1972C82B, 0xD4FBE0DC,
+0x71AF8DAD, 0x5FC7D47E, 0xBE896EF3, 0xBC2F81BD, 0x815642CD, 0x8E960745, 0x0BC31BB2, 0x163E3906,
+0xB2A80825, 0xE848008E, 0x94DEC0C1, 0xD816BE27, 0xFA15B0F9, 0xE911E77D, 0x7A9A2DB5, 0x23A59589,
+0xAA07FF0D, 0x4977039D, 0x49FA7CD7, 0x18D353BD, 0xA08ED35C, 0x8BD8A411, 0x07F548DC, 0x9205A4CF,
+0xE516F486, 0x4D0A50A7, 0x46FFF585, 0x014BC4BC, 0x5FD0F5F2, 0x30C44B47, 0x0CAE8907, 0x54EE252A,
+0x0E8046C7, 0xF7125770, 0x6D5C1FA5, 0x4C89B455, 0x0539B043, 0xC75C9DA4, 0xDEAD3B69, 0x3FF0E6C8,
+0x54753CF5, 0xF72C4D2D, 0x3F35A3CC, 0x57DF978B, 0x2C9D0EFB, 0xF38571A9, 0xCD0281D0, 0x3D7C8E70,
+0xD67DD7F1, 0xCCA16EBA, 0x39E0613B, 0xD1226CCF, 0x99F05550, 0x5CBD6C7A, 0xB4996BDC, 0xB74F3E47,
+0x5DC27647, 0xE1F93622, 0x05135D65, 0x020451BE, 0xB20E4992, 0x3B4C1FFF, 0xEE891BE8, 0xE5ADAED1,
+0xEA859E6C, 0x24AAB4B2, 0x25B8C481, 0x21E410A2, 0xF5EB7450, 0xD1C217D8, 0xD902B086, 0x511BB85B,
+0x93699A35, 0x4A9891F5, 0x8785927B, 0x73FD177B, 0x07519435, 0x88CB51F7, 0x62966CB0, 0x1A6FA8F5,
+0x8765DDA3, 0xAA395C5D, 0x66E8A45F, 0x9ADC9BD4, 0xACF2BD28, 0x19FD6C0B, 0xAD4D68F9, 0xF269BEEE,
+0x63434017, 0xFD0FFDDB, 0x19014404, 0x56E861BD, 0x83706910, 0x3A60BC1A, 0x369DA75B, 0x84319BBF,
+0x6A3F3D10, 0x5E9EBA62, 0xFC61ADD3, 0x084440D5, 0x6E89E52A, 0xA0DFC376, 0x10F0A1D5, 0xD3E7FD9C,
+0xAA24A702, 0x1D055BAA, 0x468C7038, 0x0AE1C5CA, 0x61724EE0, 0x8C032A9E, 0x44A7ADDB, 0x08D9F147,
+0xABB1671E, 0xB604DB44, 0x59325458, 0x70DB73D4, 0xBE38ABCB, 0x69259502, 0x93485CF6, 0x39F6021E,
+0x23FDA072, 0xF6BA5985, 0xBF23782A, 0x9C5404D0, 0x66BD05DA, 0xAECD8C9A, 0xB8E3DC22, 0x33EAB727,
+0xB7B29565, 0xFE906F1A, 0x4064A0FC, 0x40887198, 0x5F9F0485, 0x9683BA92, 0x59A71C66, 0xF7CF4B4A,
+0x52A79ADA, 0x006837A4, 0x8D0D5A68, 0x34E3AF8C, 0x24349975, 0x61B931BA, 0xDAB547CD, 0x830F1586,
+0xE567670F, 0x953403E4, 0x243B12B0, 0x6C933E7D, 0x71DA6E4B, 0xFC9C84EA, 0x98009D3C, 0xF64998D4,
+0x9C30F04A, 0x024A1566, 0x7C3A27CD, 0xD63347F2, 0xB2D62AEA, 0xA3DDE823, 0xF1EFB537, 0x8DE54AFD,
+0x6713A377, 0xD7D7A5CB, 0xC1AD09EB, 0x9E6E5790, 0x31EF5A56, 0xFE35278A, 0x04BFF1F8, 0x698C9F72,
+0x71E6474A, 0x132D79A5, 0xAA280630, 0x9D27DAB8, 0x059EFC15, 0x365268E4, 0xAAD67836, 0xAB53B646,
+0x210F5E2F, 0x7AD376E2, 0x698EECC9, 0xE9530D68, 0x45F6925A, 0x6A8CBEE5, 0x58B3A6D7, 0x54BD2EEB,
+0xD9A8A6F4, 0x74646A91, 0x859BDD3B, 0x187C43B6, 0x364EA0ED, 0x74FC4C1E, 0x2F0DACBA, 0xFF31E040,
+0x0CE8CA63, 0x323E27C7, 0xAA34BCBE, 0xEE8061AB, 0x2AAED5B9, 0x1F51A1F7, 0xA3F61C8D, 0x6D9D6210,
+0x83200ECB, 0x5F9837FF, 0x7795BE91, 0xFA7CE310, 0x6EC451ED, 0x2432CA1C, 0x97BEB2FA, 0xD1651BA4,
+0x221623EC, 0x5D54393A, 0x4C442434, 0x6FADE696, 0xFAACDEA3, 0x61B74FF3, 0xBF5377B2, 0x05AB19B2,
+0x61754483, 0x9F1B9755, 0x0C488BA0, 0x604F41A6, 0x99908A32, 0xAD9D23F7, 0x91AA3B15, 0x2B655EB3,
+0xA79846AB, 0x0AF917A8, 0x46436EFC, 0x15DE8CB2, 0x352CE56E, 0x578208AC, 0x48D8446D, 0x22DDFD7B,
+0xB3C9F4A9, 0x313DCA07, 0x49647CEC, 0xD9995CA7, 0xD5EF120B, 0xE4C44326, 0x21559224, 0x5D3D4B20,
+0x13CE13D3, 0x99D4C852, 0xD0FB68BB, 0xEBB94B1B, 0xE8019838, 0x0C5F719F, 0xD9508790, 0x6B7F2F0D,
+0xCFC32E02, 0x210C459C, 0xBC778C8F, 0xA169EEA5, 0x88E71D5A, 0xD839E193, 0xEF357CFD, 0x522BB63E,
+0xD9B27516, 0x2DD7E5C0, 0xCA590E27, 0x2D50EDF2, 0xC435D654, 0xFF3C07D7, 0xA07A427B, 0xB496B4E6,
+0xBE35BFEB, 0x143B3677, 0xE4841E1D, 0xE3F2D82A, 0x34FC0EDC, 0x6EB123FF, 0x3886055F, 0x728B94C2,
+0x32B6B1A0, 0xB5225763, 0x80B54FAE, 0xE4F68614, 0x7B60CA55, 0x8A0CE816, 0xC540670B, 0x08791F27,
+0x29E7810D, 0x0E0C4E6F, 0x94895E97, 0xB8D81035, 0x035B8E7D, 0xF0208040, 0xC9209139, 0x81906E0E,
+0x9B8D2F40, 0x579271B8, 0x2FA197D0, 0xCCB0879E, 0xD1366A62, 0xF3D53FEC, 0x882263E2, 0x34BD80B3,
+0x866D45D9, 0x39829DA1, 0xF50BFC8B, 0xB93DB2E9, 0xE171193F, 0x6177BCDC, 0x35223EF0, 0x920A053F,
+0x954BFB77, 0xF472A895, 0x1E2851D9, 0x8770BC92, 0x2C7A5DDE, 0xAA88DBA4, 0xB8BB18DB, 0xA0BE5CAC,
+0x4517160A, 0x4868FE6A, 0xFD6521E3, 0x6E76D632, 0x1298A843, 0xB69BA623, 0x6FB6A51E, 0x429869B2,
+0x48D1DC90, 0x7C25014F, 0x4588B14A, 0x2DABF0E0, 0xC6EE6238, 0xDD3D04B4, 0x4F22D0EE, 0x3C16C3F0,
+0xA4A81F6E, 0xD0EAFB49, 0xB1795900, 0xD580863E, 0x463E2C20, 0x60E04A5D, 0xDABE2AB7, 0x38803CD2,
+0xEFADE568, 0xD283A2D4, 0x13685881, 0xACB7CDE7, 0x4AE6F60C, 0x8411EC30, 0x0FBE8C9F, 0x747C67ED,
+0xA8FC8C0B, 0xA40C9025, 0x021811E8, 0xEB7D9C3F, 0xFE77C080, 0x62A0A19F, 0x42F50AA8, 0x4F2EA25C,
+0x6FE5A308, 0x51909B6A, 0xA9D91BAE, 0x9968FD45, 0x4ACC294A, 0xF6DBEC0C, 0xFAB4A64F, 0xFB6992C0,
+0xB27A75DD, 0xC94CA22C, 0x76FAD773, 0x888705E8, 0x6366DDCF, 0xB4A1146A, 0x142FC494, 0xE0E73EFB,
+0x1E29ED93, 0x4754C836, 0x4B859867, 0xC669F576, 0xCA16D6B8, 0x5A0611EE, 0xADB6FA3C, 0x671A4432,
+0x53DCFB32, 0xE3400B91, 0x1A7EBDA7, 0xC6F131F8, 0x6CF48730, 0x927CC4B0, 0x7F84514B, 0x5FD29B5F,
+0x2B013549, 0xD5C424F0, 0x89BB0E25, 0xDA9F5173, 0x58024121, 0x2E06BE68, 0x380F0D28, 0x1B279569,
+0xBCA5F6E4, 0x9FC31779, 0x39057860, 0xD3894CDE, 0x22A22F4B, 0x166B594C, 0x7CCBAE13, 0x93779021,
+0x436E3E9B, 0xE523B877, 0x0F3104BE, 0x1C8EC70E, 0x1F331BAF, 0xFD25DE54, 0x7C05A168, 0x8B144CA8,
+0x2B618864, 0xBD56C7CA, 0x325EDD8A, 0x2591834E, 0x2A94123B, 0x07A92AFC, 0xE56437B6, 0x6CFF94B0,
+0xB61DDE99, 0xD2EC92A9, 0xD3DE3670, 0x5DDC3137, 0x555A0F1E, 0x3AC4F627, 0x55A869A9, 0xF934C0EA,
+0x6664A3AF, 0xD6FCD75C, 0xDD11936A, 0xEC46CC55, 0x7531545F, 0x7FBF69B7, 0xEC0CF805, 0x5D848806,
+0x6771B07E, 0xE8072CF2, 0xA0199B73, 0x450A6A49, 0x4CA3EEFE, 0xB680E631, 0x0A9B91FA, 0x8C251617,
+0x84C4C15A, 0xD17A9E9D, 0xA5C47DC4, 0x0266BE26, 0xFD22F321, 0xE957E174, 0x7C0D2602, 0x15FE5693,
+0x5DB68346, 0x21EB431C, 0x7718731F, 0x61A71EB6, 0xA14D9B09, 0xBF565898, 0x17836415, 0x3172E63D,
+0xAD2D6516, 0xDE98916E, 0x75701C53, 0x615BD719, 0x9FD12159, 0xEB9C9BC9, 0xE23E2CDF, 0x7D0E720B,
+0x83F13120, 0x23A9E520, 0x51B08D52, 0x54024761, 0x3C01479F, 0x9EEB10BB, 0x183BF990, 0x31A7FF37,
+0x61CBCF1D, 0x7A14BCCD, 0x0E785825, 0xDD76A8C7, 0xA3C06CCF, 0x34ADBD96, 0x0624BACE, 0x05831889,
+0xB0C8076A, 0x2C9F35C7, 0x406FCD15, 0x8D4C10A4, 0x1C9B24D7, 0xC12A42AD, 0xE343A444, 0xEA600C96,
+0x177DCD59, 0xE1527695, 0x233D5117, 0x68F768AE, 0x7B456AF7, 0x47B31F10, 0x76D89C56, 0x4522C538,
+0x2755668D, 0xDCCCE4D2, 0x5C93A3DA, 0xFAD7B27E, 0x777F6396, 0x893851D8, 0x32C92587, 0x47CB78C4,
+0xA8BCC73E, 0xB6B0C7AF, 0x5CAB31A2, 0xAA4A00D0, 0x40A56C0D, 0x4B8DBE55, 0x6A3BE00C, 0x7BD04AFE,
+0x95F4007B, 0x6F9E4C5C, 0x637DC4F2, 0x9A4949FC, 0x7661C65D, 0xBD6CDD9F, 0xC3F10F05, 0x9E8412CF,
+0x23349802, 0xE132E9B3, 0xFA403312, 0x6DB74F8E, 0x0AB4DC40, 0x15303772, 0xB67DB431, 0x28017839,
+0xEB9642AA, 0x4B7AA5B3, 0xC6BDADDE, 0x4D1DEB5A, 0x5A1EA112, 0x31009518, 0x1D5FA375, 0x44CBA8FA,
+0xAE30ACAB, 0xA6007CD5, 0x6432EEC8, 0xD11943B5, 0xBE64FAB7, 0x8F984D2A, 0xBA3D2989, 0x7983F60C,
+0xD1119340, 0x4B2E2DB7, 0x806EE2C4, 0x87E56FBD, 0xD4ED52AA, 0x1C298DB4, 0xC4161DAE, 0x185E1F08,
+0x71FAFB5A, 0x119C8051, 0x43AAE8B0, 0xA87FE225, 0xF5AD458A, 0xAD8EAEF0, 0xE75BC00A, 0xC4E904B0,
+0xB2B46367, 0x416934B0, 0xB7B86239, 0x545DF03A, 0x1B407FDA, 0x07049FD4, 0xCB0062E0, 0x85D2910A,
+0xA74A7FE3, 0xCFD1ADA2, 0xFB45DC9A, 0x2700E94B, 0x3B775F08, 0x7544D913, 0x9B72B1BA, 0x6C7A3986,
+0x25878BBB, 0xB9C2F5D9, 0xBF6769C1, 0xE27AFDE2, 0xC78933CD, 0x918C55FF, 0xA0FBD842, 0x830736EA,
+0x6F2D7DD7, 0x34666519, 0x114A4A74, 0x78560843, 0x5BBE8BAF, 0xEF05E6CE, 0xC3F4F485, 0x429888E7,
+0x84FDEB08, 0xD3BDF2FE, 0x6FCE9637, 0x9F97C94C, 0x3C30336F, 0xCBE6032E, 0xEE471FB7, 0x98ADB44B,
+0xE5DE2EF7, 0x47CC5448, 0x7052E307, 0xB2B3F5A3, 0x6E2BC151, 0xE512DB01, 0xB0EB7A3F, 0xBC036A9F,
+0xBF57B23E, 0xFC7089D6, 0xD07B5CBB, 0xA436EAD4, 0xF879382E, 0xC1795E88, 0xA1FAD360, 0xF571DB90,
+0x4B8340D9, 0x7E1C7D58, 0x233E3E9A, 0xD7C58AD7, 0xBABCC065, 0xF15CE488, 0xE2A42B3D, 0xEAB31D01,
+0xFD6C1323, 0xEE187DA2, 0xC0001E6F, 0xE5EAFDB3, 0x1A5CFBDC, 0x4DF22D84, 0xACC713C7, 0x678188D4,
+0x6D593AD5, 0x819061C2, 0xCBB04F4E, 0x36D3A918, 0x799FD615, 0x4F02B5B1, 0xBA224735, 0x368AC9FD,
+0xCC38C1F9, 0x4BF90922, 0xEBA3F0A9, 0xEABC82C9, 0x2876339E, 0x92F172C3, 0x6FEC6829, 0x9067448E,
+0x7657776D, 0x36EA04C4, 0xCD25084B, 0x25382EE6, 0x28D94AD2, 0x2E279B37, 0x7177DD44, 0x4C8B0EE2,
+0x1D64FCC4, 0x0615D6D8, 0x2F25DABD, 0x21A2FFB2, 0xBFAA523F, 0x08F9E5AF, 0x9A6274B0, 0x0DC390DA,
+0xF52BDC57, 0x327011E1, 0x32489F64, 0x37CC8E69, 0xECCED4ED, 0xBD9D677D, 0x86D95D44, 0x7584DF1C,
+0x673ACE44, 0x635E5B65, 0x88674126, 0xE0C03C60, 0x278747E8, 0x004268AB, 0x94FD9843, 0x972A1F1C,
+0x6F59C286, 0xED3A2706, 0x126A8A19, 0xA3255E47, 0x1331C798, 0x5500EFAB, 0x707006CD, 0xFB57357E,
+0x6549412C, 0xE9635596, 0x42D0D0E5, 0xE8A40F4B, 0x71640FDE, 0x58DBBEA3, 0x3B41CEDC, 0x3E66125E,
+0x5ABF464C, 0x8CE04338, 0xC3890112, 0xBACFA407, 0x5FF1D8E0, 0xB1457C65, 0x153DAE92, 0x21545B3E,
+0xD57B5CC4, 0x8DE0F77B, 0x056942EB, 0x59AB3DDA, 0x99D0CAFC, 0x54FA9D02, 0x60AFD1EF, 0x39257D10,
+0x209853C5, 0xF79DD4FF, 0x8CCDF2A1, 0x440AA344, 0x921328D6, 0x49C427BC, 0xB2F63E94, 0xE627B442,
+0x1DB6F74B, 0xB75A6BB8, 0x20E074EB, 0x64BF8BF0, 0x987C7373, 0x69076B1A, 0x8EBCA5AF, 0xFA471DBA,
+0xE5DC65E2, 0x2D677089, 0xCE975D99, 0x8590338E, 0x6D93A091, 0x6F8D0FFC, 0xF53FE0B3, 0x6D7D3C3B,
+0xDEA0F3B9, 0xA9A45959, 0xF3374DB1, 0x6054753E, 0x476420CC, 0xCBBA1475, 0x1BD09A13, 0x9FD3E12D,
+0xBBB1FA54, 0x741335B1, 0xE90C3045, 0x4D2E7F8B, 0xA5C4CC57, 0xF18AACED, 0x222C6205, 0xB1D55DDF,
+0xEA58F315, 0xF6915B6E, 0x61E225EF, 0x8B242DEF, 0x003E8C29, 0xC76FA5D8, 0x2026F690, 0xD587EA62,
+0xBB668AB0, 0xA203154A, 0xA6130CDC, 0xF591DF62, 0xB6C8A22A, 0x7E28F4B1, 0x249DD867, 0x61A08DCC,
+0x23F1013A, 0x220B5233, 0x8FB908AA, 0x5855698F, 0xE89578DA, 0x37E8600A, 0xFD1291BB, 0x3B244830,
+0x3F61E2A8, 0x6303CF00, 0xB45A21C3, 0x2E7BAFD8, 0xB9864E6D, 0xEF68C771, 0x31648A14, 0x4DF255A2,
+0x18E48360, 0xF3A4C605, 0xE39F9584, 0x6FEBC1F0, 0xA8C7870D, 0x11C843CA, 0xF184907C, 0xD6255160,
+0x6A8AE8F1, 0x5E7D4B9F, 0xFD51CF34, 0x9F668CB8, 0x43799251, 0x8DABAEBD, 0xFC0BDC57, 0xACDDA7FC,
+0xF243CE6C, 0x7A774259, 0x1728D301, 0x85781D07, 0x13DA17BA, 0x44B080A7, 0x681672FB, 0x24B9F6F5,
+0x45574E3C, 0x97704EA0, 0xFBE708E4, 0x9EE23C6B, 0x6F88BFB0, 0x4EE7F37A, 0xF6142280, 0xBFE3FE80,
+0xBA9DF3BC, 0x4AE94934, 0x62B9E60A, 0x5B317D44, 0x0BF1E147, 0x8934EB74, 0x96FCDD12, 0xEE85E889,
+0x523A349A, 0xD049ACE0, 0x2CF5071F, 0x7D8AE2EF, 0x449FB18C, 0x0020AE32, 0xF6362A99, 0xD0093341,
+0xF680F985, 0x13F76CC6, 0xB2FA6B78, 0x1B598DC7, 0x51BB90D0, 0x0843BBEF, 0xF6E9B564, 0x73B98CB4,
+0x8F917CF6, 0xE4564837, 0x724F4EC4, 0xE035D70A, 0xD7712E0E, 0x767A1246, 0x712FBF25, 0x706E917C,
+0xE5F276F5, 0x76987608, 0x6E671CAD, 0xF3D760F9, 0x6F7036C2, 0x85BF42B2, 0x051330EF, 0xE0210250,
+0xB0818632, 0xABF03CC6, 0x7906EF3F, 0xD94D6415, 0x31F0E3D7, 0x9C0F4DA5, 0x9B925AD7, 0x2F50CE6F,
+0x75342069, 0xEC1169F9, 0x089D57B5, 0x3A3DD8A9, 0x3B5FB744, 0x7B2F3525, 0x505C8C58, 0x3196A643,
+0x0686F3A5, 0xA8822E85, 0x81EAFE01, 0x92976B93, 0xD4D58B23, 0x9471F40A, 0xDD577A68, 0xE9AC4F5E,
+0x17C14A09, 0xC6FF7C5E, 0x7DB5F3C9, 0xFAF1347E, 0x2E562332, 0x3C085DD0, 0x7DD5327E, 0x4387CB02,
+0xCD4BA740, 0x9F90FB3F, 0x1B5834FD, 0x5FAEC309, 0xD794FC8D, 0x9076F648, 0xC890D337, 0x78574135,
+0x7E34EB95, 0xC76DC2EF, 0xB858DC96, 0xD110CC8C, 0x93B6FCF0, 0xD838CC4B, 0xD44C1129, 0xAE461167,
+0xA509B326, 0x8A6C953F, 0xA64894E3, 0x886B8564, 0x3196C1E5, 0x924BB8EE, 0x7C81288F, 0x0F14600D,
+0xE6315BD0, 0xC43D0216, 0xEC363E47, 0xE2C713D9, 0xF7F17D63, 0x4F3E0232, 0xBBBB7CD0, 0x69C9457C,
+0x6C7945E4, 0x96EA9AA2, 0x9CEF60D3, 0xFAB37B24, 0xE503D392, 0x046C965A, 0xC70B1ADC, 0xA88A5EE5,
+0x1FFC0BC2, 0x53B11C1B, 0x418B763B, 0x8673D204, 0x8AB2977F, 0xF2BEF55E, 0x9F8FC6F4, 0x4E94BBAA,
+0xEDF5C978, 0x3F2802F9, 0x800CB1ED, 0xA77180DC, 0x5A8E6FA8, 0xDFB46FDB, 0x86796C14, 0x5A153256,
+0x4BB46261, 0x02EC9F11, 0xC8ECBE7A, 0x7780F3A9, 0x9519680F, 0xD6E00585, 0xBBEB6F3D, 0x782D61EC,
+0x0FC7BA38, 0x6804A0D1, 0xB8BBF3C7, 0xA7AC151C, 0x47473583, 0x4774D1A7, 0x9CB611ED, 0x5712AF26,
+0xBDF931B0, 0x0091FB98, 0xDD0CBA57, 0x38568028, 0x143D1CD7, 0x4F58297F, 0x8925F58F, 0x0B07903B,
+0xE8B87E91, 0xE1C9DAB5, 0xD25BF034, 0xCB1B11B5, 0xE18F20CE, 0x4212CAB6, 0x2BF74577, 0x5B323C02,
+0x270B71A0, 0x506113B2, 0x9CF8F980, 0x73F832B4, 0x99287A13, 0x046E2836, 0x996B37B3, 0xB05E1167,
+0x5C112F25, 0x418E58E7, 0xBB74F97D, 0xD053958B, 0x6296EA7E, 0x35F6284C, 0xB3349BDF, 0xD68CDF0E,
+0xCF7A75DD, 0xF8175B55, 0x7D046245, 0xBD5CE425, 0x65E0A0F1, 0xA1A9E82B, 0xCD35E626, 0x22888D96,
+0x2816F50F, 0x30D6CBC6, 0xC65EDA02, 0x5A6EEFC5, 0x71DF5291, 0xCC56EE61, 0x1DACED8D, 0x966CFB66,
+0x253882B3, 0x6D9904AD, 0x775765B2, 0x23A5AA9B, 0xD1C945AB, 0x5200E563, 0x7B8AC3E6, 0xAAF3BEF0,
+0x1B1F8ACB, 0x37EF199E, 0xC61C9AE3, 0xAAC1A09B, 0xFF14A83D, 0x9F2DBB18, 0xF0B8E3E9, 0xD6966476,
+0x2E96C0B8, 0x017571EE, 0xCD1C836D, 0x0571C25F, 0x3C7D4E21, 0xDAA43CB7, 0x9D18274D, 0x20D4E22C,
+0xAD9B34C9, 0x26473FA4, 0x785D6256, 0x356CBFB3, 0x22BCA120, 0xACDE8C6D, 0x778F71AA, 0xD1F21449,
+0x050576C4, 0xF6B143EA, 0x3DFAD73A, 0x2A48C190, 0x4887D726, 0x5F93AA40, 0x717840E9, 0xCD762D95,
+0xB0EBFDB9, 0x46D4B509, 0xC03773B3, 0x028BE227, 0x3D35D437, 0x30B66B4C, 0x8DD2CB40, 0x35574D81,
+0xFDBD8E17, 0x64E35F5E, 0x7C0595C5, 0x9D8BCBBB, 0x794C0CCA, 0x8C584042, 0xC36D8783, 0xE76AB46E,
+0x69F023FD, 0x62837551, 0x5E324F24, 0xF9FB9050, 0x5F7505F2, 0xAF05470D, 0xCE72ED74, 0xD7A63879,
+0xEA02B1CC, 0xF2D55326, 0x3AD7EB30, 0xB7B52D35, 0x34D07C50, 0x34AF00A1, 0x0C498029, 0xE929BCFF,
+0x6958377C, 0xC192E954, 0x8D004AA8, 0x1E6B198F, 0x5868FEEE, 0xE31788EA, 0x9AFFDF6F, 0xE3354A0B,
+0xADD5B970, 0x012B2710, 0x71615EB4, 0x1C296631, 0x88705EB3, 0xDD4223E1, 0xC0E54DF5, 0xA1AC68C0,
+0x873AF178, 0x16BE3E56, 0xAAA7E917, 0x7035CAD7, 0xC2274000, 0xA41B5E09, 0xDD757966, 0x549EBCC2,
+0xE71FCE90, 0xE3555BDD, 0x82FF0174, 0x16FF3531, 0xCFC8E231, 0x12BD3387, 0x7BE376BC, 0xC96B8F85,
+0x2CE2DB16, 0x60E7BEE1, 0xD944BA54, 0x7E875E7F, 0xAA417677, 0x90CDA7D6, 0x9AE91EB4, 0x3CE6CE35,
+0x08ADF0F8, 0xA17582A1, 0x3D4D3A74, 0x6D849E35, 0x631169AF, 0xBDE1F7DF, 0x8FEFD71C, 0xE54D0133,
+0x5941DA0E, 0x72050E20, 0x2113D990, 0xFF0C25C9, 0x5F009BC0, 0xAD3D9029, 0xB4796847, 0x35CCBBB6,
+0x642B9B1C, 0xAB6E06B6, 0x2DC305CE, 0x0D8A7765, 0x9A77A0CC, 0xC0056FE0, 0x240B33C7, 0x5F94B3DD,
+0xF28F570A, 0x4DBC43BE, 0xD966CF57, 0x1DBA9BDA, 0xB5314C7B, 0x703BCCBC, 0xA374DB82, 0xEEDC5E21,
+0x810272AE, 0xFA52E231, 0x90954ECD, 0x62C89272, 0x67488724, 0x04B83B81, 0xC0FEE5EF, 0xD571FE8B,
+0xE8E89FDD, 0xF3884CF5, 0x97DFDCCB, 0xE856F5F7, 0xEF5062BC, 0xEE7BE697, 0x8DAF3F88, 0x7C51CD15,
+0xAD21FE14, 0x904BC689, 0xB3E57069, 0x02998236, 0x7E8515E8, 0x21E6F0A2, 0x585699C3, 0x6E6ADA19,
+0xBFB70CEA, 0x44C3E622, 0xA22B6388, 0x44997C58, 0xF7B0A01C, 0x34A84825, 0xAFFFBB8E, 0x61C819F1,
+0x7E1E4764, 0x11B5A6E9, 0xE3A938FA, 0x615F795C, 0xD86744F8, 0x9227E402, 0x28AE650A, 0x0FD4FDDC,
+0xEA5BE174, 0xBA19E682, 0xEDADF415, 0x0DF195FD, 0x6F57618A, 0x3529AA0E, 0xD582324E, 0x241FAEE1,
+0x945F7B5A, 0xC3C3ED7A, 0x148BD166, 0x25F7153C, 0x7FAF78F1, 0xF3A9F813, 0xD8509A1F, 0x5C3C99B5,
+0xF40DC861, 0x86D324FA, 0xB1F80B50, 0x15F21870, 0xBFE1F510, 0x18A30EF2, 0x7ADA192A, 0x3D29E855,
+0x7A69A04A, 0xC99080A2, 0xF42D58A3, 0x4A3EFE73, 0x27358B49, 0x15BEFA2E, 0xE59BAFA1, 0x650D6EB9,
+0x78281501, 0x28CFBC14, 0x6A457538, 0x115C22A6, 0x6EF1D5EB, 0xE8391ECB, 0xAFD438F0, 0xF79F26F1,
+0xEDCAF830, 0xCB34BCF8, 0xDF99EC9A, 0x305F5F16, 0x818068A0, 0xC57E6448, 0xE87F5F9E, 0xE4F138C6,
+0xA3CA7E5D, 0xA1E1199E, 0x5083B2DA, 0x4CC4F662, 0x94FD032D, 0xA63399DB, 0x85C6988E, 0x458C180E,
+0x760755EA, 0x2E05B624, 0xF3E37127, 0x09AE6E08, 0xF2BB4CF3, 0x8148ABCD, 0x699E2FE0, 0xEC923F2F,
+0x6880E94F, 0x540E1704, 0xBD2F30E5, 0xDA6BEF42, 0xF05705B0, 0x966B63A7, 0xBF7C9651, 0xBD83D2E7,
+0xE76A868D, 0x5FE0E74E, 0xD65EA061, 0x29AEFCEA, 0x56C2F024, 0x94FD6B7F, 0x9CAFA27D, 0xFF8DE76B,
+0xEF59FEBD, 0xECECF3B3, 0x1A8413BE, 0x1DDC3E06, 0xB4FAA732, 0xA71917FE, 0x7B1B3AF8, 0x67A3997D,
+0x8A2F1A99, 0x4343320F, 0x9EF075E2, 0xB1843B63, 0xD15005ED, 0x2859BFC8, 0x0D431370, 0x6D4A91BB,
+0xA03A1695, 0x3379A765, 0x923D32C3, 0x2D8607B4, 0x7671FCB9, 0xD5DC3F9E, 0x401D3AE6, 0xA67AC571,
+0xC4D6325F, 0xAEDB0B6D, 0x77C297BF, 0x9C841CE5, 0xCF37F3AF, 0xFE9ACF8A, 0xF7C7F21D, 0xC9BB7AF0,
+0xD37BE172, 0x467BBC88, 0x7FD4EAB1, 0xCAE6BCD9, 0x4CAC65C2, 0x010CACF8, 0x769BA878, 0x8B1D6720,
+0x0C922DB8, 0x0D52E03D, 0x7581C701, 0xBB95CFAE, 0xA8095E4A, 0xDB5A2E9C, 0x0ABA5D96, 0x7D271430,
+0x2C589A43, 0x81BA0736, 0xD97D242C, 0xC00D58CD, 0x73DB45FD, 0x7F2A6415, 0xDBE02C1B, 0xDD628420,
+0x5E3DCA24, 0x4F0E911B, 0x64D67ACA, 0xEAE5D641, 0xA607E4B4, 0x3C89BBBD, 0xE993B08C, 0x1ACF602E,
+0x71CA367E, 0xC38485D5, 0x96970E2C, 0x4EFC2060, 0xAA1013B8, 0x0567C61A, 0x509D9347, 0x1190DAFE,
+0xD80FE16E, 0x5111FE4B, 0x72C384E0, 0x445E0736, 0x53E7E3C3, 0x89E54E49, 0xB76CD9A3, 0xD55A5EC2,
+0x8F5F7A1C, 0x3B6E6A83, 0x03016E7E, 0xDAE8B551, 0xD040E492, 0xEBA39CA3, 0x8ED01CA1, 0x0D6C86CE,
+0x226E1428, 0x34435A0E, 0x3961460B, 0xCD213D84, 0x73B251B3, 0xCFD263D1, 0x060E320B, 0x24E32E20,
+0x02E4CDDF, 0x2F7B91C9, 0xB49E97A8, 0xE651443B, 0xBDDA9F2F, 0x9E069F39, 0xDF09DA1A, 0x681CF7B3,
+0x1CB9B91E, 0xB37859BA, 0xF479AB1B, 0x26C7CB3C, 0xCC497EB7, 0xDC877987, 0x15F397E3, 0x009C492A,
+0xBAA958D2, 0xF3D719E7, 0xFACBA665, 0x604CA805, 0x9B34F5C5, 0x2A9508A2, 0x6F133639, 0x861ABF45,
+0x9AD343F9, 0x719D547E, 0x9E1BBA24, 0x88CDE86D, 0xA13F9EDC, 0xF749DD1E, 0x8536EB74, 0x7E63EABB,
+0x9B258E84, 0x9F13D4F9, 0xCF838E2D, 0xC2AB8DB7, 0x64EDFF2D, 0x76149827, 0x9B888FFE, 0x02E21F5E,
+0x960BF381, 0xFC54A664, 0x71E3BA1B, 0xD7AE46EA, 0xF5E709C9, 0xF98821E7, 0x415D1A02, 0xA30E31DB,
+0xFFF7CF28, 0xD402EC32, 0xE19577A5, 0xD4A293A9, 0xC8DFE113, 0x6883DC5B, 0x366AE8B0, 0x41131116,
+0xB43AA782, 0x3A9530EC, 0xACFC3485, 0x528436C6, 0xA105434C, 0x8FE6A5BC, 0x65B64EA9, 0x346A3E56,
+0x9C925903, 0x90497D3C, 0x2A6F02AF, 0x8A1FA2AE, 0x42B75CB0, 0xE3E49F3E, 0x9007BA29, 0x8934BC82,
+0x22D7D036, 0x26997BC1, 0x4CDAA4B5, 0xE5355357, 0x8BE2969C, 0xAEC40262, 0x6ADE5122, 0xEDC496FA,
+0xB60AE5A5, 0xBF270D8F, 0x6A625877, 0xC0C1704D, 0x377D9A3D, 0xA04B9B2D, 0xA79A1E71, 0x8549C527,
+0xFF5290EC, 0x7B16677B, 0x75CD802F, 0xF4BE5FE9, 0x2A1AB881, 0x5E80DD22, 0x3CC53A05, 0x782BCC45,
+0xB5C5FC8C, 0x1DDD9806, 0xA034417E, 0x23C1CFD5, 0x98F55B89, 0xF1341C33, 0x9A386F24, 0xC9020627,
+0xF7C759CA, 0xCB825746, 0x568E69E4, 0x3B5711B3, 0x862A14C1, 0xEC7CDBD0, 0x0E69F58C, 0xC5783228,
+0x722858A4, 0xC08A1554, 0x1B7F712C, 0xD48139E8, 0xEC99259E, 0x0B911A64, 0x09B4918A, 0x42592957,
+0xFE51427D, 0x0297B068, 0xEE3EA10B, 0xADDF6994, 0xE4D06495, 0x9BE49B36, 0x5B76DDF3, 0xFA2BB197,
+0x8B642A0A, 0xC702D5BF, 0xAC1A3437, 0x2AAD3863, 0xEAD5B067, 0xB4B3B764, 0xCDAD8B0E, 0x16F60D26,
+0xC63A950F, 0x0C9E174C, 0x91ED0410, 0xA20E04F6, 0xAD778C3E, 0xF6C68B3D, 0x6F6C2778, 0x3CB61795,
+0x3806A177, 0x5D0F87C6, 0xB13CEBB2, 0x576C80AA, 0xE4C71E11, 0x876DA008, 0x66E6E5D2, 0xFFA30CCE,
+0x1DDFCADF, 0x9D8A38CB, 0xC9B95116, 0xAB1BC2D7, 0xA947EC2A, 0xB2908086, 0xF96C5481, 0x1838C0E9,
+0xDEC390EF, 0x7B92FF67, 0x371AE664, 0x61419B39, 0x7B7BE00F, 0xDD1BCE5E, 0xF02BAB0B, 0x76E325FC,
+0xED984D29, 0x68133B8D, 0xEF8B363C, 0xDABFE8E0, 0xC9765B4E, 0xA22FA9AB, 0xE2B25858, 0xF36D0474,
+0xFBD4334B, 0x37C4A154, 0x33B4B441, 0xDD750379, 0x18008253, 0xE544BBA5, 0xB396A43D, 0x52C4072E,
+0xF2215A05, 0xCA569911, 0x9EADDA26, 0x3D040817, 0xB688244B, 0x4C64FCFC, 0x1979BEE0, 0x6AB0C973,
+0x4602969B, 0x4B94CC16, 0x7BFED0B3, 0x203C3D9E, 0xE2EB672F, 0xC290D4E4, 0x59D27622, 0xBB39F784,
+0xE8EA2AD7, 0x6F70F28A, 0x958F38FA, 0x47A88BF1, 0xCC6ED794, 0xE3709C1C, 0xBB2EA7B8, 0xF9A3C1A0,
+0x814AB7EA, 0x7CFEFAB8, 0xB46ECE1D, 0x1F1A79C6, 0xC824A0BE, 0xC4FB075C, 0x3636CDFD, 0x8795C0CE,
+0x429DE9D9, 0xBA2C05EA, 0x384C7253, 0xD0BCE753, 0xDDE65C49, 0x81968A1F, 0xB88BCEDD, 0x34B86FDF,
+0x21403DA9, 0x1C1E7402, 0x0A61067E, 0x1A30E937, 0xD33BDB88, 0xD97A3F59, 0x49F18E1E, 0xDB7D2E8D,
+0xE459DF56, 0x37DA9F03, 0x572DF6C2, 0xE26E0D99, 0x16448565, 0x06EA1CEE, 0xC135798B, 0x3B13C90A,
+0x70863761, 0xF781CFAC, 0xE0BC46CB, 0x0352234B, 0xB858B105, 0xA438766C, 0x1CC2F5EF, 0x81185F85,
+0x2E53C11B, 0xC38F7C56, 0x17C1F28E, 0x1FC5072F, 0xF91CAC8F, 0xD8EDA611, 0x7F0AF366, 0x2AA1F458,
+0xED8863EB, 0x8E95C07C, 0x1898F8C6, 0xABDF7D1D, 0xEB579D78, 0x74D6802F, 0xAEE7833C, 0x5E683009,
+0x1FD2F69C, 0x0C8161B1, 0xDDB4E15E, 0xB98E5CA3, 0x537EBFAA, 0x48223200, 0x56075E47, 0x6960F98C,
+0xCA59D9AA, 0xE605A07C, 0x8BF00714, 0x34CA45B9, 0xC8362B8A, 0xD0AB4610, 0x25CF7C7E, 0xA82DA76A,
+0x571F0E94, 0x4EF08314, 0x6B9296B4, 0xC73DE6B8, 0x62A83C70, 0xB99DED3E, 0x357315B5, 0x5AD093AE,
+0xA21198B7, 0x58E05CAA, 0x9468247F, 0xB145BEB8, 0x2A05AF96, 0x22CCDB77, 0x183ADD50, 0x26CCD4B9,
+0x63BC561C, 0x474FEC3A, 0x42B5F587, 0xCBCF035F, 0x85D3FE8C, 0xADB501E6, 0x9056EA0C, 0x7F8DE118,
+0xF6E16389, 0x4F9AF8A9, 0x3ACBDF1C, 0x0ACED23B, 0x04A36F65, 0xE34370C0, 0x016AAC71, 0xDAC6C13F,
+0xA4E044EF, 0xDA2ACE2F, 0xDE266288, 0xF2E23035, 0x3A60AA27, 0x9505870E, 0x2ACCD170, 0xFB0BDA69,
+0x8BE886E6, 0x298DDF49, 0xC268CA7C, 0x3946C0BF, 0x17F4A822, 0xE13A428E, 0x39E3AC70, 0xD57EE475,
+0x89FAACFD, 0x568E54FF, 0x976DEE30, 0x2EC36762, 0xFED7A2BD, 0x5B6A9F82, 0x9D0FB240, 0x2F0C7F57,
+0xAC77C2BF, 0xBB457732, 0x552733F4, 0x34034967, 0x109C46F7, 0xAF1FE901, 0x9FEFBF89, 0xA4868DA4,
+0x053AA536, 0x235C8FDF, 0x913AEAC6, 0xDCBB6766, 0x59D5834B, 0x9B62A06F, 0x7F097360, 0xDD0B34F4,
+0x3D2A2984, 0xE3CC9441, 0x6D13AA81, 0x667D3613, 0xBF63CB62, 0xBD11E089, 0x8DCCC3BC, 0x50117695,
+0xAAD054CF, 0x243BCB9A, 0xB980F89D, 0x9F304DC6, 0x2BD53E91, 0x7DA37984, 0xD6E163C6, 0x3101CD85,
+0x772186B8, 0xC1F04FB2, 0x8EF737DD, 0x767CF252, 0x3A762AEA, 0xAAD79488, 0x2E18DFE1, 0xE3D7CA9C,
+0x38A292DB, 0x8ECF92EF, 0x0235EBC7, 0xCBE33E2A, 0x52517BAA, 0xD26F6319, 0xB74D8051, 0x2AB2A551,
+0xA2238C2B, 0xCE263C40, 0x06712042, 0x877AA5CD, 0x3DEF8FF0, 0x411615F1, 0x0A3662EA, 0xBE2B7330,
+0x8C950D81, 0x97D1A540, 0xFA74C344, 0xCD5B4343, 0x79B84A92, 0xC0CE24B6, 0x9FBD8BD2, 0xDDBB845F,
+0xEEDE3C67, 0xB6CD5C97, 0x33E96BBF, 0x3ECA93A0, 0x96A36CA1, 0xCB8CC896, 0x4AEC6EDA, 0x0B4DB12D,
+0x294F51FC, 0xA260439B, 0xDBC8E820, 0xCB26C698, 0x6F4ACAA7, 0x66CD3BF9, 0xC123F2CB, 0xACFC5037,
+0x2718B421, 0xC6F2A602, 0xF372D9E9, 0x2E182C51, 0x8B6F5126, 0x7E7039A4, 0x67CE3260, 0x0AEA7820,
+0x4028FD87, 0xBFA2FF8E, 0x7DC198AB, 0x519F5C93, 0x21E6C05D, 0x81591AA1, 0x717EA48F, 0x94BE29BA,
+0x0A9CA532, 0xBDDDC5DC, 0xEE604F31, 0x15E01F4B, 0x062D9728, 0x69B57D7A, 0xA1B204F4, 0x7CC74CA2,
+0x305B02F8, 0xFA5E169D, 0xA6EBBB98, 0xC21F3AB9, 0xB351C52E, 0x6D017DDB, 0xC474A315, 0x7CE71DE5,
+0x23DBC9FE, 0x32759C49, 0x8D5E1F6E, 0x7281E5BF, 0x9C261F99, 0xA03007AC, 0x8AA10F99, 0x25C777C4,
+0x0FC839FB, 0x4BCFDE13, 0xA5138848, 0x090F2F96, 0x2BFBB9E1, 0x85A62895, 0xC6B9EE2E, 0x39D33147,
+0xF003C35D, 0x76D86580, 0x433395E5, 0xAEFBCDFE, 0x29D8B056, 0xD90E3802, 0x6EF44449, 0x02BC49F8,
+0x7CFEB4DE, 0xC731E298, 0xB05E72E1, 0x9396AE34, 0xD70AA5B1, 0xCD584C1E, 0x1D589FC3, 0x42E872C2,
+0xBE3ED889, 0x83E9C6B1, 0x32697958, 0xBD24FA46, 0x1BC6BE13, 0xC4C98042, 0x92AFA9F0, 0xE1C490E1,
+0xF2D690BC, 0xBFF7A0E5, 0xFBC15E6A, 0xADAE6D9E, 0x63203084, 0x5127A143, 0xA3C8A943, 0xF0D06DF8,
+0xB9FF985B, 0x3DEDB832, 0x6921B7DB, 0xF777C635, 0xB9DC9ACF, 0x287E78D5, 0x0646E1B5, 0xAE3D73E7,
+0x01C08B8E, 0xA9789768, 0xFFC0CBC8, 0xA4D268B6, 0xD255B51A, 0x0539B484, 0x8A3AC683, 0xF3C7E7EB,
+0x9224D3FB, 0x8BB60DA8, 0xC192F9A1, 0x392FDE6D, 0x586A5860, 0x6CC69234, 0xE483CA64, 0x66ECEF6D,
+0x8602D0F6, 0xB9834E4A, 0x26C0E504, 0x6C7C2F94, 0xF74087E5, 0xF105814F, 0x9D489444, 0x2341ABE4,
+0x7C3E5764, 0x410D8F53, 0xC3866E74, 0xEAA88AF4, 0x91084CB0, 0x8D9895A2, 0xB6ACD52E, 0x2A0D6C4A,
+0x8EFE3E0A, 0x5F167FB8, 0xEE227E28, 0x564A32B8, 0xFECD7FD2, 0x856BEBB1, 0x3CD531D7, 0xA1114E9F,
+0x39981CD6, 0xC3D35198, 0x7D91D110, 0xBF6A6BB1, 0x90A47EEA, 0x0E0D3A73, 0x06E4614F, 0x74B4E05E,
+0xB8A5B1BB, 0xCCFE6219, 0x097CA90B, 0x89E50BA7, 0x4D56E27D, 0xDB0F2416, 0x085CDE45, 0x664F8F96,
+0xE41888E5, 0x3C675F52, 0x6585872D, 0x76419C5E, 0x72DB5736, 0x25B55B8F, 0x598077BD, 0x18120A48,
+0xDA8B3A87, 0x24861DD0, 0x4707E74D, 0xE2C58B31, 0xB4957709, 0x8B2A4CD0, 0x96484F42, 0x2E5250AB,
+0x1CF1063D, 0x51D278B1, 0x8BB984F1, 0xD1B3110E, 0x8B0692CC, 0xC0D8F656, 0xCDF9804E, 0x32812E8B,
+0x46672545, 0x63968947, 0xFA744357, 0x170DAB22, 0xC2E5D3C2, 0x54A41DEC, 0xFCED2ED2, 0x87AB05EA,
+0xB3599565, 0x54600149, 0x8D3405DF, 0x8C8531B9, 0x6E4F4805, 0x963CF8E6, 0x007BC2E5, 0x5DB2F691,
+0x11077699, 0x2DD25E48, 0x4B9F9816, 0x103C0363, 0xEA2F027D, 0x8730614F, 0x3BDABF3B, 0x994DDB9D,
+0x22160C43, 0xA6FACE88, 0x20D657E4, 0x50A0527B, 0x9E9D622E, 0x137535BE, 0xFE266B8E, 0xE58EFFBF,
+0x4710E79A, 0xA5D97C78, 0xB53FBE49, 0x21E4085D, 0x415A193A, 0x8AD31544, 0x5766E5B6, 0xC471FD7B,
+0xE5D0BAC5, 0xC02652EB, 0xC285542A, 0x99EC9B6A, 0x355D9045, 0xFEBF5BB3, 0xE5956A3C, 0x1821FAD4,
+0xB929B388, 0x3BC7952C, 0xE01328CD, 0x9CBB878A, 0x81C8D181, 0xD6C96DEB, 0x43D68531, 0x8281E434,
+0x8E0DCFAC, 0x382F9300, 0xE26D2D87, 0xF2298B86, 0xEEC54103, 0x19645DB5, 0xFC6AB172, 0x9582726B,
+0x1DD39449, 0xE8271885, 0x7B7C0053, 0x744FEC39, 0x8FD42F9F, 0x73487615, 0x65085D69, 0xC3F45DCF,
+0x623D10E1, 0x6C015821, 0xF411941F, 0x4CA2A785, 0x99853699, 0x4DDA0FEE, 0xA7B7E542, 0xAC4C9D3D,
+0x6423D9B5, 0x8E785DA1, 0xA4BFB4DC, 0xB6B253B0, 0xC62C8A43, 0x21976444, 0x5D3658F9, 0x3BD0BE15,
+0x42B947D0, 0x1D709753, 0x562A2A08, 0xDC6F192F, 0xF36612FF, 0xA29403DA, 0x4828C58B, 0x0BED552D,
+0x69C742AA, 0xE0A11A9A, 0x744E0691, 0x486355CF, 0x89B610C2, 0x40790382, 0x294653DA, 0x9AE4876E,
+0xC2D9D475, 0x751F6A92, 0x059028B4, 0x8A37BE16, 0xA4A3F53E, 0xA04123AF, 0xA8303537, 0xDC75F3ED,
+0x622F33CF, 0xB6BCE0DA, 0x3006A304, 0x81E99954, 0x93E6A2CF, 0x091FCBD4, 0x801FC666, 0x407FE9F6,
+0x695A262A, 0x388537C8, 0xAEE6F2B1, 0x4B22BF94, 0xF35F7DA6, 0x4C8424F4, 0xCB4F67DD, 0xBCD85CFD,
+0x3DF87CDD, 0x8FB5246D, 0x53C7895B, 0x7803C558, 0xE5EB9688, 0xB0B4A6AB, 0xF12EDBED, 0x165EC205,
+0xC65EC685, 0xECD677B9, 0xBD5B1AD7, 0xDD1BF355, 0xA90745BA, 0xCACF4E34, 0x6FB34046, 0xDD3B420B,
+0x3514BF2B, 0xAFF0423D, 0x77351964, 0x3D789691, 0xDC8AFA38, 0x84FAEF05, 0x139EA81F, 0xACFC483A,
+0x5596D279, 0x64991A70, 0xA8587360, 0x4BC6D1AC, 0x0E90B282, 0xDC5F6583, 0x395C213A, 0x435057A6,
+0xE44A6679, 0x95BBEDF2, 0x1002A4D4, 0x2D58ED1D, 0xC5C7A5C3, 0x0CD0CB33, 0x55B35A37, 0x2D125EFE,
+0x69BCBD55, 0xF076D596, 0xA68D2E54, 0x1C4BB716, 0xC93EE3C7, 0x10E4071F, 0xD53C52AD, 0x6F1C0245,
+0xE06DF271, 0xE17B09F9, 0x3AFE5809, 0x95884653, 0x4AE40768, 0x8FA052BC, 0xD9DAE49F, 0xE0A885A1,
+0x4A8863E1, 0xAED3608E, 0xD952EBC3, 0x49653686, 0x7C3542D8, 0x560CD521, 0xB0503905, 0x31604928,
+0x3B355D87, 0x5243CA51, 0x0611A190, 0x64E71D72, 0x325B52C7, 0x4A9230B5, 0x2E3CD9B4, 0xF6BD6265,
+0x742DD960, 0x3C657F33, 0xDF236A8A, 0x525E98EC, 0x3E654210, 0xB3891EFC, 0x0BD4ADF8, 0x294CFC01,
+0x4258C7DA, 0xD2AFB6AE, 0x9A1240B4, 0x43DFE4CE, 0x2C2FB8C6, 0xF6033F57, 0x90E94E9D, 0x86CEC412,
+0x67BF83B3, 0xC72E4812, 0x514DCCC5, 0xC65ACF39, 0x25222846, 0x71746F63, 0xEFF8262D, 0x03529FD1,
+0x6936D315, 0x138073CA, 0x9E7C26B8, 0xC8B3D577, 0x895EE153, 0x12D00656, 0x6CE7711C, 0x58456A4E,
+0x6266B9CA, 0x8004A38C, 0xF727539F, 0x15C3DDAE, 0x08DA6B2B, 0xE250F250, 0x64EF08BC, 0xC3F0DA08,
+0x3191DAA6, 0x666E9BB8, 0xE56337B3, 0xF51AA9AB, 0xA40714A1, 0x399829FA, 0x12CD1928, 0xBD80C944,
+0x64E4945B, 0xCBFF392B, 0xB999297F, 0x0D28E754, 0xF32EF2DA, 0x6DF14942, 0x5136630E, 0x96D2D3F7,
+0xBBEE7937, 0x49314A96, 0x3B04326B, 0x2F7B2692, 0x8FDC13E5, 0xC5014E35, 0x1AF3606A, 0x8BCDA02C,
+0xF3BE3BF4, 0x19D0E48E, 0xCE10F28A, 0xE5731201, 0x61C1BFCE, 0x7C1A7EA4, 0xA05AC8C4, 0x232D4CEF,
+0x1C5478CC, 0x0E54C714, 0x115E08A7, 0x57AB605D, 0x328B5829, 0x7EB89B5C, 0x4BED56A7, 0x798B7A8D,
+0x683FA582, 0x0BCAC1A0, 0xA1028FF1, 0x3B07A20A, 0xEB620661, 0x7AE0B9F3, 0x172558D8, 0x5B4D80B4,
+0xF8CF857B, 0x35A9409A, 0xCFBFC0A4, 0x16464977, 0x3FB45290, 0x1E7BFB82, 0x306C6E90, 0xEAAC5F5C,
+0x6446462F, 0x7AF7DD12, 0x7DC0CF6F, 0x52F05F88, 0x87AD082F, 0xE4DFAC28, 0x561AF728, 0x9234B42F,
+0x6A97A411, 0xD6A1C8A3, 0xFF549677, 0x4DC23BFF, 0x9E6C28F4, 0xD327198D, 0x63FEA27B, 0x59D08BB9,
+0x44D51EB3, 0x0D5EBA45, 0x6703931D, 0xEFD187A1, 0xBB426A37, 0x7AD12EC2, 0xEE40E499, 0x05FA3B09,
+0x36E740B3, 0x8F421380, 0x33ED2AA5, 0xE4EC11E5, 0xC9C0302F, 0xB64AC700, 0x46ACAFD5, 0x6B1CFB93,
+0x34EC261E, 0x6F43556E, 0xF45BBFEC, 0xE7282A4D, 0xDAB3D875, 0xEFC1972A, 0xF4E13ED9, 0xF8F9E5CF,
+0x21E0DD01, 0x4F256618, 0x20742F20, 0x8608848E, 0x522F6B9B, 0x9D9C5B73, 0xBF60C8A5, 0x7FAACA10,
+0x9AD637FD, 0x01F01C7C, 0xFD39686A, 0xE68A0DE8, 0xB854E4BA, 0xAB1C4D77, 0xF76649F5, 0x990927DA,
+0x50458B5A, 0x36138416, 0x8915BDC8, 0xF9173750, 0x8E5376D5, 0x249A2C9F, 0xDBE794EA, 0x3097FFD6,
+0x1A44839F, 0xDD142155, 0xD2358045, 0x9F214E58, 0xEE320C84, 0x41B328BC, 0x1B54C7B0, 0x88DA5B24,
+0xDADBC815, 0x834EA841, 0xF7AABD61, 0x2E23D767, 0xF4EBB2F1, 0x1D12367A, 0x8C8BDC8A, 0x0B1F2878,
+0x0C05428C, 0xFC87480E, 0x2CF3CF8F, 0x07B1BF27, 0x5B872128, 0x71087DEA, 0xA6331252, 0x38626835,
+0x123534F0, 0xF67F3407, 0x2D24CE15, 0xA1980770, 0x261D2BB5, 0x45C07622, 0xA2317BB9, 0x0ADFC814,
+0x1A96070A, 0x45151067, 0x5F8B1B40, 0xE66593B6, 0x09BB0C8E, 0xA45D5302, 0xAA087461, 0x0F2E6D33,
+0x17BB471E, 0xA11191AB, 0xA677941F, 0xA21589D3, 0x40F2B016, 0x83066959, 0xDFAED68A, 0xAAC86CD8,
+0xCB7FD230, 0x2803C5D0, 0x952589E2, 0x12CA8F27, 0x653F5B9D, 0xF4544BD9, 0xA79B8D52, 0x139D829C,
+0xFE99C152, 0xD28C77B2, 0x11698998, 0x04630AA7, 0x23CBEE43, 0x45066F11, 0xD0D72061, 0x39D7CAD3,
+0x8E0BD253, 0x650C2323, 0x81B2ACFF, 0xD5D90301, 0x5AA7876A, 0x54DF2D3E, 0x3D513568, 0x28332A56,
+0x6EB1D3D9, 0x1B2CFE9D, 0x13260E63, 0x51AB9D63, 0xFF560EAC, 0xF2A4E537, 0xA6AA8949, 0xDE92EA05,
+0x29DCF46F, 0x9DCE165A, 0x9A9520F2, 0xF1BCE597, 0xA62D8427, 0xA9D7EB29, 0x09B92C88, 0x33C4E296,
+0xA19C4290, 0x838AE131, 0x091870A5, 0x915F24F8, 0x4F70C8A5, 0xE32251DA, 0xC3A34438, 0x2C230184,
+0xE7B98522, 0x76C14D70, 0x8721CC13, 0x95244179, 0xBE041C80, 0xD38560C0, 0x563B9A80, 0xCD7E86BF,
+0x2F1C5B89, 0x8A0F117A, 0x3CF17DAA, 0xC1D2216C, 0x9F84AD26, 0xE28025C1, 0x345A9C37, 0x1FC38E80,
+0x2788BB81, 0xF56C429E, 0x82B80AB1, 0xE239C786, 0x37A510EF, 0xCBA4182E, 0xD7434661, 0x8CF27140,
+0x096CCB4C, 0xEFB587B0, 0x8277AF6F, 0xC6A7A52C, 0xE1E85E9C, 0x6C246819, 0xDC26933C, 0x6B2308B0,
+0xA0F7760C, 0x26FC0966, 0x87FB6EAB, 0x09CF1F80, 0xE22E2D50, 0x0676FADD, 0xC5CD1EC7, 0x05C6E35E,
+0x834E8E84, 0x7A04956E, 0xA4C3AA97, 0xB3FE5B8A, 0x415C5BD5, 0xE713EF5A, 0x934DD0DE, 0xEA5752D0,
+0xE3BE6902, 0x169A9976, 0x5E3EF248, 0x2287A8A8, 0x9E41DC14, 0xCFEA75CB, 0x2DAF9F7D, 0xCDBC9168,
+0x791E41D6, 0x25BDCCCA, 0x7F6316B0, 0x9DE7DC58, 0x47942420, 0xEB0E2376, 0xEABE4D30, 0x4BFA7E20,
+0x21CEEC1C, 0x1205FE79, 0x64DA59BB, 0xD9A6EC47, 0x64504FCF, 0x8755BEAE, 0xF1DBDE24, 0x7B41B206,
+0x8FBDA63B, 0x67691DCD, 0x6A277E4A, 0xE8677D56, 0x6932C843, 0x0E20DB4D, 0x5BA60961, 0x255B505E,
+0x11A55427, 0x04165C02, 0x9BF1AAAE, 0x7B9E36CD, 0xC49A0FAB, 0x0FDB2570, 0xA656417E, 0xC249E962,
+0x5A4D0390, 0x578F04BB, 0x543FD2E8, 0x53960FE3, 0x2EE39330, 0xC540BFCD, 0x7E4E30C5, 0x68A0C379,
+0x728F21BA, 0x1EA1A1FC, 0xDF94F22D, 0x98A8DFC4, 0x06558CC8, 0x4064A0D7, 0x1D8D38E7, 0xC30533CF,
+0x1BCF2279, 0x5EBFDFCD, 0x60B33E66, 0xE82AB503, 0x30AA8AC6, 0x8A1D1AE0, 0xCBFAA2D2, 0xDEF1DF2A,
+0xC74CDA90, 0x1562D19B, 0xC46FE8AA, 0xC40BE772, 0x8027FACC, 0xB10FFA6C, 0x1A81257C, 0x55A3EBDF,
+0x53662703, 0xE469B91A, 0x76E49912, 0x97B33AF0, 0xA9A32EF6, 0xD7B46BB4, 0xFA2D09FD, 0xB1DFB6C0,
+0x50D7740B, 0x05C48E98, 0x74C11B5E, 0x36EABAAC, 0xF3DEDA8C, 0xA890ED1E, 0x6772A065, 0x94C453E3,
+0xDB89E135, 0x198EC126, 0x0E4127FC, 0x078C3DA5, 0x3263C191, 0x84177D6D, 0x68958C33, 0x6662CFBC,
+0xBDE14B00, 0x0066834C, 0x9AE7F40F, 0xC1BD7E0C, 0xAD806889, 0xA77182FE, 0x229EEE6A, 0x2FCC07D0,
+0x354AA6FA, 0x8C2EC053, 0x3D7A9ECD, 0xDD254171, 0xF275F2EF, 0x4F684E52, 0x17747068, 0x12E16A23,
+0xDB090949, 0x1AEA59AB, 0x60B49681, 0x9214C1E3, 0xD045DA83, 0x6CC04F64, 0xA4666292, 0xE700E0A1,
+0xBCC958CC, 0xCE137FCF, 0xE3CAC1D3, 0xFE82956E, 0xB6FA9566, 0x06385B3E, 0xF10616D0, 0x3533FCE5,
+0xDF785F3A, 0xDC96FCAB, 0xD742EF9A, 0xADE108DD, 0x21507671, 0x7BEB52DE, 0x1FDCF4E2, 0x12E22EB7,
+0x54569648, 0x86B17DCA, 0x5697E57A, 0x4B2CE752, 0x2171F3FF, 0x0E72A96C, 0x77806D82, 0x7F33CF65,
+0x5CAD1587, 0xE92253CA, 0x9E8EE82E, 0x895AAB36, 0x9D4E8E03, 0x372575CB, 0xA705B22C, 0x266C3C58,
+0x0143EE16, 0x1BC8BE94, 0xA260051D, 0x9F6C2C38, 0x550A767B, 0x7A092D10, 0x7E0D1391, 0x3808950E,
+0xA0E37840, 0xDAB61E00, 0xCFE65EF6, 0xD73500C7, 0xE3534A40, 0x18F53A54, 0x4727BE29, 0x54A22D00,
+0x0741F85C, 0x0208E64B, 0x11FB8A3A, 0xC0C92E0C, 0x48DCBCBC, 0x51C68946, 0xA1197EBC, 0x24ED6535,
+0x30F1874F, 0xD0B6318E, 0x3348E242, 0x0A0B7748, 0xB020209E, 0xE2B57785, 0x1BACCEEF, 0xC1C487A8,
+0x6FF6E56A, 0xD2D137FA, 0x07309461, 0x1F354641, 0x0AF5D44D, 0x52321F6D, 0x662DFED4, 0x33875F5F,
+0x96C93894, 0x653850EE, 0xE59E9D1B, 0xA5126206, 0x7EB741B9, 0x5A5A1AAD, 0xA2EDDF61, 0x6B9AECEB,
+0x544E7D03, 0xC1D7EB89, 0xE4CD9986, 0xBDB9027D, 0xFA31D4AE, 0xF480606B, 0x49FCFF03, 0x3E2D5AD8,
+0xEA7975A2, 0x73EF3BD8, 0x1F5D672F, 0x83FFC29C, 0x0F2655B5, 0xDAE5FC35, 0xC3605B0B, 0xE99DFF03,
+0xE9C1B4CB, 0x04DF818E, 0xA5389EE4, 0x81F9294E, 0xEE976D1B, 0xE13C4343, 0x40A22449, 0x6B5374D0,
+0xB0F7B336, 0x42344A86, 0xEC54A941, 0xBF4FEA34, 0x2A062FC3, 0xEBDEAD74, 0xB1A9BE6B, 0x40947F58,
+0x56FCD143, 0x82FBF2D7, 0x59DFDD6B, 0x24308361, 0x85E90169, 0xF51D6F63, 0x4E817BA6, 0x44619ADF,
+0xDFF14483, 0x8A6AA020, 0xA871895B, 0x4F581A5F, 0x82454D61, 0x36241D50, 0x92DC4A45, 0x151E8670,
+0xBDCBE2B3, 0x2AD2E9E3, 0x6FB2168D, 0x403AE5EC, 0x010D8FA7, 0xD2B3A781, 0x49C80226, 0x160F6A4C,
+0x307E340F, 0x24B22497, 0x529361B9, 0xDB9FB808, 0xB2966AE2, 0x4B343C2D, 0x4B6AA3B6, 0x3F8C6AB0,
+0x85E6B76F, 0x0BA5C3C9, 0x57CE508F, 0x1DB376FD, 0x98AC9279, 0xA5B1340C, 0x2B6C697F, 0x025A6A55,
+0x76E4BA50, 0xC4E06CB6, 0xFE048DA7, 0x34D771FA, 0x3A73273C, 0xCA79520B, 0xF877D45E, 0x70BD692A,
+0x0C85A2C1, 0x1AD42988, 0xE6848DBA, 0x2D3AC5F7, 0x9ED19D54, 0x42AF11B0, 0x7C12898E, 0x02634287,
+0x68BC5DE9, 0x9C2E7A84, 0x2E047DE4, 0x821BA5CB, 0xFA4E37DF, 0xF3353235, 0x05901F41, 0xBC7E88FC,
+0xE6E19961, 0x5B851236, 0xC1FC6EC9, 0x0FCCEB32, 0x4894C192, 0xFE927B17, 0xA58FA871, 0xD0C7DA88,
+0x252ADD4D, 0x6282DC21, 0x3ABB4AAB, 0xA10278C9, 0x0C2D0D63, 0x0FD3C990, 0x6F6082B8, 0x97E73C7D,
+0xD1FCBE54, 0x85341D1C, 0x7D07BD47, 0x32F17DBA, 0x41547BD5, 0xF9447E13, 0x7EE6F795, 0x4B6AB1BD,
+0xBCF2CFFC, 0x910F1272, 0x893E8292, 0x0C9D01F8, 0x71C79C09, 0xFAFE8F02, 0xA9FA92C0, 0x3B4B47D0,
+0x9340C141, 0x6F484B8E, 0x8A7EB855, 0x74143954, 0xE6B333AC, 0x8A21A19F, 0x1E11ADFA, 0xD5D1A548,
+0xC376AEC3, 0x9750D7C2, 0x98232CC8, 0x0AF4FC06, 0x471794CA, 0x866576C7, 0xB3602C83, 0x7E0F07E2,
+0x1562BE28, 0x85407812, 0xC2372FC9, 0xC186E012, 0x8EF0A8CC, 0xEF9D0A5E, 0xED6F1FA4, 0x692373F0,
+0x7386AAB0, 0xCA786050, 0x01C45E1F, 0xB5D3DA28, 0xCC30133C, 0xC930168C, 0xA98A581F, 0x2F2A1EC2,
+0x1E513B06, 0x4896847F, 0xC7291216, 0x08AEE8D1, 0x721EF974, 0x60C7E96D, 0x0261263D, 0x2F26A2C4,
+0x4059C6BC, 0x350ECCA8, 0xBF6AA509, 0xBA221F9F, 0xB297D1E3, 0x6AC93ED2, 0x4E71F345, 0xE49D1CD1,
+0x3535A652, 0x3270A03F, 0xEC7C716C, 0x3F6C2AB7, 0x40B532CE, 0x3501A943, 0xBF797227, 0x2B761925,
+0xCE50734E, 0xF5442196, 0xF00374FD, 0x80242FB1, 0xB01ACD49, 0xD00965EF, 0x063A66D6, 0xC8931DB8,
+0x6C19FE11, 0x27FB7F53, 0xD8E916C7, 0x08C5F2E4, 0xAF5B1A0E, 0x7F8C1E41, 0x12927468, 0x4CDAC5D2,
+0x795A535A, 0xD630A4B7, 0x0F287915, 0xB5EFF720, 0xE22965EE, 0x4D06BFC9, 0xF0996D41, 0x07BFC95A,
+0x5DB43408, 0x378BAE72, 0x1868FF33, 0x8AC54D1F, 0x26B6F4D0, 0x8BBB07DF, 0x0FE1F9FC, 0xAE64EF72,
+0xB71072AD, 0xE03353FB, 0x409C5B8C, 0x051C1527, 0x06CE079A, 0x933813F4, 0x6AEB2E9D, 0x880429C8,
+0xCE5CE525, 0x0252604C, 0x13C01724, 0xF50646FA, 0x51900C30, 0x452969A0, 0x5E2D1250, 0x2C4F9ACC,
+0x7A270219, 0x95EA7C3E, 0xD44885CF, 0x1E8F9B40, 0x95229D3C, 0x4E1E83B4, 0xA280EA3F, 0x5A1B2ED1,
+0xCF495951, 0xF7292426, 0xE00507D1, 0xD6116027, 0x3791AFC7, 0xFDC5F3EF, 0xF3FBF0AF, 0x32523DC4,
+0x9F78BA9D, 0xE9F8D8CB, 0xBC791D31, 0x853B743B, 0x5C349214, 0x13221AC4, 0x8226C4F1, 0x62278364,
+0x17C6CB72, 0x3DF74902, 0x43A5C863, 0xA9D023B8, 0xF0A42316, 0x1AF2F4B7, 0x963BC671, 0x14BB5D4B,
+0x52F8EFEB, 0x99F3309D, 0x4DED1BD5, 0x216CE11C, 0x099CC70A, 0xF27709EA, 0x79F98F9F, 0x241D7955,
+0x8CC2C6EF, 0x94DB62EB, 0xF6E34D4F, 0x7BA6FB78, 0x5B162FC0, 0x2FB8A1E1, 0x4DA05BFA, 0x3E19E712,
+0xA5758CD9, 0x1019DDAC, 0x4594CD88, 0x249D4DB6, 0x4C4D591F, 0x081C384E, 0x4BE552A9, 0xD9CE1D91,
+0x234D5C96, 0x286B574C, 0xAB66E4B2, 0x1967298E, 0x5C3F1CDA, 0xCC49467E, 0xF54534A6, 0x8007D69C,
+0xF4722313, 0x3FA5A340, 0x75420AD1, 0x042BF44E, 0xADF5EBFC, 0xF06ACECA, 0x61768C77, 0x5DA24AF1,
+0x1372FB65, 0xE4B1EE2E, 0xD76A9FAF, 0xB223A0BC, 0x2AA1D1CE, 0xF532E255, 0x7D681D8F, 0x67B9CC8E,
+0x94073188, 0xD154B53A, 0x38078497, 0x740A55C4, 0x4D842E00, 0x06DA1C41, 0x4903761E, 0x15F1CEC2,
+0x83BDDF3F, 0xA0085898, 0x08BEDEF9, 0x6BBBB1C1, 0x0E32C9F3, 0x31FF3AA9, 0x3ABF5618, 0xB155B0B5,
+0x8AED22C5, 0x1D10104C, 0x16C120B5, 0x32C8828D, 0x797891AE, 0x7B2BEEC9, 0xD0F709E8, 0x980B20C5,
+0xD5FF887B, 0xB828BC3A, 0x04A6E80E, 0x2FB189E7, 0x2E144090, 0x936731C6, 0x3636EB2A, 0x2D93F7EE,
+0x3C263E52, 0x67154402, 0xD269C396, 0x784B0E01, 0x8A509173, 0x3DD2B720, 0xA076F243, 0x08082B92,
+0x061A75A5, 0xC1838877, 0x2211F04F, 0x80FB6124, 0xD9E114D9, 0xA1665B99, 0x303660AB, 0x7E716E89,
+0x0C3E5D52, 0x044CE562, 0xA6D211B2, 0x334FEE14, 0x223B383C, 0x185ACC0C, 0x0D11F6A3, 0x0E402B1E,
+0x59421308, 0x6379D60E, 0xE1C3C0AA, 0x1AAD85F7, 0x350DAFD9, 0xB3208832, 0xD96746B1, 0x7DC87D51,
+0x52542915, 0xFCA8EFA5, 0x9A929A94, 0xDCDAA4AC, 0x339C11B4, 0xADBA1598, 0x21C024B7, 0x720CB428,
+0x3D11A166, 0x132057B6, 0x897528B4, 0x259602D4, 0xFDA9CAC3, 0xBFE03BEF, 0x9E2AA763, 0xDFFC6401,
+0x1A4CAAFC, 0x34B17B95, 0x544C02DF, 0x78E171FA, 0x19658E6A, 0xFB66A203, 0x08B9E9C3, 0x65438E0B,
+0xD68432F9, 0xB072D333, 0x1D46A57F, 0x41AF2265, 0x0FA2F8AA, 0x416AC76E, 0x024F18CE, 0xD931FB2D,
+0x2D01831C, 0x58FE37FE, 0x07B2CEFA, 0xE19172D7, 0x08EEEEA2, 0x29A41B0B, 0xF2D26491, 0xE17FA8CF,
+0x6472B34D, 0xAA80D3BB, 0x3234C8D1, 0x196A7EE3, 0x35E595CF, 0x84FC3DA7, 0xE0F5AAD0, 0x922CAB6F,
+0xCB915521, 0x3DF4271D, 0x86D2A79F, 0x041467C1, 0x4673AF7D, 0xE413CF4D, 0x3B8F7D00, 0x23D41DD3,
+0xAA0CF1BB, 0x6129546B, 0x452E0B78, 0x7D24FD89, 0x8EAA9444, 0xA36D3051, 0x86F05885, 0x01871AE0,
+0xC78A1075, 0x4D285AE5, 0x64FEBF48, 0xD2CE5AE2, 0x61649921, 0x3158036E, 0x131E17AB, 0xD0A96DDD,
+0x0E70B710, 0x4E77BFE1, 0xA60BDF54, 0x45DE5BFF, 0x19B09B52, 0x726B33E4, 0xE38D0F9F, 0x0DC7441F,
+0x99FE3E07, 0xD4CCE509, 0x6309F07E, 0xF78CD2BD, 0xB652D836, 0x98BC294E, 0x55C067BC, 0x784052C5,
+0xF358D397, 0xA187A906, 0xA0BF427C, 0x382C3E88, 0xF3FA9DF0, 0xA90CC37C, 0xFA4C8769, 0xA32E1230,
+0x0F2DCB33, 0x7DDB7066, 0xC95B03FE, 0x17C88DA1, 0x5943A044, 0xD51DC261, 0x4BA4AC54, 0x4E7CE5B8,
+0x0A8309BC, 0xF8384A7D, 0x92DD7437, 0x9A02C88A, 0x0D4CF9A1, 0xD47F1331, 0x2A3CFA6C, 0x296E2B8B,
+0xC616F8CD, 0x98CEB522, 0xD413BA7C, 0xA916BBF7, 0xC0C418E2, 0xF318F032, 0x9D9918A8, 0x2CD82741,
+0x9D31B7C4, 0xA99E6BA2, 0x9DB16F65, 0xB723C376, 0xBDE602E6, 0x33FFCD5A, 0xF3ED1233, 0x3EE1B89A,
+0x645715C9, 0x494A7A77, 0xA2E238AD, 0xC3A77998, 0x2ED0171B, 0xCA6F156C, 0x39D47BCE, 0x0956AA00,
+0x5AA84479, 0x5A8C672D, 0xF4375C23, 0x8AABF3E2, 0xABF8343A, 0xF0826BD2, 0x97C6F9FB, 0x3931C08C,
+0x0301D14F, 0x62EB9F15, 0xD430B982, 0xBF1933AF, 0xCA365041, 0x1F5882ED, 0x7CBE7DB7, 0x4E21C007,
+0xEB44844B, 0x8FAB3940, 0xA9E33A22, 0xC8082C4B, 0x21E08B62, 0x26DD1BFA, 0xBCF4E568, 0x76C248B0,
+0x5A9A1AA0, 0xF7E6D126, 0x017E7D47, 0xC323F4D3, 0xE3C8AEBF, 0x875757A1, 0x3C57C87D, 0x1949B669,
+0x39C20BEF, 0x04C69B6D, 0x2E40F59E, 0xA4747E9C, 0x2C2B08FF, 0x31796DCE, 0x0C295E86, 0xEFD25E63,
+0x982206C5, 0xF5885FF8, 0x8421698C, 0x57C01F0A, 0x6356FAB8, 0xF092A118, 0xBEC9B8E7, 0x55FB969A,
+0xF1DCDCE0, 0xD9C25BDA, 0x7655E321, 0xEBC4732D, 0x7C4A5351, 0x19D1A89F, 0x720B5699, 0xAF0D15EA,
+0xCBB64A10, 0xB278C314, 0x09F65AC4, 0x59C8B9BA, 0x8582ABC2, 0xD6E7D16C, 0x562606E4, 0x8E9B001B,
+0x4D27A537, 0x19AAF3E8, 0x6D57C2CA, 0x3A7C1C6A, 0xAC82B5D9, 0xF67FB9CD, 0x6046CD4E, 0xC628A8A0,
+0x2EFBD0B4, 0x13E52867, 0xDD0E62FC, 0x282DC882, 0x9C6AE73E, 0x2523DE8C, 0x51F365C7, 0x9F1C292C,
+0x69D75407, 0xE743DCB4, 0x1BCF50EE, 0xACB7EFF5, 0x43EC82C9, 0xA1CA58DA, 0xCFC67002, 0x0EE8B543,
+0x27AE2F8D, 0x972326EF, 0x9677C0D7, 0xB323F8B6, 0xD82547C5, 0x0BBEA401, 0xFE83456C, 0xF481C334,
+0x40EBC9E1, 0x2A2D1CB3, 0x92F5FE68, 0x724DFD02, 0x82F579AB, 0xFED79CA7, 0x02084596, 0xB8A35FEF,
+0xC21D76AE, 0xA20076D7, 0x06797A8E, 0x5E361BA5, 0x94657A11, 0x9ED09425, 0xD3CF04BB, 0x0295FF4D,
+0x0E06F2F9, 0x39D0A16C, 0x8D455772, 0xC1990207, 0xB6084176, 0x7C310D4C, 0x5DC39CA4, 0x8344CEF0,
+0xCEAF6905, 0x7F8C5538, 0x30A57D9C, 0x5033C145, 0xDD7612B4, 0xE5519292, 0x244D4AAD, 0x1351F45E,
+0x32ABEEE7, 0x60476A9D, 0xB5615C60, 0x9DA8DC4A, 0xF0891303, 0x904B0922, 0xD23D5ABC, 0xFB89E734,
+0x4CE4650C, 0x8A07AF00, 0x3B6D31C0, 0xD25873CF, 0x9E2AC78B, 0x82972B69, 0x2FC2EE1B, 0xF6A51198,
+0xFBAC59B3, 0x34B0EE9E, 0x5AC747BD, 0xEDC97991, 0x20E4AB7E, 0x106E5707, 0x9C6F2D96, 0x362526ED,
+0xA913182C, 0xA872C537, 0x9EDEA867, 0x57A2059D, 0x85A1E293, 0x5EBF2F61, 0x8CCA1164, 0xAF6E4F36,
+0x344DAB26, 0xF3F78F07, 0xC107D186, 0x99AD3D38, 0x3D81D117, 0x53A89E1D, 0xA9F5076A, 0xD8F81F38,
+0x583FA48C, 0xF79D82EC, 0xF230B2BE, 0x55472A2B, 0x644EC53F, 0x4AF050BD, 0x3CAC65F9, 0xB2F85003,
+0x0E95AE0B, 0xDCF38CD1, 0x4F3D1B3E, 0x88602D7A, 0xAC6FFF4E, 0x01BA7D49, 0xF53DE7E6, 0xA726A545,
+0x3E6F9445, 0xA03F038E, 0x3D4D614D, 0x8A659B8A, 0xCC186406, 0x48C399E6, 0x40B75E78, 0xC283F4AD,
+0xDFF5A352, 0x3036F56F, 0x5459937F, 0xB9F55342, 0x1AAC1A6E, 0x424DED41, 0x57D301B9, 0x889ED31C,
+0x5C019532, 0x11B388E1, 0x7ACFE14D, 0x7643262B, 0xCB8A5446, 0x60850DC3, 0x6DAD54CE, 0xA9484BDE,
+0x7761E73A, 0xE4075243, 0xDBE1725E, 0x4B833AB3, 0x240789D9, 0x1508ED5B, 0x3FF1BCF3, 0x69025EF8,
+0xB94B23FA, 0x4319E965, 0x662E0B9A, 0x1350343D, 0xB28B3701, 0x1727B67E, 0x24FC6B5E, 0x608087E6,
+0x6B685916, 0x5C962C1C, 0x59E21F12, 0xD5FCAB01, 0x49C07ECF, 0x1AE17298, 0x14C41657, 0x819C943B,
+0x991D4CCF, 0xCE7F5B10, 0x37CBBFC4, 0xD32BE96F, 0x9B1C717B, 0xE9C44DC8, 0xCD27F3A8, 0x4A8A6E1E,
+0x85067A1E, 0xF8DE6635, 0x7B4233A9, 0x563B98A5, 0x9265FAAF, 0x65149172, 0xF62ECB76, 0x3CE5B647,
+0x3C3A512F, 0xE2B28ECA, 0xED87B194, 0x9F28E574, 0x85F5371D, 0xC4707A2B, 0x7A8B8E18, 0xBF061035,
+0x97FEE71F, 0xC5A750BD, 0x1C8F0CB6, 0xBB165B2D, 0xBA7C2ABC, 0x4FCD2003, 0xA5C4CFD8, 0x6569ECF1,
+0x9B3F0125, 0x422D4F5A, 0x22BEDAEA, 0x78B43662, 0x3B6C6175, 0xDD3FA110, 0x7ED29BF2, 0xB12281A1,
+0x76D82A0B, 0x48AC904F, 0x875C4618, 0xD205BD25, 0xACB715C1, 0x4E9D54CD, 0x0BB94AC1, 0xABE9F343,
+0x6DB10C81, 0x8676B8E4, 0x72B0E4EC, 0x1F56FBEE, 0x10507DA9, 0xB05DA277, 0x84552A62, 0x82122F1D,
+0x0869373C, 0x202B3957, 0x7EF928D5, 0xF22BC0A4, 0x0263DC5A, 0xDCE064AF, 0x0312DCC0, 0x2AB34635,
+0xACB7FD4D, 0x1F4F2102, 0x1B383CAB, 0xFA424AFC, 0x3D28C167, 0xCA3AEB67, 0xBAA372F5, 0x66F8978B,
+0x6F179C4C, 0xC5320FC5, 0x9A18BFD4, 0x1BF85F32, 0xF0FE9893, 0xA312C0E0, 0x962622A9, 0x8B34DA13,
+0x051F8BAA, 0xFF0136C1, 0x9B7B2938, 0x5D87387A, 0x1339C782, 0x48BF0CFD, 0x8DA87B9F, 0x8DDA69AB,
+0x9627DCF1, 0x63392130, 0xC03109BC, 0x41E6EDC6, 0x1DB99323, 0x4F01B880, 0x4D52BF90, 0x87A29CDB,
+0xE134EC5B, 0xD5ACE1D9, 0xDC963392, 0xCAAF225B, 0xE267ACCA, 0x15A09C5C, 0x1FB1FCCC, 0x81E56189,
+0x58E8A174, 0x8C7B4F47, 0x4D1262C1, 0x57AB8B98, 0xAF06413B, 0x4BBA092F, 0xA3FCD89B, 0xBBE77EF3,
+0x7493A2C1, 0x96C78275, 0x58A1DF38, 0xD76B4FDB, 0xF216F8A9, 0x93356FFA, 0xBD253203, 0x11D67E95,
+0xA4F0633A, 0x1D338CC0, 0x321587CE, 0x449BA5A0, 0x9BDABB64, 0x251B15A6, 0x2D8AAA5D, 0x8BC47764,
+0xDB2AF1A2, 0x78743DB8, 0x3C64F727, 0xB62E54C6, 0x8C9AFB2C, 0x2EC2D801, 0x95893E74, 0xAC0E2321,
+0xE3C8BF35, 0xC52D286B, 0x71BEB910, 0x5970AD84, 0x7C188B9D, 0xD183AA1E, 0x1AB6E131, 0x4F7AD6DF,
+0x7B23C4D7, 0xFC00AF44, 0x7A9CBEE3, 0xC470388D, 0xEB4C37BE, 0xF9210378, 0x04EED2F5, 0xE64A722F,
+0x9D99949D, 0xAADF0A56, 0x5CAE73DF, 0xA1E97E8C, 0xD3FC625D, 0xB91E1E9D, 0x692113BA, 0x8673045F,
+0x567F7372, 0x7F69FEA5, 0xA72E7D0A, 0x32050652, 0x61A8B39C, 0x86F52480, 0x4E7DFC53, 0x537E0E18,
+0x358F9445, 0xFC07D91D, 0xCAE3D612, 0xFF279495, 0x61B605AC, 0x75AE4016, 0x3B8CF8EA, 0x13760F01,
+0x04AC88BF, 0x6726AE23, 0x84FE18E6, 0xB247FB57, 0x712FDC2A, 0xE3AEFFB1, 0x1963D3F5, 0x90606CED,
+0x7559D840, 0x099CA4EC, 0xFA6D917E, 0x2A4042A5, 0x7BF61A7C, 0xF6FDDEFC, 0xCF4690D1, 0x92A5260F,
+0xE61BCADA, 0x3201E714, 0xDF769EE4, 0xCD552DC4, 0x4163BD1C, 0x963FFDA4, 0xDF5693AA, 0xA3EFB71D,
+0x3F46F542, 0x7799BC62, 0xB93632EE, 0x38F8C052, 0x4613F34B, 0x10A58B72, 0xDBB6A627, 0x9BE065A7,
+0x34F95B18, 0x366A44CD, 0x4A106B63, 0x437844B0, 0xB9D67E0D, 0xD47DFEBF, 0x7AE24A91, 0xF16AEFFE,
+0xBABF248E, 0x91F18DD7, 0x9A9D5060, 0xFBE984A2, 0xADD39A20, 0xD885B19A, 0xB67B965F, 0x3806F0DF,
+0x6AD86570, 0x9B7E27EB, 0xA3DB8956, 0x7C61C9EC, 0xCAA7AB96, 0x6813B44E, 0xA1FFAE06, 0x849F04BA,
+0x8C8E4DC7, 0x8BD65EA5, 0x9CA00844, 0xE77D378D, 0x5B35D35E, 0x7093C12F, 0x3218D6B6, 0x0F8543A2,
+0x1B613EC8, 0xD0F7E52C, 0x424520A3, 0x6F794AB3, 0x88DFFED5, 0xF6727E6A, 0x4C06FFFC, 0x5CB5FC0E,
+0x321F7AB1, 0xF85063CB, 0xAA063703, 0xA940F58B, 0x358304E5, 0xBE6B1468, 0xA575E695, 0xB0094E24,
+0xF8EB5640, 0x89BD63AE, 0xDC136843, 0x307DA417, 0xBCE3BF24, 0xB8CA7B60, 0x4FB9D25F, 0x30916DE9,
+0xB1E1A752, 0x9DB9062E, 0x41903696, 0xE418F349, 0x9E54140E, 0xC96C6B43, 0xA0B8B0F8, 0x03F2E88E,
+0x15F34ECB, 0x958C2190, 0xCFBE33F2, 0x1236C151, 0x324B6490, 0xD9623A62, 0x63CA6F42, 0xB898718B,
+0x14EF44D8, 0x339B0566, 0x06A49C05, 0x75254FA7, 0xDE9BD2A2, 0x7A9F54CA, 0x1688AD91, 0x8F319D4B,
+0x2A618567, 0x92163541, 0x9E310E7C, 0xA0A37AC6, 0xBA5FD20E, 0xD06F8850, 0xB8F64E27, 0xCEB4D9C0,
+0x03734FFD, 0x55619AE3, 0xDBC6A07F, 0x91E32D01, 0x093A279F, 0x23C4212A, 0x5D40B241, 0x35293808,
+0x4DC8D4AC, 0x6CE34B09, 0x6C99B547, 0xDFF2D32A, 0xFB9DF96D, 0x88C840E6, 0xD9A62866, 0xD9C2DAF8,
+0xE800D81B, 0xFF007DF8, 0xE40BC4DA, 0x643F4250, 0x8F338767, 0x502C7C52, 0xF33AC1B8, 0xF093CA30,
+0xAC32FD67, 0x843B0512, 0x26DE595B, 0x3CACCC1A, 0x55E807A6, 0x07536B85, 0x9E0231DD, 0xF0B59BE6,
+0xDB460B9C, 0x8810F008, 0x4AF17672, 0x275543BD, 0x3BB6A617, 0xC8780840, 0x0D89C1B7, 0x308A8F89,
+0x293DDA23, 0x445B26C2, 0xD101950C, 0x8AAA320D, 0x24F07CE2, 0x98F40184, 0x911ADD6C, 0x4B770A27,
+0x0EF002B3, 0x83E9E876, 0xF5DE2317, 0x43834ECE, 0x64070B09, 0xB706EE15, 0x4260F0AF, 0xB693A9F1,
+0x877176AF, 0x9CCCB1FE, 0x17A2CB0D, 0xFE98787D, 0xF3206400, 0x36BF117F, 0xDEA8FF1E, 0x9FE3A63B,
+0x215CB28C, 0x1EBB5D9E, 0x181CB55E, 0x85D8605A, 0x79853FBB, 0x8B5673AF, 0xB390656F, 0xE89C1F25,
+0x6784A90E, 0xEEF66279, 0x7319CCCB, 0x318275B4, 0xC373ACA2, 0x092B4CA0, 0x4F12E98C, 0xA69A4DD6,
+0x3408A8A1, 0x3636EB9C, 0x4C25797D, 0x1B8E2A42, 0x9E44291A, 0x1BDE1B0B, 0x69E73CBA, 0x37DE4745,
+0x554E9265, 0xDAA4D4A9, 0x63F28BAD, 0xE7D26E87, 0x9648BB27, 0x7C9D9B94, 0x9675DF17, 0xCC13B39A,
+0x2B9CA645, 0xBED41259, 0xF9B1628C, 0x03689EFB, 0x405723AC, 0xFA6DDBC8, 0xC2F25682, 0xD247F018,
+0xF93C3AA4, 0x8E0BAEC1, 0xD00953BA, 0xEBA68669, 0x256FBB19, 0x7B64C9C7, 0x7D22963D, 0x57BE200F,
+0x1A97B49A, 0x4199FE1A, 0xB69489AA, 0x17552B6B, 0xCB194236, 0xD01749E3, 0xF5A836EE, 0xBA916184,
+0x86A62FD3, 0xB0643371, 0x490BF12B, 0x3C3A333D, 0x6C1B4E92, 0x1E40AD9F, 0xC82E6CF6, 0x637D278C,
+0xC7356C5F, 0xA0B38759, 0xBCF51255, 0x112B4CB6, 0xCA61F7DC, 0x5080EAFD, 0x3A8162D7, 0x61E25932,
+0x4CF37DB9, 0xC0BC549D, 0x1018F71B, 0x987F5058, 0x3E1F8242, 0xA461A663, 0x8470563D, 0x7A630AA2,
+0x0EF7036B, 0x974C1A3E, 0x443969B3, 0xBC486E92, 0x98361A99, 0x1D0B45F3, 0xFAFDADAD, 0x2B4914D8,
+0xDB1532C4, 0x6DD912E7, 0x383A1C67, 0x088DDBCF, 0xB3ADBB15, 0x17DE28A3, 0x788FD1A3, 0xB4A98660,
+0x865E7F64, 0x4026859B, 0x9941428E, 0xD4C28726, 0x409F7F7C, 0x9A47A5D0, 0xF685C2C3, 0x4B44B2D0,
+0xCE4ABD3C, 0x1495017D, 0xDF058C95, 0x96AAA904, 0x901A7106, 0xF4018489, 0xF70F9575, 0x6C084A94,
+0xFB04F8FE, 0x3DCE9852, 0xA8BFF738, 0x021F4DB6, 0xC50EBF3D, 0x5EB1E21B, 0x01C0F0A3, 0x61CBF61C,
+0x272660FF, 0xF020B635, 0x691D2DF0, 0x825CADC6, 0x1A5D7638, 0xCCBA613B, 0x4D13A370, 0x920A044E,
+0x00FA769B, 0xE7F3F662, 0x6368C6FC, 0xC0A0B90B, 0x3E09BE5B, 0xA112B705, 0x7750B7B5, 0xB98DA78A,
+0xB70C12BD, 0x18D3C2CC, 0xF7ABE787, 0x69261BDE, 0x569FDBDC, 0x0EFD9F06, 0x9ACAA25C, 0xF994C353,
+0x5BCDAA88, 0x8F701A9A, 0x90390CE5, 0x9F1A9D71, 0x61AE0B0F, 0xED7ED525, 0x1F3CABD0, 0x6B99E5BF,
+0xE535BDCB, 0x4270F1B7, 0x504489AA, 0xE343DFEA, 0xD58C918F, 0xF84E285A, 0x76B22D47, 0x7A4D71F6,
+0xE05EFC3F, 0xED6B3987, 0x52BA9080, 0x701ACD19, 0x6CA3B1DE, 0xEAB471D1, 0x9E56C992, 0x7725C7E2,
+0xDE6522FD, 0x8675FB40, 0xDE58F416, 0xAA5E13C4, 0x25F1C06C, 0x8FBBB0D9, 0x8E21637C, 0xB6B74947,
+0x966ED7E3, 0x1D03A826, 0x508F1F46, 0x486A7189, 0x2A911ED4, 0x7AFCBC6B, 0x2496A9E1, 0x70973B12,
+0x5C7445C8, 0x28310AD9, 0xA8B45363, 0x881B316D, 0xD21E2FD8, 0x8A6F5F4E, 0xEF20128C, 0x84BAC11E,
+0xE8E0FE61, 0x2C437479, 0xB7BB5EAB, 0xDB8EC63F, 0x5587EE4B, 0x07FBB51A, 0xA529F4EE, 0x6C4B032A,
+0x3C64238B, 0x584BC281, 0x59F5E815, 0x56C60A0F, 0x84E736F4, 0x7356C6F3, 0xDF2D78F0, 0xC0CCC4E1,
+0xCEBA69A2, 0x05D7A493, 0x6D17F349, 0xFD3CE5D6, 0x57BB9B92, 0x7EC04032, 0x0DC07B21, 0xF74A3D7D,
+0x7AE6C268, 0x2AAA77C1, 0xF939FD36, 0x0DFC78E7, 0x24A4511A, 0xFE2E9B5E, 0xD5000A24, 0x868832CD,
+0x3742ABAB, 0x4F63A17C, 0xBDA9196E, 0xA711601F, 0xC3702EE3, 0xB1371E5A, 0x01049DA2, 0x096591E0,
+0xFD751C94, 0xDEE9D212, 0x64AEAC13, 0xB57523CA, 0x8307698D, 0x619A7B2D, 0xD0605A45, 0x6C38909F,
+0x7F901EAF, 0x2F4C1AEB, 0x0A0F4613, 0x1E4E7F57, 0x373D056B, 0xE989D87A, 0xEECD61D7, 0x55938BC2,
+0x3CC4D5F8, 0x6FB4EB46, 0x8366D040, 0xB6C6128D, 0xE4A9658F, 0xA208A015, 0x8228CF37, 0x24CF2801,
+0x33839AF2, 0x7CA3344D, 0xF9A24599, 0x7B7EE936, 0x4F5F7179, 0xD8920D3A, 0xC0302604, 0x91751E2C,
+0x295E3E9B, 0x48E83719, 0xC59C8F04, 0x567A6608, 0xEB6F699B, 0xD795F2A6, 0xA746313D, 0x03568016,
+0x7EE1C85A, 0x62CB23D7, 0xE28FA8A3, 0xCF8EDE88, 0x50BC0C5C, 0xC1C8B2D5, 0x3FC6E072, 0x8497D5A8,
+0x6BD3026E, 0xA71F7961, 0x7FC91930, 0x70565494, 0x95C9E1D9, 0x089F65DA, 0x0B22AF05, 0x05B7013C,
+0x65682329, 0xD16D99ED, 0xEA57A488, 0x5574DED7, 0xFCC13F47, 0x9E0D27DA, 0x7FFA5CC3, 0xE7238331,
+0x57417902, 0xB120601B, 0x6A60FE77, 0x221473CA, 0x88F4125D, 0xB62FCA8A, 0xA46D271D, 0x21B79E1F,
+0xFEEA0BF6, 0x632A233C, 0x4F3691E2, 0x2B644DBD, 0x691C42C3, 0xF5C65903, 0xCB6FB41A, 0xCC351AEC,
+0xB9DD2034, 0xF7B29FD7, 0x8D7216B1, 0x89E51AC2, 0xEAAF68EC, 0x15CE9A6C, 0x4143C51E, 0x1BED7FF1,
+0x27A1294B, 0x7C25A273, 0x530BE941, 0x81B18DC8, 0x593D928A, 0xF5343401, 0x8D451C31, 0x7DA22FEB,
+0xD5E7923D, 0x65776D2D, 0x2600F1E8, 0xD6D7CA12, 0x9FC5D768, 0x4AA43E47, 0x3F9DE7C5, 0x1121F545,
+0xF02682D5, 0x019E2524, 0x610AA9A4, 0x9ED9626D, 0xC2FAA4C0, 0x6F942473, 0xDC816FE7, 0xF29FEF8E,
+0x2B0785C4, 0xEFFA9EA5, 0x492A6FFF, 0xC9B5A241, 0x3343526E, 0x701742F3, 0x530EC700, 0xD098622B,
+0xA1F6EF68, 0xD242CD21, 0x09E2F496, 0xD25E7C7C, 0x1BDD85B0, 0xF40AEAF5, 0x2C78B182, 0x381C2861,
+0xDF6AF30E, 0x1A710C79, 0x99B982D4, 0x000B9457, 0x2866FD18, 0x947FFAF5, 0xC7B6C8C7, 0x2FB6B592,
+0x059E6CD5, 0xDABD4C88, 0xA9A7B4B4, 0xA03D66AD, 0x9E1ACC81, 0xA2D9178F, 0x20C6E7A9, 0x64A1D1D4,
+0x02EA98E6, 0x676F65E0, 0xC3414733, 0xFD528F3A, 0xBC3888CE, 0x0A84C78F, 0xE7C74314, 0xE277DEB1,
+0x36A1B3A4, 0xC3847E07, 0xA8E279EA, 0xC5B169FE, 0xD97E9D0D, 0xFA71F560, 0x337F75BB, 0x6D36A606,
+0xCA55A00B, 0xB923D623, 0x2ABCAB62, 0x8C91E4F5, 0x6D39D840, 0x2D497A42, 0x07A1B7E1, 0x597F072A,
+0x4EC2865F, 0x39B1AC22, 0x0ED14EE3, 0x395525E3, 0xA8C10042, 0xC7B11330, 0x793959FB, 0xC97018C6,
+0x6C890EDF, 0x43DE20E7, 0x66205C95, 0xD07807DC, 0xFC9A066A, 0x87E33C94, 0x57840BFE, 0x3336E90C,
+0xAC37C1EE, 0x5A550526, 0x9471AE44, 0x47361510, 0x32333225, 0xCDB09B80, 0x46CD52D3, 0x8057D88F,
+0x4125835B, 0x0D1D3D73, 0xC6EF2B71, 0x0DF9A767, 0xF9F8A436, 0x2443ADB4, 0x010E7B34, 0x8F00525E,
+0xF916DBAE, 0x66E736EB, 0xF39B435D, 0xC4CE4823, 0x96B50A8F, 0x9FDC50FB, 0xA844EF15, 0xA125586A,
+0x6BE798A4, 0x57B81051, 0x9B14D1C6, 0xFF588711, 0x632C7470, 0x26DA3FC2, 0xC7E151EC, 0xED405FC0,
+0x77041984, 0x0DA54E16, 0x8FE8B144, 0xACE8A931, 0x3B6D3F7C, 0x319A066F, 0xF5FC554B, 0x30685642,
+0xDB1D8A05, 0xB286F5CB, 0x483AFC94, 0xCB6306BC, 0x072E4A7D, 0x5A98CC9C, 0xFDC0A8A4, 0x77A2EC39,
+0x8E71F913, 0x4B923929, 0xE9BBE159, 0x9BB77F83, 0x92D55417, 0x593D825E, 0xA766144C, 0xED0CE0A9,
+0x498EC4B7, 0x5E2D365E, 0x9F9E06EB, 0x560E3D2E, 0x1B9222F6, 0x22FDDCBC, 0x36BFDAF4, 0x64150936,
+0xE8C6EB0E, 0x55D6A010, 0x38CB2396, 0xA2824ADF, 0x3F7DCB60, 0x4ADB4C42, 0xCC743547, 0x0223063D,
+0xD5F5737C, 0x4BE485EA, 0xCB8FC5EC, 0x1F52E951, 0x4CA515FA, 0xA0205721, 0x84F588CE, 0x9F8F3E37,
+0x772CC5A4, 0x2E846269, 0x90951DDB, 0x38DBEF61, 0xE1A6361B, 0x4B06D6B5, 0x4941EEE8, 0xF5A3F5CC,
+0x1CCD99AB, 0x66E8055F, 0x1F4FA05A, 0xD3DEF617, 0x8C4175D1, 0xA7AE3123, 0x4D77EAC6, 0x39858D8D,
+0x449F9CB6, 0x0CC1F6EF, 0xB3893268, 0x6ABB1DA5, 0xDD3078EA, 0x84E9CB86, 0xCAED6A06, 0x68C4A80D,
+0x370C21D7, 0xC6820D07, 0x00FA88C2, 0x08BC1D9C, 0x4C213FA4, 0x624474BF, 0x5DF2A996, 0x6318F2BA,
+0x6FACC31C, 0xCB91858A, 0x7D2D509F, 0x2F6ADE2E, 0x965DE97B, 0xD8C56403, 0xC73A11C0, 0xF5B3AF11,
+0x7A86349F, 0x2E839445, 0xD29F8066, 0x29347D30, 0x4CF77BBA, 0xF9124624, 0xA40AE457, 0xEF685022,
+0xE957C27B, 0x789D3C20, 0xB07F65F0, 0x32215C15, 0x77406FDE, 0x3DD57327, 0xF76201D7, 0x00B9DD26,
+0x1E89442F, 0xE8BFB55B, 0xDDE71153, 0x8F2AEDE9, 0xE222C19A, 0xD428B9EA, 0x53CEA914, 0x292CC330,
+0x14866B8D, 0x8FB1B4FD, 0xE0765FCF, 0x05925057, 0xCA6BA86A, 0x53247AB0, 0x478AF7C4, 0xFA72D500,
+0x0C023C1F, 0xC8BEF11D, 0xA0FE97CB, 0x18895B16, 0xB066C5B4, 0x51AC9A4A, 0x392C49EA, 0xDCA1C3F0,
+0x2C9BB41C, 0x2101448C, 0x3908D727, 0x5A926CC8, 0xA39DB1A7, 0x5E63131F, 0x92A77ED0, 0x14C46103,
+0x5C079BE6, 0x81473DF2, 0x014393FC, 0x61F67D6E, 0xA7BFF2A3, 0xE45F7B0F, 0xA00ADB9E, 0x4EF37511,
+0xEB444A9B, 0x39E1B0B6, 0x85B23024, 0xEFFF93E0, 0x7D3DB6FA, 0x484AC571, 0x92C2C867, 0x155B6809,
+0xF9C9F652, 0x0482BDCD, 0xF9938117, 0x1C51341F, 0x7CED2988, 0x9E227F80, 0xCCD06AEF, 0xB6D82258,
+0xCF5171AE, 0x0DD7ADAE, 0x25B988EF, 0x7E0EA9E9, 0xDA487995, 0x85A61C1F, 0xA0A1F4CA, 0xF986409B,
+0x483ED211, 0x732B849E, 0xD9DB224A, 0xE5A6073D, 0xA8423515, 0xF306169D, 0xA08C187A, 0xA4C00E53,
+0x0BDF87B6, 0x2E5B200A, 0x34651272, 0xE72BF73A, 0x9A2964DB, 0x9681F2F0, 0x29596C6D, 0x11CADE87,
+0x1305A9DA, 0xE57C7A97, 0xD818FCEE, 0x1AD2D2D0, 0xBD767A0E, 0xF484B370, 0xAE348ECF, 0x253C8BDD,
+0xEEF8D359, 0x717CB6AE, 0x6926A40A, 0x92D92712, 0xB628692C, 0xD0737524, 0xF53B994D, 0x6EA571A8,
+0xEAF1B531, 0x3CFF5E14, 0x9D2A9A74, 0x3990AE9B, 0x32F244F4, 0xECECA1D8, 0x9A287396, 0x285A82A6,
+0xEDD6F7FE, 0x94483586, 0xD567BF8E, 0xFF27C435, 0x1A59C1D2, 0xB51F5D14, 0x6E37BD18, 0x2B2948B2,
+0x866BC238, 0xBCF0E98E, 0x0B853BEF, 0x6045569D, 0x79DC0759, 0xCA57C24C, 0xED0E61AB, 0xA987005C,
+0xF188B2E3, 0x800ABE6B, 0x00659F17, 0xC9EA628C, 0x2A7ABE55, 0x48CBA34D, 0x02B98FF5, 0xDFF4072C,
+0x1C64E5B7, 0x98619663, 0x776AE424, 0x95FFF398, 0x1DC4A0D5, 0x974DEA4A, 0xF50366F8, 0x3C8288F2,
+0x2A1AE184, 0x1265ABB0, 0xA77A9F68, 0x89B7A816, 0x63F39BF1, 0xE4D59030, 0x9068E2BE, 0xD2D246B8,
+0x1976B03D, 0xA5A74284, 0xC6602165, 0x77965597, 0xB20906CB, 0xA9B6CF68, 0x9A79A886, 0xD5E076EA,
+0x23984A04, 0x10E9AFA2, 0x6E9DDF96, 0x522A4B3A, 0xC38DC720, 0xEBA6E4B9, 0xC486A3B4, 0xA589BC08,
+0x57D51157, 0xD6844F49, 0xDC1F2DA7, 0x11FDFA7D, 0xF0D67FB7, 0x21A8FB33, 0x7E00C2B1, 0x4C78042C,
+0xB4BA7C76, 0xC1FC0D85, 0x12E4203B, 0x9B57B6C1, 0xBB51F5FD, 0xCECEBF6E, 0x6C9E110E, 0xBAD34810,
+0x52D1E400, 0x1A082663, 0x8C5CBD35, 0x97E09FED, 0x7424A4B2, 0xB83C7CEF, 0xAF9C59EC, 0x66F530EE,
+0xCC92EDAA, 0xA96E1A86, 0xDE452F3C, 0x6406D6C7, 0xA6577D0E, 0xB0EC6CCA, 0xD096A5CD, 0x24C70ECB,
+0xED92D480, 0x1D5A0A1D, 0x49AD02ED, 0x15B61A68, 0xC3058D0B, 0xABC5D4D0, 0x2009AD43, 0x97ACDB77,
+0x70BFA542, 0xAF498F43, 0x666EDDD3, 0x28B5B8E0, 0x44F25DDD, 0x9C9A35CE, 0xD0A5FF5C, 0x6B7F3FB3,
+0xC869863D, 0xE4455110, 0xED887FB7, 0x818BF44A, 0xDC35C2F8, 0xBE17CAE0, 0x4AB01FEB, 0xA6739C69,
+0x902D2681, 0x1FC59015, 0x7BF9B963, 0x1E0B1228, 0x7215232A, 0x73DB827A, 0x964A54A8, 0xA620F5C7,
+0xD2CE8745, 0x335DB49A, 0x4F4A8DF4, 0xD42B1806, 0x3D6B4A4A, 0xD91DFC0E, 0x0FC19CC9, 0x61BE6107,
+0xC6082842, 0xCB878206, 0xFB499A48, 0x1C874FC2, 0x1D99DC5B, 0x274A288F, 0x4E3973C4, 0x7C1004F6,
+0x7EDFA477, 0x03FF7F15, 0xB25EF593, 0x55A99DEE, 0x439244A4, 0xC3A4729A, 0xD2F48F25, 0x128CC9E9,
+0x33A09A54, 0xFFA92295, 0x1A31CE34, 0x190DC122, 0x16CBCEEF, 0xBD1FA8F8, 0x1572B0F9, 0x553EBBED,
+0x04911C2D, 0x975B7D99, 0x3B84092E, 0x03FE58D0, 0x97E8BB40, 0x3FA989F4, 0x3B762A83, 0x7CECB9EA,
+0x788FFCD7, 0x1B5B99D7, 0x98E16F28, 0x61AE1271, 0x27297F17, 0x77217FA0, 0xB30816AF, 0x632F1B47,
+0xC60ACADD, 0xA9091170, 0xAD921AAC, 0x8C72463D, 0xE153C794, 0x71AF5649, 0x39F82FC9, 0x7A44F01E,
+0x870FDA3D, 0x56070FB8, 0xF5AE131C, 0xA0E0F41C, 0x8D3009BC, 0x39813B94, 0xEB77E8DB, 0x23878823,
+0x58790514, 0x775B9660, 0xF70030E8, 0xC1C47813, 0x2E7DA0B2, 0x1592D992, 0x2C4985F5, 0x09E166F6,
+0x730870D4, 0xD0CD57DC, 0xCBD79515, 0xBE52DE48, 0x39B8A328, 0x8F70A4E1, 0xCE175FEE, 0x52A9EE5B,
+0xB1AC6AA3, 0x31BD71E9, 0xA5D6034A, 0x1CA48E09, 0x814A2B68, 0x4122E7D6, 0x31F26425, 0xA11ED083,
+0x5B14D8DE, 0x5C4BDCF5, 0x0AEF98BA, 0x8E1E58D1, 0x005AC020, 0xBC29534F, 0xBA8FF289, 0x79504FF6,
+0xFA66E87A, 0xC4BD546D, 0xF56B6B26, 0x8AE83E59, 0xDB0188C0, 0x9B3BDA97, 0x6DFBD5B2, 0x2EFF8DF0,
+0x5F8914C2, 0x18BA0C96, 0x92FFED2F, 0x2DFCB0AE, 0xA9A7A95A, 0x05B5E170, 0xC9001EA1, 0xE11F306A,
+0x89BEAF2B, 0x1B4677E1, 0xDEA9D53E, 0x2E7F6C21, 0x0AC23CD4, 0x3C8527B1, 0x93E5D009, 0x292BF5BB,
+0xC4E08057, 0x147AA27D, 0xF153B253, 0xE40906C1, 0x7C9C17B6, 0xAF17F7A1, 0x5F7DAB4C, 0xDDF01165,
+0xFCAAEF31, 0x74343A45, 0x3A9AA0D9, 0x184BA564, 0xB3F1F3D8, 0xE31C7708, 0xE8FA39F9, 0x8DB1AC91,
+0xCF1A2976, 0x2CF4A7BA, 0xC93418FF, 0xCF0C787E, 0x14BFF00E, 0x8C9E8919, 0x67CFE50E, 0xE248421F,
+0x9F2575F7, 0xFB2183A7, 0x03705B77, 0xBFBED09B, 0x14A9ED48, 0x9142FF87, 0xBCEBBFDB, 0xE7635C00,
+0x98233D74, 0x0CE4F6B8, 0x29FB5FAE, 0xD8EB81B6, 0x9369C9F8, 0xCF6F5C18, 0x50A933DC, 0xEBAB61B6,
+0xAAAF31FB, 0xEEA54764, 0x84DFF79C, 0x741058B5, 0x734EB98E, 0xB2717FD0, 0x65DF5708, 0xE50EBF6C,
+0x1C6FA3E9, 0x7E308741, 0x5539B577, 0x995ECECB, 0x7971D6DB, 0x193223EB, 0x0308EA7B, 0xB390D9A9,
+0x722DB7FA, 0xF1CB12D1, 0x3310C32F, 0x1EEC8F08, 0x6238D318, 0x664B034E, 0x277DD49E, 0xC4067733,
+0x56E8F3E9, 0x7DEDCAC1, 0x9EA196F2, 0x5A8D0FA8, 0x0C9947B8, 0x11D9A7EE, 0x865EDF93, 0x326E4999,
+0x7831E420, 0xEB42D28C, 0xBBC3B33F, 0xA78A673B, 0x2B52AFF7, 0x09BE162B, 0x2F0D54F1, 0x5D1CC9B8,
+0xAE6D4423, 0xFE635146, 0x4A5E55B1, 0x08196FBA, 0x6154DF4C, 0x72E1AE7D, 0x320762DC, 0x77081391,
+0x1F830A19, 0x88CD5805, 0x86A91542, 0x86C2231E, 0x5ACF74FD, 0x85B67A01, 0x00D6C5FB, 0x17A5858C,
+0xE22FD865, 0x3CEA7BBC, 0x5BDDA2F7, 0xC50DA039, 0x1EAB2299, 0xB9656F00, 0xA17FDF87, 0x4413AB09,
+0x1EA8F400, 0x67805067, 0xF8C5FB1C, 0xB88B32B3, 0x86080E68, 0x0E84F810, 0x26E52DA7, 0x7CC080F1,
+0xE5A1504D, 0x3B9EA282, 0x27818AEB, 0x282F0922, 0x2EF4687A, 0xF2B4D7FD, 0xF8592688, 0xF0C8F63F,
+0xFE4A5426, 0xA45934CE, 0x5E466321, 0xDAC276B7, 0x9039DA93, 0x37B018B5, 0x1BE81C60, 0x32134688,
+0x6075DDC6, 0x0C502CC3, 0x51BED274, 0xCF8D5D23, 0x35FB0FFE, 0x9E8AC967, 0xD4D49531, 0x3C49442D,
+0xC4731E97, 0x3C83014B, 0xD301EF0F, 0x187D1677, 0xC055EEFD, 0x70FBFFCB, 0xB525F0F6, 0xF20065FC,
+0x6B2A7E6B, 0x3E39BA82, 0x6B422806, 0x1FC99178, 0x17D8BC3B, 0x6C7281AE, 0x9898CBAB, 0x1812F798,
+0xE329BF02, 0xEE7957A9, 0x893705E3, 0xBDECEC16, 0x648D0920, 0xCB905313, 0x828033EA, 0x379F98B5,
+0xFF806610, 0x3AFCA66F, 0xE92F11EC, 0x79796F55, 0x5BCD25CB, 0xBDFEFD63, 0xE6A8EB76, 0x7FDA10F7,
+0x3BA7E150, 0x8EE08F93, 0x6768233D, 0x72F54E37, 0xB963D0D6, 0x5A86A514, 0xEFD87EA6, 0x52414E91,
+0xBD07CCE6, 0x97F892EC, 0xB72D6D6E, 0x7B635295, 0xF9AA158F, 0xD7902FB5, 0x147E8CBC, 0x3F216464,
+0xA9821789, 0x9F6B7F36, 0x398C7815, 0xBDDCAED6, 0x751193CA, 0xF02D9D81, 0x21AC97A9, 0x6C8C7A94,
+0x2EC739B9, 0xEC1B3FDD, 0x9A199388, 0x19FD4833, 0xD314C910, 0x7DFB027B, 0xD9342BA2, 0xFC12C58F,
+0x75D4609F, 0x7FF0D9D6, 0xD14A0799, 0x5E71484F, 0x5C30D0E7, 0xABA0C23C, 0x388CB907, 0x92888735,
+0xA102DA5D, 0x299C5BF8, 0xCACED1B6, 0x3741545B, 0xBC91FBD1, 0x1983C03A, 0xC5047FB0, 0x3EA19C8E,
+0x6415CDA8, 0xE396612D, 0x196D730B, 0x66363B4E, 0xA10464AD, 0x8DEAD1B2, 0x0BFFC18C, 0xF79D64D0,
+0x0090A7B7, 0xE648FB62, 0x477BD324, 0xCA79A27F, 0x1DA2DE5C, 0xB7B2297A, 0x25F1BF00, 0x44352D1D,
+0xFB488F13, 0xDAA4B225, 0x4404B58F, 0x49DECA31, 0x94F0C9EE, 0x73F80CD7, 0x0093611B, 0xACDDDDC0,
+0x06A87C09, 0xD383B8ED, 0x296FCD7B, 0x0A6DB668, 0xE7E08CE1, 0x04874EDD, 0xC334179B, 0xC807DBC9,
+0x82AE28E5, 0x09B6913C, 0xEFEC29EC, 0x7247157A, 0xD1EB1B1A, 0x07FE61E9, 0x40C70947, 0x8C15DC0E,
+0x5F1E56BF, 0xAC219FC5, 0x75BA3595, 0xEC5E93B0, 0x1A2BF253, 0xD957992A, 0x4DC370F5, 0xDDC3671E,
+0xDDEEB330, 0xE6F96ADB, 0x0397AB16, 0xD7D61587, 0xEA7A9453, 0xA5590BFA, 0xA9CC5E06, 0x6DEDEC9D,
+0xD7A8269D, 0xBFDFC110, 0xCD315879, 0x307E63C7, 0x61EAADE6, 0x766C84F6, 0xE8BFF236, 0x1E3F566C,
+0x01C3792D, 0x54118C22, 0x9FD9555E, 0x96CC6E36, 0x0C7A6D4A, 0xFF6705D7, 0xC2E4A71E, 0xC24E4B08,
+0x42A83FA1, 0x1F5CA797, 0xA4E4550F, 0x3940F223, 0x1388266E, 0x36CF2CB6, 0x11D867EC, 0x5C66A363,
+0x2C7539E5, 0x0AB0EC87, 0x1233E393, 0x6B9113F8, 0x886B6E77, 0x128B1933, 0xE77B18FA, 0x9369578F,
+0xC58E23E8, 0x666C92C9, 0x517F1E5A, 0x801FA60F, 0x52E4C2AD, 0xEEDD99E9, 0x64D6D5E6, 0x16783B03,
+0x858111FA, 0x6EAA07CB, 0x6FDB3EB5, 0x133D5F69, 0x73F55435, 0x7868E0EA, 0x3614D375, 0xC3BD4636,
+0x575545F2, 0xC7E7B55B, 0x607FAEE2, 0x22D13130, 0x19718D77, 0xD06EE97F, 0xB13B33E7, 0x070340A1,
+0xB60306EB, 0x91EBF47E, 0x462D4C6A, 0xEFC6318D, 0x5799E847, 0x3B5EBD79, 0x00CE0311, 0x894FA835,
+0x9E6AB946, 0x34802BBC, 0x103F39CC, 0x3CFBFEF5, 0xF8D7A22E, 0xDBFD06C9, 0x4C3DA696, 0x2B6D3D77,
+0x62464620, 0x015DAF23, 0xF1150A70, 0xFFAACC26, 0x47C7098C, 0x6743FCE7, 0xA999A952, 0xC4C17002,
+0x124794FD, 0xFF2EC92D, 0xE110F9A5, 0xC5581233, 0x448FCBB1, 0x4AFB0E57, 0xA091DF75, 0x6B9E2756,
+0x62CC74B3, 0x4734EEBE, 0x0D20EFA3, 0xF3E49037, 0xB51D7DD9, 0x47E3F735, 0x016B3896, 0x60E61825,
+0x044C5F5F, 0x2B854C98, 0x7F0CBD1B, 0xED0BEEF8, 0x60D11C52, 0x5A243300, 0xC5CBD3B9, 0x3305FAF2,
+0x4967EE7F, 0x59F1F80E, 0x0D039C2E, 0xD7362414, 0x89BD8BA3, 0x7DADE255, 0xC80F2CA3, 0xAEF5B8E2,
+0x37563BE8, 0x08D89DEE, 0x45BC554C, 0x79456189, 0x709C9BDC, 0xCB3B9F72, 0xAFFE5FCD, 0x95A96266,
+0x24642EC2, 0xC51ADA81, 0xA84689F9, 0x58F6F6C5, 0x14C017EA, 0xA8FB9F10, 0xA19F7AC2, 0x7DA8AF56,
+0xACF56158, 0x02ABD7ED, 0x5786C1EE, 0x14B3BECC, 0xD7A98DC0, 0x5E4EBB4E, 0xD39EA8ED, 0xF9E453AE,
+0x1EC20C56, 0x99BD2408, 0xD8DAE3DA, 0x2A2DCC6F, 0x2C038DDF, 0x9F1FA5F5, 0x99710523, 0xC8F7ACD1,
+0x17F9BF0B, 0x8C5FC2C0, 0x76532764, 0xD3C00770, 0xD68B3CD6, 0x3C24CB1C, 0x0CB902DF, 0x1827831A,
+0xBD882783, 0x779ACDAE, 0x46A4A9DC, 0xCBB547D0, 0x6C14A2B7, 0x7AD71CA3, 0x6019881F, 0x2373E305,
+0x6BBA5BD3, 0xFBC23D6C, 0x945BADA2, 0x172CF2AA, 0x3A3D0B7C, 0x6F969298, 0xDC0E991E, 0x45720FAD,
+0x6B67C3E4, 0x7A792746, 0x0900D697, 0x3D792E82, 0x0A400DA6, 0x37A9118F, 0x702248B2, 0xF97663B4,
+0xD0660F82, 0xF622AEB3, 0x3F1D932E, 0x5F726B7F, 0x8D669DA7, 0xB5A23D8F, 0x5D952552, 0x3F726BE0,
+0x9CB56340, 0x4BD05FF0, 0xEF1CF476, 0x057FB34B, 0x0E0D452E, 0x8600B4F0, 0x7665253A, 0x3478DD68,
+0x10E55D02, 0xAFE1EFE9, 0x4CED8CD0, 0xE3D6EF6F, 0xA50A94C3, 0x7C77F117, 0x55887AF9, 0x33E62E72,
+0xB3C0F9FA, 0x8213E1A0, 0xC734D3F3, 0xAA330B53, 0xF203C6C9, 0xEA08DE7A, 0xC0BD1C9E, 0xCFECB09A,
+0xC50C2646, 0x9CFF90C8, 0x40D4D7E1, 0x9ADA8788, 0xCD0E0759, 0x89E2B130, 0xA1FCCA2E, 0x3EDFE273,
+0xE4147CB2, 0x4B0DA5E1, 0xCB9807AF, 0xAC7BF3B9, 0xA3241535, 0xB0B9AB7C, 0x2529C289, 0xF552B274,
+0xF3EC28F7, 0x9243800D, 0xA57CBB51, 0xA39A0597, 0x20BC8F26, 0x030CE154, 0xA54909AC, 0x35875D33,
+0x8B99C6DC, 0x0E1B4162, 0x1F82AA35, 0x2123B8ED, 0x615F9425, 0x38F78826, 0x3F2B0802, 0x361F97F6,
+0xE3F9E3F2, 0x6088F475, 0x89EA8F42, 0xCE214B09, 0x49997A70, 0xC4521131, 0xDF26F41C, 0x0152BA27,
+0x40347681, 0x5AA6C280, 0xBF1CA7C4, 0xBFA0CF31, 0xD1BC0DA4, 0xCF279CBA, 0x6ECD07F5, 0x605A0F77,
+0x80A6EF19, 0xB8EC0E03, 0x8EA0BF4D, 0x3FB36A12, 0x6EC5EA56, 0xB56BD813, 0x692E767B, 0x2C31379F,
+0xDBAE58AD, 0xDA9E347B, 0x919370BC, 0x7D9A74A9, 0x5A3182FA, 0xB98823AD, 0x424D2176, 0xC6FFB2EF,
+0x210101CC, 0x62C24467, 0x0AEE3657, 0x5AB19655, 0xAD8E227A, 0x37214472, 0x4B6D685B, 0x1D4B1A58,
+0xB44B20FF, 0x0EA9E865, 0x062194C8, 0xEE12D799, 0x9BC3A30D, 0xB3898BF0, 0x6B3D8DCB, 0x640DD2F5,
+0xAB31F909, 0xFC0E461B, 0x42B060E6, 0x0C2C2441, 0xCBC05104, 0x74C618B9, 0x3228C362, 0xA7C36346,
+0xB1D0B279, 0x238BA230, 0x273D2EE4, 0xF35A62A4, 0x5464AD9C, 0x046F021D, 0x7A5B47F0, 0xE0B000F4,
+0x0B10B7DF, 0xDF7F0C2D, 0xE3826B77, 0xB99A081C, 0x5D8728A7, 0x6C26C8F4, 0xCEDFA8E9, 0xB0C1ABF3,
+0xA334CEE2, 0x116D26C6, 0x923CB75D, 0x09DDC018, 0x25975138, 0x7C8BF208, 0x348B26C0, 0x7E4B2117,
+0x1AE7F579, 0xC71DF31C, 0xF1D57FEA, 0x1F916A46, 0x7AA35CC1, 0xAE406E98, 0x0BD8352E, 0xE2F4EE41,
+0x22095A3B, 0x4EA7B002, 0x644D64EC, 0x0945408D, 0xB86A19EB, 0xB493940B, 0x274EAD08, 0xC5264D9D,
+0xE5DC025C, 0xE31543CE, 0xF5B8E280, 0xA608AF16, 0xF6B5794A, 0xA0A9D6B1, 0x3ADEB5E4, 0x8F6A1FEA,
+0x9BAADD62, 0x1182C064, 0x6B478460, 0xC38756DE, 0xD6332AEA, 0x80AEE99C, 0xF6459323, 0xFE8CD12A,
+0xCF48C009, 0x6611AD75, 0xD537606D, 0x979641FD, 0x4E95B299, 0x9E8554A9, 0xEBEFB9F3, 0xB84C9173,
+0xFAA0D078, 0xDB19C027, 0x9627F31B, 0x7D5FC000, 0x50680E62, 0x6655F799, 0x28C7DB63, 0xF699DE5F,
+0xEDFC2D78, 0x6B559207, 0x586F95AC, 0x18E8CD31, 0x52C4C3E9, 0xC4721C3E, 0x0AD83756, 0x7C82ED24,
+0xE5899752, 0x4C08F218, 0x5D57CA65, 0x89375CBB, 0x09358B31, 0x93B2890A, 0x9CC85150, 0x05E400FE,
+0xE0BA00D5, 0xE6DB24D8, 0x9D878367, 0xE2063F30, 0x49664AF0, 0xA28EF5C6, 0x7A89A4B7, 0x465BA952,
+0x36527899, 0x5F147212, 0x4E1897F4, 0x4C27D7A6, 0xADFF6D3F, 0xF05FBAFB, 0x584A7D36, 0x59CFE6F7,
+0x15A9F322, 0x6D6678D9, 0x4A998794, 0xB1A29A75, 0x1E85C622, 0xA11C5F6A, 0x09FE4649, 0xEB407603,
+0x4E360ECF, 0x9DEC3F84, 0x0BD5F328, 0xA3EED5FC, 0x2C775CD3, 0x0684779A, 0x76D92516, 0x2CD87C9E,
+0x230B9697, 0xCBA833E7, 0xF98E586A, 0x3D2D07EB, 0x6F51A71D, 0x9A251433, 0xA9C3E01F, 0x494138AF,
+0xD365AABC, 0x12DA1306, 0xC527ECAE, 0x5159B080, 0xA09C6BEC, 0x1B3FDFE0, 0x80D746CF, 0x2B9D09B6,
+0x9DB93A6E, 0x7370465D, 0x5F7A3FA5, 0xEB5C1615, 0x07E4F2BF, 0x58B02F68, 0x82934112, 0x154FF910,
+0xB787BB2B, 0x1BEADB9B, 0x585C94E5, 0xB8D667D2, 0x2AA64141, 0x529DC97F, 0xC20AA180, 0xD285DDB3,
+0x8F7F14D3, 0xB2E5C3EE, 0x1B51F7A9, 0xEE4EAD0C, 0x46291D7C, 0x8EE58621, 0x26698CEC, 0x173AC40B,
+0xD4C08D25, 0x76C91043, 0x7238841D, 0xDC498844, 0x7F8C7858, 0xEC483940, 0x7110CA21, 0xC955CFF5,
+0xAE92E0E0, 0x6C0E073D, 0xE360FA44, 0xE60A2D8D, 0xAFE34775, 0x724DD6F6, 0xB5C49624, 0x7F6BC7BF,
+0x6904C763, 0xA8662D52, 0x42CF5251, 0x107AB2E4, 0x2059E6E0, 0x9F1DE504, 0x1C5D562C, 0xABF710A5,
+0x319EDEBC, 0xC6A71F64, 0xC9A0E9E6, 0x4A664C9D, 0x623946B4, 0xA8D5EB54, 0xD248E742, 0x0C0707A9,
+0xC8888485, 0xABAB3CBF, 0x27579523, 0x74441116, 0x5665ABD8, 0x819CFDD5, 0x816F1318, 0x0D79FDB5,
+0x7AF9C357, 0x3758CCB0, 0x81742160, 0xF9457280, 0x0EC13FB3, 0xC4B06F05, 0x78296209, 0x70DE0F4E,
+0xF3B1CCB9, 0x82C5B8F0, 0x9318D6A0, 0xDBD81693, 0x626FBBD2, 0xCD3C05A5, 0x479816DE, 0x87058FEE,
+0x4601F471, 0x3112D478, 0xF0E356C8, 0xD1ED3B8C, 0x8CB26573, 0xF09B292C, 0x67CD44FC, 0x4720D897,
+0xBE1E994F, 0x08D9159C, 0xE8FF698A, 0x1E50CB61, 0xD278460F, 0x7EF5C201, 0x3C9DF3DC, 0x7F25EC6E,
+0x79821767, 0xEE7C910D, 0x97A8ADCA, 0x85FA52D1, 0x3ABF7345, 0xAB626613, 0xCB9E0766, 0xAFAB1C08,
+0x591A48CB, 0xFEA52161, 0x43A2AC60, 0x6A698FBE, 0x5BAE71ED, 0xE3B054C7, 0x203664E0, 0x209B1883,
+0xFAAD65E1, 0xB1A698FC, 0xB95DAAD7, 0x70E35A36, 0xBA8E1B58, 0xC18F2F19, 0x29F76F91, 0x0FF20CD9,
+0x49CD915B, 0x20A2E120, 0x8D855E60, 0xF0B27DF7, 0x698C9622, 0x84E7F59A, 0x2A6569EE, 0x17AFB9E7,
+0x419FC3D6, 0xBBF96D34, 0x60A93583, 0xF823ADCE, 0x550EBC04, 0xAE1A2C9C, 0xB6BA7EC3, 0x30C58996,
+0x00E68E32, 0x551D43A2, 0xAE2BCAE6, 0x031665AD, 0x076ED910, 0x4E6EA25A, 0xBFCDD1EC, 0x4D4F25F3,
+0x3DABA3FF, 0xAD48885D, 0x1A31FC69, 0xB29179F8, 0xA07228E0, 0x73B985A9, 0x92F35C44, 0x456B4AB0,
+0x5FA242F0, 0xF84C4A25, 0x3B47B079, 0x46ED2DF2, 0x592E8556, 0x6568BA70, 0x7E64E56C, 0xC671E77E,
+0xF6341F5B, 0x1EB5467C, 0x3A98CC23, 0x01F4B720, 0x45FC277C, 0x8761D4EB, 0xA03C1C6E, 0xA79FE0D5,
+0x3237B290, 0x27636038, 0xD6792095, 0x59BDB42A, 0xAC4DFD4C, 0xB78D0BC0, 0x1EA78983, 0xD870BCE4,
+0x2155B6FD, 0x50293F75, 0x4948558C, 0x641C2167, 0x144A05F1, 0x6AF45265, 0xD4DEA95C, 0x5C06F089,
+0xDCA5E151, 0xC0DC1B63, 0xD85BDE69, 0x4675FA5B, 0x8D03F808, 0x666EB41F, 0xEDA0B2ED, 0x06519E77,
+0x5C9D3EB7, 0x03B97B14, 0x2C2FBB41, 0x1A636093, 0x836DF0BB, 0x5F9487A5, 0x33E22654, 0x31F595A6,
+0xE2BB64BF, 0x0AC715E5, 0x7A80C595, 0xEA6025AA, 0x335CF671, 0x3E5C6248, 0xF3309A94, 0x2CC8DF3F,
+0x470792F3, 0x1BD3CC7A, 0x110BEC2E, 0x05430E2A, 0xB0694B9F, 0x291BBC53, 0x57D45D96, 0x2D47F9AD,
+0x4BB8D917, 0x7296C8B7, 0xCE99B61A, 0xD33F6D46, 0xB91D8BF0, 0x50A15697, 0xFCF37C59, 0x5D250DAA,
+0xCB5374C7, 0x7EE1ABA4, 0x36B47602, 0xF0363BAE, 0x9A47135B, 0x8B5FA821, 0xEEC5AD03, 0x8AB7C694,
+0x1794A21B, 0xF7CB1956, 0xE2321FD5, 0xB8AA1763, 0x45A3904E, 0x4D5549EE, 0x550027D7, 0x356D04BA,
+0xD31A019E, 0xF70CE26F, 0x02B69CD6, 0xDDA1604A, 0x1D0DADBD, 0xA38759A1, 0xE25CB7FE, 0x13D2EA9A,
+0xC752490B, 0xF36417F0, 0x6774C47E, 0xE8028679, 0x3FC7758B, 0x5AE419C0, 0x0379C143, 0x5E49098D,
+0x7EAB576C, 0x53369AC2, 0x4EA90CCD, 0x0A526343, 0xE816AD29, 0x2987E996, 0x636EF430, 0x3B227E0B,
+0x41EA2D7D, 0xC70FA8A9, 0xC9F3D896, 0x503BD4B8, 0x994CCB25, 0xF882326F, 0xBE449682, 0x281A4347,
+0xF591DCDB, 0x0DCF2C2D, 0x9E0D7704, 0xA1C249BB, 0xF1666E71, 0x0A436474, 0xA6040917, 0x22FA6BF4,
+0x3586D7C4, 0x39632E63, 0xB939B46C, 0x21C1C525, 0x4D03D43E, 0x403472C5, 0xB2ACBD0C, 0x40F39918,
+0x749C61B6, 0x2437DED5, 0x556B0B38, 0xAE983AC6, 0xBE5C8F38, 0x59343451, 0x5C33D809, 0xD1D3E7D9,
+0xB3D3515B, 0x58102D8E, 0x8DF9D10D, 0x07304B50, 0xC1C0D4D0, 0x9FA97B0E, 0xB1A24787, 0x9D717A6E,
+0x777101D0, 0xD3405BF9, 0x1FBA50C3, 0x40C44BD8, 0x727E27FC, 0x655F3D18, 0xD184854F, 0x3B61645D,
+0x160FD8CE, 0xFB5795D1, 0x10003C64, 0x2DA06B03, 0xBF22FAE5, 0x2E7B7172, 0xCF102044, 0xCA64DEB6,
+0xB6BA4798, 0x52181EAB, 0x38ACB756, 0x132AB151, 0xC2D5A22B, 0xB1A94534, 0xC4FCD5B5, 0x37E4555F,
+0x6104C246, 0xC4832263, 0xD9D45C2B, 0xCBB1F87E, 0xFF5455F1, 0xD28D1939, 0x6F93912D, 0x538AB005,
+0x6D940AE1, 0xC4A825E6, 0x6371D594, 0x993EA751, 0xA47BAF73, 0x5A516348, 0xA7D4B42B, 0xF84A6A74,
+0x145C7A24, 0xB1CA2238, 0x034C76B3, 0xE2C238FA, 0x547364DC, 0xAE9AC390, 0x66312D44, 0xC6E489C3,
+0x5E416397, 0xD07777CE, 0xF5FC935A, 0xEC76417F, 0x49A249E3, 0xFDD7F282, 0x6C62FD24, 0x7269CE5B,
+0xF05B68AB, 0x182FE21A, 0x3AC9FCE6, 0xB92B69FA, 0xF4088B44, 0x0720D3B6, 0xB1D67954, 0xB9EDD34F,
+0x60B58FB0, 0x2A0F4C4C, 0x9DBF141E, 0x806D5423, 0x9215F6BB, 0xF66442FE, 0x8AF6B785, 0x4F6A5632,
+0xB9B77CEE, 0x4C4914C7, 0x6A23CB9E, 0x5BCB8275, 0x49DDF400, 0x93C5C1E2, 0xB1019FAF, 0xA110357C,
+0x6A13D7F6, 0xA1B689B9, 0x27891C76, 0xE3D36072, 0xB3405DAA, 0xB06BDE50, 0xF5B4C659, 0xEC711939,
+0x31632FFA, 0x76C50D85, 0x94FA5AED, 0x1D8CE452, 0xCC008650, 0xE9318569, 0x6B291305, 0x2402A538,
+0xC1B5518B, 0xCB7FD8A4, 0x24DB1FA8, 0x8B77BEC6, 0x2E9EA3C1, 0xFA9497B3, 0xF9E4FB9F, 0x8B755464,
+0xDB8B4B38, 0x38C41E91, 0x68F105DA, 0x52042886, 0xF20EF228, 0x5F619004, 0xA4BC24D0, 0xE86872A1,
+0x24D19BC5, 0xEDF48301, 0x5E3EB7AC, 0xFDE677A5, 0x449259CA, 0x095312CE, 0x0E7E737D, 0x9AC61227,
+0xC6F71522, 0xE859F251, 0x666DC0FA, 0xA7DE271C, 0x26F3ED2F, 0x2AD6888E, 0x7BDD3952, 0x5753243B,
+0x64F66597, 0xCD0E2D39, 0xFD866D2D, 0x1893BFA3, 0x394D72E1, 0xF688E31D, 0xEC2B161C, 0x3245E38C,
+0x3909AC66, 0x1A0AD7CE, 0xB8410AF9, 0x0FC8E6FC, 0xF4B7FE14, 0x3AEBC529, 0xD0E3C446, 0xC2D9E03E,
+0xF9666742, 0xD12FDBC4, 0x4FEBB7B0, 0xA0F9F5CB, 0x5E612C87, 0x85158C53, 0xBBD99634, 0x572E4603,
+0x7CB848F8, 0xA47E56AF, 0xF3B03151, 0xBFC5B3E2, 0xD09943EA, 0xDF6B528A, 0x1D7C66A2, 0xB412E28E,
+0xCC4AAD64, 0x5448CEFD, 0x7C894FD6, 0xAC50DB80, 0x71DD73CE, 0x47165052, 0x0800E168, 0xE628BA12,
+0xD5ED0578, 0xCF4009B1, 0xAD0DD838, 0x163A5167, 0x60A8E643, 0xFB2C8E10, 0xE323F5B2, 0x2F50F2D3,
+0x6760929F, 0xFC2ABEA9, 0xD8DB624C, 0xBBD8CCB5, 0x6BEC6865, 0x33FF3AE4, 0x711A6CEB, 0x5D7E03A7,
+0x74D6F550, 0x1B9C31FA, 0x01A0B325, 0x7060320D, 0xFE24A396, 0x24C0CBC7, 0x2817AC3D, 0xA343A744,
+0x469EFE01, 0x49F11332, 0x510CA786, 0xFFDB80F6, 0xC68F1FC2, 0x6D1421B9, 0x1BED0950, 0x7D40EEB7,
+0xD2DAB348, 0x233075E8, 0x95B50A3B, 0xCB421E83, 0x4BF264F1, 0x34DD72B7, 0x8A367C24, 0xBEF49F10,
+0xAE8D9D97, 0x03343B52, 0xA4FA2258, 0xC9FD39A6, 0x435B3A98, 0x53B05AFB, 0xA2532944, 0xE516696E,
+0x6D839F1B, 0x8F2858FF, 0x421EC2D9, 0xBF7DFCE7, 0xB0C857DE, 0xD6ED0D71, 0x1BBB506B, 0xE17A1E0E,
+0xB240E5A9, 0xE87CBF70, 0x840D03DF, 0x1DB673C1, 0x30CE6C44, 0x04D77890, 0x5A469FCB, 0x970FD56C,
+0x158FB957, 0x11497E7C, 0x74C3A7E8, 0x4C354116, 0xC0B9CB78, 0xAA61D06F, 0xF446C5E4, 0x8372261C,
+0x579B1AB2, 0xB7848B75, 0xDAB8FFC5, 0x3F79635F, 0x662CC2A7, 0xC99AA6C6, 0xBBC5C71B, 0xEC1FD803,
+0xECA599C9, 0x8B1FF932, 0xA5F2D6D7, 0x8BE6BB93, 0x35888E68, 0x8FD405BC, 0x5AF13D69, 0x6653EC82,
+0x954A7BCD, 0xA3863924, 0xC4E988FE, 0xCCA099E0, 0xD33C5155, 0x13F3537F, 0x5939D5C1, 0x2B3B2B2F,
+0x05DEB857, 0x14521261, 0x86283D41, 0x3FEAA9E4, 0x072CB422, 0xE42D4F15, 0xDAF91C57, 0xDA9D1A7E,
+0x823CA826, 0x569590BA, 0x9FA059A1, 0x20BEDC1F, 0x6BC5D88F, 0x3B3852E2, 0xC0A07D02, 0x4779505C,
+0xF887D861, 0xFA9CE970, 0x2B18D991, 0x5FA574B3, 0xFC34DF98, 0xE2D6D58E, 0x9A3D5637, 0xBFCD5096,
+0xBB9F11D4, 0x95C0D5DA, 0x2D4FF9F5, 0x485340D8, 0x71E8EDD7, 0x6B6C1200, 0x10F70513, 0xFA353B5B,
+0x488F78D0, 0xADC6B82D, 0x8412C67E, 0x5E511A81, 0x4CAD721E, 0xDBBDD591, 0x3D29ED76, 0xB99956CC,
+0x67113743, 0xB9DD8F02, 0xEA7D984B, 0x75BB7F76, 0x7E161462, 0x79AB8FEB, 0x3D08579C, 0xF0A81542,
+0x4A3E8E57, 0x3536DE63, 0x2BAD80EE, 0xB3468BF5, 0xDF5F6D37, 0xB67E493A, 0xB7394F5D, 0xAC359CB0,
+0xD4E279D6, 0x5F2ED238, 0x1FE5AB27, 0x41F01E78, 0xB014246F, 0xDDBCE331, 0x14F3A803, 0x8D8784CF,
+0x9227F41A, 0x682304DB, 0x1BC41D91, 0x96114D8C, 0x918F2B14, 0x0759D375, 0x0C42F949, 0x2A35392E,
+0x02BDCBBA, 0xF1633709, 0x365BA4C9, 0x698B25A4, 0x785E8404, 0x497BAD9C, 0xF00F93AF, 0xF703CDC9,
+0xA24491C0, 0xB612961A, 0xAE35BA29, 0xD4A107F3, 0xC787AD50, 0xEA2DDAEF, 0x691650E9, 0x889B5CE3,
+0xE4AD9B03, 0x53D8F895, 0x7D18A29E, 0x2B647A92, 0x0B7AE253, 0xA02C6E5A, 0xA39BBB7E, 0xC953694F,
+0x112F90C7, 0x19D0E054, 0xCFF320FB, 0x422CC31C, 0xE4B5423E, 0x7E384C38, 0x1966C6FC, 0x9848D6A6,
+0xE0CFF62F, 0xBAD2435F, 0x60F3C229, 0xAF4A4A0C, 0xE93C51BC, 0x85064694, 0x26D702B5, 0xE30E8B3B,
+0x2D5FC706, 0x1D110689, 0x341B12EB, 0xFB36CD5A, 0x1E0D9728, 0x036AD0CF, 0x80BD2D79, 0x2F9C4A79,
+0x3A2126A0, 0xD1E4C179, 0xB8777C0E, 0xAA4F6396, 0xBA0BACE2, 0xE25D7449, 0x58EA0C8F, 0x1FA939FE,
+0xF210281B, 0x24CEB15A, 0xED1ACC35, 0xB5177880, 0x67FFCEEF, 0x87236331, 0x27FE4099, 0x24A3CA65,
+0xE7F5B776, 0xFB0D9527, 0x160B773F, 0xDFD504EB, 0xEF051F04, 0x81F57A43, 0xF94146A0, 0x1433721F,
+0xC8543768, 0xAE3CBCF5, 0xE2567A80, 0x563C0360, 0x4856AE95, 0xB41AA084, 0x04C4AB4D, 0x5077E17F,
+0x09B1A17B, 0x031767C2, 0xD0778000, 0x2157D5E6, 0x5E3311E5, 0x7C5302EA, 0x6D2EAD3C, 0x91D84AF5,
+0xA73BFC4C, 0x65151C96, 0xC2286303, 0xCFD17D15, 0x30648A8E, 0xD58BA74A, 0x07FFF6B2, 0x72FDF622,
+0x98D704F8, 0xDFC78E48, 0x0698CCBD, 0x4F686FD4, 0x7BFFCE4A, 0xA08323FA, 0x4DE33ED0, 0xF85D2E2D,
+0xA01841DA, 0xC7CB82BB, 0xB0A72431, 0x015C44ED, 0xF0D37DF8, 0x329ACE97, 0xF796FF8C, 0x06C2B070,
+0x086F4272, 0xBE14C13C, 0xACA02C31, 0xBADA6217, 0x7AAE1BA6, 0x710B5029, 0x1D969017, 0x4A8D9006,
+0x7E55B156, 0x18E68BE0, 0x344074FB, 0x43EDAFDC, 0xEBED2D6F, 0x34B537FA, 0xFACF8615, 0x810ECC21,
+0xEFC318F8, 0x4BF3B14A, 0x33E41979, 0xE7A3D193, 0x0036E296, 0x6577358F, 0x385F4C25, 0x6F658825,
+0x4E36383A, 0x1B6A234E, 0x35AC67A4, 0xAB650E71, 0xEC294ABF, 0xDC05CE83, 0x9FC38BC6, 0x1F3CFBFB,
+0xF13BB7CF, 0x672D0C25, 0xAF580B8D, 0x689DF281, 0x2CD92768, 0xEBA0DD7E, 0x6CBFB264, 0x5C9CEAAC,
+0xB1E7F14A, 0x8D2E90A3, 0xB1D37F72, 0xD412A122, 0x63A62DFB, 0x489B5ECD, 0x425B8D42, 0x7A4B72DD,
+0x728C51CE, 0x6ABBB878, 0x1740B51F, 0x25422D91, 0x7F682225, 0x993D0F2A, 0xD7066DD1, 0xD1853CDA,
+0x2A03F5DA, 0xC010C3BA, 0x082792B2, 0x417FA730, 0x372392B9, 0xA49C931F, 0xEBB66482, 0x646CA306,
+0x86328040, 0x3DC7CB26, 0x54CF6513, 0x0CDED2F2, 0xD4CCEF84, 0x4051430E, 0xD825EAEE, 0x3B3ECD81,
+0x1E7BA695, 0xDCEF5E49, 0x9FD55275, 0xFD212237, 0x19121AEA, 0x880CC759, 0xA7EFD050, 0x0FB28435,
+0x7DAAAE6B, 0x10FDB328, 0x86487347, 0xE7668B6B, 0xC5261E34, 0x3B9E8268, 0x4BEB7995, 0x9EC68864,
+0x0EBE3E1C, 0xC13D45A0, 0xA71AF64D, 0x6D5B24DE, 0xBCA5B735, 0x74B24D9A, 0xD7CCD34F, 0x76B8B442,
+0x9073A97E, 0xE74F0DB1, 0x7C11133C, 0xBA848581, 0xF3D18840, 0x20F8F73F, 0x2B207CE5, 0xB71ECA75,
+0x353C6509, 0xC29ED415, 0x8A5D9FE1, 0x317E924A, 0x000355F9, 0x8FFB53B4, 0x90F2AB20, 0x362FFCC0,
+0xA675D642, 0xE2F83FBC, 0x4E387204, 0xD635747C, 0x0A3CDEFE, 0x98BA8728, 0x3B20230C, 0x6A955C37,
+0x158C3C25, 0xC97550C5, 0xD07738BB, 0x3764E264, 0x1A56D663, 0x531EE721, 0x205B5BB9, 0xADB6C7FB,
+0xFCC8300C, 0x53CB55A9, 0xC458BF81, 0x45522A13, 0x1B0EB13F, 0x529AD6AF, 0xA9FC1CEF, 0x93CE47A5,
+0x2375E080, 0xC361EB8B, 0x25C5400A, 0x9ED8AE25, 0x31227024, 0x9E3E2E6A, 0xD8FC244A, 0x6D7939C3,
+0x7CA99BF7, 0x725B55B3, 0xB0D51B0C, 0xD10AA1FB, 0xC188142E, 0x4E49460A, 0x971DF94E, 0xA00AE104,
+0x1D1C5B61, 0x20B13B1A, 0x32D787CC, 0x30F8FF65, 0x36C1F6F1, 0xDD2A979A, 0xA8EEF694, 0x2A537292,
+0xF3D79634, 0x0CEE3E57, 0x8CB51468, 0xCF9CB426, 0xBA8232E1, 0x6FAC5D54, 0x02EBF7F3, 0x14FD46E5,
+0xA02279DA, 0x20DE7EB9, 0x297668C4, 0x3950A64B, 0x438B6516, 0xDC899754, 0x2A4DA0B7, 0xFB022EA4,
+0xE1901651, 0xA9DE5429, 0x22D8BD34, 0x21421FC2, 0x39A45CE9, 0x9EA1F712, 0x564A2993, 0xB526FB33,
+0xC5451F69, 0x67CC6726, 0x9B3713D3, 0x033B21F1, 0xAF0DAD6E, 0xFD7B9066, 0x19145608, 0x5F868B3B,
+0x6F230CEC, 0x268BA4CD, 0x34E9B6B8, 0x276A8AC9, 0x8E30E3A3, 0xFBD79E72, 0x24F6C192, 0x4BDFA09C,
+0xC0F47089, 0x23DC6B54, 0x12637CD4, 0x6A0D69C5, 0x44F767A3, 0xF36E0671, 0xCA8C8659, 0x0DDECA20,
+0x3B6BB324, 0x29B5ABBC, 0x03CDECF0, 0x57F06121, 0x58AEEE90, 0xF454A387, 0x005BEEC6, 0xBCAA0F8C,
+0x8F5F2E61, 0x5DD28207, 0x88674A29, 0x0C98DE31, 0x24338D8C, 0xCF088A2A, 0x72B5C4FA, 0xE94A7546,
+0xD09C8607, 0xD64EDFAE, 0x0990B1B9, 0xD2A9032F, 0xAE0A2400, 0x1E0D8888, 0x436326A4, 0x32D7C088,
+0x5272CDA8, 0x1A75BA3E, 0x3C2A1D1E, 0x472514C4, 0x8BB0B575, 0x41589C2E, 0x9B5F657E, 0x96BC136A,
+0xF4475377, 0x917849ED, 0x37A525AD, 0x8D59BD8C, 0xFDD29214, 0x18B8AF46, 0x57525F87, 0x3B1DE2A1,
+0xEED994F0, 0x6C30431F, 0x6EA13AED, 0x013CCBB0, 0x374737BB, 0x070EB636, 0x761103D8, 0xBFB7FBC7,
+0x602D025E, 0xF7A007F6, 0x1B0588CE, 0x6C676C3A, 0x2969210E, 0xBBA122BA, 0x27E58097, 0x42E6CAEF,
+0x7C8BCC06, 0x686415CE, 0x936330B5, 0x530E96C1, 0x31249379, 0x1C49BD37, 0x90B122BE, 0xA1191575,
+0xB6F6B3D2, 0xF82E671E, 0x3CC88E92, 0x58D9ED3A, 0x2CC85E27, 0xF5505946, 0x4B9B367E, 0xD492870E,
+0xED8553C0, 0x0FFD1693, 0x18734961, 0x48D15B32, 0x75C5B4F6, 0x9FCD22D5, 0x9CCCE9B8, 0x44A54B02,
+0xC0CFDB65, 0xCDF8FF15, 0x56C0B84F, 0xC80E2BA2, 0x7CCCF8CB, 0x42BA6BD4, 0x392FEB52, 0x775A5A84,
+0xE55D8988, 0x5A0D1D5B, 0x19E72F65, 0x6496947B, 0x41902C44, 0x06C5005C, 0x928FE0E9, 0x29D11D8D,
+0xFBF2A5EC, 0x1C923895, 0x7F52DBF3, 0x51A16BD7, 0x60E48E22, 0xBA3DFCBB, 0xFDE1426B, 0x3D63FD5B,
+0xD349CB25, 0x0018A94B, 0xC9DDCC8F, 0x7C101661, 0x5A86A4E4, 0x4135BD68, 0x0E69BDE4, 0xF30C1273,
+0x825D5AFB, 0x7247FDFE, 0x78F8BDE1, 0x0B3B1888, 0xF219D9EB, 0x6392E7E1, 0x578B88D6, 0x7E96C01B,
+0x489C1916, 0x3FA77A6A, 0x4C7DA1B6, 0xF791AC7A, 0xE946573D, 0x76619D43, 0x99AF80E4, 0x6C83054F,
+0xBFBDD68B, 0x5D3A62AC, 0x83974FA2, 0x85BBA358, 0x45DD57FF, 0xF6DBEDAE, 0x8FEA813C, 0xE7699E6A,
+0xA1B2D3DA, 0x554EF911, 0xBC552D05, 0x069515D7, 0xF88959A2, 0xADDB36D6, 0xF932DFFD, 0xDE1BEF23,
+0x98D123F8, 0xA2B683FB, 0x8E88A2F7, 0x838C7933, 0x641C0809, 0x0EAB6364, 0xC79DF591, 0x4F73F4C0,
+0x35C81BFB, 0xCAF4ABC6, 0xBD341981, 0x4E56591C, 0xCA521619, 0x256B23B4, 0xA094AA0D, 0x9A2E39D0,
+0xD09B2DC0, 0xDB8B32FE, 0x50F5796A, 0x22EB2D14, 0xAD3C9F24, 0x3D69187E, 0xD8E1FDFF, 0xEC99C7BD,
+0x6542E468, 0x12C1C654, 0xAEA5B315, 0x8F139FEE, 0x99144D89, 0xB0650085, 0x1232F2BD, 0xDD4FD7F3,
+0x3D67DEBC, 0x3FF9EB9D, 0xCA2A6A2B, 0x9E45C6AD, 0x759E8CAC, 0x89E9505E, 0x3E1EED25, 0xBA3D6C02,
+0x93DEB55D, 0xB3B073DE, 0xE75E08B8, 0x4239743D, 0x5A2D9039, 0x097F1924, 0xECB912DA, 0x1A15A9B4,
+0x640933E8, 0x94FDB444, 0xDC0542EC, 0x7DF6957A, 0x2AA7D9C3, 0x00D6710D, 0x09ACF151, 0x2FCBDAA1,
+0x4A624FEB, 0x0706AF22, 0xDC4D2B60, 0x3A95C787, 0x81AAD582, 0x336DB225, 0x1D0DBB86, 0x9B53E7C0,
+0x16D5C773, 0x8909E1A9, 0x62172C05, 0x6F428268, 0xC667CE69, 0xE7D7F183, 0x1ACCF57A, 0xB90FDF85,
+0x1E9D93E1, 0x5246B0DC, 0x38524578, 0x07A59566, 0x3CE18598, 0x64978749, 0x55C8F304, 0x9E361B95,
+0xF5DD4879, 0x6F4FF673, 0x6D31AB79, 0x7D5C3C22, 0xE762CEFF, 0x704EA0EE, 0x47E0940B, 0x39AF77DE,
+0x7C8E7955, 0xF6D6B509, 0x69DD334F, 0xC8E5F10A, 0x12E1AA84, 0x820F442F, 0xDF308C32, 0xC04E73A5,
+0xED5572C8, 0xB96B70F3, 0xAB70ADFF, 0x5BA7561E, 0xC8E03ED5, 0xAAE29736, 0x6EAA2275, 0x14ED71C5,
+0x493686AA, 0xD7EFACDA, 0x95854A5A, 0x9C1A5393, 0xD231ABFD, 0xCDD97DA7, 0x861E13DA, 0x9B0350AB,
+0xD023FE9B, 0xB3F4DBAD, 0x4D7256B9, 0xBF93DB36, 0x31D65AF5, 0x87C84120, 0xDF29122B, 0x64324CE8,
+0x88B8303C, 0xE501336E, 0xE5774BD2, 0x2597C4EB, 0x8B41709F, 0x3B2C4933, 0xCFD0392D, 0xC778A7EF,
+0xB151F919, 0xF7FF484D, 0x3ED3BF66, 0x26D02AF7, 0x45B5B0F6, 0xBEDB4537, 0x31266A95, 0xE23326AF,
+0x1740F107, 0x3A3E8B04, 0x1F6D65EC, 0x9A558014, 0xAC3E87CB, 0xFAD638A7, 0xCCF75529, 0x2B0C3755,
+0x28328512, 0xF8183D1A, 0x75B41437, 0xD95CA9A0, 0x11CCE6B3, 0x95CE4509, 0xCDF35E60, 0x95514558,
+0x8277A1E9, 0x87BE39C0, 0xB7C97BC5, 0xE173E30D, 0x64FCFFA2, 0x5B7A88DD, 0xFBF229A3, 0x6678FD2B,
+0x829E4878, 0x676628B3, 0xD948C8C3, 0x8C517F41, 0xE5EF8FCF, 0x0469A13F, 0x066A05B7, 0xD2B57446,
+0xF7A05C2C, 0xF56EF2C6, 0x0AF351F6, 0x4A0DF5C8, 0xE32E81CD, 0xC4830735, 0x1DDA3EF1, 0x32B202C1,
+0x6AA018A0, 0xF6A8FE5B, 0xFF21269E, 0xA2615CBB, 0xA0FA1664, 0xC799A283, 0xC68D036F, 0xC808102B,
+0xC7FEA2B0, 0x96DF6F0A, 0xD42782AD, 0xC00533FA, 0x06D18F95, 0xB07A0AEA, 0x224FE723, 0x242C23A7,
+0xCF474863, 0xF711EB98, 0x297F248C, 0xBB338F75, 0x3B578854, 0x2242BEAF, 0xAA52CE96, 0x86A76D89,
+0xCB5423EC, 0xC816AAAF, 0xAF6A08D1, 0xAC009D08, 0x2FB1462C, 0xF0E62598, 0x47E60706, 0x6D7BC4FB,
+0x25C2F597, 0x19D6B1D6, 0x1052402E, 0xCAB6CDC4, 0x658136B7, 0x47946ED9, 0x62D3FD81, 0xCE6F3DAC,
+0x3E87BDC3, 0x775FF99F, 0x162D073F, 0x604EA83F, 0x5A076944, 0xB515056F, 0xB5418D58, 0xD958AA68,
+0x6A811972, 0xD9FDEA16, 0xFBAA932E, 0xB4278D72, 0x99CA36F3, 0xF4A8F8F3, 0x3C16CDBB, 0xF83C8B7A,
+0xF6F04243, 0xE6155EB2, 0xC8C2D813, 0x65AF1D71, 0x6BA455FB, 0x170B6F04, 0x087D2B68, 0x69989EC3,
+0x7205AF23, 0x65970658, 0x0F77B564, 0x4FD9CE91, 0x42FB3550, 0xB6080BA4, 0x7E9A53D9, 0xC4F6DBE0,
+0x77BEB339, 0x78412C18, 0x2A81A03A, 0x49CFDA5C, 0x9A62722A, 0xE2085761, 0xA7CDE305, 0xA783596F,
+0x750B8C62, 0x25E68BD0, 0x47212599, 0x4B439FBC, 0x1BF47FB9, 0x1522FC8D, 0x6DB2F959, 0x509AA49E,
+0x7D1D3622, 0x53F91D08, 0x32935AD3, 0x0E9AEC95, 0x9EBF9215, 0x6F0EEACF, 0x02BC6A28, 0x90230D32,
+0x547DE824, 0xED006E7C, 0x442DBD71, 0x61B641FE, 0xDC63432E, 0x6B6DD01C, 0x23F97889, 0x9DDFA18E,
+0x2C18873D, 0x1402840D, 0xA3149A56, 0x4CC4555F, 0xD1533803, 0xEDD05C24, 0x042D64D1, 0xA51F6065,
+0x3B3A02C1, 0x6F0FEC3A, 0xC0B06AD5, 0xF2D4E1C5, 0x5EDB0FEF, 0x5CAF7320, 0x092E789E, 0x4FA234A8,
+0x91AF0F13, 0x29E00E61, 0xF3809B4E, 0xA8753A68, 0x2703F32F, 0x019A8936, 0x1C598F93, 0x020932C2,
+0xAF4D53A2, 0x1DD63E42, 0xF888AAB1, 0xA1A9437A, 0x56AD96D9, 0xA4FEAB77, 0xFA338871, 0xCDEFB283,
+0x1B44F778, 0xE82DCCCD, 0x1E87F672, 0xA588F344, 0xB2DBE2C7, 0x2C24A0D0, 0xA9C3C082, 0x7F63243B,
+0x68D67881, 0xA4869916, 0x71668F2E, 0x4C5C92B4, 0xD5177F0B, 0x69496045, 0xDDAE0129, 0x4FF90241,
+0xDD4F2C89, 0x730DA05E, 0x305D0DF9, 0xEF8E1111, 0x6A3F5062, 0x6EE2D27D, 0xA25F832A, 0xBF3DC8CC,
+0x6C4E5C61, 0x888EC55A, 0xDD0A1911, 0xF0504ACE, 0x4B4139A1, 0xFE131A8F, 0x42FB1B36, 0xAF4107CE,
+0xC68C4DD6, 0x72D62776, 0xE3D36A26, 0x46020DF1, 0x17848DE3, 0x651BCB90, 0x9057F19E, 0xFD9A7CBF,
+0xA9D53882, 0xBA6D3AB0, 0xAD0D0C4A, 0x19F77EFD, 0x8AB94482, 0x8A50C903, 0x0047A43C, 0x709BD779,
+0x29C15595, 0x7C11479B, 0x8D236544, 0x7729CD27, 0xA953EA91, 0x515B2F8B, 0x55398462, 0x23227300,
+0x6262D755, 0x9D830867, 0xBDB88806, 0x546A0483, 0x9F1595EF, 0xD2BD7E6A, 0x91CA1405, 0xFD236F38,
+0x551B69E7, 0x54750D5A, 0xA4DC80CD, 0xA31671E2, 0xAE3F42E3, 0x6F13CAE7, 0x78A07231, 0xD515BAE5,
+0x18846FC0, 0x3E0A83BB, 0xC81739AA, 0x5EF52F6D, 0x3AB54CC9, 0xDEF34543, 0x03480819, 0x35256AFB,
+0x0C983290, 0x0E34EDD2, 0xC2839B23, 0xB613DAC6, 0x7683810B, 0xCF33F41A, 0x5ED1D841, 0x47E190E1,
+0xAA09E63C, 0x35BB090B, 0xFDB050D9, 0x3D7970C4, 0x3D3AB7A3, 0x1F134E92, 0xB10B8DC8, 0xAB36A361,
+0x4A582432, 0x0EBA1F40, 0x41C299FA, 0xCBCF07F3, 0x20F9542F, 0xC1912B25, 0xB37140BC, 0x21457DBA,
+0xE67456F6, 0x9A482FFF, 0xBD941CFC, 0xCD92FD3C, 0xA0EE3E0B, 0x91CE6103, 0x3FBA2916, 0x9DB85623,
+0xA9DDE015, 0x9D40B963, 0xA3E00664, 0x56878071, 0x9921AE33, 0x67B192BD, 0xD812C2FF, 0x83F3A198,
+0xF5D93310, 0xA1951760, 0xC5CE09C0, 0x19197BEB, 0xAAC8FC76, 0x30B26543, 0xACDC45A8, 0xD98ACC20,
+0x89DA80C3, 0x0340ECD0, 0x29EE54D8, 0xFB6400E0, 0x776FA124, 0xA7C88890, 0x37B74C8C, 0xC8E28E82,
+0x4E8D8857, 0xEACC569C, 0xDE977353, 0xC13C7678, 0x93E7A3A9, 0xC4DCD5FD, 0x1E96AB39, 0xC6A79E59,
+0xF07DB83F, 0xFD6E8BC2, 0xBD06572A, 0xF6EC0AE9, 0xCFA63F39, 0xB229D528, 0xF90C0F9A, 0xB5B7C0EE,
+0x5409D43F, 0x68F63CF2, 0xB4AF0E1D, 0x6B4FAFFD, 0x08C7E3E5, 0xAA74B957, 0x8B4EB73B, 0xA4EBF4C3,
+0xBB876632, 0xCC820F1A, 0xAD564EB9, 0x9156C081, 0xD3932643, 0x66CC0058, 0x21A7DC3D, 0x34502C3B,
+0x9B1408BE, 0x0A7AF2CC, 0x5798BBC6, 0x95CCFD73, 0xBA990A50, 0x5399A607, 0x74107F08, 0xDD34D3EB,
+0x49898BC9, 0x71358831, 0x79C5D4CF, 0x96D70969, 0x0246F22C, 0x0A19458D, 0x81959567, 0xC86E41CC,
+0xBC297346, 0x513017CD, 0x65246644, 0xACF9EA59, 0xBBE3530E, 0x3F044E4D, 0xFE35D7FA, 0xDD6F0265,
+0xFC383DC2, 0xFA0C5119, 0xBBBE55F5, 0x109B5D4F, 0xFA2BCDC6, 0xB8DE1F0B, 0x0B1E0E1D, 0x490BF9DC,
+0xFD6A5A6A, 0xCDFE25F9, 0x70216A55, 0xFA2B4E1F, 0x82952D43, 0x569FFFA1, 0x94EB9B15, 0x3351C2DC,
+0x1FBAA1DB, 0xB705EDD0, 0x8D068A15, 0x5673B06D, 0x6E8FE160, 0x8946A4C0, 0x4650C142, 0xAC2B717A,
+0x701A3C72, 0xCD9253A5, 0x805A1C92, 0x1859EA2A, 0x2871CCAA, 0xCD2F13BC, 0x93339A8B, 0xDA075F2D,
+0x1AE6A32A, 0x27C89599, 0x56C0D5E9, 0x427080BA, 0x315CBCB7, 0x1D355841, 0xEBF768EE, 0x762442D4,
+0x537721CD, 0xAC8A9994, 0x1854DA18, 0x0D96E04D, 0x5C16B8F8, 0xCB349C5E, 0xB3EA3976, 0x48D0FC43,
+0x229EC4AA, 0xC1E2472D, 0x4BA0643A, 0x610D7CD5, 0x511387B5, 0x079389FF, 0x968A75E3, 0x007DCF0D,
+0x408A0115, 0xFC761652, 0xE4ACD1B8, 0x49B1082A, 0xB6B52979, 0xD9F69B3A, 0x3D1FFB3C, 0x6DA6B845,
+0x75908CBB, 0xB3A6F665, 0xC8E82537, 0x596788D9, 0x1C920D40, 0xF3401693, 0xA3011A0F, 0xF9C45490,
+0xB2F15227, 0x28B2E3F6, 0x99E5EA7A, 0xF072B338, 0xB3774834, 0x073D4C19, 0x56D7C524, 0x19F59915,
+0x36C813B7, 0x276A31FC, 0x684EDE0A, 0xD78B8115, 0x3A159E83, 0x640765D4, 0xF77C5458, 0x19FB6DD9,
+0x454DC522, 0x9CF4757B, 0x56BDFD58, 0x496AECFB, 0xEB675D91, 0x927B6ED2, 0xE0A422E8, 0xB695922D,
+0xCC3C14F8, 0x24AA789E, 0x0B84BD9C, 0x2AF2BD02, 0x48AADA94, 0x0C81400C, 0x003981FB, 0x88191DDF,
+0x7FC02C05, 0xC3FD44A4, 0x6D0B7B65, 0xD6429286, 0xA2686C96, 0x65DC0C7A, 0xECCBF572, 0x97423977,
+0xF074258E, 0x6A86D494, 0x2CD3AB4F, 0x26D4DB84, 0x9F3B12DF, 0x60A0AE0B, 0xAC0E60CA, 0x5C530A3D,
+0x1CB3EE26, 0xED19BA56, 0xEECF130D, 0xD440A40A, 0x376B1E3E, 0xC5C5DB5B, 0x492895C0, 0x9101129E,
+0x4764F618, 0x6E4330BB, 0x1A23C38A, 0xF1E9FA3A, 0x7D62E226, 0xFB5C506D, 0x9F394906, 0x2E26B01C,
+0x0D3D918E, 0xC17CEDDC, 0x5242D9CC, 0x5E4A1742, 0xDD94E3B1, 0x83AFE58D, 0x29B7A77D, 0x0F80B3CB,
+0xC1483E97, 0x8D3F690D, 0x5902BD13, 0xEAFA0ACA, 0xD54B335D, 0x3165276A, 0x168DAE11, 0xC92A068C,
+0x4DA5E766, 0x8800738C, 0x184653A0, 0xCB124CF2, 0xF2899457, 0x8D0991AB, 0x6F887E05, 0x031DD841,
+0x32670679, 0x9EFED03C, 0x0B18800D, 0x4F968447, 0xD995CB60, 0x24F072D5, 0x4B0683E3, 0x557D1F67,
+0x8104852B, 0xB43F7E6D, 0x3804969E, 0x8BEEFE92, 0xBBAE0126, 0x785DBD89, 0x5555F260, 0x77B9291B,
+0x0A3D1A22, 0xFB747E7C, 0xEFFBFB88, 0x0BD81B4A, 0x7771989C, 0xED772604, 0x5E9A6C31, 0x55E8971E,
+0xD183644C, 0x55B0FAD6, 0xE10B0926, 0xFBE91A76, 0xF7112A03, 0xC367CE7D, 0x645952BC, 0xC6640B36,
+0xFED660D2, 0xA1F77AAB, 0x9DD389CC, 0x353B60FA, 0x06D3DB20, 0xC043EDD1, 0x48C03309, 0xF7976C58,
+0xC3998414, 0xF1D9C131, 0xAA32C6B6, 0x9750F59F, 0x4C1412B0, 0xD49E8912, 0xA8074C96, 0xD32EF3D6,
+0x98B8C3FF, 0x91555149, 0x3DDAF04D, 0x8C6474C4, 0xBB0A7886, 0xF2276495, 0x089F386D, 0x6F61BD0D,
+0x7CF0067F, 0xEBB91226, 0x8413855F, 0xAAD4A021, 0x0F9997BB, 0x3D0F0E50, 0x0BD89D3C, 0xF440013D,
+0x98EDC2F8, 0x9E90507D, 0x7073FE68, 0x57C6D663, 0x04136D94, 0x1178C3F9, 0x59B6871D, 0x66B47E91,
+0xC846C904, 0x57658E71, 0x91CA53B9, 0x725731F1, 0x8F0B725F, 0x818360A1, 0x54B06641, 0xA44857DF,
+0xFF4C3866, 0x5F2C4292, 0x04193207, 0x829680E8, 0xC69FE0DA, 0x5B7BB5E9, 0x6C340196, 0x05B5DFB1,
+0x31265B26, 0x501D2D4D, 0xD872F573, 0xCECB52F6, 0x98655667, 0xCA5EA49F, 0xD16F79F8, 0xAA1A32CC,
+0x6D10DB18, 0x862D488D, 0x5FCBF658, 0xBA0043A3, 0x10BCC1E5, 0xD0D78B23, 0xF5A2CA4C, 0x80A2FFC1,
+0x8C18CE87, 0xCFDF9E8C, 0xD275FE7C, 0x64C65010, 0x61ABAE89, 0xAB0F376E, 0xF6727620, 0xF86581EB,
+0x61B95115, 0x92FD88FE, 0x3877DE01, 0x4C1B0AD1, 0x6E397F47, 0xDB58729C, 0x0F924D47, 0x254E8D05,
+0xABD9AA67, 0xD6225DC9, 0xEED6BA29, 0x1E4A599B, 0x855602D3, 0xBC029C4C, 0xF09DB1B2, 0xC86AE01E,
+0x82241DBE, 0xEF7C5742, 0x1C8E1D8A, 0xA303787E, 0x8B5822BD, 0xDF71110F, 0x9D464CED, 0x05228FCA,
+0xF28E6338, 0x8EE69010, 0x14C7AAD7, 0x1AAB51AD, 0xEE4659AD, 0xBBA378E7, 0xC898B6F9, 0xE2F4C331,
+0x379B0D39, 0x31E4F1FC, 0x150E0338, 0x9AD5AE73, 0xC5B8C32F, 0x368FF01A, 0x1F084281, 0x909798E8,
+0xBF7D7D4C, 0xB92880DE, 0x1E4A2641, 0x020B44D6, 0xB1723B49, 0x9C167A39, 0xD54FCB11, 0xB17BF8DE,
+0xD1C1B121, 0x7FDDB630, 0xF9B04B08, 0x9AE3655E, 0x1F6B2152, 0xCE777420, 0x212E7998, 0x92D14853,
+0x9D068A27, 0x0F6C30C2, 0xFEF24216, 0x05AF0136, 0x88468632, 0xF234FCBA, 0xAA485EF9, 0x82D1D14A,
+0xCBF66595, 0xAF1315AA, 0xC816165E, 0x28059125, 0x578D0E9D, 0xD2D26B01, 0x67913FE7, 0xA1FE3A8A,
+0x4B27478E, 0x02E87586, 0x1C09C67A, 0x2BBBB475, 0x0C7768E5, 0x6E820303, 0x1608D8DC, 0x487BE9DA,
+0x729BCB22, 0x41F80907, 0x15A9D11B, 0xB1CA6071, 0x78FB8865, 0x215DB6E8, 0x7A5443A6, 0x59500893,
+0x004C3BAC, 0x48B99912, 0xDA537AB3, 0x52A3F3B0, 0xC9BDF7D2, 0xF094DDE1, 0xFB76A85D, 0xD9DF5441,
+0x010521FC, 0x56F3C658, 0x55A04730, 0xC1B30A94, 0xA6812901, 0x511F1F80, 0x642B6EFF, 0x8B7596C3,
+0xCE1731CA, 0x22928B1B, 0x629E41CB, 0xE0CAE6F1, 0x85584C45, 0x6CA696E9, 0x0024B027, 0xF33A93C0,
+0x67145E51, 0xF44FF3B5, 0x60539180, 0x4D86968F, 0xE3FD73B8, 0xF4E401C7, 0x2B9AF1C3, 0x2A402A60,
+0x775AA0B6, 0x352510E6, 0x60A4F7A1, 0xAF457108, 0x2481D084, 0x5A6F1EC9, 0xB4D2624A, 0xFC26DF4A,
+0xECA14108, 0x602FE4AE, 0x26AC03FC, 0xEC4CB272, 0x9F47E9E5, 0x4E4F9111, 0x73ED6A96, 0xEBC8F799,
+0xFAC9AD0A, 0x10F0CAB7, 0x371286AD, 0x861944A9, 0x75831483, 0x5CDF3C29, 0xB5DEA1B0, 0x5728420B,
+0xEDB68F1A, 0xA4CE95D2, 0x90D7F834, 0xAB14F67C, 0xC6A163E5, 0x22837C6F, 0x1C970D79, 0xBB56EBCA,
+0x2C30424A, 0xBCCFFBAC, 0x66234839, 0x884963D7, 0x4A4D5624, 0xC596EEFE, 0x218A3801, 0x79F25018,
+0xCEE05C5F, 0x650E457C, 0xB68525B7, 0x2E70BDBA, 0xF8D2EDC5, 0x158D9BA9, 0x27734D08, 0x688D2BA0,
+0x116D6C71, 0xDF4EBEE4, 0x342F36F8, 0xE5ABB3B8, 0x7E040921, 0x60B0376B, 0x50D0CEB0, 0x808F7CB8,
+0xA456B803, 0xBA533FDE, 0xC1B7A5EE, 0xD0E63050, 0x7814BFD5, 0xFB27E726, 0x8C556B18, 0x3B902E20,
+0x667FC950, 0x4D86C611, 0xABF570F7, 0x591A10BE, 0x6D04A22A, 0xB3CD06C1, 0xB46687BC, 0xAABC3451,
+0x7FB87753, 0x1D1D1C55, 0x7630FF6F, 0xEA89DA88, 0x1769A316, 0x71CB5469, 0x71714D35, 0xDA476975,
+0xB80519AF, 0x157B369B, 0x0F1B736F, 0x1049A4AE, 0xD3F0909F, 0x8EFD2FD6, 0xC3FDB34B, 0xA8569B82,
+0x463D18B9, 0xDB5F9564, 0x7C598616, 0xC65673BE, 0x6640C007, 0x51314EA9, 0xBCD5C061, 0x332ECC9A,
+0x59D0279B, 0x9B196D99, 0x9E07BFE9, 0xAC1A476D, 0x2AAA5B26, 0x31F08749, 0xA5C51BA6, 0xAB23F880,
+0xC210CA51, 0x026D795A, 0xDF69BF56, 0xE520E0E1, 0x62B58855, 0xC285AFDE, 0xA97FCE55, 0x1D15A264,
+0x528A431D, 0x965FEAA2, 0x02C3016B, 0xAB41A4C8, 0x13B2C114, 0x3D183A85, 0xDAFF3589, 0xDB47BD59,
+0x10924D5B, 0xF9B09EE2, 0x5DED4581, 0xD9E22C0E, 0xD0E92F8D, 0xFE906C4A, 0xDD5EBA2B, 0xF93BF96D,
+0xB53A6976, 0x1C8968CC, 0x2A917F39, 0x0305C9AB, 0xA67AA501, 0x6B319BF7, 0xA563694F, 0x7A1D3BC6,
+0x1754E830, 0xC9BD60B5, 0xE6A111A4, 0xA38764FB, 0x0DB4E910, 0x15263B67, 0xFCDF5CCA, 0x4419D4CB,
+0xA7CA24C8, 0x29D6F05B, 0xF709DA59, 0x940C105B, 0x0453F144, 0x98520819, 0xBCE28E9A, 0x90165AFC,
+0x8A87FCEB, 0x2A47E54E, 0x555B4B3E, 0xA33DD7B9, 0x5B716AD4, 0x5DB1C9FD, 0x64592908, 0x6E4D1384,
+0x1D1033EC, 0xDF058D82, 0x64EF27BC, 0xFE00F028, 0xD4B4B0E2, 0x83F30C58, 0x0197BDAA, 0xBB06BF86,
+0x9F1F035D, 0xC2D96634, 0x3EAF8099, 0xB5F8C0A9, 0x44B99326, 0xD058C116, 0x1ABC56BE, 0xBB756BB6,
+0xD1A79E35, 0x935B4CA2, 0x7AE3D2F7, 0x77018A9F, 0x8504E214, 0x830A7553, 0x874A3DE3, 0xB27FA654,
+0x0A30E306, 0xDE46E0AC, 0x71377E07, 0xB1092973, 0x951AF6F2, 0x4B2E304C, 0xF73BED84, 0xA2720185,
+0x804D93D2, 0xE3AEC74E, 0xAC381CBF, 0x0D4E2C6D, 0x49A3C6B4, 0xB99E255B, 0xF2434510, 0x290D0E12,
+0xBD34E466, 0x8455EC27, 0x21D9B20A, 0x4C50DCD4, 0x62CAB2EC, 0x9891E243, 0x7422C2A1, 0x460F60FE,
+0x88C3D841, 0x8FADFBA8, 0xCE396A16, 0xBA806459, 0x86FFD35C, 0x33F77F51, 0x20D1F3AF, 0xD5947026,
+0x90003B9B, 0x0BF1AEB3, 0x3E48F924, 0x179CB3BE, 0xF5A9BD43, 0x32393925, 0xFC2F41F6, 0x66A3B801,
+0xF50C30B1, 0xD6EF0BFD, 0xF458A6CE, 0x456A2E5C, 0x758AFB03, 0x61CFB3DE, 0x998E8909, 0x0FC0D7B7,
+0x60323FE1, 0x7BD177B2, 0x11299856, 0x89DC426B, 0xB62C0F7F, 0x1565A1FE, 0x0DC965CF, 0x0601A897,
+0x9FE51A10, 0x57F6C2F9, 0x69948A19, 0x81A06A44, 0x5F48F639, 0x6D1FA421, 0x2929E763, 0x7DE88979,
+0x19A8DA81, 0x3A93C6D9, 0xD9CBF56B, 0x7973EE49, 0x72E92108, 0xEB267388, 0x92D29215, 0xC265692E,
+0x6557FB86, 0xC5E9D67B, 0x5C9C3EF8, 0x8CD43B91, 0x68E9C4CA, 0x8E61B630, 0x890D8483, 0x648C6051,
+0x48189B10, 0x255F7A8C, 0x29C518FB, 0x020DA068, 0x0ADA8CAA, 0x21F56C4E, 0x27B555AE, 0xBA5F9567,
+0xFF06CB54, 0x3DEDD424, 0x9261A326, 0x03A98B1F, 0x388198DA, 0x293742E9, 0x171F6535, 0xAC7E9BF1,
+0xFA81A729, 0x6DA00CCC, 0x88122C99, 0x7746ABFB, 0xB1DFBFEA, 0x1DB875AB, 0x24520DB7, 0x18E32AA7,
+0xE7B39C81, 0xA7876E1E, 0x36FFEEFD, 0x4DDD6B9D, 0x1E4FF3CA, 0xED273162, 0x8AAC40B9, 0x20FDCB72,
+0x79F59609, 0x65A32DA1, 0x22943F94, 0xE62F3EF6, 0xFE30CC12, 0x63CCD59D, 0x0E73DBFB, 0x2207DB24,
+0x259C052C, 0x3CEDE035, 0x7C5CC26A, 0x5168343C, 0x9A26F520, 0xE6C0B0B4, 0x6BE1D305, 0x4FD8D07A,
+0x5450AE12, 0x09C17BB9, 0x1B5A0ADE, 0x18D942E1, 0xFBCCAE63, 0x094DEBC6, 0x21953671, 0x38F5A945,
+0x8A1671AA, 0xC0BE358E, 0x11B23A1E, 0x6CEDEB30, 0xDC328B7B, 0x34CF4BF2, 0x0D2145AA, 0xC86B8A2E,
+0xD2DA2DF5, 0x627254E9, 0x7C79C97C, 0x41E08166, 0xEDF42198, 0x7BF0B224, 0x7A2C97BD, 0x73392988,
+0xAC0252C9, 0x34C295B0, 0xDB377353, 0xF5C81C24, 0x5131092C, 0x5B0EFFA3, 0xAC4FD5F7, 0x4440C630,
+0xF22E8B0E, 0xEF87A34B, 0xF6DC6150, 0x2C7B05B5, 0x24D1D235, 0x3D83E644, 0x4A3736A5, 0x49FA1F30,
+0xFFEB785F, 0xEA1F8450, 0xC1129879, 0x5EFA59A1, 0x20DCAF7D, 0xDE360519, 0x52F7E98F, 0x2DBA7845,
+0x6E3B3603, 0x429382CC, 0xB25ED0AA, 0xBF377FFA, 0x9F4D4D46, 0xBA804811, 0x66018F10, 0xAE35A7F2,
+0x31DE67C0, 0xA0752695, 0x5A0EF737, 0x358DDA04, 0x693A15FC, 0x6B773826, 0xB5E9D232, 0x283E9778,
+0x76F9590F, 0x5AB29116, 0x637AE0D8, 0x18B7E325, 0x6285953E, 0x3F662E14, 0xE28B7B87, 0x2F1869CD,
+0x41013677, 0x0C652FAD, 0x77469594, 0xFCFBCEB1, 0xAC41D95A, 0xDE8BBD00, 0x2244EBA0, 0xE613796F,
+0x69F1CB2B, 0xF9B377E7, 0x748A4393, 0xE3B747F1, 0x003CBA21, 0xFF415B1E, 0x0F91EE06, 0xEAFFD7E1,
+0x2C0B913C, 0xAFC35015, 0x290ED873, 0x61DCB91B, 0xE4535223, 0x600D6F76, 0x90A6A15B, 0x09AB5426,
+0x85065262, 0x40DE4B72, 0x77FA6ED4, 0x7873E98E, 0xD4116C9F, 0xCEE0EAEC, 0x4213E812, 0x4C8DA4A9,
+0x8CA63F8F, 0x71F2D167, 0xC9DFE6E4, 0x89B91578, 0x73235E67, 0xAF0F6F92, 0x7CD6D67C, 0x496DFDD2,
+0x1CB28DAE, 0x2B3A143C, 0xF3E48DCF, 0x9B635323, 0x1F135873, 0xA95593CA, 0xA80AC13E, 0x396605CD,
+0xE805F429, 0xA8574245, 0x5E1106B2, 0x7A4C1F4F, 0xB49A3E6F, 0xE48BBBCE, 0x79C4C453, 0xF5FC1B50,
+0x972432AF, 0x7937AC0E, 0x0A58B7BC, 0x1065E2FE, 0xA59F0DDA, 0xC09A0D60, 0x406B0A01, 0x864B9C23,
+0x7E30496B, 0xF9E827AC, 0x36235000, 0x339657AB, 0x053919BF, 0xC48CC701, 0xA64EB3D8, 0xAA20A148,
+0x965D1982, 0x16757FE1, 0x7ED969C3, 0xB4723D2B, 0xBCFA333C, 0x3E1A8F55, 0x2DE90343, 0x0A4491FF,
+0x2804A4A3, 0x2114405D, 0xA09EB517, 0x840B43E6, 0xD7C6F909, 0x840B4C9F, 0x413771C5, 0x4CB74CE3,
+0xDC279D1E, 0xDAAE6C1B, 0xFD52DBE6, 0x632F3014, 0x949CEA1D, 0x99C3E56A, 0xA6B6C90E, 0x6FC82FAE,
+0x793C69EF, 0xED43D5F6, 0x27893F51, 0x923C3192, 0x3B563E20, 0xB236F8DA, 0x651BEDDE, 0x1AC20FA4,
+0xF63DBEEF, 0xA5D9D0C5, 0x6D6A9B42, 0xE87CCD02, 0x06869101, 0xD9FB9E0D, 0x8FDC6D44, 0x4610510B,
+0x03EC0906, 0x23BC0D41, 0xF19ACE2D, 0xC1F30102, 0x903C48E8, 0xB2F18887, 0x3EF9A790, 0xC1DE4138,
+0xD63E15CB, 0x13B921F2, 0xE184087C, 0x3A88B4E7, 0x67C5C7B1, 0x95878276, 0x647E0306, 0x42E800EF,
+0xDB3F28E9, 0x92D79809, 0xE4B91812, 0xB5616E3A, 0xC93C8499, 0x9608912B, 0x0F8D1ECB, 0xFED6AC28,
+0x07F77734, 0xD0589B1F, 0x1878FED5, 0xC3BA7A6E, 0x3D591483, 0x75E7DE1C, 0x65910241, 0x504DBAD0,
+0xB8AE56DE, 0x2438C8A2, 0x7B26C92B, 0xA6850111, 0xC845ECBB, 0x25CE75AD, 0xC0746262, 0x3B31DCA8,
+0x14C8FC33, 0x2A3F9E6E, 0x77596AF6, 0x216CF8DE, 0x1A6425E7, 0x1D800E4B, 0x8866D15A, 0x1F09A73D,
+0xD6C9E166, 0xC03A4259, 0x3D87718D, 0x2F2E9E97, 0x9B260A61, 0x5AC66A89, 0xDE364A5E, 0x626F7C93,
+0x480A7A7E, 0xD4C60F81, 0xDAE2FF13, 0x2AABE78F, 0xD1105AE6, 0x56F9EED3, 0xAD0E2D2A, 0xF198DDE5,
+0x527799F9, 0x957E244B, 0x0F806124, 0x9B28DA6E, 0xCCD95B65, 0xEC84B10E, 0xBE0B5F32, 0xED2FCBA9,
+0x1BCF6245, 0xE00B3362, 0x3BE4C48D, 0x24F0F9C0, 0x9C76DE78, 0x5F65C0B4, 0xFD7F0ACF, 0x87E895D6,
+0x2ABA7D19, 0xF33D9D72, 0x4CF032DC, 0x43055B8D, 0x5367F501, 0x04A4CBB4, 0x455C88E9, 0x7454DA46,
+0x0DC5715E, 0xDE1FCCF1, 0x5731ADA1, 0x7891B959, 0x76F4D335, 0x8F8BBC02, 0xD06153D4, 0x5B4DF240,
+0x87966E9A, 0x1326047E, 0xBD9E3101, 0x77D98295, 0xB53B1405, 0xA4DFA458, 0xDCDFCD32, 0xA2452A24,
+0xA79CE63F, 0x29C328BC, 0x750F8B65, 0xBDBBB49D, 0x5996695A, 0xE3D5115C, 0x6DAF0DD4, 0x992A8F04,
+0x1F22EF09, 0xAF7AE617, 0xA4B59F7F, 0xBD84F3DC, 0x4B6A29A4, 0xD23D43F0, 0x10E54877, 0xF0CC3F70,
+0x92B42E8F, 0x6ABB4BAB, 0xDF9B25EF, 0x2A7BE5A9, 0x6B71B06A, 0x403574DB, 0x6F70B0B2, 0xA53EC89E,
+0xEEFF8B97, 0xDA96BC10, 0xAF81B41C, 0x3EAE0F7C, 0x527F1B7B, 0x33C6C613, 0xE54F0F59, 0xC6029853,
+0xE4E9C411, 0x2B8548C9, 0xCEEA2762, 0x55BE8D10, 0x34E82A1B, 0x950D2022, 0x966F9923, 0x7E31EC5E,
+0xA073542A, 0x1E428768, 0x036D4154, 0xD9EFB408, 0x1735C5A0, 0x34C22B70, 0xBD68B3E7, 0x11B92DAE,
+0xE8101CF1, 0x37794FA9, 0xF76C98A6, 0xB4F18B60, 0x9243B052, 0x8FEFD973, 0x2350EEE7, 0xDBADA0F8,
+0xF19F55B1, 0xF3FFFC60, 0xBFC37037, 0x05EB4E45, 0x66B0704D, 0x4C285F0E, 0x4F223417, 0xCBCA3EFB,
+0x8883B274, 0xB81BE8FD, 0x145BA63E, 0x07875EB2, 0xE618A64B, 0x5A0264F4, 0x19CA6074, 0xF9887D07,
+0x3FCDCDF1, 0x611E8CC2, 0xDF253F0A, 0x92A681B8, 0xD028BE82, 0x935D0589, 0x18C913F6, 0x9AFD62A5,
+0x103C683E, 0xF96EDEC3, 0x1F181AED, 0x255B3A79, 0x02AF7EE9, 0xE8271353, 0x52A27C1C, 0x5B9FAE9C,
+0xC434173B, 0x3F0FCBE4, 0xC0E03D56, 0x39F26D2C, 0xE03D3ED3, 0x9BAD5F25, 0x3B0A9436, 0x08DA6FF2,
+0x0436DA6B, 0x3287FF91, 0x32CF9D83, 0xB386D9B9, 0xD0CCBB61, 0x029AE73B, 0x5E9FDEE1, 0xE927F97E,
+0x92CC4138, 0xA0354C6E, 0xE5096F7E, 0xF8286A87, 0x608A2B57, 0x3B824869, 0x5AFCB410, 0x7AD99F9C,
+0xE519AC4C, 0xB59328F8, 0x92956293, 0xEDAFE17F, 0xD1E89CA3, 0xB16C0D48, 0x8030AEB4, 0xC09076EB,
+0xBB07B105, 0x8A5BA94D, 0x284FB953, 0xE0444EB2, 0xAED1BAE9, 0x18A73D88, 0xB7224B7F, 0x8A33F058,
+0x86A96186, 0x98D23F98, 0x11E8CA47, 0xE1746AA7, 0x3D4C9887, 0xB6C5696D, 0x54F560BA, 0x98F1C39A,
+0xFCDFCCA9, 0x4F4C7F9B, 0x8BEC4F81, 0x48331B27, 0x4D971AE8, 0x0739EBBD, 0x20B92D27, 0x8FFD2319,
+0x277A3EC1, 0x48A3BFE8, 0xFCEB4D15, 0x5F74B95C, 0xC2CB16D5, 0xE9EAA5FA, 0xC5104175, 0xAAC97492,
+0xD3195374, 0x9263CD69, 0x90336EE7, 0x9EA47D06, 0xE12006F1, 0x036213D4, 0x8C88D124, 0x9B0F4A80,
+0xAADB746A, 0x277851B0, 0xEB449264, 0xAEC58495, 0x541BC7E5, 0xB7CC2F8C, 0xD018A160, 0xB68A097F,
+0x6426D9DB, 0x5725E526, 0x46752334, 0x6C69DF07, 0x61028AB5, 0x047606E3, 0xDF417615, 0x0B64BF9D,
+0x38E20222, 0xBF01C19E, 0xA458ED2E, 0x9DAB08E7, 0x4101D4D0, 0xC81961A3, 0xDA71B4E0, 0xB361F239,
+0x2F65D86C, 0x17347281, 0x810E83BB, 0x636AA128, 0x033D0568, 0x11BA7592, 0x1FB20041, 0x0B45E8F5,
+0x6E6CAFF8, 0xCF4D23E3, 0x2017C383, 0x211BCEF9, 0x1CFEDF09, 0x63A52CBA, 0xD2D1AC90, 0xA1ECEE7B,
+0x9839F663, 0x8F4B5BD2, 0x9FDB309C, 0x710096BF, 0x23E11044, 0xA08A9C18, 0xD9B0DCDB, 0x8DC5E407,
+0x8FF9018A, 0xEA2F683E, 0x45562206, 0x2BBA13D1, 0xCCF198A6, 0xECED8386, 0x4D12C762, 0xECBC9C6F,
+0xCB6A51AF, 0x25543E05, 0x0D2D26A1, 0x27986A34, 0xB1E729E2, 0x67633F96, 0x64118BAA, 0xBC51942F,
+0xB895ED68, 0xAE4EB198, 0xEC979F5C, 0x30496530, 0x800B213C, 0x2DF75228, 0x20573401, 0x7907E416,
+0x1CD01D41, 0x8BFF1832, 0x9E58AB56, 0x396D8387, 0xBE258DC0, 0x23909F15, 0x33A4A403, 0x951AFE82,
+0x957EE94B, 0x8C659DEC, 0x94405F25, 0x05419F8A, 0xDEE402F8, 0xFF007AC1, 0xC26A2900, 0x9A562276,
+0xE71BFB44, 0x8463C27E, 0x07C786E8, 0x86942879, 0xD6DEF782, 0x334133DE, 0x40865808, 0xC4293616,
+0x817CA370, 0xBBCCA77B, 0x1F89AC77, 0x0C097FF3, 0xA4F07B6F, 0x6AA8EF8B, 0xBEDCB06B, 0x23A82C6E,
+0xBFE20766, 0xC8FCB469, 0x073AB625, 0x8458DC88, 0x57D711C7, 0xB60C25A8, 0x3B0A9958, 0x0A834D8C,
+0x4B8EF433, 0x8C278A57, 0x6684C869, 0x079239D5, 0xC9636376, 0x87796DF5, 0x3DBE42C8, 0x433224AA,
+0xFBA08ED6, 0xC8875C64, 0x6D30C2E4, 0x11FAC4E8, 0x3DD95DE3, 0x8633C04B, 0x7331ED98, 0x7449DB21,
+0xF3DDB531, 0xA4499A6C, 0xF14391ED, 0x04BC7FF3, 0x4824A19A, 0x74FFF737, 0x59864F9C, 0x1F05270E,
+0x426ED320, 0xEA56520C, 0x3F363B94, 0xF65DEA06, 0xE5A6BE9B, 0x24398BE6, 0xA4722783, 0x38141458,
+0xCF060D10, 0x473DAE52, 0x76EA77A3, 0x7F794D02, 0x99D7B5E4, 0xD1AFBDD8, 0x6EB86915, 0x7BF66866,
+0x08F56B3C, 0x58FABAF7, 0x6E6138A0, 0xF66640E0, 0x7D11F246, 0xCD0F3072, 0xC1E8BDE4, 0x79B4B66C,
+0x3D1DA80F, 0x28BA7A9F, 0x134FE2A1, 0xB59B109D, 0xBC1A6E2C, 0xF5E2FF5A, 0xC8349457, 0xBB67F820,
+0x2A6AC4BD, 0x4FCCC069, 0x388401FE, 0xF794DAB6, 0x955245BF, 0x2A5CF186, 0x8103582E, 0x80F03187,
+0xE5E76E25, 0x83A754AB, 0x698739C1, 0x64EA7638, 0x31250B1A, 0x5E52D173, 0x2BFABA57, 0x699981F2,
+0x087FB892, 0xE23BC173, 0xA60BAA9C, 0x92145315, 0xE9FE01B4, 0x91310014, 0x17B55E48, 0xF8F7FA4A,
+0x9E1F40EF, 0xFE6687CE, 0x92394F38, 0x02DD9AE9, 0xD8975261, 0x326FDBA8, 0x057F9743, 0x8B5939C0,
+0x0EAF6EA0, 0x22D96902, 0xBEE82656, 0xDCAA8F0E, 0x001C1A26, 0xEB4D0941, 0x754D0F30, 0xFE224E12,
+0xC812C753, 0x45EDDEA0, 0x6485D247, 0x65185784, 0xB101EA74, 0x61320D73, 0x16F39A3B, 0xE3543FAE,
+0xA3537390, 0xA7247035, 0xA72D03B4, 0x30F56387, 0xC44E281F, 0xFCEEF4F2, 0xA9BE55AB, 0x0CF7DE13,
+0x5E532DFE, 0x8C27ABE2, 0x72FCD7A9, 0x7E9C5A06, 0x786412E0, 0x9C20F8B4, 0x131AF437, 0x9794D577,
+0xCB770C37, 0xA3B9A5B0, 0x4504141A, 0xDFE62965, 0xFA8EA16C, 0xB0A8A605, 0x87BEF7EB, 0xA3E56361,
+0xC934C04D, 0x5504E585, 0xE5F6F9EE, 0xEED04C7B, 0x83CAFA65, 0xBF95B7E6, 0xD15CA2B1, 0x5E0FDF53,
+0x15F7733D, 0xAEC15295, 0x771E5591, 0xFBE35A1E, 0xED6345D6, 0x54604CC0, 0x6D3DC34E, 0xCFCF5C9E,
+0x2CBF47E4, 0xE51E9543, 0x5B6E79DC, 0x6052D7C1, 0x738E8048, 0x17EFDC2B, 0xEA17CE79, 0xC72C787B,
+0x0C5F1042, 0x585657E0, 0xA9F9B5DF, 0x32DD94DB, 0xDB54A54F, 0xBF548130, 0x98956A51, 0x146B877E,
+0xFCCF3719, 0xD2C24DB3, 0xCB65B1B1, 0x2DDF8DAC, 0xB39B5EBF, 0xDB9E4A15, 0xF0B4BC80, 0xEF0DD4AE,
+0xB67734D7, 0x5675A198, 0x4814BB42, 0x10E806EE, 0x9468C11A, 0x2975ED23, 0x7A5617A1, 0x3ADAFCF1,
+0xE67AE272, 0x417DEFF3, 0xC2634FCF, 0xB0B75C12, 0x93907F35, 0x60C89FB1, 0x24669A3C, 0x70274D4C,
+0xC6D5B71B, 0x41C89A8B, 0x54CB931E, 0xCD88A095, 0x40C235DA, 0xE772B854, 0x0271DD09, 0x42973FAF,
+0x4032362C, 0xA34BAA62, 0xA0ED9370, 0xB68B21E3, 0x69940E6D, 0x9FEAAEEC, 0xC84E642C, 0x5C61CCFC,
+0x79BC2CE1, 0x15F6A425, 0xE9936854, 0xA60FE76D, 0x90090373, 0x2975CCE2, 0x9A5830E8, 0x0078E9D0,
+0xF6C0EDC7, 0xAACF05E8, 0xF5A192A3, 0xCD520E86, 0x14376299, 0x51CDB221, 0xA6AD3B2B, 0xEDC82758,
+0x90B16648, 0x49503CEB, 0xEDA52673, 0x9BAC1948, 0x46072ED4, 0x3147C1DC, 0xF3DAC94A, 0x6C0B5864,
+0x62B67FBA, 0xD598B87D, 0x4AA4A035, 0xFDE686ED, 0x6FDDD28A, 0xAEBC8166, 0x656D81BD, 0x412DC97C,
+0xFCA73082, 0x01DD4053, 0xFE07C5AC, 0x6A02CE12, 0x76DFB702, 0xB9FDE04E, 0x1FF4F933, 0x9DCF9695,
+0x7AA6ECA3, 0x9C4CFEA3, 0x8F010A83, 0xE524A88C, 0x557332A8, 0x6ABF07AC, 0x2A94EC32, 0x1C63B93B,
+0x193E7700, 0x8EA74DF1, 0xF1D2A5A6, 0x232C49CF, 0xE73D9D2A, 0x5C520F7E, 0x4CE868F7, 0x3C1588E1,
+0x420C5ADC, 0xAA75A439, 0x63616E05, 0x027295E7, 0xBCC58E5B, 0x3EF619C5, 0xDCF39F4B, 0x86A892C5,
+0x94AD4DEE, 0xAD67FF4C, 0xBBF235AF, 0x16231772, 0x04F51E04, 0xC07C3759, 0x53AE71DE, 0x54D6D680,
+0x235AFFB6, 0x2380B69E, 0x8A313848, 0x9C24F44E, 0xF273587C, 0xC1B58755, 0x108A4067, 0x09267E15,
+0xAD834FE6, 0xD78931DC, 0x2CC51526, 0x1FBA59E5, 0x8478163F, 0xD6349865, 0x45C0007E, 0xB431C458,
+0x4360A3AA, 0xFA0E1C71, 0x5AEB9669, 0x8C318476, 0x7C194BA0, 0x64F3A7B6, 0xC058BFFA, 0x31E90EFB,
+0x0557B3CA, 0x8D35CA4F, 0x0347114B, 0xC0C59FC3, 0x750FA794, 0xD67FDFA6, 0x1BEC8281, 0xB9722D7B,
+0x37B6FA11, 0x8133B179, 0xC694E38E, 0xFDE8F6C9, 0x8DF18F90, 0xA4B2B0C8, 0xB186F43B, 0x7F651B66,
+0x3A0E00BF, 0x8B1D0CD2, 0x1454C7FC, 0xE737845D, 0x77BDB7C4, 0x0DFE0AD5, 0x3444C54F, 0x03C5FA31,
+0x06F924B9, 0x06BDE2C2, 0xEE58F44D, 0xA39CF9E9, 0x889A3C16, 0x98CE32BF, 0x7CCC9C4B, 0x143FC19E,
+0x7C186474, 0x37B3D7B7, 0x167AAFDA, 0x2A95686D, 0xC5A12244, 0x83EF4752, 0xBF7D11FD, 0x49FECEF1,
+0xD6732818, 0x8064F12D, 0x6C12ADF5, 0x8D7E8B65, 0x7475DAAE, 0x55B1E3E3, 0x8B5AD171, 0x57A87164,
+0x38ACFEE8, 0xD5F267BE, 0xCB7EF34D, 0x9E20B8C3, 0xF1835AD0, 0x7C65C24C, 0x8D94D9B4, 0x4EDF473D,
+0x403F55AE, 0xAFBB2349, 0x3F5BBB9B, 0x4227C072, 0x5BCF789F, 0x96904984, 0xC2EE16BF, 0xC1CB8CED,
+0x86F9ED0E, 0xC638048E, 0x2D883774, 0xC495DDD1, 0x4504D244, 0x9DB41B24, 0x6C1C3CF8, 0x1FFEAC8F,
+0xAC37E680, 0x63B26D55, 0x011CF079, 0x1047859B, 0x772938AB, 0x33CDEC89, 0x62D815B0, 0xA5075E50,
+0xCA98DAFB, 0xF8C4201B, 0x4C7D111F, 0x785D2376, 0xB6A96E9C, 0x6B216066, 0x2DECF9B4, 0x8254B0BF,
+0x7E3754DB, 0x31559FE0, 0xFEE1D6F8, 0x290227F2, 0x1FB5EA98, 0x4B94140B, 0xB0242143, 0xB7C71399,
+0x6C1472EA, 0x43191179, 0xC26A1297, 0xB8A50660, 0xB809BA07, 0xE93F993F, 0xAAE17518, 0xC02B60EF,
+0xA89B4860, 0x3D32962A, 0xA0F80F28, 0xEEA7E72A, 0x4A240EAB, 0xA494B67F, 0x7B033F34, 0xBDC2EAF0,
+0xFA8D4263, 0xCC083200, 0x84C2C60A, 0xC1FC2270, 0x0695ED82, 0x42BB3925, 0xDC37BB7F, 0x2CC47B6B,
+0x0F1622EE, 0xAEC1CD73, 0x219FAC0A, 0x0A643317, 0xD9CC109D, 0xB4F1D282, 0xEC67B41D, 0x21B40082,
+0x1C0D73F5, 0x97B8E272, 0x3DAB12D8, 0x41598AC0, 0x67E11DE5, 0xCB05DBED, 0x5DFD7051, 0x383CBF69,
+0x7CBF0C7A, 0xFDC2EEE4, 0x57D8C0F5, 0xF2E18E8D, 0x9337191B, 0x0701E6F8, 0x94A35D95, 0xF844D9B7,
+0x2E6C16D7, 0xDCC3B120, 0xF45A5F18, 0xA6F06E87, 0xDA1E4282, 0xAE01E8A6, 0xB338F392, 0xC0B14122,
+0x4D2F9164, 0x3D18DFED, 0xA1D0C5EE, 0x2081CB9D, 0xAFADA8A7, 0x9299A97C, 0x79973F1E, 0xA660099B,
+0x32F70558, 0xA4EA1F49, 0x5B2965F5, 0x764DC85B, 0xA0AE89C7, 0x49D1226F, 0x9588ADBB, 0xABA78883,
+0xD52B4265, 0x2037F9D2, 0x56186463, 0x855975A5, 0x6B57ADD3, 0xD7D7AE76, 0xDB9EBE25, 0x10F9B66D,
+0xF6D87C43, 0xF17B14CC, 0x3BB2218C, 0xA57596F4, 0x1408CF9F, 0x661C1DFA, 0x9D5591B4, 0xEC0A42C4,
+0xB560367F, 0x0E1E2FFF, 0xEB2A57BB, 0x502C41E2, 0x765690E6, 0x444A0C05, 0x6E7047B1, 0x6A25C56A,
+0x7F899410, 0x26C910AA, 0xD17A08F3, 0x3B3EDAEB, 0x7FBB06A2, 0xF5FA9E59, 0xEC06162F, 0xC59ED914,
+0x19F36B94, 0x4962F843, 0xA279F7EB, 0x4148F36B, 0x0A0C3F1E, 0x854979F8, 0xF00FD66F, 0x73056727,
+0x5F323D97, 0xAD40BD48, 0xED820156, 0xE8AB1C1B, 0x171529B6, 0x7F762DA8, 0x0E175C09, 0xAF935890,
+0x6E54F25F, 0x7227CACA, 0xB10DF480, 0xF557F137, 0xD7D56F6A, 0x6746105A, 0x9CA4B391, 0x6C2B7197,
+0xB73B39F3, 0x30EC1405, 0x3D93B66D, 0x208F81E3, 0x5CE1FB82, 0x51E18F2D, 0x5AF8A45E, 0xE38A8356,
+0xA919AA34, 0xDD76953A, 0xA5AE738A, 0x8639CEA5, 0x7FB9D2F1, 0x26250A73, 0xD564E084, 0x8E326147,
+0x0974C7E7, 0x19ECE321, 0x6F670B92, 0xA7FD2F00, 0x5F768FEE, 0xF5BAD267, 0x72E19280, 0x487A4B5A,
+0xB114FEC0, 0x59FE6765, 0xDA956C27, 0x92E4E8E2, 0x53249EE6, 0x06BB2001, 0xC670945E, 0xED9A3C7B,
+0x40FF2579, 0x35EF7A15, 0xB05A3558, 0x4A2B2320, 0xE22EEC59, 0x63A14EA2, 0x8A38FA42, 0x39173E9C,
+0xA537986A, 0x9BBAEE31, 0x5544CEF5, 0xF495E23B, 0xF664469B, 0xE5080C82, 0x598AF1A1, 0x66795799,
+0x279BA207, 0xE0CB45E5, 0x5710E1AE, 0x497B1CE7, 0x6AC3F9E6, 0x035C1F86, 0x07EABDD7, 0xF454EF8D,
+0xAC4A1AC5, 0x9289CAB8, 0x43A9A6A4, 0xD111B8AE, 0xBDA3D130, 0xC96AD932, 0xA02CDA8A, 0x4ACBD448,
+0xB76A8044, 0xA331F02E, 0xE23B3709, 0x5FD183CE, 0xBD31B0E3, 0x85E39F18, 0xA1389A28, 0x9BEBBC0D,
+0x88809D84, 0x94FA754A, 0x4AECB79C, 0xEB69DA07, 0x11E1B585, 0x8A5AFDF0, 0x38EBFBC8, 0x31A2A0F0,
+0x9327A04E, 0x335C3495, 0xDE9B7F95, 0x767CC815, 0x4637FF59, 0xA67B5368, 0x9700B694, 0xC34AEF82,
+0x5731C158, 0xA7955122, 0x1ACF8346, 0x95AFF80B, 0xD67DE2B8, 0x7A874B67, 0x20C9FD00, 0xF04933FC,
+0x38FFBAAA, 0x5DFE5D43, 0xA37165AE, 0x2DA5A127, 0xE2E147ED, 0xE71B9491, 0x0AE89DAB, 0x7DAA7651,
+0xB8115A1F, 0x5660B638, 0x547270FE, 0x6E1A4FBC, 0xBE73407D, 0x38088AF8, 0x80E4E9AC, 0x6F3A71A3,
+0xD2602C2E, 0x88355E3F, 0x3EF5E155, 0xDFB6D4E6, 0xEF257B38, 0x4FFE4A2C, 0xAF673F12, 0x6E23887E,
+0xE2BF8DC0, 0x5B171C7E, 0xAD8EBF12, 0x6E5CA829, 0x48BCDC1B, 0x54329B96, 0x223AB3FA, 0x93343108,
+0x81F4EEE8, 0xA17D9849, 0x2B399728, 0x1B3547C9, 0x6583C408, 0xF17E71B0, 0xEEE8EF82, 0x822470D9,
+0xA1A7A775, 0x689D07A1, 0xCBBA0C75, 0x697526F8, 0x2BDF2C31, 0xBDC09863, 0x417BE57D, 0x52D7BD95,
+0x3B5A9040, 0xF3BDC992, 0x3556FB33, 0x4C382807, 0x753141BB, 0xC843D45C, 0x5D1475CF, 0x83106E77,
+0x553C9968, 0x55C83180, 0xEC75ED0B, 0xAA3EDCAC, 0x0DD4495E, 0xB39A61BC, 0x32A7FC78, 0x364115D9,
+0xB090D947, 0x31D36A17, 0x67FFEA2F, 0x3582BD77, 0xAFD63A04, 0x359D7F2F, 0x22F86E16, 0xF5CCFB61,
+0x3B34CDCD, 0x5B0B0BB9, 0x03AE8D7A, 0x602E7406, 0xBAD844AF, 0xD6B31978, 0xCF29D692, 0x3B77845C,
+0xC308FCF8, 0xFC49899B, 0x84E58155, 0x056179C9, 0x30DB561F, 0xB9F13532, 0x9571BCCA, 0x80EAAD24,
+0xB3410CEB, 0xA5FAE3D6, 0x7B4B1672, 0xF7BD85D3, 0x822260CA, 0xEB2B6639, 0xB7BAA4B3, 0xF26AE412,
+0xA6854FF8, 0x46F2DA6E, 0xAA5BEB2F, 0xB7E5AB7B, 0x3A1FC275, 0x905042C0, 0xFE531D6A, 0x8ECEE882,
+0x4E0F8509, 0xF2842F96, 0x80AC8438, 0x51E649EC, 0xE7FE7518, 0xE2D0A7F8, 0xF3C9A4C1, 0xE960A3D9,
+0x15DB1FFA, 0x3504F93E, 0xB470559F, 0x7DFB4D5F, 0x6D5BD803, 0xF0D5FF63, 0x6F47C915, 0xE32CFFC6,
+0xB38DD3C4, 0xE4AA0166, 0xE6854956, 0x4D072E4A, 0x44B40BC6, 0xC0B4CDE7, 0x9BDA6BC8, 0x69B501DD,
+0x35B648DA, 0x3427A073, 0xC146FA66, 0xDE3ED911, 0xBC025271, 0xE0EC69DB, 0x6770A791, 0xD688F52D,
+0xEDAF7881, 0xF8583873, 0xE9488954, 0x99E48B70, 0xA8CB00DA, 0x49BC5593, 0x9AC4F505, 0x96E4E8BC,
+0x960699EE, 0x3197E45F, 0x6505148C, 0x4453A794, 0x7F4F5F68, 0x8B8658DB, 0xD0D025E3, 0x4DDD0E04,
+0x23BA3289, 0x16D700B4, 0x0A658389, 0x15F4F657, 0xE500827F, 0xB0186CD5, 0x387ED359, 0x01C11803,
+0xC927F2EB, 0xBD3990BB, 0xD31B24FC, 0x9FAC4979, 0x6BB4C7F0, 0x8AF06C75, 0x81210183, 0xA10C7397,
+0x7D380DAC, 0x289C1ADB, 0xB15BF05E, 0x08E0ECA0, 0xD25FCC86, 0x9B03BB24, 0xFE025200, 0x582625F2,
+0x347A444C, 0x43537513, 0x6A867017, 0x8122A832, 0x0EF7FBD5, 0x518A8570, 0x56E66B0A, 0x100BEF2A,
+0x0AE51E05, 0x23A59325, 0xFE59A743, 0x1ECFB4ED, 0x3DE882BF, 0x6483A52A, 0x9F65CA9F, 0x324EC29B,
+0x6081CB05, 0x289838ED, 0xC20A463E, 0x20F46E0F, 0x7DF438F9, 0x5F1E9941, 0x14112F3F, 0xD4E7A7D1,
+0xD160343B, 0x52753B2F, 0x73560E39, 0x3BE29A4C, 0x085F2391, 0xF12355E9, 0x6E9D9F44, 0xDBC26FFE,
+0x09704623, 0x44073E66, 0x3BA24918, 0x19B48E90, 0xA4DB6CF1, 0x52D7AE1B, 0x6AFEC182, 0xB664FED1,
+0x3AEC52F7, 0x333EB295, 0x78BBB0ED, 0x87A8951F, 0x8D458825, 0xC431C602, 0x77D20A6D, 0xFE066F9D,
+0x6A2F14AE, 0xCCC7DCAF, 0x93387220, 0x7D91023F, 0xFF36BD09, 0xEA83799A, 0x572CC0B7, 0xF0C04329,
+0xAE51AADE, 0xA3A7025B, 0x8C7DB896, 0x205A4B53, 0xAFEF4E5E, 0x6FBD7FB3, 0xD98448C5, 0x46DDBFC3,
+0x1B425CAC, 0x2FC74D53, 0x2194444D, 0x0DD845C7, 0xEBAEEA0F, 0xA0F9A5D0, 0x962F7399, 0x4D5E5ECC,
+0x782C9462, 0x530896FA, 0x7EBFC44E, 0x5CA4FCF3, 0xF51FD23F, 0xCCD367F8, 0x62A44413, 0xCE5F2A9D,
+0xBFC63107, 0x9E216A3A, 0x2EAD13DE, 0x13BA6A64, 0x3B6A083F, 0x24D8D8C8, 0x6EFC8A98, 0xDB4B531F,
+0x923AAF87, 0xED19023F, 0x7FA194B7, 0x09647B61, 0x10C12E56, 0x7F57890E, 0x59DCDE9A, 0x3D2C3C6A,
+0x74C1300D, 0xFE98F830, 0xED485DA2, 0x013ECE3E, 0x9B44C443, 0xB5652447, 0xD1998258, 0xEF11F79B,
+0xD3243497, 0x15B24860, 0xABE38B54, 0x4FEE0E32, 0x67390224, 0x545B523C, 0xC2E883FA, 0x6A9D3B23,
+0x279EF878, 0x94C085BA, 0xA45FB106, 0x4898E215, 0x8256DB9E, 0x2297FFFC, 0x6F9EA57E, 0x2E2DC42F,
+0x35F1B82D, 0x1D7E7AA1, 0x816F892C, 0xA13B7C5F, 0x0E52C7AB, 0xE920949B, 0xF7634E10, 0x9E2E5C1B,
+0x28A22142, 0x5247E9C9, 0x2693D8EB, 0xDB5AD84A, 0x5F67EC32, 0x11F67676, 0xA086A74B, 0x19386BDA,
+0xAC0D5EFC, 0x6D2E4837, 0x78B1A728, 0xB13262EB, 0x814D6B5C, 0xF2FCE5EE, 0x9AF269E2, 0xB0F4BC26,
+0xDDFB08D3, 0x1B2FCE47, 0x76ECA9DE, 0xDBDEBC12, 0xD7DCCD71, 0xD1B8CA73, 0xF8CB5277, 0xDBE90A3A,
+0x29ADB904, 0x18CA2D0B, 0x83D6B916, 0x842D4113, 0x01ABAA3B, 0x49E1B41A, 0xE463992F, 0xDE731B20,
+0xCE567F2B, 0xAAAB71A6, 0xFE36BDD9, 0x265BB4E3, 0x78320DA6, 0xBFBA2AB3, 0xC5971F55, 0x92F2D09B,
+0x191B43BA, 0x060377BF, 0xD893219C, 0x8E592AD3, 0x902C5D63, 0x5B222600, 0x37E1FEC6, 0x213CC8DE,
+0x2949DEA1, 0xA23277F6, 0xFABBC4E3, 0xFCC44D00, 0xBCDF4066, 0x86D0925B, 0x55F0C523, 0x0A72279E,
+0x7F39513F, 0xE3CCE909, 0xC860EAB6, 0x485D7A40, 0x5753F2A1, 0x245CD88F, 0x02B534C0, 0x33F3D923,
+0x733F2880, 0xBDC6CDC9, 0x33ABF7A7, 0x96C22C8A, 0x7D709B32, 0xBF504979, 0xD440C634, 0x2B69DF76,
+0xEE3BC992, 0x9CABC4E4, 0x1335605F, 0x5CC9DC5F, 0x1657AF6E, 0x805FB905, 0x2190DEED, 0xAD0FF25E,
+0xF0E3E584, 0xED17E588, 0x42813B90, 0x5154E823, 0xCC32FA5A, 0xEBD1EF28, 0xE4470D7F, 0x30702E65,
+0x6DDC92FC, 0xB2081EF8, 0x3F010F7C, 0xBF54380D, 0xEED24502, 0x029304DC, 0xBE757AD0, 0xA012AEEC,
+0x767D4FC0, 0xD97C464E, 0x5FDBA169, 0xCF8286E3, 0x65DF14E7, 0xAAAD0C8E, 0x39654EA8, 0x530D943C,
+0xE9ED3476, 0x4DC195F8, 0x5E480DC2, 0x735B95FC, 0x5A105AAF, 0x551AC316, 0xF50BF9B7, 0x7FD6D539,
+0xF81463BC, 0x3BB6FE59, 0x7C63D982, 0x9FCAF79B, 0xFBA86DB3, 0xC51722BF, 0xED643CF4, 0xCDA17B41,
+0xB1FAA7A0, 0x884A59DD, 0x7EA13569, 0x0C2A02C1, 0xF2A80FEB, 0xFFD9B048, 0x04B03A05, 0xC57B450D,
+0x74F130BE, 0xD24DC8A2, 0x056B250F, 0x3EFA5305, 0x69BCABED, 0x2D671571, 0xDB36D53A, 0x4B84501D,
+0x6A23A25C, 0x37026537, 0xDA1F6197, 0x8BEDF995, 0x33798D9A, 0xA575F615, 0x59462AC8, 0x47C2272B,
+0x73AF76F4, 0x690B475C, 0xCB07DAE4, 0x92B8072A, 0x7AE7890F, 0x7EF871F5, 0x48226FCF, 0x2DAD7A71,
+0x863594ED, 0x341A17E8, 0xA9A786EC, 0x80D8DB7E, 0x9CAE948F, 0x13A43841, 0x7F22A8B1, 0x497DC250,
+0x05DAF15C, 0x1F88CC01, 0xD3C487A6, 0x17023B75, 0xCD0FCB72, 0xEF9818FF, 0x052663E1, 0x409380FB,
+0xCD9D3DBF, 0x08810414, 0xF52C80E9, 0x5C77E9F1, 0x1AA75A34, 0x3810C037, 0x22FBEA16, 0x06C8CB2C,
+0x19A8A533, 0xEB63C6E8, 0x4CAA85BF, 0xDB8D9412, 0xDD282B9D, 0x91DD143F, 0xF380FC94, 0x5293ACB6,
+0x470FDD9D, 0x3A11C4C5, 0x89E276C6, 0x8232628D, 0x70902E4A, 0x7139211B, 0x73631D97, 0xB04DBE41,
+0x173F034C, 0x907760AC, 0x2FA28BE3, 0x297DC1CB, 0x4F1759FD, 0x0FA9EEC4, 0x071E2909, 0x3B61ED52,
+0x57371188, 0xEB8665C1, 0xF520AF05, 0xE85CF849, 0xCDB95853, 0x80DCB620, 0x13C9927B, 0x5F49C4AC,
+0x6E254F4A, 0x8E75F4C1, 0xB1E41699, 0xA4093101, 0x81833280, 0x33DBC6C6, 0xC15BB9BC, 0x6484C5CF,
+0xDBF2B9F9, 0x07050F5B, 0x79326AA5, 0x31B6665D, 0x4FB4513C, 0x731C2801, 0x58F2090D, 0xC502B289,
+0xD780FFC4, 0x6489915B, 0xF93AD8D6, 0x96228286, 0x3FD4F0B3, 0xD3E7C623, 0xC6AD2584, 0x2AF7A02F,
+0xAEB3A9F6, 0x062797B3, 0xA76321FF, 0x1E7CC30C, 0x8268FB4A, 0x31F17B06, 0xD4DED8D4, 0x06895E63,
+0x5C8688E3, 0x6A5E885A, 0x82086BC4, 0xF4C19276, 0x64612C1D, 0x7E46F698, 0x7E091628, 0xE3222447,
+0x9EF5065E, 0x08491F76, 0xCEE658F6, 0xE4113BBC, 0x0CDA7C60, 0x6F46E13C, 0x7F04637F, 0x99890318,
+0x28BC85E0, 0x51FC742A, 0x504A4DA5, 0xD4BF5858, 0x5005BAA1, 0x77260C37, 0x3707988B, 0x5F3B5206,
+0x1346BE44, 0x74719ABF, 0xA07CB168, 0x47011B65, 0x4986FB38, 0x56276DDE, 0x1282CDBA, 0x5EABB0BD,
+0x7842D7E6, 0x534FDB3C, 0x7AA88612, 0xD886A755, 0x2E304B5E, 0xB51586CF, 0xE2DF9F08, 0x66DE376D,
+0x5AECD482, 0xEDDF24F9, 0x7447FA5A, 0xF4C42AE7, 0xA1B4FAD3, 0x1F34A686, 0xAC312B96, 0x8E19A4E6,
+0xBA71F861, 0x011F5DB3, 0xE31F8C71, 0x505EF6A0, 0x659A4074, 0x7B15A5F7, 0xBCDD5114, 0xCD84C120,
+0x3C5BBA36, 0x95E82097, 0xFCB1B8EB, 0x1EB80A30, 0xDB1C43E5, 0x9649124D, 0x357A4820, 0x5D0B20B4,
+0xDCA33652, 0xABEC786B, 0x3CD1A297, 0x95D66574, 0x63EC9306, 0x70185874, 0x9D477BFB, 0x12100003,
+0x3DC62078, 0x7D084665, 0xC5B253AD, 0xD2212A1A, 0xAF23618D, 0x76150BE3, 0x49D736C2, 0xA35DB578,
+0xF15DE874, 0x2BD9ABD1, 0x3897E248, 0x49039144, 0x5EF20F5E, 0xD9A27537, 0x91B7BD1E, 0x5A624697,
+0xCD6998C7, 0x7A2B8583, 0x82D5ABF7, 0xF8B1EAC6, 0xC0EDF224, 0xA3E71ADA, 0x3FB867A9, 0xD49EF97F,
+0x68974361, 0x9DF621C8, 0xC2CF18E8, 0x4CE66907, 0xB7F2CD92, 0x6CED3AEF, 0x7DB7E12D, 0x0D1B0FCC,
+0x488E99EA, 0xC9CC5398, 0xD6883A4F, 0xD8AB5651, 0x9C6D84FB, 0xA3BC9905, 0x42326D8E, 0x3A579025,
+0x7B567A35, 0x56746707, 0x1235E990, 0x4889818F, 0x6CC8D187, 0xE569324A, 0xC710A05D, 0x8E918D39,
+0xAF103B1E, 0x6E7CFC2E, 0xF4AAAC37, 0x0A52F145, 0xA633EC08, 0xA54093CE, 0x1E038198, 0x7D7FD586,
+0xED09C4D2, 0x68E84806, 0x7F088C1E, 0xF9CFC544, 0x2CA6A335, 0xFCF9BD47, 0x048D7E96, 0xE5D43AC4,
+0x14B850FB, 0xF58CC880, 0xDC576FB8, 0x2867F782, 0x454C06FD, 0x285DC89A, 0xCD23CA41, 0x5A5939F7,
+0xA8459596, 0xEF3F0E58, 0x01BE008F, 0xB46F556E, 0xB4BC6106, 0xDEEB2138, 0xB7224F91, 0x6DFF2328,
+0xC00CF169, 0x99E5B618, 0x52DDD898, 0x81E198C5, 0x91BF9B6F, 0xB446E436, 0xB975C7F1, 0x34448D45,
+0xBBC1B34B, 0xBEBF30D3, 0x25382A9F, 0x9BACEBF2, 0x4DCDDD50, 0x55C74F1C, 0x3AF22791, 0xD4E927D9,
+0xCA6C2B22, 0xB26769B2, 0xADFCC976, 0x9C12AAD8, 0x7F88F8F5, 0xF9A005D0, 0x5B6CD72F, 0xE9DC849B,
+0x0652AD5F, 0xCD1A704E, 0x44DA2DFE, 0x9AB1C1DA, 0x132F148A, 0x0E3F8C26, 0x720FED53, 0xCBD2FBBE,
+0x5AD60EC5, 0x0A7A8C12, 0xB6FDD0ED, 0x72861D28, 0xA364DB7E, 0xB83C717A, 0x5223B479, 0xBDCE9F34,
+0xEC1A6069, 0x17778456, 0xAE081B99, 0x7F30667B, 0x9237E17E, 0x4A9037DC, 0x2B78607C, 0xF611F338,
+0x31E61A36, 0x13B5F6CE, 0x89EE1123, 0x3FBB84CC, 0x4A626519, 0xED639292, 0x0DC0BB2F, 0x7F6E614F,
+0xFCA13FB4, 0x3E4CA95B, 0x937468ED, 0xD9C9C23D, 0xF6FC07AC, 0xC637CB36, 0x2F89C852, 0xF60F601C,
+0x3136B88E, 0x4311FEF5, 0x7B4AEAA4, 0x75BC98F7, 0x49ABC114, 0x78747197, 0x8A70F569, 0x54F870C9,
+0xC1445278, 0x92DA5E53, 0x0EB03743, 0x60A980DA, 0x9F9DC7B8, 0xEC3B5814, 0xBE044523, 0x027F77FF,
+0x54083B65, 0x6DDB4A88, 0x4E9CCC25, 0xC283B484, 0x9AE79A8F, 0xB5FA1A5E, 0x0276A23D, 0x223FF71D,
+0x7573C7B3, 0x2EF581C3, 0x84B3B0CB, 0xC943F03D, 0xF78383BD, 0x912FCD02, 0xBFF7BB5A, 0xFA774118,
+0xADE9D694, 0xD53F3C9C, 0xFCB7866D, 0x0266A8D1, 0x5D48EC6A, 0x14CBAE92, 0xDC14B147, 0xFD6047E2,
+0x8DEFE390, 0xBB536305, 0x733AE85D, 0x761421BA, 0xFE36826C, 0x3F09AABF, 0xCD49EB30, 0x12F6D43E,
+0x74E221B5, 0xB0335731, 0xF138D390, 0x27BCF092, 0x3B355B77, 0x1F89246A, 0x181F746D, 0x7E2A0C37,
+0x8C77C124, 0x7F411BCA, 0xB3F69D2F, 0xF35F3CD0, 0x9CFEDF54, 0x4C01EFFE, 0x0810EA37, 0xA9711E3D,
+0x31C58F23, 0xB3ED90B8, 0x298884F2, 0xDC374F01, 0x3AB192C3, 0x1835B714, 0xAF5800A6, 0x0E5A5536,
+0x52BE0AED, 0xDEDC5DEE, 0xDCD61382, 0xA3D42FA9, 0x9C1899BE, 0x1072718B, 0xA3D2D6F1, 0xD8B7DB2D,
+0x2DA35872, 0x8FB1C0D3, 0xEEDC057F, 0x01365C2B, 0x3006DF0D, 0xBCF0FF81, 0xA8C27461, 0x03D32DE8,
+0x8AD620B6, 0x3BE44996, 0x1DAFC3F7, 0x6EDACEE9, 0xA3B2444F, 0x9F14541B, 0xB3C23C4C, 0x94483385,
+0xDE8BE765, 0xCEDCAD0F, 0x92055D70, 0x0E6C10D5, 0x998AE353, 0x7D3B91AE, 0x7AAEE98E, 0x302114CE,
+0x213CBFDE, 0x6C6D094F, 0x27CB2403, 0x10E49184, 0x7F1EE84F, 0x0FE8C5BF, 0xFAEFBAA7, 0x20D9B8B4,
+0xB38DCAF1, 0xD718796E, 0x8E1F9435, 0xB041F170, 0x3FAD7ABA, 0xA4598FBF, 0xC9B4CBFD, 0x5B41DE51,
+0xD88B6C94, 0xAF05DB78, 0xAA6BB33E, 0x0FADFC4E, 0x9CA380DE, 0xE6FD5D05, 0x50456506, 0x4F5FEA57,
+0x8BC510FF, 0x86D1A38E, 0x3BBD5A44, 0x3EA61B9B, 0x33330F59, 0x5A48E3FD, 0x7E823996, 0xAAF152E3,
+0x702ACDEF, 0xC2C28F50, 0x9B44E1B1, 0x3127536D, 0xC8215C6C, 0x0072CD1E, 0xCED0FE5A, 0xCE791398,
+0x6CFEC619, 0x024EA53E, 0xCAF2757D, 0x2D7E5852, 0x7E44BC2F, 0x40B08D12, 0x37655441, 0x1EB07961,
+0x6E06FF39, 0xC7F7B68F, 0xF4219155, 0x1C32EDB8, 0x9C93973E, 0xF3CA93F1, 0xE465A1AD, 0xFBE1035A,
+0x436B85E9, 0xE6F54803, 0x384665F5, 0xAF6B0000, 0x004F3B08, 0x3F4C3E78, 0x70E63431, 0xDF185B7C,
+0x55FD8537, 0x50A0590F, 0x11244E7E, 0x7D8759F0, 0x31FC2700, 0xDB846718, 0x4A7812C0, 0x31C64734,
+0x735FFE69, 0x0BE302BF, 0xD9F93CA6, 0xF2A7A71B, 0x9EB563E4, 0x8989217E, 0x637DDB5F, 0x506AFC62,
+0xC4EE625E, 0xB9C636AC, 0x660C8D53, 0xBBC3A246, 0x26277AF8, 0x977BDCC4, 0x7F3BFE47, 0x69796D0B,
+0x9629B8EF, 0x46C6516A, 0xCCF89B08, 0xA5BAA661, 0x87CA6757, 0xE1AD4D22, 0x359D5BA7, 0x9A121FB1,
+0xE4F39581, 0x06DEE4F4, 0xD62751BC, 0x27E4DEB3, 0x5B9374D8, 0xF19C37BD, 0xF5C1B3D9, 0x413A57D8,
+0xE3A2DA6D, 0xE2B86FFF, 0xD5E6B0DA, 0x7477FFC4, 0xDEF1E02F, 0xF6DB3E4C, 0x88771070, 0x6A2633E8,
+0x159857CB, 0x294E4F71, 0x5F8BE5FB, 0x97107365, 0xCACBA4D4, 0xA6676638, 0x439A5BD1, 0xC083E3DA,
+0x417EBBD5, 0xA3A6D03F, 0xCA77257E, 0x40925442, 0x7391DCB9, 0xF1856061, 0x8C58298C, 0x5A00E42B,
+0xC6A88682, 0x336DC704, 0x1C38BC7A, 0x9AC0F42D, 0xEAD31592, 0x86B178D1, 0x328A4AAB, 0xC90E24F4,
+0xC9626527, 0xCC74FA6A, 0x81338BFB, 0x793D1DBA, 0x7F2A1C00, 0xC7A4F4FE, 0xC9FBC77F, 0xF42D7F84,
+0x518950FF, 0xAA0954F7, 0xF43880B2, 0x0F93E1E4, 0xB3A0D3A9, 0xE550C3BB, 0x293F1FCE, 0x1FCBD21D,
+0xDFB0EB30, 0x2E7DB5E9, 0xF6917105, 0x69EAC50B, 0x371AF8BE, 0x2E3E8938, 0xF4F6A919, 0xF94ED9E6,
+0x2751B0FE, 0xC60E244B, 0x856BCA3D, 0xC5519014, 0x7C4C4533, 0x37659371, 0x210BDD92, 0x5EE1C373,
+0x7D327C29, 0x006C04AF, 0x37567ABA, 0x5CB270F8, 0xB4A3A649, 0xE3940702, 0xE5771AD4, 0x44A8C9F5,
+0xB056870E, 0x0D924A40, 0x260EB604, 0x593F6E96, 0x4CC4704A, 0xC3154761, 0x412F4497, 0x69508E3D,
+0xD17F8821, 0x7C457FCC, 0x733FFB6C, 0xBB77477E, 0x961D13EE, 0x5AFCE245, 0xFA13FC43, 0xAC19BE95,
+0xC6CA120C, 0x7C603C43, 0xD2537D1D, 0xC7B23440, 0x18E669D4, 0x044CE9FB, 0x18AF0A95, 0x7EFCD99F,
+0xECF65E95, 0x08D00245, 0xCC206758, 0xCC2DD380, 0x03AB386A, 0xD95E50DE, 0xFA30F4E9, 0x206FB63D,
+0xC4C9D1A3, 0x39699796, 0x8EF4F1EF, 0x0A9EE614, 0x34F48AFD, 0x9C099ED1, 0x5E85E0CA, 0x4E91F855,
+0x2D7255FA, 0xD3C6C71E, 0x4EBFE08F, 0xFCC49647, 0x232798CD, 0x4745DA62, 0x6F8076DC, 0x948518FD,
+0x9641C986, 0x8C58CC87, 0x39FF43C7, 0xA5FE74A2, 0x1217A78C, 0xF4B6618B, 0xB57433EB, 0x734C75D3,
+0x62E6ACA8, 0x443DDA35, 0x62269D27, 0xC7574DB7, 0xA94C0D6E, 0x818BE86A, 0x6A652722, 0x1DB3A96A,
+0x692F312B, 0xDDD8FAC2, 0x53BD44D9, 0x2B907E1D, 0xA9489411, 0x54F91CC4, 0x326D4089, 0x21982811,
+0xD0B12B22, 0x5DD0A714, 0x3E91AC4B, 0x2723BCD6, 0xC144C09F, 0x75B2CCB0, 0x889BBE99, 0x895A520B,
+0xDC175D36, 0x2B7F8A7E, 0x0EBB2E9B, 0xCC51A086, 0xB2CA096B, 0x149EE399, 0x1C13EA89, 0x0902264C,
+0x8382F90E, 0x098E2145, 0xA03089F6, 0xEBD0B751, 0xEB6CD577, 0x86404ECF, 0x3EAED86D, 0x06F1A2D7,
+0xDBD17189, 0x18D211CB, 0xC5A2B230, 0x2AF5D855, 0xE2064134, 0x42B90C4D, 0xE5080400, 0x9067B6BC,
+0x1D00FF23, 0x8ED66535, 0xDBA41D15, 0x101D1708, 0x67FA32D7, 0xEF7CD264, 0x38C5C33D, 0x5DDE167B,
+0x6AA598F7, 0x4982D562, 0xC10F2496, 0x40C3F0F4, 0x52A205E2, 0x339C25FE, 0x99016613, 0xB66D58F8,
+0x62E30736, 0x71DBF3BE, 0x952D2C4B, 0xF108FEBD, 0x4135DBE5, 0xA985CD4C, 0xD933B0BB, 0xC6E9ED27,
+0xC8B771F3, 0x53FC6884, 0xA16CAEB7, 0x396C4C26, 0xEA598779, 0xFFCFC5F8, 0xF3913B1F, 0x938CD6AC,
+0x51D24D9C, 0xC3B6C81B, 0xD9E57812, 0x552C487D, 0x689DAD45, 0x1CEE594C, 0xA40C3D0A, 0x8F4442D7,
+0x3D5AA3D0, 0xC5D3E20F, 0xCF53347A, 0xED835BBE, 0x90DE7754, 0xA21DD586, 0x57C6CA31, 0x198217AC,
+0xFB2BD8F6, 0xD93CD029, 0x883BC81B, 0x7F23E96E, 0xAAB64834, 0x45B62A4C, 0xE146E40A, 0xF1CF5313,
+0xECE03B39, 0xAF43D14D, 0x2B40A933, 0x8145B5AC, 0x4483C371, 0x0A3CA63B, 0xACFFFB4E, 0xC9EA8C62,
+0x11C1B685, 0xBD698F1F, 0x1B1A4959, 0xD9DA20D8, 0xFEFE235F, 0xEFB2096D, 0x5B9AED2D, 0xD7096297,
+0xDFBA2146, 0xF2FAF89D, 0xB7B72F27, 0xE78BEA5A, 0xFC070993, 0xB89FEDF1, 0x82B53EC7, 0xD3AB50FA,
+0x92C112E6, 0x1BF155AA, 0x9081485A, 0xFCE1B00D, 0xACEC25D8, 0xCA328924, 0x7C8DD9D1, 0x52AD3AD3,
+0x08809A42, 0xDAF440D9, 0x1C87B807, 0x7977E339, 0x8A9D7B21, 0x6070643D, 0xCBE9943A, 0xDC7532FE,
+0xFF0C6268, 0x8013E0F5, 0x0DA545E1, 0xAB2DC211, 0x4D8F397F, 0x6CB4BDE3, 0x665824F8, 0x0AEA5305,
+0xC2D542D4, 0xD387302B, 0xC395ACF7, 0xB644898E, 0xB99A3BFA, 0xC008E902, 0x0880D948, 0xF876A2D6,
+0x19BA57BF, 0xADF07AFC, 0x84ACD1B4, 0xF87EC5C1, 0xF36C52D2, 0xCBB096F4, 0x4A3FF874, 0x109FEB95,
+0xE6CF6A10, 0xE5776074, 0xB2B57F76, 0xCA7FBC35, 0x01EB72BC, 0xC5D0293E, 0x72031094, 0x42FE9EE4,
+0x80BC93A5, 0xAEF1FC24, 0xE271206E, 0xC2E654A6, 0x33121A1D, 0x8E1E33D8, 0x27432979, 0x05572BCE,
+0x06E5A6FB, 0x0C1E510C, 0x3FF50717, 0xB7C4D8D6, 0x58EA35FB, 0x23FDA603, 0xBFB06974, 0xDBDF7CCA,
+0xD2DAA331, 0x7769FFEF, 0x0F1D12AB, 0x7DE3355E, 0x6D9EE833, 0xE4462A63, 0x78E88A13, 0xC64C0D1C,
+0xC29D73C0, 0xA0376B46, 0x9C4AD3FF, 0xACFF12D3, 0xBF0DA62F, 0x332202A8, 0xC579788A, 0x5076C11B,
+0xC7FCE2EA, 0xF8A67E2D, 0x0DDB76D0, 0x8B4D6DA9, 0xB831056D, 0x5CF3C530, 0xF72AC272, 0x88074923,
+0xCAE8356F, 0xCDB07218, 0xAC99B2A3, 0x60845E18, 0xE59B01ED, 0xD7342052, 0x924398EE, 0xF84F0395,
+0x979FDF1E, 0x2A2D4F61, 0x00DDD09B, 0x76D63FC0, 0x4388B9BF, 0xE377B413, 0x632F4D29, 0xFC1EAE7B,
+0xB5EFC875, 0xF87D5D73, 0x8180401C, 0x4FC3D8FD, 0x91F23685, 0xAF2E3A02, 0x6AAFFF19, 0x3C10F10F,
+0xE18DCD59, 0x1170ACB7, 0x4ED9FD9C, 0x0DFA1F1B, 0x30E5B5B0, 0xDC1D6716, 0xADFB4124, 0x3DAA46CA,
+0xCF899F72, 0x33EC7A39, 0xD7EB8B33, 0xEDDFBD63, 0x22B95F78, 0x30F85862, 0x81BE155D, 0xD7C2E2D1,
+0x99B624E9, 0x682F8FF9, 0xC5E8A728, 0xE5A57558, 0xDACF9EBC, 0x044A3E5C, 0x4BB49FE3, 0xAB4F90A0,
+0x42D399EC, 0xC71E8557, 0xF9ED9969, 0x32659101, 0x13857989, 0x255AEE64, 0x56A9333B, 0x9822A4B4,
+0x2DC0A81C, 0x24D30250, 0x06431B13, 0xE3443A91, 0x2F156D92, 0x993CFC0B, 0x2947309C, 0xA64563CD,
+0xAD8BD5E7, 0x070D3A34, 0x991A148D, 0xA921FB05, 0xD9707038, 0x8C156A94, 0x70851759, 0x7B95107F,
+0x7C195207, 0xD336804D, 0x77DCE9C6, 0x2D68E779, 0xD9D84A49, 0x8332FE5F, 0x90CEC4B0, 0xBE29178B,
+0x009E2226, 0x27BA18DB, 0xA61AEADC, 0x62B41D27, 0xF4A68F09, 0xD270834C, 0x2D3032D5, 0x0AEDCE3C,
+0x8F151C11, 0x1BA229AC, 0x79262083, 0x96BEC8FE, 0x59ECFD54, 0x39692E75, 0x41B3F95D, 0x859013AE,
+0xB5D4B7E9, 0x5B277D1D, 0xAC7234B4, 0x310E89F9, 0x7C3B6A04, 0x9E643B45, 0x27814157, 0x8C20A49C,
+0x7C384F9F, 0x440B487F, 0x76CA5B42, 0x10580C82, 0x278B25C1, 0x3F2DF6D9, 0x8E966F3B, 0xC316D126,
+0xAC9B6A1D, 0xE4A7B4F1, 0xE7A7A840, 0x00DD1D7A, 0xE7D649C9, 0x054986FF, 0xF37273B4, 0x098AC4AF,
+0xB1E84FE3, 0xE02A6FF4, 0x61AF5CBC, 0x25BD2043, 0xA466CFE3, 0xCA617C92, 0x75AE98F5, 0xA72A33A3,
+0xAE0E0CFE, 0xB0BC223C, 0xE478DF2B, 0x803D0BD3, 0x626EFF09, 0xBF2B1756, 0x220A445B, 0x075EACB2,
+0x362724FA, 0x0A6AF75A, 0x7C60693E, 0x18633301, 0x47E9C17F, 0xFD149F16, 0x03BED468, 0x655F22B4,
+0xEC60851A, 0x3D42B608, 0x5454299B, 0x22B8C51E, 0xEE19DCEF, 0x424B3614, 0x95854F1F, 0x6F516596,
+0xDDCDCCD2, 0xCC3E69FF, 0xF4F91087, 0x7F9707A0, 0x87B64E1C, 0xD5FE34CF, 0xB27B3F08, 0xC05E5538,
+0xEC45B36A, 0x3D0B6C0F, 0xC24D52DD, 0x613BE3E1, 0x36B5A512, 0x422C48DB, 0xC4A512C2, 0x951590C8,
+0x8B635D14, 0xBE33F7DE, 0x9A995DF9, 0x0674ABD8, 0x29E6B4F7, 0x4955AB9B, 0x44957B2C, 0x023C77FF,
+0xAEF009C3, 0x6CF34839, 0x1A7D8175, 0x9F54A9BA, 0xF7F90EF7, 0xD9815A83, 0x6F97E149, 0xB60853B0,
+0xDA5EA4EC, 0x014A884A, 0x5EB17F0A, 0x9A729E50, 0xB7967280, 0x694743A6, 0x3BCCFD53, 0x538A5306,
+0x7B29CFB5, 0x9CBACA71, 0xD3376C54, 0xEBB63F6F, 0xA5D92528, 0x15702F5F, 0x1D9C84F9, 0xBA91DF7B,
+0x90066A99, 0xFD87C31C, 0x9C78A387, 0x47F0A002, 0x762D8B75, 0x703309D1, 0xD5E66135, 0xF4A8138F,
+0xDC594EB6, 0x1F2F42C5, 0xEF65E510, 0x745AC66F, 0x26BEFB5A, 0xA9EF5055, 0x81B7DEC2, 0xAA0C1B98,
+0xD56C55E5, 0xC322586C, 0x665E2D62, 0x23F13BD7, 0xC693EBED, 0x2F20974B, 0x39EFF95B, 0x2AF34684,
+0x9724DC27, 0x02E32B6B, 0x25C03AEA, 0x929C7BEE, 0xAF747C1A, 0x88F04551, 0x80ADB7FD, 0x5D0C0062,
+0x5FDA72D6, 0x19D02245, 0xDA2BB4CC, 0x8DC6B46F, 0x6E8123DC, 0x73AE5733, 0x6D39A2D7, 0x4797A200,
+0x1A199C28, 0xE4BC4BAB, 0x05A60A20, 0x0EDDA651, 0xA9950571, 0xC5025A1F, 0xCADAF6C4, 0xC1E587B5,
+0x350838EB, 0x45765839, 0x02F274FF, 0x82BDD438, 0x6FD2E4F3, 0x5EDA1A56, 0x3502D5BF, 0x8B0AFD70,
+0x7D2B90A0, 0x41BC475F, 0xF5266682, 0xFE3E7305, 0x5E216B2C, 0x0FF22281, 0x7CE62360, 0x99A42FF1,
+0x86AE8D28, 0x7AB55B7C, 0xCF52E265, 0x20DB86C1, 0xE6C274BC, 0x37695DBD, 0x6D2EA0F5, 0x83399EE1,
+0x4B213B45, 0x0C6BFB38, 0x2DF1D0C7, 0xB333FD18, 0x8AA1B265, 0x2C5B12BB, 0x609A2B7B, 0x83902E4D,
+0x7AEC4C4A, 0x6F84BCDB, 0xE8778116, 0x16B78F0C, 0xC284662F, 0x1BA66DD1, 0xA6CBBE56, 0x0890F57C,
+0x4994D3FF, 0xE3D84CF9, 0x17CB4F27, 0x8FBA38D6, 0xE37FFA92, 0xCD3B32E7, 0x93B83BD4, 0xD55880FB,
+0x94926970, 0x6BF6B87F, 0x3755C879, 0x6639992A, 0xB11A984B, 0xAC75BA0A, 0x3C43E55B, 0x60A713F4,
+0x11714622, 0x79453459, 0xB7F5205E, 0x7E48E9C0, 0x6059F14D, 0x2DC42151, 0xA1670621, 0x04580721,
+0xF9E23293, 0x151A98E8, 0x0395CC66, 0x888DE40B, 0x461D2473, 0x07F4B254, 0xEFFBE210, 0x4449DCA9,
+0xCE403AAC, 0xCBDDAA12, 0x8DA1223F, 0x21065B24, 0x976A26B9, 0x8352C9A0, 0x9DBCCCD2, 0xFF31AC94,
+0x157D6D9F, 0x3234A2EA, 0x7CBEF6F9, 0x30B0E3BB, 0x67F3FA41, 0x2AD3361A, 0xEDCFA152, 0x639808B8,
+0xD526D797, 0x62A1E19F, 0xF1B1AB0F, 0x8E5C9255, 0x2221CC04, 0x8E5E2EE8, 0x09CD2B52, 0x92BC4A0C,
+0x298EB62A, 0x9AB885A1, 0xB576757A, 0x2F02AB53, 0xE337662E, 0x76C2A787, 0x10825834, 0xEF025D37,
+0x49F82846, 0x40E92860, 0x19E9870C, 0x0E4B54AC, 0xAD96A838, 0xD68A0554, 0x5BB8314D, 0x4F71FDBC,
+0x0DF9F948, 0x5C5B84FA, 0x0963F76A, 0xDC716E15, 0xA83960E2, 0x6D94E998, 0x226C2321, 0xBDD8BD07,
+0xA1E5B8B5, 0x7BEC5079, 0x04F0D684, 0x6DCE3A7F, 0x1BA2B008, 0x7EE525A5, 0x98B94CEF, 0xFC396FFA,
+0x0D639D31, 0x7B0D062D, 0x842216DC, 0xE0A07428, 0xACF7979F, 0x1A97D884, 0x887C9B1B, 0x69B77C40,
+0xFF6082BB, 0x64CEBD62, 0x163AF3D1, 0x2A33A48B, 0x245AB2B6, 0xD18AF0FC, 0x3DC1CA73, 0xDBD210D1,
+0xFB951A8B, 0x5F605B3E, 0x66FFF340, 0xB4D9418B, 0x69EC906D, 0x6FBF8639, 0xCED64B99, 0xE9B202F8,
+0xEA8546AC, 0x717131C4, 0x8B143152, 0xB9EFDAD9, 0xFCBE33A2, 0x5FA2091C, 0xA9B02922, 0x328DDB65,
+0x0DAE696F, 0xE12AC1BA, 0xB1618A0B, 0xE70BF658, 0x181F853B, 0xE6118D78, 0x3D5F24E6, 0x827E54C9,
+0xCC7B5DD4, 0xB2040EB2, 0x6D8772EE, 0x45852BE6, 0x9666C7B4, 0xBCD28246, 0x39F26C85, 0x9DD58512,
+0xBFA9CB64, 0x8EC5442E, 0x7E4424EB, 0xE238593E, 0x61093DD3, 0x1131E6A0, 0x3ECFA1BA, 0x3F7BDE13,
+0xA98C3FF8, 0xDB76D907, 0x55723DE7, 0x7CF217E3, 0x4411278E, 0xAF1E0E63, 0x578493C2, 0x7AFD3CDB,
+0xA91A5169, 0x8D08BEFE, 0x08CF7A1F, 0xAFC6ACA7, 0xAB7C838B, 0x532F4A49, 0x1D89D76D, 0xD9A98B62,
+0xEBE80F80, 0xB7917E3C, 0x280A2582, 0xAD53644C, 0x0E7A7FF0, 0x7BCA7E24, 0x989B7BAF, 0xB8EA09A6,
+0x3E151039, 0x69E5460D, 0x22067F45, 0x1C1ECCD7, 0x08755E52, 0x36E67020, 0xEE987297, 0xA2144C44,
+0x1BB0D95E, 0xD2F9B09A, 0xB6102267, 0xFF0AF40E, 0x4A6282C8, 0x8F8EDBFD, 0x30EA64B0, 0x99E7664F,
+0x826BECEE, 0x399D5D81, 0x489585DF, 0xAC57B8F9, 0x1C76A466, 0xC01587B6, 0x8A17B426, 0xB1E91261,
+0xC3C2E7F4, 0x5008CC75, 0x5BC11E99, 0x5C26DCA5, 0x250DD1A5, 0x5F2D3D80, 0xB74E3588, 0x92E09BE9,
+0x390DFEF1, 0xA3E54DFB, 0xC2480357, 0x26A6A9B7, 0x0D9FD0CB, 0xFDE54E21, 0xEB58C1E5, 0xF22B19F6,
+0xF82F39C1, 0xE74BCFEB, 0xC32FB9C7, 0x974233C9, 0x03E186DD, 0xB3B0C8A7, 0x4608841C, 0x54DAB8DA,
+0xBFE2AC5A, 0xC0CCC01D, 0xF0738C73, 0x83D3D259, 0x70D6FDD9, 0x40D39F81, 0xAA4C4CA3, 0xD160710C,
+0xF9AB640F, 0x263AE150, 0x769A352A, 0xB47E7644, 0x8A8B9737, 0x03058688, 0xC06F167A, 0xC3F6CB5C,
+0x1239969E, 0x0B874128, 0x7C107981, 0x38277EEB, 0xB53623E4, 0xA0E5B41A, 0x7EEE120F, 0xA00FB981,
+0x3A0A5532, 0x0563F62A, 0xC3AAA34B, 0x6E88464B, 0xF7C211F3, 0xD0FA5B8D, 0x5115DC23, 0x490BB846,
+0x906CC4EC, 0x00005923, 0xEEBDE12B, 0x57B887D5, 0x8F8A03B9, 0xD6B52BE0, 0x7EF6096E, 0xDB8075C3,
+0xAD6041EC, 0xBB291721, 0xF43C7B6C, 0xC6DE1B08, 0xFD027337, 0xB191A83B, 0x5A09136A, 0x2E2D5405,
+0x9E638E32, 0xB1F584F5, 0x1924F930, 0xF4644D99, 0x7CD36A93, 0xBFA15122, 0x3B83515C, 0x89CF3E4F,
+0xB78F575A, 0xFDE0A6BA, 0xBD8FEE93, 0xFBE56DC5, 0x4708394A, 0xBC1C6E6A, 0x72679FDE, 0x1EB1A711,
+0x64AE52BE, 0x36A218B4, 0xBB46081D, 0x08E6D692, 0x1D341DE1, 0x2E964BCD, 0x9C54E98C, 0x84D772F2,
+0xF7A09B35, 0xF25E1CFD, 0xDB1047CF, 0x97BEBEE2, 0x6445AEB5, 0x6EB52D9A, 0x9F57B07F, 0x8E8EF674,
+0x3A3ED643, 0xFA312974, 0x1E4C5786, 0x5E49832A, 0x49B209F8, 0xCC480789, 0xA27D19E5, 0xF508136B,
+0x25B890E2, 0x22D57585, 0x52E54A97, 0x1079CB97, 0x00007E89, 0xEE280100, 0x00C81508, 0x21010000,
+0x001800B8, 0xEBCCFF0D, 0x0CC1492A, 0x31FDB4E5, 0x961A1996, 0x98E253BB, 0x77ABBE28, 0xB3D617E7,
+0x77C028FC, 0x9E96FA0D, 0xF70F00C2, 0x1D497F9B, 0x989FAB61, 0x657AAC45, 0x00895901, 0x97A6F7CB,
+0xAD2C6244, 0x4EC9AFA3, 0xEC8FA893, 0x3AF2039B, 0xDC477053, 0xC494DC8B, 0xAC6F25A8, 0x7C831C47,
+0x3C9CCF62, 0x763F74D6, 0x7B338972, 0xB1322EA5, 0x8490632C, 0x1B484DF0, 0xF85FB51C, 0x0CBBBA29,
+0xD5A660DF, 0xA5905B51, 0xA4EAEFBE, 0x9A2E1457, 0x7C4F38CC, 0x91BB4129, 0xAA2E15C5, 0x0288E264,
+0x60FE5363, 0xE617D4B1, 0x4EF10E0B, 0x88B34E30, 0x16AEE068, 0xB6FF199F, 0xF64B9BF4, 0xAE18E8CA,
+0x325F4A92, 0x0CF47433, 0x5003F786, 0x9B028608, 0x55E04094, 0x16B2470D, 0xC37811EE, 0xCEDAA9EF,
+0x49BEC89B, 0x559590FA, 0xB6E4537D, 0x62FBF026, 0xAA1A6D6B, 0xCB741FA8, 0x6EB72869, 0xB01AF936,
+0xC04DFC3E, 0xF36D91B3, 0x1C1D53A4, 0xBF77ECD9, 0xD1B05D7A, 0xBDC68A41, 0xB89B60C1, 0x87484063,
+0x8234F2C2, 0x229CA380, 0xB2340AC6, 0x52E811CD, 0xD4C846D7, 0x89796641, 0x697F9390, 0x207EE87B,
+0xC5596E8F, 0x17E7DACA, 0xC0B68EB8, 0x6425E389, 0x20DF76CE, 0x797012DC, 0x0283D96C, 0x6EDB83F4,
+0xF33746CA, 0x38DABEAE, 0x29224653, 0x7A6B5FC7, 0x8B0E9AA6, 0xD32D36E0, 0x5860C6B7, 0x210F8E0B,
+0xA2EB975C, 0x701D6769, 0xAA20394D, 0x37F36CB6, 0xF06881FA, 0x420EB03B, 0x98B77708, 0xBA96FE32,
+0x17AF6DA3, 0x689F2AEF, 0xA0528347, 0x99116065, 0xE13B7B47, 0x8E888AAE, 0xAA9E0423, 0x144D5483,
+0x7F9D3DE5, 0xE0E5C4B7, 0x8BDEE23F, 0x6A136C08, 0xFD2448AF, 0x36E87337, 0x65C1BB0F, 0xF26EFEBE,
+0xF5284190, 0x671BA5B2, 0xCFD0C1B7, 0x9ACBB639, 0xABBEC38A, 0xB6BBCA95, 0x595DC82C, 0xCE55B4F4,
+0xC1C68DB8, 0x9F93D527, 0x49B620EF, 0x8514DC67, 0xD4ACC3DD, 0x49E215ED, 0xB6C0BA9C, 0x442D93AC,
+0xB874B6BF, 0x1D23B802, 0x1DA36CAA, 0xD8D1F4B3, 0x3863E2EC, 0x5DDF9A8E, 0x1F00110C, 0xE35260C7,
+0xB85EF3D1, 0x1C910693, 0x29B867A2, 0xCCA20ED8, 0xF841795A, 0x123AA2E3, 0x71E27806, 0x37F5FB7A,
+0xFC7321FF, 0xCFFF3927, 0x213A2790, 0x4B7A8D1E, 0x8B5FA9FE, 0x65121220, 0x7FA12C2C, 0xE1DA6108,
+0x5AB61124, 0x41C2E08C, 0x08BBEC5C, 0x31A3361F, 0x69BEE84C, 0x6DBBA98A, 0x3CCDB8CE, 0x6D640C66,
+0xFD459E9A, 0x06944B5C, 0xBFB7437D, 0xE5A64501, 0x68A7A2B1, 0xCFF4A539, 0xAA2C5A4A, 0x77479CA0,
+0x233A9E53, 0xDD65F37A, 0xA0E95A3E, 0xCB13FAAB, 0x0EEA3DAD, 0x7B580747, 0xF8E33B8C, 0x329C852C,
+0xC222265C, 0x167FB54B, 0xE0211909, 0x47FAB8DB, 0xAFF6888F, 0xA020D476, 0x68D5627A, 0xFFB737C6,
+0x28FA68C8, 0xEC478134, 0x62C8BEC3, 0xAF469EF5, 0x1B478428, 0xA788FA27, 0xEEF41A8A, 0x26BAE605,
+0xCF8B3CCE, 0x35417CF0, 0xCC508B43, 0x5DB39CB0, 0x020A165E, 0xD98F7841, 0xC2775956, 0xB4A9C5AB,
+0x9C77F71F, 0x0F5DD88B, 0xA127E222, 0xE3BB4532, 0xD9CCBD17, 0x5A593B38, 0x62EBDF9C, 0x04D3D1A7,
+0xF9405692, 0x198AA66D, 0xFBA2B7F9, 0x3FA13AB7, 0xB258652A, 0xDEB9776D, 0x9AB250DA, 0x319A3FA6,
+0x9CE48186, 0x1A01FCB9, 0x475894EE, 0xE9BDFF79, 0x49CCF056, 0xBBA97622, 0xF71D8C63, 0xDC3C8459,
+0x55CBD082, 0x1D700964, 0xA714DC62, 0xADA59C49, 0xF44CEBD8, 0xD8E3EFC4, 0x8895BB87, 0x81F6BBA3,
+0xA34D6603, 0xF3477138, 0x63704406, 0x81EFB6BF, 0x73A3EECB, 0xABA7B822, 0x034CEC9A, 0x2DEB7C37,
+0x5C8EDC55, 0x803103DE, 0x48BB005F, 0x69003E6C, 0x1C5D52D8, 0x86CD4D6F, 0xB41310DF, 0x725368AB,
+0x58AAB7DD, 0x61B53085, 0xDF1247D4, 0x497017E8, 0xDC660FA7, 0xF54AB784, 0xA7B932EF, 0x6A8580A8,
+0x6D8965C7, 0x0C468FBC, 0x1A2B36DC, 0xEF391076, 0x2DB66D8E, 0x8E68F38F, 0xBD0751D1, 0x9AD5C563,
+0xD8AEEA52, 0x29A1CAE3, 0x7215F79D, 0x8C43072E, 0x58C5C84B, 0x3F4E5E65, 0x9A19F314, 0xE582D83F,
+0x228678E3, 0xE2C1AC52, 0x3A073F31, 0x6EA55BA8, 0x8BDF1799, 0x1CE1CA2E, 0x917C6308, 0x5E2E185E,
+0x9ED29414, 0xA4550F88, 0x60A53B9D, 0x9B0495EC, 0x194E411A, 0xCA172D32, 0x2607E023, 0xA40815C7,
+0x1A156A5C, 0xAF42FE7F, 0x2EEC3F35, 0xC287731B, 0xDD41F71F, 0x45AB75E7, 0xBDBE2B31, 0xAF00719F,
+0x4169A7C1, 0x0998F49C, 0x3859F33C, 0xB7192225, 0xE18BEA5B, 0xCA906754, 0x932F1B62, 0x4AC206EC,
+0x653FA819, 0xCD2C9392, 0x9CF54FB8, 0x29C927D6, 0x1B1DBFE6, 0xFC6513B8, 0x2CB44D1F, 0x14DC82A1,
+0x271F1C9E, 0x019A7736, 0xAD01A951, 0x43856C33, 0x02746C41, 0x50EB34DF, 0x0645F2E0, 0x199A24E2,
+0x9DEC9848, 0x5B053FC2, 0x5FE3DD5E, 0x5757C216, 0x306AFB09, 0x1282E5BF, 0x4717B62F, 0xEEA39902,
+0xF4E1C332, 0x4E728E88, 0xF3543B07, 0x7E4DC35F, 0x8114C848, 0x5A2610C7, 0x90BD7547, 0x6817F94A,
+0x8DC9D128, 0x14B9D5E2, 0xB5CAF93F, 0xDE1B5DF1, 0x2B373CBB, 0xE97356D7, 0x0DF9E3E3, 0xCF0A2D74,
+0xF67CCA17, 0xE92BD8DF, 0xFF011BE5, 0xA23EE6B0, 0xF55860E0, 0x96CFB4E2, 0xC659EA32, 0x38E4E041,
+0x35510F53, 0xE8DFACED, 0xAE9F5413, 0xCB250CCF, 0xE64B7DC2, 0x3E25BC7D, 0x1FBC3864, 0xA2EBD050,
+0x6A2D159A, 0x3F3A8A9A, 0x4AC50709, 0x267050C5, 0x03FC2FD1, 0x6633C533, 0x48E3A07A, 0x92866199,
+0x67B1EF90, 0x637EEE2B, 0x15AE299D, 0xEB9AAB41, 0x49B8F126, 0xCE98D253, 0x7027FCC5, 0xCF470186,
+0x8A4AA1B8, 0x62BBA2DC, 0x71E825BA, 0x9AA0C8F6, 0x2CB78E3F, 0x7A3EC804, 0xEEA7C114, 0xAF3E0195,
+0xCACC62A0, 0x86DD96BC, 0x7D6A2586, 0xF8489F03, 0xC8C630A5, 0x5DD7E042, 0xF3631BBA, 0x52A36BBB,
+0x40639492, 0x1F7B5F9D, 0x129660E0, 0x60F0614C, 0xEFCCEC32, 0x4878A62D, 0x1CFDF9B5, 0x6AC163CC,
+0x21195331, 0x85568801, 0xB6456D19, 0x2BBA083A, 0x085CA11A, 0x6C70F3DE, 0xC7C64AA8, 0x6431A8BF,
+0xC2D271E9, 0x9A4EF247, 0xC01756A0, 0x09B71BAD, 0x4EAE7604, 0x90F897D5, 0x6B8AF1C6, 0x4F89E344,
+0xE92AA644, 0xDDC2E758, 0x7CB9C9A6, 0xA7E7D0A0, 0x9F2BEDC8, 0xBB28A848, 0xFEA59CD3, 0x6458BCC3,
+0x426D9DF9, 0xA4EE3C90, 0x64E5F4B0, 0xEB74711D, 0x9CA7E8C2, 0x9319EDC2, 0xCF251231, 0x989DBF4C,
+0xECFFB62C, 0x57F329FD, 0x8356D642, 0xBCC53529, 0x90722A3E, 0x5C0E1299, 0xE30B7EFA, 0xA1FB88E6,
+0xB3705C79, 0xD5379B09, 0xDC8BB14E, 0xD0E41F69, 0xCD272F35, 0x3CEBB837, 0x42748AD8, 0xEE2D221F,
+0xC833B487, 0x5C5C069E, 0x8CB9DB4A, 0xF79B710B, 0xCBB8C7F2, 0x3B2C7120, 0xB4274C8F, 0x874E803D,
+0x78D93F9C, 0xD2688E24, 0xBF13F47C, 0x334A9EB7, 0xEEE5A260, 0x43AE3EFE, 0x7EFA4C53, 0x0EBAB096,
+0xB4A5B667, 0x8D3B60D5, 0xCF1C53F3, 0xF9D5CF09, 0x237F0CBA, 0xD8EE033E, 0xBB8C2D63, 0xB4462EF6,
+0x1FFB0EA3, 0x041D5CEF, 0x908D992E, 0x504A40C2, 0xA9B7025B, 0x77310EF8, 0xAFCB6A2D, 0xFEF03F3D,
+0xF7283592, 0xAFED86B3, 0x90D14722, 0x657A5D03, 0xBD59A186, 0x18B3B941, 0x11B607F9, 0x0D03E3EE,
+0xA469170B, 0xF376AB51, 0x0525B7BA, 0xF0F527AD, 0xDCCD8196, 0xD0BAB1A4, 0x2175B222, 0x5831F355,
+0x01EF98A4, 0x71D639F4, 0x93B27CE8, 0x0B303607, 0x3E19FAC6, 0xC3DB2928, 0x91D58948, 0x16091CCD,
+0x7BACE411, 0x92A51DAC, 0x126D0365, 0x2C69AE1B, 0xB4A380E8, 0xD422E0ED, 0x2986F117, 0xE50E5EFF,
+0x19DE6586, 0x3B8D369E, 0x55F565A1, 0xC7DC9F55, 0xF20E0B0F, 0x5C7C7C75, 0xAF3B9F39, 0x968F1AA5,
+0x94B023C0, 0x6641F253, 0x70FC34B5, 0x94757032, 0x2614F797, 0xB0F9EE0E, 0x1E4E726A, 0xCFAE852B,
+0x5F2B71F7, 0x3A6554A3, 0x2E17DA14, 0xA52EB269, 0x9EE1D5AB, 0xFDD9DAC4, 0x20294CE1, 0x26A656EA,
+0x1844B192, 0xB771D2AE, 0xC619949D, 0x8D782B5E, 0xE6C72554, 0xA7E696DB, 0x244AC838, 0xE7C3E5F3,
+0x888517ED, 0x8351119A, 0x017E702C, 0x6A846A03, 0x1D40C725, 0xBC20E117, 0xC9E4FC80, 0x472C3CEB,
+0xDB10396B, 0x4D7BAAE6, 0x09683CF5, 0x536AAC20, 0x3FB9D7B9, 0x582EDF58, 0xCE2F616F, 0xB25331FE,
+0xBDC6D5BB, 0xF664E266, 0xAE84D117, 0x3A2668AF, 0x6344B315, 0xBE2DD120, 0x39183AAB, 0x7933CEAB,
+0x811DECC4, 0x69E6A820, 0x46B8909A, 0xE797F069, 0xE811D021, 0x60E2ACE1, 0x22955636, 0xC9E26266,
+0x1740086E, 0xEB4B460D, 0x34D84E54, 0x7C269FD9, 0x1BB28B0B, 0x56674258, 0xE6AA7369, 0x89D89D52,
+0x5CD6B514, 0x9B57BF14, 0xC3F39820, 0x84E28EE2, 0xD4D65DBC, 0x3E845C97, 0x50E72278, 0xBC7507BA,
+0xBCC50404, 0x0685D6E0, 0xC5EDEC15, 0x0113AF33, 0xFD4B21A3, 0x3533E7FB, 0x1E0DF6E8, 0xC0A805E1,
+0x29652C17, 0x7493B090, 0x0D03BD0B, 0xE44BDD43, 0x9E05A660, 0xDF6CD101, 0x8D6CC2C7, 0xD56C8873,
+0xE24FF842, 0xAC7708AC, 0xC26D42E4, 0xA904E945, 0x85F9982B, 0x39CC0249, 0x5AB68433, 0x97A88ADA,
+0xC0776174, 0x8A4C0734, 0x4FECCB2F, 0xF93F31E8, 0x6FD377CB, 0xBF213D6F, 0xF7B1DDE9, 0x48D4626E,
+0xF1A2548B, 0x2BACDDB4, 0x6AEF0217, 0x5037521D, 0x0D4C87B8, 0xD43D12F2, 0x85069847, 0x9B4F2CAE,
+0x9AAB7E6A, 0x448AC246, 0xE199EB87, 0x3680421E, 0xBCD31491, 0x26AE7E82, 0x7E409E20, 0x5B03953C,
+0x9AFFE444, 0x54792F4D, 0x9966F19B, 0x15BE5C7D, 0xC5A28684, 0x321F4BDF, 0x56F04CED, 0x7999DC68,
+0x699842F7, 0xF2F1A985, 0xCE8BC1C1, 0xDBEA5186, 0xB77D0460, 0xFFF3477E, 0x09A8D0AB, 0xEB48911A,
+0x9BEF3405, 0x38A0BBCC, 0xC7A8F68B, 0xE515604F, 0x49CB7263, 0xB8647087, 0xF401558A, 0x092BEE76,
+0x6B4D23DA, 0xD065FC24, 0x40D7FBA0, 0xFD897146, 0x499D309E, 0x0AB9B3CB, 0x6AB77513, 0xE38255D0,
+0xA65EB1B4, 0x4C1B2D28, 0x893C86D0, 0xEB55918C, 0xA8839BBA, 0x19A3FD94, 0xC0AAE2F4, 0x95D9860B,
+0x0A8798DD, 0x7D6BF9F0, 0x7D1EE1A8, 0xCD066659, 0xA133AB81, 0x6D0A0D85, 0x55AF042F, 0x2964D578,
+0x589877B4, 0x9F180A0A, 0xFCE85C45, 0xF95720E1, 0xDB9A59C2, 0xD2CF551F, 0x3AB01C64, 0x17CC71BF,
+0xECDD2F4E, 0x2491DBC5, 0x533609EF, 0x7520806B, 0x3C5734C8, 0x6FF89263, 0x0F9BED05, 0x9AC84CED,
+0xB5656F2F, 0xB69BE314, 0x9FF3747B, 0x3D724FA2, 0xA8E4F246, 0x3A243559, 0x0D586212, 0x2DFD5DC6,
+0x7F903116, 0x574E6338, 0xEA58F852, 0x34E32B2C, 0xB4C22015, 0x946505C3, 0xD2C392B4, 0xA2EEEE9B,
+0x8BC2E0B9, 0x9A0D9214, 0xB81C1EBE, 0xEE606D17, 0xDB259EAF, 0x13507D21, 0x40F85E3A, 0xAE53E106,
+0x14801F81, 0x5D31F60D, 0x2CD4EB75, 0x74633703, 0x3A24B3C7, 0x81915EF8, 0xDFAAE14C, 0x8F111AF6,
+0x0199F46E, 0x395F799C, 0x03FA79D2, 0x89A0D85B, 0x1EAB1765, 0x71CDE025, 0x5D85F4B1, 0x96E6D241,
+0xB69F0E48, 0x0D828E6A, 0x1581A7DB, 0x28F3684C, 0xE92B211C, 0xFFCF4F23, 0x338964B7, 0x37EBD01F,
+0x33D9E620, 0x4C6F47AD, 0xD54578C6, 0x85FB3966, 0x400763AB, 0x41625FF3, 0x76471CD0, 0x210FBCB3,
+0x70BFC2A9, 0x000CB8BF, 0x7183E59C, 0xCE737A01, 0xAADA31A9, 0x7487B719, 0xB30F54E1, 0x1F5D12B6,
+0xCF4B8F64, 0x8F1A1F52, 0xE6974BCF, 0xF0622B40, 0xE24E14AD, 0x347C13CF, 0x10EA1044, 0x616CD6DE,
+0x5D43C07C, 0xEE208F8E, 0xE93A43A3, 0x2D3686DA, 0x0FCEF9C6, 0xCB55494F, 0xED620010, 0xA29A923B,
+0x5343D547, 0x017AA25D, 0x624C85A6, 0x63C7AF31, 0xCBA9D269, 0xAFF39F58, 0x14305928, 0x0990DEC8,
+0x684E7425, 0x5FE99B9B, 0xEB26BB8B, 0xC7C9BF3D, 0xEE9CDA70, 0x74B4DE4C, 0x611F4190, 0x1B65D824,
+0xE31F1022, 0xF83C0513, 0x63AE3E47, 0x5438E321, 0xA39496D3, 0x7B19AB9C, 0x9CA4314D, 0x7931A531,
+0x7E4FFD4C, 0xE35C49D7, 0xDD3A74F0, 0xF76E73A8, 0x8A8D473E, 0x396DF01F, 0x85E5269D, 0xDFA5BDD0,
+0xF2C3162C, 0xF78ED18E, 0xF962F6F2, 0x1E5434A6, 0xBE78BD0E, 0xC16349C5, 0xFDF10485, 0x02FB518A,
+0x8E8264A8, 0x356E7F57, 0xE16770F4, 0x94A93303, 0x42AD1D24, 0x9C537819, 0x5EDCD9EB, 0xD206D1F7,
+0x610CB7A8, 0x0BA43458, 0xA6A08C95, 0x79B12B9B, 0x4BDF1455, 0x6BC95C1A, 0x6EB7B082, 0x877F85C5,
+0x9EEC5307, 0x65B4C6CA, 0x64DC8409, 0x0824086D, 0x7A14DB71, 0xFCC00684, 0x09BEF3B2, 0x644D35F6,
+0x593DC66A, 0x190855FF, 0xA9C70D1A, 0xB7E266BA, 0xC3F42FBC, 0x31346EE5, 0x581935CC, 0x55B5092B,
+0x2DDD9C60, 0x177D9DC3, 0xD3432EA5, 0x0DA7526F, 0x23143F15, 0xCC0DBD18, 0x79582601, 0x595EC015,
+0x529F35F4, 0xD6D62EC2, 0xAB0C6C8C, 0xBDBA4389, 0x587879DD, 0x57EFA888, 0x030B5FC8, 0x34861900,
+0x1518D989, 0x32B0C0BD, 0xAEDDF8D0, 0xFB70C7E6, 0xCF777945, 0x0B7A5EE3, 0x16A3384E, 0xE530C05D,
+0x79EFE4E6, 0xB1276EE7, 0x9C30D431, 0x49EE4719, 0xDBACC3B4, 0x50E7F26C, 0x72C090B0, 0xE46C54D7,
+0xE5456AC4, 0xE4776040, 0x22388227, 0xAC31940F, 0x8BE0D739, 0xB2E70B57, 0x5509208F, 0x311DBD4C,
+0x178F8D37, 0xF9B4EFB1, 0x9AE147E3, 0x32B705EF, 0x7677FB1E, 0x555B5EA7, 0xED4F3CF3, 0xCDD54FA4,
+0x87761A77, 0xB7B73FDF, 0x51542F1E, 0x85D55212, 0x5325CF81, 0x6B22FBF0, 0x0BDF4EE2, 0xBDC8841D,
+0xCE745609, 0xFD9CDC0B, 0x2BBC5DA5, 0x4DBDA905, 0xE765493C, 0xC2E2863C, 0x90EFCBD5, 0x6EA75CCF,
+0x9EFD002D, 0x6792606F, 0x6F4F0B66, 0xE1764D70, 0x7A257A4D, 0x2B8BA61F, 0x3325B5DA, 0xDCED2524,
+0xEA4DDD79, 0x1B84FEE4, 0x9DFDF92C, 0x397E840A, 0x8F728B54, 0x2F19AFB2, 0x7FF04B65, 0x31E122D1,
+0xC1E712FC, 0x8072D715, 0xA63FE5DF, 0x8F9980C3, 0xE9756EB5, 0xBB2F4003, 0x0E65A69E, 0xFDF6A69E,
+0xE918DA4F, 0x32C1A474, 0xCD10A990, 0xF51BD3A5, 0x37A229E1, 0x68475460, 0x4A129F8F, 0x4896AE2C,
+0x6BDDFFBA, 0x7F454DB2, 0xC0160EC3, 0xC56B60EE, 0xCBF45DE8, 0x5A4B2FE5, 0x1F41B6DB, 0xB0ED728B,
+0x94D27E61, 0x807EC8E1, 0x0C484A37, 0x14BECFD8, 0x4361A6F8, 0xDED8E847, 0x4D6FE491, 0xA0056D44,
+0x3C9C6E30, 0x2520FB9E, 0xE74E4B8C, 0x88EF60B2, 0xD6834EFF, 0xBF63DEFC, 0xA1FD4E62, 0x091BFF3A,
+0x31EF1BAC, 0xD5077DE1, 0xD73CD9B7, 0xEEA5D727, 0xFD2B45E0, 0xD65ADEE1, 0xB0909E30, 0x2FDFC7D4,
+0x8FAEFAE7, 0x5FEE370B, 0xA0572473, 0xECCD2289, 0xEB3FBC90, 0x29F6E90A, 0xF01B59AB, 0x8EE9D64C,
+0xFD23A722, 0xDC195C64, 0x4449FF3D, 0x2FAE6440, 0xC092D087, 0xDFF52D54, 0xEA9FB69D, 0xE42A7BD0,
+0x40B958B1, 0x27842429, 0xC13DBF62, 0xE7C2CD3D, 0x27CF3A88, 0x542AEE7C, 0x7A20D87D, 0xF3204235,
+0x7B9AACFF, 0x3879AFBC, 0x1C94C824, 0xA11464C4, 0xA1CA984E, 0xD09C965E, 0xF3867A85, 0x2326C3C4,
+0x763DF841, 0xDC848EB5, 0x4F14ECAE, 0x5F5194AB, 0xBDAA2B04, 0x344751B9, 0x71705B50, 0x2F5A98CA,
+0x3D4F6E74, 0x3464DF5D, 0xE41A1C94, 0x4EBEEF75, 0x289167B5, 0xE3C70703, 0x5264F794, 0xDC28216A,
+0x03B34FBD, 0x31E22FCC, 0x7E46B059, 0x72FE06C3, 0x7D4AF6A1, 0xD4867F7F, 0x940A4261, 0xEE50EA6E,
+0xC3D0BE5F, 0xFD8FA40C, 0x61316BAC, 0xE4EE2B84, 0x9CC7B64B, 0x536D654B, 0x0014F05F, 0x291DF366,
+0x06783E87, 0xA1E7AD8D, 0x5F03BCF4, 0x1FA4EC4E, 0xF5FC0177, 0x314BB872, 0x7667A5D8, 0xF0F5A9AF,
+0x2A0B1990, 0x03DB84DE, 0x1DFEEBB0, 0xBCADB6C3, 0xDC35061F, 0xD00EDD8A, 0x2BBEB858, 0x8B874BCC,
+0x783A6257, 0x4E8A11B6, 0x7B352A6E, 0x11F35AE6, 0x2EACE7F9, 0xF8F66C81, 0x5787E3EB, 0x16ADC665,
+0xF3B526A1, 0x09727026, 0x39B54904, 0x8ED9DC9B, 0xD1F26DFB, 0x301CF315, 0x2208DB38, 0xFD840AA6,
+0xB83217D9, 0x14B5E056, 0xD52B8CAB, 0x3963467D, 0x3903A3D1, 0xC70DFBEF, 0x63EE4D73, 0x049F5856,
+0xB587ECCA, 0xCBDC7514, 0x09EBA6FE, 0x99E92C3C, 0xF6C46FC6, 0x8223C494, 0x529860D4, 0xD819901C,
+0xDA72EC74, 0xF3DDD21C, 0x005E61BF, 0xB6AD0221, 0x16807FE1, 0x89522ED8, 0x34CB6DAE, 0x352409EB,
+0x9FC6DAA2, 0xC2C92249, 0xE71CF407, 0x9709A06F, 0xFB6292F3, 0x50C03953, 0x4868E223, 0xF1D4516E,
+0x5F0A3896, 0x2F4867DC, 0xAEDC559E, 0x5B998DFA, 0xF7F20B3D, 0xB4981616, 0xDB376598, 0xBBE08926,
+0x83CC376A, 0x65843DFC, 0x22E908C2, 0xA62C585E, 0xF99244FD, 0x33E5818F, 0xFB5616BB, 0xD04D7507,
+0x8957B509, 0x1F238068, 0x26440E99, 0x1579F43D, 0xEA286AE5, 0x6E4EE6FB, 0x2A54A910, 0xB72DE601,
+0x6EB0BCDF, 0xBE7A0139, 0x18F06F56, 0xC5B55E2D, 0x20CBF696, 0x4AB098B8, 0x92F505ED, 0x463D9BF3,
+0xDE88D91D, 0xB49C02BD, 0xB25D0407, 0xCC83501C, 0x8A1C2650, 0xCD3A2C11, 0x176C44BD, 0xB887D0F0,
+0x9F8B1A30, 0x15C4A621, 0x8268C74A, 0x3F775167, 0x6AC93C41, 0x27D90CE4, 0x83EEF789, 0x1C3BAC66,
+0x95D8CBAC, 0x27E1E5DC, 0x0548BEEC, 0x8C352BFF, 0x85FD1841, 0xCC191771, 0x827B2A76, 0xD9F62B8D,
+0x7B1EA3DC, 0x37137F8E, 0x866B23DD, 0xFA89ED34, 0xF83C7817, 0x9F2FE663, 0x08A4BE32, 0x6B0F2C13,
+0x8E7569F5, 0xE3CCF2C1, 0xE86EDE96, 0xB559B021, 0x328936ED, 0xFB848923, 0x7E96D299, 0xEAA4EA3B,
+0xB65F490E, 0x5A2ABB31, 0x448CB619, 0x3BE5E683, 0xAC8B847B, 0xFD3DCA68, 0x9E387BFD, 0x478D6298,
+0xE297272B, 0x2EAC81FE, 0x1EB2E23C, 0x8446E818, 0xD972CFFB, 0x31D15BE4, 0x7143BA38, 0x82AD309F,
+0x5C357B7B, 0xC70E79C1, 0x7ED1D83A, 0xFE7145D6, 0x7AD7F64D, 0xCCB0FCF1, 0xBEDB0A9E, 0xDC9901D6,
+0x4FDE165F, 0x6D96A22D, 0x52B3D14C, 0xF58C2DAE, 0x1369CCF0, 0x34AF7459, 0xF91163A6, 0x185AA6F3,
+0x6892E269, 0x49CEF363, 0xE9B233B1, 0x9DF6F6C7, 0x5B4ED2E7, 0xBFD99C38, 0xCCAD2DBD, 0x8F3F0A40,
+0xD80359BA, 0x9CB4AFF6, 0xDC7045CC, 0xBAC20F04, 0x3270BCDB, 0xC02F5C9A, 0x93209F9C, 0x00806AEE,
+0xCE892D58, 0x5719C6B7, 0xBFB656CF, 0x2D60DC6B, 0x7B35A8FB, 0xBE07DB57, 0x34EF0E5F, 0x23B4138E,
+0xFE132688, 0xCE994479, 0x0919396E, 0x25A4A2EA, 0x29E41BBE, 0x4D2D6F7D, 0x4BDE9773, 0x30281C3D,
+0x71616B3B, 0x1A0D6522, 0xEEF2F956, 0xC773360E, 0x0BDBB5CF, 0xE43A424D, 0x623CBD2C, 0x3A72F42D,
+0x8D4F3EF5, 0x4B829875, 0x5B2C6C03, 0x0758C1AB, 0xF76EFD8E, 0xCD36E235, 0x7C476E83, 0xDD1761E4,
+0x1D8D5B77, 0xE6F73EE4, 0x0F46D19E, 0x4C40D700, 0xBA79DCF6, 0xA4683913, 0xA408F195, 0x7C0FD977,
+0x3B3D1E9A, 0x007594AD, 0x4883042D, 0xEB5E9C42, 0xCF08D73A, 0x8D75F17F, 0x004B5F76, 0xB53E93E2,
+0x00AA862E, 0x0CF17D37, 0xB7448AEF, 0x97758E2C, 0xCF464D18, 0xB31BC188, 0x7C5DBE03, 0x60CE99E6,
+0x6A6A45E3, 0x46509CF3, 0x8779F3E6, 0x9612052F, 0x09976E47, 0x22E0D322, 0xB40560AA, 0x442C16ED,
+0x19159008, 0x82401A0C, 0x293F5381, 0xC9C704AC, 0x915D4173, 0xFCE78B7A, 0xA41BF705, 0xFFC51FE8,
+0x62379E26, 0xC9F3F2DD, 0x2F6B9410, 0xDF863CA5, 0x7BF41895, 0x549C28C5, 0x4E9C2B62, 0xD1618FAA,
+0xCC2DFB67, 0x7378D8AA, 0x8DDF5E4F, 0xED69BA5D, 0x5ED23D67, 0xFA2DA5AC, 0x4D1834CF, 0xF622934B,
+0x4B9C5540, 0xC894E710, 0x850B5A43, 0xFF8700D1, 0x3ACC3D0A, 0xB218109E, 0xDEA435C0, 0x15DE7EAB,
+0xA614D2E4, 0xB0CC1C69, 0x8B1F4023, 0x67E8C03A, 0xF247A3F9, 0x89343CF0, 0x76080F53, 0xA1D2F7A7,
+0x27EA2053, 0x64D69B4B, 0x1126AE1C, 0xEF0A4D22, 0x1304836B, 0xEA74F7F1, 0x0DA65EE1, 0x2AC6960C,
+0x33AF80B3, 0x621DEA7D, 0x5CC78B31, 0xB0BDCEED, 0xF25005A9, 0x11B081A7, 0x2AA25116, 0x212C6E06,
+0x1B1E5A74, 0x17601051, 0xFE742812, 0x3A831A14, 0x4050AC7B, 0x9B971DB9, 0x8305EC69, 0xA13D69C5,
+0x63BA4C2C, 0x268EDBDC, 0x56151C8F, 0xD73DD991, 0x94AAE4E4, 0xAC31919A, 0x30404BC2, 0x00558C64,
+0x2320492F, 0x48E4F391, 0x31811D5B, 0xBE8775FA, 0xE3C675BE, 0x9FDE1478, 0x5B3189E9, 0x53CCA5FA,
+0x7599CC60, 0x6C2A02AB, 0x5D8298ED, 0x3859C66E, 0x2201B044, 0x9AB534EA, 0xC9CA07F3, 0x6526AD6F,
+0x3A8D5C2B, 0x268CFC34, 0xD9B15D22, 0xBA5FD923, 0x315748A9, 0x61C4A7F9, 0xA3930287, 0x70D0F0A7,
+0xEECC5382, 0x76A83EF8, 0x9DF49E56, 0x783AB541, 0xC7D4DE63, 0xC7DFA87B, 0xBFE9A14E, 0x1570C526,
+0x1DFB80B0, 0x96CF6C46, 0x16CC8346, 0x7CAB2059, 0x028E56C1, 0x1C889BAF, 0x1608E0CF, 0x1256034E,
+0x31F1ECCB, 0x339D843A, 0x6CD72076, 0x968F65D9, 0x40DAEA9D, 0x33777952, 0x46098BDB, 0xD925EE65,
+0xA5C23316, 0xEC5F40BB, 0xB59E6129, 0x94ADDF1B, 0x8F148A4C, 0x9C8B3E9E, 0xE43912B8, 0x5BEFBA48,
+0x81DD2F11, 0x6A1C3ADD, 0xB20B17E5, 0xDC82D403, 0x477AF28A, 0x8B67E57B, 0xC3CE63D0, 0x6E1A9DE5,
+0x4E7FD821, 0x140BDF6B, 0x51D06A61, 0xB37F518D, 0xF3040D81, 0x59558249, 0x48DCF53D, 0xC3538DCD,
+0xFF29C2FC, 0xD0FC11BB, 0xA1832840, 0x44F18855, 0xCD216ABE, 0x88AEF298, 0x1F4D2825, 0x8A4687C2,
+0xFE971DAD, 0x76D6DA18, 0x223297BE, 0xDE8A36DD, 0x291A0003, 0x815E60EA, 0xAB351288, 0x4936E719,
+0xC3C07B51, 0x1CAB06E4, 0xC1397639, 0x737ACD8F, 0x1FED7EB8, 0x884451C1, 0xE8299E41, 0x47EA049A,
+0x5B34A359, 0x77D8BACF, 0x3C868258, 0xCB4455D1, 0x7AC6FE24, 0xE3A83445, 0x869B1308, 0xB1DEFED4,
+0x31D25C94, 0x95AF33CA, 0x55ACBE34, 0xA0ECD78C, 0x38F8662B, 0x97355174, 0xB35BADEC, 0x53CAC315,
+0x8762529C, 0xCAC8DA8C, 0x7416603F, 0x34728F93, 0xE334D7A6, 0xEA353F15, 0x6C251B46, 0x5B977C75,
+0x8B33FDEA, 0xE0F04DE9, 0x40A40BB5, 0x46130D08, 0x7199A9B0, 0x46380ED0, 0xD96E6222, 0x94BBB2C9,
+0x6A6289CA, 0x2EF18CFA, 0xF909FBB4, 0xFF8FEABA, 0xF6E857C8, 0xF44D0D59, 0xE117F723, 0x54428E74,
+0x7E4A4BC0, 0x36510D0B, 0xF8D1764B, 0xA712A292, 0xC56535F6, 0x4F7787F7, 0x9494D63C, 0x9C340655,
+0x604C6BF7, 0xB0729824, 0x1C9CFFE3, 0xB2022721, 0xB54E0464, 0x8CF4B8EB, 0xF96B5CB6, 0x44D35109,
+0x332EC8DB, 0xAAEDB768, 0x0CA5E9C1, 0x355DBC70, 0x27C1BC8C, 0x063BD3CD, 0x403CE322, 0x789C3446,
+0x03FA5FEB, 0x0C4A26E9, 0x1EF47A7A, 0x205BD3AF, 0x80A317DE, 0x76437524, 0x9EA876D0, 0x3969FA89,
+0x00FEBAF8, 0x788F2801, 0x15E70493, 0x851A3B6C, 0x97F6DC13, 0x897A0B8C, 0x5B72DF10, 0x63AC5B2E,
+0x7DA53A9B, 0xEEB98B56, 0xBDCD1D19, 0xC0136DAC, 0xB34D5996, 0x584195BD, 0x3723ED39, 0x8B320568,
+0x208287CF, 0x67121D3A, 0xDA467CF9, 0xE1743553, 0x4B096A86, 0x1153B8AC, 0xCC8F8872, 0xAE7AAC65,
+0x8C63A1F8, 0x2B9446D0, 0xB6ACFB88, 0xEBDB33C4, 0xAA8390BB, 0x8EFFD004, 0xE64AFC6C, 0x7B4EEC53,
+0x9D8ED08E, 0xBE105E67, 0x7FAD7251, 0x598C90B2, 0xEF6F25AA, 0x6C645473, 0xDE46292E, 0x0CEE99A2,
+0x27C9D105, 0xD142D6DD, 0x3EC26C47, 0x0D88F70D, 0x160D6C7D, 0x3BE24025, 0xA96737AB, 0x1059ED1D,
+0xEFCA9A71, 0x9B4070C8, 0xF0BE10AB, 0x7FEE5AA9, 0x30F46E1E, 0x32791375, 0x8FE94550, 0xD1F4F07D,
+0xCC08DF50, 0xEDF567C7, 0x41E36759, 0xA3CB8B27, 0x75DC1D8B, 0x2D38DCF8, 0xA2575AD5, 0xE3F73577,
+0x78B24EB8, 0x58887974, 0xBB2AF1FD, 0xD9045B92, 0xE864A60E, 0xC4ABF445, 0x3B23D152, 0x4F5C77BA,
+0x13BB0085, 0x631FEFEE, 0xF7996BF6, 0x985A742F, 0x6AA09972, 0xB507FF53, 0xC66F5115, 0x96DE50A7,
+0xC54CF980, 0x72C90ACD, 0x50046A38, 0xB21D0D74, 0xFC2C0CB3, 0x8332D4EF, 0x8B73A82E, 0xA3738D71,
+0x7765D30E, 0xAAD8D8DA, 0xFDB64623, 0x0CA9AB5F, 0x3DD79B8B, 0x3BD06382, 0x138F2147, 0x7C7B801F,
+0x6F210093, 0xE8018505, 0x0466ED7C, 0xD40D8EA4, 0x6D471036, 0xF9F6E347, 0xA8584BFC, 0x7E8656A5,
+0xC8C0277B, 0x6C0E2A00, 0x022F7061, 0x0DA20CA0, 0x1682732E, 0xE487BD34, 0x1D635375, 0x5295C397,
+0x23305EFC, 0x893137AB, 0x3AD90FE2, 0xB9EE87E1, 0xBEE3E6C3, 0xAF341557, 0xA223615C, 0xE1539571,
+0x03CD0771, 0xBBEAAEAC, 0x6672E661, 0xC2C05DFC, 0x72985DA2, 0x96E93A5F, 0xF16E34D0, 0x54C0E51A,
+0x2406A1B6, 0xABB738EA, 0x0DD43531, 0xA0CAC32F, 0x91B7E8C0, 0x317E45E0, 0xB5B75675, 0x866FC181,
+0x6E791CDC, 0xA0187FDF, 0xF3729CE7, 0x3C5207FA, 0xD678C5DF, 0x92AE4173, 0x972017B1, 0xC4876A82,
+0x8443BF8D, 0xFC6B9700, 0x0252980A, 0xA7CB68EE, 0x82D2A041, 0x29B10507, 0xB5D9EC8D, 0x10EE4008,
+0xE09CD7DE, 0x2D7A4B2F, 0x62B590C2, 0x4F5E073A, 0x3D3DB4FD, 0x2ACDCE82, 0x493F3F3F, 0x682FB7E0,
+0xDD6D6866, 0xB96D9DD5, 0x25E1A33B, 0x8DDE5DF9, 0xFFB8AD98, 0xAA54FC0B, 0x73144B98, 0xB481F50B,
+0xE8F3062A, 0xC553316B, 0x6D0A243A, 0x811BB096, 0x92169FC0, 0x88FE92D0, 0xE3699C1B, 0xD00683FA,
+0x2C16F9BC, 0x03A9A48D, 0x6A47302C, 0x6F64395D, 0x07B4E61C, 0x6DAB2662, 0x03D21786, 0x6BF71471,
+0x445139FF, 0x236A8F78, 0x3C01F132, 0x68C36EFA, 0xA22757AA, 0x4B111A90, 0x8522BCAF, 0x683E6961,
+0xAA174927, 0x134CF765, 0x070D53AC, 0xF4D0919A, 0xFBC69F5E, 0x62B6B9CF, 0xC3E60873, 0x3423B8DB,
+0xAD169717, 0x5D32ED70, 0x1D4CE464, 0xF851C158, 0x9C1AF11F, 0x4564D16F, 0xEF373A0D, 0x71BC27FF,
+0x992AAF1B, 0x5A08FFAC, 0x6CCD1E05, 0x1E7B2285, 0x169BB5DD, 0x13221E72, 0x17002DBA, 0x9CC1A834,
+0x2D666F82, 0x55ABD295, 0x32EBCC65, 0xEB01AC4F, 0xDEA65F03, 0x5A3F0092, 0xB65CF457, 0x2CC9FAA6,
+0x7BC5972E, 0x4C2B6CB2, 0xB5901AB9, 0x8A997821, 0x2AD54AA1, 0x5C7B22AF, 0x2C4B818C, 0x24990A53,
+0x96C0AF39, 0x635850EB, 0x68EA4B3E, 0x4C620579, 0xCCA51CCF, 0x0381080A, 0xC2737A84, 0x071FCCB7,
+0xD973CBFD, 0xA802347F, 0x8DC0EEB2, 0x99AC0060, 0x4D443DC0, 0xB786800F, 0xC3E79075, 0x07DF00D7,
+0xAB697E88, 0x1FC10E14, 0x62FAA955, 0x4ADE4D2F, 0x560A208B, 0xE56D6891, 0xE277871B, 0x67499D4F,
+0xFA595BE8, 0x239D56F9, 0x7422A7D6, 0xD7185E9B, 0xD225FF47, 0x1282966C, 0xB30E7AA4, 0xCB3B6043,
+0x975CF373, 0xB3B67523, 0xC1D23B10, 0x48B62190, 0x2E47A004, 0x5302EF3B, 0xB931D349, 0xDAAAAD00,
+0x7790CD15, 0x89D70181, 0x1196EF0A, 0x2A44C107, 0x69F38D4E, 0x2B6C56C0, 0x6152AB53, 0x418B7D96,
+0x8BA8A05A, 0xC5A34B92, 0x4A1EC1F2, 0xF8C3121B, 0x51298A4D, 0x91396C79, 0xEEE479C1, 0x6520AD2C,
+0x37ADBF8E, 0xC8FA9815, 0x8E96FB24, 0x664D1B27, 0x5CB87C44, 0x06B9D266, 0xC85303E5, 0xB5D0BB1A,
+0x13DE7B3F, 0x237DF3B2, 0x2D3B0759, 0xCCBA2655, 0xDD05304C, 0x13A39CC7, 0x3FA2F294, 0xDD17E024,
+0xA35F9017, 0x7CF8A6FC, 0x49B16B4E, 0x6F1D33D4, 0x702244C5, 0x9E6FB602, 0xC75E7CF2, 0xFE32CF11,
+0x25CAA45D, 0xBF5613B8, 0xA21BF43D, 0xD61CF1FE, 0x5A3F9177, 0x5D0F8B22, 0x4F2DECE5, 0x45DA54B0,
+0xBF888D99, 0x9CCDBB00, 0x719CF8D8, 0x12BBABAF, 0x3B01D368, 0x3823EEDD, 0x5E6C1A46, 0x9AD5D532,
+0xE023E40F, 0x4FA7062D, 0x8E01912E, 0x86B58359, 0x0F044596, 0xB546DCB4, 0xD2312A98, 0x1ACF862A,
+0x8E70D0C9, 0xBF67C350, 0x1F3FB5B1, 0x77ECB341, 0xE33E090B, 0xE6D2367A, 0xE39F9131, 0x464342A5,
+0xEB6CBE39, 0x1BFAB20F, 0xBE47DB00, 0x183D3561, 0xE2746518, 0x4799A80A, 0xBE3D9B4B, 0xD3D7C79A,
+0x2BBF3AC7, 0x3AA8E2BE, 0xA50B7341, 0x214DA9FE, 0x41D18718, 0xC9FDF107, 0x9C9036A3, 0x800754D5,
+0xD1F96572, 0x1A8DF676, 0xFD4EAE82, 0x067215DB, 0xBC076FFA, 0x70741D71, 0xC1D79E73, 0x8BFBDF67,
+0x8318DE61, 0x060F3FC3, 0x732822C4, 0xFB8E5C18, 0x4E168325, 0xCC4F39FE, 0x316E7F00, 0xF4C2D75A,
+0xDD050E79, 0x7CA0CDE1, 0x2BEB17DD, 0xD7C19929, 0x4753F9CC, 0x4B15C605, 0xAA444B3A, 0xFFC1D99D,
+0xF397269F, 0x22E127C8, 0x5F30E7B6, 0x9385DFCF, 0x0A21BBA6, 0x9868373E, 0x378BFC33, 0xA5F593D7,
+0x5ACED65A, 0xB8E30C15, 0x00E7AEFF, 0x6447395D, 0x9DEEE388, 0x9CADE217, 0x398D5B20, 0xD29A7AC6,
+0x11840E19, 0xDF101E8F, 0x13237691, 0x31C6B07A, 0x79736145, 0x723A73CE, 0xEA3B27EF, 0x851EDCA4,
+0x727E2DD6, 0x6FB2421E, 0x0FBDAAEE, 0x9E896FF4, 0xACB7C958, 0x13CD34D1, 0x0EFB8654, 0xD482A354,
+0x5C7ACEFC, 0xBE22EB5A, 0x258204F0, 0xBC7F6FB2, 0x75A2236C, 0x307E30FB, 0x62128F27, 0x095F64DA,
+0xFC229DEF, 0xF321957C, 0x15E0CB91, 0x57CC8E64, 0x718339C1, 0x9268DE1D, 0x0C3D8F9D, 0xCE8C7CE4,
+0x3F4F33FF, 0x935FCADB, 0x76744690, 0x4379041D, 0x8B71E939, 0x958F27B4, 0x581CBB77, 0x536F606D,
+0x2F0FC5B8, 0x7E91850E, 0xE6276AE9, 0x49F3CDEE, 0x8A311F45, 0xA0E99EA2, 0xC8BC9CD6, 0x2738254D,
+0xE3554C3C, 0xE4A5B93A, 0xC6601E5E, 0x53CCD088, 0xAAC99031, 0x50625D43, 0xDE173D64, 0xE4EA73CE,
+0x1C8F798D, 0xF57D4BE1, 0x64F1BB22, 0x6CEA9222, 0x160B8EC6, 0xD61A3A01, 0x3043F8A2, 0x31BB440B,
+0x49512B3A, 0x4845F2ED, 0x9AA0BF0F, 0xE8E0ACCC, 0x995F93DC, 0x01BDBB79, 0xEC4954BF, 0xCE88D05F,
+0x5E8955F1, 0x9F9F34CD, 0xC79355BB, 0xE767BEA5, 0xA80B1C57, 0x0A0C44D4, 0x59DDC68B, 0x8866EC16,
+0xBFB40EC0, 0x100A29FE, 0xF8B77EDD, 0x328DF923, 0x83963B0F, 0x8FF1F21F, 0xACD4D5F6, 0x036500E8,
+0x44358D61, 0x9B6E2CE7, 0x5FDC8FDC, 0x088B969C, 0x3B8365BB, 0x0CB79F75, 0xFF524B27, 0xD2F5A409,
+0xB1DF6BFE, 0x93B6D75A, 0x0C8CF3EE, 0xBB4937F4, 0x75BB6236, 0x16A062EE, 0x54649BA0, 0x9B03B856,
+0x8EB228FD, 0x81C402EE, 0xDBBBA239, 0x951B6DF8, 0xB22B4407, 0xF56E3934, 0x71680175, 0xA789083C,
+0x67485CDF, 0x3A5802E9, 0x166298F9, 0x529F962F, 0x1D3C2DFF, 0x80C473DC, 0xAD5F3BD0, 0x68AF9FD3,
+0xA1789C1B, 0xDA9A0D48, 0xA402526E, 0x6B05116C, 0x3F26AA13, 0x8B2E6929, 0xFABE3E01, 0x542C33BC,
+0x9C6AD1FF, 0x7550EA28, 0x6BB234D2, 0x827C2EC1, 0x369FB4FA, 0x954BE4F1, 0x1E2D67C3, 0xF58EB221,
+0x860596B9, 0x1FABEDCE, 0x607A0A94, 0xA97B5E2F, 0xF8C96674, 0x1495A1E1, 0x75A2BDE9, 0xB5FA4EB2,
+0x2EB53368, 0x0E48275F, 0x4C955964, 0x48678983, 0x00CBF7F1, 0xC25D5AA3, 0x3D2D949D, 0x8F25DFFF,
+0x77B1FE51, 0x720098F9, 0x6CE37BCC, 0xDD8203D6, 0x6621C9EB, 0xEA3B17D5, 0x9436C5A7, 0x7CFE03F6,
+0xBC6B96C9, 0xFFDF0064, 0x4D5CE5B1, 0x107D4AA1, 0x9DD58D53, 0x99D902C5, 0xD030F298, 0x20607ACE,
+0x17A24B05, 0x65BA0CE2, 0xDA0D84D0, 0x67417321, 0xDF108C38, 0x4D276534, 0x12E0A61B, 0x7AA36C63,
+0x898F0B6A, 0x9F02CEDC, 0x664A357C, 0xCF1083FB, 0x81481FBB, 0x1F88A400, 0x23A72D8A, 0xA380CF15,
+0xB42BCC21, 0x7DB4E9D6, 0xA873F34B, 0x5FB61DB4, 0xAFF2C633, 0xD6B8E9D6, 0x30E74E90, 0xB926B066,
+0x9296EDD6, 0x204D4FE4, 0x7EB2C9C7, 0x845A520C, 0x6B22B02A, 0x68E44FEE, 0x9D2AA135, 0xF9C902E3,
+0x58AB20EA, 0x359A0123, 0x436A710B, 0x1A54F77F, 0x780073EA, 0x27EEEDE4, 0xFBCBAF66, 0x96D796B5,
+0x9213DE37, 0x6605CA45, 0x4C371B3B, 0x91D79764, 0xA20DB3BD, 0x684B4DB0, 0x606DA970, 0xBDC30AA2,
+0x943852EF, 0x4A2BE7C9, 0xE42DC1A1, 0xD23ABE01, 0xEF307757, 0x54998E19, 0xFEEE0810, 0xEF01F2DD,
+0x822CB0CE, 0x55470FBC, 0x275FB17F, 0x20CBD332, 0xD330FAC5, 0x82260E78, 0x42E47683, 0x9383D845,
+0xBD35BCDD, 0xD68D98A0, 0xB9C1AB7C, 0x27E71EA9, 0xA71B031B, 0x5479D730, 0x6B866EC9, 0xB448E94C,
+0xD3035D24, 0x1C3E32DB, 0xDA79541F, 0x20ABFCCF, 0x1BAC9C9B, 0x692346BE, 0x606CD497, 0xE0F70F39,
+0x214CF3FE, 0x2556991B, 0x34C30461, 0x69F3AC47, 0x0E617B9D, 0xF30D21CF, 0x14BDC827, 0x64F63D8E,
+0xBEC3FFBC, 0x13DEA795, 0xBF745295, 0x35290F4B, 0xF535ABF3, 0x07B559A9, 0x07FA0FD7, 0x0CB177F3,
+0x1AF51C5B, 0xEE4F8748, 0x5F6B3C5D, 0x416DAAC8, 0x69EE9A0C, 0xDDF42DAF, 0x37E02084, 0x87B36BE6,
+0xCEB7AC61, 0x506B82B5, 0x4361EDD4, 0x96F980F7, 0xA2A722B7, 0x78051C59, 0x1C6DB690, 0xDCDE8DF1,
+0xCEEA2F98, 0x241A5701, 0xBA7FA3B2, 0x6FA53005, 0x04675679, 0xC4499534, 0xD533820D, 0x679E8961,
+0xE0D1029E, 0x5B599D68, 0x671A8EAE, 0x5DF39DDE, 0xEA5719D3, 0xACED82D8, 0x9149BCE4, 0x9C505A58,
+0xAEB5F0F9, 0xAA360A23, 0x5D091D88, 0xCDB3E429, 0xD551F854, 0x4CAB9BDA, 0x4F853C00, 0x1BCA7FBD,
+0x20994F30, 0xD0D65098, 0x39C6F520, 0x56EA1EA5, 0xA5F230D7, 0xBFD461B9, 0xECCFAA8D, 0xA6AFC6B0,
+0xE8085C0A, 0xC2A85D7E, 0x8D83DAB9, 0xE7FF862A, 0x3CCE194C, 0x211F0AAF, 0x320DF0ED, 0x93F868D7,
+0xF044F3AF, 0x4F558044, 0x0F03DDE4, 0x875295AC, 0x30A6D917, 0x5F032E7B, 0x1A0FA6D8, 0x2F325F7D,
+0x9CD2C706, 0xA081321B, 0xFD55C2DC, 0xC2380ADC, 0x1E81505E, 0xFE876244, 0x60B3B711, 0xAE28CD83,
+0xD81E18E1, 0x1EFF223B, 0x1BCB2E42, 0x5D383376, 0x6D873C5E, 0x0125B2FF, 0x3CA21017, 0x78909CC7,
+0x1ABA0DAD, 0xD166A3DB, 0xF20421A4, 0x3D42A75B, 0x955BAE19, 0x312D8175, 0x77535FC6, 0x58C012B5,
+0xC427761C, 0xDE0D6EA7, 0xFA57DCEF, 0x27F08509, 0xD5587685, 0xCFE7F8D9, 0x74DB29DC, 0xFF707A5C,
+0x6D2FBDBE, 0x3C10F477, 0xDE314AAE, 0x2A5DF404, 0x4A1A47DE, 0x64EB1429, 0x7D397046, 0x6FA787C7,
+0x018291CC, 0x188754D7, 0x49C797C8, 0x419F80EC, 0x507E88F2, 0x4EDE1750, 0x35A91E13, 0x8297C26B,
+0xA4A6027C, 0xA4530595, 0x8886246B, 0x427316AA, 0x67FC6702, 0x85C85747, 0xEDF19DC2, 0xFAEB8E26,
+0x754A8627, 0xA08887E2, 0xEA1E9CA1, 0x4CC863A1, 0x2ACED243, 0x53B814B0, 0x5A54A072, 0xEBE9C4A1,
+0xD593B504, 0xFD6A217E, 0x5B081FE4, 0x24122180, 0xB0290498, 0x078BE597, 0xE73160C1, 0x99741208,
+0x3EC7223B, 0xF701AD59, 0x6A3F8858, 0x6C3A0E1D, 0xD044F53B, 0x18DAB579, 0x2C7B6ABE, 0x6132A2BA,
+0x251E6070, 0x3F4163CF, 0x303226E1, 0xB2C500FD, 0x5D7456B4, 0xA0A25893, 0x09F03A81, 0x83E9E017,
+0x2E1EA8D8, 0x85227C2E, 0xDDD8060D, 0x1A2CCCF5, 0xF1DDC82C, 0x36E2A65D, 0x0C19B7D9, 0x9F52943E,
+0x5A1F8CC3, 0xEC737C32, 0xA0A0530A, 0x87D11F70, 0xD9484CBD, 0x4469012C, 0x52917A13, 0xC413DDB8,
+0xD5F7DB7D, 0x23B9544E, 0x64389DF8, 0x26E9B322, 0x4E7DF72D, 0x908C3E9C, 0x235B3087, 0xA86EFF5E,
+0x5443D79A, 0x2AD1284A, 0xAD4E4F73, 0x1FFA3965, 0x271E35D3, 0x531B34B6, 0xF46D8ECA, 0x5C12EB2E,
+0x56EBA3C0, 0xDBDC29A8, 0x6207C1D2, 0x85A24247, 0x0ED48E85, 0x0BB0D006, 0xF35D1956, 0xF64C8D93,
+0x831DBA6F, 0x0B175172, 0xB5395C4C, 0x0E77208A, 0xF0EED8BB, 0xCE8E0F15, 0xF322AB36, 0x6B142188,
+0xFE82BA80, 0xBC76704C, 0x3A9B55A5, 0xFCBB3471, 0x3C7F2C9C, 0xE018FDA8, 0x72D0D1A6, 0x40AE825E,
+0x3E68DB51, 0xDDCB8DA0, 0x6B0D9B28, 0x05DF5E52, 0x35A17D08, 0xC1AC4679, 0x3CC473F3, 0x3EF5189C,
+0x16121BC0, 0xF7D86C26, 0x466475F9, 0xF13EBD1F, 0xE721FACD, 0x10830BA9, 0x6A3E1505, 0xDF682845,
+0xA537346A, 0xA9858461, 0x24DDEC3C, 0xB75BF5EA, 0x36FCF546, 0x2E6B07BF, 0xCB4C2074, 0x480947BD,
+0xE8F6F40F, 0x00E704C5, 0x7559998F, 0x42195987, 0xA7276666, 0x958BE657, 0x0595C0A9, 0x8A64273A,
+0xAE4327BA, 0x813311EB, 0x333F2E4C, 0x981580A6, 0xC2122A7A, 0x36D723C6, 0xFB5E3E91, 0x60EA6F90,
+0xD674B458, 0xD7891CB5, 0xE25CDF71, 0x59EB56BC, 0x66934E66, 0x3EEC0250, 0x113B23B3, 0x172A9ACB,
+0x92A83BFB, 0x505B0049, 0x92A81CF6, 0x05EC2143, 0x11C6A513, 0x2EC28C46, 0x25424252, 0x3864CD44,
+0x663678E9, 0x0FAD454A, 0xDFDB35F9, 0x04B7EC34, 0x19F646E0, 0xA1BE0413, 0x5E6C63C0, 0x21557992,
+0xE989867E, 0x6FC837BA, 0xBA596F9F, 0xE13BD158, 0xFEE6DC8C, 0xC31CC35E, 0x6F47A087, 0x61E8BDAE,
+0x7D8F47E6, 0x2995F034, 0x1F4C4C1D, 0x45DC67FC, 0x476E2C61, 0x876CE42C, 0x2DD0B1B6, 0x9C8ADDB6,
+0x95C47227, 0x2960C6F5, 0xF101EDB4, 0x051F8E5F, 0x8AA909DB, 0xA30AD9E1, 0x4F09E05F, 0xA44968B1,
+0xCDCF6820, 0xCEA8B17D, 0x847BAD55, 0x6ADAFEB5, 0x5E18B04A, 0x79761FFD, 0x93DC2EB2, 0x2BA7451A,
+0xEC0DC3C5, 0xB2CE0B7F, 0x8234C08C, 0x00B48BC5, 0x084071F0, 0xAE6332B9, 0x1ADC403E, 0xC96B7F25,
+0xD26A98CC, 0x47FDAA01, 0xF4C0D545, 0xDADDE411, 0xB29D81F0, 0x3CB930BB, 0x602D5CAA, 0x1A29E39B,
+0x0E36914D, 0xAA201CFC, 0xBDD919D6, 0x3094620C, 0xEEBB9EBB, 0xE2E2DF8A, 0x414500F1, 0x287C2FC2,
+0x5C9A559E, 0xF0921F46, 0xDE880F80, 0x5DC1E061, 0x42C69A04, 0xD1D73FE6, 0x7E9C7219, 0xC413C6D6,
+0x179C0142, 0x7F1838A4, 0xA1665C37, 0x8D8B62E9, 0xE50FE67C, 0xBC0F090F, 0x904AEC7C, 0x2D777934,
+0x3910D7C7, 0xB06E0C89, 0xF417EF66, 0x7801EC2F, 0x5616E87D, 0x67C7CF3C, 0x712E07E7, 0x76F807B7,
+0xB002A2D8, 0x5BC43E05, 0x58D7E2B0, 0xBEA776AF, 0xA417311E, 0x2595E228, 0x13ED2560, 0xBDC002DE,
+0x9413606F, 0xE87EFB91, 0x1DC8EF8F, 0x6E02D68C, 0xDCB18575, 0x46BE2CBE, 0x74E545A2, 0xA14795A6,
+0xA464F25A, 0x7DA91C09, 0xDF3BD9EF, 0x4723384F, 0xCE102CCF, 0x4E96558E, 0x1AE2B115, 0x52A881AF,
+0x3E5ED6FC, 0x19DC33EC, 0xD520252B, 0x6E3E9106, 0x2E4C811C, 0xD1806A5C, 0x42F893F2, 0x3B6BD58B,
+0xC97DBA84, 0x5DF275EA, 0xA2AE97C1, 0xEC8AE632, 0xAE2AED24, 0x6627638B, 0x409A8525, 0xD6CFAAD1,
+0xFBB28F84, 0x4BA513C7, 0x1A6F6041, 0x24820FCF, 0x8191BDE4, 0x63419BEF, 0x571B6A39, 0x5D7DBEE5,
+0xF33AAD1B, 0x81B9E0C8, 0xCF61DECD, 0xAFB478AC, 0xE7CAD79D, 0x969E894B, 0xEB8DDE84, 0x1558C62E,
+0xCF2690FE, 0x1A64A897, 0xFD5C6AB4, 0x0EE4B5A5, 0xA7377F9D, 0x1835F8EF, 0x086BB7A9, 0x8B48C618,
+0x785D10C8, 0x70B32A02, 0x5CFA00B8, 0x9D00A26B, 0x95D41261, 0x382B91D9, 0x123F38F0, 0x036284B6,
+0x539130E2, 0x5275974B, 0x85D932E6, 0x65F8554E, 0x4E6DF122, 0xB3BFE89E, 0x31903EAA, 0xF7475443,
+0xE0D33611, 0x8A06C51C, 0x78663E1E, 0xFD356C35, 0xC16CF5F6, 0xEB3AB629, 0xC90D002B, 0x278793A3,
+0xD5B90E6E, 0x66281A87, 0x7F7DA095, 0x84BD0304, 0x3A47AEC0, 0xD0F1417D, 0xBF01F207, 0xFFAD4CCC,
+0x754EDB30, 0x483426F8, 0x0FB6BCE0, 0x26BBC3C9, 0x3BF10E31, 0x702F7F5E, 0x7CD28BB9, 0x6DA35DCD,
+0xB99C2B58, 0x29DE31A4, 0x597ACB5A, 0x29724DD2, 0xED88573B, 0x71A654DC, 0xEEB56734, 0x471CC595,
+0xB2494EE8, 0x9B8289F9, 0x5CBAA8A7, 0xEE89D51B, 0xEC759366, 0x6D77D6D8, 0xB793C755, 0x1993F1BF,
+0x55D295FA, 0xEDE034E4, 0xE64BE358, 0xFE384B3A, 0x12572C80, 0x078C5839, 0x975352DF, 0xAA5E1C90,
+0x6895C68B, 0x148533FE, 0x8CCDFDF4, 0xF3ABEC82, 0x98EF0249, 0xBCA61FDF, 0x7B68F439, 0x2D442637,
+0x7DD41CF7, 0x0309DC29, 0xEB33F3A6, 0x403F1DEF, 0xA03ABC56, 0xFDDE88C4, 0x27E36F29, 0xFD7B615F,
+0x23487BC2, 0x6D54DDF3, 0xDA114D83, 0xC87CCB75, 0xEF8ED28A, 0x04C1D362, 0x5B1771FC, 0x0FF68646,
+0x5F5B2AA1, 0xE8285C67, 0x07F9C945, 0x91AA0CC1, 0x0F9C2D08, 0x4F73C7A7, 0x79D213DB, 0xEB1C0944,
+0xF8FBE0A4, 0xBAAACCDE, 0x7DE71725, 0xDEA6FD92, 0xCB3763C1, 0xE2AEC2AD, 0xA529CBAA, 0x5388799F,
+0xDAD56912, 0x61FFC12A, 0x8121540F, 0xB49FBBE2, 0x42CD3F0E, 0x85915DC3, 0xA068521D, 0xF013282F,
+0xA2F5B19D, 0xF9A419B0, 0x033AB598, 0xBEBC890F, 0x12E214CC, 0xD7DF3537, 0x0738A57F, 0xC32FB7A7,
+0xC3647463, 0x6F6AF86A, 0xC8A5F5EB, 0x3F3969F3, 0x905B9350, 0x09A183DA, 0x025D1638, 0xACF4540A,
+0x9311D91E, 0xBEBAF1EF, 0x35C8AB84, 0x59A8E29A, 0xF665A0E4, 0x039DCA31, 0x6BA49520, 0x0EA5EEC2,
+0x76AB2AE5, 0x7BB101E4, 0x5B9C1385, 0xB7884E7E, 0xD0D3179C, 0x55884211, 0x325C37A6, 0x7818CBA5,
+0x2CA74EC9, 0x8CE055B4, 0x69FE6158, 0xBB11BF6E, 0x21730B47, 0x533BF028, 0x84D0A972, 0x42A0A072,
+0xF145A0ED, 0x1726AAD1, 0x9ECD4C28, 0xAFEAB898, 0xFD62ED9D, 0xD51582DF, 0x8B66D17A, 0xF4AEA174,
+0xF4817D44, 0xC2E7BFCA, 0x44365B5C, 0xB60A3D7D, 0xF8AED025, 0xF47A0FD2, 0x8F06A778, 0xBFB6DAD4,
+0x4140A0CD, 0xA15BD68C, 0x350393F2, 0xEA6E2054, 0xE7976B2C, 0xA38FBF05, 0x0B01AD32, 0xD3F3B5F0,
+0x2DFB5A26, 0xA9BEF40A, 0xE7D1CF76, 0xCFEF7434, 0x18C8098D, 0x7081AEAB, 0x16545537, 0x8520ACE4,
+0x44AB3C13, 0x648F238B, 0x9829FFB0, 0x6268D173, 0xCC90227D, 0xA7B33673, 0xED211C29, 0x726DEEB0,
+0x6D74E6A3, 0x95A56DF7, 0x08F7B2C0, 0x98B8AC3D, 0xF27AF96F, 0x7785CD71, 0x54FD7D56, 0x6A5756A1,
+0x61C2CE2D, 0xBB903A06, 0xF3C61FAC, 0x461420C8, 0x2D98696F, 0x4C27AC75, 0x717AF0FA, 0x17901721,
+0x984944AF, 0xBA9F7046, 0x0F40C43B, 0xE0F5995F, 0xA3A86486, 0x2BABA277, 0xFFC124E7, 0xD1784E16,
+0xE68D3C7F, 0xD07C4845, 0x2C40DE10, 0x11D32886, 0x739C38E5, 0xA6648302, 0x70975E9D, 0xA3915A11,
+0x03E57FA2, 0x6B802E96, 0x050A3334, 0xC84B6784, 0x19D27B06, 0x5E652D5D, 0xE1068392, 0xB683C9B0,
+0x5E0D51A4, 0x9E8ACC4B, 0xF709F5F7, 0x83E03C83, 0xFC9400DB, 0x1506AC5B, 0xF28E8819, 0x8E4A9EEC,
+0x38722E30, 0x59EC81D2, 0x29FC71A5, 0x6BD4B84A, 0x814C0E4A, 0x4122003A, 0x481AB59A, 0x6D9A0751,
+0x20816F3C, 0x0750172F, 0x6262299F, 0x0BE95420, 0x4CFC504A, 0xC0161F5D, 0xE8A50BB8, 0x8D5B0A49,
+0x3A66CAAF, 0xCF6895BF, 0x30C49A14, 0x9C971611, 0xFADAD172, 0xF4505969, 0x5D05F3E2, 0x26108954,
+0x0D38FB7A, 0x357423B6, 0xE84DA98F, 0x60F1AAAC, 0x9E95E865, 0xA343ED4C, 0x65379BAF, 0xD1A23F48,
+0xBDF5E2AD, 0x266D9A5D, 0x022F11F6, 0xBB4322EC, 0x74E1C37F, 0xE08FCB12, 0xF8631EB4, 0x083D5906,
+0x2746DF43, 0x9BF19F53, 0xA52CDACF, 0x07B1969D, 0xF5129C3E, 0x13F5A085, 0x405C60F2, 0x6F723B78,
+0x72399557, 0xCAA30994, 0x33DE86D7, 0x9C5D7EA2, 0x9E018DFF, 0x51EFA71A, 0x08B0C4EA, 0x8C9E4EC1,
+0x56720205, 0xB7F1E40B, 0x2C1ECC32, 0x8098AD3B, 0x91B4C3C4, 0x2E2458C0, 0xDFBD2826, 0xA6304817,
+0x4B6F6A86, 0xC360E071, 0xDC3B7519, 0xF8582520, 0x66AA0F38, 0x5C871BB1, 0xA98DFC94, 0x4F53E1BC,
+0x1C341F9F, 0xA7E644FD, 0x29C4FC3F, 0x993DCFA9, 0xE1E44B61, 0xFFFAA7C9, 0xE11E00DC, 0x77AF2D84,
+0xFB80DB56, 0x47555759, 0x810A4CDA, 0xAE27B49F, 0xEC29D5BA, 0xBE7ACA3A, 0xEF8DB840, 0xD5169D2F,
+0x93A45738, 0xADFA53C1, 0xDD3F789E, 0x1B867171, 0x0CBDB2CC, 0x77849E03, 0x30E59E8A, 0x73715D1F,
+0x6C260ABB, 0x8317853D, 0xE3D19B45, 0x50870B19, 0x6F22EB00, 0x4E3E5E71, 0xF2FC00A8, 0xAC2456FB,
+0x465AD3F2, 0xEAA44BE1, 0xC00E92A5, 0x45AC9B7D, 0xE2ED517B, 0xEC220119, 0xECB8C80F, 0xB9877749,
+0x6928DEE0, 0xF6E28760, 0x55921F7A, 0x014BFC5D, 0xE466C914, 0xBC8AFE44, 0x2D1FCB29, 0x847CFD9C,
+0xCC3685F9, 0x01435728, 0xC2E9ED74, 0x1CF8CB3D, 0xE496F17C, 0xFE41EF4E, 0xA16BEE88, 0x9EE51246,
+0xAE0F5A78, 0x173F91D1, 0xA2D8304E, 0xE1342DDD, 0xD50BACC3, 0xF579B35C, 0xB4D0F355, 0xE196643D,
+0xDDB877B9, 0xA2F553C3, 0x02C3937B, 0xDF798FCA, 0x1F5D2C3B, 0x1D34D242, 0x6806AAB9, 0xBF528CB3,
+0x1AF9674E, 0x7BF9CC12, 0xD4DE6627, 0x46CD7B7A, 0x73364F86, 0x34AE6780, 0xFB7ED545, 0xA507D29A,
+0x572C6570, 0xD31E9DB3, 0x79C6C3E4, 0xCD34E630, 0x51A9222B, 0x57CFC9CA, 0xEC0B61E4, 0x8EFB9990,
+0x8DE26F90, 0x92245676, 0x8BF198C2, 0x9ABE9D8D, 0x02B78E99, 0xA0AEC289, 0x95D08A2A, 0x0664E2F2,
+0x004C0E8D, 0x24EAF14B, 0xE95C14B5, 0xC097034F, 0x164E43BC, 0x00A1A94B, 0xF4232AA6, 0x94AE61E4,
+0x3CA492BF, 0x99C2F4C9, 0xE5272B6D, 0x4BE6B1C1, 0x2FEE2341, 0xE2C6AFE3, 0x61E25F26, 0x337480A0,
+0x5D5F2D48, 0x493743E8, 0xBF85F751, 0x11AB8DFA, 0x13C05A34, 0x368D253B, 0xEC6B442F, 0xF6E22236,
+0xC37E8C95, 0xC674C125, 0xF6A9B297, 0x8106BC01, 0x3CAB7979, 0x89F886DC, 0x00C182C5, 0xBBA9EA64,
+0xCD04BD37, 0x6E2114C8, 0x5D007AFE, 0x5FB4CC0E, 0xCCF24B6F, 0xD8239ED2, 0x72FBF010, 0x17B3B031,
+0xE31B75F7, 0x6E380A84, 0x43055C83, 0x0A590F8E, 0x0EE366EC, 0x88146C54, 0x1FA77EDB, 0xBD3D4957,
+0x4101E15F, 0xF99F92FD, 0x14037C22, 0x704F5282, 0x0985E9E4, 0xCCC6A6D1, 0xAC4ADC96, 0xB3483171,
+0xE5BDE69A, 0x3C1D1907, 0xFF993B9D, 0xD38C17EC, 0x58628C4C, 0xFA83A21A, 0xB8801D32, 0xBC3A5C09,
+0x98AAD1D1, 0xE566A1F3, 0x1E59AB28, 0xDE3981F4, 0x3398B506, 0x56159893, 0xA6E561E0, 0x90D49788,
+0x9CEDB148, 0x7E321E3E, 0x0DA3BB6A, 0xC9600F5A, 0x73B4C661, 0x53C2CC0B, 0x74AD4767, 0x3944D5A5,
+0xCB052163, 0xFE837AF6, 0x4F194493, 0xD1DCFE53, 0x14F720C4, 0xF72DE693, 0xD03E6F2B, 0xED7C6551,
+0xF7466755, 0xD05A0E71, 0xCB3DD973, 0xF9760DAC, 0x446314C1, 0xE72A3796, 0x0000B2B4, 0xF94BE2F7,
+0x70347C6A, 0x506961E7, 0xCE5F389D, 0x151C352D, 0x661C007F, 0x012725ED, 0xDE317A4B, 0xD6106150,
+0xD65CA167, 0x4BA2B5BA, 0x9E75E427, 0xD54BE884, 0x0F542554, 0xD900E37C, 0x56D6A797, 0xC2C960A5,
+0x307D4E76, 0xF80DD2AD, 0x84BF17A9, 0x29A9AB6E, 0xEEFC8213, 0x5507A3E8, 0xFC760155, 0xA8ED293F,
+0xBCD2A45D, 0xE9847BDA, 0x077A16E9, 0x78ECB368, 0xDC80849A, 0xB32B5C7A, 0x904AD718, 0xD48F387B,
+0x4A87C1E4, 0x64160BF5, 0x4318A1A1, 0x5D3BC0CA, 0x75CCF27E, 0xFDE74B99, 0x3D15C16A, 0x66E5924F,
+0xBAA39141, 0xB7FA3E70, 0x0F237E4C, 0x42E17CBB, 0xFC6933FF, 0x81FFD10D, 0xE5231C06, 0x5FA33043,
+0x2CB59DAC, 0x9C36D09C, 0x5F9D6867, 0x4F5F5058, 0xA9F66B7F, 0xFD1C8F83, 0x27D85962, 0x54E33D74,
+0xBD99F739, 0x24DB1C73, 0x70FB4433, 0x8982E6F6, 0x62B4541A, 0xFED573C5, 0xEE35E484, 0xAF4D475A,
+0xDB1ED407, 0xBEB7D9AE, 0x2E9C798A, 0xCD830401, 0x4879E382, 0xA87E130E, 0xAF4A0F2A, 0x9EB81D07,
+0xE9D6752C, 0x3C418B6A, 0xF2E187DC, 0xED7B8AA3, 0x35DCC657, 0x46D2621D, 0x7E698BE4, 0x31B8DC6F,
+0x56472C35, 0x73D89996, 0x0C22096F, 0x9A928513, 0x1E0F3D93, 0x4D97076C, 0x8E03FA95, 0x7BB29E4F,
+0x1361A400, 0x284E51DA, 0x06D1CF5D, 0xDCA831D0, 0xE229CE2E, 0x7D80A2FB, 0xCBB34A0C, 0xED0ADC2B,
+0x11A50774, 0x22E1BF98, 0x47092468, 0x983D2FD3, 0x4A8AFB17, 0x88E6E45B, 0xC93C86A7, 0x9D07D5E6,
+0x9D423E67, 0x339F75E1, 0x7DCD5642, 0xE157205C, 0xD22CE01A, 0xCCA9EB87, 0x3C8195F2, 0x6D1E4C32,
+0x8E9BC1DE, 0xB46F0AE3, 0xB3AC881E, 0xB040177E, 0x7841C7DE, 0x9AE2CCB4, 0x4C122735, 0x54FB154F,
+0x69DF1F69, 0x404EF749, 0xCDE542CF, 0x8976524C, 0x14CED881, 0x79E42E44, 0x33A6E992, 0xA22909CA,
+0x13D94D64, 0x5C9D5A95, 0x6169066C, 0xF199F08C, 0xC3B63BBC, 0x4A402EC1, 0x5CEB6A3B, 0x242BE48B,
+0xD1DD6EBB, 0x238C1671, 0x09744B2A, 0x1B74AF8A, 0xB46C7085, 0x1E8B3AD8, 0x05AA99A5, 0x611E69F1,
+0x6006FBB8, 0x99FEF2C7, 0x8EBDEDDC, 0x7D48E549, 0xD3A5EF0C, 0xFB212726, 0x8D1BE03C, 0xE5A36FD4,
+0xAC843BF1, 0x1A62C448, 0x5363299D, 0x7C1CCE62, 0x9CA7C418, 0x77486DE8, 0x23D98201, 0xF82FE8D2,
+0x015842D4, 0xFE86FEFE, 0x9194F5A1, 0x2EC87D13, 0x5727D96A, 0xCBC6B49C, 0x4A424786, 0xA2BCD077,
+0x86BF3261, 0x51FC91A0, 0x71A06A9B, 0x5F317082, 0x7A8E2917, 0x43B58F9B, 0x8AB73BD5, 0x6ED6EA28,
+0x3508B1E7, 0xD112964A, 0x2EBC5EDB, 0x5A12C214, 0x4F626CEA, 0xDC6E0215, 0x65C2D97F, 0x274287E6,
+0x0BEC89AD, 0x5AAF2EF3, 0xF0D431C7, 0xA78B5F4A, 0x2A0F2320, 0xCDDB7AAB, 0x03B9FCDC, 0xFE8A3683,
+0x62A3F451, 0x7A7DC508, 0x9B5928EC, 0xAD1499A3, 0x4BC9B683, 0x692EC20E, 0xADB9564A, 0x86EA14DA,
+0xFAFA7D22, 0xAE31C55B, 0xA62F17CC, 0x04AFF48F, 0x1E92A86A, 0x79EACED9, 0x805B630B, 0x4BF49DFD,
+0x6F4A7AEE, 0x9C7CA0B9, 0x2545036A, 0x89B6AF94, 0x0FF3E8AE, 0x63433303, 0xF214901F, 0x8C8BAAD0,
+0x65F85D3B, 0x59B36B36, 0x0FEAA887, 0xF649DEAC, 0xC7333026, 0x401D9AC9, 0x9A27C98F, 0x1842DDC9,
+0xEAB893F5, 0x5CB15DA2, 0x5823C2A9, 0x90484B8D, 0x49E97817, 0xE367177F, 0x91702341, 0x3EFFB945,
+0x348E635E, 0x58083E7E, 0xD15A8428, 0xDAB361D2, 0x0174E5B7, 0xCA71D69E, 0x00F5122E, 0x70D970B7,
+0x75DCD62B, 0x9D8C7796, 0x7E96229A, 0xF08BF172, 0x0C22320A, 0x20674A44, 0xF8724175, 0xA9771ACA,
+0xE240D4BA, 0x8D7F5B2A, 0x56BCE1FE, 0xF53B0DAE, 0xAC0AB511, 0xB9377C2B, 0x0F51A4C3, 0x921E2BFB,
+0xE61D3CE6, 0xCC482621, 0x13FC3172, 0x37D03F3C, 0x955C2259, 0x3509C496, 0xE895EC9E, 0x4223A76C,
+0x98DD4386, 0xEF1630A7, 0xA9D5D7DD, 0x59DCCEE4, 0x7729082B, 0x670E017D, 0xA41B9D75, 0x6FBB877F,
+0xCAA82CDC, 0x960C2843, 0x15C84B7E, 0x9111AE3E, 0x0C968C7C, 0x06F71115, 0x41E0C9D5, 0x13C597D6,
+0xED47B4AA, 0x9CC1478F, 0xE18D011C, 0x3033733C, 0xFE266947, 0x1BEC38CC, 0x742B0B45, 0xEE1D5AFD,
+0x69E936AC, 0x7AD8A0FD, 0xDC3A3175, 0xA4F71FFE, 0xD9702F04, 0xA42B3C3C, 0x4C6BECB4, 0x9743F94A,
+0x3698148D, 0xE965AB25, 0xD727AC00, 0x21B0BDE5, 0x63A26BB9, 0xAEE2BA8E, 0xAC6D12A8, 0xE189F65D,
+0x185C9CCD, 0x08091D3D, 0x6D5C97A3, 0xE8D4DF61, 0x9AABC501, 0x17BF097A, 0x64B43C56, 0xFBB525DC,
+0x91DAA05D, 0x39343139, 0xDA4218F2, 0x451CD5C5, 0xDF15798C, 0x2996B6C8, 0x1B67909B, 0xF9E2DCD8,
+0x1ECE9686, 0x7AC950B1, 0xC7F55195, 0xAA0F8B1B, 0x9863A065, 0x1450B3A1, 0xB5461EAC, 0xB59A9D93,
+0xB71FE9F9, 0xB436A914, 0x3A983DE1, 0x579933CD, 0x338BB063, 0xB1E4B764, 0x81B2A16A, 0x7FA8F3A8,
+0xCF16D71C, 0xA410479B, 0xF5F05B7F, 0xC5F34096, 0xC67A58D9, 0xF09E58BC, 0x1FE37504, 0xFD529DF3,
+0xF7E410A4, 0xF7985A49, 0x932BE662, 0x322F5520, 0x736EE2BA, 0xEDDF0E08, 0x4AFCB5EA, 0x8F0A3273,
+0x0B496D84, 0x3C198DAB, 0xE06FF6CF, 0x454A7C9F, 0xEFEF8BD0, 0xC85F2F6D, 0xAFE8AC17, 0xAA79EB3C,
+0xF49FBF20, 0x00DA3CD9, 0xAFE31603, 0x06D3585E, 0x02078006, 0xAFDE2791, 0xD0A96D13, 0xA8B73BF6,
+0x95094992, 0xC98CFDA6, 0x369DB081, 0xD961D3D6, 0x52EB0DF0, 0x8790E83D, 0x253CD917, 0x7EE2E3AA,
+0x17483DAC, 0xEC6FC539, 0xFAEB80A5, 0x0457DB34, 0xF8006FDE, 0xD55EEE86, 0x4C54743A, 0x7CB47E34,
+0x92FFA7CB, 0xEBC52972, 0x7409A7A5, 0x186B58E9, 0x28EB8922, 0x3C104FDF, 0x7E94CA0D, 0xEC5ED6D9,
+0xD6E80A89, 0xA6EE035D, 0xF4BFBD6B, 0x5B3BE436, 0x5E5B65C0, 0xB7A623A4, 0xD593B19D, 0xBCDCDE00,
+0xD808B6BA, 0x5D7885DC, 0x785FF9E0, 0x883EAAC7, 0xECF8FB1B, 0x65792D2E, 0xCF8EA18B, 0x7E43B69E,
+0x93F5A40C, 0x8A77B5F6, 0x68789A20, 0xFF5456DE, 0x86C41A3B, 0x2A9F6085, 0xA3BA1502, 0x0299FA5A,
+0xFA823A35, 0xDC9E21C6, 0x45174414, 0xFBDDEF4E, 0x65D5A42C, 0xAD9C7A40, 0xB8A9CE7C, 0x15532268,
+0x3065612E, 0xD24F06A3, 0x15D5B06A, 0xC137E461, 0x2B3EFAA3, 0x6196BA39, 0x4146E0C0, 0x3BB88789,
+0xD1AED24D, 0x54A975C5, 0xA5BC25CB, 0x5B08EE75, 0xC7FAA73D, 0xBE25EE4B, 0xCEF318B8, 0xD133652E,
+0x1A4E7125, 0xBB7C2C4E, 0x92000A29, 0x2D3EB449, 0x5DC929B1, 0xA134C0EF, 0xD7BB4A2D, 0x04697C1B,
+0xC6734E9A, 0x6F296C7F, 0x8A5558EF, 0x1FE686E4, 0x9DAB1545, 0x898612DE, 0xF0892053, 0xA8C0FA33,
+0x6A67A562, 0xBA60E1F0, 0xC03BBC1C, 0xB0EC9FF3, 0x9A101CCE, 0xF1EC26A8, 0x43E02214, 0x7CECD854,
+0x82DEE424, 0xA03E873F, 0x2F359EA1, 0xB73E1A92, 0xABF5558D, 0x9AAF0B56, 0xEFE3670C, 0x3891A4CC,
+0x2F394B5D, 0x75F3BC17, 0xA99AE38D, 0xFBB8636E, 0x508DA8A5, 0xCC4166C0, 0x50B445EF, 0x7AF6A7EB,
+0x42F782FE, 0x26902468, 0x555D046A, 0xC6908083, 0x38C87E5C, 0x3AB92D32, 0x8C4BDCF5, 0xFB918033,
+0x6FA82C9F, 0x5A105BD3, 0xADC74938, 0x5C273513, 0x62855BD9, 0xD8A06C6A, 0x41EB9D00, 0xA6D232D1,
+0xEE22EAB2, 0x2A18F99D, 0xCD9AF838, 0xA5C7BAE0, 0x84135DC8, 0xCBF938F9, 0x33F3FEEC, 0x4C656867,
+0x455EE81F, 0x8C9971C0, 0x843342B5, 0xDDD09FF2, 0x2E739D28, 0x47ABB36C, 0xF58F42EC, 0xDEE1DC1B,
+0x5FF2090D, 0x56CD5D1C, 0xADE9AE51, 0x0055E7DE, 0xCC34AA3D, 0x7166A716, 0x7B75C39A, 0x09120480,
+0xB03E0B98, 0x94AC3C31, 0x97A0A5B9, 0x95D390AA, 0x16EC2782, 0xAAB20DDF, 0x091FB0B1, 0xFDEC5B5B,
+0x5A1D272E, 0xAC7FA96C, 0xA4ED9104, 0x5C19F8EE, 0xFF5A8381, 0x0C8BFE7C, 0x25D25A73, 0x237D5FA0,
+0xEA163438, 0xF45FC0C2, 0xC6A75602, 0x9E52DF42, 0xE9B3BEB5, 0xEEB4374E, 0xD5BAB497, 0xB6B76DD8,
+0xE0A56A5A, 0x528771A0, 0x1D22EDD0, 0x29368D02, 0xD9A02AF7, 0xA3D30B39, 0xBDA0240E, 0x921B89AB,
+0x1D305A83, 0x29D018DD, 0x58CE6130, 0x25D2087E, 0x26FC9AA6, 0xE925EC69, 0x10030C79, 0x8DE3C0D9,
+0xBF773362, 0x8D4BCBA9, 0x05162685, 0x1F230B04, 0xD411853A, 0xA71493B0, 0xD3B0ECC7, 0x5969B612,
+0xC37B30A7, 0x84D8C748, 0x404A8E0A, 0x97EF7119, 0x20B37878, 0x54883AC2, 0x5109206E, 0x187BF16E,
+0x206F7485, 0x070B881A, 0x05FEF40F, 0xE1141F8C, 0xBAA7F8CC, 0xF6FCD35D, 0x464AAACA, 0xAD976225,
+0x4D4622A3, 0xA3C893A4, 0xDFF54078, 0x149BB42F, 0x7798A930, 0x7BE656A3, 0xD330E2B3, 0x6E1A50B9,
+0xA5B2846A, 0x95886E8D, 0xE5D1B4F7, 0x7F6A1474, 0xE6387134, 0x189FD426, 0x509C1E4C, 0x7BA81922,
+0x0F2ED951, 0x2E0D8099, 0x50CCE70C, 0xFD5DB755, 0xE56DFB20, 0x040FAE52, 0x7E0A19B3, 0x164F421B,
+0xCD69A564, 0x6B75FA64, 0x31DBB5F5, 0xCB40D3A0, 0xE5D166D6, 0xE6F93E91, 0x76CD18F0, 0xECB677C6,
+0x5930E97D, 0x37628C50, 0x17786C23, 0x54293507, 0x4C24B482, 0xDCD91A57, 0xB1D69D8F, 0x270D4AE3,
+0x74D35CC0, 0xF3ED156D, 0x1BE0A2C1, 0x9FBA2BA0, 0xBC1CC63D, 0xF3BA1A2D, 0x801CBE15, 0xFF125BA5,
+0x0BBE368A, 0xF1C6E506, 0xB022625C, 0x43501859, 0xE32389BA, 0xA7ED7E26, 0x7B38D2FF, 0x88C3F720,
+0x3D964F5C, 0x23BD3401, 0x782FE0C1, 0xEECE3E09, 0x3E45285B, 0x291A0422, 0x0DBE044F, 0x7B984864,
+0xEF84597A, 0x3EA2BD71, 0xEE6CB813, 0x57B94CF2, 0xEE672F50, 0x92E708D7, 0xDEA4C9C7, 0x67CC293F,
+0x89A0B4C5, 0xDFC89897, 0xC96A56F7, 0x8E0A890E, 0x34B1F541, 0x894F33A5, 0xBD77766B, 0x8EF5B1C4,
+0xDF947C3A, 0x080B00F4, 0x61EAC370, 0x54FC5499, 0x13E53AB6, 0x5BE04D67, 0xC7928018, 0x9E299BD5,
+0x48F0BF3C, 0xB70DA964, 0xAD214B20, 0x72446252, 0x62FE374C, 0x30F66091, 0x9074D065, 0x92EC1A6D,
+0xE269113F, 0x337CFB91, 0x807C311A, 0x1F954770, 0x645DA357, 0xFFB5F958, 0x140C5902, 0x302D0106,
+0x32ABA5A6, 0xEFC9DE7B, 0x34CEB585, 0xAAD6F7B6, 0xF05935D0, 0x4E8B2150, 0x86C4F9AE, 0x1F8942BC,
+0x5AD41C95, 0x74B2E4B0, 0x8CD5CC77, 0x1AAEE03B, 0x47D8AD11, 0x5708EEEE, 0xE209F1FB, 0xF5DD8A20,
+0x43428520, 0xD6E90637, 0x991C403A, 0xD857013F, 0x8BA2C153, 0x091AAD88, 0x7EE86E86, 0x3B6285C4,
+0x37BB42BA, 0x8BDEA364, 0xE40222B3, 0x49209852, 0xD54401B6, 0x62E69E92, 0xCC1F3C24, 0x0ECE62A0,
+0x87C8BA68, 0x475D4A0B, 0xB35291D2, 0xDEEF9878, 0xF1E679F0, 0xB78FCBA9, 0xE5C8F34D, 0x7F36D8DC,
+0x6E251689, 0xAF73BD36, 0x60CD4B35, 0x1E2D59B6, 0x1E79B6BE, 0xF4311D1A, 0x4D98BFA7, 0x6BBB8AE9,
+0x91EF299C, 0x0CCE1B73, 0x8E9498C3, 0xE6664CE6, 0xE37FD7BF, 0x4457B8F7, 0x0175DEF8, 0x60181CC8,
+0x80BE734B, 0xF735B7FA, 0xE17DE0FD, 0x3BE1929D, 0x219BBDE3, 0xBD628AD6, 0x52F67583, 0x47C9B49D,
+0x3DEA1263, 0xA4C8ECB2, 0x679094E0, 0x3B8D3017, 0xBF3A4273, 0xC174147B, 0xB97D234B, 0x7B308D5D,
+0x5C2D0A75, 0x313DD242, 0x4B2F8E40, 0x9A1E72B0, 0x5A6A9F9C, 0x118E4783, 0x4F634B7B, 0xF67CE658,
+0x724D9B4F, 0x585B8DFC, 0x3952B354, 0x88F0D221, 0x56409B43, 0x217FC007, 0x68C802D4, 0xF992D344,
+0xD6B84CC4, 0x01AE40B5, 0xBC44B846, 0x13FF979B, 0xAB32BC53, 0x56DA3273, 0x63C3EA59, 0xCFAB2A0A,
+0x5646A0ED, 0xA0F5D40B, 0xCAC8BDE1, 0xB1E7E7B8, 0x37BE73A8, 0x78337642, 0xCCA94122, 0xEA2E71F0,
+0x70991120, 0x07826E48, 0x0F006636, 0x003F4251, 0xD791CB7E, 0xE0B7F153, 0x6F7CB578, 0xC5038511,
+0x3F624AD8, 0xA6DC31B4, 0x14DE18A5, 0xC51A787B, 0xD032621B, 0x93A9CEAC, 0x7BE2C356, 0xD9F72666,
+0x651DDFA7, 0x39B23759, 0x143225D2, 0xC3E72137, 0x002BEAAF, 0x53EDAC77, 0x7DA50087, 0x83EE6071,
+0x9BA587A5, 0x595E0327, 0x45B9AB0D, 0x7A5CD430, 0x6D6676D3, 0x44D0FABD, 0x49C56D3A, 0x9FEB95A6,
+0x7A969452, 0x8F9125A6, 0xCDF5E61D, 0xBF44F1B8, 0xCA1CA5F0, 0x7871C194, 0x41AE508E, 0xA2724EB3,
+0x9A7733A0, 0x84517BA6, 0xE280FB33, 0x5AAE1B9C, 0x24D4F785, 0x68BAD34F, 0xA4924AB4, 0xFA70B6EB,
+0xF1BCEFF6, 0x07C5FF8C, 0xC438F7EB, 0x53247F36, 0xB25AEF0C, 0x6C711E72, 0x9AA40FEB, 0x2726B59E,
+0xED1F10B7, 0xFBAB73F4, 0x9A97E62B, 0x7F667BC7, 0xBE8566DC, 0xF1D18977, 0x94CB5935, 0xC24F08B9,
+0xAC728BD0, 0xB64BD18D, 0x4734EDDE, 0x9792FEC5, 0x23E045AF, 0x969AD868, 0x33F4C596, 0xAB88A8FE,
+0xCA7A6E05, 0x98CBA8A7, 0x8D8938EF, 0x38D72BB4, 0xB2461100, 0xD2F450B0, 0x24794E97, 0x81DF3D28,
+0xA48086A1, 0xF39CAD9D, 0x95CCAE0C, 0x4B8351AA, 0xEC3A0FCB, 0x7AE9CD6A, 0x857BEF9C, 0xFB66DC94,
+0xDD88277B, 0x496D7FC1, 0xD6C5CF94, 0xFB2528D9, 0x8CB61569, 0xD6E16BEB, 0xAF83031E, 0xF1311491,
+0x1EB1D239, 0xA0422461, 0x1F261C47, 0xF7665222, 0x3BDA713E, 0xAC073AD8, 0x43F8B63B, 0xF2BC1CB0,
+0x8B2DB78A, 0x698E6028, 0x1D4B21C1, 0xD6FE613F, 0xB3143DB5, 0x96505BC3, 0x9B7A7253, 0x0C8BD7A4,
+0xF6A00D79, 0x65060EDA, 0x6E01A463, 0x35B7DE6F, 0xC9BF8D34, 0x70B0D03E, 0xA74EFB1A, 0xF74F1283,
+0x04E3353F, 0xEB110549, 0xDF75AB2C, 0x468D1554, 0x9250AE9E, 0x58239CAE, 0x07C0B82F, 0x9B0D49BE,
+0x70FF4030, 0xE4E50A07, 0x576EBCC0, 0x163C18AC, 0x1ABD5F94, 0x4B41132B, 0x21897AA1, 0x7FD67D71,
+0x4756F5F0, 0x250005FF, 0x831EFFDC, 0x85A5E1A4, 0xF5975300, 0x318E41DF, 0xA1B16259, 0x9E4FD971,
+0x45F3C4A6, 0x76EA7B53, 0x68A3C022, 0x153431DE, 0x23188922, 0x745D76DF, 0x5C22F78C, 0x95FCDF5A,
+0x0925EFA4, 0xF634D7E7, 0x7A50278D, 0xDC77C185, 0x03AF0721, 0xD04BFC5F, 0x577826FC, 0xC6766086,
+0xBBC4861E, 0x66764AF0, 0x8B0FC48C, 0xB1D655BB, 0x9661D54E, 0x8C88C620, 0x78BBF3C9, 0x7166D8E7,
+0xB15D8A44, 0x701A731A, 0xDF2F4D0C, 0xD9B403DF, 0x1B94A956, 0xD2648FB0, 0x23069836, 0xF1E8AE8E,
+0x92403D3F, 0xE0F8B1DC, 0xB1A20C55, 0xF834C7E9, 0x9C0765FC, 0xE2D15FFE, 0x57954574, 0xBB6AF014,
+0x846C4D93, 0x6369162F, 0xFB584A70, 0x39D8466E, 0xF85B74B5, 0x4A418FD2, 0x9122C306, 0xF0062C54,
+0x357F19D2, 0xD4A3FE63, 0x79A037B6, 0x72F1AAD6, 0xB3C6B481, 0xEEDE7991, 0x86709B70, 0x18CA85BE,
+0xBCA4FF58, 0xBC91ED10, 0xD74A3828, 0xDD9D1402, 0xE47460B8, 0xEBFA6AD6, 0xEBECDA9A, 0xEB2F6608,
+0x6E8F670D, 0xE1C60BB5, 0x6A53BEDE, 0xC1ACDA91, 0x431D3DE7, 0xADE4BDDA, 0xCF231ECA, 0xD6DAC838,
+0x25BB6EB5, 0x39A3C965, 0x0162EEC5, 0x2B5D407A, 0x28C34763, 0x9C96743B, 0x7C6DA2D9, 0xF07941B6,
+0x36CC0B49, 0x4588D69D, 0x8E1EEEEF, 0x7AFA866D, 0xA06EDBEE, 0xF4BEC4A8, 0xC9C90024, 0xA9FA6CFB,
+0xF98974B6, 0xEBA5FA02, 0xF0AE4159, 0x3619BC7A, 0xC891842C, 0x2B813990, 0x895C9B91, 0xECFEAA84,
+0x85DC16C0, 0x2CC06D50, 0xA0B6626A, 0x29843942, 0x1A807BF5, 0x103E4F8E, 0x46E4C23D, 0x96D812A3,
+0x4061F596, 0x67F22F2F, 0x479E40BD, 0x6AB38541, 0xE1D99954, 0xE5ED5047, 0x29B2D5A9, 0x94B9F3A2,
+0x3C0C4835, 0xE6297402, 0xD1584B4A, 0xD71DA42C, 0x0DF5F0A6, 0x3E983F29, 0x74B01AA6, 0x7396188B,
+0x3AA87A64, 0xF2A3C81A, 0xC655DBF3, 0x73A382F3, 0xDA35525E, 0x2AEED9DC, 0x60A7A141, 0xACAD8C6A,
+0x2CD2F131, 0x977B32F2, 0x93685172, 0xAE3E4FD7, 0xA01BD508, 0x9E8F3EFA, 0x8131EDC5, 0x04EEBF0F,
+0xC35139DA, 0xDFC49695, 0x3E22BA73, 0xEABE05B2, 0xB2A1FC3B, 0x402FF7E9, 0x77A875E9, 0xA42DDC9E,
+0xD6F9417C, 0xB8BDF0F8, 0xEC39DBAE, 0x0E8E48A8, 0xFAF001A1, 0x02A1A5BC, 0xB9563D5E, 0x53FAAB67,
+0xD82B9442, 0x03FECAE0, 0x37B24D3D, 0x30714951, 0x1B5BBC59, 0x1A1E4895, 0xF260A35F, 0xFEF79104,
+0xA861B2EF, 0x6F6D5894, 0x3661AE78, 0xA18435A7, 0x4548B90A, 0x93EBFF46, 0x301BD8C2, 0x602A473E,
+0x7ABE048B, 0xE7EECE50, 0x39DDA3E6, 0xEB41C393, 0xFC677C56, 0x1FB0FC6D, 0x728C4A72, 0x9A6A48B6,
+0xA3B919F1, 0x46DB8DA4, 0x3BDC2536, 0xF2F265A3, 0x729132DE, 0xA51F9798, 0xDB7E92E7, 0x8C7EF38D,
+0xE0800B7D, 0x09A5BBE5, 0x316E1A4A, 0x45B2CFCC, 0x72633691, 0x96BA9F1B, 0x78F6AE54, 0x0CBE23E5,
+0x2490099C, 0x9A740C1D, 0x46B362E6, 0xE294F178, 0xC985B4ED, 0x2F231298, 0x2EFCB9BF, 0x4275724C,
+0xFC968D0B, 0xC72DF562, 0xE7510E15, 0x7ED7CA2C, 0xFF691B97, 0xB8CFCD45, 0xBE89291F, 0x5E1353A7,
+0xE9491E66, 0xFA65ECC5, 0xB18D8D99, 0x04C5B3DE, 0x73243C4C, 0x875D70FF, 0x99B97B7C, 0xCAD139B5,
+0xEC7B50CC, 0x60E2C878, 0x7C3CE949, 0x978D336F, 0xB173FDF4, 0x1F001910, 0xFF96FD8A, 0xA9CB4BC7,
+0x7211CAB8, 0x964312D1, 0xB5671C4B, 0x837E1F01, 0xEDFB7494, 0xDE2B10EC, 0x35554BE9, 0xF732A5C0,
+0xDF281043, 0x23D4C840, 0x16BC6C50, 0x8DE4F0BE, 0xF34CA4BB, 0xA383B585, 0xD2A36EE6, 0xF2925A59,
+0x874F828F, 0xFDB488F7, 0xAFD605A6, 0x458200EF, 0xC12045F3, 0x7C879678, 0xD847BF47, 0x3EA3F52E,
+0xFB00B7DA, 0x2F834A45, 0xAE6DC06D, 0x9462331E, 0x1EE00B1B, 0xD5175286, 0x3211327E, 0x5B062697,
+0xCA9D8807, 0xB38CEA75, 0xD079ABAC, 0x84616BDF, 0x78A8572B, 0xF125C336, 0x67C1D503, 0x0E9C7B3F,
+0xC521A1B9, 0x0767D737, 0x83429A83, 0xB48FB57F, 0x622B229A, 0xF0D699DD, 0x039239EB, 0xA28DADF4,
+0x3ABE6F34, 0x7EB5C118, 0x95B36624, 0x2E0CEA2C, 0xE83C77D9, 0x3E44C197, 0x576C6AB4, 0x14D6107A,
+0x5BC1A3E4, 0xBC0FE20F, 0x3EBE2CF7, 0x8B813F5D, 0x1BB34D6E, 0x56C9C81A, 0xF315F8E9, 0x09B26E8D,
+0x86C04DA9, 0x268DF668, 0xE2FE932A, 0xF98FC8F8, 0x24781367, 0x748DAD24, 0x643773CE, 0xB6F9DD9A,
+0x7BAA5CBC, 0xC3A222CF, 0x017E936E, 0x76AF597B, 0x3961FC57, 0xB718DA2D, 0x5F11BDE0, 0x4558FC29,
+0xD4C3B2A6, 0xD2B12C8F, 0x98D6A1DA, 0x900EFD1F, 0x19B2F2D8, 0xBC67A5AB, 0x011FF5F6, 0xACDC8120,
+0x72C42843, 0x367A6A56, 0xF5387C32, 0x6B81B755, 0x9E76D8BC, 0x3D4CB295, 0xA9CA744E, 0x7483E189,
+0xA45A0481, 0xD2DE59FC, 0x6AEBD019, 0x9245E994, 0x79B743DF, 0x235680B3, 0xBF40BF13, 0x3D544FC2,
+0x218886E4, 0x9180577F, 0x8F417A88, 0xADAA59B0, 0x0FFB051E, 0xF6983350, 0xB07FEC5F, 0x01345F6E,
+0x7832077D, 0x79E2F385, 0xB1765D5F, 0xA3E40861, 0x7F1712A9, 0xBE30800D, 0x9D58F845, 0xF503A7E5,
+0x00980BA3, 0x5F7EE4FD, 0x1BB4287A, 0xB3D928FA, 0x11A1F8D4, 0xB8515A18, 0x5AF247BF, 0x6B7C7649,
+0xA3DEE7D7, 0x906705D3, 0x7902607C, 0x2B7B46E7, 0x30DE6D50, 0xEE5414FF, 0xDAA48C6D, 0x1E045500,
+0x399EA8BC, 0x3EDDAE24, 0x226F06B7, 0x861B6311, 0x65404FCD, 0x056C064F, 0xC5E0C2B5, 0xFB189A68,
+0x67BE20F7, 0x63ADB024, 0xA2B22029, 0xB51DFA40, 0xDF04430F, 0x656FF9E0, 0x34B2CCFE, 0x5512D7A0,
+0x948DF1B6, 0x57E9C225, 0xF1D2F2D0, 0x0F422AFE, 0x5919C950, 0x75534C81, 0xCAA075A4, 0x9B21ED02,
+0xD82BCCA8, 0xF77A1FE2, 0xA1144C73, 0x3858F0C4, 0x6FC171F1, 0x4A72772A, 0xDF830321, 0x980ACDC6,
+0xBDA08F6F, 0xB41DC4B4, 0x7B337992, 0xEA806B42, 0x851D5CC2, 0x25013B53, 0x1F076E2A, 0x16EDF7D0,
+0x54227CAA, 0x5EAD7F19, 0x66474A7E, 0xCF20C573, 0x10A2C643, 0x4D81A3E1, 0x365EE9BD, 0x94019490,
+0x76DC1272, 0xD90F7A1E, 0x5B030F7D, 0x65C1884A, 0x981E6D34, 0x0AAB123A, 0x9093EAD6, 0xE01FD5C5,
+0x13C036CB, 0xB56D131E, 0xCD7EB760, 0x26B9D31F, 0x3F7B8A16, 0xA6820083, 0x54779B7C, 0xDABF7BED,
+0x77A3A225, 0x462917C4, 0x26AC14A6, 0xB98566A0, 0xFA2C3BA2, 0xD2F66487, 0x81954D35, 0x28ACC90E,
+0xE8A1A4CE, 0x8CECCFC7, 0x3F93C66C, 0xDC8C19B5, 0x5A5CFB13, 0xB232CEF9, 0x0F9706A7, 0x8695489D,
+0xCED5CA7C, 0x7EBE0B4D, 0x9C9F01A7, 0x2349C93C, 0xEA970CFE, 0x1834FCBF, 0x329BD296, 0xE9D86ACB,
+0x0539DFBC, 0x590A8A6D, 0x910DB214, 0x3CF7A1F8, 0xD797909F, 0xD2C73A02, 0x09091A61, 0x6D624D39,
+0x6DD350AE, 0x0173C85C, 0x20D0C88A, 0x66E11C4B, 0x79F50569, 0x86F290EA, 0xE7F12105, 0x741A43E5,
+0x5FBCC5B7, 0x769EDBE3, 0x71B76CF9, 0x21C7B1C3, 0x92A3A6CF, 0xE6447D65, 0x9DBA2A0C, 0xCF6A8F85,
+0x7A129931, 0x0DA01433, 0xC8D78A25, 0xEDDB2359, 0xCB1F0A85, 0x17FDDC6C, 0x6F75259E, 0x02DC0F46,
+0x47EEB2D2, 0x43FE1300, 0xD01D2A51, 0xD8D192AA, 0x5322AB94, 0xCBABA9E3, 0x6FE589C3, 0x021E00C6,
+0x0C990E84, 0x84B9467A, 0xF547C795, 0x53DB69B7, 0x7114932D, 0xADB602E2, 0xDD276EE6, 0x219F3A9E,
+0x8169FDAA, 0x7C2610D2, 0xEE246EE6, 0x947F58D6, 0x356D7599, 0x9ADD19C8, 0xF2957DC4, 0xE5E8EE08,
+0x902A55C0, 0x01A085E0, 0x676B5FA6, 0xB55F64CD, 0xF3D3F4E2, 0x656367D5, 0xA15BBC35, 0x6A71D392,
+0x867B9544, 0x0696A017, 0xE00FB571, 0x73F9761E, 0xB4C619A3, 0x0A4D46F2, 0x8DE431E7, 0x3F088FDC,
+0x538BC11F, 0x99A0F2F7, 0x4DE9865B, 0x22DB034D, 0xEC39BE0A, 0x9ADCCEA3, 0x3648F21C, 0x1C8A764B,
+0x8112E52F, 0x04C531FC, 0xAF494DE4, 0x35FAEBCC, 0x9F5C9DC6, 0x00A79A18, 0xF5FDDDDE, 0x4A95072D,
+0x7BEB6A7D, 0x477E1D48, 0xE3873265, 0xA7BD7725, 0xCC862870, 0x4FBA6CA1, 0xEF34BB74, 0x9C2A7A82,
+0x4B150632, 0x98179DFA, 0xF7DC5847, 0x0EAE3E77, 0x098B8997, 0x4531935C, 0x6025E91A, 0xDB351C9F,
+0xD1DE58C4, 0x116A0201, 0xB7D8D223, 0x554BEDC1, 0x95F36C8C, 0x4F7A9988, 0x4D2751FA, 0x28BDFCED,
+0xFD976424, 0xE1981D17, 0x59AFDF95, 0xC1882C92, 0x1E7FEC84, 0x47833DF5, 0xB938E01D, 0x441E7941,
+0x0411AB40, 0x510B5314, 0xD4D158D3, 0x96483DDD, 0x37C31DAE, 0x0B5000E9, 0xF5CB9285, 0xAF55425F,
+0xF4CCE229, 0x3468BE2B, 0xE342EB63, 0xEADEFA13, 0x9F84C33B, 0x681094CC, 0xADB9E79C, 0x0A1E551E,
+0x78E4BF87, 0x97700EFB, 0xD3A0ABE4, 0x1DC82E4B, 0x4B883081, 0x30765A53, 0x37D5BBF6, 0x70805702,
+0x51AC7B06, 0x35914588, 0xD08DCAEB, 0x5F3DD3A8, 0xBD2C4C92, 0x5A9FEC05, 0xE88EBB29, 0xDE80F4D7,
+0x0FA306F8, 0xC82D038C, 0x7958928D, 0x9063ADEA, 0xA494BD1E, 0xECD827C8, 0x075D61A2, 0x803A28C1,
+0xB9121ADE, 0xC22359D1, 0xED48DFE8, 0x40FBF66B, 0xA4A7014D, 0x91A66A49, 0x67EA3369, 0x971832BB,
+0x5423ABE5, 0x7A472180, 0xD10F2012, 0xED34E54B, 0xE5C73FE5, 0xED905CA8, 0x204116C1, 0x7AB31471,
+0xBD1613A3, 0x6A00DA93, 0x68A93BE1, 0x5F975C1B, 0x0256D1F2, 0x23420D5B, 0xF70F0D96, 0x318CD204,
+0xF55C6948, 0xD80230C7, 0x9100B009, 0x6D369DD3, 0x357F5032, 0xA2A25B6A, 0xEF0F0508, 0x44A7B2EB,
+0x2BCCD40E, 0x63CE59FE, 0xA476AADF, 0x45FD9632, 0xD3B58AD9, 0x5B4B655F, 0x95E31860, 0x5C9DF13B,
+0xB0AE74C7, 0x9D88A28A, 0xFB896737, 0x69159116, 0xCE07748F, 0x54524198, 0x199261B8, 0x247CAFB6,
+0x877B0884, 0xE93289CA, 0xB1F38990, 0xA25DFA97, 0x9DB517FF, 0x0857A690, 0x73C8E31C, 0x7C3B85A2,
+0x27EE6835, 0xED6495ED, 0xA42ED7B7, 0xCBCD7116, 0xCAAF1906, 0x932E50BC, 0x79A8E9B9, 0x45D3AA3D,
+0xD07BD4C9, 0x7C3B5B49, 0xFFCC2F06, 0xB6827243, 0x2BE3ADF2, 0x9DC3EE58, 0x318B151F, 0xE58D25EE,
+0x37157D27, 0xFE4280B2, 0xD6E87466, 0xBDC4F51E, 0xA8812EDC, 0xE74E5F37, 0x6203871B, 0x071BA122,
+0x4E77DDAE, 0x9301BA12, 0x56DED160, 0x360E3818, 0x9AF35646, 0x94490ED8, 0xF2D24ADD, 0x41F37E5A,
+0xEDCF2EFB, 0x057E545A, 0xFECFDE99, 0xBD578CCC, 0x18EA30A7, 0x7BAC43B5, 0x17E80452, 0x69C474A8,
+0xE6540427, 0x5B5C9FF0, 0x35328774, 0x7366AF28, 0xBB8C0F3E, 0xD92BA7A1, 0x26AEA3C4, 0xCF51E1AC,
+0xDCCF3954, 0x99009C05, 0x069CD64D, 0xFE9F500F, 0xAEC206A0, 0x3C56B71A, 0x02A0641B, 0xE29D502B,
+0x7C38EF89, 0x3BE50FDD, 0x1A2A324B, 0x150291FB, 0x04C2FE69, 0x515E476F, 0xDFA1E7B6, 0xA1072D74,
+0xAFA675D3, 0x7C26F916, 0x893481F1, 0xE8FA0813, 0x8134718C, 0x242FA8D5, 0x1643302F, 0xE81F2EC3,
+0xC92D0957, 0xB858993E, 0xF77CABA1, 0x1D9A1DB9, 0xCAD46D42, 0x18CE19D4, 0x634FA389, 0xA43B9CBE,
+0x20DE4480, 0x55A39DD0, 0x5CEDC741, 0x5FFDD0C4, 0x350CCEC8, 0x9E141623, 0x4901CD70, 0x3E292D27,
+0x2464C893, 0xD360D775, 0x467118A2, 0xDEF39D86, 0x120902B2, 0xCAA77C20, 0x1D98088B, 0x3A7C87C2,
+0xAEF6BD29, 0x0FE15817, 0xE397BC4D, 0x1DB763FC, 0x39B16CD1, 0xF6C2C9A8, 0x4A413089, 0xC2874FE4,
+0x5BDFA26C, 0x129B5591, 0xE4E1A4FB, 0xBCD711A4, 0x2329B9C0, 0xFAB2FFE9, 0x20A02A4A, 0xEA87F403,
+0xDE705D13, 0x9DFA9157, 0x2649272E, 0xC077AC17, 0x0AD7E558, 0xCFA8C7D2, 0x9388873C, 0xE438D102,
+0xE1A4086C, 0x74A2279E, 0x8FE2C658, 0x159BEB3F, 0x254CEEEA, 0xB6FAB7C7, 0x4FD53E61, 0x09C08851,
+0x4FCBB600, 0x72DC2984, 0x14C74CE3, 0xDF386575, 0xF82BF4D3, 0xAF64B941, 0xC0251CFA, 0xCB41F682,
+0xEED5D1C9, 0x37C3FA86, 0xBABF4B87, 0x869115DD, 0x0ECE0135, 0xF878D4CB, 0xE8D0023B, 0x2C552517,
+0xC8E149E3, 0x6F5D4C71, 0x04CED975, 0x90CBDBB1, 0x57EA700A, 0x05D4998A, 0xEB2ECA34, 0x93AFCCFC,
+0x77084284, 0x1FC57967, 0xA10F9DBF, 0x2433D510, 0x6FB76C30, 0xD3629282, 0xFFAC50D9, 0x89DA39AB,
+0x62C656A9, 0x63E39275, 0x35FCE861, 0x5CF95D14, 0xDE038C11, 0x671B6BDF, 0xEE73C242, 0x1A26B8BC,
+0xC1FE28CA, 0x4AEAA4AE, 0xA712E96A, 0x3D471E9C, 0xC40319E5, 0x854A00B8, 0xF3CEF377, 0xB56E9F9E,
+0xD6DEB35E, 0x0D412D6F, 0x6400E5DE, 0x59CD896E, 0x1FCA7CE6, 0xBFCF188C, 0xD8944C11, 0x56068B04,
+0xEF870729, 0x8E167366, 0x9A37EE1B, 0xBA0BEA5E, 0x0B719926, 0x4B2B8626, 0x39561BB8, 0x834C9D8E,
+0x3261C5FE, 0x9C16769D, 0x2BDC177E, 0x39326FB1, 0x1E0D3C71, 0x16C5B0C6, 0x9CB0382C, 0xC7D5E4C7,
+0xB6568367, 0xEB7F5D96, 0x02E34C12, 0xAC7C098C, 0x1A045DC5, 0x01E6BC7A, 0xCC0EE037, 0x5023BD94,
+0x6E68096D, 0xB528E8DB, 0x7784DD42, 0xC4821F08, 0x30A7DF9C, 0xFD3423FE, 0xBF818A40, 0xB2C5EEF6,
+0x04276C36, 0x2C6FBA76, 0x16889D0D, 0xC68B1634, 0x5F0EEEA6, 0xA9F404BF, 0xC4FBDDFB, 0x174BCC8F,
+0xE682830C, 0xECFA7BD4, 0x4A33036F, 0xC8185266, 0x24A0A65D, 0xB5DC6C95, 0x90E0A64B, 0xFCE6C803,
+0x59F83E9A, 0x0F92920F, 0xACBFFF67, 0xE4DD5422, 0xC9FC83F7, 0x943EDB91, 0x55D98CC2, 0x08FE53FB,
+0xE874A7B7, 0xD931A678, 0x8E0D8211, 0x58D1EB6D, 0x95137AE8, 0x3DA089E0, 0xB372B296, 0xBC038928,
+0x7DF311DE, 0x87039AC7, 0xC4382844, 0x2AD1BEF7, 0x095C7BF2, 0xD574EA13, 0x6CDDFCD5, 0xC536497C,
+0xB6B1E4A0, 0x86FA58AA, 0x9B8968D1, 0x5CA2951C, 0x62BB4687, 0xE315A790, 0x9DBFFC80, 0x9D2A27DC,
+0x383AB58E, 0xCDCA5239, 0x9F751CCD, 0xB431D245, 0x78193D4B, 0x529007F8, 0x053A4CAE, 0x839CF780,
+0x5908DCCD, 0xBD3AC416, 0xBD944897, 0x64EA6087, 0x3D8FAE2D, 0xABA7A3BF, 0xC48498E2, 0xB7840E78,
+0xB88BA567, 0xA725A1EA, 0x1F92E45F, 0xA12ACFFF, 0x9A72BD49, 0x69FB5A58, 0x47B6E106, 0x209A8B95,
+0x59212820, 0xDB8DAD92, 0xEB35120C, 0xD5C30B08, 0x8C4F3BDA, 0xE0B0F728, 0x89C5DCA0, 0x4337190B,
+0xC14162A9, 0x1BECF081, 0x1208E6E9, 0x4E6E652E, 0xABCE5C55, 0x71C19224, 0x0ED9A55C, 0x18932AD9,
+0x55A76F66, 0x24955703, 0xEAC8FE05, 0xCBFD55C9, 0x1578A37C, 0xFE69EC97, 0xBF74093F, 0x79249938,
+0x9D260825, 0xDC0AC626, 0xBBFD52F2, 0xC56C01AC, 0x4A9F4905, 0xDCA3DA4A, 0x95A5929B, 0xD5C5E9F5,
+0x7693A344, 0x92B13BAE, 0x1F162EA9, 0x450BE49A, 0x3D9DE395, 0x61281176, 0xF283E90F, 0x41E00B26,
+0x3BB0B6E9, 0x2A557680, 0xB4802472, 0x0D035E5C, 0x3402C710, 0xA194EADE, 0x366F2F4F, 0x3F315047,
+0x2F1D60E2, 0x54EB5F6F, 0x3DC8D3DA, 0xBBA2A833, 0xCA001152, 0x6F921EB7, 0x8C749DF0, 0x5228EDB0,
+0xC8C1359E, 0xC52734F9, 0xFD592C8C, 0xC387B179, 0x599F382C, 0xD5879EB2, 0x86AAC672, 0xE3D981CB,
+0x7412D9CF, 0x97D4109A, 0x589FB013, 0xB77617E7, 0xD264F153, 0xAAFF4305, 0x4593EA6E, 0xD9DCDEFF,
+0xEADC6CF0, 0xA1F0656A, 0xE47EDDA9, 0x641610CF, 0x6FEF783F, 0x7761EA0F, 0x2D088D81, 0x644ED3EF,
+0xAE31E714, 0xBC302217, 0xF1EFB551, 0xCA38A106, 0x7E53FBF9, 0xC26BEA3F, 0x7FA88305, 0x80C2EBE7,
+0x9D6F8C74, 0x08BEBBB5, 0x99639642, 0xBA09F88C, 0xC234D5D8, 0x291D2AA6, 0x157B79CB, 0x5C92D213,
+0xA8B348FD, 0x1E692B63, 0xF56ED26D, 0x5C73D3D1, 0x505AFD51, 0xC78066AE, 0xA726E055, 0x39AD667A,
+0x0927277D, 0xC9DE5265, 0x87450193, 0x72A287A6, 0x7860E56A, 0xD606B6C6, 0x988CE833, 0x01A7186F,
+0x024F409F, 0x504ED198, 0xE49EFAFD, 0x277BE1CF, 0x478CC47F, 0x52D099E0, 0xB40063AF, 0xED9956BF,
+0xF5B53703, 0x27F51159, 0x6FFC1768, 0x6F11C091, 0x8295AD7B, 0x24599241, 0xA0F8B369, 0x78A37755,
+0x0D160ED1, 0xFB585424, 0x2F7A608F, 0x2F91ED14, 0xB7793F25, 0x0770E62C, 0x449745BB, 0xD5E1EC8A,
+0x66C85E82, 0xE3A0B2BD, 0x154FEFB1, 0x7A8932C5, 0xD61ADB4B, 0xC05CF606, 0x9A688028, 0xD4389C52,
+0xF6E406BB, 0x8079829D, 0x5C5C40D8, 0xD55AD302, 0xCA4FD749, 0x5C22A99C, 0x5438DD4B, 0xEF58EEB3,
+0x3D8D6223, 0x6AC843E7, 0x0022DA58, 0x775FA992, 0xCF53204B, 0x4932E98B, 0x6546758A, 0xE113EC15,
+0x8000C771, 0x45419FE2, 0x32869CD1, 0xD8F7D04C, 0x279FF60B, 0x4AB071E9, 0x653F2011, 0x186F831D,
+0xE01A5E84, 0xAC36654F, 0xC9D16FE2, 0x1C981090, 0xF556374D, 0x8FBF81F3, 0x67B5CB6E, 0x931936A4,
+0x394591B6, 0x8830C7EF, 0x70EAE90E, 0x500619B7, 0x6EC896ED, 0x211A901E, 0x7B38A3B1, 0x6A80BFF0,
+0xA03F29D2, 0xDB536651, 0x5E771C6F, 0x9B04A2F4, 0xEA7B2B92, 0xE214CA33, 0xED30B55C, 0x245330E7,
+0xA86A5904, 0x704ADC24, 0xE20915C6, 0x14BB7C11, 0x52F9A956, 0xFB413EB2, 0x9401604A, 0xD01258F1,
+0xC5D979F2, 0xB04FD4CA, 0xFE74543D, 0x7116EA3E, 0x1AF69EC6, 0xE058A30C, 0x08511F31, 0x75511C3E,
+0xCFAA0E5F, 0x6EBCBDF3, 0xFD736F78, 0x5F082E44, 0x3811E77F, 0x8AA09260, 0x699B7214, 0x7A4EA846,
+0x1F89ADBE, 0xD8F5601B, 0x1850122F, 0x4CB76FE0, 0xD4EBF135, 0x9DA22818, 0x645BC605, 0x27B6BF83,
+0x2A9E4A8B, 0x608B776C, 0x3704E2C6, 0x97D83D29, 0x7AEB64E5, 0xECFD393F, 0x2CD7E6C2, 0xE5D47C5D,
+0x3C3A9850, 0x1A85507E, 0xF3D4D9BA, 0xCEF531E6, 0xB862D55F, 0xF22C5389, 0x7E30BFF3, 0x784373C7,
+0x7FF64DEC, 0x7AC488B5, 0x1BD246DD, 0x23772AC1, 0x749BEAB4, 0xE1A47D09, 0xFEA52591, 0x275CAECE,
+0x5B5DB369, 0xFD4A2EF6, 0x7CF2C39B, 0xD9092571, 0xBA8B7688, 0x452CC86D, 0xF6B285A9, 0x7AA53117,
+0x39924A80, 0xC38604EE, 0xE7125A79, 0xC8746352, 0xF8E4E8E8, 0x3A8E9EDF, 0x4779718C, 0x506CED30,
+0xE0B601D8, 0x77B4D2D5, 0xC4C1916E, 0x51075B2E, 0x1888817E, 0x974215D2, 0x3A06EA0C, 0x83546541,
+0xB1FCABE9, 0x25838968, 0x035F695E, 0x1F08119D, 0x30748D7D, 0xD9BAD65F, 0x612BF197, 0x21D1BA68,
+0xB61CFEDC, 0x0A291523, 0x086BB010, 0x18C0608E, 0x0DAF335B, 0xC78DD10E, 0x9F7CFD74, 0xB7AA73CE,
+0x30E0244D, 0x7FBF264B, 0x7E8D6859, 0x19E3E7C9, 0x8E15FDE1, 0x9B1D0F2D, 0xA062D6C7, 0x12B42EE3,
+0xDA012D5F, 0x39FB0A53, 0x5254F2CD, 0xD32B34F7, 0xACE1F0B2, 0xA07AF3A6, 0xEB8BE744, 0x41FAC203,
+0x03BB6FBC, 0xDABFC655, 0x0E33478C, 0x7941BB71, 0x01C8D2FC, 0x9C4D7904, 0x7D112992, 0xEA85C6FF,
+0xC159F365, 0xE9D277FB, 0x0B82F340, 0xBC0637E0, 0x898685B9, 0xC59536D1, 0x4CB7FEB4, 0x69386DD9,
+0xC66F14F2, 0x7B1C24CE, 0x330C9DAE, 0xD9A896C2, 0xB2CDEBE3, 0x5977E66E, 0x1F15812F, 0x3B41F6E7,
+0x7EB4B8D9, 0x414DCB67, 0x7B89397C, 0xD16F6E37, 0x8CC2203E, 0x6BB36E9C, 0x6600237D, 0x5B959C59,
+0xF10784F9, 0x01FDEBFB, 0xBEC0A605, 0x0F5843E9, 0x544A68F9, 0xA33049B2, 0x533D882F, 0x15BF900F,
+0x7FECBFD0, 0xC7B3BB8D, 0x6CEA0AD6, 0xE39D6ACF, 0x3651FF35, 0x89499432, 0x9C8224F8, 0xAD0E2ADD,
+0xE707C677, 0x97DDB08F, 0x9DED883E, 0x62A6D361, 0xB7923DCD, 0x1466A2E4, 0x49973BF1, 0xB1B0A27E,
+0xFBB17C05, 0x5008AAF7, 0x3E45C097, 0xCE9E7279, 0xF9DA5595, 0x6D1A104F, 0xA2C5F90C, 0x994E7871,
+0x56B8F407, 0xD5180183, 0x1CB750B1, 0x39F1B624, 0x79714EF7, 0xCC8A709F, 0x97EE957E, 0x1C5FE066,
+0x8FFB2BC2, 0xDB007283, 0x356142B0, 0x1D9C61FA, 0x6D76649A, 0x3C5BCC51, 0x8C4C9E92, 0x7B1D82AF,
+0xB147A39C, 0x5E5DE1D7, 0x2815387D, 0xE4BEE662, 0xB655E9A2, 0x9B574B72, 0x009295D1, 0x2BB99765,
+0x055989D4, 0xEBDC5771, 0x48C66BD7, 0x10B439E4, 0x177C1B85, 0x718848B2, 0xE4529727, 0x06A50EF0,
+0xC51E537F, 0xBC156ED7, 0x2DD651DB, 0x13B832F5, 0xBFBA538D, 0x0CC27D7F, 0xFA75B2FE, 0x70FC24C3,
+0x442B2CBE, 0x9ED06C3B, 0xE5BB9460, 0xB8A2202D, 0xAD35E3BB, 0x438F6790, 0x34FC1D44, 0x2061B61E,
+0x3CD7DFD7, 0x78D8ABCC, 0x9425C8F4, 0x88BBADE2, 0x317AE6B1, 0xDE50ECED, 0x1E48B0EB, 0x3691A063,
+0xECFE332D, 0x757F8062, 0x84E1D350, 0x093A74E0, 0xF7C239C2, 0x143BBC32, 0x02ED2103, 0x0E126ED1,
+0x75106B73, 0x0FA77AC2, 0x49266A8C, 0xC820FA19, 0x68AFFD03, 0xFCF6F50B, 0xF0C4B744, 0x1E6699C2,
+0x2711B68D, 0xA7D639E9, 0x0575A9F5, 0x4BFC81C8, 0xBCF83A29, 0xD925A097, 0x9CC2A55D, 0xBD9D8524,
+0x61DE6381, 0x3608F64E, 0x1F06D9F4, 0x7DDFFBCD, 0xEC14C368, 0x29D234C7, 0x7F3B8249, 0x43D9F4F5,
+0x14E98937, 0x60591D19, 0x38B31A20, 0x525E17A7, 0xE17C5675, 0x11FA7A70, 0x57F0AC67, 0xCCF09083,
+0x529CF561, 0x197577E4, 0x25389E51, 0xBC0D9414, 0x379EB2D5, 0xE615C6D3, 0x8A054BFA, 0x4182CD34,
+0x88747B34, 0x89D7FBD7, 0xB31765DD, 0xD24070BA, 0xC9EB7763, 0x512F986F, 0xEB571358, 0x6563D714,
+0x982C9B85, 0xB086641C, 0x586E393E, 0x742F61CA, 0x739E460F, 0xE7536053, 0x132E27AB, 0x82A7D8EA,
+0x8E4A7461, 0x2C2733BE, 0xC6F0E77A, 0x13FDC73F, 0x4BE87A60, 0x4A4300BD, 0x7446F0F0, 0x8D19828E,
+0xB45F83BA, 0xE1C33B78, 0x155F0857, 0xF2564226, 0xD5A05571, 0xF14988FB, 0x2B9519C9, 0x377FBA45,
+0x327B0FA1, 0x76FCB5DB, 0x53C9E5A5, 0xFFFE9A14, 0xD25F3199, 0x7C58D5A1, 0xC95AEEB4, 0x8A1EADB7,
+0x520CAC48, 0x7D4BE8EA, 0xAE3ACE6C, 0x68656BCD, 0x991E65BF, 0xE87B73CA, 0x838B1CC7, 0x6C5EBB6F,
+0xBF4C8B87, 0x350792E5, 0x23681DC8, 0x8B569636, 0xCB94EF60, 0x6A5280A2, 0x77BDD542, 0xC21ED6BF,
+0x7D06385F, 0xA36023BC, 0xBF1F15A3, 0xD4176DE6, 0x5455DB3D, 0x0591F880, 0x82C0DD2F, 0x7BC2F38E,
+0x6682A316, 0x7C248BAE, 0x4473C41E, 0x29F827AD, 0x4523FA52, 0x37CBF7D0, 0x70AC941C, 0x6474585A,
+0x972610D0, 0x880E577B, 0xEA54F527, 0x7087937E, 0x36FAA442, 0xBBB15D01, 0x48DA0BB5, 0x7A6029BA,
+0x26784126, 0x56576752, 0xCB1924C0, 0x2A1EBEEF, 0xDFCFC37E, 0xC286A3A2, 0x61655778, 0x85215DCE,
+0xE5804FD4, 0xB50C5AAF, 0xE5F96262, 0xDAB9F09F, 0x39496207, 0x736A244A, 0xC266263B, 0xF7744AD2,
+0x42A1ABC6, 0x225E5395, 0xD699FE9F, 0x10E9B94D, 0x865136A5, 0x713C069B, 0xC32A23C0, 0xC44749BD,
+0xA1BEE6AC, 0xBA03B218, 0x41EAE4B6, 0xBA17F326, 0x2F4FD67A, 0xAA3B0EF0, 0x482FA385, 0xB440BC4C,
+0xE485D1A0, 0x8D964A7E, 0x8F3885C3, 0x2E7C1B52, 0xAB3F5AE0, 0xBE340DCF, 0x6CA0BDD9, 0x2C66F84A,
+0xABA08781, 0x980861E2, 0xBF31F38E, 0x44EF56B5, 0x81B1EF31, 0xE8E85DEF, 0x40E23CFF, 0x7F75B367,
+0xAB209A7C, 0xF083261D, 0x2BDAF232, 0x936BC388, 0x1D250A21, 0x333747C9, 0xCFC4649A, 0x32DBA589,
+0x365794B8, 0x4BB7C59A, 0xE704896F, 0xB12D4617, 0xFE328507, 0x006B3EF3, 0x5EA8FF4A, 0x5DD6416D,
+0xD66F141C, 0x378A63B8, 0x954D1506, 0x2C013B8A, 0x15FD071B, 0x132673A3, 0x3294ACA3, 0x01F99C0F,
+0x5F6466FB, 0xCC4F21FE, 0x6622E21B, 0x77D65E11, 0x9EC5F076, 0xA8467085, 0x2D36C6C3, 0x45DFB3D1,
+0xFE54309E, 0xE868213C, 0x18623C9F, 0x3AEECC5B, 0xDC0F8357, 0xEBE25028, 0xE79FFCE6, 0x0C0B340C,
+0x7DAFC172, 0x5631F277, 0xFD4BC45D, 0xCDABD041, 0xA76006A1, 0xE819A7A5, 0xC1CC7F60, 0x5B11D97B,
+0x33F14879, 0x5EF865AB, 0x6832DA4C, 0x59669182, 0x0A4880C7, 0xB1E284BE, 0x94BECD76, 0x23029A41,
+0x3055350D, 0x6098C6BF, 0x16FA767C, 0xF42E3138, 0x37C8E86F, 0x5B19F4DA, 0x8EBA1CDA, 0x405B3C2A,
+0xF5A2BC53, 0x2EEB828D, 0xD4516D11, 0x895128AE, 0x5ECC5820, 0xC6555F6D, 0x723EDD41, 0x0248964A,
+0x8C1E400E, 0x40D58801, 0x7C4C5032, 0x0185B914, 0x1749A2D4, 0x1863CB59, 0x3BD8B3A7, 0xCB652FFF,
+0x8007D0DF, 0xEEB071D2, 0x96709E3E, 0x0569B347, 0xFC075D68, 0x315C49DE, 0x5E7CB840, 0x89AD6E26,
+0x6E0F1673, 0x9FEB5FB3, 0x2BB2C580, 0x343A96E6, 0x5455215A, 0x87CF9A3D, 0x5A280AA0, 0x7A4B1F15,
+0x30A24FE1, 0xA5BB6C9E, 0x22CA30CD, 0x0CA2DFB0, 0x76EEDD18, 0xDC39AE95, 0x8EEE054E, 0x63D260EB,
+0xD1F4B120, 0x6292759E, 0xC83890F7, 0x67E049FA, 0xB1F1D7E9, 0xA7089344, 0x4B7576E1, 0x97380852,
+0xAA3CE9C9, 0x17032BF7, 0x0F5D9EB5, 0x23D4849A, 0xDD75A301, 0xF56D9AEA, 0xCE1112AB, 0x07DFA7BF,
+0x67323E79, 0x5FF86A76, 0xF397A7F5, 0x76CA5292, 0xC180C651, 0x9670E055, 0x274070D4, 0x70C5F8F8,
+0xCA797166, 0xD38D7045, 0x376E811C, 0x809FE520, 0xE881E120, 0x092ACB47, 0xFDB35BAA, 0x77264775,
+0x64FF2B32, 0x189CAE97, 0x787AFDC3, 0x46FD1C37, 0xB4C4310E, 0xA3EB1820, 0x41ACF220, 0xF36050B1,
+0x0A5439B5, 0x6A20BA82, 0xEABA5976, 0x8481B6C4, 0x668BC753, 0x200582E4, 0x721D5871, 0xAB324482,
+0xC23F881A, 0x354299EA, 0xBE7FA458, 0x7DF43717, 0x9DAA974C, 0xF70683EB, 0x0B8E3FF1, 0x8C284F54,
+0xE9089DB4, 0x9CF6C7B1, 0x5269B948, 0x54CFFB35, 0xABB10EEF, 0x85134D91, 0xF422D276, 0x5132042B,
+0x2E5B7D71, 0xB24B14D2, 0x1AA06663, 0x527B3D48, 0x1EF7DF4B, 0x384813B4, 0xFBF9A3E7, 0x69B4CE17,
+0xB19B28BA, 0xE262E224, 0x5FF34CC0, 0x8CB78E01, 0xA7F603E9, 0x5768F5A5, 0x2AD9F10F, 0xB8640A15,
+0xDB296291, 0x5896FDB2, 0x0EFB8EF8, 0x2A6D62E6, 0xAE0C4BAA, 0x5CF51625, 0xC0FDF124, 0xF9AB6EDC,
+0x705EE3AA, 0x6E54AE77, 0x9DE38697, 0x8F930A1D, 0xB84F2DA4, 0xA93E9D28, 0x7670D11E, 0x6048467F,
+0x0B750843, 0xDF8760BC, 0xEC56C7D0, 0x07A8CDE1, 0x97868A98, 0x13932935, 0x4491B4C8, 0x69B4CFBE,
+0xE4F55974, 0xE481EBE2, 0xE716CC0A, 0x299AA690, 0xDEBCDCEB, 0x4F5E0CC7, 0xBD70B424, 0xE0AB3A44,
+0xA1F59B2B, 0xF11D3773, 0x6CA5372F, 0x62C5A462, 0x6D2DBE31, 0x3E81C5E8, 0xBAA0C2C8, 0x39209FAA,
+0xF15CD2C7, 0x18AA17AA, 0xC2E6BDD1, 0xE197E8D1, 0x8454A3D9, 0x8B1EBE69, 0x634D0399, 0xAE369B42,
+0xB44CDE50, 0x33E568C4, 0x2069C41D, 0x5711C6BB, 0xCA5944D0, 0x05D69D4A, 0x283B2F9A, 0x336A9B3E,
+0x341F1546, 0x3399A3D2, 0xD919F065, 0x0A298ACF, 0x31FC4258, 0xCCCE0B92, 0xE2BBCB28, 0x46382F08,
+0xF67A58FF, 0xA34174B5, 0xBE040E2C, 0xC2100CEF, 0xFC22CCCD, 0x3D5A4493, 0xFA697226, 0x436E0F54,
+0x83073BF3, 0x9ADD6FA0, 0x8D9A404E, 0x9D70E20D, 0xF38A70AF, 0x71AF4AE5, 0x858171CD, 0x9A4F83E0,
+0x59FCA9EF, 0x1CB5922D, 0xD0994DA1, 0x1C358B7B, 0xF4FD889F, 0x9B35ADC6, 0xA64C70BC, 0xAA171C90,
+0xAE616539, 0xB921D6A6, 0x011D3CCC, 0x7E6E0210, 0x2B709893, 0xDF4DD962, 0x239FEBAB, 0xA2D92D40,
+0x3A5C0EC8, 0xFBA8E686, 0xD5797BFA, 0x8C7B2D4D, 0xA3803D7A, 0xB406425B, 0x2396A08F, 0xA32331B7,
+0xABECEF9F, 0x9417EDAA, 0x9666B941, 0xBDE015C6, 0x650CF48C, 0xAEEE762D, 0x912CD4F6, 0x1BDD124A,
+0xC1FC66A9, 0xC75D3252, 0xCC0A057A, 0x1A55615C, 0x7DAB171D, 0xDB006062, 0x9E31F0EE, 0xB921709F,
+0x2FF5DDED, 0xF862968A, 0xBFAEBC14, 0x3A61592D, 0x606EDC18, 0x6AE42FD2, 0xE6E77358, 0x4B26B38A,
+0x048671DB, 0x1E543FF1, 0x3FEA5543, 0x0F961994, 0x51B6E0B0, 0x07E7259E, 0x023FB0B1, 0xB62208FB,
+0x907AD481, 0x0F0CFFF6, 0x0AD29D95, 0x9C4FCA3A, 0x7B513676, 0x1230D9E3, 0xD9449F24, 0x873104AD,
+0x1CA81527, 0xB63D8664, 0xD107CE86, 0x5D7C62A4, 0x36A12643, 0x5B220904, 0xE9E52889, 0x7B001E0A,
+0xDD0655CD, 0x963A4DE4, 0x32422EF6, 0x8F992F73, 0x707355CF, 0x4E1E5534, 0x9947DBD0, 0x8BB4922F,
+0x9AF089E1, 0xF9E04F6C, 0x198FC95A, 0x52FEF43F, 0xC39FBD5D, 0x14F66146, 0x28C71124, 0x81B7102F,
+0x8D2CED90, 0xDE8E785F, 0xEFB058FE, 0x351846C8, 0x8864A96F, 0x7FF723DB, 0xE0D8A8B7, 0x83A778DB,
+0x049308B9, 0x580D14DB, 0x30F64561, 0x6B15ACA8, 0xE08BCCCD, 0xFB3C9CCC, 0xE694AA1F, 0x12FC95CA,
+0x96BF0C05, 0xEBD85A9F, 0xED7022A7, 0xF383BBEC, 0xBE4AA92F, 0x0DDDFF15, 0x678B6CFC, 0x005B277F,
+0x65F174C3, 0x386B7BCA, 0x9B1D7E49, 0xBC361D3B, 0x63B3C900, 0xDF240A1B, 0xF58BA075, 0x8CA7A3AE,
+0x2FB54D64, 0xB8A768C1, 0x2B353760, 0xDEC084C7, 0xCDB598D5, 0x11C41187, 0xFD337132, 0xFBA86E7E,
+0xE12BA114, 0x1768ED30, 0x00767A59, 0x6D67835F, 0x8D426620, 0x5712012C, 0xC9F6CD3B, 0x8AB5562A,
+0x1515B836, 0x56F77FCD, 0xE5C77633, 0xB2EBE9F0, 0x18AF2F87, 0xBD763BEA, 0xA6775011, 0xA2A1AD08,
+0x284B90E7, 0xCE02EF4E, 0x401924D9, 0x49E93331, 0xED0383F5, 0xDFA16EA9, 0xC0740FED, 0xE0DADF70,
+0x24A6E7BB, 0x1FBF1D13, 0x0E1C5EC0, 0xBC7977B2, 0x9CCB8668, 0x5C294636, 0x25346CCA, 0xE289B473,
+0x2097803E, 0x427B0108, 0xAD04E755, 0x3116EC88, 0x56E0BD31, 0xCF290A5C, 0x80459080, 0x8FDA2652,
+0x04150CC6, 0x0414E94B, 0x74326504, 0xA1FEB743, 0x6D56F757, 0xBECD19F1, 0xAFDF1CB0, 0x09224880,
+0x11E81C18, 0xFE7EDC51, 0x94683332, 0x20725BEB, 0x488985C7, 0xB35775E3, 0x259A1461, 0x502D2330,
+0x3B7FAFBC, 0x1D06A0EA, 0x90BE168A, 0xF291CD80, 0x202A757D, 0xC8E99304, 0x4063BCE0, 0x38BA1350,
+0x561FF03A, 0x3EDC16F3, 0xE964FEF4, 0xFCCB0375, 0xAF4881D3, 0x89B69E36, 0xADABD4E0, 0x6BEA10D0,
+0x283CD36E, 0xBC49F369, 0x0AACC4AF, 0x88742EFD, 0xB33F0D30, 0x25DAC9EA, 0xDEB5A1C1, 0xF52B4ECC,
+0x07A5611F, 0xD1C67642, 0x16016CE0, 0x5FBD482C, 0x7D2DA07C, 0x388CCA20, 0x8341AABA, 0x049460F0,
+0x7DCF3796, 0x90D279DC, 0x889E6B9A, 0x35C49310, 0xB6D7A571, 0x2E0F4EEF, 0xD8ADC2CD, 0xA2B73838,
+0x3580FECE, 0xB5E6E170, 0xDBCC8906, 0xEBD05627, 0x29508E35, 0x1222D201, 0xD124C4C6, 0xA2E9AE21,
+0x0AE4B46E, 0x47A5DE21, 0x7AB361AC, 0x9A6BEDC0, 0x414A06F7, 0xB894718A, 0x620ECE68, 0xB510424E,
+0x59871BEF, 0x6D3B12C3, 0x7FBA323B, 0xC1A46C92, 0x31D28033, 0x55B99E9F, 0xE90C865E, 0x82FD8995,
+0x01A483B0, 0x767B199D, 0xC90D274F, 0xEBCCFEAB, 0x12C4332E, 0x636444C7, 0xBCD0AF83, 0xB2AF0696,
+0x328C04B0, 0x47AF4DB4, 0x3DCD6D1F, 0x6135F182, 0x4D3402FF, 0x1568D6D7, 0x62D4CEE4, 0xCA86C3CB,
+0x1F79E13C, 0x703C17C1, 0xB2F97D94, 0x6A2F258B, 0xDC0148EC, 0xB7AC3B56, 0x76047235, 0xA9925E7B,
+0xFDA12171, 0x91CBC95E, 0xB6C3D2B0, 0xF0D0C5F2, 0xB4886B9C, 0xDE0B5FC6, 0x2F4AB282, 0x3CD53A2C,
+0x73A0B634, 0x49A4FECD, 0xF257E092, 0xA1E9C616, 0xCB16A766, 0xF12DA780, 0xE1EC8710, 0x5D405B58,
+0x6F5D0788, 0x00730043, 0x17BF7ECD, 0x6AA567A8, 0x5030EC91, 0xB7CEF68A, 0xA2552CE2, 0x844B800C,
+0xD698C59A, 0x370C8907, 0xFA609154, 0xD6098497, 0x258C3A6D, 0xAC93339E, 0x6852CABF, 0x66E4F8AF,
+0xE285391C, 0x7A082264, 0xA0CF9073, 0x3DBD6A64, 0xBEAC937D, 0x7EC81E88, 0xA83841D3, 0x45798D9E,
+0x4E6F8636, 0xF7B2A35C, 0x437A0F60, 0x3FF3A825, 0xE97AFF50, 0xD05492B7, 0xF42905C5, 0x5C073352,
+0xEE51BD3F, 0x17541768, 0x429C27D8, 0xDB8BA3F3, 0xE2B87C94, 0x649D5E1A, 0xBFA58985, 0xF0EF3FE4,
+0xDACD9A40, 0xFD2ECB83, 0x1D56C200, 0x429FC3F2, 0x1440CB1D, 0x68989F61, 0x7C9FD283, 0x835F9926,
+0x55ED4845, 0x10C38A0E, 0x3EAB8F19, 0xE0CB1B51, 0xF5487F07, 0x8BABC3D5, 0xF4C7866C, 0xE022DA4A,
+0xED4D8DF4, 0x846FE20D, 0x3AC655B8, 0xF7827295, 0xDE143874, 0xF95A25D6, 0x0E54D953, 0x47B6E5E7,
+0x18A87794, 0x85857938, 0xD19A6BA0, 0x877806CE, 0x728ABAFB, 0xC6E6C86C, 0xBE64DD3D, 0x789DAE73,
+0xA92B3890, 0x1C0EA204, 0x4694EEB3, 0x56AAC524, 0xF4B57BDB, 0xB0F1ADCB, 0xD7239969, 0x68B90153,
+0xCA6350F8, 0x627C7D3E, 0xB68475BF, 0xC9546816, 0x079E3C89, 0x52C4308E, 0x6F3A3026, 0x2DC5C96F,
+0xB546FC88, 0xEA050968, 0xC236C116, 0x04D5D92F, 0xF68DCF30, 0xDFF65687, 0x844C5FE5, 0x6B9BD773,
+0xE7C993D7, 0xB528C945, 0xCC6840C0, 0x48F26620, 0x3BBCA213, 0x2792991D, 0x156C6BC4, 0xCB55441E,
+0xC9B16D29, 0x6E2A4EE1, 0xDE3ADD53, 0xFC3CF22E, 0xC4A83413, 0x114914E5, 0x04855DB0, 0x3664C86F,
+0xB3905AC8, 0xC47EEA65, 0xEDED377D, 0xCA6F5B56, 0x3F6AC498, 0xEF35A058, 0xF9E261AD, 0x55549419,
+0xA9811E81, 0x04B20543, 0x0DE05047, 0x9C176319, 0xAC98DAC4, 0x8E371B9B, 0x43FF0EE4, 0x64F241C4,
+0x7B47E0A0, 0x1788DB9B, 0xD76C3F94, 0x0E0EE070, 0x2E834DC7, 0xC8B058A0, 0x5232E828, 0x91B2E182,
+0xC2A867E2, 0x3A40DDCD, 0xF164CD46, 0x9C135EEC, 0x36DB715A, 0x31D3A1AE, 0x1BCC3C55, 0xA99F42AD,
+0xD771D8D4, 0x41922F14, 0x5F09DB82, 0x94A8987B, 0xCFB5D871, 0xE6E9BE2C, 0xE2C8C2C0, 0xAEC5ACB4,
+0xD1691B3E, 0xB1C5E59B, 0xF9BC8CEA, 0xFBE6ED91, 0xD35BFF1A, 0xC92A872B, 0x16855AF1, 0xD4FCCB63,
+0x835C5DEE, 0x61C134D8, 0x29DB70FD, 0x6A775D9F, 0x8610923B, 0xAD2BC954, 0xD0722999, 0xC71B3FED,
+0x5CDBF809, 0x3353C20C, 0x7DF183AC, 0x6FE96F3D, 0xA4A78545, 0x502C0B3E, 0x966DCB8F, 0xCD592443,
+0x004311D7, 0xBC6BB6B3, 0x2B75A38D, 0x6F87D7BD, 0x8B6FDF40, 0xE72187F4, 0x8D79E15A, 0x282DA323,
+0x7EA5A042, 0xD4932F58, 0xF34C940E, 0x615AD27E, 0x8D040BA5, 0x9086FE2B, 0x9899F4DF, 0x530941CA,
+0xB0CDAAD9, 0x1A15836A, 0x960CB6EF, 0x3F32E2E0, 0x22757CEB, 0x4A144E99, 0xF1D0ACA5, 0x38424906,
+0xD551FAAF, 0x3FF0E9F0, 0x93649306, 0x4DBBCD15, 0x745D711E, 0xAEF443A9, 0x0C8D601D, 0xAAA3439D,
+0x985493D6, 0xCDA789CE, 0x5E5EA38C, 0xA8D127C0, 0x33C75E39, 0x7BC76BF6, 0x310C272A, 0x9D955546,
+0xCE0EF6F3, 0x96630FC3, 0x9AAA69B3, 0x7C671DB0, 0x364CF291, 0xC09A19EB, 0x0CF29EA6, 0xA96FC33E,
+0x67970BB3, 0x2CEE2FE0, 0xC2F06763, 0x26514FB6, 0x4065989D, 0x36DBFEF7, 0x16539FEA, 0x7F660557,
+0x02D5CE4B, 0x854234A7, 0xACE89387, 0x061B592B, 0xE7B2A77F, 0x2831FB80, 0xAC79D1FB, 0x1978F376,
+0x623967E9, 0x7E33E1CB, 0xD2A7AD8B, 0xC1FDFD6A, 0x965C26B9, 0xA17C05A6, 0x6FCB6E5F, 0x8A8ADCFE,
+0xF545CCAC, 0xDAA61772, 0xA74096B7, 0x21BF49E2, 0x4E560CAC, 0x3DFFC903, 0x9FBB3E40, 0x98C302CD,
+0x28325152, 0x7D0DEA42, 0x78685F29, 0xD3503F41, 0x883B6190, 0xA4760CE1, 0xEBD21B9B, 0xB548B9D9,
+0x42CF92DA, 0xD1149BF8, 0x60C41855, 0xB1C576D7, 0x19070F24, 0x6BC1AE19, 0x756EF471, 0x36B95161,
+0x1A86B2F3, 0x072134D1, 0x2ABD36FA, 0x4541000B, 0xDE951F12, 0xD6B4464A, 0xA8464725, 0x0A6102A0,
+0x674DAC76, 0x4067487F, 0x13B70372, 0xCC783B5F, 0xDF611D38, 0x563DD2B4, 0x07120F73, 0xC7707F36,
+0xD7ECCFEB, 0xE1D4A6A8, 0x75D040F8, 0x555B9838, 0x460EEF26, 0xE843328B, 0x6E351CAD, 0xD46B79D7,
+0x562E146F, 0x635A2BAD, 0x1519F7BE, 0x6FC2265A, 0x87C6C42B, 0xBC0F6E4A, 0x7A04EAE2, 0xA38A11CE,
+0x132EB489, 0xBEC45AFB, 0x5A708867, 0xE3817AFC, 0xF79C515A, 0x776C04E9, 0xE1FC7F11, 0x404D70A6,
+0xA0B94D98, 0xF3328CED, 0x6FEEE3A9, 0xF3C27323, 0x843529CB, 0x6EF99E34, 0xE9818903, 0x1CA227A7,
+0xF0D72965, 0x0BA823CE, 0xAB81688F, 0xAC936B0A, 0xA9009917, 0xC67F3D41, 0x0239FA7C, 0xB3F0826A,
+0x72BE1CF7, 0x523281DD, 0xF067E6F8, 0x1402B9CD, 0xBEFDB723, 0x357045E8, 0x3BBA8436, 0x41C4AE33,
+0x53F7F359, 0x7CCE4D52, 0x8A66FE96, 0xBC0F6F3A, 0xDF19C617, 0x16829CCC, 0x8094F11A, 0x951B5E6A,
+0x72AFA94E, 0xC180EA4F, 0x7FFC08FB, 0x1EDD7326, 0xF3F39F01, 0x52EEF8D7, 0x3A09F163, 0xBEC75FB9,
+0x77249D8E, 0xC587BD59, 0xA2A5528B, 0xFCD04688, 0x3E358CBF, 0x83973DC1, 0xDC31AB40, 0x5D41A9D6,
+0x1825C050, 0xEC43F2F8, 0x2B4946CC, 0xD16C01DA, 0xB572D633, 0x8C0DCBD1, 0xB4456CF6, 0xA9F344D6,
+0x80F860E2, 0x6B3CED35, 0xE458E807, 0x201F05DA, 0xCC35DFDC, 0x532829B7, 0xA43233C0, 0xC5BAFDE0,
+0xDABD8545, 0x1906753A, 0x661FE3E4, 0xA2F521BE, 0xC82F36F2, 0x3FF3714A, 0x1C3716FF, 0x5A667933,
+0x81A6DD21, 0x56365965, 0xC99FBD03, 0xD871F227, 0x66DC5C1A, 0x819F496C, 0x515E89AB, 0x202A41C0,
+0xE19073BE, 0x78691435, 0x999136E2, 0x097E8FF8, 0x790D824E, 0x84473AC7, 0x9AFA8144, 0x22CD64C3,
+0x44974942, 0x9BD5BA36, 0x711E795E, 0xD510EDCE, 0x5236CA8C, 0x3624D92E, 0xE45C9A0A, 0x18C505A4,
+0xB6501166, 0xE706C56E, 0x41E2B852, 0x390DFEF5, 0x53E32D61, 0x1C734611, 0x55404637, 0x1D451D73,
+0xEF3EB8DC, 0x3C72B4E4, 0x8ECB469E, 0xBE2E0D7E, 0x1B777BAA, 0xE47059E8, 0x091445B7, 0x4ECB238A,
+0xF4A671A6, 0x1D5BFD35, 0x255CA51B, 0xC90A665B, 0x0CE478A6, 0x3A1897CE, 0x03B9ABD1, 0xED3EAD4E,
+0x7F7965CC, 0xB3858E14, 0x7336C3CF, 0x4AF31077, 0x35944E64, 0x3EC910A7, 0x53804D71, 0x873EB3F6,
+0x5C11A59A, 0xE3B58E65, 0x4383B0DB, 0xDCAC9847, 0x2745CD73, 0x873F1EED, 0x7CB578D9, 0x2C4A7A18,
+0x8589D09B, 0x5536A401, 0x7D3F1AEC, 0x2239893E, 0x8B4B3E47, 0xF2F7EBB0, 0x62BFF8B8, 0x320C5D52,
+0xB18920FF, 0x8E2ACBB4, 0xD02D5F18, 0xC48ED911, 0x8E067895, 0xC0AD9C71, 0x44F96F3B, 0x1D31B77B,
+0xBF9F3F9D, 0x7476400E, 0x4839AF49, 0x98B050CD, 0x0754C628, 0xF83857F2, 0x73A1D69A, 0x66A65A83,
+0xCF929A0C, 0xD2E787B8, 0x55D50416, 0x52E28353, 0x24FFB18A, 0x2103A3A3, 0xBAF115A1, 0x65269438,
+0xAA5C694E, 0x6D955122, 0x60BC9197, 0xA170CF30, 0x57197DF1, 0x1506527B, 0xC85D2988, 0x1488B140,
+0x90A1E546, 0x217A0EF5, 0x9F0394C9, 0xA271BE69, 0xEE300305, 0x8D3A1EA7, 0xBB57324C, 0x044E4AB4,
+0x9FAD562C, 0x68A8A995, 0x066DA6CE, 0x8EB94271, 0x0C3005EB, 0x59CB3670, 0x2965D5D1, 0xD541E99F,
+0x663DEEB7, 0x9D63DE33, 0xA19DFD70, 0x22AC6BF3, 0xF8DFC9EB, 0xC81EF172, 0xAECDA585, 0x7B93728A,
+0x825A368E, 0x58378F8B, 0x038A4FF3, 0xBBC6EA0C, 0xA2A3CC50, 0xBE6C7550, 0x45DC6BDF, 0xFDDF62E3,
+0xA4D3777B, 0x90032835, 0x32832F9D, 0xD6B9C199, 0x9721B14F, 0x42505B47, 0xF9CC7A32, 0xA5E6D7FB,
+0xD12590D0, 0xFC765A77, 0x4C3231D9, 0x9F67573A, 0x5436B8BA, 0x25FFD25A, 0x85216483, 0x85B3DBDF,
+0x5BCDA8BF, 0x1F1F9CF5, 0x6558B089, 0x66C6F076, 0x0B6C97FC, 0x9F180863, 0xD2A1573F, 0x029551BE,
+0x918CE91E, 0xB0107346, 0x83CD23EB, 0x0E612B24, 0x7F6934E6, 0x690724EF, 0x943E74AA, 0x8711D552,
+0x8369578C, 0x60357F5B, 0x207C5854, 0xE4A8A056, 0x8CA3D504, 0x5FE43AC5, 0x35CFA87D, 0x66C98465,
+0x24E69270, 0xA9F95426, 0xAB0F91EA, 0xDBAD033B, 0xD246DFF7, 0x0D161918, 0x36CEEA7F, 0x8CD6C345,
+0x4E89F65D, 0x9BCF080C, 0xA3ABB13E, 0x568C70DE, 0xCDCEDB9C, 0x03F58862, 0xE6A57149, 0x11A03417,
+0xC17729BC, 0x62E1D66B, 0x7D8F230D, 0x836FC76F, 0xBDBEB744, 0xA7E27E4D, 0xFEEFE769, 0x780878E7,
+0xA0F8994A, 0xE3ED2A59, 0x32EB0431, 0xE3687A7B, 0xC8901391, 0x952DF63B, 0xA673028E, 0xB08B45A5,
+0x268FB4CA, 0x250439A1, 0x19164FB2, 0x38A31A54, 0xD3841CCD, 0x6CDDB8BA, 0x004E7B6A, 0xB466449B,
+0x20F8A839, 0x67A856A2, 0x58E19764, 0x999E801A, 0x465F7683, 0x99AA73A7, 0x27A9DAF1, 0x3455910F,
+0x4E5B90E2, 0x0AB221A1, 0x732743FC, 0xF065CB08, 0xE8FAB961, 0x06317ED0, 0x252F923F, 0x7E60495D,
+0x43F1F590, 0x4FD29E4F, 0x98579527, 0xE170BA32, 0x344D38F9, 0xBEFE42EA, 0xC8C6E6AF, 0xEB287AAC,
+0x714FAC3F, 0xCEC588AE, 0x23BACF53, 0x04C20899, 0xF48E64B1, 0x4B1F0E17, 0x22636C0B, 0x81F1BB80,
+0x009CE594, 0xCB460570, 0x572E1CA8, 0x8DC537F6, 0x65009FE0, 0xF5A70C77, 0x4963B363, 0xC61821F4,
+0xB7ABD1E5, 0x7C51D7E1, 0x494DF9A0, 0xA9295790, 0xF66087D4, 0xE68798B5, 0xF183BF32, 0xCD4784D5,
+0x18C798E7, 0x6BA81C73, 0x6F9FA025, 0x247792A3, 0x77653B3C, 0x41F1191D, 0xCE7E72F3, 0x2BA83E4C,
+0x27968526, 0x627B93F4, 0x0DABBFBE, 0xDC4E036D, 0x6DEDD104, 0xC2D1ADDB, 0xA2D44053, 0xC603F82C,
+0x027D09E3, 0xB15FCAD7, 0x77ECE995, 0xDC228D3E, 0x85A6EED4, 0x3177BDD8, 0xB6E4269C, 0x67D3A6E3,
+0x7800A433, 0x08529F17, 0x38E67018, 0xCBCEA869, 0x2385EDCF, 0xFC6D6641, 0xF0B44054, 0x65DDDE28,
+0xEB95DBC4, 0x2640176F, 0x4679D9E6, 0x6869A79B, 0x9E39A06C, 0x8432032E, 0xB0E396D8, 0x7CCEB1F4,
+0x4858A2E6, 0x09956E1C, 0x75906B28, 0x7547FB24, 0xCF9E04F7, 0x719EF7E6, 0x53FF901F, 0x006EDD25,
+0x33F0A431, 0x3DC24946, 0x8A0B854B, 0x22B719C4, 0xB1B21DF7, 0xCE9D3D0F, 0x6523E5FB, 0x2123FA7F,
+0xDF45A1E0, 0x0E6CB5D1, 0x7C714B1C, 0x0C0DDB63, 0x7A6137FE, 0x58720032, 0xEE476138, 0x3DD6CA9F,
+0x41967F31, 0x5B3AC4CE, 0xCB3B024D, 0x125535C9, 0xC0DEF21C, 0x6F50A9AB, 0x4E5BFDD7, 0xE8718FB5,
+0x1C79C3CF, 0x60E199DA, 0xEF456295, 0xD51F2D13, 0xE65209B1, 0x3D67A888, 0x69AA1682, 0x618FE77E,
+0x3927B891, 0xE0383E69, 0x7D227A5C, 0xDFB0D6F3, 0x6B016C3A, 0xBE9D4B45, 0xF6386429, 0x20971347,
+0x761B40ED, 0x709979D0, 0xCD65A917, 0x12869EC7, 0x251DD116, 0xAB4A0C4A, 0xC2DBAE43, 0xB02923F8,
+0x46241D7A, 0xCD46A336, 0x781D810D, 0x3A07C5C7, 0x2BC4DE96, 0x8703A242, 0x85714547, 0x8C3123A6,
+0x973D14A1, 0xD9ACAEE3, 0x76788146, 0xF748B6DD, 0x25A524AE, 0x3AC2AEC0, 0xCDF9B452, 0xE9F7B50B,
+0xD0C1A597, 0x34122C58, 0x471A26C5, 0x2D113947, 0xA0220E9D, 0xFD84D112, 0x8E1691AF, 0x917E4F6B,
+0x543F03BF, 0xE36B4290, 0xCE054C7A, 0xB9FCD2AF, 0x2AB69C6D, 0x54A2979E, 0x36112D55, 0x25EFF8EE,
+0x07BC7233, 0x772C8047, 0xF2A3EF09, 0xB0040A7F, 0xD4803A71, 0xBFF72A37, 0x5B4810EA, 0x6C44ECF2,
+0x632452B7, 0xCA97DDAA, 0x86554E86, 0xAF8780B8, 0x7D6234C0, 0xA0F31757, 0xA650000D, 0xE6F26664,
+0xB2038F87, 0x4EAF09FC, 0xC675F433, 0x31E340FA, 0xE850168F, 0xC14BED41, 0xAC409318, 0x2F8ED18A,
+0xA7C05934, 0x2B5E1C8B, 0x4BBA9FED, 0xDE63BC93, 0xF53BC2F5, 0x6DAD8BC1, 0x657D0A0E, 0x037050CF,
+0x80BAA0CB, 0xF0821484, 0x90218A60, 0x431067B4, 0x3E21F6E5, 0x7F96C72D, 0xB6BD717C, 0x73B7BB10,
+0xB7C01C57, 0x842FB8FA, 0x3E5C8292, 0xD454B262, 0x061825AA, 0x607FABE6, 0xFD5B1C67, 0x2713FA6B,
+0x2E3832E2, 0x61B4A3C5, 0x2EFBAC7F, 0xCE311E24, 0xAA4CA1A0, 0x645F315C, 0x2B6C3676, 0xADF5A739,
+0x9E86C340, 0x4F541EFF, 0x13F21572, 0x6468FA31, 0xB3A0EFD0, 0x5E9720CD, 0x4B789876, 0x1C15EC78,
+0x850723C1, 0x2EE46EA8, 0xF96967E3, 0x947DA1C4, 0xE35246C6, 0x75C7378D, 0x2A522155, 0x91D76E96,
+0x8534CFD1, 0x67263708, 0x51C0650B, 0xB5F504EE, 0xE07ABB96, 0x28F59416, 0x5BCED238, 0xF8567EB8,
+0x9C119314, 0xEDDBF8F4, 0xAEB60E1F, 0x4EEF1582, 0x9928CD22, 0x354CFF57, 0xCEBF5616, 0x7F99941B,
+0x77D3269C, 0x111147FA, 0x760BA172, 0x7D80B6C1, 0x2DEA22D9, 0x22AF1CB2, 0x6988F291, 0xEB441D5C,
+0xECA66368, 0x780DEDBA, 0xFE286A76, 0x7082402F, 0x4B9565C1, 0xA5674177, 0x8BB0B1E4, 0x1F31D349,
+0x3144305F, 0xCE7836F0, 0xE41C4DA7, 0x768B9FF6, 0x0D5AC05D, 0x7E7838D6, 0xD913233E, 0x73173E9C,
+0xF0455501, 0xA14359D1, 0x585C3983, 0xB1554809, 0x31335685, 0x7816F9FF, 0xAFE0C62C, 0x3C90131B,
+0x304660D8, 0xE03861FE, 0x895FAF58, 0x71392DA5, 0x956D8D1F, 0xF4FB4EB4, 0x859B1C9A, 0xD8091A43,
+0x9C612914, 0xC03F5B3F, 0x89A716AB, 0x6017D6A8, 0x38637BB8, 0xEEE36C6A, 0x40C39DF4, 0x10FEC9ED,
+0xA027DF73, 0xDB53BC84, 0xD119458D, 0x1582F688, 0xEA0A9506, 0x64DB5505, 0x408276E3, 0xD98F867B,
+0xD2F2FFFC, 0xE7C2BE9B, 0x8CE16C57, 0xBFA493FA, 0x93C1D7FB, 0xC3837D7F, 0xD4393EB0, 0x5989143B,
+0xC02F5DD1, 0xA2F74144, 0x669D1F32, 0xFDE5BEBD, 0x466F1C16, 0x5BD3022B, 0x91189C1E, 0x1132A314,
+0x5F37D640, 0xA55550C1, 0xF8089A89, 0x6C7DEDC0, 0x48F15D6E, 0x3D4414C4, 0x8D1F9527, 0x183B33C6,
+0x29CCBA65, 0x3563B185, 0x797E7F7D, 0xB2F5C81F, 0xA25CD487, 0x482CE384, 0x40163141, 0xD8CA1E5B,
+0x77F46400, 0x324C87AC, 0xF0A2A178, 0x05AB5801, 0x16B512CF, 0xC200DB50, 0x10D072F9, 0x50498AE0,
+0x5991E7BA, 0xD92AEE92, 0xB0E397F4, 0x6C5635EB, 0x1EA0057A, 0x5A7012C5, 0xBBF46C2C, 0x1C2A9FAD,
+0x6D165507, 0x477BE54E, 0xCA6C1966, 0x61DF2ACA, 0x557F464E, 0x12A3E878, 0x58504498, 0x581D82D4,
+0xE5211BD8, 0xFBE087C2, 0x8E3CB9AE, 0x0C40A42C, 0xC1DD32EE, 0x54D4AC4E, 0x51240A17, 0x2805270C,
+0xBE1B1CC6, 0xA38E352B, 0x0F71EF4C, 0xECF22CFA, 0xCE830168, 0x03CFFBB5, 0x51694EBE, 0x65DFA884,
+0xB7C0CE55, 0x4785533E, 0x3D45D9A2, 0x0EBAD701, 0x5996CD91, 0x41AE2B29, 0x405E82D3, 0x052BDC8A,
+0x4DD136FA, 0xD1E0E04D, 0x6F204EB6, 0x70022E79, 0x3C41DC9B, 0x432F7147, 0x467207C9, 0xA6F120E2,
+0x0469FEF1, 0x045A76A9, 0x9D8CE561, 0x36262E75, 0x7A525545, 0xB02BE8C1, 0xBB18421A, 0xA08C1D28,
+0x613583A8, 0xBFFE197F, 0xCABD53B1, 0x27E4A39E, 0x57C93AB8, 0x92681AA4, 0xFE988046, 0x1AEC5241,
+0x7CB32236, 0xF1C1F7F7, 0xCB6D78AA, 0x469D4066, 0x75AEE823, 0x3157AB38, 0x85C6C976, 0x6F8FFC14,
+0xF5567D5A, 0x344E116A, 0xF9E04586, 0x8EBF6CF4, 0x17C8D067, 0x56442AAA, 0xDF3E777C, 0xEB4E3244,
+0x70B692A3, 0xA237C5CC, 0x604E85F3, 0x6D0D0CEB, 0x550E5B4F, 0x869477C7, 0xF5596513, 0xEE761AE8,
+0xEFCCBF6C, 0x937263EB, 0xAF2AA785, 0x82AD4746, 0x338772B6, 0xC37DCDFA, 0x4EF5B2EE, 0x56602B3A,
+0x702D05F3, 0x099ACFE5, 0xD8A75402, 0x382C234D, 0x3FCE293A, 0xCFC422F8, 0xE8BBD2C4, 0x4F9F2504,
+0x7FEBD340, 0xDC9A135F, 0x75FE9566, 0x735D7BE8, 0x9EE131C9, 0xB7AFD89A, 0x787CE755, 0x50F1FDCD,
+0xEFAF650E, 0x77B1DEEA, 0x918F4D3A, 0x3C0212B8, 0x1CE13583, 0xB93E8BF1, 0x3C4ABC85, 0x48BAA9C2,
+0xB90AF49F, 0x1E72B1FD, 0xB71F9B4A, 0xEB6EAC10, 0x028074B6, 0x5FC2FAC8, 0xE6E55B9F, 0x0792FFDF,
+0x976B8371, 0xC63C1417, 0x9DDD5DE9, 0x8E9AE235, 0x535AA34D, 0xA2DFCCF9, 0x1C0E1A15, 0x468A0DE5,
+0x13805FD7, 0x44AAD51D, 0x3E55E79D, 0xD7815310, 0xD3A63632, 0x7B2AC9A3, 0x574F1AF6, 0x29DA5CA9,
+0x4AF3893E, 0xCAD1C21C, 0xFB98BFC5, 0x2F6B7357, 0x1259F070, 0xBCEB5AEC, 0x6E9063E3, 0x2E1CA49C,
+0x86CD61EC, 0x9A6B06DD, 0xCB90DC95, 0x4165F05B, 0x37C9053A, 0x14D9963D, 0xD69FA2B1, 0x916E5C01,
+0xDE028221, 0x864A1E87, 0xE3F49A47, 0xBA5CFF4C, 0xDEFBB576, 0xFB7BF2E3, 0xA3C458D6, 0xB7491506,
+0x15A56BC7, 0x4F36DB1E, 0xBA1DDD76, 0x5A0A1C00, 0xD980F81B, 0xA2BCA310, 0x728B9414, 0xD89CBFCF,
+0x257503CF, 0x511ED7D7, 0x3073A542, 0x6F8018B2, 0x2788259F, 0xF16D31D6, 0xED92994D, 0x3BCB61BD,
+0x33BFB14D, 0x8B230F1E, 0xE8326524, 0xEEC2A08E, 0xA8F400F7, 0x47B876C7, 0xE1073E71, 0x19BE589E,
+0x13B66F12, 0x892669B7, 0xDCBD0C74, 0xBA30E9A8, 0x65ED0A21, 0x90431A04, 0xE5A8B5E5, 0x6D0E395E,
+0x17C19887, 0xDF48D1A6, 0x76F9D2E6, 0xDE9648A7, 0xC030F45E, 0x19CBE2C0, 0x914D8E92, 0xBC9F3DF5,
+0xCAB7C6CC, 0xD5414E12, 0xDB9E01A7, 0x13BCC6E6, 0x5C3C4C4D, 0x4F322BF0, 0xEF97A8CB, 0xC47BBEB3,
+0x8DF29866, 0xA1A0E734, 0xCD309AA8, 0xB45B7D55, 0x92690467, 0x5CD2C748, 0xED696D8A, 0x014EEBA4,
+0xDD1A8C98, 0x6C6E421F, 0xD7B24DE9, 0xE3E580C4, 0xF06787C5, 0xC5730F86, 0x27833155, 0xB94F2DFD,
+0x00382E42, 0xCF9C1905, 0x5965DDC6, 0xA6DC4B53, 0xAAA6A980, 0x6D20694D, 0xB70C92D8, 0x0F991B2A,
+0xCA5192C2, 0xACF67AC2, 0xBA378401, 0xA78B65C4, 0xB0A8D55E, 0x7B9BACCB, 0xB76ACB84, 0x20AB1967,
+0xFF799048, 0x0EF10F06, 0x2D601487, 0x3155BC2C, 0xD641E777, 0xE8370893, 0xB984873F, 0xA2073F99,
+0xF9322A7B, 0x2DA26C64, 0xAA02488B, 0x5FF7A619, 0x7A3B7DA1, 0xB376ABE4, 0xF8EE54CA, 0x80C958D8,
+0xCBD04677, 0xFC29AD0C, 0x18D40857, 0x03DBB55A, 0x43102A34, 0xAFC8FE71, 0xE780B1D9, 0x2F887179,
+0x029FD3A6, 0x8988A6CE, 0x938EFCDB, 0x9CDEEC12, 0xB0DA18CC, 0x4634FB5A, 0x1DB230F6, 0x8ECC6474,
+0x1D2FF0E0, 0x02590643, 0x873ECD85, 0x52956357, 0x383A41E0, 0x849BE256, 0x95267A05, 0x1C7AEA81,
+0x3F60C9FC, 0x37C705E6, 0x507E6DDA, 0xE2BD157C, 0x28A265C4, 0x21C2758F, 0xA37D8F6F, 0x03641DB9,
+0x5CCAF986, 0xD81ED899, 0x175EEE49, 0x6B86581B, 0x4D42FA53, 0xECF1804D, 0x7773EB1E, 0x25CB0847,
+0xD05F6760, 0xB08A2AF7, 0x9FFC59B3, 0xEC458A04, 0x14FAA174, 0x7FFAF74B, 0xBC92101A, 0xDE967479,
+0x40F08B4C, 0x48A209E1, 0x1ACA53AD, 0xD9807353, 0xC8B89AD1, 0x667893B7, 0x4A508620, 0x25BF6658,
+0x21624EF7, 0x5731E2C6, 0xAB5E2AA1, 0xCEE8DA7B, 0xC395A910, 0xCAD58285, 0xDF2977DC, 0x1F758290,
+0xB206188F, 0x9E5667F8, 0xDF3D885C, 0x80E1803A, 0x0BB73864, 0xD2B4BAC0, 0xF6BAF94F, 0x20AA1B14,
+0x76521C3C, 0x822E25D3, 0x4E2B5018, 0x49F9B3DD, 0x93F27A1C, 0x5433ABA5, 0x0252124C, 0x7B90CBF9,
+0x2FC2A7BF, 0x6D1C73A1, 0x231870D0, 0xBEC73691, 0x7A976D26, 0xE38EB8C5, 0x6846EC89, 0x7633465C,
+0xCBEA172F, 0xDD51F74A, 0x7E275D04, 0x5EB3BFD0, 0x9ECCDED4, 0x67893D8E, 0x857379A3, 0x0A8F197F,
+0x5458133D, 0x0AB42E83, 0x938E2734, 0x9C0485D1, 0x30CE3045, 0x7EBA3024, 0x7DF7D8A0, 0xAAD7FB69,
+0x0C1406F3, 0x5505331F, 0x3238C948, 0x00D7906C, 0x0D8526D4, 0x8173B26E, 0xEA7C43AC, 0x6F375D64,
+0xFA2619DC, 0x7AD1F948, 0xE1B6475D, 0x92055297, 0x8A5DF9FA, 0x84A028D8, 0xE3BD24C5, 0xEFD7BCC0,
+0x40AD2E6F, 0x127C894C, 0x33C4B62F, 0x2483D132, 0xB739C708, 0x6647955A, 0x03EB4BC8, 0x4D43F40C,
+0xB24E7E8B, 0x84DC79C7, 0x207A2CD2, 0x67E0A39D, 0xE246F115, 0x8CD3F651, 0x00861B82, 0x1CE2120E,
+0x3DE3019D, 0x24D5F1EC, 0x67F196E9, 0x591D856E, 0xAE74D44B, 0x634615BD, 0x9EE58B1D, 0x9D8F33F2,
+0xF8827838, 0xC3F4A61B, 0x478203F9, 0xE3D8A0E8, 0xCA7C41BF, 0xC1EF571C, 0x4381C645, 0x23D37EBD,
+0xE3CA771F, 0xEB8C5974, 0xDF958B0D, 0xCCA7797E, 0x7248B757, 0xAF02E95F, 0x36C1DD7C, 0x143769C9,
+0xC195B052, 0x3193B5EB, 0x9657C68D, 0x0D0631A1, 0xC23E7B2B, 0x79482F73, 0xF821C2CE, 0x4EACEBE2,
+0x04F497A5, 0x734283B9, 0x12EFB9F0, 0x6897CA40, 0xC66C1012, 0xAA732CAE, 0x1C2C04F2, 0x0EBC62BB,
+0x48ED1E30, 0x223EB3D7, 0x2BF2D148, 0x49175F9F, 0x13C41270, 0x16F48515, 0xC2078F15, 0x423B7E29,
+0x058F8C43, 0xCF95F57F, 0x251A7007, 0x6812C023, 0x5E245E74, 0x060ED458, 0xF5378C82, 0x52F4AB00,
+0x6DF797A5, 0x72F6B202, 0x792595C6, 0x723D8EC7, 0x39086585, 0x8D2FAC28, 0xC08C82C2, 0x892C2422,
+0x9CD201A1, 0x8BCE2E54, 0x5EA244BE, 0x25E652C8, 0xF0013E0C, 0x479C5F89, 0x52E38976, 0xE3A56543,
+0x948CF409, 0x4552DB23, 0x70E769D0, 0x5B704B75, 0x937902D1, 0x034585A3, 0xED4CAFC1, 0x12EC7634,
+0xCEEA9071, 0x5638B61C, 0xDA1E6779, 0x7E9278E9, 0x864B77FF, 0x37D2F048, 0x30F287D2, 0x9CB2B354,
+0x8231FBD4, 0x433A786A, 0x068734D8, 0xDC110178, 0xCE081F22, 0x50D7941A, 0xB2C8A894, 0x722735EE,
+0x6DDAD1C0, 0xE3301011, 0x6F342030, 0xAB74B23D, 0x5EBF7DA9, 0xF0F693C8, 0x073A573E, 0x132ADD13,
+0x1DDFB758, 0xFFFB892A, 0x8FE7E310, 0xA464611A, 0xBDF99641, 0x933E7AEA, 0xDE7D2EC4, 0xBDD1E639,
+0x2A685AC7, 0x52BA0E30, 0x3A497A93, 0x58C8059D, 0xA3D6700D, 0x43D93E37, 0x65818BCC, 0x815E10DF,
+0x4615A989, 0xBA0AA622, 0x4EEF9A09, 0x99F3172C, 0x85400FB1, 0x93EEE7CB, 0x9A9F37AA, 0xD9D81A0F,
+0xE3D77030, 0x8F356D93, 0x7278B06F, 0xF2E3289D, 0x6739F54F, 0x9C003B07, 0x402B41C4, 0xF0F69DF1,
+0x7A4DAB2E, 0xF4D2FC12, 0x72BB3115, 0xC825A4C7, 0x41B93ED7, 0xBE41096E, 0xBB1ADB4C, 0x64B463AB,
+0xE1DA6C1C, 0x04261B38, 0x7312B478, 0x1A96AE5F, 0x3719EB09, 0xF7A6CB52, 0x2B631E07, 0xC1647264,
+0xEC3A7E8D, 0xBC03D338, 0x4819CC53, 0x4987BD4E, 0x28058292, 0xC57FA697, 0xBC0EB27B, 0xFC865587,
+0xB63872A9, 0x97F74894, 0x65B9DF54, 0xAA9632D2, 0x2E3B413A, 0xD4E4967C, 0x1B7E4FED, 0xED31C095,
+0x53F6C2B1, 0xF40A8077, 0x11879CA7, 0x9D1B8DD0, 0x5DE7C09D, 0x7500C341, 0x2D5120AE, 0x67D03F9C,
+0xAE661169, 0x82EF3E4C, 0x77C6ADD0, 0x9E853799, 0x685E093F, 0x26D5C079, 0x5B970F25, 0x6EEBBDEF,
+0x10E23897, 0xF772608E, 0x187C56C8, 0x725C9FC0, 0x8BAAB04B, 0x39D75274, 0x209DA4E8, 0x58DEFFEB,
+0x260E6BC2, 0xF8B4ACFA, 0x0859D4C4, 0xF0BB3951, 0xB6216EBF, 0x8B49BA8F, 0x20C78E64, 0x2C4D11A2,
+0x74872CB5, 0xBA721771, 0x3654F691, 0x0F1A1C59, 0x339DE1E6, 0x9A750F5F, 0xF79E641E, 0x25B9E272,
+0x56E8C85B, 0xFB286B54, 0xC439D998, 0x27DCA6EA, 0x503F1E4F, 0x3D79AE7D, 0x3C2AAC5B, 0x2F08257F,
+0xFB0FF30D, 0x345490E8, 0xBF306331, 0xBD5E7B1A, 0xFF0DD17D, 0x8EC7BABB, 0x86B8DB0B, 0xCB89FFA9,
+0x141A5D4C, 0xEDD76826, 0x5123A7AD, 0xF4250FE0, 0xDF6D578A, 0xCC0AEBB6, 0x46C140EF, 0xA063E62F,
+0xBDC49DE4, 0xEDBE0D6C, 0x42149BFA, 0xE78506B0, 0x8DDC13C1, 0x790D21DB, 0xBCBC8D47, 0x4034D5CD,
+0x5428AB37, 0x34DEAB15, 0xBBBC9C19, 0xF2A9989C, 0xA23198D2, 0x60DBCAAE, 0xBF01F9EF, 0x7D509E5D,
+0x058CAE38, 0x1D3C161D, 0xB2CF3132, 0xA88FB40F, 0x8AFCD8DD, 0x6DF071E1, 0xD828BF5B, 0xDAC0D8C5,
+0xEA4CB220, 0xB9F43B6E, 0x84461ECA, 0x2C2190B6, 0x5FBF1D33, 0xCD069EA7, 0x45170D53, 0xD1B61EA2,
+0xCD27CE1A, 0xD6534322, 0xA6D2C05A, 0xB585B947, 0x11F35A03, 0x0E94CBA9, 0x3D835B1F, 0x24A17D3D,
+0xF03ECB39, 0xD9626CB7, 0x424949DE, 0x73AE8BC0, 0x1C6998AB, 0xE8D2C43B, 0x49D2A42D, 0x6FB3EE72,
+0x2B6F479C, 0x757C619F, 0xCE7D8F2B, 0x7EE3C5C7, 0x4DE3A4F2, 0x1FB059D6, 0x0F0B0891, 0xED6F4839,
+0xD162F52D, 0x4D40300A, 0xA75BF51D, 0xF83CC252, 0x22E7038F, 0x2E2FB863, 0x590C4322, 0xD9292A36,
+0x17DADF81, 0x50BE6850, 0x3212B8CE, 0x93DB7138, 0x4012133D, 0xD198BD1D, 0x7D6D0E71, 0x91DEDA18,
+0xDE75942E, 0x28D93AA3, 0x4BEA1E33, 0xCE86982F, 0x77FAC8F5, 0x429FEE23, 0xE1A88B24, 0xDA217329,
+0x089F229E, 0x0449C0A6, 0x6C2409F5, 0xA6B2AE5E, 0xAAF5B10C, 0x5D463650, 0x096FB2EF, 0x85B4E29B,
+0xC8115561, 0x3D285597, 0x963A6746, 0xAC277F6C, 0xF94B7E24, 0x6EEE4BE2, 0x76C4139E, 0x5692759D,
+0xCA1B5DEF, 0xA1FA869E, 0xF5128BCE, 0x8A12B748, 0x80B2BEB6, 0xA070420B, 0x6D2DD493, 0x3F0D9D10,
+0x8FF5DF97, 0x4A9C44D0, 0x3538B78D, 0xD1604C16, 0xAB779025, 0x44D32259, 0x21F23474, 0x91770A4E,
+0xBE1CD0C4, 0x01F992BD, 0xDD6FE58A, 0xA5A519DA, 0x51FF14F4, 0x11ACD764, 0xBF927913, 0x080B33E4,
+0xB1309DAE, 0xD5F55631, 0x2D12ADF3, 0x9E923543, 0xC2D06BEC, 0x159B249A, 0x96BE825B, 0x2054282D,
+0x7FE936F9, 0x741B77D3, 0xCE6FA780, 0xAF41958A, 0xF2C26129, 0x2710124B, 0xE8DE7B0E, 0x5A1F2AB7,
+0x0D726A31, 0x6EFE2006, 0xABE0BFB0, 0x8E2E8297, 0x7669D5CA, 0x12ADFEAD, 0xEFE7A442, 0xD6021475,
+0x3C8587A8, 0xDC8AE49B, 0xBDA2E0FD, 0x18E7A35E, 0x83C1FBEE, 0xC62DE1A2, 0xFE29C4D0, 0x1663C36D,
+0x680C184F, 0x6FBB3871, 0x4A8D3705, 0x10843CAD, 0x1178CCDE, 0x464820D3, 0xF958E1A0, 0xF8342457,
+0x4B432CED, 0x766F658E, 0x13291DC9, 0xE96C4693, 0x2A7785F4, 0x01A44E91, 0x76243F2A, 0x9E53ADC2,
+0x4D966301, 0x70BAAF1B, 0x8E51DEF1, 0x5A9CA3A4, 0x5DBD8F70, 0x82B988E2, 0x3669B63F, 0x8D920EE8,
+0x87963C9E, 0x56EE57E8, 0xF3BB59AE, 0x216B0A02, 0x74CD08FE, 0xBC8C0E36, 0x8EC9A8D9, 0x8ADBB5D6,
+0xE72ACB10, 0x6BF00F28, 0x132B633D, 0xD8827AE8, 0x1C8AA595, 0xBE679F28, 0x69C8872B, 0x3AD9FF05,
+0x10936EDB, 0x3E274683, 0xBE70B2F8, 0xA4D70986, 0x422A5280, 0x06C25B81, 0x0C7857F5, 0x65C59AF4,
+0x32AEBBFC, 0xFCAD53EC, 0x6B3850E2, 0x6EC416D7, 0x45F09DCF, 0x51FE0BF9, 0x4598E511, 0x0DB71B7D,
+0x5F6C15F7, 0xECA98874, 0x1A26A684, 0x89E6C2D3, 0x482D7993, 0xF9471D59, 0xF8B2BC94, 0x81439E95,
+0x5C83101A, 0x232D6723, 0x838B4FA4, 0xC40B6E0F, 0xD1A1887F, 0xAE13B7F4, 0x122488E4, 0xD3B4E148,
+0x7F7784FD, 0x40E23C49, 0xB8F3BE8A, 0x46EEC5FD, 0xB60DCAE9, 0x5A28C23C, 0x34FACEC0, 0x5E241177,
+0x63767155, 0x4FBDCFEA, 0xB1DC5646, 0x3BB91444, 0x4604B164, 0x215987F6, 0x2DAA983B, 0x4EF98652,
+0xCBF42099, 0x8CA1E9E6, 0x0003F4F7, 0xCDB0A441, 0xBA87828C, 0x5AEE1191, 0x96FCD183, 0x665D8641,
+0x02AFA6DF, 0xEEC323F0, 0x96714E18, 0xC2B601DA, 0x36226D30, 0x64B035B3, 0x474E5029, 0xC7389DC2,
+0x17DF7839, 0x2239C62E, 0x42AA0DF8, 0x63721BBE, 0xD1F7B976, 0x7C32C9E2, 0x0134ACF7, 0x4EB4662E,
+0xED39D2B4, 0x28969D40, 0x8ABDF232, 0xD3BC65E5, 0xE5B57986, 0xC2B598F5, 0x46C6EC93, 0xB5787060,
+0xB434DFC2, 0x1EA116C0, 0x71F9CF09, 0x4E0ED8D7, 0x48C55F43, 0x9AA021B8, 0x4B14B21D, 0xC216DD67,
+0x4F7FEB07, 0x4DBEA47B, 0x53BF0898, 0xE90DE844, 0x0760CFE8, 0xA8BEA38A, 0x17507656, 0x3F20E9D0,
+0x2581C414, 0x6CD9126A, 0x77428985, 0x7AF2EA25, 0xB1514B3C, 0xA8BAC06B, 0x7E179D0A, 0x6BF5E40F,
+0xB1539735, 0x79445E6F, 0x43BB0DB9, 0x8FCF7038, 0x8AC7851A, 0x33BDFBF4, 0xD30D0A75, 0x00B26D0F,
+0x8C6335D7, 0x2C5E87E2, 0x02E6A1FE, 0x4AF82D6D, 0x66960061, 0xE057EB37, 0x3F1FADF5, 0x941B3AD7,
+0x692B988A, 0x4A3716C6, 0x7C113D62, 0x15E77000, 0xD9CFE561, 0x86843D40, 0x8AE2BD1E, 0x657D87C3,
+0xF0F08AB0, 0xD8E2146E, 0x0CC4EF58, 0x923D8A86, 0x47449B2D, 0x3AD9891A, 0x519E4E05, 0xDFD40F98,
+0xEBEFD2AD, 0x210E2C99, 0x46BA28D1, 0x70DEDD19, 0x44888D41, 0xFF0051E1, 0x9FB8E418, 0x000BE6C9,
+0xE99483FB, 0x54D71798, 0x3AAB15DB, 0x34DC9C86, 0xD7D2DB58, 0x9CE50CB0, 0x475D7431, 0x94B04AC2,
+0x31A7AC8B, 0xBD00DA4F, 0x757CFD0B, 0x9A93F1EB, 0xA38D8E7A, 0xF85C768B, 0x98DD6CEA, 0x30B1B71B,
+0x4F46A1F0, 0x517C4514, 0x4FBD06A4, 0xBC74F806, 0xE67AE385, 0xF2C37CD4, 0xCB6B8BE3, 0x47EF9814,
+0xE75ADD75, 0x295DB6A6, 0xF8066E28, 0x1809BB65, 0x3A12A0CC, 0x5B0288E5, 0x2A449538, 0x1437CAE7,
+0x366C0F52, 0xFFF86BEF, 0xFA2DC710, 0x40CF9B6D, 0x141D2F66, 0xB497AA68, 0x0EF3B019, 0x567F5965,
+0x36741122, 0x8016CB0B, 0x049080CC, 0xAFEA82B6, 0xBF235473, 0x8F03F7EA, 0x39E93DE1, 0x2AA453C7,
+0xD3137DA5, 0xADE044BF, 0x61698591, 0xCE0F4109, 0xE729BE59, 0x343D23E3, 0x8620E571, 0xBE1825FC,
+0x0D453E2D, 0xFA318B64, 0x5DA15292, 0xA3DF6C63, 0x34CCFF9A, 0x08D1B23C, 0x8C4E0727, 0xD6BFE454,
+0x80FBF070, 0x6BD419B6, 0x11374BF3, 0x1CBA4922, 0x936D408D, 0xC63D53FA, 0xBA3463A4, 0x288DB8A6,
+0x2BFF2180, 0xAC43079F, 0x7748FDD8, 0xFDCB2A1E, 0x84475A33, 0x864B3535, 0xB1A25211, 0x6CDB9FA8,
+0x183152F4, 0xEE5CD2FB, 0xBC1BE840, 0xF84E0D5E, 0x343DA7B1, 0x034C9FC4, 0xC62EA093, 0x168CFDD6,
+0x9E78EF88, 0x7DEB8E05, 0x9A3C6005, 0x4144D6FF, 0x0B07DE33, 0x7C5A62B1, 0xC8BC4FD2, 0xA7D268E4,
+0x7B52189C, 0x1AD41908, 0x2D8FD608, 0x1F5C9F15, 0xFC1D47CD, 0xE75234A9, 0xD4339E3A, 0x3F255973,
+0xA802693E, 0xF70A0152, 0xC6FE715F, 0x360957C7, 0xBE415F93, 0xF9717F33, 0x6A827FF7, 0x08F3EC1C,
+0xE03C2416, 0xC8F444F6, 0x2D26732A, 0xF3D3B918, 0xBB85B49E, 0x6DF692D3, 0x3ABC4F2A, 0xCC2B8E11,
+0x49F58E12, 0x71B5FB13, 0x5F77FD04, 0x0F4E03B8, 0xF1C88456, 0x479F07D9, 0xA9457800, 0x88B50C48,
+0x2DBF8CB7, 0xE9772400, 0x4C9C5166, 0xE62C3512, 0x81B8335D, 0xBDD07053, 0x4966D618, 0x1CEEAF92,
+0x43BC89DE, 0x80B542BC, 0xF9710CDF, 0xE8B0005E, 0xFA8E60F7, 0xE1BBD82C, 0xB84F7B4E, 0x5F632D32,
+0xE2060FF5, 0x99CC0ADA, 0x2A74ACB6, 0xF3A0EBC2, 0x40F03962, 0xCA48671C, 0xE266C06C, 0x1F7FF443,
+0xAF1C1498, 0xCDC78F8C, 0x68757BC1, 0xE3E0DA20, 0x32BA7BDE, 0xEADB5757, 0xC22BEA1E, 0x7F11F6FD,
+0xE7391930, 0x0CC9EF59, 0xB3F12370, 0x373F2EA8, 0x794FC5E5, 0xF6709E03, 0x61C3DF70, 0x1C67C4A7,
+0x20A5524C, 0x046BD018, 0x3F5AEF27, 0xE6DCBC7B, 0x29809D43, 0x7389A2C0, 0x1CF0C14F, 0x9BD97AF7,
+0xE6B1D13E, 0xBD77BE0D, 0xBA26AAE3, 0x1271D9D6, 0xD0552698, 0x6994B051, 0x8375FC05, 0xF8C896E8,
+0x2C105258, 0x88A99529, 0x8B2A3DF3, 0x2992504B, 0xC4ED0E47, 0xFE0207B4, 0xCFDCE510, 0xD6D4AD94,
+0x92BED5BC, 0xDBEA8875, 0x84CD0E13, 0xA0E4875D, 0xB4FD3C0A, 0x32F9470B, 0x3CD8503B, 0xE4ABFDEF,
+0x8566E5E5, 0x4E1C5F07, 0x4477CF77, 0xFF0B450B, 0x7AB7F0D8, 0x133F6779, 0x3460F418, 0x40B94722,
+0x11F075E7, 0x9ACE36C8, 0x041E108A, 0xC5896937, 0x237012FC, 0x0E275786, 0x8084C0EB, 0xE07E7A6F,
+0xAA1AE5A8, 0x10155796, 0x2C430D59, 0xC8495A79, 0x688C1385, 0x528716DA, 0x7A09A3FA, 0x3B16F67B,
+0xFE95A615, 0x34387216, 0xCDADF93E, 0xE3FCFCC5, 0x162024D9, 0x53FFFF71, 0xD519FE0E, 0x39AD1D0C,
+0x69EA8488, 0xEA961652, 0xC3D2143B, 0xC2EC282C, 0x0D3FE020, 0x52740BD4, 0x50AFC5B7, 0x923DAF48,
+0x7D17C88F, 0x9950C799, 0x028D8B14, 0x869DA436, 0xA46886E5, 0x80AB5FD0, 0x67DBC34A, 0xC8119B5D,
+0xABBB4B27, 0x0AF5CA10, 0xFB543F78, 0xA36E6178, 0xA4E4884C, 0x95D933E0, 0x9ABEEA93, 0xDD1A94C3,
+0xF941FBB7, 0x4B682FDA, 0x7B487E7C, 0xDE98091E, 0xABE244C3, 0xD5450193, 0xE685B6BF, 0x7A51EB4A,
+0x013F08CF, 0xCC4EB6A1, 0x0D854F5F, 0xDD6DE019, 0x77CE753D, 0x64474177, 0x745AAA4F, 0xE6E983C6,
+0x004853E1, 0xC0DFF722, 0x73DB8BA5, 0xBCBF9698, 0x3E5FA793, 0xA5543D0F, 0x42D86F8E, 0xA180FA19,
+0x6036C90D, 0x5682C626, 0x963EB303, 0x1ADEC236, 0x401D54E7, 0xF028FE6A, 0xB44F808A, 0x96C92E39,
+0x4D167D1E, 0xBEE20644, 0x345C0061, 0xD411B4D2, 0xDFDBC9CE, 0x11B8940A, 0x09691478, 0x45C350CC,
+0xDAEB8F81, 0x1E50A348, 0x2D4C0977, 0xB8880EDE, 0xFB7EB8C3, 0x2F496D76, 0xE9BB1C5E, 0x400CA95D,
+0xF74ED820, 0x3B45F850, 0xE6E35B0E, 0x72B36ED6, 0x85987466, 0x8B13E2AB, 0xBAF1DBD3, 0x9ECEA01A,
+0x78411F79, 0xC6C13D20, 0xB54FD5BC, 0xE634BABC, 0x2135EB70, 0x3B0477F4, 0xDE803AD2, 0x3468DD90,
+0xCC46241D, 0x2EF6E708, 0x1289A6D1, 0x2A266044, 0x2ECEB929, 0x72EB258B, 0xDE1B45C3, 0x7E56CDFF,
+0xE38B6F96, 0x4CFE3AF3, 0x73F2B6BD, 0x0D3F63EC, 0x0D3097DD, 0x6B06C821, 0x86F88B7E, 0x50049E07,
+0xFC6A28DB, 0x4E24234E, 0xDBF2F8C0, 0xB2DAB42E, 0xAF854005, 0x9B3084DC, 0x0541F617, 0x628D5891,
+0x0FD0E96F, 0xA3A8AB6F, 0xCA0B27E2, 0x40F9151E, 0x7140A146, 0x7A0AEDFC, 0xF6397BDA, 0x060ECEBA,
+0x6DCA2568, 0x132B2DE7, 0x5F72D0E0, 0x3CFC6BD2, 0x64C79C6B, 0x74BE7784, 0x28D324A5, 0xEDBF7026,
+0x1120BE4D, 0x5D7B8694, 0x9EDE4745, 0xE9EDB711, 0x6DEE49DA, 0xFE17EF7C, 0xE194E550, 0x85782ADD,
+0xBFB45D39, 0xEA1F2B41, 0x33E90542, 0x44800689, 0x2CA733B1, 0x3B765410, 0x42522796, 0xE062E244,
+0x79BC3D76, 0x066F0449, 0xBDADE090, 0xB28C1278, 0x224CE538, 0xEC9A7259, 0xCFE1BCCD, 0x6833B640,
+0x9BED7C68, 0xB4B7FF94, 0x278A2257, 0xB34B843C, 0x8A1A3E00, 0x5A1AF597, 0xB89A2820, 0xD5129560,
+0xBDE8D68E, 0x7E01C7F9, 0x0D0F7BAF, 0xA2B13FA7, 0x5C714296, 0x0C5DA709, 0x3ADCF315, 0x9BD7DF1D,
+0xD27A229E, 0x8227449F, 0xBD34830C, 0x0D1986CD, 0xD74B84FE, 0x77C51793, 0x5E8872E8, 0xC51767C0,
+0x655481DD, 0x2DA5418C, 0x1FB0F298, 0xB008C480, 0x1CC176A9, 0x53908531, 0xE5A8B8D3, 0x176B1DCB,
+0xC326EE6D, 0x5C178705, 0xF298514A, 0x22B66E67, 0x85170DBE, 0x94882D58, 0x70965521, 0x49289EC6,
+0xE300D5D5, 0x79A2817C, 0x2ECAE6B2, 0x8BDAAD9E, 0x7E4F6A42, 0x50D2F08C, 0x0C5D81B2, 0xF1BDC968,
+0x9F23A866, 0x482738C9, 0x456A985D, 0x963ADFC2, 0x31F520DF, 0xA226B8AF, 0x3D2A72F2, 0x401C33D4,
+0x88C4D1C8, 0x9B697776, 0x1F895CA0, 0x71FD1945, 0x0583D582, 0x3E9FE6E7, 0xF40FEB6D, 0x6BFF615E,
+0xD0868A7F, 0x8E9EB84E, 0x205E182B, 0xEBC981E5, 0xD19F6C6F, 0x75F0454C, 0x52B88744, 0x52CCCCC5,
+0x398933E3, 0x22490DDF, 0xFA3EE9C6, 0x14B59263, 0x00D41CC6, 0xEF57E76B, 0x2098193F, 0xADE164C4,
+0xFB56C554, 0xA80607FD, 0x8E1ABCE0, 0x05725789, 0x9673B1C6, 0xBB267634, 0xA3DBC27A, 0x30D12A2E,
+0x0EADEE90, 0xD1AA581B, 0x28CA41BE, 0xA18443A0, 0x7125825D, 0x0F58704E, 0xC2563514, 0xA4CF91DF,
+0xD0868978, 0x9B208E60, 0x8EE34390, 0x7AE3786F, 0xAC35B088, 0x70651D71, 0x03D3D45C, 0x6E5D6A8D,
+0x7B8B71B2, 0xAA715C3C, 0xE8A39355, 0x1601B08E, 0xC8CA2F2C, 0x2C8F4616, 0x29E0A4BC, 0x2444641C,
+0xCE29FC12, 0x5C243236, 0xD8322C36, 0x56024EDF, 0x99EE388E, 0x1E54C35D, 0xE2A1768D, 0x737DBB87,
+0xA356DD32, 0x6513EDA7, 0xBD51B27C, 0x5334F98C, 0xED41CD65, 0xF7EF10BA, 0x1CAB2E84, 0x234B9B49,
+0x12173325, 0xDF50720A, 0x3C7CFA65, 0x29737AF6, 0x3AC48B10, 0xE37293BF, 0xF340C6D4, 0x752ED16A,
+0x8DCD2E3C, 0xE12E57B4, 0xA260DFCF, 0x647DC052, 0xB41D13CF, 0x72E38336, 0x5C478386, 0xA72D8862,
+0x095F69E3, 0x82A811F6, 0x9BC30BB3, 0x60F7A344, 0x61C846BC, 0x8A0ECEE1, 0x6CAB274A, 0xBBE47BE3,
+0xC4E3AAC9, 0x79667BDD, 0xC572F756, 0x028DD628, 0x2B4FF40F, 0x930F8360, 0x0A364020, 0xB84C795E,
+0x1EFAF3EE, 0x439611FC, 0xF63B8CFA, 0x67787326, 0x4B99B5D5, 0x2A222929, 0x9832C82B, 0x37F87E68,
+0x9E30B570, 0x315E3CE2, 0x463D4FE3, 0x7C09246B, 0xBE9134FE, 0x3055CF78, 0xAF142159, 0xD70CA14F,
+0x94A81FF4, 0xC712D53F, 0x7B31B2E8, 0xA2D3C77D, 0xA14ECDA7, 0xB2780E95, 0xC46D042C, 0x21E96713,
+0x876E2FCB, 0x5909AAAE, 0xE60C9F97, 0xA4D8CE34, 0x7515D555, 0x5D30DD56, 0xBF15F237, 0xBDC07828,
+0x07D427DE, 0x610FEDC2, 0x5676B27C, 0x69E21CD2, 0x0484521A, 0x67122242, 0x5A191F85, 0xD9EBD02C,
+0xBB54930D, 0x37FAE90C, 0x4BBDAC0A, 0xD7CB6225, 0x1D2196D4, 0x7B84EFD8, 0x002B8751, 0x9523ED79,
+0x5B8E6858, 0x2C7C05B0, 0xA99AA3CD, 0x2DC86D2B, 0x2AFC36B8, 0xC32B7601, 0x570D0A2C, 0xAD5A6D27,
+0x767D224D, 0x063C22E5, 0xB7DCC2FA, 0x422FFA4C, 0x3DB7E1AC, 0xDC49CA1F, 0x34C63A39, 0x2A7B8DE0,
+0xEC08C39E, 0x3F4328FB, 0xB4E7BF5F, 0x8BB5F8A6, 0xCAF0D723, 0x107F185D, 0xA592C042, 0x192F3FC1,
+0xE6BCD131, 0x5B0ECE12, 0x15ED9B65, 0xE01644C3, 0x75C912A6, 0x9EEDF6B2, 0xEAC22A4E, 0x3FCB9C1E,
+0xCC21BF36, 0x605C13A6, 0xEBF2B736, 0xBE67CD08, 0x4DC27B01, 0x9432DDB9, 0xF8DB75F4, 0x1ABB85F8,
+0x021673FB, 0x1400EC5A, 0xA9E79A09, 0xDD512D36, 0x838D2B9B, 0x1AA16517, 0x73AA0046, 0x7A4BAC6F,
+0x731AE4BF, 0x529EA682, 0x9A913569, 0x6C3D9DB4, 0xD005EE4E, 0x6AA0BE82, 0x611DD079, 0x1E887120,
+0x2C6DCF70, 0x13D486E6, 0x6C2A3201, 0xD4A8CB51, 0x3495C94A, 0x66B28A7E, 0x5D00F8C1, 0x99633D84,
+0x0D085857, 0x71778951, 0x34962BEA, 0x7ACF555C, 0x74E7BA7F, 0x081311F7, 0x0437BC95, 0x35E871B2,
+0xCC1AFA03, 0x1BAFCBCC, 0xB1DF7476, 0x43F4634E, 0x18E814A7, 0x5E8E6D91, 0x9AD25BF6, 0xA7AC884A,
+0x3A135F98, 0x852FB276, 0x6B66B785, 0x244F76FA, 0x7FF48E09, 0xFB137E74, 0x0AF5F4E5, 0x8CA15748,
+0x8163223E, 0x2DD07A99, 0xBA7B0A8E, 0x31966985, 0xEC9E810C, 0x933B6C1E, 0x724CA905, 0x5131B1A4,
+0x0691D0D3, 0x200AFC47, 0x15F4D0B5, 0x471F29AC, 0x176AF7B5, 0x515F72E9, 0x32CF250C, 0x4FE0552D,
+0x1B1F2E41, 0xFB2C9D11, 0x8E91D7D3, 0x1FE4B07C, 0x7B7F860A, 0x091A00F0, 0xC8A84CD1, 0xEAF15AC3,
+0xE639AF58, 0x97CA172C, 0x93DA6B32, 0x08FDDD7E, 0xC83D20AF, 0xB9B8F855, 0xC95C5BF3, 0x2221DD52,
+0xF0436CE1, 0xC4D4E3EB, 0x3A61426D, 0x2CB66A31, 0x556D2BE8, 0x5526F4BA, 0xF531998A, 0xC7898343,
+0x184068E3, 0x7E882EFD, 0xBEAB2254, 0x8D64C525, 0x15961EA7, 0x5D9941A2, 0xE9763D08, 0x9C3F62DE,
+0xF4B50E6C, 0x4A87F5CC, 0x7993AD33, 0xB96CCB7D, 0x85635CAD, 0x2B3E0337, 0x1ADCE09B, 0x461DD7E4,
+0x8FC87741, 0x182FC60E, 0x377D4725, 0x1A3FC65F, 0xDF59BC73, 0x3E583E5E, 0x4EE0B55A, 0x0595B24C,
+0x31AFC135, 0x216AA554, 0x11F2E15E, 0x3C7C5574, 0xDCB60F9A, 0xC8916484, 0xF00A610C, 0xF9FC4B6A,
+0x9DFD6860, 0xC03A0FEB, 0x273A5E04, 0x7CF55153, 0xAFA511A8, 0x22756FE5, 0x079147E3, 0x31471FB2,
+0xACCA1BEE, 0x65ADE059, 0x89220E05, 0x20BEC86A, 0x4FCDDC3E, 0xAE2CE61C, 0xCA8E21C2, 0x51BFE0F1,
+0xB742148A, 0x32247574, 0xBD2EA3F1, 0x15146F4D, 0x3031920E, 0xAD883AED, 0x5C8E3161, 0x2872994B,
+0xED60F088, 0xC075D1E5, 0x37E34730, 0x5493E87D, 0xDE0A500A, 0x3CE39350, 0x7ADE65B4, 0x82F16757,
+0x8474011A, 0x00F12128, 0xE7285382, 0x65B64172, 0x5B054116, 0xD418945E, 0xDE022F20, 0x3E897887,
+0xBC6C2776, 0x7CE0B079, 0xA4A9A6F7, 0x615B3E95, 0x4512B52A, 0x7FE9D5F4, 0xE151F317, 0x347FA0E1,
+0x5EC5CDA0, 0x0DDB22CA, 0x4EC7035B, 0xDDE57E76, 0x5229EA91, 0x6FE30834, 0x2FFD0728, 0xFB5E8AE6,
+0x4B6F301A, 0x607CA18E, 0x7FF08914, 0xC3564DC6, 0xB00A802E, 0x3560CFF1, 0xC162D542, 0xCFA1DD5F,
+0x38D67652, 0xE696D55A, 0xB2E8B688, 0x01946F0E, 0x554ACC9A, 0xF01B9724, 0xB1E88F50, 0x25CD613C,
+0x9034C162, 0x3925C87E, 0xC0713271, 0xB94F6E48, 0x42924FDC, 0x8333696F, 0x52F326C2, 0xEBB99A87,
+0x52493B6F, 0x2CF72E98, 0x2F50F709, 0x69370B7C, 0xCB2F531E, 0xABD07192, 0x446D0176, 0x18391EE9,
+0x261BF7C5, 0xE8F1F283, 0x9F397685, 0x7B5F5944, 0x40B3DD36, 0xCB71F496, 0x7DD24E1C, 0x4FCF4A66,
+0xED1EFA83, 0x91BC3756, 0x61C4BD3A, 0xD21200DE, 0xDDFD830B, 0x61074472, 0xE9F1715D, 0xCCF50098,
+0xC3F2DF0E, 0xE611FDF9, 0x6F66B09E, 0xB50BFDC0, 0xDA80A0C7, 0x19EE5E4C, 0x662FB3CC, 0x7C64453B,
+0x4F1BA73F, 0x5A77840A, 0xDDFE53A4, 0x791B97A1, 0x47C0CE9A, 0x012AE8A8, 0x822598B6, 0xA06A505B,
+0x48A1E715, 0x67056672, 0xD8103BB2, 0x9469193F, 0x4996F026, 0x24C0E302, 0x1CA1BEB8, 0x154BBB72,
+0x792FE696, 0xF84868C2, 0xACCFF1CE, 0x30260DB1, 0x23FB48B0, 0xEDDFD9CE, 0x38B9BDA4, 0x5BCDD427,
+0x06E93C6E, 0x563F72DE, 0xEEB663B0, 0xBE33D646, 0x5817C079, 0xD106479B, 0x56CC41EC, 0x89C7C92C,
+0xCC051B78, 0xEE8B694F, 0x913F76AD, 0x9EC8A72C, 0xD41B5D18, 0x02EB6E18, 0x22E1D610, 0x18E6630C,
+0xA9EE3DD6, 0x71662DC5, 0xAFA04188, 0x212444E0, 0x6E1B7177, 0x4640F5B5, 0x8A150FA1, 0x95E87A7E,
+0x72966EB4, 0xF777D85B, 0x6AD4FFF6, 0xA538BD85, 0x63D746C0, 0xF5B106A9, 0x4296528D, 0x1E1398E8,
+0x87C1240C, 0xA5BB6760, 0x27970653, 0x607549B2, 0xA759CFE1, 0xF7661793, 0x96D3F7AB, 0x632DF3A3,
+0x84E5EAA2, 0x0C33769D, 0x441395B6, 0xD16B9785, 0x2793B553, 0xF2F5B5A6, 0x1D2D54F4, 0x78472E8A,
+0x8A95C1D9, 0x3D3FEC01, 0xE08DC443, 0xA37B7760, 0xB15DFB2F, 0x0FFEF5DE, 0xE1FAE4AA, 0xD3A842B7,
+0x0EB73490, 0x6DD8F987, 0xFAC78BE3, 0x056D6435, 0xC45FB37E, 0x211B5BA3, 0x7564E60F, 0x05B0604F,
+0x4D76B62D, 0xA007C5C9, 0xABDF3515, 0x051494B3, 0x6C476D88, 0xAD4DFD40, 0x4B861DB3, 0xCC7AD0CD,
+0xD563E004, 0x7AF4E0E4, 0x0F3BE4B0, 0x7ACA39DA, 0x1C7FB0BF, 0xCAB3D993, 0xA2782472, 0x535FA506,
+0x52D0FD47, 0xFCD878F1, 0x42F554E0, 0xF12B3883, 0x02197770, 0xE9862A39, 0x2448E69F, 0xC0D4F6B7,
+0xB01B2597, 0xE4392D07, 0x4FFD3B36, 0xBBD1D538, 0x9F113131, 0x72F2DD7F, 0xA4D25B8F, 0x7B472BB6,
+0xB99E1BAF, 0x3212422B, 0x31CA7F87, 0x7B8B1483, 0x51A37CE9, 0xC877A3B6, 0xF87E675D, 0x95B767B8,
+0x94739ECF, 0x8F10BC9F, 0x66BF9486, 0x9DD2D502, 0xCB125598, 0x4E473BC4, 0xCCBD8742, 0x9ABAF3D9,
+0x8323B764, 0xA4DA6832, 0xCA49F3AD, 0x3EDECE50, 0x0A133FF7, 0xAED1F1AE, 0x7E377CC7, 0x16FF83EB,
+0xB932BFC6, 0x72C9A96D, 0x42E2697E, 0xF167B529, 0x53D12C1F, 0x9FEAB717, 0xCB6E40CC, 0x988CEF0B,
+0x9427621E, 0xF846C205, 0x7D53BFBA, 0x8533B802, 0xF1A9A03C, 0xD5C2CDE4, 0xC1E8D5DC, 0x11E233CF,
+0xDF8FCD78, 0x2B0CFF3A, 0x36C0D216, 0x951FB24E, 0x2E1C917F, 0x6DD532CA, 0x681E34A9, 0x73EE1874,
+0x3E9A7A28, 0xE0A89BFC, 0xF25949F7, 0x7FCDA693, 0x260EE842, 0x8FC5064A, 0xACCDD5BA, 0xA18D23B1,
+0x42C8A9BE, 0xE544E727, 0x55CE36C4, 0xA98AE180, 0x1B39FC3E, 0x6A9EC314, 0x917FBBF2, 0xE3A911BF,
+0x1BADCA6F, 0xE9CAAC05, 0xDF5BA9AB, 0x086281E7, 0x4258C96B, 0x7767C965, 0xB5B64790, 0x1A6CD944,
+0xF381CD4A, 0xF0F2CDF7, 0x6E265259, 0x467CFED8, 0xBD557A42, 0x63FA6F24, 0x65BA8A40, 0x57ABF700,
+0x0C0B0386, 0xDD1363A5, 0xF85FFB7A, 0x95E4718C, 0x8223AD65, 0xE26F39A4, 0x6AC71446, 0xA78C70B6,
+0xDF892513, 0xD452624E, 0x2324BBB5, 0x217590E8, 0x5AE3534E, 0xA02795E1, 0x1112F173, 0xDA71C532,
+0x1F6A97DC, 0xF23F658E, 0xD2FFF81C, 0x3ADD6F0B, 0x668A77FE, 0x8527EAC3, 0x11FD08EB, 0x09C2B61E,
+0x341BCB5F, 0xB6A16FC1, 0x7472C8C6, 0xAA0F3DC1, 0x5C84807A, 0xFBD929C3, 0x0749FF45, 0x07F67377,
+0xF27BB7A0, 0x9CB862C3, 0x4510CDF3, 0xB75C6698, 0x91FBD199, 0x65EAFA50, 0xE0CEC389, 0xCEF5C82C,
+0x000916D7, 0x64D03B19, 0x9DA4E91B, 0xD8558996, 0x334ABE33, 0xA75C0428, 0xA7B39089, 0xCF04D468,
+0xE95FC375, 0xEB9C2C1E, 0x53F1C86F, 0xE85AB32C, 0xE3845EA7, 0xB19A49B2, 0x6EA04453, 0x784119A7,
+0xBB60261F, 0x9382C629, 0xF3220F81, 0x89795D11, 0x1E009DD6, 0x79713D6F, 0xA4AA4866, 0x7DEF3677,
+0x8E5A9A92, 0x31C33565, 0x97749904, 0x64A3D55D, 0xAD760DEC, 0x594441A9, 0xFBD0B8DD, 0x020FDA3D,
+0xF8486FB2, 0x6D0D5EFD, 0xD0D82993, 0x420F5611, 0xED942967, 0x112FDCD6, 0x2AC4F5D5, 0x6C841575,
+0x53A9F409, 0x7E24DEF4, 0xB85D2F7E, 0xE0DF8406, 0x5B1E7723, 0xDBC2B870, 0x8CBF59AF, 0x83DF52A2,
+0x35CBC868, 0x6A54E05F, 0x63753B7F, 0xF4DEBEBE, 0x3A1029B5, 0xD42CF91E, 0xB51455EC, 0x9D4B7E8C,
+0xE4961DCC, 0x844E8158, 0xD0CCB269, 0x9C1C5F89, 0xCCB1F2CE, 0xB06E8C48, 0xF16CE625, 0xE38E5FE3,
+0xE27D57A7, 0x1AFFD03E, 0x3D30DE91, 0xD9BD4BD0, 0xDC3E5672, 0x927E7C39, 0x561BC151, 0x87663957,
+0xD904679A, 0x94E1A101, 0x52029C47, 0x286017ED, 0xCB8770B4, 0xDED221D9, 0x5E080A5A, 0x86653823,
+0x0CED39D2, 0xA6EE1650, 0x7DE558AC, 0xDFE774D0, 0x0E71B180, 0x82D383F0, 0x6CEBE831, 0x3C148AD4,
+0x7B65469D, 0x77E42273, 0x0F9C3AAB, 0x27FD6A96, 0xAAFDD0E1, 0x5BFF07BA, 0x44766DEA, 0xAAF19DAC,
+0x4B1384F7, 0x7CCA8C01, 0x2E9CFD70, 0xBC6A377D, 0xF3D908C3, 0xC1C3A0C6, 0xA0C2D65E, 0x0EA9C732,
+0x81C789E9, 0x36F541AB, 0x5DA078A9, 0x53AE74B2, 0x8E336B4A, 0xFDFC3584, 0xB7EDBDE7, 0xF74B18C8,
+0x76751ADC, 0x53AE36D2, 0x6BF56608, 0xC5417A42, 0x3ABF387E, 0xD0B19FB4, 0xDF4EC15F, 0xA55C0FF5,
+0xD92BC190, 0x1BF5B609, 0xED3D68CF, 0x62FB4B22, 0x75A54A90, 0x0C7F49CD, 0x998B616C, 0x4B113D6D,
+0xA1413C78, 0x49DEB3C9, 0xE813B35E, 0x4322EC86, 0x35F6E71F, 0x2CDF8662, 0xC9FC03F1, 0x30D96F8E,
+0x2E65DC20, 0x6A11F98F, 0x15432F5F, 0xBCD0A11E, 0x87BEED9D, 0x303A40F7, 0xC0149FC8, 0x73EEDA9F,
+0x781D6A5C, 0xEEFFF39C, 0x1BAC928B, 0x6741F472, 0xE567AA00, 0x1DDEF275, 0x6C8CF7D7, 0xE1E29485,
+0xF6ECCAB4, 0x9C471DA8, 0xD97DBBA5, 0x7554F015, 0x412AB94E, 0x7461743F, 0xD763D649, 0x69DE97AF,
+0x5083FEE3, 0x68A00F64, 0x1EDAB121, 0x61C6D1F9, 0x929CEBED, 0xA0EF54A1, 0x7365257D, 0xE99C2A39,
+0x9944C80F, 0x658A42BB, 0x4E79806B, 0xCF14EFB4, 0xE945E372, 0xDFCAF792, 0x3B7A1DB4, 0x86CC8177,
+0x914EF189, 0xA0264359, 0xDFCDEFF5, 0xFEB34806, 0x3BAB11E0, 0xDE76B5BE, 0xCEFFF11F, 0xCE128ABA,
+0x2A815CF8, 0x1ED82C44, 0xC4D72277, 0xFDCEBE45, 0x7E27F1F1, 0x3C2DBBAE, 0xC0976AB0, 0x33C06B4D,
+0xAB341D17, 0xD9583B49, 0x7F8A4123, 0x5437482E, 0xC63CE609, 0x549D51FE, 0xA5F1A905, 0xDC4879B9,
+0xC9F9C3C1, 0x15F15673, 0x5C9B8741, 0xA963FBEF, 0xC520A368, 0x6F08BCD2, 0x435D2494, 0x5CD67F1C,
+0xB3D43D0B, 0x03370069, 0xC213D680, 0xFDE4F0EB, 0xF76EA34F, 0x19314E14, 0x147C249D, 0xA68F39CB,
+0x98B7F090, 0x918718CA, 0xEB60D1D7, 0x266A1260, 0xE79C7F1C, 0xD81E0A7F, 0x22E72BFA, 0xF65E9C98,
+0xC9D5B928, 0x6630A63C, 0xBFD5D58E, 0x658254D4, 0x44DB5CD6, 0x365A1DC3, 0x352F691B, 0xCDA6EB17,
+0xA80A15BB, 0x9DD4EB18, 0x7B930F90, 0xDB6FF0E4, 0x9810B16F, 0x51CEECAD, 0x1DC9923F, 0xC20DA890,
+0x6C2F6512, 0x990E366A, 0x9184F936, 0x573CC0ED, 0x9687BE6C, 0x7529228D, 0x08C509CA, 0x0DB28A2A,
+0xD7E9273A, 0x5FBB88D1, 0x51D45946, 0x7DEFF919, 0x8FDA6EC4, 0x5672A04A, 0xF186B79B, 0xE18EF751,
+0xAE545F4D, 0xB121988E, 0x4262A69F, 0xB0959667, 0x343DE89A, 0x42E581A4, 0x81D1E4B3, 0x7059F3C3,
+0x67882730, 0xB777C8C3, 0x02830ABE, 0xFFD467E2, 0xC31BF1A1, 0xBA54B99B, 0x2899B3BF, 0x003298FE,
+0x51873FA0, 0x855E0231, 0x53BDFD81, 0x5EB44BAD, 0x99CD5DC9, 0x4D5EE86D, 0x656419F0, 0xEE26D5A8,
+0x83500312, 0x7380BDCF, 0x648E0E22, 0xEFB1F0C4, 0x38B24AB9, 0x16B0CBFF, 0x492EC0FA, 0x8CF750F8,
+0x63DC0F1F, 0xDE9A8DC3, 0x0FBDBC7D, 0x26C71D49, 0xAD8EB177, 0xF4FD3C20, 0xF1F06FA8, 0x0FDBCAEE,
+0x7550CCF0, 0xCAB9DBD0, 0x093142B5, 0x3DF08128, 0x5BE5D4A6, 0x8DC01B7E, 0x831C16D6, 0x6FFD1ED9,
+0x5ABB8504, 0x569706A9, 0xC8EEC05B, 0x88DFE3EF, 0xE84E472D, 0x7B9707B5, 0xEDDE50AB, 0x851CD0B2,
+0xF581B1AC, 0x9D2FCE84, 0xCFC54ECA, 0xBC9BFBD4, 0x06105902, 0x9C1BB23B, 0xE09CFF26, 0xDBA334EA,
+0xF3E20097, 0xDC1C0DDB, 0x4168BC67, 0x53B9EF69, 0xC956653B, 0x7840DAB7, 0x895D1A0A, 0x95D543E1,
+0x4DE4FEF2, 0x4FC8B5CB, 0xA929A3B5, 0x81770B74, 0xCEEA225F, 0x6EF5F1D5, 0xCA613E58, 0x0A9FCDAD,
+0xCC68F2D5, 0x13004021, 0x9C6C8F7D, 0x2A95E002, 0x30814FD1, 0xABF5F3C1, 0xE62AA7F2, 0x1E209D58,
+0xAB5E592E, 0x3F902EF7, 0x0238C5C0, 0x19726473, 0xEA0E9730, 0xD61BC3E9, 0x0E981493, 0xF707A59F,
+0x4F9965BA, 0x87585C8F, 0xA4E98C50, 0x82948700, 0xBF50EFA3, 0x12DD2B74, 0x90BFCC00, 0xC09EFEFC,
+0x6CE08665, 0x1F4E3F5D, 0xDF8CCF2B, 0x02618640, 0xA5B1149A, 0x716C0322, 0x021B58AC, 0xB3886DB6,
+0xD8EDD8EE, 0x6F7CFFA9, 0xFCE14E23, 0x5A1EB159, 0x75344D76, 0xCE6B28B5, 0xF0241B2B, 0x9E1A7D8A,
+0x02312BB6, 0xE5112AEB, 0x4F8DE98F, 0x64BAF726, 0x69FB95FB, 0x62E249A8, 0xCCF222F9, 0x97E6D597,
+0xE83EE39E, 0xFE5974AA, 0x0172E893, 0x1F2BC887, 0x76BE4D15, 0x7DE57F91, 0x4BF73DD8, 0xDBBAC033,
+0x69B2FB64, 0x67C25C68, 0x6F0F3415, 0x76B3D572, 0xE2D87758, 0x23672CF4, 0x7227B951, 0xD966FA29,
+0x46A2623D, 0x2D3F5621, 0x0A1E35E7, 0xCEF58C2E, 0xE83B13AC, 0xBFC5B420, 0xB3800C79, 0x6EB1FED9,
+0x2C066CDD, 0xD28EC628, 0x4E18BBDD, 0x9EF10D9F, 0x3324EF4C, 0x89BADC38, 0xEDC0230B, 0x52623944,
+0xCC040D30, 0x0158841F, 0x05238D11, 0x7A95938A, 0xDADC38A1, 0xD8924A3C, 0xDAB44F4E, 0x852472B6,
+0x22BE93E3, 0xBC67B6AD, 0xB07CDF31, 0xCDD6EA29, 0x5939DE4C, 0x556C941C, 0xC0E72A5F, 0x1EA2AAF5,
+0x9F5D7696, 0x82502836, 0x9B4D852F, 0xF2403F6F, 0x343660A2, 0x827674D9, 0xB668B7CE, 0xBA0942A0,
+0x5627448D, 0x33FE5971, 0xDB89FA62, 0x6158DA0C, 0x13B039CB, 0xBA0DE732, 0x5B6FE4F8, 0x9637EC96,
+0x82169F54, 0x8F5074BE, 0x32136A7F, 0x75C38495, 0x98D9E55C, 0x59CB798F, 0xA987F02A, 0x0B69727E,
+0x962C8A3E, 0x0C37D87B, 0xF58C5394, 0x561E67D9, 0x4CBE1E1D, 0x7362C119, 0x81933569, 0x9923EB28,
+0x92FFD8A5, 0xA4424E8F, 0x54732A7A, 0x0EB4617A, 0x32F23C48, 0x79548440, 0xF37D9DEB, 0xE8C122A2,
+0xE366E606, 0x53D881ED, 0x27438626, 0x39624E45, 0x5D42DDE8, 0x289F75DC, 0x6CEEDD81, 0x9F177997,
+0x4A1B0A9D, 0x0C849FCE, 0x38D34D80, 0xAE3ED483, 0x829980D1, 0xD7ABD90A, 0x1F319A9E, 0x14521C37,
+0x207FBE99, 0x15B55C72, 0x29F2C559, 0xAF03E046, 0x1A9C7DE4, 0xB08C2922, 0xCDA2349B, 0x4D0AAD3A,
+0x6BABA6EE, 0x954AD767, 0x938D11B8, 0x08088EB0, 0xF9CE3EEB, 0xDD1B3EAD, 0xF6F1483C, 0x2C45E43B,
+0x33B20658, 0xF851591F, 0xDEC5CC4F, 0x3F272F11, 0xDA0DD8B9, 0x7B8F45DA, 0xD3B113FD, 0xEFF7A817,
+0xD0A791F0, 0x53690DE6, 0x5965F0F4, 0x8D58D87E, 0x5E484399, 0x1824B436, 0xAE32A0F6, 0xFD6E7817,
+0xB418A6A3, 0x1412C26E, 0xC5E4F426, 0xF112D5C3, 0xD648E37D, 0xFE2A96DE, 0xA6E5C1CF, 0x1D650DDE,
+0xA7C762B6, 0x33A3553F, 0x0A244FAF, 0x4708310A, 0xC5C9C70C, 0xE69C681F, 0xA8EDBF87, 0xEE53F739,
+0x7FC6FAAE, 0x87CEA8F0, 0x09DA0487, 0x8EC150F7, 0x0D6B523A, 0x4E2D47CF, 0xAB71C5EA, 0x5DAC6EDE,
+0xE876ECA8, 0x5009DFBC, 0x2125599C, 0x062377E2, 0x767F73A7, 0xCABC448F, 0x5AC02D27, 0x186149B8,
+0x39EF721C, 0x56972BF1, 0xC498D702, 0x5748920F, 0xC40ED52B, 0x9BCCF471, 0x2781103A, 0x5F0FC675,
+0x553FD5A5, 0xA3DCF751, 0x1091F117, 0xB99540CE, 0x986FB98A, 0x63355C7C, 0x124DB2A4, 0x17ADD31C,
+0xEA632C39, 0xCF11DCCB, 0xFE3795B5, 0xC03D3329, 0xB109AC63, 0x1A4B19F9, 0xA456DB89, 0xA51BA1D4,
+0x43E42FBC, 0x9DB507F2, 0x62426CC0, 0x143C5F9C, 0x6EBFF554, 0x968CE934, 0x351863CF, 0x3A16D3E5,
+0x62F1877D, 0x4A3FE366, 0x2DC08D68, 0xE8001F0B, 0x09709DAA, 0x95471600, 0x626F74FC, 0x250BBE69,
+0xFAF71A4F, 0x99BC95BE, 0x1529D4F8, 0x20FFF20D, 0xDB84EC21, 0x968D7AD0, 0x8B51A950, 0xEDDAB4B3,
+0xF0F002B8, 0x7ECF17EC, 0x8786D255, 0x68F37B9C, 0x9EED0498, 0xAF45B94B, 0xDBCD7A2C, 0x873205AC,
+0x3B7AFFCC, 0xF834BBFB, 0x972E360B, 0x22B00331, 0xA4CE9548, 0x3183395F, 0x7348A736, 0xECD04560,
+0xEAE4F718, 0x61F01945, 0xD48BB0F6, 0xDD88B9CB, 0x7566D33C, 0x23E3FC3B, 0xF17BC349, 0x8E138333,
+0xBA8AF4E1, 0x7A1F3811, 0x37148468, 0x76279B39, 0x26836B94, 0x73023392, 0xB815899A, 0xBB8034FC,
+0x1F6E592A, 0x02BCDDF3, 0xB3FCA5FD, 0x0FE3C4AE, 0x8C58B4D7, 0x3F756247, 0x36908464, 0xCD71AE9D,
+0x9E0DBE56, 0xD4BF9B2E, 0x9DE97ABA, 0x0C722D45, 0x2A2A7D09, 0xB03720CE, 0xFE4648CB, 0xFEA63327,
+0x6E240646, 0xA1D7B396, 0xFAD30409, 0xD706CA05, 0xC4A4ACAA, 0x5A8A75DE, 0x0E526483, 0x7BE53E7D,
+0x84147FD2, 0xEF8B4D5E, 0xE088B089, 0xAEF7F1C5, 0x345E3BDF, 0x32D09960, 0xF8F17AFB, 0x08BA9749,
+0x1E085573, 0x5DAD96AD, 0xA3BA7CDA, 0xF9AB5CFF, 0xEBEAF5CB, 0x3B429538, 0xFC79D1F2, 0xA2768762,
+0xAF4BA7AC, 0x0D51B875, 0x6183C723, 0xCCD0ACF3, 0x15A1AF6B, 0xA9027DD9, 0xAB42C915, 0x5681E406,
+0xB1F7A34B, 0x1AD39023, 0x44477E95, 0xA8E876E8, 0x30F5D414, 0x460E7EF9, 0x971DFDAE, 0x1A65967B,
+0xE521BC89, 0xCB63893A, 0xFBA6CDA9, 0x03EC43AB, 0x58078C24, 0x8326D84B, 0xF232F49E, 0x03E7E967,
+0x359D6DC4, 0x3B76A9BF, 0xFA82D68A, 0xC72CAB76, 0xCE557D73, 0xA03E7256, 0xE8051DA4, 0x771B0F9C,
+0xB947E754, 0xF0670F9E, 0xA01D8D79, 0x5EA56E56, 0x54B39E3D, 0xFD0DE5B1, 0xACF6698F, 0x5015D538,
+0xE722FE64, 0xD43EDAFE, 0x357B1048, 0xD16266F6, 0xF6BC3520, 0xB705E482, 0x150B398D, 0x1640306A,
+0x16BF7671, 0x62D60DFB, 0x6A896F1E, 0xACC7E3D5, 0x5F0D1DB0, 0xF102C31A, 0x667DD887, 0x0881672D,
+0xE0149963, 0x19957276, 0xD07BF4D9, 0x929DD9D7, 0x001EAB97, 0xF1FD27F7, 0x5D13AD5E, 0xE7D17862,
+0xC3F6871B, 0x89334699, 0x8BA06CD3, 0x492AD61E, 0x84F32518, 0xFC93E678, 0x15E00211, 0xDE28FC10,
+0x2E339ECE, 0x5BBEFD8A, 0xF993F3D9, 0x9003BCA4, 0x06A8A250, 0x7670232B, 0x419E36D1, 0xA91F49CE,
+0xEC5FACEC, 0x45912BB5, 0x4AFFC101, 0x533E66D0, 0xAA862A72, 0x5B0F234E, 0xAEBC024B, 0x746859AB,
+0xEE264787, 0xCFE8A776, 0x1228310A, 0x4CE3EB3F, 0x68758255, 0x3634ADE4, 0xECF86DBE, 0x70373BB3,
+0x235DDB25, 0xDD28A6D4, 0x9CBDF5A4, 0x854C5470, 0x597D0B7C, 0x1E530F01, 0x53EC18F1, 0x5F5FC529,
+0x71AB0760, 0x83AE2B96, 0x0C9F10D4, 0x7095DD9C, 0xA6177564, 0x0F4A5371, 0x82826620, 0x0C1BF2D6,
+0x5015EC65, 0x2369E534, 0xA10E6CF6, 0xCE681DAE, 0xDC180DB2, 0x896F19B7, 0xF12BF03A, 0x8F0F0923,
+0x6318C47C, 0x5AAF7F18, 0x859FFB40, 0x2E17DAA2, 0x477CBC25, 0x6ACEE8D4, 0x3FDB2A4D, 0x0D2891E1,
+0x319217CC, 0x4E9A8013, 0x6DDF16FA, 0xE0571841, 0x2BEFD4F5, 0x066DC36A, 0x80173118, 0x5FC40E47,
+0x24FB8EFA, 0x19F1718E, 0x6F774571, 0x2B38C803, 0x358F223E, 0x7A405868, 0x2BCCA524, 0xAC1EDA43,
+0xB7AF78A9, 0x4662826D, 0xACA7387E, 0xCA167A79, 0x74EE9591, 0xDF3F8E10, 0x1CA26517, 0x35855775,
+0x1B92B5A6, 0x98270525, 0xD4466277, 0xBC8F04A6, 0xE6A25098, 0x769D6A98, 0xB6A2E79E, 0x21C5ACAD,
+0xB4FDBCF9, 0xB8A5F0C4, 0x1A98CF5B, 0xDC4045AB, 0xE3AF85EA, 0x10C6D269, 0x6D42120D, 0xC9165590,
+0x11C24CE0, 0x6C09134C, 0x41F215F6, 0xABE6F287, 0xCBB105F3, 0x9061EF87, 0x2B16ADDF, 0x49C27B96,
+0xC693B5A7, 0x273B4C73, 0xD59F59C6, 0xF7549FAD, 0x85EBFF60, 0x757C20B7, 0x6CE7FC56, 0xD9607663,
+0x91391EA1, 0xB9190456, 0x49A4DD52, 0x35E25749, 0xDB1D863E, 0xAC677D70, 0xC3F1F908, 0xDC5A6747,
+0xF7FCED03, 0x393E6D11, 0x3AA2C275, 0xC87C8A86, 0x07A29C47, 0xDE9C4C75, 0x508BC907, 0xC2A67F56,
+0x18061F90, 0x986D3C12, 0x40548D77, 0x485779A3, 0xAC0C091D, 0xB039410C, 0xB97E47FC, 0x1A263A94,
+0x18F0A858, 0x33EA8C39, 0x8C472F61, 0x7650A619, 0x111B54E2, 0x154A5793, 0x2FC562E0, 0xC0422212,
+0x084E27FA, 0x56F848DC, 0xE33E2B92, 0xE61A5D4B, 0x3E8CE744, 0xDD1CC654, 0xF0EC752E, 0x07638733,
+0xB3499817, 0xBDB944AF, 0x2A10D9E3, 0x5E678451, 0xFB3133D8, 0x7F8F63E6, 0x864876ED, 0x2D6BD6EE,
+0x8DDB05C7, 0xBD52570D, 0xD0A3DE16, 0x36FDFA02, 0x7A94F1A5, 0x463A90A8, 0x0B7FF098, 0xF70FB9AB,
+0xDA982C49, 0xACB09A27, 0x18C14D72, 0x57BD8686, 0x247215F0, 0xCE303EA9, 0xD9D5A146, 0xC447D9B4,
+0xAC291AAD, 0xF71EFD16, 0x1AB977E7, 0x51537D19, 0x972F7AEA, 0x844E454B, 0x4AD86C74, 0xC0319B61,
+0xEF678E69, 0xA510546F, 0xAA8A847D, 0xAFFFEE69, 0xD2E74F99, 0x5DF14E89, 0xA93FD3E8, 0x7C519915,
+0x5FA8BFC0, 0x502D3D92, 0x6CADBFE4, 0x32E7379B, 0x55E583A4, 0xD7339EF7, 0xD6F13846, 0x7F6A37D0,
+0xFF87C76D, 0x09C40A49, 0xFF85ED96, 0xD481098D, 0x35D6F3A8, 0xC80C1896, 0x45BBEF57, 0xEEE51670,
+0x7A83DE97, 0xFD78308C, 0x5CB15F9C, 0xDEF2E212, 0x1B496E98, 0xD5605242, 0x7920C737, 0xF76B2DBD,
+0x51BCD0E9, 0xDBE94489, 0x7E158D3A, 0x25686850, 0xC5671DF9, 0x56D58B18, 0x5153F40C, 0x75F1BBA5,
+0x3F20547E, 0x87E5686E, 0x1813B5EE, 0x0B1F0C27, 0x660255E7, 0xE90E4511, 0x4EE741ED, 0xE2D9376A,
+0x231BD097, 0x3DB1FDE8, 0x1554C6BF, 0x33AB16E5, 0x899BE0F1, 0xF9DAD5D6, 0x22AAEB4E, 0xBBE0B3CD,
+0x92133D1B, 0xE0708A29, 0x183E908E, 0x9B4DB814, 0x453F34F5, 0x1A21674B, 0x763757E8, 0x9D08F623,
+0xF9C99A02, 0x801C58F4, 0xE56DE81F, 0x79B260D6, 0x3FEBC0BA, 0xC1C005A1, 0x4702D925, 0xA365E9E9,
+0xCC90607B, 0xB798583A, 0x60C3F6ED, 0x4A0B2419, 0x1463A180, 0xF0CAA4DA, 0x4574D86F, 0xE8671AB4,
+0x8530B095, 0xC1329B12, 0x49F3EC5B, 0x7103CEAC, 0x06E85F02, 0x4B6E1F7A, 0xE3A48CA6, 0xACA50E11,
+0xDED8358E, 0xE7FDE9AB, 0x46198AEA, 0x17C8C720, 0x6356583B, 0xA02A30A2, 0x2C157E3A, 0x5D09949A,
+0x77CF0B61, 0xD3C695CA, 0xDD8F60B5, 0xDC038821, 0x922E8AEB, 0x8E7FFF78, 0xBAF9D310, 0xB329E8DA,
+0x601D37C6, 0xFAF1386D, 0x9D5A68EE, 0x95825284, 0x02F47121, 0x3DF180F8, 0x995D3102, 0x934CCFEF,
+0x909AC4D8, 0x3925AFE5, 0x19FDE1E1, 0xA9F8AEA8, 0x35160F65, 0x2042F7DF, 0x213A3283, 0x29F52C01,
+0x46B5D540, 0x3FFD83E7, 0xFFD74D4E, 0x4E5E688F, 0xD3E5604A, 0x317670C3, 0x06235C1B, 0xC4D507FF,
+0xCE6731C4, 0x99664CA8, 0x83630695, 0x80DA8AA5, 0x5AF2D59A, 0xE055477C, 0x958F7F20, 0x9520199B,
+0xBD14D9C3, 0xA3C9B7FA, 0x5D5A06C2, 0x32757785, 0x73CD36CF, 0x0886ABB2, 0xACC46E63, 0x15F79ED7,
+0x6AB7B829, 0x789384B6, 0x896381F5, 0xC95957AF, 0x4E1C0A41, 0x73144CA3, 0xDC0A23DF, 0xBA5D0350,
+0xFD4E6535, 0xBB2FAC0D, 0xBF066668, 0xCCFBB62A, 0xF2244FEF, 0xDD1A0D35, 0xE0384331, 0x9E7EE721,
+0x5E2515A4, 0x806E537C, 0x4E8DDC26, 0xBAA83BD6, 0x30F86D01, 0x6D556C79, 0x161B4CC0, 0x4C6320FE,
+0x0C7A26E0, 0x18C62A7D, 0xEE8A6F92, 0xC67EB1CE, 0x0163B54C, 0x2A3A3713, 0xFB7F62C3, 0xA361C3A3,
+0xF7AECE08, 0xA9CC8FF4, 0xAC2AE86D, 0x740C5886, 0x327E5BEB, 0x20897A78, 0x4D00A1D0, 0xAD3BF537,
+0x7DB22C40, 0x9171CBF1, 0xC47415A8, 0x14A68E68, 0xE06331BE, 0xB73748C0, 0xEC5FEA26, 0x5B4E9154,
+0x61DAC36C, 0x0C37F2AB, 0x55EE62BD, 0x91EA88D7, 0x3CDD8575, 0xA2D66DC1, 0xED1EA6EB, 0xA510221C,
+0x6D748A6F, 0x8C341726, 0x0AD62F98, 0x59D1921D, 0xB6CC74E3, 0x9BC948F2, 0x4FD59797, 0x11EFAF12,
+0x03B59190, 0x46D22F5B, 0xE127ACDB, 0x556BF50E, 0xE4CA6483, 0xDF4F768D, 0xAA392D5B, 0x0ACF79EC,
+0x941E66BA, 0x1FC790AF, 0x86EC5522, 0xC2301593, 0x078E1C67, 0x060AF267, 0x0AA8FE39, 0x4FEE548B,
+0x02726908, 0x3D87BB12, 0x2C66BC10, 0xB3A8A7D6, 0x4CDC8BA7, 0x16696152, 0xE5FCD20C, 0x3C7FEB93,
+0x07416530, 0x9C6EA09F, 0x96AD3F05, 0xA65F4C80, 0x22BDDA3C, 0xF8850CD3, 0x79DC76C0, 0x4317DB04,
+0x71CA3612, 0xAC3E1371, 0x687C0CA7, 0x0993CBBC, 0x08BFC62D, 0x6BFE576E, 0x7CF20C0B, 0x96AE19F2,
+0x5D8FC7D3, 0x84DA76B3, 0xC1F76905, 0x29564827, 0x0459541D, 0x757049BF, 0x6FA7C1FA, 0x41B8E740,
+0x282C5F54, 0xB275A494, 0xBCCF55C8, 0xA93337E5, 0xFDBADD7B, 0x86E54E21, 0x41C8FCBA, 0xD6369B1B,
+0x413A2DE1, 0xA0526353, 0x628F24A5, 0xC074633B, 0xB1D23637, 0x72612F1E, 0x1CE7070D, 0x5F855882,
+0xD4AB24C5, 0x502C4340, 0x285A668A, 0x0D316549, 0x00F5A9FC, 0xD781F86F, 0x16D1F1F3, 0xC0C82D34,
+0x8151D66A, 0x1320C84C, 0x4CFF2708, 0x844E86DD, 0xA2C9B426, 0x4FE4902E, 0x81286A2B, 0x9C4A0B92,
+0x272D5026, 0xDEEA9E13, 0x48C642D8, 0x56DE4DFA, 0xEA879FFD, 0x340075FC, 0x8CDED96C, 0x21D8410B,
+0x6F8FDE84, 0x6A0316FC, 0xC86BD063, 0x8B7C704B, 0x85AF0EAF, 0x758C352C, 0x4FEB22F2, 0x572DE0E6,
+0x60689567, 0xE46BB6BE, 0xA294CA5B, 0xF342CAB3, 0xC646EAF1, 0x7C98B203, 0x3E390C3E, 0x1FCBD988,
+0x8637A2C6, 0x8F7F3544, 0x548F94D3, 0xB27EDBFE, 0xEBDCA27F, 0xB537DD90, 0x0CA70858, 0xF39C4469,
+0x0A085D39, 0xC7A420C6, 0x80621068, 0xCF628683, 0xDAD39E59, 0x77F23CBC, 0x07946B11, 0x9E0D04FA,
+0x8A2C3154, 0xF3FDB0C9, 0x6F24CE82, 0x44CCE4F5, 0x0555F2F5, 0x364BB759, 0x8FB90935, 0x50567F90,
+0xD8D61C83, 0x03334640, 0x493354FB, 0x04A7F6BF, 0xC2992D19, 0x0F06EE27, 0xB4F853B0, 0x95D3F629,
+0x0194DD7D, 0x1520DBE9, 0x71DBEFC3, 0xF4ED1C1F, 0x8A7E7259, 0x143D4FB4, 0x2BDB56E3, 0x895CB919,
+0xD0394152, 0xA83B6C00, 0xD5FBA70C, 0x1CB3CF71, 0x1247E7DB, 0x96C9E28D, 0x03DAEBC5, 0x441A54CC,
+0xB7213264, 0x1F17717A, 0x028C0EA1, 0x96214BBF, 0xEA98E40B, 0x43EED86D, 0xA47A7C68, 0x309A441B,
+0xE66DC7FF, 0x66715E2E, 0x877BA9FC, 0x5E78531D, 0x065FA0D8, 0x9ACAE9A9, 0x8F8BDFAF, 0x4A6A82B5,
+0x7C958F99, 0x635F98B8, 0xB8F7B43A, 0xE95853E1, 0xCE219FBA, 0xB5B109FC, 0x7B8D0D52, 0x1320B405,
+0x2A8985D1, 0x2AFC721A, 0xD4A90FCE, 0x988E7D21, 0xE5C48A33, 0xAEBA5B07, 0xBA834B8E, 0xE8465B78,
+0xCBFF0199, 0xB96B0D54, 0xEC04DA84, 0x758C7E2F, 0xFE7D5B21, 0x195EFEA8, 0x5D7D5CF0, 0x3DE74AE0,
+0xAA4EC719, 0x3192AAFB, 0xC0731901, 0x94A7570F, 0x80152410, 0x13C9B524, 0xA6F9D085, 0x98E82174,
+0xBE02B53F, 0x2AABDF93, 0x723318BF, 0xE8852EBB, 0xADA4D319, 0xF4F6EA38, 0x746A92F5, 0xF760B900,
+0x2C85CC5F, 0xFB83C43E, 0x458C3D0C, 0xF9FA0AA1, 0x5B2AD68B, 0x098AFCCD, 0xA4F2D221, 0xB2501818,
+0x4F9BF598, 0xC48C05D1, 0x16B3E814, 0x1FEEF414, 0x70AF78A1, 0x8C824D14, 0xDDF775D7, 0x7A49E4D4,
+0x5BB09804, 0xCA85D571, 0xE14297A9, 0x410A68D6, 0x76A58501, 0x87CBB293, 0x9B11D7C4, 0xF5D44E6E,
+0xDDD98B0B, 0x0AFA5C58, 0x1068678B, 0xEA4ADF54, 0xA9245026, 0x48B02BAE, 0x107A2A2F, 0xE9130E9E,
+0x7D4F1213, 0x0D18EDEF, 0x65CCC1DE, 0x248DE379, 0x205D1EB6, 0x4FD69464, 0x048C797E, 0x905100E7,
+0x922BFA74, 0xCA3EF2A2, 0xD2EA1FFF, 0x5BB2A0C2, 0xAC77033D, 0x7A21CAFE, 0x7BA8DA8A, 0xA3068D5B,
+0x7D820982, 0x6981497E, 0xCE42402F, 0xCB9C5692, 0xADD12697, 0x1C518F68, 0xC9D5E7BD, 0xB1317F8F,
+0x5D189C69, 0xBB82572A, 0xD4F0E862, 0x253A04E8, 0x3DAE7C56, 0x40377E1C, 0x6BF4AC6E, 0x6F436A74,
+0x4CD66066, 0x31FF342F, 0x7C4B16E3, 0x7CB678D9, 0x6D4FD948, 0x5DC88CE9, 0x5993EA68, 0xB7BAA7F2,
+0x28EF3B22, 0xECAAC27D, 0x52BFB331, 0x3D26A50F, 0xC7028A49, 0x0D5EF20F, 0x1A800206, 0x6997D639,
+0x78C1AE33, 0x54F83717, 0x2AE660CB, 0x4E5AA315, 0x6484553B, 0x9564BA61, 0xA667ACCA, 0xE74D80B2,
+0xBE8B41BF, 0xEB543A00, 0xB89B7E54, 0x4B887CD5, 0xC955A437, 0x98D808CA, 0xA3108C7E, 0x30D5CCB4,
+0x76AA4015, 0x041E74A3, 0x2B85DDE7, 0x81A46932, 0x95C2FF0F, 0xE101526A, 0x6BC44AD4, 0xE6CC999A,
+0xF6A1E039, 0x0420BA52, 0x2579C67C, 0x09EF9E66, 0xADC6B625, 0x0E2072E7, 0xA2CBC1D3, 0xF6DE0A0C,
+0xC3BF7750, 0x36469944, 0x2E9D1583, 0x3AD5EE91, 0x7580331A, 0x225BE293, 0x14250866, 0xD23E9760,
+0x9DAE18BB, 0x663D1859, 0x54A15278, 0x96A88D19, 0x607BCAB5, 0x0E3B6C29, 0x4F54D699, 0xE1A924AD,
+0x39768D62, 0x7FFC4230, 0x5DE4B52F, 0xB48CCF1D, 0x84F5C74E, 0x81A80E63, 0x66EEF2DB, 0x9BCEEC15,
+0x9FDD3E14, 0x0E19DA06, 0xFB28D4EF, 0x604A4DB7, 0x90EB10B8, 0x5D164517, 0x42FE22AB, 0x4BCC666D,
+0x4BDC2B83, 0xDF7CC28F, 0xC1F7FD46, 0xEF403EA4, 0xE5D6DEEF, 0xBE6F04E2, 0x366D1DBE, 0x985129BC,
+0x3BECDE70, 0x78CCBA05, 0xE846BA3B, 0x1A1232D1, 0xE2BA6670, 0x92A3E5BC, 0x3552473D, 0x7B6B813C,
+0x53ACAD4C, 0xE9D5E244, 0xDEF0F2CB, 0x049D5DD2, 0xA8F1F248, 0x668DF9DF, 0xC7D2E4E1, 0x0CB5A116,
+0xCEE85D25, 0x886D63C7, 0x4237E635, 0x153111E0, 0x2474ACDB, 0xF98E0662, 0x8AF8A8E3, 0x17E28666,
+0xA970E71D, 0x4B48A6BA, 0x7D96DF12, 0x23B977F5, 0x42CDA368, 0xD036D8FB, 0x6690A159, 0x1603C23E,
+0x10921EA9, 0x8D7D51EB, 0x1D24EE9D, 0xE7610F7B, 0x1C79C031, 0x98739CEE, 0xB374F76F, 0x368DC9C7,
+0x8446F75F, 0x35B5AD6F, 0x623122A2, 0x59083A3E, 0x6D3B34CB, 0xD0E32C86, 0xAAB79EA1, 0xF5033A38,
+0x1DB92234, 0xBF0D1CEE, 0x1E1FCEEC, 0x5333CCB9, 0x8AB4AE62, 0xFA4A42B1, 0x22FFE1B3, 0x9F76DC90,
+0x91A6A381, 0xF5C99AB2, 0x5E5AB2FF, 0x4A470AA0, 0xB8A12F6E, 0x7A946E8D, 0x20EE56DC, 0x7440A2CE,
+0x64E6D92C, 0x282531C8, 0x43EFF44C, 0xDA67A0FE, 0xFCD53177, 0x840F5CE9, 0xA7AD8067, 0x8FD599BE,
+0xA2EF3AE1, 0xAD9AA6DD, 0x68C7A8D3, 0xADC2F032, 0x14205DAA, 0x54A9D51E, 0xBCAA2B96, 0x5EE93904,
+0xEA5BD44A, 0x2F2F44D2, 0x1FF36099, 0x6C15A856, 0x9FA30F04, 0xFAE61EB3, 0x5246E92E, 0x2B4A27E8,
+0x4F66D3F8, 0xF9C7BB7F, 0xB551C692, 0xA8E82CA8, 0xBCD1F661, 0xF21DFD23, 0xBE707055, 0x46A86DD6,
+0x0AE9776C, 0xF02479D3, 0x83E979D4, 0x75C85D20, 0x1C532FCF, 0x6279BA7D, 0x22126F2F, 0x6034FFBE,
+0xDF126931, 0xEDDDC3B7, 0x0234F508, 0xD3920F66, 0x712B761E, 0x77E32BC4, 0xF0B5D8F0, 0x67B78686,
+0x6CF4A6D9, 0xBF5AD5D2, 0xE3B88E4D, 0x93DDA523, 0x5018C5DC, 0x5AAEDCA2, 0x0A209212, 0xBE4610B8,
+0xB576FD7B, 0xDDECF69A, 0xA4BDEFAA, 0x084635DB, 0x404C733F, 0xD104B25E, 0xA9EDADD6, 0xB2A560FA,
+0x5B25349E, 0x34BE59A8, 0x319EA680, 0x15ADE316, 0xFB838DDA, 0xDA42E825, 0x04BFC3AE, 0xE9053C2A,
+0x6A86E28F, 0x17E18A3A, 0xE92DAECC, 0x03E25022, 0xA3CC0314, 0x1F9C5DA4, 0x2CEFAC1D, 0x1DC9C750,
+0xE2004BB0, 0x8821EB1D, 0xFC8F74AE, 0x0625CDBD, 0x527A1802, 0x70C153E3, 0xFAD0C3B2, 0xA9019608,
+0x87CAD0A4, 0xCEC5FE53, 0x70DA2E86, 0xFF0FA518, 0x8C1A72DF, 0xD1CD09C1, 0x11AAE8E2, 0x4675222B,
+0xB20DC00D, 0x3D462EFD, 0x9EFEA486, 0x8E285F95, 0x2784D849, 0x8D5D929B, 0x242AD864, 0xE3DCCEDD,
+0xB0F2C658, 0x6A53005B, 0x940CB25D, 0x27382889, 0xBC5648E0, 0x67027D59, 0x861A80C6, 0x08443379,
+0x0FE914A5, 0xBC80D44E, 0x2C7F0BD4, 0x68E0EDA7, 0x34FE9FE1, 0x12CDE3B1, 0x99FBA0D6, 0x703BD042,
+0xF37870CF, 0x7459C8E3, 0x958B8DFD, 0x25BB3572, 0xAC2FAF8B, 0xC650A8CA, 0xF45D376E, 0xF138F3F5,
+0xEFA0893E, 0x2FE26D8F, 0x4E8C89B2, 0x3A28C0FB, 0x1E306147, 0xD71CDC0D, 0xCE1602AF, 0xEDE7E411,
+0xD773FA28, 0xCE2D60BA, 0xE1DB81E9, 0x8F54F0C2, 0xDE565545, 0x040DC0DC, 0x4025E728, 0xB136644F,
+0x415BBC86, 0x2B849AC9, 0x9166059F, 0xEECB7DE5, 0xC278CC40, 0x6FF6051E, 0xBA08288A, 0x6CC0F835,
+0xB0C70C06, 0xEACA5212, 0xCAB2B43F, 0x5D6CB8CA, 0x97510DF3, 0x36A3F69C, 0x30F85B8E, 0x310A1820,
+0x8F13CBFA, 0x91F04649, 0x9C1EAD1B, 0x293562E4, 0x5F210EC9, 0xA8680EB0, 0x73C3A9C1, 0xEFDBD2A0,
+0xE0139181, 0x610CF53E, 0xF69D2BED, 0x4DF77FD9, 0x0DD95EDA, 0x425EC421, 0x62F1CBB6, 0x4D9E4DD5,
+0xBA99A833, 0x6A947676, 0xCCAB7858, 0xE98E653A, 0xB7B4E847, 0x69D0122D, 0xEFE98086, 0xD41F14B2,
+0x919EF9C7, 0x2FC9E0DD, 0x009F4DF3, 0x72F465F9, 0x986D8C40, 0x462EB86D, 0x99515241, 0x88762D4D,
+0xF23EF528, 0x3C1BACFF, 0x12B87A8C, 0x61C3F555, 0x7D540432, 0xE8B363F0, 0xEA6E9DAE, 0xA84005E6,
+0xBD2BFC95, 0x5E25108E, 0xDCC8C448, 0xB10B3621, 0x85115506, 0xC9ED7F4C, 0xC3D6C7DA, 0x7FA7ED59,
+0x3A5D28D8, 0xFB374D89, 0x878E63DA, 0x927FF2D8, 0x27D21C72, 0x01577311, 0x8BD376C9, 0x6AAEDE03,
+0x21054586, 0xDE505044, 0x4EDC6474, 0x3C3C6C14, 0xB7002A66, 0x92328C69, 0x7961BAFD, 0xA7BC4765,
+0x8DC8B894, 0x5248CBF2, 0xF1C2F813, 0x2B8D6685, 0x63875D33, 0x6DD6A706, 0xA7AF3135, 0x2D417BE5,
+0xD10FFFE0, 0x2A17BDB8, 0x68AA9A40, 0xC30165A6, 0xC43D0BD7, 0x29C66782, 0xFEEA6BE4, 0x0EF35A91,
+0x52148CC2, 0x14F9F29D, 0x140EE262, 0xE53E21EB, 0x77EEFA7E, 0x22D41580, 0xAAA73560, 0x50BD2D82,
+0xCAFB8794, 0xE976A037, 0xFFCAC0BE, 0x963724C2, 0xCE112F93, 0xD1CA4783, 0xA8E68154, 0x3045568C,
+0xFBF90A9C, 0xC0B0104D, 0x0E7AE67B, 0xFC1E4FA5, 0xC2D9C5F0, 0xE92F35F9, 0x573EEB69, 0x2FF6848C,
+0x056AE34E, 0xD8B15974, 0x58A9BE62, 0x159AFAC1, 0xC0B481FE, 0x04D60218, 0x32229B71, 0x23FB8783,
+0x78F3E397, 0x686B8AEF, 0xF3E120E6, 0xCBA8DEDB, 0xD9935AFE, 0xC83D9011, 0x2073C775, 0x185C67F4,
+0x2E761034, 0xE5758EFA, 0x392B74B8, 0x5A82977F, 0xF375CE20, 0x81B1B9E0, 0x276EA4C8, 0x023ECBB1,
+0x1CB27D31, 0xFA571A2F, 0xE2082418, 0x90AF8ED4, 0x35FCBAEB, 0x4D7E0932, 0x4176FD54, 0x5F44F761,
+0x06BE5820, 0xB7C154B4, 0x5F12C6FA, 0x1D1F7C77, 0x32DE7BF3, 0xE57755A3, 0x72591130, 0xB4A3DCA2,
+0x7C817A07, 0x91277B4F, 0x3C8E6D6A, 0x4D0269F4, 0x2F26CDCC, 0x81EE7D33, 0xFDF27281, 0x0480D628,
+0x1BCE6764, 0x5705C0FA, 0xACD7A37C, 0x7EA800C4, 0xB713FF59, 0xDDBF60A1, 0x790DE85F, 0x9D67F3B3,
+0x4F860D8D, 0xE16D2071, 0x3552A191, 0xE9E9AAEE, 0xA5E1B731, 0x89460B4B, 0x6A379052, 0x0ECDBE57,
+0x016FFBD7, 0x2766E208, 0xC3BA8FD2, 0x2CF02373, 0xC0169079, 0xED373B06, 0xE2154CCF, 0x41E8D2DD,
+0x1747F279, 0x3472C463, 0xF73B23B3, 0xB7799651, 0x4CA27202, 0x7699FB5F, 0x9724BF91, 0x1B9EBC43,
+0x4E72E44A, 0x17B14230, 0x6567ED99, 0x9AE87B3C, 0x351D547B, 0xE76B08B1, 0x9C509742, 0x4F30FFD3,
+0x27971575, 0xD480EDA8, 0x9F1DBE51, 0x4688DDD3, 0x7CE56047, 0x548D789D, 0xEE573899, 0xB1F7FF2B,
+0x6F9A6115, 0x8EBA8C33, 0xE77390EF, 0xC40E029D, 0x32C9939A, 0x6A34754D, 0x51D07A85, 0x9F3EADC1,
+0x542010DB, 0xFEB8B58E, 0x7631E3C1, 0xE51AEEA3, 0xFF2376E1, 0x46EB03D3, 0x29B8C708, 0x05417F70,
+0x04C48F0D, 0x95480107, 0x09144B08, 0x5DC0E172, 0xF3CDBCD5, 0x977D752D, 0x327630BC, 0x1AF8D4A7,
+0x67EB034D, 0xBB581BCE, 0x2A516987, 0x9D620A0C, 0xC684CA70, 0x888F97AC, 0xBF845C00, 0x20D04647,
+0x249502F6, 0x1B2C251F, 0xD114C818, 0x8EB7B384, 0x3CF1C173, 0x2A7EF3F8, 0xF9BAD7A1, 0xBF2FC3CA,
+0xB252AA0D, 0xAF791843, 0xCF468562, 0xBA6E55DC, 0x1E82A75E, 0x99D34C63, 0x4E83967A, 0x73CA11F1,
+0x0A4DF821, 0xA3769A52, 0x4052B2F2, 0x2674FFCA, 0x0AAF70AF, 0x2B25A1E0, 0xCB4E1759, 0x80ADB3D9,
+0x4D18467A, 0xCB246AE3, 0xDCD11104, 0x76EEF041, 0xA047A7A4, 0x7C2581EF, 0x108487DA, 0x47ECE202,
+0x92799B7E, 0xE5A5B103, 0x8D811E23, 0x3B338B56, 0x1D8FD4D6, 0x40287A4A, 0xD7DE0BCB, 0x065DC067,
+0xDA75B978, 0x4953E9B4, 0x49A72BBC, 0xF655DF53, 0x5FDA7BE9, 0xD45A8151, 0x362ED747, 0x374EC5CA,
+0xD273ABB5, 0xC25FDDB9, 0x5886D72D, 0x4A548636, 0x14CB1907, 0x23DB23FE, 0x273CB8AA, 0xCFB953B8,
+0x06C255BD, 0x457DC9FA, 0x0C2E8E2A, 0x95D8BB35, 0x00F2CA41, 0x1A29B8D3, 0xB68BFE32, 0x3CF22178,
+0x859D9F71, 0x6D5975E4, 0xA286692F, 0xBD14AD67, 0xDAE463E7, 0xEF2CD8D1, 0x360902B2, 0xF13597A9,
+0x8088943E, 0x3C280B16, 0x98E88DAB, 0x63D1EEF8, 0x8FCF232B, 0xF9488957, 0x252CAD3B, 0xA9B11FCE,
+0x4F797885, 0x1366D426, 0x63F2B8D1, 0xB34C4725, 0xCFBFE2DA, 0xB6B7111A, 0xE0E882A4, 0xAB795458,
+0x86F86F33, 0x6B52324D, 0x8A85712F, 0x39D5AF45, 0xDB9DA426, 0xF347F1F2, 0x3DC5BC31, 0x0C936484,
+0xA63534BE, 0xD87F8960, 0x75FFC9B3, 0x6C2A5C5F, 0x1D4C86C7, 0x4D46E497, 0x155A3BF0, 0x2A707ECF,
+0xDF754C44, 0x3CCB7DB7, 0xA50DA3DF, 0x08B43FCE, 0x97A0C33D, 0xE76FC54A, 0xE2F6F4BF, 0x5E82936C,
+0x11421252, 0xB9F04F91, 0x5033BF02, 0x8138E545, 0xF8FBA64C, 0xCF4AC71F, 0x0E4C76E1, 0x32B81FDE,
+0x79573F85, 0x3C52C23E, 0xD6236305, 0x4B69B09F, 0x296B3A59, 0xEB3C1475, 0xE504A98A, 0x17DF14D3,
+0x711156DD, 0x4C9CEEFC, 0xF5ED25CC, 0xD6B9E614, 0x173ACF9C, 0x89E168E2, 0xDE14EEF7, 0x844D006A,
+0x5A2FFF3C, 0xC885A1C3, 0x6831A527, 0x0DA1A1CD, 0x4030F565, 0x06213F83, 0x0C56DDC2, 0xB3D4C66C,
+0x62CD448F, 0x1AB8E960, 0x43C5A942, 0x01368190, 0x3B4C6703, 0x262EEA98, 0xCCDFFCF5, 0x63C0CF62,
+0xC0464DED, 0xECC42ED9, 0x79E3DA18, 0x1D7ED544, 0x7ECBE8B8, 0x25A08AEB, 0xF0B3FA01, 0xBE2A74C2,
+0x3D395E43, 0xA45561E7, 0x6756F3B5, 0xA42D0728, 0x77D31CD6, 0x7E4A8904, 0x3023F6BD, 0x03E75D20,
+0x0E9ECFC7, 0x978356DE, 0xBE1A9E63, 0xC95B5068, 0x9700A81D, 0x32F608D3, 0x2C849F7E, 0x4C7B1F64,
+0xB8D1A2C4, 0xFCCAA749, 0x99D1C5CF, 0xE183B506, 0x6A3A9702, 0xD6476BC1, 0x391E8627, 0x474A406C,
+0x01086080, 0xC6EAAC9E, 0x4CB1827B, 0x5A79B78C, 0x0A86008F, 0xFC269C8A, 0xB0496666, 0xDAE9E861,
+0xD329ADCB, 0xA1871288, 0x03286A5D, 0x3C861CF6, 0x23DFC0E1, 0x4C27FA3C, 0x52452C19, 0xCE33014B,
+0x5973B2C5, 0xEAC9DD1B, 0x25C51D78, 0x07D4E6A0, 0xA79CB1D3, 0xF697C6D5, 0x88FE9E75, 0x8094F70B,
+0xD3129926, 0xEBFF48EB, 0xA04E257C, 0x314E086B, 0x1F501809, 0x811E8D53, 0xE7B65EB8, 0xA456B321,
+0xEA4B99CB, 0x62CB3E99, 0xC686AEA5, 0xF4FE3DC8, 0x62BA74BE, 0xCD7EB4EA, 0x0D806C1A, 0xD1FF3E55,
+0x34824F71, 0x9F0F4365, 0xA87C0717, 0x5D2A4A36, 0x15A966DA, 0xB44CEB5C, 0x9C604B2A, 0xE38B459C,
+0xB0F08FEC, 0xB83A6F67, 0xABCF1E3B, 0xFBA4F984, 0x9317246D, 0x000B78C8, 0x58928934, 0x129E027B,
+0x139EC9C7, 0x22B3C060, 0xE311FA20, 0xC7B875C2, 0x58ECA16C, 0xABF65D79, 0xC7EEA4B3, 0x2FD8D5A1,
+0x7446218E, 0xF24B9927, 0x163E200C, 0xED4F6DD7, 0xC8B21CAF, 0x4B3CF442, 0x66AFBDD8, 0x63F38B78,
+0xF713C2EC, 0x5E6C60D9, 0x1713BA98, 0xBF6F3F00, 0xDD3ECAE3, 0x0527EEF4, 0x93D55CF3, 0x64D67F02,
+0x3F0F0C20, 0x2BFB55A7, 0x4FCCFC03, 0x7A254FE3, 0x8A6BBF5C, 0x6DC36FB3, 0x4BCCD86A, 0x9AD65B29,
+0xF185C50F, 0x431B046E, 0x6CB29454, 0xAA53DF41, 0xE158848E, 0xE3F1E6FD, 0xDD378909, 0xD4CB7842,
+0x001B967D, 0x2430FE21, 0x53FB9C0D, 0x0A7CC209, 0x718DADA0, 0x24F9AD42, 0x9242B035, 0xF6B2C49A,
+0xE6B6A873, 0xD05A3C3A, 0x192506BE, 0xD6CB884D, 0x29EA667F, 0xC4E7BB4A, 0x75BC5963, 0xDFEE55D6,
+0x3CE000CE, 0x40B8C236, 0x65C374D8, 0xB6ED54A4, 0xB016B931, 0x12055AD4, 0xE122E3E9, 0xE92DB1A7,
+0xB2E380B3, 0x4CA78270, 0x6A8C9D6A, 0xFAE2FA61, 0x22F6A054, 0xBD8176E9, 0x58E2303E, 0x274A8AE1,
+0x2DB4F7BC, 0xC97A5559, 0x6C568D27, 0xA5FE4C80, 0x8FA4F51C, 0x0C309F32, 0x0BB16F54, 0xD1D06881,
+0xD9489D58, 0x29738E14, 0x807813C8, 0x04E4D360, 0x6DADD03A, 0x2886C6FB, 0x44AD4505, 0x236CC5D2,
+0x247C406A, 0xD93A3E84, 0x00210EBE, 0x5E04B54C, 0x9B9F2787, 0xB2F9557F, 0x86940E7C, 0xD1F7D06A,
+0xEFAC25BE, 0x8163908D, 0x63EAA3C6, 0x9166F780, 0xBD72A21A, 0x00958F8D, 0x1DE6340A, 0xC5EE6A3F,
+0x21FE4062, 0xBBD475E0, 0x7D50826E, 0x096D58EC, 0xE1914D23, 0xC0459D14, 0x687C0D6A, 0x9E5DD759,
+0x71994A46, 0x60B0F118, 0x6BC82568, 0xF0AE494D, 0xBF6FCE02, 0x1B8AD847, 0x00C0D429, 0x4CF1D1E8,
+0x1C144B21, 0x847DD7F0, 0x02E04242, 0x63C0F8B1, 0x5B067970, 0x10176FCA, 0x9BBEDE95, 0xA031C3B2,
+0xC74B5443, 0x475B4856, 0xFE63F8D4, 0x2CA7F5AE, 0xA5FF12A1, 0x78CA5E1D, 0x835FFD39, 0xDDA87706,
+0xF46E8FEB, 0x8E1CE0C2, 0x1E27B355, 0x41136139, 0xC6A70E40, 0xF1736CA4, 0x05A0D574, 0xB2F7888D,
+0x4D07C65F, 0x15A600F0, 0xE9CDB213, 0xF2D6289A, 0x51A80630, 0x548DABC1, 0x1D842A18, 0x38E90861,
+0xB96DCB1E, 0x37EF0A33, 0x9E008745, 0xE6E3EF32, 0x7EA36649, 0x748F4ABF, 0x41A21C1F, 0x935E381E,
+0x5C7172DC, 0x77813AFF, 0xFFBC74FD, 0xF6EF2001, 0x98B0EBF1, 0x92D65404, 0x9B6E0D6D, 0x2A119293,
+0x1AC94A04, 0x65FCBE46, 0xC137C161, 0x2D047D4E, 0xD5814F95, 0xCA8B82BE, 0x70656260, 0x1BBE6C36,
+0x9EF8239A, 0x93B00361, 0xD329808B, 0x8DEDB2DE, 0x2C33A967, 0x9F8D8BE9, 0xEE653A27, 0xC9E803C9,
+0x8207C466, 0x77A0498F, 0xBCC2EA6B, 0x40CA46B8, 0x8B508549, 0x146DEA41, 0x175BD428, 0xA6691BD9,
+0x191D3DA0, 0x30BE01C9, 0x02BFFCF8, 0xA8CAAAB0, 0x54D5CB64, 0xA620CEFB, 0x71EE9D7D, 0x9B7DB05F,
+0x8D9C9183, 0x8003F93F, 0x8D61C5F6, 0xA1E30E98, 0x73BBF3F6, 0xD8C32C5F, 0x273C1DF2, 0x7362F197,
+0xEA7AD162, 0xBF512CEC, 0xFA06AD62, 0xF7C026EA, 0x39309E9F, 0x9666DE8D, 0x4CAFDF97, 0x60B57E27,
+0xFE98DC22, 0xD2CA2BE8, 0x879F0223, 0xFE84D109, 0xDDE8FE66, 0x11ABD48E, 0x0CEF2EA4, 0xC0D98D88,
+0x22F84B53, 0xA98C74B3, 0xE56FB3DB, 0x65788363, 0x766F40AC, 0x9CE91A44, 0xDD950BA0, 0x89EF6F0E,
+0xE5E6711F, 0x27F70CDA, 0x1605C897, 0xC2343CFA, 0x061CAD02, 0xADA76F86, 0xAC9FAB9D, 0xEA1534F7,
+0x67C2E4FB, 0xBF8326BB, 0xC3086846, 0x0FAD35A7, 0x96810504, 0x7DD2A1D6, 0xB9A3F3B2, 0x7EBB03F0,
+0xD93F4BA6, 0xCBA5AB7C, 0x0959C851, 0x481EB3BB, 0x75746291, 0x943AE051, 0x672E0C8C, 0xA50ED7EF,
+0xEE3EABC3, 0x5DB06C95, 0x20F47E17, 0xD0B3B1FC, 0x2E0B0CE4, 0x6B1617AC, 0x25982011, 0x19A94BBE,
+0xF74C8AAC, 0xD052F5C6, 0xAAF8DA70, 0x25D4405A, 0xDED653FA, 0x7D1915E4, 0x530A7F91, 0x4207698B,
+0x23B0E444, 0x1640D4FE, 0x478127F3, 0x7D0982F0, 0x27192B15, 0xF6BF3413, 0xE733A391, 0x3CA39D61,
+0x3722D9BB, 0xE7DD7F37, 0xBFAA51DF, 0x265685E5, 0xD4F34EB0, 0xF4E64826, 0x96B48926, 0x2183D6AA,
+0xC0044F11, 0x804E39F4, 0xA23F3AE2, 0xEC7E3DC7, 0xA8F234B8, 0x5B6356BC, 0x90DB4E29, 0xB012E937,
+0x5D88D89B, 0x84270CC0, 0x200F0D09, 0x74878657, 0xDE25B5C1, 0xC20E35C0, 0x8F325F6B, 0x7D4B64D9,
+0xFD836ED6, 0x83FD263B, 0x98418B5A, 0x252D0C9E, 0xE761C4D2, 0x2B1C24C2, 0x2CCC6940, 0x6F8CECFC,
+0x43DCC8C5, 0x37AA6681, 0x62BEF498, 0xC9BDFA47, 0x26C8AB99, 0x7684A332, 0x4484B877, 0xB015EC2B,
+0x2A95DB60, 0xD7A7044C, 0x6D2AB8E7, 0x88506421, 0xD0D93CC8, 0xFBE00118, 0x30221CC7, 0x1336FE5F,
+0x1783A8A8, 0x780381B9, 0xC8F57159, 0x8FB17067, 0x2BCD11BF, 0xB3E9F82C, 0x437A3742, 0xF45C5B84,
+0xCF87D938, 0xA4DD19C1, 0x2DF71583, 0x1D310D7A, 0x9499C0CC, 0xA69A7617, 0x1CE1074E, 0x1312E2FE,
+0x05C71DDF, 0xDCF5439B, 0xA4AFA54F, 0x0FC3E400, 0x35386A6F, 0x5DD706B0, 0x66C50222, 0x441A8FBA,
+0x3E6607DD, 0x67A1104E, 0xC33DF53C, 0x28F33A48, 0xA586238C, 0x68EB1C16, 0x9456693C, 0xD238C950,
+0x589804D7, 0x85A5FD8B, 0xADD5F152, 0x3D3A74F8, 0xA084CE1B, 0xFFFBDDAC, 0x8E32C073, 0xC1F7783C,
+0x8D00806E, 0x75628FE1, 0x3B4BF6A6, 0x486C5076, 0x920676EE, 0xBE614D98, 0xB6F0B871, 0xDCC097CE,
+0xD1A3A482, 0xF7D9A1A6, 0x80FDB0FF, 0x494E3984, 0x38DA26F4, 0xA2C28B48, 0x5B787230, 0xC6CAC8CF,
+0x663E3F7D, 0x608CED3E, 0x0E79F67F, 0xA5208267, 0xE595868F, 0x0A28A1CA, 0xF9AB22C7, 0x4B7A3CE0,
+0xD562C4D2, 0x915E13CE, 0x7F546353, 0x1001E2A1, 0x346E1B7D, 0x08A30D61, 0x4B140864, 0xF7E09CE8,
+0xB17101B1, 0xBDB10EF5, 0xF5F7167A, 0x25172C7A, 0x15709A1A, 0x5438D4DD, 0x4C8B4113, 0x0A57E1B6,
+0x106D32FF, 0xFFCA92FE, 0xDFA943DF, 0xC01C08E8, 0xE8A2983A, 0xAE895A2B, 0xA850D74C, 0x984F9D22,
+0xBD6F85C2, 0x8DF86E59, 0x30186AF3, 0x9B6DFAF7, 0x2B712296, 0xE5E7E29A, 0xE0E4B2D5, 0xD38BD076,
+0x5C73C637, 0x357D55BE, 0xA0B72355, 0xCF34F26F, 0xA424B44D, 0xBC84BDAE, 0xC14D3B7D, 0x9E47D557,
+0xCD1D295A, 0x054BA37C, 0x969A08B1, 0xF8721E0E, 0x9B00FB29, 0x40B11B39, 0x37C08E5F, 0xA2DF5285,
+0x767564C3, 0x6CE8E11F, 0x5D477067, 0x0442205A, 0x3BF39DFE, 0xC161C8B5, 0x463632F3, 0xB9EB8AB0,
+0x44679F93, 0xB0807648, 0xE9CA5611, 0x810AAFE7, 0xECF22A54, 0x2F54CC4B, 0xD240F72F, 0xF122EF43,
+0x744C3FB2, 0x48C7753B, 0x3BD6726A, 0x0653E525, 0xE18B746D, 0xDFDEB394, 0xDBB4A9AA, 0x2ECB72EA,
+0xC1221691, 0x99C56438, 0xCCB4958F, 0x97F34242, 0xFB6BD488, 0xDA24C3EB, 0x617D6A68, 0x0073DFC2,
+0x8AF3032B, 0xF53D3635, 0xF822643F, 0x79381900, 0x9719ED3A, 0xA8239DA8, 0xD0B017C0, 0xAB31A815,
+0xCE6003F0, 0x4643F80C, 0x016F36B1, 0xED982727, 0x12ECBF02, 0x0C47FBFE, 0x71E126E8, 0x023EC250,
+0x9F4B435D, 0xD374FC90, 0x0DBEC58E, 0x288DB609, 0xE4424AC9, 0x90AFF2CC, 0x5BE7617B, 0xB26A9A14,
+0xE49C56EC, 0x0F4DFD53, 0x9AB291CC, 0x30F888BA, 0x65402E6D, 0x776CC7A0, 0x14F78380, 0x6D218326,
+0xFE727596, 0xE8D1BE37, 0x9043B5F5, 0x7C27B997, 0x6695AEE5, 0xAADD34CA, 0xE8E23EDD, 0x1ED2641E,
+0xE4B98958, 0x1A863E73, 0x9B8118E1, 0x2686705F, 0x564075BC, 0xF010F113, 0xD9B4DB3B, 0x743E5F3B,
+0xA7BB8CDF, 0xF4C41436, 0x49626BFF, 0x3E0E28D8, 0x6D80911E, 0x6BC1CC28, 0xDD3276F2, 0xDBA28932,
+0xCF71E329, 0xBCC2CC5A, 0xC26C146C, 0x0F01CC99, 0xFA7924E2, 0x91FE78FD, 0xCD395BCD, 0xFA52C5A3,
+0xFE403EEA, 0xB7EDB459, 0xDAF2657C, 0xB27F6529, 0x74926D4B, 0x7DB3A732, 0xCD5EA28F, 0x27B94580,
+0xA581493D, 0x0F833C93, 0xA9F39125, 0x4245E34F, 0x3404BB50, 0x0D3AF47D, 0xADB0C9FF, 0x9A0D8F7C,
+0xDCD421FA, 0x107FD389, 0x47BF28B6, 0x8F7EE824, 0xA4ACADEB, 0xB68869B6, 0x97362D24, 0x4D822EB4,
+0xEFC2748F, 0x1B9DC420, 0xCC4DAD3A, 0x7B1875F9, 0xFB1C2325, 0x18CF25DD, 0x292278FD, 0x8C567661,
+0xB80C5547, 0x6FD8BEBB, 0x2AD4A0AC, 0x6C471937, 0x9EB6A7D9, 0xF4F581E2, 0x4C507665, 0x761D70CA,
+0x348C4804, 0x16DEEDB2, 0x4A19BDE6, 0x81B0ECCC, 0xA3A1AAC1, 0xE138C6FA, 0xB2E519C1, 0x1E45F128,
+0x77785922, 0x39D527E6, 0x00C11201, 0x26AC5381, 0xE2CD5E1B, 0x543C32E2, 0xD1072C48, 0xC079F5D4,
+0xFBA5B5E3, 0xD6642D02, 0xF4790BA5, 0x2C92C830, 0x4ED9B6A4, 0xE4980B8F, 0xDC5CEA8C, 0xCBD47D14,
+0xFB1360CF, 0xC8CD4523, 0x839CAE92, 0x01793853, 0x6354ACFD, 0x3BFFBA95, 0x6FD58D88, 0x4827B6F8,
+0x957260D2, 0x1A71CCB8, 0x9CA465AE, 0x01BDFA39, 0xF2BF3950, 0x991B7273, 0x0325EA9D, 0xD067C60A,
+0x3B67B50F, 0x08334C7C, 0xA38E9997, 0xAE824008, 0x4B21C839, 0x7494CA26, 0x20797448, 0xB50318ED,
+0x6E102584, 0xA60AD18C, 0x9B184804, 0x1D75CF78, 0xA3FD532A, 0xE71B25AE, 0x6D6E916C, 0x0B22691F,
+0x7307709F, 0xF58343DD, 0xB54FDE10, 0x0BE813DE, 0xE446F4A9, 0xDC8B529F, 0xF515EEC8, 0xAC673D76,
+0xF859D671, 0xDA2764E6, 0xC520FBC2, 0xB88DE771, 0x74889584, 0xE1F1C0C3, 0x66899572, 0x253E5671,
+0xD1C5FC48, 0x7D63CBDF, 0xB1D8738C, 0xC1C7D32B, 0x16F4C3B1, 0x9232C0A1, 0xF6FEB660, 0x300D5E75,
+0xCECF1B80, 0xC316B83C, 0xBBE44403, 0x96C1FA78, 0x3CB3ADF9, 0x1CA50FD3, 0x52489B06, 0x6201F0F3,
+0x6BA187EF, 0x58B97F9B, 0x833DC289, 0x4F485E32, 0xA3CDC2AB, 0x06BC6144, 0x9FF24B92, 0x392FB7AE,
+0x4C13A3D5, 0xFDDD1925, 0x88ECFD48, 0x5477C1E1, 0x3549E130, 0xE81967A5, 0xF6F40946, 0xC2CED3AD,
+0xE39A8316, 0x281506CC, 0x19C898AA, 0xE5839784, 0x2BD88542, 0x1F869E37, 0xBB18F74D, 0x15A91858,
+0x8C98EB42, 0xA4B0D47C, 0xA2B1F394, 0x10E50D03, 0x3F9BBC70, 0xDD4ACB93, 0x4F41DA9E, 0x9F016F82,
+0x1BB131CD, 0x107EA92F, 0x42A87593, 0x369AEE16, 0x3836465C, 0x9F1316A9, 0x5DB192EE, 0xF69B73CB,
+0x2106E6AA, 0x928CA87B, 0xE937F572, 0x1503CEDF, 0xC74E7473, 0x9A570676, 0xD23498DC, 0x1ECB9469,
+0x474FD95E, 0x7B49AACF, 0x5B32941F, 0x1975D341, 0x0B41FB79, 0x7A072DDB, 0x7FEEED48, 0x40DC0B84,
+0xF19492A7, 0xF09F3AA7, 0xB8EEE3B3, 0xB5EB92D9, 0xBA4FCFB3, 0x1A7AA2DA, 0xC9C2F3C4, 0x9F0A4E7A,
+0xB2B3CDD7, 0xDEEC0B40, 0xC3AA4D34, 0x6F64E563, 0xB768E9E9, 0x0514D621, 0x963DD80F, 0xF346ED2F,
+0x9B74FDCC, 0x30B93774, 0xB9F90C27, 0xA6502EE2, 0x2A340C44, 0x473A4FF2, 0x3F75A3CD, 0xD6B64314,
+0x639BDB0F, 0x3BBF3160, 0x020AA89C, 0x566DBE5C, 0x86BDCF88, 0x10C36BAD, 0x8438AE26, 0xBA8B8B70,
+0x67FEA635, 0xB6727758, 0x23C0CB1A, 0x484135CE, 0xB5B49AD1, 0xC3306C25, 0x1CB068B7, 0x99AC5720,
+0x6571AEE7, 0xB9DD9157, 0x31C668A0, 0x61BDB518, 0x894E1700, 0x6A9D128B, 0x9E15A011, 0x1832ECCB,
+0x62E339EC, 0x8AC7C389, 0xD4902DE5, 0xE6813995, 0xF5951667, 0xF1F1BB59, 0x61516EBD, 0xC6EF3828,
+0xB365FA40, 0x218FE0E4, 0x521362B5, 0xC9E013B7, 0xF175B9C2, 0x4D077EF1, 0x1209F0AB, 0x7E94C11F,
+0x6552235F, 0xF77608B4, 0x3799F1D9, 0x9F193425, 0xD492D52A, 0x5F1640A0, 0x0FCCFC01, 0xB1B6C4D1,
+0x0DAC7479, 0x5073702C, 0xF098288B, 0xA05EA575, 0x8EFA271F, 0x16C2155A, 0xE24FC62E, 0xB62AD581,
+0x4776B0D1, 0x95FECAFE, 0xEF0483D3, 0x5454CA30, 0x847A4629, 0x978AB39D, 0xEF7B5F09, 0xBA687E42,
+0x661FFD9B, 0x11DECBB2, 0xF6E7622F, 0xFCE79447, 0x21CAA875, 0x4814FE73, 0x5D8E99D9, 0x5E4616C6,
+0xE99817C9, 0x79EB1705, 0x4F20B8F7, 0x67B46E9C, 0x7D3794B7, 0xDB988296, 0x0A8A3C09, 0x53445BCB,
+0xCA09CC28, 0x905E774D, 0x7D30B5B8, 0xADF84E47, 0x72577741, 0x3DF34AAD, 0xEBECFEA8, 0x855BF662,
+0xD868EB2D, 0xABC7F767, 0xCD043289, 0xAE9300E6, 0x8B56E8E5, 0x7C50C3F8, 0x4D942E39, 0x1258CCCB,
+0xBC2321EA, 0xD30DBB53, 0x833E7185, 0x80BA6FF0, 0x621AA3A4, 0x7FBF6665, 0x431577B1, 0xE2C2F557,
+0xC8BB84CE, 0x69A03292, 0xB2458FF5, 0x6BBE17B0, 0x534F46F0, 0x56FB0373, 0x628203CB, 0x78E9492C,
+0x3598BF9B, 0x14B72D87, 0x68C33A31, 0x04FA7CBE, 0xE3F1A135, 0x180A64AC, 0xCC6D0BF2, 0x76801154,
+0x72A16DDF, 0xD027668F, 0xEED9766D, 0x364D327F, 0x32109E85, 0xBDA31DBB, 0xD9320B51, 0x143FB4B7,
+0xAB8055A1, 0x4A47186D, 0xD82CFFB2, 0x008D3FBA, 0xD1CA2FBB, 0xDB4325DE, 0x4819616B, 0xE3500D01,
+0x64E6B4AE, 0xC374CA24, 0xAD028CB4, 0x40E5DA81, 0x7C682267, 0x7CF2E259, 0x3E6A3074, 0xAB4B4449,
+0x3E6843EA, 0x48CAE6D3, 0x2371E9C8, 0x12769DCC, 0x5CE66916, 0x36C1F868, 0x516FD1DE, 0x2C839185,
+0xAAB5D018, 0xAE88FFF7, 0x77CA22FD, 0x8415BDCE, 0x67249005, 0x61976C4B, 0xDDB2C29A, 0x104D6CC9,
+0x32C27606, 0x77D83E11, 0x90E6D421, 0x805949E4, 0x0F22C4EC, 0x10A2F7EA, 0x9865C89F, 0x8976BF26,
+0xA4761377, 0x464FE9FD, 0xE9DDA0C3, 0x6505FEAA, 0x5A412BF6, 0x79E9842A, 0x68AC6198, 0xC58C6875,
+0x3507E5DE, 0xDD69753D, 0x4EF6E220, 0x1579A693, 0x711D03BC, 0x5B78C6ED, 0xEA165596, 0x1DAB9B2B,
+0x70A6B400, 0xBFB72B3E, 0x9348E007, 0x52887800, 0xD6A028F4, 0x9EA8BFA8, 0xFCCFA2D2, 0x104ECBAB,
+0x6C87CE5B, 0x9BC1B5AB, 0x1F96E4F9, 0x27335CAF, 0x42F759B6, 0x55A963DF, 0xA34B4D69, 0x04FF1B6F,
+0x7D7B0076, 0xF6E6366B, 0x012B9461, 0x359E4047, 0x9F451AD4, 0x86D78FAF, 0x26E998F2, 0x7963979B,
+0xEAAF7B0B, 0xC77E7A30, 0xD49B8365, 0x66EA8D3D, 0x1FA79780, 0x01ADD657, 0x8A05AED7, 0xCB2C7DD5,
+0xA867AC9B, 0x9D652AA7, 0x817B79A6, 0x57B0ABE9, 0x8A1A10BC, 0x6CDE2C3A, 0x45FC5799, 0xDBCF624A,
+0xCA115EDA, 0x3C0211C8, 0x620AD9B7, 0xFA69C5CF, 0x2A546642, 0x6BD3C086, 0x0ED57C32, 0x9996D9CC,
+0x8FA996B3, 0xA5D7004B, 0x7F64F5E5, 0x8E295C4E, 0x33B6EB7C, 0xC14805E5, 0xCC633917, 0xF0C330CD,
+0xB0BF1DDD, 0x4B49D854, 0x46E467FD, 0xA7C69D79, 0x2C6D17E5, 0xC22C11F1, 0x1B8B0C18, 0x894CDEDD,
+0xD17F669D, 0x13D3215C, 0x104769E6, 0x2ECDFE5E, 0x8438F1F1, 0x70281154, 0x765B8308, 0xE34D7B5E,
+0xD2856934, 0x80A44D91, 0xC7409836, 0xB3CF65F2, 0xED129DE2, 0x02ED9B5B, 0xD3756673, 0xEE5846C5,
+0x4C8264AB, 0x80EA4556, 0x0178F300, 0x306E4290, 0xCB9EF356, 0x376D9506, 0xA07201B5, 0x41EBE618,
+0xA8850AF8, 0xD89FCE71, 0xCEEA2638, 0x4F0F2477, 0x1872CE76, 0xDB03000D, 0xDE6E48CD, 0x20BE2FC2,
+0xE29E91C5, 0x18F45005, 0x5C80B913, 0x5094D73F, 0x88D530B7, 0x71B35F4A, 0x63DF1E7D, 0xA1E9449D,
+0x99B7E057, 0xB7446D93, 0xE776F329, 0x8EC37FC8, 0xA8B51E68, 0xE4E15611, 0xEB836485, 0xFDEC27EE,
+0xF40736BE, 0xE8731E68, 0x5A809563, 0x0C6CECAC, 0xA4FC8603, 0x0362490A, 0x9C55C759, 0x6FF9A9CE,
+0x884F9DB9, 0x85C3CBE5, 0x4B076414, 0x05146C1C, 0x23484A0A, 0xB5FC6C21, 0x539A9685, 0xAB06DDD0,
+0x595F12F7, 0xB48C4C9F, 0x45ECA53F, 0xD11B844F, 0x97BB58A5, 0x40C80C11, 0xE6F88DBF, 0x0AC62BF6,
+0x4C990DFB, 0xCDA4D064, 0x7D8C51D5, 0x8CBCDC70, 0xFD8144BF, 0x152A9C1A, 0xA1CBDEBA, 0x88C5163B,
+0xE80577A5, 0x15C04A59, 0x3363AACB, 0x0BD9CE52, 0x9DC1BAD4, 0x433BD764, 0x9B774BCF, 0x25C340A0,
+0xAED8B4D3, 0x791CC3D8, 0x00B7B196, 0x53E8747F, 0x9141A6C9, 0x9C50FAAD, 0x9F7BA73A, 0x4AB3FD88,
+0xF9847555, 0xB48E0B3C, 0xFEA1E69A, 0x43F2F13A, 0xB1AFBA53, 0x05BE1E3B, 0xA6D487DD, 0x4D27F402,
+0xEA107E20, 0xE7CD8C77, 0xA142993C, 0xD1E9E787, 0x1505E7ED, 0xA23B9DA7, 0xE19B3F0B, 0xBCA7FBB1,
+0xBD98ED63, 0xE67B395E, 0xBE2FD001, 0xCA541DA3, 0x38876D26, 0xD648DA98, 0xF6D271EC, 0x283256E1,
+0x3AF63766, 0x4C3DF100, 0x1D26B963, 0x25916616, 0x05BC79B5, 0x27926EFD, 0x439BE362, 0xB24E87FD,
+0xD496B3C0, 0x7EB531BB, 0xE11EE378, 0x5D95FA30, 0xFB1C64C4, 0xBEB6088A, 0xDF21D07A, 0x9DE0B326,
+0x6DF86DFF, 0x5312FB15, 0xA5AD0CFF, 0x75A94856, 0xCFA5106F, 0x5C711CE1, 0x097642E5, 0xCC746CFD,
+0x1AD0D174, 0xA63B5BC0, 0xFAAF994D, 0x9BA8711D, 0x99532E1A, 0xCD5A0512, 0x70D389F4, 0xF20B51CF,
+0x76144A0E, 0x4DBABA7E, 0xD1F2B55A, 0xFBC7B306, 0x5D8C32DE, 0x4800F83F, 0x5688DA82, 0x5FFDC75F,
+0xB24BF977, 0x7CBA2747, 0x9914C16D, 0xC23A8E8C, 0xFA16797C, 0x0EFC00EA, 0xF83FDADF, 0x8D54CE01,
+0xF3BC156C, 0xEB26A6A8, 0xE93D3FC8, 0x949A49CC, 0x42584A24, 0xA5480FD1, 0x39B9C7E5, 0x7E35FE71,
+0x2FD94014, 0xF458BD73, 0xCEBA0D7A, 0x08E95017, 0x85FBF157, 0xCC4243FB, 0x74E10AA1, 0x849E263A,
+0xFEB067E2, 0xF9AE9CDF, 0xBCF9A823, 0x2EB3FC61, 0x8D5AB353, 0x4A53E514, 0x50B7FD0E, 0x86CE6248,
+0xFF20EC40, 0x2AC7DA5B, 0x995C4C45, 0x4D24AE34, 0xE6FB05ED, 0x2D08F00F, 0x776D6308, 0x70E55715,
+0x3BD0AB57, 0x5238531F, 0x091EF2B1, 0x7B390811, 0x821AD649, 0xA2FACC00, 0xD60CD683, 0x5B0F7811,
+0x82FFA896, 0xCC9A626C, 0x9C8F9E85, 0xC2ABCBB9, 0x88CBDB00, 0xE8E20174, 0x93179896, 0xF9C55B8E,
+0x8D94C170, 0xABA59643, 0x7B59253E, 0x2628048C, 0xDCFA31F7, 0x0C28A263, 0xF93C79DE, 0x0BB5F7DE,
+0xADF2368A, 0x79386B6F, 0x06704B26, 0x87CB5616, 0x5BDE9721, 0xB2934199, 0xAA689C74, 0x7D16D96E,
+0xC7C7A546, 0x07309AE0, 0x4D4A0192, 0x682BDCA6, 0x62A5D518, 0x2E306E0F, 0x555D84F6, 0x290BACCF,
+0xB9E92ED4, 0xCD803429, 0xC4F6D7A5, 0x3F832E61, 0x9CD38A8D, 0xBD6CEBE9, 0x060E6A24, 0x8D3AD0AF,
+0x349E1D6E, 0xD8F27F61, 0x1B7CF9CC, 0x799930C4, 0x367A76EB, 0x03D26633, 0xCD0A1C68, 0x81803080,
+0xA869D370, 0xAFF14D76, 0xDFC56048, 0x8AE5EDAB, 0x2E21AF6E, 0x90B9C82A, 0x9C10C44E, 0x76324E7A,
+0x325382E1, 0xB49EB567, 0x15EDBDBF, 0xEE0F760C, 0x9F1F1ECD, 0xE8F6AD54, 0x5FBD81B6, 0x23838139,
+0xFA834BA8, 0xD83A3324, 0xF8543717, 0x01BE338B, 0xBE67E3EB, 0xA780E0F7, 0x665924DA, 0x3FE2DE1A,
+0x768548D5, 0x079BAD27, 0x25B20A05, 0xDC1BFDBE, 0xAC93937F, 0xAD8CFF54, 0x38D20861, 0xD1E6E311,
+0x95F6BB48, 0x897B82B9, 0x64080D75, 0xBB634026, 0x9F48821C, 0x9D903E1E, 0x4F2EB115, 0xCFD13D09,
+0xEEA0BA4D, 0x36C4D136, 0x2F8706AF, 0x01B732E4, 0x1B11BD62, 0xA0C20CA3, 0xC102C09D, 0xF9A11FEC,
+0x0A017394, 0xAFA083AC, 0xEF8F2C94, 0x60C385F6, 0x9EA5241B, 0x73B05202, 0x58CB8DA0, 0xA5C0CF86,
+0xB018C433, 0xEDCD5217, 0xD1C47D5B, 0x668FF345, 0x7E99D581, 0x045B0B87, 0x80633715, 0x635B76B8,
+0x63653BB2, 0xE4CA7731, 0x3DE005D2, 0xF3105BC8, 0x81C257CA, 0xBAA88696, 0xD39EADF3, 0x40A9E6E0,
+0x607CA7C8, 0x11C47969, 0x5B445BB0, 0x5F461A4D, 0x86703909, 0x66888BBE, 0x3F413BBE, 0x8FDEB28A,
+0x5D8B8119, 0xEB48A1A9, 0x1ABC1E7F, 0xEDFFEA88, 0xF283EA49, 0x330C08C4, 0xF41A858B, 0x4FFB40E7,
+0xDEEA4415, 0x71200F46, 0x058DEFED, 0x06ACDA8D, 0x52F2A73A, 0x1621572F, 0xF65EE68E, 0x220AF8CD,
+0xB6D48A7C, 0x82934217, 0x185A3CC6, 0x8A8572C7, 0xFB36BEE5, 0x0FA92AE3, 0x4F8C7846, 0xB967ACF0,
+0xE09E5CA4, 0xAEC89A5B, 0xB6028DD2, 0x756A771D, 0xBB57BD26, 0xAA00B76F, 0xD659E0DC, 0x16D6ADBF,
+0xCA3A329F, 0x5AAF37B2, 0x0F6767CD, 0x5A007C70, 0x3C1ACDEE, 0x2563BBA3, 0x97A6AD8A, 0x121BA303,
+0xB2AE7676, 0xFF4DE7A2, 0xE26CB1AB, 0x93500E42, 0x19B71765, 0x39C1ABC8, 0xF24C96AA, 0x16B5FD3E,
+0x5F43D275, 0xDF37293A, 0x08974B59, 0x0E618DAE, 0xB525D78D, 0x35D4BD7E, 0x0D6211B3, 0xC08F4F34,
+0x3D4123BC, 0xB5106EE2, 0x87184D47, 0x4EF76B46, 0xCC9C89CF, 0x525292F1, 0x0606651B, 0x01CF6EE8,
+0x661F7F3C, 0xCC632C5E, 0xFB4D2EF7, 0xD6FE1CD3, 0xECE1564D, 0xC0AFDB02, 0x774C0AA7, 0xA4A2207D,
+0x1BA6374D, 0xF30870C0, 0xD032DD5A, 0x3196D79D, 0x21EB9E1D, 0xECC6F3CE, 0xA71C1257, 0x28B23A0D,
+0xAA13C28F, 0x8E4BCA38, 0xFFF715C4, 0x32417EEC, 0x34CFD2AB, 0x65FDC94D, 0xFB484C0F, 0x4D77C908,
+0x53AE1414, 0x9209795B, 0xA3D6C15D, 0x6A970FDB, 0x6CC1A2BD, 0x1192924A, 0xBAA274CA, 0xAC1562D7,
+0xFDBD42AE, 0x50695AA8, 0x087CEC08, 0xB620FCBD, 0xD789351B, 0x0DBA8364, 0xB55783C1, 0x6C56D211,
+0x6DD76D60, 0xF7F3EC77, 0x08C08E12, 0xC44E5B93, 0xC96B5447, 0x9CED6C9C, 0xC887D405, 0x712398D5,
+0x4ACDE344, 0x5B5AD633, 0xA1D554AD, 0x703F864A, 0x4F9BB5D8, 0x62B7E024, 0x2A661BED, 0x5F6FF883,
+0x54164CAD, 0xA0B031B1, 0x44114DF4, 0x4253C7F1, 0x4354143A, 0x8E4289A7, 0x657FB50A, 0xB064170C,
+0xC4B5250A, 0x786B23EB, 0xECA633F7, 0xC352C0B4, 0x5500704D, 0x9B2E0B80, 0x150A24DF, 0x85A7781E,
+0xBD2050F5, 0x6B7A41EF, 0x69362B80, 0x4BC943DF, 0x09DDAD5F, 0x1407135A, 0x5E308986, 0x626AC480,
+0xC04CAC0C, 0x32C05EF2, 0xBFDEB6AB, 0x189E71BA, 0x5EA97F3D, 0xCDDFE2A6, 0xFE72D2F7, 0x63DD8831,
+0x500F53B6, 0x15036D15, 0x0103B9E9, 0x9E910004, 0xBC4E06DE, 0xE25A42B3, 0x4358B319, 0xEDF10CA3,
+0x580D1FDC, 0xFA8BB739, 0xF695FCD0, 0x390B1AEB, 0x9702FF90, 0xECD02CD2, 0x11D6230D, 0x6A58EA09,
+0x9C351CC1, 0xD7D18053, 0x0AB51A28, 0xE5805783, 0xF2036021, 0x1D6A258A, 0x148C8C08, 0xE34EC55D,
+0xED8F3628, 0x195B15E7, 0x5D0584AB, 0x585486C0, 0x332DD658, 0x8362A713, 0xEA8187C0, 0x6A14D708,
+0xB7C2F3AB, 0x5066A4AC, 0x36145A8C, 0xAAA63211, 0xDACE0D61, 0x0AF47EF2, 0xC8966F41, 0x16693F5F,
+0x4BA3A736, 0x40821E9F, 0x4C6211B0, 0xE6681EBE, 0x54A5D106, 0xB58F4FFE, 0x1062A2DF, 0x868BA08F,
+0x0366B4D5, 0x9500BE02, 0xB6677BCE, 0xE0C0DE04, 0x334DEEA2, 0x8A220289, 0x18B5EBB2, 0x3F108345,
+0x9EB89F89, 0xF58324E6, 0xFA677E76, 0x65E69428, 0x810C5C26, 0xACA01CFF, 0x4B644352, 0x8931A03C,
+0x4BBE4529, 0x20D9E61B, 0x3C7CC77E, 0x5F4D512F, 0xCBF07D04, 0x7293B08E, 0xC7A4046D, 0x9D96BDE5,
+0xE052CFDF, 0x4DBE66CE, 0x1A5ACD1E, 0xC3CE530D, 0xA594C78D, 0x1007B777, 0xCAB562A8, 0xE8BAF79E,
+0xB36B8DC7, 0x9514F8DB, 0x45EA8B0B, 0x561204D2, 0xBF004FFA, 0x464773A1, 0xFE666547, 0x3137E4CD,
+0x8BAE0AEF, 0x9AD966EB, 0xE7D97FFB, 0x37657419, 0x156298D2, 0x64EB79F1, 0x5D972BA5, 0x63CCB91B,
+0x04CE3EBE, 0xD96B9CD4, 0x5950FF01, 0xC727DB49, 0xE248C51E, 0x4320E39D, 0x9F761327, 0xA7FB23FB,
+0x75BD73C6, 0x75785734, 0xA2CCC66A, 0xE5468EDE, 0x97E57767, 0x0EAEF9DF, 0xCB5E49B2, 0x14EFCEB8,
+0x1A5768D2, 0x8BEF78FD, 0x2E8A0743, 0xFE41BC5B, 0x33A5A80F, 0xD0B5590B, 0x0A092B7A, 0x00AF6E21,
+0xBC990553, 0xDCE2CDEE, 0xD300BA6E, 0x237CF6E8, 0x8A137B26, 0x38D1A6CF, 0x63E7EFE7, 0x41F506CF,
+0xF234E448, 0x18A90D68, 0xF068C7BC, 0x8446F6CF, 0xE40DD4AD, 0x409E78B4, 0xBA36F537, 0xD1DA9CEE,
+0xF3BF8A3E, 0x72F65B93, 0x2B5400BE, 0xE498C426, 0x52497A2F, 0x641F746F, 0x3809F2A9, 0x87FCFDD2,
+0x777AD026, 0x2C0DC6F5, 0x2662A6E2, 0xA58FA2F7, 0x303200DB, 0xBB8226B3, 0x706FAAB7, 0x7E06C32D,
+0xF013431F, 0x26FE685C, 0x368AF941, 0xF4E1BCA7, 0x4C8A8526, 0xE5A83710, 0xD9CE8326, 0x2D845B62,
+0x6E476F69, 0x5243ED4A, 0xA74C81A9, 0xD60C73E7, 0x601D5A02, 0x0F05B26B, 0x43275EAC, 0x0549C980,
+0xEAEDAC80, 0x7571CEE4, 0x269DD440, 0xD3747FDA, 0x5FEE456C, 0x445C01F2, 0xCADF2A86, 0x272798C8,
+0x4532F82D, 0xEE6AF7F5, 0x0F9C491E, 0xB828B668, 0x56FB0D6A, 0xBC4D625C, 0x12E77CF0, 0xA9738DAA,
+0xED7D5A30, 0x59DA6490, 0x68D6EE66, 0xD62E299E, 0x4DC3254B, 0x4BEE0FEC, 0x52C6BAB8, 0xAF1BD16C,
+0x7086FAB3, 0xB3481E53, 0xBC18B2CB, 0xD3D533EC, 0xB6FBEE34, 0xFB82F89C, 0x1FEA1FE6, 0xCAB40885,
+0xCD846D6F, 0x5D6759E6, 0xD9737A2F, 0x142F6D40, 0xD0921A13, 0x990A406C, 0x605F82F7, 0xDBC17117,
+0x19789C1F, 0xF54229D8, 0x5D950FF4, 0x414E6435, 0xD41FBCC2, 0x25DB5DEA, 0x5EA5009E, 0x3704A31B,
+0x146E6EC4, 0x3DF4EC4B, 0x0481EBED, 0x5F12AE08, 0x3EADA6FD, 0x021D6D85, 0x678F9767, 0x68245F46,
+0xA2DDE9C0, 0xDA702635, 0x91ED9217, 0xCC5D7F0D, 0x39E20964, 0xC2C56B93, 0x3C57FA4C, 0x72F06DCD,
+0x6E933A73, 0x5C3CA86D, 0xF52A91AA, 0x039D4CB8, 0x29FECF87, 0x346124FB, 0xE973E41A, 0x7AE39FC5,
+0x5F5678C6, 0xF562FBFF, 0x6E045D41, 0xCF94047D, 0x605C3142, 0x6B1B80F5, 0x95F38B66, 0x26F3B529,
+0xFBB7D9F4, 0xCBDE6263, 0xA522CDF3, 0xD8B8F090, 0x34F4AD75, 0x81E906C3, 0x6CF665A9, 0xCBB7B106,
+0xDD699C28, 0x595F187C, 0xBF3202A2, 0x7A8B23D2, 0xD49908ED, 0x92D18B5B, 0x0D1E69FC, 0x8467D68C,
+0x87C14859, 0xFE5B0644, 0xB3F39A4A, 0xC25A118C, 0xD396669F, 0x72E8D932, 0x3E042BC6, 0xB0E72866,
+0x1C5855CB, 0xF29113FF, 0x07EFC126, 0x053586C5, 0x9CC4B7F9, 0x59639064, 0x31F672E6, 0x1307B18F,
+0x817BF93F, 0xC8CC6571, 0x1F8DDF0A, 0x5213FF33, 0x0F71BD62, 0xEDEC0BFC, 0x1ACB3727, 0x7AEE5A8D,
+0xADAE7ACD, 0x9F2ECA39, 0x8C966442, 0x62038E42, 0xE6A056B0, 0xB029AE5C, 0x6AE676A9, 0x0F40356D,
+0xC9621482, 0xEC2AE761, 0x72AC0603, 0x8DAC2939, 0x5A3A79D6, 0x12EF7853, 0x234E8183, 0x56CF6F12,
+0xA4575F6B, 0x6A363BD4, 0x7765D227, 0xA38BF5DC, 0x473A4C99, 0xF713EA5C, 0x12424B68, 0x7AF0B4C1,
+0x5789A20A, 0x43B059C5, 0xA0B1BBB5, 0x2DCC64B9, 0xB12C9C40, 0x98AC9721, 0xF150A076, 0xCE3284EA,
+0xE22E8713, 0x44DCC73B, 0xB258FD18, 0x76A8557B, 0x9B41C551, 0xB5B02D40, 0x6C3FD7D3, 0xC28406E4,
+0x4F407B7E, 0x3134DA87, 0x393CCCB0, 0xD7CEEC14, 0xEF8BA0DE, 0x7F3F98A8, 0x857D6B98, 0x7752E582,
+0xA6F6AD7B, 0xBB398679, 0xDA7B6330, 0x4EF42E74, 0x6913C527, 0x4499F129, 0xB00D31B6, 0xE802A22C,
+0x1D4E90EB, 0xC6118115, 0xDDB1373D, 0x034B9F18, 0xA67AAA85, 0x7F80A9D2, 0x80B5A0B4, 0xA1C4B10A,
+0x25E2B239, 0xACECE5B6, 0xEE7FCF72, 0x43EE8CB8, 0x246D8D98, 0x477483BD, 0x03FB8D38, 0xB2DCFB5A,
+0x27A5E59A, 0x67F7D724, 0xBE2A71D6, 0xAFA92B70, 0x56F296E4, 0x3B1101DE, 0x97C99E26, 0xE35A5800,
+0x603A02FD, 0x95AABC8B, 0x32B6DF70, 0x9FFC20AE, 0x069298AD, 0x43014F3F, 0x90AE1CC6, 0x657FABF0,
+0xD06D082D, 0xAD5F170B, 0xD3BC0015, 0xC984429E, 0x498C4890, 0x2F0BFEC1, 0xEC7596A1, 0xDD2B18CE,
+0x8ACB3D47, 0x0D337700, 0xD7BFF3EF, 0xF9860290, 0x00DBB75B, 0x9A104CA9, 0xB6E78208, 0xFE4ADFA5,
+0x5304EF35, 0x99A973AC, 0xCFDEEF3D, 0x4934140C, 0x155E8140, 0x19259F18, 0xA309DE73, 0x3DDA5AF8,
+0x57B56BF0, 0x3C45EE9C, 0x96898F2F, 0xBF8B07C9, 0x33E0D964, 0x7FC405B2, 0x13C31843, 0xB681206B,
+0x18AA19D4, 0x2C12C45A, 0x67DF8C56, 0x6C56B948, 0x334DB6D7, 0x9ECCA910, 0x1C8EC4FD, 0x778B60D0,
+0x8BC95C4A, 0x5AEA5FC4, 0xABA57E0A, 0x3FB4B4AE, 0x466A33D2, 0x4F1EDC0E, 0xE79CD38F, 0x3EF2AE22,
+0x1E763C96, 0x9BA605DF, 0x184CE2BF, 0x072B35C9, 0xED034BEC, 0x5103DF9B, 0x8A696929, 0x89A719FC,
+0x5485D93F, 0x06998E3D, 0x079ABA58, 0x5D5B1485, 0xCD88676A, 0x7A62CE41, 0x84201668, 0x89D4E64C,
+0xC95B0807, 0x9C33189C, 0x529A569D, 0x4B8DEB32, 0xF64D71AA, 0x53B1495D, 0x3259EC76, 0x05A9C520,
+0x653C5C43, 0xF66DD6EE, 0x9BAA0145, 0xBBD5665A, 0xD89F98DE, 0xF53C10D6, 0x0F66F8C0, 0x7BBE623D,
+0xFB985162, 0xD2B37100, 0xA9859043, 0x1F4A8D75, 0xF9931C9E, 0x2FACF6F9, 0x67723215, 0x6D3B7CE8,
+0x0AC9F1A9, 0xF6A81262, 0x11F88794, 0x5D2BEEB5, 0x866B0138, 0xF4F5CC81, 0xF977E316, 0x45F7E272,
+0xC6D2D58D, 0xBAF91C1A, 0x68AF6CD0, 0x0A33E6DE, 0xCE799DB5, 0x3FE00B40, 0x1A56FF6A, 0x561F49C0,
+0xF2E2E217, 0xFB7DF2C8, 0x3085180A, 0x1C281CD9, 0x48F67AC0, 0x5282DF34, 0xB1A8D190, 0x33C7C866,
+0x276F1CE5, 0x58F8A662, 0xE6DB35DC, 0x64D64D2D, 0x3D65AD6D, 0x53392EEE, 0xF6D8A189, 0xD92EB9FF,
+0x7DD09CE1, 0xE7F38B74, 0x9E5F0E31, 0x474366D0, 0x4A6728A4, 0x9A49F368, 0x3BBD7A84, 0x36638650,
+0xF7480052, 0xE1CF0E06, 0xB75F5BA6, 0xB090F509, 0xE7B7A220, 0x29662FE3, 0x907B44C5, 0xF5992E6C,
+0x477A5C30, 0xCAA0670E, 0xE75FEE1C, 0x3CA21577, 0x61DE8EB7, 0x9D8C8FCB, 0x4B0F8F68, 0x6DA5E0D4,
+0x259BA104, 0x0B4A7253, 0xE35AEBE5, 0xE3FB888E, 0x8E86D4B1, 0x26E9DA90, 0x35DCF63A, 0x34B87808,
+0xE266B7EF, 0x137045DC, 0x64975E4E, 0xA4CD42D2, 0x5AA05984, 0xE00A716D, 0x8A2211EE, 0xFCF1C4FB,
+0xC1B17FAD, 0x81062347, 0x7BDD4C74, 0xF5FE33B2, 0xAFF702FD, 0x6AF3C91A, 0xAE5E4ADB, 0xA2F97D74,
+0x756E272B, 0x6324061F, 0x265E2BEE, 0x2187D372, 0xF2A55D69, 0xE056A543, 0x7409B5B0, 0x4E4634E4,
+0x46AC4271, 0xE2F2A30B, 0x0B792AA7, 0x6043B50F, 0x3427703E, 0x8C5CBBCC, 0x7CD96194, 0x28CE8582,
+0x51A78418, 0xE2EC6444, 0x3206C654, 0x0260DD8A, 0xF4B65E46, 0x70AD8BD0, 0xE41CBF32, 0x6640316A,
+0x5D82F3E3, 0x01856BB7, 0x9F896BF3, 0x4274F376, 0x83ABFB53, 0x0BE9857A, 0xB3BC7EC0, 0xF49E75CE,
+0xE4AB4922, 0x59AECB9E, 0x9E77ED89, 0x716D7511, 0x725DCCBC, 0xF63B8262, 0xB7064215, 0xBF804604,
+0x7FB8BFF7, 0xD567921C, 0xF2243011, 0x6A491D6E, 0x09901253, 0x91D53E10, 0x769EAA34, 0x720A19A3,
+0xADED157E, 0xAE095C6D, 0x08C04ECA, 0x026A163F, 0xBAF30C7C, 0xBA584E3D, 0x21F2A751, 0x33FBAF10,
+0xF61F0F49, 0x3AD71B28, 0x62A6E445, 0x32ED383F, 0xA0D0DA78, 0x5B5F4477, 0x7E881CEE, 0x4BBBF84C,
+0x9F325980, 0xF1034A69, 0xCF34F889, 0x58AE9650, 0x0EB7A5D2, 0xB719031C, 0x832DEC40, 0x4DA847B6,
+0xA49666C5, 0x978BE654, 0x136C4354, 0xC98D290A, 0xB2E6E132, 0xB966E5AF, 0xB0EA90A6, 0xF04CE33D,
+0xAD1CC155, 0xAAD1353A, 0x65509624, 0x7170FC04, 0xE8358CEA, 0x08C8ACE3, 0xB8B87087, 0xD1B1BBF3,
+0xEFF2B4DA, 0xBE63B9E6, 0x0153DDF9, 0x191504CC, 0x105F1BCE, 0x386F0258, 0x46BE65F8, 0xD5F3A309,
+0xE83AEB5D, 0x6314CB45, 0x75B8A290, 0x5E71DC8A, 0xDF0D5F24, 0x0EB15029, 0x904744A2, 0xDE55C0DF,
+0x41DEF0DF, 0x42D626E8, 0x4FDA3985, 0x53B8A703, 0x139F555E, 0x0CDB305C, 0xD1B5512E, 0x3B2BDD8E,
+0xBBC06CA9, 0x398AE957, 0x145DE176, 0x6D638E90, 0xDD058DAC, 0xF967A057, 0x16FDE84F, 0x2EE1843D,
+0x8525BF55, 0xF63C303F, 0xF085141E, 0xC60C0357, 0x4822A399, 0x8E22F85E, 0xB64E76A5, 0xFA532A10,
+0x6038FAA9, 0x0DE94EF3, 0x307A22B7, 0x2CE70E62, 0xAA872D94, 0x2AD90839, 0x1CBF2807, 0xAB5C4433,
+0x2911B633, 0x3BCCC43A, 0x9140970D, 0xE14091D5, 0xF957DF19, 0x0A399824, 0xD28711C6, 0x02ACF788,
+0x17765EAF, 0x95EE40D5, 0xB368C9A6, 0x3BD9749D, 0x0EF427C0, 0x2ED1FFC4, 0x84709FC1, 0x0B081E2C,
+0x904CADD6, 0x09734067, 0xD5DEDE37, 0xDB7F9E9C, 0x52FA37EB, 0xEE5E4A48, 0xE294F915, 0xAF86C7C5,
+0x4049BB87, 0x654956C6, 0xFDED4C81, 0x0DA7488A, 0x43AD3D5E, 0x45DB415B, 0x8CBF2F05, 0xF91B1EC1,
+0x508DDB95, 0xCE0FAE2A, 0xD78EB905, 0x75E1224D, 0x464A8C3E, 0xA90B1266, 0x48A2C38C, 0x82583B9E,
+0x9D40057D, 0x01B79A6E, 0xEBE06B80, 0xCEB96A8E, 0x74B8603F, 0x29D6B9DE, 0x08F5FC16, 0x0C30B487,
+0x788171EC, 0x1C991899, 0xD62D9616, 0xDDEE30B0, 0xA25A5833, 0x4D57E119, 0x0E56A74D, 0x9916C3FD,
+0x033D32A0, 0x00390D76, 0x249AF587, 0x3D2AEB81, 0x6468E1A6, 0x0BE04BBC, 0x5C3109F9, 0x22958E27,
+0x42E810A1, 0xC6D4847B, 0xB6C02C89, 0xE5CBF737, 0xF729C7B2, 0x9605BB78, 0x36232D99, 0x04309787,
+0xB0167FEF, 0x79A1E4D7, 0xCEE77FC8, 0x792781B8, 0x0AD9DD2E, 0x2F0BF688, 0x58236486, 0x9A0104E5,
+0xCF127002, 0x9A80047B, 0xFC0A813C, 0x54ED2506, 0x7D5E306A, 0x0AC78C93, 0x6C54A584, 0x30DB9860,
+0xBA1CBD59, 0x9C5249E4, 0x9E2096A1, 0xC6E72399, 0x78FB8746, 0x89254CB5, 0x3FC8AFF8, 0x18C420B8,
+0x3ED6468E, 0x8826E453, 0x8F6375A4, 0x17B8E485, 0xDC1A0760, 0xB0A2E7F6, 0x3ED2BCE1, 0x05802B1E,
+0xBFE7F96E, 0x855972E2, 0xF30F2AAF, 0xEC3A888E, 0x463254C4, 0xBD14C53A, 0xABE2F44D, 0xEE00EAFE,
+0x462347F5, 0xB71E0440, 0xCF27477E, 0x4C5C76E5, 0xAAF3AAAB, 0x4DDF3EC8, 0xE6D3E296, 0x1716902D,
+0x200D1D75, 0x775BD8B1, 0xC8274D6E, 0x564DE0C0, 0xA9A7F44A, 0xDF45AFF6, 0x986687B9, 0x73F798C8,
+0xC69460C1, 0xA8AD8414, 0xDF83B455, 0x15422608, 0xE6EF90F4, 0x7E4ED88B, 0x02F9D5AC, 0xF6AEC31C,
+0x465C62BD, 0x5BB98A04, 0x2A5FEF48, 0x18797684, 0xE07BDB83, 0x4B8D6B05, 0xF3385384, 0x438245E9,
+0xC8CBF9F5, 0x095B1BF7, 0x9DC143F3, 0xE21C0266, 0x4F3CFAD4, 0x175222E4, 0x79E7139E, 0x4CA7CA07,
+0x63970FB0, 0x8B97EA27, 0x258F2F38, 0x4AA2BE56, 0x1D032F62, 0xE4B0F912, 0xFD877EF5, 0x9F37702E,
+0x6A377731, 0xC79336DA, 0xAD85FEF3, 0xB73AA4BF, 0x8F9D1F07, 0x1157C202, 0x20A07756, 0xD645DAFE,
+0x4ABC13BD, 0x48BE449B, 0xCC8F6CC2, 0x0F156230, 0x0AE6BC9F, 0x40C473C9, 0xEB5CC8E6, 0xEF3D55DC,
+0xFE7CD47B, 0x46C4D6B9, 0x2A2F6F9D, 0x100AF3ED, 0x4B43D383, 0xD254CEB0, 0xE99CE80A, 0x7C4DFE30,
+0xF32F655F, 0x958C3873, 0x559A02D1, 0xEAF08638, 0xAE3CE5C1, 0xF2B8E930, 0x0981EC57, 0xEA3321A2,
+0xD91BCFB1, 0xADB53844, 0x7EF3CB47, 0x64253867, 0x7BF10E88, 0x6B82CB42, 0xF403637A, 0x09A814EF,
+0x655A69DC, 0x70A7390A, 0x3B20620A, 0x1A9C0BC9, 0x21E17C10, 0xF3BF1D19, 0x7C07CE57, 0xFD01A385,
+0x8C8227AF, 0xB8D843EE, 0x69C0814A, 0x241E612A, 0xD936C4D9, 0x9F0EA690, 0x3A75E5E7, 0x0A52D7C5,
+0xF3C3285E, 0x2C429F8B, 0x25B7E534, 0x94BE83EF, 0xD073CA57, 0xE00D16F8, 0xBF210C52, 0xFFCB4F98,
+0xDAB6457C, 0x96ACEA53, 0xB01DFF20, 0x0FA8F2B9, 0x19FF426F, 0x74AAF4C5, 0x9F8E5CC7, 0xD8689BCD,
+0x352C0A7B, 0x9E61F62E, 0xC344CF08, 0x05ED1CC1, 0x0319ED10, 0xBF5C7663, 0x03633BAA, 0xCB996D54,
+0x324713F8, 0x6F9E2486, 0xFC949461, 0x944BAEBF, 0x76FAE5EB, 0x93DFFE34, 0x3B4CA6C0, 0x1C190D12,
+0x0FA8A697, 0xF4E928F6, 0x8A3BAE15, 0x7C803B00, 0x659355C6, 0x5C319379, 0x2DA90B42, 0xC2CE3772,
+0xFEB1FA7A, 0xC665B9CA, 0x78CFE8FD, 0xDDC68CDA, 0xC9813C31, 0x86B0EE94, 0x559224B3, 0xE35E37D5,
+0x2CB72CB3, 0x47E2FBAE, 0xD7AF8345, 0x827D1A90, 0xCBF99D2F, 0x6A597942, 0x1243A578, 0xAA481501,
+0xFF4D4D92, 0x2B29AC0F, 0x61C86C40, 0xA2F773DC, 0x41693D10, 0xD803282B, 0x16021C04, 0x1549CA57,
+0x0229CDBD, 0xF669ABE0, 0xBD010619, 0x79D9B2DB, 0xF5584BC6, 0xC70F2003, 0x7EBE840A, 0x224209D3,
+0x3440654D, 0xE5EB5CDA, 0xE06A9972, 0xCEF893DA, 0xC3202594, 0xF50D14AE, 0x971E16ED, 0x22DDA285,
+0xF59C39DB, 0x42091D77, 0x3FCC542C, 0xBE140DF3, 0xEB1FC088, 0x0219FE8C, 0xCC959BA7, 0xE1927150,
+0x8F77171A, 0x6076DCA7, 0x223A9DD4, 0xC10004A2, 0xA8CC8F8A, 0xC7BBD9E2, 0x292FF0B3, 0x3CF05F53,
+0x432E3A80, 0x78060171, 0x77B93C12, 0xAED35595, 0x6B4A0FB2, 0x3ABEE02E, 0x714BE2AA, 0xDC7ECBEB,
+0x74518E5C, 0x97DC698F, 0xB0E72360, 0x24058317, 0xEDADAC9F, 0x904771D2, 0xF4064759, 0x6FDAE38C,
+0x25885713, 0x5BAF81A4, 0x5475DDC8, 0xFB766281, 0xF9CE1986, 0xB94E6266, 0x188A0B09, 0x1F6A1530,
+0x8A95C0DD, 0x71C80045, 0xAF6CDDF5, 0x0CB0AEE0, 0xD6E655AB, 0xABDC800C, 0x26FC6082, 0x7501C8AE,
+0xBA5FC11E, 0x5DDCF831, 0x9772E813, 0xF08A0729, 0x020F3881, 0xD61B7499, 0x76D9F6EC, 0xF7E1BD24,
+0xBD9D8D3D, 0xD787014D, 0x3EA45869, 0x1DAFEBEA, 0xA25B605F, 0xD848C37F, 0xB6BD37A2, 0xC7101088,
+0xA737759A, 0x2D47DC54, 0xD399F473, 0x38DDFCF9, 0x40B1D36B, 0x045EBBF4, 0xFD0B3E1B, 0xCBB3EA00,
+0x8F5EB4C5, 0x88584C1C, 0x5886693F, 0xD2D4C16E, 0x6507FDB7, 0x376038A9, 0x6CDD577D, 0xDBBB59F3,
+0xE387720C, 0x1AD8E6A8, 0x5CAADEAB, 0x6DF010C7, 0x4ED2352B, 0x7DD9172B, 0x37742C38, 0x6C48E9A8,
+0xB8336421, 0x0318D0C7, 0x36C2F3A9, 0x11A9CD37, 0x2F636569, 0xF0C9A5F5, 0x623532DD, 0x4A220AB3,
+0xA032B835, 0xE1722D2E, 0x9B7ABC9B, 0x3B3A92C9, 0xC0A574FB, 0x143FE19D, 0x4E5B3D71, 0x5B84AC3E,
+0x335C0651, 0x0E44F3A3, 0x98BF2418, 0x0C6854D1, 0xA371D3DF, 0x7CB41A2F, 0x4676F600, 0x03B34E6B,
+0xFA0E24CF, 0xDC214128, 0xEEF4E3DB, 0xD93A5A42, 0xC536C5A1, 0x041C8E9F, 0x4C17366F, 0x967ED6B7,
+0x05D23D96, 0x88A7A74F, 0xC303EC9F, 0x90952997, 0x3DF4F34A, 0x62A41DF6, 0x9B7D1B0C, 0x6D93185C,
+0x057B02FF, 0x8314313B, 0xE237C043, 0xE3EF515D, 0x6D92F7EF, 0x928D3492, 0x87E5F6E2, 0xA275C377,
+0x0F69DAB3, 0xB9E42C7A, 0x97A6818A, 0x66711CFD, 0x6E71F9B6, 0xB650C1CD, 0x03F0EBDC, 0x2D470570,
+0xC6176F85, 0x6F99BA58, 0x2E8954F1, 0xF235E05D, 0x500B8569, 0x1A60BAAC, 0x17480761, 0x4E739B29,
+0x83805C9E, 0x04FB73EB, 0x386BAC60, 0x2C30A9AC, 0xA61FD69C, 0xF2FD11C2, 0x1E4D0A9C, 0x4B150FBA,
+0xD6DAAD47, 0xCD68F833, 0x0BD1DC69, 0x1775B2C3, 0xF89AD984, 0x7DD919CA, 0x55C8393D, 0xFA0D6C89,
+0x056FEB00, 0xFD749C86, 0x76E78D17, 0xCF6849B4, 0x997E1E0F, 0x2F1432AB, 0x2A51F0D6, 0xC3C336F1,
+0xADAC6C96, 0xB2A0CDD7, 0xE9C58D29, 0x98363C1A, 0x6485160A, 0x89E944ED, 0x405DAFD4, 0x9B2FEF8A,
+0x0F6D078A, 0x7E98BEDB, 0x3DB4D2CE, 0x3A9F88CA, 0x31407639, 0x1336543F, 0x8BD2CB36, 0xB12D71C0,
+0xC9FD5D93, 0xB7BAADCA, 0xC4B0AE31, 0xEE3358AE, 0xBC402483, 0x68E28511, 0xE18BCD67, 0x79A0524A,
+0xB05A6CC3, 0x055231D7, 0x571382B1, 0x5C5BDB89, 0xDED25235, 0x5C04A35E, 0xC34481B1, 0x921D3340,
+0xE1573CA5, 0xE037C597, 0xD7BE44F6, 0xC042AF60, 0x331CD227, 0x01975B29, 0x8800694B, 0xBD7A811D,
+0x5CFAD1AA, 0xD45EF65C, 0xF0475186, 0xFC1B73BA, 0x66EC1769, 0x80C10C40, 0x5FA365B6, 0x6C92286F,
+0xCC907E28, 0x3C173165, 0x2C6F7E77, 0x10E65B92, 0x1852B2D5, 0x24D1EE4D, 0xFA1E768F, 0xCD7FADFA,
+0xEB3FF0E5, 0xAD39104F, 0x8ED0778A, 0x6CE224A3, 0xB0136806, 0x3FB7C18F, 0x9D49F360, 0xC8BD5586,
+0x9F1369BE, 0x4E2D2C7C, 0x0860FA04, 0x51CB79E7, 0x4CF9BF3F, 0x89AE0951, 0x824F4298, 0x49B5B57C,
+0x2920ED07, 0xDE787E04, 0x58F5CE5D, 0x1232A7A9, 0x5E7DA22A, 0x35468393, 0x57D8A35F, 0x06CF9DE0,
+0xDBF4BD8F, 0x6B93DCF7, 0x986A3B9E, 0xDEF2B62D, 0x948162B1, 0x42709ACE, 0xB15B758C, 0x4E63DA36,
+0x72A785EE, 0xE911BD1C, 0x507BDACD, 0x632BB2BE, 0xA134FA3A, 0x0DB26965, 0x1174905F, 0xE0E49B10,
+0x23F6AA31, 0x06129680, 0xAE0943A3, 0x140D84ED, 0xF1C15B0C, 0x20699F6A, 0x4AB9B363, 0xBCE94645,
+0x877CC4D5, 0xDBB033CB, 0x0F63A6EA, 0xC65FD539, 0x2602E2FA, 0xB199ADEC, 0x4D0C1F79, 0x48AA4CF4,
+0x0F2E4EC1, 0x7BB29812, 0x3B7C4D0A, 0x30D9A31F, 0x6A0AED49, 0xE60263A1, 0xD21C0CFA, 0xC67F787E,
+0x074867BF, 0x0E5BEE50, 0xD29C1560, 0xCE0BCCC3, 0xC940B2C5, 0x48EB1F83, 0xA67AC95E, 0xE92C4C5B,
+0x64051504, 0x98A897B3, 0x0B9A6016, 0x2F51C7F6, 0x8914E004, 0xB6C061C6, 0x1DF12F45, 0xC0386451,
+0x2D83F963, 0x3DF359CB, 0x7E59F717, 0x5D1A2A51, 0xC356F9C0, 0xAC597C37, 0x5D7B96A4, 0x649E6C75,
+0xB7BA237D, 0x1B22FD0C, 0x28F7EF0F, 0x2A653844, 0x87FD6D02, 0x695E6377, 0xC4F2D2DD, 0xF233F2CB,
+0xD7D07614, 0x303B4CDF, 0x3045B6B1, 0x26A26E83, 0x61ED51E5, 0xBD35F65D, 0x272241B2, 0x1D834A19,
+0xFC3CE8D0, 0x80E5A308, 0x0E549668, 0x185CFAAD, 0x94015AB8, 0xB899DA4F, 0x1F7BB196, 0xF9CB0A0A,
+0x0D92F5E2, 0x50240497, 0x28EDA83D, 0x6AB90F02, 0xC8F102C4, 0x1D31B7BC, 0x97B1F7E6, 0xDC408B8C,
+0x3275C4FE, 0xE07E0732, 0xFD7BC37D, 0x9D254788, 0x72832E3D, 0xFCD5EE1A, 0xBB78E64F, 0x5A8C70A2,
+0xE0FFFD4D, 0xA0C025E2, 0x8EE949B8, 0xF21BD31E, 0x1E4DC92B, 0x1A48CCA6, 0x5C59E4D2, 0x73E2AA8F,
+0x0306BD28, 0x9A1519E3, 0x3F5DB3A7, 0xDD829E21, 0xBCE9B49C, 0xB14200B0, 0xC66CCA43, 0xEA51C6B9,
+0xB62213B8, 0x599ECA39, 0x9F6BC7D5, 0xDE727C27, 0x0C2D2485, 0x93AED117, 0xAA782119, 0x87DEF9E8,
+0xB4D61161, 0x98BE7B35, 0x5647F011, 0x3EFB8C6F, 0xFD14D329, 0x5518BDDA, 0x2943BB35, 0x26A7CC78,
+0xCAF0D1D3, 0x1AE19B3F, 0x6A2FB88A, 0xD2B61C0D, 0xD968E62F, 0x8CB3EC52, 0x34452CB5, 0x0B899E67,
+0x54DD54A8, 0x7FA2ABB3, 0x1C622DFB, 0xB543FD9F, 0x17A55A00, 0x9DA29A60, 0x9B30E3C7, 0xEDFE59A8,
+0x9541EAA9, 0xFB5D8466, 0x3C90B62B, 0xBA38F6FF, 0xAE7784DC, 0x74978ED5, 0x98814331, 0xA7D5E599,
+0x6F8926E2, 0xCBF3EA0A, 0x281FD7BD, 0x4614CF8A, 0x8E1595D2, 0x3E0919B1, 0xD4E965AC, 0x21278373,
+0xA7C1B065, 0x1195AC45, 0x7BEB3EF4, 0xB984DA54, 0x51B6F325, 0x4BC67E15, 0x82C28C05, 0xC52D0CF8,
+0xA9E008A9, 0x771E5FAD, 0x26D2AAAA, 0xAB79CA58, 0xC9C2FD4F, 0x6B5F3B96, 0x9E5A83C4, 0x3E8F4096,
+0x1A9CF4C3, 0x243B1CDB, 0xC905CA7E, 0x00D91040, 0xDFBF4BA2, 0xCEE79F94, 0xCDA9E9CA, 0xC61AC89F,
+0x104AC302, 0xBEB6D15A, 0xB424F5D6, 0x1F70FF4D, 0x72088D68, 0xAD3E4957, 0xC598734B, 0x9028C32A,
+0xB3CAB27E, 0xAA2AB05E, 0x627CAB35, 0x87871E6A, 0xF31D068D, 0x83CC03F2, 0xD357A80A, 0x0674F375,
+0x3DE79648, 0xFAF4B917, 0xEC369D83, 0xE9C40A9E, 0xC117AB8D, 0x5BF87C2E, 0x16DA5177, 0x47881626,
+0x7CF858A2, 0x669FCEC7, 0x510C7B19, 0xF6D9A200, 0xCC136A79, 0x541F818C, 0x6FCF1ED2, 0x894D60FC,
+0x29B232C3, 0xEC859AC1, 0x485D7EB5, 0x3727FF17, 0xD1DEE978, 0x6264F8F6, 0x0AFC70F8, 0x37D5EA98,
+0xC1C9AB1E, 0x0095E98E, 0x2B3EBD5D, 0x86A9D924, 0xC78048F1, 0xF12590B4, 0xE69750A7, 0x6DCD14EE,
+0x7E2BA031, 0x204B4BFA, 0x79C7E71E, 0xB7F0FAF8, 0x5AD05369, 0x0C4693CF, 0xD442059F, 0x2F3F41CE,
+0x442A61A2, 0x09FF2C72, 0xAA713529, 0x08EE294C, 0xA0F77A89, 0xB2383434, 0xB373F81C, 0xA2332383,
+0x77617B54, 0x95D42B1D, 0x802F7DFE, 0xA5DD9217, 0xB0A7FCBA, 0x260465F7, 0x1FBFE6C6, 0x1529A256,
+0x4AAD173F, 0x7D2437B2, 0x1D85EDF1, 0x3AEFFB1B, 0xC49A225D, 0xF5C3E614, 0xB9B604F1, 0x2509DE4E,
+0x8EBD99D9, 0xBBA30688, 0x95961940, 0x946C0327, 0x42121FCF, 0x688C6303, 0x367C1108, 0xC23C85B3,
+0x71339239, 0x15B43C60, 0xC264CFF3, 0xCAB01877, 0x381CC10E, 0x5C1B6303, 0x1C8E6561, 0x5C1F3B69,
+0x0865EDDF, 0x721B6AD5, 0xC20EBFAC, 0x753EA533, 0x36069125, 0x44FCD441, 0x99F96EFA, 0xA298B3ED,
+0x9A130B2D, 0xFEA4D969, 0xADD28ADA, 0x0D8E87C3, 0x7603D451, 0x971CACC5, 0x8B058FE5, 0x57A14373,
+0xE58C9A3E, 0x8B964727, 0xFC16CE4D, 0x648D3FCE, 0x879A10DB, 0x244245F3, 0xE8F5A2AF, 0x7BB7D5E1,
+0x4FB10453, 0xE6FE8A44, 0x18516E7A, 0xD745FE7B, 0x44A6CEAD, 0x0115767D, 0x15DA41AC, 0x7E3B8D9A,
+0x8AEF9F09, 0xC3C9A2C5, 0xA60A1A40, 0xC046506D, 0x62A3C87C, 0x8BDFA97F, 0x6CC68E11, 0xE26A90B1,
+0xD3666E45, 0xAC43FF68, 0x94F68F0D, 0x40585C97, 0x908A6385, 0x128C13A2, 0x8E75D1CD, 0x1CADA336,
+0xCCF961E4, 0x5FDFD169, 0x90116B77, 0x49B477C9, 0xCB3607DA, 0xCECB1D72, 0x0497A328, 0x67C3AB94,
+0xF7145E74, 0x96071759, 0xC73A8973, 0xD1C069B9, 0x9257631C, 0x5049CBFC, 0x1237E902, 0x7C11E0C7,
+0x4737A2F5, 0x3138382E, 0x69619086, 0x4ACD7F31, 0x2373A43D, 0x11699ECC, 0x2EE2B713, 0x7992B6DA,
+0x6B148B75, 0x5F058765, 0x63618B81, 0xB4260E12, 0xD4038AF2, 0x04FF10CB, 0xF28B179E, 0x6B210ADA,
+0xE4A5B0A5, 0x6D162684, 0x869380EF, 0x8C1F246F, 0xC00EE911, 0x63551552, 0xBF6929CE, 0x66F7B737,
+0x30F18876, 0x3E5EC0E5, 0x9E338EA5, 0x5EE8E39C, 0xB1A180D8, 0x8DD2A31E, 0xBD7CD148, 0xD3ED3348,
+0xAE81DEF1, 0xC26E19C2, 0x04B2D54F, 0xCC8DEB5F, 0x37B130DE, 0x595B6EEC, 0x28BAD54C, 0x02A4DB43,
+0x8FA5EA35, 0x2B15F6FB, 0xB1EE9F40, 0x1A96573A, 0xB01181B5, 0xCD8B15AD, 0x5CC1AB50, 0x59110736,
+0xB6F3DCB2, 0xBFE517B5, 0xAF21256A, 0xDC10AEF9, 0x8D24F1E4, 0xE1642B61, 0xE60872E0, 0x5DD0D9B3,
+0x49AFB14A, 0x26252E4E, 0xCCE80B95, 0xB9FE5280, 0x5E9F18CE, 0x67E46F19, 0x5F2109BB, 0x1FB97FC6,
+0x385AE25E, 0xC23ED76A, 0xBE31D7B9, 0xB34FEE7C, 0x0AB79BD3, 0x09C1ACDA, 0x4920E8DE, 0x2DCAE4DC,
+0x84E66411, 0x07821D6A, 0x034080B0, 0xE57F3C53, 0x0913B171, 0x3D0BA1B3, 0x096D0D38, 0x67EDC966,
+0xE65E058E, 0x781FC289, 0xB55A964F, 0x5C0F7748, 0xD9BEC30E, 0x3091AB20, 0xDC80D759, 0x53C6E687,
+0xA5B89B04, 0x25690C69, 0x6A67ABDD, 0x3C8B4407, 0xA59F5B03, 0x46B42669, 0xA6A80583, 0xFE004358,
+0xEF18C565, 0x90800862, 0x18547E3E, 0x09FE5B7D, 0x88CE1F52, 0xAE8F5F49, 0xB53D04C5, 0xE31E5ABD,
+0x462DBF86, 0x7C04A274, 0xD3E0DF29, 0x032085C4, 0xC8A4B037, 0x3298216C, 0x982F0E0C, 0xB47F154D,
+0xE5067B19, 0xD2EA8C29, 0xDDB457A6, 0x23E4798A, 0x285CED59, 0x5CBA5D57, 0x616551B0, 0x0FB270C8,
+0xF5143237, 0xD51E22AB, 0x5D837D70, 0x7834B050, 0x4BE51D48, 0x493E5C78, 0xB700A33F, 0x2F462FF7,
+0xABF4F84D, 0x7546247A, 0x71D24D1D, 0x8D35A651, 0xED192899, 0xE489A749, 0xFF2ED3ED, 0xEC15B82E,
+0xF01CC580, 0x2A54F526, 0x8787C5E7, 0x85171E79, 0x5E3DADCD, 0x11826D03, 0x8DFAF5CE, 0x05E56403,
+0x5ED4916F, 0xE14DF86D, 0x151FA591, 0xC83AAB61, 0xAA2C8590, 0x38DF22A0, 0x5DFC4DA1, 0xDD255F0B,
+0xA932DD5F, 0x91B599C5, 0x075BE2E7, 0x91F7CB84, 0x19A00D26, 0x2BB5B17C, 0xB8C5B1B0, 0xDEA0C9D1,
+0x18CDACA2, 0x14D69B25, 0x68DACD31, 0xEDCD75DC, 0x6DD9D543, 0x6DAC9EEB, 0x1F9E0617, 0x05A1FCF6,
+0xBDFF8945, 0x2235DD46, 0x8B6F9509, 0x6A311FDB, 0x60988F82, 0xB0250F12, 0x7E6B4DF6, 0xE01DE2ED,
+0xECB744AD, 0x6A040FD1, 0x82449AF2, 0x20ACA8A6, 0x023F56E5, 0x946C2E6C, 0xDBE2C494, 0x02899DFB,
+0x52CD73BE, 0x69B2B4F3, 0xDBEAD106, 0x49D05423, 0x5792809A, 0xA8A24F07, 0xD19D7E08, 0xB5BA39C3,
+0xAD355E83, 0xC3D46E86, 0x02FEC5FB, 0x8B3208DC, 0x74E39465, 0xD0B45B05, 0xFDF790E3, 0x1C6133E8,
+0xE8C80849, 0x833F1BBD, 0xFA3AAB6B, 0x7BF30A33, 0x303EB0C3, 0x3932B3F2, 0xAD962ECE, 0x8181DDE1,
+0x9FD48318, 0xCE1E2FAF, 0xC788E7BF, 0x240C5875, 0x422D6BB4, 0x76FAFD4B, 0x7DB4754B, 0xC8519A4F,
+0x42F6BD7E, 0xD064AB08, 0x00A11183, 0x185FCACB, 0x86015B28, 0xBBEAAE6C, 0xB85BEF00, 0xBBB97B7F,
+0xA3C0AF07, 0xC3A2335E, 0x862368AE, 0xE24D601E, 0x70516085, 0x1658EF1D, 0x0A6057DC, 0xCCA9CE0C,
+0x5A5807EF, 0xDF6C769D, 0xB3D8BDB1, 0x6C641575, 0x94A5D884, 0xE758DE45, 0x909B9FF4, 0x63AE6227,
+0xC9CDD076, 0xA1627EE7, 0x51745E6B, 0xD186FD30, 0x3D185295, 0x6195E810, 0x6675239E, 0xF82314A7,
+0x98229E67, 0x835AC114, 0xA29EA3DA, 0x38989724, 0xC419E52B, 0x44C0E999, 0xC26168AC, 0xCF3DB027,
+0x44F49737, 0xFC681A09, 0x3D8FFE73, 0xC754BA8E, 0x21E70A57, 0x67181F47, 0x1B8DEE90, 0x8ABA99E5,
+0x4F3DE196, 0x1067E129, 0xEE471AEF, 0xD05DE072, 0x324B09B6, 0x9AE74FEA, 0xBC2670FD, 0xB0E310D5,
+0xB0417D27, 0xF2FE3C08, 0x61C1820D, 0xFB5B220B, 0xC6722494, 0x9A2EDBFD, 0xDDF5F967, 0x2ADCEC1C,
+0x801E21EB, 0xF6E6E554, 0x4C4B4358, 0x3C03F065, 0x7E1032D7, 0x5ADA67C3, 0x7E6AFC37, 0x364D5818,
+0xBB5367FD, 0x91737F4A, 0xD06B7A97, 0xA9678529, 0xECFA6742, 0x975469D5, 0x0134B1E3, 0x1D702CAD,
+0xC326748B, 0x1635F403, 0x7254DC77, 0x318EC58D, 0x270A0D45, 0x770249D6, 0xE6771F77, 0xA1AF5F23,
+0xADF770DD, 0xD8F17915, 0xA57A2B4F, 0x6C5E973C, 0x49792380, 0x5B767B1C, 0x4735829A, 0x62ED0F1A,
+0x702D7EBE, 0x31F730CE, 0x79219CEB, 0x2C03091E, 0x71F54195, 0x3599262E, 0x991ECEC2, 0xA58CA835,
+0x06BAA76A, 0x48170B89, 0x9D720367, 0x1B460079, 0x98363BE7, 0x96075401, 0x0A117E33, 0x73A4BF8C,
+0xB111913D, 0x3663A0A1, 0x2068CCF2, 0x45493102, 0xEE7E59CA, 0xB4048DCA, 0x78F8C03E, 0x013BFE03,
+0x01A13EFA, 0x8C9130AC, 0x030D4F2F, 0xB350CD76, 0x19601C1F, 0xA2FF1EB1, 0x3F9D3AFF, 0x8220B3C4,
+0x2DFC404E, 0xD3DC9634, 0x73836F5F, 0xC744320B, 0xB5760896, 0xB07A923E, 0xD56C62AA, 0xABADF96B,
+0x7C85C885, 0xCF263D34, 0x4A3D3242, 0x3D77D0C3, 0x4E658019, 0x857818C5, 0xD54A1E71, 0x5DA29DF4,
+0x5E3B9804, 0xABF7B944, 0xEDA10BB8, 0xB228C699, 0xDCF41B32, 0xED00DB89, 0xFA544263, 0xD57EEBDE,
+0xE7122022, 0xD2A2F31F, 0xA4FBC8C7, 0x6D1FDDB7, 0x9D39DD63, 0x60396249, 0xF796BD26, 0x624D6316,
+0xE806BB76, 0x918CCD5A, 0xA545C7E5, 0xED9D99DF, 0xFE327531, 0x800AEBA1, 0x6D0AD353, 0xE85EE8D1,
+0xB4BE898B, 0x9983FA8E, 0x1387E540, 0x5E2D2B54, 0xBB58D349, 0x8A8A61CA, 0xC886AC48, 0x9436A26B,
+0xD25F7ECA, 0x1403F87E, 0x4802F849, 0x39F323B4, 0x7BF7FDEB, 0x981E406D, 0x0B7C164A, 0x33B4E2AE,
+0x5BC43B37, 0x85042345, 0xFE9FA48D, 0x0A03DC3C, 0xE50999AD, 0x6AF6EF6E, 0x75B9A393, 0x59D9B8A2,
+0x1984E12E, 0x7509F2A6, 0xF68C0580, 0x58DA2305, 0x1FA95817, 0x9257EFFF, 0x784D0150, 0x50EFE1C5,
+0xCFE9D0AB, 0x69B6F464, 0xEC015DDF, 0x11824109, 0x36B0C086, 0xF40FEC11, 0x153495B0, 0x6906E1A2,
+0xEBB1E5CB, 0x79CA3273, 0xAAD400D3, 0x58304A92, 0x837FB11C, 0x1962A86F, 0x46664CE9, 0x5BD84FF6,
+0xF413E29D, 0x74DFE940, 0x37BF0180, 0x04533A67, 0xDA3C9E8F, 0xEB795461, 0x08922D4A, 0x1A1CE524,
+0xFE1D8004, 0xA51C0452, 0xF080A47B, 0xA54D9A49, 0x219169D6, 0xBD756F32, 0x0B34B4C0, 0x72B15699,
+0xF5F75820, 0x58ECB552, 0xA1C4035D, 0x909EB70E, 0xBC26558A, 0x747BA064, 0x252C6ABE, 0xCDB5A3B2,
+0xE5C561F8, 0xECA6968C, 0x99947E9F, 0xA31483FD, 0xE2139538, 0x507A5DB5, 0xE4EF0D91, 0x5E1F8C1A,
+0x7BF297D5, 0x76A9BE0A, 0x48BBD365, 0x8F6DB036, 0x1A62BEE0, 0xD24C67B3, 0xCF7693CE, 0x8CC854CB,
+0x2C7EBECE, 0x82378F87, 0x5B6DAA36, 0xD2D1C578, 0x4E02BB0B, 0xDF96D281, 0xC9C7BA73, 0x6CE508E9,
+0x3366EB1D, 0x1FDA7C32, 0x34EBCAA4, 0xE0049054, 0x0D5D96EB, 0xD73F8611, 0xE16F47FE, 0x8CFD3780,
+0x55C38D0C, 0xD2151194, 0x70ECA4B1, 0xD2BB4D7F, 0xD948B64F, 0x9962158E, 0xD261067B, 0x778828D2,
+0xDD3344D9, 0x2218ED89, 0xE8CF324D, 0x92917EEF, 0x5DB9522C, 0xB9FE3FE3, 0x6F5CD86D, 0x14CF11A7,
+0x34975BE7, 0xC800193E, 0x9E2B9064, 0x69BACC64, 0xE95FC4E0, 0x84442D83, 0xC7DE01D5, 0xECEEB758,
+0x8F8CB088, 0xCC6EB650, 0xAC95C2A3, 0xB4888F4A, 0xF9CED741, 0x2BC76B91, 0xAEBF6CDB, 0x12E67D41,
+0x227DF2F4, 0x49BCC2AC, 0x95A746A4, 0x0C27AB09, 0x7DE5B90A, 0xF083EC10, 0x0B965BDC, 0x407BAB29,
+0xAF3FCAE0, 0x11120FCA, 0x2F80B9FA, 0xC7BEFB3F, 0x548EB8F3, 0xCB30AC15, 0xB806935C, 0x812181D0,
+0x80EFE2D8, 0x088AF328, 0x273A746D, 0xC5CA91F9, 0x80777C4E, 0xC2521184, 0xC27100A4, 0xE9BF30F9,
+0x509133C6, 0xB752C121, 0x167E65C0, 0x62CED660, 0x68EC17F5, 0xF1A16287, 0x26440B81, 0xB5EBCB64,
+0x9C075675, 0x64FC7BF1, 0x9ED72BF5, 0xAD83216C, 0x169FE163, 0x6E9B995C, 0xC6CF1785, 0x1FFA4D2F,
+0xA3D26AB3, 0xB98B24CA, 0x9EA3DD08, 0xCE21F865, 0x0D5C8752, 0x57A067BA, 0xC107B9DA, 0xED8F165F,
+0xEF71213D, 0xCD03F786, 0x5633A122, 0x79D2C45C, 0xFAA7D267, 0x6D21335C, 0x145F6835, 0x6C7F3BCC,
+0x397E8BE1, 0xBFE8A55A, 0x1DEED145, 0xFAA5F82D, 0x35B79597, 0x61D86A26, 0x0C39B250, 0xB7D3B234,
+0xE9F312FF, 0x7BA31E2B, 0x8C4902EB, 0x2D2E93E0, 0x52AF5DB6, 0x06CC35E3, 0x1FF3BC18, 0x3A0942FE,
+0x46E0FE43, 0x65259FA6, 0xB5FCA331, 0xB4D1B900, 0x0E1542FB, 0x39DF5038, 0xCF8B076A, 0xD0363FDB,
+0xABB29C8A, 0x36EADF74, 0x4C8AD7DE, 0x95A1DD3C, 0x2117B152, 0x5744FFA0, 0x11BBED83, 0xEEA41E75,
+0xEBFA7CE6, 0x95FD6470, 0x1BB293D2, 0x7363B3F5, 0x979A72E8, 0xB647739B, 0x7EB77276, 0x37B6687A,
+0x2E7512D6, 0x4FF9CD6D, 0x450897CF, 0x124D8B2A, 0xA3009CB7, 0xA48353B6, 0x56E80BD9, 0x8048C8F7,
+0x8D04C699, 0xA40E8002, 0x8DFAEE58, 0xB553E871, 0xFE09CF22, 0xA984071D, 0xDA07A432, 0x16445823,
+0x41B3ED06, 0x1E080EF0, 0xB51CD6A1, 0x55DEFDCA, 0x31BE6923, 0x5A828D0A, 0xEB784AE1, 0x5C77BB7A,
+0x82D12A97, 0x5D489F1B, 0xBCECDAA2, 0xCC37FBB5, 0x0D07C5D5, 0x85D6DCD0, 0xD77F5477, 0xA7CCED99,
+0x6B31B6FE, 0xE186F32B, 0x7B9E3DBE, 0x5A9D8CAB, 0xE219AFBF, 0xC874EF90, 0xF31F5469, 0xD174C75C,
+0x7488083C, 0x8A4CF574, 0x57307C3B, 0xC70EE462, 0x82AF66FF, 0x6AFD465A, 0xAB710629, 0xBF4770C2,
+0x83620FED, 0x72F45A63, 0x8E4330F4, 0x0BD3835A, 0x768B4F5E, 0x4E07E3F6, 0x435978E0, 0x5B02EBDC,
+0x4208B9E0, 0x9FDED662, 0x33720CA9, 0x1E6AD8F5, 0xF068AF27, 0x073A7E6D, 0x9F5F9E32, 0x22503370,
+0xF5F8A27E, 0x94A59571, 0xF9464C2B, 0xCE99F0CA, 0xA9891869, 0x6D9443D7, 0xA6CEDAF8, 0x4040F185,
+0x799E9747, 0x0CFE63D6, 0x38760D04, 0x9ADE6957, 0xE571A280, 0x96A29A94, 0x3CC5E201, 0x6783B76A,
+0xF22254C7, 0x694AE7E5, 0x09073B22, 0xAB989C29, 0xBE0B46F8, 0xD19B61C4, 0xC31AC5EF, 0x84F4D4C4,
+0x743C985D, 0x478F3C58, 0x85C90453, 0x678ABEAE, 0xC8CC13AD, 0xD2633643, 0xBD47E82F, 0xEF20EEE0,
+0x3B830346, 0x5F0BEAA7, 0x332FAB9E, 0x425908FD, 0xEF4936F0, 0x537F7FEB, 0xB10889E7, 0x7018D535,
+0x6EA364D9, 0x4F83EE98, 0x5EC7097C, 0x2930FA61, 0x2360E6EA, 0x217D6417, 0x159D0A5B, 0x58DAF58B,
+0xB234EBFD, 0xF0A25D89, 0xEBE5B38D, 0x34A7F339, 0x2A2E36D0, 0xE2C253F6, 0x35E64A74, 0x13184077,
+0xD899F40D, 0xC045B4C1, 0xE7ED2BE9, 0x0FD13F77, 0x270EF516, 0xD3AE694E, 0xF82BA061, 0xE37F0DEB,
+0xAFF5C845, 0xF56E0A3C, 0x4909E9E5, 0xCAA2A440, 0xAF602535, 0x30FFB0A8, 0xEA227D85, 0xF8232881,
+0x00CD1836, 0x237B18F4, 0x55CEFB89, 0x5A73BC3A, 0x00DCE9BA, 0x28010000, 0xC81508EE, 0x01000000,
+0x2000B821, 0xCCFF1100, 0x099022BA, 0x6F0F33A4, 0xC08270F6, 0x82D9F55F, 0x55E1B378, 0x01DA9AC0,
+0x73452873, 0x04930A3B, 0xCB8216C4, 0xD6468305, 0x8DC9062C, 0x9D6427D4, 0x7D21722D, 0xED6FB312,
+0xA05AFAC4, 0xBBF31DB3, 0xB5C99C54, 0x2982230A, 0x58CB9FE3, 0x3B8DD874, 0xF349B168, 0xA96583A4,
+0xA04F4ACB, 0x17092803, 0xB7A1DAB4, 0xE94C217E, 0xC01DEADD, 0x784CBE85, 0x40738F37, 0x67C56A6E,
+0x896BF507, 0xD4C8AEB0, 0xBA7B596E, 0x8FA8118A, 0xFEEB6DAD, 0x12D47898, 0x903BBDD0, 0xF3112AB2,
+0x0F9C24DD, 0xB1E14CB2, 0x064EE995, 0xFA2B80BE, 0xE00F3D1A, 0x02BF0616, 0x8C413221, 0xC1E4EDC5,
+0xBBC56A8A, 0x03C532B5, 0x4FF90FAF, 0x68F5B8AD, 0x6E44999A, 0xD46ECCEF, 0xB60A290D, 0xEF1D482E,
+0xA5AED03F, 0xACB0B2ED, 0xD0508144, 0x84D08B88, 0xB1649801, 0xBD9E6F17, 0x6790A7E9, 0x71291585,
+0x92CFE897, 0xC71EE7F4, 0x5EAE6C47, 0x86C126DC, 0xBB6D191F, 0xD0E699FA, 0xFB0622D8, 0x829871A4,
+0x98B8AE3E, 0x783062B2, 0xB15B5E8B, 0x4B66F060, 0x65FCC9ED, 0xCE4DCC61, 0x78E19E54, 0x4C3D19E4,
+0xE3552EA9, 0xDC19009D, 0x1B1CEF87, 0x7DEFB455, 0x3DCD35E3, 0x57CA4705, 0x2A88C34A, 0x1AA46EB7,
+0xC1F65032, 0x7DA42904, 0x37A3D067, 0xCF578C5D, 0x4463548E, 0x3A74C6CB, 0xE707521A, 0x00FD2805,
+0x660E49B3, 0xAEB295F8, 0xD0C964F9, 0xC9B4E737, 0xD0E2C154, 0x146184DD, 0xE7088A9F, 0xA72C3D29,
+0x946B9530, 0x17489689, 0xFA773198, 0xBFEEDF1C, 0x1F7D4634, 0x5C9A6DD7, 0x712AE554, 0x101A24EC,
+0x49C8F060, 0xF7486A07, 0x19BEBEA2, 0xA6BEC5A0, 0x6B872275, 0xDEB331E0, 0x279C31F1, 0x9F7253D3,
+0x0A44AB67, 0x25C1EC22, 0x1C2FF9AB, 0x5C1C79D7, 0xA1F61D3B, 0xB2AD8457, 0xEF044543, 0xED0CF0DA,
+0x7D6D974C, 0xF3BBF350, 0x25435C2E, 0x8169A49F, 0x68E28490, 0xD9308903, 0xBF0C3BCD, 0x06335363,
+0xEA85EBA5, 0x9AB888EC, 0x1CE844EE, 0x0A39663C, 0x97F874CB, 0xADDE0499, 0xDB8461D7, 0xD76AB2B3,
+0x2C19E420, 0x579A48E6, 0xAA7FAB16, 0xF9A4DF90, 0x1BB9BAA0, 0xE698FEBC, 0x3442BFB6, 0xAD91BE5B,
+0xD7FEBB47, 0x52A302BD, 0xCE053326, 0xE18B6E6A, 0x5CE21BCA, 0x489AB905, 0x3EE00182, 0x18BA57BB,
+0xD01A68EF, 0xBAD197AF, 0x124013D5, 0xA6B6B3D0, 0x6A91BA45, 0xE1BBD86C, 0x74DCC061, 0x742C8071,
+0x6C9AED54, 0x8FE96245, 0x1A3D415F, 0xAA7B911D, 0x503C6177, 0xE7A93062, 0xB7B5EE15, 0xE74FDF60,
+0x5163BE35, 0x4741D9A2, 0xDB4FBF1A, 0xEEEEDC27, 0xDB836F2D, 0xC3B59DA0, 0xC5C8D27F, 0xDDB77CDC,
+0x069000CF, 0xA3CAA8BC, 0xAD737B76, 0xF740A70C, 0xB51523C2, 0x93E95A43, 0x36F1EA55, 0x5073C8B5,
+0xBD6D6A4F, 0x5E1A7DFB, 0x7F8D6CFF, 0x335C2EAC, 0xE7BEFE30, 0x2CEFCBB3, 0xAF3F3FA9, 0xDE0D90C7,
+0xF68821C1, 0xB334B079, 0x0F0AF596, 0x2B028B9C, 0x6C823914, 0x2D282E29, 0xC0D492D8, 0x503C45A1,
+0x43F1653C, 0x73134C89, 0x0C987A89, 0xA7DDF4CC, 0x654426B4, 0x87824020, 0x458434B5, 0x278BACA3,
+0x8877E85B, 0x3BA9E348, 0xB8CB82A1, 0x6FB9418B, 0x40C787D9, 0x06438B52, 0x22BB6A63, 0xCD15747E,
+0x74AD446E, 0x65B6933B, 0xA8EE38B8, 0x2AC956CE, 0x2151B8AA, 0xDBB57812, 0x3381245C, 0x1709859E,
+0xE13CDAD9, 0xA25956A7, 0x76060002, 0xEAB2D164, 0x975FDA62, 0x041E2CF7, 0xD775E28F, 0x976A23DA,
+0xD21CBAB1, 0xE1A3E425, 0x39BCD8BC, 0x83DD24D3, 0x18CA6FB0, 0x35B1E936, 0x549C7D6C, 0x35CB30A9,
+0x43B09275, 0xA7FF90F6, 0x83E77CDF, 0x9F0E6862, 0x4436B09E, 0xC001EF57, 0x296ECCFB, 0xD8133D1B,
+0x8A62E995, 0x728A29EA, 0xC66FB5F0, 0xD8C0B23F, 0x6B58A1FA, 0xD155DD9A, 0xB638080B, 0xFEF57397,
+0x110FC204, 0x4CC75BD1, 0x498ED2E5, 0xEC66D814, 0x9BA645AB, 0xAE4602CE, 0x5089D436, 0x03DA1358,
+0x9BDFA9FE, 0xDA56E461, 0x14030769, 0xE172C7F2, 0xABE63374, 0x85337C87, 0x30031503, 0x4429AFE5,
+0x361EC504, 0xA604F272, 0x404F040F, 0xB624879E, 0x02716A3D, 0xC34DCD35, 0x2E96EAD6, 0x5F439991,
+0x26826033, 0x7C7EB2E2, 0x02BA284B, 0x777891C1, 0xCD91F04D, 0xEA9ED15A, 0x9FBADADC, 0xBE7C01A9,
+0xBE4F70F8, 0xF8D123BA, 0x265DAAF3, 0xAFE33D3E, 0xF64F5A34, 0xEDED0C9A, 0x21917BE9, 0xD728DC17,
+0xC4C099AA, 0xE220216A, 0x8B729D86, 0xF66A4FAF, 0x6EA66993, 0x24864366, 0x4C30A2AB, 0xA943999E,
+0x1205499B, 0xC2BE47C4, 0x527DA96F, 0x1A89F7E7, 0xC8257996, 0x42F1A5E5, 0x6725D9DF, 0x2C4A9240,
+0x1FE445FC, 0x7FB0D8B7, 0xE1333D86, 0xDB3E8D7C, 0x7EB4151B, 0x0CE5D4E8, 0x97B58AB6, 0xE15AF4D2,
+0xD04F9898, 0x8691BAD0, 0xD01DF263, 0xF55634F2, 0xC6B1D977, 0x12AFDA26, 0xCF120E91, 0xA07A9225,
+0x70E3FDD5, 0x7DFB22B3, 0x813A9320, 0x33898618, 0x45C404C5, 0xDF1DE57F, 0xA0D8880B, 0x00A8EDDE,
+0x1D387C41, 0x5C7AE583, 0x504569DA, 0x656C5F3F, 0xDD5520D5, 0x9990B815, 0xA7B5EF1A, 0x3037E3DA,
+0x46E2D7F7, 0x07FD74F6, 0x1BD2CE90, 0xD63FEB5E, 0x314241B9, 0x9232BE7D, 0xDABEDE6F, 0x6AD40FCC,
+0x95FCFC03, 0x672A392D, 0x7CAFF8AD, 0xC8D6516C, 0xCBA0DFE0, 0x849EF258, 0xF75E8761, 0x88940E35,
+0x82BF01C8, 0xBD199500, 0xEBCE29A1, 0x636BE86B, 0x45FFE256, 0xEEFC9CA7, 0x59B2DC8E, 0x62C560C7,
+0xD405F7B2, 0x15FA69A6, 0xFC246A61, 0xE1F49D5C, 0xB975C5E4, 0x2ADBBF85, 0x3041BDA2, 0xC7A36F27,
+0xE1BAA88C, 0x2CB9B8FF, 0x304CD83A, 0x2FDDA327, 0xDB2148D1, 0x95F93A69, 0x3BC8EEC9, 0x774A7482,
+0x95D9C66E, 0x2321611D, 0x4A79E998, 0xF61F152F, 0xD0504087, 0x6A53E010, 0xAF2A4D95, 0x8352ADF5,
+0x66DB8F1F, 0x03ACCA8B, 0x9EAE11BC, 0xDDC11356, 0x4E6DC32E, 0x6B83F6E8, 0xB68B469C, 0xF26A8573,
+0x97C41E54, 0xE1ECFE89, 0x80AC790A, 0x9E83D05F, 0xAE410483, 0x9B4D672F, 0x855D4373, 0x16ADC763,
+0x44B8E27A, 0x1F9657B0, 0x4B040829, 0x82B61CB0, 0x8DB52C26, 0xFBF6F207, 0x9D03CF91, 0x19EDFB5F,
+0x0D386FCB, 0xA0438BC8, 0xF617655C, 0x241B6C7D, 0x217578A4, 0x724984B6, 0xAB498CD8, 0x7D8ECEB4,
+0xFF3D2C64, 0x6487E6C8, 0x6CA2294B, 0x28D994F0, 0xAA4AEA5C, 0xE54F74ED, 0xD9C5AB3B, 0xE6196030,
+0x0B179AC3, 0x38442E52, 0x9668B000, 0xF16842C9, 0x556E8316, 0x294048A4, 0xB8B129B3, 0x359A18C2,
+0xE30561D5, 0x3DD3924F, 0xAA5AA117, 0x067BFB04, 0xE685BC1E, 0x0CB470F7, 0x9323639A, 0x7FEA819F,
+0xFDBABAC4, 0x196CFBAB, 0xF15690E6, 0x3FE81C27, 0x2004815D, 0x9D1C0772, 0x23EBF4F1, 0x7BDC7886,
+0x34553431, 0x32E2DE2A, 0x92FE3E2A, 0xAF09EC70, 0x081C70FC, 0xC7614A5F, 0x70826226, 0xF6C97B74,
+0x4AD8A187, 0x7AA80479, 0xD9292627, 0xDEB5D1FD, 0x6BB55AD3, 0x95288A22, 0xE1A76239, 0x3B2E6130,
+0x8240A600, 0x5EF301CB, 0x5896266B, 0x367DCBAA, 0xA54FF5B6, 0xB80D12BC, 0xF4DE907E, 0xCA700664,
+0xED88E602, 0xAEE77637, 0x882791E0, 0x2A9BD463, 0xFB2B106B, 0xDBF38251, 0x1DFB9855, 0x2238DAE0,
+0x6D4CD3EB, 0x29744529, 0xAC2579EE, 0x0D268653, 0x9FE50C65, 0x09A6A1E5, 0x79DF82E5, 0x32B9D290,
+0x9B3F5408, 0xA08D61DA, 0x668DB9F3, 0xBCDB7662, 0x8FB573AF, 0x22479418, 0x73CD956F, 0x598FC276,
+0x26AD306A, 0xE5FBB838, 0x5F5D879F, 0x656464A0, 0x5DE9E815, 0xE0462916, 0xB7288D19, 0xC6E06422,
+0xEB3D84C4, 0xD45492CA, 0xA534F5E4, 0x9C801B38, 0x61BC8F91, 0x78DA583F, 0x275D5322, 0x78621A92,
+0x9A337867, 0x7CC865E7, 0x26887ED6, 0x4D235E17, 0x6A568CA1, 0x59A05EFC, 0x52FC8440, 0xD2ED1DD9,
+0x91FE3D4D, 0x1773039C, 0x4F0ABBDD, 0x33F6CC2F, 0x2454A78B, 0xA4593C11, 0x8BAB244E, 0xC6150263,
+0x085F1AE7, 0x4FECAD42, 0x4936B695, 0x01D3EAA6, 0xE0E49EBB, 0xBE399395, 0xD6F0332B, 0x0F7AC161,
+0xE8898CC6, 0x706FFF01, 0x7EC60E20, 0xE42CA1D1, 0x4759418D, 0x3467B925, 0x3247D26E, 0x6CEDD985,
+0x699E0BA5, 0xB3F90020, 0x5E8E97AB, 0x4138A653, 0x4709410E, 0xBEAF9E93, 0xA9355966, 0xADBBE5FD,
+0xD54ADDD6, 0xDFF8DA79, 0x27BFC663, 0x5DFDD896, 0x2AD81F83, 0xEE5643EF, 0x0C309F4C, 0x21B3ECC8,
+0x0590943D, 0xC2682DE4, 0xA004D576, 0xD32C9A1D, 0x8B3872A8, 0x9C40F88B, 0x9E21EB38, 0xE82795E1,
+0xD57E4D3F, 0xEB8CA96F, 0xB526487F, 0x83C9FB19, 0x0C8FA349, 0x75D64C84, 0xAA8547C4, 0x67581719,
+0xDA374EF3, 0xD3492E58, 0x42A7CD60, 0x19C6BC53, 0xAAD9D984, 0x0A4F79CD, 0x7B6C643D, 0x8C8A3CCA,
+0x31BBBE0C, 0xC6A7A8B5, 0x62E12AD2, 0x9D4332E7, 0x14AEDF76, 0x9894279B, 0xFC7E5FE5, 0x9DEEB4C9,
+0xF578E1D6, 0x3B5040EE, 0x8271B2C2, 0xB7ACD5D0, 0x1BFE72ED, 0x0DCCA199, 0xB7F7D847, 0x981A8A07,
+0xE1E23A33, 0xE83D541B, 0xFE839583, 0x8FE28DBE, 0x327B4270, 0x74724117, 0x9BD318C3, 0x736F0616,
+0xCCB2D046, 0xB0BB7B6D, 0x36BA3D09, 0x943DFE1A, 0x809D3EDD, 0x9752CB05, 0x135F8ACC, 0x27ED417D,
+0xE7A60BE3, 0x8C76B1FB, 0xD586CE56, 0x91F451EC, 0x4C0C448B, 0x263B7582, 0x6B14720C, 0xA666CC21,
+0x51042050, 0x16C73884, 0x804F425E, 0xCA215DCA, 0x19A0C67E, 0x4FAE5F22, 0x7E2AA993, 0x3AB5ACEB,
+0x396AA55E, 0x7D7B3F89, 0x1D0CD20E, 0x30E15C45, 0x657F7950, 0x1A5D8867, 0x9186E0DA, 0x57E0975B,
+0x74522AE7, 0xBB38969B, 0xC6E633DE, 0xDC0B5569, 0x66EAFF21, 0x49E57FA8, 0x0C258948, 0xB341780F,
+0x6DD37873, 0x79245266, 0x6BFEDADE, 0xB4276BF0, 0x87DEEA4E, 0xDDE4BACD, 0x63DC7C31, 0x0757F038,
+0xBBFAB9C8, 0x18E3FAE3, 0xCCD64A42, 0xBE9854A3, 0x4D45FF05, 0x4D906A81, 0xFD2EA284, 0xF993FE4F,
+0x43477D2C, 0x4D970B12, 0x29EB7A7A, 0xFFF63972, 0xF3BF3705, 0x3DC428BA, 0x77BA401C, 0x7D81087C,
+0x0B959C87, 0x0C6F0C14, 0xCD453FFB, 0xB33EC8D9, 0xFBB5FE2D, 0xC2CE049C, 0x1F0750E0, 0x3029C1B1,
+0x81F75CC1, 0xAF58FBBA, 0x203EEC4A, 0x9177A13E, 0x315B0C04, 0xEC30CAAC, 0x8DF9012E, 0x01328CC5,
+0x43A65F1E, 0x9D617301, 0xC504D6B5, 0xD45C4D47, 0x42FC6B3A, 0x137D150C, 0xE6397B85, 0x12BA16EF,
+0x6C04AEB2, 0xF8D96FC9, 0xF79B51D6, 0x01936C52, 0xE555D47A, 0xFA7B2E47, 0xF7AC3A0A, 0x81B83EBB,
+0xE78B3D23, 0xCA3A276A, 0x1C839B09, 0xDE2D98AC, 0x34AC6412, 0x9E97F3CB, 0x9B8C9129, 0x7E87D68D,
+0x912124D5, 0x021AA627, 0xCED77CB8, 0x4C9AA3F8, 0xD65AAAD7, 0xB3368BAD, 0x2D6BE050, 0xB7A83B6E,
+0x62B718B9, 0xC2002B61, 0x3C18BDE2, 0xCA8D2275, 0x023D0C03, 0x5DC8DC38, 0x5CA6BF21, 0xE13E4D46,
+0x3E2F8C3B, 0x6185EC2A, 0x06DB3CE5, 0xD44E29BB, 0x5B76656F, 0x8410B0D2, 0xBB321644, 0x29922188,
+0x23BC5DFE, 0x87A44411, 0xC278B8F2, 0x1044BF18, 0xB40D1104, 0xB271DF05, 0x280572AD, 0x4F560F73,
+0x221771D6, 0x61B37F1C, 0x51A2934A, 0xA22C84FC, 0x95449B7C, 0xCDC06FC8, 0x718BCD55, 0xD6E248A4,
+0x19942893, 0x0F724EA4, 0x1430A8C4, 0xC1BAD8F6, 0xD4EF2E6C, 0x4D85B90E, 0x213BE8DE, 0x64C0C00C,
+0xE8813450, 0xC398D0A6, 0x0FDFEA5B, 0x4961B3B8, 0x959034F4, 0xB4928C15, 0xD45DB4CD, 0x36DCA361,
+0x029FF61B, 0xECB61218, 0x3E161BAD, 0x99A82EB6, 0x57C63F72, 0xE5339DE5, 0x3139E704, 0x20251646,
+0xAE401C4A, 0x2D8E47DA, 0x47090D28, 0x632873CA, 0xE56B4042, 0xE104252D, 0xAF164E64, 0x2C855A1E,
+0x05655647, 0x88BFD487, 0xF1F069AE, 0x3E36DCE5, 0x06687B12, 0x10E6F97C, 0x6A3C026E, 0xF6B418A7,
+0x3418CF50, 0x1B97D176, 0xDDE019B5, 0xEE5A65EC, 0xFAFC153F, 0x8A42D8CE, 0x09EE9FCE, 0x371DBFF5,
+0x7B9374A8, 0xD1FC907F, 0x0892D5A7, 0x04480C2F, 0x9D2ACA86, 0xAD43553D, 0x43316E6B, 0x6B508747,
+0xE537EDE9, 0xDBB3449F, 0xA79670BE, 0x81D73C26, 0x1BFD6822, 0xEBD79A57, 0xFC842F97, 0xF6D21A7D,
+0x86CD11F0, 0xCE178286, 0x13ECC67E, 0xF48D31A7, 0xBD8B4889, 0xE4C763EA, 0x5FD293A2, 0x78D477EE,
+0xFE6E6ADA, 0x1B64EEEA, 0x647554F1, 0xB684A4C7, 0x2230A47F, 0x2ACB2D96, 0xC0E6A281, 0x72E62C62,
+0x02A305AA, 0x8874066A, 0x29EE91E9, 0xC261D2D1, 0x7F14078F, 0x5624F2E4, 0x9EFE21A0, 0x4F23D91E,
+0xC1606962, 0x2A0D7490, 0x6460B01A, 0x06DC0321, 0xD3476256, 0x8D8AFF33, 0x5AD86289, 0x222AB619,
+0xFF08B559, 0x48142B54, 0x91096106, 0x307C296D, 0xF64A2A52, 0xA5BE783A, 0xFA2E9283, 0x96195BFF,
+0x0D8F9BE3, 0x147E35A4, 0xF227B910, 0xD8F48A81, 0x3928F386, 0xA2512E34, 0xA4E31E41, 0x3BC2B458,
+0xBB1E0FCE, 0xEF3F4BB2, 0xCC5B398B, 0xECE60906, 0x4E42DCB5, 0x40EC71DD, 0xE67D0A5F, 0x7E1AA9A2,
+0xF6E5B714, 0xFA5162C3, 0x87FF0F7B, 0xB4331210, 0x940F048E, 0xE26390AA, 0xBDA02F8E, 0x8B87A96E,
+0x39C60BAA, 0x96346A1A, 0xABB7D3BB, 0xB750E5AF, 0xBD9087FF, 0x8AA8A225, 0x7CAA1E86, 0xD7FD4D2C,
+0x990DAAF1, 0x78B3BCCF, 0xDB60895B, 0x1BB04D7B, 0xA65FB50D, 0xB5F4AF8C, 0xCE417039, 0x00103409,
+0x10E34660, 0x9DFB9539, 0xBD9D18CF, 0xB834BEB1, 0x55FCDC0A, 0xB54C0A22, 0xAE8EAE6C, 0xA57509DB,
+0x0B62CD5F, 0x5E7AC181, 0xA077E465, 0x91F1A691, 0xA62B4CE9, 0x0292FD25, 0xCB374F2C, 0x6124B185,
+0x1EEAE5A1, 0x9810C181, 0x6F038338, 0xF96EC8BD, 0x053F3ACF, 0x6919AA6D, 0x71915FB9, 0xAF6B2859,
+0x70848051, 0x7AD3A518, 0x0A255EA3, 0xB716744F, 0x7BE99708, 0x727CB4DC, 0x40208118, 0xBE776172,
+0xD07E2478, 0x9DC6E22F, 0x49FD659E, 0xFE684488, 0x3DE2EFBE, 0x49AC2802, 0x6454B145, 0x256A6496,
+0xEC18A24F, 0x33C36036, 0xA5C99FA8, 0x7AF104A3, 0x43556E4A, 0x1BE5DED6, 0x4C7C8B12, 0x8481B96A,
+0x6AE719F6, 0xD7087BBD, 0xE1A5BAD0, 0x4D6D02FE, 0xC915A90B, 0xA00CFEFE, 0xA3B3823D, 0xC87A7C10,
+0x2B38B66A, 0x3D83EE1D, 0x0B82AF27, 0x8F846443, 0x3390FB93, 0x5A899834, 0x745C299C, 0xBB8FABDF,
+0x9382D731, 0x1A618E76, 0xCB6F6721, 0x6A7944F2, 0xB0365835, 0x809A991C, 0x1AF87A6F, 0x6346D745,
+0xBB352889, 0x7ED3904A, 0xA7EF4756, 0x71EC2740, 0x0F32E2DD, 0xDFED2635, 0x0D16205D, 0xBE7D3CBE,
+0x1AC68E43, 0xF4D5DBFC, 0x345C1B9F, 0xEC4C3FB1, 0x562C69A7, 0x69C72E2D, 0xEAF27FA1, 0x427FA170,
+0x0B1A5423, 0xA3E99006, 0xC1426E06, 0xA59BCA48, 0x54DAA8A3, 0x6204AF20, 0x0615E69A, 0x5FA243DC,
+0xAF1E5A22, 0xAE0DBE3D, 0xFE8EF1EE, 0x4B7C9DA4, 0x6B5BA1B5, 0xFD4BF2CF, 0x0A579CF7, 0xBC777EFB,
+0xDFD5F692, 0x61DB2F4B, 0x995F2BD4, 0x461CD526, 0x040A233F, 0x96EF428C, 0x7FB5DAC2, 0x3965D419,
+0xDC4D12EF, 0x8CD8C161, 0xD3AD69E7, 0x351705EB, 0x2ACCAFA4, 0x7B459670, 0x5558B15C, 0x37E0C9A2,
+0x9F49737E, 0xECB28443, 0x9E201C0F, 0x089CAE44, 0x9804B149, 0xEF7FABB6, 0x5785AB57, 0xAC282A0E,
+0x6D3067FA, 0xE32054D3, 0xBFC3748A, 0x0ED455CD, 0x29D1F978, 0x6A05EED4, 0xDEA97C35, 0x6A781829,
+0x4D60D1F8, 0x971C1AE7, 0xA84DC023, 0x5DD09DF5, 0x69FDE39D, 0x8F9703D3, 0x0D612572, 0x5106C900,
+0x0273DA62, 0x146ED7FF, 0x3B4B2244, 0x05E724C0, 0x98C76D5B, 0xB45085F5, 0x13316C68, 0x381F1464,
+0x9CEE870E, 0x5B743B00, 0x8A3BA0CA, 0x6209618E, 0x797BEA2A, 0xD5D7FACE, 0x079A3C40, 0x79AE0C2D,
+0x5E6ADDDE, 0x36AAFBBA, 0x32FBFEBC, 0xDE48C6D9, 0x5AE87DF6, 0x695B13C7, 0x42442EF0, 0x4A4FF0D4,
+0x29999183, 0x176644B6, 0x6D29F7F6, 0x0119B7A6, 0xB27E4E6F, 0x6F73C2AD, 0x3222370F, 0x8ED8A390,
+0xAD465C06, 0x2B4B4186, 0xB446DA48, 0xC1563F42, 0xC5B57CE1, 0xF358A465, 0x6FCB73B1, 0x1111389C,
+0x4B23B00E, 0x8499015F, 0x44EA38A1, 0x919C1A02, 0xF22F04B9, 0x4D97C242, 0x2B3D0CA9, 0xD2B69D28,
+0xCE3DD31E, 0x93467E3D, 0xD5AEBB2E, 0xC6E2B2A4, 0x45608267, 0x959A7078, 0x2ADEA34D, 0xCCF73B03,
+0xB9BD5A23, 0x866CF71A, 0x57EEC420, 0x5FFC9650, 0x2A8B7A8F, 0xE794C106, 0xE931D1E5, 0x1EFB4A50,
+0x9EEEA84C, 0xA26BD6E7, 0x48A017F8, 0x8BCA80C2, 0x571FF8CF, 0x7BAF3F2B, 0xD31BC2C0, 0x52BF0AAA,
+0xFFF6FB50, 0x34DA240C, 0x8F64D71B, 0x87633E5B, 0xCCF1B8E7, 0xC4E31DD3, 0x702F6183, 0x9240B226,
+0x278B7BD2, 0xCD66154A, 0x6D6282B3, 0x3CAC9437, 0xA63CAACC, 0x8469388D, 0x0DD23575, 0x17D602DF,
+0x0B43D3A6, 0xA8A81276, 0xE98A2EB1, 0x9F592D69, 0x9A064E4C, 0x47226EE3, 0x61783057, 0x6C2A4CD5,
+0xF2BCACE5, 0xECB20FED, 0xE28A3068, 0xA9A487F6, 0xDBB6A72A, 0xB94175F6, 0x317CECBB, 0x36F1F45B,
+0x8EBAC8D5, 0xEEC4F05B, 0xA7911661, 0x100F6A40, 0x6CC264E1, 0x45814AC2, 0x7F2F32EB, 0xAFCF378D,
+0xC9382CBF, 0x588C6E86, 0xFBFA0BE7, 0x7BE91C0B, 0xB64EBBD1, 0x14B9326B, 0x45D092D0, 0x6E549483,
+0x60F86A15, 0xDE46EB7F, 0x909377B2, 0x216086E7, 0xFE5B5215, 0x364ED23D, 0xE985229E, 0xC608DB62,
+0xFF374FF0, 0xD7BBA91A, 0x58B0805D, 0x8B4B717A, 0x3EA3CEDB, 0xCB2BB029, 0x7BB4CC95, 0x72CFD083,
+0x383ADC39, 0x2C1AF964, 0x7C9A4501, 0x4E2071FF, 0x1DBED1AB, 0xFD68D9F7, 0x92A65E07, 0xE519434B,
+0x29A337AA, 0x4B5A1C79, 0x4FF264DD, 0x0273609D, 0x4C2899B2, 0x9B4F20EA, 0x37A19399, 0xBFEC3FEF,
+0x0B4DDC3F, 0x10BB0CC2, 0xA3040DC7, 0xC41B5FAF, 0x64B8055E, 0x3C3ED9C9, 0xBFC953D6, 0x459E1EF8,
+0x659FE5B9, 0x2B43142D, 0xFF799060, 0x894EA513, 0x337C887A, 0xAE0E992F, 0x8F8107B3, 0x41F3A4C8,
+0x76567F08, 0x93120548, 0x3276BFDA, 0xEED61A7B, 0x3D685340, 0xCDD755DE, 0x08576B33, 0xCBAC2237,
+0xB5A3105C, 0x10C807D3, 0x1B696EC0, 0x82D97227, 0xD8BDDB1A, 0x0C3CB277, 0x121EC191, 0xE3A12713,
+0x8B87B9CB, 0xAB83BF38, 0xE68B45BC, 0x45447204, 0x95462EF3, 0xEAE784D0, 0xDC206B7C, 0x35D890B4,
+0x4AB2D14B, 0x7C5B0CD3, 0xC5B10F1B, 0x767E599C, 0x67434A44, 0x3F388572, 0x934970DB, 0x7E212599,
+0x53351AC9, 0x07000BB6, 0x868941EB, 0x7B10D912, 0x41594DB9, 0x9C9B3474, 0x9BC88125, 0xDD3E832A,
+0x0718799E, 0x235720CA, 0x26B6473F, 0x60DBBD8F, 0x68A4317C, 0xED02F229, 0x18696FD4, 0x90FDDA73,
+0x703F7965, 0x925FC119, 0xE53A9486, 0x9DA65EE6, 0x4C336A48, 0xCDA044E0, 0x9DD663C9, 0x4D05E99D,
+0xDCA7847A, 0x5A4A87C5, 0xF3579A05, 0xE46B7E45, 0x9C79E10E, 0x8D939557, 0x26C81DA5, 0x5FF009FA,
+0x1628882A, 0x16AF3E20, 0x0007DB93, 0xE9849FBA, 0x6672F9D8, 0x14B56215, 0x07A5585A, 0x92AE6024,
+0x0A975C45, 0xA93B21AB, 0xAD562239, 0x31A5182E, 0x5474C91A, 0x6605894A, 0x044FB2BF, 0xC35198DD,
+0xCA247C94, 0xBE59F520, 0xE5E8F5CC, 0xC0A0B92F, 0x4D38EB5F, 0xBBE69229, 0x9E5FA556, 0x17D6316E,
+0x4F366F95, 0x5945D651, 0x37049586, 0xEE7CC72A, 0x39C3F4E6, 0xA7D6F94A, 0x6B0D3864, 0xBA5C95CD,
+0xF6DC6730, 0x62ADEDC6, 0x01227F91, 0xC7AFFBD2, 0x982EED48, 0xDB584CC9, 0x3D87EA3D, 0x1C21ABAD,
+0x81D3A766, 0x6DF2E0B6, 0x24F56EF5, 0xBBB79825, 0xA8C4F769, 0x5E980FD9, 0x66D32C1B, 0x94AF6D04,
+0x6A1F8A0F, 0x3F0A85FA, 0x25C56544, 0xAAFA195C, 0xCA3CFE2B, 0xA03C3DFB, 0x780F95D3, 0x757FD913,
+0x1DABA1AB, 0x5A7E1325, 0x55945472, 0x91435B86, 0x42C62ED9, 0x4FFD53EC, 0x2B665205, 0x9238633F,
+0x9EF64394, 0x44F2CA2F, 0x3240AA1D, 0x98DF7284, 0x7A8B119C, 0xA87732C3, 0xF093050E, 0x9CDB566E,
+0x29ECEA61, 0x77ACAD85, 0x533F9F18, 0x5C6A739E, 0xB828F2C4, 0xB3FD8CBD, 0x0C0E514A, 0x0A29173C,
+0x3EFC4861, 0xAA5E0F11, 0xF8BDD83F, 0xA23B996C, 0xF9D5C9CA, 0x297693CB, 0xF8FE4954, 0x6920A33F,
+0x29B7F300, 0xBE8A8D14, 0x17BE028D, 0xE7D0B881, 0x96314343, 0x6BDC223D, 0xB2E322ED, 0x65EB2768,
+0x01C6EEAF, 0x2A36A563, 0x8A1CD58B, 0xB104E910, 0x78A09546, 0x1464DCEE, 0x7872B43B, 0x72957462,
+0x786BAE6A, 0x7278ABF4, 0x076A9737, 0x3A31A660, 0xF1631F37, 0xB0CB6D81, 0xB126A8E9, 0xCE73197E,
+0xB1A30669, 0xB13340E3, 0x7B6A8E27, 0xDB7839C6, 0x593C1BCE, 0xCE88BA63, 0x74F128EE, 0x1B3654E3,
+0x72535362, 0xF4977975, 0xD94CD978, 0x56ECDE6C, 0xE9B42BD1, 0xF88A4605, 0x898163B3, 0xCFEC2231,
+0x9D4FAF5D, 0xBB5CFC77, 0xE3C5502F, 0x19F27BDF, 0x704BD4BA, 0xF1F4E6D2, 0x2B2AF12E, 0xF866F4A7,
+0x6A95A9A5, 0xE67B33C3, 0x38C02CAD, 0xEEC114BF, 0xC36951A3, 0x14EA898D, 0x641AF33C, 0xA7D56585,
+0x8C8EA265, 0xF24F450D, 0x3ED3CA7E, 0xB41F7987, 0x555C83C3, 0x44044850, 0x5B8579C9, 0xAA88077C,
+0x0C8446A6, 0x48E12E85, 0x8DE2BDB7, 0x15D187BB, 0x8A7B90B5, 0x6939CC09, 0x3E7689EF, 0x399C7596,
+0x715926D0, 0x1C910633, 0xE31A7110, 0xEAA42B49, 0x3ACA5E17, 0xCC44F48F, 0x23D8DF82, 0x22DE59A0,
+0x87272A1A, 0x46CEC045, 0x1690F25C, 0xF8835DC2, 0xB989BDAF, 0x4425EC6A, 0x384D36CF, 0x65AB9326,
+0x47AD6505, 0x1DC4EEEF, 0x49255EE7, 0x6CB64560, 0x2ED76932, 0xF04922F6, 0x8421BF4D, 0x41D2D6DA,
+0xD53F7CF6, 0x6802EFCA, 0x37FCBE31, 0x1E43C52F, 0x4623BA12, 0x0126D395, 0xAD3FE676, 0x739B39F2,
+0xDF20907D, 0xEECC9B0A, 0xC065651F, 0x30FBE910, 0x53A86697, 0x22105039, 0xB199A426, 0xF3A7F9F1,
+0x15E2C74B, 0x9AE982FC, 0x00FFF6E9, 0xD5F448DA, 0x3003770C, 0x4E331DF5, 0x6F677475, 0x0881E1D0,
+0x00FBF7DC, 0xD3C9E7CE, 0xD1D11035, 0xFAEDC90D, 0xFA3EED56, 0x06B57A4B, 0xD646EBC8, 0xBFE4F78A,
+0x4A07E674, 0xD1702F2F, 0xD3E3191A, 0x9F3253D7, 0x70D41744, 0x33D140ED, 0xEC4EE0EF, 0x64597171,
+0x6E15D910, 0xD19D4F63, 0x93B1FFC8, 0x9CBEE1A5, 0x1D39C0C9, 0xA415837D, 0x9E421AA1, 0x6D1E6FE9,
+0x73942A3E, 0x56017362, 0x520E7694, 0xE00D5333, 0x67DC4042, 0xE59F187B, 0x0A380B5C, 0xCC1EFBBC,
+0x53AD81D9, 0xD31467E6, 0xA2BDCBD8, 0xCAC2F551, 0xB0F7B1F0, 0xD1710874, 0xFB6E5792, 0x52AD7255,
+0x5382E5FE, 0xFBD655DC, 0x4BFDC4D4, 0xA6FADD61, 0x1D594336, 0x89511D41, 0x7A32CCA5, 0xF2925676,
+0x7B317C94, 0xC7DFF130, 0x6404A6F9, 0xEB5064B1, 0xAC46A221, 0x9268BD0B, 0x42C2A175, 0x127EE934,
+0xDD496F10, 0xE46A08D0, 0x248FC459, 0x964FBB90, 0xD695C5F2, 0x71C6A17A, 0x07D62A52, 0xE7FF1251,
+0x55F0268E, 0xA8D22C05, 0x0605720E, 0xDD8A22DB, 0xAAB2DBF6, 0x30CEBDD1, 0x1688391D, 0x332EE9A1,
+0xF9E09F1D, 0x9A22B5C9, 0x692B77AF, 0x9C654C31, 0xB9EA7EF0, 0x380CDF0F, 0x2FE02B88, 0x38C2EBB3,
+0x442A90E6, 0x81BE7144, 0x01044315, 0xC3777C9F, 0x86A8943C, 0x4BE33934, 0x7ED33D06, 0x7114EB7D,
+0x685A3A5E, 0xFB145596, 0xAB421391, 0xA16AB645, 0x17200117, 0xFFF1B70D, 0x83DEA97E, 0xA7242D65,
+0xACAABD4F, 0x6A450DD6, 0x5D0D228F, 0xFCF6216E, 0xE1D1193C, 0x1585004F, 0x2CB8C10F, 0xE3F3F074,
+0xD409A2A3, 0x53AE4B5D, 0x2EDC1E69, 0x8DE107BB, 0x774F5029, 0x97680454, 0x57CF5E70, 0x6ACA0BE1,
+0x90B3EF93, 0x657A93D1, 0xE17E38B2, 0x481B001F, 0xE394EBB5, 0x6A541747, 0xF3F79BD8, 0xC4E6215A,
+0xC609D041, 0x5FE8C56E, 0x691D07F7, 0xA9600E77, 0xA166835D, 0x11A553BA, 0xE6571063, 0x1FA416A5,
+0x050BCAC2, 0x36DABD6D, 0x660ED00A, 0x77A8D6A3, 0x2E46B647, 0xEEB3E375, 0x0A427F1B, 0x8164E201,
+0x31799502, 0x0731138B, 0xCBAA4E12, 0x3344B102, 0xC78192AF, 0x8465AD74, 0x181CF2B8, 0x8543B56F,
+0x60655BA9, 0x80A9A71E, 0x5736C41E, 0x8C0A479C, 0xB30FF21F, 0xFB7EF0B9, 0x6025FD7E, 0x2B5FC8A2,
+0x81181C5A, 0xC270452A, 0xFADBE423, 0xAEA9CA39, 0x623D69AE, 0x9B99E37B, 0x2BA826B1, 0xA8AD9F9F,
+0x02C6938F, 0x638C05A2, 0x746192B5, 0xC389891C, 0xF021D24D, 0x94876F6F, 0x329C4A0E, 0x54D6E605,
+0x354C0753, 0x8CFF7AA8, 0x5E1BDF69, 0x4020F512, 0xDF24E3A1, 0x4D71969A, 0xFD9DFDD0, 0xCEFE46C5,
+0x179C4AEB, 0x771EE35A, 0xC53A2D0B, 0xB3D69318, 0x4FB2A022, 0x50FF78A2, 0x8948F69C, 0x9675CBC2,
+0x3E26C86E, 0x5250995B, 0xEF4DF3EE, 0x1EE61128, 0xFF87D7E9, 0x4D11510C, 0x7C804D7D, 0x59691EF9,
+0xCFC52782, 0x79735DB8, 0x501FC82F, 0xEC0D8B1C, 0x978A2865, 0x1EA6E96B, 0x08B9BD18, 0xF15EE34A,
+0xDAC34333, 0x120A8618, 0xF46481EE, 0x6CC9B699, 0x0A8FD1DD, 0xD8A94A79, 0x702458CB, 0xFC05B7FF,
+0x70E852FA, 0x4EBDE17C, 0xEBA959B3, 0x465703AE, 0x71179F51, 0xCF71ADD1, 0x2C4E6DC1, 0x294E7534,
+0x1456E060, 0x20983352, 0x5E4E3EB2, 0xD865DB3C, 0xCA64BF3B, 0xBC7690E6, 0x87E91433, 0x29A513E0,
+0x4C7E54A6, 0x74E3B62B, 0x3B504089, 0xB2A03977, 0x3C3E7EC6, 0x17AAF309, 0x43106BF2, 0x619A5479,
+0x018D43E8, 0xDD345FA4, 0xFD0C14DF, 0x1D99F226, 0x75229DFF, 0x93AF996F, 0x141B03C6, 0xEAD59CC3,
+0x16CD8038, 0x95F205BF, 0x7AB27B9C, 0x158A5AF4, 0x5C9A9926, 0xCF649249, 0x1212126E, 0xF102552C,
+0x27E1CBC3, 0xAF8A4939, 0x8677CBD2, 0x2151DCA7, 0xB1AA58BA, 0x199C2FC4, 0xC90E8DF0, 0x77A9D1DF,
+0xD82AB97F, 0x9A6C3AEC, 0x5A316A8B, 0x174E3095, 0x7A5E3878, 0xEE851B03, 0x1BA83C0C, 0xEBDB9A89,
+0xDC4111BC, 0x1A7243FD, 0x5827078D, 0xDB1E1A86, 0x30355C3B, 0xB602D570, 0xA69D9E5F, 0x8EBD061A,
+0xAAD79A92, 0xD06D89D1, 0xC206BF02, 0xEC1D851A, 0xBF1313AC, 0x584F5E23, 0xC4A9EB23, 0x6A3E8E9B,
+0xEA42B018, 0x538445EF, 0x68A247A5, 0x2B292FAF, 0xD146ED1D, 0x9C827E17, 0xFAB024D7, 0xFB8A6FF4,
+0x27493148, 0xBE213AE2, 0x65A5ECE6, 0x9AF23D17, 0xBC32C4FB, 0xD046EEC3, 0xE246DFBC, 0x6F38860B,
+0xF61964F6, 0xA007D6A3, 0xDFE8B127, 0xECBD9B96, 0x14957673, 0x08B195C4, 0xCCF71DDD, 0xBEE95090,
+0x7167E7EF, 0x76CDBD94, 0x1319AD09, 0xA7C7846F, 0x490B6533, 0xFCB0F3BE, 0x58E66BB7, 0x379267F0,
+0x365F2CC5, 0xA1F805DC, 0xA6BE446C, 0x051FD8A1, 0x839C0C37, 0xD4209230, 0x67686E75, 0xAF8F88F6,
+0x9D98E56F, 0x7234B210, 0xCD4193B8, 0x5D62B97F, 0x4E10714E, 0xB67A5DAF, 0x876F76DF, 0xFF553BC9,
+0xD3BE9F1D, 0xA398F094, 0x5A8D94B6, 0xE0EABE75, 0x18EC78E8, 0x5B68D244, 0xD2C8DE2E, 0xF11AF35D,
+0x6B55B1F7, 0x678FB175, 0x3E0DB0AB, 0x94449DC1, 0x1551017E, 0xC0DEE9A8, 0xB1085563, 0xD31C7502,
+0x4B1E0F39, 0x7717479C, 0xDDD9F5E6, 0x880DBB2F, 0x9D8F7B40, 0x34437CE5, 0xB07748D5, 0xD6F87073,
+0x74331D73, 0x4C4AAD9F, 0xEFF531DB, 0xF46F17C1, 0x71A4FCAE, 0xFC09B342, 0xC2D6ECB1, 0xCE269157,
+0x3A582D37, 0x83582104, 0x451AE876, 0x33AA636D, 0x4390B7AD, 0x170DDFE1, 0x7F265602, 0x297BF606,
+0xD0B9C217, 0x52DF8D0B, 0xF1BD8002, 0x9CE34A1F, 0xF36C9AF3, 0x9545D9F4, 0x1BD02E1A, 0x6B315A27,
+0xACEBF9A5, 0xF7B42004, 0xBB331E1D, 0xF3FC0CF4, 0x27E1E6F3, 0x7E999802, 0xC9062BBA, 0x38DFBAF1,
+0x8056D51E, 0xA2A6BE65, 0x7436BEB5, 0x4A6DFE47, 0xD5422CDA, 0xEE324AC6, 0x61BDEBD7, 0x638A0820,
+0x9161B1B5, 0xBE5D0B87, 0x4F487B05, 0xE9913AC9, 0x2B12B8E7, 0xB2A0183F, 0xF33E05BE, 0x86277761,
+0x3CCC30F2, 0xCC5D39E8, 0x89D199BD, 0x6AA1AA67, 0x84A2EBF8, 0xFD588F0B, 0x61F6982B, 0x875FABC3,
+0x2FC3DC57, 0x34756957, 0xD434CD1E, 0xBE0825F8, 0xE91E3FA3, 0xDF97BD36, 0x1A381106, 0x824D65B0,
+0xC5C3D564, 0x740682B4, 0x848540EF, 0xC6B585A1, 0xB3C43771, 0x6DC2C375, 0xB151A9B5, 0x5D663B71,
+0xE2934F1C, 0xE3AC876B, 0x6FFFF7CB, 0x12B4D4C2, 0xC9B18411, 0x14224830, 0xFA7CAF09, 0x95F509D6,
+0xBE44BCC8, 0xD2A2A0D0, 0xAAE8AFCC, 0x007A5BA3, 0xC54FD4AB, 0x9AD2CCD2, 0xCF239A96, 0x9D8E51B7,
+0xAA3FF2D4, 0xE3AFAF35, 0x7617F673, 0x3D750FA1, 0x4F816811, 0xE799FDC0, 0xDF04EA1A, 0x42D810E2,
+0x8B027EB5, 0xC0A32DAE, 0x3F3B1A31, 0x884B2FF7, 0x4C345330, 0xB8736960, 0xD11E812B, 0x091C837C,
+0x79E585C8, 0x18C45FF5, 0xF953A255, 0x29C34483, 0xA26A0F41, 0x3875B65E, 0x7CB1A0E0, 0x5E45AF40,
+0xF1358002, 0xF5E3E3A2, 0x77014595, 0xC9FF75AA, 0x21919757, 0xB1164C35, 0x39E2223D, 0xC9D5CF04,
+0xAC2BE479, 0x4676BBD8, 0x4BEDF708, 0x2C07A976, 0x3FD465EA, 0x65D56844, 0xE1E3F6EA, 0x5F628402,
+0xF7142AE8, 0x06DDDC33, 0x251A9073, 0x2B212C68, 0xE0107681, 0x9658585C, 0xEAA63076, 0xA20D245B,
+0xFF6438F5, 0xF93126CC, 0xBD8AFB59, 0x246EE26C, 0x304A8E08, 0xA010EAF8, 0x26FAD8CF, 0x93690ABF,
+0x585DB8E7, 0xCE3B988F, 0x59A01C77, 0xC21935BD, 0x6E7BD93A, 0xDE8ADEDB, 0xA1C066B6, 0x06366652,
+0x4B327EE8, 0xD987A176, 0x69718F4C, 0x4F3ED5E5, 0xA9BE4364, 0x5E06603E, 0x53B7C01F, 0x1DD963A3,
+0xB0F50BD8, 0x5D3EA123, 0x1C435137, 0x88E078F3, 0x20099DA6, 0xB7BE062F, 0xD23FC53F, 0x026B53EB,
+0xAC8A273B, 0x9620A601, 0x114AFC34, 0x0EED03FD, 0x25558493, 0x8DFC8371, 0x60FD9091, 0x33C4C624,
+0x44AC9B41, 0x026942EF, 0x64774ABC, 0xB135F724, 0x9545E2D2, 0x13B3D916, 0x1F604953, 0x75584D1A,
+0x9BD9AD34, 0x3E51F9E5, 0x7DA2955D, 0x3B4092A9, 0x500027E9, 0xF08E729D, 0x342B4034, 0x9E69AEA9,
+0xD444D399, 0x0CD6A4D0, 0x83D1594E, 0xAC8261BA, 0x80E213DC, 0xCB7BFCD0, 0xD9EA5F4E, 0x8ADDC4A6,
+0x62B55624, 0x01A09EA1, 0x4EE9A1B7, 0x9FE23031, 0x6CE6793B, 0x8ADC85C7, 0xA7EE9674, 0x16EC31E9,
+0x9DD04D09, 0x4B17226C, 0x3F8FF58C, 0x2C403556, 0xF307EDDA, 0x57208C27, 0xABC6C4BD, 0x6795E1FE,
+0xB728C62E, 0x52BDF6A3, 0x725B60D2, 0x07AE9560, 0x492F1C5B, 0x91463D76, 0x4E394D43, 0xA99E8C33,
+0x9D7DFC1A, 0xADBBAEC1, 0xE5FBB0C5, 0x9F773558, 0xE08AB23C, 0x3DB41147, 0xF0818607, 0x4A794278,
+0x1F0CDABD, 0x24425C3A, 0x5F90A257, 0xBF499B72, 0x54F679FC, 0xC8791FE8, 0x9774A855, 0x81873DBF,
+0x15C589E3, 0x0D507B96, 0x95CD1D26, 0x993435EB, 0xD798FA12, 0x51960185, 0xEE625B44, 0x5C3DC7D5,
+0x6F17B6F8, 0x00AEC1E5, 0x05689B37, 0xECA19CF0, 0xDF0216A5, 0xF025F309, 0x565BD469, 0xC10723C4,
+0x79D05693, 0xA12757AC, 0x8787FD3A, 0xACC36B95, 0x23C47A37, 0x4BE5990F, 0x3CC5D7BE, 0x61B124E2,
+0xCCA82764, 0x2B9141D9, 0xF82EDC96, 0x00346DB2, 0x02F7B39F, 0x133B9F48, 0x0E49416A, 0x9D7411BD,
+0xEFE69778, 0x68574F06, 0x6EB645E7, 0x07DB7208, 0x8AFC0AA1, 0xDC15B1C1, 0x6A9DCA34, 0xF4D9BC9B,
+0x5F9B3860, 0xE7BAEA1D, 0x48F44B57, 0x756B3C2A, 0x321970B2, 0xE704E6FC, 0x1519CC77, 0xAABA7039,
+0x77853269, 0xA62DDAD0, 0x3B39D7A4, 0xA0ADC780, 0x2729BD11, 0x5CAD9FB4, 0x1720AE5C, 0xBFE9D564,
+0xB5E87625, 0x843F906A, 0xC8BA9194, 0xA75DA618, 0x0A4BE5D1, 0x8AD19DD8, 0xA7F2CA28, 0xAFDD6382,
+0xFDEE24C1, 0x6CA6FCE1, 0x9881E4D9, 0xB25BA59F, 0x3BFFC178, 0x6B12E50A, 0xCF4C4137, 0x9943532A,
+0x31712028, 0x9E1786F0, 0xCC4D9AFF, 0x2E6DC8AE, 0xBA78CFD7, 0xE38F1CED, 0x0B537CC2, 0x42210E19,
+0xDF7A2775, 0x2E208E49, 0x1F7A18D4, 0x30A0E0DA, 0x0DACDB8D, 0xA2487FCE, 0xB11D0018, 0xA73748B0,
+0xD7FB106E, 0x12135855, 0xA0A7F512, 0xC08618F9, 0x2E0A5850, 0x6D04F872, 0x29678E8D, 0x06A88F95,
+0xA7831CA0, 0x592E9D68, 0x751F858A, 0x424C85E2, 0x878CE8AD, 0xAFEE0DA7, 0x070F909A, 0xDF73045F,
+0x98D7E232, 0xE669DE8C, 0x7930359A, 0xB16461D2, 0x42E66397, 0xE0D03244, 0x109D7102, 0xCE342B6F,
+0x32DADEFA, 0x8C0BB116, 0x5FFCAEFC, 0x80285206, 0xFBA9E169, 0x0D7D4A43, 0xDB2BE8DD, 0xB9B9FCF5,
+0x70E990C3, 0xB25DEC08, 0x4F50010D, 0xD471FB00, 0x2B3BFB93, 0x68362B8B, 0x1E206AF3, 0xFC34D6AC,
+0xE0F8DD2B, 0xCB4D6F8A, 0x47A631EC, 0x9629061D, 0x96FC6586, 0x916172F6, 0x7B71CFAD, 0x3FF32F63,
+0xA7C33931, 0x5E077F3E, 0x66FE1878, 0x52657E10, 0x419A84D3, 0x4C3F45A8, 0xF1DAE237, 0x0D30C761,
+0x12BDB699, 0x3710AF54, 0x254CBD73, 0x8CC822D6, 0x5D802512, 0x8BD390FD, 0xBF9D5C87, 0x94CDD137,
+0xAB8E8847, 0x84E5CA5C, 0x52BC7389, 0xC8E2007F, 0x70DF1552, 0xD63EB947, 0x4F3C2286, 0xB619262B,
+0x6071EEE2, 0x5D491F34, 0xB6494AB4, 0xF088D460, 0x3D13A312, 0x6CF965AE, 0x9E6461B0, 0xDB2C6588,
+0xECBBCB27, 0x5F9280ED, 0xB2F974F6, 0x163078B2, 0x730045C7, 0xC04941C5, 0xEAB0F160, 0x3D992DCB,
+0x0AEAFB69, 0x8F2C2A3A, 0x44E2A927, 0x7B54E6EF, 0x9485BA4F, 0xEEFEE086, 0x09A382B9, 0x4C9285F3,
+0xD265A767, 0x6F8D70B2, 0xA897C830, 0xEA841571, 0x9D8DD923, 0x6286C776, 0xBB8ACD35, 0xB656A315,
+0xB0D33881, 0xF4B186A6, 0x67462B96, 0x62DCF308, 0xE4ED27F1, 0x0F64FEC7, 0x9FB059A3, 0xE050E30A,
+0x7BE58E65, 0xCC6EC8B3, 0x043F3271, 0xBB1A3703, 0x6BAA1C54, 0x5466B0A2, 0xA5FD0FEE, 0xAF0808A5,
+0x4C19E86A, 0x4E69D64C, 0xB788CDA8, 0x10DD5926, 0xDFEB238C, 0x091C95A6, 0x8E732125, 0x4F2D4A7C,
+0x63328F34, 0x3C7009A1, 0x4E12837E, 0x903BBAC6, 0x92D6B227, 0x9DD5A2E8, 0xDAA38799, 0x55CB9D54,
+0xC853767B, 0x0E2B32E0, 0x47B41ED3, 0x87ACAD80, 0x4CA2667B, 0xA61C1CB6, 0xA67A6C7F, 0xD83B3602,
+0x0F97D222, 0x63556658, 0xB2E5C01E, 0xA61B8534, 0x30407CC8, 0x14A95106, 0x72737AA0, 0x81DB6B44,
+0x4B0C4BE2, 0xDF075B63, 0x64279384, 0x3B501AE4, 0xE823A604, 0x554DD8E7, 0xAAD1117A, 0x94254DC0,
+0x786CBC50, 0xC06F5BD1, 0xD80F4942, 0x7760208F, 0xA1A1C612, 0x61B5DEEE, 0xAA0CC89F, 0xD29E06AB,
+0x3F97837B, 0xA1D65CBD, 0x35B9264F, 0xF16C8597, 0x095BFF89, 0xCEF88721, 0x6129C9F7, 0xC2E6F318,
+0xE37574D6, 0xC251CDD2, 0xAF632BCA, 0x052B535A, 0x86988EA7, 0x1B60B35C, 0xF8995F71, 0x25C7856D,
+0xBAF1C488, 0xEAC7E31E, 0x362325B7, 0xB7915814, 0x14CC8C7B, 0xA177C2B8, 0xB8CCAFA6, 0xD538B353,
+0xD42584A6, 0x25835233, 0x42A337A1, 0x0245940F, 0x1FF12AF9, 0x4B910E1F, 0xFAE16034, 0x85938567,
+0xAE985E6F, 0x47F4C93B, 0xF8F5A780, 0x8705E88E, 0xFEA2DE06, 0x9A5A1E8F, 0x85472D44, 0x2D088799,
+0xA0FA5714, 0x7C314E08, 0x9DD61B93, 0x4C7F80F6, 0x03DBC210, 0xB199258F, 0x88454BF4, 0xE2DEF6E5,
+0x99A8341D, 0x6D7C95B8, 0xCBD7F51E, 0xEB6025A7, 0x6A22AA5C, 0x0E2FB460, 0x9C8F2424, 0x117DD5FB,
+0x840B40AD, 0x50F88719, 0xD8F187F9, 0x5812BB83, 0x3AB49872, 0x7EDF9456, 0xBEE01609, 0xF5F1E5A6,
+0x9D3356DF, 0xB2980589, 0xEF1D5759, 0x575799A6, 0x7793C1EB, 0x9AB52FF2, 0x2933D526, 0x107D9154,
+0x7D3FCDC2, 0x56170396, 0x5CDF7437, 0x416DEAA8, 0xCCFDD0A1, 0x22FEB480, 0x32FC5FE2, 0x22E5ABCB,
+0xA1005683, 0xE0BC6B1F, 0xA1D89A3A, 0x7B0AEA9B, 0x5ADE1899, 0x97D78E0A, 0x40E6C728, 0x94D18FE3,
+0x50DA9D62, 0x694DDC5D, 0x1DAFACA0, 0xA98C9572, 0x0EAB70D0, 0x4981B0D7, 0x7E615D02, 0x9E6238AD,
+0xF1EFA015, 0xEAF7BC10, 0x8F574B47, 0xF40488A7, 0xEAED3611, 0xA62577D6, 0x89C1AF69, 0xDFF1528C,
+0xDA7FBCA8, 0xF9035D10, 0x49EDC3C3, 0xFB0D5907, 0x5284BE02, 0xBFA7C8D4, 0xBF3E5A04, 0x3AAD9526,
+0xD3AF3CCD, 0xD24DD20F, 0x904CA600, 0xC7005CD3, 0xAB0ADFC5, 0x9E60086D, 0x9208DBD2, 0x8E6D4D74,
+0x1BD58AFF, 0xEA48CBF6, 0x46E2E1B7, 0xA91BB158, 0x49AEAFBA, 0x86E1D48A, 0x45CE2C95, 0x3329A5DB,
+0x40425983, 0xF90F6473, 0x646D4DB5, 0x3DA762DB, 0x0A51518A, 0x56641A31, 0x699215A5, 0xCEA73B80,
+0x6E3F2569, 0x4D7BF774, 0xEB7C4256, 0x94CC002C, 0x755B08DF, 0x9D323344, 0x3143C16B, 0x392CA8EC,
+0xB5341BF6, 0x9973425D, 0x8BD6C798, 0xAA788E89, 0x1FA794B5, 0x403092BE, 0xAABB33AA, 0x6EBA4997,
+0x7EA6640F, 0x7B4C74DA, 0xCD11770D, 0x0CDF311A, 0xE51791DA, 0xEA835850, 0x18758898, 0x13D13CD2,
+0x40EE3C83, 0x8182E386, 0x8ED5E241, 0x28AD7D67, 0x39ACEA58, 0x4CE9A4A9, 0x338BE5B7, 0x0F3ABEC5,
+0x7CB5670E, 0x2B11EC76, 0xB0CEB2DA, 0xE3F87BDE, 0xB16614DA, 0x95EF8043, 0x9A45BF93, 0x740359FE,
+0xC68CB359, 0x8D73657F, 0x23EED822, 0x2635BECF, 0xCEE3799F, 0x7C04B9BA, 0x94A8C967, 0xB617D3B4,
+0xBF7FF2A4, 0xADFB83FB, 0x5DF32F72, 0xC2610488, 0xE52ACF62, 0x9F348513, 0x751E1EFB, 0xB78D9466,
+0x4BD1E030, 0x5FA2101F, 0x587E9FD2, 0xFEFCA956, 0xF2A61295, 0xD0984009, 0x44974206, 0x4150E8AA,
+0x1035943D, 0x9B449F9A, 0x8D008CA8, 0xC04D02CC, 0x86B60734, 0x8F4FF29B, 0x5B19C4E7, 0x7392D6CC,
+0xB9E4556A, 0xD4EE923A, 0xE6FFA0A3, 0x0932DC34, 0x9C8E69F9, 0xD3440710, 0x2E0ED777, 0x0242C402,
+0x7259BAEF, 0xBF93F519, 0x12C2FB87, 0x821A11AA, 0xCC2FEE64, 0x29E6A55A, 0x09ACDA34, 0x878E4627,
+0xF3510C71, 0x286A9723, 0xAE481AE1, 0x155FD639, 0xD9848A85, 0x168AE2B1, 0x4383E0F1, 0xC7850047,
+0xBE03B526, 0x402143C0, 0xB2B68D2C, 0x8896B00F, 0x99AF1408, 0xB2C0941F, 0x995D66C1, 0xA432FF7D,
+0x56172020, 0x5D99A17B, 0x683700D4, 0xFD7AE431, 0xD080E08D, 0x5A5FDE45, 0xB39FF1E4, 0x2827D84B,
+0x1C005883, 0x815A28E0, 0x518B1864, 0xA615F733, 0x580F3338, 0x68E5AC7F, 0x5E621923, 0x9C2AE09E,
+0x1165E3BE, 0xEF936C1B, 0x6E7A0B28, 0x996A6E4A, 0xBBA480F5, 0xE3C7B777, 0xD9BC5319, 0x2D12A122,
+0x078B6790, 0x7C739790, 0x20F54004, 0x34ADF351, 0x85411225, 0xAE11853F, 0x3189B94F, 0x392A9EBA,
+0xDCD77224, 0x612F5C10, 0x634BBD60, 0xD12B3122, 0x1BABCD90, 0x636D32F9, 0x60335813, 0xF8D50FAF,
+0xB8A750F6, 0x27F2528D, 0x07613594, 0xDC6243D3, 0x606B5C03, 0x210150CB, 0xC6CE96B0, 0xADA5DA56,
+0x466F428F, 0x1C1A05A9, 0x75424D31, 0xE953EB16, 0x0C2B30A1, 0x31011439, 0xC224139D, 0xEC216836,
+0xAAA57A1C, 0x3B114FC6, 0x42D414A6, 0x9425552C, 0xE7DF5204, 0x5A2BEA23, 0xDD9D125E, 0xB5352B96,
+0x9B6639A1, 0x16F68632, 0xDC7AC38B, 0xD11C923A, 0xEF5A4206, 0xE12A89BC, 0xDFEF828A, 0x14F048B9,
+0x98E54548, 0x6A25722E, 0x7EAF886D, 0xB906F1FE, 0x5812788D, 0xE67F1D95, 0x5D449271, 0xA441A541,
+0x1F7A32DD, 0x5CC17E8F, 0x0FBED091, 0x4061E141, 0x6D5C44AC, 0x65EE9A63, 0xEBD2D2F4, 0x6A787116,
+0x945C6F0C, 0x57781620, 0xB866A110, 0x4A962F52, 0x8F1D4767, 0x8B2324B9, 0x72C60D18, 0x9EEFCC48,
+0x475E332E, 0x1C0BBAAD, 0x51A9D7D4, 0x4AAB2808, 0x22C61026, 0x470CB6BF, 0xA98CD3AD, 0x7AD89D4B,
+0x9E242191, 0x781B9DC2, 0x780AAD91, 0xE5410C9F, 0xDEC41985, 0x02B64FBF, 0x4BE54437, 0x98A3914B,
+0x292CED1C, 0x3555B84F, 0x3E1F9BBC, 0x3582311C, 0x7B20FB3A, 0xB253C5B2, 0x5E8D83DA, 0x3552F438,
+0x7DE1B26B, 0x84CB5F3A, 0x9EBBAB9A, 0xE3649189, 0xAD089533, 0x80CBE90B, 0x905B87BB, 0x3AB4601C,
+0x073C09A8, 0xF2BB4D09, 0x99A51505, 0xA5FCEEEE, 0xB8671663, 0xB363186D, 0xA05EB4A6, 0xE3739E86,
+0x9CB24886, 0x301F7D67, 0x4738B464, 0x336CDCFA, 0x72227D8A, 0x3C45222D, 0xDF67027A, 0x874C2D98,
+0x8989C1C4, 0xE7C67CCB, 0x1FC1542C, 0x070DACD3, 0x39AF20A2, 0x81A690D0, 0xAE0E1C60, 0x3C93E1BB,
+0x1623E696, 0x86068093, 0xC934EA82, 0xA82D38A3, 0x9E1CE1B3, 0xF33EAF60, 0xB7C11C3B, 0xDABEF7F2,
+0x7314B450, 0x568FD3C5, 0xD42EA872, 0x14A78E18, 0xF3B95B98, 0x8A8E20D2, 0xAEBE296C, 0x26AAC52A,
+0x38896BDE, 0x4759C5B3, 0xA3534180, 0xA6163230, 0x3CF8EFAD, 0xB1408956, 0xCF3DA73B, 0x747E895E,
+0xF6179B84, 0xB1F33104, 0x8B8B8D76, 0x798392BC, 0x66B3FE37, 0x0C9FB0FF, 0xDE02169C, 0xF63B6BA6,
+0x278CA0D0, 0x1B839961, 0x9E8FB765, 0xFA0E90F1, 0x7D3D2144, 0x67100ACB, 0x87D38AB2, 0x1AEEC082,
+0x6620E3A7, 0x8968D7DE, 0xC6E9A644, 0xB1CF8EB9, 0x8CBE16AC, 0x8129E9F1, 0x55D6ADB8, 0x492D2D12,
+0x628CC5A8, 0x3420478D, 0x2C7A1B92, 0xBA4F6EF3, 0x7E0F88CA, 0x2C48962C, 0x7BD21552, 0x358C1ABC,
+0xA077C485, 0xD5AF6289, 0xB3554C83, 0x82763CE1, 0xDCA47801, 0x6C737358, 0x7215F747, 0x4AB859A5,
+0x63A42EDA, 0x7ECE75D8, 0xA289D9B5, 0x93A18E7C, 0xA7FCE5F5, 0x7ED406BB, 0x9AFE5EFD, 0x6E88E4BA,
+0x5D123BEE, 0xA10D62DE, 0xA3859628, 0x182CDBFF, 0x9EA7879C, 0x56DBFBE6, 0x20317634, 0x89F4E70A,
+0x65597020, 0xEB7BA8B6, 0xD34B77A5, 0x3BF26558, 0x7787538E, 0x6A7F1AAF, 0xBBF4E78D, 0x584BA8C5,
+0x2D43EB48, 0x36804640, 0x006B9320, 0x3D484A13, 0xAC66A974, 0x01AB615E, 0x135323DC, 0x5715A472,
+0x362CF0DC, 0x66FE0552, 0x45258FB9, 0x13E7E94E, 0xCB80D584, 0x4E496F96, 0xCE4D8805, 0x997F831D,
+0x799EF62C, 0x99CA3AC3, 0x5422BDB1, 0xB8BCD281, 0x9ED35575, 0xC91AA4EC, 0xDFF9A740, 0xE5891809,
+0x2EBECFAA, 0x4346B15B, 0xDE484FB5, 0xC9B304D1, 0x9655FD60, 0xC1817A85, 0xBF2AA87E, 0x97403B4E,
+0x22980E8E, 0xA2D6E124, 0xE9C783F2, 0xA625EFF0, 0x20992E90, 0x6C266A32, 0x671B189E, 0x032C9B64,
+0x75141BD2, 0x616E3381, 0x6E38A06A, 0x14E697B2, 0xA418B59D, 0x5BA84A4D, 0xF67893BF, 0x8049B3B2,
+0xF29DDDC3, 0xDB62EAFD, 0x4950B931, 0xC3E77C27, 0x2CCA07F0, 0x3B691D0F, 0xB597CB90, 0xB6CFD5C7,
+0xF73C28B7, 0x6328AA3E, 0x40388959, 0x14E6346B, 0x00B8ECA9, 0xF0295397, 0xA4544930, 0x0BDDBB1F,
+0x156F748C, 0xEC4F8D32, 0x277138C9, 0xCB9ED21B, 0xAA86FA12, 0xCF2F6ABB, 0x2BB757FA, 0x7AD28D05,
+0x2197C031, 0x2FAA779D, 0xC46BFF0E, 0xF3B85677, 0x5589313F, 0xB33E8DA1, 0xB1F4A782, 0x537DB0F0,
+0xAA1FEE5D, 0x7E174F11, 0x8BE42790, 0xF13899EA, 0x7190C7E4, 0x47F744A2, 0x39152AF1, 0x7FF63FD1,
+0x932CEFF1, 0xF321DF0D, 0xC775279F, 0xC8D96C8F, 0x067F85A3, 0x8E465747, 0xD5102265, 0x3DA69AD4,
+0x978EB0ED, 0x4760FD4C, 0x4E09A30C, 0xC6536C94, 0x38A83E00, 0x9E055EED, 0xDA9FBA2A, 0xE0E0E375,
+0x490B2D47, 0xE4F78BDF, 0x95150A04, 0x09CD12C0, 0xAF508AD1, 0x2CE9AB81, 0xA83B3947, 0xFF1C8260,
+0x83F43B50, 0xFA56F5AC, 0x47ACC0C7, 0x88B10418, 0x72B15484, 0x6292D2CB, 0xBED229E6, 0xEC9E774E,
+0x5DDF6E22, 0x49D18F84, 0xAA851075, 0xDCDDC904, 0x221E70A8, 0xCF034A13, 0x1FD64E86, 0xECE5A61F,
+0xB0CBC3FA, 0x510E1BCC, 0x885A8593, 0x79F892BF, 0x67135920, 0x0A8E33C0, 0x5BBED54A, 0x62AAF4E1,
+0xE2EF2BD2, 0x61B47B64, 0x5FBCB603, 0xC78A28E8, 0x4CE890D0, 0x0DE8FBF9, 0x1240E4EF, 0x7467594A,
+0xBEC42B69, 0xF96181CC, 0x2A4FE2EC, 0x22A66E71, 0x3FC5F0A4, 0x1C10E555, 0xC464F05F, 0x88FF4F3C,
+0x594D962D, 0x8874F41F, 0x68B47BF1, 0x43EAFDA2, 0xECFEC208, 0x8BD77720, 0x17426BD7, 0xA0B94822,
+0xBED6EDFD, 0xABEED4CF, 0x1AAD0FA9, 0xB5CFE53E, 0xDD078817, 0xDF6FB310, 0x542B1385, 0x98814DFC,
+0xDE7C87FE, 0xE9017DAD, 0x5C56896B, 0x261299FC, 0xC9451298, 0xB257BE6E, 0xE82D44B6, 0x5C481FBE,
+0xB75E037B, 0xF159EFDE, 0xF7914EA9, 0xECCA6E30, 0x57C7C38E, 0xDD9E9629, 0x0699DCB9, 0xCB8B901D,
+0xB692761E, 0x9480F302, 0x1C9AF163, 0x336461F9, 0x0CA713A4, 0x70F23D11, 0x1F4D7AF3, 0x9B6A7074,
+0x69747CA1, 0xD19DB888, 0x7EF5830A, 0xF872D4DB, 0x0B55EF1B, 0x79C4D1B5, 0x886F01F6, 0x90EEBAE9,
+0x09DB0C20, 0xC6B146F5, 0x3B2BE18F, 0x66AFEE6E, 0x53B231D5, 0x4F87C0A5, 0x8E8D01BB, 0x87C268FA,
+0x56169426, 0x580A39F0, 0xE0CA2289, 0x02FA1A13, 0xD88FA3BD, 0x65C79CAE, 0x2C1D4DC8, 0xFD16A400,
+0x66141D4D, 0x7C9543C4, 0xD3FF9D67, 0xB5035B84, 0xBBFD54F1, 0x5BA880E6, 0x8F722880, 0xE695336A,
+0x6605930E, 0x3D099EEC, 0x58FF5747, 0x373605A7, 0xA0BEDD1C, 0x82AB8460, 0x53276998, 0x4B52BED9,
+0xB8EF3EDC, 0x214F7181, 0x2CCF1B4E, 0x96E4B344, 0x0EF32A81, 0xAB89F0B6, 0xC2508950, 0xBF2E242A,
+0x9CF8606C, 0x6C6A8545, 0xDD62924E, 0x2D7C041E, 0x3E1621A8, 0x07FE338A, 0x04885B3B, 0xA9376C37,
+0xD1A30B77, 0x8BA64573, 0x9C17EBA2, 0x10C46112, 0xA7C789D5, 0xB27B7252, 0x64943188, 0xD7EF27AB,
+0x733FEFBE, 0x650BF2F6, 0x48DAAB88, 0x25E2A63E, 0x677F97D1, 0x998186A3, 0x2EF16465, 0xAA9CDD82,
+0x318AAFD2, 0xCB76E8C7, 0x2CD55DDA, 0x07A206D6, 0x62618626, 0x560F7149, 0xB2E9D64C, 0x4C9C386F,
+0x03D2A875, 0x32B001B7, 0x8A9089CE, 0x58B6D64B, 0x8D045412, 0x9EB73AE2, 0x0B7A8D09, 0x17FDD9A7,
+0x30EA3556, 0xFD73DDBC, 0x61897E1B, 0xC6762347, 0x4898C463, 0x7DE7B25A, 0x9F25220C, 0x9ABC2273,
+0x1A17F9C4, 0xB355482E, 0xF09A6753, 0x1D1A369F, 0x6AF306E2, 0xEB6E651C, 0x0B592FFB, 0x29FEF346,
+0x3476AAD2, 0x0A4A9F1F, 0x2163E16B, 0xB4F6669C, 0x87F9A447, 0xB6937F0F, 0x734D7263, 0x2232B0CE,
+0xF1854A9E, 0xFB09813B, 0xAE8DD21C, 0x8E7AF48F, 0x9BE3A97C, 0x833D92E6, 0x07A94607, 0xEFFB1895,
+0x3DAEFAAC, 0x5007B930, 0xF412C34C, 0xAEF9397E, 0x97C136AB, 0x8D0DA650, 0x712A1D06, 0x37B168DD,
+0xE3DCCDB6, 0x0CC45E6B, 0xA06A0D15, 0x6E85B4BD, 0x1B921E3A, 0x089956CC, 0x771E29A3, 0x1AA091AA,
+0x5DB3398B, 0xCF29B6EA, 0x4075D1B6, 0xFFA6559D, 0xEE2F2725, 0x5A2277E5, 0x0BE60F46, 0x2B4CB480,
+0xD47133FD, 0x823EEB5F, 0xE2E8A0EE, 0x341B9ABF, 0x9A24FD3B, 0xC43921D0, 0xB0768F8C, 0x4F4397B5,
+0xCBB0EAF2, 0x7570E1A5, 0xFA14485F, 0xC868CFB6, 0xE45D8739, 0x4DF5A971, 0x69802AF3, 0xD1CDD0E1,
+0xA5CC74D8, 0xC4F18AC0, 0xE500E30C, 0xF7FDE4CF, 0xD162729E, 0x6F3498A1, 0x35F6FBA4, 0x5F7B6A17,
+0x67442C51, 0x95B72844, 0x1E34249C, 0xC4DF1F92, 0xE77F1D32, 0x35FD98B9, 0x67DF04ED, 0x6A456F6D,
+0x17E8F2AA, 0x2B0F8A8B, 0x45E913AB, 0x853D38A7, 0x6FB1A5EC, 0x49EB9A34, 0xDFE71B2E, 0x9913F8E2,
+0xB41B7CE4, 0x8C93E6B0, 0x91ADB905, 0xDD1F3804, 0x92A9B1BA, 0x7D95406D, 0x3CCD91C5, 0xCA9073C5,
+0x85271FCB, 0xD4C4C3AF, 0x8E1C56B3, 0x0C8AB281, 0x1FD2F6B1, 0xB7702787, 0x04A39B6C, 0x7D29577B,
+0xAEB811A5, 0xD1795D31, 0xE15B82C7, 0xBB881790, 0x2FA03009, 0xD4F7C097, 0xF2830715, 0x04922477,
+0x12D78AF8, 0xAB0D8E13, 0x0AE0CA31, 0x0E033309, 0x83226011, 0x5CC5E259, 0xCDF21B4F, 0xC2DE2297,
+0x51010F04, 0xE7E55C6B, 0xB40205F8, 0x2286D286, 0xD05DCEC6, 0x1642C24B, 0x690459CB, 0x928D33FE,
+0x28033DB9, 0x213B6AA9, 0x6807ADD9, 0x20F36F7F, 0x9FACEB1E, 0x935A0270, 0x27EC266E, 0x6ED1C232,
+0x28862B6F, 0x4AF497D7, 0x2661710E, 0x90CD35F4, 0xC1C69B9F, 0x2B3AB2CB, 0x90587986, 0xBC39E2BF,
+0xA9031E49, 0xE9456BB0, 0x96CA37D3, 0x93566D93, 0x333E5515, 0x75C50949, 0x451D3E92, 0x637EF1BB,
+0x7B4AA07B, 0x3B6F7540, 0x1EFD45EF, 0x6D648F3C, 0xC1758BC4, 0xDF6C7A4A, 0x8D492618, 0x9DEC7541,
+0x365DF908, 0x003080B2, 0x00425374, 0x9E0E553E, 0x75FFEBA0, 0x668C2CF5, 0xFF493525, 0xC87C7308,
+0x1AAA49DA, 0xB660187D, 0x85667BA3, 0x8BD53246, 0xAAEEAACD, 0x9990A526, 0xF17C6173, 0xC39BADCA,
+0x474E1D8C, 0xD4C652B3, 0x185F732B, 0xF7DF897E, 0x57E6E1C1, 0x63F71C1F, 0x3AD98C96, 0xF3377BCB,
+0x575EE7AD, 0x364DA27A, 0xAAE20CCA, 0x37A6BE4F, 0x94DD82EF, 0x7DD6020A, 0xD168602B, 0xB03BAF6B,
+0x132CA05E, 0xFCAD3A58, 0x01BA3871, 0x0C95625B, 0xA897B3FB, 0xD9184145, 0x13A50D75, 0xCC8EA95D,
+0xEB6C042C, 0x81B41791, 0x6CB661CA, 0x5D99CA0D, 0x7626E76C, 0x65109EDF, 0x227C458E, 0xE8BDEC7E,
+0xF9DF5DE3, 0x9A2BE397, 0xE49130EB, 0x54A45D30, 0xEB05BB8D, 0x38CC5382, 0x628394E4, 0xDA226105,
+0x3FC4B803, 0xA2283596, 0xDDAF2F6F, 0x2D8D177A, 0xE1A44565, 0xD1A36929, 0xCCB1D4F3, 0x031D3973,
+0x8B1F3891, 0x223BC4D9, 0xFFF4952F, 0xD69A667B, 0x7483E3BD, 0x1AF2FA0C, 0x8C9ACA54, 0xEDA49128,
+0x647C21FC, 0x9EC7C1E5, 0xDF5FD00F, 0xD6F6EEAD, 0x08C327F2, 0x84EEE848, 0x8DE96674, 0x0D43357F,
+0xFC60B6B0, 0x7653D3C2, 0x3E8260C1, 0x18DBCB7A, 0x5A7BF472, 0x671B06F5, 0x8BA128D0, 0x1408A859,
+0x52488154, 0x542BAA4D, 0x51E22876, 0x59CF9050, 0x9CC16673, 0xF2EFEB61, 0x1830C850, 0x45059AD9,
+0x7AB772D9, 0xC4314FBF, 0x0FB4B9FC, 0x6AB68679, 0xE57FE00F, 0x1F92DC4E, 0x4235683D, 0xA04B862E,
+0x90321236, 0x58AB6532, 0x1F6A694D, 0xBF05B71B, 0xFEB58555, 0xB54DA8A5, 0x728512E9, 0xBEC2FEAF,
+0x97B0C8F8, 0x8D4E4EAD, 0xC368CFD6, 0xD015F05B, 0x5E247083, 0x91C91413, 0xC971E4A1, 0x416027E5,
+0x8D972076, 0x9539887D, 0xAE9EA965, 0x782B7048, 0xEE9FC52B, 0x41C13E41, 0x4517D2E7, 0x7FCCC054,
+0x583D7DC5, 0xC07729AE, 0xC1BE05C8, 0x2765EF26, 0xBCC455A7, 0xE56DA711, 0x359F86A9, 0x33A0CB66,
+0xF4951354, 0x9F06A3E2, 0xF8297445, 0x0882A3A0, 0x89537AD9, 0x44138D8D, 0x5ACF40E5, 0x22209EA2,
+0xC078868B, 0xF8E08098, 0xD7E6D980, 0x4D3990AE, 0xFE2A8F63, 0xCE160DD1, 0x463C7626, 0xC4468B37,
+0xBADF2CA7, 0xDD5FCE7A, 0xAB838526, 0xAF72BA06, 0x5554101C, 0x80F6C265, 0xCBFB1F3D, 0x773E97C5,
+0x7DDF5796, 0x7D3306E8, 0xEC3BA4C6, 0x459364D6, 0x3E469D2F, 0x5FA0EC84, 0x2EFEC871, 0x842CC4F0,
+0x1E74952B, 0xB39E08FC, 0xAD52D198, 0x75FD5E17, 0x84C08A7E, 0x16C52E5A, 0x9F576F8D, 0xF95072B1,
+0x8BF3364B, 0x413E758E, 0x76A5A71F, 0xC6300672, 0x9FD2B6A8, 0x56DEC040, 0x94A5867E, 0x4D426A56,
+0x0B77C35E, 0xC8457659, 0xA9B6B975, 0x8613070B, 0x2446DB8C, 0x75CEE82D, 0xE3FD402B, 0x81CB844E,
+0x7DDF3A8B, 0xEED77407, 0x8C9EB60A, 0x1E0E6B93, 0x8FC2C50C, 0x1AA12C8F, 0x94E83260, 0xF1C3CEBE,
+0x01A54F9A, 0xE4D75FE0, 0xDC4CD40C, 0x8CC95371, 0xA2B29FA9, 0x30FC0F33, 0x9876EC29, 0x44CE3C1C,
+0x88888B2A, 0xCABBB335, 0x4A2BD4A9, 0x3301956F, 0xC411480F, 0xA762BB62, 0xD33FF35A, 0x1A147348,
+0x739E186B, 0x09A332F5, 0x0F69F392, 0x4B667836, 0xBFC9B744, 0x17D291CA, 0x7644419A, 0xCAFFA6F2,
+0x57564F50, 0x6B478F58, 0x26C62A62, 0x8EB0F813, 0x38967949, 0x6B96F465, 0x22EC6726, 0x46D99057,
+0x8175E1C5, 0x9D7DEFFF, 0x935859B6, 0xCD8C89AE, 0xE166E900, 0xDD68AFE0, 0xEA1051A9, 0x208E19D6,
+0xB775B558, 0x5184E3CD, 0xD1A2659D, 0xF665E7E5, 0xA62737E4, 0x1AD4F79A, 0x66FF81D0, 0xA2731865,
+0x01A9624A, 0xE325B0BD, 0xD27FCFE0, 0xAA9C77A6, 0x3BF240D0, 0xDE954129, 0xCEA87B84, 0xAC6B3F36,
+0xB7B210B3, 0x6C73C2F2, 0x868F8CDA, 0x94D7D657, 0x5B946CEB, 0x408BF400, 0x581F5853, 0x05E52495,
+0x50AB3908, 0x34B24667, 0xDE610FDC, 0x72D42708, 0xB8E54C29, 0x1AC0C398, 0x996BFB81, 0x9C65F651,
+0x404424E9, 0xADCB95EE, 0x12C79038, 0x0A672EF7, 0xBB92E579, 0xAE90D59A, 0xDB12A64E, 0x0CF8681E,
+0x00FBBB10, 0x90E5E374, 0xB19C0800, 0xF2F9EC0A, 0x99540888, 0x2530915F, 0x8075FAFD, 0x4B1584AD,
+0xCBBCDC45, 0x4F722EC1, 0xF83250AF, 0x0E7550C9, 0xB95922F5, 0x6174227C, 0xE2F8AFB0, 0xE1DA675A,
+0x6D9EAEB0, 0x715C36A6, 0xD5F1EA54, 0x9F10B36E, 0x2088F3D9, 0x24C67D8C, 0xB4C6FAB2, 0x3456C275,
+0x408087F8, 0x17902A13, 0x48D3CFE4, 0xC5BF0C19, 0xE7FE3BC3, 0x88A2F9BA, 0xF3A1F0C6, 0xCF6DB57B,
+0x2FFC0D1D, 0x890024C2, 0x54096659, 0x834915A5, 0x48BF37ED, 0x3A9DF86E, 0xC45C456B, 0x2F99AFC8,
+0xFA05304E, 0xBE4CF6CE, 0x3E54CADC, 0xAF20B3C1, 0x2C5B7110, 0x8FDFDA69, 0x5AF6967D, 0xC9E09751,
+0x6CAF6856, 0x4FAC7856, 0xA5D7BC06, 0xC859EFDB, 0x421A92EF, 0x1F7924B7, 0x4791DE8F, 0x17BCA5E4,
+0x03E82249, 0x40609AFF, 0xE8CB1519, 0x21E0DEFD, 0x0D3639B5, 0x68638BDD, 0x36C13E73, 0x559EFBF8,
+0xD054ECB3, 0xE3328F8B, 0xA3F522D0, 0x1B98E460, 0x6E45C2B2, 0xCFFFFEBD, 0xE71D64AB, 0xB47B104C,
+0x6A5F5A63, 0x8B286A27, 0xE14CBDDA, 0xD65D725B, 0x70566FB5, 0x99B674DF, 0xF8B30575, 0xF73A6058,
+0x6B6EEAE3, 0x30672108, 0xA607277A, 0xC0BECE1B, 0x857A7B40, 0xE47DA931, 0xD0AD0F50, 0xDA294BDB,
+0x04F26C8D, 0x40C47D21, 0x1AA15674, 0xD9509E81, 0x4D2EA6C2, 0xB48CFCDD, 0x6C812F5C, 0x5E04C0EB,
+0xEEABF6FF, 0xEFDF13B4, 0xFC479BB1, 0x72678721, 0x8FB90701, 0x704BC48E, 0xFB55F3FD, 0x31ACBAB4,
+0x41458185, 0x4E02F871, 0x808EAC69, 0x34F34E08, 0x73FCE797, 0xA58D36FA, 0xAA6B2F8C, 0xF59B029D,
+0x6D36A6AD, 0x7D3A1D94, 0xAFD3A202, 0x257A5668, 0x841E20BC, 0xD5EF1C5F, 0x5FDBC0D4, 0x6015DF40,
+0x84D47130, 0xC6A3210C, 0x7E141808, 0x7BB1A41E, 0xC8383721, 0x48A55D26, 0x9979CABF, 0xCF3C6500,
+0x524DAC09, 0xDE5FBB58, 0x5105226C, 0x89B424E8, 0x61CDC933, 0xC6A77144, 0xC5E80667, 0x29F440E3,
+0xD9ED0E43, 0xEF06591B, 0xABF48D93, 0x1C3A6CE3, 0x7CDC2C07, 0x3B135DF5, 0xBE1AEA37, 0xF2E33289,
+0x949E4156, 0x642B3739, 0xF3BA878D, 0xA5E6AACC, 0x80B81065, 0x996C776D, 0x6A45F600, 0xB081C02D,
+0x01C28D04, 0xEBC03FF4, 0x95F67E42, 0x0F45156C, 0x05029BAB, 0xEFEAE2E7, 0xFF6DB4D3, 0xBED0E6C2,
+0x900A65D8, 0xB41054C3, 0x82A32E23, 0xF90F1F80, 0x644A334C, 0xFA7CC8E0, 0xC04E588A, 0x23A67CA8,
+0x4A90AFE3, 0x7672BC46, 0xD5BC7C3C, 0x3742149A, 0xC89A8831, 0x1892CD09, 0xD5AF872A, 0x46A59A9D,
+0x7CC268F4, 0x7C13D5DE, 0x3CED74AC, 0x4A92E20D, 0x8B2FC6AD, 0x0BF00A6D, 0x55771238, 0x62195843,
+0x0A736210, 0x323FA7E1, 0x595354B5, 0x9B173F04, 0xC7AF0A42, 0x377FF322, 0x8E26F1BD, 0x15C7B969,
+0x7219CAB4, 0x7B37E38A, 0x8032D0D7, 0x8E04575B, 0x73CB15CA, 0xD28DD36B, 0x9ED62B55, 0xEBB558A5,
+0x4ABD9021, 0x5C863005, 0x53CCF892, 0x4CE371ED, 0x39121DA0, 0x58966C3E, 0xA49057F2, 0x25BB061E,
+0xD56948A1, 0x7790F216, 0xF88EB622, 0xEB8A3EC3, 0xF70B0369, 0x11CC8A91, 0x8B376865, 0xCBC1FA80,
+0x7855654B, 0xA25626DB, 0x6E035593, 0x8906CE8F, 0x423B919F, 0x3EA9C1F2, 0x7E8CFBBB, 0x0DE06964,
+0xB1019B1F, 0x1A1D5368, 0xFE53305C, 0x867E87C7, 0xF588216E, 0x6EAD410D, 0x37D4E5A1, 0x92FB6425,
+0x9E7677B9, 0x1B82078F, 0xB376C35D, 0x0C20F572, 0x0594F0CE, 0xC5A2BEC9, 0xAE536F9C, 0x73919571,
+0xCCFEE417, 0x18EB3E9E, 0xB0942C6A, 0xA29D2BF0, 0x1439F247, 0x0C24C579, 0xBFB24E24, 0xA6CD89DE,
+0x26569AEB, 0xEB016890, 0x52D130EB, 0x71EBE191, 0xBF2EB2CD, 0xBC66AAA5, 0x2395F316, 0x1D1FCB28,
+0x21D2ED54, 0xFB558133, 0x2A1920D2, 0x10C9D4E1, 0x8AB0D97E, 0x6FA9AA21, 0x2498A45B, 0xA0C0349E,
+0xC1AC06A1, 0x72482CD4, 0xB4DBA676, 0xBA9AA374, 0x793C4B35, 0xCB6607E8, 0x5D58B9CB, 0x888637B9,
+0x6DFACFCA, 0x0CA039B7, 0x965344C7, 0xA02D1E49, 0x51ABB3C7, 0xB7E5A3F4, 0x2B495175, 0x7FD31CD4,
+0xF51E8BAC, 0x174E5736, 0x993C2E21, 0xC8A3892C, 0x2B739B70, 0xC182A48E, 0x638248D0, 0x01B7CEF8,
+0x6E61EE73, 0xA16D5D28, 0x3E010613, 0x8C6C88A6, 0xD24B15C4, 0x84DC55E6, 0x78394C46, 0x99F9FB7C,
+0x7A45BDBC, 0x1C921F88, 0x85A4D864, 0xC705D72B, 0x8E3EDFB4, 0x584EE671, 0x79AB3686, 0xA754D944,
+0x55ACE304, 0x92678C31, 0x4F13F591, 0x0DEAF8BE, 0xD9A5DD8E, 0x8906B27F, 0x29361733, 0x7E30FDE7,
+0xA6F2568D, 0x78642769, 0xCD1D1710, 0x584F3820, 0x457B245D, 0xEB8177D2, 0x77D7DB37, 0x8D5AEAD9,
+0xE49C455B, 0x7A19B3A7, 0x76BD3AC3, 0xBF7A615F, 0x724EC683, 0x1D484FCA, 0x1162F724, 0x1F6F1AEF,
+0x116DA833, 0xA46B86EC, 0x2D3B47BF, 0xBC3D9FA2, 0xA2EB6307, 0x324D3F1C, 0x752B1CA5, 0xEF3BFA44,
+0x000D7A9B, 0x425B5BE8, 0x487B09D4, 0x34B6DF9A, 0x4C8CEC57, 0x79ABA8C7, 0xFECF2BF7, 0xC14A17A5,
+0x8417E10D, 0x1367FC4D, 0x7DA04060, 0x0F85BBB9, 0x4D86071F, 0x1A9997DB, 0xFABAD829, 0x3B5CD32F,
+0x9B404444, 0x72C97F71, 0x6B57A447, 0xD8D89FE0, 0x568632D5, 0xCBD8F505, 0x0B89291B, 0x3D84D5E1,
+0x9E0D31DB, 0x443BD07D, 0x064A2D4C, 0xDEF64FD6, 0xEBC6E530, 0xFAB03A5F, 0xA8F688B8, 0xCEC382E8,
+0x2944A4D7, 0x6A85FEEB, 0xC0A1B6C7, 0x4BEC5E35, 0x0E87CCD4, 0x2B22A119, 0xFE084E10, 0xA5358194,
+0xCBF8D71B, 0xBFFF415A, 0xAC02D32F, 0x4F1C4863, 0xB14FBFB5, 0x62EB7204, 0x4DC4EA47, 0xD197FEB9,
+0xB9D5C675, 0xA14AFFC6, 0x8659F142, 0xE487B7FD, 0x9396DEC1, 0x209DAA63, 0xC6A8F0C0, 0x9EEAC9A8,
+0x2ECC146C, 0xF2AB4FF5, 0x0D6E336E, 0x25EE0986, 0xD25562C2, 0x48B43241, 0x8CB59E7D, 0xF43CBEF6,
+0x373D2660, 0x8B2AED07, 0xB52718B5, 0x5F2ABC13, 0xCF67BDFB, 0xEB02B471, 0x6F73A30F, 0x6D36FF69,
+0xB3C7CCA9, 0x39E99EA5, 0xFB1C8257, 0x7BAA9BE7, 0x00682A13, 0xF07EE703, 0x5658AA99, 0xBA14568A,
+0x8AC551C3, 0x91654E30, 0x2762B00A, 0xD3EC39EA, 0x1A124DDB, 0x7135A63D, 0x7B6BF8D1, 0xDB3A6465,
+0xE300BAC9, 0x4FE377CA, 0x65352F9C, 0x73765309, 0x9935BC81, 0xA250F190, 0xF04E68AA, 0x4A479453,
+0xF56189C7, 0x085B84FC, 0xA2212754, 0x5D6D5F7C, 0xB0E2A35C, 0x2A67624A, 0x15E422CB, 0x69D7F210,
+0xDE55BC44, 0xFC2BD304, 0x535956B0, 0x7856C999, 0xD0D70405, 0xF0F1CAD4, 0xBB1BD77C, 0x88D91FD4,
+0x5DE1DDF3, 0xC858C160, 0x0A1C76A2, 0xA0AC9093, 0x8483A0F2, 0xF45E8CE6, 0x19588270, 0x59CE234B,
+0x0DFEBF23, 0x89A1504A, 0xDCA7BFBD, 0x58DB55DC, 0xD5A5CE23, 0xC69CCBEE, 0x773EF650, 0xD3540881,
+0x26AA38F7, 0x5AE5B7D8, 0x988A07EB, 0x463872C2, 0x0F8FD724, 0x421E7DE1, 0x00FA76F9, 0x2EE6118F,
+0x332E6280, 0x061567D6, 0xC1397A51, 0x0D6BB038, 0xE6405B1E, 0xED26D71F, 0x076475FE, 0x1D5F89C9,
+0x16ABDDB2, 0x07CCBEE5, 0x50C9EFE6, 0x6F4B2B3E, 0xB9118A57, 0xA63D891F, 0x9BA0AC9B, 0x02B7A7CE,
+0x4646F292, 0x0DF5E5E3, 0x88DD011B, 0xF68C4F4C, 0xBC282072, 0x070AD533, 0x1ACA6DB7, 0x094519A3,
+0x33F7497D, 0x497D17E6, 0xB5F4553B, 0x3A54C163, 0xFC2B2A70, 0x0D58CEB5, 0xC4D4A977, 0x9A2FF900,
+0x516FCB7B, 0xD760E861, 0x49EBDDAD, 0x95A66E53, 0x5B98AA8F, 0xD9E7B96D, 0x073A7030, 0x161851CA,
+0xA3E1EBC3, 0x90FC729A, 0xA8454439, 0x324D01FB, 0xBD766484, 0x889B32E1, 0x31F697A3, 0x615C3E47,
+0xB7F07D5C, 0x9EBE713A, 0x817EB917, 0x15F2A17A, 0x0F9359B0, 0x4F79A1CB, 0x7023231F, 0xF18D09E4,
+0xC87F2C02, 0xD998B265, 0xC102E06D, 0x7C6BDBBF, 0xD015CAA9, 0x94DA9511, 0x0D99BD25, 0x3CEA6F2E,
+0xBAB91C40, 0xC44C025E, 0xCAB735B0, 0x4594DBE7, 0x76C05D4F, 0x8E771F65, 0x1504E5CF, 0x20971C3E,
+0xBFEBD061, 0x787D45BE, 0xC593B31F, 0x28A1AA56, 0x6F4C4C1E, 0xC7143FE5, 0xD76A3439, 0x4BD38D5B,
+0x54456739, 0x5FC33D68, 0xBB212B77, 0x916C9B1D, 0x74480292, 0x17B18DCB, 0x943AE53A, 0xBE131D1A,
+0x509F730D, 0x219CA561, 0xE8C125BF, 0x29BAB675, 0x59B59571, 0x163FC3C5, 0xD28D174E, 0xB1C4595A,
+0x078A887C, 0x2DE3F9E1, 0x9C59F0A4, 0xF001D626, 0x84B70E16, 0xCEACFDDC, 0xBFDC2843, 0xAE5D813E,
+0x31FC1440, 0x782A18E5, 0xEBDE58FD, 0xBC5C75B9, 0x1F11A53D, 0x87918B3B, 0x2ADCD9C2, 0xCAE117ED,
+0x35DDC70A, 0x6269D3D4, 0x1A2A7E02, 0xFEC74913, 0x1C7FE82A, 0x782101F0, 0xB94B55E8, 0x6E1EA979,
+0xCFDEF489, 0xD5339064, 0xD995C820, 0x21E78EBB, 0x8D0A5669, 0x96C1701D, 0x41C02D5C, 0x8FF82B03,
+0x4B376089, 0xDB05E03F, 0x754AD3D5, 0x781643DC, 0x370D3F34, 0x5EEA7837, 0xD4E32223, 0x72414C7B,
+0x647E05C7, 0x080410DC, 0x8FFA1EC0, 0x0CC7DF6A, 0xE70D6D76, 0xAE0771AB, 0xEA653B9F, 0x0B309201,
+0xDC06D1EE, 0x8AF5EDE1, 0xE7623936, 0xDD3D508C, 0xFBDA3B2D, 0xD2AB92CF, 0x150FA25C, 0xBFCAE571,
+0x00C87D9E, 0x2CC165E9, 0x7F1877EC, 0x09FB75A5, 0x472C13EB, 0xC1F49F15, 0x27E26382, 0x9762BC45,
+0xBE9C3909, 0x4F79C7B9, 0x422E8A2C, 0xCF5A320F, 0x9538902C, 0xB92F6C3A, 0x8B23772C, 0xA0F1D556,
+0xF7A32DB7, 0x47979DBB, 0x20F90924, 0x5ED605A1, 0x5B5F3E6B, 0x5C26F90C, 0xC9199EFE, 0xDAAF54BB,
+0x19B6FF28, 0x79982BBA, 0x352B63EB, 0x957BEC46, 0xF00E6688, 0x7461374D, 0x770FAF4A, 0xAA9F9894,
+0xAAA77C34, 0x9D55D280, 0xB7CF4566, 0x273ACBD5, 0x1F07C20D, 0xF394E6C4, 0x54D4DF7C, 0x7C2AEE6C,
+0xE145CF53, 0xC11C51F4, 0x573146C1, 0x905A39F6, 0x0FCD53C0, 0x999312FE, 0x94E64406, 0xB3A7F627,
+0x3AB843AC, 0x560C022D, 0xBB9C0161, 0x80E2934A, 0x1FE73490, 0x67A9CE6A, 0xE7BF4E55, 0x9E4B72C4,
+0x5C9880B6, 0x14C31C6C, 0xD9F576E9, 0x3F8FC43B, 0xB068CC6C, 0xC365E440, 0xBBF9BBAE, 0xF3A63042,
+0xC2FC724C, 0x6926EF24, 0x806F4915, 0xD95D4F30, 0xDEBF6BC5, 0xFB72A3FF, 0xBDB36D2F, 0xD6C8253F,
+0xAD976EE3, 0x1A78FD8C, 0xCEC7AA11, 0x731D6258, 0xBA040415, 0x7C48D708, 0xBC061406, 0xC33F8AA5,
+0x7A432CC3, 0xD935BE05, 0xE1B0160A, 0xB078AF25, 0x53F36FF1, 0x9904F8B0, 0x1C27E8CA, 0xF3926293,
+0xFFB05FD7, 0xA178A690, 0xACAFEADF, 0x0547F4FE, 0x32BC81E8, 0x01A44FB8, 0x9A68E8A6, 0x647CEA76,
+0x10009CF2, 0xA719F266, 0x1116F244, 0xEBC56512, 0x86902EF8, 0x5EA05BBA, 0x9CA194EC, 0x9F8E18D2,
+0xA9990914, 0x68D7EAB5, 0xB54757F7, 0xE5C64B1B, 0x0376CD05, 0xCD7F626D, 0x5DA0F89D, 0x4901A91B,
+0x9B76C857, 0xDAF13E74, 0xDF40E55A, 0xFC2D6573, 0x8CEC8641, 0xD15C2598, 0x78EB9FE3, 0x92E8F97C,
+0xD8E2F12F, 0xA35CF8EF, 0x7EAD9C05, 0x47705F0D, 0xD7C43216, 0x6C3827EE, 0x47E5C72C, 0x67410F73,
+0xA8CE1A41, 0x271BB4CD, 0xAAAD86AB, 0x43266F82, 0x74D75970, 0xC73FCCE7, 0x07448838, 0x8F38802F,
+0xA724B183, 0xCA8FC269, 0xC966CB42, 0x889EBA76, 0x9823BFC8, 0x9696A175, 0xDCE79C50, 0x93E0FD23,
+0x6B146608, 0xF270EADA, 0xDA381AF6, 0xF6B57CCB, 0x8C45B3EC, 0xF2DD407D, 0xDDC99F51, 0x0E9449B5,
+0xAE82055F, 0x278876CB, 0xEAC9C958, 0x19B720BB, 0x2CFF6712, 0x25B82C29, 0xB96CD996, 0xF568EF11,
+0x46984D96, 0x8E60736C, 0xF9D6243B, 0xABEBE869, 0x3CC46694, 0xA988C0E9, 0xE7F58D57, 0x3C348D77,
+0xE36E045A, 0xCAFE9B43, 0x74AE8366, 0x39FF370D, 0x3F1608BA, 0xE80B920C, 0x15BEE8C6, 0x8C9F9DEB,
+0xFBF9BF0F, 0x78207C4D, 0x85B5C7B7, 0x8EFCD66A, 0x8A0A782C, 0x1F226157, 0x507691B9, 0xE5BB69FD,
+0x3BE451A6, 0x39D4828E, 0x50677DA4, 0x22F1BA6B, 0x4A1B5D48, 0x367FBCE6, 0xAEFD8E95, 0x16691C8D,
+0xE2D00D99, 0x5D04FC12, 0x94CD3621, 0x996BC591, 0x1A9C995B, 0x1CEC0BB0, 0x7B3D07A9, 0x2203CC53,
+0x352409E9, 0xA27E1C87, 0x94E80EB9, 0xADE96312, 0x465C0F9C, 0x6C2EBE5A, 0xF90DD996, 0x045F553E,
+0x7A0CC3C7, 0x9B3A224B, 0x7F4A7CCC, 0x5CB21B44, 0x2A8ED6B6, 0x421559D0, 0x2944E93F, 0x4D41F7A6,
+0x571E4812, 0x4919EE7E, 0x9164DBA5, 0x16FE343D, 0xF5233C08, 0xED20D4F9, 0x638C8F46, 0x37C7CD83,
+0xDE62D102, 0x79CA9F9F, 0x19C979C7, 0x54266F2D, 0x231B97D5, 0x73EF287B, 0x8840E604, 0x021BB94F,
+0xA384F22C, 0x91F97936, 0xDF7D9A7E, 0x5F503243, 0xB3F1B66E, 0xFBAEDEFE, 0x3906D109, 0x0C668ED3,
+0xD8CBA250, 0x39AA9B7A, 0x9865F879, 0xE99F0FC8, 0x3248566F, 0xF1CD369A, 0xBD30522B, 0x3E3E5796,
+0x18DF0BB0, 0x1B6BCF58, 0xCF19A7E8, 0x17A53184, 0x03BECF3D, 0x9078471D, 0x6927D1A8, 0x0C8902DE,
+0x8B92E87A, 0xBC289334, 0x1B0888FD, 0x17014708, 0x8F895F99, 0x1A6BA76A, 0x372FCA2E, 0x0BF4BB90,
+0xF59BF380, 0x0EC39AEB, 0x8D6CBE73, 0x14A0156C, 0x1F89DA20, 0xFDB8FF3D, 0x2C3555D5, 0xD586C89B,
+0xA0F2C59E, 0x7D628269, 0x9312FC2C, 0x871406F6, 0x808F61F3, 0x248236AC, 0x952EDA0B, 0xA46A734E,
+0x1A6198FA, 0x07FF8B84, 0x3C8C2621, 0x6575BA49, 0xAFA4D917, 0xFE313E32, 0x243946F4, 0x0F68D837,
+0x6A14C20C, 0x088D3F05, 0x1A1F358F, 0x31641F35, 0xA769C930, 0xADE605C2, 0x2F91B081, 0x6B129B5B,
+0x3F791BC8, 0x5CF67868, 0x56088162, 0x8793F996, 0x672E2933, 0x3DFE19AF, 0x2BA51D31, 0x60621402,
+0xD04732DC, 0x05E46560, 0xD02D4A8A, 0xB2A21031, 0xE0F8D962, 0x1B724D3F, 0x1E4AB493, 0x14A91C0F,
+0x9DC2D411, 0x3C3FE00E, 0x85DB06E6, 0x212D59E0, 0x3421C031, 0x94879883, 0x6254B1D6, 0x7C877680,
+0xC6E1E2C0, 0x68793DCF, 0x1C760EF7, 0x9A0F644A, 0x04DBA772, 0x8AA1C0AB, 0x734C532A, 0x58713572,
+0x46240EB6, 0xE5D0431C, 0x69787C4B, 0x68AA1D4F, 0x99AE70AD, 0xD52F597F, 0x4666B107, 0xF8AD9E76,
+0xF1E3B6A5, 0x20952B6B, 0xF5608007, 0x8571AA5E, 0x525D0394, 0x784C2F46, 0x88ED2A40, 0x7238AC9D,
+0x93F377BA, 0xC43E6923, 0x4DC6F61C, 0xD165D1C7, 0x30819844, 0xBDE541B8, 0x13244700, 0x70889375,
+0x9A5EB09C, 0xB553B259, 0xD8569045, 0x9B6503D7, 0xF36C8A34, 0xB0A2A549, 0x8F1808B1, 0xCDE031A4,
+0x631AEBCA, 0x4A6EB1C3, 0xBB1CDADB, 0xD4F9C75E, 0x4AB84444, 0xF6872512, 0x7DE0B1B4, 0xF4963B3E,
+0x531E5C09, 0xC4B2212B, 0x21A11D03, 0x0DA929AA, 0x27684847, 0x32D0BF6E, 0x78E27F11, 0xB2CE731F,
+0x42F74BE9, 0x17569677, 0x89F71052, 0x5625BFF6, 0xC9C99C63, 0xF2C924C5, 0x42992864, 0x6BF1828C,
+0xF3CE42EF, 0xDE56DE27, 0x89B0CBAA, 0x8F65F111, 0x4A7EC686, 0x30D10863, 0xE7EE64A5, 0x5EC9F757,
+0x756B1C40, 0x2623285B, 0xC2496326, 0x91FCF3F8, 0x408836E4, 0x1F2A57CB, 0x8B754171, 0xA29DBC3F,
+0x7630941B, 0x69C024AD, 0x03C30E97, 0xC0113016, 0x14CBB6A0, 0xC2786BD3, 0x1B3FD84F, 0x07C443AF,
+0xF4886EE9, 0x2541D541, 0x821980BE, 0x83AEC7C2, 0x12E4FEE7, 0xDE72AEE5, 0x0DB468A2, 0xD41FBFE2,
+0x0296CADA, 0x11991E88, 0xE7E2ACFB, 0x9D570187, 0x85AE9A8A, 0x1A53E25C, 0x48165D79, 0xCA258F16,
+0x0E955DA7, 0xC9DF5574, 0x07A8059E, 0x5ED9EA5B, 0x8E2BAA80, 0x0AAC127C, 0x6C2C7816, 0xF82AC569,
+0xBF72A34D, 0xD27FFB25, 0x64447778, 0x3ACB2EB6, 0x37E19FD8, 0x81336FAD, 0xF4BCA891, 0x18C11136,
+0xC2ECA882, 0xEFC0D0BF, 0xDF01E322, 0x706B2262, 0xB8A51A8A, 0x569D20FD, 0x399188D4, 0xCA161CC9,
+0x36EB67E0, 0x702A4963, 0x151E893B, 0x9E28A80A, 0x6A5608E8, 0xD70C3DAA, 0xDD8B128B, 0xD091598A,
+0x8798444A, 0x52B6271E, 0xCE3F3F18, 0x6634EE41, 0xB3898542, 0x8A84502D, 0x1738C599, 0x613A0D06,
+0xD04A95ED, 0x09DFC497, 0xFBB0ACF4, 0xAAC32CA3, 0x1680ADA8, 0x28E18968, 0x480DB66C, 0xE550BDA6,
+0xBF24BEE9, 0xF242340B, 0x6350CF8A, 0xC46E2BBE, 0x48E9558C, 0xEAE575D1, 0xAC48CE78, 0x6A33333A,
+0x6C60B371, 0xB5D74B09, 0x3DC7A624, 0xB2D28473, 0x151489CB, 0xB0B569C2, 0xE445C4B2, 0x069D895D,
+0xD9860D32, 0xF3F6625B, 0x3D4372DB, 0x75F19157, 0x3E968A54, 0x00AB843C, 0xAB7FE991, 0xEE12BE4D,
+0x44531691, 0x34D36C18, 0x9FAD4CE8, 0x84AD076D, 0x66FD4CE8, 0x2CD841A4, 0xF20D4163, 0xA10EC833,
+0xEFA42504, 0x72F5C0C4, 0xACC195FA, 0x4BB58CFD, 0x93BA5222, 0xE060D802, 0xB64D5140, 0xE444F7A0,
+0xFEDAA8CF, 0xD75A483A, 0x2D02D004, 0x6820CC9C, 0xBCE6977C, 0xF0B53856, 0x1D3E4248, 0x21AA1051,
+0x9D0F39B5, 0x6B41DC21, 0x74E3FE9B, 0x6D0DC660, 0x95425103, 0x430E5ACD, 0xFA72634A, 0xF5F70B06,
+0xCB00ED9E, 0x5E739224, 0x6CBA0FF8, 0x77FCFECA, 0x9853D3A8, 0xF63F4F25, 0x07FB88ED, 0x078AD5EE,
+0xAC934CE3, 0x15A6FA32, 0x8E1CBEB2, 0xC484139D, 0xF8AB61CF, 0x7B661173, 0xECDF2FF9, 0x4ACE6064,
+0x5E7B3B6D, 0x51D00201, 0x4583E4F0, 0x1B765E89, 0x10A34D2B, 0xDEA60D8A, 0x79CECF14, 0x6DD0EEFA,
+0x6E17BE0B, 0x0FF6E9EA, 0x6843819D, 0xB2DEB8B2, 0xA6A41253, 0xA91F9D7E, 0x8C85B2F2, 0x98DD9A3D,
+0xC31DA238, 0xCBBFC46F, 0x05733D96, 0xF983277D, 0x2ACEB5E0, 0x1C6CEFE3, 0x3512EBCD, 0x06F1FE71,
+0x5855669C, 0xDDD87382, 0x3C763F3F, 0xD9B9F247, 0xB87BBCBF, 0x0AEBA6FD, 0xC6E9B1E0, 0x88EB069A,
+0xED47B4D2, 0x7DBC20DD, 0x6775C45D, 0xBB8EBE54, 0xF3860251, 0x6F5285A6, 0x111A153E, 0xD9258852,
+0x4A228859, 0xB80EA4C6, 0x3B6499CB, 0xB0973750, 0xF8C58130, 0x8466B48E, 0xEC221154, 0x7C21A2B7,
+0x25409940, 0x6883029B, 0x1776AB64, 0xD4B3B26B, 0xE4CB5F88, 0xEDD0EE87, 0xA7675CAC, 0xC3271BDA,
+0x3803754F, 0xF53D9264, 0x7001543C, 0x71A40CFE, 0xBE611192, 0x7AA888E3, 0xF1237CE3, 0x18C6EA95,
+0x6753D36A, 0x65EA700F, 0x521D0927, 0xF54CA6C5, 0xEB2EDBA4, 0xF674C238, 0x7030ECE3, 0x643687BF,
+0x5486F279, 0xD1EA2947, 0x2DF9D072, 0x8C1DAD35, 0xBB66BA80, 0x19ED320C, 0xD6BF62BA, 0xE7A7B740,
+0x35803567, 0xEAC098CB, 0x037F5A97, 0x8469B9FA, 0x647377B7, 0x6778B831, 0x903AA364, 0xE11B8BEA,
+0x85E5015F, 0xF8C3609C, 0x5A88CF90, 0x6A083C47, 0xDD08CE1D, 0x5E7C51D6, 0x0DEC1B93, 0xE3DCD8FC,
+0x8D2BC505, 0xD7471625, 0x56C6D139, 0xEB312986, 0xC1A61F80, 0xD0B1F552, 0xE675C13D, 0xFED68824,
+0xEE50773E, 0xAB4DD97E, 0x1CD178B2, 0xCC107750, 0x4B1C638A, 0x8F64383C, 0x632B1DBA, 0xA6B9E37B,
+0x63DB7871, 0xFF2A01E8, 0x9D1C1B79, 0x2659B1AB, 0x36A0630B, 0x0C128DF3, 0x8AD19D0F, 0x683C0631,
+0x38B3FFEF, 0x61A99E0D, 0x9EE884BF, 0xC261D28D, 0x55057D1F, 0xD83A2FDC, 0x3B3791AB, 0x057D6E8D,
+0x493ADBAE, 0x25D96D93, 0xD374E21B, 0x7D5125D9, 0x8CC49D97, 0x4C9C78E3, 0xE049E531, 0xDC0CA069,
+0x8998753E, 0x0ABCB3BE, 0xF9E8C5B4, 0x56A8A1EF, 0x4A1191B6, 0x400EA432, 0xF82F07EC, 0xEAA2283F,
+0xE04FFC78, 0xD5E52209, 0x3568804C, 0xAF153E82, 0x462AD2A2, 0x6243115D, 0xF3DD434F, 0xDBEB21C5,
+0xF96C79EF, 0x7CF80250, 0x9FDFF6A5, 0x1D323391, 0x32CFDD5D, 0xCB4B05CE, 0x1992AB22, 0x1CD22AF3,
+0x56FC5EF6, 0x60C218E1, 0xF3BF3DBA, 0x471570E9, 0x18D29CF7, 0x8D6E0950, 0x8B54A3C1, 0x482409C7,
+0x3361420D, 0xF5F62FAD, 0x87942B53, 0x17D06C48, 0x71D80486, 0x6234510C, 0xC36EA624, 0x897B4DF2,
+0xBBF87014, 0xEE9B03B6, 0xE1424F99, 0x58D1A167, 0xDC48ECD1, 0xF3C3E971, 0x252373A9, 0x1996D8C9,
+0x15D78343, 0x77D11C85, 0x98BEAA81, 0x66FE24D8, 0x905C51D5, 0x41B483EF, 0x7C18C8E4, 0x877F8D28,
+0x584DAC8B, 0x29753D41, 0x473CFF6A, 0xE256003E, 0x95F66F91, 0xBA25C00D, 0x7863BF7E, 0x041E359D,
+0x3654CD3A, 0xF9BCC8E2, 0x28606DB3, 0x1547FF7D, 0x97531ACA, 0x7AE4905D, 0xAA0EA4E3, 0x247C01F3,
+0xE811B883, 0xE6117E6C, 0x385229B5, 0x00EF3568, 0xA6F810F9, 0xB5066D76, 0xE3D54985, 0x12460605,
+0x64C3106A, 0xB66243CA, 0x93C0F6B8, 0x20BB5CDA, 0x598BA472, 0x1CA5D207, 0x2D522E4C, 0x69875FAD,
+0x9FFEA17D, 0x58841D18, 0x4D3A69C4, 0xBEA7ED87, 0xFE538C1A, 0xFAB58D5A, 0x4D0662A1, 0x39D1C569,
+0x474927D3, 0x2D40263C, 0xEFAD7875, 0xBB8D6E2F, 0x9C00F233, 0xD3D737CD, 0xB20A4227, 0x09932077,
+0x929402F5, 0x05ABE259, 0xDE446B6F, 0x35C3F286, 0x7EEB1A51, 0x5A079A69, 0xCB9F5811, 0x499589FD,
+0x2EA676EF, 0x808360FB, 0x5DCC4A85, 0x35F3E68C, 0x07C0B483, 0xE1683B22, 0xE8E28157, 0x939CA889,
+0x05C5F19E, 0x69E15198, 0xBE51D18C, 0xAF1726FB, 0x6A4DB80D, 0xA14AA5B9, 0x93441E4A, 0xA40C35C8,
+0x89C3835E, 0x2F1EBFB6, 0x2E45B5EA, 0x61CA286F, 0x0E221425, 0xAA1E187A, 0x0DA70B30, 0x99813D43,
+0xD42D0E2D, 0x3D0E8B0E, 0x2752A5E2, 0xD8B273EE, 0x3ED159F8, 0x2588F0DB, 0x456D381D, 0x751971E5,
+0x6604B121, 0x19257A73, 0x76F640F0, 0x5A5398FC, 0x701DF8C7, 0x4B3A4991, 0xB1F2831E, 0x90C31802,
+0x71974E0A, 0xB753FE1B, 0x5FE3ACC6, 0xFD96D276, 0x742AE605, 0x3FA74D3E, 0xE9F80BE8, 0x18951558,
+0x2E491F41, 0x0006CA99, 0x674C0463, 0x9800F691, 0x550043CB, 0x726C767C, 0x00DAF472, 0x0A33C6E9,
+0x2FDF3CBF, 0x27BA991B, 0x9893CFE1, 0x9A2F2FC8, 0x0497C3AD, 0x89567F15, 0xB8B702D4, 0xD4A3BCFB,
+0x4C62F2C6, 0x8F2142CE, 0x857342E7, 0x260A0AD1, 0xC58D20C2, 0xD727F045, 0xB55AEED2, 0xFDCA2EC8,
+0x68BFD114, 0x8D95B7A2, 0x0AA671AA, 0x197B289C, 0xF513EEF2, 0xC58D8B8F, 0xD03BFACE, 0x7B0955F8,
+0x42C31C5A, 0x896E55A6, 0xCF42F736, 0xD63F0FB5, 0x01FD3D5E, 0x30033A46, 0x0224F090, 0x1195D657,
+0x52DB5EC4, 0x4128A864, 0xE5D623DF, 0x6ACC096E, 0xF4463179, 0x0040D5DA, 0x096DB19C, 0x8DBB84C7,
+0x94C88A7C, 0xA1C0AA0C, 0xAD575BD3, 0x693E9F8B, 0xBAC706BB, 0x56E7D836, 0xB2E6E36F, 0xAABE1537,
+0x8289142A, 0x1C4608AA, 0x226C927D, 0xC76AE173, 0x93DFD85D, 0x28048460, 0xB83019CC, 0x95644AF3,
+0x53FE8732, 0xAFE4A1D8, 0x5F64821D, 0xD0E5EDE1, 0x2BFD6F10, 0x342E3482, 0xEAE3666A, 0x7339BF72,
+0xB8F3E7DC, 0x20C803DA, 0xB2E94F5D, 0xB5187F0D, 0x7182994E, 0x4B01ED2E, 0x93BC430C, 0xED5D1662,
+0xB0B638D3, 0xB5AEDAEB, 0x68884483, 0xE5C9AEBD, 0x5B44CF71, 0x28661EB8, 0x9EBBE74D, 0x932100DC,
+0xF007EB64, 0x9AC326FC, 0x8765019B, 0xCBBB274A, 0xC0E73A0A, 0x32A18F4D, 0xF68AADA5, 0xF890862B,
+0x719A4CEF, 0x270998E1, 0x76623797, 0x8728EE0C, 0xE985975D, 0x9FC1F5F2, 0x67BC80E2, 0xF479AA28,
+0x43FD321C, 0x8ACC8F72, 0x43187D03, 0x16A3ECFC, 0x3B66472E, 0x52157F39, 0xF981318C, 0x7CE17F45,
+0xD457794E, 0xA8E759D7, 0x2DA2CC3E, 0x352155DC, 0xF5887602, 0x6B2294E1, 0x1473BD77, 0x9BED96E3,
+0xD6D67074, 0x8B466147, 0x3BE65702, 0xE4F592E8, 0x41B0AAB9, 0xF6C76C08, 0x20323C14, 0x33523966,
+0x958D9C66, 0x87977311, 0x773FC541, 0x077E5799, 0xD63E37CD, 0xA9F646C0, 0x41F372B2, 0x3BBB1D0A,
+0xD5565ED4, 0xCC0EC5EC, 0x76CD2CB7, 0x6FA9BD78, 0x64F96493, 0xFD82C70A, 0xAE41720F, 0x5522F8AC,
+0xC0F03F28, 0x1B60D263, 0x4CD61E62, 0x09B9BE37, 0xD83BEFE3, 0x0849FE73, 0x33C8093E, 0xAFDF8FE0,
+0xB93E6FB6, 0x9A8339DA, 0xF3C77C20, 0x011CA501, 0xF7B3DF44, 0xF2EC47FC, 0xF3192132, 0x65A0BB0A,
+0xF64B2134, 0x2E5AAD97, 0x29ACAC19, 0x45ED6E20, 0x19478D15, 0x534851B1, 0x4AFAAE30, 0xEBA52C21,
+0x2644BE6C, 0x10D0FDBB, 0x46031702, 0x09EBF661, 0x4C9FBC3D, 0x49DB8964, 0xE28D4EBE, 0xBB862C63,
+0x49C8BFCC, 0x63E221BB, 0xD656B327, 0x053E3907, 0x51EB7548, 0x5EEE5E71, 0x185D9CF6, 0x17C95EDB,
+0x17050085, 0x67E85E92, 0xF2648890, 0xCCED2BBD, 0xDCF56C3E, 0xBBE3D400, 0x3F0BAA8C, 0x469F1D12,
+0xAFB81F95, 0xA898B43E, 0xE1823468, 0xA7DA17E0, 0x5F39A6FF, 0xC047A619, 0xFA57B4E2, 0x5B4803ED,
+0xCBCDE4B5, 0x68CCC54B, 0xF8B8DA39, 0x4D8A1B7F, 0x046D17CA, 0x427F2911, 0xC580329D, 0x195BF447,
+0xB8306301, 0xF46D54CE, 0x87F48D8D, 0x832E7928, 0x2F1F7086, 0x20F36982, 0x85672AF5, 0x2B288FD4,
+0x764523FF, 0x8F86B0B7, 0x44AFA51E, 0x1CDF8988, 0xBF4C35CB, 0x4928A84F, 0x7203E1B1, 0x65A35A03,
+0xCDA5BF53, 0x86CBEFF9, 0x02134F5A, 0x6DA788DC, 0x07BCBAAE, 0x69B17CE4, 0xDE0BAC2E, 0xDAD779EF,
+0x7142209B, 0xA734E9D6, 0x1D048593, 0x3A17A391, 0x90441048, 0x7AAD430D, 0xD51F4F22, 0x14D225EE,
+0xFAC0AEA7, 0x780D069D, 0xFF8B40A2, 0xE6C9E453, 0x8FB23982, 0x4AF363A0, 0x750CE377, 0x6B53FE27,
+0xB02EE00C, 0xA2A64F28, 0xE69A6DBB, 0xA76627EF, 0x4176D572, 0x019A0C7A, 0x24E651FA, 0xBBC8A97E,
+0x2042FF5F, 0x8166A276, 0x0A82888A, 0x720CFBE6, 0x0B92107B, 0x0EAF9E6B, 0x2E57A895, 0xD6C20488,
+0x973D8A73, 0x6D275DAD, 0x52057B07, 0x6E65BF2E, 0x9D29A51F, 0x0B0F7A79, 0xF67F3745, 0x39CBA5A1,
+0xE88A0F6C, 0x72150BF7, 0xADCE7DE7, 0xE6D0E8E2, 0x7EB2883D, 0x37F7CDEC, 0xBFFFD6C1, 0xE9B9CD44,
+0x04C1CD74, 0x46372101, 0x15EFD48A, 0xF2C65E1C, 0x7301AE28, 0xB10AD2A2, 0x860867B1, 0x978FC58D,
+0xE715462C, 0x925D0E1D, 0x567DC9F5, 0x1905A06D, 0x7DBD775B, 0x1864D876, 0x38A71C71, 0xC57172F4,
+0x1631B12A, 0xD37A6CF5, 0x0A2F0E04, 0x4C51055D, 0xCF6B0307, 0x47BC1CBF, 0xE95C14B6, 0xA2A55E1A,
+0x34A9536D, 0xBF637E43, 0xC67A05FF, 0x3FB2791B, 0x8B1CAA9A, 0x3F60AE00, 0xD6A9AE10, 0x1FF11176,
+0x3D50AE6A, 0x7E4DB59D, 0x0B4BACE2, 0x3C5984DA, 0x0BEAD343, 0x2A1ACFB7, 0xF64787D1, 0x0E87273A,
+0xF7DD20DA, 0x65A90F99, 0xCDD445B2, 0x9D119268, 0x064BD1A3, 0xB3742854, 0xAF73098F, 0x7F8947FD,
+0x4D1421A7, 0x77087BC5, 0xD450482D, 0xBADAF223, 0x6EBB1497, 0x2452FCA3, 0x23A391D9, 0xF4C33A15,
+0xC28E606C, 0xBF38B904, 0x7BF99922, 0xD3861514, 0xACFEAAE8, 0x1BF497BA, 0x04BF7968, 0x6C52E3D4,
+0xC67DE3A1, 0x766FE571, 0xEED7CC64, 0x0D9D96ED, 0x35AA57E1, 0x072D7F10, 0xEEF1C932, 0x70FAE8FC,
+0xCF43CE4B, 0xC74408D0, 0x64FCDCED, 0xA110FB8E, 0xA3AAA4ED, 0x6F03F9D0, 0xF251FC7E, 0x7183B0A4,
+0x158DCDDA, 0x1F20E8A4, 0xF878A367, 0x8B1422F5, 0xA6FB1CAE, 0x172C9460, 0xB2D0A253, 0x7AC500CA,
+0xF9302608, 0x5BFEA18B, 0xF82BF769, 0xDC6DA3BD, 0x7DE0335B, 0xD16A58A4, 0x5021F9E2, 0x46C5B22B,
+0x9AB1930D, 0x9635228C, 0xB6AED755, 0xDA956299, 0xF4918495, 0x6BEDA2CD, 0x8919B5CD, 0x234AC107,
+0xD58FC1F7, 0xFD21D2D8, 0x81A3D5D7, 0xCC139F26, 0x6A6B321A, 0x89898F45, 0xB017A18F, 0xB0D5BA1A,
+0x73D9D83D, 0x67751D62, 0xEA158509, 0xA8545413, 0x18B30E87, 0x0CA85C7B, 0x7E5687FE, 0x5C354D3D,
+0x77025FF6, 0x84D9B86E, 0x5C588975, 0xBD0E692D, 0x8CE9BA50, 0xC011707E, 0xDC6AAB2C, 0xBDD2F618,
+0x8BF0658E, 0x274DBFD4, 0xC653752C, 0x6F1329C2, 0x771A2390, 0x49A5A0D9, 0xEFA7EBF4, 0x3268C746,
+0xCFBE9DD2, 0x6E62D676, 0xC6FFCFBB, 0x1F1F89F2, 0x9A073FE7, 0xBCC035A6, 0x3CCC0B0E, 0x9203D54B,
+0x14E2FA33, 0xDE8FBEE9, 0x8D7A280F, 0xAE8A1EE4, 0xF9CF320A, 0xF7F698F3, 0x7A739419, 0x40B82FCD,
+0x17FA9BA0, 0x9DB614F5, 0xB78E1D66, 0x27E1175A, 0xBA6699AA, 0x34A2B522, 0xCACC827D, 0xC263D0AE,
+0xFBEC7016, 0xD6798BF8, 0xBB319326, 0x1653F434, 0xD2CDCB98, 0x4F18FA62, 0x3BAAF946, 0x16A2EF98,
+0x0EA05AB3, 0x675573F4, 0x2E947530, 0xC4324DD2, 0x048D927E, 0xAD8D6F9E, 0x7D681207, 0x2BA10E2E,
+0xA2939B6C, 0x631F0D51, 0xEDC20A7F, 0xAA81C52C, 0xF040A1D0, 0x13C5D383, 0x724C7B6E, 0x0A0D1DF6,
+0xBD4B72D5, 0xF241E258, 0xE3940323, 0xE847480F, 0x86D1BDC6, 0xCC62AA20, 0xF04096A1, 0x497D2070,
+0x9C4ADD71, 0xE53455DA, 0xD9EB7E0E, 0xAC2CE086, 0xDF5E6E20, 0x1FCDB725, 0xAC2AFC3F, 0x420F7919,
+0xCC2FD5C4, 0x1CC2524C, 0xF2631BFD, 0x7DA6B0CB, 0x31529F06, 0x48805F10, 0x0A4153F2, 0x549C7485,
+0x2FF9FC17, 0x959828FF, 0x0F85A1DF, 0xF3DBB783, 0x827C9392, 0x247FFDF8, 0x8BB3F5BD, 0xEEE5CC35,
+0xA56BACDE, 0xE174A053, 0x7459C437, 0xABD9BBD2, 0xBCD80914, 0x8AF67821, 0x807E1C0E, 0x4337DA56,
+0xD5FB359A, 0x941EC548, 0xC6C3CE33, 0x6CCCC7E1, 0x9EBDE864, 0x868D478B, 0xA9C22886, 0xC0F3D7F3,
+0x68592BD2, 0x0B59F88F, 0xA4791762, 0x0790073B, 0x207908DF, 0x09AC96FA, 0x57AB05FD, 0xFF677FEB,
+0x244FF9F5, 0xF08E4B63, 0xEB0E998B, 0x3C9A3605, 0xE5C1D856, 0xC6E8A0E1, 0x3EF130B1, 0xAEE5C0EE,
+0xA61B89E8, 0xD24C0408, 0xFFCF7B6F, 0x27A4E085, 0x66F02D79, 0x983553EA, 0xC297729E, 0xDEEC57C2,
+0xDECFAEB2, 0x4E841B14, 0x595AC9E6, 0x0E4E2203, 0x3AD86447, 0x7520F59A, 0xC17A8E7F, 0x761580A5,
+0x8756FBA9, 0x8E421D8D, 0xD4D1653E, 0x5A667941, 0x4F653DFF, 0x92BD18BB, 0xE389B8F2, 0xA06A0D4E,
+0xF99B4123, 0xCEAE8079, 0x284EB107, 0x73D98018, 0x60F8F561, 0x1F8064DD, 0x5EA3C1E1, 0x13BAF768,
+0x3FBFE9CD, 0x84F0F4C1, 0x62EA8DF1, 0xAF26929F, 0xBA0A9AB4, 0x8BB8A053, 0x0757AB3E, 0x58FF797A,
+0xBEC5623A, 0xCA165FF8, 0x18DF39FA, 0xF1D5E1A1, 0xBC131A30, 0xDFB48737, 0x2ACF55AF, 0xE120091F,
+0x91F1DA5E, 0x21E6C5ED, 0xD28D1C20, 0xB56B58E4, 0xA3A0BFA0, 0x8737332E, 0x64A8BEC6, 0x1133E382,
+0x4C33A13C, 0x13982F05, 0x80128663, 0x0391C930, 0x028605EF, 0xE3FB5667, 0xB435C68E, 0x1B2DFF4B,
+0x60A79B3D, 0x00E9309A, 0x4607104C, 0x57431027, 0x41469AE8, 0xE17235E2, 0xD01B323D, 0x342F99AF,
+0x94661631, 0x37A109A0, 0x0EBCE686, 0x5F9EA031, 0x18570C3E, 0xF3B4D978, 0x638AE05D, 0x71328A78,
+0x0DF96269, 0x5B2EF49C, 0x88AD88E0, 0x4F858EA1, 0x999A7D7D, 0x513B5BB3, 0x6F53C8ED, 0x900E05AB,
+0x5FEF7393, 0x1CE3EFB2, 0x2B213566, 0xE6AB86ED, 0x8AD0FA7C, 0x77868DD9, 0x01DF028E, 0xBC785B3F,
+0xE6BADD16, 0xE99F1833, 0x49320AF0, 0xF2022C3C, 0xE2DB4792, 0x7860533F, 0x5B8A0CA9, 0x71BB2090,
+0xB9A62EA7, 0x175FCC66, 0x31B5DD0C, 0x42867301, 0x5C9F885F, 0xC0F33001, 0x70797284, 0x8841DEC4,
+0xFEFF9139, 0x734D182F, 0x35BC4C2A, 0x98224B14, 0x15A6E4F4, 0xA6487F07, 0x432E7D76, 0xA167E34F,
+0x70C1214B, 0xAE340039, 0x595D27EF, 0xD2F79FC4, 0x9ADE8297, 0x6654B93F, 0x9446A83B, 0xAD28FEAF,
+0xF08A260D, 0xBA208E28, 0x3C880077, 0x256226F0, 0xCADEF027, 0xA061AD38, 0xB02CB147, 0xE26D668A,
+0x8B4D5DD5, 0xF575C293, 0xB1CA5EAA, 0xD06E992E, 0xAB1F299F, 0xE59FD591, 0xC6E4F716, 0x6E1B01BE,
+0xB8AA3DA5, 0x0655870C, 0x77115858, 0xC0512BAC, 0x94287825, 0x335052D2, 0x528B00C9, 0xA238F928,
+0xFE1ACF57, 0x48C1F2C7, 0xFDCB5BA7, 0x60AE65C8, 0x90FBF6C5, 0x4432E87A, 0x8282F26D, 0x77C89C8E,
+0xFE738B51, 0x2C1F3CDC, 0xE606A9D3, 0xE1660F79, 0xEE416967, 0x109D7D76, 0xBE86281A, 0xCB098241,
+0x90EB061D, 0x62296CFB, 0x66449B91, 0x163A10FE, 0x2E702086, 0x352B1A2B, 0xDF8773EF, 0xF4EAC438,
+0x180D06E9, 0x6DA41F92, 0x1C6501FF, 0x96F2D9B1, 0x45632767, 0x21076888, 0x08698B49, 0xCECAA244,
+0xE014BC15, 0x3F4B6019, 0x79F26C82, 0xFE1D7BBC, 0x549A41A5, 0xEAE859B3, 0xF9E42CD4, 0x83BA9573,
+0x9BB4E5BE, 0x89D5CC45, 0x79115353, 0x140E4EDD, 0xF04E9E9A, 0xAED48A37, 0x5066B4F9, 0x495C91FB,
+0x23F27090, 0x014841AE, 0xBC37B6E8, 0x13220C6C, 0xBEE06165, 0x8292E753, 0xF06D767F, 0x260DEDDB,
+0xBA279FC0, 0xEBAB983A, 0xFFB3FA28, 0x94A38A4D, 0x191CB2BC, 0x0B792965, 0x7CD918A4, 0xA4DC9D31,
+0x008ED47B, 0x6FF27445, 0x7749673F, 0x8D746873, 0x6981F3EB, 0x7925580B, 0x9F03B601, 0xBE4E19ED,
+0x7815163F, 0xA36B4A21, 0xADBC0A3D, 0x1DABC999, 0xAE87C1FB, 0xFC1B28A0, 0x882551B1, 0x64D8C2D9,
+0x8A8A1248, 0x76F15279, 0x7A0F5F03, 0x412D4606, 0x0BCB3CDA, 0x3BFBB163, 0x17A09A16, 0xC55D2BCF,
+0x537F42A6, 0x2AD565C3, 0xC7B30C9B, 0x803ED885, 0x935CCCEF, 0x2376634A, 0x5514AC38, 0x1ED46EB3,
+0x411825E4, 0xD294220B, 0x6F7BB77F, 0x09ADAB1D, 0x6A1A858B, 0xAA08BF30, 0xE28278B6, 0x3944FCAC,
+0xB3808137, 0x69C2536E, 0xD7972FC9, 0xDC0CAFA7, 0x23F4E739, 0x93B285F2, 0xA9CD8120, 0x1C9C4AE4,
+0xDC929340, 0x0575FEB3, 0x7C1C5A34, 0x766EBB02, 0x8E40FCB8, 0x53C2BCBD, 0x05DFCA4D, 0xD7632164,
+0x477193D0, 0x2B201C55, 0xDDEB6C7A, 0x406B53B4, 0x0683EB90, 0x9CDAC05D, 0xF30DEC5E, 0xF8AAFD25,
+0xA218E0B1, 0xED824A8D, 0x2504702A, 0xFB406B1C, 0x372CE297, 0x31C1F3E0, 0x1160DA76, 0x8077291F,
+0x3098A87A, 0x6B1454BA, 0x056461EB, 0xAD95CF55, 0x73C82B20, 0x7229871F, 0xEB1935FB, 0x2B8D6D5C,
+0xFF4F0726, 0x41ABA641, 0xC4573775, 0x6CC7AC02, 0x919BC98A, 0x96FEAB31, 0x78A6A6DF, 0x45C955E8,
+0xAF847CC0, 0xFA138B4C, 0x18C514DD, 0x0B2CA12F, 0x0815E13D, 0x2F3CF3B2, 0x72D86829, 0xFCF6A505,
+0xB2DF87C1, 0x3E7D3408, 0x6E0B6C4F, 0xCC98013D, 0x1B83A550, 0x79DBD3AE, 0xCD40107B, 0x4659048C,
+0x4B60DAA7, 0x42120A57, 0x8298F44D, 0x90073C00, 0x01519D71, 0xBE4F48D0, 0x446412BA, 0x8CD817F8,
+0x93F97D09, 0xA6D85656, 0x196D682B, 0x721747E1, 0x0024B5A3, 0x47B12260, 0xE396C679, 0x0141A2B2,
+0xDF84A081, 0x4DB2AE88, 0x185E2A8A, 0xB0633933, 0x15467A15, 0xB45461FB, 0x744D2E04, 0xD6CD3A5A,
+0x38F35ACA, 0xB5CF34AC, 0xC3ED4273, 0xE502AF34, 0x0B3D4AC1, 0xBD79EB1E, 0xDFA1CEBD, 0x399AF9C0,
+0xAD475C7A, 0x63CB2572, 0x2B2E15FA, 0x09579241, 0x68999129, 0xBD0A6D81, 0x42B4F0EB, 0x3B464202,
+0xFC26A4C5, 0xE7F62403, 0xF7FB3BB0, 0xC7B2EA5A, 0x350770A1, 0x349A50A6, 0xA30E2B9A, 0xB2940AAD,
+0x092FC5FD, 0xCA639C85, 0x0CDEE0D7, 0x79105B5C, 0xDBF32D1F, 0x5855D4D3, 0x3CA2424E, 0x29CB3838,
+0x8997BEBC, 0x54F5CDAB, 0xCA2D5636, 0xF00D07FB, 0x37845517, 0xBCBA6AE3, 0xFA6FB5EE, 0xF1DD7D39,
+0x32CAFECB, 0x9150AA94, 0xAE333F08, 0xFB18F9D4, 0x95214FC4, 0x57430730, 0x3FC8F724, 0x71DA6C5D,
+0xEC51E53D, 0x29A3CE52, 0xDC2701F5, 0x1A953B70, 0x2D66C48A, 0x3030D126, 0x6B0A4BF9, 0x52FDA691,
+0x69FE35BC, 0x4EB0DDCD, 0x80BF21DB, 0xE69A49CA, 0xE7F11236, 0xF2F88E41, 0x6873712E, 0x25EF81CE,
+0xE8320168, 0x1C128FB7, 0xE7879CB9, 0xBDDB2E0F, 0xA3FF4C36, 0xE6E95D55, 0x22FE35C0, 0xF851545A,
+0xD81129FC, 0xB7484036, 0x933CE712, 0xE0BA0641, 0xACB0C6BF, 0x98A5C3F8, 0xB1CB243A, 0x391D6C50,
+0x48EA545E, 0xF3E91E7C, 0x175231C4, 0x24F757EB, 0xDB707928, 0xC55CD523, 0xD48F7F6C, 0x33FC107E,
+0xCD8F2220, 0x2FBA7C5F, 0x14A9D7C3, 0xEFED5D22, 0x705BD45F, 0x8653C84D, 0xAB04328C, 0xD6C96750,
+0x9306F24B, 0x931D4AE8, 0x7BBC7072, 0xA0E1F81F, 0xB06A8B08, 0xC60C1FCD, 0xB1C0BCE7, 0x419F6556,
+0xB8137411, 0xD6E3A0AD, 0x2C832DAB, 0x32B9FBE0, 0x6B6B5236, 0x9B6FC87D, 0x498A614B, 0x86E378BB,
+0x74C5FA3A, 0x9D9A299C, 0x7A5037E7, 0x7AB2D043, 0x9A3B81CE, 0x4D05D2F2, 0x98FFBE19, 0x1385669D,
+0x6B17FC87, 0x7582720A, 0x95BFD9AF, 0xA88C53DB, 0xF5234A6A, 0x7FDB491D, 0x99363600, 0xC2BBC655,
+0xA1480ED7, 0x08CD36EA, 0xA4C88FB9, 0x4BFA520D, 0x39FCDA6A, 0xAD1FD1DB, 0x090C31F8, 0x0437B302,
+0x36FCC363, 0x2D4DAF98, 0xFCF03FF8, 0x7EE5DDF9, 0xD9E5EE07, 0xC9794DB3, 0x3AF8CA3A, 0x4D5DF4FE,
+0x874D4011, 0xBCF20F21, 0xF2E13CC1, 0x3674BD3A, 0x915FB52D, 0xAA06613D, 0x89C046AD, 0x457D0ED9,
+0x78A9C4CA, 0x693DB415, 0x88010947, 0xE3C401ED, 0xF691ADBC, 0x13685565, 0x3F600334, 0x307F0B82,
+0x79992888, 0x52A3845F, 0xF4707B6E, 0x953E473D, 0x24E9BD5F, 0x26C9E412, 0x4D350851, 0xC5AD5A09,
+0x860988DA, 0x05060428, 0x502799E2, 0x9622FD76, 0x56A9ECA0, 0xDC1223D5, 0x37C2D34D, 0x7E05BDEF,
+0x8133755A, 0x24D6F78A, 0xD82E7EDB, 0xB64C6689, 0x1797232F, 0x389EA70C, 0xEF26CF70, 0x1D01FB89,
+0xB37EAC44, 0x3EA98234, 0xC9AEF06F, 0x953CDA3B, 0x9233779B, 0xF698ACE3, 0x53120767, 0x3B575148,
+0x848ED483, 0x523B3C7B, 0x825732EB, 0x04EAFC78, 0x6C757D77, 0x0582F8AA, 0x76EA908F, 0x5E1BF45E,
+0xA2879FAD, 0xF8B0FBAF, 0xCF084F8B, 0x25462BB8, 0x2CBE2BD4, 0xC011FFD6, 0x85D78E77, 0x2167AE39,
+0xE9FDD492, 0xDE1C3CA7, 0xBDE5C9CE, 0x0B38DD6B, 0xE08D3A06, 0xE8247524, 0x458C44FA, 0xA37B92E5,
+0xA3ECED43, 0x890BF251, 0x291CCCE5, 0x60EADC95, 0xD3209BA4, 0x3EB48C73, 0x88798452, 0xCFB7CC7B,
+0xDDA87989, 0xD8D60004, 0xF860A821, 0x4616A5CA, 0x47783C9B, 0xF8B3636C, 0x4779F98E, 0x948E0469,
+0xD3CD7CE2, 0x0636C30A, 0xA643CBD4, 0x83816A80, 0x7547B715, 0x32E5FB17, 0xAD4F7481, 0x6C086F75,
+0x5434366A, 0x989C8A12, 0x98F20326, 0x8AB28D3E, 0x7BB5DE3B, 0x61C86D46, 0xB156DBAA, 0x206258A1,
+0xE90EB9E1, 0x6A4F5D66, 0xE4E1E226, 0x59A5B9F6, 0x357C27E6, 0x9D3C7867, 0x76FDE6D1, 0x55B91BFB,
+0xCB603D7A, 0x0AD2750F, 0x664D225E, 0xF39D7AB7, 0xAEE47655, 0x3959EF56, 0xC7194684, 0xACB93F22,
+0x5F08DED3, 0xD640A4FE, 0x37ED0E86, 0x8892730E, 0xCA167757, 0x755D6976, 0xFD1E624D, 0x6410650D,
+0xCDFA506C, 0x603BC9FB, 0xA1CFF416, 0x2AFD0326, 0x6181790F, 0xBF38DA7E, 0x24CC4158, 0x9856CB57,
+0x855972C3, 0x901C1C9F, 0x0C6A3188, 0x17360C7E, 0xD4D69F9F, 0x05AB7F3E, 0x8395C438, 0xF1CED753,
+0xDC57E338, 0x572B6030, 0xD7666634, 0x475681AB, 0xA78F6130, 0x58D20E73, 0x1FB08C1F, 0xB9B4C68C,
+0xCC6809F9, 0x474BB013, 0x389D9979, 0xAE0FDAED, 0xC573C16C, 0x960E2CA0, 0x41DB0590, 0x130DBCC4,
+0x85884EEC, 0xF3959F43, 0x69E8ECA0, 0x5DF588FD, 0x7FD1A059, 0x6BA18602, 0x2D2CCD38, 0x7F2CD9D5,
+0x9BFB46B2, 0xEEF7493E, 0x1F9A6881, 0xA3A6BBF1, 0x60647A37, 0x7093D946, 0x0F30E707, 0x8E1CD2E6,
+0xD07F2BFE, 0x33B451C0, 0x467CD63E, 0x9813BDDB, 0x72899590, 0xF9B07E0B, 0xA888DFF1, 0x170F25A8,
+0x9B559C40, 0xA89B952D, 0xF9472C85, 0x805A4999, 0x45E5F586, 0xFC73FD03, 0x9636E8CB, 0x69755317,
+0x25EF512D, 0xDE6051C9, 0xEA2645B9, 0x2FA5074E, 0x5D987F1A, 0x0EB556EB, 0x2441AF5B, 0xAA332606,
+0x7416B0BE, 0x8586D595, 0xA45FBFCB, 0x5D07D220, 0xA136572C, 0xBB0DFF3E, 0x77459FB4, 0x121D86BE,
+0xAD5624B6, 0x11840FED, 0x7CCA7161, 0xC2324995, 0x1458C2A7, 0x5685F191, 0xE5303439, 0x1C099DC6,
+0x67FEFA35, 0x1F491BD7, 0x6793649A, 0x91C53319, 0x5AA5123D, 0x6107DED9, 0x1F525558, 0x58020773,
+0x17D8F59A, 0x37DA0656, 0xA035CA03, 0x73E9A349, 0xC94EE0BE, 0xB68CF24D, 0x15B24C48, 0x34B2B4F5,
+0xD6B7992B, 0xF1B1468B, 0x19F98D3A, 0x7C293C83, 0x5345BA67, 0xE29E6F16, 0xB9FC966F, 0xBF8C7B46,
+0x2090B311, 0xC9405B96, 0x2CE62A89, 0x044B6B59, 0xC0478C8B, 0x0120BC65, 0x0348B1CB, 0x1F79BAC9,
+0xD053C63E, 0xF916490C, 0xBC500493, 0xAFD2F8D8, 0xD7B4CA3C, 0xD4377C8C, 0xCC21CBF9, 0x48E09FE1,
+0xCAF1E092, 0xA1C1E4CB, 0x86B356B8, 0x8F7581FA, 0x1BB44C1E, 0x7D29D75D, 0xBBA5347B, 0xA094A634,
+0x478A8561, 0x252F30B6, 0x191DFC6C, 0x01F6C9C1, 0xFEFEF628, 0xAB6DD532, 0xC051AD09, 0x9FD86873,
+0x6481B0B2, 0xE980BF2B, 0xBAF98674, 0x315C273E, 0xBC112D8D, 0x6910026F, 0x35CE3C1C, 0x1A2329A8,
+0x0AFA79A8, 0xF15BDBE8, 0x47554A40, 0x9DF4A165, 0x462B80F2, 0x0C952809, 0xDAE30E54, 0x6FF681B3,
+0x530A7646, 0xFAB58FC3, 0xB5C181B6, 0xE70CB85B, 0xC1BA6357, 0x55D772D5, 0x1CF15C6C, 0x1A2D8C23,
+0x3566B4DE, 0x98F6C364, 0xBD86BCA7, 0x628E7E94, 0xED7FADAC, 0xA6FC3603, 0x7D4AB1A0, 0xE20AF47C,
+0x4B863CB8, 0x1F281291, 0x1BC3DB31, 0xF65B73BB, 0xE589E147, 0xF3013D38, 0x95CF0D08, 0xF7062673,
+0x05EBCFDF, 0x0F444E85, 0x0E5FDA33, 0xA16C7399, 0x45C40069, 0xF645E98B, 0x3D2377AB, 0x4930643B,
+0xE3ED28E6, 0xB797447B, 0x8465C23B, 0x2655D010, 0x0FB1EAAA, 0x2D87AA53, 0x31CCC171, 0x24D5D436,
+0xAA168EBA, 0xBCACC164, 0xBD25EDE8, 0xF3DAC2EF, 0x5DBD3449, 0xD25F34C1, 0x92BA759E, 0xACF9A154,
+0x14CB6C6C, 0x0316ACBA, 0x2F277A9E, 0x3FBA5035, 0x55833724, 0xB2D1F9FC, 0xC161B772, 0x528FD62F,
+0xCEF3CAF2, 0xFDFE7165, 0x65025BAD, 0xFD179D98, 0x36C505C4, 0xA15AD311, 0x9290D6D7, 0xD9783E3B,
+0x05E4F971, 0xD2D3C91A, 0x3940FD30, 0xD1C65A7A, 0xD2161461, 0x4391D7D0, 0xA93155DD, 0x4E7E750A,
+0x61AFDA2D, 0xC2E9BCD2, 0x63A99B7E, 0x5ED1EBDF, 0x5675D215, 0x1E40E7EE, 0x53565C38, 0xEACFBC49,
+0x06088A47, 0x2F181BA6, 0xD7D73518, 0xF38982BF, 0x37734BCF, 0x1CECF6CC, 0xCDBBF0B0, 0x911347B8,
+0x9D494A95, 0x412E51D4, 0xB77CABC7, 0x64AD8BE8, 0xB93923FE, 0x1CC93B4B, 0x1560D8D6, 0x7AB75480,
+0x9C3B38D0, 0xC48BF0EF, 0x8E3C97ED, 0x658DBADE, 0x2B72105F, 0xB8AD06D9, 0xBCC9B2E6, 0x7945E119,
+0xA74522DD, 0x6B96FDD5, 0x1E767D66, 0xC41B13E5, 0xA64E8247, 0xAEFB0D69, 0x773C610C, 0x820AE8C0,
+0x27FEAF95, 0xDF4BF33D, 0x55300588, 0x5D98BC8E, 0x3EB72C59, 0xF7EF1007, 0x17FC7CC7, 0x0C2F7567,
+0x1F46B137, 0xF7EFE65D, 0x6371238A, 0x06733B2B, 0x7BCDA346, 0xA6F41E68, 0x4BA3F606, 0x8C41DC12,
+0xB324E78D, 0xE8B8D4AB, 0x3E0EB984, 0xED9E59C3, 0x4AF59658, 0xC7C6FFCD, 0x7A19175B, 0xDFD45664,
+0x91D1E302, 0x440D578D, 0x7359182D, 0x83988223, 0x956B73BB, 0xA950E523, 0x66258211, 0x80C43292,
+0x13A32745, 0x2CBA8645, 0x0289FA34, 0xA5F1AD25, 0x14430F9D, 0xF0B5FE00, 0x00F6CC2D, 0xCF8E67F8,
+0xF71D52F2, 0xB4D9D3A9, 0x6440EA04, 0x57916E86, 0x7AC00CCF, 0x9FC21FAA, 0x55C42611, 0x05A2B6A1,
+0xC3B39DC8, 0x85239FFF, 0x99EC16F8, 0x1FE5973E, 0xEBEE7388, 0xEC73F099, 0x15C311B5, 0xDDB456F4,
+0x3641511C, 0xD944CB7D, 0x0CA181CD, 0x6E427BD0, 0x43B225F6, 0x799FC38E, 0xEF75951F, 0xAB18C973,
+0x8B6CB426, 0x07DA899D, 0x7EF92557, 0xA1FC6101, 0xD736523B, 0x69928A25, 0xD8C59439, 0xD50225DE,
+0xD123E1FB, 0x6DCBEAAC, 0x8C6DD86D, 0xBC3EC8BE, 0x8D5422AC, 0x373ACCAE, 0x73C563B9, 0x111E1CFF,
+0xC98C11C3, 0x06FE2963, 0x2471476D, 0xED00D762, 0x870EF78F, 0x3E7E87F5, 0xF799D926, 0xACF500BA,
+0x8A111F64, 0x61572488, 0x08B44BDD, 0x7EF6241A, 0x0EF67BCB, 0x457DD7B1, 0x87B07F92, 0x821AA5EC,
+0x75FBA116, 0xAEC55FDE, 0xC876C555, 0x02273556, 0x3C639B5D, 0x11F66283, 0x41F32CE5, 0xF50CA18E,
+0x95D3D8B4, 0x474F57F6, 0xABE7FC6C, 0x64992099, 0x60E06FF2, 0x21A22D74, 0x1CF24624, 0x6269BA07,
+0x6C9335D5, 0x67D9485B, 0x840A7D69, 0x576E6D43, 0x511D4317, 0x9F670F9C, 0xC5F40038, 0x63742366,
+0x0963E3A8, 0xA0314831, 0xBB00FF00, 0xB964F104, 0x84A59002, 0x34315FE5, 0x69937505, 0x6A297A3D,
+0x03E5CB4A, 0xF8F87830, 0x16152768, 0xF68DAC7A, 0xF87FCD06, 0xABB660CC, 0x999EF033, 0x35A17008,
+0xC3B38E21, 0x8CB47BA6, 0x5238B14B, 0xE0900222, 0x68B39441, 0xDDB83FD5, 0x8719034A, 0xD5F64F60,
+0x1CF46B56, 0x36AB6110, 0x9B8B989B, 0x28A3526D, 0xF71056FE, 0xAD2086FC, 0x0B61966E, 0xCF7BDD0E,
+0xD8B34C23, 0xB61006E2, 0x692243B5, 0xB16AD49B, 0xA42C76C1, 0xB7A51CE8, 0x897286FC, 0xA5B0FFAB,
+0x784325B9, 0x69D82C93, 0xA3CB473D, 0x9C795138, 0x70A78E4E, 0xBFB239EF, 0xB6B870FC, 0x4FD056BF,
+0xD930685D, 0xF2F7A9F5, 0x7DCAF298, 0x0BB0D05B, 0xBBF41734, 0x67E57744, 0x53BC2FAA, 0x3A3843B8,
+0x27E79D27, 0x54CD2D1A, 0xD62E925A, 0xA1FC020B, 0x8AE1A462, 0x1B60DB28, 0x74464359, 0x74367FB9,
+0xC99EB928, 0x8F37EFC2, 0xD6BB18FD, 0x9C043B8E, 0xE331994A, 0xB1100555, 0xCA37E6F4, 0xED7B5B1B,
+0x0A8B68D6, 0xFF0C2ACE, 0x715B0542, 0x280FD906, 0x46A4A998, 0x8781DBC8, 0x19248EC7, 0x85AAFEB5,
+0x2A54201F, 0x2EBC4CBE, 0x768B2385, 0x6D5F3AA7, 0xB64556C7, 0xDFA972E7, 0x49CF4FF3, 0xE942D211,
+0x6587734A, 0x12FCDCC0, 0xD311FAAC, 0xCF1E6B5E, 0x30BAC063, 0x83ED01C8, 0x01A5E1A8, 0x0FD8BC81,
+0xD8717499, 0x62F2215F, 0x34E2C977, 0xB996A033, 0x8DE06621, 0x264309BF, 0x1E3AC765, 0x6BB0E35D,
+0x83F9F63C, 0x45A84A7E, 0x3FF3D281, 0xE49D5BD3, 0x60438D51, 0x2307724B, 0x0735C2C0, 0x1FF17505,
+0x5E249F5D, 0x4928880F, 0x1711D02F, 0x91C7F4AD, 0xDFE5A0CA, 0xDC20B5E7, 0xBC3C3513, 0x13DD2ED4,
+0xB69BE094, 0xF5AC975B, 0x42C0FDDB, 0x5D2BC6C2, 0x6AAF66A0, 0xD6B88191, 0x7FBB75DD, 0x90E3CB89,
+0x663DC6C0, 0xCC08E303, 0xD113963C, 0x739E16E1, 0x790D9E7B, 0xEA401FEB, 0x8F8BAF56, 0x3F86B968,
+0x79A3E7F0, 0x0E7A8F56, 0x9DB31BA4, 0x359B2B1C, 0x31F5D418, 0xBE287CE6, 0x32C5563E, 0x6FFE0CB4,
+0x3CB22ABC, 0x2E930653, 0x97B1068D, 0x40143FA6, 0xDF35AE7A, 0xFB3F902E, 0xBE9C4856, 0xF6BE41B3,
+0x104E0157, 0x3C2EC392, 0xA14C7395, 0x08F81395, 0xA0F0EBBC, 0xF4922702, 0x96BB8C01, 0x4EEC4373,
+0x532D98A3, 0x41E4EB0E, 0xA7FCB2E2, 0x6B88ED09, 0xF3787026, 0x390AC851, 0x7F10B24C, 0x7ADD4303,
+0x836841F7, 0xC0D915EE, 0x90FF0DD7, 0xFAE2C9A8, 0xE43A20EF, 0x5DCD5282, 0x2E37D621, 0x7BE59D67,
+0x3999AB6A, 0xD6EEECBE, 0x59E24FE8, 0xB4372C35, 0xB089B643, 0x5C3D325D, 0xCD193EB7, 0x76B3EC4C,
+0xAA8DFAD8, 0xE4EC31FB, 0x61422D0E, 0x2A6D82E6, 0x50E6AF30, 0xB6218F15, 0x130BEE59, 0x3AC1F77D,
+0x3E5E047D, 0x795E1224, 0x532CB0B9, 0x5823A84A, 0x9761B9BD, 0x8A891465, 0x3D8A6B39, 0x8E47BA44,
+0xAB0C4E89, 0x5F3C31A3, 0x89D89C98, 0x3CC20CBA, 0xFBFF4760, 0x6C1D41EA, 0xA9A5B21C, 0xBF3B8E5A,
+0xEAF5A54E, 0x2B1A4418, 0x1062DE07, 0x7023E70A, 0x9582E543, 0x3D8546CF, 0x9E480D53, 0x33A84DC9,
+0x0C84630A, 0xD091000B, 0xFE74898D, 0x32808550, 0xA8815A1E, 0x518C40AF, 0x413C3693, 0x8BBC677D,
+0xD925568C, 0xBA5C91EB, 0x446F983E, 0x3155E2D6, 0xA4A4DC35, 0x6FD20E39, 0xD4311C4B, 0x6224D7DB,
+0x8F273B5F, 0x665FF391, 0x452BD5A5, 0x28C14BFD, 0x426EA6EB, 0x47F89FF2, 0x1BB26756, 0xF62D88A5,
+0x22F902DF, 0xC412C696, 0xEBCD8185, 0x4EAE95F4, 0x02D947AD, 0x7C534940, 0x97CE9EC3, 0xBE08B4DF,
+0xE5181DAC, 0xEB154F42, 0x059C84D4, 0x127DECAF, 0xF85ECA9B, 0xEAB21FB5, 0xE04AE704, 0xBC6CC6DB,
+0x6108D835, 0x90308EAE, 0x4435A57A, 0x387C251E, 0xC2C8A345, 0x3C1FBE26, 0xAADAFC5A, 0x18BAE4C1,
+0x7E5756D2, 0x209D5E0D, 0x3BAD9BBE, 0x5E0F1E87, 0x3841A8F1, 0x7E70C725, 0x2095365A, 0x0A9F37AA,
+0xEF04CA3E, 0xA3C5DC19, 0x5F5E5D9A, 0xE2382FB7, 0x020A87A9, 0xE0487AB5, 0x91345C60, 0x1495AD92,
+0xAEEC1FA7, 0x032A09D6, 0x71E301DD, 0x8A3DEFEE, 0x08F852E9, 0x176C1409, 0x4152629F, 0xACB9C532,
+0x71A15F91, 0xE931A18E, 0xEE0CB5E4, 0xCB91D34F, 0x61D47A1C, 0x372C2B4A, 0xC91F6BC7, 0xB9D1A79A,
+0x29C23511, 0x36BB83EB, 0x87BE9DA9, 0xE10BC442, 0xE7A0EA66, 0x260CB1D6, 0x79D7A86F, 0xA8F6D873,
+0x39F47CC2, 0xEEEBFD50, 0xA18DEECA, 0x5D95ECE1, 0x3C64D5A3, 0xD8938A2E, 0x37362DBC, 0xB27E0063,
+0x90BECBF6, 0xBB5B076F, 0xC0D542B7, 0x8FE62730, 0xCD7B5C86, 0xC9E5C4E4, 0x122231D5, 0xB342AFEC,
+0x96BC8F01, 0x8373BEAD, 0x2642EA2F, 0xA6C23799, 0x53927368, 0xCC2C75EB, 0x00FF4E71, 0xD0E3A7B8,
+0x33220E67, 0x385EF867, 0x39D1298B, 0xFB5ECBB2, 0xB5C6E3D7, 0x5F68867A, 0x6800FCE6, 0xE0646F26,
+0x73373C3C, 0xA420D643, 0xE760DD8E, 0xB3495DB7, 0x2D270750, 0xE8A097D2, 0xD277B115, 0x978914E8,
+0xC881C926, 0x8494A56C, 0x69EFCC5E, 0xF3E743DF, 0xFF6D50A9, 0xE67C90F4, 0x9CE89EA0, 0x37A1BE29,
+0xC8844205, 0xE386D562, 0xB65B27C7, 0x395BEB08, 0x387DFA83, 0x84C6FD90, 0xCF867D9E, 0x29B28700,
+0xAA395CB2, 0x240E6C71, 0xBFC46193, 0xC167DA7C, 0x8AC657F6, 0xD3927B9C, 0x239A8447, 0xA0DFD740,
+0x60F653E1, 0x340BBBF6, 0x538A7F65, 0xAB466A2E, 0xCCB5D0D9, 0xEE7635F4, 0x75B2395F, 0xE1CF16D4,
+0xAA27E8EF, 0x44294B4E, 0xE1AA5F60, 0x5610C272, 0x7A3EC387, 0x8FB8E834, 0xE1F66221, 0xECEB4862,
+0xB443FBF1, 0x74C731C2, 0xF46811EE, 0x87A5EB56, 0x46F57C9C, 0x4095F719, 0x95C4F186, 0x96405D69,
+0x8256582C, 0x2558912A, 0x292EBD77, 0xA014C491, 0xC644EE5B, 0x63CBAE65, 0xD6148EDF, 0x2B56F4F7,
+0x2FE32DF0, 0x8637A789, 0x6876C3BC, 0x7FD9FD3C, 0x18AFFF90, 0xCAE4DB71, 0xBCB31D6D, 0xA5B6E9C0,
+0x37B7C800, 0x6DC9A068, 0xEDB08D64, 0xCA7D69CC, 0x3BCF606E, 0xFEF9008A, 0x5408B6A5, 0x2AB65F71,
+0x7C87966C, 0x393CE79D, 0x43E88A1C, 0xCB3B5520, 0xEC092C8B, 0x50E51634, 0x85ABFC16, 0x8092DBC4,
+0x486B920D, 0xA9338449, 0xF737399D, 0xFE040ED9, 0x7A73D2E6, 0x66651CF7, 0xDBA1003D, 0x217A424A,
+0x08E28A10, 0xCF2BA90B, 0xA39F05E8, 0xAC63942D, 0x3CED7F81, 0xD0B389E8, 0x50848D49, 0xD112D195,
+0x798FD253, 0xB275C6E7, 0x14DB2CEC, 0x71F45E70, 0x0E75AADC, 0xFFC19977, 0x70B3C6AD, 0x43F88E36,
+0x15CA7C0D, 0x6E852285, 0x587EDE09, 0x2EFA29BA, 0x8B86392A, 0x13DCF1DA, 0xC2522332, 0xB01C99F5,
+0x8A48D6E2, 0xB58C408D, 0x45279E73, 0xC3308C19, 0x069BFC95, 0xA34BC26C, 0xCE7FF15B, 0xE7345900,
+0xD253F9AF, 0x7E2A2209, 0xE5FD7D99, 0xDD524039, 0x991F9DE7, 0x22430A4A, 0x46F09C65, 0xC8EF098A,
+0xE3DBA4CA, 0x1650F44B, 0x83C06683, 0xB1CC2624, 0xFF2F6CA3, 0x5D47C7F0, 0x46E65658, 0xDF6EAED2,
+0x521EDD14, 0xBCBEF1E5, 0xE0A98DA3, 0xBE1D4CB4, 0x2E0F83BA, 0xFA3D90FD, 0x8A9A4714, 0xD829202D,
+0x238EEBAE, 0xA6224482, 0xCF1F4655, 0x50FDC0F9, 0xA836B245, 0x3141A295, 0x2787484A, 0x62F900C3,
+0xBE71E155, 0xFE9F2453, 0xE77EA224, 0xEAD83B10, 0xAF6F6938, 0x06573D19, 0x8A74B188, 0xF7DBE9D2,
+0x1CF1E71F, 0x69F0EE70, 0x0EE93A5D, 0xE51A33A7, 0x41913BC1, 0xCC93F22D, 0x1DD7C089, 0xD5D3B7C9,
+0x790A9DE6, 0xA9AD9A02, 0x86A2E28D, 0xDF883ACB, 0x0750915D, 0xFC95D80A, 0x4A392675, 0xBDD989F6,
+0xA1941591, 0xB6ED46C9, 0xEE1206C9, 0xE8824ADB, 0x80C0F086, 0x4F7B8861, 0x839B3875, 0x90C197FF,
+0xF8C41EAF, 0xB6D3CA72, 0x92D43679, 0x5EDE8A98, 0x3BF47F8B, 0xF9F56BCF, 0x25F076E6, 0xC3F33663,
+0x16FBA19D, 0xA0E34A36, 0xA0C4D4C4, 0x4216C634, 0x8D1DE769, 0x2A8A2EA4, 0x42173BA1, 0xDEE72251,
+0x09EED658, 0x37B51F7F, 0xCBA9A14E, 0x48E2A43F, 0x4057F7DC, 0xF267B93C, 0x5F12BE9B, 0xD233031A,
+0xD9882CB7, 0x2D520473, 0x8662B2C1, 0xCC7D939E, 0x27FFBAD4, 0x62B2C6D6, 0xE714F10C, 0x8E4AC4B2,
+0xDD8B97CC, 0x5153480B, 0x4B18356D, 0xBAF96002, 0x53812383, 0x3739BED4, 0x61AC610F, 0x79BC983D,
+0xE1FE689C, 0xFDF6E058, 0xE1B3969A, 0xF81B61F9, 0x1F65231E, 0x1B16F072, 0x2B624BE5, 0xC7CE3EEC,
+0xBAE28D60, 0xE56A14F9, 0x3F3E11A0, 0xD2E8603D, 0xD3D5327E, 0xB0821155, 0x032DFE80, 0x2DDC4D5C,
+0xB7AA9B57, 0x97F0AEAE, 0x92DF8F24, 0x9D786360, 0xEE9FA702, 0x61F9AF5C, 0xCA63BC45, 0xA8504A27,
+0xF543720D, 0xF5BDCC78, 0x7882971B, 0x11604BA9, 0x72331BCC, 0x642C28CC, 0x591291FF, 0x2DE98AC4,
+0x6156E8B5, 0x84BE10CC, 0x8C7FF059, 0xBB2B7FB7, 0xB11F8D4D, 0x72FF2B6B, 0xD3500383, 0x8279DA51,
+0xBBC0987A, 0xB52E1649, 0x36A73363, 0x95523F90, 0x5814C21A, 0x93BB871A, 0x6337E0EB, 0x7DCBFAF6,
+0x4CED8E28, 0x192B3E81, 0x457D0BFD, 0xE19019CC, 0xFBE829B5, 0xA8FF2C5A, 0x4B5E7812, 0xCD985C1C,
+0x94985A95, 0x220C0B07, 0x6EF8C67A, 0xAAF7235E, 0x66D80EFB, 0xE13FA7FA, 0xDE0F941F, 0x3F103CDE,
+0x7DABC90D, 0xB6F12F81, 0x524E0466, 0x5D4CF26C, 0x2DF5486C, 0xAE8BA786, 0xE4E69D98, 0xF74675DB,
+0x126A63D7, 0x5E81FCD8, 0x29E6A6AD, 0xF8676558, 0x1AECDCCD, 0xB8621068, 0x1919B812, 0xD256EB17,
+0x17548B13, 0x26651545, 0x546FD130, 0x78317F86, 0x649C8C28, 0x15344084, 0xF3FC78A3, 0xCB55D45A,
+0x22C96EDF, 0x150D45D4, 0x987C7D0D, 0x3885E587, 0x7D32383B, 0x325D3C99, 0x5A402FA9, 0x39759D58,
+0xFD66466E, 0x6F33F31A, 0x52B63662, 0xCE5524D1, 0xA27BC73A, 0x50F1ECF3, 0xF3CF8532, 0x121EB60B,
+0xF68E37D2, 0x123F4B31, 0x544CB489, 0xA21601BB, 0xD80A1FE4, 0x227FBA56, 0xF9B640F4, 0x439F4D6F,
+0xD6762A40, 0x14ACC299, 0xB0FB17E5, 0x5C2ED469, 0x6C66F06E, 0xF03CCA36, 0x9C17CD53, 0x06F2A080,
+0xF34EF76C, 0x0750A675, 0x0DC05C72, 0x4C1C6917, 0x3BA48FE1, 0xF3692128, 0x0EF1F37B, 0x9D1898A9,
+0x6A211453, 0x87E8FE93, 0xC538E323, 0x1E14E7AA, 0x71D98D71, 0x3E382221, 0x601F8AAF, 0x794EF7FA,
+0xAD063AFE, 0x0E909028, 0x444740CB, 0x8F291524, 0x675465FA, 0xB0D12C8C, 0x6A3ADC7D, 0x0F1D359D,
+0x4B8DF268, 0x70EF8A0F, 0x3E516582, 0xD790953C, 0x89351472, 0x9960A73D, 0xF22F7AA8, 0x69BDD32F,
+0x3D327B97, 0x4840AD9A, 0x4F9393F3, 0xA91BECA3, 0xC89C24EC, 0x1238D23D, 0xC992612A, 0x313AB46D,
+0x96956D01, 0xDA6863C6, 0x7DB5DB85, 0xB2C2634A, 0x139EE04F, 0x48796C7B, 0x4A7E7D4A, 0x5C4A7B76,
+0xF367CA7B, 0x9379346A, 0x3A29DFE1, 0xB4223575, 0xE4D6AF08, 0x1B76E75B, 0x99461D5F, 0x27077C91,
+0x5EDC6774, 0xB975CDAE, 0xFE8124BC, 0xE653BCF4, 0x1C423BE5, 0x61BED12C, 0x902AD28F, 0x36E2B668,
+0x3A9D6607, 0xE0EC2AA3, 0x80661580, 0x0E787C02, 0xD7D0928B, 0xAFA55455, 0xEB6AC81C, 0xAD8F6E04,
+0x695AEF2C, 0xCD3D3605, 0x2D5F6579, 0x30BF443D, 0x3EC01856, 0xB2A0AB9E, 0x0FA64557, 0xA762329E,
+0x82C6CFA3, 0xEF1E9A44, 0x0C1364E8, 0x06B9267A, 0xD6710BEF, 0xA93B4454, 0xF041A2B5, 0x418E8E67,
+0xE9D56860, 0x4EA5D950, 0x051E0923, 0x1F5AB850, 0x8B792B97, 0x0C6C7E4A, 0x0D62820D, 0x00E9E54D,
+0xE150F9C5, 0x3F7C2182, 0x4E399DA7, 0xBD805C50, 0x4FA24FBE, 0x25CC13D6, 0x08A5E84E, 0x809E5EB3,
+0x1B28F0D4, 0xE1B11F8E, 0x60273BA5, 0x4543EF22, 0x12ACE1E7, 0xC8A6477C, 0x0CFAD10F, 0x877923E1,
+0xE4FFE526, 0x2E833C9D, 0xED37DC88, 0x34B6A4EA, 0x38C9C594, 0x86C3854C, 0xBCAC065F, 0xE9B1D9B7,
+0x26F9B464, 0x487F2F6C, 0xEE2FAC31, 0xF18DFBC2, 0x0242E3D0, 0x615EB1F7, 0x5B1D5672, 0x005421BA,
+0x5989BC89, 0x1B0254AE, 0x09E37EE6, 0x5B6B6507, 0xD9E901CF, 0x0131E0F6, 0xD7B3F513, 0x460ED1D0,
+0xE0DE2D48, 0x42234CE3, 0xADF08FDD, 0xFC6EF8D1, 0x6E120DA0, 0xB1ECBEBD, 0x0A413E0A, 0xACEBF6B5,
+0x1E83D4D5, 0xCC6A09B3, 0x7BA9E064, 0xE20DA1BC, 0x23663F48, 0xC720111C, 0x1AD9C701, 0xBB8EF56C,
+0x124F9B69, 0xD5D1A61F, 0x68C7CAD4, 0xD9134C9D, 0x11C3A1B1, 0x3CECD1CB, 0xEC240159, 0x3E5FDA32,
+0xD19A8EF9, 0x27567453, 0xF24CE830, 0x3538D415, 0x8605CE47, 0x8552A337, 0x44CBA38D, 0x81064CB8,
+0xC690EB2A, 0x6B5F3808, 0x459C861C, 0xC4577153, 0x6DCA1C0D, 0x7422EE53, 0x53C3BCE3, 0xB015A094,
+0xF66FB034, 0x6455E9F0, 0xA1340035, 0x11AF6E40, 0xF7973C5D, 0x98977D20, 0x3ACCE833, 0x32EFC696,
+0x2CA05107, 0xC6C28CAF, 0xA495DDA8, 0x6387B5BA, 0x7D86A017, 0xA75D43E5, 0x774F1C3C, 0x832E7CA7,
+0x50AA1AD8, 0xEA2B021B, 0xE7A71F5A, 0xB0EE0DF2, 0xA30FC082, 0x53537833, 0x95C99C68, 0x9B6489DF,
+0x82121828, 0xC7FB57B8, 0x1082B309, 0xE333E676, 0xCA56876C, 0x41479C68, 0xF7590BE5, 0x29DCBBD8,
+0xC601FA73, 0xB76162F4, 0x9ED6F6C6, 0x9F15B830, 0x4D7BD029, 0xCAC2E513, 0x330EFC7A, 0x381884E5,
+0x168C5470, 0x80CBF483, 0x4EBD6649, 0xA95A7546, 0x139B5744, 0xA2CBFCCD, 0x40E737BA, 0xE9D01E0D,
+0x47778030, 0xE968E0A1, 0x790BDB3B, 0x3518FDF5, 0xC75104D3, 0xCDEBE0C2, 0xD3382243, 0x7E8EF9BC,
+0x1EF0C625, 0x5993BBD9, 0x5FBB6FD4, 0x47C74BFC, 0xFAC16B24, 0x2B69E3B2, 0x2A5E1346, 0x378FF779,
+0x2739581F, 0x635E5CA9, 0xCF407B9D, 0xDAC303F8, 0xB6795A89, 0x7183CDAC, 0x4FCE5570, 0xE8D1EEA3,
+0xA172187E, 0x0D329AA7, 0x38931B61, 0xF9756BC6, 0xC9E5F012, 0x3EF5DD97, 0x797A3856, 0x41780476,
+0x85A21203, 0xB4476482, 0x41CFB8FD, 0x41058A1E, 0xDAA818C8, 0xF5D4480E, 0xA1ABD4F9, 0x1185ECC4,
+0x80A1A902, 0x971506D7, 0x584B0235, 0x13BB33AF, 0x994154EE, 0x7CE6D108, 0x4EB6EC80, 0x227AB0DB,
+0x0A63076F, 0x1EBCE165, 0xE839590F, 0xFDC4F1A1, 0xF7B05E25, 0x9AA93C70, 0x0E9ACABC, 0x1453AADC,
+0xF1A6A62E, 0x698A6B94, 0x89F2FE5F, 0xB29FCE03, 0xBC2D4B23, 0x2DE23445, 0xABF5BB0F, 0xD2EA7C1D,
+0x2333C0EE, 0x29F0BD23, 0x54D7B1F1, 0xDD73C4B3, 0x72D93272, 0x1885708D, 0xC7B7AA07, 0x7E739030,
+0xFC1BB3FB, 0x93EA501B, 0x01020736, 0x6A419448, 0xB07B58FE, 0x9FFBD363, 0x4BDF00BE, 0xB3B829F9,
+0x5FED91D4, 0x08AC1F3C, 0xC10AED03, 0x282215B2, 0x0A0B24F3, 0x652AF2B0, 0xDC7D8076, 0x1A3B3E8B,
+0xD3B66C41, 0xA9CC3318, 0xD2DF75DF, 0xE1CB253E, 0x2E113076, 0x5BCAFAE2, 0xBD1C5F4B, 0xBEEB187E,
+0x816976B7, 0x24EDC300, 0x0FF4874F, 0x46E106F1, 0x1C088A46, 0x41A7B887, 0xDC5639C7, 0xABCBBBD8,
+0x985FD909, 0xB8DEF0A4, 0x35EAB70D, 0x150A95EB, 0x456F3386, 0x6AB22439, 0x4A7A6B54, 0xDB54D0F2,
+0xAB221604, 0xF4EDBCA3, 0x3B4BA68A, 0xC8619E9E, 0xC08E270A, 0x39A080E9, 0xDFAC2FEF, 0xE1F5ED42,
+0xC35AF663, 0xE5A8EAC3, 0x6836C4E3, 0x45C054C8, 0xC1A1E0D1, 0x32AC6118, 0xB85BF0AC, 0xBE1DF6FF,
+0x5EA299C0, 0x29D230C1, 0x22F35809, 0x01B321B7, 0x93ECC83D, 0x7AC3166B, 0x63AF86F0, 0x3EA4154E,
+0xED796A52, 0xC7E51C3A, 0xD2C04692, 0x79FEC8A1, 0xC1DEBADC, 0x0088AF08, 0x00A853F3, 0xD6156FC0,
+0xDFFD6442, 0x638271CE, 0x2E21EA14, 0x0E6FD273, 0x35C0C940, 0xB0AEB624, 0x01F367A1, 0x7256FA24,
+0xB04D60B9, 0x6A56DF35, 0x001EAC04, 0x1366F7E0, 0x8D678EA3, 0x81693040, 0x17FE5E86, 0xDE03E906,
+0x38FBAC33, 0xEFD05684, 0x310EE481, 0x1537CA90, 0xDD8E67A9, 0x42857616, 0x0E13D8B9, 0x8066EA0F,
+0xC5587F2E, 0x0BDE1E17, 0x6C59DFE6, 0xC2E6546D, 0x2B1A824F, 0xDD5DD14C, 0xD1DE9F39, 0x331555DD,
+0x8EDFF0BA, 0x9EF9D02D, 0x76D69A1C, 0x700619D9, 0xDE5A684C, 0xC17ED730, 0x175D216B, 0x005FFD20,
+0x32999438, 0x84E28117, 0x02CEFEEF, 0x5FD31BCE, 0xEDE4D6E2, 0xEE979A2D, 0x1E8B8A22, 0x913D778C,
+0x9D066405, 0x4086F49B, 0xCA82DCED, 0xFADD5B1C, 0xCD6773F0, 0x990A217A, 0x8BE9AFF1, 0x0969B8EF,
+0xB80CA2F5, 0x6C2E8778, 0x180C9350, 0x77F32C43, 0xB547ADF0, 0x42094F70, 0x36C0644E, 0x727AFA77,
+0xF94582FC, 0x1BDC2CCA, 0xCA32350E, 0xFD716333, 0x89ECEC0B, 0x70A3DA5F, 0x4F5F41A5, 0x933C222E,
+0x76952C9D, 0x02B35947, 0x85A29DD6, 0xC6527B75, 0x206527BF, 0x8C6BC2D7, 0xF10981DC, 0xC7CF6041,
+0x79F193B0, 0xBC74C931, 0x0D3AF533, 0x047084D9, 0x3B8D9990, 0xB0F00B6E, 0x373E75A3, 0x37C2BF9B,
+0xD4AA0B50, 0x964D508F, 0x5BC8DDDC, 0x668B902E, 0x20C66E5E, 0x453DA8B3, 0x55C1638A, 0x42D7DD2E,
+0x9321223C, 0x2FFCFCF0, 0x28EC0126, 0x3EAD4878, 0xC774A68E, 0xB07AF6B6, 0xACB179B8, 0x91E9006C,
+0x485DF74E, 0x5B55709C, 0x41FD02F2, 0x5F778D96, 0xB0FA8BAB, 0x56A91D17, 0x2A28A5C1, 0xAA292DD4,
+0xC89892E1, 0xAD9FB329, 0x0E4D06B9, 0xA5407A7D, 0x506D5654, 0x906F9D8E, 0x3F87BC25, 0xC831E092,
+0x5B3B4D9D, 0x6E8341A9, 0xD7379544, 0xA1AA25D4, 0xDC3A4141, 0x50B62D58, 0x4FABD74D, 0x2F337DB0,
+0xD7B6053D, 0x77629884, 0x7882970F, 0x95BD31B3, 0xE3C601CB, 0x1BF0A925, 0xA322C394, 0x569A04B4,
+0xBF0E517D, 0x4E0B5D3C, 0xDDCD4A47, 0x596E7449, 0x7C9B7A0B, 0x85D13864, 0x13598BEF, 0x0698B397,
+0xEF9F86F5, 0xC5AF4880, 0x24FDA8C2, 0x2A33B398, 0xE44B92D7, 0xD07EB429, 0x60692DA5, 0xFA8A220F,
+0xFD0123AE, 0x8C290FCE, 0x607C66C9, 0xFB220C16, 0x4643DA49, 0x8E0B9E15, 0x4F22EFE6, 0x5F6A3653,
+0x49AC88F9, 0x22D2B657, 0x91006331, 0x41E8C70B, 0x4EFA5410, 0x68A1E192, 0xC17E7B41, 0xE7C4D279,
+0xB5A62DB5, 0x5ED37888, 0x290A58FB, 0x8A01EC7E, 0x3AE77500, 0x2A871982, 0x2BB93033, 0x0EEB8334,
+0xBD07D574, 0xB93A811F, 0x5105AA15, 0xDD569817, 0x6EA806C6, 0x71C78BF8, 0xE0FB712E, 0x1C7A3CDC,
+0x6E18F9E1, 0xFFEF7903, 0x73B5B39C, 0xAD194939, 0xA41427A7, 0x04DA35C1, 0xEA6C205F, 0xF3517C66,
+0xBF8F0A3A, 0xCCA3CF36, 0xA976CD6A, 0xC7B307C8, 0x5EB7A1B6, 0x2B8A0870, 0x392DCFEF, 0x8EF13457,
+0x2F2D5944, 0x41976A8E, 0x2FD00A69, 0x5BC79D49, 0x903D5868, 0x0263583D, 0x5A494092, 0x084DAD30,
+0x8CDBD481, 0x634EF2E7, 0xC87627E5, 0x16351187, 0x540F709A, 0x6CAA9D50, 0x12D41CD5, 0xAB1CC08B,
+0xE0F1CC3F, 0x18260CB5, 0x6425485B, 0xA5DD636B, 0xB4672F86, 0x0DEB4FA5, 0x96D9B275, 0x5E976E45,
+0x379C289C, 0xCFD27539, 0x141BB4CF, 0xB95AE8CD, 0x2805BA85, 0x989E0754, 0xCAF6AF8C, 0xCD1DC003,
+0xB6148562, 0xFDCD4058, 0x71E6606C, 0x61F2222E, 0x9C7F6635, 0x78E6CBB3, 0xF31AB88F, 0x8F93A9C0,
+0xFCE6D3D5, 0x9A753DA8, 0xB22898D8, 0x968D1F51, 0x6B0433D4, 0xA667FCF4, 0x5AD20DFD, 0xAD2BFC60,
+0x6BAA8EDF, 0x1E1EF2D3, 0xA7EB263D, 0xF566C4A8, 0xF6F71716, 0xFCCF3EAC, 0xC86CA2CF, 0xBF7F2A4A,
+0x2ACE9EBE, 0x930844EC, 0x5F6A7E52, 0x550990FC, 0xBEC8E734, 0xC7CDEFB7, 0x9FF4647F, 0x27DAA445,
+0x16F89CE6, 0x2D9CA7B9, 0xC6991448, 0x87619615, 0xF731E45D, 0xA99D3EDD, 0x45E7A61B, 0x50FEB260,
+0xAAC3F0EB, 0x0F1D4345, 0x10E0CAE1, 0x3AF53AB6, 0xC4A3C0C4, 0x24BBC396, 0x3E0FA1D4, 0xA60ED194,
+0x31A33A13, 0x5D230DD5, 0xDB3E7C08, 0xA21E1972, 0xFD995F55, 0x8DF7135E, 0x7AF8126E, 0x72C114F7,
+0xE5A78239, 0x7351528C, 0x7DCE729A, 0xD6B25AC7, 0x6192C479, 0x0672A500, 0x271DC664, 0x15C8EC21,
+0x663ABA19, 0x7868525E, 0xAF6FBA52, 0x43018E87, 0x26973FD9, 0x7463A071, 0xCE4869D0, 0x8DB3AED0,
+0xCEE3289C, 0x8040D73E, 0x547501A3, 0x81756549, 0x7A4046AF, 0x396C5F94, 0x8E4178CE, 0x9EFA03A4,
+0xFD02829C, 0x3470C029, 0x57AAB449, 0x4FB9CA78, 0xF4797379, 0xE54253F7, 0xBFB8A570, 0x5A2C1CBE,
+0x873D1A83, 0xBED2E192, 0xC6F7C6CB, 0x17AA4656, 0x94D98A4A, 0xD6D5EE1A, 0x20E85BEF, 0x9885411E,
+0xCE0DE2AD, 0xCD33E9F8, 0xD4128C4D, 0x4AC1987D, 0x7FD236EC, 0x2EA3FCF6, 0xC676500B, 0xB68A3C1D,
+0xE8911A43, 0x98D1755D, 0x5C3E1280, 0xB4FE0674, 0xC33F803E, 0xEC69A298, 0xC7D7AF87, 0xB605D3A1,
+0x8C3469A1, 0x40DA8409, 0xF3AD218F, 0x780E35FC, 0xD4599E4F, 0xCE93487C, 0x22E6D4E0, 0x0B86253E,
+0x7553BD63, 0xC16E0610, 0x3591B10B, 0x6BE1366D, 0x6054FE80, 0x78EC0326, 0x3604344F, 0xC7AE078F,
+0x87DAE2BF, 0x5585B97C, 0x72244C58, 0x83A03D66, 0xCB219C07, 0x0C9FB7F8, 0x79DDE772, 0x713283CF,
+0xEB2E10F2, 0x9F2BEF2C, 0x161A3542, 0x1479D2AB, 0xC6111964, 0x0494F17D, 0x12858901, 0xAAD0E306,
+0xA2FC87DA, 0x3D19D1ED, 0x1385CF4B, 0x9FF8697B, 0xE9528D93, 0xA1691C10, 0xFF8AAB54, 0x5C4B0D31,
+0x7292CA6C, 0x847DB678, 0x536FD0D6, 0x20C5772F, 0x5DDE2A8C, 0x9E014A8F, 0x56336AA1, 0x70F2CA80,
+0xF698C2AD, 0x32AF8FEC, 0xB03C31D9, 0xCA60AF0C, 0xB681F3F4, 0x8DB27BF4, 0x0DB4963E, 0x5695C3FD,
+0x273D1A55, 0xAD2BD733, 0x7D6E425F, 0xEB9D4F8A, 0x17E547E3, 0x62E8738F, 0x32C6A0F0, 0x284BC286,
+0xF39E0584, 0xA0B63718, 0xD1A503E3, 0xE9F210D0, 0x59B4436C, 0xF72C1B3F, 0x4375C025, 0x73BAF15A,
+0xB97C23D8, 0xE9B26F7C, 0xBD1E160A, 0x02CF7F3D, 0xBA684918, 0xFE8286AE, 0x07A6C172, 0xDF995B3A,
+0xA7C891D7, 0x23F1650F, 0x13EE9B5C, 0x0E6121FC, 0x4CA77087, 0xE2B7F7B5, 0x7317284C, 0xC6995650,
+0x49861BB8, 0xDF8C30B4, 0x16D26EC6, 0x01CB4F82, 0x8380870B, 0x9AB62A5B, 0x2AA688F8, 0x06B168E5,
+0x4B32C5C8, 0xFEFC096A, 0x2BD7DBF4, 0xE489D3B7, 0x9A3C3496, 0x50B607ED, 0x80F5754B, 0x6476FD59,
+0xF2D7959D, 0xA7721582, 0x41758D05, 0x2E684B55, 0x62DA3CD2, 0x18673E89, 0x9180B046, 0xBFAC2AE8,
+0xB04C365B, 0x6B4F8E4A, 0xC5B974CE, 0x2171B005, 0xD54E3D6C, 0xB72A6A47, 0x5E8FF1E1, 0x36BDF390,
+0x86E61503, 0x8D1F1D96, 0x2D142E7B, 0x2154AC4E, 0xFF834027, 0x74C955D0, 0xB3ADC785, 0x58105D27,
+0xDF3761A1, 0x87704482, 0x9714936E, 0x4A1EDCC2, 0x85358DAF, 0xCF635622, 0x8D643DAC, 0x00F3B953,
+0xA875C869, 0x2AF69678, 0x570B9D26, 0xF649840B, 0x58A4BF94, 0x4CB9555C, 0x5063735B, 0x6EEDB2B2,
+0x87CBCF63, 0xB4B0AFC6, 0x8482430B, 0x7C5D082E, 0xD5A36865, 0x601E6808, 0x598D9447, 0xACE319DE,
+0xCB2C6570, 0x270D009D, 0x6EF0FA81, 0xD2BBE8BD, 0x9D21CFC0, 0xCA451652, 0x8FC5612E, 0xFFE85D09,
+0x8E054EE2, 0x05620065, 0xE64ED9DC, 0xB968A6B1, 0x7CCA67D3, 0x33509CD9, 0xB12D3A88, 0x0AE68661,
+0x1A13E4BC, 0xEC79280F, 0x625F80D6, 0xEE818B04, 0xC63BF731, 0xB94469E1, 0xF7EB5A3D, 0xE42DE76C,
+0x1F8A0E89, 0x490E3217, 0xFB18A69A, 0x99EE9E88, 0x7448AB7C, 0x2F817077, 0xEC25322E, 0x689A4F52,
+0xF850C67F, 0x67A5564E, 0xC41B57A5, 0x04F42C3E, 0x54606181, 0xF48AE0ED, 0x0E28AE96, 0xB46681E1,
+0x89261B96, 0x04327263, 0x43A602D2, 0x76EA199A, 0x1A3773BC, 0x01D6585F, 0xB0CB9C80, 0xD6202674,
+0xEC38170F, 0x9651ACA0, 0x7D9AE073, 0x5F615B24, 0xFB3E814A, 0x6E64FB9A, 0x47785877, 0x9B349787,
+0xD19F8F0A, 0xCB7DC201, 0x3178E3D1, 0x30A0F400, 0xE998D121, 0x82689024, 0xEB5CC8B2, 0x16738705,
+0x625B1FE2, 0x8E129B60, 0x8A2B5F24, 0x2B1AD040, 0xD4900622, 0x5EF1C5D4, 0xCE976B86, 0x27C47660,
+0x5AB75F88, 0x1C7A072D, 0x2288BDAA, 0xFAE3E5C6, 0xEF577322, 0xF8DF9832, 0x0764E993, 0xB7016099,
+0xCDDB6A8C, 0xD67AB2C3, 0xFEDDFEC4, 0xACD3CF54, 0x629CF7C5, 0xA195EA65, 0x4C78C32A, 0x8A788F90,
+0xC5566F71, 0x6624A95E, 0xBBE6C33A, 0xF3C6E442, 0x5880F8E3, 0x3976902E, 0x16EF850C, 0x95B1E502,
+0x470886CA, 0xC40CC7DC, 0x9CABCE72, 0xCBD288B4, 0xD3987B8C, 0xE64E4F47, 0x71B5E055, 0x84DC8B9F,
+0x007F6735, 0xBD107942, 0x6C8D8616, 0x89F33F78, 0xD87E22F6, 0xFA778990, 0xCCD4012A, 0x849DB989,
+0xB1F4B0C4, 0x8FB2357C, 0xA302CFC7, 0x697105AF, 0x2569E051, 0x9737EC32, 0xCCE1479A, 0xF8E85FDE,
+0x646AE3A3, 0x19D7CD9F, 0xCB7362A2, 0xB25F3AD7, 0xEFE95953, 0x55F6AC48, 0xCA083920, 0x2AF61036,
+0x1635C607, 0x8B63E834, 0x4CB5309B, 0xBAA79476, 0xEDD95EE2, 0xFC5213C2, 0x9A393CBB, 0x718187D7,
+0x5D7083C1, 0x45A8A2FD, 0x04BB53AD, 0x87F3F66B, 0xF91EFC80, 0x77B76BBD, 0x97C7A486, 0x6C51AA21,
+0x7AB5434C, 0x552B3BCA, 0x15D9D3D4, 0xC846B9D5, 0x0AFCB893, 0xF3C14A26, 0x360702D4, 0x6757F42D,
+0x70144C81, 0x15C4554D, 0x0556D5DE, 0xDCE4DF3E, 0x24B526F2, 0x9F9E3764, 0xBF35B73B, 0x66FD7984,
+0xC3938481, 0x5644A9A1, 0x5E5E25CF, 0x73DE2932, 0xA9324941, 0x30A42302, 0x15E4C841, 0x6216EADD,
+0x7468D04D, 0xA22F3BD2, 0xC53BA00A, 0x4C65F687, 0x2D91226C, 0x4293A82C, 0xAA035DC7, 0x88108FF0,
+0x3C2E2DDE, 0x71338591, 0x6C26D1ED, 0xD4F6156B, 0x3FEECA5B, 0x78AA4869, 0x55DA33F2, 0x96AA13A1,
+0x1F84A1C9, 0x209C7909, 0x48B2CAC5, 0x83CB83B3, 0xE6501552, 0xD006C674, 0x847B90F4, 0x5C374D1C,
+0xB2A8CE5A, 0x6EC319DA, 0xEFABA55C, 0xC5916A47, 0xF24A71EE, 0xEB07E5BC, 0x2A828896, 0xE72A76F5,
+0x2242ECDC, 0x10D0CAAC, 0xA3EDBBD5, 0xCAD38693, 0x757B1FAC, 0x33814B75, 0x52ACD923, 0x2788A991,
+0x72D4AF02, 0xAEAAAFB3, 0x69032E52, 0x0904A213, 0x236156FE, 0xE9C8AA01, 0xFBAF701F, 0xD7158BE5,
+0x621AC983, 0x1C9EEAF3, 0x167506CA, 0xC06E3FD2, 0x9365FF52, 0x9429A502, 0x6025A001, 0xF1D46020,
+0x1E5EE351, 0x8414CEB4, 0xD78F777D, 0xE52B0EA3, 0x9443E6CC, 0x1430573E, 0x7BC40DDA, 0x2980D668,
+0x3B76A56C, 0xB89DC728, 0xAAEA8783, 0x8841FC55, 0xDF680B89, 0x47E21CCC, 0x229E1FAB, 0x0DF06E1D,
+0xDAD4CB28, 0x03EBCDFC, 0x92250ED8, 0xAFBF4E1E, 0x08BD2DF9, 0x63030955, 0xEA489531, 0xDDA2C449,
+0x59B6522F, 0x0E0FA334, 0xA6F27263, 0xE851519C, 0x7CC19A5B, 0x994FB287, 0x37A4F6EC, 0xCF56E6A2,
+0x68898673, 0x900253C5, 0x7C4F6940, 0x4E7AA697, 0x3F293974, 0x57A38D78, 0x76CD4626, 0x1B553D17,
+0x10E69A10, 0x58EE4EAD, 0xE00AA419, 0x2840BA29, 0xCE156740, 0xC293D084, 0x7876A2A6, 0x61A01D59,
+0x0CB311E8, 0xF93CCD9D, 0x32AC59AD, 0xEC5A1A09, 0xD9081925, 0x07C76AA3, 0xACAA7F80, 0x3C83E1AC,
+0xE3BC5F86, 0xE27F80A9, 0x8306D180, 0xE6044545, 0x9DC4F115, 0x91228578, 0xB4648585, 0xFFDCB8B2,
+0xED3172B8, 0x01B4733B, 0xA52B1421, 0x5E477E6D, 0xFA69589C, 0xFE1A9F47, 0x1321DEDD, 0xB8B731FA,
+0x4939BB92, 0xD1D42896, 0x5B7EFBB8, 0x53BEC02F, 0x3F77E1C7, 0x4CDBD66E, 0xFA039164, 0x98B74C84,
+0x32868233, 0xB62F5F17, 0x40B205D2, 0xC213DD19, 0x0F4DB0A3, 0x42D69505, 0x4D7E5122, 0x5C9446DA,
+0x0699E007, 0x9CF8278B, 0xA9DE4CB8, 0x1ED8DD34, 0xA7D18FD3, 0xE11A1539, 0x1AF1B6F8, 0xA415A258,
+0x469DD1EE, 0x722022F8, 0x7696BA9A, 0xCFD690F0, 0xA28F7C22, 0x5B7E88EC, 0x0D2D122F, 0xB59E0C78,
+0xE54AF6AC, 0xC6A54C93, 0xAA42123C, 0x66A0794C, 0xAF1C888A, 0x59AF9D90, 0x451257BB, 0xC9E58B8C,
+0x318AF8A2, 0x22A43D2A, 0xA97B65DC, 0xB7A10BD2, 0x9E9502A4, 0x79E22C8C, 0x91DF64D0, 0x61AC034C,
+0x93DF97C1, 0x5B82E2EB, 0x7E322BD7, 0x95E21007, 0x432649CD, 0x873E9045, 0x2E2467F9, 0x3C4A2480,
+0x2F7921B4, 0x7EE4D067, 0xF6557A8C, 0xD033F53A, 0xC7B7228D, 0x7E81635A, 0x0BC585F3, 0xB26E6974,
+0x9D9DEB7B, 0x9A199C1E, 0x21636674, 0xDD21815E, 0xE346BE21, 0x8D8C516A, 0x11047F91, 0x78175672,
+0x63095502, 0x4C251CDC, 0xB535BD78, 0x4D1C0DCB, 0x6E8DD083, 0xCE5B20D2, 0xD00DA791, 0x7F568FEA,
+0x7043EA39, 0x32E5A155, 0xB7A93DD8, 0xEDC49C91, 0x8DF42116, 0x13759E07, 0x5046BE24, 0x4B8D7341,
+0x36F11649, 0x2F6E24CB, 0xA704BC49, 0xA9EC4A2B, 0x913924E3, 0xA576887A, 0x5CDA5093, 0x30232D87,
+0x8F2E47A9, 0xAE7131E6, 0x5F25B07C, 0x85BE9A22, 0x2D908DFB, 0xAEF621D6, 0x34C76CC9, 0xECC177C6,
+0x50A2DADE, 0x61330559, 0xE2E44FCC, 0x15D1CA16, 0x63BC8111, 0x6D4E8940, 0x3ADF0BDD, 0xA19CF596,
+0xF80D037E, 0x10F769E4, 0xC065E9C5, 0x34ECA227, 0x2F3AC1DA, 0xD7821BEB, 0x8BB5AA8D, 0xE13BAF4E,
+0xBA1F9733, 0x0FA18B2F, 0x3CA08253, 0xCF911863, 0x17A042F0, 0x55E6B2FC, 0x39BC3D8F, 0x3406AE8A,
+0x87603F94, 0x35A129F8, 0x200ADE17, 0x86CF1BEA, 0x0F06CAD3, 0x80AD990A, 0x6CF2DE9B, 0x2CF5C2E4,
+0x4733FFC9, 0xAFF6CD9C, 0x96332DAF, 0x9BF63081, 0xB852ECC2, 0x72121986, 0x6000CC48, 0x3CDD349F,
+0xB53732DE, 0xAEDB2ABA, 0x113751D9, 0x845D040C, 0x7AB1BA89, 0x5F7E72B5, 0x56152412, 0x74EF12C3,
+0x3D100BE3, 0x9E705152, 0x39D7C4C8, 0xDC22E1C6, 0xE6C655FF, 0x436D3494, 0x4A99AEB6, 0x20C1681C,
+0x6408A88F, 0x6282F4CB, 0x4D559532, 0xFC30EF8C, 0xD46E24CC, 0xD74D328E, 0x9703027A, 0x3CCB4C44,
+0x11AED7BE, 0x1118EBD9, 0x9B37F05C, 0x3F63C412, 0x4DAA0D23, 0x0045A977, 0xEBB14F0C, 0x89E48939,
+0xF2A30A78, 0x126EEA41, 0x4E706823, 0x2436489A, 0x137979B7, 0xBF82B33B, 0x78AA58C7, 0xAA5768A3,
+0x18E461C5, 0x617970AA, 0x3FBEA648, 0x9230B28A, 0x2FD71BBB, 0xB114CB9C, 0x0D4B25BC, 0xC4D55705,
+0x2BA0DAF8, 0xA40A7EAD, 0x8992FEF4, 0x5A64A5C0, 0xE3267F8C, 0xA3992715, 0x36BCF456, 0xE8493D33,
+0x8BFDE185, 0xAEAA2ECD, 0x6AD084F6, 0xB2B29AD3, 0x7AE82E70, 0xC801A416, 0x9C87D821, 0x2515090C,
+0xEA11BE8D, 0x9CE7F137, 0x2B057695, 0xBF030F66, 0xC02942D0, 0x3D0A2C67, 0x4E1BC932, 0x12A3CE64,
+0x17A6AD63, 0xC72198CA, 0x8A4722D5, 0x82F86B0A, 0x6F3936C8, 0xCA20E52E, 0x087026E4, 0x2213F594,
+0xE813B1DE, 0xF7FBEC42, 0x3B9B6BA4, 0x7D5BB4E4, 0x6FC60CE1, 0xC6A6370D, 0x64871763, 0x5B913480,
+0xE914FCA0, 0x65973093, 0x39B8587A, 0x6CD264F0, 0xC9BCBFB0, 0x54E3A650, 0xE015C8F6, 0x1B8464F3,
+0x9E3FCCE8, 0x82ED3000, 0xBF3A7979, 0x37C44C39, 0x765C419B, 0xD7CA91DB, 0x06BAF28E, 0xD62E24C3,
+0x6FB557A2, 0x5958184D, 0xDC9DA77B, 0xCCE78F12, 0x0D22F166, 0x5766E5C9, 0x16810BC3, 0xC8250D08,
+0xCEC9F6B3, 0xA728977B, 0x04555EAE, 0x57FEC645, 0x571DBABC, 0xC20D4668, 0x60A55FAD, 0x4DAED48B,
+0x955B2A6C, 0x3E9A21DD, 0x0055C481, 0xC70477B2, 0xA852CC0B, 0x4393AA5A, 0xC82E889E, 0x64F61568,
+0x73F01091, 0x6BD440EB, 0xC0189B38, 0xE8CE52A4, 0xE86180DC, 0x3AC1B136, 0x040AD62C, 0x734F046C,
+0x6C2C0411, 0x1A2C91FE, 0x66A1403E, 0x7CA182FD, 0xAC491D4E, 0xF415F620, 0x46BE09AA, 0x7F9145C7,
+0x2F6F595F, 0xF9021A38, 0xB201E90B, 0x66C84E55, 0x69C8AB5B, 0xE193CFF0, 0x826AB7AA, 0x8C230F53,
+0xCDDEC601, 0xA83B0FC1, 0x23857917, 0xB3B8F348, 0xB60FE46A, 0x38A96E14, 0x3278A0CC, 0xB5605DEA,
+0x98751B5E, 0x30A067CB, 0x83407EB9, 0xD3DF8520, 0x1C7C13C9, 0xC92FFF4E, 0x41BC9185, 0xCDCB6192,
+0x60C33952, 0xB409BFD9, 0x636EA2FD, 0x2E4DB9C9, 0x845510B1, 0xC8268990, 0xCFBF2FA3, 0x7994E13D,
+0x73E18381, 0xDF77457F, 0x9C030C66, 0xC215261E, 0xF4266929, 0xE6E30298, 0xB0B42683, 0x20AB91B9,
+0x5E56FBCE, 0x6339604A, 0xBFC65699, 0xF0F70999, 0x0BD3B8C9, 0xA0483342, 0x682B83D7, 0x8975B716,
+0x24F826F3, 0x87287857, 0xAD31793E, 0x03BEF9C0, 0xF14B7231, 0xEB5768AD, 0x339E7702, 0x010A19FA,
+0xD922B854, 0x42AF88FC, 0x39AB13F6, 0x3930D6B3, 0x953813D9, 0x38C0FB47, 0x721749D9, 0xB3F51393,
+0xDF1C0DFF, 0x2D0B6FF7, 0x75E87BCB, 0x23B736FB, 0x9B3AE126, 0x8E4F558B, 0x82C61EE2, 0x3D725345,
+0xAEF3A19D, 0x21051EBC, 0xB8396FD1, 0x39A8C7F6, 0xCDD3A764, 0x53BED9BC, 0x0FE5E9D8, 0x01C2A55D,
+0x3C794F2F, 0xFE0E0A93, 0x1B912D7D, 0x5FF8C4E0, 0xA19C7016, 0x52F38F9F, 0x3F074DE4, 0x91F85A21,
+0x8F9B5627, 0xFFC7D15E, 0xE71334E6, 0x4A002B88, 0x983F637F, 0x5CF60055, 0x21079700, 0xA2C62D18,
+0xC11F24B3, 0x049EACE5, 0x58370817, 0x4233B886, 0xA183BACD, 0xFC0A36F2, 0x99C1C193, 0x9807F863,
+0x20189D01, 0xFDE772A0, 0xC3F37859, 0x8387A383, 0xB6692045, 0x7C15617B, 0xB76BD2AD, 0x76EA153F,
+0x5CBEF329, 0x0D380533, 0x03ACC48C, 0xC0795EC4, 0xD006A597, 0xDBFA331A, 0xFEDFE4B0, 0x93C9041A,
+0xC97D0366, 0x0EE489F5, 0x16225A6A, 0xD4DD3783, 0xFFC1D521, 0xE4632220, 0x18BFE42C, 0x157EBEA3,
+0xE21D9CE3, 0x721C3261, 0x77B74ACA, 0x17EFCCC5, 0xA6191598, 0x1BF8787E, 0x94E7D9CB, 0x3BC40783,
+0x65F0D63C, 0x0369F912, 0xD7F27CD5, 0xB28E12FF, 0xA8367B45, 0x151594DA, 0x117358C2, 0x6FF14575,
+0x198C5830, 0xAE3292AF, 0xFC4A3A8A, 0x173B17BD, 0x9348FF04, 0x18A16950, 0x4811230C, 0x18CF651D,
+0x3025617A, 0x5D678961, 0x636AA8B7, 0x79CDF7AA, 0xC0A68D62, 0x465CF80F, 0xD1620B16, 0x1B834BC7,
+0x7634BB00, 0xA2C89842, 0xF45D599A, 0x23315542, 0xF2191656, 0xF4C42C78, 0x3F76047E, 0x8D6F721E,
+0xD40AC2C6, 0xED1BADE1, 0xADC3A172, 0xF8EB58EB, 0x6E69F690, 0x2741B6F9, 0xED82F218, 0x67FADBD8,
+0xEBD9B437, 0xCD69A692, 0xCFD93D44, 0x6CEDDA3F, 0x6D64929B, 0x864E2C5A, 0x26269E2D, 0xBB0136AA,
+0x6EF02515, 0x072CFC24, 0x46D20959, 0x4760E531, 0x3A64B0BE, 0x4C419FB0, 0x2CCB4268, 0x08112716,
+0x7DAB3EA0, 0x203DDCA2, 0xDDB50106, 0x88ED1ECD, 0x640DEACE, 0x49171048, 0x37B709FA, 0x26F23821,
+0xCA2BEB73, 0x5889BB7C, 0x67056BC9, 0x0D287F1A, 0x7CBD7422, 0x4EC7C8EC, 0xA0A87372, 0x508DD39C,
+0xCA5A5E41, 0xF8E118B8, 0x962A0753, 0xD0E09687, 0x08D7D202, 0x5EB9847F, 0x03104A2F, 0xF48722DD,
+0xF4A22DA3, 0x2DC19C4B, 0x947D884A, 0x4D2179E3, 0x49D8195B, 0xA44C26C5, 0xA91CBE60, 0x346D7F14,
+0x76CDB1C4, 0x2B0B988A, 0x2161206D, 0xD8ADE31F, 0x282A8CD2, 0x38F6267B, 0x6300167B, 0xDDE09F5B,
+0x0F7B729D, 0xC70EF13F, 0x0AD12F71, 0xFA37F827, 0x191CF7A2, 0xEC186913, 0x255BAFBC, 0x7C8D611B,
+0x53FF2451, 0xEC71F141, 0x0319F2F1, 0xD428938C, 0x91C233EC, 0xB7ABDA2A, 0x619EB80C, 0x58A8405F,
+0x58BF5AB9, 0x28CC0E0F, 0xEFA19E3D, 0xB624DA39, 0xD3E85B3E, 0x70112E7C, 0x460EE40C, 0x40CF0043,
+0xF5B345ED, 0xD162A5EB, 0x6225990A, 0xA2CDD7D0, 0xA78774F9, 0x49FB0910, 0x9922AC9C, 0xBB5EE9BE,
+0x1430DDB9, 0x6031071C, 0xA531E7AD, 0x655245B0, 0x968DE517, 0x06347A6E, 0x93189A83, 0xFBC43E65,
+0x54835E5E, 0xE9544BE9, 0xC7DB5980, 0x76F3F00D, 0xF9FB0469, 0x0EC819E7, 0xB7C257DC, 0xA9E06724,
+0x25EA1F8B, 0x0FBDA996, 0x4FA908FE, 0x8B7507C2, 0xBE317FA2, 0xB9BAE649, 0xB8371359, 0x854B5BB0,
+0xF287F42D, 0xB0396A3C, 0x1646E8F5, 0x858A70B9, 0xF3476A1C, 0x7139D617, 0xB9E86C91, 0xA176707E,
+0x72E9B6B2, 0xEACBE46E, 0xAEB40324, 0xA1F9CEEA, 0xFB2EE76B, 0x3653C09C, 0xF545C056, 0x17B3BC48,
+0xC87812D8, 0x0DDD5959, 0x2E63721F, 0xCD0F2CFA, 0x31494B4D, 0xDCAC69A3, 0xDF371FC4, 0x653B627A,
+0x0198CF14, 0xFCE0599F, 0x09BA712B, 0x9E9D65DD, 0xCAA393C9, 0xF35A5CD1, 0xC83567B4, 0xCDEFCD1D,
+0xE6E599BB, 0x059319A1, 0xEEA3589D, 0x5A978EF1, 0x741CB36A, 0x51DC8D3A, 0xF6BC1930, 0xF17C8A46,
+0x704173BA, 0xE181AA97, 0x24843098, 0x6F08E975, 0x6514C47F, 0xA79679A5, 0xA2976FB6, 0x4CF89CD6,
+0x7DAF10AB, 0x1CCBC1D5, 0x49514559, 0xC27AA3E6, 0x0FE79CC2, 0x8F32374C, 0x99DE4030, 0x41BF2B05,
+0xFC9A7EC9, 0x38FCD6BD, 0xE9454828, 0xDA851327, 0x4FA9E5FE, 0x4C51E6CF, 0xF2DDAF64, 0xA765D473,
+0xEE623989, 0xD44D07C6, 0xF0318F71, 0x2027F4CE, 0x2A8D142B, 0x1D4E8F05, 0xBFF85DA6, 0xE3A4630F,
+0xFA701328, 0x531FC998, 0xD022A046, 0x6C78C7E6, 0xAEE798DE, 0x07D7DBEF, 0x54BA3A1C, 0x24BC6504,
+0x5E00E1DF, 0x9715C246, 0x9AC3B517, 0x8F84A74B, 0xB20DD25D, 0x09F633B5, 0xAED25214, 0x18DBA44C,
+0x53FEBE48, 0x82137BFF, 0xC5F7A01E, 0xEBC77A60, 0x8A79DFDE, 0xAF1BA9D6, 0xD838727A, 0x3FD5F294,
+0x63ABC92B, 0x58345987, 0x88FA1751, 0x1B3596A3, 0xF8C6760F, 0xC3484A19, 0xEEAC4B10, 0x62AFADAA,
+0x860C0C24, 0x8947D571, 0x0BA7D964, 0x8BAD8602, 0x9E39FBB6, 0x6BA27AD8, 0xCD8323FE, 0xD2AB0220,
+0x27B7374C, 0x652AEC4F, 0x688FEF11, 0x377B9E22, 0x17B4CC96, 0x2D2DBD9F, 0xFB4CD8B7, 0xEAF94F76,
+0x6F30E80C, 0x6993B343, 0xD40B74CA, 0xFADD2F21, 0xC880FFA4, 0x75E86B31, 0xB810927F, 0xA8BE43BE,
+0x39F4BCF6, 0x394169AE, 0x3CB25935, 0x09BEA3E7, 0x5D4FAC10, 0x3E1CC5BD, 0x452AC8F4, 0x3512653B,
+0xA89A1C2A, 0xCFAAC15B, 0x96D89640, 0x3C507599, 0x80A3D728, 0x70BC8EF3, 0xF95800F4, 0x4B4D7E35,
+0x0B175923, 0x5616708E, 0x23BAF0CF, 0x2360182B, 0xDB8432B9, 0x7882A224, 0xAAF6B954, 0xACBF6AC9,
+0x14C8ED43, 0x5C28892B, 0xFFDC18A1, 0x16CFE6BE, 0xDE2D96F5, 0x6AB1E109, 0x85D4DC03, 0x25EF0369,
+0x5B8ABABF, 0xEC35DABD, 0xC46F17FB, 0xF378E987, 0xD2F2E3D6, 0xAEA27E3A, 0x9FB84972, 0xA2B3ECF2,
+0xD941FD47, 0x1F14D2A1, 0xF3CC85E9, 0xB50836DF, 0x47D56F4D, 0xD12C056A, 0x33D230F9, 0x7CE63F1E,
+0x83C73D56, 0xACCE2EFE, 0x34DEAA8B, 0xBB4EDCCE, 0x222ECA3C, 0x68B5ABE1, 0x14FAA0D3, 0x5FAAFEDB,
+0xA5606CED, 0xAC0E0781, 0xE01F3F0E, 0xDF09E62F, 0xADA44834, 0x3DF4EE4D, 0x8B247E61, 0x1CB9CA3C,
+0x0904BBCC, 0xCBF60B3A, 0x59535405, 0x97B57FAF, 0x0DD2DD95, 0x975084E6, 0x11C57B0C, 0xAE6D8477,
+0xAC160D95, 0x406162B3, 0x58C74E40, 0x32627B6D, 0xE745545C, 0x8E496B68, 0xA1076E68, 0x136AE044,
+0x418C2031, 0xF087EB55, 0x60157DCF, 0x96593A66, 0xF54B16DF, 0xE1BB1029, 0x3E8BB269, 0xFE5AFA8B,
+0x76B77C2E, 0x42DAADD4, 0x836E546D, 0x4A770628, 0x22CE1257, 0x25CB0FFD, 0x30BEFDEA, 0xF500A6B1,
+0x1C8FC5E6, 0xD897C3F1, 0x45DA1466, 0xF22C2653, 0x0047230E, 0xE9DD4635, 0x30CE6533, 0xB714C36F,
+0x148F31EE, 0xED3EF1B4, 0xACD71E92, 0x0ABD02FD, 0x2E4916AB, 0xDFEF9FBD, 0xF78E9A5B, 0xFD9BB4B6,
+0x36E34DDD, 0xE659BEC3, 0x0139FB47, 0xC917796A, 0x8CB18D9C, 0x77DB56A2, 0xA621D895, 0x06BD84BF,
+0x2397D2D6, 0x848062F4, 0xCB2208F0, 0xABCF37D0, 0x21EBC155, 0xB3266BFD, 0x7FD6CBCF, 0x7E1B5C23,
+0xB57238FD, 0x73EB8EE5, 0x2A9102F9, 0x3D192500, 0x286CB6F2, 0x3FEE5665, 0xDB4B5AF8, 0x21491A70,
+0xD8BA37A6, 0x27F61B50, 0x69713CCA, 0x034EB332, 0x69D28EDA, 0xD89570E4, 0x6A0A1B91, 0x97C3B30B,
+0xFEE8862B, 0xD6ACBE58, 0xFF2C0BDA, 0xFA774A2E, 0xC385CCCD, 0x42953D28, 0xBBEB074C, 0x69F6C84E,
+0x0381E40D, 0xD5FB82C9, 0xB7EB8FD6, 0x03CFCB65, 0x8D9D78EE, 0xD5D30429, 0x23D19F5C, 0x7A6CE7B2,
+0xD92CF3B1, 0x0DB87243, 0xDC99AC07, 0x0905A3B2, 0xBD81CB7C, 0x64C4F2D5, 0x357885D2, 0xB063391B,
+0xA22CF1C4, 0x0B7642EE, 0x2B742AF5, 0x39E19E13, 0xB487BD97, 0x269F25C1, 0x30546C8D, 0x1472D230,
+0x1F2BB569, 0xDBC35BC3, 0x411110D7, 0xB375C7B4, 0x47860097, 0x9A394F43, 0xF6346439, 0xEE4A1DC0,
+0x51A2D6FD, 0x82D5A3ED, 0x6D6363ED, 0x2A1FFB65, 0xD4BB6FE3, 0x41392E80, 0xE7DBF578, 0x728D87A9,
+0x269FD63C, 0x88C8F830, 0x988EE836, 0x6C719C9E, 0xF9BB4461, 0xDD685BE4, 0xBFBB36E8, 0x019073B6,
+0xB1110D16, 0x62090C0D, 0xBE7A9645, 0x33D0DF64, 0xD798259F, 0x391ACC42, 0xB4605ABF, 0x5752A2BC,
+0x93247660, 0x220D35A5, 0x56CA5913, 0xF994E22A, 0x96086B1E, 0x6EA3EBF2, 0x8E70DC32, 0xB55070AF,
+0x39D7A962, 0x5D79A8C9, 0x583E6B27, 0x8CB32F9E, 0xBBFC36B8, 0xC11AE946, 0x3D4C7520, 0xE17AA243,
+0xA0764E70, 0xF365EA97, 0xAD433B24, 0xBE162ABB, 0x368015E0, 0xCD8748D6, 0x77A7E3E1, 0xFD56D541,
+0xCD9C628C, 0xF5B6273A, 0xE62DE1CD, 0x0DD98CB5, 0x14ADBD7C, 0x5E5ABC2F, 0xE8A3D7F0, 0x8395C16B,
+0xCA893DE3, 0xA2D831CC, 0x9A40D863, 0xF2082BFC, 0x75714AA4, 0x3BC44CEC, 0x0EEA002A, 0x522FBF18,
+0x9CAD864E, 0x717E1943, 0x71E13EA4, 0xC53822C2, 0xC582A7C9, 0x84378669, 0x06699A87, 0x0B5F1E50,
+0x261A31D4, 0xCA157D0F, 0xC878334A, 0xF6A9898D, 0xDC90F434, 0xEB638290, 0x0A25867A, 0x43586A26,
+0x24DB3304, 0x63AB34AC, 0xEC349DED, 0x2A5A2594, 0x57AB01FE, 0xA00FCFF9, 0x5577A8E3, 0x142A125B,
+0x611E2E90, 0x47D55A88, 0xA2B95B28, 0x69A7BC17, 0x08E5B019, 0x08E3293C, 0x80AE154A, 0xFA8CC0A4,
+0x4ABC6C21, 0x2C4C71A2, 0xBDEA251A, 0x31957268, 0xCED25DE3, 0x3542B0FC, 0x5CD67112, 0x0EA1B466,
+0x76F73807, 0x422FC440, 0x17DB4C79, 0xE62C6193, 0x6C9B2F45, 0x7AF86CB3, 0x7E4E2374, 0x82931304,
+0x1D2C3ECD, 0xF2065B64, 0x8CB3A441, 0x34EE6117, 0x502F4C4A, 0xF9C62861, 0xE2D39AD0, 0xD5D7017F,
+0x69B31D1D, 0x561B4D56, 0xE4C157D4, 0x8D78C883, 0x7DF827FB, 0xBCF5D78A, 0x980183EF, 0x46F7A6E2,
+0x37C374FA, 0x47AE2919, 0x2E6A2173, 0xF401D5F1, 0xF8F94262, 0x7ABCF218, 0x2FFAEE0E, 0xCBF73EFB,
+0x0F951267, 0x0AD5C6B7, 0x90D90298, 0x03E20E58, 0x03F49C0D, 0x90012559, 0x87838C2C, 0x5D51E749,
+0x88A1376B, 0xFD3D4ACF, 0x8E0D862E, 0x25B4733A, 0x6021A407, 0xDD7A20EE, 0x662D55E5, 0x5E8DC25B,
+0xD3EB1EE3, 0xD99EB680, 0x3D75EEBD, 0x86A76FD1, 0xA8E7CAB2, 0x0650F4F5, 0xBA628F22, 0x40ACD3D1,
+0xC8ED8DA1, 0x9765D9C7, 0xCB622CFD, 0x408C3E34, 0x615F4F5D, 0x5CD52716, 0x14DE2CDE, 0x0CF5FF08,
+0xE8C09736, 0x5B52BE7D, 0xF267903A, 0xE27365E0, 0xD4B65A74, 0x6C0E017C, 0xFE7FAC1F, 0x4D24A776,
+0xCB9F14B0, 0xF77C820B, 0x79E4BD32, 0x1B463DB6, 0x136ADCD7, 0x9784085F, 0x6A5D2B2C, 0xBD5259A9,
+0x9E62BC50, 0x311F199B, 0xD609DF3A, 0x4AB4026C, 0xA2237EAD, 0x089B98FC, 0x4DCFFD49, 0xABD2489E,
+0x34479E15, 0x6DD38498, 0x708C552F, 0x2C468571, 0x28E30EAB, 0xD5DAC89E, 0xA8E82710, 0x49D22CE4,
+0xE00DE226, 0x6F9A014E, 0xB6EC8AE8, 0xA1246441, 0x8149E447, 0x8BFD56A9, 0x624634C0, 0x162D7299,
+0x9B237F24, 0x4F6DB9C0, 0x9F242DA3, 0xC3C261F2, 0x3E1AA6DB, 0xB3033008, 0x6F7056FF, 0x88C57A7F,
+0x22230816, 0x329491CB, 0xD87E8284, 0x22AF90F1, 0x9EFA2CE3, 0x09D299B9, 0x0566FC65, 0xDEFDB6A1,
+0x5BE6B84C, 0xAE063903, 0x17A7E101, 0x2E160B38, 0x73FE20BD, 0x65AB2D79, 0xA4C77F2B, 0xD575966B,
+0x6D0E265F, 0x13BCCF70, 0xC6E163F9, 0x66A6567F, 0x3008D09D, 0xA8A0316A, 0x3EDC23EF, 0xEADD993C,
+0x5B01C514, 0xDB6C5BB2, 0x5F827B89, 0x8A4F5ACC, 0xFB559C58, 0xB9262806, 0xC8FA584B, 0x54AEEC57,
+0x149B534F, 0x26C0E6A0, 0x03DD5E5F, 0xCCE95A04, 0x05211689, 0xB7A55BBC, 0x9F41346F, 0x52F408FB,
+0x58A5CE8B, 0xBA6ABD3D, 0x8319BE4F, 0x0BE8ECD9, 0x51066E5A, 0x51738953, 0x17D07503, 0x69B8CFF7,
+0x45CA5CA0, 0xD3430A55, 0x2A8DB959, 0x736AEE6F, 0x510360C6, 0x9BA4004D, 0x908DCC51, 0xC5A1A46A,
+0x57F7783A, 0xEA17D935, 0x163A1BF5, 0xF7CBFC21, 0xF20E0822, 0xFF621B79, 0xAE2B3E47, 0x24322B3E,
+0xACBEA59D, 0x9FE4D1CD, 0xB7F4B0BD, 0x580EA6EC, 0x938E46CB, 0x401A9F99, 0xC4C260E4, 0xFA16D1D6,
+0x3E982E0E, 0xE1663C76, 0xAE53386A, 0xD143CA4B, 0x116A5325, 0xBEB58599, 0xB6760BBF, 0x736EEA76,
+0x821A4900, 0xC6BF7176, 0x341395FC, 0xA7AECDD5, 0xE1625E90, 0x385C250F, 0x2B0CF0EF, 0x804A3FAE,
+0x30A6C63E, 0x03C5FB61, 0x7B068F5A, 0x4B04AC72, 0xC1FB9CB3, 0xB4FFD4C6, 0x70081407, 0x0A792732,
+0xC386E978, 0x28542FE8, 0xA9C6F781, 0xEFE1C95A, 0xD8745538, 0x6E13D99D, 0x2E54F430, 0x83BF72C6,
+0xFDAD1FC2, 0x6340FC96, 0x6874F6A0, 0xA31310D6, 0x41DA22B7, 0x9D994089, 0xE32C83FF, 0x6D9E48FE,
+0x3FFB1AA3, 0x942F3405, 0x4E675F9D, 0x66B86AD6, 0x6C588382, 0xFC09C38C, 0x5398980F, 0x7BC05BC5,
+0xB8CCDDF8, 0x0616CFBC, 0x31CAFA84, 0xF5252FC8, 0x1D602103, 0x81D4C092, 0x289D6C29, 0xCA003E93,
+0x2BD87528, 0xC73F3C98, 0x69E05875, 0x567C8C4E, 0xB7121C7D, 0x7AECD3A4, 0x46012349, 0x6429C860,
+0x6A772964, 0x1B8AC080, 0xA4432D49, 0xA33C75AA, 0x2E74B197, 0xAEB5CFF9, 0xB5B99CE3, 0x7FEF92C7,
+0xE99A3D72, 0x4A321E2F, 0x1BEBE06C, 0xF3E62E9A, 0xC64DAF74, 0x4736714E, 0x54B2716B, 0x53750D5D,
+0x4F0D87AB, 0xE7FD1241, 0xD6148414, 0x81FEB577, 0x52DDE917, 0x2126F5CC, 0xE108056A, 0x3A881227,
+0x4C4819A7, 0xDA1E0927, 0x7977553A, 0x0339078A, 0x1B312A0E, 0xFE54DB3A, 0xB0A014CB, 0xE5811210,
+0x1847EA4F, 0x1D38E462, 0x1825E28B, 0x65E62763, 0xB1FC2669, 0x26F1D969, 0x418D554A, 0x30718734,
+0x7C24A9FF, 0x321FCF99, 0x4E1066B5, 0x7B479836, 0x050A6175, 0x8EEF24B7, 0x50B265A8, 0xA820F7A6,
+0x04C47426, 0xF99391D6, 0x47284A56, 0xF295A13E, 0x0D809D93, 0x3C496E36, 0xF09C7808, 0xCCD2AA0B,
+0xCC3AF5E6, 0x991537E8, 0x6D81599E, 0x2ABAEADA, 0xEB96BECB, 0x19825DC1, 0x680D0559, 0xA8B78A15,
+0x5D1905FD, 0xFB5A81E6, 0x061711FA, 0x6AC2C433, 0x341EB4FE, 0xAAB17BAD, 0xEBBE75D8, 0xBCF58FAD,
+0x4161AA18, 0x7137A8D6, 0xF437C60E, 0xE1DC1B19, 0xAB33E2EF, 0xD80E1910, 0x4762AA79, 0x63C62AA2,
+0xDF63493C, 0x9415753F, 0x6444195B, 0x708346F6, 0x485F6FA4, 0x1B8A3D79, 0x6F2D22CD, 0xB75EC241,
+0xACF923F8, 0x5327A4FD, 0x41082EC2, 0xB23DBB63, 0x4C7B28DF, 0xA408FCEB, 0x17EC3F13, 0xD591A168,
+0x560AC48C, 0xF1A0F925, 0x04C9EF85, 0x95C3CAFA, 0xD2C37207, 0xE72DD086, 0x135C883C, 0x311AFCD0,
+0x0BE767CD, 0x46B2BFC8, 0xDD514BE0, 0x57EAE293, 0xCD7877F3, 0x9FF5A201, 0x703787A2, 0xA0B64AA1,
+0xACD01800, 0x545523BA, 0x583282B7, 0x4601AC8C, 0xDEF9CABE, 0x93E178B2, 0xA7632F7E, 0xC1855415,
+0x1FA5D587, 0x55B6F996, 0xE263D1FC, 0xFBA91955, 0xCC67DF58, 0xF36D692A, 0x5F5E1C4A, 0x22C32A5D,
+0xCD734279, 0xCA57C83B, 0x7A5E4CFD, 0xFD7DB7AF, 0x3407B07C, 0xF8CEF24A, 0x5893CE69, 0xF158B7CA,
+0x5E2057C8, 0x9A133BE1, 0xC3CD89E9, 0xD5A721A1, 0x78642C8B, 0xAED34C63, 0x0C1502C0, 0x5DAFDA02,
+0x0CE48CB1, 0x5B781DC3, 0x64A83732, 0x0027B327, 0x47203944, 0xEAE16A96, 0xD08E80CE, 0x12E3E68A,
+0xF62F2D7E, 0xA2504F2F, 0x3AFBA710, 0x90940C1C, 0x5D1BD6BB, 0x3F3DD39F, 0xEC0BCC49, 0x391423EF,
+0x094D3809, 0x30F9FE17, 0xAD7CC0E1, 0x70F1F810, 0x3E8F1401, 0x09B05937, 0x19CF83E0, 0x459CB8B2,
+0xF662725D, 0xD03D742A, 0xC712BD3A, 0x80C12165, 0xD4416981, 0x231A662D, 0xDEA97545, 0x22484B98,
+0xD4F1344A, 0x44F0606C, 0x2563E7A4, 0xBCF53773, 0xB7F59A99, 0x1F1686C7, 0x98AEDD8F, 0x9D4903F3,
+0xF1E758DC, 0xAE92879A, 0x45EEFADE, 0x78F530F9, 0x6A37DE49, 0x184E90DA, 0x106959D5, 0xF60DB4CB,
+0xB05A8441, 0x0AD99DA7, 0x9B4963F2, 0xF6F30E5C, 0x9B9B271D, 0xBB5CFC3B, 0x9B13249B, 0xDC80AE7B,
+0x358C9751, 0x93DE77A8, 0x627C9A72, 0x81BF53CF, 0xCB0D6A71, 0x46EA552C, 0xF5BA4B3D, 0x25C89632,
+0x08FF1756, 0x052C678D, 0x46F3E9E8, 0x4D05C2F0, 0x5A3CBA6F, 0x5B06BE2C, 0x8FFEB2B8, 0x1110A5D3,
+0x6409DD0E, 0x3860E7DF, 0x219A21C1, 0x86D850D7, 0x51B6CAF1, 0xC5160DAF, 0x01B724D8, 0x465A82F6,
+0x5A5CDA81, 0x82F0EA25, 0xE181FCD9, 0xC3E52AD5, 0x36FC2F36, 0x42BD2C2A, 0x7ABC12D5, 0x73D29288,
+0xF6087B91, 0x5553123D, 0xA30C749B, 0xD37707BE, 0x271B1E3A, 0xBAD7BE5E, 0x771BB9B6, 0xAAA7CB59,
+0x18130D20, 0xD8136A6A, 0x03AD95E0, 0x5100880E, 0x7D218893, 0xAFA45308, 0xEF5DD6E7, 0x91CF84FD,
+0xB114F698, 0x7A27BE25, 0x49DC8853, 0x3045A4DB, 0x5ABE31D2, 0x604BB529, 0xDC2D43E6, 0xC42112E5,
+0x3608A5F2, 0x9CE20022, 0xFA1DCB9D, 0x6217FC2C, 0xF7FF2C83, 0x16F66015, 0x75E4BF6B, 0x910F83AC,
+0x7FB92D69, 0x53C7EDFF, 0x589F7E06, 0xF54B4CA0, 0x78983E6D, 0xC5BF4ECA, 0x969884D5, 0x49C0928C,
+0x6930A7A0, 0xEEAB2109, 0x039AE3BC, 0x637388A2, 0xAB36FE8A, 0xEE57CC5B, 0xAC6D2372, 0xA337D3CA,
+0x1AB40DFB, 0x1B2A7C72, 0xE23E3E0B, 0x6CA05F98, 0xB1279672, 0x92E18C1C, 0x1889AD3D, 0xD6C80946,
+0x602ED292, 0x51E0C248, 0x964438F9, 0x6D772F39, 0xD822077B, 0xEB2796DA, 0x203A336E, 0xBCA9473C,
+0x2AEC09FC, 0x834EE11E, 0x6DF50336, 0x903C22A2, 0xE0643379, 0xC8F37952, 0x0EDD90FE, 0x65A525BF,
+0x2D33C163, 0x9DEA70B3, 0xB65CD6C2, 0x296951D9, 0x3D00E4B8, 0x41716423, 0x971A9390, 0x43968204,
+0x2652FA3F, 0x40BA06EB, 0xE004F669, 0xE0772D11, 0x619C3EBD, 0x40951299, 0x93509CB5, 0x7F3C5DA0,
+0xB101B219, 0xBD08D073, 0x4EA43B99, 0x1D1831EB, 0x601F1830, 0xECA7F784, 0x36997F01, 0xA55F641F,
+0x4C476562, 0xDD403E60, 0xCAD7B922, 0x5CE46E99, 0xFB83D954, 0xBEDC3811, 0xD98ABB0E, 0xE2C60D65,
+0x05446E7E, 0x3D4375CD, 0x0B2F834F, 0xB6B3F8C8, 0xFC40031C, 0xD22E12F4, 0x9FEAFDE9, 0xF4C61A97,
+0x574AE42F, 0x66569BA2, 0xD02EE9A2, 0xC7F43518, 0x54C08084, 0x0EC8CC5C, 0x79BB0FE5, 0xB8E18365,
+0x1B5E3111, 0xC9FE0260, 0x3091E191, 0xED4C72B1, 0x2BC66818, 0x282D0346, 0xB073FD0A, 0xFF0D267C,
+0xDE8D80E5, 0x73E892C7, 0x85763283, 0xDEFC9B3C, 0x09DC77D7, 0x3D061EE2, 0x1A2A06EA, 0xE0B0E23D,
+0x0055E7F6, 0xE89B22C7, 0x0ED65FC8, 0xE60EDA3F, 0xCED5D306, 0x912EC0B0, 0xABB4B8FA, 0x7897F2DE,
+0xCDA835A8, 0x9FF970EE, 0x4D918EAA, 0xA139CB94, 0x54184C70, 0x217F65F8, 0x6198523F, 0x5AFC3A86,
+0x528FCE02, 0x225C19E0, 0x16847294, 0x8243DD02, 0xF56CBFFC, 0xC6491913, 0x0E058E68, 0x4305003E,
+0xD4F147C7, 0x200E8023, 0x0B404289, 0x8A70051F, 0xEA0C2146, 0xF9E003FA, 0x8FBF68AD, 0x70CF9D73,
+0xB128224A, 0x11E85854, 0x9130316E, 0x1A4B3318, 0xA854F623, 0x19725E37, 0x0C5C631C, 0x45D3EB8C,
+0x5C925E34, 0x519F9674, 0xBBC9E1C5, 0x5AF24CF0, 0x42B6ABCB, 0xDAF3ADE3, 0xFAC8E4D9, 0x73A099F5,
+0x41562B2B, 0x18E2BFF7, 0xED07CAC9, 0x0C46ED9B, 0xBE5C1FEC, 0xC687DD68, 0x08E49F25, 0x8C634C3F,
+0x6E77B0B1, 0xFEFB4E69, 0xD3573C44, 0x8F54EC37, 0xEF488229, 0x9FF94483, 0x56E37D25, 0xB184465F,
+0x112124B1, 0x8782FA83, 0x55928D16, 0xA22F2E66, 0x1A420A5B, 0x786937AD, 0xFAF51C74, 0x9B4A8C67,
+0x78E8078B, 0xAB11EACB, 0x373C426A, 0x16DD1852, 0x90DE57F5, 0xDC3F9228, 0xE88E4B97, 0xFB321FE9,
+0xACAA00BF, 0x5C12D40C, 0x2029CD81, 0x6D22A4A6, 0x6360FC2C, 0x1F3AA71B, 0x1AACAB17, 0xA446BF84,
+0x56504653, 0xA05D4F52, 0x8F3B6129, 0xD0DB2F6C, 0xC152F5D4, 0x2723A3E1, 0xF19EEC05, 0x736179DF,
+0xA59070F2, 0x731A794A, 0xE2E542DA, 0x686067A4, 0x1A452D93, 0x76A01F6D, 0x41960175, 0xB2EDC5AC,
+0x9D024FAD, 0x6C24B22A, 0xFE1DD9FE, 0xF1237D38, 0x37DE0968, 0xC13AC9BE, 0x63511054, 0xBE03E3DE,
+0xF710FACC, 0x9699A0E1, 0x15332FAF, 0x54B49E8C, 0x5A5BDC7C, 0x9A5C4F83, 0x278D4D48, 0xCD3B4C03,
+0x9CCFE0B7, 0x6F9A4C82, 0xBB6774CC, 0x48AFFE2F, 0x63C24CAF, 0x45350F3A, 0x7E4249AE, 0xF63E559E,
+0xF58C2634, 0xFCFCED60, 0x31D12D2E, 0x82E356FB, 0xADDFB0C4, 0x4303FF95, 0xD6F0F14B, 0xCEEB5FCB,
+0x7DA23217, 0xA40B66AB, 0x0D953FA4, 0x33F5BD29, 0x4B9EC61B, 0x529CD2A4, 0x9BACC5E6, 0xFA38D32E,
+0xF80C615A, 0xF74A511E, 0xE305DA64, 0xC2D57C89, 0x4E030EB6, 0xD3217088, 0x86D929EF, 0x0E57B343,
+0x37FA7049, 0x59D5430A, 0x1DC9E3D0, 0xBD314475, 0xD7B2EC05, 0xDAD60C29, 0x0BDF3CC8, 0xC071108E,
+0x4971BB50, 0x35EA16E1, 0x15CD789E, 0x03EE2DA3, 0x80FA5D39, 0x38DADAA7, 0x20E637C3, 0xF9CE9A63,
+0x931A0A2D, 0x50B07AB7, 0x18A8A1F9, 0x5BCC474A, 0xEC7E494A, 0x19011681, 0xF63E7A1A, 0xBFF340E6,
+0xD32E441E, 0xE27E5DA5, 0x05B0732E, 0x3AA0EE87, 0xE91FD4D2, 0x1EC8FB4E, 0x6798ACD3, 0x3F1414E5,
+0x7B4945E3, 0x91A7C838, 0xB52EEA71, 0xDE3DADC6, 0x0FE1745A, 0x1CC536D1, 0x1203021F, 0x4528DDC6,
+0xA7BE7DC3, 0xD57559E3, 0x07E9C19C, 0x1F30DCE7, 0x39827E7D, 0xE108E8E8, 0xDED8D1D3, 0x200C9A1B,
+0x9D0191EB, 0xA9EB49E5, 0x7200D1D2, 0x0F8F54DD, 0x19687A97, 0x3E28007D, 0x0A8D1D90, 0xCEB4E07F,
+0xF582F79D, 0x76BB9194, 0x6EBF754D, 0x33304AFB, 0xA64EE4EB, 0xC933CEC0, 0x00A21E5D, 0xCE65F82B,
+0xCD809BFB, 0x8029E213, 0xF71FE774, 0xEF2FD381, 0x2677BD22, 0x032E25A3, 0xCCB42850, 0x4E3E07AC,
+0x2EF166FD, 0x14AC1008, 0x3AFF7BD1, 0xA767E721, 0x99E8BCEA, 0x274E31CB, 0x25E6BEF2, 0x7EED221A,
+0xF68307AE, 0xFE7FB24D, 0x18543E02, 0x692E50A4, 0x5F4C40DB, 0x5440D072, 0xE5537215, 0x9A3A32DE,
+0xF148E654, 0x00C9F0BB, 0xB0777943, 0xA1B97BED, 0xEA6EDF2D, 0xFDD37C8D, 0x5AD7654E, 0x378BCCAC,
+0x0F6EC5B2, 0xFE96AE42, 0x9E324E78, 0x907D8610, 0x6B6E797A, 0x9248D8A7, 0x7A0C3CDB, 0x2D25CC93,
+0xB2F14A6A, 0x9FA746FB, 0x2403D51F, 0xF270BE7C, 0x561C1E5D, 0x62EBAF6E, 0xFA5AA526, 0xCD259075,
+0x9CFD4714, 0xA20629FF, 0x448938D6, 0x7346C81F, 0x642700C6, 0xD5F65DD6, 0xF5BECB2B, 0x7E0EF9A7,
+0xE8801123, 0x22E38975, 0x1701A46F, 0x847C685A, 0xA603A017, 0x7F527D68, 0x9C38ADFA, 0x7D68871B,
+0xC9955FDA, 0xA816872E, 0x58F3954D, 0x8D3157AE, 0x99842582, 0xC49EBDF9, 0x59758BCB, 0x54D1E39E,
+0x7E1EAA25, 0xF7BB9007, 0x42044459, 0xD8D9FE45, 0xB5253E79, 0x7C4A811A, 0x90232F56, 0x8EBB10C3,
+0x64280EB7, 0x0EEEF68F, 0x62104C54, 0xB638D54F, 0xFCDD99D3, 0x27E41652, 0xEC570387, 0x5B6C8467,
+0x27538FB6, 0xA8CF8F2C, 0xCCFBD625, 0xF96CAC8F, 0xBC4B674F, 0x3EA9959C, 0x9DBF79DB, 0x2715F831,
+0x2DF36FD0, 0xB712A64C, 0x828C3B68, 0x611E5CA6, 0x471753EF, 0x039D975C, 0xF15B5606, 0x5639EA59,
+0x4C89BA8A, 0xF8F87927, 0x8C4D1572, 0x47CDD656, 0x7EACA882, 0x8C04F52D, 0xA1FABFBF, 0x2F8E4E30,
+0x1E4277FC, 0x6BC5D6CF, 0x2F26EC1E, 0xAC6DE086, 0x54E95BAF, 0xA094C788, 0xEA8B2702, 0x5CF4FED5,
+0xDCD10611, 0xA74EE0B6, 0xB5994CF0, 0x040AE4C9, 0xE967E7B0, 0x066BE956, 0x620F1112, 0x7A621777,
+0x0267BE08, 0x99FA90F1, 0x3A75DA27, 0xE1014CF3, 0xD2F80601, 0xA61A3B99, 0x089CA4AD, 0x6CF315AF,
+0x4A919BF1, 0xDE9CDAF3, 0x7701A8EB, 0x01AE4870, 0x4F0A9015, 0x536D7500, 0x256E046D, 0xFBB69DA7,
+0x1551E1C9, 0xCC8B40EF, 0x8354270F, 0x98444916, 0x165AF7B4, 0x538A1BA5, 0x596344DB, 0x8BD69E1B,
+0x3964CFCA, 0xF68E0606, 0x62A2C685, 0x1A5FA05A, 0x59A12EA7, 0xBE36FA00, 0x971C0FE1, 0x49408B80,
+0x72D0608C, 0x2540C27E, 0xFBD81868, 0x95301659, 0x7110A3E2, 0xB41FCC9C, 0x779D3A0D, 0x12A8B9B1,
+0xBEDE8C23, 0xB34CFC79, 0xEA603DF0, 0xB7775405, 0x3D5D431F, 0x7F3CB759, 0x49D93B48, 0x17CC3A94,
+0xA36E5155, 0x25B349C3, 0x1C6C5538, 0xAD3AAC7D, 0x5D4B791A, 0xA147EDD5, 0xC61A94E0, 0x0D7D17D8,
+0xE7B26D86, 0xEB521E97, 0x0A397953, 0x844BB10B, 0x3678DA9E, 0x830A4311, 0xC50F5B66, 0x1D19C08B,
+0xD3F0A9ED, 0xA00D0C77, 0x5194A89B, 0xE9424FC1, 0xBBC9D225, 0x8EBC8373, 0x9C3BE301, 0x1B46C283,
+0xE419292F, 0x289F55CA, 0xB5DA3BB7, 0xF92A7BF6, 0x2D428B16, 0xD0541B15, 0x8A8BE88D, 0x53CDE533,
+0x1EE66F0B, 0x44742FE9, 0xFC8FE69F, 0x365B2824, 0x988411E3, 0xE81E2253, 0x83715EBC, 0x00DF0B03,
+0x0A143D64, 0x06DB850A, 0xF32E4F7F, 0x7B9C1F00, 0xFF265370, 0xB79603BB, 0x2A4E4ADF, 0x99ADB7FF,
+0x46E82A2A, 0xD5724538, 0x8C2942A8, 0xFE47DD34, 0x14D10FAA, 0x52FBAE61, 0x6C12DD27, 0x3086CF4A,
+0x75DFDBCE, 0x60A460A3, 0x667316C3, 0xA53CA812, 0x4A3DF192, 0xF4B528D2, 0x3A39ED9F, 0x9FC60585,
+0x172A69CC, 0xCDE080A0, 0x5545087E, 0x850E950E, 0xC9E76C05, 0x3D427224, 0xC05DEB5B, 0xC46841B0,
+0x3D9DBD02, 0x62AD07F2, 0x8257BA4B, 0x1229B33E, 0x23319CA6, 0xD8FB0965, 0x5E6AF955, 0x47210623,
+0xE0883B61, 0x8295A9C8, 0xBD80EC9D, 0x817C7FA8, 0xA60A692C, 0x0794A628, 0xC3208F89, 0xBB76E382,
+0x83184881, 0xB48F6CBB, 0x5A2D6542, 0xF2AD647F, 0xADD1D61C, 0xEC024594, 0x96AAF884, 0xBBB13755,
+0x2C8E7C57, 0x119F3AD2, 0xE0BCD718, 0x5F98CFD6, 0x8715BD8E, 0xFBADE958, 0xCE0B81AF, 0xF8C8C304,
+0x44B72C4F, 0xAE007E73, 0x35FFA29E, 0x44B2B93E, 0xCCB9D4A7, 0xA3AD7D00, 0x20E99DA4, 0x1DF2DB69,
+0xAC24A596, 0x44E0AE5C, 0x9E8ECF9C, 0x1A4C880C, 0x10AACE63, 0xB2C5E7E8, 0xB30907AB, 0x8620B2B3,
+0xCBC07822, 0x0C669685, 0xA7810804, 0x0A187711, 0xC5CEFE1A, 0x5F87DC5D, 0xD8C2E944, 0x2017547D,
+0x5811946E, 0x7D02208E, 0xD61839FD, 0x9C3886CB, 0x8974AAA5, 0x25F557E3, 0x91DC5F69, 0xD500E994,
+0xF5C9A83A, 0x78E626D7, 0x781C09F2, 0x34E27BF8, 0xF4F1FCE5, 0x23EBEE07, 0x1BD080BE, 0x0307E38D,
+0x2EDA7E1D, 0x2C9ABB75, 0x2DD93C3C, 0x7A08D061, 0xBEFC9BD4, 0xDA69CC1C, 0xBE44C2BE, 0x8F095FF5,
+0xD9FE956F, 0xCEF9AD4E, 0x30B67F42, 0x021BF521, 0xC2F0C74F, 0x2C1F6921, 0x45F02C66, 0x2E1B0B8D,
+0xB421417A, 0xD9BB12C7, 0xFDF282C8, 0x3D7B3655, 0x6E47A9B8, 0xA4C1C334, 0x03F0D2E5, 0x46641266,
+0x7C1C4063, 0x38376E92, 0xA1AE9CFA, 0x98780A65, 0x69D8BAD0, 0x0FFF0C14, 0x04DF7DB0, 0x4F50303D,
+0xD2BA66BF, 0x5CD5EAE6, 0x1F0AD3C9, 0xF81B00EF, 0x40AEAEF0, 0xB6FC9BA4, 0xBCFD86B5, 0xB1733B1B,
+0xFD33E5D9, 0xF08C3386, 0x80B3364E, 0x7C58ABA5, 0x982DEB34, 0x863B266E, 0x04A3BE1D, 0x480420B4,
+0xFDC10AF3, 0xF936EF92, 0x3C9D859C, 0xEFFDA70D, 0x3AA2A51D, 0xEBD5F85C, 0xE4AA87E6, 0x8A4CA526,
+0x97E4D8A4, 0x4284B9CA, 0x3CD41D8F, 0xD5F21383, 0xDA99B09A, 0x23354896, 0x74CC69ED, 0xB381BB6C,
+0xFB1BA43B, 0xC1FB6005, 0x98C4CA77, 0x0C9251B0, 0x076186E1, 0x765830E7, 0x6B1AE2EE, 0x1A69B438,
+0x64D5547C, 0x8571322E, 0xD56523C1, 0xD703C929, 0x389866A8, 0x49AAF0DA, 0xC65505F2, 0x2F86F6EF,
+0x87214F48, 0x79300983, 0x437A2ED5, 0xCD0B8D89, 0xC754A24D, 0x5F2EB734, 0xCCC7A06B, 0x4DDF8C8D,
+0x4E2D179C, 0x08066493, 0x5A6F6D12, 0x870B8AFE, 0x48C5167B, 0xC9813443, 0x84744E2B, 0x654C7AF7,
+0x2D3926AF, 0x082C5379, 0x12C8A777, 0xE350C305, 0x8CF45493, 0x87AA672F, 0x55EBCB9B, 0x05D7B894,
+0xEDEE9B8B, 0x5EC5B6F2, 0xF664560B, 0x4C0080C7, 0x923C2AD7, 0x20F98BD3, 0x1B94DF82, 0x0BD38763,
+0xCECDDA07, 0x1C850480, 0xF89136D4, 0x18CC90DD, 0xACEF13E1, 0xFA8FF167, 0x718C8CBD, 0x423CE2B0,
+0xDDD9F649, 0xA77BC5F5, 0xBEEF83F4, 0x5ABAA031, 0x8A6661B9, 0xBB410347, 0xD2981E67, 0x91580539,
+0x1A53A016, 0xB5408A7D, 0x31DF70F9, 0x536123F7, 0x8ACF2A36, 0x70A4BC99, 0xE63E2120, 0x1489A7FF,
+0x5C02BCBC, 0xA635AA04, 0x574F1587, 0x2D2B70B9, 0xCCCEA94C, 0x84B87968, 0x2A038225, 0x93E83063,
+0xC8E8CDFF, 0x8107F2B1, 0x7980893D, 0x9F032920, 0x86965E88, 0x74AB411E, 0xC36E0F2B, 0x19358623,
+0x4CC27A7E, 0x50C3A417, 0xE5EA69A8, 0x4B16E4BE, 0x083B6D83, 0x84E5F188, 0xF7234E82, 0xC19A0F20,
+0x99C3249E, 0xB4341F49, 0x910CA4F5, 0x94858539, 0xA6E059CF, 0xB8398612, 0x0DF98129, 0x7BF27BA8,
+0xC345CE4F, 0x95BBF592, 0x074B4626, 0xF2037E77, 0xE745D3F8, 0x2D4F0FA5, 0x96C2A04B, 0x3A57BD44,
+0x2E0CDFDF, 0xE7AA5336, 0x614EB9F9, 0x856B67BF, 0x5233336C, 0x72988694, 0xE2EBDBA8, 0x211AA208,
+0x8777B835, 0xC43A292D, 0xFBE803F1, 0x4495DBEF, 0xDCBB9CCA, 0xBF70B650, 0x21236C92, 0x2827E438,
+0xEAF2DC3A, 0xC8BD61F0, 0x5237BA7F, 0xC5E2F1FD, 0x509B1406, 0x3C98243D, 0x72B7D471, 0x893F5818,
+0x43746857, 0x6D47D6BF, 0xDEF59262, 0xB5A14066, 0xF015B000, 0x5B77161A, 0x66366B3A, 0x22F4EB60,
+0x08CD774D, 0xDA925144, 0x31D31848, 0xB47F1B57, 0x5290046A, 0x90EC2494, 0x3FF1A834, 0x49A47299,
+0xFC773A7D, 0x9FB39199, 0x22E8F559, 0xD83C0983, 0xA20B6960, 0x2EB1F3C1, 0xE1CE145F, 0x07D652AF,
+0xD07BF719, 0x53B9108F, 0x8F3CC691, 0xC9207CC0, 0x665766D2, 0x2BE8CD7C, 0x856B3D5C, 0x0DFC489F,
+0xAD22B73A, 0x1EA1221E, 0x03071B7A, 0x2E8D4228, 0x849311FC, 0x5986A05F, 0x50A0DF43, 0x4F435ECC,
+0x7F66A0F2, 0x0DC6B717, 0x9341798E, 0x38B6B14F, 0x28004D8F, 0xC48D400C, 0xD8861BF7, 0x5A26807B,
+0x74100F05, 0x8A18EF20, 0x88C0003A, 0xAFDB2395, 0xD4C9F2D2, 0xE8561D73, 0x546491AA, 0xB8FE32E6,
+0xE875B91F, 0x30E21295, 0xF4B99289, 0xE9960B54, 0xC810AC5B, 0x82A8A5A2, 0x53030D46, 0xAFFFC4CB,
+0xC51B992E, 0x394153D1, 0xED174370, 0x36AF3555, 0xF4AD12F0, 0x6F413933, 0x03D4B417, 0x8672B695,
+0x3179B9CF, 0xE6F22CC9, 0x2F99BDF2, 0x6EB141D9, 0x6342D23F, 0x710EE01C, 0x1C046AE1, 0x30022353,
+0x5CA09A6A, 0xD0355DD1, 0x51692F1D, 0x3B7D7E34, 0x9AF5BA0F, 0x548896F3, 0xF6DCB5D6, 0x90D80084,
+0x74572E90, 0xD810298A, 0xE176F783, 0x1EAF493F, 0x3CF2F15A, 0x3E6AFC8C, 0x9C8A4244, 0xCDD073EB,
+0xC7EDAA8F, 0x07062709, 0x76A7E0E7, 0x1617F110, 0x4E3175D3, 0x407003A4, 0x1A9F69F6, 0x16070077,
+0xA64A3B9A, 0x3E3384CE, 0x43AB698B, 0xBCA55C2A, 0xD685AB49, 0xA8BA27E3, 0x7E1DA038, 0x10A72E43,
+0x2B21721C, 0x8A936AD8, 0x71267A5E, 0xE585EC40, 0x4BDC565D, 0xBB8E635C, 0x9CDCFEFE, 0xF9CC5758,
+0xE38643E9, 0x1D756123, 0x169D63C3, 0x23B1419D, 0x380414AB, 0xD6FF2531, 0x747B6826, 0x939C3928,
+0x6D5596B5, 0x0A68F2F9, 0x7957EE1C, 0xF3991AE7, 0xB8233DEF, 0x84639CE2, 0x7482F30A, 0x7880D6C1,
+0x448DF278, 0x6DEFB370, 0x596BB8A3, 0x6C9F2215, 0xEA89EDF2, 0xD203C462, 0x0F996617, 0xB2505814,
+0xEF181666, 0xA9B9D4C3, 0xCEA5AF7F, 0x2CF3FFB5, 0xF572BF15, 0x24BCAF50, 0x785EB049, 0xEE998DD7,
+0x68D98DC6, 0x477B8B63, 0x9F6D5036, 0x68A5374D, 0xD7803E3D, 0xDF8A9663, 0x3A00FED7, 0x92A6399C,
+0x08A21A4C, 0x9517934F, 0x859DA558, 0xF285B952, 0x5A4CC738, 0xF9677F6D, 0xF708AF77, 0xAE4D7F49,
+0xBB110DC8, 0xD9C83D85, 0x2C8A7D5A, 0xF46D8249, 0x11FFF17E, 0x56D61414, 0xF477869F, 0x83AF09BF,
+0x5CBEFA7B, 0xA8962DC3, 0x7ACB5143, 0xF5CC1860, 0x3F29A937, 0x82CB7BC5, 0x742D2A1E, 0xB35745FB,
+0xD6B29965, 0xD88DE315, 0xF2BC0719, 0x7D5804BE, 0xA33600FF, 0x137D2574, 0x4FB9E231, 0x73AB7409,
+0xD6B17D2C, 0x9BBB9181, 0xC0F4FA97, 0xCF8A201F, 0xEB3E1B67, 0x124FEA57, 0xACAC5B32, 0xCB2EB8CE,
+0xED2EC3D4, 0x0912B28B, 0xC009C0AC, 0x4BDFFF62, 0x568170C2, 0x5A8ABC1E, 0x88A1DA3F, 0xE2A46047,
+0xAB58A0C3, 0xDDD185CE, 0x68ED5503, 0x0F6F8C6D, 0x3D0E8F58, 0x6752A9A0, 0x0DCE7E51, 0xC75E3961,
+0x23D19A8C, 0xB6B3BF60, 0xDF0AE66C, 0xE4E96FA3, 0x7F1E9DAA, 0x327BA52D, 0x8757808F, 0x378AC2BE,
+0xACCB81B7, 0x7E558316, 0x7264AF4C, 0x7768818A, 0x69D93DC0, 0x4B81C3A4, 0xA0115507, 0xF83313DB,
+0xD95104E8, 0xC750E77F, 0x3EB83723, 0x670FBD56, 0xE9BF1660, 0x711A084C, 0x6AE408E7, 0x0691CFD9,
+0x85D84348, 0x8D286708, 0x3452FB24, 0xBAEEB96E, 0x9ECC03FB, 0xFDD8ED0B, 0x8059D0C2, 0x11109159,
+0x99ABBD79, 0x6FB745D8, 0xF437776A, 0x645CD47B, 0xC54F6BA7, 0xA58E048F, 0x5DEDD8F2, 0x5130C353,
+0x0209638D, 0x3BFD2022, 0xCE6D0858, 0x4704D029, 0x70F79FCC, 0xAE37E4E5, 0x157B69E9, 0x75020487,
+0xBC2F2832, 0xBE550DD2, 0x4056C199, 0x60A04C16, 0x88612259, 0x750506BA, 0xBF1C08B7, 0x598C7679,
+0x9FCE5325, 0x22727318, 0x9767018B, 0x9D89DD30, 0x2D8BB93D, 0x218C1547, 0x44DF4955, 0x1D389543,
+0xFB866B03, 0x2A614345, 0xCB82AE08, 0x6864D985, 0x8D8D9A5F, 0x8F173E29, 0x807C266A, 0xDD2BFD07,
+0x1468C609, 0xD39F3EBC, 0xB605A991, 0x8D5AFD1C, 0x24087830, 0x82C61EDD, 0xDEE36E90, 0x3051724C,
+0x34215B07, 0x1C5CE92F, 0xC628CDB3, 0x37BDD004, 0x4EFDAFDF, 0xB0F83FF3, 0xD48FAE43, 0x8668AB25,
+0x285D6C56, 0x08E51DC2, 0x40264368, 0xDE229DAC, 0xB7C9ABB0, 0x333D7624, 0xCDD397FC, 0xCD59B13A,
+0xECE6984B, 0xAF6F4729, 0x2FB801B8, 0xB60B0D7D, 0xF91948DF, 0xEB92EA54, 0x63278DA7, 0x1D4DA070,
+0x5FAB2CCA, 0x734EA997, 0x9C830C69, 0xDEA9A7AE, 0x50A79C11, 0x59C7B066, 0x6EE79943, 0x6FE69821,
+0xC6A56BF9, 0xCE054BA7, 0x805F98A2, 0x747FB472, 0x1EE884EE, 0x96232CA8, 0xCE6E0430, 0x5990153C,
+0x4BFEBBC5, 0xEE8D596E, 0xE358A038, 0x50D1068C, 0x4572BBE1, 0x9F136015, 0x43D15336, 0x71BDE73D,
+0x476DF641, 0xA4ED7B59, 0x03D9D52E, 0x2DD66EBA, 0x220D3E65, 0x6F4180F1, 0x3C7AC8EF, 0xA4F32986,
+0xDD6093F8, 0xBBC1CD2F, 0x5A64F5AF, 0xD42E1C5D, 0xAAF52A4B, 0xC605DE2A, 0x5E6BC8FC, 0x15B00E17,
+0x0F1E3D6A, 0x9E17D43D, 0xA601EBCC, 0xF11BF4D2, 0x2B8E6AC2, 0xA6D5AF27, 0x4C0D25DE, 0xD4F801DE,
+0x9D8FB993, 0x290C172C, 0xA9235C21, 0x68D2C19F, 0xCF8A672A, 0x5B7ACC8F, 0xB4337203, 0x4D0AC122,
+0xDA539F84, 0x86249854, 0xF6E1C0D3, 0xB6C38F21, 0xAC434864, 0x5D687727, 0x6874E622, 0x2AA6CDA4,
+0x33ED7076, 0x8D3E14C5, 0x15898B1A, 0xECB43C2C, 0xBBDAA60F, 0x0EFA179C, 0x71E7C299, 0xAD56AC8E,
+0x578C721F, 0x4675C0D9, 0xB01184E2, 0xC30567B4, 0x0788B77C, 0xBA6010FF, 0x9FBCADDE, 0x85BC4B94,
+0x335CB422, 0xF37F3E3C, 0x56459AA4, 0x73498D24, 0x0E02CA3F, 0x0BAAD638, 0x1DD2B5BC, 0xA3A8E6C5,
+0x635AEE42, 0x8BC7B236, 0x766EB672, 0x6D56643C, 0x70B92344, 0xEE5E9FED, 0x6C629BE7, 0x61D8BDFA,
+0x7737D65A, 0xC72FE063, 0x18490179, 0x9310B8CD, 0x14521571, 0x73A15D18, 0x1A6EE75E, 0x88E1AD86,
+0x86BB73FF, 0x5543BB63, 0x4E1490A5, 0x83DA734B, 0x05D162BD, 0xED9C51FC, 0x3D32600E, 0x73C54D82,
+0xE4925E4F, 0x0DEB5CDD, 0x446E6247, 0x5AD2BC58, 0x3D94B373, 0xB20D6CEB, 0xBADE798F, 0x656141DE,
+0xFFD99A46, 0x2D81EA9A, 0x299F721B, 0xA0BFA116, 0x2345D164, 0xB01E7D52, 0x2521C8FD, 0xD0F4AEAD,
+0xA75ADCD1, 0xF678B8B3, 0x789C46A3, 0xECD969A5, 0xE45E4C5B, 0xD53DDB56, 0xA2A04F2B, 0xFCDD6A22,
+0xE805D8A8, 0x3646CE0E, 0x2DAF5756, 0xA543B643, 0x7804CEFB, 0x8492E815, 0x38BE71D2, 0x6AE86DE9,
+0x9D0FC6D8, 0xC656BF78, 0x44712D0A, 0xDEACFDB3, 0x7A4CD3CF, 0xB69E231C, 0x8A6E8062, 0x4B1E26DA,
+0x4B310653, 0xEB708E1C, 0xC9F53531, 0xF60F3401, 0x8CD0C7E4, 0xA9C435DF, 0xC26CA6E6, 0x6D405601,
+0xD10BDF5C, 0x64ABFB0F, 0xB10B4A08, 0xFCA1C92D, 0x7EC95A93, 0x50CFCF70, 0x2868A87F, 0x96918822,
+0x6F49A432, 0x041ADBA0, 0x86AC1050, 0x8471C94F, 0xECD99895, 0xC6D66290, 0x74B75E74, 0x97442EB1,
+0x8E4119A9, 0x43909E5A, 0x393C0361, 0xE86ACBC6, 0x411A2084, 0xB3B21B59, 0xB489CFC8, 0x3E92D001,
+0x4594C07F, 0xC277CBDA, 0x99F5B000, 0x9DD1C1D0, 0x854EF077, 0x7FB7DC47, 0xE90FE14B, 0x5B410226,
+0x88E8D388, 0x223E18D9, 0x5D9FE487, 0x79B9D82B, 0xA0CAB577, 0x381FC4B2, 0x0D93FEF4, 0x955F5E58,
+0x36EDC20E, 0x2A4F705D, 0x2FC4AB62, 0xE689F613, 0xAE7C7D4C, 0x071965E6, 0x2F732EBB, 0x9FC20690,
+0x14A67C03, 0x6BCC18E6, 0xA01E4BD8, 0x035380F1, 0x7F4F03D7, 0x0DF34A48, 0xDC8BA45F, 0x8A4616EB,
+0x8E15CA30, 0xDFF2F584, 0x2706CB4A, 0x2FB45D3F, 0xE3553791, 0x9AADC745, 0xFBFA9102, 0xB844EB61,
+0x3A3A7AFF, 0xFCC21FC4, 0x73395893, 0x372CF9EB, 0xF9385101, 0x2B1E591F, 0xFB163768, 0xBBA87E7F,
+0x636725EF, 0x4257414F, 0x30240037, 0x4DFFF0BC, 0x813D6B67, 0x5FE5D93D, 0xA5982754, 0xA75DF96D,
+0xFCA08670, 0x20FC83D2, 0x471AF2AC, 0xC496E899, 0x8CE790A2, 0xFC2473A3, 0x18493F51, 0x6E8DCE8F,
+0x1552D6C7, 0x0822FA02, 0xE1EBE157, 0xF9A39338, 0xDC9B4CCE, 0x54470576, 0xC2C3BD3B, 0x8551B03C,
+0x52D752FF, 0x471BA667, 0xF1E982ED, 0x9700E7A7, 0xF7766A7A, 0xEA164C0C, 0x39AAF81D, 0x1519A3BA,
+0x20A98053, 0xC93F0E31, 0xA0AA9E44, 0xC83B9732, 0x97A9AC33, 0xDA538080, 0x5C9E1201, 0x1D6BEA10,
+0x05DD5319, 0x615E12D6, 0xE6CD765F, 0xD9781B3D, 0xFE42F0FF, 0x41F88DC2, 0xDD191BCB, 0x6F9D10C8,
+0xF68D5C47, 0xB79D72D2, 0x5D440F9E, 0xEBC18FE9, 0x8442AEB3, 0x03236356, 0xAEDF2D82, 0x8E3F684B,
+0xDF7E637E, 0xACC6682E, 0x7979B0E0, 0x909D6353, 0xFE3C276D, 0xA8E74C25, 0xECEA94AA, 0x16FFDCFB,
+0x2D0EC864, 0x0D49FE1E, 0x69C3044D, 0x2E72ED0B, 0x368D7CB7, 0x9277148C, 0x4221E6E3, 0xD293A6D2,
+0x1311A123, 0x4B71C728, 0x071E4764, 0x8E7F6C40, 0x2198368B, 0x512622DF, 0x51CFD46F, 0x7C7EFCEF,
+0xE8CB7E00, 0x287477FB, 0x51771AF6, 0xB7F29325, 0x443373DF, 0x859C8C09, 0xBD78D86B, 0xB55A5175,
+0x0E88C952, 0xCE331789, 0xBF7C66A8, 0x56A3C6BA, 0x6BE9EE85, 0xEA07C82C, 0x1ECA73EF, 0x62E75BC6,
+0x4A399DB9, 0x21206EE3, 0x8D82253A, 0x50E3A80A, 0x64DFE6D1, 0x6DD4F0C8, 0x270B32CD, 0xBC26B171,
+0xC91747FF, 0x2450F3A5, 0xD4E7F9FC, 0xEBD69EAD, 0xD7DCB8AF, 0x46D471B4, 0x737C8BFA, 0xBAC86C5B,
+0xAB017A96, 0xFF2A5FFB, 0xCE1EE791, 0x1434136B, 0x87763177, 0x45FFFAA0, 0xEA09E33D, 0xE9CE043B,
+0xFBF55EF1, 0xA4628E31, 0x09AB7924, 0x63E1C080, 0xE87A491B, 0x18C8A661, 0x691F835A, 0x3B7C3E97,
+0x6461168F, 0xD52B49CA, 0xB8443FDE, 0xF17FFF2C, 0xA961E7FC, 0x90B36A57, 0x89296792, 0x7C04A08C,
+0x8FFA0F4A, 0x32F8AC70, 0xA67E29B2, 0x979BC260, 0xD87EFCE6, 0x59358566, 0x4342D1D3, 0x39E6EAF1,
+0xAC69E559, 0x7782D3E1, 0x90A6D7A4, 0x9AE02CD2, 0x808D8C6E, 0xABE48962, 0x67562920, 0x79EBE887,
+0xFB00A7CF, 0xB95FA74D, 0xFDD0EB34, 0xBBFA8BA4, 0x770679D4, 0x2CD95A23, 0x34AAC975, 0xE8BB16AB,
+0x689BA1C9, 0x8E3B94BC, 0x19C3B6E2, 0x2FE2B270, 0x44DF2E2A, 0x85FFA3A6, 0xC61F7823, 0x6BBDB736,
+0xC74AF9B5, 0x2F439836, 0x50080ACA, 0x22D5018E, 0x31D3D3A4, 0xFBF5A38F, 0xF79AE7E9, 0x6C592507,
+0x8D352F76, 0x24075D14, 0xD0222D0E, 0x4792E6D9, 0xD8607047, 0xA79C6604, 0xB5DE722E, 0x27455235,
+0xCD9D85BB, 0xF9DDA5F0, 0x5E9CCC25, 0x7F23207D, 0xC2425EC8, 0x5496D886, 0x4A8DB81D, 0xB70FF7E8,
+0x5E84019A, 0xA2F0D1E0, 0x6CB4BCFA, 0xA4D2AB89, 0xFBF01572, 0x179BB5D3, 0xF6AF7BA0, 0x35466EC7,
+0xF188C724, 0x98659952, 0xE5EDBFBD, 0xEF0EEDB9, 0xDE404E9A, 0xE4BC7C66, 0x415B3203, 0xD8686237,
+0xBA1FBCDA, 0xB8DF2E72, 0xCE57F057, 0xAEEE6516, 0xA0360BDB, 0x42741231, 0xFBF5E43A, 0x9A39F297,
+0x26051FBB, 0x8BFFF70B, 0x81BEEB87, 0xD8F8DBB4, 0xDB1206A2, 0x5436A2B1, 0x7D09AB6E, 0x66070C4C,
+0xCA2CEE6C, 0x43400C34, 0x922BF793, 0xAD8D8CA3, 0x501D42A6, 0xF30A1BB1, 0x0D4393E7, 0x2428C118,
+0xBEAAE7AC, 0xDD8C99F7, 0xDCAB1656, 0x3DECC327, 0x5F9AA61B, 0x9A3035BC, 0x98FD42C4, 0xF3146FCC,
+0x92B429C9, 0xB72B4641, 0xED5F77F7, 0xFCA3D557, 0xEA8BF96A, 0xC5CA6425, 0x96EFBAC3, 0xF1F532E2,
+0x4DFAEC99, 0x3D1DF568, 0x75727EE0, 0x352EB193, 0xCAEB9BB3, 0x9585F0A5, 0xA7270D5D, 0x8A053967,
+0xC29F0853, 0x9F3AE3C5, 0x08C2E6B0, 0xA0A290B0, 0xC997ADAA, 0x715F6205, 0xD2F5EDAF, 0xD5E55FDF,
+0xAC7C521F, 0x70FB23F7, 0x68F19FD1, 0x67292412, 0x9F8AD5D9, 0x1DB15B1D, 0x59FCE2F4, 0x04B7E5B5,
+0x0377360A, 0x38983453, 0x72FAE3BD, 0x6931F127, 0xA7597A54, 0x847349CB, 0xD66019F3, 0x5896139E,
+0x0C8DFF0A, 0x25CE810F, 0xC6975744, 0x23471DE8, 0x9101A85B, 0xF1DCC348, 0xEAD388AF, 0xD26FFE2B,
+0x36EDBF6A, 0x0DA99F82, 0x4E3ADBE5, 0x388A24AF, 0x2A30D960, 0xC830B5AB, 0x0EEDF81C, 0xAE76F1FF,
+0xB7059873, 0x5BF96756, 0x39B2A9C9, 0x84DF87B6, 0x508693DD, 0x868F2586, 0x9B247DC6, 0xA349B94F,
+0xAA9BCC87, 0xD0D0A076, 0x40357CD6, 0xC1755D21, 0x501632CF, 0xE223F620, 0xA8229CB7, 0xB87896F2,
+0xBFDBB996, 0x4E5C6543, 0x16C1152C, 0xE912A954, 0x348A0CA1, 0x71B8B67D, 0x605BF611, 0xD73DF22D,
+0xDCFD9F2E, 0x46E941D5, 0x6E43265F, 0x4C0F0448, 0xD6E8983F, 0xBB4592D9, 0x8C7F2449, 0x46BA0C4A,
+0x17BB1E51, 0xE44EDEC9, 0xFCFEC13D, 0x1168C755, 0xCCFDEF67, 0x238F7BC1, 0xE4E7DD80, 0x711713C4,
+0x8F4930D6, 0x87C140B9, 0x1286EE7C, 0x9A6D8DE0, 0x88141ABC, 0x3AE14005, 0x06E2682D, 0x29B27502,
+0xE77B00F6, 0x41852380, 0xDAB350FA, 0x87C4620B, 0x3B80F6A3, 0xE25C640C, 0x81CC136C, 0xAB9440DF,
+0x440B8A11, 0x566DF70E, 0xD094801B, 0x52A5A7C8, 0x2B5AF7BF, 0x63639B8B, 0x925DD002, 0xB6452063,
+0x54ED8245, 0x6C164FE6, 0xB7EBB934, 0x437C21B9, 0x37E8991B, 0x55D1351D, 0x8032AC80, 0xE9751BC2,
+0x20CE379A, 0x24BE7BFD, 0x9FD7BDF1, 0x509A597A, 0x5A49FF50, 0xCA1099C9, 0x3DE2983C, 0x9586CFF3,
+0xF2D7104B, 0x5D1F8503, 0x02AD3079, 0x9ACCCADA, 0xEDED24EA, 0xE79F2A9F, 0xB70233A6, 0xD757823E,
+0x0B01375C, 0xBEC27CAF, 0xEFA5EA41, 0x0B00581E, 0xA09AC115, 0xAF34A8D6, 0x0F8ACA32, 0x4B7106E5,
+0x2DE402E7, 0x6596B50B, 0x0EAE02B0, 0x9FE67548, 0xDF612DF3, 0x10DF5F4F, 0x6F43B8A5, 0x761D0077,
+0xB04B3BB4, 0xE04F50C9, 0xE54CA710, 0x78965B5E, 0x3C105DF5, 0xDB289816, 0x3DCE68A5, 0xEEF06CA6,
+0x71435FE6, 0xB3FE9A5E, 0x0C53B194, 0xD196C146, 0x44A6A870, 0xC7420FF8, 0xB09D3237, 0x95EF6499,
+0x7E1ACA3B, 0xC45A6689, 0xFAE3D080, 0x225F55B7, 0x81941564, 0x677C2DB0, 0xBC8138D1, 0xC59542F5,
+0x232693E3, 0xA1370E19, 0xB52A1C5E, 0xC380592C, 0xC17A24B3, 0xC592B4F8, 0xE61B4D81, 0xD3183F48,
+0x4A307929, 0x8FB19F1A, 0x534C997C, 0x1036AD28, 0x5BB4F5CF, 0x0496C75D, 0xE319362B, 0xF75B9A92,
+0x282BD320, 0xBD1EE1CA, 0x1618F7D4, 0xC1764092, 0x661E612F, 0xFB276B50, 0xC05892F8, 0x7452A7DD,
+0x66A16882, 0x79E668B7, 0xE2E49892, 0xE15A57F6, 0x50D322DC, 0xC63B6B18, 0x9626C55B, 0x9E6F37DE,
+0x5902975A, 0x4BE72023, 0x2F7A1833, 0x6C14263A, 0xD87AA3E5, 0xB28ECEED, 0x58BA36A7, 0x0F3DA708,
+0xB3B5F190, 0x49D1ECC7, 0xFE0566AF, 0x465107B7, 0x34082671, 0x649A986A, 0x562D64FE, 0x35940549,
+0xEB81CCC4, 0xD083355A, 0x10E5FBF8, 0x112C8EC4, 0x6A165236, 0x96EFBBB9, 0xDB64221A, 0xE50195CB,
+0x2E5D8D65, 0xD72B1D0A, 0x9C146EC3, 0x1F3CEC30, 0xCE15EFC1, 0xA0170B18, 0xEA1DF4E1, 0xE3040C13,
+0x38498F3F, 0xAB8213C5, 0xEA4F2439, 0x4DA0D46F, 0x81B3D25B, 0xB30EF95D, 0xA81AA5C6, 0xEFEA200B,
+0xAC5F6BD0, 0xC2BE96E3, 0x7BC03461, 0xC9ACF06C, 0x4A394893, 0xCC996D19, 0xF1478ED0, 0x050B88EF,
+0x393F9BF9, 0xEC38599E, 0xC6A0B397, 0xD645F2EF, 0xDADADE37, 0xAF03EB84, 0xDFBD3FDD, 0xC6B2A34D,
+0xD9972D81, 0xECB3CDEB, 0x6CD5322E, 0x92B67522, 0xA2C7D6CB, 0x91129018, 0x8D21E293, 0xD07E1F29,
+0x64B3F215, 0xBEC879C0, 0xEF43BC18, 0x8D4B03E1, 0xA02FDE48, 0xC9EB9FF0, 0x5CAA2811, 0x1FBFE6C7,
+0xE9DCC57A, 0x18E0BBF7, 0x39A57A9C, 0x4F3DB278, 0x8551A063, 0xA709022A, 0x27CF003D, 0xCBA65479,
+0xFB4D8D25, 0xD9D78A52, 0x6AE066F9, 0x82F4D52B, 0x89DF3A6C, 0x0BB8D99D, 0x346B1DE0, 0xE6FEED9B,
+0x15768F83, 0xB709B18A, 0x66BE3538, 0x76105144, 0x5EEA8B10, 0x7FDCA6F5, 0x1C7CE4E5, 0x6C1DE70C,
+0xDFF50253, 0x7CCAC380, 0xB77B3410, 0x33E5C7CD, 0xD660E893, 0xD865922A, 0x2F5C6BB7, 0x75B6E1D2,
+0x57518BC7, 0x7CD2A233, 0xF80138E8, 0x70C330E6, 0x24104C28, 0x3D62E742, 0xAEA00E95, 0x1FC7075A,
+0xB50360E7, 0xF917199C, 0xB7B2452C, 0xAF9EFC97, 0x2A18FFC5, 0x8CE733B4, 0x26E984C9, 0xA0E724D2,
+0x36DDAF98, 0x90336B00, 0x8F5A123E, 0x5D3ACB07, 0xC569A972, 0x48008A86, 0x1AAE8699, 0xCEAE01AD,
+0x6D7DF315, 0xDC7F08AF, 0xFA19DBBE, 0xD688482C, 0xAA5D4B77, 0xCDF879AB, 0x38FAA00F, 0x2EDD8A34,
+0x6FF8FD32, 0xE72304B2, 0x693F3C63, 0x2025496C, 0xD86BCE31, 0x611617A8, 0x3F4F50B4, 0x82333D91,
+0x155C9EDD, 0xFA65DB71, 0x618E5367, 0xF7FC7EE1, 0xDF127567, 0x3838A8BA, 0x52911433, 0xEEECA14A,
+0x7F42A016, 0x537C8867, 0x0907AF93, 0x4E621305, 0xD93AF0EE, 0x475DDCCC, 0x8A8EB380, 0xC614C049,
+0x8B23ECDA, 0x1075BFD0, 0xD171F6DB, 0x71ABBE9B, 0x0AEB683C, 0xD2FB7273, 0xAD92CE7C, 0xD4F817C4,
+0x17301DF2, 0xBAD4D0FF, 0xB3989201, 0xDA68892C, 0x62034695, 0x1F373748, 0xCBF9318F, 0xA0000080,
+0x7CE61F3E, 0xD7F47165, 0xC3200102, 0xB0A7BEA3, 0x189FED8B, 0xA841019D, 0x8AD079CE, 0xF7480972,
+0x031FFAE0, 0xD1E6850E, 0x31CFD109, 0x7574BBFF, 0x497400B6, 0x0453ED00, 0xD8647A0A, 0xE0BA7B9A,
+0xB3280F06, 0x36CD37BA, 0xE6BD5F6C, 0x1EC4E2E4, 0x482634A0, 0x47F8778F, 0x53B4B04E, 0x4E192677,
+0xBECB5339, 0xE28420B8, 0x215092AA, 0xFC06AD17, 0xAE14F2CF, 0xAB4A0E33, 0x98A58331, 0x755059E2,
+0xDE2E9AE2, 0x6CBEEF8D, 0xB870CF68, 0xD97210FE, 0xFC20CCB8, 0xF98E9DA8, 0x64F88F8D, 0xC55DC401,
+0x6584E1D0, 0xE69AC30D, 0x34B7E788, 0x871FD038, 0xEDB02E8E, 0x035A8E16, 0xE18049D9, 0x6B69F0E1,
+0xC0F8B9C6, 0x49DF4779, 0xBF584DAA, 0x2E7C6F4A, 0x1B74F687, 0xC30C0C6B, 0x748D1EA5, 0x145F2FCE,
+0xA108DC0A, 0x7DD4129E, 0xC3E56DAE, 0x1B4D66CD, 0x0D0CE2AF, 0x87B08290, 0xB28109F8, 0xBC60AE3F,
+0xE7621B80, 0xB955B592, 0x689E85E8, 0xBEDF733F, 0xBCEDBE4F, 0x22FACC23, 0x66CD6B2B, 0x7E136CBD,
+0x9B477195, 0x935D8E78, 0x9C4894C1, 0x10D478C8, 0xF25609F0, 0x46FCBADC, 0xC5C3CBE8, 0xFBA0257F,
+0x3A72383D, 0x850F3B6C, 0x5670CA1F, 0x9B026446, 0xDA888383, 0x2762B57B, 0xF4A23DC0, 0x9DD90D55,
+0x18ABD70D, 0x9A1B8761, 0xC22E05CA, 0xE38A0102, 0x361B8AE8, 0x64F5BCFF, 0x9A84409D, 0x0B8E4162,
+0xB11E19A6, 0x868CE6FC, 0x5938CB48, 0x7C419FD2, 0x1D2BFEDC, 0xCDDE6496, 0x65CDB919, 0xD174740E,
+0xC2CF5428, 0x25D814F9, 0x9805810E, 0x36D054CC, 0x11E9C97E, 0x4F7E4239, 0x10A0CC59, 0xA527B6C8,
+0x5366EA7B, 0x0E912D06, 0xC2F88284, 0xF8C358DC, 0xBAE85C3B, 0x897A6472, 0x1A0007C4, 0x6EB62C3A,
+0x2DC86A2D, 0xBEB06598, 0x0943AAAC, 0x005AAD75, 0x31AF420F, 0x57FD06B4, 0x06E62468, 0x41F8D424,
+0xEB773626, 0x3604D26E, 0xF10CECA1, 0xF92C7BE4, 0xBCC7DA20, 0x67B5497F, 0xBB606619, 0xABEDEDC3,
+0x0E41AFB8, 0xF1097F4F, 0x08F8331E, 0xEEF4C387, 0x76D5B044, 0x611DDF34, 0x86F4B485, 0xC972FBF7,
+0xA6500835, 0xD43B2D45, 0xABE67441, 0x4D179A13, 0xCF24E83F, 0x34BF477F, 0xC736E5D7, 0x2D6AE6A8,
+0x23800BB9, 0x3A7A0C9A, 0x7E2AD4FB, 0x7774A98B, 0x9BA720FF, 0x05D97159, 0xA602749F, 0xEB8B2032,
+0x2D84F244, 0x0092CED5, 0x1C01F94D, 0x4C564946, 0x6AAC3EE8, 0x5F0A22D5, 0xB1553723, 0xCC6ACBC7,
+0x279362F7, 0x21109B4A, 0x16A3D163, 0xF3F75F48, 0xACD8B5D0, 0xD903B548, 0xBC0DEB8B, 0xF527F869,
+0x36F4A9C3, 0xEB0ABC08, 0x38C0798A, 0xB5F58518, 0x9D2A513D, 0x82953E6F, 0x65F51863, 0xB8F7CB92,
+0x30D0BEF5, 0xA1AA4A3A, 0xA68E6047, 0x4F6FAF2B, 0x6F2F1B19, 0xF6724551, 0x2FA597F6, 0x4D14100B,
+0x338AC13A, 0x4BF1D396, 0xCF5180F0, 0xB11E2EFA, 0x029A504E, 0xDD020C71, 0xD033DC56, 0x51F38932,
+0xF84F903A, 0xC9D9E0F8, 0x1B398FEF, 0x77D49A2B, 0x5284A17C, 0xB816BC1B, 0x03EB597A, 0xB25862F9,
+0x1E4D38FC, 0xB30F5DF1, 0xAB21CDDE, 0x5C276856, 0x8D68C4AD, 0x540134A0, 0x8A6E616F, 0xF194E656,
+0x713CE738, 0xA5E652C5, 0xD660A995, 0xFD5990EC, 0xC77A667D, 0x302CA419, 0x0585345F, 0xBF6C8EDA,
+0xA8DA76EC, 0x39A00390, 0xB6CC0FEF, 0x0E274A29, 0x1EEBD1FC, 0x0D1B6203, 0x6098728D, 0x1ECBFA9B,
+0x1287DB52, 0xDBCA11CC, 0xDB8D44FC, 0x4DEA7922, 0x36F89C94, 0x651BEC46, 0x09F29A83, 0xE04FBB32,
+0x49514D62, 0x40E8DD17, 0xCA6911A1, 0x0AB2CD52, 0xCC1EF395, 0xC601BA0C, 0x7FA8BA9C, 0x82BDA3EF,
+0xA98C1496, 0x6427BAEA, 0x2DFF7AD0, 0x10D2CA47, 0x70DB9E07, 0x1038E602, 0x85B273ED, 0xE1028DBF,
+0x2DB15E0A, 0x4223B4A3, 0xA8DEF7C0, 0xBE7BB7CD, 0x7860CA17, 0x719478CF, 0x7994CF25, 0xFED55BC0,
+0xA3EBAB7E, 0xD81FAFAF, 0xFDF86E86, 0x3B0E1EDF, 0x8E285837, 0x98F9A41D, 0x72F0619C, 0x8644DB89,
+0xC65344A7, 0xC207E683, 0x5A4B1C65, 0xE1E37558, 0x9CAD1E27, 0x375B4694, 0x1D5F32B9, 0x04A1730B,
+0x8C5656A2, 0x74C646E3, 0xB5935849, 0x320A8DB8, 0xE7D7A870, 0x417BC4EC, 0xE2F2E16C, 0x6A1F0FC1,
+0xAB1FD004, 0x08E0A736, 0x8FE9D26B, 0x86757E6D, 0xDDAB713E, 0xAD3154CB, 0xB8C35B05, 0x2F4B6CA5,
+0xC1F3C2FB, 0xCC4D4733, 0xE06713B4, 0x8E556BB2, 0xF78AEC8D, 0xFECE6698, 0xD87827C6, 0x9B8B1267,
+0x6762EB56, 0xCFF23D65, 0xFE786729, 0x69A15FF3, 0x143C7A11, 0x1182C0C0, 0xF3733EED, 0x9FAA74AC,
+0xE05E99DA, 0xCB1DAE1E, 0xEDFD7CC0, 0x212F07BF, 0x7A00C7E7, 0x5C258873, 0xBF96E481, 0x4554CDC8,
+0x34736C56, 0x50986F60, 0xE890E9CB, 0xA14ADF4C, 0xCE2AD1C7, 0x59B52361, 0x8D5CB6F0, 0xE58824DB,
+0x1830EED9, 0xFA2F3654, 0x288BE01F, 0x250D2DA6, 0xBA08C802, 0xF2BFA217, 0xD1131EB1, 0xE8BD0DFC,
+0x1346A42A, 0x3A566D72, 0x0F65D1EC, 0x48C3A07F, 0x5486796C, 0x531EB796, 0x9C670921, 0xEA9B76FB,
+0x2774DF3B, 0x9DB62B31, 0xC73609CE, 0x1060A72B, 0x9C7D8F51, 0xA13E9625, 0xC4619C13, 0x921D8020,
+0x78A98927, 0x627CCA1D, 0xD850F2D4, 0xA9569748, 0xE88D0EE4, 0x0ED7B571, 0x150B3DBF, 0xB33A9850,
+0x5D3341BA, 0x19DE8477, 0x85A1B280, 0x49049383, 0xAEEC635C, 0xBE6BB886, 0x710F148D, 0xD289CC93,
+0x5F74EF7F, 0x91BB2BA1, 0x30B14294, 0x7EA955F3, 0x571EBD19, 0x0A4447BD, 0xAED1AA3E, 0x7A24D0D0,
+0x5DF2ABA7, 0x27B9E948, 0x7D9FFDC9, 0xB912E3FB, 0x857EF027, 0xB39C4214, 0xAC0AF5FD, 0x08BF7139,
+0xF780B46D, 0x3708E57F, 0x374D9C24, 0xCDEEBAFB, 0xFEB318AC, 0xD956A1F0, 0x83BA9857, 0xCBE5109F,
+0xB3DEA0CE, 0xA538620B, 0x799DAC49, 0x1BC31E9A, 0xD25BB6B6, 0xF1B19B3E, 0xEA514B94, 0x5A3638C1,
+0x4CBBDA80, 0x744E1A9C, 0x3559CB89, 0xD8276C3F, 0x11BC3A68, 0x0A8DBB18, 0x0E85B851, 0x3C8F2B0A,
+0x81DE9154, 0x699B2DFE, 0xDD1B0450, 0x75A6DED5, 0xEAF94374, 0xA08DC970, 0xA61E30A6, 0x83CE67AF,
+0x3C94EFB8, 0x7CD03C3B, 0x3340877F, 0xCA7161D3, 0x8BAFAE95, 0xD8F9B09E, 0x35E79F8E, 0x5FCCB9F0,
+0xA269E5B8, 0x8F221C0A, 0x05FA4CE6, 0xFF164ED6, 0x06C9BCA0, 0xC4E65BE2, 0xE097575D, 0xD044D694,
+0xBC7A57FA, 0x4D47D608, 0x26B52595, 0xB268F3FE, 0xA4D72583, 0x28273E19, 0x7177C252, 0x23721130,
+0x462B2D10, 0x9C073D45, 0x80E57641, 0x1F871294, 0x3FA502A8, 0xA56B47AF, 0x1F4FFD3B, 0x3517AEA6,
+0x43DB0436, 0xCD16ED0B, 0xEDE401D8, 0x5233E0E9, 0x0FF81323, 0x7463B8AC, 0xAD7970AB, 0x5CF52641,
+0x2CF24E08, 0x74FBBC90, 0xFFC9D21E, 0x19436B6A, 0xAA3491DC, 0x69EDA24C, 0xE0B4F2B9, 0xBCD8C75E,
+0x4F50DF3A, 0xF670D2A5, 0xC40FDF00, 0x9F35E1E6, 0xE9EAD428, 0xA10A7665, 0x2135385C, 0x172E8965,
+0x5098242D, 0x3444FE1E, 0x0146CB12, 0x5384211B, 0x34E4931C, 0xDC3A55C4, 0x1C77CAFA, 0x33C07842,
+0x1D09BD13, 0xF6CF4323, 0x2F005025, 0x6EC9C9D1, 0xA793E060, 0x76AF8B45, 0x24BAD02F, 0xC396102D,
+0x5193A155, 0x7CD154F4, 0x25FD4EF6, 0xF6A01FC1, 0x4FFC7D3F, 0xD0A958F4, 0xD6665F4A, 0xEEC26955,
+0x61C729EB, 0x44B49454, 0x534B5974, 0xFBAD25B4, 0x968B8AF2, 0xBBF2F5FF, 0xE8C285E4, 0x22289D54,
+0x2EF73406, 0xA0EA7974, 0x295137BB, 0xEEDD1DA3, 0xB531AABB, 0x6DDF6718, 0xDBF77C00, 0x1EAE526F,
+0xC232C631, 0x3F6782F7, 0x68990F98, 0x2C8D5904, 0x95C827DF, 0x694DADA6, 0x52BA6427, 0x1EB204D4,
+0x756BA728, 0x6922BD6F, 0xB119B5D3, 0xF8EBBCF9, 0x5C4AD6FB, 0x72ACC48D, 0x62C478EF, 0x859639B9,
+0xE6E31573, 0x78A499CA, 0x3538838E, 0xEC4C2F80, 0x25135D3C, 0xC8700110, 0xAAA382B8, 0xEBD06CDF,
+0x445D79BF, 0xB890235F, 0x3463A70D, 0x50A90DDB, 0x551CA120, 0x12B7B32C, 0xE2B3DBF3, 0x26388065,
+0xBFB72363, 0x81B625B9, 0x52A73AE6, 0xB80CB7EA, 0x6BAF9DCF, 0x5A34763A, 0xD8F4CE36, 0x528154BD,
+0x43A612E3, 0xB07380BB, 0xC83B4210, 0xDA45A69F, 0x586340E6, 0xE3CF0261, 0x2EE4B792, 0x9B74BA6C,
+0xCB1D2868, 0x0E9C89F2, 0xE7A12B96, 0xEB8469D7, 0xDC3BBDF7, 0x3953B10A, 0x7CF813D0, 0xBA6F4E63,
+0x0CF28290, 0xC4E7D3F6, 0x028A37DA, 0x3F77ECBE, 0x7B8A8272, 0x57B3F8AF, 0xB2283A86, 0x687E9915,
+0x5D7D27D8, 0x0F073C43, 0xDB0F3516, 0xCC236A38, 0xA7AF9D57, 0x6861F46C, 0xD9A1061C, 0x094EBE8A,
+0x5872284D, 0xDEBE059A, 0x16037989, 0x66D5B460, 0xC5E7EE58, 0x1A83B7E0, 0x902AE0F2, 0x07E5F3FE,
+0x76DC07B8, 0xF247E1D2, 0x92A8EF09, 0xEA010DD9, 0xCC80A87E, 0x45755BFE, 0xFBB2CE03, 0x3FEE90FF,
+0x4CC6970E, 0x3F760158, 0x97412A84, 0xF1547599, 0xC8AADED6, 0xF9FE6806, 0xED0A6DDE, 0xEE6078E1,
+0x1C1E2317, 0x07E08EDB, 0x130695A0, 0x11A7275B, 0x782613DD, 0xAD41EA87, 0xC27263B7, 0x07438F56,
+0xC9284F5C, 0x81F0722C, 0x28F2AB79, 0x56925D3E, 0xAC9A7666, 0x62C1F75A, 0x8BE70085, 0xD4C4F544,
+0xF99BB46E, 0x1379A4E1, 0xCD163AA0, 0x58D3DD75, 0xA5C267B1, 0x45BF2CA1, 0xC70BD003, 0x69CB4FF7,
+0x7BC7FEA9, 0x874B3A4F, 0xE404ABDD, 0x8AF48318, 0x6749C9CA, 0x11B1E799, 0x0D882828, 0x80080A05,
+0x0AF842FF, 0xF3589CB5, 0xFC7D3202, 0x10FEE68A, 0x9A789E84, 0x8917DC8F, 0xBD6B6A46, 0xB55223E4,
+0x3984DF92, 0x344C226F, 0x04992A87, 0x0CB8CB15, 0x7B64E3F0, 0x871BBBFD, 0xF07112C9, 0x90BE45BB,
+0xEEA32D76, 0xA8F42ADF, 0xEC6C6A6F, 0x58ACE09E, 0x3E74AFF6, 0x5BD68AC2, 0x7B30D035, 0xC9057689,
+0x68AD809A, 0x272B497B, 0x45EFF333, 0x787582B7, 0xD18BD1E0, 0xD94C18C3, 0x7EA92B26, 0xB3A60A87,
+0x1B455289, 0x6B9E159C, 0x411985E4, 0x6C481726, 0xBE2CB4C5, 0x106392F0, 0x25C8D28A, 0x97E6ADF2,
+0x0B104730, 0x7287AB26, 0xE833D287, 0x52E47F7D, 0x32AC6CC6, 0x8FB735ED, 0xA51B4B34, 0x850967CD,
+0x79B36678, 0xBEA788E2, 0x2C82ADAD, 0x95F2283A, 0x06B55673, 0x903EBECD, 0x57B74F84, 0xA47F8DCB,
+0xB1D41EE0, 0x2E35AB4E, 0x36CF39BE, 0xCD6CFC0A, 0xFD68A174, 0x83D50D2F, 0x615B4D30, 0x39034643,
+0xA5E26F36, 0x6590D085, 0x6FA7D454, 0x04603BFD, 0x0338642A, 0x2A03D365, 0x37B57F61, 0x0326E959,
+0x4C2238D7, 0x004682E7, 0x02547CD3, 0x074C7DEE, 0x8C3F46C0, 0xA0A98FAB, 0x183C20CB, 0x958E9B6E,
+0xDCC946BB, 0x0920D576, 0xCF69D32B, 0x734DFAB9, 0xD8DBFAFB, 0x39067349, 0xE91D5473, 0x755CD025,
+0x43578C54, 0xCEFA8848, 0x9F73EEE8, 0xBA653E9E, 0xDD5F40D0, 0xCD52DC31, 0x4875D057, 0x5305E7DD,
+0x463689B0, 0x61983A3D, 0x3899E0A7, 0xBCFFC00E, 0xC15E6BDD, 0x58DB2056, 0xD54B2B17, 0x4C92CE57,
+0x0631F0C3, 0xB8E2B51F, 0xEAD37223, 0x6FD7B0C3, 0x236987E9, 0x5C5EA5BA, 0x077C57A0, 0xB82F75A7,
+0x241AEA98, 0x7B8A4E89, 0x5EA04F15, 0x654C4089, 0xCBF3FBED, 0x8D831AF0, 0x494EA94D, 0xD4C17FC9,
+0xA0A7DB6A, 0x63E8D126, 0xB9C23782, 0xB4FFB1BF, 0x56D57810, 0xD985714E, 0x940964FF, 0xBA7AED9E,
+0x577FE2E7, 0xE27B0EB3, 0x237582B2, 0x907D976B, 0x3706E9EB, 0x7375938D, 0x275A9C80, 0x705F5645,
+0xFD650C25, 0x6ACAAF3A, 0xF27BDDEB, 0xEB830EB6, 0xCA42FA8C, 0xB752531A, 0xF38907B8, 0xEEEAAEEF,
+0xD5CD67A9, 0xD384C4E6, 0x4F02FACB, 0xB9F5B311, 0xCCE91A9D, 0xC2F5044C, 0x2BC0DFB9, 0xDED91680,
+0xDFF68E74, 0x09650866, 0xA1241469, 0x3651F4C9, 0x604FFFD3, 0x963C0F05, 0x8D06B08A, 0x2562AC82,
+0x2B3B2BFA, 0x7DA7E6E5, 0x27DD2C08, 0xDBB57428, 0x2ACDFFEF, 0x9DE8D171, 0xD8C7D583, 0x3C664679,
+0xC0F7AA7B, 0xCE8DBBA9, 0xDDDA4DD2, 0xA5A53A62, 0xF0E1AAB4, 0xAB3CDA1D, 0xC70125A8, 0x9C2796CA,
+0x3A3DA34B, 0x4AF41FE6, 0xF3B03F57, 0x39652EEE, 0x051EEC2B, 0xD5C5C02A, 0x63BA1A72, 0xFDFB3C8D,
+0x7D66F5E7, 0x5BC4BAB8, 0xE37ADFC3, 0xBA34BD8D, 0xB1FC7B9C, 0xA75F70B9, 0x3023CBD1, 0xB228FA75,
+0xEA74DBEC, 0xA4692C82, 0xD83F08B0, 0x187670DA, 0x4D728AD0, 0x61D642C4, 0xDFA56A9A, 0x6396E006,
+0xBC19E014, 0x47642743, 0xA7A5E789, 0x2154FBDD, 0xEA1B3E83, 0x74FD8B60, 0xF81B3945, 0x330F70E4,
+0xC3FB7292, 0xDDBDE126, 0x8C54896F, 0x2726F183, 0x9E1C2C2B, 0x41359CE5, 0xE861A920, 0xC87F22A5,
+0x5EBB48D9, 0x013B28AB, 0xB1951CC4, 0x582E87B9, 0x6908F37E, 0x135A9AB9, 0x98F840A6, 0x66674CED,
+0x333B7951, 0xAFA3B57B, 0x26E30E5C, 0xADDCB74E, 0xDFD729D4, 0x3F9D9B36, 0x670B3410, 0x1CEF93B0,
+0xA0043D01, 0xD3338A25, 0x53DE41E2, 0xDD58F970, 0xDA3D122E, 0xDCE8DF1A, 0xD0F55CAD, 0xA654B5BF,
+0xDEBBF766, 0x8DBCBFF0, 0x88AD2530, 0x213B2347, 0x0BD345FA, 0x5DA3FDEA, 0x0190B302, 0x9A0275FD,
+0x78EBBEE5, 0xB62215E4, 0x435A18DC, 0x5646E4E9, 0xBA90EDAB, 0x85285911, 0x3C3902FB, 0x94D6E0D9,
+0xB14706A1, 0xC0E3174A, 0x6CC5152D, 0xBF302BBB, 0x04277864, 0x4E105F8A, 0xAEAF9B9D, 0x494CFF14,
+0xCA05D61B, 0x7F4AF589, 0x5C0CB1F0, 0xCC3727C6, 0x7B995549, 0x995F631F, 0xE5760912, 0x17C37C61,
+0xC70C8A79, 0xE7912CC7, 0x35E7E194, 0x3E94A392, 0xDAF5BE13, 0xAC1BC7D3, 0x62726BE5, 0x5AC550A1,
+0x2223F45B, 0xC9154F1C, 0x263FD7F9, 0x53F19F92, 0x804A7076, 0x8123BAF4, 0x7EF7A9C7, 0xAC79808A,
+0x5C2E83BD, 0xBFDE6293, 0xBC2B7188, 0xF1D75B47, 0x5A4C1975, 0x2E2497DF, 0x3E0E9016, 0xA7751D0B,
+0xB681A3D9, 0x5B45904B, 0x9108D3EE, 0xE2014D3D, 0x6CCFB8B6, 0xFD148112, 0x4B9FA8DD, 0x4CC8DB6A,
+0x06D1C1D2, 0x18E352E5, 0x24C0ACDE, 0xF2F7EE22, 0x42C4D956, 0x1D9775EB, 0xA31F5A3D, 0x3D0888FA,
+0x728C2705, 0x47D349E9, 0xE6A1AEA5, 0xB87C3498, 0x97EE60B4, 0x8B0EDDC2, 0xF87FCF46, 0x0D377C1B,
+0xB9C1911F, 0xA5B61DA3, 0x26908D55, 0x985655D5, 0x0094CAB5, 0x59F2E857, 0xB5B3FC80, 0xFC3F4CD6,
+0xD20CE7FF, 0x0DC85387, 0x37107871, 0xC3D9BD1B, 0xBECDED3A, 0x5008CABA, 0x4CDE000E, 0x535A9188,
+0x62732615, 0x618B6C2E, 0x4C9B1FCF, 0xDE4268B1, 0xFF1E8C98, 0x2D309538, 0x24298C08, 0x0BCC089B,
+0x1CE3EF28, 0xFF44F607, 0xFC2437E9, 0x3146ADE4, 0x29C248D5, 0xE90A5399, 0x372AC451, 0x565A5C5B,
+0x789EE62C, 0x088C03D7, 0xCAAA03F1, 0x5754B4BB, 0x843BC9D2, 0x8B048732, 0x354CF94A, 0x191AECF5,
+0x7303AD72, 0x2877F887, 0xBF1F252D, 0xBE8B8877, 0x16059CB3, 0x9BF637BE, 0x94CD036C, 0x136F40B1,
+0xBC98F966, 0x9EC1B228, 0x662E1095, 0x05AE05EE, 0x29782732, 0x4FE954C6, 0x43911E6F, 0xB682A030,
+0x8C021B52, 0xD29D9A2E, 0xD5D5BFF9, 0x2566054D, 0x5750CEF8, 0x73BCFBF0, 0x1C387F01, 0x9B0A1543,
+0xE26FA7BE, 0xAE2601FE, 0xCD25ECC3, 0xB50DA648, 0x8AE871B2, 0x8050C26B, 0xFAB0A65F, 0x8F4C1E93,
+0x67AD34FC, 0xB34F1674, 0xE2D3FE21, 0x2B15B8C3, 0x0005F1BD, 0x46E1CB56, 0x6867B6BF, 0xD1838A97,
+0x5C0AA880, 0x4DA1E310, 0x3E35CC63, 0x31A6AD70, 0x4B363063, 0xF81EDEF8, 0xA54A1A17, 0x9524515C,
+0xDCF24155, 0xA4734CFF, 0x04DD2E97, 0x55AFD0F2, 0x61F350AD, 0x3DDEEA4A, 0x1BEE6F7B, 0xDD9D7A23,
+0xBEF25BBD, 0x42CDFEE6, 0x0CFAE152, 0x209652C9, 0x3A2960A3, 0x840EFCBA, 0xD726D092, 0x3625B49E,
+0xCFA6136B, 0xAA669D7D, 0x496997E5, 0xF355F0C3, 0x06E5BEE5, 0xFB00FA24, 0x86F2968D, 0xDD76D04F,
+0xECF30692, 0x932FDD82, 0xA0872A00, 0x138DF81F, 0x12E8DB4C, 0xDFCFB06D, 0x30076541, 0x30BBCDE9,
+0x45C8D12C, 0x2DA0B978, 0xBDAFF140, 0x3BC5FF6B, 0x5D5C3B18, 0x2B6043A2, 0xDFD16F7C, 0x5D19370E,
+0x05332A9B, 0xC33612A3, 0x4C31AE3A, 0xC57EEB33, 0x0DEAE0DB, 0xBDB09CF0, 0x30370CD9, 0x38F6B6E2,
+0x126B8C41, 0xBAB1484E, 0xCC0581AD, 0x800FC957, 0x8E49FEC3, 0xB971C9F6, 0x17E85F6A, 0x008BB7B7,
+0x3E99DB48, 0xC80EF763, 0xC0F9DE4F, 0x8B33A2E7, 0xE83311F7, 0xCB7C89CD, 0x59377ACA, 0x2938D562,
+0xBA422574, 0xBCD2B79E, 0xD13F6A47, 0x42DA8632, 0xD70D6F3D, 0x83D707A7, 0xC0D83CBB, 0xD17E0B48,
+0x40C6BCBA, 0xCA628F8C, 0xD3CB4CA2, 0x2E920F6A, 0xF55F4495, 0x7CF92059, 0xC743641D, 0x715CBBB0,
+0x5791D47B, 0xF0FE7D05, 0xAC51A217, 0x41BC9166, 0x655D0E9A, 0xDEF35DBF, 0x74066BE7, 0x4CC27F15,
+0x09BA9148, 0xB84D1022, 0xD9E30764, 0x4B822C08, 0x0D2E7752, 0x4C425031, 0xB3AB8E77, 0x727BEAC4,
+0xE7B148CB, 0xEEF24209, 0x1E8FC5CC, 0x8ED21323, 0x85575B39, 0xC030F922, 0x9760C042, 0x0FFE79F6,
+0xAC577C78, 0xC876B48F, 0xF5A25211, 0x462739F5, 0xCB5EA0BA, 0x23E16B02, 0xB2C1DABE, 0x60A28D58,
+0x2E93BBA6, 0xFC6C3277, 0x3F62475A, 0x9BED4405, 0xD8CB8769, 0x00BE0CC2, 0xB909A058, 0x7C5B60C5,
+0x3D15573B, 0xB65FB912, 0x1724D03C, 0x88E5CA5A, 0xD9B6FE4A, 0x3FD6EAA5, 0x3A8E3EAE, 0x5A6D2894,
+0xA6F210AD, 0x6191DA1A, 0x6207EC46, 0xB15DCEEA, 0x3F20CFC5, 0x62EDBC06, 0xFF8BEBEF, 0x5D826C8D,
+0x562F971B, 0x3D681531, 0xB29E9A1A, 0x3BAD4AB5, 0x6062A16F, 0x7957983D, 0xA1D6A316, 0x5D47954B,
+0x4198C7AB, 0x5E7570D4, 0x0468255A, 0x5A5518A8, 0x59E59550, 0x5D0EE66C, 0xA91A4BCC, 0xDE50D32D,
+0x0D3CBA6D, 0xC2D95D15, 0x7EE8B6DA, 0x8F22781C, 0x1D991B40, 0x095512CD, 0x88BC700D, 0x23396959,
+0xCB168E2C, 0x577478EB, 0xC585C693, 0xBC15862D, 0x81BD212A, 0x1F393CF2, 0xDAC2CEF9, 0xBAA0C9F8,
+0xC05F7DF8, 0x0EA11439, 0xFDA008DD, 0xE79B7EBC, 0xCD813D10, 0x651E694F, 0xE103AEB7, 0xA0FA6A12,
+0x36FF237E, 0x963C62C7, 0x907B0C5D, 0x912BFF6F, 0x3DEF272A, 0xBCD587B2, 0x4755C286, 0x878B2BB7,
+0x477AFF86, 0x384B19BF, 0xC6F90B48, 0x94A30967, 0xA5318B5A, 0x5C791266, 0xA18AC834, 0xDE623908,
+0x531514C3, 0xE7C147D3, 0x9BB66FAD, 0x719854BA, 0x782E3740, 0xB434467A, 0xC36D6AB4, 0xC48E34A5,
+0x42964F67, 0x33D20DD3, 0x48B244D7, 0xCA65A598, 0xB3D94255, 0x69C348B0, 0x15A137EB, 0xF3536C1A,
+0xDDE6D720, 0x31D2E0C1, 0xA36D7FD0, 0x415717D7, 0x4650906A, 0x472CA25C, 0x97A9FDD7, 0xE1F3F40C,
+0x558586FA, 0x625DB25B, 0x3C2F10D9, 0xDB660434, 0x9D8A0397, 0x5CE8AE85, 0xDCB98B0D, 0x2FD1CCF0,
+0xB4EA1B2A, 0xFCD32A47, 0x21A4BC77, 0xC421B676, 0x84E993D6, 0x97AFDB84, 0x13109FF9, 0x0D3625A7,
+0x088EFBF5, 0x749AA5DD, 0xAD1D04C6, 0xF3270412, 0xA3361046, 0x5B40B39B, 0xB21C90DE, 0xAE7960EB,
+0xEB2D803A, 0x56A941C2, 0x6F949727, 0x7868BCCB, 0x9E93F412, 0xD7B2EA07, 0xE3DCFAFA, 0x02B8456C,
+0x0D27E6E1, 0x30C1A19D, 0x364E8873, 0x5E87E918, 0x5519DBBE, 0x09DA5BDF, 0x66C94EAE, 0xA2400B16,
+0x93F3FEC5, 0xAD051D9F, 0x48DE4CF8, 0x4EC94DBE, 0x3AA4A72E, 0x10A59AAF, 0xD59A0208, 0x8737FCC3,
+0x0C8621E6, 0xAAB205D4, 0xC182861B, 0x6D6F7231, 0x942420FE, 0xB7A15BF6, 0x3F69F50C, 0xB16F276B,
+0xB6188407, 0xE7B6D28B, 0x99613835, 0xAE80FD34, 0x6E944BFD, 0x30A9A918, 0x09C871B2, 0x9BF81F32,
+0xE4803F08, 0xC91037D7, 0x3B665743, 0xE84D3028, 0x76E2D46D, 0xCF67CFEB, 0x36DBFD3F, 0x274113E0,
+0x6C849C66, 0x4DCFF426, 0xC4DD7D37, 0x6420BFA3, 0xC3007E9A, 0xC0096AAE, 0x15661456, 0xE9656BC3,
+0xAC24D6D2, 0x8A8FEC34, 0x0FD02B17, 0x193D1C64, 0x2AC5462D, 0x4D7010EF, 0x54A27F58, 0x41652233,
+0x43BE05C4, 0x89EB3F59, 0xC731278A, 0x5117063D, 0x1C7E5576, 0xB706C18A, 0x3FAB301E, 0x124B9EB7,
+0x4A82530A, 0x04787801, 0x1D9AABBD, 0x533172B9, 0x05E1FCE9, 0xDA3A7D38, 0x30798AE3, 0xDB186334,
+0xA6912F26, 0xA22C036C, 0xEE2B5496, 0x4C4AAD1A, 0xA70ECFF0, 0x64134EE0, 0x22D4240D, 0xEA65C9A8,
+0xFE5DAFC0, 0x519FCAEA, 0x09D5BB5D, 0xAD112F88, 0x56CAB7FE, 0xD2C6090D, 0x999D78EC, 0xA0C60BF2,
+0xF873959A, 0x625F987F, 0x51D0A843, 0x84F2181E, 0xAC97191F, 0xF0690743, 0x7AAF12C1, 0xBA15007C,
+0x1B2BF569, 0xB72FE48D, 0xF138E2F7, 0x9504D8F6, 0x7DFC69A7, 0x725C18AB, 0xD30F6582, 0x218EF8E4,
+0xD9070B11, 0x6CB70318, 0x41C5DB3B, 0xE4860176, 0x430B641C, 0x9A34FE3A, 0x5B5AABAA, 0x11518512,
+0xB3F28AEB, 0x470305A4, 0xC54B36B2, 0x5C71F575, 0xE9280207, 0x460A21DD, 0xA9BC96A7, 0x1541AC18,
+0x02A267BA, 0xA06CC976, 0xEC348862, 0x4EC4BA68, 0xA455DF9E, 0xC5D8C81B, 0x677C4901, 0xA71B0D5D,
+0x817CC83C, 0x080B680F, 0x770E91E5, 0x2BDD9F86, 0xD36F8282, 0x33577DC0, 0x630E9671, 0x4C9C6B19,
+0xF8A55F06, 0xF2EA8BFD, 0x1E1C55D8, 0x5B8B9DB1, 0xB117D98F, 0x4A8685A5, 0xFED37FA1, 0xCE5FDED1,
+0x95A1AB62, 0x23F47E0A, 0x105DE781, 0x1AB2347E, 0x8F31726E, 0xB3A2374B, 0xFE7A0138, 0x77F7EB42,
+0x16279D42, 0x127B9D91, 0x3078E07B, 0x7F6E3A90, 0x0F2E22CC, 0xB1320877, 0xE2B72947, 0xDDEE4922,
+0xA23434B9, 0xAD9F106F, 0xA9929B8F, 0x6103787A, 0x934F274D, 0x26BF0CBC, 0x00B677EB, 0xDA35158D,
+0xCE6F5145, 0x25706408, 0x3E699AB5, 0xEFC7907D, 0xD59F401C, 0xB421B741, 0x5ECFF73B, 0x9E6499FF,
+0x5D6CE1D8, 0xCD2FF39C, 0x7B44B475, 0x050032B5, 0x0066C7A0, 0x4F75038D, 0x5840E2FF, 0x0CDEF933,
+0xDB39DC96, 0x370D8D7A, 0xC658F6C1, 0x671E6DFF, 0x70828BD1, 0x8B180FFB, 0xCB81674B, 0x717251D7,
+0xB37D01AE, 0xAF2B2EC1, 0x0FED6C98, 0x63340CCF, 0x4E62F7C8, 0xACFF6A37, 0xA0788C70, 0x64D7AE58,
+0x1CC231F1, 0x8EB8FE84, 0x4D905161, 0x5BAF8F72, 0x88645DBD, 0xA28E3836, 0x0ECEA0B4, 0x87D7638A,
+0x32493B77, 0xDB0A8524, 0x5CC37BA3, 0x4334E47E, 0x485D8A1E, 0x887C788A, 0x17113AE8, 0x146E7611,
+0xE21F0A9D, 0x94E827FA, 0xCF409144, 0xFED6599B, 0xBC9B2026, 0xF431CDB9, 0x18AD6771, 0x973C341E,
+0x9666EC80, 0x49DE4908, 0x3BCD39B5, 0x0399EAE3, 0xDE615F4C, 0x2CCF7936, 0x979F48CC, 0x3A14DF08,
+0x6B0394EC, 0x648C5D71, 0x928A4E04, 0xA1B4E20B, 0xDC7441EC, 0x30DA15E7, 0xCE4C2D1B, 0x6760556C,
+0xBF4D7710, 0xCEA8755A, 0x4E341CB2, 0x50C186A2, 0x8AA6EC8C, 0x152E5B04, 0xCFA10BF5, 0xDE6A2957,
+0x09036F4D, 0xF33013A0, 0xA15FB5A0, 0x3C8201F0, 0xA99D305F, 0xFBC91708, 0x1CF67FC1, 0x320FB9B6,
+0xF52943DB, 0x9F03F0AE, 0xF77838AF, 0x8EDCB9B9, 0x23C43CB6, 0x73F4CBBB, 0xD361F71D, 0x04FC81D9,
+0x8A32ED0B, 0xCC109BDA, 0x5D666D29, 0x16F0C693, 0xD3AF7147, 0xC4D3FEAC, 0xDBA1D7C2, 0x36896D9D,
+0x3D220D4A, 0x87535B5E, 0x8C155B6E, 0x8639FC0C, 0x2EDF6AE5, 0xB341C1B4, 0x1AD29AB7, 0xF752F5DA,
+0xF7A3AA67, 0xD35E4185, 0xCA430375, 0xC57DB3A8, 0x8ACDBC03, 0x7FBA8011, 0x429FF3DA, 0x93FEAD99,
+0xE5071BF3, 0x9039D0A5, 0x4EC6FBD9, 0xBED3DA8C, 0xEAE53F45, 0x2D883887, 0x20E428B7, 0x2C640675,
+0x7E2FBADF, 0xB2D873FE, 0xFBBA3F11, 0x1B750EB9, 0x2729CC0F, 0x667881BC, 0x9183DA2F, 0x1908E84E,
+0x0F2ECD96, 0xDB09FF55, 0x127340B6, 0x53FB30B0, 0x6E527A59, 0x81CD261A, 0x4F732E21, 0x82F73A1C,
+0xA3750353, 0x6EABCB76, 0xAC7C543A, 0x4754E01D, 0x134BDF4F, 0x7BD783D2, 0x94A9B98F, 0xFC0770FE,
+0x703D669F, 0x9537883E, 0x7E6DB566, 0x4737EE5C, 0xA087C4A9, 0x352F8F7D, 0x61AB52A7, 0xBAEC6682,
+0xA27C316C, 0x7F615393, 0xEC97E789, 0x822A3488, 0x94B8FD13, 0x8ABEF74F, 0xFF7C75A8, 0x35AF3ADE,
+0xD37225DB, 0x97D665CA, 0x83170D7D, 0x791F2093, 0xE03DEE27, 0x48E86470, 0x11C5A0EC, 0x71A461F6,
+0x0E7D77F5, 0x2D49BD18, 0xEF30BF0A, 0x02FC3616, 0x005EC083, 0xB75F5035, 0xB6C379F8, 0xFCBDDA48,
+0x53E2D3D5, 0x50974BF2, 0x19B724E7, 0x8F65342B, 0xDC419F7F, 0x8420A82E, 0xA89267BA, 0xCEE3F22C,
+0xFF77B588, 0xAD5176F4, 0x9E206279, 0x51E70AD0, 0xE309CFCF, 0x970F6088, 0x092704F6, 0x827A5EEB,
+0x06739576, 0xD855C67A, 0x973FA490, 0x115F51E8, 0x4BC9F158, 0x43D08B41, 0x627BDFA0, 0x1B46C98D,
+0x3B9E0C11, 0x9373B021, 0x712087B8, 0x8DDF12BC, 0x04EDCD6F, 0x150DD0FE, 0x1D39C525, 0x68BC55A5,
+0xC7EF4AB7, 0x14A9D8B6, 0x8FD48D85, 0x570D6E42, 0x1C768FB5, 0x23ADCB15, 0x05136041, 0xF19F0DA3,
+0xCFCA13CF, 0x08A24719, 0x5302CDD8, 0xC3E794FD, 0xF3882AB4, 0x4641AC8F, 0xAABF9DF1, 0xB32EF4FD,
+0xFE222F6C, 0x0D3026A7, 0x3E2BD7F0, 0x71CF0CE7, 0xD3CA03AD, 0x00342AD2, 0xC3E2DEED, 0x50A1F8E6,
+0x1EEFE15E, 0xF0C86B79, 0xD2578198, 0xDB963AC1, 0xF5E3D0A9, 0x884F895F, 0x2990ECBB, 0xEACEA7DA,
+0x4B0F8F40, 0x52E7573E, 0x48DED5F3, 0x1376DC1F, 0x882FEF6D, 0x0214C93D, 0xFC47FC82, 0x1AF2AF09,
+0x8EC1531C, 0xA43A7B80, 0x04B55281, 0x2048A200, 0x4E800473, 0xEBA61EBF, 0x7123CCC2, 0x71D81A81,
+0xE4551938, 0x03FCBB3A, 0x87C70115, 0xE244CD71, 0xA7574DFA, 0x353F73CC, 0x88F9C549, 0xF605FEAE,
+0x1E389F7B, 0x24297973, 0x7ECDF545, 0x4880D073, 0x4DFD47FE, 0x8D6C98AD, 0x5F90B551, 0xE40DD74B,
+0xB3A52B52, 0x1A259EC9, 0x3FBED1F6, 0xCFDFB4E0, 0x0D725072, 0xB75FE892, 0xF62FBC1A, 0xC37A9AD2,
+0xC07177BA, 0x48240935, 0x8E12BA0C, 0x644234DC, 0x22C4649A, 0x4007487E, 0x6670BD7D, 0x5F3BDB7D,
+0xE0539334, 0xDCBF1ED0, 0xA0D686AF, 0x43584A78, 0x41BCDE7C, 0x35C062C8, 0x71E6353D, 0x36BA3502,
+0x0C868719, 0x1E165907, 0x83B96D6A, 0x8992F78C, 0xDA23BC32, 0xD7C6BF6D, 0xB66C72F6, 0x0496AC7F,
+0x166A9AF8, 0x43BA7DAC, 0x1D9FB238, 0xD6E288F9, 0xDDAD676F, 0x7803CCD0, 0x6BF419E5, 0x61D0E4DB,
+0xA37ADC4D, 0x4C8A713F, 0xA63259D3, 0xB56478C7, 0xFFEB5890, 0x368D19F5, 0x0BA89299, 0x89E73C8D,
+0xB1828CB3, 0x73B233FD, 0xB3A1D668, 0xF75724BA, 0x6DE197D0, 0xE3676AD9, 0x459131F9, 0x8E6C0587,
+0x979DDA7B, 0x793607C8, 0xD5EFEE9B, 0x35168CB7, 0x964518D0, 0x0012BA4E, 0xBDD71E66, 0x620DCBE6,
+0x259D10E8, 0x626F3930, 0x55988283, 0xF110A30A, 0x6599BEEC, 0xB45CD48A, 0x5B1E18D6, 0x3A4208A9,
+0x89EE46B9, 0xAFC09C53, 0x1386182D, 0x1179B5E4, 0x5092DA6F, 0x9112638D, 0x3C820D25, 0xA12DC640,
+0x2D4F64FD, 0x202E4C20, 0xB02BB612, 0x1C4131CF, 0xE940B078, 0x97B67A8B, 0xC1CFE072, 0x93EE9D3E,
+0x437281DA, 0x674AE4CE, 0x7D932027, 0x1457C6C3, 0x96EECED7, 0x08559090, 0x2B6B8593, 0xD5E62EA0,
+0xE8D02267, 0xBED70A54, 0xDA0D45A4, 0xF0A43287, 0xA084AFA6, 0xB78C7ECC, 0x7F46DC77, 0x67F04589,
+0x4122DE3D, 0x96C81D44, 0xA6A7885A, 0xF632215E, 0x10F05D4B, 0x9F5FE6D2, 0xC3205E3F, 0xE177F244,
+0x2F593EC6, 0x6A481A9C, 0x82534468, 0xA225805A, 0x6A32AD76, 0x5E674755, 0xE1D8CF68, 0xFBD03404,
+0x22DCA22A, 0xB14E7497, 0x03E4084D, 0xDB8169ED, 0x05707975, 0x1BD00FB4, 0xA471C6A8, 0x4F3398A6,
+0x3592BA51, 0x1080A5D0, 0x4E67291A, 0xF8981DE5, 0xBCAD692C, 0x4EBFDE51, 0x75A3F25F, 0x97692F3A,
+0x31627731, 0xB0F29D9E, 0x03183B44, 0xD072CFC9, 0x44802F9B, 0x6ACE4B36, 0x4BB52D6D, 0x1CEA521E,
+0xCE9BDE36, 0x3246E0FD, 0x41221932, 0x711F0E3E, 0x0A6D400F, 0xF6EC086B, 0x89E30859, 0xAC380466,
+0xA2472634, 0xA27EC988, 0x539C9228, 0x26ECA97F, 0xAFD7CA47, 0x941D3CB5, 0x741AC664, 0xAF2418EB,
+0xE636131E, 0x3BAE5D84, 0x66D90DA7, 0x6065382A, 0xB95DC7E6, 0x43BC9C83, 0x653A3F89, 0x6AC55C28,
+0x10BD5F93, 0xD39A87E1, 0x145F5802, 0x290A19F2, 0x05FE6D45, 0x4E5F3479, 0x8E7753CB, 0x34585C3C,
+0x40416C30, 0x923D8577, 0xAA995230, 0xFDC56762, 0x9A7C9A43, 0x74408429, 0x4C84DEA2, 0xB4D7998F,
+0xF4852883, 0x3C9F9CA0, 0x6F675EEE, 0x47B731AF, 0xE006AA34, 0x85CDEBA7, 0xB1975D77, 0x5D85A840,
+0x0AA2FAEE, 0x469291FB, 0x33A19633, 0xC3557F2A, 0xBD15006D, 0x53B0D614, 0xA39F4492, 0x78131263,
+0xE1D7F46E, 0x6C77934C, 0xC00C7813, 0x5C100BE8, 0xFEA888C7, 0x728BBE3C, 0xCDA8598D, 0x30D62656,
+0xBEE6180F, 0xE93AB83E, 0x924A4A9A, 0x60851BFB, 0x38C15661, 0xB0D2A237, 0xC72C3B3A, 0x1DE93213,
+0x1067CDC1, 0x9ADB772D, 0xF599A0D2, 0xECD7DEFE, 0xC7D04251, 0x23D66C56, 0x6A7E1B33, 0xD4F75301,
+0x24F83023, 0xEE38A7C2, 0xC87CEFF4, 0x71FFC6F3, 0x00345775, 0xAE37DE9D, 0x0B4983FF, 0x1AA440F8,
+0xB0B5B7D6, 0x89425A75, 0x262413AC, 0x967770A9, 0x24098DB3, 0x4BB9D050, 0x3142C093, 0xDE3C95AB,
+0x169E7A54, 0x31A3A6E7, 0x8DC84BA1, 0xB458C465, 0xC7C3C91D, 0x22076B42, 0x429F4D21, 0x9FAFFE8C,
+0x4937FCB4, 0x1B4B668E, 0x5105B4E3, 0xE8214018, 0x6B912F64, 0x47BB541A, 0xC312F9CC, 0xE77A78B2,
+0x8F3BC4BC, 0xBCB87E58, 0x1601E14E, 0x2CCDF1CB, 0x28895927, 0x596DD05F, 0x7372B433, 0x2D5AF04B,
+0x080A1DE4, 0xF1048C8A, 0xD2B124AA, 0x046AF5D3, 0x05A62524, 0x8773584F, 0x0A4C4C98, 0xF29E9157,
+0x66BD588F, 0x8B351DB2, 0xB993A9B9, 0x0DE9C1D5, 0x9E168DC5, 0x601E57D8, 0x16647A0A, 0xA591DC6E,
+0x86C21334, 0xE12D25C3, 0x901E07F1, 0x62F9573E, 0x1DCCCBC0, 0xAE3F2677, 0x897912C1, 0xF89487B5,
+0x746FF3D4, 0xA3A6A2C2, 0x41F55C82, 0xA35A57BD, 0x18A0BF71, 0xF0F313BD, 0x35334913, 0x42C22CA1,
+0x4176329E, 0xE90AFA5E, 0xA1E1C4BC, 0xDD427086, 0xBEB8AC32, 0x9435A7D4, 0xC9B2F280, 0xA4FBB17E,
+0x639B6914, 0x99E1003A, 0x91205C5B, 0x97BCE18B, 0xC32ADACE, 0x061F2DEA, 0xB0E4216C, 0x4F9EAE0C,
+0x12BC947A, 0xB7F9C2B7, 0xF4CA473B, 0x8CC146EF, 0x4151087E, 0xAEAB96AE, 0x5D20B712, 0x624C5D2D,
+0xEC230ABE, 0xD0D87374, 0x88F72076, 0x8458B48F, 0xB9581D71, 0xAF43D236, 0xF314A906, 0xBACCF3D6,
+0xD93BA8CD, 0x578217FD, 0x2B49F7EA, 0xE931CA8F, 0x0EA36F43, 0xC4D9C33E, 0x5DDB6823, 0x9279B8A0,
+0xB03BEF4C, 0xD2C9EEEF, 0x4E7A2FDD, 0x57DD8BE7, 0xED48DCEC, 0x541B048B, 0x97D00012, 0xB05FCD2B,
+0x8A48A22A, 0x79317DFF, 0xCE1D2E2E, 0x7BD45209, 0x04E9CBB0, 0xB4F7E22C, 0x30AB6233, 0xFA48AAE5,
+0x95759369, 0xDF350371, 0xC41BE93E, 0xF9E037C4, 0x44BB8E2E, 0xE45DD37E, 0x2E9B1441, 0x9FF60608,
+0xF647FC5E, 0xFAB4EE17, 0x7CAE2B41, 0xDA622CE1, 0x23DBAA3E, 0x0ED48F22, 0xEE5EE337, 0x914179E5,
+0x00EE2EF4, 0xA7BC699C, 0xC3797468, 0xF51D234C, 0xA8CC971B, 0x7B7AE131, 0x16778FD6, 0x4BD14AAA,
+0xACF47606, 0xBB7D2B77, 0x2AC8BA66, 0x4F8977D0, 0x8BF39E2B, 0x647B1CAE, 0x2474FF15, 0x9ED7A83B,
+0xD3DB5A56, 0xE01135AC, 0x89970554, 0xA664F564, 0x05182DB2, 0x7963CF28, 0x674E8AE3, 0x55B97431,
+0xC6E5BBCA, 0xC538C5C5, 0x630371C5, 0xF4704510, 0x6915283C, 0xDF0453C5, 0xE1978AAD, 0x71BE7C90,
+0x8ACFC96D, 0xFDC4D237, 0xE4DF7AD1, 0xD97C283D, 0x9A8B5C0B, 0xF2BC4AAB, 0xAF23B6D9, 0xB748F371,
+0xE539EFC3, 0xC4A91441, 0x960BABFF, 0xCAFD75AD, 0x6CAAA7A3, 0x19E1E3EE, 0xFC84ED29, 0x7A863ED5,
+0xC1F69225, 0x55584958, 0x8BDE38BC, 0x9944CC45, 0x1A7E3A2C, 0xB96883D9, 0xCE609B1C, 0x9A93053F,
+0xE51BC249, 0x3C6694FE, 0x471C2377, 0x5488CEAC, 0x6A9B34CA, 0x4B6C65B1, 0xE8C41EDA, 0x4E1072CC,
+0x8039D575, 0x8C4BB001, 0xE1B7976C, 0xFB923C70, 0x5DE5AF60, 0x138F7412, 0x76D251C9, 0xA30D0B47,
+0xA85D1033, 0x3657F333, 0x161089C2, 0x1C67A150, 0x09AC0B5B, 0x87B9BC2F, 0x90AC4C42, 0x1FAD2EDE,
+0x58E7123B, 0x8653D907, 0x2C041410, 0x3C946AA0, 0x8DFFDD5B, 0xA93CD070, 0xE281A6E3, 0x3F7F125F,
+0xB73C3F8D, 0x32BDDF19, 0x4E5F7B11, 0x5191CA41, 0x089B0D31, 0x397E9036, 0x74529BA9, 0x220DF3F5,
+0xDB366B7F, 0xA577EFF9, 0x084C4CAC, 0x8009CAA9, 0x21E9AB15, 0x9C49C126, 0x69D041BA, 0x92657158,
+0x75B873CE, 0xA7CA9410, 0xB57C8450, 0xB5904BB4, 0xF1FB6CBE, 0xAFCCB825, 0x55771D9F, 0xED015431,
+0xBD2AE623, 0xF4FC5691, 0x622FF355, 0x093741A8, 0x925CF183, 0xF3EF3E68, 0x709DE0D0, 0x7FCDD0FB,
+0x2301CEA6, 0xF95023F9, 0x013013C9, 0xE2518496, 0x8ED117F1, 0x341C8AFE, 0xA4586CA2, 0x50B1B146,
+0x545C831E, 0xD73CAC4C, 0x06455708, 0xDB97F8C9, 0xCCB5C863, 0x3168CE2B, 0x9BDB8D9B, 0x5EF4BA5C,
+0xEF878A9E, 0xCD5CA9DF, 0x6CC132B0, 0xF5504C0D, 0xF913DF41, 0x6E01269B, 0x7C9EDD73, 0x864D625A,
+0x41D2702B, 0x1E2E5ACD, 0xCECC6F2A, 0x767EBC6E, 0x24D17667, 0x4601EADA, 0x9EC62979, 0xABD0FA16,
+0x3271A458, 0xB68164C1, 0x8B77093E, 0x47BF81E9, 0xCDC1FD3B, 0xA8423B5D, 0x44984445, 0x3EF62CCD,
+0x76C69936, 0x29A174BD, 0x4A2D80A5, 0x3A527D85, 0x034CFDCA, 0x4CD80338, 0x6149CCDD, 0x3A55C383,
+0x3E1405B0, 0xA68AD38C, 0xA27FBFBF, 0xA156E8CA, 0xF239F0E4, 0x865DCB90, 0xE3D96F32, 0x50F411EB,
+0x0A1B7D1E, 0x0113D508, 0xAEA3B78A, 0x205ED53B, 0x3266821F, 0xF3C462D0, 0xFC0431FF, 0x79909A97,
+0x2B6F16FE, 0x321D4CBE, 0xD8EA94F4, 0x86CBC131, 0x9F7DBABB, 0x82820CBB, 0x5E06B42A, 0xA5E011DA,
+0x5EE7564F, 0xAFB699C9, 0xE2A35C29, 0x7B84E2F4, 0xFFBCFFAF, 0x2E7AECA2, 0x535FCF8E, 0x634468DC,
+0x3F3A6B96, 0x126A535D, 0x5A0D9699, 0x34FA5D75, 0xF3F16D1B, 0xCA588829, 0xD860D4A3, 0xB795C858,
+0x337A4C9F, 0xBF76ED3B, 0x4CA538FE, 0xC1260EF0, 0x8325BCA0, 0x650AAF3C, 0x55DC3218, 0x9BE0ECFE,
+0x4720EC9E, 0xF963BEEE, 0x3D12E6C5, 0x107EEDDB, 0x377B8357, 0xC93F0A7E, 0xEEE47094, 0x2238B031,
+0x6352D5AE, 0xC74BE66B, 0x281A384A, 0x2A3C108F, 0x3BE641C9, 0xA1205FF6, 0x1B345902, 0xE89A07EC,
+0x4B38D5D9, 0x6861224F, 0x64CAC088, 0x3BFBE148, 0x58AD3CDD, 0x6E197E42, 0x09566B13, 0x5C5459F7,
+0x0424C53D, 0x4FC8F9A1, 0x6BBECF79, 0x4345FAC5, 0x823201C6, 0xD8D7B5C3, 0xBBFA219C, 0x6E687516,
+0xD3715429, 0x6C4CB802, 0x98F89722, 0x44490F5B, 0x0CFE1819, 0x7E837971, 0xF0BB06B7, 0x1DFDBED6,
+0xB1B7471F, 0x431CA680, 0x464F8800, 0xEC9AD8B5, 0x871D619F, 0x50F1C9A7, 0x6E63D530, 0xF7351C05,
+0xBEAC97F8, 0x1284EFAE, 0xCA7B3FBC, 0x841A36BD, 0x64FCA7C7, 0x466957AF, 0xA0B58DAD, 0x457358B4,
+0x1E46846F, 0x09DF6BE8, 0xFC1E19B0, 0xF2E4C602, 0x3273D976, 0x50C23A2F, 0x2899CF5E, 0x7099232F,
+0xEC1E12AA, 0xEC9E96AD, 0xAB41A284, 0xACCA969F, 0x5621871E, 0x4032C827, 0xEF573703, 0x3AED41C2,
+0x0FEA9001, 0xF5ACB436, 0x1BFC788A, 0xE8C7261D, 0x463B4C9E, 0xF9DCC18E, 0x966358D7, 0x8D97AEBB,
+0x8CC16548, 0x73BF4C51, 0x1C1F1057, 0x2D509B39, 0xCE11B83A, 0x33C5D866, 0x5F745798, 0x23FED34A,
+0x54103C59, 0x143182C3, 0x0D9D45B2, 0x11DA5C01, 0x72AA41EC, 0xC69B4533, 0x1ECFD26D, 0x50302E1B,
+0x5EBB9CA1, 0x18C001F1, 0xFD001166, 0x502A530F, 0xC56188E0, 0xF58F9B54, 0xB81DB602, 0x9F59905D,
+0x24178664, 0x901396F5, 0xF6C11514, 0x2C450933, 0x7C9C5FC5, 0x84BA4C4C, 0x7075CEBA, 0xEEC37FBC,
+0xB44A1D26, 0xA05F4DDB, 0xFE78CCB4, 0x42C5A85D, 0xA913B384, 0xBA484FDA, 0xBEE50341, 0x444752AF,
+0x9A1A0C9F, 0x1CFC3CD6, 0x62F0D128, 0x54C2E27B, 0xD11D5993, 0xBD8C71BA, 0xED4E9100, 0x8C532E21,
+0x71D8D57E, 0x1B86FE62, 0xA45CDD23, 0x7249C268, 0x828894F7, 0xA30FF004, 0x4FED45D3, 0x06070222,
+0xEDC95B36, 0xB1068CC9, 0x87152F58, 0x3B04725F, 0xF7909711, 0xDB33A2A7, 0xE847C763, 0x5A133463,
+0x9424875A, 0x23278294, 0xFE7AC725, 0xA936C10C, 0x46E4D03A, 0x9EEB11DD, 0xB6A21DEE, 0x84AB43F8,
+0x01CB88E7, 0x73E8D8E0, 0x5188F1D7, 0xBEE4A4DE, 0xA5C41CD1, 0xC8B4CB79, 0x0319E1DA, 0x252A8362,
+0x68052060, 0x23F22076, 0x088422DB, 0xBDB87BC7, 0x014723C8, 0x331F3F37, 0x0B85978A, 0x02BEDD26,
+0xCA70B6B5, 0xBB3A0F70, 0x257FF76B, 0xB0DF0E27, 0xB92D0C2C, 0x59E2BD3D, 0xF35CAE92, 0x1E3D6ECC,
+0x1268165B, 0xCA5F2DC7, 0x8FC2C620, 0x39D16D4B, 0x88BF9D13, 0x68B9E285, 0x5961EDFF, 0x92D3B09B,
+0x154FAE0E, 0xF0B5577C, 0xECDB0F23, 0xCC1BA7D9, 0x64CF376C, 0x33281974, 0x87D2D81E, 0xAAAFE970,
+0x4519A8EC, 0xF77BD8D8, 0xE950AA77, 0xC839A4AF, 0x261F0F98, 0x01F8D93C, 0x17B521EC, 0xAE2FBB9B,
+0x00F2F2C7, 0x7318CCB2, 0x15A30C68, 0xC6670E47, 0xA384B462, 0x11554596, 0x9490EED8, 0xDD50CEDD,
+0x97868988, 0x587ACAC3, 0x80F30F49, 0x65270B5D, 0x9D7EFCD1, 0x70E08FA3, 0x18833A06, 0x47032BEF,
+0xADE260AE, 0xA6C871AB, 0xC99BC917, 0xDCF85DE5, 0x56D1CC0B, 0xE8BC7405, 0xBE992374, 0x11BAC674,
+0x2F634FAD, 0x8B93F53E, 0xA6EE1938, 0x530A158F, 0xAD66195E, 0x9A121568, 0x02D61763, 0x86DD21F4,
+0xA6491176, 0xE55E4BCF, 0x2C3CB63C, 0x024841CD, 0x5F52B460, 0x66454FAD, 0xDF23807A, 0x38083862,
+0x3714AFD8, 0xBA9A56D8, 0x5CCA73F5, 0xF29645D9, 0xC75F5738, 0x618D9680, 0xD4E1A8DD, 0x5456F102,
+0x3B724821, 0x19A52ACC, 0x38CFF4E9, 0x3F183725, 0x6A793538, 0x5C3EEF68, 0x8A7F5C22, 0x4056A550,
+0xCAF07283, 0x77B3C800, 0xA9208212, 0x28A753A9, 0x03DF4E8D, 0xB9B464A6, 0x73EBADEE, 0x13AB7414,
+0xA7CF129C, 0x7A54F7A9, 0x1B242187, 0x40B1910A, 0xEA2064FA, 0xD123011B, 0x8D18E5F8, 0xE52FF965,
+0x89A32FB9, 0x22D2A1ED, 0x5668DEA9, 0xA6541D98, 0x0BCDCBAE, 0x11560EFC, 0xBC598BE3, 0x5AE2FD26,
+0x021BDB7C, 0x603D2B36, 0xCB181A55, 0x98A5B26E, 0x2EDCB3A3, 0x10D654D3, 0xE90E8021, 0xECC30DED,
+0x9BFAC61E, 0xEA7AAF2A, 0xBC440D50, 0xD4F1A092, 0xF5E58CD6, 0x3F94061F, 0xE24333AF, 0x3BDD5838,
+0x27195798, 0xBCAE82A7, 0x2B94514C, 0x2DEF8A09, 0xD15CB6A6, 0x936C59FD, 0x32A6F8E9, 0x491327B4,
+0x78473BDE, 0x24AF481E, 0xB0BE7E58, 0xB61B70EA, 0x4AD0FD79, 0xF3ADDF3D, 0xA91BD37C, 0xC624AB2C,
+0x1B9CD5FE, 0xB371F1F3, 0x27E21FAB, 0x368C6BDE, 0xCE429A32, 0x4A53A07F, 0x48018E89, 0x14D3730C,
+0x7D4115CA, 0x579A7695, 0xA8E54C50, 0x99718AF1, 0x0C1AE2B7, 0x90B6A91A, 0x7A1C4DC0, 0x03006B33,
+0xC6CC20BB, 0xE0F59637, 0x5432F267, 0x722246C3, 0x29A5EA45, 0xE24049EC, 0x7CACB2EF, 0xE5C01490,
+0x55DC0AD2, 0x0371EF63, 0xCE0EB43C, 0x141EC101, 0x8F6C05A6, 0x0D1DF470, 0xA42DCF3A, 0x2DEBA57B,
+0x82BD31A2, 0x3A243D6D, 0x567F7515, 0xBEC1533F, 0xD0AC62C3, 0xFA470B40, 0x5D2A3BE6, 0x646670DF,
+0xFE5F1200, 0x9EC09A2B, 0x47F11DD3, 0xF7590403, 0xE47B252C, 0x23D199A2, 0x4D896673, 0x4BC41B23,
+0x4278021F, 0x90E82996, 0x007C3C5A, 0xDB6C4854, 0x2FAE59D4, 0x04164760, 0xAFEAA058, 0x86BFC02C,
+0x6082C555, 0xB9B2EB5B, 0x7CB8F105, 0x7AA38B7C, 0xB8FD1B5B, 0x0EB4DCA0, 0xB516AE4A, 0x61061288,
+0x13CF4E2C, 0xE0D2D218, 0x641C2EA8, 0x0810D9B9, 0xE9A51A54, 0xA3E41E40, 0xFE702981, 0xA1B8F354,
+0x128C4E44, 0x062659EB, 0x873A928A, 0xBA1C46EF, 0x26C34637, 0x78B2D337, 0x614078B0, 0xC2F79E70,
+0x6C2DAAB5, 0xD3EFAF99, 0x6E83591F, 0x14BC5C80, 0xD96BCB5D, 0xBC0D1588, 0x9994D4FF, 0xABEA5A5F,
+0x37DC0547, 0x56A71307, 0x8E4D4A65, 0x0767D446, 0x94990CEF, 0x7DBE8230, 0xC063E3AE, 0x057726DA,
+0xE4D8CCEE, 0xA714D42F, 0x1140BF42, 0x409D0987, 0xC84722B8, 0x1F2FB59B, 0xB9CD9BF0, 0x29A33DFA,
+0xF8AC31AE, 0x05457C68, 0xEE3EB76E, 0xD163A9DA, 0xBE6BF0D4, 0x5A8616F9, 0x545B68C9, 0x120E9972,
+0xCCC19BED, 0x255EFD86, 0xC60FDF6F, 0x044EEDBA, 0x5F17A10A, 0x7EB6A3B7, 0x62135187, 0x71CDB472,
+0x9CE4C789, 0x714453F3, 0xCE593514, 0x9B527E5E, 0x5D3E21CE, 0x3D4FDB90, 0x4576C774, 0x67ED805D,
+0x61D5847F, 0xDBCFB12E, 0x4E0CC524, 0xB3D92BF4, 0x9E37A38F, 0x32412F0B, 0x3B9D1043, 0x45C85C10,
+0x3BD1A515, 0x19FD9668, 0xDC56254C, 0x411978F2, 0x2EA0560C, 0xFD04A4FE, 0x1F9E8474, 0x4544A2D2,
+0xEEFDA116, 0x6DD2BCE1, 0x6690D499, 0xEA8A0669, 0xA7271868, 0x4626A9D9, 0xE741923F, 0xB68F2ADF,
+0x1F234011, 0xFF29768E, 0xFCF5D15D, 0xEB4E8253, 0x33B5F3E0, 0xE80728DE, 0x6B261BA7, 0x005BA67D,
+0x11EECC54, 0x03FDA702, 0x13F53F65, 0x20F1401D, 0x286D4059, 0xBA6B8A7D, 0x4A6411DA, 0x0A20F086,
+0xBF471544, 0xAD32D9D6, 0xFACF6642, 0x8920FC6C, 0x29039AF7, 0x1E7B95CC, 0xAFFC82B8, 0x9F8F2B7B,
+0x575D5C7C, 0x540F3B73, 0x41101C3F, 0x63984069, 0x0F165A68, 0x1A944AE5, 0x1FBC7092, 0x8444DACE,
+0xFBA7388E, 0xF6DB0446, 0x067DF1E5, 0x94232D00, 0x5FD1940E, 0x3F3407FC, 0x709E2FC2, 0x97056DA8,
+0xF7AD2367, 0xE28A66FC, 0x2BB2A05D, 0xAA7331B2, 0x9B377EA7, 0x8B261806, 0x4729210E, 0x707855AE,
+0xCB3305D5, 0xA5BA8A25, 0xB102B865, 0xF6ACC915, 0xCFBBBB1D, 0xF7A3D1AB, 0x9C0A2AEC, 0x9AAB192A,
+0x567EF3B7, 0xC94ED2CF, 0x6D66067E, 0xF47983B7, 0x3C440BD6, 0xFF5DA5B8, 0xFB577C5A, 0x5BE08925,
+0x11A02141, 0x4D725EA0, 0xD68ADB69, 0xA2EB6B60, 0x568D2AA1, 0x981BE08B, 0xB2B33D13, 0x546B44C5,
+0xE76BF4F6, 0xCB5018C9, 0x506645CE, 0x231A95C7, 0x500FF67E, 0xFC652ABC, 0xDEB37B2C, 0xFB5FEAB7,
+0xBBDC28C4, 0x4EF10EA4, 0x674FFA04, 0x41A2E9B7, 0x06ADE38D, 0x2E9CD55D, 0x2312B550, 0x86EE49B5,
+0xA339C9F2, 0x7309C7B7, 0xD0BE4ED0, 0xD3D882B1, 0xED0C2E1D, 0x30E5DA36, 0x5E500A54, 0x70773D2F,
+0x51AC33D8, 0xA6CCCB21, 0x38C7B329, 0xB72F3DF4, 0x4FD2A223, 0x7D54A3E4, 0xC1A0405A, 0x278C4E5E,
+0x147527AD, 0xB3D23DD5, 0x28C1153B, 0xCF046310, 0xB8824B43, 0xD6B99F2F, 0x11716863, 0xF52244F5,
+0xA2D2892A, 0x3898E03A, 0x4E8AAEF4, 0x1F35150B, 0xC40C85C7, 0x278E4CDE, 0xABA76BB5, 0x1ED8CD03,
+0xAE50C0BD, 0xC1F6B5C0, 0x612BF29B, 0xAF04116D, 0x0A0BDBBD, 0x13DD7603, 0xFA520AB8, 0xAF366247,
+0x59518452, 0x787FAAA9, 0xE6B26149, 0xE584C0E3, 0x5142AFE7, 0x06340D06, 0xC3394302, 0x755D1D66,
+0x81A3DA4D, 0xCA9A01CE, 0x7D808FB6, 0x9B521E91, 0x050AF792, 0x5EB03721, 0xF71C9310, 0x1588F196,
+0x68CA25D6, 0x5EC2BF29, 0x0216A510, 0x071D0ED8, 0x14AD0E0B, 0xCA229A85, 0x4F13119B, 0xAA572358,
+0xF602E1C1, 0xF4131626, 0x747F4DD6, 0x68BC1D8A, 0xF859A58B, 0x89215DB6, 0x6DBCBD21, 0xD380D013,
+0x32DF7DAD, 0x4D0E7C91, 0xCD8A4D60, 0x5D96610A, 0x2F0D0960, 0x316ABFF7, 0x3BC5FA4C, 0x14A3CF2C,
+0x8A153A1A, 0x2870CF55, 0x0E9FA8EC, 0x3756E2F8, 0xADA02437, 0xD0676072, 0xCE8AAD88, 0xD0378108,
+0xB6DECFBB, 0x4B416368, 0x81D5FE74, 0x2F204FF9, 0x2B2B520E, 0x7C26385A, 0x549E057C, 0xBCDCC81B,
+0xAD1D8630, 0x95BFD88C, 0xDA4F1086, 0xEAFC162A, 0x2D130AB5, 0x34663942, 0xEC553367, 0x6916CC61,
+0xAE36D16F, 0x98FDBFD8, 0x34961045, 0x9AB0F7B1, 0x01E7DBA2, 0xD2EA4862, 0x22F1F602, 0xC06849B9,
+0x2B32985A, 0x7D6DBDD5, 0x4B069666, 0x7AB33A9D, 0x6C65F10B, 0x2DC8D145, 0xBC803BFD, 0xBBA97E95,
+0xBA78A360, 0x700D784D, 0xB2829C9D, 0x3D3A862C, 0x70B3AD89, 0xC687C83D, 0xA3C41719, 0x007219B0,
+0x5DB76593, 0xB02804D0, 0x1DB48EF2, 0xAD213485, 0xF6ED5385, 0xFFA5E961, 0xBF034957, 0xF1A629D7,
+0xF3E6D3A2, 0xB2077771, 0x6600CAA0, 0x08014A62, 0x26E16FAC, 0xF455176A, 0xA26E4B8C, 0x1C60D8D7,
+0xA1DB4B95, 0xD0EDF137, 0x85150791, 0x9A88BFE4, 0x6FF50DE1, 0xCC7F8D5C, 0xEBBD7552, 0x2FC83CD2,
+0xC524687B, 0x0BFCA5EB, 0xB2A60EBC, 0xC08EF816, 0x68B96617, 0xA7FFF8E1, 0xA85D57C7, 0xBBADDFF0,
+0x52519496, 0x5251FC13, 0xC4CEA0FF, 0x27E06771, 0xBF1A9964, 0x2618F9A8, 0x54CFE977, 0xF325CCDD,
+0x5F1F4017, 0xC16F50FF, 0x1CA4D98F, 0x1DA107D7, 0x1F7EF04E, 0xBDA4D86A, 0xCF748C69, 0x0BE8B6C7,
+0x7FBF325A, 0xA5EE15CD, 0xF3FAF33F, 0x19B90B23, 0x0CE4FD63, 0x882009B3, 0x6C781DF4, 0xB02B86CA,
+0xA272B039, 0x62CD9C74, 0x9B2C2CE3, 0xB1EB9CC6, 0x25C8C3E8, 0xED01FCF0, 0xEC31DE19, 0x1CC88913,
+0x5DF560D5, 0x91749BDD, 0x10CC46BB, 0xF46BD60A, 0x078B76B5, 0xAAB5C3E9, 0x60CA8EF9, 0xC6D3EEE8,
+0x9D074245, 0x2C3D5D1C, 0x714345B0, 0xC4FC7D5E, 0x41AD6820, 0x567B7382, 0x5665DE0B, 0xDC030FB7,
+0x978AA503, 0x3A42A120, 0x98C84797, 0x478461CB, 0xE5A44B0E, 0x1B19283D, 0x8F6FF924, 0x3CC9C5A5,
+0x0066FDC5, 0x533E6B43, 0x98821864, 0xE0E59E98, 0xDE121AE1, 0x9FEADBD2, 0xA9EEE36B, 0xA4B36B2A,
+0x2F45AFDA, 0x950D3FF2, 0x0E867090, 0x3024FA4D, 0x78C2C934, 0xC1600CD3, 0x5415DD7B, 0x67A44995,
+0x8A8A53E1, 0xCE95BB4D, 0x9B66BA28, 0x3D8C9876, 0x7299D3F9, 0xAF50FD77, 0x0EB94542, 0xC4001006,
+0x05C8E75B, 0x5355BC54, 0x2DB73C63, 0x9D923898, 0x92BC7511, 0x86CC56AC, 0xED93574D, 0x36CC4CC4,
+0xE8362989, 0xB7C92660, 0x7F854BE9, 0xC3214180, 0x1BBDEB13, 0x58F33CCD, 0x2F83CBF7, 0x732A0EDD,
+0x63BC358F, 0xA66D6AE2, 0x82BF9F19, 0x4B096252, 0x036D66ED, 0x6C98EE11, 0x687CCDD2, 0x7495C374,
+0xB90C489C, 0x1688D94B, 0xECFF0BCE, 0xA3185401, 0xCB6FAEEE, 0xFBCECE2F, 0xB2A3B461, 0x8C739F4A,
+0xEFDD98B6, 0x89075340, 0xC31C7226, 0xD269DD8E, 0x53FCB36F, 0x796E1C3D, 0xD33E0D30, 0xD4D941B0,
+0xBE033E0E, 0x4636FF78, 0x34A9BE67, 0x842FE639, 0xC71CCC14, 0xC17276FB, 0xFD74422D, 0x4C1DCAAD,
+0x814B0E6E, 0x1C0E0A0F, 0x04A0ACAE, 0xBED3D8B1, 0x84DF92B8, 0x519D9670, 0x7157E2CA, 0xA3BA65AA,
+0x9ED809FF, 0xFDD88464, 0xC4FFECE7, 0x06332FD2, 0xC8807C6D, 0xA41AA69A, 0xFC66E534, 0x139FA663,
+0x3662C32A, 0xA669A93E, 0xFAB2C6A5, 0xCDB799F9, 0x03105F03, 0x49ABDCCA, 0x97BDB5B4, 0x6B91E34E,
+0xEFE63394, 0xED76E2EA, 0x9A5523D1, 0x12384C0B, 0x05112E66, 0x8B6B2605, 0xFD4CEFFA, 0x00000080,
diff --git a/board/rda/common/include/coda960_fw.h b/board/rda/common/include/coda960_fw.h
new file mode 100644
index 0000000000..2f9c868bf6
--- /dev/null
+++ b/board/rda/common/include/coda960_fw.h
@@ -0,0 +1,15880 @@
+#ifndef __CODA960_FW_H__
+#define __CODA960_FW_H__
+
+static const unsigned short bit_code[] = {
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c1e, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1857, 0xf074, 0xe009, 0x00ff, 0x1a58, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x0c5c, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x036a, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0370,
+ 0xe40e, 0x0374, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x0398, 0xe40e, 0x00a4,
+ 0xe41e, 0x03b9, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x0378,
+ 0xe41e, 0x0fee, 0xe41e, 0x0458, 0xe41e, 0x0feb, 0xe41e, 0x02ad,
+ 0xe40e, 0x00a4, 0xe41e, 0x0378, 0xe41e, 0x0543, 0xe40e, 0x00a4,
+ 0xe41e, 0x0548, 0xe40e, 0x00a4, 0xe41e, 0x0579, 0xe40e, 0x00a4,
+ 0x2811, 0xa184, 0x2a24, 0xa805, 0xe056, 0xe428, 0xe0c0, 0x0040,
+ 0xa215, 0xae17, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe167, 0x05cb, 0xe166, 0x0064,
+ 0xd022, 0x0003, 0xe184, 0x0396, 0x9e16, 0x3517, 0x3d17, 0xe42e,
+ 0xa200, 0x3c86, 0x3cad, 0x3cbe, 0xe41e, 0x0429, 0xe41e, 0x0566,
+ 0xe41e, 0x0686, 0xe41e, 0x0904, 0xe41e, 0x03ba, 0xf0dd, 0xe41e,
+ 0x08bd, 0xe41a, 0x03f9, 0xa2fe, 0x3c10, 0x3c83, 0xe41e, 0x052f,
+ 0xf03a, 0xa202, 0x3c86, 0xe41e, 0x0b38, 0xe41e, 0x06f6, 0xe16a,
+ 0xe42e, 0xe42e, 0xa23e, 0x3cf0, 0xe41e, 0x08bd, 0xe408, 0x03d3,
+ 0xe41e, 0x0b72, 0xa10e, 0xf13a, 0xa104, 0xf2ba, 0xa102, 0xf05a,
+ 0xf04a, 0xe41e, 0x0951, 0xf6fe, 0xe41e, 0x08bd, 0xe408, 0x03d3,
+ 0xe41e, 0x098a, 0xf68e, 0xe41e, 0x01db, 0xf22e, 0xe41e, 0x1459,
+ 0xe41e, 0x098a, 0xa2fe, 0x3c10, 0xe41e, 0x1a99, 0xf5ca, 0x2800,
+ 0x3c10, 0xe41e, 0x1ab1, 0xe092, 0xa200, 0xe41e, 0x0c40, 0xa200,
+ 0x3c9b, 0xe41e, 0x141e, 0xa2fe, 0x3c10, 0xe082, 0xf096, 0xe42e,
+ 0xe41e, 0x1460, 0xe41e, 0x1459, 0xe41e, 0x0951, 0xf44e, 0xe16b,
+ 0xe42e, 0xe41e, 0x0b72, 0xf0da, 0xa102, 0xe40a, 0x0412, 0xa108,
+ 0xf084, 0xf11a, 0xa108, 0xf0f6, 0xa102, 0xf06a, 0xa102, 0xf04a,
+ 0xe41e, 0x0951, 0xf6fe, 0xe41e, 0x08bd, 0xe408, 0x0412, 0xe41e,
+ 0x098a, 0xf68e, 0xe42e, 0xa200, 0xe161, 0x0100, 0xe188, 0x0aff,
+ 0x3d11, 0xe0c0, 0x0041, 0xe005, 0x0034, 0xae11, 0xe042, 0xce20,
+ 0xd111, 0x0100, 0xd112, 0x0180, 0xd113, 0x0002, 0xca28, 0xf7f8,
+ 0xe42e, 0xe41e, 0x0413, 0xe41e, 0x0222, 0xe41e, 0x0148, 0xa204,
+ 0x3cae, 0xe16a, 0xd130, 0x0000, 0xd03a, 0x0000, 0xd04c, 0x0000,
+ 0xd008, 0x0000, 0xd022, 0x0000, 0xa200, 0xe0c2, 0x0100, 0xe0c2,
+ 0x0128, 0xa2fe, 0x3c25, 0x3c26, 0x3c27, 0x3c28, 0x3c10, 0x3c29,
+ 0x3c56, 0xe161, 0x05c7, 0x3511, 0x3d11, 0x3511, 0x3d11, 0xe41e,
+ 0x0c2b, 0xe41e, 0x1a88, 0xe41e, 0x1f23, 0xe41e, 0x1607, 0xe42e,
+ 0xa200, 0x3c86, 0xe41e, 0x0686, 0xe41e, 0x1a4b, 0xe41e, 0x04df,
+ 0xe41e, 0x090e, 0xe41e, 0x067b, 0xe41e, 0x052f, 0xe40a, 0x04dc,
+ 0xe41e, 0x1382, 0xe408, 0x0472, 0xe41e, 0x08bd, 0xe408, 0x04dc,
+ 0xe40e, 0x04c3, 0xe41e, 0x020f, 0xe404, 0x04c3, 0xe41e, 0x067b,
+ 0xa202, 0x3c86, 0x28bd, 0xf09a, 0xe41e, 0x0672, 0xa2fe, 0x3c84,
+ 0xa202, 0x3cb4, 0xe40e, 0x04c3, 0x28a4, 0xf0b4, 0xa202, 0x3cb4,
+ 0xe41e, 0x1460, 0xe41e, 0x0672, 0xa200, 0x3c3a, 0xe40e, 0x04c3,
+ 0xe41e, 0x05d4, 0xf05a, 0xe41e, 0x05f3, 0xe40e, 0x04b5, 0xe41e,
+ 0x1a7d, 0x2884, 0xe414, 0x0672, 0x2884, 0xe404, 0x04c3, 0x2884,
+ 0xe41e, 0x1f8e, 0xe41e, 0x20e9, 0xe41e, 0x05c7, 0x28a5, 0xf0e8,
+ 0x2a4e, 0x4e40, 0x2884, 0xe41b, 0x1f29, 0x284e, 0xe418, 0x1bc2,
+ 0x2840, 0xe41a, 0x18cf, 0x287e, 0x3c82, 0x2840, 0xf058, 0xe41e,
+ 0x0655, 0xe41e, 0x065a, 0xe41e, 0x065f, 0x2840, 0xaa02, 0x443f,
+ 0xf03a, 0xe40e, 0x0468, 0xe41e, 0x20d0, 0xe41e, 0x1460, 0xe41e,
+ 0x08d7, 0xf04a, 0xe41e, 0x19fe, 0x3ce9, 0xe41e, 0x18f8, 0x3c85,
+ 0x2885, 0x3c56, 0x2884, 0xf024, 0x3c83, 0xe41e, 0x06f6, 0xe41e,
+ 0x1a66, 0xe41e, 0x0b38, 0xe42e, 0xa202, 0x3c86, 0xf65e, 0xa200,
+ 0xcc4a, 0xcc4c, 0x3c53, 0x3c62, 0x3cbd, 0x3cae, 0x3cb4, 0x3ca5,
+ 0x3c97, 0x28ad, 0xe41a, 0x064c, 0xe41e, 0x0655, 0xe41e, 0x065a,
+ 0xe41e, 0x065f, 0xa2fe, 0x3cba, 0x3cbb, 0x3cb9, 0xa200, 0x3cbc,
+ 0xa2fe, 0x3ca4, 0xa204, 0x3cf0, 0xa2fc, 0x3c84, 0xa2fa, 0x3c85,
+ 0xa2fe, 0xc009, 0x3c3f, 0x3c40, 0x3c41, 0x3c42, 0xc000, 0xe42e,
+ 0x2811, 0xa184, 0xf068, 0x2824, 0xa804, 0xf038, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0xa200, 0xcc44, 0xd152, 0x0000, 0xd130, 0x0000,
+ 0xd1e0, 0x0003, 0xd1ff, 0x03b0, 0xd1fd, 0x03d0, 0xd199, 0x0224,
+ 0xd1fc, 0x0720, 0xd03a, 0x0000, 0xd04c, 0x0000, 0xd008, 0x0000,
+ 0xd14b, 0x0200, 0x28b1, 0xcfce, 0xe41e, 0x025f, 0xe42e, 0xe0c0,
+ 0x0059, 0xa102, 0xf0da, 0xe41e, 0x08bd, 0xf04a, 0xe41e, 0x01db,
+ 0xf09e, 0xe41e, 0x1f66, 0x2a84, 0xb7f5, 0x3e84, 0xf03a, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xe41e, 0x0686, 0xe41e, 0x207b, 0xe42e,
+ 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113,
+ 0x0013, 0xca28, 0xf7f8, 0xe0c0, 0x0061, 0xe41e, 0x0c09, 0xa202,
+ 0xe41e, 0x0c13, 0xe41e, 0x0a10, 0xe128, 0xe0c0, 0x0060, 0xf048,
+ 0xe41e, 0x1a99, 0xf03e, 0xe41e, 0x1ac4, 0xe42e, 0xe0c0, 0x0040,
+ 0xa201, 0xae17, 0xe042, 0xe005, 0x4f00, 0xae03, 0xe042, 0xce20,
+ 0xd111, 0x0450, 0xd112, 0x00c8, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0xe42e, 0xe180, 0xa2fe, 0x3c29, 0x3c10, 0xe41e, 0x1f23, 0xe41e,
+ 0x05b7, 0x2821, 0xf05a, 0x2816, 0xa104, 0xf02a, 0x28ea, 0x3ce9,
+ 0xa200, 0x3c81, 0x3ce7, 0x3ce6, 0x3ce8, 0x3ce5, 0xe166, 0x05ab,
+ 0xc710, 0x3d16, 0xe167, 0x0518, 0xe166, 0x0054, 0xa200, 0x3cb2,
+ 0x287f, 0xa102, 0xcc44, 0xe184, 0x05a4, 0x9e06, 0x5cb2, 0xa802,
+ 0xb690, 0x3d17, 0x28b2, 0xa002, 0x3cb2, 0xe190, 0xa200, 0x3c60,
+ 0xe41e, 0x0c40, 0xe42e, 0x24b5, 0x4cb6, 0xce20, 0xd111, 0x0600,
+ 0xd112, 0x0004, 0xd113, 0x0000, 0xca28, 0xf7f8, 0xe42e, 0xe161,
+ 0x0200, 0xa200, 0xc73f, 0x3d11, 0x3cb2, 0xd022, 0x001f, 0xe184,
+ 0x05c5, 0xe41e, 0x1f29, 0x28b2, 0xa002, 0x3cb2, 0xe42e, 0x2abc,
+ 0x4e4f, 0x3ebc, 0x28a1, 0x3cb9, 0x2a3f, 0xf06b, 0x2a42, 0xf039,
+ 0x3cba, 0xf02e, 0x3cbb, 0xe42e, 0x28a5, 0xf1c8, 0x28a5, 0xe016,
+ 0x4440, 0xf168, 0xe41e, 0x0634, 0xf07a, 0xe41e, 0x0639, 0xf07a,
+ 0x284f, 0xf0e8, 0xf0fe, 0xe41e, 0x063e, 0xf04a, 0x2838, 0xf0a8,
+ 0xf07e, 0xe41e, 0x0645, 0xf04a, 0x284e, 0xf04a, 0xf01e, 0xa200,
+ 0xe42e, 0xa202, 0xe42e, 0xa202, 0x3ca5, 0x2884, 0xe412, 0x1f29,
+ 0x2884, 0xe412, 0x1f30, 0x2884, 0xe412, 0x1f37, 0xa2fc, 0x3c84,
+ 0x3c3e, 0xe41e, 0x0608, 0xe41e, 0x0b21, 0xe41e, 0x090e, 0xe42e,
+ 0xe41e, 0x0b72, 0xf15a, 0xa102, 0xf17a, 0xa108, 0xf114, 0xf14a,
+ 0xa102, 0xf0da, 0xa102, 0xf0ba, 0xa102, 0xf09a, 0xa102, 0xf07a,
+ 0xa104, 0xf056, 0xa102, 0xf04a, 0xa10e, 0xf022, 0xe42e, 0xe41e,
+ 0x0951, 0xe40e, 0x0608, 0xcaa2, 0xaf0a, 0xa806, 0x184e, 0xf0a8,
+ 0xe41e, 0x098a, 0xe41e, 0x22e7, 0xf5ca, 0x2894, 0xf5aa, 0xe41e,
+ 0x0b69, 0xe41e, 0x0b21, 0xe42e, 0xe0c0, 0x0065, 0xaf04, 0xa802,
+ 0xe42e, 0xe0c0, 0x0065, 0xaf16, 0xa802, 0xe42e, 0xe0c0, 0x0065,
+ 0xaf06, 0xa806, 0xa102, 0xe016, 0xe42e, 0xe0c0, 0x0065, 0xaf06,
+ 0xa806, 0xa104, 0xe016, 0xe42e, 0xe41e, 0x0b21, 0xe0c0, 0x0048,
+ 0xc009, 0x3433, 0x3c34, 0xc000, 0xe42e, 0xc009, 0x2433, 0x4c34,
+ 0xc000, 0xe42e, 0xc009, 0x3435, 0x3c36, 0xc000, 0xe42e, 0xe41e,
+ 0x0b21, 0xe0c0, 0x0048, 0xc009, 0x3437, 0x3c38, 0xc000, 0xe42e,
+ 0xc009, 0x2435, 0x4c36, 0xc000, 0xe42e, 0xc009, 0x2437, 0x4c38,
+ 0xc000, 0xe42e, 0xe41e, 0x0b69, 0x28ad, 0xe42a, 0xe41e, 0x0655,
+ 0xe0c2, 0x0048, 0xe42e, 0xe41e, 0x1fed, 0xe41e, 0x2020, 0xe41e,
+ 0x0512, 0xe41e, 0x247d, 0xe41e, 0x2080, 0xe42e, 0xe0c0, 0x0059,
+ 0xa102, 0xf2ca, 0xa102, 0xe42a, 0xa102, 0xf05a, 0xa102, 0xe40a,
+ 0x06cc, 0xe42e, 0xe0c0, 0x006b, 0x34b5, 0x3cb6, 0xe0c0, 0x006c,
+ 0x34b7, 0x3cb8, 0xe0c0, 0x0060, 0xaf08, 0x3088, 0xe0c0, 0x0060,
+ 0xa81e, 0x3c87, 0xe0c0, 0x0061, 0xa83e, 0x3c8a, 0xe0c0, 0x0065,
+ 0xa840, 0xf0ba, 0xa200, 0xe167, 0x0600, 0xc703, 0x3d17, 0xe41e,
+ 0x05ab, 0xe004, 0x0088, 0x3ca7, 0xe42e, 0xc001, 0xe0c0, 0x0060,
+ 0x3400, 0x3c01, 0xe0c0, 0x0061, 0xae14, 0x3406, 0x3c07, 0xc000,
+ 0xe0c0, 0x0062, 0xaf02, 0x3021, 0xaf02, 0x30aa, 0xa200, 0xe0c0,
+ 0x0067, 0xa802, 0x3cb1, 0xe42e, 0xe41e, 0x038c, 0xe41e, 0x0174,
+ 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0640, 0xd112, 0x00c0, 0xd113,
+ 0x0003, 0xca29, 0xf7f9, 0xa200, 0xe41e, 0x0f91, 0xe004, 0x0040,
+ 0xe41e, 0x0f91, 0xe0c0, 0x0060, 0x3c7f, 0xe0c0, 0x0061, 0x3c66,
+ 0xe0c0, 0x006e, 0xe41e, 0x020a, 0xe167, 0x05fd, 0xe0c0, 0x0062,
+ 0x3517, 0x3d17, 0xe0c0, 0x0063, 0x3d17, 0xe42e, 0xe0c0, 0x0059,
+ 0xa102, 0xe40a, 0x0797, 0xa102, 0xe42a, 0xa102, 0xf05a, 0xa102,
+ 0xe40a, 0x0804, 0xe42e, 0x2861, 0xae04, 0x4c91, 0xae02, 0x4c90,
+ 0xe0c2, 0x0060, 0xc009, 0x203f, 0x4c40, 0xe0c2, 0x0061, 0x2041,
+ 0x4c42, 0xc000, 0xe0c2, 0x0062, 0xe41e, 0x1612, 0xe0c2, 0x0067,
+ 0xe41e, 0x1617, 0xe0c2, 0x0068, 0xe41e, 0x161c, 0xe0c2, 0x0069,
+ 0xe41e, 0x1607, 0x2a23, 0xe41b, 0x0846, 0x2a3f, 0xe419, 0x0846,
+ 0xae02, 0x4c23, 0xe0c2, 0x006a, 0x283f, 0xf0ba, 0xc009, 0x203b,
+ 0x4c3c, 0xe0c2, 0x006b, 0x203d, 0x4c3e, 0xe0c2, 0x006c, 0xc000,
+ 0x2072, 0x4c73, 0xe0c2, 0x006c, 0xe41e, 0x1463, 0xe0c2, 0x007b,
+ 0x2057, 0x4c58, 0xae08, 0xe0c2, 0x006f, 0x28b0, 0xe0c2, 0x007a,
+ 0x2054, 0x4c55, 0xa002, 0x3454, 0x3c55, 0xe0c2, 0x0070, 0x2885,
+ 0xe0c2, 0x0071, 0x2c53, 0xe0c2, 0x0072, 0xe41e, 0x0805, 0xe0c2,
+ 0x0073, 0xa200, 0xe0c2, 0x0074, 0x2886, 0x2ab4, 0xae21, 0xe056,
+ 0x2aae, 0xae23, 0xe056, 0x2abd, 0xae29, 0xe056, 0xe0c2, 0x0076,
+ 0xe41e, 0x0668, 0xe0c2, 0x0051, 0xe41e, 0x066d, 0xe0c2, 0x0052,
+ 0x2884, 0xe0c2, 0x0077, 0x2a22, 0xe161, 0x05e4, 0x2111, 0x4d11,
+ 0xf02b, 0xae02, 0xe0c2, 0x0078, 0x2111, 0x4d11, 0xf02b, 0xae02,
+ 0xe0c2, 0x0079, 0x2025, 0x4c26, 0xe0c2, 0x007c, 0xe167, 0x05c7,
+ 0x2117, 0x4d17, 0xe0c2, 0x007e, 0x2117, 0x4d17, 0xe0c2, 0x007d,
+ 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xe42e, 0xe41e,
+ 0x1463, 0xe0c2, 0x0063, 0x2a23, 0xe41b, 0x0846, 0x2a3f, 0xe419,
+ 0x0846, 0xae02, 0x4c23, 0xe0c2, 0x0064, 0x2027, 0x4c28, 0xe0c2,
+ 0x006d, 0x2886, 0xe0c2, 0x0070, 0x2057, 0x4c58, 0xae08, 0xe0c2,
+ 0x0071, 0x2025, 0x4c26, 0xe0c2, 0x0072, 0x2821, 0xf0ca, 0x2816,
+ 0xa104, 0xf09a, 0x28eb, 0x3cb3, 0xa004, 0xe0c2, 0x0073, 0x28ea,
+ 0x3ce9, 0xf07e, 0x2819, 0xa004, 0xe0c2, 0x0073, 0xa200, 0x3ce9,
+ 0x28e9, 0xe0c2, 0x0074, 0xa200, 0xe0c2, 0x0075, 0x2a22, 0xe161,
+ 0x05e4, 0x2111, 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0076, 0x2111,
+ 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0077, 0x2886, 0xe016, 0x58f0,
+ 0xe0c2, 0x0078, 0xe161, 0x05c7, 0x2111, 0x4d11, 0xe0c2, 0x007a,
+ 0x2111, 0x4d11, 0xe0c2, 0x0079, 0xe41e, 0x1463, 0xaf32, 0xa802,
+ 0xae0c, 0x2a24, 0xae05, 0xe056, 0x4c1d, 0xae02, 0x2a1b, 0xe017,
+ 0xe056, 0xae10, 0x4c1f, 0xae10, 0x4c11, 0x2a19, 0xe01b, 0xae3f,
+ 0xe056, 0xe0c2, 0x007b, 0xe42e, 0xe42e, 0x2885, 0xe41e, 0x25f3,
+ 0xe092, 0x2842, 0xe016, 0x5440, 0x443f, 0x3c00, 0xa200, 0x2a40,
+ 0xf079, 0x2aa4, 0xf053, 0x2ab9, 0xa80f, 0xe056, 0xf12e, 0x2a00,
+ 0xf09b, 0x2aba, 0xa80f, 0xae07, 0xe056, 0x2abb, 0xa80f, 0xe056,
+ 0xf08e, 0x2abb, 0xa80f, 0xae07, 0xe056, 0x2aba, 0xa80f, 0xe056,
+ 0x3c01, 0x28a3, 0x2a23, 0xe41b, 0x0846, 0x2a3f, 0xe419, 0x0846,
+ 0xae02, 0x4c23, 0xae0c, 0x4c00, 0xae04, 0x4c43, 0xae02, 0x4c3f,
+ 0xae24, 0x2a3f, 0xe017, 0x4e40, 0xae1f, 0xe056, 0xe083, 0xae21,
+ 0xe056, 0x2abc, 0xae0d, 0xe056, 0x4c01, 0xe42e, 0x283f, 0xe42a,
+ 0x28a4, 0xf0c2, 0xc009, 0x203b, 0x4c3c, 0x103d, 0x1c3e, 0xc000,
+ 0xf030, 0xa206, 0xe42e, 0xa208, 0xe42e, 0x2823, 0xf048, 0xa202,
+ 0x0842, 0xe42e, 0x28a3, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005,
+ 0x0018, 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100,
+ 0x88ec, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0x8917, 0x0034, 0x8917,
+ 0x0033, 0x8917, 0x0035, 0x8917, 0x0036, 0x8917, 0x0037, 0x8917,
+ 0x0038, 0x8117, 0x8117, 0x2117, 0x4d17, 0xcc60, 0x2117, 0x4d17,
+ 0xcc62, 0x2117, 0x4d17, 0xcc64, 0x2117, 0x4d17, 0xcc72, 0xe42e,
+ 0x8b17, 0x0034, 0x8b17, 0x0033, 0x8b17, 0x0035, 0x8b17, 0x0036,
+ 0x8b17, 0x0037, 0x8b17, 0x0038, 0x8117, 0x8117, 0xc860, 0x3517,
+ 0x3d17, 0xc862, 0x3517, 0x3d17, 0xc864, 0x3517, 0x3d17, 0xc872,
+ 0x3517, 0x3d17, 0xe42e, 0xc001, 0x3c13, 0xc000, 0xe42e, 0xc001,
+ 0x2813, 0xc000, 0xe42e, 0xc001, 0x3c14, 0xc000, 0xe42e, 0xc001,
+ 0x2814, 0xc000, 0xe42e, 0xc001, 0x2430, 0x4c31, 0xc000, 0xae06,
+ 0xc873, 0xe046, 0xe422, 0xe16b, 0xe42e, 0xc001, 0x280c, 0xf16a,
+ 0xe41e, 0x0b21, 0xc001, 0xe0c0, 0x0049, 0x340e, 0x3c0f, 0x240e,
+ 0x4c0f, 0xe0c1, 0x0048, 0x360e, 0x3e0f, 0x260e, 0x4e0f, 0xe045,
+ 0xa200, 0xb626, 0xe003, 0x0200, 0xb606, 0xc000, 0xe42e, 0xe41e,
+ 0x08bd, 0xe42a, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0xe42e, 0xc001,
+ 0x3c33, 0xc000, 0xe42e, 0xc001, 0x2833, 0xc000, 0xe42e, 0xc001,
+ 0x3c11, 0xc000, 0xe42e, 0xc001, 0x2811, 0xc000, 0xe42e, 0xd148,
+ 0x0040, 0xd144, 0x0000, 0xd145, 0x0000, 0xd168, 0x0000, 0xd16b,
+ 0x0000, 0xd14b, 0x0200, 0xe004, 0x0019, 0xae18, 0xcec0, 0xd14c,
+ 0x000c, 0xca9a, 0xf7f8, 0xe42e, 0xc001, 0x2400, 0x4c01, 0x0406,
+ 0x0c07, 0x3408, 0x3c09, 0xd071, 0x202a, 0xe181, 0xc001, 0xe0c0,
+ 0x0048, 0x3415, 0x3c16, 0x280c, 0xf13a, 0xe0c0, 0x0048, 0x340e,
+ 0x3c0f, 0x240e, 0x4c0f, 0xe0c1, 0x0049, 0x3604, 0x3e05, 0x1404,
+ 0x1c05, 0xe0c1, 0x0045, 0xaf05, 0xa803, 0xb611, 0x320c, 0xe0c0,
+ 0x0048, 0x3402, 0xe008, 0xfe00, 0x3c03, 0xe0c0, 0x0048, 0xe008,
+ 0x01ff, 0x3c0b, 0xa200, 0xcc78, 0xd022, 0x00ff, 0xe184, 0x0939,
+ 0xcc7a, 0xe190, 0xe41e, 0x0a10, 0xe41e, 0x0a2f, 0xe41e, 0x08ef,
+ 0xc001, 0xa200, 0x3c1a, 0x280b, 0xa102, 0xe412, 0x0959, 0xc001,
+ 0xa202, 0x3c1a, 0xa200, 0xceaa, 0xc000, 0xa200, 0xe41e, 0x0c40,
+ 0xe42e, 0xcaa0, 0xe190, 0xca9a, 0xf7f8, 0xca9c, 0xe418, 0x0a2f,
+ 0xe42e, 0xcc44, 0xe184, 0x0962, 0xca9c, 0xe418, 0x0a2f, 0xcaa0,
+ 0xca9b, 0xf7f9, 0xe190, 0xe42e, 0xe004, 0x0100, 0xceb0, 0xe004,
+ 0x00ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e, 0x0000, 0xd15f,
+ 0x0000, 0xe004, 0x0019, 0xae18, 0xe00a, 0x0620, 0xcec0, 0xd157,
+ 0x0000, 0xd14a, 0x0000, 0xd14c, 0x0003, 0xca9c, 0xe418, 0x0a2f,
+ 0xca9a, 0xf7c8, 0xcaae, 0xa802, 0xf73a, 0xca9c, 0xe418, 0x0a2f,
+ 0xa200, 0xe42e, 0xe41e, 0x0964, 0xe41e, 0x08bd, 0xf128, 0xe41e,
+ 0x0b60, 0xcaa2, 0xe008, 0x00ff, 0xe41e, 0x08a3, 0xaf0e, 0xe418,
+ 0x0951, 0xe41e, 0x08a7, 0xaf0e, 0xf6e8, 0xe41e, 0x08bd, 0xf0ea,
+ 0xe004, 0x010b, 0xe008, 0x00ff, 0xe41e, 0x08a3, 0xe004, 0x010b,
+ 0xa83e, 0xe41e, 0x08ab, 0xa200, 0xe42e, 0xe41e, 0x08a7, 0xf058,
+ 0xa204, 0xe41e, 0x0959, 0xf57e, 0xa206, 0xe41e, 0x0959, 0xe41e,
+ 0x08a7, 0xaf0a, 0x3c4e, 0xe41e, 0x08a7, 0xa83e, 0xe41e, 0x08ab,
+ 0xe41e, 0x08a7, 0xa116, 0xe42a, 0xca9c, 0xe418, 0x0a2f, 0x2a51,
+ 0xf06b, 0xe41e, 0x08af, 0xa10a, 0xe016, 0x3c4f, 0xe41e, 0x09d1,
+ 0xe42e, 0xc001, 0xa200, 0x3c30, 0x3c31, 0x3c33, 0xe41e, 0x09df,
+ 0xc001, 0xe41e, 0x0a10, 0xc001, 0xe128, 0xc000, 0xe42e, 0xc001,
+ 0x2833, 0x4411, 0xc000, 0xae0e, 0xce92, 0xd14a, 0x0000, 0xd158,
+ 0x0000, 0xe004, 0x01ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e,
+ 0x0000, 0xd15f, 0x0000, 0xd161, 0x0003, 0xe004, 0x0019, 0xae18,
+ 0xe00a, 0x0638, 0xcec0, 0xd14c, 0x0003, 0xca9c, 0xe418, 0x0a2f,
+ 0xca9a, 0xf7c8, 0xca9c, 0xf7a8, 0xca9e, 0xc001, 0x3c32, 0xcc92,
+ 0xca94, 0x0030, 0x0c31, 0x3430, 0x3c31, 0xcc90, 0xc000, 0xe42e,
+ 0xe004, 0x1495, 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd034, 0x0000,
+ 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x007f, 0xd037, 0x0000,
+ 0xd038, 0x0000, 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000,
+ 0xd046, 0x0000, 0xd047, 0x0000, 0xd149, 0x0000, 0xe42e, 0xc001,
+ 0x280c, 0xf20a, 0xe41e, 0x024f, 0xc001, 0xe004, 0x0440, 0xce50,
+ 0x280d, 0xa806, 0xa108, 0xe012, 0xa806, 0xae06, 0x3c40, 0xe004,
+ 0x010b, 0x5840, 0xce52, 0xe41e, 0x0257, 0xc001, 0xd14e, 0x0000,
+ 0xd144, 0x0000, 0x2402, 0x4c03, 0xe000, 0x0200, 0x3402, 0x3c03,
+ 0xf3ae, 0xd027, 0x0000, 0x280c, 0xe41a, 0x0a98, 0xc001, 0xd027,
+ 0x0001, 0x280d, 0xf25a, 0xca48, 0xa802, 0xf7e8, 0x2402, 0x4c03,
+ 0xce40, 0xd121, 0x0000, 0xd122, 0x0040, 0xe0c0, 0x0043, 0xa806,
+ 0xae02, 0xa032, 0xce46, 0xe190, 0xe190, 0xe190, 0xe190, 0xca48,
+ 0xa802, 0xf7e8, 0xe004, 0x0200, 0x0402, 0x0c03, 0x3402, 0x3c03,
+ 0x1408, 0x1c09, 0xf054, 0x2400, 0x4c01, 0x3402, 0x3c03, 0x280c,
+ 0xe418, 0x0adc, 0xc001, 0xe41e, 0x0b21, 0xc001, 0xd14e, 0x0000,
+ 0xd144, 0x0000, 0xc000, 0xe42e, 0xe0c1, 0x0059, 0xa103, 0xa200,
+ 0xb636, 0xe000, 0x001c, 0xe0c1, 0x0045, 0xe052, 0xe01a, 0xe42e,
+ 0xc001, 0xa200, 0x3c0a, 0xe004, 0x0200, 0x3c0d, 0xe0c0, 0x0043,
+ 0xa808, 0xf338, 0xe41e, 0x0a8c, 0xc001, 0x3c0c, 0x2402, 0x4c03,
+ 0xe0c1, 0x0049, 0x3604, 0x3e05, 0x2604, 0x4e05, 0xe045, 0xf033,
+ 0x0606, 0x0e07, 0xe003, 0x0200, 0x280c, 0xb602, 0x3c0c, 0xf1d3,
+ 0xe001, 0x0200, 0x3e0d, 0x280c, 0xf188, 0x280a, 0xe408, 0x0aa2,
+ 0xe41e, 0x01db, 0xc001, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xe40a,
+ 0x0aa2, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0x3c0a, 0xe40e, 0x0aa2, 0x280d, 0x2a0c, 0xf039, 0xe004,
+ 0x0200, 0x3c0d, 0xc000, 0xe42e, 0xc001, 0xe41e, 0x024f, 0xc001,
+ 0x280d, 0xe002, 0x0200, 0xe40a, 0x0b1e, 0x280d, 0xa806, 0xf1fa,
+ 0xa108, 0xe012, 0xae06, 0x3c40, 0x280d, 0xaf04, 0xae20, 0xe000,
+ 0x01c0, 0xce50, 0xe190, 0xca52, 0x5c40, 0x5840, 0x2a0d, 0xa807,
+ 0xae07, 0x3e40, 0xe005, 0x010b, 0x5e40, 0xe056, 0x2a0d, 0xaf05,
+ 0xae21, 0xe001, 0x0140, 0xce51, 0xe190, 0xce52, 0xe004, 0x01fc,
+ 0x180d, 0xf022, 0xf14e, 0xc001, 0x280d, 0xa006, 0xaf04, 0xae20,
+ 0xe000, 0x0440, 0xce50, 0x280d, 0xa806, 0xa108, 0xe012, 0xa806,
+ 0xae06, 0x3c40, 0xe004, 0x010b, 0x5840, 0xce52, 0xc000, 0xe40e,
+ 0x0257, 0xc001, 0xcaaa, 0x2a1a, 0xb616, 0xe0c1, 0x0048, 0x360e,
+ 0x3e0f, 0x260e, 0x4e0f, 0xe042, 0xe049, 0x1608, 0x1e09, 0xf035,
+ 0x1406, 0x1c07, 0xe0c2, 0x0048, 0xa200, 0xceaa, 0xc000, 0xe42e,
+ 0xe41e, 0x0b21, 0xe0c0, 0x0045, 0xaf04, 0xa806, 0xa104, 0xe428,
+ 0xa2fc, 0x2a84, 0xa003, 0xb616, 0xe418, 0x0b47, 0xe42e, 0xc001,
+ 0x3c40, 0xe0c0, 0x0048, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0x0840,
+ 0xe049, 0x1600, 0x1e01, 0xf033, 0x0406, 0x0c07, 0xe049, 0x1608,
+ 0x1e09, 0xf035, 0x1406, 0x1c07, 0xe0c2, 0x0048, 0xc000, 0xe42e,
+ 0xe41e, 0x0b21, 0xc001, 0xe0c0, 0x0048, 0x3417, 0x3c18, 0xc000,
+ 0xe42e, 0xa200, 0xceaa, 0xc001, 0x2417, 0x4c18, 0xc000, 0xe0c2,
+ 0x0048, 0xe42e, 0xe41e, 0x0964, 0xe41e, 0x08bd, 0xf0f8, 0xcaa2,
+ 0xe049, 0xa83e, 0xe009, 0x00ff, 0xf03b, 0xaf0f, 0xf04b, 0xe41e,
+ 0x0951, 0xf71e, 0xe41e, 0x08bd, 0xf0aa, 0xe004, 0x010b, 0xe008,
+ 0x00ff, 0xe41e, 0x08a3, 0xe004, 0x010b, 0xf02e, 0xcaa2, 0xe008,
+ 0x001f, 0xe41e, 0x08ab, 0xe41e, 0x08af, 0xe42e, 0xc001, 0x2832,
+ 0xe016, 0xc871, 0xa011, 0xf288, 0xaf07, 0xe009, 0x07ff, 0x2831,
+ 0xe008, 0x07ff, 0xe046, 0xf16a, 0xf0ee, 0xc001, 0xe161, 0x0601,
+ 0x2901, 0xc871, 0xa011, 0xaf07, 0xe009, 0x07ff, 0xe008, 0x07ff,
+ 0xe046, 0xf08a, 0xe049, 0xe011, 0xaf15, 0xf0e1, 0xf0d0, 0xa200,
+ 0xf0be, 0xc868, 0xa80e, 0xf028, 0xa210, 0x3c35, 0x7835, 0xa203,
+ 0x5a35, 0xaf03, 0xe046, 0xc000, 0xe42e, 0xc000, 0x284e, 0x2a4f,
+ 0x3c95, 0x3e96, 0xc001, 0x2831, 0x2a32, 0x3c36, 0x3e37, 0xe0c0,
+ 0x0046, 0xe005, 0x0000, 0xae11, 0xe042, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa,
+ 0xc000, 0xe42e, 0xc000, 0x2895, 0x2a96, 0x3c4e, 0x3e4f, 0xc001,
+ 0x2836, 0x2a37, 0x3c31, 0x3e32, 0xcc90, 0xcc93, 0xa200, 0x3c30,
+ 0x3c33, 0xe0c0, 0x0046, 0xe005, 0x0000, 0xae11, 0xe042, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0080, 0xd113, 0x0013, 0xca28, 0xf7f8,
+ 0xe41e, 0x0a10, 0xe128, 0xc000, 0xe42e, 0xc001, 0x2834, 0xc000,
+ 0xe42e, 0xc001, 0x3430, 0x3c31, 0xc000, 0xe42e, 0xc001, 0x2430,
+ 0x4c31, 0xc000, 0xe42e, 0xc001, 0x3c32, 0xc000, 0xe42e, 0xc001,
+ 0x2832, 0xc000, 0xe42e, 0xc001, 0x3c10, 0xc000, 0xe42e, 0xc001,
+ 0x2810, 0xc000, 0xe42e, 0xc001, 0x3c38, 0xc000, 0xe42e, 0xc001,
+ 0x2838, 0xc000, 0xe42e, 0xc001, 0xe0c0, 0x0041, 0xe005, 0x0039,
+ 0xae11, 0xe042, 0x3420, 0x3c21, 0xe004, 0x04e1, 0xae10, 0x3422,
+ 0x3c23, 0xc000, 0xe42e, 0xc001, 0x2420, 0x4c21, 0xc000, 0xe42e,
+ 0x3c63, 0xe08e, 0x3c64, 0xe41e, 0x0c4c, 0xe41e, 0x0c54, 0x2864,
+ 0xe09e, 0x2863, 0x3c60, 0xe42e, 0x2860, 0xae08, 0xe000, 0x0538,
+ 0xe09e, 0xe41e, 0x0888, 0xe42e, 0x2863, 0xae08, 0xe000, 0x0538,
+ 0xe09e, 0xe41e, 0x086d, 0xe42e, 0x2860, 0xe408, 0x1afb, 0xe41e,
+ 0x0c17, 0xf1b8, 0xe41e, 0x08e3, 0xf068, 0xe41e, 0x09df, 0xd04c,
+ 0x0000, 0xe470, 0xc896, 0xf05a, 0xe41e, 0x0c7f, 0xd04c, 0x0000,
+ 0xe41e, 0x08eb, 0xe005, 0x0080, 0xb615, 0xcc6f, 0xd04b, 0x0001,
+ 0xa202, 0xe41e, 0x0c1b, 0xe470, 0xd04c, 0x0000, 0xe470, 0xc001,
+ 0xa200, 0x3c10, 0xe41e, 0x09df, 0xc001, 0x2832, 0xcc96, 0x2811,
+ 0xe016, 0x3c11, 0xc000, 0xe42e, 0xba0c, 0xf03a, 0xbcfc, 0xe42e,
+ 0xba4c, 0xa20c, 0x3c9d, 0x289d, 0xa002, 0x3c9d, 0xa140, 0xf0d2,
+ 0xba40, 0xf7aa, 0x589d, 0xa102, 0x34ab, 0x3cac, 0x289d, 0xe41e,
+ 0x0cc9, 0x00ab, 0x0cac, 0xe42e, 0xe16b, 0xe42e, 0xba0c, 0xf03a,
+ 0xbe7e, 0xe42e, 0xba4c, 0xa20c, 0x3c9d, 0x289d, 0xa002, 0x3c9d,
+ 0xa140, 0xf162, 0xba40, 0xf7aa, 0x589d, 0xa102, 0x34ab, 0x3cac,
+ 0x289d, 0xe41e, 0x0cc9, 0x00ab, 0x0cac, 0x3cac, 0x8cac, 0x0000,
+ 0xa002, 0xaf02, 0xe012, 0xe42c, 0xe012, 0xe16a, 0xe42e, 0xe16b,
+ 0xe42e, 0xa120, 0xf050, 0xa020, 0x3c9e, 0x749e, 0xe42e, 0x3c9e,
+ 0xba5e, 0x589e, 0x769e, 0xe056, 0xe42e, 0xba40, 0xe42a, 0xc868,
+ 0xa80e, 0x3c00, 0xe016, 0xe428, 0x7400, 0xe016, 0xe42e, 0x2a38,
+ 0xa103, 0x282f, 0xe425, 0xf02b, 0x2830, 0xb7f4, 0xa002, 0x3c5e,
+ 0xa104, 0xe424, 0xf04a, 0xa25a, 0x3c5f, 0xe42e, 0xbc0e, 0x3c00,
+ 0xe42d, 0x2822, 0xf02a, 0xbc0e, 0x3c01, 0xe42d, 0x2801, 0xae06,
+ 0x4c00, 0x3c5f, 0xe161, 0x0728, 0xe164, 0x0720, 0x8848, 0x0022,
+ 0xe41e, 0x0d10, 0xe42d, 0x2838, 0xa104, 0xe428, 0x2849, 0xe161,
+ 0x0788, 0xe164, 0x0724, 0x8849, 0x0022, 0xe41e, 0x0d10, 0xe42e,
+ 0xe082, 0xa040, 0xe094, 0xa040, 0xe096, 0xe004, 0x00ff, 0x3c03,
+ 0xa200, 0x3c05, 0x3c06, 0x3c07, 0x3c08, 0x3c09, 0xe184, 0x0d5c,
+ 0xba40, 0xf0ba, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080,
+ 0x4603, 0xe056, 0x3d11, 0xf0ce, 0xa202, 0x5800, 0xae10, 0x3d11,
+ 0x2206, 0x4e07, 0xa202, 0x5805, 0xe056, 0x3406, 0x3c07, 0x2822,
+ 0xf22a, 0xba40, 0xf14a, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7,
+ 0x0080, 0x4603, 0xe056, 0x3d12, 0xe0c6, 0x0080, 0x4403, 0xae10,
+ 0xe0c7, 0x0080, 0x4603, 0xe056, 0x3d13, 0xf0de, 0xa202, 0x5801,
+ 0xae10, 0x3d12, 0x3d13, 0x2208, 0x4e09, 0xa202, 0x5805, 0xe056,
+ 0x3408, 0x3c09, 0x2805, 0xa002, 0x3c05, 0x2006, 0x4c07, 0xe014,
+ 0x3514, 0x3d14, 0x2208, 0x4e09, 0xe015, 0x3714, 0x3f14, 0xe42e,
+ 0xe0c4, 0x3fff, 0xe40d, 0x0e58, 0x3c52, 0xf048, 0xa200, 0xa2fe,
+ 0x3ca1, 0x2c52, 0xe01a, 0x4451, 0xe408, 0x0e58, 0xbc12, 0xe40d,
+ 0x0e58, 0xa10a, 0xb4a8, 0xa104, 0xe400, 0x0e58, 0xb7b4, 0xa006,
+ 0x3c38, 0x60a1, 0x3ca1, 0xbdfe, 0xe40d, 0x0e58, 0x2a51, 0xf09b,
+ 0xe049, 0x1829, 0xf06a, 0x3e29, 0xe41e, 0x1adb, 0xe40a, 0x0e58,
+ 0x7413, 0x3c39, 0xa200, 0x3c3f, 0x3c42, 0x281b, 0xf068, 0xba40,
+ 0x3c3f, 0xf03a, 0xba40, 0x3c42, 0x2851, 0xf2fa, 0x2c1e, 0x5c3f,
+ 0x3c44, 0xa200, 0x3c40, 0x283a, 0xf07a, 0xe41e, 0x0e5b, 0x3c40,
+ 0xf168, 0x283e, 0x3ca4, 0x283f, 0x3c3a, 0x284e, 0xe01a, 0x3c3b,
+ 0x2839, 0x3c3c, 0x2842, 0x3c3d, 0xa2fc, 0x3c3e, 0x284e, 0xf098,
+ 0x2850, 0x1c39, 0xf06a, 0xa202, 0x3cbe, 0xf03e, 0xa200, 0x3c3a,
+ 0x2c52, 0xf038, 0x2840, 0xf018, 0x283f, 0xe016, 0x441c, 0x3c43,
+ 0x283f, 0x0842, 0xb674, 0x3c41, 0x284f, 0xf06a, 0xe41e, 0x0c8c,
+ 0xe40d, 0x0e58, 0x3c45, 0xe41e, 0x1865, 0x2835, 0xf07a, 0xe41e,
+ 0x0c8c, 0xe40d, 0x0e58, 0xe408, 0x0e58, 0x2838, 0xa104, 0xf038,
+ 0xba40, 0x3c46, 0x282c, 0x3c48, 0x282e, 0x3c49, 0x2838, 0xf0ea,
+ 0xba40, 0xf0ca, 0xbc3e, 0x3c48, 0xe40d, 0x0e58, 0x2838, 0xa104,
+ 0xf058, 0xbc3e, 0x3c49, 0xe40d, 0x0e58, 0x2851, 0xf05a, 0xe41e,
+ 0x1baf, 0xe41e, 0x0e77, 0x2838, 0xe016, 0xe41a, 0x0e7e, 0xe40a,
+ 0x0e58, 0xe41e, 0x0cdf, 0xe40d, 0x0e58, 0x2851, 0xf06a, 0xe41e,
+ 0x172e, 0xe40a, 0x0e58, 0xf1fe, 0x284e, 0xf1da, 0x284f, 0xf04a,
+ 0xba40, 0xba40, 0xf18e, 0xba40, 0xf16a, 0xbc0c, 0xe40d, 0x0e58,
+ 0xf12a, 0xa106, 0xf08a, 0xa104, 0xf79a, 0xe41e, 0x0c8c, 0xe40d,
+ 0x0e58, 0xf74e, 0xe41e, 0x0c8c, 0xe40d, 0x0e58, 0xbc40, 0xe40d,
+ 0x0e58, 0xf6ce, 0x2838, 0xe01a, 0x442d, 0xf03a, 0xbc04, 0xf29d,
+ 0x3c47, 0xe0c6, 0x0033, 0xf25d, 0x0831, 0xa400, 0xa566, 0x3c4a,
+ 0xa200, 0x3c4b, 0x3c4c, 0x3c4d, 0x2833, 0xf10a, 0xbc04, 0xf19d,
+ 0x3c4b, 0xa102, 0xf0ba, 0xbe0c, 0xf14d, 0xae02, 0xa83e, 0x3c4c,
+ 0xbe0c, 0xf0fd, 0xae02, 0xa83e, 0x3c4d, 0x282b, 0xf01a, 0x2a43,
+ 0x2c52, 0xe419, 0x0e70, 0x3c52, 0x1c44, 0xf032, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0x284f, 0xe016, 0xe42a, 0x283f, 0xe42a,
+ 0x283a, 0xe42a, 0x283d, 0x1842, 0xe42a, 0x284e, 0xf048, 0x283b,
+ 0xe016, 0xe42e, 0x283b, 0xe42a, 0x283c, 0x1839, 0xe016, 0xe42e,
+ 0xe049, 0xc70f, 0x7e57, 0xaf21, 0xae02, 0xe046, 0xe42e, 0xd1f3,
+ 0x0000, 0xe162, 0x0370, 0x2912, 0xcfe4, 0xe42e, 0xe161, 0x0370,
+ 0x2838, 0xa102, 0xf03a, 0xe161, 0x0390, 0x2848, 0x3c04, 0xe162,
+ 0x02b0, 0xe41e, 0x0ed9, 0xe42a, 0xd1f3, 0x0000, 0xe162, 0x02b0,
+ 0x8848, 0x0022, 0xe184, 0x0e95, 0x2912, 0xcfe4, 0x2838, 0xa104,
+ 0xe428, 0x2849, 0x3c04, 0xe161, 0x03b0, 0xe162, 0x02d0, 0xe41e,
+ 0x0ed9, 0xe42a, 0xd1f3, 0x0020, 0xe162, 0x02d0, 0x8849, 0x0022,
+ 0xe184, 0x0eab, 0x2912, 0xcfe4, 0xe41e, 0x0fcc, 0xe162, 0x02d0,
+ 0x2902, 0xe41e, 0x0f8a, 0xe41e, 0x0fae, 0x3470, 0x3c71, 0x2902,
+ 0xae02, 0xe000, 0x0260, 0xe09e, 0x2117, 0x4d17, 0x2317, 0x4f17,
+ 0x1072, 0x1c73, 0x1272, 0x1e73, 0xe010, 0xe011, 0xe046, 0xb624,
+ 0xb608, 0x3c7a, 0x2902, 0xe41e, 0x0f83, 0xa102, 0xb628, 0x3c78,
+ 0x2902, 0xaf02, 0xe000, 0x02a0, 0xe09e, 0x2907, 0x3c79, 0xa202,
+ 0xe42e, 0xe082, 0xe098, 0xba40, 0xf098, 0x8804, 0x0022, 0xe184,
+ 0x0ee2, 0x2911, 0x3d12, 0xa202, 0xe42e, 0x286d, 0xe082, 0x3c08,
+ 0x2014, 0x4c15, 0x583f, 0x3400, 0x3c01, 0x2c39, 0x583f, 0x083f,
+ 0x3402, 0x3c03, 0x2804, 0x3c05, 0xe163, 0x0600, 0xa200, 0xc71f,
+ 0x3d13, 0xbc06, 0xe40d, 0x0f44, 0xf06a, 0xa102, 0xf13a, 0xa102,
+ 0xf1ba, 0xf31e, 0xe41e, 0x0c8c, 0xe40d, 0x0f44, 0xa002, 0x1002,
+ 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01, 0x3402, 0x3c03, 0xa203,
+ 0xf0de, 0xe41e, 0x0c8c, 0xe40d, 0x0f44, 0xa002, 0x0002, 0x0c03,
+ 0x1000, 0x1c01, 0xf70e, 0xbc40, 0xa2ff, 0x3c0f, 0xe41e, 0x0f53,
+ 0xf082, 0xa203, 0x283f, 0xf03a, 0x2a0f, 0xa803, 0x2904, 0xe046,
+ 0x3d12, 0xe41e, 0x0f6e, 0x2805, 0xa102, 0x3c05, 0xa004, 0xe42a,
+ 0xe40e, 0x0ef9, 0x2808, 0xa102, 0xe092, 0xe163, 0x0600, 0x2805,
+ 0xf0a4, 0x2913, 0x8111, 0xf7e8, 0x2901, 0x3d12, 0x2805, 0xa102,
+ 0x3c05, 0xf76e, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x2884,
+ 0xe424, 0xe0c2, 0x020b, 0xe0c2, 0x0214, 0x2884, 0xe41e, 0x0fae,
+ 0x346e, 0x3c6f, 0xe42e, 0x3c06, 0x3e07, 0xe163, 0x0330, 0x2819,
+ 0xa102, 0xe424, 0xae02, 0xa002, 0xcc44, 0xe184, 0x0f6b, 0x2d13,
+ 0x2b0b, 0x1c06, 0x1a07, 0xf078, 0xf069, 0xe086, 0xe002, 0x0330,
+ 0xaf02, 0xe42e, 0x8113, 0x8113, 0xa2fe, 0xe42e, 0x3c09, 0x2808,
+ 0xe092, 0x286d, 0xa102, 0xcc44, 0xe184, 0x0f79, 0x2901, 0x1809,
+ 0xf03a, 0x8111, 0xe42e, 0xe082, 0x1808, 0xe000, 0x0600, 0xe096,
+ 0xa202, 0x3d03, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0201, 0xe09e,
+ 0x2907, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0203, 0xe09e, 0x2907,
+ 0xe42e, 0x3c0a, 0xe0c0, 0x0042, 0xe000, 0x0180, 0x080a, 0xa207,
+ 0xe41e, 0x0fa5, 0xe0c0, 0x0041, 0xe005, 0x006c, 0xae0f, 0x0a0a,
+ 0xe042, 0xa205, 0xe41e, 0x0fa5, 0xe42e, 0xce20, 0xd111, 0x0600,
+ 0xd112, 0x0020, 0xce27, 0xca28, 0xf7f8, 0xe42e, 0x3c0a, 0xaf02,
+ 0xae06, 0xe0c1, 0x0041, 0xe042, 0xe005, 0x006c, 0xae0f, 0xe042,
+ 0xce20, 0xd111, 0x0600, 0xd112, 0x0004, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe004, 0x0600, 0xe09e, 0x2117, 0x4d17, 0x2a0a, 0xa803,
+ 0xe42b, 0x2117, 0x4d17, 0xe42e, 0xe161, 0x0600, 0xa23e, 0xc71f,
+ 0x3d11, 0x2848, 0xe000, 0x02b0, 0xe094, 0x2a48, 0x8848, 0x0022,
+ 0xe184, 0x0fdf, 0x290a, 0xe000, 0x0600, 0xe092, 0x3f01, 0xa103,
+ 0xd1f9, 0x0000, 0xe162, 0x0600, 0xd022, 0x001f, 0xe184, 0x0fe9,
+ 0x2912, 0xcff0, 0xe42e, 0xe41e, 0x0fcc, 0xe42e, 0xd1f3, 0x0000,
+ 0xe167, 0x02b0, 0xd022, 0x003f, 0xe184, 0x0ff7, 0x2917, 0xcfe4,
+ 0xd1f9, 0x0000, 0xe167, 0x0600, 0xd022, 0x001f, 0xe184, 0x1001,
+ 0x2917, 0xcff0, 0xe42e, 0xba4e, 0x3c11, 0xa200, 0x3c24, 0xd022,
+ 0x0007, 0xe184, 0x1010, 0xba41, 0x5a24, 0xe056, 0x2a24, 0xa003,
+ 0x3e24, 0x3c24, 0xa208, 0x3cf0, 0x2824, 0xaf0c, 0xe408, 0x111a,
+ 0xa224, 0x3cf0, 0xe41e, 0x1373, 0xe40a, 0x111d, 0xa226, 0x3cf0,
+ 0xba4e, 0x3c1f, 0xa112, 0xe404, 0x111a, 0xa154, 0xe400, 0x111a,
+ 0xbc3e, 0x3c10, 0xa202, 0x3c22, 0xa200, 0x3c67, 0x2811, 0xa1c8,
+ 0xf338, 0xbc06, 0x3c22, 0xa20a, 0x3cf0, 0xbc08, 0xe408, 0x111a,
+ 0xa20c, 0x3cf0, 0xbc08, 0xe408, 0x111a, 0xba40, 0xba40, 0x3c67,
+ 0xf23a, 0xa201, 0x3e69, 0x3e6b, 0xe160, 0x0000, 0xba40, 0xf11a,
+ 0x2a69, 0xae03, 0xe056, 0x3c69, 0xe080, 0xe41e, 0x131e, 0x2a6b,
+ 0xae03, 0xe056, 0x3c6b, 0xe080, 0xa201, 0xe41e, 0x1351, 0xf07e,
+ 0x2a69, 0xae03, 0x3e69, 0x2a6b, 0xae03, 0x3e6b, 0xe080, 0xa002,
+ 0xe090, 0xa110, 0xf648, 0xa20e, 0x3cf0, 0xbc18, 0xe40d, 0x111a,
+ 0xa008, 0x3c13, 0xa202, 0x5813, 0x3414, 0x3c15, 0xa210, 0x3cf0,
+ 0xbc04, 0x3c16, 0xe40d, 0x111a, 0xa102, 0xf034, 0xf0aa, 0xf33e,
+ 0xa212, 0x3cf0, 0xbc18, 0xe40d, 0x111a, 0xa008, 0x3c17, 0xf2be,
+ 0xba40, 0x3c18, 0xe41e, 0x0ca6, 0xe160, 0x0907, 0xe161, 0x0908,
+ 0x3500, 0x3d01, 0xe41e, 0x0ca6, 0xe162, 0x0909, 0xe163, 0x090a,
+ 0x3502, 0x3d03, 0xa214, 0x3cf0, 0xbdfe, 0xe40d, 0x111a, 0xe164,
+ 0x090b, 0x3d04, 0xf10a, 0xa102, 0xcc44, 0xe162, 0x09e0, 0xe184,
+ 0x10a4, 0xe41e, 0x0ca6, 0x3512, 0x3d12, 0xa216, 0x3cf0, 0xe41e,
+ 0x124a, 0xf01e, 0xe40d, 0x111a, 0xa218, 0x3cf0, 0xbc20, 0xe40d,
+ 0x111a, 0x3c19, 0xba40, 0x3c1a, 0xa21a, 0x3cf0, 0xbdfe, 0xe40d,
+ 0x111a, 0xa002, 0x3c57, 0xa21c, 0x3cf0, 0xbdfe, 0xe40d, 0x111a,
+ 0xa002, 0x3c58, 0x8457, 0x8258, 0xe018, 0x3c1e, 0xa222, 0x3cf0,
+ 0x2c57, 0xe002, 0x0080, 0xe400, 0x111a, 0x2c58, 0xe002, 0x0080,
+ 0xe400, 0x111a, 0x2c1e, 0xe002, 0x4000, 0xe400, 0x111a, 0xa200,
+ 0x3c1c, 0xba40, 0x3c1b, 0xf098, 0xba40, 0x3c1c, 0x2858, 0xae02,
+ 0x3c58, 0x2c1e, 0xae02, 0x3c1e, 0xe41e, 0x11ca, 0xa21e, 0x3cf0,
+ 0x2a1b, 0xba40, 0xb636, 0x3c1d, 0xa220, 0x3cf0, 0xba40, 0xe161,
+ 0x05e4, 0xc703, 0x3d11, 0xf16a, 0xe161, 0x05e4, 0xe41e, 0x0c8c,
+ 0x3d11, 0xe41e, 0x0c8c, 0x3d11, 0xe41e, 0x0c8c, 0x2a1b, 0xf029,
+ 0xae02, 0x3d11, 0xe41e, 0x0c8c, 0x2a1b, 0xf029, 0xae02, 0x3d11,
+ 0xf12d, 0xa200, 0x3c90, 0x3c91, 0x2820, 0x3cea, 0x3ceb, 0xe41e,
+ 0x1468, 0xba40, 0xe016, 0xe41a, 0x125a, 0xf05a, 0xe41e, 0x0cd5,
+ 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa2fe, 0xe42e, 0xe41e,
+ 0x0c8c, 0x3c29, 0xbc3e, 0xe40d, 0x11c0, 0x1810, 0xf11a, 0x0810,
+ 0x3c10, 0xe41e, 0x1ab1, 0x3c65, 0xa205, 0xae23, 0xcc9f, 0xa202,
+ 0xe41e, 0x0c40, 0xa203, 0x3e9b, 0x2865, 0xe40a, 0x11c0, 0xba40,
+ 0x3c2d, 0xba40, 0x3c2a, 0xbc0e, 0xe40d, 0x11c0, 0x3c2b, 0xf03a,
+ 0xe40d, 0x11c0, 0x282d, 0x2a2b, 0xe01b, 0xe052, 0xe408, 0x11c0,
+ 0x2811, 0xa184, 0xf078, 0x282d, 0xf0aa, 0xe004, 0x0064, 0x3c11,
+ 0xf06e, 0x282b, 0xf04a, 0xe004, 0x0042, 0x3c11, 0xbc3e, 0xe40d,
+ 0x11c0, 0x3c2c, 0xbc3e, 0x3c2e, 0xe40d, 0x11c0, 0xba40, 0x3c2f,
+ 0xba42, 0x3c30, 0xbe34, 0xe40d, 0x11c0, 0xa034, 0x3c31, 0xe404,
+ 0x11c0, 0xa168, 0xe402, 0x11c0, 0xbe34, 0xe40d, 0x11c0, 0xa034,
+ 0xe404, 0x11c0, 0xa168, 0xe402, 0x11c0, 0xbe18, 0xe40d, 0x11c0,
+ 0x3c32, 0x3c36, 0xba40, 0x3c33, 0xba40, 0x3c34, 0xba40, 0x3c35,
+ 0xa200, 0x3c37, 0x3c68, 0x2811, 0xa184, 0xf37a, 0x2829, 0x3c02,
+ 0xe41e, 0x1b79, 0xe41e, 0x0ba5, 0xf30a, 0xba40, 0x3c37, 0xba40,
+ 0x3c68, 0xf28a, 0xa201, 0x3e6a, 0x3e6c, 0xe160, 0x0000, 0xe080,
+ 0xa10c, 0x1837, 0x1837, 0xf132, 0xba40, 0xf11a, 0x2a6a, 0xae03,
+ 0xe056, 0x3c6a, 0xe080, 0xe41e, 0x131e, 0x2a6c, 0xae03, 0xe056,
+ 0x3c6c, 0xe080, 0xa203, 0xe41e, 0x1351, 0xf07e, 0x2a6a, 0xae03,
+ 0x3e6a, 0x2a6c, 0xae03, 0x3e6c, 0xe080, 0xa002, 0xe090, 0xa110,
+ 0xf5f8, 0xbe18, 0xf06d, 0x3c36, 0xe41e, 0x0cd5, 0xa202, 0xe42e,
+ 0xe0c1, 0x0059, 0xa107, 0xf049, 0x28ae, 0xa902, 0x3cae, 0xe16a,
+ 0xa200, 0xe42e, 0xa214, 0x2e1e, 0xe003, 0x0063, 0xf2f7, 0xa216,
+ 0x2e1e, 0xe003, 0x018c, 0xf2a7, 0xa22a, 0x2e1e, 0xe003, 0x0318,
+ 0xf257, 0xa22c, 0x2e1e, 0xe003, 0x0654, 0xf207, 0xa23e, 0x2e1e,
+ 0xe003, 0x0e10, 0xf1b7, 0xa240, 0x2e1e, 0xe003, 0x1400, 0xf167,
+ 0xa250, 0x2e1e, 0xe003, 0x2000, 0xf117, 0xa254, 0x2e1e, 0xe003,
+ 0x2200, 0xf0c7, 0xa264, 0x2e1e, 0xe003, 0x5640, 0xf077, 0xa266,
+ 0x2e1e, 0xe003, 0x9000, 0xf027, 0xa268, 0x2a1f, 0xe045, 0xf023,
+ 0x3c1f, 0x2a1f, 0xa115, 0xe004, 0x0129, 0xf2d7, 0xa103, 0xe004,
+ 0x02a3, 0xf297, 0xa113, 0xe004, 0x06f6, 0xf257, 0xa103, 0xe004,
+ 0x0dec, 0xf217, 0xa113, 0xe004, 0x17bb, 0xf1d7, 0xa103, 0xe004,
+ 0x34bc, 0xf197, 0xa103, 0xe004, 0x3c00, 0xf157, 0xa113, 0xe004,
+ 0x6000, 0xf117, 0xa103, 0xe004, 0x6600, 0xf0d7, 0xa111, 0xe004,
+ 0x1437, 0xae08, 0xf087, 0xa103, 0xe004, 0x21c0, 0xae08, 0xf037,
+ 0xe004, 0x17bb, 0xae12, 0x3409, 0x3c0a, 0x841e, 0xe182, 0x0180,
+ 0xe019, 0x2009, 0x4c0a, 0xc407, 0xd022, 0x000f, 0xe184, 0x1242,
+ 0xe046, 0xf034, 0x8117, 0xe190, 0xe08e, 0x2a19, 0xe062, 0xa520,
+ 0x3c20, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x0026, 0xae11, 0xe042,
+ 0xce20, 0xd111, 0x09e0, 0xd112, 0x0200, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0xa200, 0x3c00, 0x3c01, 0x3c02, 0x3c03, 0x3c04,
+ 0x3c05, 0x3c06, 0x3c07, 0x3c08, 0x3c09, 0x3c0a, 0xba40, 0xa2ff,
+ 0x3e25, 0x3e26, 0xf16a, 0xba4e, 0xa201, 0x3e25, 0x3c26, 0xe002,
+ 0x00ff, 0xf0f8, 0xa202, 0x3c07, 0xba5e, 0xba5f, 0x3c25, 0x3e26,
+ 0xe016, 0xe017, 0xe056, 0xf028, 0xf04e, 0xa200, 0x3c26, 0x3c25,
+ 0xba40, 0xf02a, 0xba40, 0xba40, 0x3c0a, 0xf0ca, 0xba44, 0x3c09,
+ 0xba40, 0x3c08, 0xba40, 0x3c06, 0xf05a, 0xba4e, 0x3c05, 0xba4e,
+ 0xba4e, 0xba40, 0x3c04, 0xf05a, 0xbc0a, 0x3c03, 0xbc0a, 0x3c02,
+ 0xba40, 0x3c01, 0xf0ba, 0xba7e, 0xe161, 0x05c7, 0x3511, 0x3d11,
+ 0xba7e, 0x3511, 0x3d11, 0xba40, 0x3c00, 0xba40, 0x3c90, 0xe016,
+ 0xe161, 0x05bd, 0xe41a, 0x1302, 0xe40a, 0x12ff, 0xba40, 0x3c91,
+ 0xe016, 0xe161, 0x05c2, 0xe41a, 0x1302, 0xe40a, 0x12ff, 0x2890,
+ 0x4c91, 0xf02a, 0xba40, 0xba40, 0x3c23, 0xba40, 0xf0aa, 0xba40,
+ 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0x3cea, 0xbc20, 0x3ceb,
+ 0x28eb, 0xa120, 0xf0a0, 0x2819, 0x18eb, 0xf070, 0x28b3, 0xf09a,
+ 0x287f, 0xa104, 0x18eb, 0xf052, 0x2ab3, 0xf029, 0x2a20, 0x3eeb,
+ 0xa202, 0xae3e, 0x2a0a, 0xae3d, 0xe056, 0x2a09, 0xae37, 0xe056,
+ 0x2a08, 0xae35, 0xe056, 0x2a07, 0xae33, 0xe056, 0x2a06, 0xae31,
+ 0xe056, 0x2a05, 0xae21, 0xe056, 0x2a04, 0xae11, 0xe056, 0x2a03,
+ 0xae0b, 0xe056, 0x2a02, 0xae05, 0xe056, 0x2a01, 0xae03, 0xe056,
+ 0x2a00, 0xe056, 0xe41e, 0x1468, 0xe16a, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0xe41e, 0x0c8c, 0xcc44, 0x3c61, 0xa002, 0x3d11,
+ 0xba46, 0xba46, 0xe184, 0x1310, 0xe41e, 0x0c8c, 0xe41e, 0x0c8c,
+ 0xba40, 0xba48, 0xa002, 0x3d11, 0xba48, 0xa002, 0x3d11, 0xba48,
+ 0xa002, 0x3d11, 0xba48, 0x3d11, 0xa202, 0xe42e, 0xd022, 0x000f,
+ 0xa10c, 0xf034, 0xd022, 0x003f, 0xe161, 0x0600, 0xa210, 0x3c06,
+ 0x3c07, 0xa200, 0x3c08, 0x3c09, 0xe09c, 0xe09e, 0xe184, 0x134e,
+ 0x2807, 0xf10a, 0xe41e, 0x0ca6, 0xe42d, 0x0806, 0xe000, 0x0100,
+ 0xe008, 0x00ff, 0x3c07, 0x4c09, 0xe01a, 0xe016, 0xe09e, 0xa202,
+ 0x3c09, 0x2807, 0xf028, 0x2806, 0x3c06, 0xe08d, 0xa003, 0xe09d,
+ 0xa803, 0xf059, 0xe085, 0xae11, 0xe056, 0x3d11, 0xe094, 0xe08e,
+ 0xe42e, 0x3e08, 0x3c06, 0xa211, 0x3e07, 0xa10c, 0xf064, 0xb690,
+ 0xa00c, 0x3c06, 0xa240, 0x3c07, 0x2806, 0x2a08, 0xf02b, 0xa01c,
+ 0xae08, 0x3c06, 0xe0c0, 0x0041, 0xe005, 0x0034, 0xae11, 0xe042,
+ 0x0806, 0xce20, 0xd111, 0x0600, 0x2807, 0xce24, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0x2811, 0xa184, 0xf0ba, 0xa116, 0xf09a,
+ 0xa12e, 0xf07a, 0x2824, 0xe008, 0x0003, 0xf038, 0xa200, 0xe42e,
+ 0xa202, 0xe42e, 0xa202, 0x3c51, 0xe41e, 0x08bd, 0xe408, 0x13e2,
+ 0xe41e, 0x0b72, 0xf26a, 0xa102, 0xe40a, 0x13fe, 0xa108, 0xe404,
+ 0x13b0, 0xe40a, 0x13fe, 0xa102, 0xe40a, 0x13c8, 0xa102, 0xe40a,
+ 0x13b3, 0xa102, 0xe40a, 0x13be, 0xa102, 0xe40a, 0x13d2, 0xa102,
+ 0xe40a, 0x13df, 0xa102, 0xe40a, 0x13df, 0xa102, 0xe40a, 0x13e9,
+ 0xf082, 0x2851, 0xe40a, 0x140c, 0xe41e, 0x098a, 0xe40e, 0x13f9,
+ 0xe41e, 0x0951, 0xf52e, 0x2851, 0xe40a, 0x140c, 0xe41e, 0x1459,
+ 0xe41e, 0x098a, 0xe41e, 0x1a99, 0xe40e, 0x13f9, 0x2851, 0xe40a,
+ 0x140c, 0xe41e, 0x1459, 0xe41e, 0x098a, 0xe41e, 0x1ac4, 0xf32e,
+ 0x2851, 0xe40a, 0x140c, 0xe41e, 0x1459, 0xe41e, 0x098a, 0xe41e,
+ 0x146d, 0xf28e, 0x2851, 0xe40a, 0x140c, 0xe41e, 0x1460, 0xe41e,
+ 0x1459, 0xe41e, 0x098a, 0xba44, 0xe41e, 0x0cd5, 0xf1be, 0xe41e,
+ 0x08bd, 0xf16a, 0xe41e, 0x01db, 0x2851, 0xe408, 0x1413, 0xe40e,
+ 0x140c, 0xe41e, 0x098a, 0xba0e, 0xe002, 0x00ff, 0xf058, 0xba4e,
+ 0xe41e, 0x0b96, 0xf798, 0xe41e, 0x0cd5, 0xe40e, 0x1384, 0xe41e,
+ 0x0951, 0x2851, 0xe40a, 0x140c, 0xe40e, 0x1384, 0xe41e, 0x1459,
+ 0xe41e, 0x098a, 0xe41e, 0x25f9, 0xe41e, 0x0d68, 0xe40a, 0x1384,
+ 0x284e, 0x3c92, 0x284f, 0x3c93, 0xa200, 0x3c51, 0xe41e, 0x1435,
+ 0xf078, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa2fe, 0xe42e, 0xe41e,
+ 0x141e, 0xe41e, 0x05b7, 0xe41e, 0x19fe, 0xf74e, 0xe165, 0x05e8,
+ 0x2811, 0x3d15, 0x2857, 0x3d15, 0x2858, 0x3d15, 0x28eb, 0x3d15,
+ 0x281b, 0x3d15, 0x2824, 0x3d15, 0x281f, 0x3d15, 0x2813, 0x3d15,
+ 0x2816, 0x3d15, 0x2819, 0x3d15, 0xe42e, 0xe165, 0x05e8, 0x2811,
+ 0x1915, 0xf1d8, 0x2857, 0x1915, 0xf1a8, 0x2858, 0x1915, 0xf178,
+ 0x28eb, 0x1915, 0xf148, 0x281b, 0x1915, 0xf118, 0x2824, 0x1915,
+ 0xe428, 0x281f, 0x1915, 0xe428, 0x2813, 0x1915, 0xe428, 0x2816,
+ 0x1915, 0xe428, 0x2819, 0x1915, 0xe428, 0xe42e, 0xa202, 0x3cbd,
+ 0xe42e, 0x28ad, 0xe428, 0xe41e, 0x064c, 0xa202, 0x3cad, 0xe42e,
+ 0xa200, 0x3cad, 0xe42e, 0xc009, 0x2039, 0x4c3a, 0xc000, 0xe42e,
+ 0xc009, 0x3439, 0x3c3a, 0xc000, 0xe42e, 0xa200, 0xba4f, 0xe042,
+ 0xe003, 0x00ff, 0xf7cb, 0xe41e, 0x171e, 0xa200, 0xba4f, 0xe042,
+ 0xe003, 0x00ff, 0xf7cb, 0xe41e, 0x1726, 0xf04a, 0xe41e, 0x1487,
+ 0xe42a, 0xe41e, 0x0b96, 0xf6a8, 0xe41e, 0x0cd5, 0xe42e, 0xe41e,
+ 0x1722, 0xf13a, 0xa102, 0xf14a, 0xa104, 0xf15a, 0xa102, 0xf16a,
+ 0xa102, 0xf17a, 0xa150, 0xf18a, 0xe41e, 0x172a, 0xf04a, 0xba4f,
+ 0xa102, 0xf7e8, 0xa202, 0xe42e, 0xe41e, 0x14b6, 0xf10e, 0xe41e,
+ 0x14e5, 0xf0de, 0xe41e, 0x1533, 0xf0ae, 0xe41e, 0x1544, 0xf07e,
+ 0xe41e, 0x158e, 0xf04e, 0xe41e, 0x1592, 0xf01e, 0xe42a, 0xc868,
+ 0xa80e, 0xe016, 0xe428, 0xe41e, 0x0cd5, 0xe42e, 0xbc3e, 0xf1fd,
+ 0x1810, 0xf11a, 0x0810, 0xf084, 0xa13e, 0xf060, 0xa03e, 0x3c10,
+ 0xe41e, 0x1ab1, 0x3c65, 0xa200, 0xe41e, 0x0c40, 0xa201, 0x3e9b,
+ 0x2865, 0xe42a, 0x2890, 0xe161, 0x05bd, 0xe418, 0x14d9, 0x2891,
+ 0xe161, 0x05c2, 0xe418, 0x14d9, 0xa202, 0xe42e, 0xa200, 0xe16a,
+ 0xe42e, 0x2911, 0xa102, 0xcc44, 0xe184, 0x14e3, 0x2901, 0xe41e,
+ 0x0cc9, 0x2901, 0xe41e, 0x0cc9, 0xe42e, 0x2890, 0xe161, 0x05bf,
+ 0xf038, 0xe161, 0x05c4, 0x4c91, 0xf11a, 0x2911, 0xe41e, 0x0cc9,
+ 0xc009, 0x343f, 0x3c40, 0xc000, 0x2911, 0xe41e, 0x0cc9, 0xc009,
+ 0x3441, 0x3c42, 0xc000, 0x2911, 0xf02e, 0xa230, 0x3c02, 0x2823,
+ 0xe016, 0xe428, 0xba46, 0x3ca3, 0xa112, 0xb604, 0xe42a, 0xa012,
+ 0xe049, 0xa200, 0xa107, 0xb426, 0xa105, 0xb426, 0xa105, 0xb5f6,
+ 0xcc44, 0xe184, 0x1530, 0xba40, 0xf028, 0xf1be, 0xba42, 0xba40,
+ 0xba48, 0xba40, 0x3c03, 0xba40, 0xba40, 0xba4e, 0x2803, 0xf05a,
+ 0xba4a, 0xba4a, 0xba48, 0xf0ae, 0xba40, 0xf08a, 0xba4a, 0xba40,
+ 0xf05a, 0xba4a, 0xba40, 0xf02a, 0xba48, 0x2802, 0xe41e, 0x0cc9,
+ 0xe190, 0xa202, 0xe42e, 0xe41e, 0x172a, 0xf0da, 0xa102, 0xcc44,
+ 0xe004, 0x00ff, 0xe184, 0x153d, 0xba4f, 0xe052, 0xe002, 0x00ff,
+ 0xe016, 0xe42a, 0xa202, 0xe42e, 0xa202, 0xba4f, 0xe003, 0x00ff,
+ 0xf039, 0xba4f, 0xa204, 0xba1f, 0xe003, 0x0031, 0xf049, 0xba5f,
+ 0xa004, 0xe190, 0xba3f, 0x360e, 0x3e0f, 0xe005, 0x4454, 0x1a0e,
+ 0xf069, 0xe005, 0x4731, 0x1a0f, 0xf029, 0xf24e, 0xe005, 0x4741,
+ 0x1a0e, 0xf0b9, 0xe005, 0x3934, 0x1a0f, 0xf079, 0xba7f, 0xa008,
+ 0xba0f, 0xa10d, 0xe40b, 0x1578, 0xc009, 0x2a2d, 0xc000, 0xe045,
+ 0xa009, 0xc009, 0x3e2d, 0xc000, 0xe41e, 0x1621, 0xa202, 0xe42e,
+ 0xba4f, 0xa002, 0xc009, 0x2a2d, 0xc000, 0xe045, 0xf4d1, 0xa202,
+ 0xe42e, 0xba7e, 0xba40, 0xf098, 0xba41, 0xba4a, 0xf04b, 0xba46,
+ 0xba46, 0x3cb0, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe41e, 0x1621,
+ 0xa202, 0xe42e, 0xc009, 0xa2fe, 0x3426, 0x3c27, 0xa201, 0x3628,
+ 0x3e29, 0x362a, 0x3e2b, 0xc000, 0xe41e, 0x0c8c, 0xc009, 0xe40d,
+ 0x1607, 0x3426, 0x3c27, 0xba40, 0xe40d, 0x1607, 0xae2a, 0xe055,
+ 0x3628, 0x3e29, 0xe408, 0x15fd, 0xba4c, 0xe40d, 0x1607, 0xae0c,
+ 0xe055, 0xba40, 0xe40d, 0x1607, 0xae28, 0xe055, 0xba4a, 0xe40d,
+ 0x1607, 0xe055, 0xba40, 0xe40d, 0x1607, 0xae26, 0xe055, 0xba40,
+ 0xe40d, 0x1607, 0xae24, 0xe055, 0xba40, 0xe40d, 0x1607, 0xae22,
+ 0xe055, 0xba40, 0xe40d, 0x1607, 0xae20, 0xe055, 0xba40, 0xe40d,
+ 0x1607, 0xae1e, 0xe055, 0xba40, 0xe40d, 0x1607, 0xae1c, 0xe055,
+ 0x3628, 0x3e29, 0xe04a, 0xaf28, 0xa802, 0xe016, 0xaf0d, 0xa83f,
+ 0xa10b, 0xe01b, 0xe052, 0xf12a, 0xa201, 0xba46, 0xf21d, 0xae38,
+ 0xe055, 0xba46, 0xf1dd, 0xae30, 0xe055, 0xba46, 0xf19d, 0xae28,
+ 0xe055, 0xba46, 0xf15d, 0xae20, 0xe055, 0xba4e, 0xf11d, 0xe0c4,
+ 0x4064, 0xf0ed, 0xe055, 0x362a, 0x3e2b, 0x2228, 0x4e29, 0xba40,
+ 0xae1a, 0xe055, 0x3628, 0x3e29, 0xa202, 0xc000, 0xe42e, 0xc009,
+ 0xa2fe, 0x3426, 0x3c27, 0xa200, 0x3428, 0x3c29, 0x342a, 0x3c2b,
+ 0xc000, 0xe42e, 0xc009, 0x2426, 0x4c27, 0xc000, 0xe42e, 0xc009,
+ 0x2428, 0x4c29, 0xc000, 0xe42e, 0xc009, 0x242a, 0x4c2b, 0xc000,
+ 0xe42e, 0xe0c0, 0x0065, 0xa878, 0xa140, 0xf0ba, 0xe41e, 0x172a,
+ 0xa102, 0xcc44, 0xe184, 0x162d, 0xba4e, 0xe190, 0xe40e, 0x16b1,
+ 0xa201, 0xe41e, 0x170c, 0x2907, 0xa002, 0x3c0c, 0x3d17, 0xa120,
+ 0xf6e0, 0x2b07, 0xe41e, 0x1722, 0xf05a, 0xe41e, 0x172a, 0xe041,
+ 0xf05e, 0x2861, 0xa002, 0xae06, 0xe041, 0xa00f, 0xaf07, 0xae07,
+ 0xe04a, 0xaf1f, 0xf0db, 0xa201, 0xe41e, 0x170c, 0x8117, 0x8117,
+ 0x2907, 0xa202, 0x3d07, 0xa201, 0xe41e, 0x170a, 0xf50e, 0x3d17,
+ 0xa201, 0xe41e, 0x170a, 0xe167, 0x0600, 0xe41e, 0x1722, 0x3d17,
+ 0xe41e, 0x1722, 0xf04a, 0xe41e, 0x172a, 0xf04e, 0x2861, 0xa002,
+ 0xae06, 0x3d17, 0x2a0c, 0xe41e, 0x170a, 0xa200, 0x3c0b, 0xa200,
+ 0xe167, 0x0600, 0xc703, 0x3d17, 0xe167, 0x0600, 0xe41e, 0x1722,
+ 0xf3ba, 0xe41e, 0x1722, 0xa108, 0xf0f8, 0xe004, 0x4741, 0x3d17,
+ 0xe004, 0x3934, 0x3d17, 0x28a7, 0xa008, 0x3ca7, 0xe41e, 0x172a,
+ 0xa108, 0xe41e, 0x1726, 0x280b, 0xa002, 0x3c0b, 0xba4f, 0x28a7,
+ 0xa002, 0x3ca7, 0xa802, 0xf058, 0x280a, 0xae10, 0xe056, 0x3d17,
+ 0x3e0a, 0x28a7, 0xa80e, 0xe41a, 0x16cc, 0xe41e, 0x172a, 0x180b,
+ 0xf6b0, 0x28a7, 0xa80e, 0xf0ea, 0x2aa7, 0xa803, 0xf04b, 0x280a,
+ 0xae10, 0x3d17, 0x2aa7, 0xa00f, 0xaf07, 0xae07, 0x3ea7, 0xe418,
+ 0x16cc, 0xe40e, 0x16ca, 0x280b, 0xa002, 0x3c0b, 0x2901, 0xe41e,
+ 0x0cc9, 0x3517, 0x3d17, 0x2901, 0xe41e, 0x0cc9, 0x3517, 0x3d17,
+ 0x28a7, 0xa010, 0x3ca7, 0xe41e, 0x16cc, 0x2861, 0xa002, 0x180b,
+ 0xf6b0, 0xf01a, 0xa202, 0xe42e, 0x24b7, 0x4cb8, 0xe000, 0x0088,
+ 0x18a7, 0xf242, 0xe0c0, 0x0065, 0xaf12, 0xa802, 0xf0da, 0xa201,
+ 0xe41e, 0x170c, 0x8117, 0x8117, 0x2907, 0xa202, 0x3d07, 0xa201,
+ 0xe41e, 0x170a, 0xe42e, 0xe004, 0x0200, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x005d, 0xe008, 0x0200,
+ 0xe190, 0xf7b8, 0xe004, 0x0090, 0x3ca7, 0x24b5, 0x4cb6, 0x08a7,
+ 0xa110, 0xce20, 0xd111, 0x0600, 0xd112, 0x0004, 0xd113, 0x0000,
+ 0xca28, 0xf7f8, 0xa200, 0xe167, 0x0600, 0xc703, 0x3d17, 0xe167,
+ 0x0600, 0xe42e, 0xa200, 0xf02e, 0xa202, 0x3c0d, 0x24b5, 0x4cb6,
+ 0xae07, 0xe042, 0xce20, 0xd111, 0x0600, 0xd112, 0x0004, 0x880d,
+ 0x0113, 0xca28, 0xf7f8, 0xe167, 0x0600, 0xe42e, 0xc009, 0x3c2c,
+ 0xc000, 0xe42e, 0xc009, 0x282c, 0xc000, 0xe42e, 0xc009, 0x3c2d,
+ 0xc000, 0xe42e, 0xc009, 0x282d, 0xc000, 0xe42e, 0x2c39, 0x3c7b,
+ 0xa202, 0x3c7c, 0xa200, 0x3c7d, 0x3c7e, 0x284e, 0xe016, 0xe428,
+ 0x284f, 0xf0ca, 0xe41e, 0x17cd, 0xba40, 0xba40, 0xb7f0, 0xb634,
+ 0x3c7c, 0xa200, 0x3c7b, 0xa202, 0xe42e, 0xba40, 0xf11a, 0x2819,
+ 0xe42a, 0xae02, 0x3c09, 0x2014, 0x4c15, 0x583f, 0x3400, 0x3c01,
+ 0x2c39, 0x583f, 0x083f, 0x3402, 0x3c03, 0xbc0c, 0xf058, 0xa202,
+ 0x3c7d, 0xe42e, 0xbc0c, 0xe40d, 0x17ca, 0xe40a, 0x17c8, 0xa102,
+ 0xf0ca, 0xa102, 0xf1fa, 0xa102, 0xf24a, 0xa102, 0xf39a, 0xa102,
+ 0xe40a, 0x17a8, 0xe40e, 0x17b0, 0xe41e, 0x0c8c, 0xe40d, 0x17ca,
+ 0xa002, 0x1002, 0x1c03, 0xe012, 0x3c0a, 0xf032, 0x0000, 0x0c01,
+ 0xa203, 0xe41e, 0x17d4, 0x2a0a, 0x3e04, 0x4c4f, 0xe41a, 0x17ec,
+ 0xf5ae, 0xbc40, 0xe40d, 0x17ca, 0xa2ff, 0xe41e, 0x17d4, 0xf53e,
+ 0xe41e, 0x0c8c, 0xe40d, 0x17ca, 0xa002, 0x1002, 0x1c03, 0xe012,
+ 0xf032, 0x0000, 0x0c01, 0x3c06, 0xa802, 0x443f, 0xbc21, 0xf33d,
+ 0x5a3f, 0xe041, 0x3e07, 0xe41e, 0x181b, 0xe40e, 0x175a, 0xbc20,
+ 0xf2ad, 0xa102, 0x583f, 0x083f, 0xe41e, 0x1836, 0xe40e, 0x175a,
+ 0xe41e, 0x17cd, 0xa202, 0x3c7e, 0xa200, 0x3c7b, 0xe40e, 0x175a,
+ 0xbc20, 0xf19d, 0x3c7b, 0x287b, 0x583f, 0x083f, 0xa2ff, 0xe41e,
+ 0x17d4, 0xf7a8, 0x283f, 0xf09a, 0x2840, 0xf078, 0x287b, 0xae02,
+ 0xa2ff, 0xe41e, 0x17d4, 0xf7b8, 0xa2fe, 0x3c7c, 0xe40e, 0x175a,
+ 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xc410, 0xe161, 0x02f1,
+ 0xa200, 0xc71f, 0x3d31, 0xe42e, 0x3c04, 0x3e05, 0xe161, 0x02f0,
+ 0x8809, 0x0022, 0xe184, 0x17e7, 0x2d11, 0x2b09, 0x1c04, 0x1a05,
+ 0xf068, 0xf059, 0x8111, 0xa200, 0x3d09, 0xf05e, 0x8111, 0x8111,
+ 0xa200, 0xe42e, 0xa202, 0xe42e, 0xe161, 0x02f0, 0x8809, 0x0022,
+ 0xe184, 0x17fc, 0x2d11, 0x2b09, 0x1804, 0x1a05, 0xf050, 0xf049,
+ 0x8111, 0xa200, 0x3d09, 0x8111, 0x8111, 0xe160, 0x0003, 0xe161,
+ 0x02f1, 0x8809, 0x0022, 0xe184, 0x1818, 0x2909, 0xf11a, 0x2d01,
+ 0x2e39, 0x5a3f, 0xe045, 0xf053, 0x2214, 0x4e15, 0x5a3f, 0xe046,
+ 0xae02, 0x1804, 0xf052, 0xa200, 0x8111, 0x3d01, 0xe42e, 0x8131,
+ 0xe190, 0xa202, 0xe42e, 0x2807, 0xa2ff, 0xe41e, 0x17d4, 0xf7c8,
+ 0xe161, 0x02f0, 0x8809, 0x0022, 0xe184, 0x1831, 0x2d11, 0x2b09,
+ 0x1c06, 0xf078, 0xf067, 0x2807, 0x3d11, 0xa2fe, 0x3d09, 0xf05e,
+ 0x8111, 0x8111, 0xa200, 0xe42e, 0xa202, 0xe42e, 0x3c08, 0xe161,
+ 0x02f0, 0x8809, 0x0022, 0xe184, 0x1846, 0x2d11, 0x2b09, 0x1808,
+ 0xf056, 0xf043, 0x8111, 0xa200, 0x3d09, 0x8111, 0x8111, 0xe42e,
+ 0x2819, 0x1812, 0xf122, 0x2812, 0xa102, 0xcc44, 0xe161, 0x0202,
+ 0xe184, 0x185b, 0x2911, 0xf06a, 0x2909, 0xe412, 0x1f29, 0xa200,
+ 0x3d11, 0xe082, 0xa006, 0xe092, 0x2819, 0xb62c, 0x3c12, 0x2816,
+ 0xa104, 0xe428, 0xe41e, 0x19fe, 0xe42e, 0x2816, 0xa102, 0xf044,
+ 0xf16a, 0xe40e, 0x18b3, 0x7417, 0xe160, 0x0903, 0x3d00, 0x283f,
+ 0xe016, 0x442a, 0xe418, 0x0ca6, 0xe42d, 0xe161, 0x0904, 0xe162,
+ 0x0905, 0x3501, 0x3d02, 0xe41e, 0x1916, 0xf38e, 0xa200, 0xe160,
+ 0x0903, 0xe161, 0x0904, 0xe162, 0x0905, 0xe163, 0x0906, 0x3500,
+ 0x3d01, 0x3502, 0x3d03, 0x2818, 0xf178, 0xe41e, 0x0ca6, 0xe42d,
+ 0xe164, 0x0903, 0xe165, 0x0904, 0x3504, 0x3d05, 0x282a, 0xf0ca,
+ 0x283f, 0xf0a8, 0xe41e, 0x0ca6, 0xe42d, 0xe166, 0x0905, 0xe167,
+ 0x0906, 0x3506, 0x3d07, 0xe41e, 0x1966, 0xf10e, 0xe164, 0x0903,
+ 0xe165, 0x0904, 0xe166, 0x0905, 0xe167, 0x0906, 0x3504, 0x3d05,
+ 0x3506, 0x3d07, 0xf03e, 0xe41e, 0x19b7, 0x283f, 0x2a42, 0xf0f9,
+ 0xf078, 0x2074, 0x4c75, 0x2276, 0x4e77, 0xe066, 0xf0ee, 0x2074,
+ 0x4c75, 0xc009, 0x343b, 0x3c3c, 0xc000, 0xf07e, 0x2076, 0x4c77,
+ 0xc009, 0x343d, 0x3c3e, 0xc000, 0x3472, 0x3c73, 0xe42e, 0x284f,
+ 0x4c7e, 0xe418, 0x19fe, 0x28e5, 0xae02, 0xe000, 0x0578, 0xe092,
+ 0x2072, 0x4c73, 0x3511, 0x3d11, 0x28e5, 0xe000, 0x059a, 0xe092,
+ 0x2884, 0x3d11, 0x28e5, 0xa002, 0x3ce5, 0x28eb, 0x2a16, 0xa105,
+ 0xb616, 0x2a21, 0xb616, 0x3c07, 0xe41e, 0x1f46, 0xf048, 0xe41e,
+ 0x1a03, 0xf7be, 0xe41e, 0x1f56, 0xe428, 0xe41e, 0x1a03, 0xf7be,
+ 0x28e9, 0xf04a, 0xa102, 0x3ce9, 0xf14e, 0x28e8, 0xf12a, 0x28e7,
+ 0xe000, 0x05ab, 0xe092, 0x28e7, 0xa002, 0x3ce7, 0xa122, 0xf028,
+ 0x3ce7, 0x28e8, 0xa102, 0x3ce8, 0x2901, 0xe049, 0x1a7f, 0xe425,
+ 0xe41e, 0x08d7, 0xe049, 0xa2fa, 0xb7f2, 0xe42e, 0xa202, 0x5817,
+ 0xaf02, 0x3c06, 0x284f, 0x2a82, 0xf0b8, 0xf0d9, 0xe164, 0x0906,
+ 0x2114, 0x4d14, 0xe166, 0x0908, 0x2316, 0x4f16, 0xf09e, 0xa200,
+ 0xa201, 0xf06e, 0xa200, 0xe161, 0x090a, 0x2311, 0x4f11, 0x3400,
+ 0x3c01, 0x3602, 0x3e03, 0xe161, 0x0903, 0x2f01, 0x1202, 0x1e03,
+ 0xf071, 0xe013, 0x1e06, 0xf085, 0x0c06, 0x0c06, 0xf05e, 0x1e06,
+ 0xf037, 0x1c06, 0x1c06, 0x3404, 0x3c05, 0xe161, 0x0903, 0x0d01,
+ 0x3474, 0x3c75, 0xe162, 0x0904, 0x0112, 0x0d12, 0x3476, 0x3c77,
+ 0x284e, 0xf14a, 0x2074, 0x4c75, 0xe161, 0x090a, 0x3511, 0x3d11,
+ 0x2004, 0x4c05, 0xe164, 0x0906, 0x3514, 0x3d14, 0xe161, 0x0903,
+ 0xe166, 0x0908, 0x2d01, 0x3516, 0x3d16, 0xe42e, 0xe41e, 0x19c8,
+ 0xe160, 0x090b, 0x2900, 0xf34a, 0x2000, 0x4c01, 0x0c39, 0xf306,
+ 0x2a4e, 0xe017, 0xe046, 0xa102, 0xf2b4, 0xe160, 0x090b, 0xe188,
+ 0x000f, 0x7d00, 0x3402, 0x3c03, 0xe41e, 0x19ee, 0xe163, 0x090b,
+ 0x2903, 0xa102, 0xcc44, 0xe161, 0x09e0, 0xa200, 0xe184, 0x1989,
+ 0x0111, 0x0d11, 0xae02, 0x3404, 0xe008, 0xffff, 0xaf02, 0x3c05,
+ 0x8403, 0x8204, 0xe018, 0xae1e, 0x8205, 0xe01c, 0xe161, 0x09e0,
+ 0x8802, 0x0022, 0xe184, 0x199d, 0x0111, 0x0d11, 0xf02e, 0xa200,
+ 0x2a4e, 0xf059, 0xe161, 0x0907, 0x0111, 0x0d11, 0xe164, 0x0903,
+ 0x0114, 0x0d14, 0x3474, 0x3c75, 0xe162, 0x0909, 0x0112, 0x0d12,
+ 0xe166, 0x0905, 0x0116, 0x0d16, 0x3476, 0x3c77, 0xe42e, 0xe41e,
+ 0x19c8, 0x284f, 0xe016, 0xf08a, 0x2000, 0x4c01, 0x0c39, 0xae02,
+ 0x2a4e, 0xe017, 0xe046, 0x3474, 0x3c75, 0x3476, 0x3c77, 0xe42e,
+ 0x2882, 0xf09a, 0xa200, 0xe162, 0x0901, 0x3512, 0x3d12, 0xe161,
+ 0x0900, 0x3d01, 0x284f, 0xe016, 0xf0da, 0xe162, 0x0901, 0x2112,
+ 0x4d12, 0xe161, 0x0900, 0x2f01, 0x1e39, 0xf047, 0xa203, 0x5a13,
+ 0xe042, 0x3400, 0x3c01, 0x2839, 0xe161, 0x0900, 0x3d01, 0x2000,
+ 0x4c01, 0xe162, 0x0901, 0x3512, 0x3d12, 0xe42e, 0xe0c0, 0x0041,
+ 0xe005, 0x0026, 0xae11, 0xe042, 0xce20, 0xd111, 0x09e0, 0xd112,
+ 0x0200, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0x28e5, 0xe426,
+ 0xe41e, 0x1a03, 0xf7ce, 0x28e5, 0xe426, 0xe161, 0x0578, 0xe162,
+ 0x0578, 0x2111, 0x4d11, 0xa201, 0x3e00, 0xa203, 0x28e5, 0xa104,
+ 0xf0e4, 0xcc44, 0xe184, 0x1a1d, 0x2112, 0x4d0a, 0x1111, 0x1d11,
+ 0xf056, 0xe082, 0xa104, 0xe094, 0x3e00, 0xa003, 0xe084, 0xa004,
+ 0xe092, 0x2800, 0xe000, 0x059a, 0xe098, 0xa002, 0xe096, 0x2904,
+ 0x3c01, 0xe41e, 0x1f30, 0x28e5, 0x1800, 0xa104, 0xf0a4, 0xcc44,
+ 0xe184, 0x1a37, 0x2911, 0x3d12, 0x2911, 0x3d12, 0x2913, 0x3d14,
+ 0x28e5, 0xb5f0, 0x3ce5, 0x28e6, 0xe000, 0x05ab, 0xe092, 0x2801,
+ 0x3d01, 0x28e6, 0xa002, 0x3ce6, 0xa122, 0xf028, 0x3ce6, 0x28e8,
+ 0xa002, 0x3ce8, 0xe42e, 0xa200, 0x3cb2, 0xe004, 0x0054, 0xe09c,
+ 0x287f, 0xa102, 0xcc44, 0xe184, 0x1a64, 0x9e06, 0x5cb2, 0xa802,
+ 0xf0a8, 0x28b2, 0xe049, 0xe001, 0x0518, 0xe09f, 0x2b07, 0xa809,
+ 0xe419, 0x1f37, 0x2ab2, 0xa003, 0x3eb2, 0xe42e, 0xe004, 0x0518,
+ 0xe09e, 0xe004, 0x0054, 0xe09c, 0x287f, 0xa102, 0xcc44, 0xa200,
+ 0x3cb2, 0xe184, 0x1a7a, 0x2b17, 0xaf05, 0xa803, 0x5ab2, 0xe056,
+ 0x2ab2, 0xa003, 0x3eb2, 0x9f06, 0xe42e, 0x2840, 0xf078, 0xe41e,
+ 0x1f72, 0x3c3e, 0xe41e, 0x1fbc, 0xf03e, 0x283e, 0x3c84, 0xe42e,
+ 0xe161, 0x0600, 0xa200, 0x3d11, 0x3c02, 0xd022, 0x011f, 0xe184,
+ 0x1a95, 0xe41e, 0x1b77, 0x2802, 0xa002, 0x3c02, 0xa200, 0x3c9b,
+ 0xe42e, 0xba4e, 0xba40, 0xba40, 0xba40, 0xba40, 0xba46, 0xba4e,
+ 0xbc3e, 0xf0dd, 0x3c00, 0x1810, 0xf038, 0xa2fe, 0x3c10, 0x2800,
+ 0xe000, 0x0100, 0xe41e, 0x1b08, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0xa204, 0x3c9b, 0x2810, 0xe000, 0x0100, 0xe41e, 0x1b43,
+ 0xe42a, 0xe41e, 0x1003, 0xf056, 0xe41e, 0x1848, 0xa202, 0xe42e,
+ 0xa2fe, 0x3c10, 0xa200, 0xe42e, 0xe41e, 0x0c8c, 0xf12d, 0x3c01,
+ 0xe002, 0x00ff, 0xf0e0, 0x2801, 0x1829, 0xf038, 0xa2fe, 0x3c29,
+ 0x28ae, 0xa802, 0x3cae, 0x2801, 0xe41e, 0x1b08, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0xa202, 0x3c9b, 0x2829, 0xe41e, 0x1b43,
+ 0xf0da, 0xe41e, 0x111f, 0x3c65, 0xa200, 0xe41e, 0x0c40, 0xa201,
+ 0x3e9b, 0x2865, 0xf03a, 0xa202, 0xe42e, 0xe0c1, 0x0059, 0xa107,
+ 0xf079, 0x28ae, 0xa104, 0xf04a, 0x28ae, 0xa902, 0x3cae, 0xa2fe,
+ 0x3c29, 0xa200, 0xe42e, 0x2860, 0xa102, 0xf06a, 0x2499, 0x4c9a,
+ 0xe41e, 0x1b91, 0xe470, 0xe41e, 0x1baa, 0xe41e, 0x1b98, 0xe470,
+ 0x3c02, 0xe41e, 0x1b79, 0xa200, 0x3c06, 0x2802, 0xae14, 0x3404,
+ 0x3c05, 0xe41e, 0x0c3b, 0x0404, 0x0c05, 0xce20, 0xd111, 0x0000,
+ 0xe41e, 0x0c0e, 0x1806, 0xa00e, 0xaf06, 0xae02, 0xce24, 0xd113,
+ 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa, 0xe41e, 0x0c17, 0xf128,
+ 0x2004, 0x4c05, 0xe000, 0x0200, 0x3404, 0x3c05, 0xe41e, 0x0c0e,
+ 0x3c06, 0xe41e, 0x09df, 0xe41e, 0x0c0e, 0xe002, 0x0400, 0xf020,
+ 0xf59e, 0xe161, 0x0600, 0xa202, 0x3d11, 0xe41e, 0x0c0e, 0x3d01,
+ 0xe41e, 0x1b77, 0xe42e, 0x3c02, 0xe41e, 0x1b79, 0xe161, 0x0600,
+ 0x2911, 0xe42a, 0x8111, 0x2111, 0x4d11, 0x2802, 0xae14, 0x3404,
+ 0x3c05, 0x289b, 0xa102, 0xf0da, 0xe41e, 0x0c3b, 0x0404, 0x0c05,
+ 0xe41e, 0x1b91, 0xa204, 0xe41e, 0x0c40, 0xe004, 0x0090, 0xf0ce,
+ 0xe41e, 0x0c3b, 0x0404, 0x0c05, 0xe41e, 0x1b98, 0xa202, 0xe41e,
+ 0x0c40, 0xe004, 0x0080, 0xcc66, 0xcc6a, 0xcc6e, 0xa01e, 0xcc6c,
+ 0xa200, 0xcc60, 0xcc68, 0xcc70, 0xe128, 0xa202, 0xe42e, 0xa204,
+ 0xf02e, 0xa206, 0x3c0a, 0xe41e, 0x1b87, 0xce20, 0xd111, 0x0600,
+ 0xd112, 0x0004, 0x880a, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0,
+ 0x0041, 0xe005, 0x002a, 0xae11, 0xe042, 0x2a02, 0xae07, 0xe042,
+ 0xe42e, 0xce20, 0xa080, 0x3499, 0x3c9a, 0xd111, 0x0090, 0xf07e,
+ 0xce20, 0xa080, 0xe41e, 0x1ba5, 0xd111, 0x0080, 0xd112, 0x0010,
+ 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xc009, 0x3410, 0x3c11,
+ 0xc000, 0xe42e, 0xc009, 0x2410, 0x4c11, 0xc000, 0xe42e, 0x2819,
+ 0xe42a, 0xa102, 0x3c00, 0x284e, 0xe01a, 0x2abe, 0xa003, 0xa803,
+ 0xe052, 0xe418, 0x1cd9, 0xe41e, 0x1d0e, 0xe41e, 0x1d42, 0xe41e,
+ 0x1d7a, 0xe42e, 0x287e, 0xf11a, 0x2074, 0x4c75, 0x1072, 0x1c73,
+ 0x3474, 0x3c75, 0x2076, 0x4c77, 0x1072, 0x1c73, 0x3476, 0x3c77,
+ 0xa200, 0x3472, 0x3c73, 0x3c3c, 0xa200, 0x3cbe, 0x2c39, 0x2a4f,
+ 0x4e7e, 0xb612, 0x3c80, 0x2819, 0xf12a, 0xa102, 0x3c00, 0x2839,
+ 0x3c50, 0x287d, 0xe41a, 0x1c9d, 0x2840, 0xe016, 0xe418, 0x1c6e,
+ 0x2840, 0xe408, 0x1c32, 0xe41e, 0x1bf2, 0xe42e, 0x2884, 0xe41e,
+ 0x1f29, 0xe42e, 0xc420, 0xe161, 0x0202, 0x8800, 0x0022, 0xe184,
+ 0x1bfb, 0x2901, 0xf03a, 0x8131, 0xe42e, 0xe082, 0xe002, 0x0202,
+ 0xaf04, 0x3c0a, 0x2841, 0x3d09, 0x287c, 0x3d09, 0x287b, 0x3d31,
+ 0x8109, 0x2884, 0x3d11, 0xe082, 0xe000, 0x005c, 0xe094, 0xe002,
+ 0x0260, 0xaf02, 0xe000, 0x0240, 0xe092, 0x2072, 0x4c73, 0x3511,
+ 0x3d11, 0x2a41, 0xa105, 0x2112, 0x4d0a, 0xf03b, 0x2074, 0x4c75,
+ 0x3512, 0x3d12, 0x2112, 0x4d0a, 0xf035, 0x2076, 0x4c77, 0x3512,
+ 0x3d12, 0x280a, 0xe000, 0x02a0, 0xe092, 0xa206, 0x1841, 0xe01a,
+ 0x3d01, 0xe42e, 0xe161, 0x0200, 0x8800, 0x0022, 0xe184, 0x1c3f,
+ 0x2d11, 0x2b11, 0x1c7b, 0x1a7c, 0xf028, 0xf04b, 0x8111, 0x8111,
+ 0xe42e, 0xa206, 0x3d01, 0xe082, 0xe000, 0x005e, 0xe094, 0xe002,
+ 0x0260, 0xaf02, 0xe000, 0x0240, 0xe092, 0xe002, 0x0240, 0xaf02,
+ 0x3c0a, 0x2072, 0x4c73, 0x2311, 0x4f09, 0xe066, 0x3511, 0x3d11,
+ 0xf41e, 0xc420, 0xe161, 0x0202, 0x8800, 0x0022, 0xe184, 0x1c62,
+ 0x2901, 0xf03a, 0x8131, 0xe42e, 0xa206, 0x3d09, 0xa202, 0x3d09,
+ 0x2850, 0x3d31, 0x8109, 0xa2fe, 0x3d11, 0xe42e, 0xa200, 0xc420,
+ 0xe161, 0x0202, 0x8800, 0x0022, 0xe184, 0x1c78, 0x2b31, 0xe01b,
+ 0xe042, 0x1819, 0xe424, 0xa203, 0xae21, 0xe161, 0x0202, 0x8800,
+ 0x0022, 0xe184, 0x1c96, 0x2909, 0xf11a, 0x2909, 0xf0e6, 0x2901,
+ 0x1c50, 0xf036, 0x1014, 0x1c15, 0x0c50, 0xe046, 0xf062, 0xe042,
+ 0xe049, 0xe082, 0xa004, 0xe094, 0x8111, 0x8111, 0x8131, 0xa200,
+ 0x3d12, 0x2912, 0xe412, 0x1f29, 0xe42e, 0xe161, 0x0200, 0xe162,
+ 0x02f0, 0x8800, 0x0022, 0xe184, 0x1cd7, 0x283f, 0xf098, 0x2912,
+ 0x3c02, 0x2912, 0x3c03, 0xe01a, 0xb670, 0x3c04, 0xf15e, 0x2912,
+ 0xaf02, 0x3c02, 0x2912, 0x3c03, 0xe01a, 0x3c04, 0x8112, 0x290a,
+ 0xe01a, 0xae02, 0x4c04, 0x3c04, 0xa802, 0xf068, 0x2912, 0xaf02,
+ 0x3c02, 0x290a, 0x3c03, 0x2804, 0x8112, 0x8112, 0xf08a, 0x2802,
+ 0x3d11, 0x2803, 0x3d11, 0x2804, 0x3d11, 0xf0ae, 0x8111, 0x8111,
+ 0x2901, 0xa201, 0x3f11, 0xf04a, 0x2901, 0xe412, 0x1f29, 0x8111,
+ 0xe42e, 0x284f, 0xe428, 0x2819, 0xe42a, 0x2840, 0xe428, 0xe41e,
+ 0x1f16, 0x4c1a, 0xe42a, 0x2c80, 0x3c50, 0xa200, 0x3c0f, 0x2850,
+ 0xa002, 0x2214, 0x4e15, 0xa103, 0xe052, 0x3c50, 0x1c39, 0xe42a,
+ 0x281a, 0x4caa, 0xf05a, 0xe41e, 0x1c6e, 0xe41e, 0x1c59, 0x281a,
+ 0xf6f8, 0x28ae, 0xa920, 0x3cae, 0x280f, 0xa002, 0x3c0f, 0xa120,
+ 0xf062, 0xe41e, 0x05b7, 0xe41e, 0x17cd, 0xf62e, 0xe41e, 0x05b7,
+ 0xe41e, 0x19fe, 0x28ae, 0xa908, 0x3cae, 0xe42e, 0xe161, 0x0200,
+ 0xe162, 0x02f0, 0x8800, 0x0022, 0xe184, 0x1d36, 0x283f, 0xf0c8,
+ 0x2911, 0x3d12, 0x2911, 0x2b11, 0xa107, 0xb612, 0x3d12, 0xa200,
+ 0x3d12, 0x3d12, 0xf14e, 0x2911, 0xae02, 0xa002, 0x1842, 0x3d12,
+ 0x2911, 0x2b09, 0xa803, 0xb616, 0x3d0a, 0x2912, 0x8112, 0xaa02,
+ 0x3d12, 0x2911, 0x2b11, 0xa805, 0xb616, 0x3d12, 0x8111, 0xe161,
+ 0x0330, 0xe162, 0x02f0, 0xd022, 0x003f, 0xe184, 0x1d40, 0x2912,
+ 0x3d11, 0xe42e, 0x283f, 0xf0d8, 0xe41e, 0x1dbc, 0x2808, 0xe000,
+ 0x0370, 0xe096, 0xe41e, 0x1dfe, 0x2808, 0x0809, 0x3c6d, 0xe42e,
+ 0xe41e, 0x1dbc, 0xe163, 0x0370, 0x2808, 0xe41e, 0x1ebc, 0x3c08,
+ 0xe000, 0x0370, 0xe096, 0xe41e, 0x1dfe, 0x2808, 0xe000, 0x0370,
+ 0xe096, 0x2809, 0xe41e, 0x1ebc, 0x0808, 0x3c6d, 0x1842, 0xe400,
+ 0x1d79, 0x28ae, 0xa820, 0xe40a, 0x1d79, 0xe163, 0x0370, 0x2842,
+ 0xf05a, 0xa23e, 0x3d13, 0xa200, 0x3d13, 0xa23e, 0x3d13, 0xa23c,
+ 0x3d13, 0xe42e, 0x283f, 0xf158, 0xe41e, 0x1e37, 0x2808, 0xe000,
+ 0x0390, 0xe096, 0xe41e, 0x1dfe, 0x2808, 0xe000, 0x03b0, 0xe096,
+ 0xe41e, 0x1dfe, 0x2808, 0x0809, 0x3c6d, 0xe41e, 0x1eff, 0xe42e,
+ 0xe41e, 0x1e37, 0xe163, 0x0390, 0x2808, 0xe41e, 0x1ebc, 0xe163,
+ 0x03b0, 0x2808, 0xe41e, 0x1ebc, 0x3c08, 0x2808, 0xe000, 0x0390,
+ 0xe096, 0xe41e, 0x1dfe, 0x2808, 0xe000, 0x0390, 0xe096, 0x2809,
+ 0xe41e, 0x1ebc, 0x2808, 0xe000, 0x03b0, 0xe096, 0xe41e, 0x1dfe,
+ 0x2808, 0xe000, 0x03b0, 0xe096, 0x2809, 0xe41e, 0x1ebc, 0x0808,
+ 0x3c6d, 0xe41e, 0x1eff, 0xe42e, 0xe161, 0x0600, 0xa200, 0xc70f,
+ 0x3d11, 0x283f, 0xb674, 0x3c05, 0xa200, 0x3c08, 0xc420, 0xe163,
+ 0x0370, 0xa2fe, 0x3c06, 0xa203, 0xae21, 0xe013, 0xe161, 0x0202,
+ 0xe162, 0x0600, 0x8800, 0x0022, 0xe184, 0x1ded, 0x2912, 0xf168,
+ 0x2909, 0x1805, 0xf124, 0x2909, 0xf0f6, 0x2901, 0x1c39, 0xf036,
+ 0x1014, 0x1c15, 0x0c39, 0xe046, 0xf076, 0xe042, 0xe049, 0xe084,
+ 0xe002, 0x0601, 0x3c06, 0x8111, 0x8111, 0x8131, 0x2806, 0xe424,
+ 0xe000, 0x0600, 0xe094, 0xa202, 0x3d02, 0x2806, 0xae02, 0x3d13,
+ 0x2808, 0xa002, 0x3c08, 0x1819, 0xf4d8, 0xe42e, 0xe161, 0x0600,
+ 0xa200, 0xc70f, 0x3d11, 0x283f, 0xb674, 0x3c05, 0xa200, 0x3c09,
+ 0xc420, 0xa2fe, 0x3c07, 0xa221, 0xe161, 0x0202, 0xe162, 0x0600,
+ 0x8800, 0x0022, 0xe184, 0x1e26, 0x2912, 0xf118, 0x2909, 0x1805,
+ 0xf0d4, 0x2909, 0xf0a2, 0x2901, 0xe046, 0xf072, 0xe042, 0xe049,
+ 0xe084, 0xe002, 0x0601, 0x3c07, 0x8111, 0x8111, 0x8131, 0x2807,
+ 0xe424, 0xe000, 0x0600, 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02,
+ 0x3d13, 0x2809, 0xa002, 0x3c09, 0x1819, 0xf548, 0xe42e, 0xe161,
+ 0x0600, 0xa200, 0xc70f, 0x3d11, 0x283f, 0xb674, 0x3c05, 0xa200,
+ 0x3c0a, 0xc420, 0xe163, 0x0390, 0xe164, 0x03b0, 0xa2fe, 0x3c06,
+ 0x3c07, 0xe161, 0x0202, 0xe162, 0x0600, 0xe165, 0x0240, 0x8800,
+ 0x0022, 0xe184, 0x1e82, 0x2912, 0xf2c8, 0x2909, 0x1805, 0xf284,
+ 0x2909, 0xf256, 0x2115, 0x4d0d, 0x1072, 0x1c73, 0xf110, 0x2806,
+ 0xf064, 0x2115, 0x4d0d, 0x100c, 0x1c0d, 0xf196, 0x2115, 0x4d0d,
+ 0x340c, 0x3c0d, 0xe084, 0xe002, 0x0601, 0x3c06, 0xf10e, 0x2807,
+ 0xf064, 0x2115, 0x4d0d, 0x100e, 0x1c0f, 0xf092, 0x2115, 0x4d0d,
+ 0x340e, 0x3c0f, 0xe084, 0xe002, 0x0601, 0x3c07, 0x8111, 0x8111,
+ 0x8131, 0x8115, 0x8115, 0x2806, 0xf094, 0xe000, 0x0600, 0xe094,
+ 0xa202, 0x3d02, 0x2806, 0xae02, 0x3d13, 0x2807, 0xf094, 0xe000,
+ 0x0600, 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02, 0x3d14, 0x280a,
+ 0xa002, 0x3c0a, 0x1819, 0xe408, 0x1e46, 0xe086, 0xe002, 0x0390,
+ 0x3c0c, 0xe088, 0xe002, 0x03b0, 0x3c0d, 0xf09a, 0xa102, 0xcc44,
+ 0xe164, 0x03b0, 0xe184, 0x1ead, 0x2914, 0x3d13, 0x280c, 0xf09a,
+ 0xa102, 0xcc44, 0xe163, 0x0390, 0xe184, 0x1eb7, 0x2913, 0x3d14,
+ 0x280c, 0x080d, 0x3c08, 0xe42e, 0xe42a, 0xa102, 0x3c0c, 0xe086,
+ 0xe098, 0xe161, 0x0600, 0x880c, 0x0022, 0xe184, 0x1ed7, 0x2903,
+ 0xae02, 0xe000, 0x0202, 0xe094, 0x2902, 0xa802, 0xf03a, 0x2903,
+ 0x3d11, 0x2902, 0xa804, 0xf04a, 0x2903, 0xa002, 0x3d11, 0x8113,
+ 0xe082, 0xe002, 0x0600, 0xe42a, 0xa102, 0x3c0c, 0x3c0d, 0x2842,
+ 0x3c0e, 0xe161, 0x0600, 0x880c, 0x0022, 0xe184, 0x1eec, 0x2901,
+ 0xf044, 0xa802, 0x180e, 0xf06a, 0x8111, 0x280e, 0xe016, 0x3c0e,
+ 0xf71e, 0x2901, 0x3d14, 0xa2fe, 0x3d01, 0x280e, 0xe016, 0x3c0e,
+ 0x280d, 0xa102, 0x3c0d, 0xf662, 0x280c, 0xa002, 0xe42e, 0x286d,
+ 0xa102, 0xe426, 0xcc44, 0xe163, 0x0390, 0xe164, 0x03b0, 0xe184,
+ 0x1f0c, 0x2913, 0x1914, 0xe428, 0xe190, 0xe163, 0x0391, 0xe164,
+ 0x03b0, 0x290b, 0x3d14, 0x2903, 0x3d14, 0xe42e, 0x2819, 0xe426,
+ 0xa102, 0xcc44, 0xc420, 0xe161, 0x0202, 0xe184, 0x1f21, 0x2901,
+ 0xe428, 0x8131, 0xe42e, 0xe161, 0x0518, 0xa200, 0xc71f, 0x3d11,
+ 0xe42e, 0xe000, 0x0518, 0xe09e, 0x2907, 0xa80c, 0x3d07, 0xe42e,
+ 0xe000, 0x0518, 0xe09e, 0x2907, 0xa80a, 0x3d07, 0xe42e, 0x3c81,
+ 0xe000, 0x0518, 0xe09e, 0x2907, 0xa806, 0x3d07, 0x2881, 0xa002,
+ 0x3c81, 0x187f, 0xe428, 0xa200, 0x3c81, 0xe42e, 0xe161, 0x0518,
+ 0x287f, 0xa102, 0xcc44, 0xa201, 0xe184, 0x1f51, 0x2911, 0xa804,
+ 0xe01a, 0xe041, 0x1a07, 0xa202, 0xb602, 0xe42e, 0xe161, 0x0518,
+ 0x287f, 0xa102, 0xcc44, 0xa200, 0xe184, 0x1f61, 0x2b11, 0xa807,
+ 0xe01b, 0xe042, 0x18eb, 0xa102, 0xe01a, 0xe42e, 0xe161, 0x0518,
+ 0x287f, 0xa102, 0xcc44, 0xe184, 0x1f70, 0x2911, 0xe016, 0xe428,
+ 0xe190, 0xe42e, 0x2881, 0x3c00, 0x2800, 0xe000, 0x0518, 0xe092,
+ 0x2901, 0xf10a, 0x2800, 0xa002, 0x3c00, 0x187f, 0xf038, 0xa200,
+ 0x3c00, 0x2800, 0x1881, 0xf718, 0xa200, 0x3c81, 0xa2fe, 0x3c84,
+ 0xe42e, 0xa20e, 0x3d01, 0x2800, 0x3c84, 0xe42e, 0xe424, 0xc009,
+ 0x3c32, 0xc000, 0x2841, 0xc009, 0xa804, 0xe01a, 0x5832, 0xe014,
+ 0x2230, 0x4e31, 0xe051, 0x3630, 0x3e31, 0xc000, 0x2841, 0xc009,
+ 0xa802, 0x5832, 0xe014, 0x222e, 0x4e2f, 0xe051, 0x362e, 0x3e2f,
+ 0xc000, 0xe42e, 0xc009, 0x3c32, 0xa200, 0x2a32, 0xf0c5, 0x222e,
+ 0x4e2f, 0x5e32, 0xa803, 0xe056, 0x2230, 0x4e31, 0x5e32, 0xa803,
+ 0xae03, 0xe056, 0xc000, 0xe42e, 0xe424, 0xc009, 0x3c32, 0xa202,
+ 0x5832, 0x2230, 0x4e31, 0xe055, 0x3630, 0x3e31, 0x222e, 0x4e2f,
+ 0xe055, 0x362e, 0x3e2f, 0xc000, 0xe42e, 0xe0c1, 0x0044, 0xa80f,
+ 0xe056, 0xe42e, 0xa200, 0xe41e, 0x1fcd, 0xe42e, 0xe0c1, 0x0044,
+ 0xaf0d, 0xae03, 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044,
+ 0xaf17, 0xa803, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105,
+ 0xf039, 0xa213, 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d,
+ 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166, 0x0640,
+ 0xe167, 0x0500, 0x287f, 0xf166, 0xa102, 0xcc44, 0xe184, 0x2010,
+ 0xa200, 0xe41e, 0x1fcd, 0xaf04, 0xe41e, 0x1fd6, 0xae20, 0x2e66,
+ 0xe056, 0x9f17, 0x2057, 0x4c58, 0xae08, 0x9f17, 0xe41e, 0x2016,
+ 0xe190, 0xe190, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x2116, 0x4d16,
+ 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0xe42e,
+ 0xe0c0, 0x0044, 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa860,
+ 0xe42a, 0xe0c0, 0x0061, 0xa83e, 0xa203, 0xe0c3, 0x040d, 0xcca4,
+ 0xc785, 0xe018, 0xe000, 0x0500, 0xe09e, 0xe0c1, 0x0420, 0xa803,
+ 0xf7db, 0xa200, 0xe41e, 0x1fd2, 0xa80e, 0xaf04, 0xe41e, 0x1fd6,
+ 0xe41e, 0x1fde, 0xe40b, 0x2049, 0xa81e, 0xe41e, 0x1fe3, 0xae09,
+ 0xe056, 0xae20, 0xe0c1, 0x006e, 0xe009, 0x1fff, 0xe056, 0x9f17,
+ 0xe0c0, 0x0060, 0xa822, 0xa122, 0xf04a, 0x2057, 0x4c58, 0xf03e,
+ 0x2058, 0x4c57, 0xae08, 0x9f17, 0xe0c0, 0x0062, 0x9f17, 0xe0c0,
+ 0x0063, 0x9f17, 0xe0c0, 0x0064, 0x9f17, 0xa201, 0xe0c3, 0x040d,
+ 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11, 0xe042,
+ 0xce20, 0xd111, 0x0640, 0xd112, 0x00c0, 0x88ec, 0x0113, 0xca29,
+ 0xf7f9, 0xe190, 0xe42e, 0xa2fe, 0x3c89, 0xa200, 0x3c88, 0xe42e,
+ 0x2856, 0x3c89, 0x2889, 0xf032, 0xa200, 0x3c88, 0xa200, 0x3c8d,
+ 0x3c8e, 0x2857, 0x3c8b, 0x2858, 0x3c8c, 0x2888, 0xe42a, 0x2889,
+ 0xe424, 0x2889, 0xe0c2, 0x0143, 0x288a, 0xe0c2, 0x0144, 0xa200,
+ 0xe0c2, 0x017f, 0xe0c2, 0x0149, 0xe41e, 0x1fcd, 0xe0c2, 0x017f,
+ 0x288b, 0xa102, 0xae20, 0x4c8c, 0xa102, 0xe0c2, 0x0142, 0xa200,
+ 0xae20, 0x2a87, 0xe042, 0xe0c2, 0x014e, 0xe42e, 0x2889, 0x2a8e,
+ 0x1a8c, 0xe423, 0x288d, 0xae0e, 0x4c8e, 0xa203, 0xb615, 0x3e8f,
+ 0x2a8f, 0xae03, 0xa903, 0xae1d, 0xe056, 0xe0c1, 0x014b, 0xf7e9,
+ 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0x2a8d, 0xa003, 0x3e8d,
+ 0x1a8b, 0xf065, 0x2a8e, 0xa003, 0x3e8e, 0xa201, 0x3e8d, 0xe42e,
+ 0x2888, 0xf15a, 0x288e, 0x188c, 0xf042, 0xe41e, 0x20ae, 0xf7be,
+ 0xe0c0, 0x014b, 0xf7e8, 0xa204, 0xae1c, 0xe0c2, 0x014d, 0xa202,
+ 0xe0c2, 0x014a, 0xe190, 0xe0c0, 0x014b, 0xf7e8, 0x2885, 0x3c89,
+ 0xe42e, 0xe41e, 0x21c9, 0xe41e, 0x2267, 0xe41e, 0x0f47, 0xe41e,
+ 0x2173, 0xe41e, 0x24b1, 0xa200, 0x3c59, 0x3c52, 0xe41e, 0x2368,
+ 0x2c59, 0x1c44, 0xe402, 0x216e, 0xe41e, 0x0b72, 0xf12a, 0xa102,
+ 0xf15a, 0xa108, 0xf0e4, 0xf12a, 0xa10a, 0xe40a, 0x215d, 0xa102,
+ 0xe40a, 0x215d, 0xa102, 0xe40a, 0x214f, 0xa10e, 0xe404, 0x2162,
+ 0xe41e, 0x0951, 0xf6ae, 0x2c44, 0x3c52, 0xe41e, 0x098a, 0x284e,
+ 0xe01a, 0x2a92, 0xe01b, 0xe05a, 0xe408, 0x2162, 0x284f, 0x1893,
+ 0xe408, 0x2162, 0xe41e, 0x0bc5, 0xe41e, 0x22e7, 0xf56a, 0x2894,
+ 0xf07a, 0x2c44, 0x3c0d, 0xe41e, 0x23af, 0xe40e, 0x216a, 0xe41e,
+ 0x0be2, 0x284e, 0x3c92, 0x284f, 0x3c93, 0xe41e, 0x0d68, 0xe40a,
+ 0x20fc, 0xa201, 0x3e94, 0x2c52, 0x3c0d, 0x1c59, 0xe404, 0x20fc,
+ 0xe410, 0x23af, 0x2c52, 0x1c44, 0xe402, 0x216e, 0xe41e, 0x05d4,
+ 0xf05a, 0xe41e, 0x05f3, 0xe40e, 0x216e, 0xe40e, 0x20f6, 0xe41e,
+ 0x098a, 0xba0e, 0xe002, 0x00ff, 0xf058, 0xba4e, 0xe41e, 0x0b96,
+ 0xf798, 0xe41e, 0x0cd5, 0xe40e, 0x20fc, 0xe41e, 0x08bd, 0xf03a,
+ 0xe41e, 0x01db, 0x2c59, 0x1c44, 0xe402, 0x216a, 0x2c44, 0x3c0d,
+ 0xe41e, 0x23af, 0x2892, 0x3c4e, 0x2893, 0x3c4f, 0xe41e, 0x2575,
+ 0xcbcc, 0xf7f8, 0xe42e, 0x2822, 0xae02, 0x4c37, 0xae0a, 0x2a36,
+ 0xa83f, 0xe056, 0xae0a, 0x2a32, 0xa83f, 0xe056, 0xae02, 0x4c1d,
+ 0xae02, 0x4c2d, 0xae02, 0x4c43, 0xcf80, 0x284e, 0xe01a, 0xae02,
+ 0x4c1b, 0xae02, 0x4c1d, 0xae02, 0x4c43, 0xcfc2, 0x2857, 0xa102,
+ 0xae02, 0x4c34, 0xae02, 0x4c3f, 0xae02, 0x4c42, 0xae02, 0x4c43,
+ 0xcf00, 0xd1d3, 0x000b, 0xd185, 0x0001, 0x246e, 0x4c6f, 0xcfc6,
+ 0xd1e5, 0x0001, 0xc420, 0xe161, 0x0201, 0xa200, 0xd022, 0x000f,
+ 0xe184, 0x21ac, 0x2b31, 0xae02, 0xb42a, 0xcfe8, 0x2072, 0x4c73,
+ 0xcfea, 0x2074, 0x4c75, 0xcfec, 0x2076, 0x4c77, 0xcfee, 0xe004,
+ 0x0060, 0xcbcf, 0xa803, 0xf03b, 0xe004, 0x0070, 0xce30, 0xe161,
+ 0x0260, 0xd022, 0x001f, 0xe184, 0x21c7, 0x2111, 0x4d11, 0xce32,
+ 0xe42e, 0xa200, 0xe161, 0x07f6, 0xc707, 0x3d11, 0x2867, 0x4c68,
+ 0xf028, 0xe42e, 0xe161, 0x07f6, 0xa20e, 0x3c00, 0x2867, 0xf39a,
+ 0x2869, 0x5c00, 0xa802, 0xf108, 0x2a00, 0xa10f, 0xf049, 0xa202,
+ 0x3d11, 0xf17e, 0x2a00, 0xa109, 0xf049, 0xa204, 0x3d11, 0xf11e,
+ 0xa20a, 0x3d11, 0xf0ee, 0x286b, 0x5c00, 0xa802, 0xf08a, 0x2800,
+ 0xa10a, 0xa205, 0xf024, 0xa203, 0x3f11, 0xf03e, 0xa206, 0x3d11,
+ 0x2800, 0xa102, 0x3c00, 0xa102, 0xf5c8, 0x2869, 0xe00c, 0x00ff,
+ 0x2a6b, 0xe056, 0x5c00, 0xa802, 0xf06a, 0xa203, 0x2800, 0xb655,
+ 0x3f11, 0xf03e, 0xa206, 0x3d11, 0x2800, 0xa102, 0x3c00, 0xf6ea,
+ 0xe161, 0x07f6, 0xa20e, 0x3c00, 0x2868, 0xe42a, 0x286a, 0x5c00,
+ 0xa802, 0xf188, 0x2800, 0xa10e, 0xf088, 0x2a67, 0xf03b, 0x8111,
+ 0xf1e9, 0xa202, 0x3d11, 0xf1be, 0x2a00, 0xa109, 0xf089, 0x2a67,
+ 0xf03b, 0x8111, 0xf149, 0xa204, 0x3d11, 0xf11e, 0xa20a, 0x3d11,
+ 0xf0ee, 0x286c, 0x5c00, 0xa802, 0xf08a, 0x2800, 0xa10a, 0xa205,
+ 0xf024, 0xa203, 0x3f11, 0xf03e, 0xa208, 0x3d11, 0x2800, 0xa102,
+ 0x3c00, 0xa102, 0xf548, 0x286a, 0x5c00, 0x4c67, 0xa802, 0xf068,
+ 0xa203, 0x2800, 0xb655, 0x3f11, 0xf16e, 0x286c, 0xe00c, 0x00ff,
+ 0x2a6a, 0xe052, 0x5c00, 0xa802, 0xf0c8, 0x286a, 0x5c00, 0xa802,
+ 0xf06a, 0xa203, 0x2800, 0xb655, 0x3f11, 0xf05e, 0x8111, 0xf03e,
+ 0xa208, 0x3d11, 0x2800, 0xa102, 0x3c00, 0xf5ea, 0xe42e, 0xa202,
+ 0xe0c2, 0x013c, 0xa200, 0x3c00, 0x3c01, 0xe161, 0x07f6, 0xe162,
+ 0x04c8, 0x2911, 0xa104, 0xf066, 0xa106, 0xe40a, 0x22b1, 0xa004,
+ 0xf112, 0xa004, 0xae06, 0x3c04, 0x2800, 0xa10c, 0xf064, 0x2804,
+ 0xae04, 0xe000, 0x0018, 0x3c04, 0xe004, 0x0450, 0x0804, 0x3c04,
+ 0xf29e, 0xa201, 0x3e02, 0xa211, 0x3e03, 0xf04a, 0xe005, 0x00e0,
+ 0x3e02, 0x2800, 0x2a00, 0xae09, 0xa10c, 0xf05a, 0xa102, 0xf058,
+ 0xe005, 0x00a0, 0xa240, 0x3c03, 0x0a02, 0x3e02, 0xe0c0, 0x0041,
+ 0xe005, 0x0034, 0xae11, 0xe042, 0x0802, 0xce20, 0xd111, 0x0600,
+ 0x2803, 0xce24, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe004, 0x0600,
+ 0x3c04, 0x2800, 0xa10c, 0xa20f, 0xf024, 0xa23f, 0xcc45, 0x2804,
+ 0xe096, 0xe184, 0x22cb, 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b03,
+ 0xaf11, 0xe0c3, 0x013f, 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b13,
+ 0xe009, 0x00ff, 0xe0c3, 0x013f, 0xe162, 0x04c8, 0x2a01, 0xe001,
+ 0x0010, 0x3e01, 0x2800, 0xa002, 0x3c00, 0xa10c, 0xe404, 0x2271,
+ 0xe162, 0x04d8, 0xe40a, 0x2271, 0xe001, 0x0030, 0x3e01, 0xa104,
+ 0xe408, 0x2271, 0xe16a, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa200,
+ 0x3c94, 0xe41e, 0x0c8c, 0xe40d, 0x2365, 0x2a43, 0xe419, 0x0e70,
+ 0x1c44, 0xe402, 0x2365, 0xbc12, 0xe40d, 0x2365, 0xa10a, 0xb4a8,
+ 0xa104, 0xe400, 0x2365, 0xbdfe, 0xe40d, 0x2365, 0x1829, 0xf03a,
+ 0xa202, 0x3c94, 0x7413, 0x1839, 0xf03a, 0xa202, 0x3c94, 0x281b,
+ 0xf0d8, 0xba40, 0x183f, 0xf03a, 0xa202, 0x3c94, 0x283f, 0xf06a,
+ 0xba40, 0x1842, 0xf03a, 0xa202, 0x3c94, 0x284f, 0xf09a, 0xe41e,
+ 0x0c8c, 0xe40d, 0x2365, 0x1c45, 0xf03a, 0xa202, 0x3c94, 0x2816,
+ 0xa102, 0xf034, 0xf1da, 0xf3ae, 0x7417, 0xe160, 0x0903, 0x1d00,
+ 0xf03a, 0xa202, 0x3c94, 0x283f, 0xe016, 0x442a, 0xf2fa, 0xe41e,
+ 0x0ca6, 0xf34d, 0xe161, 0x0904, 0xe162, 0x0905, 0x1101, 0x1d02,
+ 0xf03a, 0xa202, 0x3c94, 0xf22e, 0xe418, 0x0ca6, 0xf1fe, 0x2818,
+ 0xf1d8, 0xe41e, 0x0ca6, 0xf22d, 0xe163, 0x0903, 0xe164, 0x0904,
+ 0x1103, 0x1d04, 0xf03a, 0xa202, 0x3c94, 0x283f, 0xe016, 0x442a,
+ 0xf0da, 0xe41e, 0x0ca6, 0xf12d, 0xe165, 0x0905, 0xe166, 0x0906,
+ 0x1105, 0x1d06, 0xf03a, 0xa202, 0x3c94, 0xe41e, 0x0c0e, 0xae06,
+ 0xc873, 0xe046, 0xf034, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xa200, 0xe41e, 0x0c1b, 0xe41e, 0x0c17, 0xf0c8, 0xa202, 0xe41e,
+ 0x08df, 0xe41e, 0x0c1b, 0xe41e, 0x08e7, 0xd036, 0x00ff, 0xd037,
+ 0x0080, 0xe16a, 0x2c52, 0x3c59, 0xa200, 0x3c0c, 0xe41e, 0x23c6,
+ 0x282d, 0xf138, 0x2c59, 0x1c44, 0xf0d2, 0xe41e, 0x240d, 0xf1ed,
+ 0x2843, 0xe418, 0x240d, 0xf1ad, 0xcb86, 0xa102, 0xf740, 0xc894,
+ 0xf728, 0xe41e, 0x0cd5, 0xe42e, 0xe41e, 0x23f9, 0x2c59, 0x1c44,
+ 0xf0a2, 0xe41e, 0x240d, 0xf0ad, 0x2843, 0xe418, 0x240d, 0xf06d,
+ 0xbb60, 0xf75a, 0xe41e, 0x0cd7, 0xe42e, 0xe16a, 0xe41e, 0x0b72,
+ 0xa116, 0xe428, 0xe41e, 0x08bd, 0xe418, 0x01db, 0xe42e, 0x284f,
+ 0xe016, 0x3c38, 0xa202, 0x3c0c, 0xe41e, 0x23c6, 0xa200, 0x3c0c,
+ 0x2c59, 0x180d, 0xf0b2, 0xe41e, 0x244d, 0x2843, 0xe418, 0x244d,
+ 0x2c53, 0xa002, 0x0843, 0x3c53, 0xf74e, 0xe42e, 0x2832, 0x1836,
+ 0xe01a, 0xae04, 0x4c4b, 0xae0a, 0x4c4c, 0xae0a, 0x4c4d, 0xcf30,
+ 0x2849, 0xae0a, 0x4c48, 0xae04, 0x4c38, 0xcf82, 0xd1c3, 0x0000,
+ 0x284a, 0xcf96, 0x2849, 0xae08, 0x4c48, 0xae02, 0x4c7a, 0xae02,
+ 0x4c79, 0xae02, 0x4c78, 0xae02, 0x4c46, 0xae04, 0x4c38, 0xcfc4,
+ 0x885e, 0x01fa, 0x2470, 0x4c71, 0xcfc8, 0x280c, 0xf03a, 0x2838,
+ 0xf03a, 0xd188, 0x0001, 0x2838, 0xa104, 0xe428, 0xd1e5, 0x0002,
+ 0xe42e, 0xc868, 0xa80e, 0x3c9e, 0x749e, 0xe004, 0x01fe, 0xcc86,
+ 0xba50, 0xcc88, 0x2838, 0xe01a, 0x0847, 0xae0c, 0x4c4a, 0xcc82,
+ 0xd040, 0x0003, 0xc884, 0xf7f8, 0xe42e, 0xd185, 0x0002, 0xd1d0,
+ 0x003f, 0xe190, 0xe180, 0xe41e, 0x0c1f, 0xe418, 0x0c7f, 0xe181,
+ 0xcba0, 0xa810, 0xcba3, 0xe409, 0x2443, 0xf7b8, 0xe41e, 0x252d,
+ 0xcbe0, 0xf7f8, 0x285a, 0xe41a, 0x2554, 0xcba0, 0xcba3, 0xe409,
+ 0x2443, 0xf7c8, 0xd186, 0x0001, 0xd185, 0x0004, 0xe41e, 0x256b,
+ 0xcb06, 0x3c59, 0xcb8a, 0xaf04, 0x442d, 0xf08a, 0xe004, 0x01fe,
+ 0xcc86, 0xba50, 0xcc88, 0xd040, 0x0001, 0xe41e, 0x0c0e, 0xae06,
+ 0xc873, 0xe046, 0xe422, 0xd1d0, 0x0000, 0xd1d1, 0x0000, 0xcb1c,
+ 0xf7f8, 0xcbe0, 0xf7f8, 0xe16b, 0xe42e, 0xd185, 0x0002, 0xd186,
+ 0x0000, 0xd1c2, 0x0001, 0xd1c5, 0x0000, 0xd1c4, 0x0000, 0xd1d0,
+ 0x000e, 0xcba0, 0xf7f8, 0x2054, 0x4c55, 0xf098, 0xd1c2, 0x0000,
+ 0xd1c5, 0x0003, 0xd1c4, 0x0003, 0xd1c8, 0x0000, 0xd1d0, 0x0020,
+ 0xe41e, 0x252d, 0xa200, 0xe0c2, 0x012a, 0xcbe0, 0xf7f8, 0x285a,
+ 0xe41a, 0x2554, 0xcba0, 0xf7f8, 0xd186, 0x0001, 0xd185, 0x0004,
+ 0xe41e, 0x256b, 0xcb06, 0x3c59, 0xe42e, 0xa200, 0xe0c2, 0x0100,
+ 0xe0c2, 0x013d, 0xe0c2, 0x0128, 0xcc8e, 0x2a88, 0xb692, 0xae08,
+ 0xa91c, 0xe0c2, 0x017c, 0xa218, 0xe0c2, 0x017d, 0xa200, 0xe41e,
+ 0x1fcd, 0x2a22, 0xe017, 0xae09, 0xe056, 0xa203, 0xae11, 0xe056,
+ 0xe0c2, 0x0213, 0xa200, 0xe0c2, 0x0215, 0xa202, 0xe0c2, 0x0210,
+ 0x2057, 0x4c58, 0xae08, 0xe0c2, 0x0101, 0xe0c2, 0x0205, 0xa200,
+ 0xe41e, 0x1fcd, 0x2a22, 0xe017, 0xae07, 0xe056, 0xe0c2, 0x0102,
+ 0xe42e, 0xe0c0, 0x0050, 0xe049, 0xe008, 0x007f, 0x3c08, 0xaf11,
+ 0xe009, 0x007f, 0x3e09, 0x4608, 0x3e08, 0xa200, 0x2a08, 0xa803,
+ 0xf03b, 0xe00a, 0x0002, 0x2a08, 0xa805, 0xf02b, 0xa912, 0x2a08,
+ 0xa809, 0xf02b, 0xa940, 0x2a08, 0xa811, 0xf02b, 0xa980, 0xe0c2,
+ 0x040c, 0xe0c1, 0x0046, 0xe004, 0x0002, 0xae10, 0xe042, 0x2a09,
+ 0xa803, 0xf05b, 0xe161, 0x05cb, 0x2111, 0x4d11, 0xcf0e, 0xe0c1,
+ 0x0046, 0xe004, 0x004a, 0xae10, 0xe042, 0x2a09, 0xa805, 0xf05b,
+ 0xe161, 0x05cd, 0x2111, 0x4d11, 0xe0c2, 0x0103, 0xe0c1, 0x0046,
+ 0xe004, 0x007a, 0xae10, 0xe042, 0x2a09, 0xa809, 0xf05b, 0xe161,
+ 0x05cf, 0x2111, 0x4d11, 0xe0c2, 0x0211, 0xe0c1, 0x0046, 0xe004,
+ 0x007a, 0xe000, 0x0040, 0xae10, 0xe042, 0x2a09, 0xa811, 0xf05b,
+ 0xe161, 0x05d1, 0x2111, 0x4d11, 0xe0c2, 0x0212, 0x2843, 0xae02,
+ 0x4c3f, 0xae02, 0x4c42, 0xe0c2, 0x0104, 0xe0c2, 0x0204, 0xa200,
+ 0xe0c2, 0x0208, 0xe41e, 0x2579, 0xa20e, 0xe0c2, 0x0312, 0xe0c0,
+ 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414, 0xe41a, 0x25a1, 0xe41e,
+ 0x0274, 0xa202, 0xe0c2, 0x0106, 0xe42e, 0xcb02, 0xaf02, 0xe0c2,
+ 0x0113, 0xe0c2, 0x030d, 0xcb15, 0xae03, 0xe056, 0xe0c2, 0x022b,
+ 0xcb94, 0xe0c2, 0x0115, 0xcba4, 0xe0c2, 0x012a, 0xcb8a, 0xe0c2,
+ 0x0114, 0xa802, 0x3c5a, 0xe42a, 0xcb14, 0xae0a, 0xcb19, 0xe056,
+ 0xe0c2, 0x0120, 0xcb8c, 0xe0c2, 0x0121, 0xcb8e, 0xe0c2, 0x0122,
+ 0xcb90, 0xe0c2, 0x0123, 0xe42e, 0xcbd0, 0xe0c2, 0x030c, 0xcbd2,
+ 0xe0c2, 0x0309, 0xcbd8, 0xe0c2, 0x030a, 0xcbda, 0xe0c2, 0x030b,
+ 0x285e, 0xe0c2, 0x0320, 0xe42a, 0x285f, 0xe0c2, 0x0321, 0xcbf6,
+ 0xe0c2, 0x0322, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2,
+ 0x0110, 0x2888, 0xe418, 0x20ae, 0xe42e, 0xe0c0, 0x0111, 0xf7e8,
+ 0xe42e, 0xa202, 0xe0c2, 0x0302, 0xd022, 0x000f, 0xe163, 0x0380,
+ 0x2883, 0xb608, 0xe184, 0x2587, 0x9f03, 0x8113, 0x8113, 0x8113,
+ 0x2819, 0xf14a, 0xa102, 0xcc44, 0xe160, 0x0004, 0xe161, 0x0203,
+ 0xe163, 0x0380, 0xe184, 0x259b, 0x2931, 0xf022, 0x2883, 0xb608,
+ 0x9f03, 0x8113, 0x8113, 0x8113, 0xe190, 0xa200, 0xe0c2, 0x0302,
+ 0xe42e, 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17,
+ 0xe009, 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101,
+ 0xe0c3, 0x015d, 0xe162, 0x02b0, 0x2912, 0xaf02, 0x3c0a, 0x2912,
+ 0xaf02, 0x3c0b, 0x2838, 0xa104, 0xf068, 0xe162, 0x02d0, 0x2912,
+ 0xaf02, 0x3c0b, 0x280a, 0x180b, 0xf0d8, 0xe162, 0x02b0, 0xd022,
+ 0x001f, 0xe184, 0x25d0, 0x2912, 0xaf02, 0x3c0b, 0x180a, 0xf028,
+ 0xe190, 0x280b, 0xae02, 0xe41e, 0x0f8a, 0xe049, 0xae11, 0x280a,
+ 0xae02, 0xe41e, 0x0f8a, 0xe055, 0xae21, 0xe167, 0x01a2, 0x2907,
+ 0xaf10, 0xe008, 0x001f, 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2,
+ 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0,
+ 0x0151, 0xf7e8, 0xe42e, 0xf044, 0xe41e, 0x1faa, 0xe42e, 0xa200,
+ 0xe42e, 0xe165, 0x07e8, 0x284f, 0x3d15, 0x284e, 0x3d15, 0x2838,
+ 0x3d15, 0x287e, 0x3d15, 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c1e, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1857, 0xf074, 0xe009, 0x00ff, 0x1a58, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x0c35, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x036a, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0370,
+ 0xe40e, 0x0374, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x0398, 0xe40e, 0x00a4,
+ 0xe41e, 0x03b9, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x0378,
+ 0xe41e, 0x0eb9, 0xe41e, 0x045c, 0xe41e, 0x0eb8, 0xe41e, 0x02ad,
+ 0xe40e, 0x00a4, 0xe41e, 0x0378, 0xe41e, 0x0535, 0xe40e, 0x00a4,
+ 0xe41e, 0x053a, 0xe40e, 0x00a4, 0xe41e, 0x056b, 0xe40e, 0x00a4,
+ 0x2811, 0xa184, 0x2a24, 0xa805, 0xe056, 0xe42a, 0xe0c0, 0x0040,
+ 0xa201, 0xae17, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe167, 0x05cb, 0xe166, 0x0064,
+ 0xd022, 0x0003, 0xe184, 0x0396, 0x9e16, 0x3517, 0x3d17, 0xe42e,
+ 0xa200, 0x3c86, 0x3cad, 0x3cbe, 0xe41e, 0x042d, 0xe41e, 0x0558,
+ 0xe41e, 0x0672, 0xe41e, 0x08d6, 0xe41e, 0x03ba, 0xf0dd, 0xe41e,
+ 0x088b, 0xe41a, 0x03f9, 0xa2fe, 0x3c10, 0x3c83, 0xe41e, 0x0521,
+ 0xf03a, 0xa202, 0x3c86, 0xe41e, 0x0b0e, 0xe41e, 0x06e2, 0xe16a,
+ 0xe42e, 0xe42e, 0xa23e, 0x3cf0, 0xe41e, 0x088b, 0xe408, 0x03d3,
+ 0xe41e, 0x0b48, 0xa10e, 0xf13a, 0xa104, 0xf2ba, 0xa102, 0xf05a,
+ 0xf04a, 0xe41e, 0x0923, 0xf6fe, 0xe41e, 0x088b, 0xe408, 0x03d3,
+ 0xe41e, 0x095c, 0xf68e, 0xe41e, 0x01db, 0xf22e, 0xe41e, 0x18ab,
+ 0xe41e, 0x095c, 0xa2fe, 0x3c10, 0xe41e, 0x1ec1, 0xf5ca, 0x2800,
+ 0x3c10, 0xe41e, 0x1ed9, 0xe092, 0xa200, 0xe41e, 0x0c19, 0xa200,
+ 0x3c9b, 0xe41e, 0x1870, 0xa2fe, 0x3c10, 0xe082, 0xf096, 0xe42e,
+ 0xe41e, 0x18b2, 0xe41e, 0x18ab, 0xe41e, 0x0923, 0xf44e, 0xe16b,
+ 0xe42e, 0xe41e, 0x0b48, 0xf0da, 0xa102, 0xe40a, 0x0412, 0xa108,
+ 0xf084, 0xf11a, 0xa108, 0xf0f6, 0xa102, 0xf06a, 0xa102, 0xf04a,
+ 0xe41e, 0x0923, 0xf6fe, 0xe41e, 0x088b, 0xe408, 0x0412, 0xe41e,
+ 0x095c, 0xf68e, 0xe41e, 0x0b3f, 0xe41e, 0x0b36, 0xe42e, 0xa200,
+ 0xe161, 0x0100, 0xe188, 0x0aff, 0x3d11, 0xe0c0, 0x0041, 0xe005,
+ 0x0034, 0xae11, 0xe042, 0xce20, 0xd111, 0x0100, 0xd112, 0x0180,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe41e, 0x0417, 0xe41e,
+ 0x0222, 0xe41e, 0x0148, 0xa204, 0x3cae, 0xe16a, 0xd130, 0x0000,
+ 0xd03a, 0x0000, 0xd04c, 0x0000, 0xd008, 0x0000, 0xd022, 0x0000,
+ 0xa200, 0xe0c2, 0x0100, 0xe0c2, 0x0128, 0xa2fe, 0x3c25, 0x3c26,
+ 0x3c27, 0x3c28, 0x3c10, 0x3c29, 0x3c56, 0xe161, 0x05c7, 0x3511,
+ 0x3d11, 0x3511, 0x3d11, 0xe41e, 0x0c04, 0xe41e, 0x1eb0, 0xe41e,
+ 0x2179, 0xe41e, 0x1a59, 0xe42e, 0xa200, 0x3c86, 0xe41e, 0x0672,
+ 0xe41e, 0x1e75, 0xe41e, 0x04d4, 0xe41e, 0x08e0, 0xe41e, 0x0667,
+ 0xe41e, 0x0521, 0xe40a, 0x04d1, 0xe41e, 0x17aa, 0xe408, 0x0476,
+ 0xe41e, 0x088b, 0xe408, 0x04d1, 0xe40e, 0x04b8, 0xe41e, 0x020f,
+ 0xe404, 0x04b8, 0xe41e, 0x0667, 0xa202, 0x3c86, 0x28bd, 0xf09a,
+ 0xe41e, 0x065e, 0xa2fe, 0x3c84, 0xa202, 0x3cb4, 0xe40e, 0x04b8,
+ 0xe41e, 0x05c6, 0xf05a, 0xe41e, 0x05e5, 0xe40e, 0x04aa, 0xe41e,
+ 0x1ea7, 0x2884, 0xe414, 0x065e, 0x2884, 0xe404, 0x04b8, 0xe41e,
+ 0x2300, 0xe41e, 0x05b9, 0x28a5, 0xf0e8, 0x2a4e, 0x4e40, 0x2884,
+ 0xe41b, 0x217f, 0x284e, 0xe418, 0x1fe8, 0x2840, 0xe41a, 0x1cfb,
+ 0x287e, 0x3c82, 0x2840, 0xf058, 0xe41e, 0x0641, 0xe41e, 0x0646,
+ 0xe41e, 0x064b, 0x2840, 0xaa02, 0x443f, 0xf03a, 0xe40e, 0x046c,
+ 0xe41e, 0x22e7, 0xe41e, 0x18b2, 0xe41e, 0x08a5, 0xf04a, 0xe41e,
+ 0x1e2a, 0x3ce9, 0xe41e, 0x1d24, 0x3c85, 0x2885, 0x3c56, 0x2884,
+ 0xf024, 0x3c83, 0xe41e, 0x06e2, 0xe41e, 0x1e90, 0xe41e, 0x0b0e,
+ 0xe42e, 0xa202, 0x3c86, 0xf65e, 0xa200, 0xcc4a, 0xcc4c, 0x3c53,
+ 0x3c62, 0x3cbd, 0x3cae, 0x3cb4, 0x3ca5, 0x3c97, 0x28ad, 0xe41a,
+ 0x0638, 0xe41e, 0x0641, 0xe41e, 0x0646, 0xe41e, 0x064b, 0xe41e,
+ 0x0ec4, 0xa2fe, 0x3cba, 0x3cbb, 0x3cb9, 0xa200, 0x3cbc, 0xa204,
+ 0x3cf0, 0xa2fc, 0x3c84, 0xa2fa, 0x3c85, 0xa2fe, 0xc009, 0x3c3f,
+ 0x3c40, 0x3c41, 0x3c42, 0xc000, 0xe42e, 0x2811, 0xa184, 0xf03a,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0xcc44, 0xd152, 0x0000,
+ 0xd130, 0x0000, 0xd1e0, 0x0003, 0xd1ff, 0x03b0, 0xd1fd, 0x03d0,
+ 0xd199, 0x0224, 0xd1fc, 0x0720, 0xd03a, 0x0000, 0xd04c, 0x0000,
+ 0xd008, 0x0000, 0xd14b, 0x0200, 0x28b1, 0xcfce, 0xe41e, 0x025f,
+ 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf0da, 0xe41e, 0x088b, 0xf04a,
+ 0xe41e, 0x01db, 0xf09e, 0xe41e, 0x21bc, 0x2a84, 0xb7f5, 0x3e84,
+ 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe41e, 0x0672, 0xe41e,
+ 0x2292, 0xe42e, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0000, 0xd112,
+ 0x0080, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe0c0, 0x0061, 0xe41e,
+ 0x0be2, 0xa202, 0xe41e, 0x0bec, 0xe41e, 0x09e6, 0xe128, 0xe0c0,
+ 0x0060, 0xf048, 0xe41e, 0x1ec1, 0xf03e, 0xe41e, 0x1eec, 0xe42e,
+ 0xe0c0, 0x0040, 0xa201, 0xae17, 0xe042, 0xe005, 0x4f00, 0xae03,
+ 0xe042, 0xce20, 0xd111, 0x0450, 0xd112, 0x00c8, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0xe180, 0xa2fe, 0x3c29, 0x3c10, 0xe41e,
+ 0x2179, 0xe41e, 0x05a9, 0x2821, 0xf05a, 0x2816, 0xa104, 0xf02a,
+ 0x28ea, 0x3ce9, 0xa200, 0x3c81, 0x3ce7, 0x3ce6, 0x3ce8, 0x3ce5,
+ 0xe166, 0x05ab, 0xc710, 0x3d16, 0xe167, 0x0518, 0xe166, 0x0054,
+ 0xa200, 0x3cb2, 0x287f, 0xa102, 0xcc44, 0xe184, 0x0596, 0x9e06,
+ 0x5cb2, 0xa802, 0xb690, 0x3d17, 0x28b2, 0xa002, 0x3cb2, 0xe190,
+ 0xa200, 0x3c60, 0xe41e, 0x0c19, 0xe42e, 0x24b5, 0x4cb6, 0xce20,
+ 0xd111, 0x0600, 0xd112, 0x0004, 0xd113, 0x0000, 0xca28, 0xf7f8,
+ 0xe42e, 0xe161, 0x0200, 0xa200, 0xc73f, 0x3d11, 0x3cb2, 0xd022,
+ 0x001f, 0xe184, 0x05b7, 0xe41e, 0x217f, 0x28b2, 0xa002, 0x3cb2,
+ 0xe42e, 0x2abc, 0x4e4f, 0x3ebc, 0x28a1, 0x3cb9, 0x2a3f, 0xf06b,
+ 0x2a42, 0xf039, 0x3cba, 0xf02e, 0x3cbb, 0xe42e, 0x28a5, 0xf1c8,
+ 0x28a5, 0xe016, 0x4440, 0xf168, 0xe41e, 0x0620, 0xf07a, 0xe41e,
+ 0x0625, 0xf07a, 0x284f, 0xf0e8, 0xf0fe, 0xe41e, 0x062a, 0xf04a,
+ 0x2838, 0xf0a8, 0xf07e, 0xe41e, 0x0631, 0xf04a, 0x284e, 0xf04a,
+ 0xf01e, 0xa200, 0xe42e, 0xa202, 0xe42e, 0xa202, 0x3ca5, 0x2884,
+ 0xe412, 0x217f, 0x2884, 0xe412, 0x2186, 0x2884, 0xe412, 0x218d,
+ 0xa2fc, 0x3c84, 0x3c3e, 0xe42e, 0xe41e, 0x0b48, 0xf15a, 0xa102,
+ 0xf17a, 0xa108, 0xf114, 0xf14a, 0xa102, 0xf0da, 0xa102, 0xf0ba,
+ 0xa102, 0xf09a, 0xa102, 0xf07a, 0xa104, 0xf056, 0xa102, 0xf04a,
+ 0xa10e, 0xf022, 0xe42e, 0xe41e, 0x0923, 0xe40e, 0x05f4, 0xcaa2,
+ 0xaf0a, 0xa806, 0x184e, 0xf0a8, 0xe41e, 0x095c, 0xe41e, 0x2387,
+ 0xf5ca, 0x2894, 0xf5aa, 0xe41e, 0x0b3f, 0xe41e, 0x0af7, 0xe42e,
+ 0xe0c0, 0x0065, 0xaf04, 0xa802, 0xe42e, 0xe0c0, 0x0065, 0xaf16,
+ 0xa802, 0xe42e, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xa102, 0xe016,
+ 0xe42e, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xa104, 0xe016, 0xe42e,
+ 0xe41e, 0x0af7, 0xe0c0, 0x0048, 0xc009, 0x3433, 0x3c34, 0xc000,
+ 0xe42e, 0xc009, 0x2433, 0x4c34, 0xc000, 0xe42e, 0xc009, 0x3435,
+ 0x3c36, 0xc000, 0xe42e, 0xe41e, 0x0af7, 0xe0c0, 0x0048, 0xc009,
+ 0x3437, 0x3c38, 0xc000, 0xe42e, 0xc009, 0x2435, 0x4c36, 0xc000,
+ 0xe42e, 0xc009, 0x2437, 0x4c38, 0xc000, 0xe42e, 0xe41e, 0x0b3f,
+ 0x28ad, 0xe42a, 0xe41e, 0x0641, 0xe0c2, 0x0048, 0xe42e, 0xe41e,
+ 0x2204, 0xe41e, 0x2237, 0xe41e, 0x0504, 0xe41e, 0x24a9, 0xe41e,
+ 0x2297, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf2ca, 0xa102, 0xe42a,
+ 0xa102, 0xf05a, 0xa102, 0xe40a, 0x06b8, 0xe42e, 0xe0c0, 0x006b,
+ 0x34b5, 0x3cb6, 0xe0c0, 0x006c, 0x34b7, 0x3cb8, 0xe0c0, 0x0060,
+ 0xaf08, 0x3088, 0xe0c0, 0x0060, 0xa81e, 0x3c87, 0xe0c0, 0x0061,
+ 0xa83e, 0x3c8a, 0xe0c0, 0x0065, 0xa840, 0xf0ba, 0xa200, 0xe167,
+ 0x0600, 0xc703, 0x3d17, 0xe41e, 0x059d, 0xe004, 0x0088, 0x3ca7,
+ 0xe42e, 0xc001, 0xe0c0, 0x0060, 0x3400, 0x3c01, 0xe0c0, 0x0061,
+ 0xae14, 0x3406, 0x3c07, 0xc000, 0xe0c0, 0x0062, 0xaf02, 0x3021,
+ 0xaf02, 0x30aa, 0xa200, 0xe0c0, 0x0067, 0xa802, 0x3cb1, 0xe42e,
+ 0xe41e, 0x038c, 0xe41e, 0x0174, 0xe0c0, 0x0042, 0xce20, 0xd111,
+ 0x0640, 0xd112, 0x00c0, 0xd113, 0x0003, 0xca29, 0xf7f9, 0xa200,
+ 0xe41e, 0x0e9b, 0xe004, 0x0040, 0xe41e, 0x0e9b, 0xe0c0, 0x0060,
+ 0x3c7f, 0xe0c0, 0x0061, 0x3c66, 0xe0c0, 0x006e, 0xe41e, 0x020a,
+ 0xe167, 0x05fd, 0xe0c0, 0x0062, 0x3517, 0x3d17, 0xe0c0, 0x0063,
+ 0x3d17, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x077a, 0xa102,
+ 0xe42a, 0xa102, 0xf05a, 0xa102, 0xe40a, 0x07e7, 0xe42e, 0x2861,
+ 0xae04, 0x4c91, 0xae02, 0x4c90, 0xe0c2, 0x0060, 0xc009, 0x203f,
+ 0x4c40, 0xe0c2, 0x0061, 0x2041, 0x4c42, 0xc000, 0xe0c2, 0x0062,
+ 0xe41e, 0x1a64, 0xe0c2, 0x0067, 0xe41e, 0x1a69, 0xe0c2, 0x0068,
+ 0xe41e, 0x1a6e, 0xe0c2, 0x0069, 0xe41e, 0x1a59, 0x2a23, 0xe41b,
+ 0x081d, 0x2a3f, 0xe419, 0x081d, 0xae02, 0x4c23, 0xe0c2, 0x006a,
+ 0x2072, 0x4c73, 0xe0c2, 0x006c, 0xe41e, 0x18b5, 0xe0c2, 0x007b,
+ 0x2057, 0x4c58, 0xae08, 0xe0c2, 0x006f, 0x28b0, 0xe0c2, 0x007a,
+ 0x2054, 0x4c55, 0xa002, 0x3454, 0x3c55, 0xe0c2, 0x0070, 0x2885,
+ 0xe0c2, 0x0071, 0x2c53, 0xe0c2, 0x0072, 0xe41e, 0x07e8, 0xe0c2,
+ 0x0073, 0xa200, 0xe0c2, 0x0074, 0x2886, 0x2a97, 0xae05, 0xe056,
+ 0x2ab4, 0xae21, 0xe056, 0x2aae, 0xae23, 0xe056, 0x2abd, 0xae29,
+ 0xe056, 0xe0c2, 0x0076, 0xe41e, 0x0654, 0xe0c2, 0x0051, 0xe41e,
+ 0x0659, 0xe0c2, 0x0052, 0x2884, 0xe0c2, 0x0077, 0x2a22, 0xe161,
+ 0x05e4, 0x2111, 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0078, 0x2111,
+ 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0079, 0x2025, 0x4c26, 0xe0c2,
+ 0x007c, 0xe167, 0x05c7, 0x2117, 0x4d17, 0xe0c2, 0x007e, 0x2117,
+ 0x4d17, 0xe0c2, 0x007d, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2,
+ 0x0053, 0xe42e, 0xe41e, 0x18b5, 0xe0c2, 0x0063, 0x2a23, 0xe41b,
+ 0x081d, 0x2a3f, 0xe419, 0x081d, 0xae02, 0x4c23, 0xe0c2, 0x0064,
+ 0x2027, 0x4c28, 0xe0c2, 0x006d, 0x2886, 0xe0c2, 0x0070, 0x2057,
+ 0x4c58, 0xae08, 0xe0c2, 0x0071, 0x2025, 0x4c26, 0xe0c2, 0x0072,
+ 0x2821, 0xf0ca, 0x2816, 0xa104, 0xf09a, 0x28eb, 0x3cb3, 0xa004,
+ 0xe0c2, 0x0073, 0x28ea, 0x3ce9, 0xf07e, 0x2819, 0xa004, 0xe0c2,
+ 0x0073, 0xa200, 0x3ce9, 0x28e9, 0xe0c2, 0x0074, 0xa200, 0xe0c2,
+ 0x0075, 0x2a22, 0xe161, 0x05e4, 0x2111, 0x4d11, 0xf02b, 0xae02,
+ 0xe0c2, 0x0076, 0x2111, 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0077,
+ 0x2886, 0xe016, 0x58f0, 0xe0c2, 0x0078, 0xe161, 0x05c7, 0x2111,
+ 0x4d11, 0xe0c2, 0x007a, 0x2111, 0x4d11, 0xe0c2, 0x0079, 0xe41e,
+ 0x18b5, 0xaf32, 0xa802, 0xae0c, 0x2a24, 0xae05, 0xe056, 0x4c1d,
+ 0xae02, 0x2a1b, 0xe017, 0xe056, 0xae10, 0x4c1f, 0xae10, 0x4c11,
+ 0x2a19, 0xe01b, 0xae3f, 0xe056, 0xe0c2, 0x007b, 0xe42e, 0xe42e,
+ 0x2842, 0x3c00, 0xa200, 0x2a40, 0xf059, 0x2ab9, 0xa80f, 0xe056,
+ 0xf12e, 0x2a00, 0xf09b, 0x2aba, 0xa80f, 0xae07, 0xe056, 0x2abb,
+ 0xa80f, 0xe056, 0xf08e, 0x2abb, 0xa80f, 0xae07, 0xe056, 0x2aba,
+ 0xa80f, 0xe056, 0x3c01, 0x28a3, 0x2a23, 0xe41b, 0x081d, 0x2a3f,
+ 0xe419, 0x081d, 0xae02, 0x4c23, 0xae0c, 0x4c00, 0xae04, 0x4c43,
+ 0xae02, 0x4c3f, 0xae24, 0x2a3f, 0xe017, 0x4e40, 0xae1f, 0xe056,
+ 0x2abc, 0xae0d, 0xe056, 0x4c01, 0xe42e, 0x283f, 0xe42a, 0xc009,
+ 0x203b, 0x4c3c, 0x103d, 0x1c3e, 0xc000, 0xf030, 0xa206, 0xe42e,
+ 0xa208, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0018, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0100, 0x88ec, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0x8917, 0x0034, 0x8917, 0x0033, 0x8917,
+ 0x0035, 0x8917, 0x0036, 0x8917, 0x0037, 0x8917, 0x0038, 0x8117,
+ 0x8117, 0x2117, 0x4d17, 0xcc60, 0x2117, 0x4d17, 0xcc62, 0x2117,
+ 0x4d17, 0xcc64, 0x2117, 0x4d17, 0xcc72, 0xe42e, 0x8b17, 0x0034,
+ 0x8b17, 0x0033, 0x8b17, 0x0035, 0x8b17, 0x0036, 0x8b17, 0x0037,
+ 0x8b17, 0x0038, 0x8117, 0x8117, 0xc860, 0x3517, 0x3d17, 0xc862,
+ 0x3517, 0x3d17, 0xc864, 0x3517, 0x3d17, 0xc872, 0x3517, 0x3d17,
+ 0xe42e, 0xc001, 0x3c13, 0xc000, 0xe42e, 0xc001, 0x2813, 0xc000,
+ 0xe42e, 0xc001, 0x3c14, 0xc000, 0xe42e, 0xc001, 0x2814, 0xc000,
+ 0xe42e, 0xc001, 0x2430, 0x4c31, 0xc000, 0xae06, 0xc873, 0xe046,
+ 0xe422, 0xe16b, 0xe42e, 0xc001, 0x280c, 0xf16a, 0xe41e, 0x0af7,
+ 0xc001, 0xe0c0, 0x0049, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0xe0c1,
+ 0x0048, 0x360e, 0x3e0f, 0x260e, 0x4e0f, 0xe045, 0xa200, 0xb626,
+ 0xe003, 0x0200, 0xb606, 0xc000, 0xe42e, 0xe41e, 0x088b, 0xe42a,
+ 0xe0c0, 0x0045, 0xaf04, 0xa802, 0xe42e, 0xc001, 0x3c33, 0xc000,
+ 0xe42e, 0xc001, 0x2833, 0xc000, 0xe42e, 0xc001, 0x3c11, 0xc000,
+ 0xe42e, 0xc001, 0x2811, 0xc000, 0xe42e, 0xd148, 0x0040, 0xd144,
+ 0x0000, 0xd145, 0x0000, 0xd168, 0x0000, 0xd16b, 0x0000, 0xd14b,
+ 0x0200, 0xc001, 0xa200, 0x3c34, 0xc000, 0xe004, 0x0019, 0xae18,
+ 0xcec0, 0xd14c, 0x000c, 0xca9a, 0xf7f8, 0xe42e, 0xc001, 0x2400,
+ 0x4c01, 0x0406, 0x0c07, 0x3408, 0x3c09, 0xd071, 0x202a, 0xe181,
+ 0xc001, 0xe0c0, 0x0048, 0x3415, 0x3c16, 0x280c, 0xf13a, 0xe0c0,
+ 0x0048, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0xe0c1, 0x0049, 0x3604,
+ 0x3e05, 0x1404, 0x1c05, 0xe0c1, 0x0045, 0xaf05, 0xa803, 0xb611,
+ 0x320c, 0xe0c0, 0x0048, 0x3402, 0xe008, 0xfe00, 0x3c03, 0xe0c0,
+ 0x0048, 0xe008, 0x01ff, 0x3c0b, 0xa200, 0xcc78, 0xd022, 0x00ff,
+ 0xe184, 0x090b, 0xcc7a, 0xe190, 0xe41e, 0x09e6, 0xe41e, 0x0a05,
+ 0xe41e, 0x08bd, 0xc001, 0xa200, 0x3c1a, 0x280b, 0xa102, 0xe412,
+ 0x092b, 0xc001, 0xa202, 0x3c1a, 0xa200, 0xceaa, 0xc000, 0xa200,
+ 0xe41e, 0x0c19, 0xe42e, 0xcaa0, 0xe190, 0xca9a, 0xf7f8, 0xca9c,
+ 0xe418, 0x0a05, 0xe42e, 0xcc44, 0xe184, 0x0934, 0xca9c, 0xe418,
+ 0x0a05, 0xcaa0, 0xca9b, 0xf7f9, 0xe190, 0xe42e, 0xe004, 0x0100,
+ 0xceb0, 0xe004, 0x00ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e,
+ 0x0000, 0xd15f, 0x0000, 0xe004, 0x0019, 0xae18, 0xe00a, 0x0620,
+ 0xcec0, 0xd157, 0x0000, 0xd14a, 0x0000, 0xd14c, 0x0003, 0xca9c,
+ 0xe418, 0x0a05, 0xca9a, 0xf7c8, 0xcaae, 0xa802, 0xf73a, 0xca9c,
+ 0xe418, 0x0a05, 0xa200, 0xe42e, 0xe41e, 0x0bde, 0xe408, 0x0bba,
+ 0xe41e, 0x0936, 0xe41e, 0x088b, 0xf128, 0xe41e, 0x0b36, 0xcaa2,
+ 0xe008, 0x00ff, 0xe41e, 0x0871, 0xaf0e, 0xe418, 0x0923, 0xe41e,
+ 0x0875, 0xaf0e, 0xf6e8, 0xe41e, 0x088b, 0xf0ea, 0xe004, 0x010b,
+ 0xe008, 0x00ff, 0xe41e, 0x0871, 0xe004, 0x010b, 0xa83e, 0xe41e,
+ 0x0879, 0xa200, 0xe42e, 0xe41e, 0x0875, 0xf058, 0xa204, 0xe41e,
+ 0x092b, 0xf57e, 0xa206, 0xe41e, 0x092b, 0xe41e, 0x0875, 0xaf0a,
+ 0x3c4e, 0xe41e, 0x0875, 0xa83e, 0xe41e, 0x0879, 0xe41e, 0x0875,
+ 0xa116, 0xe42a, 0xca9c, 0xe418, 0x0a05, 0xe41e, 0x087d, 0xa10a,
+ 0xe016, 0x3c4f, 0xe41e, 0x09a5, 0xe42e, 0xc001, 0xa200, 0x3c30,
+ 0x3c31, 0x3c33, 0xe41e, 0x09b5, 0xc001, 0xe41e, 0x09e6, 0xc001,
+ 0xe128, 0xa200, 0x3c38, 0xc000, 0xe42e, 0xc001, 0x2833, 0x4411,
+ 0xc000, 0xae0e, 0xce92, 0xd14a, 0x0000, 0xd158, 0x0000, 0xe004,
+ 0x01ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e, 0x0000, 0xd15f,
+ 0x0000, 0xd161, 0x0003, 0xe004, 0x0019, 0xae18, 0xe00a, 0x0638,
+ 0xcec0, 0xd14c, 0x0003, 0xca9c, 0xe418, 0x0a05, 0xca9a, 0xf7c8,
+ 0xca9c, 0xf7a8, 0xca9e, 0xc001, 0x3c32, 0xcc92, 0xca94, 0x0030,
+ 0x0c31, 0x3430, 0x3c31, 0xcc90, 0xc000, 0xe42e, 0xe004, 0x1495,
+ 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000,
+ 0xd035, 0x0000, 0xd036, 0x007f, 0xd037, 0x0000, 0xd038, 0x0000,
+ 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd046, 0x0000,
+ 0xd047, 0x0000, 0xd149, 0x0000, 0xe42e, 0xc001, 0x280c, 0xf20a,
+ 0xe41e, 0x024f, 0xc001, 0xe004, 0x0440, 0xce50, 0x280d, 0xa806,
+ 0xa108, 0xe012, 0xa806, 0xae06, 0x3c40, 0xe004, 0x010b, 0x5840,
+ 0xce52, 0xe41e, 0x0257, 0xc001, 0xd14e, 0x0000, 0xd144, 0x0000,
+ 0x2402, 0x4c03, 0xe000, 0x0200, 0x3402, 0x3c03, 0xf3ae, 0xd027,
+ 0x0000, 0x280c, 0xe41a, 0x0a6e, 0xc001, 0xd027, 0x0001, 0x280d,
+ 0xf25a, 0xca48, 0xa802, 0xf7e8, 0x2402, 0x4c03, 0xce40, 0xd121,
+ 0x0000, 0xd122, 0x0040, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa032,
+ 0xce46, 0xe190, 0xe190, 0xe190, 0xe190, 0xca48, 0xa802, 0xf7e8,
+ 0xe004, 0x0200, 0x0402, 0x0c03, 0x3402, 0x3c03, 0x1408, 0x1c09,
+ 0xf054, 0x2400, 0x4c01, 0x3402, 0x3c03, 0x280c, 0xe418, 0x0ab2,
+ 0xc001, 0xe41e, 0x0af7, 0xc001, 0xd14e, 0x0000, 0xd144, 0x0000,
+ 0xc000, 0xe42e, 0xe0c1, 0x0059, 0xa103, 0xa200, 0xb636, 0xe000,
+ 0x001c, 0xe0c1, 0x0045, 0xe052, 0xe01a, 0xe42e, 0xc001, 0xa200,
+ 0x3c0a, 0xe004, 0x0200, 0x3c0d, 0xe0c0, 0x0043, 0xa808, 0xf338,
+ 0xe41e, 0x0a62, 0xc001, 0x3c0c, 0x2402, 0x4c03, 0xe0c1, 0x0049,
+ 0x3604, 0x3e05, 0x2604, 0x4e05, 0xe045, 0xf033, 0x0606, 0x0e07,
+ 0xe003, 0x0200, 0x280c, 0xb602, 0x3c0c, 0xf1d3, 0xe001, 0x0200,
+ 0x3e0d, 0x280c, 0xf188, 0x280a, 0xe408, 0x0a78, 0xe41e, 0x01db,
+ 0xc001, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xe40a, 0x0a78, 0xe0c0,
+ 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c0a,
+ 0xe40e, 0x0a78, 0x280d, 0x2a0c, 0xf039, 0xe004, 0x0200, 0x3c0d,
+ 0xc000, 0xe42e, 0xc001, 0xe41e, 0x024f, 0xc001, 0x280d, 0xe002,
+ 0x0200, 0xe40a, 0x0af4, 0x280d, 0xa806, 0xf1fa, 0xa108, 0xe012,
+ 0xae06, 0x3c40, 0x280d, 0xaf04, 0xae20, 0xe000, 0x01c0, 0xce50,
+ 0xe190, 0xca52, 0x5c40, 0x5840, 0x2a0d, 0xa807, 0xae07, 0x3e40,
+ 0xe005, 0x010b, 0x5e40, 0xe056, 0x2a0d, 0xaf05, 0xae21, 0xe001,
+ 0x0140, 0xce51, 0xe190, 0xce52, 0xe004, 0x01fc, 0x180d, 0xf022,
+ 0xf14e, 0xc001, 0x280d, 0xa006, 0xaf04, 0xae20, 0xe000, 0x0440,
+ 0xce50, 0x280d, 0xa806, 0xa108, 0xe012, 0xa806, 0xae06, 0x3c40,
+ 0xe004, 0x010b, 0x5840, 0xce52, 0xc000, 0xe40e, 0x0257, 0xc001,
+ 0xcaaa, 0x2a1a, 0xb616, 0xe0c1, 0x0048, 0x360e, 0x3e0f, 0x260e,
+ 0x4e0f, 0xe042, 0xe049, 0x1608, 0x1e09, 0xf035, 0x1406, 0x1c07,
+ 0xe0c2, 0x0048, 0xa200, 0xceaa, 0xc000, 0xe42e, 0xe41e, 0x0af7,
+ 0xe0c0, 0x0045, 0xaf04, 0xa806, 0xa104, 0xe428, 0xa2fc, 0x2a84,
+ 0xa003, 0xb616, 0xe418, 0x0b1d, 0xe42e, 0xc001, 0x3c40, 0xe0c0,
+ 0x0048, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0x0840, 0xe049, 0x1600,
+ 0x1e01, 0xf033, 0x0406, 0x0c07, 0xe049, 0x1608, 0x1e09, 0xf035,
+ 0x1406, 0x1c07, 0xe0c2, 0x0048, 0xc000, 0xe42e, 0xe41e, 0x0af7,
+ 0xc001, 0xe0c0, 0x0048, 0x3417, 0x3c18, 0xc000, 0xe42e, 0xa200,
+ 0xceaa, 0xc001, 0x2417, 0x4c18, 0xc000, 0xe0c2, 0x0048, 0xe42e,
+ 0xe41e, 0x0936, 0xe41e, 0x088b, 0xf0f8, 0xcaa2, 0xe049, 0xa83e,
+ 0xe009, 0x00ff, 0xf03b, 0xaf0f, 0xf04b, 0xe41e, 0x0923, 0xf71e,
+ 0xe41e, 0x088b, 0xf0aa, 0xe004, 0x010b, 0xe008, 0x00ff, 0xe41e,
+ 0x0871, 0xe004, 0x010b, 0xf02e, 0xcaa2, 0xe008, 0x001f, 0xe41e,
+ 0x0879, 0xe41e, 0x087d, 0xe42e, 0xc001, 0x2832, 0xe016, 0xc871,
+ 0xa011, 0xf288, 0xaf07, 0xe009, 0x07ff, 0x2831, 0xe008, 0x07ff,
+ 0xe046, 0xf16a, 0xf0ee, 0xc001, 0xe161, 0x0601, 0x2901, 0xc871,
+ 0xa011, 0xaf07, 0xe009, 0x07ff, 0xe008, 0x07ff, 0xe046, 0xf08a,
+ 0xe049, 0xe011, 0xaf15, 0xf0e1, 0xf0d0, 0xa200, 0xf0be, 0xc868,
+ 0xa80e, 0xf028, 0xa210, 0x3c35, 0x7835, 0xa203, 0x5a35, 0xaf03,
+ 0xe046, 0xc000, 0xe42e, 0xc000, 0x284e, 0x2a4f, 0x3c95, 0x3e96,
+ 0xc001, 0x2831, 0x2a32, 0x3c36, 0x3e37, 0xa202, 0x3c34, 0xe0c0,
+ 0x0046, 0xe005, 0x0000, 0xae11, 0xe042, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa,
+ 0xc000, 0xe42e, 0xc000, 0x2895, 0x2a96, 0x3c4e, 0x3e4f, 0xc001,
+ 0x2836, 0x2a37, 0x3c31, 0x3e32, 0xcc90, 0xcc93, 0xa200, 0x3c34,
+ 0x3c30, 0x3c33, 0xe0c0, 0x0046, 0xe005, 0x0000, 0xae11, 0xe042,
+ 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xd113, 0x0013, 0xca28,
+ 0xf7f8, 0xe41e, 0x09e6, 0xe128, 0xc000, 0xe42e, 0xc001, 0x2834,
+ 0xc000, 0xe42e, 0xc001, 0x3430, 0x3c31, 0xc000, 0xe42e, 0xc001,
+ 0x2430, 0x4c31, 0xc000, 0xe42e, 0xc001, 0x3c32, 0xc000, 0xe42e,
+ 0xc001, 0x2832, 0xc000, 0xe42e, 0xc001, 0x3c10, 0xc000, 0xe42e,
+ 0xc001, 0x2810, 0xc000, 0xe42e, 0xc001, 0x3c38, 0xc000, 0xe42e,
+ 0xc001, 0x2838, 0xc000, 0xe42e, 0xc001, 0xe0c0, 0x0041, 0xe005,
+ 0x0039, 0xae11, 0xe042, 0x3420, 0x3c21, 0xe004, 0x04e1, 0xae10,
+ 0x3422, 0x3c23, 0xc000, 0xe42e, 0xc001, 0x2420, 0x4c21, 0xc000,
+ 0xe42e, 0x3c63, 0xe08e, 0x3c64, 0xe41e, 0x0c25, 0xe41e, 0x0c2d,
+ 0x2864, 0xe09e, 0x2863, 0x3c60, 0xe42e, 0x2860, 0xae08, 0xe000,
+ 0x0538, 0xe09e, 0xe41e, 0x0856, 0xe42e, 0x2863, 0xae08, 0xe000,
+ 0x0538, 0xe09e, 0xe41e, 0x083b, 0xe42e, 0x2860, 0xf0ca, 0xa102,
+ 0xe40a, 0x1f23, 0xa102, 0xe40a, 0x1f23, 0xe41e, 0x1020, 0xd04c,
+ 0x0000, 0xe470, 0xe41e, 0x0bf0, 0xf088, 0xe41e, 0x0c00, 0xf088,
+ 0xe41e, 0x0eca, 0xe41e, 0x09b5, 0xd04c, 0x0000, 0xe470, 0xe41e,
+ 0x1003, 0xe41e, 0x08b9, 0xf098, 0xa202, 0xe41e, 0x08b5, 0xd037,
+ 0x0000, 0xd04c, 0x0000, 0xe470, 0xa200, 0xe41e, 0x08b5, 0xd037,
+ 0x0080, 0xd04c, 0x0000, 0xe470, 0xe40e, 0x1f23, 0xe41e, 0x1020,
+ 0xd04c, 0x0000, 0xe470, 0xc001, 0xa200, 0x3c10, 0xe41e, 0x1003,
+ 0xc001, 0x2832, 0xcc96, 0x2811, 0xe016, 0x3c11, 0xc000, 0xe42e,
+ 0xba0c, 0xf03a, 0xbcfc, 0xe42e, 0xba4c, 0xa20c, 0x3c9d, 0x289d,
+ 0xa002, 0x3c9d, 0xa140, 0xf0d2, 0xba40, 0xf7aa, 0x589d, 0xa102,
+ 0x34ab, 0x3cac, 0x289d, 0xe41e, 0x0cb5, 0x00ab, 0x0cac, 0xe42e,
+ 0xe16b, 0xe42e, 0xba0c, 0xf03a, 0xbe7e, 0xe42e, 0xba4c, 0xa20c,
+ 0x3c9d, 0x289d, 0xa002, 0x3c9d, 0xa140, 0xf162, 0xba40, 0xf7aa,
+ 0x589d, 0xa102, 0x34ab, 0x3cac, 0x289d, 0xe41e, 0x0cb5, 0x00ab,
+ 0x0cac, 0x3cac, 0x8cac, 0x0000, 0xa002, 0xaf02, 0xe012, 0xe42c,
+ 0xe012, 0xe16a, 0xe42e, 0xe16b, 0xe42e, 0xa120, 0xf050, 0xa020,
+ 0x3c9e, 0x749e, 0xe42e, 0x3c9e, 0xba5e, 0x589e, 0x769e, 0xe056,
+ 0xe42e, 0xba40, 0xe42a, 0xc868, 0xa80e, 0x3c00, 0xe016, 0xe428,
+ 0x7400, 0xe016, 0xe42e, 0xe0c4, 0x3fff, 0xe40d, 0x0db6, 0x3c52,
+ 0xf048, 0xa200, 0xa2fe, 0x3ca1, 0xbc12, 0xe40d, 0x0db6, 0xa10a,
+ 0xb4a8, 0xa104, 0xe400, 0x0db6, 0xb7b4, 0xa006, 0x3c38, 0x60a1,
+ 0x3ca1, 0xbdfe, 0xe40d, 0x0db6, 0x2a51, 0xf09b, 0xe049, 0x1829,
+ 0xf06a, 0x3e29, 0xe41e, 0x1f03, 0xe40a, 0x0db6, 0x7413, 0x3c39,
+ 0xa200, 0x3c3f, 0x3c42, 0x281b, 0xf068, 0xba40, 0x3c3f, 0xf03a,
+ 0xba40, 0x3c42, 0x2851, 0xf2da, 0x2c1e, 0x5c3f, 0x3c44, 0xa200,
+ 0x3c40, 0x283a, 0xf05a, 0xe41e, 0x0db9, 0x3c40, 0xf148, 0x283f,
+ 0x3c3a, 0x284e, 0xe01a, 0x3c3b, 0x2839, 0x3c3c, 0x2842, 0x3c3d,
+ 0xa2fc, 0x3c3e, 0x284e, 0xf098, 0x2850, 0x1c39, 0xf06a, 0xa202,
+ 0x3cbe, 0xf03e, 0xa200, 0x3c3a, 0x2c52, 0xf038, 0x2840, 0xf018,
+ 0x283f, 0xe016, 0x441c, 0x3c43, 0x283f, 0x0842, 0xb674, 0x3c41,
+ 0x284f, 0xf06a, 0xe41e, 0x0c78, 0xe40d, 0x0db6, 0x3c45, 0xe41e,
+ 0x1ca7, 0x2835, 0xf07a, 0xe41e, 0x0c78, 0xe40d, 0x0db6, 0xe408,
+ 0x0db6, 0x2838, 0xa104, 0xf038, 0xba40, 0x3c46, 0x282c, 0x3c48,
+ 0x282e, 0x3c49, 0x2838, 0xf0ea, 0xba40, 0xf0ca, 0xbc3e, 0x3c48,
+ 0xe40d, 0x0db6, 0x2838, 0xa104, 0xf058, 0xbc3e, 0x3c49, 0xe40d,
+ 0x0db6, 0x2851, 0xf05a, 0xe41e, 0x1fd7, 0xe41e, 0x0dd5, 0x2838,
+ 0xe016, 0xe41a, 0x0ddc, 0xe40a, 0x0db6, 0x2851, 0xf06a, 0xe41e,
+ 0x1b80, 0xe40a, 0x0db6, 0xf1fe, 0x284e, 0xf1da, 0x284f, 0xf04a,
+ 0xba40, 0xba40, 0xf18e, 0xba40, 0xf16a, 0xbc0c, 0xe40d, 0x0db6,
+ 0xf12a, 0xa106, 0xf08a, 0xa104, 0xf79a, 0xe41e, 0x0c78, 0xe40d,
+ 0x0db6, 0xf74e, 0xe41e, 0x0c78, 0xe40d, 0x0db6, 0xbc40, 0xe40d,
+ 0x0db6, 0xf6ce, 0x2838, 0xe01a, 0x442d, 0xf03a, 0xbc04, 0xf2fd,
+ 0x3c47, 0xe0c6, 0x0033, 0xf2bd, 0x0831, 0xa400, 0xa566, 0x3c4a,
+ 0xa200, 0x3c4b, 0x3c4c, 0x3c4d, 0x2833, 0xf10a, 0xbc04, 0xf1fd,
+ 0x3c4b, 0xa102, 0xf0ba, 0xbe0c, 0xf1ad, 0xae02, 0xa83e, 0x3c4c,
+ 0xbe0c, 0xf15d, 0xae02, 0xa83e, 0x3c4d, 0x282b, 0xf07a, 0x2851,
+ 0xf038, 0x74de, 0xf03e, 0xe41e, 0x1278, 0x2a43, 0x2c52, 0xe419,
+ 0x0dce, 0x3c52, 0x1c44, 0xf032, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0x284f, 0xe016, 0xe42a, 0x283f, 0xe42a, 0x283a, 0xe42a,
+ 0x283d, 0x1842, 0xe42a, 0x284e, 0xf048, 0x283b, 0xe016, 0xe42e,
+ 0x283b, 0xe42a, 0x283c, 0x1839, 0xe016, 0xe42e, 0xe049, 0xc70f,
+ 0x7e57, 0xaf21, 0xae02, 0xe046, 0xe42e, 0xd1f3, 0x0000, 0xe162,
+ 0x0370, 0x2912, 0xcfe4, 0xe42e, 0x2848, 0x3c04, 0xe161, 0x0370,
+ 0xe162, 0x02b0, 0xe41e, 0x0df1, 0xe42a, 0xd1f3, 0x0000, 0xe162,
+ 0x02b0, 0x8848, 0x0022, 0xe184, 0x0dee, 0x2912, 0xcfe4, 0xa202,
+ 0xe42e, 0xe082, 0xe098, 0xba40, 0xf098, 0x8804, 0x0022, 0xe184,
+ 0x0dfa, 0x2911, 0x3d12, 0xa202, 0xe42e, 0x286d, 0xe082, 0x3c08,
+ 0x2014, 0x4c15, 0x3400, 0x3c01, 0x2c39, 0x3402, 0x3c03, 0x2804,
+ 0x3c05, 0xe163, 0x0600, 0xa200, 0xc71f, 0x3d13, 0xbc06, 0xe40d,
+ 0x0e5a, 0xf06a, 0xa102, 0xf13a, 0xa102, 0xf1ba, 0xf32e, 0xe41e,
+ 0x0c78, 0xe40d, 0x0e5a, 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032,
+ 0x0000, 0x0c01, 0x3402, 0x3c03, 0xa203, 0xf0de, 0xe41e, 0x0c78,
+ 0xe40d, 0x0e5a, 0xa002, 0x0002, 0x0c03, 0x1000, 0x1c01, 0xf70e,
+ 0xbc40, 0xa2ff, 0x3c0f, 0xe41e, 0x0e64, 0xf082, 0xa203, 0x283f,
+ 0xf03a, 0x2a0f, 0xa803, 0x2904, 0xe046, 0xf1d4, 0x3d12, 0xe41e,
+ 0x0e7f, 0x2805, 0xa102, 0x3c05, 0xa004, 0xe42a, 0xe40e, 0x0e0e,
+ 0x2808, 0xa102, 0xe092, 0xe163, 0x0600, 0x2805, 0xf0a4, 0x2913,
+ 0x8111, 0xf7e8, 0x2901, 0x3d12, 0x2805, 0xa102, 0x3c05, 0xf76e,
+ 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x2884, 0xe424, 0xe0c2,
+ 0x020b, 0xe0c2, 0x0214, 0xe42e, 0x3c06, 0x3e07, 0xe163, 0x0330,
+ 0x2819, 0xa102, 0xe424, 0xae02, 0xa002, 0xcc44, 0xe184, 0x0e7c,
+ 0x2d13, 0x2b0b, 0x1c06, 0x1a07, 0xf078, 0xf069, 0xe086, 0xe002,
+ 0x0330, 0xaf02, 0xe42e, 0x8113, 0x8113, 0xa2fe, 0xe42e, 0x3c09,
+ 0x2808, 0xe092, 0x286d, 0xa102, 0xcc44, 0xe184, 0x0e8a, 0x2901,
+ 0x1809, 0xf03a, 0x8111, 0xe42e, 0xe082, 0x1808, 0xe000, 0x0600,
+ 0xe096, 0xa202, 0x3d03, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0203,
+ 0xe09e, 0x2907, 0xe42e, 0x3c0a, 0xe0c0, 0x0042, 0xe000, 0x0180,
+ 0x080a, 0xa207, 0xe41e, 0x0eaf, 0xe0c0, 0x0041, 0xe005, 0x006c,
+ 0xae0f, 0x0a0a, 0xe042, 0xa205, 0xe41e, 0x0eaf, 0xe42e, 0xce20,
+ 0xd111, 0x0600, 0xd112, 0x0020, 0xce27, 0xca28, 0xf7f8, 0xe42e,
+ 0xe42e, 0xd1f3, 0x0000, 0xe167, 0x02b0, 0xd022, 0x001f, 0xe184,
+ 0x0ec2, 0x2917, 0xcfe4, 0xe42e, 0xa200, 0xe41e, 0x109d, 0xe41e,
+ 0x10a5, 0xe42e, 0x2862, 0xe42a, 0xe41e, 0x10aa, 0xe167, 0x05fd,
+ 0x2717, 0x4f17, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa,
+ 0xa204, 0x3c62, 0xe42e, 0xe161, 0x0600, 0x2c52, 0x3d11, 0xe41e,
+ 0x10aa, 0xae10, 0x3511, 0x3d11, 0xe161, 0x05ff, 0x2f01, 0xae15,
+ 0xaf10, 0xe045, 0xe003, 0x0200, 0xa200, 0xb62e, 0x3c97, 0xf357,
+ 0x2862, 0xa104, 0xf098, 0xe41e, 0x10aa, 0xe000, 0x0200, 0xe41e,
+ 0x10a5, 0xa200, 0x3c62, 0xe41e, 0x10aa, 0xe161, 0x05fd, 0x2711,
+ 0x4f11, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0000, 0xd112,
+ 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa, 0xe41e,
+ 0x10aa, 0xe000, 0x0200, 0xe41e, 0x10a5, 0xe161, 0x05ff, 0x2f01,
+ 0xae15, 0xe045, 0xe41e, 0x0bf0, 0xf088, 0xa200, 0xb62e, 0x3c97,
+ 0xf047, 0xe41e, 0x09b5, 0xf58e, 0xe161, 0x0602, 0xe41e, 0x0be7,
+ 0xaf20, 0xe008, 0x00ff, 0x4d01, 0x3d11, 0xe41e, 0x0be7, 0x3d01,
+ 0xe161, 0x0601, 0x2711, 0x4f11, 0xaf11, 0xe41e, 0x0be7, 0xe042,
+ 0xa00e, 0xa20f, 0xe015, 0xe052, 0xe41e, 0x10a5, 0xe41e, 0x10a1,
+ 0xe41e, 0x1043, 0xe41e, 0x10a1, 0xa002, 0xe41e, 0x109d, 0xe42e,
+ 0x3c00, 0xe41e, 0x10a1, 0xe40a, 0x0fb5, 0xa102, 0x3c04, 0xe161,
+ 0x0600, 0xe004, 0x270f, 0x3c02, 0xa2fe, 0x3c03, 0xe41e, 0x1057,
+ 0x2901, 0x1800, 0xf12a, 0x2901, 0x1802, 0xf052, 0x2901, 0x3c02,
+ 0x2804, 0x3c03, 0x2804, 0xa102, 0x3c04, 0xf712, 0x2803, 0xe404,
+ 0x0fb5, 0x3c04, 0xe41e, 0x1057, 0xa200, 0xe41e, 0x08b5, 0x2901,
+ 0x3c52, 0xe004, 0x270f, 0x3d11, 0x2111, 0x4d09, 0xaf10, 0xe41e,
+ 0x1077, 0x2804, 0xe41e, 0x1043, 0xe004, 0x0000, 0xe005, 0x007f,
+ 0xe41e, 0x106c, 0x2111, 0x4d01, 0xaf10, 0xe000, 0x0200, 0xe41e,
+ 0x10af, 0x2911, 0xe008, 0x00ff, 0xae20, 0x4d01, 0xe41e, 0x0be2,
+ 0xcc90, 0xe002, 0x0200, 0xe41e, 0x10b9, 0xb604, 0xb628, 0xe41e,
+ 0x0bec, 0xcc92, 0xa202, 0xe41e, 0x0bfc, 0xe41e, 0x0bf0, 0xe428,
+ 0xa202, 0xe41e, 0x08b5, 0xe41e, 0x1003, 0xa200, 0xe41e, 0x08b5,
+ 0xd036, 0x00ff, 0xd037, 0x0080, 0xe42e, 0x2c44, 0x3c52, 0xe42e,
+ 0x3c00, 0x3e01, 0xe04a, 0xe41e, 0x10c3, 0xe41e, 0x10a1, 0xf0ea,
+ 0xa102, 0x3c04, 0xe161, 0x0600, 0xe41e, 0x1057, 0x2901, 0x1800,
+ 0xf07a, 0x2804, 0xa102, 0x3c04, 0xf782, 0xa200, 0xe42e, 0xca28,
+ 0xf7f8, 0xe004, 0x270f, 0x3d11, 0x2111, 0x4d09, 0xaf10, 0x2a01,
+ 0xe41e, 0x108c, 0x2804, 0xe41e, 0x1043, 0x2801, 0xae0a, 0xe000,
+ 0x0000, 0xa23f, 0xe41e, 0x106c, 0x2801, 0xae04, 0xe000, 0x0410,
+ 0xe094, 0x2111, 0x4d01, 0xaf10, 0xe000, 0x0080, 0x3512, 0x3d12,
+ 0x2911, 0xe008, 0x00ff, 0xae20, 0x4d01, 0xe41e, 0x0be2, 0xcc90,
+ 0xe002, 0x0080, 0x3512, 0x3d12, 0xb604, 0xb628, 0xe41e, 0x0bec,
+ 0xcc92, 0xa202, 0xe42e, 0xd115, 0x0001, 0xe190, 0xca28, 0xf7f8,
+ 0xe41e, 0x10b4, 0xe41e, 0x1077, 0xd115, 0x0000, 0xe41e, 0x10b4,
+ 0xe000, 0x0200, 0xe41e, 0x10af, 0xe41e, 0x10be, 0xe002, 0x0200,
+ 0xe41e, 0x10b9, 0xb604, 0xb628, 0xe41e, 0x0bec, 0xcc92, 0xe42e,
+ 0xe082, 0x3ce4, 0xca28, 0xf7f8, 0xe41e, 0x10c7, 0xe049, 0xae04,
+ 0xe000, 0x0410, 0xe092, 0x2111, 0x4d09, 0xe41e, 0x108c, 0x2111,
+ 0x4d09, 0xe000, 0x0080, 0x3511, 0x3d11, 0x2111, 0x4d09, 0xe002,
+ 0x0080, 0x3511, 0x3d11, 0xb604, 0xb628, 0xe41e, 0x0bec, 0xcc92,
+ 0x28e4, 0xe092, 0xe42e, 0xae06, 0xe005, 0x0142, 0xae11, 0xe042,
+ 0xe0c1, 0x0046, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0600,
+ 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x2804,
+ 0xae06, 0xe005, 0x0142, 0xae11, 0xe042, 0xe0c1, 0x0046, 0xe042,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0600, 0xd112, 0x0004, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xcc66, 0xcc6a, 0xcc6e, 0xe042,
+ 0xcc6c, 0xa200, 0xcc60, 0xcc68, 0xcc70, 0xe128, 0xe42e, 0xe167,
+ 0x05fd, 0x2717, 0x4f17, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xe41e,
+ 0x08b9, 0xe005, 0x0080, 0xb615, 0xce23, 0xd112, 0x0080, 0xd113,
+ 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xae0b, 0xe001, 0x0000, 0xce23,
+ 0xe167, 0x05fd, 0x2717, 0x4f17, 0xe042, 0xce20, 0xd112, 0x0020,
+ 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xc009, 0x3c20, 0xc000,
+ 0xe42e, 0xc009, 0x2820, 0xc000, 0xe42e, 0xc009, 0x341e, 0x3c1f,
+ 0xc000, 0xe42e, 0xc009, 0x241e, 0x4c1f, 0xc000, 0xe42e, 0xc009,
+ 0x3422, 0x3c23, 0xc000, 0xe42e, 0xc009, 0x2422, 0x4c23, 0xc000,
+ 0xe42e, 0xc009, 0x3424, 0x3c25, 0xc000, 0xe42e, 0xc009, 0x2424,
+ 0x4c25, 0xc000, 0xe42e, 0xc009, 0x3c21, 0xc000, 0xe42e, 0xc009,
+ 0x2821, 0xc000, 0xe42e, 0xe41e, 0x10a1, 0xe40a, 0x10dc, 0xa102,
+ 0x3c04, 0xe161, 0x0600, 0xe41e, 0x1057, 0x2901, 0x1852, 0xf07a,
+ 0x2804, 0xa102, 0x3c04, 0xf782, 0xa200, 0xe42e, 0xa202, 0xe42e,
+ 0xa206, 0xe41e, 0x0c19, 0xe004, 0x004e, 0xe0c2, 0x017c, 0xa218,
+ 0xe0c2, 0x017d, 0xa200, 0x3cdf, 0x3ce0, 0xe41e, 0x113c, 0x28e0,
+ 0xa002, 0x3ce0, 0x18d7, 0xf7a4, 0xa200, 0x3c59, 0x3c5b, 0x3c5c,
+ 0xe41e, 0x1133, 0x3ce0, 0x2c59, 0x1c44, 0xe402, 0x112f, 0xe41e,
+ 0x1133, 0x3cd9, 0x18e0, 0xe418, 0x11e7, 0x28d9, 0x3ce0, 0x28df,
+ 0xe41a, 0x11ec, 0xe41e, 0x1214, 0x28df, 0xf07a, 0xe41e, 0x2450,
+ 0xf0cc, 0xe16a, 0xa200, 0x3cdf, 0x284f, 0xe016, 0x3c38, 0xe41e,
+ 0x2479, 0x2c53, 0xa002, 0x3c53, 0xe41e, 0x1235, 0xcb04, 0x345b,
+ 0x3c5c, 0x28df, 0xe40a, 0x10fb, 0xcb86, 0xa102, 0xf550, 0xc894,
+ 0xf538, 0xe41e, 0x0cc1, 0xa200, 0x3cdf, 0xe40e, 0x10fb, 0xa200,
+ 0xe41e, 0x0c19, 0xe42e, 0x285b, 0xe41a, 0x1240, 0xe004, 0x0390,
+ 0x085b, 0xe094, 0x2902, 0xe42e, 0xe161, 0x04b0, 0x2838, 0x3d11,
+ 0x2848, 0x3d11, 0x284a, 0x3d11, 0x284b, 0x3d11, 0x284c, 0x3d11,
+ 0x284d, 0x3d11, 0xcb86, 0x3d11, 0xcb96, 0x3d11, 0x28df, 0x3d11,
+ 0xe41e, 0x0be7, 0x3511, 0x3d11, 0xe41e, 0x0bf0, 0x3d11, 0xe162,
+ 0x02b0, 0xd022, 0x000f, 0xe184, 0x115e, 0x2912, 0x3d11, 0x8b11,
+ 0x0034, 0x8b11, 0x0033, 0xc860, 0x3511, 0x3d11, 0xc862, 0x3511,
+ 0x3d11, 0xc864, 0x3511, 0x3d11, 0x8b11, 0x0035, 0x8b11, 0x0036,
+ 0x8b11, 0x0037, 0x8b11, 0x0038, 0x28e0, 0xae0e, 0xe005, 0x00fa,
+ 0xae11, 0xe042, 0xe0c1, 0x0046, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x04b0, 0xd112, 0x0028, 0xd113, 0x0002, 0xca28, 0xf7f8,
+ 0xe42e, 0x28d9, 0xae0e, 0xe005, 0x00fa, 0xae11, 0xe042, 0xe0c1,
+ 0x0046, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x04b0, 0xd112,
+ 0x0028, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe161, 0x04b0, 0x2911,
+ 0x3c38, 0x2911, 0x3c48, 0x2911, 0x3c4a, 0x2911, 0x3c4b, 0x2911,
+ 0x3c4c, 0x2911, 0x3c4d, 0xe41e, 0x2435, 0x2911, 0xcf86, 0x2911,
+ 0xcf96, 0x2911, 0x3cdf, 0x2511, 0x4d11, 0xe41e, 0x0be2, 0xcc90,
+ 0x2911, 0xe41e, 0x0bec, 0xcc92, 0xe162, 0x02b0, 0xd022, 0x000f,
+ 0xe184, 0x11c3, 0x2911, 0x3d12, 0xd1f3, 0x0000, 0xe162, 0x02b0,
+ 0x8848, 0x0022, 0xe184, 0x11cd, 0x2912, 0xcfe4, 0x28d9, 0xe41e,
+ 0x10c3, 0x8911, 0x0034, 0x8911, 0x0033, 0x2111, 0x4d11, 0xcc60,
+ 0x2111, 0x4d11, 0xcc62, 0x2111, 0x4d11, 0xcc64, 0x8911, 0x0035,
+ 0x8911, 0x0036, 0x8911, 0x0037, 0x8911, 0x0038, 0xe42e, 0xe41e,
+ 0x113c, 0xe41e, 0x1189, 0xe42e, 0x2c59, 0x2ad9, 0xe41e, 0x0fb8,
+ 0xe42a, 0xe41e, 0x0ccb, 0xe16a, 0xe42a, 0xe41e, 0x2435, 0xe41e,
+ 0x11fc, 0xa202, 0x3cdf, 0xe42e, 0xa203, 0x5ad9, 0xe00d, 0x00ff,
+ 0xe161, 0x0430, 0x8857, 0x0022, 0xe184, 0x1208, 0x2901, 0xe052,
+ 0x3d11, 0x28e1, 0xe052, 0x3ce1, 0x28e2, 0xe052, 0x3ce2, 0xe42e,
+ 0xa200, 0x3ce1, 0x3ce2, 0xe42e, 0x285b, 0xe41a, 0x1210, 0x285b,
+ 0xe000, 0x0430, 0xe092, 0x28e1, 0x5cd9, 0xa802, 0x3ce3, 0x2911,
+ 0x5cd9, 0xa802, 0xae02, 0x4ce3, 0x3ce3, 0x2911, 0x5cd9, 0xa802,
+ 0xae04, 0x4ce3, 0x3ce3, 0x28e2, 0x5cd9, 0xa802, 0xae06, 0x4ce3,
+ 0x3ce3, 0xcf12, 0xd18a, 0x0000, 0xe42e, 0x285b, 0xe000, 0x0430,
+ 0xe092, 0x2901, 0x3ce2, 0xa202, 0x58d9, 0x3d01, 0x3ce1, 0xe42e,
+ 0x285c, 0xae10, 0xe005, 0x00fe, 0xae11, 0xe042, 0xe0c1, 0x0046,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0390, 0x2857, 0xa006,
+ 0xe008, 0x00fc, 0xce24, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0x3cd8, 0xa002, 0x3cd7, 0x2c1e, 0x3c44, 0xbc0c, 0x3cd6, 0xe42d,
+ 0xe40a, 0x1299, 0xa102, 0xe40a, 0x12d1, 0xa102, 0xe40a, 0x12ee,
+ 0xa106, 0xe406, 0x1270, 0xa102, 0xe40a, 0x13d8, 0xe16b, 0xe42e,
+ 0xba40, 0x3cda, 0xe41e, 0x0c78, 0xe42d, 0xa002, 0x3cdb, 0xe42e,
+ 0xa200, 0x3cde, 0x28d6, 0xa106, 0xe424, 0xa104, 0xe420, 0x2c44,
+ 0x08db, 0xa102, 0xc70f, 0x7cdb, 0xe008, 0xffff, 0xe41e, 0x1412,
+ 0x3cde, 0x74de, 0x3cdc, 0x84dc, 0x82db, 0xe018, 0x2e44, 0xe066,
+ 0x3cdc, 0x28d6, 0xa108, 0xe404, 0x1340, 0xe40a, 0x13ae, 0xe40e,
+ 0x13ae, 0xe161, 0x0600, 0x88d8, 0x0022, 0xe184, 0x12a3, 0xe41e,
+ 0x0c78, 0xe42d, 0xa002, 0x3d11, 0xe161, 0x0600, 0xe162, 0x0390,
+ 0xa200, 0x3cd9, 0x3c00, 0x3c5b, 0x3c5c, 0x2800, 0xa002, 0x3c00,
+ 0x1901, 0xf0e6, 0xa200, 0x3c00, 0x28d9, 0xa002, 0x3cd9, 0x8111,
+ 0x18d8, 0xf746, 0xa200, 0x3cd9, 0xe161, 0x0600, 0xf6fe, 0x28d9,
+ 0x3d12, 0x285b, 0xa002, 0x3c5b, 0x1857, 0xf684, 0x3c5b, 0xe41e,
+ 0x13f6, 0x285c, 0xa002, 0x3c5c, 0x1858, 0xe162, 0x0390, 0xf5e4,
+ 0xe42e, 0xa200, 0x3c5c, 0xe162, 0x0390, 0x845c, 0x82d7, 0xe018,
+ 0xaf02, 0xc70f, 0x7cd7, 0xaf20, 0x2a57, 0xa103, 0xcc45, 0xe184,
+ 0x12e5, 0x3d12, 0xa002, 0xe049, 0x1ad7, 0xb616, 0xe41e, 0x13f6,
+ 0x285c, 0xa002, 0x3c5c, 0x1858, 0xf674, 0xe42e, 0xe167, 0x0600,
+ 0x28d8, 0xa102, 0xcc44, 0xe184, 0x12fc, 0xe41e, 0x0c78, 0xe42d,
+ 0x3d17, 0xe41e, 0x0c78, 0xe42d, 0x3d17, 0xe162, 0x0390, 0x2857,
+ 0xa102, 0x3c04, 0x28d7, 0xa102, 0x8604, 0x3d12, 0xa200, 0x3c5c,
+ 0xe41e, 0x13f6, 0x285c, 0xa002, 0x3c5c, 0x1858, 0xf7a4, 0x28d7,
+ 0xa104, 0x3cd9, 0x28d9, 0xae02, 0xe000, 0x0600, 0xe092, 0x2911,
+ 0xc70f, 0x7c57, 0x3400, 0x3c02, 0x2911, 0xc70f, 0x7c57, 0x3401,
+ 0x3c03, 0x2802, 0x3c5c, 0x1803, 0xf170, 0xca2c, 0xf7fa, 0xe41e,
+ 0x13f8, 0x2800, 0xe000, 0x0390, 0xe094, 0x2801, 0x1800, 0xf054,
+ 0x3c04, 0x28d9, 0x8604, 0x3d12, 0xe41e, 0x13f6, 0x285c, 0xa002,
+ 0x3c5c, 0x1803, 0xf6d6, 0x28d9, 0xa102, 0x3cd9, 0xf542, 0xe42e,
+ 0xe162, 0x09e0, 0xa2fe, 0x2e1e, 0xa01f, 0xaf09, 0x3e00, 0x8600,
+ 0x3d12, 0x8457, 0x28dc, 0xe40a, 0x1397, 0x2857, 0x18da, 0xaf02,
+ 0x3c5b, 0x2858, 0x18da, 0xaf02, 0x3c5c, 0x2857, 0xa102, 0x3c07,
+ 0x2858, 0xa102, 0x3c08, 0xa2fe, 0x08da, 0x3c04, 0xa200, 0x08da,
+ 0x3c05, 0xa200, 0x3c00, 0x3c01, 0x3c02, 0xa202, 0x3c03, 0xe41e,
+ 0x1419, 0xf0aa, 0x2901, 0xe05a, 0x3d01, 0x2800, 0xa002, 0x3c00,
+ 0x2800, 0x18dc, 0xf25a, 0x285b, 0x0804, 0xa400, 0x6407, 0x3c5b,
+ 0x285c, 0x0805, 0xa400, 0x6408, 0x3c5c, 0x2802, 0xa002, 0x3c02,
+ 0x1803, 0xf668, 0x3c02, 0x2803, 0x0801, 0x3c03, 0xa202, 0x1801,
+ 0x3c01, 0x28da, 0xf078, 0x2804, 0x2a05, 0xe013, 0x3e04, 0x3c05,
+ 0xf57e, 0x2804, 0x2a05, 0xe012, 0x3e04, 0x3c05, 0xf51e, 0xa200,
+ 0x3c5c, 0xe162, 0x0390, 0xa200, 0x3c5b, 0xe41e, 0x1419, 0xe01a,
+ 0x3d12, 0x285b, 0xa002, 0x3c5b, 0x1857, 0xf784, 0xe41e, 0x13f6,
+ 0x285c, 0xa002, 0x3c5c, 0x1858, 0xf6d4, 0xe42e, 0x28da, 0xf038,
+ 0x28dc, 0xf03e, 0x2c44, 0x18dc, 0x3c00, 0xa200, 0x3c5c, 0xe162,
+ 0x0390, 0xa200, 0x3c5b, 0x8457, 0x825c, 0xe018, 0x085b, 0x2ad6,
+ 0xa109, 0xf05b, 0x8458, 0x825b, 0xe018, 0x085c, 0x1800, 0x2ada,
+ 0xf024, 0xe017, 0x3f12, 0x285b, 0xa002, 0x3c5b, 0x1857, 0xf6c4,
+ 0xe41e, 0x13f6, 0x285c, 0xa002, 0x3c5c, 0x1858, 0xf614, 0xe42e,
+ 0xe41e, 0x0c78, 0xe42d, 0xa002, 0x1c44, 0xe408, 0x126e, 0x28d8,
+ 0xe41e, 0x1412, 0x3c00, 0xa200, 0x3c5c, 0xe162, 0x0390, 0x2857,
+ 0xa102, 0xcc44, 0xe184, 0x13ed, 0x7400, 0x3d12, 0xe41e, 0x13f6,
+ 0x285c, 0xa002, 0x3c5c, 0x1858, 0xf714, 0xe42e, 0xa204, 0xf02e,
+ 0xa206, 0x3c09, 0x285c, 0xae10, 0xe005, 0x00fe, 0xae11, 0xe042,
+ 0xe0c1, 0x0046, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0390,
+ 0x2857, 0xa006, 0xe008, 0x00fc, 0xce24, 0x8809, 0x0113, 0xca28,
+ 0xf7f8, 0xe42e, 0xa201, 0xf04a, 0xaf02, 0xa003, 0xf7e8, 0xe04a,
+ 0xe42e, 0x825c, 0xe018, 0x085b, 0x3c59, 0xaf08, 0xe000, 0x09e0,
+ 0xe092, 0x2c59, 0xa81e, 0x3c06, 0xa203, 0x5a06, 0x2901, 0xe052,
+ 0xe42e, 0xba4e, 0x3c11, 0xa200, 0x3c24, 0xd022, 0x0007, 0xe184,
+ 0x1436, 0xba41, 0x5a24, 0xe056, 0x2a24, 0xa003, 0x3e24, 0x3c24,
+ 0xa208, 0x3cf0, 0x2824, 0xaf0c, 0xe408, 0x1540, 0xa224, 0x3cf0,
+ 0xe41e, 0x179b, 0xe40a, 0x1543, 0xa226, 0x3cf0, 0xba4e, 0x3c1f,
+ 0xa112, 0xe404, 0x1540, 0xa154, 0xe400, 0x1540, 0xbc3e, 0x3c10,
+ 0xa202, 0x3c22, 0xa200, 0x3c67, 0x2811, 0xa1c8, 0xf338, 0xbc06,
+ 0x3c22, 0xa20a, 0x3cf0, 0xbc08, 0xe408, 0x1540, 0xa20c, 0x3cf0,
+ 0xbc08, 0xe408, 0x1540, 0xba40, 0xba40, 0x3c67, 0xf23a, 0xa201,
+ 0x3e69, 0x3e6b, 0xe160, 0x0000, 0xba40, 0xf11a, 0x2a69, 0xae03,
+ 0xe056, 0x3c69, 0xe080, 0xe41e, 0x1746, 0x2a6b, 0xae03, 0xe056,
+ 0x3c6b, 0xe080, 0xa201, 0xe41e, 0x1779, 0xf07e, 0x2a69, 0xae03,
+ 0x3e69, 0x2a6b, 0xae03, 0x3e6b, 0xe080, 0xa002, 0xe090, 0xa110,
+ 0xf648, 0xa20e, 0x3cf0, 0xbc18, 0xe40d, 0x1540, 0xa008, 0x3c13,
+ 0xa202, 0x5813, 0x3414, 0x3c15, 0xa210, 0x3cf0, 0xbc04, 0x3c16,
+ 0xe40d, 0x1540, 0xa102, 0xf034, 0xf0aa, 0xf33e, 0xa212, 0x3cf0,
+ 0xbc18, 0xe40d, 0x1540, 0xa008, 0x3c17, 0xf2be, 0xba40, 0x3c18,
+ 0xe41e, 0x0c92, 0xe160, 0x0907, 0xe161, 0x0908, 0x3500, 0x3d01,
+ 0xe41e, 0x0c92, 0xe162, 0x0909, 0xe163, 0x090a, 0x3502, 0x3d03,
+ 0xa214, 0x3cf0, 0xbdfe, 0xe40d, 0x1540, 0xe164, 0x090b, 0x3d04,
+ 0xf10a, 0xa102, 0xcc44, 0xe162, 0x09e0, 0xe184, 0x14ca, 0xe41e,
+ 0x0c92, 0x3512, 0x3d12, 0xa216, 0x3cf0, 0xe41e, 0x1672, 0xf01e,
+ 0xe40d, 0x1540, 0xa218, 0x3cf0, 0xbc20, 0xe40d, 0x1540, 0x3c19,
+ 0xba40, 0x3c1a, 0xa21a, 0x3cf0, 0xbdfe, 0xe40d, 0x1540, 0xa002,
+ 0x3c57, 0xa21c, 0x3cf0, 0xbdfe, 0xe40d, 0x1540, 0xa002, 0x3c58,
+ 0x8457, 0x8258, 0xe018, 0x3c1e, 0xa222, 0x3cf0, 0x2c57, 0xe002,
+ 0x0080, 0xe400, 0x1540, 0x2c58, 0xe002, 0x0080, 0xe400, 0x1540,
+ 0x2c1e, 0xe002, 0x4000, 0xe400, 0x1540, 0xa200, 0x3c1c, 0xba40,
+ 0x3c1b, 0xf098, 0xba40, 0x3c1c, 0x2858, 0xae02, 0x3c58, 0x2c1e,
+ 0xae02, 0x3c1e, 0xe41e, 0x15f2, 0xa21e, 0x3cf0, 0x2a1b, 0xba40,
+ 0xb636, 0x3c1d, 0xa220, 0x3cf0, 0xba40, 0xe161, 0x05e4, 0xc703,
+ 0x3d11, 0xf16a, 0xe161, 0x05e4, 0xe41e, 0x0c78, 0x3d11, 0xe41e,
+ 0x0c78, 0x3d11, 0xe41e, 0x0c78, 0x2a1b, 0xf029, 0xae02, 0x3d11,
+ 0xe41e, 0x0c78, 0x2a1b, 0xf029, 0xae02, 0x3d11, 0xf12d, 0xa200,
+ 0x3c90, 0x3c91, 0x2820, 0x3cea, 0x3ceb, 0xe41e, 0x18ba, 0xba40,
+ 0xe016, 0xe41a, 0x1682, 0xf05a, 0xe41e, 0x0cc1, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0xa2fe, 0xe42e, 0xe41e, 0x0c78, 0x3c29,
+ 0xbc3e, 0xe40d, 0x15e8, 0x1810, 0xf11a, 0x0810, 0x3c10, 0xe41e,
+ 0x1ed9, 0x3c65, 0xa205, 0xae23, 0xcc9f, 0xa202, 0xe41e, 0x0c19,
+ 0xa203, 0x3e9b, 0x2865, 0xe40a, 0x15e8, 0xba40, 0x3c2d, 0xba40,
+ 0x3c2a, 0xbc0e, 0xe40d, 0x15e8, 0x3c2b, 0xf05a, 0xe41e, 0x1258,
+ 0xe40d, 0x15e8, 0x282d, 0x2a2b, 0xe01b, 0xe052, 0xe408, 0x15e8,
+ 0x2811, 0xa184, 0xf078, 0x282d, 0xf0aa, 0xe004, 0x0064, 0x3c11,
+ 0xf06e, 0x282b, 0xf04a, 0xe004, 0x0042, 0x3c11, 0xbc3e, 0xe40d,
+ 0x15e8, 0x3c2c, 0xbc3e, 0x3c2e, 0xe40d, 0x15e8, 0xba40, 0x3c2f,
+ 0xba42, 0x3c30, 0xbe34, 0xe40d, 0x15e8, 0xa034, 0x3c31, 0xe404,
+ 0x15e8, 0xa168, 0xe402, 0x15e8, 0xbe34, 0xe40d, 0x15e8, 0xa034,
+ 0xe404, 0x15e8, 0xa168, 0xe402, 0x15e8, 0xbe18, 0xe40d, 0x15e8,
+ 0x3c32, 0x3c36, 0xba40, 0x3c33, 0xba40, 0x3c34, 0xba40, 0x3c35,
+ 0xa200, 0x3c37, 0x3c68, 0x2811, 0xa184, 0xf37a, 0x2829, 0x3c02,
+ 0xe41e, 0x1fa1, 0xe41e, 0x0b7b, 0xf30a, 0xba40, 0x3c37, 0xba40,
+ 0x3c68, 0xf28a, 0xa201, 0x3e6a, 0x3e6c, 0xe160, 0x0000, 0xe080,
+ 0xa10c, 0x1837, 0x1837, 0xf132, 0xba40, 0xf11a, 0x2a6a, 0xae03,
+ 0xe056, 0x3c6a, 0xe080, 0xe41e, 0x1746, 0x2a6c, 0xae03, 0xe056,
+ 0x3c6c, 0xe080, 0xa203, 0xe41e, 0x1779, 0xf07e, 0x2a6a, 0xae03,
+ 0x3e6a, 0x2a6c, 0xae03, 0x3e6c, 0xe080, 0xa002, 0xe090, 0xa110,
+ 0xf5f8, 0xbe18, 0xf06d, 0x3c36, 0xe41e, 0x0cc1, 0xa202, 0xe42e,
+ 0xe0c1, 0x0059, 0xa107, 0xf049, 0x28ae, 0xa902, 0x3cae, 0xe16a,
+ 0xa200, 0xe42e, 0xa214, 0x2e1e, 0xe003, 0x0063, 0xf2f7, 0xa216,
+ 0x2e1e, 0xe003, 0x018c, 0xf2a7, 0xa22a, 0x2e1e, 0xe003, 0x0318,
+ 0xf257, 0xa22c, 0x2e1e, 0xe003, 0x0654, 0xf207, 0xa23e, 0x2e1e,
+ 0xe003, 0x0e10, 0xf1b7, 0xa240, 0x2e1e, 0xe003, 0x1400, 0xf167,
+ 0xa250, 0x2e1e, 0xe003, 0x2000, 0xf117, 0xa254, 0x2e1e, 0xe003,
+ 0x2200, 0xf0c7, 0xa264, 0x2e1e, 0xe003, 0x5640, 0xf077, 0xa266,
+ 0x2e1e, 0xe003, 0x9000, 0xf027, 0xa268, 0x2a1f, 0xe045, 0xf023,
+ 0x3c1f, 0x2a1f, 0xa115, 0xe004, 0x0129, 0xf2d7, 0xa103, 0xe004,
+ 0x02a3, 0xf297, 0xa113, 0xe004, 0x06f6, 0xf257, 0xa103, 0xe004,
+ 0x0dec, 0xf217, 0xa113, 0xe004, 0x17bb, 0xf1d7, 0xa103, 0xe004,
+ 0x34bc, 0xf197, 0xa103, 0xe004, 0x3c00, 0xf157, 0xa113, 0xe004,
+ 0x6000, 0xf117, 0xa103, 0xe004, 0x6600, 0xf0d7, 0xa111, 0xe004,
+ 0x1437, 0xae08, 0xf087, 0xa103, 0xe004, 0x21c0, 0xae08, 0xf037,
+ 0xe004, 0x17bb, 0xae12, 0x3409, 0x3c0a, 0x841e, 0xe182, 0x0180,
+ 0xe019, 0x2009, 0x4c0a, 0xc407, 0xd022, 0x000f, 0xe184, 0x166a,
+ 0xe046, 0xf034, 0x8117, 0xe190, 0xe08e, 0x2a19, 0xe062, 0xa520,
+ 0x3c20, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x0026, 0xae11, 0xe042,
+ 0xce20, 0xd111, 0x09e0, 0xd112, 0x0200, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0xa200, 0x3c00, 0x3c01, 0x3c02, 0x3c03, 0x3c04,
+ 0x3c05, 0x3c06, 0x3c07, 0x3c08, 0x3c09, 0x3c0a, 0xba40, 0xa2ff,
+ 0x3e25, 0x3e26, 0xf16a, 0xba4e, 0xa201, 0x3e25, 0x3c26, 0xe002,
+ 0x00ff, 0xf0f8, 0xa202, 0x3c07, 0xba5e, 0xba5f, 0x3c25, 0x3e26,
+ 0xe016, 0xe017, 0xe056, 0xf028, 0xf04e, 0xa200, 0x3c26, 0x3c25,
+ 0xba40, 0xf02a, 0xba40, 0xba40, 0x3c0a, 0xf0ca, 0xba44, 0x3c09,
+ 0xba40, 0x3c08, 0xba40, 0x3c06, 0xf05a, 0xba4e, 0x3c05, 0xba4e,
+ 0xba4e, 0xba40, 0x3c04, 0xf05a, 0xbc0a, 0x3c03, 0xbc0a, 0x3c02,
+ 0xba40, 0x3c01, 0xf0ba, 0xba7e, 0xe161, 0x05c7, 0x3511, 0x3d11,
+ 0xba7e, 0x3511, 0x3d11, 0xba40, 0x3c00, 0xba40, 0x3c90, 0xe016,
+ 0xe161, 0x05bd, 0xe41a, 0x172a, 0xe40a, 0x1727, 0xba40, 0x3c91,
+ 0xe016, 0xe161, 0x05c2, 0xe41a, 0x172a, 0xe40a, 0x1727, 0x2890,
+ 0x4c91, 0xf02a, 0xba40, 0xba40, 0x3c23, 0xba40, 0xf0aa, 0xba40,
+ 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0xbc20, 0x3cea, 0xbc20, 0x3ceb,
+ 0x28eb, 0xa120, 0xf0a0, 0x2819, 0x18eb, 0xf070, 0x28b3, 0xf09a,
+ 0x287f, 0xa104, 0x18eb, 0xf052, 0x2ab3, 0xf029, 0x2a20, 0x3eeb,
+ 0xa202, 0xae3e, 0x2a0a, 0xae3d, 0xe056, 0x2a09, 0xae37, 0xe056,
+ 0x2a08, 0xae35, 0xe056, 0x2a07, 0xae33, 0xe056, 0x2a06, 0xae31,
+ 0xe056, 0x2a05, 0xae21, 0xe056, 0x2a04, 0xae11, 0xe056, 0x2a03,
+ 0xae0b, 0xe056, 0x2a02, 0xae05, 0xe056, 0x2a01, 0xae03, 0xe056,
+ 0x2a00, 0xe056, 0xe41e, 0x18ba, 0xe16a, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0xe41e, 0x0c78, 0xcc44, 0x3c61, 0xa002, 0x3d11,
+ 0xba46, 0xba46, 0xe184, 0x1738, 0xe41e, 0x0c78, 0xe41e, 0x0c78,
+ 0xba40, 0xba48, 0xa002, 0x3d11, 0xba48, 0xa002, 0x3d11, 0xba48,
+ 0xa002, 0x3d11, 0xba48, 0x3d11, 0xa202, 0xe42e, 0xd022, 0x000f,
+ 0xa10c, 0xf034, 0xd022, 0x003f, 0xe161, 0x0600, 0xa210, 0x3c06,
+ 0x3c07, 0xa200, 0x3c08, 0x3c09, 0xe09c, 0xe09e, 0xe184, 0x1776,
+ 0x2807, 0xf10a, 0xe41e, 0x0c92, 0xe42d, 0x0806, 0xe000, 0x0100,
+ 0xe008, 0x00ff, 0x3c07, 0x4c09, 0xe01a, 0xe016, 0xe09e, 0xa202,
+ 0x3c09, 0x2807, 0xf028, 0x2806, 0x3c06, 0xe08d, 0xa003, 0xe09d,
+ 0xa803, 0xf059, 0xe085, 0xae11, 0xe056, 0x3d11, 0xe094, 0xe08e,
+ 0xe42e, 0x3e08, 0x3c06, 0xa211, 0x3e07, 0xa10c, 0xf064, 0xb690,
+ 0xa00c, 0x3c06, 0xa240, 0x3c07, 0x2806, 0x2a08, 0xf02b, 0xa01c,
+ 0xae08, 0x3c06, 0xe0c0, 0x0041, 0xe005, 0x0034, 0xae11, 0xe042,
+ 0x0806, 0xce20, 0xd111, 0x0600, 0x2807, 0xce24, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0x2811, 0xa184, 0xf0ba, 0xa116, 0xf09a,
+ 0xa12e, 0xf07a, 0x2824, 0xe008, 0x0003, 0xf038, 0xa200, 0xe42e,
+ 0xa202, 0xe42e, 0xa202, 0x3c51, 0xe41e, 0x088b, 0xe408, 0x180a,
+ 0xe41e, 0x0b48, 0xf26a, 0xa102, 0xe40a, 0x1826, 0xa108, 0xe404,
+ 0x17d8, 0xe40a, 0x1826, 0xa102, 0xe40a, 0x17f0, 0xa102, 0xe40a,
+ 0x17db, 0xa102, 0xe40a, 0x17e6, 0xa102, 0xe40a, 0x17fa, 0xa102,
+ 0xe40a, 0x1807, 0xa102, 0xe40a, 0x1807, 0xa102, 0xe40a, 0x1811,
+ 0xf082, 0x2851, 0xe40a, 0x185a, 0xe41e, 0x095c, 0xe40e, 0x1821,
+ 0xe41e, 0x0923, 0xf52e, 0x2851, 0xe40a, 0x185a, 0xe41e, 0x18ab,
+ 0xe41e, 0x095c, 0xe41e, 0x1ec1, 0xe40e, 0x1821, 0x2851, 0xe40a,
+ 0x185a, 0xe41e, 0x18ab, 0xe41e, 0x095c, 0xe41e, 0x1eec, 0xf32e,
+ 0x2851, 0xe40a, 0x185a, 0xe41e, 0x18ab, 0xe41e, 0x095c, 0xe41e,
+ 0x18bf, 0xf28e, 0x2851, 0xe40a, 0x185a, 0xe41e, 0x18b2, 0xe41e,
+ 0x18ab, 0xe41e, 0x095c, 0xba44, 0xe41e, 0x0cc1, 0xf1be, 0xe41e,
+ 0x088b, 0xf16a, 0xe41e, 0x01db, 0x2851, 0xe408, 0x1865, 0xe40e,
+ 0x185a, 0xe41e, 0x095c, 0xba0e, 0xe002, 0x00ff, 0xf058, 0xba4e,
+ 0xe41e, 0x0b6c, 0xf798, 0xe41e, 0x0cc1, 0xe40e, 0x17ac, 0xe41e,
+ 0x0923, 0x2851, 0xe40a, 0x185a, 0xe40e, 0x17ac, 0xe41e, 0x18ab,
+ 0xe41e, 0x095c, 0x2851, 0xf10a, 0xa202, 0x3c62, 0xe41e, 0x0ccb,
+ 0xe41a, 0x18b2, 0xe40a, 0x17ac, 0x284e, 0x3c92, 0x284f, 0x3c93,
+ 0xa200, 0x3c51, 0xf13e, 0x284e, 0xe01a, 0x2a92, 0xe01b, 0xe05a,
+ 0xf118, 0x284f, 0x1893, 0xf0e8, 0xe41e, 0x2387, 0xe40a, 0x17ac,
+ 0x2801, 0xe408, 0x17ac, 0x2894, 0xf058, 0xe41e, 0x0ee3, 0xe40e,
+ 0x17ac, 0xe41e, 0x0b3f, 0xa200, 0x3c51, 0xf05e, 0x284e, 0x3c92,
+ 0x284f, 0x3c93, 0x2892, 0x3c4e, 0x2893, 0x3c4f, 0xa200, 0x3c51,
+ 0xe41e, 0x1887, 0xf078, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa2fe,
+ 0xe42e, 0xe41e, 0x1870, 0xe41e, 0x05a9, 0xe41e, 0x1e2a, 0xf74e,
+ 0xe165, 0x05e8, 0x2811, 0x3d15, 0x2857, 0x3d15, 0x2858, 0x3d15,
+ 0x28eb, 0x3d15, 0x281b, 0x3d15, 0x2824, 0x3d15, 0x281f, 0x3d15,
+ 0x2813, 0x3d15, 0x2816, 0x3d15, 0x2819, 0x3d15, 0xe42e, 0xe165,
+ 0x05e8, 0x2811, 0x1915, 0xf1d8, 0x2857, 0x1915, 0xf1a8, 0x2858,
+ 0x1915, 0xf178, 0x28eb, 0x1915, 0xf148, 0x281b, 0x1915, 0xf118,
+ 0x2824, 0x1915, 0xe428, 0x281f, 0x1915, 0xe428, 0x2813, 0x1915,
+ 0xe428, 0x2816, 0x1915, 0xe428, 0x2819, 0x1915, 0xe428, 0xe42e,
+ 0xa202, 0x3cbd, 0xe42e, 0x28ad, 0xe428, 0xe41e, 0x0638, 0xa202,
+ 0x3cad, 0xe42e, 0xa200, 0x3cad, 0xe42e, 0xc009, 0x2039, 0x4c3a,
+ 0xc000, 0xe42e, 0xc009, 0x3439, 0x3c3a, 0xc000, 0xe42e, 0xa200,
+ 0xba4f, 0xe042, 0xe003, 0x00ff, 0xf7cb, 0xe41e, 0x1b70, 0xa200,
+ 0xba4f, 0xe042, 0xe003, 0x00ff, 0xf7cb, 0xe41e, 0x1b78, 0xf04a,
+ 0xe41e, 0x18d9, 0xe42a, 0xe41e, 0x0b6c, 0xf6a8, 0xe41e, 0x0cc1,
+ 0xe42e, 0xe41e, 0x1b74, 0xf13a, 0xa102, 0xf14a, 0xa104, 0xf15a,
+ 0xa102, 0xf16a, 0xa102, 0xf17a, 0xa150, 0xf18a, 0xe41e, 0x1b7c,
+ 0xf04a, 0xba4f, 0xa102, 0xf7e8, 0xa202, 0xe42e, 0xe41e, 0x1908,
+ 0xf10e, 0xe41e, 0x1937, 0xf0de, 0xe41e, 0x1985, 0xf0ae, 0xe41e,
+ 0x1996, 0xf07e, 0xe41e, 0x19e0, 0xf04e, 0xe41e, 0x19e4, 0xf01e,
+ 0xe42a, 0xc868, 0xa80e, 0xe016, 0xe428, 0xe41e, 0x0cc1, 0xe42e,
+ 0xbc3e, 0xf1fd, 0x1810, 0xf11a, 0x0810, 0xf084, 0xa13e, 0xf060,
+ 0xa03e, 0x3c10, 0xe41e, 0x1ed9, 0x3c65, 0xa200, 0xe41e, 0x0c19,
+ 0xa201, 0x3e9b, 0x2865, 0xe42a, 0x2890, 0xe161, 0x05bd, 0xe418,
+ 0x192b, 0x2891, 0xe161, 0x05c2, 0xe418, 0x192b, 0xa202, 0xe42e,
+ 0xa200, 0xe16a, 0xe42e, 0x2911, 0xa102, 0xcc44, 0xe184, 0x1935,
+ 0x2901, 0xe41e, 0x0cb5, 0x2901, 0xe41e, 0x0cb5, 0xe42e, 0x2890,
+ 0xe161, 0x05bf, 0xf038, 0xe161, 0x05c4, 0x4c91, 0xf11a, 0x2911,
+ 0xe41e, 0x0cb5, 0xc009, 0x343f, 0x3c40, 0xc000, 0x2911, 0xe41e,
+ 0x0cb5, 0xc009, 0x3441, 0x3c42, 0xc000, 0x2911, 0xf02e, 0xa230,
+ 0x3c02, 0x2823, 0xe016, 0xe428, 0xba46, 0x3ca3, 0xa112, 0xb604,
+ 0xe42a, 0xa012, 0xe049, 0xa200, 0xa107, 0xb426, 0xa105, 0xb426,
+ 0xa105, 0xb5f6, 0xcc44, 0xe184, 0x1982, 0xba40, 0xf028, 0xf1be,
+ 0xba42, 0xba40, 0xba48, 0xba40, 0x3c03, 0xba40, 0xba40, 0xba4e,
+ 0x2803, 0xf05a, 0xba4a, 0xba4a, 0xba48, 0xf0ae, 0xba40, 0xf08a,
+ 0xba4a, 0xba40, 0xf05a, 0xba4a, 0xba40, 0xf02a, 0xba48, 0x2802,
+ 0xe41e, 0x0cb5, 0xe190, 0xa202, 0xe42e, 0xe41e, 0x1b7c, 0xf0da,
+ 0xa102, 0xcc44, 0xe004, 0x00ff, 0xe184, 0x198f, 0xba4f, 0xe052,
+ 0xe002, 0x00ff, 0xe016, 0xe42a, 0xa202, 0xe42e, 0xa202, 0xba4f,
+ 0xe003, 0x00ff, 0xf039, 0xba4f, 0xa204, 0xba1f, 0xe003, 0x0031,
+ 0xf049, 0xba5f, 0xa004, 0xe190, 0xba3f, 0x360e, 0x3e0f, 0xe005,
+ 0x4454, 0x1a0e, 0xf069, 0xe005, 0x4731, 0x1a0f, 0xf029, 0xf24e,
+ 0xe005, 0x4741, 0x1a0e, 0xf0b9, 0xe005, 0x3934, 0x1a0f, 0xf079,
+ 0xba7f, 0xa008, 0xba0f, 0xa10d, 0xe40b, 0x19ca, 0xc009, 0x2a2d,
+ 0xc000, 0xe045, 0xa009, 0xc009, 0x3e2d, 0xc000, 0xe41e, 0x1a73,
+ 0xa202, 0xe42e, 0xba4f, 0xa002, 0xc009, 0x2a2d, 0xc000, 0xe045,
+ 0xf4d1, 0xa202, 0xe42e, 0xba7e, 0xba40, 0xf098, 0xba41, 0xba4a,
+ 0xf04b, 0xba46, 0xba46, 0x3cb0, 0xa202, 0xe42e, 0xa200, 0xe42e,
+ 0xe41e, 0x1a73, 0xa202, 0xe42e, 0xc009, 0xa2fe, 0x3426, 0x3c27,
+ 0xa201, 0x3628, 0x3e29, 0x362a, 0x3e2b, 0xc000, 0xe41e, 0x0c78,
+ 0xc009, 0xe40d, 0x1a59, 0x3426, 0x3c27, 0xba40, 0xe40d, 0x1a59,
+ 0xae2a, 0xe055, 0x3628, 0x3e29, 0xe408, 0x1a4f, 0xba4c, 0xe40d,
+ 0x1a59, 0xae0c, 0xe055, 0xba40, 0xe40d, 0x1a59, 0xae28, 0xe055,
+ 0xba4a, 0xe40d, 0x1a59, 0xe055, 0xba40, 0xe40d, 0x1a59, 0xae26,
+ 0xe055, 0xba40, 0xe40d, 0x1a59, 0xae24, 0xe055, 0xba40, 0xe40d,
+ 0x1a59, 0xae22, 0xe055, 0xba40, 0xe40d, 0x1a59, 0xae20, 0xe055,
+ 0xba40, 0xe40d, 0x1a59, 0xae1e, 0xe055, 0xba40, 0xe40d, 0x1a59,
+ 0xae1c, 0xe055, 0x3628, 0x3e29, 0xe04a, 0xaf28, 0xa802, 0xe016,
+ 0xaf0d, 0xa83f, 0xa10b, 0xe01b, 0xe052, 0xf12a, 0xa201, 0xba46,
+ 0xf21d, 0xae38, 0xe055, 0xba46, 0xf1dd, 0xae30, 0xe055, 0xba46,
+ 0xf19d, 0xae28, 0xe055, 0xba46, 0xf15d, 0xae20, 0xe055, 0xba4e,
+ 0xf11d, 0xe0c4, 0x4064, 0xf0ed, 0xe055, 0x362a, 0x3e2b, 0x2228,
+ 0x4e29, 0xba40, 0xae1a, 0xe055, 0x3628, 0x3e29, 0xa202, 0xc000,
+ 0xe42e, 0xc009, 0xa2fe, 0x3426, 0x3c27, 0xa200, 0x3428, 0x3c29,
+ 0x342a, 0x3c2b, 0xc000, 0xe42e, 0xc009, 0x2426, 0x4c27, 0xc000,
+ 0xe42e, 0xc009, 0x2428, 0x4c29, 0xc000, 0xe42e, 0xc009, 0x242a,
+ 0x4c2b, 0xc000, 0xe42e, 0xe0c0, 0x0065, 0xa878, 0xa140, 0xf0ba,
+ 0xe41e, 0x1b7c, 0xa102, 0xcc44, 0xe184, 0x1a7f, 0xba4e, 0xe190,
+ 0xe40e, 0x1b03, 0xa201, 0xe41e, 0x1b5e, 0x2907, 0xa002, 0x3c0c,
+ 0x3d17, 0xa120, 0xf6e0, 0x2b07, 0xe41e, 0x1b74, 0xf05a, 0xe41e,
+ 0x1b7c, 0xe041, 0xf05e, 0x2861, 0xa002, 0xae06, 0xe041, 0xa00f,
+ 0xaf07, 0xae07, 0xe04a, 0xaf1f, 0xf0db, 0xa201, 0xe41e, 0x1b5e,
+ 0x8117, 0x8117, 0x2907, 0xa202, 0x3d07, 0xa201, 0xe41e, 0x1b5c,
+ 0xf50e, 0x3d17, 0xa201, 0xe41e, 0x1b5c, 0xe167, 0x0600, 0xe41e,
+ 0x1b74, 0x3d17, 0xe41e, 0x1b74, 0xf04a, 0xe41e, 0x1b7c, 0xf04e,
+ 0x2861, 0xa002, 0xae06, 0x3d17, 0x2a0c, 0xe41e, 0x1b5c, 0xa200,
+ 0x3c0b, 0xa200, 0xe167, 0x0600, 0xc703, 0x3d17, 0xe167, 0x0600,
+ 0xe41e, 0x1b74, 0xf3ba, 0xe41e, 0x1b74, 0xa108, 0xf0f8, 0xe004,
+ 0x4741, 0x3d17, 0xe004, 0x3934, 0x3d17, 0x28a7, 0xa008, 0x3ca7,
+ 0xe41e, 0x1b7c, 0xa108, 0xe41e, 0x1b78, 0x280b, 0xa002, 0x3c0b,
+ 0xba4f, 0x28a7, 0xa002, 0x3ca7, 0xa802, 0xf058, 0x280a, 0xae10,
+ 0xe056, 0x3d17, 0x3e0a, 0x28a7, 0xa80e, 0xe41a, 0x1b1e, 0xe41e,
+ 0x1b7c, 0x180b, 0xf6b0, 0x28a7, 0xa80e, 0xf0ea, 0x2aa7, 0xa803,
+ 0xf04b, 0x280a, 0xae10, 0x3d17, 0x2aa7, 0xa00f, 0xaf07, 0xae07,
+ 0x3ea7, 0xe418, 0x1b1e, 0xe40e, 0x1b1c, 0x280b, 0xa002, 0x3c0b,
+ 0x2901, 0xe41e, 0x0cb5, 0x3517, 0x3d17, 0x2901, 0xe41e, 0x0cb5,
+ 0x3517, 0x3d17, 0x28a7, 0xa010, 0x3ca7, 0xe41e, 0x1b1e, 0x2861,
+ 0xa002, 0x180b, 0xf6b0, 0xf01a, 0xa202, 0xe42e, 0x24b7, 0x4cb8,
+ 0xe000, 0x0088, 0x18a7, 0xf242, 0xe0c0, 0x0065, 0xaf12, 0xa802,
+ 0xf0da, 0xa201, 0xe41e, 0x1b5e, 0x8117, 0x8117, 0x2907, 0xa202,
+ 0x3d07, 0xa201, 0xe41e, 0x1b5c, 0xe42e, 0xe004, 0x0200, 0xe0c1,
+ 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x005d,
+ 0xe008, 0x0200, 0xe190, 0xf7b8, 0xe004, 0x0090, 0x3ca7, 0x24b5,
+ 0x4cb6, 0x08a7, 0xa110, 0xce20, 0xd111, 0x0600, 0xd112, 0x0004,
+ 0xd113, 0x0000, 0xca28, 0xf7f8, 0xa200, 0xe167, 0x0600, 0xc703,
+ 0x3d17, 0xe167, 0x0600, 0xe42e, 0xa200, 0xf02e, 0xa202, 0x3c0d,
+ 0x24b5, 0x4cb6, 0xae07, 0xe042, 0xce20, 0xd111, 0x0600, 0xd112,
+ 0x0004, 0x880d, 0x0113, 0xca28, 0xf7f8, 0xe167, 0x0600, 0xe42e,
+ 0xc009, 0x3c2c, 0xc000, 0xe42e, 0xc009, 0x282c, 0xc000, 0xe42e,
+ 0xc009, 0x3c2d, 0xc000, 0xe42e, 0xc009, 0x282d, 0xc000, 0xe42e,
+ 0x2c39, 0x3c7b, 0xa202, 0x3c7c, 0xa200, 0x3c7d, 0x3c7e, 0x284e,
+ 0xe016, 0xe428, 0x284f, 0xf0ca, 0xe41e, 0x1c11, 0xba40, 0xba40,
+ 0xb7f0, 0xb634, 0x3c7c, 0xa200, 0x3c7b, 0xa202, 0xe42e, 0xba40,
+ 0xf0ea, 0x2819, 0xe42a, 0xae02, 0x3c09, 0x2014, 0x4c15, 0x3400,
+ 0x3c01, 0x2c39, 0x3402, 0x3c03, 0xbc0c, 0xf058, 0xa202, 0x3c7d,
+ 0xe42e, 0xbc0c, 0xe40d, 0x1c0e, 0xe40a, 0x1c0c, 0xa102, 0xf0ca,
+ 0xa102, 0xf1fa, 0xa102, 0xf24a, 0xa102, 0xf35a, 0xa102, 0xe40a,
+ 0x1bf1, 0xe40e, 0x1bf9, 0xe41e, 0x0c78, 0xe40d, 0x1c0e, 0xa002,
+ 0x1002, 0x1c03, 0xe012, 0x3c0a, 0xf032, 0x0000, 0x0c01, 0xa203,
+ 0xe41e, 0x1c18, 0x2a0a, 0x3e04, 0x4c4f, 0xe41a, 0x1c30, 0xf5ae,
+ 0xbc40, 0xe40d, 0x1c0e, 0xa2ff, 0xe41e, 0x1c18, 0xf53e, 0xe41e,
+ 0x0c78, 0xe40d, 0x1c0e, 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032,
+ 0x0000, 0x0c01, 0x3c06, 0xbc20, 0xf2ad, 0x3c07, 0xe41e, 0x1c5d,
+ 0xe40e, 0x1ba9, 0xbc20, 0xf23d, 0xa102, 0xe41e, 0x1c78, 0xe40e,
+ 0x1ba9, 0xe41e, 0x1c11, 0xa202, 0x3c7e, 0xa200, 0x3c7b, 0xe40e,
+ 0x1ba9, 0xbc20, 0xf14d, 0x3c7b, 0x287b, 0xa2ff, 0xe41e, 0x1c18,
+ 0xf7c8, 0xf07e, 0x287b, 0xae02, 0xa2ff, 0xe41e, 0x1c18, 0xf7b8,
+ 0xa2fe, 0x3c7c, 0xe40e, 0x1ba9, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0xc410, 0xe161, 0x02f1, 0xa200, 0xc71f, 0x3d31, 0xe42e,
+ 0x3c04, 0x3e05, 0xe161, 0x02f0, 0x8809, 0x0022, 0xe184, 0x1c2b,
+ 0x2d11, 0x2b09, 0x1c04, 0x1a05, 0xf068, 0xf059, 0x8111, 0xa200,
+ 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200, 0xe42e, 0xa202, 0xe42e,
+ 0xe161, 0x02f0, 0x8809, 0x0022, 0xe184, 0x1c40, 0x2d11, 0x2b09,
+ 0x1804, 0x1a05, 0xf050, 0xf049, 0x8111, 0xa200, 0x3d09, 0x8111,
+ 0x8111, 0xe160, 0x0003, 0xe161, 0x02f1, 0x8809, 0x0022, 0xe184,
+ 0x1c5a, 0x2909, 0xf0fa, 0x2d01, 0x2e39, 0xe045, 0xf043, 0x2214,
+ 0x4e15, 0xe046, 0xae02, 0x1804, 0xf052, 0xa200, 0x8111, 0x3d01,
+ 0xe42e, 0x8131, 0xe190, 0xa202, 0xe42e, 0x2807, 0xa2ff, 0xe41e,
+ 0x1c18, 0xf7c8, 0xe161, 0x02f0, 0x8809, 0x0022, 0xe184, 0x1c73,
+ 0x2d11, 0x2b09, 0x1c06, 0xf078, 0xf067, 0x2807, 0x3d11, 0xa2fe,
+ 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200, 0xe42e, 0xa202, 0xe42e,
+ 0x3c08, 0xe161, 0x02f0, 0x8809, 0x0022, 0xe184, 0x1c88, 0x2d11,
+ 0x2b09, 0x1808, 0xf056, 0xf043, 0x8111, 0xa200, 0x3d09, 0x8111,
+ 0x8111, 0xe42e, 0x2819, 0x1812, 0xf122, 0x2812, 0xa102, 0xcc44,
+ 0xe161, 0x0202, 0xe184, 0x1c9d, 0x2911, 0xf06a, 0x2909, 0xe412,
+ 0x217f, 0xa200, 0x3d11, 0xe082, 0xa006, 0xe092, 0x2819, 0xb62c,
+ 0x3c12, 0x2816, 0xa104, 0xe428, 0xe41e, 0x1e2a, 0xe42e, 0x2816,
+ 0xa102, 0xf044, 0xf14a, 0xe40e, 0x1cf1, 0x7417, 0xe160, 0x0903,
+ 0x3d00, 0x282a, 0xe418, 0x0c92, 0xe42d, 0xe161, 0x0904, 0xe162,
+ 0x0905, 0x3501, 0x3d02, 0xe41e, 0x1d42, 0xf36e, 0xa200, 0xe160,
+ 0x0903, 0xe161, 0x0904, 0xe162, 0x0905, 0xe163, 0x0906, 0x3500,
+ 0x3d01, 0x3502, 0x3d03, 0x2818, 0xf158, 0xe41e, 0x0c92, 0xe42d,
+ 0xe164, 0x0903, 0xe165, 0x0904, 0x3504, 0x3d05, 0x282a, 0xf0aa,
+ 0xe41e, 0x0c92, 0xe42d, 0xe166, 0x0905, 0xe167, 0x0906, 0x3506,
+ 0x3d07, 0xe41e, 0x1d92, 0xf10e, 0xe164, 0x0903, 0xe165, 0x0904,
+ 0xe166, 0x0905, 0xe167, 0x0906, 0x3504, 0x3d05, 0x3506, 0x3d07,
+ 0xf03e, 0xe41e, 0x1de3, 0x2074, 0x4c75, 0x2276, 0x4e77, 0xe066,
+ 0x3472, 0x3c73, 0xe42e, 0x284f, 0x4c7e, 0xe418, 0x1e2a, 0x28e5,
+ 0xae02, 0xe000, 0x0578, 0xe092, 0x2072, 0x4c73, 0x3511, 0x3d11,
+ 0x28e5, 0xe000, 0x059a, 0xe092, 0x2884, 0x3d11, 0x28e5, 0xa002,
+ 0x3ce5, 0x28eb, 0x2a16, 0xa105, 0xb616, 0x2a21, 0xb616, 0x3c07,
+ 0xe41e, 0x219c, 0xf048, 0xe41e, 0x1e2f, 0xf7be, 0xe41e, 0x21ac,
+ 0xe428, 0xe41e, 0x1e2f, 0xf7be, 0x28e9, 0xf04a, 0xa102, 0x3ce9,
+ 0xf14e, 0x28e8, 0xf12a, 0x28e7, 0xe000, 0x05ab, 0xe092, 0x28e7,
+ 0xa002, 0x3ce7, 0xa122, 0xf028, 0x3ce7, 0x28e8, 0xa102, 0x3ce8,
+ 0x2901, 0xe049, 0x1a7f, 0xe425, 0xe41e, 0x08a5, 0xe049, 0xa2fa,
+ 0xb7f2, 0xe42e, 0xa202, 0x5817, 0xaf02, 0x3c06, 0x284f, 0x2a82,
+ 0xf0b8, 0xf0d9, 0xe164, 0x0906, 0x2114, 0x4d14, 0xe166, 0x0908,
+ 0x2316, 0x4f16, 0xf09e, 0xa200, 0xa201, 0xf06e, 0xa200, 0xe161,
+ 0x090a, 0x2311, 0x4f11, 0x3400, 0x3c01, 0x3602, 0x3e03, 0xe161,
+ 0x0903, 0x2f01, 0x1202, 0x1e03, 0xf071, 0xe013, 0x1e06, 0xf085,
+ 0x0c06, 0x0c06, 0xf05e, 0x1e06, 0xf037, 0x1c06, 0x1c06, 0x3404,
+ 0x3c05, 0xe161, 0x0903, 0x0d01, 0x3474, 0x3c75, 0xe162, 0x0904,
+ 0x0112, 0x0d12, 0x3476, 0x3c77, 0x284e, 0xf14a, 0x2074, 0x4c75,
+ 0xe161, 0x090a, 0x3511, 0x3d11, 0x2004, 0x4c05, 0xe164, 0x0906,
+ 0x3514, 0x3d14, 0xe161, 0x0903, 0xe166, 0x0908, 0x2d01, 0x3516,
+ 0x3d16, 0xe42e, 0xe41e, 0x1df4, 0xe160, 0x090b, 0x2900, 0xf34a,
+ 0x2000, 0x4c01, 0x0c39, 0xf306, 0x2a4e, 0xe017, 0xe046, 0xa102,
+ 0xf2b4, 0xe160, 0x090b, 0xe188, 0x000f, 0x7d00, 0x3402, 0x3c03,
+ 0xe41e, 0x1e1a, 0xe163, 0x090b, 0x2903, 0xa102, 0xcc44, 0xe161,
+ 0x09e0, 0xa200, 0xe184, 0x1db5, 0x0111, 0x0d11, 0xae02, 0x3404,
+ 0xe008, 0xffff, 0xaf02, 0x3c05, 0x8403, 0x8204, 0xe018, 0xae1e,
+ 0x8205, 0xe01c, 0xe161, 0x09e0, 0x8802, 0x0022, 0xe184, 0x1dc9,
+ 0x0111, 0x0d11, 0xf02e, 0xa200, 0x2a4e, 0xf059, 0xe161, 0x0907,
+ 0x0111, 0x0d11, 0xe164, 0x0903, 0x0114, 0x0d14, 0x3474, 0x3c75,
+ 0xe162, 0x0909, 0x0112, 0x0d12, 0xe166, 0x0905, 0x0116, 0x0d16,
+ 0x3476, 0x3c77, 0xe42e, 0xe41e, 0x1df4, 0x284f, 0xe016, 0xf08a,
+ 0x2000, 0x4c01, 0x0c39, 0xae02, 0x2a4e, 0xe017, 0xe046, 0x3474,
+ 0x3c75, 0x3476, 0x3c77, 0xe42e, 0x2882, 0xf09a, 0xa200, 0xe162,
+ 0x0901, 0x3512, 0x3d12, 0xe161, 0x0900, 0x3d01, 0x284f, 0xe016,
+ 0xf0da, 0xe162, 0x0901, 0x2112, 0x4d12, 0xe161, 0x0900, 0x2f01,
+ 0x1e39, 0xf047, 0xa203, 0x5a13, 0xe042, 0x3400, 0x3c01, 0x2839,
+ 0xe161, 0x0900, 0x3d01, 0x2000, 0x4c01, 0xe162, 0x0901, 0x3512,
+ 0x3d12, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x0026, 0xae11, 0xe042,
+ 0xce20, 0xd111, 0x09e0, 0xd112, 0x0200, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe42e, 0x28e5, 0xe426, 0xe41e, 0x1e2f, 0xf7ce, 0xe161,
+ 0x0578, 0xe162, 0x0578, 0x2111, 0x4d11, 0xa201, 0x3e00, 0xa203,
+ 0x28e5, 0xa104, 0xf0e4, 0xcc44, 0xe184, 0x1e47, 0x2112, 0x4d0a,
+ 0x1111, 0x1d11, 0xf056, 0xe082, 0xa104, 0xe094, 0x3e00, 0xa003,
+ 0xe084, 0xa004, 0xe092, 0x2800, 0xe000, 0x059a, 0xe098, 0xa002,
+ 0xe096, 0x2904, 0x3c01, 0xe41e, 0x2186, 0x28e5, 0x1800, 0xa104,
+ 0xf0a4, 0xcc44, 0xe184, 0x1e61, 0x2911, 0x3d12, 0x2911, 0x3d12,
+ 0x2913, 0x3d14, 0x28e5, 0xb5f0, 0x3ce5, 0x28e6, 0xe000, 0x05ab,
+ 0xe092, 0x2801, 0x3d01, 0x28e6, 0xa002, 0x3ce6, 0xa122, 0xf028,
+ 0x3ce6, 0x28e8, 0xa002, 0x3ce8, 0xe42e, 0xa200, 0x3cb2, 0xe004,
+ 0x0054, 0xe09c, 0x287f, 0xa102, 0xcc44, 0xe184, 0x1e8e, 0x9e06,
+ 0x5cb2, 0xa802, 0xf0a8, 0x28b2, 0xe049, 0xe001, 0x0518, 0xe09f,
+ 0x2b07, 0xa809, 0xe419, 0x218d, 0x2ab2, 0xa003, 0x3eb2, 0xe42e,
+ 0xe004, 0x0518, 0xe09e, 0xe004, 0x0054, 0xe09c, 0x287f, 0xa102,
+ 0xcc44, 0xa200, 0x3cb2, 0xe184, 0x1ea4, 0x2b17, 0xaf05, 0xa803,
+ 0x5ab2, 0xe056, 0x2ab2, 0xa003, 0x3eb2, 0x9f06, 0xe42e, 0x2840,
+ 0xf058, 0xe41e, 0x21c8, 0x3c3e, 0xf03e, 0x283e, 0x3c84, 0xe42e,
+ 0xe161, 0x0600, 0xa200, 0x3d11, 0x3c02, 0xd022, 0x011f, 0xe184,
+ 0x1ebd, 0xe41e, 0x1f9f, 0x2802, 0xa002, 0x3c02, 0xa200, 0x3c9b,
+ 0xe42e, 0xba4e, 0xba40, 0xba40, 0xba40, 0xba40, 0xba46, 0xba4e,
+ 0xbc3e, 0xf0dd, 0x3c00, 0x1810, 0xf038, 0xa2fe, 0x3c10, 0x2800,
+ 0xe000, 0x0100, 0xe41e, 0x1f30, 0xa202, 0xe42e, 0xe16a, 0xa200,
+ 0xe42e, 0xa204, 0x3c9b, 0x2810, 0xe000, 0x0100, 0xe41e, 0x1f6b,
+ 0xe42a, 0xe41e, 0x1429, 0xf056, 0xe41e, 0x1c8a, 0xa202, 0xe42e,
+ 0xa2fe, 0x3c10, 0xa200, 0xe42e, 0xe41e, 0x0c78, 0xf12d, 0x3c01,
+ 0xe002, 0x00ff, 0xf0e0, 0x2801, 0x1829, 0xf038, 0xa2fe, 0x3c29,
+ 0x28ae, 0xa802, 0x3cae, 0x2801, 0xe41e, 0x1f30, 0xa202, 0xe42e,
+ 0xe16a, 0xa200, 0xe42e, 0xa202, 0x3c9b, 0x2829, 0xe41e, 0x1f6b,
+ 0xf0da, 0xe41e, 0x1545, 0x3c65, 0xa200, 0xe41e, 0x0c19, 0xa201,
+ 0x3e9b, 0x2865, 0xf03a, 0xa202, 0xe42e, 0xe0c1, 0x0059, 0xa107,
+ 0xf079, 0x28ae, 0xa104, 0xf04a, 0x28ae, 0xa902, 0x3cae, 0xa2fe,
+ 0x3c29, 0xa200, 0xe42e, 0x2860, 0xa102, 0xf06a, 0x2499, 0x4c9a,
+ 0xe41e, 0x1fb9, 0xe470, 0xe41e, 0x1fd2, 0xe41e, 0x1fc0, 0xe470,
+ 0x3c02, 0xe41e, 0x1fa1, 0xa200, 0x3c06, 0x2802, 0xae14, 0x3404,
+ 0x3c05, 0xe41e, 0x0c14, 0x0404, 0x0c05, 0xce20, 0xd111, 0x0000,
+ 0xe41e, 0x0be7, 0x1806, 0xa00e, 0xaf06, 0xae02, 0xce24, 0xd113,
+ 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa, 0xe41e, 0x0bf0, 0xf128,
+ 0x2004, 0x4c05, 0xe000, 0x0200, 0x3404, 0x3c05, 0xe41e, 0x0be7,
+ 0x3c06, 0xe41e, 0x09b5, 0xe41e, 0x0be7, 0xe002, 0x0400, 0xf020,
+ 0xf59e, 0xe161, 0x0600, 0xa202, 0x3d11, 0xe41e, 0x0be7, 0x3d01,
+ 0xe41e, 0x1f9f, 0xe42e, 0x3c02, 0xe41e, 0x1fa1, 0xe161, 0x0600,
+ 0x2911, 0xe42a, 0x8111, 0x2111, 0x4d11, 0x2802, 0xae14, 0x3404,
+ 0x3c05, 0x289b, 0xa102, 0xf0da, 0xe41e, 0x0c14, 0x0404, 0x0c05,
+ 0xe41e, 0x1fb9, 0xa204, 0xe41e, 0x0c19, 0xe004, 0x0090, 0xf0ce,
+ 0xe41e, 0x0c14, 0x0404, 0x0c05, 0xe41e, 0x1fc0, 0xa202, 0xe41e,
+ 0x0c19, 0xe004, 0x0080, 0xcc66, 0xcc6a, 0xcc6e, 0xa01e, 0xcc6c,
+ 0xa200, 0xcc60, 0xcc68, 0xcc70, 0xe128, 0xa202, 0xe42e, 0xa204,
+ 0xf02e, 0xa206, 0x3c0a, 0xe41e, 0x1faf, 0xce20, 0xd111, 0x0600,
+ 0xd112, 0x0004, 0x880a, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0,
+ 0x0041, 0xe005, 0x002a, 0xae11, 0xe042, 0x2a02, 0xae07, 0xe042,
+ 0xe42e, 0xce20, 0xa080, 0x3499, 0x3c9a, 0xd111, 0x0090, 0xf07e,
+ 0xce20, 0xa080, 0xe41e, 0x1fcd, 0xd111, 0x0080, 0xd112, 0x0010,
+ 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe42e, 0xc009, 0x3410, 0x3c11,
+ 0xc000, 0xe42e, 0xc009, 0x2410, 0x4c11, 0xc000, 0xe42e, 0x2819,
+ 0xe42a, 0xa102, 0x3c00, 0x284e, 0xe01a, 0x2abe, 0xa003, 0xa803,
+ 0xe052, 0xe418, 0x2096, 0xe41e, 0x20c9, 0xe41e, 0x20e7, 0xe42e,
+ 0x287e, 0xf10a, 0x2074, 0x4c75, 0x1072, 0x1c73, 0x3474, 0x3c75,
+ 0x2076, 0x4c77, 0x1072, 0x1c73, 0x3476, 0x3c77, 0xa200, 0x3472,
+ 0x3c73, 0xa200, 0x3cbe, 0x2c39, 0x2a4f, 0x4e7e, 0xb612, 0x3c80,
+ 0x2819, 0xf0ea, 0xa102, 0x3c00, 0x2839, 0x3c50, 0x287d, 0xe41a,
+ 0x2071, 0xa202, 0xe418, 0x2042, 0xe41e, 0x2013, 0xe42e, 0x2884,
+ 0xe41e, 0x217f, 0xe42e, 0xc420, 0xe161, 0x0202, 0x8800, 0x0022,
+ 0xe184, 0x201c, 0x2901, 0xf03a, 0x8131, 0xe42e, 0xe082, 0xe002,
+ 0x0202, 0xaf04, 0x3c0a, 0xa206, 0x3d09, 0x287c, 0x3d09, 0x287b,
+ 0x3d31, 0x8109, 0x2884, 0x3d11, 0xe42e, 0xc420, 0xe161, 0x0202,
+ 0x8800, 0x0022, 0xe184, 0x2036, 0x2901, 0xf03a, 0x8131, 0xe42e,
+ 0xa206, 0x3d09, 0xa202, 0x3d09, 0x2850, 0x3d31, 0x8109, 0xa2fe,
+ 0x3d11, 0xe42e, 0xa200, 0xc420, 0xe161, 0x0202, 0x8800, 0x0022,
+ 0xe184, 0x204c, 0x2b31, 0xe01b, 0xe042, 0x1819, 0xe424, 0xa203,
+ 0xae21, 0xe161, 0x0202, 0x8800, 0x0022, 0xe184, 0x206a, 0x2909,
+ 0xf11a, 0x2909, 0xf0e6, 0x2901, 0x1c50, 0xf036, 0x1014, 0x1c15,
+ 0x0c50, 0xe046, 0xf062, 0xe042, 0xe049, 0xe082, 0xa004, 0xe094,
+ 0x8111, 0x8111, 0x8131, 0xa200, 0x3d12, 0x2912, 0xe412, 0x217f,
+ 0xe42e, 0xe161, 0x0200, 0xe162, 0x02f0, 0x8800, 0x0022, 0xe184,
+ 0x2094, 0x2912, 0x3c02, 0x2912, 0x3c03, 0xe01a, 0xb670, 0x3c04,
+ 0x2804, 0x8112, 0x8112, 0xf08a, 0x2802, 0x3d11, 0x2803, 0x3d11,
+ 0x2804, 0x3d11, 0xf0ae, 0x8111, 0x8111, 0x2901, 0xa201, 0x3f11,
+ 0xf04a, 0x2901, 0xe412, 0x217f, 0x8111, 0xe42e, 0x284f, 0xe428,
+ 0x2819, 0xe42a, 0xe41e, 0x216c, 0x4c1a, 0xe42a, 0x2c80, 0x3c50,
+ 0xa200, 0x3c0f, 0x2850, 0xa002, 0x2214, 0x4e15, 0xa103, 0xe052,
+ 0x3c50, 0x1c39, 0xe42a, 0x281a, 0x4caa, 0xf05a, 0xe41e, 0x2042,
+ 0xe41e, 0x202d, 0x281a, 0xf6f8, 0x28ae, 0xa920, 0x3cae, 0x280f,
+ 0xa002, 0x3c0f, 0xa120, 0xf062, 0xe41e, 0x05a9, 0xe41e, 0x1c11,
+ 0xf62e, 0xe41e, 0x05a9, 0xe41e, 0x1e2a, 0x28ae, 0xa908, 0x3cae,
+ 0xe42e, 0xe161, 0x0200, 0xe162, 0x02f0, 0x8800, 0x0022, 0xe184,
+ 0x20db, 0x2911, 0x3d12, 0x2911, 0x2b11, 0xa107, 0xb612, 0x3d12,
+ 0xa200, 0x3d12, 0x3d12, 0x8111, 0xe161, 0x0330, 0xe162, 0x02f0,
+ 0xd022, 0x003f, 0xe184, 0x20e5, 0x2912, 0x3d11, 0xe42e, 0xe41e,
+ 0x20f3, 0x2808, 0xe000, 0x0370, 0xe096, 0xe41e, 0x2134, 0x2808,
+ 0x0809, 0x3c6d, 0xe42e, 0xe161, 0x0600, 0xa200, 0xc70f, 0x3d11,
+ 0xa206, 0x3c05, 0xa200, 0x3c08, 0xc420, 0xe163, 0x0370, 0xa2fe,
+ 0x3c06, 0xa203, 0xae21, 0xe013, 0xe161, 0x0202, 0xe162, 0x0600,
+ 0x8800, 0x0022, 0xe184, 0x2123, 0x2912, 0xf168, 0x2909, 0x1805,
+ 0xf124, 0x2909, 0xf0f6, 0x2901, 0x1c39, 0xf036, 0x1014, 0x1c15,
+ 0x0c39, 0xe046, 0xf076, 0xe042, 0xe049, 0xe084, 0xe002, 0x0601,
+ 0x3c06, 0x8111, 0x8111, 0x8131, 0x2806, 0xe424, 0xe000, 0x0600,
+ 0xe094, 0xa202, 0x3d02, 0x2806, 0xae02, 0x3d13, 0x2808, 0xa002,
+ 0x3c08, 0x1819, 0xf4d8, 0xe42e, 0xe161, 0x0600, 0xa200, 0xc70f,
+ 0x3d11, 0xa206, 0x3c05, 0xa200, 0x3c09, 0xc420, 0xa2fe, 0x3c07,
+ 0xa221, 0xe161, 0x0202, 0xe162, 0x0600, 0x8800, 0x0022, 0xe184,
+ 0x215b, 0x2912, 0xf118, 0x2909, 0x1805, 0xf0d4, 0x2909, 0xf0a2,
+ 0x2901, 0xe046, 0xf072, 0xe042, 0xe049, 0xe084, 0xe002, 0x0601,
+ 0x3c07, 0x8111, 0x8111, 0x8131, 0x2807, 0xe424, 0xe000, 0x0600,
+ 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02, 0x3d13, 0x2809, 0xa002,
+ 0x3c09, 0x1819, 0xf548, 0xe42e, 0x2819, 0xe426, 0xa102, 0xcc44,
+ 0xc420, 0xe161, 0x0202, 0xe184, 0x2177, 0x2901, 0xe428, 0x8131,
+ 0xe42e, 0xe161, 0x0518, 0xa200, 0xc71f, 0x3d11, 0xe42e, 0xe000,
+ 0x0518, 0xe09e, 0x2907, 0xa80c, 0x3d07, 0xe42e, 0xe000, 0x0518,
+ 0xe09e, 0x2907, 0xa80a, 0x3d07, 0xe42e, 0x3c81, 0xe000, 0x0518,
+ 0xe09e, 0x2907, 0xa806, 0x3d07, 0x2881, 0xa002, 0x3c81, 0x187f,
+ 0xe428, 0xa200, 0x3c81, 0xe42e, 0xe161, 0x0518, 0x287f, 0xa102,
+ 0xcc44, 0xa201, 0xe184, 0x21a7, 0x2911, 0xa804, 0xe01a, 0xe041,
+ 0x1a07, 0xa202, 0xb602, 0xe42e, 0xe161, 0x0518, 0x287f, 0xa102,
+ 0xcc44, 0xa200, 0xe184, 0x21b7, 0x2b11, 0xa807, 0xe01b, 0xe042,
+ 0x18eb, 0xa102, 0xe01a, 0xe42e, 0xe161, 0x0518, 0x287f, 0xa102,
+ 0xcc44, 0xe184, 0x21c6, 0x2911, 0xe016, 0xe428, 0xe190, 0xe42e,
+ 0x2881, 0x3c00, 0x2800, 0xe000, 0x0518, 0xe092, 0x2901, 0xf10a,
+ 0x2800, 0xa002, 0x3c00, 0x187f, 0xf038, 0xa200, 0x3c00, 0x2800,
+ 0x1881, 0xf718, 0xa200, 0x3c81, 0xa2fe, 0x3c84, 0xe42e, 0xa20e,
+ 0x3d01, 0x2800, 0x3c84, 0xe42e, 0xe0c1, 0x0044, 0xa80f, 0xe056,
+ 0xe42e, 0xa200, 0xe41e, 0x21e4, 0xe42e, 0xe0c1, 0x0044, 0xaf0d,
+ 0xae03, 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105, 0xf039,
+ 0xa213, 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1,
+ 0x0420, 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166, 0x0640, 0xe167,
+ 0x0500, 0x287f, 0xf166, 0xa102, 0xcc44, 0xe184, 0x2227, 0xa200,
+ 0xe41e, 0x21e4, 0xaf04, 0xe41e, 0x21ed, 0xae20, 0x2e66, 0xe056,
+ 0x9f17, 0x2057, 0x4c58, 0xae08, 0x9f17, 0xe41e, 0x222d, 0xe190,
+ 0xe190, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x2116, 0x4d16, 0x9f17,
+ 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0xe42e, 0xe0c0,
+ 0x0044, 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa860, 0xe42a,
+ 0xe0c0, 0x0061, 0xa83e, 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785,
+ 0xe018, 0xe000, 0x0500, 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db,
+ 0xa200, 0xe41e, 0x21e9, 0xa80e, 0xaf04, 0xe41e, 0x21ed, 0xe41e,
+ 0x21f5, 0xe40b, 0x2260, 0xa81e, 0xe41e, 0x21fa, 0xae09, 0xe056,
+ 0xae20, 0xe0c1, 0x006e, 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0,
+ 0x0060, 0xa822, 0xa122, 0xf04a, 0x2057, 0x4c58, 0xf03e, 0x2058,
+ 0x4c57, 0xae08, 0x9f17, 0xe0c0, 0x0062, 0x9f17, 0xe0c0, 0x0063,
+ 0x9f17, 0xe0c0, 0x0064, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e,
+ 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11, 0xe042, 0xce20,
+ 0xd111, 0x0640, 0xd112, 0x00c0, 0x88ec, 0x0113, 0xca29, 0xf7f9,
+ 0xe190, 0xe42e, 0xa2fe, 0x3c89, 0xa200, 0x3c88, 0xe42e, 0x2856,
+ 0x3c89, 0x2889, 0xf032, 0xa200, 0x3c88, 0xa200, 0x3c8d, 0x3c8e,
+ 0x2857, 0x3c8b, 0x2858, 0x3c8c, 0x2888, 0xe42a, 0x2889, 0xe424,
+ 0x2889, 0xe0c2, 0x0143, 0x288a, 0xe0c2, 0x0144, 0xa200, 0xe0c2,
+ 0x017f, 0xe0c2, 0x0149, 0xe41e, 0x21e4, 0xe0c2, 0x017f, 0x288b,
+ 0xa102, 0xae20, 0x4c8c, 0xa102, 0xe0c2, 0x0142, 0xa200, 0xae20,
+ 0x2a87, 0xe042, 0xe0c2, 0x014e, 0xe42e, 0x2889, 0x2a8e, 0x1a8c,
+ 0xe423, 0x288d, 0xae0e, 0x4c8e, 0xa203, 0xb615, 0x3e8f, 0x2a8f,
+ 0xae03, 0xa903, 0xae1d, 0xe056, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2,
+ 0x014d, 0xa202, 0xe0c2, 0x014a, 0x2a8d, 0xa003, 0x3e8d, 0x1a8b,
+ 0xf065, 0x2a8e, 0xa003, 0x3e8e, 0xa201, 0x3e8d, 0xe42e, 0x2888,
+ 0xf15a, 0x288e, 0x188c, 0xf042, 0xe41e, 0x22c5, 0xf7be, 0xe0c0,
+ 0x014b, 0xf7e8, 0xa204, 0xae1c, 0xe0c2, 0x014d, 0xa202, 0xe0c2,
+ 0x014a, 0xe190, 0xe0c0, 0x014b, 0xf7e8, 0x2885, 0x3c89, 0xe42e,
+ 0xe41e, 0x2375, 0xe41e, 0x0e5d, 0xe41e, 0x2331, 0xe41e, 0x24dd,
+ 0xe41e, 0x0dd5, 0x282b, 0xf04a, 0xe41e, 0x10e0, 0xf20e, 0xa200,
+ 0x3c59, 0x2c59, 0x1c44, 0xf1b2, 0x2c59, 0xa201, 0xe41e, 0x0f50,
+ 0x2c52, 0x1c59, 0xf774, 0xf06a, 0xe41e, 0x2422, 0x2c52, 0x1c44,
+ 0xf0e2, 0xe41e, 0x0ccb, 0xf6ea, 0xe41e, 0x05c6, 0xf05a, 0xe41e,
+ 0x05e5, 0xe40e, 0x232e, 0xe41e, 0x2400, 0xf64e, 0xe41e, 0x2592,
+ 0xe42e, 0xa202, 0xae0c, 0x2a32, 0xa83f, 0xe056, 0xae0a, 0x2a32,
+ 0xa83f, 0xe056, 0xae06, 0xcf80, 0xa200, 0xae02, 0xa902, 0xae04,
+ 0xcfc2, 0x282b, 0xe01a, 0xae0e, 0x4c57, 0xa102, 0xae02, 0x4c34,
+ 0xae06, 0xcf00, 0xd1d3, 0x000b, 0xd185, 0x0001, 0xc420, 0xe161,
+ 0x0201, 0xa200, 0xd022, 0x000f, 0xe184, 0x2358, 0x2b31, 0xae02,
+ 0xb42a, 0xcfe8, 0x2072, 0x4c73, 0xcfea, 0x2074, 0x4c75, 0xcfec,
+ 0x2076, 0x4c77, 0xcfee, 0xe004, 0x0060, 0xcbcf, 0xa803, 0xf03b,
+ 0xe004, 0x0070, 0xce30, 0xe161, 0x0260, 0xd022, 0x001f, 0xe184,
+ 0x2373, 0x2111, 0x4d11, 0xce32, 0xe42e, 0xa202, 0xe0c2, 0x013c,
+ 0xa200, 0xa221, 0xd022, 0x00df, 0xe184, 0x2382, 0xe0c2, 0x013e,
+ 0xe0c3, 0x013f, 0xa002, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa200,
+ 0x3c94, 0xe41e, 0x0c78, 0xe40d, 0x23fd, 0x3c52, 0x1c44, 0xe402,
+ 0x23fd, 0xbc12, 0xe40d, 0x23fd, 0xa10a, 0xb4a8, 0xa104, 0xe400,
+ 0x23fd, 0xbdfe, 0xe40d, 0x23fd, 0x1829, 0xf03a, 0xa202, 0x3c94,
+ 0x7413, 0x1839, 0xf03a, 0xa202, 0x3c94, 0x284f, 0xf09a, 0xe41e,
+ 0x0c78, 0xe40d, 0x23fd, 0x1c45, 0xf03a, 0xa202, 0x3c94, 0x2816,
+ 0xa102, 0xf034, 0xf18a, 0xf33e, 0x7417, 0xe160, 0x0903, 0x1d00,
+ 0xf03a, 0xa202, 0x3c94, 0x282a, 0xf2aa, 0xe41e, 0x0c92, 0xf3ed,
+ 0xe161, 0x0904, 0xe162, 0x0905, 0x1101, 0x1d02, 0xf03a, 0xa202,
+ 0x3c94, 0xf1de, 0x2818, 0xf1b8, 0xe41e, 0x0c92, 0xf2fd, 0xe163,
+ 0x0903, 0xe164, 0x0904, 0x1103, 0x1d04, 0xf03a, 0xa202, 0x3c94,
+ 0x282a, 0xf0da, 0xe41e, 0x0c92, 0xf21d, 0xe165, 0x0905, 0xe166,
+ 0x0906, 0x1105, 0x1d06, 0xf03a, 0xa202, 0x3c94, 0x2835, 0xf06a,
+ 0xbcfe, 0xf14d, 0xf03a, 0xa201, 0x3e94, 0x3c01, 0x2894, 0xf068,
+ 0x2801, 0xf048, 0xe41e, 0x10cb, 0x3c94, 0xe41e, 0x0be7, 0xae06,
+ 0xc873, 0xe046, 0xf034, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xa200, 0xe41e, 0x0bf4, 0xe41e, 0x0bf0, 0xf068, 0xa202, 0xe41e,
+ 0x08ad, 0xe41e, 0x0bf4, 0xe16a, 0x2c52, 0x3c59, 0xa200, 0x3c0c,
+ 0xe41e, 0x2435, 0x2c59, 0x1c44, 0xf092, 0xe41e, 0x2450, 0xf09d,
+ 0xcb86, 0xa102, 0xf780, 0xc894, 0xf768, 0xe41e, 0x0cc1, 0xe42e,
+ 0xe16a, 0xe42e, 0x284f, 0xe016, 0x3c38, 0xa202, 0x3c0c, 0xe41e,
+ 0x2435, 0xa200, 0x3c0c, 0x2c59, 0x180d, 0xf072, 0xe41e, 0x2479,
+ 0x2c53, 0xa002, 0x3c53, 0xf78e, 0xe42e, 0xd1fa, 0x0000, 0x284b,
+ 0xae0a, 0x4c4c, 0xae0a, 0x4c4d, 0xcf30, 0x2848, 0xae04, 0x4c38,
+ 0xcf82, 0xd1c3, 0x0000, 0x284a, 0xcf96, 0x2848, 0xae0c, 0x4c38,
+ 0xcfc4, 0x280c, 0xf03a, 0x2838, 0xf03a, 0xd188, 0x0001, 0xe42e,
+ 0xd185, 0x0002, 0xd1d0, 0x003f, 0xcba0, 0xa810, 0xcba3, 0xe409,
+ 0x246f, 0xf7b8, 0xe41e, 0x2555, 0xcbe0, 0xf7f8, 0x285a, 0xe41a,
+ 0x2578, 0xcba0, 0xcba3, 0xe409, 0x246f, 0xf7c8, 0xd186, 0x0001,
+ 0xd185, 0x0004, 0xe41e, 0x2588, 0xcb06, 0x3c59, 0xe42e, 0xd1d0,
+ 0x0000, 0xd1d1, 0x0000, 0xcb1c, 0xf7f8, 0xcbe0, 0xf7f8, 0xe16b,
+ 0xe42e, 0xd185, 0x0002, 0xd186, 0x0000, 0xd1c2, 0x0001, 0xd1c5,
+ 0x0000, 0xd1c4, 0x0000, 0xd1d0, 0x000e, 0xcba0, 0xf7f8, 0x2054,
+ 0x4c55, 0xf098, 0xd1c2, 0x0000, 0xd1c5, 0x0003, 0xd1c4, 0x0003,
+ 0xd1c8, 0x0000, 0xd1d0, 0x0020, 0xe41e, 0x2555, 0xa200, 0xe0c2,
+ 0x012a, 0xcbe0, 0xf7f8, 0x285a, 0xe41a, 0x2578, 0xcba0, 0xf7f8,
+ 0xd186, 0x0001, 0xd185, 0x0004, 0xe41e, 0x2588, 0xcb06, 0x3c59,
+ 0xe42e, 0xa200, 0xe0c2, 0x0100, 0xe0c2, 0x013d, 0xe0c2, 0x0128,
+ 0xcc8e, 0x2a88, 0xb692, 0xae08, 0xa91c, 0xe0c2, 0x017c, 0xa218,
+ 0xe0c2, 0x017d, 0xa200, 0xe41e, 0x21e4, 0x2a22, 0xe017, 0xae09,
+ 0xe056, 0xa203, 0xae11, 0xe056, 0xe0c2, 0x0213, 0xa200, 0xe0c2,
+ 0x0215, 0xa202, 0xe0c2, 0x0210, 0x2057, 0x4c58, 0xae08, 0xe0c2,
+ 0x0101, 0xe0c2, 0x0205, 0xa200, 0xe41e, 0x21e4, 0x2a22, 0xe017,
+ 0xae07, 0xe056, 0xe0c2, 0x0102, 0xe42e, 0xe0c0, 0x0050, 0xe049,
+ 0xe008, 0x007f, 0x3c08, 0xaf11, 0xe009, 0x007f, 0x3e09, 0x4608,
+ 0x3e08, 0xa200, 0x2a08, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2a08,
+ 0xa805, 0xf02b, 0xa912, 0x2a08, 0xa809, 0xf02b, 0xa940, 0x2a08,
+ 0xa811, 0xf02b, 0xa980, 0xe0c2, 0x040c, 0xe0c1, 0x0046, 0xe004,
+ 0x0002, 0xae10, 0xe042, 0x2a09, 0xa803, 0xf05b, 0xe161, 0x05cb,
+ 0x2111, 0x4d11, 0xcf0e, 0xe0c1, 0x0046, 0xe004, 0x004a, 0xae10,
+ 0xe042, 0x2a09, 0xa805, 0xf05b, 0xe161, 0x05cd, 0x2111, 0x4d11,
+ 0xe0c2, 0x0103, 0xe0c1, 0x0046, 0xe004, 0x007a, 0xae10, 0xe042,
+ 0x2a09, 0xa809, 0xf05b, 0xe161, 0x05cf, 0x2111, 0x4d11, 0xe0c2,
+ 0x0211, 0xe0c1, 0x0046, 0xe004, 0x007a, 0xe000, 0x0040, 0xae10,
+ 0xe042, 0x2a09, 0xa811, 0xf05b, 0xe161, 0x05d1, 0x2111, 0x4d11,
+ 0xe0c2, 0x0212, 0xa200, 0xe0c2, 0x0104, 0xe0c2, 0x0204, 0xa200,
+ 0xe0c2, 0x0208, 0xe41e, 0x2596, 0xa20e, 0xe0c2, 0x0312, 0xe0c0,
+ 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414, 0xe41a, 0x25be, 0xe41e,
+ 0x0274, 0xa202, 0xe0c2, 0x0106, 0xe42e, 0xa200, 0xe0c2, 0x0113,
+ 0xe0c2, 0x030d, 0xe0c2, 0x022b, 0xcb94, 0xe0c2, 0x0115, 0xcba4,
+ 0xe0c2, 0x012a, 0xcb8a, 0xe0c2, 0x0114, 0xa802, 0x3c5a, 0xe42a,
+ 0xcb14, 0xae0a, 0xcb19, 0xe056, 0xe0c2, 0x0120, 0xcb8c, 0xe0c2,
+ 0x0121, 0xcb8e, 0xe0c2, 0x0122, 0xcb90, 0xe0c2, 0x0123, 0xe42e,
+ 0xcbd0, 0xe0c2, 0x030c, 0xcbd2, 0xe0c2, 0x0309, 0xcbd8, 0xe0c2,
+ 0x030a, 0xcbda, 0xe0c2, 0x030b, 0xa200, 0xe0c2, 0x0320, 0xe42e,
+ 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0x2888, 0xe418,
+ 0x22c5, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xa202, 0xe0c2,
+ 0x0302, 0xd022, 0x000f, 0xe163, 0x0380, 0x2883, 0xb608, 0xe184,
+ 0x25a4, 0x9f03, 0x8113, 0x8113, 0x8113, 0x2819, 0xf14a, 0xa102,
+ 0xcc44, 0xe160, 0x0004, 0xe161, 0x0203, 0xe163, 0x0380, 0xe184,
+ 0x25b8, 0x2931, 0xf022, 0x2883, 0xb608, 0x9f03, 0x8113, 0x8113,
+ 0x8113, 0xe190, 0xa200, 0xe0c2, 0x0302, 0xe42e, 0xe167, 0x01a0,
+ 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17, 0xe009, 0x00ff, 0xae21,
+ 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101, 0xe0c3, 0x015d, 0xe162,
+ 0x02b0, 0x2912, 0xaf02, 0x3c0a, 0x2912, 0xaf02, 0x3c0b, 0x280a,
+ 0x180b, 0xf0d8, 0xe162, 0x02b0, 0xd022, 0x001f, 0xe184, 0x25e5,
+ 0x2912, 0xaf02, 0x3c0b, 0x180a, 0xf028, 0xe190, 0x280b, 0xae02,
+ 0xe41e, 0x0e94, 0xe049, 0xae11, 0x280a, 0xae02, 0xe41e, 0x0e94,
+ 0xe055, 0xae21, 0xe167, 0x01a2, 0x2907, 0xaf10, 0xe008, 0x001f,
+ 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0, 0x0150,
+ 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xe42e,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x060d, 0x0d14, 0x1414, 0x1c1c, 0x1c1c, 0x2020, 0x2025, 0x252a,
+ 0x0a0e, 0x0e14, 0x1414, 0x1818, 0x1818, 0x1b1b, 0x1b1e, 0x1e22,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010, 0x1010,
+ 0x060a, 0x0a0d, 0x0b0d, 0x1010, 0x1010, 0x1212, 0x1212, 0x1217,
+ 0x1717, 0x1717, 0x1719, 0x1919, 0x1919, 0x1919, 0x1b1b, 0x1b1b,
+ 0x1b1b, 0x1b1b, 0x1d1d, 0x1d1d, 0x1d1d, 0x1d1f, 0x1f1f, 0x1f1f,
+ 0x1f21, 0x2121, 0x2121, 0x2424, 0x2424, 0x2626, 0x2628, 0x282a,
+ 0x090d, 0x0d0f, 0x0d0f, 0x1111, 0x1111, 0x1313, 0x1313, 0x1315,
+ 0x1515, 0x1515, 0x1516, 0x1616, 0x1616, 0x1616, 0x1818, 0x1818,
+ 0x1818, 0x1818, 0x1919, 0x1919, 0x1919, 0x191b, 0x1b1b, 0x1b1b,
+ 0x1b1c, 0x1c1c, 0x1c1c, 0x1e1e, 0x1e1e, 0x2020, 0x2021, 0x2123,
+ 0x0000, 0x0001, 0x0004, 0x0008, 0x0005, 0x0002, 0x0003, 0x0006,
+ 0x0009, 0x000c, 0x000d, 0x000a, 0x0007, 0x000b, 0x000e, 0x000f,
+ 0x0000, 0x0001, 0x0008, 0x0010, 0x0009, 0x0002, 0x0003, 0x000a,
+ 0x0011, 0x0018, 0x0020, 0x0019, 0x0012, 0x000b, 0x0004, 0x0005,
+ 0x000c, 0x0013, 0x001a, 0x0021, 0x0028, 0x0030, 0x0029, 0x0022,
+ 0x001b, 0x0014, 0x000d, 0x0006, 0x0007, 0x000e, 0x0015, 0x001c,
+ 0x0023, 0x002a, 0x0031, 0x0038, 0x0039, 0x0032, 0x002b, 0x0024,
+ 0x001d, 0x0016, 0x000f, 0x0017, 0x001e, 0x0025, 0x002c, 0x0033,
+ 0x003a, 0x003b, 0x0034, 0x002d, 0x0026, 0x001f, 0x0027, 0x002e,
+ 0x0035, 0x003c, 0x003d, 0x0036, 0x002f, 0x0037, 0x003e, 0x003f,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c1e, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1857, 0xf074, 0xe009, 0x00ff, 0x1a58, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x0c6b, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0368, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x036c,
+ 0xe40e, 0x0370, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x0380, 0xe40e, 0x00a4,
+ 0xe41e, 0x03a1, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x100e,
+ 0xe41e, 0x044b, 0xe41e, 0x100b, 0xe41e, 0x02ad, 0xe40e, 0x00a4,
+ 0xe41e, 0x0537, 0xe40e, 0x00a4, 0xe41e, 0x053c, 0xe40e, 0x00a4,
+ 0xe41e, 0x056d, 0xe40e, 0x00a4, 0xe167, 0x05cb, 0xe166, 0x0064,
+ 0xd022, 0x0003, 0xe184, 0x037e, 0x9e16, 0x3517, 0x3d17, 0xe42e,
+ 0xa200, 0x3c86, 0x3cad, 0x3cbe, 0xe41e, 0x0416, 0xe41e, 0x055a,
+ 0xe41e, 0x0680, 0xe41e, 0x08ff, 0xe41e, 0x03a2, 0xf0dd, 0xe41e,
+ 0x08b8, 0xe41a, 0x03e2, 0xa2fe, 0x3c10, 0x3c83, 0xe41e, 0x0523,
+ 0xf03a, 0xa202, 0x3c86, 0xe41e, 0x0b47, 0xe41e, 0x06f0, 0xe16a,
+ 0xe42e, 0xe42e, 0xa23e, 0x3cf0, 0xe41e, 0x08b8, 0xe408, 0x03bb,
+ 0xe41e, 0x0b81, 0xa10e, 0xf13a, 0xa104, 0xf2ca, 0xa102, 0xf05a,
+ 0xf04a, 0xe41e, 0x094c, 0xf6fe, 0xe41e, 0x08b8, 0xe408, 0x03bb,
+ 0xe41e, 0x0985, 0xf68e, 0xe41e, 0x01db, 0xf23e, 0xe41e, 0x14a6,
+ 0xe41e, 0x0985, 0xa2fe, 0x3c10, 0xe41e, 0x1af7, 0xf5ca, 0x2800,
+ 0x3c10, 0xe41e, 0x1b12, 0xe092, 0xa200, 0xe41e, 0x0c4f, 0xa200,
+ 0x3c9b, 0x28d6, 0xe41a, 0x146b, 0xa2fe, 0x3c10, 0xe082, 0xf096,
+ 0xe42e, 0xe41e, 0x14ad, 0xe41e, 0x14a6, 0xe41e, 0x094c, 0xf43e,
+ 0xe16b, 0xe42e, 0xe41e, 0x0b81, 0xf11a, 0xa102, 0xe40a, 0x03ff,
+ 0xa108, 0xf0c4, 0xf15a, 0xa108, 0xf136, 0xa102, 0xf0aa, 0xa102,
+ 0xf08a, 0xa106, 0xf0da, 0xa102, 0xf0ba, 0xe41e, 0x094c, 0xf6be,
+ 0xe41e, 0x08b8, 0xe408, 0x03ff, 0xe41e, 0x0985, 0xf64e, 0xe42e,
+ 0xa200, 0xe161, 0x0100, 0xe188, 0x0aff, 0x3d11, 0xe0c0, 0x0041,
+ 0xe005, 0x0034, 0xae11, 0xe042, 0xce20, 0xd111, 0x0100, 0xd112,
+ 0x0180, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe41e, 0x0400,
+ 0xe41e, 0x0222, 0xe41e, 0x0148, 0xa204, 0x3cae, 0xe16a, 0xd130,
+ 0x0000, 0xd03a, 0x0000, 0xd04c, 0x0000, 0xd008, 0x0000, 0xd022,
+ 0x0000, 0xa200, 0xe0c2, 0x0100, 0xe0c2, 0x0128, 0xa2fe, 0x3c25,
+ 0x3c26, 0x3c27, 0x3c28, 0x3c10, 0x3c29, 0x3c56, 0x3cda, 0x3cd7,
+ 0xe161, 0x05c7, 0x3511, 0x3d11, 0x3511, 0x3d11, 0xe41e, 0x0c3a,
+ 0xe41e, 0x1ae6, 0xe41e, 0x1fef, 0xe41e, 0x1654, 0xe41e, 0x26e2,
+ 0xa200, 0x3cd8, 0xe42e, 0xa200, 0x3c86, 0xe41e, 0x0680, 0xe41e,
+ 0x1aa9, 0xe41e, 0x04d9, 0xe41e, 0x0909, 0xe41e, 0x0675, 0xe41e,
+ 0x0523, 0xe40a, 0x04d6, 0xe41e, 0x13a7, 0xe408, 0x0465, 0xe41e,
+ 0x08b8, 0xe408, 0x04d6, 0xe40e, 0x04bd, 0xe41e, 0x020f, 0xe404,
+ 0x04bd, 0xe41e, 0x0675, 0xa202, 0x3c86, 0x28bd, 0xf09a, 0xe41e,
+ 0x066c, 0xa2fe, 0x3c84, 0xa202, 0x3cb4, 0xe40e, 0x04bd, 0x28a4,
+ 0xf0b4, 0xa202, 0x3cb4, 0xe41e, 0x14ad, 0xe41e, 0x066c, 0xa200,
+ 0x3c3a, 0xe40e, 0x04bd, 0xe41e, 0x05c8, 0xf05a, 0xe41e, 0x05ed,
+ 0xe40e, 0x04ac, 0xe41e, 0x1adb, 0x2884, 0xe414, 0x066c, 0x2884,
+ 0xe404, 0x04bd, 0x2884, 0xe41e, 0x2064, 0xe41e, 0x21bf, 0xe41e,
+ 0x05bb, 0x28a5, 0xf128, 0x2a4e, 0x4e40, 0x2884, 0xe41b, 0x1ff5,
+ 0x284e, 0xe418, 0x1c69, 0x28d6, 0xf038, 0x2a84, 0x3ed7, 0x2840,
+ 0xe41a, 0x191c, 0x287e, 0x3c82, 0x2840, 0xf058, 0xe41e, 0x064f,
+ 0xe41e, 0x0654, 0xe41e, 0x0659, 0xa200, 0xe41e, 0x26fc, 0x2840,
+ 0xaa02, 0x443f, 0xf03a, 0xe40e, 0x045b, 0xe41e, 0x21a6, 0xe41e,
+ 0x14ad, 0xe41e, 0x08d2, 0xf04a, 0xe41e, 0x1a5c, 0x3ce9, 0xe41e,
+ 0x194b, 0x3c85, 0x2885, 0x3c56, 0x2884, 0xf024, 0x3c83, 0xe41e,
+ 0x06f0, 0xe41e, 0x1ac4, 0xe41e, 0x0b47, 0xe42e, 0xa202, 0x3c86,
+ 0xf65e, 0xa200, 0xcc4a, 0xcc4c, 0x3c53, 0x3c62, 0x3cbd, 0x3cae,
+ 0x3cb4, 0x3ca5, 0x3c97, 0x3ca8, 0x3ca9, 0x28ad, 0xe41a, 0x0646,
+ 0xe41e, 0x064f, 0xe41e, 0x0654, 0xe41e, 0x0659, 0xa2fe, 0x3cba,
+ 0x3cbb, 0x3cb9, 0xa200, 0x3cbc, 0xa2fe, 0x3ca4, 0xa204, 0x3cf0,
+ 0xa2fc, 0x3c84, 0xa2fa, 0x3c85, 0xa2fe, 0xc009, 0x3c3f, 0x3c40,
+ 0x3c41, 0x3c42, 0xc000, 0xe42e, 0xa200, 0xe42e, 0xa200, 0xcc44,
+ 0xd152, 0x0000, 0xd130, 0x0000, 0xd1e0, 0x0003, 0xd1ff, 0x03b0,
+ 0xd1fd, 0x03d0, 0xd199, 0x0224, 0xd1fc, 0x0720, 0xd03a, 0x0000,
+ 0xd04c, 0x0000, 0xd008, 0x0000, 0xd14b, 0x0200, 0x28b1, 0xcfce,
+ 0xe41e, 0x025f, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xf0da, 0xe41e,
+ 0x08b8, 0xf04a, 0xe41e, 0x01db, 0xf09e, 0xe41e, 0x2034, 0x2a84,
+ 0xb7f5, 0x3e84, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe41e,
+ 0x0680, 0xe41e, 0x2151, 0xe42e, 0xe0c0, 0x0042, 0xce20, 0xd111,
+ 0x0000, 0xd112, 0x0080, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0061, 0xe41e, 0x0c18, 0xa202, 0xe41e, 0x0c22, 0xe41e, 0x0a1f,
+ 0xe128, 0xe0c0, 0x0060, 0xf048, 0xe41e, 0x1af7, 0xf03e, 0xe41e,
+ 0x1b28, 0xe42e, 0xe0c0, 0x0040, 0xa201, 0xae17, 0xe042, 0xe005,
+ 0x4f00, 0xae03, 0xe042, 0xce20, 0xd111, 0x0450, 0xd112, 0x00c8,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe180, 0xa2fe, 0x3c29,
+ 0x3c10, 0xe41e, 0x1fef, 0xe41e, 0x05ab, 0x2821, 0xf05a, 0x2816,
+ 0xa104, 0xf02a, 0x28ea, 0x3ce9, 0xa200, 0x3c81, 0x3ce7, 0x3ce6,
+ 0x3ce8, 0x3ce5, 0xe166, 0x05ab, 0xc710, 0x3d16, 0xe167, 0x0518,
+ 0xe166, 0x0054, 0xa200, 0x3cb2, 0x287f, 0xa102, 0xcc44, 0xe184,
+ 0x0598, 0x9e06, 0x5cb2, 0xa802, 0xb690, 0x3d17, 0x28b2, 0xa002,
+ 0x3cb2, 0xe190, 0xa200, 0x3c60, 0xe41e, 0x0c4f, 0xe42e, 0x24b5,
+ 0x4cb6, 0xce20, 0xd111, 0x0600, 0xd112, 0x0004, 0xd113, 0x0000,
+ 0xca28, 0xf7f8, 0xe42e, 0xe161, 0x0200, 0xa200, 0xc73f, 0x3d11,
+ 0x3cb2, 0xd022, 0x001f, 0xe184, 0x05b9, 0xe41e, 0x1ff5, 0x28b2,
+ 0xa002, 0x3cb2, 0xe42e, 0x2abc, 0x4e4f, 0x3ebc, 0x28a1, 0x3cb9,
+ 0x2a3f, 0xf06b, 0x2a42, 0xf039, 0x3cba, 0xf02e, 0x3cbb, 0xe42e,
+ 0x28a5, 0xf228, 0x28a5, 0xe016, 0x4440, 0xf1c8, 0x28a5, 0xe016,
+ 0x44d6, 0xf188, 0xe41e, 0x062e, 0xf07a, 0xe41e, 0x0633, 0xf07a,
+ 0x284f, 0xf108, 0xf11e, 0xe41e, 0x0638, 0xf06a, 0x28d6, 0xf0c8,
+ 0x2838, 0xf0a8, 0xf07e, 0xe41e, 0x063f, 0xf04a, 0x284e, 0xf04a,
+ 0xf01e, 0xa200, 0xe42e, 0xa202, 0xe42e, 0xa202, 0x3ca5, 0x2884,
+ 0xe412, 0x1ff5, 0x2884, 0xe412, 0x1ffc, 0x2884, 0xe412, 0x2005,
+ 0xa2fc, 0x3c84, 0x3c3e, 0xe41e, 0x0602, 0xe41e, 0x0b30, 0xe41e,
+ 0x0909, 0xe42e, 0xe41e, 0x0b81, 0xf15a, 0xa102, 0xf17a, 0xa108,
+ 0xf114, 0xf14a, 0xa102, 0xf0da, 0xa102, 0xf0ba, 0xa102, 0xf09a,
+ 0xa102, 0xf07a, 0xa104, 0xf056, 0xa102, 0xf04a, 0xa10e, 0xf022,
+ 0xe42e, 0xe41e, 0x094c, 0xe40e, 0x0602, 0xcaa2, 0xaf0a, 0xa806,
+ 0x184e, 0xf0a8, 0xe41e, 0x0985, 0xe41e, 0x23c4, 0xf5ca, 0x2894,
+ 0xf5aa, 0xe41e, 0x0b78, 0xe41e, 0x0b30, 0xe42e, 0xe0c0, 0x0065,
+ 0xaf04, 0xa802, 0xe42e, 0xe0c0, 0x0065, 0xaf16, 0xa802, 0xe42e,
+ 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xa102, 0xe016, 0xe42e, 0xe0c0,
+ 0x0065, 0xaf06, 0xa806, 0xa104, 0xe016, 0xe42e, 0xe41e, 0x0b30,
+ 0xe0c0, 0x0048, 0xc009, 0x3433, 0x3c34, 0xc000, 0xe42e, 0xc009,
+ 0x2433, 0x4c34, 0xc000, 0xe42e, 0xc009, 0x3435, 0x3c36, 0xc000,
+ 0xe42e, 0xe41e, 0x0b30, 0xe0c0, 0x0048, 0xc009, 0x3437, 0x3c38,
+ 0xc000, 0xe42e, 0xc009, 0x2435, 0x4c36, 0xc000, 0xe42e, 0xc009,
+ 0x2437, 0x4c38, 0xc000, 0xe42e, 0xe41e, 0x0b78, 0x28ad, 0xe42a,
+ 0xe41e, 0x064f, 0xe0c2, 0x0048, 0xe42e, 0xe41e, 0x20c3, 0xe41e,
+ 0x20f6, 0xe41e, 0x0506, 0xe41e, 0x255a, 0xe41e, 0x2156, 0xe42e,
+ 0xe0c0, 0x0059, 0xa102, 0xf2ca, 0xa102, 0xe42a, 0xa102, 0xf05a,
+ 0xa102, 0xe40a, 0x06c6, 0xe42e, 0xe0c0, 0x006b, 0x34b5, 0x3cb6,
+ 0xe0c0, 0x006c, 0x34b7, 0x3cb8, 0xe0c0, 0x0060, 0xaf08, 0x3088,
+ 0xe0c0, 0x0060, 0xa81e, 0x3c87, 0xe0c0, 0x0061, 0xa83e, 0x3c8a,
+ 0xe0c0, 0x0065, 0xa840, 0xf0ba, 0xa200, 0xe167, 0x0600, 0xc703,
+ 0x3d17, 0xe41e, 0x059f, 0xe004, 0x0088, 0x3ca7, 0xe42e, 0xc001,
+ 0xe0c0, 0x0060, 0x3400, 0x3c01, 0xe0c0, 0x0061, 0xae14, 0x3406,
+ 0x3c07, 0xc000, 0xe0c0, 0x0062, 0xaf02, 0x3021, 0xaf02, 0x30aa,
+ 0xa200, 0xe0c0, 0x0067, 0xa802, 0x3cb1, 0xe42e, 0xe41e, 0x0374,
+ 0xe41e, 0x0174, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0640, 0xd112,
+ 0x00c0, 0xd113, 0x0003, 0xca29, 0xf7f9, 0xa200, 0xe41e, 0x0fb1,
+ 0xe004, 0x0040, 0xe41e, 0x0fb1, 0xe0c0, 0x0060, 0x3c7f, 0xe0c0,
+ 0x0061, 0x3c66, 0xe0c0, 0x006e, 0xe41e, 0x020a, 0xe167, 0x05fd,
+ 0xe0c0, 0x0062, 0x3517, 0x3d17, 0xe0c0, 0x0063, 0x3d17, 0xe42e,
+ 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0792, 0xa102, 0xe42a, 0xa102,
+ 0xf05a, 0xa102, 0xe40a, 0x07ff, 0xe42e, 0x2861, 0xae04, 0x4c91,
+ 0xae02, 0x4c90, 0xe0c2, 0x0060, 0xc009, 0x203f, 0x4c40, 0xe0c2,
+ 0x0061, 0x2041, 0x4c42, 0xc000, 0xe0c2, 0x0062, 0xe41e, 0x165f,
+ 0xe0c2, 0x0067, 0xe41e, 0x1664, 0xe0c2, 0x0068, 0xe41e, 0x1669,
+ 0xe0c2, 0x0069, 0xe41e, 0x1654, 0x2a23, 0xe41b, 0x0841, 0x2a3f,
+ 0xe419, 0x0841, 0xae02, 0x4c23, 0xe0c2, 0x006a, 0x283f, 0xf0ba,
+ 0xc009, 0x203b, 0x4c3c, 0xe0c2, 0x006b, 0x203d, 0x4c3e, 0xe0c2,
+ 0x006c, 0xc000, 0x2072, 0x4c73, 0xe0c2, 0x006c, 0xe41e, 0x14b0,
+ 0xe0c2, 0x007b, 0x2057, 0x4c58, 0xae08, 0xe0c2, 0x006f, 0x28b0,
+ 0xe0c2, 0x007a, 0x2054, 0x4c55, 0xa002, 0x3454, 0x3c55, 0xe0c2,
+ 0x0070, 0x2885, 0xe0c2, 0x0071, 0x2c53, 0xe0c2, 0x0072, 0xe41e,
+ 0x0800, 0xe0c2, 0x0073, 0x24a8, 0x4ca9, 0xe0c2, 0x0074, 0x2886,
+ 0x2ab4, 0xae21, 0xe056, 0x2aae, 0xae23, 0xe056, 0x2abd, 0xae29,
+ 0xe056, 0xe0c2, 0x0076, 0xe41e, 0x0662, 0xe0c2, 0x0051, 0xe41e,
+ 0x0667, 0xe0c2, 0x0052, 0x2884, 0xe0c2, 0x0077, 0x2a22, 0xe161,
+ 0x05e4, 0x2111, 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0078, 0x2111,
+ 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0079, 0x2025, 0x4c26, 0xe0c2,
+ 0x007c, 0xe167, 0x05c7, 0x2117, 0x4d17, 0xe0c2, 0x007e, 0x2117,
+ 0x4d17, 0xe0c2, 0x007d, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2,
+ 0x0053, 0xe42e, 0xe41e, 0x14b0, 0xe0c2, 0x0063, 0x2a23, 0xe41b,
+ 0x0841, 0x2a3f, 0xe419, 0x0841, 0xae02, 0x4c23, 0xe0c2, 0x0064,
+ 0x2027, 0x4c28, 0xe0c2, 0x006d, 0x2886, 0xe0c2, 0x0070, 0x2057,
+ 0x4c58, 0xae08, 0xe0c2, 0x0071, 0x2025, 0x4c26, 0xe0c2, 0x0072,
+ 0x2821, 0xf0ca, 0x2816, 0xa104, 0xf09a, 0x28eb, 0x3cb3, 0xa006,
+ 0xe0c2, 0x0073, 0x28ea, 0x3ce9, 0xf07e, 0x28eb, 0xa006, 0xe0c2,
+ 0x0073, 0xa200, 0x3ce9, 0x28e9, 0xe0c2, 0x0074, 0xa200, 0xe0c2,
+ 0x0075, 0x2a22, 0xe161, 0x05e4, 0x2111, 0x4d11, 0xf02b, 0xae02,
+ 0xe0c2, 0x0076, 0x2111, 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0077,
+ 0x2886, 0xe016, 0x58f0, 0xe0c2, 0x0078, 0xe161, 0x05c7, 0x2111,
+ 0x4d11, 0xe0c2, 0x007a, 0x2111, 0x4d11, 0xe0c2, 0x0079, 0xe41e,
+ 0x14b0, 0xaf32, 0xa802, 0xae0c, 0x2a24, 0xae05, 0xe056, 0x4c1d,
+ 0xae02, 0x2a1b, 0xe017, 0xe056, 0xae10, 0x4c1f, 0xae10, 0x4c11,
+ 0x2a19, 0xe01b, 0xae3f, 0xe056, 0xe0c2, 0x007b, 0xe42e, 0xe42e,
+ 0x2885, 0xe41e, 0x26d1, 0xe092, 0x2842, 0xe016, 0x5440, 0x443f,
+ 0x3c00, 0xa200, 0x2a40, 0xf079, 0x2aa4, 0xf053, 0x2ab9, 0xa80f,
+ 0xe056, 0xf12e, 0x2a00, 0xf09b, 0x2aba, 0xa80f, 0xae07, 0xe056,
+ 0x2abb, 0xa80f, 0xe056, 0xf08e, 0x2abb, 0xa80f, 0xae07, 0xe056,
+ 0x2aba, 0xa80f, 0xe056, 0x3c01, 0x28a3, 0x2a23, 0xe41b, 0x0841,
+ 0x2a3f, 0xe419, 0x0841, 0xae02, 0x4c23, 0xae0c, 0x4c00, 0xae04,
+ 0x4c43, 0xae02, 0x4c3f, 0xae24, 0x2a3f, 0xe017, 0x4e40, 0xae1f,
+ 0xe056, 0xe083, 0xae21, 0xe056, 0x2abc, 0xae0d, 0xe056, 0x4c01,
+ 0xe42e, 0x283f, 0xe42a, 0x28a4, 0xf0c2, 0xc009, 0x203b, 0x4c3c,
+ 0x103d, 0x1c3e, 0xc000, 0xf030, 0xa206, 0xe42e, 0xa208, 0xe42e,
+ 0x2823, 0xf048, 0xa202, 0x0842, 0xe42e, 0x28a3, 0xe42e, 0x3cec,
+ 0xe0c0, 0x0041, 0xe005, 0x0018, 0xae11, 0xe042, 0xce20, 0xd111,
+ 0x0000, 0xd112, 0x0100, 0x88ec, 0x0113, 0xca28, 0xf7f8, 0xe42e,
+ 0x8917, 0x0034, 0x8917, 0x0033, 0x8917, 0x0035, 0x8917, 0x0036,
+ 0x8917, 0x0037, 0x8917, 0x0038, 0x8117, 0x8117, 0x2117, 0x4d17,
+ 0xcc60, 0x2117, 0x4d17, 0xcc62, 0x2117, 0x4d17, 0xcc64, 0x2117,
+ 0x4d17, 0xcc72, 0xe42e, 0x8b17, 0x0034, 0x8b17, 0x0033, 0x8b17,
+ 0x0035, 0x8b17, 0x0036, 0x8b17, 0x0037, 0x8b17, 0x0038, 0x8117,
+ 0x8117, 0xc860, 0x3517, 0x3d17, 0xc862, 0x3517, 0x3d17, 0xc864,
+ 0x3517, 0x3d17, 0xc872, 0x3517, 0x3d17, 0xe42e, 0xc001, 0x3c13,
+ 0xc000, 0xe42e, 0xc001, 0x2813, 0xc000, 0xe42e, 0xc001, 0x3c14,
+ 0xc000, 0xe42e, 0xc001, 0x2814, 0xc000, 0xe42e, 0xc001, 0x2430,
+ 0x4c31, 0xc000, 0xae06, 0xc873, 0xe046, 0xe422, 0xe16b, 0xe42e,
+ 0xc001, 0x280c, 0xf16a, 0xe41e, 0x0b30, 0xc001, 0xe0c0, 0x0049,
+ 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0xe0c1, 0x0048, 0x360e, 0x3e0f,
+ 0x260e, 0x4e0f, 0xe045, 0xa200, 0xb626, 0xe003, 0x0200, 0xb606,
+ 0xc000, 0xe42e, 0xe41e, 0x08b8, 0xe42a, 0xe0c0, 0x0045, 0xaf04,
+ 0xa802, 0xe42e, 0xc001, 0x3c33, 0xc000, 0xe42e, 0xc001, 0x2833,
+ 0xc000, 0xe42e, 0xc001, 0x3c11, 0xc000, 0xe42e, 0xc001, 0x2811,
+ 0xc000, 0xe42e, 0xd148, 0x0040, 0xd144, 0x0000, 0xd145, 0x0000,
+ 0xd168, 0x0000, 0xd16b, 0x0000, 0xd14b, 0x0200, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xd14c, 0x000c, 0xca9a, 0xf7f8, 0xe42e, 0xc001,
+ 0x2400, 0x4c01, 0x0406, 0x0c07, 0x3408, 0x3c09, 0xd071, 0x202a,
+ 0xe181, 0xc001, 0xe0c0, 0x0048, 0x3415, 0x3c16, 0x280c, 0xf13a,
+ 0xe0c0, 0x0048, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0xe0c1, 0x0049,
+ 0x3604, 0x3e05, 0x1404, 0x1c05, 0xe0c1, 0x0045, 0xaf05, 0xa803,
+ 0xb611, 0x320c, 0xe0c0, 0x0048, 0x3402, 0xe008, 0xfe00, 0x3c03,
+ 0xe0c0, 0x0048, 0xe008, 0x01ff, 0x3c0b, 0xa200, 0xcc78, 0xd022,
+ 0x00ff, 0xe184, 0x0934, 0xcc7a, 0xe190, 0xe41e, 0x0a1f, 0xe41e,
+ 0x0a3e, 0xe41e, 0x08ea, 0xc001, 0xa200, 0x3c1a, 0x280b, 0xa102,
+ 0xe412, 0x0954, 0xc001, 0xa202, 0x3c1a, 0xa200, 0xceaa, 0xc000,
+ 0xa200, 0xe41e, 0x0c4f, 0xe42e, 0xcaa0, 0xe190, 0xca9a, 0xf7f8,
+ 0xca9c, 0xe418, 0x0a3e, 0xe42e, 0xcc44, 0xe184, 0x095d, 0xca9c,
+ 0xe418, 0x0a3e, 0xcaa0, 0xca9b, 0xf7f9, 0xe190, 0xe42e, 0xe004,
+ 0x0100, 0xceb0, 0xe004, 0x00ff, 0xe014, 0xceb8, 0xd15d, 0x0000,
+ 0xd15e, 0x0000, 0xd15f, 0x0000, 0xe004, 0x0019, 0xae18, 0xe00a,
+ 0x0620, 0xcec0, 0xd157, 0x0000, 0xd14a, 0x0000, 0xd14c, 0x0003,
+ 0xca9c, 0xe418, 0x0a3e, 0xca9a, 0xf7c8, 0xcaae, 0xa802, 0xf73a,
+ 0xca9c, 0xe418, 0x0a3e, 0xa200, 0xe42e, 0xe41e, 0x095f, 0xe41e,
+ 0x08b8, 0xf128, 0xe41e, 0x0b6f, 0xcaa2, 0xe008, 0x00ff, 0xe41e,
+ 0x089e, 0xaf0e, 0xe418, 0x094c, 0xe41e, 0x08a2, 0xaf0e, 0xf6e8,
+ 0xe41e, 0x08b8, 0xf0ea, 0xe004, 0x010b, 0xe008, 0x00ff, 0xe41e,
+ 0x089e, 0xe004, 0x010b, 0xa83e, 0xe41e, 0x08a6, 0xa200, 0xe42e,
+ 0xe41e, 0x08a2, 0xf058, 0xa204, 0xe41e, 0x0954, 0xf57e, 0xa206,
+ 0xe41e, 0x0954, 0xe41e, 0x08a2, 0xaf0a, 0x3c4e, 0xe41e, 0x08a2,
+ 0xa83e, 0xe41e, 0x08a6, 0xe41e, 0x08a2, 0xa116, 0xe42a, 0xca9c,
+ 0xe418, 0x0a3e, 0xe41e, 0x08aa, 0xa10a, 0xe016, 0x3c4f, 0xe41e,
+ 0x08aa, 0xa128, 0xe016, 0x3cd6, 0xf11a, 0xa200, 0xe41e, 0x0954,
+ 0xe41e, 0x089e, 0xaf0e, 0xf0a8, 0xe41e, 0x08a2, 0xaf0c, 0xa802,
+ 0xe016, 0x3c4f, 0xa202, 0xe41e, 0x0954, 0xe41e, 0x09e0, 0xe42e,
+ 0xc001, 0xa200, 0x3c30, 0x3c31, 0x3c33, 0xe41e, 0x09ee, 0xc001,
+ 0xe41e, 0x0a1f, 0xc001, 0xe128, 0xc000, 0xe42e, 0xc001, 0x2833,
+ 0x4411, 0xc000, 0xae0e, 0xce92, 0xd14a, 0x0000, 0xd158, 0x0000,
+ 0xe004, 0x01ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e, 0x0000,
+ 0xd15f, 0x0000, 0xd161, 0x0003, 0xe004, 0x0019, 0xae18, 0xe00a,
+ 0x0638, 0xcec0, 0xd14c, 0x0003, 0xca9c, 0xe418, 0x0a3e, 0xca9a,
+ 0xf7c8, 0xca9c, 0xf7a8, 0xca9e, 0xc001, 0x3c32, 0xcc92, 0xca94,
+ 0x0030, 0x0c31, 0x3430, 0x3c31, 0xcc90, 0xc000, 0xe42e, 0xe004,
+ 0x1495, 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033,
+ 0x0000, 0xd035, 0x0000, 0xd036, 0x007f, 0xd037, 0x0000, 0xd038,
+ 0x0000, 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd046,
+ 0x0000, 0xd047, 0x0000, 0xd149, 0x0000, 0xe42e, 0xc001, 0x280c,
+ 0xf20a, 0xe41e, 0x024f, 0xc001, 0xe004, 0x0440, 0xce50, 0x280d,
+ 0xa806, 0xa108, 0xe012, 0xa806, 0xae06, 0x3c40, 0xe004, 0x010b,
+ 0x5840, 0xce52, 0xe41e, 0x0257, 0xc001, 0xd14e, 0x0000, 0xd144,
+ 0x0000, 0x2402, 0x4c03, 0xe000, 0x0200, 0x3402, 0x3c03, 0xf3ae,
+ 0xd027, 0x0000, 0x280c, 0xe41a, 0x0aa7, 0xc001, 0xd027, 0x0001,
+ 0x280d, 0xf25a, 0xca48, 0xa802, 0xf7e8, 0x2402, 0x4c03, 0xce40,
+ 0xd121, 0x0000, 0xd122, 0x0040, 0xe0c0, 0x0043, 0xa806, 0xae02,
+ 0xa032, 0xce46, 0xe190, 0xe190, 0xe190, 0xe190, 0xca48, 0xa802,
+ 0xf7e8, 0xe004, 0x0200, 0x0402, 0x0c03, 0x3402, 0x3c03, 0x1408,
+ 0x1c09, 0xf054, 0x2400, 0x4c01, 0x3402, 0x3c03, 0x280c, 0xe418,
+ 0x0aeb, 0xc001, 0xe41e, 0x0b30, 0xc001, 0xd14e, 0x0000, 0xd144,
+ 0x0000, 0xc000, 0xe42e, 0xe0c1, 0x0059, 0xa103, 0xa200, 0xb636,
+ 0xe000, 0x001c, 0xe0c1, 0x0045, 0xe052, 0xe01a, 0xe42e, 0xc001,
+ 0xa200, 0x3c0a, 0xe004, 0x0200, 0x3c0d, 0xe0c0, 0x0043, 0xa808,
+ 0xf338, 0xe41e, 0x0a9b, 0xc001, 0x3c0c, 0x2402, 0x4c03, 0xe0c1,
+ 0x0049, 0x3604, 0x3e05, 0x2604, 0x4e05, 0xe045, 0xf033, 0x0606,
+ 0x0e07, 0xe003, 0x0200, 0x280c, 0xb602, 0x3c0c, 0xf1d3, 0xe001,
+ 0x0200, 0x3e0d, 0x280c, 0xf188, 0x280a, 0xe408, 0x0ab1, 0xe41e,
+ 0x01db, 0xc001, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xe40a, 0x0ab1,
+ 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00,
+ 0x3c0a, 0xe40e, 0x0ab1, 0x280d, 0x2a0c, 0xf039, 0xe004, 0x0200,
+ 0x3c0d, 0xc000, 0xe42e, 0xc001, 0xe41e, 0x024f, 0xc001, 0x280d,
+ 0xe002, 0x0200, 0xe40a, 0x0b2d, 0x280d, 0xa806, 0xf1fa, 0xa108,
+ 0xe012, 0xae06, 0x3c40, 0x280d, 0xaf04, 0xae20, 0xe000, 0x01c0,
+ 0xce50, 0xe190, 0xca52, 0x5c40, 0x5840, 0x2a0d, 0xa807, 0xae07,
+ 0x3e40, 0xe005, 0x010b, 0x5e40, 0xe056, 0x2a0d, 0xaf05, 0xae21,
+ 0xe001, 0x0140, 0xce51, 0xe190, 0xce52, 0xe004, 0x01fc, 0x180d,
+ 0xf022, 0xf14e, 0xc001, 0x280d, 0xa006, 0xaf04, 0xae20, 0xe000,
+ 0x0440, 0xce50, 0x280d, 0xa806, 0xa108, 0xe012, 0xa806, 0xae06,
+ 0x3c40, 0xe004, 0x010b, 0x5840, 0xce52, 0xc000, 0xe40e, 0x0257,
+ 0xc001, 0xcaaa, 0x2a1a, 0xb616, 0xe0c1, 0x0048, 0x360e, 0x3e0f,
+ 0x260e, 0x4e0f, 0xe042, 0xe049, 0x1608, 0x1e09, 0xf035, 0x1406,
+ 0x1c07, 0xe0c2, 0x0048, 0xa200, 0xceaa, 0xc000, 0xe42e, 0xe41e,
+ 0x0b30, 0xe0c0, 0x0045, 0xaf04, 0xa806, 0xa104, 0xe428, 0xa2fc,
+ 0x2a84, 0xa003, 0xb616, 0xe418, 0x0b56, 0xe42e, 0xc001, 0x3c40,
+ 0xe0c0, 0x0048, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0x0840, 0xe049,
+ 0x1600, 0x1e01, 0xf033, 0x0406, 0x0c07, 0xe049, 0x1608, 0x1e09,
+ 0xf035, 0x1406, 0x1c07, 0xe0c2, 0x0048, 0xc000, 0xe42e, 0xe41e,
+ 0x0b30, 0xc001, 0xe0c0, 0x0048, 0x3417, 0x3c18, 0xc000, 0xe42e,
+ 0xa200, 0xceaa, 0xc001, 0x2417, 0x4c18, 0xc000, 0xe0c2, 0x0048,
+ 0xe42e, 0xe41e, 0x095f, 0xe41e, 0x08b8, 0xf0f8, 0xcaa2, 0xe049,
+ 0xa83e, 0xe009, 0x00ff, 0xf03b, 0xaf0f, 0xf04b, 0xe41e, 0x094c,
+ 0xf71e, 0xe41e, 0x08b8, 0xf0aa, 0xe004, 0x010b, 0xe008, 0x00ff,
+ 0xe41e, 0x089e, 0xe004, 0x010b, 0xf02e, 0xcaa2, 0xe008, 0x001f,
+ 0xe41e, 0x08a6, 0xe41e, 0x08aa, 0xe42e, 0xc001, 0x2832, 0xe016,
+ 0xc871, 0xa011, 0xf288, 0xaf07, 0xe009, 0x07ff, 0x2831, 0xe008,
+ 0x07ff, 0xe046, 0xf16a, 0xf0ee, 0xc001, 0xe161, 0x0601, 0x2901,
+ 0xc871, 0xa011, 0xaf07, 0xe009, 0x07ff, 0xe008, 0x07ff, 0xe046,
+ 0xf08a, 0xe049, 0xe011, 0xaf15, 0xf0e1, 0xf0d0, 0xa200, 0xf0be,
+ 0xc868, 0xa80e, 0xf028, 0xa210, 0x3c35, 0x7835, 0xa203, 0x5a35,
+ 0xaf03, 0xe046, 0xc000, 0xe42e, 0xc000, 0x284e, 0x2a4f, 0x3c95,
+ 0x3e96, 0xc001, 0x2831, 0x2a32, 0x3c36, 0x3e37, 0xe0c0, 0x0046,
+ 0xe005, 0x0000, 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112,
+ 0x0080, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c, 0xf7fa, 0xc000,
+ 0xe42e, 0xc000, 0x2895, 0x2a96, 0x3c4e, 0x3e4f, 0xc001, 0x2836,
+ 0x2a37, 0x3c31, 0x3e32, 0xcc90, 0xcc93, 0xa200, 0x3c30, 0x3c33,
+ 0xe0c0, 0x0046, 0xe005, 0x0000, 0xae11, 0xe042, 0xce20, 0xd111,
+ 0x0000, 0xd112, 0x0080, 0xd113, 0x0013, 0xca28, 0xf7f8, 0xe41e,
+ 0x0a1f, 0xe128, 0xc000, 0xe42e, 0xc001, 0x2834, 0xc000, 0xe42e,
+ 0xc001, 0x3430, 0x3c31, 0xc000, 0xe42e, 0xc001, 0x2430, 0x4c31,
+ 0xc000, 0xe42e, 0xc001, 0x3c32, 0xc000, 0xe42e, 0xc001, 0x2832,
+ 0xc000, 0xe42e, 0xc001, 0x3c10, 0xc000, 0xe42e, 0xc001, 0x2810,
+ 0xc000, 0xe42e, 0xc001, 0x3c38, 0xc000, 0xe42e, 0xc001, 0x2838,
+ 0xc000, 0xe42e, 0xc001, 0xe0c0, 0x0041, 0xe005, 0x0039, 0xae11,
+ 0xe042, 0x3420, 0x3c21, 0xe004, 0x04e1, 0xae10, 0x3422, 0x3c23,
+ 0xc000, 0xe42e, 0xc001, 0x2420, 0x4c21, 0xc000, 0xe42e, 0x3c63,
+ 0xe08e, 0x3c64, 0xe41e, 0x0c5b, 0xe41e, 0x0c63, 0x2864, 0xe09e,
+ 0x2863, 0x3c60, 0xe42e, 0x2860, 0xae08, 0xe000, 0x0538, 0xe09e,
+ 0xe41e, 0x0883, 0xe42e, 0x2863, 0xae08, 0xe000, 0x0538, 0xe09e,
+ 0xe41e, 0x0868, 0xe42e, 0x2860, 0xe408, 0x1b5f, 0xe41e, 0x0c26,
+ 0xf1b8, 0xe41e, 0x08de, 0xf068, 0xe41e, 0x09ee, 0xd04c, 0x0000,
+ 0xe470, 0xc896, 0xf05a, 0xe41e, 0x0c8e, 0xd04c, 0x0000, 0xe41e,
+ 0x08e6, 0xe005, 0x0080, 0xb615, 0xcc6f, 0xd04b, 0x0001, 0xa202,
+ 0xe41e, 0x0c2a, 0xe470, 0xd04c, 0x0000, 0xe470, 0xc001, 0xa200,
+ 0x3c10, 0xe41e, 0x09ee, 0xc001, 0x2832, 0xcc96, 0x2811, 0xe016,
+ 0x3c11, 0xc000, 0xe42e, 0xba0c, 0xf03a, 0xbcfc, 0xe42e, 0xba4c,
+ 0xa20c, 0x3c9d, 0x289d, 0xa002, 0x3c9d, 0xa140, 0xf0d2, 0xba40,
+ 0xf7aa, 0x589d, 0xa102, 0x34ab, 0x3cac, 0x289d, 0xe41e, 0x0cd8,
+ 0x00ab, 0x0cac, 0xe42e, 0xe16b, 0xe42e, 0xba0c, 0xf03a, 0xbe7e,
+ 0xe42e, 0xba4c, 0xa20c, 0x3c9d, 0x289d, 0xa002, 0x3c9d, 0xa140,
+ 0xf162, 0xba40, 0xf7aa, 0x589d, 0xa102, 0x34ab, 0x3cac, 0x289d,
+ 0xe41e, 0x0cd8, 0x00ab, 0x0cac, 0x3cac, 0x8cac, 0x0000, 0xa002,
+ 0xaf02, 0xe012, 0xe42c, 0xe012, 0xe16a, 0xe42e, 0xe16b, 0xe42e,
+ 0xa120, 0xf050, 0xa020, 0x3c9e, 0x749e, 0xe42e, 0x3c9e, 0xba5e,
+ 0x589e, 0x769e, 0xe056, 0xe42e, 0xba40, 0xe42a, 0xc868, 0xa80e,
+ 0x3c00, 0xe016, 0xe428, 0x7400, 0xe016, 0xe42e, 0x2a38, 0xa103,
+ 0x282f, 0xe425, 0xf02b, 0x2830, 0xb7f4, 0xa002, 0x3c5e, 0xa104,
+ 0xe424, 0xf04a, 0xa25a, 0x3c5f, 0xe42e, 0xbc0e, 0x3c00, 0xe42d,
+ 0x2822, 0xf02a, 0xbc0e, 0x3c01, 0xe42d, 0x2801, 0xae06, 0x4c00,
+ 0x3c5f, 0xe161, 0x0728, 0xe164, 0x0720, 0x8848, 0x0022, 0xe41e,
+ 0x0d1f, 0xe42d, 0x2838, 0xa104, 0xe428, 0x2849, 0xe161, 0x0788,
+ 0xe164, 0x0724, 0x8849, 0x0022, 0xe41e, 0x0d1f, 0xe42e, 0xe082,
+ 0xa040, 0xe094, 0xa040, 0xe096, 0xe004, 0x00ff, 0x3c03, 0xa200,
+ 0x3c05, 0x3c06, 0x3c07, 0x3c08, 0x3c09, 0xe184, 0x0d6b, 0xba40,
+ 0xf0ba, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080, 0x4603,
+ 0xe056, 0x3d11, 0xf0ce, 0xa202, 0x5800, 0xae10, 0x3d11, 0x2206,
+ 0x4e07, 0xa202, 0x5805, 0xe056, 0x3406, 0x3c07, 0x2822, 0xf22a,
+ 0xba40, 0xf14a, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7, 0x0080,
+ 0x4603, 0xe056, 0x3d12, 0xe0c6, 0x0080, 0x4403, 0xae10, 0xe0c7,
+ 0x0080, 0x4603, 0xe056, 0x3d13, 0xf0de, 0xa202, 0x5801, 0xae10,
+ 0x3d12, 0x3d13, 0x2208, 0x4e09, 0xa202, 0x5805, 0xe056, 0x3408,
+ 0x3c09, 0x2805, 0xa002, 0x3c05, 0x2006, 0x4c07, 0xe014, 0x3514,
+ 0x3d14, 0x2208, 0x4e09, 0xe015, 0x3714, 0x3f14, 0xe42e, 0xe0c4,
+ 0x3fff, 0xe40d, 0x0e6c, 0x3c52, 0xf048, 0xa200, 0xa2fe, 0x3ca1,
+ 0x2c52, 0xe01a, 0x4451, 0xe408, 0x0e6c, 0xbc12, 0xe40d, 0x0e6c,
+ 0xa10a, 0xb4a8, 0xa104, 0xe400, 0x0e6c, 0xb7b4, 0xa006, 0x3c38,
+ 0x60a1, 0x3ca1, 0xbdfe, 0xe40d, 0x0e6c, 0x2a51, 0xf09b, 0xe049,
+ 0x1829, 0xf06a, 0x3e29, 0xe41e, 0x1b3f, 0xe40a, 0x0e6c, 0x7413,
+ 0x3c39, 0xa200, 0x3c3f, 0x3c42, 0x281b, 0xf068, 0xba40, 0x3c3f,
+ 0xf03a, 0xba40, 0x3c42, 0x2851, 0xf2fa, 0x2c1e, 0x5c3f, 0x3c44,
+ 0xa200, 0x3c40, 0x283a, 0xf07a, 0xe41e, 0x0e6f, 0x3c40, 0xf168,
+ 0x283e, 0x3ca4, 0x283f, 0x3c3a, 0x284e, 0xe01a, 0x3c3b, 0x2839,
+ 0x3c3c, 0x2842, 0x3c3d, 0xa2fc, 0x3c3e, 0x284e, 0xf098, 0x2850,
+ 0x1c39, 0xf06a, 0xa202, 0x3cbe, 0xf03e, 0xa200, 0x3c3a, 0x2c52,
+ 0xf038, 0x2840, 0xf018, 0x283f, 0xe016, 0x441c, 0x3c43, 0x283f,
+ 0x0842, 0xb674, 0x3c41, 0x284f, 0xf06a, 0xe41e, 0x0c9b, 0xe40d,
+ 0x0e6c, 0x3c45, 0xe41e, 0x18b2, 0x2835, 0xf07a, 0xe41e, 0x0c9b,
+ 0xe40d, 0x0e6c, 0xe408, 0x0e6c, 0x2838, 0xa104, 0xf038, 0xba40,
+ 0x3c46, 0x282c, 0x3c48, 0x282e, 0x3c49, 0x2838, 0xf0ea, 0xba40,
+ 0xf0ca, 0xbc3e, 0x3c48, 0xe40d, 0x0e6c, 0x2838, 0xa104, 0xf058,
+ 0xbc3e, 0x3c49, 0xe40d, 0x0e6c, 0x2851, 0xf0aa, 0x28d6, 0x444f,
+ 0xf03a, 0xe41e, 0x1c57, 0xe41e, 0x1c13, 0xe41e, 0x0e8b, 0x2838,
+ 0xe016, 0xe41a, 0x0e92, 0xe40a, 0x0e6c, 0xe41e, 0x0cee, 0xe40d,
+ 0x0e6c, 0x2851, 0xf06a, 0xe41e, 0x177b, 0xe40a, 0x0e6c, 0xf1fe,
+ 0x284e, 0xf1da, 0x284f, 0xf04a, 0xba40, 0xba40, 0xf18e, 0xba40,
+ 0xf16a, 0xbc0c, 0xe40d, 0x0e6c, 0xf12a, 0xa106, 0xf08a, 0xa104,
+ 0xf79a, 0xe41e, 0x0c9b, 0xe40d, 0x0e6c, 0xf74e, 0xe41e, 0x0c9b,
+ 0xe40d, 0x0e6c, 0xbc40, 0xe40d, 0x0e6c, 0xf6ce, 0x2838, 0xe01a,
+ 0x442d, 0xf03a, 0xbc04, 0xf29d, 0x3c47, 0xe0c6, 0x0033, 0xf25d,
+ 0x0831, 0xa400, 0xa566, 0x3c4a, 0xa200, 0x3c4b, 0x3c4c, 0x3c4d,
+ 0x2833, 0xf10a, 0xbc04, 0xf19d, 0x3c4b, 0xa102, 0xf0ba, 0xbe0c,
+ 0xf14d, 0xae02, 0xa83e, 0x3c4c, 0xbe0c, 0xf0fd, 0xae02, 0xa83e,
+ 0x3c4d, 0x282b, 0xf01a, 0x2a43, 0x2c52, 0xe419, 0x0e84, 0x3c52,
+ 0x1c44, 0xf032, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x284f,
+ 0xe016, 0xe42a, 0x283f, 0xe42a, 0x283a, 0xe42a, 0x283d, 0x1842,
+ 0xe42a, 0x284e, 0xf048, 0x283b, 0xe016, 0xe42e, 0x283b, 0xe42a,
+ 0x283c, 0x1839, 0xe016, 0xe42e, 0xe049, 0xc70f, 0x7e57, 0xaf21,
+ 0xae02, 0xe046, 0xe42e, 0xd1f3, 0x0000, 0xe162, 0x0370, 0x2912,
+ 0xcfe4, 0xe42e, 0xe161, 0x0370, 0x2838, 0xa102, 0xf03a, 0xe161,
+ 0x0390, 0x2848, 0x3c04, 0xe162, 0x02b0, 0xe41e, 0x0eed, 0xe42a,
+ 0xd1f3, 0x0000, 0xe162, 0x02b0, 0x8848, 0x0022, 0xe184, 0x0ea9,
+ 0x2912, 0xcfe4, 0x2838, 0xa104, 0xe428, 0x2849, 0x3c04, 0xe161,
+ 0x03b0, 0xe162, 0x02d0, 0xe41e, 0x0eed, 0xe42a, 0xd1f3, 0x0020,
+ 0xe162, 0x02d0, 0x8849, 0x0022, 0xe184, 0x0ebf, 0x2912, 0xcfe4,
+ 0xe41e, 0x0fec, 0xe162, 0x02d0, 0x2902, 0xe41e, 0x0faa, 0xe41e,
+ 0x0fce, 0x3470, 0x3c71, 0x2902, 0xae02, 0xe000, 0x0260, 0xe09e,
+ 0x2117, 0x4d17, 0x2317, 0x4f17, 0x1072, 0x1c73, 0x1272, 0x1e73,
+ 0xe010, 0xe011, 0xe046, 0xb624, 0xb608, 0x3c7a, 0x2902, 0xe41e,
+ 0x0fa3, 0xa102, 0xb628, 0x3c78, 0x2902, 0xaf02, 0xe000, 0x02a0,
+ 0xe09e, 0x2907, 0x3c79, 0xa202, 0xe42e, 0xe082, 0xe098, 0xba40,
+ 0xf098, 0x8804, 0x0022, 0xe184, 0x0ef6, 0x2911, 0x3d12, 0xa202,
+ 0xe42e, 0x286d, 0xe082, 0x3c08, 0x2014, 0x4c15, 0x583f, 0x3400,
+ 0x3c01, 0x2c39, 0x583f, 0x083f, 0x3402, 0x3c03, 0x2804, 0x3c05,
+ 0xe163, 0x0600, 0xa200, 0xc71f, 0x3d13, 0xbc0a, 0xe40d, 0x0f63,
+ 0xf0aa, 0xa102, 0xf17a, 0xa102, 0xf26a, 0xa104, 0xf1da, 0xa102,
+ 0xf1ba, 0xf38e, 0xe41e, 0x0c9b, 0xe40d, 0x0f63, 0xa002, 0x1002,
+ 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01, 0x3402, 0x3c03, 0xa203,
+ 0xf14e, 0xe41e, 0x0c9b, 0xe40d, 0x0f63, 0xa002, 0x0002, 0x0c03,
+ 0x1000, 0x1c01, 0xf70e, 0xe41e, 0x0c9b, 0xe40d, 0x0f63, 0x283f,
+ 0xa2fd, 0xf03e, 0xbc40, 0xa2ff, 0x3c0f, 0xe41e, 0x0f72, 0xf082,
+ 0xa203, 0x283f, 0xf03a, 0x2a0f, 0xa803, 0x2904, 0xe046, 0x3d12,
+ 0xe41e, 0x0f8e, 0x2805, 0xa102, 0x3c05, 0xa004, 0xe42a, 0xe40e,
+ 0x0f0d, 0x2808, 0xa102, 0xe092, 0xe163, 0x0600, 0x2805, 0xf0a4,
+ 0x2913, 0x8111, 0xf7e8, 0x2901, 0x3d12, 0x2805, 0xa102, 0x3c05,
+ 0xf76e, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x2884, 0xe424,
+ 0xe0c2, 0x020b, 0xe0c2, 0x0214, 0x2884, 0xe41e, 0x0fce, 0x346e,
+ 0x3c6f, 0xe42e, 0x3c06, 0x3e07, 0xe163, 0x0330, 0x2819, 0x2ad6,
+ 0xb5f6, 0xe424, 0xae02, 0xa002, 0xcc44, 0xe184, 0x0f8b, 0x2d13,
+ 0x2b0b, 0x1c06, 0x1a07, 0xf078, 0xf069, 0xe086, 0xe002, 0x0330,
+ 0xaf02, 0xe42e, 0x8113, 0x8113, 0xa2fe, 0xe42e, 0x3c09, 0x2808,
+ 0xe092, 0x286d, 0xa102, 0xcc44, 0xe184, 0x0f99, 0x2901, 0x1809,
+ 0xf03a, 0x8111, 0xe42e, 0xe082, 0x1808, 0xe000, 0x0600, 0xe096,
+ 0xa202, 0x3d03, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0201, 0xe09e,
+ 0x2907, 0xe42e, 0xaf02, 0xae04, 0xe000, 0x0203, 0xe09e, 0x2907,
+ 0xe42e, 0x3c0a, 0xe0c0, 0x0042, 0xe000, 0x0180, 0x080a, 0xa207,
+ 0xe41e, 0x0fc5, 0xe0c0, 0x0041, 0xe005, 0x006c, 0xae0f, 0x0a0a,
+ 0xe042, 0xa205, 0xe41e, 0x0fc5, 0xe42e, 0xce20, 0xd111, 0x0600,
+ 0xd112, 0x0020, 0xce27, 0xca28, 0xf7f8, 0xe42e, 0x3c0a, 0xaf02,
+ 0xae06, 0xe0c1, 0x0041, 0xe042, 0xe005, 0x006c, 0xae0f, 0xe042,
+ 0xce20, 0xd111, 0x0600, 0xd112, 0x0004, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe004, 0x0600, 0xe09e, 0x2117, 0x4d17, 0x2a0a, 0xa803,
+ 0xe42b, 0x2117, 0x4d17, 0xe42e, 0xe161, 0x0600, 0xa23e, 0xc71f,
+ 0x3d11, 0x2848, 0xe000, 0x02b0, 0xe094, 0x2a48, 0x8848, 0x0022,
+ 0xe184, 0x0fff, 0x290a, 0xe000, 0x0600, 0xe092, 0x3f01, 0xa103,
+ 0xd1f9, 0x0000, 0xe162, 0x0600, 0xd022, 0x001f, 0xe184, 0x1009,
+ 0x2912, 0xcff0, 0xe42e, 0xe41e, 0x0fec, 0xe42e, 0xd1f3, 0x0000,
+ 0xe167, 0x02b0, 0xd022, 0x003f, 0xe184, 0x1017, 0x2917, 0xcfe4,
+ 0xd1f9, 0x0000, 0xe167, 0x0600, 0xd022, 0x001f, 0xe184, 0x1021,
+ 0x2917, 0xcff0, 0xe42e, 0xba4e, 0x3c11, 0xa200, 0x3c24, 0xd022,
+ 0x0007, 0xe184, 0x1030, 0xba41, 0x5a24, 0xe056, 0x2a24, 0xa003,
+ 0x3e24, 0x3c24, 0xa208, 0x3cf0, 0x2824, 0xaf0c, 0xe408, 0x113d,
+ 0xa224, 0x3cf0, 0xe41e, 0x1396, 0xe40a, 0x1140, 0xa226, 0x3cf0,
+ 0xba4e, 0x3c1f, 0xa112, 0xe404, 0x113d, 0xa154, 0xe400, 0x113d,
+ 0xbc3e, 0x3c10, 0xa202, 0x3c22, 0xa200, 0x3c67, 0x2811, 0xa1c8,
+ 0xf06a, 0xa124, 0xf04a, 0xa114, 0xf02a, 0xf33e, 0xbc06, 0x3c22,
+ 0xa20a, 0x3cf0, 0xbc08, 0xe408, 0x113d, 0xa20c, 0x3cf0, 0xbc08,
+ 0xe408, 0x113d, 0xba40, 0xba40, 0x3c67, 0xf23a, 0xa201, 0x3e69,
+ 0x3e6b, 0xe160, 0x0000, 0xba40, 0xf11a, 0x2a69, 0xae03, 0xe056,
+ 0x3c69, 0xe080, 0xe41e, 0x1341, 0x2a6b, 0xae03, 0xe056, 0x3c6b,
+ 0xe080, 0xa201, 0xe41e, 0x1374, 0xf07e, 0x2a69, 0xae03, 0x3e69,
+ 0x2a6b, 0xae03, 0x3e6b, 0xe080, 0xa002, 0xe090, 0xa110, 0xf648,
+ 0xa20e, 0x3cf0, 0xbc18, 0xe40d, 0x113d, 0xa008, 0x3c13, 0xa202,
+ 0x5813, 0x3414, 0x3c15, 0xa210, 0x3cf0, 0xbc04, 0x3c16, 0xe40d,
+ 0x113d, 0xa102, 0xf034, 0xf0aa, 0xf33e, 0xa212, 0x3cf0, 0xbc18,
+ 0xe40d, 0x113d, 0xa008, 0x3c17, 0xf2be, 0xba40, 0x3c18, 0xe41e,
+ 0x0cb5, 0xe160, 0x0907, 0xe161, 0x0908, 0x3500, 0x3d01, 0xe41e,
+ 0x0cb5, 0xe162, 0x0909, 0xe163, 0x090a, 0x3502, 0x3d03, 0xa214,
+ 0x3cf0, 0xbdfe, 0xe40d, 0x113d, 0xe164, 0x090b, 0x3d04, 0xf10a,
+ 0xa102, 0xcc44, 0xe162, 0x09e0, 0xe184, 0x10c9, 0xe41e, 0x0cb5,
+ 0x3512, 0x3d12, 0xa216, 0x3cf0, 0xe41e, 0x126f, 0xf01e, 0xe40d,
+ 0x113d, 0xa218, 0x3cf0, 0xbc20, 0xe40d, 0x113d, 0x3c19, 0xba40,
+ 0x3c1a, 0xa21a, 0x3cf0, 0xbdfe, 0xe40d, 0x113d, 0xa002, 0x3c57,
+ 0xa21c, 0x3cf0, 0xbdfe, 0xe40d, 0x113d, 0xa002, 0x3c58, 0x8457,
+ 0x8258, 0xe018, 0x3c1e, 0xa222, 0x3cf0, 0x2c57, 0xe002, 0x0080,
+ 0xe400, 0x113d, 0x2c58, 0xe002, 0x0080, 0xe400, 0x113d, 0x2c1e,
+ 0xe002, 0x4000, 0xe400, 0x113d, 0xa200, 0x3c1c, 0xba40, 0x3c1b,
+ 0xf098, 0xba40, 0x3c1c, 0x2858, 0xae02, 0x3c58, 0x2c1e, 0xae02,
+ 0x3c1e, 0xe41e, 0x11ed, 0xa21e, 0x3cf0, 0x2a1b, 0xba40, 0xb636,
+ 0x3c1d, 0xa220, 0x3cf0, 0xba40, 0xe161, 0x05e4, 0xc703, 0x3d11,
+ 0xf16a, 0xe161, 0x05e4, 0xe41e, 0x0c9b, 0x3d11, 0xe41e, 0x0c9b,
+ 0x3d11, 0xe41e, 0x0c9b, 0x2a1b, 0xf029, 0xae02, 0x3d11, 0xe41e,
+ 0x0c9b, 0x2a1b, 0xf029, 0xae02, 0x3d11, 0xf10d, 0xa200, 0x3c90,
+ 0x3c91, 0x2820, 0x3cea, 0x3ceb, 0xe41e, 0x14b5, 0xba40, 0xe016,
+ 0xe41a, 0x127f, 0xf03a, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x0c9b, 0x3c29, 0xbc3e, 0xe40d, 0x11e3,
+ 0x1810, 0xf11a, 0x0810, 0x3c10, 0xe41e, 0x1b12, 0x3c65, 0xa205,
+ 0xae23, 0xcc9f, 0xa202, 0xe41e, 0x0c4f, 0xa203, 0x3e9b, 0x2865,
+ 0xe40a, 0x11e3, 0xba40, 0x3c2d, 0xba40, 0x3c2a, 0xbc0e, 0xe40d,
+ 0x11e3, 0x3c2b, 0xf03a, 0xe40d, 0x11e3, 0x282d, 0x2a2b, 0xe01b,
+ 0xe052, 0xe408, 0x11e3, 0x2811, 0xa184, 0xf078, 0x282d, 0xf0aa,
+ 0xe004, 0x0064, 0x3c11, 0xf06e, 0x282b, 0xf04a, 0xe004, 0x0042,
+ 0x3c11, 0xbc3e, 0xe40d, 0x11e3, 0x3c2c, 0xbc3e, 0x3c2e, 0xe40d,
+ 0x11e3, 0xba40, 0x3c2f, 0xba42, 0x3c30, 0xbe34, 0xe40d, 0x11e3,
+ 0xa034, 0x3c31, 0xe404, 0x11e3, 0xa168, 0xe402, 0x11e3, 0xbe34,
+ 0xe40d, 0x11e3, 0xa034, 0xe404, 0x11e3, 0xa168, 0xe402, 0x11e3,
+ 0xbe18, 0xe40d, 0x11e3, 0x3c32, 0x3c36, 0xba40, 0x3c33, 0xba40,
+ 0x3c34, 0xba40, 0x3c35, 0xa200, 0x3c37, 0x3c68, 0x2811, 0xa184,
+ 0xf37a, 0x2829, 0x3c02, 0xe41e, 0x1bdd, 0xe41e, 0x0bb4, 0xf30a,
+ 0xba40, 0x3c37, 0xba40, 0x3c68, 0xf28a, 0xa201, 0x3e6a, 0x3e6c,
+ 0xe160, 0x0000, 0xe080, 0xa10c, 0x1837, 0x1837, 0xf132, 0xba40,
+ 0xf11a, 0x2a6a, 0xae03, 0xe056, 0x3c6a, 0xe080, 0xe41e, 0x1341,
+ 0x2a6c, 0xae03, 0xe056, 0x3c6c, 0xe080, 0xa203, 0xe41e, 0x1374,
+ 0xf07e, 0x2a6a, 0xae03, 0x3e6a, 0x2a6c, 0xae03, 0x3e6c, 0xe080,
+ 0xa002, 0xe090, 0xa110, 0xf5f8, 0xbe18, 0xf06d, 0x3c36, 0xe41e,
+ 0x0ce4, 0xa202, 0xe42e, 0xe0c1, 0x0059, 0xa107, 0xf049, 0x28ae,
+ 0xa902, 0x3cae, 0xe16a, 0xa200, 0xe42e, 0xa214, 0x2e1e, 0xe003,
+ 0x0063, 0xf2f7, 0xa216, 0x2e1e, 0xe003, 0x018c, 0xf2a7, 0xa22a,
+ 0x2e1e, 0xe003, 0x0318, 0xf257, 0xa22c, 0x2e1e, 0xe003, 0x0654,
+ 0xf207, 0xa23e, 0x2e1e, 0xe003, 0x0e10, 0xf1b7, 0xa240, 0x2e1e,
+ 0xe003, 0x1400, 0xf167, 0xa250, 0x2e1e, 0xe003, 0x2000, 0xf117,
+ 0xa254, 0x2e1e, 0xe003, 0x2200, 0xf0c7, 0xa264, 0x2e1e, 0xe003,
+ 0x5640, 0xf077, 0xa266, 0x2e1e, 0xe003, 0x9000, 0xf027, 0xa268,
+ 0x2a1f, 0xe045, 0xf023, 0x3c1f, 0x2a1f, 0xa115, 0xe004, 0x0129,
+ 0xf2d7, 0xa103, 0xe004, 0x02a3, 0xf297, 0xa113, 0xe004, 0x06f6,
+ 0xf257, 0xa103, 0xe004, 0x0dec, 0xf217, 0xa113, 0xe004, 0x17bb,
+ 0xf1d7, 0xa103, 0xe004, 0x34bc, 0xf197, 0xa103, 0xe004, 0x3c00,
+ 0xf157, 0xa113, 0xe004, 0x6000, 0xf117, 0xa103, 0xe004, 0x6600,
+ 0xf0d7, 0xa111, 0xe004, 0x1437, 0xae08, 0xf087, 0xa103, 0xe004,
+ 0x21c0, 0xae08, 0xf037, 0xe004, 0x17bb, 0xae12, 0x3409, 0x3c0a,
+ 0x841e, 0xe182, 0x0180, 0xe019, 0x2009, 0x4c0a, 0xc407, 0xd022,
+ 0x000f, 0xe184, 0x1265, 0xe046, 0xf034, 0x8117, 0xe190, 0xe08e,
+ 0xae02, 0x2a19, 0xae03, 0xe062, 0xa520, 0x3c20, 0xe42e, 0xe0c0,
+ 0x0041, 0xe005, 0x0026, 0xae11, 0xe042, 0xce20, 0xd111, 0x09e0,
+ 0xd112, 0x0200, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xa200,
+ 0x3c00, 0x3c01, 0x3c02, 0x3c03, 0x3c04, 0x3c05, 0x3c06, 0x3c07,
+ 0x3c08, 0x3c09, 0x3c0a, 0xba40, 0xa2ff, 0x3e25, 0x3e26, 0xf16a,
+ 0xba4e, 0xa201, 0x3e25, 0x3c26, 0xe002, 0x00ff, 0xf0f8, 0xa202,
+ 0x3c07, 0xba5e, 0xba5f, 0x3c25, 0x3e26, 0xe016, 0xe017, 0xe056,
+ 0xf028, 0xf04e, 0xa200, 0x3c26, 0x3c25, 0xba40, 0xf02a, 0xba40,
+ 0xba40, 0x3c0a, 0xf0ca, 0xba44, 0x3c09, 0xba40, 0x3c08, 0xba40,
+ 0x3c06, 0xf05a, 0xba4e, 0x3c05, 0xba4e, 0xba4e, 0xba40, 0x3c04,
+ 0xf05a, 0xbc0a, 0x3c03, 0xbc0a, 0x3c02, 0xba40, 0x3c01, 0xf0ba,
+ 0xba7e, 0xe161, 0x05c7, 0x3511, 0x3d11, 0xba7e, 0x3511, 0x3d11,
+ 0xba40, 0x3c00, 0xba40, 0x3c90, 0xe016, 0xe161, 0x05bd, 0xe41a,
+ 0x1325, 0xe40a, 0x1322, 0xba40, 0x3c91, 0xe016, 0xe161, 0x05c2,
+ 0xe41a, 0x1325, 0xe40a, 0x1322, 0x2890, 0x4c91, 0xf02a, 0xba40,
+ 0xba40, 0x3c23, 0xba40, 0xf08a, 0xba40, 0xbc20, 0xbc20, 0xbc20,
+ 0xbc20, 0xbc20, 0xbc20, 0x28eb, 0xa120, 0xf0a0, 0x2819, 0x18eb,
+ 0xf070, 0x28b3, 0xf09a, 0x287f, 0xa104, 0x18eb, 0xf052, 0x2ab3,
+ 0xf029, 0x2a20, 0x3eeb, 0xa202, 0xae3e, 0x2a0a, 0xae3d, 0xe056,
+ 0x2a09, 0xae37, 0xe056, 0x2a08, 0xae35, 0xe056, 0x2a07, 0xae33,
+ 0xe056, 0x2a06, 0xae31, 0xe056, 0x2a05, 0xae21, 0xe056, 0x2a04,
+ 0xae11, 0xe056, 0x2a03, 0xae0b, 0xe056, 0x2a02, 0xae05, 0xe056,
+ 0x2a01, 0xae03, 0xe056, 0x2a00, 0xe056, 0xe41e, 0x14b5, 0xe16a,
+ 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x0c9b, 0xcc44,
+ 0x3c61, 0xa002, 0x3d11, 0xba46, 0xba46, 0xe184, 0x1333, 0xe41e,
+ 0x0c9b, 0xe41e, 0x0c9b, 0xba40, 0xba48, 0xa002, 0x3d11, 0xba48,
+ 0xa002, 0x3d11, 0xba48, 0xa002, 0x3d11, 0xba48, 0x3d11, 0xa202,
+ 0xe42e, 0xd022, 0x000f, 0xa10c, 0xf034, 0xd022, 0x003f, 0xe161,
+ 0x0600, 0xa210, 0x3c06, 0x3c07, 0xa200, 0x3c08, 0x3c09, 0xe09c,
+ 0xe09e, 0xe184, 0x1371, 0x2807, 0xf10a, 0xe41e, 0x0cb5, 0xe42d,
+ 0x0806, 0xe000, 0x0100, 0xe008, 0x00ff, 0x3c07, 0x4c09, 0xe01a,
+ 0xe016, 0xe09e, 0xa202, 0x3c09, 0x2807, 0xf028, 0x2806, 0x3c06,
+ 0xe08d, 0xa003, 0xe09d, 0xa803, 0xf059, 0xe085, 0xae11, 0xe056,
+ 0x3d11, 0xe094, 0xe08e, 0xe42e, 0x3e08, 0x3c06, 0xa211, 0x3e07,
+ 0xa10c, 0xf064, 0xb690, 0xa00c, 0x3c06, 0xa240, 0x3c07, 0x2806,
+ 0x2a08, 0xf02b, 0xa01c, 0xae08, 0x3c06, 0xe0c0, 0x0041, 0xe005,
+ 0x0034, 0xae11, 0xe042, 0x0806, 0xce20, 0xd111, 0x0600, 0x2807,
+ 0xce24, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x2811, 0xa184,
+ 0xf0da, 0xa116, 0xf0ba, 0xa12e, 0xf09a, 0xa138, 0xf07a, 0x2824,
+ 0xe008, 0x0023, 0xf038, 0xa200, 0xe42e, 0xa202, 0xe42e, 0xa202,
+ 0x3c51, 0xe41e, 0x08b8, 0xe408, 0x141c, 0xe41e, 0x0b81, 0xf2ea,
+ 0xa102, 0xe40a, 0x143b, 0xa108, 0xe404, 0x13dd, 0xe40a, 0x143b,
+ 0xa102, 0xe40a, 0x1402, 0xa102, 0xe40a, 0x13ed, 0xa102, 0xe40a,
+ 0x13f8, 0xa102, 0xe40a, 0x140c, 0xa102, 0xe40a, 0x1419, 0xa102,
+ 0xe40a, 0x1419, 0xa102, 0xe40a, 0x1423, 0xa106, 0xe40a, 0x13e0,
+ 0xa10a, 0xe40a, 0x1438, 0xa002, 0xa10e, 0xf082, 0x2851, 0xe40a,
+ 0x144d, 0xe41e, 0x0985, 0xe40e, 0x1433, 0xe41e, 0x094c, 0xf4ae,
+ 0x2851, 0xe40a, 0x144d, 0xe41e, 0x14a6, 0xe41e, 0x0985, 0xa202,
+ 0x3cd6, 0xe41e, 0x1af7, 0xe40e, 0x1433, 0x2851, 0xe40a, 0x144d,
+ 0xe41e, 0x14a6, 0xe41e, 0x0985, 0xe41e, 0x1af7, 0xe40e, 0x1433,
+ 0x2851, 0xe40a, 0x144d, 0xe41e, 0x14a6, 0xe41e, 0x0985, 0xe41e,
+ 0x1b28, 0xf32e, 0x2851, 0xe40a, 0x144d, 0xe41e, 0x14a6, 0xe41e,
+ 0x0985, 0xe41e, 0x14ba, 0xf28e, 0x2851, 0xe40a, 0x144d, 0xe41e,
+ 0x14ad, 0xe41e, 0x14a6, 0xe41e, 0x0985, 0xba44, 0xe41e, 0x0ce4,
+ 0xf1be, 0xe41e, 0x08b8, 0xf16a, 0xe41e, 0x01db, 0x2851, 0xe408,
+ 0x1456, 0xe40e, 0x144d, 0xe41e, 0x0985, 0xba0e, 0xe002, 0x00ff,
+ 0xf058, 0xba4e, 0xe41e, 0x0ba5, 0xf798, 0xe41e, 0x0ce4, 0xe40e,
+ 0x13a9, 0xe41e, 0x094c, 0x2851, 0xe40a, 0x144d, 0xe40e, 0x13a9,
+ 0xa202, 0xe41e, 0x26fc, 0xe41e, 0x14a6, 0xe41e, 0x0985, 0xe41e,
+ 0x26d7, 0xe41e, 0x0d77, 0xf048, 0xe41e, 0x26fc, 0xa200, 0xe40a,
+ 0x13a9, 0x284e, 0x3c92, 0x284f, 0x3c93, 0xa200, 0x3c51, 0x28d6,
+ 0xf048, 0xe41e, 0x1482, 0xf078, 0xa202, 0xe42e, 0xa200, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x146b, 0xe41e, 0x05ab, 0x28d6, 0xf098,
+ 0xa202, 0xe41e, 0x26fc, 0xe41e, 0x05ab, 0xa200, 0xe41e, 0x26fc,
+ 0xe41e, 0x1a5c, 0xf6ae, 0xe165, 0x05e8, 0x2811, 0x3d15, 0x2857,
+ 0x3d15, 0x2858, 0x3d15, 0x28eb, 0x3d15, 0x281b, 0x3d15, 0x2824,
+ 0x3d15, 0x281f, 0x3d15, 0x2813, 0x3d15, 0x2816, 0x3d15, 0x2819,
+ 0x3d15, 0xe42e, 0xe165, 0x05e8, 0x2811, 0x1915, 0xf1d8, 0x2857,
+ 0x1915, 0xf1a8, 0x2858, 0x1915, 0xf178, 0x28eb, 0x1915, 0xf148,
+ 0x281b, 0x1915, 0xf118, 0x2824, 0x1915, 0xe428, 0x281f, 0x1915,
+ 0xe428, 0x2813, 0x1915, 0xe428, 0x2816, 0x1915, 0xe428, 0x2819,
+ 0x1915, 0xe428, 0xe42e, 0xa202, 0x3cbd, 0xe42e, 0x28ad, 0xe428,
+ 0xe41e, 0x0646, 0xa202, 0x3cad, 0xe42e, 0xa200, 0x3cad, 0xe42e,
+ 0xc009, 0x2039, 0x4c3a, 0xc000, 0xe42e, 0xc009, 0x3439, 0x3c3a,
+ 0xc000, 0xe42e, 0xa200, 0xba4f, 0xe042, 0xe003, 0x00ff, 0xf7cb,
+ 0xe41e, 0x176b, 0xa200, 0xba4f, 0xe042, 0xe003, 0x00ff, 0xf7cb,
+ 0xe41e, 0x1773, 0xf04a, 0xe41e, 0x14d4, 0xe42a, 0xe41e, 0x0ba5,
+ 0xf6a8, 0xe41e, 0x0ce4, 0xe42e, 0xe41e, 0x176f, 0xf13a, 0xa102,
+ 0xf14a, 0xa104, 0xf15a, 0xa102, 0xf16a, 0xa102, 0xf17a, 0xa150,
+ 0xf18a, 0xe41e, 0x1777, 0xf04a, 0xba4f, 0xa102, 0xf7e8, 0xa202,
+ 0xe42e, 0xe41e, 0x1503, 0xf10e, 0xe41e, 0x1532, 0xf0de, 0xe41e,
+ 0x1580, 0xf0ae, 0xe41e, 0x1591, 0xf07e, 0xe41e, 0x15db, 0xf04e,
+ 0xe41e, 0x15df, 0xf01e, 0xe42a, 0xc868, 0xa80e, 0xe016, 0xe428,
+ 0xe41e, 0x0ce4, 0xe42e, 0xbc3e, 0xf1fd, 0x1810, 0xf11a, 0x0810,
+ 0xf084, 0xa13e, 0xf060, 0xa03e, 0x3c10, 0xe41e, 0x1b12, 0x3c65,
+ 0xa200, 0xe41e, 0x0c4f, 0xa201, 0x3e9b, 0x2865, 0xe42a, 0x2890,
+ 0xe161, 0x05bd, 0xe418, 0x1526, 0x2891, 0xe161, 0x05c2, 0xe418,
+ 0x1526, 0xa202, 0xe42e, 0xa200, 0xe16a, 0xe42e, 0x2911, 0xa102,
+ 0xcc44, 0xe184, 0x1530, 0x2901, 0xe41e, 0x0cd8, 0x2901, 0xe41e,
+ 0x0cd8, 0xe42e, 0x2890, 0xe161, 0x05bf, 0xf038, 0xe161, 0x05c4,
+ 0x4c91, 0xf11a, 0x2911, 0xe41e, 0x0cd8, 0xc009, 0x343f, 0x3c40,
+ 0xc000, 0x2911, 0xe41e, 0x0cd8, 0xc009, 0x3441, 0x3c42, 0xc000,
+ 0x2911, 0xf02e, 0xa230, 0x3c02, 0x2823, 0xe016, 0xe428, 0xba46,
+ 0x3ca3, 0xa112, 0xb604, 0xe42a, 0xa012, 0xe049, 0xa200, 0xa107,
+ 0xb426, 0xa105, 0xb426, 0xa105, 0xb5f6, 0xcc44, 0xe184, 0x157d,
+ 0xba40, 0xf028, 0xf1be, 0xba42, 0xba40, 0xba48, 0xba40, 0x3c03,
+ 0xba40, 0xba40, 0xba4e, 0x2803, 0xf05a, 0xba4a, 0xba4a, 0xba48,
+ 0xf0ae, 0xba40, 0xf08a, 0xba4a, 0xba40, 0xf05a, 0xba4a, 0xba40,
+ 0xf02a, 0xba48, 0x2802, 0xe41e, 0x0cd8, 0xe190, 0xa202, 0xe42e,
+ 0xe41e, 0x1777, 0xf0da, 0xa102, 0xcc44, 0xe004, 0x00ff, 0xe184,
+ 0x158a, 0xba4f, 0xe052, 0xe002, 0x00ff, 0xe016, 0xe42a, 0xa202,
+ 0xe42e, 0xa202, 0xba4f, 0xe003, 0x00ff, 0xf039, 0xba4f, 0xa204,
+ 0xba1f, 0xe003, 0x0031, 0xf049, 0xba5f, 0xa004, 0xe190, 0xba3f,
+ 0x360e, 0x3e0f, 0xe005, 0x4454, 0x1a0e, 0xf069, 0xe005, 0x4731,
+ 0x1a0f, 0xf029, 0xf24e, 0xe005, 0x4741, 0x1a0e, 0xf0b9, 0xe005,
+ 0x3934, 0x1a0f, 0xf079, 0xba7f, 0xa008, 0xba0f, 0xa10d, 0xe40b,
+ 0x15c5, 0xc009, 0x2a2d, 0xc000, 0xe045, 0xa009, 0xc009, 0x3e2d,
+ 0xc000, 0xe41e, 0x166e, 0xa202, 0xe42e, 0xba4f, 0xa002, 0xc009,
+ 0x2a2d, 0xc000, 0xe045, 0xf4d1, 0xa202, 0xe42e, 0xba7e, 0xba40,
+ 0xf098, 0xba41, 0xba4a, 0xf04b, 0xba46, 0xba46, 0x3cb0, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xe41e, 0x166e, 0xa202, 0xe42e, 0xc009,
+ 0xa2fe, 0x3426, 0x3c27, 0xa201, 0x3628, 0x3e29, 0x362a, 0x3e2b,
+ 0xc000, 0xe41e, 0x0c9b, 0xc009, 0xe40d, 0x1654, 0x3426, 0x3c27,
+ 0xba40, 0xe40d, 0x1654, 0xae2a, 0xe055, 0x3628, 0x3e29, 0xe408,
+ 0x164a, 0xba4c, 0xe40d, 0x1654, 0xae0c, 0xe055, 0xba40, 0xe40d,
+ 0x1654, 0xae28, 0xe055, 0xba4a, 0xe40d, 0x1654, 0xe055, 0xba40,
+ 0xe40d, 0x1654, 0xae26, 0xe055, 0xba40, 0xe40d, 0x1654, 0xae24,
+ 0xe055, 0xba40, 0xe40d, 0x1654, 0xae22, 0xe055, 0xba40, 0xe40d,
+ 0x1654, 0xae20, 0xe055, 0xba40, 0xe40d, 0x1654, 0xae1e, 0xe055,
+ 0xba40, 0xe40d, 0x1654, 0xae1c, 0xe055, 0x3628, 0x3e29, 0xe04a,
+ 0xaf28, 0xa802, 0xe016, 0xaf0d, 0xa83f, 0xa10b, 0xe01b, 0xe052,
+ 0xf12a, 0xa201, 0xba46, 0xf21d, 0xae38, 0xe055, 0xba46, 0xf1dd,
+ 0xae30, 0xe055, 0xba46, 0xf19d, 0xae28, 0xe055, 0xba46, 0xf15d,
+ 0xae20, 0xe055, 0xba4e, 0xf11d, 0xe0c4, 0x4064, 0xf0ed, 0xe055,
+ 0x362a, 0x3e2b, 0x2228, 0x4e29, 0xba40, 0xae1a, 0xe055, 0x3628,
+ 0x3e29, 0xa202, 0xc000, 0xe42e, 0xc009, 0xa2fe, 0x3426, 0x3c27,
+ 0xa200, 0x3428, 0x3c29, 0x342a, 0x3c2b, 0xc000, 0xe42e, 0xc009,
+ 0x2426, 0x4c27, 0xc000, 0xe42e, 0xc009, 0x2428, 0x4c29, 0xc000,
+ 0xe42e, 0xc009, 0x242a, 0x4c2b, 0xc000, 0xe42e, 0xe0c0, 0x0065,
+ 0xa878, 0xa140, 0xf0ba, 0xe41e, 0x1777, 0xa102, 0xcc44, 0xe184,
+ 0x167a, 0xba4e, 0xe190, 0xe40e, 0x16fe, 0xa201, 0xe41e, 0x1759,
+ 0x2907, 0xa002, 0x3c0c, 0x3d17, 0xa120, 0xf6e0, 0x2b07, 0xe41e,
+ 0x176f, 0xf05a, 0xe41e, 0x1777, 0xe041, 0xf05e, 0x2861, 0xa002,
+ 0xae06, 0xe041, 0xa00f, 0xaf07, 0xae07, 0xe04a, 0xaf1f, 0xf0db,
+ 0xa201, 0xe41e, 0x1759, 0x8117, 0x8117, 0x2907, 0xa202, 0x3d07,
+ 0xa201, 0xe41e, 0x1757, 0xf50e, 0x3d17, 0xa201, 0xe41e, 0x1757,
+ 0xe167, 0x0600, 0xe41e, 0x176f, 0x3d17, 0xe41e, 0x176f, 0xf04a,
+ 0xe41e, 0x1777, 0xf04e, 0x2861, 0xa002, 0xae06, 0x3d17, 0x2a0c,
+ 0xe41e, 0x1757, 0xa200, 0x3c0b, 0xa200, 0xe167, 0x0600, 0xc703,
+ 0x3d17, 0xe167, 0x0600, 0xe41e, 0x176f, 0xf3ba, 0xe41e, 0x176f,
+ 0xa108, 0xf0f8, 0xe004, 0x4741, 0x3d17, 0xe004, 0x3934, 0x3d17,
+ 0x28a7, 0xa008, 0x3ca7, 0xe41e, 0x1777, 0xa108, 0xe41e, 0x1773,
+ 0x280b, 0xa002, 0x3c0b, 0xba4f, 0x28a7, 0xa002, 0x3ca7, 0xa802,
+ 0xf058, 0x280a, 0xae10, 0xe056, 0x3d17, 0x3e0a, 0x28a7, 0xa80e,
+ 0xe41a, 0x1719, 0xe41e, 0x1777, 0x180b, 0xf6b0, 0x28a7, 0xa80e,
+ 0xf0ea, 0x2aa7, 0xa803, 0xf04b, 0x280a, 0xae10, 0x3d17, 0x2aa7,
+ 0xa00f, 0xaf07, 0xae07, 0x3ea7, 0xe418, 0x1719, 0xe40e, 0x1717,
+ 0x280b, 0xa002, 0x3c0b, 0x2901, 0xe41e, 0x0cd8, 0x3517, 0x3d17,
+ 0x2901, 0xe41e, 0x0cd8, 0x3517, 0x3d17, 0x28a7, 0xa010, 0x3ca7,
+ 0xe41e, 0x1719, 0x2861, 0xa002, 0x180b, 0xf6b0, 0xf01a, 0xa202,
+ 0xe42e, 0x24b7, 0x4cb8, 0xe000, 0x0088, 0x18a7, 0xf242, 0xe0c0,
+ 0x0065, 0xaf12, 0xa802, 0xf0da, 0xa201, 0xe41e, 0x1759, 0x8117,
+ 0x8117, 0x2907, 0xa202, 0x3d07, 0xa201, 0xe41e, 0x1757, 0xe42e,
+ 0xe004, 0x0200, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202,
+ 0xce00, 0xe0c0, 0x005d, 0xe008, 0x0200, 0xe190, 0xf7b8, 0xe004,
+ 0x0090, 0x3ca7, 0x24b5, 0x4cb6, 0x08a7, 0xa110, 0xce20, 0xd111,
+ 0x0600, 0xd112, 0x0004, 0xd113, 0x0000, 0xca28, 0xf7f8, 0xa200,
+ 0xe167, 0x0600, 0xc703, 0x3d17, 0xe167, 0x0600, 0xe42e, 0xa200,
+ 0xf02e, 0xa202, 0x3c0d, 0x24b5, 0x4cb6, 0xae07, 0xe042, 0xce20,
+ 0xd111, 0x0600, 0xd112, 0x0004, 0x880d, 0x0113, 0xca28, 0xf7f8,
+ 0xe167, 0x0600, 0xe42e, 0xc009, 0x3c2c, 0xc000, 0xe42e, 0xc009,
+ 0x282c, 0xc000, 0xe42e, 0xc009, 0x3c2d, 0xc000, 0xe42e, 0xc009,
+ 0x282d, 0xc000, 0xe42e, 0x2c39, 0x3c7b, 0xa202, 0x3c7c, 0xa200,
+ 0x3c7d, 0x3c7e, 0x284e, 0xe016, 0xe428, 0x284f, 0xf0ca, 0xe41e,
+ 0x181a, 0xba40, 0xba40, 0xb7f0, 0xb634, 0x3c7c, 0xa200, 0x3c7b,
+ 0xa202, 0xe42e, 0xba40, 0xf11a, 0x2819, 0xe42a, 0xae02, 0x3c09,
+ 0x2014, 0x4c15, 0x583f, 0x3400, 0x3c01, 0x2c39, 0x583f, 0x083f,
+ 0x3402, 0x3c03, 0xbc0c, 0xf058, 0xa202, 0x3c7d, 0xe42e, 0xbc0c,
+ 0xe40d, 0x1817, 0xe40a, 0x1815, 0xa102, 0xf0ca, 0xa102, 0xf1fa,
+ 0xa102, 0xf24a, 0xa102, 0xf39a, 0xa102, 0xe40a, 0x17f5, 0xe40e,
+ 0x17fd, 0xe41e, 0x0c9b, 0xe40d, 0x1817, 0xa002, 0x1002, 0x1c03,
+ 0xe012, 0x3c0a, 0xf032, 0x0000, 0x0c01, 0xa203, 0xe41e, 0x1821,
+ 0x2a0a, 0x3e04, 0x4c4f, 0xe41a, 0x1839, 0xf5ae, 0xbc40, 0xe40d,
+ 0x1817, 0xa2ff, 0xe41e, 0x1821, 0xf53e, 0xe41e, 0x0c9b, 0xe40d,
+ 0x1817, 0xa002, 0x1002, 0x1c03, 0xe012, 0xf032, 0x0000, 0x0c01,
+ 0x3c06, 0xa802, 0x443f, 0xbc21, 0xf33d, 0x5a3f, 0xe041, 0x3e07,
+ 0xe41e, 0x1868, 0xe40e, 0x17a7, 0xbc20, 0xf2ad, 0xa102, 0x583f,
+ 0x083f, 0xe41e, 0x1883, 0xe40e, 0x17a7, 0xe41e, 0x181a, 0xa202,
+ 0x3c7e, 0xa200, 0x3c7b, 0xe40e, 0x17a7, 0xbc20, 0xf19d, 0x3c7b,
+ 0x287b, 0x583f, 0x083f, 0xa2ff, 0xe41e, 0x1821, 0xf7a8, 0x283f,
+ 0xf09a, 0x2840, 0xf078, 0x287b, 0xae02, 0xa2ff, 0xe41e, 0x1821,
+ 0xf7b8, 0xa2fe, 0x3c7c, 0xe40e, 0x17a7, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0xc410, 0xe161, 0x02f1, 0xa200, 0xc71f, 0x3d31,
+ 0xe42e, 0x3c04, 0x3e05, 0xe161, 0x02f0, 0x8809, 0x0022, 0xe184,
+ 0x1834, 0x2d11, 0x2b09, 0x1c04, 0x1a05, 0xf068, 0xf059, 0x8111,
+ 0xa200, 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200, 0xe42e, 0xa202,
+ 0xe42e, 0xe161, 0x02f0, 0x8809, 0x0022, 0xe184, 0x1849, 0x2d11,
+ 0x2b09, 0x1804, 0x1a05, 0xf050, 0xf049, 0x8111, 0xa200, 0x3d09,
+ 0x8111, 0x8111, 0xe160, 0x0003, 0xe161, 0x02f1, 0x8809, 0x0022,
+ 0xe184, 0x1865, 0x2909, 0xf11a, 0x2d01, 0x2e39, 0x5a3f, 0xe045,
+ 0xf053, 0x2214, 0x4e15, 0x5a3f, 0xe046, 0xae02, 0x1804, 0xf052,
+ 0xa200, 0x8111, 0x3d01, 0xe42e, 0x8131, 0xe190, 0xa202, 0xe42e,
+ 0x2807, 0xa2ff, 0xe41e, 0x1821, 0xf7c8, 0xe161, 0x02f0, 0x8809,
+ 0x0022, 0xe184, 0x187e, 0x2d11, 0x2b09, 0x1c06, 0xf078, 0xf067,
+ 0x2807, 0x3d11, 0xa2fe, 0x3d09, 0xf05e, 0x8111, 0x8111, 0xa200,
+ 0xe42e, 0xa202, 0xe42e, 0x3c08, 0xe161, 0x02f0, 0x8809, 0x0022,
+ 0xe184, 0x1893, 0x2d11, 0x2b09, 0x1808, 0xf056, 0xf043, 0x8111,
+ 0xa200, 0x3d09, 0x8111, 0x8111, 0xe42e, 0x2819, 0x1812, 0xf122,
+ 0x2812, 0xa102, 0xcc44, 0xe161, 0x0202, 0xe184, 0x18a8, 0x2911,
+ 0xf06a, 0x2909, 0xe412, 0x1ff5, 0xa200, 0x3d11, 0xe082, 0xa006,
+ 0xe092, 0x2819, 0xb62c, 0x3c12, 0x2816, 0xa104, 0xe428, 0xe41e,
+ 0x1a5c, 0xe42e, 0x2816, 0xa102, 0xf044, 0xf16a, 0xe40e, 0x1900,
+ 0x7417, 0xe160, 0x0903, 0x3d00, 0x283f, 0xe016, 0x442a, 0xe418,
+ 0x0cb5, 0xe42d, 0xe161, 0x0904, 0xe162, 0x0905, 0x3501, 0x3d02,
+ 0xe41e, 0x1974, 0xf38e, 0xa200, 0xe160, 0x0903, 0xe161, 0x0904,
+ 0xe162, 0x0905, 0xe163, 0x0906, 0x3500, 0x3d01, 0x3502, 0x3d03,
+ 0x2818, 0xf178, 0xe41e, 0x0cb5, 0xe42d, 0xe164, 0x0903, 0xe165,
+ 0x0904, 0x3504, 0x3d05, 0x282a, 0xf0ca, 0x283f, 0xf0a8, 0xe41e,
+ 0x0cb5, 0xe42d, 0xe166, 0x0905, 0xe167, 0x0906, 0x3506, 0x3d07,
+ 0xe41e, 0x19c4, 0xf10e, 0xe164, 0x0903, 0xe165, 0x0904, 0xe166,
+ 0x0905, 0xe167, 0x0906, 0x3504, 0x3d05, 0x3506, 0x3d07, 0xf03e,
+ 0xe41e, 0x1a15, 0x283f, 0x2a42, 0xf0f9, 0xf078, 0x2074, 0x4c75,
+ 0x2276, 0x4e77, 0xe066, 0xf0ee, 0x2074, 0x4c75, 0xc009, 0x343b,
+ 0x3c3c, 0xc000, 0xf07e, 0x2076, 0x4c77, 0xc009, 0x343d, 0x3c3e,
+ 0xc000, 0x3472, 0x3c73, 0xe42e, 0x284f, 0x4c7e, 0xf03a, 0x28d6,
+ 0xe016, 0xe418, 0x1a5c, 0x28e5, 0xae02, 0xe000, 0x0578, 0xe092,
+ 0x2072, 0x4c73, 0x3511, 0x3d11, 0x28e5, 0xe000, 0x059a, 0xe092,
+ 0x2884, 0x2ad8, 0xae1f, 0xe056, 0x3d11, 0x28e5, 0xa002, 0x3ce5,
+ 0x28eb, 0x2a16, 0xa105, 0xb616, 0x2a21, 0xb616, 0x3c07, 0xe41e,
+ 0x2014, 0xf048, 0xe41e, 0x1a61, 0xf7be, 0xe41e, 0x2024, 0xe428,
+ 0xe41e, 0x1a61, 0xf7be, 0x28e9, 0xf04a, 0xa102, 0x3ce9, 0xf1fe,
+ 0x28e8, 0xf1da, 0x28e7, 0xe000, 0x05ab, 0xe092, 0x28e7, 0xa002,
+ 0x3ce7, 0xa124, 0xf028, 0x3ce7, 0x28e8, 0xa102, 0x3ce8, 0x2901,
+ 0xe049, 0xe009, 0x8000, 0xf08b, 0x26a8, 0x4ea9, 0xa903, 0x36a8,
+ 0x3ea9, 0xe008, 0x7fff, 0xe049, 0x1a7f, 0xe425, 0xe41e, 0x08d2,
+ 0xe049, 0xa2fa, 0xb7f2, 0xe42e, 0xa202, 0x5817, 0xaf02, 0x3c06,
+ 0x284f, 0x2a82, 0xf0b8, 0xf0d9, 0xe164, 0x0906, 0x2114, 0x4d14,
+ 0xe166, 0x0908, 0x2316, 0x4f16, 0xf09e, 0xa200, 0xa201, 0xf06e,
+ 0xa200, 0xe161, 0x090a, 0x2311, 0x4f11, 0x3400, 0x3c01, 0x3602,
+ 0x3e03, 0xe161, 0x0903, 0x2f01, 0x1202, 0x1e03, 0xf071, 0xe013,
+ 0x1e06, 0xf085, 0x0c06, 0x0c06, 0xf05e, 0x1e06, 0xf037, 0x1c06,
+ 0x1c06, 0x3404, 0x3c05, 0xe161, 0x0903, 0x0d01, 0x3474, 0x3c75,
+ 0xe162, 0x0904, 0x0112, 0x0d12, 0x3476, 0x3c77, 0x284e, 0xf14a,
+ 0x2074, 0x4c75, 0xe161, 0x090a, 0x3511, 0x3d11, 0x2004, 0x4c05,
+ 0xe164, 0x0906, 0x3514, 0x3d14, 0xe161, 0x0903, 0xe166, 0x0908,
+ 0x2d01, 0x3516, 0x3d16, 0xe42e, 0xe41e, 0x1a26, 0xe160, 0x090b,
+ 0x2900, 0xf34a, 0x2000, 0x4c01, 0x0c39, 0xf306, 0x2a4e, 0xe017,
+ 0xe046, 0xa102, 0xf2b4, 0xe160, 0x090b, 0xe188, 0x000f, 0x7d00,
+ 0x3402, 0x3c03, 0xe41e, 0x1a4c, 0xe163, 0x090b, 0x2903, 0xa102,
+ 0xcc44, 0xe161, 0x09e0, 0xa200, 0xe184, 0x19e7, 0x0111, 0x0d11,
+ 0xae02, 0x3404, 0xe008, 0xffff, 0xaf02, 0x3c05, 0x8403, 0x8204,
+ 0xe018, 0xae1e, 0x8205, 0xe01c, 0xe161, 0x09e0, 0x8802, 0x0022,
+ 0xe184, 0x19fb, 0x0111, 0x0d11, 0xf02e, 0xa200, 0x2a4e, 0xf059,
+ 0xe161, 0x0907, 0x0111, 0x0d11, 0xe164, 0x0903, 0x0114, 0x0d14,
+ 0x3474, 0x3c75, 0xe162, 0x0909, 0x0112, 0x0d12, 0xe166, 0x0905,
+ 0x0116, 0x0d16, 0x3476, 0x3c77, 0xe42e, 0xe41e, 0x1a26, 0x284f,
+ 0xe016, 0xf08a, 0x2000, 0x4c01, 0x0c39, 0xae02, 0x2a4e, 0xe017,
+ 0xe046, 0x3474, 0x3c75, 0x3476, 0x3c77, 0xe42e, 0x2882, 0xf09a,
+ 0xa200, 0xe162, 0x0901, 0x3512, 0x3d12, 0xe161, 0x0900, 0x3d01,
+ 0x284f, 0xe016, 0xf0da, 0xe162, 0x0901, 0x2112, 0x4d12, 0xe161,
+ 0x0900, 0x2f01, 0x1e39, 0xf047, 0xa203, 0x5a13, 0xe042, 0x3400,
+ 0x3c01, 0x2839, 0xe161, 0x0900, 0x3d01, 0x2000, 0x4c01, 0xe162,
+ 0x0901, 0x3512, 0x3d12, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x0026,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x09e0, 0xd112, 0x0200, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe42e, 0x28e5, 0xe426, 0xe41e, 0x1a61,
+ 0xf7ce, 0x28e5, 0xe426, 0xe161, 0x0578, 0xe162, 0x0578, 0x2111,
+ 0x4d11, 0xa201, 0x3e00, 0xa203, 0x28e5, 0xa104, 0xf0e4, 0xcc44,
+ 0xe184, 0x1a7b, 0x2112, 0x4d0a, 0x1111, 0x1d11, 0xf056, 0xe082,
+ 0xa104, 0xe094, 0x3e00, 0xa003, 0xe084, 0xa004, 0xe092, 0x2800,
+ 0xe000, 0x059a, 0xe098, 0xa002, 0xe096, 0x2904, 0x3c01, 0xe41e,
+ 0x1ffc, 0x28e5, 0x1800, 0xa104, 0xf0a4, 0xcc44, 0xe184, 0x1a95,
+ 0x2911, 0x3d12, 0x2911, 0x3d12, 0x2913, 0x3d14, 0x28e5, 0xb5f0,
+ 0x3ce5, 0x28e6, 0xe000, 0x05ab, 0xe092, 0x2801, 0x3d01, 0x28e6,
+ 0xa002, 0x3ce6, 0xa124, 0xf028, 0x3ce6, 0x28e8, 0xa002, 0x3ce8,
+ 0xe42e, 0xa200, 0x3cb2, 0xe004, 0x0054, 0xe09c, 0x287f, 0xa102,
+ 0xcc44, 0xe184, 0x1ac2, 0x9e06, 0x5cb2, 0xa802, 0xf0a8, 0x28b2,
+ 0xe049, 0xe001, 0x0518, 0xe09f, 0x2b07, 0xa809, 0xe419, 0x2005,
+ 0x2ab2, 0xa003, 0x3eb2, 0xe42e, 0xe004, 0x0518, 0xe09e, 0xe004,
+ 0x0054, 0xe09c, 0x287f, 0xa102, 0xcc44, 0xa200, 0x3cb2, 0xe184,
+ 0x1ad8, 0x2b17, 0xaf05, 0xa803, 0x5ab2, 0xe056, 0x2ab2, 0xa003,
+ 0x3eb2, 0x9f06, 0xe42e, 0x2840, 0xf078, 0xe41e, 0x2041, 0x3c3e,
+ 0xe41e, 0x2092, 0xf03e, 0x283e, 0x3c84, 0xe42e, 0xe161, 0x0600,
+ 0xa200, 0x3d11, 0x3c02, 0xd022, 0x013f, 0xe184, 0x1af3, 0xe41e,
+ 0x1bdb, 0x2802, 0xa002, 0x3c02, 0xa200, 0x3c9b, 0xe42e, 0xba4e,
+ 0xba40, 0xba40, 0xba40, 0xba40, 0xba46, 0xba4e, 0xbc3e, 0xf10d,
+ 0x3c00, 0x1810, 0xf038, 0xa2fe, 0x3c10, 0x2800, 0xe000, 0x0100,
+ 0x2ad6, 0xf02b, 0xa040, 0xe41e, 0x1b6c, 0xa202, 0xe42e, 0xe16a,
+ 0xa200, 0xe42e, 0xa204, 0x3c9b, 0x2810, 0xe000, 0x0100, 0x2ad6,
+ 0xf02b, 0xa040, 0xe41e, 0x1ba7, 0xe42a, 0xe41e, 0x1023, 0xf056,
+ 0xe41e, 0x1895, 0xa202, 0xe42e, 0xa2fe, 0x3c10, 0xa200, 0xe42e,
+ 0xe41e, 0x0c9b, 0xf12d, 0x3c01, 0xe002, 0x00ff, 0xf0e0, 0x2801,
+ 0x1829, 0xf038, 0xa2fe, 0x3c29, 0x28ae, 0xa802, 0x3cae, 0x2801,
+ 0xe41e, 0x1b6c, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa202,
+ 0x3c9b, 0x2829, 0xe41e, 0x1ba7, 0xf0da, 0xe41e, 0x1142, 0x3c65,
+ 0xa200, 0xe41e, 0x0c4f, 0xa201, 0x3e9b, 0x2865, 0xf03a, 0xa202,
+ 0xe42e, 0xe0c1, 0x0059, 0xa107, 0xf079, 0x28ae, 0xa104, 0xf04a,
+ 0x28ae, 0xa902, 0x3cae, 0xa2fe, 0x3c29, 0xa200, 0xe42e, 0x2860,
+ 0xa102, 0xf06a, 0x2499, 0x4c9a, 0xe41e, 0x1bf5, 0xe470, 0xe41e,
+ 0x1c0e, 0xe41e, 0x1bfc, 0xe470, 0x3c02, 0xe41e, 0x1bdd, 0xa200,
+ 0x3c06, 0x2802, 0xae14, 0x3404, 0x3c05, 0xe41e, 0x0c4a, 0x0404,
+ 0x0c05, 0xce20, 0xd111, 0x0000, 0xe41e, 0x0c1d, 0x1806, 0xa00e,
+ 0xaf06, 0xae02, 0xce24, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xca2c,
+ 0xf7fa, 0xe41e, 0x0c26, 0xf128, 0x2004, 0x4c05, 0xe000, 0x0200,
+ 0x3404, 0x3c05, 0xe41e, 0x0c1d, 0x3c06, 0xe41e, 0x09ee, 0xe41e,
+ 0x0c1d, 0xe002, 0x0400, 0xf020, 0xf59e, 0xe161, 0x0600, 0xa202,
+ 0x3d11, 0xe41e, 0x0c1d, 0x3d01, 0xe41e, 0x1bdb, 0xe42e, 0x3c02,
+ 0xe41e, 0x1bdd, 0xe161, 0x0600, 0x2911, 0xe42a, 0x8111, 0x2111,
+ 0x4d11, 0x2802, 0xae14, 0x3404, 0x3c05, 0x289b, 0xa102, 0xf0da,
+ 0xe41e, 0x0c4a, 0x0404, 0x0c05, 0xe41e, 0x1bf5, 0xa204, 0xe41e,
+ 0x0c4f, 0xe004, 0x0090, 0xf0ce, 0xe41e, 0x0c4a, 0x0404, 0x0c05,
+ 0xe41e, 0x1bfc, 0xa202, 0xe41e, 0x0c4f, 0xe004, 0x0080, 0xcc66,
+ 0xcc6a, 0xcc6e, 0xa01e, 0xcc6c, 0xa200, 0xcc60, 0xcc68, 0xcc70,
+ 0xe128, 0xa202, 0xe42e, 0xa204, 0xf02e, 0xa206, 0x3c0a, 0xe41e,
+ 0x1beb, 0xce20, 0xd111, 0x0600, 0xd112, 0x0004, 0x880a, 0x0113,
+ 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x002a, 0xae11,
+ 0xe042, 0x2a02, 0xae07, 0xe042, 0xe42e, 0xce20, 0xa080, 0x3499,
+ 0x3c9a, 0xd111, 0x0090, 0xf07e, 0xce20, 0xa080, 0xe41e, 0x1c09,
+ 0xd111, 0x0080, 0xd112, 0x0010, 0xd113, 0x0013, 0xca28, 0xf7f8,
+ 0xe42e, 0xc009, 0x3410, 0x3c11, 0xc000, 0xe42e, 0xc009, 0x2410,
+ 0x4c11, 0xc000, 0xe42e, 0xe41e, 0x1c28, 0x2819, 0xe42a, 0xa102,
+ 0x3c00, 0x284e, 0xe01a, 0x2abe, 0xa003, 0xa803, 0xe052, 0xe418,
+ 0x1d80, 0xe41e, 0x1db5, 0xe41e, 0x1ded, 0xe41e, 0x1e20, 0xe42e,
+ 0x28d6, 0xe42a, 0x2a19, 0xae05, 0xe001, 0x0200, 0x28d7, 0xf234,
+ 0xe093, 0xa200, 0x3d11, 0xa2fc, 0x3d11, 0xa206, 0x3d11, 0x28d7,
+ 0x3d11, 0x2a19, 0xae03, 0xe001, 0x0240, 0xe09b, 0x2a19, 0xae05,
+ 0xe001, 0x0260, 0xe09d, 0x2a19, 0xe001, 0x02a0, 0xe09f, 0x2072,
+ 0x4c73, 0x3515, 0x3d15, 0x3516, 0x3d16, 0x3516, 0x3d16, 0xa200,
+ 0x3d07, 0xf05e, 0xa005, 0xe093, 0xa200, 0x3d01, 0xe42e, 0xc418,
+ 0xe161, 0x0202, 0xa201, 0x2819, 0xf0c6, 0xa102, 0xcc44, 0xe184,
+ 0x1c67, 0x2911, 0xf05a, 0x2909, 0xe41e, 0x1ff5, 0x3f11, 0x8131,
+ 0xe42e, 0x287e, 0xf11a, 0x2074, 0x4c75, 0x1072, 0x1c73, 0x3474,
+ 0x3c75, 0x2076, 0x4c77, 0x1072, 0x1c73, 0x3476, 0x3c77, 0xa200,
+ 0x3472, 0x3c73, 0x3c3c, 0xa200, 0x3cbe, 0x2c39, 0x2a4f, 0x4e7e,
+ 0xb612, 0x3c80, 0x2819, 0xf12a, 0xa102, 0x3c00, 0x2839, 0x3c50,
+ 0x287d, 0xe41a, 0x1d44, 0x2840, 0xe016, 0xe418, 0x1d15, 0x2840,
+ 0xe408, 0x1cd9, 0xe41e, 0x1c99, 0xe42e, 0x2884, 0xe41e, 0x1ff5,
+ 0xe42e, 0xc420, 0xe161, 0x0202, 0x8800, 0x0022, 0xe184, 0x1ca2,
+ 0x2901, 0xf03a, 0x8131, 0xe42e, 0xe082, 0xe002, 0x0202, 0xaf04,
+ 0x3c0a, 0x2841, 0x3d09, 0x287c, 0x3d09, 0x287b, 0x3d31, 0x8109,
+ 0x2884, 0x3d11, 0xe082, 0xe000, 0x005c, 0xe094, 0xe002, 0x0260,
+ 0xaf02, 0xe000, 0x0240, 0xe092, 0x2072, 0x4c73, 0x3511, 0x3d11,
+ 0x2a41, 0xa105, 0x2112, 0x4d0a, 0xf03b, 0x2074, 0x4c75, 0x3512,
+ 0x3d12, 0x2112, 0x4d0a, 0xf035, 0x2076, 0x4c77, 0x3512, 0x3d12,
+ 0x280a, 0xe000, 0x02a0, 0xe092, 0xa206, 0x1841, 0xe01a, 0x3d01,
+ 0xe42e, 0xe161, 0x0200, 0x8800, 0x0022, 0xe184, 0x1ce6, 0x2d11,
+ 0x2b11, 0x1c7b, 0x1a7c, 0xf028, 0xf04b, 0x8111, 0x8111, 0xe42e,
+ 0xa206, 0x3d01, 0xe082, 0xe000, 0x005e, 0xe094, 0xe002, 0x0260,
+ 0xaf02, 0xe000, 0x0240, 0xe092, 0xe002, 0x0240, 0xaf02, 0x3c0a,
+ 0x2072, 0x4c73, 0x2311, 0x4f09, 0xe066, 0x3511, 0x3d11, 0xf41e,
+ 0xc420, 0xe161, 0x0202, 0x8800, 0x0022, 0xe184, 0x1d09, 0x2901,
+ 0xf03a, 0x8131, 0xe42e, 0xa206, 0x3d09, 0xa202, 0x3d09, 0x2850,
+ 0x3d31, 0x8109, 0xa2fe, 0x3d11, 0xe42e, 0xa200, 0xc420, 0xe161,
+ 0x0202, 0x8800, 0x0022, 0xe184, 0x1d1f, 0x2b31, 0xe01b, 0xe042,
+ 0x1819, 0xe424, 0xa203, 0xae21, 0xe161, 0x0202, 0x8800, 0x0022,
+ 0xe184, 0x1d3d, 0x2909, 0xf11a, 0x2909, 0xf0e6, 0x2901, 0x1c50,
+ 0xf036, 0x1014, 0x1c15, 0x0c50, 0xe046, 0xf062, 0xe042, 0xe049,
+ 0xe082, 0xa004, 0xe094, 0x8111, 0x8111, 0x8131, 0xa200, 0x3d12,
+ 0x2912, 0xe412, 0x1ff5, 0xe42e, 0xe161, 0x0200, 0xe162, 0x02f0,
+ 0x8800, 0x0022, 0xe184, 0x1d7e, 0x283f, 0xf098, 0x2912, 0x3c02,
+ 0x2912, 0x3c03, 0xe01a, 0xb670, 0x3c04, 0xf15e, 0x2912, 0xaf02,
+ 0x3c02, 0x2912, 0x3c03, 0xe01a, 0x3c04, 0x8112, 0x290a, 0xe01a,
+ 0xae02, 0x4c04, 0x3c04, 0xa802, 0xf068, 0x2912, 0xaf02, 0x3c02,
+ 0x290a, 0x3c03, 0x2804, 0x8112, 0x8112, 0xf08a, 0x2802, 0x3d11,
+ 0x2803, 0x3d11, 0x2804, 0x3d11, 0xf0ae, 0x8111, 0x8111, 0x2901,
+ 0xa201, 0x3f11, 0xf04a, 0x2901, 0xe412, 0x1ff5, 0x8111, 0xe42e,
+ 0x284f, 0xe428, 0x2819, 0xe42a, 0x2840, 0xe428, 0xe41e, 0x1fe2,
+ 0x4c1a, 0xe42a, 0x2c80, 0x3c50, 0xa200, 0x3c0f, 0x2850, 0xa002,
+ 0x2214, 0x4e15, 0xa103, 0xe052, 0x3c50, 0x1c39, 0xe42a, 0x281a,
+ 0x4caa, 0xf05a, 0xe41e, 0x1d15, 0xe41e, 0x1d00, 0x281a, 0xf6f8,
+ 0x28ae, 0xa920, 0x3cae, 0x280f, 0xa002, 0x3c0f, 0xa120, 0xf062,
+ 0xe41e, 0x05ab, 0xe41e, 0x181a, 0xf62e, 0xe41e, 0x05ab, 0xe41e,
+ 0x1a5c, 0x28ae, 0xa908, 0x3cae, 0xe42e, 0xe161, 0x0200, 0xe162,
+ 0x02f0, 0x8800, 0x0022, 0x28d6, 0xf03a, 0x8819, 0x0022, 0xe184,
+ 0x1de1, 0x283f, 0xf0c8, 0x2911, 0x3d12, 0x2911, 0x2b11, 0xa107,
+ 0xb612, 0x3d12, 0xa200, 0x3d12, 0x3d12, 0xf14e, 0x2911, 0xae02,
+ 0xa002, 0x1842, 0x3d12, 0x2911, 0x2b09, 0xa803, 0xb616, 0x3d0a,
+ 0x2912, 0x8112, 0xaa02, 0x3d12, 0x2911, 0x2b11, 0xa805, 0xb616,
+ 0x3d12, 0x8111, 0xe161, 0x0330, 0xe162, 0x02f0, 0xd022, 0x003f,
+ 0xe184, 0x1deb, 0x2912, 0x3d11, 0xe42e, 0x283f, 0xf148, 0xe41e,
+ 0x1e7e, 0x2808, 0xe000, 0x0370, 0xe096, 0xe41e, 0x1ec0, 0x2808,
+ 0x0809, 0x3c6d, 0xe000, 0x0370, 0xe096, 0xe41e, 0x1f7e, 0x086d,
+ 0x3c6d, 0xe42e, 0xe41e, 0x1e7e, 0xe163, 0x0370, 0x2808, 0xe41e,
+ 0x1f88, 0x3c08, 0xe000, 0x0370, 0xe096, 0xe41e, 0x1ec0, 0x2808,
+ 0xe000, 0x0370, 0xe096, 0x2809, 0xe41e, 0x1f88, 0x0808, 0x3c6d,
+ 0xe000, 0x0370, 0xe096, 0xe41e, 0x1f7e, 0x086d, 0x3c6d, 0xe42e,
+ 0x283f, 0xf238, 0xe41e, 0x1ef9, 0x2808, 0xe000, 0x0390, 0xe096,
+ 0xe41e, 0x1ec0, 0x2808, 0xe000, 0x03b0, 0xe096, 0xe41e, 0x1ec0,
+ 0x2808, 0x0809, 0x3c6d, 0xe41e, 0x1fcb, 0x286d, 0xe000, 0x0390,
+ 0xe096, 0xe41e, 0x1f7e, 0x286d, 0xe000, 0x03b0, 0xe096, 0xe41e,
+ 0x1f7e, 0x086d, 0x3c6d, 0xe42e, 0xe41e, 0x1ef9, 0xe163, 0x0390,
+ 0x2808, 0xe41e, 0x1f88, 0xe163, 0x03b0, 0x2808, 0xe41e, 0x1f88,
+ 0x3c08, 0x2808, 0xe000, 0x0390, 0xe096, 0xe41e, 0x1ec0, 0x2808,
+ 0xe000, 0x0390, 0xe096, 0x2809, 0xe41e, 0x1f88, 0x2808, 0xe000,
+ 0x03b0, 0xe096, 0xe41e, 0x1ec0, 0x2808, 0xe000, 0x03b0, 0xe096,
+ 0x2809, 0xe41e, 0x1f88, 0x0808, 0x3c6d, 0xe41e, 0x1fcb, 0x286d,
+ 0xe000, 0x0390, 0xe096, 0xe41e, 0x1f7e, 0x286d, 0xe000, 0x03b0,
+ 0xe096, 0xe41e, 0x1f7e, 0x086d, 0x3c6d, 0xe42e, 0xe161, 0x0600,
+ 0xa200, 0xc70f, 0x3d11, 0x283f, 0xb674, 0x3c05, 0xa200, 0x3c08,
+ 0xc420, 0xe163, 0x0370, 0xa2fe, 0x3c06, 0xa203, 0xae21, 0xe013,
+ 0xe161, 0x0202, 0xe162, 0x0600, 0x8800, 0x0022, 0xe184, 0x1eaf,
+ 0x2912, 0xf168, 0x2909, 0x1805, 0xf124, 0x2909, 0xf0f6, 0x2901,
+ 0x1c39, 0xf036, 0x1014, 0x1c15, 0x0c39, 0xe046, 0xf076, 0xe042,
+ 0xe049, 0xe084, 0xe002, 0x0601, 0x3c06, 0x8111, 0x8111, 0x8131,
+ 0x2806, 0xe424, 0xe000, 0x0600, 0xe094, 0xa202, 0x3d02, 0x2806,
+ 0xae02, 0x3d13, 0x2808, 0xa002, 0x3c08, 0x1819, 0xf4d8, 0xe42e,
+ 0xe161, 0x0600, 0xa200, 0xc70f, 0x3d11, 0x283f, 0xb674, 0x3c05,
+ 0xa200, 0x3c09, 0xc420, 0xa2fe, 0x3c07, 0xa221, 0xe161, 0x0202,
+ 0xe162, 0x0600, 0x8800, 0x0022, 0xe184, 0x1ee8, 0x2912, 0xf118,
+ 0x2909, 0x1805, 0xf0d4, 0x2909, 0xf0a2, 0x2901, 0xe046, 0xf072,
+ 0xe042, 0xe049, 0xe084, 0xe002, 0x0601, 0x3c07, 0x8111, 0x8111,
+ 0x8131, 0x2807, 0xe424, 0xe000, 0x0600, 0xe094, 0xa202, 0x3d02,
+ 0x2807, 0xae02, 0x3d13, 0x2809, 0xa002, 0x3c09, 0x1819, 0xf548,
+ 0xe42e, 0xe161, 0x0600, 0xa200, 0xc70f, 0x3d11, 0x283f, 0xb674,
+ 0x3c05, 0xa200, 0x3c0a, 0xc420, 0xe163, 0x0390, 0xe164, 0x03b0,
+ 0xa2fe, 0x3c06, 0x3c07, 0xe161, 0x0202, 0xe162, 0x0600, 0xe165,
+ 0x0240, 0x8800, 0x0022, 0xe184, 0x1f44, 0x2912, 0xf2c8, 0x2909,
+ 0x1805, 0xf284, 0x2909, 0xf256, 0x2115, 0x4d0d, 0x1072, 0x1c73,
+ 0xf110, 0x2806, 0xf064, 0x2115, 0x4d0d, 0x100c, 0x1c0d, 0xf196,
+ 0x2115, 0x4d0d, 0x340c, 0x3c0d, 0xe084, 0xe002, 0x0601, 0x3c06,
+ 0xf10e, 0x2807, 0xf064, 0x2115, 0x4d0d, 0x100e, 0x1c0f, 0xf092,
+ 0x2115, 0x4d0d, 0x340e, 0x3c0f, 0xe084, 0xe002, 0x0601, 0x3c07,
+ 0x8111, 0x8111, 0x8131, 0x8115, 0x8115, 0x2806, 0xf094, 0xe000,
+ 0x0600, 0xe094, 0xa202, 0x3d02, 0x2806, 0xae02, 0x3d13, 0x2807,
+ 0xf094, 0xe000, 0x0600, 0xe094, 0xa202, 0x3d02, 0x2807, 0xae02,
+ 0x3d14, 0x280a, 0xa002, 0x3c0a, 0x1819, 0xe408, 0x1f08, 0xe086,
+ 0xe002, 0x0390, 0x3c0c, 0xe088, 0xe002, 0x03b0, 0x3c0d, 0xf09a,
+ 0xa102, 0xcc44, 0xe164, 0x03b0, 0xe184, 0x1f6f, 0x2914, 0x3d13,
+ 0x280c, 0xf09a, 0xa102, 0xcc44, 0xe163, 0x0390, 0xe184, 0x1f79,
+ 0x2913, 0x3d14, 0x280c, 0x080d, 0x3c08, 0xe42e, 0x28d6, 0xf07a,
+ 0x2819, 0xae02, 0x0842, 0x3d03, 0xa202, 0xe42e, 0xa200, 0xe42e,
+ 0xe42a, 0xa102, 0x3c0c, 0xe086, 0xe098, 0xe161, 0x0600, 0x880c,
+ 0x0022, 0xe184, 0x1fa3, 0x2903, 0xae02, 0xe000, 0x0202, 0xe094,
+ 0x2902, 0xa802, 0xf03a, 0x2903, 0x3d11, 0x2902, 0xa804, 0xf04a,
+ 0x2903, 0xa002, 0x3d11, 0x8113, 0xe082, 0xe002, 0x0600, 0xe42a,
+ 0xa102, 0x3c0c, 0x3c0d, 0x2842, 0x3c0e, 0xe161, 0x0600, 0x880c,
+ 0x0022, 0xe184, 0x1fb8, 0x2901, 0xf044, 0xa802, 0x180e, 0xf06a,
+ 0x8111, 0x280e, 0xe016, 0x3c0e, 0xf71e, 0x2901, 0x3d14, 0xa2fe,
+ 0x3d01, 0x280e, 0xe016, 0x3c0e, 0x280d, 0xa102, 0x3c0d, 0xf662,
+ 0x280c, 0xa002, 0xe42e, 0x286d, 0xa102, 0xe426, 0xcc44, 0xe163,
+ 0x0390, 0xe164, 0x03b0, 0xe184, 0x1fd8, 0x2913, 0x1914, 0xe428,
+ 0xe190, 0xe163, 0x0391, 0xe164, 0x03b0, 0x290b, 0x3d14, 0x2903,
+ 0x3d14, 0xe42e, 0x2819, 0xe426, 0xa102, 0xcc44, 0xc420, 0xe161,
+ 0x0202, 0xe184, 0x1fed, 0x2901, 0xe428, 0x8131, 0xe42e, 0xe161,
+ 0x0518, 0xa200, 0xc71f, 0x3d11, 0xe42e, 0xe000, 0x0518, 0xe09e,
+ 0x2907, 0xa80c, 0x3d07, 0xe42e, 0xe008, 0x7fff, 0xe000, 0x0518,
+ 0xe09e, 0x2907, 0xa80a, 0x3d07, 0xe42e, 0x3c81, 0xe000, 0x0518,
+ 0xe09e, 0x2907, 0xa806, 0x3d07, 0x2881, 0xa002, 0x3c81, 0x187f,
+ 0xe428, 0xa200, 0x3c81, 0xe42e, 0xe161, 0x0518, 0x287f, 0xa102,
+ 0xcc44, 0xa201, 0xe184, 0x201f, 0x2911, 0xa804, 0xe01a, 0xe041,
+ 0x1a07, 0xa202, 0xb602, 0xe42e, 0xe161, 0x0518, 0x287f, 0xa102,
+ 0xcc44, 0xa200, 0xe184, 0x202f, 0x2b11, 0xa807, 0xe01b, 0xe042,
+ 0x18eb, 0xa102, 0xe01a, 0xe42e, 0xe161, 0x0518, 0x287f, 0xa102,
+ 0xcc44, 0xe049, 0xe184, 0x203d, 0x2911, 0xb5f1, 0xa202, 0xb60e,
+ 0xe42e, 0x2881, 0x3c00, 0x2800, 0xe000, 0x0518, 0xe092, 0x2901,
+ 0xf10a, 0x2800, 0xa002, 0x3c00, 0x187f, 0xf038, 0xa200, 0x3c00,
+ 0x2800, 0x1881, 0xf718, 0xa200, 0x3c81, 0xa2fe, 0x3c84, 0xe42e,
+ 0x2ad8, 0xae03, 0x24a8, 0x4ca9, 0xe056, 0x34a8, 0x3ca9, 0xa20e,
+ 0x3d01, 0x2800, 0x3c84, 0xe42e, 0xe424, 0xc009, 0x3c32, 0xc000,
+ 0x2841, 0xc009, 0xa804, 0xe01a, 0x5832, 0xe014, 0x2230, 0x4e31,
+ 0xe051, 0x3630, 0x3e31, 0xc000, 0x2841, 0xc009, 0xa802, 0x5832,
+ 0xe014, 0x222e, 0x4e2f, 0xe051, 0x362e, 0x3e2f, 0xc000, 0xe42e,
+ 0xc009, 0x3c32, 0xa200, 0x2a32, 0xf0c5, 0x222e, 0x4e2f, 0x5e32,
+ 0xa803, 0xe056, 0x2230, 0x4e31, 0x5e32, 0xa803, 0xae03, 0xe056,
+ 0xc000, 0xe42e, 0xe424, 0xc009, 0x3c32, 0xa202, 0x5832, 0x2230,
+ 0x4e31, 0xe055, 0x3630, 0x3e31, 0x222e, 0x4e2f, 0xe055, 0x362e,
+ 0x3e2f, 0xc000, 0xe42e, 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe42e,
+ 0xa200, 0xe41e, 0x20a3, 0xe42e, 0xe0c1, 0x0044, 0xaf0d, 0xae03,
+ 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803,
+ 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105, 0xf039, 0xa213,
+ 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1, 0x0420,
+ 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166, 0x0640, 0xe167, 0x0500,
+ 0x287f, 0xf166, 0xa102, 0xcc44, 0xe184, 0x20e6, 0xa200, 0xe41e,
+ 0x20a3, 0xaf04, 0xe41e, 0x20ac, 0xae20, 0x2e66, 0xe056, 0x9f17,
+ 0x2057, 0x4c58, 0xae08, 0x9f17, 0xe41e, 0x20ec, 0xe190, 0xe190,
+ 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x2116, 0x4d16, 0x9f17, 0x2116,
+ 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0xe42e, 0xe0c0, 0x0044,
+ 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa860, 0xe42a, 0xe0c0,
+ 0x0061, 0xa83e, 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200,
+ 0xe41e, 0x20a8, 0xa80e, 0xaf04, 0xe41e, 0x20ac, 0xe41e, 0x20b4,
+ 0xe40b, 0x211f, 0xa81e, 0xe41e, 0x20b9, 0xae09, 0xe056, 0xae20,
+ 0xe0c1, 0x006e, 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0, 0x0060,
+ 0xa822, 0xa122, 0xf04a, 0x2057, 0x4c58, 0xf03e, 0x2058, 0x4c57,
+ 0xae08, 0x9f17, 0xe0c0, 0x0062, 0x9f17, 0xe0c0, 0x0063, 0x9f17,
+ 0xe0c0, 0x0064, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x3cec,
+ 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11, 0xe042, 0xce20, 0xd111,
+ 0x0640, 0xd112, 0x00c0, 0x88ec, 0x0113, 0xca29, 0xf7f9, 0xe190,
+ 0xe42e, 0xa2fe, 0x3c89, 0xa200, 0x3c88, 0xe42e, 0x2856, 0x3c89,
+ 0x2889, 0xf032, 0xa200, 0x3c88, 0xa200, 0x3c8d, 0x3c8e, 0x2857,
+ 0x3c8b, 0x2858, 0x3c8c, 0x2888, 0xe42a, 0x2889, 0xe424, 0x2889,
+ 0xe0c2, 0x0143, 0x288a, 0xe0c2, 0x0144, 0xa200, 0xe0c2, 0x017f,
+ 0xe0c2, 0x0149, 0xe41e, 0x20a3, 0xe0c2, 0x017f, 0x288b, 0xa102,
+ 0xae20, 0x4c8c, 0xa102, 0xe0c2, 0x0142, 0xa200, 0xae20, 0x2a87,
+ 0xe042, 0xe0c2, 0x014e, 0xe42e, 0x2889, 0x2a8e, 0x1a8c, 0xe423,
+ 0x288d, 0xae0e, 0x4c8e, 0xa203, 0xb615, 0x3e8f, 0x2a8f, 0xae03,
+ 0xa903, 0xae1d, 0xe056, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d,
+ 0xa202, 0xe0c2, 0x014a, 0x2a8d, 0xa003, 0x3e8d, 0x1a8b, 0xf065,
+ 0x2a8e, 0xa003, 0x3e8e, 0xa201, 0x3e8d, 0xe42e, 0x2888, 0xf15a,
+ 0x288e, 0x188c, 0xf042, 0xe41e, 0x2184, 0xf7be, 0xe0c0, 0x014b,
+ 0xf7e8, 0xa204, 0xae1c, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a,
+ 0xe190, 0xe0c0, 0x014b, 0xf7e8, 0x2885, 0x3c89, 0xe42e, 0xe41e,
+ 0x22a6, 0xe41e, 0x2344, 0xe41e, 0x0f66, 0xe41e, 0x2250, 0xe41e,
+ 0x258e, 0xa200, 0x3c59, 0x3c52, 0xe41e, 0x2445, 0x2c59, 0x1c44,
+ 0xe402, 0x224b, 0xe41e, 0x0b81, 0xf19a, 0xa102, 0xf1ca, 0xa108,
+ 0xf154, 0xf19a, 0xa10a, 0xe40a, 0x223a, 0xa102, 0xe40a, 0x223a,
+ 0xa102, 0xe40a, 0x222c, 0xa104, 0xe40a, 0x21ed, 0xa102, 0xa10a,
+ 0xe40a, 0x21f2, 0xa002, 0xe404, 0x223f, 0xe41e, 0x094c, 0xf63e,
+ 0x2c44, 0x3c52, 0xe41e, 0x0985, 0x284e, 0xe01a, 0x2a92, 0xe01b,
+ 0xe05a, 0xe408, 0x223f, 0x284f, 0x1893, 0xe408, 0x223f, 0xe41e,
+ 0x0bd4, 0xe41e, 0x23c4, 0xf4fa, 0x2894, 0xf07a, 0x2c44, 0x3c0d,
+ 0xe41e, 0x248c, 0xe40e, 0x2247, 0xe41e, 0x0bf1, 0x284e, 0x3c92,
+ 0x284f, 0x3c93, 0xe41e, 0x0d77, 0xe40a, 0x21d2, 0xa201, 0x3e94,
+ 0x2c52, 0x3c0d, 0x1c59, 0xe404, 0x21d2, 0xe410, 0x248c, 0x2c52,
+ 0x1c44, 0xe402, 0x224b, 0xe41e, 0x05c8, 0xf05a, 0xe41e, 0x05ed,
+ 0xe40e, 0x224b, 0xe40e, 0x21cc, 0xe41e, 0x0985, 0xba0e, 0xe002,
+ 0x00ff, 0xf058, 0xba4e, 0xe41e, 0x0ba5, 0xf798, 0xe41e, 0x0ce4,
+ 0xe40e, 0x21d2, 0xe41e, 0x08b8, 0xf03a, 0xe41e, 0x01db, 0x2c59,
+ 0x1c44, 0xe402, 0x2247, 0x2c44, 0x3c0d, 0xe41e, 0x248c, 0x2892,
+ 0x3c4e, 0x2893, 0x3c4f, 0xe41e, 0x2652, 0xcbcc, 0xf7f8, 0xe42e,
+ 0x2822, 0xae02, 0x4c37, 0xae0a, 0x2a36, 0xa83f, 0xe056, 0xae0a,
+ 0x2a32, 0xa83f, 0xe056, 0xae02, 0x4c1d, 0xae02, 0x4c2d, 0xae02,
+ 0x4c43, 0xcf80, 0x284e, 0xe01a, 0xae02, 0x4c1b, 0xae02, 0x4c1d,
+ 0xae02, 0x4c43, 0xcfc2, 0x2857, 0xa102, 0xae02, 0x4c34, 0xae02,
+ 0x4c3f, 0xae02, 0x4c42, 0xae02, 0x4c43, 0xcf00, 0xd1d3, 0x000b,
+ 0xd185, 0x0001, 0x246e, 0x4c6f, 0xcfc6, 0xd1e5, 0x0001, 0xc420,
+ 0xe161, 0x0201, 0xa200, 0xd022, 0x000f, 0xe184, 0x2289, 0x2b31,
+ 0xae02, 0xb42a, 0xcfe8, 0x2072, 0x4c73, 0xcfea, 0x2074, 0x4c75,
+ 0xcfec, 0x2076, 0x4c77, 0xcfee, 0xe004, 0x0060, 0xcbcf, 0xa803,
+ 0xf03b, 0xe004, 0x0070, 0xce30, 0xe161, 0x0260, 0xd022, 0x001f,
+ 0xe184, 0x22a4, 0x2111, 0x4d11, 0xce32, 0xe42e, 0xa200, 0xe161,
+ 0x07f6, 0xc707, 0x3d11, 0x2867, 0x4c68, 0xf028, 0xe42e, 0xe161,
+ 0x07f6, 0xa20e, 0x3c00, 0x2867, 0xf39a, 0x2869, 0x5c00, 0xa802,
+ 0xf108, 0x2a00, 0xa10f, 0xf049, 0xa202, 0x3d11, 0xf17e, 0x2a00,
+ 0xa109, 0xf049, 0xa204, 0x3d11, 0xf11e, 0xa20a, 0x3d11, 0xf0ee,
+ 0x286b, 0x5c00, 0xa802, 0xf08a, 0x2800, 0xa10a, 0xa205, 0xf024,
+ 0xa203, 0x3f11, 0xf03e, 0xa206, 0x3d11, 0x2800, 0xa102, 0x3c00,
+ 0xa102, 0xf5c8, 0x2869, 0xe00c, 0x00ff, 0x2a6b, 0xe056, 0x5c00,
+ 0xa802, 0xf06a, 0xa203, 0x2800, 0xb655, 0x3f11, 0xf03e, 0xa206,
+ 0x3d11, 0x2800, 0xa102, 0x3c00, 0xf6ea, 0xe161, 0x07f6, 0xa20e,
+ 0x3c00, 0x2868, 0xe42a, 0x286a, 0x5c00, 0xa802, 0xf188, 0x2800,
+ 0xa10e, 0xf088, 0x2a67, 0xf03b, 0x8111, 0xf1e9, 0xa202, 0x3d11,
+ 0xf1be, 0x2a00, 0xa109, 0xf089, 0x2a67, 0xf03b, 0x8111, 0xf149,
+ 0xa204, 0x3d11, 0xf11e, 0xa20a, 0x3d11, 0xf0ee, 0x286c, 0x5c00,
+ 0xa802, 0xf08a, 0x2800, 0xa10a, 0xa205, 0xf024, 0xa203, 0x3f11,
+ 0xf03e, 0xa208, 0x3d11, 0x2800, 0xa102, 0x3c00, 0xa102, 0xf548,
+ 0x286a, 0x5c00, 0x4c67, 0xa802, 0xf068, 0xa203, 0x2800, 0xb655,
+ 0x3f11, 0xf16e, 0x286c, 0xe00c, 0x00ff, 0x2a6a, 0xe052, 0x5c00,
+ 0xa802, 0xf0c8, 0x286a, 0x5c00, 0xa802, 0xf06a, 0xa203, 0x2800,
+ 0xb655, 0x3f11, 0xf05e, 0x8111, 0xf03e, 0xa208, 0x3d11, 0x2800,
+ 0xa102, 0x3c00, 0xf5ea, 0xe42e, 0xa202, 0xe0c2, 0x013c, 0xa200,
+ 0x3c00, 0x3c01, 0xe161, 0x07f6, 0xe162, 0x04c8, 0x2911, 0xa104,
+ 0xf066, 0xa106, 0xe40a, 0x238e, 0xa004, 0xf112, 0xa004, 0xae06,
+ 0x3c04, 0x2800, 0xa10c, 0xf064, 0x2804, 0xae04, 0xe000, 0x0018,
+ 0x3c04, 0xe004, 0x0450, 0x0804, 0x3c04, 0xf29e, 0xa201, 0x3e02,
+ 0xa211, 0x3e03, 0xf04a, 0xe005, 0x00e0, 0x3e02, 0x2800, 0x2a00,
+ 0xae09, 0xa10c, 0xf05a, 0xa102, 0xf058, 0xe005, 0x00a0, 0xa240,
+ 0x3c03, 0x0a02, 0x3e02, 0xe0c0, 0x0041, 0xe005, 0x0034, 0xae11,
+ 0xe042, 0x0802, 0xce20, 0xd111, 0x0600, 0x2803, 0xce24, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe004, 0x0600, 0x3c04, 0x2800, 0xa10c,
+ 0xa20f, 0xf024, 0xa23f, 0xcc45, 0x2804, 0xe096, 0xe184, 0x23a8,
+ 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b03, 0xaf11, 0xe0c3, 0x013f,
+ 0x2912, 0x0801, 0xe0c2, 0x013e, 0x2b13, 0xe009, 0x00ff, 0xe0c3,
+ 0x013f, 0xe162, 0x04c8, 0x2a01, 0xe001, 0x0010, 0x3e01, 0x2800,
+ 0xa002, 0x3c00, 0xa10c, 0xe404, 0x234e, 0xe162, 0x04d8, 0xe40a,
+ 0x234e, 0xe001, 0x0030, 0x3e01, 0xa104, 0xe408, 0x234e, 0xe16a,
+ 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa200, 0x3c94, 0xe41e, 0x0c9b,
+ 0xe40d, 0x2442, 0x2a43, 0xe419, 0x0e84, 0x1c44, 0xe402, 0x2442,
+ 0xbc12, 0xe40d, 0x2442, 0xa10a, 0xb4a8, 0xa104, 0xe400, 0x2442,
+ 0xbdfe, 0xe40d, 0x2442, 0x1829, 0xf03a, 0xa202, 0x3c94, 0x7413,
+ 0x1839, 0xf03a, 0xa202, 0x3c94, 0x281b, 0xf0d8, 0xba40, 0x183f,
+ 0xf03a, 0xa202, 0x3c94, 0x283f, 0xf06a, 0xba40, 0x1842, 0xf03a,
+ 0xa202, 0x3c94, 0x284f, 0xf09a, 0xe41e, 0x0c9b, 0xe40d, 0x2442,
+ 0x1c45, 0xf03a, 0xa202, 0x3c94, 0x2816, 0xa102, 0xf034, 0xf1da,
+ 0xf3ae, 0x7417, 0xe160, 0x0903, 0x1d00, 0xf03a, 0xa202, 0x3c94,
+ 0x283f, 0xe016, 0x442a, 0xf2fa, 0xe41e, 0x0cb5, 0xf34d, 0xe161,
+ 0x0904, 0xe162, 0x0905, 0x1101, 0x1d02, 0xf03a, 0xa202, 0x3c94,
+ 0xf22e, 0xe418, 0x0cb5, 0xf1fe, 0x2818, 0xf1d8, 0xe41e, 0x0cb5,
+ 0xf22d, 0xe163, 0x0903, 0xe164, 0x0904, 0x1103, 0x1d04, 0xf03a,
+ 0xa202, 0x3c94, 0x283f, 0xe016, 0x442a, 0xf0da, 0xe41e, 0x0cb5,
+ 0xf12d, 0xe165, 0x0905, 0xe166, 0x0906, 0x1105, 0x1d06, 0xf03a,
+ 0xa202, 0x3c94, 0xe41e, 0x0c1d, 0xae06, 0xc873, 0xe046, 0xf034,
+ 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa200, 0xe41e, 0x0c2a,
+ 0xe41e, 0x0c26, 0xf0c8, 0xa202, 0xe41e, 0x08da, 0xe41e, 0x0c2a,
+ 0xe41e, 0x08e2, 0xd036, 0x00ff, 0xd037, 0x0080, 0xe16a, 0x2c52,
+ 0x3c59, 0xa200, 0x3c0c, 0xe41e, 0x24a3, 0x282d, 0xf138, 0x2c59,
+ 0x1c44, 0xf0d2, 0xe41e, 0x24ea, 0xf1ed, 0x2843, 0xe418, 0x24ea,
+ 0xf1ad, 0xcb86, 0xa102, 0xf740, 0xc894, 0xf728, 0xe41e, 0x0ce4,
+ 0xe42e, 0xe41e, 0x24d6, 0x2c59, 0x1c44, 0xf0a2, 0xe41e, 0x24ea,
+ 0xf0ad, 0x2843, 0xe418, 0x24ea, 0xf06d, 0xbb60, 0xf75a, 0xe41e,
+ 0x0ce6, 0xe42e, 0xe16a, 0xe41e, 0x0b81, 0xa116, 0xe428, 0xe41e,
+ 0x08b8, 0xe418, 0x01db, 0xe42e, 0x284f, 0xe016, 0x3c38, 0xa202,
+ 0x3c0c, 0xe41e, 0x24a3, 0xa200, 0x3c0c, 0x2c59, 0x180d, 0xf0b2,
+ 0xe41e, 0x252a, 0x2843, 0xe418, 0x252a, 0x2c53, 0xa002, 0x0843,
+ 0x3c53, 0xf74e, 0xe42e, 0x2832, 0x1836, 0xe01a, 0xae04, 0x4c4b,
+ 0xae0a, 0x4c4c, 0xae0a, 0x4c4d, 0xcf30, 0x2849, 0xae0a, 0x4c48,
+ 0xae04, 0x4c38, 0xcf82, 0xd1c3, 0x0000, 0x284a, 0xcf96, 0x2849,
+ 0xae08, 0x4c48, 0xae02, 0x4c7a, 0xae02, 0x4c79, 0xae02, 0x4c78,
+ 0xae02, 0x4c46, 0xae04, 0x4c38, 0xcfc4, 0x885e, 0x01fa, 0x2470,
+ 0x4c71, 0xcfc8, 0x280c, 0xf03a, 0x2838, 0xf03a, 0xd188, 0x0001,
+ 0x2838, 0xa104, 0xe428, 0xd1e5, 0x0002, 0xe42e, 0xc868, 0xa80e,
+ 0x3c9e, 0x749e, 0xe004, 0x01fe, 0xcc86, 0xba50, 0xcc88, 0x2838,
+ 0xe01a, 0x0847, 0xae0c, 0x4c4a, 0xcc82, 0xd040, 0x0003, 0xc884,
+ 0xf7f8, 0xe42e, 0xd185, 0x0002, 0xd1d0, 0x003f, 0xe190, 0xe180,
+ 0xe41e, 0x0c2e, 0xe418, 0x0c8e, 0xe181, 0xcba0, 0xa810, 0xcba3,
+ 0xe409, 0x2520, 0xf7b8, 0xe41e, 0x260a, 0xcbe0, 0xf7f8, 0x285a,
+ 0xe41a, 0x2631, 0xcba0, 0xcba3, 0xe409, 0x2520, 0xf7c8, 0xd186,
+ 0x0001, 0xd185, 0x0004, 0xe41e, 0x2648, 0xcb06, 0x3c59, 0xcb8a,
+ 0xaf04, 0x442d, 0xf08a, 0xe004, 0x01fe, 0xcc86, 0xba50, 0xcc88,
+ 0xd040, 0x0001, 0xe41e, 0x0c1d, 0xae06, 0xc873, 0xe046, 0xe422,
+ 0xd1d0, 0x0000, 0xd1d1, 0x0000, 0xcb1c, 0xf7f8, 0xcbe0, 0xf7f8,
+ 0xe16b, 0xe42e, 0xd185, 0x0002, 0xd186, 0x0000, 0xd1c2, 0x0001,
+ 0xd1c5, 0x0000, 0xd1c4, 0x0000, 0xd1d0, 0x000e, 0xcba0, 0xf7f8,
+ 0x2054, 0x4c55, 0xf098, 0xd1c2, 0x0000, 0xd1c5, 0x0003, 0xd1c4,
+ 0x0003, 0xd1c8, 0x0000, 0xd1d0, 0x0020, 0xe41e, 0x260a, 0xa200,
+ 0xe0c2, 0x012a, 0xcbe0, 0xf7f8, 0x285a, 0xe41a, 0x2631, 0xcba0,
+ 0xf7f8, 0xd186, 0x0001, 0xd185, 0x0004, 0xe41e, 0x2648, 0xcb06,
+ 0x3c59, 0xe42e, 0xa200, 0xe0c2, 0x0100, 0xe0c2, 0x013d, 0xe0c2,
+ 0x0128, 0xcc8e, 0x2a88, 0xb692, 0xae08, 0xa91c, 0xe0c2, 0x017c,
+ 0xa218, 0xe0c2, 0x017d, 0xa200, 0xe41e, 0x20a3, 0x2a22, 0xe017,
+ 0xae09, 0xe056, 0xa203, 0xae11, 0xe056, 0xe0c2, 0x0213, 0xa200,
+ 0xe0c2, 0x0215, 0xa202, 0xe0c2, 0x0210, 0x2057, 0x4c58, 0xae08,
+ 0xe0c2, 0x0101, 0xe0c2, 0x0205, 0xa200, 0xe41e, 0x20a3, 0x2a22,
+ 0xe017, 0xae07, 0xe056, 0xe0c2, 0x0102, 0xe42e, 0xe0c0, 0x0050,
+ 0xe049, 0xe008, 0x007f, 0x3c08, 0xaf11, 0xe009, 0x007f, 0x3e09,
+ 0x4608, 0x3e08, 0xa200, 0x2a08, 0xa803, 0xf03b, 0xe00a, 0x0002,
+ 0x2a08, 0xa805, 0xf02b, 0xa912, 0x2a08, 0xa809, 0xf02b, 0xa940,
+ 0x2a08, 0xa811, 0xf02b, 0xa980, 0xe0c2, 0x040c, 0xe0c1, 0x0046,
+ 0xe004, 0x0002, 0xae10, 0xe042, 0x2a09, 0xa803, 0xf05b, 0xe161,
+ 0x05cb, 0x2111, 0x4d11, 0xcf0e, 0xe0c1, 0x0046, 0xe004, 0x004a,
+ 0xae10, 0xe042, 0x2a09, 0xa805, 0xf05b, 0xe161, 0x05cd, 0x2111,
+ 0x4d11, 0xe0c2, 0x0103, 0xe0c1, 0x0046, 0xe004, 0x007a, 0xae10,
+ 0xe042, 0x2a09, 0xa809, 0xf05b, 0xe161, 0x05cf, 0x2111, 0x4d11,
+ 0xe0c2, 0x0211, 0xe0c1, 0x0046, 0xe004, 0x007a, 0xe000, 0x0040,
+ 0xae10, 0xe042, 0x2a09, 0xa811, 0xf05b, 0xe161, 0x05d1, 0x2111,
+ 0x4d11, 0xe0c2, 0x0212, 0x2843, 0xae02, 0x4c3f, 0xae02, 0x4c42,
+ 0xe0c2, 0x0104, 0xe0c2, 0x0204, 0xa200, 0xe0c2, 0x0208, 0xe41e,
+ 0x2656, 0xa20e, 0xe0c2, 0x0312, 0xe0c0, 0x0414, 0xe418, 0x018c,
+ 0xe0c0, 0x0414, 0xe41a, 0x267f, 0xe41e, 0x0274, 0xa202, 0xe0c2,
+ 0x0106, 0xe42e, 0xcb02, 0xaf02, 0xe0c2, 0x0113, 0xe0c2, 0x030d,
+ 0xcb15, 0xae03, 0xe056, 0xe0c2, 0x022b, 0xcb94, 0xe0c2, 0x0115,
+ 0xcba4, 0xe0c2, 0x012a, 0xcb8a, 0xe0c2, 0x0114, 0xa802, 0x3c5a,
+ 0xe42a, 0xcb14, 0xae0a, 0xcb19, 0xe056, 0xe0c2, 0x0120, 0xcb8c,
+ 0xe0c2, 0x0121, 0xcb8e, 0xe0c2, 0x0122, 0xcb90, 0xe0c2, 0x0123,
+ 0xe42e, 0xcbd0, 0xe0c2, 0x030c, 0xcbd2, 0xe0c2, 0x0309, 0xcbd8,
+ 0xe0c2, 0x030a, 0xcbda, 0xe0c2, 0x030b, 0x285e, 0xe0c2, 0x0320,
+ 0xe42a, 0x285f, 0xe0c2, 0x0321, 0xcbf6, 0xe0c2, 0x0322, 0xe42e,
+ 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0x2888, 0xe418,
+ 0x2184, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xa202, 0xe0c2,
+ 0x0302, 0xd022, 0x000f, 0xe163, 0x0380, 0x2883, 0xb608, 0xe184,
+ 0x2664, 0x9f03, 0x8113, 0x8113, 0x8113, 0x2819, 0xf15a, 0x2ad6,
+ 0xb5f6, 0xcc44, 0xe160, 0x0004, 0xe161, 0x0203, 0xe163, 0x0380,
+ 0xe184, 0x2679, 0x2931, 0xf022, 0x2883, 0xb608, 0x9f03, 0x8113,
+ 0x8113, 0x8113, 0xe190, 0xa200, 0xe0c2, 0x0302, 0xe42e, 0xe167,
+ 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17, 0xe009, 0x00ff,
+ 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101, 0xe0c3, 0x015d,
+ 0xe162, 0x02b0, 0x2912, 0xaf02, 0x3c0a, 0x2912, 0xaf02, 0x3c0b,
+ 0x2838, 0xa104, 0xf068, 0xe162, 0x02d0, 0x2912, 0xaf02, 0x3c0b,
+ 0x280a, 0x180b, 0xf0d8, 0xe162, 0x02b0, 0xd022, 0x001f, 0xe184,
+ 0x26ae, 0x2912, 0xaf02, 0x3c0b, 0x180a, 0xf028, 0xe190, 0x280b,
+ 0xae02, 0xe41e, 0x0faa, 0xe049, 0xae11, 0x280a, 0xae02, 0xe41e,
+ 0x0faa, 0xe055, 0xae21, 0xe167, 0x01a2, 0x2907, 0xaf10, 0xe008,
+ 0x001f, 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0,
+ 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8,
+ 0xe42e, 0xf044, 0xe41e, 0x2080, 0xe42e, 0xa200, 0xe42e, 0xe165,
+ 0x07e8, 0x284f, 0x3d15, 0x284e, 0x3d15, 0x2838, 0x3d15, 0x287e,
+ 0x3d15, 0xe42e, 0xe165, 0x0620, 0xa200, 0xe188, 0x001f, 0x3d15,
+ 0xe41e, 0x277b, 0xd022, 0x0007, 0xe184, 0x26f0, 0xe41e, 0x275e,
+ 0xe190, 0xe41e, 0x277b, 0xe165, 0x0620, 0xa2fe, 0x3d15, 0xa206,
+ 0x3d15, 0xe41e, 0x275e, 0xe42e, 0x3c03, 0x18d8, 0xe42a, 0x2803,
+ 0xf03a, 0x2829, 0x3cd9, 0x2803, 0x3cd8, 0xe41e, 0x2732, 0xe164,
+ 0x0200, 0xe004, 0x00b0, 0xe41e, 0x2742, 0xe164, 0x0080, 0xe41e,
+ 0x274a, 0xe164, 0x0082, 0xe41e, 0x274a, 0xe164, 0x0012, 0xe41e,
+ 0x274a, 0xe164, 0x003a, 0xe004, 0x0005, 0xe41e, 0x2742, 0xe164,
+ 0x0900, 0xe004, 0x000c, 0xe41e, 0x2742, 0xe41e, 0x273d, 0xa2fe,
+ 0x3c29, 0x3c10, 0x2803, 0xe428, 0x3cd6, 0x28d9, 0x3c29, 0xe41e,
+ 0x1b3f, 0xe42e, 0xe41e, 0x277b, 0xa200, 0x3c02, 0xe41e, 0x276f,
+ 0xe165, 0x0620, 0xe166, 0x0600, 0xe42e, 0x2802, 0xe42a, 0xe41e,
+ 0x275e, 0xe42e, 0xa102, 0xcc44, 0xe184, 0x2748, 0xe41e, 0x274a,
+ 0xe190, 0xe42e, 0x2904, 0x3d15, 0x2916, 0x3d14, 0x2802, 0xa002,
+ 0x3c02, 0xa140, 0xe424, 0xe41e, 0x275e, 0xe41e, 0x276f, 0xe165,
+ 0x0620, 0xe166, 0x0600, 0xa200, 0x3c02, 0xe42e, 0x2400, 0x4c01,
+ 0xce20, 0xd111, 0x0620, 0xd112, 0x0020, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0x2400, 0x4c01, 0xa080, 0x3400, 0x3c01, 0xe42e, 0x2400,
+ 0x4c01, 0xce20, 0xd111, 0x0600, 0xd112, 0x0020, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x0037, 0xae11,
+ 0xe042, 0x3400, 0x3c01, 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1ceb, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1855, 0xf074, 0xe009, 0x00ff, 0x1a56, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x0691, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x0368, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x036c, 0xe40e, 0x00a4,
+ 0xe41e, 0x0379, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x03c6,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x037b, 0xe40e, 0x00a4,
+ 0xe41e, 0x0398, 0xe40e, 0x00a4, 0xe41e, 0x03e2, 0xe41e, 0x042c,
+ 0xe41e, 0x086b, 0xe41e, 0x14ec, 0xe41e, 0x0bd4, 0xe41e, 0x03ff,
+ 0xe42e, 0xa202, 0xe42e, 0xe41e, 0x0523, 0xe41e, 0x0174, 0xca28,
+ 0xf7f8, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0800, 0xd112, 0x00c4,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0x3c98, 0xe0c0,
+ 0x0061, 0x3cb4, 0xe41e, 0x0c09, 0xa200, 0xe0c2, 0x0054, 0xe42e,
+ 0xe41e, 0x03b0, 0xe41e, 0x0c09, 0xa200, 0x3c91, 0x3c9e, 0x3c9f,
+ 0x3ca0, 0x3ca1, 0xe161, 0x08c5, 0xe163, 0x08fc, 0x2513, 0x4d0b,
+ 0xe0c1, 0x0054, 0xe052, 0xe0c2, 0x0054, 0x3511, 0x3d01, 0xe42e,
+ 0xe162, 0x08d8, 0x2b02, 0xa811, 0xe163, 0x08fc, 0xa2fe, 0x3513,
+ 0x3d0b, 0xf0cb, 0xe164, 0x08ce, 0xa203, 0x5b04, 0xe165, 0x08c5,
+ 0x2115, 0x4d05, 0xe056, 0x3513, 0x3d0b, 0xe42e, 0xe41e, 0x0441,
+ 0xd14b, 0x0200, 0xe41e, 0x0608, 0xe41e, 0x08ac, 0x28db, 0xe408,
+ 0x03dd, 0xe41e, 0x06a9, 0x28e0, 0xa104, 0xe41a, 0x0bad, 0xe41e,
+ 0x07a0, 0xf048, 0x28e0, 0xa104, 0xf70a, 0xe41e, 0x049a, 0xe41e,
+ 0x07f8, 0xe42e, 0xe41e, 0x023a, 0xe41e, 0x0148, 0xd130, 0x0001,
+ 0xd03a, 0x0001, 0xd008, 0x0000, 0xd039, 0x0000, 0xd049, 0x0000,
+ 0xd047, 0x0000, 0xe0c0, 0x0062, 0xaf02, 0x3089, 0xaf06, 0x3096,
+ 0xaf02, 0x308a, 0xa2fe, 0x3c22, 0xe0c2, 0x0079, 0xe42e, 0xd049,
+ 0x0000, 0xd047, 0x0000, 0x2016, 0x4c17, 0xe0c2, 0x0071, 0x2822,
+ 0xe0c2, 0x007a, 0x2821, 0xe0c2, 0x0079, 0x2897, 0xe0c2, 0x0073,
+ 0x2899, 0xe0c2, 0x0074, 0x281c, 0xae02, 0x4c18, 0xae02, 0x4c19,
+ 0xae10, 0x4c11, 0xae10, 0x4c10, 0xe0c2, 0x007b, 0x281f, 0xae10,
+ 0x4c20, 0xe0c2, 0x0072, 0x2893, 0xe016, 0xe0c2, 0x0070, 0x2893,
+ 0x58f0, 0xe0c2, 0x0078, 0xe42e, 0xe0c0, 0x0040, 0xa23d, 0xae17,
+ 0xe042, 0xe005, 0x1f00, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x06f0, 0xd112, 0x0100, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0xe42e, 0xa200, 0x3cdc, 0xcc4a, 0xcc4c, 0x3cdb, 0xd130, 0x0001,
+ 0xd03a, 0x0001, 0xd008, 0x0000, 0xe41e, 0x1a2c, 0xe41e, 0x1a64,
+ 0x283d, 0xe41a, 0x025f, 0xe0c0, 0x0050, 0xe049, 0xe008, 0x007f,
+ 0x3cb7, 0xaf11, 0xe009, 0x007f, 0x3eb8, 0x46b7, 0x3eb7, 0xa200,
+ 0x2ab7, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2ab7, 0xa805, 0xf03b,
+ 0xe00a, 0x0009, 0x2ab7, 0xa809, 0xf03b, 0xe00a, 0x0020, 0x2ab7,
+ 0xa811, 0xf03b, 0xe00a, 0x0040, 0x2ab7, 0xa821, 0xf03b, 0xe00a,
+ 0x0010, 0x2ab7, 0xa841, 0xf03b, 0xe00a, 0x0002, 0xe0c2, 0x040c,
+ 0xa200, 0x3ca4, 0x3ca5, 0x3ca6, 0xe0c0, 0x0060, 0xe049, 0xa81f,
+ 0x3ea6, 0xaf08, 0x30a5, 0xaf02, 0xa202, 0x3cde, 0xe0c0, 0x0065,
+ 0xaf04, 0xa80e, 0x3cdf, 0xa200, 0x3ce0, 0xe41e, 0x050f, 0xe41e,
+ 0x192e, 0xe42e, 0xd049, 0x0000, 0xd047, 0x0000, 0x20a0, 0x4ca1,
+ 0xe0c2, 0x0070, 0x28e0, 0xe418, 0x0bad, 0x289c, 0xe000, 0x08ca,
+ 0xe094, 0x2902, 0xe0c2, 0x0071, 0x2895, 0xe0c2, 0x0072, 0x2850,
+ 0xae02, 0x4c4f, 0xae02, 0x4c4e, 0xae04, 0x4c4a, 0xae02, 0x4c19,
+ 0xae1e, 0x4c4b, 0xae06, 0x4c4c, 0xe0c2, 0x0073, 0x2053, 0x4c54,
+ 0xe0c2, 0x006f, 0x281f, 0xae10, 0x4c20, 0xe0c2, 0x007c, 0x2822,
+ 0xe0c2, 0x007e, 0x2821, 0xe0c2, 0x007d, 0xa200, 0x2a9c, 0xae05,
+ 0xe001, 0x08e4, 0xe095, 0x2b02, 0xaf07, 0xa80f, 0xe056, 0x2ae0,
+ 0xb612, 0xe0c2, 0x0074, 0xa200, 0x28e0, 0xae04, 0xe0c2, 0x0075,
+ 0x2894, 0xe016, 0x2adb, 0xae29, 0xe056, 0x2adb, 0xae21, 0xe056,
+ 0xe0c2, 0x0076, 0xe162, 0x08c7, 0x2902, 0xb7e8, 0x2a4b, 0xa109,
+ 0xb7d6, 0x2a94, 0xb7d2, 0xf0c4, 0xe162, 0x08d8, 0xe164, 0x08cf,
+ 0x2b02, 0xaf05, 0xa807, 0xf04b, 0x2b04, 0xf025, 0x2904, 0x2ae0,
+ 0xb7d2, 0xe0c2, 0x0077, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2,
+ 0x0053, 0xe41e, 0x0519, 0xe41e, 0x18e6, 0xe42e, 0xe42e, 0xe0c1,
+ 0x0054, 0xe165, 0x08c5, 0x2115, 0x4d0d, 0xe052, 0x3515, 0x3d0d,
+ 0xe42e, 0xe165, 0x08c3, 0x2115, 0x4d15, 0x2315, 0x4f15, 0xe056,
+ 0xe0c2, 0x0054, 0xe42e, 0xe166, 0x0064, 0xe167, 0x08f0, 0xd022,
+ 0x0003, 0xe184, 0x052d, 0x9e16, 0x3517, 0x3d17, 0xe167, 0x07dc,
+ 0xd022, 0x0001, 0xe184, 0x0536, 0x9e16, 0x3517, 0x3d17, 0xe42e,
+ 0xd148, 0x0040, 0xd144, 0x0000, 0xd145, 0x0000, 0xd168, 0x0000,
+ 0xd14b, 0x0200, 0xe004, 0x0019, 0xae18, 0xcec0, 0xd14c, 0x000c,
+ 0xca9a, 0xf7f8, 0xe42e, 0xcc44, 0xe184, 0x0554, 0xca9c, 0xe418,
+ 0x0703, 0xcaa0, 0xca9b, 0xf7f9, 0xe190, 0xe42e, 0xa200, 0x3cd7,
+ 0x3cd6, 0x3cd4, 0xe41e, 0x07a0, 0xf138, 0xe41e, 0x05aa, 0xe41e,
+ 0x07a0, 0xf0e8, 0xe41e, 0x083e, 0xa206, 0xcaa3, 0xe009, 0x00ff,
+ 0xb656, 0xe41e, 0x054b, 0x3c03, 0xe41e, 0x07a0, 0xf05a, 0xa214,
+ 0x3cd3, 0xa200, 0xe42e, 0x2803, 0xaf0e, 0xf688, 0x2803, 0xa83e,
+ 0x3cd3, 0xe41e, 0x0676, 0xe41e, 0x06b2, 0xa202, 0xe42e, 0xa200,
+ 0x3cd7, 0x3cd6, 0x3cd4, 0xe41e, 0x07a0, 0xf198, 0xe41e, 0x05aa,
+ 0xe41e, 0x07a0, 0xf148, 0xe41e, 0x083e, 0xcaa2, 0xe008, 0x00ff,
+ 0x3c03, 0xe008, 0x007f, 0xa114, 0xf034, 0xa12a, 0xf056, 0xa202,
+ 0xe41e, 0x054b, 0xf6ce, 0xe41e, 0x07a0, 0xf05a, 0xa214, 0x3cd3,
+ 0xa200, 0xe42e, 0x2803, 0xaf0e, 0xf628, 0x2803, 0xa83e, 0x3cd3,
+ 0xa202, 0xe42e, 0xd158, 0x0100, 0xe004, 0x00ff, 0xe014, 0xceb8,
+ 0xd15d, 0x0000, 0xd15e, 0x0000, 0xd15f, 0x0000, 0xe004, 0x0019,
+ 0xae18, 0xe00a, 0x0620, 0xcec0, 0xd157, 0x0000, 0xd14a, 0x0000,
+ 0xd14c, 0x0003, 0xca9c, 0xe418, 0x0703, 0xca9a, 0xf7c8, 0xcaae,
+ 0xa802, 0xf73a, 0xca9c, 0xe418, 0x0703, 0xa200, 0xe42e, 0x28d4,
+ 0xe428, 0xe004, 0x0080, 0x2ac8, 0xb616, 0xce92, 0xd158, 0x0000,
+ 0xe004, 0x01ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e, 0x0000,
+ 0xd15f, 0x0000, 0xe004, 0x0019, 0xae18, 0xe00a, 0x0638, 0xcec0,
+ 0xd161, 0x0003, 0xd14a, 0x0000, 0xd14c, 0x0003, 0xca9c, 0xe418,
+ 0x0703, 0xca9a, 0xf7c8, 0xca9c, 0xf7a8, 0xca94, 0x3cd5, 0xca9e,
+ 0x3cd4, 0x28d5, 0x00d7, 0x0cd6, 0x34d7, 0x3cd6, 0xcc90, 0xcc8c,
+ 0x28d4, 0xcc92, 0xcc8e, 0xe428, 0x28c8, 0xe016, 0x3cc8, 0xe42e,
+ 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0615, 0xa102, 0xe40a, 0x0670,
+ 0xa102, 0xe40a, 0x0624, 0xe40e, 0x0670, 0xe0c0, 0x0060, 0x34b9,
+ 0x3cba, 0x34bf, 0x3cc0, 0xe0c0, 0x0061, 0xae14, 0x34bb, 0x3cbc,
+ 0x04b9, 0x0cba, 0x34bd, 0x3cbe, 0x28c7, 0xf13a, 0xe0c0, 0x0048,
+ 0x34d1, 0x3cd2, 0x24d1, 0x4cd2, 0xe0c1, 0x0049, 0x36c1, 0x3ec2,
+ 0x14c1, 0x1cc2, 0xe0c1, 0x0045, 0xaf05, 0xa803, 0xb611, 0x3ec7,
+ 0xe0c0, 0x0048, 0xe008, 0x01ff, 0x3cc5, 0xe0c0, 0x0048, 0x34bf,
+ 0xe008, 0xfe00, 0x3cc0, 0xe0c0, 0x0048, 0x34c3, 0x3cc4, 0xa200,
+ 0xcc92, 0xcc8e, 0xe180, 0xe41e, 0x0676, 0xe41e, 0x0222, 0xd071,
+ 0x202a, 0xe181, 0xa200, 0x3cc9, 0x283c, 0xa104, 0xf10a, 0xa200,
+ 0x34d7, 0x3cd6, 0xcc72, 0xe41e, 0x06b2, 0x2cc5, 0xa102, 0xf034,
+ 0xba4f, 0xf7de, 0xc872, 0xe41e, 0x0838, 0xf0be, 0xe41e, 0x0703,
+ 0xe41e, 0x0538, 0x28c5, 0xa102, 0xe412, 0x054b, 0xa200, 0xceaa,
+ 0xa202, 0x3cc9, 0xa202, 0xb61a, 0xe16a, 0xe42e, 0xd030, 0x0000,
+ 0xd031, 0x0000, 0xd032, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000,
+ 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0000, 0xd038, 0x0000,
+ 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd149, 0x0000,
+ 0xe42e, 0xc896, 0xf05a, 0xe41e, 0x06bf, 0x3cd9, 0xf058, 0xd04b,
+ 0x0001, 0xa200, 0x3cd9, 0x28d8, 0xcc6e, 0xd04c, 0x0000, 0xe470,
+ 0xa202, 0x3cd9, 0xe41e, 0x06bf, 0xcc96, 0xe42a, 0x28d8, 0xcc6e,
+ 0xe42e, 0xc896, 0xe428, 0xd04b, 0x0001, 0x28d8, 0xcc6e, 0xd04c,
+ 0x0000, 0xe42e, 0xa200, 0x3cc8, 0x3cd8, 0xe41e, 0x06bf, 0x3cd9,
+ 0xd04b, 0x0001, 0x28d8, 0xcc6e, 0xe190, 0xe128, 0xe42e, 0x283c,
+ 0xa104, 0xf04a, 0xe41e, 0x06ce, 0xf03e, 0xe41e, 0x05cf, 0xe004,
+ 0x0080, 0x2ac8, 0xb616, 0x3cd8, 0xa200, 0xe42e, 0x28c7, 0xe428,
+ 0xd027, 0x0000, 0xe41e, 0x0760, 0xd027, 0x0001, 0xca28, 0xf7f8,
+ 0x24bf, 0x4cc0, 0xce20, 0x28c8, 0xae0e, 0xce22, 0xd112, 0x0080,
+ 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022, 0xce26, 0xca28, 0xf7f8,
+ 0x24bf, 0x4cc0, 0xe000, 0x0200, 0x34bf, 0x3cc0, 0x14bd, 0x1cbe,
+ 0xf054, 0x24b9, 0x4cba, 0x34bf, 0x3cc0, 0xe41e, 0x07fa, 0x28c8,
+ 0xe016, 0x3cc8, 0x28da, 0x00d7, 0x0cd6, 0x34d7, 0x3cd6, 0xcc8c,
+ 0x28c7, 0xcc8e, 0xe42e, 0x28c7, 0xf1aa, 0xe41e, 0x024f, 0xe000,
+ 0x0440, 0xce50, 0xe005, 0x010a, 0x28da, 0xa806, 0xa108, 0xe012,
+ 0xa806, 0xae06, 0x3cfe, 0xe004, 0x010a, 0x58fe, 0xce52, 0xe41e,
+ 0x0257, 0xd14e, 0x0000, 0xd144, 0x0000, 0xe42e, 0xd027, 0x0000,
+ 0xe41e, 0x0760, 0xd027, 0x0001, 0x28da, 0xf25a, 0xca48, 0xa802,
+ 0xf7e8, 0x24bf, 0x4cc0, 0xce40, 0xd121, 0x0000, 0xd122, 0x0040,
+ 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa032, 0xce46, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xca48, 0xa802, 0xf7e8, 0x24bf, 0x4cc0, 0xe000,
+ 0x0200, 0x34bf, 0x3cc0, 0x14bd, 0x1cbe, 0xf054, 0x24b9, 0x4cba,
+ 0x34bf, 0x3cc0, 0x28c7, 0xe418, 0x07b7, 0xe41e, 0x07fa, 0xd14e,
+ 0x0000, 0xd144, 0x0000, 0xe42e, 0xe0c1, 0x0059, 0xa103, 0xa200,
+ 0xb636, 0xe000, 0x001c, 0xe0c1, 0x0045, 0xe052, 0xe01a, 0xe42e,
+ 0xe0c0, 0x0043, 0xa808, 0xf318, 0xa200, 0x3cc6, 0xe004, 0x0200,
+ 0x3cda, 0xe41e, 0x0754, 0x3cc7, 0x24bf, 0x4cc0, 0xe0c1, 0x0049,
+ 0x36d1, 0x3ed2, 0x26d1, 0x4ed2, 0xe045, 0xf033, 0x06bb, 0x0ebc,
+ 0xe003, 0x0200, 0x28c7, 0xb602, 0x3cc7, 0xf173, 0xe001, 0x0200,
+ 0x3eda, 0x28c7, 0xf128, 0x28c6, 0xf658, 0xe0c0, 0x005c, 0xe008,
+ 0x4000, 0xf60a, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d,
+ 0xa202, 0xce00, 0x3cc6, 0xf56e, 0x28da, 0x2ac7, 0xf039, 0xe004,
+ 0x0200, 0x3cda, 0xe42e, 0xc868, 0xa80e, 0x3c00, 0x7400, 0xe42e,
+ 0x28c7, 0xe42a, 0xe41e, 0x07fa, 0xe0c0, 0x0049, 0x34d1, 0x3cd2,
+ 0x24d1, 0x4cd2, 0xe0c1, 0x0048, 0x36d1, 0x3ed2, 0x26d1, 0x4ed2,
+ 0xe045, 0xa200, 0xb626, 0xe003, 0x0200, 0xb606, 0xe42e, 0xe41e,
+ 0x024f, 0x28da, 0xe002, 0x0200, 0xe40a, 0x07f6, 0x28da, 0xa806,
+ 0xf1fa, 0xa108, 0xe012, 0xae06, 0x3cfe, 0x28da, 0xaf04, 0xae20,
+ 0xe000, 0x01c0, 0xce50, 0xe190, 0xca52, 0x5cfe, 0x58fe, 0x2ada,
+ 0xa807, 0xae07, 0x3efe, 0xe005, 0x010a, 0x5efe, 0xe056, 0x2ada,
+ 0xaf05, 0xae21, 0xe001, 0x0140, 0xce51, 0xe190, 0xce52, 0xe004,
+ 0x01fc, 0x18da, 0xf022, 0xf13e, 0x28da, 0xa006, 0xaf04, 0xae20,
+ 0xe000, 0x0440, 0xce50, 0x28da, 0xa806, 0xa108, 0xe012, 0xae06,
+ 0xa83e, 0x3cfe, 0xe004, 0x010a, 0x58fe, 0xce52, 0xe40e, 0x0257,
+ 0xe41e, 0x079b, 0x283c, 0xa104, 0xf1aa, 0xc872, 0xc001, 0x343b,
+ 0x3c3c, 0xc000, 0x26d7, 0x4ed6, 0xae07, 0xe045, 0xf053, 0x26d7,
+ 0x4ed6, 0xae07, 0xcc73, 0xe41e, 0x0833, 0xe049, 0xc001, 0x243b,
+ 0x4c3c, 0xc000, 0xaf06, 0xe046, 0xb608, 0xf02e, 0xcaaa, 0x2ac9,
+ 0xb616, 0xe0c1, 0x0048, 0x36d1, 0x3ed2, 0x26d1, 0x4ed2, 0xe042,
+ 0xe049, 0x16bd, 0x1ebe, 0xf035, 0x14bb, 0x1cbc, 0xe0c2, 0x0048,
+ 0xe0c2, 0x0052, 0xa200, 0xceaa, 0xc001, 0x243b, 0x4c3c, 0xc000,
+ 0xe41e, 0x0838, 0xe42e, 0xc001, 0x2439, 0x4c3a, 0xc000, 0xe42e,
+ 0xc001, 0xaf06, 0x3439, 0x3c3a, 0xc000, 0xe42e, 0xe41e, 0x07fa,
+ 0xc001, 0xe0c0, 0x0048, 0x3417, 0x3c18, 0xc000, 0xe42e, 0xe0c0,
+ 0x0045, 0xaf04, 0xa80e, 0xa104, 0xe428, 0x283c, 0xa104, 0xf06a,
+ 0xe41e, 0x07a0, 0xe418, 0x01db, 0xe42e, 0xe41e, 0x05aa, 0xcaa2,
+ 0xe008, 0x00ff, 0xe002, 0x000a, 0xe428, 0xe41e, 0x07a0, 0xe418,
+ 0x01db, 0xe42e, 0xa200, 0xceaa, 0xc001, 0x2417, 0x4c18, 0xc000,
+ 0xe0c2, 0x0048, 0xe42e, 0xe0c0, 0x0067, 0xe049, 0xa806, 0x3c3c,
+ 0xe04a, 0xa810, 0xe01a, 0x3ce6, 0xa809, 0xe41b, 0x0a8f, 0xe41e,
+ 0x0608, 0xf2ca, 0xa200, 0x3c91, 0x3c93, 0xe16a, 0x283c, 0xa104,
+ 0xf108, 0xa23e, 0x3cf0, 0xe41e, 0x0af1, 0xe40a, 0x08a5, 0xe41e,
+ 0x0556, 0xe41e, 0x1004, 0xe40d, 0x08a5, 0xe41d, 0x0847, 0xf06e,
+ 0xe41e, 0x0f0b, 0xd1ff, 0x0000, 0xf11d, 0xa214, 0x3cf0, 0x2816,
+ 0xf0d6, 0xe002, 0x0800, 0xf0a0, 0x2817, 0xf086, 0xe002, 0x0800,
+ 0xf050, 0xa200, 0x3c93, 0xa202, 0xf05e, 0xa202, 0x3c93, 0xe16a,
+ 0xa200, 0xe41e, 0x07f8, 0xe42e, 0xe41e, 0x0c2c, 0xf068, 0xe41e,
+ 0x0a15, 0xe41e, 0x0a1a, 0xe42e, 0x2810, 0xa104, 0xe408, 0x08bb,
+ 0xe40e, 0x090f, 0xe42e, 0xa200, 0x3c94, 0x3c95, 0xe162, 0x0670,
+ 0xc73f, 0x3d12, 0xe16a, 0xe41e, 0x07a0, 0x3c91, 0x2891, 0xf10a,
+ 0xe41e, 0x0847, 0xe0c0, 0x0045, 0xa808, 0xe01a, 0x3c91, 0xa208,
+ 0x3c4b, 0x3c4c, 0xe41e, 0x0a0a, 0xe41e, 0x0a1a, 0xe42e, 0xe41e,
+ 0x10ec, 0xd1ff, 0x0001, 0xf06c, 0xa208, 0x3c4b, 0x3c4c, 0xa202,
+ 0x3c94, 0x28df, 0xf0da, 0xe41e, 0x0b8b, 0xf0aa, 0xe41e, 0x0c33,
+ 0x209e, 0x4c9f, 0x2a91, 0xb436, 0x349e, 0x3c9f, 0xf07e, 0xe41e,
+ 0x0a0a, 0xe41e, 0x0a1d, 0xe41e, 0x0a1a, 0x2041, 0x4c42, 0xe005,
+ 0x0030, 0xae21, 0xe046, 0xf112, 0x2041, 0x4c42, 0xae06, 0xc873,
+ 0xe046, 0xf0b6, 0xe049, 0xa83f, 0xf05b, 0x3e00, 0xe046, 0x7600,
+ 0xf046, 0xba7f, 0xa140, 0xf7e0, 0xe41d, 0x0847, 0xe42e, 0xa200,
+ 0x3c92, 0xa200, 0x3c51, 0x3c52, 0x3c57, 0x2892, 0xb63a, 0xe418,
+ 0x0847, 0x2892, 0xe428, 0x28dd, 0xf0ba, 0xa200, 0x3cdd, 0x28d4,
+ 0xcc92, 0x28d3, 0xa118, 0xe40a, 0x0964, 0xe40e, 0x096a, 0xe41e,
+ 0x057f, 0xf2aa, 0x28d3, 0xa114, 0xf27a, 0x28d3, 0xa116, 0xf30a,
+ 0x28d3, 0xa118, 0xf32a, 0x28d3, 0xa11a, 0xf35a, 0x28d3, 0xa11c,
+ 0xf3aa, 0x28d3, 0xa11e, 0xe40a, 0x097c, 0x28d3, 0xa136, 0xe40a,
+ 0x098f, 0x28d3, 0xa138, 0xe40a, 0x098f, 0x28d3, 0xa13a, 0xe40a,
+ 0x098f, 0x28d3, 0xa13c, 0xe40a, 0x098f, 0x28d3, 0xa13e, 0xe40a,
+ 0x098f, 0xe40e, 0x0915, 0xe41e, 0x0847, 0xa202, 0x3c91, 0xa208,
+ 0x3c4b, 0x3c4c, 0xe41e, 0x0a0a, 0xe41e, 0x0a1a, 0xe42e, 0xa202,
+ 0xe41e, 0x054b, 0xe40e, 0x0915, 0xe41e, 0x0556, 0xe41e, 0x09e6,
+ 0xe40e, 0x0915, 0xe41e, 0x0bbe, 0xe41e, 0x0556, 0xe41e, 0x09a7,
+ 0xe40e, 0x0915, 0xe41e, 0x0556, 0xe41e, 0x10a1, 0xe41e, 0x10dd,
+ 0xd1ff, 0x0000, 0xe40e, 0x0915, 0xe41e, 0x0556, 0xe41e, 0x1004,
+ 0xe41e, 0x14f5, 0xe41e, 0x107a, 0xe41e, 0x0c29, 0xa200, 0x3c91,
+ 0xd1ff, 0x0000, 0x28db, 0xe408, 0x0995, 0xe40e, 0x0915, 0xe41e,
+ 0x0556, 0xe41e, 0x194b, 0xe40e, 0x0915, 0xe41e, 0x14ec, 0xe41e,
+ 0x0862, 0xa202, 0x3c92, 0xe161, 0x08c7, 0x289c, 0xe000, 0x08ca,
+ 0xe094, 0xa2fe, 0x3d01, 0xa2fa, 0x3d02, 0xe40e, 0x0915, 0xa200,
+ 0x3c94, 0x3c95, 0xe162, 0x0670, 0xc73f, 0x3d12, 0xe16a, 0xe41e,
+ 0x1119, 0xd1ff, 0x0001, 0xf06c, 0xa208, 0x3c4b, 0x3c4c, 0xa202,
+ 0x3c94, 0x28df, 0xe418, 0x0b8b, 0xe418, 0x0c33, 0xf058, 0xe41e,
+ 0x0a0a, 0xe41e, 0x0a1d, 0x284a, 0xa106, 0x2a4b, 0xa109, 0xb636,
+ 0xf05a, 0xe41e, 0x0a1a, 0xa202, 0x3c92, 0x2892, 0xe428, 0x2851,
+ 0xa002, 0x3c51, 0xe41e, 0x0b21, 0xe428, 0x28e0, 0xe428, 0xa202,
+ 0x3c94, 0x284e, 0x3c52, 0xa200, 0x3c57, 0xe41e, 0x0c8c, 0xe41e,
+ 0x0a1d, 0xe41e, 0x0a1a, 0xa202, 0x3c92, 0xe42e, 0x284a, 0xa106,
+ 0xe428, 0x2851, 0xa102, 0xe428, 0x28e0, 0xf0e8, 0xe41e, 0x1130,
+ 0xd1ff, 0x0001, 0xf03c, 0xa202, 0x3c94, 0xe41e, 0x0c8c, 0xe41e,
+ 0x0a1d, 0xe41e, 0x0a1a, 0xa202, 0x3c92, 0xe42e, 0x28e0, 0xe428,
+ 0xe41e, 0x113c, 0xd1ff, 0x0001, 0xf03c, 0xa202, 0x3c94, 0xe41e,
+ 0x0a1d, 0xe42e, 0xe41e, 0x1691, 0xe41e, 0x0c33, 0xe41e, 0x0c8c,
+ 0xe41e, 0x18b9, 0xe41e, 0x181e, 0xe42e, 0xe41e, 0x0c4e, 0xe41e,
+ 0x181e, 0xe42e, 0xe41e, 0x1879, 0xe42e, 0xe166, 0x08c7, 0x2906,
+ 0xe424, 0xe41e, 0x1506, 0xe41e, 0x163c, 0x2894, 0xf038, 0xe16a,
+ 0xf02e, 0xe16b, 0x284b, 0xa108, 0xe42a, 0xa2fe, 0xcf08, 0xd18c,
+ 0x0001, 0xcb18, 0xf7f8, 0xa200, 0x3c87, 0x3c88, 0x3c86, 0xe41d,
+ 0x0847, 0xe41e, 0x1b18, 0xe41e, 0x1b32, 0xe41e, 0x1b8a, 0x28a7,
+ 0xe418, 0x1890, 0xe41e, 0x1ba2, 0xd1ff, 0x0002, 0x2886, 0xa002,
+ 0x3c86, 0x2887, 0xa002, 0x3c87, 0x1855, 0xf6a4, 0xa200, 0x3c87,
+ 0x2888, 0xa002, 0x3c88, 0x1856, 0xf312, 0xa202, 0x2a3e, 0xe419,
+ 0x116b, 0xe40a, 0x0a82, 0x2810, 0xa104, 0xf5a8, 0xc894, 0x4c6b,
+ 0xf578, 0x2894, 0xf208, 0xe41e, 0x0b57, 0xf1da, 0xe41e, 0x0556,
+ 0xe41e, 0x113c, 0xd1ff, 0x0001, 0xf16d, 0x2888, 0x1857, 0xf138,
+ 0x2856, 0x1857, 0xf106, 0xe41e, 0x1506, 0xe41e, 0x163c, 0xa200,
+ 0x3c87, 0x2857, 0x3c88, 0x8488, 0x8255, 0xe018, 0x3c86, 0xe16a,
+ 0xe40e, 0x0a37, 0xe16b, 0xe40e, 0x0a37, 0x2856, 0xcf08, 0xd18c,
+ 0x0001, 0xcb18, 0xf7f8, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xd030,
+ 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036,
+ 0x007f, 0xd037, 0x0000, 0xd038, 0x0000, 0xe181, 0xe0c0, 0x0060,
+ 0x34b9, 0x3cba, 0xe0c0, 0x0061, 0xae14, 0x34bb, 0x3cbc, 0x04b9,
+ 0x0cba, 0x34bd, 0x3cbe, 0xe0c0, 0x0048, 0xe008, 0x01ff, 0x3cc5,
+ 0xe0c0, 0x0048, 0x34bf, 0xe008, 0xfe00, 0x3cc0, 0xca28, 0xf7f8,
+ 0x24bf, 0x4cc0, 0xce20, 0xd111, 0x0000, 0xd112, 0x0080, 0xe0c0,
+ 0x0043, 0xa806, 0xae02, 0xa022, 0xce26, 0xca28, 0xf7f8, 0x24bf,
+ 0x4cc0, 0xe000, 0x0200, 0x34bf, 0x3cc0, 0xe049, 0x16bd, 0x1ebe,
+ 0xf055, 0x24b9, 0x4cba, 0x34bf, 0x3cc0, 0xce20, 0xd111, 0x0080,
+ 0xd112, 0x0080, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022, 0xce26,
+ 0xca28, 0xf7f8, 0xe128, 0x28c5, 0xa102, 0xf034, 0xba4f, 0xf7de,
+ 0xba3f, 0xe009, 0x0085, 0xe003, 0x0085, 0xa204, 0xb636, 0x3c3c,
+ 0xe42e, 0xe41e, 0x057f, 0xf23a, 0x28d3, 0xa114, 0xf20a, 0x28d3,
+ 0xa116, 0xf23a, 0x28d3, 0xa118, 0xf20a, 0x28d3, 0xa11a, 0xf1da,
+ 0x28d3, 0xa11c, 0xf1aa, 0x28d3, 0xa11e, 0xf15a, 0x28d3, 0xa136,
+ 0xf14a, 0x28d3, 0xa138, 0xf11a, 0x28d3, 0xa13a, 0xf0ea, 0x28d3,
+ 0xa13c, 0xf0ba, 0x28d3, 0xa13e, 0xf08a, 0xf07e, 0xe41e, 0x0847,
+ 0xa200, 0xe42e, 0xa202, 0xe42e, 0xa202, 0xe41e, 0x054b, 0xe40e,
+ 0x0af1, 0xe41e, 0x057f, 0xf25a, 0x28d3, 0xa114, 0xf22a, 0x28d3,
+ 0xa116, 0xf1fa, 0x28d3, 0xa118, 0xf1ea, 0x28d3, 0xa11a, 0xf19a,
+ 0x28d3, 0xa11c, 0xf16a, 0x28d3, 0xa11e, 0xf13a, 0x28d3, 0xa136,
+ 0xf14a, 0x28d3, 0xa138, 0xf11a, 0x28d3, 0xa13a, 0xf0ea, 0x28d3,
+ 0xa13c, 0xe40a, 0x0b4c, 0x28d3, 0xa13e, 0xe40a, 0x0b4c, 0xf0be,
+ 0xa200, 0xe42e, 0xa202, 0xe42e, 0xe41e, 0x0556, 0xe41e, 0x194b,
+ 0xe40e, 0x0b21, 0xa202, 0xe41e, 0x054b, 0xe40e, 0x0b21, 0xe41e,
+ 0x057f, 0xf23a, 0x28d3, 0xa114, 0xf20a, 0x28d3, 0xa116, 0xf1fa,
+ 0x28d3, 0xa118, 0xf1aa, 0x28d3, 0xa11a, 0xf17a, 0x28d3, 0xa11c,
+ 0xf14a, 0x28d3, 0xa11e, 0xf11a, 0x28d3, 0xa136, 0xf12a, 0x28d3,
+ 0xa138, 0xf0fa, 0x28d3, 0xa13a, 0xf0ca, 0x28d3, 0xa13c, 0xf09a,
+ 0x28d3, 0xa13e, 0xf06a, 0xf0be, 0xa200, 0xe42e, 0xa202, 0xe42e,
+ 0xe41e, 0x0556, 0xe41e, 0x194b, 0xe40e, 0x0b57, 0xa202, 0xe41e,
+ 0x054b, 0xe40e, 0x0b57, 0x28df, 0xf1da, 0xa102, 0xf06a, 0xa102,
+ 0xf0ba, 0xa104, 0xf0ea, 0xf12e, 0x284b, 0x444c, 0xf13a, 0xa204,
+ 0x3ce0, 0xa202, 0xe42e, 0x284b, 0x084c, 0xa102, 0xf0b6, 0xf06e,
+ 0x284b, 0x4c4c, 0xa804, 0xf06a, 0xf01e, 0xa202, 0x3ce0, 0xa202,
+ 0xe42e, 0xa200, 0x3ce0, 0xa200, 0xe42e, 0x283c, 0xa104, 0xf02a,
+ 0xe42e, 0xe41e, 0x07a0, 0xe428, 0xe41e, 0x057f, 0x28d3, 0xa116,
+ 0xe428, 0xa202, 0xe41e, 0x054b, 0xf75e, 0xe42e, 0x28dc, 0xe428,
+ 0xc001, 0x2417, 0x4c18, 0xc000, 0xe0c2, 0x0051, 0xa202, 0x3cdc,
+ 0xe42e, 0x28dc, 0xe428, 0xe41e, 0x07fa, 0xe0c0, 0x0048, 0xe0c2,
+ 0x0051, 0xa202, 0x3cdc, 0xe42e, 0xa202, 0x3c8e, 0x283f, 0x2a10,
+ 0xa105, 0xb636, 0x3c8b, 0xa200, 0x3c8c, 0xa202, 0x3c8f, 0xa204,
+ 0x2a8f, 0xb452, 0x3c97, 0xa204, 0x2a10, 0xa105, 0xb633, 0x468f,
+ 0xb632, 0x2a8b, 0x4e8c, 0xb616, 0x0897, 0x3c97, 0xa104, 0xf030,
+ 0xa206, 0x3c97, 0xa200, 0x2a8f, 0xb432, 0x2a89, 0xb616, 0x3c99,
+ 0x288d, 0x4c8e, 0xb630, 0x3c9a, 0x288f, 0x3c9b, 0x2a89, 0xb616,
+ 0x3c9b, 0xa200, 0x3c9c, 0xa202, 0x3c9d, 0xa200, 0x3c9e, 0x3ca0,
+ 0xe42e, 0xe165, 0x07e0, 0xa200, 0xd022, 0x001f, 0xe184, 0x0c11,
+ 0x3d15, 0xa002, 0xe165, 0x08c3, 0xa200, 0x3515, 0x3d15, 0x3515,
+ 0x3d15, 0xe165, 0x08c7, 0xa2fa, 0xc708, 0x3d15, 0x2816, 0xa01e,
+ 0xaf08, 0xae08, 0x3ca2, 0x2817, 0xa01e, 0xaf08, 0xae08, 0x3ca3,
+ 0xe42e, 0xa202, 0x3c9d, 0xe42e, 0xe41e, 0x0d15, 0xe41e, 0x0eee,
+ 0xb60c, 0xb620, 0xe42e, 0xe41e, 0x0d15, 0x28e0, 0xe41a, 0x0d1d,
+ 0xe41e, 0x0d4f, 0xe41e, 0x0ddd, 0xe41e, 0x0e42, 0x28e0, 0xf0e8,
+ 0xa200, 0x3c9d, 0x209e, 0x4c9f, 0x2a91, 0xb436, 0x349e, 0x3c9f,
+ 0x20a0, 0x4ca1, 0xa002, 0x34a0, 0x3ca1, 0xe42e, 0xe41e, 0x0d15,
+ 0xa2fa, 0xe162, 0x08c7, 0x3d02, 0xe162, 0x08db, 0xe163, 0x08eb,
+ 0xe164, 0x08ef, 0xd022, 0x0003, 0xe184, 0x0c5f, 0x290b, 0x3d0c,
+ 0xd022, 0x0003, 0xe184, 0x0c65, 0x290b, 0x3d0c, 0xd022, 0x0003,
+ 0xe184, 0x0c6b, 0x290a, 0x3d0c, 0xe162, 0x08c7, 0xe163, 0x08cb,
+ 0xe164, 0x08cc, 0x290b, 0x3d0c, 0x290b, 0x3d0c, 0x290a, 0x3d0c,
+ 0xe162, 0x08e8, 0x28a4, 0x4ca5, 0xae02, 0x4d02, 0x3d12, 0x28a4,
+ 0xae02, 0x4ca5, 0xae08, 0x4ca6, 0xae14, 0x4d02, 0x3d02, 0xe41e,
+ 0x0e42, 0xa200, 0x3c9d, 0xe42e, 0xe004, 0x004b, 0x0851, 0xe094,
+ 0x2902, 0xa80c, 0xe428, 0x2851, 0xe408, 0x0cd8, 0x2852, 0xae02,
+ 0xe000, 0x08d5, 0xe094, 0xa10a, 0xe096, 0x2902, 0x3d03, 0x2852,
+ 0xe016, 0xae02, 0xe000, 0x08d5, 0xe094, 0xa10a, 0xe096, 0x2902,
+ 0x3d03, 0xa206, 0x2a52, 0xb616, 0x2a4a, 0xa107, 0xb612, 0xe000,
+ 0x0067, 0xe094, 0x2852, 0xae02, 0xe000, 0x08d1, 0xe096, 0x290a,
+ 0xae0c, 0x4d0a, 0xae02, 0x4d0a, 0x3d03, 0xa206, 0x2a52, 0xb612,
+ 0x2a4a, 0xa107, 0xb612, 0xe000, 0x0067, 0xe094, 0x2852, 0xe016,
+ 0xae02, 0xe000, 0x08d1, 0xe096, 0x290a, 0xae0c, 0x4d0a, 0xae02,
+ 0x4d0a, 0x3d03, 0xe162, 0x08d4, 0xa200, 0xc703, 0x3d12, 0xe42e,
+ 0x2852, 0xae02, 0xe000, 0x08d1, 0xe094, 0xa102, 0xe096, 0x2902,
+ 0x3d03, 0x2852, 0xe016, 0xae02, 0xe000, 0x08d5, 0xe094, 0xa102,
+ 0xe096, 0x2902, 0x3d03, 0xa206, 0x2a52, 0xb616, 0x2a4a, 0xa107,
+ 0xb612, 0xe000, 0x0067, 0xe094, 0x2852, 0xae02, 0xe000, 0x08d1,
+ 0xe096, 0x290a, 0xae0c, 0x4d0a, 0xae02, 0x4d0a, 0x3d03, 0xa206,
+ 0x2a52, 0xb612, 0x2a4a, 0xa107, 0xb612, 0xe000, 0x0067, 0xe094,
+ 0x2852, 0xe016, 0xae02, 0xe000, 0x08d5, 0xe096, 0x290a, 0xae0c,
+ 0x4d0a, 0xae02, 0x4d0a, 0x3d03, 0xe42e, 0x289c, 0xe426, 0xe162,
+ 0x08ca, 0x2902, 0xe41e, 0x0e9a, 0xe42e, 0xe162, 0x08d8, 0x2836,
+ 0xae02, 0x4c38, 0xae06, 0x4c37, 0xae06, 0x4c39, 0xae02, 0x4c5c,
+ 0xae02, 0x4c8c, 0xae04, 0x4c5b, 0xae02, 0x2a36, 0x4e38, 0x4e5c,
+ 0x468b, 0xb432, 0xae02, 0x2a5b, 0xb633, 0x468c, 0xb432, 0xae02,
+ 0xa900, 0xae02, 0xa900, 0x3d12, 0xa200, 0xae02, 0xa900, 0xae08,
+ 0xa900, 0xae04, 0x4c10, 0xae04, 0x4c4a, 0xae06, 0x4c4b, 0xae06,
+ 0x4c4c, 0x3d12, 0x2853, 0x3d12, 0x2854, 0x3d12, 0xe42e, 0x284b,
+ 0xa804, 0xe408, 0x0db1, 0xe162, 0x08c7, 0xe163, 0x08c8, 0xa203,
+ 0x2b13, 0x1b0b, 0x2913, 0xe419, 0x0eab, 0x2903, 0x2ae0, 0xb7d2,
+ 0x2a91, 0xb7f2, 0x2a4b, 0xa809, 0x4e91, 0x4ee0, 0xe41b, 0x0e56,
+ 0x3d02, 0xe162, 0x08d8, 0xe163, 0x08dc, 0xe164, 0x08e0, 0xd022,
+ 0x0003, 0xe184, 0x0d74, 0x2914, 0x3d13, 0xd022, 0x0003, 0xe184,
+ 0x0d7a, 0x2912, 0x3d13, 0xe162, 0x08c7, 0xe163, 0x08c8, 0xe164,
+ 0x08c9, 0x2914, 0x3d13, 0x2912, 0x3d13, 0x289b, 0xe016, 0xae04,
+ 0xe000, 0x08df, 0xe094, 0xe163, 0x08eb, 0xe164, 0x08ef, 0xd022,
+ 0x0003, 0xe184, 0x0d94, 0x290b, 0x3d0c, 0xd022, 0x0003, 0xe184,
+ 0x0d9a, 0x290b, 0x3d0c, 0xd022, 0x0003, 0xe184, 0x0da0, 0x290a,
+ 0x3d0c, 0x289b, 0xe016, 0xe000, 0x08c8, 0xe094, 0xe163, 0x08cb,
+ 0xe164, 0x08cc, 0x290b, 0x3d0c, 0x290b, 0x3d0c, 0x290a, 0x3d0c,
+ 0xe42e, 0x2ae0, 0xb7d2, 0xe41b, 0x0e78, 0xe162, 0x08c7, 0x3d02,
+ 0xe162, 0x08db, 0xe163, 0x08eb, 0xe164, 0x08ef, 0xd022, 0x0003,
+ 0xe184, 0x0dc3, 0x290b, 0x3d0c, 0xd022, 0x0003, 0xe184, 0x0dc9,
+ 0x290b, 0x3d0c, 0xd022, 0x0003, 0xe184, 0x0dcf, 0x290a, 0x3d0c,
+ 0xe162, 0x08c7, 0xe163, 0x08cb, 0xe164, 0x08cc, 0x290b, 0x3d0c,
+ 0x290b, 0x3d0c, 0x290a, 0x3d0c, 0xe42e, 0xe162, 0x08e8, 0x28a4,
+ 0x4ca5, 0xae02, 0x4d02, 0x3d12, 0x28a4, 0xae02, 0x4ca5, 0xae08,
+ 0x4ca6, 0xae14, 0x4d02, 0x3d02, 0x284b, 0xa804, 0xe408, 0x0e23,
+ 0xe162, 0x08cd, 0xe163, 0x08ce, 0xe164, 0x08cf, 0xa2fa, 0x3d04,
+ 0xe161, 0x08c7, 0x2b01, 0xf0d5, 0xe161, 0x08d8, 0x2b01, 0xa819,
+ 0xf08b, 0xa201, 0x2903, 0x2a4b, 0xa809, 0xe41b, 0x0e56, 0x3d04,
+ 0x2903, 0x3d02, 0x2904, 0x3d03, 0xa203, 0x2b02, 0x1b03, 0x2902,
+ 0xe419, 0x0eab, 0xe163, 0x08ca, 0x2903, 0xe424, 0xe162, 0x08e4,
+ 0x2902, 0xa818, 0xe42a, 0x289b, 0xe016, 0xe000, 0x08cd, 0xe098,
+ 0x2904, 0x3d03, 0xe42e, 0xe161, 0x08d8, 0xe162, 0x08c7, 0xe163,
+ 0x08ca, 0xe164, 0x08cf, 0xa2fa, 0x3d04, 0x2902, 0xe424, 0x2911,
+ 0xa818, 0xe42a, 0x2902, 0x3d04, 0x2911, 0xaf0c, 0xa806, 0xa106,
+ 0xf078, 0xe41e, 0x0e78, 0x3d04, 0x2902, 0xe41e, 0x0ebd, 0x2904,
+ 0x3d03, 0xe42e, 0x289c, 0xa002, 0xe000, 0x08ca, 0xe094, 0x2902,
+ 0xf034, 0xe41e, 0x0ecf, 0xe162, 0x08ca, 0x2912, 0xe412, 0x0e9a,
+ 0x289c, 0xe426, 0x2912, 0xe412, 0x0e9a, 0xe42e, 0xe165, 0x08c3,
+ 0x2115, 0x4d15, 0x2315, 0x4f15, 0xe056, 0xe165, 0x07e0, 0x2a98,
+ 0xf0b7, 0xa103, 0xcc45, 0xe184, 0x0e6a, 0x2b15, 0x3e01, 0xe049,
+ 0x5e01, 0xa803, 0xf03b, 0xa2fa, 0xe42e, 0xe165, 0x08c3, 0x2115,
+ 0x4d0d, 0xa203, 0x5a01, 0xe056, 0x3515, 0x3d0d, 0x2801, 0xe42e,
+ 0xe165, 0x08c3, 0x2115, 0x4d15, 0x2315, 0x4f15, 0xe056, 0xe165,
+ 0x07e0, 0x2a98, 0xf0b7, 0xa103, 0xcc45, 0xe184, 0x0e8c, 0x2b15,
+ 0x3e01, 0xe049, 0x5e01, 0xa803, 0xf03b, 0xa2fa, 0xe42e, 0xe165,
+ 0x08c5, 0x2115, 0x4d0d, 0xa203, 0x5a01, 0xe056, 0x3515, 0x3d0d,
+ 0x2801, 0xe42e, 0xe424, 0x3c01, 0x2898, 0xa102, 0x1801, 0xe424,
+ 0xe165, 0x08c5, 0x2115, 0x4d0d, 0xa203, 0x5a01, 0xe056, 0x3515,
+ 0x3d0d, 0x2801, 0xe42e, 0xe424, 0x3c01, 0x2898, 0xa102, 0x1801,
+ 0xe424, 0xe165, 0x08c3, 0x2115, 0x4d0d, 0xa203, 0x5a01, 0xe015,
+ 0xe052, 0x3515, 0x3d0d, 0x2801, 0xe42e, 0xe424, 0x3c01, 0x2898,
+ 0xa102, 0x1801, 0xe424, 0xe165, 0x08c5, 0x2115, 0x4d0d, 0xa203,
+ 0x5a01, 0xe015, 0xe052, 0x3515, 0x3d0d, 0x2801, 0xe42e, 0xe424,
+ 0x3c01, 0x2898, 0xa102, 0x1801, 0xe424, 0xe165, 0x07e0, 0x2a98,
+ 0xf087, 0xa103, 0xcc45, 0xe184, 0x0edf, 0x2b15, 0x1a01, 0xf03b,
+ 0xa2fa, 0xe42e, 0xc845, 0xf067, 0xe184, 0x0ee8, 0x290d, 0x3d15,
+ 0x8115, 0x2801, 0x810d, 0x3d15, 0x2801, 0xe42e, 0xa200, 0x3c02,
+ 0xe165, 0x08c3, 0x2115, 0x4d15, 0x2315, 0x4f15, 0xe056, 0xe165,
+ 0x07e0, 0x2a98, 0xf0f7, 0xa103, 0xcc45, 0xe184, 0x0f08, 0x2b15,
+ 0x3e01, 0xe049, 0x5e01, 0xa803, 0xf049, 0x2a02, 0xa003, 0x3e02,
+ 0xe190, 0x2802, 0xe42e, 0xe41e, 0x079b, 0xba4e, 0xba4f, 0xae11,
+ 0xe056, 0xba4f, 0xae21, 0xe056, 0xb7f4, 0xe005, 0x00ff, 0xae21,
+ 0xe00b, 0xffff, 0xe045, 0xb7f6, 0x343a, 0x3c3b, 0xba4e, 0x3c3c,
+ 0xe008, 0x0085, 0xe002, 0x0085, 0xa203, 0x3ef0, 0xe408, 0x0fe4,
+ 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f,
+ 0xae31, 0xe055, 0xa109, 0xa204, 0x3cf0, 0xe405, 0x0fe4, 0xa206,
+ 0x3cf0, 0xba42, 0x3c10, 0xba40, 0x3c48, 0xba40, 0x3c49, 0xba44,
+ 0x3c13, 0xba48, 0x3c14, 0xba40, 0x3c2c, 0xba40, 0x3c43, 0xba40,
+ 0x3c3d, 0xba40, 0x3c44, 0xba40, 0x3c2d, 0xba40, 0x3c2e, 0xba42,
+ 0x3c2f, 0xba40, 0x3c30, 0xba40, 0x3c45, 0xba40, 0x3c31, 0xba40,
+ 0x3c3e, 0xba40, 0x3c3f, 0xba44, 0x3c40, 0xba42, 0x3c32, 0xba40,
+ 0x3c1b, 0xba40, 0x3c46, 0x2813, 0xae04, 0xa004, 0xe0c2, 0x007d,
+ 0xe0c2, 0x0079, 0xa202, 0x3c22, 0xa208, 0x3cf0, 0x2848, 0xe408,
+ 0x0fe4, 0xa20a, 0x3cf0, 0x2849, 0xe408, 0x0fe4, 0xa206, 0x3cf0,
+ 0x2810, 0xa104, 0xe40a, 0x0fe4, 0xa20e, 0x3cf0, 0x2844, 0xe40a,
+ 0x0fe4, 0xa20c, 0x3cf0, 0x2843, 0xe408, 0x0fe4, 0x2810, 0xa104,
+ 0xb7f4, 0xa004, 0x3c10, 0xf047, 0xba4e, 0xa103, 0xf7e1, 0xba4e,
+ 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31,
+ 0xe056, 0x3c17, 0x3c34, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f,
+ 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056, 0x3c16, 0x3c33, 0xa200,
+ 0x2a3c, 0xe003, 0x00c5, 0xb636, 0x3c3c, 0xa100, 0xe40a, 0x0fe5,
+ 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f,
+ 0xae31, 0xe056, 0xe049, 0xa118, 0xf06a, 0xf287, 0xba4e, 0xa103,
+ 0xf7e1, 0xf24e, 0xba44, 0x3c11, 0xba40, 0xba46, 0xba4e, 0xba4f,
+ 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xe161, 0x0758, 0x3511,
+ 0x3d11, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056,
+ 0xba4f, 0xae31, 0xe056, 0xe161, 0x0718, 0x3511, 0x3d11, 0xba4e,
+ 0xba4e, 0xba4e, 0xba4e, 0xf02e, 0xe16b, 0xe41d, 0x0847, 0xe42e,
+ 0xe161, 0x0718, 0xe162, 0x0758, 0xba48, 0x3c27, 0xf156, 0xa102,
+ 0xcc44, 0xba46, 0xa00c, 0x3c00, 0xba46, 0xa008, 0x3c01, 0xe184,
+ 0x1002, 0xba5e, 0xa002, 0x5800, 0x3511, 0x3d11, 0xba5e, 0xa002,
+ 0x5801, 0x3512, 0x3d12, 0xe42e, 0xba42, 0xa102, 0x3c10, 0xba44,
+ 0x3c11, 0xba42, 0x3c12, 0xba44, 0x3c13, 0xba48, 0x3c14, 0xba40,
+ 0x3c15, 0xba56, 0xa002, 0xae02, 0x3c16, 0xba56, 0xa002, 0xae02,
+ 0x3c17, 0xba40, 0x3c18, 0xba40, 0x3c19, 0xba40, 0x3c1a, 0xba40,
+ 0x3c1b, 0xba40, 0xba40, 0x3c1c, 0xa200, 0x3c43, 0x3c45, 0xa202,
+ 0x3c44, 0x3c46, 0xba40, 0xe40a, 0x1075, 0xba5a, 0xa002, 0x3c1d,
+ 0xba5a, 0xa002, 0x3c1e, 0xba40, 0xf17a, 0xba46, 0xe049, 0xa11f,
+ 0xf089, 0xba4e, 0xa002, 0x3c1f, 0xba4e, 0xa002, 0x3c20, 0xf0ce,
+ 0xe049, 0xe000, 0x06f0, 0xe098, 0xe001, 0x0700, 0xe09b, 0x2904,
+ 0x3c1f, 0x2905, 0x3c20, 0xba40, 0xf21a, 0xba40, 0xf178, 0xba4e,
+ 0xa80e, 0xe000, 0x0710, 0xe098, 0x2904, 0x3c21, 0x8421, 0xe182,
+ 0x03e8, 0xe018, 0xe0c2, 0x007d, 0xe0c2, 0x0079, 0xe004, 0x03e8,
+ 0xba47, 0xa103, 0xb422, 0x3c22, 0xf09e, 0xba5e, 0xa002, 0xe0c2,
+ 0x007d, 0xe0c2, 0x0079, 0xa240, 0x3c22, 0xba40, 0xf07a, 0xba4e,
+ 0x3c23, 0xba4e, 0x3c24, 0xba4e, 0x3c25, 0xba40, 0x3c26, 0xe418,
+ 0x0fe8, 0xe42e, 0x2810, 0xf064, 0xa104, 0xf040, 0xe41e, 0x020f,
+ 0xf082, 0xa204, 0x3c10, 0x28a2, 0x3c16, 0x28a3, 0x3c17, 0xe16b,
+ 0xe42e, 0xe161, 0x0758, 0xe162, 0x0798, 0x2827, 0xf126, 0xa102,
+ 0xcc44, 0xe184, 0x109f, 0xba4e, 0xa002, 0x3c00, 0x8400, 0x8311,
+ 0xe018, 0xae20, 0x8400, 0x8311, 0xe019, 0xe042, 0xaf10, 0x3d12,
+ 0xe42e, 0xba40, 0x3c28, 0xba40, 0x3c29, 0xba40, 0x3c2a, 0xba40,
+ 0x3c2b, 0xba40, 0x3c2c, 0xba40, 0x3c2d, 0xba40, 0x3c2e, 0xba42,
+ 0x3c2f, 0xba40, 0x3c30, 0xba40, 0x3c31, 0xba42, 0x3c32, 0x2826,
+ 0xe418, 0x1089, 0x2816, 0x3c33, 0x2817, 0x3c34, 0xba40, 0xf09a,
+ 0xba56, 0xa002, 0xae02, 0x3c33, 0xba56, 0xa002, 0xae02, 0x3c34,
+ 0xa200, 0x3c35, 0x282e, 0xf03a, 0xba40, 0x3c35, 0xa200, 0x3c37,
+ 0xba40, 0x3c36, 0xf03a, 0xba44, 0x3c37, 0xa200, 0x3c39, 0xba40,
+ 0x3c38, 0xe42a, 0xba44, 0x3c39, 0xe42e, 0x2833, 0xf086, 0x1816,
+ 0xf060, 0x2834, 0xf046, 0x1817, 0xf020, 0xf06e, 0x2816, 0x3c33,
+ 0x2817, 0x3c34, 0xe16b, 0xe42e, 0xa200, 0x3c51, 0x3c52, 0x3c57,
+ 0x3c6b, 0xba3e, 0xe008, 0x0085, 0xe002, 0x0085, 0xe41a, 0x0f0b,
+ 0xe41e, 0x0bc9, 0xe41e, 0x118c, 0xe41e, 0x07fa, 0x24d7, 0x4cd6,
+ 0xc873, 0xaf07, 0xe046, 0x34d7, 0x3cd6, 0xcc8c, 0xd039, 0x0000,
+ 0xa200, 0xe41e, 0x0838, 0xa208, 0x3c4b, 0x3c4c, 0x2041, 0x4c42,
+ 0xa102, 0xe426, 0xe16a, 0xe41e, 0x11a6, 0xe42d, 0xe41e, 0x12eb,
+ 0xe42e, 0xa200, 0x3c51, 0x3c52, 0x3c57, 0x3c6b, 0xe16a, 0xe41e,
+ 0x1203, 0xe42d, 0x284b, 0xa108, 0xe418, 0x12a6, 0xe42d, 0x284a,
+ 0xa106, 0xf048, 0x284e, 0xe016, 0x3c52, 0xe41e, 0x12eb, 0xe42e,
+ 0x284e, 0x3c52, 0xa200, 0x3c57, 0x3c6b, 0xe16a, 0xe41e, 0x12a6,
+ 0xe42d, 0xe41e, 0x12eb, 0xe42e, 0x2851, 0x2a56, 0xb615, 0xba50,
+ 0xe046, 0x3c57, 0xba40, 0xe42a, 0xa200, 0x3c6b, 0xe162, 0x004a,
+ 0xe163, 0x0610, 0xd022, 0x0038, 0xe184, 0x114f, 0x2912, 0x3d13,
+ 0xe16a, 0xe41e, 0x1203, 0xf0dd, 0x284b, 0xa108, 0xe418, 0x12a6,
+ 0xf08d, 0xe41e, 0x1308, 0xf05d, 0xe41e, 0x12eb, 0xf02d, 0xe42e,
+ 0xe162, 0x0610, 0xe163, 0x004a, 0xd022, 0x0038, 0xe184, 0x1169,
+ 0x2912, 0x3d13, 0xe42e, 0x283e, 0xf1ea, 0xba40, 0xf1c8, 0xe41e,
+ 0x079b, 0xa200, 0xba4f, 0xae10, 0xe056, 0xba4f, 0xae10, 0xe056,
+ 0xe002, 0x00aa, 0xf0ba, 0xa102, 0xf03a, 0xa200, 0xe42e, 0xba4e,
+ 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xba4e, 0xba4e,
+ 0xba4e, 0xba4e, 0xa202, 0xe42e, 0xe41e, 0x079b, 0xba4e, 0xba4f,
+ 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0x3441, 0x3c42, 0xba4e,
+ 0x283c, 0xa102, 0xe428, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f,
+ 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056, 0xe42e, 0x281b, 0xf02a,
+ 0xba40, 0xba42, 0xa200, 0x2a3f, 0xf03b, 0xba40, 0x3c5c, 0x2a40,
+ 0xf039, 0xba40, 0xf02e, 0xb800, 0x3c4b, 0x3c4c, 0xa106, 0xf088,
+ 0xb808, 0x3c5d, 0xa12c, 0xf048, 0xa204, 0x3c4b, 0x3c4c, 0xe004,
+ 0x004b, 0x0851, 0xe092, 0x2901, 0x3c85, 0x2861, 0x2a85, 0xa803,
+ 0xb636, 0x2a85, 0xa103, 0xb436, 0xa802, 0x3c61, 0x2885, 0xa802,
+ 0xf028, 0xba4c, 0xe41e, 0x131e, 0xa200, 0x2a2e, 0xf02b, 0xb804,
+ 0x3c62, 0x2885, 0xa804, 0xf068, 0xa200, 0x2a3d, 0xf02b, 0xba42,
+ 0x3c5b, 0x2833, 0x2a5b, 0xa803, 0xf03b, 0xa002, 0xaf02, 0x3c53,
+ 0xa01e, 0xaf08, 0x3c55, 0x2834, 0x2a5b, 0xa805, 0xf03b, 0xa002,
+ 0xaf02, 0x3c54, 0xa01e, 0xaf08, 0x3c56, 0xe41e, 0x1385, 0xe41e,
+ 0x13e3, 0xe41e, 0x142d, 0xe41e, 0x1484, 0xa202, 0x3c4e, 0xa200,
+ 0x3c5f, 0x3c60, 0xe42e, 0xa200, 0x2a19, 0xf02b, 0xb80a, 0x3c4a,
+ 0xa106, 0xf05a, 0xb802, 0x3c4b, 0x3c4c, 0xf0ee, 0xba44, 0xae02,
+ 0x3c4c, 0xe004, 0xaf50, 0x5c4c, 0xa806, 0x3c4b, 0xe004, 0xbb44,
+ 0x5c4c, 0xa806, 0x3c4c, 0x284b, 0xa108, 0xf05a, 0x281a, 0xf03a,
+ 0xba4e, 0x3c4d, 0xa200, 0x3c50, 0x3c4f, 0xa202, 0x3c4e, 0x2818,
+ 0xf0ca, 0x2819, 0xf08a, 0x281c, 0xf068, 0xba40, 0x3c4e, 0xba40,
+ 0x3c4f, 0xf03e, 0xba42, 0x3c50, 0x282a, 0xf28a, 0xa202, 0x2a19,
+ 0xb616, 0x2a1c, 0xb612, 0xa002, 0x3c47, 0x2850, 0x084f, 0x2a18,
+ 0xb616, 0x0847, 0x3c47, 0xba40, 0xf19a, 0xe161, 0x07b8, 0xe162,
+ 0x07c4, 0xe163, 0x07d0, 0xe164, 0x07d6, 0x2847, 0xf0f6, 0xa102,
+ 0xcc44, 0xe184, 0x125c, 0xba62, 0x3511, 0x3d11, 0xba62, 0x3512,
+ 0x3d12, 0xba5a, 0x3d13, 0xba5a, 0x3d14, 0x284b, 0xa108, 0xe42a,
+ 0xe004, 0x004b, 0x0851, 0xe092, 0x2901, 0x3c85, 0xba40, 0x3c61,
+ 0xa200, 0x2a19, 0xf02b, 0xba40, 0x3c58, 0x2a1b, 0x284a, 0xa100,
+ 0xb611, 0xa200, 0xf02b, 0xba40, 0x3c59, 0x284a, 0xa100, 0x2a85,
+ 0xa107, 0xb632, 0xf07a, 0x284a, 0xa106, 0x2a85, 0xa805, 0xb636,
+ 0xf038, 0xb808, 0x3c5d, 0x282b, 0x2a4a, 0xa107, 0xb612, 0x2a85,
+ 0xa805, 0xb612, 0xf0ca, 0xba42, 0xe049, 0xa107, 0xf079, 0xba41,
+ 0xf05b, 0xa002, 0xe049, 0xa121, 0xf7b7, 0x3c5e, 0x2833, 0x3c53,
+ 0xa01e, 0xaf08, 0x3c55, 0x2834, 0x3c54, 0xa01e, 0xaf08, 0x2a4a,
+ 0xa107, 0xf039, 0xa002, 0xaf02, 0x3c56, 0xe42e, 0xe004, 0x004b,
+ 0x0851, 0xe092, 0x2901, 0x3c85, 0xe41e, 0x131e, 0xa200, 0x2a15,
+ 0xf02b, 0xba42, 0x3c5a, 0x284a, 0xa104, 0x2a85, 0xa107, 0xb632,
+ 0xf038, 0xb808, 0x3c5d, 0xa200, 0x3c5f, 0x3c60, 0x284a, 0xa106,
+ 0xf118, 0x2885, 0xa102, 0xf09a, 0x2885, 0xa106, 0xf0b8, 0xa202,
+ 0x3c5f, 0xa200, 0x3c60, 0xf06e, 0xba40, 0x3c5f, 0xf038, 0xba40,
+ 0x3c60, 0x2885, 0xa802, 0xf0ea, 0xa200, 0x2a2e, 0xf02b, 0xb804,
+ 0x3c62, 0x2a35, 0x284a, 0xa100, 0xb615, 0xa200, 0xf02b, 0xb804,
+ 0x3c63, 0xe41e, 0x1385, 0xe41e, 0x13e3, 0xe42d, 0xe41e, 0x142d,
+ 0xe41e, 0x1484, 0xe42e, 0xe41e, 0x020f, 0xf062, 0x2833, 0x3c53,
+ 0x2834, 0x3c54, 0xe16b, 0x287b, 0xf026, 0xf05e, 0xa202, 0x3c7b,
+ 0x3c7c, 0xe16b, 0xf0cd, 0x283c, 0xa104, 0xf08a, 0x2041, 0x4c42,
+ 0xe005, 0x0030, 0xae21, 0xe046, 0xf022, 0xf02e, 0xe16b, 0xe42e,
+ 0xe162, 0x0610, 0x284a, 0x1912, 0xf108, 0xe162, 0x0619, 0x2853,
+ 0x1912, 0xf0b8, 0x2854, 0x1912, 0xf088, 0x2855, 0x1912, 0xf058,
+ 0x2856, 0x1912, 0xf028, 0xf02e, 0xe16b, 0xe42e, 0xba49, 0x3e7a,
+ 0xa111, 0xa200, 0xf021, 0xba40, 0x3c7d, 0x287a, 0x2a32, 0xa101,
+ 0xf0a9, 0x2a7a, 0xa111, 0xf077, 0x2a7a, 0xa139, 0xb5ae, 0xf037,
+ 0xae02, 0xa13e, 0x3c7b, 0x3c7c, 0x2a32, 0xa105, 0xf0c3, 0xa003,
+ 0xf073, 0xa200, 0x2a7a, 0xa111, 0xb62e, 0x3c7e, 0xe42e, 0xba40,
+ 0x3c7e, 0xe42e, 0x2832, 0xa802, 0x3c7e, 0xe42e, 0xa200, 0x3c7f,
+ 0xa206, 0x3c80, 0xa202, 0x3c82, 0x2a2f, 0xa803, 0xf059, 0x2a2f,
+ 0xa805, 0xf259, 0xe42e, 0xba40, 0xe42a, 0x3c7f, 0xba42, 0x3c80,
+ 0xf09a, 0xa102, 0xf0aa, 0xa102, 0xf11a, 0xba40, 0x3c82, 0xe42a,
+ 0xf1ce, 0xa21e, 0x3c81, 0xf19e, 0xba42, 0xae04, 0x3c81, 0xe004,
+ 0x936c, 0x5c81, 0xa81e, 0x3c81, 0xf10e, 0xba42, 0xae04, 0x3c81,
+ 0xe004, 0x1248, 0x5c81, 0xa81e, 0x3c81, 0xf07e, 0xa202, 0x3c7f,
+ 0xa200, 0x3c80, 0xa21e, 0x3c81, 0xba44, 0xe049, 0xa10f, 0x087b,
+ 0xa002, 0xf029, 0xba48, 0x3c7c, 0xe42e, 0xa200, 0xe162, 0x0065,
+ 0xc705, 0x3d12, 0xa202, 0x2a85, 0xa103, 0xf05b, 0x2a85, 0xa107,
+ 0xf1cb, 0xf33e, 0x2a4a, 0xa105, 0xf059, 0xba41, 0xa202, 0xb672,
+ 0xf2ce, 0xa208, 0x2a7b, 0xa119, 0xb60e, 0x3c64, 0xb80e, 0xe049,
+ 0xaf05, 0x3e65, 0xf02b, 0xb810, 0x0864, 0xae02, 0x3c64, 0xe004,
+ 0xe42d, 0x5c64, 0xa806, 0xf19e, 0x2a4a, 0xa101, 0xf05b, 0x2a4a,
+ 0xa107, 0xf06b, 0xf12e, 0xba41, 0xa200, 0xb632, 0xf0ee, 0xa208,
+ 0x2a7b, 0xa119, 0xb60e, 0x3c64, 0xb810, 0x0864, 0xae02, 0x3c64,
+ 0xe004, 0xe42d, 0x5c64, 0xa806, 0x3c64, 0x284a, 0xa104, 0x2a85,
+ 0xa803, 0xb636, 0xf038, 0xba40, 0x3c65, 0x2865, 0xe42a, 0x284a,
+ 0xa106, 0xf058, 0xb836, 0x3068, 0xaf02, 0x3065, 0x2865, 0xf05a,
+ 0xba4a, 0x3c66, 0xba4a, 0x3c67, 0x2868, 0xf05a, 0xba4a, 0x3c69,
+ 0xba4a, 0x3c6a, 0xe42e, 0xa200, 0x3c6d, 0x3c6e, 0x3c6f, 0xc411,
+ 0xe162, 0x006f, 0x2a4a, 0xa101, 0x2885, 0xa102, 0xb631, 0x2864,
+ 0xa106, 0xb631, 0xe41b, 0x15db, 0xe42d, 0xc411, 0xe162, 0x006f,
+ 0x2a4a, 0xa107, 0x2885, 0xa106, 0xb631, 0xe41b, 0x15db, 0xe42d,
+ 0xc411, 0xe162, 0x006f, 0x2a4a, 0xa107, 0x2885, 0xa106, 0xb611,
+ 0xe419, 0x15db, 0xe42d, 0xc409, 0xe162, 0x006e, 0x2a4a, 0xa107,
+ 0x2885, 0xa802, 0xb615, 0xe419, 0x15db, 0xe42d, 0xc411, 0xe162,
+ 0x006f, 0x2a4a, 0xa105, 0x2885, 0xa802, 0xb631, 0xe41b, 0x15db,
+ 0xe42d, 0xc409, 0xe162, 0x006e, 0x2a10, 0xa105, 0x2885, 0xa802,
+ 0xb631, 0xe41b, 0x15db, 0xe42d, 0xe42e, 0xe004, 0x0024, 0x3c74,
+ 0x2885, 0xa802, 0xe42a, 0x284a, 0xa104, 0xf05a, 0x284a, 0xa106,
+ 0xf0aa, 0xf11e, 0xba42, 0xe000, 0x0051, 0x2a64, 0xa107, 0xb492,
+ 0x3c70, 0xf09e, 0xba44, 0xe000, 0x0041, 0x2a64, 0xa107, 0xb492,
+ 0xb492, 0x3c70, 0xa202, 0x2a4a, 0xa101, 0xf07b, 0x2a5f, 0xf091,
+ 0xba42, 0xe000, 0x003d, 0xf08e, 0xba42, 0xe000, 0x0031, 0xf04e,
+ 0xba44, 0xe000, 0x0035, 0x3c73, 0x2a4a, 0xa101, 0xf05b, 0xba44,
+ 0xe000, 0x0029, 0xf04e, 0xba42, 0xe000, 0x0025, 0x3c74, 0x2a4a,
+ 0xa105, 0x2885, 0xa802, 0xb635, 0xa200, 0xf049, 0xba42, 0xe000,
+ 0x0020, 0x3c71, 0x284a, 0xa104, 0x2a85, 0xa107, 0xb632, 0xf08a,
+ 0x2a4a, 0xa101, 0x2864, 0xa106, 0xb611, 0xa200, 0xf04b, 0xba42,
+ 0xe000, 0x001c, 0x3c72, 0xe42e, 0xa200, 0x3c7f, 0x2885, 0xa802,
+ 0xf0fa, 0x282f, 0xe418, 0x1346, 0xa202, 0x3c75, 0xa200, 0x3c76,
+ 0x2830, 0xf06a, 0xba40, 0x3c75, 0xf03a, 0xba42, 0x3c76, 0xa200,
+ 0x3c6c, 0x2831, 0xf17a, 0x2885, 0xa106, 0xf14a, 0xa204, 0x2a7b,
+ 0xa113, 0xf083, 0x2810, 0xa104, 0x2a85, 0xa803, 0xb632, 0xf0a8,
+ 0xb80c, 0x3c6c, 0xc401, 0xe162, 0x006d, 0xa106, 0xe41a, 0x15db,
+ 0xe42d, 0x2843, 0x2a85, 0xa803, 0xb612, 0xf02a, 0xba40, 0x3c83,
+ 0x2a83, 0x2885, 0xa802, 0xb636, 0x4445, 0xf02a, 0xba40, 0x3c84,
+ 0xe004, 0x005d, 0x3c78, 0x3c79, 0x2884, 0xf198, 0x287a, 0xa110,
+ 0xa203, 0xb601, 0xb806, 0xb611, 0xb472, 0xe000, 0x005d, 0x3c78,
+ 0x3c79, 0x2885, 0xa802, 0xf0b8, 0x287a, 0xa110, 0xa203, 0xb601,
+ 0xb806, 0xb611, 0xb472, 0xe000, 0x005d, 0x3c79, 0xba40, 0xe000,
+ 0x0059, 0x3c77, 0x2810, 0xa104, 0x2a85, 0xa803, 0xb632, 0x2a2f,
+ 0xb636, 0xe41a, 0x1346, 0xe42e, 0xe161, 0x0380, 0x2816, 0x3d11,
+ 0x2817, 0x3d11, 0x2819, 0x3d11, 0xe42e, 0xe161, 0x0380, 0x2816,
+ 0x1911, 0xf0a8, 0x2817, 0x1911, 0xf078, 0x2819, 0x1911, 0xf048,
+ 0xa200, 0x3cdb, 0xe42e, 0xa202, 0x3cdb, 0xe42e, 0x2857, 0xae10,
+ 0x4c55, 0xae10, 0x4c56, 0xcf24, 0xcf44, 0xcfc6, 0xcf04, 0xa200,
+ 0x4c46, 0xae02, 0x4c84, 0xae04, 0x4c10, 0xae02, 0x4c2d, 0xae04,
+ 0x4c4a, 0xae04, 0xe005, 0x004b, 0x0a51, 0xe093, 0x4d01, 0xae02,
+ 0x4c51, 0xae02, 0x4c52, 0xae04, 0x4c6c, 0xae02, 0x4c75, 0xae02,
+ 0x4c5f, 0xae02, 0x4c60, 0xae04, 0x4c64, 0xae04, 0x4c62, 0xae04,
+ 0x4c63, 0xae0a, 0x4c5d, 0xae0a, 0x4c5e, 0xcf46, 0xcfc8, 0xcf06,
+ 0xa200, 0x4c46, 0xae02, 0x4c84, 0xae02, 0x2a7a, 0xa111, 0xb42e,
+ 0xae04, 0x4c7f, 0xae04, 0x4c80, 0xae08, 0x4c81, 0xae02, 0x4c82,
+ 0xae02, 0x4c75, 0xae04, 0x4c76, 0xae0a, 0x4c7b, 0xae0a, 0x4c7c,
+ 0xae02, 0x4c7d, 0xae02, 0x4c7e, 0xae02, 0x2a77, 0xe003, 0x0059,
+ 0xe056, 0xae04, 0x2a78, 0xe003, 0x005d, 0xe056, 0xae04, 0x2a79,
+ 0xe003, 0x005d, 0xe056, 0xcf48, 0xcf64, 0xa200, 0x2a70, 0xe003,
+ 0x0041, 0xa83f, 0xe056, 0xae08, 0x2a74, 0xe003, 0x0024, 0xa81f,
+ 0xe056, 0xae04, 0x2a72, 0xe003, 0x001c, 0xa807, 0xe056, 0xae04,
+ 0x2a71, 0xe003, 0x0020, 0xa807, 0xe056, 0xae08, 0x2a73, 0xe003,
+ 0x0031, 0xa81f, 0xe056, 0xcf4a, 0xe0c1, 0x0046, 0xe004, 0x0000,
+ 0xae10, 0xe042, 0x2ab8, 0xa841, 0xf05b, 0xe161, 0x07de, 0x2111,
+ 0x4d11, 0x4c6d, 0xcf4c, 0xcf1a, 0xe0c1, 0x0046, 0xe004, 0x0010,
+ 0xae10, 0xe042, 0x2ab8, 0xa841, 0xf07b, 0xe161, 0x07de, 0x2111,
+ 0x4d11, 0x2ae5, 0xe042, 0x4c6e, 0xcf4e, 0xcf1c, 0xe0c1, 0x0046,
+ 0xe004, 0x0020, 0xae10, 0xe042, 0x2ab8, 0xa841, 0xf08b, 0xe161,
+ 0x07de, 0x2111, 0x4d11, 0x2ae5, 0xae03, 0xe042, 0x4c6f, 0xcf50,
+ 0xcf1e, 0xe0c1, 0x0046, 0xe004, 0x0030, 0xae10, 0xe042, 0x2ab8,
+ 0xa803, 0xf05b, 0xe161, 0x08f0, 0x2111, 0x4d11, 0xcf00, 0xe165,
+ 0x08c0, 0x2115, 0x4d15, 0xcf02, 0xe004, 0x0022, 0x2ab7, 0xa803,
+ 0xb616, 0x2ab7, 0xa841, 0xf03b, 0xe00a, 0x0011, 0xcf14, 0x2053,
+ 0x4c54, 0xcfc4, 0xe42e, 0xe082, 0xa104, 0xe400, 0x1638, 0x2855,
+ 0xae10, 0x4c56, 0xcf24, 0xd190, 0x0200, 0xcb20, 0xcb23, 0xe409,
+ 0x1638, 0xf7c8, 0xcb26, 0x3d02, 0xa100, 0xe42a, 0xa202, 0x3c6b,
+ 0xe180, 0xe180, 0x2855, 0xa01e, 0xaf08, 0x3c02, 0x8402, 0x8256,
+ 0xe018, 0xa008, 0xaf04, 0xae04, 0x3ce4, 0xae02, 0xe049, 0xe003,
+ 0x0100, 0xf063, 0xe005, 0x0100, 0xe004, 0x0200, 0xf06e, 0xe009,
+ 0x00ff, 0xf03b, 0xe003, 0x0100, 0xe046, 0x3ce5, 0xca28, 0xf7f8,
+ 0xe083, 0xa103, 0xa200, 0xb486, 0xb482, 0xae04, 0xe000, 0x0000,
+ 0xae10, 0xe0c1, 0x0046, 0xe042, 0x2ab8, 0xa841, 0xf0db, 0xe083,
+ 0xa103, 0xa200, 0xf045, 0x08e5, 0xf027, 0x08e5, 0xe163, 0x07de,
+ 0x2313, 0x4f13, 0xe042, 0xce20, 0xd111, 0x0200, 0x28e4, 0xce24,
+ 0x28b7, 0xa840, 0xa904, 0xce26, 0xca28, 0xf7f8, 0xe181, 0xe42e,
+ 0xd191, 0x0000, 0xe16b, 0xe42e, 0xe41e, 0x164e, 0xe41e, 0x16a7,
+ 0xe41e, 0x1770, 0x2857, 0xe428, 0xe41e, 0x0274, 0xa202, 0xe0c2,
+ 0x0106, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0x2810, 0xae08,
+ 0xa902, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x0128, 0x2aa5, 0x4ea4,
+ 0xb692, 0xae08, 0xa92c, 0xe0c2, 0x017c, 0xe004, 0x0014, 0xe0c2,
+ 0x017d, 0x2055, 0x4c56, 0xae08, 0x2a10, 0xa105, 0xf039, 0x2053,
+ 0x4c54, 0xe0c2, 0x0101, 0xa200, 0xe41e, 0x1a0c, 0xe0c2, 0x0102,
+ 0xe0c1, 0x0046, 0xe004, 0x0050, 0xae10, 0xe042, 0x2ab8, 0xa805,
+ 0xf05b, 0xe161, 0x08f2, 0x2111, 0x4d11, 0xe0c2, 0x0103, 0xe004,
+ 0x004b, 0x0851, 0xe092, 0x2901, 0xae04, 0x4c4a, 0xae02, 0x4c52,
+ 0xe0c2, 0x0104, 0xa200, 0x2a6c, 0xa101, 0xb432, 0xe0c2, 0x0105,
+ 0xe42e, 0x2810, 0xae08, 0xa902, 0xe0c2, 0x0100, 0x2aa5, 0x4ea4,
+ 0xb692, 0xae08, 0xa92c, 0xe0c2, 0x017c, 0xe004, 0x0014, 0xe0c2,
+ 0x017d, 0xa200, 0xe41e, 0x1a0c, 0xe0c2, 0x0102, 0xe42e, 0xa200,
+ 0xe0c2, 0x0320, 0xe165, 0x08d0, 0x2b15, 0xa803, 0xb452, 0x2b15,
+ 0xa803, 0xb432, 0xae04, 0x2b15, 0xa803, 0xb452, 0x2b15, 0xa803,
+ 0xb432, 0xae04, 0x2b15, 0xa803, 0xb452, 0x2b15, 0xa803, 0xb432,
+ 0xae04, 0x2b15, 0xa803, 0xb452, 0x2b15, 0xa803, 0xb432, 0xae04,
+ 0xc420, 0xe165, 0x08dc, 0x2b35, 0xaf0f, 0xa803, 0xb452, 0x2b35,
+ 0xaf0f, 0xa803, 0xb432, 0xae04, 0x2a64, 0xb456, 0xa803, 0xb432,
+ 0xae02, 0x4c61, 0xe0c2, 0x0303, 0xe165, 0x08d0, 0xe166, 0x0304,
+ 0xd022, 0x0003, 0xe184, 0x16ea, 0x2915, 0xaf02, 0xae18, 0x2b15,
+ 0xaf03, 0xe042, 0x9f16, 0xc420, 0xe165, 0x08dd, 0xa200, 0x2b35,
+ 0xaf0d, 0xa807, 0xa101, 0xb673, 0xe042, 0x2b35, 0xaf0d, 0xa807,
+ 0xa101, 0xb673, 0xae05, 0xe042, 0xe0c2, 0x0308, 0x2857, 0xe428,
+ 0xa202, 0xe0c2, 0x0302, 0xe165, 0x08c8, 0x2905, 0xf082, 0xe165,
+ 0x08c9, 0x2905, 0xf042, 0xe165, 0x08c7, 0x2905, 0xe0c2, 0x0380,
+ 0x3ce7, 0xe165, 0x08c9, 0x2905, 0xf082, 0xe165, 0x08c8, 0x2905,
+ 0xf042, 0xe165, 0x08c7, 0x2905, 0xe0c2, 0x0383, 0x3ce8, 0xe165,
+ 0x08c7, 0x2905, 0xe0c2, 0x0386, 0x2a51, 0xf02b, 0x3ce8, 0xa200,
+ 0xe0c2, 0x0302, 0xa20e, 0xe0c2, 0x0312, 0xe0c0, 0x0414, 0xe418,
+ 0x018c, 0xe0c0, 0x0414, 0xe41a, 0x1736, 0xe42e, 0xe167, 0x01a0,
+ 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17, 0xe009, 0x00ff, 0xae21,
+ 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101, 0xe0c3, 0x015d, 0x2a4b,
+ 0x2852, 0xf02a, 0x2a4c, 0xa107, 0xe004, 0x001b, 0xf039, 0xe004,
+ 0x001f, 0x3c00, 0x28e7, 0xa53e, 0xa400, 0x2ae8, 0xa53f, 0xa401,
+ 0xae11, 0xe055, 0xae21, 0xe167, 0x01a2, 0x2907, 0xaf10, 0x4400,
+ 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0, 0x0150,
+ 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xe42e,
+ 0xa202, 0xae04, 0x2a10, 0xa807, 0xe056, 0xae04, 0xe005, 0x004b,
+ 0x0a51, 0xe093, 0x2b01, 0xa807, 0xe056, 0xae04, 0x2a4a, 0xa807,
+ 0xe056, 0xae02, 0x2a52, 0xa803, 0xe056, 0xe0c2, 0x0204, 0xa204,
+ 0x2a6c, 0xa101, 0xb612, 0x2a2c, 0xb612, 0xe162, 0x08d8, 0x2b02,
+ 0xa811, 0xb612, 0x2a6c, 0xa101, 0xb492, 0xe0c2, 0x0208, 0xe0c1,
+ 0x0046, 0xe004, 0x0090, 0xae10, 0xe042, 0x2ab8, 0xa821, 0xf05b,
+ 0xe161, 0x07dc, 0x2111, 0x4d11, 0xe0c2, 0x0209, 0xa204, 0x2a6c,
+ 0xa101, 0xb612, 0x2a2c, 0xb612, 0xe162, 0x08d8, 0x2b02, 0xa811,
+ 0xb612, 0x4c2c, 0xe0c2, 0x0210, 0xe0c1, 0x0046, 0xe004, 0x00e0,
+ 0xae10, 0xe042, 0x2ab8, 0xa809, 0xf05b, 0xe161, 0x08f4, 0x2111,
+ 0x4d11, 0xe0c2, 0x0211, 0xe0c1, 0x0046, 0xe004, 0x00e0, 0xe000,
+ 0x0080, 0xae10, 0xe042, 0x2ab8, 0xa811, 0xf05b, 0xe161, 0x08f6,
+ 0x2111, 0x4d11, 0xe0c2, 0x0212, 0x2053, 0x4c54, 0xe0c2, 0x0205,
+ 0xa204, 0xe163, 0x08c7, 0xe164, 0x08cf, 0x2b03, 0x1b04, 0xb616,
+ 0x2b04, 0xb64a, 0xae0e, 0xe41e, 0x1a0c, 0xe0c2, 0x0213, 0xa200,
+ 0xe162, 0x08d8, 0xe164, 0x08cf, 0x2b02, 0xaf07, 0xa803, 0xb672,
+ 0x2b04, 0xb60a, 0xae0e, 0xe41e, 0x1a0c, 0xe0c2, 0x0215, 0xe165,
+ 0x08c7, 0x2905, 0xe0c2, 0x020b, 0xe0c2, 0x0214, 0xe41e, 0x1aac,
+ 0xe162, 0x08d8, 0xe163, 0x08c7, 0xe164, 0x08cf, 0xa200, 0x2b02,
+ 0xaf0f, 0xa803, 0xb432, 0xae10, 0x2b02, 0xaf11, 0xe009, 0x00ff,
+ 0xe056, 0x2b04, 0xb60a, 0xe0c2, 0x0218, 0xe425, 0xe165, 0x08cf,
+ 0x2905, 0xe0c2, 0x0216, 0xe41e, 0x1aac, 0xe42e, 0xe162, 0x08cb,
+ 0xe163, 0x08e8, 0xe164, 0x08e9, 0xe165, 0x08ea, 0xa200, 0x2b03,
+ 0xa805, 0xb632, 0x2b02, 0xb60a, 0x3ca7, 0xe42a, 0xe004, 0x012c,
+ 0xe0c2, 0x017f, 0xa200, 0xe41e, 0x1a0c, 0xe0c2, 0x017f, 0x2915,
+ 0xe008, 0x7fff, 0xa01e, 0xaf08, 0x3ca8, 0x2915, 0xe008, 0x7fff,
+ 0xa01e, 0xaf08, 0x3ca9, 0x84a8, 0x82a9, 0xe018, 0x3cad, 0xa200,
+ 0x3caa, 0x3cab, 0x3cac, 0x28a8, 0xa102, 0xae20, 0x4ca9, 0xa102,
+ 0xe0c2, 0x0142, 0x2903, 0xaf0e, 0xa200, 0xe0c2, 0x0149, 0x2904,
+ 0xaf1e, 0xa802, 0xae08, 0x2b04, 0xaf15, 0xa81f, 0xe056, 0xe0c2,
+ 0x014e, 0x289c, 0xe000, 0x08cb, 0xe09a, 0x2905, 0xe0c2, 0x0143,
+ 0xe41e, 0x1ac7, 0x2b03, 0xa805, 0xf079, 0xe165, 0x08cb, 0x2905,
+ 0xe0c2, 0x0144, 0xf06e, 0xe0c0, 0x0061, 0xa87e, 0xe0c2, 0x0144,
+ 0xe42e, 0x28a7, 0xe42a, 0xe41e, 0x1890, 0xf7e8, 0xe0c0, 0x014b,
+ 0xf7e8, 0xa200, 0xa904, 0xae0e, 0x4caa, 0xae0e, 0x4cab, 0xe0c2,
+ 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe0c0, 0x014b, 0xf7e8, 0xe42e,
+ 0xa200, 0x2aac, 0x1aad, 0xe423, 0xe0c0, 0x014b, 0xf7e8, 0xa200,
+ 0x2aac, 0xb422, 0xae02, 0x2aac, 0x1aad, 0xb42a, 0xae0e, 0x4caa,
+ 0xae0e, 0x4cab, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xa202,
+ 0x2aac, 0xa003, 0x3eac, 0x2aaa, 0xa003, 0x3eaa, 0x1aa8, 0xe425,
+ 0xa201, 0x3eaa, 0x2aab, 0xa003, 0x3eab, 0x1aa9, 0xe425, 0xa200,
+ 0xe42e, 0xe0c0, 0x0065, 0xe008, 0x0100, 0xe42a, 0xca28, 0xf7f8,
+ 0xe0c0, 0x006a, 0xce20, 0xd111, 0x0300, 0xd112, 0x0004, 0xd113,
+ 0x0003, 0xca28, 0xf7f8, 0xe161, 0x0300, 0xe162, 0x08fa, 0xa202,
+ 0xae30, 0xa920, 0x3511, 0x3d11, 0x2111, 0x4d11, 0x3512, 0x3d12,
+ 0xca28, 0xf7f8, 0xe0c0, 0x006a, 0xce20, 0xd111, 0x0300, 0xd112,
+ 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0065,
+ 0xaf10, 0xa802, 0xe42a, 0xe161, 0x0300, 0xe163, 0x08c3, 0xe164,
+ 0x08c5, 0xa200, 0x3c01, 0xd022, 0x0007, 0xe184, 0x1908, 0xa200,
+ 0xae08, 0x2313, 0x4f0b, 0x5e01, 0xa803, 0xb452, 0x2314, 0x4f0c,
+ 0x5e01, 0xa803, 0xb492, 0x2a01, 0xa003, 0x3e01, 0xa807, 0xf719,
+ 0x3d11, 0xe162, 0x08c7, 0x2902, 0xf0f4, 0xaf04, 0xe000, 0x0300,
+ 0xe092, 0xa218, 0x2b02, 0xa807, 0xae05, 0xe046, 0x3c01, 0xa202,
+ 0x5801, 0x4d01, 0x3d01, 0xe180, 0xe180, 0xca28, 0xf7f8, 0xe162,
+ 0x08fa, 0x2112, 0x4d12, 0xce20, 0xd111, 0x0300, 0xd112, 0x0008,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe42e, 0xe0c0, 0x0065,
+ 0xaf0a, 0xa802, 0xe42a, 0xa200, 0x3ce1, 0x3ce2, 0x3ce3, 0xe162,
+ 0x0300, 0x3d12, 0x3d12, 0x3d12, 0x3d12, 0xca28, 0xf7f8, 0xe0c0,
+ 0x006b, 0xce20, 0xd111, 0x0300, 0xd112, 0x0004, 0xd113, 0x0000,
+ 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0065, 0xaf0a, 0xa802, 0xe42a,
+ 0x2ce1, 0xa87e, 0xa120, 0xe422, 0xa200, 0xe41e, 0x19a5, 0x28d4,
+ 0xf7ca, 0x20d7, 0x4cd6, 0xc871, 0xaf07, 0xe046, 0xf760, 0xa202,
+ 0xe41e, 0x19a5, 0x2ce1, 0xa002, 0x3ce1, 0xe161, 0x0300, 0x28d3,
+ 0x3d11, 0xc870, 0xaf06, 0x3d11, 0xa200, 0x3d11, 0x3d11, 0xc870,
+ 0xaf16, 0xf09a, 0xa220, 0x3ce1, 0xe161, 0x0301, 0xa200, 0x3d11,
+ 0x3d11, 0x3d11, 0xca28, 0xf7f8, 0xe0c0, 0x006b, 0x2ee1, 0xa87f,
+ 0xae07, 0xe042, 0xce20, 0xd111, 0x0300, 0xd112, 0x0004, 0xd113,
+ 0x0000, 0xca28, 0xf7f8, 0xe161, 0x0300, 0x2ce1, 0xa87e, 0x3d11,
+ 0x2ce2, 0x3d11, 0x2ce1, 0xaf10, 0x3d11, 0xa200, 0x3d11, 0xca28,
+ 0xf7f8, 0xe0c0, 0x006b, 0xce20, 0xd111, 0x0300, 0xd112, 0x0004,
+ 0xd113, 0x0000, 0xca28, 0xf7f8, 0xe42e, 0xf278, 0xe0c0, 0x006c,
+ 0x1ce3, 0xf2c0, 0xe0c0, 0x0065, 0xaf14, 0xa802, 0xf068, 0xe0c0,
+ 0x005c, 0xe008, 0x0200, 0xf098, 0xba4e, 0x2ce1, 0xa87e, 0xa203,
+ 0xae11, 0xe042, 0x3ce1, 0xe42e, 0xe0c0, 0x005d, 0xe00a, 0x0200,
+ 0xe0c2, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x005d, 0xe008, 0x0200,
+ 0xf7c8, 0xa200, 0x3ce3, 0xf0ae, 0x2ce3, 0xa80e, 0xe42a, 0x2ce3,
+ 0xa00e, 0xaf06, 0xae06, 0x3ce3, 0xf20e, 0x2ce3, 0xa80e, 0xf088,
+ 0xe161, 0x0300, 0xa200, 0x3d11, 0x3d11, 0x3d11, 0x3d11, 0x2ce3,
+ 0xa80e, 0xaf02, 0xe000, 0x0300, 0xe092, 0x2ce3, 0xa802, 0xf058,
+ 0xba4e, 0xae10, 0x3d11, 0xf04e, 0xba4e, 0x4d01, 0x3d11, 0x2ce3,
+ 0xa002, 0x3ce3, 0xa80e, 0xe428, 0xca28, 0xf7f8, 0xe0c0, 0x006b,
+ 0xe000, 0x0088, 0x2ee3, 0xa103, 0xaf07, 0xae07, 0xe042, 0xce20,
+ 0xd111, 0x0300, 0xd112, 0x0004, 0xd113, 0x0000, 0xca28, 0xf7f8,
+ 0x2ce2, 0xa010, 0x3ce2, 0xe42e, 0xe0c1, 0x0044, 0xa80f, 0xe056,
+ 0xe42e, 0xa200, 0xe41e, 0x1a0c, 0xe42e, 0xe0c1, 0x0044, 0xaf0d,
+ 0xae03, 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105, 0xf039,
+ 0xa213, 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1,
+ 0x0420, 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166, 0x0800, 0xe167,
+ 0x0500, 0x2898, 0xf1b6, 0xa102, 0xcc44, 0xe184, 0x1a54, 0xa200,
+ 0xe41e, 0x1a0c, 0xaf04, 0xe41e, 0x1a15, 0xae20, 0x2eb4, 0xe056,
+ 0x9f17, 0x2055, 0x4c56, 0xae08, 0x2a10, 0xa105, 0xf039, 0x2053,
+ 0x4c54, 0x9f17, 0xe41e, 0x1a5a, 0xe190, 0xe190, 0xa201, 0xe0c3,
+ 0x040d, 0xe42e, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17,
+ 0x2116, 0x4d16, 0x9f17, 0xe42e, 0xe0c0, 0x0044, 0xaf20, 0xa802,
+ 0xe428, 0xe0c0, 0x0060, 0xa860, 0xe42a, 0xe0c0, 0x0061, 0xa83e,
+ 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500,
+ 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e, 0x1a11,
+ 0xa80e, 0xaf04, 0xe41e, 0x1a15, 0xe41e, 0x1a1d, 0xe40b, 0x1a8d,
+ 0xa81e, 0xe41e, 0x1a22, 0xae09, 0xe056, 0xae20, 0xe0c1, 0x006e,
+ 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0, 0x0060, 0xa822, 0xa122,
+ 0xf04a, 0x20a2, 0x4ca3, 0xf03e, 0x20a3, 0x4ca2, 0x9f17, 0xe0c0,
+ 0x0062, 0x9f17, 0xe0c0, 0x0063, 0x9f17, 0xe0c0, 0x0064, 0x9f17,
+ 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x3c00, 0xa202, 0xe0c2, 0x040d,
+ 0xe0c0, 0x0420, 0xa802, 0xf7da, 0x8400, 0xc785, 0xe018, 0xe000,
+ 0x0501, 0xe09e, 0x2055, 0x4c56, 0xae08, 0x2a10, 0xa105, 0xf039,
+ 0x2053, 0x4c54, 0x9f07, 0xa200, 0xe0c2, 0x040d, 0xe42e, 0x3c00,
+ 0xa202, 0xe0c2, 0x040d, 0xe0c0, 0x0420, 0xa802, 0xf7da, 0x8400,
+ 0xc785, 0xe018, 0xe000, 0x0501, 0xe09e, 0x20a8, 0x4ca9, 0xae08,
+ 0x2a10, 0xa105, 0xf0b9, 0xe165, 0x08ea, 0x2915, 0xe008, 0x7fff,
+ 0xae20, 0x2b15, 0xe009, 0x7fff, 0xe056, 0x9f07, 0xa200, 0xe0c2,
+ 0x040d, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x0800, 0xd112, 0x00c0, 0x88ec, 0x0113,
+ 0xca29, 0xf7f9, 0xe190, 0xe42e, 0x2887, 0xae10, 0x4c88, 0xcf52,
+ 0xcfca, 0xcf08, 0xd18c, 0x0001, 0xd18b, 0x0000, 0xcb16, 0xf7f8,
+ 0xd1e1, 0x0000, 0xcbc2, 0xf7f8, 0xe42e, 0xcb18, 0xf7f8, 0xd18b,
+ 0x0001, 0xd1e1, 0x0001, 0xcb16, 0xcbc3, 0xf7e8, 0xf7d9, 0xe42e,
+ 0xe41e, 0x1afc, 0xf12d, 0xd1a0, 0x0001, 0xcb40, 0xcb43, 0xf0a9,
+ 0xf7d8, 0xf08d, 0xcb54, 0xcf66, 0xcf0a, 0xcfd0, 0xcb56, 0xcf6c,
+ 0xe42e, 0xd1a1, 0x0000, 0xe16b, 0xd1a0, 0x0000, 0xcb40, 0xf7f8,
+ 0xf72e, 0xe42e, 0xf17d, 0xd1b0, 0x0001, 0xe180, 0xe180, 0x28d9,
+ 0xe41a, 0x06a0, 0xe181, 0xe41e, 0x1b56, 0xcb60, 0xcb63, 0xf089,
+ 0xf7d8, 0xf06d, 0xcb68, 0xcf0e, 0xcb6a, 0xcf10, 0xe42e, 0xd1e0,
+ 0x0000, 0xe41e, 0x1b56, 0xd1b1, 0x0000, 0xa200, 0xcf0e, 0xcf10,
+ 0xe0c0, 0x0124, 0xe0c2, 0x0124, 0xe16b, 0xe42e, 0xa200, 0xe0c2,
+ 0x0113, 0xcb90, 0xe0c2, 0x030d, 0xcb88, 0xe0c2, 0x0114, 0xcb8a,
+ 0xe0c2, 0x0115, 0xcb8c, 0xe0c2, 0x0130, 0x2888, 0x1857, 0x4c87,
+ 0xe016, 0xe0c2, 0x0131, 0xcb8e, 0xe0c2, 0x012a, 0xcb82, 0xe0c2,
+ 0x0221, 0xcb84, 0xe0c2, 0x0220, 0x287b, 0xe0c2, 0x022c, 0xcbd0,
+ 0xf7f8, 0xcb92, 0xe0c2, 0x030f, 0xf0da, 0xcbd2, 0xe0c2, 0x0309,
+ 0xcbd4, 0xe0c2, 0x030c, 0xcbd6, 0xe0c2, 0x030a, 0xcbd8, 0xe0c2,
+ 0x030b, 0xe42e, 0xcb80, 0xe0c2, 0x0116, 0xcbda, 0xcf12, 0xe161,
+ 0x0224, 0xd022, 0x0007, 0xd186, 0x0000, 0xe184, 0x1b98, 0xcb86,
+ 0x9f11, 0xe41e, 0x1b0d, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2,
+ 0x0110, 0xe42e, 0x2895, 0xb43a, 0x3c95, 0x2896, 0xe42a, 0xf0fc,
+ 0x2888, 0xae0e, 0x0887, 0xaf08, 0xe000, 0x0670, 0xe098, 0x2887,
+ 0xa81e, 0x3c00, 0xa202, 0x5800, 0x4d04, 0x3d04, 0x2887, 0xa1aa,
+ 0xe424, 0x2888, 0xa1ac, 0x2a88, 0xa80f, 0xa10f, 0xb636, 0xe424,
+ 0xe0c0, 0x0042, 0x2a88, 0xaf07, 0xae0f, 0xe042, 0xe180, 0xe180,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0670, 0xd112, 0x0040, 0xd113,
+ 0x0002, 0xca29, 0xf7f9, 0xe181, 0xe164, 0x0670, 0xa200, 0xc73f,
+ 0x3d14, 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0001, 0x000c, 0x000a, 0x0010, 0x0028, 0x0018, 0x0014,
+ 0x0020, 0x0050, 0x0012, 0x000f, 0x0040, 0x00a0, 0x0000, 0x0000,
+ 0x0000, 0x0001, 0x000b, 0x000b, 0x000b, 0x0021, 0x000b, 0x000b,
+ 0x000b, 0x0021, 0x000b, 0x000b, 0x0021, 0x0063, 0x0000, 0x0000,
+ 0x0000, 0x0018, 0x0019, 0x001e, 0x0032, 0x003c, 0x0030, 0x0048,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c54, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1855, 0xf074, 0xe009, 0x00ff, 0x1a56, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x11ed, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0368,
+ 0xe40e, 0x036a, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x04b3, 0xe40e, 0x00a4,
+ 0xe41e, 0x04d9, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x04da,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x0557, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe41e, 0x05f4, 0xe40e, 0x00a4, 0xe0c0, 0x0059,
+ 0xa102, 0xf28a, 0xa102, 0xe42a, 0xa102, 0xf05a, 0xa102, 0xe40a,
+ 0x03ac, 0xe42e, 0xe0c0, 0x0060, 0xaf08, 0x30c1, 0xaf02, 0x30c2,
+ 0xe0c0, 0x0060, 0xa81e, 0x3cc0, 0xe0c0, 0x0061, 0xa83e, 0x3cc4,
+ 0xe0c0, 0x0065, 0xaf04, 0x30a5, 0xe0c0, 0x0065, 0xaf06, 0xa806,
+ 0x3ca3, 0xe0c0, 0x0065, 0xaf0a, 0x30d8, 0xe0c0, 0x0066, 0x3ca4,
+ 0xe42e, 0xc001, 0xe0c0, 0x0060, 0x3400, 0x3c01, 0xe0c0, 0x0061,
+ 0xae14, 0x3406, 0x3c07, 0xc000, 0xe0c0, 0x0062, 0x3009, 0xe0c0,
+ 0x0065, 0xaf0a, 0x30d8, 0xe42e, 0xe41e, 0x05d2, 0xe41e, 0x0174,
+ 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0200, 0xd112,
+ 0x00c0, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0x3ca8,
+ 0xe0c0, 0x0061, 0x3ca9, 0xe0c0, 0x006e, 0xe41e, 0x020a, 0xe42e,
+ 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x043b, 0xa102, 0xe42a, 0xa102,
+ 0xf05a, 0xa102, 0xe40a, 0x047e, 0xe42e, 0x245d, 0x4c5e, 0xe0c2,
+ 0x006f, 0x285b, 0xe0c2, 0x007a, 0x20a6, 0x4ca7, 0xa002, 0x34a6,
+ 0x3ca7, 0xe0c2, 0x0070, 0x28a2, 0xe0c2, 0x0071, 0x28a0, 0xe0c2,
+ 0x0072, 0xe41e, 0x0497, 0xe0c2, 0x0073, 0xa200, 0xe0c2, 0x0074,
+ 0x280c, 0x2ad9, 0xae21, 0xe056, 0x2a4f, 0xae23, 0xe056, 0x2ada,
+ 0xae29, 0xe056, 0xe0c2, 0x0076, 0xe41e, 0x0634, 0xe0c2, 0x0051,
+ 0xe41e, 0x0637, 0xe0c2, 0x0052, 0x28a1, 0xe0c2, 0x0077, 0x2aaa,
+ 0xe161, 0x02d8, 0x2111, 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0078,
+ 0x2111, 0x4d11, 0xf02b, 0xae02, 0xe0c2, 0x0079, 0x20ab, 0x4cac,
+ 0xe0c2, 0x007c, 0xe167, 0x02dc, 0x2117, 0x4d17, 0xe0c2, 0x007e,
+ 0x2117, 0x4d17, 0xe0c2, 0x007d, 0x28d4, 0xae20, 0x4cd5, 0x2ad1,
+ 0xa807, 0xb7f6, 0xe0c2, 0x0078, 0x28d2, 0xae20, 0x4cd3, 0x2ad1,
+ 0xa819, 0xb7f6, 0xe0c2, 0x0079, 0xc84a, 0xc84d, 0xae20, 0xe056,
+ 0xe0c2, 0x0053, 0xe42e, 0xa200, 0xe0c2, 0x006d, 0x280c, 0xe0c2,
+ 0x0070, 0x245d, 0x4c5e, 0xe0c2, 0x0071, 0x20ab, 0x4cac, 0xe0c2,
+ 0x0072, 0xa208, 0x0809, 0xe0c2, 0x0073, 0xa202, 0x3cb3, 0x28b3,
+ 0xe0c2, 0x0074, 0xa200, 0xe0c2, 0x0075, 0xa200, 0xe0c2, 0x0076,
+ 0xa200, 0xe0c2, 0x0077, 0x280c, 0xe016, 0x58f0, 0xe0c2, 0x0078,
+ 0xe161, 0x02dc, 0x2111, 0x4d11, 0xe0c2, 0x007a, 0x2111, 0x4d11,
+ 0xe0c2, 0x0079, 0x2881, 0xae1c, 0x2a82, 0xe056, 0xae02, 0x2a80,
+ 0xe056, 0xe0c2, 0x006e, 0x2826, 0xe016, 0xae10, 0x4c2d, 0xae10,
+ 0x4c2c, 0xe0c2, 0x007b, 0xe41e, 0x047f, 0xe42e, 0xe42e, 0xe0c0,
+ 0x0065, 0xaf0a, 0xa802, 0xf13a, 0xe162, 0x04c8, 0x2ce4, 0x3d12,
+ 0x2ce5, 0x3d12, 0xe0c0, 0x006b, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x04c8, 0xd112, 0x0004, 0xd113, 0x0000, 0xe1e1, 0xe42e, 0x2826,
+ 0xae02, 0x4c3c, 0xae06, 0x4cd7, 0x2a43, 0xae07, 0x4e34, 0xae04,
+ 0x4c3e, 0xae02, 0x4c3a, 0xae02, 0x4c39, 0xae04, 0x4c3d, 0xae02,
+ 0x4c32, 0xae24, 0xe056, 0x2a73, 0xe40b, 0x04b2, 0xa205, 0x1a33,
+ 0xae21, 0xe056, 0xe42e, 0xa200, 0x3c0c, 0xa200, 0xcc4a, 0xcc4c,
+ 0xe41e, 0x05de, 0xe41e, 0x061f, 0xe41e, 0x036e, 0xa200, 0x3c0c,
+ 0xe41e, 0x0f17, 0xe41e, 0x0900, 0xf0dd, 0xe41e, 0x0914, 0xe41e,
+ 0x0bd4, 0xe41e, 0x0aab, 0xf06d, 0xe41e, 0x0580, 0xf03a, 0xa202,
+ 0x3c0c, 0xe41e, 0x0a4b, 0xe41e, 0x1138, 0xe41e, 0x03c8, 0xe16a,
+ 0xe42e, 0xe42e, 0xa202, 0x3c0c, 0xe41e, 0x036e, 0xe41e, 0x06a0,
+ 0xe41e, 0x055e, 0xe41e, 0x1435, 0xe41e, 0x1468, 0xe41e, 0x060d,
+ 0xe41e, 0x1236, 0xe41e, 0x14c9, 0xe41e, 0x0f21, 0xe41e, 0x0580,
+ 0xe40a, 0x0530, 0xe41e, 0x0986, 0xe40a, 0x0530, 0xf0a0, 0x283b,
+ 0xe016, 0x4432, 0x2a32, 0x563b, 0x3e3b, 0xf758, 0xe40e, 0x0530,
+ 0xe41e, 0x020f, 0xe404, 0x0530, 0xe41e, 0x0a54, 0xf0da, 0xe41e,
+ 0x0a4b, 0xe41e, 0x0680, 0xe41e, 0x0643, 0xa2fe, 0x3ca1, 0xa202,
+ 0x3cd9, 0xe40e, 0x0530, 0xe41e, 0x0620, 0xe408, 0x0530, 0xe41e,
+ 0x0625, 0x283b, 0xe41a, 0x070e, 0xe404, 0x054e, 0x283b, 0xe41a,
+ 0x0749, 0xe41e, 0x078b, 0x283b, 0xe41a, 0x064d, 0x2832, 0x543b,
+ 0x3c3b, 0xf07a, 0x2834, 0x3c43, 0x2840, 0x3c44, 0xe40e, 0x04f2,
+ 0xe41e, 0x1522, 0x2a90, 0xf0c5, 0x2891, 0xe046, 0xf024, 0xf05e,
+ 0x2a91, 0x2890, 0x3c91, 0x3e90, 0x2891, 0xe41e, 0x0813, 0xe41e,
+ 0x062d, 0xa200, 0xe41e, 0x1385, 0xe41e, 0x0eea, 0xf05a, 0xe41e,
+ 0x0680, 0xa200, 0x3cb3, 0xe41e, 0x0662, 0x3ca2, 0x28a2, 0x3cb4,
+ 0xe41e, 0x03c8, 0xe41e, 0x06b5, 0xe41e, 0x1138, 0xe42e, 0xe41e,
+ 0x036e, 0xe41e, 0x14c3, 0xe41e, 0x076d, 0xe42e, 0xa2fe, 0x3c46,
+ 0x3c5c, 0xa200, 0x3ca0, 0x3c3b, 0x3c43, 0x3c44, 0x3ce4, 0x3cd1,
+ 0x3cd2, 0x3cd3, 0x3cd4, 0x3cd5, 0x3cd6, 0xa200, 0x3cb9, 0x3cd9,
+ 0x3cda, 0xe41e, 0x0626, 0xe41e, 0x062d, 0xa2fc, 0x3ca1, 0xa2fa,
+ 0x3ca2, 0x2872, 0x2a73, 0xb616, 0x3c72, 0xa2fe, 0x3c90, 0xe42e,
+ 0xa202, 0x3cf0, 0x2855, 0xe406, 0x05d0, 0xe002, 0x0078, 0xe400,
+ 0x05d0, 0xa204, 0x3cf0, 0x2856, 0xe406, 0x05d0, 0xe002, 0x0078,
+ 0xe400, 0x05d0, 0x2854, 0xe002, 0x1fe0, 0xf3b0, 0xe0c0, 0x0059,
+ 0xa106, 0xf358, 0xe41e, 0x0ed0, 0xf04a, 0xe41e, 0x01db, 0xf31e,
+ 0x28b7, 0x3cb8, 0x2809, 0xf0ba, 0xe41e, 0x06cb, 0x3c11, 0xe41e,
+ 0x06cb, 0x3c14, 0x2811, 0x2a14, 0xb7ea, 0xf07e, 0xa2fa, 0x3c11,
+ 0xe41e, 0x06cb, 0x3c14, 0x2814, 0x2aa1, 0xb7e9, 0x3ea1, 0x2811,
+ 0xe41e, 0x06f6, 0x2811, 0xe41e, 0x06fe, 0x2811, 0xe41e, 0x0706,
+ 0x2814, 0xe41e, 0x06f6, 0x2814, 0xe41e, 0x06fe, 0x2814, 0xe41e,
+ 0x0706, 0x28b8, 0x3cb7, 0x28a1, 0xa002, 0xf03a, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0xe167, 0x02d0, 0xe166, 0x0064, 0xd022, 0x0003,
+ 0xe184, 0x05dc, 0x9e16, 0x3517, 0x3d17, 0xe42e, 0xe41e, 0x0148,
+ 0xe16a, 0xd130, 0x0002, 0xa2fe, 0x34a6, 0x3ca7, 0x3c28, 0xa200,
+ 0x3caa, 0xe161, 0x02d8, 0xc703, 0x3d11, 0x3cab, 0x3cac, 0xe161,
+ 0x02dc, 0xc703, 0x3d11, 0xe42e, 0xe41e, 0x076d, 0xa200, 0x3e0c,
+ 0xe167, 0x0310, 0xe166, 0x0054, 0xa200, 0x3c00, 0x28a8, 0xa102,
+ 0xcc44, 0xe184, 0x060a, 0x9e06, 0x5c00, 0xa802, 0xb690, 0x3d17,
+ 0x2800, 0xa002, 0x3c00, 0xe190, 0xe42e, 0xa200, 0xcc44, 0xcc4a,
+ 0xcc4c, 0xcc72, 0xd130, 0x0002, 0xd03a, 0x0002, 0xd04b, 0x0001,
+ 0xd04c, 0x0000, 0xd008, 0x0000, 0xe41e, 0x025f, 0xe42e, 0xe42e,
+ 0x2a3b, 0x2873, 0xb611, 0x3e3b, 0xe42e, 0xe42e, 0xe41e, 0x1121,
+ 0xe0c0, 0x0048, 0x34ba, 0x3cbb, 0xe42e, 0xe41e, 0x1121, 0xe0c0,
+ 0x0048, 0x34bc, 0x3cbd, 0xe42e, 0x24ba, 0x4cbb, 0xe42e, 0x24bc,
+ 0x4cbd, 0xe42e, 0xe41e, 0x1121, 0xc001, 0xe0c0, 0x0048, 0x341b,
+ 0x3c1c, 0xc000, 0xe42e, 0xa200, 0xceaa, 0xc001, 0x241b, 0x4c1c,
+ 0xc000, 0xe0c2, 0x0048, 0xe42e, 0xe42e, 0x2809, 0xf088, 0x2a42,
+ 0x28a1, 0xf0b9, 0xe166, 0x0301, 0x2916, 0xf07e, 0x2a42, 0x28a1,
+ 0xf049, 0x28d0, 0x2aa1, 0x3ed0, 0x3cb6, 0xe41e, 0x06fe, 0xe41e,
+ 0x068e, 0xe42e, 0x28b3, 0xf04a, 0xa102, 0x3cb3, 0xf14e, 0x28b2,
+ 0xf12a, 0x28b1, 0xe000, 0x02e0, 0xe092, 0x28b1, 0xa002, 0x3cb1,
+ 0xa122, 0xf028, 0x3cb1, 0x28b2, 0xa102, 0x3cb2, 0x2901, 0xe049,
+ 0x1aa8, 0xe425, 0xe41e, 0x0eea, 0xe049, 0xa2fa, 0xb7f2, 0xe42e,
+ 0xa200, 0x3c42, 0xa202, 0x3c41, 0xa2fc, 0x3c14, 0x3ca1, 0xe41e,
+ 0x0749, 0xe41e, 0x064d, 0x28b6, 0xe424, 0xf73e, 0x28b6, 0xe424,
+ 0x28b0, 0xe000, 0x02e0, 0xe092, 0x28b6, 0x3d01, 0x28b0, 0xa002,
+ 0x3cb0, 0xa122, 0xf028, 0x3cb0, 0x28b2, 0xa002, 0x3cb2, 0xe42e,
+ 0xa200, 0x3c00, 0xe004, 0x0054, 0xe09c, 0x28a8, 0xa102, 0xcc44,
+ 0xe184, 0x06b3, 0x9e06, 0x5c00, 0xa802, 0xf048, 0x2800, 0xe41e,
+ 0x0706, 0x2a00, 0xa003, 0x3e00, 0xe42e, 0xe167, 0x0310, 0xe004,
+ 0x0054, 0xe09c, 0x28a8, 0xa102, 0xcc44, 0xa200, 0x3c00, 0xe184,
+ 0x06c8, 0x2b17, 0xaf05, 0xa803, 0x5a00, 0xe056, 0x2a00, 0xa003,
+ 0x3e00, 0x9f06, 0xe42e, 0x28b7, 0x3c00, 0x2800, 0xe000, 0x0310,
+ 0xe092, 0x2901, 0xf0da, 0x2800, 0xa002, 0x3c00, 0x18a8, 0xf038,
+ 0xa200, 0x3c00, 0x2800, 0x18b7, 0xf718, 0xa2fe, 0xe42e, 0xa20e,
+ 0x3d01, 0x2800, 0xa002, 0x3cb7, 0x18a8, 0xf038, 0xa200, 0x3cb7,
+ 0x2800, 0xe42e, 0xe161, 0x0310, 0x28a8, 0xa102, 0xcc44, 0xe184,
+ 0x06f4, 0x2911, 0xe016, 0xe428, 0xe190, 0xe42e, 0xe424, 0xe000,
+ 0x0310, 0xe092, 0x2901, 0xa80c, 0x3d01, 0xe42e, 0xe424, 0xe000,
+ 0x0310, 0xe092, 0x2901, 0xa80a, 0x3d01, 0xe42e, 0xe424, 0xe000,
+ 0x0310, 0xe092, 0x2901, 0xa806, 0x3d01, 0xe42e, 0x28a2, 0x3cb4,
+ 0xa2fa, 0x3c11, 0x3c14, 0x2809, 0xf0d8, 0xe41e, 0x06cb, 0xf1e4,
+ 0x3ca1, 0x3c14, 0xa2fa, 0x3c11, 0x2a42, 0x28a1, 0xe419, 0x06f6,
+ 0xf13e, 0x2842, 0xf0a8, 0xe41e, 0x06cb, 0xf104, 0x3c14, 0xe41e,
+ 0x06fe, 0x2814, 0xe41e, 0x0706, 0xe41e, 0x06cb, 0xf074, 0x3ca1,
+ 0x3c11, 0xe41e, 0x06f6, 0xa200, 0xe42e, 0x2814, 0xe41e, 0x06f6,
+ 0x2814, 0xe41e, 0x06fe, 0x2814, 0xe41e, 0x0706, 0x2811, 0xe41e,
+ 0x06f6, 0x2811, 0xe41e, 0x06fe, 0x2811, 0xe41e, 0x0706, 0xa2fe,
+ 0xe42e, 0x2842, 0xf148, 0xe166, 0x0300, 0x2916, 0xb608, 0x3c12,
+ 0x2814, 0x3c13, 0xe166, 0x0301, 0x290e, 0xe41e, 0x06f6, 0xe166,
+ 0x0300, 0x2916, 0x3d0e, 0x2814, 0x3d06, 0xe42e, 0xe166, 0x0300,
+ 0x2916, 0xb608, 0x3c13, 0x2916, 0xb608, 0x3c12, 0xe42e, 0xa2fa,
+ 0xe166, 0x0300, 0xc701, 0x3d16, 0xe42e, 0xa2fa, 0x3c12, 0x3c13,
+ 0x3cb4, 0x3c11, 0x3cd0, 0xa202, 0x3cb3, 0xa200, 0x3cb1, 0x3cb0,
+ 0x3cb2, 0x3cb5, 0xe166, 0x02e0, 0xc710, 0x3d16, 0xe41e, 0x0767,
+ 0xa200, 0x3cb7, 0xe161, 0x0310, 0x2aa8, 0xe42b, 0xa103, 0x3e50,
+ 0x8650, 0x3d11, 0xe42e, 0xe16a, 0x2a3b, 0xf089, 0x2814, 0x2a09,
+ 0xf02b, 0x28a1, 0xa2ff, 0xe41e, 0x1542, 0xe41e, 0x1435, 0xe41e,
+ 0x1468, 0x283b, 0xe41a, 0x025f, 0xe41e, 0x1252, 0xe41e, 0x08df,
+ 0xe41e, 0x0a63, 0xf164, 0x283b, 0xf03a, 0xa2fe, 0x3c5c, 0x2846,
+ 0x2a5c, 0xe046, 0xe402, 0x07b1, 0x2c54, 0x3c47, 0xe41e, 0x07ef,
+ 0xf0ee, 0xe41e, 0x11de, 0xe41e, 0x07c5, 0xe41e, 0x08fb, 0xf69a,
+ 0x2c54, 0x3c47, 0x1c57, 0xe410, 0x07ef, 0xf01e, 0xe16a, 0xd182,
+ 0x0007, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xe41e, 0x089a, 0xf26d,
+ 0xe41e, 0x08a7, 0xf23d, 0xa202, 0x3c48, 0x2c47, 0x1c57, 0xe410,
+ 0x07ef, 0xe41e, 0x08b6, 0xf1ad, 0x2848, 0xa102, 0xe418, 0x0e87,
+ 0x2848, 0xa102, 0xe41a, 0x0e1c, 0xf11d, 0x2c48, 0xa102, 0x3c48,
+ 0xe41e, 0x08e8, 0xe41e, 0x08fb, 0xe428, 0xe41e, 0x11c2, 0xe428,
+ 0x2848, 0xe41a, 0x089a, 0xf02d, 0xf65e, 0xe16a, 0xe42e, 0x2890,
+ 0xf152, 0x2826, 0xf0d8, 0x283d, 0xa106, 0xf0a8, 0x2856, 0x2a53,
+ 0xa01f, 0xaf09, 0xe046, 0xf04a, 0xa2fe, 0x3c90, 0xf07e, 0x2859,
+ 0xe40a, 0x0804, 0xe002, 0x0001, 0x3c90, 0xe41e, 0x0eaa, 0xe41e,
+ 0x08e8, 0xe41e, 0x08fb, 0xf058, 0x2c47, 0x1c57, 0xf02a, 0xf76e,
+ 0x2859, 0x3c91, 0xe42e, 0xe41e, 0x02ad, 0x2812, 0xf032, 0x2814,
+ 0xb608, 0x3c95, 0x2814, 0x3c9c, 0xa200, 0x3c92, 0xe41e, 0x0835,
+ 0xe41e, 0x0863, 0xa204, 0x3c92, 0xe41e, 0x0835, 0xe41e, 0x0863,
+ 0xe41e, 0x032b, 0xf078, 0xa206, 0x3c92, 0xe41e, 0x0835, 0xe41e,
+ 0x0863, 0xe0c0, 0x0800, 0xf7e8, 0xe42e, 0xa200, 0x3c93, 0x3c9a,
+ 0x2892, 0x3c94, 0x3c9b, 0x2890, 0xae08, 0x5832, 0x3c96, 0x3c9d,
+ 0xa200, 0x3c97, 0x3c9e, 0x2891, 0xa002, 0x1890, 0xae08, 0x5832,
+ 0x2a92, 0xa101, 0xf02b, 0xaf02, 0x3c98, 0x2855, 0xae08, 0x3c99,
+ 0x2892, 0xa100, 0xf07a, 0xe41e, 0x032b, 0xf048, 0x2899, 0xaf02,
+ 0x3c99, 0x2892, 0xa100, 0xf07a, 0x2896, 0xaf02, 0x3c96, 0x289d,
+ 0xaf02, 0x3c9d, 0xe42e, 0xe0c0, 0x0800, 0xf7e8, 0xa202, 0xe0c2,
+ 0x0802, 0xe41e, 0x032b, 0xae20, 0xe0c2, 0x0804, 0xa220, 0xae20,
+ 0xe005, 0x1010, 0xe056, 0xe0c2, 0x0805, 0xa200, 0xe0c2, 0x0806,
+ 0xa202, 0xae04, 0x4c93, 0xae04, 0x4c94, 0xae10, 0x4c95, 0xe0c2,
+ 0x0807, 0x2096, 0x4c97, 0xe0c2, 0x0808, 0x2098, 0x4c99, 0xe0c2,
+ 0x0809, 0xa202, 0xae04, 0x4c9a, 0xae04, 0x4c9b, 0xae10, 0x4c9c,
+ 0xe0c2, 0x080a, 0x209d, 0x4c9e, 0xe0c2, 0x080b, 0xa202, 0xe0c2,
+ 0x0800, 0xe42e, 0xa201, 0xb800, 0xe42d, 0xf08a, 0xa17e, 0xf7ca,
+ 0xa102, 0xa87e, 0xe041, 0x3e48, 0xe42e, 0xa043, 0xf75e, 0x8455,
+ 0x8246, 0xe018, 0x2e48, 0xa103, 0xe042, 0x3c47, 0x2c47, 0x1c54,
+ 0xf042, 0x2c47, 0x1c57, 0xe422, 0xe16b, 0xe42e, 0x2840, 0xf04a,
+ 0x2c48, 0xa102, 0xf028, 0xe42e, 0xe16b, 0xe42e, 0xba48, 0x3c64,
+ 0x2814, 0x3c01, 0x2809, 0xf03a, 0x28a1, 0x3c01, 0x2801, 0xe41e,
+ 0x153c, 0xf052, 0x2801, 0x2a64, 0xe41e, 0x1542, 0xae02, 0x4c65,
+ 0xae04, 0xcb23, 0xa807, 0xe056, 0xcf22, 0xba40, 0xf06a, 0xba4e,
+ 0xba40, 0xf03a, 0xba4e, 0xf7de, 0xd182, 0x0007, 0xe42e, 0xa200,
+ 0x3c57, 0x3c58, 0x3c59, 0xcf64, 0xcf62, 0xd1b3, 0x0001, 0xe42e,
+ 0x2c57, 0xa002, 0x3c57, 0xcf64, 0x2c58, 0xa002, 0x3c58, 0x1c55,
+ 0xf078, 0xd1b3, 0x0004, 0x3c58, 0x2c59, 0xa002, 0x3c59, 0x2458,
+ 0x4c59, 0xcf62, 0xe42e, 0x2c59, 0x1c45, 0xe01a, 0xe016, 0xe42e,
+ 0xa23e, 0x3cf0, 0xe41e, 0x0ed0, 0xf0c8, 0xe41e, 0x0f9a, 0xe41e,
+ 0x0ec2, 0xe002, 0x00b3, 0xf778, 0xe41e, 0x0b06, 0xf04a, 0xe42e,
+ 0xe41e, 0x01db, 0xe16b, 0xe42e, 0xe41e, 0x1172, 0xe41e, 0x0ec2,
+ 0xe002, 0x00b3, 0xf28a, 0xe41e, 0x0ec2, 0xe002, 0x00b8, 0xf28a,
+ 0xe41e, 0x0ec2, 0xe002, 0x00b2, 0xf2aa, 0xe41e, 0x0ec2, 0xe002,
+ 0x00b5, 0xe40a, 0x097b, 0xe41e, 0x0ec2, 0xe002, 0x0000, 0xf11a,
+ 0xe41e, 0x0ec2, 0xe002, 0x00b7, 0xf04a, 0xe41e, 0x0f61, 0xf5de,
+ 0xe41e, 0x0ed0, 0xe408, 0x093f, 0xe41e, 0x0f9a, 0xf56e, 0xf01e,
+ 0xe40e, 0x0983, 0xe41e, 0x0f9a, 0xe41e, 0x0b06, 0xf4ee, 0xe41e,
+ 0x0f9a, 0xa200, 0x3c3b, 0xe41e, 0x0b60, 0xf47e, 0xe41e, 0x0f9a,
+ 0xba3e, 0x340a, 0x3c0b, 0xe004, 0x4454, 0x180a, 0xf078, 0xe004,
+ 0x4731, 0x180b, 0xf038, 0xe40e, 0x0973, 0xe004, 0x4741, 0x180a,
+ 0xf0c8, 0xe004, 0x3934, 0x180b, 0xf088, 0xba7e, 0xba0e, 0xa10c,
+ 0xe40a, 0x0977, 0xa202, 0x3cd6, 0x28d8, 0xe40a, 0x0914, 0xe41e,
+ 0x0d26, 0xe40e, 0x0914, 0xe41e, 0x0e05, 0xe40e, 0x0914, 0xe41e,
+ 0x0dd4, 0xe40e, 0x0914, 0xe41e, 0x0f9a, 0xe41e, 0x0beb, 0xf06d,
+ 0xe16a, 0xe40e, 0x0914, 0xe16a, 0xe42e, 0xe42e, 0xa204, 0x3c4f,
+ 0xa200, 0x3c5f, 0xe41e, 0x0ed0, 0xe408, 0x09ca, 0xe41e, 0x1172,
+ 0xe41e, 0x0ec2, 0xe002, 0x00b3, 0xe40a, 0x09e8, 0xe41e, 0x0ec2,
+ 0xe002, 0x00b8, 0xe40a, 0x09f2, 0xe41e, 0x0ec2, 0xe002, 0x00b2,
+ 0xe40a, 0x09f8, 0xe41e, 0x0ec2, 0xe002, 0x00b5, 0xe40a, 0x0a25,
+ 0xe41e, 0x0ec2, 0xe002, 0x0000, 0xe40a, 0x09ce, 0xe41e, 0x0ec2,
+ 0xe002, 0x0001, 0xe404, 0x09bf, 0xe41e, 0x0ec2, 0xe002, 0x00af,
+ 0xe404, 0x0a2c, 0xe41e, 0x0ec2, 0xe002, 0x00b7, 0xf05a, 0xe41e,
+ 0x0f61, 0xe40e, 0x098a, 0xe41e, 0x0ed0, 0xe408, 0x09ca, 0xe41e,
+ 0x0f9a, 0xf41e, 0xe41e, 0x01db, 0xe40e, 0x0a43, 0xe41e, 0x0e12,
+ 0xe41e, 0x0f9a, 0xe41e, 0x0b6b, 0xa202, 0xb61a, 0x3c5f, 0xe41d,
+ 0x0e19, 0x2873, 0xe418, 0x1169, 0x28a3, 0x4ca5, 0xe01a, 0x4473,
+ 0xe408, 0x0a47, 0x2873, 0xe408, 0x0a41, 0xe16a, 0xe40e, 0x098a,
+ 0xa200, 0x3c3b, 0xe41e, 0x063a, 0xe41e, 0x0f9a, 0xe41e, 0x0b06,
+ 0xe40e, 0x098a, 0xe41e, 0x0f9a, 0xe41e, 0x0b60, 0xe40e, 0x098a,
+ 0xe41e, 0x0f9a, 0xba3e, 0x340a, 0x3c0b, 0xe004, 0x4454, 0x180a,
+ 0xf078, 0xe004, 0x4731, 0x180b, 0xf038, 0xe40e, 0x0a1d, 0xe004,
+ 0x4741, 0x180a, 0xf0c8, 0xe004, 0x3934, 0x180b, 0xf088, 0xba7e,
+ 0xba0e, 0xa10c, 0xe40a, 0x0a21, 0xa202, 0x3cd6, 0x28d8, 0xe40a,
+ 0x098a, 0xe41e, 0x0d26, 0xe40e, 0x098a, 0xe41e, 0x0e05, 0xe40e,
+ 0x098a, 0xe41e, 0x0dd4, 0xe40e, 0x098a, 0xe41e, 0x0f9a, 0xe41e,
+ 0x0beb, 0xe16a, 0xe40e, 0x098a, 0x285f, 0xe408, 0x0a33, 0xe41e,
+ 0x0f9a, 0xe40e, 0x098a, 0xe41e, 0x0bd4, 0xe41e, 0x0aab, 0xe41e,
+ 0x0ae2, 0xf08a, 0xf0d4, 0xe41e, 0x0f9a, 0xa202, 0x3c5f, 0xe40e,
+ 0x098a, 0xa202, 0xe42e, 0xe41e, 0x0aab, 0xa200, 0xe42e, 0xa2fd,
+ 0x3ea1, 0xa2fe, 0xe42e, 0xe165, 0x0350, 0x2855, 0x3d15, 0x2856,
+ 0x3d15, 0x2826, 0x3d15, 0xe42e, 0xe165, 0x0350, 0x2855, 0x1915,
+ 0xf088, 0x2856, 0x1915, 0xf058, 0x2826, 0x1915, 0xf028, 0xe42e,
+ 0xa202, 0x3cda, 0xe42e, 0xe41e, 0x1172, 0xe41e, 0x0ec2, 0xe002,
+ 0x00b3, 0xe40a, 0x0a9b, 0xe41e, 0x0ec2, 0xe002, 0x00b8, 0xe40a,
+ 0x0a9b, 0xe41e, 0x0ec2, 0xe002, 0x00b2, 0xe40a, 0x0a9b, 0xe41e,
+ 0x0ec2, 0xe002, 0x00b5, 0xe40a, 0x0a9b, 0xe41e, 0x0ec2, 0xe002,
+ 0x0000, 0xe40a, 0x0a9b, 0xe41e, 0x0ec2, 0xe002, 0x0001, 0xe404,
+ 0x0a9b, 0xe41e, 0x0ec2, 0xe002, 0x00af, 0xe404, 0x0a9d, 0xe41e,
+ 0x0ec2, 0xe002, 0x00b7, 0xe408, 0x0a9b, 0xe41e, 0x0ed0, 0xe40a,
+ 0x0aa9, 0xe41e, 0x01db, 0xe40e, 0x0aa9, 0x2846, 0x3c5c, 0xe41e,
+ 0x0f9a, 0xe41e, 0x0ec2, 0xa102, 0x3c46, 0xe41e, 0x08be, 0xa200,
+ 0xe42e, 0xa2fe, 0xe42e, 0xe166, 0x02dc, 0xe167, 0x02de, 0xa2fe,
+ 0x3516, 0x3d0e, 0x3517, 0x3d0f, 0x2828, 0xe424, 0xa231, 0xa104,
+ 0xf0e6, 0xa102, 0xb435, 0xf0ba, 0xa104, 0xb4cd, 0xf086, 0xa102,
+ 0xf05a, 0xa104, 0xf026, 0xe42e, 0xa015, 0xa035, 0x3e50, 0x8450,
+ 0x8229, 0xe018, 0x3c50, 0x8450, 0xe182, 0x03e8, 0xe018, 0x3517,
+ 0x3d17, 0xe005, 0x03e9, 0x2828, 0xa102, 0xf06a, 0xa106, 0xf04a,
+ 0xa106, 0xf02a, 0xa103, 0x3e50, 0x8450, 0x822a, 0xe018, 0x3516,
+ 0x3d16, 0xe42e, 0x28a5, 0xf0aa, 0x2844, 0x443b, 0x4c40, 0xe40a,
+ 0x0aeb, 0xe40e, 0x0b00, 0xe40e, 0x0b02, 0x28a3, 0xe40a, 0x0b00,
+ 0xa102, 0xf05a, 0xa102, 0xf09a, 0xa102, 0xf0aa, 0x2844, 0x443b,
+ 0x4c40, 0xe408, 0x0b00, 0xf04e, 0x2842, 0xe40a, 0x0b00, 0xf05e,
+ 0xa200, 0xe42e, 0xa202, 0xe42e, 0xa2fe, 0xe42e, 0xa200, 0x3c25,
+ 0x3c27, 0x3ce3, 0xa202, 0x3c29, 0x3c2a, 0x2825, 0x3c0d, 0x285d,
+ 0x3c0e, 0x285e, 0x3c0f, 0x2a5d, 0xba56, 0xe40a, 0x0b4d, 0x3c5d,
+ 0xe002, 0x0780, 0xf046, 0x3e5d, 0xf31e, 0xe190, 0x285d, 0x3c52,
+ 0xa01e, 0xaf08, 0x3c55, 0x2a5e, 0xba56, 0xf28a, 0x3c5e, 0xe002,
+ 0x0480, 0xf036, 0x3e5e, 0xf22e, 0x285e, 0x3c53, 0xa01e, 0xaf08,
+ 0x3c56, 0x3c45, 0x8455, 0x8256, 0xe018, 0x3c54, 0xa206, 0x3cf0,
+ 0xba46, 0xf14a, 0x34ab, 0x3cac, 0xa208, 0x3cf0, 0xba46, 0xf0ea,
+ 0x3c28, 0xa20a, 0x3cf0, 0xba62, 0xba40, 0xf08a, 0xba52, 0xba40,
+ 0xe41e, 0x0cdf, 0xf038, 0xa202, 0xe42e, 0x280d, 0x3c25, 0x280e,
+ 0x3c5d, 0xa01e, 0xaf08, 0x3c55, 0x280f, 0x3c5e, 0xa01e, 0xaf08,
+ 0x3c56, 0x3c45, 0x8455, 0x8256, 0xe018, 0x3c54, 0xa200, 0xe42e,
+ 0xa202, 0x3ce3, 0xba40, 0xba48, 0xba4a, 0xba40, 0xba4a, 0xba4a,
+ 0xba40, 0xba40, 0xe42e, 0xe0c1, 0x0059, 0xa107, 0xf049, 0x284f,
+ 0xa802, 0x3c4f, 0xa204, 0x3ce3, 0x283b, 0xf0a8, 0xa200, 0x3c73,
+ 0xba18, 0xa80e, 0xe40a, 0x0bcf, 0xba52, 0x3c72, 0xf08e, 0xba12,
+ 0x1872, 0xf04a, 0x3c73, 0xe40e, 0x0bcf, 0xba52, 0xba44, 0xe40a,
+ 0x0bcf, 0x2a34, 0x3e2f, 0xa102, 0xe049, 0xaf05, 0xe409, 0x0bcf,
+ 0x3c34, 0xa202, 0x5834, 0x3040, 0xaf02, 0x3041, 0xaf02, 0x3042,
+ 0xaf02, 0x3049, 0x2849, 0x4425, 0xf338, 0xba5f, 0x2825, 0xf08a,
+ 0x2840, 0xf298, 0xba46, 0x2841, 0xf268, 0xba46, 0xf24e, 0x2840,
+ 0x4c49, 0xe162, 0x0400, 0xe163, 0x0404, 0xf1d8, 0xba40, 0x3c7d,
+ 0x4425, 0xf1e8, 0xba44, 0xf1ca, 0xa102, 0x3d12, 0x3d02, 0xa221,
+ 0x5b12, 0x3f13, 0x3f13, 0x2841, 0xf0e8, 0xba40, 0x3c7e, 0x4425,
+ 0xf0f8, 0xba44, 0xf0da, 0xa102, 0x3d12, 0x3d02, 0xa221, 0x5b02,
+ 0x3f13, 0x3f03, 0xba40, 0xf03a, 0xba4e, 0xf7de, 0xe42e, 0x284f,
+ 0xa902, 0x3c4f, 0xe16b, 0xe42e, 0x2825, 0xe428, 0xa200, 0x3c36,
+ 0x3c35, 0x3c37, 0x3c33, 0x3c3a, 0x3c38, 0x3c30, 0xa202, 0x3c3c,
+ 0x3c31, 0x3c3e, 0x3c26, 0xa206, 0x3c3d, 0x2853, 0xa01e, 0xaf08,
+ 0x3c56, 0x3c45, 0xe42e, 0xba46, 0xa102, 0xf0ca, 0xa102, 0xf0fa,
+ 0xa102, 0xf13a, 0xa102, 0xf17a, 0xa106, 0xf1ba, 0xa102, 0xf1fa,
+ 0xe42e, 0xa202, 0x3c25, 0xe41e, 0x0c1c, 0xe42e, 0xa202, 0x3c25,
+ 0xe41e, 0x0c4d, 0xe16a, 0xe42e, 0xa202, 0x3c25, 0xe41e, 0x0c5e,
+ 0xe16a, 0xe42e, 0xa202, 0x3c25, 0xe41e, 0x0ccd, 0xe16a, 0xe42e,
+ 0xa202, 0x3c25, 0xe41e, 0x0cb8, 0xe16a, 0xe42e, 0xa202, 0x3c25,
+ 0xe41e, 0x0c71, 0xe16a, 0xe42e, 0xba46, 0x3c2c, 0xba46, 0x3c2d,
+ 0xba40, 0x3c26, 0x2a53, 0xf04a, 0xa01f, 0xaf09, 0xf04e, 0xa03f,
+ 0xaf0b, 0xae03, 0x3e56, 0xa210, 0x3cf0, 0xba42, 0xa102, 0xf1c8,
+ 0xa212, 0x3cf0, 0xba42, 0xf188, 0xa214, 0x3cf0, 0xba42, 0xf148,
+ 0xa216, 0x3cf0, 0xba56, 0xa218, 0x3cf0, 0xba40, 0xf0da, 0xa21a,
+ 0x3cf0, 0xba4e, 0xba40, 0x3c80, 0xba42, 0xa002, 0x3c29, 0xba48,
+ 0xa002, 0x3c2a, 0xe42e, 0xe16b, 0xe42e, 0xba44, 0xba40, 0xf04a,
+ 0xba4e, 0xba4e, 0xba4e, 0xba5a, 0x3c81, 0xa20a, 0x3cf0, 0xba40,
+ 0xf04a, 0xba5a, 0x3c82, 0xe42e, 0xe16b, 0xe42e, 0xe41e, 0x0cdf,
+ 0xf0f8, 0xa200, 0x3c50, 0xd022, 0x0001, 0xe184, 0x0c6c, 0xba41,
+ 0xf03b, 0xc73f, 0xba4e, 0x4e50, 0x3e50, 0xf029, 0xe42e, 0xe16b,
+ 0xe42e, 0xe162, 0x0400, 0xe163, 0x0404, 0xa21c, 0x3cf0, 0xd022,
+ 0x0003, 0xe184, 0x0c80, 0xba46, 0xa102, 0x3d02, 0xa221, 0x5b12,
+ 0x3f13, 0xba43, 0x3e30, 0xa21e, 0x3cf0, 0xba43, 0x3e3d, 0xf2fb,
+ 0xa103, 0x3233, 0xaf03, 0x3e31, 0xe017, 0x3e32, 0x283b, 0xf03a,
+ 0x2831, 0xf258, 0x2a31, 0x8455, 0x8256, 0xe018, 0xf029, 0xaf02,
+ 0x3c54, 0x2856, 0xf029, 0xaf02, 0x3c45, 0xba40, 0x3c39, 0xba40,
+ 0x3c3c, 0xba40, 0x3c38, 0xba40, 0x3c36, 0xba40, 0x3c37, 0xba40,
+ 0x3c35, 0xba40, 0x3c3a, 0xba40, 0xba40, 0x3c3e, 0xa203, 0xba40,
+ 0xe42a, 0xba40, 0xba44, 0x3cd7, 0xba5e, 0xe42e, 0xe16b, 0xe42e,
+ 0xa202, 0x2a26, 0xf04b, 0x083a, 0x0839, 0xf03e, 0x0831, 0x083a,
+ 0xae02, 0xa102, 0xcc44, 0xe184, 0x0cc7, 0xba5e, 0xba40, 0xf02a,
+ 0xe42e, 0xa20a, 0x3cf0, 0xe16b, 0xe42e, 0xba40, 0xba4e, 0xba40,
+ 0xba4c, 0xba40, 0xf09a, 0xba66, 0xba40, 0xf06a, 0xba6a, 0xba40,
+ 0xf03a, 0xba6a, 0xe42e, 0xa20a, 0x3cf0, 0xe16b, 0xe42e, 0xba41,
+ 0xf21b, 0xe0c3, 0x013c, 0xa200, 0x3c7c, 0xe161, 0x0420, 0x287c,
+ 0xe0c2, 0x013e, 0xa002, 0x3c7c, 0xa20c, 0x3cf0, 0xba4e, 0x3d11,
+ 0xe0c2, 0x013f, 0xd022, 0x003e, 0xe184, 0x0cff, 0x287c, 0xe0c2,
+ 0x013e, 0xa002, 0x3c7c, 0xba4e, 0xf28a, 0x3d11, 0xe0c2, 0x013f,
+ 0xe190, 0xba40, 0xf1aa, 0xe0c2, 0x013c, 0xae02, 0xe055, 0xe004,
+ 0x0040, 0x3c7c, 0xe162, 0x0460, 0xa20e, 0x3cf0, 0xd022, 0x003f,
+ 0xe184, 0x0d1a, 0x287c, 0xe0c2, 0x013e, 0xa002, 0x3c7c, 0xba4e,
+ 0x3d12, 0xe0c2, 0x013f, 0xe190, 0x4e27, 0x3e27, 0xe0c3, 0x013d,
+ 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xa202, 0xe42e, 0x2ad8, 0x28e4,
+ 0xa120, 0xb615, 0x3ed8, 0xe42b, 0xa200, 0x3ce2, 0xe162, 0x04c8,
+ 0x28d6, 0xf09a, 0xe004, 0x4741, 0x3d12, 0xe004, 0x3934, 0x3d12,
+ 0xa208, 0x3ce2, 0xe41e, 0x0d83, 0xf168, 0xba4e, 0x2ae2, 0xa803,
+ 0xf049, 0xae10, 0x3ce1, 0xf03e, 0x4ce1, 0x3d12, 0x2ae2, 0xa003,
+ 0x3ee2, 0xa80f, 0xe41b, 0x0db3, 0x28d8, 0xf0aa, 0xe41e, 0x0d83,
+ 0xf028, 0xf69e, 0x28e2, 0xa802, 0xf03a, 0x28e1, 0x3d12, 0xa211,
+ 0x28e2, 0xa80e, 0xf0ba, 0xe045, 0xaf03, 0xf06b, 0xa103, 0x3e50,
+ 0xa201, 0x8650, 0x3f12, 0xe41e, 0x0db3, 0xa201, 0xe162, 0x04c8,
+ 0x28e3, 0x3d12, 0x28e2, 0x3d12, 0x3f12, 0xa200, 0x3d12, 0xe0c1,
+ 0x006b, 0x28e4, 0xa002, 0xae06, 0xe041, 0xaf06, 0x3ce4, 0xca28,
+ 0xf7f8, 0xce21, 0xd111, 0x04c8, 0xd112, 0x0004, 0xd113, 0x0000,
+ 0xca28, 0xf7f8, 0xe42e, 0xc001, 0x2832, 0xf028, 0xf07e, 0x2430,
+ 0x4c31, 0xae06, 0xc873, 0xe046, 0xf046, 0xa200, 0xc000, 0xe42e,
+ 0xa202, 0xc000, 0xe42e, 0xa200, 0x3ce7, 0xe0c0, 0x005c, 0xe0c1,
+ 0x0065, 0xaf12, 0xa802, 0xaf15, 0xa803, 0xe016, 0xe056, 0xf04a,
+ 0xa200, 0x3cd8, 0xe42e, 0x28e8, 0xf05a, 0xe0c0, 0x005d, 0xe42a,
+ 0xf7be, 0xe0c0, 0x005d, 0xe00a, 0x0200, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0x3ce8, 0xf71e, 0xd112, 0x0004, 0xe0c0, 0x006b, 0xe000,
+ 0x0088, 0x0ce7, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x04c8, 0xd113,
+ 0x0000, 0xe1e1, 0xe162, 0x04c8, 0x2ce5, 0x2ee7, 0xa010, 0xa011,
+ 0x3ce5, 0x3ee7, 0xe0c0, 0x006c, 0xe002, 0x0088, 0xe046, 0xe416,
+ 0x0d93, 0xa200, 0x3ce8, 0xe42e, 0xba4e, 0xba40, 0xae02, 0xba41,
+ 0xe056, 0xae02, 0xba41, 0xe056, 0xae02, 0xba41, 0xe056, 0x3cd1,
+ 0xba46, 0x28d1, 0xa810, 0xf06a, 0xba42, 0xa106, 0xf1d8, 0xba5a,
+ 0x3cd2, 0x28d1, 0xa808, 0xf06a, 0xba42, 0xa106, 0xf158, 0xba5a,
+ 0x3cd3, 0x28d1, 0xa804, 0xf06a, 0xba42, 0xa106, 0xf0d8, 0xba5a,
+ 0x3cd4, 0x28d1, 0xa802, 0xf06a, 0xba42, 0xa106, 0xf058, 0xba5a,
+ 0x3cd5, 0xa203, 0xe42e, 0xa201, 0xe42e, 0xba7e, 0xba40, 0xf098,
+ 0xba41, 0xba4a, 0xf04b, 0xba46, 0xba46, 0x3c5b, 0xa203, 0xe42e,
+ 0xa201, 0xe42e, 0x28b9, 0xe428, 0xe41e, 0x0626, 0xa202, 0x3cb9,
+ 0xe42e, 0xa200, 0x3cb9, 0xe42e, 0xd180, 0x0002, 0xe41e, 0x122f,
+ 0xcb00, 0xcb03, 0xe409, 0x0e83, 0xf7c8, 0xcb0c, 0x3060, 0xaf02,
+ 0x3061, 0xaf02, 0x306f, 0xaf02, 0x3070, 0xaf02, 0x306a, 0xaf02,
+ 0x3065, 0xaf02, 0xf03a, 0xcb16, 0x3c64, 0xa200, 0x2a70, 0x4e60,
+ 0xe017, 0x4641, 0xb632, 0x3c6e, 0xcf24, 0xcb22, 0xaf08, 0xa802,
+ 0x4c6f, 0xae02, 0x4c70, 0x2a60, 0xe055, 0xb636, 0x3c71, 0x286a,
+ 0x4c70, 0x4c6f, 0xf08a, 0xd190, 0x0001, 0xcb20, 0xcb03, 0xe409,
+ 0x0e83, 0xf7c8, 0x746a, 0xa200, 0x1860, 0x2a61, 0xf03b, 0xb808,
+ 0xf2bd, 0xcf08, 0xe0c2, 0x012a, 0xa200, 0x2a60, 0xe017, 0x4e6e,
+ 0x4e6a, 0xb652, 0xcf20, 0xd180, 0x0001, 0xcb00, 0xcb03, 0xf1c9,
+ 0xf7d8, 0xcb20, 0xcb03, 0xf189, 0xf7d8, 0x7449, 0xe41e, 0x0ec6,
+ 0xf13d, 0xa200, 0x2a60, 0xb636, 0xcf04, 0xa200, 0x2a6a, 0xe017,
+ 0x4660, 0xb6d2, 0xcf04, 0xa200, 0x2a6e, 0xb652, 0xcf04, 0xa200,
+ 0xe41e, 0x13bd, 0xe42e, 0xe16b, 0xa200, 0xcf02, 0xe42e, 0x3c50,
+ 0xd192, 0x0002, 0xd182, 0x0001, 0xcb0c, 0xaf04, 0xa806, 0xf038,
+ 0xa210, 0xcf0c, 0xa200, 0x3c60, 0x2a41, 0xb652, 0xcf04, 0xd190,
+ 0x0002, 0xcb20, 0xcb03, 0xf0b9, 0xf7d8, 0x286f, 0xae02, 0x4c70,
+ 0xb634, 0x3c71, 0x2850, 0xe41e, 0x13bd, 0xe42e, 0xe16b, 0xa200,
+ 0xcf02, 0xe42e, 0x20a6, 0x4ca7, 0xe414, 0x13bd, 0x20a6, 0x4ca7,
+ 0xe412, 0x0e87, 0x2ca0, 0xa002, 0x3ca0, 0xe42e, 0xc001, 0x3c13,
+ 0xc000, 0xe42e, 0xc001, 0x2813, 0xc000, 0xe42e, 0xc001, 0x3c14,
+ 0xc000, 0xe42e, 0xc001, 0x2814, 0xc000, 0xe42e, 0xc001, 0x2430,
+ 0x4c31, 0xc000, 0xae06, 0xc873, 0xe046, 0xe422, 0xe16b, 0xe42e,
+ 0xc001, 0x280c, 0xf16a, 0xe41e, 0x1121, 0xc001, 0xe0c0, 0x0049,
+ 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0xe0c1, 0x0048, 0x360e, 0x3e0f,
+ 0x260e, 0x4e0f, 0xe045, 0xa200, 0xb626, 0xe003, 0x0200, 0xb606,
+ 0xc000, 0xe42e, 0xe41e, 0x0ed0, 0xe42a, 0xe0c0, 0x0045, 0xaf04,
+ 0xa802, 0xe42e, 0xc001, 0x3c33, 0xc000, 0xe42e, 0xc001, 0x2833,
+ 0xc000, 0xe42e, 0xc001, 0x3c11, 0xc000, 0xe42e, 0xc001, 0x2811,
+ 0xc000, 0xe42e, 0xd148, 0x0040, 0xd144, 0x0000, 0xd145, 0x0000,
+ 0xd168, 0x0000, 0xd16b, 0x0000, 0xd14b, 0x0200, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xd14c, 0x000c, 0xca9a, 0xf7f8, 0xe42e, 0xc001,
+ 0x2400, 0x4c01, 0x0406, 0x0c07, 0x3408, 0x3c09, 0xd071, 0x202a,
+ 0xe181, 0xc001, 0xe0c0, 0x0048, 0x3415, 0x3c16, 0x280c, 0xf13a,
+ 0xe0c0, 0x0048, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0xe0c1, 0x0049,
+ 0x3604, 0x3e05, 0x1404, 0x1c05, 0xe0c1, 0x0045, 0xaf05, 0xa803,
+ 0xb611, 0x320c, 0xe0c0, 0x0048, 0x3402, 0xe008, 0xfe00, 0x3c03,
+ 0xe0c0, 0x0048, 0xe008, 0x01ff, 0x3c0b, 0xa200, 0xcc78, 0xd022,
+ 0x00ff, 0xe184, 0x0f4c, 0xcc7a, 0xe190, 0xe41e, 0x1010, 0xe41e,
+ 0x102f, 0xe41e, 0x0f02, 0xc001, 0xa200, 0x3c1a, 0x280b, 0xa102,
+ 0xe412, 0x0f69, 0xc001, 0xa202, 0x3c1a, 0xa200, 0xceaa, 0xc000,
+ 0xe42e, 0xcaa0, 0xe190, 0xca9a, 0xf7f8, 0xca9c, 0xe418, 0x102f,
+ 0xe42e, 0xcc44, 0xe184, 0x0f72, 0xca9c, 0xe418, 0x102f, 0xcaa0,
+ 0xca9b, 0xf7f9, 0xe190, 0xe42e, 0xe004, 0x0100, 0xceb0, 0xe004,
+ 0x00ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e, 0x0000, 0xd15f,
+ 0x0000, 0xe004, 0x0019, 0xae18, 0xe00a, 0x0620, 0xcec0, 0xd157,
+ 0x0000, 0xd14a, 0x0000, 0xd14c, 0x0003, 0xca9c, 0xe418, 0x102f,
+ 0xca9a, 0xf7c8, 0xcaae, 0xa802, 0xf73a, 0xca9c, 0xe418, 0x102f,
+ 0xa200, 0xe42e, 0xe41e, 0x0f74, 0xe41e, 0x0ed0, 0xf188, 0xe41e,
+ 0x1160, 0xcaa2, 0xe008, 0x00ff, 0xf0a8, 0xe41e, 0x1198, 0xaf20,
+ 0xa102, 0xf058, 0xa204, 0xe41e, 0x0f69, 0xf6de, 0xcaa2, 0xe008,
+ 0x00ff, 0xe41e, 0x0eb6, 0xe41e, 0x0ed0, 0xf0fa, 0xe004, 0x01b7,
+ 0xe008, 0x00ff, 0xe41e, 0x0eb6, 0xe004, 0x01b7, 0xe008, 0x00ff,
+ 0xe41e, 0x0ebe, 0xa200, 0xe42e, 0xa206, 0xe41e, 0x0f69, 0xe41e,
+ 0x0eba, 0xe41e, 0x0ebe, 0xca9c, 0xe418, 0x102f, 0xe41e, 0x0fd1,
+ 0xe42e, 0xc001, 0xa200, 0x3c30, 0x3c31, 0x3c33, 0xe41e, 0x0fdf,
+ 0xc001, 0xe41e, 0x1010, 0xc001, 0xe128, 0xc000, 0xe42e, 0xc001,
+ 0x2833, 0x4411, 0xc000, 0xae0e, 0xce92, 0xd14a, 0x0000, 0xd158,
+ 0x0100, 0xe004, 0x00ff, 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e,
+ 0x0000, 0xd15f, 0x0000, 0xd161, 0x0003, 0xe004, 0x0019, 0xae18,
+ 0xe00a, 0x0620, 0xcec0, 0xd14c, 0x0003, 0xca9c, 0xe418, 0x102f,
+ 0xca9a, 0xf7c8, 0xca9c, 0xf7a8, 0xca9e, 0xc001, 0x3c32, 0xcc92,
+ 0xca94, 0x0030, 0x0c31, 0x3430, 0x3c31, 0xcc90, 0xc000, 0xe42e,
+ 0xe004, 0x1495, 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd034, 0x0000,
+ 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x007f, 0xd037, 0x0000,
+ 0xd038, 0x0000, 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000,
+ 0xd046, 0x0000, 0xd047, 0x0000, 0xd149, 0x0000, 0xe42e, 0xc001,
+ 0x280c, 0xf20a, 0xe41e, 0x024f, 0xc001, 0xe004, 0x0440, 0xce50,
+ 0x280d, 0xa806, 0xa108, 0xe012, 0xa806, 0xae06, 0x3c40, 0xe004,
+ 0x01b7, 0x5840, 0xce52, 0xe41e, 0x0257, 0xc001, 0xd14e, 0x0000,
+ 0xd144, 0x0000, 0x2402, 0x4c03, 0xe000, 0x0200, 0x3402, 0x3c03,
+ 0xf3ae, 0xd027, 0x0000, 0x280c, 0xe41a, 0x1098, 0xc001, 0xd027,
+ 0x0001, 0x280d, 0xf25a, 0xca48, 0xa802, 0xf7e8, 0x2402, 0x4c03,
+ 0xce40, 0xd121, 0x0000, 0xd122, 0x0040, 0xe0c0, 0x0043, 0xa806,
+ 0xae02, 0xa032, 0xce46, 0xe190, 0xe190, 0xe190, 0xe190, 0xca48,
+ 0xa802, 0xf7e8, 0xe004, 0x0200, 0x0402, 0x0c03, 0x3402, 0x3c03,
+ 0x1408, 0x1c09, 0xf054, 0x2400, 0x4c01, 0x3402, 0x3c03, 0x280c,
+ 0xe418, 0x10dc, 0xc001, 0xe41e, 0x1121, 0xc001, 0xd14e, 0x0000,
+ 0xd144, 0x0000, 0xc000, 0xe42e, 0xe0c1, 0x0059, 0xa103, 0xa200,
+ 0xb636, 0xe000, 0x001c, 0xe0c1, 0x0045, 0xe052, 0xe01a, 0xe42e,
+ 0xc001, 0xa200, 0x3c0a, 0xe004, 0x0200, 0x3c0d, 0xe0c0, 0x0043,
+ 0xa808, 0xf338, 0xe41e, 0x108c, 0xc001, 0x3c0c, 0x2402, 0x4c03,
+ 0xe0c1, 0x0049, 0x3604, 0x3e05, 0x2604, 0x4e05, 0xe045, 0xf033,
+ 0x0606, 0x0e07, 0xe003, 0x0200, 0x280c, 0xb602, 0x3c0c, 0xf1d3,
+ 0xe001, 0x0200, 0x3e0d, 0x280c, 0xf188, 0x280a, 0xe408, 0x10a2,
+ 0xe41e, 0x01db, 0xc001, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xe40a,
+ 0x10a2, 0xe0c0, 0x005d, 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0x3c0a, 0xe40e, 0x10a2, 0x280d, 0x2a0c, 0xf039, 0xe004,
+ 0x0200, 0x3c0d, 0xc000, 0xe42e, 0xc001, 0xe41e, 0x024f, 0xc001,
+ 0x280d, 0xe002, 0x0200, 0xe40a, 0x111e, 0x280d, 0xa806, 0xf1fa,
+ 0xa108, 0xe012, 0xae06, 0x3c40, 0x280d, 0xaf04, 0xae20, 0xe000,
+ 0x01c0, 0xce50, 0xe190, 0xca52, 0x5c40, 0x5840, 0x2a0d, 0xa807,
+ 0xae07, 0x3e40, 0xe005, 0x01b7, 0x5e40, 0xe056, 0x2a0d, 0xaf05,
+ 0xae21, 0xe001, 0x0140, 0xce51, 0xe190, 0xce52, 0xe004, 0x01fc,
+ 0x180d, 0xf022, 0xf14e, 0xc001, 0x280d, 0xa006, 0xaf04, 0xae20,
+ 0xe000, 0x0440, 0xce50, 0x280d, 0xa806, 0xa108, 0xe012, 0xa806,
+ 0xae06, 0x3c40, 0xe004, 0x01b7, 0x5840, 0xce52, 0xc000, 0xe40e,
+ 0x0257, 0xc001, 0xcaaa, 0x2a1a, 0xb616, 0xe0c1, 0x0048, 0x360e,
+ 0x3e0f, 0x260e, 0x4e0f, 0xe042, 0xe049, 0x1608, 0x1e09, 0xf035,
+ 0x1406, 0x1c07, 0xe0c2, 0x0048, 0xa200, 0xceaa, 0xc000, 0xe42e,
+ 0xe41e, 0x1121, 0xe0c0, 0x0045, 0xaf04, 0xa806, 0xa104, 0xe428,
+ 0xa2fc, 0x2aa1, 0xa003, 0xb616, 0xe418, 0x1147, 0xe42e, 0xc001,
+ 0x3c40, 0xe0c0, 0x0048, 0x340e, 0x3c0f, 0x240e, 0x4c0f, 0x0840,
+ 0xe049, 0x1600, 0x1e01, 0xf033, 0x0406, 0x0c07, 0xe049, 0x1608,
+ 0x1e09, 0xf035, 0x1406, 0x1c07, 0xe0c2, 0x0048, 0xc000, 0xe42e,
+ 0xe41e, 0x1121, 0xc001, 0xe0c0, 0x0048, 0x3417, 0x3c18, 0xc000,
+ 0xe42e, 0xa200, 0xceaa, 0xc001, 0x2417, 0x4c18, 0xc000, 0xe0c2,
+ 0x0048, 0xe42e, 0xe41e, 0x0f74, 0xe41e, 0x0ed0, 0xf118, 0xcaa2,
+ 0xe008, 0x00ff, 0xf0a8, 0xe41e, 0x1198, 0xaf20, 0xa102, 0xf058,
+ 0xa204, 0xe41e, 0x0f69, 0xf6fe, 0xe41e, 0x0ed0, 0xf0aa, 0xe004,
+ 0x01b7, 0xe008, 0x00ff, 0xe41e, 0x0eb6, 0xe004, 0x01b7, 0xf02e,
+ 0xcaa2, 0xe008, 0x00ff, 0xe41e, 0x0ebe, 0xe41e, 0x0ec2, 0xe42e,
+ 0xe162, 0x0190, 0xca80, 0x3512, 0x3d12, 0xca82, 0x3512, 0x3d12,
+ 0xca84, 0x3512, 0x3d12, 0xca86, 0x3512, 0x3d12, 0xca8b, 0xa208,
+ 0xca8b, 0xa003, 0xaf03, 0xe046, 0xe000, 0x0192, 0xe094, 0xca8a,
+ 0xa802, 0xf048, 0x2512, 0x4d12, 0xe42e, 0x2d12, 0xe008, 0x00ff,
+ 0xae20, 0x4d12, 0xae10, 0x2712, 0x4f12, 0xaf31, 0xe009, 0x00ff,
+ 0xe056, 0xe42e, 0xc001, 0x2832, 0xf068, 0xba2c, 0xf158, 0xa202,
+ 0x3c32, 0xf0fe, 0x2430, 0x4c31, 0xae06, 0xc873, 0xe046, 0xf096,
+ 0xa12e, 0xb600, 0xa02e, 0x3c32, 0x7832, 0xa203, 0x3e32, 0xf048,
+ 0xa202, 0xc000, 0xe42e, 0xa200, 0xc000, 0xe42e, 0xc001, 0xa200,
+ 0x3c10, 0x2832, 0xf098, 0xa202, 0x3c33, 0x3c10, 0x3c11, 0xd036,
+ 0x00ff, 0xd037, 0x0080, 0xc000, 0xe42e, 0xc001, 0xcb20, 0xa80c,
+ 0xf7e8, 0x2832, 0xf1b8, 0x2833, 0xf078, 0xe41e, 0x0fdf, 0xc001,
+ 0xd04c, 0x0000, 0xf13e, 0xc896, 0xf05a, 0xe41e, 0x1211, 0xd04c,
+ 0x0000, 0xe41e, 0x0efe, 0xe005, 0x0080, 0xb615, 0xcc6f, 0xd04b,
+ 0x0001, 0xa202, 0xe41e, 0x1227, 0xe470, 0xd04c, 0x0000, 0xc000,
+ 0xe470, 0xa200, 0xe41e, 0x1227, 0xe41e, 0x0fdf, 0xe41e, 0x1223,
+ 0xcc96, 0xe41e, 0x0efe, 0xe016, 0xe41e, 0x0efa, 0xe42e, 0xc001,
+ 0x3c32, 0xc000, 0xe42e, 0xc001, 0x2832, 0xc000, 0xe42e, 0xc001,
+ 0x3c10, 0xc000, 0xe42e, 0xc001, 0x2810, 0xc000, 0xe42e, 0xe180,
+ 0xe41e, 0x122b, 0xe418, 0x1211, 0xe181, 0xe42e, 0x2825, 0xe016,
+ 0xae08, 0xa904, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x013d, 0xa200,
+ 0xe0c2, 0x0128, 0x2ac1, 0x4ec2, 0xb692, 0xae08, 0xa90c, 0xe0c2,
+ 0x017c, 0xa208, 0xe0c2, 0x017d, 0xa200, 0xe41e, 0x1415, 0xe0c2,
+ 0x0102, 0xe42e, 0xa200, 0xe0c2, 0x0320, 0xcc8e, 0x283b, 0xe408,
+ 0x12fb, 0xe41e, 0x1236, 0xe0c0, 0x0050, 0xe049, 0xe008, 0x007f,
+ 0x3c08, 0xaf11, 0xe009, 0x007f, 0x3e10, 0x4608, 0x3e08, 0xa200,
+ 0x2a08, 0xa809, 0xf03b, 0xe00a, 0x0020, 0x2a08, 0xa811, 0xf03b,
+ 0xe00a, 0x0040, 0xe0c2, 0x040c, 0x2855, 0xae20, 0x4c56, 0xae08,
+ 0xe0c2, 0x0101, 0xe0c2, 0x0205, 0xcf60, 0xa200, 0xe0c2, 0x0103,
+ 0xe0c2, 0x0113, 0xe0c2, 0x0120, 0xe0c2, 0x0121, 0xe0c2, 0x0122,
+ 0xe0c2, 0x0123, 0xe0c2, 0x0303, 0xa27e, 0xe0c2, 0x012a, 0x2827,
+ 0xe0c2, 0x013d, 0xe418, 0x13e5, 0x2814, 0xf104, 0xa204, 0xe0c2,
+ 0x0208, 0xe0c2, 0x0210, 0xa200, 0xe41e, 0x1415, 0xe0c2, 0x0213,
+ 0xe0c2, 0x0215, 0x2814, 0xe0c2, 0x020b, 0xa202, 0xe0c2, 0x0302,
+ 0xa20e, 0xe0c2, 0x0312, 0xe0c0, 0x0414, 0xe418, 0x018c, 0xe0c0,
+ 0x0414, 0xe41a, 0x1350, 0x2812, 0xf052, 0x2813, 0xf032, 0x28a1,
+ 0xb608, 0xe0c2, 0x0380, 0x2813, 0xf042, 0x2812, 0x28a1, 0xb608,
+ 0xe0c2, 0x0383, 0xa200, 0xe0c2, 0x0302, 0x2809, 0xf35a, 0xe0c1,
+ 0x0046, 0xe004, 0x0000, 0xae10, 0xe042, 0x2a10, 0xa809, 0xf05b,
+ 0xe167, 0x02d4, 0x2117, 0x4d17, 0xe0c2, 0x0211, 0xe0c1, 0x0046,
+ 0xe004, 0x0080, 0xae10, 0xe042, 0x2a10, 0xa811, 0xf05b, 0xe167,
+ 0x02d6, 0x2117, 0x4d17, 0xe0c2, 0x0212, 0xa200, 0xe0c2, 0x0215,
+ 0xe41e, 0x1415, 0xe00a, 0x0100, 0xe0c2, 0x0213, 0x2811, 0xe0c2,
+ 0x0214, 0xa202, 0xe0c2, 0x0210, 0xa200, 0xcf68, 0x2842, 0xf04a,
+ 0xa200, 0xe0c2, 0x0208, 0x2834, 0xa104, 0xb5a0, 0xb434, 0xa004,
+ 0xa960, 0xae04, 0x4c32, 0xae02, 0x4c33, 0xe0c2, 0x0204, 0x2849,
+ 0xae02, 0x4c40, 0xae02, 0x4c41, 0xae02, 0x4c3b, 0xae02, 0x4c39,
+ 0xae02, 0x4c7e, 0xae02, 0x4c7d, 0xae02, 0x4c38, 0xae04, 0x4c30,
+ 0xae02, 0x4c3c, 0xae04, 0x4c3d, 0xae04, 0x2a34, 0xa003, 0xa807,
+ 0xe056, 0xae02, 0x4c37, 0xae02, 0x2a25, 0xe017, 0xe056, 0xcf06,
+ 0xe162, 0x0400, 0xd022, 0x0003, 0xe184, 0x132f, 0xae08, 0x4d12,
+ 0xcf28, 0xa202, 0xae02, 0x4c35, 0xae0a, 0x4c32, 0xae02, 0x4c33,
+ 0xe0c2, 0x0104, 0xe41e, 0x0274, 0xa202, 0xe0c2, 0x0106, 0xa200,
+ 0xe0c2, 0x0103, 0xe0c2, 0x0113, 0xe0c2, 0x0120, 0xe0c2, 0x0121,
+ 0xe0c2, 0x0122, 0xe0c2, 0x0123, 0xe0c2, 0x0303, 0xa202, 0xe42e,
+ 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17, 0xe009,
+ 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101, 0xe0c3,
+ 0x015d, 0x2834, 0xa106, 0xe005, 0x001b, 0xf038, 0xe005, 0x001f,
+ 0x3e50, 0x2812, 0xb608, 0x2a13, 0xb60b, 0xae11, 0xe055, 0xae21,
+ 0xe167, 0x01a2, 0x2907, 0xaf10, 0x4450, 0xe055, 0xe0c3, 0x015c,
+ 0xa202, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xa200, 0xe0c2,
+ 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xe42e, 0x2a2b, 0x2842, 0xb435,
+ 0x3e2b, 0xa107, 0xf039, 0xa204, 0x3c2b, 0xe0c0, 0x0065, 0xaf0a,
+ 0xa802, 0xf13a, 0xe162, 0x04c8, 0x2ce4, 0x3d12, 0x2ce5, 0x3d12,
+ 0xe0c0, 0x006b, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x04c8, 0xd112,
+ 0x0004, 0xd113, 0x0000, 0xe1e1, 0xe0c0, 0x0065, 0xe008, 0x0100,
+ 0xf0ea, 0xca28, 0xf7f8, 0xe0c0, 0x006a, 0xce20, 0xd112, 0x0004,
+ 0xd111, 0x04c0, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xa200, 0x3ce5,
+ 0x3ce4, 0x3cd8, 0x3ce7, 0x3ce8, 0xe42e, 0x2809, 0xe40a, 0x13cc,
+ 0x2864, 0xae06, 0xcb23, 0xa80f, 0xe055, 0xcf23, 0xd1b6, 0x0001,
+ 0xd1b5, 0x0001, 0xcb6a, 0xf7f8, 0x2865, 0xae08, 0x4c60, 0xe0c2,
+ 0x0114, 0x2836, 0xae0a, 0x4c64, 0xe0c2, 0x0115, 0xe0c0, 0x012a,
+ 0xe0c2, 0x0116, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110,
+ 0x28c1, 0x4cc2, 0xe418, 0x14fb, 0xe42e, 0xa802, 0xf14a, 0xe0c2,
+ 0x013c, 0xa200, 0x3c7c, 0xe161, 0x0420, 0xd022, 0x003f, 0xe184,
+ 0x13f8, 0x287c, 0xe0c2, 0x013e, 0xa002, 0x3c7c, 0x2911, 0xe0c2,
+ 0x013f, 0xe190, 0x2827, 0xaf02, 0xf15a, 0xe0c2, 0x013c, 0xe004,
+ 0x0040, 0x3c7c, 0xe162, 0x0460, 0xd022, 0x003f, 0xe184, 0x140f,
+ 0x287c, 0xe0c2, 0x013e, 0xa002, 0x3c7c, 0x2912, 0xe0c2, 0x013f,
+ 0xe190, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xe0c1, 0x0044, 0xa80f,
+ 0xe056, 0xe42e, 0xa200, 0xe41e, 0x1415, 0xe42e, 0xe0c1, 0x0044,
+ 0xaf0d, 0xae03, 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044,
+ 0xaf17, 0xa803, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105,
+ 0xf039, 0xa213, 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d,
+ 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166, 0x0200,
+ 0xe167, 0x0500, 0x28a8, 0xf166, 0xa102, 0xcc44, 0xe184, 0x1458,
+ 0xa200, 0xe41e, 0x1415, 0xaf04, 0xe41e, 0x141e, 0xae20, 0x2ea9,
+ 0xe056, 0x9f17, 0x2055, 0x4c56, 0xae08, 0x9f17, 0xe41e, 0x145e,
+ 0xe190, 0xe190, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x2116, 0x4d16,
+ 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0xe42e,
+ 0xe0c0, 0x0044, 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa860,
+ 0xe42a, 0xe0c0, 0x0061, 0xa83e, 0xa203, 0xe0c3, 0x040d, 0xcca4,
+ 0xc785, 0xe018, 0xe000, 0x0500, 0xe09e, 0xe0c1, 0x0420, 0xa803,
+ 0xf7db, 0xa200, 0xe41e, 0x141a, 0xa80e, 0xaf04, 0xe41e, 0x141e,
+ 0xe41e, 0x1426, 0xe40b, 0x1491, 0xa81e, 0xe41e, 0x142b, 0xae09,
+ 0xe056, 0xae20, 0xe0c1, 0x006e, 0xe009, 0x1fff, 0xe056, 0x9f17,
+ 0xe0c0, 0x0060, 0xa822, 0xa122, 0xf04a, 0x2055, 0x4c56, 0xf03e,
+ 0x2056, 0x4c55, 0xae08, 0x9f17, 0xe0c0, 0x0062, 0x9f17, 0xe0c0,
+ 0x0063, 0x9f17, 0xe0c0, 0x0064, 0x9f17, 0xa201, 0xe0c3, 0x040d,
+ 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11, 0xe042,
+ 0xce20, 0xd111, 0x0200, 0xd112, 0x00c0, 0x88ec, 0x0113, 0xca29,
+ 0xf7f9, 0xe190, 0xe42e, 0xa2fe, 0x3cc3, 0xa200, 0x3cc1, 0x3cc2,
+ 0xe42e, 0x28b4, 0x3cc3, 0x28c3, 0xf042, 0xa200, 0x3cc1, 0x3cc2,
+ 0xa200, 0x3cc8, 0x3cc9, 0x2855, 0x3cc6, 0x2856, 0x3cc7, 0x28c1,
+ 0x4cc2, 0xe42a, 0x28c3, 0xe424, 0x28c3, 0xe0c2, 0x0143, 0x28c4,
+ 0xe0c2, 0x0144, 0xa200, 0xe0c2, 0x017f, 0xe0c2, 0x0149, 0xe41e,
+ 0x1415, 0xe0c2, 0x017f, 0x28c6, 0xa102, 0xae20, 0x4cc7, 0xa102,
+ 0xe0c2, 0x0142, 0xa200, 0xae20, 0x2ac2, 0xae09, 0x4ec0, 0xe042,
+ 0xe0c2, 0x014e, 0xe42e, 0x28c3, 0xe41e, 0x153c, 0x3cc5, 0x2ac9,
+ 0x1ac7, 0xe423, 0x28c8, 0xae0e, 0x4cc9, 0xa203, 0xb615, 0x3eca,
+ 0x2ac5, 0xae03, 0x4eca, 0xae03, 0xa903, 0xae1d, 0xe056, 0xe0c1,
+ 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0x2ac8,
+ 0xa003, 0x3ec8, 0x1ac6, 0xf065, 0x2ac9, 0xa003, 0x3ec9, 0xa201,
+ 0x3ec8, 0xe42e, 0x28c1, 0x4cc2, 0xf15a, 0x28c9, 0x18c7, 0xf042,
+ 0xe41e, 0x14fb, 0xf7be, 0xe0c0, 0x014b, 0xf7e8, 0xa204, 0xae1c,
+ 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe190, 0xe0c0, 0x014b,
+ 0xf7e8, 0x28a2, 0x3cc3, 0xe42e, 0xe424, 0xe000, 0x0330, 0xe09c,
+ 0x2906, 0xe42e, 0xe424, 0xe000, 0x0330, 0xe09c, 0x3f06, 0xe42e,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0060, 0x0008, 0x0006,
+ 0x00b0, 0x0090, 0x000b, 0x0009, 0x0160, 0x0120, 0x0016, 0x0012,
+ 0x02c0, 0x0240, 0x0058, 0x0012, 0x0580, 0x0480, 0x0160, 0x0012,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0063, 0x000d, 0x000f, 0x0011, 0x0013, 0x0015, 0x0017, 0x0000,
+ 0xffff, 0xfffe, 0x0001, 0x0002, 0x0000, 0x0002, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0000, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0002, 0x0001, 0xfffb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c52, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1850, 0xf074, 0xe009, 0x00ff, 0x1a51, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x1343, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x0368, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x0491, 0xe40e, 0x00a4,
+ 0xe41e, 0x04e1, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x04e2,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x06e2, 0xe40e, 0x00a4,
+ 0xe41e, 0x0705, 0xe40e, 0x00a4, 0xe0c1, 0x0044, 0xa80f, 0xe056,
+ 0xe42e, 0xa200, 0xe41e, 0x036c, 0xe42e, 0xe0c1, 0x0044, 0xaf0d,
+ 0xae03, 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105, 0xf039,
+ 0xa213, 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1,
+ 0x0420, 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166, 0x0500, 0xe167,
+ 0x0500, 0x284d, 0xf1b6, 0xa102, 0xcc44, 0xe184, 0x03b4, 0xa200,
+ 0xe41e, 0x036c, 0xaf04, 0xe41e, 0x0375, 0xae20, 0x2e62, 0xe056,
+ 0x9f17, 0x2ad3, 0xf04b, 0x2009, 0x4c0a, 0xf04e, 0x2050, 0x4c51,
+ 0xae08, 0x9f17, 0xe41e, 0x03ba, 0xe190, 0xe190, 0xa201, 0xe0c3,
+ 0x040d, 0xe42e, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17,
+ 0x2116, 0x4d16, 0x9f17, 0xe42e, 0xe0c0, 0x0044, 0xaf20, 0xa802,
+ 0xe428, 0xe0c0, 0x0060, 0xa860, 0xe42a, 0xe0c0, 0x0061, 0xa83e,
+ 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500,
+ 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e, 0x0371,
+ 0xa80e, 0xaf04, 0xe41e, 0x0375, 0xe41e, 0x037d, 0xe40b, 0x03ed,
+ 0xa81e, 0xe41e, 0x0382, 0xae09, 0xe056, 0xae20, 0xe0c1, 0x006e,
+ 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0, 0x0060, 0xa822, 0xa122,
+ 0xf04a, 0x2050, 0x4c51, 0xf03e, 0x2051, 0x4c50, 0xae08, 0x9f17,
+ 0xe0c0, 0x0062, 0x9f17, 0xe0c0, 0x0063, 0x9f17, 0xe0c0, 0x0064,
+ 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x3cec, 0xe0c0, 0x0041,
+ 0xe005, 0x0020, 0xae11, 0xe042, 0xce20, 0xd111, 0x0500, 0xd112,
+ 0x00c0, 0x88ec, 0x0113, 0xca29, 0xf7f9, 0xe190, 0xe42e, 0xe0c0,
+ 0x0067, 0x30d1, 0xaf02, 0x30d2, 0xaf02, 0x30d3, 0xaf02, 0x30c0,
+ 0xe0c0, 0x0062, 0x3063, 0xaf10, 0x3010, 0xe42e, 0x2009, 0x4c0a,
+ 0xe0c2, 0x0071, 0x2821, 0xe0c2, 0x007a, 0x2c20, 0xe0c2, 0x0079,
+ 0x2a39, 0xae0f, 0x28c2, 0xa80e, 0xae02, 0x4c35, 0xae02, 0x4c30,
+ 0xae02, 0x4c23, 0xae02, 0x4c22, 0xe056, 0xe0c2, 0x0075, 0x28ad,
+ 0x2ae0, 0xae02, 0xe01b, 0xe056, 0xae0e, 0xf09b, 0x2ae0, 0xa81f,
+ 0xe056, 0xae10, 0x2ae0, 0xaf09, 0xe056, 0xf03e, 0xae10, 0x4ce1,
+ 0xe0c2, 0x007b, 0x2a7a, 0xb60b, 0xae09, 0x28e2, 0xe056, 0xe0c2,
+ 0x0072, 0xa208, 0x0863, 0xe0c2, 0x0073, 0x2819, 0xe0c2, 0x0074,
+ 0x281f, 0xe0c2, 0x0070, 0x281f, 0xe016, 0x58f0, 0xe0c2, 0x0078,
+ 0xe42e, 0xe0c0, 0x0045, 0xaf08, 0x3091, 0xe0c0, 0x0060, 0xe049,
+ 0xa81f, 0x3e76, 0xaf08, 0x3075, 0xaf02, 0x3071, 0xe0c0, 0x0065,
+ 0xaf04, 0x301e, 0xaf02, 0xa806, 0x3c1d, 0xa200, 0x3ce3, 0xe0c0,
+ 0x006c, 0xe002, 0x0088, 0x3cda, 0xe0c0, 0x0065, 0xaf0a, 0x30e3,
+ 0xe42e, 0xa200, 0xcc4a, 0xcc4c, 0xd130, 0x0003, 0xd03a, 0x0003,
+ 0xd008, 0x0000, 0xa200, 0xe0c2, 0x0128, 0xe41e, 0x0148, 0xe41e,
+ 0x023a, 0xe41e, 0x04cc, 0xe41e, 0x0720, 0xe41e, 0x128c, 0xa200,
+ 0x3c1f, 0xe41e, 0x041f, 0xa204, 0x3cdd, 0xe41e, 0x12f2, 0xe41e,
+ 0x07d3, 0xf15d, 0x2830, 0xf04a, 0xe41e, 0x13cc, 0xe128, 0x2810,
+ 0xf038, 0x280f, 0x3c15, 0x2863, 0x2a35, 0xb612, 0x3c63, 0xe41e,
+ 0x0728, 0xf05a, 0xa202, 0x3c1f, 0xa202, 0x3c19, 0xe41e, 0x146e,
+ 0xe41e, 0x042e, 0xe16a, 0xe42e, 0xe0c0, 0x0040, 0xa259, 0xae17,
+ 0xe042, 0xe005, 0x1e00, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0xd111, 0x0200, 0xd112, 0x0100, 0xd113, 0x0003, 0xca28, 0xf7f8,
+ 0xe42e, 0xe42e, 0xa200, 0xcc4a, 0xcc4c, 0xd130, 0x0003, 0xd03a,
+ 0x0003, 0xd008, 0x0000, 0xe41e, 0x06da, 0xe41e, 0x0471, 0xe41e,
+ 0x07be, 0xe41e, 0x1305, 0xa2fc, 0x3c1b, 0xa2fa, 0x3c1c, 0xa200,
+ 0x3c1f, 0xa206, 0xe41e, 0x040d, 0xe41e, 0x038c, 0xe41e, 0x03c4,
+ 0xe41e, 0x025f, 0xe41e, 0x1433, 0xf0b8, 0x2830, 0xe418, 0x067b,
+ 0x2830, 0xe41a, 0x068a, 0xe41e, 0x1433, 0xe40a, 0x0544, 0xa202,
+ 0x3c1f, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0xe40a, 0x062c, 0x2819,
+ 0xf1a6, 0x2819, 0xa102, 0x3c19, 0x28a4, 0xf0a4, 0xe41e, 0x12a6,
+ 0x3c72, 0xe41e, 0x12b4, 0xe41e, 0x11ff, 0xe419, 0x11c2, 0x2a63,
+ 0x28a1, 0xf02b, 0x28a3, 0x3c1c, 0x3ca4, 0xa2fe, 0x3ca1, 0x3ca3,
+ 0xe40e, 0x062c, 0x2819, 0xf0a4, 0x28a1, 0x2a63, 0xf02b, 0x28a3,
+ 0x3ca3, 0xe0c0, 0x0060, 0xaf08, 0xf5d8, 0xa2fe, 0x3ca1, 0x3c1c,
+ 0xa2fc, 0x3c1b, 0xe40e, 0x062c, 0x2815, 0xf1ca, 0x2817, 0xa108,
+ 0xf198, 0x28a4, 0xf064, 0xe41e, 0x12a6, 0x3c72, 0xe41e, 0x12b4,
+ 0xe41e, 0x11ff, 0xe419, 0x11c2, 0x28a2, 0x2a63, 0xf02b, 0x28a6,
+ 0x3ca5, 0x3c1c, 0x3ca4, 0xa200, 0x3c17, 0xa202, 0x3c74, 0xe40e,
+ 0x062c, 0xa2fe, 0x3c1b, 0xa202, 0x3c1f, 0xe41e, 0x07af, 0xe40a,
+ 0x062c, 0xa200, 0x3c1a, 0xa2fc, 0x3c1b, 0xa202, 0x3c1f, 0x2830,
+ 0xe418, 0x0869, 0xe404, 0x050f, 0x2830, 0xe41a, 0x0819, 0xe404,
+ 0x050f, 0x281f, 0xb61a, 0x3c1f, 0xe40d, 0x062c, 0x281e, 0xf0ea,
+ 0x2824, 0xf0aa, 0x2891, 0xf05a, 0xa202, 0x3c1f, 0xe40e, 0x062c,
+ 0xe41e, 0x067b, 0xf63e, 0xe40e, 0x05a8, 0x281d, 0xf1aa, 0xa102,
+ 0xf04a, 0xa102, 0xf05a, 0xf0be, 0x2824, 0xf13a, 0xf08e, 0x2824,
+ 0xa104, 0xf0f8, 0x2815, 0xf03a, 0xa204, 0x3c17, 0xe41e, 0x067b,
+ 0xa200, 0x3c46, 0xa2fc, 0x3ca5, 0x3c1c, 0x3ca4, 0xe40e, 0x062c,
+ 0x2815, 0xf19a, 0x282d, 0xf178, 0x28a4, 0xf064, 0xe41e, 0x12a6,
+ 0x3c72, 0xe41e, 0x12b4, 0xe41e, 0x11ff, 0xe419, 0x11c2, 0xa2fa,
+ 0x3c1c, 0xa2fc, 0x3c1b, 0x3ca4, 0xa206, 0x3c17, 0xa202, 0x3c74,
+ 0xe40e, 0x062c, 0xe41e, 0x0e41, 0x286d, 0xe016, 0x4466, 0xf0ba,
+ 0x28a5, 0xe000, 0x0312, 0xe092, 0xa201, 0x3f01, 0xa200, 0x3c1f,
+ 0xe40e, 0x062c, 0x282d, 0x2a3f, 0xe017, 0x3e00, 0x2ac2, 0xa103,
+ 0xe017, 0x4e00, 0xe052, 0xf1c8, 0xe162, 0x0300, 0xa200, 0xc711,
+ 0x3d12, 0x3c44, 0x3c3e, 0x3c0d, 0x3c0c, 0x3cb5, 0x3cb6, 0x3c6c,
+ 0x3c0b, 0x2852, 0x3c43, 0xa202, 0x3c42, 0xe004, 0x1000, 0xcf02,
+ 0xd1b3, 0x0001, 0xe41e, 0x15dd, 0xa200, 0x3c46, 0xf1ce, 0xe41e,
+ 0x020f, 0xa203, 0xb609, 0x3e1f, 0xe404, 0x062c, 0x2836, 0xe016,
+ 0x4430, 0xf0a8, 0xe41e, 0x14c6, 0xa203, 0xb615, 0x3e1f, 0xe40a,
+ 0x062c, 0xe40e, 0x0612, 0xe41e, 0x152a, 0xa203, 0xb615, 0x3e1f,
+ 0xe40a, 0x062c, 0xe41e, 0x1049, 0x2891, 0xf0fa, 0x2815, 0xf0da,
+ 0x2824, 0xa102, 0xf0a8, 0xe41e, 0x142e, 0xba3e, 0xe002, 0x01b6,
+ 0xf048, 0xa202, 0x3c1a, 0x3c1f, 0x244a, 0x4c4b, 0xf068, 0xa2fe,
+ 0x3ca5, 0x3ca4, 0xa2fa, 0x3c1c, 0x281b, 0xe0c2, 0x0077, 0x281c,
+ 0xe0c2, 0x0071, 0xa202, 0x2a1b, 0xb60a, 0x044a, 0x0c4b, 0x344a,
+ 0x3c4b, 0xe0c2, 0x0070, 0x2846, 0xe0c2, 0x0072, 0x2409, 0x4c0a,
+ 0xe0c2, 0x006f, 0x282d, 0xf058, 0x2815, 0xf03a, 0xa208, 0x3c24,
+ 0x28ae, 0xae2a, 0x4c24, 0x2aad, 0xae25, 0xe056, 0x2a2d, 0xae0d,
+ 0xe056, 0xe0c2, 0x0073, 0x2a7a, 0xb60b, 0xae09, 0x28e2, 0xe056,
+ 0xe0c2, 0x007c, 0x2821, 0xe0c2, 0x007e, 0x2c20, 0xe0c2, 0x007d,
+ 0xe41e, 0x0798, 0x281a, 0xae20, 0x4c1f, 0xe0c2, 0x0076, 0xe0c0,
+ 0x0076, 0x2add, 0xae23, 0xe056, 0xe0c2, 0x0076, 0xc84a, 0xc84d,
+ 0xae20, 0xe056, 0xe0c2, 0x0053, 0xa200, 0xe0c2, 0x0074, 0xe41e,
+ 0x146e, 0xe16a, 0xe42e, 0xa200, 0x2a30, 0xf05b, 0x282e, 0xe01a,
+ 0xae0c, 0xa920, 0xcf00, 0xd199, 0x0000, 0xd190, 0x0004, 0xcb20,
+ 0xf7f8, 0xe42e, 0xa200, 0x3cae, 0xd199, 0x0000, 0xd180, 0x0000,
+ 0xd190, 0x0004, 0xcb20, 0xf7f8, 0xe41e, 0x1433, 0xb7f0, 0xe428,
+ 0xba3e, 0xe002, 0x0100, 0xe404, 0x06d6, 0xa13e, 0xf030, 0xe40e,
+ 0x06d6, 0xa102, 0xe404, 0x06d6, 0xe002, 0x000f, 0xf060, 0xba7e,
+ 0xe41e, 0x0933, 0xe40e, 0x0690, 0xe002, 0x0081, 0xf068, 0xba7e,
+ 0xe41e, 0x090b, 0xe40e, 0x0690, 0xa104, 0xf068, 0xba7e, 0xe41e,
+ 0x0c1e, 0xe40e, 0x0690, 0xa102, 0xf068, 0xba7e, 0xe41e, 0x0a21,
+ 0xe40e, 0x0690, 0xa104, 0xf068, 0xba7e, 0xe41e, 0x0912, 0xe40e,
+ 0x0690, 0xa102, 0xf028, 0xe42e, 0xba7e, 0x2a74, 0xe40b, 0x0690,
+ 0xa11a, 0xe408, 0x0690, 0xba7e, 0xe40e, 0x0690, 0xba7e, 0xe40e,
+ 0x0690, 0xe42e, 0xa200, 0x3ce9, 0x3ce5, 0x3cd6, 0x3c3f, 0x3c46,
+ 0x3cbe, 0xe42e, 0xe41e, 0x10af, 0xe41e, 0x0174, 0xca28, 0xf7f8,
+ 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0500, 0xd112, 0x00c4, 0xd113,
+ 0x0003, 0xca29, 0xf7f9, 0xa204, 0xe41e, 0x040d, 0xe0c0, 0x0060,
+ 0x3c4d, 0xe0c0, 0x0061, 0x3c62, 0xe0c0, 0x006e, 0xe41e, 0x020a,
+ 0xe41e, 0x0743, 0xe41e, 0x038c, 0xe42e, 0xe41e, 0x0743, 0xe41e,
+ 0x128c, 0xa202, 0x3c19, 0xe167, 0x0312, 0xe166, 0x0054, 0xa200,
+ 0x3c06, 0x284d, 0xa102, 0xcc44, 0xe184, 0x071d, 0x9e06, 0x5c06,
+ 0xa802, 0xb690, 0x3d17, 0x2806, 0xa002, 0x3c06, 0xe190, 0xe42e,
+ 0xa2fe, 0x3c21, 0x3c7a, 0xe0c2, 0x0079, 0xe0c2, 0x007a, 0xe42e,
+ 0xa23c, 0x3cf0, 0x2850, 0xf166, 0xe002, 0x0078, 0xf130, 0x2851,
+ 0xf116, 0xe002, 0x0078, 0xf0e0, 0x2852, 0xe002, 0x1fe0, 0xf0a0,
+ 0xe0c0, 0x0059, 0xa106, 0xf048, 0xe41e, 0x1433, 0xf038, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xa200, 0x3c4a, 0x3c4b, 0x3c72, 0x3c73,
+ 0xa2fe, 0x3ca2, 0x3ca3, 0x3ca4, 0x3ca5, 0x3ca0, 0x3ca1, 0xa200,
+ 0x3c6d, 0x3ca7, 0x3c74, 0xe161, 0x0312, 0x2a4d, 0xa103, 0x3e00,
+ 0x8600, 0x3d11, 0xe42e, 0x28a7, 0x3c06, 0x2806, 0xe000, 0x0312,
+ 0xe092, 0x2901, 0xf0da, 0x2806, 0xa002, 0x3c06, 0x184d, 0xf038,
+ 0xa200, 0x3c06, 0x2806, 0x18a7, 0xf718, 0xa2fe, 0xe42e, 0xa208,
+ 0xb652, 0x3d01, 0x2806, 0xa002, 0x3ca7, 0x184d, 0xf038, 0xa200,
+ 0x3ca7, 0x2806, 0xe42e, 0xe424, 0xe000, 0x0312, 0xe092, 0xa200,
+ 0x3d01, 0xe42e, 0xe000, 0x0312, 0xe092, 0x2901, 0xe056, 0x3d01,
+ 0xe42e, 0xe000, 0x0312, 0xe092, 0x2901, 0xa806, 0x3d01, 0xe42e,
+ 0xe424, 0xe000, 0x0312, 0xe092, 0x2901, 0xa80a, 0x3d01, 0xe42e,
+ 0xe004, 0x0312, 0xe09e, 0xe004, 0x0054, 0xe09c, 0x284d, 0xa102,
+ 0xcc44, 0xa200, 0x3c06, 0xe184, 0x07ac, 0x2b17, 0xaf05, 0xa803,
+ 0x5a06, 0xe056, 0x2a06, 0xa003, 0x3e06, 0x9f06, 0xe42e, 0xe161,
+ 0x0312, 0x284d, 0xa102, 0xcc44, 0xa200, 0xe184, 0x07ba, 0x2b11,
+ 0xa80d, 0xe01b, 0xe042, 0x184d, 0xe01a, 0xe42e, 0xa200, 0x3c06,
+ 0xe004, 0x0054, 0xe09c, 0x284d, 0xa102, 0xcc44, 0xe184, 0x07d1,
+ 0x9e06, 0x5c06, 0xa802, 0xf048, 0x2806, 0xe412, 0x0789, 0x2a06,
+ 0xa003, 0x3e06, 0xe42e, 0xa23e, 0x3cf0, 0xd130, 0x0003, 0xd199,
+ 0x0004, 0xd190, 0x0004, 0xe41e, 0x1433, 0xa908, 0xcf32, 0xcb20,
+ 0xf7b8, 0xe41e, 0x1433, 0xf348, 0xcb32, 0xaf08, 0xa102, 0xf1da,
+ 0xa102, 0xf27a, 0xba3e, 0xe002, 0x01b0, 0xf058, 0xba7e, 0xe41e,
+ 0x090b, 0xf68e, 0xba7e, 0xe002, 0x012f, 0xf640, 0xe000, 0x000f,
+ 0xf614, 0xe41e, 0x0933, 0xf1cd, 0xa200, 0x3c30, 0x3c34, 0x3c35,
+ 0x3c36, 0x3c37, 0x3c2e, 0xe42e, 0xe0c0, 0x0067, 0xaf10, 0xa802,
+ 0xf088, 0xba6a, 0xe41e, 0x0af8, 0xf0bd, 0xa202, 0x3c30, 0xe42e,
+ 0xba60, 0xe41e, 0x0d7f, 0xf46a, 0xa202, 0x3c30, 0xe42e, 0xe16b,
+ 0xe42e, 0xa200, 0x3cae, 0xd199, 0x0000, 0xd180, 0x0000, 0xd190,
+ 0x0004, 0xcb20, 0xf7f8, 0xe41e, 0x1433, 0xb7f0, 0xe428, 0xe41e,
+ 0x149a, 0xba7e, 0xe002, 0x0100, 0xf394, 0xa13e, 0xf030, 0xe40e,
+ 0x081f, 0xa102, 0xf334, 0xe002, 0x000f, 0xf060, 0xe41e, 0x0933,
+ 0xf2dd, 0xe40e, 0x081f, 0xe002, 0x0081, 0xf058, 0xe41e, 0x090b,
+ 0xe40e, 0x081f, 0xa104, 0xf058, 0xe41e, 0x0c1e, 0xe40e, 0x081f,
+ 0xa102, 0xf058, 0xe41e, 0x0a21, 0xe40e, 0x081f, 0xa104, 0xf058,
+ 0xe41e, 0x0912, 0xe40e, 0x081f, 0xa102, 0xf078, 0xe41e, 0x0e33,
+ 0xe41e, 0x0a2c, 0xf0ba, 0xe42e, 0x2a74, 0xe40b, 0x081f, 0xa11a,
+ 0xe408, 0x081f, 0xba7e, 0xe40e, 0x081f, 0xe41e, 0x0e3e, 0xe16b,
+ 0xe42e, 0x28dd, 0xa802, 0x3cdd, 0x282e, 0xe01a, 0xae0c, 0xa920,
+ 0xcf00, 0xd199, 0x0000, 0xd190, 0x0004, 0xcb20, 0xf7f8, 0xe41e,
+ 0x1433, 0xb7f0, 0xe428, 0xe41e, 0x149a, 0x282e, 0xf08a, 0xba60,
+ 0xe41e, 0x0e33, 0xe41e, 0x0d7f, 0xf09a, 0xe42e, 0xba6a, 0xe41e,
+ 0x0e33, 0xe41e, 0x0af8, 0xf02d, 0xe42e, 0xe16a, 0xe41e, 0x142e,
+ 0xf59e, 0xe41e, 0x0e3e, 0xe16b, 0xe42e, 0xba5e, 0x2860, 0xa120,
+ 0x3c48, 0x7448, 0x2852, 0xe41e, 0x0d4d, 0x3c48, 0x7448, 0x3c01,
+ 0x1852, 0xf034, 0x2852, 0x3c01, 0xba48, 0x3c27, 0xba40, 0xe40a,
+ 0x08e5, 0xa201, 0xba40, 0xb431, 0xf7e8, 0xe0c3, 0x0078, 0xba40,
+ 0xe40a, 0x08e5, 0x2c20, 0xe41e, 0x0d4d, 0x3c48, 0x7448, 0x3c2b,
+ 0xe0c2, 0x0079, 0xba40, 0xe40a, 0x08e5, 0xba42, 0x3c24, 0xa106,
+ 0xe016, 0x3c3f, 0xba44, 0xe000, 0x0220, 0xe09e, 0x2907, 0x3c26,
+ 0x2824, 0xf1ca, 0xba44, 0x3c28, 0x3c0c, 0xa102, 0x3c29, 0x3c11,
+ 0xa202, 0x5829, 0xa102, 0x3c2a, 0x3c12, 0x2824, 0xa104, 0xf0e8,
+ 0xba44, 0x3c0d, 0xa102, 0x3c13, 0xa202, 0x5813, 0xa102, 0x3c14,
+ 0xe004, 0x0040, 0x4c0d, 0xae0c, 0x4c0c, 0x2801, 0xe42e, 0x3c05,
+ 0xf028, 0xba60, 0xa224, 0x3cf0, 0xba40, 0xf1ca, 0x2852, 0xe41e,
+ 0x0e1d, 0x3c48, 0x7648, 0x3e01, 0xa116, 0xf076, 0x2805, 0xf058,
+ 0xa224, 0x3cf0, 0xba40, 0xf0ea, 0x2805, 0xf038, 0xba48, 0x3c27,
+ 0xa224, 0x3cf0, 0xba40, 0xf06a, 0x2805, 0xf028, 0xba42, 0x2801,
+ 0xe42e, 0xa2fe, 0xe42e, 0xba4e, 0x3ce0, 0xa200, 0x3cd5, 0xe41e,
+ 0x0c19, 0xe42e, 0xba40, 0xf08a, 0xba46, 0xa102, 0xe424, 0xa108,
+ 0xe420, 0xba44, 0xe42a, 0xba46, 0xa102, 0xe428, 0xba40, 0xf08a,
+ 0xba44, 0xba40, 0xba40, 0xf04a, 0xba4e, 0xba4e, 0xba4e, 0xe41e,
+ 0x0d31, 0xe42a, 0xa202, 0x3cd5, 0xe41e, 0x0c19, 0xe41e, 0x0d31,
+ 0xe42a, 0xba7e, 0xe42e, 0xa202, 0x3c02, 0xba40, 0xba4e, 0x3ce1,
+ 0xba40, 0xf0da, 0xa202, 0x3cf0, 0xba46, 0xa102, 0xe404, 0x0a1f,
+ 0xa108, 0xe400, 0x0a1f, 0xa00a, 0x3c02, 0xba44, 0xba46, 0x3ce2,
+ 0xa11e, 0xf0f8, 0xa204, 0x3cf0, 0xba4e, 0x3c7a, 0xe40a, 0x0a1f,
+ 0xa206, 0x3cf0, 0xba4f, 0xe40b, 0x0a1f, 0xae11, 0x4e7a, 0x3e7a,
+ 0xba40, 0xf25a, 0xa208, 0x3cf0, 0xba42, 0xa102, 0xe408, 0x0a1f,
+ 0xba40, 0xba40, 0xf1ca, 0xba5c, 0xa20a, 0x3cf0, 0xba40, 0xe40a,
+ 0x0a1f, 0xba5c, 0xba40, 0xe40a, 0x0a1f, 0xba5c, 0xba40, 0xe40a,
+ 0x0a1f, 0xba44, 0xba54, 0xa20a, 0x3cf0, 0xba40, 0xe40a, 0x0a1f,
+ 0xba5c, 0xa20a, 0x3cf0, 0xba40, 0xe40a, 0x0a1f, 0xa20c, 0x3cf0,
+ 0xba42, 0xe408, 0x0a1f, 0xa20a, 0x3cf0, 0xba40, 0xe40a, 0x0a1f,
+ 0xa2fe, 0x3c21, 0xa20e, 0x3cf0, 0xba5e, 0xe40a, 0x0a1f, 0x3c20,
+ 0xa20a, 0x3cf0, 0xba40, 0xba40, 0xe40a, 0x09a0, 0x2c20, 0xe41e,
+ 0x0d4d, 0x3c48, 0xa210, 0x3cf0, 0x7448, 0xe40a, 0x0a1f, 0x3c21,
+ 0xa20a, 0x3cf0, 0xba40, 0xe40a, 0x0a1f, 0xba58, 0x3c09, 0xa01e,
+ 0xaf08, 0x3c50, 0xa20a, 0x3cf0, 0xba41, 0xba58, 0x3c0a, 0xa01e,
+ 0xaf08, 0x3c51, 0xa20a, 0x3cf0, 0xba40, 0xe40a, 0x0a1f, 0xba40,
+ 0x3cad, 0xa212, 0x3cf0, 0xba40, 0xe40a, 0x0a1f, 0x2a02, 0xa103,
+ 0xb636, 0xb652, 0x3c48, 0xa215, 0x3ef0, 0x7648, 0x28c0, 0xf05a,
+ 0xa214, 0x3cf0, 0xe409, 0x0a1f, 0xf18b, 0xa103, 0xe40b, 0x0a1f,
+ 0xa103, 0xe04a, 0xe016, 0x3cc1, 0xa103, 0xe40b, 0x0a1f, 0xba4a,
+ 0x3cc2, 0xba42, 0x3cc4, 0xba40, 0x3cc3, 0x28c2, 0xa104, 0xf054,
+ 0xa214, 0x3cf0, 0xe40e, 0x0a1f, 0xa216, 0x3cf0, 0xba40, 0xe408,
+ 0x0a1f, 0xba40, 0x3c0e, 0xf07a, 0xba40, 0xe418, 0x0d57, 0xba40,
+ 0xe418, 0x0d6b, 0x2802, 0xa102, 0xe40a, 0x09f8, 0xba40, 0x3c18,
+ 0xa218, 0x3cf0, 0xba40, 0xe40a, 0x0a1f, 0xba40, 0xba40, 0x3c22,
+ 0xe40a, 0x0a03, 0xba40, 0x3c23, 0x2802, 0xa102, 0xe40a, 0x0a0d,
+ 0xba40, 0xf03a, 0xba42, 0xba40, 0xba40, 0x3c2c, 0xa21a, 0x3cf0,
+ 0xba40, 0xe408, 0x0a1f, 0xe41e, 0x0d31, 0xf0aa, 0xa204, 0x3cd5,
+ 0xe41e, 0x0c19, 0x8450, 0x8251, 0xe018, 0x3c52, 0xe42e, 0xe16b,
+ 0xe42e, 0xba62, 0xba40, 0xba40, 0xe41e, 0x0d31, 0xe42a, 0xa206,
+ 0x3cd5, 0xe41e, 0x0c19, 0xe42e, 0xa200, 0x3cae, 0x3cac, 0xe0c0,
+ 0x0059, 0xa106, 0xf048, 0x28dd, 0xa802, 0x3cdd, 0xba42, 0x3c24,
+ 0xa106, 0xe016, 0x3c3f, 0xa201, 0xba40, 0xb431, 0xf7e8, 0x3e00,
+ 0xe0c3, 0x0078, 0xba40, 0xe40a, 0x0af3, 0x2c20, 0xe41e, 0x0d4d,
+ 0xa102, 0xf022, 0xa200, 0xa002, 0x3c48, 0x7448, 0x3c2b, 0xe0c2,
+ 0x0079, 0x2824, 0xa104, 0xf0fa, 0x28a9, 0x3ca8, 0x0800, 0x3ca9,
+ 0x84a9, 0x8220, 0xe018, 0x082b, 0x3c4e, 0x28b0, 0x3caf, 0x284e,
+ 0x3cb0, 0xf1ee, 0x28a8, 0x0800, 0x3c00, 0x8400, 0x8220, 0xe018,
+ 0x082b, 0x3c4e, 0x28b2, 0xf048, 0x284e, 0x18af, 0x3cb2, 0x28af,
+ 0xc70f, 0x7cb2, 0x3c00, 0x28b0, 0xc70f, 0x7cb2, 0x1800, 0xae02,
+ 0x3cb3, 0x284e, 0xc70f, 0x7cb2, 0x1800, 0xae02, 0x3cb4, 0xba40,
+ 0xe40a, 0x0af3, 0xba40, 0x3c2d, 0xe40a, 0x0af1, 0xa200, 0x3c25,
+ 0x2824, 0xa102, 0xf05a, 0xa104, 0xf058, 0x28c1, 0xf03a, 0xba40,
+ 0x3c25, 0x282c, 0xf07a, 0x2824, 0xa104, 0xf042, 0xba40, 0xe408,
+ 0x0af3, 0xba44, 0xe000, 0x0220, 0xe09e, 0x2907, 0x3c26, 0x28ad,
+ 0xf05a, 0xba40, 0x3cae, 0xba40, 0x3cac, 0x283f, 0x44c1, 0x2ac2,
+ 0xe01b, 0xe052, 0xf23a, 0xe162, 0x03b2, 0xd022, 0x0001, 0xe184,
+ 0x0ac5, 0xb83c, 0xe40d, 0x0af3, 0xf0ea, 0xa102, 0x3c00, 0xba40,
+ 0xf078, 0xa205, 0x5a00, 0xa103, 0x7400, 0xe046, 0xf04e, 0x5800,
+ 0x7600, 0xe056, 0x3d12, 0xba40, 0xe40a, 0x0af3, 0x28c3, 0xf06a,
+ 0xb83e, 0xe40d, 0x0af3, 0x3c00, 0x7400, 0xba48, 0x3c27, 0x2824,
+ 0xe40a, 0x0af1, 0xba44, 0x3c28, 0x3c0c, 0xe40a, 0x0af3, 0xa102,
+ 0x3c29, 0x3c11, 0xa202, 0x5829, 0xa102, 0x3c2a, 0x3c12, 0x2824,
+ 0xa104, 0xf108, 0xba44, 0x3c0d, 0xe40a, 0x0af3, 0xa102, 0x3c13,
+ 0xa202, 0x5813, 0xa102, 0x3c14, 0xe004, 0x0040, 0x4c0d, 0xae0c,
+ 0x4c0c, 0xa202, 0xe42e, 0x28dd, 0xa902, 0x3cdd, 0xa200, 0xe42e,
+ 0xba4e, 0x3c2b, 0xa202, 0x3cf0, 0xba40, 0xe40a, 0x0c17, 0xa204,
+ 0x3cf0, 0xba40, 0xe408, 0x0c17, 0xba40, 0xba40, 0xba40, 0xba44,
+ 0x3c02, 0xa10e, 0xe40a, 0x0b2c, 0xba40, 0x3c24, 0xba40, 0x3c39,
+ 0xa208, 0x3cf0, 0xba44, 0xe408, 0x0c17, 0xba48, 0x3c27, 0xa204,
+ 0x3cf0, 0xba40, 0xe408, 0x0c17, 0xa20a, 0x3cf0, 0xe41e, 0x0d3a,
+ 0xe40a, 0x0c17, 0xa200, 0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c3a,
+ 0x3c25, 0x3c38, 0xe40e, 0x0bd6, 0xa202, 0x3c3a, 0xa200, 0x3c02,
+ 0xa20c, 0x3cf0, 0xba44, 0x3c03, 0xa102, 0xe400, 0x0c17, 0xe404,
+ 0x0b5e, 0xba44, 0x3c02, 0xa10c, 0xe418, 0x0d3a, 0xba40, 0x3c38,
+ 0xba40, 0x3c39, 0xa210, 0x3cf0, 0xba42, 0xe408, 0x0c17, 0xba40,
+ 0x3c34, 0xba40, 0x3c35, 0xba40, 0x3c36, 0xa212, 0x3cf0, 0xba44,
+ 0xe408, 0x0c17, 0xba40, 0x3c37, 0xa202, 0x3cf0, 0xba40, 0xe40a,
+ 0x0c17, 0xa204, 0x3cf0, 0xba44, 0xe408, 0x0c17, 0xa214, 0x3cf0,
+ 0xba44, 0xa102, 0xe400, 0x0c17, 0xa002, 0x3c24, 0xa216, 0x3cf0,
+ 0xba42, 0xe408, 0x0c17, 0xba40, 0x3c25, 0xa218, 0x3cf0, 0xba44,
+ 0xa102, 0xe408, 0x0c17, 0xa21a, 0x3cf0, 0xba40, 0xe408, 0x0c17,
+ 0x2802, 0xa10c, 0xf1e8, 0x2803, 0xf1ca, 0xa21c, 0x3cf0, 0xba46,
+ 0x3c7a, 0x3ce2, 0xe40a, 0x0c17, 0xba50, 0xa002, 0xae04, 0x3c09,
+ 0xba40, 0xe40a, 0x0c17, 0xba50, 0xae04, 0x3c0a, 0x2809, 0xa01e,
+ 0xaf08, 0x3c50, 0x280a, 0xa01e, 0xaf08, 0x3c51, 0xe41e, 0x0df5,
+ 0x287a, 0xf0da, 0xa11e, 0xf0b8, 0xba4e, 0x3c7a, 0xe40a, 0x0c17,
+ 0xba4e, 0xe40a, 0x0c17, 0xae10, 0x4c7a, 0x3c7a, 0x2838, 0x4403,
+ 0xf13a, 0xa21e, 0x3cf0, 0xba40, 0xe000, 0x03e8, 0xba4d, 0xe40b,
+ 0x0c17, 0x3c21, 0x3e20, 0xe004, 0x1b77, 0xae10, 0xe00a, 0x0040,
+ 0xc70f, 0x7c20, 0x3c20, 0x2838, 0xf05a, 0xba42, 0xae10, 0x4c2b,
+ 0x3c2b, 0x2839, 0x4403, 0xf09a, 0xba40, 0x3c3b, 0xf068, 0xa220,
+ 0x3cf0, 0xba40, 0xe40a, 0x0c17, 0x2836, 0x4403, 0xf06a, 0xa222,
+ 0x3cf0, 0xba42, 0xe408, 0x0c17, 0xba48, 0x3c27, 0xba40, 0xf03a,
+ 0xba4e, 0xf7de, 0x8450, 0x8251, 0xe018, 0x3c52, 0x2836, 0xf05a,
+ 0xa202, 0xe41e, 0x08e7, 0xf344, 0x2838, 0xf078, 0xe004, 0x03e9,
+ 0x3c21, 0xe004, 0x7530, 0x3c20, 0xa200, 0x3c22, 0x3c23, 0xa202,
+ 0x3c28, 0x3c0c, 0x3c2d, 0xa200, 0x3c29, 0x3c2a, 0xe167, 0x0220,
+ 0x2907, 0x3c26, 0x2839, 0xf1ba, 0x283a, 0xf038, 0xa200, 0xf17e,
+ 0x283b, 0xf15a, 0xa204, 0x2a50, 0xa12d, 0xf057, 0xa002, 0xa12d,
+ 0xf027, 0xa002, 0x3c00, 0xa204, 0x2a51, 0xa125, 0xf057, 0xa002,
+ 0xa125, 0xf027, 0xa002, 0xae06, 0x4c00, 0xf01e, 0xe42e, 0xe16b,
+ 0xe42e, 0xba3e, 0xe002, 0x01b2, 0xe428, 0xba7e, 0xa200, 0x3cdc,
+ 0x2ae3, 0xe0c0, 0x0065, 0xaf0a, 0xa802, 0xe017, 0xe052, 0x3ce5,
+ 0xe41e, 0x0c4b, 0xf1ea, 0x2adc, 0xa109, 0xf039, 0xa202, 0x3c16,
+ 0x28e3, 0xe408, 0x0c78, 0x2816, 0xf068, 0xba2e, 0xa102, 0xe42a,
+ 0xba4e, 0xf7ce, 0xba2e, 0xa102, 0xe42a, 0xba4e, 0xe002, 0x0070,
+ 0xf7a8, 0xa202, 0x2a10, 0xf039, 0x3c0f, 0xf02e, 0x3c15, 0xf73e,
+ 0x28e3, 0xf2f8, 0xe42e, 0xe164, 0x0630, 0xe163, 0x062c, 0xe162,
+ 0x0628, 0xe004, 0x0044, 0x3d12, 0xe004, 0x0069, 0x3d12, 0xe004,
+ 0x0076, 0x3d12, 0xe004, 0x0058, 0x3d12, 0xe162, 0x0628, 0xd022,
+ 0x0003, 0xe184, 0x0c75, 0xba2e, 0xa102, 0xe42a, 0xba4e, 0x3d03,
+ 0x2adc, 0xa803, 0xf049, 0xae10, 0x3cdb, 0xf03e, 0x4cdb, 0x3d14,
+ 0x2913, 0x1912, 0x2adc, 0xa003, 0x3edc, 0xe428, 0xa202, 0xe42e,
+ 0x2ae3, 0x28d6, 0xa120, 0xb615, 0x3ee3, 0xe40b, 0x0c33, 0x2816,
+ 0xf168, 0xba2e, 0xa102, 0xf34a, 0xba4e, 0x2adc, 0xa803, 0xf049,
+ 0xae10, 0x3cdb, 0xf03e, 0x4cdb, 0x3d14, 0x2adc, 0xa003, 0x3edc,
+ 0xa80f, 0xe41b, 0x0d12, 0x28e3, 0xf36a, 0xf6ce, 0xba2e, 0xa102,
+ 0xf1fa, 0xba4e, 0xe002, 0x0070, 0xf088, 0x2a10, 0xf049, 0xa203,
+ 0x3e0f, 0xf03e, 0xa203, 0x3e15, 0xe000, 0x0070, 0x2adc, 0xa803,
+ 0xf049, 0xae10, 0x3cdb, 0xf03e, 0x4cdb, 0x3d14, 0x2adc, 0xa003,
+ 0x3edc, 0xa80f, 0xe41b, 0x0d12, 0x28e3, 0xf15a, 0xf60e, 0x2adc,
+ 0xa803, 0xf03b, 0x28db, 0x3d14, 0xa211, 0x28dc, 0xa80e, 0xf0ba,
+ 0xe045, 0xaf03, 0xf06b, 0xa103, 0x3e00, 0xa201, 0x8600, 0x3f14,
+ 0xe41e, 0x0d12, 0xa201, 0xba2e, 0xa102, 0xf04a, 0xba4e, 0xa203,
+ 0xf7be, 0x3ee5, 0xe162, 0x0630, 0x28d5, 0x3d12, 0x28dc, 0x3d12,
+ 0x28e5, 0x3d12, 0xa200, 0x3d12, 0xe0c1, 0x006b, 0x28d6, 0xa002,
+ 0xae06, 0xe041, 0xaf06, 0x3cd6, 0xca28, 0xf7f8, 0xe180, 0xce21,
+ 0xd111, 0x0630, 0xd112, 0x0004, 0xd113, 0x0000, 0xe1e1, 0xe181,
+ 0x28e3, 0xe428, 0xa200, 0x3cd8, 0xe0c0, 0x005c, 0xe0c1, 0x0065,
+ 0xaf12, 0xa802, 0xaf15, 0xa803, 0xe016, 0xe056, 0xf04a, 0xa200,
+ 0x3ce3, 0xe42e, 0x28d9, 0xf05a, 0xe0c0, 0x005d, 0xe42a, 0xf7be,
+ 0xe0c0, 0x005d, 0xe00a, 0x0200, 0xe0c2, 0x005d, 0xa202, 0xce00,
+ 0x3cd9, 0xf71e, 0xe0c0, 0x006b, 0xe000, 0x0088, 0x08d8, 0xca29,
+ 0xf7f9, 0xe180, 0xce20, 0xd111, 0x0630, 0xd112, 0x0004, 0xd113,
+ 0x0000, 0xe1e1, 0xe181, 0xe164, 0x0630, 0x28d7, 0x2ad8, 0xa010,
+ 0xa011, 0x3cd7, 0x3ed8, 0x1ada, 0xe41b, 0x0cf2, 0xa200, 0x3cd9,
+ 0xe42e, 0xe41e, 0x142e, 0xba2e, 0xa102, 0xe016, 0xe428, 0xba4e,
+ 0xf7be, 0xe42e, 0x2802, 0xae04, 0xe000, 0x0200, 0xe09e, 0x2917,
+ 0x3c09, 0xaf08, 0x3c50, 0x2917, 0x3c0a, 0xaf08, 0x3c51, 0x2917,
+ 0x3c32, 0x2907, 0x3c31, 0xe01a, 0xe42e, 0xa102, 0xa201, 0xf04a,
+ 0xaf02, 0xa003, 0xf7e8, 0xe04a, 0xe428, 0xa202, 0xe42e, 0xe004,
+ 0x0040, 0xe165, 0x0332, 0xba4f, 0xf05b, 0x3e00, 0x3f15, 0xa102,
+ 0xf7b0, 0xf06a, 0xa102, 0x3c01, 0x2a00, 0x8601, 0x3f15, 0x28aa,
+ 0xa902, 0x3caa, 0xe42e, 0xe004, 0x0040, 0xe165, 0x0372, 0xba4f,
+ 0xf05b, 0x3e00, 0x3f15, 0xa102, 0xf7b0, 0xf06a, 0xa102, 0x3c01,
+ 0x2a00, 0x8601, 0x3f15, 0x28aa, 0xa904, 0x3caa, 0xe42e, 0xba48,
+ 0x3c2f, 0xa104, 0xe402, 0x0dc2, 0xa202, 0x3c2e, 0xba4e, 0x3c2b,
+ 0xba44, 0xe404, 0x0dc2, 0xa10c, 0xe400, 0x0dc2, 0xa008, 0xe41e,
+ 0x0dc4, 0xba42, 0x3c24, 0xa102, 0xa201, 0x3ebe, 0xf046, 0xa203,
+ 0x3e24, 0x3ebe, 0xba40, 0xba48, 0x3c27, 0xba40, 0xf03a, 0xba4e,
+ 0xf7de, 0xa200, 0x3c39, 0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c3a,
+ 0x3c25, 0x3c38, 0x3c22, 0x3c23, 0xa202, 0x3c28, 0x3c0c, 0x3c2d,
+ 0xe167, 0x0220, 0x2907, 0x3c26, 0x8450, 0x8251, 0xe018, 0x3c52,
+ 0xa2fe, 0x3ce2, 0xe004, 0x03e9, 0x3c21, 0xe004, 0x7530, 0x3c20,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xf092, 0xa002, 0xf04a, 0xba4e,
+ 0xba4f, 0xf21e, 0xba5e, 0xba5f, 0xf1ee, 0xa207, 0xe045, 0xf107,
+ 0xae05, 0xe001, 0x0200, 0xe09f, 0x2917, 0x3c09, 0x2917, 0x3c0a,
+ 0x2917, 0x3c32, 0x3c50, 0x2907, 0x3c31, 0x3c51, 0xe42e, 0xf07b,
+ 0xe004, 0x00a0, 0xe005, 0x0078, 0xe40e, 0x0dea, 0xe004, 0x0140,
+ 0xe005, 0x00f0, 0x3c09, 0x3e0a, 0xa01e, 0xa01f, 0xaf08, 0xaf09,
+ 0x3c50, 0x3e51, 0xe41e, 0x0df5, 0xe42e, 0x280a, 0xe002, 0x0190,
+ 0xf086, 0xe002, 0x0190, 0xf0a6, 0xe002, 0x0160, 0xf0f6, 0xf16e,
+ 0x2850, 0x3c32, 0x2851, 0x3c31, 0xe42e, 0x2850, 0xae02, 0x3c32,
+ 0x2851, 0xa002, 0xaf02, 0x3c31, 0xe42e, 0x2850, 0xae04, 0x3c32,
+ 0x2851, 0xa006, 0xaf04, 0x3c31, 0xe42e, 0x2850, 0xae06, 0x3c32,
+ 0x2851, 0xa00e, 0xaf06, 0x3c31, 0xe42e, 0xe049, 0xa103, 0xa15f,
+ 0xa20c, 0xe427, 0xa167, 0xa20e, 0xe427, 0xe003, 0x0129, 0xa212,
+ 0xe427, 0xe003, 0x04a4, 0xa216, 0xe427, 0xe003, 0x1290, 0xa21a,
+ 0xe427, 0xa21c, 0xe42e, 0x28e9, 0xe428, 0xc001, 0x2417, 0x4c18,
+ 0xc000, 0xe0c2, 0x0051, 0xa202, 0x3ce9, 0xe42e, 0xa200, 0x3ce9,
+ 0xe42e, 0xa200, 0xcc8e, 0xe0c2, 0x030a, 0xe0c2, 0x0320, 0x2837,
+ 0xae02, 0x4c36, 0xae02, 0x4c35, 0xae02, 0x4c34, 0xae04, 0x2ad1,
+ 0xb472, 0x4c30, 0xae08, 0xa906, 0xe0c2, 0x0100, 0xa200, 0xe0c2,
+ 0x0128, 0x2a75, 0x4e71, 0xb692, 0xae08, 0xa92c, 0xe0c2, 0x017c,
+ 0xe004, 0x0014, 0xe0c2, 0x017d, 0xe0c0, 0x0050, 0xe049, 0xe008,
+ 0x007f, 0x3cbc, 0xaf11, 0xe009, 0x007f, 0x3ebd, 0x46bc, 0x3ebc,
+ 0xa200, 0x2abc, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2abc, 0xa805,
+ 0xf03b, 0xe00a, 0x0009, 0x2abc, 0xa809, 0xf03b, 0xe00a, 0x0020,
+ 0x2abc, 0xa811, 0xf03b, 0xe00a, 0x0040, 0xe0c2, 0x040c, 0x2835,
+ 0x4c63, 0xf1fa, 0xe0c1, 0x0046, 0xe004, 0x0048, 0xae10, 0xe042,
+ 0x2abd, 0xa809, 0xf05b, 0xe161, 0x05e4, 0x2111, 0x4d11, 0xe0c2,
+ 0x0211, 0xe0c1, 0x0046, 0xe004, 0x0088, 0xae10, 0xe042, 0x2abd,
+ 0xa811, 0xf05b, 0xe161, 0x05e6, 0x2111, 0x4d11, 0xe0c2, 0x0212,
+ 0xe0c0, 0x0046, 0xe005, 0x0000, 0xae11, 0xe042, 0x2abd, 0xa805,
+ 0xf05b, 0xe161, 0x05e2, 0x2111, 0x4d11, 0xe0c2, 0x0103, 0xe161,
+ 0x05c0, 0x2111, 0x4d11, 0xcf42, 0xe0c1, 0x0046, 0xe004, 0x0040,
+ 0xae10, 0xe042, 0x2abd, 0xa803, 0xf05b, 0xe161, 0x05e0, 0x2111,
+ 0x4d11, 0xcf44, 0x2aaa, 0xe0c3, 0x013d, 0xa803, 0xa200, 0xe419,
+ 0x1096, 0x2aaa, 0xa805, 0xa202, 0xe419, 0x1096, 0x2ad3, 0xf04b,
+ 0x2009, 0x4c0a, 0xf04e, 0x2050, 0x4c51, 0xae08, 0xe0c2, 0x0101,
+ 0xe0c2, 0x0205, 0x2850, 0xae20, 0x4c51, 0xae08, 0xcf60, 0x2837,
+ 0xcf68, 0x2a24, 0xa105, 0xe017, 0x3e66, 0x283e, 0xae02, 0x4c18,
+ 0xae06, 0x4c0d, 0xae06, 0x4c0c, 0xcf46, 0x282f, 0xae02, 0x4cd2,
+ 0xae02, 0x4cd1, 0xae04, 0xa904, 0x4cad, 0xae02, 0x4c2e, 0xae04,
+ 0x4c30, 0xae02, 0x2a30, 0xf029, 0xa902, 0xae04, 0x4c24, 0xae02,
+ 0x4cae, 0xcf00, 0x2834, 0xae02, 0x4c35, 0xae02, 0x2a24, 0xa105,
+ 0xf05b, 0x4c22, 0xae02, 0x4c23, 0xf02e, 0xae02, 0xae02, 0x4c37,
+ 0xcf24, 0xa200, 0xe41e, 0x036c, 0xe0c2, 0x0102, 0x2863, 0x4466,
+ 0xf078, 0x2a63, 0xe41e, 0x075b, 0x3c1b, 0x3ca2, 0x3ca5, 0x28a0,
+ 0x2a66, 0xe41b, 0x0790, 0x2a63, 0xf07b, 0xa201, 0xe41e, 0x075b,
+ 0x3ca6, 0x3ca5, 0x3c1b, 0x28a4, 0xe412, 0x12a6, 0x3c72, 0x28a5,
+ 0xe41e, 0x1292, 0x3c73, 0x2872, 0xe41e, 0x12b4, 0x2866, 0x3c74,
+ 0xf1a8, 0x2824, 0xe016, 0x303e, 0x28be, 0xf058, 0x28a2, 0xa205,
+ 0xe412, 0x0782, 0x28a3, 0x3ca5, 0x28a2, 0x2a63, 0xf05b, 0x28a2,
+ 0xe412, 0x0789, 0x28a6, 0x3ca3, 0x28bf, 0xf038, 0x28a1, 0x3ca0,
+ 0x28a2, 0x3ca1, 0x28be, 0x3cbf, 0xa206, 0xae08, 0x4c24, 0xae06,
+ 0xe0c2, 0x0204, 0xa204, 0x2a35, 0x4e63, 0xb632, 0xe0c2, 0x0210,
+ 0x3c01, 0xa200, 0xe41e, 0x036c, 0x2a01, 0xae11, 0xe056, 0xe0c2,
+ 0x0213, 0xa200, 0xe0c2, 0x0215, 0xa204, 0x2a63, 0x4666, 0x4e35,
+ 0xb612, 0xe0c2, 0x0208, 0xf049, 0x2aa2, 0xe0c3, 0x020b, 0x2835,
+ 0x4c63, 0xf07a, 0x28a6, 0x2a35, 0xf02b, 0x28a2, 0xe0c2, 0x0214,
+ 0x28a1, 0xf174, 0xa202, 0xe0c2, 0x0302, 0x28a0, 0xf052, 0x28a1,
+ 0xf032, 0x28a2, 0xb608, 0xe0c2, 0x0380, 0x28a1, 0xf052, 0x28a0,
+ 0xf032, 0x28a2, 0xb608, 0xe0c2, 0x0383, 0xa200, 0xe0c2, 0x0302,
+ 0xa204, 0x4c18, 0xae02, 0x4c25, 0xe0c2, 0x0303, 0xa20e, 0xe0c2,
+ 0x0312, 0xe0c0, 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414, 0xe41a,
+ 0x12bb, 0xa200, 0xe0c2, 0x0308, 0xa200, 0x3c75, 0x3c76, 0x3c71,
+ 0xa202, 0x3c78, 0x28a4, 0xe412, 0x11ff, 0x28a5, 0x3c1c, 0xf024,
+ 0x3ca4, 0xa202, 0x3c6b, 0xa201, 0x28ac, 0xb6d1, 0xae0b, 0xe0c3,
+ 0x0104, 0x2a6d, 0xa105, 0xf05b, 0xa005, 0x2866, 0xb435, 0x3e6d,
+ 0xe41e, 0x0274, 0xa202, 0xe0c2, 0x0106, 0xe0c0, 0x0065, 0xaf0c,
+ 0xa80e, 0xe40a, 0x1018, 0xca29, 0xf7f9, 0xe180, 0xe0c1, 0x006a,
+ 0xce21, 0xd111, 0x0618, 0xd112, 0x000c, 0xd113, 0x0003, 0xca29,
+ 0xf7f9, 0xe181, 0xaf04, 0x30e4, 0x28e4, 0xe40a, 0x1018, 0xa210,
+ 0x3c00, 0xe162, 0x0312, 0xe163, 0x0610, 0xa201, 0xd022, 0x0002,
+ 0xe184, 0x0ffd, 0x2912, 0xa81e, 0xe055, 0xae09, 0x2912, 0xa81e,
+ 0xe055, 0x3f13, 0x2800, 0xa102, 0xf03a, 0x3c00, 0xf6fe, 0xca29,
+ 0xf7f9, 0xe162, 0x061a, 0x2112, 0x4d12, 0xe180, 0xce20, 0xd111,
+ 0x0610, 0xd112, 0x0008, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181,
+ 0xe162, 0x0618, 0xc410, 0xa200, 0x2ae4, 0xb632, 0xae10, 0x3d12,
+ 0xa220, 0x3d12, 0xe42e, 0xa200, 0xcc8e, 0xe0c2, 0x0320, 0xe0c2,
+ 0x030a, 0x2837, 0xae02, 0x4c36, 0xae02, 0x4c35, 0xae02, 0x4c34,
+ 0xae04, 0x2ad1, 0xb472, 0x4c30, 0xae08, 0xa906, 0xe0c2, 0x0100,
+ 0x2a75, 0x4e71, 0xb692, 0xae08, 0xa92c, 0xe0c2, 0x017c, 0xe004,
+ 0x0014, 0xe0c2, 0x017d, 0xa200, 0xe41e, 0x036c, 0xe0c2, 0x0102,
+ 0xe42e, 0xe0c0, 0x0065, 0xaf0a, 0xa802, 0xf16a, 0xe162, 0x0630,
+ 0x28d6, 0x3d12, 0x28d7, 0x3d12, 0xe0c0, 0x006b, 0xca29, 0xf7f9,
+ 0xe180, 0xce20, 0xd111, 0x0630, 0xd112, 0x0004, 0xd113, 0x0000,
+ 0xca28, 0xf7f8, 0xe181, 0xe0c0, 0x0065, 0xe008, 0x0100, 0xf10a,
+ 0xca29, 0xf7f9, 0xe0c0, 0x006a, 0xe180, 0xce20, 0xd112, 0x0004,
+ 0xd111, 0x0618, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181, 0xa200,
+ 0x3cd7, 0x3cd6, 0x3ce3, 0x3cd8, 0x3cd9, 0xe0c0, 0x0111, 0xf7e8,
+ 0x2875, 0x4c71, 0xe42a, 0xa204, 0xae0e, 0x4c50, 0xa102, 0xae0e,
+ 0x4c51, 0xa102, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202,
+ 0xe0c2, 0x014a, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0xe161, 0x0332,
+ 0xa201, 0xf05a, 0xe161, 0x0372, 0xe005, 0x0040, 0xa202, 0xe0c2,
+ 0x013c, 0xd022, 0x003f, 0xe184, 0x10aa, 0x2911, 0xe0c3, 0x013e,
+ 0xe0c2, 0x013f, 0xa003, 0xa200, 0xe0c2, 0x013c, 0xe42e, 0xe167,
+ 0x05e0, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184, 0x10b9, 0x9e16,
+ 0x3517, 0x3d17, 0xe42e, 0xa201, 0x3ee6, 0x280e, 0xae0a, 0x4c5d,
+ 0xe0c2, 0x0115, 0xa27f, 0x2858, 0xf028, 0x2a5e, 0xe0c3, 0x012a,
+ 0xa27e, 0xe0c2, 0x0116, 0x28ab, 0xae08, 0x4c58, 0xe0c2, 0x0114,
+ 0x2835, 0x4c63, 0xf07a, 0x2859, 0x4435, 0xe016, 0xae0a, 0x4c5d,
+ 0xcf6a, 0x2858, 0xe41a, 0x10f1, 0x2858, 0xe016, 0x4c66, 0xf038,
+ 0xe41e, 0x1810, 0xe41e, 0x1140, 0xe0c0, 0x0111, 0xf7e8, 0xa202,
+ 0xe0c2, 0x0110, 0xe41e, 0x1231, 0x2875, 0x4c71, 0xe418, 0x11d7,
+ 0xe42e, 0x2a0b, 0xe0c3, 0x030d, 0xa200, 0x2a66, 0xf03b, 0x2a6c,
+ 0xb676, 0x2a5b, 0xb672, 0x2a0b, 0xb632, 0x3c00, 0xae06, 0x4c00,
+ 0x3c00, 0xae0c, 0x4c00, 0xe0c2, 0x0309, 0x2866, 0x2a6c, 0xa105,
+ 0xe017, 0xe052, 0xe016, 0x3c64, 0xa200, 0x2a6c, 0xa107, 0xb62a,
+ 0x4466, 0x3c65, 0xae02, 0x4c64, 0x3ce6, 0xae04, 0x4ce6, 0x3ce6,
+ 0xae08, 0x4ce6, 0xe0c2, 0x030c, 0xa200, 0x2a0b, 0x4664, 0xf08b,
+ 0x28b5, 0xae0a, 0x4cb5, 0xae0a, 0x4cb6, 0xae0a, 0x4cb6, 0xe0c2,
+ 0x030a, 0xa202, 0xae20, 0xe00a, 0x0842, 0x2a0b, 0x4665, 0xf09b,
+ 0x2ab7, 0xae0b, 0x4eb7, 0xae0b, 0x4eb8, 0xae0b, 0x4eb8, 0xe056,
+ 0xe0c2, 0x030b, 0x2824, 0xa104, 0xe42a, 0xe41e, 0x1810, 0xe42e,
+ 0x286b, 0xe0c2, 0x0131, 0xa200, 0x3c6b, 0x285c, 0xe0c2, 0x0130,
+ 0xe42e, 0x2069, 0x4c6a, 0xcf48, 0x2856, 0x4c58, 0x4c59, 0xf09a,
+ 0xd1b3, 0x0008, 0xd1b3, 0x0010, 0x283f, 0xf058, 0xe40e, 0x1182,
+ 0x283f, 0xf11a, 0x2859, 0x2ac5, 0xe016, 0xe017, 0xe052, 0xf0b8,
+ 0xe162, 0x03b2, 0x2112, 0x4d0a, 0xcf4c, 0x2112, 0x4d0a, 0xcf54,
+ 0xe40e, 0x1182, 0xe162, 0x0301, 0x2112, 0x4d12, 0xcf4c, 0x2112,
+ 0x4d12, 0xcf4e, 0x2112, 0x4d12, 0xcf50, 0x2112, 0x4d12, 0xcf52,
+ 0x2866, 0xf09a, 0x8112, 0xc418, 0x2112, 0x4d32, 0xcf54, 0x2112,
+ 0x4d32, 0xcf58, 0x286c, 0xe016, 0x4466, 0x443e, 0xe40a, 0x11b3,
+ 0xca28, 0xf7f8, 0xa202, 0xcf62, 0xcf64, 0xe0c0, 0x0046, 0xe005,
+ 0x00a8, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xe180, 0xce20, 0xd111,
+ 0x05d0, 0xd112, 0x0008, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181,
+ 0xe0c0, 0x0046, 0xe005, 0x00a8, 0xae11, 0xe042, 0xca29, 0xf7f9,
+ 0xe180, 0xce20, 0xd111, 0x0048, 0xd112, 0x0002, 0xd113, 0x001b,
+ 0xca28, 0xf7f8, 0xe181, 0xd1a0, 0x0001, 0xcb40, 0xf7f8, 0x286c,
+ 0xe016, 0x4466, 0x443e, 0xe42a, 0x2853, 0xcf64, 0x2054, 0x4c55,
+ 0xcf62, 0xe42e, 0xe41e, 0x1023, 0xa200, 0x3c54, 0x3c55, 0xa202,
+ 0x3c78, 0xe41e, 0x11d7, 0xe41e, 0x1271, 0xf7c8, 0xa200, 0x3c78,
+ 0xe41e, 0x11d7, 0xe190, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0x2854,
+ 0x4c55, 0xe01a, 0x3c77, 0x2871, 0xf11a, 0x2854, 0xe41a, 0x124e,
+ 0x2854, 0xaf02, 0xe000, 0x0460, 0xe09e, 0x2907, 0x2a54, 0xa803,
+ 0xf029, 0xaf10, 0xe008, 0x001f, 0x3c79, 0x2879, 0xae02, 0x4c77,
+ 0xae02, 0x4c78, 0xae0e, 0x4c54, 0xae0e, 0x4c55, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe42e, 0xe0c0,
+ 0x0060, 0xe049, 0xa861, 0xe42b, 0xe049, 0xa81e, 0x3c76, 0xaf09,
+ 0x3275, 0xaf03, 0x3271, 0x28a4, 0xe0c2, 0x0143, 0xa200, 0xe0c2,
+ 0x017f, 0xe0c2, 0x0149, 0xa200, 0xe41e, 0x036c, 0xe0c2, 0x017f,
+ 0x2850, 0xa102, 0xae20, 0x4c51, 0xa102, 0xe0c2, 0x0142, 0xe41e,
+ 0x0371, 0xae20, 0x2a71, 0xae09, 0xe056, 0x2a75, 0xf02b, 0x4c76,
+ 0xe0c2, 0x014e, 0xe0c0, 0x0061, 0xa87e, 0xe0c2, 0x0144, 0xa203,
+ 0xe42e, 0x2854, 0xaf02, 0xe000, 0x0420, 0xe09e, 0x2907, 0x2a54,
+ 0xa803, 0x4c5d, 0xf039, 0x285d, 0xae10, 0x3d07, 0x2854, 0xa002,
+ 0x1850, 0xe41a, 0x1244, 0xe42e, 0xe180, 0xca28, 0xf7f8, 0x2873,
+ 0x3c07, 0xa204, 0x3c06, 0xd111, 0x0420, 0xf0ae, 0xe180, 0xca28,
+ 0xf7f8, 0x2872, 0x3c07, 0xa206, 0x3c06, 0xd111, 0x0460, 0xe0c0,
+ 0x0041, 0xe005, 0x0037, 0xae11, 0xe042, 0x2a07, 0xae1d, 0xe042,
+ 0x2a55, 0xae0f, 0xe042, 0xce20, 0x2850, 0xa002, 0xaf02, 0xa006,
+ 0xa2f9, 0xe052, 0xce24, 0x8806, 0x0113, 0xca28, 0xf7f8, 0xe181,
+ 0xe42e, 0x2854, 0xa002, 0x3c54, 0x1850, 0xe428, 0x3c54, 0x2855,
+ 0xa002, 0x3c55, 0x1851, 0xe42e, 0x8112, 0xa204, 0x5818, 0xa102,
+ 0x3ce7, 0x2902, 0x44e7, 0x3ce8, 0x2902, 0xaf02, 0x5c18, 0x5818,
+ 0xae04, 0x4ce8, 0x3d0a, 0xe42e, 0xe161, 0x04a0, 0xa2fe, 0xc703,
+ 0x3d11, 0xe42e, 0x3c06, 0xe004, 0x04a0, 0xe092, 0xa200, 0x2b11,
+ 0xf075, 0xa002, 0xe049, 0xa109, 0xf7b9, 0xa200, 0xe42e, 0xe049,
+ 0xe001, 0x04a0, 0xe093, 0x2a06, 0x3f11, 0xe42e, 0x3c06, 0xe004,
+ 0x04a0, 0xe092, 0xa200, 0x2b11, 0x1a06, 0xf06b, 0xa002, 0xe049,
+ 0xa109, 0xf7a9, 0xa200, 0xe42e, 0xe424, 0xe000, 0x04a0, 0xe092,
+ 0xa2fe, 0x3d01, 0xe42e, 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3,
+ 0x0152, 0x2b17, 0xe009, 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153,
+ 0xe0c1, 0x0101, 0xe0c3, 0x015d, 0x2824, 0xa104, 0xe005, 0x001b,
+ 0xf038, 0xe005, 0x001f, 0x3e00, 0x28a0, 0xa53e, 0xa400, 0x2aa1,
+ 0xa53f, 0xa401, 0xae11, 0xe055, 0xae21, 0xe167, 0x01a2, 0x2907,
+ 0xaf10, 0x4400, 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2, 0x0150,
+ 0xe0c0, 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151,
+ 0xf7e8, 0xe42e, 0xe0c0, 0x0045, 0xaf08, 0x3091, 0xe0c0, 0x0060,
+ 0x3480, 0x3c81, 0x3486, 0x3c87, 0xe0c0, 0x0061, 0xae14, 0x3482,
+ 0x3c83, 0x0480, 0x0c81, 0x3484, 0x3c85, 0x288c, 0xf13a, 0xe0c0,
+ 0x0048, 0x3492, 0x3c93, 0x2492, 0x4c93, 0xe0c1, 0x0049, 0x3688,
+ 0x3e89, 0x1488, 0x1c89, 0xe0c1, 0x0045, 0xaf05, 0xa803, 0xb611,
+ 0x3e8c, 0xe0c0, 0x0048, 0xe008, 0x01ff, 0x3c8a, 0xe0c0, 0x0048,
+ 0x3486, 0xe008, 0xfe00, 0x3c87, 0xa200, 0xcc92, 0xcc8e, 0xe180,
+ 0xe41e, 0x13cc, 0xd071, 0x202a, 0xe181, 0xa200, 0x3c8e, 0xa200,
+ 0x3498, 0x3c97, 0xcc72, 0xe41e, 0x1377, 0x2c8a, 0xa102, 0xf034,
+ 0xba4f, 0xf7de, 0xc872, 0xe41e, 0x1496, 0xa202, 0x3c8e, 0xa202,
+ 0xb61a, 0xe16a, 0xe42e, 0xcb40, 0xf7f8, 0xc896, 0xf11a, 0x288c,
+ 0xf0a8, 0xe41e, 0x1390, 0x288c, 0xf08a, 0xa200, 0x2a9b, 0xe003,
+ 0x01fc, 0xb62e, 0xe418, 0x138d, 0xa200, 0x3c9a, 0xf05e, 0xd04b,
+ 0x0001, 0xa200, 0x3c9a, 0xe41e, 0x14a3, 0x2899, 0xcc6e, 0xd04c,
+ 0x0000, 0xa214, 0xa102, 0xf7f0, 0xe470, 0x288c, 0xe428, 0xa202,
+ 0x3c9a, 0xe41e, 0x1390, 0x288c, 0xcc96, 0xe42e, 0xc896, 0xe428,
+ 0xd04b, 0x0001, 0x2899, 0xcc6e, 0xd04c, 0x0000, 0xe42e, 0xa200,
+ 0x3c8d, 0x3c99, 0xe41e, 0x1390, 0xa200, 0x3c9a, 0x288c, 0xf07a,
+ 0x289b, 0xa118, 0xf042, 0xe41e, 0x138d, 0xf79e, 0xd04b, 0x0001,
+ 0x2899, 0xcc6e, 0xe190, 0xe128, 0xe42e, 0xe41e, 0x144a, 0xf04e,
+ 0x288c, 0xe41a, 0x13a2, 0x289b, 0xaf12, 0x088d, 0xa802, 0x3c8d,
+ 0x289b, 0xe008, 0x01ff, 0x3c9b, 0x288d, 0xae12, 0x089b, 0xaf04,
+ 0x3c99, 0xe42e, 0xd027, 0x0000, 0xe41e, 0x13f3, 0xd027, 0x0001,
+ 0x289b, 0xe42a, 0xca28, 0xf7f8, 0x2486, 0x4c87, 0xce20, 0x288d,
+ 0xae0e, 0xce22, 0xd112, 0x0080, 0xe0c0, 0x0043, 0xa806, 0xae02,
+ 0xa022, 0xce26, 0xca28, 0xf7f8, 0x2486, 0x4c87, 0xe000, 0x0200,
+ 0x3486, 0x3c87, 0x1484, 0x1c85, 0xf054, 0x2480, 0x4c81, 0x3486,
+ 0x3c87, 0xe41e, 0x1470, 0xe42e, 0xd030, 0x0000, 0xd031, 0x0000,
+ 0xd032, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000,
+ 0xd036, 0x00ff, 0xd037, 0x0000, 0xd038, 0x0000, 0xd039, 0x0000,
+ 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd149, 0x0000, 0xe42e, 0xe0c1,
+ 0x0059, 0xa103, 0xa200, 0xb636, 0xe000, 0x001c, 0xe0c1, 0x0045,
+ 0xe052, 0xe01a, 0xe42e, 0xe0c0, 0x0043, 0xa808, 0xf318, 0xa200,
+ 0x3c8b, 0xe004, 0x0200, 0x3c9b, 0xe41e, 0x13e7, 0x3c8c, 0x2486,
+ 0x4c87, 0xe0c1, 0x0049, 0x3692, 0x3e93, 0x2692, 0x4e93, 0xe045,
+ 0xf033, 0x0682, 0x0e83, 0xe003, 0x0200, 0x288c, 0xb606, 0x3c8c,
+ 0xf173, 0xe001, 0x0200, 0x3e9b, 0x288c, 0xf128, 0x288b, 0xf658,
+ 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf60a, 0xe0c0, 0x005d, 0xe00a,
+ 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c8b, 0xf56e, 0x289b,
+ 0x2a8c, 0xf039, 0xe004, 0x0200, 0x3c9b, 0xe42e, 0xc868, 0xa80e,
+ 0x3c00, 0x7400, 0xe42e, 0x288c, 0xe42a, 0xe41e, 0x1470, 0xe0c0,
+ 0x0049, 0x3492, 0x3c93, 0x2492, 0x4c93, 0xe0c1, 0x0048, 0x3692,
+ 0x3e93, 0x2692, 0x4e93, 0xe045, 0xa200, 0xb626, 0xe003, 0x0200,
+ 0xb606, 0xe42e, 0xe004, 0x01b1, 0x2a30, 0xf03b, 0xe004, 0x8000,
+ 0x3c7b, 0x288d, 0xae12, 0x089b, 0xaf04, 0xcc78, 0xcc76, 0x289b,
+ 0xa806, 0x3c7d, 0xf0da, 0xae06, 0x3c7c, 0xa240, 0x187c, 0x3c7d,
+ 0xc87a, 0x5c7d, 0x587d, 0x2e7b, 0x5e7c, 0xe042, 0xcc7a, 0x2c7b,
+ 0x587d, 0xcc7a, 0x289b, 0xa008, 0x3c9b, 0xe42e, 0xe41e, 0x142e,
+ 0xc872, 0x349c, 0x3c9d, 0xe41e, 0x1493, 0xe049, 0x249c, 0x4c9d,
+ 0xaf06, 0xe046, 0xb608, 0x2a8e, 0xb616, 0xe0c1, 0x0048, 0x3692,
+ 0x3e93, 0x2692, 0x4e93, 0xe042, 0xe049, 0x1684, 0x1e85, 0xf035,
+ 0x1482, 0x1c83, 0xe0c2, 0x0048, 0xe0c2, 0x0052, 0x249c, 0x4c9d,
+ 0xe41e, 0x1496, 0xe42e, 0x249e, 0x4c9f, 0xe42e, 0xaf06, 0x349e,
+ 0x3c9f, 0xe42e, 0xe41e, 0x1470, 0xc001, 0xe0c0, 0x0048, 0x3417,
+ 0x3c18, 0xc000, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xe41e, 0x14ae, 0xe418, 0x01db, 0xe42e, 0x288c, 0xe42a,
+ 0xe41e, 0x1470, 0xe0c0, 0x0048, 0x3492, 0x3c93, 0x2492, 0x4c93,
+ 0xe0c1, 0x0049, 0x3692, 0x3e93, 0x2692, 0x4e93, 0xe045, 0xf033,
+ 0x0682, 0x0e83, 0xa109, 0xa200, 0xb62e, 0xe42e, 0xd1b3, 0x0001,
+ 0xa223, 0x2824, 0xf0ca, 0x2a0c, 0xa021, 0xa102, 0xf08a, 0x283f,
+ 0xf068, 0x280c, 0x2a0d, 0xe061, 0xa021, 0xa425, 0x3e60, 0x2824,
+ 0xf068, 0xe161, 0x0300, 0xa200, 0xc711, 0x3d11, 0x2827, 0x3c42,
+ 0xa200, 0x3c70, 0x3c43, 0x3c44, 0xcf64, 0xcf62, 0x2866, 0xf09a,
+ 0x2851, 0xa102, 0xf068, 0xa202, 0xcf62, 0xcb60, 0xa020, 0xcf60,
+ 0x2844, 0x4c70, 0xf14a, 0x2836, 0xf088, 0xe41e, 0x164f, 0xf0da,
+ 0xe41e, 0x0895, 0x3c43, 0xf0be, 0xe41e, 0x1677, 0xf06a, 0xa200,
+ 0xe41e, 0x08e7, 0x3c43, 0xf03e, 0x2852, 0x3c43, 0x2844, 0x1843,
+ 0xf680, 0xf07a, 0xe41e, 0x15dd, 0x2843, 0x3c44, 0x1852, 0xf19a,
+ 0xa202, 0x3c70, 0x2824, 0xa104, 0xe01a, 0x4422, 0xf068, 0xe41e,
+ 0x157f, 0xd1b3, 0x0006, 0xf06e, 0xe41e, 0x166c, 0xd1b3, 0x0002,
+ 0xe428, 0x286b, 0xa002, 0x3c6b, 0x2844, 0x1852, 0xe404, 0x14f0,
+ 0xa202, 0xe42e, 0xd1b3, 0x0001, 0x2827, 0x3c42, 0xa200, 0x3c43,
+ 0x3c44, 0x3c33, 0xcf64, 0xcf62, 0xa2fe, 0x3c40, 0x2844, 0x1843,
+ 0xf072, 0xe41e, 0x15dd, 0x2843, 0x3c44, 0x1852, 0xf35a, 0xe41e,
+ 0x157f, 0x2843, 0x0832, 0x3c43, 0x1852, 0xf034, 0x2852, 0x3c43,
+ 0x2833, 0xa002, 0x3c33, 0x2844, 0x1852, 0xf26a, 0x282e, 0xf678,
+ 0x2844, 0x1843, 0xf094, 0xba20, 0xa102, 0xf618, 0xd1b3, 0x0002,
+ 0x286b, 0xa002, 0x3c6b, 0xe41e, 0x1659, 0x3c41, 0xf12a, 0xba60,
+ 0xba48, 0x3c41, 0x2840, 0xba43, 0xf038, 0xe046, 0xf758, 0xba48,
+ 0x3c27, 0x2841, 0x3c33, 0x8433, 0x8232, 0xe018, 0x3c43, 0xf47e,
+ 0x2852, 0x3c43, 0xf44e, 0xa22c, 0xe41e, 0x1607, 0xa17e, 0xf048,
+ 0xe41e, 0x142e, 0xba6a, 0xe41e, 0x142e, 0xa202, 0xe42e, 0x2827,
+ 0x3c61, 0x2832, 0x0843, 0x3c45, 0x2843, 0x3c53, 0xc70f, 0x7c50,
+ 0x3454, 0x3c55, 0x2853, 0x1852, 0xe40a, 0x15d8, 0xe41e, 0x1741,
+ 0xe40a, 0x15db, 0x285d, 0x3c61, 0x2853, 0xa002, 0x3c53, 0xcf64,
+ 0xe41e, 0x1691, 0xe01a, 0x3c78, 0x2054, 0x4c55, 0xcf62, 0x2830,
+ 0xe40a, 0x15bd, 0x2836, 0xe408, 0x15b6, 0x2853, 0x1845, 0xe408,
+ 0x158a, 0x2861, 0x3c27, 0xba20, 0xa102, 0xf2ba, 0xa222, 0xe41e,
+ 0x1607, 0xa102, 0xf268, 0xe41e, 0x142e, 0xf23e, 0xe41e, 0x1643,
+ 0xe40a, 0x158a, 0xe41e, 0x142e, 0xf1ce, 0xd190, 0x0008, 0xcb20,
+ 0xf7f8, 0xe41e, 0x162a, 0xf05a, 0xba40, 0xe41e, 0x142e, 0xf11e,
+ 0xe41e, 0x1612, 0xe40a, 0x158a, 0x2855, 0x1851, 0xf06a, 0xe41e,
+ 0x1836, 0xa802, 0xe408, 0x158a, 0xba40, 0xe41e, 0x142e, 0xf01e,
+ 0x2853, 0x3c44, 0xe42e, 0xe16a, 0xf7ce, 0x244a, 0x4c4b, 0xe016,
+ 0x3c58, 0xe016, 0x3c59, 0x2842, 0x3c5d, 0xa200, 0x3c5b, 0x3c5f,
+ 0x3c5c, 0x2844, 0x3c53, 0xc70f, 0x7c50, 0x3454, 0x3c55, 0x2853,
+ 0x1843, 0xf112, 0xe41e, 0x1149, 0xe41e, 0x10bb, 0x2853, 0xa002,
+ 0x3c53, 0xcf64, 0xe41e, 0x1691, 0xe01a, 0x3c78, 0x2054, 0x4c55,
+ 0xcf62, 0xf6ee, 0x2843, 0x1844, 0x0846, 0x3c46, 0xe42e, 0x3c48,
+ 0xc869, 0xa80f, 0xe042, 0x3c49, 0x7849, 0xa203, 0x5a48, 0xa103,
+ 0xe052, 0xe42e, 0xc868, 0xa80e, 0xa102, 0xb6e8, 0xa002, 0x3c48,
+ 0x7848, 0xa203, 0x5a48, 0xaf03, 0xa103, 0xe046, 0xe016, 0xe42a,
+ 0xa22e, 0x0848, 0x3c48, 0x7848, 0xa203, 0xae2f, 0xa103, 0xe052,
+ 0xe016, 0xe42e, 0xc868, 0xa80e, 0xa102, 0xb6e8, 0xa002, 0x3c48,
+ 0x7848, 0xa203, 0x5a48, 0xaf03, 0xa103, 0xe046, 0xe016, 0xe42a,
+ 0x2860, 0x0848, 0x3c48, 0x7848, 0xa203, 0x5a60, 0xa103, 0xe052,
+ 0xa102, 0xe016, 0xe42e, 0xc869, 0xa80f, 0x3e48, 0x7848, 0xe016,
+ 0xa023, 0x3e48, 0xe42a, 0x7848, 0xa102, 0xe016, 0xe42e, 0xe41e,
+ 0x142e, 0x7860, 0xa102, 0xe016, 0xe428, 0xba2c, 0xe42a, 0xba4e,
+ 0xf79e, 0xba20, 0xa102, 0xf03a, 0xba40, 0xf7ce, 0xba2a, 0xa83e,
+ 0x3c41, 0xe42a, 0xa13e, 0xe42a, 0x2841, 0x1833, 0xf764, 0x2841,
+ 0x1832, 0xf732, 0x2841, 0xe42e, 0x2824, 0xa104, 0xf058, 0xe41e,
+ 0x15dd, 0xa202, 0xe42e, 0xe41e, 0x1863, 0xa200, 0xe42e, 0xe41e,
+ 0x142e, 0xba20, 0xa102, 0xf03a, 0xba4e, 0xf7ce, 0xba2a, 0xa83e,
+ 0xe42a, 0xa13e, 0xe42a, 0xa03e, 0xaf08, 0xf77a, 0xe42e, 0xa200,
+ 0x3c58, 0x3c5f, 0x2824, 0xe418, 0x1149, 0xa200, 0xe41e, 0x10bb,
+ 0xe42e, 0xd188, 0x0001, 0x2854, 0xa002, 0x3c54, 0x1850, 0xe428,
+ 0xd1b3, 0x0004, 0x3c54, 0x2855, 0xa002, 0x3c55, 0x1851, 0xe42e,
+ 0xba42, 0xe000, 0x0228, 0xe09e, 0x2907, 0x0861, 0xa402, 0xa53e,
+ 0x3c5d, 0xe42e, 0x2837, 0xf75a, 0xba40, 0xf0da, 0xba40, 0xae0a,
+ 0x0861, 0xe000, 0x022c, 0xe09e, 0x2907, 0x0861, 0xa402, 0xa53e,
+ 0x3c5d, 0xe42e, 0xba48, 0x3c5d, 0xe42e, 0xe161, 0x0300, 0x280b,
+ 0xf03a, 0xa203, 0xf03e, 0x2a5b, 0xb673, 0x3f11, 0xcc45, 0xe184,
+ 0x16d5, 0xe41e, 0x16d7, 0xe42d, 0x3d11, 0xe41e, 0x16d7, 0xe42d,
+ 0x3d11, 0x280b, 0xf03a, 0x8111, 0x8111, 0xe190, 0xe42e, 0xb80c,
+ 0xa140, 0xe42d, 0xe42a, 0x5829, 0x7629, 0x1a2a, 0xf030, 0xe046,
+ 0xe046, 0xe042, 0xe42e, 0x286c, 0xa802, 0xe40a, 0x1701, 0x280c,
+ 0x3c28, 0x2811, 0x3c29, 0x2812, 0x3c2a, 0xe161, 0x0300, 0x2a0b,
+ 0x3f11, 0xcc45, 0xe184, 0x1700, 0xe41e, 0x16d7, 0xe42d, 0x3d11,
+ 0xe41e, 0x16d7, 0xe42d, 0x3d11, 0x280b, 0xf03a, 0x8111, 0x8111,
+ 0xe190, 0x286c, 0xf20a, 0xa106, 0xf1ea, 0x280d, 0x3c28, 0x2813,
+ 0x3c29, 0x2814, 0x3c2a, 0xe161, 0x0300, 0x2a0b, 0x3f01, 0xe161,
+ 0x0309, 0x3f11, 0xcc45, 0xe184, 0x1721, 0xe41e, 0x16d7, 0xe42d,
+ 0x3d11, 0xe41e, 0x16d7, 0xe42d, 0x3d11, 0x280b, 0xf03a, 0x8111,
+ 0x8111, 0xe190, 0xe42e, 0x28b0, 0x18af, 0xf02a, 0x3c69, 0x284e,
+ 0x18af, 0x3c6a, 0xe42e, 0xe161, 0x0300, 0xe162, 0x0309, 0xa206,
+ 0x3d11, 0x3d12, 0xe41e, 0x173e, 0x3d11, 0x3d12, 0xe42d, 0xe41e,
+ 0x173e, 0x3d11, 0x3d12, 0xe41e, 0x1723, 0xe42e, 0xb80c, 0xa140,
+ 0xe42e, 0x2861, 0xcf36, 0x2830, 0xe408, 0x17c5, 0x2866, 0xf0da,
+ 0xe41e, 0x1836, 0xcf38, 0xa802, 0x2ac1, 0xe017, 0xe052, 0xf05a,
+ 0xe004, 0x1000, 0xcf02, 0xf0ee, 0xd190, 0x0002, 0xe180, 0xe180,
+ 0x289a, 0xe41a, 0x1365, 0xe181, 0xcb20, 0xf7f8, 0xcb22, 0xe408,
+ 0x17c0, 0xcb02, 0x30b8, 0xaf02, 0x30b7, 0xaf02, 0x30b6, 0xaf02,
+ 0x30b5, 0xaf02, 0x30c5, 0xaf02, 0x300b, 0xaf02, 0x30ab, 0xaf02,
+ 0x305c, 0xaf06, 0x305b, 0xaf02, 0x3058, 0xaf02, 0x3059, 0xaf02,
+ 0x3056, 0xaf02, 0xe049, 0xa807, 0x3e6c, 0xaf04, 0xe049, 0xa83f,
+ 0x3e5d, 0xaf0a, 0x3c5e, 0x2859, 0xf368, 0x2856, 0x2a56, 0xe418,
+ 0x1723, 0xf1d9, 0x2866, 0xf0aa, 0x286c, 0xe41a, 0x172b, 0x286c,
+ 0xe418, 0x16e3, 0xe40d, 0x17c0, 0xf07e, 0x2858, 0x4cc5, 0xe41a,
+ 0x16bd, 0xe40d, 0x17c0, 0x2858, 0x2a61, 0x1a26, 0xb606, 0x2a66,
+ 0xb612, 0x3c5f, 0xcf26, 0xd190, 0x0001, 0x2a24, 0xe419, 0x1149,
+ 0xe180, 0xe180, 0x289a, 0xe41a, 0x1365, 0xe181, 0xcb20, 0xf7f8,
+ 0xa202, 0x3cbb, 0xcb22, 0xe408, 0x17c0, 0xa200, 0xe41e, 0x10bb,
+ 0xa202, 0xe42e, 0xa208, 0x3c6c, 0xe41e, 0x1687, 0xa202, 0xe42e,
+ 0xd191, 0x0000, 0xe16a, 0xa200, 0xe42e, 0xd190, 0x0002, 0xcb20,
+ 0xf7f8, 0xcb22, 0xe408, 0x180b, 0xcb02, 0xaf0e, 0xe049, 0xa807,
+ 0x3e5c, 0xaf06, 0x305b, 0xaf02, 0x3058, 0xaf02, 0x3059, 0xaf08,
+ 0xe049, 0xa83e, 0x3c5d, 0xaf0b, 0x3e5e, 0x2859, 0xf298, 0x2858,
+ 0xf078, 0x2839, 0x443a, 0xf02a, 0xf03e, 0xe41e, 0x16bd, 0xe40d,
+ 0x180b, 0x2834, 0xe016, 0x4458, 0x3c5f, 0x2858, 0x4434, 0xae02,
+ 0x4c5f, 0xcf26, 0xd190, 0x0001, 0x2824, 0xe418, 0x1149, 0xe180,
+ 0xe180, 0x289a, 0xe41a, 0x1365, 0xe181, 0xcb21, 0xf7f9, 0xcb22,
+ 0xe408, 0x180b, 0xa200, 0xe41e, 0x10bb, 0xa202, 0xe42e, 0xe41e,
+ 0x1687, 0xa202, 0xe42e, 0xd191, 0x0000, 0xe16a, 0xa200, 0xe42e,
+ 0x2854, 0xaf04, 0xe000, 0x0400, 0xe09e, 0x2a54, 0xa807, 0xa107,
+ 0xe013, 0xae05, 0x3e00, 0xa21f, 0x5a00, 0xa2fe, 0xe059, 0x2907,
+ 0xe052, 0x2a59, 0xf05b, 0x5a00, 0xe056, 0x3d07, 0xf0ae, 0x2ab5,
+ 0xae03, 0x4eb6, 0xae03, 0x4e0b, 0xae03, 0x5a00, 0xe056, 0x3d07,
+ 0x2854, 0xa002, 0x1850, 0xe41a, 0x1848, 0xe42e, 0x2854, 0xe41a,
+ 0x184a, 0x2854, 0xaf04, 0xe000, 0x0400, 0xe092, 0x2a54, 0xa807,
+ 0xa107, 0xe013, 0xae05, 0x3e00, 0x2901, 0x5c00, 0xa81e, 0xe42e,
+ 0xa204, 0xf02e, 0xa206, 0x3c06, 0xe0c0, 0x0041, 0xe005, 0x0026,
+ 0xae11, 0xe042, 0x2a55, 0xae0d, 0xe042, 0xca29, 0xf7f9, 0xe180,
+ 0xce20, 0xd111, 0x0400, 0xd112, 0x0020, 0x8806, 0x0113, 0xca28,
+ 0xf7f8, 0xe181, 0xe42e, 0x2827, 0x3c61, 0x2832, 0x0843, 0x3c45,
+ 0xe160, 0x0006, 0x2824, 0xf0a8, 0xe41e, 0x18a9, 0xe40a, 0x18a7,
+ 0xe41e, 0x1910, 0xe40a, 0x18a7, 0xf09e, 0xe41e, 0x1947, 0xe40a,
+ 0x18a7, 0xe41e, 0x19b1, 0xe40a, 0x18a7, 0xa200, 0x3c4f, 0x2843,
+ 0x3c53, 0xc70f, 0x7c50, 0x3454, 0x3c55, 0x2827, 0x3c61, 0x3c5d,
+ 0x2853, 0x1852, 0xe40a, 0x18a4, 0xe41e, 0x1a33, 0xe40a, 0x18a7,
+ 0x285d, 0x3c61, 0x2853, 0xa002, 0x3c53, 0xcf64, 0xe41e, 0x1691,
+ 0xe01a, 0x3c78, 0x2054, 0x4c55, 0xcf62, 0x2853, 0x1845, 0xe408,
+ 0x1888, 0xba40, 0xe41e, 0x142e, 0x2853, 0x3c44, 0xe42e, 0xe16a,
+ 0xf7ce, 0xd1b3, 0x0020, 0xa200, 0x3c67, 0xe161, 0x0800, 0xe004,
+ 0x0800, 0x3c68, 0x2843, 0x3c53, 0x2853, 0x1852, 0xe402, 0x1905,
+ 0x2861, 0xcf36, 0xd199, 0x0000, 0xa203, 0x2861, 0x1826, 0xb605,
+ 0x3e5f, 0xa909, 0xcf27, 0xd190, 0x0002, 0xcb20, 0xf7f8, 0xcb22,
+ 0xe408, 0x190a, 0xcb02, 0xaf04, 0x30b6, 0xaf02, 0x30b5, 0xaf04,
+ 0x300b, 0xa200, 0x3c59, 0xcb02, 0xaf20, 0xe049, 0xa8fe, 0xae02,
+ 0x4c5f, 0xae06, 0xa908, 0x3d11, 0xa83f, 0x3e5d, 0x2a5f, 0xf0bb,
+ 0xcb2c, 0x3511, 0x3d11, 0xcb2e, 0x3511, 0x3d11, 0xcb30, 0x3511,
+ 0x3d11, 0xf02e, 0x8131, 0xe082, 0xe002, 0x08f0, 0xf084, 0xe41e,
+ 0x1a9f, 0x2867, 0xa002, 0x3c67, 0xe161, 0x0800, 0x285f, 0xf058,
+ 0xd190, 0x0008, 0xcb20, 0xf7f8, 0x285d, 0x3c61, 0x2853, 0xa002,
+ 0x3c53, 0xcb32, 0xa808, 0xe40a, 0x18b4, 0xba64, 0x2a53, 0x3e45,
+ 0xa202, 0xe42e, 0xd191, 0x0000, 0x2843, 0x3c53, 0xa200, 0xe42e,
+ 0x1a43, 0xa103, 0xcc45, 0x2867, 0xf07a, 0xe41e, 0x1a9f, 0xa200,
+ 0x3c67, 0xe41e, 0x1aa1, 0xe161, 0x0800, 0xe184, 0x1936, 0xba40,
+ 0xb809, 0xf22d, 0xae08, 0xe056, 0xae16, 0x2b01, 0xe056, 0x3d11,
+ 0x8131, 0xe082, 0xe002, 0x08f0, 0xf0a4, 0xe41e, 0x1a9f, 0x2867,
+ 0xa002, 0x3c67, 0xe41e, 0x1aa1, 0xe161, 0x0800, 0xe190, 0x2867,
+ 0xf09a, 0xe41e, 0x1a9f, 0xa200, 0x3c67, 0xe41e, 0x1aa1, 0xa202,
+ 0x3c67, 0xa202, 0xe42e, 0x2843, 0x3c53, 0xa200, 0xe42e, 0xd1b3,
+ 0x0020, 0xa200, 0x3c67, 0xe161, 0x0800, 0x2843, 0xe005, 0x0800,
+ 0x3c53, 0x3e68, 0x2853, 0x1852, 0xe402, 0x19a8, 0xba40, 0xe40a,
+ 0x195c, 0x3d11, 0xe40e, 0x1987, 0xb802, 0xa10e, 0xe40d, 0x19ad,
+ 0xf76a, 0xa00e, 0x3058, 0xaf02, 0x305a, 0xaf02, 0x305b, 0xaf02,
+ 0x3c01, 0x285a, 0xae04, 0x4c01, 0xae0e, 0x4c58, 0xae02, 0x4c5b,
+ 0xae02, 0x3d11, 0x2858, 0xf118, 0x285b, 0xb670, 0xcc44, 0xe184,
+ 0x1982, 0xe41e, 0x16d7, 0xe40d, 0x19ad, 0x3d11, 0xe41e, 0x16d7,
+ 0xe40d, 0x19ad, 0x3d11, 0xf04e, 0x2858, 0xf02a, 0x8131, 0xe082,
+ 0xe002, 0x08f0, 0xf084, 0xe41e, 0x1a9f, 0x2867, 0xa002, 0x3c67,
+ 0xe161, 0x0800, 0x2853, 0xa002, 0x3c53, 0xd199, 0x0002, 0xd190,
+ 0x0008, 0xcb20, 0xf7f8, 0xcb32, 0xa808, 0xe40a, 0x1952, 0xcb02,
+ 0xaf04, 0x30b6, 0xaf02, 0x30b5, 0xaf04, 0x300b, 0xaf0e, 0x3059,
+ 0xba60, 0x2a53, 0x3e45, 0xa202, 0xe42e, 0x2843, 0x3c53, 0xa200,
+ 0xe42e, 0x1a43, 0xa103, 0xcc45, 0x2867, 0xf07a, 0xe41e, 0x1a9f,
+ 0xa200, 0x3c67, 0xe41e, 0x1aa1, 0xe161, 0x0800, 0xe184, 0x1a20,
+ 0x2901, 0x3c00, 0xe049, 0xa803, 0xe40b, 0x19cb, 0x2861, 0x3c5d,
+ 0x3f11, 0xe40e, 0x1a12, 0xaf02, 0x305b, 0xaf02, 0x3058, 0xaf12,
+ 0x305a, 0x2858, 0xae04, 0x4c5a, 0xae12, 0xcf02, 0x2861, 0xcf36,
+ 0x2858, 0x2a61, 0x1a26, 0xb606, 0x3c5f, 0xa908, 0xcf26, 0xd190,
+ 0x0002, 0x2800, 0xe008, 0x07ff, 0x3c00, 0xcb20, 0xf7f8, 0xcb22,
+ 0xe408, 0x1a2d, 0xcb02, 0xaf0e, 0x305c, 0xaf12, 0xa23f, 0xe051,
+ 0x3e5d, 0xaf0e, 0x3c5e, 0x285c, 0xae08, 0x4c5e, 0xae0e, 0x4c5d,
+ 0xae02, 0x4c5f, 0xae06, 0x4c00, 0x3d11, 0x2858, 0xf0fa, 0x285f,
+ 0xf0ba, 0xcb2c, 0x3511, 0x3d11, 0xcb2e, 0x3511, 0x3d11, 0xcb30,
+ 0x3511, 0x3d11, 0xf08e, 0x8131, 0xf06e, 0x8111, 0x8111, 0x285b,
+ 0xf02a, 0x8131, 0xe082, 0xe002, 0x08f0, 0xf0a4, 0xe41e, 0x1a9f,
+ 0x2867, 0xa002, 0x3c67, 0xe41e, 0x1aa1, 0xe161, 0x0800, 0x285d,
+ 0x3c61, 0x2867, 0xf09a, 0xe41e, 0x1a9f, 0xa200, 0x3c67, 0xe41e,
+ 0x1aa1, 0xa202, 0x3c67, 0xa202, 0xe42e, 0xd191, 0x0000, 0x2843,
+ 0x3c53, 0xa200, 0xe42e, 0x2861, 0xcf36, 0x2868, 0xe092, 0x2911,
+ 0x3059, 0x2a59, 0xe409, 0x1a92, 0xaf02, 0x305b, 0xaf02, 0x3058,
+ 0xaf02, 0x305f, 0xaf02, 0xa23f, 0xe051, 0x3e5d, 0xaf0a, 0xa27f,
+ 0xe051, 0x3e5e, 0xaf0c, 0x3c5c, 0x2858, 0xf0c8, 0xe162, 0x0301,
+ 0xa20e, 0x2a5b, 0xb636, 0xcc44, 0xe184, 0x1a57, 0x2911, 0x3d12,
+ 0xf0ee, 0x285f, 0xf0ba, 0x2111, 0x4d11, 0xcf2c, 0x2111, 0x4d11,
+ 0xcf2e, 0x2111, 0x4d11, 0xcf30, 0xf02e, 0x8131, 0x285e, 0xae08,
+ 0x4c59, 0xae02, 0x4c58, 0xae02, 0x4c5b, 0xae14, 0xcf02, 0x285f,
+ 0xcf26, 0xd190, 0x0001, 0x2824, 0xe418, 0x1149, 0xe180, 0xe180,
+ 0x289a, 0xe41a, 0x1365, 0xe181, 0xcb20, 0xf7f8, 0xcb22, 0xf188,
+ 0xa200, 0xe41e, 0x10bb, 0xe082, 0x3c68, 0xe002, 0x08f0, 0xf094,
+ 0xe41e, 0x1aa1, 0x2867, 0xa002, 0x3c67, 0xe004, 0x0800, 0x3c68,
+ 0xa202, 0xe42e, 0xd181, 0x1000, 0xe41e, 0x1687, 0xf6de, 0xd191,
+ 0x0000, 0xe16a, 0x2846, 0xa002, 0x3c46, 0xa200, 0xe42e, 0xa204,
+ 0xf02e, 0xa206, 0x3c06, 0xe0c0, 0x0046, 0xe005, 0x00a9, 0x0a67,
+ 0x0a67, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0800,
+ 0xd112, 0x0100, 0x2806, 0xce26, 0xca28, 0xf7f8, 0xe42e, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0060, 0x0008, 0x0006,
+ 0x00b0, 0x0090, 0x000b, 0x0009, 0x0160, 0x0120, 0x0016, 0x0012,
+ 0x02c0, 0x0240, 0x0058, 0x0012, 0x0580, 0x0480, 0x0160, 0x0012,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0063, 0x000d, 0x000f, 0x0011, 0x0013, 0x0015, 0x0017, 0x0000,
+ 0xffff, 0xfffe, 0x0001, 0x0002, 0x0000, 0x0002, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0000, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0002, 0x0001, 0xfffb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c32, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1830, 0xf074, 0xe009, 0x00ff, 0x1a31, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x0b17, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x0368, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x0429, 0xe40e, 0x00a4,
+ 0xe41e, 0x0473, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x0474,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x055c, 0xe40e, 0x00a4,
+ 0xe41e, 0x058d, 0xe40e, 0x00a4, 0xe0c1, 0x0044, 0xa80f, 0xe056,
+ 0xe42e, 0xa200, 0xe41e, 0x036c, 0xe42e, 0xe0c1, 0x0044, 0xaf0d,
+ 0xae03, 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105, 0xf039,
+ 0xa213, 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1,
+ 0x0420, 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166, 0x0400, 0xe167,
+ 0x0500, 0x282c, 0xf166, 0xa102, 0xcc44, 0xe184, 0x03af, 0xa200,
+ 0xe41e, 0x036c, 0xaf04, 0xe41e, 0x0375, 0xae20, 0x2e40, 0xe056,
+ 0x9f17, 0x2030, 0x4c31, 0xae08, 0x9f17, 0xe41e, 0x03b5, 0xe190,
+ 0xe190, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x2116, 0x4d16, 0x9f17,
+ 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0xe42e, 0xe0c0,
+ 0x0044, 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa860, 0xe42a,
+ 0xe0c0, 0x0061, 0xa83e, 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785,
+ 0xe018, 0xe000, 0x0500, 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db,
+ 0xa200, 0xe41e, 0x0371, 0xa80e, 0xaf04, 0xe41e, 0x0375, 0xe41e,
+ 0x037d, 0xe40b, 0x03e8, 0xa81e, 0xe41e, 0x0382, 0xae09, 0xe056,
+ 0xae20, 0xe0c1, 0x006e, 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0,
+ 0x0060, 0xa822, 0xa122, 0xf04a, 0x2030, 0x4c31, 0xf03e, 0x2031,
+ 0x4c30, 0xae08, 0x9f17, 0xe0c0, 0x0062, 0x9f17, 0xe0c0, 0x0063,
+ 0x9f17, 0xe0c0, 0x0064, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e,
+ 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11, 0xe042, 0xce20,
+ 0xd111, 0x0400, 0xd112, 0x00c0, 0x88ec, 0x0113, 0xca29, 0xf7f9,
+ 0xe190, 0xe42e, 0xe42e, 0xe42e, 0xe0c0, 0x0060, 0xe049, 0xa81f,
+ 0x3e45, 0xaf08, 0x3044, 0xe0c0, 0x0065, 0xaf04, 0xa80e, 0x3c5a,
+ 0xe42e, 0xe41e, 0x0148, 0xe41e, 0x023a, 0xa200, 0xcc4a, 0xcc4c,
+ 0xd130, 0x0003, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000,
+ 0xd03a, 0x0000, 0xa200, 0x3c7f, 0xe41e, 0x0acd, 0xa100, 0xf07a,
+ 0xe41e, 0x074f, 0xa100, 0xf03a, 0xa202, 0x3c7f, 0xa23e, 0x3cf0,
+ 0xe41e, 0x044d, 0xe41e, 0x0b7b, 0xe42e, 0xa200, 0xe0c2, 0x0074,
+ 0xe0c2, 0x0076, 0xe0c2, 0x0077, 0xe0c2, 0x0079, 0xe0c2, 0x007a,
+ 0x287f, 0xe016, 0x58f0, 0xe0c2, 0x0078, 0xa2fe, 0xe0c2, 0x0072,
+ 0xe0c2, 0x006d, 0xe0c0, 0x0062, 0x3041, 0x2841, 0xae02, 0xa004,
+ 0xe0c2, 0x0073, 0x20b5, 0x4cb6, 0xe0c2, 0x0071, 0x287f, 0xe0c2,
+ 0x0070, 0xa202, 0xe42e, 0xe42e, 0xa200, 0xcc44, 0xcc4a, 0xcc4c,
+ 0x3cb0, 0x3cb1, 0x3c33, 0x3c29, 0x3c28, 0x28b7, 0xf0b8, 0xa202,
+ 0x3c50, 0x2831, 0xc70f, 0x7c50, 0x3c50, 0x8430, 0x8250, 0xe018,
+ 0x3c50, 0xe41e, 0x041c, 0xe41e, 0x05a8, 0xd130, 0x0003, 0xd008,
+ 0x0000, 0xd03a, 0x0000, 0xe41e, 0x0af8, 0xe41e, 0x038c, 0xe41e,
+ 0x03bf, 0xe41e, 0x025f, 0xa2fe, 0xe0c2, 0x0077, 0xa2fa, 0xe0c2,
+ 0x0071, 0xa202, 0xe0c2, 0x0076, 0xe41e, 0x0b45, 0xe408, 0x04f3,
+ 0x2a2e, 0xe419, 0x074f, 0xe41e, 0x0790, 0xe40a, 0x04f8, 0xe41e,
+ 0x05d9, 0xe42a, 0xa2fc, 0xe0c2, 0x0077, 0xd130, 0x0003, 0xd03a,
+ 0x0003, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000, 0xa200,
+ 0xe0c2, 0x030a, 0x3c29, 0xe41e, 0x06e7, 0xe40a, 0x04f8, 0xe0c0,
+ 0x0065, 0xaf04, 0xa80e, 0x3c3b, 0xf0fa, 0x283b, 0xa104, 0xf0c0,
+ 0x2822, 0xf0aa, 0xa2fa, 0xe0c2, 0x0071, 0x2822, 0xe0c2, 0x0073,
+ 0xe41e, 0x0b81, 0xe42e, 0xe41e, 0x038c, 0xe41e, 0x03bf, 0xe41e,
+ 0x025f, 0xe41e, 0x07b0, 0xe424, 0x2825, 0xf0a8, 0xa200, 0x3c28,
+ 0x2832, 0x3c27, 0xe41e, 0x065e, 0xa200, 0x3c29, 0xf05e, 0xe41e,
+ 0x05fd, 0xe40a, 0x04f8, 0xe41e, 0x04fc, 0xe41e, 0x0b81, 0xe42e,
+ 0xa200, 0xe0c2, 0x0076, 0xf78e, 0xa200, 0xe0c2, 0x0075, 0xe0c2,
+ 0x0078, 0xe0c2, 0x0079, 0xe0c2, 0x007d, 0xe0c2, 0x007e, 0x2890,
+ 0xf038, 0xe41e, 0x0960, 0x2c2b, 0xa002, 0x3c2b, 0xe0c2, 0x0070,
+ 0x2822, 0xe0c2, 0x0073, 0x20b5, 0x4cb6, 0xe0c2, 0x006f, 0xa2fe,
+ 0xe0c2, 0x007c, 0xe167, 0x0005, 0x2117, 0x4d17, 0xe0c2, 0x007e,
+ 0x2117, 0x4d07, 0xe0c2, 0x007d, 0x2829, 0xe0c2, 0x0072, 0xc84a,
+ 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xe41e, 0x05c2, 0x2890,
+ 0xf20a, 0xe0c0, 0x0077, 0x2a90, 0xb7d2, 0xe0c2, 0x0077, 0x2a44,
+ 0xf03b, 0x288d, 0xf06a, 0xa2fe, 0xe0c2, 0x0071, 0xa202, 0xe42e,
+ 0xa202, 0x3c8d, 0x2a79, 0x3e7b, 0x287a, 0x3c7d, 0xa2fe, 0xe0c2,
+ 0x0071, 0xa2fc, 0xe0c2, 0x0077, 0xe41e, 0x0936, 0xe41e, 0x05e8,
+ 0xe42e, 0x2834, 0xa002, 0x3c34, 0x1830, 0xe428, 0x3c34, 0x2835,
+ 0xa002, 0x3c35, 0x1831, 0xe42e, 0xe41e, 0x079d, 0xe41e, 0x0174,
+ 0xca29, 0xf7f9, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0400, 0xd112,
+ 0x00c0, 0xd113, 0x0003, 0xca29, 0xf7f9, 0xe0c0, 0x0060, 0x3c2c,
+ 0xe0c0, 0x0061, 0x3c40, 0xe41e, 0x099f, 0xe41e, 0x038c, 0xe42e,
+ 0xe0c0, 0x0040, 0xa269, 0xae17, 0xe042, 0xe005, 0x0f00, 0xae03,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0300, 0xd112, 0x0100,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe180, 0xe41e, 0x099f,
+ 0xa200, 0x3c1d, 0x3c90, 0xe167, 0x04c0, 0xe166, 0x0054, 0xa200,
+ 0x3c2d, 0x282c, 0xa102, 0xcc44, 0xe184, 0x05a5, 0x9e06, 0x5c2d,
+ 0xa802, 0xb690, 0x3d17, 0x282d, 0xa002, 0x3c2d, 0xe190, 0xe42e,
+ 0xa200, 0x3c3c, 0xe004, 0x0054, 0xe09c, 0x282c, 0xa102, 0xcc44,
+ 0xe184, 0x05c0, 0x9e06, 0x5c3c, 0xa802, 0xf058, 0x283c, 0xe41e,
+ 0x09da, 0xf05e, 0x283c, 0xa209, 0xe41e, 0x09d3, 0x2a3c, 0xa003,
+ 0x3e3c, 0xe42e, 0xe004, 0x04c0, 0xe09e, 0xe004, 0x0054, 0xe09c,
+ 0x282c, 0xa102, 0xcc44, 0xa200, 0x3c3c, 0xe184, 0x05d6, 0x2b17,
+ 0xaf05, 0xa803, 0x5a3c, 0xe056, 0x2a3c, 0xa003, 0x3e3c, 0x9f06,
+ 0xe42e, 0xe161, 0x04c0, 0x282c, 0xa102, 0xcc44, 0xa200, 0xe184,
+ 0x05e4, 0x2b11, 0xa80d, 0xe01b, 0xe042, 0x182c, 0xe01a, 0xe42e,
+ 0xe41e, 0x0923, 0xa200, 0x3c34, 0x3c35, 0xa202, 0x3c47, 0xe41e,
+ 0x09f7, 0xe41e, 0x0551, 0xf7c8, 0xa200, 0x3c47, 0xe41e, 0x09f7,
+ 0xe190, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0x2824, 0xe0c2, 0x0115,
+ 0xa202, 0xcf66, 0xa200, 0x3c33, 0x3c28, 0xcf64, 0xcf62, 0xa200,
+ 0x3c51, 0x2833, 0x0850, 0x3c51, 0x2a51, 0x1a32, 0xf037, 0x2a32,
+ 0x3e51, 0xe41e, 0x0635, 0x2a3a, 0xa003, 0x3e3a, 0x1851, 0xf0b4,
+ 0x2851, 0x1832, 0xf6f4, 0x2822, 0xe41a, 0x0624, 0xe41e, 0x074a,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0x3c59, 0xc873, 0x2089,
+ 0x4c88, 0xe045, 0x2403, 0x4c02, 0xae06, 0xe046, 0xa122, 0xe424,
+ 0xba48, 0xba54, 0xba40, 0x3c59, 0xe42e, 0x2833, 0xc70f, 0x7c30,
+ 0x3434, 0x3c35, 0x2833, 0xe002, 0x0094, 0xf028, 0xe190, 0xe41e,
+ 0x067e, 0xe40a, 0x0655, 0xe41e, 0x06cd, 0x2034, 0x4c35, 0xcf62,
+ 0x2833, 0xe002, 0x00c8, 0xf028, 0xe190, 0x2833, 0x1851, 0xf6b8,
+ 0xa204, 0xcf66, 0x2833, 0x3c28, 0xe42e, 0x2833, 0x3c28, 0x2851,
+ 0x3c27, 0xe41e, 0x065e, 0x2833, 0xe16a, 0xf73e, 0x2c2b, 0xe016,
+ 0x3c36, 0xe016, 0x3c37, 0xa200, 0x3c38, 0x2828, 0x3c33, 0xc70f,
+ 0x7c30, 0x3434, 0x3c35, 0x2833, 0x1827, 0xf0c2, 0x2822, 0xe418,
+ 0x0ac1, 0xe41e, 0x097a, 0xe41e, 0x06cd, 0x2034, 0x4c35, 0xcf62,
+ 0xf73e, 0x2827, 0x1828, 0x0829, 0x3c29, 0xe42e, 0x2853, 0xae06,
+ 0xcf26, 0xd190, 0x0002, 0xcb20, 0xf7f8, 0xcb22, 0xe408, 0x06c0,
+ 0xcb02, 0xaf0e, 0x3038, 0xaf08, 0x3036, 0xaf02, 0x3037, 0xaf12,
+ 0x3c39, 0x2836, 0x4c37, 0xe41a, 0x0aac, 0x2836, 0x4c37, 0xe418,
+ 0x06e1, 0x2822, 0xf068, 0x8839, 0x0182, 0xe190, 0xcb04, 0x3c39,
+ 0x2837, 0x4422, 0xe418, 0x0ac1, 0xe40d, 0x06c0, 0x2837, 0xf158,
+ 0x2836, 0xcf26, 0x2839, 0xae08, 0x4c37, 0xae02, 0x4c36, 0xae16,
+ 0xcf02, 0xd190, 0x0001, 0x2822, 0xe418, 0x0ac1, 0xf0ad, 0xcb20,
+ 0xf7f8, 0xcb22, 0xe408, 0x06c0, 0xe41e, 0x097a, 0xa202, 0xe42e,
+ 0xd191, 0x0000, 0xe16a, 0xe41e, 0x06cd, 0x2034, 0x4c35, 0xcf62,
+ 0x2829, 0xa002, 0x3c29, 0xa200, 0xe42e, 0xa202, 0xcf10, 0x2833,
+ 0xa002, 0x3c33, 0xcf64, 0x2834, 0xa002, 0x3c34, 0x1830, 0xe428,
+ 0xa208, 0xcf66, 0xa200, 0x3c34, 0x2835, 0xa002, 0x3c35, 0x1831,
+ 0xe42e, 0xa201, 0xe161, 0x04e0, 0x3f11, 0x3f11, 0xe42e, 0xc872,
+ 0x3c88, 0x3489, 0xba42, 0x3c22, 0x3c26, 0xba48, 0x3c24, 0x2822,
+ 0xf2d8, 0xa202, 0x3cb7, 0xa224, 0x3c56, 0xa228, 0x3c57, 0xa22c,
+ 0x3c55, 0xa232, 0x3c54, 0xa202, 0x3c23, 0xba48, 0xa12c, 0xe406,
+ 0x0748, 0x3c50, 0x2831, 0xc70f, 0x7c50, 0x3c50, 0x8430, 0x8250,
+ 0xe018, 0x3c50, 0xba40, 0xf05a, 0xba40, 0xa235, 0xe042, 0x3c54,
+ 0xba40, 0xf05a, 0xba40, 0xa22f, 0xe042, 0x3c55, 0xba40, 0xa225,
+ 0xe042, 0x3c56, 0xa004, 0x3c57, 0xf27e, 0xa224, 0x3c56, 0xa228,
+ 0x3c57, 0xa22c, 0x3c55, 0xa232, 0x3c54, 0xa238, 0x3c58, 0x2859,
+ 0xf04a, 0x2823, 0xe016, 0xf02e, 0xa200, 0x3c23, 0xba40, 0x3c53,
+ 0xba40, 0xf08a, 0xba41, 0xa22e, 0xe042, 0x3c55, 0xa234, 0xe042,
+ 0x3c54, 0xba40, 0xa225, 0xe042, 0x3c56, 0xa004, 0x3c57, 0xba40,
+ 0xa239, 0xe042, 0x3c58, 0xa202, 0x3c25, 0xa202, 0xe42e, 0xba7e,
+ 0xa200, 0xe42e, 0xc868, 0xa80e, 0x3c2a, 0x742a, 0xe42e, 0xba7e,
+ 0xe005, 0x0043, 0xae11, 0xa99d, 0xae11, 0xa99b, 0xae11, 0xa9ad,
+ 0xe046, 0xe408, 0x078e, 0xe41e, 0x0a9c, 0x3c00, 0xe41e, 0x0a9c,
+ 0x3c01, 0xba7e, 0x3402, 0x3c03, 0xe41e, 0x0a9c, 0x3cb5, 0xe41e,
+ 0x0a9c, 0x3cb6, 0xe41e, 0x0aa1, 0x3404, 0x3c05, 0xe41e, 0x0aa1,
+ 0x3406, 0x3c07, 0xe41e, 0x0aa1, 0x3408, 0x3c09, 0xba7e, 0x28b5,
+ 0xa01e, 0xaf08, 0xae08, 0x3c70, 0x28b6, 0xa01e, 0xaf08, 0xae08,
+ 0x3c71, 0x2870, 0xa01e, 0xaf08, 0x3c30, 0x2871, 0xa01e, 0xaf08,
+ 0x3c31, 0x8430, 0x8231, 0xe018, 0x3c32, 0xe42e, 0x2800, 0xe42e,
+ 0xe41e, 0x0aa1, 0xf09a, 0xd022, 0x0007, 0xe184, 0x0798, 0xba4e,
+ 0xe190, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe167, 0x0080, 0xe0c0,
+ 0x0064, 0x3517, 0x3d17, 0xe0c0, 0x0065, 0x3517, 0x3d17, 0xe0c0,
+ 0x0066, 0x3517, 0x3d17, 0xe0c0, 0x0067, 0x3517, 0x3d17, 0xe42e,
+ 0xa200, 0xcf24, 0xcf46, 0xcf68, 0xe0c2, 0x0104, 0xe0c2, 0x017f,
+ 0xe0c2, 0x0149, 0xe0c2, 0x0308, 0xe0c2, 0x030d, 0xe0c2, 0x0309,
+ 0xe0c2, 0x030a, 0xe0c2, 0x030b, 0xcc8e, 0xe0c2, 0x0320, 0xa246,
+ 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x0128, 0x2a44, 0xb692, 0xae08,
+ 0xa92c, 0xe0c2, 0x017c, 0xe004, 0x0014, 0xe0c2, 0x017d, 0xe0c0,
+ 0x0050, 0xe049, 0xe008, 0x007f, 0x3c48, 0xaf11, 0xe009, 0x007f,
+ 0x3e49, 0x4648, 0x3e48, 0xa200, 0x2a48, 0xa803, 0xf03b, 0xe00a,
+ 0x0002, 0x2a48, 0xa805, 0xf03b, 0xe00a, 0x0009, 0x2a48, 0xa809,
+ 0xf03b, 0xe00a, 0x0020, 0x2a48, 0xa811, 0xf03b, 0xe00a, 0x0040,
+ 0xe0c2, 0x040c, 0xe0c1, 0x0046, 0xe004, 0x0044, 0xae10, 0xe042,
+ 0x2a49, 0xa809, 0xf05b, 0xe161, 0x0084, 0x2111, 0x4d11, 0xe0c2,
+ 0x0211, 0xe0c1, 0x0046, 0xe004, 0x0080, 0xae10, 0xe042, 0x2a49,
+ 0xa811, 0xf05b, 0xe161, 0x0086, 0x2111, 0x4d11, 0xe0c2, 0x0212,
+ 0x2854, 0xa132, 0xae04, 0xe049, 0x2855, 0xa12c, 0xe055, 0xae03,
+ 0x2856, 0xa124, 0xe055, 0xcf2b, 0xe0c1, 0x0046, 0xe004, 0x003c,
+ 0xae10, 0xe042, 0x2a49, 0xa803, 0xf05b, 0xe161, 0x0080, 0x2111,
+ 0x4d11, 0xcf44, 0xa220, 0x4c22, 0xae02, 0xcf00, 0xa200, 0xcf46,
+ 0x2830, 0xae20, 0x4c31, 0xae08, 0xe0c2, 0x0101, 0xe0c2, 0x0205,
+ 0xcf60, 0xe0c0, 0x0046, 0xe005, 0x0000, 0xae11, 0xe042, 0x2a49,
+ 0xa805, 0xf05b, 0xe161, 0x0082, 0x2111, 0x4d11, 0xe0c2, 0x0103,
+ 0xa200, 0xe41e, 0x036c, 0xe0c2, 0x0102, 0x2841, 0xb6d5, 0xb611,
+ 0x287b, 0xe412, 0x09cc, 0x2879, 0x3c7b, 0xa205, 0xe412, 0x09d3,
+ 0xe41e, 0x09af, 0xe0c2, 0x0077, 0x3c79, 0xb7a8, 0x3c7a, 0x2a41,
+ 0xf15b, 0x2879, 0xa203, 0xe412, 0x09cc, 0xe41e, 0x09af, 0x3c7c,
+ 0x3c7a, 0xa209, 0xe412, 0x09cc, 0x287a, 0xf082, 0xa2fa, 0xe0c2,
+ 0x0071, 0xa2fe, 0xe0c2, 0x0077, 0xe42e, 0xa206, 0xae08, 0x4c22,
+ 0xae06, 0xe0c2, 0x0204, 0xa204, 0x1841, 0xe0c2, 0x0210, 0xa200,
+ 0xe0c2, 0x0215, 0xe41e, 0x036c, 0xe0c1, 0x0210, 0xa803, 0xae11,
+ 0xe056, 0xe0c2, 0x0213, 0xa204, 0xe0c2, 0x0208, 0x2a79, 0xe0c3,
+ 0x020b, 0x2841, 0xf04a, 0x287c, 0xe0c2, 0x0214, 0x287b, 0xe404,
+ 0x08c3, 0xa202, 0xe0c2, 0x0302, 0x287b, 0xf032, 0x2879, 0xb608,
+ 0xe0c2, 0x0380, 0xe004, 0x0055, 0xe0c2, 0x030c, 0xa208, 0x4c23,
+ 0xe0c2, 0x0303, 0xa20e, 0xe0c2, 0x0312, 0xe0c0, 0x0414, 0xe418,
+ 0x018c, 0xe0c0, 0x0414, 0xe41a, 0x08fa, 0xa200, 0xe0c2, 0x0308,
+ 0xa200, 0xe0c2, 0x0302, 0xa200, 0x3c44, 0x3c45, 0xa202, 0x3c47,
+ 0x287d, 0xf254, 0xe0c0, 0x0060, 0xe049, 0xaf08, 0xf20a, 0x3044,
+ 0xa81f, 0x3e45, 0x287d, 0xe0c2, 0x0143, 0xa200, 0xe41e, 0x036c,
+ 0xe0c2, 0x017f, 0x2830, 0xa102, 0xae20, 0x4c31, 0xa102, 0xe0c2,
+ 0x0142, 0xe41e, 0x0371, 0xae20, 0x2a44, 0xf02b, 0x4c45, 0xe0c2,
+ 0x014e, 0xe0c0, 0x0061, 0xa87e, 0xe0c2, 0x0144, 0x287a, 0x3c7d,
+ 0xe0c2, 0x0071, 0xa202, 0x3c3a, 0xe41e, 0x0274, 0xa202, 0xe0c2,
+ 0x0106, 0xe42e, 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152,
+ 0x2b17, 0xe009, 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1,
+ 0x0101, 0xe0c3, 0x015d, 0x2a7b, 0xae21, 0xe167, 0x01a2, 0x2907,
+ 0xaf10, 0xe008, 0x001b, 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2,
+ 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0,
+ 0x0151, 0xf7e8, 0xe42e, 0xa246, 0xe0c2, 0x0100, 0x2a44, 0xb692,
+ 0xae08, 0xa92c, 0xe0c2, 0x017c, 0xe004, 0x0014, 0xe0c2, 0x017d,
+ 0xa200, 0xe41e, 0x036c, 0xe0c2, 0x0102, 0xe42e, 0xe0c0, 0x0060,
+ 0xe049, 0xa81e, 0x3c45, 0xaf09, 0x3244, 0x287d, 0xe0c2, 0x0143,
+ 0xa200, 0xe0c2, 0x017f, 0xe0c2, 0x0149, 0xa200, 0xe41e, 0x036c,
+ 0xe0c2, 0x017f, 0x2830, 0xa102, 0xae20, 0x4c31, 0xa102, 0xe0c2,
+ 0x0142, 0xe41e, 0x0371, 0xae20, 0x2a44, 0xf02b, 0x4c45, 0xe0c2,
+ 0x014e, 0xe0c0, 0x0061, 0xa87e, 0xe0c2, 0x0144, 0xa203, 0xe42e,
+ 0x2824, 0x3c43, 0xe0c0, 0x0111, 0xf7e8, 0x2844, 0xe42a, 0xa204,
+ 0xae0e, 0x4c30, 0xa102, 0xae0e, 0x4c31, 0xa102, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe42e, 0xa27f, 0x2836, 0xf028, 0x2a39, 0xe0c3, 0x012a,
+ 0x2836, 0xe0c2, 0x0114, 0x2841, 0xf06a, 0x2837, 0xe016, 0xae0a,
+ 0x4c24, 0xcf6a, 0xe41e, 0x0996, 0xe0c0, 0x0111, 0xf7e8, 0xa202,
+ 0xe0c2, 0x0110, 0x2844, 0xe418, 0x09f7, 0xe42e, 0x283a, 0xe0c2,
+ 0x0131, 0xa200, 0x3c3a, 0x4c38, 0xe0c2, 0x0130, 0xe42e, 0xa2fe,
+ 0x3c7b, 0x3c79, 0x3c7a, 0x3c7d, 0xa200, 0x3c7e, 0x2a2c, 0xa103,
+ 0xcc45, 0xe161, 0x04c0, 0xe184, 0x09ad, 0x3d11, 0xe42e, 0x287e,
+ 0x3c3c, 0x283c, 0xe000, 0x04c0, 0xe092, 0x2901, 0xf0ca, 0x283c,
+ 0xa002, 0x3c3c, 0x182c, 0xf028, 0x3c3c, 0x283c, 0x187e, 0xf728,
+ 0xa2fe, 0xe42e, 0xa20a, 0x3d01, 0xa202, 0x083c, 0x3c7e, 0x182c,
+ 0xf028, 0x3c7e, 0x283c, 0xe42e, 0xe000, 0x04c0, 0xe092, 0x2901,
+ 0xe052, 0x3d01, 0xe42e, 0xe000, 0x04c0, 0xe092, 0x2901, 0xe056,
+ 0x3d01, 0xe42e, 0xe000, 0x04c0, 0xe092, 0x2901, 0xa802, 0x3d01,
+ 0xe42e, 0x2834, 0x4c35, 0xe01a, 0x3c46, 0x2843, 0xae02, 0x4c46,
+ 0xae02, 0x4c47, 0xae0e, 0x4c34, 0xae0e, 0x4c35, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe42e, 0x2834,
+ 0x4c35, 0xe01a, 0x3c46, 0x2843, 0xae02, 0x4c46, 0xae02, 0x4c47,
+ 0xae0e, 0x4c34, 0xae0e, 0x4c35, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2,
+ 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe42e, 0xa218, 0x34b3, 0x3cb4,
+ 0x249c, 0x4c9d, 0xd027, 0x0000, 0xe41e, 0x0bf9, 0xd027, 0x0001,
+ 0xf2f8, 0x249c, 0x4c9d, 0xe41e, 0x0bce, 0xe095, 0xe41e, 0x0bd2,
+ 0xe084, 0xaf02, 0xe000, 0x0500, 0xe092, 0xe41e, 0x0a82, 0xe084,
+ 0xa802, 0xe41e, 0x0b9b, 0x00b0, 0x0cb1, 0x34b0, 0x3cb1, 0xf186,
+ 0x2693, 0x4e94, 0xe046, 0xf142, 0x24b0, 0x4cb1, 0xa018, 0x34b0,
+ 0x3cb1, 0x34b3, 0x3cb4, 0x249c, 0x4c9d, 0xd027, 0x0000, 0xe41e,
+ 0x0bf9, 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b, 0xa200,
+ 0x34b0, 0x3cb1, 0xa202, 0xe42e, 0xa202, 0x3ca2, 0xa240, 0x34b3,
+ 0x3cb4, 0x249c, 0x4c9d, 0xd027, 0x0000, 0xe41e, 0x0bf9, 0xd027,
+ 0x0001, 0xe408, 0x0a80, 0x249c, 0x4c9d, 0xe41e, 0x0bce, 0xe095,
+ 0xe41e, 0x0bd2, 0xe084, 0xa00c, 0xaf02, 0xe000, 0x0500, 0xe092,
+ 0xe084, 0xa802, 0xe41e, 0x0b9b, 0xe008, 0xffff, 0x3cb2, 0xa140,
+ 0xf0f4, 0x28b2, 0x34b3, 0x3cb4, 0x249c, 0x4c9d, 0xd027, 0x0000,
+ 0xe41e, 0x0bf9, 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b,
+ 0xa202, 0xe42e, 0x2111, 0x4d09, 0xe005, 0x0043, 0xae11, 0xa99d,
+ 0xae11, 0xa99b, 0xae11, 0xa9ad, 0xae11, 0xe046, 0xf05a, 0xa200,
+ 0x3cb1, 0x3c2e, 0xe42e, 0xa241, 0x3eb1, 0xaf03, 0xe082, 0xe042,
+ 0xe092, 0xa202, 0x3c2e, 0xe42e, 0xba4e, 0xba4f, 0xae11, 0xe056,
+ 0xe42e, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056,
+ 0xba4f, 0xae31, 0xe056, 0xe42e, 0x6858, 0xe42d, 0xe161, 0x04e0,
+ 0xf088, 0xba4a, 0xa140, 0x3d11, 0xba4a, 0xa140, 0x3d11, 0xe42e,
+ 0xe049, 0xa87e, 0xa140, 0x3d11, 0xaf0d, 0xa87f, 0xa141, 0x3f11,
+ 0xe42e, 0xd1a5, 0x0000, 0xe161, 0x04e0, 0x2111, 0x4d11, 0xcf4c,
+ 0xd1a0, 0x0001, 0xcb41, 0xf7f9, 0xe42e, 0xe41e, 0x023a, 0xa206,
+ 0xae1e, 0xcec0, 0xd160, 0x0600, 0xe0c0, 0x0060, 0x3491, 0x3c92,
+ 0xe0c1, 0x0061, 0xae15, 0x3693, 0x3e94, 0xe042, 0x3495, 0x3c96,
+ 0xe0c0, 0x0048, 0x349c, 0x3c9d, 0x3497, 0xe008, 0xfe00, 0x3c98,
+ 0x2c9d, 0xe008, 0x01ff, 0x3ca0, 0xe41e, 0x0a4c, 0xf07d, 0xe41e,
+ 0x0b5c, 0xe41e, 0x0b47, 0xa202, 0xe42e, 0xa200, 0xe16a, 0xe42e,
+ 0xa206, 0xae1e, 0xcec0, 0xd160, 0x0600, 0xe0c0, 0x0048, 0xe0c2,
+ 0x0051, 0x349c, 0x3c9d, 0x3497, 0xe008, 0xfe00, 0x3c98, 0x2c9d,
+ 0xe008, 0x01ff, 0x3ca0, 0xe41e, 0x0a0d, 0xf078, 0xe41e, 0x0b5c,
+ 0xe41e, 0x0b47, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xcb40,
+ 0xf7f8, 0xe41e, 0x0b1c, 0xe470, 0xca28, 0xf7f8, 0xe004, 0x0080,
+ 0xce24, 0x28a1, 0xae0e, 0xce22, 0x2497, 0x4c98, 0xce20, 0xe0c0,
+ 0x0043, 0xa806, 0xae02, 0xa022, 0xce26, 0xca28, 0xf7f8, 0x2497,
+ 0x4c98, 0xe000, 0x0200, 0x3497, 0x3c98, 0x1495, 0x1c96, 0xf054,
+ 0x2491, 0x4c92, 0x3497, 0x3c98, 0xd04c, 0x0000, 0x28a1, 0xae0e,
+ 0xcc6e, 0x28a1, 0xe016, 0x3ca1, 0xe42e, 0x2890, 0xe42e, 0xa200,
+ 0x3ca1, 0xce92, 0xe41e, 0x0b1c, 0xe41e, 0x0b1c, 0xe128, 0xd071,
+ 0x2020, 0xe181, 0x2ca0, 0xa102, 0xf074, 0xcc44, 0xe184, 0x0b59,
+ 0xba4e, 0xe190, 0xe190, 0xe42e, 0xe004, 0x1495, 0xae20, 0xcc9e,
+ 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000,
+ 0xd036, 0x00ff, 0xd037, 0x0000, 0xd038, 0x0000, 0xd039, 0x0000,
+ 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd046, 0x0000, 0xd047, 0x0000,
+ 0xd149, 0x0000, 0xe42e, 0x249c, 0x4c9d, 0x08b2, 0x349c, 0x3c9d,
+ 0xf07e, 0x249c, 0x4c9d, 0x04b0, 0x0cb1, 0x349c, 0x3c9d, 0x1495,
+ 0x1c96, 0xf074, 0x249c, 0x4c9d, 0x1493, 0x1c94, 0x349c, 0x3c9d,
+ 0x249c, 0x4c9d, 0xe0c2, 0x0048, 0xe0c2, 0x0052, 0xe42e, 0xa200,
+ 0x34b0, 0x3cb1, 0xe42e, 0xf0a8, 0x2911, 0xe008, 0xffff, 0xae20,
+ 0x2b11, 0xe009, 0xffff, 0xe042, 0xf0fe, 0x2911, 0xe008, 0x00ff,
+ 0xae20, 0x2b11, 0xe009, 0xffff, 0xe042, 0xae10, 0x2b11, 0xe009,
+ 0xff00, 0xaf11, 0xe042, 0x2aa2, 0xe42b, 0xe049, 0xaf31, 0xe009,
+ 0x00ff, 0xe093, 0xe049, 0xaf21, 0xe009, 0x00ff, 0xe095, 0xe049,
+ 0xaf11, 0xe009, 0x00ff, 0xe008, 0x00ff, 0xae10, 0xe056, 0xae10,
+ 0xe085, 0xe056, 0xae10, 0xe083, 0xe056, 0xe42e, 0xe049, 0xa80f,
+ 0xe046, 0xe42e, 0xca29, 0xf7f9, 0xd111, 0x0500, 0xce20, 0x2695,
+ 0x4e96, 0xe045, 0xe004, 0x0040, 0xe065, 0xaf03, 0xce25, 0x3ea3,
+ 0xe41e, 0x0bf0, 0xa240, 0x18a3, 0xe426, 0xce24, 0x28a3, 0xe000,
+ 0x0500, 0xce22, 0x2491, 0x4c92, 0xce20, 0xe41e, 0x0bf0, 0xe42e,
+ 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa002, 0xce26, 0xca28, 0xf7f8,
+ 0xe42e, 0x34c9, 0x3cca, 0xa200, 0x3c15, 0xe0c0, 0x0049, 0x34cb,
+ 0x3ccc, 0xe0c0, 0x0045, 0xaf04, 0x301d, 0xe0c0, 0x0049, 0x3499,
+ 0x3c9a, 0x10cb, 0x1ccc, 0x2a15, 0xb611, 0x3e15, 0x2699, 0x4e9a,
+ 0x16c9, 0x1eca, 0xf033, 0x0693, 0x0e94, 0x16b3, 0x1eb4, 0xa200,
+ 0xe423, 0x281d, 0x3c90, 0xe428, 0x2815, 0xf648, 0xe41e, 0x01db,
+ 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf5da, 0xe0c0, 0x005d, 0xe00a,
+ 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c15, 0xf53e, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0060, 0x0008, 0x0006,
+ 0x00b0, 0x0090, 0x000b, 0x0009, 0x0160, 0x0120, 0x0016, 0x0012,
+ 0x02c0, 0x0240, 0x0058, 0x0012, 0x0580, 0x0480, 0x0160, 0x0012,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0063, 0x000d, 0x000f, 0x0011, 0x0013, 0x0015, 0x0017, 0x0000,
+ 0xffff, 0xfffe, 0x0001, 0x0002, 0x0000, 0x0002, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0000, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0002, 0x0001, 0xfffb, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c42, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1840, 0xf074, 0xe009, 0x00ff, 0x1a41, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x0bb5, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0368,
+ 0xe40e, 0x036a, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x036e, 0xe40e, 0x00a4,
+ 0xe41e, 0x038d, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x038e,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x03e0, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe41e, 0x03e9, 0xe40e, 0x00a4, 0xe41e, 0x0148,
+ 0xe41e, 0x093e, 0xe41e, 0x0417, 0xe41e, 0x09fd, 0xa200, 0xcc4a,
+ 0xcc4c, 0xa200, 0x3c1f, 0xe41e, 0x095f, 0xe41e, 0x0b81, 0xf08a,
+ 0xe41e, 0x070e, 0xe41e, 0x0561, 0xf03d, 0xa202, 0x3c1f, 0xe41e,
+ 0x098d, 0xe41e, 0x0c17, 0xe16a, 0xe42e, 0xe42e, 0xa200, 0xcc44,
+ 0xcc4a, 0xcc4c, 0x3c4a, 0x3c4b, 0xe41e, 0x095f, 0xe41e, 0x0b81,
+ 0xf2ea, 0xe41e, 0x070e, 0xe41e, 0x08bc, 0xe41e, 0x0a14, 0xe41e,
+ 0x0b7a, 0xe41e, 0x0746, 0xe41e, 0x0b11, 0xe41e, 0x0a1e, 0x28c1,
+ 0xf1e8, 0xe41e, 0x0418, 0x281a, 0xe418, 0x0561, 0xe41e, 0x0582,
+ 0xa202, 0xb61a, 0x3c1f, 0xf13d, 0xe41e, 0x0418, 0x28c1, 0xf0f8,
+ 0xe41e, 0x041c, 0xf0f8, 0xe41e, 0x0418, 0xe41e, 0x08f8, 0xf07a,
+ 0xe41e, 0x0418, 0xe41e, 0x0a28, 0xe41e, 0x042d, 0x2852, 0xe414,
+ 0x0c38, 0x28c1, 0xe41e, 0x0927, 0xe41e, 0x0914, 0xe41e, 0x0461,
+ 0xe41e, 0x0b7b, 0xe41e, 0x07ff, 0xe41e, 0x0b61, 0x285c, 0x3c5f,
+ 0xe41e, 0x08e3, 0xe41e, 0x098d, 0xe41e, 0x0c17, 0xe16a, 0xe42e,
+ 0xe41e, 0x0899, 0xe41e, 0x0a06, 0xe41e, 0x0b0c, 0xe41e, 0x0a7e,
+ 0xe42e, 0xe180, 0xe41e, 0x093e, 0xa200, 0x3cbe, 0x3cc1, 0xa2fa,
+ 0x3c5a, 0x3c5b, 0x3c5c, 0xa2fc, 0x3c52, 0xa2fe, 0x3c53, 0xa200,
+ 0x3c57, 0x3c56, 0xe166, 0x0054, 0x9e06, 0xf16a, 0x2851, 0xa102,
+ 0xcc44, 0xa200, 0x3c5e, 0xe184, 0x0411, 0x9e06, 0x5c5e, 0xa802,
+ 0xf07a, 0x285e, 0xe000, 0x02d0, 0xe09e, 0xa208, 0x3d07, 0x285e,
+ 0xa002, 0x3c5e, 0xe190, 0xe42e, 0xca28, 0xf7f8, 0xe42e, 0xe42e,
+ 0x2861, 0xa002, 0x3c61, 0xe42e, 0x2860, 0xe42a, 0xa102, 0xf04a,
+ 0xa102, 0xf05a, 0xf09e, 0x2829, 0xf078, 0xf04e, 0x2829, 0xa104,
+ 0xf03a, 0xa200, 0xe42e, 0xa202, 0xe42e, 0x282b, 0x3c2d, 0x2829,
+ 0xa104, 0xf05a, 0x282b, 0x3c2c, 0x3c2d, 0xf04e, 0x282c, 0x642b,
+ 0x3c2d, 0xe41e, 0x04cd, 0xe41e, 0x0723, 0xe41e, 0x0a7e, 0xe41e,
+ 0x0ab1, 0xe41e, 0x025f, 0xe41e, 0x0767, 0xe41e, 0x0761, 0xa200,
+ 0x3446, 0x3c47, 0xe41e, 0x0462, 0xf0dd, 0x2046, 0x4c47, 0x1842,
+ 0xf0c2, 0xe41e, 0x05f2, 0xf06d, 0x2c45, 0x1046, 0x1c47, 0xf7a4,
+ 0xf72a, 0xe41e, 0x048a, 0xe16a, 0xd1e6, 0x0001, 0xcbe2, 0xf7f8,
+ 0xe42e, 0xe42e, 0xe41e, 0x04a3, 0x2822, 0x1836, 0xf058, 0x2823,
+ 0x1837, 0xf028, 0xf12e, 0x2829, 0xe01a, 0xa802, 0xf088, 0x2822,
+ 0x3c36, 0x2823, 0x3c37, 0xa200, 0x3c38, 0xf03e, 0xa202, 0x3c38,
+ 0x2838, 0xf03a, 0xe16b, 0xe42e, 0xe41e, 0x04f5, 0xe42d, 0x2046,
+ 0x4c47, 0x1842, 0xe422, 0xcb86, 0xa102, 0xf770, 0xe41e, 0x04bd,
+ 0xf748, 0xe42e, 0x2829, 0xf088, 0x2456, 0x4c57, 0xf05a, 0xa204,
+ 0x4c10, 0xcf80, 0xcfc6, 0x2046, 0x4c47, 0xe41a, 0x04a3, 0x2046,
+ 0x4c47, 0x1842, 0xe422, 0xe41e, 0x0529, 0x244a, 0x4c4b, 0xa002,
+ 0x344a, 0x3c4b, 0xf75e, 0x282a, 0xcf82, 0xd1c3, 0x0000, 0x282b,
+ 0xcf96, 0xd188, 0x0001, 0x2824, 0xa102, 0x1825, 0xe016, 0x3c26,
+ 0x2825, 0xa002, 0x3c25, 0xae02, 0xe000, 0x0360, 0xe092, 0x2111,
+ 0x4d11, 0xae06, 0x3427, 0x3c28, 0xe42e, 0x2826, 0xe428, 0xc872,
+ 0x1027, 0x1c28, 0xa00e, 0xe424, 0xa10e, 0xe012, 0x3c49, 0xb60c,
+ 0xe42a, 0x7849, 0xe428, 0x7449, 0xe42e, 0x2829, 0xa104, 0xf09a,
+ 0x282f, 0x1830, 0xf022, 0x0833, 0x3c31, 0x282f, 0x3c30, 0xe42e,
+ 0x2830, 0x182f, 0xf022, 0x0833, 0x3c32, 0x2831, 0x1832, 0xa400,
+ 0x3c32, 0x2832, 0xae1c, 0xc70f, 0x7c31, 0x3c34, 0x2831, 0x1832,
+ 0xae1c, 0xc70f, 0x7c31, 0x3c35, 0xe005, 0x3fff, 0x2834, 0xe066,
+ 0x3c34, 0x2835, 0xe066, 0x3c35, 0xe42e, 0xd184, 0x0002, 0xd185,
+ 0x0000, 0xe190, 0xd1d0, 0x003f, 0xcba0, 0xa810, 0xcba3, 0xf209,
+ 0xf7c8, 0xe41e, 0x0803, 0xcbe0, 0xf7f8, 0x2848, 0xe41a, 0x0819,
+ 0xe41e, 0x081d, 0xcba0, 0xcba3, 0xf139, 0xf7d8, 0xd185, 0x0001,
+ 0xd184, 0x0004, 0xe41e, 0x082a, 0xcb06, 0x3446, 0x3c47, 0x2871,
+ 0x4c72, 0xe42a, 0x2879, 0x1877, 0xe414, 0x0b3f, 0xe42e, 0xd1d0,
+ 0x0000, 0xd1d1, 0x0000, 0xcb0c, 0xf7f8, 0xcbe0, 0xf7f8, 0xe16b,
+ 0xe42e, 0xd184, 0x0002, 0xd185, 0x0000, 0x882b, 0x01ca, 0xd1c4,
+ 0x0000, 0xd1c2, 0x0001, 0xd1c5, 0x0000, 0xd1d0, 0x000e, 0xcba0,
+ 0xf7f8, 0x2456, 0x4c57, 0xf058, 0xd1c2, 0x0000, 0xd1c5, 0x0003,
+ 0xd1d0, 0x0030, 0xe41e, 0x0803, 0xa200, 0xe0c2, 0x012a, 0xcbe0,
+ 0xf7f8, 0x2848, 0xe41a, 0x0819, 0xe41e, 0x081d, 0xcba0, 0xf7f8,
+ 0xd185, 0x0001, 0xd184, 0x0004, 0xe41e, 0x082a, 0xcb06, 0x3446,
+ 0x3c47, 0x2871, 0x4c72, 0xe42a, 0x2879, 0x1877, 0xe414, 0x0b3f,
+ 0xe42e, 0xa200, 0x3c10, 0xe16a, 0xba7e, 0x3418, 0x3c19, 0xe004,
+ 0x5649, 0xae20, 0xe00a, 0x444f, 0xa201, 0x3ef0, 0xba7f, 0xe046,
+ 0xf108, 0xe004, 0x2000, 0x3c33, 0xe41e, 0x0620, 0xf0ad, 0xe41e,
+ 0x068a, 0x2822, 0x3c13, 0x3c36, 0x2823, 0x3c14, 0x3c37, 0xe42e,
+ 0xe16b, 0xe42e, 0xba7e, 0x3420, 0x3c21, 0xa108, 0xa209, 0x3ef0,
+ 0xf326, 0xba7e, 0xe190, 0xba5e, 0xe190, 0xba5e, 0xe190, 0xba7e,
+ 0xe190, 0xba7e, 0xa20b, 0x3ef0, 0xf266, 0xe002, 0x0100, 0xa20d,
+ 0x3ef0, 0xf210, 0xe000, 0x0100, 0x3c24, 0xe161, 0x0360, 0x2824,
+ 0xa102, 0xcc44, 0xe184, 0x05ad, 0xba7e, 0xe190, 0xf14a, 0xba7e,
+ 0x3511, 0x3d11, 0x1420, 0x1c21, 0xf0e0, 0xe190, 0xd039, 0x0000,
+ 0xa200, 0x3c25, 0xa20f, 0x3ef0, 0xe41e, 0x05be, 0xf04d, 0xa200,
+ 0x3cf0, 0xe42e, 0xd039, 0x0000, 0xe16b, 0xe42e, 0xa211, 0x3ef0,
+ 0xba40, 0xf2f8, 0x7410, 0xf2d8, 0x7410, 0xf2b8, 0xba42, 0xa102,
+ 0xb608, 0x3c29, 0x7410, 0xe190, 0xba48, 0x3c2b, 0x2810, 0xe016,
+ 0xf0aa, 0xba40, 0xa215, 0x3ef0, 0xf1c8, 0xa217, 0x3ef0, 0xba40,
+ 0xf188, 0xba42, 0x3c2a, 0xba40, 0x3c2e, 0xba58, 0x3c2f, 0xe41e,
+ 0x06ab, 0xe086, 0x3c22, 0xe088, 0x3c23, 0xe41e, 0x068a, 0xa219,
+ 0x3ef0, 0x7444, 0x3c45, 0xf058, 0x1842, 0xf030, 0x7410, 0xe42e,
+ 0xe16b, 0xe42e, 0xba40, 0xf2b8, 0x7410, 0xf298, 0x7410, 0xf278,
+ 0xba42, 0xa102, 0xb608, 0x1829, 0xf228, 0x7410, 0xe190, 0xba48,
+ 0x3c2b, 0x2810, 0xe016, 0xf06a, 0xba40, 0xf198, 0xba40, 0xf178,
+ 0xba42, 0x3c2a, 0xba40, 0x182e, 0xf128, 0xba58, 0x182f, 0xf0f8,
+ 0xe41e, 0x06ab, 0xe086, 0x1822, 0xf0a8, 0xe088, 0x1823, 0xf078,
+ 0x7444, 0x3c45, 0x1842, 0xf032, 0x7410, 0xe42e, 0xe16b, 0xe42e,
+ 0xba1e, 0xe002, 0x5256, 0xe016, 0xa203, 0x3ef0, 0xe40a, 0x0688,
+ 0xba5e, 0xba1e, 0xe002, 0x3430, 0xf0aa, 0xba1e, 0xe002, 0x3330,
+ 0xe016, 0xa205, 0x3ef0, 0xe40a, 0x0688, 0xa202, 0x3c10, 0xba5e,
+ 0xe190, 0xba5e, 0x3c22, 0xba5e, 0x3c23, 0xba5e, 0xe190, 0xba5e,
+ 0xe190, 0xba5e, 0xe190, 0xba4e, 0xe190, 0xba5e, 0x3c12, 0xba4e,
+ 0xe004, 0x0100, 0x3c11, 0xba7e, 0xe190, 0xba7e, 0xaf18, 0xa81e,
+ 0xa10a, 0xa213, 0xf026, 0xa003, 0x3615, 0x3e16, 0x2810, 0xf098,
+ 0x2018, 0x4c19, 0xa144, 0xf2b6, 0xba4f, 0xa102, 0xf28a, 0xf7de,
+ 0xa211, 0x3615, 0x3e16, 0xa207, 0x3ef0, 0xa200, 0x3c17, 0xe161,
+ 0x0330, 0x2822, 0x3d11, 0x2823, 0x3d11, 0x2018, 0x4c19, 0xa144,
+ 0xf166, 0xba4f, 0xae05, 0x3f11, 0xba4f, 0xae05, 0x3f11, 0x2a17,
+ 0xa003, 0x3e17, 0xa111, 0xf0d3, 0xa104, 0xf740, 0x2817, 0xa002,
+ 0x3c17, 0x2817, 0xa002, 0xaf02, 0xa506, 0x3c17, 0xe16a, 0xe42e,
+ 0xe16b, 0xe42e, 0x2822, 0xa01e, 0xaf08, 0x3c40, 0x2823, 0xa01e,
+ 0xaf08, 0x3c41, 0x8440, 0x8241, 0xe018, 0x3c42, 0xa160, 0xa20d,
+ 0xf116, 0xa166, 0xf0e6, 0xe002, 0x0129, 0xf0a6, 0xe002, 0x04a4,
+ 0xf066, 0xe002, 0x1290, 0xf026, 0xa003, 0xa005, 0xa005, 0xa005,
+ 0xa003, 0x3e44, 0xe42e, 0x2810, 0xf0da, 0x2817, 0xf0fa, 0x7417,
+ 0xae02, 0xe000, 0x0330, 0xe092, 0x2911, 0xe096, 0x2911, 0xe098,
+ 0xe42e, 0x2829, 0xf08a, 0xba40, 0xf06a, 0x2822, 0xe096, 0x2823,
+ 0xe098, 0xe42e, 0xe005, 0x00a0, 0xba44, 0xf1ca, 0xa102, 0xf19a,
+ 0xa102, 0xf16a, 0xa102, 0xf13a, 0xa102, 0xf10a, 0xa102, 0xf0ca,
+ 0xa102, 0xf09a, 0xa201, 0xba4e, 0xe041, 0xe002, 0x00ff, 0xf7ca,
+ 0xae05, 0xf08e, 0xa081, 0xe001, 0x0120, 0xa041, 0xa0a1, 0xa081,
+ 0xa021, 0xe097, 0xe005, 0x0078, 0xba44, 0xf27a, 0xa102, 0xf24a,
+ 0xa102, 0xf21a, 0xa102, 0xf1ea, 0xa102, 0xf1ba, 0xa102, 0xf17a,
+ 0xa102, 0xba41, 0xf088, 0xf049, 0xe005, 0x00b4, 0xf16e, 0xe005,
+ 0x0168, 0xf13e, 0xf049, 0xe005, 0x0240, 0xf0fe, 0xa201, 0xba4e,
+ 0xe041, 0xe002, 0x00ff, 0xf7ca, 0xae05, 0xf07e, 0xe001, 0x00c0,
+ 0xa061, 0xa0c1, 0xa019, 0xa019, 0xe099, 0xe42e, 0xd130, 0x0004,
+ 0xd131, 0x0000, 0xd008, 0x0000, 0xd03a, 0x0004, 0xd1e0, 0x0001,
+ 0xd1e1, 0x03b0, 0xd1f3, 0x0040, 0xd022, 0x00bf, 0xe184, 0x0721,
+ 0xa200, 0xcfe8, 0xe42e, 0x2829, 0xae02, 0x4c10, 0xcf80, 0xcfc6,
+ 0xd1d3, 0x000b, 0x2840, 0xa102, 0xae04, 0x4c29, 0xae02, 0x4c10,
+ 0xcf00, 0x282e, 0xa200, 0xcf02, 0xd184, 0x0001, 0x2840, 0xae20,
+ 0x4c41, 0xae08, 0xcfc4, 0xe167, 0x02c0, 0x2117, 0x4d17, 0xcfca,
+ 0x2834, 0xcfce, 0xd1e6, 0x0000, 0xe42e, 0xe42e, 0x2810, 0xae08,
+ 0xa908, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x0128, 0xa200, 0xe0c2,
+ 0x013d, 0x2a71, 0x4e72, 0xb692, 0xae08, 0xa91c, 0xe0c2, 0x017c,
+ 0xa218, 0xe0c2, 0x017d, 0xa200, 0xe41e, 0x0a5e, 0xe0c2, 0x0102,
+ 0xe42e, 0xe41e, 0x0274, 0xa202, 0xe0c2, 0x0106, 0xe42e, 0xa200,
+ 0xcc8e, 0xe0c2, 0x0128, 0x2810, 0xae08, 0xa908, 0xe0c2, 0x0100,
+ 0x2a71, 0x4e72, 0xb692, 0xae08, 0xa91c, 0xe0c2, 0x017c, 0xe004,
+ 0x000c, 0xe0c2, 0x017d, 0xa208, 0xae04, 0x4c10, 0xae04, 0x4c29,
+ 0xae06, 0xe0c2, 0x0204, 0xa200, 0xe0c2, 0x0208, 0x2829, 0xae06,
+ 0xe0c2, 0x0104, 0xe0c1, 0x0046, 0xe004, 0x0000, 0xae10, 0xe042,
+ 0x2ac8, 0xa803, 0xf05b, 0xe161, 0x0700, 0x2111, 0x4d11, 0xcfc8,
+ 0xe0c1, 0x0046, 0xe004, 0x0040, 0xae10, 0xe042, 0x2ac8, 0xa805,
+ 0xf05b, 0xe161, 0x0702, 0x2111, 0x4d11, 0xe0c2, 0x0103, 0x282e,
+ 0xe016, 0xe0c2, 0x0210, 0xa200, 0xe41e, 0x0a5e, 0xa203, 0xae11,
+ 0xe056, 0xe0c2, 0x0213, 0xa200, 0xe0c2, 0x0215, 0xe0c1, 0x0046,
+ 0xe004, 0x0070, 0xae10, 0xe042, 0x2ac8, 0xa809, 0xf05b, 0xe161,
+ 0x0704, 0x2111, 0x4d11, 0xe0c2, 0x0211, 0xe0c1, 0x0046, 0xe004,
+ 0x0070, 0xe000, 0x0040, 0xae10, 0xe042, 0x2ac8, 0xa811, 0xf05b,
+ 0xe161, 0x0706, 0x2111, 0x4d11, 0xe0c2, 0x0212, 0x2840, 0xae20,
+ 0x4c41, 0xae08, 0xe0c2, 0x0101, 0xe0c2, 0x0205, 0xa200, 0xe41e,
+ 0x0a5e, 0xe0c2, 0x0102, 0xa200, 0xae0a, 0x4c2d, 0xe0c2, 0x0217,
+ 0xe41e, 0x0831, 0xe41e, 0x0836, 0xa20e, 0xe0c2, 0x0312, 0xe0c0,
+ 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414, 0xe41a, 0x0862, 0xa200,
+ 0xe0c2, 0x030d, 0x2035, 0x4c34, 0xe0c2, 0x0310, 0xe42e, 0xe0c0,
+ 0x0111, 0xf7e8, 0xe42e, 0xcb94, 0xe0c2, 0x0115, 0xcba4, 0xe0c2,
+ 0x012a, 0xcb8a, 0xe0c2, 0x0114, 0xa802, 0x3c48, 0xe42a, 0xcb12,
+ 0xe0c2, 0x0120, 0xcb8c, 0xe0c2, 0x0121, 0xcb8e, 0xe0c2, 0x0122,
+ 0xe42e, 0xcbd0, 0xe0c2, 0x0311, 0xe42e, 0xcb40, 0xe0c2, 0x0224,
+ 0xcb42, 0xe0c2, 0x0225, 0xcb44, 0xe0c2, 0x0226, 0xcb46, 0xe0c2,
+ 0x0227, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110,
+ 0xe42e, 0x2852, 0xe0c2, 0x020b, 0xe0c2, 0x0214, 0xa200, 0xe0c2,
+ 0x030a, 0xe004, 0x0082, 0xa202, 0xae20, 0xe00a, 0x0842, 0xe0c2,
+ 0x030b, 0xa202, 0xe0c2, 0x0302, 0x2829, 0xa104, 0xf082, 0x285b,
+ 0xf032, 0x2852, 0xb608, 0xe0c2, 0x0380, 0xf09e, 0x285a, 0xf052,
+ 0x285b, 0xf032, 0x2852, 0xb608, 0xe0c2, 0x0380, 0x285b, 0xf052,
+ 0x285a, 0xf032, 0x2852, 0xb608, 0xe0c2, 0x0383, 0xa200, 0xe0c2,
+ 0x0302, 0xe42e, 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152,
+ 0x2b17, 0xe009, 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1,
+ 0x0101, 0xe0c3, 0x015d, 0x2829, 0xa104, 0xe005, 0x001b, 0xf038,
+ 0xe005, 0x001f, 0x3e00, 0x285a, 0xa53e, 0xa400, 0x2a5b, 0xa53f,
+ 0xa401, 0xae11, 0xe055, 0xae21, 0xe167, 0x01a2, 0x2907, 0xaf10,
+ 0x4400, 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0,
+ 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8,
+ 0xe42e, 0xa2fa, 0x3c5a, 0x3c5b, 0xa2fe, 0x3c53, 0xa200, 0x3c54,
+ 0x3c55, 0x3c58, 0x3c59, 0x3c57, 0x3c56, 0xa202, 0x285d, 0xe0c0,
+ 0x0061, 0x3c50, 0xe41e, 0x0414, 0xe0c0, 0x0042, 0xce20, 0xd111,
+ 0x0200, 0xd112, 0x00c4, 0xd113, 0x0003, 0xe41e, 0x0414, 0xe0c0,
+ 0x0060, 0x3c51, 0xa202, 0xe42e, 0xa2fc, 0x3c52, 0xa2fa, 0x3c5c,
+ 0xe0c0, 0x0054, 0x2654, 0x4e55, 0xe052, 0x3c55, 0x3454, 0xe41e,
+ 0x08ca, 0xe42e, 0xa200, 0x3c5e, 0x2851, 0xa102, 0xcc44, 0xe184,
+ 0x08e1, 0x2454, 0x4c55, 0x5c5e, 0xa802, 0xf0a8, 0x285e, 0xe049,
+ 0xe001, 0x02d0, 0xe09f, 0x2b07, 0xa809, 0xe419, 0x0951, 0x285e,
+ 0xa002, 0x3c5e, 0xe42e, 0xe004, 0x02d0, 0xe09e, 0x2851, 0xa102,
+ 0xcc44, 0xa200, 0x3c5e, 0xe184, 0x08f4, 0x2b17, 0xaf05, 0xa803,
+ 0x5a5e, 0xe056, 0x2a5e, 0xa003, 0x3e5e, 0x3454, 0x3c55, 0xe42e,
+ 0x2853, 0xb7e8, 0xe094, 0xe092, 0xe084, 0xa002, 0x2a51, 0xe045,
+ 0xb616, 0x3c52, 0xe094, 0xe083, 0xe045, 0xf059, 0xa2fe, 0x3c52,
+ 0xa200, 0xe42e, 0x3c53, 0xe000, 0x02d0, 0xe09e, 0x2907, 0xf6d8,
+ 0xa20a, 0x3d07, 0xa202, 0xe42e, 0x2852, 0xf114, 0x2829, 0xf0f4,
+ 0xa104, 0xf0d2, 0x285a, 0xe41e, 0x0946, 0x285b, 0x3c5a, 0x2852,
+ 0x3c5b, 0x2456, 0x4c57, 0xa002, 0x3c57, 0x3456, 0xe42e, 0x2a5d,
+ 0xb630, 0xe045, 0x3e5d, 0xf098, 0xa2fa, 0x3c5c, 0x2852, 0xe424,
+ 0x2829, 0xe424, 0xa104, 0xf062, 0x2a5d, 0x285b, 0xb7ea, 0x3c5c,
+ 0xe42e, 0x2852, 0x3c5c, 0xe41e, 0x0946, 0xe42e, 0xe167, 0x02d0,
+ 0xa200, 0xc71f, 0x3d17, 0xa202, 0x3c5d, 0xe42e, 0xe424, 0xe049,
+ 0x1a51, 0xe423, 0xe000, 0x02d0, 0xe09e, 0x2907, 0xa808, 0x3d07,
+ 0xe42e, 0xe000, 0x02d0, 0xe09e, 0x2907, 0xa802, 0x3d07, 0xe42e,
+ 0xe000, 0x02d0, 0xe09e, 0xa208, 0x4d07, 0x3d07, 0xe42e, 0xe0c0,
+ 0x0059, 0xa102, 0xf20a, 0xa102, 0xe42a, 0xa102, 0xf04a, 0xa102,
+ 0xf24a, 0xe42e, 0xe0c0, 0x0060, 0xaf08, 0x3071, 0xaf02, 0x3072,
+ 0xe0c0, 0x0060, 0xa81e, 0x3c70, 0xe0c0, 0x0061, 0xa83e, 0x3c74,
+ 0xe0c1, 0x0065, 0xa809, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xb632,
+ 0x3c60, 0xe42e, 0xe0c0, 0x0060, 0x34b0, 0x3cb1, 0xe0c0, 0x0061,
+ 0xae14, 0x34b2, 0x3cb3, 0xe42e, 0xe42e, 0xe0c0, 0x0059, 0xa102,
+ 0xe40a, 0x09d4, 0xa102, 0xe42a, 0xa102, 0xf05a, 0xa102, 0xe40a,
+ 0x09fc, 0xe42e, 0x2022, 0x4c23, 0xe0c2, 0x006f, 0x2456, 0x4c57,
+ 0xe0c2, 0x0070, 0x285c, 0xe0c2, 0x0071, 0x244a, 0x4c4b, 0xe0c2,
+ 0x0072, 0x2829, 0xe0c2, 0x0073, 0xa200, 0xe0c2, 0x0074, 0x281f,
+ 0xe0c2, 0x0076, 0x2852, 0x2ac1, 0xb7d2, 0xe0c2, 0x0077, 0xa200,
+ 0xe0c2, 0x0078, 0xe0c2, 0x0079, 0x282f, 0xe0c2, 0x007a, 0xa2fe,
+ 0xe0c2, 0x007c, 0x2811, 0xe0c2, 0x007e, 0x2812, 0xe0c2, 0x007d,
+ 0x2454, 0x4c55, 0xe0c2, 0x0054, 0xc84a, 0xc84d, 0xae20, 0xe056,
+ 0xe0c2, 0x0053, 0xa202, 0xe42e, 0xa202, 0xe0c2, 0x0074, 0xa200,
+ 0xe0c2, 0x0076, 0xe0c2, 0x0077, 0xa202, 0x2af0, 0xb616, 0x58f0,
+ 0xe0c2, 0x0078, 0x2811, 0xe0c2, 0x007a, 0x2812, 0xe0c2, 0x0079,
+ 0xa2fe, 0xe0c2, 0x0072, 0xe0c2, 0x006d, 0xa208, 0xe0c2, 0x0073,
+ 0x2013, 0x4c14, 0xe0c2, 0x0071, 0x2015, 0x4c16, 0xe0c2, 0x007b,
+ 0x281f, 0xe0c2, 0x0070, 0xe42e, 0xe42e, 0xe0c0, 0x0041, 0xe005,
+ 0x0020, 0xae11, 0xe042, 0xe41e, 0x0a1a, 0xe42e, 0xe41e, 0x0174,
+ 0xe167, 0x0700, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184, 0x0a12,
+ 0x9e16, 0x3517, 0x3d17, 0xe42e, 0xe0c0, 0x0050, 0xe008, 0x007f,
+ 0x3cc8, 0xe42e, 0xa00e, 0xaf06, 0xae06, 0xe42e, 0xe41e, 0x0a7e,
+ 0xe41e, 0x0ab1, 0xe41e, 0x025f, 0xe41e, 0x0a49, 0xa202, 0xe42e,
+ 0x2852, 0xf1f4, 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe019,
+ 0xe001, 0x0500, 0xe09f, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200,
+ 0xe41e, 0x0a5e, 0xaf04, 0xe41e, 0x0a67, 0xae20, 0x2e50, 0xe056,
+ 0x9f17, 0x2040, 0x4c41, 0xae08, 0x9f17, 0xa201, 0xe0c3, 0x040d,
+ 0xe42e, 0xa200, 0x2ac8, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2ac8,
+ 0xa805, 0xf02b, 0xa912, 0x2ac8, 0xa809, 0xf02b, 0xa940, 0x2ac8,
+ 0xa811, 0xf02b, 0xa980, 0xe0c2, 0x040c, 0xe42e, 0xe0c1, 0x0044,
+ 0xa80f, 0xe056, 0xe42e, 0xa200, 0xe41e, 0x0a5e, 0xe42e, 0xe0c1,
+ 0x0044, 0xaf0d, 0xae03, 0xe056, 0xe008, 0x003f, 0xe42e, 0xe0c1,
+ 0x0044, 0xaf17, 0xa803, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803,
+ 0xa105, 0xf039, 0xa213, 0xe42e, 0xa201, 0xe42e, 0xa203, 0xe0c3,
+ 0x040d, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xe160, 0x0003, 0xe166,
+ 0x0200, 0xe167, 0x0500, 0x2851, 0xf166, 0xa102, 0xcc44, 0xe184,
+ 0x0aa1, 0xa200, 0xe41e, 0x0a5e, 0xaf04, 0xe41e, 0x0a67, 0xae20,
+ 0x2e50, 0xe056, 0x9f17, 0x2040, 0x4c41, 0xae08, 0x9f17, 0xe41e,
+ 0x0aa7, 0xe190, 0xe190, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x2116,
+ 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17,
+ 0xe42e, 0xe0c0, 0x0044, 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060,
+ 0xa860, 0xe42a, 0xe0c0, 0x0061, 0xa83e, 0xa203, 0xe0c3, 0x040d,
+ 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500, 0xe09e, 0xe0c1, 0x0420,
+ 0xa803, 0xf7db, 0xa200, 0xe41e, 0x0a63, 0xa80e, 0xaf04, 0xe41e,
+ 0x0a67, 0xe41e, 0x0a6f, 0xe40b, 0x0ada, 0xa81e, 0xe41e, 0x0a74,
+ 0xae09, 0xe056, 0xae20, 0xe0c1, 0x006e, 0xe009, 0x1fff, 0xe056,
+ 0x9f17, 0xe0c0, 0x0060, 0xa822, 0xa122, 0xf04a, 0x2040, 0x4c41,
+ 0xf03e, 0x2041, 0x4c40, 0xae08, 0x9f17, 0xe0c0, 0x0062, 0x9f17,
+ 0xe0c0, 0x0063, 0x9f17, 0xe0c0, 0x0064, 0x9f17, 0xa201, 0xe0c3,
+ 0x040d, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x0200, 0xd112, 0x00c0, 0x88ec, 0x0113,
+ 0xca29, 0xf7f9, 0xe190, 0xe42e, 0xa2fe, 0x3c73, 0xa200, 0x3c71,
+ 0xe42e, 0x285f, 0x3c73, 0x2873, 0xf032, 0xa200, 0x3c71, 0xa200,
+ 0x3c78, 0x3c79, 0x2840, 0x3c76, 0x2841, 0x3c77, 0x2871, 0xe42a,
+ 0x2873, 0xe424, 0x2873, 0xe0c2, 0x0143, 0x2874, 0xe0c2, 0x0144,
+ 0xa200, 0xe0c2, 0x017f, 0xe0c2, 0x0149, 0xe41e, 0x0a5e, 0xe0c2,
+ 0x017f, 0x2876, 0xa102, 0xae20, 0x4c77, 0xa102, 0xe0c2, 0x0142,
+ 0xa200, 0xae20, 0x2a70, 0xe042, 0xe0c2, 0x014e, 0xe42e, 0x2873,
+ 0x2a79, 0x1a77, 0xe423, 0x2878, 0xae0e, 0x4c79, 0xa203, 0xb615,
+ 0x3e7a, 0x2a7a, 0xae03, 0xa903, 0xae1d, 0xe056, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0x2a78, 0xa003,
+ 0x3e78, 0x1a76, 0xf065, 0x2a79, 0xa003, 0x3e79, 0xa201, 0x3e78,
+ 0xe42e, 0x2871, 0xf15a, 0x2879, 0x1877, 0xf042, 0xe41e, 0x0b3f,
+ 0xf7be, 0xe0c0, 0x014b, 0xf7e8, 0xa204, 0xae1c, 0xe0c2, 0x014d,
+ 0xa202, 0xe0c2, 0x014a, 0xe190, 0xe0c0, 0x014b, 0xf7e8, 0x285c,
+ 0x3c73, 0xe42e, 0xe42e, 0xe42e, 0xe42e, 0xe42e, 0xe42e, 0xe42e,
+ 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0b8e, 0xa102, 0xe40a,
+ 0x0bb0, 0xa102, 0xe40a, 0x0b96, 0xe40e, 0x0bb0, 0xe41e, 0x023a,
+ 0x24b0, 0x4cb1, 0x04b2, 0x0cb3, 0x34b4, 0x3cb5, 0xa206, 0xae1e,
+ 0xcec0, 0xd160, 0x0600, 0xe0c0, 0x0048, 0xe0c2, 0x0051, 0x34ba,
+ 0x3cbb, 0x34b6, 0xe008, 0xfe00, 0x3cb7, 0x2cbb, 0xe008, 0x01ff,
+ 0x3cbc, 0xe41e, 0x0cd0, 0xf07d, 0xe41e, 0x0bf8, 0xe41e, 0x0be3,
+ 0xa202, 0xe42e, 0xa200, 0xe16a, 0xe42e, 0xe41e, 0x0bb8, 0xe470,
+ 0xca28, 0xf7f8, 0xe004, 0x0080, 0xce24, 0x28bf, 0xae0e, 0xce22,
+ 0x24b6, 0x4cb7, 0xce20, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022,
+ 0xce26, 0xca28, 0xf7f8, 0x24b6, 0x4cb7, 0xe000, 0x0200, 0x34b6,
+ 0x3cb7, 0x14b4, 0x1cb5, 0xf054, 0x24b0, 0x4cb1, 0x34b6, 0x3cb7,
+ 0xd04c, 0x0000, 0x28bf, 0xae0e, 0xcc6e, 0x28bf, 0xe016, 0x3cbf,
+ 0xe42e, 0x28c1, 0xe42e, 0xa200, 0x3cbf, 0xce92, 0xe41e, 0x0bb8,
+ 0xe41e, 0x0bb8, 0xe128, 0xd071, 0x2020, 0xe181, 0x2cbc, 0xa102,
+ 0xf074, 0xcc44, 0xe184, 0x0bf5, 0xba4e, 0xe190, 0xe190, 0xe42e,
+ 0xe004, 0x1495, 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd034, 0x0000,
+ 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0000,
+ 0xd038, 0x0000, 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000,
+ 0xd046, 0x0000, 0xd047, 0x0000, 0xd149, 0x0000, 0xe42e, 0xe0c0,
+ 0x0059, 0xa102, 0xe40a, 0x0c22, 0xa102, 0xe42a, 0xa102, 0xe40a,
+ 0x0c22, 0xe42a, 0x24c5, 0x4cc6, 0x04ba, 0x0cbb, 0x34ba, 0x3cbb,
+ 0x14b4, 0x1cb5, 0xf074, 0x24ba, 0x4cbb, 0x14b2, 0x1cb3, 0x34ba,
+ 0x3cbb, 0x24ba, 0x4cbb, 0xe0c2, 0x0048, 0xe0c2, 0x0052, 0xe42e,
+ 0xa200, 0x34c5, 0x3cc6, 0xe42e, 0xf0a8, 0x2911, 0xe008, 0xffff,
+ 0xae20, 0x2b11, 0xe009, 0xffff, 0xe042, 0xf0fe, 0x2911, 0xe008,
+ 0x00ff, 0xae20, 0x2b11, 0xe009, 0xffff, 0xe042, 0xae10, 0x2b11,
+ 0xe009, 0xff00, 0xaf11, 0xe042, 0x2ac7, 0xe42b, 0xe049, 0xaf31,
+ 0xe009, 0x00ff, 0xe093, 0xe049, 0xaf21, 0xe009, 0x00ff, 0xe095,
+ 0xe049, 0xaf11, 0xe009, 0x00ff, 0xe008, 0x00ff, 0xae10, 0xe056,
+ 0xae10, 0xe085, 0xe056, 0xae10, 0xe083, 0xe056, 0xe42e, 0xe049,
+ 0xa80f, 0xe046, 0xe42e, 0xca29, 0xf7f9, 0xd111, 0x0600, 0xce20,
+ 0x26b4, 0x4eb5, 0xe045, 0xe004, 0x0040, 0xe065, 0xaf03, 0xce25,
+ 0x3ec0, 0xe41e, 0x0c91, 0xa240, 0x18c0, 0xe426, 0xce24, 0x28c0,
+ 0xe000, 0x0600, 0xce22, 0x24b0, 0x4cb1, 0xce20, 0xe41e, 0x0c91,
+ 0xe42e, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa002, 0xce26, 0xca28,
+ 0xf7f8, 0xe42e, 0x34c9, 0x3cca, 0xa200, 0x3cbd, 0xe0c0, 0x0049,
+ 0x34cb, 0x3ccc, 0xe0c0, 0x0045, 0xaf04, 0x30be, 0xe0c0, 0x0049,
+ 0x34b8, 0x3cb9, 0x10cb, 0x1ccc, 0x2abd, 0xb611, 0x3ebd, 0x26b8,
+ 0x4eb9, 0x16c9, 0x1eca, 0xf033, 0x06b2, 0x0eb3, 0x16c3, 0x1ec4,
+ 0xa200, 0xe423, 0x28be, 0x3cc1, 0xe428, 0x28bd, 0xf648, 0xe41e,
+ 0x01db, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf5da, 0xe0c0, 0x005d,
+ 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3cbd, 0xf53e,
+ 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0cdb, 0xa102, 0xe42a, 0xa102,
+ 0xe40a, 0x0d05, 0xe42e, 0xa200, 0x3cc7, 0xa244, 0x34c3, 0x3cc4,
+ 0x24ba, 0x4cbb, 0xd027, 0x0000, 0xe41e, 0x0c9a, 0xd027, 0x0001,
+ 0xe408, 0x0d03, 0x24ba, 0x4cbb, 0xe41e, 0x0c6f, 0xe095, 0xe41e,
+ 0x0c73, 0xe084, 0xaf02, 0xe000, 0x0600, 0xe092, 0xe084, 0xa802,
+ 0xe41e, 0x0c3c, 0xe008, 0xffff, 0x34c5, 0x3cc6, 0xa144, 0xf034,
+ 0xa200, 0xe42e, 0xe16b, 0xa202, 0xe42e, 0xa228, 0x34c3, 0x3cc4,
+ 0x24ba, 0x4cbb, 0xd027, 0x0000, 0xe41e, 0x0c9a, 0xd027, 0x0001,
+ 0xe408, 0x0d50, 0x24ba, 0x4cbb, 0xe41e, 0x0c6f, 0xe095, 0xe41e,
+ 0x0c73, 0xe084, 0xaf02, 0xe000, 0x0600, 0xe092, 0xe41e, 0x0d55,
+ 0xe084, 0xa802, 0xe41e, 0x0c3c, 0x00c5, 0x0cc6, 0x34c5, 0x3cc6,
+ 0xf286, 0x26b2, 0x4eb3, 0xe046, 0xf242, 0xe084, 0xa020, 0x001b,
+ 0x0c1c, 0xaf02, 0xe000, 0x0600, 0xe092, 0xe084, 0xa802, 0xe41e,
+ 0x0c3c, 0x3c24, 0xf154, 0x2824, 0xae06, 0xa028, 0x04c5, 0x0cc6,
+ 0x34c5, 0x3cc6, 0x34c3, 0x3cc4, 0x24ba, 0x4cbb, 0xd027, 0x0000,
+ 0xe41e, 0x0c9a, 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b,
+ 0xa200, 0x34c5, 0x3cc6, 0xa202, 0xe42e, 0x2111, 0x4d11, 0x341b,
+ 0x3c1c, 0x2111, 0x4d11, 0xe160, 0x0004, 0x8129, 0xe005, 0x5649,
+ 0xae21, 0xe00b, 0x444f, 0xe046, 0xf08a, 0xa200, 0x3c1a, 0x341b,
+ 0x3c1c, 0x34c5, 0x3cc6, 0xe42e, 0x221b, 0x4e1c, 0x36c5, 0x3ec6,
+ 0xaf03, 0xe082, 0xe042, 0xe092, 0xa202, 0x3c1a, 0xe42e, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c47, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1844, 0xf074, 0xe009, 0x00ff, 0x1a45, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x06d4, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x0368, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x036c, 0xe40e, 0x00a4,
+ 0xe41e, 0x038b, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x038c,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x040f, 0xe40e, 0x00a4,
+ 0xe41e, 0x0526, 0xe40e, 0x00a4, 0xa200, 0x3cb6, 0xa200, 0xcc4a,
+ 0xcc4c, 0xe41e, 0x0459, 0xe41e, 0x0485, 0xe41e, 0x0870, 0xe41e,
+ 0x0669, 0xe41e, 0x0975, 0xf0ad, 0xe41e, 0x095b, 0xe41e, 0x04bf,
+ 0xe41e, 0x0492, 0xf03a, 0xa202, 0x3cb6, 0xe41e, 0x0813, 0xe41e,
+ 0x08d1, 0xe16a, 0xe42e, 0xe42e, 0xa202, 0x3cb6, 0xe41e, 0x0870,
+ 0xe41e, 0x05aa, 0xe41e, 0x0486, 0xe41e, 0x0f72, 0xe41e, 0x0fa5,
+ 0xe41e, 0x0473, 0xe41e, 0x0d3a, 0x2813, 0xe016, 0x3c33, 0xe41e,
+ 0x0ae4, 0xe41e, 0x1135, 0xe41e, 0x0669, 0xe41e, 0x0492, 0xe40a,
+ 0x03e2, 0x2833, 0x4434, 0xe408, 0x03cc, 0xe41e, 0x0a28, 0xe40d,
+ 0x03e2, 0xe41e, 0x0964, 0x2817, 0xe408, 0x03fc, 0xe41e, 0x0cef,
+ 0xf714, 0xf05a, 0xe41e, 0x04bf, 0xe40e, 0x03e2, 0xe41e, 0x020f,
+ 0xe404, 0x03e2, 0xe41e, 0x0d08, 0x2834, 0xe41a, 0x0620, 0xe404,
+ 0x03f3, 0x2834, 0xe41a, 0x062f, 0xe41e, 0x0c36, 0x2833, 0x4434,
+ 0xe41a, 0x054a, 0x2833, 0x5434, 0xe41a, 0x0638, 0x2833, 0x5434,
+ 0xe41a, 0x0d2d, 0x2833, 0x5434, 0x3c34, 0xf05a, 0x281a, 0x3cab,
+ 0xe40e, 0x03a9, 0xe41e, 0x1185, 0xe41e, 0x0ef4, 0xe41e, 0x07a4,
+ 0xf08a, 0xe41e, 0x07bb, 0xf05a, 0xe41e, 0x057b, 0xa200, 0x3ca7,
+ 0xe41e, 0x055e, 0x3ca3, 0x28a3, 0x3ca8, 0xe41e, 0x08d1, 0xe41e,
+ 0x05bf, 0xe41e, 0x0813, 0xe42e, 0xa200, 0x3ca7, 0xe41e, 0x095b,
+ 0xe41e, 0x055e, 0x3ca3, 0x3ca8, 0xa2fe, 0x3ca2, 0xe41e, 0x1129,
+ 0xe41e, 0x08d1, 0xe41e, 0x05bf, 0xe41e, 0x0813, 0xe42e, 0xe41e,
+ 0x0870, 0xe42e, 0xe167, 0x02d4, 0xe166, 0x0064, 0xd022, 0x0003,
+ 0xe184, 0x041c, 0x9e16, 0x3517, 0x3d17, 0xe42e, 0xe42e, 0xe161,
+ 0x0550, 0xa200, 0x3d11, 0x2844, 0xae08, 0x1810, 0x3d11, 0xa200,
+ 0x3d11, 0x2845, 0xae08, 0x1811, 0x3d11, 0xe42e, 0x3c03, 0xf028,
+ 0xe42e, 0xa231, 0xa104, 0xf0e6, 0xa102, 0xb435, 0xf0ba, 0xa104,
+ 0xb4cd, 0xf086, 0xa102, 0xf05a, 0xa104, 0xf026, 0xe42e, 0xa015,
+ 0xa029, 0x3e01, 0x8401, 0xe182, 0x03e8, 0xe018, 0xe161, 0x0556,
+ 0x3511, 0x3d11, 0xe005, 0x03e9, 0x2803, 0xa102, 0xf06a, 0xa106,
+ 0xf04a, 0xa106, 0xf02a, 0xa103, 0xe161, 0x0554, 0x3711, 0x3f11,
+ 0xe42e, 0xe41e, 0x0148, 0xe16a, 0xd130, 0x0005, 0xa2fe, 0x34b4,
+ 0x3cb5, 0xe161, 0x0554, 0xc703, 0x3d11, 0xa202, 0x3cb7, 0xe161,
+ 0x0550, 0xc703, 0x3d11, 0xa200, 0x3cb0, 0x3cb1, 0xe41e, 0x064d,
+ 0xe41e, 0x1130, 0xe42e, 0xa200, 0xcc44, 0xcc4a, 0xcc4c, 0xcc72,
+ 0xd130, 0x0005, 0xd03a, 0x0005, 0xd04b, 0x0001, 0xd04c, 0x0000,
+ 0xd008, 0x0000, 0xe41e, 0x025f, 0xe42e, 0xe42e, 0xa200, 0x3c60,
+ 0xa200, 0x3cb8, 0x3c34, 0x3c33, 0x3c17, 0xa2fc, 0x3ca2, 0xa2fa,
+ 0x3ca3, 0xe42e, 0xa202, 0x3cf0, 0x2814, 0xa140, 0xf278, 0xa204,
+ 0x3cf0, 0x2c10, 0xf23a, 0x2c11, 0xf21a, 0x2c10, 0xe002, 0x0780,
+ 0xf1d0, 0x2c11, 0xe002, 0x0780, 0xf190, 0x8444, 0x8245, 0xe018,
+ 0xe002, 0x1fe0, 0xf130, 0xe0c0, 0x0059, 0xa106, 0xf0d8, 0xe41e,
+ 0x07a4, 0xf04a, 0xe41e, 0x01db, 0xf09e, 0xe41e, 0x05f4, 0x2aa2,
+ 0xb7f5, 0x3ea2, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe16a,
+ 0xa200, 0xcea6, 0xe41e, 0x07a4, 0xe408, 0x0508, 0xe41e, 0x1076,
+ 0x28d3, 0xe002, 0x00af, 0xe406, 0x04fe, 0x28d3, 0xe002, 0x00b0,
+ 0xf28a, 0x28d3, 0xe002, 0x00b1, 0xf2aa, 0x28d3, 0xe002, 0x00b2,
+ 0xf26a, 0x28d3, 0xe002, 0x00b3, 0xf21a, 0x28d3, 0xe002, 0x00b4,
+ 0xf1ea, 0x28d3, 0xe002, 0x00b5, 0xf1ea, 0x28d3, 0xe002, 0x00b6,
+ 0xe40a, 0x04fd, 0x28d3, 0xe002, 0x00b7, 0xe40a, 0x04fe, 0x28d3,
+ 0xe002, 0x00b8, 0xf0ca, 0x28d3, 0xe002, 0x00b9, 0xf082, 0xf07e,
+ 0xe41e, 0x104a, 0xe41e, 0x09d5, 0xf43e, 0xf0de, 0xe41e, 0x104a,
+ 0xe40e, 0x04bf, 0xe41e, 0x104a, 0xe41e, 0x09fb, 0xe40e, 0x04bf,
+ 0xe41e, 0x01db, 0xe16a, 0xe42e, 0xa200, 0xcea6, 0xe41e, 0x07a4,
+ 0xe408, 0x0519, 0xe41e, 0x1076, 0xe41e, 0x07a4, 0xe408, 0x0519,
+ 0xe42e, 0xe41e, 0x01db, 0xe42e, 0x281d, 0xae02, 0x4c20, 0xae02,
+ 0x4c1f, 0xae06, 0x4c1e, 0xae24, 0x4c1b, 0xe42e, 0xe41e, 0x064d,
+ 0xe166, 0x0054, 0x9e06, 0xf16a, 0x28ad, 0xa102, 0xcc44, 0xa200,
+ 0x3c01, 0xe184, 0x053f, 0x9e06, 0x5c01, 0xa802, 0xf07a, 0x2801,
+ 0xe000, 0x0400, 0xe09e, 0xa208, 0x3d07, 0x2801, 0xa002, 0x3c01,
+ 0xe190, 0xe42e, 0xe41e, 0x0815, 0xe0c0, 0x0048, 0xe0c2, 0x0051,
+ 0xe42e, 0xe42e, 0x28a2, 0x2a54, 0xf07b, 0x2a1a, 0xa105, 0xf04b,
+ 0xe166, 0x0598, 0x2916, 0x3ca9, 0xe41e, 0x0618, 0xa804, 0xe42a,
+ 0x28a9, 0xe41e, 0x0608, 0xe41e, 0x0598, 0xe42e, 0x28a7, 0xa102,
+ 0xb608, 0x3ca7, 0x28a6, 0xf12a, 0x28a5, 0xe000, 0x0578, 0xe092,
+ 0x28a5, 0xa002, 0x3ca5, 0xa122, 0xf028, 0x3ca5, 0x28a6, 0xa102,
+ 0x3ca6, 0x2901, 0xe049, 0x1aad, 0xe425, 0xe41e, 0x07bf, 0xe049,
+ 0xa2fa, 0xb7f2, 0xe42e, 0xe166, 0x0599, 0x2906, 0xe41e, 0x0618,
+ 0xa804, 0xf07a, 0x2906, 0x3ca9, 0xe41e, 0x0608, 0xe41e, 0x0598,
+ 0xe166, 0x0598, 0x2906, 0xe41e, 0x0618, 0xa804, 0xf07a, 0x2906,
+ 0x3ca9, 0xe41e, 0x0608, 0xe41e, 0x0598, 0xe41e, 0x0647, 0xe42e,
+ 0x28a9, 0xe424, 0x28a4, 0xe000, 0x0578, 0xe092, 0x28a9, 0x3d01,
+ 0x28a4, 0xa002, 0x3ca4, 0xa122, 0xf028, 0x3ca4, 0x28a6, 0xa002,
+ 0x3ca6, 0xe42e, 0xa200, 0x3c06, 0xe004, 0x0054, 0xe09c, 0x28ad,
+ 0xa102, 0xcc44, 0xe184, 0x05bd, 0x9e06, 0x5c06, 0xa802, 0xf048,
+ 0x2806, 0xe41e, 0x0610, 0x2a06, 0xa003, 0x3e06, 0xe42e, 0xe167,
+ 0x0400, 0xe004, 0x0054, 0xe09c, 0x28ad, 0xa102, 0xcc44, 0xa200,
+ 0x3c06, 0xe184, 0x05d2, 0x2b17, 0xaf05, 0xa803, 0x5a06, 0xe056,
+ 0x2a06, 0xa003, 0x3e06, 0x9f06, 0xe42e, 0x28aa, 0x3c06, 0x2806,
+ 0xe000, 0x0400, 0xe092, 0x2901, 0xf0da, 0x2806, 0xa002, 0x3c06,
+ 0x18ad, 0xf038, 0xa200, 0x3c06, 0x2806, 0x18aa, 0xf718, 0xa2fe,
+ 0xe42e, 0xa20e, 0x3d01, 0x2806, 0xa002, 0x3caa, 0x18ad, 0xf038,
+ 0xa200, 0x3caa, 0x2806, 0xe42e, 0xe161, 0x0400, 0x28ad, 0xa102,
+ 0xcc44, 0xe184, 0x05fe, 0x2911, 0xe016, 0xe428, 0xe190, 0xe42e,
+ 0xe424, 0xe000, 0x0400, 0xe092, 0x2901, 0xa80c, 0x3d01, 0xe42e,
+ 0xe424, 0xe000, 0x0400, 0xe092, 0x2901, 0xa80a, 0x3d01, 0xe42e,
+ 0xe424, 0xe000, 0x0400, 0xe092, 0x2901, 0xa806, 0x3d01, 0xe42e,
+ 0xe049, 0xa200, 0xe425, 0xe001, 0x0400, 0xe093, 0x2901, 0xe42e,
+ 0x28a3, 0x3ca8, 0xe41e, 0x05d5, 0xf094, 0x3ca2, 0x2a1a, 0xa105,
+ 0x28a2, 0xe41b, 0x0600, 0xa200, 0xe42e, 0xa2fe, 0xe42e, 0xe166,
+ 0x0598, 0x2916, 0xb608, 0x3ca1, 0x2916, 0xb608, 0x3ca0, 0xe42e,
+ 0x281a, 0xa104, 0xe42a, 0xe166, 0x0599, 0x290e, 0xe41e, 0x0600,
+ 0xe166, 0x0598, 0x2916, 0x3d0e, 0x28a2, 0x3d06, 0xe42e, 0xa2fa,
+ 0xe166, 0x0598, 0xc701, 0x3d16, 0xe42e, 0xa2fa, 0x3ca0, 0x3ca1,
+ 0x3ca8, 0xa202, 0x3ca7, 0xa200, 0x3ca5, 0x3ca4, 0x3ca6, 0x3ca9,
+ 0xe166, 0x0578, 0xc710, 0x3d16, 0xe41e, 0x0647, 0xa200, 0x3caa,
+ 0xe161, 0x0400, 0x2aad, 0xe42b, 0xa103, 0x3e01, 0x8601, 0x3d11,
+ 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0676, 0xa102, 0xe40a,
+ 0x06b2, 0xa102, 0xe40a, 0x067c, 0xe40e, 0x06b2, 0x24c0, 0x4cc1,
+ 0x04c2, 0x0cc3, 0x34c4, 0x3cc5, 0x28cc, 0xf13a, 0xe0c0, 0x0048,
+ 0x34cf, 0x3cd0, 0x24cf, 0x4cd0, 0xe0c1, 0x0049, 0x36c8, 0x3ec9,
+ 0x14c8, 0x1cc9, 0xe0c1, 0x0045, 0xaf05, 0xa803, 0xb611, 0x3ecc,
+ 0xe0c0, 0x0048, 0xe008, 0x01ff, 0x3cca, 0xe0c0, 0x0048, 0x34c6,
+ 0xe008, 0xfe00, 0x3cc7, 0xa200, 0xcc92, 0xcc8e, 0xe180, 0xe41e,
+ 0x06b9, 0xe41e, 0x0222, 0xd071, 0x202a, 0xe181, 0xa200, 0x3cce,
+ 0xe41e, 0x070b, 0xe41e, 0x102c, 0x28ca, 0xa102, 0xe412, 0x103f,
+ 0xa200, 0xceaa, 0xa202, 0x3cce, 0xa202, 0xb61a, 0xe16a, 0xe42e,
+ 0xe42e, 0xd030, 0x0000, 0xd031, 0x0000, 0xd032, 0x0000, 0xd034,
+ 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037,
+ 0x0000, 0xd038, 0x0000, 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c,
+ 0x0000, 0xd149, 0x0000, 0xe42e, 0xc896, 0xf05a, 0xe41e, 0x0702,
+ 0x3cdc, 0xf058, 0xd04b, 0x0001, 0xa200, 0x3cdc, 0x28d8, 0xcc6e,
+ 0xd04c, 0x0000, 0xe470, 0xa202, 0x3cdc, 0xe41e, 0x0702, 0xcc96,
+ 0xe42a, 0x28d8, 0xcc6e, 0xe42e, 0xc896, 0xe428, 0xd04b, 0x0001,
+ 0x28d8, 0xcc6e, 0xd04c, 0x0000, 0xe42e, 0xa200, 0x3ccd, 0x3cd8,
+ 0xe41e, 0x0702, 0x3cdc, 0xd04b, 0x0001, 0x28d8, 0xcc6e, 0xe190,
+ 0xe128, 0xe42e, 0xe41e, 0x10e9, 0xe004, 0x0080, 0x2acd, 0xb616,
+ 0x3cd8, 0xa200, 0xe42e, 0x28cc, 0xf1aa, 0xe41e, 0x024f, 0xe000,
+ 0x0440, 0xce50, 0xe005, 0x01b1, 0x28d9, 0xa806, 0xa108, 0xe012,
+ 0xa806, 0xae06, 0x3cfe, 0xe004, 0x01b1, 0x58fe, 0xce52, 0xe41e,
+ 0x0257, 0xd14e, 0x0000, 0xd144, 0x0000, 0xe42e, 0xd027, 0x0000,
+ 0xe41e, 0x0768, 0xd027, 0x0001, 0x28d9, 0xf25a, 0xca48, 0xa802,
+ 0xf7e8, 0x24c6, 0x4cc7, 0xce40, 0xd121, 0x0000, 0xd122, 0x0040,
+ 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa032, 0xce46, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xca48, 0xa802, 0xf7e8, 0x24c6, 0x4cc7, 0xe000,
+ 0x0200, 0x34c6, 0x3cc7, 0x14c4, 0x1cc5, 0xf054, 0x24c0, 0x4cc1,
+ 0x34c6, 0x3cc7, 0x28cc, 0xe418, 0x07d2, 0xe41e, 0x0815, 0xd14e,
+ 0x0000, 0xd144, 0x0000, 0xe42e, 0xe0c1, 0x0059, 0xa103, 0xa200,
+ 0xb636, 0xe000, 0x001c, 0xe0c1, 0x0045, 0xe052, 0xe01a, 0xe42e,
+ 0xa200, 0x3ccb, 0xe004, 0x0200, 0x3cd9, 0xe41e, 0x075c, 0x3ccc,
+ 0x24c6, 0x4cc7, 0xe0c1, 0x0049, 0x36cf, 0x3ed0, 0x26cf, 0x4ed0,
+ 0xe045, 0xf033, 0x06c2, 0x0ec3, 0xe003, 0x0200, 0x28cc, 0xb602,
+ 0x3ccc, 0xf173, 0xe001, 0x0200, 0x3ed9, 0x28cc, 0xf128, 0x28cb,
+ 0xf658, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf60a, 0xe0c0, 0x005d,
+ 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3ccb, 0xf56e,
+ 0x28d9, 0x2acc, 0xf039, 0xe004, 0x0200, 0x3cd9, 0xe42e, 0xc868,
+ 0xa80e, 0x3c04, 0x7404, 0xe42e, 0x28cc, 0xe42a, 0xe41e, 0x0815,
+ 0xe0c0, 0x0049, 0x34cf, 0x3cd0, 0x24cf, 0x4cd0, 0xe0c1, 0x0048,
+ 0x36cf, 0x3ed0, 0x26cf, 0x4ed0, 0xe045, 0xa200, 0xb626, 0xe003,
+ 0x0200, 0xb606, 0xe42e, 0xe0c0, 0x0045, 0xa808, 0xe42e, 0xe41e,
+ 0x07a4, 0xe42a, 0xe0c0, 0x0045, 0xaf04, 0xa802, 0xe42e, 0xe0c1,
+ 0x0045, 0xaf07, 0xa202, 0xa803, 0xe429, 0xa204, 0xa805, 0xe429,
+ 0xa208, 0xe42e, 0xe41e, 0x024f, 0x28d9, 0xe002, 0x0200, 0xe40a,
+ 0x0811, 0x28d9, 0xa806, 0xf1fa, 0xa108, 0xe012, 0xae06, 0x3cfe,
+ 0x28d9, 0xaf04, 0xae20, 0xe000, 0x01c0, 0xce50, 0xe190, 0xca52,
+ 0x5cfe, 0x58fe, 0x2ad9, 0xa807, 0xae07, 0x3efe, 0xe005, 0x01b1,
+ 0x5efe, 0xe056, 0x2ad9, 0xaf05, 0xae21, 0xe001, 0x0140, 0xce51,
+ 0xe190, 0xce52, 0xe004, 0x01fc, 0x18d9, 0xf022, 0xf13e, 0x28d9,
+ 0xa006, 0xaf04, 0xae20, 0xe000, 0x0440, 0xce50, 0x28d9, 0xa806,
+ 0xa108, 0xe012, 0xae06, 0xa83e, 0x3cfe, 0xe004, 0x01b1, 0x58fe,
+ 0xce52, 0xe40e, 0x0257, 0xe41e, 0x079f, 0xf1ae, 0xc872, 0xc001,
+ 0x343b, 0x3c3c, 0xc000, 0x26d7, 0x4ed6, 0xae07, 0xe045, 0xf053,
+ 0x26d7, 0x4ed6, 0xae07, 0xcc73, 0xe41e, 0x084c, 0xe049, 0xc001,
+ 0x243b, 0x4c3c, 0xc000, 0xaf06, 0xe046, 0xb608, 0xf02e, 0xcaaa,
+ 0x2ace, 0xb616, 0xe0c1, 0x0048, 0x36cf, 0x3ed0, 0x26cf, 0x4ed0,
+ 0xe042, 0xe049, 0x16c4, 0x1ec5, 0xf035, 0x14c2, 0x1cc3, 0xe0c2,
+ 0x0048, 0xe0c2, 0x0052, 0xa200, 0xceaa, 0xc001, 0x243b, 0x4c3c,
+ 0xc000, 0xe41e, 0x0851, 0xe42e, 0xc001, 0x2439, 0x4c3a, 0xc000,
+ 0xe42e, 0xc001, 0xaf06, 0x3439, 0x3c3a, 0xc000, 0xe42e, 0xe0c0,
+ 0x0045, 0xaf04, 0xa80e, 0xa104, 0xe428, 0xf06e, 0xe41e, 0x07a4,
+ 0xe418, 0x01db, 0xe42e, 0xe41e, 0x10c2, 0xcaa2, 0xe008, 0x00ff,
+ 0xe002, 0x00b1, 0xe428, 0xe41e, 0x07a4, 0xe418, 0x01db, 0xe42e,
+ 0xe0c0, 0x0059, 0xa102, 0xf34a, 0xa102, 0xe42a, 0xa102, 0xf05a,
+ 0xa102, 0xe40a, 0x08b5, 0xe42e, 0xe0c0, 0x0060, 0xaf08, 0x30e1,
+ 0xaf02, 0x30e2, 0xe0c0, 0x0060, 0xa81e, 0x3ce0, 0xe0c0, 0x0061,
+ 0xa83e, 0x3ce4, 0xe0c0, 0x0065, 0xaf04, 0xa80e, 0x3cba, 0xa200,
+ 0x3c56, 0x3c55, 0xa202, 0x3cb9, 0x2856, 0xf11a, 0xe0c0, 0x006c,
+ 0xe002, 0x0088, 0x3c5c, 0xe0c0, 0x006a, 0xce20, 0xd112, 0x000c,
+ 0xd111, 0x0536, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0xe0c0,
+ 0x0060, 0x34c0, 0x3cc1, 0xe0c0, 0x0061, 0xae14, 0x34c2, 0x3cc3,
+ 0xe0c0, 0x0062, 0xaf02, 0x3054, 0xe42e, 0xe41e, 0x0412, 0xe41e,
+ 0x0174, 0xca28, 0xf7f8, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0210,
+ 0xd112, 0x00c4, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060,
+ 0x3cad, 0xe0c0, 0x0061, 0x3cae, 0xe0c0, 0x006e, 0xe41e, 0x020a,
+ 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x091f, 0xa102, 0xe42a,
+ 0xa102, 0xf05a, 0xa102, 0xe40a, 0x095a, 0xe42e, 0x2444, 0x4c45,
+ 0xae08, 0xe0c2, 0x006f, 0x20b4, 0x4cb5, 0xa002, 0x34b4, 0x3cb5,
+ 0xe0c2, 0x0070, 0x28a3, 0xe0c2, 0x0071, 0x28b8, 0xe0c2, 0x0072,
+ 0xe41e, 0x051c, 0xe0c2, 0x0073, 0xa200, 0xe0c2, 0x0074, 0x28b6,
+ 0x2a17, 0xae29, 0xe056, 0xe0c2, 0x0076, 0x28a2, 0xe0c2, 0x0077,
+ 0xe161, 0x0550, 0x2111, 0x4d11, 0xe0c2, 0x0078, 0x2111, 0x4d11,
+ 0xe0c2, 0x0079, 0x20b0, 0x4cb1, 0xe0c2, 0x007c, 0xe167, 0x0554,
+ 0x2117, 0x4d17, 0xe0c2, 0x007e, 0x2117, 0x4d17, 0xe0c2, 0x007d,
+ 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xe42e, 0x24b3,
+ 0x4cb2, 0xe0c2, 0x006d, 0x28b6, 0xe0c2, 0x0070, 0x2444, 0x4c45,
+ 0xae08, 0xe0c2, 0x0071, 0x20b0, 0x4cb1, 0xe0c2, 0x0072, 0xa208,
+ 0xe0c2, 0x0073, 0xa202, 0xe0c2, 0x0074, 0xa200, 0xe0c2, 0x0075,
+ 0xe161, 0x0550, 0x2111, 0x4d11, 0xe0c2, 0x0076, 0x2111, 0x4d11,
+ 0xe0c2, 0x0077, 0x28b6, 0xe016, 0x58f0, 0xe0c2, 0x0078, 0xe161,
+ 0x0554, 0x2111, 0x4d11, 0xe0c2, 0x007a, 0x2111, 0x4d11, 0xe0c2,
+ 0x0079, 0x2813, 0xe016, 0xae10, 0x4c15, 0xae10, 0x4c14, 0xe0c2,
+ 0x007b, 0xe42e, 0xe42e, 0xe161, 0x05a8, 0x2810, 0x3d11, 0x2811,
+ 0x3d11, 0x2813, 0x3d11, 0xe42e, 0xe161, 0x05a8, 0x2810, 0x1911,
+ 0xf0a8, 0x2811, 0x1911, 0xf078, 0x2813, 0x1911, 0xf048, 0xa200,
+ 0x3c17, 0xe42e, 0xa202, 0x3c17, 0xe42e, 0xa200, 0x3c28, 0xe16a,
+ 0xa200, 0xcea6, 0xa23e, 0x3cf0, 0xe41e, 0x07a4, 0xe408, 0x09cf,
+ 0xe41e, 0x1076, 0x28d3, 0xe002, 0x00af, 0xe406, 0x09c3, 0x28d3,
+ 0xe002, 0x00b0, 0xf28a, 0x28d3, 0xe002, 0x00b1, 0xf35a, 0x28d3,
+ 0xe002, 0x00b2, 0xf31a, 0x28d3, 0xe002, 0x00b3, 0xf27a, 0x28d3,
+ 0xe002, 0x00b4, 0xf29a, 0x28d3, 0xe002, 0x00b5, 0xf2ba, 0x28d3,
+ 0xe002, 0x00b6, 0xe40a, 0x09bd, 0x28d3, 0xe002, 0x00b7, 0xe40a,
+ 0x09c3, 0x28d3, 0xe002, 0x00b8, 0xf17a, 0x28d3, 0xe002, 0x00b9,
+ 0xf132, 0xf12e, 0xe41e, 0x1122, 0xe41e, 0x104a, 0xe41e, 0x09d5,
+ 0xf1bd, 0xa202, 0x3c28, 0xe40e, 0x0977, 0x2828, 0xe428, 0xe41e,
+ 0x104a, 0xe40e, 0x0977, 0x2828, 0xe428, 0xe41e, 0x104a, 0xe40e,
+ 0x0977, 0xe41e, 0x104a, 0xe41e, 0x09fb, 0xe40e, 0x0977, 0x2828,
+ 0xe428, 0xe41e, 0x0857, 0xe16b, 0xe42e, 0xba4e, 0x3c14, 0xba4e,
+ 0x3c15, 0xba40, 0x3c13, 0xba5a, 0x3c10, 0xba5a, 0x3c11, 0x2813,
+ 0xe016, 0x3c33, 0xe41e, 0x0ae4, 0xe41e, 0x041f, 0xba42, 0x3cb7,
+ 0xba44, 0xa200, 0x3cb0, 0xba46, 0x3cb1, 0xba46, 0xe41e, 0x042e,
+ 0xba62, 0xba41, 0xba57, 0xae25, 0xe056, 0x34b3, 0x3cb2, 0xba40,
+ 0x3c16, 0xba6a, 0xe42e, 0xba46, 0xa104, 0xf08a, 0xa104, 0xf0fa,
+ 0xa106, 0xf03a, 0xa108, 0xf10a, 0xe42e, 0xba46, 0xba40, 0xf02a,
+ 0xba6e, 0xba5a, 0xba40, 0xba5a, 0xba42, 0xf19e, 0xba62, 0xba68,
+ 0xba6c, 0xba6a, 0xf14e, 0xba7e, 0xba6c, 0xba6c, 0xba6c, 0xba60,
+ 0xba60, 0xba60, 0xba60, 0xba60, 0xba60, 0xba6c, 0xba6c, 0xba6c,
+ 0xba6c, 0xba6c, 0xba7e, 0xe190, 0xba40, 0xba7e, 0xa200, 0xe42e,
+ 0xa200, 0x3c28, 0xe16a, 0xa200, 0xcea6, 0xe41e, 0x07a4, 0xe408,
+ 0x0aa5, 0xe41e, 0x1076, 0x28d3, 0xe002, 0x00af, 0xe406, 0x0a9e,
+ 0x28d3, 0xe002, 0x00b0, 0xf2ca, 0x28d3, 0xe002, 0x00b1, 0xf30a,
+ 0x28d3, 0xe002, 0x00b2, 0xf30a, 0x28d3, 0xe002, 0x00b3, 0xf33a,
+ 0x28d3, 0xe002, 0x00b4, 0xf18a, 0x28d3, 0xe002, 0x00b5, 0xf38a,
+ 0x28d3, 0xe002, 0x00b6, 0xe40a, 0x0a8d, 0x28d3, 0xe002, 0x00b7,
+ 0xe40a, 0x0a9a, 0x28d3, 0xe002, 0x00b8, 0xf06a, 0x28d3, 0xe002,
+ 0x00b9, 0xf022, 0xe190, 0xe41e, 0x104a, 0xe40e, 0x0a2a, 0xe41e,
+ 0x1122, 0xe41e, 0x104a, 0xe41e, 0x09d5, 0xe40e, 0x0a2a, 0xe41e,
+ 0x104a, 0xe40e, 0x0a2a, 0xe41e, 0x104a, 0x2856, 0xe418, 0x0ba4,
+ 0xe40e, 0x0a2a, 0xe41e, 0x0c2c, 0xe41e, 0x104a, 0xe41e, 0x0ab4,
+ 0xa202, 0xb61a, 0x3c28, 0xe41d, 0x0c33, 0xe40e, 0x0a2a, 0xe41e,
+ 0x104a, 0xe41e, 0x09fb, 0xe40e, 0x0a2a, 0xe41e, 0x0c2c, 0xe41e,
+ 0x104a, 0xe41e, 0x0aff, 0xa202, 0xb61a, 0x3c28, 0xe41d, 0x0c33,
+ 0xe40e, 0x0a2a, 0xe41e, 0x104a, 0xe40e, 0x0a2a, 0x2828, 0xe408,
+ 0x0aa7, 0xe41e, 0x104a, 0xe40e, 0x0a2a, 0xe41e, 0x01db, 0x281a,
+ 0x3c1b, 0x281e, 0xe016, 0x3c33, 0xe41e, 0x0ae4, 0xe41e, 0x041f,
+ 0x2828, 0xe428, 0xe16b, 0xe42e, 0xba5e, 0xba40, 0xa102, 0xf028,
+ 0xba6e, 0xba40, 0xba4e, 0x3c1c, 0x2816, 0xa102, 0xf038, 0xcfa0,
+ 0xcba2, 0xba40, 0xe049, 0x3c1d, 0xa103, 0xf02b, 0xba40, 0x3c1e,
+ 0xba40, 0x3c1f, 0xba40, 0x3c20, 0xba40, 0x3c21, 0xba4a, 0x3c22,
+ 0x281d, 0x4c1e, 0xf038, 0xba40, 0x3c23, 0xba46, 0xba40, 0x3c27,
+ 0xf098, 0xba40, 0xf07a, 0xcfa0, 0xcba4, 0x3c24, 0xcfa0, 0xcba4,
+ 0x3c25, 0xa200, 0x3c1a, 0xe42e, 0x2810, 0xa01e, 0xaf08, 0x3c44,
+ 0x2811, 0xa01e, 0xaf08, 0x3c45, 0x2833, 0xf06a, 0x2845, 0xa002,
+ 0xaf02, 0xae02, 0x3c45, 0x8444, 0x8245, 0xe018, 0x3c47, 0x2c45,
+ 0x3c48, 0x2833, 0xe42a, 0x2c45, 0xaf02, 0x3c48, 0xe42e, 0xba5e,
+ 0xba42, 0x3c39, 0xba4e, 0x3c1c, 0x2816, 0xf03a, 0xcfa0, 0xcba2,
+ 0xba40, 0x3c1d, 0xf068, 0xba40, 0x3c1e, 0xf048, 0xba40, 0xf02e,
+ 0x3c1e, 0xba40, 0x3c1f, 0xba40, 0x3c20, 0xba40, 0x3c21, 0xba4a,
+ 0x3c22, 0x2839, 0xa104, 0x2a1e, 0xa103, 0xe056, 0xf03a, 0xba40,
+ 0x3c26, 0xba46, 0xba40, 0x3c23, 0xba40, 0x3c27, 0xf098, 0xba40,
+ 0xf07a, 0xcfa0, 0xcba4, 0x3c24, 0xcfa0, 0xcba4, 0x3c25, 0xa202,
+ 0x2a39, 0xa105, 0xb656, 0x3c1a, 0xe42e, 0xe41e, 0x07a4, 0xe408,
+ 0x0b60, 0xe41e, 0x1076, 0x28d3, 0xe002, 0x00b0, 0xe40a, 0x0b62,
+ 0x28d3, 0xe002, 0x00b2, 0xe40a, 0x0b62, 0x28d3, 0xe002, 0x00b5,
+ 0xe40a, 0x0b62, 0x28d3, 0xe002, 0x00b3, 0xe40a, 0x0b62, 0x28d3,
+ 0xe002, 0x00b6, 0xe40a, 0x0b62, 0x28d3, 0xe002, 0x00af, 0xe406,
+ 0x0b64, 0x28d3, 0xe002, 0x00b1, 0xe40a, 0x0b60, 0xe40e, 0x0b62,
+ 0xe41e, 0x01db, 0xe40e, 0x0b6e, 0xe41e, 0x104a, 0x8444, 0x82d3,
+ 0xe018, 0x3c46, 0xe41e, 0x0b70, 0xa200, 0xe42e, 0xa2fe, 0xe42e,
+ 0x2810, 0xe002, 0x0af0, 0xf024, 0xba44, 0x2821, 0xf058, 0xba40,
+ 0x3c30, 0xba4a, 0x3c31, 0x281a, 0xf27a, 0xba40, 0x3c37, 0xf24a,
+ 0x281e, 0xf03a, 0xa204, 0xf07e, 0x2834, 0xf04a, 0xa202, 0x2a1b,
+ 0xf02b, 0xa208, 0x3c01, 0xe161, 0x0200, 0xe162, 0x0204, 0xe163,
+ 0x0208, 0xe164, 0x020c, 0xa102, 0xcc44, 0xe184, 0x0ba0, 0xba4e,
+ 0x3d11, 0xba4e, 0x3d12, 0xba40, 0xba4e, 0x3d13, 0xba4e, 0x3d14,
+ 0xba40, 0xba40, 0x3c36, 0xe42e, 0x2a56, 0x285a, 0xa120, 0xb615,
+ 0x3e56, 0xe42b, 0xa200, 0x3c58, 0xe162, 0x0520, 0xba4e, 0x2a58,
+ 0xa803, 0xf049, 0xae10, 0x3c57, 0xf03e, 0x4c57, 0x3d12, 0x2a58,
+ 0xa003, 0x3e58, 0xa80f, 0xe41b, 0x0c10, 0x2856, 0xf09a, 0xc894,
+ 0xf6e8, 0x2858, 0x2858, 0xa802, 0xf03a, 0x2857, 0x3d12, 0xa211,
+ 0x2858, 0xa80e, 0xf0ba, 0xe045, 0xaf03, 0xf06b, 0xa103, 0x3e01,
+ 0xa201, 0x8601, 0x3f12, 0xe41e, 0x0c10, 0xe162, 0x0520, 0x2859,
+ 0x3d12, 0x2858, 0x3d12, 0xa200, 0x3d12, 0x3d12, 0xe0c1, 0x006b,
+ 0x285a, 0xa002, 0xae06, 0xe041, 0xaf06, 0x3c5a, 0xce21, 0xd111,
+ 0x0520, 0xd112, 0x0004, 0xd113, 0x0000, 0xca28, 0xf7f8, 0xe42e,
+ 0xa200, 0x3c5d, 0xe0c0, 0x005c, 0xe0c1, 0x0065, 0xaf12, 0xa802,
+ 0xaf15, 0xa803, 0xe016, 0xe056, 0xf04a, 0xa200, 0x3c56, 0xe42e,
+ 0x285e, 0xf05a, 0xe0c0, 0x005d, 0xe42a, 0xf7be, 0xe0c0, 0x005d,
+ 0xe00a, 0x0200, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c5e, 0xf71e,
+ 0xd112, 0x0004, 0xe0c0, 0x006b, 0xe000, 0x0088, 0x085d, 0xce20,
+ 0xd111, 0x0520, 0xd113, 0x0000, 0xca28, 0xf7f8, 0xe162, 0x0520,
+ 0x285b, 0x2a5d, 0xa010, 0xa011, 0x3c5b, 0x3e5d, 0x1a5c, 0xe41b,
+ 0x0bf0, 0xa200, 0x3c5e, 0xe42e, 0x2860, 0xe428, 0xe41e, 0x0542,
+ 0xa202, 0x3c60, 0xe42e, 0xa200, 0x3c60, 0xe42e, 0xe16a, 0xa200,
+ 0x3c42, 0x3c43, 0x2841, 0x2a34, 0xb616, 0x3c41, 0x2834, 0xf04a,
+ 0x281a, 0xb634, 0x3c1a, 0xe41e, 0x0d54, 0x281c, 0xcfc8, 0xe16a,
+ 0xe41e, 0x0b35, 0xf084, 0xe41e, 0x0dfa, 0xe41e, 0x0c5e, 0xe41e,
+ 0x0c9a, 0xf76a, 0x8444, 0x8248, 0xe018, 0x3c46, 0x1841, 0xe410,
+ 0x0c7a, 0xe16a, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xe16a, 0x2c46,
+ 0x1c41, 0xe410, 0x0c7a, 0xe41e, 0x0cba, 0xe41e, 0x0cc7, 0xe42d,
+ 0xe41e, 0x0ec1, 0xe41e, 0x0ca9, 0xe41e, 0x0c9a, 0xf048, 0xe41e,
+ 0x0c9f, 0xf72a, 0x24d7, 0x4cd6, 0xae06, 0xc873, 0xe046, 0xe422,
+ 0xe16b, 0xe42e, 0xe41e, 0x0cba, 0xe41e, 0x0c89, 0xe41e, 0x0ec1,
+ 0xe41e, 0x0ca9, 0xe41e, 0x0c9a, 0xe428, 0x2c46, 0x1c41, 0xe42a,
+ 0xf72e, 0xa2fe, 0x3c40, 0xd1ce, 0x0000, 0xd1c3, 0x0000, 0xcbc0,
+ 0xf7f8, 0xd1c0, 0x0020, 0xd1e0, 0x0010, 0xcbc0, 0xf7f8, 0xd1e0,
+ 0x000a, 0xe42e, 0x2c43, 0x1c48, 0xe01a, 0xe016, 0xe42e, 0xcb8a,
+ 0xb60c, 0x3c40, 0xe016, 0xe42a, 0xc88e, 0xc895, 0xe017, 0xe042,
+ 0xe42e, 0xd1c8, 0x0001, 0x2841, 0xa002, 0x3c41, 0x2842, 0xa002,
+ 0x3c42, 0x1844, 0xe428, 0xd1c6, 0x0004, 0x3c42, 0x2843, 0xa002,
+ 0x3c43, 0xe42e, 0x2843, 0xae0e, 0x4c42, 0xcf94, 0x2841, 0xcf98,
+ 0xd1c3, 0x0000, 0xcbc0, 0xf7f8, 0xd1e0, 0x0005, 0xe42e, 0xcbc0,
+ 0xf7f8, 0xe180, 0xe180, 0x28dc, 0xe41a, 0x06e3, 0xe181, 0xd1c0,
+ 0x000f, 0xe005, 0x8000, 0xa103, 0xf155, 0xcb9c, 0xf138, 0xcb80,
+ 0xf7b8, 0xd1e0, 0x000a, 0xd1c0, 0x0010, 0xcb8a, 0xb60c, 0x3c40,
+ 0xf056, 0x2c47, 0x1841, 0x1840, 0xf054, 0xcbc0, 0xf7f8, 0xe16a,
+ 0xe42e, 0xd1c0, 0x0000, 0xd1ce, 0x0000, 0xe16b, 0xe42e, 0x28ba,
+ 0xf16a, 0xa102, 0xf06a, 0xa102, 0xf0ba, 0xa104, 0xf05a, 0xf0ae,
+ 0x281b, 0xf098, 0xf0ce, 0x281b, 0xa102, 0xf096, 0xf03e, 0x281b,
+ 0xf06a, 0xf03e, 0xa2fe, 0xe42e, 0xa202, 0xe42e, 0xa200, 0xe42e,
+ 0xa200, 0xcfc2, 0x283b, 0xcfc8, 0xaf12, 0xe40a, 0x0d12, 0xcfc2,
+ 0x283b, 0xcfc8, 0xa2fe, 0xcfca, 0xa200, 0xcfc2, 0x283a, 0xcfc8,
+ 0xaf12, 0xe40a, 0x0d1e, 0xcfc2, 0x283a, 0xcfc8, 0xa2fe, 0xcfca,
+ 0xa200, 0xcfc2, 0x283c, 0xcfc8, 0xaf12, 0xe40a, 0x0d2a, 0xcfc2,
+ 0x283c, 0xcfc8, 0xa2fe, 0xcfca, 0xe42e, 0x281a, 0xa104, 0xe42a,
+ 0x283a, 0x3c3b, 0x283c, 0x3c3a, 0x281c, 0x2a33, 0xae13, 0xe056,
+ 0x3c3c, 0xe42e, 0xa20a, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x013d,
+ 0xa200, 0xe0c2, 0x0128, 0x2ae1, 0x4ee2, 0xb692, 0xae08, 0xa91c,
+ 0xe0c2, 0x017c, 0xe004, 0x004c, 0xe0c2, 0x017d, 0xa200, 0xe41e,
+ 0x0f52, 0xe0c2, 0x0102, 0xe42e, 0xe0c0, 0x0050, 0xe049, 0xe008,
+ 0x007f, 0x3c0c, 0xaf11, 0xe009, 0x007f, 0x3e0d, 0x460c, 0x3e0c,
+ 0xa200, 0x2a0c, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2a0c, 0xa805,
+ 0xf03b, 0xe00a, 0x0009, 0x2a0c, 0xa809, 0xf03b, 0xe00a, 0x0020,
+ 0x2a0c, 0xa811, 0xf03b, 0xe00a, 0x0040, 0xe0c2, 0x040c, 0xe0c1,
+ 0x0046, 0xe004, 0x0010, 0xae10, 0xe042, 0x2a0d, 0xa805, 0xf05b,
+ 0xe167, 0x02d6, 0x2117, 0x4d17, 0xe0c2, 0x0103, 0x2844, 0xae20,
+ 0x4c45, 0xae08, 0xe0c2, 0x0101, 0xd1c6, 0x0001, 0x2845, 0xae0e,
+ 0x4c44, 0xcf96, 0x8444, 0x8245, 0xe018, 0xcf9a, 0x2824, 0xa87e,
+ 0xae0c, 0x2a25, 0xa87f, 0xe056, 0xcf8e, 0xa200, 0xcfd6, 0x2826,
+ 0xae02, 0x4c1e, 0xae02, 0x4c34, 0xcfc2, 0x2834, 0xf098, 0x2821,
+ 0xae0c, 0x4c22, 0xae02, 0x4c23, 0xae04, 0x4c1a, 0xcf82, 0x281a,
+ 0xcf88, 0xa200, 0xe41e, 0x0f52, 0xe0c2, 0x0102, 0x2833, 0xa908,
+ 0xae04, 0x4c1a, 0xae04, 0x4c33, 0xae02, 0x4c34, 0xe0c2, 0x0104,
+ 0x2a33, 0xe0c0, 0x005b, 0xae08, 0x4c1a, 0xae04, 0xe056, 0xae02,
+ 0x4c34, 0xe0c2, 0x0204, 0x2834, 0xe41a, 0x0e6f, 0xe41e, 0x0e32,
+ 0xe161, 0x02d0, 0x2111, 0x4d01, 0xcfc6, 0xe0c1, 0x0046, 0xe004,
+ 0x0000, 0xae10, 0xe042, 0x2a0d, 0xa803, 0xf05b, 0xe167, 0x02d4,
+ 0x2117, 0x4d17, 0xcfc4, 0xe41e, 0x0274, 0xa202, 0xe0c2, 0x0106,
+ 0xe42e, 0xa20a, 0xe0c2, 0x0100, 0xe004, 0x004e, 0xe0c2, 0x017c,
+ 0xe004, 0x004c, 0xe0c2, 0x017d, 0xa200, 0xe41e, 0x0f52, 0xe0c2,
+ 0x0102, 0xe42e, 0xa200, 0x3cb8, 0xa2fe, 0x3c40, 0xcf8a, 0x2830,
+ 0xae0c, 0x4c31, 0xae02, 0x4c37, 0xae02, 0x4c36, 0xcf84, 0xd1c6,
+ 0x0002, 0xe161, 0x0200, 0xe162, 0x0204, 0xe163, 0x0208, 0xe164,
+ 0x020c, 0x2911, 0xae10, 0x4d11, 0xae10, 0x4d11, 0xae10, 0x4d01,
+ 0xcfce, 0x2912, 0xae10, 0x4d12, 0xae10, 0x4d12, 0xae10, 0x4d02,
+ 0xcfd0, 0x2913, 0xae10, 0x4d13, 0xae10, 0x4d13, 0xae10, 0x4d03,
+ 0xcfd2, 0x2914, 0xae10, 0x4d14, 0xae10, 0x4d14, 0xae10, 0x4d04,
+ 0xcfd4, 0xe42e, 0x2010, 0x4c11, 0xe0c2, 0x0205, 0xa200, 0xe0c2,
+ 0x0215, 0xe41e, 0x0f52, 0xa203, 0xae11, 0xe056, 0xe0c2, 0x0213,
+ 0xa200, 0xe0c2, 0x0215, 0xa200, 0xe0c2, 0x0208, 0xa202, 0xe0c2,
+ 0x0210, 0xe0c1, 0x0046, 0xe004, 0x0040, 0xae10, 0xe042, 0x2a0d,
+ 0xa809, 0xf05b, 0xe167, 0x02d8, 0x2117, 0x4d17, 0xe0c2, 0x0211,
+ 0xe0c1, 0x0046, 0xe004, 0x0040, 0xe000, 0x0040, 0xae10, 0xe042,
+ 0x2a0d, 0xa811, 0xf05b, 0xe167, 0x02da, 0x2117, 0x4d17, 0xe0c2,
+ 0x0212, 0x28a2, 0xe0c2, 0x0214, 0xe41e, 0x0fee, 0xe42e, 0xa202,
+ 0xe0c2, 0x0302, 0xa20e, 0xe0c2, 0x0312, 0x28a0, 0xf052, 0x28a1,
+ 0xf032, 0x28a2, 0xb608, 0xe0c2, 0x0380, 0x28a1, 0xf032, 0x28a2,
+ 0xb608, 0xe0c2, 0x0383, 0x28a2, 0xb608, 0xe0c2, 0x0386, 0xe0c0,
+ 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414, 0xe41a, 0x0e93, 0xa200,
+ 0xe0c2, 0x0302, 0xe42e, 0xe167, 0x01a0, 0x2117, 0x4d17, 0xe0c2,
+ 0x0152, 0x2917, 0xe008, 0x00ff, 0xae20, 0x4d07, 0xe0c2, 0x0153,
+ 0xe0c0, 0x0101, 0xe0c2, 0x015d, 0x28a0, 0xb608, 0x2aa1, 0xb60b,
+ 0xae11, 0xe055, 0xae21, 0xe167, 0x01a2, 0x2907, 0xaf10, 0xe008,
+ 0x001f, 0xe056, 0xe0c2, 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0,
+ 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8,
+ 0xe42e, 0xcba6, 0xe0c2, 0x0114, 0xcba8, 0xe0c2, 0x0115, 0xcbaa,
+ 0xe0c2, 0x012a, 0xcbac, 0xe0c2, 0x0117, 0xcbae, 0xe0c2, 0x0120,
+ 0xcbb0, 0xe0c2, 0x0121, 0xcbb2, 0xe0c2, 0x0123, 0xcbc0, 0xf7f8,
+ 0xe0c0, 0x0111, 0xf7e8, 0xf08c, 0xe0c0, 0x0124, 0xe0c2, 0x0124,
+ 0xa200, 0xe0c2, 0x0320, 0x2827, 0xe418, 0x0eee, 0xa202, 0xe0c2,
+ 0x0110, 0x28e1, 0x4ce2, 0xe418, 0x1163, 0xe42e, 0xa200, 0xe0c2,
+ 0x0224, 0xe0c2, 0x0225, 0xe42e, 0xe0c0, 0x0065, 0xaf0a, 0xa812,
+ 0xe40a, 0x0f25, 0x2855, 0xf21a, 0xe167, 0x0400, 0xe166, 0x0528,
+ 0xd022, 0x0007, 0xe184, 0x0f0b, 0x2917, 0xae08, 0x4d17, 0xae08,
+ 0x4d17, 0xae08, 0x4d17, 0x3d16, 0xe190, 0xca28, 0xf7f8, 0xe167,
+ 0x0538, 0x2117, 0x4d17, 0xce20, 0xd111, 0x0528, 0xd112, 0x0008,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe162, 0x0536, 0xa200, 0x2a55,
+ 0xb632, 0xae10, 0x3d12, 0xa220, 0x3d12, 0xe0c0, 0x0065, 0xaf0a,
+ 0xa802, 0xf12a, 0xe162, 0x0520, 0x285a, 0x3d12, 0x285b, 0x3d12,
+ 0xe0c0, 0x006b, 0xce20, 0xd111, 0x0520, 0xd112, 0x0004, 0xd113,
+ 0x0000, 0xca28, 0xf7f8, 0xe0c0, 0x0065, 0xaf0c, 0xa80e, 0xf0ca,
+ 0xe0c0, 0x006a, 0xce20, 0xd112, 0x000c, 0xd111, 0x0536, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xa200, 0x3c5b, 0x3c5a, 0x3c56, 0x3c5d,
+ 0x3c5e, 0xe42e, 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe42e, 0xa200,
+ 0xe41e, 0x0f52, 0xe42e, 0xe0c1, 0x0044, 0xaf0d, 0xae03, 0xe056,
+ 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xe42e,
+ 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105, 0xf039, 0xa213, 0xe42e,
+ 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1, 0x0420, 0xa803,
+ 0xf7db, 0xe160, 0x0003, 0xe166, 0x0210, 0xe167, 0x0500, 0x28ad,
+ 0xf166, 0xa102, 0xcc44, 0xe184, 0x0f95, 0xa200, 0xe41e, 0x0f52,
+ 0xaf04, 0xe41e, 0x0f5b, 0xae20, 0x2eae, 0xe056, 0x9f17, 0x2044,
+ 0x4c45, 0xae08, 0x9f17, 0xe41e, 0x0f9b, 0xe190, 0xe190, 0xa201,
+ 0xe0c3, 0x040d, 0xe42e, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16,
+ 0x9f17, 0x2116, 0x4d16, 0x9f17, 0xe42e, 0xe0c0, 0x0044, 0xaf20,
+ 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa860, 0xe42a, 0xe0c0, 0x0061,
+ 0xa83e, 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000,
+ 0x0500, 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e,
+ 0x0f57, 0xa80e, 0xaf04, 0xe41e, 0x0f5b, 0xe41e, 0x0f63, 0xe40b,
+ 0x0fce, 0xa81e, 0xe41e, 0x0f68, 0xae09, 0xe056, 0xae20, 0xe0c1,
+ 0x006e, 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0, 0x0060, 0xa822,
+ 0xa122, 0xf04a, 0x2044, 0x4c45, 0xf03e, 0x2045, 0x4c44, 0xae08,
+ 0x9f17, 0xe0c0, 0x0062, 0x9f17, 0xe0c0, 0x0063, 0x9f17, 0xe0c0,
+ 0x0064, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x3c01, 0xa202,
+ 0xe0c2, 0x040d, 0xe0c0, 0x0420, 0xa802, 0xf7da, 0x8401, 0xc785,
+ 0xe018, 0xe000, 0x0501, 0xe09e, 0x2044, 0x4c45, 0xae08, 0x9f07,
+ 0xa200, 0xe0c2, 0x040d, 0xe42e, 0x3c01, 0xa202, 0xe0c2, 0x040d,
+ 0xe0c0, 0x0420, 0xa802, 0xf7da, 0x8401, 0xc785, 0xe018, 0xe000,
+ 0x0501, 0xe09e, 0x2044, 0x4c45, 0xae08, 0x9f07, 0xa200, 0xe0c2,
+ 0x040d, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0020, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x0210, 0xd112, 0x00c0, 0x88ec, 0x0113,
+ 0xca29, 0xf7f9, 0xe190, 0xe42e, 0xd148, 0x0040, 0xd144, 0x0000,
+ 0xd145, 0x0000, 0xd168, 0x0000, 0xd14b, 0x0200, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xd14c, 0x000c, 0xca9a, 0xf7f8, 0xe42e, 0xcc44,
+ 0xe184, 0x1048, 0xca9c, 0xe418, 0x070b, 0xcaa0, 0xca9b, 0xf7f9,
+ 0xe190, 0xe42e, 0xa200, 0x3cd7, 0x3cd6, 0x3cd4, 0xe41e, 0x07a4,
+ 0xf178, 0xe41e, 0x10c2, 0xe41e, 0x07a4, 0xf128, 0xcaa3, 0xe009,
+ 0x00ff, 0x3edb, 0xa204, 0xe41e, 0x103f, 0xcaa2, 0xaf10, 0xa102,
+ 0xf71a, 0xa200, 0xe41e, 0x103f, 0xe41e, 0x07a4, 0xf06a, 0xe004,
+ 0x00b1, 0x3cd3, 0xa200, 0xe42e, 0x28db, 0xe008, 0x00ff, 0x3cd3,
+ 0xe41e, 0x06b9, 0xe41e, 0x06f5, 0xa202, 0xe42e, 0xa200, 0x3cd7,
+ 0x3cd6, 0x3cd4, 0xe41e, 0x07a4, 0xf178, 0xe41e, 0x10c2, 0xe41e,
+ 0x07a4, 0xf128, 0xcaa2, 0xe008, 0x00ff, 0x3cdb, 0xf0a8, 0xe41e,
+ 0x109b, 0xaf20, 0xa102, 0xf058, 0xa204, 0xe41e, 0x103f, 0xf6ee,
+ 0xe41e, 0x07a4, 0xf04a, 0xe004, 0x00b1, 0x3cdb, 0x28db, 0xe008,
+ 0x00ff, 0x3cd3, 0xe42e, 0xe162, 0x05a0, 0xca80, 0x3512, 0x3d12,
+ 0xca82, 0x3512, 0x3d12, 0xca84, 0x3512, 0x3d12, 0xca86, 0x3512,
+ 0x3d12, 0xca8b, 0xa208, 0xca8b, 0xa003, 0xaf03, 0xe046, 0xe000,
+ 0x05a2, 0xe094, 0xca8a, 0xa802, 0xf048, 0x2512, 0x4d12, 0xe42e,
+ 0x2512, 0x4d12, 0xae10, 0x2712, 0x4f12, 0xaf31, 0xe009, 0x00ff,
+ 0xe056, 0xe42e, 0xd153, 0x0000, 0xd158, 0x0100, 0xe004, 0x00ff,
+ 0xe014, 0xceb8, 0xd15d, 0x0000, 0xd15e, 0x0000, 0xd15f, 0x0000,
+ 0xe004, 0x0019, 0xae18, 0xe00a, 0x0620, 0xcec0, 0xd157, 0x0000,
+ 0xd14a, 0x0000, 0xd14c, 0x0003, 0xca9c, 0xe418, 0x070b, 0xca9a,
+ 0xf7c8, 0xcaae, 0xa802, 0xf73a, 0xca9c, 0xe418, 0x070b, 0xa200,
+ 0xe42e, 0x28d4, 0xe428, 0xe004, 0x0080, 0x2acd, 0xb616, 0xce92,
+ 0xd158, 0x0000, 0xe004, 0x01ff, 0xe014, 0xceb8, 0xd15d, 0x0000,
+ 0xd15e, 0x0000, 0xd15f, 0x0000, 0xe004, 0x0019, 0xae18, 0xe00a,
+ 0x0632, 0xcec0, 0xd161, 0x0002, 0xd14a, 0x0000, 0xd14c, 0x0003,
+ 0xca9c, 0xe418, 0x070b, 0xca9a, 0xf7c8, 0xca9c, 0xf7a8, 0xca94,
+ 0x3cd5, 0xca9e, 0x3cd4, 0x28d5, 0x00d7, 0x0cd6, 0x34d7, 0x3cd6,
+ 0xcc90, 0xcc8c, 0x28d4, 0xcc92, 0xcc8e, 0xe428, 0x28cd, 0xe016,
+ 0x3ccd, 0xe42e, 0xe41e, 0x0815, 0xe0c0, 0x0048, 0x34de, 0x3cdf,
+ 0xe42e, 0xa200, 0xceaa, 0x24de, 0x4cdf, 0xe0c2, 0x0048, 0xe42e,
+ 0xa2fe, 0x3ce3, 0xa200, 0x3ce1, 0xe42e, 0x28a8, 0x3ce3, 0x28e3,
+ 0xf032, 0xa200, 0x3ce1, 0xa200, 0x3ce8, 0x3ce9, 0x2844, 0x3ce6,
+ 0x2845, 0x3ce7, 0x28e1, 0xe42a, 0x28e3, 0xe424, 0x28e3, 0xe0c2,
+ 0x0143, 0x28e4, 0xe0c2, 0x0144, 0xa200, 0xe0c2, 0x017f, 0xe0c2,
+ 0x0149, 0xe41e, 0x0f52, 0xe0c2, 0x017f, 0x28e6, 0xa102, 0xae20,
+ 0x4ce7, 0xa102, 0xe0c2, 0x0142, 0xa200, 0xae20, 0x2ae0, 0xe042,
+ 0xe0c2, 0x014e, 0xe42e, 0x28e3, 0x2ae9, 0x1ae7, 0xe423, 0x28e8,
+ 0xae0e, 0x4ce9, 0xa203, 0xb615, 0x3eea, 0x2aea, 0xae03, 0xa903,
+ 0xae1d, 0xe056, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202,
+ 0xe0c2, 0x014a, 0x2ae8, 0xa003, 0x3ee8, 0x1ae6, 0xf065, 0x2ae9,
+ 0xa003, 0x3ee9, 0xa201, 0x3ee8, 0xe42e, 0x28e1, 0xf15a, 0x28e9,
+ 0x18e7, 0xf042, 0xe41e, 0x1163, 0xf7be, 0xe0c0, 0x014b, 0xf7e8,
+ 0xa204, 0xae1c, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0xe190,
+ 0xe0c0, 0x014b, 0xf7e8, 0x28a3, 0x3ce3, 0xe42e, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c, 0xcc8e, 0xe004,
+ 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f, 0x0003, 0xe190,
+ 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004, 0x0030, 0xce50,
+ 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004, 0x0020, 0xce50,
+ 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e, 0x0081, 0xe42a,
+ 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100, 0xe0c2, 0x041c,
+ 0xe41e, 0x00b7, 0xe41e, 0x00f1, 0xae12, 0xe0c2, 0x041e, 0xe41e,
+ 0x00e1, 0xe42e, 0xe41e, 0x00a5, 0xe42a, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215, 0xe008, 0x0100,
+ 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213, 0xe008, 0x0100,
+ 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x00b7, 0xe41e, 0x00f1, 0xae12, 0xe0c1,
+ 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204, 0xaf0b, 0xa87f,
+ 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056, 0xe0c2, 0x041e,
+ 0xe41e, 0x00e1, 0xe42e, 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x041f,
+ 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200, 0xe0c2, 0x041c,
+ 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052, 0xf1da, 0xe0c0,
+ 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060, 0xa81e, 0xe016,
+ 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea, 0xe0c0, 0x0044,
+ 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xe056,
+ 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0, 0x0044, 0xa203,
+ 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x0081, 0xf088, 0xe0c0, 0x0044,
+ 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500,
+ 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0, 0x0419, 0xf7ea,
+ 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28, 0xe0c1, 0x041b,
+ 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056, 0xe0c2, 0x041d,
+ 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2, 0x041c, 0xa228,
+ 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200, 0xe0c2, 0x041c,
+ 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c26, 0xf0b4, 0xe04a, 0xaf10,
+ 0x1827, 0xf074, 0xe009, 0x00ff, 0x1a28, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x04de, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x0368, 0xe40e, 0x00a4,
+ 0xe41e, 0x0385, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x0450,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x039d, 0xe40e, 0x00a4,
+ 0xe41e, 0x0148, 0xa200, 0xcc4a, 0xcc4c, 0xd130, 0x0007, 0xd131,
+ 0x0000, 0xe41e, 0x0387, 0xe41e, 0x0494, 0xf09a, 0xe41e, 0x03a2,
+ 0xf06d, 0xe41e, 0x0669, 0xe41e, 0x0544, 0xe42e, 0xe41e, 0x0544,
+ 0xe16a, 0xa200, 0xe0c2, 0x0070, 0xe42e, 0xa202, 0xe42e, 0xe41e,
+ 0x0491, 0xe0c0, 0x0040, 0xe005, 0x0049, 0xae17, 0xe042, 0xe005,
+ 0x1f00, 0xae03, 0xe042, 0xce20, 0xd111, 0x08a0, 0xd112, 0x0040,
+ 0xd113, 0x0003, 0xe41e, 0x0491, 0xe42e, 0xe41e, 0x089e, 0xe41e,
+ 0x08fe, 0xe42e, 0xba4e, 0xa186, 0xe408, 0x03fe, 0xba4e, 0xa19c,
+ 0xe408, 0x03fe, 0xba4e, 0xa19a, 0xe408, 0x03fe, 0xba4e, 0xa1ac,
+ 0xe408, 0x03fe, 0xba4e, 0xba4f, 0xae11, 0xe056, 0x3c00, 0xba4e,
+ 0xba4f, 0xae11, 0xe056, 0x3c01, 0xba7e, 0x3402, 0x3c03, 0xba4e,
+ 0xba4f, 0xae11, 0xe055, 0x3e12, 0xba4e, 0xba4f, 0xae11, 0xe055,
+ 0x3e13, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056,
+ 0xba4f, 0xae31, 0xe056, 0x3404, 0x3c05, 0xba4e, 0xba4f, 0xae11,
+ 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056, 0x3406,
+ 0x3c07, 0xba7e, 0x3408, 0x3c09, 0xba7e, 0x2812, 0xa01e, 0xaf08,
+ 0xae08, 0x3c10, 0x2813, 0xa01e, 0xaf08, 0xae08, 0x3c11, 0x2810,
+ 0x3c22, 0xa01e, 0xaf08, 0x3c27, 0x2811, 0x3c23, 0xa01e, 0xaf08,
+ 0x3c28, 0x8427, 0x8228, 0xe018, 0x3c26, 0xe42e, 0xe16b, 0xe42e,
+ 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056, 0xba4f,
+ 0xae31, 0xe056, 0xf1da, 0xd022, 0x0007, 0xe184, 0x0410, 0xba4e,
+ 0xe190, 0xe190, 0xd039, 0x0000, 0xba4e, 0x3c2b, 0xf088, 0xba4e,
+ 0x3c20, 0xba4e, 0x3c51, 0xba4e, 0x3c50, 0xe42e, 0xba4e, 0xba4e,
+ 0xba4e, 0xa202, 0x3c20, 0x3c51, 0xa200, 0x3c50, 0xe42e, 0xe16b,
+ 0xe42e, 0xba4e, 0xba4f, 0xae11, 0xe056, 0xba4f, 0xae21, 0xe056,
+ 0xba4f, 0xae31, 0xe056, 0x3c0a, 0xba7e, 0xe161, 0x0300, 0x8451,
+ 0xe182, 0x0180, 0xe018, 0xa102, 0xcc44, 0xe184, 0x0444, 0xba5e,
+ 0x3d11, 0x280a, 0xa104, 0x3c0a, 0xf02a, 0xe190, 0x280a, 0xe426,
+ 0xa102, 0xcc44, 0xe184, 0x044d, 0xba4e, 0xe190, 0xe190, 0xe42e,
+ 0xe41e, 0x06a6, 0xa200, 0x3c82, 0xcc4a, 0xcc4c, 0xd130, 0x0007,
+ 0xd131, 0x0000, 0xe0c0, 0x005a, 0xe008, 0xffff, 0x3cee, 0xe41e,
+ 0x09c4, 0xe41e, 0x08bd, 0xe41e, 0x093f, 0x2860, 0xe418, 0x0a7c,
+ 0xe41e, 0x092f, 0xe41e, 0x0931, 0xe41e, 0x04bf, 0xe41e, 0x050a,
+ 0xf09a, 0xa2fe, 0x3c33, 0xa2fc, 0x3c30, 0x3c34, 0xe41e, 0x0985,
+ 0xf05e, 0xe41e, 0x025f, 0xe41e, 0x06b5, 0xe41e, 0x0680, 0xe41e,
+ 0x09d3, 0xe41e, 0x054a, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2,
+ 0x0053, 0xe42e, 0xe41e, 0x054a, 0xe16a, 0xa200, 0xe0c2, 0x0076,
+ 0xe42e, 0xca28, 0xf7f8, 0xe42e, 0xe41e, 0x023a, 0xa206, 0xae1e,
+ 0xcec0, 0xd160, 0x0600, 0xe0c0, 0x0060, 0x34b0, 0x3cb1, 0xe0c1,
+ 0x0061, 0xae15, 0x36b2, 0x3eb3, 0xe042, 0x34b4, 0x3cb5, 0xe0c0,
+ 0x0048, 0x34ba, 0x3cbb, 0x34b6, 0xe008, 0xfe00, 0x3cb7, 0x2cbb,
+ 0xe008, 0x01ff, 0x3cbc, 0xe41e, 0x0633, 0xf07d, 0xe41e, 0x0525,
+ 0xe41e, 0x050c, 0xa202, 0xe42e, 0xa200, 0xe16a, 0xe42e, 0xa206,
+ 0xae1e, 0xcec0, 0xd160, 0x0600, 0xe0c0, 0x0048, 0xe0c2, 0x0051,
+ 0x34ba, 0x3cbb, 0x34b6, 0xe008, 0xfe00, 0x3cb7, 0x28bb, 0xe008,
+ 0x01ff, 0x3cbc, 0xe41e, 0x05f8, 0xf078, 0xe41e, 0x0525, 0xe41e,
+ 0x050c, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x04e1,
+ 0xe470, 0xca28, 0xf7f8, 0xe004, 0x0080, 0xce24, 0x28bf, 0xae0e,
+ 0xce22, 0x24b6, 0x4cb7, 0xce20, 0x24cd, 0x4cce, 0xa806, 0xae02,
+ 0xa022, 0xce26, 0xca28, 0xf7f8, 0x24b6, 0x4cb7, 0xe000, 0x0200,
+ 0x34b6, 0x3cb7, 0x14b4, 0x1cb5, 0xf054, 0x24b0, 0x4cb1, 0x34b6,
+ 0x3cb7, 0xd04c, 0x0000, 0x28bf, 0xae0e, 0xcc6e, 0x28bf, 0xe016,
+ 0x3cbf, 0xe42e, 0x28c1, 0xe42e, 0xa200, 0x3cbf, 0xce92, 0xe0c0,
+ 0x0043, 0x34cd, 0x3cce, 0xe41e, 0x04e1, 0xe41e, 0x04e1, 0xe128,
+ 0xd071, 0x2020, 0xe181, 0x2cbc, 0xa102, 0xf074, 0xcc44, 0xe184,
+ 0x0522, 0xba4e, 0xe190, 0xe190, 0xe42e, 0xe004, 0x1495, 0xae20,
+ 0xcc9e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035,
+ 0x0000, 0xd036, 0x00ff, 0xd037, 0x0000, 0xd038, 0x0000, 0xd039,
+ 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd046, 0x0000, 0xd047,
+ 0x0000, 0xd149, 0x0000, 0xe42e, 0x24ba, 0x4cbb, 0x08c2, 0x34ba,
+ 0x3cbb, 0xf07e, 0x24ba, 0x4cbb, 0x04c5, 0x0cc6, 0x34ba, 0x3cbb,
+ 0x14b4, 0x1cb5, 0xf074, 0x24ba, 0x4cbb, 0x14b2, 0x1cb3, 0x34ba,
+ 0x3cbb, 0x24ba, 0x4cbb, 0xe0c2, 0x0048, 0xe0c2, 0x0052, 0xe42e,
+ 0xa200, 0x34c5, 0x3cc6, 0xe42e, 0xf0a8, 0x2911, 0xe008, 0xffff,
+ 0xae20, 0x2b11, 0xe009, 0xffff, 0xe042, 0xf0fe, 0x2911, 0xe008,
+ 0x00ff, 0xae20, 0x2b11, 0xe009, 0xffff, 0xe042, 0xae10, 0x2b11,
+ 0xe009, 0xff00, 0xaf11, 0xe042, 0x2ac7, 0xe42b, 0xe049, 0xaf31,
+ 0xe009, 0x00ff, 0xe093, 0xe049, 0xaf21, 0xe009, 0x00ff, 0xe095,
+ 0xe049, 0xaf11, 0xe009, 0x00ff, 0xe008, 0x00ff, 0xae10, 0xe056,
+ 0xae10, 0xe085, 0xe056, 0xae10, 0xe083, 0xe056, 0xe42e, 0xe049,
+ 0xa80f, 0xe046, 0xe42e, 0xca29, 0xf7f9, 0xd111, 0x0830, 0xce20,
+ 0x26b4, 0x4eb5, 0xe045, 0xe004, 0x0040, 0xe065, 0xaf03, 0xce25,
+ 0x3ec0, 0xe41e, 0x05b9, 0xa240, 0x18c0, 0xe426, 0xce24, 0x28c0,
+ 0xe000, 0x0830, 0xce22, 0x24b0, 0x4cb1, 0xce20, 0xe41e, 0x05b9,
+ 0xe42e, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa002, 0xce26, 0xca28,
+ 0xf7f8, 0xe42e, 0x34c9, 0x3cca, 0xa200, 0x3cbd, 0xe0c0, 0x0049,
+ 0x34cb, 0x3ccc, 0xe0c0, 0x0045, 0xaf04, 0x30be, 0xe0c0, 0x0049,
+ 0x34b8, 0x3cb9, 0x10cb, 0x1ccc, 0x2abd, 0xb611, 0x3ebd, 0x26b8,
+ 0x4eb9, 0x16c9, 0x1eca, 0xf033, 0x06b2, 0x0eb3, 0x16c3, 0x1ec4,
+ 0xa200, 0xe423, 0x28be, 0x3cc1, 0xe428, 0x28bd, 0xf648, 0xe41e,
+ 0x01db, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf5da, 0xe0c0, 0x005d,
+ 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3cbd, 0xf53e,
+ 0xa218, 0x34c3, 0x3cc4, 0x24ba, 0x4cbb, 0xd027, 0x0000, 0xe41e,
+ 0x05c2, 0xd027, 0x0001, 0xf2b8, 0x24ba, 0x4cbb, 0xe41e, 0x0597,
+ 0xe095, 0xe41e, 0x059b, 0xe084, 0xaf02, 0xe000, 0x0830, 0xe092,
+ 0xe084, 0xa802, 0xe41e, 0x0564, 0x34c5, 0x3cc6, 0xf186, 0x26b2,
+ 0x4eb3, 0xe046, 0xf142, 0x24c5, 0x4cc6, 0xa018, 0x34c5, 0x3cc6,
+ 0x34c3, 0x3cc4, 0x24ba, 0x4cbb, 0xd027, 0x0000, 0xe41e, 0x05c2,
+ 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b, 0xa200, 0x34c5,
+ 0x3cc6, 0xa202, 0xe42e, 0xa202, 0x3cc7, 0xa240, 0x34c3, 0x3cc4,
+ 0x24ba, 0x4cbb, 0xd027, 0x0000, 0xe41e, 0x05c2, 0xd027, 0x0001,
+ 0xe408, 0x0667, 0x24ba, 0x4cbb, 0xe41e, 0x0597, 0xe095, 0xe41e,
+ 0x059b, 0xe084, 0xa00c, 0xaf02, 0xe000, 0x0830, 0xe092, 0xe084,
+ 0xa802, 0xe41e, 0x0564, 0xe008, 0xffff, 0x3cc2, 0xa140, 0xf0f4,
+ 0x28c2, 0x34c3, 0x3cc4, 0x24ba, 0x4cbb, 0xd027, 0x0000, 0xe41e,
+ 0x05c2, 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b, 0xa202,
+ 0xe42e, 0xa200, 0xe0c2, 0x0074, 0xe0c2, 0x0076, 0xe0c2, 0x0077,
+ 0x2012, 0x4c13, 0xe0c2, 0x0071, 0xa2fe, 0xe0c2, 0x0072, 0xe0c2,
+ 0x006d, 0xa206, 0xe0c2, 0x0073, 0xa202, 0xe0c2, 0x0070, 0xe42e,
+ 0xa200, 0xe0c2, 0x0075, 0xe0c2, 0x0078, 0xe0c2, 0x0079, 0x2833,
+ 0xe0c2, 0x0071, 0x2882, 0xe0c2, 0x0072, 0x2820, 0xe0c2, 0x0073,
+ 0xa202, 0xe0c2, 0x0076, 0x2834, 0xe0c2, 0x0077, 0x2012, 0x4c13,
+ 0xe0c2, 0x006f, 0xa200, 0xe0c2, 0x0075, 0x2436, 0x4c3a, 0xe0c2,
+ 0x0070, 0xe42e, 0xa200, 0xe0c2, 0x0076, 0xe42e, 0xa200, 0xcc4a,
+ 0xcc4c, 0x3c20, 0x3c50, 0x3c24, 0x3c25, 0x3c6a, 0x3c6b, 0x3c29,
+ 0x3c80, 0x3c82, 0xa2fe, 0x3c51, 0xe42e, 0xe41e, 0x08c8, 0xe40a,
+ 0x0726, 0xe41e, 0x0400, 0xe40d, 0x0726, 0x2a2b, 0xe41b, 0x050a,
+ 0xe408, 0x0726, 0xa218, 0xcf02, 0x2860, 0xe418, 0x0956, 0xe41e,
+ 0x078c, 0xe41e, 0x0799, 0x2828, 0xa102, 0x3c25, 0x282b, 0xf1c8,
+ 0xe41e, 0x0429, 0xe41e, 0x0838, 0xba4e, 0xba4f, 0xae11, 0xe056,
+ 0xba4f, 0xae21, 0xe056, 0xba4f, 0xae31, 0xe056, 0x2a2b, 0xb612,
+ 0x340b, 0x3c0c, 0x340b, 0x3c0c, 0xba7e, 0xa200, 0xe41e, 0x076d,
+ 0xa202, 0xe41e, 0x076d, 0xe41e, 0x0794, 0xcb04, 0xa802, 0xf7e8,
+ 0x282b, 0xe418, 0x072a, 0xf128, 0xa212, 0xcf02, 0xcb04, 0xa808,
+ 0xf7ea, 0xcb04, 0xa810, 0xf0aa, 0xcb04, 0xaf08, 0xa802, 0xe41e,
+ 0x076d, 0xcb04, 0xa806, 0xe418, 0x074e, 0xe0c0, 0x0111, 0xf7e8,
+ 0xa202, 0xe0c2, 0x0110, 0x2860, 0xf0ba, 0xa202, 0x3c66, 0x286a,
+ 0x4c6b, 0xe01a, 0x3c65, 0xe41e, 0x096f, 0xe41e, 0x09b6, 0xe41e,
+ 0x0735, 0xe40a, 0x071d, 0xe40e, 0x06eb, 0xe0c0, 0x0111, 0xf7e8,
+ 0x2860, 0xf03a, 0xe41e, 0x09aa, 0xe41e, 0x08f3, 0xe41e, 0x09d3,
+ 0xa202, 0xe42e, 0xa206, 0xcf42, 0xa200, 0xe0c2, 0x0224, 0xa214,
+ 0xcf02, 0xcb04, 0xa802, 0xf7ea, 0xe42e, 0x2829, 0xa002, 0x3c29,
+ 0x2a26, 0xa103, 0xe046, 0xe400, 0x074c, 0x2824, 0xa002, 0x3c24,
+ 0x1827, 0xe404, 0x074a, 0x2825, 0xa102, 0x3c25, 0xa200, 0x3c24,
+ 0xe404, 0x074c, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa202, 0x3c80,
+ 0x2882, 0xa002, 0x3c82, 0x2036, 0x4c3a, 0xe40a, 0x075e, 0x2820,
+ 0xe408, 0x0762, 0xa206, 0xcf42, 0xe40e, 0x076a, 0xa202, 0xcf42,
+ 0xe40e, 0x076a, 0xa204, 0xcf42, 0xe0c0, 0x03b0, 0xcf44, 0xe0c0,
+ 0x03b1, 0xcf46, 0xa214, 0xcf02, 0xe42e, 0xae10, 0xce30, 0x200b,
+ 0x4c0c, 0xe426, 0xe004, 0x00ff, 0xcc44, 0x200b, 0x4c0c, 0xe002,
+ 0x0400, 0xaf04, 0xf062, 0x200b, 0x4c0c, 0xaf04, 0xa102, 0xcc44,
+ 0xe184, 0x0783, 0xba7e, 0xce32, 0x200b, 0x4c0c, 0xe002, 0x0400,
+ 0xb60c, 0x340b, 0x3c0c, 0xe42e, 0x2820, 0xae20, 0x2a28, 0xae11,
+ 0xe056, 0x4c27, 0xcf00, 0xe42e, 0x2825, 0xae10, 0x4c24, 0xcf06,
+ 0xe42e, 0xa200, 0x2a61, 0x4e64, 0xb692, 0xae08, 0xa90c, 0xe0c2,
+ 0x017c, 0xe004, 0x0004, 0xe0c2, 0x017d, 0xa20e, 0xe0c2, 0x0100,
+ 0xa200, 0xe0c2, 0x0128, 0x2022, 0x4c23, 0xe0c2, 0x0101, 0xa200,
+ 0xe41e, 0x0a2a, 0xe0c2, 0x0102, 0x2820, 0xa802, 0xae06, 0xe0c2,
+ 0x0104, 0xe0c0, 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414, 0xe41a,
+ 0x0802, 0xa20e, 0xe0c2, 0x0312, 0xa202, 0xe0c2, 0x0302, 0x2832,
+ 0xe0c2, 0x0380, 0x2831, 0xe0c2, 0x0383, 0xa200, 0xe0c2, 0x0302,
+ 0xa20e, 0xae0e, 0x2a20, 0xa807, 0xae07, 0xe056, 0xe0c2, 0x0204,
+ 0x2831, 0xe0c2, 0x0216, 0x2830, 0xe0c2, 0x0214, 0x2022, 0x4c23,
+ 0xe0c2, 0x0205, 0xa200, 0xe0c2, 0x0208, 0xa202, 0xe0c2, 0x0210,
+ 0x2040, 0x4c41, 0xe0c2, 0x0211, 0x2042, 0x4c43, 0xe0c2, 0x0212,
+ 0xa200, 0xe41e, 0x0a2a, 0xa203, 0xae11, 0xe056, 0xe0c2, 0x0213,
+ 0xa200, 0xe0c2, 0x0215, 0x2850, 0xe0c2, 0x0217, 0xa202, 0xe0c2,
+ 0x0106, 0xe42e, 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152,
+ 0x2b17, 0xe009, 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1,
+ 0x0101, 0xe0c3, 0x015d, 0xe005, 0x001b, 0x3e91, 0x2831, 0xa53e,
+ 0xa400, 0x2a32, 0xa53f, 0xa401, 0xae11, 0xe055, 0xae21, 0xe167,
+ 0x01a2, 0x2907, 0xaf10, 0x4491, 0xe055, 0xe0c3, 0x015c, 0xa202,
+ 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150,
+ 0xe0c0, 0x0151, 0xf7e8, 0xe42e, 0xa202, 0xe42e, 0xa202, 0xe42e,
+ 0xa202, 0xe0c2, 0x013c, 0xa200, 0x3c95, 0x3c93, 0x3c94, 0x3c52,
+ 0x8451, 0xc783, 0xe018, 0x3c2a, 0x282a, 0xa102, 0xe404, 0x0898,
+ 0x3c2a, 0xa200, 0x3c52, 0x2893, 0xa106, 0xf068, 0xa200, 0x3c93,
+ 0x2894, 0xa002, 0x3c94, 0x8493, 0xc783, 0xe018, 0x2a94, 0xe042,
+ 0x3c96, 0x2852, 0xa104, 0xe40a, 0x088f, 0xe160, 0x08a0, 0x2895,
+ 0xae02, 0x2a52, 0xe042, 0x3c91, 0x8491, 0xe182, 0x0040, 0xe018,
+ 0x3c91, 0xe161, 0x0300, 0xe082, 0x0c91, 0xe092, 0x2896, 0xae02,
+ 0x2a52, 0xe042, 0x3c92, 0x8492, 0xe182, 0x0040, 0xe018, 0x3c92,
+ 0xd022, 0x003f, 0xe184, 0x0888, 0x2a92, 0xe0c3, 0x013e, 0xa003,
+ 0x3e92, 0x2910, 0xe083, 0xe042, 0xe094, 0x2902, 0xe0c2, 0x013f,
+ 0xa200, 0xe190, 0x2852, 0xa002, 0x3c52, 0xe40e, 0x0859, 0xe190,
+ 0x2895, 0xa002, 0x3c95, 0x2893, 0xa002, 0x3c93, 0xe40e, 0x0844,
+ 0xe190, 0xa200, 0xe0c2, 0x013c, 0xa202, 0xe42e, 0xa200, 0x3c36,
+ 0x3c3a, 0x3c3b, 0x3c3c, 0xa2fe, 0x3c63, 0x3c30, 0x3c31, 0x3c32,
+ 0x3c33, 0xe0c0, 0x0061, 0x3c21, 0xe0c0, 0x0060, 0x3c35, 0xe41e,
+ 0x0491, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0200, 0xd112, 0x00c0,
+ 0xd113, 0x0003, 0xe41e, 0x0491, 0xe42e, 0xa2fe, 0x3c30, 0xe0c0,
+ 0x0054, 0x263b, 0x4e3c, 0xe052, 0x3c3c, 0x343b, 0xa202, 0xe42e,
+ 0x2831, 0xa002, 0xf068, 0xa200, 0x3c31, 0x3c30, 0x3c32, 0xf18e,
+ 0x2831, 0x3c30, 0x2830, 0xa002, 0x2a35, 0xe045, 0xb616, 0x3c30,
+ 0x2a31, 0xe045, 0xf059, 0xa2fe, 0x3c30, 0xa200, 0xe42e, 0x2a32,
+ 0xe045, 0xf71b, 0x243b, 0x4c3c, 0x5c30, 0xa802, 0xf6c8, 0xa202,
+ 0x5830, 0x263b, 0x4e3c, 0xe056, 0x3c3c, 0x343b, 0x2830, 0x3c33,
+ 0x3c34, 0xa202, 0xe42e, 0x2830, 0x3c31, 0x2a20, 0xf029, 0x3c32,
+ 0x2636, 0x4e3a, 0xa003, 0x3636, 0x3e3a, 0xe42e, 0xe0c0, 0x0050,
+ 0xe049, 0xe008, 0x007f, 0x3c45, 0xaf11, 0xe009, 0x007f, 0x3e44,
+ 0x4645, 0x3e45, 0xe0c1, 0x0046, 0xe004, 0x0000, 0xae10, 0xe042,
+ 0xe41e, 0x092b, 0x2a44, 0xa809, 0xf03b, 0xe0c0, 0x0066, 0x3440,
+ 0x3c41, 0xe0c1, 0x0046, 0xe004, 0x0010, 0xae10, 0xe042, 0xe41e,
+ 0x092b, 0x2a44, 0xa811, 0xf03b, 0xe0c0, 0x0067, 0x3442, 0x3c43,
+ 0xe41e, 0x0174, 0xe42e, 0xa00e, 0xaf06, 0xae06, 0xe42e, 0xe40e,
+ 0x0a4a, 0xa200, 0x2a45, 0xa809, 0xf03b, 0xe00a, 0x0020, 0x2a45,
+ 0xa811, 0xf03b, 0xe00a, 0x0040, 0xe0c2, 0x040c, 0xe42e, 0xa200,
+ 0x3c6c, 0xe0c0, 0x0060, 0xa81e, 0x3c62, 0x2831, 0xf094, 0xe0c0,
+ 0x0060, 0xaf08, 0x3061, 0x3060, 0xaf02, 0x3064, 0xf06e, 0xa200,
+ 0x3c60, 0x3c61, 0x3c64, 0x3c62, 0xa202, 0xe42e, 0x2864, 0xae08,
+ 0x4c62, 0xe0c2, 0x014e, 0x2827, 0xa102, 0xae20, 0x4c28, 0xa102,
+ 0xe0c2, 0x0142, 0xe0c0, 0x006e, 0xe0c2, 0x017f, 0x2831, 0xe0c2,
+ 0x0143, 0xe0c0, 0x0061, 0xa87e, 0xe0c2, 0x0144, 0xe42e, 0x2864,
+ 0xe418, 0x09c2, 0x2865, 0xae02, 0x4c66, 0xae0e, 0x4c6a, 0xae0e,
+ 0x086b, 0xe0c1, 0x014b, 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2,
+ 0x014a, 0x286c, 0xa002, 0x3c6c, 0xe42e, 0x2860, 0xf2fa, 0xa200,
+ 0x3c29, 0x3c6a, 0x3c6b, 0xe0c2, 0x017f, 0xe0c2, 0x0149, 0xe41e,
+ 0x0956, 0xa200, 0xe41e, 0x0a2a, 0xe0c2, 0x0102, 0x2829, 0x1826,
+ 0xf0f2, 0xa202, 0x3c66, 0x286a, 0x4c6b, 0xe01a, 0x3c65, 0xe41e,
+ 0x096f, 0xe41e, 0x09b6, 0x2829, 0xa002, 0x3c29, 0xf708, 0xe41e,
+ 0x09aa, 0xe42e, 0xa200, 0x3c6a, 0x3c6b, 0x3c66, 0xa202, 0x3c65,
+ 0xe41e, 0x096f, 0xe0c1, 0x014b, 0xf7e9, 0xe42e, 0x286a, 0xa002,
+ 0x3c6a, 0x1827, 0xe404, 0x09c1, 0x286b, 0xa002, 0x3c6b, 0xa200,
+ 0x3c6a, 0xe42e, 0xa202, 0xe42e, 0xe0c0, 0x0065, 0xaf10, 0x30a0,
+ 0xe0c0, 0x006a, 0x34a1, 0x3ca2, 0x28a0, 0xf04a, 0xa206, 0xe41e,
+ 0x09e0, 0xa202, 0xe42e, 0x28a0, 0xf0aa, 0xe160, 0x0808, 0xa202,
+ 0xae10, 0x3d10, 0xa220, 0x3d10, 0xe41e, 0x09ef, 0xa202, 0xe42e,
+ 0x3c92, 0xe41e, 0x0491, 0x24a1, 0x4ca2, 0xce20, 0xd111, 0x0808,
+ 0xa218, 0xce24, 0x2892, 0xce26, 0xe41e, 0x0491, 0xe42e, 0xe160,
+ 0x0800, 0xa200, 0xc707, 0x3d10, 0xe160, 0x0800, 0xa200, 0x3c91,
+ 0x2835, 0xf216, 0xa006, 0xaf04, 0xa102, 0xcc44, 0xe184, 0x0a19,
+ 0xa200, 0xae08, 0x263b, 0x4e3c, 0x5e91, 0xa803, 0xb492, 0x2a31,
+ 0x1a91, 0xe017, 0x3e92, 0x2a32, 0x1a91, 0xe017, 0x4e92, 0x3e92,
+ 0xb452, 0x2a30, 0x1a91, 0xb436, 0x2a91, 0xa003, 0x3e91, 0xa807,
+ 0xf699, 0x3d10, 0xe41e, 0x0491, 0xe160, 0x080a, 0x2510, 0x4d10,
+ 0xce20, 0xd111, 0x0800, 0xd112, 0x0008, 0xd113, 0x0002, 0xe41e,
+ 0x0491, 0xe42e, 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe42e, 0xa200,
+ 0xe41e, 0x0a2a, 0xe42e, 0xe0c1, 0x0044, 0xaf0d, 0xae03, 0xe056,
+ 0xe008, 0x003f, 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xe42e,
+ 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xa105, 0xf039, 0xa213, 0xe42e,
+ 0xa201, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1, 0x0420, 0xa803,
+ 0xf7db, 0xe160, 0x0003, 0xe166, 0x0200, 0xe167, 0x0500, 0x2835,
+ 0xf156, 0xa102, 0xcc44, 0xe184, 0x0a6c, 0xa200, 0xe41e, 0x0a2a,
+ 0xaf04, 0xe41e, 0x0a33, 0xae20, 0x2e21, 0xe056, 0x9f17, 0x2022,
+ 0x4c23, 0x9f17, 0xe41e, 0x0a72, 0xe190, 0xe190, 0xa201, 0xe0c3,
+ 0x040d, 0xe42e, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17,
+ 0x2116, 0x4d16, 0x9f17, 0xe42e, 0xe0c0, 0x0044, 0xaf20, 0xa802,
+ 0xe428, 0xe0c0, 0x0060, 0xa860, 0xe42a, 0xe0c0, 0x0061, 0xa83e,
+ 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500,
+ 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e, 0x0a2f,
+ 0xa80e, 0xaf04, 0xe41e, 0x0a33, 0xe41e, 0x0a3b, 0xe40b, 0x0aa5,
+ 0xa81e, 0xe41e, 0x0a40, 0xae09, 0xe056, 0xae20, 0xe0c1, 0x006e,
+ 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0, 0x0060, 0xa822, 0xa122,
+ 0xf04a, 0x2022, 0x4c23, 0xf03e, 0x2023, 0x4c22, 0x9f17, 0xe0c0,
+ 0x0062, 0x9f17, 0xe0c0, 0x0063, 0x9f17, 0xe0c0, 0x0064, 0x9f17,
+ 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005,
+ 0x0020, 0xae11, 0xe042, 0xce20, 0xd111, 0x0200, 0xd112, 0x00c0,
+ 0x88ec, 0x0113, 0xca29, 0xf7f9, 0xe190, 0xe42e, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0003, 0x0002, 0x0001, 0x0000, 0x0007, 0x0006, 0x0005, 0x0004,
+ 0x000b, 0x000a, 0x0009, 0x0008, 0x000f, 0x000e, 0x000d, 0x000c,
+ 0x0013, 0x0012, 0x0011, 0x0010, 0x0017, 0x0016, 0x0015, 0x0014,
+ 0x001b, 0x001a, 0x0019, 0x0018, 0x001f, 0x001e, 0x001d, 0x001c,
+ 0x0023, 0x0022, 0x0021, 0x0020, 0x0027, 0x0026, 0x0025, 0x0024,
+ 0x002b, 0x002a, 0x0029, 0x0028, 0x002f, 0x002e, 0x002d, 0x002c,
+ 0x0033, 0x0032, 0x0031, 0x0030, 0x0037, 0x0036, 0x0035, 0x0034,
+ 0x003b, 0x003a, 0x0039, 0x0038, 0x003f, 0x003e, 0x003d, 0x003c,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xcccc, 0xcccc, 0xcccc, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0318, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0318, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x0222, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0338, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x033a, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c2f, 0xf0b4, 0xe04a, 0xaf10,
+ 0x182d, 0xf074, 0xe009, 0x00ff, 0x1a2e, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02a3, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02d9, 0xe41e, 0x0313, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x0303, 0xe42e, 0xe41e, 0x02c7, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02d9, 0xe41e, 0x0313,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x0303, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02a3, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x0330, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x034a, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x0330, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x023a, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0350, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x0352, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01cb, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa23e, 0x3cf0, 0xa202, 0x58f0, 0xe0c2, 0x0078, 0xa220,
+ 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802, 0xa220, 0xe0c2,
+ 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2, 0x0077, 0xa2fa,
+ 0xe0c2, 0x0071, 0xe42e, 0xe0c0, 0x0045, 0xaf04, 0xa80e, 0xa104,
+ 0xe428, 0xa202, 0xe0c2, 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28,
+ 0xf7f8, 0xca48, 0xa802, 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190,
+ 0xf7e2, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe0c0, 0x041f, 0xf7e8,
+ 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xe004,
+ 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0, 0x000d,
+ 0xf7e8, 0xe42e, 0xc001, 0x3443, 0x3c42, 0xc000, 0xe42e, 0xc001,
+ 0x2c43, 0x2e42, 0xc000, 0xe42a, 0x1c0e, 0xf0b4, 0xe04a, 0xaf10,
+ 0x180c, 0xf074, 0xe009, 0x00ff, 0x1a0d, 0xf034, 0xa202, 0xe42e,
+ 0xa2fe, 0xe42e, 0xe41e, 0x023a, 0xd160, 0x0620, 0xe004, 0x0019,
+ 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x024f, 0xe000, 0x0040, 0xce50,
+ 0xa200, 0xd022, 0x00ff, 0xe184, 0x0236, 0xce52, 0xe190, 0xe41e,
+ 0x0257, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72, 0xcc8c,
+ 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a, 0xd16f,
+ 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e, 0xe004,
+ 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e, 0xe004,
+ 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe41e,
+ 0x02bb, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a, 0x0100,
+ 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b, 0xae12, 0xe0c2,
+ 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe41e, 0x02df, 0xe42a, 0xe0c0,
+ 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0, 0x0215,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0, 0x0213,
+ 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0, 0x020b,
+ 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02f1, 0xe41e, 0x032b,
+ 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1, 0x0204,
+ 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f, 0xe056,
+ 0xe0c2, 0x041e, 0xe41e, 0x031b, 0xe42e, 0xe0c0, 0x041f, 0xf7e8,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8, 0xa200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052,
+ 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a, 0xe0c0, 0x0060,
+ 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017, 0xe056, 0xf0ea,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1, 0x0044, 0xaf17,
+ 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xe0c0,
+ 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e, 0x02bb, 0xf088,
+ 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4, 0xc785, 0xe018,
+ 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a, 0xa202, 0xe0c2,
+ 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xa202, 0xe0c2, 0x0418, 0xe0c0,
+ 0x0419, 0xf7ea, 0xe0c0, 0x041b, 0xaf20, 0xa01e, 0xaf08, 0xae28,
+ 0xe0c1, 0x041b, 0xe009, 0xffff, 0xa01f, 0xaf09, 0xae09, 0xe056,
+ 0xe0c2, 0x041d, 0xe42e, 0xe0c0, 0x041c, 0xe00a, 0x0200, 0xe0c2,
+ 0x041c, 0xa228, 0xa102, 0xf7f0, 0xe0c0, 0x041c, 0xe00c, 0x0200,
+ 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802, 0xe42e,
+ 0xe40e, 0x0edd, 0xe40e, 0x0354, 0xe40e, 0x0358, 0xe40e, 0x035c,
+ 0xe40e, 0x0364, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0368,
+ 0xe40e, 0x036a, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe41e, 0x0c24, 0xe40e, 0x00a4,
+ 0xe41e, 0x0c54, 0xe40e, 0x00a4, 0xe41e, 0x025b, 0xe41e, 0x0c5e,
+ 0xe41e, 0x02ad, 0xe40e, 0x00a4, 0xe41e, 0x0c55, 0xe40e, 0x00a4,
+ 0xe40e, 0x00a4, 0xe41e, 0x0cba, 0xe40e, 0x00a4, 0xa202, 0xcf22,
+ 0xa202, 0xe42e, 0xa204, 0xcf22, 0xa202, 0xe42e, 0xe008, 0x00ff,
+ 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22, 0xaf18, 0xa802, 0xe42e,
+ 0xe004, 0x0080, 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22, 0xaf18,
+ 0xa802, 0xe42e, 0xa102, 0xcc44, 0xa201, 0xe184, 0x0399, 0xe004,
+ 0x0080, 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22, 0xaf18, 0xa802,
+ 0xae03, 0xe055, 0xe04a, 0xe42e, 0xd022, 0x0006, 0xa201, 0xe184,
+ 0x03ab, 0xe004, 0x0080, 0xae08, 0xa908, 0xcf22, 0xe190, 0xcb22,
+ 0xaf18, 0xa802, 0xae03, 0xe055, 0xe04a, 0xae02, 0xb634, 0xe42e,
+ 0xd022, 0x0007, 0xa201, 0xe184, 0x03bf, 0xe004, 0x0080, 0xae08,
+ 0xa908, 0xcf22, 0xe190, 0xcb22, 0xaf18, 0xa802, 0xae03, 0xe055,
+ 0xe04a, 0xe42e, 0xe004, 0x0080, 0xae08, 0xa908, 0xcf22, 0xe190,
+ 0xcb22, 0xaf18, 0xa802, 0xe42e, 0xe004, 0x00f0, 0xa908, 0xcf02,
+ 0xe42e, 0xd130, 0x0007, 0xd131, 0x0002, 0xa203, 0xae03, 0x2812,
+ 0xe016, 0xe055, 0xae03, 0x2819, 0xe055, 0xae03, 0x2818, 0xe055,
+ 0xae03, 0x282b, 0xe055, 0xae11, 0x280c, 0xe055, 0xae11, 0x280d,
+ 0xe055, 0xcf01, 0xa200, 0x3c80, 0x2a12, 0xe017, 0x2819, 0x4418,
+ 0xe056, 0x3080, 0xe166, 0x0202, 0x290e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xae10, 0x4c2f, 0xcf24, 0xe41e, 0x0567, 0x2870, 0xf08a,
+ 0x2812, 0xf048, 0xe41e, 0x0539, 0xf03e, 0xe41e, 0x054a, 0x2812,
+ 0xe42a, 0xe166, 0x0206, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e,
+ 0xae10, 0x4d06, 0xcf30, 0xe166, 0x0209, 0x290e, 0xae10, 0x4d0e,
+ 0xae10, 0x4d06, 0xcf32, 0x282e, 0xae10, 0x4c2d, 0xae10, 0x4c2c,
+ 0xcf34, 0xe166, 0x020a, 0x2916, 0x2b16, 0xae21, 0xe056, 0xe166,
+ 0x021d, 0x2b16, 0xae11, 0xe056, 0x2b16, 0xae31, 0xe056, 0xcf26,
+ 0xe166, 0x020f, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xcf28, 0xe166, 0x0212, 0x290e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xcf2a, 0xe166, 0x0222, 0x290e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d0e, 0xae10, 0x4d06, 0xcf2c, 0xe166, 0x0225, 0x290e, 0xae10,
+ 0x4d0e, 0xae10, 0x4d06, 0xcf2e, 0xe166, 0x0227, 0x290e, 0xae10,
+ 0x4d06, 0xae10, 0xe166, 0x0214, 0x4d0e, 0xae10, 0x4d06, 0xcf36,
+ 0xe166, 0x0218, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xe005, 0x00f8, 0xe00b, 0x8000, 0xcf3b, 0xcf3c, 0xe190,
+ 0xe166, 0x021c, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xe005, 0x00f8, 0xe00b, 0x8001, 0xcf3b, 0xcf3c, 0xe190,
+ 0xe166, 0x022b, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xe005, 0x00fc, 0xe00b, 0x8000, 0xcf3b, 0xcf3c, 0xe190,
+ 0xe166, 0x022f, 0x290e, 0xae10, 0x4d0e, 0xae10, 0x4d0e, 0xae10,
+ 0x4d06, 0xe005, 0x00fc, 0xe00b, 0x8001, 0xcf3b, 0xcf3c, 0xe190,
+ 0xe42e, 0xa201, 0x281f, 0xe055, 0xae11, 0x2822, 0xe055, 0xae0d,
+ 0x287f, 0xe055, 0xae07, 0x281e, 0xe055, 0xae0d, 0x281d, 0xe055,
+ 0xae03, 0x281b, 0xe055, 0xcfa1, 0xa201, 0xe166, 0x0680, 0x2916,
+ 0xe008, 0x00ff, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae10, 0xe055,
+ 0x2916, 0xe008, 0x00ff, 0xae20, 0xe055, 0x2916, 0xe008, 0x00ff,
+ 0xae30, 0xe055, 0xcfa3, 0xa201, 0xe166, 0x0684, 0x2916, 0xe008,
+ 0x00ff, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae10, 0xe055, 0x2916,
+ 0xe008, 0x00ff, 0xae20, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae30,
+ 0xe055, 0xcfa5, 0xa201, 0xe166, 0x068c, 0x2916, 0xe008, 0x00ff,
+ 0xe055, 0x2916, 0xe008, 0x00ff, 0xae10, 0xe055, 0x2916, 0xe008,
+ 0x00ff, 0xae20, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae30, 0xe055,
+ 0xcfa7, 0xa201, 0xe166, 0x0688, 0x2916, 0xe008, 0x00ff, 0xe055,
+ 0x2916, 0xe008, 0x00ff, 0xae10, 0xe055, 0x2916, 0xe008, 0x00ff,
+ 0xae20, 0xe055, 0x2916, 0xe008, 0x00ff, 0xae30, 0xe055, 0xcfa9,
+ 0xe005, 0x0080, 0xae21, 0xe00b, 0x0100, 0xcfab, 0xe005, 0x011f,
+ 0xae21, 0xe004, 0x013f, 0xe055, 0xcfad, 0xe005, 0x009f, 0xae21,
+ 0xe004, 0x00bf, 0xe055, 0xcfb7, 0xa200, 0xcfb0, 0xe41e, 0x0560,
+ 0xe42e, 0x2875, 0xae10, 0x4c76, 0xcf06, 0xe42e, 0xa200, 0x4c72,
+ 0xae02, 0x4c74, 0xae02, 0x4c71, 0xae02, 0x4c73, 0xae08, 0x3c84,
+ 0xe42e, 0xe004, 0x001f, 0xae20, 0xe00a, 0x0000, 0xcf40, 0xe004,
+ 0x0100, 0xcf42, 0xe005, 0x011f, 0xae21, 0xe004, 0x013f, 0xe055,
+ 0xcf45, 0xe42e, 0xe004, 0x00ff, 0xae20, 0xe00a, 0x0000, 0xcf60,
+ 0xe004, 0x0100, 0xcf62, 0xe005, 0x011f, 0xae21, 0xe004, 0x013f,
+ 0xe055, 0xcf65, 0x2828, 0xae02, 0x4c27, 0xae04, 0xcf68, 0xe42e,
+ 0xe004, 0x001f, 0xae20, 0xe00a, 0x0000, 0xcfc0, 0xe42e, 0xe004,
+ 0x0080, 0x3c00, 0xe166, 0x0230, 0xe160, 0x0002, 0x2800, 0xae10,
+ 0x4d16, 0xcf38, 0x2a00, 0xae07, 0xd022, 0x0004, 0xe184, 0x057f,
+ 0xe04a, 0xae10, 0x8116, 0x4d0e, 0xae10, 0x4d36, 0xcf3e, 0xa003,
+ 0xa203, 0x2800, 0xa806, 0xa104, 0xb655, 0x2800, 0xe042, 0x3c00,
+ 0xaf10, 0xf028, 0xf64e, 0xe42e, 0xa2fe, 0x3c34, 0x3c35, 0x3c36,
+ 0x3c37, 0x3c3c, 0xa200, 0x3c38, 0x3c39, 0x3c3d, 0x3c3e, 0x3c3b,
+ 0x3c3a, 0xe0c0, 0x0061, 0x3c32, 0xe0c0, 0x0060, 0x3c33, 0xe41e,
+ 0x0ccc, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0700, 0xd112, 0x00c0,
+ 0xd113, 0x0003, 0xca29, 0xf7f9, 0xa204, 0xe41e, 0x13cd, 0xa202,
+ 0xe42e, 0xa2fc, 0x3c34, 0xe0c0, 0x0054, 0x2638, 0x4e39, 0xe052,
+ 0x3c39, 0x3438, 0xa202, 0xe42e, 0x2835, 0x3c34, 0x2834, 0xa002,
+ 0x2a33, 0xe045, 0xb616, 0x3c34, 0x2a35, 0xe045, 0xf059, 0xa2fe,
+ 0x3c34, 0xa200, 0xe42e, 0x2a36, 0xe045, 0xf71b, 0x2a37, 0xe045,
+ 0xf6eb, 0x2438, 0x4c39, 0x5c34, 0xa802, 0xf698, 0x2814, 0xf08a,
+ 0xa202, 0x5834, 0x2638, 0x4e39, 0xe056, 0x3c39, 0x3438, 0xa202,
+ 0xe42e, 0xa200, 0x3c98, 0x3c99, 0x2a35, 0x282a, 0xf028, 0x2a34,
+ 0x3e99, 0x2826, 0xf0fa, 0xa102, 0xf048, 0x2899, 0x3c37, 0xf0ae,
+ 0xa102, 0xf048, 0x2836, 0x3c37, 0xf05e, 0xa2fe, 0x3c98, 0xa200,
+ 0x3c37, 0x2825, 0xf0fa, 0xa102, 0xf048, 0x2899, 0x3c36, 0xf0ae,
+ 0xa102, 0xf048, 0x2837, 0x3c36, 0xf05e, 0xa2fe, 0x3c98, 0xa200,
+ 0x3c36, 0x2823, 0xf03a, 0x2834, 0x3c36, 0x2824, 0xf03a, 0x2834,
+ 0x3c37, 0x282a, 0xf048, 0x2834, 0x3c3c, 0xf04e, 0x2834, 0x3c35,
+ 0x3c3c, 0x243a, 0x4c3b, 0xa002, 0x3c3b, 0x343a, 0xa200, 0x2a35,
+ 0xf045, 0xa203, 0x5a35, 0xe056, 0x2a36, 0xf045, 0xa203, 0x5a36,
+ 0xe056, 0x2a37, 0xf045, 0xa203, 0x5a37, 0xe056, 0x2a34, 0xf045,
+ 0xa203, 0x5a34, 0xe056, 0x343d, 0x3c3e, 0x2898, 0xf038, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xe0c0, 0x0041, 0xe005, 0x0026, 0xae11,
+ 0xe042, 0xe41e, 0x0678, 0x3442, 0x3c43, 0xe000, 0x08a0, 0xe41e,
+ 0x0678, 0x3447, 0x3c48, 0xe000, 0x0ac0, 0xe0c0, 0x0046, 0xe005,
+ 0x002c, 0xae15, 0xe042, 0xe41e, 0x0678, 0x344a, 0x3c4b, 0xe42e,
+ 0xe41e, 0x0174, 0xe167, 0x06b5, 0xe166, 0x0064, 0xd022, 0x0003,
+ 0xe184, 0x0664, 0x9e16, 0x3517, 0x3d17, 0xe0c0, 0x006c, 0x3444,
+ 0x3c45, 0xe42e, 0xe0c0, 0x0050, 0xe049, 0xe008, 0x007f, 0x3c41,
+ 0xaf11, 0xe009, 0x007f, 0x3e40, 0x4641, 0x3e41, 0xa202, 0xe42e,
+ 0xa00e, 0xaf06, 0xae06, 0xe42e, 0xe41e, 0x068c, 0xe40a, 0x068a,
+ 0xe41e, 0x06a2, 0xe40a, 0x068a, 0xe41e, 0x06e4, 0xe40a, 0x068a,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xba4e, 0xa188, 0xf128, 0xba4e,
+ 0xa196, 0xf0f8, 0xba4e, 0xa192, 0xf0c8, 0xba4e, 0xa18c, 0xf098,
+ 0xd022, 0x001b, 0xe184, 0x069d, 0xba4e, 0xe190, 0xa202, 0xe42e,
+ 0xa200, 0xe42e, 0xba4e, 0x3c00, 0xba4e, 0x3c01, 0xba4e, 0x3c02,
+ 0xba4e, 0x3c03, 0x2803, 0xae10, 0x4c02, 0xae10, 0x4c01, 0xae10,
+ 0x4c00, 0x346a, 0x3c6b, 0xd022, 0x0007, 0xe184, 0x06b8, 0xba4e,
+ 0xe190, 0xe190, 0xa200, 0xcc72, 0x3cb7, 0xa202, 0xe42e, 0xba3e,
+ 0xe005, 0x0044, 0xae11, 0xa997, 0xae11, 0xa993, 0xae11, 0xa98d,
+ 0xe046, 0xe41a, 0x068c, 0xe42e, 0xe41e, 0x06bf, 0xe41e, 0x06a2,
+ 0xf09a, 0xe41e, 0x06e4, 0xf06a, 0xe41e, 0x08f0, 0xf03a, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xa202, 0x3c70, 0xe41e, 0x07a3, 0xf03a,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0x3c82, 0xba4e, 0xba4f,
+ 0xae11, 0xe056, 0xba4f, 0xae21, 0xe055, 0xe04a, 0xa802, 0x3c12,
+ 0xe04a, 0xaf02, 0xa80e, 0x3c13, 0xe04a, 0xaf08, 0xa802, 0x3c14,
+ 0xe04a, 0xaf0a, 0x3415, 0x3c16, 0x28b7, 0xa006, 0x3cb7, 0xe41e,
+ 0x08cc, 0x2812, 0xf07a, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0754,
+ 0xf3de, 0x2808, 0x3c94, 0x2809, 0x3c95, 0xba4e, 0xe005, 0x009d,
+ 0xe046, 0xe408, 0x0756, 0xba4e, 0xe005, 0x0001, 0xe046, 0xe408,
+ 0x0756, 0xba4e, 0xe005, 0x002a, 0xe046, 0xe408, 0x0756, 0xba4e,
+ 0xe049, 0xba4e, 0xae10, 0xe055, 0xe04a, 0xe008, 0x3fff, 0x3c08,
+ 0xe04a, 0xaf1c, 0xa806, 0x3c0a, 0xba4e, 0xe049, 0xba4e, 0xae10,
+ 0xe055, 0xe04a, 0xe008, 0x3fff, 0x3c09, 0xe04a, 0xaf1c, 0xa806,
+ 0x3c0b, 0x28b7, 0xa00e, 0x3cb7, 0x2808, 0x1894, 0xf07a, 0xf04e,
+ 0x2809, 0x1895, 0xf03a, 0xa202, 0x3c82, 0x2808, 0xa01e, 0xaf08,
+ 0x3c0c, 0x2809, 0xa01e, 0xaf08, 0x3c0d, 0xcca4, 0x820c, 0xe018,
+ 0x3c0e, 0xf05a, 0xa202, 0xe42e, 0xa202, 0x3cf0, 0xa200, 0xe42e,
+ 0x280a, 0x4c0b, 0xf068, 0x2808, 0x3c0f, 0x2809, 0x3c10, 0xe42e,
+ 0xa202, 0x2a0a, 0xa103, 0xb6b6, 0xa103, 0xb6b6, 0xa103, 0xb656,
+ 0x3c00, 0xa202, 0x2a0a, 0xa103, 0xb696, 0xa103, 0xb676, 0xa103,
+ 0xb636, 0x3c01, 0xa202, 0x2a0b, 0xa103, 0xb6b6, 0xa103, 0xb6b6,
+ 0xa103, 0xb656, 0x3c02, 0xa202, 0x2a0b, 0xa103, 0xb696, 0xa103,
+ 0xb676, 0xa103, 0xb636, 0x3c03, 0x2808, 0xcca4, 0x8200, 0xe018,
+ 0xc70f, 0x7c01, 0xe190, 0x3c0f, 0x2809, 0xcca4, 0x8202, 0xe018,
+ 0xc70f, 0x7c03, 0xe190, 0x3c10, 0xe42e, 0x280f, 0xa01e, 0xaf08,
+ 0x180c, 0x2a10, 0xa01f, 0xaf09, 0x1a0d, 0xf044, 0xf035, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xe41e, 0x036e, 0x2812, 0xf068, 0xe41e,
+ 0x0380, 0x3c17, 0xe41e, 0x0380, 0xe41e, 0x0380, 0x3c18, 0xf2fa,
+ 0xe41e, 0x0380, 0x3c19, 0xe41e, 0x0380, 0x3c1a, 0xf1ca, 0xe41e,
+ 0x0380, 0x3c1b, 0xe166, 0x0680, 0xa20e, 0x3c96, 0xe41e, 0x0919,
+ 0xe41e, 0x0919, 0xe41e, 0x0919, 0xe41e, 0x0919, 0xe166, 0x0684,
+ 0xa20c, 0x3c96, 0xe41e, 0x0919, 0xe41e, 0x0919, 0xe41e, 0x0919,
+ 0xe41e, 0x0919, 0x2819, 0xf0ba, 0xe166, 0x0200, 0xa210, 0x3c96,
+ 0xe41e, 0x092a, 0xe41e, 0x092a, 0xe41e, 0x092a, 0xe41e, 0x0380,
+ 0x3c1c, 0xa20c, 0xe41e, 0x038a, 0x3c1d, 0xa206, 0xe41e, 0x038a,
+ 0x3c1e, 0xa200, 0x3c20, 0xe41e, 0x0380, 0x3c1f, 0xf1da, 0xe41e,
+ 0x0380, 0x3c20, 0xf19a, 0xe166, 0x0688, 0xa20c, 0x3c96, 0xe41e,
+ 0x0936, 0xe41e, 0x0936, 0xe41e, 0x0936, 0xe41e, 0x0936, 0xe166,
+ 0x068c, 0xa20c, 0x3c96, 0xe41e, 0x0936, 0xe41e, 0x0936, 0xe41e,
+ 0x0936, 0xe41e, 0x0936, 0xa204, 0xe41e, 0x038a, 0x3c21, 0xa202,
+ 0x5821, 0x3c21, 0xe406, 0x08ca, 0xa110, 0xe400, 0x08ca, 0xa20e,
+ 0xe41e, 0x038a, 0x3c22, 0xe166, 0x06b0, 0xa208, 0x3c96, 0xe41e,
+ 0x0946, 0xe41e, 0x0946, 0xe41e, 0x0946, 0xe41e, 0x0946, 0xe41e,
+ 0x0946, 0x2812, 0xf1da, 0xe41e, 0x0380, 0x3c23, 0xe41e, 0x0380,
+ 0x3c24, 0xa200, 0x3c25, 0x2823, 0xf058, 0xa204, 0xe41e, 0x038a,
+ 0x3c25, 0xa200, 0x3c26, 0x2824, 0xf058, 0xa204, 0xe41e, 0x038a,
+ 0x3c26, 0xe41e, 0x0380, 0x3c27, 0xe41e, 0x0380, 0x3c28, 0xe41e,
+ 0x0380, 0x3c29, 0xf058, 0xe004, 0x0002, 0xe41e, 0x0e5d, 0x2812,
+ 0xf048, 0xa202, 0x3c2a, 0xf04e, 0xe41e, 0x0380, 0x3c2a, 0xe167,
+ 0x0230, 0xa200, 0x3c00, 0x2800, 0xa108, 0xf1ba, 0x2800, 0xe41e,
+ 0x0e6c, 0xe165, 0x0900, 0xe004, 0x0108, 0x3c01, 0x2915, 0xe41e,
+ 0x0376, 0x2b07, 0xf04a, 0xe41e, 0x03b0, 0xe049, 0x3f17, 0x2801,
+ 0xa102, 0x3c01, 0xf748, 0xe190, 0x2800, 0xa002, 0x3c00, 0xf64e,
+ 0xa200, 0x3c2f, 0xe41e, 0x0380, 0x3c2b, 0xf21a, 0xe41e, 0x03b0,
+ 0x3c2f, 0x2812, 0xe40a, 0x08c8, 0xe41e, 0x03b0, 0x3c2c, 0xe41e,
+ 0x03b0, 0x3c2d, 0xe41e, 0x03b0, 0x3c2e, 0xe166, 0x0203, 0xe41e,
+ 0x0380, 0xf0da, 0xe41e, 0x03b0, 0x3d16, 0xe41e, 0x03b0, 0x3d16,
+ 0xe41e, 0x03b0, 0x3d16, 0xe41e, 0x03b0, 0x3d16, 0xe166, 0x0207,
+ 0xe41e, 0x0380, 0xf0aa, 0xe41e, 0x03b0, 0x3d16, 0xe41e, 0x03b0,
+ 0x3d16, 0xe41e, 0x03b0, 0x3d16, 0xe41e, 0x0e88, 0xe165, 0x0650,
+ 0xe166, 0x020a, 0xa200, 0x3c00, 0xa126, 0xf08a, 0x2915, 0xe41e,
+ 0x0956, 0x2800, 0xa002, 0x3c00, 0xf78e, 0xa200, 0x3c00, 0xa126,
+ 0xf08a, 0x2915, 0xe41e, 0x0956, 0x2800, 0xa002, 0x3c00, 0xf78e,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0x2813, 0xf078, 0xa201, 0x3e7b,
+ 0x3e7c, 0x3e7d, 0x3e7f, 0xf1ce, 0xa102, 0xf088, 0xa201, 0x3e7b,
+ 0x3e7f, 0xa203, 0x3e7c, 0x3e7d, 0xf13e, 0xa102, 0xf088, 0xa201,
+ 0x3e7c, 0x3e7f, 0xa203, 0x3e7b, 0x3e7d, 0xf0ae, 0xa102, 0xf078,
+ 0xa203, 0x3e7b, 0x3e7c, 0x3e7d, 0x3e7f, 0xf02e, 0xf60e, 0xe42e,
+ 0x2812, 0xf228, 0xe41e, 0x0e45, 0xa200, 0x3c1b, 0xe166, 0x0680,
+ 0xd022, 0x0007, 0xe184, 0x08fd, 0x3d16, 0xe190, 0xe190, 0xa200,
+ 0xe166, 0x0688, 0xd022, 0x0007, 0xe184, 0x0907, 0x3d16, 0xe190,
+ 0xe190, 0xa202, 0x3c23, 0x3c24, 0xa200, 0x3c25, 0x3c26, 0xa200,
+ 0x3c27, 0x3c28, 0xf05e, 0xa203, 0x287d, 0xb611, 0x3e79, 0xa202,
+ 0xe42e, 0xe41e, 0x0380, 0xf0ca, 0x2896, 0xe41e, 0x038a, 0x3d06,
+ 0xe41e, 0x0380, 0x2b06, 0xf02a, 0xe013, 0x3f16, 0xf03e, 0xa200,
+ 0x3d16, 0xe42e, 0xe41e, 0x0380, 0xf06a, 0x2896, 0xe41e, 0x038a,
+ 0x3d16, 0xf04e, 0xe004, 0x00ff, 0x3d16, 0xe42e, 0xe41e, 0x0380,
+ 0xf0ca, 0x2896, 0xe41e, 0x038a, 0x3d06, 0xe41e, 0x0380, 0x2b06,
+ 0xf02a, 0xe013, 0x3f16, 0xf02e, 0x8116, 0xe42e, 0xe41e, 0x0380,
+ 0xf0ca, 0x2896, 0xe41e, 0x038a, 0x3d06, 0xe41e, 0x0380, 0x2b06,
+ 0xf02a, 0xe013, 0x3f16, 0xf02e, 0x3d16, 0xe42e, 0xe41e, 0x0376,
+ 0x2b06, 0xf04a, 0xe41e, 0x039c, 0xe049, 0x3f16, 0xe42e, 0xa200,
+ 0x3c66, 0xa2fe, 0x3c67, 0xa202, 0x3c70, 0x2812, 0x3c71, 0xe016,
+ 0x3c73, 0xa200, 0x3c72, 0x3c74, 0xe41e, 0x052e, 0xe41e, 0x03d1,
+ 0xe41e, 0x1330, 0xe41e, 0x1363, 0xe41e, 0x025f, 0xe41e, 0x1158,
+ 0xe41e, 0x03cc, 0xe41e, 0x1152, 0xe41e, 0x09cf, 0xe41e, 0x0ab0,
+ 0xe016, 0x4c69, 0x3c69, 0xe166, 0x0690, 0x2821, 0xa102, 0xf0fa,
+ 0xa102, 0xcc44, 0xe184, 0x0995, 0xba4e, 0xe049, 0xba4e, 0xae10,
+ 0xe055, 0xba4e, 0xae20, 0xe055, 0x3716, 0x3f16, 0xe190, 0xa200,
+ 0x3c70, 0x3c73, 0x3c71, 0xa202, 0x3c72, 0x3c74, 0xe41e, 0x052e,
+ 0xe41e, 0x04a1, 0x2821, 0xf21a, 0xa102, 0xf138, 0xe41e, 0x0ad4,
+ 0xe41e, 0x03cc, 0xe41e, 0x09f3, 0xa200, 0x246a, 0x4c6b, 0xae06,
+ 0xc873, 0xe045, 0xf047, 0xa202, 0x4c69, 0x3c69, 0xa202, 0xe42e,
+ 0xe41e, 0x0aec, 0xe41e, 0x0ad4, 0xe41e, 0x03cc, 0xa200, 0xcc72,
+ 0xe41e, 0x09fa, 0xa202, 0xe42e, 0xa200, 0xe42e, 0x2812, 0xe016,
+ 0x4c23, 0x4c24, 0xf03a, 0x2822, 0x3c7a, 0xa202, 0xe42e, 0xa2fe,
+ 0x3c77, 0xa200, 0x3c76, 0x3c68, 0xe16a, 0xa200, 0x3c75, 0x2a77,
+ 0xa003, 0x3e77, 0xe41e, 0x0cf1, 0xf0fd, 0x2875, 0xa002, 0x3c75,
+ 0x180c, 0xf764, 0x2876, 0xa002, 0x3c76, 0x180d, 0xf6f4, 0xe41e,
+ 0x0d1a, 0xa202, 0xe42e, 0x2877, 0x3c67, 0x2a0e, 0xe045, 0x3e68,
+ 0xe16a, 0xa200, 0xe42e, 0xe41e, 0x036e, 0xe41e, 0x0a75, 0xe41a,
+ 0x0a98, 0xe42e, 0xa2fe, 0x3c77, 0xa200, 0x3c76, 0x3c75, 0x3c8b,
+ 0xe16a, 0x2876, 0x2a21, 0xa103, 0xe052, 0x3c8b, 0x2876, 0x1821,
+ 0xf072, 0x2876, 0xe418, 0x0ff8, 0xe41e, 0x036e, 0xf09e, 0xe41e,
+ 0x102c, 0xe41e, 0x0372, 0xe004, 0x0011, 0xe41e, 0x1041, 0xe41e,
+ 0x0a5c, 0xf19d, 0xe41e, 0x101b, 0xe004, 0x0010, 0xe41e, 0x1041,
+ 0x2876, 0xa002, 0x3c76, 0x180d, 0xf5d4, 0xe41e, 0x0d1a, 0xa200,
+ 0x3c8b, 0xe41e, 0x0a37, 0x288b, 0xa002, 0x3c8b, 0x1821, 0xf7a4,
+ 0xa202, 0xe42e, 0xe41e, 0x0a98, 0xe16a, 0xa200, 0xe42e, 0xe004,
+ 0x0800, 0x2a8b, 0xcca5, 0xc798, 0xe01c, 0xe09c, 0xe004, 0x0690,
+ 0x2a8b, 0xcca5, 0xc782, 0xe01c, 0xe09e, 0x8116, 0x8116, 0x8116,
+ 0x8116, 0x8116, 0x8116, 0x8116, 0x8116, 0x8116, 0x8116, 0x8116,
+ 0x8116, 0x2116, 0x4d16, 0x2717, 0x4f17, 0xae07, 0xe046, 0xf046,
+ 0xa202, 0x4c69, 0x3c69, 0xe42e, 0x2870, 0xf158, 0xa200, 0x3c75,
+ 0x2867, 0x2a77, 0xa003, 0x3e77, 0xf044, 0x2877, 0x1867, 0xf0b2,
+ 0xe41e, 0x0cf1, 0xf08d, 0x2875, 0xa002, 0x3c75, 0x180c, 0xf714,
+ 0xa202, 0xe42e, 0xe16b, 0xa200, 0xe42e, 0xa2fe, 0x3c77, 0xa200,
+ 0x3c76, 0xe16a, 0xa200, 0x3c75, 0x2867, 0x2a77, 0xa003, 0x3e77,
+ 0xf044, 0x2877, 0x1867, 0xf122, 0xe41e, 0x0cf1, 0xf0fd, 0x2875,
+ 0xa002, 0x3c75, 0x180c, 0xf714, 0x2876, 0xa002, 0x3c76, 0x180d,
+ 0xf6a4, 0xe41e, 0x0d1a, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xe16a, 0xe41e, 0x0d2f, 0xf12d, 0x2875, 0xa002, 0x3c75, 0x180c,
+ 0x2a77, 0xa003, 0x3e77, 0xf764, 0xa200, 0x3c75, 0x2876, 0xa002,
+ 0x3c76, 0x180d, 0xf6f4, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xa200, 0x2615, 0x4e16, 0xe042, 0x2eb7, 0xe042, 0xae06, 0xc873,
+ 0xe045, 0xf191, 0xc873, 0xe046, 0xe049, 0xf13a, 0xaf0a, 0xa102,
+ 0xf0b4, 0xcc44, 0xe184, 0x0ac9, 0xba4e, 0xba4e, 0xe190, 0xba4e,
+ 0xba4e, 0xe190, 0xe190, 0xe04a, 0xa83e, 0xf03a, 0xe09c, 0x9206,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0x2615, 0x4e16, 0xe042,
+ 0x2eb7, 0xe042, 0x2a21, 0xa103, 0xf0e5, 0xf04b, 0xcca5, 0xc783,
+ 0xe01c, 0xae06, 0xc873, 0xe045, 0xf061, 0xc873, 0xe046, 0xe40e,
+ 0x0abc, 0xe190, 0xa200, 0xe42e, 0xe166, 0x0690, 0xe167, 0x06a0,
+ 0xa200, 0x2615, 0x4e16, 0xe042, 0x2eb7, 0xe042, 0x2a21, 0xa111,
+ 0xf201, 0x2a21, 0xa103, 0xf1d7, 0xcca5, 0xc783, 0xe01c, 0x3517,
+ 0x3d17, 0x2a21, 0xa103, 0xa103, 0xcc45, 0xe184, 0x0b0b, 0x2716,
+ 0x4f16, 0xe042, 0x3517, 0x3d17, 0x266a, 0x4e6b, 0xe045, 0xa107,
+ 0x2812, 0xf028, 0xa10f, 0x2cb7, 0xe041, 0x3716, 0x3f16, 0xe190,
+ 0xa202, 0xe42e, 0xa206, 0xe41e, 0x13cd, 0xe41e, 0x1330, 0xe41e,
+ 0x1363, 0xe41e, 0x025f, 0xe41e, 0x0b48, 0xa202, 0xe42e, 0x2834,
+ 0xf1f4, 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe019, 0xe001,
+ 0x0500, 0xe09f, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e,
+ 0x1310, 0xaf04, 0xe41e, 0x1319, 0xae20, 0x2e32, 0xe056, 0x9f17,
+ 0x200c, 0x4c0d, 0xae08, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e,
+ 0xa200, 0x2a41, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2a41, 0xa805,
+ 0xf02b, 0xa912, 0x2a41, 0xa809, 0xf02b, 0xa940, 0x2a41, 0xa811,
+ 0xf02b, 0xa980, 0xe0c2, 0x040c, 0xe42e, 0xe0c0, 0x0059, 0xa102,
+ 0xf20a, 0xa102, 0xe42a, 0xa102, 0xf04a, 0xa102, 0xf24a, 0xe42e,
+ 0xe0c0, 0x0060, 0xaf08, 0x3051, 0xaf02, 0x3052, 0xe0c0, 0x0060,
+ 0xa81e, 0x3c50, 0xe0c0, 0x0061, 0xa83e, 0x3c54, 0xe0c1, 0x0065,
+ 0xa809, 0xe0c0, 0x0065, 0xaf06, 0xa806, 0xb632, 0x3c4c, 0xe42e,
+ 0xe0c0, 0x0060, 0x34a0, 0x3ca1, 0xe0c0, 0x0061, 0xae14, 0x34a2,
+ 0x3ca3, 0xe42e, 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0bf5,
+ 0xa102, 0xe42a, 0xa102, 0xf05a, 0xa102, 0xe40a, 0x0c1b, 0xe42e,
+ 0xa200, 0xe0c2, 0x0075, 0xe0c2, 0x0078, 0xe0c2, 0x0079, 0xe0c2,
+ 0x007d, 0xe0c2, 0x007e, 0x2834, 0x2ab1, 0xb7d2, 0xe0c2, 0x0077,
+ 0x2834, 0xe049, 0xa003, 0xb7b6, 0x2a14, 0xb7b6, 0x2ab1, 0xb7f2,
+ 0x2a51, 0x4e52, 0x46b1, 0xb7f2, 0xe0c2, 0x0071, 0x2438, 0x4c39,
+ 0xe0c2, 0x0054, 0x200c, 0x4c0d, 0xae08, 0xe0c2, 0x006f, 0x243a,
+ 0x4c3b, 0xe0c2, 0x0070, 0x2868, 0xe0c2, 0x0072, 0x2812, 0xa802,
+ 0xe0c2, 0x0073, 0xe41e, 0x0c1c, 0xe0c2, 0x007c, 0xa200, 0x2a36,
+ 0xe009, 0x00ff, 0xe056, 0xae10, 0x2a37, 0xe009, 0x00ff, 0xe056,
+ 0xae10, 0x2a35, 0xe009, 0x00ff, 0xe056, 0xae0e, 0x4c13, 0xae02,
+ 0x4c14, 0xe0c2, 0x007a, 0x2878, 0xae02, 0x2a78, 0xa103, 0xb632,
+ 0x2a69, 0xae21, 0xe056, 0xe0c2, 0x0076, 0xc84a, 0xc84d, 0xae20,
+ 0xe056, 0xe0c2, 0x0053, 0xa202, 0xe42e, 0xa200, 0xe0c2, 0x0074,
+ 0xe0c2, 0x0076, 0xe0c2, 0x0077, 0xe0c2, 0x0079, 0xe0c2, 0x007a,
+ 0xa2fe, 0xe0c2, 0x0072, 0xe0c2, 0x006d, 0xa208, 0xe0c2, 0x0073,
+ 0x2008, 0x4c09, 0xe0c2, 0x0071, 0x2813, 0xe0c2, 0x007b, 0xe41e,
+ 0x0c1c, 0xe0c2, 0x0075, 0x2883, 0xe0c2, 0x0070, 0x28f0, 0xe0c2,
+ 0x0078, 0xa202, 0xe42e, 0xe42e, 0x280a, 0xae04, 0x4c0b, 0xae1c,
+ 0x4c08, 0xae1c, 0x4c09, 0xe42e, 0xe41e, 0x0148, 0xe41e, 0x023a,
+ 0xe41e, 0x0ccf, 0xe41e, 0x063b, 0xd130, 0x0007, 0xd131, 0x0002,
+ 0xd04b, 0x0001, 0xd04c, 0x0000, 0xd008, 0x0000, 0xd03a, 0x0000,
+ 0xa200, 0xcc4a, 0xcc4c, 0xa200, 0x3c83, 0xe41e, 0x0b5d, 0xe41e,
+ 0x0ea9, 0xf0da, 0xa200, 0x3cb7, 0xe41e, 0x067c, 0xa100, 0xf07a,
+ 0xe41e, 0x0758, 0x2812, 0xf038, 0xa202, 0x3c83, 0xe41e, 0x0b8b,
+ 0xe41e, 0x0f3f, 0xe16a, 0xe42e, 0xe42e, 0xe41e, 0x058c, 0xe41e,
+ 0x0658, 0xe41e, 0x0dd4, 0xe41e, 0x1330, 0xe42e, 0xa200, 0xcc44,
+ 0xcc4a, 0xcc4c, 0x3c69, 0x3c78, 0xd130, 0x0007, 0xd131, 0x0002,
+ 0xd008, 0x0000, 0xd03a, 0x0000, 0xe41e, 0x0b5d, 0xe41e, 0x0ea9,
+ 0xe40a, 0x0caa, 0xa200, 0x3cb7, 0xe41e, 0x05b1, 0xe41e, 0x066a,
+ 0xe41e, 0x0ea0, 0xe41e, 0x1138, 0xe41e, 0x0dd9, 0xe41e, 0x0b1a,
+ 0x28b1, 0xf298, 0xe41e, 0x0cdc, 0xe41e, 0x06cc, 0xf24a, 0xe41e,
+ 0x0cdc, 0x28b1, 0xf208, 0xe41e, 0x0795, 0xf1da, 0xe41e, 0x0cdc,
+ 0xe41e, 0x06db, 0xf18a, 0xe41e, 0x0cdc, 0x2829, 0xe418, 0x0cd4,
+ 0xe41e, 0x0ce0, 0xf108, 0xe41e, 0x0cdc, 0xe41e, 0x05bc, 0xf0ba,
+ 0xe41e, 0x0cdc, 0xe41e, 0x0b27, 0xe41e, 0x095f, 0xe41e, 0x05e1,
+ 0xe41e, 0x0cd8, 0xe41e, 0x09c6, 0xe41e, 0x0ea2, 0xe41e, 0x11eb,
+ 0xe41e, 0x0e29, 0xe41e, 0x0b8b, 0x2834, 0xa002, 0xe016, 0xe41a,
+ 0x0f3f, 0xe42e, 0xa2fe, 0x3c34, 0x3c35, 0x3c36, 0x3c37, 0x3c3c,
+ 0xe0c0, 0x0054, 0x3438, 0x3c39, 0xa200, 0x3cae, 0x3cb1, 0x3c3d,
+ 0x3c3e, 0x3c3b, 0x3c3a, 0xe42e, 0xca28, 0xf7f8, 0xe42e, 0xe41e,
+ 0x0e45, 0xe41e, 0x12e0, 0xe42e, 0xa204, 0xe41e, 0x0e5d, 0xe42e,
+ 0xa206, 0xe41e, 0x0e5d, 0xe42e, 0x2878, 0xa002, 0x3c78, 0xe42e,
+ 0x284c, 0xe42a, 0xa102, 0xf04a, 0xa102, 0xf05a, 0xf09e, 0x2812,
+ 0xf078, 0xf04e, 0x2812, 0xa104, 0xf03a, 0xa200, 0xe42e, 0xa202,
+ 0xe42e, 0xcb05, 0xe009, 0x2222, 0x2875, 0xae10, 0x4c76, 0xcf06,
+ 0xf058, 0xe16a, 0xe41e, 0x0d41, 0xf0ae, 0xf03b, 0xe41e, 0x0d53,
+ 0xcb05, 0xaf21, 0xa803, 0xf03b, 0xe41e, 0x0d96, 0x2884, 0xa908,
+ 0xcf02, 0x2884, 0xa902, 0xcf02, 0x2a70, 0xcb02, 0xa802, 0xf7e8,
+ 0xe429, 0xcb04, 0xaf14, 0xa802, 0xf7da, 0xe41e, 0x11ef, 0xe41e,
+ 0x1241, 0xe42e, 0x2870, 0xcb05, 0xe009, 0x2222, 0xf07a, 0xf03b,
+ 0xe41e, 0x0d53, 0xe41e, 0x0d7c, 0xe42e, 0xcb05, 0xaf21, 0xa803,
+ 0xf03b, 0xe41e, 0x0d96, 0x2880, 0xe418, 0x0dba, 0xe42e, 0x2875,
+ 0xae10, 0x4c76, 0xcf06, 0x2884, 0xa908, 0xcf02, 0x2884, 0xa906,
+ 0xcf02, 0xcb02, 0xa802, 0xf7e8, 0xe41e, 0x11ef, 0xe41e, 0x1241,
+ 0xe42e, 0x2a70, 0xa200, 0x3c46, 0x3c85, 0x3c49, 0x3c86, 0xf0b9,
+ 0xe41e, 0x0d62, 0xe41e, 0x0d62, 0x2880, 0xf058, 0xe41e, 0x0da0,
+ 0xe41e, 0x0da0, 0xe42e, 0x3e9a, 0x2870, 0xa845, 0xf05a, 0xf03b,
+ 0xe41e, 0x0d7c, 0xe42e, 0x2a9a, 0xe009, 0x0200, 0xf03b, 0xe41e,
+ 0x0d62, 0xe42e, 0x2044, 0x4c45, 0x2e46, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0x2a85, 0xe004, 0x0100, 0xf03b, 0xe004, 0x0120,
+ 0xce22, 0xd112, 0x0020, 0xd113, 0x0019, 0x2885, 0xaa02, 0x3c85,
+ 0x2c46, 0xa002, 0x3c46, 0xe42e, 0x2044, 0x4c45, 0x2e46, 0xae11,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0x2a85, 0xe004, 0x0100, 0xf03b,
+ 0xe004, 0x0120, 0xce22, 0xd112, 0x0020, 0xd113, 0x0018, 0x2885,
+ 0xaa02, 0x3c85, 0x2c46, 0xa002, 0x3c46, 0xe42e, 0x2870, 0xf088,
+ 0x2880, 0xf04a, 0xe41e, 0x0dba, 0xe42e, 0xe41e, 0x0da0, 0xe42e,
+ 0x2047, 0x4c48, 0x2e49, 0xae11, 0xe042, 0xca29, 0xf7f9, 0xce20,
+ 0x2a86, 0xe004, 0x0080, 0xf03b, 0xe004, 0x00a0, 0xce22, 0xd112,
+ 0x0020, 0xd113, 0x0019, 0x2886, 0xaa02, 0x3c86, 0x2c49, 0xa002,
+ 0x3c49, 0xe42e, 0x2047, 0x4c48, 0x2e49, 0xae11, 0xe042, 0xca29,
+ 0xf7f9, 0xce20, 0x2a86, 0xe004, 0x0080, 0xf03b, 0xe004, 0x00a0,
+ 0xce22, 0xd112, 0x0020, 0xd113, 0x0018, 0x2886, 0xaa02, 0x3c86,
+ 0x2c49, 0xa002, 0x3c49, 0xe42e, 0xa2fe, 0x3c53, 0xa200, 0x3c51,
+ 0xe42e, 0x283f, 0x3c53, 0x2853, 0xf032, 0xa200, 0x3c51, 0xa200,
+ 0x3c58, 0x3c59, 0x280c, 0x3c56, 0x280d, 0x3c57, 0x2851, 0xe42a,
+ 0x2853, 0xe424, 0x2853, 0xe0c2, 0x0143, 0x2854, 0xe0c2, 0x0144,
+ 0xa200, 0xe0c2, 0x017f, 0xe0c2, 0x0149, 0xe41e, 0x1310, 0xe0c2,
+ 0x017f, 0x2856, 0xa102, 0xae20, 0x4c57, 0xa102, 0xe0c2, 0x0142,
+ 0xa200, 0xae20, 0x2a50, 0xe042, 0xe0c2, 0x014e, 0xe42e, 0x2853,
+ 0x2a59, 0x1a57, 0xe423, 0x2858, 0xae0e, 0x4c59, 0xa203, 0xb615,
+ 0x3e5a, 0x2a5a, 0xae03, 0xa903, 0xae1d, 0xe056, 0xe0c1, 0x014b,
+ 0xf7e9, 0xe0c2, 0x014d, 0xa202, 0xe0c2, 0x014a, 0x2a58, 0xa003,
+ 0x3e58, 0x1a56, 0xf065, 0x2a59, 0xa003, 0x3e59, 0xa201, 0x3e58,
+ 0xe42e, 0x2851, 0xf15a, 0x2859, 0x1857, 0xf042, 0xe41e, 0x0e07,
+ 0xf7be, 0xe0c0, 0x014b, 0xf7e8, 0xa204, 0xae1c, 0xe0c2, 0x014d,
+ 0xa202, 0xe0c2, 0x014a, 0xe190, 0xe0c0, 0x014b, 0xf7e8, 0x2a14,
+ 0x2834, 0xb7f6, 0x3c3f, 0x3c53, 0xe42e, 0xa200, 0xe0c1, 0x0040,
+ 0xe042, 0xe005, 0x0059, 0xae17, 0xe042, 0xe005, 0x1600, 0xae03,
+ 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0200, 0xd112, 0x0450,
+ 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0x3c90, 0x2042, 0x4c43,
+ 0xca29, 0xf7f9, 0xce20, 0xd111, 0x0200, 0xd112, 0x0450, 0x2890,
+ 0xce26, 0xca28, 0xf7f8, 0xe42e, 0xcca4, 0xe182, 0x0108, 0xe018,
+ 0xae02, 0xe0c1, 0x0040, 0xe042, 0xe005, 0x0059, 0xae17, 0xe042,
+ 0xe005, 0x1a50, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0900, 0xd112, 0x0108, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0xa200, 0xe0c1, 0x0040, 0xe042, 0xe005, 0x0059, 0xae17, 0xe042,
+ 0xe005, 0x1f50, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0650, 0xd112, 0x0028, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0xa202, 0xe42e, 0xa202, 0xe42e, 0xe42e, 0xe42e, 0xe42e, 0xe42e,
+ 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x0eb6, 0xa102, 0xe40a,
+ 0x0ed8, 0xa102, 0xe40a, 0x0ebe, 0xe40e, 0x0ed8, 0xe41e, 0x023a,
+ 0x24a0, 0x4ca1, 0x04a2, 0x0ca3, 0x34a4, 0x3ca5, 0xa206, 0xae1e,
+ 0xcec0, 0xd160, 0x0600, 0xe0c0, 0x0048, 0xe0c2, 0x0051, 0x34aa,
+ 0x3cab, 0x34a6, 0xe008, 0xfe00, 0x3ca7, 0x2cab, 0xe008, 0x01ff,
+ 0x3cac, 0xe41e, 0x10a1, 0xf07d, 0xe41e, 0x0f20, 0xe41e, 0x0f0b,
+ 0xa202, 0xe42e, 0xa200, 0xe16a, 0xe42e, 0xe41e, 0x0ee0, 0xe470,
+ 0xca28, 0xf7f8, 0xe004, 0x0080, 0xce24, 0x28af, 0xae0e, 0xce22,
+ 0x24a6, 0x4ca7, 0xce20, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa022,
+ 0xce26, 0xca28, 0xf7f8, 0x24a6, 0x4ca7, 0xe000, 0x0200, 0x34a6,
+ 0x3ca7, 0x14a4, 0x1ca5, 0xf054, 0x24a0, 0x4ca1, 0x34a6, 0x3ca7,
+ 0xd04c, 0x0000, 0x28af, 0xae0e, 0xcc6e, 0x28af, 0xe016, 0x3caf,
+ 0xe42e, 0x28b1, 0xe42e, 0xa200, 0x3caf, 0xce92, 0xe41e, 0x0ee0,
+ 0xe41e, 0x0ee0, 0xe128, 0xd071, 0x2020, 0xe181, 0x2cac, 0xa102,
+ 0xf074, 0xcc44, 0xe184, 0x0f1d, 0xba4e, 0xe190, 0xe190, 0xe42e,
+ 0xe004, 0x1495, 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd034, 0x0000,
+ 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0000,
+ 0xd038, 0x0000, 0xd039, 0x0000, 0xd04b, 0x0001, 0xd04c, 0x0000,
+ 0xd046, 0x0000, 0xd047, 0x0000, 0xd149, 0x0000, 0xe42e, 0xe0c0,
+ 0x0059, 0xa102, 0xe40a, 0x0f4a, 0xa102, 0xe42a, 0xa102, 0xe40a,
+ 0x0f4a, 0xe42a, 0x24b4, 0x4cb5, 0x04aa, 0x0cab, 0x34aa, 0x3cab,
+ 0x14a4, 0x1ca5, 0xf074, 0x24aa, 0x4cab, 0x14a2, 0x1ca3, 0x34aa,
+ 0x3cab, 0x24aa, 0x4cab, 0xe0c2, 0x0048, 0xe0c2, 0x0052, 0xe42e,
+ 0xa200, 0x34b4, 0x3cb5, 0xe42e, 0xf0a8, 0x2911, 0xe008, 0xffff,
+ 0xae20, 0x2b11, 0xe009, 0xffff, 0xe042, 0xf0fe, 0x2911, 0xe008,
+ 0x00ff, 0xae20, 0x2b11, 0xe009, 0xffff, 0xe042, 0xae10, 0x2b11,
+ 0xe009, 0xff00, 0xaf11, 0xe042, 0x2ab6, 0xe42b, 0xe049, 0xaf31,
+ 0xe009, 0x00ff, 0xe093, 0xe049, 0xaf21, 0xe009, 0x00ff, 0xe095,
+ 0xe049, 0xaf11, 0xe009, 0x00ff, 0xe008, 0x00ff, 0xae10, 0xe056,
+ 0xae10, 0xe085, 0xe056, 0xae10, 0xe083, 0xe056, 0xe42e, 0xe049,
+ 0xa80f, 0xe046, 0xe42e, 0xca29, 0xf7f9, 0xd111, 0x07c0, 0xce20,
+ 0x26a4, 0x4ea5, 0xe045, 0xe004, 0x0040, 0xe065, 0xaf03, 0xce25,
+ 0x3eb0, 0xe41e, 0x0fb9, 0xa240, 0x18b0, 0xe426, 0xce24, 0x28b0,
+ 0xe000, 0x07c0, 0xce22, 0x24a0, 0x4ca1, 0xce20, 0xe41e, 0x0fb9,
+ 0xe42e, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa002, 0xce26, 0xca28,
+ 0xf7f8, 0xe42e, 0x34b8, 0x3cb9, 0xa200, 0x3cad, 0xe0c0, 0x0049,
+ 0x34ba, 0x3cbb, 0xe0c0, 0x0045, 0xaf04, 0x30ae, 0xe0c0, 0x0049,
+ 0x34a8, 0x3ca9, 0x10ba, 0x1cbb, 0x2aad, 0xb611, 0x3ead, 0x26a8,
+ 0x4ea9, 0x16b8, 0x1eb9, 0xf033, 0x06a2, 0x0ea3, 0x16b2, 0x1eb3,
+ 0xa200, 0xe423, 0x28ae, 0x3cb1, 0xe428, 0x28ad, 0xf648, 0xe41e,
+ 0x01db, 0xe0c0, 0x005c, 0xe008, 0x4000, 0xf5da, 0xe0c0, 0x005d,
+ 0xe00a, 0x4000, 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3cad, 0xf53e,
+ 0xe004, 0x06a0, 0x2a8b, 0xae03, 0xe042, 0xe09c, 0x2516, 0x4d16,
+ 0x26aa, 0x4eab, 0xa019, 0xe042, 0xe049, 0xe008, 0x01ff, 0xe045,
+ 0x36a6, 0x3ea7, 0x3cac, 0x24a6, 0x4ca7, 0x14a4, 0x1ca5, 0xf054,
+ 0x04a0, 0x0ca1, 0x34a6, 0x3ca7, 0xe41e, 0x0f20, 0xe41e, 0x0f0b,
+ 0xa200, 0xcc72, 0xe42e, 0xe004, 0x08c0, 0x2a8b, 0xae05, 0xe042,
+ 0xe09c, 0x20a6, 0x4ca7, 0x3516, 0x3d16, 0x28ac, 0x3d16, 0x28af,
+ 0x3d16, 0xe41e, 0x1053, 0xe42e, 0xe41e, 0x0f20, 0xe004, 0x08c0,
+ 0x2a8b, 0xae05, 0xe042, 0xe09c, 0x2116, 0x4d16, 0x34a6, 0x3ca7,
+ 0x2916, 0x3cac, 0x2916, 0x3caf, 0xae0e, 0xce92, 0xe41e, 0x1079,
+ 0xe42e, 0x3c90, 0xca29, 0xf7f9, 0xd111, 0x0000, 0x288b, 0xae14,
+ 0x264a, 0x4e4b, 0xe042, 0xce20, 0xd112, 0x0100, 0x2890, 0xce26,
+ 0xca29, 0xf7f9, 0xe42e, 0xe004, 0x0800, 0x2a8b, 0xcca5, 0xc798,
+ 0xe01c, 0xe09c, 0xc860, 0x3516, 0x3d16, 0xc862, 0x3516, 0x3d16,
+ 0xc864, 0x3516, 0x3d16, 0xc866, 0x3d16, 0xc868, 0x3d16, 0xc86a,
+ 0x3d16, 0xc86c, 0x3d16, 0xc86e, 0x3d16, 0xc870, 0x3d16, 0xc872,
+ 0x3516, 0x3d16, 0xc88c, 0x3516, 0x3d16, 0xcb20, 0x3516, 0x3d16,
+ 0xe42e, 0xe004, 0x0800, 0x2a8b, 0xcca5, 0xc798, 0xe01c, 0xe09c,
+ 0x2116, 0x4d16, 0xcc60, 0x2116, 0x4d16, 0xcc62, 0x2116, 0x4d16,
+ 0xcc64, 0x2916, 0xcc66, 0x2916, 0xcc68, 0x2916, 0xcc6a, 0x2916,
+ 0xcc6c, 0x2916, 0xcc6e, 0x2916, 0xcc70, 0x2116, 0x4d16, 0xcc72,
+ 0x2116, 0x4d16, 0xcc8c, 0x2116, 0x4d16, 0xaf08, 0xae08, 0xcf20,
+ 0xe42e, 0xe0c0, 0x0059, 0xa102, 0xe40a, 0x10ac, 0xa102, 0xe42a,
+ 0xa102, 0xe40a, 0x10e5, 0xe42e, 0xa202, 0x3cb6, 0xa240, 0x34b2,
+ 0x3cb3, 0x24aa, 0x4cab, 0xd027, 0x0000, 0xe41e, 0x0fc2, 0xd027,
+ 0x0001, 0xe408, 0x10e3, 0x24aa, 0x4cab, 0xe41e, 0x0f97, 0xe095,
+ 0xe41e, 0x0f9b, 0xe084, 0xa00c, 0xaf02, 0xe000, 0x07c0, 0xe092,
+ 0xe084, 0xa802, 0xe41e, 0x0f64, 0xe008, 0xffff, 0x34b4, 0x3cb5,
+ 0xa140, 0xf114, 0x24b4, 0x4cb5, 0xa02c, 0x34b2, 0x3cb3, 0x24aa,
+ 0x4cab, 0xd027, 0x0000, 0xe41e, 0x0fc2, 0xd027, 0x0001, 0xf048,
+ 0xa200, 0xe42e, 0xe16b, 0xa202, 0xe42e, 0xa218, 0x34b2, 0x3cb3,
+ 0x24aa, 0x4cab, 0xd027, 0x0000, 0xe41e, 0x0fc2, 0xd027, 0x0001,
+ 0xf2f8, 0x24aa, 0x4cab, 0xe41e, 0x0f97, 0xe095, 0xe41e, 0x0f9b,
+ 0xe084, 0xaf02, 0xe000, 0x07c0, 0xe092, 0xe41e, 0x1124, 0xe084,
+ 0xa802, 0xe41e, 0x0f64, 0x00b4, 0x0cb5, 0x34b4, 0x3cb5, 0xf186,
+ 0x26a2, 0x4ea3, 0xe046, 0xf142, 0x24b4, 0x4cb5, 0xa018, 0x34b4,
+ 0x3cb5, 0x34b2, 0x3cb3, 0x24aa, 0x4cab, 0xd027, 0x0000, 0xe41e,
+ 0x0fc2, 0xd027, 0x0001, 0xf048, 0xa200, 0xe42e, 0xe16b, 0xa200,
+ 0x34b4, 0x3cb5, 0xa202, 0xe42e, 0x2111, 0x4d09, 0xe005, 0x0044,
+ 0xae11, 0xa997, 0xae11, 0xa993, 0xae11, 0xa98d, 0xe046, 0xa241,
+ 0xb611, 0x36b4, 0x3eb5, 0xaf03, 0xe082, 0xe042, 0xe092, 0xe42e,
+ 0xa20e, 0xa940, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x013d, 0xa200,
+ 0xe0c2, 0x0128, 0x2a51, 0x4e52, 0xb692, 0xae08, 0xa91c, 0xe0c2,
+ 0x017c, 0xa218, 0xe0c2, 0x017d, 0xa200, 0xe41e, 0x1310, 0xe0c2,
+ 0x0102, 0xe42e, 0xe41e, 0x0274, 0xa202, 0xe0c2, 0x0106, 0xe42e,
+ 0xa20e, 0xa940, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x013d, 0x2a51,
+ 0x4e52, 0xb692, 0xae08, 0xa91c, 0xe0c2, 0x017c, 0xa218, 0xe0c2,
+ 0x017d, 0xe0c1, 0x0046, 0xe004, 0x0000, 0xae10, 0xe042, 0x2a40,
+ 0xa805, 0xf05b, 0xe161, 0x06b7, 0x2111, 0x4d11, 0xe0c2, 0x0103,
+ 0xa202, 0xe0c2, 0x0210, 0xe0c1, 0x0046, 0xe004, 0x0030, 0xae10,
+ 0xe042, 0x2a40, 0xa809, 0xf05b, 0xe161, 0x06b9, 0x2111, 0x4d11,
+ 0xe0c2, 0x0211, 0xe0c1, 0x0046, 0xe004, 0x0030, 0xe000, 0x0040,
+ 0xae10, 0xe042, 0x2a40, 0xa811, 0xf05b, 0xe161, 0x06bb, 0x2111,
+ 0x4d11, 0xe0c2, 0x0212, 0x200c, 0x4c0d, 0xae08, 0xe0c2, 0x0101,
+ 0xe0c2, 0x0205, 0xa200, 0xe41e, 0x1310, 0xe0c2, 0x0102, 0x2812,
+ 0xa802, 0xae06, 0xe0c2, 0x0104, 0xa20e, 0xae04, 0xa904, 0xae04,
+ 0x4c12, 0xae06, 0xa900, 0xe0c2, 0x0204, 0xa200, 0xe0c2, 0x0208,
+ 0xa200, 0xe41e, 0x1310, 0xa203, 0xae11, 0xe056, 0xe0c2, 0x0213,
+ 0xa200, 0xe0c2, 0x0215, 0xe0c2, 0x0216, 0xe0c2, 0x0216, 0x2834,
+ 0xe0c2, 0x020b, 0xe0c2, 0x0214, 0x281c, 0xe0c2, 0x0217, 0xe166,
+ 0x06b0, 0x2916, 0xe0c2, 0x0154, 0x2116, 0x4d16, 0xe0c2, 0x0155,
+ 0x2116, 0x4d16, 0xe0c2, 0x0156, 0xe41e, 0x12f8, 0xe41e, 0x12cb,
+ 0xe41e, 0x124f, 0xa200, 0xe0c2, 0x0113, 0xe0c2, 0x030d, 0xe0c2,
+ 0x022b, 0xa202, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xcbb2,
+ 0xaf10, 0xa8fe, 0x3c87, 0xae30, 0xe0c2, 0x0115, 0xcbb2, 0xa820,
+ 0xa27f, 0xb611, 0xe0c3, 0x012a, 0xcbb2, 0x3088, 0xe049, 0xa803,
+ 0xae03, 0xe05a, 0xa814, 0xe01a, 0xae14, 0xcbb3, 0xa81f, 0xe056,
+ 0xe0c2, 0x0114, 0x2888, 0xcbb5, 0xf178, 0xa105, 0x2089, 0x4c8a,
+ 0xf039, 0xae02, 0xf06e, 0xa103, 0xf049, 0xe049, 0xae02, 0xe056,
+ 0xe0c2, 0x030a, 0xe004, 0x0055, 0xe0c2, 0x030c, 0xe0c0, 0x03b0,
+ 0x349b, 0x3c9c, 0xe42e, 0x2875, 0xa002, 0x180c, 0xe01a, 0x2a76,
+ 0xe01b, 0xe052, 0xa201, 0xb691, 0x2875, 0xb431, 0x2876, 0xb451,
+ 0xe04a, 0xa806, 0xa106, 0xb495, 0xb495, 0xe0c3, 0x0120, 0xcbb8,
+ 0xe0c2, 0x0121, 0xcbba, 0xe0c2, 0x0122, 0xcbbc, 0xe0c2, 0x0123,
+ 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xa202, 0xe0c2, 0x0110, 0x2851,
+ 0x4c52, 0xe42a, 0x2859, 0x1857, 0xe414, 0x0e07, 0xe42e, 0xa200,
+ 0xe0c2, 0x030b, 0xa202, 0xe0c2, 0x0302, 0x2835, 0xb608, 0xe0c2,
+ 0x0380, 0x2835, 0xb608, 0xe0c2, 0x0383, 0x2836, 0xb608, 0xe0c2,
+ 0x0386, 0x2837, 0xb608, 0xe0c2, 0x0389, 0xa200, 0xe0c2, 0x0302,
+ 0xe004, 0x0421, 0x3c89, 0xe004, 0x0842, 0x3c8a, 0xa200, 0xe0c2,
+ 0x0303, 0x2879, 0xae0c, 0xe0c2, 0x0330, 0xa200, 0xe0c2, 0x0308,
+ 0x2879, 0xe166, 0x06e0, 0xe167, 0x0331, 0xf038, 0xe166, 0x06c0,
+ 0xd022, 0x0007, 0xe184, 0x128b, 0x2916, 0xae10, 0x4d16, 0xae10,
+ 0x4d16, 0xae10, 0x4d16, 0x9f17, 0xe190, 0xa20e, 0xe0c2, 0x0312,
+ 0xe0c0, 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414, 0xe41a, 0x1299,
+ 0xe42e, 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17,
+ 0xe009, 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101,
+ 0xe0c3, 0x015d, 0xe005, 0x001b, 0x3e00, 0x2835, 0xa53e, 0xa400,
+ 0x2a36, 0xa53f, 0xa401, 0xae11, 0xe055, 0xae21, 0xe167, 0x01a2,
+ 0x2907, 0xaf10, 0x4400, 0xe055, 0xe0c3, 0x015c, 0xa202, 0xe0c2,
+ 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xa200, 0xe0c2, 0x0150, 0xe0c0,
+ 0x0151, 0xf7e8, 0xe42e, 0xa202, 0xe0c2, 0x013c, 0xa201, 0xe166,
+ 0x0200, 0xd022, 0x00ff, 0xe184, 0x12da, 0x2916, 0xe0c3, 0x013e,
+ 0xe0c2, 0x013f, 0xa003, 0xe190, 0xa200, 0xe0c2, 0x013c, 0xe42e,
+ 0xa200, 0xe0c1, 0x0040, 0xe042, 0xe005, 0x0059, 0xae17, 0xe042,
+ 0xe005, 0x1f80, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x06c0, 0xd112, 0x0040, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0xa200, 0xe0c1, 0x0040, 0xe042, 0xe005, 0x0059, 0xae17, 0xe042,
+ 0xe005, 0x1fc0, 0xae03, 0xe042, 0xca29, 0xf7f9, 0xce20, 0xd111,
+ 0x0200, 0xd112, 0x0100, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe42e, 0xa200, 0xe41e, 0x1310,
+ 0xe42e, 0xe0c1, 0x0044, 0xaf0d, 0xae03, 0xe056, 0xe008, 0x003f,
+ 0xe42e, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xe42e, 0xe0c1, 0x0044,
+ 0xaf17, 0xa803, 0xa105, 0xf039, 0xa213, 0xe42e, 0xa201, 0xe42e,
+ 0xa203, 0xe0c3, 0x040d, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xe160,
+ 0x0003, 0xe166, 0x0700, 0xe167, 0x0500, 0x2833, 0xf166, 0xa102,
+ 0xcc44, 0xe184, 0x1353, 0xa200, 0xe41e, 0x1310, 0xaf04, 0xe41e,
+ 0x1319, 0xae20, 0x2e32, 0xe056, 0x9f17, 0x200c, 0x4c0d, 0xae08,
+ 0x9f17, 0xe41e, 0x1359, 0xe190, 0xe190, 0xa201, 0xe0c3, 0x040d,
+ 0xe42e, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116,
+ 0x4d16, 0x9f17, 0xe42e, 0xe0c0, 0x0044, 0xaf20, 0xa802, 0xe428,
+ 0xe0c0, 0x0060, 0xa860, 0xe42a, 0xe0c0, 0x0061, 0xa83e, 0xa203,
+ 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500, 0xe09e,
+ 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e, 0x1315, 0xa80e,
+ 0xaf04, 0xe41e, 0x1319, 0xe41e, 0x1321, 0xe40b, 0x138c, 0xa81e,
+ 0xe41e, 0x1326, 0xae09, 0xe056, 0xae20, 0xe0c1, 0x006e, 0xe009,
+ 0x1fff, 0xe056, 0x9f17, 0xe0c0, 0x0060, 0xa822, 0xa122, 0xf04a,
+ 0x2056, 0x4c57, 0xf03e, 0x2057, 0x4c56, 0xae08, 0x9f17, 0xe0c0,
+ 0x0062, 0x9f17, 0xe0c0, 0x0063, 0x9f17, 0xe0c0, 0x0064, 0x9f17,
+ 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x2834, 0xf1f4, 0xa203, 0xe0c3,
+ 0x040d, 0xcca4, 0xc785, 0xe019, 0xe001, 0x0500, 0xe09f, 0xe0c1,
+ 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e, 0x1310, 0xaf04, 0xe41e,
+ 0x1319, 0xae20, 0x2e32, 0xe056, 0x9f17, 0x200c, 0x4c0d, 0xae08,
+ 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0x3cec, 0xe0c0, 0x0041,
+ 0xe005, 0x0020, 0xae11, 0xe042, 0xce20, 0xd111, 0x0700, 0xd112,
+ 0x00c0, 0x88ec, 0x0113, 0xca29, 0xf7f9, 0xe190, 0xe42e, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0070, 0x0056, 0x008c, 0x0025, 0x00a2,
+ 0x0065, 0x00cc, 0x00a2, 0x0080, 0x00e1, 0x0092, 0x00ac, 0x0093,
+ 0x00d6, 0x0027, 0x009c, 0x0080, 0x0081, 0x0084, 0x004b, 0x0091,
+ 0x00b2, 0x00ce, 0x00ef, 0x00fe, 0x00fe, 0x00a4, 0x0080, 0x00cc,
+ 0x00aa, 0x0077, 0x00eb, 0x008c, 0x00e6, 0x00e4, 0x0080, 0x0082,
+ 0x0082, 0x004a, 0x0094, 0x00b4, 0x00cb, 0x00ec, 0x00fe, 0x00fe,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x00fd, 0x0088, 0x00fe, 0x00ff, 0x00e4, 0x00db, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x00bd, 0x0081, 0x00f2, 0x00ff,
+ 0x00e3, 0x00d5, 0x00ff, 0x00db, 0x0080, 0x0080, 0x0080, 0x006a,
+ 0x007e, 0x00e3, 0x00fc, 0x00d6, 0x00d1, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0001, 0x0062, 0x00f8, 0x00ff, 0x00ec, 0x00e2,
+ 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x00b5, 0x0085, 0x00ee,
+ 0x00fe, 0x00dd, 0x00ea, 0x00ff, 0x009a, 0x0080, 0x0080, 0x0080,
+ 0x004e, 0x0086, 0x00ca, 0x00f7, 0x00c6, 0x00b4, 0x00ff, 0x00db,
+ 0x0080, 0x0080, 0x0080, 0x0001, 0x00b9, 0x00f9, 0x00ff, 0x00f3,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00b8, 0x0096,
+ 0x00f7, 0x00ff, 0x00ec, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x004d, 0x006e, 0x00d8, 0x00ff, 0x00ec, 0x00e6, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0065, 0x00fb, 0x00ff,
+ 0x00f1, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00aa,
+ 0x008b, 0x00f1, 0x00fc, 0x00ec, 0x00d1, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0025, 0x0074, 0x00c4, 0x00f3, 0x00e4, 0x00ff,
+ 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0001, 0x00cc, 0x00fe,
+ 0x00ff, 0x00f5, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00cf, 0x00a0, 0x00fa, 0x00ff, 0x00ee, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0066, 0x0067, 0x00e7, 0x00ff, 0x00d3,
+ 0x00ab, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0098,
+ 0x00fc, 0x00ff, 0x00f0, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x00b1, 0x0087, 0x00f3, 0x00ff, 0x00ea, 0x00e1, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0050, 0x0081, 0x00d3, 0x00ff,
+ 0x00c2, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001,
+ 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x00f6, 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00c6, 0x0023, 0x00ed, 0x00df, 0x00c1, 0x00bb, 0x00a2, 0x00a0,
+ 0x0091, 0x009b, 0x003e, 0x0083, 0x002d, 0x00c6, 0x00dd, 0x00ac,
+ 0x00b0, 0x00dc, 0x009d, 0x00fc, 0x00dd, 0x0001, 0x0044, 0x002f,
+ 0x0092, 0x00d0, 0x0095, 0x00a7, 0x00dd, 0x00a2, 0x00ff, 0x00df,
+ 0x0080, 0x0001, 0x0095, 0x00f1, 0x00ff, 0x00dd, 0x00e0, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x00b8, 0x008d, 0x00ea, 0x00fd,
+ 0x00de, 0x00dc, 0x00ff, 0x00c7, 0x0080, 0x0080, 0x0080, 0x0051,
+ 0x0063, 0x00b5, 0x00f2, 0x00b0, 0x00be, 0x00f9, 0x00ca, 0x00ff,
+ 0x00ff, 0x0080, 0x0001, 0x0081, 0x00e8, 0x00fd, 0x00d6, 0x00c5,
+ 0x00f2, 0x00c4, 0x00ff, 0x00ff, 0x0080, 0x0063, 0x0079, 0x00d2,
+ 0x00fa, 0x00c9, 0x00c6, 0x00ff, 0x00ca, 0x0080, 0x0080, 0x0080,
+ 0x0017, 0x005b, 0x00a3, 0x00f2, 0x00aa, 0x00bb, 0x00f7, 0x00d2,
+ 0x00ff, 0x00ff, 0x0080, 0x0001, 0x00c8, 0x00f6, 0x00ff, 0x00ea,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x006d, 0x00b2,
+ 0x00f1, 0x00ff, 0x00e7, 0x00f5, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x002c, 0x0082, 0x00c9, 0x00fd, 0x00cd, 0x00c0, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0001, 0x0084, 0x00ef, 0x00fb,
+ 0x00db, 0x00d1, 0x00ff, 0x00a5, 0x0080, 0x0080, 0x0080, 0x005e,
+ 0x0088, 0x00e1, 0x00fb, 0x00da, 0x00be, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0016, 0x0064, 0x00ae, 0x00f5, 0x00ba, 0x00a1,
+ 0x00ff, 0x00c7, 0x0080, 0x0080, 0x0080, 0x0001, 0x00b6, 0x00f9,
+ 0x00ff, 0x00e8, 0x00eb, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x007c, 0x008f, 0x00f1, 0x00ff, 0x00e3, 0x00ea, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0023, 0x004d, 0x00b5, 0x00fb, 0x00c1,
+ 0x00d3, 0x00ff, 0x00cd, 0x0080, 0x0080, 0x0080, 0x0001, 0x009d,
+ 0x00f7, 0x00ff, 0x00ec, 0x00e7, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0079, 0x008d, 0x00eb, 0x00ff, 0x00e1, 0x00e3, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x002d, 0x0063, 0x00bc, 0x00fb,
+ 0x00c3, 0x00d9, 0x00ff, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0001,
+ 0x0001, 0x00fb, 0x00ff, 0x00d5, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x00cb, 0x0001, 0x00f8, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0089, 0x0001, 0x00b1,
+ 0x00ff, 0x00e0, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00fd, 0x0009, 0x00f8, 0x00fb, 0x00cf, 0x00d0, 0x00ff, 0x00c0,
+ 0x0080, 0x0080, 0x0080, 0x00af, 0x000d, 0x00e0, 0x00f3, 0x00c1,
+ 0x00b9, 0x00f9, 0x00c6, 0x00ff, 0x00ff, 0x0080, 0x0049, 0x0011,
+ 0x00ab, 0x00dd, 0x00a1, 0x00b3, 0x00ec, 0x00a7, 0x00ff, 0x00ea,
+ 0x0080, 0x0001, 0x005f, 0x00f7, 0x00fd, 0x00d4, 0x00b7, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x00ef, 0x005a, 0x00f4, 0x00fa,
+ 0x00d3, 0x00d1, 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x009b,
+ 0x004d, 0x00c3, 0x00f8, 0x00bc, 0x00c3, 0x00ff, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0001, 0x0018, 0x00ef, 0x00fb, 0x00da, 0x00db,
+ 0x00ff, 0x00cd, 0x0080, 0x0080, 0x0080, 0x00c9, 0x0033, 0x00db,
+ 0x00ff, 0x00c4, 0x00ba, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0045, 0x002e, 0x00be, 0x00ef, 0x00c9, 0x00da, 0x00ff, 0x00e4,
+ 0x0080, 0x0080, 0x0080, 0x0001, 0x00bf, 0x00fb, 0x00ff, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00df, 0x00a5,
+ 0x00f9, 0x00ff, 0x00d5, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x008d, 0x007c, 0x00f8, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0010, 0x00f8, 0x00ff,
+ 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00be,
+ 0x0024, 0x00e6, 0x00ff, 0x00ec, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0095, 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x00e2, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00f7, 0x00c0, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x00f0, 0x0080, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0001, 0x0086,
+ 0x00fc, 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x00d5, 0x003e, 0x00fa, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0037, 0x005d, 0x00ff, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00ca, 0x0018, 0x00d5, 0x00eb, 0x00ba, 0x00bf, 0x00dc, 0x00a0,
+ 0x00f0, 0x00af, 0x00ff, 0x007e, 0x0026, 0x00b6, 0x00e8, 0x00a9,
+ 0x00b8, 0x00e4, 0x00ae, 0x00ff, 0x00bb, 0x0080, 0x003d, 0x002e,
+ 0x008a, 0x00db, 0x0097, 0x00b2, 0x00f0, 0x00aa, 0x00ff, 0x00d8,
+ 0x0080, 0x0001, 0x0070, 0x00e6, 0x00fa, 0x00c7, 0x00bf, 0x00f7,
+ 0x009f, 0x00ff, 0x00ff, 0x0080, 0x00a6, 0x006d, 0x00e4, 0x00fc,
+ 0x00d3, 0x00d7, 0x00ff, 0x00ae, 0x0080, 0x0080, 0x0080, 0x0027,
+ 0x004d, 0x00a2, 0x00e8, 0x00ac, 0x00b4, 0x00f5, 0x00b2, 0x00ff,
+ 0x00ff, 0x0080, 0x0001, 0x0034, 0x00dc, 0x00f6, 0x00c6, 0x00c7,
+ 0x00f9, 0x00dc, 0x00ff, 0x00ff, 0x0080, 0x007c, 0x004a, 0x00bf,
+ 0x00f3, 0x00b7, 0x00c1, 0x00fa, 0x00dd, 0x00ff, 0x00ff, 0x0080,
+ 0x0018, 0x0047, 0x0082, 0x00db, 0x009a, 0x00aa, 0x00f3, 0x00b6,
+ 0x00ff, 0x00ff, 0x0080, 0x0001, 0x00b6, 0x00e1, 0x00f9, 0x00db,
+ 0x00f0, 0x00ff, 0x00e0, 0x0080, 0x0080, 0x0080, 0x0095, 0x0096,
+ 0x00e2, 0x00fc, 0x00d8, 0x00cd, 0x00ff, 0x00ab, 0x0080, 0x0080,
+ 0x0080, 0x001c, 0x006c, 0x00aa, 0x00f2, 0x00b7, 0x00c2, 0x00fe,
+ 0x00df, 0x00ff, 0x00ff, 0x0080, 0x0001, 0x0051, 0x00e6, 0x00fc,
+ 0x00cc, 0x00cb, 0x00ff, 0x00c0, 0x0080, 0x0080, 0x0080, 0x007b,
+ 0x0066, 0x00d1, 0x00f7, 0x00bc, 0x00c4, 0x00ff, 0x00e9, 0x0080,
+ 0x0080, 0x0080, 0x0014, 0x005f, 0x0099, 0x00f3, 0x00a4, 0x00ad,
+ 0x00ff, 0x00cb, 0x0080, 0x0080, 0x0080, 0x0001, 0x00de, 0x00f8,
+ 0x00ff, 0x00d8, 0x00d5, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00a8, 0x00af, 0x00f6, 0x00fc, 0x00eb, 0x00cd, 0x00ff, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x002f, 0x0074, 0x00d7, 0x00ff, 0x00d3,
+ 0x00d4, 0x00ff, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0001, 0x0079,
+ 0x00ec, 0x00fd, 0x00d4, 0x00d6, 0x00ff, 0x00ff, 0x0080, 0x0080,
+ 0x0080, 0x008d, 0x0054, 0x00d5, 0x00fc, 0x00c9, 0x00ca, 0x00ff,
+ 0x00db, 0x0080, 0x0080, 0x0080, 0x002a, 0x0050, 0x00a0, 0x00f0,
+ 0x00a2, 0x00b9, 0x00ff, 0x00cd, 0x0080, 0x0080, 0x0080, 0x0001,
+ 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x00f4, 0x0001, 0x00ff, 0x0080, 0x0080, 0x0080,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x00ee, 0x0001, 0x00ff,
+ 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080, 0x0080,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00b0, 0x00f6, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00df, 0x00f1, 0x00fc, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f9,
+ 0x00fd, 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00f4, 0x00fc, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ea, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f6, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ef, 0x00fd,
+ 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb,
+ 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fd, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fb, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe,
+ 0x00fd, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fa, 0x00ff, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00d9, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00e1, 0x00fc, 0x00f1, 0x00fd, 0x00ff,
+ 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ea, 0x00fa,
+ 0x00f1, 0x00fa, 0x00fd, 0x00ff, 0x00fd, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00df, 0x00fe, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ee,
+ 0x00fd, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f9, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fd, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f7, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fd, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ba, 0x00fb, 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ea, 0x00fb, 0x00f4, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb, 0x00fb,
+ 0x00f3, 0x00fd, 0x00fe, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fd, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ec, 0x00fd, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb,
+ 0x00fd, 0x00fd, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00f8, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fa, 0x00fe, 0x00fc, 0x00fe, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe,
+ 0x00f9, 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fd, 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f6, 0x00fd, 0x00fd, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc,
+ 0x00fe, 0x00fb, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00fc, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f8, 0x00fe, 0x00fd,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00fe, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00f5, 0x00fb,
+ 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fd, 0x00fd, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fb, 0x00fd, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc,
+ 0x00fd, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fc, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00f9, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00fd, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00fa, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00fe, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff, 0x00ff,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x00ed, 0x00f6, 0x00fd, 0x00fd, 0x00fe, 0x00fe, 0x00fe, 0x00fe,
+ 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fa, 0x00fa,
+ 0x00fc, 0x00fe, 0x00fe, 0x00e7, 0x00f3, 0x00f5, 0x00fd, 0x00fe,
+ 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe, 0x00fe,
+ 0x00fe, 0x00fb, 0x00fb, 0x00fe, 0x00fe, 0x00fe, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0080, 0x0000, 0x0000, 0x0000, 0x0070, 0x0010, 0x0000,
+ 0x0000, 0x0060, 0x0020, 0x0000, 0x0000, 0x0050, 0x0030, 0x0000,
+ 0x0000, 0x0040, 0x0040, 0x0000, 0x0000, 0x0030, 0x0050, 0x0000,
+ 0x0000, 0x0020, 0x0060, 0x0000, 0x0000, 0x0010, 0x0070, 0x0000,
+ 0x0000, 0x0080, 0x0000, 0x0000, 0x0006, 0x007b, 0x000c, 0x0004,
+ 0x008b, 0x006c, 0x0024, 0x0021, 0x0009, 0x005d, 0x0032, 0x0018,
+ 0x00d0, 0x004d, 0x004d, 0x0043, 0x0006, 0x0032, 0x005d, 0x0024,
+ 0x0048, 0x0024, 0x006c, 0x002e, 0x0001, 0x000c, 0x007b, 0x0018,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000a,
+ 0x000b, 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0011,
+ 0x0012, 0x0013, 0x0014, 0x0014, 0x0015, 0x0015, 0x0016, 0x0016,
+ 0x0017, 0x0017, 0x0018, 0x0019, 0x0019, 0x001a, 0x001b, 0x001c,
+ 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023, 0x0024,
+ 0x0025, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b,
+ 0x002c, 0x002d, 0x002e, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032,
+ 0x0033, 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a,
+ 0x003b, 0x003c, 0x003d, 0x003e, 0x003f, 0x0040, 0x0041, 0x0042,
+ 0x0043, 0x0044, 0x0045, 0x0046, 0x0047, 0x0048, 0x0049, 0x004a,
+ 0x004b, 0x004c, 0x004c, 0x004d, 0x004e, 0x004f, 0x0050, 0x0051,
+ 0x0052, 0x0053, 0x0054, 0x0055, 0x0056, 0x0057, 0x0058, 0x0059,
+ 0x005b, 0x005d, 0x005f, 0x0060, 0x0062, 0x0064, 0x0065, 0x0066,
+ 0x0068, 0x006a, 0x006c, 0x006e, 0x0070, 0x0072, 0x0074, 0x0076,
+ 0x007a, 0x007c, 0x007e, 0x0080, 0x0082, 0x0084, 0x0086, 0x0088,
+ 0x008a, 0x008c, 0x008f, 0x0091, 0x0094, 0x0097, 0x009a, 0x009d,
+ 0x0004, 0x0005, 0x0006, 0x0007, 0x0008, 0x0009, 0x000a, 0x000b,
+ 0x000c, 0x000d, 0x000e, 0x000f, 0x0010, 0x0011, 0x0012, 0x0013,
+ 0x0014, 0x0015, 0x0016, 0x0017, 0x0018, 0x0019, 0x001a, 0x001b,
+ 0x001c, 0x001d, 0x001e, 0x001f, 0x0020, 0x0021, 0x0022, 0x0023,
+ 0x0024, 0x0025, 0x0026, 0x0027, 0x0028, 0x0029, 0x002a, 0x002b,
+ 0x002c, 0x002d, 0x002e, 0x002f, 0x0030, 0x0031, 0x0032, 0x0033,
+ 0x0034, 0x0035, 0x0036, 0x0037, 0x0038, 0x0039, 0x003a, 0x003c,
+ 0x003e, 0x0040, 0x0042, 0x0044, 0x0046, 0x0048, 0x004a, 0x004c,
+ 0x004e, 0x0050, 0x0052, 0x0054, 0x0056, 0x0058, 0x005a, 0x005c,
+ 0x005e, 0x0060, 0x0062, 0x0064, 0x0066, 0x0068, 0x006a, 0x006c,
+ 0x006e, 0x0070, 0x0072, 0x0074, 0x0077, 0x007a, 0x007d, 0x0080,
+ 0x0083, 0x0086, 0x0089, 0x008c, 0x008f, 0x0092, 0x0095, 0x0098,
+ 0x009b, 0x009e, 0x00a1, 0x00a4, 0x00a7, 0x00aa, 0x00ad, 0x00b1,
+ 0x00b5, 0x00b9, 0x00bd, 0x00c1, 0x00c5, 0x00c9, 0x00cd, 0x00d1,
+ 0x00d5, 0x00d9, 0x00dd, 0x00e1, 0x00e5, 0x00ea, 0x00ef, 0x00f5,
+ 0x00f9, 0x00fe, 0x0103, 0x0108, 0x010d, 0x0112, 0x0117, 0x011c,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x02f9, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0313, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x02f9, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x0213, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0319, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x031b, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01c5, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa220, 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802,
+ 0xa220, 0xe0c2, 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2,
+ 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0xe42e, 0xe428, 0xa202, 0xe0c2,
+ 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28, 0xf7f8, 0xca48, 0xa802,
+ 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190, 0xf7e2, 0xe0c0, 0x041f,
+ 0xf7e8, 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8,
+ 0xe004, 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0,
+ 0x000d, 0xf7e8, 0xe42e, 0xe41e, 0x0213, 0xd160, 0x0620, 0xe004,
+ 0x0019, 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x0228, 0xe000, 0x0040,
+ 0xce50, 0xa200, 0xd022, 0x00ff, 0xe184, 0x020f, 0xce52, 0xe190,
+ 0xe41e, 0x0230, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72,
+ 0xcc8c, 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a,
+ 0xd16f, 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e,
+ 0xe004, 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e,
+ 0xe004, 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e,
+ 0xe41e, 0x028d, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a,
+ 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02c3, 0xe41e, 0x02f4, 0xae12,
+ 0xe0c2, 0x041e, 0xe41e, 0x02e7, 0xe42e, 0xe41e, 0x02b1, 0xe42a,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0,
+ 0x0215, 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0,
+ 0x0213, 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0,
+ 0x020b, 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02c3, 0xe41e,
+ 0x02f4, 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1,
+ 0x0204, 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f,
+ 0xe056, 0xe0c2, 0x041e, 0xe41e, 0x02e7, 0xe42e, 0xe0c0, 0x041f,
+ 0xf7e8, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203,
+ 0xae19, 0xe052, 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a,
+ 0xe0c0, 0x0060, 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017,
+ 0xe056, 0xf0ea, 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1,
+ 0x0044, 0xaf17, 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e,
+ 0x028d, 0xf088, 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4,
+ 0xc785, 0xe018, 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a,
+ 0xa202, 0xe0c2, 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xe0c0, 0x041b,
+ 0xaf20, 0xa01e, 0xaf08, 0xae28, 0xe0c1, 0x041b, 0xe009, 0xffff,
+ 0xa01f, 0xaf09, 0xae09, 0xe056, 0xe0c2, 0x041d, 0xe42e, 0xe0c0,
+ 0x041c, 0xe00a, 0x0200, 0xe0c2, 0x041c, 0xe0c0, 0x041c, 0xe00c,
+ 0x0200, 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802,
+ 0xe42e, 0xe40e, 0x1126, 0xe40e, 0x031d, 0xe40e, 0x0321, 0xe40e,
+ 0x0325, 0xe40e, 0x032d, 0xe40e, 0x0331, 0xe40e, 0x0335, 0xe40e,
+ 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0339, 0xe40e, 0x00a4, 0xe40e,
+ 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x1146, 0xe40e, 0x00a4, 0xe40e,
+ 0x00a4, 0xe40e, 0x062b, 0xe40e, 0x0649, 0xe41e, 0x033d, 0xe40e,
+ 0x00a4, 0xe41e, 0x036a, 0xe40e, 0x00a4, 0xe41e, 0x0234, 0xe41e,
+ 0x0376, 0xe41e, 0x0286, 0xe40e, 0x00a4, 0xe41e, 0x03e6, 0xe40e,
+ 0x00a4, 0xe41e, 0x0415, 0xe40e, 0x00a4, 0xe41e, 0x0476, 0xe40e,
+ 0x00a4, 0xe41e, 0x105c, 0xe40e, 0x00a4, 0xa210, 0xe0c2, 0x0100,
+ 0xa200, 0xe0c2, 0x0128, 0xd130, 0x0008, 0xe41e, 0x0148, 0xe41e,
+ 0x0213, 0xe41e, 0x05dc, 0xa200, 0x3c2a, 0x3c33, 0xcc72, 0xcc44,
+ 0x3ccb, 0x3ccc, 0xe41e, 0x04a9, 0xf12a, 0xe41e, 0x08ae, 0xe41e,
+ 0x1106, 0xe41e, 0x1131, 0x2815, 0xe40a, 0x0360, 0xe418, 0x0d87,
+ 0xe41e, 0x10b9, 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0xe0c2,
+ 0x0070, 0xe42e, 0xd130, 0x0008, 0x28be, 0xe428, 0x28bf, 0xf06a,
+ 0xa200, 0x3c4d, 0xe41e, 0x1127, 0xe42e, 0xe42e, 0xd130, 0x0008,
+ 0xa200, 0xcc44, 0xcc4a, 0xcc4c, 0xcfce, 0xe0c2, 0x0074, 0x3c65,
+ 0xe0c0, 0x0065, 0xaf06, 0x3066, 0xaf02, 0x3067, 0xaf02, 0x3068,
+ 0xe41e, 0x061b, 0xe41e, 0x0d0b, 0xe41e, 0x0d36, 0x28bf, 0xf24a,
+ 0xc872, 0x3c07, 0x28c0, 0xf09a, 0xe0c0, 0x0066, 0x344a, 0x3c4b,
+ 0xe0c0, 0x0067, 0xae04, 0x3c4c, 0xa200, 0x3c4d, 0xe41e, 0x1127,
+ 0xe41e, 0x0213, 0xa200, 0x3cdf, 0x3ce0, 0xe41e, 0x11ed, 0xe41e,
+ 0x1209, 0xe41e, 0x1226, 0xe41e, 0x1160, 0xe41e, 0x124a, 0xe41e,
+ 0x1255, 0x2807, 0xcc72, 0xd130, 0x0008, 0xd1e0, 0x0000, 0xd1ff,
+ 0x03b0, 0xd199, 0x0224, 0xd03a, 0x0000, 0xd04b, 0x0001, 0xd04c,
+ 0x0000, 0xd008, 0x0000, 0xe41e, 0x064f, 0x28bf, 0xf02a, 0xf03e,
+ 0x28be, 0xf01a, 0x2c2a, 0xa002, 0x3c2a, 0x2c33, 0xa002, 0x3c33,
+ 0xe0c2, 0x0070, 0x2829, 0xe0c2, 0x0071, 0x281f, 0xe0c2, 0x0073,
+ 0xd039, 0x0000, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053,
+ 0xe41e, 0x05f0, 0xa202, 0xe0c2, 0x0076, 0xe42e, 0xe41e, 0x0409,
+ 0xe41e, 0x0174, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x04c0, 0xd112,
+ 0x00c0, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060, 0x3c32,
+ 0xe0c0, 0x0061, 0x3c70, 0xe004, 0x0580, 0xe096, 0xe0c0, 0x0062,
+ 0x3513, 0x3d13, 0xe0c0, 0x0063, 0x3513, 0x3d13, 0xe41e, 0x0d0b,
+ 0xe42e, 0xe167, 0x0488, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184,
+ 0x0413, 0x9e16, 0x3517, 0x3d17, 0xe42e, 0xd130, 0x0008, 0x28bf,
+ 0xf24a, 0xc872, 0x3c07, 0x28c0, 0xf09a, 0xe0c0, 0x0061, 0x344a,
+ 0x3c4b, 0xe0c0, 0x0062, 0xae04, 0x3c4c, 0xa200, 0x3c4d, 0xe41e,
+ 0x1127, 0xe41e, 0x0213, 0xa200, 0x3cdf, 0x3ce0, 0xe41e, 0x11ed,
+ 0xe41e, 0x1209, 0xe41e, 0x1226, 0xe41e, 0x1160, 0xe41e, 0x124a,
+ 0xe41e, 0x1255, 0x2807, 0xcc72, 0xe0c0, 0x0060, 0xa80e, 0xf0da,
+ 0xa102, 0xf1fa, 0xa102, 0xf20a, 0xa102, 0xf20a, 0xa102, 0xa102,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x0060, 0xaf06, 0xa802,
+ 0x3073, 0xf0ca, 0xe0c0, 0x0063, 0x3478, 0x3c79, 0xe0c1, 0x0064,
+ 0x367a, 0x3e7b, 0xe056, 0xe01a, 0x3c73, 0xe41e, 0x05b9, 0xf0ee,
+ 0xe41e, 0x05c4, 0xf0be, 0xa214, 0xf02e, 0xa216, 0x3c30, 0xa200,
+ 0x3c2f, 0xe41e, 0x1267, 0xe41e, 0x1291, 0x28bf, 0xf02a, 0xf03e,
+ 0x28be, 0xf01a, 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xe41e, 0x1115,
+ 0xa200, 0xce92, 0xe0c0, 0x0060, 0xa802, 0xf158, 0xe0c0, 0x0060,
+ 0xaf04, 0xa802, 0x3073, 0xf0ca, 0xe0c0, 0x0063, 0x3478, 0x3c79,
+ 0xe0c1, 0x0064, 0x367a, 0x3e7b, 0xe056, 0xe01a, 0x3c73, 0xe41e,
+ 0x07ae, 0xf03e, 0xe41e, 0x0837, 0xc870, 0xaf06, 0x3c45, 0xe0c2,
+ 0x0070, 0xe004, 0x0080, 0xcc6e, 0xbadf, 0xe0c0, 0x0042, 0xce20,
+ 0xd111, 0x0000, 0xd112, 0x0100, 0xd113, 0x0012, 0xca28, 0xf7f8,
+ 0xe42e, 0xe0c0, 0x0074, 0xa806, 0x3cc9, 0xe0c0, 0x0074, 0xaf04,
+ 0x3cca, 0xe0c0, 0x0064, 0x3450, 0x3c51, 0x2850, 0xa01e, 0xaf08,
+ 0x3c50, 0x2851, 0xa01e, 0xaf08, 0x3c51, 0xe0c0, 0x0065, 0x3418,
+ 0x3c17, 0x2818, 0xa002, 0x3c18, 0x2c17, 0xc710, 0x7c18, 0xe008,
+ 0xffff, 0xa002, 0xaf02, 0x3c88, 0xe0c0, 0x0062, 0xaf04, 0x301b,
+ 0xaf06, 0x30b8, 0xe0c1, 0x0071, 0x3eb9, 0xaf02, 0x30c8, 0xaf02,
+ 0x30c7, 0xaf04, 0xaf02, 0xe0c0, 0x0068, 0xe049, 0xa83f, 0xae3f,
+ 0xaf3f, 0x3e24, 0xe049, 0xaf0b, 0x3226, 0xe049, 0xaf0d, 0xa807,
+ 0x3e2c, 0xe049, 0xaf11, 0xa81f, 0xaf41, 0xae41, 0xae03, 0x3e2d,
+ 0xe049, 0xaf19, 0xa81f, 0xaf41, 0xae41, 0xae03, 0x3e2e, 0x282c,
+ 0x4c2d, 0x4c2e, 0xe01a, 0x3c25, 0xe0c0, 0x0069, 0x3038, 0xaf02,
+ 0x3039, 0xaf02, 0x3c3a, 0xe0c0, 0x006a, 0x3c14, 0xe0c0, 0x006b,
+ 0x3480, 0x3015, 0xaf02, 0xe008, 0x7fff, 0x3c7f, 0xf028, 0x3c15,
+ 0x2880, 0xaf1e, 0x3091, 0x2880, 0xe008, 0x7fff, 0x3c80, 0xe0c0,
+ 0x006c, 0x3481, 0x3c82, 0xe0c0, 0x006d, 0x3c1c, 0xa20a, 0x3c10,
+ 0xa002, 0x3c12, 0xa202, 0x3c13, 0xa102, 0x3c22, 0xa200, 0x3c21,
+ 0x3c20, 0x3c27, 0xa204, 0x3c11, 0xa234, 0x3c23, 0x8450, 0x8251,
+ 0xe018, 0x3c52, 0xa201, 0xe002, 0x00c8, 0xb425, 0xe002, 0x0190,
+ 0xb425, 0x3e36, 0xe0c0, 0x0075, 0xe166, 0x0600, 0x3516, 0x3d16,
+ 0xe0c0, 0x0076, 0xe049, 0xa806, 0x3cd7, 0xe04a, 0xaf04, 0x30d9,
+ 0xaf02, 0xa81e, 0x3cd8, 0x28d9, 0xe016, 0x3cd9, 0xae02, 0x4cd9,
+ 0xae02, 0x4cd9, 0x3cd9, 0x28d8, 0xf028, 0xa21e, 0x3cd8, 0x2850,
+ 0x2a51, 0xaf06, 0xaf07, 0x3c08, 0x3e09, 0x8408, 0x8209, 0xe018,
+ 0x3cc1, 0xa104, 0xf032, 0xa204, 0x3cc1, 0x2851, 0xaf02, 0x3c08,
+ 0x8408, 0x8250, 0xe018, 0x3cc3, 0x3cc6, 0xa202, 0x3c1e, 0xe0c0,
+ 0x0043, 0xaf06, 0x30be, 0xaf02, 0x30bf, 0xaf02, 0x30c0, 0xaf02,
+ 0x30ce, 0xa202, 0xe42e, 0xcb04, 0xaf20, 0xe000, 0x0490, 0xe09e,
+ 0xc872, 0x3d07, 0xcb04, 0xaf20, 0xa002, 0x1850, 0xe428, 0xcb04,
+ 0xe008, 0xffff, 0xae0e, 0xe005, 0x0000, 0xae11, 0xe042, 0xe0c1,
+ 0x0042, 0xe042, 0xce20, 0xd111, 0x0490, 0xd112, 0x002e, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x204a, 0x4c4b, 0x2e4d, 0xae11,
+ 0xe042, 0x0840, 0xe161, 0x0434, 0x3511, 0x3d11, 0x281f, 0xae04,
+ 0xe005, 0x0012, 0xae11, 0xe042, 0xe0c1, 0x0042, 0xe042, 0xce20,
+ 0xd111, 0x0434, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28, 0xf7f8,
+ 0xe42e, 0xa206, 0x3c2f, 0xa20e, 0x3c30, 0xe41e, 0x1267, 0xe41e,
+ 0x07ae, 0xe41e, 0x1291, 0xe42e, 0xa206, 0x3c2f, 0xa210, 0x3c30,
+ 0xe41e, 0x1267, 0xe41e, 0x0837, 0xe41e, 0x1291, 0xe42e, 0xa200,
+ 0x3c2f, 0xa212, 0x3c30, 0xe41e, 0x1267, 0xa204, 0xba84, 0xe41e,
+ 0x08a4, 0xe41e, 0x1291, 0xe42e, 0xe0c0, 0x0040, 0xe005, 0x0063,
+ 0xae17, 0xe042, 0xe005, 0x1900, 0xae03, 0xe042, 0xce20, 0xd111,
+ 0x0700, 0xd112, 0x0200, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e,
+ 0x2866, 0x4c67, 0x4c68, 0xe42a, 0xe167, 0x05f0, 0xc410, 0x2866,
+ 0xae10, 0x3d17, 0x2852, 0x3d17, 0x8137, 0x2867, 0xae12, 0x2a31,
+ 0xe017, 0xe056, 0x3d17, 0x2852, 0xae04, 0x3d17, 0x8137, 0x2868,
+ 0xae14, 0x2a1f, 0xe056, 0x3d17, 0x281f, 0xae06, 0x3d17, 0xe0c0,
+ 0x0068, 0xce20, 0xd111, 0x05f0, 0xd112, 0x000c, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0x2866, 0x4c67, 0x4c68, 0xe42a, 0xe0c0,
+ 0x0068, 0xce20, 0xd111, 0x05f0, 0xd112, 0x000c, 0xd113, 0x0003,
+ 0xca28, 0xf7f8, 0xe42e, 0xa206, 0xe41e, 0x0153, 0xe0c0, 0x005a,
+ 0xe008, 0xffff, 0x3cee, 0xe41e, 0x0213, 0xa200, 0x3cdf, 0x3ce0,
+ 0xe41e, 0x11ed, 0xe41e, 0x1209, 0xe41e, 0x1226, 0xe41e, 0x13d7,
+ 0xe41e, 0x1160, 0xe41e, 0x124a, 0xe41e, 0x1255, 0xe41e, 0x13df,
+ 0xe42e, 0xe41e, 0x13c3, 0xa204, 0xe41e, 0x0153, 0xe42e, 0x2824,
+ 0xa83e, 0xae06, 0xcf80, 0xe41e, 0x1291, 0xd1f3, 0x0000, 0x2835,
+ 0xcfe4, 0xa200, 0xcfc2, 0xd1e8, 0x0055, 0x2850, 0xa102, 0xae02,
+ 0x4c26, 0xae06, 0xcf00, 0xd1d3, 0x000d, 0xd185, 0x0001, 0xe41e,
+ 0x108f, 0xe41e, 0x1094, 0x281b, 0xe418, 0x05cf, 0xe41e, 0x0693,
+ 0x283d, 0x3c2b, 0xe41e, 0x10be, 0x2829, 0xf05a, 0x281e, 0xa002,
+ 0xa802, 0x3c1e, 0xe41e, 0x08e6, 0xe41e, 0x0cd8, 0xe41e, 0x07a8,
+ 0xa200, 0x3c53, 0x3c1f, 0xe41e, 0x06d0, 0x2865, 0xaa02, 0x3c65,
+ 0x2853, 0x1852, 0xf794, 0xe41e, 0x0cf4, 0xe41e, 0x0af0, 0x2815,
+ 0xe418, 0x0d90, 0xe42e, 0xe0c0, 0x0065, 0xa804, 0xf06a, 0xa200,
+ 0x3c2a, 0x3cb6, 0xe016, 0x3c89, 0x2814, 0xf048, 0x2c2a, 0xf07a,
+ 0xf0ae, 0x28b6, 0xf04a, 0x2a14, 0xe046, 0xf058, 0x3c29, 0xa202,
+ 0x3cb6, 0xf05e, 0xa202, 0x3c29, 0x08b6, 0x3cb6, 0xa200, 0x3c72,
+ 0xe0c0, 0x0065, 0xa802, 0xe418, 0x06c9, 0xe0c0, 0x0063, 0xa408,
+ 0x3c3d, 0x2815, 0xf09a, 0x2829, 0xe41a, 0x0d8a, 0xe41e, 0x0d8d,
+ 0x3c3d, 0xe419, 0x06c9, 0x2c2a, 0xe016, 0x3c31, 0xa004, 0x3c2f,
+ 0xe42e, 0xa202, 0x3c29, 0x3c72, 0x2835, 0xe0c2, 0x0060, 0xe42e,
+ 0x2a31, 0xa20a, 0xb636, 0x3c30, 0xe41e, 0x1267, 0xe41e, 0x0860,
+ 0xa202, 0x3ccb, 0xe41e, 0x0703, 0xe41e, 0x08a4, 0xe41e, 0x1291,
+ 0x2868, 0xe418, 0x06e7, 0x281f, 0xa002, 0x3c1f, 0xe42e, 0xe167,
+ 0x05ec, 0xa200, 0x3d17, 0x2853, 0xa102, 0x3d17, 0xcaaa, 0xae06,
+ 0x3517, 0x3d17, 0x281f, 0xae06, 0xe167, 0x05fa, 0x2317, 0x4f17,
+ 0xe042, 0xce20, 0xd111, 0x05ec, 0xd112, 0x0004, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0x282b, 0xcf96, 0x282c, 0xae0a, 0x2a2d,
+ 0xa83f, 0xe056, 0xae0a, 0x2a2e, 0xa83f, 0xe056, 0xcf30, 0x2829,
+ 0xcfc4, 0xcf82, 0xd188, 0x0001, 0xa200, 0xcf86, 0x3c3b, 0xa202,
+ 0x3c3c, 0xe41e, 0x0739, 0xe41e, 0x07ab, 0x8a5e, 0x0039, 0xe41e,
+ 0x0780, 0xc872, 0x1c5e, 0xe008, 0xffff, 0x3c5f, 0x2a15, 0xcb96,
+ 0xe419, 0x0d96, 0x2853, 0x1852, 0xf042, 0x283b, 0xe40a, 0x0719,
+ 0xcb86, 0xf02a, 0xbbfc, 0x2a15, 0xcb96, 0xf02b, 0x3c2b, 0xa202,
+ 0xe42e, 0x2838, 0x2a39, 0xe42a, 0xf0a9, 0x28dc, 0xe42a, 0xa102,
+ 0x3cdc, 0xa102, 0xe428, 0xa202, 0x3c3b, 0xe42e, 0x283c, 0x183a,
+ 0x2a3c, 0xa003, 0x3e3c, 0xe428, 0xa202, 0x3c3c, 0x3c3b, 0xe42e,
+ 0x2a38, 0x2839, 0xe42b, 0xa201, 0xf0a8, 0x28dc, 0xe428, 0xc870,
+ 0x1c3a, 0xe424, 0xa209, 0x3ed1, 0x3edc, 0xe42e, 0x28d0, 0xa002,
+ 0x3cd0, 0xa102, 0x183a, 0xe428, 0xa203, 0x3ed1, 0x3ed0, 0xe42e,
+ 0xa200, 0x3cd1, 0x3cdc, 0xa202, 0x3cd0, 0xe42e, 0xcb1c, 0xf7f8,
+ 0xd185, 0x0002, 0xd186, 0x0000, 0x2855, 0xae02, 0x4c54, 0xcf8a,
+ 0x2859, 0xcf94, 0xa200, 0xcfdc, 0xcf84, 0x2858, 0xcfd2, 0xe42e,
+ 0x2876, 0xf05a, 0xe41e, 0x0b5a, 0xe41e, 0x0b33, 0xcba0, 0xf7f8,
+ 0x2854, 0xf0ba, 0xcb18, 0x3c00, 0x2855, 0xf04a, 0x2856, 0xae38,
+ 0xcf8c, 0x2857, 0xcf90, 0xf03e, 0xcbd2, 0xcf9a, 0xd1d0, 0x003f,
+ 0xa202, 0x3c76, 0xe41e, 0x0a51, 0x2a66, 0xcba0, 0xf7f8, 0xe419,
+ 0x0c8d, 0xd186, 0x0001, 0xd185, 0x0004, 0xcb06, 0x3c53, 0xe42e,
+ 0xe41e, 0x0a0e, 0xe42e, 0xe41e, 0x0a46, 0xe42e, 0xe004, 0x0042,
+ 0xba8e, 0xbac0, 0xbae0, 0xbac0, 0xbac4, 0x8452, 0x8288, 0xe019,
+ 0x2852, 0xe002, 0x0063, 0xf070, 0xe04a, 0xe002, 0x05cd, 0xf030,
+ 0xa214, 0xf37e, 0x2852, 0xe002, 0x018c, 0xf070, 0xe04a, 0xe002,
+ 0x2e68, 0xf030, 0xa228, 0xf2de, 0x2852, 0xe002, 0x0654, 0xf070,
+ 0xe04a, 0xe002, 0x9e34, 0xf030, 0xa23c, 0xf23e, 0x2852, 0xe002,
+ 0x0e10, 0xf080, 0xe004, 0x0d2f, 0xae0a, 0xe046, 0xf034, 0xa23e,
+ 0xf18e, 0x2852, 0xe002, 0x1400, 0xf080, 0xe004, 0x0d2f, 0xae0c,
+ 0xe046, 0xf034, 0xa240, 0xf0de, 0x2852, 0xe002, 0x2000, 0xf080,
+ 0xe004, 0x03c0, 0xae10, 0xe046, 0xf034, 0xa250, 0xf02e, 0xa254,
+ 0xe0c1, 0x0060, 0xaf09, 0xa803, 0xf06b, 0xe0c0, 0x0060, 0xaf10,
+ 0xe008, 0x00ff, 0xba8e, 0xa200, 0xbbfc, 0x2810, 0xa108, 0xbbfc,
+ 0x2811, 0xbbfc, 0x2811, 0xf048, 0x2812, 0xa108, 0xbbfc, 0x2813,
+ 0xbbfc, 0xe190, 0xbac0, 0x2850, 0xa102, 0xbbfc, 0x2851, 0xa102,
+ 0xbbfc, 0xe190, 0xbae0, 0xe190, 0xbae0, 0x2873, 0xf038, 0xbac0,
+ 0xf0fe, 0xbae0, 0x2878, 0xaf02, 0xbbfc, 0x2879, 0xaf02, 0xbbfc,
+ 0x287a, 0xaf02, 0xbbfc, 0x287b, 0xaf02, 0xbbfc, 0xe190, 0xbac0,
+ 0xe41e, 0x08a4, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0xa200,
+ 0xbbfc, 0xa200, 0xbbfc, 0xbac0, 0x2820, 0xba80, 0x2821, 0xbbfc,
+ 0xe408, 0x085d, 0x2822, 0xbbfc, 0xa200, 0xe190, 0xbbfc, 0xe190,
+ 0xbac0, 0xe190, 0xbac1, 0xe190, 0x2823, 0xa134, 0xbbfe, 0xa200,
+ 0xbbfe, 0x2824, 0xbbfe, 0x2825, 0xba80, 0x2826, 0xba80, 0x2827,
+ 0xba80, 0xe41e, 0x08a4, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0x2853, 0xbbfc, 0x2829, 0xe016, 0xae02, 0xa00a, 0xbbfc, 0xa200,
+ 0xbbfc, 0x2c2a, 0x7010, 0x2831, 0xf03a, 0xa200, 0xbbfc, 0x2811,
+ 0xf098, 0x2c33, 0xae02, 0x7012, 0x2820, 0xe40a, 0x0879, 0xa200,
+ 0xbbfe, 0x2827, 0xe40a, 0x087e, 0xa200, 0xbbfc, 0x2829, 0xf04a,
+ 0xbac0, 0xe190, 0xbac0, 0x282f, 0xe40a, 0x088f, 0x2831, 0xe40a,
+ 0x088e, 0xbac0, 0xe190, 0xbac0, 0xe40e, 0x088f, 0xbac0, 0x282b,
+ 0x1823, 0xbbfe, 0x2825, 0xe40a, 0x08a0, 0x282c, 0xbbfc, 0xa102,
+ 0xe40a, 0x08a0, 0x282d, 0xaf02, 0xbbfe, 0x282e, 0xaf02, 0xbbfe,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xbae0, 0xc868, 0xa80e, 0xe42a,
+ 0xa110, 0xe012, 0x3c48, 0xa200, 0x7048, 0xe42e, 0xa200, 0x3c34,
+ 0xe004, 0x0190, 0x3c75, 0xe0c0, 0x0414, 0xe428, 0xa200, 0xe0c2,
+ 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xa201, 0xae09, 0xa907, 0xae09,
+ 0xa907, 0xae09, 0xa907, 0xae09, 0xa901, 0xae09, 0xa907, 0xae09,
+ 0xa905, 0xae09, 0xa905, 0xe0c3, 0x0152, 0xa241, 0xae11, 0xa911,
+ 0xae11, 0xa911, 0xe0c3, 0x0153, 0xa201, 0xae21, 0xa902, 0xae02,
+ 0xa902, 0xae04, 0xa900, 0x3cde, 0xe056, 0xe0c2, 0x015c, 0xa202,
+ 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xe42e, 0xe41e, 0x0c23,
+ 0xa210, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x0128, 0x2a29, 0xe004,
+ 0x016f, 0xf039, 0xe004, 0x0168, 0xe0c2, 0x017c, 0xa200, 0xe0c2,
+ 0x017d, 0xe0c2, 0x013d, 0xe0c0, 0x0050, 0xe049, 0xe008, 0x007f,
+ 0x3c00, 0xaf11, 0xe009, 0x007f, 0x3e01, 0x4600, 0x3e00, 0xa200,
+ 0x2a00, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2a00, 0xa805, 0xf02b,
+ 0xa912, 0x2a00, 0xa809, 0xf02b, 0xa940, 0x2a00, 0xa811, 0xf02b,
+ 0xa980, 0xe0c2, 0x040c, 0xe0c1, 0x0046, 0xe004, 0x0000, 0xae10,
+ 0xe042, 0x2a01, 0xa803, 0xf05b, 0xe161, 0x0488, 0x2111, 0x4d11,
+ 0xcf0e, 0xe0c1, 0x0046, 0xe004, 0x0040, 0xae10, 0xe042, 0x2a01,
+ 0xa805, 0xf05b, 0xe161, 0x048a, 0x2111, 0x4d11, 0xe0c2, 0x0103,
+ 0xa200, 0xe0c2, 0x0208, 0xa200, 0xe0c2, 0x021c, 0xa202, 0xe0c2,
+ 0x0210, 0xa200, 0xe0c2, 0x0215, 0xe41e, 0x0cff, 0xa203, 0xae09,
+ 0xa901, 0xae09, 0xe056, 0xe0c2, 0x0213, 0xe0c1, 0x0046, 0xe004,
+ 0x0070, 0xae10, 0xe042, 0x2a01, 0xa809, 0xf05b, 0xe161, 0x048c,
+ 0x2111, 0x4d11, 0xe0c2, 0x0211, 0xe0c1, 0x0046, 0xe004, 0x0070,
+ 0xe000, 0x0040, 0xae10, 0xe042, 0x2a01, 0xa811, 0xf05b, 0xe161,
+ 0x048e, 0x2111, 0x4d11, 0xe0c2, 0x0212, 0xe0c0, 0x0064, 0x3c71,
+ 0x2a72, 0xf02b, 0xa200, 0xe0c2, 0x0138, 0x2050, 0x4c51, 0xae08,
+ 0xe0c2, 0x0101, 0xe0c2, 0x0205, 0x2a72, 0xaa03, 0x4671, 0xa803,
+ 0xf04b, 0x2051, 0x4c50, 0xae08, 0xe0c2, 0x0142, 0xa200, 0xe41e,
+ 0x0cff, 0xe0c2, 0x0102, 0x2829, 0xae06, 0xe0c2, 0x0104, 0xa210,
+ 0xae08, 0x4c29, 0xae06, 0xe0c2, 0x0204, 0xe0c0, 0x0060, 0xa87e,
+ 0xe0c2, 0x0143, 0xe0c0, 0x0069, 0xe0c2, 0x014f, 0xe004, 0x0580,
+ 0xe096, 0x2113, 0x4d13, 0xe0c2, 0x021d, 0x2834, 0xe0c2, 0x020b,
+ 0xe0c2, 0x0214, 0xa200, 0xe0c2, 0x0312, 0xa202, 0xe0c2, 0x0302,
+ 0x2835, 0xe0c2, 0x0380, 0xe0c2, 0x018d, 0x3cdd, 0xa200, 0xe0c2,
+ 0x0302, 0x2834, 0xe0c2, 0x0072, 0x3c35, 0xa002, 0x3c34, 0x1832,
+ 0xf028, 0x3c34, 0xa200, 0xe0c2, 0x0113, 0xe0c2, 0x030d, 0xe0c2,
+ 0x0320, 0xe0c2, 0x030a, 0xe0c2, 0x030b, 0xe004, 0x0055, 0xe0c2,
+ 0x030c, 0xe004, 0x003f, 0xe0c2, 0x012a, 0xe166, 0x0600, 0x2116,
+ 0x4d16, 0xe0c2, 0x011f, 0x2826, 0xe0c2, 0x0179, 0xe41e, 0x0bb0,
+ 0xe004, 0x0582, 0xe096, 0x2313, 0x4f13, 0xe004, 0x0580, 0xe096,
+ 0x2113, 0x4d13, 0x3513, 0x3d13, 0xe004, 0x0580, 0xe096, 0x3713,
+ 0x3f13, 0xe41e, 0x0cbb, 0xe41e, 0x0ccd, 0xa202, 0xe0c2, 0x0106,
+ 0xe0c2, 0x0139, 0xe41e, 0x024d, 0xa204, 0x2a3d, 0xa115, 0xb60a,
+ 0x3cd5, 0x2a72, 0xa200, 0xf02b, 0xa208, 0xe0c2, 0x0140, 0x3cd6,
+ 0x2a50, 0xa10f, 0xa200, 0xb62e, 0x3cd4, 0xe42e, 0xa2f0, 0x3c53,
+ 0xe0c2, 0x003f, 0xe41e, 0x0c44, 0xe41e, 0x0768, 0xa200, 0x3c76,
+ 0xa2f2, 0x3c53, 0x2853, 0xe0c2, 0x003f, 0xa00a, 0xf078, 0xe41e,
+ 0x0c48, 0xa202, 0xe0c2, 0x021e, 0xf17e, 0xa102, 0xf0a8, 0xe41e,
+ 0x0b99, 0xe41e, 0x0c48, 0xe41e, 0x0b92, 0xe41e, 0x0b88, 0xf0ce,
+ 0xf094, 0x2839, 0xf048, 0xe41e, 0x0a51, 0xf0ae, 0xe41e, 0x0a49,
+ 0xf07e, 0xe41e, 0x0c48, 0xe41e, 0x0c4c, 0xe41e, 0x0c44, 0xa200,
+ 0x3ccc, 0x2853, 0xa002, 0x3c53, 0xf564, 0xe42e, 0x2853, 0xe0c2,
+ 0x003f, 0xe41e, 0x0750, 0xe419, 0x1094, 0xe41e, 0x0b99, 0x2876,
+ 0xf0c8, 0x2863, 0xa002, 0x3c63, 0x1850, 0xf028, 0x3c63, 0x2864,
+ 0xe0c2, 0x0120, 0x2876, 0xe428, 0x2853, 0xf104, 0xa106, 0xa80e,
+ 0xae06, 0x3cdb, 0xe41e, 0x0b78, 0x2a67, 0xe41e, 0x0b49, 0xe419,
+ 0x0c50, 0xe41e, 0x076e, 0xd1f0, 0x000d, 0x2ad4, 0x2853, 0xa80e,
+ 0xae06, 0x3cda, 0xf05b, 0x2863, 0xe016, 0x4cd1, 0x3cd1, 0x2a72,
+ 0xe0c0, 0x011c, 0xf7ea, 0xf07b, 0xa200, 0x3c00, 0x3c01, 0xe0c2,
+ 0x0114, 0xf10e, 0xe0c0, 0x011e, 0x3000, 0x44d5, 0x3c01, 0x4c00,
+ 0xe0c2, 0x0114, 0xf07a, 0xe0c0, 0x0170, 0x3c02, 0xe0c0, 0x0174,
+ 0x3c03, 0x2ad1, 0xe0c0, 0x0141, 0x3c64, 0xf09b, 0xe41e, 0x0b92,
+ 0xa200, 0x3cd1, 0xa203, 0x4ed6, 0xe0c3, 0x0140, 0xe41e, 0x109d,
+ 0x2a29, 0xf17b, 0xe0c0, 0x018f, 0x3c04, 0xe0c2, 0x0309, 0x28da,
+ 0xe000, 0x02c0, 0xe092, 0xe162, 0x0190, 0xe163, 0x03b0, 0xc420,
+ 0xd022, 0x0003, 0xe184, 0x0ab7, 0x9e12, 0x3511, 0x3d11, 0x9f33,
+ 0x2a00, 0xe0c0, 0x0111, 0xf7e8, 0x2853, 0xe0c3, 0x0188, 0xf064,
+ 0xa210, 0xe0c2, 0x0134, 0xd1d0, 0x0080, 0x2a29, 0x2864, 0xe0c2,
+ 0x0119, 0x28d2, 0xe0c2, 0x011a, 0x2862, 0xe0c2, 0x011b, 0xa202,
+ 0xe0c2, 0x0110, 0x2a76, 0xf1c9, 0x2115, 0x4d15, 0xcf8c, 0x2115,
+ 0x4d15, 0xcf8e, 0x28da, 0xe000, 0x0280, 0xe092, 0x2801, 0x4c00,
+ 0x3d11, 0x2802, 0xae10, 0x4c03, 0x3d11, 0x2804, 0x3d11, 0xe0c0,
+ 0x0121, 0x3511, 0x3d11, 0xe0c0, 0x0122, 0x3511, 0x3d11, 0xe42e,
+ 0xe41e, 0x0c48, 0x2866, 0xf10a, 0x2a52, 0xa80f, 0xf0db, 0xe167,
+ 0x05f2, 0x2117, 0x4d17, 0x2a52, 0xa00f, 0xaf07, 0xae07, 0xa103,
+ 0xe042, 0xe41e, 0x0cb1, 0x2867, 0xf0ba, 0x2852, 0xa806, 0xa106,
+ 0x2a52, 0xa007, 0xaf05, 0xae05, 0xa103, 0xe418, 0x0c7b, 0x2852,
+ 0xe0c2, 0x003f, 0xe41e, 0x0c44, 0xe41e, 0x0c48, 0xe190, 0xe0c0,
+ 0x0118, 0xa802, 0xf78a, 0xe42e, 0xe0c0, 0x011c, 0xf7ea, 0xe0c0,
+ 0x011e, 0xe0c2, 0x0114, 0x3000, 0xa804, 0x3c01, 0x2800, 0xe0c2,
+ 0x0188, 0xf09a, 0xe0c0, 0x0170, 0x3c02, 0xe0c0, 0x0174, 0x3c03,
+ 0xe0c2, 0x0123, 0xe42e, 0x28da, 0xe000, 0x0280, 0xe092, 0x2801,
+ 0x4c00, 0x3d11, 0x2802, 0xae10, 0x4c03, 0x3d11, 0x2804, 0x3d11,
+ 0xe0c0, 0x0121, 0x3511, 0x3d11, 0xe0c0, 0x0122, 0x3511, 0x3d11,
+ 0xe42e, 0x28db, 0xe000, 0x0280, 0xe09a, 0x2915, 0x3054, 0xaf02,
+ 0x3055, 0x2905, 0xaf10, 0x3c56, 0x2915, 0xa81e, 0x3c57, 0x2915,
+ 0x3c58, 0xe42e, 0x2115, 0x4d15, 0xcf8c, 0x2115, 0x4d15, 0xcf8e,
+ 0xe42e, 0xe0c0, 0x018f, 0x3c04, 0xe0c2, 0x0309, 0x28da, 0xe000,
+ 0x02c0, 0xe092, 0xe162, 0x0190, 0xe163, 0x03b0, 0xc420, 0xd022,
+ 0x0003, 0xe184, 0x0b76, 0x9e12, 0x3511, 0x3d11, 0x9f33, 0xe42e,
+ 0x28db, 0xe000, 0x02c0, 0xe092, 0xe005, 0x0080, 0xd022, 0x0003,
+ 0xe184, 0x0b86, 0xcfd5, 0xa011, 0x2111, 0x4d11, 0xcfd6, 0xe42e,
+ 0x2864, 0xe0c2, 0x0119, 0x28d2, 0xe0c2, 0x011a, 0x2862, 0xe0c2,
+ 0x011b, 0xe42e, 0xa200, 0x3c64, 0xe004, 0x2222, 0x3cd2, 0x3c62,
+ 0xe42e, 0x2805, 0x3c59, 0x2a15, 0x4629, 0x282b, 0xe419, 0x0d93,
+ 0x3c05, 0x2805, 0x0824, 0xa400, 0xa566, 0xe000, 0x07f0, 0xe09c,
+ 0x2906, 0xae0c, 0x4d06, 0xae0c, 0x4c05, 0xe0c2, 0x0115, 0xe42e,
+ 0x2829, 0xf09a, 0xe0c0, 0x0414, 0xe418, 0x018c, 0xe0c0, 0x0414,
+ 0xe41a, 0x0bf8, 0x28d7, 0x2a50, 0xa113, 0xf071, 0x2a50, 0xa10d,
+ 0xf037, 0xa402, 0xf02e, 0xa404, 0xe005, 0x0020, 0xe055, 0xe0c3,
+ 0x0180, 0xe004, 0x0582, 0xe096, 0x2113, 0x4d13, 0xe0c2, 0x018c,
+ 0x28d8, 0xe0c2, 0x018e, 0x28d9, 0xe0c2, 0x018a, 0xa201, 0x283d,
+ 0xa11e, 0xa400, 0xa548, 0x3c03, 0xae04, 0xe000, 0x0740, 0xe09e,
+ 0x2917, 0xe0c2, 0x0186, 0x2917, 0xe0c2, 0x0185, 0xe0c2, 0x0184,
+ 0x2917, 0xe049, 0xae15, 0xe056, 0xae15, 0xe056, 0xe0c2, 0x0181,
+ 0xe0c2, 0x0182, 0x2917, 0xae20, 0x4c75, 0xe0c2, 0x0183, 0xe42e,
+ 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xe167, 0x01a0,
+ 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17, 0xe009, 0x00ff, 0xae21,
+ 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101, 0xe0c3, 0x015d, 0x2add,
+ 0xa53f, 0xa401, 0xae21, 0xe167, 0x01a2, 0x2907, 0xaf10, 0xe008,
+ 0x001b, 0xe056, 0xe0c2, 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0,
+ 0x0150, 0xf7ea, 0xe42e, 0xe004, 0x3211, 0xae20, 0xe00a, 0x2100,
+ 0xe0c2, 0x0155, 0xe004, 0x9211, 0xae20, 0xe00a, 0x2100, 0xe0c2,
+ 0x0158, 0xe004, 0x1000, 0xae20, 0xe00a, 0x0000, 0xe0c2, 0x0156,
+ 0xe0c2, 0x0159, 0xe004, 0x0004, 0xe0c2, 0x0154, 0xe0c2, 0x0157,
+ 0xa202, 0xe0c2, 0x015a, 0xe42e, 0xa202, 0xe0c2, 0x0110, 0xe42e,
+ 0xe0c0, 0x0111, 0xf7e8, 0xe42e, 0xe0c0, 0x011c, 0xf7ea, 0xe42e,
+ 0x2853, 0xa806, 0xae02, 0xe000, 0x05e0, 0xe09e, 0x28db, 0xe000,
+ 0x0280, 0xe092, 0x2b11, 0xe01b, 0xae1f, 0xa200, 0xf0c9, 0x28db,
+ 0xe000, 0x02c0, 0xe092, 0x2111, 0x4d11, 0xcfd6, 0xe049, 0xaf21,
+ 0xe009, 0x7fff, 0x3f17, 0x3d17, 0x2853, 0xa806, 0xa106, 0x3c08,
+ 0xe41a, 0x0c7b, 0x2808, 0xe42a, 0x2852, 0x1853, 0xa102, 0xe428,
+ 0xe41e, 0x0c7b, 0xe42e, 0xe167, 0x05f6, 0x2117, 0x4d17, 0x2a53,
+ 0xaf05, 0xae09, 0xe042, 0xce20, 0xd112, 0x0008, 0xd111, 0x05e0,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x2853, 0xa80e, 0xaf02,
+ 0xe000, 0x05e8, 0xe09e, 0xcb94, 0xe008, 0x003f, 0x2a65, 0xae0d,
+ 0xe056, 0x2a53, 0xa803, 0xf049, 0xae10, 0x3d07, 0xf06e, 0x2b07,
+ 0xe009, 0xff00, 0xe056, 0x3d07, 0x2853, 0xa80e, 0xa10e, 0xe41a,
+ 0x0caa, 0xe42e, 0x2853, 0xa10e, 0xe167, 0x05f2, 0x2317, 0x4f17,
+ 0xe042, 0xce20, 0xd111, 0x05e8, 0xd112, 0x0004, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0x282b, 0xa118, 0xb608, 0xa54e, 0xe000,
+ 0x0830, 0xe09c, 0x2906, 0xae04, 0xe0c2, 0x0176, 0xcca4, 0xc786,
+ 0xe018, 0xa004, 0xe0c2, 0x0177, 0xe42e, 0x282b, 0xa11e, 0xa400,
+ 0xa548, 0xe000, 0x0860, 0xe09c, 0x2906, 0xe0c2, 0x0189, 0xe42e,
+ 0x2829, 0xe42a, 0xa202, 0x2a1c, 0xb616, 0xae02, 0x4c1e, 0xae20,
+ 0x4c1c, 0xe0c2, 0x0108, 0x20c6, 0x4cc1, 0xe0c2, 0x0109, 0x2052,
+ 0x4c1d, 0xe0c2, 0x010a, 0x20c2, 0x4cc3, 0xe0c2, 0x010b, 0x20c4,
+ 0x4cc5, 0xe0c2, 0x010c, 0xe42e, 0x2829, 0xe42a, 0xe0c0, 0x010b,
+ 0x34c2, 0x3cc3, 0xe0c0, 0x010c, 0x34c4, 0x3cc5, 0xe42e, 0xe0c1,
+ 0x0044, 0xa80f, 0xe056, 0xe42e, 0xe0c1, 0x0044, 0xaf0d, 0xae03,
+ 0xe056, 0xa87e, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1, 0x0420,
+ 0xa803, 0xf7db, 0xe166, 0x04c0, 0xe167, 0x0500, 0x2832, 0xf1b6,
+ 0xa102, 0xcc44, 0xe184, 0x0d31, 0xa200, 0xe41e, 0x0cff, 0xaf04,
+ 0xe41e, 0x0d04, 0xae20, 0x4c70, 0x9f17, 0x2050, 0x4c51, 0xae08,
+ 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116,
+ 0x4d16, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0xe0c0, 0x0044,
+ 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa83e, 0xa203, 0xe0c3,
+ 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500, 0xe09e, 0xe0c1,
+ 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e, 0x0cff, 0xaf04, 0xe0c1,
+ 0x0061, 0xaf21, 0xa807, 0xa105, 0xf025, 0xe04a, 0xe41e, 0x0d04,
+ 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xe40b, 0x0d5f, 0xa81e, 0xae20,
+ 0xe0c1, 0x0061, 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0, 0x0064,
+ 0xa802, 0xf048, 0x2050, 0x4c51, 0xf03e, 0x2051, 0x4c50, 0xae08,
+ 0x9f17, 0xe0c0, 0x006a, 0x9f17, 0xe0c0, 0x006b, 0x9f17, 0xe0c0,
+ 0x006c, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0xcca4, 0xc786,
+ 0xe018, 0xe000, 0x04c0, 0xe09c, 0x2116, 0x4d06, 0xe42e, 0xe41e,
+ 0x0d9f, 0xe42e, 0xe41e, 0x0e00, 0xe42e, 0xe41e, 0x0e01, 0xe42e,
+ 0xe41e, 0x0e4b, 0xe42e, 0xe41e, 0x0e81, 0xe42e, 0xe41e, 0x0ee1,
+ 0xe42e, 0xe41e, 0x0fd0, 0xe42e, 0xe41e, 0x102d, 0xe42e, 0xa254,
+ 0x3ccd, 0xa268, 0x3c83, 0xa218, 0x3c85, 0xa266, 0x2ac8, 0xf03b,
+ 0xe0c0, 0x0072, 0x3c84, 0xa210, 0x3c97, 0xe004, 0x07e0, 0x3c98,
+ 0x2814, 0x2a52, 0x3c86, 0x3e8b, 0x2c17, 0xc710, 0x7c18, 0xe008,
+ 0xffff, 0xa002, 0xaf02, 0x3c88, 0x3cbb, 0xe004, 0x6000, 0x2ac7,
+ 0xf03b, 0xe0c0, 0x0073, 0x3c99, 0x2886, 0xe016, 0x3c87, 0xf06a,
+ 0x2888, 0x3c86, 0xe004, 0x1000, 0x3c99, 0x8418, 0xe182, 0x7530,
+ 0xe018, 0xae02, 0x2e17, 0xe41e, 0x0f7a, 0x3c9e, 0x849e, 0x827f,
+ 0xe018, 0xa279, 0xe41e, 0x0f63, 0x349e, 0x3c9f, 0xae06, 0x2a83,
+ 0xe41e, 0x0f63, 0x34a4, 0x3ca5, 0xa202, 0x3c89, 0xa205, 0x1a36,
+ 0xae03, 0xa011, 0x3e8e, 0x2a8b, 0x5a8e, 0xe013, 0x36ae, 0x3eaf,
+ 0x28b9, 0x2ab8, 0xf049, 0xe41e, 0x0f0a, 0x64cd, 0x3c8c, 0xa004,
+ 0x6085, 0x6484, 0x3c8d, 0xa200, 0x3ce7, 0xe41e, 0x0f2e, 0xe42e,
+ 0xe42e, 0x2829, 0x3c8a, 0xa201, 0x3e92, 0x3ecc, 0xe418, 0x0eec,
+ 0xa200, 0x3c93, 0x3c94, 0x288a, 0xf238, 0x2889, 0xf05a, 0xa200,
+ 0x3c89, 0x288c, 0xf37e, 0x2886, 0xa102, 0xf7ca, 0x2ab8, 0xf03b,
+ 0x288c, 0xf30e, 0x848b, 0x82b5, 0xe019, 0xe04a, 0xaf02, 0x00a6,
+ 0x0ca7, 0xe41e, 0x0f7a, 0xa21f, 0x3e8e, 0x2a86, 0xc70f, 0x7e8e,
+ 0xe009, 0xffff, 0xa405, 0xe046, 0x6085, 0x64cd, 0xf1be, 0xa200,
+ 0x3ca2, 0x3ca3, 0x2a92, 0xf08b, 0x288d, 0x2ae7, 0xf129, 0xa006,
+ 0x2a84, 0xe066, 0xf0ee, 0x28c9, 0x308e, 0xaf02, 0x548e, 0xf08a,
+ 0x288d, 0xa104, 0x6090, 0x2a8d, 0xa005, 0xe066, 0xf02e, 0x288d,
+ 0x3c90, 0x2a92, 0xe42e, 0xc872, 0xe41e, 0x0f37, 0x288a, 0xf0ea,
+ 0x2093, 0x4c94, 0xc710, 0x7c8b, 0xe008, 0xffff, 0xa002, 0xaf02,
+ 0x3c8d, 0x2093, 0x4c94, 0x00a6, 0x0ca7, 0x34a6, 0x3ca7, 0x28b5,
+ 0xa002, 0x3cb5, 0x288a, 0xf028, 0x3cb5, 0x288a, 0xf0f8, 0x2a86,
+ 0xa103, 0x2095, 0x4c96, 0xe41e, 0x0f63, 0x34ac, 0x3cad, 0x1095,
+ 0x1c96, 0xe012, 0x34aa, 0x3cab, 0xf0ae, 0x22aa, 0x4eab, 0x12ac,
+ 0x1ead, 0x2887, 0xb606, 0xb611, 0x36aa, 0x3eab, 0x2892, 0x3ce7,
+ 0xe42e, 0x28c9, 0xf08a, 0x2852, 0x1853, 0xa102, 0xf048, 0x2805,
+ 0xe40e, 0x0ed6, 0x22a2, 0x4ea3, 0x20a4, 0x4ca5, 0xe041, 0xf0c7,
+ 0xe045, 0xe045, 0x2890, 0xf0f5, 0x36a2, 0x3ea3, 0xa002, 0x6085,
+ 0x6484, 0x3c90, 0xf08e, 0x36a2, 0x3ea3, 0x2890, 0xa102, 0x6085,
+ 0x6484, 0x3c90, 0x2890, 0x6085, 0x6484, 0x3c90, 0x2ac9, 0x28cc,
+ 0xa002, 0x3ccc, 0xf08b, 0xa103, 0xf22b, 0xa103, 0xf07b, 0xa103,
+ 0xf0ab, 0xf24e, 0x2890, 0xe40e, 0x0ed6, 0x28cb, 0xf18a, 0xa200,
+ 0x3ccb, 0xf06e, 0x28cc, 0x18ca, 0xf124, 0xa200, 0x3ccc, 0x2853,
+ 0xa002, 0xf046, 0xcb97, 0xcb96, 0xf03e, 0x2a2b, 0x282b, 0xa105,
+ 0x6290, 0xa004, 0xe066, 0x3c90, 0x3c8e, 0xf08e, 0xcb96, 0x3c8e,
+ 0x2853, 0xa002, 0xf030, 0x282b, 0x3c8e, 0x288e, 0x2a3d, 0xe045,
+ 0xf053, 0x2a3d, 0xa007, 0xe066, 0xe42e, 0x2a3d, 0xa107, 0xe062,
+ 0xe42e, 0x0093, 0x0c94, 0x3493, 0x3c94, 0x285f, 0x189a, 0x00a2,
+ 0x0ca3, 0x34a2, 0x3ca3, 0xe42e, 0x20aa, 0x4cab, 0x1095, 0x1c96,
+ 0x8499, 0xe41e, 0x0fb1, 0x009e, 0x0c9f, 0xf052, 0x2a91, 0xf039,
+ 0xa203, 0x3e92, 0xe41e, 0x0f49, 0x229e, 0x4e9f, 0xaf07, 0xe062,
+ 0x34a0, 0x3ca1, 0xc710, 0x7c8b, 0xe008, 0xffff, 0xa002, 0xaf02,
+ 0x3c9a, 0xe42e, 0x8486, 0x209e, 0x4c9f, 0xe41e, 0x0fa5, 0x8497,
+ 0xe41e, 0x0fa5, 0x2a86, 0xa103, 0x0a97, 0xe41e, 0x0f63, 0x34a0,
+ 0x3ca1, 0x288b, 0x3cb0, 0x20a0, 0x4ca1, 0xae04, 0x00a0, 0x0ca1,
+ 0xae02, 0xc70f, 0x7cb0, 0xe008, 0xffff, 0xaf08, 0xa010, 0xaf08,
+ 0x0836, 0xa51e, 0x0898, 0xe09e, 0x2907, 0xe42e, 0x847f, 0x8280,
+ 0xe018, 0x34a8, 0x3ca9, 0xa200, 0x3495, 0x3c96, 0xe42e, 0x109e,
+ 0x1c9f, 0x0095, 0x0c96, 0xa27f, 0xae31, 0xe066, 0x3495, 0x3c96,
+ 0x22ae, 0x4eaf, 0xe046, 0xf032, 0x3695, 0x3e96, 0x2095, 0x2896,
+ 0xe42e, 0x2a80, 0xe42b, 0x22a8, 0x4ea9, 0x1295, 0x1e96, 0xe066,
+ 0xf051, 0x2a91, 0xf039, 0xa203, 0x3e92, 0x2281, 0x4e82, 0xe42b,
+ 0x22a8, 0x4ea9, 0x1295, 0x1e96, 0x029e, 0x0e9f, 0x1281, 0x1e82,
+ 0xa401, 0xe062, 0xe42e, 0x3eb0, 0xa201, 0xf032, 0xe012, 0xa203,
+ 0x3eb4, 0x3cb1, 0xaf20, 0xc70f, 0x7cb0, 0x3cb2, 0xaf20, 0xae20,
+ 0x4cb1, 0xc70f, 0x7cb0, 0x3cb3, 0x20b2, 0x4cb3, 0x2ab4, 0xe42b,
+ 0xe012, 0xe42e, 0x36b0, 0x3eb1, 0xa201, 0x3eb2, 0x22b0, 0x4eb1,
+ 0x5ab2, 0xe045, 0xf061, 0x2ab2, 0xa003, 0x3eb2, 0xa121, 0xf775,
+ 0x2ab2, 0xf039, 0xa200, 0xe42e, 0xa103, 0x3eb2, 0xcc45, 0xa201,
+ 0x3eb3, 0xe184, 0x0fa2, 0x2ab3, 0xae03, 0x3eb3, 0x22b0, 0x4eb1,
+ 0x5ab2, 0xe045, 0xf061, 0xe013, 0xe04a, 0x2ab3, 0xa003, 0x3eb3,
+ 0x2ab2, 0xa103, 0x3eb2, 0x28b3, 0xe42e, 0xae02, 0x34b1, 0xe008,
+ 0xffff, 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xae1e, 0x82b0, 0xe01c,
+ 0xe42e, 0xae02, 0x34b1, 0xe008, 0xffff, 0xaf02, 0x3cb0, 0x82b0,
+ 0xe018, 0xaf1e, 0x82b1, 0xe01c, 0xe42e, 0xae02, 0x34b1, 0xe008,
+ 0xffff, 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xa103, 0x3eb2, 0x58b2,
+ 0x82b0, 0xa11f, 0xe013, 0x3eb2, 0xe019, 0x5eb2, 0xe042, 0xe42e,
+ 0x34bd, 0x3cbc, 0x28bd, 0xa002, 0x3cbd, 0x2cbc, 0xc710, 0x7cbd,
+ 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c88, 0x18bb, 0xe42a, 0x2888,
+ 0x3cbb, 0x28bc, 0x2abd, 0x3c17, 0x3e18, 0x8418, 0xe182, 0x7530,
+ 0xe018, 0xae02, 0x2e17, 0xe41e, 0x0f7a, 0x3c9e, 0x849e, 0x827f,
+ 0xe018, 0xa279, 0xe41e, 0x0f63, 0x349e, 0x3c9f, 0xae06, 0x2a83,
+ 0xe41e, 0x0f63, 0x34a4, 0x3ca5, 0xa200, 0x3cb5, 0x34a6, 0x3ca7,
+ 0x2886, 0xe428, 0xe016, 0x3c87, 0x2888, 0x3c86, 0xe42e, 0x3cb7,
+ 0x2a86, 0xe046, 0xf028, 0xe42e, 0x28b6, 0x2ab7, 0xe046, 0xf034,
+ 0xa200, 0x3cb6, 0x28b7, 0x3c86, 0x3c14, 0x2815, 0xe42a, 0x2886,
+ 0xe016, 0x3c87, 0xf03a, 0x2a88, 0x3e86, 0x2a86, 0x28b6, 0xe045,
+ 0xf0c6, 0x2095, 0x4c96, 0xe41e, 0x0f63, 0x34ac, 0x3cad, 0x1095,
+ 0x1c96, 0xe012, 0x34aa, 0x3cab, 0xe42e, 0x3cba, 0x2815, 0xe42a,
+ 0x287f, 0x2aba, 0xe046, 0xe42a, 0x3e7f, 0x8418, 0xe182, 0x7530,
+ 0xe018, 0xae02, 0x2e17, 0xe41e, 0x0f7a, 0x3c9e, 0x849e, 0x827f,
+ 0xe018, 0xa279, 0xe41e, 0x0f63, 0x349e, 0x3c9f, 0xae06, 0x2a83,
+ 0xe41e, 0x0f63, 0x34a4, 0x3ca5, 0xa200, 0x3cb5, 0x34a6, 0x3ca7,
+ 0xe42e, 0x2a15, 0xe42b, 0xf042, 0xa201, 0x3eb8, 0xe42e, 0x3cb9,
+ 0x3c8c, 0xa203, 0x3eb8, 0xe42e, 0xe0c1, 0x0060, 0xa803, 0xf05b,
+ 0xe0c0, 0x0061, 0xe41e, 0x1007, 0xe0c1, 0x0060, 0xa805, 0xf05b,
+ 0xe0c0, 0x0062, 0xe41e, 0x1051, 0xe0c1, 0x0060, 0xa809, 0xf05b,
+ 0xe0c0, 0x0063, 0xe41e, 0x0d9c, 0xe0c1, 0x0060, 0xa811, 0xf05b,
+ 0xe0c0, 0x0064, 0xe41e, 0x0d99, 0xe0c1, 0x0060, 0xa821, 0xf04b,
+ 0xe0c0, 0x0065, 0x3c1c, 0xe0c1, 0x0060, 0xa841, 0xf08b, 0xe0c0,
+ 0x0066, 0x3038, 0xaf02, 0x3039, 0xaf02, 0x3c3a, 0xe42e, 0xa200,
+ 0x3c63, 0x3cd3, 0x3c64, 0xe42e, 0xe161, 0x0200, 0xe004, 0x2222,
+ 0xe188, 0x007f, 0x3d11, 0xe190, 0xe42e, 0xf149, 0x2a63, 0x28d3,
+ 0xe000, 0x0200, 0xe09c, 0x2906, 0x3c62, 0xf089, 0xe004, 0x2222,
+ 0x3cd2, 0xe0c0, 0x0173, 0x3506, 0xf05e, 0xe0c0, 0x0173, 0x3506,
+ 0x3cd2, 0x28d3, 0xa002, 0x3cd3, 0xa002, 0x1850, 0xe428, 0x3cd3,
+ 0xe42e, 0xa200, 0x3cc2, 0x3cc4, 0x3cc5, 0xe42e, 0xa200, 0x3c1d,
+ 0xe42e, 0x281e, 0xf208, 0x281d, 0x181c, 0xf3f2, 0x2853, 0xa006,
+ 0x18c2, 0xf3b4, 0x28c2, 0x08c1, 0x18c6, 0xf0b4, 0x28c4, 0xa002,
+ 0xc70f, 0x7cc1, 0xaf20, 0x3cc4, 0x3cc2, 0x281c, 0x3c1d, 0xf2be,
+ 0x281d, 0xa002, 0x3c1d, 0x28c2, 0x08c1, 0xc70f, 0x7cc6, 0xaf20,
+ 0x3cc2, 0xf21e, 0x281d, 0x181c, 0xf202, 0x2853, 0xa006, 0x18c3,
+ 0xf1c4, 0x28c3, 0x08c1, 0x1852, 0xf0c4, 0x28c5, 0xa002, 0xc70f,
+ 0x7cc1, 0xaf20, 0x3cc5, 0x08c6, 0x3cc3, 0x281c, 0x3c1d, 0xf0be,
+ 0x281d, 0xa002, 0x3c1d, 0x28c3, 0x08c1, 0xc70f, 0x7c52, 0xaf20,
+ 0x3cc3, 0xf01e, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0x3c4d,
+ 0xe0c0, 0x0060, 0x344a, 0x3c4b, 0x347c, 0x3c7d, 0xe0c0, 0x0061,
+ 0xae04, 0x3c4c, 0xe41e, 0x1127, 0xe42e, 0xd030, 0x0000, 0xd034,
+ 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037,
+ 0x0080, 0xd038, 0x0000, 0xa200, 0x3c49, 0xe42e, 0xe470, 0x204a,
+ 0x4c4b, 0x2e4d, 0xae11, 0xe042, 0xe0c2, 0x0049, 0x347c, 0x3c7d,
+ 0xe42e, 0xd071, 0x242a, 0xe181, 0xa200, 0x34df, 0x3ce0, 0xe004,
+ 0x0200, 0x3cf3, 0x3cf6, 0xe41e, 0x11ed, 0xe41e, 0x1209, 0xe41e,
+ 0x1226, 0xe41e, 0x124a, 0xe41e, 0x1255, 0xe42e, 0xe41e, 0x1171,
+ 0xe41e, 0x118d, 0xca48, 0xaf3c, 0xa802, 0xf05a, 0xa202, 0x3cf4,
+ 0xae3c, 0xce48, 0xca48, 0xaf38, 0xa802, 0xf0aa, 0xe41e, 0x1160,
+ 0xe41e, 0x124a, 0xa202, 0xae38, 0xce48, 0xe41e, 0x1255, 0xe470,
+ 0x247c, 0x4c7d, 0x264a, 0x4e4b, 0xe046, 0x2e4c, 0xae11, 0xe045,
+ 0xe425, 0x28f3, 0xe045, 0xf043, 0xe041, 0x3ef6, 0xe42e, 0x3cf6,
+ 0xe42e, 0xca55, 0x28f6, 0xf048, 0xa200, 0xceaa, 0xf04e, 0x20df,
+ 0x4ce0, 0xe045, 0x247c, 0x4c7d, 0xe042, 0x347c, 0x3c7d, 0x28f6,
+ 0xe42a, 0x24df, 0x4ce0, 0xe042, 0x34df, 0x3ce0, 0x2af6, 0xe046,
+ 0xe428, 0xa200, 0x34df, 0x3ce0, 0xe42e, 0xa200, 0x3c4f, 0x247c,
+ 0x4c7d, 0x264a, 0x4e4b, 0xe046, 0xe049, 0xaf10, 0x3c4d, 0x2c4c,
+ 0xae10, 0xe045, 0xf275, 0x28bf, 0xf1fa, 0xa202, 0xe0c2, 0x0074,
+ 0x247c, 0x4c7d, 0xe0c2, 0x0049, 0x2ace, 0xf16b, 0xe0c0, 0x005c,
+ 0xe008, 0x8000, 0xf11a, 0xe0c0, 0x005d, 0xe00a, 0x8000, 0xe0c2,
+ 0x005d, 0xa202, 0xce00, 0xe0c1, 0x005d, 0xe009, 0x8000, 0xf7c9,
+ 0xe0c0, 0x0004, 0xf798, 0xa200, 0x3c4d, 0x264a, 0x4e4b, 0x367c,
+ 0x3e7d, 0x267c, 0x4e7d, 0xe0c3, 0x0049, 0x28bf, 0xe428, 0xd027,
+ 0x0000, 0xe41e, 0x11ce, 0xd027, 0x0001, 0xe42e, 0xe0c0, 0x0048,
+ 0xe0c1, 0x0049, 0xe046, 0xf040, 0x2e4c, 0xae11, 0xe042, 0xe005,
+ 0x0200, 0xe046, 0xe420, 0x284f, 0xf728, 0xe0c0, 0x005c, 0xe008,
+ 0x8000, 0xf6da, 0xe0c0, 0x005d, 0xe00a, 0x8000, 0xe0c2, 0x005d,
+ 0xa202, 0xce00, 0x3c4f, 0xf63e, 0xe42e, 0xa220, 0xa20d, 0xe056,
+ 0xa203, 0xe056, 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd033, 0x0000,
+ 0xd034, 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0080,
+ 0xd038, 0x0000, 0xd039, 0x0000, 0xd046, 0x0000, 0xd047, 0x0000,
+ 0xe42e, 0xe0c0, 0x0043, 0xaf0c, 0x30ce, 0xa202, 0xae0e, 0xe0c1,
+ 0x0043, 0xa807, 0xae09, 0xe056, 0xce4e, 0xa222, 0xae28, 0xa217,
+ 0xae37, 0xe056, 0xce4c, 0xa200, 0xce54, 0xa206, 0xae38, 0xe005,
+ 0x0003, 0xe056, 0xce4a, 0xa200, 0xce58, 0xe42e, 0xe0c0, 0x005b,
+ 0xa110, 0xf04a, 0xa106, 0xf05a, 0xe42e, 0xe004, 0x0038, 0xf03e,
+ 0xe004, 0x0020, 0xe005, 0x0080, 0xe056, 0xe005, 0x1800, 0xe056,
+ 0xcec0, 0xa208, 0xcec8, 0xa200, 0xce92, 0xce9e, 0xce88, 0xce8a,
+ 0xced0, 0xced6, 0xcea4, 0xcec6, 0xa202, 0xce9c, 0xe004, 0x0200,
+ 0xce96, 0xe42e, 0xa206, 0x2af6, 0xae11, 0xe056, 0xce5a, 0x247c,
+ 0x4c7d, 0xce5c, 0xa200, 0xce5e, 0xe42e, 0xe004, 0x0f00, 0xae20,
+ 0xe005, 0x0003, 0xe056, 0xe005, 0x0030, 0xe056, 0xca49, 0xaf21,
+ 0xa803, 0xf04b, 0xa203, 0xae2f, 0xe056, 0xce4a, 0xe42e, 0xc872,
+ 0xa050, 0xcc72, 0xa200, 0xe41e, 0x1286, 0xa200, 0xe41e, 0x1286,
+ 0xa200, 0xe41e, 0x1286, 0xa202, 0xe41e, 0x1286, 0xa200, 0xce96,
+ 0xceaa, 0x282f, 0xae0a, 0x4c30, 0xe41e, 0x1286, 0xe41e, 0x1115,
+ 0xa200, 0xce92, 0xe42e, 0xca9b, 0xf7f9, 0xe42e, 0xe41e, 0x1283,
+ 0xcec4, 0xe42e, 0xca48, 0xa802, 0xf7e8, 0xca4c, 0xa802, 0xf7ea,
+ 0xe42e, 0xe41e, 0x128a, 0xe41e, 0x1283, 0xa200, 0x3cf4, 0xe004,
+ 0x0030, 0xce98, 0x28f4, 0xf7fa, 0xe42e, 0xe082, 0x3c4e, 0xe161,
+ 0x0180, 0xca80, 0x3511, 0x3d11, 0xca82, 0x3511, 0x3d11, 0xca84,
+ 0x3511, 0x3d11, 0xca86, 0x3511, 0x3d11, 0x8b11, 0x0144, 0x8b11,
+ 0x0145, 0x8b11, 0x0148, 0x8b11, 0x0149, 0x8b11, 0x014a, 0x8b11,
+ 0x014b, 0x8b11, 0x0160, 0x8b11, 0x014e, 0x8b11, 0x014f, 0x8b11,
+ 0x0152, 0x8b11, 0x0153, 0x8b11, 0x0155, 0x8b11, 0x0157, 0x8b11,
+ 0x0163, 0x8b11, 0x0164, 0x8b11, 0x0165, 0xcacc, 0x3511, 0x3d11,
+ 0xcace, 0x3511, 0x3d11, 0x8b11, 0x0168, 0xcad2, 0x3511, 0x3d11,
+ 0xcad4, 0x3511, 0x3d11, 0x8b11, 0x016b, 0x8b11, 0x016c, 0x8b11,
+ 0x016d, 0x8b11, 0x016e, 0xc860, 0x3511, 0x3d11, 0xc862, 0x3511,
+ 0x3d11, 0xc864, 0x3511, 0x3d11, 0x8b11, 0x0033, 0x8b11, 0x0034,
+ 0x8b11, 0x0035, 0x8b11, 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038,
+ 0xc872, 0x3511, 0x3d11, 0x8b11, 0x003a, 0xc87a, 0x3511, 0x3d11,
+ 0xc87c, 0x3511, 0x3d11, 0xc880, 0x3511, 0x3d11, 0xc882, 0x3511,
+ 0x3d11, 0xc884, 0x3511, 0x3d11, 0xc886, 0x3511, 0x3d11, 0xc888,
+ 0x3511, 0x3d11, 0xc88a, 0x3511, 0x3d11, 0xc88c, 0x3511, 0x3d11,
+ 0xc890, 0x3511, 0x3d11, 0xc892, 0x3511, 0x3d11, 0xc894, 0x3511,
+ 0x3d11, 0xc896, 0x3511, 0x3d11, 0xc898, 0x3511, 0x3d11, 0xc89e,
+ 0x3511, 0x3d11, 0x284e, 0xe092, 0xe42e, 0xe082, 0x3c4e, 0xe161,
+ 0x0180, 0x2111, 0x4d11, 0xce80, 0x2111, 0x4d11, 0xce82, 0x2111,
+ 0x4d11, 0xce84, 0x2111, 0x4d11, 0xce86, 0x8911, 0x0144, 0x8911,
+ 0x0145, 0x8911, 0x0148, 0x8911, 0x0149, 0x8911, 0x014a, 0x8911,
+ 0x014b, 0x8911, 0x0160, 0x8911, 0x014e, 0x8911, 0x014f, 0x8911,
+ 0x0152, 0x8911, 0x0153, 0x8911, 0x0155, 0x8911, 0x0157, 0x8911,
+ 0x0163, 0x8911, 0x0164, 0x8911, 0x0165, 0x2111, 0x4d11, 0xcecc,
+ 0x2111, 0x4d11, 0xcece, 0x8911, 0x0168, 0x2111, 0x4d11, 0xced2,
+ 0x2111, 0x4d11, 0xced4, 0x8911, 0x016b, 0x8911, 0x016c, 0x8911,
+ 0x016d, 0x8911, 0x016e, 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11,
+ 0xcc62, 0x2111, 0x4d11, 0xcc64, 0x8911, 0x0033, 0x8911, 0x0034,
+ 0x8911, 0x0035, 0x8911, 0x0036, 0x8911, 0x0037, 0x8911, 0x0038,
+ 0x2111, 0x4d11, 0xcc72, 0x8911, 0x003a, 0x2111, 0x4d11, 0xcc7a,
+ 0x2111, 0x4d11, 0xcc7c, 0x2111, 0x4d11, 0xcc80, 0x2111, 0x4d11,
+ 0xcc82, 0x2111, 0x4d11, 0xcc84, 0x2111, 0x4d11, 0xcc86, 0x2111,
+ 0x4d11, 0xcc88, 0x2111, 0x4d11, 0xcc8a, 0x2111, 0x4d11, 0xcc8c,
+ 0x2111, 0x4d11, 0xcc90, 0x2111, 0x4d11, 0xcc92, 0x2111, 0x4d11,
+ 0xcc94, 0x2111, 0x4d11, 0xcc96, 0x2111, 0x4d11, 0xcc98, 0x2111,
+ 0x4d11, 0xe005, 0x1415, 0xae21, 0xe056, 0xcc9e, 0xd14c, 0x0002,
+ 0x284e, 0xe092, 0xe42e, 0xe082, 0x3c4e, 0xe161, 0x0180, 0xc872,
+ 0x3511, 0x3d11, 0xcac6, 0x3cfa, 0x3d11, 0xf07a, 0xcacc, 0x3511,
+ 0x3d11, 0xcace, 0x3511, 0x3d11, 0x284e, 0xe092, 0xe42e, 0x2afa,
+ 0xe42b, 0x247c, 0x4c7d, 0xe046, 0x347c, 0x3c7d, 0xe42e, 0xe082,
+ 0x3c4e, 0xe161, 0x0180, 0x2111, 0x4d11, 0xcc72, 0x2b11, 0xf15b,
+ 0x2901, 0xaf10, 0xe008, 0x00ff, 0xe41e, 0x1286, 0x28fa, 0xa102,
+ 0xf0ca, 0x3cfa, 0x2911, 0xe008, 0x00ff, 0xe41e, 0x1286, 0x28fa,
+ 0xa102, 0xf03a, 0x3cfa, 0xf6de, 0x284e, 0xe092, 0xe42e, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x000f, 0x0d0b, 0x0907, 0x0501, 0x000f, 0x0d0b, 0x0907, 0x0501,
+ 0x001e, 0x1a16, 0x120e, 0x0a02, 0x001e, 0x1a16, 0x120e, 0x0a02,
+ 0x002d, 0x2721, 0x1b15, 0x0f03, 0x003c, 0x342c, 0x241c, 0x1404,
+ 0x004b, 0x4137, 0x2d23, 0x1905, 0x005a, 0x4e42, 0x362a, 0x1e06,
+ 0x0069, 0x5b4d, 0x3f31, 0x2307, 0x0078, 0x6858, 0x4838, 0x2808,
+ 0x0087, 0x7563, 0x513f, 0x2d09, 0x00a5, 0x8f79, 0x634d, 0x370b,
+ 0x00c3, 0xa98f, 0x755b, 0x410d, 0x00e1, 0xc3a5, 0x8769, 0x4b0f,
+ 0x00e1, 0xc3a5, 0x8769, 0x4b0f, 0x00e1, 0xc3a5, 0x8769, 0x4b0f,
+ 0x0020, 0x0008, 0x0008, 0x0008, 0x0030, 0x0010, 0x0008, 0x0010,
+ 0x0030, 0x0010, 0x0008, 0x0010, 0x0030, 0x0010, 0x0008, 0x0010,
+ 0x0030, 0x0010, 0x0008, 0x0010, 0x0040, 0x0018, 0x0008, 0x0018,
+ 0x0040, 0x0018, 0x0008, 0x0018, 0x0050, 0x0018, 0x0010, 0x0018,
+ 0x0050, 0x0018, 0x0010, 0x0020, 0x0060, 0x0020, 0x0018, 0x0020,
+ 0x0060, 0x0020, 0x0018, 0x0020, 0x0080, 0x0040, 0x0018, 0x0028,
+ 0x0080, 0x0040, 0x0018, 0x0030, 0x00a0, 0x0060, 0x0020, 0x0030,
+ 0x00a0, 0x0060, 0x0020, 0x0038, 0x00c0, 0x0080, 0x0030, 0x0040,
+ 0x00c0, 0x0080, 0x0030, 0x0048, 0x0100, 0x00c0, 0x0040, 0x0050,
+ 0x0100, 0x00c0, 0x0040, 0x0058, 0x0140, 0x0100, 0x0060, 0x0068,
+ 0x0140, 0x0100, 0x0060, 0x0070, 0x0180, 0x0140, 0x0070, 0x0080,
+ 0x0180, 0x0140, 0x0070, 0x0090, 0x01c0, 0x0180, 0x0080, 0x00a0,
+ 0x01c0, 0x0180, 0x0080, 0x00b8, 0x0200, 0x01c0, 0x00a0, 0x00c8,
+ 0x0200, 0x01c0, 0x00a0, 0x00e8, 0x0300, 0x0200, 0x0180, 0x0180,
+ 0x0300, 0x0200, 0x0180, 0x01a0, 0x0400, 0x0240, 0x0200, 0x01c0,
+ 0x0400, 0x0240, 0x0200, 0x01e8, 0x0400, 0x0240, 0x0200, 0x0398,
+ 0x0400, 0x0240, 0x0200, 0x03c8, 0x0400, 0x0240, 0x0200, 0x0400,
+ 0x0400, 0x0240, 0x0200, 0x0440, 0x0400, 0x0240, 0x0200, 0x0688,
+ 0x0400, 0x0240, 0x0200, 0x06d8, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0028, 0x0027, 0x0027, 0x0026, 0x0026, 0x0025, 0x0024, 0x0023,
+ 0x0022, 0x0021, 0x0020, 0x001f, 0x001e, 0x001d, 0x001c, 0x001b,
+ 0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0006, 0x0007,
+ 0x0008, 0x0009, 0x000a, 0x000b, 0x000c, 0x000d, 0x000e, 0x000f,
+ 0x0010, 0x0011, 0x0012, 0x0013, 0x0014, 0x0015, 0x0016, 0x0017,
+ 0x0018, 0x0019, 0x001a, 0x001b, 0x001c, 0x001d, 0x001d, 0x001e,
+ 0x001f, 0x0020, 0x0020, 0x0021, 0x0022, 0x0022, 0x0023, 0x0023,
+ 0x0024, 0x0024, 0x0025, 0x0025, 0x0025, 0x0026, 0x0026, 0x0026,
+ 0x0027, 0x0027, 0x0027, 0x0027, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0003, 0x0003, 0x0003, 0x0004, 0x0006, 0x0006, 0x0007, 0x0008,
+ 0x0009, 0x000c, 0x000f, 0x0011, 0x0014, 0x0017, 0x001c, 0x001f,
+ 0x0022, 0x0025, 0x002a, 0x002e, 0x0030, 0x0037, 0x003a, 0x003e,
+ 0x0043, 0x0049, 0x0050, 0x0057, 0x005f, 0x0068, 0x0072, 0x007d,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0001, 0x0002, 0x0002, 0x0002, 0x0002, 0x0003, 0x0003, 0x0003,
+ 0x0004, 0x0004, 0x0004, 0x0005, 0x0006, 0x0006, 0x0007, 0x0008,
+ 0x0009, 0x000a, 0x000b, 0x000d, 0x000e, 0x0010, 0x0012, 0x0014,
+ 0x0017, 0x0019, 0x001d, 0x0020, 0x0024, 0x0028, 0x002d, 0x0033,
+ 0x0039, 0x0040, 0x0048, 0x0051, 0x005b, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x02f9, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0313, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x02f9, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x0213, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0319, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x031b, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01c5, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa220, 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802,
+ 0xa220, 0xe0c2, 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2,
+ 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0xe42e, 0xe428, 0xa202, 0xe0c2,
+ 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28, 0xf7f8, 0xca48, 0xa802,
+ 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190, 0xf7e2, 0xe0c0, 0x041f,
+ 0xf7e8, 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8,
+ 0xe004, 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0,
+ 0x000d, 0xf7e8, 0xe42e, 0xe41e, 0x0213, 0xd160, 0x0620, 0xe004,
+ 0x0019, 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x0228, 0xe000, 0x0040,
+ 0xce50, 0xa200, 0xd022, 0x00ff, 0xe184, 0x020f, 0xce52, 0xe190,
+ 0xe41e, 0x0230, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72,
+ 0xcc8c, 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a,
+ 0xd16f, 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e,
+ 0xe004, 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e,
+ 0xe004, 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e,
+ 0xe41e, 0x028d, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a,
+ 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02c3, 0xe41e, 0x02f4, 0xae12,
+ 0xe0c2, 0x041e, 0xe41e, 0x02e7, 0xe42e, 0xe41e, 0x02b1, 0xe42a,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0,
+ 0x0215, 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0,
+ 0x0213, 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0,
+ 0x020b, 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02c3, 0xe41e,
+ 0x02f4, 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1,
+ 0x0204, 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f,
+ 0xe056, 0xe0c2, 0x041e, 0xe41e, 0x02e7, 0xe42e, 0xe0c0, 0x041f,
+ 0xf7e8, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203,
+ 0xae19, 0xe052, 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a,
+ 0xe0c0, 0x0060, 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017,
+ 0xe056, 0xf0ea, 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1,
+ 0x0044, 0xaf17, 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e,
+ 0x028d, 0xf088, 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4,
+ 0xc785, 0xe018, 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a,
+ 0xa202, 0xe0c2, 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xe0c0, 0x041b,
+ 0xaf20, 0xa01e, 0xaf08, 0xae28, 0xe0c1, 0x041b, 0xe009, 0xffff,
+ 0xa01f, 0xaf09, 0xae09, 0xe056, 0xe0c2, 0x041d, 0xe42e, 0xe0c0,
+ 0x041c, 0xe00a, 0x0200, 0xe0c2, 0x041c, 0xe0c0, 0x041c, 0xe00c,
+ 0x0200, 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802,
+ 0xe42e, 0xe40e, 0x1424, 0xe40e, 0x031d, 0xe40e, 0x0321, 0xe40e,
+ 0x0325, 0xe40e, 0x032d, 0xe40e, 0x0331, 0xe40e, 0x0335, 0xe40e,
+ 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0339, 0xe40e, 0x00a4, 0xe40e,
+ 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x00a4, 0xe40e,
+ 0x00a4, 0xe40e, 0x0704, 0xe40e, 0x0715, 0xe41e, 0x03b2, 0xe40e,
+ 0x00a4, 0xe41e, 0x03d0, 0xe40e, 0x00a4, 0xe41e, 0x0234, 0xe41e,
+ 0x03dc, 0xe41e, 0x0286, 0xe40e, 0x00a4, 0xe41e, 0x0488, 0xe40e,
+ 0x00a4, 0xe41e, 0x04b5, 0xe40e, 0x00a4, 0xe41e, 0x069e, 0xe40e,
+ 0x00a4, 0xe41e, 0x06ca, 0xe40e, 0x00a4, 0x3cec, 0xe0c0, 0x0041,
+ 0xe005, 0x0018, 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112,
+ 0x0100, 0x88ec, 0x0113, 0xca28, 0xf7f8, 0xe42e, 0x8917, 0x0034,
+ 0x8917, 0x0033, 0x8917, 0x0035, 0x8917, 0x0036, 0x8917, 0x0037,
+ 0x8917, 0x0038, 0x8117, 0x8117, 0x2117, 0x4d17, 0xcc60, 0x2117,
+ 0x4d17, 0xcc62, 0x2117, 0x4d17, 0xcc64, 0x2117, 0x4d17, 0xcc72,
+ 0xe42e, 0x2117, 0x4d17, 0xcc72, 0x2117, 0x4d17, 0xcc8c, 0x2917,
+ 0xcc90, 0x2917, 0x28f4, 0xcc8e, 0x2917, 0x28f5, 0xcc92, 0x2917,
+ 0xcc96, 0x2917, 0xcc98, 0x2117, 0x4d17, 0xcc9e, 0xe42e, 0x8b17,
+ 0x0034, 0x8b17, 0x0033, 0x8b17, 0x0035, 0x8b17, 0x0036, 0x8b17,
+ 0x0037, 0x8b17, 0x0038, 0x8117, 0x8117, 0xc860, 0x3517, 0x3d17,
+ 0xc862, 0x3517, 0x3d17, 0xc864, 0x3517, 0x3d17, 0xc872, 0x3517,
+ 0x3d17, 0xe42e, 0xc872, 0x3517, 0x3d17, 0xc88c, 0x3517, 0x3d17,
+ 0xc890, 0x3d17, 0xc88e, 0x3d17, 0xca9e, 0x3d17, 0xc896, 0x3d17,
+ 0xc898, 0x3d17, 0xe005, 0x1415, 0xae21, 0xc89e, 0xe056, 0x3517,
+ 0x3d17, 0xe42e, 0xd130, 0x000b, 0xe41e, 0x0148, 0xe41e, 0x0213,
+ 0xe41e, 0x04e6, 0xe41e, 0x068b, 0xe41e, 0x04e9, 0xf0ea, 0xe41e,
+ 0x0d78, 0xe41e, 0x13d5, 0x283f, 0xe418, 0x10b0, 0xe41e, 0x1354,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0xe0c2, 0x0070, 0xe42e,
+ 0x28b5, 0xe428, 0x28b6, 0xf06a, 0xa200, 0x3c13, 0xe41e, 0x1533,
+ 0xe42e, 0xe41e, 0x14d6, 0xe42e, 0xa202, 0xce02, 0xa240, 0xa102,
+ 0xf7f8, 0xa200, 0xcc4a, 0xcc4c, 0x3cf9, 0x3cfa, 0xe0c2, 0x003f,
+ 0xe0c2, 0x0074, 0x3c7c, 0xe41e, 0x1034, 0xe41e, 0x105f, 0x28b6,
+ 0xf0fa, 0x28b7, 0xf09a, 0xe0c0, 0x0066, 0x3410, 0x3c11, 0xe0c0,
+ 0x0067, 0xae04, 0x3c12, 0xa200, 0x3c13, 0xe41e, 0x1533, 0xd130,
+ 0x000b, 0xd1b3, 0x0001, 0xd03a, 0x0003, 0xd04b, 0x0001, 0xd04c,
+ 0x0000, 0xd008, 0x0000, 0xe41e, 0x0628, 0xe41e, 0x1359, 0x282c,
+ 0xf05a, 0x28c5, 0xa002, 0xa802, 0x3cc5, 0xe41e, 0x0dbc, 0x283b,
+ 0xf038, 0x2854, 0xcc72, 0x2830, 0xe41a, 0x0b80, 0x2830, 0xe418,
+ 0x0be7, 0xe41e, 0x0724, 0x283f, 0xe418, 0x11de, 0x2e20, 0x2c2b,
+ 0x0821, 0xe045, 0xb60e, 0x3c2b, 0x28b6, 0xf06a, 0xe41e, 0x14d6,
+ 0xe41e, 0x13e7, 0xf05e, 0x28b5, 0xf03a, 0xe41e, 0x1500, 0x2c3b,
+ 0xa002, 0x3c3b, 0xe0c2, 0x0070, 0xe002, 0x00f3, 0xf028, 0x283b,
+ 0x2824, 0xe0c2, 0x0071, 0x282f, 0xe0c2, 0x0073, 0xd039, 0x0000,
+ 0xa200, 0x3cd4, 0x3cd5, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2,
+ 0x0053, 0xe0c0, 0x0065, 0xaf06, 0xa80e, 0xe418, 0x0462, 0x287c,
+ 0xf058, 0xa202, 0xe0c2, 0x0076, 0xe42e, 0xa208, 0xe0c2, 0x0076,
+ 0xe42e, 0xe42e, 0xe162, 0x05c0, 0xc410, 0x28f2, 0xae10, 0x3d12,
+ 0x2852, 0x3d12, 0x8132, 0x28f3, 0xae12, 0x4c2c, 0x3d12, 0x2852,
+ 0xae04, 0x3d12, 0x8132, 0x28f4, 0xae14, 0x4c2f, 0x3d12, 0x282f,
+ 0xae06, 0x3d12, 0xe180, 0xe0c0, 0x0068, 0xce20, 0xd112, 0x000c,
+ 0xd111, 0x05c0, 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe181, 0xe42e,
+ 0xe41e, 0x0db0, 0xe41e, 0x0174, 0xe0c0, 0x0042, 0xce20, 0xd111,
+ 0x0600, 0xd112, 0x00c0, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0,
+ 0x0060, 0x3c3c, 0xe0c0, 0x0061, 0x3c70, 0xe004, 0x0700, 0xe096,
+ 0xe0c0, 0x0062, 0x3513, 0x3d13, 0xe0c0, 0x0063, 0x3513, 0x3d13,
+ 0xe167, 0x0704, 0xe0c0, 0x006c, 0x3517, 0x3d17, 0xe0c0, 0x006d,
+ 0x3517, 0x3d17, 0xe41e, 0x1034, 0xe42e, 0x2830, 0xe428, 0x28b6,
+ 0xf0fa, 0x28b7, 0xf09a, 0xe0c0, 0x0061, 0x3410, 0x3c11, 0xe0c0,
+ 0x0062, 0xae04, 0x3c12, 0xa200, 0x3c13, 0xe41e, 0x1533, 0xe0c0,
+ 0x0060, 0xf06a, 0xa102, 0xf09a, 0xa102, 0xf0aa, 0xe42e, 0xe41e,
+ 0x0b08, 0xe41e, 0x0b0d, 0xf07e, 0xe41e, 0x0b51, 0xf04e, 0xe41e,
+ 0x0b72, 0xf01e, 0x28b6, 0xf06a, 0xe41e, 0x14d6, 0xe41e, 0x13e7,
+ 0xe42e, 0x28b5, 0xe42a, 0xe41e, 0x1500, 0xe42e, 0xa200, 0xcc72,
+ 0xe42e, 0xe0c0, 0x0074, 0xa806, 0x3cd9, 0xe0c0, 0x0074, 0xaf04,
+ 0x3cda, 0xe0c0, 0x0064, 0x347a, 0x3c7b, 0x3c71, 0xe0c0, 0x0065,
+ 0x3421, 0x3c20, 0x2821, 0xa002, 0x3c21, 0x2c20, 0xc710, 0x7c21,
+ 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c3d, 0xe0c0, 0x0062, 0xaf06,
+ 0x303e, 0xaf04, 0x30bb, 0xe0c1, 0x0071, 0x3ebc, 0xaf02, 0x30ca,
+ 0xaf02, 0x30cb, 0xe0c0, 0x0075, 0xe166, 0x0510, 0x3516, 0x3d16,
+ 0x287a, 0xa01e, 0xaf08, 0x3c50, 0x287b, 0xa01e, 0xaf08, 0x3c51,
+ 0xe0c0, 0x0063, 0xaf06, 0x3030, 0xf1d8, 0xa200, 0x3c34, 0x3c35,
+ 0x3c36, 0x3c37, 0x3c6b, 0xe0c0, 0x0066, 0x3022, 0xaf02, 0x3023,
+ 0x2a23, 0x4622, 0x3e23, 0xaf02, 0xa80e, 0x3c46, 0xe0c0, 0x0066,
+ 0xaf0a, 0x3048, 0xaf02, 0x30c9, 0x2823, 0x4422, 0x3c23, 0xe40e,
+ 0x05bc, 0xe0c0, 0x0067, 0x3c55, 0x3037, 0xaf02, 0x3036, 0xaf02,
+ 0x3035, 0xaf02, 0x3034, 0xaf02, 0x306b, 0x2834, 0xe408, 0x0624,
+ 0x283d, 0xa11e, 0xe404, 0x0624, 0xe167, 0x0204, 0xc420, 0xa202,
+ 0x3c47, 0x2850, 0xae08, 0x1937, 0xe40a, 0x0594, 0x2847, 0xa002,
+ 0x3c47, 0xa10a, 0xe408, 0x0559, 0xa202, 0x3c55, 0xa20c, 0x3c47,
+ 0x287b, 0xe002, 0x0190, 0xf086, 0xe002, 0x0190, 0xf0b6, 0xe002,
+ 0x0160, 0xf116, 0xf19e, 0x2850, 0x3c32, 0x2851, 0x3c31, 0xe40e,
+ 0x05aa, 0x2850, 0xae02, 0x3c32, 0x2851, 0xa002, 0xaf02, 0x3c31,
+ 0xe40e, 0x05aa, 0x2850, 0xae04, 0x3c32, 0x2851, 0xa006, 0xaf04,
+ 0x3c31, 0xe40e, 0x05aa, 0x2850, 0xae06, 0x3c32, 0x2851, 0xa00e,
+ 0xaf06, 0x3c31, 0xe40e, 0x05aa, 0x812f, 0x8117, 0x2851, 0xae08,
+ 0x1907, 0xe408, 0x055e, 0x2847, 0xae04, 0xe000, 0x0200, 0xe09e,
+ 0x2917, 0xaf08, 0x3c50, 0x2917, 0xaf08, 0x3c51, 0x2917, 0x3c32,
+ 0x2907, 0x3c31, 0xa200, 0x2a20, 0xe003, 0x7530, 0xb632, 0x2a21,
+ 0xe003, 0x03e9, 0xb632, 0x3c38, 0xf08a, 0x2855, 0xf068, 0x2821,
+ 0xa102, 0xe408, 0x0624, 0x3c38, 0xe0c0, 0x0069, 0x3008, 0xaf02,
+ 0x3009, 0xaf02, 0x3c0a, 0xe0c0, 0x006a, 0x3c40, 0xe0c0, 0x006b,
+ 0x303f, 0x3481, 0xaf02, 0xe008, 0x7fff, 0x3c80, 0xf028, 0x3c3f,
+ 0x2881, 0xaf1e, 0x30ac, 0x2881, 0xe008, 0x7fff, 0x3c81, 0xe0c0,
+ 0x006c, 0x3482, 0x3c83, 0xe0c0, 0x006d, 0x3c41, 0x8450, 0x8251,
+ 0xe018, 0x3c52, 0xa201, 0xe002, 0x00c8, 0xb425, 0xe002, 0x0190,
+ 0xb425, 0x3e44, 0xa202, 0x30b5, 0xe0c0, 0x0043, 0xaf06, 0xaf02,
+ 0x30b6, 0xaf02, 0x30b7, 0xaf02, 0x30de, 0x2850, 0x2a51, 0xaf06,
+ 0xaf07, 0x3c06, 0x3e07, 0x8406, 0x8207, 0xe018, 0x3cc6, 0xa104,
+ 0xf032, 0xa204, 0x3cc6, 0x2851, 0xaf02, 0x3c06, 0x8406, 0x8250,
+ 0xe018, 0x3cc2, 0x3cc7, 0xa202, 0x3cc5, 0xe0c0, 0x0076, 0xe049,
+ 0xa807, 0x3e0d, 0xaf04, 0x300e, 0xaf02, 0xa81e, 0x3c0f, 0xa20e,
+ 0x2a0e, 0xb612, 0xa200, 0x3c0e, 0x280f, 0xb7f4, 0xa81e, 0x3c0f,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200, 0xe0c2, 0x0070, 0xe42e,
+ 0xa200, 0x3c1f, 0xe0c0, 0x0065, 0xa804, 0xf03a, 0xa200, 0x3c3b,
+ 0x28b9, 0x1840, 0xe01a, 0x2ab9, 0xe01b, 0xe052, 0xe016, 0x2a40,
+ 0xe01b, 0xe052, 0x2a40, 0x4e3b, 0xe017, 0xe056, 0xa203, 0xb611,
+ 0x3e24, 0x3e2c, 0xa202, 0xf02b, 0x08b9, 0x3cb9, 0xe0c0, 0x0065,
+ 0xa802, 0xe418, 0x065e, 0xe0c0, 0x0063, 0x3c27, 0xa208, 0x180d,
+ 0x2a30, 0xb632, 0x3c28, 0x283f, 0xe42a, 0x282c, 0xe41a, 0x1199,
+ 0xe41e, 0x119a, 0x3c27, 0xe419, 0x065e, 0xe42e, 0xa202, 0x3c24,
+ 0x3c2c, 0x3c1f, 0xe0c0, 0x0060, 0xaf20, 0xae20, 0x4c3a, 0xe0c2,
+ 0x0060, 0xe42e, 0xe167, 0x05d0, 0xa201, 0x3f17, 0x2aea, 0xe045,
+ 0x3f17, 0xc872, 0x22f9, 0x4efa, 0xe046, 0x3517, 0x3d17, 0xc872,
+ 0x34f9, 0x3cfa, 0x282f, 0xae06, 0xe167, 0x05ca, 0x2317, 0x4f17,
+ 0xe042, 0xce20, 0xd111, 0x05d0, 0xd112, 0x0004, 0xd113, 0x0002,
+ 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0040, 0xe005, 0x006a, 0xae17,
+ 0xe042, 0xe005, 0x1600, 0xae03, 0xe042, 0xce20, 0xd111, 0x0200,
+ 0xd112, 0x018c, 0xd113, 0x0003, 0xe1e1, 0xe42e, 0xe0c0, 0x0060,
+ 0xf06a, 0xa102, 0xf09a, 0xa102, 0xf0aa, 0xe42e, 0xe41e, 0x0b08,
+ 0xe41e, 0x0b0d, 0xf06e, 0xe41e, 0x0b51, 0xf03e, 0xe41e, 0x0b72,
+ 0xc868, 0xaf06, 0xc867, 0xe003, 0x0080, 0xae05, 0xe042, 0x3c06,
+ 0xe0c2, 0x0070, 0xc86e, 0xd037, 0x00c0, 0xbad7, 0xcc6e, 0xe0c0,
+ 0x0042, 0xce20, 0xd111, 0x0100, 0xd112, 0x0080, 0xd113, 0x0012,
+ 0xe1e1, 0xe42e, 0xe0c1, 0x0060, 0xa803, 0xf05b, 0xe0c0, 0x0061,
+ 0xe41e, 0x1142, 0xe0c1, 0x0060, 0xa805, 0xf05b, 0xe0c0, 0x0062,
+ 0xe41e, 0x118e, 0xe0c1, 0x0060, 0xa809, 0xf05b, 0xe0c0, 0x0063,
+ 0xe41e, 0x1168, 0xe0c1, 0x0060, 0xa811, 0xf05b, 0xe0c0, 0x0064,
+ 0xe41e, 0x1109, 0xe0c1, 0x0060, 0xa821, 0xf04b, 0xe0c0, 0x0065,
+ 0x3c41, 0xe0c1, 0x0060, 0xa841, 0xf08b, 0xe0c0, 0x0066, 0x3008,
+ 0xaf02, 0x3009, 0xaf02, 0x3c0a, 0xe0c1, 0x0060, 0xa881, 0xf04b,
+ 0xe0c0, 0x0067, 0x3c48, 0xe42e, 0xa206, 0xe41e, 0x0153, 0xe41e,
+ 0x0213, 0xa226, 0xe41e, 0x033d, 0xe167, 0x0160, 0xe41e, 0x034e,
+ 0xe167, 0x0170, 0xe41e, 0x0369, 0xe42e, 0xa224, 0xe41e, 0x033d,
+ 0xe167, 0x0160, 0xe41e, 0x037f, 0xe167, 0x0170, 0xe41e, 0x039a,
+ 0xa204, 0xe41e, 0x0153, 0xe42e, 0x2827, 0x3c62, 0xa200, 0x3cd3,
+ 0x3ce2, 0x3ce3, 0x3ce4, 0x3ce5, 0x3ce6, 0x3ce7, 0x3c54, 0x3c53,
+ 0x3cf7, 0x3cf8, 0x3cf5, 0x3cea, 0x3ce8, 0x3ce9, 0x3c01, 0x3c02,
+ 0x3c03, 0x3c2f, 0xcf64, 0xcf62, 0xe0c2, 0x0113, 0xe0c2, 0x030d,
+ 0xa202, 0xe0c2, 0x0130, 0xa2fe, 0x2a22, 0xb616, 0x3c16, 0xe004,
+ 0x0055, 0xe0c2, 0x030c, 0x2836, 0xe016, 0x4430, 0xe408, 0x07c8,
+ 0xa223, 0x2824, 0xe40a, 0x0756, 0x2a28, 0xa021, 0x3e61, 0xa200,
+ 0x3c0b, 0xcc70, 0xa202, 0x3c0c, 0x2822, 0xe418, 0x0cd9, 0xa202,
+ 0xe0c2, 0x0110, 0x280b, 0xa802, 0xf03a, 0xa202, 0x3cdb, 0xe41e,
+ 0x0a3e, 0xe408, 0x07ba, 0x2802, 0xf1ea, 0x280b, 0xa802, 0xe418,
+ 0x0863, 0x2858, 0x2a62, 0x1a26, 0xb606, 0x3c5f, 0xcf26, 0xe41e,
+ 0x088d, 0x2824, 0xe418, 0x0ac7, 0x2858, 0xae04, 0x4c59, 0xcf02,
+ 0x2835, 0xf06a, 0x2859, 0xe016, 0xae0a, 0x4c5d, 0xcf6a, 0xa202,
+ 0xe0c2, 0x021e, 0xe41e, 0x0828, 0x283f, 0xe016, 0x4c22, 0xf038,
+ 0x8a6e, 0x0039, 0x2802, 0xe418, 0x0895, 0x285d, 0x2ace, 0x3c62,
+ 0x3e63, 0x283f, 0x2a22, 0xf18a, 0xc872, 0xf0ab, 0xc870, 0xc440,
+ 0xa217, 0xe001, 0x046a, 0xe095, 0x0932, 0x0902, 0x3c06, 0x1c6e,
+ 0xe008, 0xffff, 0x3c6f, 0x2a22, 0x2806, 0xf02b, 0x3c6e, 0x285d,
+ 0x2a02, 0xe419, 0x1278, 0xe41e, 0x139f, 0x20e8, 0x4ce9, 0xcf62,
+ 0xe40e, 0x0762, 0x2822, 0xe418, 0x0ceb, 0xa202, 0xe41e, 0x0886,
+ 0x2836, 0xf048, 0xe41e, 0x0c70, 0xe42e, 0xe41e, 0x0c7a, 0xe42e,
+ 0xa202, 0xe0c2, 0x0110, 0xa200, 0x3c4a, 0xf0fe, 0xa202, 0x3cdb,
+ 0x2808, 0xf0ba, 0xbacf, 0xbae0, 0x284a, 0xba88, 0xbac1, 0x285d,
+ 0x3c27, 0xba88, 0xd1b3, 0x0002, 0xa200, 0x3c49, 0xe41e, 0x0a3e,
+ 0xe408, 0x0825, 0x8a6e, 0x0039, 0x2802, 0xf1ca, 0x2858, 0x2a62,
+ 0x1a26, 0xb606, 0x3c5f, 0xcf26, 0xe41e, 0x088d, 0x2824, 0xe418,
+ 0x0ac7, 0x2858, 0xae04, 0x4c59, 0xcf02, 0x2835, 0xf06a, 0x2859,
+ 0xe016, 0xae0a, 0x4c5d, 0xcf6a, 0xa202, 0xe0c2, 0x021e, 0xe41e,
+ 0x08ca, 0x285d, 0x2ace, 0x3c62, 0x3e63, 0xc872, 0x1c6e, 0xe008,
+ 0xffff, 0x3c6f, 0x2a3f, 0x4602, 0x285d, 0xe419, 0x1278, 0xe41e,
+ 0x139f, 0x20e8, 0x4ce9, 0xcf62, 0x2802, 0xe40a, 0x07de, 0x2849,
+ 0xa002, 0x3c49, 0x1832, 0xe408, 0x07de, 0x284a, 0xa002, 0x3c4a,
+ 0x1831, 0xe408, 0x07ce, 0xe40e, 0x07de, 0xe41e, 0x0c7a, 0xe42e,
+ 0x2808, 0x2a09, 0xe42a, 0x2822, 0xf239, 0x2a02, 0xe42b, 0xf0d8,
+ 0x2a0b, 0xaf03, 0x3e0b, 0xe429, 0xc870, 0x1c0a, 0xe424, 0xa210,
+ 0x3c0b, 0xa202, 0x3c66, 0xe42e, 0x2a0b, 0xaf03, 0x3e0b, 0xe429,
+ 0xc870, 0xc440, 0xa217, 0xe001, 0x046a, 0xe095, 0x0932, 0x0902,
+ 0x1c0a, 0xe424, 0xa210, 0x3c0b, 0xa202, 0x3c66, 0xe42e, 0x2a54,
+ 0xe42b, 0x280c, 0x180a, 0x2a0c, 0xa003, 0x3e0c, 0x2a0b, 0xaf03,
+ 0x3e0b, 0xe428, 0xa202, 0x3c0c, 0x280b, 0xa940, 0x3c0b, 0x2866,
+ 0xa908, 0x3c66, 0xe42e, 0x28f5, 0xe016, 0x3cf5, 0x2822, 0xe418,
+ 0x0ceb, 0xa200, 0xe41e, 0x0886, 0x2822, 0xe418, 0x0cd9, 0x2809,
+ 0xf038, 0xd038, 0x0000, 0x2862, 0x3c27, 0xe41e, 0x0bb4, 0x283f,
+ 0x4422, 0xf0aa, 0xc870, 0xc440, 0xa217, 0xe001, 0x046a, 0xe095,
+ 0x0932, 0x0902, 0x3c6e, 0xd1b3, 0x0002, 0xe42e, 0x2af4, 0xe419,
+ 0x066a, 0x282f, 0xa002, 0x3c2f, 0xe42e, 0xd190, 0x0002, 0xcb20,
+ 0xa804, 0xf7e8, 0xcb04, 0x3c5e, 0xe42e, 0x28ea, 0xe0c2, 0x003f,
+ 0x2a36, 0x2822, 0xe409, 0x08ca, 0x2a24, 0xe40a, 0x08a3, 0xe40b,
+ 0x0983, 0xe40e, 0x09ae, 0x2859, 0x7024, 0xe428, 0x285b, 0xae02,
+ 0x4c5a, 0xae02, 0x4c58, 0x3c4f, 0xa200, 0x0824, 0x3c00, 0x285e,
+ 0xa806, 0xae06, 0x4c4f, 0x6c00, 0x285c, 0x7058, 0xa20a, 0x1858,
+ 0x3c00, 0x285e, 0xaf04, 0x6c00, 0x285a, 0xe418, 0x09e0, 0x2858,
+ 0xe41a, 0x09ff, 0x8877, 0x0194, 0xd190, 0x0001, 0xcb20, 0xa802,
+ 0xf7e8, 0xe42e, 0x2859, 0x7024, 0xe428, 0x285b, 0xae02, 0x4c5a,
+ 0xae02, 0x4c58, 0x3c4f, 0xa200, 0x0824, 0x0824, 0x0824, 0x3c00,
+ 0x285e, 0xa806, 0xae06, 0x4c4f, 0x6c00, 0xa20a, 0x1858, 0x3c00,
+ 0x285e, 0xaf04, 0x6c00, 0x285a, 0xe418, 0x09e5, 0x2858, 0xe41a,
+ 0x09f1, 0xcb3e, 0xe016, 0xa802, 0x4437, 0xe418, 0x0a29, 0xa201,
+ 0xe0c3, 0x0134, 0xf098, 0x8877, 0x0194, 0xd190, 0x0001, 0xcb20,
+ 0xa802, 0xf7e8, 0xe42e, 0xa20c, 0x3c4d, 0x2a4d, 0xe427, 0xa103,
+ 0x3e4d, 0x285f, 0xe418, 0x090a, 0x285e, 0x5c4d, 0xa802, 0xe418,
+ 0x0919, 0xf74e, 0xa20a, 0xe046, 0xae0c, 0xcf3a, 0xcf3c, 0xcb38,
+ 0xe005, 0x00fe, 0xe066, 0xe049, 0xe003, 0x0080, 0xb7f6, 0xba8e,
+ 0xe42e, 0xe41e, 0x091e, 0xe41e, 0x094e, 0xe42e, 0x2877, 0x5c4d,
+ 0x5c4d, 0xa806, 0xe005, 0x02ac, 0xf07a, 0xe005, 0x02ec, 0xa106,
+ 0xf03a, 0xe005, 0x032c, 0xe09f, 0x8117, 0xe165, 0x0482, 0xe166,
+ 0x04c2, 0xa27c, 0xcc44, 0xa20a, 0x2a4d, 0xe046, 0xae0c, 0x3c06,
+ 0xa200, 0xa201, 0x3cd6, 0xe184, 0x094c, 0x2806, 0x4d17, 0xcf3a,
+ 0xcf3c, 0xcb38, 0xe008, 0x0fff, 0xb435, 0xf07a, 0x3f15, 0x3d16,
+ 0xa201, 0x28d6, 0xa002, 0x3cd6, 0xe190, 0xe42e, 0xe165, 0x0482,
+ 0xe166, 0x04c2, 0x28d6, 0xa104, 0xcc44, 0xe184, 0x095c, 0x2915,
+ 0xae18, 0x4d16, 0xb914, 0xe41d, 0x0966, 0xa202, 0xae0c, 0x4d15,
+ 0xae18, 0x4d16, 0xb914, 0xe41d, 0x0966, 0xe42e, 0xe16a, 0x810e,
+ 0xa207, 0xba8d, 0xaf18, 0xba8c, 0x2906, 0xae30, 0xaf30, 0xe049,
+ 0xe002, 0x007f, 0xe001, 0x007f, 0xf050, 0xf045, 0x2916, 0xba8e,
+ 0xe42e, 0xe004, 0x0080, 0xba8e, 0x2906, 0xa83e, 0xba88, 0x2916,
+ 0xaf0a, 0xba8a, 0xe42e, 0x285b, 0xae02, 0x4c5a, 0xae02, 0x4c58,
+ 0x3c4f, 0x285e, 0xa806, 0xae06, 0x4c4f, 0xb900, 0x285a, 0xe418,
+ 0x09e0, 0x285f, 0xf06a, 0xd190, 0x0001, 0xcb20, 0xa802, 0xf7e8,
+ 0xa203, 0xe41e, 0x0ca7, 0x285c, 0xba80, 0x285e, 0xaf04, 0xb908,
+ 0xa205, 0xe41e, 0x0ca7, 0x8877, 0x0194, 0xd190, 0x0004, 0xcb20,
+ 0xa808, 0xf7e8, 0xa201, 0xe41e, 0x0ca7, 0xe42e, 0x2859, 0xba80,
+ 0xe428, 0x285b, 0xae02, 0x4c5a, 0xae02, 0x4c58, 0x3c4f, 0x285e,
+ 0xa806, 0xae06, 0x4c4f, 0xb902, 0x2858, 0xe41a, 0x09ff, 0xa203,
+ 0xe41e, 0x0ca7, 0x285c, 0x7058, 0xa20a, 0x1858, 0x3c00, 0x285e,
+ 0xaf04, 0x6c00, 0x285a, 0xe418, 0x09e0, 0xd190, 0x0001, 0xcb20,
+ 0xa802, 0xf7e8, 0xa205, 0xe41e, 0x0ca7, 0x8877, 0x0194, 0xd190,
+ 0x0004, 0xcb20, 0xa808, 0xf7e8, 0xa201, 0xe41e, 0x0ca7, 0xe42e,
+ 0x286c, 0xa002, 0xb628, 0xba82, 0xe42e, 0x2837, 0xe40a, 0x09e0,
+ 0x286c, 0xa140, 0xe404, 0x09ee, 0xba82, 0xe42e, 0x286c, 0xba8a,
+ 0xe42e, 0x285b, 0xb670, 0xcc44, 0xe161, 0x06c0, 0xe184, 0x09fd,
+ 0x2911, 0xa040, 0xb90c, 0x2911, 0xa040, 0xb90c, 0xe42e, 0xe162,
+ 0x06c0, 0x285b, 0xb670, 0xcc44, 0xe184, 0x0a0c, 0x2912, 0xe41e,
+ 0x0a0e, 0x2912, 0xe41e, 0x0a0e, 0xe190, 0xe42e, 0xe40a, 0x0a26,
+ 0xe404, 0x0a1b, 0xa102, 0xe049, 0x5c29, 0xa002, 0xa040, 0xb90c,
+ 0x462a, 0x7229, 0xe42e, 0xa002, 0xe012, 0xe049, 0x5c29, 0xa002,
+ 0xe012, 0xa040, 0xb90c, 0x462a, 0x7229, 0xe42e, 0xa040, 0xb90c,
+ 0xe42e, 0xe004, 0x017f, 0xcc44, 0xa202, 0xe0c2, 0x0134, 0xa200,
+ 0xe184, 0x0a39, 0xe0c2, 0x0135, 0xa002, 0xe0c1, 0x0136, 0xe003,
+ 0xff80, 0xf03b, 0xa200, 0xe42e, 0xa202, 0xe42e, 0xe41e, 0x101a,
+ 0x2801, 0xe428, 0xa202, 0xe0c2, 0x0110, 0xa200, 0x3c5b, 0x3c5c,
+ 0x3c77, 0x3c59, 0xe41e, 0x0a61, 0xe41e, 0x0fdd, 0xe41e, 0x13b8,
+ 0x2a02, 0x2858, 0xe017, 0xe016, 0x4e30, 0xe055, 0xf099, 0xe0c0,
+ 0x0130, 0xaf06, 0x305c, 0xe0c1, 0x0132, 0xb615, 0x3e77, 0xa200,
+ 0xe42e, 0x2803, 0xf1da, 0x2824, 0xf05a, 0xe0c0, 0x018f, 0xe01a,
+ 0x3c5b, 0x2824, 0xe016, 0xf088, 0xe0c0, 0x011e, 0xa802, 0x2a41,
+ 0xf038, 0xe419, 0x135c, 0x3c58, 0x2a1f, 0xf03b, 0xa201, 0x3e58,
+ 0x2a5b, 0xb611, 0x3e5b, 0xf04b, 0x28d3, 0xa940, 0x3cd3, 0x2a3f,
+ 0x462c, 0x4602, 0x2827, 0xf0eb, 0xe41e, 0x1212, 0x2ad9, 0xf02b,
+ 0x28d2, 0x2ad3, 0xa803, 0xf02b, 0x2862, 0x1862, 0xa504, 0xa4fc,
+ 0x0862, 0x3c5d, 0x2a3f, 0x462c, 0x4602, 0x2827, 0xf0db, 0x2893,
+ 0x2ad9, 0xf02b, 0x28c8, 0x2ad3, 0xa811, 0xf02b, 0x2863, 0x1863,
+ 0xa504, 0xa4fc, 0x0863, 0x3cce, 0x285d, 0x1862, 0x3c6c, 0x2a37,
+ 0xf18a, 0xf17b, 0x2862, 0xe000, 0x022c, 0xe09e, 0xe160, 0x0020,
+ 0x286c, 0x1937, 0xe40a, 0x0abb, 0x286c, 0x1907, 0xe40a, 0x0abe,
+ 0x285d, 0xe40e, 0x0abf, 0xa244, 0xe40e, 0x0abf, 0xa246, 0x3c6c,
+ 0x286c, 0xe01a, 0x3c5a, 0x28d3, 0xaf02, 0x3cd3, 0xe42e, 0xe162,
+ 0x06c0, 0x2869, 0xe09a, 0x2b15, 0x3e5b, 0x2915, 0x4d0d, 0x4c5a,
+ 0x4c58, 0x4c5b, 0x4c5e, 0xe01a, 0xe016, 0x3c59, 0x2858, 0xae04,
+ 0x4c59, 0xcf02, 0x2858, 0xf258, 0x2a5b, 0xcf4b, 0x2115, 0x4d15,
+ 0xcf4c, 0xf0ab, 0x2115, 0x4d15, 0xcf4e, 0x2115, 0x4d15, 0xcf50,
+ 0x2115, 0x4d15, 0xcf52, 0xd1a0, 0x0001, 0xcb40, 0xa802, 0xf7e8,
+ 0xcb4c, 0x3512, 0x3d12, 0xf0ab, 0xcb4e, 0x3512, 0x3d12, 0xcb50,
+ 0x3512, 0x3d12, 0xcb52, 0x3512, 0x3d12, 0xe08a, 0x3c69, 0xe42e,
+ 0xd1a0, 0x0001, 0xcb40, 0xa802, 0xf7e8, 0xa200, 0x3c5b, 0xe42e,
+ 0xbacf, 0xe004, 0x0100, 0xba9e, 0xe42e, 0xa204, 0x2ac9, 0xb632,
+ 0x3c00, 0xbacf, 0xe004, 0x0120, 0xba9e, 0xbac0, 0xbae7, 0xbae0,
+ 0x2800, 0xba86, 0xbae2, 0xbae3, 0xbac0, 0xbac1, 0xbae0, 0x2c20,
+ 0xba9e, 0xbae0, 0x2821, 0xa102, 0xe01a, 0xba80, 0xf07a, 0x2c20,
+ 0xe41e, 0x0c83, 0x3c4e, 0x2821, 0x704e, 0xbae0, 0x287a, 0x2a7b,
+ 0xba98, 0xbae0, 0xba99, 0xbae0, 0xbac0, 0xbae0, 0xa200, 0x7000,
+ 0xbac0, 0xbac0, 0x2800, 0xa102, 0xf02a, 0xbac0, 0xbae0, 0xbac0,
+ 0x2822, 0xba80, 0xf03a, 0x2823, 0xba80, 0x2800, 0xa102, 0xe40a,
+ 0x0b4b, 0xbac0, 0xbac0, 0xbac0, 0xe41e, 0x0c70, 0xc872, 0x3c54,
+ 0xe42e, 0xbacf, 0xe004, 0x01b0, 0xba9e, 0x2850, 0xa116, 0xf090,
+ 0x2851, 0xa112, 0xf060, 0x283d, 0xa11e, 0xf030, 0xa202, 0xf11e,
+ 0x2850, 0xa12c, 0xf0d0, 0x2851, 0xa124, 0xf0a0, 0x283d, 0xa13c,
+ 0xf070, 0xa01e, 0xf030, 0xa204, 0xf04e, 0xa206, 0xf02e, 0xa208,
+ 0xba8e, 0xe42e, 0xbacf, 0xe004, 0x01b5, 0xba9e, 0xbae0, 0xa204,
+ 0xba86, 0xa202, 0xba84, 0xbae3, 0xbac0, 0xe41e, 0x0c70, 0xe42e,
+ 0xbacf, 0xe004, 0x01b6, 0xba9e, 0x2824, 0xba82, 0x2c3b, 0xf0aa,
+ 0x2c2b, 0xf038, 0xbae0, 0xf06e, 0x1c20, 0xf046, 0x1821, 0xf022,
+ 0xbae0, 0xbac0, 0xbae0, 0x2c20, 0xe41e, 0x0c83, 0x3c4e, 0x2c2b,
+ 0x704e, 0xbae0, 0xbae0, 0x2824, 0xa102, 0xf038, 0x2825, 0xba80,
+ 0x2846, 0xba84, 0xe000, 0x0220, 0xe09e, 0x2907, 0x3c26, 0x2827,
+ 0xba88, 0x2824, 0xe42a, 0x2828, 0xba84, 0xa102, 0x3c29, 0xa202,
+ 0x5829, 0xa102, 0x3c2a, 0xe42e, 0x2836, 0xe408, 0x0c4f, 0xe41e,
+ 0x0c70, 0xbacf, 0x2861, 0xa120, 0x3c4e, 0xa202, 0x704e, 0x2852,
+ 0xe41e, 0x0c83, 0x3c4e, 0x28ea, 0x704e, 0x2827, 0xba88, 0x2848,
+ 0xba80, 0xe42a, 0x2c3b, 0xf0aa, 0x2c2b, 0xf038, 0xbae0, 0xf06e,
+ 0x1c20, 0xf046, 0x1821, 0xf022, 0xbae0, 0xbac0, 0xbae0, 0x2c20,
+ 0xe41e, 0x0c83, 0x3c4e, 0x2c2b, 0x704e, 0xbae0, 0x2824, 0xba82,
+ 0x2846, 0xba84, 0x2824, 0xe42a, 0x2828, 0xba84, 0xe42e, 0xe41e,
+ 0x0c7a, 0xbacf, 0xa240, 0xba8a, 0x2c3b, 0xe008, 0x00ff, 0xba8e,
+ 0xbae0, 0xbac0, 0xbac0, 0xbac0, 0xbac0, 0x2855, 0xf0a8, 0x2847,
+ 0xba84, 0x2824, 0xba80, 0xbac3, 0x2827, 0xba88, 0xbac0, 0xf3ee,
+ 0xa20e, 0xba84, 0xbae2, 0x2847, 0xba84, 0x2838, 0xba80, 0xbac2,
+ 0x2834, 0xba80, 0x2835, 0xba80, 0x2836, 0xba80, 0xbac2, 0x2837,
+ 0xba80, 0xbae0, 0xbac2, 0x2824, 0xba84, 0xbac1, 0x2825, 0xba80,
+ 0xbae2, 0xbac0, 0x2847, 0xa10c, 0xf0b8, 0xa204, 0xba86, 0x287a,
+ 0xaf04, 0xa102, 0xba90, 0xbae0, 0x287b, 0xaf04, 0xba90, 0x2838,
+ 0xf10a, 0x2821, 0xe002, 0x03e9, 0xe016, 0xba80, 0x8421, 0xe182,
+ 0x0708, 0xe018, 0xc70f, 0x7c20, 0xba8c, 0x2c3b, 0xaf10, 0xba82,
+ 0xa200, 0x7036, 0x7036, 0x2827, 0xba88, 0xbac0, 0xa200, 0x3cea,
+ 0x2836, 0xe418, 0x0c4f, 0x2846, 0xe000, 0x0220, 0xe09e, 0x2907,
+ 0x3c26, 0xa202, 0x3c28, 0xa200, 0x3c29, 0x3c2a, 0xe42e, 0x28ea,
+ 0xf0ba, 0xc868, 0xa80e, 0xf06a, 0xa110, 0xe012, 0x3c4e, 0xa200,
+ 0x704e, 0xba9e, 0xbae0, 0xbae0, 0x2852, 0xe41e, 0x0c8c, 0x3c4e,
+ 0x2aea, 0x724e, 0xa116, 0xf046, 0x28ea, 0xf02a, 0xbae0, 0x28ea,
+ 0xf03a, 0x2827, 0xba88, 0xbae0, 0x28ea, 0xf02a, 0xbac1, 0xe42e,
+ 0xbac0, 0xc868, 0xa80e, 0xe42a, 0xa110, 0xe012, 0x3c4e, 0xa2fe,
+ 0x704e, 0xe42e, 0xc868, 0xa80e, 0xe42a, 0xa110, 0xe012, 0x3c4e,
+ 0xa200, 0x704e, 0xe42e, 0xa102, 0xa201, 0xf05a, 0xaf02, 0xa003,
+ 0xe408, 0x0c86, 0xe04a, 0xe42e, 0xa102, 0xa15e, 0xf0d6, 0xa166,
+ 0xf0d6, 0xe002, 0x0129, 0xf0c6, 0xe002, 0x04a4, 0xf0b6, 0xe002,
+ 0x1290, 0xf0a6, 0xf0be, 0xa20c, 0xe42e, 0xa20e, 0xe42e, 0xa212,
+ 0xe42e, 0xa216, 0xe42e, 0xa21a, 0xe42e, 0xa21c, 0xe42e, 0xf049,
+ 0x20d4, 0x4cd5, 0xcc72, 0x2816, 0xf048, 0xc872, 0x34d4, 0x3cd5,
+ 0x2816, 0xae06, 0xe000, 0x046a, 0xe092, 0xc860, 0x3511, 0x3d11,
+ 0x8b11, 0x0034, 0x8b11, 0x0038, 0x8b11, 0x0033, 0x8b11, 0x0035,
+ 0x8b11, 0x0037, 0x8b11, 0x0036, 0x3e16, 0xae07, 0xe001, 0x046a,
+ 0xe093, 0x2111, 0x4d11, 0xcc60, 0x8911, 0x0034, 0x8911, 0x0038,
+ 0x8911, 0x0033, 0x8911, 0x0035, 0x8911, 0x0037, 0x8911, 0x0036,
+ 0xe42e, 0xe41e, 0x140b, 0xe004, 0x00a4, 0x3c18, 0xa200, 0x3c19,
+ 0xa200, 0x3c1a, 0x3c1b, 0x2816, 0xa201, 0x3e16, 0xe424, 0xa201,
+ 0xe41e, 0x0ca7, 0xe42e, 0x2824, 0xe408, 0x0cf4, 0xe004, 0x006b,
+ 0xba8c, 0xbaeb, 0xe40e, 0x0cf7, 0xa23e, 0xba88, 0xbaeb, 0xe41e,
+ 0x0cfc, 0xe41e, 0x0d2f, 0xe42e, 0xc872, 0x34d4, 0x3cd5, 0x281a,
+ 0xe40a, 0x0d1f, 0x2818, 0xe002, 0x00a4, 0x3c1c, 0xe41e, 0x149c,
+ 0xd04c, 0x0000, 0xe004, 0x00a4, 0x3c18, 0xe41e, 0x1474, 0xe004,
+ 0x0800, 0x3c1e, 0xe161, 0x0080, 0xe41e, 0x0d5d, 0xc872, 0x34d4,
+ 0x3cd5, 0x281c, 0xa102, 0x3c1c, 0xf718, 0xe41e, 0x1474, 0xa203,
+ 0xe41e, 0x0ca7, 0xc870, 0xe008, 0x07ff, 0x3c1e, 0xe161, 0x0080,
+ 0xbadf, 0xe41e, 0x0d5d, 0xc872, 0x34d4, 0x3cd5, 0xe42e, 0x281b,
+ 0xe40a, 0x0d4d, 0x2819, 0x3c1c, 0xe41e, 0x14b1, 0xd04c, 0x0000,
+ 0xa200, 0x3c19, 0xe41e, 0x1487, 0xe004, 0x0800, 0x3c1e, 0xe161,
+ 0x00c0, 0xe41e, 0x0d5d, 0xc872, 0x34d4, 0x3cd5, 0x281c, 0xa102,
+ 0x3c1c, 0xe408, 0x0d3a, 0xe41e, 0x1487, 0xa205, 0xe41e, 0x0ca7,
+ 0xc870, 0xe008, 0x07ff, 0x3c1e, 0xe161, 0x00c0, 0xbadf, 0xe41e,
+ 0x0d5d, 0xc872, 0x34d4, 0x3cd5, 0xe42e, 0xe082, 0xcc76, 0xa201,
+ 0xe41e, 0x0ca7, 0xa201, 0x281e, 0xaf0a, 0xe40a, 0x0d6d, 0xa102,
+ 0xcc44, 0xe184, 0x0d6c, 0xc87a, 0xbabe, 0x281e, 0xa83e, 0xe42a,
+ 0x3c1e, 0xa140, 0xe012, 0x3c1d, 0xc87a, 0x5c1d, 0x701e, 0xe42e,
+ 0xa200, 0xe0c2, 0x0128, 0xa200, 0x3c39, 0xe0c0, 0x0414, 0xf308,
+ 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xa201, 0xae09,
+ 0xa907, 0xae09, 0xa907, 0xae09, 0xa907, 0xae09, 0xa901, 0xae09,
+ 0xa907, 0xae09, 0xa905, 0xae09, 0xa905, 0xe0c3, 0x0152, 0xa241,
+ 0xae11, 0xa911, 0xae11, 0xa911, 0xe0c3, 0x0153, 0xa201, 0xae21,
+ 0xa902, 0xae02, 0xa902, 0xae04, 0xa900, 0x3c4b, 0xe056, 0xe0c2,
+ 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xe42e,
+ 0xe167, 0x0502, 0xe166, 0x0064, 0xd022, 0x0003, 0xe184, 0x0dba,
+ 0x9e16, 0x3517, 0x3d17, 0xe42e, 0xe41e, 0x0e05, 0xe41e, 0x0eb7,
+ 0xe41e, 0x0f6e, 0xe41e, 0x0fbb, 0xe004, 0x0702, 0xe096, 0x2313,
+ 0x4f13, 0xe004, 0x0700, 0xe096, 0x2113, 0x4d13, 0x3513, 0x3d13,
+ 0xe004, 0x0700, 0xe096, 0x3713, 0x3f13, 0x2839, 0xe0c2, 0x0072,
+ 0x3c3a, 0xa002, 0x3c39, 0x183c, 0xf028, 0x3c39, 0xe004, 0x0400,
+ 0x3c68, 0x3c69, 0xd008, 0x000d, 0xd009, 0x0400, 0xd00a, 0x0436,
+ 0xa202, 0x3c66, 0xe0c2, 0x0106, 0xe0c2, 0x0139, 0xe41e, 0x024d,
+ 0xe0c0, 0x0065, 0xaf06, 0xa80e, 0xe42a, 0xaf04, 0x30f4, 0xe180,
+ 0xe0c1, 0x0068, 0xce21, 0xd112, 0x000c, 0xd111, 0x05c0, 0xd113,
+ 0x0003, 0xca29, 0xf7f9, 0xe181, 0xe42e, 0xa200, 0xe0c2, 0x0128,
+ 0xe0c0, 0x0050, 0xe049, 0xe008, 0x00ff, 0x3ccc, 0xaf11, 0xe009,
+ 0x00ff, 0x3ecd, 0x46cc, 0x3ecc, 0x2837, 0xae02, 0x4c36, 0xae02,
+ 0x4c35, 0xae06, 0x4c30, 0xae08, 0xa916, 0xe0c2, 0x0100, 0x2050,
+ 0x4c51, 0xae08, 0xe0c2, 0x0101, 0xa200, 0xe41e, 0x1028, 0xe0c2,
+ 0x0102, 0xe0c0, 0x0046, 0xe005, 0x0000, 0xae11, 0xe042, 0x2acd,
+ 0xa805, 0xf05b, 0xe167, 0x0504, 0x2117, 0x4d17, 0xe0c2, 0x0103,
+ 0x282c, 0xae06, 0xe0c2, 0x0104, 0xa200, 0xe0c2, 0x0105, 0xe0c0,
+ 0x0064, 0x3c75, 0x2a1f, 0xb612, 0xe0c2, 0x0138, 0x2050, 0x4c51,
+ 0xae08, 0x2a1f, 0xaa03, 0x4675, 0xa803, 0xf04b, 0x2051, 0x4c50,
+ 0xae08, 0xe0c2, 0x0142, 0xe0c0, 0x0060, 0xa87e, 0xe0c2, 0x0143,
+ 0xe0c0, 0x0069, 0xe0c2, 0x014f, 0xe004, 0x3211, 0xae20, 0xe00a,
+ 0x2100, 0xe0c2, 0x0155, 0xe004, 0x9211, 0xae20, 0xe00a, 0x2100,
+ 0xe0c2, 0x0158, 0xe004, 0x1000, 0xae20, 0xe00a, 0x0000, 0xe0c2,
+ 0x0156, 0xe0c2, 0x0159, 0xe004, 0x0104, 0xe0c2, 0x0154, 0xe0c2,
+ 0x0157, 0xa202, 0xe0c2, 0x015a, 0x2827, 0xae04, 0xe0c2, 0x0176,
+ 0xe049, 0xae02, 0xae05, 0xe042, 0xa004, 0xe0c2, 0x0177, 0xa200,
+ 0x2acc, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2acc, 0xa805, 0xf03b,
+ 0xe00a, 0x0009, 0x2acc, 0xa809, 0xf03b, 0xe00a, 0x0020, 0x2acc,
+ 0xa811, 0xf03b, 0xe00a, 0x0040, 0xe0c2, 0x040c, 0x2a2c, 0xe004,
+ 0x0077, 0xf039, 0xe004, 0x0070, 0xe0c2, 0x017c, 0xa200, 0xe0c2,
+ 0x017d, 0xa200, 0xe0c2, 0x0113, 0xe166, 0x0510, 0x2116, 0x4d16,
+ 0xe0c2, 0x011f, 0xe004, 0x003f, 0xe0c2, 0x012a, 0xe42e, 0xa200,
+ 0xe0c2, 0x0312, 0xa200, 0xe0c2, 0x0320, 0xa204, 0xae02, 0x4c25,
+ 0xe0c2, 0x0303, 0xa200, 0xe0c2, 0x0308, 0xa200, 0xe0c2, 0x030a,
+ 0xe0c2, 0x030b, 0xe0c2, 0x030d, 0xe004, 0x0055, 0xe0c2, 0x030c,
+ 0xa202, 0xe0c2, 0x0302, 0x283a, 0xe0c2, 0x0380, 0xa200, 0xe0c2,
+ 0x0302, 0x282c, 0xf09a, 0xe0c0, 0x0414, 0xe418, 0x018c, 0xe0c0,
+ 0x0414, 0xe41a, 0x0f43, 0xa200, 0x2a30, 0xb636, 0x2a35, 0xb632,
+ 0xa904, 0xae0a, 0x4c0d, 0xe0c2, 0x0180, 0xa200, 0xe0c2, 0x0184,
+ 0xe0c2, 0x0185, 0x2827, 0xaf02, 0x0844, 0xa51e, 0xe049, 0xae02,
+ 0xe042, 0xe000, 0x026e, 0xe09e, 0x290f, 0xe0c2, 0x0186, 0xa206,
+ 0x3c06, 0x2907, 0xae02, 0xc70f, 0x7c06, 0xe008, 0xffff, 0x2a0e,
+ 0xf03b, 0xe049, 0xf02e, 0x2b07, 0xae14, 0xe056, 0xae14, 0xe056,
+ 0xe0c2, 0x0181, 0xe0c2, 0x0182, 0x2827, 0xe000, 0x036c, 0xe09c,
+ 0x2906, 0xae20, 0xe000, 0x1000, 0xaf1a, 0xae20, 0xe00a, 0x0190,
+ 0xe0c2, 0x0183, 0x2827, 0xe000, 0x036c, 0xe09c, 0x2906, 0xe0c2,
+ 0x0189, 0x280e, 0xe0c2, 0x018a, 0xa200, 0xe0c2, 0x018b, 0xe004,
+ 0x0702, 0xe096, 0x2113, 0x4d13, 0xe0c2, 0x018c, 0x283a, 0xe0c2,
+ 0x018d, 0xa200, 0x2a30, 0xb636, 0x2a35, 0xb632, 0xae06, 0xa902,
+ 0xe0c2, 0x018e, 0xe42e, 0xa200, 0xe0c2, 0x0150, 0xe0c0, 0x0151,
+ 0xf7e8, 0xe167, 0x01a0, 0x2317, 0x4f17, 0xe0c3, 0x0152, 0x2b17,
+ 0xe009, 0x00ff, 0xae21, 0x4f07, 0xe0c3, 0x0153, 0xe0c1, 0x0101,
+ 0xe0c3, 0x015d, 0x283a, 0xa53e, 0xa400, 0xae20, 0xe167, 0x01a2,
+ 0x2b07, 0xaf11, 0xe009, 0x001b, 0xe056, 0xe0c2, 0x015c, 0xa202,
+ 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xe42e, 0xa216, 0xae08,
+ 0x4c24, 0xae06, 0xe0c2, 0x0204, 0x2050, 0x4c51, 0xae08, 0xe0c2,
+ 0x0205, 0xa200, 0xe0c2, 0x0208, 0xa200, 0x2a35, 0xb632, 0xe0c2,
+ 0x0210, 0xe0c1, 0x0046, 0xe004, 0x0040, 0xae10, 0xe042, 0x2acd,
+ 0xa809, 0xf05b, 0xe167, 0x0506, 0x2117, 0x4d17, 0xe0c2, 0x0211,
+ 0xe0c1, 0x0046, 0xe004, 0x0080, 0xae10, 0xe042, 0x2acd, 0xa811,
+ 0xf05b, 0xe167, 0x0508, 0x2117, 0x4d17, 0xe0c2, 0x0212, 0xa200,
+ 0xe0c2, 0x0215, 0xa202, 0xae10, 0xe41e, 0x1028, 0xe0c2, 0x0213,
+ 0x2839, 0xe0c2, 0x020b, 0xe0c2, 0x0214, 0xa200, 0xe0c2, 0x021c,
+ 0xe004, 0x0700, 0xe096, 0x2113, 0x4d13, 0xe0c2, 0x021d, 0xa200,
+ 0xe0c2, 0x021e, 0xe42e, 0x2830, 0xae06, 0x4c24, 0xae02, 0xcf00,
+ 0x2050, 0x4c51, 0xae08, 0xcf60, 0x2837, 0xcf68, 0x2822, 0xae02,
+ 0x4c23, 0xae02, 0x4c37, 0xcf24, 0x2828, 0xcf46, 0xe0c1, 0x0046,
+ 0xe004, 0x00a0, 0xae10, 0xe042, 0x2acd, 0xa803, 0xf05b, 0xe167,
+ 0x0502, 0x2117, 0x4d17, 0xcf44, 0xe42e, 0x28ce, 0xae0c, 0x4cce,
+ 0xae0c, 0x4cce, 0xe0c2, 0x0115, 0x2866, 0xa802, 0xe0c2, 0x0131,
+ 0x2866, 0xaf02, 0x3c66, 0x2858, 0xe0c2, 0x0114, 0xe016, 0x4403,
+ 0xe418, 0x0ff3, 0xe42e, 0x2868, 0xe09a, 0x2a5b, 0x3f15, 0xe162,
+ 0x0190, 0x9e12, 0x3515, 0x3d15, 0xcf4c, 0xf0db, 0x9e12, 0x3515,
+ 0x3d15, 0xcf4e, 0x9e12, 0x3515, 0x3d15, 0xcf50, 0x9e12, 0x3515,
+ 0x3d15, 0xcf52, 0x285b, 0xcf4a, 0xd1a0, 0x0002, 0xcb41, 0xa805,
+ 0xf7e9, 0xe08a, 0x3c68, 0xe004, 0x06db, 0x2a5b, 0xb616, 0xe0c2,
+ 0x0309, 0xe42e, 0xe0c0, 0x0111, 0xf7e8, 0xe0c0, 0x0118, 0x3001,
+ 0xaf02, 0x3002, 0xaf02, 0x3003, 0x2854, 0x4c03, 0x3c54, 0xe42e,
+ 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe42e, 0xe0c1, 0x0044, 0xaf0d,
+ 0xae03, 0xe056, 0xa87e, 0xe42e, 0xa203, 0xe0c3, 0x040d, 0xe0c1,
+ 0x0420, 0xa803, 0xf7db, 0xe166, 0x0600, 0xe167, 0x0500, 0x283c,
+ 0xf1b6, 0xa102, 0xcc44, 0xe184, 0x105a, 0xa200, 0xe41e, 0x1028,
+ 0xaf04, 0xe41e, 0x102d, 0xae20, 0x4c70, 0x9f17, 0x2050, 0x4c51,
+ 0xae08, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17,
+ 0x2116, 0x4d16, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0xe0c0,
+ 0x0044, 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060, 0xa83e, 0xa203,
+ 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000, 0x0500, 0xe09e,
+ 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e, 0x1028, 0xaf04,
+ 0xe0c1, 0x0061, 0xaf21, 0xa807, 0xa105, 0xf025, 0xe04a, 0xe41e,
+ 0x102d, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xe40b, 0x1088, 0xa81e,
+ 0xae20, 0xe0c1, 0x0061, 0xe009, 0x1fff, 0xe056, 0x9f17, 0xe0c0,
+ 0x0064, 0xa802, 0xf048, 0x2050, 0x4c51, 0xf03e, 0x2051, 0x4c50,
+ 0xae08, 0x9f17, 0xe0c0, 0x006a, 0x9f17, 0xe0c0, 0x006b, 0x9f17,
+ 0xe0c0, 0x006c, 0x9f17, 0xa201, 0xe0c3, 0x040d, 0xe42e, 0xcca4,
+ 0xc786, 0xe018, 0xe000, 0x0600, 0xe09c, 0x2116, 0x4d06, 0xe42e,
+ 0xa232, 0x3cdd, 0xa240, 0x3c84, 0xa204, 0x3c86, 0xa23e, 0x2aca,
+ 0xf03b, 0xe0c0, 0x0072, 0x3c85, 0xa20c, 0x3c87, 0xe004, 0x029c,
+ 0x3c88, 0x2840, 0x2a52, 0x3c89, 0x3e8f, 0x283d, 0x3c8b, 0x3cbe,
+ 0xe004, 0x6000, 0x2acb, 0xf03b, 0xe0c0, 0x0073, 0x3c8c, 0x2889,
+ 0xe016, 0x3c8a, 0xf06a, 0x288b, 0x3c89, 0xe004, 0x1000, 0x3c8c,
+ 0x8421, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e20, 0xe41e, 0x1311,
+ 0x3c98, 0x8498, 0x8280, 0xe018, 0xa279, 0xe41e, 0x12fa, 0x3498,
+ 0x3c99, 0xae06, 0x2a84, 0xe41e, 0x12fa, 0x349e, 0x3c9f, 0xa202,
+ 0x3c8d, 0xa205, 0x1a44, 0xae03, 0xa011, 0x3e94, 0x2a8f, 0x5a94,
+ 0xe013, 0x36ae, 0x3eaf, 0x28bc, 0x2abb, 0xf049, 0xe41e, 0x12a1,
+ 0x64dd, 0x3c90, 0xa004, 0x6086, 0x6485, 0x3c91, 0xe41e, 0x12c5,
+ 0xe42e, 0x34c0, 0x3cbf, 0x28c0, 0xa002, 0x3cc0, 0x2cbf, 0xc710,
+ 0x7cc0, 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c8b, 0x18be, 0xe42a,
+ 0x288b, 0x3cbe, 0x28bf, 0x2ac0, 0x3c20, 0x3e21, 0xa200, 0x3c2b,
+ 0x8421, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e20, 0xe41e, 0x1311,
+ 0x3c98, 0x8498, 0x8280, 0xe018, 0xa279, 0xe41e, 0x12fa, 0x3498,
+ 0x3c99, 0xae06, 0x2a84, 0xe41e, 0x12fa, 0x349e, 0x3c9f, 0xa200,
+ 0x3cb8, 0x34a2, 0x3ca3, 0x2889, 0xe428, 0xe016, 0x3c8a, 0x288b,
+ 0x3c89, 0xe42e, 0x3cba, 0x2a89, 0xe046, 0xf028, 0xe42e, 0x28b9,
+ 0x2aba, 0xe046, 0xf034, 0xa200, 0x3cb9, 0x28ba, 0x3c89, 0x3c40,
+ 0x283f, 0xe42a, 0x2889, 0xe016, 0x3c8a, 0xf03a, 0x2a8b, 0x3e89,
+ 0x2a89, 0x28b9, 0xe045, 0xf0c6, 0x20a6, 0x4ca7, 0xe41e, 0x12fa,
+ 0x34aa, 0x3cab, 0x10a6, 0x1ca7, 0xe012, 0x34a8, 0x3ca9, 0xe42e,
+ 0x3cbd, 0xf028, 0x3c3f, 0x283f, 0xe42a, 0x2880, 0x2abd, 0xe046,
+ 0xe42a, 0x3e80, 0x8421, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e20,
+ 0xe41e, 0x1311, 0x3c98, 0x8498, 0x8280, 0xe018, 0xa279, 0xe41e,
+ 0x12fa, 0x3498, 0x3c99, 0xae06, 0x2a84, 0xe41e, 0x12fa, 0x349e,
+ 0x3c9f, 0xa200, 0x3cb8, 0x34a2, 0x3ca3, 0xe42e, 0x2a3f, 0xe42b,
+ 0xf042, 0xa201, 0x3ebb, 0xe42e, 0x3cbc, 0x3c90, 0xa203, 0x3ebb,
+ 0xe42e, 0xe42e, 0x282c, 0x3c8e, 0xa201, 0x3ead, 0xe418, 0x1283,
+ 0xa200, 0x3ca0, 0x3ca1, 0x3cdc, 0x288e, 0xf238, 0x288d, 0xf05a,
+ 0xa200, 0x3c8d, 0x2890, 0xf31e, 0x2889, 0xa102, 0xf7ca, 0x2abb,
+ 0xf03b, 0x2890, 0xf2ae, 0x848f, 0x82b8, 0xe019, 0xe04a, 0xaf02,
+ 0x00a2, 0x0ca3, 0xe41e, 0x1311, 0xa21f, 0x3e94, 0x2a89, 0xc70f,
+ 0x7e94, 0xe009, 0xffff, 0xa405, 0xe046, 0x6086, 0x64dd, 0xf15e,
+ 0xa200, 0x3c9c, 0x3c9d, 0x28d9, 0x3006, 0xaf02, 0x5406, 0xf08a,
+ 0x2891, 0xa104, 0x6093, 0x2a91, 0xa005, 0xe066, 0xf02e, 0x2891,
+ 0x2aad, 0xf02b, 0x2885, 0x3c93, 0x2aad, 0xe42e, 0xc872, 0xe41e,
+ 0x12ce, 0x288e, 0xf0ea, 0x20a0, 0x4ca1, 0xc710, 0x7c8f, 0xe008,
+ 0xffff, 0xa002, 0xaf02, 0x3c91, 0x20a0, 0x4ca1, 0x00a2, 0x0ca3,
+ 0x34a2, 0x3ca3, 0x28b8, 0xa002, 0x3cb8, 0x288e, 0xf028, 0x3cb8,
+ 0x288e, 0xf0f8, 0x2a89, 0xa103, 0x20a6, 0x4ca7, 0xe41e, 0x12fa,
+ 0x34aa, 0x3cab, 0x10a6, 0x1ca7, 0xe012, 0x34a8, 0x3ca9, 0xf0ae,
+ 0x22a8, 0x4ea9, 0x12aa, 0x1eab, 0x288a, 0xb606, 0xb611, 0x36a8,
+ 0x3ea9, 0xe42e, 0x28ea, 0xf038, 0x2893, 0x3cd7, 0x2aea, 0x1a52,
+ 0xa007, 0xf0b5, 0x28d1, 0x3cd2, 0xe42b, 0xa103, 0x28d0, 0x3cd2,
+ 0xe42b, 0x28cf, 0x3cd2, 0xe42e, 0x229c, 0x4e9d, 0x209e, 0x4c9f,
+ 0xe041, 0xf0c7, 0xe045, 0xe045, 0x2893, 0xf0f5, 0x369c, 0x3e9d,
+ 0xa002, 0x6086, 0x6485, 0x3c93, 0xf08e, 0x369c, 0x3e9d, 0x2893,
+ 0xa102, 0x6086, 0x6485, 0x3c93, 0x28dc, 0xa002, 0x3cdc, 0x2ad9,
+ 0xf08b, 0xa103, 0xf1cb, 0xa103, 0xf07b, 0xa103, 0xf0ab, 0xf19e,
+ 0x2893, 0x3cc8, 0xf16e, 0x28db, 0xf12a, 0xa200, 0x3cdb, 0xf06e,
+ 0x28dc, 0x18da, 0xf0c4, 0xa200, 0x3cdc, 0x2ad7, 0xa105, 0x6293,
+ 0x28d7, 0xa004, 0xe066, 0x3c93, 0x3cc8, 0xf03e, 0x28d7, 0x3cc8,
+ 0x28c8, 0x3cd7, 0x28ea, 0xf078, 0x28c8, 0x3ccf, 0x3cd0, 0x3cd1,
+ 0x3cd2, 0xe42e, 0x28d1, 0x2ad9, 0xa805, 0xf029, 0x3cc8, 0x3cd2,
+ 0x28d0, 0x3cd1, 0x28cf, 0x3cd0, 0x28d7, 0x3ccf, 0x28c8, 0xe42e,
+ 0x00a0, 0x0ca1, 0x34a0, 0x3ca1, 0x286f, 0x1892, 0x009c, 0x0c9d,
+ 0x349c, 0x3c9d, 0xe42e, 0x20a8, 0x4ca9, 0x10a6, 0x1ca7, 0x848c,
+ 0xe41e, 0x1348, 0x0098, 0x0c99, 0xf052, 0x2aac, 0xf039, 0xa203,
+ 0x3ead, 0xe41e, 0x12e0, 0x2298, 0x4e99, 0xaf07, 0xe062, 0x349a,
+ 0x3c9b, 0xc710, 0x7c8f, 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c92,
+ 0xe42e, 0x8489, 0x2098, 0x4c99, 0xe41e, 0x133c, 0x8487, 0xe41e,
+ 0x133c, 0x2a89, 0xa103, 0x0a87, 0xe41e, 0x12fa, 0x349a, 0x3c9b,
+ 0x288f, 0x3cb0, 0x209a, 0x4c9b, 0xae04, 0x009a, 0x0c9b, 0xae02,
+ 0xc70f, 0x7cb0, 0xe008, 0xffff, 0xaf08, 0xa010, 0xaf08, 0x0844,
+ 0xa51e, 0x0888, 0xe09e, 0x2907, 0xe42e, 0x8480, 0x8281, 0xe018,
+ 0x34a4, 0x3ca5, 0xa200, 0x34a6, 0x3ca7, 0xe42e, 0x1098, 0x1c99,
+ 0x00a6, 0x0ca7, 0xa27f, 0xae31, 0xe066, 0x34a6, 0x3ca7, 0x22ae,
+ 0x4eaf, 0xe046, 0xf032, 0x36a6, 0x3ea7, 0x20a6, 0x28a7, 0xe42e,
+ 0x2a81, 0xe42b, 0x22a4, 0x4ea5, 0x12a6, 0x1ea7, 0xe066, 0xf051,
+ 0x2aac, 0xf039, 0xa203, 0x3ead, 0x2282, 0x4e83, 0xe42b, 0x22a4,
+ 0x4ea5, 0x12a6, 0x1ea7, 0x0298, 0x0e99, 0x1282, 0x1e83, 0xa401,
+ 0xe062, 0xe42e, 0x3eb0, 0xa201, 0xf032, 0xe012, 0xa203, 0x3eb4,
+ 0x3cb1, 0xaf20, 0xc70f, 0x7cb0, 0x3cb2, 0xaf20, 0xae20, 0x4cb1,
+ 0xc70f, 0x7cb0, 0x3cb3, 0x20b2, 0x4cb3, 0x2ab4, 0xe42b, 0xe012,
+ 0xe42e, 0x36b0, 0x3eb1, 0xa201, 0x3eb2, 0x22b0, 0x4eb1, 0x5ab2,
+ 0xe045, 0xf061, 0x2ab2, 0xa003, 0x3eb2, 0xa121, 0xf775, 0x2ab2,
+ 0xf039, 0xa200, 0xe42e, 0xa103, 0x3eb2, 0xcc45, 0xa201, 0x3eb3,
+ 0xe184, 0x1339, 0x2ab3, 0xae03, 0x3eb3, 0x22b0, 0x4eb1, 0x5ab2,
+ 0xe045, 0xf061, 0xe013, 0xe04a, 0x2ab3, 0xa003, 0x3eb3, 0x2ab2,
+ 0xa103, 0x3eb2, 0x28b3, 0xe42e, 0xae02, 0x34b1, 0xe008, 0xffff,
+ 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xae1e, 0x82b0, 0xe01c, 0xe42e,
+ 0xae02, 0x34b1, 0xe008, 0xffff, 0xaf02, 0x3cb0, 0x82b0, 0xe018,
+ 0xaf1e, 0x82b1, 0xe01c, 0xe42e, 0xa200, 0x3cc1, 0x3cc3, 0x3cc4,
+ 0xe42e, 0xa200, 0x3c42, 0xe42e, 0x28c5, 0xf1f8, 0x2842, 0x1841,
+ 0xf3d2, 0x2853, 0x18c1, 0xf3a4, 0x28c1, 0x08c6, 0x18c7, 0xf0b4,
+ 0x28c3, 0xa002, 0xc70f, 0x7cc6, 0xaf20, 0x3cc3, 0x3cc1, 0x2841,
+ 0x3c42, 0xf2ae, 0x2842, 0xa002, 0x3c42, 0x28c1, 0x08c6, 0xc70f,
+ 0x7cc7, 0xaf20, 0x3cc1, 0xf20e, 0x2842, 0x1841, 0xf1f2, 0x2853,
+ 0x18c2, 0xf1c4, 0x28c2, 0x08c6, 0x1852, 0xf0c4, 0x28c4, 0xa002,
+ 0xc70f, 0x7cc6, 0xaf20, 0x3cc4, 0x08c7, 0x3cc2, 0x2841, 0x3c42,
+ 0xf0be, 0x2842, 0xa002, 0x3c42, 0x28c2, 0x08c6, 0xc70f, 0x7c52,
+ 0xaf20, 0x3cc2, 0xf01e, 0xa202, 0xe42e, 0xa200, 0xe42e, 0x2802,
+ 0xf12a, 0xd188, 0x0001, 0x28ea, 0xa002, 0x3cea, 0xcf64, 0x28e8,
+ 0xa002, 0x3ce8, 0x1850, 0xf078, 0xd1b3, 0x0004, 0x3ce8, 0x28e9,
+ 0xa002, 0x3ce9, 0x2803, 0xe42a, 0x2853, 0xa002, 0x3c53, 0xe42e,
+ 0x28e6, 0x3ce7, 0x28e5, 0x3ce6, 0x28e4, 0x3ce5, 0x28e3, 0x3ce4,
+ 0x28e2, 0x3ce3, 0x286c, 0xa83e, 0xae02, 0x4c5a, 0xae02, 0x4c58,
+ 0x3ce2, 0x2a3f, 0x462c, 0x28e7, 0x3058, 0xe429, 0xaf02, 0x305a,
+ 0xaf02, 0xae3e, 0xaf3e, 0x3c6c, 0xe42e, 0xa200, 0x3c13, 0xe0c0,
+ 0x0060, 0x3410, 0x3c11, 0xe0c0, 0x0061, 0xae04, 0x3c12, 0xe41e,
+ 0x13fa, 0xe41e, 0x1533, 0xd071, 0x202a, 0xe181, 0xe42e, 0xd030,
+ 0x0000, 0xd034, 0x0000, 0xd033, 0x0000, 0xd035, 0x0000, 0xd036,
+ 0x007f, 0xd037, 0x0000, 0xc872, 0xa130, 0xcc72, 0xc870, 0xa130,
+ 0xcc70, 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033, 0x0000,
+ 0xd035, 0x0000, 0xd036, 0x007f, 0xd037, 0x0000, 0xd038, 0x0000,
+ 0xa200, 0x3c72, 0xe42e, 0xa210, 0xe000, 0x046a, 0xe094, 0xa200,
+ 0xc703, 0x3d12, 0xe004, 0x0080, 0xc702, 0x3d12, 0xe000, 0x003f,
+ 0x3d12, 0xa200, 0xc703, 0x3d12, 0xe004, 0x00c0, 0xc702, 0x3d12,
+ 0xe000, 0x003f, 0x3d12, 0xe42e, 0x2816, 0xf06a, 0xa102, 0xf0ba,
+ 0xa102, 0xf0ea, 0xe470, 0xe004, 0x0080, 0xe41e, 0x143c, 0xd04c,
+ 0x0000, 0xe470, 0xe41e, 0x149c, 0xd04c, 0x0000, 0xe470, 0xe41e,
+ 0x14b1, 0xd04c, 0x0000, 0xe470, 0xce24, 0xd111, 0x0000, 0xe082,
+ 0x3c14, 0xe004, 0x0048, 0xe092, 0xd027, 0x0000, 0xe41e, 0x153d,
+ 0xd027, 0x0001, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042, 0xce20,
+ 0x2004, 0x4c05, 0x8111, 0x9f01, 0xe0c0, 0x0043, 0xa806, 0xae02,
+ 0xa020, 0xce26, 0xca28, 0xf7f8, 0x2c13, 0xe000, 0x0002, 0x3c13,
+ 0x1c12, 0xf084, 0x2ab6, 0xf05b, 0xa203, 0xe0c3, 0x0074, 0xf02e,
+ 0x3c13, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042, 0x9f01, 0x3404,
+ 0x3c05, 0x2814, 0xe092, 0xe42e, 0xe0c0, 0x0046, 0x2a18, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x0080, 0xd112, 0x0040, 0xd113, 0x0013,
+ 0xca28, 0xf7f8, 0x2818, 0xe000, 0x0001, 0x3c18, 0xe42e, 0xe167,
+ 0x0704, 0x2517, 0x4d17, 0x2e19, 0xae11, 0xe042, 0xce20, 0xd111,
+ 0x00c0, 0xd112, 0x0040, 0xd113, 0x0013, 0xca28, 0xf7f8, 0x2819,
+ 0xe000, 0x0001, 0x3c19, 0xe42e, 0xe0c0, 0x0046, 0x2a18, 0xae11,
+ 0xe042, 0xce20, 0xd111, 0x0080, 0xd112, 0x0040, 0xd113, 0x0012,
+ 0xca28, 0xf7f8, 0x2818, 0xe000, 0x0001, 0x3c18, 0xa202, 0x3c1a,
+ 0xe42e, 0x287c, 0xf1f8, 0xe167, 0x0704, 0x2517, 0x4d17, 0x2e19,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x00c0, 0xd112, 0x0040, 0xd113,
+ 0x0012, 0xca28, 0xf7f8, 0x2819, 0xe000, 0x0001, 0x3c19, 0xe167,
+ 0x0706, 0x2317, 0x4f17, 0xae05, 0x1e19, 0xf061, 0xa202, 0x3c1b,
+ 0x3c7c, 0xa200, 0xe42e, 0xa202, 0x3c1b, 0xe42e, 0xc868, 0xaf06,
+ 0xc867, 0xe003, 0x0000, 0xae05, 0xe042, 0x3c4c, 0xc86e, 0xd037,
+ 0x0080, 0xbad7, 0xcc6e, 0xe004, 0x0080, 0xe41e, 0x143c, 0xe004,
+ 0x0049, 0xe092, 0x9e01, 0x2210, 0x4e11, 0xe045, 0xf0b9, 0xe004,
+ 0x0200, 0x184c, 0x2a12, 0xae11, 0xe045, 0x2010, 0x4c11, 0xe042,
+ 0xf04e, 0x084c, 0xe002, 0x0200, 0x9f01, 0x3404, 0x3c05, 0xe42e,
+ 0xc866, 0xcc78, 0xc860, 0xcc7a, 0xd111, 0x0000, 0xe004, 0x0048,
+ 0xe092, 0xd027, 0x0000, 0xe41e, 0x153d, 0xd027, 0x0001, 0x2010,
+ 0x4c11, 0x2e13, 0xae11, 0xe042, 0xce20, 0x2004, 0x4c05, 0x8111,
+ 0xd112, 0x0080, 0xe0c0, 0x0043, 0xa806, 0xae02, 0xa020, 0xce26,
+ 0xca28, 0xf7f8, 0xc868, 0xaf06, 0xc867, 0xe003, 0x0000, 0xae05,
+ 0xe042, 0x2210, 0x4e11, 0xe042, 0x2e13, 0xae11, 0xe042, 0x9f01,
+ 0x3404, 0x3c05, 0xe42e, 0x2010, 0x4c11, 0x2e13, 0xae11, 0xe042,
+ 0xe0c2, 0x0049, 0x3404, 0x3c05, 0xe42e, 0xe0c1, 0x0043, 0xa809,
+ 0xe429, 0xa200, 0x3c15, 0x2ab6, 0xf2eb, 0x2c13, 0xae10, 0x2e12,
+ 0xae11, 0xe045, 0xe003, 0x0200, 0xe423, 0xa203, 0xe0c3, 0x0074,
+ 0x2004, 0x4c05, 0xe0c2, 0x0049, 0xa200, 0x3c13, 0x2010, 0x4c11,
+ 0x3404, 0x3c05, 0x2ade, 0xe42b, 0xe0c0, 0x005c, 0xe008, 0x8000,
+ 0xe42a, 0xe0c0, 0x005d, 0xe00a, 0x8000, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0xe0c1, 0x005d, 0xe009, 0x8000, 0xf7c9, 0xe0c0, 0x0004,
+ 0xf798, 0xe42e, 0x2004, 0x4c05, 0x9e81, 0xe045, 0xf041, 0x2c12,
+ 0xae10, 0xe041, 0xe003, 0x0200, 0xe421, 0x2815, 0xf748, 0xe0c0,
+ 0x005c, 0xe008, 0x8000, 0xf6fa, 0xe0c0, 0x005d, 0xe00a, 0x8000,
+ 0xe0c2, 0x005d, 0xa202, 0xce00, 0x3c15, 0xf65e, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0080, 0x0060, 0x0008, 0x0006,
+ 0x00b0, 0x0090, 0x000b, 0x0009, 0x0160, 0x0120, 0x0016, 0x0012,
+ 0x02c0, 0x0240, 0x0058, 0x0012, 0x0580, 0x0480, 0x0160, 0x0012,
+ 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
+ 0x0063, 0x000d, 0x000f, 0x0011, 0x0013, 0x0015, 0x0017, 0x0000,
+ 0xffff, 0xfffe, 0x0001, 0x0002, 0x0000, 0x0002, 0xffff, 0xffff,
+ 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xffff, 0xfffe,
+ 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe, 0xfffe,
+ 0xfffe, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0xfffd,
+ 0xfffd, 0xfffd, 0xfffd, 0xfffd, 0x0000, 0x0001, 0x0001, 0x0001,
+ 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0002,
+ 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002, 0x0002,
+ 0x0002, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003, 0x0003,
+ 0x0003, 0x0002, 0x0001, 0xfffb, 0x0200, 0x0000, 0x0008, 0x0200,
+ 0x0000, 0x0010, 0x0200, 0x0008, 0x0020, 0x0200, 0x0010, 0x0040,
+ 0x0200, 0x0020, 0x0080, 0x0200, 0x0040, 0x00c0, 0x0200, 0x0060,
+ 0x0100, 0x0200, 0x0080, 0x0140, 0x0200, 0x00c0, 0x0180, 0x0200,
+ 0x0100, 0x01c0, 0x0200, 0x0140, 0x0200, 0x0200, 0x0180, 0x0280,
+ 0x0200, 0x0200, 0x0300, 0x0200, 0x0200, 0x0300, 0x0200, 0x0200,
+ 0x0300, 0x0200, 0x0200, 0x0300, 0x001a, 0x0019, 0x0018, 0x0017,
+ 0x0016, 0x0015, 0x0014, 0x0013, 0x0012, 0x0011, 0x0010, 0x000f,
+ 0x000e, 0x000d, 0x000c, 0x000a, 0x0000, 0x0001, 0x0008, 0x0010,
+ 0x0009, 0x0002, 0x0003, 0x000a, 0x0011, 0x0018, 0x0020, 0x0019,
+ 0x0012, 0x000b, 0x0004, 0x0005, 0x000c, 0x0013, 0x001a, 0x0021,
+ 0x0028, 0x0030, 0x0029, 0x0022, 0x001b, 0x0014, 0x000d, 0x0006,
+ 0x0007, 0x000e, 0x0015, 0x001c, 0x0023, 0x002a, 0x0031, 0x0038,
+ 0x0039, 0x0032, 0x002b, 0x0024, 0x001d, 0x0016, 0x000f, 0x0017,
+ 0x001e, 0x0025, 0x002c, 0x0033, 0x003a, 0x003b, 0x0034, 0x002d,
+ 0x0026, 0x001f, 0x0027, 0x002e, 0x0035, 0x003c, 0x003d, 0x0036,
+ 0x002f, 0x0037, 0x003e, 0x003f, 0x0000, 0x0008, 0x0010, 0x0018,
+ 0x0001, 0x0009, 0x0002, 0x000a, 0x0011, 0x0019, 0x0020, 0x0028,
+ 0x0030, 0x0038, 0x0039, 0x0031, 0x0029, 0x0021, 0x001a, 0x0012,
+ 0x0003, 0x000b, 0x0004, 0x000c, 0x0013, 0x001b, 0x0022, 0x002a,
+ 0x0032, 0x003a, 0x0023, 0x002b, 0x0033, 0x003b, 0x0014, 0x001c,
+ 0x0005, 0x000d, 0x0006, 0x000e, 0x0015, 0x001d, 0x0024, 0x002c,
+ 0x0034, 0x003c, 0x0025, 0x002d, 0x0035, 0x003d, 0x0016, 0x001e,
+ 0x0007, 0x000f, 0x0017, 0x001f, 0x0026, 0x002e, 0x0036, 0x003e,
+ 0x0027, 0x002f, 0x0037, 0x003f, 0x0000, 0x0001, 0x0002, 0x0003,
+ 0x0008, 0x0009, 0x0010, 0x0011, 0x000a, 0x000b, 0x0004, 0x0005,
+ 0x0006, 0x0007, 0x000f, 0x000e, 0x000d, 0x000c, 0x0013, 0x0012,
+ 0x0018, 0x0019, 0x0020, 0x0021, 0x001a, 0x001b, 0x0014, 0x0015,
+ 0x0016, 0x0017, 0x001c, 0x001d, 0x001e, 0x001f, 0x0022, 0x0023,
+ 0x0028, 0x0029, 0x0030, 0x0031, 0x002a, 0x002b, 0x0024, 0x0025,
+ 0x0026, 0x0027, 0x002c, 0x002d, 0x002e, 0x002f, 0x0032, 0x0033,
+ 0x0038, 0x0039, 0x003a, 0x003b, 0x0034, 0x0035, 0x0036, 0x0037,
+ 0x003c, 0x003d, 0x003e, 0x003f, 0x0010, 0x0010, 0x0010, 0x0010,
+ 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010, 0x0010,
+ 0x000e, 0x000e, 0x000e, 0x000e, 0x000c, 0x000c, 0x000c, 0x000c,
+ 0x000a, 0x000a, 0x000a, 0x000a, 0x0008, 0x0008, 0x0008, 0x0008,
+ 0x0008, 0x0008, 0x0008, 0x0008, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x021c, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x021c, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x01fb, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x023c, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x023e, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01c5, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa220, 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802,
+ 0xa220, 0xe0c2, 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2,
+ 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0xe42e, 0xe428, 0xa202, 0xe0c2,
+ 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28, 0xf7f8, 0xca48, 0xa802,
+ 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190, 0xf7e2, 0xe0c0, 0x041f,
+ 0xf7e8, 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8,
+ 0xe004, 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0,
+ 0x000d, 0xf7e8, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72,
+ 0xcc8c, 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a,
+ 0xd16f, 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e,
+ 0xe004, 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e,
+ 0xe004, 0x0020, 0xce50, 0xe42e, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe40e, 0x0020, 0xe470, 0xe190, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x02f9, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe470, 0xe190, 0xe40e, 0x0313, 0xe470, 0xe190,
+ 0xe470, 0xe190, 0xe40e, 0x003a, 0xe470, 0xe190, 0xe470, 0xe190,
+ 0xe168, 0xd027, 0x0001, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058,
+ 0xa200, 0xe0c2, 0x005a, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xa2fe,
+ 0x3cee, 0x3cef, 0x3cec, 0xe0c0, 0x005c, 0xa802, 0xe0c2, 0x005d,
+ 0xce00, 0xf33e, 0xe41e, 0x0164, 0xe09e, 0xa202, 0xae3e, 0x9f07,
+ 0xe0c0, 0x005c, 0xe0c1, 0x0059, 0x3eed, 0xa203, 0x5aed, 0xe052,
+ 0xf08a, 0xe0c1, 0x005d, 0xe055, 0xe0c3, 0x005d, 0xa202, 0xce00,
+ 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2, 0x0008, 0xf00e,
+ 0x28ee, 0xe412, 0x013d, 0xe190, 0xe0c0, 0x005c, 0xe0c1, 0x0059,
+ 0x3eed, 0xa203, 0x5aed, 0xe052, 0xf08a, 0xe0c1, 0x005d, 0xe055,
+ 0xe0c3, 0x005d, 0xa202, 0xce00, 0xe0c0, 0x004a, 0xf08a, 0xe41e,
+ 0x019c, 0xe408, 0x005c, 0xe40e, 0x0058, 0xe190, 0xe0c0, 0x043d,
+ 0xa1ee, 0xf7d8, 0xe004, 0x0060, 0xe0c2, 0x0009, 0xa200, 0xe0c2,
+ 0x0009, 0xe0c0, 0x000d, 0xf7e8, 0xe41e, 0x00b2, 0xe41e, 0x00e2,
+ 0xe41e, 0x012c, 0xd071, 0x242a, 0xe181, 0xe41e, 0x0164, 0xe09e,
+ 0xa202, 0x9f07, 0xe0c0, 0x0049, 0xe0c1, 0x005b, 0xa111, 0xf033,
+ 0xe0c0, 0x0048, 0xe0c2, 0x0047, 0xe0c0, 0x0059, 0xae02, 0xe000,
+ 0x02f9, 0xe16a, 0xc000, 0xe67c, 0xe0c0, 0x005a, 0xe008, 0xffff,
+ 0x3cee, 0xe0c0, 0x005b, 0xe0c1, 0x005e, 0xae11, 0xe056, 0x3cef,
+ 0xe40e, 0x0058, 0xa200, 0xe0c2, 0x0059, 0xe0c2, 0x0058, 0xe0c2,
+ 0x0008, 0xe004, 0x0080, 0xe0c2, 0x017c, 0xe0c0, 0x0059, 0xf7ea,
+ 0xa11e, 0xf198, 0xa202, 0xe0c2, 0x0058, 0xe004, 0xca20, 0xae20,
+ 0xe005, 0x210a, 0xe056, 0xe0c2, 0x0070, 0xe004, 0x0000, 0xae20,
+ 0xe00a, 0x9cea, 0xe0c2, 0x0071, 0xa200, 0xe0c2, 0x0059, 0xe0c2,
+ 0x0058, 0xf64e, 0xa202, 0xe0c2, 0x0008, 0xe0c2, 0x0058, 0xd027,
+ 0x0001, 0xe42e, 0xa200, 0xe0c1, 0x005b, 0xf21b, 0xa23c, 0xa103,
+ 0xf37b, 0xa24c, 0xa103, 0xf34b, 0xa258, 0xa103, 0xf1db, 0xe004,
+ 0x003a, 0xa103, 0xf2db, 0xe004, 0x003f, 0xa103, 0xf29b, 0xe004,
+ 0x0045, 0xa103, 0xf25b, 0xa103, 0xf14b, 0xe004, 0x0063, 0xa103,
+ 0xf1ab, 0xe004, 0x006a, 0xa107, 0xf1bb, 0xa200, 0xe0c1, 0x005e,
+ 0xf17b, 0xa028, 0xf15e, 0xe0c1, 0x005e, 0xf12b, 0xa010, 0xf10e,
+ 0xe004, 0x0049, 0xe0c1, 0x005e, 0xf0bb, 0xa010, 0xa103, 0xf08b,
+ 0xa010, 0xf06e, 0xe0c1, 0x005e, 0xf03b, 0xe004, 0x0074, 0xae16,
+ 0xe0c1, 0x0040, 0xe041, 0xce21, 0xd111, 0x0000, 0xd112, 0x2800,
+ 0xd113, 0x000b, 0xe1e1, 0xe42e, 0xe41e, 0x0213, 0xe0c0, 0x0059,
+ 0xa102, 0xe42a, 0xe0c0, 0x005b, 0xa810, 0xf058, 0xa206, 0xe41e,
+ 0x0153, 0xe42e, 0xe004, 0x0319, 0xe67c, 0xe0c0, 0x005b, 0xa810,
+ 0xf058, 0xa204, 0xe41e, 0x0153, 0xe42e, 0xe004, 0x031b, 0xe67c,
+ 0xa200, 0xc401, 0xe188, 0x00eb, 0x3d11, 0xe161, 0x00f2, 0xe188,
+ 0x0b0d, 0x3d11, 0xe42e, 0x3cec, 0xe0c0, 0x0041, 0xe005, 0x0000,
+ 0xae11, 0xe042, 0xce20, 0xd111, 0x0000, 0xd112, 0x0c00, 0x88ec,
+ 0x0113, 0xca28, 0xf7f8, 0xe42e, 0xe0c0, 0x0059, 0xa106, 0xf048,
+ 0xe004, 0x0076, 0xe42e, 0xe0c0, 0x0059, 0xa10c, 0xf038, 0xe004,
+ 0x0071, 0xe004, 0x0070, 0xe42e, 0xe0c0, 0x006b, 0xe167, 0x01a0,
+ 0x3d07, 0xe0c0, 0x0414, 0xe428, 0xe0c1, 0x0044, 0xa809, 0xae33,
+ 0xe0c0, 0x006a, 0xe167, 0x01a0, 0x3517, 0x3d17, 0xe0c0, 0x006b,
+ 0xe056, 0x3517, 0x3d07, 0xe42e, 0xe167, 0x01a0, 0x2907, 0xe0c2,
+ 0x0151, 0xa204, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xa804, 0xf7da,
+ 0xa208, 0xe0c2, 0x0150, 0xe42e, 0xe0c0, 0x004a, 0xe42a, 0xe0c0,
+ 0x005b, 0xa110, 0xf142, 0xe0c0, 0x0059, 0xa102, 0xe41a, 0x01be,
+ 0xe0c0, 0x0059, 0xa106, 0xe41a, 0x01c5, 0xe0c0, 0x0047, 0xe0c2,
+ 0x0048, 0xa200, 0xe0c2, 0x004a, 0xa202, 0xe42e, 0xe0c0, 0x0047,
+ 0xe0c2, 0x0049, 0xa200, 0xe0c2, 0x004a, 0xe42e, 0xe0c0, 0x004a,
+ 0xa802, 0xa220, 0xe0c2, 0x0070, 0xe42e, 0xe0c0, 0x004a, 0xa802,
+ 0xa220, 0xe0c2, 0x0076, 0xa200, 0xe0c2, 0x0072, 0xa2fc, 0xe0c2,
+ 0x0077, 0xa2fa, 0xe0c2, 0x0071, 0xe42e, 0xe428, 0xa202, 0xe0c2,
+ 0x004a, 0xe0c0, 0x0111, 0xf7e8, 0xca28, 0xf7f8, 0xca48, 0xa802,
+ 0xf7e8, 0xa208, 0xae14, 0xa102, 0xe190, 0xf7e2, 0xe0c0, 0x041f,
+ 0xf7e8, 0xa200, 0xe0c2, 0x041c, 0xe0c0, 0x043d, 0xa1ee, 0xf7d8,
+ 0xe004, 0x0078, 0xe0c2, 0x0009, 0xa200, 0xe0c2, 0x0009, 0xe0c0,
+ 0x000d, 0xf7e8, 0xe42e, 0xe41e, 0x0213, 0xd160, 0x0620, 0xe004,
+ 0x0019, 0xae18, 0xcec0, 0xe42e, 0xe41e, 0x0228, 0xe000, 0x0040,
+ 0xce50, 0xa200, 0xd022, 0x00ff, 0xe184, 0x020f, 0xce52, 0xe190,
+ 0xe41e, 0x0230, 0xe42e, 0xa204, 0xae22, 0xcc9e, 0xa200, 0xcc72,
+ 0xcc8c, 0xcc8e, 0xe004, 0xa810, 0xae20, 0xe00a, 0x9322, 0xce4a,
+ 0xd16f, 0x0003, 0xe190, 0xe190, 0xe190, 0xd16f, 0x0000, 0xe42e,
+ 0xe004, 0x0030, 0xce50, 0xca50, 0xa802, 0xf7ea, 0xc000, 0xe42e,
+ 0xe004, 0x0020, 0xce50, 0xe42e, 0xa200, 0xe0c2, 0x041c, 0xe42e,
+ 0xe41e, 0x028d, 0xe42a, 0xe0c0, 0x0061, 0xe008, 0x001f, 0xe00a,
+ 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02c3, 0xe41e, 0x02f4, 0xae12,
+ 0xe0c2, 0x041e, 0xe41e, 0x02e7, 0xe42e, 0xe41e, 0x02b1, 0xe42a,
+ 0xe0c0, 0x041f, 0xf7e8, 0xe0c0, 0x0210, 0xa804, 0xf118, 0xe0c0,
+ 0x0215, 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0216, 0xf0be, 0xe0c0,
+ 0x0213, 0xe008, 0x0100, 0xf04a, 0xe0c0, 0x0214, 0xf03e, 0xe0c0,
+ 0x020b, 0xe00a, 0x0100, 0xe0c2, 0x041c, 0xe41e, 0x02c3, 0xe41e,
+ 0x02f4, 0xae12, 0xe0c1, 0x0210, 0xa803, 0xae15, 0xe056, 0xe0c1,
+ 0x0204, 0xaf0b, 0xa87f, 0xae07, 0xe056, 0xe0c1, 0x0204, 0xa80f,
+ 0xe056, 0xe0c2, 0x041e, 0xe41e, 0x02e7, 0xe42e, 0xe0c0, 0x041f,
+ 0xf7e8, 0xa200, 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xa203,
+ 0xae19, 0xe052, 0xf1da, 0xe0c0, 0x0060, 0xaf08, 0xa806, 0xf18a,
+ 0xe0c0, 0x0060, 0xa81e, 0xe016, 0xe0c1, 0x0060, 0xa821, 0xe017,
+ 0xe056, 0xf0ea, 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xe016, 0xe0c1,
+ 0x0044, 0xaf17, 0xa803, 0xe056, 0xf03a, 0xa202, 0xe42e, 0xa200,
+ 0xe42e, 0xe0c0, 0x0044, 0xa203, 0xae19, 0xe052, 0xf0ba, 0xe41e,
+ 0x028d, 0xf088, 0xe0c0, 0x0044, 0xaf12, 0xa806, 0xf038, 0xa202,
+ 0xe42e, 0xa200, 0xe42e, 0xe0c0, 0x041c, 0xe008, 0x00ff, 0xcca4,
+ 0xc785, 0xe018, 0xe000, 0x0500, 0xa002, 0xae04, 0xe0c2, 0x041a,
+ 0xa202, 0xe0c2, 0x0418, 0xe0c0, 0x0419, 0xf7ea, 0xe0c0, 0x041b,
+ 0xaf20, 0xa01e, 0xaf08, 0xae28, 0xe0c1, 0x041b, 0xe009, 0xffff,
+ 0xa01f, 0xaf09, 0xae09, 0xe056, 0xe0c2, 0x041d, 0xe42e, 0xe0c0,
+ 0x041c, 0xe00a, 0x0200, 0xe0c2, 0x041c, 0xe0c0, 0x041c, 0xe00c,
+ 0x0200, 0xe0c2, 0x041c, 0xe42e, 0xe0c0, 0x0044, 0xaf04, 0xa802,
+ 0xe42e, 0xe40e, 0x11cc, 0xe40e, 0x031d, 0xe40e, 0x0321, 0xe40e,
+ 0x0325, 0xe40e, 0x032d, 0xe40e, 0x0331, 0xe40e, 0x0335, 0xe40e,
+ 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x0339, 0xe40e, 0x00a4, 0xe40e,
+ 0x00a4, 0xe40e, 0x00a4, 0xe40e, 0x11ec, 0xe40e, 0x00a4, 0xe40e,
+ 0x00a4, 0xe40e, 0x066a, 0xe40e, 0x0688, 0xe41e, 0x033d, 0xe40e,
+ 0x00a4, 0xe41e, 0x036b, 0xe40e, 0x00a4, 0xe41e, 0x0234, 0xe41e,
+ 0x0377, 0xe41e, 0x0286, 0xe40e, 0x00a4, 0xe41e, 0x03ef, 0xe40e,
+ 0x00a4, 0xe41e, 0x0429, 0xe40e, 0x00a4, 0xe41e, 0x0494, 0xe40e,
+ 0x00a4, 0xe41e, 0x10f9, 0xe40e, 0x00a4, 0xa210, 0xe0c2, 0x0100,
+ 0xa200, 0xe0c2, 0x0128, 0xd130, 0x0008, 0xe41e, 0x0148, 0xe41e,
+ 0x0213, 0xe41e, 0x061b, 0xa200, 0x3c2a, 0x3c33, 0xcc72, 0xcc44,
+ 0x3ccb, 0x3ccc, 0xf15e, 0xe41e, 0x04cf, 0xf12a, 0xe41e, 0x0937,
+ 0xe41e, 0x11ac, 0xe41e, 0x11d7, 0x2815, 0xe40a, 0x0361, 0xe418,
+ 0x0e1a, 0xe41e, 0x1156, 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xa200,
+ 0xe0c2, 0x0070, 0xe42e, 0xd130, 0x0008, 0x28be, 0xe428, 0x28bf,
+ 0xf06a, 0xa200, 0x3c4d, 0xe41e, 0x11cd, 0xe42e, 0xe42e, 0xd130,
+ 0x0008, 0xa200, 0xcc44, 0xcc4a, 0xcc4c, 0xcfce, 0xe0c2, 0x0074,
+ 0x3c65, 0xe0c0, 0x0065, 0xaf06, 0x3066, 0xaf02, 0x3067, 0xaf02,
+ 0x3068, 0xe41e, 0x065a, 0xe41e, 0x0d9e, 0xe41e, 0x0dc9, 0x28bf,
+ 0xf24a, 0xc872, 0x3c07, 0x28c0, 0xf09a, 0xe0c0, 0x0066, 0x344a,
+ 0x3c4b, 0xe0c0, 0x0067, 0xae04, 0x3c4c, 0xa200, 0x3c4d, 0xe41e,
+ 0x11cd, 0xe41e, 0x0213, 0xa200, 0x3cdf, 0x3ce0, 0xe41e, 0x1293,
+ 0xe41e, 0x12af, 0xe41e, 0x12cc, 0xe41e, 0x1206, 0xe41e, 0x12f0,
+ 0xe41e, 0x12fb, 0x2807, 0xcc72, 0xd130, 0x0008, 0xd1e0, 0x0000,
+ 0xd1ff, 0x03b0, 0xd199, 0x0224, 0xd03a, 0x0000, 0xd04b, 0x0001,
+ 0xd04c, 0x0000, 0xd008, 0x0000, 0xe41e, 0x068e, 0x28bf, 0xf02a,
+ 0xf03e, 0x28be, 0xf01a, 0x2c33, 0xae02, 0x083f, 0xa002, 0xe0c2,
+ 0x0070, 0x283f, 0xf07a, 0x2c2a, 0xa002, 0x3c2a, 0x2c33, 0xa002,
+ 0x3c33, 0x2829, 0xe0c2, 0x0071, 0x281f, 0xe0c2, 0x0073, 0xd039,
+ 0x0000, 0xc84a, 0xc84d, 0xae20, 0xe056, 0xe0c2, 0x0053, 0xe41e,
+ 0x062f, 0xe41e, 0x14d9, 0xa202, 0xe0c2, 0x0076, 0xe42e, 0xe41e,
+ 0x041d, 0xe41e, 0x0174, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x04c0,
+ 0xd112, 0x00c0, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe0c0, 0x0060,
+ 0x3c32, 0xe0c0, 0x0061, 0x3c70, 0xe004, 0x0580, 0xe096, 0xe0c0,
+ 0x0062, 0x3513, 0x3d13, 0xe0c0, 0x0063, 0x3513, 0x3d13, 0xe004,
+ 0x0901, 0xe096, 0xe0c0, 0x006c, 0x3513, 0x3d13, 0xe0c0, 0x006d,
+ 0x3513, 0x3d13, 0xe41e, 0x0d9e, 0xe42e, 0xe167, 0x0488, 0xe166,
+ 0x0064, 0xd022, 0x0003, 0xe184, 0x0427, 0x9e16, 0x3517, 0x3d17,
+ 0xe42e, 0xd130, 0x0008, 0x28bf, 0xf24a, 0xc872, 0x3c07, 0x28c0,
+ 0xf09a, 0xe0c0, 0x0061, 0x344a, 0x3c4b, 0xe0c0, 0x0062, 0xae04,
+ 0x3c4c, 0xa200, 0x3c4d, 0xe41e, 0x11cd, 0xe41e, 0x0213, 0xa200,
+ 0x3cdf, 0x3ce0, 0xe41e, 0x1293, 0xe41e, 0x12af, 0xe41e, 0x12cc,
+ 0xe41e, 0x1206, 0xe41e, 0x12f0, 0xe41e, 0x12fb, 0x2807, 0xcc72,
+ 0xe0c0, 0x0060, 0xa80e, 0xf0fa, 0xa102, 0xf25a, 0xa102, 0xf2aa,
+ 0xa102, 0xf2aa, 0xa102, 0xf07a, 0xa102, 0xf1da, 0xa202, 0xe0c2,
+ 0x0070, 0xe42e, 0xe0c0, 0x0060, 0xaf06, 0xa802, 0x3073, 0xf0ca,
+ 0xe0c0, 0x0063, 0x3478, 0x3c79, 0xe0c1, 0x0064, 0x367a, 0x3e7b,
+ 0xe056, 0xe01a, 0x3c73, 0xe0c0, 0x0060, 0xa808, 0xe01a, 0xe41e,
+ 0x05ea, 0xf12e, 0xe0c0, 0x0060, 0xa808, 0xe01a, 0xe41e, 0x05fa,
+ 0xf0be, 0xa214, 0xf02e, 0xa216, 0x3c30, 0xa200, 0x3c2f, 0xe41e,
+ 0x130d, 0xe41e, 0x1368, 0x28bf, 0xf02a, 0xf03e, 0x28be, 0xf01a,
+ 0xa202, 0xe0c2, 0x0070, 0xe42e, 0xe41e, 0x11bb, 0xa200, 0xce92,
+ 0xe0c0, 0x0060, 0xa802, 0xf198, 0xe0c0, 0x0060, 0xaf04, 0xa802,
+ 0x3073, 0xf0ca, 0xe0c0, 0x0063, 0x3478, 0x3c79, 0xe0c1, 0x0064,
+ 0x367a, 0x3e7b, 0xe056, 0xe01a, 0x3c73, 0xe0c0, 0x0060, 0xa804,
+ 0xe01a, 0xe41e, 0x0818, 0xf07e, 0xe0c0, 0x0060, 0xa804, 0xe01a,
+ 0xe41e, 0x08b0, 0xc870, 0xaf06, 0x3c45, 0xe0c2, 0x0070, 0xe004,
+ 0x0080, 0xcc6e, 0xbadf, 0xe0c0, 0x0042, 0xce20, 0xd111, 0x0000,
+ 0xd112, 0x0100, 0xd113, 0x0012, 0xca28, 0xf7f8, 0xe42e, 0xe0c0,
+ 0x0074, 0xa806, 0x3cc9, 0xe0c0, 0x0074, 0xaf04, 0x3cca, 0xe0c0,
+ 0x0064, 0x3450, 0x3c51, 0x2850, 0xa01e, 0xaf08, 0x3c50, 0x2851,
+ 0xa01e, 0xaf08, 0x3c51, 0xe0c0, 0x0065, 0x3418, 0x3c17, 0x2817,
+ 0xae02, 0x3c17, 0x2818, 0xa002, 0x3c18, 0x2c17, 0xc710, 0x7c18,
+ 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c88, 0xe0c0, 0x0062, 0xaf04,
+ 0x301b, 0xaf04, 0x30e1, 0xaf02, 0x30b8, 0xe0c1, 0x0071, 0x3eb9,
+ 0xaf02, 0x30c8, 0xaf02, 0x30c7, 0xaf02, 0x30e6, 0xaf02, 0x30e5,
+ 0xaf02, 0xe0c0, 0x0068, 0xe049, 0xa83f, 0xae3f, 0xaf3f, 0x3e24,
+ 0xe049, 0xaf0b, 0x3226, 0xe049, 0xaf0d, 0xa807, 0x3e2c, 0xe049,
+ 0xaf11, 0xa81f, 0xaf41, 0xae41, 0xae03, 0x3e2d, 0xe049, 0xaf19,
+ 0xa81f, 0xaf41, 0xae41, 0xae03, 0x3e2e, 0x282c, 0x4c2d, 0x4c2e,
+ 0xe01a, 0x3c25, 0xe0c0, 0x0069, 0x3038, 0xaf02, 0x3039, 0xaf02,
+ 0x3c3a, 0xe0c0, 0x006a, 0x3c14, 0xe0c0, 0x006b, 0x3480, 0x3015,
+ 0xaf02, 0xe008, 0x7fff, 0x3c7f, 0xf028, 0x3c15, 0x2880, 0xaf1e,
+ 0x3091, 0x2880, 0xe008, 0x7fff, 0x3c80, 0xe0c0, 0x006c, 0x3481,
+ 0x3c82, 0xe0c0, 0x006d, 0x3c1c, 0xa20a, 0x3c10, 0xa002, 0x3c12,
+ 0xa202, 0x3c13, 0xa102, 0x3c22, 0xa200, 0x3c21, 0x3c20, 0x3c27,
+ 0xa204, 0x3c11, 0xa234, 0x3c23, 0x8450, 0x8251, 0xe018, 0x3c52,
+ 0xa201, 0xe002, 0x00c8, 0xb425, 0xe002, 0x0190, 0xb425, 0x3e36,
+ 0xe0c0, 0x0075, 0xe166, 0x0600, 0x3516, 0x3d16, 0xe0c0, 0x0076,
+ 0xe049, 0xa806, 0x3cd7, 0xe04a, 0xaf04, 0x30d9, 0xaf02, 0xa81e,
+ 0x3cd8, 0x28d9, 0xe016, 0x3cd9, 0xae02, 0x4cd9, 0xae02, 0x4cd9,
+ 0x3cd9, 0x28d8, 0xf028, 0xa21e, 0x3cd8, 0x2850, 0x2a51, 0xaf06,
+ 0xaf07, 0x3c08, 0x3e09, 0x8408, 0x8209, 0xe018, 0x3cc1, 0xa104,
+ 0xf032, 0xa204, 0x3cc1, 0x2851, 0xaf02, 0x3c08, 0x8408, 0x8250,
+ 0xe018, 0x3cc3, 0xe161, 0x0906, 0x3d01, 0x3cc6, 0xa202, 0x3c1e,
+ 0xe0c0, 0x0043, 0xaf06, 0x30be, 0xaf02, 0x30bf, 0xaf02, 0x30c0,
+ 0xaf02, 0x30ce, 0xa202, 0xe42e, 0xcb04, 0xaf20, 0xe000, 0x0490,
+ 0xe09e, 0xc872, 0x3d07, 0xcb04, 0xaf20, 0xa002, 0x1850, 0xe428,
+ 0xcb04, 0xe008, 0xffff, 0xae0e, 0xe005, 0x0000, 0xae11, 0xe042,
+ 0xe0c1, 0x0042, 0xe042, 0xce20, 0xd111, 0x0490, 0xd112, 0x002e,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x204a, 0x4c4b, 0x2e4d,
+ 0xae11, 0xe042, 0x0840, 0xe161, 0x0434, 0x3511, 0x3d11, 0x281f,
+ 0xae04, 0xe005, 0x0012, 0xae11, 0xe042, 0xe0c1, 0x0042, 0xe042,
+ 0xce20, 0xd111, 0x0434, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0x3c07, 0xa206, 0x3c2f, 0xa20e, 0x2a07, 0xf02b,
+ 0xa21e, 0x3c30, 0xe41e, 0x130d, 0x2807, 0xe41e, 0x0818, 0xe41e,
+ 0x1368, 0xe42e, 0x3c07, 0xa206, 0x3c2f, 0xa210, 0x3c30, 0xe41e,
+ 0x130d, 0x2807, 0xe41e, 0x08b0, 0xe41e, 0x1368, 0xe42e, 0xa200,
+ 0x3c2f, 0x283f, 0xf06a, 0xa230, 0x3c30, 0xe41e, 0x130d, 0xf09e,
+ 0xa212, 0x3c30, 0xe41e, 0x130d, 0xa204, 0xba84, 0xe41e, 0x092d,
+ 0xe41e, 0x1368, 0xe42e, 0xe0c0, 0x0040, 0xe005, 0x0063, 0xae17,
+ 0xe042, 0xe005, 0x1900, 0xae03, 0xe042, 0xce20, 0xd111, 0x0700,
+ 0xd112, 0x0200, 0xd113, 0x0003, 0xca28, 0xf7f8, 0xe42e, 0x2866,
+ 0x4c67, 0x4c68, 0xe42a, 0xe167, 0x05f0, 0xc410, 0x2866, 0xae10,
+ 0x3d17, 0x2852, 0x3d17, 0x8137, 0x2867, 0xae12, 0x2a31, 0xe017,
+ 0xe056, 0x3d17, 0x2852, 0xae04, 0x3d17, 0x8137, 0x2868, 0xae14,
+ 0x2a1f, 0xe056, 0x3d17, 0x281f, 0xae06, 0x3d17, 0xe0c0, 0x0068,
+ 0xce20, 0xd111, 0x05f0, 0xd112, 0x000c, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0x2866, 0x4c67, 0x4c68, 0xe42a, 0xe0c0, 0x0068,
+ 0xce20, 0xd111, 0x05f0, 0xd112, 0x000c, 0xd113, 0x0003, 0xca28,
+ 0xf7f8, 0xe42e, 0xa206, 0xe41e, 0x0153, 0xe0c0, 0x005a, 0xe008,
+ 0xffff, 0x3cee, 0xe41e, 0x0213, 0xa200, 0x3cdf, 0x3ce0, 0xe41e,
+ 0x1293, 0xe41e, 0x12af, 0xe41e, 0x12cc, 0xe41e, 0x14ae, 0xe41e,
+ 0x1206, 0xe41e, 0x12f0, 0xe41e, 0x12fb, 0xe41e, 0x14b6, 0xe42e,
+ 0xe41e, 0x149a, 0xa204, 0xe41e, 0x0153, 0xe42e, 0x2824, 0xa83e,
+ 0xae06, 0xcf80, 0xe41e, 0x1368, 0x283f, 0xf048, 0x2834, 0x3ce2,
+ 0xf06e, 0x283e, 0x44e1, 0xf03a, 0x28e2, 0x3c35, 0xd1f3, 0x0000,
+ 0x2835, 0xcfe4, 0xa200, 0xcfc2, 0xd1e8, 0x0055, 0x2850, 0xa102,
+ 0xae02, 0x4c26, 0xae06, 0xcf00, 0xd1d3, 0x000d, 0xd185, 0x0001,
+ 0xe41e, 0x112c, 0xe41e, 0x1131, 0x281b, 0xe418, 0x0607, 0xe41e,
+ 0x06f0, 0x283f, 0x2ae6, 0x463e, 0xe419, 0x05ea, 0x283f, 0x2ae6,
+ 0x463e, 0xe419, 0x05fa, 0x283d, 0x3c2b, 0xe41e, 0x1161, 0x283f,
+ 0xf078, 0x2829, 0xf05a, 0x281e, 0xa002, 0xa802, 0x3c1e, 0xe41e,
+ 0x096f, 0xe41e, 0x0d67, 0xe41e, 0x0812, 0xa200, 0x3c53, 0x3c1f,
+ 0x2831, 0xa004, 0x3c2f, 0x283f, 0xe016, 0x44e5, 0xe418, 0x1513,
+ 0xe41e, 0x0737, 0x2865, 0xaa02, 0x3c65, 0x2853, 0x1852, 0xf744,
+ 0xe41e, 0x0d85, 0xe41e, 0x0b79, 0x2815, 0xe418, 0x0e23, 0xe42e,
+ 0x283f, 0xf208, 0xe0c0, 0x0065, 0xa804, 0xf06a, 0xa200, 0x3c2a,
+ 0x3cb6, 0xe016, 0x3c89, 0x2814, 0xf048, 0x2c2a, 0xf07a, 0xf0ae,
+ 0x28b6, 0xf04a, 0x2a14, 0xe046, 0xf058, 0x3c29, 0xa202, 0x3cb6,
+ 0xf05e, 0xa202, 0x3c29, 0x08b6, 0x3cb6, 0x2829, 0xe016, 0x3c3e,
+ 0xf05e, 0x283e, 0x44e1, 0xf02a, 0x3c29, 0xa200, 0x3c72, 0xe0c0,
+ 0x0065, 0xa802, 0xe418, 0x0730, 0xe0c0, 0x0063, 0xa408, 0x3c3d,
+ 0x2815, 0xf09a, 0x2829, 0xe41a, 0x0e1d, 0xe41e, 0x0e20, 0x3c3d,
+ 0xe419, 0x0730, 0x2c2a, 0xe016, 0x3c31, 0xa004, 0x3c2f, 0xe42e,
+ 0xa202, 0x3c29, 0x3c72, 0x2835, 0xe0c2, 0x0060, 0xe42e, 0x2a31,
+ 0xa20a, 0xb636, 0x2a3f, 0xf02b, 0xa228, 0x3c30, 0xe41e, 0x130d,
+ 0xe41e, 0x08d7, 0xa202, 0x3ccb, 0xe41e, 0x076d, 0xe41e, 0x092d,
+ 0xe41e, 0x1368, 0x2868, 0xe418, 0x0751, 0x281f, 0xa002, 0x3c1f,
+ 0xe42e, 0xe167, 0x05ec, 0xa200, 0x3d17, 0x2853, 0xa102, 0x3d17,
+ 0xcaaa, 0xae06, 0x3517, 0x3d17, 0x281f, 0xae06, 0xe167, 0x05fa,
+ 0x2317, 0x4f17, 0xe042, 0xce20, 0xd111, 0x05ec, 0xd112, 0x0004,
+ 0xd113, 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x282b, 0xcf96, 0x282c,
+ 0xae0a, 0x2a2d, 0xa83f, 0xe056, 0xae0a, 0x2a2e, 0xa83f, 0xe056,
+ 0xcf30, 0x2829, 0xcfc4, 0xcf82, 0xd188, 0x0001, 0xa200, 0xcf86,
+ 0x3c3b, 0xa202, 0x3c3c, 0xe41e, 0x07a3, 0xe41e, 0x0815, 0x8a5e,
+ 0x0039, 0xe41e, 0x07ea, 0xc872, 0x1c5e, 0xe008, 0xffff, 0x3c5f,
+ 0x2a15, 0xcb96, 0xe419, 0x0e29, 0x2853, 0x1852, 0xf042, 0x283b,
+ 0xe40a, 0x0783, 0xcb86, 0xf02a, 0xbbfc, 0x2a15, 0xcb96, 0xf02b,
+ 0x3c2b, 0xa202, 0xe42e, 0x2838, 0x2a39, 0xe42a, 0xf0a9, 0x28dc,
+ 0xe42a, 0xa102, 0x3cdc, 0xa102, 0xe428, 0xa202, 0x3c3b, 0xe42e,
+ 0x283c, 0x183a, 0x2a3c, 0xa003, 0x3e3c, 0xe428, 0xa202, 0x3c3c,
+ 0x3c3b, 0xe42e, 0x2a38, 0x2839, 0xe42b, 0xa201, 0xf0a8, 0x28dc,
+ 0xe428, 0xc870, 0x1c3a, 0xe424, 0xa209, 0x3ed1, 0x3edc, 0xe42e,
+ 0x28d0, 0xa002, 0x3cd0, 0xa102, 0x183a, 0xe428, 0xa203, 0x3ed1,
+ 0x3ed0, 0xe42e, 0xa200, 0x3cd1, 0x3cdc, 0xa202, 0x3cd0, 0xe42e,
+ 0xcb1c, 0xf7f8, 0xd185, 0x0002, 0xd186, 0x0000, 0x2855, 0xae02,
+ 0x4c54, 0xcf8a, 0x2859, 0xcf94, 0xa200, 0xcfdc, 0xcf84, 0x2858,
+ 0xcfd2, 0xe42e, 0x2876, 0xf05a, 0xe41e, 0x0be3, 0xe41e, 0x0bbc,
+ 0xcba0, 0xf7f8, 0x2854, 0xf0ba, 0xcb18, 0x3c00, 0x2855, 0xf04a,
+ 0x2856, 0xae38, 0xcf8c, 0x2857, 0xcf90, 0xf03e, 0xcbd2, 0xcf9a,
+ 0xd1d0, 0x003f, 0xa202, 0x3c76, 0xe41e, 0x0ada, 0x2a66, 0xcba0,
+ 0xf7f8, 0xe419, 0x0d1c, 0xd186, 0x0001, 0xd185, 0x0004, 0xcb06,
+ 0x3c53, 0xe42e, 0xe41e, 0x0a97, 0xe42e, 0xe41e, 0x0acf, 0xe42e,
+ 0x3c07, 0xe005, 0x0064, 0xf03a, 0xe005, 0x0080, 0xba8f, 0xbac7,
+ 0x8452, 0x8288, 0xe019, 0xaf03, 0x2852, 0xe002, 0x0063, 0xf070,
+ 0xe04a, 0xe002, 0x05cd, 0xf030, 0xa214, 0xf37e, 0x2852, 0xe002,
+ 0x018c, 0xf070, 0xe04a, 0xe002, 0x2e68, 0xf030, 0xa228, 0xf2de,
+ 0x2852, 0xe002, 0x0654, 0xf070, 0xe04a, 0xe002, 0x9e34, 0xf030,
+ 0xa23c, 0xf23e, 0x2852, 0xe002, 0x0e10, 0xf080, 0xe004, 0x0d2f,
+ 0xae0a, 0xe046, 0xf034, 0xa23e, 0xf18e, 0x2852, 0xe002, 0x1400,
+ 0xf080, 0xe004, 0x0d2f, 0xae0c, 0xe046, 0xf034, 0xa240, 0xf0de,
+ 0x2852, 0xe002, 0x2000, 0xf080, 0xe004, 0x03c0, 0xae10, 0xe046,
+ 0xf034, 0xa250, 0xf02e, 0xa254, 0xe0c1, 0x0060, 0xaf09, 0xa803,
+ 0xf06b, 0xe0c0, 0x0060, 0xaf10, 0xe008, 0x00ff, 0x3ce3, 0xba8e,
+ 0x2807, 0xbbfc, 0xa202, 0xbbfc, 0xa200, 0xbbfc, 0xbbfc, 0xbac1,
+ 0x2810, 0xa108, 0xbbfc, 0x2811, 0xbbfc, 0x2811, 0xf048, 0x2812,
+ 0xa108, 0xbbfc, 0x2813, 0xbbfc, 0xe190, 0xbac0, 0x2850, 0xa102,
+ 0xbbfc, 0x2851, 0xa102, 0xbbfc, 0xe190, 0xbae0, 0xe190, 0xbae0,
+ 0x2873, 0xf038, 0xbac0, 0xf0fe, 0xbae0, 0x2878, 0xaf02, 0xbbfc,
+ 0x2879, 0xaf02, 0xbbfc, 0x287a, 0xaf02, 0xbbfc, 0x287b, 0xaf02,
+ 0xbbfc, 0xe190, 0xbac0, 0x2807, 0xf05a, 0xbae0, 0xe41e, 0x14f2,
+ 0xbac1, 0xe41e, 0x092d, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e,
+ 0xbbfc, 0xbbfc, 0xbac0, 0x2820, 0xba80, 0x2821, 0xbbfc, 0xe408,
+ 0x08d4, 0x2822, 0xbbfc, 0xa200, 0xe190, 0xbbfc, 0xe190, 0xbac0,
+ 0xe190, 0xbac1, 0xe190, 0x2823, 0xa134, 0xbbfe, 0xa200, 0xbbfe,
+ 0x2824, 0xbbfe, 0x2825, 0xba80, 0x2826, 0xba80, 0x2827, 0xba80,
+ 0xe41e, 0x092d, 0xa202, 0xe42e, 0xe16a, 0xa200, 0xe42e, 0x2853,
+ 0xbbfc, 0x2829, 0xe016, 0xae02, 0xe049, 0xe01b, 0x463f, 0xf029,
+ 0xa00a, 0xbbfc, 0x283f, 0xbbfc, 0x2c2a, 0x7010, 0x2831, 0xf03a,
+ 0xa200, 0xbbfc, 0x2811, 0xf098, 0x2c33, 0xae02, 0x7012, 0x2820,
+ 0xe40a, 0x08f4, 0xa200, 0xbbfe, 0x2827, 0xe40a, 0x08f9, 0xa200,
+ 0xbbfc, 0x2829, 0xf12a, 0xbac0, 0xe190, 0x2831, 0xe016, 0x443e,
+ 0x44e1, 0x443f, 0xf09a, 0xbae0, 0xa20a, 0xbbfc, 0xa200, 0xbbfc,
+ 0xa206, 0xbbfc, 0xf02e, 0xbac0, 0x282f, 0xe40a, 0x0918, 0x2831,
+ 0xe40a, 0x0917, 0xbac0, 0xe190, 0xbac0, 0xe40e, 0x0918, 0xbac0,
+ 0x282b, 0x1823, 0xbbfe, 0x2825, 0xe40a, 0x0929, 0x282c, 0xbbfc,
+ 0xa102, 0xe40a, 0x0929, 0x282d, 0xaf02, 0xbbfe, 0x282e, 0xaf02,
+ 0xbbfe, 0xa202, 0xe42e, 0xa200, 0xe42e, 0xbae0, 0xc868, 0xa80e,
+ 0xe42a, 0xa110, 0xe012, 0x3c48, 0xa200, 0x7048, 0xe42e, 0xa200,
+ 0x3c34, 0xe004, 0x0190, 0x3c75, 0xe0c0, 0x0414, 0xe428, 0xa200,
+ 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xa201, 0xae09, 0xa907,
+ 0xae09, 0xa907, 0xae09, 0xa907, 0xae09, 0xa901, 0xae09, 0xa907,
+ 0xae09, 0xa905, 0xae09, 0xa905, 0xe0c3, 0x0152, 0xa241, 0xae11,
+ 0xa911, 0xae11, 0xa911, 0xe0c3, 0x0153, 0xa201, 0xae21, 0xa902,
+ 0xae02, 0xa902, 0xae04, 0xa900, 0x3cde, 0xe056, 0xe0c2, 0x015c,
+ 0xa202, 0xe0c2, 0x0150, 0xe0c0, 0x0150, 0xf7ea, 0xe42e, 0xe41e,
+ 0x0cb2, 0xa210, 0xe0c2, 0x0100, 0xa200, 0xe0c2, 0x0128, 0x2a29,
+ 0xe004, 0x016f, 0xf039, 0xe004, 0x0168, 0xe0c2, 0x017c, 0xa200,
+ 0xe0c2, 0x017d, 0xe0c2, 0x013d, 0xe0c0, 0x0050, 0xe049, 0xe008,
+ 0x007f, 0x3c00, 0xaf11, 0xe009, 0x007f, 0x3e01, 0x4600, 0x3e00,
+ 0xa200, 0x2a00, 0xa803, 0xf03b, 0xe00a, 0x0002, 0x2a00, 0xa805,
+ 0xf02b, 0xa912, 0x2a00, 0xa809, 0xf02b, 0xa940, 0x2a00, 0xa811,
+ 0xf02b, 0xa980, 0xe0c2, 0x040c, 0xe0c1, 0x0046, 0xe004, 0x0000,
+ 0xae10, 0xe042, 0x2a01, 0xa803, 0xf05b, 0xe161, 0x0488, 0x2111,
+ 0x4d11, 0xcf0e, 0xe0c1, 0x0046, 0xe004, 0x0040, 0xae10, 0xe042,
+ 0x2a01, 0xa805, 0xf05b, 0xe161, 0x048a, 0x2111, 0x4d11, 0xe0c2,
+ 0x0103, 0xa200, 0xe0c2, 0x0208, 0xa200, 0xe0c2, 0x021c, 0xa202,
+ 0xe0c2, 0x0210, 0xa200, 0xe0c2, 0x0215, 0xe41e, 0x0d92, 0xa203,
+ 0xae09, 0xa901, 0xae09, 0xe056, 0xe0c2, 0x0213, 0xe0c1, 0x0046,
+ 0xe004, 0x0070, 0xae10, 0xe042, 0x2a01, 0xa809, 0xf05b, 0xe161,
+ 0x048c, 0x2111, 0x4d11, 0xe0c2, 0x0211, 0xe0c1, 0x0046, 0xe004,
+ 0x0070, 0xe000, 0x0040, 0xae10, 0xe042, 0x2a01, 0xa811, 0xf05b,
+ 0xe161, 0x048e, 0x2111, 0x4d11, 0xe0c2, 0x0212, 0xe0c0, 0x0064,
+ 0x3c71, 0x2a72, 0xf02b, 0xa200, 0xe0c2, 0x0138, 0x2050, 0x4c51,
+ 0xae08, 0xe0c2, 0x0101, 0xe0c2, 0x0205, 0x2a72, 0xaa03, 0x4671,
+ 0xa803, 0xf04b, 0x2051, 0x4c50, 0xae08, 0xe0c2, 0x0142, 0xa200,
+ 0xe41e, 0x0d92, 0xe0c2, 0x0102, 0x2829, 0xae06, 0xe0c2, 0x0104,
+ 0xa210, 0xae08, 0x4c29, 0xae06, 0xe0c2, 0x0204, 0xe0c0, 0x0060,
+ 0xa87e, 0xe0c2, 0x0143, 0xe0c0, 0x0069, 0xe0c2, 0x014f, 0xe004,
+ 0x0580, 0xe096, 0x2113, 0x4d13, 0xe0c2, 0x021d, 0x2834, 0xe0c2,
+ 0x020b, 0xe0c2, 0x0214, 0xa200, 0xe0c2, 0x0312, 0xa202, 0xe0c2,
+ 0x0302, 0x2835, 0xe0c2, 0x0380, 0xe0c2, 0x018d, 0x3cdd, 0xa200,
+ 0xe0c2, 0x0302, 0x2834, 0xe0c2, 0x0072, 0x3c35, 0xa002, 0x3c34,
+ 0x1832, 0xf028, 0x3c34, 0xa200, 0xe0c2, 0x0113, 0xe0c2, 0x030d,
+ 0xe0c2, 0x0320, 0xe0c2, 0x030a, 0xe0c2, 0x030b, 0xe004, 0x0055,
+ 0xe0c2, 0x030c, 0xe004, 0x003f, 0xe0c2, 0x012a, 0xe166, 0x0600,
+ 0x2116, 0x4d16, 0xe0c2, 0x011f, 0x2826, 0xe0c2, 0x0179, 0xe41e,
+ 0x0c39, 0xe004, 0x0582, 0xe096, 0x2313, 0x4f13, 0xe004, 0x0580,
+ 0xe096, 0x2113, 0x4d13, 0x3513, 0x3d13, 0xe004, 0x0580, 0xe096,
+ 0x3713, 0x3f13, 0xe41e, 0x0d4a, 0xe41e, 0x0d5c, 0xa202, 0xe0c2,
+ 0x0106, 0xe0c2, 0x0139, 0xe41e, 0x024d, 0xa204, 0x2a3d, 0xa115,
+ 0xb60a, 0x3cd5, 0x2a72, 0xa200, 0xf02b, 0xa208, 0xe0c2, 0x0140,
+ 0x3cd6, 0x2a50, 0xa10f, 0xa200, 0xb62e, 0x3cd4, 0xe42e, 0xa2f0,
+ 0x3c53, 0xe0c2, 0x003f, 0xe41e, 0x0cd3, 0xe41e, 0x07d2, 0xa200,
+ 0x3c76, 0xa2f2, 0x3c53, 0x2853, 0xe0c2, 0x003f, 0xa00a, 0xf078,
+ 0xe41e, 0x0cd7, 0xa202, 0xe0c2, 0x021e, 0xf17e, 0xa102, 0xf0a8,
+ 0xe41e, 0x0c22, 0xe41e, 0x0cd7, 0xe41e, 0x0c1b, 0xe41e, 0x0c11,
+ 0xf0ce, 0xf094, 0x2839, 0xf048, 0xe41e, 0x0ada, 0xf0ae, 0xe41e,
+ 0x0ad2, 0xf07e, 0xe41e, 0x0cd7, 0xe41e, 0x0cdb, 0xe41e, 0x0cd3,
+ 0xa200, 0x3ccc, 0x2853, 0xa002, 0x3c53, 0xf564, 0xe42e, 0x2853,
+ 0xe0c2, 0x003f, 0xe41e, 0x07ba, 0xe419, 0x1131, 0xe41e, 0x0c22,
+ 0x2876, 0xf0c8, 0x2863, 0xa002, 0x3c63, 0x1850, 0xf028, 0x3c63,
+ 0x2864, 0xe0c2, 0x0120, 0x2876, 0xe428, 0x2853, 0xf104, 0xa106,
+ 0xa80e, 0xae06, 0x3cdb, 0xe41e, 0x0c01, 0x2a67, 0xe41e, 0x0bd2,
+ 0xe419, 0x0cdf, 0xe41e, 0x07d8, 0xd1f0, 0x000d, 0x2ad4, 0x2853,
+ 0xa80e, 0xae06, 0x3cda, 0xf05b, 0x2863, 0xe016, 0x4cd1, 0x3cd1,
+ 0x2a72, 0xe0c0, 0x011c, 0xf7ea, 0xf07b, 0xa200, 0x3c00, 0x3c01,
+ 0xe0c2, 0x0114, 0xf10e, 0xe0c0, 0x011e, 0x3000, 0x44d5, 0x3c01,
+ 0x4c00, 0xe0c2, 0x0114, 0xf07a, 0xe0c0, 0x0170, 0x3c02, 0xe0c0,
+ 0x0174, 0x3c03, 0x2ad1, 0xe0c0, 0x0141, 0x3c64, 0xf09b, 0xe41e,
+ 0x0c1b, 0xa200, 0x3cd1, 0xa203, 0x4ed6, 0xe0c3, 0x0140, 0xe41e,
+ 0x113a, 0x2a29, 0xf17b, 0xe0c0, 0x018f, 0x3c04, 0xe0c2, 0x0309,
+ 0x28da, 0xe000, 0x02c0, 0xe092, 0xe162, 0x0190, 0xe163, 0x03b0,
+ 0xc420, 0xd022, 0x0003, 0xe184, 0x0b40, 0x9e12, 0x3511, 0x3d11,
+ 0x9f33, 0x2a00, 0xe0c0, 0x0111, 0xf7e8, 0x2853, 0xe0c3, 0x0188,
+ 0xf064, 0xa210, 0xe0c2, 0x0134, 0xd1d0, 0x0080, 0x2a29, 0x2864,
+ 0xe0c2, 0x0119, 0x28d2, 0xe0c2, 0x011a, 0x2862, 0xe0c2, 0x011b,
+ 0xa202, 0xe0c2, 0x0110, 0x2a76, 0xf1c9, 0x2115, 0x4d15, 0xcf8c,
+ 0x2115, 0x4d15, 0xcf8e, 0x28da, 0xe000, 0x0280, 0xe092, 0x2801,
+ 0x4c00, 0x3d11, 0x2802, 0xae10, 0x4c03, 0x3d11, 0x2804, 0x3d11,
+ 0xe0c0, 0x0121, 0x3511, 0x3d11, 0xe0c0, 0x0122, 0x3511, 0x3d11,
+ 0xe42e, 0xe41e, 0x0cd7, 0x2866, 0xf10a, 0x2a52, 0xa80f, 0xf0db,
+ 0xe167, 0x05f2, 0x2117, 0x4d17, 0x2a52, 0xa00f, 0xaf07, 0xae07,
+ 0xa103, 0xe042, 0xe41e, 0x0d40, 0x2867, 0xf0ba, 0x2852, 0xa806,
+ 0xa106, 0x2a52, 0xa007, 0xaf05, 0xae05, 0xa103, 0xe418, 0x0d0a,
+ 0x2852, 0xe0c2, 0x003f, 0xe41e, 0x0cd3, 0xe41e, 0x0cd7, 0xe190,
+ 0xe0c0, 0x0118, 0xa802, 0xf78a, 0xe42e, 0xe0c0, 0x011c, 0xf7ea,
+ 0xe0c0, 0x011e, 0xe0c2, 0x0114, 0x3000, 0xa804, 0x3c01, 0x2800,
+ 0xe0c2, 0x0188, 0xf09a, 0xe0c0, 0x0170, 0x3c02, 0xe0c0, 0x0174,
+ 0x3c03, 0xe0c2, 0x0123, 0xe42e, 0x28da, 0xe000, 0x0280, 0xe092,
+ 0x2801, 0x4c00, 0x3d11, 0x2802, 0xae10, 0x4c03, 0x3d11, 0x2804,
+ 0x3d11, 0xe0c0, 0x0121, 0x3511, 0x3d11, 0xe0c0, 0x0122, 0x3511,
+ 0x3d11, 0xe42e, 0x28db, 0xe000, 0x0280, 0xe09a, 0x2915, 0x3054,
+ 0xaf02, 0x3055, 0x2905, 0xaf10, 0x3c56, 0x2915, 0xa81e, 0x3c57,
+ 0x2915, 0x3c58, 0xe42e, 0x2115, 0x4d15, 0xcf8c, 0x2115, 0x4d15,
+ 0xcf8e, 0xe42e, 0xe0c0, 0x018f, 0x3c04, 0xe0c2, 0x0309, 0x28da,
+ 0xe000, 0x02c0, 0xe092, 0xe162, 0x0190, 0xe163, 0x03b0, 0xc420,
+ 0xd022, 0x0003, 0xe184, 0x0bff, 0x9e12, 0x3511, 0x3d11, 0x9f33,
+ 0xe42e, 0x28db, 0xe000, 0x02c0, 0xe092, 0xe005, 0x0080, 0xd022,
+ 0x0003, 0xe184, 0x0c0f, 0xcfd5, 0xa011, 0x2111, 0x4d11, 0xcfd6,
+ 0xe42e, 0x2864, 0xe0c2, 0x0119, 0x28d2, 0xe0c2, 0x011a, 0x2862,
+ 0xe0c2, 0x011b, 0xe42e, 0xa200, 0x3c64, 0xe004, 0x2222, 0x3cd2,
+ 0x3c62, 0xe42e, 0x2805, 0x3c59, 0x2a15, 0x4629, 0x282b, 0xe419,
+ 0x0e26, 0x3c05, 0x2805, 0x0824, 0xa400, 0xa566, 0xe000, 0x07f0,
+ 0xe09c, 0x2906, 0xae0c, 0x4d06, 0xae0c, 0x4c05, 0xe0c2, 0x0115,
+ 0xe42e, 0x2829, 0xf09a, 0xe0c0, 0x0414, 0xe418, 0x018c, 0xe0c0,
+ 0x0414, 0xe41a, 0x0c87, 0x28d7, 0x2a50, 0xa113, 0xf071, 0x2a50,
+ 0xa10d, 0xf037, 0xa402, 0xf02e, 0xa404, 0xe005, 0x0020, 0xe055,
+ 0xe0c3, 0x0180, 0xe004, 0x0582, 0x2a3f, 0x46e1, 0x463e, 0xf03b,
+ 0xe004, 0x0903, 0xe096, 0x2113, 0x4d13, 0xe0c2, 0x018c, 0x28d8,
+ 0xe0c2, 0x018e, 0x28d9, 0xe0c2, 0x018a, 0xa201, 0x283d, 0xa11e,
+ 0xa400, 0xa548, 0x3c03, 0xae04, 0xe000, 0x0740, 0xe09e, 0x2917,
+ 0xe0c2, 0x0186, 0x2917, 0xe0c2, 0x0185, 0xe0c2, 0x0184, 0x2917,
+ 0xe049, 0xae15, 0xe056, 0xae15, 0xe056, 0xe0c2, 0x0181, 0xe0c2,
+ 0x0182, 0x2917, 0xae20, 0x4c75, 0xe0c2, 0x0183, 0xe42e, 0xa200,
+ 0xe0c2, 0x0150, 0xe0c0, 0x0151, 0xf7e8, 0xe167, 0x01a0, 0x2317,
+ 0x4f17, 0xe0c3, 0x0152, 0x2b17, 0xe009, 0x00ff, 0xae21, 0x4f07,
+ 0xe0c3, 0x0153, 0xe0c1, 0x0101, 0xe0c3, 0x015d, 0x2add, 0xa53f,
+ 0xa401, 0xae21, 0xe167, 0x01a2, 0x2907, 0xaf10, 0xe008, 0x001b,
+ 0xe056, 0xe0c2, 0x015c, 0xa202, 0xe0c2, 0x0150, 0xe0c0, 0x0150,
+ 0xf7ea, 0xe42e, 0xe004, 0x3211, 0xae20, 0xe00a, 0x2100, 0xe0c2,
+ 0x0155, 0xe004, 0x9211, 0xae20, 0xe00a, 0x2100, 0xe0c2, 0x0158,
+ 0xe004, 0x1000, 0xae20, 0xe00a, 0x0000, 0xe0c2, 0x0156, 0xe0c2,
+ 0x0159, 0xe004, 0x0004, 0xe0c2, 0x0154, 0xe0c2, 0x0157, 0xa202,
+ 0xe0c2, 0x015a, 0xe42e, 0xa202, 0xe0c2, 0x0110, 0xe42e, 0xe0c0,
+ 0x0111, 0xf7e8, 0xe42e, 0xe0c0, 0x011c, 0xf7ea, 0xe42e, 0x2853,
+ 0xa806, 0xae02, 0xe000, 0x05e0, 0xe09e, 0x28db, 0xe000, 0x0280,
+ 0xe092, 0x2b11, 0xe01b, 0xae1f, 0xa200, 0xf0c9, 0x28db, 0xe000,
+ 0x02c0, 0xe092, 0x2111, 0x4d11, 0xcfd6, 0xe049, 0xaf21, 0xe009,
+ 0x7fff, 0x3f17, 0x3d17, 0x2853, 0xa806, 0xa106, 0x3c08, 0xe41a,
+ 0x0d0a, 0x2808, 0xe42a, 0x2852, 0x1853, 0xa102, 0xe428, 0xe41e,
+ 0x0d0a, 0xe42e, 0xe167, 0x05f6, 0x2117, 0x4d17, 0x2a53, 0xaf05,
+ 0xae09, 0xe042, 0xce20, 0xd112, 0x0008, 0xd111, 0x05e0, 0xd113,
+ 0x0002, 0xca28, 0xf7f8, 0xe42e, 0x2853, 0xa80e, 0xaf02, 0xe000,
+ 0x05e8, 0xe09e, 0xcb94, 0xe008, 0x003f, 0x2a65, 0xae0d, 0xe056,
+ 0x2a53, 0xa803, 0xf049, 0xae10, 0x3d07, 0xf06e, 0x2b07, 0xe009,
+ 0xff00, 0xe056, 0x3d07, 0x2853, 0xa80e, 0xa10e, 0xe41a, 0x0d39,
+ 0xe42e, 0x2853, 0xa10e, 0xe167, 0x05f2, 0x2317, 0x4f17, 0xe042,
+ 0xce20, 0xd111, 0x05e8, 0xd112, 0x0004, 0xd113, 0x0002, 0xca28,
+ 0xf7f8, 0xe42e, 0x282b, 0xa118, 0xb608, 0xa54e, 0xe000, 0x0830,
+ 0xe09c, 0x2906, 0xae04, 0xe0c2, 0x0176, 0xcca4, 0xc786, 0xe018,
+ 0xa004, 0xe0c2, 0x0177, 0xe42e, 0x282b, 0xa11e, 0xa400, 0xa548,
+ 0xe000, 0x0860, 0xe09c, 0x2906, 0xe0c2, 0x0189, 0xe42e, 0x2829,
+ 0xe42a, 0x283e, 0xe428, 0xa202, 0x2a1c, 0xb616, 0xae02, 0x4c1e,
+ 0xae20, 0x4c1c, 0xe0c2, 0x0108, 0x20c6, 0x4cc1, 0xe0c2, 0x0109,
+ 0x2052, 0x4c1d, 0xe0c2, 0x010a, 0x20c2, 0x4cc3, 0xe0c2, 0x010b,
+ 0x20c4, 0x4cc5, 0xe0c2, 0x010c, 0xe42e, 0x2829, 0xe42a, 0x283e,
+ 0xe428, 0xe0c0, 0x010b, 0x34c2, 0x3cc3, 0xe0c0, 0x010c, 0x34c4,
+ 0x3cc5, 0xe42e, 0xe0c1, 0x0044, 0xa80f, 0xe056, 0xe42e, 0xe0c1,
+ 0x0044, 0xaf0d, 0xae03, 0xe056, 0xa87e, 0xe42e, 0xa203, 0xe0c3,
+ 0x040d, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xe166, 0x04c0, 0xe167,
+ 0x0500, 0x2832, 0xf1b6, 0xa102, 0xcc44, 0xe184, 0x0dc4, 0xa200,
+ 0xe41e, 0x0d92, 0xaf04, 0xe41e, 0x0d97, 0xae20, 0x4c70, 0x9f17,
+ 0x2050, 0x4c51, 0xae08, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0x2116,
+ 0x4d16, 0x9f17, 0x2116, 0x4d16, 0x9f17, 0xa201, 0xe0c3, 0x040d,
+ 0xe42e, 0xe0c0, 0x0044, 0xaf20, 0xa802, 0xe428, 0xe0c0, 0x0060,
+ 0xa83e, 0xa203, 0xe0c3, 0x040d, 0xcca4, 0xc785, 0xe018, 0xe000,
+ 0x0500, 0xe09e, 0xe0c1, 0x0420, 0xa803, 0xf7db, 0xa200, 0xe41e,
+ 0x0d92, 0xaf04, 0xe0c1, 0x0061, 0xaf21, 0xa807, 0xa105, 0xf025,
+ 0xe04a, 0xe41e, 0x0d97, 0xe0c1, 0x0044, 0xaf17, 0xa803, 0xe40b,
+ 0x0df2, 0xa81e, 0xae20, 0xe0c1, 0x0061, 0xe009, 0x1fff, 0xe056,
+ 0x9f17, 0xe0c0, 0x0064, 0xa802, 0xf048, 0x2050, 0x4c51, 0xf03e,
+ 0x2051, 0x4c50, 0xae08, 0x9f17, 0xe0c0, 0x006a, 0x9f17, 0xe0c0,
+ 0x006b, 0x9f17, 0xe0c0, 0x006c, 0x9f17, 0xa201, 0xe0c3, 0x040d,
+ 0xe42e, 0xcca4, 0xc786, 0xe018, 0xe000, 0x04c0, 0xe09c, 0x2116,
+ 0x4d06, 0xe42e, 0xe41e, 0x0e32, 0xe42e, 0xe41e, 0x0e93, 0xe42e,
+ 0xe41e, 0x0e94, 0xe42e, 0xe41e, 0x0ee5, 0xe42e, 0xe41e, 0x0f1b,
+ 0xe42e, 0xe41e, 0x0f7b, 0xe42e, 0xe41e, 0x106a, 0xe42e, 0xe41e,
+ 0x10ca, 0xe42e, 0xa254, 0x3ccd, 0xa268, 0x3c83, 0xa218, 0x3c85,
+ 0xa266, 0x2ac8, 0xf03b, 0xe0c0, 0x0072, 0x3c84, 0xa210, 0x3c97,
+ 0xe004, 0x07e0, 0x3c98, 0x2814, 0x2a52, 0x3c86, 0x3e8b, 0x2c17,
+ 0xc710, 0x7c18, 0xe008, 0xffff, 0xa002, 0xaf02, 0x3c88, 0x3cbb,
+ 0xe004, 0x6000, 0x2ac7, 0xf03b, 0xe0c0, 0x0073, 0x3c99, 0x2886,
+ 0xe016, 0x3c87, 0xf06a, 0x2888, 0x3c86, 0xe004, 0x1000, 0x3c99,
+ 0x8418, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e17, 0xe41e, 0x1014,
+ 0x3c9e, 0x849e, 0x827f, 0xe018, 0xa279, 0xe41e, 0x0ffd, 0x349e,
+ 0x3c9f, 0xae06, 0x2a83, 0xe41e, 0x0ffd, 0x34a4, 0x3ca5, 0xa202,
+ 0x3c89, 0xa205, 0x1a36, 0xae03, 0xa011, 0x3e8e, 0x2a8b, 0x5a8e,
+ 0xe013, 0x36ae, 0x3eaf, 0x28b9, 0x2ab8, 0xf049, 0xe41e, 0x0fa4,
+ 0x64cd, 0x3c8c, 0xa004, 0x6085, 0x6484, 0x3c8d, 0xa200, 0x3ce7,
+ 0xe41e, 0x0fc8, 0xe42e, 0xe42e, 0x2829, 0x3c8a, 0xa201, 0x3e92,
+ 0x3ecc, 0xe418, 0x0f86, 0xa200, 0x3c93, 0x3c94, 0x288a, 0xf238,
+ 0x2889, 0xf05a, 0xa200, 0x3c89, 0x288c, 0xf37e, 0x2886, 0xa102,
+ 0xf7ca, 0x2ab8, 0xf03b, 0x288c, 0xf30e, 0x848b, 0x82b5, 0xe019,
+ 0xe04a, 0xaf02, 0x00a6, 0x0ca7, 0xe41e, 0x1014, 0xa21f, 0x3e8e,
+ 0x2a86, 0xc70f, 0x7e8e, 0xe009, 0xffff, 0xa405, 0xe046, 0x6085,
+ 0x64cd, 0xf1be, 0xa200, 0x3ca2, 0x3ca3, 0x2a92, 0xf08b, 0x288d,
+ 0x2ae7, 0xf129, 0xa006, 0x2a84, 0xe066, 0xf0ee, 0x28c9, 0x308e,
+ 0xaf02, 0x548e, 0xf08a, 0x288d, 0xa104, 0x6090, 0x2a8d, 0xa005,
+ 0xe066, 0xf02e, 0x288d, 0x3c90, 0x2a29, 0xf069, 0x2a3f, 0xf039,
+ 0x3ce4, 0xf02e, 0x28e4, 0x2a92, 0xe42e, 0xc872, 0xe41e, 0x0fd1,
+ 0x288a, 0xf0ea, 0x2093, 0x4c94, 0xc710, 0x7c8b, 0xe008, 0xffff,
+ 0xa002, 0xaf02, 0x3c8d, 0x2093, 0x4c94, 0x00a6, 0x0ca7, 0x34a6,
+ 0x3ca7, 0x28b5, 0xa002, 0x3cb5, 0x288a, 0xf028, 0x3cb5, 0x288a,
+ 0xf0f8, 0x2a86, 0xa103, 0x2095, 0x4c96, 0xe41e, 0x0ffd, 0x34ac,
+ 0x3cad, 0x1095, 0x1c96, 0xe012, 0x34aa, 0x3cab, 0xf0ae, 0x22aa,
+ 0x4eab, 0x12ac, 0x1ead, 0x2887, 0xb606, 0xb611, 0x36aa, 0x3eab,
+ 0x2892, 0x3ce7, 0xe42e, 0x28c9, 0xf08a, 0x2852, 0x1853, 0xa102,
+ 0xf048, 0x2805, 0xe40e, 0x0f70, 0x22a2, 0x4ea3, 0x20a4, 0x4ca5,
+ 0xe041, 0xf0c7, 0xe045, 0xe045, 0x2890, 0xf0f5, 0x36a2, 0x3ea3,
+ 0xa002, 0x6085, 0x6484, 0x3c90, 0xf08e, 0x36a2, 0x3ea3, 0x2890,
+ 0xa102, 0x6085, 0x6484, 0x3c90, 0x2890, 0x6085, 0x6484, 0x3c90,
+ 0x2ac9, 0x28cc, 0xa002, 0x3ccc, 0xf08b, 0xa103, 0xf22b, 0xa103,
+ 0xf07b, 0xa103, 0xf0ab, 0xf24e, 0x2890, 0xe40e, 0x0f70, 0x28cb,
+ 0xf18a, 0xa200, 0x3ccb, 0xf06e, 0x28cc, 0x18ca, 0xf124, 0xa200,
+ 0x3ccc, 0x2853, 0xa002, 0xf046, 0xcb97, 0xcb96, 0xf03e, 0x2a2b,
+ 0x282b, 0xa105, 0x6290, 0xa004, 0xe066, 0x3c90, 0x3c8e, 0xf08e,
+ 0xcb96, 0x3c8e, 0x2853, 0xa002, 0xf030, 0x282b, 0x3c8e, 0x288e,
+ 0x2a3d, 0xe045, 0xf053, 0x2a3d, 0xa007, 0xe066, 0xe42e, 0x2a3d,
+ 0xa107, 0xe062, 0xe42e, 0x0093, 0x0c94, 0x3493, 0x3c94, 0x285f,
+ 0x189a, 0x00a2, 0x0ca3, 0x34a2, 0x3ca3, 0xe42e, 0x20aa, 0x4cab,
+ 0x1095, 0x1c96, 0x8499, 0xe41e, 0x104b, 0x009e, 0x0c9f, 0xf052,
+ 0x2a91, 0xf039, 0xa203, 0x3e92, 0xe41e, 0x0fe3, 0x229e, 0x4e9f,
+ 0xaf07, 0xe062, 0x34a0, 0x3ca1, 0xc710, 0x7c8b, 0xe008, 0xffff,
+ 0xa002, 0xaf02, 0x3c9a, 0xe42e, 0x8486, 0x209e, 0x4c9f, 0xe41e,
+ 0x103f, 0x8497, 0xe41e, 0x103f, 0x2a86, 0xa103, 0x0a97, 0xe41e,
+ 0x0ffd, 0x34a0, 0x3ca1, 0x288b, 0x3cb0, 0x20a0, 0x4ca1, 0xae04,
+ 0x00a0, 0x0ca1, 0xae02, 0xc70f, 0x7cb0, 0xe008, 0xffff, 0xaf08,
+ 0xa010, 0xaf08, 0x0836, 0xa51e, 0x0898, 0xe09e, 0x2907, 0xe42e,
+ 0x847f, 0x8280, 0xe018, 0x34a8, 0x3ca9, 0xa200, 0x3495, 0x3c96,
+ 0xe42e, 0x109e, 0x1c9f, 0x0095, 0x0c96, 0xa27f, 0xae31, 0xe066,
+ 0x3495, 0x3c96, 0x22ae, 0x4eaf, 0xe046, 0xf032, 0x3695, 0x3e96,
+ 0x2095, 0x2896, 0xe42e, 0x2a80, 0xe42b, 0x22a8, 0x4ea9, 0x1295,
+ 0x1e96, 0xe066, 0xf051, 0x2a91, 0xf039, 0xa203, 0x3e92, 0x2281,
+ 0x4e82, 0xe42b, 0x22a8, 0x4ea9, 0x1295, 0x1e96, 0x029e, 0x0e9f,
+ 0x1281, 0x1e82, 0xa401, 0xe062, 0xe42e, 0x3eb0, 0xa201, 0xf032,
+ 0xe012, 0xa203, 0x3eb4, 0x3cb1, 0xaf20, 0xc70f, 0x7cb0, 0x3cb2,
+ 0xaf20, 0xae20, 0x4cb1, 0xc70f, 0x7cb0, 0x3cb3, 0x20b2, 0x4cb3,
+ 0x2ab4, 0xe42b, 0xe012, 0xe42e, 0x36b0, 0x3eb1, 0xa201, 0x3eb2,
+ 0x22b0, 0x4eb1, 0x5ab2, 0xe045, 0xf061, 0x2ab2, 0xa003, 0x3eb2,
+ 0xa121, 0xf775, 0x2ab2, 0xf039, 0xa200, 0xe42e, 0xa103, 0x3eb2,
+ 0xcc45, 0xa201, 0x3eb3, 0xe184, 0x103c, 0x2ab3, 0xae03, 0x3eb3,
+ 0x22b0, 0x4eb1, 0x5ab2, 0xe045, 0xf061, 0xe013, 0xe04a, 0x2ab3,
+ 0xa003, 0x3eb3, 0x2ab2, 0xa103, 0x3eb2, 0x28b3, 0xe42e, 0xae02,
+ 0x34b1, 0xe008, 0xffff, 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xae1e,
+ 0x82b0, 0xe01c, 0xe42e, 0xae02, 0x34b1, 0xe008, 0xffff, 0xaf02,
+ 0x3cb0, 0x82b0, 0xe018, 0xaf1e, 0x82b1, 0xe01c, 0xe42e, 0xae02,
+ 0x34b1, 0xe008, 0xffff, 0xaf02, 0x3cb0, 0x82b1, 0xe018, 0xa103,
+ 0x3eb2, 0x58b2, 0x82b0, 0xa11f, 0xe013, 0x3eb2, 0xe019, 0x5eb2,
+ 0xe042, 0xe42e, 0x34bd, 0x3cbc, 0x28bc, 0xae02, 0x3cbc, 0x28bd,
+ 0xa002, 0x3cbd, 0x2cbc, 0xc710, 0x7cbd, 0xe008, 0xffff, 0xa002,
+ 0xaf02, 0x3c88, 0x18bb, 0xe42a, 0x2888, 0x3cbb, 0x28bc, 0x2abd,
+ 0x3c17, 0x3e18, 0x8418, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e17,
+ 0xe41e, 0x1014, 0x3c9e, 0x849e, 0x827f, 0xe018, 0xa279, 0xe41e,
+ 0x0ffd, 0x349e, 0x3c9f, 0xae06, 0x2a83, 0xe41e, 0x0ffd, 0x34a4,
+ 0x3ca5, 0xa200, 0x3cb5, 0x34a6, 0x3ca7, 0x2886, 0xe428, 0xe016,
+ 0x3c87, 0x2888, 0x3c86, 0xe42e, 0x3cb7, 0x2a86, 0xe046, 0xf028,
+ 0xe42e, 0x28b6, 0x2ab7, 0xe046, 0xf034, 0xa200, 0x3cb6, 0x28b7,
+ 0x3c86, 0x3c14, 0x2815, 0xe42a, 0x2886, 0xe016, 0x3c87, 0xf03a,
+ 0x2a88, 0x3e86, 0x2a86, 0x28b6, 0xe045, 0xf0c6, 0x2095, 0x4c96,
+ 0xe41e, 0x0ffd, 0x34ac, 0x3cad, 0x1095, 0x1c96, 0xe012, 0x34aa,
+ 0x3cab, 0xe42e, 0x3cba, 0x2815, 0xe42a, 0x287f, 0x2aba, 0xe046,
+ 0xe42a, 0x3e7f, 0x8418, 0xe182, 0x7530, 0xe018, 0xae02, 0x2e17,
+ 0xe41e, 0x1014, 0x3c9e, 0x849e, 0x827f, 0xe018, 0xa279, 0xe41e,
+ 0x0ffd, 0x349e, 0x3c9f, 0xae06, 0x2a83, 0xe41e, 0x0ffd, 0x34a4,
+ 0x3ca5, 0xa200, 0x3cb5, 0x34a6, 0x3ca7, 0xe42e, 0x2a15, 0xe42b,
+ 0xf042, 0xa201, 0x3eb8, 0xe42e, 0x3cb9, 0x3c8c, 0xa203, 0x3eb8,
+ 0xe42e, 0xe0c1, 0x0060, 0xa803, 0xf05b, 0xe0c0, 0x0061, 0xe41e,
+ 0x10a4, 0xe0c1, 0x0060, 0xa805, 0xf05b, 0xe0c0, 0x0062, 0xe41e,
+ 0x10ee, 0xe0c1, 0x0060, 0xa809, 0xf05b, 0xe0c0, 0x0063, 0xe41e,
+ 0x0e2f, 0xe0c1, 0x0060, 0xa811, 0xf05b, 0xe0c0, 0x0064, 0xe41e,
+ 0x0e2c, 0xe0c1, 0x0060, 0xa821, 0xf04b, 0xe0c0, 0x0065, 0x3c1c,
+ 0xe0c1, 0x0060, 0xa841, 0xf08b, 0xe0c0, 0x0066, 0x3038, 0xaf02,
+ 0x3039, 0xaf02, 0x3c3a, 0xe42e, 0xa200, 0x3c63, 0x3cd3, 0x3c64,
+ 0xe42e, 0xe161, 0x0200, 0xe004, 0x2222, 0xe188, 0x007f, 0x3d11,
+ 0xe190, 0xe42e, 0xf149, 0x2a63, 0x28d3, 0xe000, 0x0200, 0xe09c,
+ 0x2906, 0x3c62, 0xf089, 0xe004, 0x2222, 0x3cd2, 0xe0c0, 0x0173,
+ 0x3506, 0xf05e, 0xe0c0, 0x0173, 0x3506, 0x3cd2, 0x28d3, 0xa002,
+ 0x3cd3, 0xa002, 0x1850, 0xe428, 0x3cd3, 0xe42e, 0xa200, 0x3cc2,
+ 0x3cc4, 0x3cc5, 0xe161, 0x0905, 0x3d11, 0x8111, 0x3d11, 0x3d11,
+ 0xe42e, 0xa200, 0x3c1d, 0xe42e, 0x2a3e, 0xa200, 0xe429, 0x281e,
+ 0xf208, 0x281d, 0x181c, 0xf3f2, 0x2853, 0xa006, 0x18c2, 0xf3b4,
+ 0x28c2, 0x08c1, 0x18c6, 0xf0b4, 0x28c4, 0xa002, 0xc70f, 0x7cc1,
+ 0xaf20, 0x3cc4, 0x3cc2, 0x281c, 0x3c1d, 0xf2be, 0x281d, 0xa002,
+ 0x3c1d, 0x28c2, 0x08c1, 0xc70f, 0x7cc6, 0xaf20, 0x3cc2, 0xf21e,
+ 0x281d, 0x181c, 0xf202, 0x2853, 0xa006, 0x18c3, 0xf1c4, 0x28c3,
+ 0x08c1, 0x1852, 0xf0c4, 0x28c5, 0xa002, 0xc70f, 0x7cc1, 0xaf20,
+ 0x3cc5, 0x08c6, 0x3cc3, 0x281c, 0x3c1d, 0xf0be, 0x281d, 0xa002,
+ 0x3c1d, 0x28c3, 0x08c1, 0xc70f, 0x7c52, 0xaf20, 0x3cc3, 0xf01e,
+ 0xa202, 0xe42e, 0xa200, 0xe42e, 0xa200, 0x3c4d, 0xe0c0, 0x0060,
+ 0x344a, 0x3c4b, 0x347c, 0x3c7d, 0xe0c0, 0x0061, 0xae04, 0x3c4c,
+ 0xe41e, 0x11cd, 0xe42e, 0xd030, 0x0000, 0xd034, 0x0000, 0xd033,
+ 0x0000, 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0080, 0xd038,
+ 0x0000, 0xa200, 0x3c49, 0xe42e, 0xe470, 0x204a, 0x4c4b, 0x2e4d,
+ 0xae11, 0xe042, 0xe0c2, 0x0049, 0x347c, 0x3c7d, 0xe42e, 0xd071,
+ 0x242a, 0xe181, 0xa200, 0x34df, 0x3ce0, 0xe004, 0x0200, 0x3cf3,
+ 0x3cf6, 0xe41e, 0x1293, 0xe41e, 0x12af, 0xe41e, 0x12cc, 0xe41e,
+ 0x12f0, 0xe41e, 0x12fb, 0xe42e, 0xe41e, 0x1217, 0xe41e, 0x1233,
+ 0xca48, 0xaf3c, 0xa802, 0xf05a, 0xa202, 0x3cf4, 0xae3c, 0xce48,
+ 0xca48, 0xaf38, 0xa802, 0xf0aa, 0xe41e, 0x1206, 0xe41e, 0x12f0,
+ 0xa202, 0xae38, 0xce48, 0xe41e, 0x12fb, 0xe470, 0x247c, 0x4c7d,
+ 0x264a, 0x4e4b, 0xe046, 0x2e4c, 0xae11, 0xe045, 0xe425, 0x28f3,
+ 0xe045, 0xf043, 0xe041, 0x3ef6, 0xe42e, 0x3cf6, 0xe42e, 0xca55,
+ 0x28f6, 0xf048, 0xa200, 0xceaa, 0xf04e, 0x20df, 0x4ce0, 0xe045,
+ 0x247c, 0x4c7d, 0xe042, 0x347c, 0x3c7d, 0x28f6, 0xe42a, 0x24df,
+ 0x4ce0, 0xe042, 0x34df, 0x3ce0, 0x2af6, 0xe046, 0xe428, 0xa200,
+ 0x34df, 0x3ce0, 0xe42e, 0xa200, 0x3c4f, 0x247c, 0x4c7d, 0x264a,
+ 0x4e4b, 0xe046, 0xe049, 0xaf10, 0x3c4d, 0x2c4c, 0xae10, 0xe045,
+ 0xf275, 0x28bf, 0xf1fa, 0xa202, 0xe0c2, 0x0074, 0x247c, 0x4c7d,
+ 0xe0c2, 0x0049, 0x2ace, 0xf16b, 0xe0c0, 0x005c, 0xe008, 0x8000,
+ 0xf11a, 0xe0c0, 0x005d, 0xe00a, 0x8000, 0xe0c2, 0x005d, 0xa202,
+ 0xce00, 0xe0c1, 0x005d, 0xe009, 0x8000, 0xf7c9, 0xe0c0, 0x0004,
+ 0xf798, 0xa200, 0x3c4d, 0x264a, 0x4e4b, 0x367c, 0x3e7d, 0x267c,
+ 0x4e7d, 0xe0c3, 0x0049, 0x28bf, 0xe428, 0xd027, 0x0000, 0xe41e,
+ 0x1274, 0xd027, 0x0001, 0xe42e, 0xe0c0, 0x0048, 0xe0c1, 0x0049,
+ 0xe046, 0xf040, 0x2e4c, 0xae11, 0xe042, 0xe005, 0x0200, 0xe046,
+ 0xe420, 0x284f, 0xf728, 0xe0c0, 0x005c, 0xe008, 0x8000, 0xf6da,
+ 0xe0c0, 0x005d, 0xe00a, 0x8000, 0xe0c2, 0x005d, 0xa202, 0xce00,
+ 0x3c4f, 0xf63e, 0xe42e, 0xa220, 0xa20d, 0xe056, 0xa203, 0xe056,
+ 0xae20, 0xcc9e, 0xd030, 0x0000, 0xd033, 0x0000, 0xd034, 0x0000,
+ 0xd035, 0x0000, 0xd036, 0x00ff, 0xd037, 0x0080, 0xd038, 0x0000,
+ 0xd039, 0x0000, 0xd046, 0x0000, 0xd047, 0x0000, 0xe42e, 0xe0c0,
+ 0x0043, 0xaf0c, 0x30ce, 0xa202, 0xae0e, 0xe0c1, 0x0043, 0xa807,
+ 0xae09, 0xe056, 0xce4e, 0xa222, 0xae28, 0xa217, 0xae37, 0xe056,
+ 0xce4c, 0xa200, 0xce54, 0xa206, 0xae38, 0xe005, 0x0003, 0xe056,
+ 0xce4a, 0xa200, 0xce58, 0xe42e, 0xe0c0, 0x005b, 0xa110, 0xf04a,
+ 0xa106, 0xf05a, 0xe42e, 0xe004, 0x0038, 0xf03e, 0xe004, 0x0020,
+ 0xe005, 0x0080, 0xe056, 0xe005, 0x1800, 0xe056, 0xcec0, 0xa208,
+ 0xcec8, 0xa200, 0xce92, 0xce9e, 0xce88, 0xce8a, 0xced0, 0xced6,
+ 0xcea4, 0xcec6, 0xa202, 0xce9c, 0xe004, 0x0200, 0xce96, 0xe42e,
+ 0xa206, 0x2af6, 0xae11, 0xe056, 0xce5a, 0x247c, 0x4c7d, 0xce5c,
+ 0xa200, 0xce5e, 0xe42e, 0xe004, 0x0f00, 0xae20, 0xe005, 0x0003,
+ 0xe056, 0xe005, 0x0030, 0xe056, 0xca49, 0xaf21, 0xa803, 0xf04b,
+ 0xa203, 0xae2f, 0xe056, 0xce4a, 0xe42e, 0xc872, 0xa050, 0xcc72,
+ 0xa200, 0xe41e, 0x135d, 0xa200, 0xe41e, 0x135d, 0xa200, 0xe41e,
+ 0x135d, 0xa202, 0xe41e, 0x135d, 0xa200, 0xce96, 0xceaa, 0x282f,
+ 0xae0a, 0x4c30, 0xe41e, 0x135d, 0x2830, 0xa11c, 0xf05a, 0x2830,
+ 0xa128, 0xf02a, 0xf2be, 0xc872, 0xa030, 0xcc72, 0xa200, 0xae02,
+ 0x2a31, 0xb436, 0xae0c, 0xa900, 0xae14, 0x2a30, 0xa11d, 0xb432,
+ 0xae06, 0xa900, 0xae02, 0x4c3e, 0xae02, 0x2a3f, 0xe017, 0x463e,
+ 0x46e1, 0xb432, 0xae02, 0xa902, 0x3c07, 0xaf20, 0xe008, 0x00ff,
+ 0xe41e, 0x135d, 0x2807, 0xaf10, 0xe008, 0x00ff, 0xe41e, 0x135d,
+ 0x2807, 0xe008, 0x00ff, 0xe41e, 0x135d, 0xe41e, 0x11bb, 0xa200,
+ 0xce92, 0xe42e, 0xca9b, 0xf7f9, 0xe42e, 0xe41e, 0x135a, 0xcec4,
+ 0xe42e, 0xca48, 0xa802, 0xf7e8, 0xca4c, 0xa802, 0xf7ea, 0xe42e,
+ 0xe41e, 0x1361, 0xe41e, 0x135a, 0xa200, 0x3cf4, 0xe004, 0x0030,
+ 0xce98, 0x28f4, 0xf7fa, 0xe42e, 0xe082, 0x3c4e, 0xe161, 0x0180,
+ 0xca80, 0x3511, 0x3d11, 0xca82, 0x3511, 0x3d11, 0xca84, 0x3511,
+ 0x3d11, 0xca86, 0x3511, 0x3d11, 0x8b11, 0x0144, 0x8b11, 0x0145,
+ 0x8b11, 0x0148, 0x8b11, 0x0149, 0x8b11, 0x014a, 0x8b11, 0x014b,
+ 0x8b11, 0x0160, 0x8b11, 0x014e, 0x8b11, 0x014f, 0x8b11, 0x0152,
+ 0x8b11, 0x0153, 0x8b11, 0x0155, 0x8b11, 0x0157, 0x8b11, 0x0163,
+ 0x8b11, 0x0164, 0x8b11, 0x0165, 0xcacc, 0x3511, 0x3d11, 0xcace,
+ 0x3511, 0x3d11, 0x8b11, 0x0168, 0xcad2, 0x3511, 0x3d11, 0xcad4,
+ 0x3511, 0x3d11, 0x8b11, 0x016b, 0x8b11, 0x016c, 0x8b11, 0x016d,
+ 0x8b11, 0x016e, 0xc860, 0x3511, 0x3d11, 0xc862, 0x3511, 0x3d11,
+ 0xc864, 0x3511, 0x3d11, 0x8b11, 0x0033, 0x8b11, 0x0034, 0x8b11,
+ 0x0035, 0x8b11, 0x0036, 0x8b11, 0x0037, 0x8b11, 0x0038, 0xc872,
+ 0x3511, 0x3d11, 0x8b11, 0x003a, 0xc87a, 0x3511, 0x3d11, 0xc87c,
+ 0x3511, 0x3d11, 0xc880, 0x3511, 0x3d11, 0xc882, 0x3511, 0x3d11,
+ 0xc884, 0x3511, 0x3d11, 0xc886, 0x3511, 0x3d11, 0xc888, 0x3511,
+ 0x3d11, 0xc88a, 0x3511, 0x3d11, 0xc88c, 0x3511, 0x3d11, 0xc890,
+ 0x3511, 0x3d11, 0xc892, 0x3511, 0x3d11, 0xc894, 0x3511, 0x3d11,
+ 0xc896, 0x3511, 0x3d11, 0xc898, 0x3511, 0x3d11, 0xc89e, 0x3511,
+ 0x3d11, 0x284e, 0xe092, 0xe42e, 0xe082, 0x3c4e, 0xe161, 0x0180,
+ 0x2111, 0x4d11, 0xce80, 0x2111, 0x4d11, 0xce82, 0x2111, 0x4d11,
+ 0xce84, 0x2111, 0x4d11, 0xce86, 0x8911, 0x0144, 0x8911, 0x0145,
+ 0x8911, 0x0148, 0x8911, 0x0149, 0x8911, 0x014a, 0x8911, 0x014b,
+ 0x8911, 0x0160, 0x8911, 0x014e, 0x8911, 0x014f, 0x8911, 0x0152,
+ 0x8911, 0x0153, 0x8911, 0x0155, 0x8911, 0x0157, 0x8911, 0x0163,
+ 0x8911, 0x0164, 0x8911, 0x0165, 0x2111, 0x4d11, 0xcecc, 0x2111,
+ 0x4d11, 0xcece, 0x8911, 0x0168, 0x2111, 0x4d11, 0xced2, 0x2111,
+ 0x4d11, 0xced4, 0x8911, 0x016b, 0x8911, 0x016c, 0x8911, 0x016d,
+ 0x8911, 0x016e, 0x2111, 0x4d11, 0xcc60, 0x2111, 0x4d11, 0xcc62,
+ 0x2111, 0x4d11, 0xcc64, 0x8911, 0x0033, 0x8911, 0x0034, 0x8911,
+ 0x0035, 0x8911, 0x0036, 0x8911, 0x0037, 0x8911, 0x0038, 0x2111,
+ 0x4d11, 0xcc72, 0x8911, 0x003a, 0x2111, 0x4d11, 0xcc7a, 0x2111,
+ 0x4d11, 0xcc7c, 0x2111, 0x4d11, 0xcc80, 0x2111, 0x4d11, 0xcc82,
+ 0x2111, 0x4d11, 0xcc84, 0x2111, 0x4d11, 0xcc86, 0x2111, 0x4d11,
+ 0xcc88, 0x2111, 0x4d11, 0xcc8a, 0x2111, 0x4d11, 0xcc8c, 0x2111,
+ 0x4d11, 0xcc90, 0x2111, 0x4d11, 0xcc92, 0x2111, 0x4d11, 0xcc94,
+ 0x2111, 0x4d11, 0xcc96, 0x2111, 0x4d11, 0xcc98, 0x2111, 0x4d11,
+ 0xe005, 0x1415, 0xae21, 0xe056, 0xcc9e, 0xd14c, 0x0002, 0x284e,
+ 0xe092, 0xe42e, 0xe082, 0x3c4e, 0xe161, 0x0180, 0xc872, 0x3511,
+ 0x3d11, 0xcac6, 0x3cfa, 0x3d11, 0xf07a, 0xcacc, 0x3511, 0x3d11,
+ 0xcace, 0x3511, 0x3d11, 0x284e, 0xe092, 0xe42e, 0x2afa, 0xe42b,
+ 0x247c, 0x4c7d, 0xe046, 0x347c, 0x3c7d, 0xe42e, 0xe082, 0x3c4e,
+ 0xe161, 0x0180, 0x2111, 0x4d11, 0xcc72, 0x2b11, 0xf15b, 0x2901,
+ 0xaf10, 0xe008, 0x00ff, 0xe41e, 0x135d, 0x28fa, 0xa102, 0xf0ca,
+ 0x3cfa, 0x2911, 0xe008, 0x00ff, 0xe41e, 0x135d, 0x28fa, 0xa102,
+ 0xf03a, 0x3cfa, 0xf6de, 0x284e, 0xe092, 0xe42e, 0xa200, 0x3c3f,
+ 0xe42e, 0xe163, 0x0035, 0xe164, 0x0900, 0xa202, 0xe41e, 0x151c,
+ 0xe163, 0x0580, 0xe164, 0x0901, 0xa208, 0xe41e, 0x151c, 0xe163,
+ 0x00c2, 0xe164, 0x0905, 0xa208, 0xe41e, 0x151c, 0x283f, 0xaa02,
+ 0x3c3f, 0xe42e, 0xa202, 0xbbfc, 0xa200, 0xbbfc, 0xa202, 0xbbfc,
+ 0x28e1, 0xf06a, 0xa202, 0xbbfc, 0xa200, 0xbbfc, 0xf03e, 0xa200,
+ 0xbbfc, 0xa200, 0xbbfc, 0xbbfc, 0xbbfc, 0xbbfc, 0x28e3, 0xba8e,
+ 0xa200, 0xbbfc, 0xbac2, 0xa202, 0xbbfc, 0xa200, 0xbbfc, 0xa202,
+ 0xbbfc, 0xbbfc, 0xe42e, 0x283f, 0xe428, 0xa21c, 0x3c30, 0xe41e,
+ 0x130d, 0xe41e, 0x1368, 0xe42e, 0xa102, 0xcc44, 0xe184, 0x1523,
+ 0x2d03, 0x2f04, 0x3d14, 0x3f13, 0xe42e, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+ 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190, 0xe190,
+};
+
+#endif //__CODA960_FW_H__
+
diff --git a/board/rda/common/include/coda960_regs.h b/board/rda/common/include/coda960_regs.h
new file mode 100644
index 0000000000..a52a983d9a
--- /dev/null
+++ b/board/rda/common/include/coda960_regs.h
@@ -0,0 +1,544 @@
+//--=========================================================================--
+// This file is a part of VPU Reference API project
+//-----------------------------------------------------------------------------
+//
+// This confidential and proprietary software may be used only
+// as authorized by a licensing agreement from Chips&Media Inc.
+// In the event of publication, the following notice is applicable:
+//
+// (C) COPYRIGHT 2006 - 2011 CHIPS&MEDIA INC.
+// ALL RIGHTS RESERVED
+//
+// The entire notice above must be reproduced on all authorized
+// copies.
+//
+//--=========================================================================--
+
+#ifndef __CODA960_REGS_H__
+#define __CODA960_REGS_H__
+
+//------------------------------------------------------------------------------
+// REGISTER BASE
+//------------------------------------------------------------------------------
+#define BIT_BASE 0x0000
+#define GDMA_BASE 0x1000
+#define MBC_BASE 0x0400
+#define ME_BASE 0x0600
+#define MC_BASE 0x0C00
+#define DMAC_BASE 0x2000
+
+#define BW_BASE 0x03000000
+//------------------------------------------------------------------------------
+// HARDWARE REGISTER
+//------------------------------------------------------------------------------
+#define BIT_CODE_RUN (BIT_BASE + 0x000)
+#define BIT_CODE_DOWN (BIT_BASE + 0x004)
+#define BIT_INT_REQ (BIT_BASE + 0x008)
+#define BIT_INT_CLEAR (BIT_BASE + 0x00C)
+#define BIT_INT_STS (BIT_BASE + 0x010)
+#define BIT_CODE_RESET (BIT_BASE + 0x014)
+#define BIT_CUR_PC (BIT_BASE + 0x018)
+#define BIT_SW_RESET (BIT_BASE + 0x024)
+#define BIT_SW_RESET_STATUS (BIT_BASE + 0x034)
+
+//------------------------------------------------------------------------------
+// GLOBAL REGISTER
+//------------------------------------------------------------------------------
+#define BIT_CODE_BUF_ADDR (BIT_BASE + 0x100)
+#define BIT_WORK_BUF_ADDR (BIT_BASE + 0x104)
+#define BIT_PARA_BUF_ADDR (BIT_BASE + 0x108)
+#define BIT_BIT_STREAM_CTRL (BIT_BASE + 0x10C)
+#define BIT_FRAME_MEM_CTRL (BIT_BASE + 0x110)
+#define BIT_BIT_STREAM_PARAM (BIT_BASE + 0x114)
+#define BIT_TEMP_BUF_ADDR (BIT_BASE + 0x118)
+
+#define BIT_RD_PTR (BIT_BASE + 0x120)
+#define BIT_WR_PTR (BIT_BASE + 0x124)
+
+#define BIT_ROLLBACK_STATUS (BIT_BASE + 0x128) // internal used in f/w.
+
+#define BIT_AXI_SRAM_USE (BIT_BASE + 0x140)
+#define BIT_BYTE_POS_FRAME_START (BIT_BASE + 0x144)
+#define BIT_BYTE_POS_FRAME_END (BIT_BASE + 0x148)
+#define BIT_FRAME_CYCLE (BIT_BASE + 0x14C)
+
+#define BIT_FRM_DIS_FLG (BIT_BASE + 0x150)
+
+#define BIT_BUSY_FLAG (BIT_BASE + 0x160)
+#define BIT_RUN_COMMAND (BIT_BASE + 0x164)
+#define BIT_RUN_INDEX (BIT_BASE + 0x168)
+#define BIT_RUN_COD_STD (BIT_BASE + 0x16C)
+#define BIT_INT_ENABLE (BIT_BASE + 0x170)
+#define BIT_INT_REASON (BIT_BASE + 0x174)
+#define BIT_RUN_AUX_STD (BIT_BASE + 0x178)
+
+// MSG REGISTER ADDRESS changed
+#define BIT_MSG_0 (BIT_BASE + 0x130)
+#define BIT_MSG_1 (BIT_BASE + 0x134)
+#define BIT_MSG_2 (BIT_BASE + 0x138)
+#define BIT_MSG_3 (BIT_BASE + 0x13C)
+
+#define MBC_BUSY (MBC_BASE + 0x040)
+#define MC_BUSY (MC_BASE + 0x004)
+
+//------------------------------------------------------------------------------
+// [ENC SEQ INIT] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_SEQ_BB_START (BIT_BASE + 0x180)
+#define CMD_ENC_SEQ_BB_SIZE (BIT_BASE + 0x184)
+#define CMD_ENC_SEQ_OPTION (BIT_BASE + 0x188) // HecEnable,ConstIntraQp, FMO, QPREP, AUD, SLICE, MB BIT
+#define CMD_ENC_SEQ_COD_STD (BIT_BASE + 0x18C)
+#define CMD_ENC_SEQ_SRC_SIZE (BIT_BASE + 0x190)
+#define CMD_ENC_SEQ_SRC_F_RATE (BIT_BASE + 0x194)
+#define CMD_ENC_SEQ_MP4_PARA (BIT_BASE + 0x198)
+#define CMD_ENC_SEQ_263_PARA (BIT_BASE + 0x19C)
+#define CMD_ENC_SEQ_264_PARA (BIT_BASE + 0x1A0)
+#define CMD_ENC_SEQ_SLICE_MODE (BIT_BASE + 0x1A4)
+#define CMD_ENC_SEQ_GOP_NUM (BIT_BASE + 0x1A8)
+#define CMD_ENC_SEQ_RC_PARA (BIT_BASE + 0x1AC)
+#define CMD_ENC_SEQ_RC_BUF_SIZE (BIT_BASE + 0x1B0)
+#define CMD_ENC_SEQ_INTRA_REFRESH (BIT_BASE + 0x1B4)
+#define CMD_ENC_SEQ_INTRA_QP (BIT_BASE + 0x1C4)
+#define CMD_ENC_SEQ_RC_QP_MAX (BIT_BASE + 0x1C8)
+#define CMD_ENC_SEQ_RC_GAMMA (BIT_BASE + 0x1CC)
+#define CMD_ENC_SEQ_RC_INTERVAL_MODE (BIT_BASE + 0x1D0) // mbInterval[32:2], rcIntervalMode[1:0]
+#define CMD_ENC_SEQ_INTRA_WEIGHT (BIT_BASE + 0x1D4)
+#define CMD_ENC_SEQ_ME_OPTION (BIT_BASE + 0x1D8)
+#define CMD_ENC_SEQ_RC_PARA2 (BIT_BASE + 0x1DC)
+#define CMD_ENC_SEQ_QP_RANGE_SET (BIT_BASE + 0x1E0)
+#define CMD_ENC_SEQ_RC_MAX_INTRA_SIZE (BIT_BASE + 0x1F0)
+
+#define CMD_ENC_SEQ_FIRST_MBA (BIT_BASE + 0x1E4)
+#define CMD_ENC_SEQ_HEIGHT_IN_MAP_UNITS (BIT_BASE + 0x1E8)
+#define CMD_ENC_SEQ_OVERLAP_CLIP_SIZE (BIT_BASE + 0x1EC)
+
+//------------------------------------------------------------------------------
+// [ENC SEQ END] COMMAND
+//------------------------------------------------------------------------------
+#define RET_ENC_SEQ_END_SUCCESS (BIT_BASE + 0x1C0)
+//------------------------------------------------------------------------------
+// [ENC PIC RUN] COMMAND
+//------------------------------------------------------------------------------
+
+#define CMD_ENC_PIC_SRC_INDEX (BIT_BASE + 0x180)
+#define CMD_ENC_PIC_SRC_STRIDE (BIT_BASE + 0x184)
+#define CMD_ENC_PIC_SRC_ADDR_Y (BIT_BASE + 0x1A8)
+#define CMD_ENC_PIC_SRC_ADDR_CB (BIT_BASE + 0x1AC)
+#define CMD_ENC_PIC_SRC_ADDR_CR (BIT_BASE + 0x1B0)
+#define CMD_ENC_PIC_QS (BIT_BASE + 0x18C)
+#define CMD_ENC_PIC_ROT_MODE (BIT_BASE + 0x190)
+#define CMD_ENC_PIC_OPTION (BIT_BASE + 0x194)
+#define CMD_ENC_PIC_BB_START (BIT_BASE + 0x198)
+#define CMD_ENC_PIC_BB_SIZE (BIT_BASE + 0x19C)
+#define CMD_ENC_PIC_PARA_BASE_ADDR (BIT_BASE + 0x1A0)
+#define CMD_ENC_PIC_SUB_FRAME_SYNC (BIT_BASE + 0x1A4)
+
+
+
+#define RET_ENC_PIC_FRAME_NUM (BIT_BASE + 0x1C0)
+#define RET_ENC_PIC_TYPE (BIT_BASE + 0x1C4)
+#define RET_ENC_PIC_FRAME_IDX (BIT_BASE + 0x1C8)
+#define RET_ENC_PIC_SLICE_NUM (BIT_BASE + 0x1CC)
+#define RET_ENC_PIC_FLAG (BIT_BASE + 0x1D0)
+#define RET_ENC_PIC_SUCCESS (BIT_BASE + 0x1D8)
+
+//------------------------------------------------------------------------------
+// [ENC ROI INIT] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_ROI_MODE (BIT_BASE + 0x180) // [1]: RoiType, [0]: RoiEn
+#define CMD_ENC_ROI_NUM (BIT_BASE + 0x184) // [3:0] RoiNum
+
+#define CMD_ENC_ROI_POS_0 (BIT_BASE + 0x188) // [31:24]: MbyEnd, [23:16]: MbyStart, [15:8]: MbxEnd, [7:0]: MbxStart
+#define CMD_ENC_ROI_QP_0 (BIT_BASE + 0x18C) // [05:04]: RoiQp
+#define CMD_ENC_ROI_POS_1 (BIT_BASE + 0x190)
+#define CMD_ENC_ROI_QP_1 (BIT_BASE + 0x194)
+#define CMD_ENC_ROI_POS_2 (BIT_BASE + 0x198)
+#define CMD_ENC_ROI_QP_2 (BIT_BASE + 0x19C)
+#define CMD_ENC_ROI_POS_3 (BIT_BASE + 0x1A0)
+#define CMD_ENC_ROI_QP_3 (BIT_BASE + 0x1A4)
+#define CMD_ENC_ROI_POS_4 (BIT_BASE + 0x1A8)
+#define CMD_ENC_ROI_QP_4 (BIT_BASE + 0x1AC)
+#define CMD_ENC_ROI_POS_5 (BIT_BASE + 0x1B0)
+#define CMD_ENC_ROI_QP_5 (BIT_BASE + 0x1B4)
+#define CMD_ENC_ROI_POS_6 (BIT_BASE + 0x1B8)
+#define CMD_ENC_ROI_QP_6 (BIT_BASE + 0x1BC)
+#define CMD_ENC_ROI_POS_7 (BIT_BASE + 0x1C0)
+#define CMD_ENC_ROI_QP_7 (BIT_BASE + 0x1C4)
+#define CMD_ENC_ROI_POS_8 (BIT_BASE + 0x1C8)
+#define CMD_ENC_ROI_QP_8 (BIT_BASE + 0x1CC)
+#define CMD_ENC_ROI_POS_9 (BIT_BASE + 0x1D0)
+#define CMD_ENC_ROI_QP_9 (BIT_BASE + 0x1D4)
+
+#define RET_ENC_ROI_SUCCESS (BIT_BASE + 0x1D8)
+
+
+//------------------------------------------------------------------------------
+// [ENC SET FRAME BUF] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_SET_FRAME_SUBSAMP_A (BIT_BASE + 0x188)
+#define CMD_SET_FRAME_SUBSAMP_B (BIT_BASE + 0x18C)
+
+#define CMD_SET_FRAME_DP_BUF_BASE (BIT_BASE + 0x1B0)
+#define CMD_SET_FRAME_DP_BUF_SIZE (BIT_BASE + 0x1B4)
+
+//------------------------------------------------------------------------------
+// [ENC HEADER] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_HEADER_CODE (BIT_BASE + 0x180)
+#define CMD_ENC_HEADER_BB_START (BIT_BASE + 0x184)
+#define CMD_ENC_HEADER_BB_SIZE (BIT_BASE + 0x188)
+#define CMD_ENC_HEADER_FRAME_CROP_H (BIT_BASE + 0x18C)
+#define CMD_ENC_HEADER_FRAME_CROP_V (BIT_BASE + 0x190)
+
+
+#define RET_ENC_HEADER_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [ENC_PARA_SET] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_ENC_PARA_SET_TYPE (BIT_BASE + 0x180)
+#define RET_ENC_PARA_SET_SIZE (BIT_BASE + 0x1c0)
+#define RET_ENC_PARA_SET_SUCCESS (BIT_BASE + 0x1C4)
+
+//------------------------------------------------------------------------------
+// [ENC PARA CHANGE] COMMAND :
+//------------------------------------------------------------------------------
+#define CMD_ENC_SEQ_PARA_CHANGE_ENABLE (BIT_BASE + 0x180) // FrameRateEn[3], BitRateEn[2], IntraQpEn[1], GopEn[0]
+#define CMD_ENC_SEQ_PARA_RC_GOP (BIT_BASE + 0x184)
+#define CMD_ENC_SEQ_PARA_RC_INTRA_QP (BIT_BASE + 0x188)
+#define CMD_ENC_SEQ_PARA_RC_BITRATE (BIT_BASE + 0x18C)
+#define CMD_ENC_SEQ_PARA_RC_FRAME_RATE (BIT_BASE + 0x190)
+#define CMD_ENC_SEQ_PARA_INTRA_MB_NUM (BIT_BASE + 0x194) // update param
+#define CMD_ENC_SEQ_PARA_SLICE_MODE (BIT_BASE + 0x198) // update param
+#define CMD_ENC_SEQ_PARA_HEC_MODE (BIT_BASE + 0x19C) // update param
+#define CMD_ENC_SEQ_PARA_CABAC_MODE (BIT_BASE + 0x1A0) // entropyCodingMode==2
+#define CMD_ENC_SEQ_PARA_PPS_ID (BIT_BASE + 0x1B4) // entropyCodingMode==2
+
+#define RET_ENC_SEQ_PARA_CHANGE_SECCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [DEC SEQ INIT] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_DEC_SEQ_BB_START (BIT_BASE + 0x180)
+#define CMD_DEC_SEQ_BB_SIZE (BIT_BASE + 0x184)
+#define CMD_DEC_SEQ_OPTION (BIT_BASE + 0x188)
+
+
+#define CMD_DEC_SEQ_MP4_ASP_CLASS (BIT_BASE + 0x19C)
+#define CMD_DEC_SEQ_VC1_STREAM_FMT (BIT_BASE + 0x19C)
+#define CMD_DEC_SEQ_X264_MV_EN (BIT_BASE + 0x19C)
+#define CMD_DEC_SEQ_SPP_CHUNK_SIZE (BIT_BASE + 0x1A0)
+
+// For MPEG2 only
+#define CMD_DEC_SEQ_USER_DATA_OPTION (BIT_BASE + 0x194)
+#define CMD_DEC_SEQ_USER_DATA_BASE_ADDR (BIT_BASE + 0x1AC)
+#define CMD_DEC_SEQ_USER_DATA_BUF_SIZE (BIT_BASE + 0x1B0)
+
+
+#define CMD_DEC_SEQ_INIT_ESCAPE (BIT_BASE + 0x114)
+
+
+#define RET_DEC_SEQ_BIT_RATE (BIT_BASE + 0x1B4)
+#define RET_DEC_SEQ_EXT_INFO (BIT_BASE + 0x1B8)
+#define RET_DEC_SEQ_SUCCESS (BIT_BASE + 0x1C0)
+#define RET_DEC_SEQ_SRC_SIZE (BIT_BASE + 0x1C4)
+#define RET_DEC_SEQ_ASPECT (BIT_BASE + 0x1C8)
+#define RET_DEC_SEQ_FRAME_NEED (BIT_BASE + 0x1CC)
+#define RET_DEC_SEQ_FRAME_DELAY (BIT_BASE + 0x1D0)
+#define RET_DEC_SEQ_INFO (BIT_BASE + 0x1D4)
+#define RET_DEC_SEQ_VP8_SCALE_INFO (BIT_BASE + 0x1D4)
+
+#define RET_DEC_SEQ_CROP_LEFT_RIGHT (BIT_BASE + 0x1D8)
+#define RET_DEC_SEQ_CROP_TOP_BOTTOM (BIT_BASE + 0x1DC)
+#define RET_DEC_SEQ_SEQ_ERR_REASON (BIT_BASE + 0x1E0)
+
+#define RET_DEC_SEQ_FRATE_NR (BIT_BASE + 0x1E4)
+#define RET_DEC_SEQ_FRATE_DR (BIT_BASE + 0x1E8)
+#define RET_DEC_SEQ_HEADER_REPORT (BIT_BASE + 0x1EC)
+#define RET_DEC_SEQ_VUI_INFO (BIT_BASE + 0x18C)
+#define RET_DEC_SEQ_VUI_PIC_STRUCT (BIT_BASE + 0x1A8)
+
+
+
+
+//------------------------------------------------------------------------------
+// [DEC SEQ END] COMMAND
+//------------------------------------------------------------------------------
+#define RET_DEC_SEQ_END_SUCCESS (BIT_BASE + 0x1C0)
+
+
+//------------------------------------------------------------------------------
+// [DEC PIC RUN] COMMAND
+//----------------------------------------------------
+#define CMD_DEC_PIC_ROT_MODE (BIT_BASE + 0x180)
+#define CMD_DEC_PIC_ROT_INDEX (BIT_BASE + 0x184)
+#define CMD_DEC_PIC_ROT_ADDR_Y (BIT_BASE + 0x188)
+#define CMD_DEC_PIC_ROT_ADDR_CB (BIT_BASE + 0x18C)
+#define CMD_DEC_PIC_ROT_ADDR_CR (BIT_BASE + 0x190)
+#define CMD_DEC_PIC_ROT_STRIDE (BIT_BASE + 0x1B8)
+
+
+#define CMD_DEC_PIC_OPTION (BIT_BASE + 0x194)
+
+
+#define CMD_DEC_PIC_USER_DATA_BASE_ADDR (BIT_BASE + 0x1AC)
+#define CMD_DEC_PIC_USER_DATA_BUF_SIZE (BIT_BASE + 0x1B0)
+
+#define CMD_DEC_PIC_NUM_ROWS (BIT_BASE + 0x1B4)
+#define CMD_DEC_PIC_THO_PIC_PARA (BIT_BASE + 0x198)
+#define CMD_DEC_PIC_THO_QMAT_ADDR (BIT_BASE + 0x1A0)
+#define CMD_DEC_PIC_THO_MB_PARA_ADDR (BIT_BASE + 0x1A4)
+#define RET_DEC_PIC_VUI_PIC_STRUCT (BIT_BASE + 0x1A8)
+#define RET_DEC_PIC_AVC_FPA_SEI0 (BIT_BASE + 0x19C)
+#define RET_DEC_PIC_AVC_FPA_SEI1 (BIT_BASE + 0x1A0)
+#define RET_DEC_PIC_AVC_FPA_SEI2 (BIT_BASE + 0x1A4)
+#define RET_DEC_NUM_MB_ROWS (BIT_BASE + 0x1B4) // it will be update
+#define RET_DEC_PIC_HRD_INFO (BIT_BASE + 0x1B8)
+#define RET_DEC_PIC_SIZE (BIT_BASE + 0x1BC)
+#define RET_DEC_PIC_FRAME_NUM (BIT_BASE + 0x1C0)
+#define RET_DEC_PIC_FRAME_IDX (BIT_BASE + 0x1C4)
+#define RET_DEC_PIC_DISPLAY_IDX (BIT_BASE + 0x1C4)
+#define RET_DEC_PIC_ERR_MB (BIT_BASE + 0x1C8)
+#define RET_DEC_PIC_TYPE (BIT_BASE + 0x1CC)
+#define RET_DEC_PIC_POST (BIT_BASE + 0x1D0) // for VC1
+#define RET_DEC_PIC_MVC_REPORT (BIT_BASE + 0x1D0) // for MVC
+#define RET_DEC_PIC_OPTION (BIT_BASE + 0x1D4)
+#define RET_DEC_PIC_SUCCESS (BIT_BASE + 0x1D8)
+#define RET_DEC_PIC_CUR_IDX (BIT_BASE + 0x1DC)
+#define RET_DEC_PIC_DECODED_IDX (BIT_BASE + 0x1DC)
+#define RET_DEC_PIC_CROP_LEFT_RIGHT (BIT_BASE + 0x1E0) // for AVC, MPEG-2
+#define RET_DEC_PIC_CROP_TOP_BOTTOM (BIT_BASE + 0x1E4) // for AVC, MPEG-2
+#define RET_DEC_PIC_MODULO_TIME_BASE (BIT_BASE + 0x1E0) // for MP4
+#define RET_DEC_PIC_VOP_TIME_INCREMENT (BIT_BASE + 0x1E4) // for MP4
+#define RET_DEC_PIC_RV_TR (BIT_BASE + 0x1E8)
+#define RET_DEC_PIC_VP8_PIC_REPORT (BIT_BASE + 0x1E8)
+#define RET_DEC_PIC_ATSC_USER_DATA_INFO (BIT_BASE + 0x1E8) // H.264, MEPEG2
+#define RET_DEC_PIC_VUI_INFO (BIT_BASE + 0x1EC)
+#define RET_DEC_PIC_ASPECT (BIT_BASE + 0x1F0)
+#define RET_DEC_PIC_VP8_SCALE_INFO (BIT_BASE + 0x1F0)
+#define RET_DEC_PIC_FRATE_NR (BIT_BASE + 0x1F4)
+#define RET_DEC_PIC_FRATE_DR (BIT_BASE + 0x1F8)
+#define RET_DEC_PIC_POC_TOP (BIT_BASE + 0x1AC)
+#define RET_DEC_PIC_POC_BOT (BIT_BASE + 0x1B0)
+#define RET_DEC_PIC_POC (BIT_BASE + 0x1B0)
+
+//------------------------------------------------------------------------------
+// [DEC SET FRAME BUF] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_SET_FRAME_BUF_NUM (BIT_BASE + 0x180)
+#define CMD_SET_FRAME_BUF_STRIDE (BIT_BASE + 0x184)
+
+#define CMD_SET_FRAME_SLICE_BB_START (BIT_BASE + 0x188)
+#define CMD_SET_FRAME_SLICE_BB_SIZE (BIT_BASE + 0x18C)
+#define CMD_SET_FRAME_AXI_BIT_ADDR (BIT_BASE + 0x190)
+#define CMD_SET_FRAME_AXI_IPACDC_ADDR (BIT_BASE + 0x194)
+#define CMD_SET_FRAME_AXI_DBKY_ADDR (BIT_BASE + 0x198)
+#define CMD_SET_FRAME_AXI_DBKC_ADDR (BIT_BASE + 0x19C)
+#define CMD_SET_FRAME_AXI_OVL_ADDR (BIT_BASE + 0x1A0)
+#define CMD_SET_FRAME_AXI_BTP_ADDR (BIT_BASE + 0x1A4)
+
+#define CMD_SET_FRAME_CACHE_SIZE (BIT_BASE + 0x1A8)
+#define CMD_SET_FRAME_CACHE_CONFIG (BIT_BASE + 0x1AC)
+#define CMD_SET_FRAME_MB_BUF_BASE (BIT_BASE + 0x1B0)
+#define CMD_SET_FRAME_MAX_DEC_SIZE (BIT_BASE + 0x1B8)
+#define CMD_SET_FRAME_DELAY (BIT_BASE + 0x1BC)
+
+#define RET_SET_FRAME_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [DEC_PARA_SET] COMMAND
+//------------------------------------------------------------------------------
+#define CMD_DEC_PARA_SET_TYPE (BIT_BASE + 0x180)
+#define CMD_DEC_PARA_SET_SIZE (BIT_BASE + 0x184)
+
+#define RET_DEC_PARA_SET_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [DEC_BUF_FLUSH] COMMAND
+//------------------------------------------------------------------------------
+#define RET_DEC_BUF_FLUSH_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [SLEEP/WAKE] COMMAND
+//------------------------------------------------------------------------------
+#define RET_SLEEP_WAKE_SUCCESS (BIT_BASE + 0x1C0)
+
+//------------------------------------------------------------------------------
+// [SET PIC INFO] COMMAND
+//------------------------------------------------------------------------------
+#define GDI_PRI_RD_PRIO_L (GDMA_BASE + 0x000)
+#define GDI_PRI_RD_PRIO_H (GDMA_BASE + 0x004)
+#define GDI_PRI_WR_PRIO_L (GDMA_BASE + 0x008)
+#define GDI_PRI_WR_PRIO_H (GDMA_BASE + 0x00c)
+#define GDI_PRI_RD_LOCK_CNT (GDMA_BASE + 0x010)
+#define GDI_PRI_WR_LOCK_CNT (GDMA_BASE + 0x014)
+#define GDI_SEC_RD_PRIO_L (GDMA_BASE + 0x018)
+#define GDI_SEC_RD_PRIO_H (GDMA_BASE + 0x01c)
+#define GDI_SEC_WR_PRIO_L (GDMA_BASE + 0x020)
+#define GDI_SEC_WR_PRIO_H (GDMA_BASE + 0x024)
+#define GDI_SEC_RD_LOCK_CNT (GDMA_BASE + 0x028)
+#define GDI_SEC_WR_LOCK_CNT (GDMA_BASE + 0x02c)
+#define GDI_SEC_CLIENT_EN (GDMA_BASE + 0x030)
+#define GDI_CONTROL (GDMA_BASE + 0x034)
+#define GDI_PIC_INIT_HOST (GDMA_BASE + 0x038)
+
+#define GDI_HW_VERINFO (GDMA_BASE + 0x050)
+#define GDI_PINFO_REQ (GDMA_BASE + 0x060)
+#define GDI_PINFO_ACK (GDMA_BASE + 0x064)
+#define GDI_PINFO_ADDR (GDMA_BASE + 0x068)
+#define GDI_PINFO_DATA (GDMA_BASE + 0x06c)
+#define GDI_BWB_ENABLE (GDMA_BASE + 0x070)
+#define GDI_BWB_SIZE (GDMA_BASE + 0x074)
+#define GDI_BWB_STD_STRUCT (GDMA_BASE + 0x078)
+#define GDI_BWB_STATUS (GDMA_BASE + 0x07c)
+
+#define GDI_STATUS (GDMA_BASE + 0x080)
+
+#define GDI_DEBUG_0 (GDMA_BASE + 0x084)
+#define GDI_DEBUG_1 (GDMA_BASE + 0x088)
+#define GDI_DEBUG_2 (GDMA_BASE + 0x08c)
+#define GDI_DEBUG_3 (GDMA_BASE + 0x090)
+#define GDI_DEBUG_PROBE_ADDR (GDMA_BASE + 0x094)
+#define GDI_DEBUG_PROBE_DATA (GDMA_BASE + 0x098)
+
+
+
+// write protect
+#define GDI_WPROT_ERR_CLR (GDMA_BASE + 0x0A0)
+#define GDI_WPROT_ERR_RSN (GDMA_BASE + 0x0A4)
+#define GDI_WPROT_ERR_ADR (GDMA_BASE + 0x0A8)
+#define GDI_WPROT_RGN_EN (GDMA_BASE + 0x0AC)
+#define GDI_WPROT_RGN0_STA (GDMA_BASE + 0x0B0)
+#define GDI_WPROT_RGN0_END (GDMA_BASE + 0x0B4)
+#define GDI_WPROT_RGN1_STA (GDMA_BASE + 0x0B8)
+#define GDI_WPROT_RGN1_END (GDMA_BASE + 0x0BC)
+#define GDI_WPROT_RGN2_STA (GDMA_BASE + 0x0C0)
+#define GDI_WPROT_RGN2_END (GDMA_BASE + 0x0C4)
+#define GDI_WPROT_RGN3_STA (GDMA_BASE + 0x0C8)
+#define GDI_WPROT_RGN3_END (GDMA_BASE + 0x0CC)
+#define GDI_WPROT_RGN4_STA (GDMA_BASE + 0x0D0)
+#define GDI_WPROT_RGN4_END (GDMA_BASE + 0x0D4)
+#define GDI_WPROT_RGN5_STA (GDMA_BASE + 0x0D8)
+#define GDI_WPROT_RGN5_END (GDMA_BASE + 0x0DC)
+
+#define GDI_BUS_CTRL (GDMA_BASE + 0x0F0)
+#define GDI_BUS_STATUS (GDMA_BASE + 0x0F4)
+
+
+
+#define GDI_SIZE_ERR_FLAG (GDMA_BASE + 0x0e0)
+#define GDI_ADR_RQ_SIZE_ERR_PRI0 (GDMA_BASE + 0x100)
+#define GDI_ADR_RQ_SIZE_ERR_PRI1 (GDMA_BASE + 0x104)
+#define GDI_ADR_RQ_SIZE_ERR_PRI1 (GDMA_BASE + 0x104)
+#define GDI_ADR_RQ_SIZE_ERR_PRI2 (GDMA_BASE + 0x108)
+#define GDI_ADR_WQ_SIZE_ERR_PRI0 (GDMA_BASE + 0x10c)
+#define GDI_ADR_WQ_SIZE_ERR_PRI1 (GDMA_BASE + 0x110)
+#define GDI_ADR_WQ_SIZE_ERR_PRI2 (GDMA_BASE + 0x114)
+
+#define GDI_ADR_RQ_SIZE_ERR_SEC0 (GDMA_BASE + 0x118)
+#define GDI_ADR_RQ_SIZE_ERR_SEC1 (GDMA_BASE + 0x11c)
+#define GDI_ADR_RQ_SIZE_ERR_SEC2 (GDMA_BASE + 0x120)
+
+#define GDI_ADR_WQ_SIZE_ERR_SEC0 (GDMA_BASE + 0x124)
+#define GDI_ADR_WQ_SIZE_ERR_SEC1 (GDMA_BASE + 0x128)
+#define GDI_ADR_WQ_SIZE_ERR_SEC2 (GDMA_BASE + 0x12c)
+
+#define GDI_INFO_CONTROL (GDMA_BASE + 0x400)
+#define GDI_INFO_PIC_SIZE (GDMA_BASE + 0x404)
+#define GDI_INFO_BASE_Y (GDMA_BASE + 0x408)
+#define GDI_INFO_BASE_CB (GDMA_BASE + 0x40C)
+#define GDI_INFO_BASE_CR (GDMA_BASE + 0x410)
+
+#define GDI_XY2_CAS_0 (GDMA_BASE + 0x800)
+#define GDI_XY2_CAS_F (GDMA_BASE + 0x83C)
+
+#define GDI_XY2_BA_0 (GDMA_BASE + 0x840)
+#define GDI_XY2_BA_1 (GDMA_BASE + 0x844)
+#define GDI_XY2_BA_2 (GDMA_BASE + 0x848)
+#define GDI_XY2_BA_3 (GDMA_BASE + 0x84C)
+
+#define GDI_XY2_RAS_0 (GDMA_BASE + 0x850)
+#define GDI_XY2_RAS_F (GDMA_BASE + 0x88C)
+
+#define GDI_XY2_RBC_CONFIG (GDMA_BASE + 0x890)
+#define GDI_RBC2_AXI_0 (GDMA_BASE + 0x8A0)
+#define GDI_RBC2_AXI_1F (GDMA_BASE + 0x91C)
+#define GDI_TILEDBUF_BASE (GDMA_BASE + 0x920)
+
+//------------------------------------------------------------------------------
+// Product, Reconfiguration Information
+//------------------------------------------------------------------------------
+#define DBG_CONFIG_REPORT_0 (GDMA_BASE + 0x040) //product name and version
+#define DBG_CONFIG_REPORT_1 (GDMA_BASE + 0x044) //interface configuration, hardware definition
+#define DBG_CONFIG_REPORT_2 (GDMA_BASE + 0x048) //standard definition
+#define DBG_CONFIG_REPORT_3 (GDMA_BASE + 0x04C) //standard detail definition
+#define DBG_CONFIG_REPORT_4 (GDMA_BASE + 0x050) //definition in cnm_define
+#define DBG_CONFIG_REPORT_5 (GDMA_BASE + 0x054)
+#define DBG_CONFIG_REPORT_6 (GDMA_BASE + 0x058)
+#define DBG_CONFIG_REPORT_7 (GDMA_BASE + 0x05C)
+
+//------------------------------------------------------------------------------
+// MEMORY COPY MODULE REGISTER
+//------------------------------------------------------------------------------
+#define ADDR_DMAC_PIC_RUN (DMAC_BASE+0x000)
+#define ADDR_DMAC_PIC_STATUS (DMAC_BASE+0x004)
+#define ADDR_DMAC_PIC_OP_MODE (DMAC_BASE+0x008)
+#define ADDR_DMAC_ID (DMAC_BASE+0x00c) //the result muse be 0x4d435059
+
+#define ADDR_DMAC_SRC_BASE_Y (DMAC_BASE+0x010)
+#define ADDR_DMAC_SRC_BASE_CB (DMAC_BASE+0x014)
+#define ADDR_DMAC_SRC_BASE_CR (DMAC_BASE+0x018)
+#define ADDR_DMAC_SRC_STRIDE (DMAC_BASE+0x01c)
+
+#define ADDR_DMAC_DST_BASE_Y (DMAC_BASE+0x020)
+#define ADDR_DMAC_DST_BASE_CB (DMAC_BASE+0x024)
+#define ADDR_DMAC_DST_BASE_CR (DMAC_BASE+0x028)
+#define ADDR_DMAC_DST_STRIDE (DMAC_BASE+0x02c)
+
+#define ADDR_DMAC_SRC_MB_POS_X (DMAC_BASE+0x030)
+#define ADDR_DMAC_SRC_MB_POS_Y (DMAC_BASE+0x034)
+#define ADDR_DMAC_SRC_MB_BLK_X (DMAC_BASE+0x038)
+#define ADDR_DMAC_SRC_MB_BLK_Y (DMAC_BASE+0x03c)
+
+#define ADDR_DMAC_DST_MB_POS_X (DMAC_BASE+0x040)
+#define ADDR_DMAC_DST_MB_POS_Y (DMAC_BASE+0x044)
+#define ADDR_DMAC_DST_MB_BLK_X (DMAC_BASE+0x048)
+#define ADDR_DMAC_DST_MB_BLK_Y (DMAC_BASE+0x04c)
+
+#define ADDR_DMAC_SET_COLOR_Y (DMAC_BASE+0x050)
+#define ADDR_DMAC_SET_COLOR_CB (DMAC_BASE+0x054)
+#define ADDR_DMAC_SET_COLOR_CR (DMAC_BASE+0x058)
+
+#define ADDR_DMAC_SUB_SAMPLE_X (DMAC_BASE+0x060)
+#define ADDR_DMAC_SUB_SAMPLE_Y (DMAC_BASE+0x064)
+
+
+
+//------------------------------------------------------------------------------
+// DMAC
+//------------------------------------------------------------------------------
+#define DMAC_DMAC_RUN (DMAC_BASE + 0x00)
+#define DMAC_SOFT_RESET (DMAC_BASE + 0x04)
+#define DMAC_DMAC_MODE (DMAC_BASE + 0x08)
+#define DMAC_DESC_ADDR (DMAC_BASE + 0x0c)
+#define DMAC_DESC0 (DMAC_BASE + 0x10)
+#define DMAC_DESC1 (DMAC_BASE + 0x14)
+#define DMAC_DESC2 (DMAC_BASE + 0x18)
+#define DMAC_DESC3 (DMAC_BASE + 0x1c)
+#define DMAC_DESC4 (DMAC_BASE + 0x20)
+#define DMAC_DESC5 (DMAC_BASE + 0x24)
+#define DMAC_DESC6 (DMAC_BASE + 0x28)
+#define DMAC_DESC7 (DMAC_BASE + 0x2c)
+
+
+//------------------------------------------------------------------------------
+// [FIRMWARE VERSION] COMMAND
+// [32:16] project number =>
+// [16:0] version => xxxx.xxxx.xxxxxxxx
+//------------------------------------------------------------------------------
+#define RET_FW_VER_NUM (BIT_BASE + 0x1c0)
+#define RET_FW_CODE_REV (BIT_BASE + 0x1c4)
+
+
+#endif //__CODA960_REGS_H__
+
diff --git a/board/rda/common/include/coda960_test_video.txt b/board/rda/common/include/coda960_test_video.txt
new file mode 100644
index 0000000000..e3c8c4d469
--- /dev/null
+++ b/board/rda/common/include/coda960_test_video.txt
@@ -0,0 +1,7015 @@
+0x01000000, 0x1E404D67, 0x1E5A80EC, 0x008008D8, 0x80000300, 0x47190000, 0x00CB168B, 0x68010000,
+0x00C8B2EF, 0x05060100, 0xDCE8FFFF, 0xE6BDE945, 0x96B748D9, 0xD920D82C, 0x78EFEE23, 0x20343632,
+0x6F63202D, 0x31206572, 0x72203932, 0x30333232, 0x66633120, 0x66396566, 0x48202D20, 0x3436322E,
+0x45504D2F, 0x20342D47, 0x20435641, 0x65646F63, 0x202D2063, 0x79706F43, 0x7466656C, 0x30303220,
+0x30322D33, 0x2D203231, 0x74746820, 0x2F2F3A70, 0x2E777777, 0x65646976, 0x6E616C6F, 0x67726F2E,
+0x3632782F, 0x74682E34, 0x2D206C6D, 0x74706F20, 0x736E6F69, 0x6163203A, 0x3D636162, 0x65722031,
+0x20313D66, 0x6C626564, 0x3D6B636F, 0x3A303A31, 0x6E612030, 0x73796C61, 0x78303D65, 0x78303A31,
+0x20313131, 0x683D656D, 0x73207865, 0x656D6275, 0x7020373D, 0x313D7973, 0x79737020, 0x3D64725F,
+0x30302E31, 0x302E303A, 0x696D2030, 0x5F646578, 0x3D666572, 0x656D2030, 0x6E61725F, 0x313D6567,
+0x68632036, 0x616D6F72, 0x3D656D5F, 0x72742031, 0x696C6C65, 0x20313D73, 0x64387838, 0x303D7463,
+0x6D716320, 0x6420303D, 0x7A646165, 0x3D656E6F, 0x312C3132, 0x61662031, 0x705F7473, 0x70696B73,
+0x6320313D, 0x6D6F7268, 0x70715F61, 0x66666F5F, 0x3D746573, 0x7420322D, 0x61657268, 0x313D7364,
+0x6F6F6C20, 0x6568616B, 0x745F6461, 0x61657268, 0x313D7364, 0x696C7320, 0x5F646563, 0x65726874,
+0x3D736461, 0x726E2030, 0x6420303D, 0x6D696365, 0x3D657461, 0x6E692031, 0x6C726574, 0x64656361,
+0x6220303D, 0x6172756C, 0x6F635F79, 0x7461706D, 0x6320303D, 0x74736E6F, 0x6E696172, 0x695F6465,
+0x6172746E, 0x6220303D, 0x6D617266, 0x323D7365, 0x705F6220, 0x6D617279, 0x313D6469, 0x615F6220,
+0x74706164, 0x6220313D, 0x6169625F, 0x20303D73, 0x65726964, 0x313D7463, 0x69657720, 0x62746867,
+0x6F20313D, 0x5F6E6570, 0x3D706F67, 0x65772030, 0x74686769, 0x20323D70, 0x6979656B, 0x323D746E,
+0x656B2035, 0x746E6979, 0x6E696D5F, 0x2030313D, 0x6E656373, 0x74756365, 0x2030343D, 0x72746E69,
+0x65725F61, 0x73657266, 0x20303D68, 0x6C5F6372, 0x616B6F6F, 0x64616568, 0x2035323D, 0x633D6372,
+0x6D207262, 0x65727462, 0x20313D65, 0x72746962, 0x3D657461, 0x30303032, 0x74617220, 0x6C6F7465,
+0x302E313D, 0x6F637120, 0x303D706D, 0x2030362E, 0x696D7071, 0x20303D6E, 0x616D7071, 0x39363D78,
+0x73707120, 0x3D706574, 0x62762034, 0x616D5F76, 0x74617278, 0x30323D65, 0x76203030, 0x625F7662,
+0x69736675, 0x313D657A, 0x20303030, 0x5F6C616E, 0x3D647268, 0x656E6F6E, 0x5F706920, 0x69746172,
+0x2E313D6F, 0x61203034, 0x3A313D71, 0x30302E31, 0x00008000, 0x84886501, 0x72FF2100, 0xDE93AF14,
+0x4708431B, 0x421F7010, 0x387A62D0, 0xCEDCA0E9, 0xC2AC549F, 0x0B95542A, 0xF8097915, 0x534E817D,
+0x08DDC69B, 0xFAD98D24, 0xDF539BFE, 0xDB4CD42F, 0x1605F13C, 0xC864D931, 0x1CE690E6, 0x6820FA6F,
+0xD3225B5A, 0x175C0BD3, 0xD211C734, 0x4152C276, 0xE44BFC74, 0x31DF457D, 0x35660825, 0x2259F533,
+0x61275E4A, 0xA87763B2, 0x8D447AF6, 0x5AC57358, 0xC4ACACFE, 0x3D32892D, 0xF1756CF5, 0x9E413164,
+0x200FC974, 0xBBC24807, 0xC4BA5CC5, 0xC5329A4E, 0x93C055B0, 0xD50AA203, 0xF0FCFD20, 0x437E08E9,
+0xFB200B8D, 0x14D394E7, 0x7FC46FD0, 0xAD1863AF, 0xDE02D2F3, 0x80016B76, 0x8F0382EE, 0x8CFB1F89,
+0xA643FAA3, 0x03346E90, 0x0D86E587, 0xFF20098E, 0x1B99AC53, 0x22B926A9, 0x267D4213, 0x27CF1555,
+0xDF60C844, 0x7EBC51BB, 0x1D67435F, 0x0A0B9ADD, 0xB523F3DF, 0x7ECB02F6, 0xBF75F1AD, 0x1B627B9D,
+0x62511DD8, 0x07919B39, 0x838E5889, 0xF02BD0F9, 0x3F68E2A6, 0x670A2AD1, 0x7C0B5B3A, 0x4329E82B,
+0x982E5AD5, 0x2F2384DA, 0x93BBE985, 0x903E00B8, 0xF5AC3E44, 0xEB9CAFF9, 0x35E0788A, 0x69E95BF8,
+0x720137E4, 0x7CC1C92E, 0x81A605E1, 0x742EAC8E, 0x9CF6747B, 0xE95A7ECF, 0x89595B54, 0xBC2B3DED,
+0xB891BBB2, 0xE44CDA67, 0x849E244E, 0x56FC9C0A, 0x8B488788, 0x6F6E0973, 0xC3444583, 0x9B612298,
+0x8C9F14CA, 0x4A3EDA93, 0x867289F6, 0x1EEFB81E, 0xC36846D9, 0x188E9074, 0x47437D40, 0x66776DDA,
+0x67C04DD3, 0xE2910C65, 0x5096CAE9, 0x6EA1C2EA, 0x17BDD43D, 0xEE93A86D, 0x34DD15EC, 0x4F2B591C,
+0xF79432B3, 0x65113CB2, 0x0F2935A1, 0xC3391A73, 0x2344523A, 0x6C4667BD, 0xDFE61D0A, 0x478EF4BA,
+0x50145FC9, 0x70BF3FE7, 0x902362DB, 0xB888707F, 0x067D3F5F, 0xE4947153, 0xFD2AF8B0, 0x1ED31942,
+0x934BBF78, 0xBA3702E4, 0x76BE526B, 0xE6576BF1, 0x2A8C9F84, 0x6F6E03BF, 0x3F8DC3BC, 0x719C842D,
+0xD1495E92, 0x1605A50E, 0xC9895528, 0x69595B63, 0xF225E6B7, 0x67E6F31F, 0x4E224202, 0x9744F345,
+0xD64329A1, 0x1C2E956F, 0xE55370FB, 0xA5A36E91, 0x992D5AF9, 0x793F9429, 0x5483F4E0, 0x75C8E778,
+0xDBCFA2C3, 0xF3CB3AD3, 0x33DD0290, 0xAF5C5D56, 0x73C3A64E, 0xF1A03C2A, 0xFE4EC93D, 0x2F8062A1,
+0x185E0E90, 0x3F598540, 0x1ED012DE, 0xB1D6A2C4, 0x46A68097, 0x0F2AFD0C, 0xF1FEA809, 0x07AE97CE,
+0xE570B0F0, 0x54FCA6BE, 0xBA1A08F6, 0x8B0FE28A, 0x63E3221A, 0x04F3A4A9, 0xC95F562B, 0x7056537B,
+0x632AF291, 0xD3A55E38, 0x97BD6F08, 0x6AC40E66, 0x6525562A, 0x2F751481, 0x0D4A6BD2, 0x160CD960,
+0x90C045F0, 0x85B23650, 0xC89AE055, 0x2DB2F098, 0xC3335AFE, 0x2D9FD68F, 0x95AE67AB, 0xA466872B,
+0x5C383621, 0x1AA5B0A6, 0xFFA83F45, 0x69E10FBA, 0xD4F48895, 0xD3EEB2FF, 0xFEAE3BE8, 0x2F62AEE5,
+0x1BF3C05B, 0xE66BE019, 0x463F049C, 0x7073D668, 0xD17DA291, 0xB1FF267F, 0xCA905CBC, 0xB4488289,
+0x8D850F96, 0xCD4935B8, 0x7A57A570, 0x8CD27C2B, 0x74F8B552, 0x6F76DFC0, 0x3FA50302, 0x00CCCF49,
+0xDB017DAE, 0x2B718257, 0xE443E347, 0x0B51B0E2, 0xF7D03B2E, 0x354196DA, 0xFC1FA725, 0xFE047C25,
+0xB3058BD6, 0xBF8DCB86, 0x89B77C44, 0xFF041AAC, 0xD3A00FF0, 0x35F86CD8, 0xD25D9472, 0xF4375A55,
+0x94B88C08, 0xCCA8E9C6, 0x5A2E7CFF, 0x15378BFD, 0x196ED026, 0x713EE774, 0x34246839, 0x686B0CBE,
+0x817793AA, 0xB0CCFA95, 0x0C528327, 0x1E1DCF30, 0x073265FB, 0x2B5777C7, 0x5215EA68, 0x1204404C,
+0x92B40E34, 0x39FB8950, 0x9211A7C9, 0xB7390D0E, 0xA217CF6C, 0xE3978FB0, 0x037FAC4B, 0x8C4D460E,
+0xE7D012F6, 0x4DCBCD03, 0x9B780DBF, 0x7D4A71AB, 0x981DC7E5, 0x87916FD8, 0xE33D98DA, 0xC9561280,
+0x351A4BC3, 0x470D2293, 0x9A3E5EBB, 0x9C01AEBF, 0x8F1CCE93, 0x34903D2F, 0xB90E045A, 0xBAF0144F,
+0x268FE655, 0xF0E17DD4, 0x42112AC3, 0x4A4645E2, 0xDEA58074, 0xD4BE4A5F, 0x60C048C4, 0x498F1DDD,
+0xB851991F, 0x0FBADB44, 0xE95B7E81, 0xFB9AC14E, 0x3E0E53BA, 0x6F4E477F, 0xAD045EB9, 0xEC724696,
+0xD7A81D0D, 0x37BBA2BC, 0xC6BDC7D4, 0xFD971B5F, 0x065F3CAC, 0x90C1D746, 0xB3B6FFC1, 0xAE48B3FC,
+0x2FFC1D2B, 0x5FB1B2C9, 0x255223E1, 0x4F99E3D7, 0xB354780E, 0xD7AB827B, 0x57488283, 0xE82B9204,
+0x399E660E, 0x62F4E72E, 0xAB4F51EC, 0x71B02E1A, 0x09E6674B, 0x06333DEF, 0x9656A373, 0x51DD36B0,
+0x109D8CA9, 0xDD6B006F, 0x30E12DDE, 0x1B0B8C14, 0x167730D5, 0x9695DA3B, 0xC38F05F3, 0x4D84B6FB,
+0xD6F36B4F, 0x93880F70, 0x9342255E, 0x73444A93, 0xFE32FE27, 0x5C75A94E, 0xC533DDD6, 0x42BF6136,
+0x12888557, 0x6DC8F885, 0x0A3FF664, 0x6F6D1DFE, 0xFBC57C77, 0x01466525, 0xF9D5BF0E, 0x53307B11,
+0x5F7E23D0, 0x9339A2FF, 0xBF9612F0, 0xCEF2C333, 0x54B553E5, 0x10AA1337, 0x54817C46, 0x4DC489AC,
+0x81F7B759, 0xD947B524, 0x47C6E088, 0xBE068BF2, 0x56C38D5C, 0xB20D2F52, 0xDB7D87B8, 0x89E3D6D8,
+0x594FE85F, 0x591A3137, 0x180DF6F5, 0xEA333578, 0xB2455BD6, 0x5ABE0A0D, 0xE0A04EB0, 0xC5910641,
+0xAF5EC9FB, 0x30C67C0F, 0x7C76A90C, 0xEC82BCAF, 0xFE519C37, 0x0DA874EA, 0x7ED3D42A, 0x227B2D9F,
+0xF42922E6, 0x4317CA54, 0xDB3B8849, 0xD09E5398, 0xABA031DD, 0xB513DEF7, 0x05B3AE8F, 0x41C72EB3,
+0x69F6B33C, 0x0E180097, 0x5A2E1E20, 0x2CDD48C8, 0xDF51A07D, 0x95BC66FB, 0x84243C9C, 0x6674C92E,
+0x950EF0A6, 0x01F3D23B, 0xBB0FEFB9, 0x8A37C55D, 0x7CA9AFFB, 0x2CC277C6, 0xB2EC4967, 0xD8BB90F4,
+0xCAC82F3B, 0x1B4A3024, 0x9BD29317, 0x5715AE1F, 0x7ECFF451, 0xD2F51B4E, 0xF9C3BBB5, 0xE46094E5,
+0xE53DF3DF, 0x8F7A7CFA, 0x00EC3EEE, 0xEF9E8B38, 0x4AC875EA, 0x361F0C54, 0x6518D2D4, 0x138BBF27,
+0x6C80523B, 0x8BA7F770, 0xAA272106, 0x5DC3A2C6, 0xAE75F878, 0xC2FD0F62, 0x803BE4C4, 0xD31E3909,
+0x7F6523BF, 0x00BC59A1, 0x9FF549D8, 0x09B10883, 0xE3CF67C6, 0xD6F1D403, 0xBC2D0BFC, 0xC1E08997,
+0x5116D291, 0x8622374A, 0x5CD7DD4E, 0xC32D61EA, 0xF39A9222, 0x79667E34, 0xEF8CA52A, 0x5BD3F0E4,
+0xA58714AA, 0x9C773588, 0xF29BCF79, 0xD355EB53, 0xBA3F4107, 0xF574B62D, 0xAB57ECB6, 0xA2A151FA,
+0x989A9002, 0x55AC1623, 0x55AB43FA, 0x47518DEB, 0x637FC271, 0x103483B0, 0xB196A2A3, 0x932AE6CF,
+0xA1ED8FE9, 0xFD10FE48, 0x3EA2CB42, 0x1A936CBD, 0x743F6729, 0x7A476D09, 0x7C811DB2, 0xF30B0BF0,
+0x6D2729DA, 0x5570B850, 0xA0AF8164, 0x1B5CC6F7, 0x92A17AED, 0x31F4C6BD, 0x7D7879F9, 0xE8E40CEF,
+0x8D126550, 0xB9120C1B, 0xFB9BB4B1, 0xAFC1782A, 0xEF17A45F, 0x68FD293B, 0xA1396CD2, 0xB3F9176C,
+0x6819CB45, 0x1925A405, 0x0ED311F0, 0xA0110B36, 0x2A9C1853, 0xED98307C, 0xAAE6DA8C, 0xD40CA507,
+0x9EF09279, 0x77F729D8, 0x44B0304E, 0xEB591385, 0x9A4C94B8, 0x7B77FC08, 0x23D6AB31, 0x0EE210F5,
+0x8CA1D8B6, 0xF5F7D4F9, 0x5C9636DA, 0x5A5030DD, 0xE8056C5C, 0x839DD022, 0xA554A1B5, 0x996BAAA0,
+0x8E53648B, 0x6E42F2ED, 0xBE56AF97, 0x2F1D76CA, 0xA4CC8E5F, 0x17852622, 0x17729751, 0xFC1EFDC3,
+0x9224CE10, 0x5B278D3C, 0xD5A8D922, 0x7D493182, 0x4F3A825F, 0x78BB2D4F, 0x69D32F5B, 0x1E6DD7BA,
+0xBBB66CFF, 0x1D430377, 0x104AA7BC, 0x16BA51D7, 0x606ED0DB, 0x9038A293, 0x4CAA09D3, 0x722428B3,
+0xC35B3A8F, 0x0D913599, 0x8D74DB49, 0x8C36D8C1, 0x6BBE3DD4, 0x5133BC29, 0xCC2AF33B, 0xDB46F3DA,
+0xFDA2C2BE, 0x894CCFD7, 0xE6D394F7, 0xFF0A74F3, 0x926AE6BB, 0xB8B1E466, 0x7ECD4577, 0x9E0769BB,
+0xA58779A6, 0x9C8F245C, 0x4A582DD1, 0x02820781, 0x837ADF68, 0x67E0B52D, 0xF57D20AE, 0x7DD0A975,
+0x0FC42E29, 0x35CB01BD, 0x45EB570A, 0xE96CCAF6, 0xAF221D4A, 0xAC588554, 0x6C95A7C7, 0xF882C505,
+0xB1C4EFBD, 0x998B8418, 0x6AE09265, 0x9E3CCD4B, 0x28D67CAC, 0x7BA161E2, 0x9B05E3B6, 0x45D9CC6D,
+0xF0CEF526, 0x7D8E46E9, 0xA3E44AF4, 0x539087EC, 0x03BC1C0C, 0x3F432D2B, 0x67169B51, 0xC9D4F513,
+0xD7997475, 0xBD206464, 0xA6DFD5CC, 0xF5232AE3, 0xCC94ED0B, 0x5178F20C, 0xA643D023, 0xF98D9E32,
+0x8AB8A44F, 0xC80C5812, 0x87D3AC0D, 0xFA75C116, 0xC2658569, 0xFD333825, 0xC8CF8A06, 0x0A76D00C,
+0x75C56CE9, 0xD63B43FC, 0xACE79BA6, 0x580D87A9, 0xC4A80045, 0x270E65B1, 0x776E1CFE, 0x5006FE09,
+0xA1212606, 0x98DC3A41, 0xBB58EC5B, 0x259BEB37, 0x7C0D79FB, 0x51E2088B, 0x3C6CD46B, 0xFBFD1D80,
+0x5E43875D, 0xEF96EF45, 0x0232EB16, 0x7F217897, 0x886A234C, 0x8A06BDFC, 0x7E7BF8B3, 0xB5844172,
+0xCF2D9DDD, 0xD4D68952, 0x5990DA0C, 0x37369C46, 0xD91F404E, 0x0260810C, 0x4D07AC57, 0x90F44400,
+0x8074A367, 0x0A147835, 0xE9886D89, 0xE6513C96, 0x5BDA27BE, 0x4EFAE360, 0x11D75E34, 0x024E0BE1,
+0x4D28B380, 0x1E43888A, 0x94DF401F, 0x21E393CA, 0xF7DC4D4B, 0xE0E3EFDC, 0x73014F39, 0x7153924B,
+0x011AF76A, 0x1F6F7360, 0xD0D1E59E, 0xF769FE51, 0x4C815350, 0xFAD97C0F, 0x2CAEDAE6, 0x5252C982,
+0xC8F74F83, 0x6277D58D, 0x69A8CE16, 0x18FBBE35, 0xBEDE1C32, 0xA16BC919, 0xB74B6C98, 0x9E81C970,
+0x2C82EE6D, 0x17136D8A, 0x8C4D71F9, 0xA8C14F3A, 0xC7046C3E, 0x24435A82, 0x2B6B7C81, 0xB99BE288,
+0x9F19FFB8, 0xA7AA987F, 0x34ED9F89, 0x615D34F1, 0xE82CD333, 0x8302B8EB, 0xB3DC51DD, 0xB2D948D2,
+0x3E0C3902, 0x68CD330E, 0x4875599E, 0x7A1A5420, 0xD346FCF2, 0x7E92F75A, 0x080EC910, 0xF60FE2DE,
+0x8A1A07E2, 0x096C7B8D, 0x303FF754, 0x5B30FE56, 0xE2691DA3, 0x185B5938, 0x0CBEC2E7, 0x28CF1E64,
+0x8B870757, 0xE81CD176, 0xAD3700D8, 0x8E0D1C6D, 0xEAECA356, 0xCD46D7F6, 0x40566FAD, 0xCF6CF450,
+0x1A8FC537, 0xE6692C59, 0x905065D6, 0x01285E33, 0xBD826E98, 0xB9A2F83D, 0x4DEDC226, 0x0317FE04,
+0x6180E9D8, 0x3AF29900, 0x3BCBFBBD, 0x56B455E3, 0x4EA2826C, 0xA97541DB, 0x425E9E59, 0xFEB11B2C,
+0xD977F198, 0xA3CA9B46, 0x51BFC0EA, 0xA94166BF, 0x181A2BAD, 0xBC650EE9, 0x71CAAA9F, 0x0FA796D5,
+0x6C65CE94, 0x67E82CB7, 0x34E70747, 0x589FDAEF, 0xE598096B, 0x9FF93F08, 0x6EA44817, 0xA39A48B6,
+0x06D1EC98, 0x6EDE7FF2, 0x083B1DB2, 0x596AD87D, 0xADDDAE06, 0xF484E2EC, 0x1ED0B7E2, 0x55AC618A,
+0x64DF57C2, 0x5CD44D42, 0xC2F8877B, 0x55211AAE, 0xACF03736, 0x541CEE33, 0x437F5F7C, 0xD605DF0B,
+0xB2B582FB, 0xDBDF9AE8, 0x66C6CDD1, 0x5B900DB3, 0x2B4C094B, 0xF1114123, 0x07B7C2E2, 0x89A98917,
+0xB45B06DA, 0xE6ED51A7, 0xDA25BDAF, 0x21962E0F, 0x746CD726, 0xE2C7F3F4, 0xB6FB2765, 0xBDE3BAF9,
+0x829E5DB7, 0xD87633A4, 0xB73BBD89, 0x89D84596, 0xF52EEFE2, 0xA26CA355, 0xB4343357, 0xD46C29C4,
+0xDF21E074, 0xF1828FEC, 0x7663BA35, 0xF469E962, 0xE96CF7C8, 0x920C91A9, 0x2A034376, 0x3820FE79,
+0x5EFA58F8, 0x056A016A, 0x04C87C4C, 0xBD344AC5, 0x81802869, 0x65D42CFA, 0x90A1DABE, 0x57F0796A,
+0x3D6FE3FE, 0x65CB77F4, 0x9C99FB6F, 0xD9CD1096, 0xBE8921A6, 0x68B4C897, 0x00C14C8E, 0x9376DE51,
+0xEC04D06B, 0x856AA61C, 0x33349F0A, 0x786F0319, 0xF7FA6E18, 0xC3121C33, 0x24264229, 0x21DF27DE,
+0x6140BD43, 0x4CC3BCFC, 0xFC33A315, 0x940D91D8, 0xB5FCAF5C, 0xC76D88EC, 0x87CC84AD, 0x6CA28F37,
+0xC08F56FE, 0x9AC3B250, 0x1DA147AC, 0x2A5D90DD, 0xABDCBDE4, 0xCD810AAF, 0x846F6A71, 0xA5847AD3,
+0xC255E44B, 0xD24DCE37, 0x01FA3971, 0x1866D7C7, 0xF4E99F16, 0xDE3BF331, 0xFCC606C0, 0xA717A8EA,
+0xAAA9F4C8, 0xA4D3FBE6, 0x3B77B4C5, 0x1A0AB458, 0x4F449DD8, 0xC3D63073, 0x6B9A14B7, 0x40478D21,
+0x6DFD1177, 0x466C7AEA, 0x5975BF56, 0x745FA6A0, 0xFF8EAC46, 0x6B17FF5D, 0x8BEBD1CB, 0x57CB0A42,
+0x72499E8F, 0x96BA6C0B, 0x32154D1C, 0x31C9875C, 0x0B8CD579, 0xCA85C629, 0x4011AC3E, 0x38FB154F,
+0x8860C285, 0x4A4F430B, 0x55226A42, 0xE2AA877E, 0x81A92D6E, 0xF8E20ABB, 0x064F88DF, 0x3DF13035,
+0x28DBF3A1, 0x914DEE04, 0x126C9CD1, 0xBA4F58AD, 0x7B86A246, 0xAFD6FF5D, 0x46C54153, 0xA19CB58E,
+0x1270C5FA, 0xE471C07C, 0xE7F5BC36, 0xC3CB5FAC, 0xEC83CCBD, 0x845CE827, 0x5D478A52, 0x6292F5C5,
+0x3C2676B4, 0x8E671119, 0x7A3A4368, 0x7CB3803A, 0xBC6CA63E, 0xFFFB63B6, 0x1B7E57F5, 0x323E17BF,
+0x181E5B3C, 0x53FDCAB1, 0x172B915D, 0xEB3C1ED5, 0xF11318E8, 0xD991213C, 0x08292EC7, 0x18C337B2,
+0xE6CE91FF, 0x5FD36781, 0x122F7AFF, 0x2B527598, 0xCAF7942C, 0xBB3BF7AD, 0x32F8174E, 0x76F63988,
+0xAFAE9AD6, 0xE9D53FAD, 0x09F28117, 0x6AF45A55, 0xE235F905, 0x10368D62, 0x1ACFFB69, 0xF28BBE1A,
+0xEE6C059B, 0x304DFE85, 0x938C698D, 0x081B03BB, 0x0C4BD848, 0x6230AAF8, 0xF5C53299, 0xF6222F78,
+0x8F2C3246, 0x0FE28CB6, 0x809B8DD2, 0xE76AC049, 0xDB3C9FA1, 0x6A69B3FA, 0x5BA71E29, 0x38E5A0B5,
+0xC003CE07, 0xDC7E503E, 0xEA79668D, 0x5EAA6602, 0xEAEFF8C0, 0x2F40CF5E, 0x17BEA2D7, 0x3E2A998E,
+0x79FBA939, 0xBBE527A9, 0x64B1EBC4, 0x9CDFA29A, 0x6F2B85EA, 0x768232E9, 0xC321B91C, 0x57A89961,
+0x6CAB27DF, 0xC56FE852, 0xC957EACD, 0x084B0A08, 0x18897179, 0x12A90DCF, 0xDABEB450, 0xC211BA5C,
+0x79C33E18, 0x9121A4B0, 0x97F0D00E, 0x9C550CF3, 0x76C2CC9C, 0x1785288C, 0x9B27634E, 0x981A96F8,
+0xE7D48F17, 0x54B50329, 0xD773B7C0, 0xBB2FFAB9, 0x831982FD, 0x618C1993, 0x98456440, 0xA26BF8E7,
+0x7EF1D8BF, 0xB25B11EF, 0xA51CE1BD, 0xCD03EC3B, 0xF3F4186B, 0x75FC5BEE, 0xA6C8A1D6, 0xE4EB4066,
+0x9C839EA9, 0x96EE419A, 0xAD971D8A, 0x4C9679A3, 0x9ABF1A77, 0x3EF4C6E2, 0x64E8CB67, 0xA23AD65D,
+0xDF5F21F1, 0x514A6131, 0x134AC0D8, 0xA906DF3A, 0xE450591E, 0xAF022BA5, 0x04F2E58F, 0x1F9A6294,
+0x767E856E, 0x9FB815EB, 0x63111E45, 0x27A2DA38, 0xEF0F538D, 0xA083CEF2, 0xEE8BEE9D, 0xD1BC0169,
+0x0FCB6913, 0x1B116893, 0x3DC9EE97, 0x0F89B7FC, 0xC8380184, 0x367A1084, 0x49CEEDDF, 0x9D73A5E5,
+0xCA5C66A2, 0x9ECCD96B, 0x56E48AD3, 0x84C029BD, 0x0083910F, 0x322504D4, 0x1FB32F4E, 0xF2923413,
+0xB7B8A583, 0x4F54C30F, 0xD3763E55, 0x14EC6C83, 0x307542BC, 0x67D378C2, 0xBBC2DA94, 0xB0591CEC,
+0xD9BB9EF8, 0x126A45BF, 0x77C999D1, 0xE72767BF, 0xDBE7F190, 0xD455D78E, 0x6D8292CE, 0x35D88BE2,
+0xBFD85EA6, 0xC288886B, 0xEF12B917, 0xBAF84A75, 0x63FBE7A3, 0x4455F6CB, 0x1B8AA4B0, 0x8069769B,
+0xAF4C02D2, 0xB970FD09, 0xD127FA9B, 0xE7D3C5B0, 0x302DA754, 0x31B2B3F4, 0x6DDF132A, 0x11DA006F,
+0x0ED1E653, 0x2759527A, 0x684A97F8, 0xFDD2FD70, 0x662F2592, 0xE87D697E, 0x652BCBFB, 0x09F29680,
+0x3471270F, 0x1B0A2408, 0xA3D84262, 0x9FF300A5, 0x28E423E9, 0xC2C1BD0E, 0x31AA56F0, 0x5F741829,
+0xDF23B4C6, 0xEFE8905E, 0x7A207DA1, 0xB05015F6, 0x58C61527, 0xADD70FA2, 0xAD70B711, 0xDE06DEAB,
+0xE0A34206, 0x6C990AB4, 0x3D873687, 0x307095CC, 0xE3BF3408, 0x2D70BA8B, 0x2D89935A, 0x3730A653,
+0x56D65BB0, 0x2B7DD72C, 0x7420A16B, 0xD4593584, 0xA380FA21, 0x85704854, 0x91723289, 0x2BF4854C,
+0x69FF1933, 0xD6B23BDA, 0x1EE89ED7, 0x94F9ABD4, 0xB8D00E99, 0x5842AEAE, 0x7DCF8D88, 0x6CBD3881,
+0x649D623F, 0x117B6490, 0xDB23DA63, 0xA23C5909, 0xC0C0C683, 0x69023043, 0x534B9667, 0x930B6C07,
+0x44633B9F, 0xCAA6E47A, 0x420B9242, 0x1A719049, 0x0EBFDCE4, 0x66C2067C, 0x58DEC262, 0x1BE92E02,
+0x67BBC34C, 0xE050F28F, 0x5A495A6D, 0x72EE7F34, 0xDCA9C2E5, 0x437D8545, 0xE035C83D, 0xC8FDA9F9,
+0xB2ECAF67, 0xEAC5782A, 0x0B77F7BA, 0x67E9D1A2, 0xC4B015DE, 0x7E1CC855, 0x233BA104, 0x2ED65D80,
+0xC0C75599, 0x0E06617B, 0x196AACFB, 0x933D1951, 0x77352B08, 0x9233E82F, 0x7F12220B, 0x69304FD6,
+0xC96DE281, 0xCB97D239, 0xA6AB5275, 0xEA7A9618, 0xF208EC0C, 0x6D9E188E, 0xD42683F8, 0xF2E4C7A5,
+0x4D39549E, 0xAC68985D, 0x04DB7593, 0x9A1EC995, 0x95009C62, 0x46F0B7B7, 0x2756B04A, 0x0F852A2A,
+0x2888AC0A, 0xF2B6FAB4, 0x3AD4201D, 0xBDED2E1E, 0x816F144B, 0xB001FC76, 0x4DB5BB24, 0xB5AC3808,
+0xF7097360, 0xA4669E6B, 0x54AC5617, 0x703D6E45, 0x616B08D9, 0xF746C591, 0x84122479, 0xBAA58A11,
+0xDAA6151C, 0x7BB31C08, 0x8E2CA250, 0x533E5256, 0x0DE45C5A, 0x7166654E, 0x0BB6DFD7, 0x1C2D0C8A,
+0x4A2B27BA, 0x356C87E0, 0x21B5EFBF, 0x6F27BD1D, 0xD4CB39CA, 0xD3802DEB, 0xD601AE91, 0x1A218164,
+0xD8D19BC5, 0x1996D2D1, 0xEE2D2F3C, 0x59616CF6, 0x3954CE6F, 0x4BCF8797, 0x2910CFA6, 0x5DDD7E7D,
+0xD703F8D7, 0x5980CE1B, 0x1D9FB213, 0x3BF9081B, 0xC8795C9A, 0xD4F0F81C, 0xC01A0FBF, 0x3C652857,
+0x8310DC41, 0x02AFDCB0, 0x35D44BB8, 0x1AA70D12, 0x80EFF620, 0xE324B5E2, 0x7CA7621C, 0x1186896C,
+0x2557B4DD, 0xD6E6EA57, 0xDE3DEEF1, 0xED81F3ED, 0x19B733E5, 0x30BB09B5, 0xBD519AAB, 0x24C535E4,
+0x62C4FA8A, 0x8140C43F, 0x9F73E53D, 0x56CEF53D, 0xB1CE67A7, 0xCD7558AB, 0x1447DD3C, 0xCE07B0BC,
+0x34F5FD85, 0xC84779CF, 0x77B802B9, 0x08C1C59C, 0x4C52F08E, 0x4F8D3A8C, 0x6D449E6B, 0xCF7ED02E,
+0xDD6F80C1, 0x10E7277B, 0x365FCC4C, 0xE2BC6171, 0x4865E585, 0x9D17140D, 0x90A9744F, 0xBFE03788,
+0x77904C16, 0x8B241115, 0xCB02FCEE, 0xAB347218, 0x0AB9C702, 0xB8517EFE, 0x76116678, 0x449AA540,
+0x0DA52554, 0x5ADB2BB6, 0x39B3AF14, 0x235ADA1A, 0x949F5AD6, 0xCE8E6EC3, 0xD1B41E2E, 0x9D9F4350,
+0x2AEF25AA, 0xD29E714A, 0x802F48A0, 0x9307D5F9, 0x0FA57CF1, 0x95D65408, 0x85D4962C, 0xBDC4A9B7,
+0x068E84DC, 0xA44F30D1, 0xCB0989E3, 0x216492A7, 0x2A91F826, 0x326E659B, 0xD687F8DE, 0x1A1E66BE,
+0x24117678, 0x4CEC6282, 0x4CB881D1, 0x58038A17, 0xB0BB1AEE, 0x49615799, 0x47497146, 0x095D2DA6,
+0x4059DA65, 0x6F836A9A, 0x60D39E73, 0x33EE6E58, 0x18EB8BF2, 0x7EA685A4, 0xBB8AD3A8, 0xF2E0437D,
+0xCD9763DA, 0x37B17EB0, 0x359AB88C, 0x600977B3, 0x6A5EBFC8, 0xCB8F30D3, 0xBF1EDD57, 0x078D1BFD,
+0x3D0F999E, 0x0947C7C7, 0x3904154B, 0xEE5199A4, 0x788EF076, 0xAD34D217, 0x82410838, 0x02EFF494,
+0x4C999EA8, 0x09BB33A1, 0x36418B04, 0x9305E731, 0x6DE31ADA, 0xFAEF3C93, 0xCD37CEF3, 0x09516A74,
+0xB4ABF534, 0xFE56F5F1, 0x4892DC86, 0x132803EF, 0x90D93476, 0x2118FD32, 0xFC79ECB4, 0x10477C4B,
+0x371685AD, 0xD37AF038, 0xF57CB734, 0x98F9A609, 0x59AE675D, 0xDF71D107, 0xD74BA87D, 0xA63CDD3C,
+0x34884711, 0xF7C025AE, 0x6078AF39, 0x09EFE6D4, 0x83A10D2B, 0x9538DD1A, 0x3143EDD1, 0xE979DA10,
+0xD9272C10, 0xF604A3C5, 0xA565A278, 0x7C296F6B, 0x0C952302, 0x33437DB0, 0xE03C486B, 0x1CB4630B,
+0xE2112995, 0x03322FC9, 0x80AED9E8, 0x5A598E83, 0x6B8601F9, 0xFF35E84A, 0x5BBC699A, 0xADB3D8DC,
+0x66C067B1, 0x1768E2CB, 0x5F92EC99, 0xDB8D99C8, 0x9FC0CDDF, 0x886758D6, 0x8D71BB53, 0x5541CB6F,
+0xE7E9EF6A, 0x9DC287BA, 0x2D64850F, 0xD65B7E1D, 0x3780078D, 0xBB35F1C5, 0xC5D00CBA, 0x60D2128C,
+0x677E8326, 0x4D33796C, 0x23A97527, 0x1E2A1636, 0x90F36201, 0x4C503282, 0xC4CEAC9C, 0xD4DA8507,
+0xA1110D1A, 0xD699A623, 0x94018087, 0x6B018DF0, 0xF2CADC75, 0x970153EC, 0xAC7A9EAA, 0x816A1BEB,
+0xFDE65CDC, 0x2CAF84F2, 0x9029DBB3, 0x0D3B2F2E, 0xE6C16ECF, 0x8B398478, 0x67580754, 0x6009AD1E,
+0xF1B73BC3, 0xB19E5AD1, 0xEE413583, 0x2F99293A, 0x1EBE8EDC, 0xED70904A, 0x5F50185E, 0x034D939E,
+0x7053824C, 0x70094ABF, 0x75874358, 0xCBC98FE5, 0xE64E750A, 0x3258A9AF, 0xE10BC9A1, 0xD29D0B6C,
+0x6DD33D84, 0x0F3177C2, 0x0D46D577, 0x6F21C504, 0x23984FC1, 0x14869AB0, 0x11E76FA6, 0x1F9E7AE2,
+0xD77BC170, 0xE09A2821, 0x2D2B1C2D, 0xBCECBED2, 0x3A8509DE, 0xCDCF747E, 0x9031FB11, 0x5F61FDFB,
+0x041B1ED2, 0x547987D3, 0xC07E88A0, 0x10F7A8B1, 0x5757122E, 0xFD4CD6D6, 0x0CDCA87F, 0x6AB908B7,
+0xFB65E0F6, 0xA04AC003, 0x5ADA1867, 0xF5B4CC30, 0xF8904B70, 0xA812A998, 0x182DFF3E, 0x3C9147C9,
+0x48AAFB7A, 0x3B331A65, 0x56F8F1AE, 0x8758BE1B, 0xB595BFA1, 0x83AFF6CA, 0x6D38F8A1, 0xBE24BF53,
+0x7F58E8B8, 0x2F36459E, 0x098D61F3, 0xE655D291, 0xA7EE5A9E, 0x98CBE144, 0x0A467884, 0x1DACDBF0,
+0x564B2805, 0x70D440E6, 0x2EF34388, 0x998A5EB1, 0x261F131C, 0x8BE0CC07, 0x32DB7A9A, 0x68A28C4C,
+0x789D1603, 0x86D16056, 0x6A5612E6, 0x22034D4B, 0x4D947E2D, 0x13F0CDF3, 0x02C7F2B8, 0xEEE18B93,
+0xF64772D2, 0xB5256568, 0xD56CBC65, 0x429F7DDD, 0xCEB21B02, 0xE4827099, 0x2375FC72, 0xF091827F,
+0xE8F833AF, 0x10B5C186, 0xD5265459, 0x688BC726, 0x039E0B18, 0x37E1B83E, 0x2D2B89A9, 0xA3130809,
+0x8BE0EFA7, 0xBF3671C5, 0x05D38269, 0x351444D9, 0xCB494E59, 0x0399C1EB, 0x34950ACD, 0x6C8ECF70,
+0x7760E5B9, 0x9489C75A, 0x4FE73C92, 0x8CDEE9D5, 0x641628E3, 0x7DAE5B51, 0xA2CA8183, 0x07A23A97,
+0x20A14C2A, 0xF8CA45B8, 0x26060CE0, 0xAADC6A65, 0x6C640553, 0x76B30682, 0x288019CF, 0x9588E676,
+0x463A9480, 0x7C2EAF55, 0x0E545214, 0x88919B14, 0x4358599C, 0xE1D6140D, 0x0A5260E2, 0xD1E0C8C0,
+0x02A85F62, 0x29DF6CC0, 0x2421298B, 0xEB0F98C9, 0x41910F35, 0x70FF6FF8, 0x10655E1E, 0x7177B730,
+0x61DA28AB, 0x0640B81E, 0x0A4B90E6, 0xFEADEA7B, 0x7A707710, 0xE640733B, 0x5B59151F, 0x981B1E07,
+0xFCAFA0C6, 0x551C527E, 0xAC2EC802, 0xAB3073F4, 0xD88AD875, 0xD59DB928, 0xBFE7621D, 0xD33A2269,
+0xAD463B30, 0xB94E43B9, 0x87F2A417, 0x22314E0A, 0x1E91B928, 0x4F97A684, 0x0727DC9C, 0xD0A6C8B3,
+0x16A85D17, 0xCC7F1BFE, 0x570D1AA1, 0x545A2D9C, 0xAF73F05C, 0x83963FAD, 0xD047523C, 0xF969F428,
+0x2702DE06, 0xA4F9F306, 0x9AC29580, 0xBA46E500, 0x840C9355, 0x5B65C564, 0x6BA9CE16, 0x19E78E8B,
+0xE964D365, 0x4F933120, 0xB70314B7, 0x23558D84, 0x86A1B8AD, 0xDAA8D9C3, 0x3694E034, 0x4F481B20,
+0x0839C782, 0xEB399BAD, 0xFADC1C06, 0xA990AE7B, 0x1904D6E7, 0x1FBDF8C9, 0xA7BB4580, 0xADACD485,
+0x27609555, 0xB219AAE2, 0xBB1D8D31, 0x83FA52E6, 0xAB4AFFCF, 0x65BD1EAB, 0x5B7CF7C9, 0xB0754823,
+0x879E618A, 0x098DB390, 0xF2673AA6, 0x11F43FA6, 0xA27DDD49, 0xCC5DE501, 0xDA67841C, 0xC6B41D64,
+0x8690C51A, 0x2D8491EC, 0x28311DBA, 0xBCAA8223, 0x29209B4D, 0x93FDB1AE, 0xF9796CE4, 0xEF8DA66A,
+0xAD5F77D0, 0xD35CF880, 0xA4C0B003, 0x545BAE3E, 0xBED3D887, 0x2954A786, 0x58E2F52B, 0x59FA3369,
+0x02F954EE, 0x31B0071B, 0x08EC0DC7, 0xD4D6C8F3, 0xC3C30DB0, 0xA972A859, 0x10869F23, 0x04B3C883,
+0xE352DCB8, 0xAE7B6C9E, 0xE08C628D, 0x5CED5261, 0x530FFDB6, 0xE5A88D31, 0xAAF9402A, 0x061CB535,
+0xAB736B53, 0x125892DB, 0x58627225, 0xB2EA94C0, 0x6D46225C, 0x11446BDB, 0xC1C08A96, 0xAE977C66,
+0x50C3CFB2, 0x5EA3E33C, 0xF39B491E, 0x5267003F, 0x17D00781, 0x1B0AC49C, 0xFD7D4230, 0x67E95654,
+0x9A39971C, 0x92BCE0A3, 0xCB98F58C, 0x1CFA1300, 0x7C3856BE, 0x89653CF5, 0xE968675F, 0xC1A4C796,
+0x5A0A15CD, 0xB058C870, 0x094DDB49, 0xDFFEA394, 0xB51E9CBB, 0x77CC1FA8, 0x1012E560, 0xE94108BB,
+0xCD534AE2, 0xA6A0273F, 0xD1419C1B, 0xFF5712DD, 0x8F0D5862, 0x5CA7F82B, 0x34754CC8, 0x6F03162D,
+0x20580FBF, 0x8192F8F9, 0x25EE4C29, 0xD1D8537C, 0x306F61F6, 0xD88E9655, 0x7C02D923, 0xB827B469,
+0x14228698, 0x495AF4C5, 0x4881BC64, 0x79A0690B, 0x2104F058, 0xBAF98D79, 0x1D86FFDF, 0xACEA589F,
+0x0C7B9913, 0xC77F7EC1, 0xB3C39610, 0x08A96563, 0x81CF9E4D, 0x083EE902, 0x0B965A23, 0x01873FF4,
+0x95F0078B, 0xF2B4115C, 0xF5C07C11, 0x9D6F7EB6, 0xD599D20F, 0x57B85690, 0x0466F7F0, 0xFFE57E46,
+0xD6D798C0, 0x6265BCF3, 0xA1B12C83, 0x21989C63, 0x0F0C740A, 0x73827488, 0x49C94B4B, 0x3F19634F,
+0x618E1115, 0x0AD04CC1, 0xA3C43933, 0x17A6BA28, 0x8670BB50, 0x5CDB73A2, 0x93D63918, 0x667C1546,
+0xF326F071, 0x412CDEAD, 0x9DA49E79, 0xB306ACA2, 0xD69ADFB7, 0x2466FBF4, 0x077F5DEF, 0x7623BD7B,
+0xB67A59BE, 0x8999BFC6, 0x49F0757A, 0x044647A4, 0x01009FB0, 0xC7124D49, 0xC2C0F226, 0x1D75AD15,
+0x87451F49, 0x8C743B5F, 0x9E57AAD5, 0x77AA4A50, 0xB4C0DBBA, 0xBB20CD66, 0x83F9761A, 0x65933EC9,
+0xF78F0097, 0xAF1A8363, 0x913EA6EE, 0x90EEA2C2, 0x838BF0B1, 0x6C03A0AF, 0xBA369E04, 0xBD4A5A74,
+0x9D154836, 0x10C0FE90, 0xAE2BDF17, 0x1EBFBD45, 0x6495781B, 0xE2963D83, 0x461F2DAD, 0x6DC970D5,
+0x62D04E0F, 0x90B94542, 0x90CDEF1A, 0x81D81DC4, 0x1E514FF9, 0x594F413E, 0xE43CA86D, 0x8CAB3BC5,
+0x821ABFFD, 0xE3DCD738, 0xEA27C857, 0xF60DBA46, 0x0D81DC6E, 0x9B567460, 0xC6F6D51F, 0x361D3BBA,
+0x0D3EAA56, 0xB48D6763, 0xE70C049A, 0xCC551855, 0x0417A63E, 0x48A524F0, 0x4C74D3DD, 0x63596831,
+0x955D87DE, 0x6B4E9AED, 0x89D4343F, 0x492EB272, 0x560C4263, 0xE4F02FF1, 0xF133FFDE, 0x086AA2DB,
+0x7314343F, 0x0EED9B14, 0xDC20CFBE, 0x6A9248B9, 0xA19A9BC9, 0x81E2B1A2, 0xC5391C54, 0x7ABA44A0,
+0x9778739E, 0x62F7B227, 0xACA52C4D, 0x9B4C8443, 0xB19C1500, 0xB727BD5B, 0xA09E2D03, 0x53183B12,
+0x147FC46B, 0x8B798764, 0x0514243C, 0xF604C871, 0x3B76036C, 0x9E8CD35B, 0xE7CCC550, 0x9320A3EC,
+0x929470B6, 0x13F127AD, 0x35B2448B, 0xFC18C1FC, 0xE9B787A1, 0xF33D3F58, 0xECD1073F, 0xAF399E24,
+0xE571D26B, 0xA0F718C2, 0x68CAEA74, 0x5322925B, 0xF032A428, 0xFBCFC3BF, 0x77F11E81, 0x6B7AC4C6,
+0x9F057F3C, 0x71E178BA, 0xD55DFD5B, 0xD0CBD187, 0x53920C16, 0x97387A89, 0x17B7217B, 0x6862E928,
+0x9A39CA36, 0xAEF0912A, 0x5DE415C7, 0xFB6EE95F, 0x787B8C29, 0x1C23C20D, 0xB4C535BD, 0xD30FC09D,
+0x78C7E589, 0x94696CDE, 0x3717B0C3, 0xF1896644, 0x2C31A096, 0xF20CECB2, 0x2D5BD9AC, 0x750826F7,
+0xE7D23830, 0xA4E1A27C, 0xF13FC5EF, 0x09FB3C4E, 0xDDECD4FB, 0x50EFAB82, 0x0160981C, 0x7DF6868B,
+0xD19FAE96, 0xCBAD4B9A, 0xC19C5BBC, 0x02D08C9F, 0x6F6A9F42, 0x8E60EC17, 0x4D9DBE99, 0x962E8195,
+0xAE95C6A6, 0xBEAEBC19, 0x7CBD5ECD, 0xB5010056, 0xFCDA0C3C, 0x38B923BE, 0x8626B539, 0x2F0C5FD3,
+0xD04DCBC1, 0x1636D863, 0x887A684F, 0xE3B4BE11, 0x32ACE21D, 0x4D34CA86, 0x59707A3B, 0xA84708E8,
+0xDE29FCF2, 0xDCCB4486, 0xEFC0AC66, 0xD930240F, 0x0B87E0E1, 0x7C80265B, 0x8D1B32C5, 0x652F3460,
+0x4CCFBC9D, 0x5D97A3D6, 0x73A60CC5, 0xB72500C9, 0x5B7BCCB6, 0xEDEF484A, 0x6FEBEA08, 0x112B88F0,
+0x332857F7, 0xA4E261BC, 0xFBDA84AD, 0x530A244A, 0x3BA9FCBA, 0xDDC90F2A, 0x359677AA, 0xE0697144,
+0xC12BE762, 0x06022C95, 0xABFF66BD, 0x468C20E8, 0x463378BA, 0xAADE7BC1, 0xE9C8720E, 0xD27590DE,
+0x6B07CCBD, 0xD902866A, 0x52C72D2D, 0x8F7DAE6E, 0xA743A460, 0xED2EF84C, 0xA9C0006B, 0xBA69DEC8,
+0x5A507EA0, 0xA3E3DBFE, 0x5E6881BB, 0x57A40ED5, 0x948411EB, 0xAAE80E06, 0x155FDCEE, 0x7B77B30D,
+0x4EDEB41D, 0x3871444A, 0xE745B90A, 0xBC804F1E, 0x01FF7315, 0xDB67CFC5, 0x3F8ED911, 0x6CBEB3F0,
+0x74F50A28, 0xCA721B0A, 0x3063CAC7, 0xAFCEEDAB, 0x5C2723B5, 0xDA32B30A, 0xE9F762CF, 0x14F93EEF,
+0xAE90E25C, 0xA468FB64, 0x19C53CE5, 0xEBF99B0F, 0xD4527B69, 0xE05298FE, 0x5B7EAAC8, 0x481D454A,
+0xEF323284, 0xEC184B39, 0x3D476F64, 0x0268E67D, 0x077C6FC4, 0x6FC713E5, 0x4FE07680, 0x3743E5F5,
+0x74688013, 0xB20E11DB, 0x41269D3F, 0x5EF63537, 0x524740E9, 0xC2A22317, 0x98C12711, 0x8A90D812,
+0x5A6A8592, 0x3C20469C, 0x3DB402CB, 0xC1F0D448, 0x34ABECAC, 0xAFE05348, 0x7E8402CB, 0x93D742DD,
+0x0CAE412E, 0xCFE649B1, 0x9764776D, 0xEE20264A, 0x4CD893BD, 0x0B42107F, 0xEA4B8D6D, 0xA4058451,
+0x2BB799C3, 0xDE6E857A, 0xDA6ECDD2, 0x3E2C2E7E, 0x2F16D864, 0x8BAF1570, 0x98881D06, 0x0FE54727,
+0x1677C61C, 0x99B85025, 0x77A77410, 0x5EBE8E57, 0x4E02757A, 0xB255BDE9, 0x87194722, 0x5782AF49,
+0xA64DA7F7, 0x4310F2E9, 0xB8025AE0, 0xDEDCC041, 0xD48749D0, 0x9A6D972C, 0x93B06D09, 0xBD257289,
+0x0D8C0B76, 0x0ED2405E, 0x14DD8E98, 0x80FC6946, 0x5201FA3C, 0xCEB9BD74, 0x307B0D8C, 0x1F48BF8B,
+0x7434EC39, 0xFC6FCA27, 0x09201831, 0x2EE4D929, 0x78476E14, 0x52BC1892, 0xF765E602, 0x0782D7E0,
+0xA9387BAC, 0xC765BCEB, 0x80495C78, 0x5C3E2EE9, 0x858A52E0, 0x329BFCBE, 0xE0306596, 0x4C779EC2,
+0xD6176010, 0xD129504B, 0xE8593675, 0xB8895139, 0x27E323BD, 0x239C136D, 0x81D8DCE2, 0xAF6ADFB3,
+0x955BA720, 0xCC377319, 0xDCE49194, 0x2C806B47, 0x96B8B7E5, 0xA59CDB08, 0xD999FDAB, 0xBCBB7B85,
+0xFA6E847F, 0x44189C02, 0xFF287CFB, 0x39DF7108, 0x479F098E, 0x23357DF2, 0x53F42A5F, 0x26E41F33,
+0x3856C43D, 0x81FBD420, 0x03D8E42C, 0x23110143, 0xF9BEE9C9, 0x464EA554, 0xE88D8FE5, 0x3DCEBF70,
+0x9CF636F6, 0x71D83A8D, 0x540F5EC0, 0xE1B08DFF, 0x2A7E46D5, 0x03065CF1, 0x03B20008, 0x9206C2B3,
+0x6379DF84, 0x0762DF19, 0x6F269DAA, 0x7080E761, 0x579FD799, 0x20EEC624, 0xD8631270, 0x899350FF,
+0x1B110C57, 0xD486D779, 0x051BB0F3, 0xF5377EDE, 0xA1626109, 0x274BB44A, 0x139013E8, 0x8F65FB6F,
+0xDF0A4834, 0xB1654F0B, 0x6547BFA2, 0x6ED79678, 0xDFD86281, 0x715D4CB7, 0x0E5611EA, 0x779C9B1D,
+0xDB7BF68E, 0x52A94006, 0x7061EB37, 0xEE27F68C, 0x65DF5B26, 0xA2100B3E, 0x6FF5CF52, 0xA86FD1CD,
+0x3111C9AE, 0xBAFBF09B, 0x9D79A7A8, 0xCA0591DF, 0x96D79540, 0x75F12B40, 0xA6116584, 0x2907FD3E,
+0x407C91AC, 0xE6D88F48, 0x4D7FD6AC, 0x39436659, 0x72E441ED, 0x82639A12, 0xDFAEB030, 0xBC266101,
+0x9629B914, 0xE7F80EC1, 0x5EA6752A, 0x5C4A3C23, 0x122417FC, 0xD1FDB296, 0x90971A32, 0x9938BAF2,
+0x83C18B4B, 0x178FF65F, 0x34DBA72E, 0x89D0BFEA, 0x845C31BA, 0x805EC492, 0xEB32F6E6, 0x1CDB4071,
+0xA1F805A0, 0x3D0F371E, 0x149CC6A9, 0x35B084A4, 0x29FC967A, 0xD2CCF6D0, 0x4FAFE500, 0x18C959B1,
+0x2437A06B, 0xB02CD32A, 0x6DA2E0E9, 0x7FC4F295, 0xAED46C24, 0xEB716598, 0xEA3B095D, 0x19CD10F1,
+0xF678F034, 0x2843115A, 0xE671B399, 0xEB4DC164, 0x361EDAA4, 0xBD57DC94, 0x09ADC0AE, 0xF61043AF,
+0x18698E75, 0x4027B38F, 0xFFFF5AD4, 0x6AA1CEE0, 0x88153D45, 0x62F8E883, 0xA728DB41, 0xD6F4DF4C,
+0x6EDD259C, 0x072857F3, 0xE7A1B0A9, 0x99F241C4, 0xF2630F33, 0x041A1981, 0xF1777E18, 0x4D29DA11,
+0xEA38268F, 0xD91728B5, 0x0CD06446, 0x98EFB8F9, 0x12373667, 0xEC17F36B, 0x3FF587D9, 0x709F52D2,
+0xBCA6EB80, 0xE409F46A, 0x9E45A4B3, 0x0CD38776, 0xB47C9D9B, 0x83EF1848, 0x57AA5791, 0xEEA25339,
+0x6E96AC6A, 0xDDF08518, 0xD899D74C, 0xA3307867, 0x76882DFE, 0x34ED0C81, 0xA42113E1, 0xE32EE241,
+0x6DC7A557, 0x32A4EC9B, 0x0995EE66, 0xD7D83301, 0x07DC41C9, 0x116731FD, 0xB28F222C, 0x8DA7AFFF,
+0xC4EE0E9A, 0x24087B44, 0x0F13C850, 0x8767D981, 0x1EE67939, 0xD5EF9FEF, 0xDD16E214, 0xA331D9D4,
+0xAD53C575, 0xED05D471, 0x36AC698B, 0x97670F6E, 0x053414BE, 0x025AB386, 0x4105400B, 0xC128E11F,
+0x5AA43519, 0xD6D94EB6, 0xC2F397FA, 0xD6D6F571, 0x2CE89532, 0x85E926FE, 0x602028BA, 0x2E455DC5,
+0xF1A68582, 0x2BA346E2, 0xD077417E, 0x2CA82BA9, 0x4849A910, 0xCB8A0298, 0x4A87031E, 0x5B209DE2,
+0x80C172DE, 0x027AD449, 0xF69435DA, 0x64E5626E, 0x1C75280E, 0x8584CD18, 0x881BB688, 0xE4453387,
+0x00CEAE6E, 0x52BF6851, 0xF23C2D99, 0xE4238CAD, 0x1EDF009E, 0x80D87FE8, 0xE61C920E, 0xBEB7E8F4,
+0xFC28D1B6, 0x7A21742D, 0xB07312D8, 0x86EAD8C4, 0x85CFA8AF, 0x81DA2C71, 0xA73A108C, 0x6A331D8F,
+0x40E4545C, 0x22D12672, 0x86467D8A, 0xDDA4FC3A, 0x5441602C, 0xD7A0A22B, 0x4366E473, 0x25821DB5,
+0x0598CCBF, 0xF272E494, 0x61830AFD, 0xCBA1BE13, 0xA568D105, 0x0A42360F, 0xFF949ABC, 0xBC3071C6,
+0xCB67FF8E, 0x6314AD33, 0x3C26B9ED, 0x57BAF9E8, 0x0F08BCD5, 0x2EBCA478, 0x246D66AF, 0xEF428C1B,
+0x454599B3, 0x511C2616, 0x0B489B96, 0x33E8D588, 0x781571C2, 0xE4A1D028, 0x0F8F3D48, 0xDBE124C3,
+0xA39DE760, 0xBF76CD61, 0xA88023BC, 0x2ACFAFCC, 0x199C8B16, 0x40D0F207, 0xAA286780, 0xF5E54171,
+0xDBD6DB23, 0xB29FFDC6, 0x3F704CBC, 0xDC257E78, 0x55FA1350, 0x55D241D2, 0xB0DDF05D, 0xDF4EBDD4,
+0x661AB9E5, 0x164045A3, 0x3B6AD48F, 0x1292A0CD, 0xC5C059C2, 0xEA520244, 0xCF10EF36, 0x4B603F80,
+0xF854DD2F, 0xB7C8037B, 0xD06F385F, 0x2837D0CB, 0xA1D975A5, 0x1B738183, 0xCB86233E, 0x942DA72B,
+0x5B70BACE, 0x93A35723, 0xDC11BF5A, 0x8C8F635D, 0xF19F3AF4, 0xC4AA3295, 0x9416EF84, 0x12773144,
+0x6496FA73, 0x1B8C28D7, 0x6A3B4B11, 0x2CC70963, 0x69263EB2, 0x544871B0, 0x141881AD, 0x862123D8,
+0xC50E7DD5, 0xAEE65DC6, 0x7445C994, 0x634020C7, 0xF9237CD9, 0xEBC1A698, 0xFD5A7716, 0x73B30618,
+0x0666F84D, 0x4E90A7B8, 0x8EE84718, 0xDD6A1288, 0xAF394668, 0xEE3AF1FE, 0x7AB95A81, 0x2900FEF5,
+0xA2BD8828, 0xB5E329A1, 0x5D1B358C, 0x0DE29D6B, 0xB0591B17, 0xFB990708, 0x40B58500, 0xB4D3EFBD,
+0xE092D3DA, 0xBB1CF56E, 0x873C37E8, 0x6836E344, 0x078923CD, 0x9FF21796, 0x601DA93F, 0x627B28AC,
+0x030B730F, 0x759DD3C4, 0x25F7A8C0, 0x03E6580D, 0x05C96410, 0x43F19794, 0xDC98933E, 0x431FFEBC,
+0x2CF6CA63, 0x91BB3694, 0xA09882A7, 0x4BBB3B44, 0xC3BB8FD5, 0x69153392, 0x62366832, 0x36A4AE1D,
+0xA71B850B, 0xD9C099D1, 0x283F03B3, 0xC81DEAC9, 0xD6E0A39D, 0x0D3CB6DE, 0x8B15FBE4, 0xB22DB38C,
+0x41D5C215, 0x14F60706, 0xA5332423, 0xC3D5BC70, 0x94E93B34, 0x3768D7AF, 0xA190CB05, 0x678E5233,
+0xEF96DD98, 0x566E6221, 0x40FB15D3, 0x619CFEF0, 0x9936C49A, 0x134E6121, 0xD55562F9, 0x9EB5E9F8,
+0xBF5B2058, 0x625D9E5D, 0x7BCC8B63, 0xB447D37D, 0x2F92293D, 0x89530177, 0x562F2A0F, 0x9599DEE6,
+0xAEDDC03B, 0xD8404035, 0x1E79B0CF, 0x57BA4B15, 0x80550EC2, 0xCB7DEC24, 0x5A677959, 0x7E1AA59A,
+0xD16C75C3, 0xC0599256, 0xD7BC2C8B, 0x2B87D826, 0x6242C0F9, 0x9AD0C0BD, 0x2FF7C973, 0x465FCC54,
+0x691B7E9C, 0xD96882A1, 0x052F2ECB, 0xC7F8AB95, 0xF2B32184, 0xA925DE2A, 0xAC0A6C49, 0xD8A32DBB,
+0x5A09B621, 0x8518B2A0, 0x31FB1F90, 0xC6CC67D7, 0x8AF24F2E, 0x1488954B, 0x7DB94FD2, 0x0550B9D6,
+0x5C543EDE, 0x3E8E292D, 0xF378F027, 0xBA94608C, 0x0A0A0ABA, 0x35C03A64, 0x53379095, 0x7856431A,
+0xB15E5250, 0x13E0C4DB, 0x22DD4149, 0xB55842D7, 0xB62628E6, 0x86CB3B95, 0x218DB17A, 0xE5165D5E,
+0x0EE192E6, 0x55D378FF, 0x54DC3236, 0x8B1FB388, 0xEA764019, 0xF250A73E, 0x3965E6C6, 0xC68E6001,
+0x28BA4076, 0x806C8192, 0xCB48F4D0, 0xC4CE3B1B, 0xA84C5AF7, 0xB74EBFB4, 0xCA0C65EA, 0xF8B1A01C,
+0x42B44B4D, 0x8DE5AEB3, 0x15D793F4, 0x40620203, 0x2437E19A, 0x4A32354C, 0x141DFD19, 0x2B09D728,
+0x8E054B99, 0x067ADCE2, 0xACABD474, 0x2EC8A127, 0x243C098F, 0x2DD0607D, 0x28E59932, 0x92724CE2,
+0x4174F039, 0x33908146, 0x7C5217E6, 0x86C5E374, 0x2BB494B7, 0x90F9636F, 0x4FD2BD73, 0x33DA370C,
+0xDA011311, 0xCD254285, 0xD5C04059, 0xD95A4961, 0xF3CC6F2D, 0x9D253EE7, 0xAC1CCF6C, 0x6CB1F8D6,
+0x8DAE1437, 0x11D36B52, 0xA2D87C94, 0x6C0A5998, 0x514A69D2, 0x6EEDC288, 0x52F5BF70, 0x3550FDE2,
+0x885F622B, 0xE91EA7F8, 0x48A3197E, 0x5AFBE0B2, 0x1BF13B7F, 0x0C16E794, 0xE9157D3E, 0x3CA46CB1,
+0xCAB6634E, 0xE7BAAA2E, 0xE1064F05, 0xF4FE1A88, 0xCF2EF0FA, 0xB169F707, 0x31A510D6, 0x2427C875,
+0x3B28D358, 0x24E23493, 0x90A9F952, 0x9F49A085, 0xDFB98EFE, 0x32B8CD34, 0x1451E90B, 0xBD8E4AC0,
+0xE41EDFBB, 0xC967E98B, 0xBF5500ED, 0x7E66C619, 0xF7BEB77C, 0x3E73631D, 0x02E4C187, 0x9EE52149,
+0x256F372D, 0x921A3FE3, 0x5A9FB537, 0x49AAB46F, 0xBFF5D35A, 0x7D6CF6A8, 0x7655AEF8, 0xA4B5A7DE,
+0xEE9092AF, 0x673E4A91, 0x0D21278C, 0x6158CB67, 0xD5318CF4, 0x92E23AEF, 0x243BF466, 0xEC112529,
+0x995FEE63, 0xEE08EAB8, 0x9861887F, 0x51E009FF, 0x44702DB6, 0x38EEB0B4, 0x50094679, 0x6402DD38,
+0xC6380EA0, 0x9B0A9C2E, 0x8E0804CB, 0xE361BE20, 0x4DF4D596, 0xDA122767, 0x94DCFBD6, 0x556003E3,
+0xE455DBBF, 0x3CCAF7E6, 0x4AA88F6A, 0x948FD20E, 0x2F6B3B40, 0xCE2B51D0, 0xF1799CA0, 0x03F5AEE1,
+0xC5E05FCE, 0x2A6154F3, 0xE48A1EC1, 0xF226BE6E, 0xA078CAEC, 0xC62B3938, 0x5FBDFDFF, 0xC7A00536,
+0x5537E1A0, 0x2DDBF8AE, 0xC0725A9C, 0x0B0E177B, 0x223BD895, 0xC594C7E3, 0x12111C85, 0x39F6FFF5,
+0x19BD46F1, 0x914324FD, 0x2D94F483, 0xA5501CA8, 0x1F2F7851, 0xED7D5D27, 0x96A2D327, 0xF2A741E5,
+0x061C3460, 0x55CEB638, 0x8C6FE04D, 0xE27C350D, 0x77A0C65C, 0x2D49BC64, 0x0107A78E, 0xA662092F,
+0xA9766950, 0x6EBBAE95, 0x5B454EC4, 0x38440546, 0x0E08DB35, 0x7B58EBD3, 0x4D3EFE7B, 0x9E78A8EF,
+0x33E71C17, 0xE9D13259, 0xA5F0B622, 0xA3895AB2, 0x89B89D4A, 0x7110CF9E, 0x0FDA8782, 0xE6CABAE4,
+0x5D4FBAC8, 0x83D9A54A, 0x19CD30F0, 0xD8DDF8EE, 0xFFD83BFF, 0xAF5536D8, 0x5734F2B9, 0x47685FA8,
+0x094A21D4, 0xCD235017, 0x3B6D5617, 0x212A11DC, 0xB6E8E8F9, 0x850C00EE, 0x0FE16159, 0xAA9AE12A,
+0xE904427B, 0x0DF2B5AB, 0x8711F79C, 0x1D259F38, 0x582D1CD8, 0x656DB317, 0x4B5E78E6, 0x03A18DF1,
+0x14ED83F8, 0x814436F3, 0x1F277557, 0x1C142917, 0xAE84A22F, 0xB18F2802, 0x69D87329, 0xF277447B,
+0xE71B57CC, 0x902C4EA7, 0x5A1BAFC8, 0xCB5C6AF7, 0xCC130060, 0x98779A61, 0x3621B224, 0x391B6CAC,
+0x5EECEF44, 0x88D1FC68, 0x0218CEB5, 0xAB363699, 0x6E9AD632, 0xFD11F3C6, 0x86629D97, 0xFEA93130,
+0x0CF0DF31, 0x21039F92, 0x66936ED0, 0xB2A3D684, 0x86CAF77B, 0xB5349F43, 0xAEB4EA1C, 0x58449EFF,
+0x6CC5B1DB, 0xE3C4E156, 0x66EAD7F0, 0x09473B17, 0xFC74DD36, 0x901C702A, 0x2E6BFCC2, 0x7668DCF8,
+0xDE410B6D, 0x91C0252B, 0x23CEF464, 0x9DE2FAA6, 0xD493B95D, 0x701D3AED, 0x8CC4D18E, 0xB6216141,
+0x884C42A4, 0x251EE2D4, 0x450D232B, 0xA78C13F3, 0x05A68083, 0xF9F4541F, 0x30AB5BAD, 0x193211ED,
+0x7AFCCE9B, 0x1A4F15BB, 0x66918CF5, 0x8067B2E9, 0xC3BDCF8E, 0x45BD5A58, 0xEB90180C, 0x081021A1,
+0xE85DA63D, 0xB0CC32ED, 0xC23CAD69, 0xEE23F760, 0x1B8D40A7, 0xDF336ABC, 0x815CC2D7, 0xD0697D8B,
+0x5CEAAE1F, 0x4D6E4BA6, 0x09B36EAD, 0x87F96233, 0xE385442F, 0xE52D2ED4, 0x4907AB3E, 0xEAB4370C,
+0x520ABC47, 0x07A0CFA9, 0x2562132D, 0x98A82DB7, 0xECAAD324, 0x0F250927, 0x08C4DF4D, 0xA124D8C0,
+0xF4BE2B60, 0x5F951B57, 0xD0FD608F, 0xBE8A09E4, 0x7C422032, 0x80748E2C, 0xB7F90E81, 0x9B22B60C,
+0x52720D90, 0x13DB1FE8, 0x3EFCA930, 0x2BB86B46, 0x9497FA63, 0xE0366BD6, 0xBBB3F9E4, 0xAF4E7725,
+0x3EB3556C, 0xDB8AEF9C, 0x85081705, 0xEE146EE5, 0x794F4F05, 0x58B79802, 0x588DCC7C, 0x7A4DCBCE,
+0x2D5F3AAB, 0xE816ECBE, 0x4FDB9769, 0xEDD27F6E, 0x0D26FEA4, 0x50D245F0, 0xD12FF95E, 0x232CA711,
+0xCA27E796, 0x2FBE5892, 0x638ABF84, 0xF637B91B, 0x62F383CF, 0x4570180A, 0x18E797E2, 0x6CFE715C,
+0x8D089B0C, 0x753BC82A, 0x69F01A44, 0x618122EF, 0x29AC7CAA, 0xA8962D8B, 0xB3ED1AC5, 0xE3507DBD,
+0x7491819D, 0x704D9CFA, 0xDA77237A, 0x6152FE41, 0xD26AC374, 0x76423BA7, 0xB8D383E3, 0x244D35F2,
+0xADB76A9D, 0x6D3E7475, 0x5FAA3EC2, 0xCAC2E58A, 0x3FE87F99, 0x184A1573, 0x613F3B20, 0x85408B7A,
+0x94D1F45D, 0xF040CF0F, 0x6CD695DD, 0xA64E4586, 0x321CCC1D, 0x78EEB038, 0xAD6430FC, 0xE67D08C3,
+0xF8AA0F3A, 0xE050D203, 0x40C4EAD3, 0xEECF8DC9, 0x7F8682B8, 0xC05184D9, 0x5F16E6F9, 0x8727168C,
+0xA8052680, 0x49EE0847, 0x0A47D480, 0x63C9478F, 0x7CD0180C, 0x1FBCE436, 0xFDEE605B, 0x103262F4,
+0x7E46BC92, 0x9083DB1A, 0xCB1A2673, 0x491D7B63, 0x04DA2F80, 0x4C2862EE, 0x23B76C79, 0x24CA3517,
+0xF122F380, 0x3AB72566, 0x5A238BC2, 0x97FA1D41, 0xE2F83646, 0x92E5CBB7, 0x18AD4AE0, 0xBAFC9706,
+0xDD300214, 0x15A76143, 0x47DC2F57, 0xB37ED992, 0x7276FA1F, 0xD9ECADF4, 0x29A7C07C, 0x9F1C4234,
+0x800F3DD4, 0x47DEE366, 0x434F0614, 0xC9D36659, 0x8B11B084, 0x282CF837, 0x79198C5F, 0x40DD166F,
+0xE04170AD, 0xBA295D9E, 0x92519EAE, 0x40680131, 0x180210C7, 0x89BF650B, 0x52CDFE00, 0xC137BB1B,
+0x6F6562B2, 0x4FE44FBD, 0x4AFD3EF2, 0x0EED0DF0, 0xD0D2D3C8, 0x785EFEEE, 0x1166CA68, 0x89D1B5B4,
+0x94B184C0, 0xA2B91144, 0xB593C4B0, 0x342B2D39, 0x5D08F1B3, 0x4EE645C7, 0xC5C4F380, 0x99F211FE,
+0x76B8738E, 0xB34C4FB1, 0xEE94BFA6, 0x02C06C04, 0x430BAFE5, 0x273C2F3E, 0x3A564E58, 0xA4EE1865,
+0xA812DDDF, 0x604EA328, 0xEA2C3C74, 0x98989940, 0x387EA125, 0x31A520E5, 0xB2EC3043, 0xB8765651,
+0x3D0DFD73, 0x998CA7E8, 0x14695B5B, 0xA2F884F2, 0x8AA1AA71, 0xE1CD5924, 0x23EB6688, 0xFDE99873,
+0x65B46DA6, 0x759A0D3F, 0x3490ECFA, 0xF877DB28, 0x775271B6, 0x3F70F6BE, 0x51D43A01, 0xCDA8841A,
+0xF527D3BE, 0x82556502, 0x79D5390C, 0x0577D205, 0x9B40EBE9, 0x3291FADB, 0x8551408A, 0x16CD864F,
+0x5EDB8A57, 0x70AF518D, 0xE6A30A8F, 0x60E9D858, 0x41FC5949, 0x2CAD2D97, 0x52734B82, 0x2B6AD7BA,
+0x08779CFE, 0xE05081B0, 0x8FE89B47, 0x6AB836D6, 0xE67DBBC9, 0x9E9ECE9E, 0x6FAEAB08, 0x932FA8D5,
+0xAB3AE078, 0xAC2FECF4, 0xE41EBC8A, 0x18823F23, 0x5649442F, 0x77B14FDB, 0xE9A1D2A1, 0x3AD9BFCE,
+0xE084A527, 0xE3FCC2BB, 0x5867EE8B, 0xCC324B4B, 0x5D5CB113, 0x2B90DF6D, 0x853A462F, 0xB398501F,
+0xC46E8FA9, 0x8CB4AB62, 0x48161B66, 0x759C4F1A, 0x0E4DCACD, 0x8004C27A, 0x6A452C44, 0x8593197B,
+0x09F2920A, 0xF9E53FC1, 0x59701826, 0x7C4C9278, 0x5844963B, 0x4FA1BECA, 0xAD38B00D, 0xF5C01715,
+0x1C4FBA99, 0x1584ABC2, 0x8F071925, 0x1CA20BAB, 0x2700C02E, 0xE8A89234, 0x31B2C762, 0x248A8AD2,
+0x5F77087F, 0xAD54D212, 0x466BF30B, 0xD81AED56, 0x4124EF9F, 0x634E8B3A, 0xAC8B9932, 0xBC492398,
+0x4576FEBC, 0x690A471D, 0x0C35A34B, 0x3A489491, 0x413239EA, 0x57231F99, 0x31D7096C, 0x0AA4E15B,
+0x1398DE75, 0x8004F589, 0x572E7902, 0x39F7DEE9, 0xFA0410C4, 0x519067E1, 0xB2816743, 0x02C85563,
+0xDFB6A2EB, 0xDB147FCF, 0xDA7D0477, 0xCC90725A, 0xC6F6A2B3, 0xD2CD1475, 0x02BB815A, 0xC64D49D6,
+0x9B110658, 0xC59B98E6, 0x73DFC0E0, 0xD5A9CE3C, 0xD9A44C89, 0xF2152D37, 0xD05489E9, 0x5CB26961,
+0x01A0803A, 0x37E839ED, 0x5FE2FB07, 0x58413B2B, 0x7D34C3F8, 0xBC37CC83, 0x65FEA9BE, 0x860AB783,
+0x3CFA7D82, 0xEE046CA0, 0xF1D376E6, 0xCB8DE287, 0xEE57DA1A, 0x7426B5E3, 0x047CD77E, 0x9FE46FA9,
+0x40E618A7, 0x0CC07100, 0x5B7739BC, 0x6112C3BE, 0xD8D68DDB, 0x57CBB957, 0x058DD728, 0x02F94394,
+0xA0C92D20, 0xACAC75B1, 0x16E45392, 0xFFD939B1, 0xABF15291, 0xBEA32283, 0x32D68A47, 0x5F8D38F2,
+0xDF472922, 0x15779D16, 0x1E93A6C8, 0x1F8029C8, 0xE91A1D6F, 0xB46428CF, 0x7B719EA9, 0x3086743A,
+0x573681F1, 0x41FF897A, 0xA767CD7F, 0x55CD9B7E, 0xD5797A2D, 0x8CFB28DF, 0xE2959E9E, 0xD35D1692,
+0xD6351943, 0x5ECAA2F0, 0x0E4B702E, 0x15BEED32, 0x08623225, 0x5DA95A34, 0x029CB023, 0xA938F065,
+0xAF05C0B2, 0x74FFB1D2, 0x330BFCFD, 0x4FDD36C6, 0x4C0D0CCD, 0xBABDBBA5, 0xC2D0CF51, 0x7E94D18D,
+0xE69FEC36, 0x0B764609, 0xBEFFA927, 0xA4D978FA, 0x30D429CD, 0xD5A9ECB8, 0x05E3F235, 0xBD2E77E6,
+0x8388D6C2, 0xCE390CBB, 0xDAFC9D11, 0xCF3DC7B9, 0x82BDCC5F, 0x9A109E4E, 0xB6D23703, 0x81663DE6,
+0x67C2DF2C, 0x8367B5DA, 0xC7330E7D, 0xB676B88A, 0x3E7B5923, 0x49796C37, 0x4B40CDB8, 0xE10CFEF1,
+0xD31E47B0, 0xC8A8ACC3, 0xB1F09FF9, 0xED632372, 0x95ECB250, 0x33A137E4, 0x8400833B, 0x60866852,
+0x3819FE09, 0x524414D2, 0xEB4B5359, 0xB85A3CE0, 0x21B98332, 0xA247E4D2, 0xA7515005, 0xD62C18B3,
+0xDC7CB447, 0xEE24A9C2, 0x1304CB18, 0x56792920, 0xBF61CDA0, 0x18DB8E0A, 0x2F78EAA8, 0xCE2EBBAF,
+0x86E7EA5A, 0x5CF89489, 0x78C5D703, 0x7B3FBDB6, 0x4A40188B, 0x0854E22E, 0x1AB67258, 0xBAE9E99F,
+0xB6C0D87A, 0x47AD77D7, 0xC325EB27, 0x1B09F44E, 0xC665F76F, 0x02A7B5D7, 0x8643950A, 0x802F7574,
+0x9977D34A, 0x01D8413A, 0x318B5A3B, 0x5F9133B7, 0x61714889, 0xD5836DC4, 0x402EAA97, 0x3102C109,
+0xBB3BD79E, 0x7A99E631, 0xB81E6786, 0xD2AC8ACE, 0x7526A7AA, 0x3CF3BB5B, 0xB2CBEAB4, 0xF759A823,
+0x0B3DD247, 0x87F683BD, 0x714B57BB, 0x63049E19, 0x0397CCE1, 0x2A5E0B7F, 0xBE8CEE92, 0xB217CFF4,
+0x90697879, 0x615BFA38, 0x9076F8AE, 0xE71540EC, 0xA872ACBF, 0x4C4086BE, 0x7B4D8B89, 0x21FBB357,
+0x48DE566F, 0x93217378, 0x9C828446, 0x31DA2BBE, 0x05A5C985, 0xF8B0BCE6, 0xE9045BF4, 0x84FCDD65,
+0x00AE6B92, 0x7ABAD79E, 0x8C02072E, 0x8D411608, 0xDDD71AFE, 0x28E85354, 0x33C283F9, 0xDAD302BE,
+0x082910BF, 0x0D89D80B, 0x05B615E1, 0x9CDD8DAF, 0xA35B4920, 0x2547464F, 0x4FFC016F, 0x630178F7,
+0x14A4A120, 0x2D671650, 0x47F9730F, 0x2964BDF3, 0x1F0F53F6, 0x81FBC24D, 0x185E6329, 0x59BCE162,
+0x66496C3F, 0xA4928E51, 0x9BD6CE1E, 0x785F05F9, 0x919F85FD, 0xA70B695D, 0xEAD29851, 0x030E670A,
+0xE27FABA9, 0x21A3E499, 0x0C355D0C, 0x4134A24D, 0xBF24D0C6, 0xB2163DD1, 0xC532D284, 0x33FFEF26,
+0x7404C88B, 0x1D02726F, 0x971526C4, 0xB4FE8E2A, 0x5793E9BB, 0xFCFE7F35, 0xD0F55FE7, 0xB092A1CC,
+0x41BBFBCE, 0x7F55E8DE, 0x5FACE42B, 0x3E3ADDBD, 0xEBE8D812, 0x5F329F49, 0x6EC961FB, 0xD0309C6D,
+0xA2F720B2, 0x77F9CD41, 0xDF3B11C0, 0xF66CC8D5, 0x4F9BBC96, 0x1B84F83A, 0xFA87160E, 0x1CF16F41,
+0x284F7795, 0x1E1964FF, 0x4B5D518C, 0xB098DBA5, 0x031BFB98, 0x6CD1D883, 0x2680F5B8, 0x0E385B17,
+0x7D089D94, 0x7065FC96, 0x408703F0, 0xF34FEED6, 0xDA948293, 0xA0630D79, 0xE5778891, 0xE8C7D9DF,
+0xED78A6D7, 0x6B290B35, 0x419D5455, 0xE5C144D7, 0xC0C7D27A, 0x02BE4FFD, 0x003B0EC3, 0x84451CE1,
+0x5EB31E3F, 0xB9564C72, 0xE7B0065C, 0x3DF771AF, 0x4D39E738, 0xD737C6A8, 0x7FA5FDFC, 0xDCA3468B,
+0x16ACA023, 0x788452A8, 0x15F0E0D1, 0xBF23728A, 0xC55D9C56, 0x8A381A90, 0x849BC033, 0x3731B93D,
+0x244C819D, 0xBF433DEA, 0xE1A7EE68, 0x990E08C6, 0x512D0A7F, 0xB60BCEE6, 0xD229AEF0, 0x3325388B,
+0x2D5C55F5, 0x67E2A001, 0x4B88BF83, 0x84AA7734, 0x0CAD7A1E, 0x15EA7BA7, 0x9B046742, 0x8E84D533,
+0xEB1FE715, 0xB8772ADE, 0x802BFB98, 0x64B9E0F6, 0x876D1661, 0x99452C81, 0x4A0C314E, 0xE2148E5E,
+0x34839DF8, 0x2C953162, 0x1DCF701A, 0x9C927E47, 0x8E9EB275, 0xABCB40E6, 0xA3BD56A7, 0x92002D75,
+0x4AADA1C1, 0x7AA2DD81, 0x849734D1, 0x36053662, 0x23B42515, 0x134285E5, 0x21F04CC6, 0x61AB1387,
+0xE8737B6F, 0x3BB69ACD, 0x0B368124, 0xD48EE6A3, 0xA7A81980, 0x8D640713, 0x101654C8, 0x7DE6B989,
+0xBABF39EA, 0xA1272FBB, 0x11C64F07, 0xA3449654, 0x81B23E48, 0x353E43DF, 0x07620694, 0x9FC3E12D,
+0x8E45241F, 0x4FBAAABF, 0x7C63D311, 0x43253213, 0xD75B57F1, 0x21E43A63, 0x1F04729C, 0x11C2617F,
+0x9D408301, 0x6F6BF240, 0x94969EBD, 0x5119C6D9, 0x9F918691, 0x6ADFCCA3, 0x370D2877, 0xDC7543C4,
+0xAABDD7DE, 0x7DD16580, 0x40DC4F81, 0x260DBE72, 0x24D08914, 0xCADDEDE1, 0xE22DC31D, 0xB812D7B0,
+0x413C5184, 0xF46D905B, 0xAF0F4860, 0xBE7291BB, 0x3FCC57DD, 0x2B857E00, 0xFEAB8E3F, 0x34774CAF,
+0xCB5E86C0, 0x9906043C, 0x06B6D263, 0xBBEFF098, 0x9D88F258, 0x1248FCFA, 0x75668363, 0xA7AFB56C,
+0xC09CD473, 0xBC872A7B, 0x0BD78867, 0x5BB697FF, 0xB453DA53, 0x4A16B373, 0x37A96CCD, 0xA1BE5B30,
+0xEF057331, 0xE0B45795, 0x9FAEDDA3, 0x5227E333, 0x151A5A56, 0x20F5BB98, 0xCE730A82, 0x83C49F58,
+0x5BF7A563, 0x7A683AD6, 0x5E1D7FC9, 0xD816F725, 0x863C42DC, 0xFEE051C8, 0xFA371D22, 0x6682DEF8,
+0x66FB10A3, 0x90D5EFF6, 0x954E7C5C, 0xEB922864, 0x09D871C2, 0x9031B154, 0xEB346236, 0x5D3622D3,
+0xCEB9DF02, 0x81B36C01, 0x13889E88, 0x620CE610, 0xF08D5679, 0x995B6E67, 0x68DFFE82, 0x6A564262,
+0xFCFEF05A, 0x0AF2F6F2, 0x67BB4CCD, 0x2C433219, 0xF576EB74, 0x56C2AD07, 0x5230DA82, 0x180F81AA,
+0x04A0FA16, 0xA4DD5EC4, 0xEEB62931, 0x3E1599A3, 0xD581546A, 0xB558A7F2, 0x008DB5CD, 0xC582746C,
+0x52A60F28, 0x678AB3CE, 0xDC6E4A9F, 0xEE63C012, 0xE4D5D636, 0x35F5189F, 0x114F9B8B, 0x1D2A5591,
+0xF9F11DBF, 0xCF27BCB9, 0x9695F5D5, 0xD9571F5B, 0x264028FA, 0x330914EB, 0x686FDF27, 0x27B1E3C2,
+0xDA50609A, 0x5F0D497A, 0xD84CEF92, 0x1F33D13E, 0x1815A74C, 0x0F596173, 0xBA62D7AF, 0x69E98E45,
+0x073EAFF5, 0xAD8E329F, 0x01867783, 0x4D4E7E20, 0xEB87FEF8, 0xD75C52F1, 0xB7550AFC, 0x0C7C1D4B,
+0x3C68F63B, 0x5D84FC5D, 0xD8219E3B, 0xD3FBCBAA, 0xE6D590A6, 0x2E13DA23, 0x6C70C87B, 0x70364248,
+0x4A9A672F, 0x815AA09F, 0xE04978B1, 0xC7C4B5C2, 0x276E5F67, 0x8E745F03, 0xAE9EB53A, 0xE9456EC6,
+0x8A59B645, 0x5C8B20A6, 0x8EE87374, 0x801B7CEE, 0xCBDE4EA4, 0x4BB69400, 0xAAFD9928, 0x787A5D71,
+0xBAA6BF14, 0x55ED8812, 0xBE58C473, 0x0F389CB7, 0x2B8047F2, 0x2CA594AC, 0x5BE46453, 0x438088AA,
+0xEF9B96D1, 0x5FEE8470, 0xC99D39FF, 0x636B9C69, 0xD5256435, 0x3BBAF533, 0xDD607F7E, 0x3CADEFFC,
+0x29ABECE5, 0x0B814CB9, 0x935D74F6, 0x8F17727A, 0x902BB7E9, 0xDA8E5B3F, 0x21F6544E, 0xA65FC059,
+0x8D3743A5, 0xD8B4ECCC, 0xE14972F0, 0x71E2882D, 0xE7E9DFF9, 0xE5BB8CA4, 0xBB9394A0, 0xBCCC5EE6,
+0x7AA9E5B7, 0xBB25AB96, 0x3743E397, 0xAB63AE9A, 0x7ED084B9, 0x6990646A, 0xF3998A02, 0x3BF98036,
+0xEFA92AF0, 0x434308F0, 0x38C84E8F, 0x3FBDA95E, 0xFF741F5A, 0xBCC186A0, 0x89476FB7, 0x2D252246,
+0x47FB10FF, 0xD457F6D5, 0xC0BAD921, 0x44A7A14E, 0x7BDB63A6, 0xA4DB81A0, 0x1548789D, 0xD8EA1BA1,
+0xDF72F3C2, 0x76CAB43C, 0x69D2BA39, 0xC0352D14, 0xB71E116C, 0x80E1CAEF, 0xF4162B8F, 0xFC04A345,
+0x3A523898, 0x2799E580, 0x767B4CF0, 0x3728FECA, 0xECEAAA2C, 0x89840B5E, 0xF4F1C30D, 0xE2ED04D0,
+0x8E82AB28, 0xE6076606, 0x05C6F4A1, 0xFA22EFCA, 0x56AD1F39, 0xFA125C7C, 0x1F11C97F, 0x12969D19,
+0x55DF9F62, 0xCC091601, 0xCF69B2E2, 0x3527E45E, 0x6D124375, 0x32922A2C, 0x943C8E52, 0xDE91B972,
+0xB0863879, 0x6B1ED3B1, 0xC10F90F9, 0xC5D40B3F, 0xA3B70887, 0x611AD581, 0x724A1947, 0x047485EA,
+0x616628EB, 0x438DD101, 0x45663667, 0x4F9B9D32, 0xE76024DA, 0xA48DBDF6, 0xD3739FB4, 0x47672B32,
+0x34CBB7B0, 0xD1F62A95, 0xFCDEA3D7, 0x65EFD199, 0xA99DFF68, 0xAA57AD5E, 0x12C0401D, 0xA7C470C2,
+0xB3A8C794, 0x447790E7, 0x6A82800D, 0x2E68819C, 0x8FE1627E, 0x12A698BF, 0x1695D305, 0x20C730A7,
+0x39E82F69, 0xADC1AD1C, 0xDB2AB3E3, 0x6DD420FF, 0x0213DBDD, 0xBA8796A5, 0x697E6566, 0xA656D061,
+0x5D283F2F, 0x19D3D66C, 0xBD27ED13, 0x14007B06, 0x36F6DA79, 0x2420179D, 0xD3637419, 0xC6F71622,
+0x673566E7, 0x140496DA, 0xB0F0537D, 0x1E9326E5, 0x26FBDE0B, 0x99143F93, 0xA12C7E29, 0xCD236889,
+0xAD4A65EB, 0x53F7FE98, 0x3679E87C, 0x3E42A557, 0x15ECB0A1, 0x46653694, 0x32565EED, 0x1BA542A8,
+0xC95B83E8, 0x3D73563C, 0x61969E57, 0xF1C5E433, 0xD3BC1B73, 0x56409082, 0x56E0D75B, 0x4BC52479,
+0x6DCD02F1, 0xE07E4B0D, 0x8CB76A98, 0xFE3FFFF1, 0xFE4039B0, 0x07E542D4, 0x4F5E831C, 0xD4669943,
+0x1C13EB23, 0x1CF43FDB, 0xA404E982, 0x5AE841C5, 0x7BCC6F7F, 0xAAE61B90, 0xAECEFCE2, 0x512F5C69,
+0x1B247E38, 0x791DBA83, 0xA93A869E, 0xA5F7DE6E, 0x40BF1C18, 0xB4CD74F4, 0x777937FC, 0x69046EF9,
+0x7A58E65A, 0x176DDCCB, 0x6A1FA8D3, 0x10C35FE4, 0x6DF5C1C6, 0x5C0297F3, 0x0B3932D4, 0x12B562C3,
+0xAC44CEA5, 0x8441C141, 0xE3290D1C, 0x972777B5, 0x6BC765F4, 0x18403578, 0x9425BBC7, 0xECD9D658,
+0x9A1FF10B, 0xF35415BC, 0x95286963, 0xE4D44C06, 0xAC5F7AD5, 0xD584A4CB, 0xA2CEA75A, 0xACBE6A52,
+0x91D3CAB1, 0xE3943B79, 0x4AE76EB3, 0x8EE5BC34, 0x2A11638D, 0xF59F278D, 0x7A405444, 0xEF3C2216,
+0x6A99DC66, 0x40EE8EC1, 0x853A62BF, 0x8FED2719, 0x24CF720E, 0xEB3619AB, 0x97750F2D, 0x4E67B3E2,
+0x30CDB0DF, 0x5DF9DA1B, 0x41E05430, 0xA1D85C8F, 0x77832C6E, 0xDED200AB, 0xEBF1503E, 0x734F4772,
+0x97999C62, 0x66B7D029, 0x8DF668C8, 0xE70800C2, 0x428899B9, 0x23A1F381, 0xDC8C8A20, 0x70633B8C,
+0x80670BA2, 0xDD9E6F07, 0xD20BCFF2, 0x41DB5CBF, 0x46CF17C7, 0x8D1B72C5, 0x466EA0FC, 0x18453018,
+0xA263ECF8, 0x9FF4E5CD, 0x9B8A336B, 0x26F77BD6, 0x05770CC0, 0x081F4B99, 0x38276059, 0xFC3FAC33,
+0xF6DCBC98, 0x95556A3E, 0x1B4338E6, 0x9C471467, 0x5303F077, 0xD0D606B8, 0x1A6A36F4, 0x748C73CB,
+0x0E6AD39F, 0x665E6594, 0xC80CFE0C, 0x6F69B4DC, 0x1EA1D2FB, 0x9DA1D881, 0xD508FBC0, 0xA5D00EC9,
+0x52C796C6, 0xF11DC649, 0x7C53A1B7, 0xEF22838B, 0xA90FF765, 0x343323BA, 0xE68C31EA, 0xC4B968D9,
+0x3396ADEE, 0x332A01F4, 0xB4AE1954, 0xAB21A6E4, 0x3AAF31A7, 0x4C780FC2, 0x24B5AC1F, 0x1847AAB1,
+0x3AA013EF, 0xB1082B0D, 0x361CE24A, 0x42F6013A, 0x57BC16FF, 0x1F5BB96D, 0x526A3665, 0x02C0F66E,
+0x22DD4B75, 0xD592664C, 0x7A0F1377, 0x08B00B5A, 0x3AA00A3F, 0x67B26985, 0xF8E13C42, 0x7077709A,
+0x608859F4, 0x4B0E8F7E, 0xFD844248, 0xCAD62700, 0xEE9220C5, 0x94A78EFD, 0xD12A980A, 0xFDE4DEBE,
+0x0DEBA5DC, 0x73032C15, 0x76848315, 0xF35889BC, 0x837F3321, 0xE9088722, 0xAB86F97A, 0xDA187259,
+0x2E6CBF09, 0xD4CBF114, 0xA439DA5F, 0xADC7A554, 0x2E100FF8, 0x2D89D5C0, 0x3D3B37E7, 0x9E84BDBC,
+0x5F72BDFB, 0x4B623B97, 0x8D7CC834, 0x5B0D2259, 0x814E5EC4, 0x3E47E44F, 0x8DF5C58E, 0x8B91C02D,
+0x1FCD22C6, 0xB21C457A, 0x745F2757, 0x16171C78, 0x8A321168, 0x55164D8E, 0x95777919, 0x0B7D2C93,
+0xB2B4F1D8, 0x7B10CD35, 0x72E19E2B, 0x9A7743AC, 0x9F012167, 0xEE069665, 0x54A3B4CD, 0xE1B90D60,
+0x8E9505B6, 0xC50DE952, 0x921BE009, 0xCAA1AEE2, 0x27C1FE62, 0x3722363A, 0x356F90AE, 0xEEC99854,
+0x05A6FF76, 0x17BB3801, 0xBE525E71, 0x15BB3C07, 0xA8095B48, 0x8CBAA25B, 0xE4F46B1B, 0x47AEC6D0,
+0x56663441, 0xE5B313D9, 0x9FAAEA38, 0x6B8123A8, 0x57583D2C, 0x3DB19CD7, 0x1480DC1A, 0x863362F7,
+0xE65C58EA, 0x08B93B1F, 0x7596BB91, 0x8E75184E, 0xBE8C50C8, 0xAB58C7DF, 0xC04D1141, 0x77B458EB,
+0x2C276166, 0x937164E8, 0xC5B966EF, 0xA0D8C325, 0x3F66FF6E, 0x9D688BD6, 0x24B05D02, 0xE2AFBEDD,
+0xA50367A9, 0xC0A6E930, 0xDD30FD29, 0x0265CBE9, 0x844C52E4, 0xE61996F8, 0x57F1FB1E, 0xD0E842B3,
+0x1C34710C, 0x27DA2FBB, 0x80B8F67F, 0x5BD35580, 0xBDC88150, 0x58302AC1, 0xB8977BDF, 0xADF26683,
+0x31E21072, 0x2AFBE676, 0x338EAE21, 0xCAA7C788, 0x4EB9AD04, 0x5E966858, 0x37EBC3F4, 0xC0663AA5,
+0x96B94D57, 0x8D45ABFE, 0x3186DE40, 0x93FBB284, 0xB2EA4473, 0x03DA3013, 0x4CF966F3, 0x7CD7F048,
+0x424C0039, 0x804602DD, 0xEC82EAFE, 0x400ACA01, 0x617673A3, 0x3BBB0589, 0x1FD1C11E, 0x80753390,
+0x449B4581, 0xC9518D4F, 0x63F48FD9, 0x96F95CAA, 0x0CFBCBB4, 0xC60F6302, 0xF97D142E, 0x093C5D49,
+0x6687AB8A, 0x42FAF9B3, 0xC3DBCA75, 0xD0EE5D6F, 0x2F05041C, 0x5412E8B4, 0x9E28AFA4, 0x3FC4B360,
+0x429B9C0B, 0x19DDB103, 0xCF1042F6, 0x04F12798, 0xE6B881A8, 0x2EC3451B, 0xD19F411C, 0x22739DAF,
+0x60E61471, 0x553285B9, 0xBF2C58E3, 0xC3A94DAD, 0x084AE7FE, 0xC029A1A9, 0x43884CDD, 0x73F39920,
+0x4D75160A, 0x733C1121, 0x10A0019B, 0x4F9B5228, 0x3638BDE1, 0xDFEB1188, 0x3E95E39E, 0xFA49620A,
+0xE698C654, 0x4B27E0D6, 0xDF18D38A, 0xB561A2B8, 0xBC9E04F9, 0xD6D95913, 0xEFAC0BFE, 0x08DE08F7,
+0x3249C12C, 0x0C079D01, 0x208CB3A1, 0x3D6C6266, 0xA155359E, 0x2B4520B6, 0x79C2DEFB, 0xF915BFD1,
+0x4855E360, 0x18542ED6, 0x8B16B3C8, 0xE7F72AB7, 0x80D21321, 0xD355DA96, 0x89E7E546, 0xBA8FA2BD,
+0x45EB7596, 0x54ECB722, 0x468F4EE7, 0xB3B37DA2, 0xF51ED366, 0x643464B5, 0xD378C9E9, 0xEAB55720,
+0x4331DEAD, 0x9CB40C60, 0x4EE2ED30, 0x69416483, 0x885F927A, 0x908B99BE, 0x9DDF3E63, 0x81D284C1,
+0xDE21578D, 0xB34632BB, 0x3166B17E, 0x193F6100, 0xD2785BA0, 0xA78645BB, 0xE0820D6C, 0xF49BD2E0,
+0xF1185400, 0x7F09C341, 0x84690FE1, 0x9EB93A08, 0x702578A5, 0xC3AF7021, 0xC5AEA2D1, 0x7CAFD5A6,
+0xECA8D717, 0x147CEE07, 0x5054BB24, 0x7DA1D505, 0x79C38250, 0xDA875B0F, 0x34894843, 0x13075941,
+0xB1AE67AF, 0x75A60BDA, 0xDF5D8D3F, 0x487AF564, 0x304244D1, 0x2E239E0B, 0xCB93C4E8, 0xC1D142B7,
+0x12BDA5B3, 0xC74A2AC7, 0xB01CB961, 0xD4EA389F, 0x49895954, 0x6CD532B2, 0x625BDFAC, 0x9B52E045,
+0xDF9EF66D, 0x5387F127, 0x3BED4AEA, 0xAAC96652, 0xE5736536, 0xC4A4D017, 0xA7467F59, 0x6540D258,
+0x022CEA46, 0xB22F60D0, 0xC0343FF5, 0xB26070B6, 0xE00D5DED, 0xD4D29E01, 0x8ED2033F, 0x7B560106,
+0xFD1E3AC9, 0xFE22EECA, 0x4E6830B4, 0x05845D9B, 0x16EDD11A, 0x215076D3, 0x9672521D, 0x20C83A9C,
+0x6C25FCD8, 0x8E0DB76E, 0xBE0BFA3D, 0x90CF3791, 0xD04EB276, 0xAA9C1BCC, 0x9A52A556, 0x98034C93,
+0x32644A19, 0x9CE7340C, 0x5B795B8A, 0x4C158E8A, 0x72427FA0, 0x26B29E9B, 0x54FD832E, 0x9D8A22D7,
+0x3C345E94, 0xEEF472AD, 0xD3B8DF36, 0xDD83421D, 0x6ABB85A2, 0x3F6FE53F, 0x049DC909, 0xEB28A475,
+0x3BE25519, 0x1B91F1A4, 0x3ED593EF, 0x6263BAC3, 0xD4DBA229, 0xD8054767, 0x9B7F7E97, 0x2C1C96A0,
+0x6B5CA871, 0x2736677D, 0xE2DEC951, 0xC8FD9731, 0x349F9B3F, 0xB21F91D9, 0x80B1976C, 0x39B7AB75,
+0xDEFA299A, 0x81371EED, 0x14C53046, 0x4E803246, 0xA2DE0197, 0x9575061B, 0x83598E50, 0x260297DC,
+0x3F4263EA, 0xC54D2CC8, 0xBC472F6E, 0x449EECD2, 0x8A8A2CB8, 0x08E3B997, 0xB0B1F768, 0x378FB1EC,
+0x6BB04D8B, 0xF8005EA4, 0x44C63243, 0xC6FB5BA1, 0x16657F7F, 0xBC3B7428, 0x3BA696AA, 0x56FAA4DF,
+0x8E11AB70, 0xEF397009, 0x1550EDE9, 0x5EE50B7C, 0x94DBC463, 0x26459F03, 0x8E4E943C, 0x9563B0A3,
+0x4058DC9A, 0x30303828, 0xBD6EEA84, 0x35CFAC2C, 0xA41F24D8, 0x03C84DE6, 0xD2F4FA80, 0x5D64175B,
+0x0D03BE1F, 0x261EAFC8, 0x53E0C35A, 0xF56A70EF, 0x742FE019, 0x60C167A4, 0x71DF2476, 0x87306B55,
+0x7E04E4B5, 0x1340743E, 0xA6AFE892, 0x7A9DA2E0, 0x35CD21D3, 0x0E3E4451, 0xCC26FD1E, 0xE2ECCBC5,
+0xD298EB53, 0xE3B4C757, 0x83B3AE57, 0x6DAC1CA3, 0x57FDE16C, 0xB7E7AEE7, 0x7C6688D1, 0xDAA51816,
+0x8A4B95BF, 0xF084DE25, 0xD831F9C0, 0x3BF2DAA2, 0x30E5BF7D, 0x0DBCC2CE, 0x7143C4E2, 0xFB9F8027,
+0xCAFB90DB, 0x8A476B9F, 0xFB8F497C, 0x1C470FDE, 0x6B8F23C2, 0x21CAF134, 0x91B95294, 0x90F80FB9,
+0x15E4FACA, 0x322AAE41, 0xF473C7B9, 0xFC9FCDF8, 0x9D4E4DAF, 0xD84FF97A, 0xFD4EEF38, 0xB357C959,
+0xCA10BCFB, 0x5E6BB833, 0xB90D276E, 0x8566F7F3, 0x88B638B1, 0x0F446459, 0x4A1810CF, 0x51222F72,
+0xE165A8E6, 0x4D67E318, 0x3502BB6F, 0x919731AA, 0x29982D8B, 0x0B8EE4AD, 0xAD6E03DD, 0x43726E71,
+0x10FAA3B6, 0x7225F775, 0x30A5E11A, 0xEB45DADB, 0xC6E708D3, 0x15365F02, 0xC923C659, 0x50E26826,
+0xB73942BD, 0x4BD104DB, 0x551E4F8C, 0x587D536E, 0xDB83B546, 0xE1200B72, 0xA63E6F98, 0xD52FFA4C,
+0xB410AD5B, 0x919DA83A, 0x1828EDD2, 0x7EA48326, 0xE8250D8C, 0x5D56AA68, 0x241A4A27, 0xCFC44106,
+0x276C239C, 0x220611F4, 0xC27B6AD5, 0x13D8CA61, 0x8B878742, 0xF8FDC907, 0xDA5598FF, 0x875B75CA,
+0xEE4A0436, 0x1AA08152, 0x7D1CD878, 0xFC0CD856, 0x73BAD751, 0x0B8FBEB0, 0xDA16A182, 0xC8F8CE48,
+0x67A388BF, 0xE24C85FF, 0xB65CA508, 0x36D706CA, 0x38EE0CE4, 0x649140D9, 0x1DFBD400, 0xBAD1AFC3,
+0xB0907F85, 0xADD5717B, 0xC5438C99, 0x2067FA1F, 0xD093EDCA, 0x73003249, 0x2A98C63A, 0x1FC6806F,
+0x3A097A24, 0x2E2D9AAF, 0x92D19CAD, 0xED01C640, 0x7A639599, 0xE382BB5A, 0x581490EF, 0x0E80DAFD,
+0xCEEF025E, 0xB101F1C7, 0xA966749D, 0xD170C3DF, 0xE6C0DE59, 0xBC789759, 0xC918E13E, 0x37AE05E8,
+0x0A8F1928, 0xDCB5404A, 0xD1879112, 0x0E064082, 0xB3EEE7CF, 0xDDB696E3, 0x7E00314D, 0x48B82EF0,
+0x655865F1, 0x3356E9F1, 0x602612F7, 0xD3C97B64, 0xD25B3B87, 0xB4E8A29D, 0x8C6EFB17, 0x87E1B7FC,
+0xE34BCC1E, 0x47F684F1, 0xAB73A429, 0xE0D01B2D, 0x05036B3D, 0x9E01CE4F, 0x5BAD1589, 0xA1BCD51B,
+0x1286C45F, 0xB29BC4DF, 0xF264CAC5, 0xBFDBB697, 0x593E1FD9, 0xBEE26FA2, 0x592314FC, 0x4744DE65,
+0xC450DF37, 0xFBFE2A3D, 0x40C4E5D6, 0x4E17A72A, 0x66EC60A6, 0xE1438B76, 0x16B1BAF2, 0x1FE42502,
+0x572F731C, 0x057BF74C, 0x8DFE09BF, 0xCF5D276B, 0x161D4E61, 0x990CCFF9, 0x6BA74D76, 0x8F46259D,
+0x89736625, 0x2EB96858, 0x88F7D5E9, 0x138FCB0C, 0xAAF3A86B, 0xF33E70F5, 0x8CC12CF6, 0x677AA0B0,
+0x3D2F7624, 0x5CCB7AE0, 0x5DF55BF6, 0xE43D338A, 0x83E286DB, 0xEB9648EF, 0xDBBAC4E1, 0xB4F6E32B,
+0xAF2672FD, 0xBE781199, 0x70AAA7A2, 0xFEA0A2F3, 0x6F0E0A99, 0xB6602CDC, 0x4E1C07B2, 0x7267A34C,
+0xB7E31B76, 0x493B4769, 0x90E82DC1, 0x551C459A, 0xEC7FCE57, 0x52ED8F7A, 0x16C09405, 0x96AFC1CA,
+0xD2286412, 0x8416F127, 0x017F2DB0, 0xA05B1236, 0x0E99B670, 0x92908704, 0x81792F1D, 0x6418CAF5,
+0x3D3AA5B6, 0x3B3E42B5, 0xA7932675, 0xD50E0B6B, 0xBB37AC15, 0x53EEB180, 0x74F5C7F7, 0xBA14C3D6,
+0x19ED3E83, 0x2F91C8CD, 0xB9149EAE, 0xCD966819, 0x23609C95, 0x369FABCD, 0xE957A958, 0x1ABC67ED,
+0xA407DF6A, 0xAD2B301D, 0xE0F29B93, 0x2EF8B5A8, 0xB866A405, 0x614AA6B1, 0xA4FF547F, 0x9A62588E,
+0xDBDE50CC, 0xF2B1D87C, 0x6E5CB0C9, 0xBFF11B73, 0xF706C181, 0x28A9586A, 0x268729C3, 0x3889B5F8,
+0x1CDF645D, 0x72575BFB, 0x2AEA2B7A, 0xF3A7114E, 0x2847ADCF, 0x6158CE3A, 0xA38C366B, 0x2FF5DA79,
+0x6B2D30F8, 0x3F339A03, 0xC4304281, 0x30BD30A1, 0xA326980F, 0x6D445508, 0x84A13619, 0x97B48785,
+0x87488CA4, 0x8FECC4C4, 0xB21BF6B6, 0x822D356F, 0x640E9049, 0xF039A411, 0x63FCEC6B, 0x19024AF3,
+0x2DA9D458, 0x9570A1E6, 0xA52ADC0B, 0x898FBCD2, 0x0554F608, 0x87CE4A07, 0x079C74BE, 0x6E0F8FB7,
+0x63136C92, 0xB61D3704, 0x466B3B63, 0x6930D37B, 0x15BD5B1F, 0x2B3B64BF, 0xE835E1B1, 0x12473693,
+0xF72C523A, 0x1BE8635B, 0xE70B9A11, 0x16AAD18E, 0xB3C318B0, 0x1470AB6F, 0xE75708BF, 0x28A283F3,
+0xE20866A5, 0x04658663, 0x3304410E, 0x0B060344, 0xD24F9D9B, 0x6DC4693B, 0xD1CFB775, 0xE43AF60E,
+0x718C37AD, 0x4CB3F081, 0xAB551F44, 0x6414ABA5, 0x43FFED18, 0x565EDC72, 0xFFA7523C, 0x5A323591,
+0x76C16502, 0xAD1DC557, 0x8243E33D, 0x20254678, 0x3F0DC9D5, 0x5B400DFC, 0x3DED9923, 0xECB0BDD1,
+0xAE8F3F69, 0x3C885985, 0x217BEF4B, 0x094C677E, 0xD32CA716, 0x09AE74B4, 0x799E9802, 0x65340BA2,
+0x32BEF796, 0x3696906D, 0xC4E756C9, 0xB8101413, 0xFB5A0C1C, 0x3EF4423F, 0xF179D7F8, 0x30CEF62E,
+0x28C6C536, 0x79752CE7, 0xB5BB8E8E, 0xBF7E1226, 0x25E78E11, 0x2FF40ED6, 0x62631912, 0xCDAFF161,
+0x9A46E09E, 0xE38B533B, 0xFF1426F7, 0x563A9A8B, 0x4188F97B, 0x230CBC34, 0xC02B1A18, 0x526FB19E,
+0x1F1DC31C, 0x9B2DDE09, 0xD688DAE1, 0x71FC12D5, 0x45BEB0DE, 0xBAB2E946, 0xCAE80F82, 0xBFCA5F0B,
+0x2BBB21BC, 0x0352E6EF, 0xEDDF296D, 0x3C0FECC3, 0xBCD9E114, 0x5FD2FC10, 0xE39232C5, 0xBBF53550,
+0x6BC1F62A, 0x7417E34E, 0xF6213AF8, 0x1094FE62, 0x07AA77E5, 0x0B6C1632, 0x0C92BC73, 0xAF5A5EE9,
+0xBF91FE25, 0x93A0C228, 0xDBDA03D5, 0x4923C314, 0xE0CD57DF, 0x1782DEBE, 0xDF25DCCD, 0x4D319EA8,
+0x256CE2C8, 0x93EE818C, 0x3F1E706A, 0xF6074A46, 0x4711A649, 0x3657D0B0, 0xE67CAE39, 0x138390DB,
+0x69757D43, 0x54180539, 0x7E0F77CC, 0x6AE58223, 0x91D6BCAC, 0x9AAD27F8, 0x51C1D253, 0xE15CE5ED,
+0x88A1D631, 0xB6ECC7E9, 0xD5C9C349, 0xE2588439, 0x71DEF75B, 0x6CB2D40C, 0x5AEADFFC, 0x5102CA4A,
+0x3E56CFB1, 0x2E76F0E5, 0xB1C71C71, 0x098D0B2F, 0x3DCC9BB0, 0xE5CEA5DB, 0x8CB20BB7, 0xBD5BFCF7,
+0xFB4F188C, 0x95BA5BD0, 0x1362DB3D, 0x4599EBFB, 0xC60B61BA, 0x2075D885, 0xDB275926, 0xFB0C28B6,
+0x21E3000E, 0x0A8A83C3, 0xC938D77E, 0xD922F4A1, 0x68A4D08C, 0xE67AD4A9, 0x47A87EBA, 0xE842E6E2,
+0x9FAF9481, 0x63F6BAD0, 0x9B115FA5, 0xC709B50A, 0x6E7B6217, 0xCE3A2320, 0x6B76E037, 0xEA6CC022,
+0x9F5EB73F, 0xD20FFCA3, 0x916E75B1, 0x84760EE2, 0xDFA5BDF2, 0x31751ECD, 0xE3099272, 0xCAAB2B4B,
+0x2A88F33A, 0xD660A7E1, 0x9E6BBA32, 0xBF0136CE, 0x476D5BF8, 0xCAB0BD53, 0x255963B9, 0x104C59FD,
+0xE3539CB2, 0xB85C97DE, 0x17A0FE08, 0xA814AA77, 0xBCAD621E, 0xF28C1848, 0x61335663, 0x19748E68,
+0xEB5C4F11, 0x36A11365, 0x09A3B2B0, 0x95A70544, 0x42C6A751, 0xD9D85654, 0x3D169ADA, 0x120347DA,
+0x0AB4029F, 0x7AA6B0A7, 0xC64EA4CD, 0xDFBC6C61, 0x01AFEBA6, 0x07E5DDA9, 0x377BC037, 0x5B37F4BF,
+0x576430D7, 0xC9993F56, 0xDA41AC85, 0xC1766BBB, 0x749E19D3, 0xAEA8E90B, 0x318DE603, 0x2005B18F,
+0x52B0B0FA, 0xACD5DD3C, 0xCEDCC3A5, 0x91D66A86, 0xEBCABC04, 0x13889F74, 0x4FDA98EC, 0x5A8E89B3,
+0xC61992BC, 0x5642927D, 0x263D6C9D, 0xBD9D060C, 0x92AFDF76, 0xB0FEEEBB, 0xCA54189C, 0x103279DB,
+0x988BB871, 0x07B45CDA, 0xA9DE5BCC, 0xE5B110A3, 0xBFDC4AF5, 0x5D947667, 0xE70500A0, 0x2BCDE478,
+0xDF142EC3, 0xCC7DBB2D, 0x9F75094C, 0x2705E2CC, 0x9015D915, 0x2818ECD2, 0x23418630, 0x4C664129,
+0x815FAC54, 0x0AFC1377, 0xBF604430, 0x71A91360, 0x1BA88D38, 0x331E5943, 0x8BBE311B, 0x9ACD3100,
+0x94E33428, 0x6739AFFF, 0x548734CA, 0xA2CA9003, 0x797126B1, 0xFBEA6190, 0xC9B7644F, 0x00733195,
+0x1DC0B74B, 0x944CFE03, 0x9C49DA27, 0x975DBC86, 0x77D6B26A, 0xA1D38137, 0x507E5C5F, 0xBBA8B1CF,
+0x8CF4C004, 0x7181AF25, 0xA2526669, 0xB7978C4C, 0xB06F7339, 0x487784AB, 0xBF3A3C56, 0x98A7C161,
+0x9F5BB73B, 0xCDE3F684, 0xA641A61A, 0xFCA64B59, 0xA9EFCC73, 0x18AE6F4E, 0x9DCADF4B, 0x98F52E38,
+0xE573BCF9, 0xBE2BE94C, 0x406DF061, 0x9770DC19, 0x747FB649, 0x59698671, 0x2C4A0AE5, 0xE4F83B60,
+0x2DDD21D1, 0xBEA91714, 0xD8D25ADC, 0x7555D39A, 0x22104844, 0x550A4206, 0x4AA40A0B, 0xA1EA7657,
+0xCE437E96, 0x0FC45B03, 0x914C19BF, 0x66877180, 0x6EA56DFD, 0x696714CB, 0x8EDE0971, 0x3C4827B4,
+0xEB2C66CE, 0xA89700BD, 0x7593CCCE, 0xC3DEA713, 0xD6693F79, 0x546AED2F, 0x63628E8D, 0x955F0EB1,
+0x336E4E8B, 0xA0804892, 0x0C37ACB1, 0x891FAC32, 0xC29531B2, 0x7A4FBECE, 0x06DF656F, 0x3912923C,
+0xC539F65B, 0xAF21A1B2, 0x158AF633, 0x2E1E9936, 0x9ADDDC88, 0x73969B60, 0x9C503310, 0xC300FF96,
+0xD2CA3C99, 0x55765163, 0x08C1734D, 0x8A35D8EA, 0x0EA7C3F6, 0xE1520979, 0x478E543D, 0x52F0BBA8,
+0xDDF07D03, 0xFABD45FE, 0xD159D028, 0xDFF9EA33, 0x4B74752E, 0x5E409672, 0xE79E4FC9, 0xA0260304,
+0xF3395045, 0xD9615FF1, 0x624B0E50, 0x3A20305C, 0x57A92550, 0x1626DD50, 0xCA69496F, 0x9113EA3E,
+0x1D218038, 0x5F0DF5B6, 0xACC96A4B, 0xB339DD5F, 0xF294789B, 0x0B459630, 0xD2427BCD, 0xB0A69803,
+0x50F8FD6E, 0xF21602D6, 0xEF1C40C8, 0x0AF6DAD5, 0x3A657084, 0x28778BA3, 0x46D7D605, 0x297E2E6B,
+0x2E45F78E, 0xBFF687FD, 0xB8E52179, 0x4F5EC780, 0x9D739E04, 0xD9B56F6B, 0x57F4CC4C, 0x96C5F895,
+0x56186A49, 0xBC28B2CF, 0x82B5A6E1, 0xFDF4009E, 0x342788D0, 0x65374599, 0x0E323C02, 0xD5BFDA0F,
+0xF3C7A807, 0xC722BC13, 0xC89A2EDD, 0x04C4A17C, 0x03F73665, 0x5B6B3F3F, 0xD138C4EA, 0x43239E31,
+0x8C40DC31, 0xC1770546, 0x7024DE2C, 0xDD57B6DA, 0xA3EC8E8F, 0xA93EB154, 0x15AD8D14, 0x05ACDFD4,
+0x460E3808, 0x1AE9433D, 0xD6ADA9E0, 0x2C2F7613, 0x98662D40, 0x4BE61545, 0xE84A63A3, 0xCAD28975,
+0xD2555EE7, 0xD7675B1B, 0x0C9F664E, 0x4A9E39C0, 0x4A3CDCCE, 0x6BCACF79, 0x032FDCD8, 0x067E6B36,
+0x26B4287B, 0x398F2AB1, 0xBDF975F6, 0x0F93830D, 0x17851FB9, 0x8A618B09, 0x8CC6F9C4, 0xBEAB25FE,
+0x7AC1A685, 0x1A256111, 0xD791D6D3, 0x1B72AA54, 0xCB45E712, 0x402A994B, 0x4195FC1D, 0x804B8720,
+0xD45D9203, 0xF2383214, 0x081352B1, 0x8265C0F6, 0xEF7C9CCD, 0xEE0B4235, 0xB74B7A74, 0x763195C5,
+0x9434E57E, 0x63A235A1, 0xB6C4B440, 0xF0D02846, 0x00D70875, 0x84390019, 0xF69FC2BA, 0x6D883FBB,
+0xC03B929C, 0xA2B53A03, 0xADD1CDCB, 0xB948286F, 0x8FCE2526, 0xD6B36FBC, 0xD2C2EE64, 0x83E5666F,
+0x7193989D, 0xA18C47C1, 0xCCCD76C0, 0x47FD4B15, 0xBAB2750A, 0x3A60B9A2, 0xDCCE0CFE, 0x28D366A2,
+0x25EDB6FC, 0x165B9391, 0x1DB53471, 0xD7A51988, 0xD66A75A4, 0xF6817832, 0x4EA7124F, 0xDE3205CF,
+0xC5530A9B, 0x6F776CEB, 0x5F8C5FE8, 0x5DFD1C5D, 0x34EBF72A, 0x035734E6, 0x74E03661, 0x5D82949C,
+0x2BF90FB7, 0x17E834B8, 0x8C0597A9, 0x69D39556, 0x5DD85839, 0x3FE97903, 0xB018A1B3, 0xDB32C8BB,
+0x156C22F6, 0xE4746973, 0x06336F82, 0x55ADD769, 0x200F7332, 0xB1DE0E31, 0x3BEBB2B9, 0x9A4F021D,
+0xF83424DD, 0x165E9A94, 0x6B67A65A, 0x8E0EEC66, 0x1EFA70CC, 0xD3BD1F01, 0xF2AE1A72, 0xF84AB21E,
+0xB6872DD5, 0x052E5811, 0x21332D2F, 0x7DACDE5F, 0x8BF47922, 0x462567E3, 0x59DA9B1A, 0x9EB15EF4,
+0x99D39A7F, 0xDEC3AF41, 0x47C6E42E, 0xDDA0928F, 0x6551DDB6, 0x79E89721, 0x1FC3BBF9, 0xADD9025C,
+0x6E7CC40E, 0x9A7461C4, 0xB3A246CF, 0xBF1C283A, 0xEC57EABD, 0xD690EA07, 0xC90C1EB0, 0xA148C105,
+0x47C92C61, 0xB6ED0114, 0x64FA51E9, 0xD6EE13BE, 0xDFD33E5A, 0xEBCFC859, 0x2BF1B2E0, 0xA95A187B,
+0x7944741B, 0xD1EF93B9, 0xA8F101DC, 0xE0496B6B, 0xC3E622DA, 0x8881D80C, 0x5F4CFB7F, 0x2B02437D,
+0x51980392, 0xD49BE567, 0x2F3B112E, 0x2CAC320E, 0x9BF0F337, 0x5B70D002, 0x0A2E7D73, 0x406BD11C,
+0xD38768BD, 0x351C01C5, 0x0E4C38FC, 0xEE870867, 0xEF9F5C3A, 0xFBBD5DF6, 0x76DB3874, 0x1B168815,
+0x5642F168, 0x0471CE94, 0xCED297CD, 0x824CBE27, 0x643259AF, 0x97598C32, 0x68342C76, 0x085F8075,
+0xDFE7EE8F, 0xE0BEC094, 0x603A8F7C, 0xD9BDC201, 0x295885E6, 0xAF812C29, 0x12D84E21, 0x39BC009A,
+0x95E5D36D, 0xD2507A56, 0x9918B04C, 0xBFC62382, 0x44B3E2DB, 0x431C421B, 0xF13ADE21, 0x68AB495A,
+0xB8A1CA45, 0x9975FA43, 0x74EFB067, 0x12546996, 0xC031200C, 0xED1ED167, 0xC0EC9B20, 0x3C4F6811,
+0x33CCB832, 0x67B6F256, 0xA3B8660B, 0x6B041D4E, 0xB0AD9D7B, 0xEF6826E0, 0xB4BFA964, 0x305C6449,
+0xFB08FD3E, 0x0FFCFBDE, 0x3932A7C5, 0x6239882B, 0x404682E6, 0x8DF7A91E, 0x94AD0B8B, 0xF3938F23,
+0x2D7BF2FB, 0x21F9956C, 0xAB10DB6F, 0xD5F2C706, 0x2F6D72AB, 0x2D62D612, 0x26ABB5E4, 0xAB4A8CBD,
+0x9FFFDE13, 0x3B42FB77, 0x012A8335, 0xC47DE18A, 0x6D539642, 0x6B684E49, 0xDCC3FEDB, 0x620F311A,
+0xFF463481, 0x7AFDE1EE, 0x32DD916D, 0x3D3B7BA1, 0x14F52E16, 0x9FFEF79E, 0x7F6A31EB, 0xA4935051,
+0x5CD49CC9, 0xC58950DF, 0x2CCE7AAE, 0x7703D5A6, 0x8D8498CA, 0x6DE12F16, 0x8F2BE6FD, 0x8126323B,
+0x23DE30FB, 0x489646FD, 0xD724E5D4, 0x3A3A6E51, 0x9AF498B8, 0x4DF48008, 0xB24D76F2, 0x8146A100,
+0x08DB4B03, 0x4882A4BB, 0xC8637D0A, 0xAB1A96AE, 0x47E31027, 0x1525D68A, 0xC74ADC38, 0xE953695A,
+0x406721EF, 0x32435B02, 0x0D2AFC91, 0x8F20EC70, 0x680C360B, 0x0A299BB7, 0xB8690F94, 0x602A0155,
+0xC7949DF7, 0xDFF3342F, 0x9691A45E, 0xC3C3A2ED, 0x86D51408, 0x8E6B363E, 0xB97B2E8C, 0x6BE0B367,
+0x450D3DA3, 0x1B785A64, 0xE4EA2069, 0x905B4235, 0x6D217EE1, 0xD15250A1, 0x9555B384, 0x5ED52A83,
+0xD2FCE08A, 0x3AA1B3EF, 0x8377FB6C, 0xDD251EC7, 0xBA6BB818, 0x7B6B2E3F, 0x63475343, 0xE0871CFE,
+0x2CCFBE86, 0x205DEBB5, 0x43FEC9F3, 0xB50257C5, 0xCB22D59F, 0x1F734457, 0xB86C1291, 0xFD01A326,
+0xFDDCA305, 0xFAA83F19, 0x1FA30850, 0xD6CA552B, 0xAC471245, 0x9D933A36, 0x4045CC7B, 0xAF101FA5,
+0x4FE8371E, 0x284F209C, 0x9A4A5AEF, 0x7D486B2E, 0x361D1FC0, 0xA522087E, 0x8742ACFD, 0x722829FB,
+0xACB39F45, 0x93F0C0B6, 0xE05B2A77, 0xE45748F7, 0x1A9316A7, 0x80A9188B, 0xD1F24E27, 0x9B19292A,
+0x7EBADE6D, 0x2A6AA3DE, 0x8F1F26E1, 0xB1CB4196, 0x4CDAD1A4, 0x80A267C1, 0x12270CF1, 0x780D5FE4,
+0x51EE30D5, 0xFB75359D, 0x2AF5FA61, 0x3686C0A2, 0xDC988D6D, 0xCF5EABE0, 0x0BEEC9D3, 0x997F72D6,
+0xDA3CF7DD, 0x3F9A66B3, 0xACB19270, 0xCFE5C56F, 0xAB5C0327, 0x7CDE2E64, 0x1C2390B9, 0x032A3924,
+0x0A91BE9C, 0x3E176E92, 0x8990A4D2, 0xC7A24131, 0xD200260A, 0xFDCB093F, 0xA28D39F7, 0x4D6EE993,
+0xEB612D6A, 0x87247F6F, 0x5E757FE2, 0x15975F4C, 0x9A510000, 0x530DACF6, 0xE5198632, 0x95AD89BA,
+0xD4947FF1, 0xFB224492, 0x7AD95B10, 0x904221A7, 0x58D7D3A8, 0x0B6341ED, 0xFBB0DC1A, 0xCD099048,
+0x492C4D76, 0xF2B479D9, 0x30F90035, 0xAC7A16CB, 0xB97261FB, 0x296E23A7, 0xC75C5D08, 0xBC67A336,
+0x8F73DBC4, 0xFCAD1690, 0x98E39D88, 0x462515C8, 0x5BC7D33C, 0x951B3B63, 0x8887D001, 0x0F6FC8F5,
+0x9154B19F, 0xC6012F13, 0xFE2BB233, 0x7263457C, 0xAD700199, 0xC331E57A, 0x60279561, 0x880F3C82,
+0xA298A2E8, 0x029F2D30, 0x2D290525, 0x95A7320B, 0x2EE1BA36, 0xC77AE6B1, 0x64DF2920, 0xCB5F4740,
+0x2FF84B58, 0xDE42F0A7, 0x86D292BC, 0x11393D31, 0x3EE80F35, 0xCAA803C5, 0x23F26299, 0xA44C4C54,
+0x39E587AB, 0xE7FAA3A4, 0x115D73C6, 0xE6BC3D5B, 0x0BAD4435, 0x7E286CCA, 0x6FFFCBFF, 0xB15046C9,
+0x90C1E688, 0xF8047A31, 0x244F5253, 0xAE80D212, 0x1F0D5E8B, 0xFFED8AD7, 0x3D8AE9C1, 0x38FE0E96,
+0x91174DB7, 0xC8AEAC46, 0x85D790CB, 0x9DA99D49, 0x82A86F79, 0x07E32D53, 0x5B7CCEB2, 0x01AA9A2C,
+0x5C525592, 0x69A07E36, 0xFB28E040, 0xED5CD42C, 0xCA3726A7, 0x3DC87A5E, 0xC1A6C8C0, 0x812649D0,
+0x222559CA, 0x141E2DD9, 0x8C789D7D, 0x0D277346, 0xF5CFB754, 0xF4D9792B, 0x478D1A68, 0xCCF2F647,
+0x1690C76C, 0xE5261F22, 0xA4C81C50, 0xD472406B, 0xEB213D2E, 0x3071974B, 0x9104D74F, 0x1A45F3F0,
+0x5B2C08F3, 0xC854D643, 0x3B420B76, 0x78F76875, 0x84D6381D, 0x02D229CB, 0x612118F2, 0x70C0F991,
+0x6A1704F7, 0xA37CDB3C, 0xC0764ED9, 0xA2E3E0C6, 0x5A97D1B1, 0x1BC610EE, 0xC7D83ADD, 0xC1251140,
+0x3ECCC21A, 0x2DBFB21B, 0xB92139D3, 0x1A551DFB, 0xF761B928, 0x4643DAF6, 0x57356471, 0x0F45BBF3,
+0x2323E447, 0xF5E73D33, 0x8E48B460, 0x28E55BCF, 0x3B1D2273, 0x35EB5657, 0x2391369E, 0x22FDCB58,
+0xA11023EC, 0x56F13799, 0x7692C16D, 0x42B683E8, 0x5494769C, 0x725E8C10, 0xB2D39F4C, 0x3C68836E,
+0x3EA48A1C, 0x3A9910B5, 0x626320C9, 0xE7A8CA6F, 0xBAE5E234, 0x2F6360D7, 0xE9491869, 0x185BCE6C,
+0x8DC35329, 0xBD68D180, 0x87063BB0, 0x378B9882, 0x9F059D1B, 0xCB930587, 0x4CE31BF5, 0x1B157DDF,
+0xB5786D20, 0x5598E490, 0xC5CE7F5E, 0xBCFDDC87, 0xF9575683, 0xE6B0484E, 0x0192286F, 0x4D1058D2,
+0x150615C1, 0xE4DCD86A, 0x6E1F379F, 0x5A5560A3, 0xF18AE836, 0xC7304175, 0x937C3587, 0x806D476C,
+0xD1349EBC, 0x29797A2B, 0x0E2DEB7C, 0xE545E5F2, 0xA41479A6, 0x1285BC21, 0xA01D3B26, 0xEE18B541,
+0x4B4B248D, 0xDD5AEBE2, 0x08B148DD, 0xDCD137FD, 0x1C2AF0B0, 0x42BDDB88, 0x4AF410EF, 0xD1849C20,
+0xEA170AC3, 0x690878CE, 0xBE0B5052, 0xA382F668, 0xDE544332, 0x5A1D7D41, 0x4320CA01, 0x7A4402D7,
+0xDB4F6310, 0x468839F9, 0x24E50D43, 0xD11F1911, 0x78151D6E, 0x0FF1338C, 0x84AEF63F, 0xFC84ED11,
+0xC8C85033, 0x317B7F5A, 0xBD5F8DBE, 0xEC0C6B17, 0xF390FE43, 0x8D5E80F8, 0xC9349600, 0xBE7AE047,
+0x0E573970, 0xBAD78B62, 0x6F98358C, 0xC07E10DF, 0xC59DEF57, 0x3F9E67E4, 0x59D8A635, 0x09088F92,
+0xA4D1D07B, 0x2538054C, 0xEB9DAB2A, 0xB1018591, 0x537D6A89, 0x9F50C8C6, 0xA160E28C, 0x263857DA,
+0x982D922A, 0x97AFD0F1, 0x15C3DF52, 0xE34AB235, 0xDF7D4F47, 0xAED6A831, 0xB439DB61, 0xF829B1B4,
+0x6740EE97, 0xD96F7783, 0xB5403A41, 0x9A54BDE4, 0x7BE7FB26, 0xEEC8E08B, 0xB0FE1E95, 0x4BDBF68F,
+0x84EB0564, 0xFEE5DA20, 0x88C0482B, 0xD603D8F2, 0x3EF5CE4B, 0x5738F484, 0x98042552, 0x4B7BC814,
+0xD618A140, 0x5CAFF2E9, 0x9FAD83C6, 0x42E0968D, 0xF8730A14, 0x6833F049, 0x1D82D2D4, 0x76474A43,
+0x23DF6ED1, 0xD519B0C7, 0xBF385873, 0x4FF416ED, 0x1C48A28F, 0x90ABE023, 0x7746D3CB, 0xCCAFF882,
+0x1C4F237D, 0x9265C6F0, 0xB61E6D93, 0xC5D60B71, 0x42F604AB, 0x85354A02, 0x60ACD64F, 0x98AD2614,
+0xDB1F6201, 0x18229BBB, 0x9537E7DE, 0x9DDB9A1C, 0x1F5CB946, 0x9A3DBADA, 0x4A5A40EC, 0xE570C696,
+0xC2CC7DD5, 0x81C94C80, 0xAADD20C8, 0x55DD7C2D, 0x6EFF5A04, 0x9BA125EC, 0xDD3620B4, 0xED65838C,
+0x5ADFB2A5, 0x41DC092E, 0x52748D53, 0x447C43F0, 0x717267A7, 0xDE682FB6, 0x0C00E3B2, 0x02B478A8,
+0xC31A5444, 0xC70E7247, 0xE57C4730, 0xCAADA93E, 0x0E6DD315, 0x769DB073, 0x43FC358D, 0xC95FD3FA,
+0x34A78AF8, 0x207337BC, 0xA09A6DA6, 0x05FA97B2, 0x56832471, 0xC7B0BDC9, 0xBE640242, 0x44942074,
+0xC1AA6C84, 0x3B0A010F, 0xE14E3355, 0x48B565B2, 0xDEAF94E1, 0x8A2C1C8E, 0xBDE53B43, 0x9A34D988,
+0xC3417AC2, 0x590E9E5D, 0x4CBCBC3D, 0xF8D160D8, 0x20AF8F48, 0x84D28ED0, 0xDBFAC9DB, 0x8722FB10,
+0x9B6843DA, 0x7A44B3E7, 0xABA908F8, 0x273127DD, 0x6CDCBCF7, 0x9EF5D7A9, 0x2E27E05F, 0xBF7D5FC9,
+0x14AD37C0, 0x08972C50, 0xFEFF64DF, 0x3CAAFF22, 0x47C6E840, 0x6583FB4F, 0x500850A1, 0xA7AB0AEF,
+0xE9E41D97, 0xFB182A4C, 0x488A558E, 0x8834A97A, 0x05A795E8, 0x3E205E7A, 0x051AACA3, 0x394A45C3,
+0xF7B31960, 0xC0B80864, 0x319B9E14, 0x9B6E71A8, 0x6F159B7E, 0xBEE72F9F, 0xE055695B, 0xA23897FA,
+0x12CE73B3, 0xE71273D2, 0x19192736, 0x4788D2E3, 0x64D5BEA8, 0xC45FA1C8, 0x648825FE, 0x69C21ADE,
+0xD0903B03, 0xB9E9D086, 0x7A7C54E7, 0x94291542, 0xD4EC7E9D, 0xCAF3B925, 0xFAB95DBA, 0x1A340321,
+0x6A3E5605, 0x44F2759E, 0x621458A7, 0x1D50ADD5, 0x18137955, 0xA386EA2E, 0x47A2655F, 0x5C4F4C7B,
+0xAFA3E390, 0xEE208962, 0x424D6954, 0x1699C4FA, 0xF0018904, 0x1B2A5961, 0x416A4E02, 0xB8B85623,
+0x1CEAD75A, 0xF1832EA0, 0x096A8BC6, 0xD2C6CCBC, 0x98DFE67E, 0x1657CEFD, 0x7116745F, 0x4AA25C98,
+0x300F682A, 0x03FCCEB4, 0xCBB0BA78, 0x0D78C07E, 0xBDD0B95D, 0xB655EF3D, 0xAB227376, 0xB29E3587,
+0xC08D4F4D, 0x9243A968, 0x66ADB40D, 0x04D1325E, 0x1DD46DF5, 0x8FCC6FBF, 0xB1F1C861, 0x7D2174FD,
+0xBDE56BE3, 0x4F4E57FB, 0xEB302D48, 0x24C5301A, 0x18F1548D, 0xF5B1EB31, 0x72F0F1D8, 0x3E262DCE,
+0x8A830BF0, 0x2986E07B, 0x08AA4B76, 0xF16A825C, 0x2C9DF66A, 0xD52F52A0, 0x44B790F1, 0x05E1B02B,
+0x3BF00AB6, 0xEEBEFBE8, 0x38D467D6, 0x35183A45, 0xED32B593, 0x59CFCD81, 0x51DA1885, 0xBB8288C1,
+0xAC31F151, 0x04C38A50, 0x3B2B1659, 0x435F60FD, 0xA2FB6178, 0x366954A9, 0x91F316B5, 0xAA2DBD7E,
+0x06F6A73E, 0x6160D6F2, 0x3C2DC201, 0xE4C27D5E, 0x5BF7AC7C, 0x1AC5CFDD, 0xECE526AF, 0x5A2B2300,
+0xB1B312D3, 0x70DE1553, 0xE2BC9A30, 0xA5B5A9B7, 0x743A1BE4, 0x1F9A649A, 0xFDF48366, 0x37EED8A2,
+0xA54A5ECA, 0xCB63A827, 0x4D656A93, 0xBF496A9F, 0xAE0BDA48, 0xB9B07434, 0xAD877BBA, 0x41ECAC60,
+0xF312BD44, 0xD144869F, 0x11B53D2E, 0x2B120073, 0x8B65C8EA, 0x906D4A6A, 0x84191C2A, 0xFEDD615D,
+0xD5CEB7BB, 0x5BD73465, 0x45F633C5, 0x0F29773F, 0xA5AA7DBE, 0xE8AFDAFF, 0x9E334BB7, 0x3E7C203A,
+0x35EDFA40, 0xACAF1BF6, 0xA794D276, 0x6D1691FE, 0x6289D4D4, 0x18AD8483, 0x2CDB8C32, 0xA328A06C,
+0x59724EAA, 0x063B3548, 0x1C6856A6, 0x06FA6E1C, 0xBD3E0B95, 0x90EACE4B, 0x66706249, 0x384CDCFF,
+0xB1839ECC, 0x0EF79343, 0x2D35B0A8, 0x14852E71, 0x11C5F82D, 0x5AFEFD6B, 0xB5421B40, 0x2B243B06,
+0x01454A81, 0xA7C167DD, 0x226F566B, 0x14720C6B, 0xAA06C9D3, 0xFAB5676C, 0x3075CDFE, 0x1D3CBDFD,
+0x2324A19A, 0x65B519F6, 0xC25B72AE, 0x4D401935, 0xA64A261A, 0xCC072124, 0x99638191, 0x8CE96B2D,
+0x377244E5, 0x562A6B47, 0xBA88CD16, 0x866D95A7, 0xEE92B62B, 0xB0826739, 0x503BDD2E, 0xA9C2F1A9,
+0xB30A1365, 0x63F7BBF2, 0xB19603C0, 0xE9F81B40, 0x5143138B, 0xC2B8C308, 0x341098C1, 0xD41DEC55,
+0x7D801CF8, 0x9813A09D, 0x23E6AA4C, 0x9EFB8E1F, 0xD6DDDD19, 0x701E3306, 0x288AF34B, 0xFC010564,
+0x287C6D77, 0xC3C566A9, 0xBD272B1C, 0xCE10B34D, 0xA9E7D028, 0xFB5660FA, 0x3AC4C8A8, 0x4B1C838D,
+0x74CD6208, 0x5E9BBD4A, 0x2B942DC0, 0x34B22B47, 0xB29A3CA0, 0x9FECA131, 0x42BBF159, 0x97CD2CAA,
+0x2514F9E4, 0x1B6BC110, 0xAFF2C08E, 0x5D56D329, 0xFD2FFFEF, 0x255BF2A0, 0x144920C9, 0xF288BCAD,
+0x0DA79E3A, 0x37FEB5C5, 0x24106B62, 0x0DA7751B, 0xAF5D4D63, 0x3C35D26A, 0xD8B45FE8, 0x60CDE08A,
+0xB350BD21, 0x0D4A0C47, 0x9EA64A7B, 0xFE5C3061, 0x41E956DB, 0x1B63DC65, 0x033FC233, 0xC9DA16E8,
+0xBAC537DE, 0x87BAFCD7, 0x52F1B510, 0x09B279EA, 0xD821862D, 0x923E03C7, 0x70ECE001, 0x9DE91680,
+0x55A36649, 0xE8CE12A0, 0x581640AB, 0xEEEFF107, 0xFCF5DB5D, 0x0937CF62, 0xD68F32EC, 0x6D34BE91,
+0x2C8EA7C4, 0x77E4F667, 0xB09D1BA2, 0xE4A34ECB, 0x99826869, 0xC2A7657D, 0xA2C08897, 0x5AD63E96,
+0xF9202DA5, 0x299AF04D, 0xD44FD61A, 0xB7DEDDBE, 0xF19C4247, 0xF98B5E4F, 0x36AF5BA4, 0x63EF9077,
+0xF0AC6EFE, 0x6DF4807C, 0xFFA0A7A3, 0xE25D7CA4, 0x8669DBA9, 0xD5CAA143, 0x0197D0D9, 0x3770087A,
+0x01252258, 0x4E45EDC1, 0x1B2467AA, 0xCF49B054, 0x1EA09428, 0x46E74586, 0xD2A3B306, 0x75584B7E,
+0x1D792A2E, 0x3B4A78FB, 0x27E0EAD7, 0x75DB0B23, 0xF9E9A3C8, 0x1F5CC47A, 0xF841EF9D, 0xA289A78E,
+0x2467330D, 0x2D7597B3, 0x54B89B8D, 0x75950807, 0x0C4CE23C, 0xCA717423, 0x38308F33, 0xF48CB6C1,
+0xEF6A7770, 0xFE27AACB, 0xEF8DE945, 0x31D9E7A0, 0xAE7132D5, 0x67C80016, 0x04B61E61, 0xA98F09D3,
+0x5B02DC55, 0x10660B89, 0x357678EC, 0x27DC98FE, 0x3AE6EA43, 0xCDFE74B1, 0x4F619CF1, 0x11433E9E,
+0xDE2C25E7, 0xDEC258CF, 0x8C18CB49, 0x30E15423, 0x2F68EE83, 0xDAA5C551, 0x5C246EFD, 0x90E16D04,
+0x1CE7A35A, 0x11EEFB1E, 0x911BF021, 0x64AA7AC3, 0xE708D1F0, 0x7AC163CC, 0x029BAD82, 0x3E789891,
+0xF22EF24E, 0xDF1083B7, 0xA3FCDFD7, 0xCE9AAA98, 0x5D71B4FB, 0x74C114E5, 0x47E2EBE0, 0x8667657F,
+0x0E589379, 0xE4AF8470, 0x9132FFD2, 0x80FBC890, 0x09462A07, 0xFCE8FCB2, 0xB2ACE90A, 0xB5B02E70,
+0xEF76F506, 0xEC1F364D, 0x0CFCE8F4, 0x5418597C, 0x545DA3F6, 0xF14843B0, 0x42A6C42F, 0x37B798B7,
+0x8CAAD178, 0xAED39249, 0x5C0D4EEC, 0x16538A22, 0x37CD34D7, 0x47895115, 0x956CC654, 0x28651E4E,
+0x30953CB3, 0x0F1D6D77, 0xA0D94D45, 0x252E8811, 0x3240F13F, 0xA4587187, 0x71312A42, 0xA4ABEFDB,
+0x38D140CD, 0xE3E63D94, 0x3DE80DF8, 0xF3520A3D, 0xBE46A2AA, 0xA764CD57, 0x6301DD21, 0x2597B6B9,
+0x9CCF9BA8, 0x36426B74, 0x67B9DA03, 0xAC8BFCE2, 0x103B8E43, 0x5B8CB5C9, 0xAB4C802F, 0xD2DA7A6C,
+0x5423EA45, 0x540D80DE, 0x2A491E67, 0x076E2BE0, 0xCF7DB6C2, 0xF23F6C5C, 0xF065A791, 0x6FAF9EE3,
+0x82544825, 0x867A048F, 0xFE399EA1, 0xD20EFE2F, 0xB67BB7E2, 0x1F296D13, 0xB86DA4DA, 0xE94D9FC9,
+0x93ECB433, 0x92EA6512, 0xB7EE88AD, 0x655E1F95, 0x68B719B5, 0x4AC3E832, 0x3BA3905E, 0xDAD42059,
+0x1152189A, 0x35086552, 0xD3BCEA05, 0xC404BFFC, 0x9984B7C7, 0xEC1D8047, 0xD9DDEEC3, 0x2F5FF659,
+0x467CDC78, 0x1ECEC969, 0xE089833B, 0x62236D8B, 0x3ACD25AB, 0xBD41D644, 0x3F513A20, 0x17AE633A,
+0x5307B793, 0x9EF0FC99, 0x8AA4B9E9, 0x5BD17623, 0x6BBD768A, 0x3ADE8AE3, 0x36C666B8, 0xC6AF54EF,
+0x8B5980FA, 0x086D78A8, 0xD4AFADC8, 0x88985509, 0xAF33A7AB, 0x925A23A6, 0xAD15E527, 0xBBB12477,
+0x254E417D, 0x34A29F1A, 0xC556F571, 0x43CEED5F, 0x178B060A, 0x05E7666B, 0xBD4421D2, 0xA1F173D3,
+0xCC1DB6AF, 0xF2A47FE7, 0xC86BA4EA, 0x8A1ADD49, 0x0E3010B8, 0x333DB3DE, 0x48946A4C, 0xD6D3714B,
+0xDC78F209, 0x13B9EAF5, 0xE72830D8, 0xD39ECEE4, 0xA21D7DDC, 0x89F2B60F, 0x6B1FDDE7, 0x8F165C17,
+0x71AA4AD1, 0x8FA54863, 0xC7AC77F5, 0xF262436A, 0x4EA6E3AD, 0x8D641199, 0x1C0921ED, 0xC2D531CF,
+0xE4371F87, 0xD1EAA4D8, 0xDBB18E68, 0x9D294B87, 0x5AFF2C07, 0xFC4586C7, 0xD71C7955, 0x9C6A50A5,
+0x9AE79C9C, 0xC4D3272A, 0xE05198B3, 0xDC0A872F, 0xCCE9F18A, 0x23D5D706, 0xDF20D8B1, 0x98F10576,
+0x25A03945, 0x01D56740, 0xAED9C153, 0x22BF4FA0, 0xD2668406, 0x21167BFF, 0x39DF4F90, 0x4B168961,
+0xAC73E236, 0x10E4B47E, 0x809373C9, 0x2F43857E, 0xF091F460, 0xC158F138, 0x9E3EF022, 0x9A96C52A,
+0xEE6CC86E, 0xBFBCD191, 0xDD722F98, 0x267A7B58, 0x7C153EC7, 0xD71B3FB9, 0xC5BE42EC, 0xEF218321,
+0xF816C577, 0xD4A89D53, 0x48EB2D75, 0x0443EC79, 0xE385E52F, 0xBA713313, 0xEF19FC1B, 0x53378903,
+0xE2559ED0, 0x1B46DA39, 0xF67FE486, 0x8448A0A6, 0xD3065223, 0xEE7DB6F1, 0x88C9AF36, 0xB7F2A3D1,
+0xC4A97F92, 0xE783758C, 0xAD346881, 0x8C84F723, 0x0379F90A, 0x6CB83588, 0x85257568, 0x9F285188,
+0x90CC8C94, 0x3F4473E6, 0xD4C8611E, 0x1D961D0F, 0xE597ED3F, 0x667AE3DE, 0xC3113267, 0x8DFB7087,
+0xD259E41C, 0xD3A1A852, 0x876A3DA0, 0xE21DDCF1, 0xAE67DF9F, 0x2D08F43F, 0x0E6A9328, 0x4484A53C,
+0x3D46CDF9, 0x977AB62F, 0xEB15274C, 0x8B191814, 0xE8857FF4, 0x3D765E9C, 0x79F125F2, 0xFD1E70A8,
+0x6D69887A, 0xBFA83177, 0x91A32218, 0x3981027D, 0x75B94B02, 0xA9F137BC, 0xAA1805F9, 0xAC98D5E3,
+0x02EB0AEA, 0x56973735, 0x275186EB, 0xBBF32B58, 0x704BA1C8, 0x6241523A, 0x7D70287D, 0x15C92166,
+0xDCC9BEF5, 0x95770558, 0x97FEBBDF, 0x1183A482, 0x361B3F5E, 0xF8514859, 0xE7C37755, 0x789984E1,
+0x75B41C2F, 0x7692A7D2, 0xECFE65D0, 0x92C07B07, 0x1E28F057, 0x38F884D0, 0xEA1B0E7C, 0x7B6DE450,
+0x397E0532, 0x42C4133A, 0xE22B6A2B, 0xB850AF10, 0x3C86389F, 0xC2904E9A, 0xE70494FC, 0x74782CE4,
+0x6078977F, 0xA1A4BA27, 0x0CE08B2B, 0xF3335F8A, 0x8EE4CE49, 0x353B34D1, 0x7C02C3A0, 0xC97082B2,
+0x1CEEE459, 0xA9DA13C0, 0x49307C91, 0x6895EE7B, 0xCD1C8E3D, 0x9696FB83, 0x3232AB31, 0xBFEBFA8F,
+0x05AE96B3, 0x3A7CF1CF, 0x9F66D2DE, 0xE2CA5274, 0xE4089C7E, 0x65D4ED70, 0x73887803, 0xE577A234,
+0xC7ADA81E, 0x14BEBB8D, 0x30880CF6, 0x97C28058, 0x922C6C95, 0x113FB7DF, 0x062E053B, 0xC1E14073,
+0xDF0470EF, 0xA418B67D, 0x2D01D4B6, 0x213966C3, 0xC209BD2D, 0x0393A0E3, 0x9F0236A3, 0xA0B632B8,
+0xB9BB647E, 0x6B6979C1, 0xE79FDF2B, 0x8E0EF067, 0x3A132497, 0x664C7F55, 0xF5A86370, 0x427C9746,
+0xE74A837B, 0x0FD0D712, 0x04CF806B, 0xFD8910C6, 0x2EA5D0B7, 0x7169F053, 0x75D894BE, 0x064AB8DD,
+0x2C442B30, 0x91926EC0, 0xB8E4FA73, 0x85E9D58F, 0x8D442710, 0xFC228D35, 0x53C333B7, 0x4C78C21F,
+0x439508A6, 0xC8484099, 0xBD6A4418, 0x72589A99, 0xCD724569, 0xFCA79103, 0x9AD57D81, 0xF87985AF,
+0x6EEF5537, 0xD50EF171, 0xD377EF5A, 0x885AB11C, 0x3ADD3F1D, 0xFFB1D874, 0x119450E0, 0xA53CFB73,
+0xB10BB58E, 0x779E31C8, 0x5730E837, 0x62E7654A, 0x2648EF29, 0xCA38DFEA, 0x1923884B, 0x17414B6B,
+0xDDA4F6B1, 0x5D7E8444, 0xE93A6A6F, 0xF2606976, 0x8FF59C89, 0x80678BDB, 0x5C1CB225, 0xAF476253,
+0xB53FF29E, 0xDD1AB13E, 0xD9896FC9, 0xE600FAFC, 0x3D72D871, 0xF285FE98, 0x43A07F1F, 0xA5541903,
+0x086FC58A, 0x45A213C3, 0xC5C96027, 0xDE4BEAC4, 0xA0CA0434, 0x4FB85BFA, 0x87B7247D, 0xFA1A2F1A,
+0xF688C14A, 0xA0F001EE, 0x4F1A9568, 0x9DC642CD, 0x14BDC34D, 0xE09242EC, 0xCA7E5E4E, 0x971F8CCC,
+0xABA0FFB2, 0x4107D6ED, 0xFC4F76BE, 0x7A333DF4, 0x94332B44, 0x6F3D9363, 0x000014AC, 0xDDC963C1,
+0x2B7CBC7C, 0x76B4D992, 0xE2A33EA1, 0xD9B68A9B, 0x5D164F30, 0xE1D5A1DE, 0xC7B3D638, 0x5966E478,
+0xC5573A77, 0x5EE9628A, 0x020BCA31, 0x2F7D0D3A, 0xDFC00246, 0x7DB585A8, 0x87C73FBD, 0x83A36BEE,
+0x80A87E88, 0x9C0B5EF9, 0xD0926110, 0x512B3634, 0xC246C120, 0x72BD9411, 0x267B156C, 0x02A59062,
+0x96085DBE, 0x0B37B1BF, 0x0BF8ED6E, 0x684CEEF9, 0x96F83D44, 0xF77250CA, 0x0CF32403, 0xD85568F7,
+0x83CB6900, 0x0C110CCB, 0x98166188, 0x2516CB60, 0x620C2764, 0x9156CCF0, 0xD0D561AB, 0xFE317AC5,
+0x132EA7C2, 0x1DFFC223, 0x0D2CD3BD, 0x49D0B557, 0x00F9E517, 0x6C36E4E9, 0x6116D943, 0x015A9314,
+0xF0AE6E23, 0x5BFC002C, 0x1F8BD2E7, 0xE6C159D4, 0x5800E53E, 0x36E704C0, 0x0EAA6985, 0x450A83B9,
+0x395C700D, 0x4B3DDF45, 0x0F5C683F, 0xE139BBAF, 0x9DB66BC7, 0x185B6D8E, 0x5EBE6B01, 0x636EC72F,
+0xE04FA9A1, 0x17EA0307, 0xD96D93CF, 0x4A888600, 0xE01878AD, 0x05E1629C, 0xA0BCED0D, 0x4E67CF91,
+0xFB78E3C7, 0x67A04E56, 0x2356EDA8, 0xE0E4BA76, 0x870EDCF5, 0xD7210496, 0xDA079737, 0xAA448D7F,
+0x9F97C254, 0xED6B2C52, 0x4FDCFBD0, 0x3D5BCAB7, 0x0A75AC9B, 0xDD72CE22, 0xA047B291, 0x09D97C46,
+0xBA4A48BA, 0x5254BFA0, 0x2CAE0184, 0xC1889932, 0x10473CDA, 0x4D3C0EE9, 0x75202DAD, 0xCC2B1264,
+0x9982CA74, 0x299F2692, 0x29598841, 0xF3353200, 0xC7020AAF, 0x890522F0, 0xC0A137D6, 0xE0174BBC,
+0x49AC582C, 0xB30585B8, 0x84B24485, 0x7BCC517E, 0x132188E4, 0x8E2FB069, 0x60FA1134, 0xE23D9A10,
+0xDFF6041A, 0x4A46AE9E, 0x4F21BD14, 0xD24749B8, 0xB5DFDBAA, 0x77EF9CE1, 0xA4EAAD42, 0x87442820,
+0xFD868A28, 0xB0880F2B, 0x440A57AA, 0x28EF1D4D, 0xD52A4247, 0x3FBD8A98, 0x5E0D4445, 0x8ACBEC42,
+0xB6506B97, 0x24078FA9, 0xFC48593D, 0x807D9225, 0x6E6AA5DD, 0xF73EC076, 0x0951347C, 0x8578A508,
+0x19927678, 0xDB0EE9A6, 0x2F0C8C8C, 0x422A435C, 0xAD7E0B84, 0x7E875B37, 0x85E2F9ED, 0xA751570D,
+0xBAA2FEC4, 0xD640CB90, 0xD0800692, 0x5D25E7CA, 0xE0757186, 0xDC5E8CEF, 0x42BB4426, 0xCA157866,
+0x121E7F34, 0x5790517A, 0xC41AFC8F, 0x69669531, 0xE930F1BD, 0x5FE0B4E2, 0x8A6D077A, 0x7E200E99,
+0xBF0AC656, 0xF69A84B7, 0xB6A97656, 0x834A7C52, 0x1EA67084, 0xAD2AC2F4, 0x0C500DB0, 0x076ADD23,
+0x6B2D0BE9, 0x5C3FC445, 0x68D9814E, 0x39CCDD8F, 0x982DAE7E, 0xB5852C5C, 0x33222D0D, 0x978701F6,
+0xE9EEED76, 0xD9BBF8A6, 0xAF23EC6D, 0x1C38905D, 0x023B4DE8, 0xA8C4764C, 0x41EF2967, 0x45F14623,
+0x3F6EDF22, 0x9E2ADC15, 0x9F16A032, 0x2BAFE04A, 0xD962CFE1, 0x04933A08, 0xD8C23B35, 0xFD3784EB,
+0x5E3FEA12, 0xDD1B4B55, 0x1FD876B1, 0x2C9DED2D, 0x58312492, 0x67B458F0, 0x6896EAC0, 0xF9A83BC4,
+0xE8645A1F, 0xAEE9A826, 0x4AC63ED9, 0x4CF7AECC, 0x6AF795A1, 0xD2DB3950, 0x835CD7A5, 0x54D117C0,
+0x44712539, 0x06545DD3, 0xF78A69E7, 0xD4A9B3CF, 0x5A8698E2, 0xA8B931B8, 0x9FFCE2CE, 0xDD93F5BE,
+0x5CDBA896, 0x50D6809A, 0xDC383EE7, 0x0B25C490, 0x9230AF49, 0xE26BB8B1, 0xFEA0C643, 0x29A99598,
+0xD96C058A, 0x45727A1F, 0x1D3B5F11, 0x07FA43DB, 0xEB4C6037, 0xB9C74E86, 0x20A8AF57, 0x615AF8DE,
+0xD2573DCD, 0x2A78CE68, 0xA150709A, 0x27EE316B, 0x4BB31D58, 0x10DE02BC, 0x82A8FCB4, 0xF21A68A0,
+0x7C04B4C9, 0x9B6C0970, 0x8A093A80, 0xD9A5B712, 0x76A924DC, 0x62ACFC4D, 0x372BB838, 0x7E0608CB,
+0xBA29624B, 0xF78D2C5E, 0x2A6E8CEB, 0xD2B1A764, 0x891F6CF0, 0xBF66A18B, 0xF23A9691, 0x071641FC,
+0x6D102252, 0x5C04BCD1, 0xB76D392B, 0xD0B6BFFA, 0x9F44004B, 0xA9C94627, 0xCAFBBBD6, 0x14AD8F14,
+0x37121455, 0x337AF63F, 0x1C7686FD, 0xA1CD8F54, 0x6E9037E4, 0xA049ADFF, 0xAFC20895, 0x37F8354B,
+0x77118C3A, 0xCCE29CB8, 0xC056FBB3, 0x80938FA1, 0x96A466DF, 0x3C226D09, 0x2C5BF345, 0x642FF788,
+0xB761A161, 0x348C64EE, 0x2C495DF3, 0x3D03B9C4, 0x008D11CA, 0x0C92E3D8, 0x7D984632, 0x4CA4A72E,
+0xBA81C066, 0xB867FE4F, 0xA4873F59, 0x2E602970, 0x0ABCF5B1, 0xF133BF90, 0xCAC3585D, 0x2487D029,
+0x8843F864, 0xB6BAAEEF, 0xB82201EA, 0xADE15F95, 0x0DBBFAC3, 0xBEB3932E, 0x86AFB807, 0x933F66FA,
+0x0B80A15E, 0xC3780449, 0x27531646, 0x4C9F742A, 0xB8C11E07, 0x7A5A078E, 0xC1D74C18, 0xC595F1AF,
+0x8E6E05BD, 0x7F4C4040, 0x43D05CFE, 0x59D653D3, 0xF50118C0, 0x9B743404, 0xD8016BF6, 0xB162788B,
+0x7145D9AE, 0xCE51DE3C, 0xEB196DDF, 0x7C25A202, 0x12D9AD42, 0x7C17F745, 0x94C7FB6D, 0xDE158853,
+0xEFD989D3, 0x57EAD37B, 0x676D9549, 0x81F4024B, 0x1C233B4E, 0x4734292A, 0x53FB0FB8, 0x18F6194F,
+0x3CB91373, 0x3EA3AD35, 0x27618A8C, 0x2F3A430B, 0xAF4B0B6C, 0xF10DED97, 0xF8C6186A, 0xA12A9E95,
+0x6BCBE852, 0x27A4960B, 0xFB9B49B7, 0x15351190, 0x38DF0568, 0x61D85A99, 0xD4FAB3E7, 0x2D877FE6,
+0x88893D2D, 0xD5676E0C, 0xBB760476, 0x27BC95B0, 0x87A1AFF9, 0x26D19EA7, 0xFE9DB8DF, 0x7A8ACC90,
+0xB1696D61, 0xB61294C4, 0x26827D31, 0x2A2B9241, 0x4AF8DC28, 0xAF9D3793, 0x15C75AB9, 0xDBFA0936,
+0xFB7B5B96, 0x186313E2, 0xB18FDAEE, 0x3C88FC41, 0x4C2F5530, 0x6FAB8607, 0x44269F80, 0x650AF0E3,
+0xB3592791, 0xF50B5889, 0x139D8439, 0x704A9432, 0x34328468, 0x0C7F6CC3, 0x52FCD059, 0x8AC2681B,
+0x03733B7F, 0x62734C0B, 0xB4635382, 0x59A7E772, 0x75A722F4, 0x5D9784AF, 0xDA07DC45, 0x289B29A3,
+0x2D8FD5E4, 0x4FDA05C2, 0xC7049ADD, 0xFDA9BB33, 0x8897813F, 0xFCDEAEC2, 0x6490F37D, 0x9AC1CE85,
+0xFE63FB62, 0xEE98E461, 0x8A4A7352, 0xB7D89ABB, 0xE89E861F, 0xB9104E55, 0x96A695AC, 0x0674B36A,
+0xF67B01C3, 0x82A3199A, 0xE19874CA, 0x786B81B5, 0xBDAE2E20, 0x842A20AC, 0x01D665D7, 0x52051887,
+0x67D57234, 0x45DAC733, 0x174D7E16, 0x14253322, 0xF9D3D9DC, 0x311C7F02, 0x7C3BABD2, 0x36A6B3E9,
+0x062F032B, 0xC7EC9D84, 0x34DE96BA, 0xD5741332, 0x44AA7DB6, 0xC4714533, 0x60F34802, 0x5AD04EA2,
+0x961B03E6, 0xDBB9F95D, 0x63189C78, 0x8E6AD330, 0x323CD446, 0x2867D394, 0x498BAF17, 0xE3E48F26,
+0x83FD8D97, 0xD25CFAEF, 0xEA4ADDF4, 0xD83BE911, 0x98C03193, 0x57F7486B, 0x2DE0742F, 0xC524D86B,
+0x37B31DF4, 0x17558E1C, 0x1084A2AC, 0x91D35B0E, 0x3776408B, 0x9068C314, 0x88C62FAF, 0xDC53B542,
+0xA6D693E4, 0x2149C6FD, 0x3DFB8B25, 0x300A66D3, 0x5DA89871, 0xC3457634, 0xF4FD05B9, 0x5C3992BD,
+0x1F1420B5, 0x47EE3C4D, 0x6F58AB3E, 0xDDE29560, 0x55D33B1F, 0x1AC2AACD, 0x2813CBDE, 0xBC13F783,
+0x027C3396, 0x903BAB83, 0x7375B138, 0x7D39AC14, 0x204718DC, 0x9BD06C00, 0x6F988099, 0x23CE6DDB,
+0x4254F6D7, 0xC20DD759, 0x19C2F41D, 0xDC210C48, 0xB40D5526, 0x629DC85F, 0x5ADBDBB2, 0x3B0A2599,
+0x7CA23DF6, 0xF981AD78, 0x91F48250, 0x342A808D, 0x6B9D875F, 0xD75F0388, 0x249497B8, 0x80EDA9F1,
+0x8FFF0A36, 0x268C1424, 0xB93685DB, 0xC14BE62D, 0xB36AFD64, 0xE2430A04, 0xB9BDA504, 0x7715F725,
+0x69E42596, 0xB7D281CB, 0xAF4D5F34, 0xE044739C, 0x1A17BF86, 0x4D0A1834, 0x82685E07, 0x5D9CFE74,
+0x7800B11F, 0xD679C1D3, 0x7EF6B4C7, 0xCD6882CA, 0x4E2408E4, 0xA8BD0C47, 0xC9DA5DE2, 0x803E70B3,
+0x7B7DE604, 0x0B5BB20B, 0x35447DD1, 0x06320A7C, 0x5C865B5E, 0xEDDAED2D, 0xB4BE33DA, 0x174C92E8,
+0x89128E6A, 0xA3FFEB53, 0xE697F570, 0xDDC1CFBD, 0x84D8B262, 0x0212A416, 0x3C791E42, 0x3ADC21F7,
+0x59EAE958, 0xBEC28D59, 0x3A8525A5, 0x1FDC6BD7, 0x28817929, 0x4CB7F9C0, 0x1D0DD7E6, 0x48B031B7,
+0xA3A37233, 0x6C0ED1D8, 0xE526F78B, 0xF5A7B959, 0xEBAA1884, 0x1B7E5153, 0x31A3E42E, 0xD43B7745,
+0x5DA20867, 0x1FA7F915, 0x617D3254, 0x06F8DC98, 0x1477650A, 0xFBA7C992, 0x918AC875, 0xB4C2FAD2,
+0x6D2AD513, 0x333B24B3, 0x6B5824EB, 0x396893F4, 0x0421DEDD, 0x510163B5, 0xB7E6C340, 0xE82C83AA,
+0x44BBB753, 0x048D14D5, 0xAEBAABFF, 0xAF74EF74, 0x52E5EB57, 0x2F5A6FEC, 0x53AB5790, 0x8F1BCBE8,
+0x4E78E534, 0x9C993FDD, 0x1306899B, 0x7EA765CE, 0x5ACE076E, 0x4C38F8D1, 0xAC3137A7, 0xCF9DDF16,
+0xFB689FB8, 0xB44BDB4D, 0x75831524, 0xAAC5B261, 0xF4012C1D, 0xB93D3D1A, 0x1F0CDB65, 0xB10295A4,
+0xED8343C5, 0x8B9249C9, 0xA2C3B872, 0x8922969E, 0xD80F3389, 0x79B5B4E5, 0x96919D28, 0xDA88BAF9,
+0x2DE066FC, 0x3691D45F, 0x6419433D, 0xBF7A37C9, 0x81FAC616, 0x14327F2F, 0x5AA0D74B, 0x088383FE,
+0xCB2D0F27, 0xB170C5C3, 0x8F6F7928, 0xDB99A1C3, 0x02E6118B, 0xADC1EF96, 0xA51EB037, 0x272AF636,
+0x85F1D0B4, 0xC080763D, 0x143E78F9, 0x7020555F, 0xA54D76C9, 0x347FE5B7, 0x60B537A7, 0xDF8A5467,
+0x4E23D6E5, 0x88ED8C45, 0x97B3B55A, 0x1BE97DE1, 0xDFD0C661, 0x0550D5AD, 0x4F5A4DD2, 0x6252BC09,
+0x917B99BC, 0x3B0236BC, 0xBE78F13F, 0x82A1075C, 0x240F3B8A, 0xC3AECE58, 0x2EB56523, 0x783A6AEE,
+0x10F5C0CD, 0x49B795B1, 0x7D95CACE, 0xCAA5D6A4, 0xE3B16CB0, 0x2F1E6DCB, 0x766DE5F6, 0x3DACAEA4,
+0x67F46961, 0x9808D510, 0xFE9801BA, 0x2790CF39, 0xD360F348, 0x335EFF0C, 0x4548090F, 0xEEB865B2,
+0x16A5086B, 0x5BF26FC1, 0x83431FE3, 0x837AC4BD, 0xFA01F3C8, 0x16096FB9, 0x7C285BF8, 0x596005A1,
+0x1D9E644F, 0x6B7374F6, 0x450D39A2, 0x4FD0F4AE, 0x2B2C0407, 0x08255F34, 0x046E1ADF, 0x755652F8,
+0x8F376420, 0x852806FE, 0x22D44398, 0xC1A1D6D9, 0x61CA4E15, 0xBC53F2B8, 0xA42A95AF, 0x600D8EB0,
+0x389553DD, 0x8BFC7EDA, 0x5C7CDD73, 0x8D9D76A9, 0xCE0372ED, 0xF506FFE1, 0x1F5E813D, 0x43B528AE,
+0x3A77641C, 0x5A1BCC9F, 0xD1A97A60, 0x99CE180E, 0xE6E6245A, 0xC703C3B8, 0x4A0B748B, 0x5AB9C991,
+0xE4E508BE, 0x9C73ECEF, 0xB3A74ACD, 0x0800CDE5, 0xDC910FCD, 0xF84A2E70, 0x6767685D, 0x85E5C776,
+0x3565A1CB, 0xD31B2E74, 0x03347CE2, 0xB164C925, 0xC9E63FB8, 0xE359538D, 0x427E88FB, 0x61934C24,
+0x32AEC5B0, 0x7367B0E1, 0x618A77BD, 0xB7F8122E, 0x27E46BC8, 0xC12478BA, 0xE9CFECBF, 0x6AFEA93E,
+0x10878D40, 0x9F1E8A89, 0x77E92E27, 0x3AD634A7, 0xA30A3978, 0xF7CD3A72, 0xD63BC08F, 0x8D2DFC7F,
+0x52B88A70, 0x348282DB, 0xE0CCA652, 0xCE4F2ADC, 0x41BB6514, 0x45E1FD2B, 0xDB60CF88, 0x3BFE0345,
+0x88531AB9, 0x5F837B27, 0x3AEFC524, 0x40F694D8, 0xB65055EC, 0x05DA99AA, 0xC0B2A895, 0x2A5C42B4,
+0x6574D7DE, 0xD6FC992D, 0x5A6D3335, 0x59C8AF64, 0xAAA32D3F, 0x3E8CB8C1, 0x0EDD0022, 0xD5C0C107,
+0x5CE4EB2B, 0x300727CE, 0x027E5BBB, 0xCD039F98, 0x2D8662E1, 0xCEA8CB55, 0x26F31A1B, 0x1FE84297,
+0x1A660ACA, 0x0C1A87CE, 0x4D209B85, 0xABA008AA, 0x6DA5D54E, 0x6227A4D4, 0x4CCC4479, 0x0DEB2889,
+0xE37A3CD0, 0xFBDB1AB3, 0xD8C537B6, 0xCA09734B, 0xBB722479, 0x691DA853, 0xB6B94907, 0x6945E02A,
+0x64B11977, 0xEE289D64, 0x8ACEF70F, 0x1B2075D8, 0x562C1E9F, 0x6002871C, 0xD491E19D, 0x701793B1,
+0x0959B227, 0xEDE42ED5, 0x44D6AA87, 0x70307CC1, 0xA035DE2D, 0xE26297D2, 0xD42EDE91, 0x57D37ACB,
+0x354E540B, 0x6D70ABAC, 0x7661F471, 0x7B14D924, 0x5011F03F, 0x6D989490, 0xEEE709C3, 0xF4CC3D7E,
+0x854701A3, 0x9BB42D46, 0x8099D2F0, 0x5E1B0F9D, 0x5295CB45, 0x5673A53D, 0x9E49B5A3, 0xB37D1402,
+0x3ADF79D9, 0x858E3942, 0x957E3A6C, 0xFE825865, 0x095BBFCD, 0xB3B91606, 0xCC01F200, 0xB708C11C,
+0x226EE754, 0x31CCEAD1, 0x9F2AC6D9, 0xD5824205, 0x226D1F03, 0xE03E6844, 0x448CD5D6, 0x158B116B,
+0x9581F727, 0x310ADCE7, 0x37A232A1, 0xF3542EC0, 0x328AAA43, 0x7204C4E9, 0xB94A26E2, 0x6AF14CC8,
+0x7149017C, 0x4B8423C2, 0x298CC2B1, 0x1C630A85, 0x2DC267A7, 0x610824FA, 0xB1667804, 0xFC579C2F,
+0x6C354D01, 0xA9EEC236, 0x8DD61EBD, 0x4A5DC84D, 0x044BB6FF, 0xD4FE22AB, 0x460D8DA3, 0x57D45FDE,
+0x4CA66AB4, 0x649E6C75, 0xF3127A45, 0x6D68B9B7, 0xE6E5556D, 0x4FE1F69D, 0xDED659C7, 0x74DCCD02,
+0xE2738ADF, 0xC700739E, 0x5EF1BBCD, 0x07B9C0A5, 0xF3AFA574, 0xAC998B5B, 0xCFA10313, 0xDA4926F7,
+0x957E5704, 0xD8316511, 0xE155B9B3, 0xFD111714, 0xEFFB5787, 0x972FFE24, 0xC68798BC, 0xEDE3FF43,
+0xF7F95E17, 0xD2DB7E89, 0x875B7A54, 0xA74BB034, 0x18F83BAA, 0x47F3BE77, 0x41D0BC17, 0x7E99B65F,
+0xB294C32B, 0xA2BF3B5E, 0x5970F7DC, 0xC55753E2, 0x2A249259, 0xA0EF4037, 0x6096BBE2, 0x86946D4E,
+0x479C2137, 0x51FAFCA6, 0xC053696F, 0x209FFBED, 0x8BF44D9F, 0x2E283744, 0xBA72D308, 0x3796B9E5,
+0x5FC9B458, 0x51C4574A, 0xBDF6016D, 0xCB877413, 0x87C66349, 0xF21ED854, 0xD8412A9A, 0x9E1A4F45,
+0xA385FF31, 0x9E53819A, 0xBC6225CF, 0xFBDA0E91, 0x78DB4A18, 0xC7D57CB7, 0xDD8E7E59, 0xD45805AF,
+0xCCEEF038, 0x55103AE3, 0x89842328, 0x4F375362, 0x48465D98, 0x434328EB, 0x6E4136B6, 0x341F68C0,
+0x39DBAC38, 0xFCE60155, 0xDAE7A31C, 0xAAAD81EB, 0x653BDCC5, 0xDBE078B2, 0x95588A61, 0x0A54FF72,
+0x2CF409A1, 0x74AD5009, 0x5EA89D86, 0x7F91E97D, 0x49C7285C, 0x5A28AE7E, 0x512A7865, 0x5810F8C9,
+0x8C0146F8, 0xEF774D46, 0xD001AEBA, 0xB3DF1EBC, 0x857E4619, 0x78BF0885, 0xE70C958B, 0x0B0F2B2B,
+0x7440742E, 0xCB534907, 0xF0AA94CB, 0xC3917238, 0x14E93A1F, 0x9EBD9CC5, 0x99E7035E, 0xF5EA4CCE,
+0xB7A9A87C, 0xD2B45CEC, 0x048C4B71, 0x443E939F, 0x018057C6, 0x05534148, 0xD4B83118, 0x4866F4EA,
+0x0AE2BF96, 0x9FE60975, 0x18605B17, 0xAE4249D6, 0xD7199C35, 0x45C97055, 0x6E50FC46, 0xE77C9DF5,
+0x44BB0EA3, 0x8F12214E, 0x6AC387D1, 0x19E76E4C, 0x811DE9A8, 0x7098C580, 0x3480F27B, 0x4B92E308,
+0x92D54AFB, 0xFAA4D9ED, 0x60D7679B, 0x92DA1A9C, 0x6DC70164, 0x74882813, 0xE9E1DDA0, 0xFA71F27F,
+0x098323F4, 0x2C6A4967, 0xA4ED0A10, 0xAEE3DD36, 0x03351172, 0x176F84AE, 0xD47AC252, 0xB2CBB21B,
+0x374D0884, 0x9A9CFA6B, 0x14A1FA9C, 0xC3632F7E, 0x665C160D, 0xFF2528E5, 0x441D20C1, 0x87C74E71,
+0x4B72531D, 0x9937F595, 0xC3FF64D5, 0xE1E7504F, 0x42540DF1, 0xA0F7384D, 0xE4406009, 0x1CAD7D9C,
+0xDF0B5FE9, 0x2C387AAF, 0x3747C333, 0xAE478781, 0x136E0B9B, 0xB248D37A, 0x4C4BD844, 0x3D9FDC82,
+0xF13AC412, 0xBE3595D8, 0xE34DFD3E, 0x6F86216A, 0x66B9B1AE, 0xB48AB302, 0xFDEB374E, 0x865C0025,
+0xF7F74B2E, 0x76F96373, 0x9A1FD06B, 0xDE7FFD72, 0x54A0F08D, 0xFB5F7C6C, 0xCB1AC536, 0xA7C04F85,
+0x7578B250, 0xCF2E887A, 0x7FC0D232, 0x0173ABEA, 0x045CE048, 0x1297CB4A, 0x702F0676, 0x2797CF3F,
+0xDD633E86, 0xC75D355D, 0x6900A7FF, 0xB70BAD9D, 0xB86511ED, 0xFF98B6B6, 0x9F2FAF5C, 0x7669B980,
+0x2F4BEEAB, 0x6A1C2154, 0x170E9854, 0xB5E468B5, 0xD28C89D0, 0xB79D5EA0, 0x54AB2A95, 0xA6BC81D4,
+0x1B524FE9, 0xDAB2A7CF, 0x28035F16, 0x6C698A0D, 0xA362B4D6, 0xCAD19895, 0x8A2F604A, 0xFCDCB892,
+0x59D3D8D7, 0x0EAC3F06, 0x93FA1F83, 0x3BCFFB4E, 0x87131D4C, 0x9C2643BD, 0x37309755, 0x1CF77597,
+0x395CD873, 0x9749774A, 0xB1A2A1E1, 0x3F0A279E, 0x20A0B551, 0x3C33DB9F, 0xA7A05DF9, 0x6B614EDF,
+0x707BE381, 0xCE30BDD8, 0x19540B9B, 0xAF75888B, 0x7F8BEEF3, 0x85436789, 0x07CC37E5, 0x7397C497,
+0x73CF389D, 0xEFA73C9B, 0xC39B3D62, 0x8E8FDEF8, 0x5951BA99, 0x56CC8004, 0x1ACE7C81, 0x687C1323,
+0xCF4B7ACB, 0x56C636FC, 0x28C6F3DC, 0xDB4069D9, 0x1A843B64, 0x2FF458EB, 0xFF4E794A, 0xC7790A68,
+0x7CE19D25, 0xE51ADE78, 0x6544550E, 0xCB62BA62, 0xFE7D9885, 0xFC5AD328, 0xB2535A55, 0x696E2488,
+0x9E7B2EEB, 0x0506D3CD, 0x11DAF9A2, 0x4D9FAFC5, 0x3666E8F3, 0xF898B785, 0xD6C2C0E2, 0x0F2DB759,
+0x1C6270F3, 0x361DEAB2, 0xB07F152E, 0x6E1FCD82, 0x38129051, 0x65DB19C4, 0x03B2F714, 0xDA1A55E0,
+0x2CD4973A, 0x8334840F, 0x90382879, 0x0B1EBC36, 0x68B9A5E9, 0xBB9EE4B6, 0xAB718DAF, 0x541A17F7,
+0x4E223920, 0x165967B4, 0xE0E4E44D, 0x509FFB64, 0x76E6B291, 0xEEE78ADA, 0xAC55AD28, 0x8AC08CAF,
+0x94AD73AE, 0x625EC1F9, 0x419A5A25, 0xE6BB5FBE, 0x7DB08186, 0xDFF7BF56, 0xC97B45B3, 0x27609052,
+0x3A6C1B9B, 0x965418E8, 0x865B7C6F, 0xA6433871, 0xEB09D33B, 0x80611545, 0x26BEF99D, 0x0D19C31B,
+0xC9C41CEE, 0x5CFF6F8F, 0x6ECFC985, 0x4ED90BBB, 0xFDD4765D, 0x2C783F38, 0x05BB46D8, 0xE1790EA9,
+0xD5768DBA, 0x381516D4, 0x6A52FCA2, 0xEB6DE6DA, 0x08E37039, 0xC5D1763A, 0xA5AE9E28, 0x9FE45702,
+0x659C6309, 0x0A086200, 0xDA0683F5, 0x3B34F373, 0xD2B297B7, 0x21B2BB9F, 0x9C5249DB, 0xAF3B1C5A,
+0xF05CB2C4, 0xE60F99C0, 0xD7CA33A4, 0x8F23340F, 0x3AE57896, 0x9554B055, 0x58D627BC, 0xA678C8D8,
+0xD6468377, 0x82EC8314, 0x6910F401, 0x1B373F63, 0xF739348B, 0xCA908435, 0x7A43FEB9, 0xD5DC1827,
+0x3E848CDE, 0x7DB788B1, 0x22051736, 0xF68CD724, 0x18BBA252, 0xFABF6A30, 0x025E799A, 0xC40ACB5C,
+0x4E95ED7B, 0x369489B0, 0x001E9737, 0x9ABD8FC8, 0xDB838FBB, 0x99AFDCE2, 0xEE512F05, 0x9869A2E7,
+0x26B165CF, 0x1BBAE5E2, 0x011A14E4, 0x2A5814DC, 0xA0052680, 0x743644FD, 0x2CA7BE15, 0x7E56BE83,
+0xE8B9D304, 0xF07E59F1, 0x5E5B3F34, 0xCA8BB66A, 0x61EC808F, 0x680C1E59, 0xF721774B, 0xBAB448E2,
+0x39585213, 0x25B4299B, 0xCB8FD283, 0xDEF29473, 0x0BF9AD7D, 0x50B4579B, 0x704D857A, 0x6B8E8527,
+0x6EB6537C, 0xA8D07807, 0x1B3FBE23, 0xE15C0B0E, 0x4ED46D90, 0x1B0360F8, 0x3CA7BECC, 0xBBC81A92,
+0x6D5F7016, 0x5B008592, 0x94305A49, 0x083A9C65, 0x4646607F, 0xE4D8ACB9, 0x6A10D528, 0x99D56A09,
+0x3BA94940, 0x6C223B9D, 0xC9191AE0, 0x92955877, 0x350DE095, 0x7329C219, 0xF2AC0F56, 0xA11CF8E2,
+0x542BF937, 0xBFC9F32A, 0xCDCF282D, 0x1477CBF1, 0x7FD2B5CE, 0x67CE8176, 0x931C0AF9, 0xAF91C918,
+0xE6621DE2, 0x72730704, 0x6B944B25, 0x2BF8B646, 0xC7EA4F0F, 0x5F9F5CA6, 0x01229841, 0xA6F79527,
+0xC5E4E174, 0xA6EDA939, 0xC7B5E12D, 0xC9B6686D, 0xC6E7FE63, 0x7CBCA5EB, 0x39718186, 0xF498D252,
+0xBF45F728, 0x220978AC, 0x753B388A, 0x857BB695, 0x8CAAFE36, 0xD84EC146, 0x08425153, 0x2C1F4F2D,
+0xC72BBB68, 0x39A92C1E, 0x180876AF, 0x5D60EF1D, 0xCF0C5C6D, 0x51D30166, 0x5E98541F, 0x5B43F60C,
+0x13CC45AD, 0xD06AC4D6, 0x356610B0, 0xBA73542B, 0xEAE24496, 0xBA43648F, 0x5F6CFA9A, 0x1292E6BB,
+0xC0049F26, 0xC9BF8450, 0xAB9C26A1, 0x2E96BD4A, 0x0BE49E03, 0xC6512A60, 0x765273A0, 0xD7B2163F,
+0xE34AE50B, 0x1AA85BFC, 0xDFEDFB65, 0x5BC58143, 0x165F2891, 0xAB3EE135, 0xFAD735EC, 0x3CC0D74A,
+0x800932DD, 0x11E344A0, 0xD302C8D4, 0x09EBDEDE, 0x703F5ADE, 0x4F792788, 0xCC1CA3D7, 0x07A99094,
+0x7466523A, 0xFFD73EDA, 0x42338DF5, 0xBE70B763, 0x3BEC1D87, 0x5B6B286C, 0x1170C289, 0xCE6397CD,
+0xF0421489, 0xE16E78E4, 0x210BCB54, 0x1F9ED295, 0x69D8AF8B, 0x7C6D268D, 0x34219654, 0xD84B7400,
+0x86280A5E, 0xA2565F5A, 0x88312DCD, 0xCAD4D06E, 0xEBBB243F, 0x7C543BB3, 0x18A1AD4B, 0x9F523994,
+0x1D75D545, 0xBF075B12, 0xA03F4C69, 0xF3105FE5, 0xBAACADF0, 0x6B52F2CC, 0x2A6CC71C, 0x3F88E325,
+0x9688A9D3, 0x2C7AEC3D, 0x15E73052, 0x0D0BDC1A, 0xB11FC4D8, 0xD92CA356, 0x6ED41007, 0x9641355F,
+0xD987A8D6, 0x316981A2, 0xCC47E5D7, 0x31E6C0AB, 0x9D537611, 0x020DC8F8, 0xB9B917FB, 0xF766526A,
+0x833A294B, 0xF3A331FF, 0xB40A7B78, 0x79F66A7B, 0xED4CE950, 0xE9A56421, 0xD0890727, 0x5E524730,
+0xF585FBA6, 0xF2B7F082, 0x444D6019, 0xFA3F7C43, 0xCCE10AC4, 0xA4593CC2, 0x4D3EA26F, 0xDCE68B2D,
+0x710C7F94, 0xB34FB6C5, 0x33EC5DE1, 0x4D703054, 0x4573D775, 0xCD7FEE75, 0xFB16BC2E, 0xB0658C70,
+0x0FB47985, 0x0AFAE6F2, 0x95D37714, 0x3A685FD6, 0x6CD5ABA7, 0xD7CC8F53, 0xB52C635B, 0x88D89C34,
+0xA8C1DE16, 0x84DB56D5, 0x5D3A5772, 0xAA36A245, 0x280DEEB4, 0x40814692, 0x806B1F3C, 0xC819246C,
+0x6ED744D3, 0x6F6740ED, 0xED221647, 0x12916738, 0xBFA56659, 0x7BDB7366, 0x7AD9DD2F, 0x249BC58B,
+0x282C9732, 0xB3A5D376, 0x9DBAF3E6, 0x7FBF7C74, 0x296EC7BB, 0x1F1C6325, 0xF8AC8616, 0x82B0EDFA,
+0xD88A1E8A, 0x8FEF6EA9, 0xF6E8CD46, 0x67E92CE8, 0xDA219051, 0x1D8A054A, 0x4FF16140, 0x7B258EEA,
+0xF830676A, 0x168B665B, 0xF614E0A3, 0x51E80585, 0xD1B9DD23, 0x8345A806, 0x7B37CF87, 0xECE9E4D6,
+0xDFA2B3D0, 0xC65CD7D4, 0xC0E31F48, 0x0409D2D2, 0xFAEA394A, 0xFFF0135C, 0xD6DFC410, 0xF6DAC156,
+0x3A31EEFA, 0xD5BC72A9, 0x129897E3, 0xDE43B8A6, 0x1C443429, 0x199ECDE3, 0x0841F2BE, 0xC1F36B97,
+0x88CBB539, 0x5080151D, 0xF9A69306, 0x35EA9648, 0x602705A4, 0x8ADDCA08, 0x445C98C2, 0xB04D3482,
+0xE3FACB8F, 0xDCB8AA5A, 0xD47E8C65, 0x09F40D63, 0x6B801C31, 0xB7F4884D, 0x983AA845, 0x5AB59F4A,
+0xDED9F887, 0xAD4E3CFC, 0x7091C67B, 0x18B64E0D, 0xD9A591ED, 0xFD545763, 0xBD52B508, 0x67931E18,
+0x94D60A6A, 0x5581C873, 0x2548B62D, 0x527E0C6C, 0x3F504C0C, 0xCED31CE3, 0xD9532AB0, 0xE3100D60,
+0x58EDFE1F, 0xF24D892A, 0xC89A0F4B, 0x51AF70E7, 0x791A0A58, 0xFFCAFEDF, 0xA22A5205, 0x0C1526F5,
+0xFB3D1FFB, 0x5D1BEE52, 0x5EC52877, 0xA5FA3593, 0x2AF5A3EA, 0x4E05C945, 0x33142890, 0x9AC30FE6,
+0xD0A60BC0, 0xD9A9B596, 0x5BC602CB, 0x22FD4C65, 0x02286DA0, 0x31C55D56, 0xB180C6D4, 0x25ED9BB6,
+0xE8B16B08, 0x3785CC72, 0x4C406EF3, 0xDCC9C21C, 0x6A8074B8, 0x5E448FAB, 0x9D1079D1, 0x783FBD03,
+0xF45E34C0, 0xA20D9EC5, 0x55D64C99, 0xC7341FA9, 0xA798315E, 0xAEC2256C, 0x3F1AF0AF, 0x65D0A24D,
+0x881A024A, 0x70904784, 0x79B6E196, 0xA0647924, 0xC7BE6D29, 0x3B2E66CD, 0xC4AD09A7, 0x81293E77,
+0xF7EDA27D, 0xDC4EF631, 0xFEB82762, 0x8D6B59D7, 0x9968B9B3, 0x460499C8, 0x8B5139DF, 0x12D400D6,
+0x26687AA2, 0x3877DC52, 0x90E088BA, 0x549C6EBA, 0x021C94D8, 0x68AAB927, 0x847F3E36, 0x19E94BE5,
+0x93AD251F, 0xFB8E273C, 0x616017A8, 0x6D6BADE1, 0xC8386CCB, 0x09C8145C, 0x934F46F7, 0xCF7EC6AD,
+0x19D90999, 0x3936A4F8, 0xF6F3D030, 0x68A59795, 0x9CE72812, 0x6DD6FEE2, 0x64BB1073, 0xE5755577,
+0x0F904284, 0xD5F4CEE1, 0x869FB8A8, 0x212CB76D, 0x57D361D1, 0x37B45A2B, 0x3EB15E2B, 0x9AC830C0,
+0xACAB09F8, 0xD31B3A63, 0x5366F702, 0x724A9E32, 0xE5F01A62, 0x033CD88B, 0x361A978B, 0x6594ADFB,
+0xC3BD4BC7, 0x6155D500, 0xFF269C58, 0xDC214F95, 0x5905BDDD, 0x0A326EB5, 0x652E2E3C, 0xE8C4728B,
+0xF603F724, 0x41DCF5A5, 0x626B530F, 0x6560A897, 0xA5CFEDF0, 0xC7827BAF, 0x1C765FE6, 0x6F8FA79A,
+0x6A3DAD72, 0x94F63A09, 0x7F9368C3, 0x7E5F6352, 0x9E891DD8, 0xCD04B922, 0x4F898368, 0x88A865B9,
+0xF2D3F5E9, 0x27A0932B, 0x82A1E2D3, 0x9DB20667, 0x09E1A59E, 0x1A25651F, 0xF152E6B2, 0xFEC19303,
+0xDF122C42, 0x28105815, 0xA00B80EC, 0x99DA7EA1, 0x4B49F519, 0x182C70AD, 0x0DD0D2CB, 0x6F80E019,
+0x70D6C318, 0x2BE39ED5, 0x3B502DDC, 0x69DAB131, 0xD9283AEA, 0x27FB2B7A, 0x68687665, 0x71045DFA,
+0x36A43A67, 0xE3AEDAC5, 0x7A1DA2A5, 0x83A602B1, 0x257C1155, 0x11BE4DA5, 0x02F48FC0, 0x6AAC4230,
+0x68A45C82, 0xE9F7AD97, 0xD2FAF871, 0xEB350F3A, 0x1936A43B, 0x7B46C1DD, 0xAAFC05F7, 0x260D92F6,
+0x44663EB9, 0xE2C4E34E, 0xD58FDA9C, 0xDD1F123F, 0xE7D08BA2, 0x005AB03F, 0xAD46966A, 0x3746C74A,
+0x4795229C, 0xFBC6949C, 0xA556927B, 0x9D7F545F, 0xB73AAF33, 0x6ADDB796, 0x19BD1337, 0xCFDA1DC7,
+0xA111FC05, 0xE7736E12, 0x8FD90A79, 0xD87E0040, 0xFC7BACBF, 0x2863E60D, 0xD198461C, 0x4CE7C52E,
+0x5B4DE095, 0xCE1F4A9D, 0x7E640F97, 0x4B3E5E89, 0xF2854CB5, 0xD6C031A9, 0x0AD11A21, 0x8E581C67,
+0x58A6206B, 0x872C7D84, 0x54BB1B7A, 0x3505D6A2, 0xBB96CD6F, 0x78A18D54, 0x5F69C29F, 0xDFA403DC,
+0x879D9DDD, 0x05464157, 0x6011A1E6, 0xD39105A1, 0xDC6987C5, 0x0161B0AF, 0x8C43E600, 0x23931CA1,
+0x9A800E9A, 0x987F4B4F, 0xFD973865, 0xB27B9E70, 0x10C44F6C, 0x8B814727, 0x2DB19BCC, 0xFB4E45D3,
+0x1B8034D1, 0x1CDA0C16, 0x0EB07357, 0xCEACEE9B, 0xCAF1B54B, 0xA85B9C60, 0x6CE0E544, 0x7867FF26,
+0x10E3EBB5, 0x2D131F3C, 0xC91911DD, 0x5903A40A, 0xDE0031D6, 0x9B20DF34, 0x30D01D02, 0x663244A5,
+0x4F7802E8, 0x29C7EBC7, 0xD2B63BD2, 0xC7295668, 0xB022FCD4, 0x6B3BB765, 0x21DC2831, 0x183BEF04,
+0xDC3122DF, 0x6B18A285, 0xC810D490, 0x8C003B53, 0x0E5C408A, 0x06908B67, 0xCA5AF7A4, 0x7BAF3610,
+0x5EF6E432, 0x25547CBE, 0xFE1820B6, 0x95C68093, 0x43D1D17E, 0x22AF3605, 0x88E8378D, 0x7E84CBCD,
+0x7F90A53F, 0x89CF19C6, 0x16135D68, 0x0F38B7B4, 0xB4C7EB29, 0x4B9028AD, 0x5CFCDC25, 0x452FFA04,
+0x7D86FD28, 0x3438DD99, 0x24E5886F, 0xC9188183, 0x175C11EF, 0xA1683CFB, 0xF8ACB5CE, 0x6EDE7039,
+0xAF528D58, 0x73F887B2, 0x29BA94FE, 0x040AE116, 0x4A4DD56A, 0x2590266A, 0x30397841, 0xC1607596,
+0x99BE1E9F, 0xA00F6098, 0xA8D2FE18, 0x761EE4DB, 0xC1529ABC, 0xB32E2663, 0x86BE5817, 0x168051D2,
+0xADF350E7, 0xB7004541, 0x173B7987, 0xD6CFCDAC, 0x7C644F00, 0xD9D1D1EF, 0x46706994, 0x2DE1E1E7,
+0x1F0137CA, 0xAE09EC20, 0xF1D0FA22, 0x0FD119A7, 0x4AAA28B8, 0x9EA4C59B, 0xFD48174A, 0x309DEBF6,
+0x4322D848, 0x358E1FA6, 0xECC87EDD, 0x837B1BCF, 0x646D11B8, 0x1634BCBC, 0x28BAFAD6, 0xB840539E,
+0xC9673B8A, 0x560305EF, 0x055F9361, 0x71A69318, 0xAAE04B89, 0x0F156F0D, 0x2E1A3075, 0x745FB63C,
+0x8DCB7C43, 0x8971D311, 0x74F6D871, 0x582AE4FA, 0x0891BFE0, 0x298509B2, 0xA44F63A6, 0x3195E49A,
+0x1CE7A764, 0x6F371D5F, 0x07B729F5, 0x7E92902C, 0x4ADE7019, 0xB381C5BC, 0x9B17D84E, 0x693B09E3,
+0x98A134E8, 0xE5D8546F, 0x33E4F931, 0x9F7E1594, 0x7A7A2675, 0xB5CD6BB9, 0xFD7DCE9B, 0x85DA9399,
+0xBA91D41D, 0xBCA0F1D8, 0x0E9F07A1, 0x593F4893, 0xB81A4C67, 0x77FE9949, 0xE874DC8F, 0xE1A4F1FD,
+0xE4131B96, 0x3BCCBEF4, 0x66528137, 0x95A4F8E8, 0xAFA41800, 0xE62C82B6, 0x111A6E68, 0xFF85282C,
+0xE51288F4, 0x5732498E, 0x9101CF80, 0xABFFEA10, 0x5DC7E249, 0x59D72811, 0x97EF9FE4, 0xA2C1ACF2,
+0xAA2F24C1, 0xDD47235A, 0x25AF5A3C, 0x8520332E, 0xE1A2FC3C, 0x9CEDEE0D, 0x970E99B7, 0xF3C3E673,
+0x5F64D6AD, 0x8A3565DF, 0xA2B4EABA, 0x7B90E7C7, 0xC0709518, 0x9D3CD65E, 0x5167BF86, 0x02CF5A07,
+0x1DA5C4B7, 0x7CFD9DD2, 0x5785CFC0, 0xEFC712B1, 0xAF267A5A, 0x0184F8FA, 0xC4CE5B84, 0x5B414FBC,
+0x5ECAA7D5, 0x277CEE94, 0x62C5FA73, 0x18B47BBC, 0x2237583A, 0x403AFA07, 0x60F18676, 0x0AC33B0E,
+0xA0F40094, 0xE6C0062B, 0x6803C010, 0xA66943B5, 0x87EAF3EC, 0x69105796, 0x5996DD90, 0xFB8F4F8F,
+0x0FB19544, 0x32AF95E2, 0xDAED8D3A, 0x3F48FBFE, 0xF74207DE, 0xFCA49EF7, 0x94965528, 0xBFAC2E31,
+0xCAB9AA1A, 0x2DE71E7B, 0x058C3E82, 0x49B9003D, 0xF0EA1A4F, 0x9E4BCADA, 0xFB3C277E, 0x6CEEB3F5,
+0x9E6C3377, 0x477B8E0D, 0xBE692DC6, 0xC6D7823E, 0x1205D353, 0x11BBFF34, 0x6A0C24F1, 0xE1DC87C2,
+0x0EE71DFB, 0x835768E2, 0xB23A1737, 0xEA5F3C0D, 0x78556E99, 0xBCB01025, 0x57AAA306, 0x0609C39B,
+0x6F7C4430, 0xF54EC530, 0x2C0EF8D4, 0xE90E6FC1, 0x8090649A, 0x30358D9F, 0xFEA0AA68, 0x682739F9,
+0x4BF71D24, 0x03D90274, 0x6C89E774, 0xF2FFF363, 0x45E4EB30, 0x10D54F00, 0xE149A173, 0xF9C8D121,
+0xC3FAF123, 0xFA5FDEE9, 0x36C89224, 0x3C60137E, 0xA2B8C2A2, 0xD140E0EF, 0xCEB721B6, 0xD6E7EA0B,
+0x7DC846D0, 0x1746A201, 0x79204D8F, 0xF4447BC0, 0xC24A1E3E, 0x4497DE20, 0x49CD6412, 0xB8FB1699,
+0xDA305052, 0x140B4516, 0xCE8BB181, 0x97E567FA, 0xFA3DC101, 0x71D02EFC, 0xA7B503C0, 0x10E8DE84,
+0x0375C289, 0x31E9B452, 0x2753951C, 0xBE0B53A7, 0xEAEFAA77, 0x02598805, 0x845B4253, 0x26936200,
+0x9592C254, 0x83785FC2, 0xA9EC8088, 0xDA1C0A8E, 0x6E4EAA6C, 0x2031EBD7, 0x1823C26F, 0xC1156A10,
+0x7DA17848, 0xB211998A, 0x2EA94BB7, 0xF49C41E4, 0x6FCB7F88, 0xA4BDE969, 0x33FB5439, 0x03E46F29,
+0x59C03D7B, 0xF0A3D438, 0x33C558AC, 0x1ACAEA4D, 0xF2D8BD35, 0xD2155713, 0x89BEB00E, 0xA04BA7AE,
+0xF6C2BC8F, 0xD4D2B68A, 0x906EFC0D, 0x3B67C218, 0xEC823C60, 0xFB5FA036, 0x8654C725, 0x7EDAF3C2,
+0x2540986B, 0x4E610911, 0x91239300, 0xBF98AB1E, 0xE1EBD574, 0x86418AB0, 0x8DE8E946, 0xA9CCC33F,
+0x4898E321, 0xAC14DEB7, 0xBB5F35BF, 0x357D8C36, 0x356D590D, 0xBF7C6518, 0xC5216F81, 0xB2EB1A3E,
+0x67D932EA, 0x39967A35, 0x1841BE69, 0x77CE2EC3, 0x7BAC4B82, 0xA353945C, 0x1163F47E, 0xBACA5E7B,
+0xA5E7BAAC, 0x1218037F, 0x5A878D30, 0x2788AC1E, 0x394DED7B, 0xEB577FCD, 0x4547351D, 0x3C06DAFA,
+0xA0CEF57D, 0x936B1711, 0xF54BBD4A, 0xBD803F25, 0x2BAF4977, 0x6004FFDD, 0x7511133F, 0xA2ACDCC5,
+0x1C30F62A, 0x12618AD0, 0xD7FDEC41, 0x9799E54B, 0x18F1B21B, 0xCC214863, 0x73B087F5, 0xFD12F11B,
+0x4AF55D23, 0xFEACB67F, 0x5CD1453A, 0xC80069F7, 0xD1B9B300, 0xF2E1F293, 0xBB0D1496, 0x29BE63F7,
+0x09D4AED3, 0x78987D15, 0x4960E178, 0x318534B5, 0x57D48688, 0x5CC62055, 0xFCAE88EC, 0xD36F6D8D,
+0xD1C6FAF6, 0x1863CD9B, 0x32FD467F, 0x7136F35B, 0x48844459, 0xE1E4C271, 0x38DE11DA, 0x57AD8533,
+0xEA6E9A2A, 0x2ECFC790, 0x22E5D6D5, 0xADEBD495, 0x7F3298CE, 0x5EA32D88, 0xD361230F, 0x4FB3A486,
+0x13AFC597, 0x9EB29148, 0x14E72231, 0x29A2D0D4, 0x8052BD51, 0xDFBF8C7D, 0x953EC3B2, 0xB13B3719,
+0x431BB512, 0x556EC677, 0xE2D6C1F9, 0x89A53BB0, 0x504CC30C, 0xBE59C081, 0x2C7DFC99, 0xF69510DD,
+0x733D6B53, 0xBAA936FA, 0xD0B5D7A8, 0x4D089B23, 0x24820A1F, 0xFBF3C5F5, 0x21298BCC, 0x36FB14B6,
+0xDA107A6A, 0x30FA403F, 0x4B2B6A6C, 0x1371A7C1, 0xB14A1691, 0xC1AC5034, 0x723DB63F, 0xF5736185,
+0xDD841F02, 0xE81D687C, 0xD2DF5102, 0xF367B029, 0x20AFD8BB, 0x5981D327, 0xA4C67F59, 0xCCD07D6E,
+0x5B16B7AF, 0x629052E1, 0x0A335CE6, 0xB5168B4C, 0x4B1D99AE, 0x1285D221, 0x2B2EC0B8, 0x88B376B5,
+0xE02B2F8C, 0x25D3CE39, 0xDA8E994F, 0x9899513B, 0xA98F0837, 0xCF746CA6, 0x6C8153C8, 0x89450C52,
+0x15B17C21, 0xFE969053, 0xCDACDC55, 0x631FB6E5, 0xF8D531E5, 0xC6F3B3D3, 0x69AA43D4, 0x8EBACCB0,
+0x137AF186, 0x1134A24A, 0x03AB0428, 0x1532A7AF, 0xC096BE17, 0xB2853548, 0xED388A4E, 0xC3F722EC,
+0x23BF3071, 0xFC613452, 0xB1EACCFF, 0x8888D678, 0x399B93DA, 0x991CDB7F, 0x9015D361, 0xB1CAE4B8,
+0x9FF0D608, 0xFE905720, 0x8E41D9C0, 0x434E8BC2, 0x6B83F36E, 0x0C3AA807, 0x8E9737C1, 0x933E866D,
+0x81FDFDBC, 0x3ACF7F28, 0xD1197CC1, 0xAEC00BEC, 0xD1A50720, 0x1089E0B0, 0xC36293E3, 0xE5F41EA7,
+0x47271734, 0x9C7B51E6, 0x1D83B9F0, 0xF49838FD, 0x238A7A2C, 0x59BBB15E, 0xB9BE53BB, 0xAA643424,
+0xF8141D8A, 0x301FE14A, 0x3BAC88EB, 0x8A23C6B0, 0x04171478, 0x759B6897, 0xA760831E, 0x9AB980AD,
+0xB92BBEB8, 0xF9AF5C24, 0xA18F93BD, 0x9AB1D03D, 0x42339CC2, 0x044CECF5, 0xD14DC2C9, 0x24127BA7,
+0x25228FC5, 0xFC55BD6E, 0xBD0D4D34, 0x2D1A0A8F, 0x064A0E17, 0x70562C27, 0x4AAC5B45, 0xF0BA3636,
+0xB0A71371, 0x7DB1A111, 0xC393D5D4, 0x5B716742, 0x433B92A0, 0xE4D01E79, 0xDA9C074D, 0x77F09275,
+0x71696976, 0xA9037DB7, 0xB44032BC, 0x167CA173, 0x9E867C6E, 0xC12AF48A, 0xA60AE084, 0x03ADFE11,
+0x910B62A1, 0xFE9D6405, 0xAAFA9228, 0x9BD4BBAD, 0x2DFF1FB7, 0xCBF5F24B, 0x9DFA5CDE, 0x3EB32402,
+0x86234523, 0x85D73E6D, 0xF1AD8498, 0xAB448181, 0xC0706560, 0xE96A2B0A, 0x25246665, 0xB54AF3EB,
+0x18A7B9FF, 0xCA09DDCC, 0xFFA3BB32, 0xAEFB6507, 0x25803A55, 0x0DAF6915, 0xEA2024CF, 0x8B2FA93F,
+0x92D213BB, 0x091F6D5E, 0x85389ED1, 0x5DD0E0C6, 0xBBE15B56, 0xF8824459, 0x39800492, 0xA7688415,
+0x7B959CB1, 0x70A40793, 0x6551CC10, 0x9BBE6675, 0x8E73555B, 0xE17E0E75, 0x2B2C48FF, 0x50D5CA3E,
+0xBCAF638F, 0x39DD931E, 0xBE73F78D, 0x13DF7E57, 0xF0E0A1B6, 0x2D3E8537, 0x6EB09E35, 0xEB7462EC,
+0xADB18731, 0x504ACFC0, 0xB1CFBFF7, 0xCF84A8DA, 0xDD60C106, 0xF36FAF74, 0xD070449E, 0xCEC52892,
+0xEC448F2F, 0xDDD8C56E, 0x2FAD9374, 0x945DE53E, 0x5C8B4086, 0x5B7EC544, 0x39343F21, 0xADBDC354,
+0x6C853075, 0xB5017EA2, 0x999877F8, 0xF25C689A, 0x232C83FD, 0x9AEEAF71, 0xD7D19BBE, 0x4144AA51,
+0xBCA4252D, 0xA4D45535, 0x860236D2, 0xC28F3BF2, 0x850FE87C, 0x4FD13007, 0xD9FFC8F4, 0x30AA8C92,
+0xC854F15C, 0xFD9FBA26, 0x259731CE, 0xE88B1D84, 0xD73300C0, 0x0400C79C, 0x57216021, 0x1F134C95,
+0x8F2C964D, 0x18059907, 0x3D284524, 0x446645BB, 0x95804697, 0x70136F51, 0x7DE0B556, 0x1A636E45,
+0xC3CA08D8, 0xFF85D59F, 0x8E161A35, 0xC7892B5F, 0x4A2AB774, 0x88889283, 0xFECB7C42, 0x2A75942B,
+0x32831FA9, 0xC271C1C4, 0xBE8C35FA, 0x6D8910D9, 0x46F2F5F2, 0x01434985, 0xF5239111, 0xDCDB9E80,
+0x9CF7F912, 0xF203F1C8, 0x8B21F886, 0x605B1D36, 0xE3939909, 0x62F16D49, 0xB4ABC874, 0x8EEF6FDD,
+0x45F89C3C, 0xAD48902B, 0x0CD8A989, 0x37C18B25, 0xE00E1620, 0x0F6AB64E, 0xE4D11159, 0x6C2DDFCC,
+0xBBD06C62, 0x8F6DD63B, 0x2666B53C, 0xB7E44D8F, 0x5E8D6A21, 0x8423D4F3, 0xBCB9AD8D, 0x12191AEF,
+0x9826146F, 0x3BFFC55E, 0xCABEC0C8, 0xD19D0B22, 0x893BE359, 0x2C907348, 0xAEBC2D3F, 0xB7011C0B,
+0x1EBC2C53, 0x9E6BAAD5, 0x72FD5C00, 0x3375D4B5, 0x1A427D31, 0xB740FF85, 0x01F02AEE, 0x8B8912E2,
+0x1489FBD6, 0x9110E547, 0xBCB18C57, 0x7E1B25CA, 0xDC085079, 0x874D2963, 0xCA91B6E8, 0xF19791E3,
+0xA5DA6E21, 0xD087D551, 0x7380952B, 0x660DBF41, 0x54D778EE, 0x2274F9F1, 0x59FAF8DF, 0x0334B57F,
+0x20513352, 0x6B3BFDBA, 0x262723B1, 0x45EE8143, 0xE273F1AF, 0xC9E75792, 0xF7DBD92B, 0xF5BC61E3,
+0xE10989B0, 0xB46F881E, 0xF3DC7721, 0xB75B0397, 0x5847B845, 0xB37AEB71, 0xAE202A95, 0x49DAB8B4,
+0xF0CE81BF, 0x19DBC74C, 0xFE9E6028, 0x582EBDC7, 0x815F9D0F, 0xC620AC14, 0x7A94476E, 0xF9966E57,
+0x4323B767, 0x32C605A4, 0xAEEECD90, 0x6043A0B9, 0x420E802F, 0x34B8DA2A, 0x3E54052F, 0x9E44FCF7,
+0x53EF712F, 0x95E54458, 0xCDEBED3F, 0xB6FB3E4A, 0x103FFDC4, 0xB948073A, 0x4E7B1D08, 0xB6A9D8DA,
+0x13498EC1, 0xA0BB50C7, 0xA051CCD5, 0xD6E57C94, 0x9EF93F93, 0x5A903FF7, 0x2390C845, 0x9E5B4815,
+0x735D44E9, 0xE4FB5A5A, 0x3EAD7121, 0x61CCE25C, 0x721E9C65, 0x8C0F9155, 0xFFFB8F27, 0x2150971C,
+0xCAFEB03B, 0x76CE91E8, 0xDB719941, 0x49206AFD, 0x1892EAB1, 0xFD30ECFB, 0x25CB5315, 0x5241E366,
+0x45AA30F7, 0x0CBED029, 0x3DF802BF, 0x31434FC4, 0x209CFDA4, 0x9FA8EEC3, 0xC64B6102, 0xC863505C,
+0xD103C253, 0x77B5B32F, 0xD1DFC276, 0x81CD792A, 0x48878682, 0xFBF69F33, 0x89E5ACD4, 0x49D8DE92,
+0x3EEC0697, 0x5D1C64B6, 0x41145429, 0x07E327D9, 0xB40027C0, 0xDF8EB977, 0xE009510F, 0x295846D1,
+0xC093E7DD, 0xAF0CCB66, 0x0EEE38BE, 0x68249FE7, 0x78582EAC, 0xF60A408E, 0x9AF7FB65, 0xD5DE7D6C,
+0x552C8FBC, 0x2F731C0D, 0xC2996792, 0x4C57AAC3, 0x86FA1E4C, 0x9A97BE6A, 0xB5BB011D, 0x1B54C57E,
+0x32BFC069, 0x175B0806, 0x4DB7FF74, 0x89318470, 0x546710DD, 0x1998E266, 0x9B910909, 0xCB274993,
+0x06A9857E, 0x113DF5A2, 0x65619FD2, 0x201F0E0E, 0x9379C891, 0xAD5788CF, 0x5E73C1BE, 0x6384A0C6,
+0xCF5ECB46, 0x810A0E31, 0x4719DE0E, 0x86BB8737, 0x548F6D6A, 0xBE33827B, 0xCF246050, 0x5DCB2661,
+0x3BA28A70, 0xB50EEC14, 0x57FF6FDD, 0xC454E259, 0x1DCB6C2C, 0x991C967F, 0x4EA5D1AA, 0x098747D2,
+0xF5A17525, 0x66428252, 0xD100A77A, 0x50BC3097, 0x51B5DDA9, 0x5F838498, 0x5B4127BB, 0x0D253478,
+0x166C8739, 0xBD22EE55, 0x0D546538, 0xA427BB5C, 0x51E37C4D, 0x687A0690, 0x42FC0A87, 0x3834FC68,
+0xA03B7432, 0x363398AD, 0x4F6EDBAC, 0x47835CA3, 0x57B80B0F, 0x38A0BDFE, 0x679E249D, 0xD03840F7,
+0xA6EDACA3, 0x5853B315, 0x6E3ABDEE, 0x2FE43F4B, 0xD2E9B01A, 0xC14786A5, 0xDB9F919E, 0x48ED96FE,
+0xF6665079, 0x67D4F855, 0x70BB631C, 0x9125FFA0, 0xE40202D7, 0xF01DFB5F, 0xCC00A25F, 0xA3D42957,
+0xEC8958AE, 0x8AEFA46F, 0x7F898EAF, 0x3EB68D3F, 0xB4A966AB, 0xFB4557F8, 0xC5C7C8FA, 0x9D80112B,
+0xF874D0F4, 0x80C99C77, 0x722B8B85, 0x34FD09E6, 0x55505834, 0x4FACC354, 0x4E69B095, 0x9C844221,
+0x0FECF431, 0xAE3065A0, 0xB2468266, 0x700A5AE1, 0x6A3CA04B, 0x95C6075D, 0x51D45D95, 0x324F5E59,
+0xB07C34BA, 0x35377969, 0xF0770076, 0x7D70FEAD, 0x11E3B9D6, 0xECA8E6CB, 0x054106E1, 0x63338AC9,
+0xBF350C02, 0x103BC95F, 0x14BBCDFC, 0x9197EF51, 0x8B92302D, 0x506C60FE, 0x845C30D1, 0xFD5667D2,
+0xC89B9AB1, 0x7A6F5FC3, 0xC6E86BAF, 0x448235B8, 0xB57FAC1B, 0x15C7179A, 0x3294A67A, 0x02AC38D2,
+0x270D9753, 0x38992AE2, 0x359DDE00, 0x22DB1975, 0x2D91FC22, 0x313DDF5B, 0xC2FD1D9E, 0x507D39C8,
+0xB96DAB3B, 0xAFF11410, 0x20211915, 0x0C27F94A, 0x5904DBBC, 0x88D4A397, 0xE305C54E, 0xCC532CA7,
+0x1020BC55, 0xCA96D8DE, 0xF79C3403, 0x55901A3D, 0x511AC3B6, 0x689318B5, 0xDF8CF135, 0x256D882D,
+0x32B50F89, 0xCE958D0D, 0x2D2C7DA3, 0x608E9AF2, 0x75DBFB71, 0x5FEC3F93, 0x8DD9D886, 0xAA2D142D,
+0xCB76BAAC, 0xC1DA81AF, 0x08139E3C, 0xBA0E8E96, 0xD145D2C6, 0xDAA2992B, 0xA51B4307, 0xAD87EE90,
+0xF0372824, 0xF43686EA, 0x502BE910, 0x78E4D99F, 0xEE23D24D, 0xB6E02A36, 0x5E4F98F5, 0x09B7E00C,
+0xDE203689, 0x79951A24, 0xB37B2405, 0x31B6BC7B, 0x9D7E769B, 0x7BAF3F97, 0xCFF7932D, 0x84298C60,
+0xCA07A2DB, 0xC7DF1801, 0xA309E59C, 0x92826BC1, 0x91F4EB75, 0x1F208828, 0x734EB55A, 0x9223814A,
+0x4CA11E50, 0x62F0110F, 0x3C401958, 0x7890F06F, 0x0DEAE4DA, 0x28634CDB, 0x7AEA1892, 0x5C7D221A,
+0xF8054C88, 0xA90EE63B, 0x9316825A, 0x1E17B75D, 0x721C374B, 0x4B6326D1, 0xA1715C7F, 0xE44F8715,
+0xCCE012D5, 0x4C7BFF70, 0xFD5D89BC, 0x8E9C8E99, 0x69A7A2DA, 0x16B0691C, 0x4298C6E4, 0x93DA53FB,
+0x6B1C25FB, 0x536E98C0, 0xA284C11A, 0x8573BE0D, 0x59AD5BC7, 0x4E83D8E4, 0xC39291A1, 0xD5A3FB00,
+0xAA76EE26, 0x054B8A2A, 0x7AD8160D, 0x6572CC20, 0xD517E226, 0x0A7C4F16, 0x7644393D, 0x96348B6B,
+0x4F1AF852, 0x1C4BEBCE, 0x00A0C9E6, 0xC0005AD9, 0xDF0D0229, 0x1A27E41A, 0x38B86904, 0x69300A1B,
+0x2E9153D6, 0x4EA55737, 0x4934B33A, 0x312E8185, 0x8E0D7E71, 0x5DD3B8BB, 0x2E08C160, 0x84515AF7,
+0xC9482EE1, 0x6DEBF5C6, 0xB218D9DE, 0x70DB69CA, 0x465A6395, 0xA80ECB43, 0xC830ABEF, 0x5206FB48,
+0x311061D6, 0xF34A7186, 0x25117DDF, 0xE891E609, 0xD91BF161, 0xA4786F64, 0x8234FAA7, 0x0BF7118F,
+0xA4701BD6, 0xA4AB7E92, 0x0C997389, 0xB26A98E5, 0x9204E38A, 0xF41D1337, 0xEEFFA0D6, 0x776987F9,
+0x453582AC, 0xE5CB61BA, 0xD3A84852, 0xF5C82FF5, 0xD43576F5, 0x008886E8, 0xB8ADB94C, 0xAD3C54CA,
+0x39C45D61, 0x408E2902, 0x512F596E, 0xF0D27FB7, 0x3E67776B, 0xBC877A8A, 0xEDED1B3C, 0x73B4D505,
+0x7F3EB17F, 0x53D7B49F, 0xC96C2D18, 0xCF2F3560, 0x45A24731, 0x9F3984FD, 0x3ADC86A0, 0x4EC8E602,
+0xF3429B99, 0xFCBE008A, 0xD479AF64, 0x1276CA0B, 0x4BCC93FC, 0x3BA17403, 0xDE149733, 0x4E0AC16A,
+0xBD864F65, 0xE3DCD704, 0x71A000C4, 0x59C4A8E2, 0xB26F1784, 0x30979903, 0xE718351D, 0xFDD9FD0D,
+0x04E3EC10, 0x9FC11641, 0xECDBF946, 0xB480D2C5, 0xC9E6A735, 0xA5F0DD05, 0x64F1136D, 0xC37C34E9,
+0x0D547EEA, 0x9385FD93, 0x9FAEC17D, 0xEFF7C711, 0xBA4DEB70, 0x74684D59, 0x461005D9, 0xBC844569,
+0x72A7AD1E, 0xFDD1A21B, 0xF3FD62D6, 0x011C51FB, 0x91C3F2DA, 0x2B6BEF2C, 0xA3B23DB7, 0x7F2FA4D2,
+0x88C96317, 0x0E4654D1, 0xF6C380D4, 0xAE81CD57, 0x1A9DB405, 0xD0D4AECE, 0xBBD461EA, 0x59EEF1CB,
+0xBCFD83D7, 0x1DA1C2E2, 0x48E2E71F, 0x41E4D910, 0x491037E1, 0x65F5149C, 0xE7864251, 0x82D6CB71,
+0x75479887, 0x8B583604, 0xF6C57E10, 0x2F1EA231, 0xB03CE6AB, 0x62B16EE2, 0xF5E0D81B, 0x68ECF276,
+0xA56838F9, 0x321154BD, 0x650A3B6E, 0x7029468B, 0x2B393BFE, 0x6B0AF4D4, 0x1BC7EC92, 0x7F455BAC,
+0x10086DFE, 0x6B3F6882, 0x533C331E, 0x27F11153, 0x75B6F4E5, 0x1497DCF5, 0xB22D21FE, 0x41031E41,
+0xF12E652B, 0xDEAE63CB, 0x3863D7E7, 0xB662B0FF, 0xDD9AA64A, 0x69A57317, 0x4448E098, 0x54557ED2,
+0x4CEDE70B, 0x6D60D6F3, 0x3DCD4D2C, 0x9E6449BE, 0x65A25C54, 0x940E10DE, 0xFDD0F9ED, 0x3E04534A,
+0x1A9B9CBD, 0xEE1F423B, 0x5D1D17CE, 0xA267890E, 0xE38F7EB6, 0x257CFFFC, 0x84E05866, 0x1A3F75E1,
+0xC86CE6D7, 0x01A590D1, 0xE7004BBB, 0xE81D5B2F, 0xF67520CB, 0x457B70C3, 0xCD7F4962, 0xBC9FB3AD,
+0x4A98D8BF, 0x2EEEEBEC, 0x9C4785BC, 0x7237265F, 0x19E4C2FB, 0x9BE84B75, 0x2AAA32BD, 0x761E1F67,
+0x41D0FCC9, 0x414FFC5F, 0x00A025C8, 0xCE05C30B, 0x7B055BAA, 0xAA930B74, 0xB7FFB322, 0x9E7A40FB,
+0x47408175, 0xCC277286, 0xD2887584, 0x1F5EA3BB, 0x1CAD013F, 0x180B486B, 0xE64100FA, 0xEA61FD09,
+0x677BECE4, 0x057C0BB5, 0xC57210D4, 0xAE84DE44, 0x38BB5A9C, 0x8DE9B1B2, 0x8F3DE4A2, 0x24080F51,
+0x025D8B57, 0x3A5ACDC9, 0xAC8AD79C, 0x9BAA35A6, 0x241E103A, 0x9F9FBA5A, 0x6C3C9EE7, 0xBDBE0951,
+0xA5B2C810, 0x9BA58DD0, 0x3C301ABC, 0xA4F8F0DF, 0x735FA6A8, 0xB181329C, 0xA0F6520B, 0x4BDEBDA4,
+0xDCB1A544, 0x9F9AFE74, 0x32133202, 0x1EEB355B, 0xFD157594, 0x12DF8760, 0x33BC2CCC, 0x208E647B,
+0xE935336C, 0x5A0A7D38, 0xE374AC62, 0xDE3167CA, 0x6E21FF41, 0xA2E7EAF7, 0xEAE2343D, 0x51383087,
+0x9FDA1D98, 0xA2169307, 0xE9561B5B, 0xF5DCC0AF, 0x58BA7920, 0x458D9162, 0x0466F329, 0x574DDD93,
+0x56E22A46, 0xAC1CC39E, 0x69CBA6B5, 0x9616A069, 0x2791DE49, 0x28ADCB25, 0x549FF769, 0x9DBBD458,
+0x5DFF872E, 0xECB35824, 0x736019CA, 0xD1ED6EC0, 0x9A807B2A, 0xA61C8775, 0x512122D4, 0x35483AF3,
+0xBF1D16C1, 0x975C54E3, 0x4630F0E4, 0xDD8ACCD6, 0x283FD0FB, 0x1233C330, 0x0F9FA17F, 0xD8AAF862,
+0x066A9497, 0x80E5212D, 0x34A3B22E, 0xEEC00BC0, 0x20FF684D, 0x6BAB3B03, 0x59432646, 0x4A01A4CA,
+0x32A66E32, 0xFF8F267C, 0x144A27A9, 0xE9369B0F, 0xFE7D89BA, 0xCA6387A7, 0xF36FB9C7, 0xF67A5488,
+0x92FA4BF4, 0xDAE9BD2D, 0xA869FBA9, 0x3E3F2F63, 0x1BBA3989, 0x390A783C, 0x4485FFA3, 0x6B32C025,
+0xEAAC53C9, 0x182EC133, 0x3DDE9C89, 0x9FA4C1C4, 0x73B576A5, 0x363B5634, 0x2D1AF6BB, 0xF511F93A,
+0x7A0E1D6D, 0x2E27A7FD, 0x544A9E48, 0x3822E5AF, 0x882C1C07, 0x50D3BBAF, 0xB068FE0D, 0x376E8B59,
+0x3FF21228, 0x2D1CF004, 0xDE179263, 0xFFA3CA38, 0xFB860140, 0x9180887E, 0x5B779D44, 0x652374CB,
+0xDDA9B26F, 0x3B11CADA, 0x41D520BC, 0x9228CF4E, 0x3A842D61, 0xB557DDB7, 0x1C398837, 0xF9232E15,
+0xB9F30A17, 0x39371215, 0x0A4A06AF, 0x7708C96B, 0x5DACE68F, 0x8CF1578E, 0xEF2B8478, 0xBB0C1049,
+0xF51EF97B, 0x1E2913A1, 0xC32DA623, 0x5AA877CA, 0x9C0ED363, 0x72074FA1, 0x43BEAA66, 0xC1AD1ACD,
+0x32C81639, 0xE21E1A35, 0x697FECFA, 0xB0D0779A, 0xC5389BB6, 0x0C9E600B, 0x9ACE4C4A, 0xA68E249E,
+0x33217051, 0xB16BDAAD, 0x81E9A2D4, 0xFB6C556C, 0xBD292D8D, 0x0624944A, 0x93FF99E3, 0xFC4C8CBB,
+0xCCE84522, 0x3E4B6502, 0x365C32EB, 0x1C29051F, 0x52A50EB0, 0x1F9E6EBE, 0x9DDA3D86, 0xDF0FD29D,
+0x36B61C89, 0xBE5AE3A8, 0x166221CE, 0x4DD24752, 0xABD8069E, 0x8796581C, 0xD55D2360, 0x44708A4E,
+0x374E6371, 0x954E957A, 0x858A8B00, 0xADA29D62, 0xE40FB7D0, 0x2E716401, 0x3CD50F0F, 0x6D17F5EA,
+0x16B8052E, 0x5947E473, 0x0DEE922D, 0x9C3A63DF, 0x213D0371, 0xBEDFD34A, 0x37EABCC8, 0xA236F091,
+0x71EFBB09, 0x56A97C46, 0x250563EF, 0x4BF13C4F, 0x1447982A, 0x687D35F2, 0xA88794DF, 0xFC7D10B3,
+0xC833F162, 0x05B065BD, 0x924CA3B6, 0x4F99F4FB, 0x53E50764, 0x478B874E, 0x4DCE1999, 0x6A9DBDD5,
+0x202C8A3B, 0x1DA9E869, 0xC781CE10, 0x14C3AA0E, 0x56E261F9, 0x3D5EB8A2, 0xC0042D61, 0x5181CE5B,
+0x579C03DE, 0x40DD5690, 0x901FD370, 0x23976424, 0xB7D93FA3, 0x645733D4, 0x9F99C1AF, 0x117C47BA,
+0x7D825501, 0x47FBBCBE, 0x29C69215, 0x4364E722, 0x5E1A3921, 0x47567961, 0x54841741, 0xC7B4E6B4,
+0xA5388374, 0x8719DA26, 0x1FB6CEA9, 0x2BF72C69, 0x52CD62EF, 0x5AC451EA, 0x3E715C6E, 0xB1F3707D,
+0x4DDCC581, 0xE8948A62, 0x79001C43, 0x510FC9D7, 0x7894CC4A, 0x0CF49E3D, 0xA614163C, 0x0FE7A49C,
+0x0D3ED18B, 0xDD1B6E3B, 0x6C35C6E9, 0x7BC56B10, 0x72C439FF, 0x5FF5505D, 0x073E5823, 0x3A31E629,
+0xD3AA5E7B, 0x17ADD66F, 0x3DE36EE6, 0x9D0926FC, 0x67A20487, 0x6F34730B, 0x1CE828B8, 0x757BF647,
+0x9EBE7CD4, 0xE6C50059, 0xA0BFD0B5, 0xE6FEA294, 0xF587A30D, 0x649ADA76, 0x181AC889, 0x87C09B4F,
+0x1195518F, 0x4584A43C, 0x0E945AA8, 0xC5AE6FCE, 0xF7D6E9FE, 0x513DD889, 0xA8790397, 0x93F0160A,
+0x037601E7, 0x97568859, 0x78A9D6B5, 0xA9CCC5C1, 0xAE8FACB7, 0x146141A1, 0x309FE1AD, 0xD549AC23,
+0x71803578, 0x96DA07BE, 0x52BE9476, 0x7955BF66, 0xFE8D3E99, 0xF2871AF7, 0xC9056B6C, 0xDB0837F7,
+0xA2CF4CD7, 0x403EF0EE, 0x55C51CC4, 0xB338EF4D, 0x9366E807, 0xEFBD2465, 0x7CB8FF7E, 0x04769CC3,
+0x8D50FAC8, 0x0D066DCE, 0x409C4490, 0x71B8DADA, 0xAD967DF2, 0x249BC380, 0x50AB2494, 0xF5B92F95,
+0xEED55578, 0x303AB1AD, 0x3BE30351, 0x63268C52, 0x8AB63787, 0xD040C5DC, 0x99B8EEAC, 0x931D58CE,
+0x386AB543, 0x40C3B3FE, 0x2135CFCE, 0xA4B76BCF, 0x2FE53CD5, 0xDF65459A, 0xC1219A15, 0x66719E57,
+0xCA0E201F, 0x4B7B76EC, 0x00A768C2, 0x9EBFF955, 0x2B09E934, 0x9C489824, 0x3CC5D7D2, 0x418D7C9D,
+0xFA8310DC, 0x1CF81C41, 0xE5F6465F, 0x1AE36774, 0x9E201851, 0x22F271CA, 0x633A2DE6, 0x01AEC384,
+0x94599572, 0x96D779EA, 0x45C692FF, 0x9937D278, 0xA16F07A7, 0x49AA5783, 0xE5DD63AF, 0xECBEF76D,
+0xEDED78AE, 0xFF844263, 0xAC021794, 0xE1CB2172, 0x95A6788B, 0xE9023B71, 0xB8DBA026, 0xE52F4A7B,
+0x74E066CE, 0x22222476, 0x44B55B8C, 0x9CCA70CE, 0xB965DCEB, 0xF9C558B4, 0x2643D6F9, 0xAC9C0F34,
+0x862F7425, 0xA5B72FB6, 0x01E44DB5, 0xB14C7FD8, 0x9CF7CC09, 0xFDF3FBF4, 0xC70CC3AD, 0x6D11F3E5,
+0x4C6DDA08, 0x12B59E5D, 0xF479B275, 0x5FAE88AC, 0x7ADE0519, 0xE0636464, 0x7B6A87E0, 0xFA20F981,
+0x191B644B, 0x99000EA5, 0x6E5E3C9F, 0x9CBCB81B, 0x94A8A9D6, 0xD17663C7, 0x396B35BF, 0x94274976,
+0xE1C86EF1, 0xEAC50935, 0x9FF99A58, 0x703068AA, 0x03BB0250, 0xA9FC78F3, 0x36A8A27A, 0xAC19E6AC,
+0xE0821F84, 0x528BD7B6, 0xCBA1AA4D, 0x29B9CC25, 0xB1DFC9D2, 0x34DED11B, 0x47023FC7, 0xBD18D800,
+0xB268233B, 0x987E131E, 0x26EE9872, 0x739D0041, 0x4CA2CC21, 0xC691331D, 0x4FA24A0A, 0x43EF28D3,
+0x1BA79454, 0x4CBB7AF1, 0x6D820344, 0x8A059D56, 0xF7031EC8, 0x011D1914, 0xE95A2C9D, 0xAD3EEFAF,
+0x9AAF7D16, 0xAE9CCF6F, 0xDA5D9C8C, 0x4989A2BA, 0x3DD1992A, 0xEFCF3FEF, 0x17FA3D12, 0x19FE5680,
+0x5F0AD868, 0x07B63E53, 0x9C806D1C, 0x273968A3, 0x0EA6CC6F, 0x95551304, 0xE0634A3A, 0xAAC04AE4,
+0x4F25F48C, 0xCBA7063C, 0x36B495AE, 0xFA80CC3A, 0xE0AC2B64, 0x528666EC, 0x028EFA05, 0x2DCDE71D,
+0x5ED10EA1, 0xAE201AA3, 0x53A9820D, 0x88777169, 0x5F8E3354, 0xD935BCFA, 0x928F442B, 0xBA99B6C6,
+0x02577010, 0x4661772D, 0x3366B97A, 0xA5F70083, 0x26DFD365, 0x15317E88, 0x4C3FF7F1, 0xDA90C4BF,
+0xA5314101, 0x88F151EC, 0x64E96721, 0x6FDBA6A5, 0x4B6EEE61, 0x4434526B, 0xBAE11A09, 0x4C05FC69,
+0x980B239C, 0x8DEE2268, 0xED6095BB, 0x7B94C963, 0x92CEE266, 0x75823DE8, 0xAFDC2A7F, 0x85651878,
+0x7720D5A3, 0x4348370E, 0x21853624, 0x4EB4B3C6, 0xA6E348E4, 0x7C08E8CB, 0x3EFA401F, 0x3343E539,
+0x71C196B6, 0x0A706A5E, 0x710390AB, 0x621CE593, 0xC0CFE559, 0xF51E72B8, 0x9A6BBAF0, 0xF421045B,
+0xE230EF4A, 0x1A056849, 0x78ED08A4, 0x6E346F7F, 0x18206E34, 0x938CF351, 0x5813FD10, 0xA91A3FA7,
+0xCD70DC2E, 0x51976801, 0x8C5C59FB, 0x0AA9208F, 0x28997314, 0x3D75B5EE, 0x0FB86561, 0x235399CB,
+0xA48CA9B1, 0xE5F16B73, 0x535B0F8D, 0x91B40750, 0xC1305BE6, 0xE60B05D8, 0x86A34A99, 0x8686FA42,
+0x97AC9664, 0x2D843034, 0x0A70867F, 0xF5790D02, 0xF13DC56B, 0x5577C4AC, 0xEDF460F6, 0xBD786052,
+0x1285B336, 0x97F7E251, 0xFF2F6126, 0x585BE96B, 0x68AE4B17, 0x597FD251, 0xAA1B69D0, 0x4ABD3775,
+0x094D7595, 0x09032F1D, 0x0FEF45D6, 0xA7F78BFC, 0xBC848081, 0x2AFF89B0, 0x12EB4396, 0xD0C99835,
+0x4C2D25DB, 0x8589F9C3, 0x4ED078DD, 0x14FCDFB7, 0x997809CA, 0x6247879B, 0xEE0831DF, 0x5CC9E540,
+0xD07D3F74, 0xCFF4A974, 0x61E5988A, 0xEF457A2A, 0xBDF66259, 0x4A3EAD61, 0xF2727B51, 0x146C7872,
+0xFDAF4762, 0x13283304, 0xBC2B64E0, 0x2A41D93B, 0xF1CD99E5, 0xD19DC766, 0x52F6B25A, 0x8A1502BA,
+0xEEF5F206, 0x19D33818, 0xEED60A92, 0x2F23BD5F, 0x07D41807, 0x3BDE8C0C, 0x54E64BC5, 0x6D2BB724,
+0xC9429E86, 0x18F8F17B, 0x686A7683, 0x27ACEE69, 0x977D342A, 0xADFD10BC, 0x678832FD, 0xAF308896,
+0x6784C4E9, 0x325C79B7, 0x52778F7E, 0x3F31BBF8, 0xB03AC281, 0xAF080853, 0xBA7BE70C, 0x88854199,
+0x2026ACA9, 0x2A9FF5BE, 0x050006E2, 0x614152A0, 0x82194795, 0xE02E9D88, 0xE643A5B3, 0xD8CF546F,
+0xE168F5D9, 0xA6E760DA, 0x3287731B, 0x00909331, 0x27B080C5, 0x222008EB, 0xBF0048D0, 0x2D392197,
+0x89247954, 0x5DBC3B5C, 0x1FEF62A6, 0x22995813, 0x17C129C6, 0x416D4959, 0xA038288F, 0x6C91EDB9,
+0x55BFE857, 0xDD3977F0, 0xCA1F2493, 0xB58DA6F3, 0x0BC35D39, 0x009D982F, 0x8225D5BB, 0x5A226D09,
+0x2453BAD6, 0xF93D25A7, 0xF43875A7, 0x8D1C9A55, 0x63DE96F5, 0x5CD08BF7, 0xE4386651, 0x01AFA6CD,
+0xFCF38C94, 0x818974C4, 0x4B822A21, 0x2D152CA3, 0x16250F2C, 0xF14D1941, 0xD384DA9C, 0xB65EF7D8,
+0xF7FB873A, 0x033A3596, 0x9AB9B3CC, 0x500962F9, 0x2710515C, 0xEBB8FF96, 0xDE705CFC, 0xA0ABA941,
+0x21BD7F33, 0x3B134479, 0x63BC26C7, 0x0433E027, 0xD1138FF9, 0x17BDCFD4, 0xA581E78F, 0x59323D1E,
+0xBBBDE5DD, 0x9D89E4FD, 0xD6BD5DE3, 0xC5A5FB41, 0x126E3253, 0x35C34D28, 0xCE50AFCA, 0xFD060825,
+0xBD31A59F, 0xFC92B965, 0x386FB04A, 0x23C42666, 0xD3B61F29, 0x6E8E650C, 0x9A56055A, 0x7F206B26,
+0x14F7198A, 0xF50D3D2E, 0x50447D67, 0x48174B57, 0xA95796F9, 0x8B0EDF8A, 0xCD1A6E94, 0xD7E0E886,
+0x5E07D434, 0x1F68FCD0, 0x5AE09328, 0xBD033053, 0x13A62359, 0xDB25E68A, 0x1765DCC3, 0x01A3A0C9,
+0x4FB85114, 0xD39A2DC7, 0x0E26639A, 0x0C7FB4F4, 0x6D881246, 0x65619001, 0x9DE7CAD7, 0xFA1EF2B1,
+0xD1112EE2, 0xCC762E69, 0xE4E7EF07, 0x5849A761, 0xCA54D7EE, 0x67221AA5, 0x2394EFE0, 0x2E126677,
+0x5E3F4469, 0x89FF40FB, 0x8B34514A, 0xDE0C117A, 0x61293088, 0x8DE23358, 0x32AF455C, 0x1478CA40,
+0x07B5B2FF, 0x100F7745, 0x1F7E81E6, 0x0F67F8E1, 0x33445A25, 0x159C6AE5, 0xF9E85424, 0xE577D441,
+0xAE72F366, 0xF282406A, 0x65307861, 0x1F3356AD, 0x4A9E913D, 0x292900A8, 0xBDCDF281, 0xF5F84B7C,
+0x493C6EA3, 0x0A802CB2, 0x3FEFABB8, 0x34742B55, 0x73012D9A, 0xA6192F67, 0xF9097C9A, 0x9C3AC8A6,
+0x889000F4, 0x73E66DB0, 0x0C7CD533, 0x8E24CF5E, 0x3F167E70, 0xFD07B8E1, 0xA1114668, 0x62E1DBE2,
+0x8D5082D7, 0x55C6ACD2, 0x55168F8F, 0x1DAA681E, 0xC6C2CAF6, 0x58D8DF41, 0x0A79658D, 0xFA77DBA7,
+0x7A53CDFD, 0x4C4A42D6, 0x52E19B76, 0x50B04E61, 0x3B03727D, 0xC674D85F, 0xE642AEE8, 0xB722A57F,
+0x7E648499, 0xC235F5D2, 0x2E0F3681, 0xE2845266, 0xB86EA3C3, 0xF8686885, 0x81319A56, 0xDA641CF0,
+0x42A9386E, 0x41330CEB, 0xDF42EA24, 0x801E0827, 0x3998FEE2, 0x5D05062F, 0xECD50F71, 0x6113F133,
+0xF54330A9, 0x4C19B29D, 0x9B1DFF61, 0x8D8A1BC3, 0x55D1F7DB, 0xE3906454, 0x647F636B, 0x3F656132,
+0x9B173688, 0x3F4F68AA, 0x4832E410, 0x72CE0374, 0x4374B696, 0x3C2D06DD, 0x6708FA67, 0x8181EEEC,
+0xAB06AACC, 0xE94590F1, 0x506D6FF9, 0x123077B7, 0x266A0DD1, 0x350EF6D4, 0xD3E07AAE, 0x5DDFF082,
+0x60437863, 0x379846C1, 0xDF0DADA7, 0x5328E61F, 0x6D770243, 0x51FBA914, 0x5E7BBF83, 0xDAE7248D,
+0xA6EA7C5A, 0x2C08AB6F, 0xBFE75139, 0x02697DC9, 0xB0AF4265, 0xB47B7682, 0xAD4565A8, 0xFC0722F5,
+0x8C40163B, 0x843017AB, 0x98001C0D, 0x88A292EA, 0x4AF67E11, 0x8625335F, 0xB07D0BA5, 0x894D02F3,
+0xA2C8FACA, 0x247D5B4D, 0xF1071497, 0x30D10F3A, 0x65F8E79D, 0xB17CAE8E, 0x501A2E9B, 0x7492F28D,
+0x9005F9EA, 0x1E68020C, 0xF08946B2, 0x1AD114D6, 0xCB2503E3, 0xC0B7F596, 0x97C611F4, 0x70919EDA,
+0x3058FD39, 0x1695DA7B, 0x6C5D692B, 0xF623812B, 0x254FF310, 0x1086A123, 0xB9E5E568, 0x9284DFD5,
+0x2D6F6421, 0xE0B6F570, 0x674CD480, 0xBC638EA2, 0x43DFE268, 0x5D27195A, 0xE16DB09A, 0xB6E83E06,
+0x935D4F8C, 0x68F5F8AA, 0x4BCE11C9, 0x078FB835, 0xB1F82A74, 0xE89A3041, 0xB41FD6E8, 0x74667FA2,
+0xC7C961F0, 0x59DDB812, 0x1238E4D3, 0xBFF746F9, 0x80AEF354, 0x6515071C, 0x5AA27DB9, 0x8AF5D744,
+0xF3C76C4D, 0x681E1143, 0x2FC2396D, 0xB04A1FF8, 0x603552ED, 0x1428FEDB, 0x284DA056, 0xB6D18A4E,
+0x5609618A, 0x28920B93, 0xDCEFE2ED, 0x50AB90A2, 0xBF638600, 0xB6606D22, 0xA672AA2A, 0x18FD4606,
+0x134A492D, 0x5DD1C7A5, 0x1F83DEB8, 0x0C1C14FC, 0xB301A18A, 0x7EB27F00, 0xD76A791D, 0xA040FF3D,
+0x9DF9A199, 0x74564248, 0x8D6E0225, 0xEA0CD5E1, 0x971BA336, 0xECF699C7, 0x8CFC2D35, 0xC749C037,
+0xB90ACC7C, 0xBB08B55C, 0x0E917D0F, 0x90009366, 0x6CEA746E, 0x49269E09, 0xCE5BC31C, 0x69370E59,
+0x39DF7122, 0xB4CE6800, 0xBD231AC1, 0x37A3E19F, 0xD3139621, 0x668DF9C3, 0x9A082F92, 0xBBC01BB2,
+0x66FEE811, 0x7C7CD087, 0xE9A37223, 0xFE58A9E6, 0xDE1B9C6A, 0x7DC8041C, 0x4A43EE14, 0x2ADD9893,
+0xBBFAECCE, 0x2DEC07EA, 0xF8372F31, 0xE8E69C4A, 0xBEB11BBF, 0x3C3DAB4B, 0x65ACF036, 0x536BB464,
+0xA77DC030, 0x083778F8, 0x1F42859C, 0x3C433162, 0x2ABC6F1B, 0x2E330E16, 0xFBAE2DD3, 0xF5E8390E,
+0xB8263738, 0x410066C4, 0x5AAFAC8D, 0xE6FC6E0D, 0x20F37FAC, 0x5B0B7957, 0x0F39F97B, 0x8DEC4278,
+0xD22F8E46, 0x87BC4427, 0xCB3139F0, 0xA887A0E4, 0x473B3605, 0x16C16586, 0x0CED664B, 0xE4F31F08,
+0x0C7B404A, 0x4B28A54A, 0xE814E83E, 0x2A455BC7, 0x050EFD68, 0xD93B27A0, 0x1947E029, 0xCF2487C8,
+0xB0D698D2, 0x275F85DF, 0x9C532978, 0x08FA90EE, 0xA6C27B9E, 0xC411FF42, 0x082B8174, 0xBEBDAFB2,
+0x316E2751, 0x10A1775A, 0x7279462B, 0xAB8518E0, 0x99645A69, 0x843A74D6, 0xF5B68C84, 0x33C8BA8D,
+0x146A9409, 0x00BE8328, 0x31265DC8, 0xE980EE97, 0x4BABE97A, 0xCF6A6485, 0x7A35894D, 0x242884D1,
+0x40BA548F, 0xD480AD7C, 0x39511A15, 0xE0F7B78F, 0x1340DF74, 0x50D0A955, 0x9A4CA6B7, 0x47070935,
+0x2D4B13FF, 0x86F7242F, 0x78A1F380, 0xE82B2F8B, 0xA54064D4, 0xDE51A370, 0x840C8AB4, 0x6FFD75D7,
+0x4B57E98A, 0xF127C3EE, 0x7012C103, 0xD35B6E92, 0xDFF6886B, 0x9A7AAA9A, 0x273EFBEA, 0xD745786D,
+0x3ECCA981, 0xD8710BCD, 0x5BD87B77, 0x39A599AD, 0xA3837714, 0x0BC6DAE8, 0xE879C11B, 0xE84C862B,
+0xC637CFF7, 0xFBC8C379, 0x5AFAF0A4, 0x507E5A89, 0xF8C82556, 0x68D49A0E, 0x121C1E34, 0xDCF2853C,
+0x0DA9EB6D, 0x0D6CF8BE, 0xFCA26C3B, 0x28FA1567, 0x193084FF, 0x4E0B771D, 0x71262AE0, 0x6F5077A4,
+0x673A3217, 0xD6B465CC, 0xE3903775, 0xCCA4D75E, 0x0801C349, 0xE3A3D11D, 0xDBF2AF1F, 0x7777E640,
+0x9323A467, 0x13075255, 0x806EDDF4, 0xE30E7328, 0x588A9AEF, 0x9DF79282, 0x7731CDEE, 0xF810D73B,
+0xC41749BB, 0x178539E9, 0x402FE658, 0x93D25488, 0xBB9F2A93, 0xC847316F, 0x3F5887D0, 0xA33F3268,
+0x29E85ECB, 0x5689E8E9, 0x6DD61A5C, 0xF28EDB48, 0x720CC755, 0x7E8CE9AB, 0xD369C80C, 0x389106B6,
+0xDC9C681A, 0x2D0D91CC, 0xAED29CA7, 0x3C55EC73, 0x2BF05B75, 0xE681A71B, 0xEBEC2664, 0x22DFEC45,
+0xD228B751, 0xFED2A53A, 0x4146FE67, 0x0D83499C, 0x099BFEC1, 0xF13679A8, 0x986C6AE8, 0x9D7450C2,
+0xBF50190D, 0x2C48684D, 0xA5778CB8, 0xE05E1AC5, 0x8537CA54, 0xD3D4CC00, 0xC3443D89, 0x9C64E68B,
+0xCDADA160, 0x8D3887BF, 0x971FD880, 0x4CD16B36, 0x3368A9E6, 0x262D87A8, 0xBC889366, 0x6BA04C4C,
+0xCF84634B, 0x782444F3, 0xAF5A044D, 0x9402EED2, 0x85543658, 0x0AF7EE64, 0x868EA3A8, 0x998DEDCE,
+0xAFB9FD50, 0x02E0947D, 0xBAE743C1, 0xE976D5FB, 0x6FBC173B, 0x7E75B314, 0x5C2E4ED3, 0x2A3F882A,
+0xC26EB52D, 0xE37318D7, 0x9719DF81, 0xBBBF15FD, 0xC7B95F36, 0xBA17D3BE, 0x72742BEF, 0xB54E01F1,
+0x5EDB0FC0, 0x28410AB6, 0x028C5D84, 0xA81DC3F0, 0xDB796BE5, 0x3D2EE07E, 0xDAD90B39, 0x834733EA,
+0x2FE9C7B4, 0x3F8B866A, 0x7B924E11, 0xFAC32CCB, 0x10C21102, 0xF2B2A5EB, 0x9E6CD2BD, 0x807C3557,
+0x08B935D2, 0x26A262D6, 0x0C166A05, 0x6A18E246, 0xE78FB539, 0x11EF0C3F, 0x7C143E54, 0x0F2C1C07,
+0x4ED3A835, 0xC9BD2389, 0x4D268D08, 0xFFB8A145, 0x5E98234D, 0xD7D73D81, 0x310EC235, 0x7EF70DCD,
+0xE54146A1, 0x3BD9BDF4, 0x98E5A0FD, 0x86D53595, 0x1330B6E6, 0x0C54FAF8, 0x5F27E701, 0x36DDF539,
+0xD857F131, 0x65D89472, 0xBF6DCC52, 0x8191FA5C, 0x591AC790, 0x81FF341D, 0xD2A82AED, 0x996649E1,
+0x839D78C8, 0x20606271, 0x1C09E015, 0x4CAA5072, 0xA28B4974, 0x75548107, 0xBE0E0498, 0x080C2F4C,
+0x671EF9E3, 0xEE04C361, 0x139A0C1E, 0x725E1FFB, 0xA693B69D, 0x8E056CDF, 0xC2C2D0CA, 0x9CBC8951,
+0x73BB3E58, 0x2334CC69, 0x04F2D45C, 0xBD4714C3, 0x49851F3E, 0x725E3C05, 0xF235C2B7, 0x1DBD6C49,
+0xB89CB8DF, 0x2987FBE7, 0x4627E3E5, 0xFB728FA8, 0x63357F9A, 0xEEDE886F, 0xEC3E9ADC, 0xEE88970D,
+0x34789177, 0xC0FF469A, 0x80B097C9, 0x5D8D7E69, 0xC643389F, 0x3DAB17EA, 0x2D0FC47A, 0xA8B1E5FF,
+0xDB3D99DB, 0xF4371E7A, 0xCC0B8B0D, 0x305FBABD, 0x2BCD28B3, 0x8BF9C5D6, 0x5E74D756, 0xEE0026E3,
+0x01722175, 0x5B6D2BE7, 0x2F9CAD2F, 0xCAF1753C, 0x39090F0C, 0x90CE4BE7, 0xCF6E5F14, 0xD0311397,
+0x374631FA, 0x0768B098, 0x69D5AA4C, 0xE1833386, 0xB3CD5648, 0x4314459F, 0x36C79A30, 0x3AC306AA,
+0xBA50443F, 0xE6DE078F, 0x3C3615AA, 0x57222BA6, 0x2382FC75, 0xF8E504B9, 0x84BCF240, 0xC5711487,
+0xF76FFACE, 0x516C713D, 0x7501E98F, 0x74A7D84D, 0x73B3B0EB, 0xE2B608B7, 0x336C2DFC, 0x568D4252,
+0xBCDE6951, 0x7F936E45, 0x661EB2B7, 0x32B2378B, 0x030B0A2F, 0xD1C59DA6, 0xA0FD7F11, 0xDBCD4D6B,
+0xFF24F907, 0xB3604F24, 0x8CEF06D8, 0x1EC3B996, 0x075E43DF, 0x3746C014, 0x56DC1CFE, 0x4CA61E89,
+0x71DA55C0, 0x46C43F3A, 0xDF8DC1B4, 0x00BB0A9B, 0x0F7C77C4, 0xC6887F2C, 0x9F63B6A8, 0x87B71C3C,
+0x2E6C36BA, 0xBE759C5F, 0x5C8B0CB1, 0x31143283, 0x185AD037, 0xB643AAD9, 0x8BA6F908, 0x2786AB78,
+0xCA278F1F, 0xEB4E89AF, 0x1F7FB24B, 0xB58CE0BF, 0x10AAB1A5, 0x132D088D, 0x6CF8C993, 0x38C08B5A,
+0x06AF8A7E, 0x6779729F, 0x40EF6398, 0x7A2237F1, 0x6714AA46, 0xE623F0C7, 0xF1FB7366, 0x4E7E155F,
+0x908F99B9, 0x526C72D8, 0x593007C0, 0x47ADC435, 0x6C1FF95D, 0x0A9A63F6, 0x74FE1B5C, 0x225D0DD5,
+0xDC75649A, 0x6FC41C6F, 0x294B6891, 0xA181FF65, 0xF7CBB3AB, 0x0C65DA26, 0x36636FF3, 0x70333DBE,
+0x564576E5, 0x3F517854, 0x66CEBC95, 0xA9998DB2, 0x94AA6D42, 0x50B7DDFC, 0x40F7D06A, 0x1AE5441F,
+0x7AC1EF05, 0x055D6636, 0xB5C9625A, 0x3F0FC605, 0x6BA018D1, 0xC6071045, 0xB07D10F8, 0x3874F5FD,
+0x755D2AEE, 0x39B60967, 0xFDB60FEF, 0x3F7DF59F, 0xFBA8FF48, 0x6F4BC331, 0x739D7FF7, 0x89CF71E4,
+0x19BE93EF, 0x51CEDB17, 0xE2EDA192, 0x0E9BF1B2, 0xEDEF0857, 0x3427823B, 0x692C7667, 0x7B92059B,
+0xBFE3C734, 0xA89F3B9F, 0x22A0B301, 0x14BBCC0C, 0x0C9A98CC, 0x3229FC6B, 0xA0EF50DC, 0xE3D3DD18,
+0xD0C96548, 0x10208297, 0x82E9D4E6, 0x1FE60A1A, 0x4A63C072, 0x8A87AD8E, 0x59AE04A8, 0xE68FE8C0,
+0x4CF6FFD1, 0x76E65B55, 0x6223AB12, 0x272EADF9, 0x68DF4BEC, 0x3961BC77, 0xAF214CAD, 0xB62B980C,
+0x7E1DB4A5, 0x66D0E55D, 0x71A20C5A, 0xFE1F1335, 0x136648AC, 0x948B0F77, 0x04146330, 0xEED18FBA,
+0x0FBDD7CE, 0xD71DFAB8, 0x164002B3, 0x83C8C6C5, 0x112F4C32, 0x7119B8BC, 0xA241D6F3, 0x46A92F1E,
+0x41329A6B, 0xDCCF5F8D, 0xE9DE339F, 0xEBBA1258, 0xE42FDC39, 0x9253D5BF, 0x7DA9A207, 0x9C8BDF9B,
+0xDEC97EA3, 0x60DAAA48, 0x5E2C06A2, 0xD7454BD4, 0xAD7F467B, 0x87C4A207, 0xA8DB4ED5, 0xB61F9498,
+0xAEC024B5, 0x12023810, 0x346EBFE8, 0x768FB295, 0x8F048BD4, 0x8B4BD8EF, 0xCAD51DF2, 0x806A0206,
+0xB6A1B763, 0xBF09AF64, 0xCF8D8C8E, 0x67F0E612, 0x8D873306, 0xEAC67E14, 0x95682D3E, 0xDE0A472E,
+0x3F2146F0, 0x4760ABD8, 0xC90E1AD2, 0x7C012114, 0xC88D51EE, 0xE9B4913A, 0x3276DBB6, 0xEE954D0E,
+0x6E5393DA, 0x1098DBE2, 0x82B9E24F, 0xBAE01B7D, 0x4D5096FB, 0x3CEFBA15, 0x2852D368, 0xF6AF79FF,
+0x5F1C275D, 0xE8CFA865, 0x43384443, 0xC181E6AC, 0xCB667B5A, 0xFB656CAB, 0xCBEF1D2F, 0x93F167F0,
+0x7BA5A74A, 0x8512BD80, 0x248340A7, 0x0E23B879, 0x3EB25960, 0x16292788, 0x7D75E726, 0xB3B27E1C,
+0xFCBCDAB4, 0xC2876AFF, 0x16CBDE75, 0x5E1CF052, 0x630A24B4, 0xA3E944A9, 0x26789894, 0x98C190FC,
+0xCD661D93, 0x50C86F99, 0xB6FF5936, 0x6A0471ED, 0xD8C178FD, 0x3C8219C5, 0x62C5A7FF, 0xF5CB350C,
+0x9E5E36DF, 0x2E377F38, 0x0BEC6108, 0xAC4D65A1, 0x59B2AF38, 0x083DA464, 0x2969F6A0, 0xFF647843,
+0xD0011A4E, 0x2DB955B9, 0x591C8F56, 0x4697AA7E, 0x83D45BE5, 0xE6914551, 0x1C935624, 0x50AB7DA8,
+0x5DAAB6FA, 0x73741F2C, 0xD1A5EA05, 0xFE7A7F13, 0xCD9FAEFE, 0x21328372, 0x751E691D, 0xA01973AF,
+0xAB4B4331, 0x82BB6B3F, 0xCC6EE2BE, 0xDC7B49F0, 0xA06692FD, 0x77D854B2, 0xDFF620E1, 0xF287AA3B,
+0xC3B52EB3, 0xC3B7FFEE, 0x29656CB3, 0x511D5638, 0xCC8FBD97, 0x977D5983, 0x1C421BEC, 0x6FAA5CA3,
+0xF0F6EA56, 0x89A01C74, 0x1C7DC353, 0x0F873989, 0x9D8DBDF3, 0xD8126966, 0xD537EFB0, 0xC6113F1C,
+0x2166D7A5, 0xD0EBCFCD, 0x07EC7FA8, 0x2C1A2F39, 0x98FECD80, 0x636074AE, 0x067C3399, 0xDE5271F5,
+0xFF125658, 0xB5F12897, 0xFDAEA257, 0x05F7F8ED, 0x96B1CA4A, 0x29A278B0, 0x79BF0B80, 0x595BE564,
+0x4C31119A, 0x49F0EE88, 0x9BA5B36A, 0xF011B76E, 0xC494238D, 0x63DD01AF, 0xD473FF4E, 0x23EF4EA6,
+0xD70FA79B, 0x0142829C, 0xD3737524, 0xA697F41A, 0xD8A71D01, 0x2157F05F, 0x509B135F, 0x120A4E4A,
+0xB1877DC8, 0x01DCE27C, 0x7BE74A33, 0x2E2FFB5F, 0xE91A1C54, 0xDEDB3AC2, 0xD72519DE, 0x423C1786,
+0x1A033E24, 0x3AE7424C, 0xC197D416, 0x3D3D1594, 0xC6E876C8, 0x7ABFE9E0, 0x995CBDD3, 0xEC8E49CA,
+0xD97D23B8, 0x495A1585, 0x8881DEB1, 0x289D6FBA, 0x67198ABB, 0xD40B39FC, 0xF2155BEA, 0x006431E7,
+0xF8E1FBBB, 0x33C2DA5D, 0x0228F215, 0x32EA0CE7, 0x91E39699, 0xEC97D19D, 0xA2CC6110, 0xF4BD7337,
+0x8C9CB54A, 0x4C3D9778, 0x06A1B0BB, 0x0AFE0506, 0x97726711, 0xCDF3EEF3, 0x44EA76D1, 0x3972E4B5,
+0x5286D1CE, 0xE658103C, 0x1B919958, 0xE27C7951, 0x17D0CE42, 0x89EC24EA, 0x0B9A5A71, 0xFDAC360E,
+0x417C86B9, 0xB5A67B2D, 0x628A9B13, 0x2575814A, 0xDEECAE44, 0xC2AF8C51, 0x5CE214D6, 0x19B87F0A,
+0xCD36D2DA, 0x83F967B4, 0xE68A851B, 0xC55BFCE4, 0xF1AFE8A5, 0x54816F9A, 0x3F4ED7AB, 0x024ECB06,
+0x44C5B3F2, 0xA1734CE2, 0x27E1E47F, 0xC4F9AC86, 0x631A8486, 0x9FF673F4, 0x14D4EDB8, 0x11033945,
+0x537656AE, 0x96EAC702, 0xBC0EFEDD, 0x831C6B13, 0x9BEE1CDB, 0x03F39398, 0x2FE70B1E, 0x021F7822,
+0x6B2CAC5E, 0xE89B6ED0, 0x6394D1E6, 0xE87FC7A3, 0x4C85CC08, 0xACB8D888, 0x45F3BF33, 0x76BEBE7E,
+0x2035DBF3, 0xA1A8ABF4, 0xC137B0D9, 0x0C40AD50, 0x3E819866, 0xCAA701DC, 0x8C3B69DB, 0xD3A82A38,
+0x4F7CEBBF, 0x3D5B9D47, 0xFDB5BB19, 0xFFB942CA, 0xF5B135F7, 0x28A831C0, 0x2AA37C6C, 0x4137C995,
+0x3F0182B6, 0xAAC916C9, 0x4CB0DB2A, 0x5192EDC8, 0xBEA3E909, 0xF8353AC0, 0xD7066694, 0xCDB8DE25,
+0xA7A51C55, 0x02F5F97F, 0x1B52A745, 0xBA6CB7C5, 0x6063BFA2, 0x10D85A93, 0x4DB540A7, 0xFF263A5D,
+0x3FAED124, 0xBB00BC8A, 0xE0E07EBD, 0x86BAE212, 0x762F1B10, 0xCEA2DD19, 0xA80AA62A, 0xCA15F240,
+0x1FBDCF00, 0x9053B63E, 0x3E2A74A7, 0x2B92B0C0, 0xFF0414F4, 0x13E5DB4B, 0x58134DC2, 0xD76191C3,
+0x726CF188, 0xDCC8318A, 0xD986C617, 0xB6FC3380, 0xAF09BA5D, 0x54500D78, 0x4EC31E2A, 0x596AB937,
+0x77A52307, 0x936C1799, 0x0D032038, 0xFD579087, 0xF7B71482, 0x731D1DDB, 0x4806CE15, 0x1372040D,
+0xB3126522, 0x45D12729, 0x4AAC8DAA, 0x9F23D309, 0x4DE51A19, 0x6CC285A8, 0xCAE9C6E7, 0x94AFFB5E,
+0x7FEFCD08, 0x09E8ACED, 0x7C1F675E, 0x71A04FAD, 0x146AC1E9, 0x44F2A8AF, 0x82F6601C, 0x32747886,
+0x4A620C69, 0xB9FD3FDA, 0x811949EF, 0xA2690D70, 0x7DDFC8C4, 0x8D230544, 0x11FA8712, 0xCEAFBB7D,
+0x5DC45F7F, 0x8B6D24A0, 0xB3CB3017, 0xA18976ED, 0x9BA0CDE8, 0x08E605F9, 0x6423BDD2, 0xB94FCB72,
+0x42C3E570, 0xC7BECD72, 0x63F73864, 0x8E1B6FF6, 0x5FE7EC59, 0x1F7DE501, 0x6977284D, 0x4B62C02D,
+0x87219A9D, 0x2042A2B6, 0x313B3F4A, 0x31A6E9D8, 0x26E4A675, 0x6C86C3D2, 0x130D0883, 0x4CDFB7BF,
+0x634055C9, 0x8B01B001, 0x473E67D8, 0xE4228E82, 0xA9B5B490, 0x4B566372, 0x08C8041F, 0x3313A28C,
+0x87389B63, 0xB6EE2E3B, 0x60DA6AD3, 0xCABDA96A, 0x59117B66, 0x364F66A0, 0x0B50001A, 0xFB51EF0F,
+0xA282D17B, 0xADB5A565, 0x3302E5EF, 0xD5CDE4FD, 0xCB9D0471, 0xB4E226CF, 0xB2D104E2, 0xF3AD0996,
+0x30D4F1DB, 0x07ED2DEA, 0x98C70FCF, 0x3F482146, 0x539B8AFA, 0xF0381FCE, 0x99FE29B5, 0x25DD6E32,
+0x47DAC022, 0x1347A6F4, 0xE654FD9A, 0x11616BBC, 0x52F27FBD, 0x1B2799B2, 0xA56D931B, 0x97C37EAD,
+0x0CEE8D92, 0x5F43C41F, 0x68150F2F, 0xCEAB97BA, 0x5E8DBA5F, 0x409598F4, 0x94025BF9, 0x7352D813,
+0x74D44F98, 0xE1F3A07F, 0xD57B92F1, 0xDA87AB17, 0x7BBA2AF2, 0x764A4AA4, 0xFF2A6E94, 0xD34824A5,
+0x297A209F, 0xF180F47D, 0xD2B148E9, 0xA0D87430, 0x334A6C2B, 0xA788CC75, 0x1B267153, 0xA63FABD0,
+0x988C26C2, 0xCC1299CC, 0x0DF3EF5D, 0x139A5DCF, 0x698C6B79, 0x6DCB82ED, 0x02DCDFA5, 0x839A0BCB,
+0xD047657E, 0x33E1B47A, 0xA606E141, 0xA01D989B, 0xAB92225B, 0xE17302C0, 0xA7E4CDBF, 0x8AC0B0B1,
+0xD10AFD2C, 0x41AAEA3A, 0x47599C4D, 0x1F93C083, 0x6C050F0F, 0x3C4E6208, 0x5DBBA9D6, 0x0FEB24D3,
+0x70F8CF25, 0xC7566823, 0x940496B6, 0x78D89FE9, 0xC27462A2, 0x7ADC6C97, 0x51AE5335, 0xB00191F4,
+0xF7BF5FA6, 0x3E4D81BA, 0x2211E70C, 0x5FF9B9D6, 0x83699346, 0x4C80391E, 0x7A4A0EC9, 0x86B6AFBE,
+0xE99B4081, 0x56351149, 0x28F36F6B, 0x142AC61D, 0x5ABF2482, 0x87A9CDB1, 0xF088447A, 0x5D4F86FA,
+0x8C228E0B, 0x95303F74, 0x09EB3657, 0xC5A54FC1, 0xE14BB821, 0x3FF75F88, 0xE7480362, 0xD8BB18F4,
+0xC3B2A6BD, 0x695D570B, 0xA153A196, 0x23BFE9E7, 0xC946588F, 0x405BC25C, 0x7453B60A, 0x126473FD,
+0xB3920848, 0x567DF167, 0x533E72C5, 0x7B5312AD, 0x3E230751, 0x9E8C7AB8, 0x5AAEC450, 0xFFC77E8F,
+0xDAB5CC2B, 0x76255748, 0x6F19E222, 0xC252A9B7, 0x6BF32F74, 0xBAC0042A, 0xCCB280FB, 0x5C33EE11,
+0xA5815198, 0x72DED6FF, 0x1A91F95C, 0x9E5CDF22, 0x88A91205, 0xA4B595F3, 0x87327147, 0xCD58E054,
+0x52084D45, 0xCB4B1C40, 0x4565097B, 0x86CC9DAB, 0x46EA9CD8, 0xABD62AF8, 0x622F7E11, 0x52077686,
+0x5097E3D6, 0x4AC1383C, 0xFFAED59A, 0x705C87AC, 0xEB314E4A, 0xF397DA48, 0xFA6F801E, 0x0D09A88C,
+0x7F2544C5, 0x6D2BF4E9, 0x22A2FBA4, 0x2F708604, 0xA2326F94, 0xC7EAE4D9, 0xA516E24B, 0x3B552C8E,
+0x0DE72AE2, 0xB265E5C7, 0x9C4CEA3B, 0x430D8EF7, 0xAB829059, 0x16FE5C52, 0x532F5D15, 0xCA4099BE,
+0x5901D05D, 0x454A3DFF, 0x6472AEE5, 0x19786997, 0x10966393, 0xD5E6F405, 0xCC934013, 0xE954FA1B,
+0x77F8270D, 0xFCF2C955, 0x592EA26C, 0x16EF6EC6, 0xB6CBF6AE, 0xC67E0930, 0x7030C866, 0x1D213144,
+0x6011E820, 0x8885775F, 0xC3070C7C, 0x966BF1E6, 0xEA993317, 0x4EF90050, 0xB554FD8A, 0x208F0889,
+0xDD30BFAB, 0x964E7167, 0x35A52B68, 0x3258EBF2, 0xA0C1A87F, 0x9C718443, 0x97BF6E8E, 0x3D2E4501,
+0x85A53C22, 0x73B2D8F3, 0x85A3DBB8, 0xF6DBC87D, 0x0362DAC0, 0x5A7044A0, 0x0D71BD37, 0x3AC12919,
+0x30043982, 0x9C5C14F9, 0xBC1763CF, 0x999B3178, 0xA8CEED39, 0x80F3B553, 0x260FEE57, 0x794A7A7F,
+0x5FA34489, 0x45F73E78, 0x5842BA5B, 0x9B8122A6, 0xA544C27A, 0xF2D5362F, 0x1F51BB6F, 0xB8C1A671,
+0xE588B850, 0x308AA042, 0x377DEC2C, 0xD08DE508, 0x7AEF1B68, 0x58F1DD06, 0x1589FBE0, 0xEBA3E2E9,
+0x3714C26F, 0xE19EA771, 0x6197A9D1, 0xE60B6BA0, 0x6B2EE31D, 0x791F2A9C, 0xED0849D6, 0xB1CB3805,
+0x48DD2E07, 0x095C9F24, 0xF01BA0AE, 0x744E18FC, 0xAFDE4267, 0xFC3C6F8C, 0x2A77BC61, 0x7C9FF9BA,
+0x137FBC04, 0x7FC0FB96, 0x7FEA9C9D, 0xCB38EB74, 0xA9BBD96C, 0x437E289A, 0xFC314EEA, 0xAD487B30,
+0x38FA24E1, 0x36623729, 0x50C97615, 0x15BA1627, 0x4B5EA225, 0x647D44B2, 0x67ADC34A, 0x166CF873,
+0xAAC39587, 0x416D3491, 0xAC9E60B6, 0x35243EAE, 0xAE97207A, 0x44D6737C, 0xF5B5D259, 0x3E006C93,
+0x1CB4709C, 0x9A756F8F, 0xB2CE0EB3, 0xA719B0A6, 0xC14E9B3D, 0x2E5279AA, 0x72F78884, 0xFFFC87B6,
+0x1ABAF57B, 0x1F84C4A9, 0x8D724FBE, 0x045C1BB1, 0x89F6983C, 0x94E16E9D, 0x0B5326AE, 0x61C6E42E,
+0x93C6C820, 0x33AFA483, 0xE9348E6C, 0xB82A830F, 0xFC2AF179, 0x1F812C46, 0x24543EB6, 0x03D3F4C0,
+0xB45A039E, 0x69769A48, 0xC72EF6F5, 0xF555BC74, 0x8E327424, 0xA3E1B83B, 0xDA1480C5, 0x5774234C,
+0x78285D1D, 0x95849543, 0x60F97B57, 0x68DECE07, 0x40D6C875, 0x41E14E81, 0x7319C71F, 0x1169F776,
+0xA9839342, 0xA6549788, 0xBB69BED0, 0x9E9FAA4B, 0xD40479BA, 0xB1D0040B, 0x54A4345D, 0x8AA9E4AB,
+0xBD6A9023, 0x746A17EF, 0xC21821A6, 0x0D007DF1, 0xA0DECCBE, 0xC5B9B0B4, 0x55CFDBBD, 0x25F8904B,
+0x5A7301E7, 0xB8F2C304, 0x14083EA2, 0x900A7529, 0xA245785F, 0xDBA170F5, 0x13AD3A66, 0x855100CF,
+0x26134DC9, 0x638F596E, 0xD7EE94A1, 0x8ACAFAE2, 0xB215C95F, 0x0468B8D8, 0x2138C6CD, 0xB2782EF5,
+0x08D0265B, 0x154C3A2B, 0xA86031E5, 0xB0FECF2B, 0xCA143CFB, 0x8DB884D7, 0x6668F71A, 0x9ECEF2FF,
+0x82FD16C2, 0xC6A5C5EE, 0x1D201FE4, 0x96383AE0, 0x8116FE60, 0x28618DD6, 0x3E315127, 0x31231E15,
+0x5DF82292, 0x4856E31C, 0x657FDB7B, 0x6C80D130, 0xC30A7861, 0x443EE3A4, 0x781D366A, 0x93A45544,
+0xF6B15BA5, 0xAF305C5D, 0xD20643F7, 0xBD83D4EE, 0x84427066, 0xE8FCF3FE, 0x911D9663, 0x91095740,
+0x342B27C6, 0x0D06E732, 0x34DB1D83, 0x2E9A7997, 0x93DD986B, 0xD5897023, 0x94B349E2, 0x29D392AC,
+0x50FAE068, 0x332F43CA, 0xF13F4BA3, 0x861B02CD, 0xD0EAA9BC, 0xB0026602, 0xE9AAA7C2, 0xDC53AE57,
+0x10C1A012, 0x82F0483B, 0x928E4B2F, 0xEB7E1CBC, 0x5E2AB442, 0xED73A5A6, 0x9D03C420, 0x5D9C6EB0,
+0x054EC33A, 0xAE4D729F, 0x4376DCC1, 0xF4E38BCE, 0xA5E0AD8E, 0x8C773598, 0x24371794, 0xDFD2DA31,
+0xDDD43B8B, 0xF9D8E012, 0x2AEB6BDE, 0x03939979, 0x57C60AAA, 0x39826876, 0x4113F233, 0x25D9B1E7,
+0xD1D74A1B, 0x2844331D, 0x24B4F63B, 0x4B857D0D, 0xA07C38EB, 0x1E1D2E94, 0x647580B2, 0x365AD2F8,
+0x4FDEEBA6, 0xBDFF16F3, 0x001FB447, 0xFF8E47C4, 0x833775C5, 0xE46F65EC, 0x3EC7B61A, 0x7CD12866,
+0xDEAB80DE, 0x6A71C7A3, 0xBF40BD37, 0xD0487088, 0x44DCD513, 0x5D6FE215, 0x86E65A4E, 0xE20AB117,
+0xC45DA47C, 0x400F2C46, 0xAF2191EB, 0x362AAF84, 0x5D70AAD4, 0xB92D7286, 0x55CD7B64, 0x82B67817,
+0x1BFD7745, 0x76CA188B, 0xBEF02CEB, 0x55E8EFB9, 0x07B06F29, 0xBE38A9CA, 0x4CC6EB8C, 0x11192A5D,
+0x58F9043B, 0x7BA20BC4, 0x9D331B4C, 0x1C11479E, 0x3CFDDFD7, 0xD9583FA0, 0x21A3841F, 0x192E4260,
+0xABF3E0CC, 0xA59384E2, 0xF01A5F3A, 0x68184387, 0xDD09E0FA, 0x687EB52E, 0x7270BCCC, 0x2F88E67E,
+0xEA2A97EB, 0x6AAF335E, 0x1FE9C53F, 0xB0638D2F, 0xE82904F0, 0x0078BD41, 0xDBDF7B3B, 0x5C5F1202,
+0xBABBB92C, 0x69C675E4, 0x70CDE895, 0x0D008653, 0x6533D57E, 0xE9299897, 0x79FCE7BD, 0xD01B7608,
+0xD34216FA, 0x95C3FD32, 0x256C1EC1, 0x15DD78DD, 0xDDDDA180, 0xE26F48F2, 0x58738F49, 0x669A79C7,
+0xC8D0850D, 0xB3F459D5, 0x98C0AC67, 0x1E6675EE, 0x2F0670AE, 0xCC3B5CAF, 0x85420319, 0xC36252E0,
+0x04ECB60E, 0x4678BD53, 0xB5A857F7, 0xD9ADB699, 0x67586479, 0x0A788ACA, 0x1608A374, 0xC42CFAA7,
+0x0F0B77C9, 0xC989F100, 0x9BC891E8, 0x7EDD7FB8, 0x3B21AA74, 0x0D46BB4D, 0x020B723F, 0xE659EE20,
+0x5D512B55, 0xC8211493, 0x3341570C, 0x8E01AE8C, 0x82C2ED5D, 0xF95C215E, 0xBD8A0678, 0x27FD8554,
+0xB7B52DA4, 0x6189C497, 0xD96AFB6A, 0xDA467A84, 0xB32EA5E7, 0xEA99C1F5, 0xF33872D6, 0x8830D8B9,
+0x8F63594B, 0x3D7E933B, 0xF19E52E0, 0xAF01D548, 0x8FCFCEFD, 0xAF7205FF, 0x37CCE671, 0xE85E52B3,
+0x1633B86C, 0x9E8E4F5A, 0x9C316B81, 0x94390902, 0xFAE2B5C9, 0x28DD941B, 0xB652C1C9, 0x3B6E919A,
+0x215514EE, 0x3F6D9D5C, 0xA8EBBD42, 0xA12ABD59, 0x274A7D90, 0x5CEFC458, 0x3D3CE5C1, 0x4A097139,
+0xA63624F2, 0x5ACA79DC, 0x4233B029, 0x5ECD686D, 0x59236011, 0x16417E58, 0x94F28ACE, 0x9C3D1667,
+0x5B1D8C7F, 0x6F9A7978, 0xBA3C550D, 0x326D1E56, 0xD5AE47EA, 0x802BA502, 0xE6A9F28A, 0xA56D3ECA,
+0x7101D61F, 0x03E81310, 0x66B7ADC1, 0x746F8B36, 0x388FF823, 0x4EFAB48F, 0x671B21A1, 0x42BA8088,
+0xB24DC7BB, 0xC0A671E9, 0x8A732CEA, 0xCDEB9398, 0xE100E6AD, 0xC214DED4, 0x46CD1CE6, 0x645C40FA,
+0xC05DFC64, 0x3E263B20, 0x7ED82263, 0xE4002CE5, 0x80A9BBCB, 0x9CCCFE25, 0x7F5BF810, 0x640BA455,
+0xBE83D8B5, 0x3F4365E5, 0x00FDB775, 0x486AFFDD, 0xF3228DD4, 0xC1F0CCD2, 0xA39B54E6, 0x772CE31A,
+0x643FC742, 0xF3D052DE, 0x9AD1608C, 0xE777D8BC, 0x53B3FA02, 0x2E4D2465, 0xDAC9F402, 0x5ACD6E1C,
+0xAD9C72F6, 0x8DBCB8B7, 0xA0EA99E2, 0x66C8CA6B, 0x3884FDF5, 0x00652790, 0x7F41D68A, 0x46190CC9,
+0xED29C220, 0x3028D297, 0xC42EC72F, 0xD845DB99, 0x5FE830EF, 0x4D9A311D, 0xB39F38B5, 0x3E71960F,
+0xF0D6F816, 0x647D3D3C, 0xFAD3E368, 0xDBE78117, 0xD3575481, 0x4B4971A3, 0xDA9F9F10, 0x5A2ACEA4,
+0xAED1ED41, 0xFAF8D0CB, 0x0CF7751C, 0x533931A2, 0xF605E569, 0x59F4A0D8, 0x83310A10, 0xD6BCFF2A,
+0x49C2EA2B, 0x77FBE221, 0xD8C5F18D, 0x5410F1D3, 0xFD723910, 0xB17FEB2A, 0x93F9591A, 0xA5905599,
+0x3873665E, 0xE88CCE55, 0x67CE230B, 0x16907174, 0x6F6F4638, 0x620040B2, 0xADCFDA1C, 0x674CF95D,
+0xD0DDCFB6, 0xAB7C2224, 0xC2EB6A4C, 0x5A1F8BE3, 0xD7C4A0D4, 0x4C63C465, 0xDC9E9878, 0x68409332,
+0x2F800735, 0xF06CDCB6, 0xCD613F5E, 0x10E0EE2E, 0xA75C44EB, 0x0075410A, 0xE9FEFFFB, 0x1500DE5C,
+0x9DCD68BD, 0x9FE53151, 0x48066F4E, 0x3586F797, 0xB984D20E, 0x545E7A86, 0x98529E91, 0xD6F2FEA1,
+0x19E83CA3, 0x6D758780, 0x35FD7C82, 0xBD331F55, 0xF76688D3, 0xA817FB6A, 0x401704E8, 0x1A944339,
+0x9AFCC740, 0x6F97A46C, 0x7D4EC031, 0x61F05F16, 0xA197714A, 0x1457887A, 0x3F2F30D9, 0xA1744AD4,
+0xF62BEF24, 0xA570937E, 0x1490C9AF, 0x59DF25F6, 0x610543F7, 0x5D2AC187, 0x3B705312, 0x72303922,
+0xBAE75072, 0xB860F2D7, 0xEDBF28A2, 0x9C6980EE, 0x189281FE, 0x3312783F, 0x79D43470, 0x4C1CF72B,
+0x45F8AA66, 0x8DA24ADC, 0xC601B86C, 0x9EC9AE9A, 0xBB57D0E9, 0x1BC230C8, 0x9C26B35C, 0x74F30AAF,
+0xD1F27F06, 0x96DB1BDD, 0x1D3CF7E8, 0xD71C49CE, 0xEF3A7F55, 0x49FB3CBA, 0x2A06DF00, 0x70FC1B65,
+0xF303AB9F, 0x3FE22232, 0xD7956CF3, 0x415B4009, 0xCEFD8BC3, 0xE5AE4CB0, 0xAD58EB1E, 0xE7650E39,
+0x02B38938, 0xC7ED6834, 0x7832E035, 0x9B5FC99F, 0xA5F11243, 0xADBB4141, 0xE6153882, 0x12EB49D7,
+0x4CE00B99, 0x2B1BA936, 0x7B4B4D6E, 0xA618F33C, 0x7A1E4834, 0x3405309C, 0x99111878, 0x018237BF,
+0x33966B7D, 0x0FA444EB, 0x2C331963, 0xC64B8391, 0x21664C3C, 0xE35B8F50, 0x98BD4A62, 0x77470333,
+0x40A33640, 0x30D5CDB5, 0xDCF155C4, 0x7D09FF29, 0x0B163181, 0xDE5CE4BA, 0x7FBBCE8A, 0xF86BFA60,
+0x7713C8B7, 0x13CF7C50, 0x9C4834E4, 0xB732C947, 0x4108CAA0, 0x8E6616B1, 0xC0B1E940, 0x09120380,
+0xDA269FC7, 0x742325AD, 0x9A8C0CC1, 0xA8C81451, 0xD503F98E, 0x58AD2EE6, 0xDAAE79DF, 0x019666B8,
+0x057DF611, 0xB38558CA, 0xA98A9C1D, 0xCEAACDF8, 0x835C6D78, 0x8D405054, 0x37D5529D, 0xED599EF5,
+0xD05E09D5, 0x255235D6, 0x495E6002, 0x4EB19071, 0xE208E1C1, 0x0871B493, 0x5B667E55, 0x8DBBC882,
+0xF1A75325, 0xB8FDC821, 0x995939BD, 0x3E8DC705, 0xA078AFC9, 0x1CB722AC, 0xCE547D84, 0x8E021724,
+0xB7F328AC, 0xE341BD46, 0x3FD40B90, 0x37DBB3DF, 0xE0530EBD, 0xAB518EB0, 0x3BB92779, 0xFF51755F,
+0x988E3A4A, 0x55CFA0A1, 0x7BB06BE9, 0x1A3FEF77, 0x0F620BC9, 0x235BFCED, 0xCA740128, 0x581A060B,
+0xF4725BB9, 0xD15B0E52, 0xD1D8147A, 0x8C73A1CF, 0xF8554C4F, 0xE437D4BC, 0x85D1CCAA, 0x83781CCF,
+0x2E5B305A, 0x79704AE6, 0x9E1CD9D0, 0x9AEBDEC2, 0x28D8FD6B, 0xF88FD0F9, 0x84C74B05, 0x05F5FA1E,
+0x8DC62A71, 0x2C59C224, 0xC0C8FE97, 0x72F1EBF0, 0x5F59FB13, 0x3AAB5881, 0x60392CAC, 0x0B3671FC,
+0xA9B37EC5, 0xCFCE6FB5, 0x2C4B2C8F, 0x777011E8, 0x30F9CC2B, 0x30F5FB58, 0x37995176, 0x8530A7DF,
+0x5D1DD7DD, 0x1C2A235F, 0xD6C245C2, 0x088BB1AF, 0x10BEAE87, 0x6209E1D1, 0x11EE2D8B, 0xA79896A2,
+0xEFE9CB73, 0x8B0C2773, 0x8399BA95, 0xF6396B4C, 0xE445072F, 0x2FBFC7F5, 0x95530812, 0xA6542D23,
+0x489C7C74, 0xB5504320, 0xE1CC474A, 0x6DD9F83D, 0xAE72C3E5, 0x1E4B0B94, 0xACFE0238, 0x8B36BBEA,
+0x865260E4, 0xD4421DCA, 0x5B977525, 0xCE04542C, 0x7468B40A, 0x2C5B6816, 0xC87EADDF, 0xFF585EAD,
+0x2B9AC9D3, 0x695E6737, 0xCB0B6E01, 0x2DC7F2B2, 0xAB0EB11C, 0xB7E7A452, 0x0340E8F9, 0x22B6F69B,
+0x45FC1103, 0xD8128C38, 0x48E1DF74, 0xED37EE13, 0xEB0A689B, 0x94231CA7, 0x0338A506, 0x5B3B3043,
+0x8618DC54, 0xF82F890B, 0x73633681, 0xDF5E4BB1, 0xAEAC8420, 0xE4BAC293, 0x2287BD27, 0x1AC37563,
+0xD2245549, 0x3BD76BDB, 0xFA499490, 0xDD7ADAB3, 0x482AA38D, 0x625A9291, 0x90894E4E, 0xBD89B724,
+0x0E929230, 0x6E7028E4, 0x614878E8, 0xBA613578, 0x038BE96E, 0xDBA72E93, 0xA2848B2E, 0x03D41512,
+0xF5779BA9, 0xCAA02984, 0x5C9606C1, 0x0B33F1CC, 0x51003047, 0x50B966C4, 0x353EF1EE, 0x576C22E6,
+0x88FC00C8, 0x8AB4448E, 0x79FFDDF7, 0xC56B9CEE, 0x5A4AE919, 0x752783F1, 0xC9C41B5A, 0x0DA693E7,
+0x9912A1A1, 0x23FA5527, 0x002C889A, 0x0D7F1651, 0x2F191F26, 0xCF971A65, 0x44F3DE8D, 0x87440A10,
+0xDD5204DF, 0x5014B3DD, 0x2B135CC0, 0x122C1C7E, 0xE9235BC3, 0x01B2204F, 0x3F68481D, 0x98912597,
+0x0D04F6B2, 0x72DBD2B3, 0x9C567421, 0x94B41995, 0x8FFDB3C4, 0x7E57A08C, 0x0CCA3D32, 0xBAA1B668,
+0x5522C96C, 0xA114BC09, 0xF6B6B6D6, 0x1433B78B, 0xCF7166B0, 0xE9737E39, 0xDD51CB14, 0xF0ED3BDF,
+0x092A3415, 0x0F7DAA15, 0xC0EEA08B, 0xC341E134, 0xA5C3CFCC, 0x8FDB2A02, 0xDE1FE40A, 0x43B6C75A,
+0x4532DE5C, 0xCB2E1D4C, 0x325B6078, 0x899864D5, 0x689391B3, 0x25ED23BA, 0xFB5BD62B, 0xA5A79FFF,
+0xE424A2AE, 0xA841C419, 0xEE5EC07A, 0x6B431EEF, 0x81C18973, 0x36C55ECD, 0x64A7460A, 0xA02EF371,
+0xA55AFC82, 0x1219D8FA, 0xD9DE9DDC, 0x82651FF9, 0xF1366206, 0x1582FB95, 0xB564A9C3, 0x695B5D1B,
+0xB399FA76, 0xC953B439, 0xBA304CAA, 0x74E3B6FD, 0xB18BC5A8, 0x79C3479D, 0x36EF81BA, 0x97867C2B,
+0xCFA352F8, 0xE63D3CBC, 0x9AA5A40B, 0x35C002C9, 0xDD73FE28, 0x318EC7A8, 0xE64E5E92, 0x76DC863F,
+0x90407C09, 0xEC885A0A, 0xD8A33754, 0x36269243, 0x435ACF60, 0x3E4900CF, 0x9244585D, 0x159EC1B4,
+0xF4475782, 0x74723527, 0x3A128647, 0xF4BECE76, 0xFE59D8AA, 0x77F6D129, 0xA91ACC28, 0x197782F6,
+0xAD1408D3, 0x8523E7E6, 0xB5F0D274, 0xC85B91E8, 0x3CD5230D, 0x3A330FF3, 0x086C2F78, 0x2CE500AA,
+0xAF20B9BD, 0x5E4161EA, 0x9D7822BC, 0xB6A883D1, 0xFE919E18, 0x775FF86C, 0x6F76C765, 0x896BB70D,
+0xAC157EC4, 0x098F5142, 0x5CA7EC6B, 0xB7886511, 0xC02C3C5D, 0x79587603, 0x88FA932A, 0xE7274380,
+0x8B28FBBE, 0x4565B826, 0xEBD853D0, 0xE37DE5C6, 0x431B58A6, 0x8B04DF8D, 0xC90DF47A, 0xBAF8B0BC,
+0x84E42294, 0x18A52362, 0xB33DE2BD, 0x9FFEBCE1, 0xB010B24B, 0x5BF4FD2E, 0x2A18006B, 0x70F47184,
+0x9B9451E4, 0x70E265D0, 0xCE1C1DA2, 0x24095FC7, 0xA2F71396, 0x8D25E492, 0xE00D5BA9, 0x4A1FD416,
+0xC4F58C25, 0x5411D2B6, 0x260FE44A, 0x587A7027, 0xFFBDC3C4, 0x69C56B2E, 0x6D0DD3FB, 0xDD1A5EB1,
+0xECAEB8A9, 0x776AC3B8, 0xCCF448E4, 0x22C25FB7, 0xB790CA27, 0xF099E1F5, 0x29C129EE, 0x8EC48BCC,
+0x30DC3C0F, 0x5A7DC54A, 0x05231643, 0x5AF36DAA, 0xFB582C4F, 0xE0A1C987, 0xD7F4200A, 0xBB0C303D,
+0x90DD4F26, 0x81F054A9, 0xEECC1817, 0xB687BF5B, 0x78C98A7E, 0x16728736, 0xC6F2795C, 0x56F10F02,
+0xDCE551B8, 0x0F13958E, 0xC2FE9946, 0xAAC6F4AA, 0x429032FC, 0xDFE8A56B, 0xC9BD7683, 0x62F85DFB,
+0xD271DE32, 0xB7E4C767, 0x6ADBF682, 0x568DF503, 0xD9A357C5, 0x2C116727, 0xD156032C, 0xC4749A87,
+0x2E3BB841, 0xC5FAEC88, 0x50202510, 0xBC441EA4, 0x0715D279, 0x6364572C, 0xFAFDBC6C, 0x2CE1186F,
+0x0FAE5D78, 0x466ACFDC, 0x5FD6C8DC, 0x64729B1F, 0x9A3EFF54, 0xC2C57D18, 0x33F55209, 0xE7B8DB49,
+0xB570B8B5, 0x95BF020C, 0x43306947, 0x11F5A05F, 0x0610BC1C, 0x457B7BA4, 0xD166E581, 0x1384B4BC,
+0x310539A4, 0xF362761C, 0x54C65829, 0x080F58ED, 0x610AE156, 0x348FE3A4, 0x2A811DD7, 0x7F909722,
+0x88452596, 0x3631C664, 0x6AC4C002, 0xD8713968, 0xADBB705D, 0x9E15169B, 0xE473E91B, 0x2BFE385B,
+0x2822FA72, 0x4843F783, 0x4EFD3C81, 0x6741591D, 0xFC75C94A, 0xEB13CD2E, 0x5847C813, 0x29ED5401,
+0x04C18FA7, 0x810EAA63, 0x65203BE0, 0xEAC7CBA4, 0xECA8833D, 0x0CEF2956, 0xFACCA2A5, 0xFE31DD61,
+0x6C4DFB64, 0x604CBA33, 0x9F9B345E, 0x74433601, 0x629F954C, 0xDF31BF58, 0x04D9E5FD, 0xF6A92504,
+0x3EB40EF6, 0xBE4882C5, 0xAB683AC0, 0xE34ED737, 0xA45646BC, 0x263CCECB, 0xC1016183, 0x929C2467,
+0x05B5858D, 0x22E39B22, 0x4620DCA6, 0xE247295B, 0x4DB56BD5, 0xC2FBD2A3, 0x2349820E, 0x97A5E4CE,
+0x23FB69E5, 0x01872D38, 0x828EBD84, 0xE8F8BFC3, 0x63C65785, 0x8632C58B, 0xC1102CB4, 0xBBEA020C,
+0xC3343821, 0xBF36D98D, 0xEDEAEE09, 0x279A0CD2, 0x29E7F67A, 0xCB95A992, 0x4E3AAE8C, 0x3AD42BEB,
+0xAC99AB96, 0xB0871D86, 0x70C480B7, 0xD26FB10F, 0x4B243B14, 0xA725BE9B, 0x95396455, 0x47D0E1AC,
+0x9F48B438, 0x7A6CCEEF, 0x114AF43D, 0x40CBD9B5, 0x94FC094D, 0xE3BD4024, 0x7D2C5990, 0x69F783B4,
+0x3F5FB95B, 0x60BFDA1E, 0xCD4CE1C9, 0xD48EDB35, 0x2DBDB8ED, 0xC464D59E, 0x8DFC4E9B, 0x94B3D45E,
+0xF2A6E12A, 0x3C956493, 0xECFCC432, 0xA9DD0D0D, 0x439EB5A8, 0xC2B05733, 0x891BA129, 0xED25E10F,
+0xB6751F3F, 0xD0ADF8F4, 0x8E183E32, 0x9C3EAEFE, 0xDA2003E6, 0x0F645FB9, 0xD1E1AB00, 0x090B9D5F,
+0x19CCA531, 0x5BCEB178, 0x41FC902E, 0x94D4F9AD, 0x3AED879D, 0x00727991, 0xE627F11F, 0xC3A1DD09,
+0xFBD51AB0, 0xB026081E, 0x9CF941B5, 0xB89F4093, 0x09576523, 0x5FDE32C1, 0xADC93C2D, 0x36C2DB5C,
+0x28157741, 0xA0DCC030, 0x75766E85, 0x8F310A39, 0xF212EFDB, 0x18CFCEBC, 0x7AEE27E1, 0x9B6FA759,
+0x70703DBC, 0x3D4AB288, 0xCBF3540A, 0x4D30913F, 0xDF7AE852, 0x5E4CA86B, 0x5712F842, 0x9BA97D15,
+0xD7B177C6, 0x34C2C0B9, 0xBC99BC6A, 0x52D6326B, 0xB48ADC06, 0xFA8A4D07, 0x838D102D, 0x79F5E021,
+0x7B46E335, 0x021BFD30, 0x2426DF44, 0x25E86353, 0xD94F91C0, 0xD4DBE6C1, 0xC8307EA9, 0x32301DCD,
+0xB4B64D3B, 0x82A39EB5, 0x70D06979, 0x195CA320, 0x0F12653E, 0x394AB4C9, 0x1D068647, 0xE7AABA7D,
+0x598B333D, 0xE81C3870, 0xBA47A82A, 0x1806E579, 0xDF1FE52F, 0x5E831C87, 0xF29F7277, 0x3CCE1C3D,
+0x14ECA303, 0x7A4632D0, 0xC87DF93D, 0x18483BAF, 0x01482297, 0x96AB8345, 0x0360548E, 0xFE1CFDB0,
+0xA1FF33D8, 0xCF6B82A1, 0x409D37A3, 0x49EFF4CB, 0x3C017774, 0xF9B82C18, 0xBC9FC656, 0x304BA8B4,
+0x640CF8BA, 0xE14C8932, 0xE7E1377F, 0xD225D8A8, 0xD80A4269, 0xEE14916D, 0x7ED88EC4, 0xEA5A9187,
+0x34BCBC5B, 0x730ABE01, 0x74D193E8, 0xF0ACA8C1, 0x8AA79C5D, 0x0B249E07, 0x5C1C48A4, 0xF6E6698C,
+0x2F0DA50A, 0x8870D60D, 0xA1BE9565, 0xDA549A1E, 0x5CAC7BFD, 0x4D817846, 0xA689B862, 0x5A13C3C5,
+0x769446F4, 0xDD07DCFC, 0xE993B366, 0xCF22BB37, 0x52D98201, 0x85328778, 0x83992D21, 0x71640EA8,
+0x7DE8D71A, 0x03E2C89B, 0xFD724F44, 0x12E0BC64, 0x0525ADAA, 0x1B383E6B, 0x04796F63, 0x8044211B,
+0xE60ABC0C, 0x440A882B, 0x997940F1, 0x161987BC, 0x6C523EAA, 0xAAFF78C7, 0x9C79EAA5, 0x404019BE,
+0x7D5BD3C1, 0xCFA54320, 0x133664FB, 0x05D14790, 0x9EB6AE74, 0xA21BCE29, 0xFDE5FE42, 0xB64E9CEC,
+0x6BA96E15, 0x25BC71D2, 0x60BC6363, 0x99C514A0, 0x7B2A681E, 0x02DF0C65, 0x27EA0784, 0x2A49AAE2,
+0xED009050, 0xB2850DA4, 0xDC52F062, 0xE6D57AF1, 0xC8157E0F, 0xA1E6FECF, 0x56187914, 0x4C1B0B10,
+0xDB21C25E, 0x520887D1, 0x69B76A84, 0x5E3F35F0, 0xB86670E4, 0xA0027F5F, 0x41853745, 0xB8DD8C0E,
+0x3484525F, 0x2DC2155B, 0xFB929A0A, 0xD7D9B10F, 0x9ED17EA3, 0x5154D106, 0xADB2EDB6, 0x247F137A,
+0xD3782A80, 0xA885CF3A, 0xB7941EA7, 0xCEE4E1E9, 0x50701EAB, 0x63ED691C, 0x495C0257, 0xE4FCA265,
+0xC018E7AB, 0x55D7B420, 0x526F7A6B, 0xDDADA985, 0x5DE2E847, 0x9385D180, 0xEF653CF6, 0xA38378BD,
+0x835C61DA, 0xA4ED3B84, 0x89AB7818, 0xEFA83D62, 0x302CE2A4, 0x65CC6488, 0x32460910, 0x488D97B7,
+0x0994BA62, 0x8BCB4575, 0x0D2FA3ED, 0xC3B32157, 0x09FC21E1, 0x15622971, 0xBA6CE711, 0x7ADF55C5,
+0x00D4725C, 0xDDAF2C08, 0x5D1E38EC, 0xBF9F466C, 0xAAE54319, 0xB874879F, 0x8C31619A, 0x33F13ABC,
+0x7754BE35, 0xA6A66FEA, 0x0FE35127, 0xA01BD835, 0x1EB0F816, 0xFCBF0967, 0xCF728757, 0x627047C8,
+0x2EFB1609, 0xF78C5DE6, 0x113832AB, 0x997FC96D, 0x2125F737, 0x455D0F60, 0xEAE61C49, 0x9A76A5E4,
+0x71094892, 0x0922BD10, 0x95AB0140, 0x6E22C60A, 0x23EEEB58, 0x292DB563, 0x3B82AAB4, 0x14F531D3,
+0xBAA7D7D5, 0x9EC53291, 0x09E0E080, 0x24FD88E5, 0x1F9C5570, 0x86A43FDA, 0xAA63A6E3, 0x2C0D15C9,
+0x3F638073, 0x9B1655A3, 0x4AAFEA4B, 0x8449F1AC, 0x0D4FABF0, 0x502097B8, 0xEE697FB2, 0xC9474CD2,
+0x0F5341DA, 0xD4B68016, 0x1908A286, 0xA5F4F532, 0x2A8D793C, 0x249A6AB0, 0x084C29C2, 0x92475519,
+0x86F31D94, 0x839F111C, 0x4AD6C5E1, 0xE78FF826, 0x57B23D89, 0x3FCA7F88, 0x9ADE0332, 0x6F2D3E3F,
+0x34D2AC05, 0x9D07A77C, 0x33C056A4, 0x66671E7D, 0xE5366CAE, 0x937E692D, 0xFF5F751D, 0xA4CEBBDF,
+0xC4799DB3, 0x0FB50055, 0x013B0DD4, 0x461E642B, 0xEE3B6DCB, 0xEBD3AFE5, 0xF854FFFE, 0x4DB580C0,
+0xB04AF61E, 0xA6CAFDBD, 0xE0573475, 0x13DBD9B0, 0xDB6329AF, 0xA656EE0F, 0xC9587585, 0xF815867C,
+0xB7146900, 0x7E20BF3E, 0x1315F9AE, 0x785CE3C1, 0x962B520B, 0xD7F0ACE7, 0xB5E156BF, 0xA1F860B8,
+0xCA1171A2, 0x027BCBF6, 0xE5531313, 0xB3DC554C, 0x6067F865, 0x53518C8F, 0xE4815BB5, 0xF73D0115,
+0x9B731993, 0xA60FF537, 0x21F4D2F9, 0xDEDF9A2C, 0xB2734737, 0x6B823CAA, 0x8C9F89C2, 0x6993A94D,
+0x44DEB482, 0xEF8E5226, 0xE4F0F298, 0x4C1CBC9B, 0xB49A89E7, 0x0991CC86, 0x0AA32833, 0x25F0B26E,
+0x3804DF30, 0xCA9CAFD9, 0x3B3AEF74, 0x66C57BBA, 0x7C6DD538, 0x4809F1F4, 0x4E097379, 0xC4792A80,
+0x9667BB4F, 0x52EFE1E6, 0x400AAAAC, 0x36830EDF, 0x887148C2, 0x39686CD9, 0x8D6CFBDA, 0x2C0B2E3A,
+0x6128C7DD, 0xC97373FF, 0xB8AEC894, 0xF38AF2ED, 0xE29DC10B, 0xFF71EA40, 0x63095A82, 0x44DB305C,
+0x7048291C, 0x1189BC03, 0x9436887E, 0xEC62DC0E, 0x3EFCB2CD, 0x386E28D0, 0x894E6EDD, 0xA9854C64,
+0x833D3B2A, 0x24BB8761, 0xE31299EF, 0xD6D1915B, 0xDF01DE97, 0x07C557FC, 0xD26452D4, 0xBAC6B7EA,
+0xB252D005, 0x727865CC, 0xF92C23DE, 0x8F259E81, 0x2B768BCE, 0xA6810973, 0x70924EBD, 0xAC6948F1,
+0x15A48CFE, 0x53831277, 0xFE0CBE89, 0xAD21605F, 0x817429B3, 0xE628721D, 0x827AE0A3, 0xC126D61C,
+0x63286BE9, 0x0E4D7DCA, 0x7B6EA2DA, 0x7F8A0709, 0xA66E4173, 0x4691CEEB, 0x0C686008, 0xE32D70BC,
+0xDBDA9F5F, 0x8F0E5D59, 0xE80B6556, 0xE686ADA4, 0xA5C78B6A, 0x29570502, 0xD8D244B0, 0x04381A37,
+0x180C8005, 0x3D05441D, 0x7F76BA94, 0x1063975C, 0xBBD043FB, 0x4DD4E0A2, 0x197A45AC, 0xE5E40DE3,
+0xF2E0D105, 0xC4C63A7E, 0xDF1D4742, 0x53A3C7B7, 0x0364E942, 0xC8C363D4, 0xC5686307, 0xDFA42620,
+0x1B59A068, 0xA633019E, 0xC997FE01, 0x00FA09D7, 0x412A2967, 0x04AD34D0, 0x6E338765, 0x48DC7AD2,
+0x37AE8648, 0x911944F2, 0x5C12497D, 0x2ECFF067, 0x11351CDF, 0x78C7C0D0, 0xCBFF1667, 0xDD208BA3,
+0xD4A40972, 0x1EE5A564, 0x23FE1400, 0x058361A6, 0x059C484D, 0xCD70A8B6, 0x15FF32B9, 0x5DCBD8EA,
+0xA2B2C3C1, 0x4FEFA9FC, 0x61260755, 0x3AD7D8FB, 0xED5CD61C, 0xA7E076E1, 0xEC808A3B, 0x21F271F0,
+0x48E0AC72, 0xF2D45729, 0x42ACDE56, 0xA83D68AF, 0xC309444C, 0xA609399B, 0xB57512FE, 0x99B0C4F0,
+0x4BB13BC6, 0x529FA2BD, 0x72EC15BB, 0xDB7E538F, 0x6E7D25B5, 0xA8208283, 0x67B5CC47, 0x05D8A106,
+0xBADA3371, 0x4D00CFC4, 0xC7959277, 0xF4009051, 0x15162127, 0xB2E094FA, 0x5508CC63, 0xFEEFA4CD,
+0x359EC1CD, 0x0EDF7233, 0x5889B556, 0xEB8170AF, 0xF0ECC661, 0xE7DAA6A7, 0xF1707A43, 0x22EA6401,
+0xA7288FD6, 0x157C144B, 0x86754061, 0x015E79B8, 0x872DE96E, 0x7A515764, 0xDC8FF61F, 0xFB96DD9D,
+0x809802B6, 0xE9505FB8, 0x40B35EF2, 0x78011AF9, 0x79FFC362, 0x4FD3EEB2, 0xFD799CAC, 0x9CCF1172,
+0x9EDE0D80, 0x7FEFD30A, 0xDD3061AA, 0x9E49384E, 0x2CAC31F2, 0x5B353A02, 0x1D10EFF0, 0xE9E7B465,
+0x96A4E6A5, 0x21AAE354, 0x163298E2, 0xE6761A91, 0x3E8DF323, 0x3E1649A0, 0x2726CD29, 0x5326B298,
+0x0FEC3B0E, 0x540033B9, 0xF5D4A78E, 0xF2D69321, 0x201A9F9F, 0x5765AF28, 0x4BB3AC4D, 0x11946854,
+0x881EF75B, 0x8DAFFA35, 0x861ED187, 0xF7B9861E, 0x5AA779D2, 0x6719489F, 0x537561E8, 0x32962E0C,
+0xD32D2122, 0x18742AA3, 0x77D3DC6C, 0x1CB1E1F6, 0x683CE483, 0x25127C90, 0x2C807034, 0x4BA34F2C,
+0x9535C8E9, 0x68E39CBD, 0xE182116E, 0x5DB06BA0, 0x646C4E27, 0xF2D4A674, 0xA6B8101D, 0x111093E0,
+0x159515B1, 0xAD55F318, 0x6422D5A2, 0x6CCAA748, 0xB4C87299, 0x1BDA8BAF, 0x8C85B667, 0x9F0E6639,
+0x56FAFBCC, 0x47A710A5, 0xF25CF9F9, 0x751D739B, 0x181D6963, 0xAA9A0E56, 0x18F3D770, 0xB0D350C8,
+0xFA78818D, 0x9B08E735, 0x57A2AA27, 0x13313062, 0x9E81757F, 0x5D686C2E, 0xCA221887, 0x025FEBA6,
+0x8B3D1919, 0xD4004A4E, 0xF78D80B9, 0xF7DE6811, 0x2696985F, 0x6F5379DC, 0x34A4C637, 0x05D5C2E8,
+0xD34DCED4, 0x9D6D00DE, 0xD321D99E, 0xE37FB0ED, 0xCE85CBDA, 0x142336C1, 0x17BA5395, 0x15235F55,
+0x535090B2, 0xE6073DEE, 0xEA9FF1A5, 0xF2F6A586, 0x975B7CEA, 0xC94D3EDF, 0xC5F83F27, 0x8DE6747D,
+0x1AA601D0, 0xBE1CD9AE, 0x013E7238, 0x9A290B3B, 0x56E4F28D, 0xA69731D4, 0x173E1A4A, 0xDDDF3228,
+0x18F3468E, 0x1F4365BA, 0x0489492D, 0xC63FE8D2, 0x645530A9, 0x67279409, 0xEAC58D63, 0xAEC73ABC,
+0x45FCD32A, 0x30E74BBC, 0x7CF4FC7E, 0x5157BFFD, 0xF9FBD34E, 0x41DDF1EA, 0x5893939C, 0x74B2DB3B,
+0x5B817D02, 0x55DC180A, 0x1250EBD4, 0xF052B472, 0xAC4657B0, 0x9A92732E, 0xF26E5404, 0x00DE9E7A,
+0xFBDBEE06, 0x8E4B6036, 0xDC7DDF58, 0x1FD953AC, 0x4B769045, 0x72303A0F, 0xFD109279, 0xB980C7EB,
+0x3E1014C3, 0x57DC93ED, 0x238D5783, 0xC0E810AA, 0xF245D70E, 0x88CCBB21, 0x2F4468CC, 0xC6FB3C0A,
+0x9BA07350, 0x9D6DA1DA, 0x7BAD71C3, 0x8CFB04E1, 0x61EC2631, 0x7C5F131D, 0x5C0464E1, 0xD7F08517,
+0x23342610, 0xE2F5797C, 0xAFA1589B, 0x0D241C09, 0x763E000B, 0x94875071, 0xA4D14C97, 0x249EAEDC,
+0xD8A1ACE0, 0x13641030, 0x56F68EDA, 0xB02ED402, 0xDE443EAF, 0x03035E92, 0xF414E47B, 0xE2DA27D5,
+0x6737CD65, 0xF2DA6B73, 0xD39403EF, 0x8A87C098, 0xC1BD4C9B, 0x9F5CDB08, 0xE215B67D, 0x6BE51FB2,
+0x13E05157, 0x7A41E79D, 0xF6C07C7A, 0x61391DB6, 0x53EC4BB1, 0x464F51D0, 0x6C0F51AF, 0xF28D3094,
+0x2B72C930, 0x10F9763A, 0x99E29755, 0xCD3F0CC3, 0xCDDCFC94, 0x3BB154E0, 0x689A9877, 0x50D01590,
+0xD0455FAE, 0xD2C5C674, 0x62FD1348, 0x1CA54ED9, 0x10C12164, 0x03A32267, 0xF301A924, 0xC10790C4,
+0xBD519B26, 0x713303E0, 0xE0CFCBA5, 0xAB9D519E, 0x193EF698, 0xD17487F1, 0x0DE2C348, 0x7F6F6AC0,
+0x6DB12B3B, 0x28055D1B, 0x261A0866, 0xEA63B058, 0x111E2C36, 0x0AD7F101, 0x550E7C90, 0x2C7245C6,
+0x382FA48B, 0x4CD3FAED, 0xE94D17C9, 0xA88E2C16, 0xB6E441DD, 0xB0DFE4CE, 0x1868084E, 0xFD9BDA89,
+0xFB239981, 0xCBE29932, 0xFDA95D72, 0xA48B7338, 0xAEE6B25B, 0xEC58899D, 0x2943330A, 0x2AB726A2,
+0x14FBED2D, 0xF10DE431, 0xD92775A8, 0x821F782F, 0x3562271E, 0xBB302C98, 0x24BA572C, 0x1E706A16,
+0xE90122D8, 0x108CB7AF, 0xD4DB68C0, 0x85A0ACE0, 0x7CD94C5C, 0xC494007D, 0x7E1212F1, 0xE000DA8C,
+0x050F67B7, 0x6388CDDD, 0x30E6B3B4, 0x057FD324, 0x9363C957, 0xFFB854CC, 0xF1B1A936, 0x354FC530,
+0x0C482C47, 0x4007B83C, 0xF2043F3D, 0xB152FFE8, 0x57514721, 0x4F200E2E, 0x3D0711A2, 0xE0343642,
+0x0DCFDD3A, 0xFD3BFDF2, 0x7306CFBA, 0xF45FC344, 0x710552C5, 0x34FB4448, 0x952BF899, 0x717FF54B,
+0x46A83AEB, 0xAE4CB53D, 0xBAB37855, 0xFD4FD391, 0x508596A7, 0x3A98F36D, 0x09382A22, 0x221FE88B,
+0x13148128, 0xB7D6C948, 0x8938A651, 0x4166E265, 0x366A1991, 0xA6BC32D1, 0xFA0D9E8A, 0x38937D7B,
+0xDD621DD8, 0x904F9E3B, 0x538F4A42, 0xA1143D3F, 0x7212EA7E, 0xF8D61FED, 0x4339BC27, 0x115CA311,
+0x6D836D96, 0xA30EF67A, 0x83E88ADD, 0x7B59020A, 0x3986D996, 0x4D92A804, 0x92CBB3E7, 0x711BA5A1,
+0xEF6171EC, 0xF05FF0B0, 0x4DA57035, 0x11206057, 0x64F7731F, 0x9E781A86, 0x35CE9E87, 0x0AEF7327,
+0x7317E0DF, 0xD84F61D2, 0x05AD49DD, 0xFBF13AD1, 0xB04431A5, 0x52B3B1B8, 0xF5F6B47B, 0x876FDE23,
+0x77CB208F, 0x373DA7DF, 0x1F45C326, 0xD65A5D4C, 0xA3223604, 0x134E40A6, 0x74B0869F, 0xE041CCA0,
+0x97AE73BA, 0x2CA074B3, 0xD5AF3FB7, 0xCF5B1C4D, 0x26FDFE5D, 0x96B69B8B, 0x2F91239C, 0x0E7E5810,
+0xD0C2C936, 0x8FE5C802, 0x389FB479, 0x30054BBA, 0xFC5E8EDE, 0x8D53491A, 0x394E5ED1, 0x14FE493C,
+0xF75D3B30, 0x32189A9E, 0x30C7B943, 0x37005ADE, 0xFCF5B26C, 0x2C4DD233, 0x5475D7A8, 0x95764D09,
+0x0A91C562, 0x7749F935, 0x1BA23623, 0x968A5A96, 0x65938C44, 0x9D0A4E03, 0x51334C7E, 0xE8D0C9B6,
+0x35EC0184, 0x30246A78, 0x55A94747, 0xE9CB1A92, 0xA1F48BC8, 0x054AE127, 0x4128D726, 0x74BE9FEB,
+0x8512830D, 0xC819323F, 0xEA375267, 0x5837DEA8, 0xBC7666E1, 0x6B4E0355, 0xF1661ECF, 0x3B17B7EA,
+0xF37C4092, 0xABAE6ED7, 0xD96DBCC5, 0x95E3A327, 0xCA85621C, 0x702F72DE, 0x7AE95BAB, 0xFD35354A,
+0x86C2D516, 0x44C4224F, 0xB85E348F, 0xB0D34FAA, 0x8CB50E5D, 0x757EB9A7, 0x18382ED2, 0xC33DC528,
+0x5F8CDE4C, 0xF8CB884D, 0xD1A7F529, 0xD2351D96, 0x7CB7944C, 0x92138958, 0xC9ACEADE, 0x6A234B87,
+0x07CC7C89, 0xEA722C9C, 0x7DCD7B2E, 0x875E199C, 0xEFDA7044, 0x8C28166E, 0x21785065, 0xA4814A1A,
+0xBC444A72, 0x720411FF, 0xE338FCA8, 0x76C6F676, 0x73F3FD95, 0x5ED299F5, 0x9616DE0E, 0xCC57F3EE,
+0x727A0A7C, 0xB47888E4, 0x9DCD994E, 0x62FE9EBF, 0x259DD1B4, 0x7B78F494, 0x160711FF, 0xE3DCDF71,
+0x9BDB2D8B, 0x30A2F68C, 0x809B9E40, 0x9880CCB3, 0xAE22A57C, 0xBC0F5448, 0x15B3A40A, 0xC78DF052,
+0x382A1710, 0xDCC5B9D1, 0x0C71035F, 0x329FB210, 0x0C209CAA, 0x064A7D8E, 0x9EFF7029, 0x9E624DD8,
+0x4B4EB3B5, 0x65448C84, 0x95EF8EA2, 0x9BB4CCA8, 0x822378A9, 0x6E239C51, 0x979F4F5F, 0xB65D6AB2,
+0x6EE086A3, 0x9ACC9D55, 0x6BF89B7B, 0x35F18FDB, 0xF0B9AA64, 0xC23F16A2, 0x1CE5C5B5, 0x4D439DBA,
+0x40E1AC3F, 0xD625F642, 0x5164578F, 0x0A6FF949, 0x1CE6E393, 0xA73C5FB3, 0x7332681A, 0xABFE6115,
+0xD4D8FC6D, 0xCF90DC41, 0x05DCDDDB, 0xA5FEF0B5, 0x7106DAB2, 0x15233DE5, 0x4BA2BB31, 0x579CD8BE,
+0x82989453, 0xAD13101C, 0xBD15A230, 0x04CCED90, 0x98A37A74, 0xC6C7F906, 0xA200CA4E, 0x8FAE98BE,
+0x1CCEEBCE, 0x1E9FBB52, 0x22BBFDD7, 0x2939B2E6, 0xE01953A0, 0x8FB1555F, 0x92874168, 0x96F0FE23,
+0xF2C2122B, 0xC41D0819, 0x2210C27E, 0x2248E58C, 0x7264E4E0, 0xBA9CD559, 0x847F107C, 0xF51F2C58,
+0xEA5D8E0A, 0x2E67A5B3, 0x26ECB1DA, 0x0A9DB346, 0xD7C87101, 0xFA3480D3, 0xA2184BEE, 0xFE658236,
+0xA45C0345, 0x92438A54, 0xBE14A9AB, 0xB37E450C, 0x00EAC54C, 0x2FD90B81, 0x35BE271F, 0xF89D47A1,
+0x92DE0C53, 0x50B3C572, 0x0DEEA538, 0xD9BF09FB, 0x78FE9872, 0x87580586, 0xAC9A2405, 0x72CB820F,
+0x45AD8438, 0x80151B6F, 0x7E350DDE, 0xC96A3931, 0xFEF89143, 0x1B9D2B97, 0x4C3D2E55, 0x78F3EDC1,
+0x59D7C0AC, 0xB0BEF9FF, 0x522117DF, 0xF62C5CB7, 0x75C1DF51, 0xD3F8D054, 0x2057B7CF, 0x549F752A,
+0xC727825D, 0x46E32FC5, 0x1BCBF3D0, 0x3F97E862, 0xEDD3F6AB, 0x36C30F1C, 0x28BD458D, 0x1F39A8BF,
+0x1E4B140B, 0x42550EDC, 0xFBF61B3E, 0x810105F7, 0xBB90F433, 0xB29CFD7F, 0x25DEFCB7, 0x11DCDAD9,
+0xCAAC63A4, 0x8EF15509, 0xDF92036E, 0xE94F6FE9, 0x0172C462, 0x421994B2, 0x8F40360D, 0x08344F63,
+0xAB12C4D3, 0x9C0EE022, 0xD8B93BCE, 0x1A755CC9, 0x6F100B9C, 0xE970655A, 0x7EE18727, 0xAD04648B,
+0xE4D0895C, 0xCED6EBF6, 0xD85602D6, 0xADEC7327, 0x47B15844, 0xF64B24D3, 0x1B79E731, 0x007F8301,
+0x3694F02A, 0x921F51DF, 0xF42C4CDA, 0x9F268C2A, 0xCF7BE5D5, 0x79D3010F, 0x79F46BC5, 0xD42F4CE3,
+0xE884862D, 0x7B37E4F9, 0x49925F16, 0x5B57DEC0, 0x5713C2EA, 0xFEE55D6F, 0x38F604BA, 0xE750496C,
+0x9B8277E9, 0xAFABFF96, 0x675D5CA0, 0xB8582C18, 0xDF66541B, 0xDEB8FE46, 0x1A557039, 0x95BF2DD5,
+0xFFC6A588, 0x710481CA, 0xD7AB4B9C, 0x6EEABEB8, 0x61C2DCB7, 0x77652F52, 0x30049EBA, 0xB5376451,
+0xB2A005B1, 0xFAEA996A, 0x5258ABC1, 0x0EF74893, 0xBBAEC6F7, 0x69BF9CE4, 0xBA8CEB11, 0xB825FC4C,
+0x503E2447, 0xDB9AEFB4, 0x1FF71A84, 0x83C7D80F, 0x8517FB2B, 0x44331580, 0x81607C3C, 0x7E23F0A8,
+0x1F67939F, 0xFBA05110, 0x1479D047, 0x86167A35, 0xAF7FF75C, 0x7BD0F8F5, 0x1B48F892, 0x9E5C7DFB,
+0x7350EB59, 0x13F3AB68, 0x48848E84, 0xDAB35BF8, 0xFCA4225C, 0x4C6BC135, 0x3A05D148, 0x274B09C6,
+0xA16982B6, 0x30453D35, 0x994914FA, 0x72B7418A, 0xFBD0C666, 0x07850CA2, 0xB3A0C93E, 0xBA6DB868,
+0x5AED2DB9, 0x3BC872B3, 0x82CD9D4A, 0xFFB96EB3, 0x8E864C49, 0xA0CD6795, 0x9BFB14E0, 0x548CE9C1,
+0x792C3DEB, 0x4FE1790C, 0x7848FB3D, 0x2D655833, 0x85DBFE15, 0x3959192D, 0x834F8B7E, 0xFD1DDCE5,
+0xFD660741, 0xC09E7F9A, 0x497941EA, 0xEAD65295, 0x472A6960, 0x2861FB76, 0x21923577, 0xFE384365,
+0xF0415359, 0xAD05769C, 0x3A711723, 0x59016F88, 0x5F3D535A, 0xA6F243E7, 0x52DC6D56, 0xC74C72D0,
+0x75F4AEB8, 0xDE8536C1, 0xDB807C08, 0x968A110F, 0xF656AF48, 0xC62BD9BD, 0x7BF79AC8, 0xF18D123E,
+0x48734181, 0x34572EA1, 0x7602F43B, 0x677DFE09, 0x745F40D9, 0x4E1D86A8, 0x8046A7FC, 0xC0D9F443,
+0x49629A8C, 0x50EEB24C, 0x18D1F265, 0x2B571259, 0x44C01F6F, 0xB69AB1ED, 0x31173866, 0xA94D6CEF,
+0x822E8B81, 0x5BA4CACC, 0xD8DE4482, 0xCD8D03B6, 0xD296220E, 0x92F73A29, 0xCEECA09C, 0x6E71C765,
+0xE46AD916, 0x4C66159A, 0x123D0D82, 0x07BB2DA6, 0xBC2AEED5, 0x9474B6C5, 0xED8D3F53, 0x3F26F468,
+0x260FA3D9, 0x23DB1E95, 0xD8E04DC1, 0x3D84A5FA, 0x9453970D, 0x3BFD08DE, 0x17FB2611, 0xF883B9AA,
+0x27B889ED, 0x3E4C75FF, 0xB8810880, 0x6C885EED, 0x0E6083C4, 0xBB915673, 0xD2BDA997, 0x0DB84D3F,
+0xBBC2E5F9, 0xC0641F00, 0x56274A75, 0x1C1D6E52, 0x7425B808, 0xB8D3AF08, 0x028A29E9, 0x5DD925E5,
+0x91A95451, 0x56134017, 0xC07DD416, 0xB6D4CB0B, 0x7C8CD9B4, 0x0BA01C39, 0x967CE717, 0xE0490270,
+0x8546D8F2, 0xB102AA94, 0x55B8590D, 0x44F988F0, 0x52EABFB8, 0x5E525823, 0x59AD5F8C, 0x428D59F2,
+0x596658B2, 0xAAB6630D, 0x0AC4AD3B, 0x9FE60482, 0x4418B809, 0x29FB3598, 0x1672766D, 0xA6D0EB83,
+0xCC8CC783, 0x3A4CC384, 0xC1A207F6, 0x45B1DDE8, 0x9490D91C, 0x5AAF5FC3, 0x01D2C1FB, 0xA9906A7B,
+0x6FE426F8, 0xB119F48C, 0xF752FABC, 0xA5D019B1, 0xB6303F04, 0x6F0472DF, 0x68BFBF9D, 0xD4AB18D6,
+0x0F768750, 0x95F4B7A9, 0x1403E743, 0xE1D61EF8, 0xEE945FDE, 0xAFF446FF, 0x97890E63, 0x8E470A74,
+0xAFCBB1F4, 0x896CAC5F, 0xA9261124, 0x00E746BE, 0xE75564D6, 0x605E6498, 0xAE7EFD1A, 0x46E76430,
+0x335DDF6E, 0xADB12F2E, 0x10798AE1, 0xACC6243D, 0xD97EE10F, 0xBFF7C648, 0x60683BA0, 0x8F26B834,
+0x1F791149, 0x7ADD85DA, 0xAEB86E43, 0x8FFF449D, 0x83DC5991, 0x32F3D853, 0x8E28CEDF, 0xCE82250F,
+0x8ED15E64, 0x9299493C, 0x93EB9AE9, 0x39560DE4, 0x2F1EC691, 0xD6EAA849, 0xA8714963, 0x8FC6A566,
+0x1CA0D948, 0xE5FC0EE9, 0xB6FBF46F, 0xCA471CC4, 0x2A0B6B60, 0xC84B70FC, 0xD30704EB, 0xAA3E7395,
+0x26FE61AB, 0xB3382FA1, 0xEA146F77, 0x00732894, 0x621E866D, 0x512B8F38, 0x0880CB9B, 0x3039F5F0,
+0xCCDB1DA2, 0x24AA8127, 0xF8CA0AC3, 0x312EA33F, 0x587F7509, 0x63C01315, 0x36BA598C, 0xCE47F339,
+0x30B1072E, 0xD3F9D60E, 0x06C6C4A8, 0x0D07C2CD, 0x93C9E03F, 0x179BB22F, 0x17E0A5F2, 0xD757DE17,
+0xBE930D97, 0x6C9526F0, 0xDB69AD29, 0x0FBBC295, 0x714F8056, 0x52DD43B9, 0xE0F8370A, 0x2E8E6EF9,
+0x11966F2E, 0x5B49DBEA, 0xE3E0CC9A, 0x34310494, 0x4226945B, 0xB523CAFE, 0x09081B19, 0xB40A99C6,
+0x47095EA7, 0x02444ABF, 0xAC539293, 0xEC0B35E4, 0xAF9379DC, 0x3B67330F, 0xDDA683B1, 0x4386C4BA,
+0xC6B8526F, 0x539B4A9A, 0xF4B8904D, 0x876CA779, 0x7ECF0BEE, 0x70B623E7, 0x8247FEC0, 0xD4BDC955,
+0x37EF8020, 0x830AE1B9, 0x7258DD14, 0x0BCCB2B1, 0x6766A38C, 0x45477165, 0xF60E60F6, 0xFB1E253D,
+0x2CAE68E4, 0xD1B1F255, 0xBD9EB99C, 0xCB831E8F, 0xB79EE128, 0x8A4B5E76, 0xDD4D3377, 0x08E94E10,
+0x45286E11, 0x2DA74CBA, 0x30D49687, 0x8BDEA454, 0x63AD932A, 0xD04D1904, 0xE3832EF9, 0x26035182,
+0x3B82D6E9, 0x5439F57F, 0x2CF771E3, 0x9C286546, 0xDBDAB009, 0x97309085, 0x8437F3AA, 0xFA65A9F6,
+0x0FA6574F, 0x3EC2AEBF, 0x4D665011, 0x8837BA41, 0x864FB4B0, 0xB047AD6E, 0x18E6B585, 0x5EE48E9A,
+0x1E1C0170, 0x7D9CD6A8, 0xB74F0FEA, 0x5F9CACD3, 0x4E8CA653, 0x8FE49FE4, 0xC3BF2639, 0xF66B3429,
+0x62223E45, 0xDB7C0B87, 0xAEA4B61C, 0x15B8CD00, 0x1EB5A639, 0xCC6F4D0B, 0xFB95D482, 0xEB3B3FF6,
+0x46F43E6A, 0x7BC29379, 0xD07DE180, 0x64F53B7C, 0x231FA873, 0xE241E157, 0x35860E4A, 0xFE702418,
+0xAC57268D, 0x61817CBA, 0x1B40F197, 0xF5E00BDD, 0x14B25FB6, 0x3875EE82, 0xC8545C2C, 0x74531174,
+0x7ECCF8EF, 0xB39BF40F, 0x863592FF, 0xB8007330, 0x16B1B142, 0x09E2C263, 0x5AEB8A0C, 0x2F4E496C,
+0x9D8B1141, 0xC16887AE, 0x1E142B94, 0x614AAC6F, 0x49C87EC2, 0x855C6181, 0x2D7B65E3, 0x2DA11F60,
+0x7BDF7C54, 0x3DD6A842, 0xC9CFC082, 0x508DB3B0, 0x266388BC, 0x5D0964C2, 0x36592782, 0x516B8509,
+0x169F115D, 0x46BA56D0, 0x529D4620, 0x23AE328A, 0x7B5A9F40, 0x2A815F2A, 0x97C285F7, 0x8ED07BDC,
+0x13D6D0AD, 0xC61116D4, 0x66185389, 0x5C878E9C, 0xE066A984, 0xFACDDFAC, 0x1DABE59C, 0x982B6837,
+0xE1664096, 0xE725934F, 0xDA513126, 0x3275AC2F, 0xED640279, 0x3A70F8E9, 0xC8835CFB, 0x040B6A47,
+0xB08F8063, 0x90EE1A39, 0x13863C3E, 0x55C5C503, 0x8F063BF7, 0xB40E012F, 0xF9C1BB17, 0x9BEBB90D,
+0x65743EE3, 0x322ACB43, 0x2EB05014, 0x0687E0BD, 0x7FF16EF9, 0x14549358, 0xD3D7E1BE, 0xB0EDB80B,
+0x26C7CB48, 0x9E544A32, 0x9872E407, 0xD8D9C539, 0x6707AD26, 0xB66152B2, 0x513C2E7A, 0xA884B00B,
+0xE4B93E64, 0xE8A0598C, 0x0852AD2A, 0x366DC217, 0x16C6BF4F, 0x9D4B64FF, 0xB87F570E, 0x7A12D10D,
+0xAD2031B5, 0x1D067526, 0xB3E4B8FB, 0x489F03E1, 0x17E539F1, 0xFB6636FA, 0x5C17F6E7, 0x10B6F336,
+0xF73F2B2C, 0x45CE9E86, 0xFBF57538, 0x70271983, 0x959C59C4, 0xA4DE4992, 0x9A488508, 0x70FA6E48,
+0xC23A9C04, 0xE0674501, 0x94F0524A, 0xDD1B1706, 0xCF23B429, 0xAA728AB4, 0x32283814, 0x2211B095,
+0x98663C1F, 0x4CF8D1E2, 0xF25E98A1, 0x6CF1614D, 0xA9345A9F, 0x865505B7, 0xD8E5BAEF, 0xD48F6D0C,
+0x0AD250FF, 0xA84F1BE1, 0x613BECB1, 0x42A27022, 0xF8799F59, 0xA569DDA7, 0xA95B06C3, 0x4297DF9C,
+0xA7C15646, 0x12455784, 0x33EADFCA, 0xAECA7677, 0xC713B92D, 0xD3956BB5, 0xD3B49E99, 0x65D16AE6,
+0x821A24E7, 0x1167F425, 0x56E8CC9B, 0x6707AA9C, 0xBEB4F287, 0x3C56088D, 0x8114DAC0, 0xA03C1925,
+0x55A7A84F, 0x4891DC99, 0xBC5A8BB6, 0x47568F36, 0xC6A575A6, 0xFAFB31C8, 0x6DE4BDB9, 0x9CBE62F3,
+0xD59BA0B4, 0x29F077F3, 0x044AFDAE, 0x97EB1E73, 0x06131C71, 0x33180212, 0xC7A00E3C, 0x7DCF6260,
+0x36EE08CC, 0x9B72FE5E, 0x5D5A8391, 0xDF7C379C, 0x707C028C, 0x8B0416E9, 0x389C76A7, 0xF7BCC6CE,
+0x6DD786E2, 0x4C1D6445, 0x136DF332, 0xF84827E7, 0x0E5054CA, 0x0A32F019, 0x163DB706, 0x2859153D,
+0xEE9AEF3D, 0x0BDDE3B7, 0x39E58A50, 0x02D8EBA6, 0xCD815AD7, 0x6425331A, 0x1D9017BC, 0x5CA3C182,
+0x2CBEA7B2, 0x43A1F588, 0x5A8A8CBF, 0xC8BCEC2C, 0x3087FC34, 0x73E6855F, 0x14568384, 0x9ABF758A,
+0xD21CED4B, 0x7A7D129E, 0x16F70136, 0xA52A5633, 0x46AE4BFE, 0x7FCE2C02, 0x560C8E23, 0xF6DF6AD0,
+0x37BDC53C, 0x4E6DE188, 0xF3B714A0, 0x5B90ECF8, 0x075FC4B3, 0xB938D48F, 0xFE28C4BD, 0xB6BAB574,
+0x72B76260, 0xB789C168, 0xA44FA2DE, 0x8DD656EA, 0x50444CD8, 0xD9AE2DD6, 0x65A3DFE4, 0x69946E00,
+0xC3F80BF3, 0x774ED53A, 0x9E5D4B8D, 0x943220CB, 0xCBFBA96C, 0x4DBCC755, 0x1120F728, 0xDFDF701F,
+0x6F3E556D, 0x99089087, 0xEB0B1A55, 0xB37FEC8E, 0xD769F41D, 0x3611CD0E, 0x0796B30B, 0xD447B31A,
+0xDDA06683, 0x59F441EC, 0x6BE4EE71, 0xA7CD2695, 0x7E8778E1, 0x3E17FD1F, 0x4E520ED7, 0xE404A2CF,
+0xF4195D7B, 0xB0ABD7FC, 0x75E8BEBF, 0x87611ECD, 0x4E2754AE, 0xE857F0E0, 0xC5A82406, 0x1505D712,
+0xF2CC115F, 0x7D31F866, 0x85EFFC97, 0xAE1A820B, 0xA1E0005B, 0x7BA4F735, 0x17CD7215, 0x837BD8EF,
+0xE06714D1, 0x9BD5937F, 0x43356BBD, 0x21F30B5B, 0x2A970E46, 0x6D5F5185, 0xCB2DA2D1, 0x55F26CD6,
+0x30376388, 0x6BC8EBB9, 0xB4EDB4BF, 0x8D691E4D, 0xCABEEEA5, 0xE47F79D2, 0x810F463A, 0x1C13F5CD,
+0xFEA0FF15, 0x40682625, 0xCE9C8B79, 0xA95E8C81, 0xAA4DA519, 0xECC650E0, 0x8B186B02, 0x9F119FF8,
+0xC26FA1AD, 0xC5015930, 0x1D012F3F, 0xDE122B40, 0x251FBA70, 0xABADCE17, 0xE7951688, 0x6845951D,
+0x5EF086B1, 0xA4830205, 0x25F5465F, 0xCFB1DD13, 0x1CEBEF4A, 0xCF58A7E8, 0xA415C724, 0x5AEAAFF8,
+0x7E221339, 0xACC789C6, 0xBEA2FEBD, 0xD3D76F0E, 0xA0B1BA6E, 0xC0DA6914, 0xBCDBE477, 0xEB7A3403,
+0xD8FF9C25, 0xA8D3389A, 0xE9B573D7, 0x53B5B2C5, 0x82D67F6D, 0xCFFF3688, 0x15AEAB39, 0xC1CA9062,
+0x2F47A439, 0x9A9FF20A, 0x5D94D30C, 0x62D1700B, 0x502AFF3A, 0x327E61BB, 0x06BA94A0, 0x73F8D4DA,
+0x20A94BFE, 0x111DA6F7, 0x94302A8D, 0xCD866543, 0xF2DB1BC7, 0x72399A2E, 0xB169A3B0, 0x9327F961,
+0x8F44CEFA, 0x1151A5E6, 0x022CA972, 0x0C5BA1EB, 0xBCDF391C, 0x47656D7A, 0x21C3FB8D, 0x4D9F0E8E,
+0xE07F2E64, 0x0F0173E8, 0xEEB6DBA0, 0x7F8126B5, 0x9EEAC3C4, 0x4387CB31, 0xDF9675E3, 0x2484F057,
+0x748B5248, 0x87DEA6FF, 0x09803F6F, 0x1C4502F8, 0xCB53DC7A, 0x0FA0161C, 0x350EF822, 0x3B59C9FB,
+0x9EC87F62, 0x5E6D3475, 0x61F1F9C3, 0x34622D3D, 0x528FAB64, 0x1A6F614D, 0x5850EBC9, 0x462BC9C1,
+0x603634B5, 0x95D81A4D, 0x78893D15, 0x2B5E6492, 0xBDC2F5C3, 0x11A51E84, 0xD03DD92A, 0xEE43D527,
+0xC686E79D, 0xB1A3B572, 0x82144A2A, 0x0DD6D373, 0xB6F30144, 0x5E968BEA, 0x7AEAC065, 0x1B2A27FB,
+0x6F3A631B, 0xAB3A9DE0, 0x4856C756, 0x54501F9D, 0x5239CB6C, 0x9FD58A55, 0x6AD81F51, 0x943F3041,
+0x4EF33B24, 0x858568E4, 0xAF9E1DA8, 0x4982E058, 0x155961CA, 0xAD3FB3D3, 0xC54C1E5E, 0x5CE88A61,
+0x7AD32218, 0xB1523610, 0xE609A4CB, 0x5F622FDE, 0xE15934F1, 0x15CB68BC, 0x97A8E62A, 0x2EAF31F9,
+0x5B4C386B, 0x9F5B1CA0, 0x93673563, 0x34C116EC, 0x3B73D10C, 0x9083E1FA, 0x00962637, 0xF8349B8C,
+0x55AEB253, 0xD00170E6, 0xD105D6A5, 0xF05EDCE8, 0x1CFCF2A6, 0x263E444F, 0x64F15182, 0x3D4AD520,
+0x3C03D465, 0x93474860, 0xF4CD60DB, 0x7685642C, 0x6BD0A1DD, 0x47DE022C, 0xF3ED36D5, 0x6A3BDFA0,
+0xCF2D1B9F, 0x6597E89F, 0xBE5FD491, 0xDE66E8D3, 0x8D7F9147, 0xC30C02B1, 0x81733471, 0x6D22EDF8,
+0x7A3C6758, 0x8BA8C90E, 0x6775FFF9, 0x79BC8221, 0x8E581F31, 0xBE150B05, 0xC66CE3D3, 0x42A29073,
+0x21F793F3, 0xEEA38156, 0x6A17E652, 0xFDBA6029, 0xB60B6CAA, 0x32A8FCCB, 0xA762D347, 0x5083879E,
+0xFA7C97E7, 0xBE235383, 0xFFA1FAB7, 0x06E72D36, 0x8A1B0F6B, 0xC312FDEF, 0xD4099040, 0xED10FA7E,
+0x937FA262, 0x84DAD62F, 0xFE1E6744, 0xEBDB8D72, 0x40BC2D55, 0x27893D86, 0x11D4095F, 0xA83448FF,
+0xF3370BB0, 0x6488EE65, 0x0068F8BB, 0x1AF1421A, 0xF2D13BCD, 0xCA02841C, 0x1EB68F6D, 0x4835FE2C,
+0xB49C39E9, 0x4DB3CBE7, 0x086F8EDE, 0x4D58A9D5, 0x60FA8D09, 0xF0AE0730, 0xE923D303, 0xEC7EE714,
+0x4478C938, 0x4880FBB7, 0x6D5E2E81, 0x5124663D, 0x18DF02F9, 0x43D24204, 0x09035399, 0x3C3E90A0,
+0x49CFC5B1, 0x43DBE96F, 0xBA5DD7C4, 0x71AC8A64, 0x12EA859D, 0x29BB1032, 0xF92003BD, 0x19983120,
+0x1E28CC4C, 0xB4E9261C, 0x2127E334, 0x2C578031, 0x515D25B2, 0xE2E39525, 0x51E21948, 0xF00DDBC5,
+0xCC097B91, 0x374127E5, 0x3280BEE4, 0x10C38624, 0xD995EDF9, 0xF34E459C, 0xC5BE2088, 0xE68B2BB8,
+0xBB46611A, 0x2B653919, 0xACA661BD, 0x8F90D14B, 0x5712EE26, 0x3170D3D8, 0xDA5A056A, 0x1EC1D70C,
+0x14F779F8, 0x04FC8C2C, 0x48AF024A, 0x6C756EF3, 0xD73F62CE, 0x6826014B, 0x4197911C, 0x535E8DA8,
+0x878112C6, 0x4A5C6D36, 0xD0CD7A99, 0xCD97AC48, 0xCC5E3CD3, 0x1762A4E7, 0xAD234924, 0x0DDBE484,
+0x1165E562, 0x25C44693, 0xE8EBBC1B, 0x41C3AB35, 0x3B63547E, 0x75FC67AF, 0x1DA33DA9, 0xA63F5512,
+0xD2562ADF, 0x5BDE5827, 0x3838C8C5, 0x4649ED88, 0x9A66F6CE, 0xEDCDCF4A, 0x1D605A53, 0x80D5325C,
+0x2CE6A401, 0x6EA99F01, 0x18EE822C, 0x714FB4F7, 0x6961CFE2, 0x5DE45356, 0xCA3ACC24, 0x6564AB2F,
+0x44D6EE98, 0xBCB9FCBD, 0xF676A380, 0x788F41A6, 0x97438AF7, 0xDC447B87, 0xC1FB8B2E, 0x3CD2BB38,
+0x708176CD, 0x986968C9, 0x56821B53, 0xEC2CB460, 0x804BB2BD, 0x6B29B81E, 0xC6B80BAF, 0x81E36DE6,
+0x21AE10B5, 0xB685CBEB, 0x88C661A2, 0x92FE0A18, 0x049C2C17, 0x57E9C986, 0x7B65D58B, 0xC28A6311,
+0xB0739DD5, 0xAFEA8157, 0xAC7D6520, 0x6FE22429, 0x1AC67C0E, 0x803317D6, 0x893D393D, 0x8E915636,
+0x844C4FFD, 0x842F9986, 0x6EFFFCC6, 0x7428691B, 0x7A787FBE, 0xCDC6D2C7, 0x0675011B, 0xA436294C,
+0xA3E123FE, 0xC53497C1, 0xDDC3241F, 0x55B03731, 0x2DCDCBDE, 0x5957A398, 0xAB3B6EC6, 0xE8650282,
+0x6061AF1A, 0x5959DFC6, 0xBBF57474, 0x804A8252, 0xFC91EA48, 0x62B66208, 0x269C3ADE, 0x9A561E9F,
+0xDA01526D, 0x7D0FFB76, 0x6608B50F, 0x5E925006, 0x4FF6AD07, 0x8B54F4DB, 0x26EA53DF, 0x60082C9B,
+0x510ADAEA, 0xD688A58D, 0x5547693A, 0x617C3D41, 0x1C1B3A79, 0xCA3ACA66, 0xF0764605, 0x7FBDF2C3,
+0x52F3D7CE, 0xD633F172, 0x979F1436, 0x1AEEF02F, 0xE45A7990, 0x44009FA6, 0x9D37E232, 0x4C064677,
+0x2716795F, 0x34A8E78E, 0xE2E23237, 0x2650F20B, 0xEF46647B, 0xA6ACD0CE, 0xD745BDB9, 0xC1981EEC,
+0x2D8315BA, 0x469D65A9, 0x9911EFFF, 0xCED723A1, 0xD92294E1, 0xB771357F, 0xE85D7894, 0xCCBAEC0A,
+0x741A5606, 0xE5C9E322, 0x8672B35B, 0x62AE8D3F, 0xF690054E, 0x7F64FE4A, 0x807D851A, 0xD0BAF4BF,
+0x41FEE395, 0x9430B2C0, 0x07D43AA7, 0xAD164D15, 0xDC1ED5DF, 0xF3F51665, 0x473FF169, 0x7DE76062,
+0x08172A44, 0x8702EE34, 0xD787133F, 0x0E0D3961, 0xBE155FD0, 0x1B28ED8A, 0x1CC34C6B, 0x1A0D891B,
+0xE877058E, 0x4023EE2A, 0x8FD6D945, 0x79D21DDD, 0xC988C384, 0xAAB6328F, 0xEF14DE5F, 0x53E49DEA,
+0xF6E96FA1, 0x55AEC4B6, 0xDBE97554, 0x00FC02A9, 0x57D50FC8, 0xB646DDE5, 0x22B1B05D, 0xAAB2195D,
+0x561813F2, 0x45E1F5AF, 0x57570A08, 0x3166BE04, 0x06F76538, 0x56CEB547, 0x013BB8DB, 0xBEB7ADFA,
+0x1C34E352, 0xC5FB1FA5, 0x475BB5A4, 0xF3B183EA, 0x85706A87, 0xF7642E5B, 0xC504B49C, 0x619BD807,
+0x2E37093F, 0x75E0C131, 0x89D4B872, 0x242932DB, 0x31E482F8, 0x315C06E3, 0x80F883CA, 0x86EF5B67,
+0x1E918DBF, 0x3554168C, 0x1640C706, 0x19982A7B, 0x7481F865, 0xB16FC5A6, 0xF6D5E3B4, 0x8FA614A8,
+0x897B529D, 0xFFC14088, 0xA9D5BBD0, 0x8A64B4E7, 0xE627EAFA, 0xFDC92D92, 0x16EBFF5B, 0x3DC6B01F,
+0x23112921, 0x2BBB63D2, 0x9E1DAB78, 0xA3CA6F12, 0x0EE492D8, 0x3386DF01, 0x032E437F, 0xBBE885C9,
+0x772701EF, 0x9779529D, 0x468E7D2C, 0x23CA4622, 0xA2779A25, 0xBE648363, 0xCD95CDA6, 0xE3268CFD,
+0x8515473C, 0xD21DD134, 0x86CCE69C, 0x70CD4409, 0xC7F75064, 0xBF32677C, 0x94B6EF96, 0xE94981C9,
+0xB0348D56, 0x3BE521D5, 0xF72A7EBE, 0xCC58E7EF, 0xAEBC21B1, 0x4E5C3749, 0xE80A12F2, 0x4412E4D5,
+0x992B15BA, 0xE1944033, 0x09EDF3C6, 0x43953D21, 0xF79B59DF, 0x2712EBE4, 0xA0DF8D4F, 0x8CF2B087,
+0xD83AAEFE, 0xF108AF6C, 0x9051D2E6, 0xD4FD9E53, 0x2BD24B67, 0x2311BE3D, 0x12240AF4, 0x50C37BCE,
+0x75F15837, 0x98C946DC, 0x6FBDF1EB, 0xABB0C2F2, 0x9F7048F6, 0xCEA98014, 0x3783E5AF, 0x1EDC4FBA,
+0xB638BBFD, 0xE8416E54, 0xBB5A26FC, 0x2D8844FC, 0xE2170AE8, 0xEEFDFD15, 0xBBD5A601, 0x1B9424A9,
+0x085EE902, 0xA57FD41B, 0xE0320E3A, 0xE2A25BA3, 0x01FC687D, 0x1DD4A447, 0x59A2D98E, 0x1ADE3641,
+0xD4C218E4, 0x5B5A83EF, 0x4D5C346B, 0x4A3E8D9E, 0xE22BC36A, 0x28A29D37, 0x581CC512, 0xEEEA8358,
+0x70953ACC, 0xCC85F1BC, 0xAE8E407D, 0xE7CFCE50, 0xBD3E106B, 0x1B5658BF, 0xEE77FBB3, 0xB6CF6F04,
+0xDBD9A340, 0x6786D05D, 0xFD79A770, 0x65F27A7C, 0x1831C943, 0xC8B503AF, 0x61B20472, 0x3EDB0A45,
+0x3C4C2220, 0x9AEF63AE, 0x029BAC84, 0xEC865AEB, 0x85731240, 0x1CD55F61, 0x1D4AD15A, 0x8A3D4E00,
+0x6E6C760D, 0xD0A8D1C3, 0xF5C2DD5E, 0xEB426080, 0xBC5336C5, 0xF5204C02, 0xF36A104B, 0x4EC73C01,
+0x3D5B20A6, 0xBB0F297A, 0xA4965192, 0x6220B933, 0x507B189E, 0xB711482B, 0xF909A2CD, 0x943C53C0,
+0x4BE53C22, 0x598E487D, 0x2689A192, 0x855C0933, 0xF978A954, 0x100076F7, 0xAAE4134A, 0xF7626369,
+0xA1B9C1B5, 0x4F720E69, 0x63B94E73, 0xBA00B27F, 0x8D9CACC3, 0xE208EFB7, 0xC7E90474, 0x65D80ACF,
+0x37536E65, 0x9DEB7B0D, 0x69F47789, 0x5981AB75, 0xAF8BF4B6, 0xC022E98C, 0xA69F82C7, 0x3B067FDB,
+0x648632BE, 0xDB6CBAE8, 0x7E4B1B83, 0x128F28EE, 0x8DB82CBD, 0x373DF1C3, 0xD2F3EBCD, 0xBCC879D2,
+0x078631CF, 0x3B8361D9, 0x63F9AAF5, 0x345B3778, 0xDA96A195, 0xC551F71A, 0xA7C6A15D, 0xC0C16C03,
+0xB732EA8A, 0x2035B50F, 0x37FEBF1C, 0x8FA9D0CA, 0x355A8DA3, 0x9F06A84D, 0x1E01EC5B, 0x88E10734,
+0xBE802BEE, 0x4ACE4EA5, 0xBB53FA3E, 0x4D11BFE4, 0xE7D5B1B8, 0x8F6EDD79, 0xB52C355B, 0x2B6F69DC,
+0x9CD10D6F, 0x1EBDFD07, 0x80BD8BB5, 0x08CFDDF9, 0xB3E9ED5B, 0x5C113E32, 0x60124867, 0x661AF10B,
+0xDA864A58, 0xE4383FA3, 0xDDCE3241, 0x0079FDB5, 0xCC1625FF, 0xEE6A8265, 0x27BEA409, 0x23BE63E1,
+0xB5FEBA5D, 0x08A77F24, 0xC5682361, 0x039EA39E, 0x48DA753E, 0xE490D206, 0x1EF13EF3, 0x02DFC6A4,
+0x32F8B0C2, 0x23FEB9A1, 0xF0ECE719, 0x59A9B78E, 0xE3496B90, 0xFF0D8BD7, 0x4F5FF66B, 0xDBF1BD27,
+0x7DC6B6F6, 0xFA8926EE, 0x35E697C2, 0x92553D7F, 0x8E0A17BA, 0xF54BF081, 0x460B2D4D, 0x3705474E,
+0x44A96C45, 0x5D67DB96, 0xE223E70F, 0x298FDFEF, 0xC8706949, 0x701915ED, 0xE7711FB5, 0xC6E33EC0,
+0x22E7A49D, 0xC67415DD, 0x8AD7AE01, 0x8247D5D1, 0xEDCA873E, 0xFDFFCE2F, 0x828E0644, 0xD06E7206,
+0x67DE16BE, 0x4C432F87, 0x755A5D09, 0x6AA9FD27, 0x2F3CC064, 0xAD9B6073, 0x7499AB58, 0x12469A2C,
+0x80596202, 0x751B272A, 0xCC7C9821, 0xC98EC342, 0x639FB29B, 0x055EAD37, 0xA7D066C8, 0xBC4EBC3E,
+0x40678398, 0x8429A7FB, 0x435DD162, 0x281068F0, 0xA71EC0AC, 0x4E4D7BE4, 0xB9BE7C44, 0x26F34A63,
+0x213780A3, 0xDD66B210, 0x493DC11C, 0x3BDF40CB, 0xAAAAA4CD, 0xCF70CB62, 0x7EB0E16A, 0x1BAF8634,
+0x71DC685D, 0x92F9CC56, 0x0FAF0F84, 0x55B703C6, 0xF6415AE1, 0xE9EF3313, 0x11EF143E, 0x30A27A19,
+0x5130807D, 0x8EEB86CA, 0xFEAF68EE, 0xD8355325, 0x28440CCD, 0x21FCD7BA, 0x0A327E73, 0x5C91A513,
+0x03C2DBEB, 0x6C849A5C, 0x33122A88, 0x2C7C4A8C, 0x8EA048CE, 0xCB63BB82, 0x13BE4F3F, 0xCBFA6222,
+0xCDC90F38, 0x182A15E4, 0x0C0F6A8F, 0x19AD3A3A, 0x1A68FB36, 0x882E33FA, 0x5960EBAD, 0x82A5913F,
+0x792D0A2E, 0x11B8F81D, 0x6BB14F0D, 0x55665F67, 0x5EFB8BC8, 0x164B4F0A, 0xC1602283, 0x396A6E8A,
+0x8E130C39, 0x6E30AC72, 0x4CED85BA, 0x6283E816, 0xDCD42FF6, 0xE0DF671D, 0xEE8B6494, 0xB6B711F1,
+0xBED9F86B, 0x31B80B34, 0x41997048, 0x94425AF5, 0xD3D918CE, 0x4517B02A, 0x08E5B1E9, 0x631950A1,
+0x91EE5FD7, 0x5F1A1E82, 0x11CB6C0E, 0x28CF1123, 0x5018E42E, 0x09BA4220, 0x21C487B5, 0x727760BB,
+0xA66CC829, 0x6626F55A, 0x0BF31965, 0x11546BD9, 0x3191559A, 0xAC294C85, 0x552C4944, 0x5F928075,
+0xBB8E8CB3, 0x9CC81F82, 0xDE5C893E, 0xA46CC0A9, 0xDC4B1107, 0x74CA6510, 0xE219B832, 0xE8318676,
+0xF00C8C5B, 0xA323F96A, 0x454849F5, 0x24BDF7B7, 0x3ADFF4FE, 0xFDD9103E, 0x92C711B8, 0x31103930,
+0x2339D81F, 0xF3841C5B, 0x70F214B5, 0x627139CC, 0xDCE0271D, 0xB3659869, 0xA5C2FD50, 0xF1E48AC5,
+0xA1755FA0, 0xF5914B60, 0x2E472063, 0xACDDD1B0, 0x4605F886, 0x8A639790, 0x8F759D6E, 0x7C4F6CE0,
+0x68D8E14B, 0xF5790FA9, 0xE0E8787D, 0xE42BDAEE, 0xF8B7CB94, 0xEB8EFD65, 0x4FF6203D, 0x50065A99,
+0x3A4A5CFF, 0x63DDE5E4, 0x51DD0D84, 0x85EBC463, 0xD9250655, 0xA04755C8, 0xE3737774, 0x2682B4A6,
+0xAC7FE5F4, 0x694686EB, 0x3C48C34B, 0x4A994D80, 0x3D578326, 0xA3578E41, 0xD948DEAA, 0xDAA4C9FD,
+0xC48D9AAF, 0xD368D8FE, 0x9D50FF52, 0xD0C6A1BD, 0x4E60DC3F, 0xBFBD0D85, 0x4BFDBB33, 0xC9897FD9,
+0x568DEC20, 0x9805B01A, 0xE2D7A172, 0xD8BA20EC, 0x1DF7B3E5, 0xB0CD589E, 0x1DAE6CD7, 0x0324A92B,
+0x4A81E1FD, 0x60DAD13C, 0x56A50332, 0x8D9FC09A, 0xD76F4288, 0x5E6E9499, 0xCA4CF23E, 0x00F7AD75,
+0x5BD031D2, 0x6CAAE500, 0xC7A21D87, 0x17F7C353, 0x9EA7888F, 0xB5CE3313, 0x0C0DE61C, 0xB23AEEEA,
+0x20998C46, 0x2FBDA4B1, 0x23CA5691, 0x1F13EB96, 0x751ECF0A, 0x55A8550C, 0x93A49B43, 0x7989F9DD,
+0x371EC38A, 0xE1AAA740, 0x11BABC71, 0x78250833, 0xB8030D5E, 0x3395797B, 0x7C27381E, 0x49C6447E,
+0x25B2534C, 0x00A16C41, 0x5E10E0F4, 0x44FCD703, 0xD3D6C442, 0x3F096DC0, 0x5DF60699, 0x46106610,
+0x4F0F824E, 0x4611E979, 0x232D2989, 0x4AC6ED08, 0xC51D1651, 0x5DC22C06, 0xB9D81A42, 0xFEF2F616,
+0x0DFF9BD4, 0x8DCB7D1A, 0x50E90DE9, 0x9ECB87B5, 0x5BCE2612, 0x0C073A3D, 0xB502FD05, 0x9C84C8C1,
+0x5AA17CA6, 0x7F30E018, 0x96A1937F, 0xA9F8771C, 0xA231319F, 0x251BF459, 0x20B6CB79, 0xAFD07873,
+0x88E8A031, 0xAB4DDB0A, 0xF67E3518, 0x1192C530, 0x7A8364E6, 0xFC5D592D, 0xDADC741B, 0x840D5331,
+0x9D8DBDE6, 0xB3F57DFF, 0x83BFE4B5, 0x5C5419F8, 0x83871A14, 0xF01F0797, 0x7E5A6494, 0xA3784E37,
+0x7240F623, 0xC81313C0, 0xCCC5E0E7, 0x779E7DD3, 0xA8E1BC88, 0x5097287A, 0xDD50FE67, 0x7F91DAA3,
+0x2CC9079B, 0x65F0425E, 0xFC340C9A, 0x6DC689C0, 0x93CAE936, 0xBDC09073, 0xCD303CB7, 0x0051BCD7,
+0x2DB9E7CB, 0x361D5241, 0x59648F97, 0xC935B37F, 0xB3891339, 0xE634B4AE, 0xBC573445, 0x476EE903,
+0x3D5BB6CC, 0x3B061932, 0x5A96EEC0, 0xE75A3D91, 0xE40EDD98, 0x1078AF5F, 0xD9AE1C1B, 0xDEB609F0,
+0x407171B2, 0x5CB6B110, 0xBAFE6C4D, 0x567A34EA, 0x7A7328E0, 0xD2764F0B, 0x066B9204, 0x1AF34C1B,
+0x2F511439, 0xA10BE0EB, 0xA75A0CF8, 0x4DE94475, 0x39599946, 0xF36547DA, 0xC4821F57, 0x93C934A5,
+0xB3326326, 0x0B78C1B5, 0x4B007207, 0x048D95C0, 0x0AFD15C0, 0x01BFBCFF, 0x7D987073, 0x9EB94840,
+0xA28253F2, 0x188AF852, 0xBBCC2145, 0x15C5B7B3, 0xB01C949B, 0x2B16211C, 0x46FF206F, 0x3985F191,
+0x6282524A, 0xC22EE16B, 0x3368A55B, 0x6A9F1737, 0x32CB1ECB, 0xFD05E494, 0x3ED21564, 0xD344738A,
+0x062E03B5, 0x15E34A85, 0x1D6D4FB3, 0x232E7283, 0xAAE4F9CC, 0x73330C20, 0xF463F2BF, 0x781D05A1,
+0x75AEC0C9, 0x48A49727, 0x46D21EE3, 0xB5FD3F06, 0x0FF94ACB, 0x88A6F962, 0xFACB0D0E, 0xF8429AC0,
+0xBFD191E3, 0x86E1686C, 0x2E306509, 0x6B671BDF, 0x5B10DCBD, 0xE2AC5A6E, 0x9719CBFF, 0xF937DF1B,
+0xB61C6314, 0x2919DD24, 0x5885EDC3, 0x501F6DD0, 0x7858CF6A, 0x9D6C42AA, 0xCA5E977D, 0x2AAA55B6,
+0xD71D9AFF, 0xC097B40C, 0x819E708E, 0x3EF0A322, 0xCCFCCCD2, 0x0B174A58, 0xCB8B8B93, 0x8456DF26,
+0xEE8944A8, 0xAAFC6945, 0x6707F424, 0xD7A3B9EA, 0x65E21389, 0x92ABDEAA, 0x2FE63F89, 0x76285A82,
+0x2A0F581C, 0xB69BDFAF, 0x29F2DB66, 0xB19E7BEB, 0xA58CC14B, 0xEF4C6A02, 0x4499695B, 0xD524EC56,
+0x7E164847, 0x2C7B8339, 0xD32AAA38, 0xC51B7013, 0x3D8A1C4A, 0x0080630A, 0x5AB2F214, 0x07C13756,
+0x16418C1F, 0x4EF1C44F, 0x3455EE9F, 0x3E28001E, 0x4626F558, 0x49DE9904, 0x55ABBE82, 0x5ABF7F5E,
+0xD21B6432, 0xB3AA3E72, 0x05A18487, 0x34B10343, 0xD5093041, 0x657D918F, 0x12BA9CF5, 0x441093E5,
+0x68563D45, 0x94802568, 0x2FCCDDEA, 0xBA61299C, 0x67A53F98, 0x63C15A31, 0x0EE6213B, 0xF02651F5,
+0x4618A523, 0xEED1BBE3, 0x16D31F24, 0xA1BBD3B2, 0xDF81DC5B, 0x2CE499FF, 0xC9C8620D, 0x8F850850,
+0x06986035, 0xA407BCF6, 0x47DC7CF6, 0x291B070D, 0x1DB9D8F4, 0xA4701735, 0x6553AEE4, 0x5EF53AEB,
+0x0C798C50, 0x84CB652F, 0x4BA3E793, 0xE996E9E6, 0x920EA577, 0x37D58AC9, 0x76DB5D16, 0xB97F417E,
+0x79303503, 0x7CD7AF33, 0x0D29B846, 0xEBCCF777, 0x262A7ACF, 0x52C96A36, 0x0AB26C10, 0x05DF64A0,
+0x532B4293, 0xB3F927CF, 0x670BD00D, 0xE9B3D19D, 0x0FA95B72, 0x210545B9, 0x708C5697, 0x2F571211,
+0x3FFF1C61, 0xFBC8DD3B, 0x30F09942, 0xDE002EBB, 0xB36A5697, 0x66650032, 0x57D840FA, 0xF110F8C8,
+0xA20F6121, 0xF2191F8B, 0x4BE27A94, 0x0DEAB598, 0x0A1AD3AE, 0x13358CC0, 0x97B19AEF, 0xEDC76C45,
+0x650DB4ED, 0xBCD2A7D9, 0x1686D704, 0xFEAEB47E, 0x1CC861FE, 0x4BA49913, 0x7008E292, 0x92185995,
+0x8009D9C3, 0x35E525D7, 0x69088BA5, 0x3C6E166C, 0xFA7CF7BD, 0x1FA80A7E, 0xB9DB55EC, 0xC9D73BDE,
+0xC55B9A8D, 0xCF827DEC, 0x0C9CE30E, 0x602E080B, 0xD875EB91, 0xDED089BE, 0x5D995009, 0x6A33E427,
+0xAE11714F, 0x68DBCB73, 0xA08DC26D, 0x27F83980, 0xC5C2E850, 0xB0DD21BD, 0xA59FDC38, 0x10FF09CE,
+0x96F3579A, 0x27080A51, 0x2B839226, 0x36853BC8, 0xC3FF7A43, 0x6C6B7A9B, 0xDD7FB747, 0xD4550B60,
+0x465AC1E2, 0x8A8C5A98, 0x4A91645A, 0xF9F7D3D9, 0xBAF9288F, 0xF417D8EB, 0x71D11258, 0xEF2E7BBA,
+0x286F7A91, 0x4EABECB6, 0x4F9B3534, 0x6752F2D8, 0x871D1597, 0xCC4A93F5, 0x73BF69E8, 0x30B5A771,
+0xFEF73725, 0x58A002D4, 0x2F979E39, 0xF99935B3, 0xFF420816, 0x2F4F58F6, 0xF193EFFC, 0xE8DF0948,
+0xA9B8BBB7, 0xE0DF48F4, 0xAF208114, 0xED8C0231, 0xE66262F0, 0x780182D0, 0x0A7E5DD3, 0x19734013,
+0xD11C933B, 0x66AF11C4, 0xA108C7B7, 0x9FF10BEF, 0x1D24C020, 0x7B1E26D5, 0xA7DC55CF, 0xDC3E21C2,
+0x3E627D51, 0xA753E34C, 0x3A00A3A3, 0x624E7240, 0x2C6F14EA, 0x0EB4FE03, 0x6D1CFE28, 0xFE1C5503,
+0x57CCB275, 0x7F23E6AB, 0x123A72E4, 0xB253781B, 0x48143130, 0x3FBBC737, 0x025766E1, 0x17968F7D,
+0xAAA4553E, 0x2C7A2CD2, 0xD6687B43, 0xC21F1092, 0x2D9D6B27, 0x58F57934, 0x60DB9028, 0xD08310D8,
+0x1BDC5D16, 0x3A3180B7, 0x80100B98, 0x0D00D60C, 0x3ACC4E03, 0xFCA15580, 0xB533A589, 0xC2D10C7D,
+0x2749BE60, 0x5754DFCF, 0xB1C26301, 0x9E764C93, 0x724FFE8E, 0xE8DB77CB, 0x66416034, 0x0412D1EC,
+0xD350B912, 0xAF283D41, 0xB5550C49, 0x6BD516A1, 0x040A06D4, 0xCA51973A, 0x3BD1FEEC, 0xC119E00D,
+0xC65F019D, 0x55077B14, 0x21A0A5E1, 0xF71090A2, 0x49872FE0, 0xB674FC23, 0xDF1ABC5E, 0xCA4F4DCE,
+0x7A7F1E66, 0x122163AE, 0x2B8F987A, 0x9D743749, 0x194A5F62, 0xCDAF1109, 0x2692BF33, 0x4AEE3B81,
+0xD4324603, 0x34F43664, 0x4D2562E7, 0xB84181DB, 0xADF06B10, 0xEC2DBA95, 0xBD52C7BF, 0xE10DE2F6,
+0xCA31B711, 0x679E1826, 0x8DD9A2A3, 0x98A9B293, 0x45BEC34E, 0xDB059B3C, 0x617D73F2, 0x1D8E059F,
+0x38758A49, 0xF12BA90F, 0x65C6672A, 0xE021934E, 0x80774E42, 0xC99226A6, 0xCDC0EA5E, 0xDC3D02F5,
+0xC362CC44, 0xAF21439D, 0xA146C99F, 0x51943606, 0xE14B7911, 0x51CAA734, 0x8DE6D487, 0x5D9D65FA,
+0xBB4102EC, 0x8817773B, 0xA0D33469, 0xBFF75A11, 0xD2FEF00A, 0xC1D359A7, 0xB1CC9871, 0x49D462FD,
+0xD72CA31C, 0xA4EA15A1, 0x2781CEA6, 0xCC725BFC, 0xB9F5185E, 0xBB80999C, 0xFE916EEE, 0xD133CB9A,
+0x0528C8FC, 0x366F263B, 0xA2DA1378, 0x7A90A763, 0x09B56942, 0xE61A5C5E, 0x53499C78, 0xE150F5C7,
+0x33AA63C6, 0xD2F940ED, 0x2E2C1C8E, 0x4E77E85E, 0x0DFD4C6E, 0x6202B08D, 0x69BCCF30, 0x0465B818,
+0x197FE1AD, 0x38EDC545, 0xF7C7A19E, 0xE4B734DE, 0x225EA6A0, 0xC9C67BB3, 0x1F9E5821, 0x4A706978,
+0x7E8CDB32, 0x142C0EE7, 0xEFB7F993, 0x15F9827B, 0x75CBEC8E, 0xBC825875, 0x236087D4, 0xCDF02768,
+0xA8527C4B, 0xF13BA034, 0x96D68C51, 0x3248E3E8, 0xECD0B680, 0x3C7DC4BE, 0x118023B5, 0x8BAC0450,
+0x667F444C, 0x5F3B0016, 0xF1B6634F, 0x7B0DD78F, 0x96820687, 0xE109DBB4, 0x77475865, 0xB39E8B10,
+0x255B2CCD, 0xBF59FB9E, 0x2DED384A, 0x7291D9FB, 0x3D717248, 0x2E60C69C, 0x7C9E3E15, 0x671218D7,
+0x8776531F, 0x481D5E34, 0xD4D0D928, 0x480BE45C, 0x1247F36F, 0xB8CD9714, 0x524ADDB0, 0x51FDE0CF,
+0x24C9565B, 0xCF8125CE, 0xA5C97073, 0x9214BB24, 0x16625AF4, 0x1EF316ED, 0xE115DFBA, 0xB93BA599,
+0xE34E7408, 0xA7A1FE33, 0x3B71CD24, 0x1323F7F0, 0xBCFCCC3D, 0x87B7CC47, 0x3A1D8FAE, 0x2D8F6E60,
+0x89254C96, 0x17086327, 0x2FD961B4, 0xA1BBBD43, 0x7D1F7918, 0x9DB8FFC3, 0xBADA2644, 0x1580102E,
+0x2828A01D, 0x2C2C1682, 0xC879A152, 0x2717C81E, 0x011E8D49, 0x29488F56, 0xB1A19454, 0x7F24D3EA,
+0xA8B88CE4, 0x608B7F19, 0xC0EE596C, 0xB4C30BBC, 0x5FB46524, 0x6E7360CA, 0xC89C531D, 0x19153C82,
+0x36E37530, 0x9116B176, 0xDEA58CA5, 0x2E82CD48, 0x4B47810E, 0xDA682139, 0x12BF6156, 0x34F3A221,
+0x5C2E0B24, 0x42F7C733, 0x76E13489, 0xC0736688, 0x80653667, 0x73A89B2A, 0xB99EED81, 0x92F99D5C,
+0x799689C3, 0xAC7259A7, 0x5983C375, 0xA67E6987, 0xDFA46272, 0x547A79C6, 0x38534637, 0x0E3F1DE8,
+0xBF0DA472, 0xA2B766EB, 0xDED9CEEC, 0x166670CA, 0x55F32EE2, 0x75DB2393, 0x4D6211D9, 0x0569DD55,
+0xF77A3D04, 0x3966BBFE, 0xC22387C2, 0x3E563CE0, 0x1C559421, 0x65CE0390, 0xF7305E78, 0x5A50C467,
+0xC3610D4C, 0x7862C249, 0x8A736080, 0xBD28ADCB, 0x60D121F3, 0xD4D4F3E2, 0x97062954, 0xDE27DF9B,
+0x7A41AD08, 0x64E1C11A, 0x81C209EC, 0x4CF8F1B8, 0x9D1AD875, 0x900CC5C6, 0x4068BF8D, 0x32C17DAA,
+0x23CC12BB, 0x56B8CBFF, 0x251DDF1A, 0xABE26E02, 0x45F94986, 0x1C096A36, 0x9E4D094C, 0xA4796FC8,
+0xF73B248A, 0x0D3473D8, 0x4A1A7385, 0x397F28B6, 0x18EA9620, 0xB77469E7, 0x314ABF16, 0x8767A547,
+0xFD1C18AD, 0xB344D0ED, 0x38EB62F6, 0x095F486D, 0x5A0676E3, 0x5BD2874A, 0x75D8F65C, 0xC83F5906,
+0x573AC3B0, 0x8C466DEE, 0xFDDF7AE7, 0x53CD2873, 0x69E637D5, 0x0961F954, 0x6D9EC157, 0xDB826DA2,
+0x17CAB377, 0x48D8F79C, 0x9B404B4E, 0xA635B15D, 0x6D5D20F9, 0x9EC99C55, 0xB71A688B, 0x46FFB1D4,
+0x887D4021, 0x6868F38A, 0xD0960104, 0xBA5DE110, 0x9D3BC80C, 0xDC6648FF, 0x41684597, 0x9AB06264,
+0x69FE33A7, 0x7ADBF2AD, 0x7AB442BE, 0xC0B3D19D, 0x995408B9, 0x284315F9, 0x77EEBC34, 0xED4AC57D,
+0x55BF83C4, 0x3C0CB803, 0xAB58828A, 0x8BD4EEBC, 0x9C645FCA, 0xBAD940AB, 0xA0BFA880, 0x8A349459,
+0x41A3A0E9, 0xFD773FE1, 0x208F7838, 0x2AE2A367, 0x1D9621F1, 0x35C0EF1E, 0x951DBCC9, 0x1F110B05,
+0xC8EC1455, 0xF8B92714, 0xAE7BA226, 0x920470CB, 0xD4622A9A, 0x52488A02, 0xA202AA3E, 0xE4B779DD,
+0x96FD64DF, 0xE8A5F68B, 0xA897D1D7, 0x5D56529D, 0x9B45E3F7, 0x9D9FC1B0, 0x64CDD7EF, 0xF97E1E53,
+0x45BD8526, 0xD76A2C7F, 0x42C8B563, 0x36FC1738, 0xCCA6F069, 0x178328C9, 0x2DEE84C8, 0x8C31A61D,
+0x30E22B78, 0x754B1994, 0x6EACAC99, 0x8ED1E5AD, 0xF69F3638, 0x30EAEBFB, 0xB72D6870, 0x759B327C,
+0x2027DDD8, 0x60DD4FF7, 0x0F6D4121, 0x767E3CF8, 0xE499BF29, 0xB4AAE658, 0x24E933E1, 0x5DF4193A,
+0xC18A9695, 0x29AFC6BC, 0x7AEE504E, 0x5B48FD02, 0xA0AEEF02, 0x0287CDE5, 0x3EE2ABD8, 0x0BB2C7F4,
+0x4FD9F8CB, 0xC10F461D, 0x07293295, 0x59E51637, 0xDFCD90BE, 0xF37C3B5E, 0x68E826E3, 0x695A0B3B,
+0x4AA23506, 0x2BE1DFF0, 0x18BC06D1, 0x6E9D5D86, 0x1CFF777E, 0x155BFE4C, 0x9DC5E692, 0xBBF254D1,
+0x9DD04EFB, 0x4029483B, 0xC4C838F6, 0x8E87173D, 0x9321D9E0, 0xF486D4C8, 0xF1F747AD, 0x5475C81E,
+0x4D562285, 0x09926D06, 0xC065D843, 0xEF89EEBB, 0x5C61D7FE, 0xDD4119CC, 0xAB381314, 0x6BAE5D6D,
+0x8B4F5FFE, 0x372BFF05, 0xE8B02DEC, 0x63EA8FE0, 0xB59529F2, 0xC64B064C, 0x25157BF0, 0xCF0FB7AA,
+0x4253F449, 0xB3C13795, 0xD06CCDCD, 0xAD74E86E, 0xFA09AB96, 0xD1BE6865, 0x0E2CFEFD, 0xA97026E3,
+0x6338DB7B, 0x068B3582, 0x684413C4, 0x81E71A1E, 0x8C433D7D, 0x51E62F60, 0x0F571A43, 0xC2C6CBFF,
+0x4AEDBFB1, 0xEBEFAFBF, 0x8A627A28, 0x2E19F04D, 0x74795DC2, 0x9E6A80F0, 0xCE86E2CA, 0x3D8D53C2,
+0xF0661038, 0xB6BA3A36, 0xED56CC3C, 0x9E971012, 0x8B133FAD, 0x6D9B1645, 0x4ACDFBEE, 0x38E93B7A,
+0xD43177B1, 0xF9907C52, 0xC6F329B3, 0xE8E8D225, 0x74ABC110, 0xACDFA668, 0x719A3564, 0xC0EA6525,
+0x43D9E643, 0x97CA21BD, 0x330A345A, 0xE0C696EA, 0xA3DBE2EE, 0x10093E59, 0xA233F5A9, 0xDE9F6EC2,
+0x418EB6D5, 0xC52BCB15, 0x3233BCA8, 0xFD5DCB7F, 0x80CBAEBC, 0xD1A0901C, 0x9CEEC438, 0xA4062CA6,
+0x3E6041FE, 0xB370895A, 0x26D5AF22, 0x625DB67D, 0x5800E391, 0x39EF89EF, 0x76DD0DEF, 0x2DDA5F8F,
+0xABBB85DE, 0xBFEAEE5A, 0x8F2F69D6, 0xC0D92769, 0x31113B29, 0xF8707206, 0x0F3FC104, 0xBE852591,
+0xE618872A, 0xA4E2A4B6, 0xD2F3CC5E, 0x65AB78A3, 0x1CF4BD22, 0xF92E14C3, 0x83DFEEC7, 0x232F6FD1,
+0x32E07066, 0x2B0941B6, 0x4B622DEC, 0x630D1918, 0xDC9A3AC8, 0xCB8B0013, 0x631DED5D, 0xEEB6E1B5,
+0x46EA7D26, 0xF9360FA3, 0xF655B82B, 0xA91DD6C0, 0xD30FB912, 0xD6D8A4AC, 0xEE1DFDC0, 0x053E2887,
+0xF67D35F6, 0x9A9F99B5, 0xDD5E776B, 0x60CCADD5, 0x6F49276C, 0xA461C2E3, 0xE697C153, 0xAFC6A12A,
+0x23D8C4FC, 0xBF5351C6, 0x243BC5D1, 0xA5525343, 0x30DA0C91, 0x8A55247B, 0x11FA8034, 0x8E1F4B69,
+0x2276EABC, 0xCD6B6077, 0xAC7FDDA7, 0x56ABED3B, 0x00FBAA17, 0x6BAD2962, 0x354A167E, 0x6E9F6902,
+0xA4867989, 0x40C91F09, 0xC9E58719, 0x73746142, 0x82635D2D, 0x80ACB9B5, 0x574BF872, 0xA4101FFE,
+0x0BA67F0E, 0x9B3BB052, 0x1180C5AE, 0x7FFAA3D4, 0x5F9676C6, 0xB9EE92B7, 0x68C51E8B, 0xF657B774,
+0x574E4EB9, 0x1F99D7B2, 0x8BAF1C79, 0x6ECC43D1, 0x9435B8E3, 0xF18C127A, 0x7E4AB217, 0xCABB8441,
+0x889A91F9, 0x52258576, 0x7FA03AC2, 0x824DA5EC, 0x68F1F3AA, 0xC148282C, 0x393B8C45, 0xE5EC91FD,
+0x70DB5574, 0xF2324EAA, 0x52CC56EE, 0x30162BC8, 0xF134D11F, 0x1D9ED680, 0x1A7CEB9B, 0x86177DB6,
+0xFF78CD18, 0x4913E4A4, 0xA71E8CEC, 0x04A14EB2, 0xF6E72586, 0x171666F1, 0xB25E4AA8, 0x2392E3BD,
+0x4FCC315A, 0x1FA17F66, 0x3C795A09, 0x611E0327, 0x0751525A, 0x41E0E384, 0xA201FC01, 0x4CAB4578,
+0xCD044F4C, 0x085E6AFD, 0x8D65D679, 0x41F13C03, 0x3E21B546, 0xE2487195, 0x5E1ABF60, 0x632E65B5,
+0x806609DD, 0x27384EB1, 0xC8B72125, 0x6BB2E0CB, 0x3C46537A, 0xC1BEE297, 0x14B2A729, 0xD4EA8FEB,
+0xD2E82828, 0x1DE9C02D, 0x5370C587, 0x823EC8F0, 0xFD87283F, 0x1D1183B0, 0x167D927E, 0x7011464A,
+0x844FBD4D, 0xCB7861B7, 0x3CB8FE31, 0x1C076F08, 0xE09EC2A4, 0x0E27F5DA, 0x3BB40509, 0x24A3423A,
+0xB53C1443, 0xA0EFEC91, 0x7CB01BFC, 0x54460FE8, 0xFD938764, 0x635E7AC2, 0x7A30FC74, 0x4DA86FE2,
+0xDD318CAA, 0xC19D1D2F, 0xF953754D, 0x478D1D13, 0x73351989, 0x481E607B, 0x1EDD3DCA, 0x118D6D16,
+0x31FE1258, 0x283A9625, 0x0F98FF4F, 0xABDB1084, 0x33AC95F5, 0xC678CA10, 0x0B726BA5, 0x9E9F61CF,
+0xB2B298C3, 0x5D432B01, 0x7595FB98, 0x3663B784, 0x214890C0, 0x057F0A64, 0x48ACB622, 0x8C3F7771,
+0x3C1E1A00, 0x0BB3D9C4, 0x57970BFB, 0xDF36504E, 0x85278141, 0x042C292F, 0x0044B243, 0xD4D7BE97,
+0x3D33BAD1, 0x44888304, 0xA69F000C, 0x25C510EB, 0xAFDFF4DE, 0x58495F7D, 0x111C06E2, 0xE1AB72D5,
+0x254D71BD, 0xE0983CF2, 0xA7412CBE, 0x58C31067, 0xA1B717A1, 0xB3E91136, 0x759C72BD, 0x6598A89F,
+0xDB3C8B51, 0x3F5C0503, 0x28EEA3E3, 0x6650FCE2, 0xAC47CAA2, 0x5B3739B0, 0x5C622D7D, 0x25E1BB69,
+0x1F0312F0, 0x27DAA98A, 0xE6A3501C, 0xF9B0A33E, 0x63A310F1, 0x19C36E88, 0xEF163B9C, 0xB968AE52,
+0x9AE9F0B4, 0x36A1C735, 0x8F03E568, 0xF4C5F406, 0x1A7A0AAD, 0x55B56358, 0x5C40E64B, 0x622E792C,
+0xF94812D1, 0x49FD872F, 0x7CD064AA, 0x966A55E1, 0x1A479069, 0xFD56E300, 0x4ACCB45A, 0x392E311E,
+0x8C3B8283, 0x3D73CF54, 0x67CC57B9, 0xC7FBFDE0, 0x8B4B6AC7, 0xC35278EE, 0x25A1580D, 0xB67C7A99,
+0x096A0802, 0x6D8EB490, 0xBAFE5A28, 0xB81532B5, 0x75929566, 0x5A41F01A, 0x14F4C4CF, 0x5395C7C1,
+0xE6C8B6E5, 0xB750B523, 0xFD689C72, 0x54BF945C, 0x7654F0F6, 0xC7F24C08, 0xB5D83B89, 0x4A1B71D9,
+0x9D5D1538, 0x0D101261, 0x182653C6, 0x84971A87, 0x7031D7CA, 0x5C7E69A9, 0x9667040B, 0x47E6D2A9,
+0x81EC4AA6, 0x74FCFBF1, 0xA9F78EC6, 0x84479961, 0x9A0AA9AE, 0x75BD286E, 0x51D7D577, 0x1E26637C,
+0xC25064CD, 0xFA6CD352, 0x9980D89C, 0xF8FCA912, 0x036242FB, 0x2135987A, 0x6662729B, 0x411E9D36,
+0x06581272, 0x2B2D9A8A, 0x524A8D04, 0x95A2BC82, 0xF35CB025, 0x30530D9B, 0x9CFC82CE, 0xE1FEE5D1,
+0x7D0512C1, 0x08267E96, 0xC3D1A61B, 0xF75B88EF, 0xC7B5AA70, 0x78BB7813, 0x32E1E5AC, 0x455E338A,
+0x7D93D883, 0x74A94539, 0xB838F880, 0x42E8142B, 0x054E35B8, 0x6942396E, 0x13A7D3DA, 0x9D01F47A,
+0x41CF285A, 0x5D2270B5, 0xC6B71593, 0x0EBCBABF, 0xCE2A07CC, 0x4E959A0A, 0x530F197C, 0xF911320E,
+0x34C07499, 0xA596D338, 0x24408AEB, 0x702CF3F7, 0x4391DC1A, 0xE9974F7D, 0xD8B11544, 0x6C533A1F,
+0xE1824C1C, 0x206D96DD, 0x11759DA8, 0xD652E221, 0x4CA0F789, 0x1408F93B, 0x5DEAE4AB, 0xA2B71E5F,
+0x944988FC, 0xA4AD02E3, 0x198C6C9D, 0x9F9BEA84, 0xE3078EAA, 0xD887E5E3, 0xC757D472, 0x71D553CC,
+0x0C1F44F0, 0xA009FF3E, 0x89198A57, 0x45471CE7, 0x4768EB0C, 0xDD9BCF4B, 0xAE95EAAC, 0x2FCEF4B6,
+0xA8C557EE, 0xB169E74B, 0x309567B9, 0x5DC7B961, 0x71B5DEC1, 0xCF65EA4F, 0x2C5EF60C, 0x346774F6,
+0x1FC49CD5, 0x6D6ABAD5, 0x40DACB2B, 0xE10000BE, 0xF33E4894, 0x9561ED34, 0x57CC7713, 0xD4093AE9,
+0x6F1AFB0B, 0x8BA5F8FC, 0x08B829CB, 0xCC7ACF8B, 0x048622EB, 0x5557F129, 0xF3905B97, 0x581044FB,
+0x086D7B2F, 0x06EE5467, 0x650ED796, 0x01D86E9E, 0x5319A477, 0x5D42BF2D, 0x4F06AD2A, 0x631065CD,
+0xD60FDE11, 0x4B9E805F, 0xA24E9E04, 0xD6287B6B, 0x9636A9CB, 0x422D6B4B, 0xE6446628, 0x0C6C5574,
+0x1FE4DC6B, 0x3A9C29B8, 0x0DBBAA31, 0x5FD9AC74, 0x27E84A66, 0x5E8FED41, 0x41BC4359, 0x7D1D86A8,
+0x59125E82, 0xECC58C43, 0xCD3BD39F, 0x4038C655, 0x8DED151B, 0x0E484E05, 0xEA0F765B, 0x80A4C0E2,
+0x96634B10, 0x69907ED8, 0x794D261F, 0xA50C7BE2, 0x928DC2A4, 0xAEBBC928, 0xE6858E90, 0x4D3FC0C4,
+0x0B80E296, 0xB2CF2C05, 0x7D249C4B, 0x957BB446, 0x03E32052, 0x0AB338E1, 0x0617CC25, 0xDD70BA65,
+0x10AA5049, 0x99CB9D88, 0xFCAA01EC, 0xE67B0A0B, 0x9B487133, 0xE35ABDD9, 0x4078E0C9, 0x569A5AD5,
+0xAA1D909E, 0x67E430F1, 0xD7822B2B, 0x192067A4, 0xB8535C4A, 0x9489A1F4, 0x2D91773D, 0x7DA34913,
+0x57D15E78, 0x470AD0BC, 0x68363B44, 0x07408201, 0x51E72218, 0x1E45FD0F, 0x05EE0FC9, 0x730AF8B7,
+0x28702D56, 0xB0EACC66, 0x18BCA40B, 0x5F4FE564, 0x3DC7087E, 0x41171396, 0x456BDCFF, 0xB128E307,
+0x2B9AA44F, 0xEAD77A79, 0x2BEC60F7, 0x00314DEB, 0x387EC472, 0x56D6EB57, 0x3AE8E1FB, 0x5004061B,
+0xE7FC7406, 0x2D5BA982, 0x2AC02243, 0x2B02A181, 0xA0DD92B8, 0xE754A7C7, 0xE45D18BF, 0x5877BF9E,
+0x4CAAE7B8, 0x0DA6DFFA, 0x6FF2B2D7, 0x0F48FB8C, 0x559D7875, 0xB3CA6168, 0xCB297908, 0x48042926,
+0x254EF25B, 0xFF6ED7C8, 0xE67FFFE3, 0x103E6BD9, 0x7F24ED97, 0x8300AAF6, 0xC274E094, 0xC9DD547C,
+0x0594E4CA, 0xA80DC2EE, 0x8E5868A9, 0x23882A8A, 0x3B50E01C, 0xCF8C7877, 0x817991B5, 0x2E28FEED,
+0x2D045BF1, 0x1FB21F1E, 0x12EEFD8E, 0x7B89F03D, 0xC38BF666, 0x852FAA20, 0xBFA2A9E4, 0xF9BA10BF,
+0xAF53BCD8, 0x4505863A, 0xC923AAF3, 0xDD13B053, 0x9EAC7746, 0x5B3821E5, 0x7296A74F, 0xFD059914,
+0x48843B6A, 0x687E02B7, 0xD9ECBB22, 0x0F3D1E4E, 0xF69D7F2C, 0x2F1836A0, 0xA26CE939, 0xB45AE41F,
+0xC96CEC04, 0x92F80B30, 0xB4556353, 0x4113E6FF, 0xA336B020, 0x82546CED, 0xFCDB45A7, 0xE8888003,
+0x5D3F2962, 0x526F8FAA, 0xD5B6E20D, 0x9BA51B6E, 0x08CBBB80, 0x79D4EB26, 0x95C9FA36, 0xA8265DB8,
+0x3628A62E, 0xA2B4FAEF, 0xBAD09840, 0x1D8A2A99, 0x3448DA10, 0x0EE61360, 0x09DA0E79, 0x8CCE66EC,
+0xAD074065, 0x5C69A3C6, 0x8350984E, 0xE53CC1A1, 0x024D042C, 0x361CA96D, 0x80009E53, 0x492A6448,
+0x2B3961F0, 0xD563E0E7, 0xAF02BAA4, 0xCD3A6C89, 0xD3968543, 0x9D07F2D9, 0xAD723E2F, 0x2943C43F,
+0x0E215CA9, 0xED856F6D, 0x67E1D15B, 0x58595A18, 0xFD08EADB, 0x2EAB36A3, 0x57FAC0F8, 0x4655F15F,
+0x965DC6B0, 0xC59611E8, 0x6D09BA86, 0x0ED56100, 0x45161D60, 0x8C63BB9C, 0x8393196A, 0x3BF21CFF,
+0x73421248, 0xE48DDC80, 0x35C5AE82, 0xC20A13C0, 0xC46AFDAE, 0x815C2283, 0x85254CB0, 0x85A80CE4,
+0xBFC3713B, 0xD7E4070B, 0x73DA77D8, 0x19273C33, 0x5B43202A, 0xF3CDE61B, 0x053B47EC, 0x2002A57E,
+0x4D5B5E9C, 0xC756391D, 0xB6BA7DAB, 0x17204AFD, 0xBFCDB2AD, 0xA9685DA5, 0x6C41F62C, 0x304A4467,
+0x48057F02, 0xF5D6589B, 0x0425DDDA, 0x7EB546E8, 0xB24D0CEE, 0x7B531ED9, 0x7A9F9885, 0x516A6C83,
+0x442AA4B7, 0xC68D5CEF, 0xBFED648D, 0x3C209847, 0x85A116AD, 0x2083C713, 0xA61EB8FC, 0xB69B8D1C,
+0x66DB2045, 0x5BA60595, 0xA69F3C03, 0xD1069578, 0xC790F465, 0x3D3DEE02, 0x1395BD7C, 0x988B99EA,
+0xBFBA5909, 0xFAF2497C, 0xC1EC823A, 0x0D230A95, 0x886CD9C4, 0x78ED860A, 0xD8F0FF60, 0x5C41F972,
+0x3EE445B1, 0xADC6FE0E, 0xBC5EBCB9, 0xA1D13CD5, 0x0D98B5B1, 0xE7A6977F, 0xC07EC268, 0x21BB3BCE,
+0xD1B1DCDD, 0x7E2F1545, 0xC002D03F, 0xB93CFC0A, 0x2547B860, 0x14AE776B, 0x23D73391, 0x7C0FC542,
+0x78827392, 0xE658CB58, 0x3FCF3192, 0x9FBF228F, 0x86761A2A, 0x73EED9F4, 0xF5FB3945, 0xB58720F1,
+0xFF23E213, 0x6BF9DC53, 0x56ACB878, 0x5B788F7F, 0x248EB858, 0x6BECA594, 0x0DF5FF9D, 0xD77842A1,
+0xF37CC9BC, 0x12B6E867, 0x4257C96F, 0xD4ABEB2F, 0xDEFC0244, 0x2D2604A6, 0x223EB81F, 0xF3ADA812,
+0xDE9140CD, 0xD66884F7, 0x4D178FF6, 0x5C46A142, 0x000021DF, 0x9A410100, 0xBF871822, 0x22BDC2E5,
+0xC8BF61DB, 0x9B63BCB3, 0xE9AECC1E, 0x7A6AF41A, 0x4E423EEF, 0x04436C9D, 0x59EBE592, 0x0B54E7CF,
+0xCB806464, 0x4BC9B9C6, 0xE60B8C0F, 0xCC009E6B, 0xAA3CE0CF, 0x8B538CD3, 0x50D04AEE, 0xB489D9BB,
+0x06730B35, 0x16DE7D39, 0x0777DB74, 0xF16D128B, 0xAD9B6300, 0x7EA2C45F, 0xC1A425C3, 0x00C35BBE,
+0x4177C3D7, 0x7739E2B5, 0x58D5E6C7, 0x7552BB9C, 0x5A6ACD2B, 0xCFA9AFE6, 0x45E22143, 0xDD2E7DF1,
+0xAF1D3AED, 0x62685677, 0xEE69361C, 0xEC46EC88, 0xCFB30AC7, 0x2B94D9CA, 0xDC625DB7, 0x06F685B2,
+0x6C67AF01, 0x788F2B62, 0x2AC89168, 0x11741571, 0x063FDA0D, 0xEF042E56, 0x3D1BFEA0, 0xA82BB546,
+0x484E7EFE, 0x00DD4A64, 0x0B4E7055, 0xE2329A46, 0x9C3BA313, 0xA195E03C, 0xC3AFA61F, 0xDEB19AE4,
+0xBA5BA0DF, 0xE52B2410, 0xEDCDB638, 0x3D8E7559, 0x30E30030, 0xEE3898B9, 0xA439C678, 0x89FF8DCB,
+0x84F0D10F, 0x693D45BA, 0x32BC7FF2, 0x64257780, 0x55C12510, 0x8780F311, 0xF5E81B04, 0x6D895866,
+0xF2119D69, 0xAC6C3B8A, 0xAD47C3FC, 0x6EF3B961, 0xD9685CF4, 0x51CB6BC8, 0xAAD9228A, 0x8C520009,
+0x5B2B23AD, 0xEC64EAD8, 0x884A82C6, 0x12278A0A, 0xA20F9BF0, 0xAD7A243F, 0x51B61CDB, 0x35A91CE8,
+0x98A1414E, 0x024E8639, 0x21642565, 0xF69DB87B, 0x1948B487, 0x935ECBCC, 0x8D493E40, 0x19A60F4D,
+0xB32943AB, 0xFD65633D, 0xA8D1730E, 0xB6377140, 0x94531588, 0x0B7C13DE, 0xC37B3EA0, 0x231F058B,
+0xB4A36C61, 0xF6931612, 0x0BF4B19C, 0xE1071F53, 0x2A473F09, 0xEBF6304F, 0x6C1EC46E, 0xFC652B97,
+0x299D1A50, 0x2E971CBD, 0xF6AF0DD8, 0xD6CBEB41, 0x5914BFD6, 0x665026D0, 0xB2507E66, 0xD62DC604,
+0x4DBB57B4, 0xD1F33AFA, 0x139FAB06, 0x062B2602, 0x8E79E2C7, 0xB527DCF2, 0x4677BDD2, 0xEA72283A,
+0x71876F52, 0x63C571FD, 0x34BA86BD, 0xB11DBCE3, 0x6F080884, 0xCC8CF6C8, 0x513DA3CA, 0xBBE85FC3,
+0xB5DFB609, 0xD7F8B375, 0xF97827D9, 0xD300EA11, 0x0747AF25, 0x6F210329, 0x680D17B6, 0xA3A541F5,
+0x318C17DD, 0x01439CCB, 0xF4C5943C, 0x1D0CE4A4, 0x21F42A81, 0x9137451A, 0x3945DADC, 0x2FB74D90,
+0xA7658A0C, 0xE1119E00, 0x8D736351, 0x5A471A9A, 0xAAD0CA97, 0x476CC8BC, 0xD4DAB43F, 0xCC6BA69E,
+0x375A353A, 0x60475F97, 0xD4DD4497, 0xBF3F7685, 0xFAC0E1E9, 0x47FB8936, 0xD25F68DE, 0x1EA1FF77,
+0x13CD6CB0, 0xC2C5FBBD, 0x744A5E09, 0xA14E62B5, 0x4EF3C9A1, 0x95435CC1, 0xC66A4781, 0x1750ECDD,
+0xAFF8A86F, 0x5F523F75, 0x5019D156, 0xDA00EB94, 0x6473F144, 0x46029D9D, 0x2E5FE92C, 0xE5D7D63B,
+0xC8ADA157, 0xD2166B14, 0xF0562492, 0x6E2B1DF3, 0xBB3C3EBA, 0xB887330F, 0xA5D7BEED, 0xB40057E8,
+0xE59321F2, 0x23DD3D8F, 0xA69DECDA, 0x73B28654, 0x9D7DB3BE, 0x5789E070, 0xB9061D6A, 0xFEBCC788,
+0xCD79F3A6, 0x62F6D2D0, 0x394A5387, 0xCADE363D, 0x3E36EA71, 0x7A168CA3, 0xB3EA88E6, 0xDD6B8242,
+0x37DBCFBC, 0xC5DF9CC0, 0xC7928D91, 0x91B0C9E6, 0x2CC0D58D, 0x7446ABBD, 0xC09C0D96, 0xA75F414B,
+0xB940C012, 0x240A7A65, 0x5DC07E1E, 0x6BC97294, 0x93FC9664, 0x6C360034, 0x65810F4B, 0xF3C92CA3,
+0xCABA9719, 0x46225B01, 0x3515884B, 0xB5CF25EF, 0xC9C63D35, 0x7ED1DA00, 0xD58D7E0C, 0x03F0C44F,
+0x9815A861, 0x4925CB41, 0xB33FF3F6, 0x1426295B, 0xAB7075AE, 0xDAD10AB8, 0xC01C0860, 0xCDB705A3,
+0x4B640632, 0xCDFB625E, 0x17B72930, 0xD98274FB, 0x5374B3B1, 0x91565472, 0x2426B98D, 0xCBB940B4,
+0xD26BCC86, 0x501043BA, 0x4C0ECEC8, 0xD1EDE1A8, 0x18609E94, 0x00A0C647, 0x01010000, 0x1044419E,
+0xC14EFA7F, 0x95705B29, 0x109A4D30, 0x62D42ECB, 0x8767062F, 0x03000080, 0x00990E00, 0x41010000,
+0x8518449A, 0xE31AFCBF, 0x84EEE28B, 0xABC9D215, 0x74EC89F7, 0x303DF9B1, 0x2D9D3BFC, 0xBDC74344,
+0x0D780D87, 0x54C282DD, 0x1813B22F, 0xB2A22732, 0x38C58134, 0x615550CA, 0xE44BFE82, 0x9208DDFA,
+0xAB53A396, 0x052F8EDB, 0x2C9AE363, 0xE0179F8F, 0x6E777F26, 0x7BD6CEA8, 0x03BFC907, 0x1649D2B9,
+0x186CD89D, 0xB52BFD4E, 0x9BCCAB20, 0xF0258C37, 0x50146361, 0xAE532689, 0x4B6EC059, 0xAEB2B5DA,
+0xE7145745, 0x03192A9E, 0x3AECF711, 0x76D9D25D, 0x5E5F4151, 0x87FFD530, 0xB2D4E3F0, 0xDE16270B,
+0x35F05FCB, 0x021B510E, 0xE4652418, 0x1FD10481, 0x2A05AE25, 0x9F40F089, 0x3E215ABC, 0xAED74836,
+0x116652F6, 0x66ED82A9, 0x1CFECB40, 0x90291875, 0x210BD857, 0xED646CDA, 0x98CB679F, 0xB5D4983D,
+0x8A83ABC8, 0x96AED175, 0xDE78B28E, 0x47686B9B, 0xC9E3C9A0, 0x145CB642, 0x8D4BCC4D, 0x3EED8084,
+0x404988EE, 0x8353BBDA, 0x1513F140, 0xE556BE9C, 0x904D4505, 0xCAB11CA6, 0x0A0E109F, 0x3FBA6E57,
+0xCE12971F, 0x2787CF5F, 0x2ECA8CA7, 0xE57D203C, 0xED3F66D9, 0x32EEAB91, 0x8709A68D, 0x967CD5A7,
+0x5E4047A5, 0x41412EBD, 0x507766D7, 0x2EABA1E1, 0x67E3E1C5, 0x138DAAB9, 0x28526E11, 0xF04E0844,
+0xD321F53B, 0x9860B173, 0x316895FF, 0x79BC224C, 0x87365870, 0x5DEE1A11, 0x01D4C00A, 0x7FC9B9DB,
+0xE002A84B, 0x3516D508, 0x5B02C1F6, 0xCAD57092, 0x6A3FD87A, 0x865B56A6, 0xCDEB92A2, 0x458DDC27,
+0xD67A195C, 0x1A1DA952, 0xBB7CF752, 0x5489AFB9, 0x59DF5975, 0x7A658C33, 0xB29FB430, 0xEA978490,
+0xC17B8AD4, 0x5F476D0B, 0x65BA36D2, 0x3D7FA101, 0x7E5EB2A8, 0x893D2E22, 0xE40E5542, 0x270F4AA1,
+0x2CA0D27E, 0xEAD15A0C, 0xD3DB2F23, 0xD3AB36B5, 0x3CA533BD, 0x88780DAD, 0x943A5221, 0xEDA63C85,
+0x98270DB9, 0x6CE8752F, 0x50AF6CA9, 0xC26B6E26, 0xA67FF9EF, 0x8201322C, 0x0BD067D6, 0x81B28903,
+0xE7E61617, 0x958CE50D, 0xA3D8F020, 0x2E89C177, 0x0BEAE2AC, 0x4217E41E, 0x3B7B70E0, 0x48ADFA1E,
+0xF09E6D4C, 0x1E60E9C7, 0x06DC2AC3, 0x82119B85, 0x2270CFEB, 0x0AE74685, 0xD44BDF36, 0x23011B1A,
+0x2CEECAB0, 0x3E428B28, 0x52224679, 0x6CF4C710, 0x681A1FE3, 0x1FB5B972, 0x742C340B, 0x1E80A02E,
+0xBDB7EB0D, 0x4B40F3CF, 0x85DFEC98, 0xE6D33DC3, 0xDD0AAF34, 0x455E5C44, 0xC3C1B7A2, 0x52E4B073,
+0x9CB7FB37, 0x55865653, 0x2700DDE9, 0xBC5EB12C, 0xB6BFD2EC, 0x39ACC38B, 0x55330DD8, 0xF8341266,
+0xD266CCB3, 0x54E9751E, 0x15483CF2, 0x08FF092F, 0x0846E27C, 0x06F4765C, 0xE53FCBD4, 0xAB20BDF8,
+0x61CF9542, 0x2AC54FFC, 0x5696D1AE, 0x5C6C6441, 0x20785EF2, 0x615E348C, 0x00601DF1, 0xCB61FA5B,
+0x6658C4A5, 0xE8C5E5D4, 0xA257ABB9, 0xF29BAF92, 0xDEDEB734, 0x3DE89D6C, 0x3A4572E8, 0x685646F7,
+0x6F8F7CBA, 0x096B0C44, 0xC4ACB49C, 0xF0C1BE18, 0x37F9E569, 0x5A89F67D, 0xD8AAB97C, 0xDC8D1FDB,
+0x262057AE, 0xC958C8C3, 0xFC179C48, 0x06851E78, 0x692BDEE6, 0x50B462B8, 0x41EDDA90, 0xE509D84B,
+0x98E8AF98, 0xDE17B447, 0xD2BFC037, 0xF9B16308, 0x4B5DED04, 0x615EC537, 0xDECBC21B, 0x595815B7,
+0xA02579E4, 0x2DB2FF23, 0x21E14F93, 0x3FF6FBAB, 0xE4ABA66D, 0x62AC05E8, 0x44C3462C, 0xEECBDE93,
+0x9666C897, 0x01B79DB0, 0xA07EFAA0, 0xB3865825, 0xE12AD600, 0xC7FB777D, 0xFA3EC963, 0xDF3E9897,
+0x43DFAD86, 0xA8E4523D, 0x8E3DBC60, 0x2A60E585, 0x59D37BED, 0x03698984, 0x596D1405, 0x85E5B79C,
+0x2596B76F, 0xE5FE4D3A, 0x288D096C, 0xB4A9E46A, 0xEAD95DF3, 0x1A8F5E69, 0xD99E0887, 0xB08821E6,
+0xA80CF0EA, 0x9118CBB1, 0x76CB7368, 0x40607955, 0x3B8E90A7, 0xC18E2A58, 0xEC84EC29, 0xB41E6822,
+0x73E6B3A4, 0xDDACDB58, 0x69A59275, 0x94B3F704, 0xEC246E4B, 0xDCFFB2C2, 0x911649E7, 0x74337959,
+0x4A08FA54, 0x8A7DD8FA, 0x531C6CD6, 0x573AB7BE, 0xF60D78FE, 0xDE227A2B, 0x947CDFB4, 0xACAEB7C5,
+0xDFED8EA3, 0xF988CBF4, 0x200BD5C3, 0x06A33DE7, 0x401882F8, 0x82BBDDA3, 0x596A5C64, 0x92260CF4,
+0x75054F92, 0x5ABCB2B6, 0x645628DD, 0x6C53EA68, 0xB05ECDDE, 0xEB373509, 0x96174DB6, 0x13E416BE,
+0xF8DCCEF3, 0xDEB1E964, 0xE03C3796, 0x2C540632, 0x93FBBB1E, 0x67B466EC, 0x358975E8, 0x722CC191,
+0x5CD302EF, 0x1219A9E3, 0x3A45A932, 0x19A4F25F, 0x9C1132CC, 0xBF0FE298, 0x8ED76DFB, 0x5C7AD97D,
+0x9CB4D32B, 0x776567B5, 0x1DD104FF, 0xDB75EEFE, 0x510B62A2, 0xA54F26FD, 0x67AC566B, 0x1DA44B79,
+0x52C36F2B, 0xE7194193, 0xA47E769F, 0xEDD4F100, 0x8F0B8AAA, 0x189815FA, 0x0ACBE67E, 0xFCC0EA11,
+0x081CF838, 0x9800E8AF, 0x59103D7A, 0x99EA0C85, 0xC1BA9F21, 0x562C70FB, 0x7E9D92B7, 0x77390889,
+0x261527CA, 0x67F2BA70, 0xA441B943, 0x75DB533C, 0x9BE82265, 0x5AD770D5, 0x9240520B, 0xBFEEDE54,
+0xE74A7BD9, 0x4B2B1208, 0x4F77CB48, 0xF5D21EAE, 0xE16B97FC, 0x15198440, 0x7F82066C, 0x0FE64674,
+0xC204D0FA, 0xC0B3D8B7, 0xE1D18AA6, 0x80A6408D, 0x4E6C1623, 0xE533C6D1, 0xBA4E86CC, 0x7894A19C,
+0xBD301D98, 0xB6D078FC, 0x70C4E8EF, 0xF063A7EC, 0x8DE56ABF, 0x01591772, 0xD8D8193F, 0x53BE0B81,
+0xF5F701C4, 0x095F786C, 0x4729FC1F, 0x5A09DEF8, 0x172BD913, 0x11EB56DF, 0x20F276DC, 0xBB0FA0D0,
+0xE24A6F8A, 0xBFF6A72C, 0x40278783, 0xDE1EE2BE, 0x4CEAF6CD, 0xDBE03C5E, 0x3F262379, 0x38435CFA,
+0x4C21DA17, 0xF84A9039, 0x55285964, 0x405DCBC6, 0x95D777D7, 0x0EB00AE9, 0xE977E7AA, 0x11F2B525,
+0x9812CBA3, 0x2A3A722C, 0x3609398E, 0xB00CC84A, 0x99343259, 0xCC3A1538, 0x0D8E867A, 0x8575C0C4,
+0x6264EFAB, 0xB69A9674, 0xFA9B638F, 0x7F25B50A, 0x71F1C8A8, 0x8FA622BC, 0x123CBEA2, 0xF5C39F2D,
+0x6E2C4FFA, 0x477DC2A2, 0xB896DEB2, 0xE82BDC60, 0xA2B035F7, 0x79046C88, 0xF6774655, 0x8298805E,
+0x349F9BF5, 0x95B83F7D, 0x1243E3C2, 0x0FE04560, 0x4270909F, 0x9F768F4D, 0xAB1CE0DE, 0x2CC760CC,
+0xF1D69BEA, 0x8610F72C, 0x8F8E16D3, 0xF29BCA17, 0x670FA1F6, 0x3B43B7B2, 0x022DE12E, 0x18E6C5A4,
+0xE9AC844E, 0xAF76C956, 0xFBB1D3D1, 0x1B27CCC4, 0x06C7E272, 0x1D463C63, 0x4B6B376D, 0xA212AD9C,
+0x95B9A98E, 0xA7F4B67C, 0x10089BBF, 0x92361A1C, 0xC539F248, 0xF703433C, 0xC1E052AE, 0xADEFE4B7,
+0xDFC1D33E, 0x85962AC2, 0x28A562EC, 0xA0B0AAFB, 0x11B0950E, 0xB0A62515, 0x89435B37, 0xF3407372,
+0xFFEACE08, 0x9019C5AE, 0xC9DFBCD7, 0x428030E3, 0x2924DA3A, 0xDFC516A0, 0x2B6B54B6, 0x2E7E341F,
+0xA609E078, 0x88E82AB3, 0x38AFC6F9, 0x8105F81F, 0xE08FE63A, 0xD426D115, 0x1EE1F700, 0x607EF618,
+0x8A249C29, 0x25CD2198, 0xAE86C6F5, 0x8BE36675, 0xC42F4D31, 0x4057B41C, 0xE6652EA8, 0xF1B78A59,
+0xA33961F1, 0x0D4CFC10, 0x14E11F41, 0xC6B99A30, 0x4DF512C7, 0xA82D0162, 0x10CB1ACF, 0x871421D5,
+0xCD30A9B3, 0x966FC384, 0x5F798C45, 0xC8027228, 0xBD7A1F94, 0x5ED6E678, 0xA107BE19, 0x4BCA36B0,
+0x7F0F2915, 0x52F55482, 0x69EE8884, 0x794E337E, 0x419D86A2, 0x756F7A04, 0xF3ABC84A, 0x4EDC3027,
+0x38359B30, 0xD6199767, 0xF81DCF82, 0x327039ED, 0x44EC03A3, 0x4D878445, 0x18C7F674, 0x132444C3,
+0x9176FA8C, 0xDB24F4B5, 0x23830D9D, 0x9B101EC2, 0xDA96C0F4, 0x117C42FD, 0x4FD7BFA9, 0xEFFB3E81,
+0x02D8C47B, 0x798460E0, 0x4DE63B00, 0xC5942CDF, 0x3278B3DB, 0xEF2CE410, 0xDFB7CE42, 0xF482F759,
+0xD3E9036B, 0xF41D8659, 0xF2AF3F25, 0x61C4D40C, 0xE3E67C6E, 0xD10FDFC8, 0x5C614C40, 0x48F0F43E,
+0x7CC467A1, 0x67DE0676, 0x45A5371A, 0x32C393EB, 0x86A25719, 0x770078D0, 0xDAD0741A, 0xBD4AEC7D,
+0x054BCAEA, 0x9BBAC415, 0x8C6F4991, 0x46B259E4, 0xAB22ADA9, 0xE68C5F4D, 0x5126387B, 0xF4802C3A,
+0x2987EE27, 0xEBF21C7F, 0x7C8A9636, 0x6416D751, 0x6AF910C9, 0x08928F02, 0xF3D130A1, 0x682B4CC0,
+0x4211A797, 0xC10054B1, 0xD309C2DA, 0x082B8712, 0xF0889CD5, 0xD0DB4054, 0xE3054A7B, 0xC5F2E06C,
+0x3191C86C, 0x7CB3DCDB, 0xE127B953, 0xC65014D9, 0x73829D43, 0x3A45611B, 0x3E2E66D5, 0x8C2C1439,
+0x6AF023CA, 0xD3E4AEA0, 0x0BDFE1FB, 0xFC660CA8, 0xDD8D2097, 0x9AEBB9FC, 0x21AB5CC1, 0x0A4D3039,
+0x0C75D261, 0x8ADC2606, 0xEF386BB7, 0x6397CBC4, 0xC3333120, 0x86973589, 0x87D6F952, 0x394BDF29,
+0xD54872FE, 0xD9C0A393, 0xC672E0F8, 0x81E9A550, 0xBEE09976, 0x0F7317FA, 0x8B9E3D0B, 0x5CEDD8F7,
+0xD2583297, 0x9697465D, 0x3A68EB28, 0x7E394317, 0x429CEA57, 0xF8421F7E, 0x7BE4F9B8, 0x4292B52A,
+0x53C8A607, 0x343CC325, 0x5F33DB05, 0x4E69BFF4, 0xDB9D125C, 0x49B6685E, 0xC4D40282, 0x388A4B8A,
+0x654592F9, 0x2879AB3B, 0x7CC2F9FB, 0x408F4AEE, 0x93A15BDB, 0xADC758A9, 0xDFE57B88, 0x957C99FE,
+0xDF5129AE, 0x4D3A7384, 0x45CE5C32, 0xD42D37AA, 0xC98B7201, 0x15878834, 0xC0C3C82F, 0xF66214CD,
+0x10F24BBC, 0x7F20D66B, 0x3F215190, 0x5AC23DD8, 0x7651A771, 0xF9E07E29, 0x9D29850C, 0x8BEC15B1,
+0xAD1BEBD5, 0x26E7BCF7, 0xBFCE5073, 0x4CE889A9, 0xC4DDFA64, 0xD26EBC08, 0x440C86D6, 0xD3A83A62,
+0x16459513, 0xBAB40681, 0x317F0E92, 0x2C333A8B, 0x28310367, 0x5C9C6E74, 0x89B3564B, 0x182B9025,
+0x088A6ABA, 0x0654FDDE, 0x256E87DB, 0x1E25D1CB, 0x4D4819BE, 0xA4D7F2F0, 0x938547F2, 0x0CE9C147,
+0x054F62CB, 0xB1F6BE1B, 0x080D4C7B, 0xF1430E75, 0x0894F90F, 0x9B91DF78, 0x11EA34BC, 0xC8F061CD,
+0xBADF0A11, 0x1D5D7638, 0x00D5E7E4, 0x34DC6949, 0xAB27E056, 0x92ACF871, 0xCC6CF22E, 0x688E7BB8,
+0x2B82DD00, 0x3795BE72, 0x6174990D, 0x2686DE50, 0x19409B19, 0xA78F4C6A, 0x0FB4A250, 0x1F5F6520,
+0x75E26CAF, 0x47790EC4, 0x3ECDC3D2, 0x45D3CAA5, 0xA76EE847, 0x0FA924A5, 0xEDAE30E8, 0x0732A532,
+0x29CF2906, 0x7429440F, 0x80271AE5, 0x1B769DE1, 0x29F70FBD, 0xDE53BB60, 0xC44BBD38, 0xA429EFBD,
+0xB893B90A, 0xC8392E12, 0x906DEC07, 0xCEFF1AC4, 0x4C88FBE4, 0xC7EFAE52, 0xDA59AD00, 0x5844BFB4,
+0xE2A84B46, 0xE09BAD66, 0x55A891E8, 0x34BB0F8D, 0x1AAB21AA, 0xDF41500C, 0x7857D872, 0x2F204AF1,
+0x85B18164, 0xBDD0158D, 0xD31F005B, 0x2B9E71F1, 0x8C2369AE, 0xDBAA69CD, 0xBC700E14, 0x694D3F51,
+0x82E2EB8C, 0x3096C8DE, 0x4AF6247E, 0x4F7BBAC2, 0x78E0E5C3, 0xC25E42E0, 0x530AA820, 0x00D2E0CA,
+0x9EEE9F10, 0x4EA3A2AD, 0xA76DEAAC, 0x8AD6E21A, 0x608EEEFA, 0x48DA48D4, 0xCD9277BA, 0xA1AD3BF5,
+0x55D44973, 0x8690E9E4, 0xF0000F1F, 0xAE67289D, 0x9C114561, 0x570EF2FC, 0x501D1DBE, 0x00A80494,
+0x026F5D2C, 0x049CC373, 0xAC7F9338, 0x8E65082F, 0x51C15468, 0x0F734664, 0x850318BC, 0x115C67A6,
+0x29358E9A, 0x9594964B, 0xDCC64EA9, 0xA304C5B0, 0x045C47A1, 0x9F21AB63, 0x80290A63, 0xDE497732,
+0xAF914EB0, 0xCB41E780, 0x2D3332A7, 0x685EA339, 0x51FEACE6, 0x31AAC7F3, 0xD53C8152, 0xC24DF1FA,
+0x64493CBF, 0xD6E56C62, 0x8118DF93, 0xAB188A34, 0xEFB5CBEF, 0x0B844161, 0x49DE2F80, 0x9DC890E8,
+0xBC0361F5, 0x3F558677, 0x77110798, 0x2F774F67, 0x8228086A, 0xD64FB4E6, 0x4C78BF49, 0xD8B5400F,
+0xFBDF30E2, 0x2C2AB008, 0x5DD0F777, 0x4AD212C5, 0x5E6D89AB, 0xC22E8C7F, 0x06CB358F, 0x42158D50,
+0x1C19E64F, 0x6DA648FD, 0x4F2940D1, 0x90E6C5EB, 0x703A41D9, 0x07CE4EAA, 0xA4AECE26, 0x32D2667D,
+0xFF85FE5E, 0x63C925E8, 0x61D0C1D5, 0x5B3D8DD9, 0x3D0A4254, 0x800BFFCE, 0x26FAA382, 0xB0F60400,
+0xFCBDA0AE, 0x1B443F14, 0x6C744DF2, 0xBA64A2C8, 0xCBCEBBDA, 0x2BD39285, 0x142E8F0E, 0x0CCF9461,
+0xF9A27B27, 0x8753CD6A, 0xDC308A69, 0xF2BFF875, 0xE8C1156A, 0x97D9BA5D, 0x622AE0C5, 0x63CEC504,
+0xFA29DD31, 0x68A2A425, 0xD0B07022, 0x28AB9ECA, 0xF925F4A3, 0x0D938A4B, 0xF86BB11A, 0x56FA93C0,
+0x0B2A5085, 0x7B898650, 0x55BC6FE1, 0xFE2FBA41, 0x4865D352, 0xB47AF1AB, 0x23FCF229, 0x1F7D3012,
+0x95B2C14B, 0xB3C737F7, 0xFDC3F867, 0xFB7C4B49, 0x71915D50, 0x67327614, 0xBBBC38C9, 0xDEDDFE67,
+0x257EAD48, 0x8F105A8B, 0xBDEBBA38, 0x63F20624, 0xA47BC0C8, 0xF02AC3B1, 0xFFE67C54, 0x59250C84,
+0x9AD0B6B1, 0x2785A1C4, 0xB5B72070, 0xB1A28FFF, 0x887793BC, 0x21AB4D00, 0x6DC5533D, 0x93FAD6EE,
+0x7BDD4BFE, 0xB6BA623E, 0x3DF3E5F6, 0x22CD1493, 0x7C8B57CB, 0x5AA5EBF2, 0x5CA445EB, 0x1F1CFACB,
+0xD949103C, 0xDB21B6E6, 0x1373A6E5, 0x00954303, 0xD153E4AA, 0xB0AFDDA6, 0x186AE03E, 0xEA90C6A0,
+0xE75723CF, 0xCD7F3C3B, 0x7A4521DA, 0x57AF5EF8, 0x9A10DEB6, 0xD045BF8B, 0x4130605F, 0x8012DF26,
+0xAB3D7E77, 0x40086112, 0x08B93D2A, 0xFE778C45, 0xDC736246, 0x0F696998, 0xB6040755, 0xACED2FAE,
+0xB7AF0786, 0x0ECB3CFE, 0xF078CD8C, 0x0CBAAD6D, 0x02DEF798, 0x3AA8F81A, 0xE8C72A83, 0xF77141A7,
+0x0C82B5C9, 0x9759E18E, 0x459A20BC, 0x347532B3, 0xC067F771, 0x9116F912, 0x38523D42, 0xDBC4F144,
+0xF951A2F3, 0x01CF87D1, 0x25160551, 0x140DFAC0, 0x017BBDBA, 0x6863F986, 0x59E146E1, 0x100BD9F9,
+0x0D7A3A6D, 0x04BEAE25, 0x11F851EE, 0x7CAC37D3, 0xFF0260D3, 0x238D1F31, 0x966E598B, 0x37EB56B0,
+0x03FAAF54, 0x97838A64, 0x87D96949, 0xB6DBF65F, 0xECC968FA, 0x48E602C8, 0x5DAE8EA9, 0x27F85517,
+0x47E9E9F4, 0x03334BC5, 0x04D96E89, 0x0C29121B, 0xC63FC7A9, 0xF5CEC78D, 0xCCC9AD30, 0xAB44835B,
+0x137482AF, 0x1BF282A9, 0x7638666B, 0x6CCD7C75, 0xC2A6C666, 0x6DE5345F, 0x5EA42EC2, 0xC14F13C5,
+0x2CDAD8E6, 0x3071B9D5, 0x1DD632DF, 0x26ED3C3D, 0x5CE24821, 0x7AD39C63, 0x44A1CCDE, 0x513AC563,
+0x69AFEE0E, 0xBE6924FB, 0x86F5AFB6, 0x6C76F15B, 0x253C6A45, 0xE5D5F100, 0xE9F88E4B, 0x6018583E,
+0x36397539, 0x79BFF4AE, 0x89683A43, 0x774EC854, 0xE0904343, 0xA25F15CE, 0xA61222DE, 0x3BA9923D,
+0xC6063CDD, 0x90CC1A03, 0xA833E0DF, 0xC1C120A5, 0x802F0A52, 0x17711D68, 0x36B31690, 0xA4885858,
+0x07751545, 0x255806F0, 0xA7BA07DF, 0xFD655CC6, 0x004A48AD, 0x40259F07, 0x3734DFCA, 0xEFAC3A22,
+0x15458365, 0xD5C5F95D, 0xF4762CFE, 0xE4660C8D, 0x21904579, 0x67832552, 0xA6C402B9, 0x1AE983B1,
+0x0D2C9C35, 0xF209BC53, 0x7F06D92D, 0x99AF730B, 0xEC70DD94, 0x33DAA0B8, 0x68F715FB, 0x2A3CCE88,
+0x332B0BAC, 0xEACFE11B, 0x1DD72269, 0xFA1F93A7, 0x51506C43, 0x11789E68, 0x8AC7A749, 0x186D0D13,
+0xD8D5F985, 0x1784E592, 0x80F526BA, 0x1EEA0883, 0x483A9372, 0xD488CFC6, 0x7C3B567E, 0x2C6F4196,
+0xA51DBCA8, 0xDC5E9A7A, 0xC7846308, 0xAC5AA350, 0xC0B42777, 0xD656CB37, 0x39C32579, 0x0FA34620,
+0x78AAC3E5, 0x9EEEEF20, 0x0E7AD132, 0x10EBFEB3, 0xD15AE701, 0x95EA245D, 0x1E4296B1, 0xBC553A38,
+0xAC640656, 0xC9724B97, 0x623BE490, 0x9FBB5914, 0xFF768500, 0x49770190, 0x1C506A37, 0x6401C610,
+0x3BD2288F, 0xF499969D, 0x92E7BBBB, 0xEFA7A818, 0x3086F91C, 0x79536392, 0xFD8FBF27, 0xF211D8B4,
+0xB2D77EE5, 0x7AC684E9, 0xF2F03438, 0xF4B1E029, 0x3F060284, 0x7F1E85E3, 0x357C1393, 0xFEB16D46,
+0xB461A08F, 0xA5888AF4, 0xBDE2C454, 0x45D0CE4E, 0xFFE08F38, 0x841E99E9, 0xDDF5794D, 0xABF534DD,
+0xB6156281, 0xAD7FC08F, 0x9911C456, 0x14935ADB, 0x6CCE5E93, 0x8AE5BA46, 0x8AC72524, 0x0E90021F,
+0x99072B00, 0xB5998721, 0x95A15843, 0xC9BDF5E5, 0xFC211DDE, 0x6FDE64B3, 0x62C7DEFF, 0xCE1F3CF3,
+0x2A95E5BC, 0xEB142893, 0x77322E25, 0xCF07D97B, 0xE00EBB0E, 0x047D6C44, 0xCC251589, 0x12A21092,
+0xD0316A61, 0x1D47D7D3, 0x80A4744C, 0x42832470, 0x7B4694C1, 0xB8927ADC, 0xC6207816, 0xEB499569,
+0x027D0648, 0x2856E27C, 0x670D0107, 0x2615ECA3, 0xA5EE9626, 0x9DFE5F9C, 0x7A6879F0, 0x68BADA97,
+0xB8660730, 0x9BD82F06, 0x2A10EF9B, 0x20815AA0, 0x0C190333, 0xC298D036, 0x049961F8, 0xEFE2C975,
+0x4778B839, 0xD6082471, 0x2F4AE52D, 0x272FEED9, 0xF049E455, 0x870B4DCF, 0xF95AF855, 0x8DCC50B7,
+0xA80465E9, 0x80D0E00F, 0x9DEFA1EE, 0xF7C12C8B, 0xF72827A4, 0x76EDCCED, 0xB8C9761C, 0xEE762DA3,
+0xD3F711A2, 0x7E80D988, 0x93BA9162, 0xF9378946, 0x7D5E36CF, 0x4F341D70, 0xA787CDF4, 0x89FDBA70,
+0x9ADE9718, 0xF2E56339, 0x4C16FBEF, 0x545A0CE5, 0x33E967BD, 0xA5DE3F60, 0x088A3D1F, 0x07290670,
+0x1FC12F29, 0xBE5CD074, 0xE9931182, 0x7EC245F5, 0xEB19F4F4, 0xC53A2321, 0x215AC6EE, 0x8CAC7284,
+0x2ED54637, 0x3FA03771, 0xC2DB3B4B, 0xFFD6782A, 0x0C324388, 0xE8B11137, 0xCA4B17D3, 0xC4646478,
+0xDB81BC22, 0x5ECA5A90, 0x0BA05796, 0xD1712BAD, 0x6FB3B5BF, 0x0E5E489F, 0x3A261BC0, 0x546209EB,
+0x5F94C457, 0x513A963F, 0x6D107776, 0x38B42357, 0x9578FC84, 0x392862E1, 0x9EF78D07, 0xF9FD8895,
+0x9E359157, 0x4A1698EC, 0x4ECFEE53, 0xC6D7F3E2, 0x05A6A2BD, 0x25E2D7A7, 0xAE6D0333, 0x7B838FE0,
+0x4C296386, 0xF1834C2F, 0x86AEE2CB, 0x8632D901, 0xF2EAC1EB, 0x0CBB8E27, 0xEE34EAB5, 0x85E39C30,
+0xB3984C81, 0x0184FFED, 0xD834D026, 0x3F78FE36, 0xCF8043AA, 0xA3EAD997, 0xD1DB5FC8, 0x8AE1B8D9,
+0xBFC56527, 0x84472709, 0x2F126A92, 0xAEA5E750, 0x47EA30C6, 0xC18514CD, 0x4E87892A, 0x32E300D6,
+0x9C9B12D1, 0x3AC8D88B, 0xD28F9F4C, 0x6C45CBCA, 0x9D01079C, 0x35003CBE, 0xF73BFC0B, 0x2DC4E7A0,
+0xD33664FD, 0x3E83E21E, 0x51A317DA, 0xE1E53909, 0x77681473, 0xB6C2D368, 0x48148057, 0x32FAD13E,
+0xD01F6816, 0xCC536C51, 0xE060422D, 0x9F4D3568, 0xD5E82CDC, 0x0D631798, 0xFF8D38E1, 0xEE29E5A2,
+0x61127F8D, 0x7FB152F8, 0xE10C2432, 0x48673143, 0x905A5897, 0x846DCB8A, 0x9E84EA0D, 0xABDB364A,
+0x5E2A9D1C, 0x7E9096F7, 0x4F05A5DE, 0x0CECB500, 0xC0472148, 0xF5DCB2EA, 0x94AD4804, 0xC7904FEB,
+0x3B749FA2, 0x1C8040ED, 0xCF45378F, 0x462DD82F, 0x6D865AAF, 0x7205A13D, 0x6CC0FB12, 0x0F43D58D,
+0xAB62FCBF, 0xB11C0237, 0xBD787198, 0xB65A59E7, 0x3B04FAEA, 0xF038587E, 0xEE261568, 0x934098D9,
+0xBDDE2AF7, 0x05D41587, 0xE1A677A2, 0x384B16E4, 0xFC8FF61B, 0xF08467A0, 0x03B041CD, 0x2E974318,
+0xC4B573CC, 0x96FCF180, 0x3046FB27, 0x57B1BB84, 0x2DD34272, 0xE452800D, 0xE2DEC90C, 0x8AFF1EDE,
+0xC8DDDEFF, 0x056ACA05, 0x536088D5, 0xB4A7384C, 0xA06DFB10, 0x303D3B4B, 0x19D423C7, 0xCBFF0BCC,
+0xF7C3D633, 0xF3EE75BD, 0x6FD7E549, 0xD28CC9BF, 0x6EFA9237, 0x4390855C, 0xC90E8938, 0xA509F8AD,
+0xCB8C846D, 0x9C29BBD4, 0x6EBBEA54, 0x36320F69, 0x0805E848, 0x9241EE1A, 0x5B2E08B0, 0xAF502795,
+0x486B7015, 0xB7DC6262, 0xD510AA58, 0x67631522, 0x9D6F1BA2, 0x1484654F, 0x9FCF8B30, 0x89D5EF60,
+0x4BB84918, 0xE1A0A5C5, 0x697E88A9, 0xA34517E7, 0x33A384C8, 0xF52A1C71, 0xED6C595B, 0xFD718160,
+0x2949BE44, 0xA910F5BC, 0xA46C9C61, 0x73F9B2DB, 0xFD60AA1D, 0xFA727347, 0x6A0FFCDA, 0x444C2861,
+0xB43B0616, 0x6714FA8E, 0x3498B872, 0xBA4EAA72, 0xE745D7D3, 0x07635B87, 0x6BEFE39D, 0xFA0E4781,
+0x5AFE571E, 0xE860C287, 0x5FBE7FA7, 0xB9127818, 0x43E8E6F3, 0xC5ECA775, 0x9CDFADF2, 0x81C107F7,
+0x90E741BE, 0xE0176635, 0xE6F4C4AB, 0xB65E7823, 0x3BA8FE4C, 0xE45632DA, 0xAA2AF508, 0xB5B68D77,
+0xE1C7218D, 0xDF300E54, 0xC48285BA, 0x10D169A4, 0x1A8A6EEF, 0xA53B8CEB, 0x37EC1155, 0x03DFC3B1,
+0xFFA9B4E1, 0xEA14BF83, 0x5D526C0B, 0xD8E768F6, 0xABEEB60F, 0xEC46620E, 0xFA3732DC, 0xD98E0A61,
+0x3C4A7686, 0xE6B9F08A, 0x98F9AD41, 0x9F7744BB, 0x88FA2EEC, 0x95901012, 0xDDB7CA81, 0x4EECA02C,
+0xBF59BB11, 0x2B623643, 0x0FD5B54E, 0xAA0C494D, 0x96AA62B3, 0x5B07D73E, 0x1ECBCB18, 0x40552AF9,
+0xEC30952A, 0xF69AB3BF, 0x2E7C311B, 0xE48D30DC, 0xEE5A345A, 0x04CEA700, 0xF45355B1, 0x8161960F,
+0x51E1F42C, 0x5ADD296B, 0x6CB86C69, 0x091132C2, 0x27400DEE, 0x29568BEC, 0x1F3F9239, 0x1B9CCCF5,
+0x6D8A8571, 0x5464E9FD, 0x8DEAEC9A, 0x5FBDDC4B, 0xBA02A772, 0x0B4C86A8, 0xE8F17ABF, 0xFA112C17,
+0x10684D71, 0x23C1CF4E, 0xE8FB86E0, 0x0FFF4D12, 0xBEA7E0FD, 0xA8196AC3, 0xBA62019C, 0x05CD0C56,
+0x1A97F226, 0xB0AB5AD6, 0x62028D64, 0x4E337F1F, 0xB1C5A1B4, 0x576CEDCD, 0xC76F1373, 0x4ADA7170,
+0xD275A937, 0xE45EC5F9, 0xE9F627E8, 0x5FC0C660, 0xACA483DD, 0xBA128F7D, 0xA37BE405, 0x6190A437,
+0x721CDD44, 0x01DAFBE9, 0xE95C4516, 0xD99E96AA, 0xB91A6315, 0x52E88DBE, 0x7359CC1B, 0x09161AC7,
+0x4B2594A9, 0xDA97E3E4, 0x9C723BD4, 0xAB9CE182, 0x35C18020, 0xDA177383, 0x9C5B5C15, 0xBE870741,
+0xAC3BF5D2, 0xFA89EE53, 0x04CB59A3, 0xF5DCAAA7, 0xE839D198, 0x9C34866B, 0x5B31C131, 0x4AE74C0E,
+0x255B1F2E, 0xE4970722, 0x3FF3F093, 0x257A0808, 0xD0F618AC, 0xC3133890, 0x651FCC29, 0x395E9486,
+0x090379E2, 0x91801053, 0x25CA138D, 0xFC25A17D, 0x64E787E5, 0x38FDCBBF, 0xFADFBC06, 0x39332525,
+0xF7988964, 0xF4A36875, 0x09AA08A3, 0xFCB29BB2, 0x716A4566, 0x71CD53F8, 0x8D5E5264, 0x93F7C2CD,
+0x39F43491, 0x48CCD3E7, 0x8290915D, 0xA1D5319B, 0x0F6D67F8, 0x750E9372, 0x7D027D29, 0xE7E433AD,
+0xBC71FA20, 0xE320B213, 0xA47B03A9, 0xA022B3EE, 0x2495C172, 0x9B64BFCE, 0xCA3D71C0, 0x27A3053D,
+0x3650D0EF, 0x8D9E3900, 0x94895975, 0x67165BD6, 0xD81D6FF4, 0x7C74C68E, 0x2DBACF2D, 0x2667DCED,
+0x1826DC00, 0x173E5203, 0x1419609D, 0x55769574, 0x1C20D4BE, 0xBDA1BD41, 0x3D9E3C5B, 0xEB9BB03F,
+0x01EC2AA4, 0xEC7AB7D4, 0x33E4219C, 0xD7FC23FA, 0xEF9F784C, 0xE80F8521, 0x681E6573, 0xA9B916C1,
+0x4B41ABC5, 0x4722CFB5, 0x0B7A1F7F, 0x60B4DDCD, 0x31ABDBE1, 0xF4352E5F, 0xDE0E04C0, 0x0F493958,
+0x7CAD6269, 0xC8C1E2A2, 0x78D37883, 0x69F802E6, 0xF7A04ADE, 0x9D1812BC, 0x0F1F8FCF, 0x750D5AF8,
+0x493D427B, 0x655572B6, 0x8269ACE5, 0x423B2141, 0xF135AE5A, 0xCECEBE0A, 0xE19A589E, 0xED650194,
+0x412860E7, 0x480BD056, 0xA58F4D4E, 0x936EB645, 0xDB783892, 0x62EB4D50, 0x915930FA, 0x7676D4A7,
+0x1D0220F2, 0xA778CC00, 0xCD844375, 0x0965FE3F, 0xF74856A3, 0x687C01D0, 0x75168DEB, 0xC85FBCD3,
+0x79FB21CE, 0x145DC22F, 0x9E7EBF75, 0xAE446393, 0x643155A9, 0x70561267, 0x60DF4F81, 0xB3B3C60A,
+0xDC9D5ECD, 0x9504E6E8, 0x148FE08B, 0xE41E09F0, 0x4FE086ED, 0x3F9B97DC, 0xCCFFCF7C, 0x5CAF22AE,
+0x99862AB5, 0x9EDED69F, 0x62881584, 0x0A0875F8, 0xF089979D, 0x435C370F, 0xE2932197, 0x8BE6FBB9,
+0xAE64A19E, 0x9355BC08, 0xD9132B55, 0x60B27447, 0xDABD0D04, 0xA4A85363, 0xA536AE12, 0x3B4E9DD6,
+0x3B92E28F, 0xDAC869A4, 0x36DAE6A1, 0x872F7D72, 0xF73442D4, 0xD2BEC8C9, 0xA90D146B, 0x8FED379C,
+0x35A9DC80, 0xFF9D097A, 0x61E9DF12, 0x1E69C9D5, 0xEF007D4D, 0xDBA63C66, 0xBAB5FE8A, 0xA2E5D9F2,
+0xB4041BC0, 0x05C5E4E4, 0x0D2BF976, 0x6B2C9EFD, 0x98B6E20B, 0x66C4BEBE, 0xC200F69C, 0xFCAAE4A3,
+0x65269E12, 0x32F2006D, 0xF8133EFF, 0x4DC43A0B, 0x8387F449, 0x82AEEF85, 0x2C4525F3, 0xF45D0749,
+0x756F06E5, 0x23F157FA, 0x5092FB87, 0x7336F183, 0x60250EB8, 0xE7BC88F9, 0x4CD045E0, 0xE00F058C,
+0xB0A94585, 0xD8950487, 0x702E3CD3, 0xDB6C1768, 0xA752417B, 0x36D89422, 0xB9959E89, 0xE6BA4761,
+0xC534B38A, 0x6C636FDC, 0x0E8BE581, 0xF03FDEA9, 0xE763E459, 0x9B64E46B, 0xCA47F4DC, 0x4327A34F,
+0x6FBD0B85, 0xFC0B8A4D, 0xF05376D3, 0x71B8821A, 0x3DC32633, 0x93783342, 0x3A38802F, 0x1C2CD67C,
+0x49C7FBD2, 0x9233FC6B, 0x854A1672, 0x4707FD06, 0x6DF471D1, 0xE74BA3C2, 0xD4486727, 0xF20AF11B,
+0x5B658251, 0x2E9AD0B3, 0x3530443D, 0xD6BDB0EF, 0x42F24485, 0xAA7C7FD8, 0x04C5FDF9, 0x72220480,
+0xF7078267, 0x82BE5541, 0xA2A037F3, 0x87635CC2, 0x94D20529, 0x7C60A1E2, 0x0292440F, 0x25A5A8B5,
+0x64DA29BF, 0x5B3302E0, 0x18AE7D77, 0x0DE9C828, 0x38D0C627, 0x98A732E1, 0xC792BE45, 0x00DE79F1,
+0x0B1CF5AC, 0x8AC8DF0E, 0x9C93AA61, 0x81F7A72A, 0x5D367481, 0x450D1B3C, 0x368F2DE7, 0xDEC08606,
+0xC2E86BB0, 0x63A735A7, 0x3545AB17, 0xB9456DE8, 0x9328B3FC, 0x074954E7, 0x63714703, 0xA0A81A72,
+0x4E36E1FF, 0x912CBFF1, 0x749F438B, 0x748A1996, 0x7D7D5CCD, 0xE01568B0, 0x26B0179F, 0xC3EF409D,
+0x6873CD16, 0xDCDC979E, 0xD4D9977E, 0x3247B086, 0xCE44946B, 0x8E9D669D, 0x1B07980C, 0x167AE893,
+0xE145716E, 0x46921B73, 0x686BA5FD, 0x736587B5, 0xCCC276CC, 0xD7586B11, 0xA7B69B3D, 0x755C1678,
+0x93ED9E8F, 0xDA360C06, 0x1DF23BAB, 0x5E1179F8, 0x7CCA380A, 0xA9CABF9A, 0x76031EB5, 0x4779D6F8,
+0xCA210044, 0xBA54E6FC, 0x66851006, 0xCE7BA800, 0x5A29C2E9, 0x855ADC31, 0x63DDCBFF, 0xCB66A3D1,
+0xA51FE57A, 0xDE8D4BC8, 0x8FF1934F, 0xA72CC923, 0xDEEFBF6F, 0x1C85DB53, 0x452C4A17, 0x9EDE09B9,
+0x48753551, 0x74A761A5, 0xECC9F5FA, 0x9608A79F, 0x0C2BAB2F, 0x4A4CA92A, 0x93A641E1, 0xF47553E3,
+0x6ECAAF2F, 0x57F63915, 0x8F54068F, 0x311600D9, 0x6ADFEE45, 0x41CBC734, 0x7F4DA519, 0x5FAD5DD6,
+0xBF4E4D93, 0xC6B89D09, 0x66F65793, 0x98B55CD0, 0xA4D633A5, 0x84B3F9CB, 0x0111E124, 0xCCA74A1D,
+0x70215C6F, 0x901902F4, 0xE0A80FA7, 0x2F3F867A, 0xCF26E99F, 0x038EBBAE, 0xF155ACC8, 0xDA7E78C0,
+0x272A3385, 0x1C16CAF5, 0x3DA86FC7, 0xD4882C52, 0x889F020B, 0x91A8587C, 0x12F5AE9E, 0xAE5EA0A5,
+0x90C47FA6, 0x2CA77817, 0xC16639C2, 0xCBCB1709, 0xBF4BAD81, 0x971C1183, 0xE4A60CFB, 0x80831B43,
+0xF8541E6C, 0x352DEE07, 0xBB3A24C3, 0x34D7E296, 0xCED18573, 0x2DE0B172, 0x4978A420, 0x63D26804,
+0x876904D2, 0xFE687B99, 0x394A418D, 0xCC35F128, 0xCDEACAD6, 0xA82B0F4A, 0x76E897DC, 0xF22037AE,
+0x05C82F9C, 0x6D2AAB4D, 0xD61FD52E, 0x233E1BE0, 0xF017707F, 0x78116ED3, 0x7B68020D, 0x03E46163,
+0xC0BC00DA, 0xE4E0F528, 0x4AA808E6, 0x99F11B8F, 0x68C200DB, 0x9F3924F0, 0xB9647639, 0xAA932C8D,
+0x5AE2C9CB, 0x4188A48C, 0x1082A8BB, 0xC0C02CF0, 0xA4A49CC3, 0x916581E6, 0x386D07B1, 0xB1D69159,
+0x1B29F3C2, 0x643A96FA, 0x5526EED6, 0xFACC4F2F, 0xFF5E4F00, 0x6E18BE5D, 0x28F09AC8, 0x889D3CBB,
+0xC6275A94, 0xE1A64800, 0xB9C4EDE9, 0x51FABB28, 0x3CC27847, 0x2755D46D, 0x7765A36C, 0x9E013808,
+0x823AAD0F, 0x65B794CE, 0x8D2C1B91, 0x971BADF5, 0xCB8F06C2, 0xD499E4AE, 0x985CE465, 0x7F840679,
+0x02D1737D, 0x55563B28, 0xE862B529, 0x9C290078, 0xE4EADFEF, 0x9ADBF0C9, 0xD9CC80A0, 0x1F25CD39,
+0x9BD87412, 0x2DC5D2D9, 0x4088AA8E, 0x8674E720, 0x73FE8292, 0x8DC53CF4, 0x969D6C1F, 0x1A9FEDEA,
+0x21DE3D2A, 0x734F9BAC, 0x2DB66C3F, 0x04FE36A9, 0x4455B203, 0x13C42700, 0xD6C5B089, 0x172B8468,
+0xA5AC723F, 0xCE67A879, 0x2D2C3D6F, 0x23DFC728, 0xD9BB7500, 0xA1127EBF, 0xB47AD99B, 0xF019A9C0,
+0xCDF626A2, 0xF9D36DD8, 0x80E98582, 0x716E5755, 0xAC87E6AF, 0xC3E3BCB3, 0x702F5089, 0x3966C1B9,
+0x9EC8F69F, 0x4FDF7BEE, 0x5328C643, 0xD32A708B, 0x1E404F04, 0xFBB5624D, 0xB9C8B30C, 0xCA998B7A,
+0xCEF49AA3, 0x2D82217A, 0x5D92B7B4, 0x6EBEF04C, 0x77596839, 0xEA3DC5A7, 0x21017933, 0x860AF297,
+0x81058D10, 0x9CF20F7A, 0xDD93CE2A, 0xB5E6F3F6, 0x6070A39E, 0x0EAEEA10, 0xAD13DD90, 0x32816EA0,
+0xD1290832, 0xCA156081, 0x148A087C, 0x65AA2BC8, 0x89C22115, 0xC948A3C7, 0x69EFD03C, 0x7334A069,
+0x0C6A0C2D, 0x72B3CD77, 0xA2DFC09F, 0xC5DC38A4, 0x0380163F, 0x7B94EB63, 0x8898D0FB, 0x58F59466,
+0xB79B3E8B, 0x7A2DB9F0, 0xBE27E534, 0xA81C9419, 0xB315DB22, 0x8BF267D0, 0xBC44B957, 0xD59D8F4A,
+0x0C444FAB, 0xA834E93E, 0x321F1957, 0x36E5F386, 0xC4C861C8, 0x75A52C16, 0x5F2FBC5D, 0xC547EBB8,
+0x6EEB69B6, 0x661468B5, 0x56BD958D, 0x5DC39B2F, 0x4DB8B1F8, 0x00D68A19, 0xA3D47EFF, 0xA2AABDD3,
+0xB30569F8, 0x5BB62F87, 0xA4EB30A8, 0xA55070DB, 0x121C6F60, 0xD6C9CCAE, 0x7AD256A3, 0x39CE3607,
+0x9C77DE31, 0xFD2DDA72, 0x859891F2, 0xFCCAF8A3, 0xC162F7D3, 0xB310D553, 0x8F28BBDE, 0x1A2F2456,
+0x739C1CE2, 0xDEB57A58, 0x97D52A30, 0x557DF29D, 0x6389CA1F, 0xACDFE82B, 0x338BD33F, 0x7C0DBEE0,
+0xE40F7175, 0xF487C13C, 0x78DFDA07, 0x049CC22E, 0x0EE985C3, 0x1A22C5C3, 0x3FFA90D1, 0x1CECA35C,
+0x7C1D231B, 0xFE020EB6, 0x062895B5, 0x407EA4C6, 0xD3EFF03B, 0xF2A119DE, 0x3A89FFD8, 0x6AAB6C4C,
+0xFFDFF42C, 0x7BCA8DBF, 0xCA798B95, 0xE153A43E, 0xBA69C01F, 0x897CEFF0, 0xE7318DA3, 0x7501BF17,
+0x859B608D, 0x2324E134, 0x6EEFED78, 0x30CD363A, 0x31258CD7, 0x1627799E, 0xA3BB89F1, 0x57E3A64D,
+0xA16634C3, 0x6F9666AE, 0x7EB1F2BE, 0x13E5F546, 0xABC7904B, 0x3BAAA87A, 0x42D3265F, 0xF2050EDD,
+0x5C407C19, 0x672A295E, 0x8EFEDE3B, 0xD0F896F3, 0x06EA10C6, 0x98BA6432, 0xB5493459, 0xD4F24E09,
+0x7D33A295, 0xE277458E, 0xF5D2A259, 0xC4527C2D, 0x8EDC6637, 0xF5764E56, 0x58C07DE4, 0xFDDCEBA1,
+0xB6C0763C, 0x7E9EF412, 0x50648AB3, 0x0ABC479E, 0xEAB5A17C, 0xD4E5BAB0, 0x99B8E7E0, 0x4902B391,
+0x2504599D, 0xB025EAF2, 0x35976038, 0xD6C9B0FA, 0x73FED87C, 0xFB4D7A90, 0x1E7C20CF, 0x4510E337,
+0xFE98E9F3, 0x649020F7, 0xF468F3EB, 0x302977E3, 0xCAC512DE, 0x07578E2C, 0xE4B2E25E, 0x52B0E2CC,
+0x34A63C0D, 0x5B1B2DD8, 0x1DB3F859, 0x2721307A, 0xFDDE74C7, 0x05F28BA7, 0x77BC8B3E, 0xFAD7768D,
+0x1F3F21B3, 0x720273AF, 0x008080E1, 0x01010000, 0x3D44639E, 0x4485FEFF, 0x553AB2D8, 0x655E0B08,
+0xB8F67871, 0x3A1A568F, 0x4F3095A7, 0xB4B8DE5A, 0x10C585BD, 0x6865D926, 0xD00A6345, 0xC9426474,
+0x182610E6, 0xA88D82A3, 0xC1D2AC55, 0x2DB78769, 0x16C6382B, 0x86CE13D9, 0xBE0AF05D, 0x07D7C7AD,
+0x899BF4FE, 0x45D57691, 0x8BF4C648, 0xCDDD7C40, 0xB1080B77, 0x6FAFE836, 0x2231A722, 0x0CFDF246,
+0xFD492D79, 0xC4677598, 0x898B7F19, 0x27C39499, 0xA7337D58, 0x0363F1D9, 0x53411017, 0xC344F648,
+0xDEFF6C20, 0x6180D097, 0xB0E753B5, 0x4A1858A4, 0xF79C6F69, 0x8171A710, 0x9227D131, 0x62AE4239,
+0x38D26F8F, 0x6E0E57C6, 0xDA7131F8, 0xEB3429F9, 0x35ECF15B, 0x26CA668C, 0x30EDF6BE, 0xD30A7C62,
+0xAFF432D5, 0x897C5254, 0xAB1747BC, 0x4C01FA03, 0x64C49D37, 0xDF263903, 0x40CA63C9, 0x9CE0F05E,
+0x6133FA56, 0x88145C10, 0xF489CF0F, 0x4563B9D0, 0xEAE488EC, 0xA648C840, 0x794CBAF7, 0x7B9E5F94,
+0xD2F88E9A, 0x9B7F68A9, 0xB3880420, 0x6078791E, 0x06E0E1CF, 0x960A9A9D, 0x7AB4EAD2, 0xED3F49D4,
+0x1D5BC314, 0x5AFE6C84, 0xF6A9831E, 0x1558B78B, 0x7C24542E, 0x2F7241D6, 0xB4FEBE77, 0xCC470049,
+0xDB2D938E, 0x3C494475, 0xC96BC6D1, 0x41D64B14, 0xA4D72B77, 0x8D0ED6BC, 0x07A0B72B, 0xCDE84902,
+0xBABF5043, 0xF2C764C9, 0xF6B4274A, 0xE25DD53E, 0x4BA2489C, 0xEC04518F, 0x570B8251, 0xEB1B3C25,
+0x2FA79E94, 0x3ABAB7BB, 0xDEDB8F07, 0x8CC95AE3, 0x7AB78CDA, 0x85240CB1, 0xEAB34931, 0x6AC67DC3,
+0xCD808338, 0x757796F8, 0x63D60F01, 0xB5DF1D7A, 0x851F3957, 0x9A76E45E, 0x4DBFEBE3, 0x772F8B16,
+0x09060E92, 0xCCA4E1D6, 0xB7C8BB3A, 0xFBA92D0A, 0x7FEBF12B, 0xA0EC521A, 0xBF0237F7, 0x170A862D,
+0x84140BC9, 0x352DAF5F, 0x8A6F772F, 0x1487B480, 0x339DD468, 0xB3390342, 0x4A485620, 0x394CDC21,
+0x7A304CB9, 0x628CE863, 0x73EBE55A, 0x8041F3E9, 0x2190BCF6, 0xCB1C6782, 0x4B79B593, 0x86302E77,
+0x6D515F9B, 0x649BAF32, 0x7495598A, 0x8CC88264, 0xD27B08C4, 0xB50A0D32, 0xE8F44ECC, 0xB1494AA1,
+0xDF45F1B2, 0x719EE708, 0x119B13E5, 0x72C9EFA2, 0xE2F0EA98, 0xF752D889, 0x706888B5, 0xC72B2431,
+0xBAE5DDD2, 0x4274EC29, 0xC9F1998B, 0x7FAADE8E, 0x453445BD, 0xBCE34905, 0x0B5B609E, 0xA59F254B,
+0x8001CCE8, 0x6AFEAF9C, 0xA426CE10, 0x1DDF925E, 0x08B38E0D, 0x5B8C1F13, 0x5217D5A6, 0x62CBF2FE,
+0xB32E7450, 0xD41B898D, 0x70EAC322, 0x6C8F4DF0, 0x3932AE9A, 0xEBEAB8AD, 0x879A1A8E, 0x9183CF6A,
+0xE180B58C, 0x51ECE80E, 0x194EE848, 0xE907D015, 0x942F3280, 0xC1F824EE, 0x01000000, 0x19669A41,
+0xFE7F094F, 0x3D2F6BAB, 0x7036A1E9, 0x6491B32C, 0x541752BF, 0x4A757D54, 0xCDDCD204, 0x6969CC78,
+0x903AD083, 0x581B3C57, 0xDA1914BF, 0xD6124E78, 0xFC57537D, 0x93897380, 0x7B62CC7B, 0xD65C502A,
+0x730CCCAC, 0x4D73EDC7, 0xB5F1EB21, 0x4377C7FD, 0xE13DD4F1, 0xB30B193F, 0x93D92E13, 0x5D288373,
+0x08B3AFA1, 0x66EE15F5, 0x1A664A78, 0xD4F2F5E4, 0xA4998116, 0x2C90853B, 0xB57073FE, 0xF9CB27B6,
+0xAF55B318, 0x9F85D3A6, 0xCA193110, 0x0A38F82C, 0x0A1BEB92, 0xAD6EEB79, 0x7382BCF0, 0xEDFFE2CE,
+0xEA69023B, 0x941241F6, 0x85BA3FA6, 0x18C34C68, 0x32B9B542, 0x33BDD21F, 0x33C07E11, 0x83859A2B,
+0x47368DF0, 0xA7B2C3A8, 0x4441ADB1, 0x12C90185, 0xB7B93EF0, 0x85B48456, 0x06FB2C60, 0x8E1BE242,
+0xD70C6F04, 0x3960216C, 0x4AAFD575, 0x20B21A39, 0x95991ADA, 0x91D992F9, 0x0B0904A7, 0xA25A0A4C,
+0xB6718380, 0xC7EDC3B4, 0xAE327AC7, 0x66A74E32, 0x19A98E69, 0xAD3AA8A3, 0x48A81761, 0x7C6088FC,
+0x28407904, 0xC5BCC3A9, 0xBCD2CE63, 0x821A09EB, 0xFD421892, 0x45983F50, 0x15AEA929, 0xD8485F10,
+0xEEFE3AF4, 0x5516CAD9, 0x951F30F4, 0xDEEBB09F, 0x7DB3F015, 0xD05525D0, 0x094470A4, 0x48FC6B6B,
+0x0B4278E7, 0x60B65399, 0x0E534875, 0x72D8E3A9, 0xC5851C79, 0x5C8AF0CA, 0xFED1663D, 0x6336D05F,
+0x2CBAF118, 0xECC2840A, 0xE37A2D78, 0x9758FBF1, 0xCD069FE9, 0xE9159263, 0xEF631BD0, 0x41809541,
+0x35C7AEB6, 0x80DB8746, 0x70235DBB, 0xBEA27DEA, 0xBCF06BAB, 0x02F231AE, 0xEE639363, 0x82E89EAA,
+0xC33055D9, 0x4075F7D7, 0xAAC2C46E, 0x0CF0495C, 0xB13D4962, 0x071C0A8F, 0xC4908F77, 0x1CAB5276,
+0x19BED9A1, 0x17B7C738, 0xB006783E, 0xA300BC9E, 0x68D5AC86, 0x5EBB9E6C, 0x2AA97EC9, 0x9B8AF691,
+0x0D0D0918, 0x4C2495A1, 0x26B13B06, 0x92A05E00, 0x5308D926, 0x2244270B, 0xBA78F9D2, 0xD80B5FB3,
+0x55C1EBD0, 0x8EA96589, 0x0476F695, 0x1E116962, 0x4200BE9B, 0x0FB1F80A, 0xA5FB240D, 0xBF75CD3A,
+0x1714BF4F, 0x661C9926, 0x5455B883, 0x642719B6, 0x00CA8150, 0x451711F3, 0x257311F7, 0xCD3932BF,
+0xC3F93B12, 0xDBAC7038, 0x4F6AD8FB, 0x9E9FA992, 0xDC72E6EF, 0xF624B3C1, 0xCAFE3AF8, 0x52A66DAC,
+0xE7C23765, 0x979C1BB1, 0x88FCA92C, 0x3665A975, 0xB806532E, 0x4274D8EB, 0x2C4DE8B0, 0xE4418822,
+0xCA8692E2, 0xE77C7655, 0xF3682ABF, 0xC53D9A92, 0xE7641ECF, 0xAFE1D01C, 0x738257B3, 0xD13526C1,
+0x023ABE2E, 0x5CB4B167, 0x8F3839FA, 0x85E8033F, 0x9B290098, 0x552801EC, 0x906B71A8, 0x5311E821,
+0x23C63E6A, 0x39E0EE35, 0x26B9A9CD, 0x0325EB66, 0x2216F7E6, 0xA9041BDF, 0x588AD533, 0x01518F26,
+0x5D77BD5A, 0xAAAADD5C, 0x17E06B21, 0xFC1F7D02, 0x6793F72B, 0xAB1B6B28, 0x52B994A7, 0x58DD961B,
+0x11FCA085, 0x5C960FD4, 0x0FC8117C, 0xCD74DF17, 0xB4A3CFE4, 0x4DCC4163, 0x72A899F4, 0xB72B5369,
+0x052641DF, 0xB694E94D, 0x47CA3370, 0x50C7B1E5, 0xDD00C2D7, 0x7BBC89CA, 0xEC71EA09, 0x3B79A46F,
+0x4DAF3813, 0x7FA2F122, 0x61F13F1A, 0x097494A5, 0xB7676D8F, 0x554F94EB, 0xB9173579, 0x9DDD1B27,
+0x7A86EB94, 0x4F1511F9, 0x0D5439CF, 0x39651D46, 0x3B8BA8F0, 0xCCA067B3, 0xF3578B9A, 0x9B41682A,
+0xC150F41B, 0xD88695D1, 0xC6D8BFAF, 0x8015691B, 0xDC70FD69, 0x3BCB1DEE, 0x7EC86F83, 0x79F8D401,
+0x28357FAD, 0x65D8D5F7, 0x484EFB7C, 0xD6243239, 0x05E05832, 0x61D2A8CF, 0x326E9B89, 0xBA86E7FE,
+0xB2209164, 0x69E0AB2F, 0xE6684024, 0x4098295E, 0xC4E86627, 0x226B573C, 0xA851926F, 0x2FDC6908,
+0xB3E6C4AC, 0xFA8EB4A5, 0x513E1593, 0xB9CBD880, 0x80CE7507, 0x7B4AAE9A, 0x73FE3508, 0x636B24B8,
+0x817815FA, 0xBDFCCAF0, 0x94697F07, 0x651B76BF, 0xDACBB267, 0x5241B5ED, 0x51C1DAFB, 0x91219443,
+0x3DB5506A, 0x06BF89F4, 0xAB8B6AAB, 0xCD42BDDF, 0xD34D521D, 0x3FAE48FA, 0xDE28856F, 0x427D40DB,
+0xB6CDE1AC, 0xB743610C, 0xF9E94543, 0x636A2DCF, 0x86B9F888, 0x8EE9CDF9, 0xD004F409, 0x213090C0,
+0x9375740F, 0xF82DE1F7, 0xF2A9DF85, 0x9AE06646, 0xD4415E1B, 0xA420FADB, 0xB8D43889, 0x7FAD0C4B,
+0x65C24AD1, 0x39F6FCC6, 0x170BB257, 0xA8798CD8, 0x29318D8E, 0x661CC060, 0x359C33D8, 0x88A6AE45,
+0x20CBDF2A, 0xD39A52A0, 0x719D3199, 0x3E941651, 0xD7F11090, 0x41521E03, 0x4BEF221B, 0xF39D9E71,
+0x5B6864CC, 0x1BEE08F7, 0xDE941978, 0xCDB106D9, 0xB4ECC48B, 0x3FDB3FC5, 0xC733E353, 0x92C62AA1,
+0x157DBB86, 0xE0AF2F3C, 0xA19D29E2, 0xCD63BA38, 0x296C4D62, 0x6D9208B7, 0x84892FEB, 0x48590B40,
+0x71A35603, 0x81580996, 0x451EF3B0, 0x2FC54DF6, 0xF3D24DD3, 0xB3C49504, 0xB51A1FDF, 0x539FADA2,
+0xF1ACE8C6, 0xFF389301, 0x73FBFD5D, 0x2F1A4E75, 0xFB283BFA, 0x8A84C8AE, 0xB982CA95, 0xE36F5953,
+0xD44A064B, 0x0F839E9F, 0x95E77E34, 0x27027055, 0xC9235058, 0x8E18F041, 0x510F8A0B, 0xA0ED26F1,
+0x4C05B85E, 0x0B6997E6, 0xFC65F0D6, 0x828E8A08, 0x52CFC04F, 0x0507A63C, 0xB3A6102F, 0x94B2A092,
+0xD2B3C742, 0xBFF0C6B2, 0x889F06DD, 0x9938209D, 0xECF5B417, 0xC7060B9B, 0xE0D7DB22, 0x8A856A59,
+0x5424E209, 0x313F4ECE, 0x69CF3562, 0xA5D7E0CA, 0x15A07ECE, 0x553CF807, 0x6C03747A, 0x00FC4C43,
+0x717C77B9, 0xD307BE3E, 0x8AAC22E5, 0x086A5B4D, 0x95524017, 0xEBE58160, 0xEDE3D785, 0x1B97ADB9,
+0x4B17925F, 0x6E2BF38E, 0x5EE78C23, 0xEBF65F37, 0x09853926, 0x8DF81B92, 0xFFF2252C, 0xE7DC3188,
+0x7B697740, 0x6203EED5, 0x9862C9D0, 0x468F7866, 0x14CD84EE, 0x0D3A3F3F, 0x83E4A5AB, 0xC6C39725,
+0xE617CA51, 0xEE27C559, 0x9B38721E, 0x744FAA90, 0x9C895DAE, 0x0B6CA5A6, 0x3D9E5765, 0xB2A24AA2,
+0xE3F60F26, 0x37F94285, 0x4246CA27, 0x44905E16, 0xC6B590C8, 0x3388A2E5, 0xC62CC668, 0xB32D35A6,
+0x3031365D, 0x74E778FC, 0x55BC3BA1, 0xC075304B, 0x074DC241, 0xB2B5D3BB, 0xCCA952E6, 0x991FE64A,
+0xAE8E5832, 0xB7619968, 0x792C3C08, 0x80DECF4B, 0x1B94C096, 0x455909AE, 0x2A9EAFD5, 0x3B790007,
+0x1A0265BC, 0xBC4AB9BF, 0xD98CF419, 0xBF587E8F, 0x6CBEEC5D, 0x56578696, 0x09595499, 0xA56403BB,
+0xDCC6478B, 0x43BC9C48, 0xD998413F, 0xD791DCF5, 0xC24493B6, 0xCE1D4220, 0xEDFCA6DB, 0xFD4A6BB0,
+0xD066BEBF, 0xA8149164, 0x08030682, 0x5D56915A, 0x4B04EC8F, 0xA1B4CF87, 0x039DDC7A, 0x4E5EB134,
+0x772F86C7, 0x2499E50F, 0xB5623670, 0xB27F5C4C, 0xD6DF567D, 0xA9ECEAF2, 0xCFC324F8, 0xFF267B84,
+0x48787966, 0xA01C55BE, 0x32779603, 0x24BC7425, 0x9FCBBF46, 0xD238C1AE, 0x8D2CAA6F, 0x3E83C71F,
+0x61B3A350, 0x98ACE5CC, 0x9B1B6E12, 0x78E82711, 0x79446295, 0x8334967F, 0x2291518E, 0x84EBA25A,
+0x13CFC7C3, 0xF99EA7B4, 0xB49DCA0B, 0xE9C41316, 0xD1F29534, 0xA6918059, 0xE9BFD563, 0x04EE19A8,
+0xCC1DC111, 0x08CB682B, 0xA28B9CDB, 0xFBC9992D, 0xD0A71DF2, 0x83DA93CF, 0xD2F3E1CE, 0xC5E46783,
+0x9F0B77E6, 0x631C384F, 0x5FC95043, 0xF84E1FEE, 0xB67C3127, 0xA56454F6, 0x2124F9D5, 0x78725807,
+0xFB2561CE, 0xE4988B75, 0x1934F41E, 0xB0D9443A, 0xB47CD600, 0xABB63C09, 0xB4C3C9AB, 0x08D4BC37,
+0xDA926B5C, 0x6E6CECB8, 0x2B654EA6, 0x4503FBEF, 0x01003F09, 0xC295AB00, 0x8D8743BD, 0x3748B22B,
+0xBCD5CBB9, 0xF584EDC8, 0xDD1E717A, 0xD60322C4, 0x94719A32, 0xF88FE382, 0x6B8C4817, 0xCB086246,
+0x6A089D89, 0x934BB4A8, 0x9E6BBF42, 0x6C53E7EA, 0x43EC5B81, 0x81D1B6F7, 0x5B9E2C08, 0x060322B8,
+0x11BA097C, 0xECA48DA6, 0x883431ED, 0x1B3552A1, 0x6C334A81, 0x375A7B13, 0xF02AA13C, 0x3567A6CC,
+0x01BFC313, 0x5CC2FF65, 0xAC1F840D, 0x4DA2DBA7, 0x3199AB40, 0x056A5E2D, 0x45111D66, 0xBE4DE859,
+0xE3F2DC1B, 0xB8EDEA30, 0x4258B072, 0x57AF9462, 0xD4F6B2C5, 0xD5A2ABF6, 0x654D12D3, 0x80824723,
+0x3F932DDC, 0x21E6DB7A, 0x296C1E7E, 0x18A9BBE6, 0x83B632FF, 0xC7054AE5, 0xA1CF7CDE, 0xFEFC13A7,
+0xA2FED822, 0x4E1F4D1B, 0xBF722173, 0x08D102E8, 0xB488E067, 0x18B03830, 0x6DC27A9D, 0x2825048E,
+0x90A5FDB0, 0xE4AC47C7, 0x7BC3537D, 0x014EFEB6, 0x1ADC3B7C, 0x0AC1DE6D, 0x012C9B2B, 0x2D9CBFB8,
+0x5F037DAD, 0x00953E40, 0x8B9D1920, 0x2D65FA92, 0xEEB35632, 0xD8114854, 0x31BE592A, 0xD3D138EF,
+0x16850265, 0x574A7F25, 0xED51B7AB, 0xBC000ED5, 0x1728DEF1, 0xBC0CB559, 0xBCD327B3, 0x8C2181AE,
+0x1A871333, 0x77306C72, 0x0D105390, 0x02E6F845, 0xDA4852F3, 0x0C0CAC90, 0x595BCDB3, 0x70B843D8,
+0xD523E429, 0x2C37F346, 0xE1C5BF59, 0x2038ADE7, 0x6F6FD70B, 0xA538EC24, 0x2B8928EB, 0x801E0A92,
+0x067CA918, 0x2D4E620E, 0x0F201DAD, 0xF64F4028, 0xC3598CA3, 0xDBECE651, 0x727A9697, 0x0384E854,
+0xB751E37C, 0x25827FAD, 0x5EACC046, 0xAFFD315B, 0xE1F7BEAE, 0x54056F46, 0x22C3AF66, 0x3ACDC5C4,
+0x75E5D562, 0x1756761A, 0x00CA75AF, 0x3C8243D4, 0x76EBFDF9, 0xC5D48A27, 0xA18BFA7D, 0x08E053E1,
+0x7CFBAB7D, 0x0966B935, 0xCD55A8CD, 0xA22FCDB8, 0x9E4B29FA, 0x69F45EA0, 0x01562D8E, 0x8DFBE687,
+0xA8D271F6, 0x32204FB6, 0x267A33B8, 0xC2580FA9, 0x4B53A4AB, 0x3197B6ED, 0xEFDF37B0, 0xACA27881,
+0x840FA0F7, 0xE2728CAC, 0x3DEDE7FA, 0x111CD23E, 0x2CAC09C5, 0x0AA6F1A4, 0x916C2F12, 0x23631FB0,
+0x9A3818C0, 0x2F8A66D9, 0x0B93CA69, 0x3892CE20, 0x41ABCFB7, 0x4C5D22E6, 0x9593F46E, 0x56A3CE30,
+0x13F98B88, 0xF068ACDA, 0xA0847E68, 0xA88B91C8, 0x2B5F5766, 0x2F8614CF, 0x475BD63D, 0x90D619FF,
+0xF4BB690B, 0xC05C266E, 0x5B17AE96, 0x1DA6B7BF, 0xA4FFBE59, 0x68A05258, 0x86D5DFC1, 0xA4E8E7EC,
+0xBFB5BBB2, 0x5768F41C, 0x4D489E93, 0x3A5E11C8, 0xB7805CB6, 0xCA797108, 0x16CC9E17, 0x2ABCC215,
+0x272615CD, 0xF5D82DE2, 0xA44922CD, 0x51507211, 0x4D4EB8A2, 0x53D77EC9, 0x9058FAD3, 0xE4A38CA1,
+0xB91D0850, 0xB5E063E6, 0xCEE942DD, 0xBBFB9136, 0x44582C01, 0xEDC6CE87, 0x1806023A, 0x21EAD3B0,
+0x35588BEA, 0x35A2D6B8, 0xE4EBDE4F, 0x191C5DB0, 0x69405F61, 0x8E70A2F2, 0x6D4DC108, 0x0901AE69,
+0xC1758AC6, 0xF7BE28D0, 0xAC1692E8, 0x89498A21, 0xEE060255, 0x00C96B1B, 0xF41C11D5, 0x07ED14AB,
+0x58324E09, 0xAC1B7E9B, 0x6E45F9F2, 0x466EB767, 0x8C349C47, 0x80DC3B50, 0x2578CD48, 0xAC97119C,
+0x71906775, 0x2E4F5ACE, 0x55221084, 0x202F3164, 0x887EC0C8, 0x9A60BF2C, 0x6F79DA10, 0xAD13E015,
+0xEC1DF2DF, 0xA61BC535, 0x3D718902, 0xEE636CBC, 0xA4001DA9, 0x5134C967, 0x133C8FF8, 0xBED05322,
+0x69F6564C, 0x7044A4C3, 0x4564391B, 0x5D115C73, 0xE3ABBCE7, 0x93866228, 0x7C92CEBC, 0xD8EDF616,
+0xA6DE492C, 0x9DB0F45D, 0x28F4DD30, 0x9D1CBED0, 0xBDA8F02A, 0x67235526, 0x31D2E9DD, 0x3D6F4A72,
+0x654CEC01, 0xC49955E2, 0x29850BEF, 0x4C330401, 0x802C81B0, 0x1BD30137, 0x8A5CB23E, 0x169A6F45,
+0xBA61AD3B, 0x6CD3EA50, 0xAD1D4A5E, 0xA25DB1B2, 0xDD3A4A4E, 0xB5560459, 0xFF01D6DA, 0xFF9F6434,
+0xFB80423D, 0x3D0B2B7B, 0x405511B0, 0xA5F90ADA, 0x6C65635F, 0x4A0E59D8, 0x8D9261C5, 0x01951FC5,
+0x33084A95, 0x9C056E8D, 0x43413414, 0xAF5832AC, 0xD8E432AF, 0x1D49F8DF, 0xB2320456, 0x6C16ACAE,
+0xF13418FC, 0x5C5AE8E6, 0xFD0FE371, 0x4A07929E, 0x34E8949D, 0x3EFE0533, 0xAA282ECF, 0x697A2F94,
+0xED4072C7, 0x8967BCD9, 0x11507FDB, 0x27430715, 0x03493E79, 0x56E732E0, 0x57D47D70, 0x54B580E1,
+0x3FB01C66, 0xA41BD523, 0xE54019DC, 0x2FDB33A0, 0x2F9BB05F, 0x39DA0F13, 0xA54C12E5, 0xBB2FA339,
+0x1E77258D, 0x7AD18CD1, 0x4131F9DC, 0x6A22548B, 0x85E3BAEF, 0xB7AFDDE7, 0xF2F88898, 0x188C6F01,
+0xF412C799, 0x19211C75, 0xAE1A0DF1, 0xF434C361, 0xE6F965B4, 0x06E5C9AB, 0x142867D1, 0x05BDF7D6,
+0x899D3AA5, 0xA878476C, 0xCB61EBCE, 0x015E7FC0, 0xC30FDE6B, 0x424F0A60, 0x6562F2C3, 0xF2989362,
+0x0ABF1768, 0x6452E67B, 0x21BAC950, 0x00E258E4, 0xC968E56E, 0x451759D3, 0x85EDD445, 0x193F6549,
+0x82CA66B4, 0xA4D42D2F, 0x43B42C04, 0x95C69FD5, 0xC5BBECCE, 0x47650B6A, 0x1CD16AF5, 0xDDEFBDF9,
+0xBAA6199F, 0xE22FC748, 0xC502A5F7, 0x59705D8E, 0xB34CCA2C, 0xAD6DE047, 0xF9084687, 0xAA8A3485,
+0x929E246D, 0x62C1FE58, 0x49136721, 0x881B46A5, 0xDE5ECA31, 0xE526F518, 0xA795A7E7, 0x8777FDD9,
+0xCD2D2916, 0xC584BAAB, 0x940FF8DD, 0x1C2CBBB5, 0xF5618458, 0x5731E4E3, 0x99809CC5, 0x667CCC2E,
+0x34067616, 0x692049D1, 0x94556172, 0x91EE84A1, 0xB1961452, 0x22917A8E, 0xF400FD34, 0x4BBC0AA9,
+0xC347F385, 0xEF936ED0, 0xB5CF08BD, 0xFF7DA735, 0x543B53CA, 0x12B4D5CB, 0x10784BB1, 0xE09E5026,
+0xDF9369B9, 0x6FA16FCD, 0x484F2ADE, 0x254A642D, 0x851A35CD, 0xEDA270DB, 0xDD7777CB, 0xE9367979,
+0x42644534, 0xCB82EFB3, 0x0D0C07F5, 0x85F1AD7E, 0xDA9B79F9, 0xE8AF0DE6, 0x26C0D3C1, 0x4A5DC3DA,
+0x7A0E8C1F, 0x5D808594, 0xF783483D, 0x5D827BB6, 0xAE565BDC, 0xA0F12D2A, 0x94174CE7, 0x8D883AAC,
+0xA1719955, 0xE190E067, 0xB7A23D3A, 0x945E330C, 0x0D7A0EF8, 0x4B3C2F23, 0x7E108210, 0x79665C81,
+0xA0595708, 0xA980934F, 0x562BCC3D, 0x778F46B5, 0x3A96D973, 0x6622C06F, 0x6AAD9108, 0x820DD92E,
+0x0AE27EDB, 0x725ACB18, 0xB3023B89, 0x1166B2A2, 0x9E062C6C, 0x0EF42899, 0xCDDC695F, 0x1CE4361C,
+0x81B83F0C, 0x2AA686AE, 0x2D40F120, 0x513A45D6, 0xF2727908, 0x55F80FC0, 0xB8944B61, 0x667C31B7,
+0xC2D22AB8, 0xA608A08E, 0x8AD53D44, 0x141E15E1, 0x2C73EF83, 0x069FCE30, 0x9846E6B8, 0x2ECEC288,
+0x1DBFE12A, 0x05313769, 0xAE482480, 0xA6830CED, 0x73D0F59C, 0x6B1A4336, 0x8FAC2C13, 0x1A5ECAA2,
+0xB7D15CDC, 0x55C1F269, 0x1F6A15B1, 0x6B224107, 0x2EF24EB7, 0xE0FB9369, 0x53F0B6CD, 0xCC950DA9,
+0x61837342, 0x0A823B55, 0x49459FB7, 0x1902D045, 0x39C71F3E, 0x9FAAAB44, 0xFE7168B3, 0x46159833,
+0x8F8BAF7C, 0x20447A79, 0x570CBD43, 0xB0F2E24D, 0x02744D56, 0x0B7EE233, 0xE8472424, 0x59E05DFF,
+0xDB5DC178, 0xD9404589, 0x7A9CCB7E, 0x28B73D5B, 0x69435083, 0x6091B460, 0xEA975AAE, 0x64694982,
+0x37F0B2CB, 0x8DC95213, 0xC6216303, 0x7DD1E67B, 0xEC500F72, 0xA1415BAE, 0x4628FF58, 0x8D3F5189,
+0xB3B64123, 0xDEB1468E, 0x81A097A7, 0xEDADF5DB, 0x2EBD3430, 0x7E5C7FE5, 0x7CD63265, 0x470E44B4,
+0x2F6F7AC0, 0x28128708, 0x05A95754, 0xE177914D, 0xE9766F82, 0x60F0088C, 0x1CAEC64E, 0x0705AB67,
+0x268EDC8B, 0xEB71AAF8, 0xF4C9D68E, 0x7DD4E509, 0xEDAC60A7, 0x50859144, 0x7DEA84E8, 0xA2260789,
+0xE952D1FE, 0x90EA0E97, 0x460E5D8D, 0x56F2D470, 0x7102E9CA, 0x9DDC5AAB, 0x55198E1A, 0x53A42C87,
+0xC5921086, 0xD63EA1A0, 0xBC52235C, 0x3C144A49, 0x422473B0, 0x337F27B5, 0xC6B03ADB, 0xBA027218,
+0xE10C26E0, 0xB7EB2F62, 0x197CFB70, 0xD28897D8, 0x57585246, 0x617C5BFB, 0xD4732929, 0x3E50DA31,
+0xDD1D42E9, 0x8F456621, 0xD577B99F, 0x43B0EAAD, 0xBD92C40E, 0xA76241F7, 0x24F13BC3, 0xA70E5C38,
+0x062BA733, 0x0E796444, 0xDF0BD332, 0xCB05B304, 0x03DE1B41, 0x70707FFD, 0xAF69E7FF, 0xCE0BC939,
+0xBEBAB3E3, 0x902EA24A, 0xA9ECDA31, 0xB83AFC6C, 0xB3BF4AD2, 0x9D4DA9F8, 0xBC630FA7, 0x0BFF6EAF,
+0x6199786D, 0xB12195A8, 0x18511DEE, 0x012D4E6A, 0x59C5EC92, 0x134E61CD, 0xCB7B16A6, 0x4AE41905,
+0xCE2F333B, 0x11ED987A, 0xF39F1FEB, 0x038E5C2A, 0xB8FBC4CA, 0xBB3BDA3F, 0x8C0AD996, 0xBBE5EC10,
+0x002D63AF, 0x67320A39, 0xEA7D98D7, 0xF0C3FDC2, 0xDC1C023C, 0xFECF201C, 0x09164956, 0xBFAD3A5E,
+0x07558343, 0x0FF2F89F, 0x0B8927F9, 0xAB54A56A, 0x515781FE, 0x3BA162C3, 0xE1E3F406, 0x3ECE46F0,
+0x63ADFC5B, 0x29C8307A, 0x9D0FB6A4, 0xBD757467, 0xF2D26162, 0x31FF035B, 0x656AB1BD, 0x2D7CDF46,
+0xD8139EF5, 0xFD5123FE, 0x51D8DD1C, 0x5AB7A067, 0x9B3EED31, 0x9B2FED4C, 0xF33A53DB, 0x16E1BBE3,
+0xD9638A36, 0x7077BE17, 0xE6A002D5, 0x2F3E9B38, 0xE225EA69, 0xB676941F, 0x6CE05586, 0xF232B7AE,
+0x9773CFB9, 0x8B9695A7, 0x26CE239E, 0x39E54B8E, 0xD6137BE3, 0xE3DCB9D9, 0x501BD35E, 0x2AAD9A34,
+0x66EB739B, 0xCF1C30EE, 0xA333AEEE, 0xDF6406D1, 0x58EA2896, 0xEEFDE1B7, 0x2E406995, 0x20BD3078,
+0xCA749A2E, 0xC593F303, 0x73DD4452, 0xF2BDF46D, 0xCD863636, 0xC5B8D548, 0x6CDC75E5, 0xB7210CAF,
+0xD377C3D9, 0x7BEC4B43, 0x9BDD9429, 0xC24AA1A3, 0x61BC1811, 0xD175432F, 0xE7694A19, 0xD5A3DC7B,
+0x9FD8A6FF, 0x951233F2, 0x38D6F7CF, 0x7AB332AF, 0x017A54EE, 0x3DA15530, 0x4EA7113D, 0xFA0F0DFD,
+0x21EDB2E4, 0x65AD5130, 0xEDAFEE90, 0xAAECA5D9, 0x209D29A3, 0xBA5B3D81, 0xB7C853C5, 0x910D5026,
+0xFA9E0D27, 0xDFB35BA6, 0xBA93B11B, 0xB4A12DFC, 0xE8925F1C, 0x39BC0C7C, 0x4446D822, 0x2D0E48FF,
+0x547C0EEF, 0xB0D75453, 0x3D76AE4D, 0xACE33789, 0xC92762F9, 0x80D30A30, 0x470602EC, 0xD808945D,
+0x32245652, 0x46BA2851, 0x7C67F5A1, 0x9B5ADC47, 0xD7AA2263, 0xC2CA89CA, 0x36527614, 0xAFC43532,
+0x736F02DB, 0x022CCD49, 0x1299B550, 0xCA120143, 0x47BCC401, 0xA9345B9D, 0xF89697D4, 0x2FA99C18,
+0x6DB7B1B8, 0x348E5B86, 0xD391B2D5, 0x73D43AED, 0xB187A029, 0x4B6B0B75, 0x0E3EABAF, 0xBBC9E80A,
+0x1E8F8244, 0x5EC6C800, 0x5E4FAB3B, 0x8097729B, 0x93670FA3, 0xA68C2A4C, 0xA4CBF168, 0x7AC665F9,
+0x85930FFD, 0x2825B981, 0xCF083FDA, 0x2408511A, 0x77F528A1, 0x3AF4A32A, 0x7CE0F9BB, 0xA10DAEB0,
+0x047E3947, 0xE31084E1, 0x736DC7A8, 0xF7AE9816, 0x34FFC581, 0x9F8AF7B8, 0x0CE6C53F, 0x2ADE33A1,
+0xBFAC4BA6, 0xD970EC30, 0xF1D9EAB4, 0x7F1197FA, 0xB67F84BB, 0x5A060E55, 0x4E20A5D2, 0x5ED3CE43,
+0xC0BC0FA1, 0x0D867544, 0x2553E24F, 0x7BC80E88, 0x40B2F068, 0x8B89E65F, 0x44F1E333, 0xD6517E43,
+0x03B9EB4A, 0x2C1F6BD1, 0xF3137E21, 0x1D103DAB, 0x2C6D0211, 0x7C473D30, 0x57AE70E4, 0x1249C247,
+0x8215BC91, 0x47D0D7F2, 0x48EC3D21, 0xF7AD34EB, 0x298F6AC9, 0x606D4050, 0x22AD245A, 0x4AC41AA4,
+0x75AE32D1, 0x42FAF59A, 0x87E616A3, 0xC16CD874, 0xE782EFAB, 0xD3C4011C, 0x127B681E, 0xA64D3551,
+0x9BA38284, 0x97007910, 0x8A7B1CC0, 0x2D278BE3, 0x3CAA1B63, 0xE082E0BC, 0xD20F30A0, 0x67B0CEE6,
+0x07A3F72A, 0x0A9F03FF, 0x016FA87E, 0xA85A80E1, 0xA55C42FC, 0x6A97287C, 0x6C829368, 0x8C2C563D,
+0x2C424011, 0x6133826C, 0x90E163C8, 0x49FB4C6A, 0x7C43B7C5, 0x3B6D2EBB, 0x96C7D622, 0x6436ED45,
+0x1E9CAD7F, 0xF820712B, 0xAA0038E2, 0xE7749CB1, 0x9657E244, 0xD59DC279, 0x5C88B9DF, 0x46630BBB,
+0xF136506F, 0xB60D4073, 0x5E2D3283, 0x62FE7AFE, 0x443A7A79, 0x0D60CF63, 0x934F9BF6, 0x3CFACAAE,
+0x33F62910, 0x0216A788, 0xF0EA1260, 0xE5BC33A7, 0xF9986CF9, 0x2E1B5799, 0x2EF00A30, 0xA06B6A17,
+0xB5D0CF1D, 0x66A03D39, 0xCB471E6E, 0x85146BE6, 0xF4E409A1, 0x66CB394A, 0x28A5F9C5, 0xE62C0A1F,
+0x5025A71C, 0x55D111C8, 0x00358E9D, 0x62D33E9C, 0xC524E87F, 0xCED6FEE1, 0x9A088B6C, 0x4D430AE9,
+0xE423611B, 0xB8EA39DC, 0xF33ED89F, 0xCA9A91B4, 0x896DC8B6, 0x13EE0F8D, 0xB3611313, 0x3604E69A,
+0xDE633F56, 0xB4CA2D31, 0xE477CA6B, 0x38EE9E2A, 0x4ACC19E5, 0x6F9B0A3D, 0x7C83D48F, 0x4F076725,
+0xE92CDB30, 0x28AF1A77, 0x4F3E81B3, 0xCAB1A320, 0xAB4E1D3F, 0xAA48BB4F, 0xAB65DD59, 0xBAA545DA,
+0x69D04EC1, 0x01FB69DE, 0xFFF2374A, 0xFFA589BA, 0xA09280C5, 0x11444797, 0x87A0ADDD, 0x7F61EEF9,
+0x34092A39, 0xD3CA7DF8, 0x53ED16F8, 0x9F5E56D8, 0x8434C0E1, 0x8B58DA1A, 0x01AACBEA, 0x7421C3BE,
+0x1FEFD289, 0x4E058AA8, 0x12D36953, 0x0465BB41, 0xACD46884, 0x47407DEE, 0xBD071755, 0xBB6F11A4,
+0xEC83A1E6, 0xE0923848, 0x550D63AB, 0x4447C90D, 0x1D6ACFFB, 0xCE8B8A26, 0xE43B6DB0, 0xB784C2C2,
+0xE9691B1C, 0x27755782, 0x3136CFE6, 0x7EB0D1CF, 0xCE8D1218, 0x36BA3170, 0x96F25917, 0xBB722D9C,
+0x661CD821, 0x5B1B4F86, 0x2DB976A6, 0x29471753, 0x3C753A70, 0xEB9B6B89, 0xDAD17835, 0x21DE60BC,
+0x5875743E, 0xC4436A90, 0x087BA3AA, 0x88CB2BEE, 0x7B0A1EAA, 0xD9826040, 0xEFE0E539, 0x05153B93,
+0xF4E974A2, 0x15A93159, 0x70A52076, 0xACA69A3F, 0x5FDA4AE2, 0x5ECCFF24, 0x4D5DC33A, 0x4751A1FA,
+0x6C449F41, 0x35169C0A, 0x3452A49B, 0x2C2273E8, 0x5F846630, 0xFA1C5627, 0xEE856DF0, 0xD3304288,
+0x168A7BAB, 0x432598C3, 0xE4A54CD6, 0x5CE9AF8B, 0x86CD4A68, 0x630F8C82, 0xCEAC2D9A, 0xD60A0EF2,
+0x6E6DC67D, 0xF2795837, 0x14A8B62D, 0x1AE31707, 0x760F295F, 0x6F34BC5C, 0xEAF6AFD9, 0xA2898212,
+0x1D6192C7, 0xBFE3620D, 0xBFB5EEE3, 0xE0BA03DB, 0x6206EC75, 0x57350A98, 0x480FFBF8, 0xE003885C,
+0xC5441BAB, 0xE2B44FD3, 0x1CAB7C19, 0x844B195F, 0xAB33C13C, 0xFB13493A, 0xB4E1708B, 0xF23D4B24,
+0x3C6D9683, 0xECD2F7C6, 0x992AF6CC, 0x3DCE86E8, 0xD6C65785, 0x97B58B92, 0x5EEDE5CA, 0xAB0C4A93,
+0x06F4C29B, 0x9D1F1B3A, 0x7C0FD62B, 0x5708B4FE, 0x9948D754, 0x8296322B, 0x182BD39A, 0xF199343A,
+0x57E76F2B, 0x2CC7ACCF, 0x1B2FFE1B, 0xC0C117B8, 0xA0E3D354, 0x4E26770B, 0x947346A0, 0xAE43C62B,
+0x98EE9C7E, 0xB81DC5B9, 0x4E163243, 0x238DFC21, 0xA9C43E97, 0xDAB7F586, 0x191BCB81, 0xD80DE725,
+0x41FEBA02, 0x428DE6AD, 0x8D86F128, 0x37CF5FB9, 0x5AB8A84A, 0xA63F2614, 0xCF8E3F22, 0x0F18BD07,
+0x3DEB9FE7, 0x30CCAEDC, 0xD0C88B1C, 0x5DF395D1, 0xCC177CB9, 0x155CC4EE, 0x2F0F05BA, 0x6857C353,
+0x838133B7, 0xEBA3C845, 0xF8045E57, 0x059A76AE, 0xD3D23D94, 0x1A5BC0CA, 0x86BECB25, 0x4E5BB970,
+0x51A231DA, 0x8D732A06, 0x7E3C51A0, 0xE3E8C554, 0xC94C40A3, 0xC58D9BA5, 0x1F0FF0B7, 0xBC4DA3B0,
+0xFF689621, 0xD86A3708, 0x4A0149EB, 0xFA897756, 0xDFBF5877, 0xF9E55FF7, 0xA8BF733A, 0xA081911A,
+0x770A001A, 0x2C31738C, 0xB486B439, 0xD9B117C7, 0xADA4423C, 0xA771A758, 0xE60C3FB2, 0x761B8D6C,
+0x8EADDA1A, 0x905E0B38, 0x7ED9F2F8, 0x5C649538, 0x040AB114, 0x7BD5356B, 0xA2279991, 0x8C8E02D2,
+0xFC8A3BAF, 0x62863C1F, 0x9D186616, 0x3CD0A385, 0xD291413E, 0x4372E5F9, 0x71F8E1CD, 0x974D9430,
+0xA528E415, 0x7F6AE5F3, 0x45807F1A, 0xDF030289, 0x84146287, 0xCABCC8DC, 0x4E1B77DC, 0x57EBB71C,
+0x69594AF2, 0x3897D21F, 0x35C8395E, 0xBDAC7B51, 0xB3B3F600, 0x4B5CE4CB, 0x2574D2FE, 0x6EBD13CB,
+0x6718BED8, 0x34898CCA, 0x936BC34F, 0x815C9F18, 0x32322FEE, 0x05D11F3D, 0x50A1F111, 0x82D782B8,
+0xE60264F7, 0x9D7AC2B6, 0xE1C7FBF6, 0x6FE74899, 0xF3FF479E, 0xC86DA453, 0xAEF5FCA9, 0x6C105377,
+0x3C65D3C9, 0x44987A1F, 0x94BD3A4E, 0xE76BE667, 0x73CD1EBC, 0x6AD6A8E4, 0x88CA01FD, 0xEB39BC95,
+0xC46F1F03, 0xC99F4C0D, 0x4ABBADB7, 0x824C4D00, 0x40F0942E, 0xAB039508, 0xD5888D77, 0x99743CD7,
+0x85619CD4, 0x88C973A4, 0x3072E11B, 0xDCDCA097, 0xEA51C35A, 0x78FEF4D7, 0xA6B6DBA1, 0x1D833FCD,
+0x8D385560, 0xF3C408B0, 0x2901945D, 0xC9DF5257, 0x05A65474, 0x8C2887C3, 0x2232E9A8, 0x50D4B041,
+0x3B069C29, 0x71CF77F8, 0xDF9BEE5B, 0x37FEBA69, 0x73E75EEC, 0xA3E4ACCE, 0x8393ADDC, 0x1D9A5522,
+0xA90D3720, 0x6909A4DE, 0x0F014849, 0xCD10C56E, 0x62E5633C, 0x5DC28A9B, 0x03E65853, 0xCBCFA47F,
+0x18A30290, 0x9D08FC13, 0xDC209DC2, 0x8C6157AA, 0xFFE4E007, 0x784D1CE3, 0x3628FA8E, 0xE37DC9CE,
+0x64D0B60D, 0x29FA83C1, 0x7E402F87, 0xC1DE5905, 0x9E51B9BA, 0x89FE77FD, 0xF17A3959, 0xDED2F382,
+0xE82CE88B, 0x2C32228A, 0xCBE3E8FA, 0xFE00867C, 0x3C569C39, 0xB5305886, 0xE133C7A5, 0xE25BF4DE,
+0x4A1B0818, 0x59838CDC, 0x9A29B42D, 0xC16C7A0F, 0x120633D4, 0x846126B8, 0xAB8B31F1, 0x2DC08C9C,
+0x85A6F033, 0x79161C1A, 0xBADEBAAE, 0xA147ADF8, 0x16F76638, 0xE6AA9C77, 0x229048D3, 0x5F71DA06,
+0x76F102AA, 0xE9C28DD5, 0x1A4E797F, 0x4B6EBD42, 0x9DF8F510, 0x79C14146, 0x2F790E2F, 0x0AA659C4,
+0xEC19DB05, 0x3F06D202, 0xA6D6407D, 0x9ACAB0A2, 0xC9D7CA43, 0x9FA8C989, 0x2F591065, 0x1A393541,
+0xC02422D8, 0x9AE0FA4B, 0xEDA26468, 0xBB2783FC, 0xD76458F1, 0x9B8BC10E, 0x0B6FF3C7, 0xADA1CAC0,
+0xEE8B7E30, 0xE015D131, 0x9A8656E3, 0x39F938EF, 0xB5EDDB60, 0xE3521CB9, 0x4CCF5295, 0x6D42A7F9,
+0x659C9EF8, 0x44D6DA9E, 0x3308149E, 0xC87C6E5A, 0xE77988C2, 0x99C0E892, 0xB1A2075C, 0x872988E4,
+0xE7190AD8, 0xC0516F72, 0xA9433A1D, 0x4443EA89, 0x118A3B82, 0x76E58BD9, 0x777939E0, 0xA0321888,
+0xF36AA316, 0x757A630A, 0x17587891, 0x77A6BAB0, 0xF5E54448, 0x8F41BA02, 0x77736050, 0x6EDFDF7A,
+0xE00B7A3A, 0x1DA78C99, 0x6D38C210, 0x8DF70796, 0x2FC3CBFC, 0x7EC968BD, 0x8CFB2A23, 0x506859F5,
+0x7F28DCC9, 0xD87FB744, 0x2680B5D7, 0xCD8F806D, 0x9DB1047B, 0x649FE796, 0x81CD4DA9, 0x2F04E15B,
+0x1ADEC763, 0xBFFA3FE9, 0xA66A4148, 0x65581712, 0x915B774A, 0x0147E5AA, 0xA317DB57, 0xE8BFAE48,
+0xD5519983, 0xB8B5C7FE, 0x686DAA0B, 0x14F35A3F, 0xD79F3AC0, 0x622173AD, 0x7F17F3F4, 0x811FA300,
+0x28377952, 0x59B23B86, 0x74104BA0, 0xDDC70847, 0x2F18AB70, 0x5F5D7920, 0x66143799, 0x4F29964B,
+0x735B6E25, 0x3B90D7C3, 0x77E5FE16, 0x0471A2B8, 0x213DEF32, 0xA7D7DA53, 0x8C35FAB0, 0x0F65F3BD,
+0xA6CCAC62, 0xA9402460, 0x30B53CB2, 0xC4C229E9, 0x6DDE344B, 0x09368C86, 0x983AF73B, 0x0EA71967,
+0x7A2DA278, 0x896FFE75, 0xAC452E4A, 0x9A1AC1C6, 0x3DC73A13, 0x8D4DE444, 0xD3359133, 0x252D1849,
+0x5861CEBF, 0x17C57074, 0xB7C901E0, 0xC0AE8193, 0x3DE6A59A, 0x58F67181, 0x916F1060, 0xC4329C68,
+0xBADA5F4F, 0x7C81F509, 0xF2AC0FD4, 0x77F2FA04, 0x0CA2D31D, 0xE16602F6, 0xCC83A892, 0x78A30881,
+0x86B821EA, 0xF21C2ABD, 0x80A25127, 0xF5586E72, 0x29EFD128, 0x7AA88A99, 0x8D79BCF3, 0x559F12CB,
+0x5FF6E629, 0x727CCED3, 0xC47CDB6E, 0xBC6EBFD1, 0xB6B414B8, 0xDA7190A9, 0x5CC6A837, 0x7687AB1D,
+0x1847393D, 0xE3EDF1C8, 0xA35F8B72, 0x0CA4155B, 0xC2178973, 0x541A2BE3, 0xDD8FC389, 0xB9EAA4D6,
+0x83162EEB, 0x7EC07E9C, 0x40F7E8A2, 0x2A3A2575, 0xDBFA03BC, 0x5F2FAF11, 0xF1C2E2FD, 0xCADDA576,
+0x8AD142D7, 0x9DE85137, 0xA612C24B, 0x248A33C2, 0x9D3C6FCC, 0x68A3C18E, 0x724592D8, 0x07A1C6C0,
+0x7CAE1541, 0x3386BFD2, 0x225BACBB, 0x0857F610, 0x5CB5FE75, 0x2340247D, 0xD4D20107, 0xCE6D9254,
+0xB9695BC9, 0xF9BF54A9, 0xB5F6C83E, 0x3A7D7361, 0x693BD12D, 0x7EA8D8A8, 0xE866BE14, 0x31583DB4,
+0x87E0D1FD, 0x9432A9E0, 0xC1CD406A, 0xEA47E633, 0xC8052E10, 0xDD029FE0, 0x5B780B0D, 0x37C11F9E,
+0x28CCFD61, 0x4C374991, 0x33CEF04B, 0xCF1F1E5F, 0x9E6A943B, 0xAFB3E8F3, 0x3BAD3DC2, 0xACB5AC08,
+0x8E13C711, 0xC187F1B8, 0x98348D32, 0x5A0699D9, 0x22C7BD6D, 0xD662F861, 0xA569C1D3, 0x7F21708B,
+0xAE71B175, 0xA9928528, 0x3A22AFD2, 0x6BA459FA, 0xABD684E1, 0xC6F0CDD4, 0xF0BF6D57, 0x44CBD00E,
+0xDDEB56AD, 0x0631CF22, 0x4F539D6D, 0x94D201A4, 0x83E24D91, 0x4EEC6849, 0xC02900E0, 0x6DF25FDB,
+0xC94CA308, 0xDCC7E0B8, 0xC50EC918, 0x6D395B84, 0xAD621A20, 0xC7ACC772, 0xE64311D6, 0x91734758,
+0xA0454F9E, 0x16C11F33, 0x1FFE1D8E, 0x6B3098CA, 0x31E18D45, 0xEE78F526, 0xEF5A3B41, 0x16C85A24,
+0xC880FA49, 0x76F396BA, 0xC9BFBA54, 0xA9DB3240, 0xA5E0F35C, 0x98D13781, 0x9081F52B, 0x6BFA08B6,
+0xF8ACBAB8, 0x16C5B402, 0x64AD3BBC, 0xCD3D77B5, 0x89823CA2, 0xA80F27CB, 0x815A5662, 0xADB480E0,
+0xCF120131, 0xD94A712B, 0x1F74885F, 0x7F1B2C0E, 0x8E9C6D69, 0x99604A6E, 0xBB43E467, 0x9E929503,
+0xC43E65DB, 0x9BC840FC, 0xD1D98B72, 0xC33CC065, 0xF04F90D2, 0x6CF0B061, 0x01AB4AEA, 0xCDB7F6CA,
+0x601EF6A4, 0xF4FEF7E5, 0xF4A494A4, 0xF0D4F32B, 0xCF9C122B, 0xCF88BC7E, 0x4F0D355E, 0xE6B8BFCF,
+0x84DA10E6, 0xA3F923F4, 0xFA728A31, 0xA70057FC, 0x3DC8215B, 0x2598AD2A, 0xFB4213A8, 0xCDEA82D5,
+0x4A1A3896, 0x48A59707, 0xE4410F00, 0xE69F4E65, 0x1208C273, 0x68A67F66, 0x1A19A978, 0x0FEC6446,
+0x44E8B091, 0xBED1E5DE, 0x10964EC8, 0xA800C259, 0x71F27130, 0x891D2D67, 0x0D56E928, 0x01CE0796,
+0xD1F595CB, 0xB10DE5AD, 0xE6418E80, 0xE05C5182, 0x34FEA02D, 0x0EDDCC9B, 0x67F598F8, 0x484822B9,
+0x239BA47A, 0xC09E4735, 0x8205A9AA, 0xF1AE1EB8, 0xD5FCE068, 0xD3B17DB0, 0xE28D15E6, 0x85AD566A,
+0x6E614042, 0x9449443C, 0xE0EAD117, 0xE4AE26B5, 0x10A2E59E, 0xE5331651, 0x27E1C510, 0x790E11F6,
+0x311D511E, 0x96B2B1CF, 0x8A047B07, 0x4D231C48, 0x89568D2D, 0x29C70151, 0xE4C60F54, 0xAB03F7F7,
+0xA6583BF5, 0x606F76FF, 0x3BE839D8, 0xBF9E04D0, 0x44363872, 0x35F0408A, 0x27D6F445, 0x82DA67C2,
+0x0BCCAFE9, 0x164377FB, 0x1F541F0D, 0x0D495D12, 0x7CBEA7D5, 0x2CE2DBEA, 0x90903D5E, 0x259DEB1A,
+0xA340BAD4, 0x4DA36138, 0x0B69CBCE, 0x8D6CA3A5, 0x1D6ADAC5, 0xD7E2D7B3, 0x3E248ECC, 0x75A4A32D,
+0xFB8406EF, 0xA7C0EADF, 0xC1EF039D, 0x4C61F481, 0x6F7950C9, 0x54327894, 0x33E8909D, 0x3494C460,
+0xCCC0CB82, 0xC89BA5E5, 0x359D6433, 0x4022D577, 0x06BB70B3, 0xC8D194CE, 0xBACC5170, 0x1C779319,
+0x73AFECE8, 0x879C8EED, 0x08AFB3C5, 0x99DDF083, 0xE665F62C, 0x7D7F746A, 0xB53D2693, 0x71CAE655,
+0x768A42AF, 0x5E696C92, 0xFCED0191, 0x04F4148D, 0x1F7EFFA5, 0xEE1F5356, 0xEEFB2282, 0x1981187F,
+0x633393C9, 0x2EE66A5C, 0x5956B2E6, 0xB7B4E5BB, 0xBD36FDA0, 0xACE3ED3A, 0xA1392C25, 0xEC96C5CC,
+0xD9CE140F, 0x85B4A588, 0x4AEA67A7, 0x8A154E2A, 0x4D3087C0, 0x5083DCA7, 0xD9949BE3, 0x29C8E239,
+0xF3DF8B07, 0x369A6780, 0xFFA6E596, 0xB8A34FD3, 0xAF21A228, 0x7D9C874E, 0x7FC32DB2, 0xCFFAFD27,
+0x17F97BBE, 0xB9EDC0DD, 0x50B342A6, 0x9B2F68F2, 0x5C1983C2, 0x3A1A2269, 0x790F24DA, 0x93EBD07B,
+0x64510981, 0x52F444BE, 0xA42B90F1, 0x33B4D6A4, 0x252FC23E, 0xD9D0C6E7, 0x0CD4DA46, 0xDCB7199F,
+0x4E1162E2, 0x2194BC46, 0xACBCBD1F, 0xFE486E6E, 0x5BE444E5, 0x1377309D, 0x81243772, 0x2EFF341B,
+0x983FF92F, 0x247CA9E0, 0x3CEC8904, 0x77B63C54, 0x68393D9F, 0xF851ABCB, 0x2E1A2292, 0xBF712216,
+0x329981F2, 0x105071CF, 0xDCA65C39, 0x4959E42A, 0xBECB1135, 0x1DCD38E1, 0x9EFE75BB, 0xA1DAE135,
+0xBABEE41A, 0xFC8C682C, 0x2EB2BB78, 0x2D78146E, 0xECF0635D, 0xA9D505B7, 0x3A8266E0, 0xED3D09DB,
+0xB91529E0, 0x3E47E86C, 0x6089D96F, 0x0DC39807, 0x1B362519, 0xEF0D124A, 0x3C08B49C, 0xD6A9CB3D,
+0x92D01743, 0xC97601E0, 0x408C9E37, 0x949B2FCC, 0xCCF14239, 0xF4694A73, 0x9C0DB4AC, 0xACC05404,
+0x4BB4BCA7, 0xED633F73, 0x8CD5B71A, 0xBB0753FB, 0xE550662B, 0xBA5B5884, 0x25359058, 0x7DD46881,
+0xFC177FC1, 0xA7277E09, 0xC0E0D316, 0xDEB00A0A, 0x16349EE1, 0xD8741FA6, 0x8DEF2285, 0x21004289,
+0x05838A36, 0x7E5C3452, 0x4DED8063, 0x5C9C5841, 0x2F1E9671, 0x8B7B1568, 0x9EB4C4B2, 0xE6FD964E,
+0x577CE2E3, 0x80F1EFB7, 0xC1C68328, 0xC08C11FC, 0x6473CFE6, 0x41F74A91, 0x5743A3D7, 0x9229E1E4,
+0x75668368, 0x60204CC9, 0xCA7EEC3E, 0x23B4771E, 0xE6852ABC, 0xE39A6317, 0x6EBAF535, 0x7917865A,
+0x0CCDA9AB, 0x4E930868, 0x77452BCD, 0x56FB1F10, 0xBC0625D7, 0xC41753B2, 0xBDDB1411, 0x589949D2,
+0xA3396D49, 0xBACA12ED, 0xF77F8D5E, 0x2F71D4A5, 0x7B1AC44D, 0xBD0B6333, 0x5689E8F8, 0x22DBA4A5,
+0x8456DA2C, 0x766E3C46, 0xB2EF0B57, 0x2463968B, 0xF03212BF, 0x698F336C, 0xD0917537, 0xA075F6E5,
+0x7C315C1F, 0x8E755C13, 0x3E56FBB1, 0x871B6996, 0xF868F470, 0x29646767, 0xDEC962E4, 0x027B2588,
+0x4A017EFB, 0xFD5D6209, 0x8012A38D, 0x56D95D41, 0xE4898698, 0xCD7A0035, 0xD7F0FA3C, 0x89DDB6CF,
+0xA212C8AB, 0x5C82E9A5, 0xE0FDD23C, 0xCE049D80, 0xCF147F8E, 0x55ACC013, 0x90B9E1CC, 0x6C76D3E5,
+0x93A95BC1, 0x43BD81FE, 0xAB1BFDCA, 0x046B4D4B, 0x8DA0107B, 0x5509E49E, 0x42E6E59A, 0x079DDC04,
+0x07F30F7A, 0x413E879C, 0xB281FC3B, 0x21B47D17, 0x47472827, 0x3B423CDA, 0x53B2CE99, 0x019AAB1B,
+0xF537907A, 0x708FA4D7, 0xA2E9FC07, 0x5B32FACF, 0x3306DDBF, 0x057A9E12, 0xDE8CF8A9, 0xD7DFBDBA,
+0x3721B4D8, 0xD6695F31, 0x1630FA68, 0x7AE14944, 0xE9E58DFE, 0x90F2FE9A, 0xAFE218E6, 0xF9274C9A,
+0xB335867C, 0xFDD52448, 0x5CF24B6A, 0xFD8D531C, 0xEFCCD36F, 0xE0BCAC9F, 0x556EAF10, 0xD7BA1ACD,
+0x46F962C0, 0x3FBD1033, 0xEFE227D4, 0xC4AB49AF, 0x9173EFFF, 0x06CB5363, 0x515B2933, 0x78B4D76C,
+0xEE3EE503, 0x77C35D27, 0x587FA8EF, 0x57231054, 0x064D5D5A, 0xF76D6C3E, 0xA3C91E6B, 0xA766F27A,
+0xA6C1566B, 0xA76453E3, 0x661FC759, 0x0F75AD99, 0xE296CFC0, 0x98AA9D15, 0xF80D9E83, 0xAF21A4AA,
+0x38ADE677, 0x344DC9E1, 0x2E01A096, 0xCBB163BD, 0x9EE1449E, 0x0F08C5DD, 0x71FC480C, 0x0711DBE3,
+0x0A50A579, 0x1E7F7477, 0x63A64B0D, 0x674DF9BA, 0xDF889F8C, 0xC37967BC, 0x53A111AE, 0xCC130A92,
+0xACE4C1D6, 0x5AB3B77E, 0x27C4DEDD, 0x40C7DFA5, 0xE0F17D53, 0x34375C13, 0x4F3256D4, 0xD1BF9AC7,
+0xF2F8AE03, 0xD2821435, 0x6EACCD1E, 0xBFB6BE5F, 0x2B075EC3, 0x8E7E9CEF, 0x9AF4390D, 0xB7E49897,
+0x58693183, 0x6E163201, 0x8A9E87B6, 0x2BF3CE89, 0xAF992A1E, 0xB03C1B53, 0xB3774572, 0xB0A83449,
+0xE2D2D5B6, 0x4DA980E9, 0x3E365BF3, 0x2A9D74ED, 0xC1FA61D1, 0xA70DCB5E, 0x636B8870, 0xFC31CC1B,
+0xCDCCC381, 0xE9B864BA, 0x5BEE6F27, 0xB692BC92, 0x5D5616FE, 0x34824731, 0x244963DE, 0x10D01F5D,
+0xDBF288EF, 0x376AE8AB, 0xA570B742, 0xF0AAB4EF, 0x51685F5C, 0x5AB59979, 0x4A246A8C, 0xC91F0E35,
+0xC125BF0C, 0xE5B2280A, 0x64B1A76E, 0xB69D7B28, 0xEB6B1D41, 0x800CDCF5, 0x26B15F61, 0x1DAC5852,
+0xCB05FDCB, 0xCB1E739C, 0xE3CD6586, 0x0BB13878, 0x4592FF99, 0x357C9C3F, 0xA55055B1, 0x537294D4,
+0x0BF13FB6, 0x488D737D, 0xC0BF2BD7, 0x4E7EC659, 0x7EEE328D, 0x16803598, 0x70630E89, 0xCC12C549,
+0xE84FDD22, 0x7DEA5E59, 0x6888E6E4, 0x613DB460, 0x987F46FB, 0xF0BDC902, 0xB1248FCA, 0x89785467,
+0x4BF04A25, 0xD3CEA2A2, 0xBCF2E256, 0x5BEA3341, 0x86541EE0, 0x06D769B7, 0xB10C657A, 0xBF6B0CBD,
+0x6722E891, 0x922B5B96, 0xEC7420B7, 0x35955D13, 0xF91BCC2C, 0x2FD15E2B, 0xBAF3747E, 0x70314BFA,
+0x0A8F0C21, 0x13BA9C64, 0xFB7F996D, 0x25FE884B, 0x3BA0DA76, 0x1E1E4F8F, 0x83B58B9F, 0xB5B22E18,
+0x4646E7CD, 0x593C1BE3, 0xF9DF1D90, 0xE34B851C, 0x62E0F71D, 0x70E67062, 0xDF7D451D, 0x928371FC,
+0x512ED621, 0xB7DA0C61, 0x8E799694, 0x5055FE76, 0xBBEC8351, 0x4A0EDE20, 0x81B92DEB, 0x8CF49B78,
+0x98A627BB, 0xEA51CD45, 0x49F3DF3F, 0x304F4CBE, 0x92B52DF6, 0x8E45A034, 0xDCC6A2D5, 0x199FDA6B,
+0xB0341711, 0xB0EDB499, 0x46A47F2F, 0x5FC0A92D, 0x16A6DD72, 0x99AC8CAA, 0x5F02BA08, 0xD48D3654,
+0xDBD58616, 0xEDD0BA6B, 0xB6DBCE30, 0xD293E8DA, 0x4CABF788, 0xEB3F1A20, 0xE1C4BB6B, 0xE76CA722,
+0xB90D8F61, 0x53429704, 0xD39BC1BF, 0x33AE2B68, 0xA47D3444, 0x402A2429, 0x8E859881, 0x8EEC2880,
+0x5BDC7D24, 0xC5D5BD4B, 0xA2935D5D, 0xD01B2F6E, 0x4EE55CBA, 0xCF22B433, 0x41A60C99, 0x9EEC25B1,
+0x2A7CFBA8, 0xA6B89758, 0xC6582970, 0xB87D623F, 0xC5D45E5A, 0xB0EB0A1B, 0xB2CA4A95, 0x55877EF9,
+0x699BC71B, 0x78482FE5, 0xB81F22B7, 0x42A0AB35, 0x24032B87, 0x9A293B94, 0x87DE6DF5, 0xF55F1CB0,
+0xA68523FE, 0x9B59F2B1, 0xE9694C41, 0x9057EDFC, 0xFA5880A0, 0x69F4239D, 0x5B64067C, 0x45CBC7CF,
+0xA3130C48, 0x9CB98B63, 0x38610CDC, 0x3ACB7FD9, 0x4C0FCE27, 0x538A0AD7, 0xB33A9721, 0x702CAA32,
+0x504D84DC, 0xA84D7A70, 0x19BB3C6D, 0xB17CAFE5, 0xB4F6F356, 0x1BD7339C, 0x4C07E12F, 0x2C188AB6,
+0x48759E52, 0xE75C87AF, 0xF8EB1B5A, 0xFCA6B187, 0x75E5597F, 0x5B058877, 0x3ED8A3CE, 0x0BEB404C,
+0x0D05C810, 0xF1761F0D, 0x1B22C83B, 0xDAC7B6F3, 0x97D6A11C, 0x33BD0733, 0x33EE3EE3, 0x8C779ABB,
+0xA93855BE, 0x1C33F4E3, 0xB912B1A8, 0xFAA7C242, 0x3CA75822, 0x3D346713, 0x64FBD29F, 0x53337A2B,
+0xFEE91DC8, 0xA61054CA, 0x7BD6B229, 0xC4443D99, 0x4B9E5511, 0x688C05F2, 0x0B25B61C, 0x6CC586E7,
+0x763501CF, 0x756ED3EE, 0x35E34C87, 0xA0FE9912, 0x1BE48A88, 0x18DB3691, 0x3FF3409E, 0x3647F014,
+0x667B3C78, 0x3A9FAD95, 0x830A0F4F, 0x2A5B49BD, 0xDAAE0FF2, 0x21C93ED3, 0xA9BAB27B, 0x3F8A2919,
+0xAED2DC35, 0xD4BECF12, 0x75704860, 0x691C67E6, 0xF3608A63, 0x00A178F6, 0x01010000, 0x3544859E,
+0x8E90FEFF, 0x9F8F0B4B, 0x59967DF6, 0x4FE01E8A, 0x5AF9C07C, 0xAA6AC7E0, 0x94E798D0, 0x23C5F1A1,
+0x0C3B31C1, 0xD693C2E1, 0x9B56AF15, 0x83E8BA7C, 0xF8B5BB53, 0x83242EE8, 0xE60482FE, 0xEAF6F204,
+0xAE536D7B, 0x805E74A3, 0x5109C10C, 0x0C9120A0, 0xC259DFB8, 0x0A909E05, 0xAF14EAEE, 0x0B430889,
+0x5FEBECF9, 0xBA1000C8, 0x1ADA9239, 0xBA000941, 0x793F96F8, 0x62B8AE26, 0xBCEB69EC, 0x5D056D2F,
+0xD6DB173B, 0x430374FF, 0xED4FDD0B, 0x5830849A, 0x3EF2C167, 0x4832D8A5, 0x4BB59414, 0x14E198D2,
+0xB2E7F3D1, 0x42319929, 0x4A30B4DC, 0x233A8803, 0xEF730B20, 0xA3B65CCD, 0x35F15B53, 0x46BADC39,
+0x910B1B9E, 0xDA41A305, 0xC0A380A2, 0xDE0921E4, 0x01BE2A20, 0x631FA86A, 0xC617C573, 0xB3532F08,
+0x122BBEFE, 0x006A24E8, 0xE559EC86, 0xCB80B3A3, 0x33BE047C, 0xEE4D5AD0, 0xA7C0CFF2, 0x4553FBE4,
+0x09E603C1, 0xF99AA8B1, 0xD7A9DAD1, 0x3249BD46, 0xFDF0384C, 0x41B67B39, 0x38897D93, 0x07CE9C7B,
+0xAACC49BE, 0xCC1DE77D, 0xC48A236D, 0x2A21CB76, 0xDAFD22A0, 0x39D426CD, 0xE6FDB68B, 0x5AD45F18,
+0x957682AE, 0x56412F9A, 0xF584BE41, 0x0E020592, 0x3F2696A5, 0x3BB466EB, 0x9C85B2CC, 0x51DBC34D,
+0x308C1B08, 0x3356EB43, 0x84C8404D, 0xEF785FA2, 0x1AC58AF5, 0x40772E6D, 0xC5EA79A5, 0x1ED29ED2,
+0x684F4CD6, 0xB8D5EF6E, 0xF33A2A27, 0xBC1158B2, 0x8280B371, 0xA09424AD, 0xAD9D3088, 0x3FE91237,
+0x1105558F, 0xEA9C0039, 0x59B10F53, 0x31FC838F, 0x87362A69, 0x0FA1A741, 0x59AC92BC, 0xFE284BD3,
+0x1DEDFEEE, 0xB1C0667B, 0x587716F2, 0xFB43BD36, 0x2245DBFF, 0x0B3FA7B1, 0x1439C538, 0x01194943,
+0x598DD711, 0x6D2CAE4D, 0xF7493667, 0xB0CBA860, 0xCEAE5CFA, 0x9084D077, 0x0134F3E4, 0x966B8218,
+0x9DAAEF1D, 0xE5A0268C, 0x94060F01, 0x307359D7, 0xA55ECF59, 0x6BFFD26F, 0xBDAFD0AB, 0x9CF0B486,
+0xEB00E179, 0x8EAC625E, 0x97EB7627, 0x6280297E, 0x8DD45CC0, 0x23402845, 0x47E9AC77, 0xC9DFB0AC,
+0xBA247285, 0x5C158485, 0xD9902C6B, 0x6055F201, 0xE3AB8FE6, 0xEF10DB61, 0x575B5535, 0xCFA13A09,
+0xFAFD1EE0, 0x8B8003D4, 0x768041F0, 0xE21324F9, 0x89145E58, 0xA6AA962B, 0x18FDE6DB, 0x4EC31B34,
+0x175C24B8, 0x7AA2BA80, 0x496B31C4, 0x6F42C17A, 0xEAAB1A28, 0xC2D0D477, 0x86794B7C, 0x26FC8DF5,
+0xC0E6545D, 0xADEDE1BF, 0x05DD6A9B, 0xA1287D8B, 0x2D9E726E, 0x554DD251, 0x4B414209, 0xBD855B26,
+0x695FD235, 0x728809DF, 0x1CDD80AD, 0xBF8FCEEF, 0x8825434D, 0x05FBD6B4, 0xBC5A945D, 0x32F579CD,
+0xD5C1E6D5, 0xD3BD90F9, 0x0A2D3096, 0xF3858B2D, 0x0DEB2494, 0xA76067F6, 0x4A2FB894, 0x719A2ABD,
+0x2FA1C0E3, 0xE3F90C91, 0x6A82F552, 0x5F78D0F2, 0x6F7833EB, 0x65EE9285, 0x4C332133, 0x091D81D7,
+0xFD0E59AF, 0xBE304BA4, 0xF345B482, 0xCA60C8E0, 0xE0070E4B, 0x13D2D589, 0xDF8CB76D, 0x1B1636EB,
+0xD6899DF8, 0x0413D24D, 0xE3E66EF8, 0x29A005D5, 0xFEF5B313, 0x27FF4FB1, 0x3F636AFB, 0x277F0504,
+0x0877C397, 0xB741F2BC, 0xA4D7CD9E, 0x4AB58C41, 0x42B140CA, 0x8247CAF0, 0x74A4E7F5, 0x6EE46658,
+0x222CA3CE, 0xEE934240, 0x5C6A312A, 0x072DC0A7, 0xEBD68711, 0xD2DB1690, 0xA5EB7E27, 0x0081FAC8,
+0x41010000, 0x4F19889A, 0x44E27F09, 0xA8996C84, 0x1320F21B, 0xB0CABDF2, 0x0633A5DC, 0xF5F6511B,
+0x8FEFEA4C, 0x9879192D, 0x99C2A61D, 0x98967A6B, 0xE88B238F, 0x414113AD, 0x247C8DE7, 0xFB8F5F96,
+0x4012C89A, 0xF7B147D4, 0xF6775134, 0x427C8960, 0x8E4F7A3C, 0x0F561BC5, 0x6978C307, 0x4D68BDFA,
+0xD08ED5E8, 0x1A710547, 0x54B6EBF4, 0xCB46AA19, 0xC04B81DD, 0x32552C68, 0x48B5CF88, 0xB1D1E9CD,
+0x6F68B824, 0x16D109D3, 0x8FF22802, 0xA5C57DDB, 0xFD1E9761, 0xFE9BC78B, 0x9B6FEF77, 0xCFE4FDFB,
+0x7204A807, 0x0D739AD4, 0x1911D300, 0xAB085033, 0x940D4BB7, 0x6333F45C, 0xB663C4B9, 0xA9668E92,
+0x3A9503AF, 0x3C64B62E, 0x07EBEE59, 0xD9F3CA40, 0xD822A02D, 0x84A3C26A, 0xB869AAC8, 0x1C43FCF7,
+0xF37FA74A, 0x6DF456EA, 0xAB4EAF71, 0x29356175, 0xB5F3EC96, 0xE7896A7F, 0x280B3CAF, 0xBC899A5F,
+0x9E48471E, 0x8CDE29FA, 0x9DFE17C4, 0x7903FB4C, 0xB68CDCA5, 0xE31617FA, 0xBAD546F2, 0x5EBC7708,
+0xE18C7FDC, 0xFC4DE79D, 0x494C9F06, 0xA1C7DF64, 0xEDAAE853, 0xC2D2DAE8, 0x1F5BD086, 0x5644EDBA,
+0x9D75FC1D, 0x65BDF04C, 0xE83CF445, 0xE199B83E, 0xF0C74B01, 0x71C77B61, 0x0081D4EA, 0x603AA080,
+0x784158BA, 0x9DC3CDB3, 0x5EA99F93, 0xB70C2FD6, 0x1CCED4B4, 0xA47CCEED, 0x07944942, 0x62C75438,
+0xACE0216C, 0x740A1CC9, 0x02C94ADC, 0xDCEE91FB, 0x09D57CD4, 0x7C5FEE0F, 0xE05E98E0, 0xB9C8D2ED,
+0xC70A228D, 0x9ECEF189, 0xE4CEBAC9, 0xFF34D03D, 0xC15A5D00, 0x34A88226, 0xA49F4AF6, 0x6DD243A7,
+0x34D5F614, 0x5C828E8E, 0xD446E32B, 0xD4A8FC11, 0x030DD367, 0x45C1382C, 0x377DD77D, 0xDA56A1ED,
+0xF8621E69, 0xA32E3E18, 0x2F75347A, 0x6ED5C3E1, 0xF7D72F33, 0x0C8B1433, 0x56B2F523, 0x77B5AC43,
+0x5D87641D, 0x90B16E1B, 0x958AB81A, 0xA705F0A5, 0x9599874D, 0xC012774A, 0x2B5F66EA, 0x764C127D,
+0x311D9EC9, 0xA704F72A, 0xD2CBB051, 0x3611CCC5, 0xD1CDE3FF, 0x05AFF76B, 0xB8349F15, 0xEB0FD59C,
+0x650C8ED1, 0x5C2D566D, 0x3B1B0313, 0x1CB94F9C, 0x36E353DE, 0xA71E73EA, 0xCF2A9E5A, 0xF3A71AB5,
+0xC23FED80, 0xA610116F, 0xC7D046D6, 0xF9B1B91B, 0xDFAA3FD4, 0x0438933B, 0xE29252A9, 0x485A6092,
+0xB285F81A, 0x56A4113F, 0x95A9492D, 0x4AC0A132, 0x11CE44E3, 0x1757717E, 0x73755424, 0x360AD3B7,
+0x02FFB74A, 0xF58050E3, 0x4DBA6B66, 0x2FB7C626, 0x4AF6F702, 0xF49AAE1D, 0x21DBEC56, 0x593FC4B2,
+0x917D42E5, 0xCBFE2AF6, 0xBF5B9CEC, 0x01E3A728, 0x4F0AE489, 0x988974BC, 0x538B12C6, 0x91020AEC,
+0x34CEED89, 0xE9355E18, 0xF60F21F8, 0x5F07FC7F, 0x677D8E06, 0xDF9A914B, 0x0E269762, 0x4F155CF6,
+0x1E637047, 0x6C891F33, 0x6CA4A3CE, 0xA5B43874, 0xD82606DA, 0x7B9095CD, 0xE81A839C, 0x39F50BFE,
+0x3286CA95, 0x0480337F, 0x46BFD5B0, 0x6A1DDBE6, 0x2A0C4F3B, 0x419BC3D2, 0x14CBAE5D, 0x237979A5,
+0x139EAD29, 0x9BEDA012, 0xC4EF09D9, 0xFD38F0A4, 0xB123EE74, 0x7DDB46E6, 0xF19D6D06, 0x519DFF77,
+0x9011D34B, 0x9E63C22A, 0x61A146C0, 0xAAC0BCB0, 0x86396F38, 0x30D473D8, 0x446476A6, 0xA2044D68,
+0xEBB91AF8, 0x315A9FEF, 0xF1F427D0, 0x167D420B, 0xB105A2A5, 0xC3972245, 0x71960389, 0x69272381,
+0x22535D68, 0xBA681E01, 0xBC0D84A8, 0xACF28DB5, 0xBAD26F05, 0xE6041632, 0x20DC4AC3, 0x3953BE25,
+0x42E42F8E, 0x2DEC62E5, 0x9D6336B3, 0x37A35CAA, 0x62BEE335, 0xEAD3E827, 0x803A6E9B, 0x977F2BB3,
+0x7C1BE2E0, 0x2509D48E, 0x30D193A2, 0x551F9A11, 0xFC53A9D4, 0xD5E0A735, 0x5C4F1234, 0xE0DFBCB1,
+0xFA3F0CB3, 0xE783C8DC, 0xCE627235, 0x98069A88, 0x5B877150, 0x22E86CEC, 0xB84EE228, 0xD029A757,
+0x3D0F4FE5, 0x7A739C3A, 0xD00FCF47, 0x76957849, 0xCEC0185A, 0xE371DB81, 0x92484F6E, 0x6ECD322E,
+0x8594B20E, 0xA2FD1D98, 0x2D8EEE6A, 0xF9E880D2, 0xF927C04D, 0x2D91AF59, 0xB5E8DA67, 0x0D4AE398,
+0x3D54C4A0, 0xB8B11176, 0x3803674C, 0xCD2FE742, 0xCC0516BA, 0xF96537CE, 0x4100365E, 0xEA7CFA1E,
+0x6C3E3EA2, 0xCCB49A87, 0x553DFEFD, 0x4AB02500, 0xEB806906, 0x649244CF, 0x40F41EA3, 0xD8058B16,
+0xCC0DDEBA, 0xCF4551B7, 0xC2B01B9D, 0x02232BEE, 0xA55AEAC9, 0xC484E7CA, 0x22C9DEC4, 0xB9F25B0C,
+0x3CEB9B84, 0x48618961, 0x5C78B635, 0x6774C3AE, 0x8AA2F1AF, 0x6D7F33BD, 0x01E71B96, 0xA174B0B1,
+0xD9C3C3D0, 0xFB62C360, 0xCFA6C042, 0xBD437FD3, 0x5CA041B5, 0xC17B0143, 0x6E439056, 0x4CB6AE73,
+0x3B84FA3F, 0x6FAFCF62, 0x7E302EC6, 0xA8CF7F43, 0x12F2DD37, 0x8CAD33BC, 0xA6AF0029, 0xF3DC09C9,
+0x2CD8BFAE, 0x9B74D7F1, 0x7F6777BC, 0xB0457600, 0x9B6B62BA, 0x0EE75523, 0xF54E7688, 0xCE7B8004,
+0x08A561BC, 0x99B39177, 0xAA146B1A, 0xF298EDCF, 0xC51AD497, 0x6235AD3C, 0x8FCEC542, 0x4AA78FFF,
+0x58D481E0, 0x27FBC795, 0x2AF6A1D0, 0x9C2496B2, 0x75038752, 0x03DACF5B, 0x99AA7E5E, 0xF99D4F6D,
+0xF961E5FA, 0x9EDDF8EE, 0x3BA7FAE4, 0x9532B33D, 0x96764AE6, 0xD654CB2A, 0xD45846D4, 0xEE7108BE,
+0xCE42A250, 0xAA8FDE66, 0x6F91A2DD, 0xFFA3D940, 0x5A0087FF, 0x2E6378A0, 0xADF25D52, 0xAA062A8E,
+0xBDA60E77, 0x868562F3, 0x0F0A7C88, 0x632FB608, 0xD6EA608A, 0x0C37808A, 0x3BF8FF9D, 0xA9C29277,
+0xD9BB9D5E, 0xACD18F7D, 0xAEFC3B2D, 0xCEB85ED2, 0x4EA9F1BF, 0xABEA7BF6, 0x9C0866A7, 0x6682D30E,
+0xFF837FD7, 0xA107D2EC, 0x1E4BB9A1, 0x021A16A4, 0xC136877D, 0xF4D2F2CD, 0x00F6D2E4, 0xDEDF50B2,
+0x60A4BB44, 0xC3C52A2A, 0xD3068B02, 0xA8E5A416, 0xD8E42E2C, 0xDC5250FE, 0x3151110A, 0xA46968D7,
+0x7308DD5B, 0x0B8942FA, 0xDCFB49DB, 0x59275683, 0x5A6C6E46, 0x9D1AA7B0, 0x4A12CD20, 0xB0301B11,
+0x945B6D6F, 0x9CB84F08, 0x8B8D016F, 0x1090598A, 0xE1A77529, 0xC9AF26D6, 0xC80E3062, 0x7F8AE683,
+0x885860FC, 0x83EA84ED, 0x28B244FE, 0xCDC7D48B, 0xF8C1B5E9, 0xF69E061D, 0x2D80E8DC, 0x25E5E2AD,
+0xD7106381, 0x605A4653, 0x08F78263, 0xBF5D7659, 0xD2CD10E0, 0xA587439D, 0x78EBA608, 0xB0FCACFB,
+0x6F3680E2, 0x320CDF42, 0xEFD8B510, 0x39844B89, 0xAE37F0DB, 0xE8EC2E3F, 0x9484E45E, 0x279E62CF,
+0x417BC6FB, 0x7BCF9072, 0x4BD91625, 0xE0EC6C9B, 0x3A86C3C7, 0x36D5A979, 0xFDCEDB7C, 0xB4F5BD05,
+0x38B5C2B8, 0x87FF9377, 0x380210E4, 0xD4C0408B, 0xCF523271, 0x40737691, 0xA76B92F0, 0x0AF1BF23,
+0xF7325B24, 0x279304F8, 0x7FECAB1C, 0x159571A8, 0x0767A817, 0xA840597F, 0x9489E602, 0xBD951E8E,
+0x6FAD2DCC, 0xDE0A5B67, 0xA36CFD85, 0x6C004548, 0x2162E480, 0xA96C0549, 0x02B721AC, 0x32F8BE56,
+0x4B8A95A6, 0xB1EF4B73, 0x29F52B55, 0x50EE5FB8, 0x07703B3E, 0x6BEF8919, 0x96B94109, 0xE0566C98,
+0x4624EF74, 0xC58B1D71, 0x99AEB28E, 0x28393596, 0x65F6820B, 0xD3096EFB, 0xCE6551F4, 0x4E18F990,
+0x6865A2AD, 0x5BD74399, 0x19D82B5D, 0xA01E1666, 0x94E0D234, 0x56A72ABD, 0x793C6A51, 0xCD97FE00,
+0x32C36939, 0x5EA272C6, 0xF5F74790, 0x86C60EF4, 0x8DEBB584, 0xC1ACB5B3, 0x5B868BBE, 0xA9A4B67E,
+0x859F2A93, 0x3BE63A7F, 0x7C5A26FA, 0x8A1DDC39, 0x375C3FBC, 0x8AB315B6, 0x1B77C4F9, 0xB192D790,
+0xDAC40029, 0xE91CA1AB, 0xE507DED1, 0x3A1E0E6C, 0x9B0C8EA5, 0x089295FC, 0x81CAB749, 0x05459BA8,
+0x0E6CB56C, 0xFBE21BB9, 0x9E27BD1A, 0x52307926, 0x428DC72A, 0xA109F4C6, 0xECD6C8E3, 0xC9C98EBD,
+0x1289AE17, 0x37F45665, 0x4CCC7323, 0x49C1715C, 0x2AD235D6, 0x5077A911, 0x23058428, 0x9D14F151,
+0xFB1C4A14, 0x0ED42202, 0x4D9D35CB, 0x4C66FCA0, 0xC3DA860A, 0xDA5247D8, 0x34577DBA, 0x5BFF7410,
+0xAC7CBDC5, 0x35B310D1, 0x47AC34BE, 0xF18A3B94, 0xE61489F7, 0xBF45668E, 0xC2D63519, 0xF99A5467,
+0xEDC5C75B, 0x42DD1270, 0x7EF7CF8A, 0xCB49555B, 0x944730E9, 0xB667824F, 0xB0C45704, 0x917229B1,
+0x5FE420F6, 0xA4F9CBBF, 0xB8293F9F, 0x55B5D9F2, 0x1F478AA2, 0xA0800A86, 0x96B26CAC, 0xEE19F2F8,
+0xCE31816D, 0x3F416B99, 0xC9D7AE75, 0xCC15192D, 0x20F917D5, 0xCBBA25C6, 0xE1C73890, 0x3018B915,
+0x495956D8, 0xF6DA8A88, 0xEC339738, 0xCA51CC88, 0x21CBAECB, 0xEDA91D91, 0xEF470065, 0xE36CD884,
+0x0E8FBE4D, 0xE4B51613, 0xE24FAA65, 0x5A49CC54, 0xDF1DCC9D, 0x8204E38D, 0x86D2B344, 0x3FE624B6,
+0x9D4A3648, 0x672C6E4F, 0x3CA741E3, 0xB6386B63, 0x57AC6112, 0x37DFDE7E, 0xB3F06C03, 0x7A9AB96D,
+0x223F4F1E, 0xD2CB82B0, 0x79F11428, 0xA1452F29, 0xA3048605, 0x8E8FAB73, 0x3B3E299F, 0x9C8B459F,
+0xDDE11591, 0xE88B2601, 0x9BE5CC85, 0x08E6D5DD, 0x9A367981, 0x89FC25CB, 0x42E60A60, 0xFDDE2355,
+0xACA9EB32, 0x76D30135, 0x7FF6D13E, 0x788C20D3, 0x37C352EF, 0x37AAF081, 0xA802BB33, 0x3C872B0F,
+0xCAAA4885, 0x47904954, 0xA26243F0, 0x5B6D2D94, 0xAED00679, 0xD9780A63, 0xEA858634, 0x94051A49,
+0xF1A08CD9, 0x407A2516, 0xBB016B95, 0xCE420E2C, 0xB0358E62, 0x65547226, 0x1CF07FB4, 0xE94AD4BF,
+0x4B083743, 0x2AD00B2D, 0x86C03DC8, 0x6EA2D9C2, 0x5D395BD9, 0x71C0BA36, 0xA8632121, 0xDC20BB91,
+0x4C0F866D, 0xE4ED7F1E, 0xF7D85EFA, 0xE3E8B647, 0x677F031B, 0x10D471BE, 0x664D53F8, 0x26D91DFA,
+0x19A6D840, 0x317CFF11, 0x7EF16640, 0xD72CCB7E, 0x52932235, 0x634DD053, 0xAF557126, 0xABF9522B,
+0x319ED426, 0x838EAAD0, 0xFACCBF6F, 0xFF6D1904, 0xABA0C3F8, 0x0BF14599, 0x3535850E, 0x39251D82,
+0xA2E50304, 0x1ED77920, 0xDF4A8EAA, 0x34CA865A, 0xD3B69A3B, 0x37BF7B37, 0x51DE540E, 0x7ADE901D,
+0x0F390D94, 0xEA678549, 0xE3846922, 0xC6F71B85, 0x101CB558, 0xC623C7A4, 0x97A6D3BC, 0x4D45BFCE,
+0xFBD66390, 0x1F5BB79A, 0x31529163, 0xC9CC3103, 0xB264E048, 0x5E63064B, 0x2279A136, 0x3505641D,
+0x8205B8EA, 0xC2C5E90A, 0xC6CD80B8, 0xC494A091, 0x3D11AD89, 0x7C129DDC, 0xB79F6021, 0x38C86588,
+0x4DE247DF, 0x299D871B, 0xB31F46C0, 0xD7103F02, 0xB3F56DEE, 0xA2429B59, 0xDE15CB6D, 0x20315B4A,
+0x38285AA6, 0x5F092E77, 0xA4831E84, 0xB2DDCC17, 0x676959B8, 0x11EA6728, 0x2726ED61, 0x5BE7ED0A,
+0xCF513D6D, 0x43015DA9, 0x62327E35, 0x3025319D, 0x6DF60EF5, 0x6D9A840E, 0x04B30210, 0xBE6A1B1B,
+0x066CCBF0, 0x838F268F, 0x1203E876, 0x9F557337, 0x200706E2, 0x907E13BD, 0x24B6C911, 0x30F9F6CB,
+0xB6659E6F, 0x97B225EB, 0x828E3D13, 0xAD1CD657, 0xBDDAFEB9, 0xA9ADFB5A, 0xBBCA339E, 0x76E8F2A4,
+0xA5F7F824, 0x4FEA1E13, 0xBEAAF8CA, 0x151AB335, 0xF52DACA7, 0x97947A25, 0xE4CB07BF, 0x94B7F925,
+0xAB5C1E77, 0xE9DE0269, 0x1848AC4A, 0x1D6788FF, 0x6080EE6D, 0x1B2D138D, 0x171019A6, 0x633BC1FD,
+0xEB06D494, 0x98527D85, 0xD3B54F79, 0x7F2A76EA, 0xE47816E5, 0x5461E824, 0xF8AABADF, 0x2F703234,
+0xF5A9B5A6, 0xE93017D3, 0x412269CB, 0x4E07BECD, 0x51E488F4, 0x8BCAB5AC, 0x3BD54A0B, 0x3F42BAF4,
+0x5F67593B, 0x12512B23, 0x452F50E0, 0xD0B3964A, 0x786FD99F, 0x333538A0, 0xC5154FB4, 0xE0356B3F,
+0x9FCBF945, 0x38AE9F9B, 0xF41C4999, 0xA4C50617, 0xDDD82704, 0x8056F907, 0x03BD5874, 0xE2BB51BC,
+0xC40095F3, 0x7528A050, 0x6684C729, 0x439A6CD1, 0xE4A4C64B, 0xF92C01F0, 0x122A4EBA, 0x55DA75C6,
+0x679F9946, 0x806A4E72, 0x27A456D0, 0x85E4C7F6, 0xD6B048D0, 0xD19448B6, 0xEB735109, 0xE3E9BBB2,
+0xA3FD930D, 0xD981CE30, 0xAAFFCEF6, 0x83FCB647, 0xDF58D08C, 0x07FE12A0, 0x8CEE74E4, 0x958FE26C,
+0xDCA3F10A, 0x1329BAFE, 0x4135287F, 0x450C1F48, 0x3A86954E, 0x440E4DAA, 0x368F01BA, 0x031C62BC,
+0xF1DAAE32, 0x2940D181, 0xADE26DC0, 0xEFE4C30E, 0x24D43A24, 0x7C202365, 0x62BC2ABF, 0x8D8FD3FE,
+0x0CC1250E, 0xE99B9A74, 0x3462B17D, 0x6DEE231C, 0xB066CDCA, 0xCF7F1020, 0x13095C47, 0x1965B0ED,
+0x4C9B12D0, 0xBCA57B17, 0x70F54176, 0xCCAEB0CF, 0xBAB5D9BC, 0xB762B43B, 0x76DBB63C, 0x2CD561A7,
+0xFBA929AE, 0x100AD6A1, 0x0A03E0B7, 0x020D6654, 0x56314FD4, 0x6BD73F02, 0x41D4E05D, 0x175EFBD6,
+0xA31935E8, 0x114E20A3, 0x27586DD2, 0xAC08BB1E, 0x96F46D41, 0x933FE5A8, 0x639496AB, 0xE99BA175,
+0xA8FFCA0C, 0x7E29C1BE, 0xAEB1026F, 0xC966B946, 0x1832AAE0, 0x73754610, 0x21B2D6FB, 0x5516EDBA,
+0x374012C9, 0x68F424AD, 0xBF58F223, 0xE9449E6E, 0xB9B43A33, 0xF7773B13, 0x86D70084, 0xB22623AB,
+0xF9684A2A, 0xF9E5F7F3, 0x321432A0, 0xD5F3F5A6, 0x22137930, 0x8B8A5F11, 0x95B42931, 0xBE12D3AD,
+0xA2F1E278, 0x9DC974F7, 0x6BDEE52E, 0x392590C1, 0x4CAFE997, 0xD5DAA803, 0x777BED87, 0x6C58A2FE,
+0x0D6CCFB8, 0x93AD3C4A, 0xE7DFF603, 0xD40376F9, 0x257686E7, 0x43E64FBC, 0x0C3B6C51, 0x09F5FC52,
+0x250F2F33, 0x8673B35B, 0xF87EF216, 0xA28F3ED7, 0xCC882680, 0x65911BA0, 0x434BDB33, 0x0C18D73A,
+0x54EE6F63, 0x38397366, 0x6A99F86C, 0xBB2A6F78, 0xAE2EE1C4, 0x84CDB886, 0xE3C92835, 0xF18CB837,
+0xBB60293E, 0x14CC0987, 0x248A8147, 0x6A54EE2B, 0x5670F9D9, 0x6594E3EB, 0x896997B3, 0x0717279E,
+0x871A156D, 0x3E335E7E, 0x51920FE7, 0x44F7FA91, 0x05582072, 0xF0FCBFAA, 0x635C895E, 0x04BA0F2F,
+0x936304D4, 0xFE1AA946, 0x39E6CAF5, 0xD468BA17, 0xFE95EFEB, 0x59F6DDBE, 0x64E6BF47, 0x9136C0A8,
+0x1A496EBD, 0x9FE7D962, 0x6DDDD903, 0x02A3CE1C, 0x9BB042AF, 0xC618F2EE, 0x80AFF05C, 0x658680C4,
+0x2CBD251D, 0x091354C5, 0x49783989, 0x338C8174, 0x0253EEB7, 0xFEDDDC82, 0xBA6E185B, 0xBB9F29A9,
+0xA28980DC, 0x56DFB571, 0x7188F4AE, 0x0BDC618E, 0x4BB50AB2, 0xDD32073C, 0x67D754AE, 0x1CD0D88F,
+0xB7CBBBBD, 0x6BFB2E51, 0x3BA77EF6, 0xEB5AA9CA, 0x3092ACBF, 0x8E814EC6, 0xC132154C, 0x0B614F17,
+0xA11DFCFB, 0x503C0C0E, 0x53D87EA5, 0x5C5F2EED, 0x90F8E5AE, 0x78442031, 0x05E47D88, 0x5BCF6008,
+0x3DD1D845, 0x71267707, 0x0FC64A9F, 0x2B35EFA3, 0xED7A9C13, 0x6C7730A0, 0xFB53BE49, 0xE5F61B74,
+0x73EE5D29, 0xAF2C581A, 0xB14B8AF8, 0xB8E22ADF, 0x3E21C6A8, 0x47C72574, 0xAB456715, 0x2559D8EE,
+0x8D90661D, 0xFED30DE2, 0xC3ABD153, 0x8D0C86E5, 0x0F8C0678, 0x451FCF0D, 0x5D6DB6CF, 0x47005709,
+0x4D19BB5D, 0xE862A56B, 0xD864BB80, 0x52EAF889, 0x30A494DA, 0xEEC75147, 0x6D15A82C, 0x12B73C98,
+0xEBDD3DF4, 0x266D85E9, 0xAA181DC8, 0xEDE659FB, 0x5055B789, 0x98D51E91, 0x9F65F994, 0xAD3A0ED7,
+0x39C10EBC, 0x17DA7878, 0xE11FEB2E, 0x9E7DB479, 0x9C104DD2, 0x52178B84, 0x7280A05C, 0x398C8B6F,
+0xD8975887, 0xE9C9163D, 0xEB43C6FE, 0x65F127FB, 0x94013A20, 0x8AF20460, 0x8315174D, 0x91A80CDA,
+0x1F750784, 0x9D2E48AD, 0x1FCFA1CC, 0x9AA3D9FC, 0xCB485C1F, 0x493BAF32, 0x89929FDB, 0x92B9709D,
+0xB8A2A72C, 0xD73F738C, 0x0D2EF09E, 0x9A3258D8, 0xE3176FFB, 0x334BB7CC, 0x13521D40, 0x9C924687,
+0x65901BFD, 0x8D6D8867, 0x88407D4B, 0xBCB5F1C8, 0x9F6F0AE1, 0x74451818, 0xA523C6F8, 0x5F31DB90,
+0x7E3442D3, 0x8A15E5FA, 0xF07F2690, 0x7FBD4FEB, 0xC039692C, 0x0E19B3AF, 0x45888EBE, 0x080DC758,
+0xAA03ABE9, 0x85D97CC0, 0x5AFEFAE0, 0x0CA5F0BD, 0x77B788BF, 0xFEAFDBD0, 0xE4D7089F, 0xE57379EF,
+0x80F95908, 0x7FCD2691, 0x3B13F885, 0xC07E262D, 0x0261C24D, 0x11C90813, 0x314CE47F, 0x30992C0F,
+0xF2BDB0F6, 0x0EBB3F71, 0x56D8BCFE, 0x42F1458B, 0x3CAF7550, 0x5B2B9A9C, 0x2D2B49FB, 0x2485DC65,
+0x4294E941, 0x420BCC87, 0xB82A0BEF, 0x2A1C5D6D, 0x4736F4D7, 0x7B6CB030, 0xC5827D10, 0x8FA91CFD,
+0xEF3BECCC, 0x76072B8B, 0x4BC1BA61, 0x67EA0404, 0x9235FE4C, 0xA4D1A9B2, 0xE2397C4C, 0x9BAC9D1E,
+0x051EDC24, 0x209F0A43, 0xC5ED419C, 0x1452EBB0, 0xB5EC1F9B, 0xE063F219, 0xC89C3BDF, 0x73590B45,
+0x7B5317DA, 0x7E90B4E4, 0x9171F204, 0x3610FAB2, 0xA1FDBCD5, 0x16F7F6E7, 0x4E5DB3D1, 0xFBFD3F3E,
+0xBF31ECC6, 0x5C1ACA15, 0x8E31E9DB, 0x7430C639, 0x006DEA83, 0xC84A4CC3, 0x8AB4187F, 0x6E07AF1A,
+0x3CCAB24F, 0x3ECF30C4, 0xA37209A1, 0xA7DEDCA6, 0xD50881FB, 0x027FCC7E, 0x518A7F13, 0x5E86A774,
+0x71A14CC1, 0xF7270A48, 0x88B72CCA, 0x0DA5E143, 0xCD105691, 0x985DD012, 0xC9AE173E, 0x88304FE0,
+0x25243705, 0x4A07B885, 0x4EA1DEAC, 0xD818516A, 0x09032EB6, 0xE0995ACE, 0x496247B6, 0xA0F8EF93,
+0x6125857A, 0x131C1D5B, 0x851CC06E, 0xF7E0EC0C, 0xECF85D1F, 0xF35A9897, 0x787587A1, 0x148C4990,
+0x800A6877, 0x3302E039, 0x81743A62, 0xBA346E72, 0x96133A44, 0xAA6B27D1, 0x8C290BAA, 0x6E82F09C,
+0x332CCE48, 0xDBE5B889, 0x52057EA8, 0xD610D34C, 0x36F0262E, 0x7975F3EB, 0xF125D2B6, 0xA52FFAA1,
+0x7CE133E4, 0x61D8CFDC, 0x23BC4590, 0x346AD139, 0x3BE41C96, 0xE76DCC14, 0x0CDC016D, 0xCDDA6006,
+0x519553BE, 0x891E9CD5, 0x094D28E6, 0xDC272A71, 0x63B1373E, 0xC24FC508, 0x4023AB8B, 0x78D67287,
+0x109581AB, 0xAE59C6DC, 0x99FD235A, 0x65DD46AC, 0x71EFB578, 0xC147B4F3, 0x4E544D70, 0x278BC0AE,
+0x6684F722, 0x03288050, 0x9918A424, 0x84E2F9A0, 0x7C5F823D, 0x22EAFD62, 0x2447DD50, 0x33687247,
+0xF8FAFD86, 0x61090FAF, 0x3926ECB4, 0x01CBBD21, 0x7B81FEDF, 0x5DE862DF, 0x2438CA58, 0xCCFECCBA,
+0xC93B8B2C, 0x5ABCD8B3, 0xB28ACAF1, 0xDE1DFA31, 0xC7CD98F6, 0x0CB4DE65, 0x4C4E425B, 0x3C7C4DB6,
+0x71FACBCA, 0x2C1579CB, 0xFB51884C, 0x9456683C, 0xC8EA5CC2, 0x17DEB4C7, 0x45684FE9, 0xB05FEE4A,
+0x9A84A9CB, 0x7D18FC79, 0x355BE103, 0x4BB3C7EC, 0xAC430960, 0x02C41787, 0x380FCBE5, 0xD67823C2,
+0xE7B5215F, 0x44641CAE, 0xCF7D6E75, 0x1F37BDEF, 0x729DAB82, 0xFE4C627C, 0xFAB7C367, 0xCA1E59EC,
+0x6EDBA117, 0x8ECCC16F, 0x8035AC94, 0x6902FCDA, 0x28FF9984, 0xB7F0D1BF, 0x902879DE, 0xDE1A1BAD,
+0x4E4719C9, 0xA87E6874, 0x7C498B1D, 0xCD5ECDC8, 0xBCBFC5F2, 0xB62F4B0C, 0x971B163B, 0x90798812,
+0x46E21464, 0x22744DDC, 0xD1DCE1D8, 0xE3EAD9B8, 0x400628A1, 0xCB74F366, 0xAAFB6569, 0x6D810D6B,
+0x9FFDE7B4, 0xB662D172, 0xB20B063D, 0x0245CF3A, 0x4BBA2951, 0xB232036B, 0xD2CE455E, 0xCD957EB8,
+0xEBFAA906, 0xCD31EA26, 0xD8BD70C4, 0x8BF75103, 0xFFDDC75D, 0xA0AEABB2, 0x6A553F78, 0xFF4FE56C,
+0xACE11DE8, 0x9960AE9F, 0xC07E0026, 0x98291D78, 0x6E1CAE56, 0x3A0B0ECD, 0x542741FA, 0x930ED730,
+0xC772715A, 0xB61B1F55, 0xD151AD9A, 0x6335633C, 0xF7C8BFFD, 0xC2FE68BE, 0x70837199, 0x48C0C642,
+0xF102B27A, 0xC26A59E9, 0x6F3D53C7, 0x35B90F86, 0x09A0E1C6, 0x1BB0F2D7, 0x20196B70, 0x5DC70AF8,
+0x0E9B2FD1, 0x11EAE1D7, 0x4DAEA805, 0x3E3E9149, 0x98127DBE, 0x00BA79F2, 0xB8B55321, 0x4590B044,
+0x9066F5A0, 0xF6F72428, 0xE37088EE, 0x92287721, 0x807A82A6, 0xE3DFF79F, 0xC2098A36, 0xE0C85FC4,
+0x14306A3D, 0x7EE8F0F2, 0x1663DC78, 0x3211F39E, 0x5F4574F0, 0xC614136A, 0x58EF9211, 0xD8318B70,
+0x55BCFE22, 0x8A4E361E, 0x806229D8, 0x8AF41E39, 0x1B968BEA, 0xCAB62E2C, 0x28B70F42, 0x66F2E71A,
+0x5AF1D50A, 0x98115609, 0x05BB67ED, 0x53FC76AB, 0x96531BFE, 0x68391722, 0x845E95FA, 0xD7A84C75,
+0xC064E30D, 0x4216A455, 0x7776DF2F, 0x71C3F582, 0x7C316267, 0x12119807, 0x65A8B2A8, 0x9BA0D2F5,
+0xE07C3053, 0x449A7C6E, 0x19B6BDC8, 0xF1F4BD41, 0x30AA2DAD, 0x1650B33A, 0xDD1421A8, 0x188FE3AF,
+0x05D53393, 0xF49710A0, 0x26DA1541, 0x195E72E5, 0x699FBEBD, 0x3D954602, 0xE15568E3, 0xF1788EBB,
+0xB0F789B5, 0x23C3D62E, 0x6D8FCD25, 0x403A6967, 0xD2511C52, 0x2847B38D, 0x6B25551F, 0xE7A95454,
+0x37CB8C55, 0xA7601FFA, 0x8B16D7AD, 0x35322BE0, 0x2564F0AE, 0xE998D5A8, 0x6305D494, 0x4D299DBD,
+0x625C0CCB, 0xF8BDE3F1, 0xDDCA8A78, 0xDD5D2781, 0x004AC64B, 0x722C025B, 0x44E9BF3F, 0x43913F05,
+0xCDD9E141, 0x04D22F39, 0xE4FCD5F2, 0x3ED75829, 0xE84C719D, 0xCAE7C834, 0x1D9822ED, 0x03D01408,
+0xCFBC026C, 0xA046A276, 0x9EFD4E4F, 0x7414E947, 0x561947A8, 0x0592567E, 0x12B4F417, 0xD02AC13E,
+0x6268735A, 0x78FFC9BA, 0x4C82E28F, 0x93F22E90, 0x190D3C9F, 0xDF1D7AA0, 0xABB32D46, 0x3BBBF33B,
+0x6E11F8F3, 0x5EFE1771, 0xA767E970, 0xCC7C9660, 0xDF41C174, 0xA50F608E, 0x22E6B48E, 0x2140166F,
+0xA175B585, 0x95325832, 0xA2233D93, 0x3AC4907F, 0xC0DEE1A3, 0x0E70CCE1, 0xCE41737F, 0xB3FF3805,
+0x2F055D54, 0xE1868CFE, 0xF5E85A21, 0xC6629996, 0x5A428F3E, 0x091EEE4B, 0xD50A9510, 0x2F75306D,
+0xB02F7708, 0x1AFFD74D, 0xF3CB3536, 0xBF859AAB, 0xA16BF199, 0x07097043, 0x08ACCB30, 0xD3CE34EB,
+0xB717505C, 0xDD224FE9, 0xA7502E33, 0x6AC379F3, 0x48EE263B, 0x73BEDA90, 0x590AB97B, 0x06E54B22,
+0x09077197, 0xEE6EF8D6, 0x5405CA5E, 0xACF4CBA9, 0x67551C8D, 0xB014D788, 0x6F2D39C1, 0x01098CCF,
+0x0BBEF4A6, 0x7D45BA72, 0xF31A7711, 0x0CF14B47, 0x1FD0090E, 0x18DB93DB, 0x4AC7063D, 0x7437DB4B,
+0xF3C46056, 0xDAA1B880, 0x36503247, 0xA84B4FCF, 0xDD8850E5, 0xB21C474B, 0xEF69DD44, 0x50EAB226,
+0x0B5D618C, 0x08E85968, 0x69C56499, 0x3DC8333A, 0x7098B594, 0x456C23D1, 0x753B68F4, 0x2CD01120,
+0x17765F51, 0x8A76EA56, 0x8AE8709D, 0x21A05F31, 0x306DAC1A, 0x7A52F90D, 0xF2EDAEB7, 0x137968DA,
+0x8123D779, 0x9E67F0D8, 0xE89BBDB8, 0x8AAF9267, 0x23682845, 0x94CEEFFB, 0xD5261096, 0xC9F7DE68,
+0x49BA1810, 0xB946995D, 0x6D0C6D23, 0x5EDFA795, 0xE653083E, 0x485208FB, 0x1B784522, 0x0C4F630B,
+0x0BEF62FA, 0xE218A432, 0x75B20EA1, 0xEA3B0626, 0xE6E3106A, 0x97C66D0A, 0xA11EFE43, 0xACA512DB,
+0x3D757B57, 0xF2F58461, 0x79EDDB8C, 0xD8D8F804, 0x77597522, 0x1A255DBB, 0x0D47F6AD, 0xB139C262,
+0xA260BC61, 0x0A39E9C7, 0xD41432AB, 0x8C8AC5C7, 0xF38FE112, 0x10DD5C1E, 0x48882F8E, 0x3C5C3BF1,
+0x011939CB, 0xE9E530CC, 0x199DCE72, 0xEDF649F7, 0x1C68561C, 0xBBA4A985, 0x9503B755, 0xB0DE43F3,
+0xC90FC450, 0x39B81C91, 0xD2243C18, 0x73185CF6, 0xCCD0C273, 0xADAB7B8C, 0x3FCBED9A, 0x52322B85,
+0xB1E7C04E, 0x719E6694, 0x6C4C6A20, 0x307D0BEA, 0x697BDD62, 0x00F62952, 0x0733F880, 0xEEFA4911,
+0xBEF4CEBB, 0x0E3D2AA5, 0x535252D1, 0x0374BEFB, 0xCEE45954, 0x17E89209, 0x4F1092F7, 0x7A07BB07,
+0x92AB8734, 0x96B1DBE3, 0x6525DE72, 0xD27D6FC5, 0x31856EE1, 0xDF7D277F, 0x8050B9FE, 0xF3D2F5F5,
+0x49CB81E4, 0x1E73FE68, 0x51463D82, 0xF52701B0, 0x1A99BD1A, 0xC1CDC401, 0x0523016F, 0x8A374CC0,
+0x47C70685, 0x2A9BC2E4, 0x2285B251, 0xBCCEEA3A, 0xB46F7710, 0x0FBD07F1, 0x386EB337, 0x02584C04,
+0x76BEDF93, 0xD0FDC2B9, 0x83EFD3D0, 0x1BC8F054, 0xB4396856, 0x7EC89F22, 0x62F96C4A, 0x4A400A06,
+0x75C0181B, 0x74E5D65B, 0xC69CA076, 0x853F81AE, 0x2121DAB1, 0x49B10900, 0x9D85CAAF, 0x71B5312B,
+0x064DE252, 0xF082EAB2, 0xF318C9AC, 0x14849D33, 0x3FCFCAB6, 0xDB276BCE, 0xC2327CF8, 0x10E31BFC,
+0x25D38623, 0x79F658D6, 0x02565041, 0x88D655BF, 0x3824429C, 0x3ADF6744, 0x25145D19, 0x9E0E652A,
+0xA1BD86B6, 0x8BBE606A, 0xB619A79F, 0xA8081FF5, 0xA8D8F56F, 0x947419F3, 0x47DAE9CF, 0x57C5F816,
+0x9F43E826, 0xAB48085D, 0x7509988B, 0xA3B6CA8C, 0x041BED13, 0xCF7B1B95, 0x8586E018, 0x6F461146,
+0x6EBAA36F, 0x1E523957, 0x3215DE63, 0xB8B9072A, 0x2110AA42, 0xA5C0AC63, 0x2FDB80DA, 0xAA8CCB95,
+0x4A81AA93, 0x70D5633E, 0xEF008FED, 0xD944BDD0, 0xAC3FECD0, 0x5BD7D102, 0x4730E199, 0x1DDE8852,
+0x5CB5EDA9, 0x9FCC2A80, 0x7705FB75, 0x75E4D2BF, 0x6AA68859, 0x57C5F3EE, 0x2CD4BC31, 0xDA514A37,
+0x169BA56A, 0xD23F57F6, 0x0979A2C2, 0x0A3A364A, 0x55639123, 0x3D4DD5FA, 0xD4D46EDB, 0x54DBDA9C,
+0x08D4880C, 0x8C51BB87, 0xF52BDE95, 0x8788C9B9, 0xC4A8E421, 0xFEC90892, 0xDBDF1BDC, 0x3BA11282,
+0x1B4EF419, 0x1F66149F, 0x4F87C50C, 0x84CAF391, 0x609475F9, 0xE3433100, 0x0E7BD904, 0xA72A2BD4,
+0x24C790FF, 0x62147859, 0x540158BB, 0x84D5DCC5, 0x0DAAE713, 0xDB24E135, 0x7DE9DC63, 0x19F97088,
+0x56523C86, 0x4308507D, 0xAC0DC988, 0x9AFE0F23, 0x3B745C1E, 0x5056677D, 0x47FA84B9, 0xC1016A3D,
+0xE0D655E5, 0x9BAE63CA, 0xF1018AC7, 0x8331AB6B, 0x73771826, 0x5388F030, 0x7CA1AFEF, 0xF4204403,
+0x1F3DE20B, 0x39EF8116, 0xB0AAB651, 0xA0EE922E, 0x2AA5BD23, 0x8F1A3B53, 0x3E1B0F5D, 0xB1ACC6C5,
+0x56851578, 0x140953CF, 0x582DBE50, 0xBAA29FCB, 0x83E38C58, 0x76BA8AE4, 0x450B40EA, 0x7594FE07,
+0x83C1918D, 0x7D3920FB, 0x737FA8DD, 0xBC8CBCE6, 0xD8ED022E, 0x75DFCB68, 0x12590E64, 0x6FEE5813,
+0xCA4AE9FE, 0x1FFE969A, 0x71F51EBE, 0xC53C3C2D, 0xCCE42D33, 0xD9B729F7, 0x41815AB7, 0xB076F4D0,
+0xB5CCB464, 0x2BDAE1D0, 0x8CF875EF, 0x88774C33, 0xE2F64B8E, 0xB99C2EA9, 0x4894A9B7, 0x3B0D9178,
+0x4D9DF4F1, 0x62A7197D, 0x5CD4DBD0, 0xA8C3E927, 0x1CDCE75B, 0xA6D16E7B, 0x108DADE3, 0xB44A5519,
+0xB07FDCE0, 0x136FCDA3, 0xC1ED5021, 0xA94E750F, 0xFD69FD6D, 0x11831247, 0xF059CB77, 0x135A2321,
+0xDEAA0BF9, 0x1C296811, 0xFA3C0A06, 0xE43CD1F6, 0x5BD81F9B, 0x235A5562, 0xDECE7BE2, 0x835DE303,
+0xBF786899, 0x83F99BB8, 0x15185A7D, 0xF7FEF333, 0x7C1E7522, 0x6812FD02, 0x4B777CDD, 0x473E0334,
+0xF07E33BC, 0x240A8D4F, 0xEBF141C3, 0xB332C18F, 0x156854F3, 0x38CDE76C, 0x878B6739, 0x99F71831,
+0x47E74B37, 0x2C69EBDA, 0xBE7E0487, 0xFCF3081B, 0xE118C50D, 0xCC133998, 0xAC5FB94F, 0xE8F6FC4A,
+0x564837E4, 0xCF811F12, 0x01766953, 0x46343004, 0xEC6C9591, 0x20C7ACB5, 0x08A0B51E, 0x99F74E65,
+0x2BE6F97F, 0xCC0E8462, 0xE780A93F, 0x0ED37D34, 0x1E56EA2C, 0xD476F4CB, 0x071A1A87, 0x8FE8B077,
+0xDDB9D7C6, 0xC2F51EBA, 0x47B4CC0A, 0x4C6C13A2, 0xC0F7823C, 0x0F48EB17, 0x57E5B7D5, 0xEA25BD3D,
+0xB010EF93, 0x9D7680D0, 0x851273C3, 0xF11C8A33, 0xD37DC0B2, 0x65ACD870, 0x5C4E9185, 0x06A439A1,
+0xAD1B104D, 0x4B4C18FE, 0x42710CB3, 0xB3077579, 0xAC370181, 0xD5E86852, 0x129AF632, 0x5190F064,
+0xE4BC81B5, 0xC1F083A0, 0xC71A9D62, 0xBA0E584E, 0x2775A676, 0x8E795A9A, 0x6C6DD21F, 0x946FD8D3,
+0x591B7A32, 0x1054A397, 0x157C3891, 0xAC47C347, 0x3D5FB48F, 0x50A925C5, 0x83622E88, 0xDD91AD47,
+0xB6221179, 0xB5DECFEC, 0x399046D2, 0xDE06A88D, 0x68E704D3, 0x7C728BD7, 0x8FA254B0, 0x87DC4AF5,
+0x691E3AF3, 0x1A535E73, 0xEE7CD2C9, 0x2AD2588E, 0xE1EBA1C8, 0x44EBFFA1, 0xDD5D3447, 0x733249A7,
+0x02FEF9FC, 0x68051D90, 0x189C7517, 0x716AF86B, 0xA1A5AE9C, 0x590B5017, 0xFE82576E, 0x04101402,
+0xEF363137, 0xAF5953B9, 0x137DCA43, 0xA79BE165, 0xAA9399E9, 0xDA6CA602, 0xDD651AE4, 0x823B54BA,
+0xAE4683D6, 0x4F7B6F6B, 0xE8146074, 0x9A1052CF, 0x84ABF6FD, 0xDF8A0955, 0xCF1ED673, 0x427D40D8,
+0xAA5AACDB, 0x01A42FD0, 0x5D465AAD, 0xAF839251, 0x9C53ACE8, 0x48266A2D, 0xF6381D4A, 0xC07C9C19,
+0x3824EC0E, 0xBD16D5AF, 0x4CE10C62, 0x1C115C33, 0xD09C282F, 0x9FB26A93, 0xDE00275D, 0xA72C56D8,
+0x6BB3D1AB, 0x2DC62D7B, 0x6651A5F8, 0xE4435D3C, 0xEEC4877B, 0x58C2607D, 0xFDFCF07D, 0xE0614A2A,
+0x83C9F49E, 0xF22AA5B7, 0x3A60B365, 0x125E9E9A, 0x8D598252, 0x8E20F246, 0x3F15E370, 0x8B624764,
+0x3CE91CCB, 0xC2557FFB, 0x14EEBC86, 0x41673B0A, 0xA8B7C66A, 0xC8C953AC, 0x9F1CD13F, 0xBA57AA81,
+0xEAEAE0A5, 0x9C0C1057, 0x62CC8D49, 0x5278902A, 0xF407174D, 0x96B53A55, 0xA36BD489, 0x299925E2,
+0x2551084D, 0x7163CAFE, 0x7AA8CE3F, 0x23E385DD, 0xA636F771, 0x8A958EF0, 0x88D9CB9F, 0xF0B95FEC,
+0xDEDAEC5C, 0x1B5777DD, 0x0AB3E084, 0x54FD48E1, 0x2F68FEED, 0x4CADDB24, 0x105FBFA8, 0x16902B8F,
+0x46C41413, 0xFFB4E5CE, 0x9CC5BB92, 0x218EED3A, 0x438605FF, 0x0FD277F2, 0x2A281329, 0x61453A8A,
+0xC4B4AA9C, 0x57538D39, 0x1484B05D, 0x816DA9A5, 0x5D10D939, 0x5FBE5334, 0xB18D686A, 0xA7DDBBF4,
+0x6126ADA6, 0x6B256678, 0xAB6B0AD8, 0x1F0EEB24, 0xFA5B3793, 0xD4855DFF, 0x4447F2BA, 0x72243A61,
+0xF9EB5A00, 0xB4D3363E, 0xAE4001BC, 0xBF9BF0A5, 0xA6BB0B00, 0xAFE5FFD4, 0x4C70EE91, 0x90FBA192,
+0x6EDEB5DE, 0x8731CDB8, 0x19755487, 0xA0E71F85, 0xCA4D0640, 0xE6758FDD, 0x5E44673F, 0x82BE18E9,
+0x485173CE, 0xC975507A, 0xFD7CA3FE, 0xEBD2CD73, 0x9411FED8, 0xCE5F7A39, 0x8F9697FF, 0x60A22477,
+0x32390B61, 0x09C7ECC0, 0x0A27E95B, 0xEF4CBD69, 0xE6EF9082, 0x10E641D4, 0xD8C06140, 0x3DCA3D27,
+0xA580F614, 0xD3CCA831, 0xF8AA5520, 0x6D2CFABA, 0xD1EE7097, 0xD49FBC17, 0x416DB277, 0x800822F9,
+0x7D4D04E5, 0x62352C02, 0x5B9024CB, 0x50825C8F, 0x1221A829, 0x8F7F60A9, 0xE4C3904B, 0x4C08AD72,
+0x6D529D71, 0xCC2F605A, 0xB3869410, 0x9960634C, 0x642CDC73, 0x4DB21DBF, 0x1BB79F46, 0xA8C62888,
+0x0663574B, 0xABE4B0E6, 0x9BE62DA7, 0xDB3F3542, 0xEA48ABC8, 0x848648E3, 0x2E8E4292, 0xFE090910,
+0x6BF9ADBB, 0xCA75E83F, 0xC41EA8A8, 0xF56AA14F, 0x3B566626, 0xDAEB8F03, 0x83214F62, 0xA06A551E,
+0xFE688C41, 0x2EA11914, 0x1FBD091A, 0xC337187C, 0xB1606DCA, 0xD0A11BA9, 0xF301D01B, 0x33E6874B,
+0x6BB11DEE, 0xE560E12A, 0x5EA6B8E8, 0x17BB6507, 0x680EA406, 0x643A9646, 0xAA0DA45A, 0xB7F229F7,
+0x6716ECD9, 0xA5A8DE26, 0x8D80B809, 0x3C13ACED, 0xFCFC760A, 0xDE9CA24E, 0xB0EA389E, 0xAB5530AC,
+0x135FC10C, 0x7B5C9B62, 0x1B4540DB, 0x6DB2B52E, 0xBD00E5C4, 0x9577CAEA, 0x30D0B807, 0x3755F10C,
+0x75C58CA9, 0x4A477B5A, 0xBA5809E4, 0xECCDBCC8, 0x469115D0, 0x2FF6459B, 0xB45773A0, 0x2AB373FD,
+0x1BD612CC, 0xDECD6833, 0xC3F6B638, 0x730D53D7, 0x7DEA0D25, 0x3D89E9C3, 0x28BD7C5D, 0xC0B529DD,
+0x61ADC233, 0xDE25BF1D, 0xF9DC0AE9, 0xF30F59BF, 0x2F258BE6, 0x63EBC06C, 0xC2DF05AD, 0xF7B0D30E,
+0x64D86783, 0xF964DD22, 0x658B0CE2, 0x8FAF8E18, 0x6883B3A3, 0xD25324A4, 0x5DA3CB81, 0xCB1D3AC3,
+0x839FAA92, 0xF81872AE, 0x35546A39, 0x3D2840CD, 0xAC873AD7, 0xC3F2DB03, 0x063D4213, 0x20567627,
+0xBAEAEB6B, 0x718A4FF6, 0x4873C995, 0xAE2E88CC, 0x105BFE63, 0x9F01A545, 0x41A7CF38, 0x0E9A9DF3,
+0x245EF3B3, 0x25698CEF, 0x8BF9319A, 0x2C4058D9, 0x5C6EE8CC, 0x34800C89, 0x2C7D09C9, 0xC28F4E9F,
+0x35F2BA62, 0xB5781AA8, 0x97A7403A, 0x7949003D, 0xBD8BF6A8, 0x120FF8B5, 0xDE1E94FD, 0x9265EAD3,
+0x0F2773CC, 0x60459C6B, 0xA32FC10A, 0x48D1F636, 0x8351E9BA, 0x7BBB9CDC, 0x822C5213, 0xA813F225,
+0x1ED40EB8, 0xD9FE05B4, 0xA22C38E8, 0x9211BD69, 0xF9CFB558, 0x390C9428, 0x30941CBC, 0xB0751939,
+0x1A135E7A, 0xF8EB51F0, 0xB37E9A1A, 0xCCEFE13C, 0xFC621DEC, 0xD17D7EE7, 0xB5FF386D, 0xB60D0A29,
+0x8027234B, 0xA9CB7FF5, 0x8F4D93C2, 0x7634EE56, 0x25B14B5A, 0x38BB9A02, 0xFB03EA24, 0x1878B020,
+0x19B55BBB, 0xD8ABE442, 0xF43B4394, 0xF329E9AB, 0x499CF974, 0xB25B3C0D, 0x6808B321, 0x41A77B18,
+0x7C255189, 0xCC88F470, 0x3204E970, 0xB18A67CE, 0x70D0FAA8, 0x00FFE94A, 0xA50451B7, 0xF359EEE9,
+0x2E49C650, 0xEE9A0B83, 0x9CFC85AA, 0x197999D9, 0x7DFD900E, 0xAEAC0BBB, 0x7C0F59BB, 0xE4F6A4F0,
+0x4886AFB5, 0xB0F75290, 0x1B262D6C, 0x62EFB392, 0x9B3F3CB7, 0x20AFAF2B, 0xEBD5C425, 0x76AE7942,
+0xA10BC28D, 0x68738401, 0x0B4AA1C9, 0xB570501C, 0x0F015213, 0x466EAC7D, 0xE704E087, 0x4922E7E4,
+0xBCD1D8B8, 0xD362B249, 0xDF6E6E0A, 0xF912BAE4, 0x890AC7EA, 0xFD7E0D4B, 0xCE0308DE, 0xFE3CD339,
+0x27BBCD3D, 0xAA9BAC31, 0x4CD1CAC1, 0xF920D6CB, 0x92FA6403, 0x1AD09EC4, 0xF40FC700, 0xC219B8E0,
+0xB3874E2A, 0x15DCA211, 0x9EF87183, 0xD00517E2, 0xF4DC194A, 0x23578B8E, 0xA1454CD5, 0x0EBB98CE,
+0xF6999087, 0x8E3A0CC9, 0x100D8D1E, 0x3E8C7165, 0x298D3D6D, 0x1EA5EF30, 0x330B37FA, 0x8F5B5337,
+0x6D27ED34, 0x6B6664A1, 0xDDDC5E11, 0xF8E38FF3, 0x30566E0D, 0x77D28622, 0x15D32ADE, 0xC6D404D2,
+0x7897BDE1, 0xAB9B30B8, 0xA55B0E8F, 0x274428BE, 0xD94168F9, 0x451DFB0E, 0x6F19CEB0, 0xA1502C0C,
+0xD95D819B, 0x17290D23, 0x1AC189AC, 0x5FE28A5B, 0xC46A12DC, 0xB9B08EF2, 0x36417B86, 0x27C42FDE,
+0x6553F9D2, 0x0C3640EA, 0xE9C7A2EE, 0xA8C26721, 0x476E4AD5, 0x21B1D7CB, 0xF6F08E14, 0x37FD4D44,
+0x5B52DE6A, 0xBF2BCCF0, 0x2AF55438, 0xB2737A9C, 0x7130B877, 0x9829F180, 0x20FCCE3B, 0xDEAD2EF3,
+0x840D65B7, 0x8D7DE4F5, 0x5F0C1820, 0xF4A88F4C, 0xBD226B8B, 0x7BB2BBF6, 0xFE5EA7CC, 0x3C035058,
+0xBBE34A3D, 0xE852A347, 0x0A2B2B3B, 0xDD20C393, 0x5AFFAF85, 0x7907EFD8, 0x989E00AA, 0x4161B283,
+0x335BFBD9, 0xF2574381, 0xC0BB1598, 0xE5DB5BBE, 0x67A882C0, 0x9A16C414, 0x747A51B5, 0x4C110E7F,
+0x65B2B8DD, 0xC926F946, 0x949A8A3B, 0x24F1154D, 0xBA004B4F, 0x4189BE37, 0xDC2D5992, 0xD1433DF2,
+0x0229CA1E, 0x91309F13, 0x3D2F94DB, 0xC662FB3D, 0xE5974F6D, 0x3BDB550E, 0xC33D35FD, 0x4B2C4EC8,
+0x93489237, 0x5BF1295D, 0xC810F271, 0x68CEDADD, 0x025BF70A, 0x48C9A829, 0x21C3D994, 0xF1849D72,
+0x5CA748AD, 0x676FF73F, 0xDAE05F90, 0x53D45E0B, 0x9B2C81BD, 0x2150284D, 0x65775F64, 0xCEC23622,
+0xC113C027, 0x93327CB3, 0x7AAEA3A1, 0x7ED66F8E, 0x44E89734, 0xA0F3D0B6, 0x6855F1D5, 0x52769CD4,
+0xCB9AB5FF, 0x46BC204B, 0xC8BE7BD1, 0xA180BD36, 0xE11F4DB8, 0x81D328A3, 0x3AEAB6CA, 0x7FAE6394,
+0xB7FA1C02, 0x56290A28, 0x589E7177, 0x044C48DF, 0x56DBF74F, 0x1AA71314, 0x3996E081, 0xDB4A3A3A,
+0xD8B646BA, 0xD790F874, 0x4B5B26CD, 0x819CEDE0, 0xBF616B4D, 0x24EA66A8, 0x4D418A03, 0xEBB9FF14,
+0xCA33365D, 0xC9D44C9E, 0xEF0DE5AB, 0x5F2012A2, 0x6C8237BF, 0x721FB6C0, 0x8136EE9C, 0x5719BE8C,
+0x541111DA, 0x08A9B65F, 0x3743C1A2, 0xED077559, 0x1BFA6604, 0x45AB0365, 0x5BDEC797, 0x4A1AA437,
+0x7E56D5ED, 0x46543D06, 0xA03961C5, 0xEF173B36, 0x3AEDAACD, 0xBA1E9B69, 0x6FE18895, 0xB432EF30,
+0xC58CEDF9, 0xF46AAC81, 0xB24DF39F, 0xB98DE309, 0x1A7F5F46, 0x0EB8555A, 0x1E9D3A91, 0x9081E604,
+0x137A2F18, 0xA1C8046F, 0xA975F521, 0xE0C2EAC0, 0x5DAF4A35, 0x462E861D, 0x88C9484B, 0xDEA56E5F,
+0x4D47B957, 0x453FD7A3, 0xE28B4802, 0x694D64FA, 0xD9C4D559, 0xCB199C28, 0x326F30CF, 0x6E0B0391,
+0x22A30705, 0x93E0F408, 0xF547F1EF, 0x38A451B1, 0xAAD221C6, 0x99D87A7A, 0x01B9CBF3, 0xB05A36BD,
+0x03FA3DD5, 0x970CB876, 0x7B380B23, 0x119E32D0, 0x316C9DF9, 0x66E00186, 0x9711402E, 0x4DA8B728,
+0xDE10A01C, 0x83A42CC0, 0xF25962B0, 0x0461F934, 0xF07D19FC, 0x45532150, 0x047E874B, 0xEABF49DC,
+0xBF7EF4D3, 0x2CF07A1D, 0x048849F3, 0x855E082C, 0xE10E0389, 0x17B184D5, 0xA30DB176, 0x2A76442F,
+0x5948A20C, 0x027EEEED, 0x55FA1481, 0x439143E8, 0x75D1403C, 0x6786B663, 0xFC0C916D, 0xE1D7D136,
+0xC8D79E34, 0xD72F51DD, 0x1371C890, 0xB8FB5D16, 0xD4B6C937, 0xF6F5659F, 0x88492DA0, 0x4C3A84D4,
+0x7F24CE28, 0xF97ED618, 0x99EC4A94, 0x27C180AB, 0xE869FB44, 0x81F9E6CC, 0x768DD258, 0x1E584148,
+0x89D0AF1A, 0x34E53712, 0xEF0F3FB0, 0xDCDA0A2D, 0x35DF0F92, 0xD6E89552, 0x5CA46F8D, 0x2C8ECEA8,
+0xA61C8A11, 0x45900932, 0x508C0711, 0x480D0DAA, 0x2954BB89, 0xB4B0C107, 0xB5AE8E8E, 0x71A8D77D,
+0x4272C6C8, 0x97C3AC71, 0x2980780F, 0x8C80AB31, 0xBFF97E9F, 0x36261A0E, 0xE1A39B35, 0x0E393A08,
+0x462780DA, 0x09C9B968, 0xA78DCA8D, 0x2644D421, 0x539B6143, 0x6177DCA7, 0xA9DB8ED3, 0x3D80D591,
+0x4CA42DB0, 0xE58046AA, 0xFD383867, 0x56510779, 0xB2DFC512, 0xD752BA96, 0x02A76802, 0x04136713,
+0x0A85EC95, 0x0836FEB5, 0x37FB5536, 0x0A3D37D0, 0x252EC517, 0x1305474A, 0x83DFCE9F, 0x326E6769,
+0x539886BA, 0xEFD90DB3, 0x856BD60B, 0x49DA1E0F, 0xFADC83F0, 0xA1B6137E, 0xBA509AD5, 0x66F7AF6B,
+0xB95ED975, 0xAAA689CB, 0x80D116D7, 0x52F6980F, 0x916D4E04, 0xAB4CD7E4, 0x01FADBC0, 0x458B97A0,
+0x969BC5C6, 0xBB4CAC7E, 0x99D204FD, 0x7C0AD914, 0x19375552, 0x031FAC87, 0xC537EB1D, 0xFBD4A1B5,
+0xD42F9CEE, 0x9C9155EB, 0x2D3D9AFA, 0xED936528, 0xE54FAA64, 0xBAECB1BD, 0x572065E2, 0xFB149CDD,
+0x9123AAB4, 0xA09554F8, 0xD014EBFE, 0x8C999CEA, 0x9F1423DC, 0x4D34ED14, 0xF356DC83, 0xCE0C92E4,
+0xFEF35157, 0xAF23F967, 0x081BB001, 0x63B7D3D2, 0x8482A508, 0x3C05CDCA, 0x1B1F437D, 0xDC9DAC82,
+0x7A65248D, 0x7FA77F93, 0x88A244D9, 0x3AB6D12A, 0x0A7F789C, 0xB5D5C9DF, 0x418AD548, 0x2DFCDEC3,
+0x9B214F1E, 0x3C8B8D00, 0xF277F73E, 0x5E470711, 0x31C4CC74, 0xFA35056D, 0xE8D273A3, 0xE8F3F176,
+0x68437A15, 0x0A60D2DB, 0x173AC40F, 0xE5276FA8, 0x55A4E44F, 0xE504356A, 0x3D713314, 0x94422465,
+0x79FBA384, 0x88D09001, 0x7C2058D6, 0xB9D38CA0, 0xC795D349, 0x8E17D367, 0x518A2BC7, 0x8278D017,
+0x68D059D8, 0x021D133E, 0xBD04F7A2, 0x0BC53AB1, 0x3C266547, 0xFEA53E7E, 0xB89BB8A2, 0x3A306B29,
+0xC903B8C1, 0xE6A4FDC1, 0xB79AB101, 0xBA074174, 0x02551A6D, 0xF566EDC4, 0xE8D703A8, 0x2E1DCBA0,
+0x20653149, 0x6C5C9308, 0x981B345C, 0xBCF25E2D, 0x86EC63D3, 0xF786BD64, 0xDCDF8DEF, 0x4E186697,
+0x4C6D6A07, 0x8DB3E1C2, 0xFE7B1490, 0x746A984E, 0xF7F6CDE5, 0x62B78EE9, 0x2CFF8BB0, 0xA75E3E0A,
+0xBBD59466, 0xBF6B2233, 0x7E39420B, 0x15D3645B, 0x0D4AC63D, 0x21865DF5, 0xB8F32407, 0xF3CDAE88,
+0x44EE644B, 0x7574F477, 0x000BC173, 0x890B075C, 0x3CD0A192, 0xCD78492D, 0xE66AD463, 0xBCE0EC6E,
+0x792BC40E, 0x7767C7C8, 0x954E8068, 0x5186799D, 0xC1D3E07F, 0xF45A9967, 0x092A924A, 0xA5A98B75,
+0x5E20EAD2, 0xF299EEC3, 0x2690369A, 0x4C23F9DF, 0x91304EEC, 0x9A72F264, 0xBD05A78B, 0xAFA3E5D5,
+0xEAE98CF9, 0xA68F7C73, 0x7AC702EF, 0xCC33F9FF, 0x54A0D305, 0x69F2A78F, 0xF403A44E, 0x6F946A8F,
+0xEB46BC1B, 0xFE7AEB15, 0x3F582F3B, 0xF5E87DDB, 0x8696EECB, 0x2EED111E, 0x186B0486, 0xF4A47266,
+0x4A5226F0, 0x879DBEB6, 0x0AD71D0B, 0x7C79D87F, 0xA4FAEEAC, 0x01D3E59C, 0xF1EE5A4A, 0x605286F3,
+0x55605B33, 0x59A485E2, 0x17A50470, 0x45A89808, 0x36A0CA87, 0x37F170CA, 0xDFC506C0, 0x6A33005F,
+0x822FFA4D, 0x40F5C634, 0x544E95CB, 0x16302529, 0x8331693C, 0x44047E3F, 0x9937D0B5, 0x15E1B80C,
+0x5D67F439, 0x5BD5CE7D, 0x086C8027, 0x709591CE, 0x17222F56, 0x08B77B61, 0x876E3D4F, 0x59CB713E,
+0x8652E3B7, 0x53EE2A64, 0x3D62B445, 0xEB41FFE1, 0xFA9B1DB9, 0xEEDFB967, 0xC61EB39A, 0x29CA0E67,
+0x6891781A, 0x006E4126, 0x52AC71CA, 0xF21CE350, 0xDF02F5E6, 0x0F463B19, 0xBB1CB136, 0x80B0EFF4,
+0x8714BEB6, 0xD3A343CC, 0x2D275C5C, 0x288AF62E, 0x742D9705, 0x32172CE0, 0xBABA36B4, 0xD3689458,
+0xBDA81C17, 0xF63C90F2, 0xCD921E00, 0x6D7B2B6F, 0x4FD33E8C, 0xDA0A634D, 0x38BE7C80, 0x1AE7F050,
+0x12071905, 0xDB785098, 0x3C61F700, 0xC5091808, 0xA58570C5, 0x38C5744A, 0xF86E909E, 0x9D387464,
+0x86DCC24B, 0x52D08E08, 0x7B6BB79E, 0xDF205616, 0x7452FF6E, 0x28C585CC, 0x8747D1BC, 0xEFA6A0E3,
+0x5202404D, 0x476E091D, 0x1EE306B2, 0xE931C177, 0x3D626B82, 0x675F025A, 0xC1C648F0, 0x38C31A91,
+0x41AF4153, 0x0F8ED774, 0xE156B178, 0xC83B40B0, 0x4D419C06, 0x572F9493, 0x4B73F946, 0x58FD3E1F,
+0x551B7D44, 0xCE5997F1, 0x25BF57CF, 0xB291DD13, 0xD28FB382, 0xFE2BE1DC, 0x857C7FE8, 0x45367C6B,
+0x3B386153, 0xA91D0B56, 0xC0B82C7A, 0xEEA3A72A, 0xE8AE9679, 0xBEBAFCFE, 0xB1CE15CF, 0x2797EB9B,
+0x17C3A46E, 0x26ABDF61, 0x3133025A, 0xA2913099, 0x1E118F74, 0x555CD525, 0xA3F116D9, 0x837C8DF7,
+0x123BB54F, 0x000DC950, 0xAEF0AE76, 0x67C03ADC, 0xEF18B928, 0xD6ABDDAB, 0x0C33EF74, 0xCB680355,
+0x4CC31531, 0x39E9C0D0, 0x0F9CC42A, 0xD0A203AC, 0x8168878C, 0x7A44711E, 0xB1D22F27, 0x9A129801,
+0x4D13688E, 0x0E1BD142, 0xAA491243, 0xF5E7CA16, 0xB1F50363, 0x6345A912, 0x8EFF7072, 0x83DBBCA0,
+0xAD3C31A1, 0xE7770C9F, 0xB817E5E1, 0xA63F768A, 0xDC0DCD53, 0x7601AC4A, 0x75994F21, 0xE5853E24,
+0x8C702861, 0xD7F5F7BF, 0x33DEC7C8, 0xDC0EC19B, 0x3CCDC59D, 0x2B9D990B, 0x2BA6941F, 0x7C22C5BB,
+0x82F34FCC, 0x07197A7F, 0x0501CEEA, 0xBEBDCF12, 0x8A0F4A89, 0xB0732A51, 0x04D7404A, 0x16606EE6,
+0x82EAF456, 0x7E1F67DB, 0xED5B916C, 0x2D628592, 0x3D9A6B43, 0x31AE3097, 0x8F8FEDF6, 0x50AD0B5B,
+0x809A76DA, 0xB8984058, 0xF14EE53B, 0xEB4F2476, 0xF491733D, 0x20F98402, 0x50F962DC, 0x386EF106,
+0xD45A0458, 0x5C9F21EB, 0x2C69F46E, 0x13360487, 0xD48C060A, 0xEC448A60, 0x471CEF96, 0x2C8A179C,
+0xD8970720, 0x9EA6F678, 0x89A12D55, 0x5E3204B6, 0x78297A03, 0xF6E1B6BB, 0x9E6EBAAA, 0x03B1537B,
+0x20273BCD, 0xBBEBA4BF, 0x6ECF903C, 0xEA838D8F, 0xF52D2D3A, 0x1ADCC575, 0x8E8B90C3, 0xF9A51904,
+0x17C9D832, 0x44E2E0D4, 0x1693BFF2, 0xB64681ED, 0xC4926FEB, 0x67986DC4, 0xC965CF53, 0xC847808A,
+0x0BF59A08, 0x59DDCBD9, 0x1E77919F, 0xC026DB73, 0xE5E673A8, 0xB1BE042B, 0x89AB02D3, 0xD60EB5FD,
+0xC6158F80, 0x574F9654, 0xF5A9382A, 0x9FA2019A, 0x57F35762, 0xC580D523, 0xB74E0399, 0x6345423D,
+0x1D7643AB, 0x5D09A388, 0xA8C4C384, 0xF8845246, 0x6C6EAB95, 0x3DD290E7, 0x152A3968, 0xFBEF47F8,
+0xDE1503F8, 0x10A5EF6C, 0x7D429001, 0xDCFC3F69, 0xE30D7550, 0x5BA635F4, 0x6CD5071C, 0xEEA3BB1A,
+0xEABFCD1F, 0x345A45F3, 0xD878F283, 0x83935259, 0xF7F2B94D, 0xC9B5E2D8, 0xF7A23AA8, 0xAC45E625,
+0xDDB7F69C, 0x6EE20CA4, 0xF061DCB0, 0xC427BBD8, 0x045A677B, 0x0DB00C1F, 0x3F846275, 0xBA4B0C31,
+0xC9F86A0A, 0x0A494483, 0xB4122F97, 0x7095DFC0, 0xD402FDF7, 0x3D24E70B, 0x16C85996, 0xEFCE6796,
+0x784B2932, 0x11E95D60, 0x5AAB4F33, 0xF921D20C, 0xB661AF8D, 0x91E1C21C, 0x7A306D38, 0xE41D7CCD,
+0x6888215C, 0x490F0602, 0xB198B755, 0x5ED14867, 0x03F835FD, 0x29A62C7C, 0x0000004F, 0xA79E0101,
+0xFEFF3544, 0x3C98AFB8, 0xC1467146, 0x5BEEEEC8, 0x24570509, 0x4CDF2576, 0xD7856959, 0xA7A1BC26,
+0x58CE624D, 0xC11F9EDB, 0xA26DFCCD, 0x1AADA3DA, 0x4E09226C, 0x2CE2251F, 0xDD89442A, 0xE24EB10F,
+0x546649F0, 0x83818288, 0x4777198F, 0xF4AD8C82, 0x5FE1C8BA, 0x7E20B2E0, 0x8A2A9169, 0x77A0E99E,
+0x73AD67CA, 0x33CEF1C4, 0x89F6DDFD, 0x252B5B7F, 0x069BA595, 0x9DF59330, 0xFCECD178, 0xDDA96458,
+0xFBCAD88D, 0x3DA510AB, 0x5A051B65, 0x65C86D5E, 0x8BAC084C, 0x4AA69982, 0x7001F7BC, 0x10D32362,
+0x6C523AC0, 0xA23B3FE0, 0x5096F16A, 0xADE2810C, 0x42A01276, 0xAC07B529, 0x355B1005, 0xAF66B735,
+0x7A0738E5, 0xB70E16C9, 0x4FB62252, 0x467D7A34, 0x14009F32, 0xAB34C48F, 0x9A1AAB6B, 0x102F8509,
+0x56654309, 0x6C655E0F, 0x9FB84A8F, 0xEAC94EE8, 0xE8863BD6, 0x72830E5F, 0x55942CEA, 0xBFDC3442,
+0xE74950E4, 0x29064969, 0xAEF7DC88, 0x5366DCE5, 0x74416DDA, 0xA20594E7, 0x7BEDDF3C, 0x596505F1,
+0xE02C14ED, 0xF65FECE3, 0x5EAC9A61, 0x8A409E1F, 0x1DDCF0A4, 0x41DBF420, 0xEEED1938, 0x9EFC492D,
+0x8EAB6EAD, 0x4C3EB594, 0x5F843159, 0x2CFE9F0B, 0xF60826ED, 0x1631A110, 0x79B2D119, 0x734589D0,
+0xFBC2DB3C, 0xCAB7A8D8, 0xC53A45E5, 0x4AD33AEA, 0x82A9E65E, 0xA4C3A845, 0x2FE9E11C, 0x8D1DC4CE,
+0xA610E588, 0x942F2871, 0x287CDDD3, 0xD2EDB547, 0x9F64CC25, 0xB64A798E, 0x30B864DC, 0xAB1EB29D,
+0xB364EAB2, 0x030CF607, 0x87124186, 0x7865F9A2, 0xA321D291, 0xF4163FFF, 0x0A519623, 0x0550AB81,
+0x8D9AED7A, 0x66390CEC, 0x8B1D70E0, 0x793FFC33, 0x0F7EDB4B, 0xEFFDF6FA, 0x25B06624, 0x9ACF4175,
+0x3EC0605A, 0xC78D4BB7, 0x2D58526C, 0xE2926573, 0xE54BB420, 0x3384E049, 0xA99301FF, 0x4FA6F76A,
+0x1FFAD5EC, 0x874AC8C7, 0x100DE0C3, 0xF4B07AA0, 0x032014F0, 0xCCCF330E, 0xC4ABB601, 0x31CEF843,
+0x74CB018E, 0x4959022D, 0xD73A15C7, 0x14B0B12A, 0xA097CC68, 0x6B60E64F, 0x199FCFCA, 0xB143B8E8,
+0x61338DBC, 0x9A53F544, 0x838035B4, 0xBA5A630E, 0xC8270D97, 0xE3130730, 0x4E203368, 0x28EF35D4,
+0x5505F4F0, 0xE161F9DF, 0xCBD75749, 0x60715C19, 0x6A84C0AB, 0xDB967830, 0x3D2AB9A4, 0x60F1759D,
+0x09575598, 0x8BEC5BBF, 0x6E4B0762, 0x1FB9EFA6, 0xF29971E4, 0xEF6667BC, 0xCF060C10, 0x74BC4980,
+0x6B0F5414, 0xC34208B6, 0xAC956E0B, 0x08331FAD, 0x192C6546, 0x1C581476, 0x0D191626, 0x49EECC6B,
+0x787E83E3, 0x9195E1E4, 0x636A4D0D, 0xCB00EAB5, 0xBB103E7F, 0xE5FBF534, 0x90EABB9B, 0x1ED502B2,
+0x0B6B9274, 0x98184E96, 0xDCB29342, 0x526B94FC, 0xD87BA4C7, 0x79A41309, 0x4D46992F, 0xD9494C5E,
+0x3E1DFF65, 0xF4B1A9CD, 0xE3F3E719, 0x2E4E117A, 0x2DE3D962, 0x15593C94, 0x7F7FEE20, 0x8CB06486,
+0x04C2EC42, 0x7F484295, 0x9BA9B339, 0xA58B2D4B, 0x9B7042A7, 0xB1EDAF14, 0xDF70F445, 0x7003D0F1,
+0x6DC0D801, 0x78D87330, 0xCC2ED04B, 0x19755EF0, 0x5346D75A, 0x9F1852E9, 0xC155AA86, 0xE27818EF,
+0x38F32C53, 0xBE0CDC91, 0xC8B3F2C2, 0x0162DC10, 0x53F039C7, 0xC370BACD, 0xB1F9CCA6, 0xD4E5984D,
+0x48A307DC, 0x60BA99E4, 0x0B4A6E2A, 0x74718523, 0x260E34D1, 0x068E9645, 0x82733DB0, 0xBD0B2B9E,
+0xE8F04E28, 0x64CD294D, 0xD8730602, 0x433288C0, 0x61C4FCE8, 0xC211DC58, 0x66C728A7, 0xCF4B3050,
+0xD6A8009E, 0xB7E84759, 0x1CE8C3A8, 0x6AA388A7, 0x42A8A046, 0xBE9E3ECA, 0x0000B89B, 0x9A410100,
+0x0A4F19AA, 0x5470E37F, 0x3709F2B5, 0x937B43C6, 0xCFEF3C23, 0x232D3311, 0x54626F60, 0x61D6B96E,
+0x0D6AA6D7, 0xA9B35C30, 0xE9F55989, 0x36CCA040, 0x776E0656, 0x2D752C56, 0x5995C591, 0x252141C8,
+0xC0952BB5, 0xF3FD85FA, 0x1E9D1840, 0xAB57C1FB, 0xF6C23C20, 0xE0E68A24, 0x897C0857, 0xC8C8DE46,
+0x7FCE3F6D, 0x4F79478B, 0xE1B9FF27, 0x482949F0, 0xB799983E, 0x97E28FDE, 0x4EDAF3F3, 0xA95C2611,
+0x32496782, 0xEF08CFB4, 0x2B16B394, 0x6350D48C, 0x029621A9, 0xB07079FD, 0x14702D5D, 0x22A29D08,
+0x5CCFA840, 0x60299946, 0x736ADACC, 0x709A8530, 0x17E66AF8, 0x26E93EC0, 0xB027ECA5, 0x3BEF116F,
+0xA3896BED, 0x247E5081, 0x4D640AD0, 0x8111AF1A, 0x4B3AB6B0, 0xC1B31E0F, 0xB7E0FD63, 0x7D04349B,
+0xED5E38BE, 0xB5D8EED2, 0x2BAE2825, 0x84D9E6BA, 0xDEEEFCE5, 0xADFEC052, 0xD1F3857E, 0xDFB5A7EA,
+0x640CBCA4, 0x35FD352B, 0x4A2FDD8F, 0xBC09ED03, 0xD904491D, 0x9FF441F1, 0xD0B0CF02, 0x87638365,
+0x9C95135E, 0x299F970B, 0x729FD279, 0x9DFED77B, 0x331988E4, 0xC54C40C9, 0x32EF2915, 0x904260A6,
+0x99FA4211, 0xFA0F9272, 0xAE6F7B7D, 0x158F40DC, 0x29680C45, 0xEC2A60AB, 0xF8E14512, 0x50216269,
+0x2611835A, 0x35257110, 0xCE28C67E, 0x5F8B389E, 0x192AD20D, 0xE49C5529, 0x6794ED1F, 0x3651799E,
+0x896B49E0, 0x2333BE0D, 0xE5146DD6, 0x02C1486E, 0x751C9D0D, 0xCABC1BD9, 0xC6FABFCD, 0x30E2B3A2,
+0xD5D04A16, 0xAEC05498, 0xF0A4DD4B, 0x337CD04A, 0x4511977A, 0xE35E8C46, 0x91A63C31, 0x6E077174,
+0xFBC4F449, 0xB86543A0, 0x30DFF3B5, 0xFD1DC8A2, 0x9819C68A, 0xE5F7F0B0, 0x225A2822, 0x7FF9D096,
+0x8A5AA35C, 0x08EC5D63, 0xC4B3CEE7, 0x2A081ED9, 0x25307958, 0x49574261, 0x25F43A90, 0x4B2D4CF1,
+0xF2049BB6, 0xF9A47250, 0x91EF9D2D, 0xCE6DD87C, 0x9D44C791, 0xC023018B, 0xF5529222, 0xB97438BB,
+0x64FA2C28, 0x8BF4DA1E, 0x721B1D97, 0xFA48BEDB, 0xDC1DA432, 0x4D5E6399, 0x3DF95BDD, 0x3E2C4C6A,
+0xFC2C4B57, 0x341BA69C, 0xA6D8A7D6, 0xDCE9C249, 0xA090A356, 0xB9BAEF02, 0x36CC96F2, 0xFCF972DB,
+0xC14BD2E3, 0x3C77773A, 0x544273DF, 0xA114BD86, 0x99880ABA, 0x1C01EACD, 0x30CE0FA8, 0xA8D79B98,
+0xE839E95C, 0x1C0B2149, 0xB7243D3F, 0xA3AA3FCF, 0x966CC1F6, 0x966D614A, 0x43A7ED7A, 0xFDAE088A,
+0x800794E2, 0x913265BD, 0xA6B401ED, 0x3ABF19FB, 0x52278176, 0x2511B845, 0x5E151E67, 0xA0148B1A,
+0x9948A5F6, 0xA85D0C00, 0x1468682C, 0xB53880BC, 0x9E1BBDD0, 0xE8C85AC4, 0x070F70A9, 0xE6A1C386,
+0xA829F935, 0xCB18C37B, 0x1ECC98AC, 0x1FD380F4, 0x183C53AE, 0x5AD0CB8E, 0x3675493B, 0x84C56DC7,
+0xC1FD4655, 0x1B629181, 0x3BB5FF83, 0x041B33AF, 0x2297BC13, 0xDE6FE320, 0xF8D99C1C, 0x49568300,
+0x0AE10E01, 0xF08DAD66, 0xA388C3FD, 0xC562F2AC, 0x0D08FBB6, 0x66AD3C71, 0x68CC76F8, 0xC6DB0597,
+0xEACCE0D4, 0x21742352, 0x97200DB9, 0x36994F6E, 0x6247994C, 0xC7C575CE, 0xFC71FB87, 0xBCB5BC43,
+0x817B20A9, 0x52E503BA, 0xC447E144, 0xF559FDEB, 0xAA2479AF, 0xCBAF39DA, 0x3048B2FB, 0x29B1DBC9,
+0x77692911, 0x987B77B8, 0x3BA03CB7, 0xBDF71CF8, 0x5024E9C4, 0xF95CD9BD, 0x7B1DAB91, 0x9E502A35,
+0x7C48DADB, 0x8EF4DF4C, 0x9870F6D2, 0xCBB03A29, 0x33AFC4BA, 0x2A8A5AE1, 0xCE24B543, 0xDD3EDAAF,
+0xE04C0966, 0xBF606A35, 0x415A67C5, 0x5A3F01D3, 0xF82F9267, 0xC1E10EBC, 0xC645F4F6, 0x7FCFF069,
+0xA50533AD, 0x90693589, 0xED86B3A0, 0x20AD37A6, 0xA74573D4, 0x551C7F1B, 0xCCB1DFC8, 0x5590FA25,
+0x65BB3D29, 0x34D41374, 0xDE7B18CC, 0x205D3617, 0xDA6EB9BF, 0xF98A94C2, 0x033D8FDB, 0x1168D0F8,
+0xBC7E23A0, 0x587B7A0B, 0x4A96435A, 0x32595968, 0xB0858FD3, 0xDF6FA744, 0x4218FC10, 0xDE5E5A3E,
+0x220ADA0E, 0x6CF9E26D, 0x26EA682B, 0x69C404D1, 0x8C7ECC2F, 0xF9B9D921, 0xFAAD26FD, 0xB693D470,
+0xE2537967, 0xC43BF1D2, 0xDA3F653F, 0x9452562D, 0x69D8BE0F, 0xDBFAF9F5, 0x9E0B0753, 0x9314FEBC,
+0xBF3FDFA4, 0x35389492, 0x1536B448, 0x2F6A5E1A, 0x83856458, 0xD4ED9AAC, 0x3B84BC76, 0x4D3F0023,
+0x6BA21536, 0x71CA39D7, 0x40F08C24, 0x056AFCCE, 0x664B168E, 0xAE23CD14, 0x1E55F67E, 0x79A9C064,
+0x028F617D, 0x0CD27087, 0x221B355A, 0xE8D9588E, 0x78A59785, 0x8EA997D2, 0x0E15DB72, 0x825C9AA4,
+0x9513F76C, 0xCC4F7314, 0x6E7A0B3D, 0x777CCB71, 0xC57C366D, 0xBE5885BB, 0x094330D5, 0x1D41DD5F,
+0x716836B5, 0x38087BFE, 0x905B3F5F, 0xC24ACA52, 0x5009D76C, 0x14F4F0F9, 0xDCFD6C5D, 0x52C7584F,
+0xBCD3026B, 0x9204EF76, 0xB682BCBA, 0x770917A8, 0x7F6DDE9E, 0x68038661, 0x6BA9771A, 0x63E66AC7,
+0xBB13BAE4, 0x1B6B80B1, 0xB3542B48, 0xA087CAB8, 0xBE6FB5FE, 0xAC6424AF, 0xD718D934, 0xC23AEBBB,
+0xC440DF88, 0xACD22080, 0x64253019, 0xF17C6EE8, 0xE7FEF61D, 0x740D085B, 0x39FCFCB3, 0xFA51D8FF,
+0xF5CB6544, 0x21A9E9A8, 0x367577AD, 0xE32E39F7, 0x770C9CEA, 0xC3DD8EDC, 0xA536DA3A, 0x1625998A,
+0x8325E5E9, 0xFD0E3B89, 0x0A9097FA, 0x4B6B37AE, 0x89F28A38, 0xD87C4AAB, 0x2E3363E1, 0xB89E655C,
+0x5926649F, 0xCDCA8C3D, 0x19341118, 0x503C22AD, 0x54521049, 0xA64020BF, 0x094930B6, 0x65A3B3A3,
+0x6E6D27FA, 0xCB2F4AF2, 0x3A5FFD05, 0x2F0D599A, 0xA8B28E51, 0x3E74D568, 0xD56B6DD9, 0xE2FB9B2E,
+0x90CD624D, 0x589D953C, 0xAFA15E6C, 0x4A2AB2BB, 0xC252FA05, 0x7C2968EA, 0xA3128E8B, 0x6CF5009A,
+0x346ACB3F, 0x80CBEDF8, 0x0FCEC1BF, 0x810119F2, 0xF0D8D107, 0x7B9138FA, 0xA9168F4D, 0x530BDD99,
+0xEBCBD332, 0x55674D7A, 0xB2349312, 0x005BD297, 0x4A73920F, 0xE0FBD530, 0x975E5DEC, 0x23073902,
+0x96FD67A6, 0x3528C488, 0x74AA3921, 0xEAB3B7DC, 0x4EF400D7, 0x2F3E443D, 0x666FC782, 0x6D03A21D,
+0x3EBE99FB, 0x06AE16FA, 0x945E0377, 0x39088D67, 0x3B116A44, 0x2AAFE907, 0xA19DEB98, 0xEFD07BE5,
+0x9CD1188B, 0x6284C7B9, 0xE7414438, 0x7F2E27D2, 0xA5F8339A, 0xACC1BF77, 0xD4BA3B8D, 0xD2850CE2,
+0xD2D5A924, 0x44656637, 0x22155E72, 0x0429A4B8, 0x2FD0BA03, 0x7BEFB68A, 0x530F269A, 0xFD62B057,
+0x322A5B3D, 0x507911D8, 0xBEA33968, 0xF20B4867, 0xF3B3F8B0, 0xC596CE5C, 0xFC785228, 0x8BB83A72,
+0x3F5A4F36, 0x0183613F, 0x413025DA, 0x34C0C663, 0x6C1B1A9D, 0xE49E3025, 0x30FD0958, 0x410E4526,
+0x052AE4C9, 0xE3C1ECA2, 0x4681A517, 0xAD92324E, 0x6F5C9182, 0x12C789C0, 0x0A204546, 0xF0EB9B2E,
+0x9113AD08, 0xB80F2518, 0x8096B27D, 0x83C48368, 0xCDCAF928, 0xB5CA6AB7, 0x08F8BE09, 0xDECC20A9,
+0x05CB67BB, 0x60CD6AF7, 0x20D377F5, 0x2769E927, 0x697AD656, 0xF5A4AF5A, 0xFC60EE0B, 0x61035DE9,
+0xE857AADF, 0x2CDCE7BD, 0x0F7D61AF, 0xBF9E6C26, 0x9D44053C, 0x0ABF565E, 0xA15711BC, 0xA2CF065F,
+0xE856FDC9, 0x526C6DB3, 0xE3C1993D, 0x36CF797A, 0xAC02A3E1, 0xC07DDE2C, 0xF391EDDB, 0x5B34A52B,
+0x8AB06CD7, 0xC695804A, 0xE440C6D7, 0x2C97CA6A, 0xA712C95F, 0xE904203A, 0x0A6ED7CF, 0x4A8041A7,
+0xD9418187, 0x845FB3F3, 0x209745E0, 0xC0FBCB90, 0x89EFE445, 0x2326B2EA, 0x6F502B6C, 0xDAB6BA41,
+0x8AA8EA31, 0x5064A773, 0xB6015550, 0xBB8EE342, 0x81B92D4E, 0x897AF4F1, 0xE1077765, 0x86FD8D4D,
+0xE6DEA9D8, 0x68625C11, 0xDEE8A818, 0x2CB5CA33, 0xC7A576DE, 0x28010DF8, 0xA3F823AA, 0x683CFDC4,
+0xEF65B128, 0x8555FEA3, 0xFE59F15A, 0xF119FD95, 0x7AD903F3, 0x80A6DFF8, 0x4D2F79B3, 0x903D6379,
+0xA7665252, 0x5D025BE2, 0xF23896FA, 0x77E510BE, 0x9BC9A1E1, 0x307D7406, 0x96467C30, 0xBE41810D,
+0xD515EE50, 0xC0861788, 0x2C2B61D4, 0x45CF38C5, 0x2B566A3F, 0x9AA8218F, 0xBDBA1A81, 0xB931A611,
+0xD4CE862C, 0x5B9F7692, 0x89575C40, 0xF7153B5D, 0x79479018, 0x62B8C492, 0x828B12B6, 0xFADF1BB9,
+0xCBB77822, 0xA9392CDB, 0xF5132822, 0x76ACC659, 0x3781770D, 0xAD6DDAAF, 0xB2ACB606, 0xBD93F407,
+0x4B3ECB41, 0xA3253B9E, 0x13B8EC00, 0xE9214FA8, 0x2A1D076D, 0x8A334A15, 0x1C715443, 0xED67DCAC,
+0x518C443D, 0xE4832E00, 0x3D184B52, 0x2F26EEDF, 0x99416D88, 0x0DDB4269, 0x70401344, 0x10013777,
+0x83EC27C7, 0x7330587E, 0xBDB485F3, 0x7B627349, 0x5B29C4EF, 0x3F3DE5D9, 0xBC1F37CB, 0x16CECBB0,
+0x795CCFB5, 0x46279EE0, 0xECE6C286, 0xE0C17095, 0x70140327, 0x9B518B29, 0xC1042F1F, 0x4A9681BE,
+0x037FAAE4, 0x0B80A41D, 0x5C41DCE2, 0xE967BD7B, 0x535E2190, 0x65B69D54, 0x26DEED86, 0xB3C7641E,
+0xDF76C452, 0x358366BB, 0xD68407CA, 0x72C10F54, 0xD1A00435, 0x889BE09E, 0x0ED23D27, 0x0A616A2B,
+0xC2A6B551, 0xC0BE4144, 0x0DD05B0E, 0xF7801C42, 0xCE246E0F, 0x76A602A2, 0x8A847231, 0x25AF1FC1,
+0xA693402E, 0x7B0B7481, 0x2C9F4E20, 0x73445388, 0xCE4206D1, 0xBB6D3C7D, 0x316D7877, 0xE2036101,
+0xD90D0916, 0x366BEFE2, 0xECE4E78C, 0xF305DA8C, 0x4C4BE418, 0x0CE05169, 0xCCBC694D, 0xB16B93B5,
+0xD54A599A, 0x0E1433E6, 0x48B1DD77, 0xFCEF48C9, 0x468AF5C7, 0x3CA3F12A, 0xA973CF22, 0xF7CBA054,
+0xADA56679, 0x93719997, 0x7700C611, 0xE750E19D, 0x0575B87C, 0xB7870ED2, 0x65947675, 0xCD4F739A,
+0x94CF7794, 0x26D23AAC, 0xBBF4AEB7, 0x541126BA, 0x06AD2D46, 0x9840E3D9, 0xA32766E9, 0x9CD7DC51,
+0x101301B3, 0x413CEE46, 0x07933A83, 0xE9B29F80, 0x5EB44321, 0xCB39A8EE, 0x26A5CE46, 0xAF3F0984,
+0xA1CC2471, 0x016FA075, 0x0C90094A, 0x8D7DA04A, 0x8B91E629, 0x300257CA, 0xDA80B771, 0x0A088759,
+0xD2350A0B, 0x2CF8E42C, 0x3EECFDDE, 0x62A3BAB9, 0x1651514A, 0xF2FAD334, 0xC0F918AA, 0x5A658115,
+0x390E8FC1, 0x103C9297, 0xBE49131A, 0xE3A1142E, 0x583A6C54, 0x9575A6DA, 0x734FFDD9, 0xCAFCC505,
+0xD56FC209, 0x4BE0567D, 0xD7085C90, 0xC64C2470, 0x844F6ED7, 0x1F96728E, 0xADDB7F86, 0xEAAFB0F7,
+0x4298D880, 0x2BD28035, 0x644600F3, 0x0098C84F, 0x9E257311, 0xE1A46D66, 0x1BCBA494, 0x06F9B1CF,
+0xBBDD0970, 0x3286B2F0, 0x06DFE30A, 0xFED369BC, 0x0FCC25D7, 0x2698C48A, 0x69395229, 0xA2C022A3,
+0x33B17499, 0x9C5DD724, 0x0B4A23A6, 0xAA476627, 0x771C8567, 0xD57D2B09, 0x4AB59600, 0xFCBA219E,
+0x89EAC46F, 0x922E7D57, 0x32084AF2, 0x37E3A1A3, 0x87D1862D, 0xF1888D08, 0x04764CF2, 0xB0F441A4,
+0xED7D1D5D, 0x511FA1E4, 0x9BDC2763, 0x7F9B1FCF, 0x7FA53B11, 0xC8FC69B1, 0xB139F724, 0x3E7BD9E4,
+0xC3A43B90, 0xD358F8B0, 0x985EDCC7, 0xA2E63077, 0x8E1CDFC6, 0x82231241, 0xC0EAC8B9, 0x11CD2FC4,
+0x5F159CB0, 0xF521AF0F, 0xF798A454, 0x818C6C0D, 0x5ED90343, 0xF65342D5, 0x26568E12, 0x5C7F743E,
+0x6E9F4115, 0x7DE3CB53, 0x21C22D18, 0x089C66CC, 0x4F6E646B, 0x84380119, 0x0804CC0A, 0x6B1BBB9B,
+0x9AFF9A2B, 0x5767022B, 0x1CA9CBB1, 0xBAAA2DFE, 0xC3F3A974, 0xAE1731EC, 0x8EFA6190, 0x7BA1811C,
+0x467B743F, 0xA7D5FC42, 0xCEE210A4, 0xAE2976BB, 0x09AA9EF7, 0x1FD8128D, 0x1E13DB45, 0xADF8ECEF,
+0x00F366B4, 0x102D1427, 0xE660BEA7, 0xD19164A1, 0xBD9E3B39, 0x7C6F7328, 0x11526146, 0x1DF978C5,
+0x920645AF, 0x443E9807, 0x43612F28, 0xF48C07A0, 0x26C2A36A, 0xE72C5E26, 0x76FD7B1C, 0x1165D7B8,
+0x7CC41D30, 0x7FC1EB34, 0xEE742220, 0xAB253C86, 0x00F61BBD, 0x6FD36744, 0x89DB91F1, 0x89D71BBB,
+0xEF390C16, 0xFDBAE7AC, 0x7721BC08, 0x8042F91E, 0xADF7190B, 0x44E1FD2E, 0x233C2171, 0xCBDF094D,
+0x8FD805A5, 0xF5AA3695, 0x827D297E, 0xB467880A, 0xBA225019, 0x8797D02C, 0xA47F19B4, 0x46877AC4,
+0x4316515B, 0xF1D39311, 0x052FAFFB, 0x62459D5F, 0xD26566AF, 0xEFB68148, 0xF14C973E, 0xFE5E3E2D,
+0x4D3DC7C7, 0xC6A7A010, 0x31B0BDCB, 0xF5E34C30, 0xA5BC1A95, 0x9DC31FB4, 0x1922E74F, 0x2A1397A4,
+0x59E59536, 0x1B4005A1, 0x318AFBAA, 0x031EA042, 0xEDD4E8D2, 0x7D989937, 0xD5F90685, 0x56DD6409,
+0x3CFC666A, 0xED60E35C, 0x81CA9E14, 0xEEF145CE, 0x9A7DCB67, 0x52D98451, 0x7A96F61F, 0x7FB016DA,
+0x2BD0D164, 0xA2DCA7D9, 0x1BA1665C, 0xF557299A, 0x8F363903, 0x60240E57, 0x460F1644, 0xED944C2F,
+0x6CBD0EC4, 0x0741BD22, 0x4EDD55C6, 0x4B6FACE4, 0xCD31AD97, 0x63761550, 0xB2E44B20, 0x076B36AA,
+0xDDCF6E6F, 0x436488AC, 0xA81F9311, 0x881AEEF3, 0xB8BA30B8, 0x5F78A18F, 0x2D83983B, 0x114A1C86,
+0x58622170, 0x32DF7BA5, 0x71748848, 0x8F80C4BC, 0xAF1CFF82, 0x33E50429, 0x36BC49C8, 0x6576B4E7,
+0xBB3AF823, 0x10E1010A, 0x7767B0EE, 0xAA2954BB, 0xD8F38609, 0x0C986406, 0x553DA996, 0xE8EE8017,
+0x6679902A, 0xDBF3F511, 0xD7BF92DB, 0x3CAADA00, 0x5DD1E805, 0xD9753B52, 0x18464D8D, 0x29E95287,
+0x0415E83C, 0xACF8C543, 0x46AEEE42, 0x5611EAFE, 0x6FACCFC6, 0xEC9BD31B, 0x0D4FB4AA, 0xDE746F0E,
+0xEDD37EDF, 0x28C4F739, 0x6F41567D, 0xDF44D263, 0x5422788A, 0x8569AAEA, 0xABD8158E, 0x63A0F483,
+0xA67DFE22, 0xA9F23450, 0xA8BF269D, 0x4856E5D6, 0x3023E559, 0x18403F5E, 0x98CC3C6E, 0x87B32D0F,
+0x93424D05, 0x42C16B2C, 0xCC89D396, 0x39E6043E, 0x60F892F9, 0xF9831808, 0x086A5814, 0x661BDA62,
+0x5A3BFB6D, 0x3DA2F2C0, 0x5C4891DF, 0xF31AB2D2, 0x3C931848, 0x3CCA73B3, 0x9F998FC8, 0x8BC8B957,
+0x163A86A1, 0xDB406315, 0x2E2372F3, 0x035371F1, 0x4398975C, 0x0F15AEB6, 0x52097218, 0xFDD8339D,
+0xD3DB05D0, 0x117FC3AB, 0x6AE4869B, 0x83FB23AE, 0x8AFA16B7, 0xC0D1A3F1, 0x25EA6ABC, 0xFAC6CF7E,
+0x195DF5ED, 0xE08A82BD, 0xE93A7D27, 0x7C7A1F60, 0xB51FCC01, 0x41798D25, 0xE001B0C3, 0x9A82D4FE,
+0x1D5F352A, 0xCF1AACAE, 0x10B1BACD, 0xD11B9030, 0xE8502810, 0xDFAD8BA2, 0x9F5176D2, 0xCDA58F9E,
+0x1F0C95C2, 0x16E11D8C, 0x772A8949, 0x7121D1F5, 0x668CA53B, 0xBD2FA11F, 0x0858E3AC, 0x43F44CED,
+0xC4ABCC3D, 0x99A3EAC2, 0x4FD032CF, 0xE5E98D2B, 0x7AD29C3B, 0xF7088B5A, 0xD09C4C51, 0x214C162D,
+0x81E31991, 0x417EA389, 0xFF043315, 0xA43FFA4C, 0x101A9B38, 0x97CD7AFF, 0xF909AE03, 0xF6D1A187,
+0x5F75ADAB, 0xC006FB54, 0x2C85B296, 0xB12221B7, 0x3CFC440F, 0x0C0FD5C8, 0xCA3887E9, 0x54242DD3,
+0x588C3578, 0x40B7B3D2, 0x24EA8DBA, 0x77F0E419, 0x168FC548, 0xF106F6CF, 0x1A7A17E0, 0xFEA2D973,
+0x881F1EB2, 0x40F0C54F, 0x357EECDA, 0xAD19F69F, 0x2EE8EF16, 0x43CB8BF6, 0xDBC90E18, 0xFFF57E94,
+0x5AF3CA7A, 0x7C5C4F89, 0xB7CBF8FF, 0x6CAB0350, 0xE04F1AB0, 0x220A08A8, 0x31FA5533, 0x856CBCFE,
+0xAFBE953A, 0x1319C6E4, 0xCDB6C907, 0xE49DF45E, 0xA3F4A03C, 0x4A6DC783, 0x05A2C957, 0x166776D5,
+0x516BF830, 0x4AFE1A87, 0x94C6F5FA, 0x129C12AC, 0x448CD12A, 0x38F28515, 0x985C38A9, 0x9D9A35F8,
+0x8D8D50AC, 0xC3EB4D1A, 0x2911B98E, 0x5CD1D729, 0x2FA451EB, 0x8494E675, 0x8BFDC837, 0x07C2A074,
+0xF7650D56, 0x7387C74C, 0x0DB93C8A, 0x19BE0F18, 0x7AEE10B1, 0x4F1214EF, 0x2527A127, 0x29EE3FAA,
+0x1E4198A7, 0xF14518A2, 0xE985A8B1, 0x698DC6AA, 0x3A7B031F, 0x14D7D7E6, 0x98910D4E, 0xE8582C16,
+0x51BC4E2D, 0x29C3A469, 0x45064F5E, 0x026CF3A0, 0x3B23A3F8, 0x3F36FDBE, 0x80147375, 0x433AE75D,
+0x21DA9C56, 0x31EF6181, 0x662E1859, 0x60A9D300, 0x02105077, 0x977CFEB6, 0xB387B170, 0x8F65C3CB,
+0x98EC9902, 0x93598031, 0xDA7920D3, 0x8329BBAE, 0x58A9030E, 0xF69B6AF8, 0x0037734F, 0xEC6F7B99,
+0x4F41F6A9, 0xAA37EF14, 0xC169252D, 0x51FE9D06, 0x44B89377, 0x83483C11, 0x6C920C40, 0x00A8F5EE,
+0x9A46C60F, 0xC9651B21, 0xDEC653A5, 0xE071AA5B, 0xB7D557E9, 0xC85B732A, 0xA53B0592, 0xBA85CC0B,
+0xB3155191, 0xBAD61282, 0xF5D1BD8A, 0x270BFA00, 0xD6DB1888, 0x19E79039, 0xBB6AEB47, 0x089F3B94,
+0x39319BD5, 0xC000862B, 0x9A3C6092, 0xE3DE0548, 0x048AEC71, 0x0DF70E23, 0x43F2716F, 0xC6ACA70E,
+0xEA0290F1, 0x5291CDF3, 0xC48732EB, 0x846C2272, 0x9D1F86C8, 0x389D4113, 0xF858E0C8, 0xDF607B8E,
+0x615D575D, 0x1ABFAB49, 0xA1CBFF80, 0x56D93577, 0x3E3BCAFF, 0x85497A29, 0x688CA8DE, 0xC95CCB81,
+0xBAB27DC2, 0x8C57B214, 0x9A6EED5A, 0x0013CA35, 0xF2F8F559, 0x06D4D4AD, 0x06F75F52, 0x8143D696,
+0x040121FA, 0x0F0CB4C4, 0x7E480987, 0xAFCBAD74, 0xA988FD23, 0xFC7BD581, 0xC27599DB, 0x7F000F76,
+0xBD3FB32D, 0xCC0DCBEA, 0x795F811E, 0x84915149, 0x72252FD8, 0x3CCAA499, 0xD78B9927, 0xBF8ABB56,
+0x78B5626B, 0x86593A77, 0x1A9FA317, 0x9DC28ED1, 0x6F55E97C, 0xEE0829EC, 0x9F24809E, 0x8161CDD4,
+0x58026746, 0x59DFB5F6, 0xBEFF3F02, 0x2B9452FA, 0xB0D52B8B, 0x946DE136, 0x3E064C86, 0x0DD0AF3E,
+0x12357DED, 0xFC2D725E, 0x9946C93E, 0xA407B717, 0xB8DFAE8D, 0xCD7F4C33, 0x7A051C0B, 0xF7F77049,
+0xFD105824, 0xC5DE44C3, 0xEBBF0607, 0x224FF29B, 0xED7204F9, 0x82EF8599, 0x5FC1B28E, 0xDD35B128,
+0x2F2186B5, 0x4D8DE928, 0x2A302819, 0xEBCA8A81, 0xD76EB607, 0xD975D9EB, 0x6A99241C, 0x9DC53D61,
+0xB89C1D97, 0xF22524B0, 0x741A194A, 0x4C908149, 0xE20C5F98, 0x723A983E, 0x0DAE96E7, 0x603446D7,
+0x9F2C7B38, 0x4FBA4766, 0xD8193BED, 0x65A55A07, 0x43AE0765, 0xBF1DA73F, 0xEF2FAA44, 0x083C1665,
+0x010FEEF7, 0x61E5A8A0, 0xDD61DC21, 0xC98BD295, 0x3ACCEC87, 0x85190FA2, 0x451B7103, 0xEC92DE13,
+0x48B2EE66, 0x2D4F7121, 0xA55F596F, 0x94270478, 0xDF931A46, 0xFE782E4D, 0xCCDB8B85, 0x8F2371A6,
+0x8C281714, 0x59A95D27, 0xFC9E2153, 0xAA0CBDB1, 0x8B0338AD, 0x0C2F6EEC, 0x44D6227B, 0xC8291BB5,
+0x586E3943, 0xEF88D5FD, 0xF84745DC, 0xEE7B4AB0, 0x09196568, 0x7D8C26BD, 0x9178B4DF, 0x912122C4,
+0x1D6C53F8, 0x1B80758C, 0xDE64E311, 0x63EC4699, 0xBCB11CE8, 0x8EF6733A, 0xB6BC0F2D, 0x6D0C668E,
+0x7A5055BA, 0x000492C6, 0xFD2B92FA, 0x4025DF4B, 0x154C4D85, 0x60935A67, 0x06B59EF7, 0x12BC09AC,
+0xE4A9A18B, 0x842A91AE, 0x20597CC4, 0xDFD29D09, 0x283E8CE0, 0x5E42FED4, 0x35D0D677, 0x69A73AD4,
+0xFD70F377, 0x0E2D1076, 0xC13E7442, 0x1631D047, 0x282DF8AF, 0x5AFCB0CE, 0xDCF5302F, 0xC569C9A5,
+0xC174D2AE, 0xF477510B, 0x0925A43A, 0xCBD8437B, 0x76F22106, 0x16E8E76D, 0xE0E0095F, 0x355D08C2,
+0x8F697788, 0x45D32DFF, 0x6B5C8A11, 0x3F681331, 0x679FAD99, 0x1A2C7B2B, 0x16AA0B00, 0x49C71426,
+0xF5E4D4F2, 0x43541912, 0xD82F41F0, 0x5FB77B1D, 0xEB1819FB, 0xE70E2E77, 0x9B53AF66, 0x0FC76C2A,
+0x4B5CA319, 0xF1BD39F1, 0xDD0112D6, 0x7FA5A5A2, 0xCD59A977, 0x72DDBF33, 0x55095029, 0xF56079FF,
+0xC0A95777, 0x6D013CD5, 0x3F13CF8C, 0x928B423E, 0x3EC6E319, 0x2BA829B2, 0x004957C1, 0x7ED516D9,
+0xD0B144E2, 0xA05E20FE, 0x4EC142D5, 0x119F977C, 0x332BB871, 0x3604AF45, 0x61E70AE7, 0xF9500E26,
+0x76F4CE64, 0x2B635D8C, 0x15853A37, 0x294E3E99, 0xF8943C7B, 0x857726AB, 0x03E23BB1, 0xC0CA6219,
+0x7016C5D4, 0xD83D3BE6, 0xCC09FE4E, 0x589FEDBA, 0xB88E2F94, 0x7EDAE0A2, 0x69122B17, 0x01FF49A0,
+0xDD716434, 0xA7EA9FA4, 0x9B98D346, 0xE029AAEA, 0xC9D8A281, 0x3F6AD2B4, 0x8E9711D1, 0xFBFFCD43,
+0xDF2C8817, 0x63DEE0FA, 0x455754BC, 0xFA8DE677, 0x39C3D306, 0x4E3D7F80, 0x89797309, 0x3608CEEF,
+0x20C32C65, 0x13F25213, 0x0C169533, 0x557CE54B, 0x2CE7D2F4, 0x5ABCF7CB, 0x7A27DEF6, 0x4D04C4AB,
+0xF01266C7, 0x6341CD3A, 0x1B7C8A3A, 0x53E0221B, 0x2060DA70, 0xF39B3257, 0x613211E3, 0xE1FA0E09,
+0xB1614B48, 0xE338D961, 0xFAA30F6C, 0xA3699471, 0x695FE16E, 0x03592F9F, 0xD4B56B08, 0x754A250A,
+0xC7FCB297, 0x254848C5, 0xC6C559D4, 0x6CBFA2FE, 0x50EA67DA, 0xDE2F48EB, 0x9BDBD486, 0x8527645C,
+0x62F1AE2E, 0x260508AE, 0x307E2691, 0x46EBDC42, 0xBC027A96, 0xA6A6D45E, 0x65C9E406, 0x89F440E4,
+0xD59A44C9, 0x0F604C76, 0x59505D04, 0x9E2F286C, 0x99424757, 0x2EB05D17, 0x5D0C6B53, 0x62F8BD59,
+0xD0A43A6D, 0x4CAD96E3, 0x5D25096C, 0x7D2D4A46, 0x18B5E586, 0xA5D39E28, 0x7084C6C7, 0x9DC1CCF3,
+0xE8C64F46, 0x235934D7, 0xE35FCB4D, 0xABBA01ED, 0xCDC6B4DA, 0x3F0D1BF8, 0xAE9E39EC, 0x681E0F72,
+0xCDAB626E, 0xAC893C28, 0xC64DA7E3, 0x95AF44D1, 0x4B442C62, 0x3440E10D, 0xE7842B47, 0x22904B7E,
+0x34D6F598, 0x2BEA6E8C, 0x7C0C03AC, 0x6AC8EAD9, 0xF481CBCB, 0xB501F219, 0xCAF67430, 0xB322EDBF,
+0x83C9E4E7, 0xCFF0D7A1, 0x23B90D8E, 0x66A9A6AB, 0x34BFDB6D, 0xF836A9FC, 0xCACA5158, 0xB7B8B866,
+0xBBC2D301, 0x3B339091, 0x1DE7B3B2, 0xA29B6D27, 0x1E3B0866, 0x465DA335, 0xFB5C7F05, 0x2D3A9331,
+0xFEC4F20C, 0x82F72840, 0x5499BD04, 0x78932A13, 0x7D94AA58, 0x059C3635, 0x7CAFE5C3, 0x7095F8A5,
+0xC5017032, 0x28A0C63D, 0x75ECC8DD, 0x70F13A68, 0xD427B4A6, 0x9E182AD4, 0xCD13B71E, 0x7C6C33F1,
+0xD448F210, 0x03962EE4, 0xFAF01973, 0xB4571F9B, 0xD7B35E2C, 0x44102FB1, 0x28AC4C21, 0xB477A932,
+0xBF91F41B, 0x51DA1A71, 0xD4390C64, 0x49ECB9D0, 0xE75108A1, 0x29AD8AB2, 0x8173B0F8, 0xB45B09D7,
+0x2875EA02, 0xC1A79FF4, 0x72F1B943, 0x5415760C, 0x85A89234, 0xCE7CC254, 0x3BE95D36, 0x39BAE5D5,
+0x89E689F7, 0x433B7C9B, 0xA74D1D4E, 0x45557266, 0x363E7BF7, 0xC8A6D20C, 0x9A7AB212, 0x15C72CF0,
+0xA210E49D, 0x3F720F33, 0x4342CC9C, 0x494271DB, 0x790C58BD, 0x37A48709, 0x1DA43C8D, 0x31B39BD3,
+0xED215927, 0x8E187655, 0xF9100915, 0x6123EC95, 0x63D1BA54, 0xDE783F13, 0x408D3E14, 0xFFECFDA9,
+0x0E440657, 0xE2DB0912, 0x0449377C, 0xF36DAD73, 0x2091350E, 0x668A8C4F, 0x2B711C27, 0x19CA5CD3,
+0x999E7C4C, 0x2494CCC3, 0x13C1FAAB, 0xF3C8C3E8, 0x8A2175DB, 0x7B977B9C, 0xD9EFF4E9, 0x1918C447,
+0x35E3B964, 0x5EEE44CE, 0xC9CE5839, 0x61AF36A1, 0xB7D6788A, 0xA87375E9, 0x75A4B7E2, 0xB8B1CC68,
+0x73FD73F7, 0x1930F4E7, 0x96C45EE6, 0x7B4B516C, 0x1491C6FF, 0x2AB5083D, 0xF344B3D4, 0xE45BE054,
+0x6C42CC47, 0x3849C427, 0x2CE6CD5E, 0x3450B4B4, 0xE9D0AFC2, 0x82E00ABE, 0x026084F6, 0x069A7347,
+0x0EBE3ABA, 0x04C42983, 0xE25F251B, 0xBE870AF0, 0x359FEA4F, 0xC0FDDC19, 0x99BE9767, 0x2453C9B0,
+0x2F4BB9B8, 0x67DEE168, 0xDDB6C69E, 0x11E0F64A, 0x8B9CA2CE, 0x76DBA35C, 0x1BD082BF, 0x3EB9A0A0,
+0x43A5E0BB, 0xABD421C5, 0x86F62160, 0xE0DB878B, 0xD7A9EE16, 0xB4235FD6, 0x4A41F213, 0x57411E99,
+0xD9E7BAC8, 0x3A9B8653, 0x7D64D228, 0xE81E1BB6, 0xA4243FFD, 0x0265C7CE, 0xC47D1686, 0xD8261B87,
+0x19629080, 0x13B6EBA7, 0x3612CC9A, 0xCE362EEF, 0x3A707B7D, 0x741DE06B, 0x6FF68007, 0xFD62FE66,
+0x830C4A49, 0x605DEA64, 0x1A3FCBD6, 0x8A4A39BE, 0x563E32E9, 0x983608B9, 0x05648F57, 0x6F167B3C,
+0x694976C0, 0xCA637BB6, 0x846AA064, 0xD3A11F8E, 0x66397BFD, 0x5DCF7007, 0x5E2FA4F8, 0x24462E67,
+0x1FA81C56, 0x122ECD72, 0x68D04EA9, 0x1D653E9B, 0xB6BC3E19, 0x891773AA, 0xAE95F3F6, 0x7475546A,
+0xCEDF318C, 0x571BB60C, 0x303823F7, 0xA529C7EA, 0x0F5A6F5E, 0x5FAE6B25, 0x6FA90C9F, 0x8E38FDCF,
+0x573EF462, 0xFCD7C93F, 0xB32175C0, 0x99A92279, 0x7E35DAE9, 0x525D076B, 0xE5F1B356, 0x15F1A027,
+0xC9457C2F, 0xC90602D7, 0x55E48910, 0x14DEADDF, 0xBCD762F7, 0xBE8C552E, 0x4976A5B1, 0xE800DCAD,
+0x8A46C42C, 0x84ECB333, 0xF17B77C7, 0x342E28C8, 0xE5ACE55E, 0x9C46BC74, 0x75570720, 0xD495D8F0,
+0x01A9EB32, 0xF6CADCE5, 0x32F82A80, 0xC67155BF, 0xFEFB00C0, 0x7AF7B6A3, 0xD0BB8BB0, 0xDDD7042F,
+0x678B8871, 0xC8B1319B, 0xEB5C67D3, 0x36BCC108, 0x3D414415, 0xFD63B383, 0xAD7778E3, 0x991950CE,
+0x063044D2, 0x2BD12678, 0x735CF3AB, 0x09581FF2, 0xA55A00C2, 0x8D50D7CB, 0x6C9ED339, 0x350C4642,
+0x7B170847, 0x308B1FFD, 0x42427325, 0x020B3148, 0xE1F62CEB, 0x2C1CE06F, 0x585D3B94, 0xBBBDA42B,
+0xD2AC65A7, 0xE117DD1C, 0x23BC38C6, 0x69C0A5CD, 0x781DE891, 0x204F1940, 0x230B8088, 0x4DD80B21,
+0xF3A6EB4E, 0x6FB1E1D3, 0xF1714BDF, 0x0A256815, 0x1F12939F, 0x8565335C, 0x0EC608F3, 0xDDE853D7,
+0x87712FDD, 0x013F192A, 0x140BDE8B, 0xA8E5217D, 0x8366F684, 0x9DF6BBF7, 0x906A5DAF, 0x0C4E39B8,
+0x2160D633, 0x1659354D, 0x3E2171FA, 0xF5894FF8, 0x70D67403, 0xEB1C33DC, 0xA6BCFABC, 0x5D3C69EB,
+0xC44BF771, 0xEFF4F6AE, 0x00E3765D, 0x742A6098, 0xE7F22D32, 0x0F3A46ED, 0x9CDC9761, 0xBBFF850D,
+0x4AC6DDB6, 0xED9D2653, 0xF9C1F948, 0xACD3844B, 0xF6A04F7C, 0x78642249, 0xE1DAC4D2, 0x56B82F5B,
+0x0A5FC253, 0xD6C95F64, 0xC6FC641B, 0x5B6180EB, 0x283BAB84, 0x4EC6BD62, 0xBF6C588A, 0x1E40B9D1,
+0xC88B609A, 0x2CDF1CA3, 0xE43D6AD4, 0x5559FC7E, 0x8D6E28ED, 0xA2A0F5EA, 0x3CE76F6A, 0x1A84319B,
+0x60A28C16, 0xDDA407C0, 0x2A7BDB91, 0xB9F1A036, 0xDBF0A6FC, 0x493B0611, 0x76CD0D24, 0x31A1EC72,
+0x1C07A8C6, 0x85B61D70, 0x48753A0C, 0x95321504, 0x94930016, 0xFBC0BF83, 0xC43976C7, 0x1ADDDAC7,
+0x0686A45F, 0x943EC5AE, 0x9A2ADD97, 0x6B131E88, 0x41C8EB3F, 0xC8BB4124, 0xF3F410C3, 0x8C1D7D17,
+0xEB3602B3, 0x8EBE8D27, 0x3246FBA0, 0xBBC5ADB5, 0x77A13966, 0xF2849BF4, 0x98235501, 0x1A9A5DE6,
+0x27FA8C3D, 0x01CC5580, 0x841E5D44, 0xB6F41C33, 0xA7258B37, 0xE3003ED2, 0xDDCBFFAF, 0x1F55A7F0,
+0xBD6C339E, 0x0732C994, 0x55732610, 0x629FE07C, 0x91DAD0DC, 0xEB1E7B18, 0x5C7EFBB6, 0x2F6CA1D4,
+0xAD624BE5, 0x94C4B37D, 0xEAF10F65, 0xA92E7FE3, 0x13459541, 0xA4B98FA6, 0xCCBABF32, 0x516D39AC,
+0xFBF61F52, 0x1EEB8093, 0xB2F969E0, 0x732B9B23, 0x3397F6DD, 0x0F588D55, 0xEB748432, 0x9FF24024,
+0x86D7756C, 0x1AD60CD2, 0xB5BA184C, 0xBA46D579, 0x7DB48F41, 0x3B31A663, 0xA64E8693, 0x6DD73A1D,
+0x1748A0A2, 0xC6DD1723, 0x9FD1BF0F, 0x1CA4BC3C, 0x21E98DE3, 0x63DEA58F, 0x423B7B1A, 0xDB3CCC05,
+0x5A8B4E8A, 0x2242E99C, 0x5FD65C30, 0x893DF1E9, 0xEDD4E692, 0x0FC61170, 0xD30576FB, 0xB2936ECE,
+0xC73A4821, 0xEEC1D9E6, 0x432B5516, 0xC50B9AD1, 0xC9CEAB40, 0xEF6BF6A0, 0xEF38ABE6, 0x4445CBE2,
+0xDEEAD84D, 0xD2A1CD29, 0x198D0D0A, 0xE798CDF4, 0x5A87055C, 0x1BC60DF1, 0x4D03A8CE, 0xFD4B4985,
+0x7153943C, 0x70610C9C, 0x88AA7808, 0x0F418CB3, 0x05B8B6CB, 0x8A03CB7A, 0x3AA8099A, 0x0D45AC46,
+0x7AFBDD20, 0x9933B33F, 0xBD2C57F3, 0x12A114ED, 0x53A5D293, 0x62F23D7B, 0x0770D3BA, 0x40879CA6,
+0x1D271E59, 0x74F9ACC9, 0xAE32B8A2, 0xF5FA3A0A, 0x1666D216, 0xB324F5FE, 0x26C4093D, 0x3E4C5BB4,
+0xCE73A78D, 0x022FB279, 0x77FA3190, 0x1C426D00, 0x1660E61E, 0x638AEF27, 0x9081EC16, 0xAAC6C735,
+0xC018486C, 0x9674DE60, 0x7D8C09BB, 0x356BB4B4, 0xB11EAFD6, 0xC5453AA2, 0x1BF52047, 0xF6D3811B,
+0x5E7D7C4A, 0x0840BA60, 0x031D7027, 0x3841AC2E, 0xB9837BEC, 0x4E2BB60C, 0x2E240320, 0x88397EB7,
+0x229EA41D, 0xFA12D4B7, 0xCA22EDB8, 0x9E3A4553, 0x2BDA0C6C, 0x0E32C229, 0x278263AD, 0xE0A537F0,
+0xAB184ED5, 0x73069EBC, 0xFB7BABC5, 0x821719CF, 0xE71BB93D, 0xD21D9B7F, 0x369A851E, 0x4A8E205B,
+0x981B4012, 0xD0DE403D, 0xE079BB55, 0xB194D068, 0xB50913FA, 0xE531D06B, 0xC921DCE2, 0xBD29E23F,
+0x91341155, 0xAC64B93E, 0x8D98F849, 0x8D7B0D8A, 0x7FFC2E34, 0x8F3A92B9, 0x798A6E19, 0x461AA14C,
+0x22C8F34F, 0x4CD9BD90, 0x47061DED, 0x3E13B5E9, 0x83263062, 0x019D1F57, 0xF781A7C9, 0x28FEB633,
+0x8EC36801, 0xCEE54364, 0xD6B77A8C, 0x32B44499, 0xE1FB1214, 0xD05376C1, 0xA3600465, 0xF8BB4603,
+0x2A183A50, 0x9275344F, 0x3CEEF9E3, 0x82DD9FE0, 0x54D3C892, 0x9A20AEF3, 0x93847092, 0x1201F1A9,
+0xC396830C, 0x2CF31707, 0xD272E029, 0x7E6F626E, 0x18FFEF70, 0xC982B3E9, 0xE3BF0B57, 0x8AF9CF28,
+0xD6B58CBF, 0x892841B3, 0x7828C53E, 0x6F96EFDB, 0x0DC3F2C0, 0x36ECB5A2, 0xCE855CC5, 0x993B0EC5,
+0x3DA4D272, 0x5D108802, 0xFD3267F4, 0x7A2E91FC, 0x071D6F93, 0x880F5B4A, 0x69A4C404, 0xFB976AFB,
+0xF976BA17, 0x99722B20, 0x2BE5A9CB, 0x290F3E3F, 0x437929AE, 0x36414337, 0xF7356160, 0x001AF387,
+0x8D7FCD77, 0xE0C32F5B, 0x01E0E4DD, 0xE9B70A4B, 0x9213E8F6, 0xE69963C3, 0x9F764D63, 0xC415331F,
+0xB0F26E9E, 0xFD5278C3, 0xF525C9DF, 0xF0A9BF97, 0x39B5A33F, 0x2BB6F2EF, 0xBC69D069, 0x9DD07943,
+0x22B1E4C5, 0x0F9FD22A, 0x4403F5C4, 0x7EC5C6EB, 0x98873A70, 0x849346C5, 0xE39A8BA9, 0x710C805D,
+0xA12F8000, 0x07B539A4, 0xD7C25110, 0x74ABED0C, 0x97C9A5F7, 0x240DD72C, 0xCAF71428, 0xBFD3A341,
+0x74B03111, 0x518D1366, 0x4D9A9DB9, 0x6825421F, 0x3A518278, 0xA1158039, 0xCDC3C163, 0x2C5A87F6,
+0xEB6A7415, 0x6E744302, 0x82121968, 0x8CE893D1, 0x0E9C4156, 0xBC92D97A, 0x9B16660D, 0x86FBA8F4,
+0x7CBB1BFF, 0xC35E7A77, 0x86BD08BC, 0xBE7A8500, 0x34D9ABC2, 0x6B290B7A, 0xB2E1A18A, 0x99DF44BA,
+0x43786AA5, 0x74D9666E, 0x6673278B, 0x0948E0C7, 0x551F9707, 0xE41FB543, 0x446DC657, 0x65FCD2C2,
+0x9C0D95EB, 0x7BD56DC5, 0xD1F2EC9A, 0x0628AC7A, 0xDD6E2016, 0x4F83C064, 0x5C5F32CA, 0x10F9F3E6,
+0x42F6782C, 0x7D686E88, 0x189DD5F1, 0x2BCD25FC, 0xC7518F16, 0xAE88D363, 0x9FE42ECC, 0xBF6489BB,
+0xC7891DD8, 0xCE68CEE6, 0xA1DDD786, 0x83439C77, 0xA313A7D4, 0x2C3F52EF, 0x10C260C1, 0x72C44B7E,
+0x5B018EE6, 0xAC9B8040, 0xD19D88F5, 0x13738BA9, 0x056746AA, 0xD4261F14, 0xD6B26037, 0x618E3E6D,
+0x2B0544A4, 0x3CFA7047, 0xF253539B, 0x9FE2FBE6, 0xBDFF4651, 0x5ABFEB9F, 0x8A0561AE, 0x0F243BC0,
+0x604F753F, 0x3B4AFF1F, 0x24CAB5C4, 0x03C540E3, 0x74143310, 0x6EA8CDDF, 0x238F4324, 0xC55211CF,
+0x5F25D22A, 0xD90FE913, 0xEB8D552B, 0x3A42B195, 0x12B0BA28, 0xC51B8BFC, 0x9604E65D, 0x7E63261E,
+0x26B54F9A, 0xD2D161E1, 0x3C9C0ADB, 0xB247EFB9, 0xDE3F92AE, 0xD605C6BC, 0x61D9A102, 0x1FCA6BCE,
+0x85C9710B, 0x6CD672CD, 0xBF5BFF11, 0x598B5CD3, 0x7B6EB2D0, 0x1C0BB9A4, 0x23BA5DD6, 0x63963777,
+0x096BB295, 0x71FC8F23, 0xCF12AC60, 0x2007116C, 0xD421E56C, 0x3998BB81, 0xDE9C4B78, 0x35A75545,
+0x3639E69B, 0x407A3560, 0xF1471D60, 0x647033B7, 0x31BB586E, 0xE0E2F723, 0xEAFFBCD6, 0x83E4CBAC,
+0xC059363C, 0x46EF8396, 0x86490F1C, 0x07D3D2DB, 0x7F8269FA, 0xA57C7103, 0xD6A6F2CD, 0xD982413B,
+0xB9686A7E, 0x2AE365D8, 0xBF42ABFF, 0xA324FF48, 0x96B5546D, 0x75186898, 0xA1C40FA1, 0x0DFFDA40,
+0xB6B1B41E, 0xA8A81D61, 0x22684499, 0x21622B90, 0x3FC93BDE, 0x66511251, 0x4EFEF84E, 0xB21E922B,
+0x4ACE12D4, 0x3BBA51F9, 0x224EA81A, 0xAC32E07F, 0xDDDA188E, 0xED49715C, 0xF828BAA8, 0x8EF5E6AB,
+0x9C8681FC, 0x8FA8F644, 0x0E51B4B5, 0x63DD8320, 0x52811A6C, 0x6D74332B, 0x2596C5D7, 0x96A3DD0F,
+0x1E71EFC3, 0xE385CE54, 0xFBD6B38A, 0x8ED1C575, 0x0A69C359, 0x237772EB, 0xECEE0735, 0xC58AC9C3,
+0x209BED75, 0xE351ED79, 0xB9DACB9C, 0x7278347D, 0x070F270E, 0x06C6F8FC, 0x8496B7A5, 0x6B557A78,
+0x38C13A41, 0x38D8C00C, 0x99EB589C, 0xBBCD71CB, 0x5E70D6F5, 0xA5ACFD1A, 0x0C3E3FA7, 0x156E723A,
+0x21903359, 0x763E1BB8, 0xB4ED13EF, 0xDB05CBD5, 0x64DB5F66, 0x458933A0, 0x4A58A8EC, 0xEB122B32,
+0x1043EA10, 0xF41A6977, 0x0110A990, 0xCBE8B3ED, 0x6F747568, 0xCA05BAD8, 0x241914B2, 0x93BD5FE9,
+0x88175121, 0x9C740C52, 0x30D65020, 0xF7BB1B60, 0xE8D29EA9, 0xC5E5CE28, 0xBB4EA63E, 0xAEB3B631,
+0x5DC9D8CC, 0xAFCF3417, 0xFAF6C16F, 0x3A7C7E71, 0x55732E86, 0xFD46612F, 0x17D2C0C6, 0xC230A682,
+0x77AC42C9, 0x45CBD9EA, 0xC8C0C4C4, 0x86ACB271, 0x671C36A0, 0x293008B4, 0x4FE00766, 0x02A73727,
+0x310BC308, 0x39E57C08, 0x3D1E6408, 0x38D62E59, 0xDB372266, 0xFE0E4D5C, 0xF5A429B0, 0x146F5597,
+0x96242C4F, 0x2B8001A9, 0xCE0F20C1, 0x5D47D4E8, 0x6296FAC4, 0x86FE84EE, 0xC26DBC22, 0xC968727D,
+0xE6C72BFD, 0x4B6326A7, 0xBCB98022, 0xDF278470, 0xAEAE4509, 0xBFC5B925, 0xF95FAE78, 0x291497AD,
+0x5FB90228, 0x079F46C8, 0x5D6AA91B, 0xC5C0EC70, 0x7320F62D, 0x49474955, 0xAA94BD58, 0x101D7D8C,
+0x0C76ABE3, 0x48368FB1, 0xFB04E1D5, 0x0CD1AD52, 0xB296C217, 0x6D485BA2, 0xC92B58AF, 0xE3E25E1D,
+0x00EF8888, 0xD8707A5E, 0x06E86CEF, 0x14C19F1C, 0x993A4E1D, 0xB3D3B4A5, 0xD8A84A42, 0x2C453570,
+0x1804EBC6, 0x1A35124F, 0xE6F3903F, 0xF83FA01E, 0x2C69BF5F, 0xB6355ECB, 0xD7E1AA72, 0x4430F64A,
+0x13F74879, 0xB309D274, 0xB935AF73, 0xEBF48575, 0x4C107016, 0x3AACE3EF, 0xAA869B36, 0xA028495B,
+0x61CC3F61, 0xD7C8BB73, 0x89629995, 0x7A2DB7B7, 0x10B4F125, 0xDA18ACDC, 0x57BC0037, 0x48D1644B,
+0x0467FBB5, 0x180CC36B, 0x8F8B0B22, 0x93BFBAB4, 0xCCF340A8, 0x8A9A4E22, 0x9B389874, 0x8298CF62,
+0x4C10ED6A, 0xA5C9B343, 0xB534EAB0, 0x482DCC83, 0xDC7CA5DB, 0xB5094735, 0x7F9AEB4C, 0x037C6661,
+0xC3C8EB03, 0xD6245C7A, 0x5AE5D3DA, 0xDD063BDC, 0x8177BA31, 0xE7F1F35C, 0x7B70709A, 0x57D2B86C,
+0xBA193F13, 0x68A5333A, 0x6BB105EF, 0x07D5951E, 0x6CF784AB, 0xB88F352B, 0xA4324078, 0xDA87A813,
+0x6EE330EB, 0xF6A3159B, 0x0B684917, 0x0AD299D5, 0xD62B810C, 0x1490DB05, 0x70D815A4, 0xF924E038,
+0x7BAAC4F5, 0x4059E6C1, 0x9645DBA9, 0x25BF65A4, 0x76C8610C, 0xEEDA1D3F, 0x96448DA2, 0x367B4F25,
+0x70D90D80, 0x8E7C822A, 0x454D8AF1, 0x02CD16E0, 0xDC36C12F, 0x3B65BC29, 0xC84BE288, 0xE54EF6B2,
+0x2019329B, 0x0F395A5E, 0x702C7B4E, 0x1628A9B6, 0x90A19666, 0xC0207517, 0x07DAB909, 0x753E819F,
+0x7042B31C, 0x3F0C3B16, 0x494EA44B, 0xF3B25162, 0x1703A825, 0xAD23F8B6, 0x6D782240, 0x91F5D88F,
+0x1AE2CD23, 0x2B92A87A, 0x70B74433, 0x6A1DF58F, 0xF380890C, 0x88B7CD60, 0x4E53C2BE, 0xAFD1753F,
+0x0200B48D, 0xCD9597E2, 0x4AC3F9D8, 0x89931F5D, 0xDEA4AC86, 0x27FF7C39, 0xD22A586F, 0xD56B5D65,
+0xE49CCECB, 0xF3574FC2, 0x3A1845A3, 0xF94E2DDF, 0x5851951C, 0xA80F0DC2, 0xA2097B49, 0xE3E7AD59,
+0xF1CAAC7E, 0x4E99A077, 0x3BD7AADD, 0x165C733D, 0x644FC670, 0x34616884, 0x9D3C8955, 0x0CA15401,
+0x7A603B2E, 0xEA137E6F, 0xE1EEEBB2, 0xCB55E35D, 0xC08AEBD0, 0x51E8B418, 0x4F3E7A64, 0xB94360CA,
+0x14B9DFE3, 0x58E689B9, 0xFFF042E5, 0x1B75BB30, 0x3FCEA3FC, 0xCA8B81F4, 0xE6A957DC, 0xCC5249D5,
+0x3728BF6E, 0x4B7447EE, 0xA9BA622E, 0x52DFA5F3, 0x0FCD4068, 0xDAF8B76E, 0x4D04960F, 0xA9478C65,
+0x0F608407, 0x15B27559, 0x8F636BA8, 0x48DF5529, 0x0711D87C, 0x9B5CC3AF, 0x50006FE7, 0xC129683B,
+0xBC54B669, 0x082108A9, 0xF8538662, 0xCCA3955A, 0xBE0205EB, 0xDA54394F, 0x35A51EE9, 0x03C88289,
+0x1F635180, 0x70F57900, 0x2BB777A2, 0x0B250037, 0xB2E2221E, 0x0E5F3ABA, 0xBFB1076C, 0x2418350F,
+0xCFF45EB3, 0xAF52788C, 0x4A26D8ED, 0x03A8F19C, 0xB2AE1FF1, 0xBE891DE7, 0x3037FBC6, 0x46476D76,
+0xBCF4187E, 0xA58A71F8, 0x1D80386B, 0x04CBE9B2, 0x4B122F23, 0x4361AE26, 0x32EBDA10, 0x8CA9C05C,
+0x520A1A2E, 0x106B49DE, 0x9CC3DE91, 0x38666E3E, 0x19CDC6B3, 0x7E032C37, 0x75045923, 0xA476C802,
+0xA15C75CB, 0xACA5AE5B, 0x45DED4F5, 0x8AA6D2FE, 0xF97AF23B, 0xFCB7E8E6, 0x102DB179, 0x61F51219,
+0xE446209B, 0x6FC5B22E, 0x7CCA1EE8, 0x0C65722B, 0xF0AFB549, 0x32182FA9, 0x61E3666C, 0xFE159921,
+0xF74C8C2E, 0xF2EFF91A, 0x9319E300, 0xCDB34E57, 0xD34C68E8, 0xE260FA74, 0x0A403152, 0x01A92278,
+0x5638340C, 0x8F7FB574, 0x6D59BFE4, 0x9CF4533D, 0x1E6AE118, 0x4726FC3E, 0x330ABED1, 0xD891A179,
+0xCA0BC4E8, 0x8BEB0A5B, 0xB536F84A, 0x16971FC7, 0x87147A71, 0xC767BC43, 0x4CD38BB3, 0x6EFD7906,
+0xA03D514E, 0xB613E616, 0x691D96FC, 0xB5DA4D8B, 0x70F5ECB4, 0xC73652F9, 0x32684D38, 0x329B9F9D,
+0xDC10D4CE, 0x993B04B1, 0xD1CDAD01, 0xC4432516, 0xA2F62935, 0x8D835690, 0x377AEE90, 0x0893E5D3,
+0x6E10603E, 0x5700A1C4, 0x0E0BD964, 0x7E3F302D, 0x6E7F68DD, 0x3B1E44A1, 0x468BF035, 0xBA291860,
+0xEDE3FD20, 0xC278BA11, 0x81F876C4, 0x59E1DD47, 0x8B76452C, 0x29554419, 0x4F0E653E, 0x7356A27D,
+0xB88E95F5, 0xD0454C08, 0xA2AC8F50, 0xEFC1EA3C, 0xE8B9B1E8, 0x7A4FF76C, 0x34B75A68, 0xCFBAEEF8,
+0x4574743A, 0xAAB7BCB3, 0x054036BB, 0x271040DD, 0x75B01F1A, 0xE05BB30A, 0xC423C582, 0x41C71A59,
+0x49A3D068, 0x6D4656DC, 0x191B501C, 0x076A5A72, 0xD3550C87, 0x60CB3B50, 0xBB816925, 0xC97C3E74,
+0xE1C5C411, 0x3BD8F0A1, 0x915021A4, 0x24CF47F7, 0x2B02E075, 0xDCC4C554, 0xD6668DEE, 0x740985F0,
+0xFCA8D34D, 0x02578D19, 0x78D2A5FD, 0x15A38B00, 0x4410B86C, 0x9E170C39, 0x516DE683, 0x0345C1D0,
+0x11B9899A, 0xF0FC2C14, 0x7A0D93FA, 0xEADADB03, 0x66135FD9, 0x0FB9141E, 0xB8467816, 0xD7FB2126,
+0xC1E1F96B, 0x8ECDF208, 0xDF3DC373, 0x3DF4F9A5, 0x5925291A, 0x4A54D35B, 0x12587174, 0x1E2845DC,
+0x083134AB, 0x29CECFBA, 0x302F81F1, 0x6BF24E81, 0xB540F5D0, 0x8D31E719, 0x637CA8DC, 0xA5A61A28,
+0x39BEBE8B, 0x6236CC91, 0x45F7275E, 0x096C6D34, 0x94F86846, 0xCB6FA1B9, 0x2554A426, 0xB0CB09A9,
+0x976C4A99, 0x337C7BE8, 0xDDF5305F, 0x16C72729, 0xED716940, 0xF4909E98, 0xC60FDD12, 0x14E127FB,
+0x3EE6B77F, 0x673A4418, 0x8BF6A348, 0x654652BB, 0x98B89E51, 0xA246C205, 0x99086207, 0x7CF10070,
+0x31805D06, 0xE687DA98, 0x20360301, 0xC83525A4, 0x73E4D382, 0xE0B835E5, 0x26C5DAE6, 0x030E83AE,
+0x7ED12390, 0x70F09A31, 0x5CD38A1C, 0x855CE146, 0xCD9DF6B5, 0xC9176E4E, 0x691E6CCC, 0x38749A39,
+0xB2A05749, 0x709061A4, 0x2C91F75C, 0x7FCC6AC6, 0x1D4D5458, 0x94195D54, 0xB1D33676, 0x61A329EA,
+0x183E628C, 0x2FFBB073, 0x5F87ABDD, 0x6CBF6CA2, 0x6E64BDA8, 0xF0996C43, 0x0FE1E955, 0x2A898008,
+0x7D4A2910, 0x11F4112A, 0xE5207574, 0x18FC0635, 0xE2A670B9, 0x3560FE80, 0x8A770A20, 0x0DCA1E74,
+0x94E15437, 0x009639EA, 0x09987161, 0x7A40A150, 0x16BE2FB8, 0x8A974C91, 0x8E481D4B, 0x3188492F,
+0x744C72DC, 0x7D251BFB, 0x80242B24, 0x200ECF17, 0x1826D5A3, 0xB159C061, 0x33A0E421, 0x7DC498AD,
+0x78CD89AA, 0xBE598E39, 0x23BB0FF4, 0x21E85C40, 0x12956149, 0x9DFB939F, 0x52ABFDC1, 0xD6933C7A,
+0xCEBFF509, 0x8C7E396B, 0x769ED2A5, 0xCDA65D46, 0xE5A3AA6D, 0xAE43E563, 0xB47F15E3, 0x5A7C2E61,
+0x8DECDC8C, 0x239AE195, 0x783CD698, 0x6BC1EF2A, 0x7672392D, 0x0C98525D, 0x33A8CF63, 0xCAEB1FC0,
+0xE3DE3577, 0xF9379B73, 0x6180FBDE, 0x6CEEDEE3, 0xBFBC02A0, 0xFEFA5502, 0x198C0AF5, 0x37EB9CB7,
+0xCE43C2DE, 0x0B7D8504, 0x23360DC7, 0xCA8BD13D, 0x93B5AAFB, 0x569C0314, 0x7518AA3D, 0x9184AE6A,
+0x95A7F3A8, 0xF522F027, 0xCB4B367B, 0xDEADE788, 0x6CA29B42, 0xFCD4A66B, 0xC371739E, 0xA59AB144,
+0xB6CDB5F5, 0xB04E8BF7, 0xD71B51B2, 0xA917DA90, 0x13543902, 0xFE400737, 0xCC962A98, 0x72D229D7,
+0x4DF59CFF, 0x35013F15, 0x8FCD97A9, 0xE725417D, 0x52DBC8E0, 0x2573452D, 0xD378AA15, 0xB8783648,
+0xBE32D908, 0xD4981C04, 0x3781CA14, 0xAE4009E8, 0x0EE16817, 0x8B8897D4, 0x4E8AE34C, 0x80F7CC94,
+0xEBE8E605, 0x4704D7AB, 0xE9BE8612, 0xAD29706F, 0x64E630C8, 0xB284E9E7, 0x84926655, 0x12EBF30B,
+0xDDFB4D52, 0x216D063C, 0x8ED7EDA6, 0x2923C552, 0x42ACA9C7, 0x2B3C8817, 0xDFB2C094, 0xCB299435,
+0x7483F9BE, 0xF4E0CCE5, 0x3030EA38, 0x4EC783F3, 0x8BDAA9C0, 0x515EC11D, 0x26BFBC63, 0xF09B116F,
+0xEBE7F281, 0x66348E02, 0x84558046, 0xA2E45F8C, 0x005EE8F9, 0xF95A5941, 0xBF049598, 0x14172032,
+0x02DE52C7, 0xFFFE1D69, 0xC1539148, 0x8DDC3039, 0xEF1E30D3, 0x86299964, 0x95403378, 0x16099ABB,
+0xF8813747, 0xDCE4C760, 0x52C9809E, 0x925F1A24, 0x52B1EDE2, 0x79778332, 0x6B7457CE, 0xB469A701,
+0xBB5C7687, 0x1741788A, 0x5228F1CF, 0xCBC236EA, 0x0009874C, 0x0D01AB97, 0x33D7F339, 0x2F8F4A87,
+0xC42FE424, 0x77C923DA, 0x35E5BEC2, 0xD5C1DE21, 0xBEB4FA7C, 0xD9B1218C, 0x7B4D2051, 0x59C5E802,
+0x8F683077, 0x2474D30E, 0x17E0A8A8, 0x7C52051C, 0x88004978, 0x41FBD495, 0x6BCBC5C5, 0x49406BB5,
+0x07375C7E, 0x43982E67, 0xF29AEEA3, 0x13B56446, 0x9DE4F9B4, 0x7E8BBFD2, 0xD4363CF0, 0x40A9DC70,
+0x2093A822, 0x9A2BD38E, 0x7A473893, 0x0C1133E7, 0x0045CE1B, 0x1B6AF5A8, 0xB837E3AA, 0xCD1C9E45,
+0xBC9589C3, 0x520B5CE3, 0x781CFE08, 0xA85109C8, 0xF072267E, 0x589DA2BF, 0x1C7E4F9F, 0x61C0A73C,
+0xE3F89F72, 0x5DCE94F3, 0x523E5BE6, 0xB5051821, 0x03BEB053, 0xCA8A54D9, 0xDCE40E29, 0x1DC00140,
+0xDE61C6F1, 0x710455EA, 0x1932D7FF, 0xAA920D43, 0x1CC15D55, 0x1DE92988, 0x51D48177, 0xA401D5DF,
+0x920F921A, 0xD3A61DC3, 0x2175935E, 0x08548C5F, 0x49082623, 0xFE9B0B62, 0x5D6530D5, 0x4A075A51,
+0x49B2F9F4, 0xDC217FA6, 0xE0822FA4, 0xB4D5FFD8, 0x52A0E0A8, 0xE2978DAD, 0x1E2C517C, 0x577812E2,
+0xD3F11687, 0xFD4FBC18, 0xF3CC6EE3, 0x2C49CB83, 0xFC037E15, 0x0B992572, 0xAA51CEF1, 0xA47067AD,
+0xB9986BCA, 0xF47C428E, 0xE4F9EB3D, 0xDBBF7F47, 0x656976E3, 0x709BE189, 0x2B0671B5, 0xCB09D9BB,
+0xC458EAD7, 0xBA1780F8, 0x7C3DD69E, 0x151ED755, 0x49CE16AC, 0x9F94B3EB, 0xC1CCB70F, 0xBA32E8CC,
+0x76704768, 0x6316CED1, 0xA6D9F1A5, 0x2F953A18, 0xC756B642, 0x8A5A7EF8, 0x343BBF9E, 0xCCC2D7F4,
+0x027ACE0E, 0x7529081C, 0xDD5DA272, 0x2665BD7B, 0x84A26BBA, 0x845FA7EF, 0x2DFEFCBA, 0x0E1BFB0F,
+0xA7968593, 0xCACA9FBD, 0x23B74395, 0xC379B7C1, 0x985D4586, 0x0BD0AA20, 0x6740E382, 0x7E0350CD,
+0x5F93023C, 0xCD979EC1, 0x1F6EE972, 0xBD869071, 0x988E0291, 0x1EFAECCD, 0xF7B0126D, 0xB77AC4AB,
+0xA4B3B5F4, 0x6707ADC0, 0xA30F345F, 0xF6FB3C4B, 0x57B85B3F, 0xF43152CA, 0x6F377DB6, 0xE0A8A741,
+0xCBA3FDAA, 0xBA734EC4, 0x000F8C57, 0xE0CBC85D, 0x96CAA621, 0x5D8645E2, 0xEB3A67DB, 0x29ADD81F,
+0xC3518551, 0x0AB68E95, 0x00AF14B5, 0x3793F80B, 0xD9E349B6, 0xFA70A5CC, 0x260A824F, 0x7F77844B,
+0x9EEEE680, 0x88C0449F, 0x6131A5BA, 0x649CF5C0, 0xBD868496, 0xD674DBC3, 0xCF935572, 0xDF72434A,
+0xBC23140D, 0xF62C42DD, 0xC5AA5797, 0x09F4DF8B, 0x73CDEE52, 0xCC93EC3E, 0xBAF45E04, 0x5BDE939A,
+0x5DEADE53, 0x55CF565B, 0x50DC5137, 0xA520CE98, 0x53CA232F, 0x6138F502, 0x7BE027C5, 0x58F12D9A,
+0xB17E49A1, 0x57B2F03F, 0x5A44F27F, 0x369FB8D2, 0xD1D4ABF1, 0xBA2057E0, 0x90D6CCE2, 0xCFDB0CDE,
+0xECC2C304, 0x1D89A21A, 0x70DBF304, 0x385A14A7, 0x3DB9D14D, 0xE424C459, 0xA680F29D, 0x1ACD26B5,
+0x67FD5EA0, 0xF7D3DCE9, 0x8401FFF2, 0x39CB7A54, 0xC758D888, 0x5204B26E, 0xDC6F0126, 0xE90058C5,
+0x52889900, 0x2BB967CC, 0xF3CE9916, 0x40F1D132, 0xCFD31FA0, 0xF8A33946, 0xC4496EB5, 0x31874393,
+0x5B5C32C0, 0x4FF47191, 0x0D6E7B47, 0xBFE28382, 0xBA707BE8, 0xD6320A38, 0x37804273, 0xB54AB668,
+0x751AA365, 0x850888DF, 0x790A3289, 0xBD25957F, 0x2E75BF3F, 0x5E4E67A8, 0x12469900, 0x7F299BAB,
+0x797BB860, 0x2ED3052A, 0x54603EC1, 0xEDC2735D, 0xB3B06FEE, 0x37218E8A, 0xEDD6C4B8, 0x67244F9E,
+0x134B1920, 0x2D606EC3, 0x9D7DFE53, 0x1F52C81F, 0x7620EB6B, 0x3E4B5666, 0x124A8079, 0x6060D73A,
+0x386C0038, 0xCE58A714, 0xE6DDDE7D, 0x55DE041D, 0xFAAEA235, 0x8C071239, 0x2072AF73, 0x6185DABB,
+0x0F17837C, 0xE4C1CF39, 0x55956652, 0xB5679F74, 0x3FC1D238, 0x24C32E53, 0x66ACDFAF, 0xEFEE00A8,
+0xEC6B996B, 0xD1F8D0DB, 0x1B834645, 0xAC064757, 0xB5EA4800, 0x2092B7AC, 0x4997DB1D, 0xD4474232,
+0xB84FCDE1, 0x05C025DA, 0x87EB72E4, 0x9BB6F9E6, 0x69A244AB, 0x9CCCCE5A, 0x08708A2F, 0xC6AF1017,
+0x0FB23A83, 0xABE726DE, 0xE57F3D1C, 0xAA9C146C, 0x0DA9B96B, 0xD8A15355, 0x90658D82, 0x0E02A316,
+0x70D3D746, 0x61FFED91, 0x315F49BA, 0xE28ED389, 0x205BFFEA, 0x936B2D34, 0x05E88189, 0xEC3E9043,
+0x625FF153, 0x2A239C97, 0x3CBAC8E1, 0x5742260E, 0xE1E1C84C, 0x64212B1B, 0x35AD9D59, 0xC4A0BA40,
+0x010109ED, 0x90382698, 0x2C871C59, 0x4192C30E, 0xD4A00FF7, 0x9FDEFD47, 0xB674348C, 0x5B84C8AE,
+0x569C8F9B, 0x5259EB18, 0x0338E59E, 0xB667516D, 0xF0A9639E, 0xFAF0D5F9, 0x2EA3AC01, 0x03CB0834,
+0xC2D85EC9, 0x3C8596A0, 0xFF99F67F, 0x41676424, 0xBC34803F, 0xB8FCEFE3, 0x47515AC4, 0x810EB177,
+0x638973C0, 0xFCD78ADD, 0xA35B94F1, 0x951394BF, 0xA2E5628B, 0x50E138F3, 0xEC1CB7DA, 0xC1FC26C2,
+0x4AE8D540, 0xAF105917, 0x6C889637, 0xC2415C6A, 0xCB26A622, 0x7246715B, 0x87295747, 0x882B89E8,
+0xCEF882EA, 0x3DD37A52, 0x3DB32218, 0xD0F2479B, 0x1D13B4FD, 0x50E88CD4, 0x592B9D37, 0xEAB93B2B,
+0xF1B8FC12, 0xE3BF2716, 0x006BC39C, 0x32A4D75D, 0x96A8623F, 0x8A99F3CD, 0x9E48FE7B, 0x17F5A90F,
+0x703E81E2, 0x73E3CB29, 0x41AB1EED, 0xCC32E41C, 0x8707260A, 0x75C6DB96, 0x90BC35B6, 0xF1CFF049,
+0xF7F31B02, 0x18B07D8E, 0x7CE5C783, 0x1A740C04, 0xB69FD206, 0xBE09E96A, 0x40F1E587, 0x218BCA6B,
+0xDB6BF610, 0x0748E9A7, 0xD114B131, 0x1D2E86B4, 0x7C6BB8D5, 0x8EA9DE8C, 0x794A2ACF, 0x4F6C2E4F,
+0x0C43C19D, 0x3F00B274, 0xDCCF0A08, 0x73FCA115, 0x2ADEADBA, 0xE8595EAD, 0x10C5A58D, 0xD7431AA7,
+0xB93D0640, 0xED147FDD, 0x2C0377E6, 0x6AFDB048, 0x6238EA7C, 0xB2038E6C, 0x01AE19B1, 0x7419DB4C,
+0xC3334139, 0x9275BEB6, 0x2C05EC29, 0xC59ED503, 0x0CF86F10, 0x86D41FB7, 0x3E1BAA0C, 0xD24455F4,
+0xFBC218B7, 0xE25B2F12, 0x63B548FA, 0x57D31F09, 0xBE39B750, 0x36F0A045, 0x6DA4EFDC, 0x241078F6,
+0xEE71B7B4, 0x6F2724F2, 0xBA21FB51, 0x3A2B9817, 0x28222EC2, 0x4C2AAE62, 0x23C47595, 0x0C77B17E,
+0x75A4D01B, 0x27C93D9A, 0x5F96B9CC, 0x55AF3EBB, 0xDEFBD983, 0xE04B668A, 0xB5552B45, 0x389D9BA0,
+0x45FB929C, 0xDF7E6AA7, 0xAD5EE578, 0x0C22DAEE, 0x8243EA1F, 0x065C6911, 0xEA7689DA, 0xB7E26083,
+0x9AB0E290, 0x2170A12C, 0xC9E69C80, 0x7F4B2283, 0xD54AB7CE, 0x728A063F, 0xAC6D7AB3, 0xEB98CF61,
+0x9A014E85, 0x7A221DF4, 0xA3F843A6, 0x2BBA2EBD, 0x025B111E, 0x2244F8EC, 0x32EC86CD, 0x78CB1C99,
+0xB1FD5901, 0xA8CECEF5, 0x654B296D, 0xBE4FEFE6, 0x0A35BE7C, 0x4B1DC66A, 0x38792DA2, 0xE22916F7,
+0xC4AAD030, 0x5EFC550F, 0x928CF085, 0xF4329F84, 0x91F406D4, 0x5C913A1C, 0x7F34ED13, 0x44B141F7,
+0x0F4A74FE, 0x832E596D, 0xF76D459A, 0xE41E8C77, 0x1BCEB410, 0x31D71A54, 0x798E93D6, 0xD392619D,
+0x6A8FB49B, 0x1A29AF52, 0x9E38726C, 0xCFAF89B2, 0xA6AF8ED7, 0xEE4A5477, 0x94385CEE, 0xE3EA60AC,
+0x9B6BCC39, 0x40A5201D, 0xED77F9C8, 0x2297558D, 0xAE5870C6, 0x45FBBB34, 0x36B2B645, 0xB6159CA1,
+0xA422B0C0, 0x006431C0, 0x5907FD81, 0x8B2257E7, 0xD2DFE5C8, 0x361EE081, 0xE32BED2C, 0x484C4848,
+0xD5507702, 0x776DFC6A, 0xDFC1F184, 0x3AD0E6C0, 0x5C3792C6, 0x87859C23, 0x4B15C33B, 0xCC320EFB,
+0x5C1C40CA, 0x26DA561D, 0xE00C175C, 0xEBBC7925, 0xAA6C12E6, 0xC584FEF5, 0x23EDE945, 0x9C1BF519,
+0xFA6F5C00, 0xF6B0D14B, 0xC50269F3, 0xB3F175B2, 0x10C9D714, 0x959A8604, 0xAEB62B47, 0x7F8E257F,
+0xCA66ABF0, 0x36EDFC37, 0xAF2A8FF2, 0xC19AC17A, 0x3787DC60, 0xFA48778E, 0x1BE6396B, 0x376202DF,
+0x750ADE3A, 0x3123F65F, 0xA41021BD, 0x1C4248AD, 0x86EE9ECA, 0x5982B6F9, 0x3666FF07, 0xF338ECE2,
+0x961B2012, 0x49D5BAB5, 0x10E97D1B, 0xBEB720B5, 0xA73BFC52, 0xF6CF5F71, 0xC418317A, 0x9707C7BC,
+0x2CC6C153, 0xE425AEDE, 0x85FE01FD, 0x5929DB59, 0x2716C00C, 0x7447882B, 0x78166C4C, 0x3B14DBFD,
+0xCEA272F6, 0x1765A6AF, 0xFC14DAD9, 0x377D440C, 0x758E908A, 0xD7DEE745, 0xB0FA8C56, 0xD838BB7D,
+0x3C2F4A73, 0x366DB94D, 0xDB483334, 0x3420892E, 0x862D049B, 0x8B6C55AF, 0xCAE258BB, 0xAE68791E,
+0xA83D9692, 0x589F1328, 0x493C4BAB, 0xABAA0549, 0xC7703B6B, 0x8365FEA3, 0x356E53C8, 0x16DA6388,
+0xB6875C50, 0x7049FB7B, 0x36A803F9, 0x55E9D91F, 0x53E844B1, 0x815A3BC1, 0xA2D07285, 0xF39BEF0D,
+0xBF7A326E, 0x9E021C5E, 0x5AC6F97F, 0x0F97705F, 0x59067029, 0x36CECCAD, 0x8E4F110B, 0xEF4CA443,
+0xFF057451, 0xE6238751, 0x4AE554BF, 0x2C4F9FDF, 0x21594669, 0xFAE1D1B2, 0x5088DF63, 0x9A1EF62E,
+0x594F9E36, 0x11E86B37, 0x08643038, 0xD431C027, 0x406F8F78, 0x2BD52BC9, 0x22408C5E, 0xE39BDE4F,
+0x2B64C050, 0xDA05D978, 0x3FAFFBFA, 0xBA2D6CE6, 0xD92FF005, 0xA06D72AA, 0x6A95DBCC, 0x6C2C52DF,
+0x0A5B2CF2, 0xD94EF4DB, 0xABEA27BE, 0xB0FB6284, 0x8CC17048, 0x6EACC0A1, 0xB245EAA7, 0xA28B6B41,
+0x1310A24F, 0x57F37087, 0xFC64CF75, 0x2B5C284E, 0x2DACBB1B, 0x14243089, 0x95FE6E39, 0x6F1076FD,
+0x92B43A58, 0xAB10CECE, 0x228A7D9E, 0x76324FB0, 0xFA5E7348, 0xC9BDB84F, 0xB2DF599E, 0x8FDE03B4,
+0x2C878BB8, 0xC984957C, 0x639DBA2D, 0x1BED7EE6, 0x37A54BA1, 0x9C843AC4, 0x406847D5, 0x0000003F,
+0xC99E0101, 0xFEFF3544, 0xB00923B8, 0x8E1CD3E1, 0xB0BB4B6C, 0xDA7E1BF4, 0xBAB01013, 0x1C51CC97,
+0x1DC9AB20, 0xDEAACA2C, 0xA884F538, 0x2FE37679, 0x7F4F2E42, 0x41FD3C47, 0x75EFBC93, 0x567C403F,
+0x06D8244D, 0x7634D4AF, 0xA1FD0378, 0xCA63F733, 0xC7270172, 0x1BFD8887, 0xAA62C1BD, 0x2699CA0E,
+0x7ADB1C97, 0xBAA38553, 0xA5799902, 0xD9AC57A4, 0x20EDB109, 0x29F65C99, 0xAB10229A, 0x0FA60268,
+0x3EB278D0, 0x15163662, 0x6B1E8B37, 0xEF2F6BD3, 0xEDA8ED4D, 0x27CABE63, 0xCBE1A48D, 0x58496A63,
+0x1EAC3C68, 0xD2CE055D, 0x609C8EE4, 0x837C9634, 0x521090FA, 0x8582D35D, 0x419C24E8, 0x4B23F582,
+0x32AD9C1D, 0x7E96DB21, 0xB9B39693, 0xA6198EEB, 0x6FCA05D4, 0xE654B7B4, 0x1C9A504B, 0x6C6CB2A1,
+0x00A1F5D4, 0x22056B84, 0xCA3CAF77, 0xF8506468, 0x706E7F33, 0x5D7A0A91, 0x4279DE10, 0xFFC055BD,
+0x04CC01AC, 0x0071E183, 0x7B2687B0, 0x8AE6B793, 0x99842750, 0xE09DE5B5, 0xD7D70B15, 0x6314C89C,
+0xC618FBD2, 0xF254F0F6, 0x246CF689, 0xC2C91CB4, 0xC82D5FE0, 0xD60B8D22, 0x1C284BED, 0xAFC7D0FD,
+0x8D961626, 0x4C78A381, 0x0890A453, 0xFD7D2AE8, 0x3BB1587D, 0x4E575E4E, 0xFAF7C1F4, 0x16CC4964,
+0xDCACD156, 0xBD0D4D07, 0x9F9BFF0D, 0xCD2BC816, 0xAA5578C1, 0xCC0EA982, 0x2BEE0F0D, 0x9D2FB003,
+0x337B640A, 0x5FD42DFA, 0x4CF9D731, 0xC7123A9E, 0xC86F00F0, 0xB81EE0BD, 0x33CDB705, 0xEB09837E,
+0x60B8DDF4, 0x96DA7700, 0x099FCAC7, 0xA5F4D7A3, 0x1FB7D151, 0x52CE7439, 0x4EC80ABE, 0x9B894D3F,
+0xA612E267, 0x8EC03183, 0xC08A3634, 0x4B479DBA, 0xECE43E84, 0x172B93BA, 0x8A35BFE6, 0x358027CB,
+0xCBABD277, 0xA00A9F59, 0xBFC6DA6F, 0x613B6DCB, 0x0B54B5ED, 0xF33A2171, 0x16248BCB, 0x18BF6393,
+0xBFD2822A, 0x2C9D628E, 0x58EA626A, 0x3FFFAB5A, 0x35C946C8, 0x41428892, 0x1C4245B3, 0x7ACECDE1,
+0x46EBC792, 0xCC2E4ED9, 0x9FEC7A24, 0x6255CFCF, 0xED3D12B1, 0xEE901D03, 0x204E3927, 0x63430FA7,
+0x7902B22B, 0xA36F6BFB, 0xA6DA4781, 0x5CF4BFA8, 0x176D2E20, 0x49F98736, 0x2C8970B8, 0x2201E840,
+0xD0AE5AE6, 0x1AE287DA, 0xCD69BDA7, 0x7D505A5F, 0xCC870510, 0x185730E1, 0x5D8CC209, 0x0E336966,
+0xFBBAB1D7, 0xA300DAB2, 0x5D7F2609, 0xCE94DE71, 0x86C8344E, 0x5D6F4BDD, 0x45D195CA, 0xD13B4E7D,
+0xD4336F94, 0x543BF8F9, 0x5382B1E8, 0x031FB3B0, 0x1BC698A3, 0xBA4784E9, 0x866B7B2D, 0x64E28045,
+0xACCEABD0, 0xEC763DE7, 0xECE6619C, 0x5D792E82, 0x794E8B7D, 0x5EEE83A4, 0xDDC2B9AE, 0xC848E985,
+0xF6810DC5, 0xAE44F8FE, 0xB0BEE083, 0xA9D5B543, 0x69E20429, 0x27D3F9AC, 0x8253C906, 0x7C3F37C9,
+0x15F7B6CE, 0x3F908DA8, 0x8894897C, 0x4CEC2E3B, 0xC2D5A545, 0x6E6D8DE0, 0x8F1F131F, 0x774AE8FC,
+0x23D59E6D, 0x7B5652E1, 0x9DC014DF, 0xA4734DD3, 0x43FD2D15, 0x3A58C195, 0x241BA232, 0x00000049,
+0xCC9A4101, 0x7F094F19, 0x108E46F6, 0x74576585, 0xFC897F7E, 0x1A878F55, 0x06D7363B, 0x4094D28A,
+0x4BFBD915, 0x6A773526, 0xF680C8D2, 0x4508143F, 0xDFB6B1C9, 0xB268C438, 0x1226198C, 0xD25DB0F7,
+0xE6D7C840, 0xEB5CD209, 0xC835A189, 0xCC15B919, 0x37212066, 0xACB76301, 0xD699FF3B, 0xEDBED803,
+0x45246276, 0xCF38D565, 0x7966781E, 0x9D8CEDEE, 0xD92A2D6D, 0x457455D6, 0x2A57CD78, 0xE9767401,
+0x892F10D6, 0xE1262837, 0x888EE46D, 0xA8A23632, 0x9E2F7C67, 0x26ECB2AC, 0x5B4E3851, 0x81A422D4,
+0x7EB4E63C, 0xC6A4E013, 0xF24FB3BA, 0xF5D7BEE5, 0xACC78DB0, 0xB90D90A7, 0x973F4C92, 0xBC9EF349,
+0x72E3AEE9, 0x0302F11B, 0x383436D2, 0x47FD138B, 0xDE8052A2, 0xF295D2CF, 0xB860A8CF, 0xAA85F439,
+0x2D310F12, 0x90B5E2CE, 0x60AE9C23, 0x3CB0709B, 0x00005E8B, 0x107B3AD6, 0x6D57FDC3, 0x7A063E6D,
+0x6A102F53, 0x96A5B9B7, 0x66486AE4, 0x2DE39752, 0xEBA34113, 0x063726DE, 0x49DEAE1F, 0x6AB081E0,
+0x6CADB574, 0xBF2E06FE, 0x6D04C957, 0x2F9D961B, 0xCEF8A23C, 0x8EB23DFC, 0x1D1AA88F, 0x9FC0FFF1,
+0x28756B8B, 0xF097EAA9, 0x52C024FA, 0x6D82C58A, 0x0C8C1E88, 0x90C43B54, 0x318652E2, 0xDDE3F425,
+0x7B675080, 0x4F8CEFE2, 0xB07DFC21, 0x7AF45B57, 0x59632A17, 0xABB32170, 0xD581B0A1, 0x5DC584D0,
+0xCA42AA37, 0xE9CC2073, 0x7E7F7F6D, 0xD9A332BC, 0x51EA2AB1, 0x5058EBD6, 0xE8C5D1BE, 0x5BA5B867,
+0x3BDA3418, 0xA9D0653A, 0xBDF5749C, 0x2D26F2D7, 0x15952BCB, 0xBF1962E6, 0x2D8AD611, 0xA094473C,
+0x3B713DE6, 0xE7055AA3, 0x8AEC6FC6, 0x7339C345, 0xF52732FB, 0xBF39BA73, 0xC747A98C, 0xF4D4777E,
+0xEA94F2C4, 0x76F55731, 0x79807E61, 0x5B0789D6, 0x5E30BC3F, 0x005E9527, 0xC7359CF1, 0xFD95863E,
+0x029F1EB3, 0x919E9EA7, 0xF79B20D2, 0x8170DA81, 0x19EEE6BD, 0x3F431B15, 0xE1FB750D, 0x96FB306D,
+0x10AAF47C, 0x9C6D2DF0, 0x414F6D51, 0x879E22D6, 0xD893974B, 0x98434C4E, 0x3AA2075E, 0xC87B3DEB,
+0xDA482D85, 0x3854C665, 0x52FF3056, 0x6CFF8552, 0x2393C9C9, 0x972291DA, 0x1398B3CD, 0x88A7727D,
+0x56DFA205, 0x2334B96E, 0xDD9F61D0, 0xABF4B530, 0x09D102C0, 0xB71D1E9C, 0x0D144E97, 0x89F4F443,
+0x3A58EFC1, 0x90823DE5, 0x18276E7B, 0x80AC9167, 0xB9BEB799, 0x967B62E6, 0xC7A2D9FF, 0xBE583312,
+0x8F71F128, 0x7FD7E2DC, 0xEA720F6F, 0xF04E287B, 0xC6B7B994, 0x51ADD704, 0xF81B0AFA, 0x81CED3A7,
+0xF9C3C0D7, 0xB568F013, 0x2F4D4284, 0xEAB5248C, 0x5025150D, 0x51062947, 0xD1109B6A, 0x540B5FD3,
+0x9D83BB86, 0x2DE40516, 0x9CD8FD82, 0xC1756EF7, 0x2B9A50FE, 0xA8032ACA, 0xF4CC58E7, 0xECE4A544,
+0x9700E6F4, 0x356C5838, 0x3F193EAA, 0x83EAB134, 0x1381DF35, 0x42620AAE, 0xC5667B9B, 0x9D23A91B,
+0x67EE4B15, 0x3D6F0348, 0x52E462AB, 0xAC36272A, 0x6C65A0A8, 0xA26B3E3A, 0xA7EC8D63, 0xAF840DD1,
+0x9CDA62E1, 0xD9D75F06, 0x09135446, 0xEC45ECAB, 0x65EFCA55, 0x2F07E2D8, 0x9DBE453B, 0x6AE7038D,
+0xDBAD1F2E, 0x9FBF89C9, 0x77293906, 0x92CB9393, 0x7D145365, 0x9AEED861, 0x55A5ED0E, 0x37EB329F,
+0x031B3E58, 0xDB58D8D1, 0xEBB5A2AB, 0x9483F8F5, 0x5017D443, 0x78B1E1ED, 0x6A09FCD5, 0xF5C32CB8,
+0x95A0C19A, 0x1D0843C2, 0xC9A094DF, 0xFFF07156, 0x2BB47CE8, 0x45113127, 0x7B336C34, 0x3FA484F5,
+0xEB1124DE, 0x5E7CFE85, 0x29FE85E8, 0x950164EF, 0x76A67D49, 0x324F16F6, 0x59519906, 0xBDDA78AB,
+0x9803E88B, 0x4AB02A33, 0xF4422F8E, 0x1DF6BE0F, 0x999AA846, 0xD5B23756, 0x88DBBA60, 0xC64B59FE,
+0xF128C2EE, 0x53D91C0C, 0xBD0FD9DE, 0xF57C4AD8, 0x91583618, 0x9D88C76E, 0x23DF8266, 0xB1681127,
+0xD2A2EBCB, 0xEC37A711, 0xCC512FD2, 0x7047394E, 0x31306614, 0x31632787, 0x9109C777, 0x87AA9053,
+0x9B53CB79, 0x613926F0, 0xB5BF5D49, 0xDBB180DC, 0xB64A90D4, 0xF348E94A, 0xF377F111, 0x75B33CA3,
+0x30819668, 0x021E51B2, 0x650B0399, 0x123E36E4, 0x820D8333, 0xD34DC4A6, 0x61D3DC9B, 0x12977766,
+0xC95E032F, 0x668E1B57, 0x1FAC91D6, 0x9CFB0A12, 0xD6BD0A77, 0xD2C94FBE, 0xEC8DDEB4, 0xF5DA77D7,
+0x9B340E2E, 0xFEA50010, 0x5EC7B6E1, 0x154ADB9C, 0x01821B49, 0x24445E01, 0x52631CA2, 0x9AD46E61,
+0x5B166317, 0x409A869B, 0x41EA1189, 0x77D7E6E9, 0x46380F4A, 0xB8F2FC1E, 0x89B7E69B, 0xBE2029E7,
+0x0602661D, 0x60F21711, 0xEC6359C2, 0xFBA357C0, 0x816FE071, 0x17B6DDD4, 0xE83DEF26, 0xBCEB8CAF,
+0x8A3B4042, 0xC261AC84, 0xFD2849F3, 0xEBF80BA8, 0xBB9A913E, 0x7C9CEAD1, 0x923741F2, 0xDDF09AC0,
+0x7AD20CDD, 0xA05B127A, 0xF817CBCD, 0x0E6C79C6, 0xFD7C183B, 0x6C521C02, 0xEC0DCE72, 0x2C1000F9,
+0x5764DC11, 0xD3E7D33E, 0xB964A045, 0xE47585F0, 0xE881F152, 0xB747C5D5, 0x259989F3, 0x43E7CF7E,
+0x1BEB1C67, 0x159AC473, 0xB9AF70B1, 0x64202468, 0x52487A6C, 0x155353B3, 0x7BABBCE6, 0xBAA223DA,
+0x7746CB0C, 0xC4125967, 0xD3673A0D, 0x4612F3A7, 0x95A8BAAB, 0x3423A27E, 0xC3E2CBE0, 0xEDD07CB9,
+0x1202FCE5, 0x70CF6BC1, 0xC7B1464A, 0x42516F00, 0x62DB883F, 0x39188949, 0x6D9ECCB4, 0xCE2278F2,
+0x27D4E1E5, 0x52E8B876, 0x99DA3264, 0xB2EE6617, 0xBF202685, 0xE8D3D364, 0xF9CD187E, 0x0F45605E,
+0x3275123D, 0x840BB25A, 0xC0040421, 0xB70CCFCB, 0xB717AAE2, 0x944C2384, 0x89FC3BC9, 0x1287043B,
+0xFCCCFE2F, 0x5937F5E3, 0x4EF3951B, 0x0B0E5FB6, 0x9A6E90C0, 0x5C9D00DB, 0x58D547FD, 0xFC34571B,
+0xDA65CE00, 0x33C2BEF7, 0x6A5DADC3, 0x4D2C02D6, 0xA3793D8A, 0x534CE6E1, 0x27586A77, 0x2F56530C,
+0x0ADB1660, 0x8CEB8B74, 0x34F446AA, 0x81C83AFA, 0xC873EE8C, 0x836624F3, 0x1E5B2317, 0x753501EC,
+0x5A71D379, 0x175E9A72, 0x178902C7, 0x151FDC8B, 0xB6D81780, 0xB1871DE8, 0xA77D4DFE, 0x44CD2AFD,
+0xE7434EA2, 0x02463B42, 0x49FF2638, 0x16B28330, 0x6D0639A7, 0x5B651E29, 0x8A521B63, 0x172B4F9F,
+0xCA2F4BF3, 0x8B33C41E, 0x3B849073, 0x6DD0ACD8, 0x35EBEA35, 0xD4DDBEF7, 0xE9B8C6E1, 0xD145B6E0,
+0x9B5CE160, 0x3DDA8081, 0x5FAB5FBF, 0xA037B8DA, 0x24FC3A6B, 0x7FC25C80, 0xACE787F0, 0xF983C58A,
+0x2031D220, 0x2330BFB2, 0xFD8350A9, 0xC8D7FF7A, 0xD3DFA129, 0x7704C625, 0xDB57CEB0, 0x5396FB93,
+0xD097FECA, 0x328FF009, 0x778B0FD6, 0x1F44DCC4, 0x3E61D5D0, 0xDC141D20, 0xA3EA4AD7, 0xD345A8E4,
+0xDE0FBF81, 0xC60B6030, 0x1CA4D107, 0x7B3FBFCA, 0x47C24D9B, 0xD51A9C22, 0xA1C4A631, 0x2CA0A340,
+0x21163F90, 0xF87583A0, 0xEA9909A2, 0x9490C748, 0xA02DF254, 0x6AD47113, 0xAD9E6F5B, 0xA20634D9,
+0x4E452A3F, 0x0D777539, 0x81700FD4, 0x93E3FB67, 0xAFCB0F53, 0x4DA4EFB3, 0xA168D799, 0xFBF99A66,
+0x93EFD47D, 0x3F7D3D3F, 0x2D9B34B6, 0x0704B3F6, 0x179126F6, 0xA4E01F00, 0x734D15C9, 0x81BF0360,
+0x9458872C, 0x93EF4274, 0xCD86BE00, 0xA8C17123, 0xD862CF38, 0x5917B39F, 0x8D5849A2, 0xA5C6E5D5,
+0x7903ED87, 0xDE7FAA5F, 0x9AD3878C, 0x83985EDB, 0x3C575BA7, 0x95C7ECC5, 0xEAFD7DC5, 0xD1DBB7A3,
+0x36FDA162, 0x5596207A, 0x91426059, 0x2763B78F, 0x89C8839D, 0xD274A9DD, 0xDB4EFE44, 0xB1A2B72D,
+0xC5B28F93, 0xBE61C061, 0xC0357FDC, 0x1E6BFE8D, 0xE2FD8CB2, 0x5F5176D5, 0x2FA9B700, 0xE65F9C24,
+0xFF9F4BFC, 0xBEC93E01, 0x163AE815, 0x372A18CD, 0x43688543, 0xF00DA23F, 0x416358BB, 0x2368C0D1,
+0xF989761E, 0xE54EC326, 0xDE53D46A, 0xE9555725, 0x237BD9BD, 0xAAC087A2, 0x9C8B60BC, 0x51F1BF5A,
+0x831EEF3A, 0x8970CC05, 0x76549D0F, 0xD7499374, 0x37AD3C7F, 0x3D03F32D, 0x2CD980DA, 0xEDA053F7,
+0x95FB16B2, 0x37EC84AF, 0x52582F2A, 0xF3EDB878, 0x2FCCE299, 0x2027DBFC, 0xB82CC8B6, 0x929F133D,
+0x0A7379C5, 0x2BE6007D, 0x0D2DC631, 0xAA48798E, 0x03808E45, 0xF0E8E1AC, 0xE1F2B503, 0x997E4D94,
+0x01F5D35A, 0x5FAB9BDE, 0xFD8680D9, 0xB7987721, 0xC4F69C8A, 0xBCAB957B, 0xCC6B49ED, 0x486749A9,
+0x790DE447, 0xFFC6B1C6, 0x2BA386C9, 0x46785080, 0x6E396218, 0x127F0A73, 0x2E203CEB, 0x73C57170,
+0xC41FD9B4, 0xDDBCDCF2, 0xA5ED50AD, 0x6113EA51, 0xC258F07F, 0x4081A1D6, 0x4723FB76, 0xA9BA8B3F,
+0x76DD0AE0, 0x81F14531, 0xB82BFEC8, 0xFD311D42, 0xB1CC1393, 0x5B585863, 0xB8FB2CD4, 0xB83EF31D,
+0xA288CD16, 0xB346824D, 0x2AECBC33, 0x37387E06, 0xFB78421E, 0x1B9B7231, 0x9AD5C667, 0xFDCB9AC5,
+0xB16042C1, 0x84548BF1, 0x7F99EBD1, 0xB4EAC2CF, 0x59F432B7, 0xED0AE0FA, 0xB3C7B8F7, 0xAA72443B,
+0xC7984A03, 0x919509C8, 0xB1533D0A, 0x49E02082, 0xB8878393, 0x8A9A38C5, 0x81F8157B, 0xFB2D1150,
+0x71093C21, 0xB852C5B2, 0x5925C98C, 0xCBDFADF8, 0x09169C7F, 0x1C220DA3, 0x1E12BB81, 0x61C66C71,
+0x204BC73A, 0x0B4990DF, 0xAF5150F2, 0x656449EC, 0x05C2CF9D, 0xE03FA7E1, 0x7A3861AE, 0x82D5B2E8,
+0x42E482C6, 0xD601FF97, 0x75D993F6, 0x5ACAC664, 0x40AF632D, 0x66EA31A3, 0x5C3C05BF, 0x625CE4AC,
+0x056A946F, 0x0187F6BF, 0xA4386C46, 0x5A0E393A, 0x80CC9FF3, 0x7A56DBFC, 0x6571404B, 0xDBC7C37D,
+0xA1727568, 0x32EBF6D3, 0x194C398E, 0x3CB66ECD, 0x45667714, 0xD833C00C, 0xBD0FE8D4, 0x3C8E1F3D,
+0x04E46649, 0x0CBCB355, 0x09E58C31, 0x7B31A2E1, 0x5FACC116, 0xEA06ADCE, 0xBF48FB51, 0x1A386D54,
+0xA63182D4, 0x10FB305B, 0x005914B3, 0x62776D10, 0xF5335A25, 0x1D99C5DD, 0xFE0F4825, 0x03EA8DB1,
+0x3DC506AF, 0x3E996081, 0x7233355D, 0x8DE6087F, 0xDB91716C, 0x75617ED1, 0xA051E47B, 0xEF3A2EB8,
+0x47061281, 0xAF7EA22B, 0x63810AF8, 0x8A773704, 0x14A50BDD, 0x67C20029, 0xEE271410, 0x2EEDDA18,
+0x9B4A6E08, 0x22C8B01C, 0xEBECAFFA, 0x2B5CBA33, 0x4CAE71AC, 0xA97E650B, 0x537FF4E1, 0x24D12F33,
+0x6A2D092E, 0x0963147A, 0x8914BC78, 0x6DF49DF1, 0xD7F525D6, 0x06FBC0D2, 0x9C207766, 0x6519B12F,
+0x8B3B170D, 0x1DA99CBC, 0xBAAF11FE, 0x416EBFCA, 0xFB9023E0, 0x778E8458, 0x36A2565D, 0xAABC9E83,
+0x46A96684, 0x5B6D832B, 0xFFB2A057, 0x39B604A2, 0x25F1E920, 0x3307F1BB, 0x93DD29F1, 0x244D151C,
+0x9249EB9D, 0x1B0E59AD, 0xFB3E678B, 0xC1DF20E6, 0x3796BA0C, 0xB9882B6E, 0x1C193731, 0xDF2EDB6F,
+0xB8E7F3BE, 0x2D150EC6, 0x0E2DE707, 0x03FF49EC, 0x4457035E, 0xB213F612, 0x2DF5A1A6, 0x40549D6F,
+0x91F62F92, 0xC56762C7, 0x1B9704EF, 0x8A23524A, 0xBB77AAF1, 0x560A6B47, 0x81C743F7, 0x38EF0818,
+0xC1829B54, 0x040BC475, 0x3D24AB84, 0xE40AD4F6, 0xE9870582, 0x1AB78D12, 0xEB1B2A77, 0xA530046B,
+0x5C1DC489, 0x7BA235E8, 0x98A001AB, 0xB43D7B60, 0x259681C4, 0x1FDD2FCE, 0xFBDCBCA6, 0xEC1DF888,
+0xEBEA232C, 0xB404D823, 0xC9602E4C, 0x0D8BE492, 0x032C04CB, 0x8A5BB8BD, 0x0B23FF3A, 0xD47C541A,
+0x951D76AB, 0xD523507A, 0x3311C09A, 0xDF9E2B24, 0x5E1AAF3C, 0xF13E3AA2, 0x15978500, 0x7CC71CEB,
+0xA463CB96, 0xDD461D5C, 0x26A57191, 0x037144FF, 0xD499C144, 0xD8DAB85B, 0x3336D06B, 0x92B4DA07,
+0xA18575DA, 0xE51B1B8D, 0x79CDEF0B, 0x7F498305, 0xEF6ED18C, 0x92081B36, 0x590F70E4, 0x8E7B0D73,
+0xE6EEAD8F, 0xDE96C8C1, 0x311C0350, 0x8D55413C, 0x635C4AF3, 0x2DB35D16, 0xA734A3ED, 0xC0663AF4,
+0x0065A885, 0xFCDFE170, 0xB196BB7B, 0x4B2CBDAB, 0x0A2D10B7, 0x21E1EE6B, 0xF883F979, 0xBA5D2F82,
+0x4A1683C4, 0x2FF1D9D5, 0x185FEAB5, 0x1F8E5FCC, 0x3AB6FB34, 0x306B91CC, 0xB3EF7311, 0x3C1621E5,
+0xE33B20D8, 0x6946078F, 0x004DE3F5, 0xCBB98144, 0xC849E22A, 0xD67C76D0, 0x80F71A66, 0xD0081CA8,
+0x01BF3430, 0x2EDA0E6C, 0x8A31DA8F, 0xC85E5B88, 0x7B89CD0E, 0xA6B9C9AE, 0xD0153112, 0xA9F971B2,
+0x65EFB22D, 0x479EB088, 0xBC14C24B, 0xCB97627E, 0xCC4B463A, 0x34264684, 0x3B988694, 0x55E42FA5,
+0x08A34F71, 0x674AFF7A, 0xE87036A2, 0x024F128B, 0xF5C0DC54, 0x83B16F78, 0x97DC9B25, 0xE351BCF5,
+0x4FD6EF65, 0xF606003F, 0xF716A141, 0xAEBF53BC, 0x01CE30B7, 0x7EF2F146, 0xEBB60037, 0x0E7EFB62,
+0xE62A99CD, 0xE446649F, 0x93DFB5E0, 0x0F40F01A, 0xF1FCF5FF, 0x0583E535, 0x8AEE6732, 0x515FAC8E,
+0x35A4211D, 0xEFF52E24, 0x502E6334, 0x626A34E4, 0xE91113AC, 0xCC3814B9, 0xE06EC99A, 0x589F275A,
+0x92480F8B, 0x38C17352, 0x542F7958, 0xDECAD948, 0xACFCD323, 0x2EED488D, 0xED366F41, 0xE95B9186,
+0xC8BA9B44, 0x9F37707A, 0x0E758961, 0x7ED1DEED, 0x10C39484, 0xF5A04FB5, 0x38F8EF1A, 0x7F7C7E20,
+0x0B99000C, 0xE30A30AC, 0xDE59E9DC, 0x3A587214, 0x350F65F3, 0xA874B3E5, 0x1299024A, 0xF7947F37,
+0xB72B5ACC, 0x648ECD20, 0xB6EC0030, 0x741CBA21, 0x0ED946B4, 0x2D389D4C, 0x8466391A, 0xE266B7A3,
+0xD132A56B, 0xD6B22C04, 0x29843EBC, 0x6DC88427, 0x6B414380, 0xC6CE38BD, 0xCE5A3079, 0x1B1D8CF0,
+0x4B5DD117, 0x4A4C7F7A, 0xD06DB4D6, 0x79F64833, 0x16BD474D, 0xFF5DF6A9, 0x0DB8DA6D, 0xA51F30A5,
+0xD5776256, 0x7C9877C1, 0x0B8462C1, 0x3274A98F, 0xC21D6F59, 0xAC9FFC76, 0xE8019299, 0x0F629616,
+0x69608FDC, 0x5B6E7B1D, 0x58A334CB, 0xADDA9A19, 0x32662726, 0x10960D62, 0x36938143, 0x8F4FA9F8,
+0xAB979850, 0xEED66632, 0x0336622B, 0x93CFED5F, 0x6563289F, 0x480BD9ED, 0xCE7F86C5, 0xB4EA73EB,
+0x4650CEA2, 0x009ED438, 0xC19FA10A, 0x79FD6F78, 0x19927F24, 0x2E1A716B, 0x25FF3932, 0x320F0808,
+0x2DC3C0A8, 0xA21AAB58, 0x001C54B3, 0x19E5F48F, 0x7248FA36, 0xC088DBC7, 0xA562CBDF, 0xD1BF6FF9,
+0x9D64CF84, 0xAB749FF7, 0x20B09D84, 0x44580CD7, 0x89A53A58, 0xD3B5AB3E, 0xCC9DA316, 0x20483812,
+0xBB1AF9A4, 0xA09CB9B4, 0x2F20E1B8, 0x7F334E39, 0x4DA09A64, 0xA2471297, 0x4DDA87C2, 0xB597A8B7,
+0x407AAA1A, 0x3ABC39D4, 0xB030C2C4, 0x0B3E8191, 0x58C0B50C, 0xC102BE2E, 0xB4174200, 0x1F38414C,
+0x185F6E32, 0xCFD91184, 0xDC09A7BD, 0xDB381469, 0xEE286679, 0x0739BECE, 0x94DD8B22, 0x0E5A76ED,
+0x10525FC0, 0xEE03CEB6, 0xB63F3CA4, 0xAF50A983, 0xBF65633D, 0x2799C358, 0xC6A3492A, 0x8892A469,
+0x2D453203, 0xC96BAF62, 0xC1B8F538, 0x46194385, 0xCC87071D, 0x3E4FC3B9, 0xD2281995, 0x582A55EB,
+0xF32BA31E, 0xE8EF2F3C, 0xB887BB8B, 0xD94514B1, 0xBB498FE7, 0xC897AC06, 0x3A717AB2, 0xDE18D5AF,
+0xF6C291EE, 0x931CC281, 0x52A86CBD, 0x452BE99B, 0xD7E48792, 0xDC414D3A, 0x2E7B8D96, 0xF796D315,
+0x4A8C7571, 0x60EF1E10, 0x0CC52654, 0x0C9A9CD6, 0xB12B9B38, 0xC4423E46, 0x7AEFA007, 0x576D7F05,
+0x71FE64C4, 0x8D5BF09A, 0xB004EDEA, 0x5714817E, 0x6B97C2D5, 0x6B26A6B6, 0x4479239C, 0x8477B81F,
+0x3E00ADF9, 0x1BF3D5A5, 0x3B1E4E10, 0x8910D143, 0x9B6FACBF, 0x0D97900B, 0x9A2BA2D0, 0xEC82459D,
+0xD3FD50AE, 0xBC8B2CDB, 0x8F87F12F, 0x6AD92C21, 0xBEA2C011, 0xD8A2FE16, 0x07E2E3F5, 0x9545BE09,
+0xA79B4584, 0xC0C7400F, 0xB5508AC4, 0x9BE1EE10, 0xDAACC093, 0xF0D84750, 0x8808770B, 0x9816F14A,
+0x92E7BB77, 0x54913DE3, 0xE693CC58, 0x5963EF80, 0x0CD97A3C, 0x7867FD4D, 0xF14FCD7F, 0xD547E083,
+0x1368D8BC, 0xEF0B788E, 0x15745CE2, 0xAA961D4B, 0xD4293F25, 0x9841B9BC, 0x13A8779B, 0x06D8EC89,
+0xCA51E120, 0x423EC3B8, 0x64AAFE58, 0x2D6FB629, 0xAAD19CFD, 0xBB1A61EC, 0xC79EBDEC, 0xDFC113F5,
+0xDD9C6649, 0x3DA83274, 0x767C35B6, 0x5E6C87A9, 0x98E842DB, 0xC2B62675, 0xD63C1C9C, 0x0242860E,
+0x41590DEC, 0x496F2EF1, 0x7021F18E, 0x4805340E, 0x36D77D03, 0x042C611F, 0xC29E9B4C, 0x15E71188,
+0x958839C3, 0x477800E9, 0x6C829DFE, 0xD41E53E9, 0xC137DBAA, 0x5BD3F646, 0xA3743DF4, 0xD6389549,
+0x496FB591, 0xF7E56C26, 0xFB512B20, 0xAD095A7E, 0x07833D47, 0xEC0D8976, 0xE13494AF, 0x57DD9E95,
+0x77ADC39B, 0x5167A0E9, 0x6271634F, 0x2A4B5B69, 0x97CD382C, 0xA0F04773, 0xF3BF930F, 0x20F68A24,
+0x15CD0465, 0xF776142F, 0x1CC49003, 0x4196EE2A, 0xD24AD7DB, 0xD24CC692, 0x1F07BC00, 0x7227EBE7,
+0x88F25698, 0xDC394EE6, 0x48544E38, 0x908C64B3, 0xF9F27976, 0x3B887890, 0xA7CCD850, 0xD65C9D39,
+0xBF707F84, 0xB42DAF9F, 0x76AF64BB, 0xDCB9EB84, 0xC6D79991, 0xA2F020A5, 0x4ED7AF53, 0x6DF7E1B1,
+0x393490A0, 0x713F8EF9, 0xA2594EF7, 0x07F95E36, 0xA5469791, 0x59AD843D, 0xC9A96E6F, 0x92E9A0C1,
+0x050932A7, 0x50B754B5, 0x7331C78C, 0x666D2B0A, 0x492FE623, 0x88B56ED9, 0x884ED305, 0x108F4198,
+0xE906774D, 0x43D1A62B, 0xD19E7957, 0x890BED30, 0x24565B58, 0x2FF9216B, 0xBECDD995, 0xAF356662,
+0xAD06C111, 0xA4B51527, 0x8A4EC77F, 0xE21B6275, 0xC93C8B72, 0xDBB42C53, 0x55C0EB0E, 0x654939FA,
+0x87031971, 0x9F41F922, 0xCDFFF060, 0xFA004CA1, 0x31B9DB16, 0xE8A39A4F, 0xAC758F6E, 0xD0CE74A9,
+0xDC13FAA5, 0x643763AE, 0xB366F580, 0x2BF942F6, 0xACD027D8, 0x7C5A40D6, 0xC1FB44EA, 0xF036AD59,
+0x8C318C1B, 0xBF27A26B, 0x96B72636, 0xC95E1561, 0x55D8F8C9, 0x60A2C78B, 0x24CD8992, 0x66FB26E7,
+0x44C33C7D, 0x5B64EA04, 0xFF01F75B, 0xBC0F2503, 0x8FB8DB7F, 0xA8C228E7, 0x6CD7D079, 0x5350E137,
+0x1B172FC1, 0x5FE95511, 0x595377EA, 0x9145805A, 0x543C5122, 0x4B6047F4, 0x47855B0E, 0x536059B4,
+0xDD881778, 0x67DD50BE, 0xB3597338, 0x126CEB9C, 0x4625684F, 0x8547521B, 0x0034B59C, 0x0A95DF34,
+0xD062142B, 0x5247101E, 0x3246B980, 0xD6CC9403, 0x161834CD, 0x9F16E016, 0x0A0B2EBC, 0x16315F10,
+0x415D2FCC, 0x7550EDE6, 0xBE8F78D2, 0x2FBB0718, 0xD528D781, 0x3D646603, 0x5A83D395, 0xF19B1CE3,
+0x25644FA4, 0x0C0D5183, 0xE336395F, 0x10E4534F, 0xB7E87173, 0xBDEF26F4, 0xC32AFA8B, 0xB65C3AFF,
+0xF1B64A27, 0x742C342A, 0x98DD957E, 0x17EF01FF, 0x4574E92A, 0xE8D7B9DE, 0x02052C46, 0x720F6F67,
+0xC314B587, 0x03E30DBA, 0xE4472F4B, 0x720A08E4, 0x64963CB3, 0x52DC333F, 0x326EDEAF, 0x05CF1798,
+0x40BEE379, 0xA092824D, 0xD5511EB2, 0x2ABDC4DC, 0x3C4F3E9D, 0x14D8018E, 0x39F4112B, 0x07AF48E2,
+0x86A8B647, 0x258C1712, 0x1252CF48, 0x006972FD, 0x8A31A802, 0xF23815A9, 0xDC5B4872, 0x3BFCFCE0,
+0xE92ECDE3, 0x7A0FEE11, 0xE5E5F2D6, 0xA19B0CAF, 0xA555BC75, 0xC4DCF5D2, 0x52F83139, 0x9D6447AF,
+0x47D7A7B3, 0xC4AF4EEC, 0x8A439F2B, 0x999EF7C7, 0x6555B89A, 0x84074919, 0xEEBF2707, 0xE7A9634B,
+0x254A119F, 0x6FB9A129, 0x288BB5C9, 0x2EA1626D, 0xE5533D58, 0xF560C355, 0xF8943A49, 0xEE33A1F1,
+0xCAFC6F95, 0xF5ED748B, 0x7D8803B2, 0x3F73C6AF, 0xB0EF0C71, 0x855C9F59, 0xC8B30F8E, 0x45C14A5A,
+0x124DC191, 0x5D7627A1, 0x175DE88A, 0x3A5CC255, 0x96F96844, 0x670361AE, 0xE1C1A59D, 0xD74817AC,
+0x7A48057C, 0xFEB992EB, 0x02762DE7, 0x7D936BB8, 0x6F6DF169, 0xBEA68455, 0xA84604F7, 0xE18ECF4F,
+0x938F3C22, 0xC133EC02, 0x20A73058, 0x643D93A3, 0x7503FB7D, 0xAC85DB61, 0xF1B5304B, 0xFAAF30B1,
+0xD67E7674, 0x934F05BA, 0x7B3B7823, 0x49423966, 0xCA9A8662, 0x2F252A47, 0x8C9AACF9, 0x6E961C78,
+0xB6A2FE5F, 0xFAEA31CE, 0x1315CF26, 0x2B252215, 0x6E14E122, 0x47C0B2C2, 0xBA271EAD, 0x280F1EED,
+0xB2C719A3, 0xFF51B84F, 0xEE285A46, 0xF8CF596C, 0x9189439F, 0xCBEB108A, 0xDCF9EBFA, 0x311F01CB,
+0xE6030A4C, 0x0015F8C3, 0xD63E72BC, 0x9EEF5B2C, 0x5A518401, 0x90205525, 0xD01C6112, 0x40558EB3,
+0x668904D3, 0xFE894E25, 0x04EB0A4B, 0x8495DEEF, 0x02794D32, 0x313244E6, 0x888A2598, 0xC9390108,
+0x7B7A3133, 0xD5CC84B4, 0xC133A908, 0x6F489C95, 0x4A359ABD, 0xE4B5CF8B, 0x9EF080C3, 0xEE2D6EF6,
+0x0F25DD9C, 0xFC248402, 0x4F323132, 0xE2BD9779, 0x8196214E, 0xBF64CEB2, 0x13872AD9, 0x23B95AB5,
+0xC3E50CA7, 0x1E7B01DD, 0x5D2C6998, 0xDE39517D, 0xE19FF7A6, 0x727C956A, 0xF02BDE75, 0xDFE04D93,
+0x7DDFC7DC, 0x198F1EC4, 0xFACC8AFD, 0xEA1FCC85, 0x7A61ED07, 0xACEF71C6, 0xDCB32A6A, 0xB21C00E3,
+0x9A3585F9, 0xB257F961, 0xB04BAFCC, 0xCF0D91B1, 0x3A2F2E02, 0xF8627328, 0x437C5140, 0xFDDAB4D1,
+0x1EFD6C17, 0x8F4FDEFF, 0x376DB768, 0x469A80DC, 0x47DD3BBC, 0xA2481EEE, 0xFBB00F9A, 0x50CBF9FA,
+0x3F9EE5E1, 0x7232CEB1, 0xA6A1D8B7, 0xBF21220B, 0x35F10C7A, 0xCF783CA0, 0x2C2D6272, 0xFFF2271C,
+0x813C2891, 0x1B11F621, 0x43A81740, 0x100CE39C, 0x644F9BCE, 0xA51E74C5, 0xE82542B9, 0x8BF5AF83,
+0x3CA43404, 0x3817F48A, 0xF520EAB4, 0xBB50B2E9, 0x99C1C4B0, 0x19AB1D9E, 0xBFBF324F, 0x88AAD529,
+0x5EAABB34, 0x3D34E6CC, 0x965E823D, 0x7DC61ADD, 0x1E79F506, 0xAD6DACC2, 0xC65BC5F4, 0xBAD5C49A,
+0x8095C05E, 0x650F02EF, 0xAAAE874D, 0xDD57AFEB, 0x553A3728, 0x4455CF8C, 0x7F38C5AD, 0xAD7B9F96,
+0xCC3B004D, 0xC666B040, 0x0B1D601B, 0x2B2099D7, 0x3E1FF5AF, 0x8CC9C5DB, 0x515866BD, 0x5B6380EF,
+0xDBC06D84, 0x176122C1, 0x7B858292, 0xF4AA3728, 0x80FA01CB, 0xA0B47899, 0x64957A92, 0xDE8CF419,
+0x5AA687A6, 0x8B04AC8D, 0x494B5A5B, 0xE22DDBD0, 0x26E1B447, 0x107B05ED, 0xD3DD26E5, 0xB340C475,
+0x4BF48DE8, 0xA2B42A43, 0xB41E5302, 0xB306C86E, 0xBF19C860, 0xB4371A20, 0x278DFF3B, 0x6FD3FF69,
+0xDEB137F9, 0x74E12C11, 0x835577B4, 0x2F178677, 0xE761543E, 0x2269F66D, 0xAC238FB9, 0x929D4304,
+0x2F937B32, 0x784D97A8, 0x3F022532, 0xB6576CEF, 0xA6801431, 0xFDD4477D, 0xCAB35136, 0x5E8C34A9,
+0x8077E1B9, 0x3F3F1BE7, 0x6F32B558, 0x69D300FB, 0xA5AFBFA4, 0x38584FE8, 0x76E1C531, 0x8DBC8566,
+0xBEFB94B2, 0x1B24A7F9, 0xDFF3D923, 0xA80C7988, 0x7EBA94F0, 0x373F2735, 0x03501A69, 0x05CC1AE6,
+0xD1E92B28, 0x38A1F251, 0xA3019119, 0x6E4112FA, 0x02EE6D79, 0x20D07D6F, 0x5D1F5F33, 0x987DEDD5,
+0xC18BF987, 0xD02441EF, 0xBFBD7B3E, 0xF7B7B368, 0xA0E7F333, 0x6AD1455C, 0xC9697ACE, 0xA4567A33,
+0xD0D3A37A, 0x87B57A74, 0x1CF8CF97, 0x5E44A300, 0xC70438D5, 0x1DCECCC7, 0xF3C757AF, 0xA002AD16,
+0x833425D5, 0x15A04577, 0x78717735, 0x8A9F9BC8, 0x10820B18, 0x9A4EA6D2, 0xAB6B537E, 0xFCB79CA3,
+0x6DC02C89, 0x90EB58F4, 0xCF2324A9, 0xB6E2B9DD, 0x0C6B2638, 0x84CADB3B, 0x4D8288E4, 0x77BBCE94,
+0x92189039, 0x98C87E64, 0x8E49D8BB, 0x33261035, 0xA43EEA6A, 0x9F91DDDB, 0xBC9FD6F4, 0x17A7D375,
+0x281289EA, 0x69467F52, 0x8644B7E7, 0x4CECB342, 0xE15C33AB, 0x967EF50B, 0x0E610556, 0x11D58F9E,
+0xB258A02F, 0xCE8FEFCE, 0xC9EEA995, 0xF36EC3E3, 0x7C18946E, 0x76999998, 0x54F4333F, 0x625CCF61,
+0x7FB90866, 0x05B496D1, 0x060F79A2, 0x8DE85539, 0xA2B10BDF, 0x34F728B4, 0x52C95AA4, 0xCFC6677E,
+0xBCFD832C, 0x9A6E976C, 0x037BEAAA, 0x997BF916, 0x7573E2D9, 0x0E07622E, 0xDE034303, 0x25BFEC88,
+0xD79CA5F1, 0xD4D89303, 0xCA073125, 0x986289C6, 0x7A7B319B, 0x56B45428, 0x4657D2E3, 0x4A981951,
+0xF3582E9D, 0x754B114B, 0xCFBFF592, 0xF21F083A, 0x1A726978, 0xA0459116, 0x4067C701, 0x43689E85,
+0x94CDAC77, 0x2BCD0659, 0x27FFFD6D, 0x8FD03E45, 0x1D223779, 0x95939C0B, 0x0E1DA597, 0x3A19F2A3,
+0x224E100E, 0x108C483A, 0x3D9B748A, 0x79304C42, 0xCBB964D2, 0x5483B7DF, 0xC348C36E, 0x7514AE5D,
+0x3DFD4B48, 0xE485E3E6, 0x17B84001, 0x07195393, 0x813E1F0A, 0x56A904C3, 0x3AFD9024, 0xF59CAAF0,
+0x72A63438, 0xA93DCA32, 0xACE2F2C4, 0xE22D15DE, 0xA6282250, 0xE3896766, 0x584088BD, 0x4887D2F3,
+0x803E4422, 0xB94EFDBF, 0x7F72F95D, 0x57C7CA6F, 0x990DA837, 0x59CAEA45, 0x7F98F50B, 0x6BED77F6,
+0x674DA87A, 0x9EAAFA79, 0x4CB8D353, 0x46567F2F, 0x5784A229, 0x772C8E47, 0x24CDA613, 0x1A1AFB21,
+0xA3EEDD86, 0x29291407, 0x161CD039, 0x6E5ABB11, 0x569B2D61, 0x7B7F0D3B, 0x03C50865, 0xB93F04C4,
+0x153B2E5F, 0x01BB6DE7, 0x64F048BE, 0xA8F2E2C2, 0xF3118A9D, 0x5B958758, 0xC1682FAD, 0xF49BB5F1,
+0x6323C168, 0x055B9B37, 0xA51326D3, 0xE3F64E04, 0xFB0CFCAF, 0x1ECF94D5, 0x3A620FF0, 0x554F96B9,
+0x0DB9DC48, 0xDC6F5D5B, 0xC13BD3C3, 0x9C2E6773, 0x019C72AD, 0xB54B2F92, 0x5708C948, 0xFF8F774A,
+0xDF5DD8F3, 0x86B3B296, 0x84F356C9, 0x3E82AF64, 0xC1F14D6C, 0xE32EA783, 0xA11227B1, 0xC55DD789,
+0x03393E2E, 0xEFCD4DCC, 0xFB7BFF02, 0xF3E2570B, 0x75219802, 0x708577E5, 0xC8302B4D, 0xE00CD14E,
+0x7244AB27, 0xB16BE1ED, 0x72C43FEF, 0xFA40E208, 0x4DE92928, 0x9CAB26A4, 0xB99A67F2, 0xF22E3F2D,
+0x8FADD2FE, 0xC1485A46, 0x9EEE0537, 0x00314700, 0x44AC510E, 0x22EC815F, 0xF7E52267, 0x0D0F43DE,
+0x43B6256E, 0xF419DAE2, 0xD6FCABB5, 0xC1DE728A, 0x84FFA16C, 0x6ED9E7C2, 0x1C5C4E11, 0x7BB08615,
+0x5AF5037C, 0x3300FB6D, 0x447FAAE8, 0x6D32B0AA, 0xD982AD8B, 0x36D6A7F1, 0xFAC398E1, 0x6C8BA699,
+0x391F1658, 0x5937A9E8, 0x460D8246, 0x0C8EC0E9, 0x44ED5703, 0x479FE3F1, 0xC48C8C6D, 0x608D2AB7,
+0x953C7493, 0x2CC6AC2C, 0x56851314, 0x61BE3631, 0xA7970911, 0xF5A5F3DC, 0x25E13921, 0x7284E11A,
+0x9D39443B, 0xD57A3FB3, 0xAB237BB9, 0xE8489DE0, 0x3CE172BF, 0x291EFD68, 0x63097AA6, 0xDA8F8CAE,
+0xF4C6223A, 0x813AE7E8, 0xFF46EC54, 0x07E79E70, 0x9F249FE9, 0xAAAE20A0, 0xD53D41AB, 0xD74A44F3,
+0x947CF2CE, 0x37A3B07B, 0x09ACDAD6, 0xA071AF39, 0x6E6FF666, 0x6DCBED97, 0xA0E330B3, 0x6D380AF0,
+0x17EA7D80, 0xB9857B38, 0x8683614C, 0x7C0D7E86, 0xFFB2FE4F, 0x60C94B9F, 0x87245C15, 0xEC65C411,
+0x393769B9, 0x5F19C507, 0x47D511BB, 0x1FA9946C, 0xC0129B6F, 0xAE95B3E1, 0xBBB599CF, 0xCB6D64C9,
+0x4DE12798, 0x7756161B, 0x2D396118, 0x1D65BD3C, 0xE6A0EC7D, 0x0F02AA84, 0x70BFBE71, 0xFC039226,
+0x49032365, 0x97DF15AF, 0x310E8370, 0x36D81FAC, 0xE4D28A4C, 0xE993B8AE, 0x81EA4CD1, 0x75A81CD1,
+0x8E7459A3, 0xE73FCE77, 0x4AF4280B, 0x0F4D46D0, 0xD174A308, 0x1376B268, 0x2C60389E, 0x30FB4DF5,
+0x80E97A48, 0x4022C6E9, 0x64261DF5, 0xC61D4F5A, 0x6BFC2C13, 0x9CB760E8, 0x9E889469, 0x3D26157C,
+0x9B624E71, 0x3DD219E9, 0xA03CE415, 0x3C84848C, 0xCE2C72DE, 0x465CCB21, 0x3C048961, 0xF6547018,
+0xE045D051, 0x54782CB9, 0xBB4903B4, 0xE71D5188, 0xF1339380, 0x37E1ECFF, 0xB1463E2C, 0xFF7DE814,
+0x47CCBE1A, 0xAE64E0D9, 0x488773CE, 0xB5BABB8C, 0x6D5A1113, 0x184FB17C, 0x7B97A649, 0x0A71763F,
+0x55FDCDD7, 0x7729BC2E, 0x35C2B786, 0x85615213, 0x1D796B0C, 0xCA859B52, 0xE1025031, 0xE3A27D93,
+0xF95760B4, 0xEEEE56D1, 0x97C3DE86, 0x3C756C80, 0x89933D37, 0xCC22E217, 0x30C8986B, 0x4A70EE1F,
+0xC5EEF252, 0x1FFB50A4, 0x69EFEE6C, 0xC27A559A, 0x2268D7AE, 0x2F5B25AB, 0x6A303A79, 0x87CEBF26,
+0x8AE067C3, 0x3BCB07F5, 0x65F1048D, 0x42EDDDFC, 0xC3E264F0, 0x24278FFE, 0xEF9DA6B7, 0x91BA2044,
+0x5D90AC99, 0xC4B6EF81, 0x01FA0785, 0x721DB87B, 0x782389E0, 0x55C73E50, 0xFF07B2E9, 0xB13E385D,
+0x91AF0743, 0x3BCA4B8D, 0x95B79CA8, 0x66BC3D96, 0x468FE8D3, 0x7C62CFD4, 0xAC25A72B, 0xDCD30F0B,
+0x344B4B34, 0x2457A483, 0xF2DEE70D, 0xC20DDA0F, 0x5405C0CA, 0x92590F18, 0xAAD58E66, 0xCB8FDE55,
+0x958E7E4D, 0x8CF3603B, 0xE61ADBDB, 0x1C6A4208, 0x60758642, 0x72BFE968, 0xE8701612, 0x697DE49E,
+0x16E24CC7, 0x8EF01840, 0x7F64E74D, 0x70488057, 0x13A7B343, 0x75F075AE, 0xD7C8FAC5, 0x985C7941,
+0x9B669A77, 0xA83827AD, 0x5393ABA7, 0x93F205A5, 0xC0BF6D72, 0x7006F41E, 0x319A1DDA, 0xAEC92523,
+0x9ECF5351, 0xC35E160B, 0x5CB00ED9, 0xF9790965, 0xB9BC8F0B, 0xFFBB4756, 0x097E60BB, 0xC7956C30,
+0xDC35AE74, 0x09DD8D58, 0x0FF5A63A, 0x2F0268C8, 0x2AB2E37B, 0xB6D438AA, 0xB6BB6BC6, 0x348183F4,
+0x61FD8E57, 0x32547036, 0xD7CCF4D4, 0x33368429, 0xA47E2C23, 0xE4CD5F2B, 0x2E710235, 0xE38BC804,
+0x825BE816, 0xAB02FF69, 0x1C410F99, 0x9648A805, 0x0A78D53F, 0x4BCC4E01, 0x4A72626A, 0x6A9200DF,
+0xAF5678FA, 0xD192B6C2, 0xD61366D5, 0x7B13BF5C, 0x4E2ADF19, 0xEFEAAC34, 0x43AEEB53, 0x29A17DDA,
+0x1F1FB700, 0x22508E77, 0x1EC77D5D, 0x60B841EF, 0x89FE2CAC, 0x6B9818D1, 0x0302A4E0, 0xA45F580A,
+0x1241CD9E, 0x5D12B55B, 0xBD238A95, 0x96A0E8EE, 0x215734C1, 0xD41AE84F, 0x01175993, 0x9974160B,
+0xE87EB6F1, 0x0838FC02, 0xE1E68A5B, 0xBCC5EE3F, 0xFDAD5854, 0xFF91BE80, 0x12B516BD, 0x8D4C54BB,
+0xD7F3135B, 0x5050DDFB, 0x65E365F5, 0xEA5B478C, 0xC04876E3, 0xF594525E, 0xAD758CE0, 0x134E2E51,
+0x153BDDA0, 0xD5898163, 0x8F19D88A, 0xF29BD444, 0xE1435F4D, 0xA27761B7, 0xAF511FB2, 0xBFD10E65,
+0xDEBF11DA, 0x4235395E, 0xB005216D, 0x4251B746, 0x27539541, 0xB1BAE702, 0x56436756, 0x157C708F,
+0x3F71EF03, 0x9DE480D8, 0x20C64F13, 0x8A64157C, 0x746A4D34, 0xA9AB00A4, 0x7D6D7CC5, 0x38C16B43,
+0x089E9A00, 0xB9F4D293, 0xA9FE88BF, 0xBF6781F0, 0x3542313B, 0x0FD4CEC4, 0x5C63DDFD, 0xA8A1FB14,
+0xCB70C46D, 0xBFA8905E, 0x9338F313, 0x5BC722DF, 0x98F186F0, 0x60921EEF, 0x8CE732CF, 0x4B6D42D2,
+0xCD438F6C, 0xE62706DE, 0xEE0211EA, 0xAFAA1599, 0xFD88471E, 0x20B8E3EE, 0x9468540F, 0xF82ADB58,
+0x6B9B9936, 0x01989E3F, 0xAD9A73D8, 0xCA6C6FE4, 0x28D4C1EB, 0xA5735EEB, 0xBCB8A4E9, 0x65202C40,
+0x4BD2763E, 0x21C9312E, 0x6A38234A, 0xF3C00724, 0xA4784701, 0xFB3DB0BC, 0x51F4B4B8, 0xE3D72E5D,
+0xAF62E558, 0x61887DC0, 0xCA4DC55F, 0xF9DC6589, 0x90F83B1D, 0x62769AE8, 0x14DBE5EB, 0x2141C8AE,
+0x8252BAB3, 0xB93623CC, 0x5E7EDB2F, 0xB96DD204, 0xC77DB83B, 0x50E890FC, 0xA4E27A92, 0x91F2CA05,
+0xADAC6C7C, 0xF2678730, 0x32FD265E, 0x86B867E8, 0x1D45EF85, 0x8F964B00, 0x5F3B6D9B, 0x40E6C404,
+0x3700B86F, 0x47044BB0, 0x836C3F7F, 0x388912F8, 0x0F41D4CD, 0x0963216C, 0x815168FD, 0x39EEFE2F,
+0xFBDD7F2A, 0x2115209D, 0xE2BF5DA5, 0xCFE1F2DC, 0xA8D96299, 0x35F6C081, 0xCD2A625F, 0xD5135379,
+0x7E26ED9D, 0xEEFF2039, 0x91C1F358, 0x34F1259B, 0x692B106B, 0x7DD8E3AE, 0x745E22B2, 0x684B2945,
+0xBB6B9590, 0x1252ABD9, 0x2A320F65, 0x10FCAE92, 0x591090D3, 0xC6FC14F2, 0xFC9224EB, 0xFB730D1A,
+0x0778BCCF, 0xF8C4E6BE, 0xD9472314, 0x77C68CEA, 0x8BACFC22, 0x434AFC18, 0xFB6B96A5, 0xFEEE1D3A,
+0x4F7ACB7B, 0x86B73E77, 0x3867ED43, 0x9074BD5D, 0x5F5CE618, 0xEA717EFE, 0x1A2455BC, 0xDAF76A35,
+0x475516D5, 0x10D28046, 0x035EB9B1, 0xE5C037D8, 0x926658B2, 0xA790F838, 0xBFEC4702, 0x8609AB27,
+0x74E193D1, 0x68D334C2, 0xE838BE4B, 0x63D77876, 0x10E0A074, 0x13A2B62B, 0x56808F54, 0x7C349F69,
+0x45884B40, 0x14A2DDDE, 0x2CA2B6B0, 0x60D30191, 0x9FA7A7E2, 0x31170D1F, 0x501A53E4, 0x902E19D9,
+0x896DB347, 0x83EA1F0B, 0x9C0732CC, 0x274AD11A, 0xEBA139BD, 0x0FCAF160, 0xF3883071, 0x1A2D56FF,
+0xD6D9058D, 0xFF1E6B75, 0xE1D7F609, 0x8538990F, 0xA32CE004, 0x6F7463DE, 0xFEAC832F, 0x764072B3,
+0x9331EB79, 0xF1C2FDF1, 0x75146044, 0x1FD84BF4, 0x67CDE398, 0x43593D87, 0xC79E02BE, 0xD7C725F3,
+0xEE7922A2, 0x8D59450E, 0x8E45DE34, 0x9CBB0687, 0xE8FC8DAF, 0x100AD540, 0xBD16352E, 0xCA3E966A,
+0x6FDE0589, 0x7BAB99F7, 0xCB98EA72, 0x781E9C4E, 0xA0F1DBEB, 0xC3AF0DC2, 0x6985616B, 0xE9329D2F,
+0xB75A0B35, 0xD7FA15BB, 0x0B99F603, 0xB3AA0D95, 0x60126A82, 0x496B4FE5, 0x5C2EEBC9, 0x3EC3B1A3,
+0x78F4DED5, 0x8CEDC2BE, 0xDCBF36D2, 0x2D6FBE0F, 0x44A1FE4C, 0x81D82AB4, 0x9BE00743, 0x6BA21952,
+0x5057D5A8, 0x4F8DC2C9, 0x77FBFED4, 0x1D181E70, 0x4C58DEC1, 0x39998CFC, 0x9CC25CC3, 0xFB7E1229,
+0x101AA3AA, 0x27BF6039, 0x5551120E, 0xDB6D27B8, 0xF189B507, 0x8D22C405, 0xB407B7E5, 0x0FBB6A21,
+0x3F0D729E, 0x3090429F, 0x4BD9420B, 0xC547D432, 0xB613AB5E, 0xA2CC8237, 0xCE141EBF, 0x71F7BC93,
+0xBE8D06AE, 0xA88654BC, 0xCE2CB760, 0xF652F689, 0xD5531FB0, 0xEC82A193, 0xD09F9001, 0xE459B4DD,
+0x67C0762B, 0x5130C827, 0xE65E26A4, 0xF7A3B585, 0x86046BA8, 0xD47AFE37, 0x72EB99D0, 0x0676041E,
+0x7C4CC985, 0x45A993CD, 0x1436215F, 0x17A78566, 0x1552999C, 0x239EFC5C, 0xBB86CAF7, 0xC3D9A0D7,
+0x9FD009AE, 0xF463396B, 0xF66B4A63, 0x701B2B85, 0x59A23AE6, 0xFD62BE0A, 0x585F752E, 0x1E8029D6,
+0xD64F5D38, 0x49D52A36, 0x018FCF83, 0x923D13EF, 0x38B2F5C5, 0x914B6E66, 0x0AD631F6, 0x21240EE0,
+0x15D2BE8C, 0x7A452742, 0x136F2C31, 0xB9D4FE0A, 0xED2B8C93, 0xD6EB19EA, 0x40CE0017, 0xB3F69E14,
+0x86C3ADB3, 0xD1618801, 0xDD69A7E4, 0x7EB6E970, 0x60D84E69, 0x2AF7A692, 0xBDEC2E3F, 0xAADE0108,
+0xD317C547, 0xBB4518DF, 0x2B55BA9F, 0x9B9362B2, 0x4C8D852D, 0xB45A64E6, 0x946289CC, 0xCFB08647,
+0xCF24FCD7, 0xB75C0F6A, 0xD4B3F03C, 0x5A4A9887, 0x49948E0A, 0x3560C825, 0x13E08C78, 0x99C74FC0,
+0x7CD370AB, 0x066E5C70, 0x733301E1, 0xFBFCA21B, 0xBB55F119, 0x9FB3D6B3, 0x2D60C2F0, 0x0F08D22D,
+0x3601B27F, 0xEDF7FA94, 0xF2CC682B, 0xE370ABBC, 0xBDA55816, 0x3B1251FB, 0x5A078885, 0xA6A48C85,
+0xC66107F9, 0xFF77DD64, 0x9F20901A, 0xA3EFAA5B, 0x9655EF88, 0xDB61ECA6, 0xD334676E, 0xBF961FAE,
+0x97CEE607, 0x584428C2, 0x06E696D6, 0xE54A2BE2, 0x180820BB, 0x3F9EE1B1, 0xF0FF8778, 0xE6088F48,
+0x2066795E, 0xFE4EF080, 0x72AA02F6, 0x5B3EDD1B, 0xF520213F, 0xC1E69D5A, 0xCD9E4F00, 0x5E4F2F21,
+0x461FB3E9, 0x0A6B7E21, 0x6F5A9712, 0x9A262D89, 0x26A3426A, 0x021B0657, 0xDCF9CCE6, 0x3821C257,
+0x126D1D0E, 0x0B8FD4D8, 0x0DA43540, 0xFCB544AB, 0x1C672189, 0xD84585A5, 0x4385E40F, 0xB08D794F,
+0x7EC75149, 0x58EA8C68, 0x1B518B56, 0x5DC1F974, 0xD782B353, 0x4C90ED15, 0x701793EE, 0x54968EEB,
+0xEF4DE943, 0x3A2BA9FA, 0x1BFA301C, 0x505E898D, 0x7B8A4675, 0x42C29B98, 0xDB6F5670, 0xF0D253B8,
+0xC4D20AFE, 0x75F1EB90, 0xC81CCA9E, 0x09DA5F91, 0x7502492E, 0x599429CD, 0x99AFB8B7, 0xCC1112B7,
+0x25FCD3C3, 0xA2509319, 0x4D39E6C5, 0xE6F4380B, 0xC2C09FD5, 0x99700BAF, 0xDBC795D9, 0xE50B1DF9,
+0xA444F0F4, 0x7B29366B, 0x305483AB, 0x997E919F, 0x8BF8C4E7, 0xF415ECC4, 0x51525546, 0x304CCB30,
+0x977E4174, 0xF665EE8A, 0xB015B2F5, 0xFE3B00F8, 0xDEB4AFE0, 0xD025CADB, 0x496EEDE3, 0xFCA14D04,
+0xA0925E6B, 0x44FB77E3, 0xEABFA56F, 0x88EC5278, 0x2937E775, 0x651427E3, 0x4CB15A8D, 0xFB556C89,
+0xE6C80A28, 0xC78BB836, 0x1ACD3489, 0x24D0BD54, 0x3F69B782, 0xB7BC2ADC, 0x6A9120FC, 0x8F529881,
+0xC4E6BD40, 0x4E021058, 0xA2322260, 0x8B4483A4, 0x682A0C9F, 0x56BBCE55, 0xD6FDC301, 0xAC45078B,
+0x92FC6AF0, 0x527D4422, 0xFBCF84FB, 0x37196324, 0xC4781939, 0x01830717, 0xCA41D27F, 0x66C488BB,
+0x448EAAC5, 0x02B3D424, 0x05396DCC, 0x62F9C3C4, 0x1400FA35, 0x1F333A04, 0x60EB18D9, 0xFCDBB096,
+0x30B67784, 0x6EDA9A85, 0x37365D55, 0xC3B51BCF, 0x8C98BB81, 0x18E5C4BC, 0x1AD47777, 0x4C76B260,
+0x0EF25D87, 0x4FB53484, 0x252BB450, 0x7C436065, 0x3DE2A311, 0x9A02F0F7, 0x26DCE38B, 0x8B00B729,
+0xDA29988E, 0xB8DFF986, 0x29722D5D, 0x56813073, 0x561E9223, 0x00B51DEA, 0xBD9A177F, 0xF1B02C6F,
+0xBBDE1FE3, 0xC7FC2073, 0x78189E95, 0x99C1CA25, 0x22570033, 0x99ABF4BF, 0xB3AAF039, 0x00CF448C,
+0x395BF35F, 0x20FDDD11, 0x39DE1F04, 0x871F0173, 0x4FE8487D, 0xC546D50E, 0xD6E1DCDE, 0x91CAF9FB,
+0x468F8750, 0x6BFEE1BF, 0x13A60E99, 0x0AA7DC4D, 0xC5323C62, 0x7DA2CDEA, 0x539875B0, 0xD0444476,
+0x0CC42BF6, 0x2B2FF4CE, 0x1B90472D, 0xEE075CA7, 0xB21E3833, 0x3D77A022, 0xCBCD164C, 0xB99F9D4E,
+0xAD7E1401, 0x30FAC5D6, 0x95EDAD42, 0xB64583AA, 0x8AC6FCCF, 0xB6978D51, 0x9453241F, 0xCC945F89,
+0x53A6258C, 0x70B9C1B7, 0x2FC1DF92, 0xA930A4D0, 0xE63C666C, 0x7EEB7B5F, 0x068F935E, 0x9881F000,
+0x627B4EAF, 0xE4F732F1, 0xC42B2680, 0x0C73770D, 0x0A5727CE, 0x80140723, 0x8C8C08C5, 0x1ECB0F9E,
+0x33A1128F, 0xAD9AD2E0, 0xEBBCF2A8, 0x5FCFE24D, 0x4694B5D7, 0x2B6D30CB, 0xCBCAA714, 0x60111356,
+0x9FDCB59B, 0xAE8F87B3, 0x62082921, 0x382C866B, 0x56F22104, 0x8D23CC63, 0xEDBF3BB3, 0x0A659203,
+0xBF7552F2, 0xECF93163, 0x5443A896, 0xC774F145, 0x74626CCF, 0xEFFCF6AC, 0x3F77C891, 0x636780B9,
+0xBEEA473D, 0x894CBCF4, 0xF25009DB, 0x7BB1F089, 0xED2D4EA2, 0xF40ACA26, 0xE129BE8F, 0xF1A37DB8,
+0x11EC5D88, 0x06B5A907, 0xDE7DBF82, 0x22C61C66, 0x67405C61, 0x7D303EBA, 0x504F6773, 0x485599BE,
+0xF6D567AA, 0x2C7B94B5, 0x2375E1E5, 0x0B7B360B, 0xB9481608, 0x237A49E1, 0x4B3CF075, 0xF380D33E,
+0x95414189, 0x4974FEFF, 0x2EC453AD, 0x87F46BDD, 0x8E91B39F, 0xCEAAAAD1, 0x89F283A0, 0x93C866C3,
+0x91C07E04, 0xE7D7FF41, 0xABC413EB, 0xA99CF666, 0x2881FDB7, 0x532B51F4, 0x9BC21E2F, 0xE8C17EE0,
+0xCAFC6F63, 0xD8F64286, 0x87FA393D, 0x626F8D00, 0xCF0EEECE, 0x36FF03CE, 0x816B543D, 0x8E9C8E17,
+0x9DCEE4C2, 0xF64DA0F7, 0x5925D92B, 0xF4D5D359, 0xF8468C83, 0x3F9D1421, 0x51595529, 0x24E861E6,
+0x9198EA47, 0x9F04819F, 0x9D5FDA9D, 0x280D933F, 0xBA07280D, 0x3E544E27, 0x7E84A24D, 0x6BE1B595,
+0x6CCA5BDA, 0xE75E46F7, 0xA9B0E2FD, 0xC490BE25, 0x3CCB6444, 0x625608DB, 0x532EF9FB, 0xF924BDC6,
+0x30DC30B4, 0x9DABA905, 0xDA4ADED0, 0x466D5BD2, 0xD13C6D04, 0x6F6F8D77, 0xF39EB1F7, 0x25522D62,
+0x4570974E, 0x75B2F7BF, 0xABF747A4, 0x56FBA6E8, 0xF00673A4, 0x244684D1, 0x1232247E, 0x60EEE935,
+0xDC2975CB, 0x0F2E8CD1, 0xE18603D7, 0x10EB172B, 0x2024FEB9, 0xB8BFFF47, 0x39A7CB29, 0x7D3860CE,
+0xE2EAE483, 0x21F4B6EF, 0x4E5FE682, 0x37364A4A, 0x06A38032, 0xECF093F7, 0x2A64487C, 0x22D97834,
+0x29AFC50D, 0x6A2BA6E7, 0xA923F072, 0xC2C84C97, 0xEAC48672, 0xF2F4C3FA, 0x15F16C4E, 0xE02F857B,
+0xD1DC3C2B, 0x4F37DCBB, 0x8C4282EE, 0xCC53D02F, 0x7B393BE2, 0x54AC1DAD, 0xB95D8C28, 0xAB3AF8BC,
+0xA97DE1ED, 0x7C06C7B5, 0xC6FB7D04, 0x8B1ECEDC, 0x85639FB7, 0x8379DC56, 0xFFE2BA84, 0xD85DCE1C,
+0xB723231B, 0x1345C118, 0x3359703B, 0xD317AFE2, 0xF4D88742, 0x00FEA26F, 0x4E55A76D, 0x430ED94E,
+0xEEEF938A, 0xD6368A84, 0x5FB5F2A4, 0x2E0C3A0D, 0xF95CFF70, 0x1492B735, 0x5482BC9F, 0xEC768242,
+0x7524F84D, 0xD5BF4CCE, 0x568D3C27, 0x713C77C7, 0x0348DA5E, 0x1D2778BF, 0x465FB50D, 0xF5EE1099,
+0xA06207C3, 0x861A7FE9, 0xBDA4D945, 0xAA884EAC, 0x654BBD1D, 0x2D156DC3, 0xC7200DF0, 0x7BC793A0,
+0x48655492, 0x6CD72082, 0x53E0E169, 0xD6C8ED66, 0x8F91C0BD, 0xDC8E62CC, 0xB231F003, 0x4D140113,
+0xCE420559, 0x0F76B28E, 0xDE92AF26, 0x73CA5502, 0x48DE03B0, 0x4D3BF493, 0xC1A61E8C, 0x722AFE8E,
+0x391B5E85, 0xB335AD1E, 0xB212DB17, 0x845BE006, 0x72AEA2F7, 0x3C0C8EF1, 0x3D0377EE, 0xE85BC07D,
+0xAA580BBB, 0xEA62B50A, 0xB66C56BE, 0x52EFA75E, 0xF36E7EA2, 0x6D1EC3A9, 0xB2ABE6E6, 0xA5B7E2B2,
+0x7EA2D093, 0xB00E9EF0, 0x2814EDB5, 0x70FF560E, 0x760C209F, 0xD9FE50B9, 0xB7E9A326, 0x672B2DAB,
+0xCE21C6DA, 0x22ECF3E5, 0x34BAA321, 0x31B9D033, 0xF8FD4A0E, 0x83FFEB82, 0x13CBDECA, 0x60C23718,
+0xC5E31FCA, 0x21C7B549, 0xB8728BC4, 0xB4AB069F, 0x39A78AFB, 0xBF9A4086, 0xFF0C63FE, 0xFDD8768D,
+0x68884B96, 0x646E3A1E, 0x100E9872, 0xFCF11931, 0x199BD43D, 0x23DD299E, 0xC1A929C9, 0x0AECD3AB,
+0xC2433C87, 0xD3284EDC, 0x082BE217, 0xA2F61176, 0xDAAA70D2, 0xF99C829C, 0x095F8806, 0x8C0E065D,
+0x9B75666A, 0x5ECA07A5, 0x42DE1E71, 0x058B87DA, 0x6FB0178C, 0x86711B74, 0xE7E3FC4E, 0x0685D1B1,
+0x95A66098, 0x2652CF20, 0xCAB6FBC9, 0xA9F3DF22, 0x3EA1EE9E, 0x1DF94F0B, 0x361ED76F, 0x580A5BC1,
+0xD74F9E8A, 0x37A071F4, 0xF8260077, 0x1F8BF65D, 0x78499C56, 0x0EED3255, 0x06EA8777, 0xB8B396B1,
+0x937B4528, 0x2DA8A226, 0x46CC208E, 0x7BB2A3FE, 0x8D8D4198, 0x6A2DFEC5, 0x53CA5522, 0xEDD4B402,
+0xDEBAEB8C, 0x93179243, 0xC16D2D23, 0x86BFF262, 0xEC80D523, 0xD2A4E24C, 0xD94F3CDC, 0x96C9CEAA,
+0x001F9AB6, 0xD0ACDBE0, 0x5A019553, 0xE88B49B6, 0x07932B49, 0x06936B9A, 0x4C350612, 0x81F4763C,
+0x31847A58, 0xD689C6A2, 0x0552680E, 0x2D8B7AF5, 0xA2BF29D8, 0x2141F268, 0x5F5B7F3C, 0x94AF4E91,
+0xC2B460D4, 0x44CB6600, 0x469571AB, 0xFDAA0217, 0x8FEDAC98, 0x600125C1, 0xDD27C4E8, 0x6821CBE9,
+0x90B6A1A1, 0xDCFEBF26, 0xFA3FBE41, 0xCC915BB9, 0x2C4564DB, 0xED6F8226, 0x32733DA1, 0x98617DE3,
+0xA6FF7E0A, 0xBC25107B, 0x596B885B, 0xE3898CCE, 0x4C0C0B90, 0x59EAD21D, 0xB606E3CF, 0xF99C734A,
+0xF04D83C0, 0x02A34C09, 0x17CAF90A, 0x74F2D0E6, 0xA481D418, 0x336A35C4, 0xCA45E918, 0x79692B01,
+0x423F6495, 0x3584DE4D, 0x17D01B0C, 0x831D8A79, 0x95AA8505, 0x8B46057B, 0x4C61806B, 0x23A24389,
+0x7B5E06C4, 0x3FDF21B1, 0xD257EDDF, 0xADA84060, 0xAD2A3EB2, 0xDDD7FBEE, 0xAB3410D7, 0x80D81D91,
+0x3C73CA34, 0xDF9577C0, 0xA884D603, 0xBDFC41A7, 0xE2F98512, 0xFACD8A78, 0xD1E09A13, 0x96F5A6F0,
+0x2EF38197, 0x89B483B3, 0x38AD5208, 0x087C6834, 0x227FFC79, 0xD52829DD, 0xFB2733A7, 0x6F3F6FB7,
+0x76A4A9D1, 0x867AD56F, 0x01D0DF42, 0x2D807331, 0xA43EEA89, 0x1A07A5FE, 0x55BE6AEE, 0x736E8BEB,
+0x2B50D6A6, 0x7A43C0FC, 0x89235F31, 0xE88F9919, 0xF19D19D7, 0xC53525A4, 0x4E06A071, 0xDB8EC248,
+0xD3C73B1E, 0x6714AFF2, 0x1B119B9B, 0x791AF1DA, 0xDAB78E36, 0x2771E130, 0xD6E090E3, 0x23300FD9,
+0xDA14F974, 0x5BB57B94, 0x6A7FEB4A, 0x09BAA2B7, 0x6513CCF5, 0x613D54BD, 0xC1BC2CE9, 0x2F6CC98C,
+0xC97461B9, 0x66F758FE, 0xE6EBCD1A, 0x773A0FD9, 0x18CB63A2, 0x4697D64C, 0x3B6A3D88, 0x37E2CC1A,
+0x4A23F0C4, 0x31078AA7, 0xD8129E4F, 0xC4A59E29, 0x2B31A6CD, 0xB8714CE2, 0xCC49D7FF, 0xE9B5F202,
+0x8D1946A2, 0xF89B6CF4, 0xD26F9AFB, 0xF56DC65B, 0x6335B6D8, 0xC335CF7E, 0xB63973C5, 0xAF2BCBD3,
+0x6C42AE07, 0x7B2C12F7, 0x3AF2D0A9, 0xC85C8340, 0xB497E25D, 0x7D44BF13, 0x1D639619, 0x479DD60C,
+0x60451366, 0x871AFA50, 0xD965C537, 0xAD4D6FA6, 0x4AA82B4E, 0x5BF6FD9D, 0xAB2ABCE8, 0x06B04214,
+0x785D4352, 0x2A88165E, 0xE8547D1D, 0x08351E8D, 0xD6493749, 0x7DCA8396, 0xA7316E8B, 0xA2D9826E,
+0xDC6F4958, 0x477C0BF2, 0xA21A4797, 0xB00E163E, 0x97F36ABE, 0x36E93D4E, 0x9C80F31A, 0xCF40F4D4,
+0xC85D4B88, 0xA4A81BCF, 0x4603B5BA, 0xAEFBDF01, 0x1367826B, 0x41E173F5, 0x33F19D24, 0xF8DC0097,
+0x7D084C57, 0xDBFE22E1, 0xD48C7C72, 0xA35D386A, 0xD3BC9E26, 0xF67D5C6A, 0x89E2A535, 0x2E3EF7BB,
+0x26E394D5, 0xA393C3BE, 0x78A320D6, 0x48F5F909, 0x55D6C22A, 0xAE91BD75, 0xB497A2B1, 0xD311991A,
+0x6716FCF9, 0x758B179B, 0xBE9D6FE8, 0xBAF30BEA, 0xA96FC0C5, 0x6EEF75AF, 0xC9A28591, 0xC7DF482C,
+0xBB4581D9, 0xEBAD6DCD, 0x1E390154, 0x16F0CC18, 0xDC7DD7DD, 0xD246B320, 0x6CB997EF, 0x24C400EC,
+0x94EA6BA0, 0x3E3BA1E2, 0x1E602862, 0xE1DB6780, 0x1AAAE8EA, 0x391369A3, 0xA3E00043, 0xC589D3B7,
+0x31C6E0CA, 0x451EDAD6, 0xC96A43C0, 0x25CAAEC4, 0x5FA8DF7A, 0x222D94D4, 0x8C0B6F33, 0x672D9369,
+0x73067583, 0xD58D638D, 0x676F44CD, 0x089CC4D0, 0xD0EBE3FE, 0x2352D594, 0xE41A2CC0, 0x99692071,
+0x88ADD7AB, 0x4CECD91F, 0x9181B218, 0x5A7D5F18, 0x4E309640, 0x8C3C75E0, 0x64366F9F, 0xFE4FB4F1,
+0x5E76F9EC, 0xC9080420, 0x06E89452, 0x7018AAC5, 0x40C0672B, 0x8D23E6D9, 0xDFC2EC0B, 0xAA2E05DD,
+0x6DA72058, 0x6B27AB1C, 0x5AADBA9D, 0x4609E617, 0x71274E02, 0xB93D253A, 0x213F9411, 0xB91C7AC8,
+0x0385FC3E, 0x8E7F0B35, 0xA3CFD3CE, 0x42F68E52, 0x4AEDEB98, 0x88B28516, 0x0D9C5C41, 0x32631815,
+0x5E5E0D32, 0x1B425194, 0x9C8C343B, 0x74090271, 0xD972E1C4, 0x86001DC9, 0x5C7C21D5, 0x50BFA1B6,
+0x06D49928, 0x5D4D7079, 0x0CC7930C, 0xF1473062, 0xDCC41387, 0x21DD995D, 0x13C030E1, 0xAB9644F7,
+0xB7E04637, 0x7E782489, 0x4FC27289, 0x1EAC960F, 0x15784D58, 0xAADFDAB0, 0xF9026260, 0xDC079F8D,
+0x23D55CE2, 0x57C99E94, 0xC1A26F53, 0x2170426A, 0x0802C51F, 0x8F997259, 0x61331162, 0x4E0F3EEC,
+0xA8FCC8C4, 0x2BD6B5B1, 0xE893A162, 0x97F6EA14, 0x84372929, 0xC0BEEEF1, 0x4A151832, 0xC6A807A7,
+0x072E3707, 0xDF00D954, 0x2F828E86, 0x5C540500, 0xE0A155EB, 0x3B0D305C, 0x078DC089, 0xCDA95F17,
+0xC5AFB36F, 0x4D39A013, 0x22DF99C7, 0x027646A9, 0x50F4312F, 0xF722C309, 0xACF7280E, 0x77CBC9AD,
+0x7B517900, 0x6245A908, 0x394E482B, 0xA7E72A16, 0x2619110E, 0x8C88CA8B, 0x0F3EFF27, 0xDC5B49A4,
+0xE71EFB42, 0xE0882F22, 0xDC8F719F, 0x511A417D, 0x7C5650E2, 0x6AA207E4, 0xAD7446DD, 0xF0CF458D,
+0xCDF58B42, 0x3A7E0E59, 0xE26233B5, 0xD90D47D6, 0x69B53EFD, 0x82394EA2, 0xDB7CD20D, 0x8AF12939,
+0x28D22E49, 0xAF116D4E, 0x24D22DB8, 0x68972A8B, 0x8368DBDA, 0xD7F08804, 0xA6BD586C, 0x4A362DD9,
+0x505B690F, 0x6CF13688, 0x494EE911, 0x472ADAC8, 0xAC264BF5, 0x133A4951, 0xF67A2CCA, 0xD3E6CE62,
+0xD8C76496, 0x8947A517, 0x9893BE46, 0xA35C4333, 0xF4412E68, 0xA6B8D0E0, 0x4D531D88, 0xDD2D2675,
+0x9B40AF36, 0x330FAF15, 0x0D03649E, 0x90240E5A, 0x55A406D3, 0x99BAC8AB, 0x6975C090, 0xBFF7ED7F,
+0xB73428BF, 0xE1807593, 0x843E36D8, 0x7F12121C, 0xC4E5F711, 0x929AB474, 0xAD59147C, 0x4685B0C7,
+0xCDF309B0, 0x8874D3DA, 0x9E5B3D91, 0x48F589F3, 0xCA67F119, 0x96A6481A, 0x6D0B8129, 0xA5B99E6A,
+0x6A43AF43, 0x86C518C4, 0xD9829D26, 0x5F96C44B, 0x01550F00, 0x064CD3B2, 0xEC1EF0FD, 0x7CED56C5,
+0x36AD5C18, 0x54A647EE, 0xBDE4AED1, 0x764BE7C4, 0x549F6AC2, 0xDB613910, 0x9177D151, 0x0F95AAF5,
+0x96CE9844, 0xC17ADA9B, 0x9255DC67, 0xCB64EB68, 0x2C2F1A6A, 0xD839EC4F, 0x2BDB0E14, 0xBA77EFC2,
+0xAA0DBAE1, 0x5C68BC22, 0x9D3B0188, 0xBF2BE3E4, 0x3F9FD3FC, 0xBEFF8AE0, 0xE4B83AE6, 0xAFF1E228,
+0xDE6CA05B, 0x5C90FE6C, 0x16D5FAE7, 0xB8886C1A, 0x47C206FF, 0x0EEFE42E, 0xBB8885BC, 0x5797899B,
+0x69687C55, 0xEBA696A6, 0x713F837D, 0xC5A1CC45, 0x94E1FCB6, 0xCC59553F, 0x83650788, 0xDD2E57FE,
+0xBC92C1EC, 0xFABE4FC1, 0xA76AF255, 0x42B81899, 0x2667B2F5, 0x4E5B1138, 0xF104562E, 0x0FCB5615,
+0x20EAE65C, 0x88702EBF, 0x312067B4, 0x96FF21EC, 0x972D52A3, 0x269F582C, 0xD0992849, 0xFDD703DE,
+0x17741FC4, 0x88F66B33, 0x4612CD52, 0x554E7F53, 0x4FD56E68, 0xDE4E68B9, 0x90DAF236, 0x9D14F06F,
+0x48B9B2A0, 0xC7CC2B25, 0x9A6B9161, 0x5D92DD35, 0xD185CC22, 0x4350166C, 0x526DBC6A, 0x13A789C6,
+0x760BF509, 0xE5300C36, 0x8006AC7D, 0xED1D6770, 0xD5DF1E0B, 0x743CDB4F, 0x30B0F2E1, 0x9C8D5F91,
+0xDDD98E5C, 0xF058DA05, 0xCDBFBDDB, 0xE2B1F091, 0x2BB30666, 0x394F4603, 0xFFEA4558, 0x70C4C4A0,
+0x5BFFA21C, 0x43BB3AEB, 0xB4653EF4, 0xE66E2143, 0xB6990194, 0x89BB5851, 0xC13E6EEF, 0xEC1007C1,
+0xB3EE8873, 0xA5505DF3, 0xCE4767B7, 0x79351690, 0x7FC66107, 0x945E5D67, 0xEEFDFA8D, 0x853DF691,
+0x95149F27, 0x10C02389, 0xF3BEDCBA, 0x160DE5FB, 0x8985C2F7, 0xAAB92D46, 0x9F9D7D50, 0xDC9A0801,
+0x9F2BA926, 0x36E5CA53, 0xE474A87B, 0x387CC433, 0x4E71B60E, 0x70781AF9, 0x40B1F22D, 0xD43E989D,
+0xA979E252, 0x4BA7C9E7, 0x776D4152, 0xFB786246, 0xA808D102, 0x4E59929B, 0x739E3002, 0xA5A67F5B,
+0x931C0F55, 0x419B7CF2, 0xD3FEB99C, 0x7FFCF2AC, 0x8F942BB3, 0xB69D97D9, 0x481A0C0D, 0x46A22ECA,
+0xB66EE91D, 0x11FD0EF1, 0xC692EA9E, 0xE84A2393, 0x95D2BD74, 0xFE116F5C, 0xE8661848, 0xD4D10F3A,
+0x200385D1, 0x96DCE149, 0xEBBF5BFE, 0x7A09DB84, 0x34B607B3, 0xAAB0F21D, 0xDEB4D19F, 0x38FFE299,
+0x1BE08739, 0xB78C4C13, 0x58D1D8A5, 0xEC78D69F, 0x6254C650, 0xA8B20985, 0x472DC735, 0xFA9DB038,
+0xCE2D0454, 0x884A9A7F, 0x23C6F850, 0x94192EEE, 0xBECC9E4B, 0xB474F8BA, 0x0403FD4D, 0xC4476DAE,
+0xC7CA3DC2, 0x64709686, 0x9FCA075D, 0x0A90F737, 0xECDBA664, 0xFC2A5EFA, 0x6765252F, 0x467D849C,
+0x5C21F058, 0x69D02EFA, 0xE699B0A4, 0x1CAC3466, 0xC46D65D2, 0xBACB6FB2, 0x68367191, 0x32552219,
+0x3C803648, 0xA798F697, 0x3B4DE337, 0x32A90F62, 0xCAFA26A6, 0x8A4A3836, 0xBCA6EE96, 0xDB2041F2,
+0x69973493, 0xC55835B2, 0x35F291AE, 0xACDACB60, 0x7E7542C3, 0x2B302B43, 0xAC0C7389, 0x659CBE97,
+0xD98783D3, 0x1CE91AEC, 0xC69A9350, 0x43FC6A3F, 0x6EAAC47A, 0x7C2BCC89, 0x86B7971F, 0x2672A375,
+0x6254FFF9, 0xAE97346A, 0x89104368, 0x919C6C87, 0x1B310ECA, 0x4EB6EBFD, 0x47241B91, 0xCDF0AFED,
+0x99A1F75D, 0x3495DE04, 0x22FB7374, 0xBB04B8C4, 0x91990C34, 0x05AA6C95, 0xBA1BEF6B, 0x44C23C60,
+0x5983EBAA, 0x35024771, 0x5B8749EB, 0xB405DA0D, 0x7CA1DF5A, 0xBBFFC34B, 0xF09DCDF2, 0xB80F2E76,
+0x93A23C30, 0x49ED3E3E, 0x8E10FC23, 0x337B7E13, 0x39BAF3F9, 0x78D33D96, 0x0D85C528, 0x66A25263,
+0xBDB5C0B4, 0x44C267D8, 0x6320B740, 0x4648644C, 0x5C820F04, 0x001C9FFF, 0xCC33D549, 0x3FF67BA5,
+0xC84BEF2A, 0xDF726529, 0x85E1E232, 0xD5E457E0, 0xB409DEE3, 0x8B4C65B9, 0xAE21EC8C, 0x563D02C0,
+0x88A32B91, 0xDA6FA5AE, 0xA0219346, 0xDC20366D, 0x81FC84B3, 0xE6F35FD8, 0xF716306F, 0x8DE5138C,
+0x8CE3882B, 0xBCBF06BB, 0x4449903B, 0xA297CB98, 0xD7E1E787, 0x86372954, 0xFC682DFF, 0xFD42EE29,
+0xDF9F9F60, 0xA07B5400, 0xFB35E417, 0x6F450B13, 0x41B3352C, 0xF777D8FD, 0x54970348, 0x4E7CC52F,
+0x53DBF4E0, 0xE52AB507, 0xA01411C4, 0x4F214373, 0x3FFE5B71, 0xFE6C2A9D, 0x38B7964D, 0xE375F415,
+0xCC8388C6, 0x62D3EBC3, 0x47BFE5C6, 0xE494EBB3, 0xC3FBE188, 0x47D38C40, 0xDF65E285, 0x1C8AE84B,
+0xBCF4852A, 0xFAADA096, 0x0352D137, 0xCE691053, 0xBBACD6B6, 0xFEA8EC62, 0xB1C8E27C, 0xA0EDAC72,
+0xD341B6B0, 0xF70DDA49, 0x05B448D8, 0x70DCC847, 0x5A68C53A, 0x0E6ED29F, 0xD980C003, 0xC7DD3976,
+0x95D77569, 0x7BDA8B60, 0x255470B0, 0x00B18E80, 0xB0784695, 0x421AA488, 0x79D0B41F, 0x5EEFB987,
+0x2AD1D9D3, 0xD3525C95, 0xF284086E, 0x4481176F, 0xD1389D9F, 0x5EFB2A08, 0x60056C5F, 0x58AB3F8F,
+0x909210BE, 0x7CD4882A, 0x506114E7, 0xD44141CB, 0xD2B786DC, 0x164BD799, 0xABEF3060, 0xC72BB64D,
+0x93F0438A, 0x4D1E7AC0, 0xA553F3DE, 0x45C263D4, 0xCB9BEC1A, 0x4CF57D20, 0x7D0AC950, 0x0B6B2F5D,
+0xC7A98C67, 0x94EDF8E2, 0xF6EE5788, 0x333210B7, 0xB13E281B, 0xF6C21529, 0xC1C3B328, 0x92D7B7D2,
+0x85F103AF, 0xC2D24FC4, 0x7715B7E1, 0x4C960934, 0xDC859F71, 0x07F9F76F, 0x95621A3F, 0x1720CF74,
+0x61120F0B, 0x3AFEABBF, 0xC8EEC1FD, 0x9D51C55E, 0xEC321447, 0x0E33187D, 0x8036F1C7, 0xAF9F59F0,
+0x7FF9E3E2, 0x321F583F, 0x5E470337, 0x9BB4E833, 0x7D6B7BC1, 0xE79818FD, 0x9A3B61F0, 0xF9BADC20,
+0x979AFE27, 0x7A514BD8, 0xE42A7B3B, 0x87FD44FD, 0x28D830C8, 0xDD3BE69E, 0xCFB2CFCD, 0x85816662,
+0x65CE2E25, 0x98819BB5, 0x11EE9663, 0x6E24DDBA, 0x274F162A, 0x420F0F41, 0x375A01BD, 0x3F01ECF8,
+0x2BBF07E9, 0x32145DA5, 0x21915F85, 0xBDFC6FF2, 0xC56EEAF1, 0x1FC2B1B8, 0x7AEF0067, 0xF3D4F430,
+0x9536E3D1, 0x57C290E2, 0x67D5462B, 0xB0D1A08D, 0xA41447B4, 0xB6D671B3, 0x6D1A2471, 0x99C7D68D,
+0x634B35B6, 0x2A41546A, 0x7289D102, 0x1469D066, 0xB5A1D2C6, 0x578EE683, 0x7102B549, 0x10900ADE,
+0x36D5D27D, 0xA0B9A032, 0xBB9EE6E7, 0x2B1BB4D8, 0x6F8CFA74, 0x0F087121, 0xA47F377B, 0x49410F73,
+0x2B6CE174, 0xBBBC6D23, 0x38547511, 0x6CC4BC53, 0xE1CC25E5, 0x51CBF17D, 0x042D1E54, 0x43531B60,
+0xA20A61FE, 0x2A4345B8, 0x2603B255, 0x23CFD7F5, 0xD9C68EB1, 0xED744882, 0xE95D09B5, 0x95924E23,
+0x0FCCD052, 0x6BB2F873, 0x129EE011, 0x69339A9D, 0xEA4534BA, 0xAA7156AA, 0x3350853F, 0x03474204,
+0xA96C77DD, 0x946A4682, 0x78DC7375, 0x42D49641, 0x174A6936, 0x756BF79F, 0xDC8249A6, 0x8F842764,
+0x679BF819, 0x53A97C5F, 0x0E1F3EF6, 0xA052C1AC, 0x5485EE46, 0xF10C40F3, 0x3CF724E3, 0x4A611BC6,
+0x8273341F, 0x5D882CAE, 0x1BD878B7, 0x540A6ED0, 0x903556B2, 0x936474C3, 0x68011778, 0xB622E7D6,
+0x1CDDB03C, 0x58BC7F6A, 0x62D56BBE, 0xEA2C2E39, 0xC265D7AC, 0xC62FDCCD, 0x0636E94D, 0x927A3CF3,
+0x5B73FD4B, 0xEBDE4F0C, 0x875E8CEA, 0xFC311529, 0x8FA6B5B6, 0x74389D4F, 0xAABF70BD, 0x01503D47,
+0x7FE409E4, 0x251A4236, 0x4ADA130C, 0x8FCE43B7, 0xFE6C481D, 0x28859E80, 0x523C0269, 0xBF35AFF2,
+0x18A613EB, 0xBB1A2DA2, 0x168DBE89, 0x440AC37E, 0x3E4A8389, 0xDA3FCC80, 0x2774E7D5, 0xE437FEED,
+0xEBA77405, 0xEA706014, 0xC9915A21, 0xCD5E7F44, 0x09EC527C, 0x73BA4C43, 0x5013021A, 0x2A27D6D4,
+0x40D4E774, 0x7FFC268A, 0x6FDD99DF, 0x11703950, 0x77EE7A6A, 0x42B5899D, 0x867D0711, 0xB44BBC8E,
+0x1D105048, 0x7190B9A3, 0x17439951, 0xF6315472, 0xBF2A6085, 0xB00C3ADB, 0xD03BBC8C, 0x59AF1F38,
+0x73AB6B5C, 0xF7D533A3, 0x01BA4753, 0x248A2981, 0x9F025601, 0xEA15E8E8, 0xD5A178EA, 0xE664589F,
+0x4CEAC115, 0xEB68E3E0, 0x2E1CA5C9, 0x34D4998F, 0x7856DC4D, 0x6F5597DE, 0x2450AFA7, 0x9CDE8F71,
+0x6880A1B8, 0x64D47D10, 0xF8330349, 0xDAC569ED, 0x6E8E7EB4, 0x25473787, 0xD50B832A, 0x3EDE113A,
+0x2F3846CF, 0x77961E3E, 0x5AD83662, 0x30E46CD6, 0x760E7AEB, 0x2DEA6868, 0xB7B8064A, 0xDEB0DCD2,
+0x8C36743B, 0x301366C6, 0xE58BC25D, 0x90E86365, 0x8C9B51EE, 0x37CC05C7, 0xE44142A5, 0x0B8CD013,
+0x82A16156, 0x0BE6818C, 0x078889A4, 0x552C794E, 0x10959E0C, 0x7DF373A2, 0xAB8A3886, 0xF823E2AF,
+0x3575E0B7, 0x02C659A2, 0x78E64401, 0xBD3A221A, 0xF080166E, 0x3D140047, 0xF2D02A39, 0x348287E2,
+0x43519924, 0xD9C136D4, 0x0EE2A205, 0x874B05E7, 0x363CC902, 0x3226D69C, 0xA86EA61D, 0x357C4FD5,
+0x1E03C7B6, 0x8BF04E02, 0x88F8B567, 0xD5D681BE, 0xFE28E2F9, 0x60CECFDB, 0x4211ABD7, 0x92B760CD,
+0x29871AF8, 0x7950EB02, 0xAF5F5B1E, 0xCE64E49C, 0xB44D86A5, 0x436B8E80, 0x38CC48EB, 0x3E9C2FD4,
+0x2E931C7E, 0x0ED07876, 0xB62A7C15, 0x194E685B, 0xCBE901B7, 0xE6E08393, 0xA230096D, 0xA30E78EF,
+0x4F1683D0, 0xD479DD6B, 0xA318D539, 0x1B6A501B, 0x41AB5659, 0x8C6AF63A, 0x927080E1, 0x80D4D9C3,
+0x73B99897, 0x910B6185, 0x0DE42BC0, 0x03FF638E, 0x992FA7C2, 0x02FB3E8B, 0x83E16829, 0x9CDBD31F,
+0xB0D4E219, 0x2A40B500, 0xB3D4D35E, 0x76458AD0, 0x11711E12, 0x9B694CB1, 0x4D260368, 0x61D16F2D,
+0xEA40F4CC, 0x7C557406, 0xF9992550, 0xD4E65703, 0x2B9C2EF8, 0x508ABE52, 0x57F3AEE5, 0x014CA8C0,
+0x9F77F828, 0xA40C130A, 0x3C0C3FA2, 0x4262673A, 0x1DD0964E, 0x37006486, 0x498948B0, 0xA0CDA434,
+0x242B22FE, 0xB0F41F48, 0x01000000, 0x44EB9E01, 0x38FCFF31, 0xA9EE5500, 0xCFA969F6, 0xEABD94FB,
+0x9F1529D4, 0xF19E9B6A, 0x392FE4D7, 0xA1711B48, 0xCD27AA13, 0xBCB1C774, 0x06ABE375, 0x027FE011,
+0xAE7DA688, 0xC5E20037, 0xA7BF4007, 0xCDBE19C6, 0xB3129165, 0xBA070BD9, 0x4C9B2EAB, 0x6F5D7DD2,
+0xCD2894A8, 0xDB2BF915, 0x91CFB624, 0x1EA765A1, 0x6255B92F, 0xC4DEF10E, 0x186CEA43, 0x8403D7EA,
+0x63DBCBB8, 0x173254FD, 0x12C72D83, 0xA0B1A6AF, 0x46B2B6F0, 0x5684A4F4, 0x7439824A, 0xC400B23B,
+0x9E22BCE6, 0x85F125A3, 0xCAD15297, 0x7A78A186, 0x13CB4CE3, 0x3E091CD6, 0x6564B095, 0x21E48E53,
+0x97EC5DA6, 0xD0CC5048, 0x3C434F0D, 0x4B47239F, 0x8662C50B, 0x36A8A379, 0x3364FFDF, 0x77A064C9,
+0xC90459D7, 0xCD975165, 0xC0713F3F, 0xD924A919, 0x801DA05A, 0xBA75EAE3, 0x96B25F29, 0xAEE05F43,
+0x12725EF8, 0x7371B074, 0x0F521FA2, 0xECDF8FAB, 0x0C7D6A3B, 0x4563A7E0, 0x288610E6, 0x82EEFC9A,
+0x5F37D181, 0x736C8608, 0x54EF101B, 0x9D558ADB, 0x1607A277, 0x2480D708, 0x1139385C, 0xF1C545D1,
+0x2859D1EA, 0x7F932E8B, 0x752B728D, 0x7B98AF18, 0x3A3B4430, 0x25775E6B, 0x1755B3E5, 0x0208067F,
+0x560F2E9D, 0x45C9B9ED, 0xA24FFE81, 0x0DCAC864, 0xF43BA0D2, 0xEE2B343C, 0x06B1EECE, 0x6AE68E7D,
+0x38349D0F, 0x04E11219, 0xF297E4E5, 0xBCDAC270, 0xAE7B019E, 0x35CCE629, 0xB27EE0D8, 0x38F0080E,
+0x26F564C8, 0x023CA361, 0x84A8EF63, 0x4931924D, 0x339D32BB, 0xC5FF810B, 0x64F25B82, 0x6D71FFFB,
+0x8E6FEE73, 0xB5F6DAA1, 0xE32FE818, 0x5565491A, 0x3FBBE649, 0xF04F9AE2, 0xDD4B264C, 0xD1343996,
+0x0D0F7AA9, 0x2A3B991A, 0x5CEBBC0E, 0xF5BCCFFE, 0x9E597DE1, 0xEA5D56A4, 0x7B10F506, 0xBA41C5FE,
+0x9E564351, 0xDBBD9B3D, 0x26F09C0E, 0x3A8A0202, 0x6E357D59, 0x68A89315, 0x28E0B3EA, 0x0C77F8D7,
+0x153C0D43, 0x880CB1E9, 0x2011735B, 0x62A9F9E0, 0x2DA5F117, 0xF43554FA, 0x4D5805DE, 0x855F061C,
+0x9CE99ADA, 0xD8D3F477, 0xEB205299, 0xE9F642E8, 0x08FE6980, 0x1F81A2FB, 0x26EF5890, 0xA98DA66F,
+0x6B6C6E16, 0x4A4E3C42, 0x5B40F5BA, 0x83371761, 0xF2B49758, 0x7C5BE294, 0x6F5DA7AA, 0x3FD38BB2,
+0x17C13EFA, 0x6C53160F, 0x8C6059C7, 0xC794D1A1, 0xDEE5B01C, 0x0F0CF7D7, 0x067A2CF8, 0x749DE9FF,
+0xF1B8EF76, 0xCCA7372A, 0x57CB13E3, 0xFDD5A4F2, 0x22AA8963, 0x312F1CDB, 0xCA8E54E4, 0xE227B086,
+0xCC7A012C, 0x8FC63EBC, 0xFD99682A, 0x25C8FA17, 0x85C7C0ED, 0xEDDA053A, 0xA766E8DA, 0xD6DE82A0,
+0xA605205F, 0x74F32579, 0x671BDBDE, 0xF2BCD4FD, 0x448435D9, 0x4EA1ED9F, 0x937C3299, 0xC0C1EA86,
+0x3CB9E00F, 0xA0F08628, 0x8A808EC0, 0x4048E6B2, 0xF1F0E349, 0x0BD6CA5C, 0xABE177BB, 0xA5E59E4A,
+0xF641ECD5, 0x7839334A, 0x7597E870, 0x7E79E448, 0x97E4F479, 0x62E18F24, 0xCB25735F, 0x2A7C903D,
+0xEBAE2A77, 0x98811362, 0x807DD0C0, 0x92537FA3, 0xC2EA540E, 0x90E9EB8A, 0x5EA540EE, 0xD934D6D7,
+0xB35E6D34, 0xD4860CFC, 0x3CF8AAD1, 0x837C776F, 0x380A8E84, 0x7CD25EAA, 0x63B623D3, 0x2C689AE1,
+0x087C25C6, 0x01000000, 0x19EE9A41, 0xE57F0A4F, 0xDCA7C9D0, 0x0F054640, 0xEEF5F0EA, 0xFA5C8F50,
+0x3270B71F, 0x01646D60, 0xF742FF8F, 0x135027AB, 0xE000BF7A, 0xCCC8BE4E, 0xC57914DA, 0xA06045A6,
+0x4CDB3C71, 0x7CD0E45B, 0x78E711A0, 0x26286356, 0x8FD99D8D, 0xF0041EF2, 0xF7ECFD5A, 0x41999F77,
+0x6C79BA94, 0xF098A434, 0xB6140D01, 0x0CC198B0, 0xAB95FF76, 0x0803E0C9, 0x71DEA37A, 0x621349AE,
+0x6ABADF91, 0xC63AEE38, 0x00BD8048, 0xD2D1E099, 0xEE5946E4, 0x96A139C8, 0x67C80A3C, 0x211D9C20,
+0x1C41D7BC, 0x53B8486C, 0xE8B88571, 0xDD1E2926, 0x5C1E3B44, 0xAA08655C, 0x43FA11D7, 0x2F860788,
+0x3BEAE237, 0xF555FE51, 0xACCDF431, 0x3BC8D5D2, 0xDCC6246F, 0x6E03519A, 0x445DDE15, 0xB522CAEB,
+0x157214A1, 0xD7951772, 0xC63EDEDC, 0xE66883CB, 0x30C38728, 0x95B57AED, 0x96B3C44F, 0x133ED637,
+0x8CE11624, 0xFF8D3D4A, 0xB466B648, 0x1670E487, 0x7EB72FD6, 0xD95B4CF8, 0x022AF511, 0xFD813DC7,
+0xF3051CD9, 0x6F84B9EB, 0xCCC35CF1, 0x01B7727A, 0x2EBE8FB2, 0x1367A8AE, 0x19198D09, 0xFD867E3A,
+0xED3F1F07, 0x8FA865B6, 0x6CA165AF, 0x635E2736, 0xA5998463, 0xBDC4768A, 0x7AF2F236, 0xFE8333C9,
+0x6E2ADF27, 0x15A6D91D, 0x27FE4DDB, 0x1FC76F2E, 0xD7D4ABAE, 0x6CE7A8D7, 0xB61B207B, 0xE5B30C0A,
+0x30876B9A, 0xCDE5A83C, 0x1433D2B8, 0x6FED8BD2, 0xB993C2F8, 0x316D2E88, 0x19B33101, 0x0B572AF9,
+0x3A98F9B4, 0x625E876A, 0x762D8874, 0xC893F352, 0xA98BEB26, 0x9E5C3581, 0xCC429FCF, 0x3D4CC952,
+0x5F162B79, 0x6BF1AD52, 0x2F1FCCE5, 0x401136F5, 0xD166D90E, 0xBDA3CB13, 0xA12D1B16, 0x7CCBAC42,
+0x4FEB4D98, 0x5D37EBF0, 0x9E6E2135, 0x3762B9FE, 0x7F9E1E37, 0x4CB1223E, 0x99297BFA, 0x9EED9D13,
+0x689C1726, 0x7BA32C7F, 0xFE7B5448, 0xD3B896C7, 0x3FDF04F6, 0xEE5EB538, 0x95E8F8C5, 0x3B8FBD32,
+0xF03F4FD5, 0x84BB7E8E, 0x21801268, 0x202A2993, 0x7CF85F4E, 0xD554C410, 0x770E8DF5, 0x02F4312D,
+0x8C3C8F1D, 0x22E5CFD2, 0x70157C5E, 0xD1FCAE8C, 0x2F4B22A9, 0x6EC5DB2B, 0xB2CE6494, 0x00C4652C,
+0x93278907, 0xEF293405, 0xC7D48E38, 0x574919EF, 0xABD75071, 0x5D867879, 0xFE4B46F9, 0x62DA5F47,
+0x3A6738BC, 0x92AE0C56, 0xC2AC9B7D, 0xCE5593D2, 0xB300B69B, 0x62FAC020, 0x1F76F0C7, 0x55105343,
+0x58824615, 0x13F112E9, 0x16CDB30E, 0xCDDF534D, 0x8999B890, 0x861EECFF, 0xB2585E27, 0xBBBAF0FE,
+0x5E13193D, 0x96588C84, 0x37C0A41F, 0x5B3A9A8B, 0x92290111, 0xFEB63613, 0xC9B4A7E1, 0x10709B2C,
+0x0E51FD48, 0x7C133691, 0x370D6484, 0xD3E3174C, 0x0E6F84E0, 0x062B3B39, 0x042EBA59, 0x6D252475,
+0x9E6537C9, 0xD379F4D2, 0x9186E05A, 0x36C87ECD, 0x592B195F, 0x1413B98C, 0x195C22AE, 0xED433FA8,
+0x9E1A56EB, 0x5BCDB9A4, 0xE0B516E4, 0x7A43C868, 0xE0258542, 0x9EAC0E9A, 0x0EBC34DE, 0x7FF9B612,
+0x5853362A, 0x0E86A00F, 0xE8CBBCAE, 0xD33A08A0, 0x7C8A6621, 0x7E75F40C, 0x500C1904, 0x08F23A40,
+0x11D7E6CE, 0x5106EFF6, 0x135329CB, 0xE2F6AA90, 0xC4713B27, 0xBCF31118, 0x373C2CE8, 0x0F04ABDA,
+0xF5858178, 0x77002CCB, 0xB4117ECB, 0x68AF5BE1, 0x6FB73C9E, 0x5949B7A4, 0x54718372, 0xCA02AD71,
+0x67BA1038, 0x8E09A7FA, 0x8483DF4E, 0x8D95A917, 0x9722471E, 0x60B11C2C, 0xAFE56AA6, 0xF51EEEEA,
+0x624D7413, 0xCD9C9CAC, 0xD092AC08, 0xBFBE3A6E, 0xD9981A02, 0x928E19C2, 0x114F4645, 0xB68FC228,
+0x0817E7D0, 0xDFD0EC26, 0xF7CCBC1F, 0xB8C27A96, 0x457B3CC5, 0x803CB1F3, 0x65902AE0, 0x6A29627D,
+0x99ADDA99, 0xEBFCBAE1, 0x44C9B83A, 0xC882F8C2, 0xE0CFED07, 0x50468FBA, 0x61A58211, 0x329658DA,
+0x38D5B60A, 0x369A8481, 0xEC33DBF4, 0x3C81E984, 0xA226587D, 0xB7FF4759, 0x99D4A8AB, 0xD95C82B1,
+0xB4F701D7, 0x0FAB63EC, 0x71EAFEBA, 0xD1818DE6, 0x1460E3F9, 0x73E0CFC5, 0xD7D08613, 0x0EEE80D1,
+0x417BA1B7, 0x5E741C2C, 0xAD097703, 0xAFDA96FC, 0x283F0D62, 0xC8C438C5, 0x66F756AC, 0x645151EA,
+0x3A5BE07B, 0x7D53D0E8, 0xB0F7DAAD, 0x551CB6A5, 0xAD29EACE, 0x80C40054, 0xBDB165A5, 0xE3905781,
+0xEEA3A503, 0x485927FD, 0x9D98C42A, 0x365E8198, 0xEC7BB85F, 0xC55D2D74, 0x43A78626, 0xF0F0EFAC,
+0xF615B88E, 0x015B8BC6, 0x8F848976, 0x0E92A07D, 0xC3F4AA47, 0x13D84102, 0x4E48F7B7, 0x347BB4FB,
+0xC1C1D820, 0xA6CB3099, 0xC29489E7, 0x5D5E23DE, 0x1D6D5519, 0x36530E23, 0x7C285382, 0xA56E630C,
+0xF6C95E2F, 0xC2C710C6, 0x0FAC72E1, 0xB7B35695, 0x895F4C2D, 0xCFC545C9, 0x0D8B7CAB, 0xE901ED2D,
+0x78549657, 0x4A68F665, 0x0AB831E7, 0x46F63E5C, 0x6B75756C, 0x070C1E92, 0x85B12DE9, 0xB3C680C3,
+0x49E3D1D1, 0x91FFD85F, 0xCD26023E, 0x9AF6EF50, 0xCEBE2162, 0x8C759310, 0x880BBA24, 0xD434DD29,
+0x7B8B7E40, 0x377F2D77, 0xF1C0B6F5, 0x55C506C1, 0x0AFBE8C1, 0x3025E32A, 0xD8CD85C8, 0x829A51CB,
+0x4940747B, 0x6F1D6EE2, 0xF1031ED1, 0x1CF9B03B, 0x607BE1AF, 0x750D828F, 0x38989778, 0x761CF16C,
+0xA070855D, 0x1F00E34A, 0x55B267E0, 0xB548E010, 0xD9FA72EC, 0x8181DAA3, 0x4883943F, 0x881BAA85,
+0xDEDAF200, 0x21983C08, 0x9945AEA1, 0x4BF89EBA, 0x3E4E9D5D, 0xB9EDE612, 0x95D9D155, 0x30C9586B,
+0xFE134166, 0x0B7E4E80, 0x6EB91286, 0xB865520A, 0x6A9114B3, 0x43219F50, 0x9A73B944, 0xB380647E,
+0xF6682539, 0x4D444F7D, 0xDB801A2D, 0x60C38B35, 0x6FC2CA1F, 0x5E77C569, 0x5A8F8C3F, 0x050B1BA6,
+0x045393BF, 0x84644438, 0xA1F71376, 0x3F328212, 0xA6C7844D, 0x354C653B, 0x63374182, 0x45425779,
+0x1D77ECBC, 0x4337FFFA, 0x6A855D81, 0x234C36B9, 0xF61A5918, 0x2E6FD809, 0x6A56A133, 0x0850BFA1,
+0x909ED5E0, 0x2874AF04, 0x8978CDA4, 0xB4B004AB, 0x72FBCC9D, 0x030E4808, 0x6CAD18A9, 0xAB302717,
+0x8194D960, 0xCF2631A0, 0x00D66BCC, 0x3CB8991D, 0x814D0FB0, 0x06324B06, 0xDFDDA925, 0x244D19DC,
+0x89D18881, 0x858C48D2, 0xB4F70F9C, 0x28754E04, 0xB154125B, 0x849FB299, 0xD9313FAE, 0x3B57D758,
+0x27AA5D54, 0x924ACB30, 0x7E24EB45, 0xB1E48B71, 0x283B8368, 0xCEB6385C, 0x97FB1955, 0xBF91F2D1,
+0xCA19EE1A, 0x6523971A, 0x25C02232, 0x9913CC41, 0x1CF5F386, 0x0C0FB132, 0xAEF0BF3D, 0x3EB48A83,
+0x051BF6BF, 0x92628A65, 0xCC2B03A6, 0x2F11B1DC, 0x7B6677FB, 0xD5640A6E, 0x85E92C01, 0x97FBF774,
+0x26551683, 0x464D575B, 0x44D3A0B2, 0x750963DA, 0x46786F3E, 0x4626A661, 0xAF0950F1, 0x06A35E28,
+0xC7343A92, 0x3A2215E2, 0xB8D3530A, 0x879B58D7, 0xFB7020F5, 0xB74AA929, 0x205860A3, 0x7162E948,
+0x8E19F4EB, 0x89C06693, 0x85AC24EF, 0x3A7760AA, 0xD894EE17, 0xE26EEBB4, 0x9DEBBDE9, 0x2A1AF6E6,
+0x95CD383C, 0x76547D82, 0x9AB3610D, 0x18F11F28, 0xA7B29513, 0x8F18031B, 0x0C19852B, 0xBB842CCB,
+0xBF6421FA, 0x1C00248A, 0xBD27D902, 0x6B9EE624, 0x8D7E3E64, 0x656E24D6, 0xE93E175E, 0x6E490177,
+0xA0B15089, 0x225BB05C, 0x9F43BD4B, 0x493D7645, 0x60F0C036, 0xAA49CE36, 0x1F0DE20D, 0xFF2996E0,
+0x89B9FF95, 0xF5EE7022, 0x85714684, 0x760C732E, 0xA56912CE, 0x16DBBF48, 0x58A3A441, 0x51BAB3C3,
+0x3DC28275, 0x9D312FA6, 0xC3D97B2D, 0xC141FFB3, 0x899E279B, 0x80D1C734, 0xC0BA68E6, 0x82DD7F17,
+0x2557B359, 0x0E93CFB0, 0x6A6C37B1, 0xA1F307DC, 0x0BB66D4B, 0x3C9527B2, 0x60A03218, 0x904BC998,
+0x892CC67D, 0x1FFB2ACB, 0x38694C33, 0xF351BC6D, 0x3740653C, 0xC8F7A5FF, 0xCF09C162, 0x54B28878,
+0xE09DF6E6, 0xB5FEB0B1, 0x1F57FB4E, 0xBCF68713, 0xC03797C5, 0x9DF220F5, 0x248AE44B, 0x529B7292,
+0xB8671676, 0xA614948F, 0xDA646CE8, 0x361E562B, 0xDAA4B112, 0xA1F0D5E5, 0xDC42B591, 0x74ABAE61,
+0xFB66F93A, 0xECFB4A5C, 0x8123D1A0, 0x7FE88565, 0xE0C77D03, 0xD49188FB, 0x98817982, 0xCCE709B5,
+0x7DCBA986, 0x56D4CFF5, 0xAAAC9683, 0xEB2C40A8, 0x2B43EEF3, 0x2AC3E941, 0xEA29C2E6, 0xEBF92FE3,
+0x0A1C3456, 0x8591F822, 0xC2D090C8, 0xFBC99964, 0x0431167C, 0x3C758F0F, 0xE308F089, 0xD48DD734,
+0x6D9EAE20, 0x4FD51E86, 0x47EDD7E2, 0x73CDA615, 0xB0D835D6, 0x5793A88D, 0xD67F0D8C, 0xAD821C74,
+0x8E775EE0, 0x05D95CDD, 0xC3B45DF4, 0x8A15BD7E, 0x15E11376, 0x49921223, 0x3B508438, 0xC9DBDD9B,
+0x7C2D6848, 0xFF2DD9F4, 0xD882D820, 0x7BF19D2E, 0x62C99CC3, 0x57298700, 0xF520C34C, 0xC10E643D,
+0x11C5FA5B, 0xDB3D3A60, 0x13859B4A, 0xDB8A3D4D, 0x336E87C5, 0x98DF28EE, 0x503A33AA, 0xB3B2A7CC,
+0xC8B3AEF6, 0x704407AF, 0x3FD19C64, 0xFC49F00B, 0x4BD721B8, 0x36CFA7FA, 0x7CB68BD1, 0x026532EA,
+0x1F765FD5, 0x6365CD76, 0xB3DD079E, 0x9173DB40, 0xA76C305C, 0x4DB3128F, 0x0FBB3B76, 0xFCC7176D,
+0x3A1422A0, 0xF63060B1, 0xCDA9A179, 0x99A10FAC, 0xB75A4AFA, 0x1D8C2B15, 0x5CAB8278, 0x810C8A70,
+0xB86C50D0, 0xE1466E18, 0x6DFB67EC, 0x327C11BC, 0xF2CCF80A, 0xE8E2A4EA, 0x169FB28A, 0x06F96CF0,
+0x036A726F, 0xD2912142, 0x9EC36018, 0xB3F614C8, 0x93754823, 0xBE8C1E2B, 0xD3198DDE, 0x5B044C30,
+0x5E170399, 0x736DA4C1, 0x856C3534, 0x94D4FD91, 0x6EF42E1E, 0xAB3F5B65, 0xAB2970C6, 0xB02773A4,
+0x4205BFC6, 0x46227F9A, 0x4EDF1533, 0x47B91F5B, 0x4F119742, 0x09C0125E, 0xFB972C3F, 0x00895457,
+0x66547E58, 0x1DB2751D, 0x2ABEA18A, 0x9A8A54DA, 0x7D7AE69D, 0x864C1EC9, 0xBAAB2DDA, 0x2C5BBC3D,
+0xD0D6F885, 0x07CB3AC2, 0x98259368, 0xD582ECDB, 0x806241B6, 0xB1877AE9, 0x10716633, 0xC7D0558B,
+0x208D072D, 0x1C3A8408, 0x0157259B, 0x101937B2, 0x4A9F2D4B, 0x6843B86B, 0x0D7AF0E1, 0x573E3190,
+0x4F516712, 0xD8DBE057, 0xC11875E2, 0x33D50B3D, 0xF9AB4341, 0x420B38A8, 0xCBB0B53B, 0x5C1DDBC2,
+0x20B4589A, 0xB358DC7B, 0xDEF0B666, 0xA6B8B6EC, 0x7D800304, 0x71C3C2F5, 0x002CC369, 0xCCD55CF4,
+0x74FB601D, 0x686E78E5, 0x1E6C1CC0, 0x860C59DC, 0xB078EC99, 0x250BD352, 0x50D30F38, 0x8E3EEEBA,
+0x8460F656, 0xA56D3DEA, 0x5CFC9962, 0x7E1C0F7B, 0x4F7EAFAA, 0x0366B64E, 0x721DB686, 0x098C88BD,
+0x5244CE8F, 0x798BA9BC, 0x0EB348CD, 0x956E8EC7, 0xB2AD3371, 0xB05293BA, 0x778AC350, 0x18C7F2B0,
+0x0948FCF4, 0xB0D34465, 0x3671B0FD, 0x2473FB7F, 0xE8D81768, 0xBB39B7E4, 0x9463953E, 0x9519F03E,
+0xEF8EFE22, 0x2D44F556, 0x1B9C5594, 0xE976B4CD, 0x822E9D05, 0xAF188D1F, 0x68312391, 0x8465E0BF,
+0x05E06193, 0x6011DA61, 0x83776ADD, 0x3832C5F7, 0x9F8AA8E9, 0xBEA36FAA, 0x126D601D, 0xE2A7E985,
+0x08635954, 0xF03AF42A, 0x1A524F46, 0x76494E77, 0x584F2744, 0x9AA94D0D, 0x9C83F9DC, 0xFD447356,
+0x5D3E01BE, 0x37DA21AB, 0x27588CB6, 0x4E2A9604, 0x811A11F7, 0x6BF93D77, 0x23AED1C0, 0xC963D872,
+0x42475903, 0x51476EAD, 0xCCAB0C8A, 0xAEEB14C2, 0x9104C203, 0x8E74660F, 0x1EE1DAF8, 0xC803668A,
+0x210B4607, 0x65692F09, 0xE287C475, 0xC2C24AAD, 0x3A2C9AB1, 0xCCCD0B92, 0x69729E26, 0xFBAA6F90,
+0xF3231302, 0x2206A7A0, 0xC1BD9D31, 0xFE82B76F, 0x4823C186, 0x759982FA, 0x7495EAF4, 0x02403F59,
+0xB33B9760, 0x84C69AF4, 0x26088D5F, 0x04993E1B, 0xCFF850F2, 0xFA5BF4F5, 0x7D82561B, 0x33C26197,
+0x80EED35F, 0xB1A5142C, 0xD965C6ED, 0xFFC28838, 0xB96A5BD7, 0x924B2A2B, 0xD9386A79, 0xA61FE20F,
+0xEC305846, 0x7706FAD0, 0xC124B9C6, 0x6BA82688, 0xD5B0B2EF, 0xC2F0F8D4, 0xA8E1C955, 0x90660C56,
+0x2D77FD35, 0xFC4D6A3E, 0xFAA5569D, 0xC5DEC0E6, 0x737174BB, 0x8251149F, 0x1C874E37, 0x6E8AFF16,
+0x6C131B80, 0xDD8BDE48, 0x8627472A, 0xA1F6A6C4, 0x680CCD84, 0x9A6EE53C, 0x7D7CAF29, 0xBD7E1120,
+0x05103B9A, 0x85AA515E, 0x822CA947, 0x102B54CC, 0x47579656, 0x08B36A74, 0x41520AF4, 0x58C3C14F,
+0x7710BCD4, 0x299B4A3F, 0x823BCFFA, 0xA117FB30, 0x92FD4CFB, 0x79B2E15A, 0x20046853, 0x913994F7,
+0x94881E0D, 0x34469333, 0x7ACA39D8, 0xFF923AD9, 0x6D28C245, 0x63EAA0D0, 0x4013358D, 0x0BD72E1F,
+0xD76FD95C, 0x07EAD682, 0xA2DFF828, 0x77A3CB40, 0x19C5BEE5, 0xF6355163, 0x338A2D14, 0x25E7035B,
+0xCF125F6C, 0xAAB447FD, 0x83C1BF54, 0x976626FE, 0x210BDFE9, 0x73EC9231, 0xEED796EF, 0xBD556224,
+0xC94FC1FB, 0xC60EC3D5, 0xC348E351, 0x818C735B, 0xC8DF4CB9, 0xB3207A29, 0x17897D4C, 0xA95BD734,
+0xF438C242, 0xE4BCC6F0, 0xD63AFDF8, 0xF65DB5CF, 0xF864C73C, 0x2FA151B2, 0xD6337D61, 0x3ACDF397,
+0xFB4EE3B3, 0x8BD44CCB, 0x8EAF3243, 0x870504DC, 0x99F26FF9, 0xDA63F200, 0xD297AB2C, 0xEFA8728D,
+0xC46BB128, 0x39C50011, 0x19B295C2, 0xDBB683CE, 0x6BA6CD34, 0x66D07B01, 0xAB0CEDE4, 0xD3AE611A,
+0x76A2E9C1, 0xC495385B, 0x9E9C9F6D, 0x2620E3BD, 0x57147BDC, 0xF8C63F54, 0x137FB507, 0xFE1E5023,
+0x8E6FFA73, 0x5F38B215, 0x916A41BD, 0x484229AD, 0xDD58EAC7, 0x5369B51E, 0x58EEDBC4, 0xE301A999,
+0xE5CF0514, 0x3C721C60, 0x87F4A9FA, 0x414D0FFF, 0x0D4D2724, 0xBEF5828B, 0xFEF02BBC, 0x2D45E2E1,
+0x4FDB2C82, 0x859D35E3, 0xE8F11CF4, 0x2DBA57EB, 0x01A9EFE8, 0xD138C778, 0x3385256E, 0x168FC9EE,
+0xA3597C20, 0x9F8ECC94, 0x2D9E4DF3, 0xE0E8BC43, 0x5A6A4247, 0xA633B012, 0x1061475A, 0x96913D1B,
+0x2FD1818C, 0xDE511AB3, 0x73C049BB, 0x00B49011, 0xFA36C8C4, 0xCB3160D9, 0x1CBD7FA6, 0x1AB97A93,
+0x35049745, 0xC1F9FA19, 0xEBBF8444, 0x2EDCF27D, 0xDAC3999B, 0x840946B8, 0x338F2535, 0x357630A1,
+0x76E5FCF5, 0xCB1B237D, 0x7477BF6E, 0xEFBBF93C, 0xD299511E, 0xB0EEC5BD, 0x8B781B86, 0x8C1BF6E6,
+0x21C2D78C, 0x63911373, 0xABD940E9, 0x6D3ED4A5, 0x97030A1E, 0x98F21B95, 0x2323668F, 0x6BC6D5F9,
+0xCF16BD67, 0x2B15FF94, 0xE2018905, 0xCA6BA6B5, 0x5632041E, 0x402DD11D, 0x96601FAB, 0x6FA4754A,
+0x4227253B, 0x09D23C9D, 0xBADBBE7A, 0x06277829, 0xC5C03CA0, 0x994B500F, 0x3DE77CBB, 0xBB060FD2,
+0xA0D13FF4, 0xAA61F399, 0x0F8D0522, 0xCF8457B9, 0xCBC7EB2A, 0xC25A1AD3, 0xADA252FF, 0xB194FF09,
+0xF78EFC53, 0xA311A0FC, 0x2C745629, 0x06C6B878, 0x4F6D3673, 0xB6887BFA, 0x0831D689, 0x41FB471B,
+0xED3B8F23, 0xAB1068C3, 0x763B2A25, 0xF56359CA, 0x2834B342, 0x70126B8F, 0xB4A864BF, 0x42B6A74A,
+0x75625A98, 0x72272849, 0x90465410, 0x63A9588A, 0x16965313, 0x61A95F4B, 0x66D91633, 0x79119809,
+0x38C301F7, 0xD02FEB20, 0xE61D103E, 0xF2E47CA6, 0x0974627D, 0x283A01A0, 0x64E6EE1E, 0x4F1E9625,
+0x1C4B54BE, 0xF907D48B, 0xD35E89F7, 0x3CEA2344, 0x13273A4E, 0x78CEAE60, 0xB3856306, 0xC63CCA6E,
+0x5C2C407D, 0x0E61F8E7, 0x0A9CDD8A, 0x36EDBF83, 0x69A1A9D7, 0xF8E4AD6C, 0x5717F878, 0x8B9B2000,
+0x25576EA7, 0xF5939712, 0x48001D58, 0xFBA20CC7, 0xD2379CAA, 0xDCEE8955, 0x964C4A80, 0x59ED776C,
+0x9D3723B8, 0x2C89039B, 0x1CF4A9B1, 0xD09F010E, 0xBE5075D5, 0x082431BD, 0xBBD8F4C2, 0x0DF9D367,
+0x17577CDD, 0xC76F512F, 0x74BD2BD8, 0x1E9CD402, 0xF4743A01, 0x95AC5E6F, 0xD561D2F2, 0x3FA6EE78,
+0x44A6B3D8, 0xA7EDA44C, 0xCBAD3009, 0x8363D745, 0xDA9C1EB7, 0x8863E43E, 0xF98799D0, 0x82E8D441,
+0xE9CB8CD7, 0x423F8F2B, 0xA508D82B, 0xFF5A384B, 0x3EE087F4, 0x8051E3D3, 0x0F589AD3, 0x5348A58B,
+0x63C9F7DA, 0x5764BC1E, 0xD6B84262, 0xA819E673, 0x9EB2F27F, 0x2412DBA6, 0x7282DCAA, 0x9F9EA228,
+0xECC539A5, 0x3E7F317C, 0xF5A39B39, 0x3924660E, 0x4E53AFFE, 0xB831B224, 0xE475B60C, 0x9A78B743,
+0xE600FE33, 0xD81272E1, 0x9B3ADD4E, 0x28A12DC3, 0x1958368B, 0xC5ED627F, 0xA128387B, 0x22CAB6AD,
+0xA278D9A8, 0x46001D1F, 0x757FED63, 0x8901B5BA, 0xA9F41538, 0x78F39119, 0x5857EDF8, 0xE6B4CA8E,
+0x88F81FF0, 0xF1F371C8, 0xBA57483B, 0xDDE09647, 0x23D6A67B, 0xF006E8CC, 0x13F96B4D, 0xF02E0EF1,
+0x50611FC1, 0x20212DE1, 0x5F4772CD, 0x02A87035, 0xB66128E1, 0x5D2868C9, 0x7CFB9BAF, 0xF3CA7312,
+0x468F7874, 0x1077B786, 0x86B38025, 0x940ED107, 0x50EF8C91, 0xB0FA8DA9, 0x727396DD, 0xB04083BB,
+0x3AD1CA27, 0x045EFC2C, 0x8F32D724, 0x085C347A, 0xB5969F3F, 0x5D09387C, 0xB1466854, 0xB8AD4CBF,
+0x2219AB27, 0xDDD76D00, 0x10D13CB4, 0x02666070, 0xC8FD2BF1, 0xBB8BFD32, 0x83EFABD8, 0xC7FBC38F,
+0x70BAFAA9, 0xC1F70C9C, 0x836CB5A6, 0x73B9FEE6, 0x4B4C7457, 0xA71B3A72, 0x92C9E657, 0xDDB95A01,
+0x27F1E135, 0xC2EB85B7, 0xE320A3C8, 0x74CAA249, 0xCFA0E4BC, 0x3F57CEAB, 0x9D7514FE, 0x6045D148,
+0x628896B8, 0x7A353851, 0x0BF11D01, 0xA195A4E5, 0x634DCE93, 0x902C8EE7, 0x9500E0D3, 0x36D1A812,
+0x9BEE007D, 0x363217DA, 0x8132C6A4, 0xFAB9135B, 0x8981AA9A, 0xB8455BD0, 0x4AE80F50, 0x82EE6001,
+0xBF4BBDCB, 0xE9E65CAD, 0x6411C45D, 0xCD8735AD, 0xF72F74AB, 0xA52A72E9, 0xA0234BCC, 0xD46377C6,
+0xD4C3FB5A, 0xE9671A5B, 0xFE4F7227, 0x046039D4, 0x42D9F514, 0xD0E9753D, 0x1F4333DD, 0x9CD34B3E,
+0x7926317B, 0x4BF83555, 0xB2339CD4, 0x27136614, 0x6A0B58CE, 0xC4F1E154, 0x1E7AAD40, 0xD31C1C26,
+0x21E8B233, 0x7C6A6D3E, 0x739789F2, 0x891187DE, 0x578EE4E4, 0x686DAC30, 0xEA50E535, 0x43FD2487,
+0x4C00E178, 0x493B418F, 0x71BBA23E, 0x3CB1227D, 0x3E844F40, 0xFC5B5873, 0x53C50450, 0xCCD50144,
+0x0174FF17, 0xD58D3635, 0xE97C173C, 0x5676802F, 0xD373DA60, 0x83C1D64A, 0xB0491E04, 0x11DE4AEE,
+0xA7F2237A, 0xC1F90BF7, 0xB1E0F910, 0x233D5F9A, 0xD42FA556, 0xA1DC1591, 0x871EA5AC, 0x0F274FD4,
+0xA9F1C32B, 0xAF178169, 0x76F7C5E1, 0x146AF5A3, 0x504C799A, 0x08050BC8, 0xC09C59F6, 0xC5B5EECB,
+0x2554FEDA, 0x059E3F05, 0xCBCC04B1, 0x85418D4A, 0xBB357132, 0x332746E8, 0x7524F934, 0x6422BE21,
+0x7940B79F, 0xE553E5D6, 0x92E57406, 0x5D730DB5, 0xE08D001B, 0x0161098A, 0xBDA30BB8, 0xCAF26154,
+0x362C4B2C, 0x2940E657, 0xD760D449, 0xAEF6B985, 0xF405EA78, 0x812696A4, 0x550ABAD1, 0x6F36D468,
+0xD8C666BE, 0x6150A441, 0x4283F18B, 0xF762147D, 0x5FFCC450, 0xB853A573, 0xA5FB2B9F, 0xD73A2DFE,
+0xBEDFC08D, 0xDAB59BEB, 0xBD3640DB, 0x3E69BB22, 0x63EBCBB4, 0x27BFAF01, 0x617A621C, 0x0ACA4FBD,
+0x39AE7D0A, 0xE5269F6E, 0x4BB6CC27, 0xB6E29111, 0x874B37FE, 0x1A3719B0, 0xC755A140, 0x5513C8EF,
+0x670EFAD1, 0xB718D75B, 0xBAE1E392, 0xF3D9B3B9, 0x45E2CE20, 0x40CDE911, 0xBEBE118D, 0x98C7B764,
+0xA9B538FE, 0xFB176120, 0xF113AE74, 0x8030C477, 0xA3B142EF, 0x89D3CFDB, 0xA616A8AE, 0xD298F0CA,
+0x6150C608, 0x2DFE4F1B, 0xB5132BFF, 0x62EB08ED, 0xC699EE4F, 0xCEE57072, 0x365A20A7, 0x57E5E524,
+0xB69DE6A1, 0xC58BC897, 0x2EF3870B, 0x4E3AF798, 0x6A92B60F, 0xC0C72AB1, 0x51376FE4, 0x98D420E4,
+0x8E17856E, 0xD89515CD, 0x9DB8BD29, 0x25E5BEB5, 0x53EE63F8, 0x9A7D2906, 0xBE6CE502, 0xD9E392A0,
+0x3FBC91A6, 0x9600B765, 0xD96B15FD, 0xC857FA8D, 0x8620F4FA, 0x18DF52BB, 0xAF3C807A, 0x422C1B3D,
+0xEB2E323A, 0xFC53213C, 0x45FCDFD3, 0x1F31F96D, 0xCB309605, 0x0CD65046, 0xE333794F, 0xB1EDA6D1,
+0x14AD23C4, 0x4625A7E3, 0x62978E70, 0xAA80DC4F, 0x66E4B25F, 0x20D03FE8, 0xEC89D929, 0xBE056411,
+0xDAFBC511, 0x1BF65551, 0xD7897E04, 0x6E32696C, 0x12B7478B, 0x4BE783AF, 0x91327DF7, 0xE7684AD5,
+0xC29E12D7, 0x90E1E5AA, 0x524C27A5, 0x72AA8C08, 0x27E3A758, 0x903C0EA0, 0x038862DB, 0x2E603DF6,
+0x45B94022, 0x38902E8D, 0xFFB28BBA, 0x4064D348, 0x61D908AD, 0x4FADDC69, 0xBA5944BE, 0xE8C180A6,
+0xE01EF2D7, 0x6DD125FF, 0x4D788331, 0x3AB61E7A, 0xC62DC15C, 0x3349E719, 0x345B9CEA, 0x3844AEC2,
+0x47D2DA47, 0x06E4115F, 0x0CB7DB48, 0x091BCE4D, 0xB8CA81BF, 0x610079F5, 0x2054DCF0, 0xA7A42E20,
+0x70B2891E, 0x1588AE53, 0x51EA5AB6, 0x04DCB491, 0xB039C696, 0x60C3D505, 0x5050DFC4, 0xF56DEB44,
+0xAD5BFD36, 0xD476C388, 0x7A022FA7, 0xA8CE38A0, 0xFF06F253, 0x31D4BEAB, 0xD7F25D3D, 0x7AA61110,
+0x2DFF41D0, 0x8E1E2583, 0x4E3A3E90, 0x3085402B, 0xA6864486, 0xE0A4D9B0, 0xC7BFDA1F, 0x2A7B3BB1,
+0x0EE8C5F9, 0x6A581D37, 0x63A8D221, 0x5EEC878E, 0x36361223, 0x26C17925, 0x2817805E, 0x4C652C70,
+0x0624BA65, 0xE76480FC, 0xC2EBF5C3, 0xDCE19658, 0x956643AA, 0x29E00A02, 0x25815FC8, 0x930C66B4,
+0xD95993A8, 0xFDAC9144, 0xF0222BE8, 0x92ECB3CA, 0x86215621, 0x580DFFAA, 0xED3CBA5E, 0x80536DA2,
+0x19D9014B, 0xE3ED4678, 0x6C0001D5, 0x30225B1E, 0x8D9ACAEA, 0x9212ED2D, 0xC89CE5E7, 0x9946899E,
+0x97A56510, 0x4FC4153E, 0xC13D6634, 0x09DCA31C, 0xD1BB6641, 0x6C516EB7, 0x07BB2264, 0xAA037988,
+0x478BB785, 0xD29FAD1E, 0x2A25820A, 0x1C0F55E5, 0x4E6DE571, 0x2D2BEC1D, 0x0477BD26, 0xBBD7A8FC,
+0x6D682243, 0x0739CCA3, 0xD41E729A, 0x298D1D46, 0x607C18FA, 0x83FAAFC0, 0x4B766706, 0xC5EC4C87,
+0xA21DB70F, 0x4F341370, 0x903BD7F7, 0x10810EA7, 0x2C428A08, 0x4CC01E3D, 0x9F3F2F9A, 0x02F194DC,
+0xBB4C446C, 0x425A429A, 0x4BE64C00, 0xFF8C94A3, 0x03F18FBD, 0xD3F878C6, 0xAD3C49C6, 0x60A4749D,
+0x35F59E65, 0x5CF7D15C, 0x6BE0CF67, 0xF2BAB055, 0x9E208832, 0x2D2F9149, 0xD4ABF596, 0x7C9B144E,
+0xF3882A3C, 0x4EA88B26, 0x26BD1676, 0x27A81383, 0x7996A4DB, 0x2ED48E57, 0x3FDFD4EB, 0xEC79214B,
+0xA4F728F5, 0xD17346EE, 0x75250F6D, 0x6C63FAFF, 0x3ACF21E9, 0x5A807D3E, 0xBED62A47, 0x599C85BB,
+0xFBF88906, 0xF322D577, 0x4D6E1F01, 0x5BD21903, 0xE5B5F93B, 0x6A930762, 0xF1B8E825, 0xFD8DDB40,
+0xAEF3BBF8, 0xDC348805, 0x99E1CC2B, 0x874867B8, 0xC936497C, 0x3789EA31, 0x5CEDA96C, 0x42205A92,
+0xAD140347, 0x5275966A, 0x35E53581, 0xD2114517, 0xCE857727, 0xB53726C3, 0xBDD8DA44, 0x1334673C,
+0x223E8D5E, 0x56D0BC67, 0x65713470, 0x54DD7994, 0x139974BD, 0xAAF63B36, 0xC1FE8A97, 0xF6BCE775,
+0xD781F6AE, 0x18D6DB6F, 0x4FF9BEB9, 0x8F707590, 0x7494A399, 0x45092457, 0x3B6B0B78, 0x033135FE,
+0x064B0DA7, 0x6CDE797E, 0xA284A5B4, 0x5B628C92, 0x90AC153E, 0x6144FDA1, 0x74C09971, 0x682063E7,
+0xCF506F36, 0x598E9855, 0xD7F442CB, 0xE44E0645, 0xECB04F6F, 0xC8780489, 0x746EC856, 0x1042F095,
+0x8F032173, 0x0DF181E7, 0x7A30AA3F, 0xB4EBC0E0, 0xD6756876, 0x9075FDF4, 0x200E3B86, 0xF3A6129E,
+0xDA601D34, 0x054D6A23, 0xAF16AA16, 0x200FE2B0, 0x03824325, 0xA259A52C, 0xA051E4F5, 0x0E54D034,
+0x104C4594, 0x583C5F70, 0xD820C9C8, 0xF68F0460, 0xBC6CB7B5, 0x2990D174, 0x2EE23B92, 0xEE042725,
+0x78DC036C, 0x26B6A617, 0x4DDD6908, 0x8A852858, 0x49D23A7A, 0x3E1DA4E7, 0x387BA514, 0x0DB52477,
+0xBD20E7EA, 0x674EE93B, 0xEDC53E98, 0xC847BFD9, 0x30D5DA79, 0xF69A63D0, 0x2FAE4958, 0x79713E72,
+0x000B6F06, 0x965112A9, 0x6030F009, 0x5FA982AC, 0x89AB92FC, 0x683D9485, 0x75233387, 0x4A05DC1F,
+0xF4B4D8BE, 0x686AAB7E, 0xBCD37C71, 0x66ADA7F5, 0xC7972A8D, 0xA1FA5D57, 0x91B1257A, 0x73B2BEDA,
+0x6356F2E6, 0xE63F282E, 0xB54F3A92, 0x5604808F, 0xBC01CAB9, 0x05F3590F, 0x531062CF, 0xE5C1BD05,
+0xBA960494, 0xA68080FC, 0xF11B0DC4, 0x7AE560CB, 0xEFC2A0D6, 0x210E9F96, 0xD3BD3FD8, 0x829B10B8,
+0xEA3E9DC9, 0x6DC7F418, 0x499AEDEC, 0x34DFB23C, 0x2ED46DFA, 0x1881F022, 0x93B455D6, 0x15AE4FBA,
+0x4BDE5A7E, 0x4D559802, 0xE9304B93, 0x8EDB29DD, 0x5587E2B5, 0x497BB082, 0x4474F199, 0x0FFD0DEC,
+0x0B6FC465, 0x3E3BCFF2, 0x7A98256F, 0x745ED0B6, 0x7C534B27, 0xF8508204, 0xE0BC59C4, 0x3FC0B21B,
+0x019C66A9, 0x413E9580, 0x8377EB89, 0x9FDD0B49, 0xBC07A4AE, 0x1D7DC36F, 0xABD25075, 0x90DFDE82,
+0xB14AD552, 0x9E04E0C4, 0x92B7D873, 0x41AB9465, 0x8043EEF0, 0x633D8EBF, 0x9220F8B2, 0x37C01BD8,
+0x73E527DD, 0x8CC8807B, 0x2475E849, 0x7629F26D, 0x8E53C1BA, 0x8F445C3A, 0xB88C4E7D, 0x6AD4A075,
+0x5DE2020F, 0x6A39F4C5, 0x6DBC752D, 0x0B24741D, 0x749B09AF, 0x76E517EB, 0xCF2416A9, 0x44A36C1D,
+0xC6F8D15E, 0x663953B5, 0xB1AC0919, 0x62ABE082, 0xB1163C1D, 0xA80FB304, 0xF16412AC, 0x921F2B3B,
+0x6CE1C399, 0x37A15B84, 0x649BB0DF, 0x6B45F729, 0xB753DE95, 0x96588A46, 0x75A15A13, 0xC20B83F6,
+0x1BD0E4E4, 0xCCFA658C, 0x5B80EB7A, 0xAE3E1B83, 0x5F1F7E73, 0x02D2DBBD, 0x45C17B78, 0xDEEA3749,
+0xBA2D53E6, 0x3743F889, 0x6365E54E, 0xCF893C98, 0xE3DD4748, 0xFFE68D34, 0x67D9DD0F, 0x13CE12FC,
+0x47E62F6B, 0x571337AB, 0x5CE28E8D, 0xB84F2E38, 0x71850657, 0xC7958FEE, 0x6A48355E, 0xB3DE0312,
+0xF907CFDE, 0x4178AA25, 0xCF02C84B, 0xF01BBC58, 0x90239509, 0xE4259063, 0xD6BA725D, 0xDC14BBB5,
+0x8D0651C3, 0x12ECDA83, 0x40BF01CC, 0xB9C79074, 0x0F81D2E8, 0x7BFEDB34, 0xDE669483, 0x55BE6606,
+0xDF964A84, 0xBCE4472C, 0x77B98CA6, 0x3E470717, 0xEC84A5B8, 0x85596452, 0x567D5B72, 0xA6E95628,
+0xCB3F209A, 0xA3F1F962, 0x480D7800, 0x4C1229F7, 0xE10DFCD7, 0xCE693F6F, 0x710FFFF6, 0x18E8D1C3,
+0x42DB77A2, 0x1B31B06A, 0x50F7805C, 0x65E26190, 0x581EA1A5, 0x960429C7, 0x5C5AB3F7, 0xC8363220,
+0x05E80AAE, 0x5F09E10C, 0x571ABBFA, 0x6A7712EC, 0xB15A0B0A, 0xA39BBD09, 0x9CCEA985, 0xC1DD65C1,
+0x8A497326, 0x9AA5BB01, 0xD1FA5568, 0xEC449BD6, 0x34C0470C, 0xB63B3040, 0x62CDD587, 0xB5619DF1,
+0x233146C3, 0x7A7B234A, 0x44DC9B11, 0x33DCFB41, 0x2294149B, 0x16DC9842, 0xF56509FC, 0xB8949505,
+0x93D141D1, 0x01D1018C, 0x9C231B01, 0x22764B1F, 0x625B2ACE, 0xF7606E09, 0x2C725C40, 0x03B3BCD9,
+0x7E0421EE, 0xA5DA7630, 0x42E95BEE, 0x6E572DC7, 0x2D805D79, 0x7FD4A639, 0x217BDA08, 0xD0EF1DE9,
+0x79B7B5A7, 0x86B3CC24, 0x876D78AD, 0x8106F7AB, 0x02DCFA7F, 0x2D89EDB5, 0xE9B6B171, 0x2FF57971,
+0x54EA03DE, 0x5AC455B3, 0x8566F3E4, 0x8F93850C, 0xEE54E914, 0xDE8B03D0, 0x1160610E, 0x1B5010CC,
+0xAAB88F46, 0xBA29BEC9, 0xB1909F5B, 0x921CECC9, 0x880CC1B0, 0xB4B6A714, 0x33319DAA, 0x0A697592,
+0xC38D6556, 0x6BCE35AE, 0xCB99A8E2, 0x18A5E648, 0x12B5A584, 0xE94C64D3, 0x2B6FF0D5, 0xBD7E4A22,
+0x73EF3096, 0xF3789409, 0xA87EFC9D, 0x44DC273C, 0x4A12CDD8, 0x097E3C35, 0x70F36347, 0x6BEA166B,
+0x9E16846D, 0x3D61BEC8, 0x4E365C13, 0x858D6AD8, 0x08ABA944, 0x92FC77EF, 0x8DC5FEDA, 0x6CEE597C,
+0x8552ED26, 0xEB72A848, 0xF6355B54, 0x6E1C2C63, 0x3B24B2AF, 0x82E5CCF6, 0xE01D8CC7, 0x8C47B6CF,
+0xCB94A057, 0xEBE6D085, 0x9A4DBE0F, 0x1C932545, 0xBF2EE76E, 0x3D990263, 0x1DEFE40E, 0x5893CFFA,
+0x5E3020D8, 0x6C947F72, 0x852493A7, 0xB8971CFD, 0xCC2FA9B9, 0xFC9E2A05, 0x1BAB4302, 0xD743A047,
+0x78F2747B, 0x1B68BE2D, 0x8D67937C, 0xD745C37D, 0xF6167B05, 0xBB266A0C, 0xF5E62BB4, 0x78565603,
+0x8A54637C, 0x5313EEE1, 0xF65CB71D, 0x9FB232B5, 0xA9696638, 0xB1B7575D, 0xD759FDC7, 0x92ECFD8D,
+0x543C6429, 0x5ECE0B2B, 0x5FDA1C8E, 0x29311940, 0x018068DA, 0xEEC4B8CB, 0x4472EC34, 0xAC2C5D28,
+0xE9817111, 0xDF8B16A0, 0x3143F972, 0x8F1E40D1, 0x706744F0, 0xB804BE43, 0x5B111AE4, 0x62EA72F9,
+0x168045B3, 0x9F7426DA, 0x9C2E8B10, 0x786EFD2A, 0x6C64F8CB, 0xD76D742B, 0x42D3C06B, 0x31429BFE,
+0xAB634F61, 0xB158B539, 0x92AD62B4, 0x1A9553FA, 0x8B0765DE, 0xFEC62261, 0x13A9B84A, 0x90115CAE,
+0xF772A3C0, 0x5F38D198, 0x480C09F5, 0x728C3C92, 0x1D05821B, 0x7C7E709C, 0xE2119E55, 0x7EB82A35,
+0x97B90F7C, 0xBB9E22B7, 0x1A8DDB57, 0x5798636C, 0xC8C0FC24, 0x08C3AE1F, 0x77BF3F13, 0xE758FEAA,
+0xEA4BA5FF, 0x339BE1D9, 0x758D6317, 0xAA7F049F, 0xCC1ECEFF, 0x7F617F2B, 0xA011E0EB, 0xC1F71313,
+0xF3015FFF, 0x77C20225, 0x84015223, 0x51A95589, 0x70949754, 0xC7395345, 0x4A6FA705, 0x8CEF3215,
+0xE393D5C2, 0x0C2D2D40, 0x700A0621, 0xA665A26A, 0xAA2B1FC7, 0x7DF62825, 0x0354E9A3, 0x569F5FC0,
+0x44D4AB19, 0x2DFD34DE, 0x94CECD91, 0x5BE9A5FF, 0x5A3AB2B1, 0xFDFB3161, 0x90A55F0F, 0x52294607,
+0xE1305548, 0x4CB62FC9, 0x91264755, 0x254E0726, 0x955FE0DF, 0x9DD4323D, 0x43FFAF91, 0xFD227418,
+0x78315D34, 0x85F0C691, 0x976C687B, 0xBB2D51C7, 0xC53461A2, 0xA79905F4, 0x493D3575, 0xA093E692,
+0x5625E9E6, 0x8D062DB3, 0x1BEFC8E8, 0xA7BAFC9C, 0x83996EB5, 0xFBBE31CB, 0x6CEB1821, 0x91CAEAB8,
+0x4072EE98, 0x4910643F, 0x763C5212, 0x217648F2, 0xB57ADA95, 0x2E093A73, 0xA0597ECD, 0x8381B8F3,
+0x02E8F3B5, 0x1884237A, 0x0322281D, 0x9B635A15, 0xA82F2428, 0x5F8D8F39, 0x33EC3679, 0x78E5D5B6,
+0xFF4CC53C, 0x4279906B, 0x5D106BDC, 0x288B39A0, 0x85499D9E, 0x7B529225, 0x9889A379, 0xCD67DE28,
+0xE20D3EDC, 0x083B9CD5, 0x168A0DF8, 0xBB4E3A52, 0x8990FC42, 0x1DF6CAB0, 0xB786C697, 0xCA7292E7,
+0xFA9D2411, 0x7C1C32E3, 0xFEF5640A, 0x5DADB707, 0x25CF9525, 0x6CE38A16, 0x8A5FA4D6, 0x850F1B9B,
+0x981CB16F, 0x094383D1, 0xE66E578F, 0x4B994D98, 0x64DAE1CE, 0xDECCFB57, 0x0BEA685A, 0x950D9AFF,
+0x9263E120, 0x6944E1C6, 0x9445AA37, 0x86D73C97, 0x36B85733, 0xFD091FA3, 0xADFBA880, 0xCB304560,
+0x405F7FD8, 0xA90B0AE0, 0x3910DE6D, 0x66408218, 0xC87C70EA, 0xE719CEC8, 0xD42E7130, 0x7BCDB82E,
+0xCF1906EE, 0x6336CD36, 0x04559A4F, 0xBBFEC755, 0x3ED1337B, 0xF55C8649, 0x9D59AB6E, 0xE4503D8C,
+0x684E97CE, 0x424AB704, 0xB1FC264B, 0xF21BD917, 0x0D10A789, 0x00746188, 0x81E917AC, 0xB4976D36,
+0xA2A7A298, 0x5A8069D8, 0x1E8191D8, 0x9CA27C3C, 0x0DFDBEF2, 0x84EED801, 0x880F9CB1, 0x38D83EBA,
+0x42A643E1, 0xDE9892C6, 0xAA4597ED, 0x19D4EBEC, 0xB10A8CEC, 0xB58ED306, 0xBA81A96B, 0x4B03B651,
+0x47E336C5, 0x45E59613, 0x0391A346, 0xE7C82B4F, 0xC22FF886, 0xA5942CEB, 0x260F6972, 0xB1FDCAF9,
+0xBA78B7C4, 0x61466469, 0xEB2A48EA, 0x1A0EAD2C, 0x081A0D56, 0x5CD80F34, 0x18A36C9E, 0x7EB86B8F,
+0x37A0CE0B, 0x5AC92475, 0x0F3B4EFC, 0xF9E578DD, 0xB9434188, 0xC7100CA4, 0x30984CE5, 0xC4A45E42,
+0x04078D18, 0xF28EAFB7, 0x02FB9901, 0x725C5988, 0xED7B318D, 0xA044612E, 0x7852E62E, 0xC5B5CCC0,
+0x7D751442, 0x81BC78DC, 0xB42C4F1A, 0xDA72E141, 0x8C9A1DBE, 0x16A751E5, 0x3922DA37, 0x39B5D6F5,
+0x7C389649, 0x332AA080, 0xB1202716, 0xEFA565D2, 0x2F4F3B40, 0xE071EDFF, 0x6D305357, 0xF37E2778,
+0xB2514A0F, 0xE703411E, 0x51AB3FA0, 0x19536D45, 0x3534CFCB, 0x84891012, 0xDAD5F8DF, 0xC2AEF234,
+0x6D5887F5, 0x1F633C58, 0xF2BB7AF7, 0x41789230, 0xA77ED971, 0x2317E38B, 0xD7B340F3, 0x3B3A43E8,
+0x906F176A, 0xF45D463C, 0x6AD1C819, 0x63A08CC4, 0x6941EE8E, 0x67A69421, 0x945C18F1, 0xBEBBD3E2,
+0xFC6D0771, 0x6AE0F578, 0xC0259890, 0x4171D0C2, 0x9678923C, 0x2F45022F, 0x18A422D6, 0x3EB9A94C,
+0x1B5EA073, 0x94AFE5BD, 0x0C473139, 0x48D9B288, 0x83554EA6, 0xDB1A0564, 0xBCB2AE15, 0x29227AB4,
+0xE4FFC297, 0xA9DBBAFF, 0xC52303E1, 0x27B601AF, 0xC48439A6, 0x83EC12F5, 0x6BF6E532, 0xF49CE5CB,
+0xA364BAD0, 0x04C272F5, 0x2755CFE5, 0xD02E5281, 0xE7CF849A, 0x689CF054, 0x7FC7813D, 0xB8ECFC6F,
+0x7B03B2F6, 0x3B1C812D, 0xD4D5FC63, 0xBD1DA5A7, 0x90A2011F, 0x07843D41, 0x7EC259D4, 0xBFB55539,
+0x6826E941, 0xC3940EFF, 0xB83E3557, 0x6FC08C67, 0x9A12D73E, 0x237A92D1, 0xDB3FC54D, 0x8B6C50E5,
+0xC312D5B5, 0x23F3E0C1, 0x194F32D9, 0xA62174C3, 0x42E4B27B, 0x861D14D9, 0x4295AEF0, 0xC9A65716,
+0x7764A33D, 0x066406F5, 0x742A1917, 0x92672D02, 0xB60D95E3, 0x6DD00921, 0xB7DBDE97, 0x90E85013,
+0x70A88E18, 0xFE22E44B, 0x3D4E6DB3, 0xF9C7FC25, 0x8693E039, 0xA6DB6FA7, 0x4B77E1CF, 0xF2A52DB0,
+0xD0019BF5, 0x5A0A1A19, 0x6F09D7EC, 0x74A78A72, 0xD3030D22, 0xBF9BE1B5, 0xE1F66203, 0x3B22E82B,
+0x32619887, 0x3DD0C6B2, 0xFDDFDEAF, 0x62BE74BB, 0xF53F9357, 0xB4113130, 0x655C84FE, 0xDF26D333,
+0xD19FE33D, 0xDFE480E6, 0x811DB991, 0x4085E26C, 0xC5FF8F77, 0xE199CACD, 0xC74C267B, 0xA0EF10BF,
+0xD7E8C2B9, 0xB7BB83C2, 0x8D4DB0D0, 0x4972CEE0, 0x02926D8B, 0x8F3AB5BF, 0xE27522C3, 0xF1060159,
+0x42480E88, 0x7AC07D17, 0x59CE112D, 0x5026318F, 0x137F799A, 0x705B2139, 0x616210B9, 0x2D513492,
+0x8D35D38B, 0x011637A6, 0x8907B749, 0x51A21C5E, 0x1BF6A672, 0x6E8A7189, 0x57F3D0AE, 0x63986AA9,
+0x43F8BCC8, 0x8516F771, 0xA4C6740F, 0x0C17916A, 0xEAEDDFB3, 0xE0ADDAA0, 0x7C9D4E3F, 0x88F6E217,
+0x7079500F, 0x9241BFC4, 0x28843437, 0xCC58013F, 0xE90A07AB, 0x264EA795, 0xD2BDDF5B, 0x4125234E,
+0x8AEBC92E, 0x81004C9A, 0x1887FD22, 0xF20D791B, 0x6AE3E171, 0x4FB51B6A, 0x38CF1867, 0xE92BD043,
+0x27C1C42A, 0xADAD13F2, 0xE2B6ADAD, 0x1BE3A934, 0xBDCD835B, 0xA4CCD5B1, 0xD3D280D4, 0x80ACDC5B,
+0x4D61093C, 0x443945A6, 0xBBD9D1A3, 0xB692018F, 0x55A9A32C, 0x02771C33, 0x6D75735A, 0x411B137C,
+0x16EBC970, 0x9B11FA90, 0x2EA6EEEE, 0xBD34445D, 0x8C6D3A3F, 0x28E9A8F1, 0x2B49E36C, 0x40CE2C0F,
+0x14C33C19, 0x17752B1D, 0xC91B7608, 0xC0A6AB4D, 0x8A9688D0, 0x0F5F1F9B, 0x529851B4, 0x2124A388,
+0xD10DA7D7, 0xB05B802B, 0x757E1E03, 0x9FC2353C, 0xB603405D, 0x008F3900, 0xABFC71EA, 0xC0F42F28,
+0xFC6655DA, 0x8667ED33, 0x5C44B7A4, 0xA384FF6A, 0xC7E94F70, 0x355F38EB, 0x061DD36E, 0x4E6B655E,
+0x79445665, 0xA2B79346, 0xFADDE8F1, 0xBBC9C1EE, 0x1C200EC0, 0xDE2D07C2, 0x01FC6558, 0x7AC15276,
+0x194E7CFB, 0xDCC5182E, 0x6E6EF594, 0xA4436A07, 0xC0DE3C1B, 0x167EA757, 0x891C9A86, 0x555F6F9F,
+0x805899B7, 0xA1D50468, 0x0BD7DD87, 0x6B2CB8DD, 0x18226C4C, 0x4995C0F8, 0x484C9910, 0x2D426697,
+0x588CA517, 0x0FD76627, 0xDB828D7E, 0x12FC01FD, 0x10B93219, 0xAB51313A, 0x96733D38, 0x52FF7AC3,
+0xDEDC0E9C, 0x706445DE, 0x4D76842C, 0x25ABC8FC, 0xF5C792E2, 0x761E329D, 0xFEE48586, 0xE1D74CBA,
+0x28545686, 0x52320921, 0x6F9D86B7, 0xB7350557, 0x0E56823D, 0xEB2824EF, 0x0CBFBD88, 0x55163A8E,
+0xC33256D9, 0x45BE900A, 0xEFFBC9AA, 0xBDF4AAE1, 0x172CACFC, 0x69BB3442, 0x7BACE88A, 0x925E634C,
+0xD43B4E2E, 0xB6821567, 0xAEEA762B, 0xE19913ED, 0xC14BE894, 0xE721AF77, 0x66B73C6A, 0x41EF997A,
+0x6E796727, 0xCBD2226E, 0x9D3CECBA, 0x005B72AF, 0xDCA449EF, 0xB5DA3A44, 0xCA23B416, 0xC692D8CE,
+0x03011478, 0xC7B6FCE5, 0xD82A621D, 0xEFBF2358, 0xD683E1C3, 0x63296990, 0x1E1D70EC, 0x210505EB,
+0x116B6293, 0xF16A1604, 0xED1D05D1, 0xC3C18020, 0x22793DAC, 0x96FA9C03, 0x84FA29C1, 0x42E83AD9,
+0xF8C8E1E0, 0xCB18C8CF, 0x2B46918A, 0x3C595E3E, 0x74054F63, 0xA209E2BB, 0xCD494F15, 0xB2C2131F,
+0xBA466917, 0xD8CB9235, 0xCC250D3A, 0xDD2EA6A1, 0xD36313C4, 0xDECDCF0A, 0x57FC4B4E, 0x6A9B3BD4,
+0x721F3AB4, 0xD031118A, 0x4BD846C0, 0xC8DE23BB, 0x4B097D4D, 0xC7481F3D, 0xD25A2C4B, 0x80C254D3,
+0x7B46995E, 0xCB6ED473, 0x359C1A25, 0x22340615, 0x02A4AF19, 0xCF70D20B, 0x5822A528, 0xEF31C59F,
+0xB1CF3C1D, 0x7AF7A943, 0x78117960, 0xCC5B5551, 0x569EADFA, 0x2C0F20E1, 0x960BACF9, 0xB4C7E43D,
+0xF39C5B44, 0x343986EC, 0x132D9828, 0x9C51FDC4, 0xD2B1CCEB, 0x64036A74, 0x00EBDF8C, 0xFEDBFB4F,
+0x6DB8CDB5, 0xED94AB72, 0x0CD0EF83, 0x7133CBD5, 0xDFB53B6B, 0xB802DBF6, 0x5DB6AE63, 0x9EF92265,
+0xD31352FF, 0x04F01CDF, 0x813785B8, 0xEE18393A, 0xA8BA33CB, 0xDF4AC8FB, 0x66859EEE, 0xE1A3523D,
+0x211016C7, 0x25926F45, 0xFF3E6EE5, 0xB2A89729, 0x1BB0331C, 0xC25D1E05, 0x63EA2562, 0x17B91B2C,
+0xE0DCF12C, 0x7C74DD2B, 0x864D336F, 0xA0A9E816, 0x4548420B, 0x64B2EEBB, 0xDAEFCD83, 0xFFC04D98,
+0xC90B98EA, 0xD374E82C, 0xDAB928E3, 0x6BB7AA4E, 0xB4C24D78, 0x05103530, 0xAE8D155C, 0x8095C2B1,
+0x2717FF60, 0xEE2371DE, 0x3EA535E7, 0x98F910D4, 0x95886E81, 0x14EC79E3, 0xC8F28027, 0x8356D827,
+0x2D075CD6, 0x761B3B75, 0xB340E80C, 0x6794D851, 0x04E7D211, 0x9E1753D2, 0x5B04E122, 0xAE06AC8E,
+0x7FAFA545, 0x339FE6F0, 0x7600678B, 0x44F352E8, 0x53976AC5, 0x0D8F4926, 0x4DBE3AF6, 0x96BD53C9,
+0x7E499DFA, 0x90E251D0, 0x97C2E0E0, 0x03FCB2E4, 0x3BC268E0, 0x50F1E6BE, 0xA975D788, 0x05734A64,
+0xCBD8FC6B, 0xA8396097, 0x91CAB028, 0x31FCCDBF, 0x1EE00C58, 0x4F91CE28, 0xB4504B5F, 0x2ED4651C,
+0x681B06F6, 0x326B26E2, 0x522353CC, 0xF9D18CEC, 0x80FC987B, 0xC7562771, 0x4A369FBA, 0x9D35DD9E,
+0xBE249350, 0x43CFD0F9, 0x4C0F7DC0, 0x53D740F7, 0xB1C0DB6E, 0x5E48684D, 0x70B2A5AE, 0x0816D483,
+0xDEA9FA51, 0x67CDA2F7, 0xA8BA8C40, 0x5D32E40A, 0xFC623F2B, 0xE5BFB005, 0xECCFF0EA, 0xA8E1F5BA,
+0x86DD1F1E, 0xFCD2A90A, 0x647F59EC, 0xC3844C10, 0xBE261B65, 0xB5CB6DFA, 0x04010AB5, 0xC8C33628,
+0x59076C12, 0x9186E892, 0x118D3075, 0xEE88C744, 0x3B963F22, 0x4455FF2B, 0xF64F006E, 0xAB179B51,
+0x94BF461A, 0xCF4FC8E0, 0xDE638C64, 0xE9AED88D, 0x4830CF79, 0x9C71E7B2, 0xFD480C26, 0x54DFC112,
+0x8DB2961D, 0xE25D27BA, 0x34BD68EA, 0x51718D89, 0x9DD5E52C, 0x954927BD, 0x97BE5459, 0x88CCC7C6,
+0xB1ABFB4F, 0xF9E1568A, 0xA4ACE0D9, 0x6346F6AE, 0x0D09FDFA, 0x9546D046, 0x4CEA4345, 0xE928A9DA,
+0x77D6F5BC, 0xFDE1F60F, 0x532942FA, 0x0290AC1B, 0xECE36A4E, 0x6D0C1BD5, 0x9F8784CF, 0x38B13888,
+0xAA9739A9, 0x89C0550B, 0x0CD618D3, 0x5C3C99E1, 0xAE1549A4, 0x4EFA7EB5, 0x0960B6FB, 0x7CA81005,
+0xC5E08D36, 0x50E9B408, 0xB936D4D1, 0xC8BCC3C0, 0x047A7443, 0x51C630BB, 0x8FA9850B, 0x5FDD33B0,
+0x45B8418C, 0xDE5F4E2C, 0x81FCCEB0, 0x2C44A5C9, 0x7DEA8CC0, 0xBDE325E8, 0x8DBCF438, 0x2E176A51,
+0x4A05ED70, 0x1A928918, 0xAEB36218, 0xFDD49A8B, 0x335C5601, 0x9CA07E6A, 0x073D37EC, 0x9671F11D,
+0xC24F069B, 0x75D920B3, 0x3495025D, 0xB6CAA2D5, 0x67105C6E, 0x24F9B8AC, 0xEDF08125, 0x8456D9A8,
+0xE2429967, 0xCC0F7CAD, 0x4AD460D5, 0x3811BC4E, 0x663C87B1, 0xA07BFAFB, 0xE90EC338, 0x0C2DEF23,
+0x3BFA6409, 0x3FC39613, 0x6AA1784F, 0x85F13662, 0x00F8C323, 0x928AA699, 0x7C6E3583, 0x1182ED74,
+0xB68923FA, 0xB9FE157A, 0x82D8A561, 0x93249F8C, 0x694D26F9, 0x64F05352, 0x93204ABD, 0xCA8AF2E1,
+0xF852EB29, 0x09CD9564, 0x9063DCD8, 0x14C89956, 0x22231C8F, 0x39F1E368, 0x335F3EFE, 0x5B703253,
+0xD856165B, 0x04061A87, 0xDA186EA2, 0x66B94507, 0xABE7C5BF, 0xC4951C42, 0xB707EA32, 0xDC0BA157,
+0x49A2C64F, 0x90C1A20F, 0x1FE6EF6C, 0xBCD1C279, 0x66208791, 0x79B62356, 0xCF46103C, 0x9CBD1202,
+0xB8D1A4F1, 0x30048882, 0x561290E2, 0x64FBFC21, 0x6AD65100, 0x5612F8B9, 0x864AF81E, 0x6CAC383F,
+0xAE7BA510, 0x8C3FD36D, 0xAD91AFA7, 0x54FD52BA, 0x4AFB0296, 0x3946705A, 0xA2A6F551, 0x943E1E92,
+0x2D28F9B2, 0x26263B46, 0x4DF8C211, 0x3275BEB1, 0x84723F79, 0x6B238056, 0x4FE8CC2D, 0x3C8EB81F,
+0xD8A3652F, 0x8EEABD95, 0x6E37F998, 0x3FA84507, 0xDD739215, 0xE0F4437D, 0xC5B5B0EE, 0x913D70DD,
+0x7CB32852, 0x76A303B4, 0xC63F4083, 0x822DB949, 0xFEB2A33A, 0x204824E5, 0x9674D07F, 0x5BC3A651,
+0x3E4ACCD8, 0x90ECCE2F, 0x571BF2AC, 0xE2270316, 0x6A9567FE, 0x2D0BA130, 0xB0788492, 0xD376BCD2,
+0xA24259CF, 0x5A46B606, 0x49751F5B, 0x4F26C49F, 0x50069937, 0x56B91A5A, 0x6E9B3E0B, 0x415858D4,
+0x91ADF913, 0xDCC5F793, 0x11C71CA1, 0x5F37BF0D, 0x605D3020, 0x58CDB8F0, 0x9FD8266F, 0x227FE057,
+0x3FA34EE7, 0xA4A88B15, 0x93C7E459, 0x335E719F, 0x77D8083F, 0x5F20CE16, 0xACA57282, 0xF185D0F4,
+0xB959579C, 0x33671E21, 0x1FF04D75, 0x6849D6A3, 0x02CBC8E7, 0x9C5FE6B3, 0xAC910581, 0xCBD2ACFE,
+0x1356728C, 0xC52429E8, 0x8A9CDB6D, 0x87AD4601, 0x5F1D7FEB, 0x3EB3546E, 0x4E56ECAB, 0x0EC65ADA,
+0x5E89E51E, 0xD80CE2BB, 0x6A5E72D3, 0x981E509F, 0x201ADB8B, 0x96886B46, 0x3F959D4B, 0x1F4216C0,
+0x658A903A, 0xBDEC3B71, 0x89B02038, 0x52D5DCBD, 0xFC0ECC0B, 0x13C14835, 0x35616AEC, 0xFE71D37E,
+0x423B56D0, 0xB8E949CD, 0x7819BB40, 0x3B8FA96E, 0x46E7D5F1, 0x2C1C28CE, 0xBDB2217F, 0x2B3F0760,
+0x23A0D753, 0x9DD99E54, 0xA4BCBCA6, 0x7C91A73E, 0x662ED29E, 0xF5E6BED6, 0xE2A430E6, 0x9D129A1F,
+0xF12F7234, 0xDF23E8BF, 0xB3F0092A, 0x12BDD62D, 0x909905D5, 0xF771AB5A, 0x7A1A0AE3, 0x66345F4E,
+0xFF28C230, 0xBD4C56DF, 0x53065F6F, 0x22505E7C, 0xB546D2DC, 0xBEAA2499, 0xE5F85FD1, 0xE4270C33,
+0x480F095A, 0x93BDBA0E, 0x50F55737, 0x47C1ADA8, 0x696B3340, 0x3A2961E0, 0x86878010, 0xAF13B543,
+0x8E198E56, 0x5C29C611, 0xFB47F312, 0xA9C289E0, 0x79C07324, 0x918E231F, 0x04D23521, 0xC62C32FA,
+0x767829EB, 0x75E9C4E4, 0xA8560BDB, 0x6BEF56F7, 0xB96D1C3D, 0xA55273E5, 0x7ECB5DF6, 0x760F38C2,
+0xFE54D022, 0x55094356, 0x82F77F85, 0x22AD8B05, 0x525AE58E, 0xD3AEEDEE, 0x4D3E43A3, 0x577439B9,
+0xD7C495B7, 0x94828574, 0xDD121D8C, 0x806FB5A9, 0x26C182F2, 0x5293D6D9, 0xF6B8E4BB, 0xEE25A80C,
+0x14A71578, 0xF889FF35, 0x21397177, 0x4CEB2091, 0x62600C50, 0xD8078C6D, 0xFD16812F, 0xF3ED8A2E,
+0x2BF682E8, 0xA12A2829, 0x22A55A44, 0xDECDFCC8, 0x74C57626, 0x838E675F, 0x0C92037D, 0xAC1F4DFF,
+0x3E61DD1E, 0x65D6DD6E, 0xDF420CB7, 0x3CDBC75F, 0x280A8ABC, 0x7B32397D, 0xA73A0BFB, 0x45BFFD7D,
+0x11072D5A, 0x04B10677, 0xB033D93B, 0x22A71557, 0x86F9A1F4, 0x41A6B9A5, 0x0E5E81A7, 0x84BE848A,
+0x43A5A76F, 0x56B0F7FB, 0x2121639A, 0x95C04236, 0xDA0958E3, 0xAFE19AA0, 0x7D7A706E, 0xAE74A731,
+0xC5691A87, 0x1417BB81, 0x2DC9C450, 0x756AC80C, 0xF417CFFB, 0xCA38E25C, 0x0B160FD4, 0x0E538298,
+0xDA55DCD0, 0xB68E5D7A, 0x787DDC3B, 0xEF0BBAD3, 0x00C0C620, 0x08BBE399, 0xD5E347D3, 0x76ADFBAD,
+0xF26A5F0F, 0xE42DAB63, 0xCDA3AD57, 0xF215AD1D, 0xAEBA9AFE, 0xB66DBE09, 0xF09102BB, 0xD9A2DD0B,
+0x23E7CBEC, 0x80B1AA2C, 0x871C1D87, 0x6FE15EB7, 0x8C40C86C, 0x241AC654, 0x118F0419, 0xEA33CE7B,
+0x9B2BFB90, 0x71E21879, 0x0DA8D3C8, 0x026D2B1F, 0xBDFA42BB, 0xAF3F5E72, 0xB36B7917, 0xCC053E95,
+0xB50395F5, 0x4365E773, 0xC80C05C3, 0x754E2F93, 0x3F94F2AA, 0x6538F453, 0x4B34B65B, 0x002F6F84,
+0x1942ED4D, 0xB5160F95, 0x7CFAA5CA, 0x1D3AE341, 0x64407D07, 0x42D6A9D9, 0xD7CBDC14, 0xF515C853,
+0xCAD49104, 0xC255A72E, 0x7099777E, 0x6AEA29CC, 0x237029C7, 0x84781E56, 0x59AF84C3, 0xCE96A1D4,
+0xE431BD63, 0xED97C15A, 0x9D0A504D, 0x0B1C12EA, 0x03DC3932, 0xCEDB3EBB, 0x9F7A5678, 0xEAB417A9,
+0x78C77B88, 0x5D329427, 0x17CF3F73, 0x24A9799E, 0xDE95A9DC, 0xA9D6E306, 0x61E29C84, 0x4311FD0C,
+0x7C99DDB5, 0x450DB814, 0xC6FB3022, 0x16E4957D, 0x992C2C9D, 0x04555DB9, 0xF6FF5637, 0x23B1BF62,
+0x8EB04136, 0x384F7115, 0xDF3C64FF, 0xCB99710D, 0xD1C81488, 0xF4527D86, 0x98330A4D, 0x5EBD28F2,
+0x1E284418, 0xB925F3C4, 0x310D5F6E, 0x4006377C, 0x37513EE6, 0x0DED2D4E, 0x1460B7CB, 0xEB146A27,
+0xB3AE6A92, 0xC9A101D3, 0x13F563C5, 0x33E99E56, 0x86B59AE5, 0xD5A67AD3, 0x39AA6E79, 0x8B015544,
+0xF3195027, 0xD188BC77, 0x8508621D, 0x17011CF8, 0xEF78710E, 0x3F854E29, 0x122AEC7A, 0xDC445259,
+0xE089D899, 0x0C8C6DD8, 0xDBA703DB, 0x7FE71BAC, 0x9A4C6974, 0x323F1AD0, 0x8DA25E19, 0x89E531CC,
+0x6F76D1E1, 0x8FB0554D, 0xDEADE057, 0xD4BA88B0, 0xD148DB1D, 0xBA15D7BC, 0x002C8242, 0x286CD037,
+0x31697361, 0xB1CBD65E, 0x8232AC35, 0xE1B195A9, 0x61678D1B, 0xBC620672, 0x0BAC449B, 0x13989027,
+0xDE9A1E6D, 0xABE4265E, 0x87216BB9, 0xBFB8DFFD, 0x5C221E32, 0x9AA98D2E, 0xB324D310, 0xD23AD641,
+0x64CBE5C0, 0x98842D3D, 0x7305DA04, 0xCB876AA8, 0x1E3402A3, 0xF3DF41E7, 0x64996B0F, 0xD2D0AE3D,
+0x525CA7EF, 0x4CE40517, 0x4AB11F95, 0x71930308, 0x1EFAE5EE, 0x1B75D714, 0x5A846BAE, 0x2EF88BA0,
+0xEA152F59, 0xA79DF5F7, 0x86585E64, 0x354EA6FD, 0x120580B0, 0x86959863, 0x5A36547F, 0x2F3EF5BA,
+0x1945E7A6, 0x76EEF9F2, 0x56373FE7, 0xED892795, 0x338AC2A5, 0xD8238C84, 0x190E0D58, 0xD3EF135F,
+0x22DDFE94, 0x91BDEFE6, 0xFE3DC8BA, 0x3063164E, 0x0817EB21, 0x93D91E6C, 0x2F636F92, 0x242512BA,
+0xDD3FFDDE, 0xF14CF205, 0xB07FE91E, 0x5043F387, 0x4857450E, 0xEACB2336, 0xE65FCDE0, 0xCB552C37,
+0x919FCF4F, 0x4579E578, 0x29A40E52, 0x0B6A7BAD, 0x8EA57195, 0x4951BB84, 0xB1ED35C8, 0x27092A6D,
+0xDBC0862A, 0xED6B7EBD, 0xDB297935, 0xC3DD4B85, 0xE742416E, 0x3FF07BE6, 0xAC8BA4AE, 0xF245442E,
+0x3BAD2FE1, 0x2A91E12C, 0x51ED2B5D, 0x6F7D8309, 0x4360BC19, 0x689A29E7, 0x0482B438, 0xA3163BEC,
+0x40A0B985, 0x434F29BD, 0x76F8224C, 0x2AB788F0, 0xF4BF1AB1, 0x8B7E0F5E, 0x2DB05FDA, 0xD1F684AB,
+0xCA988236, 0x87E5DA36, 0x1D0E7938, 0x92E092D1, 0xE7F4409A, 0x13E14CF4, 0xFFE8ABF7, 0x717A0586,
+0x64E22B58, 0x9F7F81CD, 0xEA2E06E1, 0x27214F97, 0x459F15A7, 0x3111E308, 0x8956597E, 0x3D12F16F,
+0xF9615B48, 0xADE21BD1, 0xA620ADB5, 0xCC66227A, 0x60B8E424, 0xFF581FA7, 0xCEA2BCDD, 0x792C246F,
+0x1B89CD5F, 0x6E5AF97A, 0xA860F46F, 0xB576591C, 0x6AF6562C, 0x46D05696, 0x16B8AFA2, 0x2DD2B27C,
+0xF1D2266A, 0x250B8C16, 0xFE12484C, 0x8504273B, 0xBBCF3ECE, 0x399DF3E7, 0x82B23CD1, 0x3DA54672,
+0x841AA85A, 0xA860E9A9, 0x5423394D, 0xA84E62C3, 0x61BC1787, 0x4DD9D29A, 0x0696AC69, 0x4F1BEEDB,
+0xFBBB182F, 0x83F56A04, 0x2C9F5DC0, 0xB76C3436, 0x90E4456B, 0xBC61C600, 0xDD86E321, 0x2F486CF5,
+0x6A2B4094, 0x6D214DAF, 0xE27F3BA5, 0x18B2140A, 0xCCC9094E, 0x7B7062BB, 0x44C22EAC, 0xDA289B96,
+0x6A38A169, 0xC361EE4A, 0xEF75452A, 0xF518EC32, 0xACCF4DB0, 0xE782869F, 0x44D5CB16, 0xA67F2BE1,
+0xDA064E69, 0x79AB2D38, 0xCD740EC5, 0x8AAB2071, 0x49DC0B9A, 0x907C6FF4, 0x62D19000, 0x807F89F1,
+0x96BA7790, 0x9DC2450C, 0xBB10FB3F, 0x32532AA9, 0x1CD4B42E, 0x5625687C, 0xB9A3795E, 0x496FD8B1,
+0xF046F350, 0xCEF1E44A, 0xC53A185E, 0xD38A635A, 0x53114596, 0x10D9692D, 0xFD4DB46A, 0xD980AFEF,
+0x04BA5693, 0x3F35F429, 0x9E85B1D7, 0xFC68CCA7, 0x3C6E2975, 0xFBDCCC2B, 0x159F2FDB, 0xA5D5B26D,
+0x9B45FA86, 0xDC03BB93, 0xBBEDF7CD, 0x7A0673A7, 0xC9E93187, 0x994F105B, 0x3276F10F, 0x94176F64,
+0x6D09A697, 0x923D7E3B, 0x8F0DCCF1, 0xC7085E7F, 0x37225FD3, 0x7EEA7F85, 0x04743157, 0x783945B9,
+0xE010D743, 0x223905AC, 0x609664DB, 0xFB732A29, 0xBF8E0F15, 0x45EEC836, 0x0185F3BC, 0xF2E7ADC4,
+0x2AA2AA5B, 0xCD82C205, 0x8C1353B4, 0xBFAD0DAD, 0xD68A0548, 0xBCB94A01, 0xB52668A3, 0x962D5F75,
+0x03AF8E20, 0xE8C21B7A, 0x0F1DEF04, 0xF484764B, 0x627F28A0, 0x8BD24210, 0x9BF0424F, 0xA44A8AD7,
+0x2D30BB55, 0x42BAE1E3, 0xD917E732, 0x40B6A8E2, 0xE22CB6A2, 0x00FFE966, 0x01010000, 0x31440D9F,
+0xB681FCFF, 0x440A14DA, 0xE26DB5DD, 0x9E5BF14B, 0x85F761BC, 0x8F4FBE02, 0x620745E9, 0x24AB8964,
+0xBF488BEB, 0x7B30C76F, 0x925B8066, 0x0696DE95, 0x80FB82E5, 0x41D4237A, 0xB3A9E8E9, 0xCDF90EC5,
+0xE6700705, 0xC90AB5AD, 0xF07355FB, 0x45A04FF8, 0x110E6BFB, 0xE50AB912, 0x69CFC697, 0x3315573D,
+0x7F80C329, 0x0CC74D5E, 0xAE6170EB, 0xEA891348, 0x5256A42F, 0xE7154550, 0x51287AFE, 0x80230A49,
+0xCE9E2DBF, 0xB0D884D2, 0xDB3E6AA7, 0xFCEA99B7, 0xC3BAC5C0, 0xD29F560B, 0xEA470652, 0xDC263A05,
+0xF4E9E0C9, 0x2C2F9114, 0xE3DE2A2E, 0x4D90CD06, 0x7C4A3959, 0x10243E2C, 0x5215FDC9, 0x0B8096A3,
+0x89B1F405, 0x06AA81F1, 0x7DFF94E2, 0x117BB887, 0xB8FFC11C, 0x6A05F0D9, 0x5592213F, 0xAF28436E,
+0x3817632D, 0xFEA6CCC6, 0xE9B74BE7, 0x5BE2FAE3, 0xA9602E8C, 0x818C1679, 0xB82C57A8, 0x1355A79A,
+0xBA722F87, 0x49FC1A7F, 0x74FF6E1B, 0x85900AEE, 0x3AB12F2B, 0xA064E402, 0xB89279A5, 0x84E6F7A8,
+0xBD12C479, 0x7FC83907, 0x85D20AFB, 0xFD062268, 0x1B3D3BB9, 0x93B09939, 0xAB981EDB, 0x5EFA63D2,
+0x9CBFCCDB, 0x7836234D, 0x84D260A7, 0x05308F14, 0x641E719E, 0xF5EBC21E, 0x1CF1BA0F, 0xB4F72546,
+0xEF0A0B18, 0xFF336641, 0xB591C06F, 0xFEFC7799, 0x361E27D7, 0xE1C6321E, 0x1E6F9778, 0x36E5BF75,
+0x8CDD7D7D, 0xEE124D28, 0x9A13B524, 0xE137024C, 0x863D9142, 0x34A17E09, 0x3693EE63, 0x1F680187,
+0xF071EB6B, 0xCE18AA2A, 0xC69EC2DD, 0x232CF177, 0xEE242C08, 0xFFF0441D, 0x55F6415A, 0xFFCBD64A,
+0xB86CE293, 0x5560B135, 0x8265030A, 0x38AB3E50, 0x41DA0023, 0xCAF0957B, 0x9A91365A, 0x7D7CC171,
+0x1E91945F, 0xDC9AD376, 0x3161CB2F, 0x6A89CAE0, 0xEF0050D2, 0x011DA4CE, 0x54F7DB99, 0x72B201D0,
+0xF68BEB6E, 0x0B28FA9B, 0x6BD4E160, 0xFAE98317, 0x15DBE4AF, 0xFDF040D8, 0xC000BA20, 0xD3041EC5,
+0x1A4E3D9E, 0xDFD3767E, 0xB160789D, 0x40BFE072, 0x65B5D2AC, 0x4CAE834D, 0xCA062840, 0xC6C39F5C,
+0x37FCA139, 0xEF7C853E, 0x2DAFDE15, 0x464EBA85, 0x58EF74AD, 0xFDEFDE58, 0xEA18F059, 0xA133B389,
+0xB85553FF, 0x4032918B, 0x7F407FA4, 0xC21B5975, 0xBEF16640, 0x266F67FC, 0xE54C1E5B, 0x52152186,
+0xCED19D81, 0x065D598E, 0x8A305977, 0xC6629DE5, 0x08418E51, 0xB04AFED3, 0xA8630FB9, 0x480296B9,
+0xDDFF7D27, 0xF0C470DC, 0xFB949D37, 0x20935833, 0x325C889A, 0xCB66EADF, 0xED2CF8B4, 0xEBCC9861,
+0x00F9B71F, 0x41010000, 0x4F19109B, 0x39EE7F08, 0x449E169C, 0x7E8A4362, 0x7C3DF861, 0x5680E9D6,
+0xF7F5D3C0, 0xBA490E12, 0x2CCCFBA5, 0xD2038705, 0xD6C34D04, 0x1DDC7C54, 0x7F2C0FF6, 0x24282BF4,
+0x57785A57, 0x323C0473, 0x54C90B9B, 0xA8A9F055, 0x60599865, 0x1C881641, 0x5076D005, 0xCC569682,
+0x03FBD37F, 0x15CC67D3, 0xDFEAED25, 0x2154A336, 0x0FBED36C, 0xD45C9751, 0x33283610, 0x9FF438E3,
+0x36CECEE4, 0xCD57F292, 0x0055C26A, 0xF90BCD5B, 0xAAB48104, 0xDDB2D700, 0x8A4655C7, 0x2D3C4610,
+0xC4DA2458, 0xB2F3AEFF, 0x910E937F, 0x313002DC, 0xF4CEFD90, 0x4F4C9F0C, 0x15FB7D78, 0x8CA6B84E,
+0x186FECB8, 0xD26CB07B, 0xAD1771E6, 0x6E44CE22, 0x0261EDF5, 0x5A97C34D, 0x52F02F37, 0xA9979F6C,
+0xF1309CDE, 0xE5E6CB23, 0xCF11F5DD, 0xE442FD63, 0x2E4EA8DF, 0x1F17BAD5, 0x2A5DFD29, 0xFC18BA82,
+0xEDEF92BB, 0x1BF5A440, 0x18F1AD93, 0x3158221C, 0x7746A3E1, 0xCE7A6CD6, 0xE11BC6CC, 0xC72765F8,
+0x73703E07, 0x6C341F0A, 0x11C58D86, 0x3B286269, 0x72F8A61B, 0x3C9B6404, 0xC8A12FD4, 0x6353FDA3,
+0x1F520F85, 0x503B486A, 0x32F046E8, 0xAB58288F, 0x5CB7FCBF, 0x3E2795CD, 0xC86B3EAF, 0x272A3F3F,
+0xD352FF7D, 0xA7E296F0, 0xE4574948, 0x87B39EBD, 0x6FDA20E4, 0x42043707, 0x8A1A882F, 0xF0981343,
+0x61CBCD01, 0xD91F4C43, 0x70AEC383, 0x2B8E0012, 0x297BF5E4, 0xB2DBF00A, 0x02ECEB05, 0x225CAE0E,
+0x23993960, 0x0B7E3D26, 0xA8B9C0C0, 0x478587EF, 0x0BB501AE, 0x4A048CC0, 0xC6687080, 0x15905218,
+0x3267AD22, 0xE5A5C916, 0xB9257C45, 0x705040CA, 0xD9C786A3, 0x5D320D50, 0x2B65822E, 0x60D721FA,
+0x1FEFA08F, 0x4B53FDAA, 0x0FA3DB59, 0x0CC3DC6D, 0x4F52F16D, 0xCFDB9895, 0xF558B38E, 0x24E0A556,
+0x89014BA9, 0x33D096BD, 0x72E43350, 0x02B345A7, 0x6BFE5D52, 0xF9563A6C, 0x7545E047, 0x7C0C12C6,
+0x9A7FFB93, 0x8300452B, 0x18B4C698, 0xD5C13985, 0xA055D7DF, 0x6629B080, 0x9041C3B9, 0xE85EB72D,
+0xC0A7B4F9, 0x745808A2, 0xFE42BE7F, 0xF8E39462, 0x622A65DD, 0x5B9562CF, 0x75B7668B, 0x873C1B87,
+0x18A00DD6, 0x2108E585, 0xF2201D9E, 0xC9DB027A, 0x6D8501FC, 0x092770A8, 0xFA5B8D62, 0xD20C4E28,
+0x08E9ECA9, 0x08470939, 0x84C66EF6, 0x8D424B6C, 0xFA6C11D9, 0x0E3E8C43, 0x8793AF73, 0xE2C50984,
+0xE53F72D7, 0x2932CE99, 0x8AF1078C, 0xD6F67D72, 0xF997F45F, 0x177EC520, 0x302ACF68, 0x9A903FC6,
+0x6E14B018, 0x981D9933, 0x91ABAC28, 0xC63659D1, 0xB437CA08, 0x77676D06, 0xF4ECC3A3, 0x2B9D60CD,
+0x01F076D7, 0x5D7E6812, 0xB71DA278, 0xB82842B3, 0xD0FDE2F7, 0xBC33FD65, 0xB8E2E216, 0x32798B21,
+0x99F2BAE0, 0x0676C33F, 0xA3142398, 0x60A7C311, 0x2915F845, 0xD25DB9FA, 0xAA6BFB5F, 0x86E876CD,
+0x8AD0D536, 0x64178B1C, 0x8712C716, 0x2ED581F3, 0xC18320DE, 0xB2E19E6C, 0xA4E028FD, 0x6391EF55,
+0x078C642F, 0xDB2A17BD, 0x1555AFE9, 0x9CB5BB90, 0xFC0CA827, 0xBB277C4A, 0x82E845E8, 0x20ABD07F,
+0xD330CE5E, 0x23D1F3F8, 0x09F36FB1, 0x5F19BE46, 0x25B79219, 0x73B60A49, 0xAA4D4A9F, 0x6ED48799,
+0x52A51CD3, 0xE8D98A01, 0x156DE862, 0x99E3020C, 0x41C15258, 0x18DC9ECC, 0x33AE6D85, 0xEAF1F6F2,
+0x0B5F4706, 0xFDCCD9CA, 0x61DD0BC8, 0x077DAEE0, 0xC72BE593, 0x3D38BF72, 0xD254E85C, 0xEF4536D4,
+0xA0F40565, 0x9E4F5EC9, 0x18FC4EE9, 0x35019B69, 0x834E1760, 0x2F163A1E, 0x5DEF2725, 0x0C99EEAB,
+0x9F4AE15A, 0x8781343A, 0x36BEEBF6, 0xFE9B43EF, 0x864EB396, 0xCFECE876, 0x7AB6564D, 0x01E94AD4,
+0xBFDEFDB1, 0x4995C44D, 0x46C2CCAF, 0x5D32FC6A, 0xC7620C48, 0x1C386C17, 0x2B823DD1, 0xA8723D5A,
+0x358368AB, 0xE0D52A28, 0x6275B54B, 0x6DF4919A, 0x6DF32DDC, 0xD1EDA6BE, 0xEA27ACCC, 0x1331754C,
+0x50E3C3DE, 0xDE8B4792, 0x1F371611, 0xF0F93C32, 0xB8CAEDD2, 0xAF2C3E05, 0x90E97B30, 0xCA67CA7D,
+0x81C68262, 0xE3A259BC, 0xC5606BD0, 0x324F50F0, 0x6BFAE4DC, 0x6ED138F0, 0x3FB464DF, 0x3F668114,
+0x33AD9E38, 0xD4485236, 0xED70BDDB, 0xD6C66C17, 0xD1800E56, 0x75CB03CA, 0x3D0B1E2F, 0x5B5D2689,
+0x4F3C5C80, 0x26A37F2C, 0x45EFD4BD, 0x648CAAE2, 0x6D6F0AAC, 0xD1D0B062, 0x81581557, 0xFFFF0906,
+0x9F6DECF2, 0xED29D3A8, 0xB09A5FFA, 0x30CA3421, 0x96C24AB2, 0xBEA5ED40, 0xDD748414, 0x5DEC30C4,
+0x82B85542, 0x07D6D4B4, 0x88085320, 0xCD2EA029, 0xE9340404, 0xD8FC0DBA, 0xCB1BED6E, 0x50F9E900,
+0x76D4FEF4, 0x054D14EB, 0x7492672F, 0xB3C00B3F, 0xCB016F84, 0x89FE2D7C, 0xCCDD883E, 0x3FF09DF9,
+0xEC2DAD6A, 0x55CF9333, 0xA42CB00B, 0x831E0D2F, 0x9CB2E7D2, 0x4D84CC81, 0x7E607B38, 0x4E699EFF,
+0xF55EA919, 0x2992159B, 0x6AEDD439, 0xFFD953F4, 0x03EA4559, 0xF5699816, 0x70395136, 0x0124AF47,
+0x2691286B, 0x8BFB9CB6, 0x601ABFB1, 0xBE79CF76, 0x14EB1CE6, 0x47982D7D, 0xEC59DE4F, 0x45F83A4D,
+0x6DF97A8F, 0x088294A8, 0xFC15C761, 0x949854A4, 0x8AF8B3B9, 0x5F2682E7, 0xB69853BA, 0x6C11B6E6,
+0x0101CBA3, 0x44402A25, 0x54D8D1B6, 0x4F0B09DF, 0x75BC6381, 0x0DE8CB4D, 0xD49C6EA9, 0xF96EDAF5,
+0x6ABB95B9, 0x12652942, 0x5FF57B9C, 0xF4BBD535, 0xA6AEA562, 0xF542EA18, 0xD0CAB141, 0x8CF0475F,
+0xB8E7E3F5, 0x9E4546C8, 0x00E584DF, 0x58744BB2, 0x57C7D489, 0xBEB02E8D, 0x9D8AE0F7, 0xF75ACB0B,
+0xDF0B50F2, 0x3C4F80DE, 0x16CB08B1, 0x909CE048, 0x750FD704, 0x1AF0DC5D, 0xDFA0AB9D, 0xDD597E7D,
+0xED08FBE8, 0xBFE2589D, 0x988D1813, 0xF550B4E1, 0x8225842C, 0xDA4658AD, 0xB2848005, 0xCD9C00DE,
+0x102C3DD5, 0x1A32F25F, 0xB0F11C13, 0x52980469, 0x12871569, 0x5BB9A338, 0xA502DC9E, 0x8C33F4AE,
+0xB11E08F6, 0x4AC60BB1, 0x0F34DA94, 0x063FC0C7, 0x40904E0C, 0x3AD5C7D5, 0x0F241D1B, 0x2B8D84AD,
+0x2DCF8728, 0xF6E645A0, 0xD1459C25, 0xE5BBD85E, 0xD7BA8072, 0x0D77C204, 0x9DB37885, 0x3A10545B,
+0x3FE04878, 0x60407365, 0x13EA6A21, 0xCFE97D8A, 0xD71F88DF, 0x905575BE, 0xA1E16852, 0x647A3748,
+0xFE785D4E, 0xD102A2E7, 0x9B07C9EB, 0x034C1E05, 0x454C8DD4, 0xA23E2424, 0x16FD4816, 0xF30D40A1,
+0xCF019AC9, 0x31E0A4D4, 0x5FDB4FC8, 0xBDA44388, 0xBFEFE87F, 0x3FA8918B, 0xF7ECE6FA, 0x42584F84,
+0xCE0A0ED4, 0xC5D5DC4C, 0xBB7D5836, 0xF49C70B7, 0xF2665C59, 0x7C43ACEE, 0xA5D4089A, 0x133C9C27,
+0x4A720D4A, 0x142A24A8, 0xDCEF6E23, 0x05F833FC, 0xB364B404, 0x4707822D, 0x2EBAF58D, 0xB7B2CBC2,
+0x849A94E3, 0xDD6757E3, 0x6638D005, 0x4908D581, 0x83015D68, 0x32E7C958, 0x79600FC7, 0xBD73A21C,
+0xF3A881A2, 0xFE4C7B79, 0xC74C68AC, 0xD87E44A4, 0x8E509FED, 0xD3B63D46, 0x4E423D78, 0xF3D04A17,
+0x1A351534, 0xFD3717CB, 0xAC0887C2, 0xF5141940, 0x38691E50, 0x6D7F233D, 0x3DB13609, 0x515B1AF4,
+0xC6A403FA, 0xE3435C03, 0x2B00F11E, 0xFBFB7C65, 0xD5079E2B, 0x65DE269C, 0x678A65E3, 0x4DFAA8FE,
+0x10A52B5A, 0xB67CB975, 0xBFCEFCB3, 0x784A56E8, 0x9E43027C, 0x32C8132B, 0x4E5BC9A9, 0x505DA5AD,
+0x938E493A, 0xA703B0D0, 0x3F3481D5, 0x47757571, 0x779D0E4B, 0xABFEC617, 0xF29F96BC, 0x75E3D4A0,
+0xB5D07689, 0x13A39447, 0x67C867B7, 0xE730D043, 0x994F1C56, 0x7127FA80, 0xE54F1F94, 0xBB117F3D,
+0x0E5DABAA, 0x45AADC3C, 0x63B06EF3, 0x3E5D9364, 0x39F66ED4, 0xDACBCB84, 0x366D09CE, 0xA59AE4A4,
+0xEB7539C8, 0x550EB132, 0x425A72CB, 0x6629254B, 0x03D39F7D, 0x5788DC36, 0x9898D792, 0x57225359,
+0x0A61EDF9, 0x42915B78, 0xE01B4ABB, 0x29E6D2C0, 0xF7523839, 0x2456FC83, 0x0AD454FF, 0xAAA4D8F0,
+0x74B41742, 0xA2F34B86, 0x7DA2BD54, 0xDC2B49D8, 0xE6FE2CDB, 0x248B423C, 0x9124A5A0, 0x465B5466,
+0xAF0EFEAC, 0x38C35595, 0xB8874DA0, 0x3055AB88, 0x8DABAD27, 0xDD151FCB, 0x62256B08, 0xEC78869C,
+0x6E58C486, 0x56D61D7D, 0x633D2726, 0xC6098042, 0xD59D0D82, 0xB0EA4101, 0xD1768CF6, 0x5706755F,
+0xBB324619, 0x202C5EB5, 0xD14B5074, 0xC37D5A2F, 0xADA6A8CA, 0xE3D53445, 0x03FA3048, 0x9F67FE54,
+0xE31850D8, 0x2B12E2EA, 0x8F63E20E, 0xA7DE2C8A, 0xCF5FA23B, 0xA4774467, 0xF152D5BD, 0xD0096EAE,
+0x1B6650AF, 0x67D49713, 0x6DB1D9C8, 0x9AA8122C, 0xB377B201, 0x0F8E3501, 0xE88E7D08, 0x9F1C24A1,
+0x7157BA9C, 0x076DDC2B, 0x01AC45FD, 0x171A82A1, 0xE0AFE9C2, 0x8A2EA4B8, 0x79D598DD, 0x938A0D80,
+0x12656F61, 0xD25E05C6, 0x32BB915F, 0x3094AED4, 0xF3E19EFC, 0x2215A1FB, 0xA829F245, 0x25293114,
+0xB23435D1, 0xD3FDBF52, 0x41E6142E, 0x3F5194BA, 0x85629270, 0x6E399033, 0xE5F80039, 0xC66926D4,
+0xE68AA0CB, 0x108F8925, 0x68C299C4, 0xF61BE8C3, 0x139C26BD, 0xC4A52B47, 0x58872850, 0xF7B6B724,
+0x90FC2EBF, 0xFBC2BF38, 0xB4941E64, 0xE9E7FA50, 0xFD3D8B66, 0x873375AE, 0xFB7C54F3, 0xA4A6E66A,
+0xE8B389A0, 0x7D61C9F7, 0xABDCDDFA, 0x22A201CF, 0xC522054E, 0xC3984DE7, 0xC76981AD, 0x5D0D8A3C,
+0x77058D64, 0xC891FC94, 0x280C2B74, 0x74EF931C, 0xBD962B32, 0x809FF65D, 0x0A9EB423, 0xEF56038D,
+0x48758BCE, 0x8440FE6F, 0x92DAEDB9, 0xCAD566AB, 0xC7566386, 0x334EE92E, 0xC10707F9, 0x04F4DDE2,
+0xC33E753A, 0x2033DB0F, 0x8212C4BC, 0x9D296BE9, 0xAA91CE03, 0xE1D6D616, 0x5AFEC30C, 0x72B7FC9F,
+0xBFBE8FFE, 0xD12C7B55, 0x4E3BAFA8, 0xA0E28E36, 0x3641D513, 0x1254BFE2, 0xE9FF03F1, 0x1BC5119F,
+0x9553473B, 0xDFACDB76, 0x6BFCAF89, 0xA6B62C93, 0x75A0A0D3, 0x870C36B8, 0xF494B5CE, 0x27432409,
+0x0B032346, 0xC7064799, 0x3C461AB2, 0x483F9C02, 0xD33C1DBB, 0xE32B9752, 0xCB105001, 0xD75EC99C,
+0x7520CC91, 0xB55032D0, 0xF5B22E43, 0x6832C0F8, 0xBFF9801D, 0xBC6D2F79, 0xF4F9020B, 0xC0D19B4B,
+0x12E4CD28, 0x5126F8D6, 0x0D31EC93, 0xF4375897, 0x85CFBD3B, 0xFB1575C0, 0xC5926FC6, 0xA4072D55,
+0x23CCA416, 0xFC2DC676, 0x1B0FAC20, 0xB87F54F4, 0x4A2E0567, 0xDAD7A72F, 0xBB54E1F0, 0x3FDDDAEF,
+0x4B1DB5D1, 0x6B6E9205, 0x070FB87D, 0xDDFD6E3E, 0x3BF90C5F, 0xB1B2829B, 0x4B004000, 0x8A2485D8,
+0x7616210C, 0x2471174F, 0x03EAD93A, 0xD4CDC7C7, 0xD44E95CF, 0x55217472, 0x8D73BE3D, 0x11F90696,
+0xAA52CE04, 0xAF9E5F96, 0xEF33298E, 0x9CAB7F1E, 0x8633F2FB, 0xC43AF61B, 0xF8FA1FEA, 0x122D58A1,
+0x7BE1BB14, 0x4C372EFF, 0x92C31D82, 0x74A75FC1, 0x5931E324, 0x3270DDE1, 0xE7EFF55B, 0x7BC270EE,
+0x6F461561, 0x5C7F701F, 0x19D62D69, 0xE628A930, 0xC4A9BFA1, 0x2EF71E5B, 0xC5EAD9DD, 0x91947A80,
+0x53FCD549, 0x8E5771EE, 0xFD18EB7C, 0xC6358D87, 0xF83F6177, 0xC484231C, 0x547B2934, 0xB5236BDF,
+0x1225FF48, 0x32E97752, 0x03A0E713, 0x09C9620E, 0x2F47C250, 0x643E7D69, 0xDAB3A4CF, 0x7690F895,
+0x539EA9E0, 0x44CE005B, 0x60956C9D, 0x36CCCA16, 0x7BC7C5B3, 0x9035025D, 0xBBBEB9D1, 0x904821F6,
+0x75675261, 0xEED56FAE, 0x89B0C80F, 0x60DE9C79, 0x15DBB342, 0xE183A72E, 0x0A91917B, 0x85113415,
+0x18836A63, 0xD43A7932, 0x3CDFCE0A, 0x9533209E, 0x32BAC9DD, 0xC62251F3, 0xC6011DB2, 0x4EC6E293,
+0x635617DB, 0x507EA16D, 0x752019E6, 0x66DCE853, 0x53F8BC03, 0x58741A5B, 0x6E333B15, 0x79601BD5,
+0x433FC6A3, 0x500DAAAA, 0x70DBDF90, 0xFD9937C6, 0x32E63B95, 0x1CA58B53, 0x2E570334, 0xCFE446EA,
+0xFA15AAA9, 0x3DC86721, 0xAD11F7CC, 0x6ACF3955, 0x634CA076, 0xEB532F5F, 0x4F58C951, 0x59653741,
+0xBBCBF650, 0xB37846A0, 0xD7137531, 0xA918C211, 0x2101EAF5, 0xE5D0A842, 0x8F95F5F2, 0x8A4D859F,
+0x1A7837BF, 0xBE12F4ED, 0x9E0FB4B4, 0x68296195, 0x1C3385FE, 0x3E390F59, 0xD93F454B, 0xCC5410C8,
+0x91E4D33D, 0xEBD6169C, 0xB361A3B1, 0x8134AA93, 0x6B9F5752, 0xF2B25C15, 0x0AEADB4E, 0xCCC3995E,
+0x89149F42, 0xD9CA2405, 0xCCE6E819, 0x05046F80, 0x3DF83B69, 0x6045411B, 0x3664D3A6, 0x9B632CE9,
+0x2E7C0E5F, 0xC4ABE60F, 0xDB6D51C1, 0xF2DCAF17, 0x8CC7D329, 0xE8C32923, 0x1083EDB8, 0x6BE3BA7D,
+0x17F36A85, 0xAFA84A0A, 0xF537837C, 0xEEC3BE0A, 0x9E5B5E7B, 0x06B27040, 0x545E0F56, 0x03FB8224,
+0x60D7CF4F, 0x00442850, 0x7CFD794C, 0x13979B4A, 0x7C4C1404, 0x698B83B3, 0xB4D0F45F, 0xA810F2A3,
+0x8FBB1660, 0xFCF66586, 0xEE91DE33, 0x13BAC299, 0xEDFE21B4, 0xA9CF38B0, 0xB6902C51, 0x8CF78E44,
+0xA492A1E8, 0x92DE27C0, 0xDBE17EAB, 0x74CDB463, 0x88ED3E68, 0x46547407, 0xFACB35F0, 0x028F8723,
+0x5D615290, 0xF68135BA, 0xDAF4F7B7, 0x65F03734, 0x634D04BC, 0x0C0A33CA, 0x0B3F92D3, 0xCDF56FB2,
+0xF927937C, 0xA92F2CF0, 0x54656613, 0x262378BF, 0x838E5A6D, 0xEEFD28AA, 0xC573D96D, 0xE06CD23E,
+0x86037D13, 0x30B47F1E, 0x769B3D9B, 0x0B8CFB0A, 0xCDB0C077, 0x60514D28, 0x95538B1F, 0x173AC735,
+0x4AC007E5, 0xA62EA506, 0x3BCCF760, 0x5308A2E9, 0xF8AFA5B6, 0x65F0FABF, 0x6269DF51, 0x6BC518F8,
+0x339FBB0C, 0x1250636E, 0x69087C73, 0x5A44D716, 0x3B4F38D4, 0xFF40F151, 0xCAF6B7EA, 0xB9EC5CDE,
+0x7AC9E3C3, 0x5B365D2E, 0xCDE2663E, 0x39E2DDF2, 0xF4437724, 0xA70D383F, 0xCFD7FC42, 0x0BC81B23,
+0x7E0D6825, 0x0364156F, 0x3E36F2B7, 0xCC1AA5FF, 0x76E8BAEB, 0xB40A4B99, 0x4BAD1647, 0x86FA4179,
+0xB59CD2CE, 0x01C887BF, 0xCC333829, 0x6E5FB137, 0xA6748629, 0x82C5651F, 0x4F005304, 0xF3F72146,
+0xC0A0C4D5, 0xB93161B1, 0xEE340E1D, 0x7F94B6D0, 0xFA727966, 0x2A8F972C, 0x88FBF573, 0x9C49839C,
+0x2D8F9531, 0xB64A5DE2, 0x0390612F, 0xF1EF727B, 0x673B4211, 0xF8CE9665, 0xC18EC440, 0x446A6731,
+0xA5326E2F, 0x93FE3A8D, 0x5F7FF731, 0x25A88263, 0x2F0F5081, 0xE29BA8E7, 0xEE71EE1B, 0xD6D2BF4A,
+0xB3FBD744, 0x2E2DAB99, 0x13695916, 0x9C7080CE, 0x56927A8B, 0xE0871FE8, 0x56C6437D, 0x3DEBA4B7,
+0xDD4E073A, 0xF9D78674, 0x9ADD5082, 0xC22ADF39, 0xDB124721, 0x50DB22BD, 0x61A62D58, 0x33540864,
+0x36F90A75, 0xE178CDFE, 0xFACA04B6, 0xC6F10666, 0xDB472392, 0xD8C4706C, 0xF987C09D, 0x4590076C,
+0xDCD70327, 0x59A28DB6, 0x40A5E9EC, 0x0490E791, 0xE7231C49, 0x0F3BA3A3, 0x67D9D2DC, 0x3CDF19B0,
+0x5E9E00C4, 0x16833646, 0x1B981A75, 0xBCC33A41, 0x7DCD8905, 0x76182A63, 0xC097B107, 0xB75CC672,
+0x7CCA28A7, 0xB2760392, 0x690B5A68, 0x1500E3B8, 0x2F847523, 0xF5430EC7, 0x52BF8BC8, 0x05A62D57,
+0xEA651A99, 0x141B2FE8, 0x99A9077A, 0xE88B25B3, 0xADEC3396, 0xA7CB9435, 0xD8C0F640, 0x55CC056D,
+0xF3641BF9, 0x1F11594E, 0xA2F0E62F, 0xFA935C95, 0x36BAC27B, 0xC52CFFAF, 0xFAAABC51, 0xD6CA474E,
+0x8A447E48, 0x8EF81A32, 0x29DE8693, 0xFA0907B2, 0xB02B1613, 0x6448A0D3, 0xBD31CA61, 0xB1EFA254,
+0xF25FB841, 0xCC271572, 0xFB6521D6, 0xF5AC2086, 0x33D3DD82, 0x1EC7F44B, 0xB4B68B52, 0x07B765E7,
+0xA3D559A8, 0xBDE44B98, 0x20DCA3BC, 0xBF7BB2A6, 0x77AF621D, 0x03FA674C, 0x641B50C2, 0x05106072,
+0xF3A19BDC, 0xC5433DD2, 0x3DC98E2D, 0xF5AF31F7, 0xB6775B76, 0xE67424F2, 0x47DF3E68, 0x6989D5A6,
+0x4E87A9AB, 0x49C5356F, 0xD0F7287A, 0x54C93C10, 0xF8A252FA, 0x2DD11B42, 0xC5CD0CB3, 0x61C74F5D,
+0xE489AC99, 0xF2E4E86A, 0xF1DAEC54, 0x7EE3530A, 0xC61861DE, 0xE60DF638, 0x010772AF, 0x7A8947C5,
+0x5C661DAE, 0xEE5F7C78, 0xAEEF6CFC, 0x25B474BC, 0x3F462F14, 0xE26A24FC, 0x94DDBEBF, 0xD7229F63,
+0x9778CB31, 0x4C4B6FFB, 0x32124C3D, 0xCB5BF62C, 0xF5E12EF2, 0xC94EF3FD, 0x19AC90E8, 0x15F0D526,
+0x8D485D54, 0x051F05FD, 0x007BD53B, 0x6B29E99F, 0x4DECD35B, 0x53C939F6, 0xA0088592, 0x4DC4C986,
+0x83E82220, 0x6E471B16, 0xA4AB4060, 0xCEBDD75E, 0xE90E9E1E, 0x1FDA5C48, 0xCAC08251, 0xB6E3E329,
+0x6C82E020, 0xB0374ACC, 0x216719BF, 0xE57D8A12, 0x54874F92, 0x03571696, 0x13E0B148, 0x4DEE8CEC,
+0x271472AB, 0xBD2CB3C3, 0xD71781C1, 0xE6612DA8, 0x3530ACF5, 0x05C78DBB, 0xD83DE93F, 0x60C56B18,
+0x2EEAD608, 0x7A668466, 0x3228FC1F, 0x3310022F, 0x7191BC67, 0x7BB4F66A, 0xCF1BE503, 0x225297E9,
+0x0DA4B26B, 0xE15FAFC8, 0xCB2BB645, 0x43456805, 0xE4ACC436, 0x95648016, 0x7181F510, 0xEBC53F28,
+0x52E5E177, 0xB66B9EF7, 0x1EDA87D8, 0xB3998DEE, 0xBD6E1D95, 0x7D93A57B, 0x837039E7, 0xEF8E9615,
+0xF4038E38, 0x251D01ED, 0xC975B836, 0x8309EE88, 0xBFD2072E, 0x8AD17200, 0x6F74C8F7, 0xE970ACE9,
+0xF6ECEA69, 0xED15023C, 0x476BD95A, 0x94A17533, 0x30CD0AD8, 0x7B3D5FAD, 0x705A70F1, 0xA53D3802,
+0xD6621458, 0xE5F84873, 0x9B4B0D17, 0xC2C0C793, 0x2DE5397E, 0x0FBBF5BA, 0xCA3EEB15, 0x2683BF92,
+0x88AF090F, 0xB7E6B8EE, 0x33C123FE, 0x60CF7CF9, 0x73E59A00, 0xEBFA15BF, 0x4BAFAA9E, 0xDD4A5B31,
+0x766070D4, 0x70A4C5DA, 0x2369D538, 0xC7DFE85E, 0x897FCD5E, 0x178FB1C9, 0x49892E8A, 0xC38DE1B9,
+0x4A41D153, 0x66838511, 0x63C22E00, 0xC1B4E6D2, 0x4383784B, 0x4E9DC55C, 0x90CF19BC, 0x1DA046F2,
+0x219C500C, 0xB024F736, 0xB0B50843, 0x986B535C, 0x2B99940F, 0xFEC0E549, 0x5D7D5442, 0x730B9A92,
+0x60BAF58D, 0x54FEE5AF, 0xC09BB706, 0x73C5A75F, 0x66AE2809, 0x6BFA8FD5, 0x39AB78A3, 0x1F531EC2,
+0x14C1F9F3, 0xD5E7E67F, 0xEF6E5FB9, 0x70ED53DC, 0x39820D0A, 0x455F9216, 0x372AC1F2, 0x58583FC7,
+0x18F343F5, 0x431C4140, 0xD64ADBAE, 0x2DC2991F, 0x1FF39BCA, 0xB623DCFE, 0x7C5D9B13, 0x61D8EDAB,
+0xE8675395, 0xD0D25541, 0xB25D5BC1, 0xCE5D5B39, 0xF3939111, 0x0CACB5B6, 0xCF465C5F, 0x96B68BC6,
+0x5F956BC7, 0x357511AE, 0x6394AED0, 0x34B1147D, 0xA26853E9, 0xD7C25344, 0xFE8A7093, 0xFED88EFF,
+0xF316C06E, 0x25745616, 0x7A51DDD1, 0xEA96FCB4, 0xAC392882, 0x580E9D60, 0x326CBBC6, 0xA8B23BF3,
+0xAFD896E5, 0x079A09EC, 0x652A726E, 0x38C6631B, 0xDD7B7690, 0x4544D326, 0xD4DCB255, 0x4D8407D7,
+0x77AC4541, 0x4DC8C333, 0xE876BE2C, 0xCB00D953, 0x94A50AC8, 0xF5137A91, 0xCA2C6304, 0xD944032C,
+0x7A50D7C7, 0x1E4503E9, 0x05746715, 0x74D11831, 0xD9D2C620, 0xD77B7CFF, 0xED890797, 0xFE21A1F6,
+0xA616CE3C, 0x5F978CF9, 0x1D10EF18, 0xEDCD392B, 0x277FC6FA, 0x37E4A314, 0x728C981F, 0xF0F7D965,
+0x10F10696, 0x024038E2, 0x3C32F22F, 0x55E231CB, 0xCAEEAD3A, 0x0DDE15CA, 0x5078B28D, 0x6876ADDF,
+0x5AEA3152, 0x8DB2EC15, 0xB9C1BD10, 0x1DAA0B9A, 0x91FA265E, 0x19B1E66F, 0xB12D1049, 0xE1C9A75B,
+0x0C50AACF, 0x6B101158, 0xA912E73E, 0xE4BBC63D, 0x3FF2035E, 0xA7931A2F, 0x3DFA792A, 0x868716B5,
+0x1AD16137, 0xAA82A3B3, 0xCA194388, 0x67B7D0F8, 0xCDD9D52B, 0x52A44941, 0xFC683960, 0x1B3909ED,
+0xFD87DF97, 0xE15CDC8C, 0x93395198, 0xEB1E7185, 0x0176D03D, 0x39ACD8DD, 0x7E04D122, 0x9D6DBE67,
+0x0E9639F0, 0xAF500AFD, 0x13565DAA, 0xBDC6B8C4, 0x86B7A814, 0x661B8342, 0x47E7026E, 0xE1DF2DB3,
+0xA89996BA, 0xB673EA3A, 0xDABAA70A, 0x41D42304, 0x441E4938, 0x1983BEDF, 0x02A15EBB, 0x0F53748E,
+0xBB452768, 0x49706CD3, 0x394BA451, 0x685CF1A1, 0x0EB0FE0C, 0xB2D16834, 0x2742562F, 0xC96F19F5,
+0xEAA54DC7, 0x453BD328, 0x2B357552, 0x79A25926, 0x0911AA27, 0x479CCD42, 0xC3E896C4, 0x746FE29F,
+0x0EAE1EE2, 0xF86193D4, 0x3E219FF3, 0x96C32466, 0x6CB66B30, 0xE2AF34AE, 0x11A778AD, 0x91696F9B,
+0x4B80FD2C, 0xE0D93AD2, 0x4FD86E1F, 0x72A9D746, 0x58C3D708, 0xAD10494E, 0xBBF2BEE9, 0xEDADC360,
+0x1CF92891, 0xAAA36832, 0xEC5E5A07, 0xA4FE56BE, 0xC876A8CF, 0x2A872B98, 0x9E857BD1, 0x753B15F6,
+0xFCBA5679, 0x6C403012, 0x1F05B4ED, 0xB5BE2EBA, 0xC00B5F66, 0xC3AEBBEA, 0xAAF64753, 0x70D03DD5,
+0xB416821D, 0xEA7EE843, 0x5177D5E0, 0x6FD269E9, 0xEB1441AB, 0xE15DF73C, 0x8C953A2F, 0xCA5015E8,
+0xAAF8D717, 0x1747435A, 0x2F666997, 0x8E71F404, 0xF06CF8F2, 0x329C82E3, 0x9F1305E7, 0x8A4214F8,
+0x8DBD0438, 0x20D6761D, 0xE80C36D4, 0x2AC97DC9, 0xEC848D40, 0xCA3DA0C2, 0x1DFF94B0, 0xEF2884EA,
+0xB49A4891, 0xA2D55E07, 0x77001CBF, 0x85FFE2C4, 0xE0ABAE81, 0x79A8A933, 0x53526D0E, 0x01DA1688,
+0x0155BDE1, 0x565C2D9F, 0xA5AB3D03, 0x0947F0F8, 0xB4100A19, 0x7ACC7DB4, 0xA9825F6B, 0xDAF26198,
+0xED0CA23D, 0xB9C897A4, 0x5C42954F, 0x7ED38408, 0xF41C107C, 0xA17CAF35, 0x09C10C19, 0x6FCB12E7,
+0x33FF0D33, 0x918BA138, 0x442B670D, 0xC7F10907, 0x8E6BDA6D, 0x7B0E5D9B, 0x465E106A, 0x1B4C9AEB,
+0xA171259D, 0xDBEC1D91, 0x080F5CB3, 0x03839B8A, 0xCE3F6CF3, 0xEB976E64, 0x1CF70413, 0x65583C9C,
+0x72B12E36, 0x26156330, 0x8AF04971, 0x78612647, 0x45B4776C, 0x0BCF9A0F, 0x95D9665E, 0x4BE6C67C,
+0xEB79D58C, 0x5EA4B970, 0x7C8270B9, 0xCA2079B0, 0xDE590053, 0xB0744245, 0xE673CE51, 0x1D2EC4D8,
+0xEFD4105B, 0xCD2556DF, 0xDB3CD1F9, 0x96C00E05, 0xAAA66511, 0x724E9FC0, 0x35C9A99D, 0x8697DC73,
+0x1C4E901E, 0x9E6A332E, 0x2B47E9C4, 0x55EEC5E6, 0x21338BAE, 0x5BDAA5B5, 0x9FB9DF3E, 0xF9B54E59,
+0xD4F82D52, 0xF805D10B, 0x89B1BE00, 0xA55CA82C, 0x045D9273, 0x3AA0FEDA, 0xDEA24A4C, 0xB74881A1,
+0x4CF82F50, 0xF55A8BC8, 0xA7EBA698, 0xE984D120, 0x36969D7C, 0xEE92A2B1, 0x30541450, 0x84B78F6B,
+0x6FDC7569, 0x8B8EAEB9, 0xD3D05937, 0x8B320F20, 0x159384EA, 0xF0AF858B, 0x66994549, 0xB464B4DB,
+0xC5DD3B6F, 0x4329D14D, 0x6ECA4DF0, 0xEEA77061, 0xC2CB4623, 0xB18F872A, 0x5E71C42F, 0x36036EFF,
+0xEA1F6381, 0x7FFBE923, 0x1490F764, 0xF7602C72, 0x68AF4368, 0xA0070E60, 0x9596451D, 0x8F387B0B,
+0x3D894C3A, 0x82F741F9, 0xFFAEF2A8, 0xC38FFC02, 0x1330531E, 0x695D3E12, 0x18B88986, 0x15E3A8D7,
+0x4735364E, 0x1B522D54, 0x4AA0852F, 0x4665FEF4, 0x9A1E9160, 0x62517A60, 0x899E2392, 0x31D3CE33,
+0x8112CB07, 0x867960D4, 0x6D0E48BD, 0x2E0B1ADE, 0x7E08E9D9, 0xE4AECF91, 0x41D68259, 0x85E9AB34,
+0x02B04520, 0xF5D93361, 0xB279E8C5, 0xE8A4FFD2, 0xD33DCCB0, 0x6C933EA6, 0x4073AB12, 0x5B278B32,
+0x5D3864D9, 0x4F39CEBB, 0x522AB58A, 0x14258EF6, 0xA40FD40E, 0x29DADC20, 0x31A71F9E, 0xEF72EC44,
+0xD5BEC137, 0x156BA973, 0x5A74299E, 0xE1A9225C, 0xEC67A9AE, 0xB33740C4, 0x01DE054B, 0x8211CCB6,
+0x185D7678, 0xC300D846, 0xCE5BA635, 0xAFF7D386, 0x6752D341, 0xDC7CCD7D, 0x6E41522B, 0x78288E80,
+0x3570943B, 0x4B719485, 0x4246237E, 0x3C2D8636, 0x6024936A, 0xF446ACCB, 0xB23345C6, 0x129FD69C,
+0xB8F0114F, 0x30442DC0, 0x4A2BB0DB, 0x3B3E7B1D, 0xC5917338, 0x941E8E6D, 0x36D22ACD, 0x7C1CF101,
+0x3AF82F25, 0x8A64DF4E, 0x309E9681, 0x163B76C9, 0xDB6AD8BB, 0x11FB4778, 0x78246B58, 0x1795C70D,
+0xA2287B02, 0xA84F3155, 0x6138A05D, 0xF6AD03FE, 0x95178AE3, 0x13FA5995, 0xE14E2120, 0xB0B85308,
+0x645DBB33, 0x3C007463, 0x5E769DD8, 0x6837E0EA, 0x109E2C0D, 0xC50BD486, 0xF05B74C5, 0x7004A569,
+0x2CE3AEC2, 0xE088FE50, 0x18B11D3E, 0xB67F8CD2, 0x7DA12613, 0xE7DC1C9E, 0x8988AFE1, 0xC6C5F058,
+0x0FB8E48A, 0x93C01AE2, 0x25A46EAB, 0xD6AE3ED0, 0xA2465FFC, 0x52B65FC8, 0x0B295F52, 0x5EB03FA5,
+0x675250F1, 0x4C71F6F3, 0xADD939BC, 0xF7800056, 0x7283C97F, 0x34A80479, 0x08A5D4FA, 0x4983A82A,
+0x17692756, 0xD78EFCAE, 0x249DDB92, 0x439D62B8, 0x2B3E9B12, 0xC3898F38, 0xA0C3AC25, 0x1736C1C9,
+0x2725261B, 0xE9145129, 0xAA046CA4, 0xC863BE59, 0xB7C6DFAA, 0xFD3AE6CA, 0x8DE06FDB, 0xBFA7185E,
+0x54C9C1E1, 0xB5BDA01B, 0x9097E922, 0x03930B94, 0xD7BFE4A6, 0x402B4040, 0xF021F988, 0x0827CF8D,
+0x56606376, 0x9C31B5EF, 0x692651E4, 0x7D29F97F, 0xF83A671B, 0x0908E04D, 0x29A8F979, 0x145EC8C8,
+0x15215D75, 0x1347F81F, 0x23A3F903, 0xFEED1A52, 0x9DEAC388, 0x56DE0C66, 0x1575E4DC, 0xD9D2F638,
+0xB237BB6C, 0x56179CFD, 0x97640DCD, 0x6B7BD7D4, 0x3815AF58, 0x29180D69, 0xCDB11498, 0xFF0DAA09,
+0x0AC29049, 0x527E4108, 0xBA3CBFC0, 0x493DFE49, 0x488C90FF, 0xE4254F13, 0x2D12D817, 0x65000348,
+0x139F60E7, 0xAE880DC5, 0xC67C8162, 0x2390FC1C, 0xB5D8DB0F, 0x6659A1A5, 0x6091650A, 0x30C497DD,
+0xA5D597E6, 0x11CFD513, 0x1D21B098, 0xC86A299F, 0xC2F4A34A, 0xEF81495C, 0x784F937F, 0xAD9C3A41,
+0x2FA855D1, 0x7EA69BB3, 0xCEF4DCAC, 0x4C5EB514, 0x8B710331, 0xC777C713, 0xE8E1444C, 0xB53F3794,
+0x42778E5C, 0x39BABE0D, 0xBC3E63D3, 0x1C8403A6, 0x343ADC07, 0x4FA7DA96, 0x3BE94DF8, 0x6B60BC0B,
+0x3B724797, 0xED7EEB28, 0xE0B5C710, 0x63617EFC, 0x5C357ED0, 0xDA6EA27E, 0xB60F5335, 0xF55D0D4C,
+0x6B6A8D86, 0x5DE5942E, 0xCA272578, 0xA68275B1, 0x84E278E6, 0x03F5BD78, 0xCEBBC0DC, 0x0550A83D,
+0xB965A422, 0x33EFFC29, 0xCAE50AD6, 0x4257907D, 0x98CFAA8D, 0xCFE58705, 0x4DE7EDE9, 0x3C9424E1,
+0xBD118DFD, 0x5538C735, 0x224115A8, 0xC8B0FF5A, 0x125DEFBF, 0x5BD13934, 0xBA56B568, 0x0828F95F,
+0x7B12B281, 0xC824336D, 0x155D954B, 0x265C03AE, 0xE5D329E6, 0xA85436D7, 0xA2A18FE5, 0x09A09BF5,
+0x43529B72, 0x355EA457, 0x4A834251, 0x99CEBF6E, 0xBE07CF3E, 0x9951727A, 0x9117DA9F, 0xAB342874,
+0xE4FDF10E, 0x87FCFE2A, 0x07016A9F, 0x0BF4E907, 0x82155AA0, 0xBEDF14D1, 0x0187044D, 0x2F7DB902,
+0xA2803FA7, 0x2D4E4D9F, 0x743B2F47, 0x341C7CD2, 0x09ECF6AF, 0x5EBD7F53, 0xE764E4F8, 0xBD3EBF29,
+0x9F0351CD, 0x6841C368, 0x7F406975, 0x1CFA9088, 0x44E45B90, 0x75C2836A, 0xB1E8F261, 0x71E5C054,
+0x4062CF9A, 0x1F6546A8, 0x79FC73EB, 0x5DB3B285, 0xD2438E45, 0x4B0E16EC, 0x92F82C38, 0xD6F3F49E,
+0x05008566, 0xA9B23ED8, 0x6BB968CF, 0x17BF625B, 0xC9FEA383, 0x11388EDB, 0x7293372F, 0x2E008B62,
+0x198CDA8B, 0xFFDBA892, 0x20857924, 0xB2AEC0F7, 0xA4CC508D, 0x37378653, 0x7CB1E659, 0x6C8DB5D4,
+0x6E9A0FC7, 0x14670E18, 0x700EC73D, 0x16DB5CC9, 0x41EDB9A8, 0x6838EA9E, 0xFC32C764, 0xE465E6C9,
+0x98342E0B, 0x16ADD7B2, 0x57A9BFE5, 0xA334F508, 0xFB6B3E61, 0x721D43EC, 0x3FEC0F95, 0x710A2194,
+0x97730DFB, 0x9FBFBE73, 0xB7B899FD, 0xD325804A, 0x11780C36, 0x3DFACA1F, 0xF5E94724, 0x4EAEC70A,
+0x0D9F8374, 0x5D65017A, 0xCECB83AD, 0x6D0E9989, 0x274D20C6, 0x3EE3BC76, 0xA254517E, 0x6AB2ECA7,
+0x98834D53, 0x8BD3AEEC, 0x0FF0D62A, 0x6A61CDB7, 0x6E856A5C, 0x33E6984E, 0x3651C24F, 0x23D946EA,
+0x139FC839, 0xE868E7AD, 0x87A12650, 0x303332BD, 0x100D098F, 0x95A46009, 0xAB412A71, 0x2448873A,
+0x1F4F777B, 0xACAC14A1, 0x34CCBEAF, 0xC6EA97D3, 0x03FA65E3, 0x677BDFA1, 0xB3701B90, 0x02E9F2EB,
+0x916C4F75, 0x8F6BE32B, 0x70D82DB4, 0x68FE50F0, 0x176E014B, 0x76752CB6, 0x5476BA4D, 0xBE81B01C,
+0xDAEEEAC7, 0x2164C372, 0x649D43EE, 0x58174E12, 0x9FF81018, 0x472B7768, 0x1B20EF2D, 0x91A6A9F7,
+0xF1EE0E13, 0x68131CB6, 0x3DC0E353, 0x89FE8E9D, 0xE9548E8C, 0xB60CD236, 0x8362D429, 0xE076A3AD,
+0x3AFE84F6, 0x9F6A1DB2, 0xFD187256, 0xBAB6E084, 0x183AF1F6, 0x29D4FE4C, 0x234E97D8, 0x22FABBAB,
+0x9A00EF0D, 0x69AD87F5, 0xC5682EB4, 0xE3466BEB, 0xFC173317, 0x445235F5, 0xFD5F641B, 0x1EBE0B6C,
+0x7AC5F295, 0xB2458539, 0x967E9E4D, 0x2D4C872E, 0x0A6079A0, 0x058D02CE, 0x0763FBF0, 0xB368C22F,
+0xFCBE9556, 0x8389C2A4, 0xC87FDBD7, 0xC369305E, 0x665C23F8, 0xFDB12860, 0xA63D0884, 0x1F4EBB8E,
+0x955DB4BD, 0x739EA423, 0xD169F5B9, 0x782B9B16, 0x8E2C28FD, 0x488F164A, 0xF41DEBD3, 0xF8D37359,
+0x2D409B16, 0x1F4B8F9C, 0x6BA60926, 0x2F25E808, 0xF7B6D45E, 0xCD71395B, 0x12E98C5B, 0x08DCCBE3,
+0x9F3DF1B1, 0x48FB3D67, 0x668FAEC4, 0x7C980A20, 0x6A79543F, 0x849A6161, 0x3C9EA133, 0xA7115488,
+0x0DFA4BE1, 0x09472B77, 0x37141C5D, 0x99C5E9FC, 0xDE8078D2, 0x941E4559, 0x984518E1, 0x46F4DAAF,
+0xF7B41183, 0x61FEC092, 0x8152B6D0, 0x84600070, 0x78BE7226, 0xED3C7ABD, 0x1D26CFA7, 0x5789616E,
+0xF6DC97C3, 0x03847007, 0xFC447959, 0xF55068D5, 0xCA411301, 0x0E884277, 0xB42E82A3, 0xD33F65EA,
+0xD76A8134, 0xA66E2049, 0xCBE46D7C, 0x72443920, 0xD753DD36, 0xDA02184B, 0x91B1E7A9, 0x4444A15B,
+0x5ECAE78E, 0x5D79AEFE, 0x6BEA756F, 0x65AA8F62, 0xB2A4FC21, 0x757FBD24, 0x185F0F81, 0x442F8FC8,
+0x78F6A91C, 0x50A54969, 0xEA5D5DA4, 0x539CD7BD, 0x5C861DAB, 0xAC3D5DCF, 0xC589BA12, 0x18CFF1A3,
+0x5414822F, 0x7E052FC8, 0x4864125D, 0xC2B65ECE, 0x812A7181, 0x674ACB6D, 0x0D88A431, 0x81EBA310,
+0x41FDBA5A, 0x1B445B1E, 0x295F5BFC, 0x1E1F7BC3, 0x8966CDE6, 0x1A81E558, 0x58B57A4C, 0x24EEA3AD,
+0x128C7250, 0xC38A5624, 0xBB207B3A, 0x9A181268, 0xB7B64BA4, 0xEC10EB26, 0x48DD48AB, 0x5BF45968,
+0xDCAA0293, 0xB6E6435A, 0x7EF7CDB5, 0x293E30A6, 0x8701A788, 0x85D64C09, 0x78435BE2, 0x47F24598,
+0x3CD059BD, 0x1A118397, 0x4B72D52E, 0x6DB1A5A9, 0xB6F3C4B7, 0x16F4142D, 0x03B4825E, 0x42578CA4,
+0x1F6749FD, 0xE5FF8D95, 0xD445473A, 0x2386C8E8, 0x57873319, 0x2E29F7A3, 0x4840F599, 0x1485547D,
+0x0C2534D4, 0x7F674B56, 0x70054224, 0x0951AFC6, 0xAA134A77, 0x1F658882, 0xD30E30F6, 0x74EE3D47,
+0x13CC6605, 0x8BDA5B10, 0x64F31124, 0x3DEDEE01, 0x7867C4AE, 0x22B3D495, 0xDD83D1C8, 0x60EA0488,
+0x205FD61B, 0x1BA84EB6, 0x7A5E3A6B, 0x78090D96, 0xBCD53149, 0xC8B94D30, 0x5FAFFC1E, 0xDC88EBF2,
+0x207DD533, 0x5F5EA018, 0xAF3513FA, 0x66DD569D, 0xDEC106E7, 0x71911ACC, 0x179DA499, 0x0BBFA225,
+0x94C533E7, 0x5A948C73, 0xEBFD03B2, 0xB95DD6F0, 0xC3647128, 0xD98801AE, 0x58154F04, 0x483C81A8,
+0x41A161C3, 0xF701D995, 0x52588A89, 0x1D2969C5, 0x8A6BC62B, 0x14193EE2, 0x74E19D0F, 0xD3D42E51,
+0x5245FC16, 0xCA54F688, 0x88CB68FF, 0x5FE1D174, 0x5C775E38, 0x6BABED3F, 0x19007DB5, 0xAB980642,
+0x91CE8ADC, 0x439A8083, 0x6673A2CA, 0xC5186FA8, 0xC54BE367, 0x38A0AD82, 0x8D98F377, 0xEFF127B3,
+0xFDF28536, 0x32857DD9, 0x5EE7E805, 0xD84CDF48, 0xD163090C, 0x4B158ED1, 0x5C746034, 0x0CA718DB,
+0xD7AEBC90, 0x3678200B, 0xE054B397, 0x785F3832, 0xAA1D9E41, 0xA0174E17, 0x5CA387B0, 0x1251271B,
+0xA117BD5A, 0xB885BC40, 0x28CACC2C, 0xE812C33B, 0x0FC5A97A, 0x7E576F35, 0x51F9D9C4, 0x3D975441,
+0xED302D37, 0x81F3F7C7, 0xFBA0EE2A, 0x05BF2D20, 0x95203237, 0x2705E880, 0x6F919E01, 0x39EFACF4,
+0xF568743E, 0x7F7857A7, 0xCA65E5E9, 0xA0538357, 0xAC44263D, 0x0127AE89, 0xB9A2EA9A, 0x4690BF4C,
+0x86AE2155, 0x89CCE54D, 0xDB271ECF, 0xD5143CC0, 0xCB6C40C2, 0x6954F19D, 0xD7C557B0, 0xC4E19036,
+0x39B7D4C2, 0xCD10C794, 0xBC9FCBEF, 0x5417899E, 0x919057B0, 0x3A0EA1F1, 0xDBE994EC, 0x9E9C28F4,
+0x5474DE0C, 0x8687873B, 0x352DA390, 0x19207C43, 0x179665F2, 0x35A38873, 0x889B86E8, 0x32D8D888,
+0xC31B732C, 0xB2CC124D, 0xED0D5080, 0xA85DE4E8, 0x9E09C76B, 0x988272BA, 0x2257127B, 0x5B9A0D45,
+0x328DC152, 0x14391BDB, 0x6FA03B29, 0x2A1FFA87, 0x40EC9830, 0x95594D0E, 0xFE539143, 0xBD1710DD,
+0xDB440107, 0x4AAE796F, 0xF89EF818, 0x713E6B0E, 0x0B6BDA0F, 0x3BFC188C, 0xCAFBD420, 0x6B885426,
+0xB26058A6, 0x161E5F73, 0x81F165E5, 0xE7F9A0B1, 0xECFA9F9C, 0x187BA667, 0x6F67C466, 0x51781558,
+0xB3B677C9, 0xD35F2C76, 0xBF6ACC5C, 0x5528F60B, 0xECA60E17, 0x861BC498, 0x0AD1AA89, 0x53B83E5F,
+0xCC492FA5, 0xB4E8672E, 0xFCDEBF82, 0x3AE8059B, 0x93EE9470, 0xB751868C, 0xB5C248E7, 0x38E66AE4,
+0x37DF4B67, 0x35B085A6, 0x5CF5E86E, 0xA3A2542F, 0xBF97096B, 0x25E9EE7E, 0x5DF64016, 0xDE6A3EA7,
+0x4C8F5C0F, 0xFF291DE3, 0x502936E0, 0x06E6C2CA, 0xED487482, 0xA588462F, 0xAF921580, 0xA93B7E0A,
+0xB99A200A, 0xDBDDD0E3, 0x30A29C21, 0x11FBA927, 0x642E5435, 0x50E24323, 0xBE3C14FB, 0x84B369C3,
+0x2A5F1967, 0xF0B49792, 0xAE99EE35, 0xBA76035F, 0xF47883B4, 0xCBF969DE, 0x609773EE, 0x919D1A9A,
+0x1DC29FC1, 0xDEC795BF, 0x0B29CDCA, 0xC9129594, 0xF1E30B13, 0x8F0160B5, 0xCA16C727, 0x6EA642C4,
+0x994E905B, 0x3FA09C7B, 0xBDB5A197, 0x4CCC402E, 0x2D281C8E, 0xADF84386, 0x72F5D475, 0xAF67F4C6,
+0x0C30C04D, 0x58C6B99E, 0x53EB6CCB, 0x09A63793, 0x0888162F, 0x32840C28, 0x22DC745B, 0xA3A434BF,
+0x5C2ACDB6, 0xEFE545E1, 0xDEA0974A, 0x7C7967C8, 0x9CFCB55F, 0xEB124CB5, 0x3AE3A823, 0x8E8FFA3A,
+0xBB6DE457, 0x89AEBDF8, 0x3469FE50, 0x491545F4, 0xC90C655D, 0x41BACE22, 0xCD9AE7CE, 0x0FA4224E,
+0x13A2B8F8, 0xF62B894F, 0x39E47524, 0x064AD9FF, 0xC6CF15E1, 0xC8AE58C4, 0xDA3C02CF, 0x7E644665,
+0x343BD322, 0x5EC20703, 0x8DFDE7F4, 0x5ACEDF5C, 0xFEFF6CE8, 0xFE781C01, 0x3CBC78BD, 0x0BEBA4C0,
+0x30ADA78F, 0x5A325287, 0x5F08BF33, 0xA8104818, 0x2B3E228A, 0xD91F17BF, 0x91D4D8FD, 0xD43ECCB9,
+0x8239BD7D, 0xA6DD5273, 0x6377E348, 0x51C63D3B, 0xBBAB1AF8, 0x984D4EC7, 0x787A9A46, 0x015D3432,
+0x4D7FA2C6, 0x53F64943, 0x635A1B7C, 0xBD62EE7E, 0x5EE96381, 0xDD4CB509, 0x4221236A, 0x38695771,
+0x248C162E, 0xFBB39477, 0x986A2341, 0x11749920, 0xAE2DA4BF, 0xC98BA6FE, 0x41DDFB31, 0x7BEC6EB1,
+0x2DE0065A, 0xE9190011, 0xC59E6ABB, 0xC784C5C8, 0x9FC62678, 0x3B5AB699, 0x9B873CF1, 0x2432019E,
+0xD00D8128, 0xF95E51F4, 0xA12C8567, 0x5631EE5F, 0x8E5948D0, 0x5480B579, 0xA0331D0A, 0xCC56C963,
+0x308AF487, 0x58FDD6AA, 0xEBD866E8, 0x3993CD80, 0xFEC0DBCC, 0x537BCFA8, 0xCAA16F08, 0x33F1C20A,
+0x5490FB40, 0x12507480, 0x6D6E87B3, 0xF7F5DE9A, 0x0605B09D, 0x478B64B3, 0x28BF261F, 0x19297C46,
+0xCE169347, 0x672B4A0D, 0x6E62CFB3, 0x5C9ED737, 0xE74C3D8F, 0xD315AEA8, 0x0C9B9DF6, 0x20AC5573,
+0x985D7AD9, 0x97DB579E, 0x99181D20, 0x5F726EA2, 0x582D6FAA, 0x34A19C3D, 0x857B2ABE, 0x432581A4,
+0x00223E06, 0xFC6F1223, 0xE1DF003E, 0x1821FBBE, 0x31CBA1CC, 0x453C39B6, 0xFCC9575C, 0x00C8CA3B,
+0x374BEEB1, 0x91ABC893, 0xA6147D44, 0x94B7FB4A, 0x36440631, 0xF08440F2, 0x638E63C4, 0xD1984460,
+0x277BE7F9, 0xDED5FE97, 0x1598A5F2, 0x7CAB5FB3, 0xBBE0D7E6, 0x866B3376, 0xFFC01E4E, 0x50409F76,
+0x0A9A387B, 0xBA1C8212, 0x811AE70C, 0x7D8717CC, 0x1973CF8C, 0x1AA6198D, 0xD302DF50, 0x06BFBA31,
+0x857B6DDE, 0x4446D2A9, 0x921F7830, 0x9EEAAB2B, 0xBB71DC6E, 0x75D5FC6D, 0xE34BB24D, 0x475CB58C,
+0x778FA4AB, 0x321B7AD3, 0x24FC8F08, 0x229F9A03, 0x772D09F0, 0x7C93EAA4, 0x48A0012B, 0xE39A5B5F,
+0x45B0B5F1, 0xD8EEF02B, 0xD3353C57, 0x28074240, 0x7871793E, 0x8534F841, 0x7BBA37C9, 0x8E7DC399,
+0xB0F4631D, 0x9DE661B5, 0xC9AA1DD7, 0xE2F2C413, 0x69DA9513, 0xD7A2383A, 0x06C391BA, 0x2C057AB7,
+0xFDA178D3, 0x3676EB42, 0x3331A60B, 0x790AE6AF, 0x4F679EB0, 0x68185661, 0x770D23A5, 0x05430930,
+0x23F8BC4C, 0xBF4C5E5C, 0xDFBC885B, 0x99A38845, 0x510B526B, 0x10A49E85, 0x56CAA45A, 0xEDDD752A,
+0xC97DA3EA, 0xF992720C, 0x10C9FB47, 0x5A16C72B, 0x708C127D, 0xFBE46EA1, 0xDAE10AB7, 0x14C54CAF,
+0x08207A4E, 0xEA631957, 0x020DD0E6, 0x6D5DBFEA, 0x3EDD7932, 0xAEF8E3B6, 0x7ECD3A63, 0x9D54CCCA,
+0xB781B9AC, 0x82A7B000, 0x62929604, 0xD4960774, 0xCF2BC4BB, 0xB4D3ECF7, 0x5C7EAEC3, 0x26551135,
+0xF788AB1F, 0x7B552932, 0xD9D7566E, 0x5934BC22, 0xAF0CB23E, 0x194FF132, 0x78AE529C, 0x0A9E0119,
+0x9D0A797F, 0x297A253F, 0xCDA60BEB, 0xC9BF79F4, 0x097808AE, 0xF16B19E2, 0x32ED212E, 0x609ED482,
+0x242898D2, 0x5A5A76F4, 0x8ED53E1C, 0x255AA188, 0x2F6FA96F, 0x2808DE4A, 0xE5C8CD27, 0x1F3600AB,
+0x4CD588C1, 0xC72ED537, 0x85BAC026, 0x00B40B97, 0x93DCDE46, 0x2F81AEA7, 0x83952400, 0x1F52D492,
+0x068763BE, 0x3B9135B1, 0xF00AE13F, 0x85578ACA, 0x2D3A6DED, 0x6D493FE2, 0x7D71E62C, 0x888F090F,
+0x3C1F5CCE, 0xA8232A47, 0x326230FA, 0xE018E72E, 0x30E8E122, 0x2729C391, 0xA8E6695B, 0x2295D8B4,
+0x0E787F5F, 0xC7839C3E, 0xCEF9D77D, 0xCB5C6C7C, 0xF2B9FA4D, 0xE55238C1, 0x8205B5AF, 0x26ECC932,
+0xC9D75106, 0xD0B82D3D, 0x1A738172, 0x5785CCD2, 0x9158BB8A, 0x85F38EDC, 0x0392B29D, 0xF2FD181D,
+0x33DCCFC7, 0x1E674A12, 0xCDD5D8CF, 0x007C4E3D, 0x0DB2B2E9, 0x177C9AEC, 0xFD9EF1CE, 0x151ABFEF,
+0x124B3379, 0x88376679, 0xC0E3BC7D, 0xBC5B9A67, 0x6A163783, 0xA8C02C9C, 0x663106D0, 0x71F511EB,
+0xBE55C99E, 0x2EF323C3, 0x2257399E, 0x37EA39F7, 0x22621034, 0xEB11172C, 0xEB043FFC, 0xD6ADAFED,
+0x7A26E37C, 0x7038328D, 0x91FE2E51, 0x39A9C8B2, 0xCB4E199B, 0x9E6CED46, 0x4930C07C, 0xCBB70D65,
+0xB2850DCE, 0xB867AB9D, 0x9FF83F55, 0x70F20279, 0x1C143349, 0xD401EEF0, 0x4D71C984, 0x055D0085,
+0xE4C2166A, 0x6B08F58C, 0x6ECD335B, 0xBB804001, 0x4AF509FB, 0xC70F505D, 0xC7003607, 0xEB2A6744,
+0x5C3C61C7, 0xBAA6FD15, 0x4A50A236, 0x7DE87E18, 0xC453AD42, 0x5D2B2768, 0x3EC3DA21, 0x7B4E0BBE,
+0xA8828197, 0x6F642CA3, 0x550A7146, 0xD616347F, 0xE9FF4C3C, 0x837B0462, 0xAC2642F3, 0x0AAFBDCE,
+0x5F75FD4A, 0x52B91C32, 0xF0CA0DEE, 0xF61E9DDA, 0xA4159F83, 0x5B1F9A8F, 0x5057EE32, 0x88D24B27,
+0xED35B7C7, 0xBBC2B2CD, 0x640D873D, 0x6357B57C, 0x2D13AF17, 0x1A9133CE, 0xD17F7BCA, 0xD601D743,
+0x9EEBB558, 0x8F2FC6EC, 0x133A91A9, 0x7F67FCC7, 0x41F4766E, 0xD8C2F48C, 0xD466E9E8, 0xD5553345,
+0xC4847E5D, 0xF862622E, 0xB75EFCA8, 0x59CAC558, 0xB4D3A832, 0x2CA35C57, 0x4B2524EE, 0x379B237F,
+0x7024042E, 0x8D6DCB65, 0x198DEECF, 0xA92A39CF, 0x89BB8080, 0x15F16F93, 0xF01BA557, 0xD7C07255,
+0x3155477A, 0x3C8DDD2A, 0x449D34E3, 0xA8D59A56, 0x38CBF0D3, 0x0E14D2BA, 0x1529B1F2, 0xA21816E3,
+0x5E4263DE, 0x6C64248F, 0x80FD6F12, 0xAFF38E01, 0x667CB452, 0xF98EA8BE, 0x3178F19D, 0x9B4121BC,
+0x839E25E3, 0xF491FAC4, 0x9A470F3C, 0xEBDB49AF, 0xEE935444, 0x2FC8E665, 0xDDFCEEFD, 0x6281ABC9,
+0x0F0DC02B, 0x254F9948, 0xAA7DB014, 0xCE5F8310, 0x250DE25A, 0xE579A543, 0x13A6B65F, 0xF804626F,
+0x6778A6B5, 0xFA8D748E, 0x42250FC1, 0x0DEB983B, 0x05A1CD3D, 0x556B5339, 0x7D41947B, 0x47F56420,
+0xDB5AA937, 0x69AE2074, 0x9DA5F2A2, 0x872E4047, 0xDAB8F08D, 0xC3541F9A, 0x03A7D3FE, 0x366D1FBE,
+0x814BABA0, 0xF45B1AE5, 0x6FD82A16, 0xF5B73124, 0xC1004CAF, 0x697F9B1C, 0x18830DC8, 0x195B3DE8,
+0xE2E35276, 0x2B6DAFAC, 0xF9EB6FD6, 0xA2AE55D9, 0x12AAB67F, 0xA9B40EF9, 0xA2ADE4A9, 0x9FCD568D,
+0x3BD6ABA0, 0x0B7A2493, 0x0A711EE1, 0x782BAE34, 0x1D795E85, 0x56002A58, 0x541515FD, 0x61E31FDF,
+0x66983477, 0x5B181AE5, 0x257893B4, 0x6F9121EE, 0x8A80CE1B, 0x64C53E6F, 0x4A6D11A9, 0xFB9CFBFB,
+0x53C98BEA, 0x625AEE96, 0x11286513, 0x850481E6, 0x882B6C3A, 0x27E36032, 0xED862E2A, 0xBA6D5B60,
+0xFB678307, 0xA7054A2F, 0x4F411BB5, 0xDD2D1A87, 0xEA3C0860, 0xB81A38D5, 0x2403BAF0, 0x661CF71A,
+0xAC4178FB, 0xFE8392B2, 0xF2DC57AF, 0x6CA4DDC5, 0x6D9DB38A, 0x2BA1839B, 0x230AFB16, 0x475AB124,
+0x28254217, 0xDEAB1037, 0x17CA759D, 0xB430233E, 0x322B6569, 0xD61EF5D9, 0x0A0C76F0, 0x30DA2695,
+0x9587E5D5, 0x28A2E6F5, 0xC9C431CC, 0x31465B91, 0x69F96B42, 0xACE58A9D, 0xD95C997D, 0xFC540EDD,
+0x07E5A0D1, 0x3C9A1286, 0x7672AF6F, 0x036E6F6B, 0xE21D9A77, 0xD39D0FE0, 0x95261400, 0xEF938D10,
+0x51CEB348, 0xA0E32D11, 0x0287BE66, 0x72B1385E, 0x42599B3B, 0x63718542, 0x0DAF24A5, 0x10067B61,
+0xD2075A76, 0x11B68749, 0x0C4D0959, 0x6DA19C3B, 0xA1C3B413, 0x1590E968, 0x68227F40, 0x490C3EBF,
+0xFE52BF10, 0x3C38B462, 0xB90DC81B, 0xC63F74E7, 0x5BE2224D, 0xABF4DBC1, 0x9848C658, 0x250B65FE,
+0xA57E57CD, 0xD2181358, 0x36D14550, 0x918F20F3, 0xAC1FD296, 0xDDF40A8B, 0x0B2EED28, 0xA16C77C6,
+0x51EE8A7E, 0x46DE2377, 0x34DAF6D8, 0xB475CBA8, 0xB54F8202, 0xECE719C9, 0xAC795A64, 0xA4073AEA,
+0xA3E6BEED, 0x9C1E611D, 0xB5DE379F, 0xD645C412, 0x4B712E8F, 0x12EDAB65, 0x0545890F, 0xA4956CB6,
+0xA032A01F, 0xB3E25943, 0x5B19060B, 0x527C2F98, 0xF4718792, 0xBAA48BA0, 0xF9D1739F, 0xBFFEDDA9,
+0xB167999E, 0xC94E221F, 0x2AD63D1A, 0x7C80CCE6, 0x966613E7, 0xE2AE8BD6, 0x854B7939, 0xBE2E1B26,
+0xCEC6180E, 0xFBA04551, 0x7F29F8DA, 0xB3950CCE, 0x2D683607, 0x67903728, 0x2A1A0537, 0x8E236F0E,
+0xBF248C6A, 0xED434D3F, 0xE676A277, 0x44576715, 0xA1F127AD, 0xD55141D9, 0xC2B78F38, 0x59095FBB,
+0xE0979E43, 0x59F749D1, 0x9F8FBE34, 0x4AD4CC83, 0xE0A9373F, 0x716B4718, 0xCE8D3E16, 0x5DF4BEB5,
+0xB1740BB9, 0xCE3858FC, 0xFB812796, 0xC88815BB, 0x0248105D, 0x72711544, 0x2BD62705, 0x73DD2E43,
+0xE9A7E0B1, 0x082B6CA6, 0x9841B749, 0xC890DA33, 0xFC9B2259, 0x0FD9098A, 0x4E583EE4, 0x04EAEDAF,
+0x8FD8CE0B, 0xE29D9F33, 0x9E96A132, 0x8F6671C0, 0xFD151031, 0xE355582E, 0x58747387, 0xEE8FCAE7,
+0x129B1589, 0xB1D7E426, 0xAD484C20, 0x04C297AD, 0x1AB7D05A, 0x8AC17F00, 0xC49AF4E9, 0xFFFDF133,
+0x65AF1B89, 0x3132636B, 0x69370307, 0x04398588, 0x2E422C08, 0x8FA2E542, 0xCD6BE1C6, 0xC7B159AE,
+0x04536D9F, 0xDBD08816, 0xE01CCD9D, 0x338F589F, 0xA50B1B0B, 0x1D949C92, 0xFF66EBB0, 0x85FEE157,
+0x55A1BDAE, 0xDF76DFC3, 0x449B3C9F, 0x8143500D, 0x667B827D, 0x6566215C, 0x5556ECDD, 0xD4031E81,
+0x87368AC9, 0x0FDC7B6A, 0xAAD1612B, 0x79DF8100, 0x23350D81, 0xFF292B42, 0xFFAA276F, 0x3FCFCCF8,
+0x0428E738, 0xA79778FE, 0x22B6C44C, 0xE48493E6, 0x541F63E1, 0x572E081E, 0x020E6AB4, 0x363F6010,
+0x5DD2EA21, 0x4EAE719D, 0x360DCCEA, 0x1DA14C5A, 0xAD71A2B1, 0xDE2E15A1, 0xF3E9BD6D, 0xFDF5F68A,
+0x7BB959AC, 0x0EC922AD, 0x23CE1B36, 0x7ABA271C, 0x6C22FC8B, 0xE6EDD6B6, 0x8FA831AC, 0xFBAD1B58,
+0xA2F020F3, 0x67263E28, 0x57569D64, 0xD0AA3A42, 0xD8BABCEC, 0x1303B76C, 0x3ADA36A5, 0xC2142B0A,
+0xE574D0A9, 0xC4EECBB3, 0xB9D746C7, 0x384A69FA, 0x43312088, 0xF57A29B4, 0x018F2925, 0x63F5AD22,
+0x837337D2, 0x3C8ECC7B, 0xA2692863, 0xBC6E5A72, 0xF44B7038, 0xD8D5F6DF, 0xB4978BD5, 0x9821AA72,
+0xFA9DACD2, 0x4536C90B, 0xBF235091, 0x429F3961, 0x2BDADD79, 0x84FDDB6C, 0x45EB2B68, 0x82C38D44,
+0x2982988B, 0xB5526D47, 0x8A57E2E1, 0xD591FA66, 0x554E934C, 0xBC0A7246, 0x2CE632BC, 0xA7AF00FB,
+0xE7094545, 0x1818F449, 0x99E44200, 0x4CFB8D52, 0x87E06017, 0x74379CE4, 0x0515B64E, 0x6435BB5F,
+0x370B810A, 0x9BDAA585, 0x376AF14D, 0x4C47E9D3, 0x0F68ED44, 0x383CC377, 0xBE66B9DE, 0xCA399729,
+0xF2E7E40E, 0x031607AF, 0xFFC93963, 0xA6876390, 0x0EA45C94, 0xD8193333, 0xAF001738, 0x2AEF9E6B,
+0x44553D8D, 0x0B71505A, 0x90E3EBD2, 0x96F568CF, 0x875DCA69, 0xDC5ACDCF, 0x423953CE, 0x10E03222,
+0xC44E825F, 0x968E1647, 0x041FB984, 0x4EC0B110, 0x57D14EF6, 0x9A3E2541, 0x59FFA89F, 0xE3D33F4F,
+0xAD75C940, 0xA64EDFBF, 0x517DE416, 0x92B70F7C, 0xF614F553, 0x86A3DFF8, 0x056ABCFB, 0xAF963EC9,
+0x404BAECA, 0x5BBFE29F, 0xB0B5A04A, 0x16A77C39, 0x963A59A2, 0x6F15F096, 0x45A0000B, 0x6AB14B5D,
+0x0E5E7B7A, 0x453E8013, 0x725001B9, 0x11BA2FFF, 0x94CE4DCB, 0xE670C607, 0xB2C60EC9, 0x2C1F6142,
+0x770211E1, 0xB003A6D1, 0x69C16371, 0xDAF8E928, 0xFB783D42, 0x78C67F6D, 0x043E6721, 0xDA6405BA,
+0xDF4247CE, 0xC7588701, 0x7F0AE57F, 0xAB6D37E9, 0xB2D4EC92, 0xC0ABF033, 0x56AA95ED, 0x4D057BEB,
+0xD546256B, 0x759BE724, 0x9DF4353C, 0xDD71A746, 0x1438FB7D, 0x4BC1E6BC, 0x2AAFBFE1, 0xE7CF0722,
+0x2B8B950B, 0x1CEC07A0, 0xFBC4A243, 0x78A07BAE, 0x06648890, 0xA1003E1D, 0xAE51E9AA, 0x61C7566E,
+0xC78E9937, 0xB5416B7B, 0x482C5053, 0xAD02B6FC, 0xF0ED4608, 0x694D6CBE, 0x10E909AA, 0x20ED54BD,
+0x32B126E1, 0x0782E38F, 0xAF470CE9, 0x2202C87A, 0x6AE1AC46, 0x1E3A77F0, 0x9E16D64E, 0x0CEB3B1C,
+0x1CD762D6, 0x3DFE5233, 0x576FC95F, 0x5565AFEB, 0x108428C5, 0x5810ABF4, 0xE84FB68F, 0x94A00A78,
+0x34218F34, 0xE252B431, 0x0235E844, 0x85FCBA46, 0x943C9F45, 0x19815DFF, 0xFEA0BE2A, 0xD1259C38,
+0x9998ED3C, 0x4B7C0CA0, 0x75110361, 0xC53FAE2F, 0x5F14CDCA, 0x0EEA0812, 0xCE7728AE, 0xBB291D7F,
+0x3032561F, 0xCF32A01D, 0x8EE2381D, 0x05B7D9E6, 0x2155CBA8, 0xA4C4685C, 0xE4EE4570, 0x67FC0D84,
+0xAFB2A3B3, 0x908EFDDB, 0xC8F13B7D, 0x826F4216, 0x7EC48008, 0xA6DB95FB, 0xF91A73BA, 0xC002F18F,
+0xE2FE91B4, 0xC5F6BC67, 0x5CF1BA9E, 0xD14C0DED, 0xA2D7CCF4, 0x301A00D7, 0x4EF46D10, 0x3382C46E,
+0xA62A7330, 0x97FA14A5, 0x5B4C768D, 0x42DB8D09, 0xCE1898CD, 0xF5C1EFBF, 0x9857D8F7, 0x87CA0957,
+0x7C96BFF5, 0xDBBBAED7, 0xD1EC37F7, 0xE1292120, 0xC9C611FE, 0x81714EF7, 0xFCD0E36C, 0xA47132F6,
+0xA7EA2A40, 0xFB1BF897, 0xB0A847C3, 0x3349B9BD, 0xC8C4167F, 0x42173853, 0x01266CF4, 0x2599B3FF,
+0xE68BA080, 0x2F64F0A1, 0xEBEE6254, 0x5A787852, 0x6C52D850, 0x5B793513, 0xB50AC5DA, 0x38BF6FB6,
+0x94192309, 0x1B3F1672, 0xE9BCF99A, 0xC7F950D3, 0x71302FE8, 0xB8F0AD2F, 0xA5CE7FE7, 0x29310C6B,
+0x6D6449FD, 0xE9FC76AF, 0xFD3E2136, 0x26A06CDF, 0x24C07DBA, 0xD2D9345A, 0x4CECA835, 0xFD065B97,
+0xBEFD4A59, 0x4B5CBFDE, 0x916C3277, 0xEC72F2C6, 0x3E8CB146, 0x84782762, 0x3796090F, 0xE3234FCC,
+0x837663DE, 0xDCBA19F8, 0xCA59A277, 0xC9F20DEF, 0x34DC00D0, 0x23A56C12, 0x16226CA2, 0xBEBF2A66,
+0x09AEBF6E, 0x5BDE1869, 0xD9E7E62E, 0xDAE93AF2, 0x917C96CE, 0x95BD7F4C, 0x279BE9DA, 0x711304AB,
+0x4160FA87, 0xF5978F31, 0x89AEAF88, 0x568F4D4F, 0xC32A1F4C, 0x35D5CE95, 0xFCB94417, 0x7C31648C,
+0x3FAB09D5, 0x6CD8D9CC, 0x3C731472, 0xCB7E23D7, 0x86BB3035, 0x19910702, 0x84A5B9BC, 0x77BB4B29,
+0xFF959279, 0xE5DA705D, 0x89CBB4D7, 0x49811357, 0x7519C344, 0xF75EE664, 0x7658F278, 0xCF4282D3,
+0x3C137D72, 0x481161BA, 0x6BF0782F, 0x5A2B021C, 0x48CFB77F, 0x98EBA715, 0xB08E692B, 0x812DBF4D,
+0x3B78ABC9, 0x903AE025, 0xECE5F406, 0xF121B578, 0x7951CB3E, 0xD2939F59, 0x0DA94FFF, 0xEB0D2E88,
+0x0737D121, 0x32A5A0FE, 0xC12AC6CE, 0xD9523AB6, 0x58E5E1BB, 0x2FAFD59E, 0xDAC73A21, 0x164895AB,
+0x34A7DAE2, 0x10E2857B, 0x60CCDD0D, 0x5760A222, 0xE7A85A41, 0x1502F857, 0x93168FA8, 0x4C1505BB,
+0x7D9D742A, 0xFEBDA9DB, 0xBCE97113, 0x94A51340, 0x7A7A9454, 0xAE81B475, 0x65CB49A7, 0x6D9F7816,
+0x602DCA19, 0x5555BF79, 0x6781CE77, 0x8AAE5956, 0xEFD09372, 0xE9761D1B, 0xF6721153, 0x27AF70F3,
+0xA51D5CF1, 0xCEC0E6BA, 0x5A643450, 0xB6680708, 0x66DEAB24, 0xE1B89B7C, 0xBD8F908F, 0x8B000223,
+0x41050412, 0xAC4345FF, 0x7A10DBDE, 0x21DBF016, 0xB9800D4C, 0x0980AD12, 0xDF6EF09A, 0xAED5A9FD,
+0x5BD31355, 0x81CFDA6E, 0x65EEED3F, 0xFC121EA9, 0x4FDF76C4, 0x24797C75, 0x588C980C, 0xCD7EC92A,
+0x36FC4D25, 0x2538C5C7, 0x15675D24, 0x119A9739, 0x4C5052D0, 0x313529F8, 0x49009A02, 0x83A907E5,
+0xF4870D79, 0xB4C8DF76, 0x0CB589F9, 0xF2F495CA, 0xAEED49FC, 0x558C4FEE, 0xFCB866BB, 0x6E1ADB54,
+0x4213E786, 0x5B165473, 0x8CB95107, 0x4BFEECBA, 0xD9B3BDDC, 0xDA10EC64, 0x90B48A63, 0xEC1A48DE,
+0x653C5668, 0xF244FA59, 0x386A536E, 0x5E434803, 0x0720A8C0, 0xE4FD684D, 0x7E9BC962, 0xCA78FC83,
+0x5F5E11D0, 0x6CCAD17D, 0xF5955713, 0x9B3EBF3B, 0x82A21E99, 0xCFFC888A, 0x57084A5C, 0x73880482,
+0x90B6719F, 0x25DB0141, 0x1BC201E1, 0xE5BE5FF4, 0x96AC696E, 0x586AD28D, 0x0C4B9869, 0xC4B96898,
+0x7A2DA6FD, 0xCF46EE7C, 0x2D39E2E0, 0x2EF810B1, 0xBDAECDA2, 0xB06AA409, 0x229BB89D, 0xA96257D9,
+0xA8BEE570, 0xADCF2C7F, 0x268FC374, 0xE31F93AC, 0x3BA9E68C, 0x2068F36A, 0xA1DACFB9, 0x90510B6D,
+0xDEE82688, 0x6E0A9352, 0x2E83CAD1, 0xCE91974C, 0xF07E796E, 0xC91C506C, 0x24DDA639, 0x7BE2F88E,
+0xFBB1BD56, 0x5E30F352, 0x81753FC4, 0xCFE753BD, 0xB1E126EC, 0x54A4D8BD, 0x2B2CCEB2, 0xC40D12A9,
+0x5FA9E6D9, 0xF730E1F2, 0xC1816D21, 0xF8DD9135, 0x7BB830A8, 0x80A9D64E, 0xF9F8E306, 0x060A57A7,
+0x12AAFFF0, 0xFF318633, 0x16BE2AAF, 0x54322EC6, 0xF9F33D7B, 0xB680D560, 0x1102B57C, 0x346867A0,
+0x7B8E89A5, 0xFAD12F65, 0x3D33328D, 0xD19B063A, 0x82781C90, 0x3AA4D676, 0xC3678893, 0xB78FC345,
+0xE38A6836, 0x272A5391, 0xC3DD895B, 0x79B1FD48, 0xA955321D, 0xC8439F34, 0x40BC12E8, 0x9B4BCCC1,
+0x766218F9, 0xBC15E63A, 0x87961260, 0xFFB46026, 0xADDE51A2, 0xAC05E4BC, 0x614B2927, 0x97A0F28D,
+0x31EB96CA, 0x6B448F26, 0x989A4869, 0x2363DD1E, 0x308C007E, 0x9B040DB8, 0x6FA2B46B, 0x8EDB8AA6,
+0x82878F4A, 0xC16D8440, 0x1EA9EE31, 0xF0894A11, 0x4EF5AC14, 0x2A661778, 0x70FBF476, 0x079BEF44,
+0x6B473A9D, 0x36ED8758, 0xCFC594F6, 0x62211625, 0x17BB1F4A, 0x7844A589, 0xF0B95A82, 0x8CC87B89,
+0x10BB775B, 0x2971602F, 0x84158560, 0x03CF5E38, 0x27183E31, 0xDFB789EC, 0x13979E52, 0xB19D100E,
+0x4F2DCF5F, 0xFDF9C25F, 0xF5497E65, 0x10B8906F, 0x82FB6278, 0x4594250D, 0xE33E8AD5, 0x9B6F1AE2,
+0xE54C3C41, 0xB9EA96A5, 0x4E306D2F, 0xC336EC6F, 0xB785CDF8, 0x3D99AD1A, 0xB7A2302C, 0xE74A8C17,
+0xC57D77DE, 0x11CADBC2, 0xEA9A94E8, 0x418F7C7B, 0x74CB8829, 0x50E225A0, 0xDE52F28F, 0xDCBF5CAE,
+0x6EAB40A1, 0x797A2918, 0x3B99AE2F, 0xBA0982CB, 0xED971950, 0x3885BC59, 0x280F4901, 0x9609E52D,
+0xE0249CAC, 0xF6DA15A3, 0x77956928, 0xE484EECD, 0xB002837B, 0x8424FF26, 0x89C4EDA5, 0x96B0B5FA,
+0x6BC96609, 0x17FBCE5F, 0x51CBC983, 0x1FA3EEAB, 0xAB385349, 0x4815BAA6, 0xC9B85A8C, 0xB5B99A22,
+0xCBE7E4D5, 0x6BC7BA16, 0x08A463EB, 0xC3C9FC09, 0x4D63164D, 0x8EE15C0B, 0xAAA658A1, 0xD5F17B27,
+0xD848C082, 0xC8613953, 0x38DC9DB2, 0xAB64A41B, 0x153E4D94, 0x7076FDB7, 0x1051EF51, 0x4F57C8FB,
+0x06ED97C1, 0xB4A5B921, 0x6FE82383, 0xA5F05085, 0xCD5D20A5, 0xCC172163, 0x8787684D, 0xC639A4DC,
+0x7249742D, 0x135ECAC3, 0x593AE31E, 0xBB3D2F54, 0x19B5D64E, 0xA9B17213, 0xDCF17552, 0x6F319B62,
+0xD78FE6EE, 0x490B6DF6, 0xEFBA5A30, 0x202F39F0, 0x1309637D, 0xED1D2AA3, 0x8455BD3C, 0x7BA64133,
+0x481DBF2F, 0x83AACB79, 0x462430B8, 0x9B721780, 0xC787A517, 0xF1B70B23, 0x5BF339A6, 0x76E7E05E,
+0x0569FE7C, 0x04B7A203, 0xBE25B113, 0x37FA890D, 0xCDB03BC3, 0x3C8C7822, 0x9760D723, 0x1626C8AF,
+0x8D7086D9, 0xDF5D8614, 0xCE90A7C1, 0x5038E144, 0x021B2043, 0x1BBEB2CC, 0x5B5760CC, 0x4BABA096,
+0xFFC8F3C3, 0x1DB4ACF2, 0x0FFC509C, 0xFA95FFCF, 0xF97CC323, 0x64AE7555, 0x10B606F2, 0x0A5FC098,
+0x16BA883F, 0x1CBA2801, 0xE662DB6B, 0x7C3D8453, 0x3C2F569F, 0x08B62AB6, 0xFFE2F5F5, 0x47C5A969,
+0x0925A811, 0x1CAF8B0F, 0x2F81136E, 0x4A89A3C7, 0xF08A2F74, 0x8DC5D80E, 0xEF6653C5, 0x02DA6BD4,
+0x13D0D138, 0x33355B88, 0x6DD7FF29, 0x5DE4A9B4, 0x4911836D, 0xE60CFB3D, 0x1C7373E2, 0x9537AAB7,
+0x5CD903EC, 0x00F5061E, 0x588564D3, 0x274E3859, 0xC227E930, 0x0CEBC583, 0x76C25E3F, 0xB685EF10,
+0x16F124A9, 0x98F13C5A, 0x2982C610, 0x7D2234EC, 0x473D54A3, 0x43B0C8EF, 0x0FD26147, 0x1287CB4D,
+0xB897CAAA, 0xCD7162A4, 0x856FB546, 0x9DB1DD3F, 0x52BEF471, 0x74624EDC, 0xAFA42413, 0x202AAB8B,
+0xFA542AB6, 0x513B5705, 0x8F19B4D2, 0xDC820C0E, 0x2DB306E4, 0x9413A164, 0xEC3BBC36, 0xF877C1FE,
+0x3A80BCF5, 0xF9012127, 0x80E7F6DC, 0xBF4CBA7D, 0xE77EB236, 0x09940379, 0x8454EA30, 0xDA31348E,
+0x73E6C7D1, 0x3BE6E3D2, 0xC97E04FE, 0x04AFA885, 0x71F8BC3E, 0xA08472E0, 0x9EB6D902, 0x9EB50C66,
+0xEB8139D9, 0x45F1D82C, 0xBE98DBD2, 0x32CCF751, 0x39DD6382, 0x1CF2707E, 0xFB8D1FC0, 0x4F713AA7,
+0x9DDA0D6B, 0xEA43A350, 0xE8C246C9, 0x98D87AFB, 0x247F54A9, 0x047B7D33, 0xFC9FBF5A, 0x07E357F5,
+0x19470755, 0xDA04A536, 0x0AAEB8BB, 0xEE8796EE, 0xFA49D3F6, 0x3E74B29E, 0x59A87405, 0x27F4F680,
+0xDD097850, 0xDD143A42, 0xF29030C9, 0xD6847402, 0xBFE5F328, 0x6BF80F20, 0x92DA1C78, 0x8313B734,
+0xD0B1E1D3, 0x1E73C820, 0x53D24F4B, 0x98DC3F38, 0xAF318ED4, 0x22A89C99, 0x95D56A46, 0xC6C95BD3,
+0x18D04294, 0xE6936221, 0x90CA1826, 0x6CE023F2, 0x03E7C13E, 0xBE71C494, 0xDF736792, 0x727F7753,
+0x3A9B2F5A, 0xB0FEF123, 0x33EF12E6, 0x4D81926B, 0xEEA478BC, 0x187DA651, 0xAB084C52, 0x79747AE4,
+0x0C1C4A7D, 0xFBD51B86, 0xA6598792, 0xA3D81599, 0x27F2176F, 0xDC96BA98, 0x1778A3A8, 0x73F61060,
+0x449B2ED7, 0xA182DC79, 0x7E9F85B5, 0x9398BBFC, 0x899F6B7D, 0xA52B69D0, 0x897019DA, 0xAD151ECD,
+0x358053A9, 0x7D5F40BE, 0x6EECF812, 0xE7FEAEDA, 0xADBF9584, 0x92B28ACC, 0xC6B2F419, 0x2782249D,
+0xCD939658, 0x4245E60B, 0xEBFEC893, 0xB4FBAA17, 0x9C1A7937, 0xE7D6F9C8, 0xBF733BEF, 0x292FC08E,
+0x3FBF0B72, 0x9576A179, 0x32209A4E, 0x4B95B591, 0x03440FCE, 0x3B4B17ED, 0x7E6DD1C5, 0xAE1BAAD7,
+0x139C5E2E, 0x384BACEF, 0x83759750, 0xE2233306, 0xC484ABC4, 0xFD625D17, 0x560FEDEA, 0x006FD4B8,
+0x20DB6EC5, 0xD3E4C058, 0x157AD599, 0x4A93EA4D, 0x1D230229, 0x4880588E, 0xD7FC38D6, 0xB95F95CB,
+0x7DFA8EAC, 0x6C1108DE, 0x36C358AC, 0x3588AF2C, 0x1E6F5E18, 0xC8F7F392, 0x7CEF7A2D, 0x01003CCA,
+0x50719001, 0x3A4D7CF3, 0x3C394498, 0xF4F79DFF, 0x10D53AA6, 0xDF5823AC, 0xC5EAE0E3, 0x852A8EB3,
+0x846EBCCF, 0xCE680D62, 0x20C1994F, 0x44855473, 0x22A63D1F, 0x8C6EF4F3, 0x36974715, 0x5BA38C41,
+0xDF38A2AB, 0x4BF875BD, 0x90ECC97D, 0xBF382AD1, 0xA333ED44, 0x000000E1, 0x2F9F0101, 0xFCFF3144,
+0x4AAB5DB6, 0x0EA79E78, 0x407D6B82, 0x67B93C96, 0xC5DCA8A4, 0x4366AA25, 0x40F6DDC1, 0x606B4AAE,
+0x41A40F02, 0x2BB8E61C, 0x9A3DA4E8, 0x8E850BCF, 0x5F243287, 0x5C888AA8, 0xE712E873, 0xD82B7B82,
+0xD72D83C0, 0xA1F1E4A3, 0x31F2EC80, 0x3887B51E, 0xA3D0D6A1, 0x0EB2E5F2, 0x1DA01387, 0x1DA090E2,
+0x0FCE96B3, 0x73B82436, 0x52584FF3, 0xDB8C250A, 0x33D18BF0, 0x1C6428CA, 0xC931A12D, 0x25FDA0A9,
+0xB26055AB, 0x2D803BDD, 0xBEB2B6C6, 0xEF3148C0, 0xD2BB1AC8, 0x1F758112, 0x9B9FB429, 0xADF5099B,
+0x1E96AF99, 0x8CEEB341, 0x6AEAB0FB, 0xFCAB0787, 0x87D5F1EC, 0x504A8344, 0x896EC338, 0x585D13F9,
+0x86FB9A8E, 0xEE6884F8, 0xA3A93F51, 0x6DA74745, 0xB7696C55, 0x8E364957, 0xCDD1B0C8, 0x9CE586A9,
+0x77F71852, 0x6C0A23FB, 0xE34A49D8, 0xC3DAFC25, 0xFCF15A2E, 0x171EBF2C, 0xF39245E6, 0xEC11F3E7,
+0x7304AF67, 0x38D0690F, 0xE4B0ABDF, 0x81D8B174, 0x06E605A2, 0x0608D3FC, 0x071627B8, 0xB901F34C,
+0x2121F435, 0x65DF8F13, 0x9973A789, 0x8643ADF2, 0xFFE8E5C6, 0xE84F8155, 0x57C388A9, 0x31E857FC,
+0xF0F651BA, 0xE48628A5, 0xFD6D55B0, 0x17EC383D, 0x21231873, 0x2D2756AA, 0xC840FD86, 0xC9DBB125,
+0x10A9C9CA, 0x884C43CB, 0x9D5BE9A3, 0x4AC8E81E, 0x98F44538, 0xB4755BCD, 0x946EF014, 0x674976D7,
+0x8A4670BD, 0x5826E872, 0xFE393ED1, 0xB9172ABC, 0xEDD4AE6E, 0xD91D64BC, 0xA549318B, 0x52CF7B55,
+0x21F37E85, 0xB9F8DDA0, 0x16DC035D, 0x91CD4B38, 0xE8FB9D8C, 0xAF493056, 0x3B95627C, 0x0A1291A1,
+0x26F50D1C, 0xC5BB24CF, 0x7DF2D919, 0x9B625D41, 0x4FBD00FF, 0xDE82A7A2, 0xFB9FEEF4, 0xBB38B5A1,
+0x99F5887B, 0x7E7B5325, 0x427DAA21, 0xBCBA5C20, 0xCEC901D9, 0x127CC5AB, 0x8258685B, 0x308217FF,
+0x72F5ED66, 0x470C1DC7, 0x6C916EC7, 0x29EF7A01, 0xAAAD0E30, 0x5C67F89D, 0xFE761C2A, 0x97AA1175,
+0x6E8BFC7E, 0x7804118E, 0xCEA1D7E5, 0x363E34E5, 0xEC04A6A6, 0xE504A46A, 0xE361DD73, 0xF4769CD8,
+0x7C5469A0, 0x44716F39, 0x71CF3F00, 0x20489CB5, 0x07126E33, 0xC6A7FE04, 0x29337BB6, 0xDA356B50,
+0x627BDB29, 0xBAAB269F, 0x43737D28, 0x98AD9E35, 0x457B990F, 0x71493B78, 0xEAF6D13B, 0x1B9ACB48,
+0x5AF6A52A, 0xB16CE434, 0x062340E2, 0x57A889ED, 0xC4D0EF69, 0xD29504C7, 0xC23E40F8, 0xEF81AF13,
+0x3D1C39B5, 0xFA480818, 0x88E2FEC7, 0x2025CA29, 0x5BC9BD0C, 0xA98B451B, 0xB7FBBA35, 0x87208A57,
+0x9CB5AC85, 0xB3A6500B, 0x46ADDB15, 0x41DC05FE, 0xC3451BD3, 0xB3470E46, 0xFE5456E8, 0x0C953218,
+0x9680AB43, 0xDE33D9CF, 0xE982F4E3, 0x5B1C1B55, 0x5D48A58B, 0x8527D7BC, 0x1F342203, 0x5B649074,
+0x22DB6A26, 0xA900FE3F, 0x5CB13EB6, 0xF70ACEA8, 0xE7936B22, 0xB67B077F, 0x3DAE5207, 0x91EB90C7,
+0x7B0863A3, 0xFA39DBB8, 0xDA821E9C, 0xEC363D22, 0x34353F5D, 0x66CA9F05, 0xE69E45B2, 0x9C10BCDF,
+0xB2C331DC, 0xB2A29068, 0x541A16F5, 0xC2F31F78, 0x058B920A, 0xC40E2067, 0x846E81E7, 0x0DC6EE65,
+0xF12C924B, 0x8593B072, 0x8393F517, 0x927F5B47, 0x1159E066, 0x328E9F47, 0x80F0A365, 0xC68A060C,
+0x0FD08F54, 0x5195A68A, 0x00000038, 0x329B4101, 0xFF1D4F19, 0xB4C65BDE, 0x792E4130, 0x3C0FA461,
+0xE2608F74, 0xF7DA64B0, 0xDDF348B5, 0xC00901B5, 0xE366F5D1, 0x01B6FF12, 0xF3FE9E45, 0x3974D73C,
+0xFF5B688B, 0x77833F2B, 0x5F8D42C4, 0x520D0FC9, 0x930E123D, 0x0652B861, 0x88B52970, 0xF05A7AE5,
+0xA5870FF1, 0x3FBBDCB0, 0xB83ED18C, 0x1A5497EA, 0xF2BD2C1F, 0xB4A3D05C, 0x5FEB9F34, 0x1D8AE03A,
+0xC38AF778, 0xD68BE8C2, 0x752655BD, 0x2593237F, 0xCEA92BD5, 0x33F035C5, 0xED83D549, 0x27BE28D3,
+0xB1E27F3E, 0x1DD0AD9B, 0x72E57F96, 0xE96E6365, 0xBC397198, 0x1B71D825, 0xED125E93, 0xC3B8D83A,
+0xB82EC358, 0x9E62A620, 0x36B6FC06, 0x64299123, 0x3816D0B8, 0xA4FB9F5B, 0x86B0C879, 0xA44D52C2,
+0xCAA81365, 0x56D21331, 0x8C62AA68, 0x506B793D, 0x2E223A06, 0xF3E09D91, 0x5F2EEAB8, 0xBBE6C96E,
+0x0431D577, 0x2A3A01D1, 0xB42F154E, 0x10599F88, 0x1B024A2F, 0x8DD0B9D2, 0xE5BF012B, 0xDDB5F75A,
+0x2F5BBE9A, 0xB42CD3D4, 0x89816AFF, 0x898D4675, 0x02158392, 0xE11585AB, 0xE625BE8E, 0x7998AC22,
+0x130B6114, 0x636AEF4F, 0x24C70684, 0x3B21F95A, 0x24B4C5C5, 0x259F3BCD, 0x11D4BB54, 0xB8D7B181,
+0x3E955A70, 0x6DF7C1B9, 0x2A84EB91, 0x21BFBBC7, 0x30E4978F, 0xEA1DB852, 0x96CAF738, 0x15114073,
+0xA6851402, 0xA0931170, 0x1E33B1D6, 0x00889DE7, 0x33A43E70, 0xC724143F, 0x6E4DF6FB, 0x07AC1523,
+0x69567B98, 0x000342A7, 0xFE91603F, 0x58DE7B72, 0xE45CD640, 0xB29C997A, 0x84544E9F, 0xD6F658AE,
+0x12995DFE, 0xB9C5D8AA, 0x1298C9D1, 0x5FFCA152, 0x72561CE3, 0xB3ADE080, 0x0EA01143, 0x4DDBFFB1,
+0x869A184C, 0x1B182AF6, 0x7BC48E41, 0x385BE4E4, 0x8F0D8E64, 0xF6672238, 0x0ABA0B43, 0x122FCD4E,
+0x34BDF9A1, 0xCAC106F6, 0xEAC796A9, 0x7954CC8D, 0xA18D1667, 0x4592C8C4, 0xD8DB078B, 0x2CBD85B1,
+0x1828251C, 0xCF99CE00, 0x72EEDBDC, 0xE982401F, 0x9C165CCA, 0xA1AC797B, 0xE726732E, 0xE44ECE12,
+0x4F42CABC, 0xB5D446C9, 0x2E0A2521, 0x800BA4E6, 0x0B7CFD14, 0x5E418E6C, 0xD4E0330D, 0xE20FE0CE,
+0x8E63651E, 0x7B461696, 0x46C2E3D1, 0xF2B9129F, 0x5800AB2B, 0x6EFD78BB, 0x3DE2F86B, 0xC0B96182,
+0xB34D389D, 0x35AE9475, 0xB862C7D2, 0x71F5BD44, 0x46092DA2, 0xA7B8F39A, 0x51E27574, 0x25A11B59,
+0x290D3321, 0x0F96E6C3, 0x77DEBFBC, 0xC13C278C, 0x70DF40FF, 0x213B7D17, 0xA47E8E0C, 0x3B10D123,
+0x0BBB85EC, 0x1F0DD4F1, 0x5FEDBD52, 0xCD0ECC9D, 0xE3FF9B53, 0xCB72AA75, 0xF766D899, 0xC3ED7890,
+0x5B8C54F0, 0x5AEA0F11, 0x473FA83F, 0xBE0F150D, 0xA160D0D6, 0x21AA15C6, 0xC8DA3942, 0x29023326,
+0x59A84459, 0xD24ED74C, 0x019EEE3A, 0xEED07245, 0xEF52D700, 0x9C4C90CE, 0x7CC73EB2, 0xA8760C2D,
+0x996E1966, 0xA437A83D, 0x4741AC72, 0xBFA98F0A, 0xED2B28B6, 0x66489047, 0x9C9AE7FC, 0x1B3F6157,
+0xD97627C9, 0xDC289CFF, 0x893B94B7, 0xFFCBC0D8, 0x583A8DE0, 0x659230A9, 0x48004022, 0x19AE55A6,
+0x486A937C, 0x349A2D06, 0xA115EA38, 0x95A61DC3, 0xA538CFC1, 0x2267E7B9, 0xF625FD99, 0x0048E5EB,
+0x22E4DA88, 0xCABCD908, 0x62F012F8, 0xE84A8AAC, 0xBBD29D69, 0xB5142EE2, 0x7978F106, 0x38C9D3BD,
+0xA3596FEE, 0xC11DC2DA, 0xF02AF68E, 0x0D45F8A8, 0xC8792E1D, 0x00CAD1AE, 0x7AFF95A5, 0xAC345B81,
+0x520C50B6, 0xA013E9A4, 0x7FA94106, 0x1075117D, 0x9D5DECD9, 0x965E626C, 0x79FE2EA9, 0x60FEA3A2,
+0x211EA790, 0x6D819AEA, 0x6CCFEF99, 0x2C95200F, 0x7DD0B68D, 0x3905DFD5, 0x0BE135A4, 0x59084DEB,
+0x835180E1, 0xEEFA5A75, 0x8F884AC0, 0x0D94A603, 0x71461EBE, 0x5BDB049C, 0x008B67F3, 0x566D1678,
+0x0BC283B0, 0x31889B4C, 0x03CDAF01, 0xF6662E9A, 0x6D3CB3AD, 0x4701A673, 0x992268B6, 0xDFEEC2C0,
+0xDFD4E621, 0x501B3CA6, 0x115BBF8F, 0xD655E89C, 0x748B757F, 0x4DB989F0, 0xB678CA3C, 0xC7ED275E,
+0xE760CC0B, 0xCE749BBB, 0x6A524454, 0x2ACCE1A4, 0x9F756162, 0xCDE52342, 0xF8FFDF28, 0x796A0300,
+0x4E32CD2F, 0xDE6D0E58, 0x0ED62009, 0xD50A2185, 0x15BE6CCF, 0xC65CF9EF, 0xDC786BA2, 0x3AC071AE,
+0x9DBA4587, 0x2148E794, 0x0D41475D, 0xBED04407, 0x5DB43834, 0xE9DE925D, 0x4FD1FA58, 0xE61D64F9,
+0x4AC223EF, 0x5A689D92, 0xF3BCD75F, 0x802AB04B, 0x0E44EBA3, 0x1F354061, 0xBA44AD7C, 0x35811412,
+0xBD79DBF1, 0x431889EB, 0xC81A2E6E, 0x63F060D6, 0x41D07FB7, 0x346D78F2, 0xBB732076, 0x2B840438,
+0xAB80800E, 0x09938B7A, 0x4D289BC7, 0xF406BC64, 0x10A82A53, 0xB2ECBCC1, 0x32135859, 0x0D714A95,
+0x297635F7, 0x5C90F9A3, 0x889AE3F3, 0x4C8D47F5, 0x51443A5B, 0xD0C009A5, 0x9CD4D0AB, 0x1350148C,
+0xF2D47DAE, 0x4EF97DA8, 0xFB80049A, 0x4CDCC4F5, 0x62BD4487, 0x1E29E5BD, 0xFDBC0BA6, 0xD2E0CD8A,
+0xF16E5E30, 0x715F3912, 0x2EDEAD2C, 0x719CEFA8, 0x67F3378A, 0xB58F9F11, 0xBEB443C1, 0x907A52E1,
+0xD8A5CF43, 0x65C42560, 0xB6C8BAD1, 0x4FC204FC, 0x879C4FD1, 0xA41E81A1, 0x2D5A749E, 0x5205A09F,
+0x73423E12, 0x48920FF5, 0xD97763F5, 0x84BAFD97, 0xEC479943, 0x4B14F98B, 0xB38312ED, 0xEA305409,
+0x3F59DA70, 0x8EAED02D, 0x36EF80ED, 0x0ACCE6A1, 0x931C21C2, 0x4CB66A67, 0xD0FB2B4F, 0x20ABDDF4,
+0x4C20CA83, 0xB2C351F8, 0x77417526, 0x7C9A58A9, 0x03B1E708, 0x988F1FD8, 0xB294CEAD, 0x66A0DB71,
+0xE0DC2B33, 0x32BE505A, 0xC4E3446F, 0x0FCA6D8E, 0xB9766D65, 0x4807ADF0, 0xFCBEEDC0, 0x59042F6A,
+0xBD839F3E, 0x7DC12F50, 0x6A3B553B, 0x7D587D40, 0xAA713C63, 0x58D26582, 0x3FD76F1E, 0x378C9D2F,
+0xB8C088FB, 0xA4A54E67, 0x385088D2, 0x089303EE, 0x3E166A59, 0x5B39DE76, 0xB557B183, 0x90B3E2B0,
+0x507CB202, 0xDDDA4044, 0x1C04B41C, 0xBFE0517F, 0x79759F54, 0xCCB4D0FA, 0x69819580, 0xFAD02941,
+0x9CD5A9A6, 0xF67D1D1F, 0xD56F82BA, 0x9C3EDD35, 0xBEB61E0F, 0xEFD474D7, 0x8B9F27BE, 0xDFA94989,
+0x3CFC1C2E, 0x3D99815D, 0xF6EDA4B2, 0xFC54E5A8, 0x0F5E4791, 0x8449710D, 0x8A3E179F, 0xF7A8A4A8,
+0xF38F1760, 0xEEE88C43, 0x18F9D395, 0x01EF9789, 0x44535038, 0x1D35F027, 0x7C4D6F24, 0xF5C4B152,
+0x782E4501, 0xC0330234, 0x6211E8DD, 0xBCF74B66, 0x5683071B, 0x4E20AC56, 0x5913D60C, 0xCFA6A311,
+0x73A6D6CD, 0xAB2AA891, 0xE6DA6D65, 0xE1460405, 0xBBB3976D, 0x3B372FD4, 0x3A0F1733, 0x4712E2EF,
+0x19D3BD8D, 0x9B2EDD69, 0x98D6F6EE, 0x744529AB, 0xF60B9D66, 0xB0108FE5, 0xCEE4B7FD, 0xAEDC93D1,
+0x5449119C, 0xD23949CD, 0x21344D0B, 0xE0991D5A, 0x8655F9FC, 0x0BB204C0, 0xD2E0F4A3, 0x0594B1FE,
+0x97CC2F0E, 0xFBF2099B, 0x6D5BD2E8, 0xD4BD704A, 0x28A965DB, 0x20BC209E, 0x7F38FD25, 0x273A00D4,
+0x4FFA31D4, 0x47D8298B, 0x7AF2E93A, 0x9C805337, 0x4E26F9A8, 0xC0469366, 0x543DFCB2, 0xF7D562E7,
+0xC3921C59, 0x1275D953, 0xB7A72460, 0x9F026485, 0x28114676, 0x6FE4F681, 0xB1DD2233, 0xED2B8414,
+0x487B8BDC, 0xFE49D443, 0xDE3139C4, 0x9419B54B, 0xBE6653DB, 0x884476B9, 0x8E484B0A, 0x33615137,
+0xDED8270D, 0x3454D9AF, 0x329DE421, 0x1411123C, 0x02A5CDD9, 0x44B09555, 0x7FA03D15, 0x3BF54A2A,
+0x33F34A5B, 0xE42849EE, 0x70C6249A, 0x6DEB5A1D, 0x03763E2A, 0xD88BDFA6, 0x88D93553, 0xD0105334,
+0x0E2A66E4, 0x2778F95C, 0xC66C7F8D, 0x0F1C3959, 0xAA6901BB, 0xC97444FB, 0x4670C5EF, 0x6215735D,
+0x18C86060, 0x23BD98B2, 0x16B5AC3C, 0xF567E057, 0xA0AACB81, 0x78AA0C75, 0xAE5C11F8, 0x29F1A216,
+0xB2BA7279, 0xDB00F566, 0x6AF7E0CE, 0x47B81133, 0x970E79DD, 0x376D6FDE, 0xDD73CFC1, 0x5A373A1F,
+0xCD27563B, 0xFD27D065, 0xF4703C27, 0x5D581EC2, 0x09F169DE, 0x014B0D6A, 0xD579D407, 0x21B0F7E0,
+0x4EACEAA6, 0x5A832774, 0x54CB10B7, 0x4CD6F9C3, 0xF3A84DEB, 0x8AB7535E, 0x87657BD2, 0xC7BDD259,
+0x65ABBB01, 0xD5132E0B, 0x07287408, 0x0351EB4F, 0x1348BAB6, 0x8658E97E, 0x90D5C948, 0x94F60996,
+0x5F10D1EC, 0xDA064550, 0x7BF71996, 0x37E5B40F, 0x5C0DF1EB, 0xD35F1897, 0x6CBDB618, 0x47B63CFB,
+0x4A99389F, 0xC56DDACB, 0x5BAA0235, 0xF560EE7F, 0x0691F2B5, 0x97ABBB65, 0xC7E229B6, 0xDD281125,
+0xB0778541, 0x9AD1B2CA, 0x61537260, 0x6EFB305F, 0x89265044, 0xA4F74382, 0xEB3F3094, 0xC31C8730,
+0x60A337BC, 0x69A8F886, 0x3CDC0530, 0x4829822F, 0x1A85916B, 0x4B584F0C, 0x4D61481A, 0xEF797F4C,
+0x0DC8FE6F, 0x0552702B, 0xB5B6D208, 0x2D3003B4, 0x41495F82, 0x6F390028, 0xA0805AFC, 0x1652D9B2,
+0x7D8A699D, 0x83021A55, 0x11D4185E, 0x040697AF, 0x805556AB, 0xFB025ABD, 0x1FF57695, 0xE9616F27,
+0x1DA253D7, 0x73AF85B5, 0x7B9B775B, 0xCB804EBD, 0x35C30973, 0xA6D4AAE9, 0xA41D62FD, 0x794E8C49,
+0xB156BB44, 0x8B9C7979, 0x1D8BEBCC, 0x790620F9, 0x8C791B47, 0xA6306B33, 0x44EB52C8, 0x80A657B4,
+0xD3EDDFED, 0x02E03FA3, 0x83AD5393, 0x24BDE85B, 0x9A5FC35B, 0x84C449F6, 0xB6B6A35C, 0x932CD5D5,
+0x704BD7B4, 0xE04F7706, 0x53EE6F72, 0x3A0B607C, 0xFE779F45, 0x99158589, 0x7DDB86AA, 0x76E76A35,
+0x5E1FABE4, 0x4F4465BE, 0x70D05789, 0xFAE38FD5, 0x38CCBDC6, 0x9741AC84, 0x3723D37A, 0xC006C785,
+0x6225421B, 0xEF2BC616, 0xC17B3B5A, 0x089F51D5, 0x358ADA61, 0x5C7640D1, 0x65E635CF, 0xAC59DA98,
+0x1E47AEBF, 0x9636EDC9, 0xDAAC03EC, 0x45640305, 0x7EE6F098, 0x626F88BB, 0x47C9FAE2, 0xF42CC2A5,
+0x2A53E0C4, 0x420455A2, 0x80A47B7F, 0xE4B14CFE, 0x155A0DD1, 0xDF93E7FB, 0x7F77F455, 0x1011AACF,
+0x2BAF9B0A, 0xE3A6199A, 0xB6289C5D, 0xAE65CE08, 0xA9439B10, 0xA26C778E, 0x1C573ADC, 0xF78954AA,
+0x2465F7EB, 0xB1767F5F, 0xDFBDF540, 0xF861A3B6, 0xC4AC700B, 0x29339F90, 0xAD9DDBDF, 0x1F195E6A,
+0x1A2BC18B, 0x67229FB5, 0xA6E12D9A, 0xE44AC5A4, 0x06B8BE45, 0x4ABBF42B, 0xAD5A7319, 0x7732F967,
+0x3ACE6017, 0x9A730FE4, 0xF45577B6, 0x4A0899C4, 0x83BB22C9, 0xD28AFCB9, 0xD16B5823, 0x5FA7AD7F,
+0x79F6C871, 0x87B2ED97, 0xE0FEF09E, 0x3519B4C0, 0x728E48D1, 0xB039E55A, 0x36D91B1F, 0x9F67E3A0,
+0x6601B994, 0x6FFD3C22, 0x06925CCB, 0x8492E623, 0x69F0ADEB, 0xBA7240F4, 0x6380C530, 0x7AEF6896,
+0xE1963ACA, 0x01D3CB10, 0x776DF3BC, 0xF9DC5AA8, 0xE2EA2EA3, 0x125F96D8, 0x0FCE0613, 0xE2755D72,
+0x8696CC7B, 0x2869010C, 0x4D263448, 0x35AB6E46, 0x3B0A6BA9, 0x0A7B6B49, 0xFC80F668, 0x8019010B,
+0xD44535C9, 0xFDC83538, 0x32757629, 0x60ECC4BC, 0x28460E56, 0x31EB3E6C, 0x195424AE, 0x76769B95,
+0xDA614E65, 0x3489975C, 0x5552FC9B, 0x889FFA45, 0x9EB2DF22, 0xF8CE9403, 0x1F1B0A0C, 0xAC98CD65,
+0x9AD52443, 0x1A4BDAAB, 0xB4487E93, 0x3FE833BD, 0xD9A7700F, 0x6184C590, 0x39EC1EF3, 0x235FAB4A,
+0xEE54B2CD, 0x32142816, 0x981ED8E3, 0x5CC01969, 0x715AED86, 0x51B1FC82, 0xA0D4EE99, 0x68A68659,
+0x40BAD63B, 0x13B1ADFE, 0x87CFA41A, 0xD083DB6F, 0xC7A5C26D, 0x84F118B0, 0x3CFADFEE, 0x215CB171,
+0x7A5EEEC0, 0x3F9A0846, 0x0CC4C0BF, 0x76E9A47E, 0x15BC765D, 0x21F06BBE, 0x37AE40F8, 0x736D48D7,
+0xD94EAE2B, 0xEC42D614, 0x24CD403A, 0xEF7C3F3A, 0xD2F2541A, 0xA391F691, 0x9D7B8E77, 0xB89BA642,
+0x7C6F7108, 0x5E718F83, 0x627EDA17, 0x3459FC05, 0xA626B04E, 0xB94277D6, 0x9A30ECC4, 0x9695A44D,
+0xD21BCD3A, 0x2F80B882, 0x6A234CD6, 0xF79E897F, 0x21566700, 0x9C796D2E, 0x1CB3BF83, 0xB53814BE,
+0xF245CD5D, 0x4F9E14BD, 0xD46C73F3, 0x6BE2BFD5, 0x653137B4, 0xAD798197, 0xBFD8CAD9, 0xEB675175,
+0x890F5B63, 0x1A92B7A6, 0xA2498F54, 0xF8C6CD57, 0xF0522533, 0x55BE5893, 0x50E8C1A8, 0xC0F18809,
+0x41826863, 0x4CF9C451, 0xADFB3026, 0x54192931, 0x3DF7204F, 0xB0F0FBC9, 0xCC035965, 0x82A4F268,
+0x2E27D69F, 0x03B25D43, 0xBE57E847, 0x17AD2633, 0x1964BA22, 0x70C41AC4, 0x3E31E165, 0x51D18FD1,
+0x9A2FE3F2, 0x988F7475, 0x82870097, 0xA76CECD7, 0xC4AA83B1, 0x15B24CA2, 0x0F5F4AE4, 0x7134B5BB,
+0xFE6F9AD3, 0x24D7EAC2, 0x9A18A669, 0x6E63F2E9, 0x9EEEFD2A, 0xC27FF4A2, 0x257C9E2F, 0x0CC56FE3,
+0x9452431A, 0xB0C85F8F, 0xD9AF9675, 0xFD4F5007, 0x3EA7A956, 0x251D8F61, 0x1172F781, 0xC0C16ACB,
+0x201DA9D1, 0x2637E034, 0x4DF04BCE, 0xD745191B, 0xB0177422, 0x07B8E18C, 0x5183293F, 0x76903327,
+0x660D00AF, 0xE288E045, 0x8406D59A, 0xF3BA8B84, 0x73E9A4EB, 0x1EDA286A, 0xFC272D00, 0x5DE1205A,
+0x7B77F0CD, 0x65E67895, 0x2BAEE36C, 0x5512A01D, 0x812A1E5E, 0xDBBD00BA, 0xF018DD0F, 0xE0634DD2,
+0x58D5D8B5, 0x6258E68C, 0x4069F57D, 0x070DD0D9, 0xED253700, 0x503263A7, 0x999E05CE, 0xDF1D3CB7,
+0xEBF7490E, 0x971BFB21, 0xA8FFC466, 0x7D1B8221, 0x89029721, 0x785ABB57, 0xD57403A1, 0xC3BEF220,
+0x42D1B68A, 0x3A1066F7, 0x5AD6C2A1, 0xA95925C5, 0x4CE3E2CB, 0xD053034D, 0x7842BAE7, 0xD14A3D57,
+0xD859F370, 0xAEE51137, 0x299684B9, 0xFA83AF2D, 0x594577F3, 0x91637FDF, 0x75385EEE, 0x24FA592C,
+0xB3A8DA7B, 0x4E24DC84, 0x456B0275, 0xCAADFB34, 0xCFC8E5C3, 0xDFA2A016, 0x2256E33A, 0x33B09456,
+0x0A43089A, 0x101B71AC, 0x86460D6B, 0x1916EB69, 0xF3E8D2FD, 0x91C8A915, 0xDDAE3A59, 0x3B7BE421,
+0xDB1DED30, 0x7C29C6E4, 0x49D5BD38, 0x7A01AF45, 0x24A6A13D, 0xBB196B12, 0x19E96A08, 0xBC40FF98,
+0x89740E24, 0x78AFAA05, 0xE411DD26, 0x65499B41, 0xFAC45DBE, 0xAAAFD604, 0x50B29145, 0xF7EA2F81,
+0x4253A5D8, 0xBA88B6A9, 0xCC712721, 0x4BF1F312, 0x852A5565, 0xB6425A51, 0x6361D8D5, 0x46E57014,
+0x2FCA2F2B, 0x44F2BBAB, 0x1029C9A0, 0xA19FC81D, 0xC897E322, 0x4C4006C1, 0xE33568D7, 0x6857B814,
+0x994F0FFB, 0xF3D98086, 0x3BBD0D97, 0xE9C5EB24, 0x900F4B0C, 0xFEEFB0B1, 0x68D8743A, 0x112310A5,
+0x362C646C, 0x39CAD8B4, 0xDCC44C11, 0xE1A304A7, 0x04A18AA2, 0x0D72EACB, 0x97FEB4E4, 0x348DE67A,
+0xC525D85A, 0x452980FB, 0x103325B1, 0x62322D4D, 0x4AC33759, 0xF3EE6378, 0x76139732, 0x67AE1D74,
+0x4923F721, 0x9C861F85, 0x6AFE2F13, 0xC71A3CD2, 0x886DD966, 0x5285226A, 0x415D3582, 0x44CFF7EA,
+0x27E96EA3, 0x26BCF1E3, 0x011D6331, 0xA91442E0, 0x6FF7A330, 0x25B8D77D, 0x7E8BDFC0, 0x932A8AF4,
+0x3CE85483, 0x96D8133A, 0xD519557D, 0x073628F6, 0x6EDE1F09, 0x1A40EB0F, 0x04B4A7EF, 0x7211DB92,
+0x0BF84137, 0x5832FDCA, 0x1A947BA3, 0x7BEACD32, 0xE773D271, 0xEC3710F7, 0xDABB2699, 0xA549C0AC,
+0x582B7ACD, 0x50179214, 0x11C738D7, 0xEF27464E, 0x32197FAD, 0x7B5F0C0F, 0x27C9FE11, 0x3EB7FC13,
+0x8AB2FE6C, 0x91945056, 0x5B8DD716, 0xC2699A14, 0x29BC42F6, 0xC04CCC8C, 0x8E100429, 0x1CED4023,
+0xDB08A5F9, 0x1FD2F1EB, 0xCF93F5A7, 0xAC773D32, 0x7DFAE230, 0xC5AD8EF3, 0x60725CF2, 0x3646D8C4,
+0xD44BBE9A, 0xC6090089, 0x5CA2D533, 0x73085D2A, 0xD96E740E, 0x49691EDF, 0x63A00954, 0x369E786A,
+0x1D61D25B, 0x652CA89D, 0x98FE2A7B, 0x2EABC24E, 0x79581ACB, 0x9233E29D, 0x07BCE3EC, 0xD342FEAD,
+0x0017BCB9, 0x5BFD00A1, 0xF13F2DBB, 0x4E0AF4E6, 0x8B47D09E, 0xD340C1ED, 0x7AFB1C02, 0x49B0AB29,
+0x84E49012, 0x9F33CDF0, 0xA277CDF2, 0x4F7D66E1, 0xE486209D, 0x3FEE36A5, 0x2BF949D5, 0x89B3A703,
+0x63C6501E, 0x23A3EFA3, 0xC4D3906F, 0xC09ED0C5, 0x2920D098, 0x40941CED, 0xDD97A727, 0xEC508B69,
+0x655AC9F6, 0xE6D7000F, 0xB642AEF3, 0xED5A272C, 0xF39810EA, 0xA2354833, 0xF34DA9DF, 0x819A29B1,
+0xE5055C4E, 0x22F78C34, 0xB890C4BE, 0x4DD1720D, 0x9D4E5336, 0x79E8E843, 0x3514198F, 0x13DAAD1D,
+0xD5208FB6, 0x3FC5B9EF, 0x851EA308, 0x99D8B76C, 0xB2C9D5E2, 0xC2BC7B2D, 0x7D9D6783, 0x61EA5DF9,
+0x32C65A38, 0x49AD2B64, 0x5143BCCE, 0x81F59671, 0x7BE9DDE0, 0x3F86C4D8, 0xE2EBF36F, 0xCBCCAE61,
+0xB3CE70E8, 0xC4786352, 0xDE70F281, 0x217DC7BA, 0x89B2830D, 0x29B984AA, 0xFF70A100, 0x32639F42,
+0xDC996D80, 0xB9F7F6E4, 0xC9B68C44, 0xADDB16CB, 0x48AA6584, 0x5B0E7689, 0xE8A4B138, 0x2C9F4C91,
+0x06EF127C, 0x839E5217, 0x809600B8, 0xE5B5AFC2, 0x5359FC96, 0xC839D849, 0xBD09BE2F, 0x35E733F2,
+0xB0EC9D82, 0x33AEB08E, 0xA81054B8, 0x21D2DE1E, 0x7E627DE8, 0xB6EB364D, 0x543BDAC2, 0x41176D17,
+0x8AFEB53F, 0x37783E89, 0xA8D5A3EB, 0x8D1C377F, 0xC3908195, 0xB30E4514, 0xD028C354, 0xB24B0CE5,
+0x274F6E60, 0x8BBB433B, 0xEE8CE2D3, 0x29629539, 0xBBE0A1DE, 0xD90160E6, 0x64AF97A5, 0x73A74F72,
+0x7B1C7878, 0xD44FB587, 0x8356A5BF, 0x615EEFE6, 0x932DFFE9, 0xB9B18CBC, 0x529F0E9E, 0xF9656543,
+0x017DD021, 0x99C2458F, 0x0C67F542, 0x455DF5FD, 0x47AAD5B6, 0xE9913761, 0x64CBE580, 0x55D0EEB4,
+0x2A2C81FB, 0xC7A75FFB, 0x1BC0D997, 0x6383A578, 0x1EC48F0C, 0xDB81394B, 0x4937B70F, 0x21F4C71E,
+0x9D7E102B, 0x948B2E91, 0x086363DB, 0x5526691D, 0x851DAF97, 0x8AD1890F, 0x7B523665, 0xEF39DB9C,
+0xA0DB1A5A, 0xC2A6F07E, 0x48E13DF4, 0x46837B43, 0xF04CFD6E, 0x6D69C825, 0xE3DE545E, 0x4C080E4C,
+0x5F08DA97, 0x2DF500A9, 0x0BF03CC7, 0x03043A05, 0xDF00DD84, 0x35DF1B45, 0xF0BFE37F, 0xC7ED8AD8,
+0xA9A9F77C, 0x5F1B3296, 0x38509681, 0x18F12A70, 0x450D52A7, 0x42B0C87B, 0x2E1A3D78, 0xF552DAAA,
+0x43C0329A, 0x1F21152B, 0xB64A4C6D, 0xBE9E14A2, 0x3908D25E, 0xD83EE036, 0x836F189C, 0x4CACB2E1,
+0x3934D906, 0x3AA17738, 0xDE7FFD05, 0x571BA1CB, 0x13798E84, 0xE8F43705, 0xABE9EBCD, 0x9A5CBCA4,
+0x40652672, 0x6A0527ED, 0xB41D6AF3, 0x99C4453B, 0x58DCA3F1, 0x7D0C1B04, 0x552D77C0, 0xB2CA1973,
+0x2E9AB882, 0x2FC9C3F6, 0x007734BA, 0x3A85EDA2, 0xD447EAB5, 0x4FFBD1D1, 0x71E151E8, 0x760D60BE,
+0xD94CFCCB, 0xE81B7FD6, 0xE3BFB7A6, 0x9EBA2BD0, 0x432D44AA, 0x5CD57ED2, 0xD19E3C3C, 0x84A1E3FD,
+0x0ED07153, 0x28A28192, 0xC3094B03, 0x7FCA434E, 0x0E21D5C4, 0x5E4C3407, 0xA1E57A2F, 0xAF682FF1,
+0xF7E1DFE2, 0x06635C53, 0x04B751D6, 0x58E201EE, 0x10784024, 0x26E6AD61, 0xB140FD03, 0xBD95CB9B,
+0xA9303FD3, 0x34286DA6, 0xA5374590, 0xD44C2C1D, 0xCF628819, 0xFD9FA9E8, 0x2EB9348A, 0xEDE90B83,
+0xC972E930, 0x32250348, 0xEECF111F, 0x28613923, 0x2916F34C, 0x05979457, 0x8284FABE, 0xCC77DB90,
+0xE1B06EED, 0xE5F86AD3, 0x6A07AEA9, 0x616F79DB, 0x8874D3DB, 0xB5474B1B, 0x5A3D3BF9, 0xCD566509,
+0xA72DD916, 0xD277701E, 0x7E47B65A, 0xFB9B7364, 0x853A4D59, 0x78C7D803, 0x34C3ED5D, 0xF3EC476F,
+0x95223794, 0xAAD1F81D, 0xACA83B0A, 0x2624D571, 0xE2747F84, 0x0D8BF638, 0xB8818E33, 0x8727AE55,
+0x5224BA79, 0xD43CDCBC, 0x0BE04D0B, 0xB94BDBA0, 0xC0E030B5, 0xF0ACF983, 0x4BB7A517, 0xF26F9048,
+0xD81CFD7C, 0x4BBB18E9, 0xB539B697, 0x2BC34B98, 0xB6475323, 0x2D533FDC, 0x9AF98810, 0xE95B67CC,
+0x902447DE, 0x42D4118C, 0x95545792, 0x568C8DF9, 0x5180B667, 0x87BB869F, 0xCBB2C56D, 0x73FCB5F6,
+0x8F95884A, 0xB2099246, 0x7C9B65C8, 0xFB552EF2, 0xECFAFEC8, 0x4B963572, 0xA36F543C, 0xC3325B8F,
+0x3A5F3272, 0x538CEB07, 0xA34880B4, 0x12D3DFE8, 0x8F87433C, 0x00336668, 0x311E28C4, 0xB10E0D54,
+0xE0EF0433, 0x4D527773, 0x8B3055A4, 0xE67721E5, 0xDBB27763, 0x99B449CE, 0x6A91A08C, 0x8075789C,
+0xA2D186CD, 0x42464F86, 0x7AF04758, 0xE2A023E7, 0x6C639BB1, 0xA2C83B6B, 0x69E519A3, 0x2FF22BB2,
+0x7E35B252, 0x946A5C1D, 0xFBB04BAB, 0xA8BC699C, 0x4C920C57, 0xFEFA16B2, 0xB7FBBC4D, 0xB2A0B4CB,
+0x0DBAD545, 0xE39107E3, 0x988E134E, 0x46F7F086, 0xE60E71C1, 0x5AD45DED, 0x6F60E9D9, 0x796EC1AB,
+0xE309684F, 0xFB21FAED, 0x690B9FB9, 0xCF364A1A, 0x4BD7E4C0, 0x41A7675A, 0x602C711B, 0xC29932BE,
+0xC0293AF4, 0x9E60545F, 0xC0D71EB0, 0x8DC8ABD8, 0x3D94DC3F, 0x7FC9AFE9, 0xE2561FC9, 0xFCC53867,
+0x8F663C7D, 0x36849217, 0x5D933DB0, 0x461E0B70, 0x67D6BC75, 0x9C445A87, 0x9D6A594B, 0xA06C86E3,
+0x13DD9A8B, 0x22F2C5E6, 0xAE969BAC, 0x1163DB99, 0xBC895C0C, 0x8D98B5B8, 0x42940743, 0x5FD1A466,
+0x38DED22E, 0x40298A23, 0xF16B22F6, 0x3553EB1C, 0x3AEE1281, 0x23CBA8B9, 0x4D4F457E, 0x6F45C8A7,
+0x78D2F24D, 0x7E7E338B, 0x437352E1, 0x04387E87, 0x1B28FEC7, 0x9437C6BF, 0x64B88BFE, 0xA762161B,
+0xB2B0A017, 0x51F6C5BE, 0xA73ABD54, 0x780CFE6D, 0x2AEC6469, 0xE4920D1C, 0x605FC97F, 0xEB901F59,
+0xC1F7E8E3, 0x0DFEBDF1, 0x2EFFA3FD, 0x415CD158, 0x1BD5A46B, 0xD9CF758C, 0x54EEB702, 0xD796752A,
+0xC34735F7, 0xDF64DAEC, 0xBEEE84BE, 0x995A0F12, 0x63EE9254, 0xD1C003A4, 0xD6F3DB3D, 0x2A9B3EAF,
+0x7E94BDD9, 0x3EFDC809, 0xF0ECC066, 0xB6331977, 0x4602377F, 0xEB41F9D5, 0xC43D236D, 0x35316C9F,
+0x54E4A914, 0x98017280, 0xAB256A1C, 0x2BC5E8A7, 0x224E8DD1, 0x36ED0CE0, 0xF2E45409, 0x948195F4,
+0x395F91EE, 0xD0676E3B, 0x456C51EB, 0x32B4B1DD, 0x0F4CA30B, 0x2D4A6347, 0xF7163B07, 0x16EED54F,
+0x17916843, 0xD2F2A1C6, 0x825DEA09, 0x28525D1F, 0xE1D9FF0B, 0x4E1559ED, 0x8718AB4C, 0xC0252706,
+0x48966759, 0x6B0CBE3F, 0xF5E97CBB, 0x533F03B7, 0xC731C6A2, 0x001C9B20, 0xE46C1339, 0x55D1EF4F,
+0x7A306CFD, 0x1183D511, 0x639ED135, 0xE2598633, 0x19DB136B, 0xFF086232, 0x8FF3C8B8, 0x250BDB31,
+0x0B2A0F27, 0x2B9BBB9D, 0xD2587582, 0xC2022DF5, 0xFA0B7592, 0x2184B648, 0x2F893D8F, 0xC85601D7,
+0x2580DCC9, 0x8CA4C3E5, 0x18F0E961, 0x97CC41F7, 0xE2147ACC, 0xD485D715, 0xEAE77EE0, 0x3F4F5671,
+0xBC26D9B8, 0x1E9A77E7, 0x60CDD53F, 0x58A1EAA5, 0x2682D69F, 0x59A6D5EE, 0xFA2BE12A, 0x139F71FA,
+0x340DB815, 0x863D4758, 0x99CACA7D, 0x3ADBB842, 0x35462DF5, 0x8C53BB33, 0x7CCBDA8C, 0x6FB65602,
+0xB9463F87, 0x94B51603, 0x552D1D9B, 0x211AF830, 0x9C07D646, 0xF1BDD046, 0x8548FC54, 0xF7249852,
+0x26A865CF, 0xEF1953EF, 0xDDB2BD8A, 0xD6EA1208, 0x54E5D2E3, 0xC0B78C34, 0x055563D0, 0xF8310771,
+0xC7437339, 0x336F34C1, 0x3FA9FCEF, 0x9C3BB1DF, 0x6F5EB725, 0x3A5867FB, 0x8C26FFBE, 0x195FFDD2,
+0xED46EA1F, 0x25993AC4, 0x2699CEF2, 0x2B110FAE, 0x6B78DB76, 0x5407D865, 0x3B64CADE, 0x4F1ECC1A,
+0x533473D3, 0x36141CE8, 0xADDC9AB2, 0xBF68FAB8, 0xB0B672CB, 0xBB2CFE0D, 0xF603E9FB, 0xD8723897,
+0xCC7799CB, 0xCE21B27D, 0xB5F3AC6A, 0x69314296, 0xD23DF8DD, 0x6BCFF12F, 0xC52CD869, 0x13C9F4AD,
+0x2F6586A4, 0x7A120D05, 0x3EB60BED, 0x8E0EC059, 0x112AABDA, 0x047552AF, 0xE0DE3548, 0xEAE939BB,
+0xEEE96898, 0x8A47FF87, 0xCEA24DAE, 0x4AEE1818, 0xA7C2425B, 0xFF24CCA9, 0x2BF243FC, 0x630BEF2C,
+0xE43AED28, 0x6127C32A, 0xD4CE8706, 0xBC398EE5, 0x64645ABF, 0xD314A0FF, 0xC6E3B71B, 0x52DEA33B,
+0x060CF222, 0x98A2DCDC, 0x3A0A99B7, 0x073AE8F7, 0xF8A87CB4, 0x44538EFE, 0xF40BB6D3, 0x6191D3A7,
+0x1EC41415, 0x32D1AD4F, 0x43902DC3, 0x4F767BF3, 0xE7816A6A, 0xD31AC60C, 0xAC6EE65A, 0xF887311D,
+0x7DFE5126, 0xFBE04568, 0x13AA60BB, 0xE33A7B18, 0x27608AE4, 0xC4FC0073, 0xC58AD44C, 0xA83DD26A,
+0x6D038EAC, 0x384EF30F, 0x47A6DFBD, 0x58D3D76A, 0x8F19353B, 0xFEFB0273, 0xFFAB0AE8, 0xBC904D8C,
+0xCA72CC05, 0x0F6C6F23, 0x3EF2FEBB, 0x865051B7, 0xA8521B81, 0xD7F211AF, 0x97D39EF8, 0x9076E0C4,
+0x1600AD32, 0x6BF68235, 0x1FE3C658, 0x65D47C88, 0x4ACAD51B, 0x69566CBA, 0x6E26A79E, 0xD876A0AD,
+0xC3A9D2BC, 0xA8196671, 0x22087999, 0x50714220, 0x970A4514, 0x30AE7CC8, 0x84A0EE73, 0xF67AFA3F,
+0x474FD50A, 0x19BA79C1, 0x05E58162, 0x0580C5DC, 0xA0C4319B, 0xF8360ACC, 0x348A0387, 0xE1E53FCD,
+0xF643D721, 0x165E0244, 0x3A5F6DC7, 0xD78D95CF, 0x3648AD94, 0x20FA64D3, 0xC9454345, 0x6D219715,
+0x91DA2613, 0x4E936460, 0xDA4D0FFE, 0x04C40DC7, 0xF02F8057, 0xDE1CBAD7, 0x30C05D3B, 0x4B58B609,
+0xD245506B, 0x07DF8D8E, 0x9EC9049B, 0x6968916B, 0x853CAD39, 0x5356A9E9, 0xA2A6A512, 0x51128438,
+0xB2D3B83E, 0x6C10AE1B, 0x2B62A082, 0xD0D72549, 0x785C4584, 0xE9BCA25A, 0xD68A4564, 0xC770C579,
+0xFC00F230, 0x29BC972C, 0xFB6DBD9C, 0xBC4EB56F, 0xA8926A03, 0x9B5B8501, 0xD71F5FC0, 0xC40CD374,
+0xC6AE7A8D, 0xE33320EF, 0x23BE7D3B, 0xCA47AD18, 0x06EFC77D, 0x109EE3C4, 0xBED0BBA7, 0xDE30251B,
+0xEF8181C9, 0x73C5EF98, 0x6E4E540B, 0x25A242F7, 0xCC00D0CB, 0xF699289C, 0xB7AB4FEA, 0x37DC86F3,
+0xDDB9A741, 0xE03F278A, 0x86DBF399, 0xE1F4DD48, 0x02500E80, 0x3131AFB3, 0x5C38058D, 0x7B430FCB,
+0x22F0B7F5, 0x0541EA0F, 0x1AF8B4B9, 0x56F86686, 0x83E24B28, 0xEF214B9C, 0xCD07FD13, 0xD45DD40C,
+0xFFA555EC, 0x8C84B267, 0x0D71DECA, 0xAC118533, 0x0CDC66DE, 0xE9859509, 0x30125EFB, 0x0CD9D6BA,
+0x85B917AA, 0x24EAD987, 0x6E07082D, 0x3D3E8E1D, 0xF38E3A06, 0x67E282EC, 0xEB87D7F8, 0xD12D4DFF,
+0x0E22A4D0, 0x0624DCB5, 0x8FB8B874, 0x5A857D33, 0xA060C3D3, 0xA9178FE6, 0xFF2F72E6, 0xE29313E5,
+0x954F857D, 0xA0B75330, 0x35153AD1, 0x22263415, 0x4AE2F314, 0xD0994CC7, 0x95302B0E, 0x0B01F67E,
+0xB591FBF2, 0x4E724070, 0x7763C26A, 0x64E5FFD4, 0xB5B05C8D, 0xB44F7247, 0x695C68C4, 0x9A8E38D4,
+0x21E1D184, 0x0528ED59, 0xC70B57DC, 0x5822B5D9, 0xFB63BA6C, 0xAAC08386, 0x18F74A06, 0x93278FF2,
+0xEEF8076D, 0x88EDABC7, 0x3998B3C9, 0xF22A2B55, 0xB3CFBD40, 0x4658E327, 0x5155B4EC, 0xFBFD7C1B,
+0xCB6B94AC, 0xC1BE357C, 0xB5AB4EA4, 0x7075BC51, 0xB450E0B8, 0xE20900A6, 0x73E3A919, 0xC14E6884,
+0xA816B32A, 0x38FE0881, 0xBC3F8C5E, 0xE1C38D50, 0xB498113F, 0x8E0A4E99, 0x28A184A4, 0x2FD14E33,
+0x68F75AF8, 0xD61D8053, 0x4FD0D72C, 0x5AB9508E, 0x95FE22ED, 0x1565A7B6, 0x3713F441, 0x3E3D3AA5,
+0xAAD2012F, 0xCC62C54C, 0xC0A41386, 0x037ADA1B, 0xCF3844FB, 0x964AF033, 0x4E48D635, 0xEE87A9EA,
+0x9F8EA176, 0xFC81DB6D, 0x799356D3, 0x448A7E8E, 0xD4CE34F7, 0xEBA64876, 0x5691ED78, 0xCE0CE76C,
+0xDDBB36FD, 0x13F444CF, 0xDF787099, 0xBDE494C0, 0x1E232189, 0x72C24B93, 0x4D6DE155, 0xA9E38A34,
+0xAE8EADE5, 0x6204EF79, 0xAF89B99C, 0x9B39FC9F, 0x6886A44D, 0x8CF41D08, 0xCCFAB6D7, 0x547DD709,
+0xFF2CF5FC, 0xF67A5BEA, 0x5335D0D8, 0x00BE8AAA, 0x2A001573, 0x26144E04, 0x602A0578, 0xA37A87D1,
+0x3E3268F9, 0x51F5886F, 0x9DDF607E, 0xD97C912A, 0xC9F80B32, 0x4A64DF13, 0x1C7E695E, 0x66CE3949,
+0xFDE5FB00, 0x67D3374A, 0xE0FB228B, 0x230EF4AD, 0xCE39D217, 0x13393065, 0x4AD3B826, 0x31E81F77,
+0x2F0DD9C6, 0x810BF6AA, 0xE1B568E1, 0x61EBE567, 0x2DF24EAD, 0xBF1EC24F, 0x80B35B31, 0x197835BB,
+0xEB90E98C, 0x413FD43A, 0x8B313488, 0xA047628C, 0x1161E455, 0x0DF32D68, 0x2C016EA6, 0xCEA9F0F7,
+0x574E1A5D, 0xCC7091E1, 0x07CB7DE4, 0x99D78F08, 0xB6BB49CE, 0xCB7E387A, 0xD11D6AEA, 0x27F26662,
+0xEEE4D0AE, 0x0FBF7588, 0x2BC1E1BF, 0x34419B72, 0x979B3851, 0x26BD4A3C, 0xC149C72C, 0x0EFD75F3,
+0x1BB2F2BA, 0xFB3AAFDF, 0x4BF36687, 0x679CA93F, 0xCEEB8C27, 0x00FFC14F, 0x669B76C1, 0x51B033E5,
+0x4F65675D, 0x9D370CCC, 0xB7359EE3, 0x5C060DEE, 0x6586D8F9, 0x10FC83D6, 0x42FF4852, 0x25BFD6D9,
+0x9C7976A9, 0x08177476, 0x02060825, 0xD4D9DA70, 0xE400F0F5, 0x7620B38F, 0x586C9774, 0x1D90A587,
+0x489AC336, 0x0FC69EB4, 0xF08DD407, 0xFD7B0920, 0x675D65E8, 0x0A26D566, 0x6289AF5D, 0xC4E56087,
+0x9D3ABE06, 0xDAF1CF85, 0x994A0194, 0x19F0A1A6, 0xA3A9420D, 0x9A442CE6, 0xF10FBD6F, 0xCA38E429,
+0xD1A0FF09, 0x489FE513, 0x2093F1FB, 0x29B731F5, 0xA0F80F8D, 0x9CF80B4C, 0xF7280B61, 0x0309BC32,
+0xFD3BB338, 0x1B4EF398, 0x0CE94C20, 0xFDCC964F, 0x1A2DF0E0, 0xB0B8B624, 0xDA4A08AF, 0xC44639EE,
+0x3F1AFDC5, 0xC09FA8B0, 0xEDCC8F84, 0x53B85DDE, 0xC19605CD, 0x2883B9B4, 0xCD009B08, 0xE539E518,
+0x42D91F14, 0x77DCCE09, 0xB8814CEE, 0x5F521CC9, 0xC9748619, 0x942705D3, 0xE04FCFBF, 0x17B8933D,
+0x52E9EAE4, 0x0DCEAA46, 0x038FD12B, 0x9E3B731E, 0x8E0FACA5, 0xEF0F3017, 0x81FA5F64, 0x3955ED0E,
+0xF550D798, 0x294E5586, 0xC67BFBE1, 0xAD415CF7, 0x4C9CBA0B, 0xE065918F, 0x715AEED5, 0xD43E88F7,
+0x39F73EDD, 0xFCD0BCDB, 0x9874740D, 0x131590F7, 0xFA9EBFAE, 0xE67AB2F7, 0x97F3D8E4, 0xFEC775DD,
+0xD38CDD03, 0x683C4BEF, 0x6AA950FD, 0x98660E18, 0xB6AB1BF1, 0x52E7E410, 0x9D757C6C, 0x1F559582,
+0x0D8D5936, 0x074203EB, 0x0590CC47, 0xDD748813, 0xB430B3F5, 0x90714908, 0x1987DBF3, 0x55B6BC11,
+0x421EEBE5, 0x7C81DB9C, 0xC504EC2F, 0x0A221475, 0x9D126233, 0x811C210E, 0xCACDF265, 0x442A451C,
+0x88CCBD5B, 0x0448C524, 0x4778809B, 0x21EACD21, 0x66A5C9EC, 0x5517E18D, 0x6BF0667D, 0xCA52B87E,
+0x1EF38B9F, 0xC2F0C981, 0xE66A752D, 0x886CAC63, 0xBEA3DA36, 0x9CC4488F, 0x5D81E801, 0xFB4F5AA1,
+0x6C328A32, 0xF77544C3, 0x4D390A7C, 0x73091F06, 0x05F54E33, 0xBA43C4AC, 0x8BB67BF7, 0xD1A19853,
+0xAC62E15C, 0x9750C011, 0xE1460CF8, 0xD97473D1, 0xF1D37E92, 0x092E6B8B, 0xB8CE9ABB, 0x58A4C6B2,
+0x1D0D846D, 0x44054F84, 0x4814AE77, 0xE808388B, 0x21F1F05F, 0x3AC65EB2, 0x122FB031, 0x9B7A2A7C,
+0xEBB5C6F4, 0x62B42DE1, 0x81BB1190, 0x813FA69B, 0x349BB016, 0x456189D0, 0xC85BC499, 0xBB3883C9,
+0x4B7C1E98, 0xB9FD732B, 0xE885F480, 0x067B8DB0, 0x7AC34FC0, 0x5A5CCC1D, 0x22DD501D, 0xCAF7099F,
+0x492FC4B3, 0x087AE5F1, 0xA6FE3814, 0x2E19C926, 0x0108218F, 0x6BB06129, 0x05A841FF, 0xB0240321,
+0xE440EF69, 0xD811F2C7, 0xD1F7B087, 0xCCEB04B1, 0x7C29F675, 0x57948E0F, 0x9A6B22D0, 0x2C34D3F3,
+0x76FC0BE7, 0x8BDAEE63, 0xC9600275, 0x3D5DD1BD, 0x8D647386, 0x7363276A, 0x86756CA2, 0x7B83A9BD,
+0xF9128AF7, 0x83B164A0, 0xAE3D2780, 0xFE1BC31B, 0x03B9019D, 0x0842B1AC, 0x1AB2E954, 0xE4D284C3,
+0xDC9FD1B7, 0x9C025189, 0x31301AFB, 0xEF7F5CF0, 0xE15C0D43, 0xFB9B8F28, 0x8F3A43F4, 0x6151AC26,
+0xE27D0055, 0x21CFC4F5, 0xF09E7B57, 0x77A1E17C, 0xC35363B1, 0xCC65A776, 0x36BEA32F, 0xC50B94F2,
+0xD80C98CA, 0x99DDDF01, 0x1BDD0318, 0x4EDE1674, 0xCA5D7EB5, 0x1140CB2C, 0x8A4469A9, 0x0C1BBC2E,
+0x3CA01482, 0xF25D1C52, 0xD02421D5, 0xA5F30EB4, 0xD45AE785, 0x8D556260, 0x26A514FF, 0x1CC2D872,
+0x2F06D1C6, 0xBD84A82A, 0x95F9FA6E, 0xE6AE57DE, 0x96D53EF7, 0x54B6849D, 0x8FB0FAF8, 0x9CB9F411,
+0x865882CD, 0xB0A18F24, 0x8980A961, 0x5E563A41, 0x4764419D, 0x0E129A53, 0xC62C3292, 0x8613F64F,
+0x89BA4D23, 0x1AADA183, 0xDA536EA4, 0xF37325D5, 0xFB5AB17E, 0xA6DA31DB, 0xA9671FF9, 0x5B6E51CB,
+0x2C2E97C0, 0xEE194E29, 0x249ADD35, 0x1E5FF3EF, 0xA4729706, 0xF222F7A5, 0xD6C6DB43, 0x52F52E3A,
+0xEFA8C453, 0xDA9B09E2, 0xB0EA303F, 0x05A94078, 0x92584DDD, 0x4D0F2861, 0xDAABE012, 0x980EB838,
+0x7BDC84C2, 0x63631727, 0x6B04E939, 0x4B4F5294, 0xF4FAA32B, 0x1C326F54, 0x32B8FED6, 0x849ACC0E,
+0x5096497A, 0xCDC30128, 0x64E1CBEE, 0x5E82EC19, 0xDADE089F, 0xC04BCE65, 0x16634142, 0x99E1B4DF,
+0xF7F8B2FD, 0xC4518EEB, 0x39F2EF22, 0xFA282E54, 0x22D149DA, 0x7D92B591, 0x2C0EE9C8, 0x67BD61AC,
+0xD9B731CE, 0x3CAA5230, 0xAF7D9732, 0x270BCD4E, 0x701153AE, 0x3FE071B3, 0x81A056E1, 0x2BC9DBC8,
+0xB4A8A1DB, 0xF13C9420, 0xA68122B1, 0xFA6F9056, 0xE0291F66, 0xD2F1D1CF, 0x70A2143D, 0x1D141895,
+0x98A1A194, 0x56608301, 0xE6DB8E5A, 0xCC75B88F, 0x49AA8BB4, 0xE8D233BC, 0x11DB4518, 0x2B12A2D3,
+0x22D3D28F, 0xF879BBB4, 0x4EF4C0E8, 0x01B2D4DA, 0x2AD8F37D, 0xF176AD75, 0x87B3DEAF, 0x446A8B8D,
+0x6AAD8F56, 0x8BDAFA80, 0xA003DF9E, 0x1EF9B6E1, 0x2045996E, 0x09295DD5, 0xFFDECA9F, 0xE22C82C8,
+0x659720E4, 0x91A1B3F6, 0x242C1CAA, 0x4768F83D, 0xE6908156, 0x980E74FF, 0x897CD8B6, 0xEA92E440,
+0x82883380, 0xC0AE1916, 0x56926B79, 0x1815CEC5, 0xF2406733, 0xE31FA444, 0x0E619271, 0x21CD6B01,
+0x8D95E377, 0xF748869E, 0x1D6DFAA9, 0x9793C5B5, 0xD8B6A397, 0x4C194B0C, 0x0F00E4ED, 0xFAA39ED3,
+0x3677069A, 0xF25FD611, 0x7BEB4AFE, 0xFAEA5893, 0x22120350, 0x129663FC, 0x410E25CF, 0x8EF0DD04,
+0x3F620822, 0x339EAD84, 0x052EB8F9, 0x810BA260, 0x1FC26F27, 0x0EC339B1, 0xE8730857, 0x5EEC94B8,
+0x639800FB, 0x1706EFAD, 0xFFAE9747, 0x9026640F, 0x0A88F1C1, 0x505B4D74, 0xCC56CDDA, 0x90E4F7D3,
+0x1D223811, 0xAF65E34E, 0xF16153DB, 0x446B13EF, 0xA5065894, 0xFA00EE46, 0xCF0EBCB3, 0x1D3FAEC1,
+0xAA95DCE3, 0xD85EFEC1, 0x54D8225E, 0x992FEFB5, 0x0A4DFA28, 0x16848700, 0x6B60DBA3, 0xFB5D5A7F,
+0xFC92D396, 0xE69FCB77, 0x5C7AEE3C, 0x82D49858, 0x808EB956, 0xEF29F272, 0xB37C5108, 0x1C7DAE24,
+0x696C6F28, 0xFD86B065, 0x22AC072D, 0xB601CC16, 0xA2E89A0C, 0x7A4FAC65, 0xF8957DFB, 0x158BE378,
+0xA50538FE, 0xA059217A, 0xE209E9EC, 0x9146FCBD, 0xEA3E96C2, 0xB74DC285, 0x36A469DB, 0x66C9338E,
+0xA4230149, 0x2CC9F892, 0xC64531EC, 0xDC74C523, 0xFB82A79A, 0xDA7B2A5C, 0x487BD13A, 0x1E5A04D8,
+0x1AADEF8E, 0x23D370F9, 0x63EEB3AE, 0xE373C9E3, 0x4E8C2F11, 0x68121D06, 0xFF02E7EC, 0xB5B22EC4,
+0x3AD6DEA2, 0x3F975916, 0xB5842A2A, 0x0DE9CCBC, 0xEEB2C34C, 0xC739FDCD, 0xC4A30E23, 0x6BBE3FE3,
+0xCF24B864, 0x80092DB9, 0x69500541, 0x781584FC, 0xCF33709E, 0xB7FDFB5A, 0x8EFB2FF9, 0xE8B7D647,
+0x25B859B1, 0x96668BCB, 0x8CF99637, 0xBB4D7F74, 0x5516F137, 0x7C634B93, 0x0AA2947E, 0x17142FF0,
+0x9B838E63, 0xD90A74EA, 0xA7EA5B78, 0x5C9E115E, 0xAE0FB085, 0x8B8AB682, 0x1328F602, 0x3E75D88B,
+0xF77D0DF5, 0x1CA3A9D3, 0x41792048, 0xA0F81B93, 0xAAFBD80B, 0xB6563322, 0x1F423774, 0x16403766,
+0x87670713, 0x9545DAA7, 0x9A34B1FC, 0x5EFB7501, 0xFB69DB38, 0xA89641EA, 0x117562F2, 0x9AC5E260,
+0xD2AFE4CF, 0x2DD110D5, 0x0564D3BC, 0xC1649ECF, 0x9A3AD12E, 0x8392F7EE, 0x85079A88, 0x18761EFA,
+0xAECD8793, 0x1C56CD4F, 0x14FE4F01, 0xDF4D7A5B, 0x8E4FAA5B, 0x71600998, 0xAAE6E933, 0x8F5B38B2,
+0x182191EF, 0xCE84D3C5, 0x6DC134FF, 0xA473E390, 0xFD208A03, 0xD7AB08F3, 0xFD217FED, 0x8C816126,
+0x11276B1B, 0x2DAC91FE, 0x32E17705, 0xD4CA63EC, 0x7911DC5A, 0xF51CDA5E, 0x4BB1171D, 0xD970C5B6,
+0x80EA059C, 0xA7F36E0A, 0x7C90568D, 0x954C1793, 0x0496E3C3, 0x8C0BAB7D, 0xDFB0FC5A, 0x4F7FB6A4,
+0xA4C930AE, 0xA9642E0B, 0x52E6B4E1, 0xD4001701, 0x2069E3E2, 0x05299C99, 0x4D3E9286, 0x89AF15C9,
+0xED6D9F9A, 0x801C4FD4, 0x24B37044, 0x355B2BD2, 0x1FEC8EA0, 0x174B4245, 0x1CB13E88, 0x3EA8B476,
+0x43B14C19, 0x803D361C, 0x4D7E6A3D, 0x9234FCAF, 0x17EF07FF, 0x9B458FE2, 0xD5E975B3, 0xD549272F,
+0x7820BC9D, 0x12F08DA7, 0x72E954AC, 0x888AE130, 0xBEE8BCDF, 0xB3E02ABE, 0x2D0AF025, 0x19044F3F,
+0xAA54A43D, 0x4D43E77E, 0x817C5F23, 0x5E5BC8E2, 0x2535A8C1, 0x3C9DDCFB, 0x13F3B33B, 0x7C419A21,
+0xF9A07D29, 0x7FE28F4D, 0xA9BA324A, 0xC65B64D5, 0x061591C6, 0x67545EED, 0xB148D187, 0x4336231F,
+0xF665591A, 0x14B680CF, 0x639AEC95, 0xB2003C9C, 0x348350CC, 0x83108DD6, 0xEDE1610B, 0x4341A65C,
+0xB08DB0C4, 0x1D57D6C6, 0x146909C8, 0x88FD3356, 0x9C9AB7F0, 0xC80FFE1D, 0xF57AEFF9, 0x57FEEF9E,
+0xEAF073BF, 0x8D6280FA, 0x1ED959B9, 0xD405D886, 0x22430C29, 0x005018A4, 0x5D05291A, 0x7DEF7D7F,
+0x228D4074, 0xC18F0619, 0x946512B4, 0x23D57F06, 0xA941B627, 0x6CD88020, 0x368CA3D9, 0x00539EDE,
+0xDA3FED59, 0x673D7ED2, 0x741BCCE4, 0x09F5EE56, 0xEAF8334B, 0xDF5457E3, 0xB6B5E462, 0x4BCCB7EC,
+0x6B8C94F8, 0x9243ECED, 0x3657F2D8, 0xD8230768, 0x6E1D4DBB, 0x8E26C53D, 0x82533D6D, 0x8464AEEC,
+0x5A604CF1, 0x91A9239C, 0xF3D35CDB, 0x47DB1A5E, 0x6C4E04A0, 0x4F4038B5, 0x39C7BC8D, 0x5A2C8605,
+0x4C9FC51D, 0x8841917D, 0x2D20208D, 0x01151C8D, 0x57FB0470, 0x052857CD, 0x3F7CE3B4, 0xC3D653DF,
+0x5B3B55F0, 0xBEAFCA54, 0x7E4EE642, 0xC1A0826B, 0x292233E7, 0x1D1EBAB6, 0xE446EAC1, 0x8458CA53,
+0x3A56DCAC, 0xD2EF4517, 0xCFF76E1F, 0x70EDFCAE, 0x8C4CD328, 0x5DD0C4D3, 0x4B894687, 0x53095CDB,
+0x045C5A29, 0x9500C6DC, 0x3035AA8B, 0x787CDC33, 0x401681C2, 0x207764A6, 0x74D38F7F, 0x430E6309,
+0x79C12988, 0x1FBA0320, 0xF46EDDA9, 0xA0738018, 0xB6BD49C7, 0xB5D65BAF, 0xB1EB4FF7, 0xE852705B,
+0x46B55498, 0x8C9F138A, 0xED7C0B68, 0x196B52D9, 0x6D9AE8DD, 0x03D79D3C, 0x46980008, 0xE01C520A,
+0x9B51C00F, 0xE1830430, 0x8425F797, 0xBCF365FB, 0x0B4A353B, 0xA6F4FA30, 0x37E1AD9C, 0x2158EA57,
+0xFD39A594, 0x34EF6DC0, 0x65A7A8D8, 0x7B753287, 0x47EDF9B1, 0x92D9DFD9, 0x6597F7B0, 0x31A5CCCA,
+0xAB92E4CE, 0xE57AC975, 0xE736E090, 0x0DF8EE67, 0x2FD7A554, 0xB8F56868, 0xC1963C57, 0x1E9927BD,
+0x48AE29E9, 0x82B9F916, 0xE8AFC239, 0x0D024B73, 0xAB428000, 0xBA3B63CD, 0x38AFCEF9, 0x30042B27,
+0xF8E7E9BF, 0x69636017, 0x626B187C, 0x541C1125, 0x627540F5, 0xD679BB76, 0x4C7F1DDB, 0x67CA972A,
+0xD3CA0498, 0x1F7445C0, 0xD3B59DBD, 0x1EB089C9, 0x0953B34D, 0x49CB0AEE, 0x95748CFF, 0xF6EE787F,
+0x8044EF79, 0xAC029510, 0x40F0031E, 0xA055B0D1, 0x4DDE391C, 0xFA365678, 0xB2C1E48A, 0xCF248897,
+0x1D356C14, 0xEBA37580, 0x454DBE80, 0xE622A4FD, 0xD89F2304, 0x3A375AD8, 0x78D6C24C, 0x6D7EE466,
+0xE6B36A82, 0xEBEFCE5C, 0x7796083F, 0xF3E3FE68, 0x752FA539, 0x2983F7CA, 0xDA093CA1, 0x8D15B0B6,
+0x4C097DDD, 0x5D7CB758, 0x555BA330, 0x859AA3B9, 0xCE8AB51A, 0x4228113A, 0xAD3E39EB, 0x8A072098,
+0x6FD2EA48, 0x6E4FCB3D, 0xFF1C6DAF, 0x48B6DFBD, 0x27BE931B, 0x1805DAB9, 0x3D45113F, 0xA1607198,
+0x004C7656, 0x08D29A97, 0x5BB7377C, 0x2956EDBD, 0x5A25DA4E, 0x5CFD2D2A, 0xC635D67D, 0x0F6F1DFD,
+0x422433E7, 0x5552B72A, 0x2DEC6E1D, 0x475FC1B8, 0x1373C03E, 0x7F2C6F4A, 0xE47C51E1, 0x89D01450,
+0xE0DE3780, 0x168CAE78, 0xCDF0DEF9, 0x1EB418CE, 0xD0FEF0AB, 0xCD7B78A1, 0xCB0C8583, 0x30240348,
+0xF8D82783, 0xCD425A9D, 0x593DF2E9, 0x8F5132EF, 0x21526A1A, 0x79E8A843, 0x9357206A, 0x305761E3,
+0x3AB6F0E3, 0x1CCEBDBA, 0x87F628E6, 0xE2773238, 0x1B0A58A3, 0x42D817BE, 0x5FF74CB3, 0x8F7182E4,
+0x66252FDF, 0x0ACA96B0, 0x11809F03, 0xEB95086B, 0xE0A28B32, 0x1DBEBD29, 0x2B854085, 0x80301076,
+0xD5D8D473, 0x87F0791B, 0x30C86373, 0x59EF1FC5, 0x2F5E39DF, 0xEF7BD849, 0xBB69D2AF, 0xFB6B6D46,
+0xA02DAD5C, 0xDD5C8ADD, 0x75C1C033, 0xCCAD652E, 0x6272A8E7, 0x285CA956, 0x38C0E02A, 0xA4A017C7,
+0x4F9FFAE9, 0xA0B95A64, 0x72CFF137, 0x5D40B719, 0x4BD01C7D, 0xB90FFD7B, 0xCE2B3DEC, 0x042F4A77,
+0x923C5414, 0xF4A91ED8, 0x11F7F20B, 0xF54BE684, 0xA02183BA, 0xBA6627C1, 0x0B285361, 0x1271BEAD,
+0xD67A990C, 0x3643956E, 0xE11317C0, 0x61C8C177, 0x78342109, 0x81F4AE28, 0x1120574D, 0xE99C63A7,
+0x205AF80D, 0xA93B0700, 0x15C2FDBF, 0x5BD226CF, 0x81B6203B, 0xB5699F4A, 0x07E7C322, 0x08D391CA,
+0x80E2D984, 0x369CF6C0, 0xB882FD79, 0xF5295F33, 0xC3AA8E91, 0x765006A9, 0x92500DAA, 0x55C7B82E,
+0xF1DB8FF6, 0x206E5CD7, 0x164DFEA3, 0x175BC836, 0xCDBE5FF5, 0x5B7DA41A, 0x72693C00, 0x4C5E4079,
+0xEABF0065, 0xCC0BB45E, 0x4CCA5123, 0x3000DB51, 0x3B5A62B7, 0x845E026B, 0xD9B6E5F1, 0x6E7BB93F,
+0x18B04050, 0xBCC81073, 0x74AC2240, 0x4E3ED4BC, 0xD96B0801, 0xF025BAAE, 0xDD3EE232, 0x012DFBDC,
+0xB8FD4927, 0x1795FB44, 0x0627F2C8, 0x72EC5AA4, 0x8E9A2676, 0xA4E549CC, 0x3F6BDAFC, 0xF3368D26,
+0xDB9739DC, 0x127DC849, 0x19DBBF76, 0xDED2AA09, 0x97AFD915, 0x01674F29, 0x2332B78E, 0xFE5BB8D8,
+0x19F881FF, 0xD4D55310, 0x242C3FAC, 0xC588456F, 0xB3DD283D, 0x2DD11D6B, 0x103DB442, 0x218FE310,
+0xBC799816, 0x9BB9D96F, 0xC90CB2CF, 0x9DEB35A6, 0x5F4A3500, 0xFF7CF6EE, 0x01C91769, 0x27C89EAF,
+0x70A67FAA, 0x68C1D1BB, 0xA7C0DD65, 0x86FC6E08, 0x3361D4FB, 0xFF7B93DA, 0xA8430FFB, 0x301AD099,
+0x91300BB7, 0x8A293B42, 0xC9FB351A, 0xF4E499BE, 0x99063496, 0x14086479, 0xAEF9AAF7, 0x77C19081,
+0x2186F1FA, 0xD57CEB23, 0x195F4047, 0xD96E5514, 0xB0CDFAC0, 0xBB0C3ED4, 0x77284CBB, 0x9DD748AA,
+0x83CEE028, 0xF4C2EBEC, 0xA9EB9FF9, 0x900466D9, 0x8CA4ACE5, 0x587E8529, 0xFB165BD6, 0x3F3243DE,
+0xF5B16B07, 0xA0790AF6, 0xEE4FB696, 0xB5DE333F, 0x4C162BE5, 0x9A9D57E4, 0xCC7C9CA2, 0x2959B1DD,
+0x7788EE55, 0x64A00A44, 0x9BFF5598, 0xBB4441F1, 0x0173BD83, 0x8B9E58B8, 0xFD2A1842, 0x82A1E237,
+0x92656B68, 0x060594F6, 0xE8B0C8BA, 0xDF777A33, 0xE867EADA, 0x240CD390, 0x958D7AC1, 0x2AE529B9,
+0xC1E8B028, 0x702799AA, 0x3892FFBF, 0x35CEEC69, 0x264EB46C, 0xB2EFC8A9, 0x1980885F, 0xCF6FAF84,
+0xDB0BD537, 0xDC51E208, 0x93D1FA5A, 0x4452785A, 0xD2D31A48, 0x66019F86, 0x7E42CF67, 0x32631521,
+0x5674C763, 0xBA2DCB23, 0x117AF968, 0x06F75A40, 0x42A05B32, 0x4A40847F, 0xA301990D, 0x62727E2D,
+0x091B4519, 0x00284F87, 0xD957D556, 0x2ED10E93, 0x0C451194, 0x0153B77D, 0x16F68FBC, 0xCD8C51F9,
+0xFFE73BDB, 0x5EDD32DE, 0x55E2B550, 0x97C80702, 0x4220F947, 0x62FE2E1E, 0x95ED7AD3, 0x630014ED,
+0x1F16C236, 0x5CF9CD5B, 0x7970595B, 0x23895DC5, 0xFE94A591, 0xF658F0E5, 0xAA15C11A, 0x61889B63,
+0xEF823B6D, 0x5D6DC36C, 0xFD155068, 0x160D0E43, 0xA2F1307D, 0x17290DF2, 0x2F858F0C, 0x0D659267,
+0x22647E61, 0x560F1EAB, 0x29532764, 0xE531F5D4, 0xBF93A02F, 0x757F37F5, 0xBF5074D4, 0xC0285E05,
+0x49C258D0, 0x295E42C4, 0x43FBBBBB, 0xA768F93B, 0x76E971DB, 0x8A1167A7, 0xBAB7DCD5, 0x50F33BE4,
+0xD44776A6, 0xF7284E3E, 0x8AC4AE76, 0xB15480F6, 0x110ED8C4, 0xA0E17903, 0x6AFE8B7D, 0x1D087E1D,
+0x29B199E5, 0xBA1D660F, 0x4DE0C22A, 0x6841F009, 0x57CB5A83, 0x23DCB7D1, 0xE321B291, 0xE8B66BE3,
+0x7E0B9198, 0x44B3ADB6, 0xB729FB90, 0x1650063C, 0x49055C73, 0x29834884, 0x553BFA35, 0xE892DF35,
+0x74590C9D, 0x17006D3C, 0x91C0FCC2, 0x7A89013C, 0xDEDCF218, 0xFE0BD31E, 0x29C1327C, 0x6FE5AB7B,
+0x3D68FE80, 0x6F6BA4EF, 0x24A7ADDA, 0x65684692, 0xC9A32394, 0x0449F5FF, 0x4F76A7E7, 0x002BB46A,
+0x0932E516, 0xF6B8AE93, 0x588FD704, 0xC9D0B05B, 0x7186B365, 0xAD2EB8E5, 0x35800914, 0x98ECB97C,
+0x3D4E2489, 0xD96713B7, 0x37376E57, 0x720DCF40, 0xC33532A0, 0x0350FF52, 0xD01F4ABB, 0x9F661851,
+0x18D44E7A, 0x03EBAEC3, 0xF967CF14, 0xA56BA584, 0x330597D5, 0x44CD62A4, 0x126867E1, 0x65282ACC,
+0x32471863, 0xE77BF9E9, 0x515F4FCF, 0x9DEDBA20, 0xEB8E7E00, 0x945D8F76, 0x6EB0029A, 0x6BE13605,
+0x02FA88B5, 0x0DE85435, 0x6BD1DD87, 0x87A08570, 0x0B55FD62, 0x20E2AE1B, 0x84704B88, 0x4FE94D60,
+0xA78AC41B, 0xEF4B994E, 0xE372F5E0, 0xCCFF5216, 0x2310EE6D, 0x1C0171B5, 0xDFDCED01, 0x12FA05A5,
+0xE7154D9F, 0x4B431363, 0x0151DFDE, 0xC442972C, 0xEDC2978F, 0x7176D4AA, 0x03797B0C, 0x29C0CDFC,
+0x1B25A392, 0x1C113447, 0x4539E5D0, 0x58083B67, 0x97F297EC, 0x61EEE504, 0x8C3CC4A4, 0x8BF347BF,
+0x7258D6CF, 0xB6862BF5, 0xE5E4DA02, 0xF17FFB36, 0xE0D4A613, 0x6B5FC86B, 0xE449F91A, 0x75D77C05,
+0x19791DE5, 0x84508D9F, 0x5DD37011, 0x87CA177B, 0x10C1DF22, 0xD8528B33, 0x3045F97D, 0x466DF41B,
+0x4051F569, 0x97F8A80B, 0xBE4D318B, 0x7448793D, 0xB6A52CDF, 0x49686F8C, 0x306B16C1, 0x3F5E5CBE,
+0x9D2318A2, 0xE231FC35, 0x6529742E, 0xA9972027, 0xA12BC75A, 0x633CE929, 0x5C914C2D, 0xA52AD566,
+0x1BE44A6F, 0x6E74A300, 0xAE48714F, 0x3DFBA3BE, 0xC0C8804A, 0x0C01A9A8, 0x0009AC5F, 0x099301E2,
+0xC64693AB, 0xC43EE506, 0x35EE2590, 0x931FAA41, 0xF9D01322, 0x8D70118B, 0x9824610E, 0x1923CA78,
+0x1DAA034B, 0xDA807A03, 0x02FC2CCA, 0x1587BAF3, 0xEDDDD48B, 0x81E1D4E7, 0x962C7E4F, 0x2C9287DC,
+0xF31A7B8F, 0xF5D91BBD, 0x7EEB361F, 0xD7904ED5, 0x9C89E450, 0x39BE2FAB, 0x6D18D67F, 0xCE2D0941,
+0xE8D45EED, 0x8F85EF76, 0x0C4B33F6, 0x8DAB5046, 0x3C330E81, 0x945F7B73, 0x3307CA98, 0xBCA5D6A0,
+0x9F408F30, 0x734F8445, 0xDA03057A, 0xDD628B0B, 0xE830D9DE, 0x0CC663EE, 0x2FEC62AE, 0xE3E2E125,
+0xCE22E102, 0x981A1057, 0x7745722D, 0x36955A0F, 0x9C7A3D75, 0xD2B9B40B, 0x8CF617DE, 0x83F30D6D,
+0x8B26AAC1, 0x22080687, 0x860C2FA6, 0xC954B8EB, 0xB5D60EBB, 0xEF09334C, 0x572F52FA, 0xD168A6D4,
+0x5132C6B2, 0xFDC46023, 0x1413BD78, 0xF8143B62, 0xDBAFDF72, 0xA3CCD1B2, 0xCEA9F542, 0x655F9F44,
+0x51FD047B, 0x37DB2A62, 0x3C0717C2, 0xB36D3EDA, 0x1E35A446, 0x0E281A75, 0x587F166B, 0x104502C5,
+0xC0AD24F4, 0x2E634532, 0x76C4B847, 0xEF21981F, 0x91A57562, 0x251D4B89, 0xD02CD6BE, 0xDD5BBB1B,
+0xFABB64C0, 0xC825E2CB, 0xE7EDC04E, 0x7E7975D5, 0x2B8E21D7, 0x2187F5D8, 0x0F1B68B1, 0x0D5FCE04,
+0x9A076A63, 0x4B8786A2, 0xBBC72E0B, 0x26D45105, 0x8EB2A228, 0x1A8BE80F, 0xD46C1DBD, 0x92B076B9,
+0x5CD3673F, 0x075F0E22, 0xD3EA52ED, 0x26F95EB4, 0xE124361E, 0xEA09ECC5, 0x2B691715, 0x0A5C9B41,
+0xD49D762B, 0xB64E84C0, 0x9B6D9451, 0xFAD9368E, 0xE31E70BE, 0x10575C85, 0x5D12053F, 0xC7477590,
+0xDBA3ED1B, 0x3009D431, 0x6C6B54C3, 0xDC73752D, 0xD37AD76E, 0xED593A0A, 0x2A9E1AEE, 0x4F02728E,
+0x532256D6, 0x02F07BB8, 0xAFF70E13, 0xE922DEDB, 0x728E2494, 0x00A02F3F, 0xFF39275A, 0x28327979,
+0x7ADD95B1, 0x7FCE42B3, 0x704D1ECF, 0x7A901B15, 0xB30E28C5, 0xD34D174C, 0x8B2D03F9, 0x2CFDE727,
+0xD735834A, 0xAC47C6AE, 0x48767658, 0x68F2F4D4, 0x1C4E4574, 0x1738CB07, 0x09092EAB, 0x484969C2,
+0xDE02DEC4, 0x9D3DAB44, 0x7FB7002A, 0xC88AACC1, 0x14C846BE, 0x19203FA4, 0x955B0745, 0x409FCDEB,
+0xB32899AB, 0x7CEE0B8E, 0x5492AE7A, 0x94030020, 0xFF89D369, 0x30854C4D, 0x041CDFB2, 0x7F49721E,
+0xC2FA431E, 0x6A74F149, 0xBD5601C7, 0x0B111D8B, 0x6DFC760D, 0x706826A3, 0x5E99E803, 0xDDBA20E0,
+0xE5799430, 0x12BA5DD3, 0x509C31BD, 0x09DA2BEA, 0x5B554A34, 0x447DA1F6, 0x3E7EC52D, 0xD962E997,
+0xC8848ECC, 0xC027099B, 0xD869DC15, 0x7791DAC2, 0xD372E406, 0xE578C363, 0xB62C67A2, 0x770EBFB7,
+0xCFA7BBA8, 0x6EA5BA3B, 0x70CAB3D0, 0x58DE593F, 0x4DCAA811, 0xBCC81131, 0x07BA7DAC, 0xC40B6F88,
+0xA73CC37A, 0x004059FE, 0x6E878D0E, 0xEA1D12A2, 0xCA47D72C, 0x25300DC6, 0xD8628725, 0x6E5EAFA7,
+0x1F9DAF6C, 0x050290AA, 0x915BB440, 0x499F4247, 0xC7696247, 0x5A4D94A0, 0x9996C69C, 0x8F3040C8,
+0xEB3CC338, 0x5042A56F, 0x50ED69A3, 0x5F00C9A5, 0x7F1ECAA8, 0x6D74415A, 0x141B5241, 0x9FB20B98,
+0x25C73F08, 0x8808F6E3, 0xA1B44477, 0x9988AC1B, 0xAECB1DFF, 0x7F60F492, 0x9C3A80AD, 0x454AF124,
+0x399E4C03, 0xE8AAF8C8, 0x781D3BC1, 0x6F2536E4, 0xCAEC6BC6, 0x8AD1FD2A, 0xCC2962DF, 0xCD5EC9D8,
+0xCF5DEC4F, 0xB34401E1, 0x97BFCDA1, 0xBCC7A3F1, 0x929EE535, 0xDCE54B89, 0x867D3E4E, 0x4E660309,
+0xBAC8C170, 0x7F1002E4, 0x8966C2F2, 0x856EA1D9, 0xD39E8B5A, 0xCC0F00F1, 0x9BE36F44, 0x683B3646,
+0x740CFF34, 0xC5824236, 0xBACF3502, 0xCD86AFF0, 0x7D7CD9A0, 0x9ED7DD79, 0x383D2557, 0xA0C99311,
+0xF811262F, 0xB7BA31A4, 0x5FA394F7, 0xF4D177AB, 0x4E3032A7, 0x39A13900, 0x7AB9EA3C, 0xE6644CAA,
+0xE6F6E5B7, 0x71CE73DB, 0xA72A2170, 0xE9B8522C, 0x0BE28184, 0x5D50D1E2, 0xE580487D, 0xAB58E15B,
+0x4FF01570, 0xB435B0E8, 0x7FBBFAEB, 0xB4D18CE7, 0x0518545F, 0x35D29E03, 0x688A56AF, 0x2FD94DB2,
+0x6A6F41D1, 0x6D03AE29, 0x9B1B2B31, 0xD10FBC41, 0x581C1E35, 0xDE15C0D2, 0x6654CFF1, 0x6DBAE8C9,
+0x4B83F552, 0xA5681022, 0xD8E7B84F, 0x9A2BF61A, 0xD7A035CD, 0xE3A8037B, 0x616B3433, 0x041A5C93,
+0x15EE9E7B, 0xC118B79C, 0xF034939E, 0x12D18F55, 0xB93A1A97, 0x39C3712C, 0x4C6B939A, 0xD6333535,
+0xFCB45FC7, 0x616DFC66, 0x8C720EFF, 0x062C4D20, 0xB5B16FBA, 0xB36EC755, 0xB1258806, 0xF7C334DB,
+0x012CE7DA, 0x597B5A21, 0x9CD0FFE1, 0x482A2154, 0x0C6C898A, 0xDAD176E8, 0xD95BEA4E, 0x9888AFDA,
+0x264FFAEC, 0x76DD352C, 0x33025BBA, 0x5A9D1B4A, 0xFF2D74B9, 0x6C9136F6, 0xC7EC3D0C, 0x1E205D6D,
+0x8FF15A72, 0x275D4DDE, 0x69460F3E, 0x25FDE71C, 0xADAEEE2A, 0x07CB6C27, 0x7209B750, 0xDEE48631,
+0xAF54E55F, 0xC4CA07D1, 0x80D9D3A7, 0xB8FDAC2D, 0x37D5A8BA, 0xAE77AA8B, 0x15EEBF5F, 0x1317EEE1,
+0xB7CD496E, 0x604389D8, 0xB4333FEF, 0x8D3F4E76, 0xA2DCC08E, 0xAAB98AE8, 0x834D4970, 0xA7546B0C,
+0x1E92F73B, 0x594CE9FE, 0xC5EF45CC, 0xFBCFFC51, 0x54D7B289, 0x3A053A09, 0x0D68E17F, 0x78710955,
+0xB1011C92, 0xA171F452, 0xD00B7814, 0x8A60F0FB, 0xCDBE1F8B, 0x1D68D05B, 0xB1A8A1EC, 0xA6952EDF,
+0xDE213BEF, 0xA387B73A, 0xBD1BDE1D, 0x27D7A555, 0xE27E177A, 0x170D0F41, 0x2430FBF2, 0x0E543BF2,
+0x7524FE45, 0x3DA4F3D9, 0xC7893AEF, 0x78873A26, 0xC1EB6F96, 0x50D0EE39, 0x2E239FC7, 0xF1343AD1,
+0x0CE6ECFC, 0xF3389B19, 0xE2600E9B, 0x9716EB79, 0xA2023DF4, 0x3C018282, 0x2D734F0D, 0x6F5840AF,
+0x893B2BAA, 0xB4408F67, 0x3C7E95FA, 0xB81922A1, 0x1A3BC96C, 0x640B290D, 0x16B1736B, 0x45D5910D,
+0xECEF799B, 0x36F23362, 0xA04EF47B, 0xED5E8E58, 0xEC17156A, 0x7F44F2F8, 0x20909A41, 0x7F9D62BC,
+0xE2CD6BD6, 0xE9A7B6BD, 0xB55737FB, 0x4ACA5C28, 0xB8EAA9BB, 0xD74FF42C, 0x7A26412F, 0xBD06AC5B,
+0x25968321, 0x8431F18C, 0x78B4425F, 0x6754A084, 0x3F87DFFB, 0x63C678AD, 0x94FC986B, 0x9867A60B,
+0xF6EC317E, 0x8CFAC773, 0xAC54C3B1, 0xA14D2C79, 0x1C86E339, 0x397AD232, 0x0C6B2618, 0x47C4F8D8,
+0x31BC28D7, 0xE19B2A3C, 0x2ADCE3FE, 0xF657F6F5, 0x8D2A08D7, 0x1463C721, 0x5811C4AA, 0xFDE9885E,
+0x65603B6D, 0xF2E994CF, 0x3B185FE5, 0xF7C98F84, 0xA0A8A7EE, 0x4D8E2A0B, 0x37E225DF, 0xF98BE197,
+0xE5EEEE85, 0xA8076636, 0x1AFA27DA, 0x579E9E43, 0x6EBE1860, 0xD4A15461, 0xBC3E4A8A, 0x2A79F048,
+0xA1720369, 0x586FCD37, 0x8F3AB9B3, 0xFEC1C373, 0xF9F1FBE9, 0xF181811A, 0x096746BD, 0x88614EC4,
+0x3896E998, 0x03740BC1, 0xFC98EABA, 0xB2CD13E9, 0x51844DB9, 0x3F957107, 0x7862CF3C, 0x52909D3A,
+0xE4186F7E, 0x5215BD07, 0xA320A344, 0x6E04CDC4, 0xF87AC428, 0x34909130, 0xE1E93E9A, 0xEDF45ED4,
+0x310FF356, 0xCF8BDFD4, 0x32556A13, 0xD0BD8AB4, 0x685F53BC, 0xB068C4C6, 0x3A5CE2AA, 0x4C5ABFB9,
+0xD87F037C, 0x5ADD0B96, 0xDA05359D, 0x39D04F01, 0x8272C78C, 0x02A82858, 0xB2D4580C, 0x474D1C24,
+0x889053EF, 0x5CB1E3F7, 0x73C109ED, 0x0817006C, 0xCBF63602, 0x06AF0B3D, 0x99F1525E, 0x42305D07,
+0xC65684A1, 0x32FA7CD7, 0x668D0E9F, 0x981646F4, 0x8DC5B3DA, 0xD2F09E75, 0x39E0A535, 0xC8076F10,
+0x6FAC0E68, 0xAE5816EA, 0x77099D99, 0x66B69B33, 0x0A0993E8, 0x8594D1C6, 0x467A8299, 0x59B4394B,
+0xF5325296, 0x430BD25C, 0x6E7BBAEE, 0x38DBFB64, 0x8D385492, 0xB989BC56, 0x418F2B4F, 0xD2AA0EC3,
+0xC4748ECF, 0xA74E6A0E, 0xF36EC8E4, 0x639A3780, 0x0E33B2CD, 0x7C6C680D, 0x94394DCD, 0xAED6D823,
+0x000000C0, 0x519F0101, 0xFEFF2D44, 0x41C5F962, 0x5109344B, 0xAD21E604, 0x8A637525, 0x25AAF6EB,
+0x52B7D526, 0xF69939DD, 0x280C8BB5, 0xB9E2E262, 0xE8E8C2CC, 0xC73D2492, 0xF0026341, 0x1CA0E838,
+0x15A79E35, 0xC37F49DC, 0x9715DEC6, 0x72EBC09C, 0x2F0C4DBE, 0x780409C8, 0x84C443D4, 0x6E957FB6,
+0x0F0A0E2A, 0x2C417CEA, 0x6DB96AB2, 0x1CE1B72D, 0x1F8CD31F, 0x275D6AA1, 0x0F905B5F, 0xCC78F1FB,
+0x6B2441C9, 0xA2CA4993, 0x19183782, 0x207ADD8B, 0x9BE28B3A, 0x5A790425, 0xC3C2837E, 0xA6351170,
+0x5EE8A986, 0xA853ADF6, 0xC17A678F, 0xADEE79E5, 0xD964BDC3, 0x669A71BD, 0x299835CB, 0x67FAF6BC,
+0xB39D1D3F, 0x6DABA148, 0x38002672, 0x49331A45, 0x6ED4D2F5, 0xC2D35D67, 0x1263A7A1, 0xF3D6BDC1,
+0x72D50B17, 0xC098CBEA, 0x7C0871D0, 0x7361A158, 0x3DCC2DAA, 0x4DE35F9F, 0x039D8D26, 0xDCDFDDE1,
+0x85279654, 0xC7AD18D7, 0x312D8994, 0xFFC6D37E, 0x99B03B4C, 0x10430E8C, 0x5331B6EE, 0x53864963,
+0x74E28D87, 0x826113A2, 0x4B17D3CD, 0x29CEA98C, 0x557ECDCE, 0x5B9B91CD, 0xE89C23F1, 0xBF91BEBE,
+0x0B6F0CCA, 0xAA804CB8, 0xB959AC50, 0x6FEA70AB, 0xEFAE8CC1, 0x967B0ED2, 0x83C92A86, 0x45B3856D,
+0x7323C406, 0x90EAC916, 0x742A2062, 0x032FC63A, 0x6403DB2F, 0x81675437, 0x9A0A4AD0, 0x48F791AC,
+0xE5E6AD18, 0xE95E4004, 0x641A6CDA, 0xBB659DDB, 0x1A5AA293, 0xA7A3E079, 0xA929ACDE, 0xA3BA0D05,
+0xA7BE94AB, 0xEF939640, 0xC96BDDBB, 0xB6B3D1A4, 0x1ED92F03, 0x503467EE, 0xB775D121, 0x88745186,
+0x46C7CEE3, 0x69899ACD, 0x40FCCC84, 0x9ABA2C7C, 0x5075E8F9, 0x5DC31769, 0x571E7619, 0xE98A8A2C,
+0xAD2EA278, 0x18797147, 0xB16AA4BE, 0x9CDC3443, 0x104CB903, 0xFC9A571B, 0x4C52CD3C, 0xAAF9445E,
+0xC2F1D0DD, 0xA5D3A6D2, 0xC5BFD7D8, 0x5A0B5BEC, 0x4B637FA5, 0x0754BD0E, 0x0BABD023, 0xD1E3F7B1,
+0x0443E00C, 0xD9492196, 0xD51C829C, 0xDE2D7ACC, 0x61F05D56, 0xCC7918B8, 0x6FC61D1B, 0x8F475FE8,
+0x6E445407, 0x52FF36E4, 0xE725620B, 0x01000000, 0x19549B41, 0xF5FF194F, 0x6450F540, 0x15AB205E,
+0xA044A70B, 0x30BE4D6A, 0x333596A2, 0xC076EA8C, 0x41FB26E4, 0x33E384A3, 0xCEFE9019, 0x1F5F7E16,
+0xC17A29A9, 0x0A78BCBA, 0x928FE975, 0xEC9A1220, 0x55E65CB0, 0x4B13BF19, 0xA187DBC6, 0x7CE33CB2,
+0x6BC3B703, 0xC5D5A072, 0x66BB9390, 0x93175EA7, 0xEFA32120, 0x9BB094C7, 0xB930975A, 0x43B86C49,
+0xF8832853, 0x620DFF63, 0x36DDAB05, 0x1B1ABDF0, 0x6F5507C6, 0x2BB89EE9, 0xFA9473A7, 0xB8ACACC1,
+0x5B641311, 0xC19B25C4, 0x83B4CEA2, 0x58EC7B41, 0xFC581492, 0x199CFB02, 0x5FCCA889, 0xAE7D14E9,
+0x491654ED, 0x0446A29E, 0x811BFAE8, 0x9FBB1730, 0xF19A67E8, 0xDE474971, 0x2933CF37, 0xFE5C7569,
+0x74C1DBAE, 0x7776980D, 0xDB217F72, 0x99521AEF, 0xFF1AB3A9, 0x840CC6BD, 0x13292F11, 0xA7FAC0EB,
+0xB0007E56, 0x6939F121, 0xFD98302F, 0xEC2E1BE1, 0xD7CCEC31, 0x27D477B8, 0xC8C71666, 0xE6DECF48,
+0xC7472368, 0x5E085D3A, 0x06F01ED2, 0xFDEF663F, 0x3697AD7F, 0x03612024, 0x31C529DD, 0x495002BD,
+0x55810094, 0xA5052357, 0x0E2470CC, 0xF9B02239, 0x7E9C3A16, 0x7AE7D1FB, 0x84FAADA1, 0xE81373B5,
+0x24752BF9, 0x5B060733, 0xDA6DB9BC, 0xA0D12A21, 0x55D3DEDD, 0xFE4BF1F0, 0xCF082D34, 0x56475AA2,
+0x402417C2, 0xD11AE5B6, 0x2EC5DF64, 0xED725D51, 0x906F0B36, 0x45D804EF, 0x0EE40A69, 0x47E23883,
+0xADCFAF55, 0xEB298EF5, 0xD02D1A55, 0x19C98026, 0x251705D0, 0x94B60630, 0xC1E31A30, 0x3370D3DB,
+0xDFDBF4E3, 0x7E674FFC, 0x1877691E, 0x934D51BC, 0x291D0F99, 0x81785675, 0xAF88C4B3, 0xDEBC2D39,
+0x5CAED9FF, 0x61D83D08, 0x62403B83, 0x0DFE13FE, 0x8CC70B2F, 0x18EC857F, 0x23042312, 0xF89F0115,
+0x054B7B6F, 0xC5B7E48C, 0x8495C806, 0x94A9E907, 0x9A5E88AE, 0x3231B286, 0x0900743C, 0x516D4A30,
+0xB724B2EE, 0x79F0AF42, 0x374E4241, 0xEC6B293F, 0xB76B7B52, 0x00757E09, 0xC0FB1946, 0x7D59973D,
+0xFABD38F8, 0xD0D36B5E, 0xB28ED6D4, 0xBAF1DC6B, 0x40C9854B, 0xC011480D, 0x66257BFC, 0xB27A6FD4,
+0xB2136522, 0x75BAEA54, 0xE8651390, 0x7B0AFEE4, 0x073D81AB, 0x42D9D8F1, 0x440DBAC1, 0x1EC4DE1D,
+0x484AD249, 0xA99E135A, 0xC7AE6634, 0xF28CC295, 0x6E7E3C4C, 0xA082A5D4, 0x92697578, 0x345C7653,
+0x79F89DFA, 0xB37A7F76, 0x537DC2D6, 0x50110C21, 0xE7190892, 0x07014436, 0x5BF5FEED, 0x62E4AD82,
+0xB8D762D3, 0xE051C609, 0x5C8256E0, 0x67BE90DE, 0x273FBAC8, 0x9C541C8A, 0x2B3F4F87, 0x5969878C,
+0x9967A247, 0xA184BA0D, 0x65D6C0CD, 0x5DA3A229, 0xC368F755, 0x0FC8405D, 0xC94B5438, 0x276BA4A0,
+0x19544C60, 0x1FAF156E, 0x59443AC0, 0x17197812, 0xD8A1A4AB, 0x6AA49B2B, 0x82EFDD33, 0x73E13DC6,
+0xAFE1BDBB, 0xB3737E08, 0x6650D985, 0x76BACBA5, 0x192FC6D8, 0x3FACE03B, 0x71842E78, 0x7562BED0,
+0xE130C003, 0xC6431CCF, 0xEA2C5AFF, 0x51534A86, 0xF90544EF, 0x4F203A9B, 0x2621FCEF, 0xDBD0EEBA,
+0x0B4F0E98, 0xDBFEDFA8, 0x4D2DB1FC, 0xEBE98018, 0xB07BE834, 0x3F8C5454, 0x1FC77FFE, 0x635B1EF5,
+0x18D38931, 0x9AC69550, 0xDA99BEB5, 0xD090CFB0, 0xAA14F5F8, 0xADE1577C, 0x7B256287, 0xC13B80D1,
+0x142B8268, 0x80288EFB, 0xC753D0C9, 0x8AE4D561, 0xD2BF92FE, 0x8E5EB054, 0x97F2CDC9, 0x9B8D2BF3,
+0x5E076D0D, 0xCB8028F9, 0xA13A990C, 0xD1CD69E2, 0x5CCF0CAB, 0xB88FAAAA, 0xD9319DD3, 0x0A68DBCF,
+0x8A582D6B, 0xEFE1194D, 0xF8E158FC, 0x94AEC8AD, 0xF9EEBCB8, 0x0E1E64FC, 0xC1837BDC, 0x5CE149E2,
+0x85921B92, 0xCB69DE3F, 0x752E589A, 0xEFD32DC8, 0x61D4D48C, 0x371F01BE, 0x88A1B215, 0x9D446B7A,
+0x58DB4E49, 0xCF46F09D, 0xD24A244E, 0x9C303D4D, 0xEFAB932C, 0x59A975F5, 0xCACEFD16, 0x7F645981,
+0x03F789FF, 0xC5FC586A, 0xE4DAEE19, 0x4B317367, 0x1E71A32B, 0x79AF991D, 0x3F272A6F, 0x5453C4CA,
+0x4802417E, 0x0CC92A6A, 0x166BEE68, 0x010B9818, 0x4071FA36, 0x7C6D68FD, 0xC53977E7, 0x94200E13,
+0x245ADC4F, 0xB1AE57A2, 0xF8CDFCDD, 0xB933B2BC, 0xEF884B1F, 0x6F363F3D, 0x670D72B4, 0x66041C7B,
+0x314DC134, 0xC6DAE87D, 0x85677213, 0xD881C417, 0x72FDF5BA, 0x36B4CCA3, 0x14B4F143, 0xC609CF61,
+0x0677668B, 0xFF79A56B, 0x44E7041B, 0x10E73C0D, 0x798F6E12, 0xEEA2F400, 0x79C028E7, 0xFC1D97F9,
+0xEF130C33, 0x0A017CDD, 0x500303C9, 0x09BA3D50, 0x8F479ADC, 0x06CD318F, 0x37881D23, 0xA8CAED66,
+0xF911C65F, 0xC51E1540, 0xF94ED2F0, 0x54D9C9B9, 0x2CC130A5, 0xBB74040A, 0xA36D3CD5, 0x64242713,
+0x41F6EDEA, 0xA099623D, 0x6BCE029A, 0x223270E9, 0x09F05C84, 0x3B27D24E, 0xC3989931, 0x56236BC3,
+0xEDC73054, 0x1F416DDC, 0x0267E8D2, 0x4F19907C, 0x09990363, 0x71C51801, 0xBCE44C1F, 0x76A1D8CB,
+0xE66C2F10, 0xAAEB8F04, 0xA0A5F5BF, 0x88FBA7BC, 0x16663FFA, 0x18AE88EA, 0xAD5493A6, 0xDC9B00F1,
+0x478EAA96, 0xF2B3BE00, 0x485AD9AF, 0x96A4F263, 0xD97BD42E, 0x72982D27, 0x36376E0D, 0xBC62415D,
+0x1A4FC405, 0xF408C860, 0xC7A2EAC3, 0x5054F74A, 0x5E6D19DB, 0xD1065B46, 0x997E097A, 0xF155EA20,
+0xF9977AF4, 0xF79DDDC7, 0xB397EFCF, 0x422D272D, 0x4CA26121, 0xC8C98BDB, 0xAD25E34E, 0xA82DB103,
+0x3C65653C, 0x596FE56C, 0x407588BF, 0xA95A64C0, 0x820F931E, 0x2DEA9D52, 0x00B13B9F, 0x0F69F97E,
+0xF3FE1D44, 0x1150F16D, 0x39D8DF6F, 0x0AE7C918, 0x570C3DC4, 0xE4A7FD2C, 0xAC95EDD2, 0x9A221C5E,
+0xACA09977, 0x376CCE50, 0x6B28AA82, 0xF16F1AFF, 0xCCF9B185, 0x770923FC, 0xDF320B52, 0x507F938E,
+0x9A6E86FA, 0x435B8D8D, 0xA8538A38, 0x1270600A, 0xD4CA31AF, 0x11F12B7D, 0xC792B3CD, 0xD69D069A,
+0x8FB20C92, 0x2FDFCEF4, 0xB80F7A9E, 0xCF9F8665, 0x8EE67C5E, 0xCD4EBC41, 0x8C3D9DD9, 0x2FE3870B,
+0xDCD4A610, 0x301622AF, 0x466A5E36, 0x343120EA, 0xD6A7FF9B, 0x3E52E577, 0xCE0A8112, 0x7B3210D9,
+0xB9C1B607, 0x8591ED31, 0x9D8D26BD, 0x7B98F87C, 0x4D9FAFB3, 0x21A4E468, 0x962148BD, 0xF3602DB0,
+0xD8746B21, 0xA1FEFB66, 0x3D603EF7, 0xA5CE100A, 0x4D5A6DDA, 0x4729A969, 0xF5D95CA8, 0xE91BF2FA,
+0x91D55935, 0x1B126AB4, 0x8E8C7757, 0x84821253, 0x5FFEAB47, 0x5A1B70F4, 0xFD72B692, 0xDB8B349C,
+0x5E7163B5, 0x32BC0B4A, 0x1ADD667C, 0xAAD903A1, 0xF7779DE4, 0x18E5D81F, 0xAF8BB9B9, 0xCAE7B143,
+0xDAC90484, 0x8A77E245, 0x3C9FA50D, 0x4D4BA99B, 0xE850436F, 0xA8ABB40E, 0x4A4C2B76, 0xAB78F038,
+0x0ED301C2, 0xAFCB0FAD, 0xE1E99E8B, 0x847B9C8D, 0xD417009C, 0x711FE52E, 0x7811510B, 0xB2247F11,
+0x314D5904, 0xC42EC744, 0xEAA4736D, 0x2CCA7B3D, 0xF1B60243, 0xF9DF3703, 0x8BB35F8B, 0x2F3A9BB0,
+0x69053B8C, 0x0BEAC53A, 0x44E0A3FA, 0x0950D93A, 0x3CBD2381, 0x064A4F22, 0x89C62CFC, 0xCEA04307,
+0x6B0E40F2, 0x6EDCD306, 0x2510F942, 0xD6E32501, 0xECF12935, 0x5FED0A2A, 0x5CD10A09, 0xC2A73A45,
+0x378C345E, 0x73EA742E, 0xD5EE3469, 0x6C5A3A51, 0x2E90E83B, 0x47262B31, 0x0D97D405, 0xF9F887CE,
+0x241DF2FB, 0x6489A08B, 0xD652D1FF, 0x653C8B18, 0xA3301A87, 0xD2F1DF82, 0x706DCE4C, 0x405FCD73,
+0x6EC90744, 0xE17BB2B4, 0xF78B1505, 0xE84E2E95, 0x8FE890E1, 0xFB005A7D, 0xF58B0363, 0x1A7B3139,
+0xBD457DC7, 0xADDA6FB0, 0xF734AD8D, 0x7C8F5490, 0x9C16D814, 0x0B0A4163, 0xC70323E0, 0x89D50AAB,
+0x7EA21F0C, 0xAEA614A2, 0x7B4B7885, 0x86DBE626, 0x7FFA476C, 0xF032FE1E, 0xA8AA5A30, 0xDDDD0CED,
+0xEB0CFF33, 0xB6DB22DD, 0xD73DC62A, 0xF577B065, 0x2B15BDF4, 0xC46F8983, 0x06133B41, 0x832FA73C,
+0xB1A77CF6, 0x3DB34220, 0x74A4E86D, 0x4665B5AE, 0x07DA51C1, 0xF4FEF074, 0x24E312AA, 0x8937C912,
+0xB5C13E41, 0x582435C6, 0x549AB569, 0x049D693E, 0xF0F810F7, 0x71D4650F, 0x3EE8FDC3, 0x22EA5131,
+0xF52D2C7F, 0xC3A6340C, 0x16062EBA, 0xA0AB9482, 0xE6A0E212, 0xC0948408, 0xAA2FA5E6, 0x46B112A0,
+0xA4AD46A7, 0x6C946E98, 0x33707AFB, 0x0E949A8A, 0x750369E4, 0x3A77021A, 0xC5C18E3E, 0xAB8A2D76,
+0x60DDAD7E, 0x92F9A4F1, 0x232B59D8, 0x7F71F082, 0x685E8FF0, 0x228AA85B, 0x2226F4FF, 0xA377F956,
+0x9A913096, 0xE89BE586, 0x7E05727D, 0x7431A201, 0xA507EC72, 0x1A6AD20C, 0x73987038, 0xE9712132,
+0x288E1193, 0x169DC484, 0x100DBBD8, 0x262BD1ED, 0x87B39884, 0x939FC232, 0x831D4EF4, 0xC7D1B126,
+0x9792DE7C, 0xFCF35E36, 0x2FC07BD9, 0xDC947E38, 0xAD1B0951, 0xC5A527F4, 0xA28C9937, 0xBE254332,
+0x3B96C22E, 0x3C96CE9E, 0x1B9BF4A9, 0x6E7C7D1E, 0x94FF6B74, 0x02D52C20, 0x0BB4F48A, 0xD3DCB555,
+0x23CEA426, 0xD90F0B40, 0x779B98C5, 0x06677094, 0xCD6766D0, 0x815A1D62, 0x7F598D3D, 0x0BAAA1D6,
+0x3F53D2C7, 0xE856B8D3, 0xB40988DA, 0xD0CE7C6C, 0x717408F9, 0x9221FA2A, 0x9D608031, 0xC37CDC6A,
+0x85479308, 0xDFCFEC71, 0x2A61F630, 0xED92052E, 0x596935A9, 0x46898D9F, 0xA3975E7D, 0x2CBC160E,
+0x263DD924, 0xD581A838, 0xC6177854, 0x717B3AC6, 0x2B5A3762, 0x98735E56, 0x239BF409, 0xACE318CC,
+0x6BB13E6E, 0xB1880C9C, 0x9D7E768B, 0xFD2FF634, 0x8386234C, 0xBDD29AB7, 0x293B716A, 0x218BA1D4,
+0xFE1C6306, 0x8C5C7025, 0x2F8EA7D5, 0x0C523E52, 0xE08753EC, 0x358B08C5, 0xBED888D6, 0xDF32EC19,
+0x7A7272E5, 0xF3AAEB60, 0x1387D38C, 0x7143D06D, 0x8AC9A092, 0x1D39DF60, 0x1E6578C3, 0xDBC0247C,
+0xC4E1A373, 0x97CBA4F8, 0x97CCC2B1, 0x492EA084, 0xE7A75DD0, 0xDE52F1CB, 0x9BFC8012, 0x4AA4B808,
+0x4CF883D5, 0x949BDB70, 0x53F4D471, 0x474A67E9, 0x9DEE8B36, 0xA8391D30, 0xC4FA40E9, 0xE7BA7363,
+0x9A665106, 0x7AA680EB, 0x36630D09, 0x9CAFD9F2, 0x3718B7DD, 0xCCBDBDA4, 0xDE865747, 0xB88C5E65,
+0xFB6E8039, 0x8086DDB0, 0x68532343, 0xB7D9B66C, 0x94754303, 0xFDA37F26, 0x61DC4299, 0x86E1ECDF,
+0x1B310A5E, 0xB1E3DA11, 0x384128EC, 0x4E9DCBDD, 0xBC715DEE, 0x702F96C3, 0x5E8715F7, 0x7C815C6D,
+0x93C2C601, 0x8430D85C, 0x58FD9A1E, 0x2D3D4966, 0x023D54BD, 0xB7EA748A, 0x1FA7148B, 0x609897DD,
+0x286F33A6, 0x79D2DBD0, 0x2FEF3060, 0x3755382A, 0xD32B1B8D, 0xE9903FA7, 0x0AA73305, 0x11B5F53C,
+0x292C306A, 0x8648646A, 0xD5CF9F2F, 0x0F808256, 0xDDA76D05, 0x8A64D330, 0xC9708734, 0x2B3EAF5C,
+0x17B36504, 0x8D1924A5, 0xC4BA0D12, 0xE201F6B5, 0x4F54E32F, 0x54BE146B, 0x7598BCF9, 0xA31026E0,
+0x355FB6F2, 0x6784F2F4, 0x69048FDC, 0xCA0F4788, 0xFFFD1ED1, 0x885C674C, 0xE90700F0, 0x307FD725,
+0xB9B1E5F9, 0x3EF36CCE, 0xE03718C9, 0x47D048B3, 0x1979AEAD, 0x3BCA8CFB, 0x2BB2F0BE, 0xC8A246A6,
+0xB523795F, 0xEF064689, 0x925EC05A, 0x428D5BFA, 0x7EBE8859, 0xD74E0A8A, 0x56BD5960, 0x372E13A7,
+0x14E258B5, 0xBDDE66FF, 0xF8A05A1F, 0x3575A283, 0x4404FA18, 0xCDD91557, 0xD643DD3C, 0x6B91621A,
+0xBE2B4C2D, 0x8B942751, 0x6633C335, 0xD1C70529, 0x6E95C881, 0xB6E7674C, 0xB0368DDD, 0x2E25269E,
+0x3B370137, 0x343618A2, 0x9A3DBC28, 0xE08620ED, 0xE79B5E93, 0xC337D126, 0x5969432D, 0x40EE2A56,
+0x274DA7EE, 0x65C752AF, 0x252DABCF, 0x77027EDF, 0x8BA4AFAA, 0xB5790712, 0x20D736C7, 0x2E00C914,
+0xD5C11D45, 0x645ECD71, 0x3560D7A9, 0x42CE166A, 0x07117447, 0x98D3C453, 0x15095FA4, 0xC2880209,
+0xE0906BFF, 0x4066F124, 0xE7AD9767, 0x540DD6A4, 0x45981E08, 0xB37261F4, 0xE49F2620, 0x2B94508D,
+0x3640F03B, 0xFA27D427, 0x80E59FFB, 0xA578657E, 0x91321EA7, 0x22E9E4F4, 0x180E3311, 0x193B05DB,
+0x9F463E36, 0xE3D53E8A, 0x8D4D6433, 0x43241EF9, 0xF0094DFF, 0xEC157B71, 0x2776C620, 0x8FCCF487,
+0xAB17A711, 0x8EC783CB, 0xC229F282, 0x1D0176F7, 0x7830ED73, 0x373E2EE2, 0x88D2D045, 0xCE39829B,
+0x83EF99BC, 0x456669BE, 0xCDFC8856, 0x0B955683, 0x8357ADA2, 0x1D0B43F2, 0x8127AC49, 0xCD73D2F3,
+0x3FE13619, 0x64047EB1, 0xD8619845, 0x4BBD47C3, 0x6FEA7C84, 0x11E0E44A, 0x0367AC2E, 0x950E40FF,
+0xA6212A4C, 0x0A6308E8, 0xC459D711, 0x6009B24E, 0xFFE7A1AC, 0x97A222C2, 0xF70B9A09, 0x17AA2554,
+0xBFC7CC2E, 0xAE40460A, 0xBBB11D3A, 0x1FA31887, 0x623029B3, 0xEBE0B54E, 0xFEEFE5BE, 0xA9CE3D5B,
+0xD71BE1AE, 0x6142A6E8, 0x57D82248, 0xE3F984B7, 0x34C9730A, 0x5319C941, 0x1BFAF1E6, 0xC511B15B,
+0x868D5FDD, 0x58806122, 0xA2B7FA3E, 0x95115B55, 0x6E408AD4, 0x7FCA5809, 0xBB9D5718, 0x283EF90F,
+0x73239F16, 0xDE21CDE1, 0xE0E56FFB, 0x3D940B7C, 0x5A2948A7, 0x184476A7, 0x11C2887C, 0x3A90A508,
+0x8B64F2FD, 0x8F7B41C3, 0x91C7A391, 0x857147C1, 0x40D8EF30, 0x3B2335D0, 0x82B34B31, 0x2E5C4781,
+0xCD7FC84C, 0x89096E65, 0xD47267AE, 0xE296DFDA, 0xE678C675, 0x2BBADBAA, 0x02DBFAA3, 0x661A8EE4,
+0x08387820, 0xC20311E1, 0xB5794B70, 0x06676BDD, 0x6681602C, 0xB301FC26, 0xC2F9C9F2, 0x6BF034C0,
+0xCFEAC2F6, 0xBA7693AC, 0x5455264D, 0xF73ACEF0, 0x89F3B031, 0xBDDF8807, 0x61BFA27C, 0x46485428,
+0x007449C4, 0xCBA2E64B, 0x2D0B53CD, 0xEC42F5C4, 0xF64D0221, 0xDA54CD42, 0xBC5568F1, 0xAC3353B4,
+0xEB58BE44, 0x7C149BC6, 0x9D1958CC, 0x4F06035E, 0x96A4C2CA, 0xDF00755C, 0x2CBCC655, 0x1D52A343,
+0x73403885, 0x748A7247, 0xAF2B4C38, 0xB40686F3, 0x61966F5A, 0xDFB39C55, 0x732A1141, 0x3FCCF523,
+0x64DF1CBF, 0x84523DDA, 0x020A323D, 0xD7556D56, 0xB50FF9A4, 0x2C563470, 0xA24DE2C5, 0x3A59B3DD,
+0x9DA1AEE3, 0xDB3145C4, 0x7548437F, 0x6AFA4C28, 0xC68C674B, 0xB7D56719, 0x7EB16CA6, 0x2CF83F19,
+0x64273866, 0x80DEF778, 0xB39CC4ED, 0x32DA4618, 0xB6394E53, 0x6F94B111, 0x5649FF51, 0xF67B2D89,
+0x38E09B92, 0x2C711F8A, 0x30E6EE77, 0x63E6BF9A, 0xE4EEA07D, 0x54CBA8D4, 0x93BF02F2, 0xA9152DA9,
+0xAE573B15, 0xDC7E2B05, 0xB3F0A970, 0x7C36E8D2, 0xCE80915F, 0x3D356017, 0xBD621CE8, 0x6DD9C32E,
+0xCEFE3B1C, 0x4C61CCC6, 0x4C1B1111, 0x8F89D2E0, 0x99BD7ED0, 0xB44D7CFC, 0xEC4267BD, 0x0814C732,
+0xE8A831C1, 0xD1C9D040, 0xD95943DC, 0x434AB5F9, 0xB91C1DCB, 0x7032B6F7, 0xD90EFDD9, 0x23238688,
+0x3A0BDAFB, 0xB7B56544, 0xB6173407, 0xC5071F02, 0xFFF0B9A0, 0xA5C9FBB9, 0x5BCA9BF4, 0x76E95F14,
+0x9B27B788, 0x952022DA, 0xBFC95E0E, 0x2FBD4CBF, 0xF1BE5809, 0xDBC3A209, 0x79AD6CC1, 0xAFA7A98E,
+0x46A4AE22, 0xE14C9BC7, 0x9640B7F8, 0xB42DD2B9, 0xDBAACA4C, 0x80B21C96, 0xFD37E4BC, 0x52687B9B,
+0xFE3B835F, 0xFECE458C, 0xF4238661, 0x8318CEFC, 0x850401E5, 0x94A5376A, 0x6B04E263, 0x38C3936D,
+0xBB8EE051, 0x483665E6, 0xFD7597EB, 0x556FA1AB, 0xB35A1B6E, 0x7E5B11BE, 0x246A191A, 0xA2C3315D,
+0xEEEE66AF, 0xF1E4E012, 0x4CDC458E, 0xBF677272, 0xD6494250, 0x7015D106, 0xC049307E, 0xC2CBD17F,
+0x6407CD35, 0xAAEBDDA9, 0x4CDB3A0A, 0xA7FEC486, 0x2FADD3C2, 0x7AD07B91, 0x9D7F8C83, 0xD589C541,
+0x417FC8E1, 0xEA6FCFDF, 0x93B330F7, 0xEF7E001C, 0x1227C78E, 0xA852B949, 0xFEF9D113, 0xBA0975A0,
+0x475B9056, 0x34B4F030, 0xC3CA8E1D, 0x2A935F2E, 0xF93A228C, 0x7BC6ABE0, 0x557C8756, 0x2DE52600,
+0xB8AE209B, 0x84CAABE7, 0xA3A01ABA, 0xBF6584C2, 0xC6878F1C, 0x126406AE, 0x182BACDF, 0x2EE012A2,
+0x830889CA, 0xAD90048C, 0x5B1FBE20, 0xF50E9C3C, 0xB5DD5E99, 0x75225C72, 0xDA8C12F3, 0x5601279C,
+0xEB3EE065, 0x3D95DCA0, 0xA26E95CF, 0x82A18183, 0x549915BA, 0x22A69FFE, 0xC4015B08, 0xD6742B07,
+0xF940F7FB, 0xC798C48D, 0xC47D7224, 0x40F4AC17, 0x7E38D830, 0x6EA19988, 0x4FF1AF50, 0x626F57EA,
+0x46D54372, 0xFF66013C, 0x34F5B86A, 0xE888AB27, 0x8E4F172F, 0xD65760D2, 0xA986B538, 0x772B0885,
+0x17CD33D3, 0xA5CC6F1B, 0xA5B927C6, 0xAC0C9FBF, 0x0E6687AC, 0x6AA98BA3, 0x48759B12, 0x1FD969D6,
+0xA84010F1, 0xD105A1E1, 0xE28C9820, 0xFCDD0CB3, 0x431DB305, 0x9494065B, 0x30DC5824, 0x6D0C501C,
+0xF30906E8, 0x10768C4C, 0x7F95500A, 0xF780C489, 0xF3502B22, 0x63E911DF, 0xFB5A80EC, 0xFDD2DE06,
+0x31B02E78, 0x81FB2F97, 0xEC0B40E1, 0x8297A892, 0x2AC7392E, 0x9BD3DB6A, 0x182FCDC2, 0xB2E45C19,
+0xE77B1D00, 0x11332100, 0xDBFFC964, 0x5F3B6204, 0x83C9ABC2, 0xC632C9A9, 0xC463475F, 0xB1B44CA1,
+0xFA4ECF96, 0x715031AB, 0xF477081B, 0xB2F7AE88, 0xA1BFD212, 0x16A92A63, 0x93425C53, 0xDBA92268,
+0xC5106275, 0xD91C5B6C, 0xB09D0330, 0x6F57CE2B, 0x97FA42DC, 0xC5958ED3, 0x78632D80, 0x72A55C32,
+0x84F7B990, 0xF911506A, 0x7BFDAB51, 0x719DCB0A, 0xED7D88F9, 0x2351AE6A, 0xFE291AE0, 0x22C78201,
+0xDE8EFDC4, 0x826BF99E, 0x6C2E44E6, 0xE35E0A57, 0x65CE81F0, 0xFFC8DB0C, 0x06868B36, 0xDF1BAC00,
+0x9151D9BE, 0x72CD4092, 0x0F33BA17, 0xA8B984D6, 0xD521DD01, 0xB6D00BFE, 0x29F1D677, 0x146A79DB,
+0xD34030C1, 0xA92CAFB2, 0xB0A6E778, 0x642A10E5, 0x6855F922, 0xA5196FC4, 0x0203C392, 0x848E4BCD,
+0x2ABA5068, 0x864E7270, 0xFA0605E1, 0x54A43E34, 0x4BC75E57, 0x8C8800DD, 0x99C57B2F, 0x28D8BD9D,
+0x15D922A4, 0x50E2FB83, 0xC96E12F1, 0x4854A911, 0xDC34B366, 0xEF8268FA, 0x878CAD23, 0x7F86F364,
+0xA6642F9D, 0x1B807B6A, 0xE5C53802, 0x961124F3, 0xF6430A6E, 0x2B4F7EF9, 0x59488B61, 0xBC64DB23,
+0x9D34F4B8, 0x8F86C970, 0x9F4349B8, 0x6735E6C2, 0xCD465F8C, 0x9724B146, 0x4ECC1C09, 0x8FE33210,
+0x16F192E3, 0x0D4E944E, 0x79BD9FBB, 0x4582DEA0, 0xF4129D66, 0x591420F5, 0x0E869B89, 0x517449E4,
+0x5E3BC89F, 0x848DC98C, 0x7AB37E5A, 0x7E304411, 0x6F67D2E0, 0xA3F15B20, 0x1B0397A8, 0x5CEABE3D,
+0x61AB164F, 0x9C57F0F1, 0xF6235F65, 0xCE7D2222, 0x6E080ABF, 0x5C021F04, 0x7EAE2651, 0xC8CF5FB7,
+0x9B579548, 0x6477AFFB, 0x47CAC075, 0x2FBF2823, 0x9D904EA5, 0x4F06CE90, 0x271B467B, 0xFB304DE6,
+0xAB2AB0E6, 0x9F52EA5E, 0xC5B545D5, 0xE0BB6A31, 0x693B3697, 0xE9DB0425, 0xA39C0642, 0x0CD728B7,
+0xEB8E6914, 0x5152A6F6, 0x85D1349C, 0xE347742B, 0xC8B8B2F7, 0x0ADD5B20, 0x2C27ACED, 0x5F15F02B,
+0xA4B88EB5, 0xB209A17B, 0x50406D68, 0xF587896A, 0xB5119138, 0x577C651B, 0xAE3AFC05, 0x8F01098F,
+0x6D472B5A, 0xB1F8C838, 0x174DD884, 0x0CD8BF33, 0xDF2489A0, 0x989FE457, 0xA766F970, 0xCC4564E6,
+0xC7240177, 0x45798EAA, 0xE4B328A1, 0xEE98819F, 0xA5F80A47, 0xF91C8E28, 0xD2FACDAA, 0x68CE867F,
+0xD1D86DF9, 0x970F45CC, 0xF7A97098, 0xBDA21FC1, 0xD64DF4FD, 0x3DC456ED, 0x82F81285, 0x72E09FAD,
+0x2A73B427, 0x86F7FA51, 0x042168B3, 0x22F308FF, 0x9427105D, 0x9B08F959, 0xBA90BA25, 0x87276586,
+0x9F81167E, 0x5A77CE26, 0x709F7DFA, 0xED4FC63A, 0x19BF6AC4, 0xB2CC04B7, 0x350C52F8, 0xA14DD4C3,
+0x31F93E55, 0x987DC430, 0x06350C89, 0x3B3816E6, 0x251EF09B, 0xE7CF2534, 0x61CE3A57, 0x56B0B020,
+0xD27A4BD1, 0xB2A5C9D0, 0xF7A8C2CD, 0xC0497B81, 0x76162207, 0x922A3DCA, 0x6BB90A5E, 0x1399CF59,
+0x30424471, 0xE896CEAE, 0x2A5BEEA7, 0x604EBE9D, 0x564C3DCA, 0xD290604F, 0xF7F1483E, 0x6F27AC38,
+0x7A3E8635, 0x90EF9DBC, 0xAAF88C90, 0x462D67E5, 0x506DE4EF, 0xC71BA4EE, 0xA0D7EBCC, 0x129EE573,
+0x9B19F18D, 0x7DB2B717, 0xC209F86B, 0x4F480C0C, 0xAF537BFF, 0x0BC36EBD, 0xDBE0DDB8, 0x25EAFAA8,
+0xAFFA88D1, 0x4A10AABD, 0xC1CB340E, 0x1EACF1E7, 0x9DE977AB, 0xF53D5D23, 0xD4FEDC47, 0x68922A7D,
+0x9DF2FE4F, 0x997E13D0, 0x5954428A, 0xEECDD5CB, 0x17EE647B, 0x4332C062, 0x9A230211, 0x95C2E502,
+0xAA6EE0F8, 0xC4D14293, 0x4250C11D, 0x547E6A79, 0x52F2E697, 0xB89B0DCE, 0xEA374D7D, 0xB232F318,
+0xDA86AA42, 0x8845E4DE, 0x304A762C, 0x0E4AA2DC, 0x2B78506C, 0xF9D576B8, 0x20C059D5, 0xB9E1AC32,
+0xFEBFC762, 0x5A0894B2, 0x851E7110, 0x7D5CC883, 0x1BA5FF61, 0xA12DD5FB, 0x5D4AE43E, 0xC98F2F2C,
+0x23697BB2, 0x748C5639, 0xAE1ED676, 0xB1B9F8B2, 0x8F9756D6, 0xAFC28661, 0x255CF8A6, 0x10C299F4,
+0x746170E6, 0x63DD17E1, 0x59DF12CD, 0xC8E97ED3, 0x16E6B369, 0xCF36882A, 0x21765110, 0xCFA4E5B8,
+0xACEFDB83, 0x1AD0F612, 0xCFDED0F5, 0xA975C6E5, 0x222045E8, 0x00052CB3, 0xB3422432, 0x0D3D7457,
+0x2B6883DB, 0x7DBADCEC, 0xE7C6C5D8, 0x28BE11D3, 0x0C0BBB0A, 0x9C00D7E1, 0xC4BE19E8, 0x36AA2314,
+0x46FE06C6, 0x9C8038AF, 0x0F436C8C, 0x3A06A3C2, 0xA04ABE3F, 0xDAC65A8E, 0x37154862, 0x5B5A276B,
+0x5E1B05AB, 0x2A9C27DA, 0x980D593E, 0x922CE4EF, 0xFCEA0244, 0x2F1099E0, 0xABC07D55, 0x1B5D6DA1,
+0xAC8D404A, 0xAEFB63D8, 0x9C59A7B5, 0xE89E1514, 0x6BD733E1, 0xF88C9B8B, 0xF3C3003F, 0x55D24B5B,
+0x6471E1C8, 0x8D7DE641, 0xB0130563, 0x022B8444, 0x510E9F00, 0xACDF30BF, 0x1F18B696, 0xAE667FF5,
+0x158F5E99, 0x749014DE, 0x08B525FB, 0x49F72F10, 0x2F844620, 0x7B34FBF9, 0x68D9C222, 0xAAF4B47D,
+0xE55CA6BB, 0x42105D08, 0xAA7446CD, 0x56E1FD3F, 0x5407E3A6, 0x5C0F9991, 0x41B1EAB3, 0xB2456570,
+0x9F9B6E16, 0xDC4C5F69, 0x7B0207B6, 0x534A9FC9, 0xD3D224FF, 0x16BE8BBA, 0x3C1DFAD9, 0x246FEB2C,
+0xD6E9376C, 0x52F46738, 0x438E7794, 0x24126DCD, 0x9C60BB73, 0xDBEBBE6B, 0x2A37D20C, 0x3A43CEF6,
+0xB0E4F108, 0x35C6D2FC, 0x1CEDDF44, 0x33ECE331, 0xEC84C1B9, 0xDF022967, 0x74AAFF4C, 0xE1367AE1,
+0xB2D9E6C0, 0x362D1790, 0xB481A1BB, 0x098D2826, 0x04D33D3B, 0x6E484F3E, 0x64E2C139, 0xC62BC819,
+0x2A525EFF, 0xD6B10544, 0x55585048, 0x82AAB84E, 0x044CB7FA, 0xBF05D760, 0x26D25341, 0x47DFDE1F,
+0xC5020E46, 0xAE3C50ED, 0xC6D30DD6, 0xE6ECAF8F, 0x0E128181, 0x0A15609A, 0x328E1CCA, 0xFB082E27,
+0x29C0DF07, 0xB223D0D9, 0x31656395, 0xBB3A7B93, 0xDECF15FC, 0x3ED440EE, 0x93AF6286, 0xA9EF13E3,
+0x565B7C80, 0x1467BF46, 0xB019DFFB, 0x11B8C7D6, 0xC58A5CE7, 0x4AED5964, 0x93342CCD, 0x9779F841,
+0xD079F3AF, 0x69E8629B, 0xC060677B, 0x03041713, 0x7E32F916, 0x03C71C77, 0x1B6DB8F2, 0xBAC851E1,
+0x9745CD10, 0xC6007682, 0x4ECE90B5, 0x36FC833D, 0x83F70334, 0x3D47CC62, 0x16A56923, 0x0A24FCD9,
+0xFB276286, 0x56944D59, 0x5B26B447, 0x710797FD, 0x2DCB1E20, 0x79D6EAFE, 0xC1414B39, 0xEC9C0034,
+0xB3BFA531, 0x550B40CE, 0x34CFB5B8, 0xCCBDA19B, 0x7E55C69E, 0xE36771D8, 0x6B7C14C0, 0x11FB2E98,
+0x1CC5A693, 0xEF2E3339, 0x4166F155, 0x480D7F10, 0x16A577E8, 0x558F00E8, 0x3EBFD1F0, 0xCE8F75E3,
+0x87469C86, 0x2A43E895, 0x162A08FE, 0x8BF7CFCC, 0x4A29A723, 0x6BBED5B2, 0xC3044C1A, 0x6CB8D2C4,
+0xF7CC2244, 0xDA78418E, 0x15C2B172, 0xA0F2B621, 0xB4CBE3E8, 0x8479CF05, 0x733FCB5B, 0x44337445,
+0xF9A7834F, 0x722E482A, 0xF21CFCC9, 0x70C319F7, 0x5AA01B6A, 0x75B8937A, 0xE918D513, 0x9AEE8CE6,
+0xB591AFC5, 0xAB71AFA1, 0xFF097581, 0xCB384601, 0xC30CF053, 0x2D3D5E3F, 0x9F7953F0, 0x07815594,
+0x92F4FE24, 0xFEA52E11, 0x812B378E, 0xC2310CB9, 0x9B768305, 0xF8CED6CC, 0x8E7E87AA, 0xC84EFE2A,
+0x65E0DEA7, 0xE19ADF55, 0x99292D1B, 0x5330D68D, 0x1E38CA3C, 0xF2412AF7, 0xB6483F9D, 0x1A13B5FB,
+0x49916162, 0x149BBC27, 0xBA2AEFAC, 0x66DF9F54, 0x86C69113, 0xAD68451F, 0xC1FE4B4C, 0x867CE412,
+0x2D893EBA, 0x6AF184E1, 0xCCA0E547, 0xD2A7D824, 0x9AA50727, 0xDAC37364, 0xF4C1913D, 0xF0EFC1B2,
+0x847D7C47, 0x29539242, 0x76330A1C, 0x7B230499, 0x65A99F47, 0x817E2EC2, 0x22498883, 0x9E6D7047,
+0x626657E3, 0xE08F4C59, 0x488620C6, 0x8081F07D, 0xF23E54E9, 0x6228E72B, 0x47C025BF, 0xE4D0DC7A,
+0xA209F602, 0xAB49893B, 0x197E5609, 0x97C1C200, 0x215C5E34, 0xF7B36390, 0x0EDB75D1, 0x9F61AD97,
+0x95E0ED8D, 0xCDE29BDB, 0x978DC64F, 0x054B2D2E, 0x0B75B6B7, 0xDC04F4E5, 0xD61F8B7F, 0xF6EF9BC8,
+0xA9F973CA, 0x62AAEE79, 0xB098152E, 0x3918676E, 0xE05381A2, 0x8A7B5EF3, 0xD93AB86C, 0x39704D1B,
+0xBD204B20, 0x0A83FB46, 0x46DE285B, 0x4D4B4670, 0x9F539CE8, 0xF8DDB758, 0xBAE04606, 0x6A3C61E1,
+0x7879A74B, 0xFE3B1D34, 0xB4152200, 0xB63AA2F5, 0xA6E8B996, 0x2E7C2E12, 0x1133607B, 0x4FE9A577,
+0x2F5EE6AA, 0x40DE38B6, 0x9E156945, 0x4A1CEB76, 0xA6B02B1C, 0x545E6D90, 0xF1CEAF05, 0x5BFEDA52,
+0xCE00D238, 0x654B12E0, 0xBE6E55AE, 0x10AB1244, 0x3F8A4093, 0xD3713A34, 0x57041F77, 0xBDF4BF9F,
+0x471A788F, 0xECDEC7A3, 0x4E82A1D9, 0x4EB0D32F, 0x8FF371C0, 0x51728E45, 0x381D47D5, 0x1A2C5B68,
+0x3C66BE1A, 0x6695E86D, 0x016C4234, 0x4D395BAF, 0x786518D6, 0x7441839D, 0x7721B7E1, 0x7E55ED60,
+0xB54B678D, 0x56AFA063, 0x15013F6F, 0x54902D48, 0x291CB4D0, 0x8CEA9557, 0xB6CF6A88, 0x741AAE25,
+0x9205A460, 0x13004250, 0x641915A2, 0x4B30FB15, 0xBF908853, 0xB65E9BB5, 0xAA18319E, 0xCB99C89D,
+0xC893B2D4, 0xC4F420BD, 0x8F300122, 0x4D53B07F, 0xA3772A43, 0x7D5F38DA, 0xCDE8CBEE, 0x5AB5A74C,
+0x91C9B784, 0x210D3A0F, 0x8DE5BB47, 0x6C3527B2, 0xB1603575, 0xB55BA34B, 0xD68931E7, 0x264E22A0,
+0x903FCAEF, 0xFED05B94, 0xADA83D88, 0xC8763EC5, 0xD3BEEA3C, 0x815EBCB5, 0x8B98FCC9, 0xB9D89B49,
+0x80CFD659, 0x8E356C2E, 0x24163A5E, 0x0F7E73A3, 0x4C69034B, 0x6C40343D, 0x1086CEE9, 0xE8B019FD,
+0x5E73B52A, 0x0A50BD0C, 0xFD2546B9, 0xCA7D9AA7, 0xBA983A24, 0x63AA9012, 0xA348BA4D, 0x851FB6A6,
+0x11ACDD72, 0x9DD36F17, 0x646F761E, 0x8D25A707, 0xB525A049, 0x100BE98A, 0x7A2D71D2, 0x8C2D24F6,
+0x2380783B, 0xD7EEC174, 0x3AACE20A, 0xA96FF1CE, 0xC4723C37, 0x53F126EE, 0x5997DEB5, 0x632E8916,
+0x61C24D98, 0x8EC44960, 0xF190639F, 0x0D1E674C, 0x447DC2EA, 0x18FA0EA4, 0x9A2FA4E3, 0x2BFA75DB,
+0x7829FC35, 0xCEB2AAE0, 0x40792F10, 0xE3AEE017, 0x3FD37CC3, 0xB30306D4, 0x9D98F11E, 0xAE224444,
+0x0673855A, 0x258C02D3, 0xE6EEF722, 0x657C50DD, 0x2A06C385, 0xA83A4E3F, 0x6591A770, 0x864A3EE4,
+0x796E7864, 0x3A15BAEE, 0x2387AC35, 0x04E5F717, 0xA6EDC7D6, 0xD8F9C2F9, 0x4EB8D7E2, 0xB72DE859,
+0x6D269F89, 0x0E37F6A2, 0xE141E44F, 0x44979B25, 0xF07E97F6, 0xBB2AF6D2, 0x54A40BB1, 0x6D20414E,
+0x282AA664, 0xCA3CE3EC, 0x7F844568, 0x579C848B, 0x213B49B1, 0x711B33BE, 0xE48FCAF0, 0x5D4D896F,
+0x1C7062E7, 0x9F667D97, 0x9C739DDD, 0xB1379BB6, 0x6CFB96B2, 0x5C8B8A0B, 0xAC411DA6, 0x79646089,
+0x34F37BC3, 0x06466FE4, 0x462AE132, 0x8B39D1DF, 0xDD1DCD39, 0xB652D0CC, 0x60F91CA3, 0x86A1AE03,
+0x9B938FFA, 0x1E9870B2, 0x6F01B0C4, 0x167DFB5B, 0x639FE5E4, 0x77DB6ADF, 0x20E55284, 0x5DE92012,
+0xF63CCF93, 0x41148ECA, 0xA76E4638, 0xF1F013EC, 0xFFDDC489, 0x0876B77A, 0x951DDDBC, 0xE57F2377,
+0x6B486800, 0xDF5D0E27, 0x29F4B271, 0x5AB7E8A2, 0x2EDE6A7C, 0x5E60ABF7, 0xAC59EB94, 0xC80660E2,
+0x50CE8881, 0x3781BA62, 0x7E4C2529, 0xEF9D1BBC, 0x5E8F3045, 0xE992DA20, 0xCC1107E1, 0x1C70F0E9,
+0x94FD3FBB, 0xAA49CB9D, 0xD04890AA, 0x02A6DBFA, 0x0D78F1D2, 0x12E31A9E, 0x2DC5D83B, 0xC741C7FF,
+0x08DEA02F, 0x754EE769, 0xA8960BCC, 0x84025D6D, 0xB70D1CA9, 0xC54CA810, 0xD1BDB27D, 0x828AADD1,
+0xD55D70DF, 0xA3DC0772, 0x0519A186, 0xDDF76DDE, 0x75578665, 0x194D7E22, 0x589E36FA, 0x70A1FDDE,
+0xA4383E57, 0xE540B232, 0xE2431E30, 0xF0BA6D91, 0x5C4390DB, 0xBB7AB286, 0xCF60C86D, 0xBF306558,
+0x60161AE6, 0x2F5BD713, 0xBDCBB325, 0xB4426AEC, 0x9E9405CC, 0xAE36B19A, 0x01FD0B9D, 0x5C7B476F,
+0xCC8FB3D5, 0xCFBB857A, 0xF0E1EAE2, 0x514F14E0, 0xBD3FD888, 0xC1802120, 0x0998BE99, 0x7646179D,
+0x1DA08056, 0xFA871D68, 0xB18D8328, 0x09A8B071, 0x0A0A3D5F, 0xC3F165C6, 0xF7414663, 0xE1B55E61,
+0x69E59BF5, 0x6FA931E3, 0x2FBB8CCF, 0x62DCA214, 0x00EF3496, 0x7B8F8763, 0x7010461B, 0xB0DE81D5,
+0xFB226416, 0xC6DED319, 0xBE3E497A, 0x82707EFD, 0xDD133B91, 0x9A011E0E, 0xBCA7136F, 0xCA94A65A,
+0xE1FF39D6, 0xBD100EE3, 0x79B95F3B, 0x33082688, 0x120E1A06, 0x7AA9F207, 0x77357208, 0x9649639C,
+0x253A913C, 0x4687F95E, 0x58E4C6DA, 0xC94A1075, 0x859F42AA, 0xAEBF31D9, 0xC98B9781, 0x90EC24D8,
+0x1F8CAE50, 0xDB98B1BE, 0x532FFAF7, 0x32D2A08C, 0xAFA4BAC7, 0xDCA76059, 0x1465C7E8, 0xDFF4456E,
+0x791864D6, 0x0247D9FB, 0xB4288779, 0xAB73E9BA, 0x511557B7, 0x931F3E3C, 0xE0B36BBB, 0xF31304A9,
+0xDF0988E6, 0xB0FD3680, 0x7437584A, 0xD56DEB39, 0x17342D70, 0xF9C85E66, 0xB7ABEB9B, 0x368CA2C5,
+0xA4568676, 0xDEA9B446, 0x11E956A0, 0xCD2F2B8A, 0xECA1B802, 0x20111AC6, 0xEA08C940, 0xA324D9EF,
+0x18A1E062, 0x1EE6619C, 0xCC444783, 0xB7299F0B, 0xC11B5A93, 0x3C97CDC7, 0xBA67DCA7, 0x9C4AEF1C,
+0x8CD78232, 0x2C45A235, 0x94CB5A4F, 0xAA104171, 0x7A5B3E7F, 0x0B185561, 0x1FD7A67E, 0x6EA663A9,
+0x3F1645DF, 0x987EDB03, 0x535EF1B3, 0x5D0ED45A, 0xF0D675DD, 0x58D16113, 0x394C8A45, 0xA643B3B9,
+0x58B52FBA, 0x456418A6, 0x1ECF6A52, 0x320B82FC, 0xE5F262BD, 0x06587242, 0x68762955, 0xEAC3066F,
+0x138FAB67, 0x5FE943FD, 0xE0B63868, 0x754B29F0, 0x742F89D8, 0x5206B181, 0x8635BC8C, 0x3BFEA9CA,
+0x5BA0C881, 0xD76983CB, 0x59734180, 0xB8995BDE, 0xFB17F011, 0x7E9AC923, 0xE33B1591, 0xEDC55FA1,
+0xD12FD4D1, 0x1823A47F, 0xAFD4052B, 0x14931BDC, 0x3EBEDFBE, 0xBAC0B546, 0x08EA05D1, 0x9D45FD8F,
+0x5625C646, 0xA7B0370F, 0x7EDFF886, 0x70A27E90, 0xB775F927, 0xE4A0B8DD, 0x02BFD9C4, 0xBC7AA2D5,
+0x788DCB41, 0x595E1DEC, 0x5D3FE33A, 0x0F198F7D, 0x8D3D219D, 0x8B77F58A, 0x4D1DE25F, 0x57D1B02D,
+0x200A7D09, 0xE6792D08, 0x50E21824, 0x890D48E6, 0xD76ACEF6, 0xE84F6148, 0x7F0DA6C2, 0xDE8D61D1,
+0x7C6129F2, 0x376BCB74, 0xFA0F570F, 0x38B8CB5F, 0x89B87987, 0xC2267D5F, 0x1D2640EF, 0x8B946F04,
+0xCFBDE338, 0x07266ED2, 0xEAD6D7A8, 0x6245723C, 0xDD1A352F, 0xE99859CF, 0x74A85822, 0xE2C563CB,
+0x5B499560, 0x56414C68, 0xA6C4ABCA, 0x839566FB, 0xE31167D5, 0x14B3F416, 0x1B25C530, 0xFE347032,
+0xB0DCA687, 0xFB284E91, 0xE767E39F, 0x49574D0D, 0x2E538122, 0x343375AA, 0x4641EFAD, 0xBC1C5321,
+0xA0153951, 0xBF1F78BA, 0xD4A2F9F0, 0x9EFE1E23, 0x7FA570D7, 0x775F6BB9, 0xF50BA422, 0x9869E8A0,
+0x949A55A9, 0xC26A4F1B, 0x1A7006E2, 0xE7FA7C3B, 0x504826DF, 0x7158EA21, 0xB494367A, 0xD1CEB634,
+0xF7E7C1E8, 0xEE94B89A, 0x950266BE, 0x59255F30, 0xEC79E4DE, 0x3F3DC6C0, 0x91864D15, 0x7701CF17,
+0x8C9AE182, 0xB0A742BC, 0x01BFF51A, 0xE4A87AD8, 0x9F5BCE43, 0xD8779F35, 0xB9EF3438, 0xD364C35C,
+0xCC144235, 0x7FA89D38, 0xEFD4A635, 0x1F4C686E, 0x8D3311FB, 0x3CD095EB, 0xBDA164A9, 0xB9767808,
+0xFCCF65A8, 0x04D2BD03, 0x3E4453BB, 0x977CBEAB, 0xC3F48094, 0x6009A85F, 0xEB8486DF, 0x5062BF84,
+0x1BBFE8DD, 0x2A88FACE, 0xF10781C6, 0xCCC4E32D, 0x6B97D811, 0x77D3964B, 0xE0716CAD, 0xA0E2D656,
+0x80303957, 0x454E0449, 0x40B1477E, 0xA9764E24, 0x0CDEEE0C, 0xB1018FF2, 0x31A173AD, 0x5581777F,
+0xD94B705B, 0x424AD702, 0x837A34B8, 0xDF91438D, 0x27CB6069, 0xB89C51E2, 0x24C29C17, 0x74330266,
+0xD80F7B08, 0xFB9E5D89, 0x87D2B0A6, 0x60890FD1, 0xE891DC0E, 0x75553C44, 0xC8EA94CA, 0xC1BE4925,
+0x9472195E, 0x18F5EC72, 0x77CBDE03, 0x346E3ED3, 0x24F504BB, 0x0AEF2419, 0x70D9E9A9, 0xBF5D82C6,
+0x2F346115, 0xB361836C, 0x82736E01, 0x770109D7, 0x5D86BCB8, 0x443FC084, 0x7AFF7238, 0x25C17B44,
+0xABBFE0D5, 0xF5B3905B, 0x2A701B29, 0x0DB00CD9, 0xF76FF4E5, 0x10F68B53, 0x16E6C0B2, 0x0BA94BF0,
+0x8C3B8AB9, 0xECBF0232, 0x16B6E345, 0xEDAB5960, 0x9027BB56, 0x121C24D2, 0xE8D524C7, 0xDDBE8E35,
+0x9F0A67CC, 0x16807046, 0xD95DC28B, 0xEE15AD9C, 0xF0F5EB79, 0x03447D7E, 0xBA6642BB, 0x3FB9C49A,
+0x1929F2DE, 0xFF24C7F0, 0x3FB5A6D2, 0xF900BC83, 0x1E08F512, 0x808EC19B, 0xE1187994, 0x68788F63,
+0x89420090, 0xCAB72B3A, 0xE3288650, 0xB82C1EFD, 0xE90B5EE8, 0xBAC0E107, 0xCD7449F3, 0xAE4B924A,
+0x8755F0F5, 0x9EB97946, 0xDC254FA0, 0x2A3C7D9A, 0xA8E10CD0, 0xA9B274DF, 0x4E362CE9, 0x2EBEEA9C,
+0xE358A44C, 0xE97E5D2C, 0x29BB37C1, 0xF6801CF1, 0xC42B4E5C, 0x829B574F, 0x59B4F8E9, 0xF5A622FE,
+0xCFA71B01, 0x3B641467, 0x660BEAD6, 0xE4278D2E, 0x4825C7B9, 0xBF317B75, 0x9676EB4F, 0x2F277723,
+0xDAB9BA59, 0xE83A51BE, 0xCEA3DFAC, 0x7904EA0A, 0x3E1BAE16, 0x3492D04E, 0xB1F9FEA1, 0xB3B6304C,
+0xED75078E, 0x6C063EAA, 0x7A0C67C4, 0x67EE4E8A, 0x0B92BC8B, 0xE3EFF5D4, 0x0D898B97, 0xA2CB743C,
+0x8559CD3E, 0x85F346DC, 0x039E791B, 0xF3F63BF3, 0xD8653400, 0x398E809A, 0xB8DE07DC, 0x666F7BE7,
+0xD87F5367, 0x2F90B2D6, 0x8BC62A3D, 0x2EDF9F84, 0x8596D299, 0x9F780585, 0xFD3E0453, 0xBD43E406,
+0x4FA9FF2A, 0x999E1DC4, 0x70749004, 0x8BA85501, 0xC0ABF6B7, 0xAA585A48, 0x0571E8B9, 0x64356CF0,
+0x81750E09, 0x92C9F08E, 0xAE0DCA77, 0x5AD4B4E7, 0x8974DD35, 0x35088092, 0xD2D8ECB8, 0x37C27305,
+0xBA2368CA, 0xFB77A526, 0xDFC083F0, 0xB76AB963, 0x645D2F2B, 0xAB50794C, 0xA23BD91E, 0xC3B97899,
+0x801F2A4B, 0xC2BA5B46, 0x04BCA72F, 0x051B9260, 0xE95B0A8B, 0x5F6E1746, 0x9623F520, 0xB05CDD24,
+0x09CBBF42, 0xFDF8D147, 0x92F5E595, 0x4D50901E, 0x61A8F0EE, 0xBEDD7B41, 0x6D00C379, 0x2E138544,
+0xB8989B1A, 0xAF64D732, 0x939BDA4E, 0xBF1073FC, 0x05D386FF, 0x9721CE8D, 0x302438A3, 0x20564F6D,
+0x454C6F2C, 0x381C38A5, 0x4A75964C, 0x78E8ABC9, 0x4C77AE47, 0x09F2BEEE, 0x68154A01, 0x1D175B71,
+0x22C94133, 0x8FFDB1DD, 0x29FF75BB, 0xE4EE1E12, 0xD049E387, 0x2153546C, 0x1C51E8A5, 0x76736D10,
+0xEC735C5F, 0x77372942, 0xB7478A3E, 0x0CA73F8D, 0xCE3FFB17, 0x61AD1EE9, 0x3C329792, 0xF49F6314,
+0xFF3B5A26, 0x8BD0103A, 0xE0CE7A21, 0xF801A8C0, 0x1E534F15, 0x53C36510, 0xE61D12D3, 0x02B26AC7,
+0xF264A4A0, 0xBF6717D7, 0x6E802928, 0xE24363BB, 0xFEF9DE33, 0x840A9173, 0x8413F25C, 0x4A3F2D0F,
+0x21EE8142, 0x9829E130, 0x8386790C, 0xB1EFC62E, 0xC4FBB77A, 0xBC3683D1, 0x1A259C7D, 0x8F263590,
+0x4DF3F841, 0x2336D92C, 0xDDDA96A2, 0x6F2C721D, 0xE98F3996, 0x4C8A51E7, 0xF78105FA, 0xF8269B9A,
+0x434733CE, 0xECF72360, 0x9E5621B1, 0x13B9243A, 0x4FD352D5, 0xEB6D52AA, 0x7F7FC6C9, 0xBF41BFFC,
+0x1B241B7F, 0x951AD862, 0xD1F53DFF, 0x41BBD661, 0x2190B676, 0x2050E452, 0xC8DF725A, 0xB4918547,
+0x22240029, 0x46F935B4, 0xEB204F9A, 0x7390BB22, 0xBCB32E7E, 0x6DA33F24, 0x25A340D5, 0x6F67BE03,
+0x572A34A2, 0x8EEDF483, 0xABA66907, 0xCC3E5627, 0x1186496C, 0x38DA71DA, 0xFA6A4AB4, 0x3D4CC4CE,
+0xEFCCCC8B, 0x11F7BF24, 0xFD85C97D, 0xA7E7615D, 0x0AD019B6, 0x7D4213B3, 0x6329AC3A, 0x1BE8170B,
+0x05CBE026, 0x35F3834D, 0x48E1DA26, 0x40E3BB5F, 0xEBA9CE51, 0xE9818ABD, 0x5E01DCAA, 0x53D47007,
+0x7021D215, 0x8867C9AC, 0x554697BE, 0xCC22C1DE, 0x8EFA47B0, 0x4A5CCB77, 0x218B9B7F, 0xA2F562A0,
+0x37F606B8, 0xD5A1D32F, 0xBE5C8C1F, 0x8C1188C2, 0x30591730, 0x01A923E2, 0x81125A96, 0xAC967219,
+0x6F316629, 0x3615B88D, 0x58F4F77F, 0x1DBB9A08, 0x3F4A3B57, 0xE726D48D, 0xFB810505, 0x81FF1D23,
+0x6306C627, 0x302EAA83, 0xFEAA2A48, 0x71EA3D10, 0xE7AE9288, 0x0745DC60, 0xCE128CE2, 0x0115F481,
+0xC8A15172, 0x383A82D6, 0xFB340A0F, 0xB73D9855, 0xEADA13B8, 0x525DCD80, 0x770A1E18, 0x9EE024A5,
+0x0316D3A7, 0x5F4D96E6, 0xB6C21AE8, 0x06E33158, 0x43F091BF, 0xBEDC88FD, 0x7B4B670D, 0x667A9E99,
+0x7FEDFC00, 0x721AC193, 0x13AA7B47, 0x8A4DBFB2, 0xC0639172, 0x5E958A6C, 0x7054C187, 0xDB463068,
+0x3D5BA494, 0xA211620D, 0x1273E578, 0xFBB04A26, 0xAA8A811A, 0x8892A316, 0x5CE4C9BE, 0xD9A6DA3C,
+0xFCE3A0E0, 0xFC59D07E, 0xC4CD7356, 0xDA5BC001, 0x20158E58, 0x2526D29B, 0x2DCC7E47, 0xBADD13B5,
+0x5ACB858B, 0x440DDB66, 0x67DF6A0B, 0x507D88E2, 0x7B80EB1E, 0x189ADA15, 0x965463C9, 0x3308BF3B,
+0x6C42200D, 0x8953E16C, 0xBF25A46F, 0x6AA19670, 0x80A3E120, 0x41E72CFC, 0x4BFBB272, 0xFC5C67C2,
+0x70E341C1, 0x2BB8B4D5, 0xF4A91D86, 0xEA2A0EC5, 0x51D0F593, 0x8DD24D00, 0xBF9DA15C, 0xA4AA0ED8,
+0xE73C9ABE, 0xDC524A4E, 0x287D3B9C, 0x268BE570, 0x0B70BDF2, 0x773B4C2B, 0x54FBA2BC, 0x377324E1,
+0x5D515A4B, 0x6D3FCF3D, 0x53D109FB, 0x82727823, 0x9F14438D, 0x084884A3, 0x1A9DFA21, 0xC8AE7F2E,
+0xA0CF62B0, 0x82A46066, 0x286AD9F8, 0x768D6303, 0x7B20F8DD, 0x261D2322, 0x0506D9D4, 0x4CD33F2F,
+0x26ED391D, 0x73558C70, 0x70427761, 0x6B9471B5, 0x17D53036, 0x90271C00, 0x3C6D7276, 0x965B0D93,
+0x94C6D9EC, 0x7B4DC40F, 0xA3C45932, 0xA38D83CB, 0x43E701BC, 0x2142F553, 0x2CB05A05, 0x98159E45,
+0x848ECF91, 0xE2710670, 0x640D6F12, 0xFB1F5F36, 0x46DDE2EB, 0xFFF3DA6D, 0x71CB257B, 0x83DA24E1,
+0xAEBE206F, 0x28917153, 0x494872B7, 0x44ED2B6D, 0x61BE1249, 0x443BC849, 0x2B3B6F5D, 0x5D84DF6D,
+0x9F41DF95, 0x41628A6A, 0xF423D2AE, 0x220BB3FD, 0x0CC99E4A, 0x1AF66867, 0x0D5897D4, 0xE22AFF6F,
+0x11E44B01, 0x493AA9C2, 0x6B513E52, 0x50272E82, 0x387F1C96, 0xEFCB04D4, 0xF16C821B, 0xFAFD5268,
+0xB315CD81, 0xDC8B4CFE, 0x38D2021F, 0x438E1CD6, 0x676382FD, 0xCAE6DE64, 0xE22941BB, 0x0256A3B2,
+0xB83EDD33, 0x9BD20756, 0xC9C54413, 0x07C5530E, 0xA956A2AA, 0x95B56BF7, 0xCEB58524, 0x40048395,
+0x34BC805C, 0x85ABCA86, 0x8F3F30C6, 0x71688644, 0x45718170, 0x0ABAF420, 0x072AC3BE, 0xFD349053,
+0x31C75A81, 0x8DECDB9A, 0x1D9E6A4B, 0xA790ECAA, 0xFA3C4B41, 0xE3328678, 0xFF97A11B, 0xDB2B8A95,
+0x38BCF395, 0x2B295992, 0x911C14E0, 0x8660C578, 0x727BDACF, 0x0EFBC89E, 0x8FE3AA37, 0xD1C28168,
+0x4FD9FD0A, 0xE301EE04, 0x8E6D6D15, 0x8BEF0379, 0xB799688F, 0xEACDDDCF, 0x558ED20E, 0x53746D6D,
+0xCA2D5835, 0xBBE7EDCB, 0x4CC1AD1C, 0xAE4DEF61, 0x6AA4B68B, 0x48562AEB, 0xC5041FA1, 0xCF3FAC91,
+0x5C1BCB4C, 0x91854A43, 0x3573278B, 0xC2D1B492, 0xD2656AD7, 0x4CD8A57B, 0x760D7E26, 0x8BD186FA,
+0x7B58568F, 0x9923A366, 0xB7C81966, 0x1B2FC67C, 0x1268EEEB, 0x3012DC2E, 0x874DF4CC, 0xBBC71885,
+0xAB635447, 0xE3CAFF8C, 0x4A73ACF1, 0x0037F497, 0xD8CB2527, 0x703A1F24, 0x96F46AFD, 0xCDE04188,
+0x1E65C653, 0x32A2EAD2, 0x73262E16, 0x18A14353, 0x88768B72, 0x161B5B1C, 0x8BE70CDD, 0x74A87FAF,
+0xF9625D4C, 0x664F9B55, 0xBB70EF7A, 0x24860DD0, 0xF2B6C6B9, 0xA5F4F64A, 0x56A84342, 0x94B159B1,
+0xF81F5530, 0xE31246C3, 0x3ABCEA6D, 0x6C56BF33, 0x171C9C7F, 0x987D7BC0, 0x625C874E, 0x25518F81,
+0xDC6967D2, 0x8D8A1D05, 0x89F7F20A, 0x43339937, 0x351B7C8E, 0xE4DA11F6, 0x4AE8EA13, 0x4FB33BA3,
+0xF8891520, 0x1F731F82, 0x59642B0C, 0x020B5E28, 0xB0A7D2D5, 0xA7798808, 0xFA07E4FD, 0xD713E3E3,
+0x5CB3CD51, 0xEDDDC28F, 0x0F4CF26D, 0x6CD6E8EE, 0x0F3FAB6E, 0xA5F6F356, 0x8911E608, 0xCD352D4B,
+0x7BD7A85B, 0xB450801A, 0xC68103C0, 0x0103DB26, 0x90C03F1F, 0x69749140, 0x7E410F9F, 0xF9AEDE96,
+0xF43C0464, 0xA638DA1E, 0x6147001A, 0x5A50C3E9, 0x97C1AFDA, 0x0757296B, 0xE64CEF20, 0x6DE48482,
+0x8FDB36B6, 0xD5095DCE, 0xCA190FC1, 0xEC46C681, 0xE71D9849, 0xFC6F0E92, 0xF7EF4AD2, 0x161AA0EA,
+0x86E6F166, 0x0A45F48B, 0x5B9A02AD, 0x076B73EA, 0x0A6CB527, 0x1B16CFB1, 0xCDBC816B, 0x242A5CE7,
+0xE3B7C520, 0x4D977491, 0x58F6087F, 0x90672E0D, 0x3360ADC7, 0x12062B91, 0xC485ED5D, 0x8DF19AE7,
+0xF89F5589, 0x07092DE2, 0x3943527A, 0xADF99D1B, 0xB5E11960, 0x350D3BD3, 0x8D4C50BD, 0xCDE8DE20,
+0x55F683B5, 0x04907483, 0xA58AFCED, 0x2856FF15, 0x92719466, 0xE3AC554B, 0x7EF94CC5, 0x3546475B,
+0xC199AD64, 0x298A20CA, 0x948E7706, 0xC9619BBE, 0xDFD7E1C9, 0x96FF40BD, 0x59113123, 0x79C4CC85,
+0x524963F9, 0x93267BEB, 0x7C48D92B, 0x20A4C474, 0xE98248D0, 0x407CA15C, 0x50794A4F, 0x73682DFB,
+0xBBECD1FA, 0x5BF1283A, 0x7C30E8AB, 0x1A26E75E, 0x624ED08E, 0xD901864A, 0x2FCD46EC, 0x6C77E31E,
+0x5B856F52, 0xA646C369, 0x350176D1, 0x4BD6AB3B, 0x4F64B07B, 0x5EE166A6, 0x4F1BB8DC, 0x1311F5AD,
+0xEBD382E5, 0x08306E4E, 0xE5FEC6A9, 0xEB3887D9, 0x282FCB0E, 0x570CC655, 0xBAEC2AFA, 0x046A7764,
+0xCE324BA1, 0xA0A822CD, 0x22398566, 0xD53A82B2, 0xD6BB077F, 0x8AE80D22, 0x347A74E0, 0xC5760DD1,
+0x0D7C7EAA, 0xA3AD6E48, 0x3EC83369, 0xAB9FCD59, 0xD4F645AD, 0x223289EC, 0x1AC1C160, 0xB21FCDEA,
+0xB68D364C, 0xD9DE51B2, 0xCE9B6926, 0x4DA1CA17, 0x5B56A91E, 0xAD0C4292, 0xE2597B03, 0x930CEC07,
+0xE55117C0, 0xAE6F9E99, 0xADE7B355, 0x2A3A329C, 0xFD9564F4, 0x0F2B8CAB, 0x8FDEB83B, 0x53D98AA0,
+0xBBEEDE2A, 0x8E1D4DA0, 0xE0CDCAA8, 0xB0E92F12, 0x72F8C850, 0x365A7660, 0x6A72DC86, 0xCFAEC579,
+0x458E4ED7, 0x2A2186E0, 0x596D8310, 0x75892EFA, 0x9E48D1C0, 0x516E7306, 0x0ED02CD0, 0x7AD44155,
+0x1AFFD257, 0x423F99F7, 0x84139E24, 0xBBBB21D2, 0x93BE5234, 0xB773A689, 0xA42D03E8, 0x874FB70F,
+0x8E55C11A, 0x5D0BAC67, 0x345467A9, 0xC5C88C47, 0x16A77B32, 0x62755EA2, 0xD2F1BA5F, 0x694D400E,
+0x00D11B0A, 0xB7BACE86, 0x3E9BAE75, 0x30C00205, 0x09BF7407, 0xA032F9B3, 0x65D4E8A6, 0xCB4E0259,
+0xE02C92CF, 0x3492379A, 0x9E2D15BB, 0x4A6F0C15, 0xD3F7036F, 0x38C5C6BE, 0xF82964DA, 0x540C7AE1,
+0x78390520, 0x426D287F, 0x69C32321, 0x772EA13E, 0x3F3893AE, 0x317398FB, 0xDE22654D, 0x0AFF5E6E,
+0x7E548EB8, 0x08938B33, 0xBB7CFA6C, 0x0C090147, 0x98572E41, 0x0A7C88B8, 0x4BE9B435, 0xAD7A8C52,
+0x3B936C88, 0x98B3CBED, 0x618C82D4, 0xA7313E21, 0x6461DD88, 0x415FC9FC, 0x5FDA079B, 0x8425A964,
+0x706BB67E, 0x08DE3CDE, 0x8A79A6C5, 0x970994BB, 0xA689E724, 0x3A341624, 0xC121EEFB, 0x852694E7,
+0x607D02C3, 0xBC36F74D, 0xE935DFDE, 0x1527FBFA, 0xD51BFB19, 0x878B4793, 0xA040B6AD, 0x7FED64BB,
+0x3E49B177, 0x7DACA736, 0xA1794C2B, 0x38EA548C, 0x7F618891, 0x50984C3F, 0x93889138, 0xF04A827E,
+0xACEF0416, 0xAC3BB879, 0x88F672DE, 0x4544A7DE, 0xF15FDB42, 0xCDBFE5FF, 0x3CB29293, 0x10BE5144,
+0x67D291A5, 0x6917557B, 0xDA60B2F3, 0x0A140F71, 0x9640500E, 0x3EDEFFFC, 0x8683E7E1, 0x4C6A6B7C,
+0x0AD8CA5A, 0x9ED36DAE, 0xB3C5A5A3, 0x5A3C93DD, 0x2082A815, 0x12BFB99D, 0x32A91D54, 0x770DABB1,
+0xA0788346, 0xF41BE382, 0xDB6C41C0, 0x4A588A70, 0x94AFBA33, 0xF5F58282, 0x215E4092, 0xA4F20183,
+0x690FE6F4, 0x8A1A1F3E, 0x45A3225E, 0xA4921B31, 0xC9F45905, 0xAF7BFD75, 0x50A70D84, 0x28ED5F6F,
+0x25FA6547, 0xC3CC5347, 0x3AB9A91A, 0x040257D4, 0xD6E7AD8A, 0xF6AC4BFC, 0xEEAF4A5C, 0x2598F68B,
+0xE1DF5927, 0x37D973A8, 0xF49FFFF3, 0x960DEB28, 0x01437E7F, 0x9645D3F1, 0xA25F5BDB, 0xB9183692,
+0x9EEC96D1, 0x9143C9D8, 0x42D0CA17, 0x997619FB, 0x4A6AA90B, 0x66C414A3, 0x1B385AFD, 0x4D791230,
+0x07507E4C, 0x829983DC, 0x27B9D988, 0xFD28E154, 0xA6E5852E, 0x1624675F, 0xE04135A5, 0x3C97C7FC,
+0xFA7F81AA, 0x2AFF7AC2, 0xAE298A1D, 0x5803CA39, 0x7C0D2471, 0xA2BEE2DD, 0x75A533D1, 0x02F9D09B,
+0xA84411DF, 0x9E9C7F10, 0x573B3B36, 0xBF020CB1, 0xC31C8396, 0xC879170A, 0x773FC529, 0x22227B61,
+0x32C7A35C, 0xAF733A26, 0x22D36114, 0x5FF87F82, 0x8BCD189D, 0xD2E5869F, 0x02FD51C1, 0x95AF6F1C,
+0xA9E8F910, 0xBFBDC992, 0x86FA3BD8, 0x12D10E59, 0x585BB8DD, 0x0F7752C9, 0x2AE27CA7, 0x8227D203,
+0xDCA29D63, 0xE4347913, 0x6793FA5D, 0xD8F35AB9, 0xECB0BD2D, 0x8D65E0F7, 0x68DA86F1, 0x6F10E2E0,
+0x43E649C1, 0x54C373FE, 0x2F377DBF, 0x4194CA43, 0x96241F5B, 0xB872F2CE, 0xD82842C1, 0x051880C8,
+0xBC4FD93E, 0xE0BC6E7E, 0xFD63E2A1, 0xCC9A67BD, 0x636F636E, 0x88337E91, 0x98E7ABB8, 0xF9856502,
+0x07434F7C, 0x61C26B62, 0xACF4A7AD, 0x8E3B3116, 0xF972F74F, 0x1A54A8CB, 0xD8ACADC3, 0xB0594B3B,
+0xF73BA52C, 0xA09B3659, 0x401CBB16, 0x8D094A44, 0xC5D86529, 0x874F1BF6, 0x61AF381D, 0xA4F12CC0,
+0x5AAEAC18, 0xEEF80D77, 0x59A08A7D, 0xFF497000, 0x2D3A0895, 0xFD71BEC6, 0xF942732F, 0xF4A32D50,
+0x93F72DC1, 0x7496D715, 0x23F300D2, 0x5FDA274D, 0x17A6F93F, 0x9053F5BF, 0xEA25A943, 0xC977062C,
+0x67A14459, 0xD037A5D1, 0x9255D61D, 0xFA2B2C1E, 0xC2D87C70, 0x5A4485AB, 0x5774026B, 0xAE46535E,
+0x1041C37F, 0x01F4EAE8, 0x93F53DE1, 0x0664AE90, 0x0075D723, 0x287996C6, 0x56A575D4, 0x2572D264,
+0xF84A2BC5, 0x61A591F8, 0x76571FB6, 0x2D743E87, 0x32400F3A, 0xFDFFF9C3, 0xF85408C9, 0xCD6D9A7A,
+0x41847FE9, 0xFDE546EC, 0x261BA391, 0x7D2F9EC5, 0x68680F2C, 0x14BB0726, 0x4661A237, 0x8B1533CC,
+0x6A3AE421, 0xD2059644, 0xEF20BD4F, 0x215EFB44, 0xED967265, 0xCB20535B, 0xE238860A, 0xB7140DE2,
+0xB6FCBC10, 0x321AA350, 0x2F8F14AF, 0x70C81C5B, 0x7949A357, 0xC8A06DB9, 0x832CD70B, 0xC5141AA2,
+0x096B0A70, 0xAFD8F8F7, 0xE2120862, 0xC6700500, 0xC7AFF5B3, 0xD22E2419, 0x79189E6B, 0x0144B04F,
+0xE6044715, 0x8995048B, 0x4BBCD5DD, 0x6592CEEC, 0x0D4AAF5B, 0xF98134E6, 0x7DC539A8, 0x0C143897,
+0x4A73911B, 0xEEC6B9D0, 0xE26F9941, 0x063F691D, 0xE16D3843, 0x3B0F3492, 0x28373D91, 0x9D5C7898,
+0x8311F807, 0x5FDD5893, 0xAC3B7127, 0x890C4020, 0xEAA9F97E, 0x1FA25BB4, 0xB5806A58, 0xEC29382E,
+0x6971B74C, 0x2AA68E9E, 0xD6466C4C, 0xADD12318, 0xFA15AD88, 0xFE91BFB0, 0x4D19156F, 0x5A772A54,
+0xF2BC766D, 0xBC859876, 0xF98BF49A, 0x7460FD58, 0x63300E5E, 0xED4F21B2, 0x698032E8, 0xB3F28A5E,
+0xBCF12627, 0xA0B4C424, 0x721534C9, 0xBD9B8760, 0xB0684BE1, 0xEF117BD3, 0x7EB82F6E, 0x5D2B6092,
+0xF37406DE, 0x16B09421, 0x9E1B0D48, 0x52A1274B, 0xFF4DA484, 0xEFBF0B23, 0x3F3E7791, 0x35DA4CB0,
+0xEB2C99AA, 0xE28D49E3, 0xB881995B, 0xD9266AD6, 0xE6246431, 0x5CC552D6, 0xA3D905B1, 0x44B654A4,
+0x04BD5A1E, 0xA5D8208B, 0x3A997D36, 0x5B38BA5F, 0x8F367B5E, 0x56E53FD8, 0x416F70C9, 0xB9D91D96,
+0x0DE931BA, 0x04A90BEE, 0x3ACFB576, 0xB3F24C36, 0x172ACAB2, 0xEF103CA3, 0xC521E4E2, 0x0180C653,
+0xD43C3CF7, 0x3D9CB811, 0x6E8348FA, 0x2F447540, 0x456BDD43, 0x6BF17DC1, 0x14C60241, 0x449B0491,
+0x1E4FDEE9, 0x1CFEFB86, 0xAC756214, 0x442F94B0, 0xF6D05885, 0xB0A1FD74, 0x5E35595C, 0x9F6B0564,
+0x340DB22E, 0x12BDEFFF, 0x3148A31A, 0xA5012F27, 0x9E0BC5EE, 0xACD39DF9, 0xAA4A2C76, 0x89A955D2,
+0x09925AE0, 0xAA286E48, 0x9CBC1027, 0x01B0D2DD, 0x295165F5, 0xB26D9A54, 0xA12FD887, 0x211E2EE1,
+0x7E5ED2D5, 0x8D4457AE, 0xD7A8AA41, 0x7D5F7FB0, 0x57B8730B, 0x5D8A4985, 0x3AB3D8EA, 0x547693BA,
+0x337AAE7B, 0x6DF36954, 0xF1CEEC7C, 0xFCBE73FF, 0x386D1F34, 0xFB276EAC, 0xFD056031, 0x3DB3F9A1,
+0x933D3F1F, 0xA38D659C, 0xEB535B80, 0x67B20D66, 0x967C9550, 0xF22E5D76, 0xB25D3321, 0xFA4553DD,
+0x6B441C2D, 0xA1A8B6CA, 0x90917CEC, 0x1F3A3FE9, 0xB0B7F3A0, 0x02C3642E, 0x4BE67CE4, 0x3091548D,
+0x7839D1F0, 0x2B3642B3, 0x074EDB2A, 0x1DA1FF9C, 0xA1868905, 0xA984D68F, 0xA645F3B7, 0x9E2DD0C1,
+0xCD006B87, 0x1541C62B, 0x067A153F, 0x48B1DA63, 0x81208654, 0x043219D3, 0x22AFED91, 0x82A66B07,
+0xBFE4EDF6, 0x151850F6, 0xEB15626B, 0x4581FE12, 0xC998B167, 0x85512838, 0x537E6065, 0x11698A84,
+0x1BF15590, 0x3E49CE96, 0x77667F55, 0x0B66B4BE, 0x37686BDF, 0x95276821, 0x21C3D8FB, 0xDDBF834E,
+0x15459EFD, 0x72FD5C0B, 0x4AB695B6, 0x554BDB82, 0xD2801541, 0x4B7E5444, 0xF0EF7F16, 0x027EB3AD,
+0x5680DFC9, 0xDE65C4DE, 0x79297C9B, 0x5CD11002, 0x7BE21FCE, 0xBF8CB124, 0x02E3F958, 0x8148970A,
+0x62295973, 0x22F11660, 0x84B6C38F, 0x6DE55862, 0x0CCC34F4, 0x60A66D1E, 0x61C77A61, 0x0B3B221F,
+0x0CCA4E25, 0x882DDEA8, 0xE7FD7BA9, 0xC3C3A462, 0x86F30F19, 0x7A6FE91C, 0x7DE322BD, 0xA7AC1240,
+0x99C4CF4B, 0xB2ED89DE, 0x47A14390, 0x929D6789, 0xBD9D5D77, 0x9AB2AC25, 0x66E9964B, 0x14E91DF6,
+0x3C8BA2D7, 0x174FA4FF, 0x984784DA, 0x0ED1B679, 0x0CBD94EE, 0x8E678A55, 0xC13D8BE0, 0x1FF72C61,
+0x57970C32, 0x62111E9E, 0x1F82148F, 0xA5CCC9B0, 0x8C0DCFFD, 0xFA68837F, 0xBA90AFE4, 0x4981219E,
+0xC8A23D82, 0x38FC5828, 0x4415A4F1, 0xD60283C3, 0xCA90046B, 0x98F7EEB5, 0x38C5E872, 0x76772695,
+0xC116A013, 0xF022FEE3, 0x1A7E9216, 0xA8684C46, 0xD4062DAB, 0x9A5BF09D, 0x396C3247, 0x3E009CF0,
+0x8E2C8D10, 0x62DD6A1A, 0xB860168E, 0xA3333F6B, 0x9AE7BA5A, 0x2AA642FC, 0x6711652F, 0x06CC3C43,
+0xA91F0ABC, 0x3502ECBE, 0xA343F195, 0x2AA9C403, 0x83A410A1, 0xA60F0AFA, 0xB5405D01, 0xBF0DE62A,
+0xEEF7B792, 0x5A22BAC1, 0xCC683580, 0x129F3509, 0xAFC13297, 0x941382E2, 0x3A205B77, 0x36B93FBC,
+0x6FB1EF4B, 0xB7A22958, 0x5DF7078A, 0x111F3554, 0xE75E2630, 0x2A8DACC6, 0x2D22D95D, 0x87B2C75F,
+0xEA38074C, 0x528FD597, 0x36B8AB87, 0x8AAB70F0, 0x075CB9F0, 0xF42CD45A, 0x7BBD8D0E, 0x4AB92F1C,
+0x065ECC1E, 0x77A67FA3, 0x3B07D7E9, 0xEAB927E0, 0x9FE5B626, 0x1ACBECE5, 0xB46A4CDC, 0x02715499,
+0xDEBE7A74, 0xC03763F1, 0x39E62905, 0x6464762C, 0xE5CD825F, 0x87FAAA34, 0x078DC2D4, 0xA14E7BE8,
+0xA60FEABD, 0x4DCCE9AA, 0x28D588B5, 0x09F57CA8, 0x60EA441F, 0xEF934F35, 0xB4601DBD, 0xE2B03703,
+0xF5B0D921, 0x9DC16431, 0x2FC88CDD, 0x27A471A4, 0x615735F7, 0x7C414E7D, 0xF4F54E2D, 0xB47D44D9,
+0x05F8405F, 0xDAD3C5DB, 0x4863356B, 0x0BA920CD, 0x333FBE46, 0xF886B7A8, 0x50E8267A, 0xF27FB378,
+0x379C06B7, 0x573AE216, 0xD963905A, 0x1BFFA69B, 0x34DF4607, 0xBAFE4F53, 0x7BEB52E2, 0x736118FD,
+0xC7A4A964, 0x8B36F2EC, 0xB932D57A, 0x27011752, 0x34F52803, 0x402F75B1, 0x78E053F2, 0x7BFEB5C1,
+0x17669C50, 0xEE9F1D0B, 0x88F1A944, 0xDF7F77E2, 0x0B21046D, 0x7AA274C9, 0xB2232ADE, 0xED4D885D,
+0x29F87F30, 0x3D840D99, 0x67C161F9, 0x419028F3, 0x26EFCAF1, 0xAD82F7AB, 0xF0226ABB, 0x37D8CEE9,
+0x30765E23, 0x915A77C0, 0x9B11C2A8, 0xA43958C9, 0xB6A3FF3E, 0x85719D69, 0xFD0AA81A, 0xC3947F25,
+0x91D59394, 0x6516E126, 0xE2252FCF, 0xDE71A515, 0x8ABE4E17, 0x447F0B59, 0x9E32F7D9, 0x98573B1E,
+0xA544D716, 0x240981AB, 0xCF1237C7, 0x9DBD15AD, 0xD91D56EC, 0x86C31E4B, 0x9133408D, 0xDC8E8693,
+0xB11EDE89, 0xD655E60F, 0xB7D1EA6F, 0x01E93489, 0x89A54BD1, 0xB58E62E9, 0x8449AB90, 0xB47B4F8F,
+0x3EF33590, 0x4CA5DA43, 0xE0EDD740, 0xD953B398, 0xF5DDC9B8, 0x600FC050, 0x91B39BD5, 0x2EADEC0C,
+0x2C604EB9, 0x40FDF312, 0xE7062CA7, 0x63FBA5AF, 0xEB78419B, 0x6B39FC0F, 0x97D4FE9B, 0x49A7B1E9,
+0x4E5C0A23, 0x730E5DA7, 0x3AA4FB84, 0x26943E19, 0x928AF789, 0xFB60048B, 0xCB9450BE, 0x5F3EA844,
+0x98D6729D, 0xEACCC1B7, 0x0A0A4EF1, 0x63C094B7, 0xAD904861, 0x695D7B0F, 0xDA7A7F7D, 0x7EE0C4DB,
+0xB345764A, 0x188F0C15, 0x902D9294, 0x60C94B42, 0x16DB9B25, 0x6F95393B, 0x286BB999, 0x8309E684,
+0x08C997B1, 0xF69E17C9, 0xD3D9B32F, 0x61C6EA22, 0x5E5545FF, 0x329124A8, 0x8D3E0D80, 0x8BD2F6EF,
+0x041010E0, 0x929B0EC6, 0x261E34E5, 0xFE508FA2, 0x22929C2A, 0xAF89B9DA, 0x8FD52BBC, 0x4B91B272,
+0x51E90102, 0x6A6BB79F, 0xF9B1ACB9, 0xCD169295, 0xD168ABCC, 0x4DE21762, 0xD37AD8B6, 0x60229E82,
+0x873E8B42, 0xA0DED03C, 0x0426C821, 0x76D54CD7, 0x1B0F4E12, 0x317F5B56, 0xD1FF818A, 0xA4948907,
+0x8201F935, 0x715087A1, 0xA1B1B913, 0xCFF38A9E, 0x4E947E62, 0xCA7BBDD4, 0x419146B0, 0x8A5DFD3B,
+0xA74ADB9F, 0x87BC0AA0, 0x186D3B06, 0xD175680D, 0xAFA1CCE1, 0xE08C2665, 0xF156D279, 0xD163D933,
+0xFD9FF218, 0xA8C7798D, 0x268276E9, 0x88E30449, 0x5ACACACC, 0x2344614B, 0xB7329700, 0x4489FD2B,
+0xF7C86CFF, 0x70F90886, 0xD05F5F54, 0xE5F8146F, 0xF55BBAA4, 0xD6129F17, 0xEA66C9BC, 0xE1F28275,
+0x9F97E189, 0x3385CB08, 0xD9A98FF5, 0x9E51D21C, 0x60720017, 0x22B7AF23, 0x17806578, 0x27A8AB10,
+0x7E712E4F, 0x9B27B045, 0x0A0FA40A, 0x1F947B99, 0x00E65639, 0x97462165, 0xE14B3493, 0x0A104232,
+0x927BBA62, 0x7CE64632, 0xEEE12C33, 0xE59135EC, 0x822B7C35, 0x98B70D97, 0xE87B2A22, 0xC7C78495,
+0x284A26D9, 0x233F32AF, 0xFB5EC711, 0xEAE65B7E, 0x86D84A50, 0x1BE18A04, 0x86D1309D, 0x6BD95819,
+0x371BDB9C, 0xA77FA490, 0xF2C093F6, 0x4538D9E5, 0xE3017CCE, 0x592FF258, 0x22EFECF6, 0x24D30F68,
+0x1AAA26C4, 0xA9E63C09, 0xB920F7A9, 0x038A82D3, 0x78773113, 0xBFFAD7CA, 0x15FAA583, 0x5377BF95,
+0x663997EB, 0xF659A909, 0xC608143D, 0x75F63F14, 0x7B831103, 0xF437B790, 0xE6117151, 0x38E70347,
+0x4B93EA0C, 0xD0A4F17C, 0x703367CC, 0x20D3B2B0, 0x22BA9334, 0x7FFA0030, 0x3F913043, 0xE86D682A,
+0xFEDDB553, 0x0E3F480A, 0xB5F35997, 0x583BF661, 0x8CD2F4D4, 0x8B70101B, 0x7BEC0F06, 0xA3E4B35D,
+0xB35571E9, 0xB25F34A3, 0x79AB4347, 0x9D4EDF5D, 0x8E1FA8E2, 0xBF29194A, 0x6BAE3A54, 0xD7BDEF52,
+0x9FCD4F6A, 0x2A18DA06, 0x30D67FFE, 0x0EC1FFE3, 0x2CFE5EB2, 0x9995F1DB, 0xF983A7C7, 0x9B976882,
+0x2FD671A9, 0x302BA09E, 0xEA9A3147, 0x56C4551D, 0x06F0403C, 0x99527A8F, 0x9E541A24, 0xFF890B12,
+0x70560051, 0xC08EBC96, 0x92DA75FF, 0x5A8F7DF4, 0x6D954AD6, 0x7F72D948, 0xB1D0DCE2, 0x81411B80,
+0xEBE0424C, 0x5181E4CE, 0x78030A48, 0x3D9CBE19, 0x169E9592, 0x13735E24, 0x39A14850, 0xFFB0B2A6,
+0xF6F0C335, 0xD7878362, 0x806249F0, 0xA7FA28FE, 0x4735802C, 0x1570EECA, 0xEBDCA33C, 0xB37BDFEA,
+0x84D07C7E, 0x70331E14, 0xB3FBEEB2, 0x20BDCBF4, 0x04E22B0B, 0xFE8E04C7, 0x72665464, 0xC5968D18,
+0x28497947, 0x8A1F12D5, 0x01892D0C, 0xDFF4DC7B, 0x9D5D96DA, 0x91D8E9CF, 0xABF03A73, 0xE05A9A9C,
+0x2522023D, 0xDB30643D, 0x7FF74133, 0xE073D5DF, 0x4829782A, 0x7ED82DC5, 0xC5282CF6, 0x285D8008,
+0xF99AE9EB, 0xC95D68E4, 0x2F65C7D7, 0x9D95E8F3, 0x1AEA4271, 0xE803A73A, 0xD281B81B, 0x85BCB95F,
+0xA26B47CA, 0xC944CEF0, 0x43D2B0CE, 0x80642877, 0x8E246E47, 0x47413838, 0xFA4AA49D, 0x34B3B893,
+0xF6CAFE88, 0x19829B47, 0xD6C808F6, 0xA155AAA7, 0xD2C8E249, 0xDFAE78B3, 0x23194682, 0x7BD949E4,
+0xE0F3E7F1, 0x8E3CA606, 0x5AF93028, 0x4A427747, 0xE96B951F, 0x63D90686, 0xA35F22BD, 0xE1C77072,
+0x99A8BFDA, 0x6B7EF011, 0x785E3553, 0x06B6CDD6, 0x9D7BB5DE, 0x061ACBB1, 0xB17AA1C4, 0x32B89F8F,
+0x3BC7EA16, 0xBECA4CDF, 0x8671291A, 0xA5131CD8, 0x27C0CC55, 0x93FAFEFD, 0x0B9F5D96, 0x3C8CBAEB,
+0x30C12E17, 0xA393A522, 0xD08BA717, 0x6BE83884, 0x337E0B43, 0xE03F7C65, 0x6A24B2A9, 0x134BDB25,
+0x0CE2B349, 0x6ACBC65C, 0x373A2B7E, 0x05BC5DE9, 0x8098C78A, 0xFF482AC1, 0x12DA988F, 0xF9DC3620,
+0xA6184AAC, 0xE2B36C3D, 0xEAFF2239, 0xDCDD5F14, 0x31A24077, 0x1D0C37C9, 0x418A476F, 0x886E18F9,
+0xBA5A1C31, 0x80188E2A, 0xCA8431AE, 0x4B7EAA84, 0xF9EBD2F5, 0x62F5B988, 0x78C9B92B, 0x225F0F07,
+0x004D94E9, 0x218AAC0C, 0x5D8BAFE5, 0xA1148A31, 0xBED14D3C, 0x6D9478A2, 0x14354A3D, 0xE192D1F3,
+0xAFEFFEDE, 0xAA81EE80, 0xAE39F48B, 0x9A3B6CE9, 0xA1EC3807, 0x5286DF0C, 0x6C24CA68, 0x5B6DBC52,
+0x4BBCFD55, 0x826034D6, 0xA761CB52, 0x3A0916BF, 0xCD54EA3B, 0xD6946006, 0x7C10EC9F, 0x93B8DD2C,
+0xF801E335, 0x64C59A44, 0xF8877A49, 0xD84B0EA6, 0x32FC721D, 0x8FC91AB6, 0x8A73CC91, 0xB4A1C63F,
+0xDA34FC1F, 0xB30BDB84, 0x5D0C0FF7, 0x33F62094, 0xF9C7C249, 0xBD1E50E8, 0x852F9894, 0x83D46A86,
+0x013C965E, 0x4810615A, 0x87558D83, 0x6DDE48CC, 0x40855549, 0xA197777D, 0xEDD157E1, 0xDF24F182,
+0xCB7C10F4, 0xE64E92EC, 0xAF2E6D72, 0x96962E1C, 0x0DC00D12, 0xBED78309, 0xCC1A0971, 0xD8F0BAD9,
+0xB792B2FB, 0x280B6D3A, 0xA98C8DDD, 0x5D9FBD08, 0xC121E163, 0xDC5198D4, 0x11D22A47, 0xBF891777,
+0x9FCB4765, 0x8068FF0D, 0xABEEF5FC, 0xA215C00C, 0x2A02B03D, 0x79CB2C68, 0xF36CE3AB, 0x01000000,
+0x44739F01, 0x64FCFF2D, 0xB366A9B3, 0xAB807A9C, 0x46F7A864, 0x4021B8A5, 0x8B128F76, 0x378AAD2C,
+0x34F31DFB, 0x6858F7DC, 0x09E68E97, 0x8190A794, 0x38AE710E, 0xACE8E32E, 0xE22553BA, 0xF4BEA053,
+0x28385CB6, 0xF1C75565, 0xD8B15364, 0x19E09766, 0x35A5429C, 0xBAE63081, 0x0B3A5F93, 0xC42D1554,
+0x45144CE6, 0x70BF070B, 0x751CCD61, 0x84DEDF54, 0xA6177074, 0x61C7C49F, 0x8D3B8548, 0x224A3AF2,
+0x50840D01, 0x42C269A3, 0xAE4AFCB2, 0x637451B0, 0xFE59250C, 0x92114867, 0x4C4F3565, 0x202036F4,
+0x8FB13372, 0xB1144546, 0x200E6CD9, 0x0FBF2A7D, 0x51189784, 0xCF8B363B, 0xDE702E81, 0xE7A0785F,
+0x8E067F37, 0xD69649EC, 0xEEB0AC95, 0xB53FCF87, 0x8CC0D5E0, 0xF562C6A5, 0xBFA35CB6, 0x5B7D6EDA,
+0xB0D4F9FE, 0xD53BDDE3, 0xC35F2E2C, 0x0991472A, 0x8973DD11, 0xA31CF34E, 0x83C76592, 0xC7E38DD4,
+0xE64CE374, 0xD860BE31, 0xF2DF95B3, 0x35F70CF8, 0xF7F600EB, 0x9DD52FCA, 0x20037812, 0xA550E121,
+0x803F9D76, 0xF62D4062, 0x45A5ECAC, 0xF40739DF, 0x67AC5546, 0x8901BD8B, 0x38CB6B55, 0x9CD0939D,
+0x2EB9DCAA, 0xCEC88DDC, 0x106B3285, 0x3A73278D, 0xECB5D9F7, 0xC0BECCCE, 0x15B06B20, 0xB25931A7,
+0x2190B04E, 0x6A0BEC50, 0x755ECD6D, 0xA377EAE6, 0x60814919, 0x980E788E, 0x9C1A36A2, 0x286D93A2,
+0x2B480F2D, 0x88828332, 0x8ABAA4A0, 0x10C382AD, 0x787B3B7D, 0x8C293F12, 0x872B7B04, 0x63F2B04F,
+0x131D3387, 0xA68DCEE0, 0x904AF398, 0xE338BFC7, 0x1B5086F4, 0xDAD229C6, 0x58BB8659, 0x87DA71DF,
+0x3AB3706A, 0x887A2C74, 0x7C60C98E, 0xBCFF4B03, 0xA641BB73, 0x4066D54D, 0x609B5B10, 0x3E924FD4,
+0x08A5BBCC, 0xC2F02CE0, 0xA4AAC2D4, 0x9BBA6C1A, 0x6F1227AA, 0xEB009C7D, 0xDA10D86A, 0x966EF8B0,
+0x39D48775, 0x138EE19D, 0x351DF7C5, 0x8BB06667, 0x84390EB2, 0x0C9F4E34, 0x5B8FB6A8, 0xA4F65F6E,
+0x1571F810, 0xC7C5F347, 0x3472030D, 0x7A6A0A92, 0x491BF5E6, 0xEC42BEB3, 0xDC4E7E63, 0x4A28E63D,
+0x9666861E, 0x6469FC06, 0x8F5E5FF4, 0x8D072DEC, 0x9030C75D, 0xFD6892BF, 0x4C2E5DAE, 0x7E5C3110,
+0xACB4D59C, 0x20D589AF, 0xEB30AA15, 0x7F5394D3, 0xA329E5F2, 0xB6231F70, 0x037FF4AC, 0xC9CB8DCB,
+0xBAACEB55, 0xCF4A6F5C, 0x18E709BD, 0x14DC77A5, 0x714BCA77, 0xC6AA9B5C, 0xDD1C4886, 0x28FE270C,
+0x7159B34B, 0xBBE28136, 0x71645840, 0x5E647EB6, 0x2CDDA2DC, 0x300574A4, 0x01000000, 0x19769B41,
+0xE9FF194F, 0xF6FD6EEF, 0x8B2A78BC, 0xEEF88A1D, 0xB5BBCFB0, 0x6400E269, 0x82CCFDA3, 0xF94DE2D0,
+0xD6E9C2E8, 0x511F573B, 0xAFE4CC24, 0x375AD1F1, 0x3D67713D, 0xE3A1EFFF, 0x7F3D2FAD, 0x229C4A62,
+0xA56C4905, 0x0DA71A7F, 0x6D73F6B7, 0xCE91D66D, 0x3288D9D5, 0x558107F9, 0x1477DDC8, 0xCC881201,
+0xD80A643D, 0x0B11E081, 0xBBEBCF7F, 0x32459EBA, 0x1921B959, 0xBFA85B53, 0x60C21012, 0x95AFC4DD,
+0x7E3628E9, 0x51565B92, 0x0456458A, 0x4143B748, 0x67E6A567, 0x2F19DF87, 0x32AC0C50, 0xAED511ED,
+0x09FA64A4, 0x4E9F9062, 0xEE6E85E2, 0x3104251C, 0x52BADC8A, 0xBA950BEF, 0x7609F955, 0x29BAFB30,
+0x6A91C85E, 0x0AD020D5, 0xAE461047, 0x9525EC93, 0x7C19C4DE, 0x00EC7265, 0x9C6804F4, 0xC9FCDD83,
+0x4C0507A6, 0xF8BED502, 0x35308794, 0xB87B9C08, 0x11731CBC, 0xD34AA1AF, 0x1829D2DE, 0x4618B73B,
+0x613A7D96, 0xEEC4C858, 0x62ECA2A9, 0x61665DC1, 0xB390C836, 0xE0C67C73, 0x2F3F0830, 0x4537DCB2,
+0x663280D6, 0x25569ADD, 0xA85FD39B, 0xC833DCCA, 0x43AC053B, 0xA06A6E62, 0xED44E51D, 0xE4C719B1,
+0x27FF2FAF, 0xC56253CA, 0x488923E3, 0xC22187D2, 0xD8102F80, 0xF20E0EF4, 0x1EC3B48A, 0x27BDFEF9,
+0x261BEBE9, 0xCAAE29A9, 0xAD92C9C3, 0xCCF8440E, 0xB38DA5CA, 0xEA1C6070, 0xD03C3DE6, 0x80DA1F48,
+0x8E64C5DA, 0x617689AB, 0x95943A1C, 0x16052663, 0xAA5DF193, 0x2AE9E084, 0xEFDBDC43, 0x264A096E,
+0x884752BE, 0x78F7A6D8, 0x7A8F6714, 0x98E45AC7, 0x4166AF87, 0x5B76505F, 0xB2DFEBC9, 0x2F6CDCE3,
+0x7CE7A27D, 0x128A11D1, 0xD788DE9B, 0xCD010B88, 0xCC4CE845, 0xD1515E24, 0x4F9B0E61, 0x0A7B1507,
+0xFBA5851A, 0x8263E4F2, 0x91A887A9, 0xE7FA08B5, 0xF885BC97, 0x11FDEDF5, 0x7FD1F51A, 0xE03AED53,
+0x63144AD2, 0xAC654A73, 0xAAD9302F, 0x423C6EA0, 0xEF94D7A7, 0xBB70DB72, 0x78AE2F5A, 0x35221704,
+0xF1C12A59, 0x894AEC29, 0x5DB506A7, 0xD36CC247, 0xE0E26A0B, 0x7547999D, 0x37471A8A, 0x1A6B24E3,
+0x60523068, 0xF7ED94A8, 0xD9D0771B, 0x2DF498BE, 0x212C79F9, 0x5C12D3DA, 0xCB7BA7A1, 0x2DBABC55,
+0x16E93EB0, 0x92A64EA3, 0x4246C089, 0x81166C01, 0x6EE6AF8A, 0xCE7972A2, 0xE04F3774, 0x4BD14316,
+0x8C2290F0, 0xE229D17D, 0x3C5C4CE7, 0xC63BCF99, 0xB32BA77E, 0x80564483, 0x932817EE, 0xE0205520,
+0x12BF9141, 0xB9A22708, 0x648E4214, 0x756D1A3B, 0x2E1871D0, 0xF03D41C8, 0x34699C4A, 0x5F0D5735,
+0x294199F4, 0x31F233D2, 0x765EBE6E, 0xB1CDFAC8, 0xB6C3B22E, 0xD7EB5D5C, 0x486FBCBE, 0xEAF50B79,
+0x5F06ED1A, 0xF2A384D2, 0x675E56B5, 0xBB3E2233, 0x6481DEDF, 0x41E5B54D, 0xBEA540A0, 0x6FF6018B,
+0xA12AF457, 0x42BAD70E, 0xADA005BF, 0xACD50E24, 0xACFFCAD1, 0xA2F2B7A7, 0x939A8EA3, 0x17DAE351,
+0xCB8A983D, 0xF900DB39, 0xD64F0391, 0xEECC2629, 0x5E2339E8, 0xBE4AFB0B, 0xFCF0669C, 0x0CF7C970,
+0x83E37F72, 0x587285BE, 0x9BFD8935, 0x5868DA6A, 0x0A983FCF, 0x9D41907F, 0x5055DCCF, 0x0007E5D9,
+0x0B83E6C0, 0xDF9627B1, 0xE8960CC7, 0xF94BF679, 0x762CDF3E, 0xC028F08C, 0x7780E7A8, 0x045236E5,
+0x15A67477, 0x5AAA08D2, 0x3CFC9DF2, 0xEA249781, 0xFD886515, 0x92C13C40, 0x93BBF534, 0x458D27BD,
+0xD733CAE4, 0x0C147DFD, 0xA3195C69, 0x94F2FBB9, 0x1A0501C7, 0xBF812B53, 0x12F3E5E3, 0xA6ACAFE4,
+0x5C825775, 0x7251785D, 0x17F7F257, 0x89EF8431, 0xC290E095, 0x0AEBB879, 0x2E9465EE, 0x64E51C3B,
+0x28C029CA, 0x10BD3676, 0xF9330479, 0x6A668BAC, 0xAFF314ED, 0x4EC355EC, 0x5CBD4EA3, 0x4BCBDE71,
+0x6BBE2D64, 0x7CED8335, 0xCFB2D952, 0x1E85ADF8, 0x327BC400, 0x00B0B5B3, 0x838585BB, 0xC3D6D2A7,
+0x4A00CEC1, 0x027631D1, 0x9C488DCA, 0x6D1E9ED3, 0xD3F9CFD5, 0xCDEEC25A, 0xF1CD6C57, 0x2C611873,
+0x5A9BE0C3, 0xDB9A83A1, 0x21C7A595, 0x0EBE3F3C, 0xB0AD1743, 0x9B9974CB, 0x6121DBB0, 0x2D6C3E92,
+0x8C9DBBB6, 0x9FBA84F5, 0xB2A80672, 0x00A5D4C6, 0xE71B8482, 0x7ED563F9, 0x1937C7A0, 0x69155A59,
+0x4AEC24CB, 0xB2EF576A, 0x9AA6BA7C, 0x314DC5CE, 0xD926A887, 0x8EE581BC, 0xDC353666, 0x10274483,
+0xBCFB30BC, 0x1C38F930, 0x97FEB4E2, 0x65B56E26, 0x195F1D92, 0xFB83F1FC, 0x9D45BF5F, 0x06828A94,
+0xE64796EA, 0x88864957, 0x7492CAB1, 0xD2CC0121, 0xBD4BCF62, 0xED1B9673, 0xCE930CAE, 0xB4ADAA35,
+0x341AB288, 0x23FC279A, 0xE942B102, 0x64B7E1F2, 0x4340F7A6, 0xEACA59B9, 0xCA11390C, 0x553518A2,
+0xE4F23C4F, 0xF99E65B9, 0xA4935E8A, 0xC13B9D30, 0xA3E98BA5, 0x9E99C7D4, 0x07CBA2D1, 0xF77E47D7,
+0xDFBD6E2E, 0x7D5DAFD1, 0xF5194DA9, 0x014405DF, 0x046FB582, 0x630B9C9C, 0xC811ACA2, 0xD7457C97,
+0x3A0F9ADA, 0x3CECB02F, 0xA6D2CF97, 0x10DC37F4, 0x67A820FD, 0x36FBD34C, 0x2C4710DD, 0xF8388FDC,
+0xEF49221A, 0x89F5E2B6, 0xF3B0A9A2, 0xE1AA1D47, 0xFF97FD34, 0x2FCD052F, 0x4C707A8B, 0x562F5088,
+0x53C49EE5, 0xA77AC702, 0x8ABEE7C6, 0x72CB138E, 0x78385276, 0x4368E452, 0x1D41F7B7, 0xA3A1BACD,
+0x1A62F8E4, 0x418C504C, 0x75727325, 0x0C467EEA, 0x5AAC0760, 0xB73E9F8B, 0xF10A2295, 0xE8831F22,
+0xF3A36897, 0x2ACA8020, 0xE2FA4C0D, 0xF18C903B, 0x4FF3C6A0, 0xABB567F7, 0x2ED16E5C, 0xD7138943,
+0x7F72DA5A, 0x8CCF8DDC, 0xD6FB5B5B, 0x5BD00AEA, 0xEC571BF5, 0x24450440, 0x71F31D3F, 0x799E9991,
+0x96F69019, 0xDD05353E, 0x273C727C, 0x5C6B2F45, 0xA1F4DA4E, 0xA3653DBD, 0xC802B404, 0x63698918,
+0x5666E11C, 0x97D0DB78, 0x97965579, 0x25574873, 0x83FF5F18, 0xD7038D54, 0x0457925C, 0xCB01E7B3,
+0xBFE0449C, 0x29C9CBA1, 0x99C5A19F, 0xE52DA091, 0x65E6BE79, 0x57E85554, 0x85D3B290, 0xEC0B3D65,
+0x03F6E6A9, 0x775F3686, 0x156DBE9C, 0xCAC5000E, 0xAE945D1C, 0xF87B3CF9, 0x06D0164F, 0x6B218B34,
+0xF7851166, 0x37AE3EAB, 0x36072ED2, 0xF787C0C3, 0xF94489C5, 0x09F212C3, 0x59597B92, 0x7628FF9D,
+0x55915237, 0x168BA756, 0xB0828035, 0xA7D48368, 0x64351047, 0x0F15947B, 0x15A95DC8, 0x5A410A71,
+0x5118A30F, 0x02A20244, 0x5D760474, 0xF6473881, 0xD1D3AD0C, 0x8F6A5F6F, 0x24EFB61D, 0x19E1DC15,
+0x7834DF21, 0xCB6EBB73, 0x74BB8B89, 0x80950F95, 0x3892274C, 0xB0973C2F, 0xD51C04E4, 0x80ECE830,
+0xB54230E4, 0x253FCC9C, 0x36202F4E, 0xC4186BAB, 0xCCEABB4E, 0x7688DAAA, 0x436DE4A8, 0x3059FEE7,
+0x7C734CDD, 0x2609C368, 0x876DF45E, 0xF89DC2C9, 0xFB78AE7E, 0xF695C6A2, 0x9DB2A9A6, 0x6C78B180,
+0x89AF897B, 0x8C00FA53, 0x85E0582E, 0x2808DC6D, 0xE3AD58A2, 0xB68AE065, 0x483AE4D8, 0xC8906413,
+0x8946AC1A, 0x56392935, 0x3FDCA28A, 0xB142339B, 0x091B3B36, 0xDAFACCF8, 0xE9D3C907, 0x93BD2B22,
+0x7B9A395D, 0xE7B4C41E, 0xE98DC006, 0xC384A5A7, 0x3A1CE2F1, 0x8E9E6B52, 0x9108B39C, 0x90A11BA4,
+0x70B96CCE, 0xE0BD9E6D, 0xBE31E6B8, 0x2F887A5F, 0x55882A98, 0x9E48C588, 0x101AAF2E, 0xACF7D2BA,
+0xE79B8FB8, 0xCDE366CD, 0x19B571DC, 0x21101363, 0xCABC6A1F, 0x4122EEDE, 0x7E8C54ED, 0xA7257F0B,
+0x1F087E7B, 0xC399975F, 0x92F449E1, 0xD8A4EBD9, 0x5B31C3C7, 0x97E23156, 0xD71F19B4, 0x80B4B623,
+0x61F5A67A, 0x5BB726F7, 0x11E7B9E7, 0x2423D2C4, 0x748EACD1, 0x1E4B7281, 0xD7CBB635, 0x7424AE7A,
+0x0F0C9F29, 0x52F84750, 0xF8E66B9F, 0x831F77D9, 0x00316514, 0xE98D5663, 0x344EB98D, 0xC4E249D5,
+0x3F574DEA, 0xED41819F, 0xABF8EC34, 0x06955251, 0xD8AAB485, 0x6278DD26, 0x49C37841, 0x4DD0B092,
+0x07C01F63, 0x26825D8D, 0x2EE65937, 0x23AE9E7F, 0xCEB01710, 0x0AA7CEE3, 0x74C87675, 0x2DF42072,
+0x65E1656E, 0x1D2713FD, 0xF9F4C554, 0x67D98052, 0xCFFD05E5, 0x20424B69, 0xD9BB4766, 0x91A14B6A,
+0x31F2586F, 0xEB1CD41E, 0x9E7FEE13, 0xBD5A772C, 0xEC255F32, 0xBBEFFE48, 0xA93476CF, 0x9D9E23FF,
+0xE19A09CD, 0xA178509E, 0xA8E51F50, 0x974FD833, 0xDD3FDFFF, 0x15D34A91, 0x678198C1, 0x468B9E70,
+0x1CE4FA3E, 0xDAFF5EE6, 0x2EE6C37B, 0x903B8D62, 0x629D50C9, 0xD4FE3DB8, 0x7BE54709, 0x6DF82B42,
+0x5226FAE5, 0xE894524A, 0x6D75BC11, 0xC4F4B4BC, 0xAF5F9376, 0x54D6DBAA, 0xB8539DA8, 0xADB507A3,
+0x5D5A75E3, 0x7B8A6950, 0xC43E21BB, 0xAA0F146F, 0x2EE654C3, 0x7D2F8D27, 0xF0F0939C, 0x27BE9FED,
+0xCC2CBFB5, 0x1A2E8734, 0x3F58BAFE, 0xC54B2F79, 0x28B18C26, 0x54C2ACAE, 0xE9AA84A9, 0x081500EA,
+0x973065E8, 0xA3297B36, 0x715F04B9, 0x163C262E, 0x3C8E33B9, 0x6664355B, 0xDC6F05B7, 0xE425EAB1,
+0x1408947A, 0xD81F59A8, 0xA9A60E58, 0xCC2E0D2B, 0x5E9EF553, 0x7E18DFBA, 0xF51765E1, 0x88C3D3EF,
+0xAA0325B9, 0xF85D12DD, 0xB4233724, 0xD7D51332, 0x82B756C0, 0xDE199247, 0x4C6A7CA5, 0x57D5B501,
+0xA2C2DCE2, 0x459DAB72, 0x8A6E5A4B, 0x2D552DC9, 0x4C9BC052, 0xF8708C05, 0xCBA884F5, 0xB663C7A7,
+0xE854F29E, 0xEB9774B0, 0x16AA5307, 0x52DDF361, 0xE0570AAF, 0xF2573B7E, 0x0D8EB4D9, 0x43946157,
+0x64A9DD0A, 0x1689FBED, 0x3B7F0B12, 0xB21F92E5, 0x1026AE0A, 0x84C8D0C4, 0x496E9AA7, 0xA6574493,
+0x9AE4A00E, 0x339A7B0F, 0xCA00BE02, 0xE77E9DAD, 0x7FA1B7EA, 0x51DDAC7E, 0x472D0620, 0x0D95CC4C,
+0x318D59E1, 0xDB0CA4AB, 0xB4F352B6, 0x6FE93682, 0x2A26203D, 0x0ADD35AB, 0x4E66022C, 0xF8D8C0D8,
+0xBE5276E0, 0xA8AE022B, 0xFD578E23, 0x71B29B54, 0x608AD285, 0x213F5DFD, 0x57608B95, 0x2F5453D1,
+0xFF9F8296, 0x54360C65, 0x23278349, 0x9F52D1B6, 0xA7F57E71, 0xBBE05B08, 0xE56B3520, 0x738E8AD5,
+0x4A16ADA3, 0x1C9D2249, 0x9770CA49, 0x55DB8EE5, 0xD20BCFCF, 0x94C8465E, 0xF4F7DD21, 0xF52F54C7,
+0xEB9EEA40, 0xECB7D76F, 0x2AC3FB5A, 0x37EAE9F1, 0x1561C8CC, 0x57A35F92, 0xDD9667D3, 0xF42D11A1,
+0x77A0EFE9, 0x20E2AA43, 0xE0DAF1B6, 0xB3FDF40D, 0x14277DA9, 0x2FD97CE3, 0x79D8A867, 0x4DBDF340,
+0x2BD4F8A1, 0x22E674B3, 0x0E511FE1, 0xD422155E, 0x3BC7FCE6, 0x3AEA203F, 0x4C163F51, 0xAF52E842,
+0xAF2ED5F7, 0xE398BFA9, 0x5B7A8FB4, 0x6F1D6C23, 0x4AB639B8, 0xDF573A7A, 0xA9BF83EF, 0x5B9C5ABB,
+0x948891D0, 0xFF408736, 0x034A1486, 0x17B4BAD0, 0x4EA1C251, 0x05C98D55, 0xCFFC0AD2, 0x0270B833,
+0xC5D6E860, 0x2813ED47, 0x5FC84A04, 0x25758DE3, 0xD62DF58D, 0xA9E9F5B8, 0xF7A4EAF2, 0x03DC77EB,
+0x41188F7B, 0x94C8EECB, 0xB14B804C, 0x5D196CEC, 0xCF99D44D, 0xE33BDAA7, 0xD0A84331, 0xE295DD59,
+0xE2AF7FF4, 0x1F189661, 0xA4BADBB0, 0x6FB6C13F, 0x2B9CCDD1, 0x6DDEBC66, 0x96841E28, 0x89393A69,
+0xCB2E1548, 0x3EEC290E, 0x60C0AD80, 0x864B78D4, 0xD2104F4F, 0xB3C9DD66, 0x1EA9F76B, 0xA459A2E8,
+0x00785219, 0xB362656A, 0x500F2A87, 0xDAD4896C, 0xA0024BD1, 0xEBD69EC1, 0x55FBFEB3, 0xA49FE4FA,
+0xA0E6F618, 0x5D42AA28, 0x535FA6C0, 0x8DB954B1, 0xBD4F792F, 0x0AE2E79C, 0x8087095A, 0x52C44235,
+0xBAC00A4B, 0xE159C5EE, 0xD3EC4B1B, 0xC005F330, 0xB2121BBE, 0x3DB2AC69, 0xFEC13FFE, 0x93EE17D6,
+0x50BB86DB, 0x150442DE, 0x42376678, 0x6D8FF643, 0x3F814E9D, 0x50783B54, 0x6BB1487D, 0x70824A8D,
+0x18EE5673, 0x85A348EC, 0x281F93C1, 0xA53ECD0F, 0xF2D1C3BB, 0xF2ACB85C, 0x418F2206, 0xE7395234,
+0xAD30AAA6, 0x81CEBB9E, 0xDC67F8A6, 0x5959037E, 0x1F684478, 0x29344E9A, 0x414C921C, 0xD752FBEF,
+0xD58C9D7F, 0x29D14D69, 0x684C620E, 0x93C37188, 0x42017018, 0x029CB071, 0xF04AE469, 0x55CD71DB,
+0xE8EE9F95, 0xA6A74EE6, 0x29732C4D, 0x4EAF2D60, 0x8D22BFE2, 0x31627B1E, 0x8AEA67A3, 0x8CC9816E,
+0x85E94A24, 0xDB7AC4AE, 0xAAAEA5C4, 0x9098A86B, 0xDE481EFB, 0x2F411CB8, 0x3CFA9389, 0x5ED383C7,
+0x211F3735, 0xD9F00699, 0x8EDB9671, 0x74D32087, 0xA09298AD, 0xE06CC7F0, 0xC6A1EF27, 0x094AB73B,
+0x06BDCAC6, 0x7B5F8FF8, 0x489F38E7, 0x4A6F7813, 0x82EAB2C4, 0x228A3FDE, 0x6E92D93C, 0x5A020A52,
+0x64E97010, 0x01C35EFF, 0xF7318F4E, 0xFC3B9572, 0x41F3FA0E, 0x924C94C0, 0x56B230BC, 0xE7A0C886,
+0x68B74764, 0x7AAE3A47, 0x5A183CEC, 0xAD6454FE, 0x74DCE790, 0x81DD6886, 0x46F9F43E, 0xFA1EA862,
+0xF0647658, 0x5CA6C477, 0xE988042C, 0x727B22C6, 0xC990CA7A, 0x94664D64, 0xE4522B9F, 0xB9A9823E,
+0xC791EDEE, 0xBECD6A30, 0xD056BD7F, 0xF2F9817E, 0x209C1695, 0x032CCEBA, 0x1411EBAA, 0x11672902,
+0x5401F923, 0xFFB94AAC, 0x722A8C2E, 0x779D028E, 0x4E9EDCA0, 0xDA6DB694, 0x54988426, 0x179D06BC,
+0x49BF0CCB, 0x0E724AEB, 0x2E5A0DFB, 0xF6EF8120, 0xFB049F11, 0x19429A9F, 0x8F04178E, 0x714BDFA3,
+0x5B0FC9B9, 0xC35B313A, 0xC6654D01, 0x9A36E82A, 0x33DE9598, 0x783BB8D9, 0x0F960888, 0x5A565AE6,
+0x8E37EB85, 0xDAC3DEDA, 0xCB43AEA4, 0xDFA6ECD8, 0x92E85EFE, 0xDBB7CC21, 0xD0A0CD74, 0x1B957EB6,
+0x393B6C67, 0x49081459, 0x329D8283, 0x226952A6, 0xAD8E588A, 0x2C3614B8, 0xA169251E, 0x330727CD,
+0xCB966B44, 0x0401DB2B, 0xADC6F3BA, 0xFDDDC4E2, 0x8C01A0C9, 0x7718ECEB, 0xCA6183CF, 0xB7E6C1A7,
+0x5D880100, 0xD3ADBE68, 0xA2B7B788, 0x51D9187F, 0x3093EA97, 0x312EECCF, 0x910439AC, 0x5E971A0D,
+0x5BB51518, 0x07459616, 0xB3B04532, 0xE88437E4, 0xC0BF03FB, 0x60CDBDE5, 0xFCD0374F, 0x85D80107,
+0xE81AAF4E, 0x2881435F, 0x08A2AC30, 0x74FE84C2, 0x58CE8F9B, 0xE1600324, 0xC15D3E96, 0x93A3615C,
+0x8707E27F, 0x8E6489F8, 0x80676E16, 0x741219B4, 0x32706435, 0xD3C0386F, 0x83720F82, 0xDF86853C,
+0xABC7F21F, 0xB0685CCF, 0xEDDC4247, 0xF9260171, 0xBEAD0984, 0x0CB72EAA, 0xB8D3F519, 0x2972E091,
+0x354137C6, 0xED0BB166, 0x0358420A, 0x97FB3576, 0x19BC2CEE, 0x43CCA87C, 0xF9A8C837, 0x0BD502B9,
+0xFFE8D168, 0x0BFA2474, 0x1A28101A, 0xB84F6BB0, 0x2F15CEDC, 0x553EF6D7, 0x952A0A7F, 0xC7E0B416,
+0x933EF78F, 0x47CFA911, 0x818D1AB1, 0x31688DCD, 0x4469EE55, 0x567A1479, 0x8675FF7B, 0xE20243CA,
+0x8ECFCB64, 0xB1DD336A, 0x4478F87F, 0x88F0635E, 0xBE376777, 0xE576AD33, 0x58075E34, 0xB3A87399,
+0x891F51BE, 0x0C54FA32, 0x632AED2A, 0x90D9061D, 0xAC457BCB, 0x94FA3AC3, 0xF35D4092, 0xF633CE38,
+0xE89673C7, 0x7B0BAD9B, 0xB351E3D7, 0x683D91B0, 0xC6617F75, 0xC936A5FB, 0x6EB8D43B, 0x17E82D03,
+0x41FF1DCC, 0xC07DABF0, 0x45EABEF3, 0xEBE6E20A, 0xF469866A, 0x405530DE, 0x14FFA255, 0x48E10BC7,
+0x568C9DF0, 0xAEB44EC5, 0xC4462970, 0xFADE4AEA, 0xDFECB094, 0x30374225, 0xFA99E6E1, 0xDC2693AE,
+0xCDFBC3B3, 0x6E37E85A, 0xDE241E9F, 0x2511DFBB, 0x14C632FB, 0xF0FF42A1, 0x6127D3DB, 0x8E622EB7,
+0x95F6D712, 0x2787BC6D, 0x0668D526, 0x9EEC2EBC, 0x36DBD343, 0xF857D7C9, 0xCBF68F25, 0x5365E272,
+0x390BE022, 0x8A43235E, 0x96022689, 0x7AE442FA, 0x5F044E9A, 0x12A8B036, 0x2EC8FA4E, 0x605776D7,
+0x0B0EB33C, 0x2AD3F02E, 0xBA766BF8, 0x827410A3, 0xFBEC64D8, 0xDC2AE0E0, 0x46FCF845, 0x84F5CFF3,
+0x1825688D, 0xA465D9EE, 0xA42AB5C8, 0x8E95E69F, 0x523DD7C5, 0xD8126225, 0x033987D8, 0xF02CD5F2,
+0xD7FA18C4, 0xFCFF47AF, 0xA15E78E0, 0x0145868C, 0xA975A6E2, 0xF5845DD4, 0x3AA3CF97, 0x4B656430,
+0xC99205A6, 0xCC7714DA, 0x2C95B804, 0xB38D0739, 0x06794F00, 0x8B8257E6, 0x18728B58, 0x5FC7CA0B,
+0x65ACD1FF, 0x094C19A5, 0x170D4458, 0x702CBA58, 0x8FBE4EBB, 0xA59701DD, 0x2FA0A3CF, 0x91B6E5C1,
+0x85A48B47, 0xE8D9D772, 0x9F8DA067, 0x4A3FEEDF, 0x9E3EFD6E, 0x78991E35, 0x397B359A, 0xD13EB4D8,
+0x3C3AE600, 0x17C01F73, 0x423B5E6B, 0x1E6BF70F, 0x609ABFD1, 0x74134741, 0x48DA2E00, 0xA8A3212F,
+0x0B2545CA, 0xE7E2734F, 0xFCE6DC84, 0xEDB64030, 0x5627C479, 0x856F0DA6, 0x75E62F66, 0x66710914,
+0xCECF7D1F, 0xCF0058C1, 0x5CFBC5BC, 0xC17ADBAF, 0xC64FD242, 0x95158016, 0x2E277E82, 0x51FF6BB3,
+0xD87787BF, 0x4CCF29BF, 0x16863C25, 0x1A21920A, 0xE70C5267, 0x8A570191, 0x4B8BFB50, 0x7B193996,
+0x20A3FC4D, 0xE23757B2, 0x1BB9F06B, 0x6BB9B102, 0x4A031D21, 0x21FF10F0, 0xBF2B7173, 0xB9E926FF,
+0x8E9C9E3B, 0x104E61EC, 0x33F1B807, 0x5DBF9DC2, 0x3E7A9F09, 0xA3CF8163, 0xEE184E60, 0x4DB957C3,
+0xD4689224, 0x651763EA, 0x2E467CAC, 0x6B02724F, 0x18D7C021, 0x4300DF01, 0x4AA6FC5F, 0xF5FFFA4F,
+0x02A914A1, 0xC153D3AE, 0x47418A9F, 0x6B245D97, 0xA2815A43, 0x3B1DFADE, 0x3C664E1C, 0x99698027,
+0x9A9DC882, 0x72B81BC3, 0x2BE274EB, 0x4FB5FDC4, 0x96310F1E, 0x368BFD48, 0x6024F680, 0x55E4278C,
+0xFC31F765, 0x9B15596D, 0x3DE62F21, 0xA069BB6A, 0xB9E2793E, 0x28A7DDA8, 0xB3B18068, 0x689B3350,
+0xBFDE9C24, 0x534A75EA, 0xF880FEEB, 0x68C86641, 0xF30EBEE2, 0xA2BA2C51, 0xA4B63E31, 0x87BFB423,
+0x86C7E668, 0x14B9CF57, 0x673E8C32, 0x8E0B8165, 0xACC4EA00, 0x4E7C5599, 0x43B4403F, 0x57C64751,
+0xD8EC4D68, 0x8D901F9F, 0x5E3D89E1, 0x74757AAB, 0x992355E8, 0x9EB17993, 0x919B5DFB, 0x67C96EF1,
+0xAD68BD96, 0x68F9D391, 0x651EE4CA, 0xA60DAB93, 0xF563F23A, 0x859A171C, 0x9FF4EBC4, 0x756C6300,
+0xC088A6D3, 0x7A994988, 0xFA7DCD2A, 0x90B7D5BF, 0xD099640B, 0xDFCB1767, 0x3342EFBD, 0x02E632F7,
+0x5BA1DED8, 0x3A31119B, 0xF875205C, 0x9AC6B29B, 0xFA6F4BB7, 0x41EF4219, 0x217D6A45, 0xFE85BCC6,
+0x05781765, 0x0924C438, 0xD3693137, 0x51BF3C7A, 0x3F8BAC9B, 0xC9E1FA0F, 0x2292876B, 0xF896E428,
+0x3EA01A0D, 0x873CFE88, 0x9A1F2AD5, 0xAAF7C599, 0x6559EE7C, 0xA3063FE2, 0xD0B53773, 0x643D6B23,
+0x87C0E016, 0x433C9B9A, 0x543F6986, 0x47C55D09, 0xD49B20A2, 0x0ECF50F0, 0x39E1C751, 0x0A257155,
+0x083F2821, 0xDE421367, 0x3C866BA1, 0xCD59427B, 0x7B56F5F6, 0x2FE424A9, 0x113B828D, 0xB20934F5,
+0x61616761, 0x8DBE4F22, 0xB6AAD760, 0x3741107E, 0x319A8E6C, 0x01304DF8, 0xA3F00959, 0x1C5D0BB2,
+0x509729CA, 0x4EF6BEB7, 0x391FB760, 0x6631E9E5, 0x3CBB7691, 0x1C139EA5, 0xFEF5889C, 0x57E5A948,
+0x5E9971DA, 0xE04D7146, 0xA944B469, 0x42C019D9, 0x107A70F7, 0xD6C65AC7, 0x9B0F6A50, 0xD4AC564F,
+0x02E7793E, 0x55F33198, 0x575110CE, 0xB37C8159, 0xE1B05393, 0x0549D5FC, 0x53D4CA68, 0xCC46DCAA,
+0x4DE9FD11, 0x99B02630, 0x60B6445F, 0x9FB8C7B1, 0xF0654675, 0x129C7B10, 0x258DB86C, 0xA530AC7C,
+0xB3C96E7C, 0x065C921C, 0x25B651BD, 0xF613CC4A, 0x914C05D2, 0x2C27DC5E, 0x733F5F0D, 0x1C90F151,
+0x567F677D, 0xF75E1032, 0xD3774C4B, 0xAB24476F, 0x5BFFAE21, 0x4C057945, 0x38024F4F, 0x79A49466,
+0xFEAC9D9E, 0x4F696EA9, 0x6EAE9BD7, 0xAA0EBD34, 0xB5DE97FE, 0x592020B1, 0xE8F3272C, 0x072438FA,
+0x1786A999, 0xD704452D, 0xB60C5557, 0x5CB05B23, 0x1AB205D2, 0x30EC0348, 0x2C81EE65, 0x70F7D5AF,
+0x661094AE, 0xE00085EB, 0x90133C8D, 0x453720C8, 0x10C9FF1D, 0x9A0F394D, 0xA7067689, 0x79A12EFD,
+0x01868667, 0x6ABB13F1, 0xA88D5FE9, 0xFDC87CB8, 0xA821E8D6, 0x2A275EA1, 0x55051254, 0x000E1022,
+0xCA2B231C, 0x0651161E, 0x49B523DD, 0x395BF5AC, 0x5D31EC58, 0xE750DD57, 0x6BE4F555, 0x00BB5F9A,
+0x96CCBAA3, 0xE599DADD, 0x49072BB3, 0xA24F510A, 0x7B43A084, 0x18732284, 0x628C946C, 0x6FED64F8,
+0x75FEDC7C, 0x3D60DA59, 0x89A60D5B, 0x4AF9CA01, 0xD44420F2, 0x23F1C70A, 0x854F99A1, 0x9C5FCCE1,
+0xEAC041CB, 0x21A329C3, 0xA48AD614, 0x8D516FC7, 0x1C669095, 0x08D3D3E6, 0x2B762DAA, 0xBC706F71,
+0x2616A70C, 0x5B5558CA, 0x022B7FFA, 0xF5F8F356, 0x824687FD, 0x9C998C00, 0x0236A1A9, 0xACB3BD35,
+0x11692D51, 0x946A1585, 0xD957022C, 0x7674A3FA, 0x110FB584, 0x0966C166, 0x4B4AACB6, 0x96B00996,
+0xE57B66B5, 0x715A8E9C, 0x71283030, 0x4339189A, 0x8581CB1E, 0x94F2D870, 0xF710713D, 0x2145A79C,
+0xA711A6AE, 0xC353FB5F, 0x3E03B026, 0xC10C69A6, 0xDC8ADBA8, 0x5BA02165, 0x983341F3, 0xD615EBED,
+0x92F47D8A, 0x823EC04B, 0x51186514, 0xFB43BD6F, 0x6E63F978, 0xFA2E710B, 0xC265E556, 0x2D053D63,
+0x846A90B7, 0x84B9743E, 0x8BF419D4, 0x1533F115, 0xA0DF6353, 0xF3C3335C, 0x084A30F2, 0xE74D36AF,
+0x24F51AE1, 0x4B577F94, 0xDD731A5A, 0x2E666F88, 0x2473A0AD, 0xDF1B1809, 0x2B4DE5C9, 0x2F273507,
+0x27DB9025, 0xF69AB581, 0xF651299E, 0x6327B903, 0x7E95C747, 0x81C1D310, 0x86571DFB, 0xF039052B,
+0x96C6BA0A, 0xA8634E86, 0x46CB21D2, 0x39C4EEC7, 0x0F8CF073, 0x769F9BF0, 0xDB0EFEEB, 0x6712F949,
+0xD1B7468C, 0x323D7B16, 0x0C193D6A, 0x65AA6848, 0x673ECBD9, 0xCA5F1B0F, 0x27680C33, 0xD53F7796,
+0x7F6B4837, 0xCA61926C, 0xD8FD90DE, 0x54DC7689, 0x98FFA09F, 0xECDDCCA0, 0xC1088F27, 0xD2E74556,
+0x786D3B70, 0x89ADDA4E, 0xB3C5C4D7, 0x6838AB09, 0xD9E83E1B, 0x0DC64172, 0x28AEC574, 0x7DD62FD2,
+0x3D4B9C56, 0x972F72A8, 0x0E474663, 0x4BA951BF, 0x37307F2A, 0x812BFF3E, 0x55A4C7B9, 0x1016B517,
+0x279278D5, 0x41F2832F, 0x26EDC307, 0x7E90C8C9, 0x8A73DCE6, 0x60779D8B, 0xAD53DB19, 0x352E73C8,
+0x5D703DD3, 0xB780B77A, 0x74A749AD, 0xAF477296, 0xCE3BEE30, 0xC95DA9DC, 0x3B548E16, 0xE8CDB884,
+0x339BFBD2, 0x0EB78B24, 0x08039515, 0x66160962, 0x73556278, 0xE520EB4E, 0x1A4360A0, 0x9D25744C,
+0x99C58A16, 0x19D687E5, 0x93E55CCF, 0xC46110AC, 0x55CA3B29, 0x06AC4004, 0xA5135B8B, 0x912A95BE,
+0xE00B9799, 0xEB46C427, 0xBED8ADD8, 0x3FC1BE52, 0xBAB25358, 0xD2639B27, 0x8CD9EDC0, 0x6BC0EE51,
+0x0C6FF640, 0x5391D040, 0x40D4A213, 0x32B5B342, 0x8CE5F147, 0xA11B00EF, 0x226F47E3, 0xA90D55FB,
+0xF1ACDF06, 0xAEC92645, 0x03D8FAF6, 0x58AB2FCB, 0x58785783, 0x1F3581DC, 0x8C43F805, 0xD9352D0B,
+0x78B8AB45, 0x339DDF70, 0xCE892E5A, 0x04862A56, 0xA9DBBFD4, 0xCC98D738, 0x6C850B19, 0xB4AC46B1,
+0x8C712E4D, 0xA63827A9, 0x98B25FFA, 0xFBC8A6C3, 0x40C8C67B, 0x430D2AD0, 0xA23508CC, 0x9462B495,
+0xBE26B1C7, 0x09311F94, 0x0CB1F93D, 0x4BBA552C, 0xA0FBC676, 0xC12863D6, 0xFDA3AA4D, 0xDA1AC59B,
+0x947609A7, 0xB70B9BBD, 0x0021075E, 0xB27B58D2, 0xF5AE7F76, 0xE83A13BB, 0x7154D0AA, 0xEAEA81E7,
+0xB4137EC1, 0x19665497, 0x904CC0B0, 0x898A9676, 0x2C810EDD, 0xA151B26E, 0x92285065, 0xB95B4E0F,
+0x4FEC987B, 0x2F85C45B, 0x8B295F4D, 0x18DC4062, 0xA4BFE3CD, 0x81DE3ADC, 0xF318BF5E, 0x0A251C7D,
+0xB31EA8AC, 0x38D19D47, 0x07457058, 0x25E79634, 0x27D01EA4, 0xB37BA333, 0xEE2DFD33, 0x76B0B515,
+0x702E8C4E, 0x7E978D24, 0x8E199645, 0xFE05C7C8, 0x2C7C1B1C, 0x8CF3600C, 0xB9FD3AED, 0xBC76FADA,
+0xFE52F86A, 0x19BEA5B1, 0xC834CDFD, 0x7E814EF9, 0x0E4A11CA, 0x423CFEED, 0x869FF834, 0xAEE4C834,
+0xEA8DC2ED, 0x775B4A80, 0x3E73E02C, 0xAB3EEEFD, 0xEDCA0EA1, 0xE3F5DB83, 0xCC9EFD19, 0x9AFBC03B,
+0xC0103FCD, 0xFE5C1B1B, 0x670A29E5, 0x7F30A47A, 0x4BD3A587, 0x47BFCB2B, 0xB72D4F2C, 0x0BC3D346,
+0x79E359D4, 0xD2985995, 0x3DCD9146, 0xFEBA57E2, 0x71F963FF, 0xDF080A8C, 0x5184BA97, 0x5657B664,
+0xD65F3524, 0x49463E21, 0x0B0A7865, 0xC3C25633, 0x726C149E, 0x7745CA08, 0x883FB4DF, 0x6A8FB9E4,
+0x84866BFE, 0x80526F0A, 0xDB0DA350, 0x5A00C652, 0xA3759BAE, 0x95BF8566, 0x4DA2CA64, 0x04B7A04E,
+0x7952AA2D, 0x22948C34, 0x918804E3, 0x8806099B, 0xC11397F6, 0x96A42146, 0xE396DD88, 0x29C93874,
+0x89DEAAB9, 0x80B43C81, 0xF33249FA, 0x15FC8720, 0x9DCDA74A, 0xC0CF5B4F, 0x1B482A03, 0x9F99527C,
+0x65A0D738, 0xB4756FAC, 0xBFAE2180, 0xCBBEA7DF, 0xEC7E289F, 0x3777F89F, 0xA5A92E00, 0x53B1D7AC,
+0x0E683788, 0x08550CA4, 0x7C2E1790, 0xB1D38735, 0x52185F94, 0x47B74C42, 0x9C38A3F8, 0x1DDA4884,
+0xB4E18AB9, 0x1A84322A, 0xD2027361, 0x8118BEBC, 0x56ADF427, 0xD9EC109B, 0x55CB0AD6, 0xB37B4FF6,
+0x425ABA37, 0xAC97196E, 0x0E6864B5, 0x17B2FBFF, 0x3A1A2ABC, 0x6FB29C06, 0xF4266DEB, 0x36CC455B,
+0xFD7B7F3C, 0x3946B61B, 0x6F0052B3, 0xFC83CD06, 0xD06FDD63, 0x166A6FB2, 0x64410BAD, 0x8648C95E,
+0xB8270255, 0x35AA4C23, 0x9D98BBCA, 0x3AC77450, 0x377CACD3, 0xA532FC43, 0x16F8D01C, 0xD96728E0,
+0xC893044A, 0xC28A6DAB, 0xFAB60EB3, 0x48CA7D1C, 0xC1459D30, 0x9F4CF92C, 0x560C8F16, 0x50349C2A,
+0xCCAE2458, 0x4AADC38F, 0xE94C5EAA, 0xDCDB26E5, 0x3F16BDA2, 0x0697CF56, 0x336BB904, 0x89B37162,
+0xCECC03AF, 0x108E046A, 0x901BC84D, 0x94681D2D, 0x9A066163, 0x1E736954, 0xFD16FCF9, 0x59CE3B76,
+0x778FC594, 0xA905C8B9, 0x1A86B677, 0xDBB5FE75, 0xF4966DE7, 0x831B3B83, 0x184748FE, 0xD5967A0D,
+0x10AD38D8, 0x183C332A, 0x6DAFE216, 0x1F275061, 0xD4C3EF0A, 0xF809B89D, 0xC5808E33, 0x2DDAFD2E,
+0x63397A5D, 0xE216A17A, 0x6C090A7B, 0xA5415EB7, 0x37638EE8, 0xE88499E0, 0xEBE5A4F5, 0x086ECC2C,
+0x12D0BADF, 0x58846EE8, 0x75A9F4B9, 0x54F94B74, 0x593B0FE6, 0x9B6E4AE6, 0x488A0843, 0xBB2DDB1E,
+0xA2E55114, 0xA3CAA780, 0xFCFC7785, 0x3D1AC655, 0x7EC17B9E, 0xF6E89347, 0x7A7F697D, 0x534EBAA6,
+0x0E58E5EC, 0x736E10D6, 0xFF7DE33B, 0xAA5F1154, 0xCB1D49E7, 0x57042D3A, 0x0E408DD5, 0x2C74C39E,
+0x3F243607, 0x8D043052, 0xF177FBDB, 0x0076C866, 0x06440A42, 0xA15F82E7, 0x376D7B30, 0x963D8E47,
+0x7B45960C, 0x02EFBF70, 0xBB2B5C54, 0x0FBA3189, 0x640AB520, 0x40211D5C, 0x81042E3D, 0xB4732045,
+0x912059A2, 0x5E833B3C, 0x9A4987B5, 0xB1A4CC82, 0xC2893095, 0xC3589E1D, 0xD0DA0077, 0x8162A90D,
+0x47F3C21C, 0x23BD352B, 0x36C70576, 0x3F6B15EA, 0xEDE65A6A, 0xEEBD89ED, 0x1048318E, 0x8FA58ECB,
+0xC7563491, 0x8EF9F089, 0xA43B0F26, 0x9151D13C, 0x13FF66B6, 0xFA17E31C, 0x216C968A, 0x6D3FE64A,
+0xB2FDE7C5, 0x31AF0D43, 0x6DD904A1, 0x5903052F, 0x2B42D1B2, 0x08D37331, 0xFF47ABD8, 0xED59549F,
+0x31F416CC, 0x7F19EAD7, 0xCA5BDFC8, 0x01B5A180, 0xB46E5225, 0x67A263A7, 0x41706683, 0xFCB56D85,
+0x99BF3722, 0x96ADF9B8, 0x1D04062E, 0x0E3A0F83, 0x9D8702D0, 0x9FE9B560, 0x47093FC7, 0x3003C698,
+0xC6361203, 0xB8625085, 0xD596A89B, 0xD8BFC391, 0xC6E20554, 0x581B49EF, 0x35379486, 0x938F1FDB,
+0x313962C7, 0x09428BE9, 0x3EA58041, 0x33294722, 0xC19BBC70, 0x0D1CE14C, 0x442EB8DD, 0xB29B0730,
+0xF88A0EC0, 0xDFB6A107, 0x9D82DF66, 0xF7F5BEE1, 0x54B62336, 0x323912DC, 0x8D8D7142, 0xF3B705DD,
+0xE80044D7, 0x41B793A1, 0x2AE22353, 0x0C2C4A54, 0x50158920, 0x6CC3905F, 0xC8C13466, 0x6ED1884F,
+0xBC86A0ED, 0x894C6E51, 0x25B0A391, 0x0F565F14, 0x523F6ABE, 0xC2FD66C7, 0x8B2301C8, 0x24392F66,
+0xD46666AB, 0xEFE902A5, 0x3B10CF47, 0x4D967463, 0xC95E91D9, 0x8282ADE8, 0xB34C6F77, 0x86ABE38A,
+0xAF46E50A, 0xCA03DE2A, 0x233A9759, 0x89896FCD, 0x2DA55A81, 0x28722F0C, 0x7630C839, 0x5556360B,
+0xB3D4870B, 0x24DAB00C, 0x1C4D1B1F, 0xE6BB6A2E, 0xF85CAA24, 0xACB2D247, 0x55CF4F4E, 0x6AA0F11D,
+0x4D366D8E, 0xA826835D, 0x4896C4C6, 0x4CAB91D5, 0x64BDF437, 0xC7C5D723, 0x51F7E297, 0x82D0D350,
+0xBD9BFA0E, 0x8087FC30, 0xA93402CC, 0x80F71745, 0x2C337E3B, 0x761A4ADD, 0x77186D7C, 0x95142DF0,
+0x79FFDA9C, 0x3037B837, 0x7496DD9C, 0xE9EF51ED, 0x172C62C8, 0x0A70D943, 0x6EFE269F, 0x5C2F12B3,
+0xF84E667A, 0xDF1C6CCF, 0xDF67CDD1, 0x857116CE, 0xB28933F2, 0x4AEA66DE, 0x135CDC71, 0xDB72DD39,
+0x126E434B, 0xAF25D7B0, 0x361B77C6, 0x9BD0D60C, 0x5AC2D058, 0x1F5032EF, 0x969F2328, 0x06CF5577,
+0x2FB81BA4, 0x5A86B5BE, 0x66108007, 0xA5134492, 0x770024AC, 0x8B24FB47, 0x6C64CC5F, 0x18B0D901,
+0x3DF24C13, 0xBBE390C8, 0x1D3DDD3A, 0xA9A51C73, 0xB71E5AFE, 0xD7BE92FD, 0x106A7667, 0xC3FC1EBC,
+0x477BDD5F, 0x399B19EA, 0x3182F2B6, 0xF7582783, 0x7E51F993, 0x36C891AF, 0x0D82A369, 0x7084E542,
+0x30AFBD78, 0x9E77A168, 0x2780B35A, 0x4ECE16D8, 0x10ADC693, 0x0A7FFB4B, 0xA9EB79C7, 0xFE86442D,
+0x1FD1DB18, 0x6F67D8F6, 0x778C2FE6, 0xA0BF3642, 0x22A32B39, 0x57C4EC07, 0xECBC6D17, 0xAC53F1AE,
+0x85030563, 0x75AEA284, 0x8B34F804, 0x38F62C3F, 0x746002D3, 0x346F35EA, 0x948DDB12, 0x0EA64286,
+0xD6FED9D6, 0x6CF84A84, 0x14115699, 0x9985D853, 0xDA6CF479, 0x799CC7F3, 0x47337ADD, 0x440A0667,
+0xD2C47D9E, 0x4100CECE, 0xC33F2C64, 0x9B7C4136, 0x8F86FD26, 0xBD2DDF1B, 0xA0D060C4, 0x6459DE47,
+0xD9B102A3, 0xA36755CC, 0x046174E4, 0x84302C4E, 0x183261E3, 0x712C21D3, 0x0CE87614, 0x0BF53BAA,
+0xF5B1E27D, 0xBE23EBE4, 0x287DEDF1, 0x571D5EAF, 0xA865DB57, 0x7660EF23, 0x207C48D1, 0x83AF36F9,
+0xB445BC02, 0x3D831B7F, 0x256CE0D6, 0xC7742687, 0xD8898F5A, 0xCD0F6607, 0xE18D4B5B, 0x009FA62D,
+0x0143B336, 0x80B52D77, 0x328A3F3B, 0x757286A1, 0x1B239720, 0x8777E93A, 0xDDB541FF, 0x1E87BDE9,
+0xECFF28A2, 0x7F398F44, 0x508ABFCD, 0x6D1256C7, 0x18FEB038, 0x7226443E, 0x0D8CC828, 0x99680096,
+0x8A0684AF, 0x79EE0229, 0x9CCE3220, 0xC9C54222, 0x5DCF6E2A, 0x3ABFD070, 0x9459AAFE, 0xCCE97E9C,
+0x9D2B0264, 0x1E24CA4E, 0x57C43811, 0x31076D28, 0x962D68F0, 0x09B50CCC, 0xF8B93DF0, 0xD2E6963C,
+0x748EA27F, 0xF47255E2, 0xBA83033E, 0x47976F4F, 0xE56496D8, 0x036276FE, 0x9B38D835, 0xFB789693,
+0xBF1AA0E2, 0x8BCDE744, 0xAF6E6477, 0x2689C2A6, 0x2A2C24E9, 0xD4975C9D, 0x5E3E8125, 0xF71C1125,
+0x85DC9B08, 0x40258FD3, 0x732EDD19, 0xE2D17F21, 0xA89D991B, 0xF5CC1E6E, 0x19D1B814, 0xCDE5A920,
+0x132974D5, 0xC772BFF1, 0x10196A58, 0x99E8C070, 0x0CCBE676, 0x47035208, 0x69223E06, 0x06FE91B9,
+0xC7A6CE4C, 0x1627B34C, 0x2D617211, 0x49CD9A73, 0xA00D7D17, 0xCB1AACE7, 0x9806B4D1, 0x177556CD,
+0xD92E8C61, 0x16E95AE7, 0xE6494D01, 0xB10ABFAF, 0xC2BC42EA, 0xDE907B59, 0xA71A811C, 0x42CF13CE,
+0xF431DAE8, 0xFE5266FE, 0xB615E02C, 0x216E0ABE, 0x3906233B, 0xBC7ED4DE, 0xA82DC056, 0x28A349E9,
+0x51FE6FEC, 0xCDF3D0D0, 0x0A739547, 0x52F5654F, 0xCCDD16B0, 0x8798D6E3, 0x34F27F98, 0x4AD827FB,
+0x94AD24D0, 0xC3D8E342, 0xEEB0AEFE, 0x576381EF, 0x102D17FC, 0x91E6CCF2, 0x19D250C5, 0x4F530D25,
+0x1C7AAB9F, 0x776B89E8, 0xD33B0A29, 0x22EFC1DB, 0x1768EF51, 0xB1B1B801, 0xE4A4957A, 0x1D0DFCFC,
+0x6E656F09, 0x85B682D8, 0xE20A13EF, 0x44F6B6C4, 0x5F83F7DE, 0x37DF76E6, 0x4235DCAE, 0x6305AE8C,
+0xE73F784A, 0xF892CBA0, 0xFF7490DA, 0xFF098A7D, 0x0A0D2426, 0xF578EC69, 0x0235C56F, 0x3C5E39DB,
+0x6C1687DE, 0xBF3E92EF, 0x1434ACE8, 0xA6AECB38, 0x8ED9A476, 0x83F4F351, 0x6C5DD785, 0xD4F6D603,
+0xF68A95AE, 0xD3D27D8F, 0xAC87978F, 0xFE1DC151, 0xAE841532, 0xCCD5129F, 0x77C5468C, 0xB863A1E5,
+0x16C35768, 0x2B0C2696, 0x533E356B, 0x7AA517E2, 0x43C49C79, 0xB4AE5777, 0xAC6893F5, 0xF7E05A37,
+0x8A445607, 0x204C36DB, 0x36C4F924, 0x68DAC505, 0x1C4A60F8, 0x1C0863C6, 0xA76E3A4C, 0x1621BEC4,
+0x91333550, 0x21EFB483, 0x36926881, 0x1A32CBDF, 0xB155B2B4, 0xDC3FAC1C, 0xC81ADD7E, 0x78CCB58D,
+0x9988A8B6, 0x48378750, 0x0647A266, 0x1008EB62, 0xAC8D09FA, 0x0EF87F10, 0xA1A4FDC1, 0x49B05489,
+0xDBE1BDB5, 0x8AC91005, 0x42F2468C, 0x67278A90, 0x115054C0, 0x3F7C3E48, 0x6EFEB114, 0x8751086D,
+0xE7EAB202, 0xAF8FBE9B, 0x04761323, 0x05198D88, 0x288B37BF, 0x290344F8, 0xF67EBBB8, 0x19746364,
+0x1BE8A8B4, 0x183D9C3A, 0x711538FF, 0x9C55759B, 0xD3EDAA35, 0x02AAAE80, 0x85470563, 0xE7F0CE36,
+0xEB067145, 0x7C606C71, 0xA15CDF50, 0x92EA2899, 0x8BDB8AD7, 0x6A768D5C, 0xA29004BA, 0x30CFB613,
+0x6EC8FF87, 0xF8EAA3D8, 0x100169F7, 0x11CB9552, 0xB776BD70, 0x786C2589, 0x93CC505E, 0xC9142D25,
+0x84B21845, 0x85970650, 0x3FA0B047, 0x16DD35CE, 0x03FE2B48, 0xF57B8EF0, 0xA712E190, 0xC4F78C45,
+0x04B3B2F4, 0x1BF1FCC6, 0x05832400, 0xF4B2D696, 0x795AB981, 0xE2F4D721, 0xAE416EC8, 0xDD5D82BF,
+0x5E04709A, 0xB8E5040B, 0xAF379E10, 0x1BAC469C, 0xD4164A0B, 0x37C33C60, 0xCEC0B507, 0x424E563D,
+0x173A918C, 0xBE8863EE, 0x45879B84, 0x12ADFB2D, 0xD3347CEE, 0xD5E23935, 0x24E5FA86, 0xA0847D07,
+0x33FBCAFF, 0x5D2BA36C, 0x0D8F63A3, 0x440BF9E6, 0x6ACF094B, 0x1A112AAB, 0xA0B9495C, 0x8EB08262,
+0x02AD471E, 0xC88F06B4, 0xDD0A43F2, 0x1278460B, 0xF08800DA, 0x96955E28, 0xD2A1B98E, 0x0C72D24F,
+0x3E82BD29, 0x6279EAE8, 0xD6784ED8, 0x99D63F95, 0x4F821913, 0x7AB90148, 0x06E69C49, 0x32B918BB,
+0x602D2018, 0xBF3BC188, 0x5F6137AB, 0xE21E6413, 0xFDED5A7D, 0x6AAE4637, 0x556105B5, 0x446AD1EF,
+0x66D1AFD5, 0x53F279F4, 0xAA211732, 0xD3F3699F, 0x4A89CDB8, 0x491E38A9, 0x0940D736, 0xB2B5F42E,
+0x2189F669, 0x6BB30A90, 0xB6A70A6E, 0xD4415191, 0xFABDD766, 0x30506728, 0xAC974714, 0x83C95C0E,
+0xC61E8038, 0x2F1205DF, 0x40EB9DE9, 0x55E2102F, 0x5C25292E, 0xE97749DD, 0xA02AB4B6, 0xC0EC3153,
+0x070CFD7E, 0x0D225D61, 0x0AB85719, 0x9881DB4C, 0xBE37C88D, 0xFD5E07D8, 0x3F0B8AEB, 0x633B170F,
+0x88A8DCDC, 0x6C9B013C, 0x35C6BC57, 0x4877667C, 0x2B8BB376, 0x2A7DCEEB, 0x96791BB9, 0xB94DDFCB,
+0x61EA2498, 0xEA1881CC, 0x4FB08DC2, 0x8C5978A6, 0x404EA4E0, 0x955E6799, 0xABF6D96B, 0x6AD47699,
+0xDB7493A3, 0x19F73CC8, 0xC55C055D, 0xE448F7E0, 0x350ECF1C, 0x8958EE5D, 0x21910DB2, 0x203BD252,
+0x8C2CB2BD, 0x3B6EA160, 0xD18958F4, 0xA65D98AA, 0x2F9A1D88, 0x63E3A9C8, 0xD7283494, 0xA42DDC05,
+0xEA317313, 0x59AF7E2C, 0x0D83409C, 0xBDEE659B, 0x3C552CDA, 0x2329EFAB, 0x57542ECA, 0x24D74DA8,
+0x4A6A7140, 0xFD2B1795, 0x3BED999A, 0xCDBC3B68, 0x324130FF, 0x9AD2A585, 0x095EABB1, 0xDF3AF31B,
+0xFC7CAE7D, 0xE11D831C, 0x750945B4, 0x1478A62C, 0xF93E4C80, 0x6AF1F8BE, 0xF4BFAF8D, 0xD5704C4B,
+0xF25A5BA8, 0x01AB5E72, 0x88E9F117, 0x207EE6FE, 0xD918F5E9, 0xACEFEEBB, 0x2BCBC0B3, 0x6556EC6F,
+0x5FE85213, 0x51DBB733, 0xD68C2416, 0x3B825A69, 0x9D28CB8F, 0xD22EC794, 0xBE2438F1, 0xF8BCE745,
+0xBFBA5E2B, 0xDE22CEF0, 0x1EBBDF62, 0xCAE5DB1B, 0x5611F69C, 0xA29FDAAA, 0x62739780, 0x518186EE,
+0x8CD9FCFF, 0x041F5D6C, 0xF5990C9B, 0xA324F667, 0xEA21C883, 0x6D3E26E8, 0xB53363AA, 0xCEB97E07,
+0x85BA5772, 0xC2E0F4A3, 0xB709475E, 0x84E173B2, 0xA729EE28, 0xA41ED256, 0x16CC5102, 0xA2F877FD,
+0x18E6A864, 0x0277E90B, 0xB5B0392A, 0x0AA4F7F2, 0xD791FF02, 0xAC069332, 0x876DAD75, 0x792B6FD1,
+0x5715E614, 0x58C1553B, 0x84587DC5, 0x26C38C8E, 0xB038578A, 0xBBD1C537, 0x069CBA60, 0x0B99B05B,
+0xE4D31CB4, 0x01A7CFE5, 0xB74BE027, 0xFF0CB60C, 0x45EA9181, 0xC8C6AC72, 0xA1BA7584, 0x29E761D7,
+0x5604BEA7, 0xD3017FB5, 0xE2F43787, 0x185F863A, 0xD15B5C53, 0xDE2F919C, 0x976B3384, 0xFBAF3B8C,
+0x2B59F4B4, 0xADBB0DAC, 0x2755A206, 0x7B4C953C, 0x9794FBC0, 0x16D5E99E, 0xF9E93100, 0x20AE8519,
+0x4079CA61, 0x162A2B94, 0x07F29F4D, 0x8DB5A96F, 0xCAFEAED8, 0xC0FB0E31, 0xB069B93D, 0xE72F484F,
+0x694D1B29, 0x59D184E7, 0xAC4FF42E, 0xBB34E7ED, 0x4B8BEF17, 0xA018AAF2, 0x2F25ABA4, 0xB16A181E,
+0x253B86D2, 0x78A3DC81, 0xE8601CDB, 0x820186CD, 0xDF5935D7, 0xFE67771D, 0xE67534BD, 0xB1CBD7E4,
+0xDC3D06F3, 0x637B11A8, 0xA2FDC988, 0x34C887DC, 0x34521450, 0x5A7BCE9E, 0xAB154396, 0x694CD977,
+0x94661BBA, 0xF9FDA098, 0x5BE88E61, 0xFDB49373, 0x1DECAA6C, 0x68CEE6EB, 0x3F8033AE, 0xDCBFB566,
+0xACAFCE00, 0x66CEEF9E, 0x30A87CF9, 0x3DD10E57, 0x58B8F0F5, 0xAE10A21B, 0x2E4C8B73, 0xBAF14B9E,
+0x445B84C7, 0x7C1022A6, 0xE6772353, 0xE589BE9E, 0x7FDF3DD9, 0xF2343492, 0x56081A89, 0x59743FC0,
+0xDEFB377E, 0x6E0ACDF4, 0x626B7F78, 0x6A766D8F, 0x0B1CC6C5, 0x74EDB969, 0x3D31B253, 0xDBCC96EB,
+0xD28528DE, 0xB8F1E091, 0x69240F51, 0xA1CC41DB, 0x90F2BD77, 0x57ABBCE4, 0xE0D88D83, 0xDD4F14D1,
+0xC4E9B67A, 0xDF812116, 0xF4C84B28, 0x5FAA7223, 0xB3813788, 0x63B15357, 0x3A1C2524, 0xB2432841,
+0xC39DD313, 0xA9A6F4AB, 0x108545EC, 0xAEA83318, 0xA5F60BD9, 0x579EB242, 0x4C56C172, 0x3CF7A9A1,
+0x1395A3BE, 0xA20C4371, 0x379119D9, 0x5F021D7C, 0xB609B194, 0xC301F2EF, 0x924BD04D, 0x1F87A550,
+0x4EE1AC67, 0x3D351132, 0xA2D0FAA4, 0x1F814865, 0x736149B1, 0x927050A0, 0x0B789395, 0x0F68E116,
+0x34B666E0, 0xB764FEC7, 0x7095DD12, 0x2D4B90D8, 0xBA327C38, 0xA2D91A7F, 0x48CAD516, 0xBC4B9528,
+0xD0EC0A1F, 0xB0EEEF4C, 0x78D45691, 0x36A2F7D0, 0x3F45BC7F, 0x373907D7, 0xC3997454, 0x62A2A6BB,
+0x0FE25CE7, 0xFDEF677D, 0x32C2AEF3, 0xEB22C224, 0xAE5D5771, 0xFF4D464E, 0xBD881280, 0x397BB2BB,
+0x361A96A5, 0x5E50EC44, 0x0D3288D7, 0xE0E17132, 0x1D8CF5FD, 0x1C03AA0A, 0x80897645, 0x9F144607,
+0x97E33640, 0x3C5F4EC7, 0x39B5073D, 0xAA9FC8E8, 0xBD9D8FE3, 0x8781ACDE, 0xD6F09719, 0xA8597B74,
+0x50302B80, 0x6659626C, 0xBE7E6608, 0x4A8A1C44, 0x22268360, 0x0FF8F205, 0x7FE8ED41, 0xEA551A2F,
+0x4713DC99, 0x2E268B08, 0x6949274C, 0x8257577E, 0xE25FBFF3, 0xF3C1A536, 0xC74D432C, 0xF78AAA19,
+0xA0803E48, 0x83325508, 0xC9E42A25, 0x215014F4, 0x6358EF84, 0xBE084DED, 0x9F7DFFE2, 0x0069AD9C,
+0x6185A787, 0x06927BC5, 0xE8089A36, 0x1D748898, 0xA253D1C6, 0x9E5A2724, 0x3D9AF79E, 0xE30EB311,
+0xC097F542, 0x1778C0AF, 0x27EEE2A1, 0xBE59DE98, 0x41CA8794, 0x6D849748, 0xAF0D8105, 0x0CDB289F,
+0x9714C2A2, 0x96DCDF55, 0x15772C0C, 0x1880DD62, 0xC9795579, 0x2D6F4609, 0x7E3D7E60, 0x24AFCFD3,
+0x8912A00C, 0x72DF3644, 0xDA170191, 0x83DC2108, 0x5C819983, 0x125E0FF1, 0xBABEEC40, 0x7BE60C6D,
+0x13019855, 0x2F8267EB, 0xB51D1206, 0xFA70A229, 0x6020DB5F, 0x3A9379F2, 0x6BA6E774, 0x92F8FC37,
+0x074FCA36, 0xF2201D1E, 0xEB392A6D, 0x21916E80, 0xAF61F93C, 0x4B99516D, 0x929AA6C7, 0x010E7673,
+0x87AD67CD, 0x9D86F5F9, 0x65BBB680, 0xFD10A95E, 0x0BFCEF71, 0x597E2931, 0x79609014, 0xFAD4A846,
+0x84540C4B, 0x1D710A4C, 0x260D6988, 0x0EB65D4F, 0x57B99018, 0x3EAEC23C, 0x3DC333A7, 0xA106DA82,
+0x6CF06A9C, 0xAE4A7DD8, 0x75D435F0, 0x5C4827AB, 0x8BC8A162, 0x21CB5C2F, 0x9930C4D2, 0xC58B7303,
+0x6C001E4D, 0x6DDBF63E, 0x4D77618F, 0x4D0DA579, 0x819A6E2D, 0xF9985661, 0xC4450327, 0x4C570B7C,
+0x41AB4D1C, 0xF6BC4F0E, 0xD727D038, 0x9D4F35B5, 0xC13E353A, 0xD118B596, 0x1DB52141, 0x40423D60,
+0x6B244B87, 0x48465D84, 0x06AC978A, 0x08EA6483, 0x5841D8C7, 0xBF8EBB1C, 0x352DA06D, 0x996002B3,
+0x7B95CFF5, 0x52E289E0, 0x5B32A8BF, 0x3F8A587A, 0x8826C437, 0x3989CBF3, 0x12A71993, 0x146AE9AC,
+0x6ABFCFC4, 0x90303FA5, 0x22B4F1E8, 0x10EA0B0C, 0xF05F97B3, 0x904B9BCE, 0xE0A247D3, 0xCD94CFE0,
+0xFE9C2D5E, 0x9D753640, 0x26D49812, 0x9472BFFB, 0x976B6D42, 0x2CC1D926, 0x536B55A0, 0x14FFD653,
+0x756D7208, 0x6C573DC6, 0x33721F0D, 0xB56B7479, 0xF0BDBBBE, 0x7822200C, 0xEFB10523, 0xFA3B4652,
+0x75D06121, 0x76A6E0E9, 0x52B88141, 0xAA347157, 0x652D9A58, 0x3D7AF5E2, 0xCF10B72B, 0xBC5DEF82,
+0x1FE97A93, 0x32CD2730, 0xD663448D, 0xFBB365B3, 0x55F1F543, 0x4312123D, 0x1CBF4718, 0xF012E645,
+0xF18349CA, 0xC90D4F80, 0x44A01AAE, 0x9C66F226, 0x03E9F66D, 0x91C203EF, 0x8CEC82AC, 0x2B57781A,
+0x815BBAA2, 0x2873CE7C, 0xA79FE95F, 0x4CC7F9F0, 0x8873DA72, 0x685D3681, 0x859DEB3D, 0x4CACBBCB,
+0x63F55AA5, 0x7B1A18EE, 0x90A86512, 0xEB142F3D, 0x0B612915, 0x3D97D25B, 0x34B0223D, 0x2FD35C0C,
+0xC083710B, 0x49C7D125, 0xDC4BE25A, 0x68DDC82A, 0xA49DBC8F, 0x9EB35399, 0x8B76CB43, 0x8C705764,
+0x3A74A416, 0x86E24801, 0x72018258, 0x9B0ED278, 0xECE3ACF7, 0x13B60F7A, 0x61AB3EC6, 0x0BDA9F8D,
+0x7EB44568, 0x94846E34, 0x378372B1, 0x06471776, 0x4B1D02A7, 0x982E5289, 0xCAB27792, 0xC771B958,
+0x0DBA2A56, 0x5C4D17BE, 0x1E3829E3, 0xCA4035C7, 0xDC07A9CB, 0x2453B975, 0xB73EECF9, 0x3576154A,
+0xBF62CC3A, 0x570B0DE0, 0x560B2D7D, 0xCDAAF0E4, 0x4488D308, 0xED343189, 0x7B877113, 0xDB36263F,
+0x44E74816, 0xD6EF29B6, 0x70CEEA54, 0x2AA130F9, 0x8E358C78, 0x4805C70B, 0xB6BB3767, 0x73EDA0CB,
+0x6799524B, 0x0D3BB4D5, 0x7AC1427A, 0x293AE26F, 0x62223887, 0x757BBB7A, 0xC9EC03BD, 0x956F8235,
+0xE35B250A, 0x3C542465, 0xCDDF2D0B, 0x891283F6, 0x88F1F0B6, 0x13DD1802, 0xBC5E0DC5, 0x1F3FBACA,
+0x5397703A, 0xC4D0905F, 0x3C056EF7, 0x96BAE07E, 0x6735D9F9, 0x015700FE, 0x2238C48D, 0x5C01FD70,
+0x51DFC05F, 0x711F0739, 0xDE1B9E7C, 0x11F58B33, 0x4F6CC210, 0xEA80C82B, 0x67292781, 0x3B4A7905,
+0x25EAEFBC, 0x13BBAAF8, 0x788D68A8, 0x37AFC939, 0xBBF3238F, 0xD245EF6D, 0xC186AA99, 0xB21B0B2B,
+0x4CACA053, 0xFF70124E, 0x53013036, 0xF08A4F01, 0xA91A4083, 0x8E918BFE, 0x61E70038, 0x37741D57,
+0xC2A55EA6, 0x6C5F064C, 0xEC74B668, 0x96E45B6E, 0x67238655, 0x4CC74DF3, 0xA92DC1BC, 0x0A7C60AB,
+0xB707E0AD, 0xD83A5CF2, 0xA61E63B4, 0xB0286C74, 0x98F0BCBB, 0x82005AB8, 0xA1A71CD8, 0xE8FC13B5,
+0xB6F2F1DE, 0x97C609DD, 0x81A9185F, 0x41C94285, 0xE35546BF, 0x63AD169A, 0xA2AD89F7, 0xC0CD5F90,
+0x23140ED8, 0x55FE03D2, 0xBF384654, 0x0C926E43, 0xB8FB66DB, 0x934725D0, 0x88CCD627, 0xF910EFEE,
+0xA551B15C, 0xFDCC2E7D, 0x2F8AFC66, 0xD025A11C, 0x7351F154, 0x3F9E94E6, 0xE76E2C7E, 0xB85260DE,
+0xB515782B, 0x62C83D4A, 0x92B0162E, 0xD8AF3A26, 0x2FC14BE3, 0x123B3A02, 0xE2CCFEA8, 0xF27A2999,
+0xF346EC07, 0x10ADA2A1, 0x63D94E09, 0xCF2ADFFE, 0x35225D94, 0x7F893955, 0x3721D0B1, 0x56C7498F,
+0x697C3D02, 0xF2CD63FE, 0x581789D1, 0xA0608E32, 0x1C7CBDDC, 0x6ABB3AB6, 0xAAB7FD93, 0x9A372BE6,
+0x70289F04, 0xD4CCBFE9, 0x081D3A88, 0x36FEB427, 0xBF6395B4, 0x761ED39A, 0x9CEA8417, 0xB01FDB41,
+0xD39BCE6E, 0x09DCE1CB, 0xF7FFEA10, 0xDAC6679B, 0xA2D8AC20, 0xB8A88D98, 0xF28B6119, 0xEE2FAB5B,
+0xA2A9BE4B, 0x35A43D4D, 0xCB089A60, 0xAEA485BF, 0xE6D2D317, 0xEB8ACEB1, 0x0E31B2BD, 0x10A44F44,
+0x7CA67121, 0x461D4E42, 0xD0E83018, 0x78D8599F, 0xCD36CB2A, 0x8FD201B3, 0x4CBA0BB8, 0x5E393D2F,
+0x04F18682, 0x485CD3D1, 0xD916A3FB, 0xC088DA28, 0xAFBE30C9, 0xF0B86BF5, 0x94E1AF75, 0xDF98C85F,
+0x478FC587, 0x746E8C4C, 0x784C0BD0, 0xC55C62E8, 0xA13E83FF, 0x63190FA1, 0x4859524C, 0xF319A2FE,
+0x9265D6A8, 0x73F69750, 0xBDBEAA5B, 0x9837B28A, 0x98192F9B, 0xAABE040F, 0x3D05B0F0, 0x2C1EEDBA,
+0x948C7764, 0x1C2079B1, 0x86629CE0, 0xDF1DDB84, 0xAFAA4865, 0xA852A40F, 0xBFF4E2DF, 0x76FA945F,
+0x8853814F, 0x1E7CF030, 0x381B8DA9, 0x55301A6B, 0x83E87C19, 0x837E3DDD, 0xA85EB680, 0xA11D3987,
+0x74FCEEE3, 0x3AC5564F, 0x9D8F3998, 0x11BB3767, 0x34E94D97, 0xE1669F46, 0x5EB2DFCF, 0x9E1F8A27,
+0x97317824, 0xC2182A76, 0xA5B6DD35, 0xECF51634, 0xCCACFC3B, 0x8D5DCBE8, 0xC20E472F, 0xD6F2875A,
+0xDAA3ED47, 0x47A1EE73, 0x98411116, 0x00BE0AA2, 0xDD26E3B4, 0xA943EC08, 0xDE4B8DB8, 0x4E9AF02E,
+0x97D06230, 0x5E5A6DDC, 0x3F418C25, 0xE0ED5062, 0xBCEE9D24, 0xB066D7CB, 0xCCFEF139, 0x2C3C87A7,
+0x6AEE97D1, 0x38E6137B, 0x0A4ED6FB, 0x7E45E4DA, 0x304A9F47, 0xA810D39B, 0xCF2BCD5C, 0x3BD535FC,
+0xE8A57140, 0x877090B2, 0xB8E58231, 0x41AE7F1E, 0xA43DE18E, 0x9FC115E5, 0xF34D6BB0, 0xC7052DFF,
+0xB9A3B7A6, 0x4BC1D51D, 0x782DE95B, 0x087E5B37, 0x9C435E40, 0xFEEAB89F, 0x36F11577, 0x5C0800EF,
+0xF4F3EA63, 0x143D3D16, 0xECE4521B, 0x443BDB40, 0x513FA30D, 0x8301B177, 0xA7DFDA2E, 0xC60B61C9,
+0xC662FA23, 0x84580368, 0x7DE8419A, 0x5368140C, 0x4DBAF2D1, 0x967255F3, 0xD2A12503, 0xB65A48C1,
+0xD51B13E5, 0xE143CDA7, 0x05576556, 0xDB5BFAE2, 0x26276FCF, 0xD9E32EAF, 0xBC136EF8, 0xFBD685F0,
+0xC5E02326, 0x8B7F4419, 0xEAEA463A, 0xFAED7BAD, 0x04D658EC, 0x5F98571B, 0x56544487, 0x7F38641D,
+0x354EFB44, 0xFC46FC0D, 0x4CFAF065, 0x6B276421, 0x64170228, 0x98F71935, 0x0F4D8EDE, 0x2321B66D,
+0x04FB21E6, 0x07A5E351, 0x367B4F83, 0x9B42B568, 0x7EC2361B, 0x6EEEF077, 0xB251D401, 0x3547A2BD,
+0x89F44EAA, 0xC1F2BA0D, 0xE615404B, 0xD0D46B24, 0xEA8F30F6, 0x45374E1B, 0x7D98F761, 0x1077532D,
+0xCA87DE51, 0x95705994, 0xE79029A5, 0x99A7215D, 0x73771480, 0x1A21FEDA, 0x1AA4458C, 0x0F2F143A,
+0x79932000, 0xC157F29C, 0xA86830F0, 0x0713AF26, 0xCADE7697, 0x34BC97E3, 0xBD5C6067, 0x76D1E8E5,
+0x30AF277C, 0xE39932CC, 0xC2AEF947, 0xD7941AEE, 0xDEB3215B, 0x83227BA4, 0x97E76ED3, 0x80F6CD29,
+0xE7E0E884, 0x3DDD1AF1, 0x9938F74B, 0x1EAC8622, 0x7EA0B846, 0xDDF918EF, 0x7EEF6AB4, 0xAA6926B8,
+0xE442E50B, 0x9FDA3F94, 0x544A182E, 0x27D30D95, 0xC0407714, 0xB17C0B9A, 0x62BD0D31, 0x8E313A97,
+0xF17E8218, 0xC8EF4394, 0x890F4D35, 0xA70D3588, 0xA26A4A79, 0x8B90AD99, 0x4D8CEC52, 0xC0064D28,
+0x9EC47D57, 0xF86F9F96, 0x9FC7BBFA, 0xFFFA1242, 0x570457A3, 0x72E7D729, 0x6CAE710E, 0x6BD4A3A9,
+0xC869938E, 0x8CEEB9CD, 0xFA0141DB, 0x0FBF71BF, 0xC3C191B1, 0xFCBE4B88, 0xC928FC4E, 0x0CFAE72A,
+0x98FE7BBF, 0x16E45602, 0x686D4B2D, 0xAE9D1C49, 0x025A6CF3, 0xC7223EBC, 0x825340AF, 0xAD7FA0E8,
+0xBFBAD3EA, 0x5DCE560B, 0x93B39B44, 0x79DED7D9, 0x907E1422, 0x5EA1618A, 0xBA33BEED, 0x4CEB0C98,
+0xFAC03601, 0x03DD1136, 0x10D9005C, 0xD07C8D9E, 0xE22B8A91, 0xE893486E, 0xC5744F9E, 0xD9893E0B,
+0x31D3CB16, 0x9B7BED8D, 0xB0B0D05E, 0xAB2E2DC7, 0x001F7229, 0xFFE40269, 0xA6B1C53A, 0xC5546C2C,
+0x14EB320E, 0x923C008B, 0xDF9CD1B3, 0xF11B5FD6, 0x4A0C17A2, 0xAAB1A40A, 0xEC938D6A, 0x41FAE2A4,
+0x4453348D, 0x723B9B38, 0x4D2159E2, 0x869FD5A5, 0x40E02839, 0xD254911A, 0xF32B9C9E, 0xDDDA9A3C,
+0x0C93D650, 0x1FA96885, 0xDE397543, 0x8093EE05, 0xAB96D9D0, 0x7E7B56F6, 0x4D02A765, 0xE2ED3705,
+0x02EEF77C, 0x4BED6B4D, 0xC3550BC7, 0x24A5A3E4, 0x2B12E8FB, 0xD5A9070C, 0x35AB64B6, 0xC962C25C,
+0x392D53D7, 0x12CB1284, 0x7E844759, 0xD065656C, 0xC0A5B9D6, 0x7C54EF23, 0x85D2322A, 0x9B08612D,
+0x7AAC46D4, 0x3704AA61, 0xCD8D1A45, 0xAF9BDEB6, 0x63D962EF, 0xF21A33F2, 0xA8FB593A, 0x7426BF62,
+0x1AEA26B1, 0xCC69DF67, 0xD64B262A, 0x184077D7, 0xD7179E76, 0x90159A58, 0x1E73A0D4, 0xE369DBB8,
+0x9F0131C7, 0x18E2B264, 0xBF77B44E, 0x7309E1DD, 0x783D07D1, 0xC1606096, 0xBF0BD62A, 0x977C4E1B,
+0x99F0877A, 0xDF7E33BE, 0xA48E65BE, 0xD951FEBD, 0x946C25E0, 0xB7122EBB, 0x7E7412D0, 0x54AB4A11,
+0x4DE885F0, 0x30B226DF, 0x0A799EE8, 0x63F4EEF7, 0xCFB27A10, 0x0708D589, 0x97C73851, 0xB8B1D567,
+0x3B4824F0, 0x1F91D5E9, 0x7AC54273, 0x22953BF7, 0xC38D93C3, 0xAA1AE25A, 0x2C422855, 0xBA3368C2,
+0x4808605B, 0x8E72597E, 0xCC042627, 0x8EBF0021, 0x9FA2E641, 0x52DE645E, 0x25F74F3D, 0x3BD132AE,
+0xD812A5F6, 0x1856E4D5, 0xA8B96F00, 0x6FE18BD0, 0xB6FE68DA, 0x7E71726D, 0xC0C91B7F, 0xC46AACDB,
+0xA8B41DCE, 0xC9B42BDC, 0x4C62176A, 0xB06B1DB2, 0xAD1694AA, 0xFA16F56C, 0x1ADAE76A, 0x7B841206,
+0xED1AF0F8, 0x70B02E04, 0xBA93ABBE, 0x63993130, 0x372851F3, 0x949D4C13, 0x6C5F44D7, 0x475728B0,
+0xAB42C1C6, 0xCC8A9C99, 0x98D96953, 0xE782CCCD, 0x6CF0C27B, 0x89550E67, 0xF16DDB89, 0x2FB900A1,
+0xFC444A7B, 0xD4AD82B5, 0x95B4C593, 0xEDE5EFD9, 0x2F0BA2DE, 0x4DFE36A0, 0xADF39EC9, 0x2C30150D,
+0x40D112D4, 0x4EF53D0C, 0x691E9D00, 0xACE4322D, 0x72FFB7B4, 0xDBB757A6, 0xBA20F7F7, 0xD7C2B094,
+0x2C3BD4C8, 0xD8ED3844, 0x48FBD148, 0xEE53D0F8, 0x19A81E6A, 0xFB6755B6, 0xF58F7FE2, 0xBD962944,
+0x9DCADC3B, 0x5723BD47, 0x38B503F4, 0x008186EE, 0x28D52F30, 0xEA10CAB6, 0x11FF4805, 0x2EF5757E,
+0x597A416F, 0xFE4DA8C5, 0x2C9073EF, 0x1E2A5333, 0x0CE88351, 0x684E92ED, 0xC09BC403, 0x0347D284,
+0xF48D18E9, 0xE1483A4F, 0xF2CA28B3, 0x58552A08, 0xA52A7FC9, 0xD10C283D, 0x82006D3C, 0x29205A99,
+0xDCD22890, 0xC701CB9F, 0xF74D864F, 0x479D6316, 0x723965A9, 0x55127969, 0x20D91CD2, 0x31ABA91B,
+0xFD2248E4, 0xF86BBE20, 0x156A31A3, 0x545EDA79, 0x1AAABCD2, 0x996E0AD6, 0x6B3A3316, 0xF96758DD,
+0x86EA610F, 0xF4748DDF, 0x81CDD054, 0x4EDF8E6F, 0x41AEB2A8, 0xD672E6D8, 0x85578992, 0x1AB28136,
+0x29E6A64E, 0x565F37D8, 0xB4BD9B90, 0x0AEA5540, 0x30C277A4, 0xC0DF5BB7, 0x1F9BA3D6, 0xABA9C528,
+0xC3AB4AB4, 0x6EFAE5A9, 0x48E8686E, 0xDC997A0B, 0xA5EAEE00, 0x31079314, 0x359ADB34, 0xF2BD50B6,
+0xBDAF0F5C, 0xF85E3EA9, 0x7D50BBA0, 0xF0E05F17, 0x8D171177, 0x36DFBFAD, 0x152C0B37, 0xFA21AEDB,
+0x7AB95FA8, 0x3288F2E7, 0x0FB2DB74, 0x2E34E091, 0xC6DD6DF3, 0x8ED5AC58, 0x2FF21226, 0xF303BAA6,
+0xF72AF904, 0x584EC9E7, 0xA884C71F, 0x61A74C06, 0xBD98B23A, 0x11407DE6, 0x3656C506, 0xDEA1A00D,
+0x864DBAEC, 0x8357199C, 0xF15E06DD, 0xCD320B2E, 0x7CEE3FCD, 0xEB17612A, 0x230716C4, 0xC988FAF9,
+0x730FACB1, 0x3476CDBC, 0xCDF3D13E, 0x8C2E07AF, 0x2AA45431, 0x8FCEB89A, 0x5456DE22, 0x4D06E002,
+0x59B4745A, 0x5885460A, 0x84A10666, 0xDDAEB533, 0x8C0D5DE3, 0xE150B6F4, 0x547E839B, 0x095697CC,
+0x41B2AAFB, 0xDF274E49, 0xC2C17A6E, 0x7D71A7D0, 0xB972F38A, 0xAF3BB9F9, 0x87A91180, 0x2F21A97B,
+0x533FCA21, 0x73F015A3, 0x8E65116B, 0x5BEB7674, 0x41382261, 0x7E3915E1, 0x0207B6BA, 0x5E797BC5,
+0x7A110612, 0x9994E4C3, 0x376FF06E, 0xE9DECEB4, 0xA52AD817, 0x12D15820, 0xD3957636, 0xC7EE8BF5,
+0xA1142332, 0xFE8E1EA4, 0x7D453565, 0xE5EADCC8, 0xBC7C9FAE, 0xCA108FD3, 0x6B4BE43A, 0xAFF46FBA,
+0x24676EE8, 0xFDB63B23, 0xB9898ACD, 0x0100A160, 0xE0A2F145, 0xF0CDB4DC, 0x19F1C94A, 0x3C38FCAF,
+0xAB8CE033, 0xF9FD9907, 0xD5E46A38, 0x8A1F7966, 0x4FC22A9D, 0x9FE4A99C, 0x0013C3BA, 0xD1B6A3F3,
+0xEA923789, 0xDDCCE2A4, 0x0F267162, 0x60BA28ED, 0x3036515A, 0xD1B3632B, 0xA8647CFF, 0x8684E495,
+0x608D637E, 0x57B65D52, 0xBA4BC25F, 0x5B432E8E, 0x18542FF5, 0xA6762ED4, 0x80FFBFBF, 0x2EECD51D,
+0x018D32B0, 0x785349BD, 0x860CD696, 0x17B731F7, 0x46B54C92, 0xCB6BB384, 0xAC44B38B, 0x4B7D195E,
+0x40780F91, 0xB75F6DDF, 0x1850FCF3, 0xF37CBCC8, 0x438AE852, 0x47134F1D, 0x2F5B4D50, 0x644F3239,
+0x0BE29453, 0x0463B82E, 0x24636E2C, 0xDAF3F0EE, 0xFE97C124, 0xFA5BB098, 0xCEE154B6, 0x0AFA6231,
+0x859839D3, 0xD6AA6A80, 0xFB384AC9, 0xAB3603A4, 0x4948F545, 0xDE30B018, 0xCE3ABE86, 0x899E1F13,
+0x3102541D, 0x97B1F520, 0xEC9D6D20, 0xED16A90B, 0x2D1AB12A, 0xA52E42A7, 0xC504A4DB, 0x8664DFAA,
+0xC1526D3C, 0x420E4463, 0x66D04F23, 0xDDB76990, 0x47539CD3, 0x91A0BEEE, 0x8049587A, 0x1AA8CD07,
+0xB3604E10, 0x8AEAFC8E, 0x71A7165D, 0x287C0E15, 0xEF98D0EB, 0xDFA11760, 0x0C707A28, 0x45AF217B,
+0x9DA276C1, 0x7638BBEC, 0x49753BB8, 0x443C028A, 0xF2C13941, 0xEEB4EFE6, 0x419FC4F0, 0x4CE799D8,
+0x40DB436E, 0x83572560, 0xFC88A452, 0x4222846C, 0x346F8133, 0x6398C651, 0xDAF32DB2, 0x3D9F71F4,
+0xAA8B8964, 0xCCE4BA23, 0x75ACC268, 0xDC13FB5D, 0xD8DB5350, 0xA650F181, 0x451699C7, 0x235F0B85,
+0x5822C121, 0xF42A2104, 0x8FD33084, 0x2E2D9245, 0x75372A02, 0x7AEA8B50, 0x32272F90, 0x09EA8CC8,
+0x753F892A, 0xE12D3761, 0x4EAFE211, 0xA7C1B148, 0xA5F81C3B, 0x988245B9, 0xCEB9523F, 0x613B204D,
+0xFBE1A632, 0x831B0A1F, 0x87107C14, 0xB8B9A2E3, 0xC882C127, 0xF00A0917, 0x72D8C609, 0xC96904E7,
+0xB3FA154D, 0x88E9B3A4, 0x2669E4B5, 0xA6A5E89B, 0x0C7D0E7C, 0xC8C689E8, 0x12A3453B, 0x35CD299D,
+0x5E08053C, 0xCA997345, 0xD8C4FD75, 0x2E6AB8EF, 0x66FD6093, 0xC3564305, 0x27B3910B, 0x3ACF57AE,
+0xAC11101F, 0xE06FEC3B, 0x36C12495, 0x75EF8F39, 0x661DC322, 0x48A0C03C, 0xB2908999, 0xAEDE454B,
+0x33F891AE, 0xF2E0FB24, 0x00E6D6E4, 0xC8CF7020, 0x461AABE7, 0x090ABC96, 0x7F3661E2, 0xF254B42C,
+0xB751E291, 0x7AC253BE, 0xC11E9526, 0x8916C54D, 0xB060AEC7, 0x0F04E25F, 0x24D69EE5, 0xB5566357,
+0x581C694E, 0x04A96BF9, 0x1ECED2BF, 0x7C9D9835, 0x3C31DF99, 0x8524683D, 0x6290ADD4, 0xB319DD75,
+0x2E0E2D4C, 0x895C34C6, 0xB67DCEFC, 0x8A35526E, 0x1356CC5E, 0x1694936E, 0xDE0BD098, 0x08EDFC5F,
+0x2A13762F, 0xA3F23870, 0x7DF2D7D3, 0x5574B637, 0xEBFF93AC, 0xFE23FEFD, 0xAE4FC8C1, 0x964E8983,
+0x65B997A7, 0x657A003C, 0x42EFB273, 0x21934A2E, 0xF61E26E5, 0xBE9E235A, 0x444A98CA, 0x9289A17D,
+0x82558DC8, 0x2BE877E7, 0x88030177, 0x61131857, 0xE563B1F6, 0x93137077, 0xCCE256DD, 0x62472F1A,
+0x0D8206D1, 0x3A6F4F58, 0xF2C6F5FA, 0x4360DB39, 0x18FFB0AB, 0xE326F12C, 0xC3F71739, 0x05E60C95,
+0x1411AD63, 0xA4201B84, 0x1039C852, 0x9D84DC83, 0x7F54F494, 0x05158817, 0xDF3509A1, 0x557A7C2B,
+0x10C881D3, 0xD9E699E8, 0x82F15402, 0xF5D5EC2C, 0xAEB6B6FF, 0xB8C5C00B, 0x9D9CC264, 0x1A568553,
+0xF5F41FC9, 0x1F4F53DA, 0x314B0BA3, 0xBCE2F4BF, 0x67B75A3A, 0xDC3D2B66, 0xE6F85231, 0x460150C1,
+0x5A6ADF57, 0xE9A509BD, 0xDD2DFDF8, 0xFEE86715, 0x0636CA45, 0x4CD44A1F, 0xBF21D297, 0x791213D9,
+0xB579EFF9, 0x0940AED8, 0x3E6539A5, 0x958BFAC2, 0xB5A7CBC8, 0xAB80DD14, 0xF487970B, 0xE550F94C,
+0x4FF1DDF1, 0xA1A8B8C0, 0xCC066ED8, 0xAFAA9103, 0xFC7D526B, 0x880F6746, 0x34D2D8F6, 0x55BD8E5F,
+0xED0009B4, 0x9FAB0C02, 0x908C204D, 0xA092565D, 0x56300D18, 0x4A1D0524, 0xC0D55A41, 0x0F144E73,
+0xECDC94B5, 0x9DD4C1FE, 0x1DE408CF, 0x3E60B86C, 0x9B10DC96, 0x7E5B2823, 0xBF89E370, 0xF9E3FFE7,
+0x163A01CC, 0xA5CAFC28, 0x2927F977, 0xF292BB88, 0x85DE801C, 0xD81A1DA8, 0x18FBBFF4, 0xC096B7E0,
+0xF7576AFC, 0x44A6AC13, 0xCEB88F02, 0xF8074B0E, 0x2E2E6430, 0xC0210E17, 0x80B6FC9E, 0x5022A2BE,
+0x49400A68, 0x0A3D980F, 0x3E5737AB, 0xA0467668, 0xE07C8FCD, 0x0E5D8713, 0xA21E0110, 0x044E391A,
+0x17F845C2, 0x7504CE61, 0x35F77809, 0xF2B27D9E, 0xE39E9E20, 0x1AA0B1EF, 0xCF54D1B8, 0xF8724E09,
+0xA813CC8F, 0xD445152D, 0x48C7A192, 0xBFB3AF5A, 0xF4C37129, 0xD39A0EC1, 0x3EBA2D63, 0x457395A0,
+0xDC0B1A28, 0xD05F64D5, 0x8493C906, 0x8D5BDFEE, 0xCAE2DFDC, 0x6B5B2920, 0x37AD0B5A, 0xEA7EF44D,
+0x3AC73A10, 0x036F5E90, 0x26A5440C, 0xB43295B6, 0x7171DDBC, 0xE7D9009B, 0xAD201BA6, 0x2CA8C94F,
+0x0FF806F1, 0x2807C837, 0xD1C2A559, 0xA5AEA016, 0xE66518C2, 0xFF1649AB, 0xCFE12D70, 0x88163EAC,
+0x4195C395, 0x845F0401, 0x58D8B9C0, 0xD19EE190, 0x0824B284, 0x539E5FFA, 0xBE4C4BBF, 0x86093302,
+0x4A1AF9CA, 0x942807C1, 0x1909E2FE, 0x3144D6E5, 0x5D0D5F26, 0x0DC04818, 0xCE6628DC, 0x47BEB497,
+0xCBD8B93B, 0xA22F72E6, 0x9FCFC5B8, 0x53026CDA, 0x87B0FF91, 0xA65E41FD, 0x07B17582, 0x17EF0E56,
+0x86B28A00, 0x1B6FF14F, 0xBFE92D12, 0xBB9D987F, 0x2C0C4CB2, 0x7BAF6B4C, 0x5C3EAA31, 0x2FF41226,
+0x867491D7, 0xDE5B3425, 0xD2A0D0DA, 0x9695D1B6, 0x605BDD33, 0x1EBBB193, 0x1937E313, 0x4B0D4C42,
+0x5A4FFEB7, 0x18273078, 0xD42013D2, 0xD8F30A65, 0xF47BA323, 0xC9838AE7, 0x2A8EE8A0, 0xEE458B72,
+0x449140C9, 0xE9403C66, 0x2842519D, 0x6BFBB9FA, 0x086F3EAA, 0x40B0B5E8, 0x31A407AE, 0x7DABCD6C,
+0x01627DEA, 0x1E29A803, 0x976DC51F, 0xE567F895, 0x2CC063FC, 0x12C12E4A, 0x6567F129, 0x49429698,
+0x4C7955AF, 0xEF10A8B2, 0x756F2452, 0x4C7D706C, 0x099AFF76, 0xF04B7100, 0xD9BB5DF1, 0x0E96511F,
+0xC8BA8FC9, 0x40F5E520, 0x3EB3062F, 0x531D47FF, 0xF758A2A3, 0x07ED1B00, 0xF0BBB55E, 0xDD2954AA,
+0x917FF821, 0xA9BB4A8C, 0x847E2956, 0xA5229B5A, 0x3BBF2DFB, 0x103695A9, 0x01BE801D, 0x9BD1B8B2,
+0x8CB41B48, 0xCB417746, 0xE434651B, 0xD9B9BEDF, 0x2BF56981, 0x484ED693, 0x3A670FE3, 0xCA997363,
+0xE09E3A48, 0x6CB990F2, 0xBDF6D6C9, 0x01928403, 0x52425A13, 0x8A35F0C9, 0x4CDD2F5B, 0x4833CFC0,
+0x85C718D0, 0xEE1755A7, 0x1CAA3DD1, 0x48407C00, 0x82628F19, 0xCD8DC81C, 0x9B939FE2, 0x097FD974,
+0xFC36BA8A, 0x75E4CEA4, 0x42548DAB, 0xFFE73F9A, 0x7E4B77B4, 0x52DC95B9, 0x2B76BA79, 0x3DE7BE5B,
+0x25EA512E, 0x6E189EC8, 0x6CE244FC, 0x6C634D6B, 0xBD8A4C66, 0x2A88F6E3, 0x3D21C4EC, 0x70846A41,
+0xBBFCBFB7, 0x314C6F50, 0x086D8481, 0x53BD24C0, 0x63A5D91C, 0xB7C13B60, 0x59550B35, 0x1A334582,
+0xDC0650EB, 0x5DDDF508, 0x0FE55193, 0xD92DE94C, 0xD6C64A69, 0x037DBF13, 0x2110563F, 0xE2FC6B2F,
+0x44354CB4, 0xFD313948, 0xC1A17705, 0x23BAE4B2, 0xA1D3F739, 0x93ACAFF0, 0x9ACCD6DD, 0x6370510E,
+0x05A08FEC, 0xE010D8DB, 0x4AA4E521, 0x7DCC6169, 0x10424020, 0xA668A18D, 0x7CE43470, 0x1CFF25BB,
+0x47C3C9A2, 0x4B101698, 0xDC2EA913, 0x93E5DFEF, 0x0D462B3A, 0x0EFD4B5D, 0x41488A8A, 0x08514FED,
+0x9503C6A5, 0x368751BB, 0x1A715CDA, 0x188C3C52, 0xF030A8A2, 0xD12F470C, 0x40529922, 0x905B394F,
+0xDA0B11C7, 0x7A4A3CD9, 0x217E585D, 0xC37FBCFC, 0x15669E2A, 0x30BCB2D5, 0xBBA6D456, 0x0336199A,
+0xAC8660A3, 0x2058287E, 0x9F10B5DF, 0x78C55616, 0x3DC27653, 0x520B3F65, 0xDF50C1BD, 0x2429E765,
+0x11250E0D, 0x02B31452, 0x9392F64A, 0x81E8FE7B, 0x89107FAE, 0x6ABA4AD9, 0x8CD2428C, 0xA84399F2,
+0x9843EFAF, 0xDC918938, 0x5E004235, 0x06CBCB12, 0xE1C3355F, 0xA6942A12, 0x697CC76C, 0x00C9CD66,
+0x01010000, 0x2D44959F, 0xA338F4FF, 0x84F7E400, 0xA358823A, 0xC5FA9CB0, 0x8F07F0F2, 0x0A138292,
+0xAECC1B06, 0x909B254E, 0xA805377E, 0xB5FB5ADA, 0x03976F66, 0x1457E692, 0xAC97D8DA, 0x29286441,
+0x96E1FB18, 0xA7BC0649, 0x37174EDD, 0x2185A8C2, 0xCA3B3C75, 0xBD660A4F, 0x5E7194BE, 0x08BF679A,
+0x578FAC1F, 0xB1BA37F2, 0xF421B887, 0x818B23A2, 0x7D56F480, 0xE60BD631, 0xBB47DF51, 0x3A838301,
+0x9C1A443B, 0x362F0BE1, 0x066A401E, 0x70982AF6, 0xA79CD72D, 0x5EF03C97, 0xFC270B9C, 0x780BB551,
+0x2B7EA14A, 0x3ABA2250, 0xD03A94F9, 0xD20194FA, 0x660FFEA7, 0xE511C1D5, 0x5D6F797D, 0x7AC5B7B6,
+0x91E5D2DE, 0x9E14E242, 0x2A480200, 0x41F8A245, 0xB0C50751, 0x1F011CC7, 0x01000000, 0x19989B41,
+0xD4FF154F, 0x08C4A133, 0x126F0DFF, 0x94E331D3, 0xA7057782, 0xDB86CD85, 0x92F9BD25, 0xF0379F94,
+0x148CD12E, 0x12EC2B43, 0x87318E72, 0xEE84E5E7, 0xB398522E, 0x287319A5, 0x5551BC09, 0x08EDBBA9,
+0x6A218C88, 0x61A62137, 0x3B41DE3F, 0x23454954, 0xE23FD148, 0x3EE19506, 0xB4D1245D, 0x4420297C,
+0xD4B23515, 0x00886519, 0x0F3497E8, 0x7F66720E, 0xE058B350, 0xE76D84D5, 0x8709ABE7, 0x6E88CF00,
+0xED53344A, 0x5735C17F, 0xAB9CEF31, 0xD41749DC, 0x9B1AC185, 0x39FBFE32, 0x98FCEFEE, 0x90C88BD6,
+0x704C67EF, 0xE444D080, 0x804620E4, 0xA72AFB83, 0x2B0F234E, 0xE2FAB80D, 0x8A5ACAD0, 0x5E447BF7,
+0x7C504FC5, 0xA7D96276, 0x80369B3F, 0x7BAADB85, 0x3A9F34B6, 0x9A4C67AD, 0x1972E8C4, 0xC6DF383A,
+0xEE09986C, 0x16949C83, 0x9B645314, 0x902C6C24, 0xD6004D03, 0xC8ABAEEF, 0xA853148A, 0xBD6AB1A2,
+0xFCA93214, 0xFC704D1D, 0x252EFC04, 0xEB9AF5E0, 0x79CA611E, 0x31C60608, 0xA7E34589, 0x6D142F7C,
+0xCD255A59, 0x1989F62C, 0xD91EC2AC, 0xA8867272, 0x59C6FACA, 0x5F6E6E8C, 0x8A1B1680, 0xDF017D9C,
+0x0D9C0332, 0x425542F4, 0xD3D23398, 0x3F1EB927, 0xC8636E09, 0xB1C1DB76, 0xD924ADAA, 0x35C1A2DC,
+0xB3E0154B, 0x3EF6427D, 0x36B7D595, 0xF1BDA4F3, 0x92BCB79B, 0x825C95FB, 0xA188A757, 0x3C709AF1,
+0x33957E17, 0xB8FE94BE, 0xB75C007F, 0xF0FB4D41, 0x45CFC2DE, 0x65ACA651, 0xDF859915, 0xFDDA033D,
+0x54BB95DA, 0x20028789, 0xF308851A, 0xC75AAB94, 0xCF53E720, 0x6A5515EF, 0x38F4CF49, 0x800B0ED2,
+0x878D6493, 0xD95FE624, 0x4841FEBD, 0x1618E817, 0x0A36FD3E, 0x346716DD, 0x71AD42C0, 0x5B35E9DC,
+0x5B12AE21, 0x55DB2D01, 0x3E88B424, 0x0662B9D7, 0x89DB0D3D, 0xED003F3B, 0x54C5E9C1, 0x3777B835,
+0xD8B35A8A, 0x6CD12288, 0x48578CF2, 0x6D5EB61D, 0x43ECA07E, 0x6EE6C70C, 0xBFB17145, 0xFC91F397,
+0xCDFCE803, 0xD09744A1, 0x691751E0, 0xFECBEAFA, 0xABD2AC51, 0x8B00AFCE, 0xB8ED8BEB, 0xB1F7B6C6,
+0x59A22201, 0x431DA8CE, 0xE084BEDE, 0xA500FE20, 0x685D50F2, 0x98B3E8DE, 0x2DF63F97, 0x568F1B11,
+0xBCF13CEF, 0x80CD0355, 0x3A2E13F9, 0x1F1B9970, 0xB311F63A, 0x81EEF8CB, 0x7F1E523A, 0xF5B46FC3,
+0xD039E0F6, 0x0426E14B, 0x17775103, 0xF202D8E6, 0xC29091B1, 0xA5F12DCB, 0x936D2EA5, 0x9762F0CA,
+0x51E65EC8, 0x48812BE9, 0xD200B3B4, 0xA1146D57, 0x6AC98984, 0x43829C77, 0x224CE8A3, 0x5224C07F,
+0x2CB42799, 0xE3C6BBBA, 0xF9F38EE2, 0xAD0FBF0E, 0x081423A7, 0x1333FC60, 0x945032C5, 0x0FB064F2,
+0x1465EBD7, 0x6C48C013, 0x652D8B5C, 0x43E6E88A, 0x83733159, 0x5D1774E3, 0x75960559, 0x9589C5E6,
+0xE3CAF554, 0x7212A378, 0xC0F1C1B4, 0x9A13CC9E, 0xE334FB8B, 0xA9DA98D2, 0xDB5E9F7D, 0x0B261471,
+0x0A90184A, 0x519ED01A, 0xE49D1280, 0xED17A553, 0x6DE289F5, 0x609F295B, 0xD40452BA, 0xCB4912CE,
+0x1C9A1AB4, 0xBCCA95E5, 0xD4FFFA40, 0x051A1981, 0x9F6CDA19, 0x39043B93, 0x475989C9, 0x8CD94811,
+0xA48CE385, 0xE7DDFED1, 0x6EE07EC5, 0xB0B440FA, 0xD81586DB, 0x9256EC07, 0x490EFCCF, 0x783CB16B,
+0xD7B81E5E, 0xEDBC64D9, 0xE31FAB3B, 0xA46EE50F, 0x859CDB6D, 0x64EF0482, 0xA5B5C813, 0xBC5404BD,
+0xF77CC20E, 0x39DC99C7, 0xD2CDFE8F, 0xFB4F540B, 0x7703CD28, 0x645411E8, 0xD40F9153, 0x3F3630F3,
+0xD1F20FD3, 0x2C7CFA78, 0x95632F20, 0x55280A7E, 0x58815412, 0xFEDEF644, 0xEE351869, 0x3CFC4D03,
+0x21953C2C, 0xB5F5F62B, 0x6D55C964, 0xF9DA184D, 0x99EDC1B8, 0x0A45FCD9, 0xE51CC992, 0x024AC2AC,
+0xDAC3C558, 0xCEDABD51, 0x0CAF3011, 0x31F66BBD, 0x33F7F468, 0x6577F097, 0x98E18A90, 0xCB331458,
+0xDCAF298B, 0xA86B2915, 0xD93116FD, 0x547DE3FC, 0x95425F78, 0xCC1C33C6, 0x19A20B44, 0x0321A403,
+0x36F9756E, 0x69F7EB4B, 0x900330EC, 0x5F17F2D7, 0x932B790D, 0xD6FBDDEE, 0xE35DD04B, 0x8C3D1EEF,
+0xCE7605BE, 0x5358EFC4, 0x4C4BDD44, 0xAF337FF2, 0xF4C0393B, 0xF6B35EAE, 0xDFD1003C, 0xC1061131,
+0x44F7D7A5, 0x2A63DA22, 0xF3340D55, 0x799CE5D5, 0x1029610B, 0x10128645, 0x75D49120, 0x50A8C6D4,
+0xBCCD8A91, 0xD7B1C246, 0x14330D43, 0x71CA0059, 0x7B9AB5C2, 0x4450991A, 0xA2B13B4B, 0x9C1C519E,
+0x6EA6F4FD, 0x14A08DB7, 0xBCBD5B67, 0xCD4648DD, 0xB8EFD0DF, 0x0CC04AF4, 0x4286F6A7, 0xE529B050,
+0xACF8D754, 0xA8CEF902, 0xFB2940DE, 0x1185CA32, 0xA617E2C5, 0x3F409035, 0x56F6EEF9, 0xF5F6FA65,
+0x5D4DCF26, 0x76B739A8, 0x625CB8BB, 0x37356354, 0xE7EDEA3F, 0x6885E9BA, 0x92360340, 0x37AEC146,
+0xA5018312, 0x366758FD, 0xCE15FC17, 0x82CAD86F, 0x69DD5C80, 0x00791700, 0x7ABD8718, 0x54CEA938,
+0x1B7B0166, 0xF79B7995, 0x89E789EB, 0x6B55840B, 0x37694063, 0x939F744A, 0xCD13DD12, 0xD72B8887,
+0x231E41DA, 0x7DB7B939, 0x3B610B17, 0x0E496F81, 0x856ED53D, 0x494BEA59, 0xD4286A5D, 0x0C84D458,
+0x421A1483, 0x95B3AF5E, 0xA131D590, 0x3F9F54B6, 0x803C4A0A, 0x4577841C, 0xBA18E9D1, 0xC519294E,
+0x4CCEFD3B, 0x4E4C988D, 0x82F44B4C, 0x565276D1, 0x2481174A, 0x54E2EFE5, 0x8B684682, 0xC7A59707,
+0x7CB8306B, 0x7E665AB4, 0xDDCE998C, 0x70A66E22, 0x66FBBACA, 0x3BF58F56, 0xD4416D27, 0x841F8CE7,
+0xF860EC0F, 0x2775E8B1, 0x5795D1F6, 0x13DCAC2B, 0x13FED2FF, 0xECB75458, 0x8244F47B, 0x350777E1,
+0x1B389338, 0xE6B6B651, 0xAD9A60E6, 0xB632A0FB, 0xF8BB489A, 0x4D98EDF0, 0x609CED6F, 0x26EA02C0,
+0x88C8ECAB, 0x4C02BC18, 0x4765EDBA, 0x5DD5BADF, 0xEC48F9E3, 0xFF2F44A4, 0xA406D525, 0xC3C47DB2,
+0xD71951C6, 0xD042EA13, 0xF3813C92, 0x11240D7F, 0x84C241AC, 0x9CA4DD3C, 0xF4E64969, 0x33D5D027,
+0xD112FF6F, 0xE54FC993, 0x83088B30, 0xEFAD490B, 0xBC08EA49, 0x2C094423, 0x4E796A8B, 0x867A10BD,
+0x7C2F3F11, 0xC6967144, 0x88F78D35, 0x2B0F853B, 0x290FD92B, 0xD0A72286, 0x4EECF979, 0xA0632CB2,
+0x58690E7D, 0xB00ED0DD, 0x646EC326, 0x5306D2C7, 0x90ABE59F, 0x2ACD5F7B, 0x61566931, 0x5469A550,
+0x9EA61145, 0x1A4F123F, 0x5BF61724, 0xABF926B3, 0x0776D646, 0x918012E3, 0xC52441D6, 0x1C3B5BC3,
+0x70615B29, 0x38637683, 0xF36F2454, 0xDD1B8626, 0x1B009F2B, 0x3DEEDC01, 0x2F0407A4, 0xA78986C6,
+0x57BAB9AE, 0x1CD735C5, 0xDF2E5E21, 0xB837014E, 0x9D108D48, 0x85DFF914, 0x969557E5, 0x6C88ADB8,
+0x4262E3A8, 0xFD484F35, 0x582205C4, 0xB950EDBE, 0x777D6487, 0x0146099D, 0x449CE39D, 0x92EC3842,
+0xAC6E3790, 0x5F8834EE, 0x9DEC75B4, 0xC73EB023, 0x16A1C7E8, 0xED8ECB00, 0x1F2AE889, 0x79D65E27,
+0x84007A04, 0x40D21E87, 0xAE9FC003, 0xD04DFAE6, 0x57517F23, 0xBD3AA00F, 0xE4403F18, 0xBC49F65A,
+0xAE3C3685, 0xB6CEA2DD, 0x0E1DC3C5, 0xFE21CD52, 0x7BC36E46, 0x3547A25E, 0x8F1C563B, 0x23F79E0B,
+0x8A787478, 0xE539ED95, 0x34244A37, 0x7EC781D3, 0x4CB7DE26, 0xF46BF50D, 0xD8F63F18, 0x923B8F48,
+0xC58A5019, 0xF4CAE4E1, 0x58A7733E, 0xE7E61E60, 0xB3DB9886, 0xCE42D0D7, 0x4E4908E3, 0xFDE09C64,
+0x9B9E1631, 0xC647EFCA, 0xEDEF4BA3, 0xE1360168, 0xACFC0A45, 0x0A838CBD, 0x6B448517, 0x406E9D5E,
+0xCC59E946, 0xC3C71D71, 0xCFBFDCB5, 0x513D2522, 0x780BA0DF, 0x0C845086, 0xE0A7504A, 0x35532520,
+0xCA23128D, 0x50673200, 0xB6ACB802, 0xAC755A18, 0x433CAE5F, 0x3D984523, 0x1247F7EF, 0x3B42ADE9,
+0x35F30F0B, 0x3DC917C3, 0xEFD7E964, 0xF4367B31, 0xEF51AF71, 0xC030231D, 0xE867385A, 0x8BB09897,
+0xFAD1C69D, 0x9395DDBD, 0xDBAF2957, 0x91805555, 0xFB16132C, 0xB6E81B2A, 0x12E03229, 0x72DC1A85,
+0xFB0C40D6, 0xA906E828, 0x9AF74048, 0x9972A325, 0x47661EB3, 0xE24914AE, 0xC3DECFFC, 0xBA7E74D6,
+0x811B572A, 0xEEC43FBD, 0x9B1F0D54, 0xAE366732, 0x8D05927C, 0x7DB9B502, 0x084599C2, 0xA029C9CB,
+0xEC9A3B7C, 0x128E8DA8, 0xF9321009, 0xA4D1BC53, 0x0DEDA8D3, 0x05AE2DB6, 0x66FAA4BE, 0x28137BC6,
+0xF3C79F40, 0x4846C9CB, 0xBFD3D87A, 0xA4836AAC, 0x5EF77D3A, 0x03A05A0C, 0x0A0E86F9, 0xE591FB04,
+0x9D8FCCCF, 0xA4BD74F6, 0x462528EE, 0x45C2AB99, 0xD543CBC8, 0x001CA7C0, 0xD93B4B78, 0x3369E1C4,
+0x99147C2B, 0x4A771AD5, 0xB076A4EF, 0x8A4231DF, 0x5A5E85C1, 0xE8223C16, 0xAE3B002B, 0x6E67748B,
+0xFE196878, 0x2507CEA2, 0xE46CEEF1, 0x7CCEB6AE, 0xCB9B1FEA, 0x9FDF5632, 0x67206412, 0x1C597179,
+0x552283C3, 0xF6879960, 0x714C5322, 0x503782C9, 0xAC0B70BD, 0xF9880DD4, 0xD52C24CE, 0x90EE21E2,
+0x99B76320, 0x1EDF97C5, 0x908EFDEB, 0x7316B4BC, 0x6DF71DBA, 0x81223125, 0xD67D805F, 0x2578912D,
+0xB5903B03, 0x7B169823, 0xD54FA357, 0x45DBA797, 0x5A8A1E58, 0xA8A22DFE, 0x36D36424, 0x63458FB1,
+0xDC9BDFBD, 0x08A343EF, 0x709E128E, 0x02BBAC53, 0x1A3B9828, 0x3BEFD2F2, 0x11166DCF, 0x4A7637E5,
+0x7817A25C, 0x1B237169, 0xDDB8FE80, 0x45F498C6, 0x46C9B90A, 0x08D2E3DB, 0x3067D461, 0x5A2730F9,
+0x1EE188B5, 0xA8F554D0, 0x5CD34755, 0xA74BD94F, 0xA15A0340, 0xDF371D32, 0xB6E0C579, 0x7A780079,
+0xED255E53, 0x341D8C57, 0x33C7727B, 0x843BD41E, 0xFA735C16, 0x97A621E8, 0xDA95CEF1, 0xEE0B6B3C,
+0x8D7DF08D, 0x0A5D934C, 0x8C16C0A8, 0x7F6CA9BD, 0x07F8B960, 0x256CF213, 0x20ABD154, 0x0370F8C9,
+0x2FC1FBFB, 0xD887A975, 0xCFF18BCD, 0xD07E32BC, 0x74C65EAF, 0x057C206E, 0x8AE7F25A, 0x78E03DFE,
+0xDF1B885F, 0xED86CC16, 0x6E1D426A, 0xE7CB8CC6, 0x5A7BB30F, 0x1550E81D, 0x2751AF6F, 0xDA75352F,
+0x8329C597, 0x392E4546, 0xF281153C, 0xA6989F5B, 0x88283C85, 0xE7C17027, 0x6420A1B0, 0xFE26597F,
+0x6E75D628, 0xE82E4DD4, 0x35BC8DDB, 0x1ED3F0D8, 0x3526789D, 0x815B6738, 0xD824D7F3, 0x2B796E80,
+0x11AC052A, 0x49E7761B, 0x7CDD82C9, 0xFA707271, 0x4D2CA6E6, 0x52040EFB, 0xB9CF9F69, 0x336993A4,
+0xE48AADCA, 0x9CCA16A8, 0xE00014F2, 0x9463BCA7, 0x187142E6, 0x5D429125, 0xB959F751, 0xEBE48980,
+0x0181025F, 0x2F13C669, 0x9F918749, 0xD2002CB9, 0xA71F82F5, 0x8DB8FB39, 0x1A731304, 0x1E141BE1,
+0x5F075CD6, 0x02471DC3, 0xF26DAC14, 0x7D1059AB, 0xAEB1984C, 0xFA55CA09, 0x63290FAC, 0x2CB2DD62,
+0x4EE2CFFB, 0xEDFDF6F0, 0xD56DE3B7, 0xF1CBE210, 0x163B9235, 0x795F7BB3, 0x600630D2, 0xF039F6EC,
+0x362B9B16, 0xDA692829, 0xEEE2069E, 0x35F90211, 0xC7936C7E, 0x5B452053, 0xB28CBB4A, 0x30B2AA01,
+0xDB9D45EA, 0xBFA89F1D, 0x5E29D221, 0xBF0CCA5D, 0x2C8E6FCD, 0x8867A091, 0x8DF2B598, 0xB95C7084,
+0x9A809E6B, 0xCD95214D, 0xDEDF5671, 0x45859DB7, 0x01573B4D, 0xADD064F1, 0xE2977DCC, 0xF5BD9259,
+0xE953A358, 0x40A2D031, 0x2BC04811, 0xAB43EBA5, 0xCCF6DA30, 0x4B350866, 0x28C382AA, 0x4DA5E58A,
+0x54140D33, 0xDB743AAC, 0x5843ADAD, 0x047B3D4D, 0xE12A1F94, 0xA97B14FE, 0x22E1EBC0, 0x58C4225F,
+0x565FF511, 0xFBB67246, 0xABF88BC0, 0xD8D783DD, 0xCB68F359, 0x5E322B63, 0x90567448, 0x57CE14B4,
+0x09213D45, 0x16615DF7, 0xD9BD3804, 0x1FB63190, 0x1E106BC4, 0xCC4D9998, 0x6EDDCD9E, 0x771D4241,
+0x5F241427, 0xAAEA9784, 0x531DBA25, 0x81DBD2E3, 0x3747C22B, 0xBF5538DD, 0x0807A0CC, 0x40BF3101,
+0x23C8B69B, 0xBFFB1F57, 0xF42F6C7D, 0xF30CFDBB, 0x4FA56DA4, 0x9D25DC6E, 0x1C255501, 0x0F233EC1,
+0x1F1BA975, 0xB4DFB203, 0x51385131, 0x420257B0, 0x7395658A, 0xD4D0F255, 0xD03C0D2C, 0x39657106,
+0xAED6584E, 0xE7CCA2C0, 0x32DD8F5C, 0x76B3FE9B, 0x1E1E002A, 0x5090CA56, 0x73C4D265, 0xB231E635,
+0x985AA808, 0xCD7CE74E, 0x1C0E1F4A, 0x798CB94F, 0x457A8722, 0x94D78DD1, 0x8CA892A2, 0xC4658FC8,
+0x17ABDDBE, 0x24F63C26, 0x80E3311B, 0xC4C8809B, 0xA63026C5, 0x22772D61, 0x491A32E8, 0x2AEB190B,
+0x75051374, 0x5B523240, 0xBB8903FD, 0x426CE052, 0x5B377003, 0x827E2306, 0xFA365B60, 0x4D05BE5A,
+0x9CDDE0CF, 0x2FF754F9, 0xF47CF6BD, 0xAF34EC01, 0xD9F69F0D, 0xDB83A0DF, 0xE8763C77, 0xFE01850F,
+0x903B02EA, 0xE3C07782, 0xB0D4D782, 0x1D577FA5, 0x432C115F, 0x48A0CCEC, 0x9B0CC1CA, 0x736E2518,
+0xC4EDAE1F, 0x231BD541, 0xC23B22FA, 0xB1DBBFE2, 0xD0F4880D, 0xA85AB310, 0xDBD9E203, 0x1063D154,
+0x2088F7C9, 0x4C3BA788, 0x1E359414, 0x4FBFED62, 0xD6C4ABAF, 0xC89EBF08, 0xF855D78B, 0x9CD72AB8,
+0xED29DA72, 0x464DF978, 0x11469CD4, 0x3F9A857E, 0x653EB729, 0x953B03CF, 0x8309BF75, 0x98FE169F,
+0x901B56B8, 0x596B402A, 0x0FB5609E, 0xBA3B18D6, 0x3291D958, 0x49C2F07D, 0x05ED5411, 0xF0835886,
+0x4E0BE754, 0x5A97D44A, 0x1E9336A3, 0x6DBBBC8D, 0xD7E62213, 0x1AD2071A, 0xF293C472, 0x9E2BAAFE,
+0x911B54FE, 0x83741FDF, 0x258B6FD6, 0x3ED2CC32, 0x527BAEF6, 0x02620899, 0xF5BA1EAE, 0x1EB19794,
+0xD839F18F, 0x7C05CDAB, 0x08192386, 0x4FB356D2, 0x3317F439, 0x234B6FDA, 0x4A98E92B, 0xC5312F5D,
+0x354026F1, 0x29E48815, 0xE68BDC2D, 0xEC3D7A3F, 0x6E776A26, 0x548B979D, 0xAF2BA007, 0xD76B2792,
+0xC0FEAA37, 0x2C870A0C, 0x24B59D4C, 0x79B64D31, 0xADE6895E, 0x2977D74D, 0x2CCC8B4E, 0x58A58BFB,
+0xDA2B9A2A, 0x0B7FCB07, 0xC3CA2430, 0x370E3C76, 0x702923E5, 0x7B34B0D4, 0xA779EF6B, 0xB700971D,
+0x8AEE42E6, 0x110AE38C, 0x52EAC987, 0xC41D0535, 0xB480A37A, 0xB58306A5, 0xA3247872, 0xE19F14F8,
+0x5945A3E1, 0x3C738C82, 0x413528E9, 0xDFA8E7EB, 0x460112B2, 0xAC18C86C, 0x76A37785, 0x399F5591,
+0xE43B0F7A, 0xAF398625, 0xDBF23CF7, 0xBB717F13, 0x1BEA38C5, 0x4C7069EE, 0x236ACCF1, 0x3DDDC7FE,
+0x25680582, 0xE704455A, 0xCEC1A123, 0x405FABDB, 0x08AA3E93, 0x01815BFC, 0xBC8ADA58, 0xE7B8A047,
+0xD9576FA0, 0x9B44A905, 0xD6144CA4, 0x6A465113, 0x09DA316E, 0x2819569C, 0x4EFB4DC1, 0x27CAEC36,
+0x5E5CDFFD, 0x63F4AF25, 0x1E2911C4, 0x191FDDDD, 0xB67CBBEF, 0xC9808041, 0x5B6A14E3, 0x48E1D33F,
+0xE810DD37, 0x17D55B63, 0x192570C1, 0x024B7572, 0x99C1B2D2, 0x66EE3596, 0xA749E6EF, 0xB8067BEB,
+0x91777DD0, 0x9806B7AF, 0xC400BBBD, 0xB95E636C, 0x33F83070, 0xA68D5F8A, 0x16118AD9, 0x9CB0DB17,
+0x5DC54EF3, 0x32C6BAB8, 0xA14EDA52, 0xDC7616B9, 0x96ED001E, 0x9CB2251D, 0x051C2EA8, 0x8CCC1B21,
+0x6C7F80AD, 0xF52813F3, 0xE0405C8B, 0x8715D214, 0xD5331C09, 0xA5175ECE, 0x9C6D38D8, 0x3104829F,
+0x9A40A84C, 0xE59E6EE0, 0x4A9F605C, 0x50417392, 0xD65F907F, 0xD4EA6984, 0x7798329E, 0xA06BF7EE,
+0x320DA4DB, 0x6F9B7CEF, 0xAABF687B, 0x22BFD6E9, 0xF7B56650, 0x2F3E15E8, 0xA5478006, 0xA1DEEE83,
+0x47D94F0B, 0x630B1A7E, 0x0A70713D, 0xFD1105A6, 0xE7D00451, 0x1927BA1C, 0x9DEAFAB8, 0x4A42C350,
+0x7D82C1E1, 0xC23BB388, 0x5C183227, 0xF88EB157, 0xAD8196C7, 0xEB63DE01, 0x4410F784, 0xFFF6BB75,
+0xBB969711, 0x9EDF8440, 0x2FE1F554, 0x59255980, 0x9EB68D98, 0xE4917435, 0x2E274D73, 0xCF3D7CC5,
+0x1E055968, 0x28EA45B3, 0x14633705, 0xCD6BC050, 0x1A07F869, 0x8EEEB0A4, 0x94F349A4, 0xBC715412,
+0x9C54F88F, 0x9D5640B8, 0x78048B64, 0x036D5570, 0xCCB27FBF, 0xC0245D85, 0xC7DE5290, 0xA245F699,
+0xD116DFA1, 0xBDA9F253, 0xBF7DEB0F, 0x8C72A3DB, 0xECB203C6, 0xB28FC12A, 0xFC1BCB14, 0xE3377A92,
+0x36282BF8, 0xBC747A96, 0x7B8D9818, 0x6F8FBD70, 0xC4A4BB64, 0xF093848B, 0x7911963F, 0x2F8E0683,
+0xBE6EA219, 0xA8A8C275, 0x944F2926, 0x44B10CB2, 0x1BAD1812, 0x5E759C91, 0x2F8C6A5B, 0x50E8B65B,
+0x09414286, 0xF78BE653, 0x3BDBFBAD, 0x78BA42EE, 0xCC3713DC, 0x658A231B, 0xB171E521, 0xA27B67E6,
+0xCA50E772, 0x0A75FE6B, 0xB2081AA9, 0x9208B711, 0x223FFACC, 0xA727F9E3, 0x472CE52F, 0x4E0A1606,
+0x4BF22F19, 0x9323EEB8, 0xAF11DEC8, 0x7A5858E9, 0x0ACAE6F2, 0x4A5DDC2E, 0x7AA2CAF8, 0xB5ED63DC,
+0x088D75AE, 0xA7FFC71A, 0x00CFD57A, 0x3D1143B4, 0x9C97CF09, 0x8997E787, 0xD064B73E, 0xCA768D40,
+0xFE3B4269, 0xF950350C, 0x12DF3FD8, 0xE69FDA48, 0xE9C3DD9D, 0xBD358747, 0x2F7E0C0D, 0x76290337,
+0x09980927, 0x2251E875, 0xB29E49CC, 0xE11966D3, 0xDAC086D0, 0x25C34BED, 0x95C4D71E, 0x126FE603,
+0x738E5672, 0x520E68B7, 0x7C262EFB, 0xDD7E8653, 0x745819C6, 0xE2740F38, 0x826586DE, 0xD60593A7,
+0x887B723F, 0x77E5F0F1, 0xD911E391, 0x56F26BA4, 0xCF5723A7, 0x8BA0DABA, 0xD64FD67E, 0x51C7444B,
+0x8DD46C68, 0x35F3C5DE, 0x35B34711, 0x65CE74AA, 0x07A0998D, 0xBAE9D00E, 0x663E546D, 0xF4DF432E,
+0xD062660E, 0x9F51B8AC, 0xE6494AA0, 0x07F3479E, 0xEBF8A820, 0xD3B6B417, 0x0E1E932D, 0xFA7EADF1,
+0xEC021C1F, 0x7279661F, 0xB0781608, 0x160BB242, 0x00DFD492, 0x2291DDB6, 0x5C695845, 0x07146EA0,
+0x20451251, 0xC3ADD82F, 0x3495FF81, 0x67EABEF8, 0xD21DEDDB, 0x4086244E, 0xA453E553, 0x84BD6C9C,
+0xBCCFC06E, 0xE973C2CC, 0xC1643FDE, 0x7B6B343B, 0xA072D08F, 0x97E85DE0, 0x53884E4B, 0x06A550F5,
+0xE081BE8B, 0xAC7EC52C, 0xB57898E9, 0x0475E43F, 0x8834B86A, 0x1753128A, 0x113BAA9F, 0x49BD7BB9,
+0xB6A7B513, 0xE0FC8B41, 0x4B3B36B5, 0x2CC73131, 0x6FBEAF3C, 0x78527778, 0x29D1EEE3, 0x0080DD40,
+0xC6B0FBE6, 0xAF39AEAC, 0x868383C1, 0xCFFAF536, 0x2ADB800E, 0x3BCE897F, 0xA96B4CE9, 0x134B541A,
+0xACA73E34, 0xC2DFABA8, 0x1B267132, 0xDB41F336, 0xA4283A13, 0xFC473D5D, 0x76ABF4D8, 0x49ED0408,
+0x461A36FB, 0x76DB9495, 0x8ED1841E, 0x058237BB, 0x7D35FB6C, 0xE6D8FE9D, 0xEDF2BD73, 0x778CD38E,
+0x208537C4, 0xD0DFD655, 0x28404FAA, 0x319084A7, 0x91CE4AF5, 0x5522453D, 0x6F1DAA5B, 0xA9D07AB0,
+0x4FA56E9B, 0xB50C86B2, 0x84928FB5, 0x5166A606, 0x890008F6, 0x6373A0EB, 0x04178B77, 0x733445EC,
+0x832FCCC4, 0xD7C614BC, 0x0800EAE3, 0xEE315D8E, 0x136C36B5, 0xBF182D59, 0x3B189C49, 0x57D0E5E7,
+0xEAC1CABD, 0x706C25EE, 0x5ED50E26, 0xFC138279, 0xF3200ADA, 0x3C354A40, 0x5FBD2EDF, 0xD44DDF49,
+0xCF6E6298, 0xCE4A1EE5, 0x5CDAB27B, 0xA65D9F43, 0xC587475F, 0x1D2AEB5A, 0x00D0E555, 0x4197DC79,
+0x15AEE763, 0xE8D22DBF, 0x06D73F29, 0x5E866F08, 0x96A46EB5, 0x490AD94C, 0xB8C53537, 0x33AB8C60,
+0x9D4F343C, 0x99C7EDD4, 0x90067635, 0x1FD13EB1, 0x11A3070A, 0xA18CABCD, 0xAD83E4BB, 0x5634F44B,
+0xDD4AF203, 0xE2F90509, 0x255BE1FE, 0xE3A2A599, 0xAD88C9FC, 0x74B68594, 0x392B345B, 0x7CB113F0,
+0x3F4CEF8B, 0x4580AC47, 0xBE73E970, 0xDDE338B1, 0x902993C8, 0x1CB32D89, 0x4353D73B, 0xB1964D71,
+0x725958B9, 0x06027134, 0x8DC249B8, 0x51CC9B19, 0x6A45F418, 0x0AFE2FAE, 0x8737665C, 0x8D505EC3,
+0xA8A35A2D, 0xABAE360A, 0x96E13F26, 0x57EDB589, 0x5396BE0C, 0x8307A1C8, 0x892C1299, 0x678B2757,
+0xD2E7FAA8, 0x886D848F, 0xD46F0D0C, 0x9483C604, 0xD540C86A, 0x785D125B, 0xB75498F4, 0xCF3C28FC,
+0x8558A41A, 0xE1A38766, 0x1163CA7B, 0x62D91DCC, 0xD6710BBA, 0x7FF292FE, 0xF670B99D, 0xC4EB0FF9,
+0x608541CF, 0xBE481A42, 0xFEA57948, 0x3E17E0E8, 0x1419B2A7, 0xF36CA7F0, 0xE2DBAF40, 0x897F91AE,
+0xCE752112, 0xC16EBC60, 0x5E7C9183, 0x4297C99D, 0x9C65189C, 0x6389CB90, 0x48596E3E, 0x26354272,
+0x86E64F59, 0x68872F61, 0x9959D499, 0x90AC991E, 0xE09AF2AC, 0x3AF2AD73, 0x8DD817F9, 0x1F411C8E,
+0xFE2BDE52, 0xFA524E64, 0xB8BD03EF, 0xB9424289, 0x68AFA6B3, 0x24004133, 0x609937F8, 0x57249A1F,
+0x620EEB81, 0x2084C171, 0x7080E9D7, 0x243C6100, 0x40D84A72, 0x1D42E546, 0xE1B2E058, 0x54A3F41F,
+0x2988C23C, 0x66420531, 0xED110616, 0x2DFE17FC, 0x52C79DCF, 0xF12FDCC9, 0x30258B30, 0x8464ECA7,
+0x25CEC953, 0x5671EBFA, 0xAE9A0FC2, 0xC81CC553, 0xAFEB2D0E, 0xFF99C74B, 0xD1FBE83D, 0x3C8F248C,
+0xC6668F8A, 0x8FB3469E, 0x2FDF58A8, 0x18E0BB24, 0xDE9E9224, 0xA5181837, 0x58C6B24E, 0xC219788B,
+0x407E0BCC, 0x6E9A1A36, 0x0640A69D, 0x9E05B98B, 0x7119B857, 0x06BC492F, 0xCF4BD663, 0x3F01F459,
+0xE47184C5, 0x6723A6A0, 0xC43D32D7, 0x05823DFB, 0xDC88A0FA, 0x4637FF1C, 0x400817BE, 0x215F94B9,
+0x9CC64365, 0x10D0F6A5, 0x94E0AE55, 0xD3A96D70, 0x2343AEC3, 0xCCDBA067, 0xF3FA1C69, 0x386D7488,
+0x84C0AA8A, 0x60B6D9D6, 0xD7C9489B, 0x5B72024B, 0x60B4B0FF, 0x4542B28B, 0x177CE8D4, 0xFCE09418,
+0xDC419713, 0x37D8B114, 0x7E935612, 0x2DDE044C, 0xFD3F1D06, 0xED6D20D0, 0x996FD8D4, 0x8400A791,
+0x12B9238C, 0xDCC702EA, 0x21E1E56C, 0x485450A8, 0xF72CAA2D, 0x684EE7E9, 0x86690BA9, 0xE3BD4A32,
+0xD89F54C8, 0x705770A2, 0x4789FDFD, 0x801774D0, 0x6C9EC4D1, 0xB954BB4B, 0x040F3BD9, 0xBFFC330F,
+0x83602770, 0xAEE61DC6, 0x307DF37B, 0xEBBECA40, 0x30F408AF, 0x0B9D0169, 0x75C4DBBB, 0x738D4C66,
+0x4CBDE928, 0xAC203C0D, 0x2B639C8E, 0x47A0691E, 0x45FC8CD2, 0xFEE7A162, 0x60C7E33C, 0x1252D768,
+0xDE6C4E42, 0x43A37EC0, 0x940677B2, 0xD57CFD92, 0x98637BC4, 0x819C7510, 0x4EE18F17, 0x935638BE,
+0x44805C04, 0x8189237F, 0xD4D5A4CF, 0xB6CA5DEA, 0x9ACC1313, 0x92B1A7C9, 0x25805E16, 0x0BFE21F5,
+0xA5B58AED, 0x172DC083, 0x05FBE009, 0x16973CE9, 0x74F3E4D7, 0x8C3CADFB, 0x510642FD, 0xDA7517F1,
+0x8189ADAB, 0x465308DF, 0x72E5C187, 0xD93476F2, 0xE085F3D7, 0x0172412F, 0x6D90CFB0, 0xC34BE906,
+0xD70B6FA7, 0x24AAAB5A, 0xD7459AC1, 0x8F0BBEAB, 0xA36B8942, 0x59515A3A, 0xE09FC341, 0x9ADCAF3F,
+0x14A2087D, 0x3EDAAB16, 0x42A72258, 0x4C43B2E5, 0x4E1CBF12, 0x6184380F, 0x93C30380, 0x7E3E4997,
+0x42D0B02B, 0xA1B96AFE, 0x39AD2768, 0x4DA350B6, 0x0DAA4261, 0x805E9A4B, 0x1DB30695, 0xCF15275B,
+0x8E6E91CE, 0x359B4F53, 0x2659D5BF, 0xFD8A030B, 0x29C859F2, 0xD87E7519, 0x4D031BEF, 0xF8C2739B,
+0x244D88CD, 0x2CDD5CB8, 0x22FCBB0B, 0x4C8CF795, 0xA38AD36C, 0xA986FF2B, 0x6FE32174, 0x9B504971,
+0x7C9ABEEA, 0xE1628062, 0x0085C1DB, 0x1490A721, 0x2E419FE1, 0x839FC4F7, 0x02B3096F, 0x6C5A22E8,
+0xB5E31707, 0x32B0381A, 0x7D29CEA9, 0xC7A9DE9D, 0x8376992D, 0x047FD196, 0xCC57B9C6, 0xBDDA165D,
+0xF99B5782, 0xAFE69DC0, 0x6342C0CE, 0x097D11A8, 0x2AF96394, 0x06CBED2E, 0x384A4CD1, 0x9359E263,
+0xC0873846, 0xAE9B2B9F, 0x4A961BE5, 0xC90CF708, 0xECFD3FEF, 0x0ECD4ED2, 0xEEAF9B70, 0x40D988BE,
+0x536CB6F5, 0x9E892168, 0x0043B9F7, 0x1302BAFF, 0xA266D832, 0x8066EE79, 0x42777375, 0xBD34EA72,
+0xDDD21CA0, 0x41A43EBD, 0xEABBB10B, 0x77B5C283, 0xEA8AB5D9, 0xBB1A72AC, 0x9CACE625, 0xEFCE69B1,
+0x5A57D5A2, 0x1696E2A2, 0x38E038D8, 0x9858B08C, 0x8DCF68F1, 0x4FABE994, 0xD05C4870, 0x95FD2C01,
+0xF6221D12, 0x3989317F, 0x297EA2DB, 0x8E2A615F, 0x21F51F7D, 0xFB92E4E7, 0xBA1D06D9, 0x54F0E408,
+0x99FCD287, 0xE4A1E3C4, 0x8A465FA3, 0x600A4FD0, 0x5504B310, 0x20DA4308, 0x440109B6, 0xA8618D82,
+0xB0A615B1, 0x9326E6A4, 0x162A82C6, 0xF62A20EA, 0x9B9B57A1, 0x6140DDA6, 0x32C62576, 0xCD6C8ACC,
+0xC3099ED3, 0x2C6E0DF7, 0x9C23AE1D, 0x763E0963, 0xCF5609EC, 0xE0C0310E, 0xD800C182, 0xE4AB6AC4,
+0x7BCB6E50, 0xF40A9073, 0xA701416F, 0xA9F0782E, 0xF4DDD09E, 0x05F58494, 0xC68F5FD8, 0xC6150905,
+0x31F49A5A, 0x1FA5CE62, 0xCBECF66E, 0x58D8A2B6, 0x6841AFA1, 0x3C76BC75, 0x5078E0BB, 0x38A1CEAB,
+0xB3F4EC22, 0x2C58F70A, 0x2BB01722, 0xC62FAFCC, 0xD6CCBC98, 0x046230C4, 0x9D198272, 0x2497BAF7,
+0xD3F35D82, 0x9989054B, 0xD1D2A6DF, 0x88BE4E91, 0x336E91E2, 0x6EC7FFCA, 0x221A6C5D, 0xFD0D8D18,
+0x04881F74, 0xE8E64AD5, 0xE49C2394, 0x12AEDD0E, 0x4BF19478, 0xBCAC3DA4, 0xA3AAC1CD, 0x0F0CAC2A,
+0xF0AEEA0D, 0xC4F6C107, 0x72C99725, 0x25216D41, 0x53494038, 0x7CCE9FAE, 0x1D55B667, 0xD8E91C96,
+0x3A16D5B0, 0x27E4120B, 0xA937A23B, 0x82C73C11, 0x76DDD0E3, 0x1FC875CE, 0x9D22C313, 0x2569D57A,
+0x80729AB6, 0xAB04CBDA, 0xF243B77D, 0xF2775F98, 0x94E0B636, 0x17245601, 0x417BC31E, 0x148BF652,
+0x6CC1A53E, 0x2E7E1AA1, 0x63FC8A2D, 0xA1D03D7A, 0x66111E31, 0x83870598, 0x729A7706, 0xE9ADF65F,
+0xE8623916, 0x9B8D90F7, 0x01D6CEA1, 0x18E427A2, 0x456D5CAB, 0x20E47833, 0x6E92BFC3, 0xB6D18CBB,
+0x591DE144, 0x6FF5D1AE, 0xFAA53BA2, 0xDBD40E0F, 0x4EA0B35D, 0x192C5436, 0x95F74257, 0xFE31E7FB,
+0xB5A4CCF7, 0x72BE3D61, 0x77B32A6F, 0x044DC19C, 0x6929E2CB, 0x6224E1D9, 0x8CB20BE8, 0x1C4DE6EC,
+0x5234D67D, 0x726ADCC2, 0xFCF721C0, 0x98C62F66, 0xDC7E0858, 0x7F318DF1, 0x6068E057, 0xBCFB6C4E,
+0x227268B3, 0x2E780863, 0x0A2EDA0A, 0x90F28407, 0x33E8C3E5, 0x976BBCC7, 0x0DD9E986, 0xC62CEC7C,
+0x5B5637FE, 0x7725898B, 0x33F2E48B, 0x9258959A, 0x15C89100, 0x6B5ABA90, 0x30494EFE, 0xB618E544,
+0x4AEF6265, 0x4681597E, 0x1FB35D38, 0x3847BDF1, 0x595A24EB, 0x260B2B9E, 0xCB78241C, 0x29B05F77,
+0x5C01DAEA, 0xDD27F8DB, 0xDBC26451, 0xF5E8A087, 0xC7764B66, 0xDB50B38F, 0x5B013588, 0xD10D6AA6,
+0xBBB81A59, 0x3BBD1DC9, 0x094E6585, 0xB4E0998A, 0x2CBE72DF, 0xBC911F99, 0xB54BC85F, 0xD45449CB,
+0xA225867F, 0x4CAB1BBE, 0x1CD09622, 0xF9D0151D, 0xC4D81FF5, 0x7A4C4EB5, 0x1E4CA7D6, 0x72E0B3C2,
+0x0A8E96C0, 0xD8DBAAEF, 0x83EEB4B6, 0x9000ED11, 0xE9BAAF35, 0x0CF245F1, 0x50987F96, 0xA4F9F9E3,
+0xAE97BF1A, 0x5A318D0C, 0xC88B26D2, 0xCFCF6968, 0x9798017C, 0xDA90593D, 0x4EF820F5, 0x32885283,
+0xF3A907E2, 0x3FF3F171, 0xF4E97F5B, 0x3EE3FC38, 0x8E1FBD03, 0xE1B664FE, 0x03099619, 0xEAFB7268,
+0xDDFB05FE, 0x55DDCF13, 0xB803EA5C, 0x56307E14, 0x0399A5BE, 0xA0981AB0, 0xF465F8B5, 0xF2B7A33D,
+0x273481D6, 0xDF301CC0, 0x939760E3, 0x9D4056B5, 0xAD9CFBE5, 0xF794A902, 0x22C842B6, 0x9937C735,
+0x0C643FC2, 0x2AA5711C, 0x44E176C4, 0xBDF67D6D, 0x1F175BD1, 0x59DE4336, 0x3E176ABB, 0x18AF2F6A,
+0xE07DE549, 0x741C9B7F, 0x3EAE462C, 0xDAFFE905, 0x9D03FBF9, 0xD9CF3CC4, 0x3176C486, 0x70728005,
+0xBB3345EA, 0x66D563E2, 0x46E70C26, 0xF96986BE, 0x96C8A11C, 0x9519BED1, 0x5B5AF688, 0xFE6B50AB,
+0xFAA17D71, 0x7793B70B, 0xA5F3E857, 0x9887A256, 0x8EB9AAAD, 0x6B073BEB, 0x1CE7190A, 0x8D085BB0,
+0xC1027F2C, 0x57543FED, 0xA5E29E33, 0x95AA2D01, 0x5CAFEA35, 0x030FA704, 0xEE15D785, 0xDB465F9D,
+0xAED723A8, 0x44FCE341, 0x2E56D041, 0xB6ADC4D7, 0x6566033B, 0xEFA40C0E, 0xCDABAAC8, 0xB29AF178,
+0xADC04897, 0xC2C0A410, 0x5E52861E, 0xEFDEEAB0, 0xC81C5D63, 0x81DB42DA, 0x649D9256, 0xC3B9D167,
+0x628D746E, 0x0DCC4260, 0xEB019AA0, 0x443D29DF, 0xBE674E39, 0x1F363666, 0x95CC698D, 0xA4FCA477,
+0x0B07A427, 0x305E2CEB, 0x5CF53D72, 0x69807FE0, 0x431F76A9, 0x69C940FD, 0xDAD45855, 0xFE45E830,
+0x4D125977, 0x66001ED8, 0x823A257B, 0x3F0C3A44, 0x9A4348D0, 0x6993DE60, 0x6A9D1441, 0xF4C1B0F4,
+0xE226525A, 0x6C61417F, 0x5583BE08, 0x814D06F2, 0xC7B798B5, 0x0E1EB586, 0x5561175C, 0x1E773F5C,
+0x33B42E10, 0x8E01EA6A, 0x2B8CB6A7, 0xE9406AC9, 0x17E47B3A, 0xB318B57F, 0x80E6243C, 0xCC2664B8,
+0xC29F410E, 0xFBE46A19, 0x76585FE8, 0x36692550, 0xBA2376CE, 0x60868495, 0xC5B04204, 0x20F9AED4,
+0x80C290DE, 0xEC6772BD, 0x7F4A6944, 0x2237BB50, 0xF1C1202E, 0xBE94803D, 0xECCDC50A, 0x9CB1A0C6,
+0xA9D51F91, 0x1D63C1B7, 0xA8D91F41, 0x3503B1B7, 0xF0EA3F24, 0xA4169A3D, 0xC78094FA, 0x83283256,
+0xD368D006, 0xE8F04BB1, 0xDA464C72, 0xCC825ECB, 0x3F68E6D0, 0x3B86BA80, 0x54442971, 0x3D64EC7B,
+0x2BF37599, 0xD2B44DC5, 0x05D9AA95, 0x35474A05, 0xE229C9D3, 0x324D23EC, 0x57D3CFB9, 0x50D36C55,
+0xC0C260AC, 0x0FDE9A2E, 0x553C0525, 0xC9DD3F96, 0x2901FB13, 0xC1FE1049, 0x0856576F, 0x2B03D148,
+0xB8E0DAC7, 0x7B30CCEF, 0xC17A411B, 0xC3F85634, 0x9BF34AEA, 0x3F1E537A, 0x04D2822E, 0xFE451974,
+0x21C17857, 0x06A12380, 0x8CA813D3, 0xEB43B267, 0x3ABC50F2, 0xF89C151D, 0xAD90E649, 0x29BF9DAA,
+0x220EE5F9, 0x2A9C958E, 0xEA46B810, 0x4EABE040, 0x9ED5984C, 0xB86F5363, 0x2198F2EC, 0x35D1B304,
+0xCA162711, 0x47541841, 0x434A6F44, 0x4335E321, 0xD91350A1, 0xA3AA6EA8, 0x4092F73E, 0xE1060D76,
+0x936DC2A6, 0xCCB469CD, 0xE657E0A2, 0x1C22D386, 0x6E257741, 0x36CAA7F0, 0xEB047722, 0x81900484,
+0xE56B8298, 0x4C6D239D, 0x42A42C03, 0x19FE9996, 0xDCFEE90E, 0xF5E5A5E1, 0x74A71854, 0x340628CD,
+0x3E6FF784, 0x9576CCD1, 0x0569CDB4, 0x32F2DDF7, 0xCB88074F, 0xAA3BF9A3, 0x7BD8D4F6, 0xEF936B1D,
+0xC6BA20C3, 0x689DC8CF, 0x9001193E, 0x3EAD4EE6, 0xFF5AA9CB, 0x09EB6E14, 0x6E974FE4, 0xE62907E8,
+0x4C4B7D0B, 0xF35BF5C5, 0xE3A9A79B, 0xFD2664A1, 0xE4270CA3, 0x6E83C204, 0xE1177CB3, 0x92557F91,
+0x3D1DFBDF, 0xAF92DB4D, 0x145C335C, 0xC5A0D69F, 0x000670D9, 0xC7AFADF3, 0x2CA40635, 0x5CF8CFC7,
+0x84794506, 0x4F8765C0, 0x2C5C6EAB, 0x2900EF63, 0x8F9FBAC5, 0x79365566, 0xE82A0807, 0xA91E14A8,
+0xF77BD412, 0x1D95D2CF, 0x2B1C817B, 0xEE176276, 0x8D79AFC6, 0x11C2C233, 0xBC6C5A31, 0x8FD42890,
+0xA64B3C12, 0xA65AE686, 0x3E510FB2, 0x8E0E5880, 0xFEA1A686, 0x7CAF994D, 0xB76A677A, 0x8F31B2A6,
+0xB73A55C0, 0x50D9EBF6, 0x2F36417F, 0xCD37202A, 0x445ED92E, 0xD50145F5, 0x577F7E8B, 0x73D49B08,
+0xA12EC4D4, 0x5CE30ADC, 0xED4E385A, 0x300B4B33, 0x884CD855, 0x4EBDE33B, 0x339B1E70, 0xF3410A71,
+0xFC512A14, 0x251EEB2A, 0xC4227A6A, 0x07709E86, 0x6CF34EB1, 0xCD8CBBEA, 0x598F9461, 0x68A671A7,
+0xAAB92FCB, 0x39ED28A2, 0x4ADE12C4, 0x874608D2, 0x327DA133, 0xE1E8DCD9, 0xC0932E22, 0xEFE43718,
+0x9AC213C2, 0x867426B4, 0x115020D0, 0x445CEAC9, 0x2263CDD6, 0xFB144C9F, 0x268B3B2A, 0x518E2A6A,
+0x8B96AF5D, 0x6512C1D1, 0x6F7DD1F7, 0x89459470, 0xAA71D778, 0x9CABCC6E, 0xA35CA55A, 0xD81896FA,
+0x78ADD6CE, 0x94FA4E66, 0x05BD512F, 0x456965BE, 0xE62CF318, 0x5A2B9B68, 0xC01EB83D, 0x1468ACD0,
+0xD37FCE0B, 0x09195C9C, 0xE00F82AE, 0xE1B37029, 0x99D5D9FA, 0xB71EF1DD, 0x759AEC28, 0x27403542,
+0x583651E4, 0xEA4F8CFF, 0xF769E7AA, 0x335D0971, 0x0E9E4D36, 0x5F7DAF56, 0xD39A1F45, 0x7E19026F,
+0x3EDE2421, 0x47F0CDFF, 0x81E4EC01, 0x4B05B212, 0x24BC5E7D, 0x942261C3, 0xF3030EF5, 0x246F3A10,
+0xF2A5B49B, 0xDC0A48A2, 0x4A96B51B, 0x1634A266, 0xC721C822, 0x5665EF2D, 0x19EBE1AD, 0xC30F405E,
+0xDA8E3F7B, 0x9034B1BF, 0x1E459B8E, 0x137A831A, 0xAB2FE30B, 0xDA07AB3F, 0xC4655F35, 0xCC97CFCB,
+0xF3FF956E, 0x06789DF0, 0x20ECDCAF, 0x5A8B93C2, 0x8ED98865, 0x6A4D5F03, 0x2DF7053C, 0xD7710D39,
+0x237B8DD3, 0xC009CC7A, 0xB49DBBCE, 0x085C3863, 0xF46890AE, 0xD0F77DB2, 0xA2CABF3B, 0x42F0EB93,
+0x435BE7C2, 0x7902A384, 0xBA5EF34C, 0xE4A1C3C7, 0x1585D612, 0x6FDF8B1E, 0xFEA1F243, 0x557A2C12,
+0x95F9757B, 0xC16854F4, 0xDA19CDEE, 0x7F05B68B, 0x7072B493, 0x2B4AE4B1, 0x2158079B, 0xA7838448,
+0x6DAA90FF, 0x7741E562, 0xD90A413D, 0x9AB7159D, 0xD2E662F3, 0x1BB2E236, 0x8B55047E, 0x2C6126E4,
+0xE3CE05B4, 0xA91D7FE4, 0x8E03E666, 0xEF082A33, 0x11B2E0BD, 0x5B71C158, 0x91F1B928, 0xE2937553,
+0x3ABF7E6A, 0xAF8B277F, 0xBC97F059, 0x9AE27333, 0x14E79FFE, 0xDAFD7C1F, 0xC0725EA9, 0x43CA892C,
+0x363F7567, 0x4420DF1A, 0x2075173A, 0xCF058234, 0xFBCFC625, 0x707913FD, 0xBF28DA9F, 0x004D9A18,
+0x0F610A4C, 0x55B3C083, 0xB0547B01, 0xEE856814, 0x49942DB4, 0x067E11DB, 0x83C4DADC, 0xBF53B001,
+0x55990980, 0xA74469D2, 0xB6C0E297, 0x0D30001B, 0x93A183C3, 0x42B58687, 0x988A908D, 0x1DFB8EF9,
+0x02C02A5B, 0x0513E38F, 0x04E54DCD, 0xA7C968D3, 0xA0889D1A, 0x70DD3F8C, 0x834CEF52, 0x712DD25A,
+0x63D29752, 0xAB7FEBFF, 0x60D51343, 0x7203D06F, 0xB4C83E86, 0x034633E3, 0xE8EB5371, 0xD8CE51AA,
+0x85D959BF, 0xD142C8D1, 0x78F19B15, 0x248C84B8, 0xB5EB5F6D, 0xD181D433, 0x1F2AE64E, 0x3C74951A,
+0xA0F6E4A0, 0x59219AAF, 0x24A83F4B, 0x6462809D, 0x5E721FAA, 0x9EA7274B, 0xD0281E37, 0xDB9C7647,
+0xAB0639C4, 0x7600082A, 0xF7CFC176, 0xB4FD6A1A, 0x85CEF1D8, 0x6E56C678, 0xDAD87FA6, 0x8C998420,
+0x27745D52, 0x9242F21E, 0xB1F7E08F, 0x5DC2A96F, 0xB57D2AD3, 0x3D346327, 0xDE72FB46, 0x2C6846E7,
+0xD8895053, 0xBA37B645, 0x3D961267, 0x46A34807, 0xB798C883, 0x4F073ED7, 0xC451848B, 0x523780FF,
+0xE46DB90A, 0x63A2C65D, 0xA2D7D963, 0xF57FB5DF, 0x5B1A4FC2, 0xB6FCC125, 0x97F53D01, 0xFBAEF07A,
+0xB5243B37, 0x42AD355B, 0x6E0F499B, 0x10F8BFA6, 0xF6353404, 0x7450B8DD, 0x23A337C6, 0x5FCE5BFB,
+0x12A78997, 0xA587F4D3, 0x7A49B1C6, 0x5C0DAA51, 0x63543517, 0x901A8021, 0xDC2AF8F2, 0x00F065C8,
+0x4BDC9168, 0x191B48E0, 0x15F12846, 0xA4D3A265, 0xBB4B7D13, 0x98E48B74, 0x7613CB34, 0x8D9910F1,
+0xF0BFF94A, 0xCF8D7D81, 0x05F5BD29, 0xEB7908F5, 0x64543A79, 0xC5FF6552, 0x8B71B9E8, 0x2DE07657,
+0x6BF664FD, 0xA8F84807, 0x3AC9C89D, 0xF51E3039, 0xD4F1F0AB, 0xF2E2CE5A, 0x85EA9DA4, 0x2D68CD92,
+0x413C1562, 0x18D083C9, 0xE0BE77B4, 0xB00BE01A, 0x12F850ED, 0x7CA351AB, 0x09DD2C74, 0x6B7DC883,
+0xAAD05C6F, 0xDAEA890A, 0x90198F7D, 0x1F6F138B, 0xADB5AAAD, 0xBACB4C53, 0xE86DB43B, 0x0C1D8A49,
+0xFBAD0894, 0xC056F061, 0xF73A5F2B, 0x0AC12F18, 0x450AE9BA, 0xC5BD0323, 0x408D0F29, 0xFDF01EFE,
+0x96220F3B, 0x850E662C, 0xB0A4234D, 0x2D8CA5AE, 0xF2989418, 0xF018217F, 0xABD32DA0, 0xF474DDCF,
+0x9C85388E, 0xC7A92DD7, 0x9CD34586, 0x15D6DD8C, 0x4A55458C, 0x8767AEF1, 0xB176360D, 0x4DEA8296,
+0x6ED3D6A5, 0x65ABBBF0, 0x7890AFDE, 0xDF15B3DD, 0x3851192E, 0x4B2393FE, 0x7D27BF2A, 0x00945982,
+0xE9101FCD, 0xEA8BF272, 0x81B42EFC, 0x26944F8C, 0xCF378559, 0xC78DB3B2, 0xDDB37859, 0x3137B566,
+0x38AAE5E4, 0x27C2FBC8, 0xE5A319F3, 0x8701B7D2, 0x0B114711, 0xA5E183EC, 0x09C0AE8A, 0x9FF634E1,
+0x816B2689, 0x0F35E446, 0x682ADAB5, 0x1119DA67, 0x5DD9A4AD, 0x99702425, 0xA8AF823C, 0xD596B4A8,
+0x13A4C165, 0xE35A758A, 0x0EB161F3, 0x5A5FF277, 0x00A1F951, 0x45A92D8A, 0x98358A98, 0xCB9E53B7,
+0xA7A0B755, 0xD0130777, 0x30B125B7, 0x1F8155BB, 0xA1D0112A, 0x7CA84FEC, 0x8842B759, 0xD8FD1AF6,
+0x8C542184, 0xB3683620, 0xE4710A35, 0x98A16FE7, 0x4958CDAC, 0xBE10E5C6, 0x6C9D5E2C, 0xA7C4B13A,
+0xD794AEE8, 0x64386625, 0xB70ED7D6, 0x0A723771, 0x2F0763F8, 0x870BA366, 0x2ED90258, 0x33F9ED4C,
+0x4B28DE47, 0xC59F4206, 0x0B30C039, 0x90D69DF5, 0x846E3CC9, 0xDB754D27, 0x36506EC0, 0x0C565D51,
+0xDBB2BF8F, 0xC3EB6F69, 0x65B09B68, 0x40D1FB30, 0xAE48815F, 0xDA36B18D, 0xDBF99EAA, 0xBFD6DE4D,
+0x21ED536B, 0x09D2B55E, 0x00C74892, 0x04E06FB6, 0x30D30505, 0xF10C9F73, 0x4E5E22DA, 0x84A5E215,
+0xAFF6ECE7, 0xD2F2D7AF, 0x44A630A4, 0x93B2BA6A, 0xEB7BE95C, 0xE9B07474, 0x448C883A, 0x84DC877D,
+0x11EAE566, 0x93EE686D, 0xE2BEEE67, 0x5E8577A7, 0x72BD4BC9, 0x51E9B291, 0xCF03BEEC, 0x54E0348B,
+0x0C37BDB0, 0xD7F71F5F, 0xC3B46D8A, 0x7D19F098, 0x5B600BB3, 0x50D0D7AD, 0xE1986C51, 0xF32AB4DF,
+0x871908BD, 0x19C910F4, 0x70B457D3, 0x8A0E5EBD, 0x4A3BC2BF, 0x1F7FF8C8, 0xB05A857D, 0x9CF8DE6C,
+0x710F51CF, 0xEF119A89, 0x3E56279A, 0x47151ACD, 0x7F784DD7, 0x548DC5C5, 0xBDB0960B, 0x52B46012,
+0x71E12573, 0xE4B11E9B, 0xF5102F4F, 0x9CACA9A2, 0x5E476E41, 0xD9F83A7D, 0xD7361116, 0x258AFFF9,
+0x259EA8D0, 0x118A79CB, 0xD31E76CE, 0x88B4AF5A, 0xB054C298, 0x49DB79BC, 0xDA66581C, 0x59155E71,
+0x3BED4E12, 0x83E3A4CE, 0xD5BDB165, 0x781EA8ED, 0xD4AB7BD4, 0x7959CEE7, 0xCD16C667, 0x0A6CD111,
+0x71D29F6C, 0x40420FF3, 0x3739D590, 0x17D3ECA6, 0x422D8F32, 0x33C08B59, 0x6E603C13, 0x660605DA,
+0x0322A32E, 0xE247A112, 0xC02282EA, 0xD80422FA, 0x18DA6B52, 0x598D3544, 0xE40585F6, 0x9CD3C8D0,
+0xC0BE73DB, 0xF875409C, 0x0A0A5D95, 0x7DC94F5F, 0xFACC6275, 0x624F7C21, 0x65728762, 0xC2D6B245,
+0x7B8AD3E1, 0xCABE997A, 0x694DE494, 0x105281E3, 0xE32A1564, 0x24A806EC, 0x118CB6D5, 0x99BF52B1,
+0xA96BDAAA, 0x26FE1215, 0x407FDF16, 0xDAB584F7, 0x1B3C383A, 0x5053DDFD, 0x8C1D7159, 0x5BF5C9FE,
+0x95857985, 0x436E5165, 0xABA01405, 0x16668A20, 0x52F9654F, 0x7C010D1B, 0x83AF9BA6, 0xFB3EF57E,
+0x338BF567, 0x5544D0CB, 0xC67299B2, 0x4D87BEDB, 0xA37A9D1D, 0xD66654C3, 0x1F0CC2D9, 0x08A08957,
+0x53F2119D, 0x07215109, 0x4D2B72AF, 0x099C646D, 0xD5F429A4, 0x06466B8E, 0xDB9864E7, 0x96DFFA6D,
+0x77AF81DC, 0xDF4DDFB7, 0x0285761C, 0x1CAD869B, 0x745AEFDE, 0x0667B350, 0xAFACE895, 0xDC5670CF,
+0xAE5F1D34, 0xA8DE1270, 0x611EF4F5, 0x8F3F661C, 0x5D6AC752, 0x3326830F, 0xE2A62DCE, 0x9EB5C771,
+0x439343A3, 0xF5E2C87E, 0xCED1C7D9, 0x4957C41E, 0xA7C58239, 0xCCFE5144, 0xCE0A54AA, 0x41B5724F,
+0x3F9C6567, 0xC14C12C4, 0x77AEC102, 0xC9417C89, 0x636E16CC, 0xA35728A8, 0xDD6390F7, 0x8D52D29D,
+0x94C89468, 0xD7AA2C5A, 0xAC40442A, 0x89100A75, 0xD74AC5C4, 0xF20E3A18, 0xA4331E57, 0x497FB441,
+0x375233B8, 0xD8A6B084, 0xF7F5242F, 0xB6534DCA, 0xAC019211, 0xDDDD594C, 0xCB04C044, 0xFFFA3079,
+0x691BFD6A, 0x76B39697, 0x15DF3CC5, 0xF08987D0, 0x6E29499E, 0x5A98E16A, 0x32724180, 0xF933A4E0,
+0x7F4F938F, 0xE7773840, 0x9BFB3425, 0x45EDA4CE, 0x8041BB7F, 0xBA4F8835, 0x5E065039, 0x5B457B7F,
+0x11293E90, 0xC7429671, 0xD07C9854, 0xB2201A50, 0x53A9927B, 0xEE75CD7F, 0x3E2D6AC8, 0x5D7F4DAE,
+0xE3283C08, 0x400BBBCB, 0xAB52B099, 0x7A0FA45A, 0x461CF37D, 0x3C196B52, 0x0DA90431, 0xD335AA0E,
+0xB7EA8605, 0x2ED6093D, 0x7E36C994, 0x134175B2, 0xE7165CCB, 0x9A6275C8, 0x3AC62BC2, 0xE92B708B,
+0x4B54A61D, 0xA36387AE, 0xAC32B431, 0x0895D5D3, 0x3EAA0FF2, 0x8AFC7CB6, 0x5B5C5898, 0x79D05134,
+0xDC8DD681, 0xEC4198E2, 0x4B57AA57, 0x9FDE3227, 0x765F46FD, 0x17B9BBFD, 0x9546318A, 0x520D5C5F,
+0xCD1F2641, 0x3F5A5040, 0xB789C7D7, 0x9AD26F05, 0x489373C8, 0x87A947B6, 0x658D6F8B, 0xB1BB913A,
+0xB1736CC0, 0xDA842C41, 0x8CEDB117, 0x55E96C0B, 0xF14ABAC7, 0x2A5754B2, 0xEA081BF4, 0x31802010,
+0x07FC041D, 0xEC1E2E7C, 0xA6A587B6, 0xE8544CF0, 0x963E7DBC, 0x91C5EAC9, 0xF9A30105, 0x1E3795C4,
+0x0EB4D7F4, 0x2ABBFC3B, 0xD912DB7A, 0xB59C1F70, 0xEE06F9E7, 0xE41003B9, 0x4B41D4B8, 0xFB06A6E3,
+0xFD9FC550, 0x585BA559, 0x126BDEA5, 0x8C884DC1, 0x31E188D1, 0xC91D2EDA, 0x165EC8EE, 0xBD97C7D3,
+0x41687217, 0x2DACD212, 0xAF2B0A71, 0xB50C8C08, 0x9755041A, 0xFFC0C7A9, 0x3944C7E1, 0x8A3D5888,
+0x6C7D109F, 0xC0C59704, 0x84912F52, 0xBC521D70, 0x25131484, 0x701DC346, 0x3962F9A3, 0xAC76064F,
+0x5D8D4ABF, 0x9AC7D2E6, 0x11B91637, 0x33477DA7, 0xDDFA8BA6, 0xAF0B05C4, 0x042B371A, 0xCB97A6F3,
+0xC00BE0DB, 0xA3B139CB, 0x42B6D698, 0xBB786404, 0x5771ABA4, 0x13F567CD, 0x3F5D0082, 0xC3976701,
+0x93376244, 0x5B30645E, 0x4E0F5455, 0x8E5EA337, 0xFB775E99, 0x6EDA25A4, 0x89158FED, 0xB30CEF06,
+0x33F46623, 0x424951BC, 0x4583E10D, 0x8012D33F, 0x74886E36, 0xA77E56D3, 0x5D8C8C9D, 0xF1EA6249,
+0x88F60548, 0xF6EB83E2, 0xF1026B3F, 0x29365DD4, 0x562D209A, 0x4F9C8037, 0xADF430D9, 0xE1B8996F,
+0xD5397762, 0x1A1C81E7, 0x835F8971, 0x3E757A0C, 0xEF7F9FE8, 0x58A0A860, 0xA47F520F, 0xDF1C2504,
+0x81550321, 0x5FDCE2BC, 0x08E19441, 0xCBE58F8B, 0x8CCBBB75, 0x5C1544E9, 0xCF8DC1E8, 0x7382CAE1,
+0x4BB7BDA2, 0x2EB05621, 0x34C58257, 0x7DCFB117, 0xE0AEBE32, 0x781C2D1C, 0x37442033, 0x1831BDAE,
+0x387ECB9E, 0xF4E4CA2A, 0x04DA9615, 0x4AF9C6D8, 0x732351C2, 0xF4289AF0, 0xF6D38C61, 0x85E7D33A,
+0x6D0D3860, 0x7A80E291, 0x701FB1CA, 0x3089B4E8, 0x598F71DE, 0x417F70E2, 0x065160B3, 0x55DEC560,
+0x44ED1945, 0xD043F54A, 0x2138C5B6, 0x3FF42DA6, 0xE2A7D634, 0xED6695D4, 0xFF17B97D, 0x6BB509BD,
+0xD9293177, 0x310B696A, 0x03912223, 0x6F8D6719, 0xF4BF0897, 0x2CF4061F, 0x1CC85CCB, 0xD6D5B90C,
+0x6BA527E4, 0x06005141, 0x79AB2E86, 0x02AC187B, 0x4E482E86, 0xA095FFC9, 0x5B735774, 0xF77F8693,
+0x56A20277, 0x48E9245A, 0x22B7E4C8, 0x219E63B1, 0x74459F42, 0x5296B965, 0x3CA63CA9, 0xF56B43D7,
+0x51B2DB04, 0xDAF5033D, 0x25BB1773, 0xAC6432B8, 0x37DD6F0C, 0x3CDC9520, 0xD5C42CFD, 0xF3D10240,
+0xE78A73FF, 0xFAC2B754, 0xEB864C3B, 0x90EB2C3B, 0xD6AAEEE0, 0x80042D96, 0x5D408AF7, 0xD64F981A,
+0x8F10A866, 0x8FD9B205, 0x4A118DF4, 0xBDE79790, 0x89639E41, 0x85917629, 0x6B8E2ABA, 0xD6D97448,
+0xE4179328, 0x57A72280, 0x7F4A5039, 0xB8A94547, 0x6AE5AF25, 0xBDDF5A39, 0xF02601F5, 0xFB20278D,
+0x64632A31, 0x4E236F08, 0x1B84D502, 0xB80500D9, 0x4CF2B584, 0x53080125, 0x6E25C255, 0xE9254CE4,
+0x0F3AD582, 0xE6B990A0, 0xEB980922, 0x266C2847, 0x73AA05D1, 0x60B3BA1F, 0xE13E4BD2, 0x2454FC6D,
+0x2FAF1A63, 0x743F5FF4, 0x5CDCFB99, 0x9BE28675, 0xC71AB112, 0xFBAF4573, 0xC2436FC0, 0xBE3E744B,
+0x43CE2C4D, 0x2DA0BAEA, 0xDF58B7ED, 0xA3DFE938, 0x816073A4, 0xEFD8F97C, 0xBC4BBDCE, 0x0518944D,
+0x4D056AAA, 0xCD3BB1A3, 0x9C52B8C6, 0xAAEFDCA4, 0x1BAA7524, 0xC2B7B039, 0x8B8A68DD, 0x06D8A4A2,
+0xD94AA28E, 0xBAD5FF68, 0x288F5EDD, 0x4BEC3312, 0x282AE897, 0xBB1FC67F, 0x0C1527FF, 0x5C1F9429,
+0xE0E0290C, 0x37AE165A, 0xE52DE406, 0x4A253206, 0xC6D1F2D9, 0x9362CFBB, 0x37F94252, 0x77DD7370,
+0xDB16A00E, 0x3CC7DB56, 0xD1618D1A, 0x8D097ACC, 0xC8EB75C5, 0x658C271C, 0xC05CEA4F, 0xC4F81BCD,
+0xA2F7256D, 0x55708301, 0xE4DD5885, 0xB3B0DC96, 0x6CABCAAC, 0xD1D14387, 0xC90C3A7F, 0x1DA3E066,
+0xC63647FD, 0xEFFA50FE, 0x2A4EA0F1, 0xC7BD1684, 0xFEA4CFB3, 0x216C7D17, 0x4AEEBA15, 0xD1A5F37F,
+0xC3178500, 0xEE1C29F7, 0x663262E1, 0x13AF0723, 0x4898625E, 0x3930F881, 0x6CEA995B, 0xEE67A958,
+0xD6F2A4D1, 0x7550C02D, 0xD19D8FE5, 0x318F423F, 0x226157ED, 0xB9AF4344, 0x29CABC8B, 0x454DE8D9,
+0xE1E1FB81, 0x17DF9067, 0x16D3E00E, 0xF59FDD11, 0xCD20CADF, 0x57ED85EF, 0xEA11FD9D, 0x6F93F7A0,
+0x3A5A241A, 0xAE481A7B, 0xAFB8DBAD, 0x9F518083, 0xFA8A72BF, 0xA1807FEB, 0x9EFA7C19, 0x33043279,
+0xFCD899ED, 0x0D39F5E5, 0xE19C1ACA, 0x93439729, 0x96C5E92E, 0xC54C291B, 0xB0031FDD, 0xD06F922F,
+0x8F81EDFF, 0xF1BEC66C, 0x50AA76D7, 0xF243350E, 0xE0684A82, 0x1530681D, 0x84996E51, 0xE3D12663,
+0x871530BF, 0x317D26C9, 0x3FCE6C74, 0x2D0952D2, 0x43135500, 0x25554C90, 0xF2CA3A67, 0x4D8407CB,
+0xE54D21E8, 0x73B63908, 0x20AD34BE, 0xEC9EC3F1, 0xA5753163, 0x04BF37E5, 0xFA35C705, 0x8F52FA57,
+0xD9309F23, 0x93BA63A2, 0xE1E7BE11, 0x61B3DE2A, 0xF12E47DF, 0x68ABE79D, 0x1404735C, 0xF99EBF90,
+0xAA2B844F, 0x1ACE10D5, 0x727756B2, 0x9A5BC570, 0xC156D617, 0xE148ACAE, 0x85644997, 0x663D1020,
+0xCE07C75D, 0x1B1E57D8, 0x5930B8F8, 0xCE937EE9, 0x53CE3255, 0x9A4FA07E, 0x5ED54F33, 0xF6C81F10,
+0xA30707EC, 0x973E4C10, 0x46EFDBB6, 0x71CBFCE7, 0x85EFA697, 0xA58F90D9, 0x2DA7F436, 0x74A96661,
+0xD9A41E53, 0x0B80B558, 0xFF85BE5A, 0xF2ECAABF, 0x00008195, 0x9F010100, 0xFF2944B7, 0xA1BD49FE,
+0xA23CFB2E, 0xC25601A9, 0x8721577F, 0x001B40CB, 0x327AC749, 0x1263A86A, 0x6F4ADF22, 0xB731AF0E,
+0x52F555A5, 0x58FB153E, 0xAA968A55, 0xAC6F92C2, 0x45EAAE7E, 0x72E2F253, 0xE1A6F55E, 0xC86FCF3D,
+0x12379C1E, 0x71166347, 0x1BC4E76C, 0xC44FBC97, 0xA258CE6B, 0xF1F8B483, 0x4CF480BC, 0xAADB7AFC,
+0x9942E9BC, 0x1D920350, 0x3869FC2B, 0xFAF51233, 0x0743BE5A, 0x2B4F6A1A, 0xC9BEE97F, 0xA3D5FE30,
+0xEED506E7, 0x54DF52AF, 0x54C1F23F, 0x13055123, 0x0F81129A, 0x11A67D71, 0xAF47F4AA, 0x446D0AC8,
+0x3DC4DF68, 0x97592A89, 0x8304F966, 0x0024D15B, 0xC54A8A11, 0xD9662D7F, 0x263DA27F, 0x9B789218,
+0xF7D9C965, 0x354AAF5F, 0x31A2EEA1, 0x451BE162, 0xDB6007E9, 0x6B0FC1E6, 0xCC0CD304, 0xE6ACD98F,
+0x9FA0237C, 0x1D506195, 0x31561C3C, 0xF209687D, 0x32E72322, 0x1AF935B6, 0xB0F38931, 0xB5437CBE,
+0x885D706A, 0x2A755B9A, 0x67C3874B, 0x2181CD96, 0x86157748, 0x86817166, 0x34A2DFF8, 0xC480509D,
+0x1126AF5D, 0x4CCAD3C2, 0xD533F4CB, 0x238BE8F8, 0x5B39BC98, 0x55585528, 0x149C31BA, 0x2E048CA9,
+0x7DF44543, 0x35879919, 0x56905C5D, 0x1AA1222E, 0xCFAC1E44, 0x4291E7E3, 0x00008D09,
diff --git a/board/rda/common/include/freh3_h264_30f_hp_cif_decOrder.md5 b/board/rda/common/include/freh3_h264_30f_hp_cif_decOrder.md5
new file mode 100644
index 0000000000..b8f516f930
--- /dev/null
+++ b/board/rda/common/include/freh3_h264_30f_hp_cif_decOrder.md5
@@ -0,0 +1,89 @@
+0x49, 0xC6, 0xCC, 0x44, 0x42, 0x89, 0xA8, 0x5A,
+0x65, 0x75, 0xC1, 0x29, 0xC3, 0x30, 0x4A, 0x84,
+
+0x33, 0xBD, 0xFA, 0xE5, 0x86, 0x69, 0x1C, 0xFF,
+0x38, 0xD4, 0xE8, 0x4C, 0x3A, 0xD3, 0x45, 0x24,
+
+0xEF, 0xFB, 0x09, 0x1E, 0x4F, 0x24, 0xF2, 0xEB,
+0xBD, 0x69, 0x18, 0x4A, 0xCE, 0x56, 0xA5, 0x90,
+
+0x99, 0x4F, 0xE7, 0x64, 0x59, 0x0A, 0xB9, 0x24,
+0x87, 0x2B, 0xDC, 0x37, 0xBF, 0x42, 0x6B, 0xD2,
+
+0x09, 0xFE, 0xE4, 0x18, 0xD8, 0xC1, 0x81, 0x35,
+0xCD, 0x0D, 0x09, 0x85, 0x83, 0xE4, 0x11, 0xA6,
+
+0x24, 0x32, 0x60, 0xBC, 0xC5, 0x12, 0xF1, 0xE5,
+0xEF, 0xF9, 0x05, 0xBC, 0xA7, 0x5B, 0xC8, 0xCD,
+
+0x25, 0x91, 0xB7, 0xDB, 0xBB, 0x4B, 0x22, 0x46,
+0x2B, 0x0F, 0x03, 0x1B, 0x75, 0xE1, 0xF1, 0x50,
+
+0x17, 0xE6, 0xAE, 0x90, 0x47, 0x5E, 0x2B, 0xA0,
+0xCA, 0xC1, 0xE7, 0x33, 0x8B, 0xE4, 0xFD, 0x46,
+
+0x17, 0x8D, 0xE3, 0xD0, 0xD1, 0xE1, 0x62, 0x17,
+0x70, 0x09, 0x0A, 0x19, 0x3B, 0x08, 0x99, 0xBC,
+
+0xC0, 0xE4, 0x9C, 0xF1, 0x0A, 0x7E, 0x8D, 0x1E,
+0x6F, 0x59, 0xDB, 0x02, 0x04, 0x6B, 0xCA, 0x84,
+
+0x2E, 0x7F, 0x31, 0x77, 0xD6, 0xD3, 0x7F, 0x7B,
+0xFC, 0xE7, 0x41, 0xFF, 0x66, 0x8E, 0xBF, 0x7E,
+
+0x86, 0x53, 0x2A, 0x3D, 0x81, 0x99, 0xA0, 0xA5,
+0xA7, 0x6F, 0x13, 0x32, 0x15, 0x59, 0xD9, 0x30,
+
+0xB9, 0x64, 0x7A, 0xD6, 0xE5, 0x38, 0x89, 0x99,
+0x9E, 0xC7, 0xB4, 0xDD, 0x53, 0xEE, 0xB6, 0x09,
+
+0xF5, 0xB4, 0x43, 0xA1, 0x88, 0xF0, 0x4C, 0x9F,
+0xC3, 0xDA, 0xB8, 0xF2, 0xB9, 0x87, 0x2E, 0x6A,
+
+0x8E, 0xEB, 0x97, 0x0B, 0x09, 0x25, 0x0C, 0xF1,
+0x09, 0x93, 0x92, 0x2A, 0x84, 0xB9, 0xAB, 0x9A,
+
+0x69, 0x95, 0xF2, 0xAF, 0x94, 0x81, 0x75, 0xB3,
+0x0D, 0x35, 0x75, 0x20, 0x4D, 0xF7, 0x88, 0xEA,
+
+0xB4, 0x58, 0xD7, 0xD1, 0x31, 0x43, 0xEB, 0x59,
+0x76, 0x26, 0xD6, 0xA0, 0x8A, 0x44, 0x3B, 0x9C,
+
+0x33, 0x0C, 0x29, 0xC3, 0xCA, 0xCD, 0x62, 0xE7,
+0x9F, 0x5E, 0x55, 0x9E, 0xFF, 0xCB, 0x84, 0xA9,
+
+0xA7, 0x46, 0x31, 0x34, 0x57, 0x18, 0x34, 0xD2,
+0x71, 0xC6, 0x26, 0xB4, 0x95, 0x5C, 0xE7, 0x87,
+
+0x69, 0x8F, 0x96, 0x4F, 0xB3, 0xDF, 0xD8, 0x1F,
+0x32, 0x6C, 0x90, 0xEF, 0x3A, 0xED, 0xB2, 0xBF,
+
+0x43, 0x9B, 0x47, 0x3B, 0xBE, 0x46, 0x3F, 0xE1,
+0xB1, 0xA8, 0x36, 0x2C, 0xEC, 0x4C, 0x03, 0xA5,
+
+0x94, 0xEE, 0x55, 0x35, 0xBF, 0x39, 0x1C, 0x2E,
+0xD6, 0xB4, 0xEA, 0x7E, 0x7B, 0xDB, 0x5A, 0x4E,
+
+0xA2, 0x85, 0x7D, 0x96, 0x11, 0x90, 0x9F, 0xE5,
+0x15, 0x4A, 0x36, 0x62, 0xCF, 0x89, 0x15, 0x30,
+
+0xC1, 0x01, 0x35, 0x27, 0xBE, 0xF6, 0x17, 0xEB,
+0x46, 0x02, 0x9D, 0xA5, 0x6C, 0x02, 0xA1, 0x98,
+
+0x75, 0x25, 0x55, 0xD5, 0x3C, 0x7E, 0x0D, 0xCB,
+0x20, 0x7B, 0x6D, 0xA2, 0x40, 0x72, 0xBF, 0xBC,
+
+0x40, 0x75, 0x0E, 0x47, 0x3C, 0x58, 0x7F, 0xAF,
+0x12, 0x0D, 0xFD, 0x4A, 0x7F, 0x07, 0xB2, 0x93,
+
+0x05, 0xE7, 0x44, 0x51, 0x82, 0x5C, 0x18, 0x14,
+0xD2, 0x9D, 0x9B, 0xD0, 0xA0, 0x20, 0x12, 0xBD,
+
+0x16, 0x86, 0x55, 0xBB, 0xA0, 0x0A, 0xDE, 0x40,
+0xF7, 0x43, 0x51, 0x93, 0xC8, 0x67, 0x24, 0xD0,
+
+0xF5, 0x17, 0xE5, 0xE8, 0x34, 0xF7, 0x20, 0x8B,
+0x85, 0x3D, 0x4C, 0x52, 0x0F, 0x2E, 0xA3, 0x79,
+
+0x11, 0xB0, 0x06, 0x48, 0xA3, 0x54, 0x43, 0x7A,
+0x29, 0x48, 0xE7, 0xD7, 0xBE, 0xE4, 0x5E, 0x25,
diff --git a/board/rda/common/include/freh3_h264_99f_hp_cif.txt b/board/rda/common/include/freh3_h264_99f_hp_cif.txt
new file mode 100644
index 0000000000..da02055e52
--- /dev/null
+++ b/board/rda/common/include/freh3_h264_99f_hp_cif.txt
@@ -0,0 +1,8666 @@
+0x01000000, 0x1E006427, 0x2B1B00AD, 0x00598205, 0x28010000, 0xC09840EA, 0x01000030, 0x00808825,
+0x31E20F40, 0x4F4E00E4, 0x1BFFCEC3, 0xA7BA6313, 0xA5C89A2D, 0xC81902F5, 0xF19C35EE, 0x3A6A0CB6,
+0x0C314132, 0xCE342C1D, 0x2EF191BA, 0x389FDE74, 0x3288AE24, 0x2D155A36, 0x2D0A6D2B, 0x84209A88,
+0x30A7AD41, 0xBC078AC0, 0x1231B638, 0xF45E131D, 0x1B6CC7A5, 0x290F9A7F, 0xF88224B7, 0x87BA7A3D,
+0x27C89540, 0xFFFFD75C, 0xBE0F9CFD, 0x1EE691D7, 0x10A11B7F, 0x6E9C5032, 0x85EB07F6, 0x0BFA82A2,
+0x3C3576DC, 0xF392A2EF, 0xBCD684EC, 0xBA3372C3, 0x30B4A325, 0x47F82D03, 0x4879D88C, 0x99CC0890,
+0xA908DA8A, 0x315AF8E1, 0xAA5CB184, 0x28864576, 0xF8E52938, 0x8EC32C8D, 0xA88F1390, 0x470BD15B,
+0xAEDFCE16, 0xD1FEEC95, 0x565FC61E, 0x06050EC8, 0x1D9F84B4, 0x56582F66, 0x254247FE, 0x48FB7D24,
+0xA4E83F38, 0x87021B8B, 0x5A2A7258, 0x2F6D645F, 0x113D4BA6, 0xD262284F, 0xF3A37BD6, 0x56FFFF30,
+0xEF3447AF, 0xF7F0178E, 0x1350E274, 0x2F4AE1DB, 0x2FABA33B, 0x02B4F8A7, 0x1A7061C4, 0x65C338CB,
+0x61DAA898, 0x61DA8D39, 0x4A836B34, 0x66ADC22F, 0x23ED184B, 0xE42F2AAF, 0x7BE26C7C, 0x833D838B,
+0xDFEDD532, 0x1DA3CB0B, 0x37071078, 0xB62F228B, 0xB8B7FBD2, 0x3CF37DA1, 0xD833B3C9, 0x742FBD1F,
+0x6DDBB63C, 0x0EEBA3E2, 0xD337929C, 0x50AAF2ED, 0x484B4E94, 0x980D7074, 0xBEECA612, 0xB60426AC,
+0x764BF27E, 0xD6569350, 0xF2BEB8FE, 0xC6E1A748, 0x97E0FFE7, 0xBBC10065, 0xD1F1E333, 0xCFE81FF6,
+0x1CE35EBE, 0x5CF04007, 0xE8EDAFF4, 0xF0D98996, 0x2CD1EF94, 0xA310ACF5, 0x88E9ED1D, 0x3726C256,
+0x1FAAE43A, 0x15EF9CCB, 0x115BB1C1, 0xEB5DC32D, 0xE2ED70E0, 0x33F69DB8, 0x9F2BEA50, 0xA51D7C2C,
+0xC5242BF7, 0x418D293A, 0x36A6805B, 0xC544A410, 0x9D7B2418, 0xD9307D1F, 0x6481B93C, 0xB86D197E,
+0x8DF75CA0, 0xC40440CA, 0x5B1A31F7, 0xC065527A, 0xE650428D, 0x4F2CEFD1, 0xFA444D5A, 0xA3AA944A,
+0xC2A9BDC7, 0x7E2C08E8, 0x5D7810D3, 0xCF292994, 0x9B551B55, 0x228CA047, 0xB06D2913, 0x407FA14F,
+0x040781EF, 0x1CC2B503, 0x8EF719B4, 0x06A5CC40, 0x241CA11C, 0xCE2F17A3, 0x1A5EC74F, 0x7978DCEB,
+0x43F2CE37, 0x5A165DB2, 0x1343CE8B, 0x3E3010DD, 0xB8FA69F1, 0x786932A1, 0x00C44AC9, 0xF60CD0C7,
+0xC754C41C, 0x4944172E, 0xFC096971, 0xC73312DC, 0x4ABFBB9E, 0x94F399CF, 0xEC4C01E2, 0xF738C1F1,
+0xBD42416A, 0x4919CF28, 0xA9953C2C, 0x88734FEF, 0x6CCDE521, 0x21266162, 0xC13DA4AC, 0x54B79EEA,
+0x83E08975, 0xEE32202D, 0x2BB646FB, 0x269D3336, 0x79420C71, 0x94E47412, 0xB2767B94, 0x1D4CAE27,
+0x37ADE265, 0x72C41F94, 0x0E9C402D, 0x845B8C22, 0x2553D26C, 0x91429DF1, 0x1B2E86F7, 0xD267D3EB,
+0x9576DD3B, 0x8124B19F, 0xE16696E4, 0x3C268B23, 0x673B4AF1, 0xA0A648DD, 0xDF6EB1D6, 0xAAA900FA,
+0x4D572697, 0x1CA1729F, 0x94D9D29F, 0x31CAFB37, 0x643E0F5F, 0xC88D93D0, 0x6C445E22, 0xB55AA0E0,
+0x8CFC6CEB, 0xA05E7EE7, 0xB1939498, 0x0C583C2B, 0xA3A6E757, 0xFB0F13F3, 0xC2D8C2B2, 0x83CC35C2,
+0x88C5FA61, 0x47E02C93, 0xBF31261E, 0x0B26DAD7, 0xFD92199C, 0xBF854821, 0x72D49FC5, 0x5AEF4517,
+0x28D2DD29, 0x6AB3B1E7, 0xA3691EB0, 0x3E2DEB60, 0x60B7D892, 0x1034F0A7, 0x1402BC4D, 0x02F3DCAE,
+0xCE4E1CD6, 0x2304A402, 0x277A80EF, 0x444C9DE8, 0x4FD7ECD6, 0xEDDCCD63, 0x17CE04E4, 0x23F0EAFC,
+0x18376F20, 0x7606B8E2, 0x6F59E7A1, 0xD907EA5C, 0xA244FF6B, 0x0BFCFF1E, 0x4FB3E6E1, 0x9EFF930F,
+0x30264EE0, 0x8505A7DE, 0xC5CCF604, 0xCF03D5F5, 0x1BEE36D4, 0xB6FAB188, 0x816379B1, 0x55FBA6ED,
+0x5F9E9C4A, 0xA792E346, 0xEC93A76C, 0x2010B786, 0xBBB4A034, 0xE43E7958, 0x3D946104, 0xBD21E249,
+0x0511E863, 0x634A7FC0, 0x444D3442, 0xA8C6B46F, 0xFC409759, 0x055E0860, 0xEEE460A2, 0x9FE606A7,
+0xBDA8DFBC, 0x9C1B4A48, 0x196C3499, 0x2410A7F3, 0x2F1D5693, 0x8B6C3DFF, 0x6ED22AF4, 0xF5821C32,
+0xD8CB7FF9, 0x113EA778, 0x50308886, 0x2883C8EC, 0x15707CE1, 0x3DD75CFA, 0x7E7819B9, 0xF74311D0,
+0xFCE4D010, 0xFDD4EF16, 0x09CEA3B4, 0x81528FF5, 0x5AE7A6DF, 0x78F4668C, 0x8329967D, 0x3F10178B,
+0x0D89396B, 0xFD790611, 0xD45FFB40, 0x18354587, 0xA4AEE262, 0x03BDCF11, 0x684205BC, 0x128E41B4,
+0xE4A75A92, 0x0515C78C, 0x56A15D0F, 0x085EA6BF, 0xF6196ACC, 0x8A61E69C, 0xAF6B5726, 0x583E2F3F,
+0xD125C197, 0xA0C7EFD6, 0xB1068E38, 0xA1A56DF2, 0x5F02D5E0, 0x054FA0EE, 0x1EF59693, 0x178FE67C,
+0xDE10422A, 0x86115CA5, 0x2F45604F, 0xCF5B949C, 0xF4289E00, 0x43457D6A, 0x71EA2054, 0x20C05D28,
+0xCF49A68D, 0x272D0F32, 0x579028BC, 0x56CCCBBF, 0x8D5006A9, 0x8F233248, 0xDD3656CE, 0x0F485DE9,
+0xC6B69592, 0x6F96400F, 0xA1E7CD2B, 0x21413520, 0x6F62B9C2, 0xD7E6A6BE, 0xDE810DE1, 0xF11E0429,
+0x9DDD46EC, 0x97C227FA, 0x9BEF5BB8, 0x191FA59A, 0xBD9A0349, 0x1BC526A6, 0x07CAEBB5, 0x889E9286,
+0xEFAB2825, 0x21CD8342, 0x7B2EC28A, 0xB8EBA30B, 0x88CA2F31, 0xDD46F111, 0xD0FF35EA, 0x5F0844D0,
+0x5F497819, 0x4BD870EC, 0xFDDA6753, 0x4233C155, 0x33A2A57E, 0x1A947E90, 0x454617B2, 0xC9983C0C,
+0x25426A31, 0x35801072, 0x83CABC3F, 0x4AD33E7C, 0x06C199BD, 0xA3A37531, 0x447979B0, 0xACC806C0,
+0x66558A7A, 0x95900805, 0xEE580A15, 0x5BD0C217, 0x466007BC, 0x0F1635BC, 0x7C6C79FA, 0x102F7846,
+0x10F6B355, 0x2253BB68, 0xF3078F8C, 0x73768642, 0x2F0FCD59, 0xAB016465, 0x0634465A, 0xB0F20D6E,
+0xDD6BEAEC, 0x26CFA7E1, 0x51636D00, 0x6D8DFB3E, 0x01ADE59C, 0xA264B022, 0xE9C725EC, 0x7566161D,
+0xB5FF7E2B, 0x3A594D3E, 0xCAA6FE0C, 0xAC1A70D3, 0x2C06A16B, 0x7A55CBA9, 0x17F70447, 0x32BB6C30,
+0x81A13D3F, 0x3F4ED12E, 0x2E8FE98B, 0x60522A94, 0xEB815F6E, 0xDC8BE133, 0x0768B45D, 0xEA62A02C,
+0x284771EC, 0xB7793AAC, 0x8C926F58, 0x18D69C0A, 0x128054F0, 0xBDD399BE, 0x46DF4ED8, 0xD671FB22,
+0x805F8EB5, 0xE42C2063, 0x84E2C1F5, 0xE3ABCB6A, 0xD32B5724, 0xD861B37F, 0x627604BD, 0x79B340F4,
+0x6F5E754B, 0xDE1E78DA, 0x017EF28B, 0x1E187DA4, 0xC2B090C0, 0x854F9B22, 0x649B4766, 0x95CCECFE,
+0x533CE82E, 0x02A55244, 0xCB038149, 0x7AD52824, 0x2970887B, 0xA5103309, 0xD03959BB, 0x8EBC221B,
+0x3F726A4F, 0xC3E896DF, 0x56968F7F, 0xAFD3DBD9, 0x42DE3CCB, 0xDAB59D65, 0x72D29135, 0xB76363DA,
+0x1B234056, 0xB079B25D, 0xE27D4B5F, 0x50400E4F, 0x8121B760, 0x1C3055A2, 0xCC024ED8, 0xB686861C,
+0xCEA91365, 0x74EC5159, 0x3713F3BC, 0xEAC0F7BF, 0xC2C9A6D1, 0xDA7A4C5E, 0x7775F81F, 0x1037B16A,
+0x6CF53B71, 0x6FA9005F, 0x58E085A2, 0xCD2D5E36, 0xC939C4D7, 0x13AB45FD, 0x33E732FE, 0x86E2E797,
+0xA5C39D12, 0x74627D64, 0x8B7345A4, 0xB15C98A9, 0x13CAF8AA, 0x64CC9FE8, 0x070078C0, 0x8A988CB0,
+0xE482EAAB, 0xAE30B180, 0xF7AFF2CD, 0xED180C4E, 0x20A8FE98, 0xD49AE3F3, 0x5648F45A, 0x8FB3254E,
+0x870E61EA, 0x788F20A7, 0x3C87BCE9, 0xB69E403E, 0x9CB4AC07, 0xA794ADC7, 0x6C7DAD89, 0xF74BB01D,
+0x7713E6FB, 0x986144C0, 0x1B648A53, 0x15EAB191, 0xB6B0B962, 0x3DB6A517, 0xAD1E28BE, 0xD6F66573,
+0x2861F99F, 0x2939B2BC, 0xBAFE3DA4, 0xA54AEC2C, 0x9EBBF163, 0x9611C2E9, 0xF6A35EC4, 0x74BB5650,
+0x1E7A98D1, 0x75169062, 0xDE6D8C44, 0xDBB39DA4, 0xCCD5D089, 0x97B7AD98, 0x6256DF3B, 0xD673424E,
+0x8596A880, 0x6F5F44B5, 0xB43D5C79, 0x9E51DAB9, 0xAF8103F3, 0x59C10D27, 0xF4FBB45D, 0x5362F2F2,
+0xDB9A97CE, 0x75A3FA0B, 0xD617CEFD, 0x2DE959A9, 0x66478238, 0xA2EFAA79, 0x8A1E6EE9, 0xA034EE4D,
+0x92FE767B, 0xB561FACA, 0x97028D78, 0x726C1B0F, 0x54867F2E, 0x15FC4B73, 0xE6002C5E, 0xB01F4AA6,
+0x1FA6D77C, 0x41C2A0AA, 0x98E19DD4, 0x83F083C1, 0x6A2F65EB, 0x047020D8, 0xB015A5DA, 0x7E514D4B,
+0x5F81671F, 0x13DB1CCC, 0xAC51859F, 0x807D56BD, 0x79C6CDAB, 0x5D94BEC1, 0x8DA15D21, 0x96D5A2B6,
+0x7F338C16, 0x579663CC, 0x627F53A7, 0xB826339E, 0x4CE0FDE5, 0x5333AD6B, 0x6FE8065F, 0x1637B655,
+0x00030AE1, 0x4A1B77AA, 0xA7F087E4, 0xE30A4D8D, 0xEC12C3EB, 0x38070BF9, 0x99FD28D7, 0xCECF48D1,
+0x6475399C, 0xE2283882, 0x221E8B5A, 0xACB362B7, 0x46F5D538, 0x5ABB453A, 0xBE39F0E4, 0xEB2B53FB,
+0x193A7E90, 0x7F63508D, 0xA488296C, 0x2D3E7DE2, 0x26FB9A49, 0xCF4EEC7F, 0x2B71978D, 0x0729B8DE,
+0x58C652E0, 0x00CF0FD7, 0x1534C2EF, 0xCA71F60D, 0xDD4FCABF, 0x1D3671FA, 0x351618CF, 0x8F7A8FD9,
+0xAB082627, 0x19B87D1F, 0xB613ED4C, 0x7D22D166, 0x1383F468, 0x8D6CD052, 0x01D096E1, 0xAD2B75BD,
+0xEFC54110, 0x0F79997B, 0x512D39AC, 0x8CDA74F5, 0x688B09BB, 0x008EC1D4, 0x62D4A213, 0xB8AEEA98,
+0x6E286F3A, 0xF0A2DD54, 0xD02A49CB, 0x2D5F0904, 0x4A4DB105, 0x20301E96, 0xDF1CC173, 0xD7FF009C,
+0x3FB0DA7B, 0x42557FE2, 0x402B31EE, 0xDB26EA56, 0xB28AF4EA, 0x60F68B38, 0xA2EE0434, 0x2C48B881,
+0x1B0A70EF, 0x2AC47B6C, 0xE679F668, 0xE64BA9CC, 0x60392858, 0xF0B7FD29, 0x37432859, 0x546271DB,
+0x1640E004, 0x7CB2DEED, 0xC94DAF98, 0x9E64B2FC, 0x3555EF4B, 0xDCB4F4F3, 0xF2CCCCFD, 0x1006C036,
+0xB0B698BB, 0x2E0D7F3C, 0xC51FF2F2, 0x545B34DF, 0xC0DFDB3D, 0xD305E1B9, 0x2963394D, 0x9C2846DA,
+0x6FFDBA01, 0x1D387AE1, 0x7FB43E29, 0x20593CB0, 0xF449167A, 0xCCDA54A8, 0xED5BFB02, 0x99454AF5,
+0x330C6504, 0x854EAD16, 0xEFE54576, 0x7EB47DB2, 0x0AA42AE8, 0x30D21F89, 0x229E3E3B, 0x19B05285,
+0x80C13533, 0x9CE6D736, 0xF20443F8, 0x703D71F0, 0xC9391224, 0x8B9DE398, 0x1CF05C08, 0x2C761E91,
+0x0E9D6CEF, 0xF9145995, 0x06A740AD, 0x2BA3EE22, 0x5CDC6D68, 0xF4DD9C1B, 0x1636309D, 0x198C339B,
+0x8C232A1F, 0x99A9E9F8, 0x3A403C81, 0xA06D98F2, 0x86E42D56, 0xC0A7BD4B, 0x7CAEBDD1, 0xE91F5CD1,
+0x18D6B0AA, 0x277047B4, 0xA201D256, 0xF7404D7B, 0x72BD4518, 0xD5D3B1CC, 0x5C1B7D92, 0x987822EC,
+0xAA2CA911, 0x7A2B8FD5, 0x8910C121, 0xB0F31769, 0x98D3A37C, 0x3BAD280B, 0x264CF4AE, 0x15333639,
+0x7D15549F, 0x57BDC92E, 0x08D1DDB6, 0x7B3CFAD5, 0xE8F6DB07, 0x8A8D4B89, 0xA90E2F39, 0xE5AB8358,
+0x9C3EAC59, 0xEB329B11, 0xFCA9263B, 0x24ED4E34, 0xD3AEC949, 0x09B2A94A, 0x5F5F19CC, 0x14DC1FB2,
+0x39A188BB, 0xCF0E532B, 0x0BE1BC2D, 0xFDB46738, 0xBA08C2C4, 0xFB206E0F, 0x7A4305E8, 0x0D1D0174,
+0x791C709A, 0x3B3E4B9D, 0x921AE27D, 0xF3ADD8C0, 0x13E65B14, 0xE2C96A9B, 0x944F4D3C, 0x410FCA86,
+0x9D4F7528, 0xD3E1F336, 0x41B3B573, 0x57638F1E, 0x47551EF9, 0x83F2EE23, 0xB385F8D5, 0xFC1133FB,
+0xAECDE7A0, 0x79580C01, 0x66202190, 0x9DBA214C, 0xF10872E6, 0xE6135574, 0x52593E42, 0x87EAE0C3,
+0x94BCD124, 0xBCC9302D, 0xE7A8F82C, 0xBFB263A9, 0x0D120F36, 0xEC156372, 0x33391D5A, 0xA3D3A35B,
+0x7D65F7E2, 0x81294D21, 0x23637ADA, 0xDCE1141E, 0x799D3D58, 0xF1A92431, 0xAC500A7C, 0x4ECB2D9E,
+0xD70E92D5, 0xF799BBD0, 0x07CE41C5, 0x8D3E2F29, 0x2DE1D5D6, 0xCEAB711B, 0x8D3DFEDA, 0x8908CE27,
+0xD4375F80, 0x5C549EFE, 0x82DE0972, 0x9043F0FA, 0x45A97BEC, 0xD9439BDC, 0x105A7020, 0x74005A54,
+0x29B7F089, 0xE809BB12, 0xB1E43538, 0xD99F915B, 0x670B1C93, 0x836502D3, 0x260FCFC9, 0x2E3904E5,
+0x0835D19E, 0xA5BFDB18, 0x84B3BE34, 0x34B80B9F, 0x59358E6B, 0xCD0D52A3, 0x343F8961, 0xD26C82C3,
+0x729A4083, 0xEF8B91C9, 0x6F038541, 0x5D0A446E, 0x47F24111, 0x5C8DE7C9, 0x80FE9E8D, 0x1A2FB2BF,
+0x301B905D, 0x840FA54A, 0xB2CC68EC, 0x2483ADDE, 0x794B4D22, 0x222C5342, 0x34A12D5E, 0x619F3485,
+0x4A0FB644, 0xBB24A774, 0x9FDCA426, 0xDB1D3578, 0x11529D84, 0x057E4535, 0x448E5585, 0xD9DF11B1,
+0x5352C1DF, 0x4544D6D4, 0x12826656, 0x64711A18, 0xEF240191, 0x657D6B32, 0xCBF892E6, 0x38B1FD9D,
+0x0BDD93BB, 0xB6FE6B03, 0x3667BB61, 0xF29461A3, 0x9E55DF6F, 0x5D0E5FDD, 0xE0505289, 0xD98F0F95,
+0x0895FB16, 0xA9BABF32, 0x516D1815, 0xE7ADD234, 0xB50B4C17, 0x568441BE, 0x9A85F3EA, 0x505C49F1,
+0xE71674B9, 0xC32FE160, 0x76883422, 0x4E4B8AD6, 0x9C839415, 0x19F03FA7, 0x841C6B95, 0x6F377CCA,
+0xB60BFAB0, 0x17BF3BC7, 0xAF682C91, 0x01B57B50, 0xD883C037, 0xDF8C5755, 0xB0D01A22, 0xCE7CBAAD,
+0x02F1E513, 0x470519DA, 0x5F1EE1A8, 0x748DA8CF, 0xB537226E, 0x83F4FE7A, 0x5518C7CF, 0x55F629E9,
+0x5A6670BC, 0x8771103A, 0xCE2112E1, 0x4F42B94F, 0x7DF990A2, 0x77CBF638, 0x73E7E820, 0xFF312C43,
+0x53975345, 0xB6519585, 0x909781B9, 0x7C76D49E, 0xF64CF6E4, 0x3BC5C827, 0xBABE7F23, 0x629AECE2,
+0x077F0CE1, 0x0DDECFD5, 0x5580D75D, 0xBE20F4C2, 0x106F5D2D, 0x3D36E9EF, 0x7B3104DA, 0x0DD79E49,
+0xD523399F, 0x9B259D9E, 0xD6B3346C, 0x2D1FCC1D, 0x4CCDF7DB, 0x75AE6753, 0x3D186F6E, 0x1D05597C,
+0xDCA6A721, 0x055644ED, 0x1DA7DA48, 0x9C7838AA, 0x7691521E, 0xBB60CB66, 0x9EA44EF7, 0xBF1C3FBC,
+0x5C44D527, 0xD43BFDA7, 0x2C83404E, 0xC29D3E30, 0x7019469B, 0x1D75F9A6, 0xA6C1F4E6, 0x3EABA5E5,
+0x89AC7AA6, 0x26D45A83, 0x6F49607E, 0x5D18B133, 0xCD3647D4, 0xFFEA4C30, 0x32160A0A, 0x00A11883,
+0x8FCE8027, 0x84B2C5DD, 0xD10273C3, 0x8442A03F, 0x8B176E4C, 0xEB58866C, 0xDB32944E, 0x0A5F749A,
+0x4563F1EC, 0xC1345670, 0x11440EEA, 0x0A4067F6, 0x458A5E8F, 0x42E4BD3E, 0x5F660DE6, 0xA9FE978F,
+0x8268603E, 0x800618D4, 0x23FBD491, 0xE9E7FF42, 0xA66BC3F1, 0x9BD5A77F, 0xB8BC0F53, 0xCA88D262,
+0x529D71D0, 0x41511EFA, 0xF2F20742, 0x52968785, 0x23B1F41B, 0x118C6049, 0xE9F50768, 0xF62756A3,
+0xED1C3F34, 0xC41B763E, 0x0EDA9242, 0x699EDA91, 0xE6857ED6, 0xD1874943, 0x0F169E92, 0xC77281A6,
+0x24C21AE0, 0x758E0FB3, 0xC29A0B88, 0x698ECB27, 0x805D228A, 0x69595D5D, 0xDCA60535, 0x7AF8EDE7,
+0x98FCE247, 0x0FA87D62, 0x0E1757D3, 0x2DE8BE7A, 0x81810D40, 0xB67FE6E9, 0x1F89000E, 0xEAE8E21D,
+0xBBA56F9D, 0x2842CFA1, 0xF47EC903, 0xA36410E3, 0x319720E0, 0x3E73757E, 0x9113489C, 0x41030F3A,
+0x40070569, 0x9D407EBC, 0xEB09188B, 0xD0BBB04A, 0x3AE502B3, 0x088C13EB, 0xC912788F, 0x69058D34,
+0x7CFDCE67, 0xA143CCEC, 0xF85BAE08, 0xB728DCA4, 0x7B7DDD38, 0x28782574, 0x336896D3, 0x7E642610,
+0x9E090BB6, 0x5699D5A3, 0x90EE5E54, 0x96F3374D, 0xFAC29A7B, 0x95E21653, 0x751C1E6C, 0xE513C3CC,
+0x47E41F6A, 0xCD92125A, 0xE69BF7B4, 0xC8F356BE, 0x0131E7E1, 0x8B6FEE50, 0xB4B952CB, 0xF4B77A1C,
+0xE1374DE2, 0x91F0BFB5, 0x9C8A3110, 0x7041CDBA, 0x523AB00A, 0xCA1478D9, 0xFAC7181C, 0x6901E041,
+0xA2F72B8F, 0xEFF7264F, 0x00CE3740, 0xF338EB27, 0x69608DF6, 0x10084D91, 0x903CFBC7, 0x7BA13DA0,
+0x2498EFF4, 0x8FF7FD37, 0x4547E3DF, 0xEEDFBC74, 0x8114DD20, 0x50FF3833, 0xD5EA57FF, 0xA0BA3CB2,
+0x4AE3DF5C, 0x7B236813, 0xAE6D8B8C, 0xA6FC4923, 0x1B4D32D6, 0xCF6CF061, 0x50D81BBF, 0x73A8BB62,
+0x49E08918, 0x812F12A8, 0x0932271A, 0xF94D7C80, 0xEC6CB027, 0x80FA735C, 0xF20921EF, 0x231D6895,
+0x165973C6, 0x53AC6E69, 0x16692D2A, 0xE0390828, 0xC8AAA08C, 0x1E57D90B, 0xF89075FF, 0x730D08D9,
+0x7F1F244E, 0xE8D8A26B, 0x5151CB23, 0x1771C16F, 0x89893728, 0x19311B56, 0x90583DA1, 0x9278F599,
+0x5F38EEFB, 0x9C90F488, 0x7F0891AE, 0x18B45007, 0xE1BCBB0A, 0x2A99481C, 0x38D884A6, 0x56795D30,
+0x633614C6, 0x4EB1D427, 0xC041C09F, 0xC8CC94AF, 0x717693F1, 0x97E7CDB7, 0x31E38144, 0xBDC91855,
+0x74514E2F, 0x41D7D5DE, 0x514CCF88, 0x9B063E02, 0xD32F469B, 0xBB5A1109, 0x47CFC114, 0xB1539A65,
+0x370FF4F7, 0x0C2DF341, 0x1F5C5255, 0xB4280DAE, 0x72A263FF, 0xE97FEBC3, 0xEF2DA164, 0x333737B1,
+0x11C10734, 0x989AEFFF, 0x461E0A69, 0x3A450622, 0x7B179DF4, 0xB61BFF73, 0x0839E662, 0x5EECB997,
+0x8E663334, 0x96BCFD74, 0xB636C6BA, 0x06392CD5, 0x7263AC18, 0x25002CCE, 0xE027E7FE, 0x5A7EEC0B,
+0xA25FEF43, 0xA8260E29, 0xEC2BED5E, 0x29C9D84B, 0x4861FC09, 0xAA347493, 0xC9EB3DB5, 0x5743AFB6,
+0x6B286F19, 0xB665E333, 0xA3FDC274, 0xC78BC934, 0x96779060, 0xF6E86FF2, 0xBE0A3D44, 0x51A75AD5,
+0xC0FD70E8, 0xA9084594, 0xAEC590D7, 0xC8803906, 0xAE00C3F0, 0xB173C746, 0x3D747508, 0x70291C6A,
+0xCB5725CF, 0x070D7DB2, 0x1CB5EE03, 0x6F4E2EFF, 0xBFA79555, 0x0C8554AD, 0x7C88018A, 0xA542CD09,
+0x54589D81, 0x726330E4, 0xEE25CFBB, 0xD4F77224, 0xB88A5CCE, 0x4ABA3EA8, 0xF5941260, 0xBC65813A,
+0xDC33E9E8, 0x16037CF9, 0x7B6CC63B, 0x62766FBC, 0xED5A07A6, 0x1626003A, 0x7ACCA6F0, 0x480DDC66,
+0xDD8BDA06, 0x8FDBAFC8, 0x87E62466, 0x9EA9CCCD, 0x91A549B0, 0x02A601FB, 0x32B9EDAD, 0x8DF80BE7,
+0xD28B239D, 0x687DFD92, 0xDADD7FCB, 0x95BA845B, 0x77242987, 0x215998B1, 0xDC407F9D, 0x91665616,
+0xF71D29BD, 0x59F4E3B9, 0xDAB48249, 0x501F54BF, 0xAB3627AB, 0xD0F26CF3, 0x3450DDE0, 0xCB01B941,
+0xC0244CE9, 0x0893406E, 0x96F49403, 0xB7254060, 0x16638C9C, 0x6098C40F, 0x52D50615, 0xB7A60EE7,
+0x53E1EA42, 0x8B75FCFF, 0xA4456407, 0xF94BB0B9, 0x861258A2, 0xAEBB7A1E, 0xB2994A06, 0xBE987A7E,
+0x1A41B578, 0xE9B8FB9C, 0x710355EE, 0x8AC04BC6, 0xFD3BCA64, 0xEDB7448F, 0xCD253673, 0x970DEFCC,
+0x0E12E3DE, 0xF0584814, 0x9E2D3F04, 0xABBC29B5, 0x46BD4D9B, 0x75A645D5, 0x717150D1, 0x66822E49,
+0x0AD8BFF4, 0x0F8246B2, 0x9972411C, 0x16379FC7, 0x0C0B23DE, 0xB6699DC9, 0xC9E8EE37, 0x3ED64CB9,
+0xF82A2B07, 0xDF6A19AD, 0x75CC553F, 0xE97B2EEB, 0xAD306A9E, 0x80F20976, 0xC9C9A506, 0xB99264EC,
+0x27013341, 0x63F090BD, 0xA35B0089, 0x213FD2F9, 0x049B942D, 0x087192F7, 0x6BE1C198, 0x9D2C5688,
+0x4366056B, 0x56C64F97, 0xF553E0AA, 0xD41A932E, 0xA90B51D6, 0x4D8AD47B, 0x265DB82F, 0x485F24CC,
+0x6BC47E8D, 0xA8957D1E, 0xF87290B8, 0x79D67B24, 0x345AC3E9, 0xDEE89684, 0xEB9E8271, 0x670B6EEB,
+0x6C92302C, 0x24EC8279, 0x4DAB96B5, 0xDDC2AF58, 0x57FD373C, 0x323942F5, 0xA7673769, 0x5D41A122,
+0x256D14AA, 0x39112CFF, 0x274E1B9A, 0x8CCD95F0, 0xDDEB08CE, 0x7DE9F6DF, 0x04700DB9, 0xE0620AF6,
+0x31FF80D8, 0x7D772543, 0xFE5D5A9E, 0x10C2CF28, 0x79068793, 0xA6EF611F, 0x57B21039, 0xB8062BCA,
+0x0543F128, 0xFD4175EE, 0x91D38F87, 0xD9DF16CB, 0x2287BAB8, 0x948778BB, 0x0B13DFE7, 0x47BA401E,
+0x67C36446, 0xF2A95026, 0xC64E7FD3, 0x72E8E5E9, 0x3E096E76, 0x9AAFE380, 0xCD13F68E, 0x4DA15EDE,
+0x10EEAFE4, 0x786C9D92, 0x42E0119E, 0xA969FE84, 0x0C9A5D12, 0x541F6A62, 0xDB31B981, 0x32472400,
+0x2ECD8319, 0xD970C034, 0x1AC8D2EB, 0xF8AF70AF, 0x80794C3F, 0xD2B0717A, 0x0C8C8DB6, 0x11D0270D,
+0x810EDCFC, 0xB82B88BC, 0x8F183760, 0x9AFC2081, 0x5933E5CF, 0xEB01CD75, 0xEB44F38B, 0xB26C51CE,
+0x896FF3C0, 0x4B6529D9, 0x6264174A, 0x340FC777, 0xD3B78F6F, 0xE16FAB72, 0xF4254410, 0x493B92DE,
+0x96BEEABD, 0xB0B6B225, 0x427FA49B, 0x4C5D7DBD, 0x129425F0, 0x431C10D3, 0xF780F3D4, 0xEEA3093C,
+0xE4860B79, 0xD360F274, 0xAD2D7070, 0xD2F10F1F, 0x0464ADDD, 0xB66DD87C, 0xDF6A2413, 0x9F3C34F1,
+0x0CDB55D0, 0x9EF051AD, 0xBC9246AF, 0x7F294718, 0x007171F7, 0xC8D78A48, 0x0A0BB7E8, 0x0A7B0F56,
+0x7F86615D, 0xEACE14E7, 0xA71AD441, 0xB4D1305B, 0xEFA52EC2, 0x43BDAF37, 0xAB52EC67, 0xEAFF2535,
+0x6EE1D9C2, 0x52DABF94, 0x08EA6223, 0x1A792E68, 0xAF8362F6, 0x46DDBDB5, 0xE446EB3A, 0xF16F7465,
+0x7E566C28, 0x0FC609C6, 0x8F6616BA, 0xA93FC2FA, 0x32807E01, 0x21F5A06D, 0x7F835D06, 0xA66320DA,
+0xFEB7E161, 0x62745004, 0x8619F93A, 0x00106AC4, 0xDBD9BA15, 0x1E50DB1A, 0xA35759A7, 0xBC47C605,
+0xE5BFE8EA, 0xCB2E1FA2, 0x4CDE0FDB, 0xF2AFA88B, 0xAEEC07C7, 0xF0C6DBEE, 0x06FB9C17, 0xC55C0C58,
+0x7D205461, 0x1336D43E, 0x0FBADD97, 0x25F812D8, 0x9D4D99E5, 0x4BD360E4, 0xE905B1F9, 0x9A595350,
+0x6E4CD0BD, 0x630D1E57, 0x7EF6E769, 0xCBB5A9A8, 0x048531F2, 0x2BDCADFE, 0x0D49A727, 0x3EABE28D,
+0xD32C8DEE, 0x791800C6, 0x4F8D440B, 0x1490BAA9, 0x3F6D3D05, 0x43540EF3, 0xB0367DFC, 0x101CBF6E,
+0xFB80FD5E, 0x58944D43, 0x2221B752, 0x17546AC9, 0x52E26E90, 0xB2530E2D, 0x07D86E54, 0x29A73B31,
+0x0E8FC2DB, 0x03BD2253, 0x1BF4F3E5, 0xEDB9C5C0, 0xAFE47B86, 0x779F6DF4, 0x8E180CBC, 0x3BDBBC89,
+0x101A6EE3, 0x2655FF0E, 0x9415DDD6, 0x9D4DC5E7, 0xC22A9F29, 0x6AA2C3ED, 0x88470C6C, 0xFF42EA9A,
+0x7BC77438, 0xE92FDA5D, 0x779F93BC, 0xB7ED6AE8, 0x9A3C0CBA, 0x49B7F18F, 0xD9AA8326, 0x9F80B5A6,
+0x7BF54484, 0xA19F1DAA, 0x65A924D1, 0x13D62A34, 0x2DA9840E, 0x2856010B, 0x13BC6714, 0xB3EAC72F,
+0x148FCF99, 0x52DFAC9A, 0x4E67AE78, 0x46DFE8B4, 0x647BF77F, 0xEB69A5D0, 0x75180705, 0x87D09A7F,
+0xCB17E696, 0xC3E60401, 0x85B44D16, 0x5DF9E575, 0xC2D6D7A9, 0xA3DB716D, 0xE93E4B81, 0x6515ED0C,
+0x710037E9, 0x150D4754, 0xFA08B7D0, 0xB3C4E798, 0xD45BC874, 0xFBCD714A, 0xFE601FE6, 0x15A4F45C,
+0x5C5CA799, 0x5FC56550, 0x441DC0E4, 0xDFD20E12, 0x8BDA2E86, 0xF706387B, 0x3F92D483, 0x1D455246,
+0x7EA6FD47, 0x13269C5D, 0xAE24812C, 0x8510077B, 0x2175D550, 0x26C18FA8, 0xCDEF3E33, 0x05B32BE7,
+0x003DC1EE, 0xA682CC2C, 0x0F83A697, 0x68D13BC1, 0x612B4F94, 0x251B87E0, 0xED811CDF, 0xA4FC943D,
+0x6E486D8B, 0x197E36E7, 0x97095880, 0xC9F7AB63, 0xC7A6BB4D, 0x06D0AD0E, 0xB9C2AA26, 0x678550D8,
+0x1848B655, 0xD2A57D56, 0x98B7F677, 0x9A0668F2, 0xBC455590, 0x3E640342, 0x34646038, 0xDFDA764D,
+0x5B482E93, 0xA9101BC2, 0x06C040FD, 0x6553FA74, 0x1DB91FA3, 0xFFD846F2, 0x80D23720, 0x3FB4E88A,
+0xEEDF984C, 0x0EA71158, 0xB5077FF3, 0xED19871F, 0x2FF5317C, 0xA8AF6E85, 0xCA1949F0, 0xFE1F4647,
+0x1141D9D8, 0x03DADB4B, 0x2053B34D, 0xAA27CEA5, 0x5CC3B667, 0xE2E61971, 0xBF063B67, 0x43E4438F,
+0x5A8C9DD6, 0x8A6739BC, 0xFDEE9BD6, 0x925363C8, 0xAD46B6C7, 0xAF1DC77B, 0xB0B52612, 0x02BF4FEA,
+0x1D42D5BB, 0xA9BA05C2, 0xBFCCB264, 0xFA74FD33, 0x6778A734, 0xEE8E0CCF, 0xA63BF1A7, 0x686C0FEE,
+0xDE90FB04, 0x828466D2, 0xA39570E8, 0x97AB664D, 0xF09ECA39, 0x2EC6E9E2, 0xD3EC2B1A, 0xC08B1CA8,
+0x11103B33, 0xEA7064C5, 0xA0C65F1A, 0xB6D3D445, 0x91436DD8, 0x2FDEF676, 0xD9BB3AAA, 0xF9C99430,
+0x69D43CC2, 0xA6CEAC24, 0xE393C0AA, 0x9F2975A0, 0xDA5559A3, 0xD706F56F, 0x19D326EC, 0x776AB689,
+0x6837A1AB, 0x673305BD, 0x9E77C3DB, 0xE9D48050, 0x5CB53CA3, 0x73A3E8A7, 0xDAC84E02, 0x2715BBCF,
+0x291AEFD0, 0x0DAEB26F, 0xFFCC0261, 0xF412C08C, 0xE26D9463, 0x68E77101, 0x8BB46AC9, 0x75E63128,
+0xCA2A4083, 0xEA4F3692, 0x09B025EB, 0xD3D2164F, 0x678C15F0, 0xA28786DF, 0xFA51FC3F, 0x74ADA405,
+0x9A4690DD, 0xBACEDA47, 0x7B78848F, 0xE92AAA25, 0x8CF53A3D, 0x06E405DD, 0xD996F04B, 0x063CD622,
+0xE12D1758, 0x21F4CE1B, 0xBD020717, 0xE71FF4D5, 0x951F9A9F, 0xD32B23BC, 0xA78B6171, 0x286A38A8,
+0x6248ADB9, 0x80DF1043, 0x5B6A138A, 0x87BD0672, 0x24AAEAEA, 0x52F3764C, 0x36E81885, 0xD08BF3C2,
+0xE82AC51B, 0xDDB37110, 0x29EB5095, 0x1124ECA0, 0xE2F4E587, 0x8411F872, 0x77116B64, 0xB6753B3D,
+0x191106D6, 0x3F83D9F7, 0x31633482, 0xB76A3CFF, 0xB5181725, 0x31C79F46, 0x5A4444D2, 0xAECF39B2,
+0x3B750680, 0x9083B6F9, 0xE74A96F5, 0x4BEB9DA4, 0x15C7E948, 0x3A3F3021, 0x4C700983, 0x2DF3C244,
+0x5D31DB64, 0x7A5CF7D8, 0xF9D18773, 0x38EC9694, 0x0BFB2836, 0x08B5F495, 0x49B51E1E, 0xE7DF96E9,
+0x36B99563, 0xB5B28526, 0xBE0077C7, 0xBC3F2338, 0xD8BB48B2, 0x7E0922C5, 0x17F14E69, 0x376FDAD2,
+0xC7908938, 0x69284E3B, 0xCABE4E02, 0x53F6D966, 0xE1A5F4C1, 0x5C01F930, 0x2CEA6614, 0xD39CE93A,
+0xDEF05999, 0xB15522CE, 0x8EFD9D4B, 0xE3FB309C, 0xC15EF7AD, 0x59053C3D, 0xCC60C9F4, 0x8CA244FD,
+0xD69DBDF4, 0xE142D700, 0xB4E0E6CD, 0x5C970A91, 0x1E03D11E, 0xE9A4F60D, 0x70E9A959, 0xDE2B0666,
+0xD8C56BEB, 0x8A23073F, 0x087D0586, 0xF9FB22DB, 0x5DF0FEDC, 0x2799FCFD, 0x2C3CD99B, 0x508C640C,
+0x4B308ED2, 0xEA613AF7, 0x2BB4B730, 0x3BC63128, 0xF501460B, 0x38534992, 0x3583EE8E, 0x416A254D,
+0x259FC980, 0xF633D748, 0x34257D4F, 0xFCD8227A, 0xE4416F80, 0xFB0E9F03, 0x92653870, 0x56AD723F,
+0x58D3F818, 0xF674560E, 0x4BEE5AF6, 0x2764C869, 0xBDBC0B1D, 0xB335C7B5, 0x0A769D56, 0x482B85AD,
+0x416C97D8, 0x845EEE13, 0x9B261AB6, 0x62ECCD6F, 0x283D7320, 0x59D6A564, 0x5AF4A2D7, 0xF213C04E,
+0xDB5B11D7, 0x51874772, 0x2CCC10C4, 0xA99D7D63, 0x00780A05, 0x15E3DDF7, 0xE6F97724, 0x95C15C64,
+0x65F318F9, 0x8FF23476, 0x24D8622E, 0xE43D7EF2, 0x410DAD4A, 0xEF8C8C19, 0x5678AF8D, 0x2E388D30,
+0x1C3DA9E0, 0x95583147, 0xF652B94A, 0x74F6B0C8, 0x89F78ACF, 0xEF7D329E, 0x015B65AB, 0x2BF199F4,
+0xECE9DF2A, 0x709D5E56, 0xC243B8CE, 0x1ED858E6, 0x6F7694D4, 0x482568E5, 0x8448D434, 0x1ED461E4,
+0xCA0E2F31, 0xBF11D705, 0x657E3113, 0x319C1B48, 0x115C1EB5, 0xFCBC9A11, 0xF0A17B5D, 0x967D021F,
+0x040352C7, 0xFA1A19D0, 0xA7A714FB, 0x4BB262AE, 0xD0261FC1, 0xC4C40C1E, 0x3E559222, 0x7E3C90FD,
+0x566FCA4A, 0x973152A3, 0x407E4B79, 0x75F34C15, 0x1FDC1588, 0x482242F9, 0xC03E019C, 0x21CABE3A,
+0x066CF1A1, 0x08EC1277, 0xE236FE3B, 0x45899DDB, 0x8D8A32F0, 0xFB4B66C2, 0x47EC7299, 0x456FF768,
+0xF1EA8055, 0x4584AB2B, 0xC8487D3F, 0x939A2B34, 0xAF924F77, 0xA6A3E45B, 0x78C18C57, 0xD7A2B2F5,
+0xBD920C9E, 0x8BC55FCD, 0x24E2B7B8, 0x801BD138, 0x6930BF13, 0xE125FA4F, 0x37D51B27, 0x2278C9B0,
+0x0E7672DC, 0x484B3158, 0x924F7A66, 0x900E9F0F, 0x26A94C4A, 0x0C8E74A3, 0x9D7FFE30, 0x976A9BF5,
+0x410CE657, 0xEA41E8F5, 0xAA217352, 0xB4B19E2C, 0x8E314C72, 0x0E4D4A42, 0x28F3B73F, 0x58DF3446,
+0x2CF85E96, 0x587D38C2, 0x9FA058C3, 0xEDC9C44C, 0xDFC6AB01, 0x255578B5, 0x9231187F, 0x3A951D10,
+0x8B6737C2, 0x762A4057, 0x5526FE29, 0x2457D496, 0xE4D783B7, 0x6E4C3A7F, 0x2E5EEBB6, 0x85FBF260,
+0xA2E821C8, 0x393E5A27, 0xD218B7DB, 0x3707AF5D, 0x587C9C5F, 0x96AE9474, 0x2502CF70, 0xCA525EEE,
+0xED9F3327, 0xD861CD78, 0x8B3D035A, 0x6243DB61, 0x9B7B5E2E, 0x4B4666AF, 0x436F94CB, 0xEA3E5D27,
+0x5F7C5B40, 0xC83C5BEF, 0x1B26C69F, 0x252B28D2, 0x104B13D2, 0xBC21E8D5, 0x937E1E61, 0x73A878AB,
+0xB84BFDBF, 0x466D14C7, 0xBB3AE474, 0x2D0E9E07, 0x823D3238, 0x804C687A, 0x59D6E222, 0x36D75399,
+0x5FE2E360, 0xBAD29089, 0x6179C78B, 0xEEF229B6, 0x14AF6558, 0x8F2178A5, 0x0518F1FB, 0xDAB2CB99,
+0xBCA9E1CD, 0xD47384F2, 0x2EEE74C2, 0x22FF1B47, 0x2BFCF0F6, 0x47DAE8FC, 0x59C87EB1, 0xB978E802,
+0x73F25079, 0x65F83B5C, 0x203C5F4F, 0x1102E653, 0x04DE828D, 0x02F19C02, 0xC4EACCE8, 0xDEC77543,
+0x38BF908D, 0x1984497E, 0x44920BD8, 0xC24E5E5E, 0x95B6BF87, 0x32AD5CFB, 0xC18B3C9F, 0xAF0CD63D,
+0x46FAE1ED, 0x094BE0AD, 0xB06BED1A, 0xA39C0FF2, 0xF68E903D, 0xA5D10291, 0x581B4DB1, 0xD113BAF3,
+0xF652989F, 0x5F9C4A0D, 0x0185515A, 0x32825126, 0x2B89CA43, 0x9C65CC46, 0x2FE3AE37, 0x34508BA5,
+0xFE8196C0, 0x00583192, 0xC73F26C0, 0x54164904, 0x5957DA6A, 0x272B57DE, 0xF48FA9DD, 0x8FB58ABE,
+0x548ACE46, 0xEC8F300D, 0x9FC9E0AA, 0xAAF3D7A1, 0x6B5F13B8, 0xFB25670D, 0xB14D5248, 0x9DF39EB2,
+0x09A417B8, 0x226FA0DD, 0xB11A5D07, 0xC7AFF312, 0x087BB6DE, 0x21532B1A, 0x6E96BE83, 0xBFFC52D0,
+0x6406CCEB, 0x91C9E60A, 0x72AB72D6, 0xB5874D10, 0x79013671, 0xC526092E, 0x1CBF1506, 0x9431BFFF,
+0x19B04784, 0xE40D347C, 0x449467B8, 0x44F55738, 0xF773096E, 0xF2932AD2, 0xA6CF8CB2, 0x64039F5C,
+0x9F4A33BE, 0x915E66A6, 0x21AD7BD0, 0x798201B6, 0xF6774AEC, 0xE7407D00, 0xF7E1649D, 0xDD4F11EF,
+0xDB172ACC, 0x3F1BE6B5, 0x0C983923, 0x000008C0, 0x9A210100, 0x9F070200, 0x129EC7E0, 0x9FD61C71,
+0x35B854F5, 0x85A9114E, 0xD3AA3943, 0x162275E8, 0xDDA5B668, 0x9C49CB02, 0x746B841C, 0xB2C3C0C1,
+0xE455C6A7, 0x04E52EA3, 0x8F402B4F, 0xB17F1603, 0x8BC31722, 0x9A073E03, 0x26E01A4E, 0x740404C5,
+0x72AC53B4, 0x65480F6D, 0xCCA2DE5A, 0x7616594B, 0xE1301D4A, 0xE77658C3, 0xD5950EB9, 0x55C4DDC8,
+0x7EEB4EC8, 0x1E7E7060, 0x951D8FE1, 0x78761B36, 0xE2D8D326, 0xE57E8F9C, 0x6090B749, 0x5A2BCEA5,
+0x4FFD5FBF, 0xA3D1CF1B, 0x2104FD03, 0x34038688, 0xE03B8E6E, 0xEB4FCC88, 0x760C3C8B, 0x2B93C11E,
+0xE36BD179, 0x7AD72B0C, 0x6F7307C5, 0x592A16D8, 0x4B05F78E, 0x5BA39EED, 0xDB02A3A6, 0x0058AA73,
+0xBCC550A0, 0xF91126E2, 0xA46873DE, 0x4FEFB645, 0x2F14D1F9, 0xFA5B7C63, 0x0E21023E, 0xED90BA17,
+0xB98E1806, 0xA82E985F, 0xAEC884B8, 0x1A1BBEAB, 0x20CB8941, 0x901712F2, 0xD6F04268, 0x602271BE,
+0xCA2590C6, 0x4023820F, 0x14285C2C, 0xCBEEBAEC, 0x4583B102, 0x254C030B, 0xCD0A5299, 0x14866880,
+0xD1997D2C, 0x2251B8F9, 0xC251EEF6, 0x93DFBC69, 0x0247E307, 0xD7DF9AD7, 0xB44C9398, 0x062B8B28,
+0x2A54FE2B, 0xCF919949, 0x44727A79, 0xDA114D0C, 0x3422DFDE, 0xE1A1A318, 0x6CC80095, 0xE9813EB3,
+0x540F62EF, 0xEEC6F776, 0xDEC9C39E, 0xE239AE25, 0x503E1E19, 0xC951836A, 0x32F38488, 0x482D12E0,
+0x71651D12, 0xF471E96B, 0xE604EAE5, 0x9FBB4F3F, 0x9E386F6D, 0x600BE055, 0x37769BF0, 0x943559EC,
+0x4F1F2395, 0xF2B0259D, 0xE51C45D6, 0xCFE9584C, 0x407955F7, 0x6D080D6F, 0x739FCDE8, 0x479917A7,
+0xFFC547E0, 0x9B1CB891, 0x3A95371C, 0x82B155EC, 0xFAA6C684, 0x369FB209, 0xCBAD4760, 0xFDCC36BF,
+0xA8584526, 0x7DA56765, 0xDD4061F4, 0x26FDD574, 0x3EA934EB, 0x4AEBE526, 0xCECB3348, 0x0CC0DE0E,
+0x55D55445, 0x11E5D024, 0x46055AD1, 0x3891A9BA, 0xF01F01C6, 0x0A962163, 0x9B73060C, 0xAFA8E0D3,
+0xE0CC270A, 0xEC2B4B6C, 0xDD2AE36D, 0xB33B0FDF, 0x514CCC3F, 0xF1838E62, 0x62C3CCF0, 0x554B1425,
+0xCFA2DB1E, 0xB67FF607, 0x67F9E700, 0x6C9B549F, 0x896E9999, 0xFBDD3D72, 0xFBCA630F, 0xC6B2A5EC,
+0xB0F90C74, 0x50C10BF4, 0x11526ED4, 0x33AA1183, 0x65EABF4B, 0xC320EAAD, 0xE56B3FF8, 0x6DCDF0C8,
+0x925428D0, 0x258DF266, 0xC5813672, 0x36EDB070, 0x2297EC4E, 0xE7C7BF14, 0x79F76B6E, 0x5C662BA4,
+0x98CC228B, 0xDB5458E2, 0x67FF647C, 0xA6BF97F4, 0x63059562, 0x84610CEB, 0x6170862C, 0x5B7FA63C,
+0x662A0C5E, 0xDB53941D, 0x22842827, 0x6EB34B77, 0x3279ADA8, 0x81599F27, 0xF4A26ED6, 0x07B63D16,
+0x23B8014E, 0x498EA618, 0xF2DED6B1, 0x5C60F764, 0x364B1374, 0x2E6B8E1D, 0x876F395E, 0x555EFB22,
+0x7720AD4C, 0x84117D29, 0x27801F9C, 0x58026155, 0x0AA687A8, 0x9251D043, 0x9CEE4AF9, 0xDC2B16D7,
+0x6FCD77CB, 0x64920656, 0x6E84967D, 0x4B540FAA, 0xA044B3B0, 0x21A9A59C, 0x2AACE626, 0xBA4F2C43,
+0x394A7711, 0xBBA439B0, 0xD05657A9, 0xA5AE8D99, 0x0704469B, 0x56A1BE44, 0x6C261903, 0x7AD571CF,
+0xB09226C9, 0x94725EC0, 0x1508F01B, 0x44294695, 0xB85116E0, 0x4C5F35B4, 0x11153953, 0xA12A0FFD,
+0x458A85B8, 0x014C1093, 0x9D159574, 0x3AC03543, 0x10AEDD05, 0x02839E3C, 0x19F46C07, 0x008C91C9,
+0xD80D3C74, 0x005BEB20, 0x2825D84E, 0xC15CF62B, 0xE5C2BFBB, 0xD5E3C031, 0x73889616, 0xB0FB3869,
+0xA888DF78, 0xAF03F285, 0x7413E4B4, 0xF4A7CBF7, 0xAC2DBC7D, 0x5BE89A40, 0x1C62DD9B, 0x1B068A27,
+0xAD9EF368, 0x0178D027, 0x47AD834A, 0x55C2B4A7, 0xA546A209, 0x28B24AD1, 0xC8ADE119, 0x6D455BD7,
+0x3AC04C47, 0xF5B96539, 0xCD2632C3, 0x48CFAB41, 0x0DA0A38A, 0x6BAD7BF0, 0x4584A387, 0x2343998D,
+0x50048E21, 0xE23E3823, 0x1BA5A0A3, 0xAAC347AE, 0xA4C1DA7B, 0x96707C4C, 0x725B8E7F, 0xA54D8DA2,
+0x17ED9764, 0xC83DA761, 0xA6BD646C, 0xED288328, 0x2FECD0B6, 0xCFF6E368, 0x0EBFBF5B, 0xAA59DCB3,
+0xC243ED26, 0xC4D3F1B7, 0xFC8177CA, 0x029BF41E, 0x96861E27, 0x6C240982, 0x5AE0012C, 0xA42CB1F9,
+0xDF5C6885, 0xE87FC846, 0x9D75D6D5, 0xCB132C2F, 0x340A9B77, 0x693FDD9C, 0x2A1F416E, 0x889CB200,
+0x18D6EC01, 0x62B267DB, 0xB0AC79F1, 0x21B922CF, 0xE00C21FE, 0x754C3E59, 0xA0754289, 0xCDD97207,
+0x10ACDB1C, 0x200DD319, 0x48B8B0E7, 0x256C8134, 0x78B3EA3A, 0x40AD0886, 0x59A8E4BB, 0x6F824B99,
+0x5E3585C3, 0x7930E7C6, 0x6E3AA551, 0xA1689D2D, 0x443CC544, 0x0E45D9E9, 0x3CEB711E, 0x68B5A86C,
+0xBAEC6C09, 0x6D4FE96D, 0x78A3B0E4, 0xD399E228, 0xC52E3435, 0x9DE608F7, 0x84EDCACC, 0x3987C5ED,
+0xE3132C9B, 0xE27CD17A, 0xACCC0AEE, 0x96BA9135, 0xA495E993, 0x5C4B6E9C, 0x8DD6B69C, 0x26A5138B,
+0x7398B4DB, 0x5FBDE613, 0x22EB3A06, 0xCF0CD49D, 0x99044DC7, 0xBFFB23CA, 0x156BAE27, 0xDD801758,
+0x31B4C25F, 0xDCAD4A93, 0x4D07D191, 0x43FF18B7, 0xF80DBF5E, 0x10E849A6, 0x36BE3F9E, 0xC50014F3,
+0x5968387B, 0x0DC1DC97, 0x7F58D21C, 0x491EAB61, 0x174F9089, 0x1373D3DD, 0x2F7B8A60, 0x12D864B7,
+0xB4BB44C0, 0x861CB87E, 0x9868FBBE, 0x07784A82, 0x5A54D469, 0x18822B29, 0x0CEAE87A, 0xA158E699,
+0xD392373B, 0x6AAD229E, 0x539572BB, 0x8B6089CF, 0xDC5DEEE7, 0xD13DDBBF, 0x00F39224, 0x050C1322,
+0x03DD4CDA, 0x2F51EF1B, 0x8F99A814, 0x43BBE8C8, 0x67E6531B, 0xE61436F2, 0xEB192E48, 0x9DE410C2,
+0x1EC10746, 0x8129FFDE, 0xF498C6CA, 0x3D40BD1E, 0x0120542A, 0xB65C7A2E, 0x006BD5E3, 0x6AC25FE5,
+0xFB72FAF1, 0x035EB138, 0x54CDA038, 0x6DEE8281, 0x2300C7F0, 0x810EFE6B, 0x0914FB76, 0xA0E30A53,
+0x7A99B9ED, 0x46C0735F, 0x4772D145, 0x877618BE, 0xEA44C25A, 0x2DD48144, 0xA9076E62, 0xAD865E34,
+0x76B48185, 0xCECDBFBC, 0x10D24598, 0xB90F9E43, 0x41C80C1E, 0xF2E8E898, 0xBAEE8A67, 0xB7CB69FB,
+0x02696F8A, 0xA8BFAE37, 0xD957CA7B, 0xAF7B05BF, 0x142395B9, 0x677973D7, 0xD20F6828, 0xA1B7B880,
+0x6DB6CAC7, 0xE285ECED, 0xC654AF72, 0xFDD40340, 0xF932D424, 0xEC0CE0EB, 0x50BBBA8C, 0x52EFFF38,
+0x58818928, 0xB86DE89E, 0x2F2177A3, 0xD9AB7E71, 0x88B990B2, 0xBF6C5493, 0x8C1EDE55, 0x1CC5B771,
+0x2358F7CE, 0x513AD66F, 0x4BCFA3B1, 0x0EB6DC7B, 0x5AC680FA, 0x2D83D423, 0xAD83EB34, 0xFECB0BDB,
+0x7BDD23F7, 0x4E37D6E1, 0xDB055234, 0xD790EEC3, 0x15650D77, 0x8BF2B30D, 0x36C9EB7D, 0x57DFBC47,
+0x678A6778, 0x4A38674E, 0x4697E42F, 0xDFA7FECE, 0xCC8CC0FA, 0x1B970C6C, 0x088FB592, 0x6B22838D,
+0xB34ABD01, 0xA8BA4C33, 0xEF3215A2, 0x29EB52E7, 0xD6D58E6A, 0xDB3B3A92, 0xF2F59977, 0xC2BA6CD8,
+0x11D8191F, 0x33D4355E, 0xA9034BB6, 0x00927E18, 0xD5E76A36, 0x6D671217, 0xDC39D755, 0x4EF63D74,
+0xBA39846A, 0x298AD9CE, 0x0C47E255, 0x5ADDD3DD, 0x07CF01F6, 0x9FC9D477, 0x551631B0, 0x19ECD2F8,
+0x2F41E01E, 0xE880C103, 0x5D0F4D7A, 0x78B3971C, 0x7CFF6E5C, 0xCEB35D32, 0xBE1A21EA, 0xABE4106E,
+0x3A74EB93, 0x14B2CF2E, 0x4148C1B9, 0x0E62247C, 0x0216DBB0, 0x9BF33BB0, 0xEAC8AB1F, 0xDE73EA5C,
+0x1A4F862F, 0x00BCCA45, 0xBED3B754, 0xADA81865, 0x9B3BE39E, 0xCDC7843C, 0x070E59BD, 0xA726E313,
+0xDB56FF8C, 0x463CA40A, 0x16178E80, 0x5E7B2B97, 0x631BB142, 0xD5029764, 0x5AC69230, 0x5E35F40C,
+0xDA099D5F, 0xC6BCB4A7, 0x8296BE0B, 0x7445CF29, 0x9F0B0F5A, 0xA0E16E41, 0x501746A1, 0xE76373BC,
+0xB2C155EF, 0xA95780C5, 0x802CDB2E, 0x092CDB8C, 0x41C273B2, 0xA64AA240, 0x5F042801, 0xA099C7A1,
+0x85B4A4A4, 0xEC8193DE, 0x8D04C884, 0x3DB9379B, 0x31B8486D, 0x85E785F2, 0xC9E25344, 0x88707C52,
+0xF5ACFEBB, 0x0B93A760, 0xCEFBCB53, 0xB58468E7, 0x6E4A45AC, 0x07D82112, 0x1DA43FC6, 0x8C1D3470,
+0xBE85EEA1, 0xEFC6E230, 0x83CE3025, 0xB2646525, 0x57121ADA, 0xD2310907, 0x0703CDD5, 0x5C0EE84C,
+0x6F4009C1, 0x734A4CEE, 0xB3A7F2BB, 0x52E20E96, 0x93DE415F, 0x1D05F802, 0x1E14DAA5, 0x77BF6416,
+0xC57A90E7, 0x5C8468F0, 0x54812F8D, 0xBD207B83, 0x1957C35B, 0xB0C4ECA5, 0xA5195461, 0x9AD869ED,
+0x46712063, 0x14545F55, 0x7E7ECD5B, 0xDED46EAE, 0xE582A8ED, 0x32137110, 0xDD723754, 0x863E8E20,
+0x3957C2B1, 0x1C65D6E3, 0x239CACF9, 0xABFBFEB5, 0xE50C56C4, 0x7F879181, 0x2042C501, 0x901BA6AC,
+0x21EB0E03, 0x807ECE56, 0x8D0D2463, 0x5F4D2A09, 0x0ABA8D42, 0x130D4074, 0xF2B04201, 0x35C16BCF,
+0x5E241802, 0x5F4E662F, 0xEE821672, 0x563CE651, 0xF77F6250, 0xBE786D5A, 0x1006E0C8, 0x2F60E123,
+0x832E38B8, 0xC1FDC84C, 0x9C5D65DE, 0x4E0913B2, 0x4C109F53, 0x90689CA4, 0x31E5FF2F, 0x961D542E,
+0x358CA645, 0xD3AA430E, 0x48B39AB0, 0x12844D09, 0xEA76268F, 0x3BC7B6E6, 0x28459FE5, 0xE432AD72,
+0xB0BB6354, 0x66061E60, 0x219B9B8D, 0xA8953366, 0xF4425C23, 0x33622A5C, 0xF94702B4, 0xA32B2621,
+0xE6991064, 0x4AE548E2, 0xEF65F1B2, 0xDDCD0A95, 0x4C5BECAD, 0x04EE544E, 0x518376B9, 0x0FD9E3B0,
+0x3A3DFBCD, 0x41E2B4A0, 0x50B81764, 0x272ABC5F, 0xD240E0F3, 0x9C63AA68, 0x66236CCC, 0xBB34602C,
+0x297A1800, 0xAEFCDD66, 0xAD92B64E, 0x91403A4A, 0x528AE7C6, 0xFAF88ED9, 0x85CBA121, 0x4EB61DA2,
+0xE4AB7236, 0x3C8D5464, 0x812357BC, 0x9AD1B660, 0x498D228F, 0xB04491DC, 0xAE945F56, 0x223AD23B,
+0x75129BE9, 0x338173AD, 0x41CC00A6, 0x2F2A6252, 0xECC316C2, 0x0371D8BD, 0xDAAE0F9F, 0xEDD0B5B6,
+0x2B32A649, 0x706F88CC, 0xC261BE17, 0x9D221494, 0x27B1D496, 0xE2242648, 0xF5A6F18D, 0xC7DE4887,
+0x258CFA6C, 0xF784CD94, 0x3E9DF1D3, 0xA3F29D14, 0x4921594D, 0xD7C961F7, 0xB969C20C, 0x21006F7B,
+0x16F54698, 0x391DDDB7, 0x19B9C59A, 0x59FEAF34, 0xC45C0B9E, 0x862CBF30, 0x329B7EB4, 0x48A6FE57,
+0xB695A762, 0x65BDDB05, 0xEED1AB3E, 0xA9EEC869, 0x40D984A9, 0x5581849C, 0x28C96E16, 0x43697E66,
+0x298309AE, 0x41BBBB1A, 0x26AE6018, 0x2860A2B9, 0x7050405E, 0x174B53B8, 0xA7469D70, 0x36100E4A,
+0x36874813, 0xB138FBD7, 0xE7492B76, 0x0BB09081, 0x5B8F0201, 0x65650DED, 0x99FD3DFE, 0x47ABBC6E,
+0x7E63EA5A, 0x69689CBA, 0x318496DA, 0x538DB93B, 0xD9A481A6, 0xC0F494BC, 0xE23EC08E, 0xD66E8F8C,
+0x79EAEAE3, 0x6F39B978, 0x662E22A0, 0xC723C785, 0xB5336010, 0xA7491937, 0x18AAB73B, 0x27FA312F,
+0x7C46A16A, 0x35741B71, 0xF212F79A, 0xFD198726, 0xBE4C9184, 0xE45D292F, 0xD28A1784, 0xEB51D7D5,
+0x7057E527, 0xA41C8C88, 0x1E3A24D7, 0xA3E62952, 0xE5881BEA, 0xC4827625, 0xD8493096, 0xFB9C5EE8,
+0x99F8EC3F, 0xC86C1D40, 0x1055908F, 0x8C940517, 0xA931914C, 0xADD19721, 0x9D47BA84, 0xE5401FAC,
+0xBF4B278C, 0x7CC2B848, 0x3876E85F, 0x8CABDD8A, 0x6038142D, 0xAA7DA8B7, 0x4E1D25BF, 0x17B3F4D2,
+0x1CB977CA, 0xDC05BB36, 0x0036CD43, 0xE3FB50A0, 0x4B369D79, 0xA8148226, 0x34C75D88, 0x9102015E,
+0x4170EEBF, 0xCEC692AD, 0x2A1D40E0, 0xBFC47716, 0xCA29DE04, 0x61977603, 0x236D7565, 0x36780804,
+0x0995B85B, 0x07FF18CC, 0x8B3E8D01, 0xE6BF2CB8, 0xF6AEAAD8, 0x371725D2, 0x602FB0DF, 0xA82EB592,
+0x49C9F24A, 0x1A391EE4, 0x29DE69B8, 0x70B63007, 0x094A4326, 0x29341117, 0xEAA1FD95, 0xA627588A,
+0x1D554720, 0x80959E35, 0x9B2C825D, 0x0823D7F4, 0xD4A74473, 0x9E341D30, 0x2A5F1A0B, 0x04B492EE,
+0xD41BE4A7, 0xE036ACEF, 0xEFC99DE9, 0xDC8264A7, 0x35DB4B63, 0x83597C63, 0x620FD0C1, 0x0EB960C8,
+0xFE897557, 0x48AF12E0, 0xEA6C9E65, 0xEFBED647, 0xD39EA222, 0xBCBB8BA8, 0x617DD3C2, 0x2600D556,
+0x620AF424, 0x062A3F17, 0xBBFE023A, 0xFACD8287, 0x0A03C960, 0x8A83F917, 0x5CDBD870, 0x97BFE80B,
+0x5E4687B2, 0x9392E619, 0x7B1F2881, 0x123FD3B7, 0x3D3B7E43, 0x33A77A26, 0x7DF92947, 0xEBB02ECD,
+0x70C02E39, 0x940E07B0, 0x52A40347, 0xFDB7B3BF, 0xB2EE9293, 0xC320C452, 0x9F3FF686, 0x7345A86A,
+0x7C5765FA, 0x7FF1DDE3, 0x22EC2A26, 0x02F4B56F, 0x980F691D, 0x116918DB, 0x14523B02, 0xCEB18271,
+0xDE07B825, 0xA4912D4F, 0x29B2283F, 0xE00CB179, 0x1F48D873, 0x6C4E3CF5, 0x64C7F84C, 0x36017CC0,
+0x5FE3D452, 0x98D20215, 0x63A832FA, 0xDB4C0306, 0x15EDC3F3, 0x2F2E670E, 0xD150FC4B, 0x513AABEB,
+0xF9E114D1, 0x6652C979, 0x75344A9A, 0xAC56C3D4, 0xF9C1298B, 0xB9A12A22, 0x66E2D6CF, 0x9100C609,
+0xA7EEA69D, 0xA863AE5D, 0x823FB194, 0xBD183679, 0x025809CF, 0x6E0536DC, 0xEDF79F20, 0x72486F8D,
+0xF0C6596B, 0xE5C589F1, 0x1DD48376, 0x1A2B6AAD, 0xBF4F02D7, 0x9EB2AFAD, 0xEBB94CB2, 0xC7903914,
+0xDAC3F9B1, 0xAC01BE82, 0x7C754055, 0x37B9F1E9, 0x99F57D3A, 0x80D446CB, 0x3E270A0B, 0x0855C7F6,
+0xDFD2DD47, 0xC352A25D, 0xFF4E53B6, 0x39272164, 0x4A377B23, 0x9ACCD35D, 0xEAFF6A31, 0xFD91A21F,
+0xA8B93F1A, 0x52E73309, 0x76D0C766, 0x4A7ACFE5, 0xAE266701, 0x64798809, 0xB80FCD12, 0xED05248C,
+0x1899C9E9, 0xC01DA859, 0xB68AFE79, 0x3A77DDB8, 0x1A099A99, 0x5B69B9D4, 0x43B1862D, 0x9D6A0376,
+0x70D9400F, 0xD35D7990, 0xC4C8D908, 0xBE598D24, 0x4F193E0A, 0x784BDD89, 0xF7BE7671, 0xD1CD64E9,
+0x76A12A4C, 0x93D9D179, 0x5AF8E95F, 0xEBD51315, 0x8E796913, 0x8E85AA1A, 0x1FA209DF, 0x14980861,
+0x3B2651D1, 0xC22EFEDE, 0x2A9976C1, 0x54251267, 0xB0957608, 0xDFBF2473, 0x4F802CC9, 0x8128D6D5,
+0x9F1DAD95, 0xDE67A7AD, 0xE962C522, 0x4A1417FB, 0xEAEBA076, 0xF153E9B5, 0x65A6A08D, 0x1187F610,
+0x277BA74B, 0x58E70AF2, 0x1FDE1245, 0x75835B91, 0x69E13BCA, 0x75E3F2C3, 0xEFB3134B, 0x45A8FCBC,
+0xFC22DB07, 0x3F557AE6, 0x4F6DBDA7, 0x55EF9DA1, 0xB1D582FC, 0x152B5902, 0x11A47828, 0xF9D2542C,
+0x7D57B8F0, 0x2BEF0F65, 0xF005030E, 0xAF1F435A, 0xFEB1F8B9, 0xB57D5FDC, 0x5D7E189B, 0xB66A0DE8,
+0x1D308CC4, 0x6F796D23, 0x1BDF7237, 0x54605C06, 0x24A9E239, 0x64C1110D, 0xA81746B1, 0x6E583B9F,
+0x774A324F, 0xF3917D82, 0x89776B39, 0x4864BC56, 0x9BC0EC67, 0xAABA48E0, 0xA4703381, 0x568C7B1E,
+0xB444FC76, 0x874F49C1, 0x64E2A7EC, 0x017F8708, 0xA531260E, 0x8D777358, 0x41710F2D, 0x6FB6664B,
+0xB31CCF30, 0xC0E7DAD7, 0x49D67347, 0x123253DD, 0xB2D29DC3, 0x85E82CA7, 0x4F7AB683, 0x6BB42731,
+0x32D44D61, 0x34EE0F3B, 0xB66A4B56, 0x59CE618E, 0xFD090F1C, 0xDB32F85D, 0x71B895C5, 0x0A4ACB88,
+0x363027B9, 0x318FF6D4, 0x54EF04CA, 0xF8DBA87F, 0x1018D9B8, 0x29507931, 0x9C6D25D4, 0x30D42902,
+0x11968AF7, 0x03CBCAEC, 0x18941B13, 0x74C62E78, 0x99371E67, 0xBDAE5EB6, 0xE3769168, 0xF30B8D3A,
+0xADD68B01, 0x1BF76D52, 0x71BE2149, 0x7452DD0B, 0x87CCD2A0, 0x89451AC4, 0x814AEF7E, 0xF929351F,
+0x29DB6B9B, 0xCAF9A714, 0xB37138E4, 0xC79D6292, 0x16D9951A, 0xB87EBA36, 0x87615027, 0xA5568E3D,
+0x2F3F392C, 0x88933758, 0xE29DDBD3, 0xB4B0CF01, 0x53D8595B, 0x72D57713, 0xC4B84B2F, 0xF031E68E,
+0x6DDAFF41, 0xBD3D1F5B, 0xA0D2307B, 0x3F06B2C4, 0xBCE53847, 0x476E1936, 0xEAA1DCEA, 0x7A0A4475,
+0xEDE1D445, 0x89D597DD, 0xE89BE9A8, 0x71ECCDE3, 0xE1FF95A2, 0xCFD61F4A, 0xC2A1323E, 0x7ECF177B,
+0xD28BB107, 0xF155FEA9, 0x15E2B233, 0xEC6900A7, 0x983DEDE1, 0x9386FA24, 0xAC53B49F, 0x7A013C95,
+0x7C68B002, 0xC2CBFDF7, 0xB85D8823, 0x00EB222F, 0xF4C60A14, 0x3F490BB1, 0xDD8CB84B, 0x7053F565,
+0x46D295E8, 0xDCF328C9, 0xB853B7D0, 0x50BB818A, 0xE83412CC, 0x10D7E2E8, 0x868EF7BD, 0x0025FECB,
+0xF09F1623, 0xC50C9886, 0xCAAC1F23, 0x0FC6E8F6, 0x2C11F8B6, 0x026C68D3, 0xD888CD08, 0x04BA0E86,
+0x1537544B, 0x312606D4, 0x49357316, 0xC33ED2F9, 0x156C0C37, 0xCE154F4A, 0x6ABA9733, 0x83CAFF93,
+0x8DBF8A24, 0xC3BBB9C3, 0xF4132AC3, 0x5DAD1B28, 0x537FB769, 0xC885A903, 0x4195B57F, 0x1D88EBFF,
+0x226A9FF2, 0x03DDD52F, 0xF8DC2246, 0x0EBCE92C, 0x95519FF7, 0x2D320F06, 0x5AA73160, 0x605C943A,
+0xCBCF322D, 0x133C44C0, 0xB27B9D9B, 0xE6B78818, 0xDD1D4CB1, 0x538DA8BD, 0x8BC6F4ED, 0x62A59B48,
+0x93C2ED14, 0xB23AA414, 0xD9A176F5, 0x0B2C0396, 0x441A9DD2, 0x30A72B3E, 0xF089DC58, 0x1655772B,
+0x9B8681EA, 0x22DF73CE, 0x689EA1DE, 0x2B841EB5, 0x0B6A5B78, 0xBD9BBC65, 0x7886DEA5, 0xB9269F4B,
+0x950D9FE3, 0x551A1F05, 0x726898F9, 0x4DD4E3E0, 0xB089163E, 0xB41EE26F, 0xDF49CD33, 0xB235409A,
+0xDF805A59, 0xAC64E9EC, 0x89E67101, 0x0B2FEBE6, 0xE03EB84D, 0x3156EB98, 0x0C12ED42, 0x3559AC21,
+0x2FDE442C, 0xAB467C81, 0x827354ED, 0xD92DEBAB, 0x3698FE6D, 0x8C7CF988, 0xCF35ECDB, 0x290F2A7B,
+0xCF110A03, 0x9B68689F, 0x700C7527, 0x447C746E, 0x43A9C81A, 0x9231F37C, 0x2A3D1D2D, 0xCBC8AAA5,
+0x06CD2581, 0x2471DEEF, 0xCDB535DD, 0x0A73AB9B, 0xBB2FC65F, 0xA52AA8F9, 0x5F45C798, 0x8C3E6CFB,
+0x73331D90, 0x19567CF1, 0x029967C8, 0xC2C9B663, 0xB05319A6, 0xADA28067, 0x484E02BB, 0x1C7A37DF,
+0xA90E92AB, 0x70413C97, 0x52887076, 0x21548045, 0xC9E65CCA, 0xB6480B13, 0xF2157AC2, 0x808A14F4,
+0x7C4115F8, 0x01000000, 0x04009E01, 0xC07F1203, 0xD692E1D0, 0x2B2DEB5D, 0xC4257CE6, 0x6AB202EA,
+0xC764DF37, 0x262EDBA9, 0x00003A95, 0xB9BD352C, 0x29F3DD22, 0x4DF2E342, 0xF97F9E84, 0xAB99AB54,
+0x924DFDCC, 0xC76A4FBA, 0xB75A45DF, 0xFED1A253, 0xFCAC4242, 0x25C1C042, 0x11C1A7C9, 0x2F0A97FB,
+0x741C6FF0, 0xD1ABD189, 0x8A1E935F, 0x60728A1A, 0x0DCCCFBD, 0xD803176F, 0x521FE661, 0x3DEC25D5,
+0x1AE1BFFB, 0xB6859824, 0xFE66F390, 0x7CCCC352, 0xC03F6186, 0xDC687A4E, 0x3A21EC28, 0x6BDD4847,
+0xEB9FA1AA, 0xCD4179CE, 0x860DF47E, 0xF1138004, 0x0DA52BDE, 0x8BB845C5, 0x157121C3, 0x703C40AA,
+0x6FE3D35C, 0x7A845FC1, 0xEF74786A, 0x77936F14, 0xE6BF28E9, 0x1F0F5983, 0xF26C5B0D, 0x8D9B7DDB,
+0xFAA9303F, 0x05BE851F, 0x2B55F16F, 0x854AA778, 0x4A76F79C, 0x7ED9D78A, 0xEF335519, 0x8E1E610A,
+0x7CF89C68, 0xAA8CF82D, 0xFEB50AAE, 0xF50F51FA, 0xD3870CCE, 0x47EACD70, 0xDB14EE7F, 0xC110A06D,
+0x171A4887, 0xF8C6130B, 0x1CA00FF8, 0x54A48849, 0x4D45B702, 0x22F61CF4, 0x445E7703, 0x482D2FBC,
+0x4484A95D, 0x454E69D3, 0x41750902, 0xBD0BA88E, 0x78B8FE2B, 0x5E62070E, 0x2AB42174, 0x73AE43A1,
+0xAAF234DE, 0x37B4F635, 0x68C553F5, 0x23FE39F8, 0xE7DBE9BF, 0x43C5ED88, 0x1BBE3823, 0xCF3F834F,
+0xB5B54A60, 0xC5D684B8, 0xBE75E611, 0x20E5BD96, 0x9077EBA6, 0xE13960AF, 0x78EE7096, 0x9B981B6D,
+0xDB31EBDE, 0xDC0CF02A, 0x7471002B, 0x9C788BD5, 0xA9327D75, 0x08797DD2, 0xE65C4667, 0x37D2EAE8,
+0x1334361E, 0x023E1EEE, 0xD4B5745F, 0xC9396FA6, 0x04D289B5, 0x581B990B, 0x9EB256E5, 0x2573771C,
+0xFD5DE6CB, 0xC9C019C6, 0xC4115DA0, 0x6CC76903, 0x199E0DF7, 0x63B289CB, 0x37B33DAD, 0xA003B1F8,
+0x618441E4, 0x50C60885, 0xAFE1444C, 0xF2673782, 0xEC8C7A2B, 0x0C11491E, 0x92FF1395, 0xD035E8B0,
+0xAB612282, 0x4E146FD4, 0x4592229C, 0xD2892831, 0x2B345A24, 0x7AB51E68, 0xD437B10E, 0x9DF611CA,
+0x6E3A223A, 0x5EBD23EE, 0xD6B1DCF0, 0x97D7BD68, 0xE7134E32, 0xB5829F36, 0xA90E2579, 0x7C04F8B2,
+0x80A52DFB, 0x5B153AF9, 0xB82A4BAC, 0xBFC33F25, 0x5C8DFE3E, 0x25A3A25F, 0x00B5C967, 0xAC691A27,
+0xE510A407, 0x6EBE9310, 0x4419D97F, 0x3DBD4FD3, 0x2AB7FFD5, 0x34F9969A, 0x33E8B232, 0xC54DD652,
+0xFB3F98BF, 0xCB926F72, 0x880CE705, 0x39FCB19B, 0xCE13E0AD, 0x25D5050E, 0x0EC1F9DC, 0x5E99FABE,
+0x1F20D876, 0xAA223217, 0xF9577225, 0xAC4527AB, 0x78031545, 0x0E502DF5, 0x517E2712, 0x0BA5DF0B,
+0x0A7ABA52, 0x2CC2869D, 0xA7CE8D9F, 0xCE4C6490, 0x06E841CA, 0xB7C6560E, 0xDC2AE452, 0x58ED46AE,
+0xA2EA6A13, 0x5B312BC1, 0xDA054280, 0xB5AFAAEA, 0x60A64609, 0x47E50302, 0xA06E3E02, 0xCDDF141E,
+0x3B9F7EED, 0x8CE480E2, 0x39C1A150, 0x8B0C3EF2, 0xF30D6CCF, 0xB200E49A, 0xB841E928, 0x1F227532,
+0x4EC2ED21, 0xEC0C4AA1, 0x0EC82C2E, 0xEDC9D708, 0xB3882EBA, 0x7CC76ED7, 0x19C93B41, 0x2DFD6DC9,
+0xB8DAAF8F, 0x1A86120F, 0xFA3EB9FC, 0xFC71796C, 0xD1CE266C, 0xB630F279, 0xB51273D3, 0xEABAF82F,
+0xFB5340F1, 0x23042AE3, 0x96976895, 0x09C9DE2B, 0xF53580A8, 0x3C80F14E, 0xF6F8CAC1, 0x6824ED12,
+0xE5D69F89, 0x215BE8A4, 0xC8FF5396, 0x888C6F2E, 0x2CE0C402, 0xC50221F0, 0xBD0B0DB8, 0x0A02CC1A,
+0xC58CFF67, 0x0809DEDA, 0xF761CF1A, 0x0C8796B9, 0x0A3650A7, 0x39DA52C2, 0x1F3F2C01, 0x526E54D6,
+0x1D58B0A6, 0x67DF2067, 0x3A52ED4F, 0x33396CCB, 0x5F0822ED, 0x01B26F07, 0x68B45E2C, 0xB6687415,
+0xBA3B22DF, 0x00B17BB8, 0xC3CBBACE, 0x2ACAE3EE, 0x89375087, 0xDD9C5226, 0x9D4D8CCB, 0x53801E8F,
+0x38B09D53, 0x73FE14DF, 0x01CA0B19, 0x4B41E093, 0xC9DA1A09, 0x569A273D, 0x0A53BEA6, 0xE09154D1,
+0x2225A782, 0xDCDD7090, 0x31B8522C, 0xDA968274, 0x55619FFC, 0x8FE7084A, 0xF33730A0, 0xC980A94A,
+0x09BDBEBD, 0x8B19074F, 0x3045C69E, 0x2DE83580, 0x990260D8, 0x6918E38A, 0xD27C659C, 0xD512B769,
+0xA4CEBE27, 0x232483A3, 0x1A63603C, 0x730349EE, 0x443C909C, 0xA2D2DF3D, 0xC2410DE2, 0x2DD6994D,
+0x085C1A83, 0x639F0649, 0x4F00F727, 0xDB4F8B27, 0x0C46895F, 0xA5542B51, 0x19E656A5, 0x49CDE6BD,
+0x7C72326D, 0xF8A525D8, 0xDE531F0B, 0x95D76AFE, 0xAA8AFFFC, 0x5FA58042, 0x07348BEF, 0x266F71EF,
+0x7C961CAB, 0x77810F0C, 0x433DE1EE, 0x1B769999, 0xC37E614B, 0x7604219E, 0xA0FBF244, 0x17C81467,
+0x39F1F6FF, 0xFDB9D41E, 0x14BBCBB2, 0xABD280BD, 0x06152226, 0x7B827948, 0x8E2DDFF6, 0xFB23E525,
+0xEEBFDE9E, 0xD1C61C99, 0x0562260B, 0xBCAB4713, 0xA6F5DEA1, 0xF6FDA83D, 0x210C5755, 0x55042C1B,
+0xB9095805, 0x8D77E2DC, 0x0B64B296, 0x645FE6D1, 0x38BEFD90, 0x0818B342, 0xAE61B1E9, 0xE1F55B35,
+0xC678C6CC, 0xAFFC6F6D, 0xBFACF4B7, 0xD9C63237, 0x8842C52C, 0x77004659, 0xBAA1B0C7, 0x3B4E0DE5,
+0xA229C7F6, 0xC39FAE0E, 0xCEEFD37B, 0xBD4C8C10, 0x51F114EA, 0xD6BC56FB, 0x78E78328, 0x5BBA5515,
+0x219F80BE, 0x789D1566, 0x3872D16D, 0x806BA9BF, 0xEBA9565B, 0x4EBF4018, 0xC3E8D710, 0xCFFBEE79,
+0x1CFB2232, 0x2900C689, 0x4982C4AB, 0x10007E8C, 0xE488DC04, 0x7CD160CF, 0xD2B7D932, 0x2905A2FE,
+0x3A5AB1CB, 0x6ADA5D7F, 0x3AA75F09, 0xE8B9959F, 0x80B7FBFB, 0xBECAAB62, 0xFFE2935C, 0x4F7FF807,
+0x6E27F8D1, 0x744BCAF6, 0x5155066E, 0xC97C07F5, 0xDA213E1D, 0xC1A5C7DD, 0x992A0A35, 0x5963CC08,
+0x2B91C53E, 0x04544F93, 0xAF5C8144, 0xAC552E5F, 0x3BA8A29A, 0x926B9FD8, 0xD5785F58, 0x52F38227,
+0x275EE73F, 0xC53DC942, 0xB3043EDB, 0x00000080, 0x009E0101, 0x7F120504, 0x721A49B5, 0xBF1F60F2,
+0x365A8D77, 0xD33F23AC, 0x7BC8813D, 0x407C2075, 0x83B58EDE, 0x4AB0C750, 0xDE20A9AF, 0x84A15E53,
+0xE34FFB6A, 0xFBA4D673, 0x5FD87806, 0x730CF6C1, 0xAE098730, 0xAE61A897, 0x621E3932, 0x4A68ABD6,
+0xCACC4B6D, 0x13D854D6, 0x01DD8B2B, 0x2790B820, 0x59446D25, 0xA3DFA8B2, 0x20E7AF1F, 0xCBDA7AE9,
+0x7A92D4BC, 0x610ADFFC, 0xBD57211C, 0xFE661E78, 0x93626CF2, 0xD879C84C, 0x27F88B4B, 0x165C9A3C,
+0xCA1F670D, 0x914DF7F2, 0xE007E875, 0x744D0692, 0xC85D73E5, 0xFE34193C, 0xB423BDBE, 0x3B1D1C01,
+0x53C55B43, 0x4B3D95CB, 0x491CDFE7, 0x32BC63E8, 0x3A53E303, 0x6B8E609A, 0xDEED62F9, 0x2D5303A6,
+0x465F9201, 0x5295E4FF, 0xDB80DD70, 0xC0070310, 0xBF6822FD, 0xCB650310, 0x1A07508D, 0xEDF13488,
+0x4D66B93A, 0xF6CAD422, 0x9BAEAFC1, 0xD15CF6E1, 0x8B825B97, 0x559D6A61, 0x053FDFA1, 0x45DEFBDF,
+0x1C0A46A1, 0x8133022A, 0x1AB98B53, 0x3E78DC06, 0xD0558148, 0x817EA664, 0x1093D9E7, 0x38428A0C,
+0x4234588F, 0xAA06A6ED, 0x34C16010, 0x5FA537AA, 0x099C4C8E, 0x82C261BF, 0x9E2CF3CF, 0x81839307,
+0x604D6C05, 0x834990B2, 0x34FB9885, 0x4DED9497, 0x07BF1F4E, 0x4C061414, 0xA64268FF, 0x59B19311,
+0x45CBBBFB, 0xA0D7C815, 0xAEDA5FB8, 0x4BA1856A, 0xAC40C923, 0xFCB802B8, 0xA691BAEC, 0xE5946BF8,
+0xF2012657, 0xDC9506A5, 0x7983C598, 0x2B745D2B, 0x335306FC, 0xA7225421, 0x25EFCB87, 0x93AE5F92,
+0xD29E5368, 0xE0ED8EC0, 0x9872D216, 0x71F3DB03, 0xFF593634, 0x0E93974B, 0x512A0EF6, 0xE7D358E8,
+0x3CC81CCD, 0x9F2EBF51, 0x0ACE2170, 0x365B2A8A, 0xFAA4F3C9, 0x334DFBC7, 0x811C2C54, 0xA6076349,
+0x6214B73C, 0x11CDC04A, 0x6CD0A621, 0xAD8BA468, 0x2EDACCEC, 0xE429D257, 0x6ABC60B9, 0x92C634C8,
+0xAA271991, 0x1F3F97F9, 0xF03D701C, 0x5436D360, 0x7CEE0761, 0x2DC919A1, 0x5030F009, 0xDC287E73,
+0x4D8BA232, 0xB0C2B160, 0xEB611854, 0x47CBC739, 0xB0F887B3, 0xC764B1C1, 0x90A55F18, 0x055FA701,
+0x53E16048, 0xD2D5D478, 0xB0A5CE7D, 0xFD1BDA1F, 0x90D2D743, 0x337FC1D7, 0x46647B45, 0x2E81DB8D,
+0xE2E62DFF, 0xF597A088, 0x74202055, 0x4A1EC99F, 0x0A6919BC, 0xA1CC0CBB, 0x5A4C797D, 0xAED59C33,
+0xE6489337, 0x9CACE946, 0x5FF10FA4, 0xAA63CB9E, 0xEEF5FFEC, 0x146BAEB7, 0x32D9058C, 0x9C86B72D,
+0x9CE0E3E8, 0xEE788D23, 0xE2988D9F, 0xAC94B9D8, 0xAF9C8B48, 0x4943637B, 0xEA6D7FFD, 0x2D236221,
+0x6E3B8FDD, 0xF6E08F3B, 0x7F1B0B33, 0x952D2637, 0x34DBC210, 0x8B4F67B8, 0x000F35B1, 0x55D0FC07,
+0x486F70D3, 0xD5C2901B, 0xD60CA9E6, 0xE8A050B5, 0xF9EEBCDB, 0xBCC67779, 0x8DA17A16, 0x2B42082C,
+0x1FACF6ED, 0x8E1C33F2, 0x247743F8, 0x9BEA9A83, 0x7214BBA7, 0xD88CEE2D, 0x2EECBA1B, 0xCEB9D894,
+0x6FFA8895, 0x76C3BBA0, 0x64B93F60, 0x0E124C34, 0x60005B05, 0x96CD08FC, 0xEE13D888, 0x6CAFB7E8,
+0x1E2B5101, 0x1DE6E1AA, 0xC73442B4, 0x1EE0301B, 0xBE4BDCDE, 0x5D63BE11, 0xACF18619, 0x4CAFFD7F,
+0x893D6FFE, 0xD70EDB0D, 0xB52D25C7, 0x806C60AB, 0xB5449239, 0x9E5E519E, 0xD306415C, 0x33CFB388,
+0x93FE9CF8, 0x142AC3D8, 0x8C7756B9, 0xFAE1EA79, 0x36D9A399, 0x34D1AF31, 0xD8B3B3E4, 0x3465F220,
+0xD39EDAED, 0x8CC6ECEF, 0xCDEA782C, 0x8FACEA39, 0x829D0BEE, 0xBAA22AD7, 0x9FA2C4C5, 0x9C2CED2E,
+0xB204BBF4, 0xDF94DB73, 0x1E7BB98C, 0xD36D0BB2, 0x0845379D, 0xD5F0423F, 0x472DDE23, 0x2A058C6C,
+0xEEE2BFC9, 0x5F7B7721, 0xFA56C832, 0x54DDF375, 0xE422DCEA, 0x543F1514, 0x77FB42BC, 0xE9208282,
+0xD4368C6A, 0x8F85D5FA, 0x4E4993FD, 0xF0884311, 0x97371D1F, 0x47321BBD, 0x7B81DAD3, 0x956652E2,
+0x5758500B, 0x07758A4E, 0x5D51A46B, 0x5C15277C, 0x9E3DF35D, 0x6737CCC6, 0x86174053, 0xE33FF1AE,
+0x411422D4, 0xE7BC1377, 0x94325A0C, 0x8A1E0C9E, 0x9D997BB8, 0x736D3871, 0xE5128B2A, 0x9CE8BC6C,
+0x02F546E7, 0x8BDC54D3, 0x6C523B8A, 0xF69922AB, 0x48CDBC6B, 0x4B4F4B72, 0x9572FE90, 0x53505BE9,
+0x128BB143, 0x99F7B701, 0x68C53407, 0xC2678E09, 0x61DA68D9, 0x09889D9B, 0x41EFC7F2, 0xAAB4AF44,
+0x403FBF12, 0x8A7185D3, 0x1708BC07, 0xEB477865, 0x8E6D65A8, 0x165B0851, 0xAB2C713C, 0x95CE720C,
+0xFABE1138, 0x868C4180, 0xDBD539EB, 0x12B5841C, 0xA21E8F80, 0xF0BAED15, 0xAE0CF86F, 0xE1EA5404,
+0x1F4D1375, 0x31D0BAE3, 0x32B50F28, 0x70DB0FAF, 0x01F2753D, 0x6809F629, 0x52CE331F, 0x4B981FBB,
+0xF154C655, 0x64EDE0A4, 0xF2A29356, 0x2AFB2BB6, 0x7D821B09, 0x8090B816, 0xF80BCF76, 0x085272F5,
+0x8818850A, 0x6CC36074, 0x543C74DE, 0x287CF5F4, 0x38D5472B, 0xF24FD4CD, 0xF9AF3C5B, 0xB890EADF,
+0xAB22FF1D, 0x21DB38F1, 0xF9D65851, 0x4AE5285C, 0x8C01F44C, 0x7C8E7EDE, 0xDB34D4F5, 0x08FB9DCD,
+0x3D619057, 0xA6AA1AE2, 0x30578DE0, 0x3C5FE7D7, 0x93AB07E2, 0xA1D09098, 0x612A3736, 0xC0A4A00D,
+0xA20139D7, 0x29E4C6D6, 0xFCC8AC88, 0xC2C6E6DD, 0x8F4267D7, 0xBB3FC81A, 0x26E442DC, 0x254811F0,
+0xD72FF0D8, 0x1B049764, 0x40FB6FEB, 0xDACBBA3C, 0xD61B551C, 0xD88E8227, 0xF5E22443, 0xC9D6151B,
+0x7A294025, 0x98F78BA9, 0x44E92EB4, 0x6CCFD8D5, 0xDE195855, 0xB2891CF9, 0x39256A55, 0x75609CA0,
+0xB3701CF1, 0x71A5385C, 0x484863CE, 0xDFE297AE, 0x1320DC73, 0xF95C1EF9, 0x8477FAC9, 0xB50AF56F,
+0x3372CBE7, 0x22E25A27, 0x01000000, 0x04009A21, 0xC4E03F0C, 0xFB8200E4, 0xB16F7FFD, 0xFD228CEE,
+0x79BB3B8F, 0x77D64B58, 0x806030D1, 0xA798F7DB, 0x4D0D810F, 0xD88C012D, 0x981C80BB, 0x81E499AE,
+0xB055A9AA, 0x97100B39, 0xFA75C5B8, 0xB4726C2A, 0xFF423585, 0xFBBA8BB7, 0xFA77C4CE, 0x744672A9,
+0xA0AE1259, 0xC6E0EDAD, 0x664960BE, 0x4EFBAAF0, 0xEA66E7C8, 0x6E0B2CE0, 0x31D3E9CE, 0x07F38B53,
+0xCE5E7767, 0xBDC304FB, 0xC3DAD270, 0x4EE1D495, 0x0A4877DC, 0xCF37F4B0, 0x832ADDB2, 0x4560B725,
+0x74660895, 0x7EF0C195, 0x486BBB49, 0xC402D0AA, 0x997A5C81, 0x02C80479, 0xFADE7A04, 0xC9F6E941,
+0x1FFBC7BB, 0x0B858CF5, 0xA80AC0B0, 0x914A76AE, 0x9D38B0D1, 0x989B735C, 0xF060EEA4, 0x32E0B7F8,
+0x3BF1B2B5, 0xED42CEA6, 0xFCFA60E3, 0x9AC280E9, 0x51D21F17, 0x1CAD5F3B, 0x9C7C16DB, 0x5FD9ED0E,
+0x526E313B, 0xCBA79BDF, 0x8F055919, 0x7501AE7E, 0x86960FDC, 0xA81FA86A, 0x21C04650, 0x04132798,
+0x54BB8053, 0xD50788A7, 0x5AE93061, 0xB7B77B21, 0xCC6CDB31, 0xA6079721, 0x6B6AF1C2, 0xE2948A17,
+0xB10A4581, 0x72252906, 0x084D7CCA, 0x824F46B6, 0x67ECF1CF, 0xA0400FD6, 0xA1ADA66E, 0x3AC1CDB0,
+0x20F15DE2, 0xD17E22E4, 0xC02EC326, 0x97046083, 0xC5FEE798, 0x0CC75AD4, 0x2D9940B0, 0x13712919,
+0xA2D83F2F, 0xF23C4C7D, 0x05013618, 0xD1D9F812, 0x51547317, 0xC743D4E8, 0x5C4619FC, 0xB76406A2,
+0x4C5A1562, 0x8F0B12CC, 0xC676BC10, 0x6A139DB4, 0xBE6D4487, 0x12E0E5C9, 0x8896AE4D, 0x3EE994B1,
+0x5904589B, 0x306B829C, 0x49C12659, 0xE1E50301, 0x41609D98, 0x4417FC54, 0x35EE9DAB, 0x60527DC3,
+0xA8E55DF5, 0xFAA3B827, 0x084FC18D, 0x6F45D4DE, 0x309459D0, 0x60C48679, 0xEF366D3D, 0x435CF2A4,
+0x149283E3, 0xF464D6A5, 0x4BE2EE8E, 0x5D0CD80B, 0x979C772E, 0xF6547B99, 0x538FD926, 0x60744E34,
+0x03A6BFD3, 0x3DDD7B92, 0xE0022C94, 0x46867DF8, 0x95A31469, 0x50C3AB14, 0x65A0068D, 0x8C4A527B,
+0x5FB46B4C, 0x3F57B4B0, 0xD8E110AC, 0x5621CDBC, 0xAF8601A9, 0x43653DF4, 0x5CADD204, 0x97ACCF54,
+0x3EF970A5, 0xED1D1564, 0x0349E323, 0x46D46A1C, 0xBBBB1C17, 0x8439BDE9, 0x2D3747F0, 0x615266DA,
+0x63948039, 0x5B6F9049, 0x7AAFDEAC, 0xE2846D70, 0x7611E084, 0xA88B6890, 0x872EA1BE, 0xB02230A8,
+0xC75F83D6, 0xA2A1884C, 0xFB87B782, 0xDFF4A90D, 0xA91F12FE, 0x1EAF060E, 0x50ED7285, 0x63559B30,
+0x1BD7819B, 0x1521CB50, 0x24627F06, 0x7E34E9B0, 0x171B792B, 0x592D5197, 0x04517609, 0x9980B889,
+0xFD092DDB, 0x18C5BF6E, 0xF94B60E2, 0x2C2F7DE6, 0x40BA4518, 0x825B6FF7, 0xC0C035A0, 0xDBCEA228,
+0xF39224A3, 0x55982BB0, 0x4448B349, 0x932A0195, 0xED89C942, 0xC22BF773, 0x0D5AAB51, 0x349F2CAC,
+0x156EA5E7, 0xB42A4B7F, 0x3089378B, 0x504F4C04, 0x2B5CD5C7, 0x3171B85E, 0x19021BA2, 0xDBD95F16,
+0xDA3010FC, 0xDEE760FF, 0xEC1C9E96, 0xB4D6E25A, 0x153EF7D2, 0x20AECF6D, 0x9A6429C9, 0x624B6AD2,
+0x6AEA5763, 0x6AA46CA4, 0x6CCACF40, 0xA70D4BA7, 0xC92F3224, 0x59AD5E16, 0x9494448B, 0x57B5ABB2,
+0xF952BA35, 0xE5DCF37C, 0x4EB13D58, 0x62970B28, 0x0B453FAF, 0x00A90F9D, 0x06624266, 0x807E4E2E,
+0xF2B5CC53, 0xBA24BDA4, 0x9CD67455, 0xCDEEEDEC, 0x49130A85, 0x2E8E42E0, 0xED5155F3, 0xE8989570,
+0x789B1C10, 0x905164FD, 0xE04924A5, 0xD445A5D8, 0x1F0B1155, 0x4EFFEEA1, 0x6A27F51B, 0x0339982A,
+0x7DCDE8CF, 0x615734CD, 0xEEAD1EBD, 0x1DD447BE, 0x03246F97, 0x850EC85F, 0x6C38FE93, 0x97A4E159,
+0x1CBFF4C0, 0x0C920383, 0xEE9A8E63, 0x2CE2A361, 0xB73885BC, 0x26B45503, 0x06385422, 0xA9C216A4,
+0xF3D518B0, 0x827DFA7C, 0xE4983B24, 0x7325CA90, 0x3C788DAD, 0x407FBDBA, 0x4A00806A, 0xFD00B87D,
+0x34957111, 0x0EA35F99, 0xD199FA0F, 0x3F274B1F, 0x7CBABCF8, 0x963100AD, 0xB9F5C7A0, 0xC65F465A,
+0x3E38F981, 0x10F5B7EC, 0x18372411, 0x52D90B06, 0x59420AA8, 0x037A283D, 0x0A5C6D3A, 0x694AB37A,
+0x56829AFE, 0x4D19D205, 0xBCF4EADF, 0xFEF80A6C, 0x1446006A, 0xFDADAAEC, 0x936C1B4F, 0xC427F181,
+0xEFB8A428, 0x9008371F, 0x9EB4E267, 0x49F0B529, 0x19D7DE1A, 0x11B9E555, 0xA6712E6D, 0x7B7553D6,
+0xFFB0192C, 0xA8BDE156, 0x27D2A783, 0xCCB232C3, 0xC031F0D2, 0x4625E8D5, 0x07D1A5B9, 0x46B538E7,
+0x3626A9B9, 0xE3DED9C5, 0xBAC4AAFD, 0x3FC8D92F, 0x54DE917D, 0x6713A9A7, 0xA45CE20B, 0xC8689A3E,
+0xB9892FBF, 0xBFDD2C0A, 0x994950A1, 0xD4D8DFF2, 0x99C360B6, 0xAAC3E117, 0x329C7E51, 0x1C7E5E86,
+0x79AB4B9C, 0x427BE05C, 0x11ABE6EF, 0x9EFD5496, 0x799A9599, 0x73FC2C72, 0x929F105D, 0xE3CA9F6C,
+0x2F9A3826, 0x02ED1EA2, 0x4989BD02, 0x9FCB0048, 0xE6E864E4, 0x50B4083E, 0x6DDF886A, 0xC5864EB6,
+0x26182236, 0x0C157323, 0x6420D319, 0x27A1C6D0, 0x8066B951, 0x2286C198, 0x73EBC702, 0x92AD234B,
+0x06A5E956, 0x253DB2F4, 0x67525E1C, 0x6597FA67, 0x71E6068D, 0x8F2FEA2B, 0x7A8DF2B1, 0x33978EE1,
+0xFA38E718, 0xE8B3BB2B, 0x07726CCB, 0x34E5EF90, 0xEAE9C397, 0xB51D05C5, 0xBFFCC72A, 0x9F5F1122,
+0x5E7FEE61, 0x03D3C202, 0x0A6671D0, 0x6786F8FA, 0xAC56A8AB, 0x359E86D1, 0xF9D73C4B, 0x160689D4,
+0xA399F782, 0x86174305, 0x588FDCF3, 0xF9A3F617, 0x9DE04E76, 0xF606F85B, 0xE47FC0E1, 0xC37FEBD4,
+0x9C225111, 0xFCE0500E, 0x9F1EE356, 0x6710D41A, 0xEEA2291F, 0xE90F57AE, 0xF91956CD, 0x58F9A5B4,
+0x67DA7E1F, 0x9B1CEEFC, 0xDECB1AF8, 0x84939545, 0x95343F09, 0xF4B0EE78, 0x46DB2477, 0x4CAB6615,
+0x9718635F, 0xD1922CA7, 0xF1B674CD, 0xB597A054, 0x251CA9A7, 0x356A9BEE, 0xC4802BDF, 0xF5AB0F98,
+0xAC6A9484, 0xDEEB7C06, 0x2F034002, 0x1BC07C2D, 0x8752EE10, 0xD832131D, 0x538B9AD8, 0x96FA2D64,
+0xA509D8AD, 0xC66CD983, 0x98D9B34E, 0x6DE0000D, 0x353F1697, 0xE21B7E7E, 0xBED050F8, 0x44D316C2,
+0xA3F1B1EE, 0xDD1BD4DA, 0x008F641E, 0x2F351627, 0xED22E97B, 0x5EBD9076, 0xE0A74B75, 0x10FE7758,
+0xAE5728E3, 0x06C2A282, 0x6CF9BBAA, 0xBD2F8439, 0x6A91CD81, 0xB64B481D, 0x928502A6, 0x6B0A5651,
+0x8EA30565, 0x43318035, 0x5850EDCC, 0xFE80D387, 0xB90D3130, 0x01A141C9, 0xE406E8B4, 0x3343E1B5,
+0xD130EACA, 0x05FE3554, 0xE33C715A, 0x6A8889C0, 0x8538BE6D, 0x5DF7C3E5, 0x36D93FC1, 0x04AE279E,
+0x40D359B5, 0xA7CC4AA6, 0xB106001F, 0xB62F114C, 0x8DCCA765, 0xCC266B41, 0x1A664369, 0xFE90E566,
+0x0561BBC4, 0xD2682011, 0x0B1F7743, 0xCF264576, 0xBE0E1DBA, 0x5D36F89A, 0x60C729CB, 0x559C953D,
+0x865B703F, 0xF8FD1498, 0xBE8C1088, 0xED3F8547, 0x9B1BA3DE, 0x86CF124E, 0xD32D1D37, 0xAA02F9ED,
+0x5EABD86C, 0x149DB662, 0xD3470055, 0xC384C238, 0x0A13B97D, 0x45E08D39, 0x71F8830E, 0x6C9C4AB5,
+0x8B153620, 0xA4ABBF0F, 0xFAAFBC91, 0x122845BA, 0x685BBECE, 0xC5AE67FF, 0xDCC85F15, 0x4927A34E,
+0x2E5C75C4, 0x8DA4EA06, 0xD337A41C, 0x654F5143, 0x59B6C31A, 0x899B93B0, 0x7C3FAB69, 0x51909CCE,
+0x0690BEB7, 0xBFB13706, 0xA154D18B, 0xDBA4A8E3, 0xF6C3ABF0, 0x8E47F264, 0x9A82DCF0, 0xED60888D,
+0xAD67917B, 0x67427D56, 0xD3DADE54, 0x73F02B91, 0x5D4ABE71, 0x622C2BC0, 0xBC11B244, 0x983F56B2,
+0xC9A91C17, 0x5B80BB78, 0x0F5D128A, 0x5DB41714, 0x4AB4580D, 0x171C952C, 0xDA425F8C, 0xF4D802A6,
+0x26A2EA92, 0x0B1953DE, 0x9827C065, 0xC884055E, 0xFB036A47, 0x9EDE15B2, 0x003A00CA, 0x498C1F05,
+0xF877B4DE, 0x6E12F676, 0xBDA0A9A1, 0x5446E146, 0xB01574CC, 0xDDC33955, 0x89371D50, 0xAB6A2D0C,
+0xDB03260F, 0x14BB0579, 0x56475D62, 0xD109A392, 0x1EC2EFBC, 0xEB3608FC, 0x8351294C, 0x1CC84D1C,
+0xD8AC687F, 0xC74167CD, 0x3E13881F, 0xF4847482, 0x2CDDDFB3, 0x603B613E, 0x3E6EE444, 0xE5125F1F,
+0x18ECA1C8, 0x92D8A399, 0x1EC57AF8, 0x816A7928, 0x2E94A381, 0x375D77CE, 0x456C936E, 0x5995EF0E,
+0xC0EC322A, 0x0F401EAB, 0xDCF9E193, 0xAC3B2E5C, 0x93BF1C36, 0x5311B3A6, 0xE4117E68, 0x8E3D5400,
+0xDC23D24C, 0xEF901530, 0x82257C64, 0x09E6FA2A, 0xDBC59662, 0x8D7A6FB4, 0xF6D56FE7, 0x7A336391,
+0x1242D61F, 0x8A96F0A8, 0x77B99813, 0x6DF4B55D, 0x768988EA, 0xD444AC6F, 0xC225C3CE, 0xE47F11D0,
+0x0121DF84, 0xAFF72DF1, 0x3B3406F9, 0x1532B48E, 0xE84EA7E3, 0xB52FBCF1, 0x11056CCA, 0x6D3CA33A,
+0xF3467217, 0x7DFBAB50, 0xA8E77E57, 0x8AB88015, 0x53136589, 0xCF3881D0, 0x268D533E, 0x0F2599C9,
+0xDE6C6879, 0xE03E09F2, 0x87650E6A, 0xF687C96B, 0xDC93BFF0, 0x9591E2C6, 0x334885AC, 0xE6D8FDC7,
+0xFB87522B, 0x7C6B1F72, 0x5A5B9171, 0xA20DE264, 0x7F8DB7BE, 0x9689E108, 0x7726BD3E, 0xF0D1F9AB,
+0x78F7CB0D, 0x7E294C67, 0x88D3C39E, 0xEC28476A, 0x4BE66D26, 0x7818AC74, 0x23348B8B, 0x65D4BB2F,
+0x333B8A3F, 0x783135BA, 0xFBA58EFA, 0xA75E862D, 0x0EC99959, 0x78E2BF96, 0x12B459B5, 0x5AA74132,
+0xE29DA4B1, 0xF699B404, 0xF919F454, 0xB88094CE, 0xAB26CF8B, 0xBCD8B55B, 0xF2AC95C3, 0xE0DBA692,
+0x687B9034, 0x6D5C5F26, 0xE31CA27B, 0xC34CDE53, 0xBE6B0AFD, 0x9C4C46DC, 0xCF507D07, 0xB02529F9,
+0x4DB40D2D, 0xA442BABF, 0x9DABB17C, 0x534257D4, 0x959A891C, 0xD0546A8C, 0x92215E3D, 0x463E8980,
+0xA6FC4AC0, 0x3BD0B66E, 0x4E193829, 0x62E697B8, 0xE2311B7B, 0xF504564F, 0xE07061E7, 0xFFA1DE86,
+0x808A3A54, 0x3C507765, 0x75C2E37E, 0xC7CE99F0, 0x85582262, 0x1C2FB7AA, 0x4536AAFD, 0x665D8996,
+0xC8181C37, 0x70F18796, 0x8FC79220, 0x53856177, 0xB9B079FE, 0x2FC4D3B0, 0xBCA45DC5, 0xC04C6CE9,
+0xEE746B0F, 0xBE6254B8, 0x2F429E8C, 0x2CB2D93F, 0x75118264, 0xB16FF765, 0x8A51BF94, 0xBE42973E,
+0xDF49517C, 0xA2D0CB9E, 0x9D2594AE, 0x03CA77A3, 0x2C6A42B1, 0x896471B3, 0xD85C7531, 0x5FA43A71,
+0x40B9849B, 0x74C0372B, 0x1EB728F7, 0x6C79E352, 0x641AC03B, 0x3220BE31, 0x4DD41E17, 0x3CC74068,
+0x5A726362, 0xC77B59D4, 0xA3C64672, 0x53859137, 0x4CD65655, 0xAB486213, 0x28F2F406, 0xE750D3F2,
+0x1BBCB8F2, 0x5ADD6DC1, 0x98BB9C9C, 0xEA15E4FF, 0xD6029023, 0x457AD37D, 0xD39C06E2, 0x51040C22,
+0x42137AFB, 0xF700DB65, 0x37A134AD, 0xC3F4D39E, 0xE14EE8F7, 0x32ABCA11, 0xBBE6DB89, 0xA411BFBF,
+0x5F301CCE, 0x166AF88E, 0x926E04B1, 0xFF201516, 0x4FEEB1F1, 0x7075C79F, 0x3452519E, 0x16D0B967,
+0x09F4C0FA, 0xFE9F6F38, 0x9D181473, 0x69CA02E4, 0x94CA7037, 0x9C5F8C54, 0x6EDD253D, 0xDA16E81F,
+0x7F51D81D, 0x754A9B84, 0xFA2B343A, 0xD383C950, 0xCBE2871C, 0x48B86054, 0xA9B94AE2, 0x88BE79F4,
+0x17D9C106, 0xBFDA5421, 0x769B2A06, 0x052E9665, 0xF8A2BAD4, 0xFD623CE7, 0x05C9DC65, 0xC29A88B9,
+0xB246C675, 0x533A7C58, 0x03BE995F, 0x15F207F3, 0x2FB32FF5, 0xD0238F59, 0xF89E9F34, 0xBC568D43,
+0x24D75C44, 0xBDF415BD, 0xE368C7D1, 0xC3723E66, 0x1B91F103, 0x270572CA, 0x189D5627, 0xC24D1B3B,
+0x27F70874, 0x6308DE12, 0xEEB923D4, 0xDC7A08FA, 0x963B73A2, 0x63DB1D81, 0x7518A816, 0xA70A610C,
+0x9A75E82F, 0x2EB78A06, 0xD256F279, 0x5F6861BD, 0xD1218BD0, 0x67C51675, 0xA843405F, 0x7406A160,
+0x312F597A, 0x595D9ADE, 0xBFCEAF66, 0xC6843629, 0x3025CBE7, 0x6DF53BC0, 0x08ED86BD, 0x42F1A965,
+0x72F27556, 0x8DA24119, 0x8CC310AB, 0x6E5B6B0B, 0xD68375D8, 0xE41EE397, 0x74AF9036, 0x611FA649,
+0xD18D23B6, 0x7BA20E68, 0x6790E8D8, 0xF63EDAB3, 0xD6A967FB, 0x736B4871, 0x04B07579, 0xA2CD768D,
+0x84795D60, 0x21606691, 0x4D55EBE5, 0xDFAC8655, 0xDAA74D87, 0x774232BE, 0x18F90DF9, 0x855EAF92,
+0x1F66BC8A, 0xD4D2C273, 0x44B47E60, 0x647EE15F, 0x899B9820, 0xBD962CDA, 0x165D0326, 0xBBFC617A,
+0xDE7E21F5, 0xA6256F67, 0x7D88DEFE, 0xC67237AA, 0xC1C0982B, 0xCD7227B2, 0x951199C3, 0x52D350E1,
+0x1D75EDAE, 0x12D2A1F4, 0x22170488, 0xFD3F6817, 0x0DCCC0BA, 0x05D5FE47, 0xF15A284D, 0xEE2EAB0B,
+0xB63C22B6, 0xF1B646A3, 0xA8FFEEA5, 0x5115C2DF, 0x9B341674, 0x48CC057E, 0xA3B3C20D, 0x358F711F,
+0xCC629F6C, 0x0E7A0B5E, 0x86005ACE, 0xC98E431A, 0x43EBA196, 0xDCDD50F3, 0x9555E8DC, 0xFCF78C99,
+0x854EDFC1, 0x5CF1F24D, 0xF8195922, 0x2C76BB2B, 0x2F31C769, 0x3EF2DB9D, 0xFF09D17B, 0xAD94CB26,
+0x4BD1166D, 0xFF4BB41F, 0x1266B3B9, 0x005C5F77, 0x7D2D999F, 0xD76EDFEB, 0x39CB1EA2, 0x511B4F45,
+0xFA5ABDE2, 0xCAE5210C, 0xE7FBB5E2, 0xE6380F22, 0xB7CD5869, 0x9D14730E, 0xD7BDE4DB, 0x6DC82769,
+0xED5C5B17, 0xFF896216, 0x1A18EF9F, 0x5217F9EA, 0x013DCF99, 0x6474C298, 0x2BA102EC, 0x50AAC20D,
+0x21E77E49, 0x9DC2318A, 0x4B4AB3AF, 0x37A1B64B, 0xA390E368, 0x445E9062, 0xB09EC7CA, 0x5F4C6268,
+0x51F89344, 0x8BB58F17, 0x7A3F313C, 0x4AEFBF3B, 0x1238143B, 0xB00004A0, 0x879522C9, 0xE649481B,
+0x99F1DBA6, 0x20E75FCA, 0x7AA7D823, 0xD096F7A9, 0xD6BD6C0D, 0xBD049A08, 0xBAACF185, 0x7B8F77B1,
+0xC58FF979, 0xAF9C6027, 0x67E72944, 0x83B99DC8, 0xDAA3705A, 0x09B9E415, 0xCC99711E, 0x15CCEE10,
+0x1569B9BF, 0x33B7682E, 0x6D618571, 0xCC08783A, 0x66D5780B, 0xEA9C3E17, 0x0449A3E7, 0x23946809,
+0xCEFB0B35, 0xF750BF0B, 0x01EEDA48, 0xF15875DA, 0x5DCDFBAB, 0xBDFD9786, 0x2ABA5E49, 0xBDE41A6C,
+0xE030F544, 0x11F9D000, 0x67B959BB, 0x203B50D9, 0xD6469586, 0xCAD8AB58, 0x26410D8F, 0x0ABBD2E0,
+0xCEDCBE44, 0x202E5678, 0x1FB2F911, 0xE9AA9338, 0xB6B4CABD, 0x0990C407, 0xA434CA45, 0xBACC94BC,
+0x787352DB, 0xA8481377, 0xC83BF028, 0x99F5CD2D, 0xD23BFEB9, 0x34A84EA9, 0xD591E11A, 0xE44E73E2,
+0x047F7273, 0x8503A721, 0xD2584B07, 0x4DFE4A07, 0xECEEB686, 0x70068438, 0xE5E5D78B, 0x6BD13430,
+0x41844E6D, 0xDBDEC2B2, 0x736E4BD1, 0xB384A270, 0x97708699, 0x83315E4B, 0x8287DD24, 0xE07BEC2F,
+0x64AD3EBA, 0xB62512DE, 0xE5E4FC71, 0x996ABB80, 0x6836FB30, 0x77A5036A, 0x1D06505F, 0x7C122780,
+0x830B080E, 0xCF204DED, 0x4E8C7AD4, 0x345E435D, 0x4C86DDA7, 0x018F0731, 0x5B54433B, 0x05589505,
+0x028C527A, 0x5521F7EB, 0x6F2A530F, 0x28574A36, 0x17297BD1, 0x35F536A8, 0x58CC8244, 0xA52FC0E7,
+0xCB9C5A16, 0xAEA694C4, 0x7E04080D, 0xF1A926F8, 0x1281AB1F, 0x3611D7E0, 0x87B44EE2, 0x1AF76112,
+0x8B475F26, 0x2783B7E1, 0x3B7D73F3, 0x1F230C00, 0x33C22843, 0x7F6F9A4C, 0x7E0D4C4D, 0xEC03BD73,
+0xCF65AF6C, 0x9572DC3A, 0x0F946861, 0xBEE4AF51, 0xD697560D, 0x4236AE3E, 0xE8651705, 0x16C67AAB,
+0x54F7EA04, 0xE686184F, 0x46E377B6, 0xCC8D1276, 0x6C2A67D2, 0x5DC0ED07, 0x4658E394, 0xBC0D527D,
+0x65102616, 0x579AC5D8, 0x48C02F55, 0xF73C3A3F, 0x8D80053E, 0x7A06ADA3, 0xF84F09BA, 0x886FF4BB,
+0x70E64C10, 0x91C34987, 0x428F0064, 0x7CA9DE47, 0x5E85AADD, 0x35FE368E, 0xBCE52460, 0x6EEAC90B,
+0x4C3003D9, 0x6D25A0C9, 0x2B133EDD, 0x4DAEDE85, 0x8029E86F, 0x8CD75EE9, 0x5CA70FF4, 0x043BC863,
+0x3091724C, 0x94FECE97, 0xA6056758, 0xA99CDA3F, 0x899067CE, 0x51A7F649, 0x106F5181, 0xFD0C36FC,
+0x127CF7A2, 0x3FD6EFAA, 0x97647C2E, 0x2C11BF58, 0x211B33EB, 0xC1BAA6BC, 0x231B2A46, 0x909AFEF1,
+0x9C8EB147, 0xAE192A4A, 0x54AB19EA, 0x1DA20365, 0xA35D511B, 0x3348564C, 0xFE49BA1A, 0x20F89494,
+0x17D049E2, 0xB87C080F, 0xC6C2AD71, 0xFB6862FB, 0x5FF33C7D, 0xC263DA89, 0xF8A59AC0, 0xDA3652E3,
+0x32A21479, 0x544F73DE, 0xEEEB7047, 0xD98D6E20, 0x69859C0D, 0x4FA07116, 0x30AD6657, 0x63C0EE78,
+0x946014E5, 0xA7D57C15, 0xC163FB3E, 0x2E912B03, 0x60166B8C, 0xC4F98AEF, 0x2BD9A198, 0x64B5371D,
+0x641110C9, 0x96957379, 0xC1D481D0, 0x20BF05BC, 0xD1483DE3, 0xCBAD8F7A, 0x430C758A, 0xD474FA83,
+0x8CE690A4, 0x2CB4828E, 0xA844E87E, 0x8628AF23, 0x1C335A33, 0xFB63EF8B, 0xDFE64078, 0x1257202C,
+0xA319F628, 0x7CD591A7, 0x73E3ABF8, 0xE3A3EEBD, 0xD3D6E549, 0x16F4264C, 0xF8C449C4, 0x48067E73,
+0xB2771763, 0x88D9BAEA, 0x0110B6C9, 0x872A8807, 0x69D0EB5C, 0x35DF0A94, 0x3776BF34, 0xCAA2AE95,
+0x179851CD, 0xA2CEEBE1, 0xF7DF326A, 0x1B787797, 0x539A2360, 0x03783945, 0x9EC504B5, 0xCF6BB037,
+0xD731051B, 0x257BB8F2, 0x44C6D371, 0x1A83E1F9, 0x866C3C0A, 0x276EE788, 0x1BA4E1E2, 0xB3203A7F,
+0x6A53D472, 0xD14EBC99, 0x3DC3C4C6, 0x05B7D358, 0x612E0082, 0xAE877EEE, 0x963AEBAA, 0x4B305409,
+0x43B0466C, 0x21332987, 0x7090EC40, 0x9B468007, 0xD5BAC1A6, 0x95671DD6, 0xD9B3498C, 0x42D88A20,
+0x975FB6C2, 0x0CD1A18C, 0x6BA5E817, 0x223CC111, 0x090BC379, 0x7701853B, 0x162CF521, 0xE54A1F47,
+0x9EC911A4, 0xBDAF863A, 0xADD815AF, 0xC75B555A, 0x2F8DDB50, 0xF42441B4, 0xDC5CD76C, 0x8CA0F856,
+0xC58FBC72, 0x2822D853, 0x2AFE62C7, 0xC907F943, 0xF6ADD173, 0x6F6113E3, 0xBA3EC29D, 0xE2825C8C,
+0x46818848, 0xE66D21C0, 0x95919971, 0xF6F7A072, 0xA04D3F37, 0xAC242BCD, 0xA35A83D0, 0x7FD0B9F7,
+0x4D57E908, 0x1D386739, 0x48F2D9A1, 0xEA593C87, 0x9B7890DD, 0x8339A60E, 0xE6887B5B, 0x3505B3F3,
+0x9908E11C, 0xD3902AF5, 0x4E6C73FB, 0x4CA01063, 0x8C3A6EE3, 0xC97E5000, 0x63E09666, 0x818E4049,
+0x8CA00167, 0x99A3C46B, 0xA87144F8, 0xDAEC0390, 0x47B8A6FC, 0x47A328AD, 0xDE397ADE, 0x65CC167F,
+0x1A6F34CB, 0xEA2B4C01, 0xAC53725D, 0x0E091230, 0xF5B23607, 0x5C705B4A, 0x2717495E, 0x4FAFF7CF,
+0xFEE7E273, 0x9379D1D8, 0xDD5B880E, 0xE2AB757F, 0xA8EC6283, 0xBE68E185, 0xDE51E12C, 0xB4917200,
+0x08DE9E65, 0x723A8290, 0x713252D1, 0xDFBFE07E, 0x6C65BE43, 0xDCE8EDE0, 0x8313F3C2, 0x26DFCF31,
+0x18F6F836, 0x91E909B6, 0x7D53CBB2, 0x4F9066CD, 0x52A7A8D9, 0xC6DA741E, 0x3A386315, 0x69CF25CC,
+0x15BD3AEA, 0x51C1AA46, 0x0290D898, 0xF0C29B39, 0x01000000, 0x06009E01, 0xA67F1209, 0x3504EF7B,
+0xFD66B26A, 0xC0721E75, 0x137B41FC, 0xC44DC0A8, 0x2393576D, 0x2F430BF4, 0x61225B01, 0xE0117CFC,
+0xC57B415C, 0x79F69314, 0x1A2D9E1E, 0x6168231F, 0xE91DDAA2, 0x1EB43B6E, 0xC6A4FE96, 0x50771DFF,
+0x92DA0581, 0x7CF2FECD, 0xFEE19E67, 0xBF548011, 0xF0CFC980, 0xA12789EE, 0xD7CD9A30, 0x48FE8B8E,
+0x31256D08, 0xE2C5871E, 0x0A1F08B3, 0xAA0D5FC8, 0x714EB1DF, 0x9B9D158E, 0x409CC6B8, 0x7DB2C811,
+0x9D10901A, 0xA5116833, 0xD6059B20, 0xC8F0B5BE, 0x72B2EB76, 0xFFA26C54, 0xA1BD3BA0, 0x8E85FE5C,
+0x984CFE1D, 0xCB5C266A, 0x68790E87, 0x54BD0C7E, 0x8F280AC6, 0xE98B75C0, 0x69D0A3E0, 0x900E0D01,
+0xCA697F6F, 0x5500FEB6, 0x8745B534, 0x5F2DDEF6, 0xEFAB1730, 0x7DCA0B83, 0x2EC77698, 0x7CCF90B2,
+0x59644A15, 0x804575DA, 0x480D7E28, 0xF05EA450, 0x9CB02884, 0x87A33862, 0xA0CE86E4, 0xCEAA4F80,
+0x1B2106E1, 0x708CD41F, 0xAC5EC633, 0x8E425F41, 0xC63E91AE, 0xE80EDEDA, 0xAD4619F9, 0x77CCCD2F,
+0xFB969A12, 0x8278107D, 0x248203A2, 0xC3FA9753, 0xCECEE6B1, 0x1292A015, 0x243A1D80, 0xA783F17B,
+0x14083726, 0x2A561886, 0x30DED0B8, 0xB2CCB534, 0x388D0A9D, 0x176EFD4E, 0x8C6BFD7C, 0xCEBD34BF,
+0x7A4D04A5, 0xB3E2A89F, 0x93E6CAFA, 0x130C8F57, 0x26E5FD63, 0x0B2C91BC, 0xFE72B8C6, 0xDE94494D,
+0xADAA0C41, 0x38F822A7, 0xB5D7BE7C, 0xCB33E0F4, 0x54FD4451, 0x4AFB1295, 0xDE094A93, 0x287DCCBA,
+0x40839082, 0xED6F318D, 0xD2226C4A, 0x70CA6006, 0x28EC1540, 0x586FDA01, 0xCA68D614, 0x9A4398DA,
+0xE9743E79, 0x79753FF9, 0x6321A37E, 0xFDD7F80F, 0x6FD073FD, 0xEEA98189, 0x5F2EE972, 0x83F2AA46,
+0x1CF02FBD, 0x16BD50DB, 0x28697E48, 0x4922D3BB, 0x76F0F629, 0xAFB4955D, 0xF70EB49B, 0x1DA36654,
+0x541902F7, 0xE204E360, 0xE8C52D46, 0xD68E0887, 0xC7CE089C, 0x522B1B7B, 0xC2699708, 0x27783E94,
+0x130146B0, 0xBFE85988, 0xD7E17738, 0x11EA7C4F, 0x40565CD5, 0xE58F9D65, 0x1C3D7C86, 0x115C4578,
+0x7B67B314, 0xB7D4A40B, 0x6A607A55, 0x8F95D5CB, 0x166C53BC, 0xA143AA7F, 0x4829E979, 0xE371762F,
+0x6CB55E01, 0xA82C5056, 0xDD91FDAE, 0xA09E9E52, 0x3C9FD33D, 0x253DAC2D, 0xDCBD685D, 0x370D88A5,
+0x6635FFB6, 0x415F94E0, 0x3CF107A9, 0xFA8A0A5E, 0x3817E3F4, 0xB457FB5C, 0xB892C726, 0xD25D3196,
+0xD164ADD0, 0x6B8B9E66, 0x6725998A, 0xA3861BE9, 0x3C31F12C, 0xF4946A8A, 0x88B0091B, 0x4264CE34,
+0x5D63BC6D, 0x229EDF33, 0xFEE5F519, 0xD0A30AD5, 0x8753DEFD, 0x8E2E6870, 0xF09C75D3, 0x4491C637,
+0x576C1BD0, 0xD3B7DE66, 0xF6D80C16, 0x517D1A77, 0x6E243C4E, 0xDEC9DD18, 0x1BB70BE1, 0x4F25B5D6,
+0x7BF502CF, 0x26F44598, 0xCBDF1EC8, 0x1CAA1A8A, 0xAE0C11A8, 0xDB7E902D, 0xD6354895, 0xBD1EBA91,
+0x40A5B5D5, 0xCCE2EF32, 0xDB7FFF9E, 0x56288321, 0x09C74231, 0xBFD82EE4, 0xB6A5C5DE, 0xB509AD8A,
+0x67EE07CA, 0x705935F7, 0xA0C717BA, 0x84DBFA8B, 0x5793C150, 0xE57EDA3F, 0xB6A70FBD, 0x5B989B42,
+0x0E5CD37D, 0x8330566F, 0xD6BBBD89, 0x4BA824BD, 0x4CF5A35D, 0x84B8907D, 0x3E8FD083, 0xA7F0A559,
+0xE9C0786B, 0x79BAB40C, 0xFE962B2B, 0xE0B0341E, 0x5640EFED, 0x087C7748, 0xD09D01E7, 0x7CCE6D70,
+0x47EC3B4F, 0x3172D5D6, 0x045E3AA4, 0x59CD3009, 0xCF058462, 0xE4893B09, 0x9DC260C2, 0xBD7511A1,
+0x3A5BA901, 0xBE79E7F8, 0x4C4BF683, 0x3B5953B9, 0xB52048E1, 0x915E313F, 0x5BBDE88B, 0x79897ED3,
+0x6EC9246B, 0x5DA45C53, 0xCDA33705, 0xBF790E14, 0x976675E9, 0x0923299A, 0xE40010F4, 0x83087000,
+0xB741EA1B, 0xD19018C0, 0xBDAA7845, 0x7C5EF05F, 0xF1AFC546, 0xF412A867, 0x228AAE73, 0x1217DD57,
+0xF2A253D4, 0xFEAA8A4D, 0x39666D12, 0xCC07C1EA, 0x2B8551F4, 0xE1EF04B8, 0xA2167BA3, 0x5D73DEBA,
+0x03C81D24, 0xD45181CC, 0x49AC65EA, 0x157A7D45, 0x4899B3C8, 0x585ECA1D, 0x8BD08F46, 0x17D64E54,
+0xC288DB81, 0xCB377CBB, 0x8B4E00CE, 0x6B7D0AEA, 0xE0854EEE, 0x0AF18BE2, 0xF67E3EEA, 0xCCA15D40,
+0x4403CB07, 0x9858C4C0, 0x518A7A05, 0xFAD90216, 0xEEDE5A6A, 0x0AF311E1, 0x8FED709C, 0x54A8B2F9,
+0xBB7438D8, 0xEF5651D3, 0xD7528A77, 0xD03B5FD7, 0xFAB94E48, 0x90B8971E, 0xB393A252, 0xF400AB9E,
+0xF99C692B, 0x0AAE3C0C, 0x52C55C9A, 0x3C073903, 0x3FD1F4DD, 0x232F0129, 0x27C2228F, 0x81F1CFEF,
+0xA8FF1A4A, 0x429A7864, 0x4CC6B4F5, 0x81885826, 0xF40F2B6B, 0x5DF7E688, 0x2095A871, 0xB9175F82,
+0xA8AA3DED, 0xC6D119B0, 0x9C1825C4, 0x5EA57DF5, 0x7B95C6E6, 0xD51E7D0F, 0x069FDD31, 0xD4177562,
+0x15206C13, 0x6EE19EC8, 0x0A6ACAB4, 0x1B0EEB65, 0xD900A6E9, 0xF56F3C8A, 0x147C28BA, 0xDFF9EA6E,
+0x0E3E7210, 0x277F25A6, 0xB436B717, 0x7081F3D8, 0x8FFA0366, 0x50246CF6, 0x228D2241, 0x7891E1F3,
+0x141D98AF, 0x333B67F5, 0xB4E1603D, 0x7D1151AE, 0x5FFDB0E2, 0xF2A1A421, 0xB46AB34C, 0x159B3613,
+0x6A6E0032, 0x16F15513, 0xB081BC56, 0x141B23EF, 0x5A1DD9C4, 0x2AF12008, 0x70FCD9EF, 0x34D85077,
+0x72DBE746, 0x5EF58754, 0x8C4C7FF0, 0x1B2BC108, 0x1D2F2EA6, 0x60C0F3E3, 0x01000000, 0x06009E01,
+0xEB7F120B, 0x2A067A58, 0x512FA41A, 0xFFDBE283, 0xF529F736, 0xEEB757FC, 0x84374CED, 0x608C1AAE,
+0xC077215A, 0xA0AB0F05, 0xD167C0FF, 0x25AF94CF, 0xB35D185F, 0x48CBF41B, 0xAE3F7B7A, 0x1041A1DA,
+0x5C5B60E1, 0x8A5AF469, 0xE79512FB, 0x579A6C76, 0x55FC9C04, 0x8F085A32, 0xBDCDF839, 0x9FA9B51E,
+0xD50CCCF9, 0x0A9B76E4, 0xB54CB3CA, 0xB699BD66, 0xC65568A3, 0x83C5F1E1, 0x72BABA5E, 0x55ED17E2,
+0x74CFDBF5, 0xC4B13766, 0x8CA3F520, 0x062AA44A, 0x5FBC7341, 0x6AFBCFE2, 0x42322B12, 0xA1D8D78D,
+0x2812D3E2, 0x4E3782F1, 0x11A4A921, 0xEB5BF9F6, 0xFC6AA53B, 0x47757B21, 0xE0B1601C, 0xC789BD14,
+0xE07214F2, 0x389AE354, 0xA3EB0D30, 0xB2BE7F6F, 0x8A54535A, 0xBCC6E6EF, 0xEA1BB66D, 0xBB9BE2E3,
+0xB3503363, 0x363F6660, 0x352C48D6, 0x4EF07533, 0x8831535D, 0xEC3B7204, 0xEE21F805, 0xFD440E72,
+0x8F079E09, 0x2AEFE680, 0xAC774BDA, 0x41F7C737, 0xFFB6A0A4, 0x284ACB5C, 0xA8CBA9A0, 0xEF0B7C2F,
+0xFF670FD7, 0x61B7D4D5, 0x9322E37A, 0x2503B301, 0xA2999801, 0xE4423979, 0x5FFC7605, 0x28358D84,
+0x3837DC1F, 0x2CDC7D3B, 0x401BC493, 0x08012713, 0x16EE2432, 0x13F08FA1, 0xB5139789, 0xCB3CFCA6,
+0xB53A2F2A, 0xD4C7E53D, 0x0B69C160, 0xC1F88576, 0x9DEDF61A, 0xA8A161D1, 0xD5D74A39, 0xF0E1747A,
+0xA91DF52C, 0x64003669, 0x47B5277F, 0x1A863602, 0x67E29DFA, 0x20C832E6, 0x9E1C536A, 0x388AC818,
+0xADCB5DCE, 0x9EA8722D, 0x3E7B83FF, 0x227FF719, 0x30BDE26D, 0xBD02C72B, 0x2B5203B9, 0xE0A0CE1A,
+0xDD4563CB, 0x7D369383, 0x8E80E898, 0x94A3D267, 0x20A0F24D, 0xE3DCCAD5, 0x711ABD9C, 0xF0F4CA8E,
+0x0775204E, 0xC9AFE417, 0xB068BEDE, 0x8278293B, 0x661D336C, 0xC58707D6, 0xB717F7B3, 0x0E830C68,
+0xC3C7336A, 0x38C19C5E, 0xD2DF96F4, 0xDE9F4260, 0x96BE15E4, 0xB7088244, 0x4B0F9B17, 0xD9C985FE,
+0x92606537, 0x082C536D, 0xF75C74AA, 0x8539482B, 0xCD7E5814, 0x3AA964DF, 0x282A73FB, 0x16FE9084,
+0xB17CA980, 0xDE81C9B5, 0x52D5B3E8, 0x872CA941, 0x32B143F9, 0x6617A4EC, 0x2A9F2CDF, 0xD91F46B7,
+0x95C23AB4, 0x3C4AF6D6, 0x5320B179, 0xA0EA11CC, 0x4D8BA2C9, 0x2C402099, 0x6454A3CC, 0x038B0EBE,
+0x2B301A1E, 0x91013E21, 0x710A9120, 0x411D892B, 0x04EB1E12, 0x65ABFD32, 0x90EFD526, 0x651B8C06,
+0x067A4ACF, 0xED3AA3F8, 0x6DABCF70, 0xA56D96A8, 0x0956DD0B, 0x179FF20A, 0x8240447F, 0xC64F2A39,
+0xC0B4D307, 0x23142F58, 0x664D1A05, 0xE791FD78, 0x9EBD7CF4, 0xC6E7EE8B, 0x98ECA17A, 0x7D59F9B9,
+0xA6CDE94E, 0xB18085C3, 0x5E9D54DB, 0x1E431DC4, 0x661495DC, 0x4E8A7FC2, 0x6AC625A6, 0xB0AABE35,
+0xF1E5E3C6, 0x40825496, 0xCD121CA8, 0x5242856A, 0x62215117, 0xFD6B0D8E, 0xD2867DBF, 0xD051AAA8,
+0x28F33D27, 0x2F0291C4, 0x1D079F2D, 0xF30CBF26, 0x302435CC, 0xA1BE2AB7, 0xB6659B29, 0x9D146DB3,
+0x0087CF2E, 0x5BD2AD3D, 0xE757FB75, 0xF120DE05, 0xE757768D, 0x40C336F3, 0x29DAC699, 0x07033F84,
+0xD12A839C, 0xA9B61907, 0xCD35BA1B, 0x40EF8B87, 0xF001BCA2, 0x209004F9, 0x45EC9701, 0x4BE8A2E8,
+0xA499FD4D, 0x2C7E6D02, 0x756507A3, 0x69354754, 0x2A8C92C1, 0x419A1902, 0x263EE253, 0xD0ADB5B7,
+0xF315A992, 0x7F21E734, 0xA6DE5D89, 0xBB3D478A, 0x9A8AF57C, 0xB01B9EE3, 0x513C822F, 0x33004723,
+0xE81A2369, 0xDBFB4510, 0xA1D2893F, 0xF635A763, 0xF57976F3, 0x935B6D6E, 0x2C916A9E, 0x082C009E,
+0x3310AB7C, 0x684DB696, 0x84A1E9E1, 0x6C3B176D, 0xE56AF568, 0xD8874B71, 0xC76D2DE9, 0xD5017E77,
+0x4F8778FC, 0x2A6710CE, 0x167519F0, 0x4DEE23B4, 0x42C79DE8, 0x42031601, 0x421B5F1E, 0x0D2B6586,
+0x1BFA56B9, 0xEEF9D265, 0x24F6EE38, 0x877CD4EA, 0x79466FD8, 0x715BEDBF, 0x58FE957E, 0xCDFAACF2,
+0xC4FEAB40, 0x6DD56995, 0x20EC87EA, 0x127444D3, 0x5234691F, 0xF92EF344, 0xEFC8C7FE, 0xC5D92911,
+0x84783700, 0x79F990AD, 0x1D8A43D7, 0x10F0DA1E, 0x3DB60858, 0xB9C32B44, 0x3E04424A, 0x10E19E31,
+0x47E7207F, 0x0FE640BB, 0x9A3CAB9A, 0x296ACEF9, 0x7D5204FC, 0x782F0701, 0x1CCC7C8F, 0xA4D018B5,
+0x0F2D86E1, 0xC1644796, 0x482F0D74, 0x6EA63B18, 0xD1E41F8A, 0x3A8EFEE8, 0x572E6C69, 0x1F1CD78A,
+0x3AC29C5A, 0x97F9B944, 0x4B9172D2, 0xA084774C, 0x348B763B, 0xA101922C, 0xF5539359, 0xC58758DF,
+0xAE37EF90, 0xB2D2FAF4, 0x9D00814F, 0x5DFE6F2D, 0x2D3091D0, 0x373C7E1B, 0x4025FC3C, 0xD7A959E5,
+0x39929B05, 0x05F9EC4B, 0x94BA0D84, 0x751D86A7, 0x9B7E702E, 0x9219773E, 0x4A5A2F5B, 0x659DCBFA,
+0x16F6A555, 0x35CAC797, 0x35D6D226, 0x9EDA67A1, 0xE451D4CD, 0x4D3DBE51, 0x9AB99606, 0x98FC13E0,
+0xE515E249, 0xA7BC2F59, 0xB498FE7D, 0x2A56198A, 0x7B84C621, 0x46A6FB54, 0x829F5174, 0xEC037E10,
+0xE5E19456, 0xDEEDD9C5, 0xF8A6F7AE, 0xDD68A1AA, 0x4A4077D4, 0x8133BA78, 0x93C34E72, 0xB43BCD5C,
+0xA936E3AC, 0x6E0B695D, 0x460FAE3F, 0xB665DA27, 0x91B3A533, 0x591512F3, 0xC3F519C1, 0xE67CEF0F,
+0xEEAE90EF, 0xD7C7A5F3, 0x40ED4D3B, 0xD22A2911, 0x225FF34C, 0xCC2B3275, 0x4D61869B, 0x768D9B45,
+0xA3018A85, 0xEBB932D3, 0x6467F946, 0x40F2AA97, 0x01000000, 0x06009A21, 0xB0E13F12, 0xD822E0A1,
+0xCE94A634, 0x839465F8, 0x3F9C5DC6, 0x2FDA100E, 0xFAB2230D, 0x684B9362, 0x611789C8, 0x68081CFC,
+0xA494399C, 0xE5167084, 0x370F5087, 0xEADD243B, 0x3DCB34B3, 0x49055B24, 0x2220DE2E, 0xBA79CAA2,
+0xF5364495, 0x2EF2CCA3, 0x1E41F654, 0x19A77F17, 0x6BBC46C4, 0xEE47913D, 0xC7641620, 0xEDC7BED1,
+0xBB3E33C1, 0x8ED8E536, 0x991081F8, 0x077849FF, 0x40A463D4, 0x2CF4251C, 0x61B798B4, 0xF405F4F6,
+0x4BD9238F, 0x1AE0400A, 0xE370EA3C, 0x15A7849A, 0xFF83C0F3, 0x9A95A15E, 0x5788BF5D, 0x4E9E350D,
+0xDD41BDA7, 0xA0C93778, 0x1C87CC95, 0x1DDD7C77, 0xA2996268, 0x341910E8, 0x73FBEB7B, 0x1EB92485,
+0x87E070DB, 0x9E350252, 0x881BF41E, 0xCBB7805E, 0x1779C496, 0x63861897, 0xD2A74596, 0xCF07EA3A,
+0x4EF27FEB, 0xC40267C2, 0x36A03BF1, 0xF150E3BA, 0x3EDA4129, 0x37864813, 0x4CB82858, 0xD19B488A,
+0x81F8AF21, 0xDBEEA157, 0x63D62A75, 0x2CC0BC15, 0x328F1D5C, 0x3620AE9A, 0x3148A36F, 0xA1DFDFAD,
+0x49D5A734, 0xA79D2DFF, 0xF30A246B, 0x5FD32D93, 0x210E1D51, 0x682C8831, 0xB90CE3AF, 0x3C8009E3,
+0xAD5EC2D1, 0x555DEA34, 0x9A0C3B37, 0x05608ECF, 0x1D5AD738, 0xEA9BA933, 0x557F0622, 0xFB973090,
+0x9004681D, 0x112D3F83, 0xBB33952C, 0x6E2A24AA, 0xE8367A06, 0x800A3B65, 0x590A5C45, 0xA55835F6,
+0xE424F8D0, 0x258CE00B, 0x4C7AE5DE, 0x59F68A1A, 0xDBF7DB35, 0xB1D383CC, 0x3777E539, 0xF62C6AF4,
+0xCBB53868, 0xC87A7555, 0xD08C50BB, 0xABFD8724, 0x6F1C78BE, 0xE24F1B4D, 0xD6B2D025, 0x15FFECC8,
+0x73836A7D, 0x0484BD75, 0x8F72D4FD, 0x9CC97082, 0xF9244259, 0x632C7F66, 0x38EE10CA, 0xF7309D47,
+0x974C54E3, 0x9503400E, 0x951FB809, 0xB24F095A, 0xC78056B3, 0x989F22F9, 0x552F6B9B, 0xA74C0A81,
+0x796DB35C, 0xF6CAC967, 0x8B882F57, 0x6FA3EFA2, 0x754C4DC6, 0xD6F27CD3, 0x841BDFD6, 0xA53CFE2F,
+0xF8693BDB, 0x9264E948, 0xD02DA797, 0x0FF47156, 0xF39F38E5, 0x80A5730E, 0xBE5EBBD8, 0x19C666F1,
+0x5D7BEAB8, 0x35117A1B, 0x557F0FD9, 0xEF681639, 0xF3CC31F5, 0xFF599389, 0x5FE7AB97, 0x5C462909,
+0xE7175F3C, 0x03234407, 0x2B2E8F83, 0x0A66FA5D, 0x24A251A5, 0xA0973D9A, 0x2397EE8A, 0x792D0DEA,
+0x2DF99A48, 0x3203B308, 0x7DD31F53, 0xF067E8BA, 0xC157BECC, 0xFD429DD8, 0x52CAFAE6, 0x95E76D44,
+0x13DF95BA, 0x6F32E403, 0xE19B4D5C, 0x87A632FE, 0x43051D64, 0x16F050D2, 0xA061137B, 0xA57326CB,
+0x8DA72179, 0x2FA75E94, 0xB5A1F60C, 0xD95D4545, 0x084A499B, 0x407C96F5, 0x7B2B4D07, 0xCADEEDC3,
+0x3BB01043, 0x872FEA78, 0xDEE453CA, 0xCEE26A6A, 0x49B517BA, 0x55EDCF65, 0xE3796519, 0x6FC92F7A,
+0x44D0A5CE, 0xE7E31191, 0x868665A7, 0x3F2763D5, 0x0D1F3125, 0x756A4814, 0xF5E0E2AF, 0xC3C91C1E,
+0xE94E6B1A, 0xA48EB77B, 0x34CB93B2, 0x4A841834, 0x6C3926AD, 0xA50053DB, 0x93548D5A, 0xA6730C7C,
+0xB2FFAB77, 0x118A8D72, 0x2D4558B3, 0x5DB45375, 0x2B909CDF, 0xB68B825D, 0x9C86EC80, 0x82515468,
+0xF06CBC23, 0x259867C3, 0xE4A08AE9, 0xF78824F1, 0x8083F4D6, 0x652C5170, 0xFE8EA8CE, 0x58D5A652,
+0x360107FF, 0x20D01F96, 0x6AD27F50, 0x6F7EEAD4, 0x24F7AA63, 0x3EB91EC7, 0xB52C20CE, 0xDD2E86E8,
+0x130576C1, 0xC6DA1107, 0x9AC0935D, 0x2DB60CAF, 0xFC42E235, 0x97EDB304, 0x8DD7264B, 0xE74DEA47,
+0xFAF3E459, 0x28907DD6, 0xEEDEF427, 0x5F1D922D, 0xACC375B1, 0xE7D780A7, 0x61FFD8E9, 0x25B771AA,
+0x1B716476, 0xFEC43432, 0xDE50AE38, 0x2ABE284B, 0x0173B138, 0x45FF8931, 0x46DA140D, 0x07418D2B,
+0xCCAD7DA4, 0xD50BA70B, 0x14366711, 0x38BFCC3F, 0x2E6CE9FA, 0xA07B15C5, 0x5B228186, 0xD12B1B4D,
+0x08715892, 0x8C6093B6, 0x7450B73B, 0x5DE31CCE, 0xF2934521, 0xAB13EEA2, 0xA731B9EA, 0xFF7B03D2,
+0x06E7AB05, 0x1F1286FB, 0x30DF0B10, 0x16D77BE0, 0xF4D1365A, 0xEA4F135B, 0xAC4AD81F, 0x428162D8,
+0x86DB80A2, 0x766B30B3, 0x2EBE6629, 0x3283CD0D, 0x02C63AE6, 0x3FF3DA8A, 0xF702FF60, 0xD1D241F4,
+0x068F21FD, 0xD90D743A, 0x36682A7E, 0x7C3BCB99, 0x554AF113, 0x2411A222, 0xC8FD46D5, 0x44EBA0D8,
+0x40663FCC, 0x74685811, 0xF55E68BD, 0x38879FDA, 0xC5ED3027, 0xB3188848, 0xB769EA10, 0x765FAB8D,
+0x3F51D60A, 0xF56A9586, 0x0661CC46, 0x5FD019AD, 0xFD860AE0, 0x5C55B654, 0xF028243A, 0xAC626DB7,
+0x0756DF08, 0xB6F40249, 0xC1A131FE, 0xC82F4527, 0x17620253, 0x9850755E, 0x95811546, 0x36621A6C,
+0xA703E156, 0xE7367EFD, 0xC58157C8, 0x941D3C14, 0xDF55CBD5, 0xF2ECA8DB, 0xC2C6D431, 0xC7043516,
+0xDF759535, 0x51B5406C, 0x9E87CEEF, 0xB506C965, 0x8E24F5C7, 0x768A77E9, 0xCD236BB7, 0xD08FAB6B,
+0xACB4B92C, 0x6442C175, 0xE06144D8, 0x57F04EA4, 0x1E156DC4, 0x47C328E2, 0x8448F7B0, 0x67A64B37,
+0x4A40B2F4, 0xD7088A9F, 0xF1126DB7, 0xC4ACED13, 0x8DC1C09A, 0x43583DC4, 0x84E1C5A8, 0x5D811899,
+0x84E6C8BD, 0x7CF303CF, 0x7A1ADA83, 0xB4FD8327, 0x0D48A6B3, 0x8365FB88, 0x24A8792C, 0x6632F9DF,
+0x05BE09E1, 0x90752E3E, 0x1A959C9E, 0x04AA9B13, 0xCD25BD96, 0xC0FBE442, 0x689798FD, 0x41E3C855,
+0x818C00F5, 0xF7183FE0, 0x434D186D, 0x4250B2E2, 0x2E2CB030, 0x7C48908D, 0xC1EDC052, 0x378068B1,
+0xF592FAF9, 0x51CF0D7F, 0x26C46991, 0xB12E3FCF, 0x02CB2D6F, 0x6238F98B, 0x7BFA7465, 0x4FF6E5FD,
+0x99080E6D, 0x530C9DCE, 0x4B56BCEE, 0xD2C4D499, 0x0928B8D1, 0x031E70C7, 0xCBCD22F5, 0xF1761FD7,
+0x8051952A, 0x9EE7DBCB, 0xA6A3B69D, 0x6541E3FB, 0xC6EFE0BB, 0x22F68D4D, 0xA5DEE08E, 0x84022BEB,
+0x751DD162, 0x1F0C0E49, 0xC7DDA6E1, 0x6E060E92, 0x66F0AAF0, 0xB2EA1836, 0xAB665E70, 0x3C633B06,
+0xEED53C54, 0xDB1A6BF8, 0x76D119B3, 0x6A8290AE, 0xE6B07025, 0xE820BB89, 0x760D6A6B, 0xC77C0415,
+0xB76CE43C, 0x3052D8AF, 0xDFC10683, 0xC4A21399, 0x28B050F3, 0x48718D74, 0x35C88705, 0x49CD84AB,
+0xC357F6F8, 0xE7084C65, 0x4A4C00CA, 0x1E8C7E7C, 0xE42DECF4, 0x3413DCB4, 0xDB7571CE, 0xB82443CC,
+0xA04DA856, 0x4B1BEF29, 0xAAFEB7B2, 0xB4C7CE4C, 0x747D53A7, 0x206CE197, 0x01C3E42A, 0xE3B123DD,
+0xC04757A8, 0x6D762465, 0x3FF6CE01, 0xC6FC95DA, 0xB16171CB, 0xD19199F7, 0x1440F87D, 0x925BCB67,
+0x5A1252E9, 0xE3611735, 0x5DD08D25, 0x9E4F981B, 0xF7DF0763, 0x94685327, 0xBDD0B560, 0x1A94B0F6,
+0x93246A5D, 0xA69EE774, 0x14605AEC, 0x02FA746D, 0x5164A4C8, 0x5EA587CB, 0xCF043586, 0x207BA58B,
+0x6B3DECA0, 0x29890CEE, 0xC38EF121, 0xF252AFC1, 0xDBA83C61, 0x8A452973, 0x5FC5F8EA, 0x5936F73B,
+0x4AC732E4, 0xB232F72C, 0x8B6665A9, 0xFE12E1FE, 0x8714A0C5, 0x913F9CB1, 0x14D976CF, 0x610A248D,
+0xBD58D76D, 0xCCAD4216, 0x60E426F8, 0xE8AFC31E, 0x1FEA3967, 0xD7272BA0, 0x5FBFC42B, 0x0A3B9FB0,
+0x11BF5D74, 0x2210B1D9, 0x49B8D01D, 0xE36B73EE, 0xF5E46769, 0x03A73543, 0x4A55E036, 0xBF2B163F,
+0xA23F6FE3, 0xB391F685, 0x372833F8, 0x20DA6C23, 0x51D08712, 0xEFD2ED07, 0x38999D77, 0x5109F6B7,
+0x3C0E84D6, 0x45860B58, 0x61AEE8EF, 0x872DA5DE, 0x306C5434, 0x78C4180F, 0x740551E2, 0xEEA0805D,
+0xDAADB69E, 0x94917140, 0x560149B3, 0x6ADB6AC0, 0x00D21D94, 0xF9D92B4A, 0xC4CD10BF, 0xA5252581,
+0x2968859F, 0xC64E8E59, 0xBA0AA578, 0x81CEEB0E, 0x5B0EB96D, 0xA67C9F4D, 0x4BA0E11C, 0x0B917C10,
+0x36394E14, 0x9B4AA92D, 0x7B3CC4BC, 0xE91C9A97, 0x4F35FBFD, 0xDEE9331F, 0x54570546, 0xA2BCBE07,
+0xEE63F7E7, 0xCAB50F75, 0xA2819BB3, 0xB912F35A, 0x703D4FA6, 0xE0D1F725, 0x8686B737, 0x8F601325,
+0xD13321B6, 0xBECA4FAE, 0x925151ED, 0x72A3A5A3, 0x801C3644, 0xB277DAC6, 0x3F702430, 0x819225CE,
+0x78C3948B, 0xE75E2E2B, 0xCFC85498, 0x5A9A7549, 0x7CE5AEEF, 0xA0C56609, 0x40FFB093, 0xE6FCBD8B,
+0xB469F158, 0xDA7AA88F, 0x7C6C041E, 0xA7711003, 0x1F37760E, 0x679D3FFC, 0x95F09C64, 0x00331A5B,
+0x7ADC614F, 0x9F71B25B, 0x94FDBC9C, 0xEA95B2A1, 0xD9898614, 0xE7828C31, 0x4F9D86BD, 0xAF22199B,
+0x029AD77B, 0xD733961F, 0xBD0131D1, 0x81C7C58B, 0x0BAD3D9B, 0xC88022A8, 0x0396C6D4, 0xB2755E16,
+0xA805E8E6, 0xF6E05CA7, 0x369A9132, 0x11697B32, 0x11178B9B, 0xA914342C, 0xCC3B3B00, 0x14849501,
+0x42381D56, 0x2B842CCF, 0xE175FC57, 0x09B30B6D, 0x430E098E, 0xFDAA25FE, 0xE2CBF1EC, 0xD2612636,
+0xB85A8706, 0x5A6070B4, 0xF4D89043, 0x98880EDC, 0x1FF856CE, 0x93BFC218, 0x4B808CA2, 0x2716B824,
+0xD34F0DE9, 0xCD2E9C03, 0x07E03F4F, 0x139A14E2, 0x9A60E253, 0xFC417459, 0xEA1A0035, 0x603FBB70,
+0xF6000C79, 0x560B207C, 0x35397E13, 0x8CB37EC4, 0x87C89CBD, 0xA01BC580, 0x9A7B4687, 0x13B2AC9D,
+0xE662FECC, 0xC48DFBBC, 0x41636DC6, 0xDC9A9B93, 0x7E01DECA, 0x44474BE7, 0x53A79809, 0x13C96A76,
+0x16E7355C, 0x768D3C5E, 0x01575F85, 0x9F3B8BAD, 0x2D56DADB, 0x56395DFB, 0xB3CCAC2F, 0x9605DE16,
+0xD546D71E, 0x15A77AB5, 0x878872B9, 0xF835EE76, 0xB21AA3CF, 0x9E050123, 0x4F2933EB, 0xE6F8E702,
+0xB00FE458, 0x20279866, 0x20FEC58C, 0x42F57001, 0x656BCC4A, 0x26A1512D, 0x31F6A074, 0x62AE4436,
+0xE2BC2A50, 0x164DF231, 0xF3325886, 0xEC41AAF7, 0xE0AEA3A3, 0x6884ABBC, 0x6B59E9A6, 0xF7FF4378,
+0xCFEBE224, 0xECB0268D, 0x7DDECE05, 0x5BE7EE7F, 0x33C5B8A7, 0x336EFCD9, 0x59A989EE, 0xAE4280CB,
+0x163543AB, 0x072A8E70, 0x8406E610, 0x180EDA03, 0xBF6D75D9, 0x3514EE13, 0x4D651665, 0x6C0E6027,
+0xBBF5CC90, 0xB7E77319, 0xA4BEB754, 0x23BB1EE7, 0xF5A78E7F, 0x9BF7549E, 0xE1BEABAF, 0x1ACA9DDD,
+0x8B525063, 0x43290299, 0x80D55CDD, 0x01484D88, 0xDCD3EB97, 0x47EBCD5B, 0xA1D20B7D, 0xE10A699E,
+0x0959A309, 0x014E44E8, 0xA9ED3373, 0x26A31AC2, 0xEDD3389B, 0x23846F1A, 0xF4D5E795, 0x0EE352BC,
+0x87E6FF9B, 0xCCEADD64, 0xB6E3972F, 0xEDF9C481, 0x5AC79CA8, 0x4BAFDC99, 0x075380BC, 0x3F1A52AB,
+0x6F71B972, 0x799292D4, 0x5A29E876, 0x4DFCFD20, 0x6F03DBC3, 0x6ED40722, 0x16D57C98, 0xB9AC7375,
+0xEF5031B8, 0x39D82D4B, 0x89CF91AC, 0xE053D135, 0xA0D3D976, 0x89B001F3, 0xB48CBDB2, 0xD3887E8E,
+0x522F4101, 0x85F8E85E, 0x33307F25, 0x3060C3CD, 0xA8D2C01B, 0x0131D607, 0xECBFB99F, 0x688AE94C,
+0x7DFFD830, 0x3E34EC75, 0x3E7405F6, 0x9FF29CE0, 0x13EBC6F7, 0xC4A87B27, 0xFFDAC82B, 0x38B431A3,
+0x55A82A13, 0xAA5BEBBB, 0xDF7D58AE, 0x082AB373, 0x7B5DDA0A, 0xF26B72CB, 0x034C86B9, 0x135D1E5D,
+0x3AA93BF2, 0x6252B52C, 0xD77BC399, 0x06496135, 0x0893267F, 0x51A02044, 0x5E036410, 0x2FAEC6E1,
+0xEED0F92D, 0x8EF0478A, 0x49679793, 0x5C3C4819, 0xD4AABEA2, 0xF685B320, 0xC05F0CFE, 0x5FE643B6,
+0xB3015D6D, 0x473E75BA, 0x8CBADE9F, 0xFC9D5564, 0x9C3B74E7, 0x4C05B31B, 0x05EA2D4E, 0x57F98689,
+0xF6A32ADD, 0xB73134E2, 0xDEA70F6E, 0xAD8CFAD5, 0x91934762, 0x92106FEF, 0x696ACA76, 0x2844AC58,
+0xB8A7D39F, 0xC054CE03, 0x0C35C862, 0x2401486F, 0x414EE8C1, 0x45C34E02, 0xA5E191D4, 0x01695CAE,
+0xE928DE21, 0x7A573BC9, 0x43CE8DE4, 0x3E4FEA10, 0x91A19DE6, 0x9A7DB547, 0x65410FFF, 0xC680A070,
+0xFC07367D, 0xE5721A83, 0xEB3233B0, 0x98A566C9, 0xB9231C8E, 0x083ACE17, 0x259C4607, 0x0A496343,
+0xD40B7725, 0xFF5DFA24, 0x2BFEB274, 0xF52726DF, 0x23E19ED4, 0x32566D85, 0x15944857, 0x54B67141,
+0x4DA3941D, 0xE2893D63, 0x56E90E5B, 0xC894B1F6, 0x26574A9A, 0x0BDCD854, 0x55B50D89, 0xD6CF29DD,
+0xA879239D, 0x77C57C87, 0x74198F3B, 0x10EC1DA1, 0xF59070E5, 0x6C3AD7CE, 0x6AB65369, 0x825B085F,
+0xA4010ACB, 0x03D8558B, 0x50F9CAFB, 0x07F8A404, 0xB25BC246, 0x4C9B0ADE, 0xE6646054, 0xBCA3E643,
+0x3D76CDCF, 0xA2E95887, 0x4DC31FE7, 0x03B0E37F, 0xF6556C52, 0x006B786E, 0x640F4FE2, 0x02AF7C2C,
+0x33F7E239, 0x47A5D5ED, 0x4206B741, 0x40322EF0, 0x6B89F395, 0x8B819E05, 0xFBA5B800, 0x4D9D867A,
+0xF530C017, 0xA2DB0B30, 0x7843E08D, 0xE4074908, 0x4F1FDBA2, 0xF38ACD5C, 0x14B560DC, 0xA1E3C15A,
+0x1A94CDEC, 0x2BDC7F41, 0x6E06F712, 0x3E95089F, 0xE5A78C89, 0xCC39724A, 0xDBE3B114, 0x3541B12E,
+0xCBC96F1A, 0x9A5C440E, 0xD4DFB3AD, 0x06DA2097, 0x2780526A, 0xF419A68A, 0xEF7DE4BD, 0x7B7256FA,
+0xB8076ED0, 0x381744AE, 0xCE2EF694, 0x2950CB0A, 0x608E7975, 0x49CC957E, 0xBA546B68, 0x8BC30438,
+0xFEC135D6, 0xC93C4627, 0x65B0CA35, 0x17DA883A, 0xDABFFE7F, 0x885F6E2B, 0xEFD26E6C, 0x4FC86781,
+0xA1F97CFE, 0xD37E11CC, 0x4B92EECF, 0xEE66D2B8, 0x86B7B626, 0xEF2EC687, 0xF0F4D076, 0x60C5FA1B,
+0x919FD34C, 0xD8988527, 0xD77177C7, 0x9CC49D66, 0xDA59B2D6, 0x970C2A6B, 0x12C92BC7, 0x7DA2C219,
+0xC7BDB997, 0x93565933, 0x6C07993C, 0xC0E8A8F7, 0x10F7EFA3, 0x71701ADF, 0x734F7231, 0x5911B45B,
+0xBDAC3536, 0xF56A2EBB, 0x3FDCBFD7, 0xD525015E, 0x176AA2D2, 0x6802A8C3, 0x4BC30B40, 0xE77C8985,
+0x36A5186B, 0x40C63E83, 0x8D41012C, 0x9ACDD77B, 0x1574522F, 0x30A585F7, 0xBF05D91A, 0x727B729E,
+0xAA6557B2, 0x0FF6D15F, 0xE3D0EC4D, 0x4383E37B, 0xA544E298, 0xAE05D795, 0xB55E1BDC, 0xA0296864,
+0xB577C5BF, 0xBA4418B9, 0x877FE6C9, 0x57C236D8, 0x1F54A97F, 0x0F338579, 0xE44217EC, 0x8961582E,
+0xE5E0FD96, 0x693CDFBB, 0xFB1D9DFD, 0xAA192927, 0x3EE648BC, 0xFBBAD708, 0x3C623A32, 0xA1660428,
+0x2EE42422, 0x41BD487F, 0x83B59D91, 0x2D24D6EF, 0xDBF959FE, 0x9F1FF77D, 0xD1ECFF56, 0x1FC0A421,
+0xFBEB1A0F, 0x1D458641, 0xB5EB7992, 0xA6D27EC9, 0x043518AA, 0x4727AD52, 0x52DD3028, 0x87D83F44,
+0x7D0AC361, 0xE82AFD3E, 0x136077E5, 0xCC397076, 0x4F881AC1, 0x7F1B66EF, 0x9F78F178, 0x41CCB75D,
+0x21F6DADC, 0x9DD6B23A, 0x77492C26, 0xEDB67E8A, 0x768A0408, 0xE45BA470, 0xB48F5A5F, 0x548B7CD5,
+0x98CADC19, 0xAFAE30C1, 0xCC226BC6, 0x7E23C38F, 0x6B1CC6C4, 0x3BE7D648, 0x53BA06AD, 0x46E54F49,
+0xF0DDB943, 0x929C6354, 0x1675E4B0, 0xA3626FCE, 0x7D4CD4FB, 0x56A7A6C3, 0x12218AFB, 0xD3109E7C,
+0x5647B958, 0xF75C2B7B, 0x6F2076E0, 0x8B5D1309, 0xE14625ED, 0x851BD7E4, 0x0714633C, 0xED042DF3,
+0xF923B43C, 0xC34B5127, 0x167E25A1, 0x7F476360, 0x1E896BC1, 0x3CEDF689, 0xE9143118, 0xF725774A,
+0xA4E90BEF, 0x1645B240, 0x910F347B, 0xE3C5AAE6, 0xA810F39D, 0x65F8AE58, 0x2EF9C82D, 0xF8061EDA,
+0x959A18FA, 0xF4E1EDB7, 0x75D51FCA, 0x519F0144, 0xF3958347, 0xD20D52FB, 0xCFEA1145, 0xA1C0802A,
+0x89FE6583, 0xE6012DEA, 0xE3D4B4A0, 0xDEC8E609, 0x5A840FB7, 0x1BA8F5CC, 0x988D0A2D, 0x7469E310,
+0xA1750C8F, 0xCFDFAA48, 0xC0AE12DF, 0x287F868B, 0xF67B1BFE, 0x9882598A, 0x19833C20, 0x69E7EAFF,
+0x9878C2EE, 0xCD164F3A, 0xED874C8A, 0x30FD2453, 0xFCF6F3B4, 0xEE060BC3, 0xBEE24B89, 0xDFA985F7,
+0x5527157A, 0xFCFDD13D, 0x219F0D6E, 0x4005E651, 0x7A60E73C, 0x690F0954, 0x43A74AD9, 0x8B84883D,
+0x1314EE29, 0x0BAD771F, 0x5108C995, 0xF5EEF04D, 0xF298FEFE, 0x703B09FF, 0x45E1E95F, 0x7A0FC0B1,
+0x715221DE, 0xE5371949, 0x911B79F6, 0xD026F660, 0xA18906EE, 0x595188B7, 0xB381F40A, 0x7812A2CC,
+0xE84BE598, 0xEFC8195F, 0xE36D5E43, 0xFF5D5640, 0xC768E027, 0xA404049A, 0x8243C1F2, 0xD405DAB7,
+0x447AD8CE, 0xEA6DD2AC, 0x4D46A84B, 0x6DAA97E7, 0x8659A666, 0xC30A63A8, 0x06439687, 0xA550DCEB,
+0xDCF59D17, 0x0687C5DD, 0x7C785581, 0x535E55FD, 0x5555BE7B, 0xBCB653FD, 0xA4997753, 0x712F4ED7,
+0x0B3065AD, 0x42672196, 0xE7833B23, 0x661012FD, 0xC6B78A43, 0xC35DC639, 0x117DB7AE, 0x3C9E4A77,
+0x0D12F36D, 0x1149FB4D, 0x64410F5A, 0xF1D0C5B3, 0x0CA548DE, 0x68F81DA8, 0x0309A449, 0x6CAC4FBC,
+0x61042B86, 0xF81A0971, 0xD18AFD80, 0x788C93B8, 0x663BABAB, 0xE92F321F, 0xFE9DBEE9, 0x80F729AA,
+0x9B2F58B1, 0x80DE8276, 0x32128F9E, 0x6AF25411, 0xD4ABD978, 0x2A5F55BC, 0x218B7BDA, 0x93D6B99B,
+0xD058D641, 0x85619BE4, 0x7938663B, 0x1884ECC9, 0x31616A71, 0xCE92602C, 0x872437D7, 0x0018806E,
+0x01010000, 0x0F08009E, 0xEFD17F12, 0x5B45B630, 0x4539B008, 0x7FDF4B2D, 0x1A658B66, 0xC99FD49A,
+0xFAD9633D, 0x070F9359, 0x68CD9705, 0x8F109162, 0x7C8A3CD5, 0xF49F3C5D, 0xDB5336D7, 0x081C3D2B,
+0x3E5B0291, 0x922B86F1, 0xBC09F880, 0x0FC6B853, 0xA1F14E86, 0x7672D924, 0xD87DEC14, 0x4A697157,
+0x13041BD2, 0x2F4664C5, 0x8EDA05DB, 0xA00BA6D2, 0xABA95379, 0xB0FAA18D, 0xD0FE5C6F, 0x1DFD5EB0,
+0x5F932243, 0xCFAFB3B2, 0x9F70F1AA, 0x39F0D8F7, 0xDB22F562, 0xC7993DFA, 0x768CB460, 0x14E80C25,
+0x231C2D66, 0x7417CC7A, 0x32796A78, 0x21060316, 0xB3512505, 0x95677C74, 0xE8A4A490, 0xE737B77D,
+0x97F21DAB, 0xCAFC2D29, 0xB75E773B, 0x409E4529, 0x6846AF2E, 0x0C8E0DF1, 0x46E44909, 0x841552AB,
+0x952ED0C8, 0x881A0AC5, 0xB38C8051, 0x4D8EF0D7, 0x1419ACB2, 0x31F527E6, 0xA4F64116, 0x6CC46868,
+0x2F059B45, 0x670AE5E3, 0xE0E5A846, 0x5E091402, 0xAB111E98, 0xC591E8B4, 0xECFF85CD, 0xEBEAB576,
+0xA6C6ACD3, 0xF710A33D, 0xD482BB63, 0xCB850CED, 0x08B32795, 0xEBB76F04, 0x0C34F5F3, 0x598F188F,
+0x176B62B0, 0x31062D0C, 0xA0C97DCC, 0x3F214FB0, 0x46D37D8C, 0x362C3208, 0x698593D3, 0x560F7807,
+0x4A25BDCA, 0x3B18D8B7, 0x0CAD0584, 0x19AD2CEC, 0x62D0E663, 0xEF7F2F44, 0xDA3C0228, 0x7361CC8E,
+0xDA3685CF, 0x79BEF5B5, 0x4A139BB7, 0x6DFF1098, 0x55722C1E, 0x2E224739, 0xBE9311B5, 0x698BDBB7,
+0x562EB303, 0xD773A721, 0x85C02F7D, 0xE1529DD3, 0x0B74590A, 0x22CE8CAD, 0xEE074016, 0x18878830,
+0xE83FFB22, 0x06F2E0EA, 0x911FC5FE, 0x65743A70, 0x61370A7C, 0x451914F7, 0x9201450B, 0x4A876F96,
+0x4860C957, 0x51A207CE, 0xEE86E182, 0x27B4326E, 0x35F2B58B, 0x2CDFDB23, 0x63726738, 0xBF908352,
+0x6319CD57, 0xC8CF2B64, 0xD07BDC59, 0x4E0DB973, 0xB22B7874, 0x3263C132, 0x5EB9E362, 0xB708466C,
+0x2151E7FC, 0x01A98696, 0x4A848F40, 0x7E601463, 0x0BE0734F, 0xE1DA89DA, 0x51242685, 0xF55FE041,
+0x85F42536, 0xEFC6BCC7, 0x271E01BC, 0xB10DA5F5, 0x6A2F60D7, 0x9F89FDE2, 0x074B3DFF, 0x6EB3F967,
+0x8369BFB9, 0x88C7C20B, 0x1D94F06C, 0x2F655A11, 0xC971FC21, 0x397BEC55, 0x6BEEE745, 0x7DF843F0,
+0xF8BD554F, 0x99E4FE2A, 0xEC22E74D, 0x967D8011, 0xF4423FD6, 0x91E4FB11, 0xBBDFF8E8, 0x2AE5E263,
+0xDF2E076D, 0xCCD81ED7, 0xF1F9BE6E, 0x45D6ED8D, 0xCA3B4D22, 0x3866AFA2, 0x83797199, 0x2ED30386,
+0xACDA7297, 0x63016776, 0x30CCB4C5, 0x8866183C, 0xF05088C1, 0x8750EFA8, 0x4EAB6FD0, 0x65FEAC2E,
+0x2634B558, 0x9817896E, 0xAE3A05A6, 0xF52EC164, 0x2A783141, 0x68360120, 0xAE3B32A0, 0x8EBC83AF,
+0xD03787E0, 0x5B3E4225, 0x2E444EDA, 0xF4CC3733, 0x54614521, 0xF7390015, 0xCC221273, 0xDF4FE875,
+0x4932612C, 0xF1C0FA77, 0x5C31A485, 0x603F2372, 0x1CAFBBE0, 0xBAA94352, 0xAA228825, 0xB211524A,
+0xB21C8E84, 0x614BB77F, 0x63E12BCE, 0xF35E56E1, 0x5DE34CCE, 0xDD46E69D, 0x6830C46F, 0x45D881FF,
+0xEBE44C20, 0xF5C8FF4E, 0x5BEF9444, 0xD7B84D99, 0x92C8BFF9, 0xF26C1BE7, 0x063ED527, 0x215951EE,
+0x31661B3D, 0xEA90549C, 0x0EAFECFA, 0x708C0C6F, 0xED89C799, 0x32B99BC9, 0x96FF3DD1, 0x1A9640CF,
+0x5E269C72, 0xA5CD19A6, 0xB3132CAF, 0x3DB75347, 0x43ED5E6B, 0x1BE15F5D, 0x1F2DE6EB, 0xAE70D330,
+0xF906CFD7, 0x0648CF37, 0x85493B9D, 0xCEBCAB88, 0x79DC1407, 0xE189F65D, 0x9C6BCAF1, 0x1EC3DE98,
+0x7210D97B, 0x324CA822, 0x8D52678F, 0xA8F0545B, 0x7A2EDEA5, 0x554F7EAD, 0xB5863872, 0x18EEA6C1,
+0xFA2EC13E, 0x057E07A7, 0x75FB38BB, 0x4F1AD71F, 0x95C0E12F, 0x46A1EF23, 0xCE40E25F, 0xF0FD577F,
+0xC9B6B8F8, 0xD536D52D, 0x9E198755, 0xCD83C50A, 0xE07E99D2, 0xC3A07480, 0x6DE054EA, 0x08F66C9B,
+0x555ED05A, 0x1D99BC53, 0x01382D64, 0x518D079D, 0x57F58713, 0x2946FDFB, 0xB795A2B9, 0x5E821A19,
+0xA6D8BD9D, 0xB3CBF68D, 0x104B5805, 0x696624B6, 0x52AB0434, 0x1A8E3529, 0x42F0F34E, 0xBD5CEEFF,
+0x5723BEE0, 0xC2AF4EEA, 0xAC0B2E77, 0x441C333E, 0x0EBE3B30, 0x157EB460, 0xE5345DE2, 0xF63327AA,
+0x4F838F8D, 0x569B1D88, 0xB79C8FAA, 0x49F5393B, 0x4364F2FB, 0x58200226, 0xB5E12572, 0x64ED1C8A,
+0x9069551A, 0x7DC64138, 0x04DC7C51, 0xE1C9AB1C, 0x8BA8A31D, 0x95B57341, 0x1FFAFD24, 0xEF8EBED6,
+0x1E0199C2, 0xA1BE5EF6, 0x5B1E4800, 0xDC734E6B, 0x729DC758, 0x18145708, 0x304B4D30, 0x3954151E,
+0x95ADB987, 0x7123DF06, 0x537D0CB6, 0x656F1C39, 0xC8251CDE, 0xA7C460F4, 0x085F7C2F, 0xED919E0C,
+0x8418BF5E, 0x20D10E9F, 0x7B015C7B, 0x74DAA99C, 0x50471A65, 0xFB9A81C7, 0x73C9B355, 0xAEDDA3AF,
+0xF6D7F9AC, 0x1385D38B, 0xE4DCCF79, 0x58444B9C, 0xF17BEA57, 0x176E22ED, 0x2EFDF82E, 0x0983BBFD,
+0xC5911125, 0x4822C15B, 0x1823FE03, 0x02E4106F, 0x40474335, 0xD85799CD, 0x8D01C4AF, 0xA8DEC599,
+0x50948CE8, 0x918178EA, 0x50ECFCBE, 0x5ABEDE2D, 0x90924CBA, 0x3CA44494, 0x406F989B, 0x54461C17,
+0xF50468ED, 0x7F6E7408, 0xA633C488, 0xCE0FB0D5, 0xDB5C0B7B, 0xC5F30E30, 0x0B42E38D, 0x4E6E38A3,
+0xE0ADCB6C, 0x01000000, 0x08009E01, 0xFE7F1211, 0x69626CF1, 0xFC714F29, 0x6ABE169E, 0xF7A5DCF7,
+0xC7FC4FEB, 0x0B3341F9, 0x7C4E4E5D, 0xA050EA6C, 0xBC63170A, 0xC41756DC, 0x5513583D, 0xE5CE7CAE,
+0xDF74AB5C, 0x843B3BFC, 0xA0A056D1, 0xDF33930E, 0x7E9D68FC, 0x731547A7, 0x05B4C708, 0x902358CB,
+0xEF54AFA6, 0xECF4DDAC, 0xA5BE62DC, 0x7826F4CF, 0xB10D8CC5, 0x110F57A2, 0x792FF362, 0x28B42651,
+0xDE853BDD, 0xABE59E0E, 0x79C719B3, 0xCC5E9248, 0x3002133D, 0xD3CC1D15, 0x54417AA6, 0xFE53D094,
+0x6DA7A455, 0x148B0C04, 0xD67AD1F0, 0xF7AEEF1B, 0xC305BF0A, 0xE938054C, 0x84B7CC7A, 0x1DE78324,
+0x44FBE49B, 0x633F2CED, 0x6434CB62, 0x2F91E364, 0x0AB0438A, 0x2B3F90A7, 0x6BAFA112, 0x1DFF9B94,
+0x5C1E19E9, 0x8D60E59C, 0x0C761357, 0x27F45594, 0x47AFC5A1, 0xD58C6B40, 0x183C2754, 0x9A5CCF6B,
+0xDD4021AF, 0x23094DB1, 0x9D733D7A, 0xB15E49F3, 0xD4034AE8, 0x0E45F08B, 0x9DBB709D, 0xF81369AF,
+0xC12341C1, 0x38A9E98B, 0xAF5FD5A0, 0x63285970, 0x31DC695E, 0xFAF699AD, 0x50C0798E, 0x24EF84A1,
+0xC5091482, 0xAA472BCB, 0x7E41F036, 0xBF77A619, 0x73602305, 0x8328BE32, 0x6A0028EB, 0xB8EB6F5D,
+0x9581EB6F, 0x36DCDF51, 0x8E1EADA1, 0x71CB14D6, 0xC4213124, 0x1B5D5898, 0x6C3ACF46, 0x70D1173B,
+0x058A2F8A, 0x272BF8AE, 0x0F945526, 0xFFAEF946, 0xFEA188CC, 0x2C89B6DF, 0xD4760D2C, 0xFE42F242,
+0xACEE9268, 0x9454AD7B, 0x2DEAA9D7, 0xDAE2794A, 0xA9737DE1, 0x17C1559B, 0xCE2A7387, 0x568A225E,
+0x7494A120, 0xCBD3168A, 0x35964334, 0x04798831, 0xB199A6CB, 0xDCEB13C1, 0x0A802579, 0x25DC14F8,
+0x20E5D940, 0xFE3E6AE5, 0xADE49DE9, 0x05B3334F, 0x8CC33D97, 0xC32C47DF, 0x785CA250, 0x8DC6220A,
+0x5A5B9B1E, 0xAC57B23E, 0xC8301939, 0xD1776145, 0x9A37D295, 0x5687BEBD, 0xCC60DB4E, 0xA9C89E3A,
+0xD6421289, 0xF2A6E20D, 0xFC5F13B0, 0xC765AD89, 0xC523F390, 0x10DB275C, 0xDA356BAF, 0x23B11DB5,
+0x267E178C, 0x73E04E4F, 0x44CD05B1, 0xB09BBBC4, 0x50226ADF, 0xAC84FEEF, 0x89F1E831, 0x624A11D8,
+0x6E76D412, 0xCC763D4C, 0x5AEC1CE8, 0xE2222608, 0x9A7C488C, 0x1557BAF9, 0xB7571B9C, 0xC9FDEA8C,
+0xC5DA2C77, 0x3CF47653, 0xFA395A56, 0x9CCB47CE, 0xCF90066A, 0x805F0BD0, 0x96C84D52, 0xC810E10F,
+0x42786AF5, 0xA64C7305, 0x8C08F10F, 0x83BF6256, 0xABFD8EFE, 0x4AB0B9C7, 0xA2A0C864, 0xA223B51A,
+0xBAB4DF6C, 0xD73B9E3E, 0xABA2DD44, 0x4E7695F1, 0x140C2E77, 0x2CED4D43, 0xEA9BA37E, 0x096EA85D,
+0x635D7C23, 0x390899B8, 0xC6C1BEF8, 0x404F1ED3, 0x0BDF286B, 0xC79FF752, 0x3EF161E1, 0xDD2E7263,
+0x5C3DC37B, 0xDB839980, 0x952DFD00, 0x180A6948, 0x670BF6FC, 0xB5CE42B1, 0x72C7DDA6, 0xC567CBFD,
+0x01C34494, 0xD778EF03, 0xA065E066, 0xDA27E8CE, 0x91FC0B35, 0x5C6B2F82, 0x7D436DC3, 0x938E2390,
+0x46BFB48A, 0x27E45611, 0x0066DD65, 0x7A96A6E9, 0xAEE9EF3D, 0xF50E6417, 0x61439DDE, 0x781DBAB2,
+0xE47D8C61, 0xA8C2328D, 0x12FEF47C, 0x3E724001, 0x5804DC8E, 0xE32EBEDC, 0x47C633A6, 0x77AB6C2F,
+0x69B323B8, 0x9C5ACB8A, 0xCB911E08, 0x3CE98EC9, 0xE9034614, 0x74828EC3, 0xE7CBEE1A, 0xE12CF850,
+0xDE664699, 0xF9B2A484, 0x08FA50F9, 0xD4E8A9BD, 0xDB6928C2, 0x69269AF5, 0x746B89E8, 0x35FD1FE7,
+0x759183AA, 0x5F8F5497, 0x28B4DCDF, 0xC539BA62, 0x169923B2, 0x37A7B56E, 0x98BB6A85, 0xAC417CD0,
+0x633EAA56, 0xAA3E4077, 0x2767343F, 0x51F4E6AC, 0xADE378DB, 0x6CB18E50, 0x0BE2171E, 0xBC3C8BAF,
+0xAF55A73B, 0x9FE385C7, 0xDE62780F, 0xB514BC40, 0x7D262E7A, 0x001F0F76, 0xA6CAF7DD, 0x7CEAD705,
+0xCC02B497, 0x08CC8332, 0x92E14B33, 0x1662746F, 0x4B77E573, 0xE92D7ADC, 0xD4A8CD2F, 0x4BA4F81E,
+0xFA59DA6A, 0x1C6D050C, 0xA52607EA, 0x8E2DAED8, 0xE5A1FC34, 0xFC7E342C, 0xFC3B021B, 0x55061908,
+0x28658FEE, 0x3B9DD3B7, 0x16BE9927, 0x8F2D0E56, 0x55496CB1, 0x37C24FC9, 0xD72D8572, 0x1F1C4508,
+0x3E9627EE, 0x8274A319, 0xACBC4CE9, 0x7D56AD00, 0x52EE453A, 0x83CB49F0, 0xBA8F7E1B, 0xB0C3395B,
+0xA40D03DF, 0x69916749, 0xB0F4C043, 0xB9678AD2, 0xB3169084, 0xAE665894, 0x00768649, 0x0E9E4B4E,
+0xB7936A55, 0xF967137A, 0x0A8DF665, 0xB93A1478, 0xA5B58277, 0x38276800, 0x667E25FC, 0x12F18052,
+0xF523C244, 0x90A25639, 0xD09B764E, 0xCCE3D0E3, 0x99395B00, 0x03ACDE9D, 0x3A487F52, 0x242433C8,
+0xBA5FA955, 0x27E11797, 0x07169DB4, 0xE3E83E64, 0x40CA08F3, 0x3058A7E2, 0x455A92A8, 0x55DFCC8C,
+0x3B616EF6, 0x1E3826BA, 0x983C750A, 0x39D4C3CE, 0x879C6B47, 0xC85587F4, 0x5086AE4F, 0x454A811F,
+0x957610E5, 0x23971AC9, 0x8567C0A7, 0x461B8F20, 0xB7695B72, 0x987809B6, 0x849F3212, 0x70F552C4,
+0xDDD453B7, 0xD2DBFFAC, 0x04E1770C, 0x35965FD9, 0x23F3479B, 0xB851E305, 0xB0907663, 0xC993BF5C,
+0xE30D0CFB, 0x430C327E, 0xBB5C8886, 0xCB8D3299, 0xA8994936, 0x00000074, 0x009A2101, 0xE13F1808,
+0xCE77AAE8, 0x30104670, 0xAFE00A4F, 0x1A551B60, 0x88CFD7A9, 0xCCCC2F44, 0xA60082E1, 0xD9E6769A,
+0xDA705532, 0x017C4F5D, 0x99AFEE02, 0xDF74E39C, 0x9FF8E5FC, 0xB47E0149, 0xC7608BE3, 0xA67D08D6,
+0x902E71AA, 0xA25EB0FA, 0xF07824A5, 0x81890F8D, 0xD1410899, 0x5F24D356, 0xEF097B77, 0xE385577D,
+0x5F53A561, 0x3F96D55F, 0x17283A15, 0x90E34119, 0x275F4A3E, 0xB5626C13, 0x4B18B103, 0x87143626,
+0x3341E5D2, 0x47AE0F86, 0xBF662FBD, 0xEC13E095, 0xA680BCBF, 0x281C1CB4, 0x6821C963, 0x91058411,
+0x08A4A5FE, 0x977E282B, 0xFCAFC32B, 0x60E6F9C5, 0xA494B223, 0x594738E6, 0x92DBAE76, 0xE927E1F9,
+0x9C13A6CF, 0x3FCD4511, 0xCF5D372C, 0xC28648F8, 0x433B96F0, 0xE6B1E70A, 0xA6E74F00, 0xB5CFB295,
+0x83408E81, 0xE7EC3B76, 0xBD9B3651, 0x3B1A2741, 0x7C09E502, 0x6A18AF63, 0x7F7A9AC4, 0x86726D85,
+0x3103186F, 0x52E37CBD, 0xFF60AD33, 0x0CB32649, 0x5B519250, 0x093BC686, 0x64183729, 0xBB65A6B4,
+0x1EAD9810, 0x15FFD4FF, 0x4A5B427D, 0x42845DAD, 0x683BE42D, 0xA09D364D, 0x1FA1D728, 0x817095A1,
+0x698DF30F, 0xDB1189E4, 0x97699630, 0x5C321CD9, 0xBF27C8A3, 0x95A86DF5, 0x68A64470, 0x08F358DE,
+0x8BC3E060, 0x55352A70, 0x3C4AA335, 0xAE7BE3BC, 0xAEC16041, 0x14A596ED, 0x88D8C7FF, 0x9E3D387D,
+0xD3F422EE, 0x2FC3B74C, 0x8A75C0BE, 0x16903797, 0xA0C2E748, 0x0F521508, 0xC1ECA3B4, 0x9AD918D7,
+0xDCED19E4, 0x532A523B, 0x4EE138F2, 0xD0CCCDE8, 0x62527331, 0x2D51729B, 0x6FBE1712, 0xFB414557,
+0xA2ADCB23, 0x0B8D5688, 0x686C6D63, 0xF3E5242D, 0x0147461D, 0xDAFA1C53, 0xB2FCB1A2, 0xAD61CA1A,
+0xCEA67BB8, 0x5123A66C, 0xCB50990D, 0x7F106D6F, 0x4436EC64, 0x31A957B9, 0x9A6C00E2, 0xE786E26C,
+0x72A470D8, 0xBCC8A2D7, 0xAD06E0DF, 0x516FAE47, 0xD502C2D1, 0xB1E5878B, 0xD34F618D, 0x567208A6,
+0xA77C96AE, 0xFE229CD7, 0xA6BE3615, 0x2266D740, 0xA2A3D51F, 0xCBE6FD1D, 0xA6A19466, 0x731BF7AC,
+0xA06E7D5D, 0x86534550, 0xAF05FAA8, 0x52F97564, 0x5A77C1E0, 0xC68C84C6, 0x9BA91431, 0x66FFC0A5,
+0xC6B60FB3, 0xE1A64F1C, 0xD4D93665, 0xBAA3F780, 0xA4DD8687, 0xBE84EBBC, 0xCF39E26F, 0x2737D1BA,
+0xF0446152, 0x8CAA86C0, 0x2DF99530, 0x9E53FC1B, 0x19D96C79, 0x4A1F03EE, 0x74A924D2, 0x4D161A4C,
+0xA99F388B, 0x243DAA65, 0xA44670FA, 0xDA1ABCA1, 0xCE670EDD, 0x58806B5F, 0x5CBFF0A6, 0xD815152F,
+0x8F692724, 0x9B33B4CB, 0x6698928D, 0x51534EB6, 0x23BBA769, 0x1DB7A438, 0x4F00D635, 0x931B3BD1,
+0x8C38EE7D, 0xD1521AE9, 0x66D466BB, 0x4B45F02D, 0x8E625DDC, 0xD17D492E, 0x1337CD8C, 0x1EAFEE33,
+0xA539B343, 0xFE1CBEDF, 0x37DC62A9, 0xC32296EA, 0xD56D403E, 0x68C77D39, 0x73BE574E, 0x1A1A3693,
+0x632497E3, 0x29659119, 0x492756E5, 0x1BD4CCDC, 0xB4E47129, 0x8E3B0CF0, 0x4ECFF236, 0xF0B767B2,
+0x40D8CB46, 0x41F7C15E, 0x4FBDE50E, 0xBD6DB633, 0x8432DD83, 0x9ED08623, 0x90B227DB, 0x7322CDB3,
+0xDE31AF71, 0x92D7AB7D, 0xF6C519A1, 0x342A91F3, 0xF06B00E3, 0xB083FC29, 0x69DD970C, 0xC7CF99E1,
+0xAC1BE3F0, 0xEFBD6F00, 0x04E9052F, 0x9A8E24CD, 0xFC848A90, 0x8638E738, 0xB95B4B66, 0x099E9219,
+0xFCFF2E72, 0x5E71A89B, 0x24820EAC, 0x71E4198E, 0x62B6DB98, 0xFBFD9D68, 0xCD6D03CB, 0x8874F580,
+0x1BE1B9F6, 0xD0519576, 0x694C343C, 0x0FC13E75, 0xAF6A17A5, 0x5AC939C0, 0x274CCAD8, 0xBBA2C705,
+0x2A95C166, 0xD0F6AC44, 0x7E04D49A, 0x9E85A7C6, 0x2560A71C, 0x1F636EB2, 0x36DE9276, 0x254E6747,
+0x88B43482, 0xD94A072B, 0x77675F0F, 0xF391071E, 0x08596626, 0xFADE6928, 0xFA8C8069, 0xF01C07E3,
+0x44B89B40, 0x9EA04F6E, 0xD1053083, 0x86C838AE, 0xC9635BEF, 0x0D72E47A, 0xC13C5408, 0xCC1C31CD,
+0xDC419191, 0xC20EE0DC, 0x641E32F6, 0x01AD60B1, 0xBE268601, 0x76AFA137, 0xB0A90086, 0x62AB237E,
+0xE5817A12, 0x2053E0D9, 0x59F1603A, 0x9B5FC929, 0xD136DEFC, 0xA4139BEF, 0xCD1B26C4, 0x6B730E1C,
+0xAFDEF126, 0xF492E210, 0x4D11F220, 0x4AB1AD52, 0xA3EF7EF5, 0xDE498514, 0xE9F646BC, 0xF9221CA4,
+0x330E85A6, 0xCAFB7098, 0x048887F1, 0x7370A1AC, 0x03825945, 0x091844E7, 0xB37D5B58, 0x9E7D0B02,
+0xFC9CD4B7, 0x90815500, 0x4566C92E, 0x2282043E, 0x3C06C6C4, 0x3BCF59CE, 0x26AE7FD8, 0xC08A8EF7,
+0x2896608E, 0x08067BF5, 0x1B5D6F3F, 0xC718F26D, 0xC723133A, 0x534ABF69, 0x05D56F1B, 0xF6CE8D81,
+0xCF6D9489, 0xCB7D1E13, 0x9118A499, 0x1727076A, 0x011260C8, 0xFC31FBEF, 0xB6C626B8, 0xF31003F6,
+0x2C032289, 0x472754A8, 0x03BD34BA, 0xA22A31FF, 0xAF95C22F, 0x51FD573A, 0x655A8FAA, 0x741F86AD,
+0x0BB837F5, 0x18433835, 0x1D0AD07E, 0x1893634C, 0x5BCF8273, 0x88FFEB40, 0x54CF9C5E, 0x5C75B449,
+0x87994567, 0x3B4C624E, 0xFB88100F, 0x18B21962, 0x668D2BEC, 0x8A30174A, 0x8FE8A146, 0xB202372D,
+0xC4E3786A, 0x3B4EB3C6, 0x4B8F8930, 0x696C6FE1, 0xE8FC308D, 0x5ADCF917, 0x27C4769B, 0x930DB62E,
+0x2048E6DE, 0xC35DA455, 0x3E28B055, 0x1AF1383B, 0xD82FBFF7, 0x5F2B759C, 0xA07C4B42, 0x2B15A9A0,
+0x35C7B65F, 0x781EF831, 0x42E29B7F, 0xAB3AD037, 0x1CA0739D, 0x017FD115, 0xE13CD0A7, 0x20621BED,
+0x6C4E1717, 0x413167E7, 0x063FD231, 0xE100DC25, 0x52ADE680, 0x30434CB4, 0x7F12AC56, 0xEE244B6F,
+0x0BC76EBD, 0xF82834DB, 0x559CB613, 0x04FA74B2, 0xDF712EFE, 0x5DEFD53F, 0x49270D6F, 0x841A0637,
+0xB481D681, 0x115907E5, 0x530DDA0E, 0xD928AF54, 0xF3111668, 0xBC810197, 0xB40A2539, 0x46F2D293,
+0x4DFBB3A2, 0x8D47BACC, 0xB3005238, 0xC7148578, 0xBAE316DC, 0x90494B89, 0x7BF859C5, 0xECCE74D4,
+0x0EAE40C8, 0x3CA757E2, 0x0B7F9B07, 0x39CE79AB, 0xDF3B861F, 0x01253D29, 0x98F39580, 0x1025C4AA,
+0xBC0176CF, 0x5303E336, 0xFF2BEE56, 0xAFB25902, 0x8921499B, 0x93AFD976, 0x6076DA32, 0x9960623A,
+0xEA82D4CD, 0xF94538ED, 0xE99473D4, 0x27D6BE6D, 0x56256CB1, 0x8CFBDE7B, 0x89E7E938, 0xA35539D5,
+0x30F81B27, 0x65A4D248, 0xFA505EBA, 0x9A277C11, 0x841E395E, 0x2756D73A, 0xEC1970CA, 0x6E89C13E,
+0x00F150C7, 0xC23406CC, 0xD2A206E0, 0x2F342975, 0x7FF58717, 0x01C81727, 0xFBFF1F03, 0xF7A164E8,
+0xEA2E3364, 0xE7B33F2B, 0x49B871B0, 0x3BF97483, 0xE852D592, 0x812DAB57, 0xB7DAB363, 0x9596F192,
+0x042FF12C, 0xE8569E4B, 0xC21572E8, 0xE9309505, 0x211C6772, 0x64940740, 0xCCB2B912, 0x977462AF,
+0xE39F34EB, 0x6AFF7862, 0x6F91036C, 0x1EBE36B9, 0xD9442FBB, 0xAB947B79, 0xE1A05CA0, 0x3E3B5A33,
+0x89FEFE77, 0xCB782E3E, 0xB9E2CBA7, 0x924CF45E, 0x49524C2F, 0xF113A4B7, 0x04D717B3, 0x07DCF635,
+0x74AF5651, 0xA215761A, 0x5EF9965F, 0x3B7F7E1F, 0x4E8BE1F9, 0xB15C39A7, 0xC36A7C4C, 0x3C189E5C,
+0x5529880E, 0xED7F0651, 0x20935AEB, 0xDD7757BE, 0xEC8568DE, 0x6FF2A42E, 0xDD3F471F, 0x5CFBBE5D,
+0x256C9779, 0xAB5DAD01, 0x552910B9, 0x549090BC, 0xB7777209, 0xC808DDF7, 0xFBFB0D4F, 0x64A81E8F,
+0x19C7CAD9, 0xE16266C2, 0x2B8D687E, 0xECA3F8BF, 0x6E8F63D0, 0x3FE99EB2, 0x003E464C, 0xD4D3469D,
+0xA3775214, 0x66E648B7, 0xE96887B4, 0x3E88AE6A, 0x92A1AA33, 0x251F2833, 0x309B0FE6, 0x212E8507,
+0x4E74E3E7, 0x9827AE4E, 0x98D20069, 0xDC6B9F9F, 0xEABED2C5, 0x712F1E8A, 0x1412C65A, 0x4F07CB2B,
+0xE4948762, 0x1FDAE932, 0x3D459E91, 0xA7C8AB37, 0x25D6289C, 0x6800FBF5, 0xEBF111CC, 0xFC665529,
+0x43B9F8BD, 0x0745689A, 0x60C1D26E, 0x2DE9CDD6, 0xAC562BD4, 0x3F817440, 0x754DB480, 0xA84E0DCD,
+0xA83AC903, 0x4C6A7D41, 0x4EB6D715, 0xE3DE554B, 0x18478CFC, 0x60200695, 0x9FA17B3E, 0x0304A1B7,
+0xF2A29998, 0x785B0931, 0xD077E7B4, 0x23DE5894, 0x9371F4B5, 0x2B740D57, 0xA255DFC1, 0x55554324,
+0xA291A27F, 0x6A487A1C, 0x631C6227, 0xFF54DC1C, 0xBD414C7E, 0xE8B9834F, 0xF9D0E7C1, 0xC72C01B3,
+0x99EB8723, 0xCAFD32D8, 0x9F4DB699, 0x9E5D1E94, 0xC261F311, 0x1015B716, 0xF9837C89, 0x5C1B71C7,
+0xA3F1992B, 0x2D059146, 0x0A751352, 0xB54D1D6A, 0xF65D1F84, 0xF487DD80, 0xCA86B248, 0x840EF987,
+0xA58DCB08, 0x209570EA, 0x276D12C0, 0x2C33F8E6, 0xDF4061C8, 0x24349A5E, 0x6FE5E467, 0x1ABD591B,
+0x6F56427C, 0xB9C5A062, 0x03995F38, 0x47713660, 0xCF5328DE, 0x89B21EC8, 0xFBFCA8CE, 0xE4E507EA,
+0x7EB5E935, 0xAED6ED0A, 0x9849CF6A, 0x55662C9A, 0x164060B0, 0xDB705591, 0x52E3A988, 0x5818E35F,
+0xAD826F0D, 0xCCA015AD, 0x0E1F6681, 0x4D107C84, 0x768592B0, 0x05976C4B, 0xED5833B2, 0x8E3BBAAA,
+0x28FE127F, 0x74005236, 0xFB9C1D46, 0xAE07DFB8, 0xA58F9CF8, 0x0AD8EAF3, 0xDC419EDD, 0x49A8E87F,
+0x0784D5E3, 0x389C003D, 0x1D3B3CDE, 0x0EA6254D, 0x109F7398, 0xD673C959, 0x3BAE2C02, 0xEC6BF8E1,
+0x7A46A1DE, 0x07C9C7AC, 0x7D71B142, 0xA0988AC9, 0xA712B805, 0xE09C84DB, 0x0ADBC2D9, 0x26980DB6,
+0x59F3F39D, 0x3EA4DEEE, 0xA9D037EF, 0xA7E6CC1A, 0x876D2616, 0xB2E340CF, 0xCAD12BCF, 0xE53ECA33,
+0x92ED45B2, 0xC25F8F38, 0x872BD389, 0xFB397F53, 0x07C19E80, 0xF03C65C7, 0xFFC008FB, 0x703C54A5,
+0x3A48CF7F, 0x4EB52A4E, 0x08C36175, 0x651AF213, 0xA57BE28E, 0xDF876D42, 0xD5FA1691, 0x678BF0B0,
+0xABE23528, 0x60EE7DC6, 0x989C3F7D, 0x04951AAF, 0xD296696C, 0x284767D3, 0x8429364F, 0x113841AB,
+0x507334B1, 0x42D87113, 0xE8E5339E, 0xC2AC1381, 0x53BC35ED, 0xD7FFE0E3, 0x09B5A684, 0x0EF913CF,
+0x571787E1, 0x7BED4F32, 0x6D0AEFCF, 0x31FE48E7, 0x2CBB53DF, 0xD563C816, 0x34975315, 0x59E298DD,
+0xD87ABE24, 0x8EA13002, 0x0C88122F, 0x081E87D7, 0x41A4D7DB, 0x0EF05560, 0x5FD36082, 0xAD515C05,
+0xE3F33559, 0xB2725980, 0xFE9C580C, 0xD2600110, 0x1950ABFC, 0x3DFADEA5, 0x850C2EAE, 0x1110936C,
+0x0722078A, 0xD3433783, 0xF0904F43, 0xABB9516E, 0x0B9ED1DF, 0x73183105, 0x7D516C6A, 0xBA7071CE,
+0xA6205765, 0x3BF16970, 0x7A3D9E79, 0x3107C36E, 0x70E1861F, 0xF849EB9F, 0xA6E9CE76, 0x7CCC3145,
+0xB68185C0, 0x09DCF2BD, 0x371EE104, 0xF1D9476B, 0xAF6AE274, 0x5A5BE20A, 0x7A4AF022, 0x0FD05D06,
+0x80BE56A5, 0x51AC5BB3, 0xFBA77F33, 0x0594F048, 0x43F769DD, 0xC1F11875, 0xC82FE331, 0x5187BB1B,
+0x76EEE2F3, 0x51311409, 0xB97500F9, 0x0911DC27, 0xC4C1E654, 0x62D42CA8, 0xCCE613C3, 0x2341196E,
+0x08AA033D, 0x5D883294, 0xFC24FAAB, 0xF18E48D2, 0xDD69623C, 0x31448954, 0xA58A87BD, 0x9DAED051,
+0x400E30B2, 0xDBE264B5, 0x40B80D80, 0x3AF3EB6F, 0x9484D1EF, 0x1427A4C3, 0x01819A42, 0x387BFEDD,
+0xB43D3F41, 0x73F4D1EE, 0xDB4582EA, 0xAB4DA808, 0x93902543, 0x6FFECA9F, 0x181029D1, 0x8EAFE851,
+0xBCEF89E9, 0x503C56EF, 0x25678AAD, 0xAC675767, 0x40B486E2, 0x139F1B28, 0x0FB9CA0F, 0x8CABD4FD,
+0x27D63D42, 0xBB31C260, 0x16F18AF8, 0x798B9A82, 0xF10C7F2B, 0x86DBB226, 0xA2274303, 0x002C0092,
+0x13E97290, 0x61825F2A, 0x2752308C, 0xDD9F1C42, 0xD291F2CA, 0xC0691036, 0x64B9D795, 0xD1C4CF08,
+0xB59F6E8B, 0x53575671, 0x2E2651F4, 0x481920C1, 0x8C54919D, 0x78EB0948, 0xCF300122, 0xB9BB26CF,
+0x3C8C9C07, 0xF9E0804D, 0x259C92F0, 0x1EAC3523, 0xCED73D95, 0xF6569206, 0xEC1305AA, 0xE7C3F6DF,
+0xC8330D54, 0x1B964268, 0xBFBEF78C, 0x7AD33EC8, 0x0EE780D6, 0xE53F9402, 0x4DE80E06, 0xAD45C789,
+0x05B05A17, 0xB0AE6EC5, 0x8729BD6E, 0xCCC4BEB2, 0x1BD262E1, 0x4DF93692, 0x7E2A6835, 0x3BBFB70B,
+0x59FC900C, 0x7A57C73C, 0x993E2315, 0x477C1600, 0x1BB658F0, 0xB38E9411, 0x3462CF62, 0x4CFF7748,
+0xD76B68E7, 0x014513BC, 0x2DAAF035, 0x9A9EAE5F, 0xD489A691, 0xEC773CAE, 0xB9A592E9, 0x4E568747,
+0x4F46E9A6, 0x3D3C5AE6, 0xD63F99C7, 0xA52ED046, 0x9CE23DAD, 0x13DD6457, 0x303C6F19, 0x96AF7D83,
+0x4EEDDDBB, 0x4E145E83, 0x9C8D2056, 0xC5A54107, 0x9727641E, 0xD058CB96, 0x251B3016, 0x28CC9E56,
+0x74BF843C, 0xE74C25D9, 0xF72CB1F0, 0xCBD94611, 0xF78198A3, 0x148FDE89, 0x52D88F50, 0xE87304A4,
+0x541EB9B7, 0x8BE9A9F2, 0x40291197, 0x0E27AD44, 0x07D3FF70, 0x58E0B6EA, 0xAE7D9CEF, 0xAE82E21E,
+0x66F8C567, 0x4686BEB8, 0x937A02E8, 0xD601AA09, 0x53DE14ED, 0x967A3BB8, 0x1C6FF21C, 0xD3CB67DD,
+0xCB6BFC2B, 0xAD215AA9, 0x94654A62, 0xE5C89119, 0x987B34CA, 0xB8CBD488, 0x9085CDE5, 0xC7AC8AB8,
+0x238D94E7, 0xDD6FC2C8, 0xA9F7776E, 0x28C22FA2, 0x237FB991, 0xE2A25407, 0xC03549B7, 0x8029791E,
+0x009B75F4, 0x6ADBA6C7, 0xDE5BFF6F, 0x36F729A2, 0x57700C5E, 0x7FE3249F, 0xCF83B255, 0xABC9FDD2,
+0x629C8897, 0x7D5A8D7B, 0x62DAE1B1, 0x86A2E94A, 0xB85CCC56, 0x81C2F034, 0x3A8881E7, 0x691493F7,
+0x056AEE25, 0x3D32D945, 0xD4A4A1A7, 0xF2BB3C5C, 0x2F11FC62, 0xB2A3DFA9, 0x9C254B6B, 0x1D7425CE,
+0x87CEA16A, 0x46A84AB9, 0x030760F5, 0xC6A1379F, 0x9795BD6D, 0xE05BD114, 0x316DE2EE, 0x947F737E,
+0xCB85C871, 0x97300D69, 0x6D3CB307, 0xB49898C2, 0x37B45ED4, 0x84462F7D, 0x0BE1E09C, 0x32BB178F,
+0x36D70A41, 0xAF8A2962, 0x4FB81F0D, 0x5C82A762, 0x1486F635, 0xE6EE2913, 0xA3B806F5, 0xF1801E16,
+0xED90883B, 0xD3D9A054, 0xCDD90FED, 0x18C90C20, 0x3E6A9639, 0x650E4C69, 0x4B3B3E83, 0xCD69B476,
+0xDC692174, 0x9CF1DFD4, 0xD0F505F6, 0x85E183EB, 0x8FCEEB3F, 0x944EB4C6, 0xC77C723A, 0x548C577C,
+0x09B1EBC6, 0xBCEFDB8F, 0x7B4BFBD2, 0x718AD262, 0x7D33D36B, 0xACC46324, 0x4E4595EB, 0x8DD34A03,
+0xABE97E92, 0x6114823A, 0x06E6C6A5, 0xCC357478, 0x0B132E63, 0xC75DCC5B, 0x16C2A018, 0xF6682E11,
+0xAA285268, 0x84BBC8DC, 0x5B809499, 0xFE3A3BAA, 0x3E176D2B, 0x87E36CCC, 0x36047DEC, 0x5AB59013,
+0x86E11E3F, 0xB1956020, 0xA360F3B8, 0xCA77B5E6, 0x3C4DB571, 0x0BF247E2, 0x44A71071, 0x1D06A2D6,
+0x6055BB21, 0x5CDCC75A, 0x76EFF8DC, 0x0D69D9A1, 0xCAF41F16, 0x96D14D90, 0x7E291BA4, 0xFB7B2E7D,
+0x73648979, 0x55EAD389, 0x1EE58831, 0x290087D3, 0x7991D665, 0x061F4912, 0x65B7A864, 0xB073DCC8,
+0xE699C6A0, 0x0F080FF2, 0x6F2881BA, 0x951B91AD, 0x6006B322, 0x3397AEFE, 0xA7153867, 0xF93A4E95,
+0x72DBF5A0, 0x9C0D3432, 0xDFCBC588, 0x27747673, 0x4309D17C, 0x0A8F99D5, 0x14B43782, 0x8BA0F7B9,
+0x8B69D1A1, 0xC159D0A3, 0x4A79FE7F, 0xB7B29A34, 0xE4D5FE42, 0xA9EE5A85, 0xA696E74E, 0x040FED1C,
+0x2E190B0E, 0xCFFF48AC, 0x402C740D, 0xD8A62B8B, 0x894B53D0, 0x2A60A506, 0xFB431900, 0x644C8B18,
+0x1033D81D, 0xC80972A0, 0x19CF9760, 0x9A3A1024, 0x9EB0B2A7, 0x6A6002BA, 0xB3879911, 0xD9DFED40,
+0x88C5BF6D, 0xACC611C1, 0x85D3C025, 0x470D9BEA, 0x34394C1C, 0xCE8E0040, 0x8504325F, 0x3919E5D5,
+0x9BD6D6C1, 0x9F5C436B, 0xE43ACDF4, 0xE4CB7205, 0x2A8F9A46, 0x500230F9, 0xAFC7F1DE, 0x355C8785,
+0x29CE8941, 0xED214FEB, 0xC1735B62, 0x46923D7E, 0xE5B15F17, 0xD5FD664B, 0xC5940C80, 0x2CADBF80,
+0x6B4A140D, 0x880226DE, 0xB35E10DD, 0x4D5FB2C4, 0xE459394D, 0x8FBEE182, 0x07F07B28, 0x5E414C37,
+0x5A4F352E, 0xA18A507A, 0x1EB02256, 0x3DC13E5D, 0xB83C3966, 0x3BFEBAC5, 0x73E5A8D1, 0xD6970BE0,
+0xFD775750, 0xFF052C5B, 0x5C8F5FEC, 0x49543842, 0x553D838A, 0x71B47ECE, 0x7D926FA5, 0xB1360EF6,
+0x1C92EB99, 0x41DB8D50, 0xADBA1B31, 0xB5276E05, 0x8D1AADD9, 0x700EA805, 0x1A6CD480, 0x5AC8B7ED,
+0x289A31E4, 0x01DFE801, 0x38199141, 0x06F6D9D0, 0x1D695AA7, 0x90FA6301, 0x55FB72D0, 0x7ED360D4,
+0x94D07768, 0x96AF8540, 0x03283FE1, 0xDF06A5E8, 0x7D8EDE67, 0x97A96375, 0x92D858AC, 0xED95880D,
+0x4383A58D, 0xFC10D4B4, 0xC8C74CEB, 0xECCB4B03, 0x775653D2, 0x2E97987C, 0x1A975EF3, 0xFBE543D9,
+0x39E81F84, 0x46A2D84A, 0xA0232C69, 0xD9D55CA2, 0xAEA55DFE, 0xADEB96FE, 0x4DD9D71B, 0xAFE4371D,
+0x616EAFB9, 0x4F264FD7, 0x59DECCFD, 0xB7194EF5, 0xE52B5571, 0xB6D1287D, 0x1CF9AC7D, 0xADB4BF19,
+0x74BB5456, 0xE40B20A3, 0x6A288797, 0x9B29A32C, 0x902C8E48, 0xE78FDBB4, 0xB1C6A031, 0x3B19F581,
+0xF60B7868, 0x7F7C4919, 0x0CF4ED17, 0xB82A3DB2, 0x6D496E8C, 0xE8205268, 0xC41742BB, 0x343A2DBC,
+0xFF41B005, 0x2AD69037, 0x205E83D1, 0xD9B7728A, 0xE19F9078, 0x65552309, 0x01C1420A, 0x49A3D08C,
+0xA1EDAD20, 0xBF20DAE4, 0xACA03C43, 0xC2783C48, 0x3FDF26FA, 0x39D62C8E, 0x554694AA, 0xE6466A99,
+0x8EB5FCC9, 0x39B93DBC, 0xE75FC13B, 0x2BBEEDB9, 0x9A24C0FB, 0x00BC9DF7, 0x0000E831, 0x9E010100,
+0x12150A00, 0x19B8D17F, 0xA3C7CFC5, 0xA8CFB4D5, 0x13BADAA7, 0x90C39097, 0xD8E74A13, 0x0573857D,
+0xBA3D9BAF, 0x4B55FDE8, 0xF265B751, 0x75B192EC, 0x3FE2E244, 0xAA9BB76E, 0xA988DCBF, 0xFC628280,
+0xE82A4172, 0xBA1903C5, 0xFD7A908E, 0x7A98303B, 0x8DF794A7, 0xD7E10B87, 0x7F227323, 0xD1E2CD0C,
+0xE9EA9B65, 0x8019DA4B, 0x4B0FF253, 0x9EC7057C, 0x30C615E6, 0x8CCE1C44, 0x38AC54B7, 0xD9BDE7A1,
+0x2E93B654, 0x81EA21FD, 0xE844E3EC, 0x8EDB9E09, 0xEEE3236E, 0x55DE7887, 0x544ACF04, 0xBB8D6F1C,
+0x6E3E2BE5, 0x366A9C4B, 0x710C0E1B, 0xD60F1D65, 0xC5678551, 0xDD9FA4D7, 0x3D1517CA, 0x7CE46525,
+0xB7F01082, 0x719F7E26, 0x66B500C4, 0x27FCA2E0, 0xFDAB0637, 0x290E45CB, 0x3925577F, 0xB79DB80A,
+0x7035843C, 0x3CC21341, 0x9FAF34F1, 0xCBC4C466, 0x12319F18, 0x80901F32, 0xBE319870, 0x657E4171,
+0x0B795974, 0x419C767F, 0x3DB96FFF, 0x9F0FA906, 0x0BAA4361, 0x5C81BF15, 0xE5E32804, 0x9C935B87,
+0xFEDD0DF1, 0x9AF60669, 0x2FDB2740, 0x3FC567C0, 0x870DDC8C, 0x0CB2CE15, 0xE72CCBBC, 0xBB2ECDB0,
+0x97358D89, 0xB7CA6303, 0x6E0CC6E2, 0xF3A5F1AC, 0x030174F3, 0xF9FAD57D, 0xD51C81B3, 0xB76B3777,
+0x59924291, 0xEE5B2212, 0x46FB751F, 0xCB81B5F3, 0x0316B38D, 0x09210E5C, 0x3DBDEAC0, 0x2596A471,
+0xAC8A52B4, 0x5E4F71FC, 0xA765EE91, 0x85A50E87, 0x38E0AAC8, 0x392BCFF9, 0x2C84FB8F, 0x9599A58E,
+0xAA74BBC2, 0xC4D4E8D0, 0x9A8F5004, 0xDE52258D, 0xE81793B9, 0xF3997925, 0x53B622D7, 0x2499518B,
+0x28B7B42C, 0xA46771FF, 0x0F177894, 0x2BA9AFFE, 0x69148CA2, 0x516CE51E, 0xCBE20E43, 0x0D1E080A,
+0x2E28F35D, 0x77564982, 0x1B8289B0, 0x6E3D776F, 0xB63AFC8E, 0x8D2A08EB, 0xB0756E9D, 0xCB6619EC,
+0x1AACB16D, 0x4D91E5BF, 0xACE2638B, 0xA3C411D3, 0x9179D468, 0x5E67A852, 0x6FB67072, 0x4707AED2,
+0x47388562, 0x51593079, 0xAE64C242, 0x0A9DC95E, 0xB7692398, 0xA6D26237, 0x4A374965, 0x15ABF1C5,
+0x14541B66, 0x5B230BF5, 0xA1B8EF44, 0xBBF81E9F, 0x614F211D, 0xB56D458B, 0x12E1457E, 0xC68AACA7,
+0xCC6D6422, 0x237A1ABD, 0x5825309A, 0x39B326BE, 0x819D66C9, 0xE2988A09, 0xE1761C6F, 0xA3C1F246,
+0x84D026BE, 0x4E7371B3, 0x296DF718, 0x93988380, 0x61BFF4F4, 0x9D0FCBFF, 0x1A1D2765, 0x97523F55,
+0xEBFB0F23, 0x8A869942, 0x78F1AFBF, 0xB8DEF1DD, 0x7F7DEF07, 0x7D18E8C4, 0x1CB957AD, 0xAA4B9A81,
+0x4A0C3E84, 0xDF3CABCA, 0xE5B351A2, 0xB84D1250, 0x3813C75C, 0xD0ED1DE4, 0x4CA1192F, 0x4AC55478,
+0xE9F9AC36, 0xD93B3E80, 0x92E5CF0F, 0x7FBDA54D, 0xA2E4B402, 0x31989399, 0xD19FAF4F, 0xF83B5C4B,
+0x7134C67F, 0xEEA0E74A, 0xF62DBA1D, 0x5DE2988D, 0xD1BA485F, 0xD5202813, 0x0E2282B8, 0x816A72FA,
+0x636C8828, 0xB2197284, 0x44C232FD, 0x92CDBE57, 0x7DC98B2D, 0xDF4097A9, 0xB6B93870, 0x9B5A5F11,
+0x462790F8, 0x01F7BB51, 0xEF95E252, 0x70BE1934, 0xD4576C90, 0x0E515DD1, 0x019E39C4, 0x3D35D85D,
+0x85FA9093, 0x577DEC08, 0x5B868999, 0xED9CD544, 0xED932982, 0x94ACBC73, 0x3D0AC6D5, 0xD1C9BDDB,
+0xA1BD63DD, 0x851AF83F, 0x9066FC8E, 0x5E46F487, 0x497DB82B, 0xEA0B23BC, 0x50551D20, 0xDDF2F24E,
+0x9FB84C4A, 0xDFF639C9, 0xD732A6CD, 0xC3A2E96C, 0x369E3AB5, 0x600BCD35, 0x876E786C, 0x8A6D616D,
+0x34EB30B8, 0x035F85FC, 0x173C1E0B, 0x4F49692A, 0xDE4909F3, 0x1F1A0CC2, 0xA46EE4C4, 0x61526D72,
+0x024BDB00, 0xD1884A65, 0xCAB06AD5, 0xB28769C7, 0x8CBC031E, 0x52562402, 0x5B09B7E9, 0x603EE649,
+0xC2EA02A9, 0x7750DDA3, 0x4F01A1BC, 0x8CAF268A, 0x33A705BB, 0xE235CF78, 0xFD6C4D59, 0x53249F24,
+0xC670AEDC, 0x0F3AA57B, 0xFF60CB2B, 0x431B540D, 0x8627620E, 0x2B64F815, 0x94A500F5, 0xC6373B21,
+0x6B49B4DA, 0xE5B2A6B9, 0x9156165E, 0x25C93A4B, 0xF5D96F10, 0x2172C501, 0x2BDF805B, 0x3E0EECC9,
+0x5B5E7C74, 0xAFA4CCDB, 0x71AA3DE9, 0x52F11718, 0x67D7BE8F, 0x2EF41964, 0x092BFEEA, 0xDD4DA607,
+0x7C24C7B6, 0x4C9718CA, 0xECF22694, 0x540067CD, 0x086582DA, 0xF4C55813, 0xC6D8A15C, 0x6C279791,
+0x0972FEC8, 0x4B914461, 0x4C9E8224, 0xFBBBC737, 0x3B5569FA, 0x61A4FFC6, 0xE380B142, 0xE3A5359E,
+0x178A83C3, 0xFEE75D0B, 0x089F6E07, 0x55E5B559, 0x0FE74623, 0x0170373A, 0x3D08A024, 0x8308B4F4,
+0x0F6AA2C8, 0xC139EC05, 0x1414F4BC, 0xDDA81E87, 0x28235E51, 0xF5C39FCE, 0x48A49F3D, 0x41884432,
+0xB3365126, 0x9508D46A, 0x3AFFCDC0, 0xAF7A734D, 0xEDCD66D6, 0x05DC47AA, 0xDBF7748A, 0xC978DF92,
+0xE3C228A2, 0x035CF8EF, 0xE814E112, 0x257806DD, 0x4CDC6024, 0xF16AB988, 0x3AE68F8E, 0x223734BD,
+0x9AF93FC3, 0x98DDEDA3, 0xF498BE56, 0x1B61F72A, 0x08CBEF0B, 0x392E95A4, 0xC19774A8, 0xD081819B,
+0x020EA3DC, 0x0000802C, 0x9E010100, 0x12170A00, 0x1068EB7F, 0xFE7E1D36, 0x399D2B7D, 0xD509112B,
+0x35E09A60, 0xD8799254, 0x1A330E66, 0x17DA6547, 0xA5D7FC7A, 0x784ADB1F, 0x125211CD, 0x6B754821,
+0x5029174D, 0xEC245FCA, 0xF938B2FF, 0x2F4639BB, 0x5BF3680D, 0xC5D2A4ED, 0x799F1DF4, 0xA1786874,
+0x522CDB14, 0xE76C0524, 0x75917516, 0xF3FD0A67, 0xEEE7B378, 0x14862239, 0xF787003E, 0x42CDB86A,
+0x24E274A8, 0xEBE6A88A, 0x58760612, 0xBBCC8A3B, 0x1C9FC78C, 0x17944708, 0x0DF3BB47, 0x6307BDBC,
+0xD2556CED, 0x9F18F656, 0x26AB48C9, 0x73AE4171, 0x40BEF317, 0x12970149, 0xC76F561D, 0x2E8952BD,
+0x98997327, 0x7185B2C1, 0x3E86A923, 0x8D273575, 0xAD361600, 0x95A5D130, 0xE50950F4, 0xC9FB67AA,
+0x99E6FC01, 0xB69251E1, 0xEFB00AC8, 0x8CDE5D3A, 0x37609010, 0x90D3D1B3, 0x445EE31A, 0x37C1ACC6,
+0xCA0A5972, 0xAEF23004, 0x3702B7E2, 0x08FC4A04, 0xDF1C825E, 0x352C5629, 0xAB04CC94, 0x31914162,
+0x7D5C33A2, 0xA25FFA90, 0x32DB6849, 0xB7639B93, 0x81876B0A, 0x35DA4A39, 0x9F50A99A, 0x44BB19AC,
+0x0B4C2AD2, 0xA46D58CA, 0xD256DD7D, 0x415E3304, 0x68B6EEB3, 0xFA0E7266, 0x708B8998, 0xB0E36E0E,
+0x7F638E88, 0x98BD0512, 0xD24A6CB4, 0x905647A8, 0x3CC08644, 0x9B0BBCC2, 0xF2CD6797, 0xF8400019,
+0x01FDE529, 0xBEF7B13A, 0xB9D40F7A, 0x786F8AE7, 0x96126F91, 0xBAA8283A, 0x6161F950, 0xBE86AE79,
+0x8A771496, 0xEACF661F, 0xEC6E9F1B, 0x56CCDD10, 0x9DE30CBF, 0xF213BB37, 0x6134F758, 0x130D9667,
+0x4C96C91D, 0xB4B52922, 0xD3F3F8F8, 0xD8E89CC9, 0x85AC7826, 0x6336AD07, 0xC83BF9AD, 0x570D757A,
+0x7FD633CE, 0x8F0C3FD9, 0xAB378A19, 0x02CF3E6E, 0xF98D365A, 0xBAC28992, 0x0B260647, 0xCF9A4792,
+0x9012C502, 0x81072BF3, 0xA2BC81FB, 0x1C6A93E3, 0xEE2305D6, 0x2B40418B, 0x8DE30FE8, 0x80EDB2B6,
+0xE9338CEF, 0x3BA7BA0C, 0xB11BB902, 0xCB06353D, 0x524C5D21, 0x7A7F118B, 0x82277B32, 0x19A6D2F0,
+0xE2C8D910, 0x3E765741, 0x9E54ED17, 0x2661EB47, 0x4FD87572, 0x3F7702F0, 0x82A3D2BD, 0x54540DD5,
+0xF787A1DC, 0x318E0E7B, 0xCC9DC210, 0x3F8F1E9B, 0xBFCFF915, 0xE452514A, 0xE0A70A98, 0x26314BB5,
+0x6FC536E8, 0xBDA1DEE9, 0x4013D4FA, 0x35C7C4D0, 0xDC9947F4, 0x3EAE3192, 0xA5B206E4, 0x07018C08,
+0x3A3F503C, 0x57569B9A, 0x37104624, 0xB2924C02, 0x6368E1CF, 0x4536C1E3, 0x8F64FF63, 0x1FBD7260,
+0x500414DE, 0x0A6B5E74, 0x11078983, 0x471E2A55, 0xDA89B983, 0x6B683ADA, 0xE0B89640, 0xD144FBDB,
+0x5A706659, 0x8D670DFC, 0xEC50A4EC, 0x57B6F1C1, 0x156B7A47, 0x7CF381AB, 0x40D6218A, 0x45DE8F0E,
+0x3B7BC6A9, 0x75786D26, 0x2B49C493, 0xEAACCB5D, 0xC6C80318, 0x1CD7094A, 0x85A5C640, 0x3B703AB9,
+0xF55A99C0, 0x94A6305D, 0xDCB59E13, 0x7A2F75D4, 0x53033888, 0xA8C8DFDB, 0xB0E2D3E0, 0x61D5BF8C,
+0xE602CBAB, 0x6BEEB475, 0x18AD1CA1, 0xF00EAD8B, 0x87804467, 0x366AB003, 0x388F5348, 0xCA7BE768,
+0xC2824BE5, 0x976D29FD, 0x8FD5F486, 0x34E52DFD, 0xFE8B323A, 0x5C8FB9E3, 0xE7971A38, 0x89E34EE5,
+0xC8617395, 0xBECA2A70, 0xD2BEA5BF, 0x08C00D0E, 0xFBC361AB, 0x4EE26294, 0x6D7F77F9, 0x826024EA,
+0x3E269A43, 0x61CD3EE4, 0xBBC1E4C2, 0xD7D96693, 0x20F55212, 0xC359DBC2, 0xFC865D9F, 0x78BFBE20,
+0x7C69078F, 0xD04805A0, 0x3BDC35D9, 0xD390B009, 0xC6D41BF2, 0x72B89BA4, 0x047B4CBF, 0xDFAA907C,
+0x09C41E6E, 0xD7CA8DCB, 0xAEC2E9BF, 0xDE4319E0, 0x761BFBFF, 0xD375CD9D, 0x4634B108, 0xE983356E,
+0x9D22A012, 0xD173E781, 0xCC4AA3D8, 0xD8AFD762, 0x1B0E08D9, 0x82F3F267, 0xF5A2E727, 0xCB381186,
+0xE0963BF7, 0x46158995, 0xBA63D000, 0xC254A543, 0x4029100A, 0x815E2688, 0x8F28154C, 0x3520C9EF,
+0xE169906D, 0xED0012D1, 0x8F427645, 0x1DFB33D4, 0x02BB210A, 0xD079B38C, 0xFD66CB25, 0xDEE67810,
+0xEA3EDF89, 0xC1541FB0, 0x0527E2BE, 0x0ED20E3D, 0xC1E555F9, 0x09F880F6, 0xF6A04E2C, 0x3AA1BBF7,
+0x64D98846, 0x78F8D4CD, 0x87E5EDA1, 0xAFA5CA19, 0x73CA4D82, 0xB651BBAB, 0x6EC4FF44, 0xCDA6D675,
+0xE38F9498, 0x085146E1, 0x4ADD5660, 0xF4F8E6E4, 0x196B9504, 0xE086CF6D, 0x86304075, 0x9A5E380C,
+0xB57594B3, 0xD0FE48FD, 0x2349C3C5, 0x3E174275, 0xCC92894C, 0xACA54A58, 0x38F2B3DF, 0x4EF5B0C1,
+0x9A71E409, 0x3F2C4A2C, 0x15239772, 0x3D31DCEA, 0x78380D20, 0x655EFB63, 0x6AC7B3C4, 0xACA79CE3,
+0x3D9BD6C0, 0x1B541390, 0x32B9A483, 0x79497C9A, 0x8AF0BBBC, 0x7E889F63, 0x04450F70, 0x3DA57E5E,
+0x91BDB2EE, 0x76188C1D, 0xC58F7E27, 0xAF422492, 0x865D53E3, 0x66F96716, 0x6C54C07F, 0x4242A025,
+0xB77DD71B, 0xDDB4C75D, 0x8691B653, 0x5D024DC0, 0x927567A2, 0x20891925, 0xBD5078E5, 0xA52B6DFE,
+0x26FC9666, 0x1ED29A6F, 0x4986DBA8, 0xBB24D276, 0xD7E4616F, 0x3DD38C55, 0x05B9BE47, 0x9BFB9B40,
+0x6089AAC8, 0x74AF7AAC, 0x6AC8ADDF, 0x5041EF36, 0xF34D4E24, 0x15F9EA44, 0xC2137700, 0x9D424502,
+0xE50E209D, 0x40CCE2CB, 0xC051B3C0, 0x71293D81, 0x9AE10E8A, 0xA3FDFBDB, 0x4E1AE6E8, 0x58E0D180,
+0x90AA05D4, 0x57F6FFC1, 0xD1163A4C, 0xF350CAD2, 0xCC054775, 0x236C1BCF, 0x7B2F13A3, 0x0568530B,
+0x18BC84FA, 0xFF0BD52B, 0x942CF6CF, 0xCF492BB1, 0x4377BE0E, 0xF36EBCA0, 0xBCAB5CAF, 0x29521F1E,
+0xDF8F8192, 0xD3F52CFC, 0xA21D4937, 0xE5B376CE, 0x68982275, 0xF6277086, 0x1EA2D66F, 0x94366F6D,
+0x47574F2F, 0xA428EB7A, 0x3B842E05, 0x28BFC21C, 0x764EB628, 0x0000E8E6, 0x88210100, 0xBF870280,
+0x00E431E2, 0xBFD3B945, 0xEED8C4C6, 0xB266CBA9, 0x86407D29, 0x678D3B72, 0x1A836D3C, 0x4C908C8E,
+0x0D4B0743, 0x7CA4AE33, 0xA7379D4B, 0xA22B09CE, 0x85968D0C, 0x54F6454B, 0x9B233FE7, 0x6AD53BA1,
+0x39599248, 0xB8842B14, 0x854C90F0, 0xE466005C, 0xAF075F90, 0xC2BD475B, 0x739D2042, 0xF6FFFF5F,
+0x5EFB3E70, 0xFC799847, 0xC940846E, 0xD8BB7142, 0x8A16AE1F, 0x712FE80B, 0xBEF3D4D8, 0xB2CF4B8A,
+0x0DF35A13, 0x96E8CEC8, 0x04C0D08E, 0x1343BB78, 0x2E91DA7E, 0x4381D5D5, 0x0A65D750, 0x889C7FC6,
+0x750C8095, 0x2914276A, 0x2C8DF8E5, 0xFCB97EC3, 0x38F21A34, 0x4467FE47, 0x07608D18, 0x7F3996EA,
+0xD912F096, 0x6D4EE071, 0x4253F5BD, 0x18FFD56C, 0x5725FEFC, 0xC271B879, 0x2D10B7E5, 0xAB0A28CE,
+0xC5A95F01, 0xB030CC7F, 0xF6BB2868, 0x64A210D2, 0x020E7F7A, 0x23066DC8, 0x48AAC5E4, 0x4FDC6A84,
+0x80AA7EDF, 0xAFAC75E6, 0x9B26725F, 0xD0618B9B, 0x3BC83038, 0xFC11DE10, 0x27104D26, 0x0A93272C,
+0xFF366211, 0x604010D3, 0x8AB1D3AF, 0x0507055E, 0x34973425, 0x6715142D, 0x05F75D06, 0xDAA13A20,
+0xAD034837, 0x6305FD96, 0x93085618, 0x1980E573, 0x1EE28876, 0x798F35FE, 0x161AB121, 0xDDFD56D5,
+0xC30D713C, 0xE1B877EA, 0xDA0AB9BC, 0xD1042108, 0x766E3C5B, 0x594D8560, 0xD4FA4121, 0xD7F955E6,
+0x287BD035, 0x301EB32D, 0xA6C27854, 0xEE848512, 0x90BFFB52, 0x918F1BDB, 0x15278BAA, 0x3D274BE3,
+0x84AF98EC, 0x5A828CED, 0x5DCC4A46, 0x9CD36FC4, 0x76A27476, 0xD1A089D0, 0xE8356A70, 0xC4CBD05E,
+0xF58B4376, 0xDF48BD9F, 0x4089945C, 0x765DC955, 0x12ADE4D2, 0xA8DBE8D9, 0x84C7C6D2, 0x3F3BDA09,
+0x3AF53AD7, 0x41536251, 0x1591941D, 0x3B360806, 0x840B0DE0, 0xA458D3E1, 0x4FC2B8FF, 0x37E6475D,
+0xB91FCA02, 0x4F3BFEF4, 0xF34D743F, 0x1DEE3BEB, 0xA70089C7, 0x2CAF5CDF, 0x2E2F7B55, 0x67F9BCD8,
+0x3D3D7329, 0xB1066DA7, 0x83558375, 0x41EDE1D3, 0x3B4E6BFA, 0x823A6229, 0x30FB8F95, 0xDE6A96A6,
+0x3DA56DE3, 0xDA949E6B, 0xDE7A44D1, 0xE087848F, 0xAF96071C, 0x2A00FD36, 0xA34B204D, 0x9E1494F7,
+0x7D8FE3A2, 0x17375FA1, 0xA80FFEB1, 0x4E40FCA9, 0xF9C6CD82, 0xF050C0BE, 0x5CAE8375, 0x2B696A70,
+0xD2E1BEF2, 0x29B843A8, 0x0ECCB72A, 0xF63D6BA4, 0x7AD2319E, 0x0E30D049, 0x5ADF1388, 0xB20E570F,
+0x42C6747B, 0xF4DC78E0, 0x71FB1148, 0x99943C9C, 0x55100154, 0x5C4DE9CD, 0xC9811894, 0xA1B8ADA1,
+0xCD1E940E, 0xE58BA2F5, 0xF167319B, 0x28214100, 0x25E52785, 0x3042BE8F, 0xC03409EB, 0xDFB463A5,
+0x9A0D6FC2, 0xE5B84EF6, 0x6596B666, 0xE8367504, 0x6F6FBBB6, 0xB13CF699, 0x581E0713, 0x1A51D5FC,
+0x8044F9DD, 0xF4646733, 0x3A3A2C15, 0x657E8D1C, 0xAD614F9C, 0x4537DB56, 0x6F05BF86, 0x0DABA97A,
+0x6CBC5C44, 0x5065D00A, 0xC1564C86, 0xD7AA8598, 0x93C34D2B, 0xF11CA857, 0xFE98E45D, 0x4089CC64,
+0x8FB9FE69, 0x0B71C925, 0xDEC2B374, 0x8A9A4839, 0xA42E63D4, 0x4FF7018E, 0xE74521CF, 0xF9C6918C,
+0x83354325, 0xE301FB3D, 0x38BEEE4A, 0x727BF63A, 0xA8FABB73, 0x47B65EE0, 0x1379103A, 0x22B4EA1D,
+0x927AFCA4, 0x6EF081B9, 0x9311DD7F, 0x9E59972F, 0xE68FA9BD, 0x697E24C1, 0x12721E21, 0x3CB96BCE,
+0x38B37A2D, 0x8E05B420, 0x3FD0C038, 0x6027B689, 0x926908A1, 0x4B72AFA6, 0x91745EF6, 0x2D82147F,
+0x9B789AF1, 0xE3801CE9, 0x4057FF88, 0x736707E0, 0x843D7E15, 0x09DFDA0B, 0x9C88AA99, 0x271D947B,
+0x9586ADBA, 0x176076B0, 0xE2557ED0, 0x16FE2C0A, 0x28AEFA09, 0x7E8B4A6F, 0x23C9D918, 0x213AB3DE,
+0xDF31D6B1, 0xAF283428, 0xD3B9265B, 0x23A77D9C, 0xF333DA43, 0x497F1CD2, 0x418803F6, 0xE3B5B165,
+0xCC16F192, 0xE5F8A3BD, 0x29683361, 0xBA30050D, 0x9486F17E, 0x08F0E7DD, 0x7907AD59, 0xD7FF9416,
+0x2453344C, 0xCCD922F5, 0x228D8CE7, 0x061F3C01, 0x897DD945, 0xB9CD0089, 0x026AFDF7, 0x95C96040,
+0x6FD5DE78, 0x0ABBC504, 0x1B3CF3CE, 0xA114734B, 0x565FA196, 0xDE88B8D0, 0xEFBC5211, 0xCAE48228,
+0xA1574E99, 0x3394D5D1, 0x28D6E754, 0x5790DD38, 0x3BCDE45F, 0xD17400D3, 0x3583727C, 0x761C7951,
+0x798E93FA, 0xA6B2212D, 0x0002B82F, 0x77DCA886, 0x31C8994B, 0xDFE16638, 0x4D328926, 0x8F492ADC,
+0x26A5F6D4, 0x1CDC7796, 0x4C2E5CC8, 0x1EA9B9E9, 0xB5472441, 0x9E7BF7DA, 0x6189E349, 0x73DF7C34,
+0x82751C62, 0x57AAC14D, 0x191A123A, 0x81215B0F, 0x5A320CF4, 0x4F13D046, 0x8F65C2AF, 0x7C5FA939,
+0x1975FAC9, 0xCEA0658D, 0x61E74482, 0x5E64473F, 0xED0D7A02, 0xCD751AD2, 0x0425705A, 0x8B9EDB35,
+0x4AD1CAC0, 0x9FBDF375, 0x70D278E4, 0x8AD5EEA5, 0x7F736C7C, 0xF312D509, 0x3E033C0D, 0x7F81A822,
+0xF8D021D8, 0x6CAF8205, 0xA350B1E3, 0x2DE00E2B, 0x2B6D0926, 0xF22424CB, 0x74395E2E, 0x45B867D3,
+0x914E005D, 0x2CB26EBD, 0x7526EB0D, 0x61162E52, 0xAE87B5E9, 0x3A699317, 0x5CAB0232, 0x536F7826,
+0x5F59C8BB, 0xDF2D3C22, 0x3D4BAF3D, 0x3BE3F45A, 0x39072268, 0x2462DB44, 0x57458CD6, 0xC1416856,
+0x8A16AFAA, 0xA05AB7C6, 0xB3152392, 0x2C4504A6, 0x1BF81B67, 0x7CDB021F, 0xBF1E456A, 0xB909A18B,
+0x374BEF5E, 0x9E657259, 0x56B0AA4E, 0x2CA37168, 0xB613AD76, 0xFBDA8282, 0x9DEA3C5A, 0x53763DCA,
+0x64BEB164, 0xD7D5EE65, 0x5EB4EA56, 0x9EF83E46, 0x42CB1898, 0xC4D358C8, 0xEB0BCF27, 0xA6C01F59,
+0xE1E72ECB, 0x9CCB33E4, 0x49A6A19F, 0xB4312FB6, 0x34B524B0, 0xD5A3E6B0, 0xB28F131F, 0xC42AAE91,
+0x38F7B172, 0xFF3AE9EF, 0x909BC0B9, 0x673912D1, 0x312E217A, 0x0A5D920D, 0xABCF504F, 0x3FDEBAED,
+0x13638FF2, 0x72F022A7, 0xD8D93B9A, 0x6ECD717B, 0xEF0D96EF, 0xBC1D847D, 0xC23EEE50, 0x3BA5B425,
+0x6966BC2B, 0xAE3E18AB, 0x38300445, 0xBCCE8BAD, 0x468124DE, 0x92C8FC77, 0x40943C9D, 0x71865E24,
+0xE228CF80, 0xB23719C1, 0x28F9F8CA, 0x2982D914, 0xF5BAAFB5, 0xFF4547E7, 0x3ED92959, 0x0E7345B8,
+0xB618DD49, 0xC999B049, 0x7E949062, 0x2CFDC1FB, 0x1D551F9A, 0x9E10FE3F, 0x5CCA93C3, 0xCEF9DA43,
+0xED789073, 0x0DA7CB2E, 0x3C0900A9, 0x829D4FDE, 0x4AFBAD5C, 0x151D5A0A, 0x3A366B15, 0xA1540139,
+0x688B44F8, 0x7CDFA5FC, 0x461072F4, 0x235FA803, 0x0A66825F, 0xB6977F0E, 0xDD127161, 0x5FE367B3,
+0xF32B3354, 0x458CD08B, 0x69094917, 0x13233D65, 0x4867E671, 0x3DC7AE3A, 0xA8E9E164, 0x0D13F4CE,
+0x651DAFC0, 0x49992A84, 0xE6440FDA, 0x31D2937F, 0x8F8BCE8F, 0x6361C7CD, 0x90EF85BC, 0xF8350EBB,
+0xFBAB96AA, 0x7B115032, 0x8156FDE1, 0xEDB8B7D4, 0x3C1A232E, 0x471766E4, 0x158443ED, 0x3E052A17,
+0x7C49C57D, 0x8AA1F7A8, 0x6837B9CB, 0x46108446, 0xF12F0609, 0x9D73A5FB, 0xDA914117, 0x3890BF79,
+0xC0D13A0B, 0x50244BC4, 0xC64DED33, 0xBE6A1E9B, 0x4E4C6E77, 0x3357F09F, 0x9F86A653, 0x6DC40D76,
+0xD33C8740, 0x20A67DE3, 0x831D1075, 0xE102F285, 0x60B1E74D, 0x2B499F80, 0xB7403BDF, 0xA82FD562,
+0x2941FF87, 0x481B3D32, 0x9A3281FA, 0x7140CFC2, 0x04EA4970, 0x26469A66, 0xBD6A7C79, 0xD0C1CE6D,
+0x7D77A39F, 0x0FF41924, 0x770D34AE, 0xE14EDCEE, 0x1E4141C0, 0xE8CE0D35, 0xA246ABA5, 0x59DEB0DA,
+0x96557425, 0x50D2A157, 0x5B9038F4, 0x1680E464, 0xAE105920, 0x8F51B106, 0xA4A191A0, 0xE5719271,
+0xB39693B1, 0x2ECE08C8, 0x19D023FA, 0xA7CE4863, 0x56D98523, 0x52BCAE50, 0x4A8B1692, 0x08076739,
+0x358EA644, 0x6EEB856F, 0x24DC5B8F, 0x15468F9B, 0x273F3049, 0x009DC174, 0xDDAD6FC1, 0xDB8878E9,
+0x5278AE59, 0xC62A6615, 0xB72F20C8, 0xCE597657, 0x58A9EB3C, 0xE7F1E406, 0x5432CF35, 0xF88E1370,
+0xCD41334E, 0x55D94DAF, 0x578C5A70, 0x99A3A271, 0xDF20FC52, 0x6B438F1B, 0xE9E086AA, 0x8E0E538F,
+0xD569F81F, 0x3B2F6C0C, 0xDB4A6F47, 0x3F92BDFF, 0x03F19170, 0x04B4F5CB, 0xBBE1F96B, 0xFE934A16,
+0xCFCB97F8, 0x9E87AC13, 0xD5EAAD58, 0xB4CEF5CA, 0x4233EC88, 0x99B014CA, 0x4DF0292A, 0xE8C73CAD,
+0x7D321C91, 0xF04C06A8, 0x8AF1D8E0, 0x8AE72F00, 0xBD991F80, 0x1A9E6CBB, 0xAFF51AF0, 0xD586B4D8,
+0xA07B52C5, 0xAD0482E7, 0x214EB2DD, 0x7D10DF8C, 0xA78B2BC0, 0xF1ABC53D, 0xCDE16E32, 0xF9D52B8D,
+0x57BE603C, 0xD8B43469, 0xB5CC5BF7, 0xB36DBC81, 0x787F2390, 0xFF076EC3, 0x184C294F, 0xCBF363BD,
+0x0442CF2C, 0x6D059FD9, 0x63BE783B, 0x2079F5F4, 0xE6CB2251, 0xBDFAFAEC, 0x3A1C93E1, 0xC0B81286,
+0x326960C3, 0xB91C201A, 0x4E6E63CC, 0x38B7C292, 0x16C046F1, 0xA69066CF, 0x951D22A6, 0x1C6F9A5F,
+0xEEF98DC0, 0x04C7C5AA, 0x7AC929F1, 0xBE1514A9, 0x3C02EF38, 0xC6FA3B5F, 0x787D68A4, 0xF42B4449,
+0xADEA0A40, 0x3000D43C, 0x88274B09, 0xD7F6F9A9, 0xEF32F6C9, 0xA270FEEE, 0x6CE136E0, 0x061754DC,
+0xED8CB47A, 0x1674EB8D, 0x62ECA759, 0xA33B7164, 0x44D80F18, 0x0C4DC0E5, 0x12162423, 0x6326B9F9,
+0x09105909, 0xE632664E, 0x49E537DE, 0x537DEEF7, 0x17314962, 0xBCCD1C76, 0xF3AA7FE9, 0xA041442F,
+0x45D0CDF9, 0x95446200, 0x5822C612, 0xBACDC1AE, 0xC54EEE4A, 0x652B852E, 0x9912F722, 0x79BEB487,
+0x0E6EEF14, 0xC3C71637, 0x5DF8074D, 0x1F97EDFF, 0x72F21201, 0x3DAA70CA, 0x59A2D6CE, 0xC4224A70,
+0xB47DDC23, 0x2AF4B642, 0xD5BF11E1, 0x485557B8, 0xCC7B1EE2, 0xD0941EC1, 0x886AC6DC, 0xA9F8741E,
+0x7845AB40, 0x3296A911, 0xEB44315F, 0x817B605A, 0xE5F83F17, 0x371E9941, 0x8B2483E0, 0x36B24C07,
+0xDA49D742, 0x56675DCB, 0x08551759, 0x04F66182, 0xFA3916CF, 0x6365C51E, 0x2F6EFB38, 0xC2DFCA94,
+0x282E4965, 0xD303B694, 0x234ABAA8, 0x028D3952, 0x8BB6BE28, 0x7A574DC2, 0x0F8D9247, 0x4A9629AC,
+0xBF414D22, 0xC9D86A5A, 0xF21B2E44, 0xC6F8205F, 0xE948FE00, 0xC98628AD, 0xC4920C17, 0x799165A0,
+0x7B7BE4DF, 0xCE6C8BDC, 0x762F0745, 0x99641899, 0x29B38341, 0x5E26C9CA, 0xA56C1308, 0xABE24261,
+0x2F0D7E9B, 0x17485ACD, 0xB8765E16, 0xB19AB73E, 0x3C5A47B7, 0x38F8BDB2, 0x4585E502, 0x5A84488F,
+0x6D7B3453, 0x587D3F5F, 0x0FF0137D, 0x980AADF2, 0x9436EA05, 0x674FAC94, 0x1B462915, 0xBE828EDA,
+0x8F78211B, 0x53F45CB3, 0x8A3560C3, 0x7479B5A9, 0x08447165, 0x4089173F, 0xD57FC3CC, 0x4F59DCB5,
+0xDA77D28D, 0x81772D94, 0x3BED9776, 0x7385260D, 0x0F5F735D, 0xEEBAF284, 0xE3099769, 0x79F84C03,
+0xD5A0FC3D, 0x294E09D9, 0x067D4A88, 0x02522987, 0x7881058C, 0x9DB2A320, 0x8640F9CF, 0xB738AD01,
+0x55083DCB, 0x37A0D45A, 0x6E24D400, 0x0A459FD3, 0x7F0B0656, 0xE02C5945, 0xAA423E3B, 0xF4C64D80,
+0xD49FC282, 0x2EB73ACB, 0x7D8591F0, 0x25E9BAF3, 0xD9F6D0E9, 0xEE1BE498, 0xEBC50E4B, 0x18634B8D,
+0xBF465C67, 0x0AFD1365, 0xED32D2F4, 0xCAEC6846, 0x73684754, 0x43F7736F, 0x84766FB6, 0x931B0C50,
+0x17C35C63, 0x98C11C87, 0x5D88B11C, 0x5DCCD0AF, 0x8F817F9F, 0xD423C62D, 0xD2257FB4, 0xBDEFFA95,
+0x31DC354B, 0x2A2C206C, 0x6C362B6E, 0xD96044EA, 0xF65CF2CA, 0xA46A5060, 0x2AF26AEC, 0x869E9D23,
+0xEEBB8600, 0x1047CF44, 0x4AD32B5E, 0xE016D149, 0xB86A7EAA, 0xDECB417C, 0x5EF40083, 0x2117B59B,
+0x4CBF5A67, 0x77F532D2, 0x73A53769, 0x9129254F, 0xA2C4EB4B, 0xE993B32C, 0x441F82F7, 0x8023FA14,
+0x3747842B, 0xAA66487A, 0xDBD2B347, 0xA58A3588, 0x4742C785, 0xEE73CDD6, 0x0E2AF217, 0x0D8576B0,
+0xE2522828, 0xDB50BFF2, 0x8CC49E10, 0x04992135, 0x51911E2E, 0xFB2218E7, 0xACB07DE2, 0xAFE819B5,
+0x281C9DE1, 0xF2880627, 0xA6126EFE, 0x85984AAE, 0x943120B3, 0x75EEEB13, 0x60E00E5C, 0xE7CDE7D6,
+0x7DFC8720, 0xD4CABC22, 0x0D1EAB2D, 0x1EAC269A, 0x8B9FAE41, 0x7611122D, 0xB8A09C6A, 0x0C3AB1E5,
+0xC9E1D35A, 0x60BB0EED, 0x21CD42D7, 0xAF522D9A, 0x76ED9185, 0xB8E7CD35, 0x413C73E5, 0x55C851FC,
+0x7943FF7C, 0x5408DCC1, 0x771FC285, 0x64BF75AD, 0x1AF4BE5F, 0x8A2C516C, 0xDEB3BF1D, 0x1118C928,
+0xC262661A, 0x9F79F738, 0x0F0D0E00, 0x2B5036DB, 0xCF53724A, 0x7F645A1E, 0x5B6D78FC, 0xC5104BF2,
+0x46E446CA, 0xC21E9494, 0xB0254CA3, 0x9D6C1129, 0x775DB427, 0xE4B22C5B, 0x5BFA22FF, 0xFD70E236,
+0xA86BAE26, 0xCA7C4016, 0x82DDFFA4, 0x2727612E, 0xEB1B543A, 0x21159181, 0x032117C3, 0xF9CB4B10,
+0x5078D81A, 0xF7E761DA, 0x18CB3D00, 0xB46D2D57, 0xE038F6F0, 0x771D0804, 0x8F20097D, 0x3F6DD769,
+0x214DB0CE, 0x4E6CCE92, 0x50A36BCB, 0x012A1816, 0xC887FF7F, 0xEAFFC98B, 0xD1F2A8E1, 0x8AD89E5E,
+0x39CD5F04, 0x974113BC, 0x797D7E6F, 0xDD125F95, 0xF5E18319, 0xC9544632, 0xA5A324A2, 0x1EF4CA16,
+0x827E1BDF, 0xA6EA5FC1, 0x5EF6F84B, 0x8701FE88, 0xD640E639, 0xC5903CB2, 0x80DC2AB1, 0x41AA13D4,
+0x3AD9661B, 0x31780878, 0xF446C226, 0xB5DF0ECB, 0x5CD49544, 0x8118AA22, 0xF6F86359, 0xBC28A777,
+0x357377FF, 0xCC5D320E, 0x92A528F9, 0x66139FF6, 0xCB513BB4, 0x507609BC, 0x55BAD82B, 0x608F0B5F,
+0x95BD2F90, 0x480433AA, 0x21BDC75D, 0x6FCD2695, 0x7C6A26FE, 0xCCF52257, 0x6EF509BB, 0xDEA6887C,
+0xE6726C39, 0x6756C80A, 0xB34E9989, 0x4A87101F, 0xE19162F8, 0xE557AD05, 0xB46AD25D, 0x666BD859,
+0x4B3CC12F, 0x9646DA61, 0x848E5C67, 0xB3882C69, 0xB4487F05, 0x1A1602FE, 0xFE754F97, 0x35D550E9,
+0x0D67A5E2, 0x1FE58F7D, 0x909303BC, 0x9F568539, 0xF412FE44, 0x36E093F6, 0x3FCFB59C, 0x1E8CEE78,
+0x8605A23B, 0x59D17D63, 0x320594E7, 0x03E18DCB, 0x5D56244A, 0x6C5CD6AC, 0xB2D4A1DB, 0x55DCF72C,
+0x797B94F0, 0xB0F2FF05, 0xF8BB4F4E, 0xDC69E59D, 0xAAB2BCD4, 0xEC857A4B, 0xD68CA150, 0x5DCF2DF4,
+0xBDEAF763, 0x072A66C6, 0xA8F06FBB, 0xB1C48AD2, 0x6CF76D42, 0x92D15073, 0xD84D64F4, 0x47207FE4,
+0xC38019D6, 0x3084FEB3, 0x2B307EFE, 0x2DEFEC22, 0xB977B7D4, 0x319AC601, 0x843C64CE, 0x0A475256,
+0x9D8EFA71, 0x4F72F328, 0x9552C55E, 0xE4064BAE, 0x585046DC, 0xE8D82723, 0xCD9CD52B, 0xE9E1B11F,
+0xA6A11735, 0x61D74E28, 0xA10E3F11, 0xF0D08084, 0xB38C96AB, 0xCA5F14AA, 0xBD0FF6BC, 0xA9DDA8BB,
+0xD63D05B8, 0x2C78ADD3, 0x8C144210, 0x55F62C27, 0xFA2AFF41, 0x3A1F3102, 0x4B64C3E5, 0xDDAD8E09,
+0xE7550EF5, 0x0CA89D6D, 0xA93F0DBF, 0x101BCE45, 0x68B86E94, 0xCB3FE90A, 0xEB05DEA3, 0xA9FE5411,
+0xBD9397A1, 0x86C258E6, 0xB443EB6A, 0xDC7044BD, 0xC279BB64, 0x2EDFC0FD, 0x1077CE0E, 0x999F4748,
+0xCC65E20A, 0xCDCC56E9, 0xD3CE6BDC, 0x376CB21D, 0xB040B550, 0x2BECB94C, 0x8C2AA60A, 0x095528AF,
+0xA7E26BAE, 0x466C51D0, 0x3D55EF1E, 0x3277612C, 0x663758AF, 0xACD578D2, 0xDA05A86D, 0xB334DDB4,
+0x6B9A13DA, 0x9C9AD2F3, 0xE142AAC5, 0x87D90CE0, 0xB4B56ABF, 0x28E803BD, 0xB6C6BA6E, 0xD342EE66,
+0xCF053242, 0xED8658CD, 0x080A5451, 0xDD1DE9D6, 0x1084B412, 0x627815EB, 0xAFE56F1A, 0xC949BA06,
+0x4CD245FD, 0x321201A9, 0x5AFC3EB1, 0xF12E9393, 0xF3749891, 0xA89AB2F8, 0x09F3AE08, 0xB437E95F,
+0xC868E090, 0x853B7202, 0xEDE82DD5, 0x6C0DF142, 0x4E2B3BDE, 0xBF782F35, 0x61E57A43, 0xC5F4AE5B,
+0xD161FFDE, 0x16994C73, 0xCDB3969B, 0x7BF88FEC, 0x391A75B0, 0x23ACA418, 0xA6FBE5C4, 0x242F8F6C,
+0xA55AB5E9, 0xFDA2214A, 0xACD83C87, 0x2BD3BC9F, 0x5098F672, 0xDFC97394, 0x3851E46A, 0xF9CADAB0,
+0x65152BC8, 0xC8060E35, 0x6A0EB72A, 0xE3D87279, 0xDBD5A6CA, 0x8F4E87B7, 0xAC7E37EA, 0x984CA83B,
+0xE3BE0D2E, 0x9FB696D4, 0xA25FFEC8, 0xC4ADC12E, 0x7DFB5905, 0x4185C2BC, 0xFD6E64F1, 0x54BDC1D8,
+0x67BBC1C4, 0x5DC931A5, 0x4DBF6F0A, 0xBC8357E4, 0xCD064345, 0x0AB1AE38, 0xE439932A, 0x7BD0BD4C,
+0x39573D60, 0x746D29D3, 0xA45BADCB, 0x782F82EE, 0x112539D8, 0xB4E2B17C, 0xA28CC3A7, 0x7B7B7397,
+0xCF9C4FDE, 0xC0B931DF, 0xF4241C04, 0xF76DDD3B, 0xC3E9C83A, 0x327E2DC2, 0xB74F7466, 0x6BD8D777,
+0x85A7EF31, 0x5C06A556, 0xA522B9A4, 0x1C399F53, 0x915F951B, 0x16A0EB1B, 0x2C3CB44D, 0xA29C4DAE,
+0xD160D627, 0xC6CCF004, 0x04382FBA, 0x1A465B6E, 0x82065876, 0x6CB03549, 0x8E6B941C, 0x83B8A2F5,
+0x57E50A10, 0x489D63A7, 0x9FD894F7, 0xF5CB0DEE, 0xDB8053E5, 0xEE20780A, 0x9E8B792E, 0x0FF8A3C1,
+0x1E8F9B38, 0xF4258404, 0x8F1C2CF3, 0x135FF857, 0x37B0BE56, 0x170D9061, 0x9F0E75D1, 0xD5A50521,
+0xC804981B, 0xAEF1901D, 0x89FDB6A4, 0xD87342E1, 0x4922E24D, 0x7309B93C, 0x106935CD, 0xA64D5D37,
+0xBAB05F4C, 0x84326E58, 0xA39E9AE0, 0x1C4AD436, 0x84FE6F95, 0xEBFE881A, 0xF7D68E08, 0xDF58A970,
+0x3B0A8BAD, 0xF909C3CD, 0x0A1EF368, 0x4044D553, 0xBA288563, 0x5E36DB2C, 0xBFDE19E1, 0xD7AFC5C4,
+0x31778607, 0x4BAD30A0, 0x98B25998, 0x35F38AC2, 0x0121E85F, 0x20A9D310, 0x7FED1423, 0x2C4A16C7,
+0x26A621DC, 0x8611254A, 0xE6D82E81, 0x897310E2, 0x46A65221, 0xE5469B11, 0x276E1A59, 0xE7B1E9A6,
+0x7D4DC40C, 0x0A22A010, 0x04B9118A, 0x5D1EB2AA, 0xF8355BE8, 0xB6A8DA1D, 0x10CBC449, 0x20128B65,
+0x3633202E, 0x37919028, 0x130C3723, 0x6126A2F4, 0xABCFC20A, 0x6D81803A, 0x9DE5F5E8, 0x1F66732F,
+0x5E6EF52D, 0xA775873A, 0x0A275366, 0x013D94E1, 0x34CB7877, 0xD062E4F3, 0x0E0372DB, 0xB8DA2BD0,
+0x0A9BBCE5, 0xC707B935, 0xB2255544, 0x4582D569, 0x33A2A585, 0x58B7E829, 0xC82DE99A, 0x49AC5629,
+0xC5C03746, 0xFEA6576D, 0x42C9FC52, 0x4D835972, 0x9449F47D, 0xD92B143B, 0x424F0F3D, 0xD89D6D7A,
+0x6935CBDF, 0x816301D4, 0x59D50B72, 0xC74D94F7, 0x0CD9A201, 0x51DAF684, 0xD51637DB, 0x2BC3F466,
+0x44F188E6, 0xD01884CA, 0xC81D429C, 0xC6F0D9E9, 0x621E8459, 0xF37EF038, 0xFBCD5B0E, 0x825778D7,
+0xC9D545D1, 0xCF35DEBB, 0x07E485BB, 0x588679AB, 0x009D6080, 0x2987FAAA, 0xE6E8DA7D, 0xF8EF4E97,
+0xDEBABADF, 0x2CAC3401, 0x9CB8681E, 0x69A868F0, 0x5E2B8C2E, 0xB881BC01, 0x37410076, 0xA9D609A6,
+0x3C85D075, 0xF0D0EDA9, 0x20780D3B, 0x8D3070E5, 0xB18CE22A, 0x7CB7BB8C, 0x5427FBB9, 0xCE9FC1E9,
+0xA64E10CB, 0xE398ABA6, 0x83956919, 0x23DA01E8, 0xEB167303, 0xFE6D2DC2, 0xBC83F462, 0xABFF6D46,
+0x4747E721, 0xE749FEB0, 0x36B60437, 0x44C5FAA6, 0x32E417E0, 0x979A870C, 0xC163316A, 0xDBD10EEF,
+0xEC8E0FF5, 0x7E999EC3, 0xF5F04286, 0xD620729E, 0x64C759F9, 0x8D2C25B2, 0xADA36296, 0x2FF640CF,
+0x7675325E, 0xE84AE8CD, 0xED3AA0F2, 0xBB5A31A4, 0x52863149, 0x0177510E, 0xFFBCF7FD, 0x8B94FFF0,
+0x5072D41B, 0xC336B3B6, 0xA6973787, 0x76267D72, 0x9CE21F85, 0xD18BBE6F, 0x59C8904E, 0x9FC45A84,
+0x8ACB8AFC, 0x4E76497A, 0x69770DCF, 0xF1ED19ED, 0x9A5BC086, 0x0B7B3DCC, 0x5C372217, 0x1679A5F2,
+0x434CB9DB, 0x0A8B156B, 0xF835E11A, 0x5EE3F81C, 0xE3189465, 0x3E4EA87C, 0x5FC9C658, 0x6B8AE4F4,
+0x635FAFCE, 0x83361DF1, 0xF9747FAB, 0xFB25D252, 0x7841EEB0, 0xD9CCF1D3, 0xE333BBF2, 0x5D3DF7A0,
+0xEC4B14BA, 0xD7C3EBE5, 0x6F36C6A2, 0xE8FF5FAD, 0x0CBF5736, 0xC5515924, 0x41608EFB, 0xDE79445D,
+0xF748EAD5, 0x817A0A21, 0xFCA48741, 0x89A63C7E, 0x1571D48D, 0x2EC1132E, 0x19C186C4, 0x904E0278,
+0x4575147A, 0x175DA61C, 0x336E4EDE, 0xEB9FC209, 0x7B20C766, 0x3C7BC595, 0x91F9BC89, 0x8780E249,
+0x761F1479, 0x0A05ACAD, 0x84EA558C, 0xDD475A75, 0xF5607D29, 0x00D3BC28, 0x0293EEB1, 0xF13D0311,
+0xEBDE9824, 0x7A9F2045, 0x9536198F, 0xD772AA5F, 0x6C6234D5, 0xB9ADEC8C, 0xEBB09884, 0xE514044B,
+0xC298F04B, 0x329C6808, 0xD98FCDEF, 0x5A9E67ED, 0xE48EFAD7, 0x95126F6F, 0xE0E2A379, 0x9ADE19EB,
+0xB8FB8223, 0x3BFF8AAF, 0x0E1E158A, 0x5645F0B4, 0x3ED4AEAA, 0xFFC8C1FF, 0x1911D52D, 0x9F8E8419,
+0xB0A5B712, 0x195E62F6, 0x49E7C659, 0x790786D2, 0x7DDF033B, 0xE816A93E, 0x1B0D9942, 0xC05B3817,
+0x3A1FD468, 0x33DA9E47, 0x0C4F0D0A, 0x999C31C3, 0x9D1A5966, 0x524B3B2C, 0x17468689, 0x5734651D,
+0x47E2E9F6, 0xF5960A19, 0x5CED600E, 0x2F5A7926, 0xD75C8408, 0xD8646A16, 0xC13562E6, 0xEB51C530,
+0xF4C5A523, 0xC05A23E2, 0x63F1BBEF, 0xA556364E, 0x90B59E5C, 0xE67A7E06, 0x5D43E7B0, 0x800847BC,
+0x5401A733, 0x7EE6BF2B, 0x528AFB42, 0xFBFCB24B, 0xFA8EC4E4, 0xB5791DBD, 0x55CD9D69, 0x0C2917FC,
+0x25DCB2AF, 0x861FFBE4, 0x94B76632, 0x49A27C83, 0xD6FF7A80, 0x2DEF6062, 0x470B194D, 0x03BB3B7A,
+0x9FFA44CA, 0x819C0345, 0x3C4A4EE7, 0x9ADCBBE0, 0xEF972B36, 0x62A6EAD7, 0xB3063186, 0xECB2E4EF,
+0xDF79F747, 0xD61FFFD8, 0x00F95A38, 0x5D1660F5, 0xA7B4E718, 0x130AD9A5, 0x4E98F1E2, 0x747B75A8,
+0xCC9622D3, 0x9593F72B, 0x499A4AC7, 0xCA7BB26F, 0xEC885CE8, 0xFACA56A8, 0xE620F9D1, 0xD7900E14,
+0x05697621, 0xAC0B92B3, 0x03823A6A, 0x1F2AAF91, 0xACC71DDE, 0x9B499226, 0x05661959, 0x349BC3B3,
+0xEB6A14DA, 0xDD4810BF, 0xDA929135, 0x23613918, 0x0BABAD63, 0xCAA9EE36, 0x63A7BA6A, 0x23507C07,
+0xCDCA7BC2, 0x2107DCD3, 0xAF44EBEE, 0x0B6A8DF1, 0xF0D744E5, 0xDBE1C860, 0x7A90CD2C, 0x896EA4E7,
+0xA3F49947, 0xA3CCC20C, 0x51301BA5, 0x7F2D88A6, 0xE53115C3, 0xDE90E0EF, 0xBE8AF110, 0xFA392DC9,
+0x5EFD28C6, 0x7BCB35D6, 0x98EC4E6F, 0xE1094918, 0xC82E0683, 0xBD697B88, 0x9EB1246A, 0xDF49F6E9,
+0x37813510, 0x1850611F, 0xB6739FE4, 0x95546B10, 0x507F3EA2, 0x81D11128, 0x950AC6F4, 0x543196A7,
+0x38BA75A8, 0x03D12FCA, 0xF7670D28, 0x0A9ACADA, 0xCF583FAC, 0x1607D765, 0xBA2BD646, 0xD3363C5E,
+0x3C61F9D7, 0x84582A08, 0x9D4ACF3B, 0x417F3D08, 0x656B92D0, 0x903CC4C9, 0xD4BE5EF8, 0xBF71164D,
+0x8F45B09E, 0xEBAF8CDD, 0x24AE4A29, 0x5C6DECFA, 0xE6670C84, 0x9632C6CE, 0xA277DC2A, 0x5F894BC9,
+0x23D28927, 0x904AC2DB, 0x50FA2FDA, 0x69EBA56C, 0xFA089FFB, 0x65B8D810, 0xB32BD091, 0x45BED5FE,
+0x0D646A40, 0x921B38B2, 0xD4F8CBEF, 0x6056C9CC, 0xBEB63BBC, 0x90AD0CF0, 0x8DD8B080, 0xDCBAAB2A,
+0xFF5359B2, 0x785F52AA, 0xE713E22D, 0xF3B4B724, 0x90295893, 0xAAB1A480, 0x415DA8CB, 0x6204AD02,
+0x795490B2, 0xAE563F30, 0x79110ED9, 0x309E848F, 0xBAAB6701, 0xE403420D, 0x8C6790AD, 0x43F2BD1B,
+0x52DFFB1E, 0x7D2B5A8A, 0xBDFB26DA, 0x56480ECF, 0x13640F9A, 0xE79C79E0, 0x748B1424, 0x2676D69F,
+0x6CF8F535, 0x383F1705, 0xBCE1CC02, 0x261C1C56, 0xD8398ED1, 0xAEE65A5D, 0x8354BF77, 0x05A9B1A0,
+0x053E6D81, 0x61E05092, 0xD3D8B06B, 0xD38B1B49, 0x33D190BF, 0x20C61F11, 0x0EBD8C4E, 0xE5901A94,
+0xD944FB52, 0x700B1B18, 0x190264AC, 0xAD607D47, 0x5E601C48, 0x6692CAF2, 0x2E741EB5, 0xEF530454,
+0xDD60CC22, 0x3C5DFDC4, 0x3A4A65DB, 0x6FD90F7B, 0xA339A5DE, 0x769F1854, 0x370334F7, 0xE7C81493,
+0x0DC1F336, 0x6D9079AD, 0x788D5194, 0x7BB0660C, 0x9243B9E3, 0xF41BD1AF, 0x285A66FB, 0x8FA862FD,
+0xBFF514D7, 0x04877275, 0x4B66A4DB, 0xC548E62F, 0x6AF68E2B, 0xA73D8289, 0x88ACDAE3, 0x58E84BD4,
+0x99040608, 0x181FAC22, 0x58526B51, 0x0C45100D, 0x3BEAF011, 0xBCE3E90C, 0xF0F0B706, 0x2D4969E3,
+0x378E8166, 0xE1B3E1F8, 0xDDEDBF2E, 0x592381A1, 0xACECCB89, 0x669DF75D, 0x5AAC4647, 0x6DE68E79,
+0x783C9381, 0xA88C8E4E, 0x7889A038, 0x684F96B4, 0x0C18914B, 0x1AF82527, 0xECD0E012, 0xDB1254DF,
+0x58E9C089, 0x56EC117E, 0xAA87CF2E, 0x4980785F, 0x9F61343E, 0x62226B76, 0xCDCC84EE, 0xEF8E7F95,
+0xC56A1A6F, 0x52C77D96, 0x1255C95F, 0xABB70D41, 0x5E05AD5B, 0x2CB902E5, 0x7B51B98C, 0x890726B5,
+0xA623FB24, 0x03970BE0, 0x32D53894, 0xEA010AAA, 0xB0B8EAE1, 0xEC20B577, 0x773D754F, 0xA4ECB7B6,
+0xFF5C2517, 0xED2F24CE, 0xCA3C4996, 0xD4965B43, 0x4783E0EB, 0x274BA3DA, 0xF0929C1A, 0xD849A81C,
+0x13BADB29, 0xB617BEA4, 0x341958AB, 0x8D95734B, 0xE851956C, 0x06D5B45C, 0x08C89830, 0x9043D27E,
+0xA4B4E901, 0xADD43259, 0x157C820F, 0xAE44945F, 0x8DEAAB4C, 0x0881C1C2, 0xCD9114C3, 0x2DCCA87A,
+0x71A87B61, 0x7079C607, 0xCB1E560C, 0x3D95C5F5, 0x6ACEBCD9, 0xA03B1A45, 0x8965442A, 0xA31E45CC,
+0xE06A212D, 0x54B9B196, 0xC8DF534C, 0x61FC5674, 0xEA32D82E, 0x98CEF6B0, 0x6215191F, 0x0C70D3BA,
+0xD00684F5, 0x5FF94593, 0x2524F98B, 0x4B08CDDE, 0x715C288C, 0xD9A192C4, 0x0A5E7FEF, 0xCBB05ED9,
+0xDD001329, 0xCFD9D08B, 0x994EC964, 0x83651469, 0x7DA595EC, 0x4B81C173, 0x6A0AF7AE, 0x3FDA9CEF,
+0xCDB3D87F, 0x28D1F57E, 0x3ACCE522, 0xA3B1E923, 0xBA05B477, 0xA60A91D4, 0xDD6F2B93, 0xF0F4ED8B,
+0x260DE9BD, 0x596322F8, 0xE5820FE2, 0x439EBA54, 0xAE917668, 0xBC7D14D5, 0x814E0E4F, 0x3548E19F,
+0x86CACBD6, 0x16A78396, 0xF3145D03, 0x43420464, 0x483E62D5, 0x83011E60, 0x6BE1ABB4, 0xE2F676A1,
+0xD9C0F506, 0x8C95F25A, 0x14E71549, 0x697AED91, 0x2F02A30E, 0x55F3882B, 0x6DC0687F, 0x041EDA89,
+0x7021E57A, 0xEA9B32B0, 0x0BB5D762, 0x1BED93BB, 0x3D14412C, 0x12EB8479, 0xE47F7FE9, 0x284268CD,
+0x8F8675A5, 0xE4181BB4, 0x02F49980, 0xB4F68F77, 0x7D91850B, 0x70E24D5A, 0x3C753402, 0xE259459B,
+0x7F728213, 0x07A63FFA, 0xD37650B5, 0xE22FF4F9, 0x669E6354, 0x2728EDB6, 0x976FF30D, 0x0E85168C,
+0xACAD9A44, 0x9B26CC13, 0x90E64A02, 0x8DC2126A, 0x68742AAC, 0x541687EE, 0x320B5DC1, 0xB09B0A7E,
+0x9A9CBD6E, 0x838571F8, 0x6EBC543A, 0x94AB9FAB, 0x14FE81AD, 0x41CF9D57, 0x39E9F9BE, 0x15D92F28,
+0x49037626, 0x7344B41C, 0x993C4781, 0x1C79DBE1, 0x3941A679, 0xE76FB9D8, 0x4ADEAAD2, 0xFAC0300B,
+0x48F22B72, 0xE9542A92, 0xEC5317C0, 0x6BC1686D, 0x4C963950, 0x1D2EC55B, 0x30ACB333, 0x76EAF383,
+0x750B89F7, 0xE1505EA4, 0x78B3C662, 0xB0F979F7, 0x5DF6D22C, 0xF2A38647, 0xCAD9B042, 0x2C01C137,
+0xC47F8C04, 0x6F3E1455, 0xDF3D4F5E, 0xB925A331, 0xF893D730, 0x3A4AE50C, 0x1C229425, 0x85ECCC6B,
+0x64047DB2, 0x72C43C4D, 0x57F68EE7, 0xB51B7890, 0xC1545E5D, 0xE7B01A27, 0x4FD03087, 0xB84525B6,
+0x71C49B03, 0xE0460A47, 0x2AF85AC4, 0x408D9311, 0x037BB9D2, 0x4AF08A79, 0xEDDB5217, 0x0A2EA776,
+0xBF659A69, 0xCF9BD16C, 0xB5A1C389, 0x0624D955, 0xD306C8A5, 0xFE973FD2, 0x0178088D, 0xB59CE6E1,
+0x3F2885A3, 0x6610657C, 0xDA98BD41, 0xF6084E02, 0xF8927C2D, 0x7C5CBB0E, 0x964FE9FE, 0x398D4AB9,
+0x8B342BFF, 0x3A3A7F97, 0xBE5FE865, 0xF0A685FF, 0xE5677141, 0xB0E5558F, 0x59E76EDA, 0x65E3CA02,
+0x45255501, 0x30A2BBE7, 0x4E033C92, 0x02411FE4, 0x2DFF2D9B, 0x9B9B145A, 0x3C832082, 0xEC39340A,
+0x0D7348D3, 0x19248B00, 0x14A9B623, 0xD7B4D4C0, 0x4023559F, 0xCFEE8011, 0x8F4BBB28, 0xF6EE1190,
+0x66E9D4BB, 0x602499A3, 0x1789DFAE, 0x7F760C9C, 0x3B8922A8, 0x67AD858D, 0x018D81B3, 0x28BFF42A,
+0x8E0AB818, 0x030A8CB6, 0x8A33C303, 0xBDFD8F03, 0xB800F1BD, 0xD37E7270, 0x9E0E63DE, 0xC6ABBF49,
+0xCFE157A8, 0x382855C7, 0xDCC596ED, 0x5909DD8D, 0x63B2A0D5, 0x74FC8724, 0x853474C0, 0x3BB982DA,
+0xC00BC81D, 0xEAFC15F9, 0x60369AF2, 0x2073D112, 0x17EFA5D0, 0x9B31241C, 0x7A8AC37C, 0xBC8564F2,
+0x9964181A, 0xB77AA148, 0xBDCB2507, 0xA70E95F4, 0x8A3FE5E2, 0xB77F0BD3, 0xC5FCC867, 0xD1547372,
+0xDD7C7CBB, 0x06B8FA0F, 0x78B9AF43, 0x05FF944B, 0x463BDAD1, 0xE2407175, 0x57497341, 0xDEAFA203,
+0xFEA60111, 0x33EC0BC5, 0xCDBCB3A3, 0x2565B08A, 0x8C99C3D7, 0xB4E24E7E, 0x666C691F, 0x4AFF5ECA,
+0x3D3BCCDB, 0x9F7C3D66, 0xF9D8D830, 0x4967B1EE, 0xED6DC1A8, 0xEED304BD, 0xF40E4C9B, 0xD546309B,
+0xAB5902A4, 0xAA407AA8, 0xEFA22E28, 0x06C6E956, 0x1E398496, 0x2FDB10D1, 0x4708B2D8, 0xE456C5B1,
+0xF428F919, 0xF7E1DA21, 0x17BA2828, 0xD0EC9AA3, 0x70577C46, 0xA2489C4C, 0x5D3EB8D1, 0xA8BE50E5,
+0xC8904E66, 0xDA6BE86F, 0xBC5C068C, 0x5FB2C629, 0xB3570B33, 0x2D2E1832, 0xCC621D88, 0xD408E131,
+0xB381BEA9, 0xFA6BDF97, 0x967346ED, 0x2EA89A0C, 0xA07D4137, 0xB7365CA9, 0x894368FD, 0x8B43EE4B,
+0x9E1F2168, 0x12094C12, 0xD96402D7, 0xFE41582C, 0xDA17D0C6, 0xD6771BE7, 0x7EACFADE, 0x9AE7B320,
+0xDF119594, 0xE436E37E, 0xE364B1F3, 0xA046BAC3, 0x855C512A, 0x06574A7C, 0xD3800AC0, 0xA44F1429,
+0xBADC8593, 0x6BCE5CAE, 0xD0B879ED, 0x5DB8A1F4, 0x335BDBC1, 0x1C2FD4DC, 0xAA07AE25, 0x2300D907,
+0xB53CE336, 0x8F4F1873, 0xF0871838, 0x71E120D1, 0xCF0B6422, 0xD0F5B4D8, 0x0B30633B, 0xD98A299F,
+0x8B1B5D6F, 0xB144F564, 0x6E914CFE, 0xCC5D0D25, 0xFF873D0A, 0x47F6C553, 0xD98A867E, 0x686AB403,
+0x52736297, 0x92ACB9C7, 0xD100968C, 0xF1F8FBEA, 0x9023FE44, 0xE3846605, 0x3B87FEEE, 0xC8C31C5F,
+0xAFF25352, 0x3E65EA9B, 0xBF7BCC71, 0x767A274B, 0xDA4D03CD, 0x57A9B9FF, 0xBB90F503, 0xD5183810,
+0x95ADAC37, 0x0E772B9F, 0x681DDD0A, 0x59C9C23F, 0xB72EE562, 0x4DF5A127, 0x41300AA5, 0x09480ACB,
+0xC849DE66, 0x268E4875, 0xA224C701, 0x26B0DC7B, 0xE51C5640, 0x2B39E9E2, 0x1673D497, 0x2948DF53,
+0x3647847D, 0x1A724EC5, 0x015A2A00, 0x8BD7A2AD, 0x80ECF366, 0xC5EEFAAB, 0xD2EC46B7, 0x77782D8F,
+0x5157F6C4, 0x7B4F721F, 0x841A8BCE, 0x349E3E53, 0x4C72D21B, 0x44D4F4DD, 0xEDC1A84B, 0x0255BD69,
+0x758BDC27, 0x0F6B9ADE, 0x7B99C814, 0x26EFEA8C, 0x857D2736, 0x2173A247, 0xD61FD091, 0x90A123CD,
+0x3EE78D65, 0x87CF753B, 0xE8FD8661, 0x9EC9042F, 0x9FA10778, 0x6A4D70C1, 0x9B415FBB, 0xFBD2B368,
+0x4404DCA8, 0xD1DEDF03, 0x4B38961B, 0xD1D01BEE, 0x1511EDDD, 0x8FDA0625, 0x1B792507, 0x3D1C10B5,
+0x55272406, 0x09E0CFC8, 0x2B2FCB05, 0xDD14ACE1, 0xA3580F18, 0xB1AE942E, 0x7BFC4395, 0x972C241E,
+0xE97713EE, 0xC126AD87, 0x96A2C228, 0x67B10D2C, 0x0BC553DE, 0x8A1B51E8, 0xB6ED5286, 0xDD12462E,
+0x6F212605, 0x2678B333, 0x698E2048, 0x2997ABC1, 0x9BF980D0, 0x7530D466, 0x44B1B551, 0x76CAA914,
+0x4C7A323A, 0x1B2D3FCD, 0x481041AD, 0x0FC93ABE, 0x96AC795E, 0xE24D421A, 0xC0D3CF04, 0x9834ED76,
+0xD7224290, 0x956FA80D, 0x875A2658, 0x7A208E6A, 0x002AB375, 0xD48E49A7, 0x03F3AFBB, 0xB923F4F2,
+0xEE49327D, 0x6990F876, 0x29542B10, 0x815BB4E4, 0xA32D92F1, 0x897067BC, 0x0936B2E9, 0x9565B575,
+0x0E1399B5, 0xD6095C49, 0xD1E5CDAF, 0xBA59CE3E, 0xAB7E0095, 0x66AFA056, 0xA16BE91E, 0xC194FEE8,
+0x13D38B56, 0xB73E065F, 0x34B6A87D, 0xAAB34EDB, 0x8DFA61A5, 0x0080CF5C, 0x01010000, 0x1B0C009E,
+0x72D17F12, 0x18D2A354, 0x971B3C8A, 0x55800510, 0x0E2D1F3B, 0x9F3B9967, 0x675F205D, 0xCA12642D,
+0x9F0A79DE, 0x40D7BE5E, 0x7AF42D5A, 0x713E6968, 0xFC025E4B, 0xFD4CA60E, 0xB7AD9D2F, 0x12BEC012,
+0xDA309C2A, 0x28118E81, 0x0AD5785B, 0xFB5E596A, 0xF1DD3467, 0x6F6A0977, 0x0FB40D7E, 0x8C908B69,
+0x48B8F0A8, 0xAD1CEE79, 0xE83EA04F, 0xF7B6C159, 0x0AAFF217, 0x0DA75816, 0xB3F460B8, 0x80E24F45,
+0x0859F125, 0x80BFCAF6, 0x7FF41293, 0xA9E7730D, 0x59ECA205, 0x8F48F914, 0xCD0856DD, 0xD277CE24,
+0xDDFF3C06, 0x8BF229FD, 0x05ABE2B5, 0x86DC9803, 0x19C82712, 0x953ADA8C, 0x2CD4D0A9, 0x36D23586,
+0x4125A815, 0x45A90587, 0x341837EA, 0x78C9DC9D, 0x2F4EFA8D, 0x44537A37, 0xACBA26F5, 0x5BEEA906,
+0x29720DF6, 0xC257BAC8, 0xAA9C6BFF, 0x8DE68FAA, 0xE815FEFD, 0xF18DBF0C, 0xD8443216, 0x12DF1AF1,
+0x1D0B21CF, 0xE3DE76DD, 0x0A2626D0, 0xDC991E19, 0xA2736772, 0x9B540A1C, 0x048BE6EC, 0xD2E091D5,
+0x6458E60B, 0x9974A469, 0x4714BF92, 0x5DE96C42, 0x20279572, 0xF2F136A2, 0x15B948C4, 0x570336D0,
+0x127EBA91, 0x7B69F723, 0x0889AAE3, 0x6D421489, 0x54ED2BD7, 0x831B1779, 0xBB73619A, 0x7CA52CB2,
+0x6E0E6C8C, 0x455BF611, 0x2DF52A1B, 0x1CDDBE53, 0x42808A1A, 0xCD53B1B4, 0x75C929EE, 0x80AEA986,
+0x94AFA4A0, 0x30E1EA84, 0x72E277E9, 0xE8E80DCC, 0x2AE91DBA, 0x7FAFC722, 0xAAD7FDF5, 0xD6FF82A1,
+0x5AD1F3AA, 0x4697D0DE, 0x7AE77C83, 0xCC3D0EE5, 0x3837D009, 0x7F73FA94, 0x66EAC01A, 0xD9A31392,
+0xC4604E05, 0xC1EAD137, 0x07D72450, 0x0E7D9262, 0x5F3FF5D5, 0xC9CFEE30, 0xFA5531BD, 0x4A7E3345,
+0xE9DA3A29, 0xE1427546, 0x6FBFF1F4, 0x6858FB8D, 0xC95DCA93, 0xF8D45804, 0x9615A5E2, 0x75549430,
+0x3F995E41, 0xA8CB5DD6, 0xB62D6E83, 0x3865BF34, 0x1AFF50A0, 0x8D40119B, 0xCBE57336, 0x99EE738C,
+0x1DF87D25, 0x55919413, 0x05B77849, 0x61326E4B, 0x5885BE4E, 0xE6BF507F, 0x36CCCDAB, 0x8343C7AA,
+0x859A3FB4, 0xC052B7E6, 0x6C899A2E, 0xE8DA50C9, 0xEFE9F588, 0x7BDF0D4D, 0x39A75DBB, 0xD00E7378,
+0x16982E1A, 0x5418C634, 0x834F61AF, 0x6ED067A6, 0x6B4942FF, 0xF1CA8586, 0xCFDF81CB, 0x144B0FFB,
+0xC981AB34, 0x38D7E9BD, 0xF296163B, 0x74CDDD51, 0xF7C8C9FC, 0x75C1EE53, 0xB13C1BC9, 0x312569E5,
+0xB8C4A500, 0xBA783383, 0xF27C32EE, 0x1B207599, 0x1847BC7E, 0x6B9926CB, 0x74684230, 0x7DF7CF55,
+0x59D81F48, 0x0BA916FA, 0x9109C58F, 0x7CAC66D9, 0x77A09858, 0x99D45652, 0x629C33F7, 0xE9C1675E,
+0xFB787CF7, 0x0BA0148F, 0x802E5287, 0x5C67B3D7, 0x5DD98CDB, 0xAB698A03, 0x2718E5E6, 0x64FF18F7,
+0xEE688595, 0x4CA09D91, 0xE6940222, 0x921943A1, 0xCEE75E41, 0x95C1667E, 0x625267B0, 0x6200E17B,
+0xF25E8ED7, 0xB8B8E0FC, 0x4E1A78CC, 0xBA63FD2A, 0x0496C5DC, 0xDF3ADF07, 0x3EC57EF1, 0x4DE0F885,
+0x7A141FB8, 0x2315C156, 0x8483168A, 0x3152C563, 0x019F3F7E, 0x0393C4FF, 0xA50CC1DD, 0x1AA4A006,
+0x00449935, 0xB8497D3E, 0x8B392403, 0xABA2ED8E, 0x3D26CFAB, 0x37B71BC8, 0x39D17C49, 0x3DFE5E92,
+0x2A3DE67B, 0x519BF33F, 0x563FFA94, 0x90F3D532, 0x5DFB5AFC, 0xC9B17337, 0xE6ABAAC4, 0x8DE86D76,
+0xFF8801CC, 0xA4D54260, 0x758185B7, 0x21912280, 0x57011FBF, 0x723BEED8, 0x04E49976, 0x47C8C4D3,
+0xF39DAA53, 0xF3AA4800, 0x7F86F3FC, 0x7211FA00, 0x9C12BF7C, 0x59AB934D, 0x7438C3DC, 0x93A8B363,
+0x92383EB8, 0x02AA9DA9, 0x767D418B, 0x92BA1FA5, 0x262208D6, 0xE98F5685, 0x4F8A6B8A, 0xDD048016,
+0xC92F056C, 0x13C3AC19, 0x078767FE, 0x41B8C245, 0x7E70A17C, 0xE1233840, 0x4786C448, 0x482DF488,
+0xAAEEEC37, 0x70B6B487, 0x41F52763, 0x8BD51899, 0x50EC33C4, 0x45A50540, 0xBF963AB5, 0x6E549E16,
+0x49AF925C, 0xDDD564FD, 0x5C203A36, 0x82D0CA07, 0x4EAE9C71, 0xC1F823D5, 0x5715C976, 0x82F98C41,
+0x06A3BF13, 0xCEEBCABD, 0x568CB88E, 0xA878EAB3, 0xB732E043, 0xFC7A6A36, 0x490F9367, 0x17AB256A,
+0x790CDEB6, 0xC5A645D2, 0x8E46C53B, 0x7594FCE2, 0x80910516, 0x52FA3E45, 0x6CEB8BEE, 0x60D9525B,
+0x0722C6F1, 0xA88ECBA1, 0xBFFD6D86, 0x24A759EE, 0xFB9B063E, 0xC2AD8169, 0x403B057E, 0x6109DBE6,
+0xFB1E0E9E, 0xF9BD4FA0, 0x450C04BA, 0x8192643F, 0x0EB0300A, 0x46FAF491, 0xA559049F, 0xF4B78235,
+0x9588A729, 0xD07CE0FF, 0xAA51D3C8, 0xC2A9DBC0, 0x73C6D2DF, 0xF6B3D33C, 0xFE57A2C9, 0xD38049A1,
+0x2A341900, 0xABF2E50F, 0xA44BA1A8, 0xA0127FC5, 0xA9EDE89E, 0xCBC34C7E, 0x5EAB6623, 0x2D12C726,
+0x81A1762B, 0xCBFB5743, 0x4AE946F7, 0xDFBA272F, 0x30A63F08, 0xAADB90D5, 0xD6D64518, 0xAC7E0C07,
+0xFECC97A3, 0x9887FEA1, 0x7C70702F, 0x679297C5, 0xCD9BF016, 0x148ECE70, 0x8D72BE76, 0x01011705,
+0xA2D263D9, 0x02B6B5DC, 0x0A0AB711, 0x4B87E0A2, 0x6BF876E8, 0xB4C4D0F8, 0x789568C4, 0x890C1B1D,
+0xA5CACE3D, 0x52142DDF, 0xC81FC57F, 0xBCC51655, 0x32215D51, 0xA9F6B206, 0x838681FC, 0x42E76C54,
+0x61A26956, 0x52AC9562, 0x77C3F00E, 0x89D3F412, 0x42580A3E, 0xCC77F3BE, 0xA25F4275, 0x5F8B1F10,
+0x93C03172, 0x64EF647E, 0x6C544B0E, 0xD5C54CB7, 0x032EF2BB, 0x1C2C2082, 0x6570799A, 0xF7CEC6F6,
+0xD51BD9F6, 0xC88CFE88, 0xAA34BD50, 0x53927571, 0xE042F14C, 0x38ECD4E2, 0x9E5BE20A, 0xF74E509F,
+0xD0F7C8D4, 0xCDF97830, 0x34122FEF, 0x899B3C27, 0x3F4204C5, 0x5A620940, 0x5141F0AC, 0x1AF24515,
+0x728B89BC, 0xC3D5EF5D, 0x38EBBADC, 0x8068D1EF, 0xFE7FE020, 0x6D5D6289, 0x25A80149, 0xE88C2E07,
+0x719E12DE, 0x0AC3A994, 0xA26D2AC3, 0xDFEF1E63, 0x10698097, 0xD460C340, 0x858CB609, 0xD0BBB043,
+0x22173F02, 0xB5668256, 0x21F01599, 0x8E95D254, 0x9778709D, 0x1D5BBB00, 0xC36351D1, 0x0F92CF95,
+0x0B22C9BF, 0x4F60E756, 0xE5D904DD, 0xD5B74D67, 0x4ECA473F, 0x672A776F, 0x2381BD24, 0x3A252168,
+0xC8A2BBAD, 0x6B26B37B, 0x535A1BD8, 0x10E9FE4E, 0x77383AD1, 0x5A8AF4A7, 0x6111485B, 0xFC336988,
+0x25F5F7B4, 0x59ADAD5A, 0x3A1F7580, 0x231E59E3, 0x0BC46334, 0x4861F5DD, 0x36AEE88D, 0x46907BF7,
+0x2C76CDF0, 0x26C8D576, 0x6F97122B, 0x8DADC3FD, 0xB2F20452, 0x71993189, 0x3C0C0AB2, 0x95B4865E,
+0xDB892427, 0x6E1A732A, 0xDB8C3416, 0x56C4BDDF, 0x63AAB939, 0xA10AE742, 0x38A9F977, 0x6ED59A73,
+0x541942E4, 0xDFE53C1B, 0xC0B27B3D, 0xBEEE758A, 0xF6081B8B, 0xA79DEE91, 0x4F1120B4, 0xEA03DF11,
+0x876E9468, 0xDFE4F1C3, 0x1A304655, 0x4B55E22D, 0xCA284A65, 0xC1116A99, 0xCB6F2211, 0x6638554F,
+0x9FBE9865, 0x80A2D2AD, 0xE73AF8EB, 0x316C04AF, 0x753E5EA0, 0x136E4C04, 0xAE0EB407, 0xC6BFA61A,
+0xA97DFA23, 0x2CD68CFC, 0xE47033F1, 0xDC5CF890, 0x68B63D56, 0xC2E87343, 0xA2229122, 0x09BAA43A,
+0x6CCF5B74, 0xFAF8FD8D, 0xDB8DD71C, 0x8DA4D297, 0xE732B34B, 0xED7F5384, 0x21DA905E, 0x03250F06,
+0xA52E5766, 0xDB99E2C4, 0x90166023, 0x2674F635, 0xEFDB92A0, 0xB31EEF78, 0x57CFB96F, 0xB9E73901,
+0x0F5EF1B4, 0x82C4EBD0, 0x7353BAC1, 0xDCD2D297, 0x3BF0ABF9, 0xAB3604AF, 0x99F7E0E1, 0x35972B5E,
+0x8BEFD2DE, 0x79F638A1, 0xC104100C, 0xF8608287, 0x69AEF066, 0x1109B66E, 0x3294D81D, 0xB6117C83,
+0xCA77F3E8, 0x62AFE540, 0x06CABFAF, 0x724568CA, 0x0C60D621, 0x7977AD9D, 0xC00F54DF, 0x60E41D46,
+0x8C702984, 0xDDB23355, 0x13B962D4, 0x85A2FC75, 0x237F411D, 0xA51CA211, 0xD819023B, 0x3F28B041,
+0xF5EEDF93, 0xFDBD548D, 0x522561B2, 0x3940F660, 0x125B2E5C, 0x12FE5930, 0xEF622D56, 0xECA8F58B,
+0x1F9DF73B, 0xDA586258, 0x3912FAEE, 0x7283AB58, 0xE1102824, 0xF6F3A8B8, 0x026ACC88, 0x317AEC79,
+0xC630223E, 0xB410FEF6, 0xF6C0C239, 0x95AF50D8, 0x98E2B146, 0xFB6ACD8F, 0x1612463F, 0x0000CE11,
+0x9E010100, 0x121D0C00, 0x0AE9FE7F, 0xB41C254F, 0x3F655299, 0x3EBC378E, 0x5747F52C, 0x4BB6CB9A,
+0x92799E54, 0x3C522B66, 0xCE43E257, 0xF1B80021, 0x1EE5E167, 0x20AEC15E, 0xB6ADDDD5, 0x0D36C84E,
+0x134E6562, 0x39EBD1E6, 0x610B6AD3, 0x24528A28, 0xA08267C6, 0x278E08D5, 0x70AB0CC0, 0x47121549,
+0x2AF83189, 0x9A63EC9B, 0xD7086CDD, 0xD61E124C, 0xE3521BDE, 0x7657B01E, 0xA6302419, 0xC01AA911,
+0xA3655298, 0x3261D6E4, 0x19659B26, 0x6290F7DA, 0x67B4E283, 0x81ED4DE6, 0x87BE23BC, 0x8A8F2F93,
+0xC859E5D3, 0x64CE790D, 0x31DA5A36, 0x78474B19, 0x7960419E, 0x36FCABD7, 0x7B32461E, 0x3ACF1319,
+0x0FB7F511, 0xA9E0C2FD, 0x9A425766, 0xFCEE3D54, 0x7386F730, 0x764A0087, 0x619F1042, 0xAD91EC1C,
+0x06460F77, 0x942BAD6F, 0xC5CB7525, 0xC09276C8, 0xF9CA2103, 0xECFCC51C, 0x2212F5E0, 0xE8E78103,
+0xE471E51F, 0xD38C549A, 0x89FF2640, 0xE9D78528, 0x8DB8637D, 0x72CF5D45, 0xB0B7DEAC, 0xB9AE9ED0,
+0x08350789, 0xCB9D2234, 0xD5A66FA5, 0x3729A532, 0x279A25D0, 0xEB919A6D, 0xD1421AD6, 0xC6FA576C,
+0x4D361A33, 0xBE09785B, 0x7383BDAD, 0xBAE586AA, 0xF0FF473F, 0xCAF60E2C, 0x1E5400D8, 0xEB806EF0,
+0xECF92F71, 0xFEF7829D, 0x7A73DDF8, 0x3EAFB7C9, 0x65109993, 0xEDBB0FE6, 0x695D2E6E, 0x77112230,
+0xCFAB445E, 0x718AE3EE, 0xA92A4D43, 0x78C77937, 0x81E13BB5, 0xAEF49506, 0x7C262BB2, 0xB45F99A2,
+0xFFAF2D0B, 0x4F94D45F, 0xE0E0CC73, 0x61114738, 0x36A8030B, 0x3E8D447F, 0x0E648B7B, 0x376491D9,
+0x3D490460, 0x0BEA0A4B, 0x9B53FBB1, 0xD290B951, 0x9983DE72, 0x8B577AFB, 0x2A28DB51, 0x5C134DB6,
+0x61A1ACBB, 0x9CE7E7DD, 0xCE5FF9C4, 0x28C8642F, 0xE2B46597, 0xDAB549AD, 0x2EEDFC2E, 0xF018E9B1,
+0x71647113, 0xF0B6ECE4, 0xEC6290F3, 0x73DFD789, 0x9B21E9D2, 0x15091AF9, 0x0F7CA5CC, 0xF237335C,
+0x40C52637, 0x7268D8EE, 0xD6EED7B5, 0x3DE92740, 0x22F4ED7C, 0x3473099A, 0xC9DC2AFF, 0x19BABB3E,
+0xA80C493F, 0x25710667, 0x06A7D314, 0xB9E97F9B, 0x9CE8E6F3, 0xEBBA863C, 0x74A187E9, 0xF2F9D27F,
+0x89D68DC7, 0x1D45B60F, 0x5D478890, 0x3FEB4F17, 0x46FAFDFB, 0xA188C301, 0xC72DA25B, 0x3C234653,
+0x9E8F85A3, 0x0EB6F9BF, 0x404B0E8A, 0x34DB425E, 0x5F81A56B, 0x22AA5F88, 0x5C8AB04F, 0xBF7BD11A,
+0xB50C33F9, 0x90BDCEB7, 0x3873B6BE, 0x0D401BDE, 0xE1380029, 0x6DF608AB, 0xF3D3B85E, 0x44EF8FBB,
+0x702B02F9, 0x10FEF22F, 0xA9D09BC7, 0xEBB1B8DA, 0x1631A455, 0xF328D154, 0x1CF2E0DC, 0x3A0FF320,
+0xA254779A, 0x445BD470, 0x9FFD6AD0, 0x1297049E, 0x750BC46B, 0x85CBFDB3, 0x3095482F, 0x22383EAE,
+0xE2C93AC3, 0xF6B98D2F, 0xDA3E1078, 0xF6E3D715, 0x3392B5D7, 0xCAA896D4, 0xB9E3EF07, 0x9B86B75A,
+0xC1898F22, 0x4AFDD3C5, 0x4B5DA0E5, 0xDA3012B4, 0xD024B19D, 0x19235747, 0x545188EA, 0x02BEA300,
+0xE7919763, 0xD96D61D6, 0xC5F8A531, 0x14A39D6A, 0x92CEC974, 0x57ADE14E, 0xF6EF82CC, 0xD241E101,
+0x3C96AB82, 0xE56B62DC, 0xB5E9B533, 0x6055EDB0, 0x72CE4A94, 0xEAED5129, 0x354E79B0, 0xB291E2DF,
+0x3E9ED3D3, 0x6AB315AA, 0x59F598B2, 0x0D8BEC31, 0xF7DD4428, 0x03DEF0CE, 0xB7B807CD, 0x666F6670,
+0x9DD8A6EE, 0x5F97BF00, 0xFB6F2861, 0x80D356EC, 0x6454D5F0, 0x21C375AF, 0x5ABBE61D, 0xF463770C,
+0x19A7A0DE, 0x100158C3, 0x48BDDB3A, 0xFA0B5ED8, 0xCF17FEE5, 0x7F70D88D, 0xF1EC2796, 0xBAA978C6,
+0xC9FD20F1, 0xA952EAB7, 0x9072DA2F, 0xD72A0C85, 0xB1AA5F07, 0x87C43D3D, 0x8A6752ED, 0x49D4B48D,
+0xFF808710, 0x2631AA65, 0xB7B9D477, 0x67D64515, 0x5BA89C0F, 0x41F3B6D5, 0x098FF1F6, 0x5407BA51,
+0x8F5FBC8F, 0x030D8A81, 0x85A1276C, 0x108BF9F7, 0x1F905BC5, 0x99D5578C, 0x53E6695A, 0x66E330E4,
+0x00DEB4E0, 0x0023C8BA, 0x24858685, 0x7F48568F, 0x6906A45E, 0xE2EA885D, 0x0DA40866, 0xC8B99A97,
+0x92B60DF2, 0x876E90A3, 0xCCE06394, 0x7FFEFEAE, 0x98B9CE2A, 0xD1FAAAEE, 0x3AADBEF4, 0x57C5FB7A,
+0x93F0B58A, 0x3CDE015A, 0x2FA7EFF3, 0x39BCC605, 0xDB81E807, 0xA8C0CB2F, 0x917637A0, 0x24CA1419,
+0xA4340870, 0x33E53351, 0x41F49C23, 0x0577C95F, 0xAEF90825, 0xB0DBEE25, 0xB27D828F, 0xEFFCFD7D,
+0xEFF627A4, 0xA5931E62, 0x21DE832E, 0x8EAC723E, 0x2E77EE13, 0x4F198BCE, 0xFD98ABF2, 0x2994ADE1,
+0xFF7C29D3, 0x83403FC6, 0xF7587B55, 0x476E8901, 0x21A3B846, 0xA1BF8B46, 0x47C2546C, 0x4C23BC94,
+0x731C290A, 0x13EC54A1, 0xAAF3C2BD, 0x2DEF3698, 0x55BEBDDE, 0xED40CB3F, 0xAB5C3CC2, 0x650B7FC5,
+0x6568E83C, 0x7BCFD91D, 0x101AB863, 0x60587103, 0x7954DD5D, 0x63E4DCC9, 0x6DB67822, 0x96A2D8AE,
+0x2D5A8842, 0xDF1557C4, 0xE2882CF4, 0x3260DCAF, 0xDCCF5FEF, 0xDE285250, 0x93A461AB, 0x294BD639,
+0x9D32BA58, 0x34D41898, 0x9EA5CDDB, 0xE0BA46E9, 0x997F1CEE, 0x6F38B9FA, 0xD4630C1B, 0x3CBD88AE,
+0x17DBD3B9, 0x8C47FC1D, 0x79EA8890, 0x4CCF46FE, 0xA9070DCE, 0xB6B1007C, 0xFAE89D3A, 0x46FE872F,
+0x54A4BA47, 0x3E7003F2, 0x7CA97DD0, 0xCDD412E1, 0x97F195DC, 0x6E78ED0E, 0x0C70E148, 0x5FD8F5AD,
+0x6635752B, 0x73F3EF40, 0xF2503ABD, 0x39372751, 0x3D51EEA8, 0xC1929023, 0xCF25B4EE, 0xB7D4AC4A,
+0x8B31F24C, 0x65DFC0BA, 0x79234A40, 0x8B4C7DA9, 0x4CF98FE8, 0x14D7BAB5, 0x42FA6139, 0x6927B342,
+0x741FDF4F, 0xC8EC3491, 0xA57CC9D5, 0x8D678D11, 0x095B1F83, 0x1F109EBC, 0x341899AB, 0xC5993D5B,
+0x2DCDAF84, 0x71FCF434, 0x6D627CD7, 0x7706E839, 0xF7B0C891, 0x3684552B, 0xE3BEA4D6, 0xF0E89BD9,
+0x9168D1B8, 0xE81CC8AF, 0xF9E78CC1, 0x7C6B7D57, 0x0567B83E, 0x921AB50C, 0x80E17E9F, 0x4274277A,
+0xEDF0A588, 0x010AE855, 0x4C91A701, 0x3D549C8A, 0x7C4F15E3, 0x680A7B2E, 0x18B32177, 0x560732BC,
+0x575F4C17, 0x96CD6058, 0x203750B5, 0xA9473568, 0x960F397E, 0xA839BF85, 0x8F371865, 0xAA9A3E35,
+0x2E276456, 0xAC82BEDD, 0xF2463EC8, 0xA215AADF, 0x0BFC48A5, 0xA62DC2E8, 0xC8162619, 0xB122DC2A,
+0x3AA9C218, 0xE6B8965F, 0x72039B2A, 0x86296441, 0xE166E70F, 0xD5BDF30E, 0xF95FA958, 0x667B36FF,
+0x0004426C, 0x215DC90A, 0x10BD6350, 0x460C818F, 0x0E36FF6E, 0xAE59953D, 0xA8C24766, 0x3955B17A,
+0xC92FB2A8, 0x34896778, 0xB8E5A6AC, 0xDE01E2BA, 0x66419746, 0xC49134B1, 0x588C8958, 0x5CB05158,
+0x5CB1E72C, 0x17C90ED2, 0x84AC5C5B, 0xB7A9F177, 0x6C8C7459, 0xAD61021A, 0x514F9454, 0xE17DF9E1,
+0x98432919, 0x316C3735, 0xD10C05AD, 0xB9142CD3, 0x81418C0A, 0x458E41F6, 0x9720CED7, 0x72FE9096,
+0xACE18121, 0xF65E44FB, 0x07E7B414, 0x32EA49AF, 0x50AFBBD3, 0x00000080, 0x009A2101, 0xE13F240C,
+0x0A8C36A6, 0xC51B0FA1, 0x27C5B5C5, 0xB27D4912, 0x21874702, 0x539A94E9, 0x0BC14DE6, 0x33223287,
+0x31FAA16B, 0x68034F47, 0x3F5CB540, 0xAD4F0CFC, 0x6FFD9CF8, 0x34B1A9D1, 0xB4D3504C, 0xE6483851,
+0x126D846B, 0x82E42DA7, 0x40119196, 0x6A96771E, 0xEEFB40A6, 0x5C123D51, 0x8B0B3E13, 0x2B492066,
+0xCCB000BF, 0x3F65B6CB, 0xF06BBF9B, 0x6786E0FE, 0x4E92C06A, 0x9F49285D, 0xB5B09954, 0xE9EE00D4,
+0x7D0D57F5, 0x018605DA, 0xEDE0A245, 0xB4171444, 0xC3854D69, 0x5B433333, 0x26DAFAEF, 0x54AB7357,
+0x12314854, 0x16FB121E, 0x55929D02, 0xB4F8E020, 0x07AE5175, 0x94801789, 0xCB9580A7, 0xDA198CD4,
+0x15779AB0, 0x27525559, 0x8E7E66E8, 0x6EA7760A, 0xC38BFF00, 0xE0DB71B2, 0x070B3D0A, 0x0BAC5ACB,
+0x402E1EE4, 0x74DBFDD5, 0x450B3B45, 0x1BA797F2, 0xF6089624, 0x4F8E66D6, 0x6C3D52C3, 0x2B53345E,
+0x07387114, 0x865ED69D, 0xE60D0266, 0xA68AD2D3, 0x29F55BF2, 0x2377A403, 0x7B3D16F9, 0x8248A399,
+0x23FEE8B4, 0xDC2A5D5E, 0xF93D15FB, 0xC96EFEAA, 0x61BCF842, 0x033BE2CF, 0xB096140F, 0x7FB5A90A,
+0xACD497DE, 0x99F1BDF0, 0xA043BB63, 0x2B414C5B, 0x40F54BA0, 0xB3DA6086, 0x38A8D03E, 0xDD195427,
+0xA4878519, 0x9F32B522, 0x1563046B, 0x54F731C2, 0x28CF1748, 0x552F78B4, 0x0EF2DCA4, 0x0166983A,
+0x39F41431, 0xBCD18344, 0x64ABAC74, 0x9043A186, 0x4D03FD52, 0x1ACE3930, 0x58487635, 0xDCA458F0,
+0xCE3DFD44, 0x21006399, 0xBC5CD618, 0x4AC99931, 0x2ED6ADC0, 0x8C908961, 0xCD42CF01, 0xC7487D22,
+0xA3D122F4, 0x79ED40F9, 0x9BA8F5E7, 0xBDA5B56A, 0x0B9CC869, 0x61ED1608, 0x79568008, 0xA3357706,
+0x78BB459E, 0x46BEE081, 0xFD5013EA, 0x61EB5131, 0x34EE12FF, 0x480684A2, 0xD0E8C14F, 0x6B61BB73,
+0xDD7449B6, 0xFE43EE23, 0x1BC44998, 0xDA375199, 0xFD18F33D, 0x6A4D5DBC, 0x3EE2CBA7, 0xAA72E2F1,
+0x6A252D04, 0x3C57496F, 0xA793C7D0, 0x5FC3A004, 0x242665A0, 0xDB8B2688, 0x7D8B55B7, 0xC6693EED,
+0x3B102182, 0x2FF8F990, 0xEE82E908, 0xD0CCFC09, 0xB5C778DD, 0xD691500C, 0x0136F9E8, 0xE87B4DBF,
+0x1B3A7171, 0x27860717, 0xE767D201, 0x479407A8, 0x70E2D406, 0x5EF06603, 0xAB11028E, 0x21F31313,
+0x99BA5F63, 0x6B8A2636, 0x6A2903FB, 0xE4D2428B, 0x6568BB1D, 0x0A14C15A, 0x08A6D8B4, 0xDF380152,
+0xAB3B2A4A, 0xE2AAB96D, 0x014DE21E, 0x4BCD355E, 0xA0CD9443, 0xC237B94F, 0x75B2BB23, 0xB5D38AA4,
+0x04EF5397, 0xFB5F8BF3, 0x2F5EE32D, 0x7484A50D, 0x9B8382FD, 0x4E8F9A23, 0x6EA3E440, 0xC9F4EB4C,
+0x83439D69, 0xCAADC500, 0x3A962E36, 0x2AC7D370, 0x4E20E546, 0xA7A0C88A, 0x2A9099AB, 0xCFAAD6AF,
+0x43C702F9, 0xD1B24E9E, 0xF6E1406E, 0xA54BB643, 0xD3BAA22F, 0x2091343F, 0xA1EEC282, 0x5F084389,
+0xEB6F0932, 0x18453C7B, 0x148EDE0D, 0x784158E3, 0x04C553B4, 0x0EE6C651, 0xFD49DA31, 0x7D0B3A54,
+0xD92136C6, 0x81B97EDB, 0x5B29B10C, 0x44FA69BE, 0xFB8FED03, 0x3773A2D9, 0xC38EB94F, 0x6A54C4CB,
+0xDB2F5B3D, 0x648639C5, 0x31B375CB, 0x6CEC2A60, 0x587A7F94, 0xF7F8C2A6, 0x025F39B8, 0x2068EFC7,
+0x74DB4E0F, 0x1C1E2B72, 0x9967E0A2, 0xDF990829, 0x18BB777B, 0x6AF77062, 0xBD9FF09B, 0x0F7057A4,
+0x14235C8C, 0x6821934F, 0x7BB7A6C1, 0x525130E9, 0x0C9FC931, 0xA69B9ACB, 0x770A715A, 0x6CA6BD44,
+0x56CEA8BC, 0xFD9793FD, 0xF639A21C, 0x8F81A52C, 0xEC5A9D39, 0x784D6382, 0xE7EAC4C6, 0x4C77B841,
+0xFDD36D6A, 0x40D2A2E8, 0x16F46E0D, 0xC012F9DB, 0x5B4A8CB6, 0x53F0B2B3, 0x5319A0A6, 0xB8D44185,
+0x0F59AF9C, 0x9C5FB91D, 0x670CCCA9, 0x8B245132, 0x4E3E0607, 0x41DA5711, 0x240E0CD4, 0x2FDFB0CF,
+0x2F609962, 0x199735B6, 0x6804FBEE, 0x3B11B806, 0x9E86A83E, 0xA364A7EC, 0x1D830D72, 0x3DC1CA42,
+0xA6A813C3, 0x35A5B3DE, 0x1B44C266, 0x6DF36D70, 0xE4E1328D, 0x4CC34822, 0xB49FEDFD, 0xB71D7B60,
+0xD1303789, 0xF7C54B1D, 0x2F958051, 0x864FEBE8, 0xE61C6E7F, 0x4095225B, 0xB77558F7, 0x248D21AF,
+0xEB488104, 0x64BF3C48, 0xE408B354, 0x52D6C681, 0xD3A8F26A, 0xD84EEA59, 0xDA11976E, 0x630EAFE4,
+0x19AFD89A, 0xAD17481E, 0xF54A1D11, 0xA7E3A181, 0xB3664155, 0x14CA7D48, 0xFE2CA898, 0xB5293780,
+0x59296091, 0xFDD76D45, 0x6D14DFC2, 0x8040317E, 0x7DD4ABC2, 0x8AE04116, 0x339A6FAC, 0xA1C1975E,
+0xE22958EB, 0x35E2A504, 0x13C82437, 0xC3147DB7, 0xE0CFEA34, 0x93D0E87E, 0x5C1D3ACE, 0xE5BB9C05,
+0x31607E9E, 0x5794D995, 0xE49BBCB6, 0x91504908, 0x454B7AFB, 0xFDB5D4CE, 0x799ECDA3, 0x34AD94F7,
+0x767B2AB2, 0x7E6FB852, 0x2E3F691F, 0x6E6649E1, 0x09143622, 0xB4C3475A, 0x0EC547B1, 0x1ADAEDD1,
+0xFA2D7CAF, 0x0598FED3, 0xF1F50361, 0x0B43B0A3, 0xB4B7173B, 0x23AAA36A, 0x7D620D9A, 0x6EC5C2F3,
+0xCAFCCE64, 0x90EAC1B9, 0x62D34212, 0x99CBF639, 0x3BCC2761, 0xF06ADEA9, 0xBED4191A, 0x38D03F72,
+0x2DB66B13, 0xA53101A5, 0xE95FA6DD, 0x5E160F45, 0xA355F1B7, 0xF987B777, 0x3C712A62, 0xFBD8899A,
+0x261E8C5F, 0xFF17B3BB, 0xAE29AE51, 0x966D216B, 0x4274D70C, 0x683A14EA, 0xB8DE4D5E, 0x45C820FC,
+0xB2C1FAE6, 0x0C524A20, 0x2DC5560A, 0x6CB4B8C0, 0x123DAFCB, 0xCC06BADA, 0xA1FB34BD, 0x9FC3B648,
+0x9DCD1C1F, 0x4A47F639, 0x2BF3EFF3, 0x534D2DFE, 0xC4F1EE67, 0xB5E6DF35, 0x48A09F30, 0xEE552F92,
+0xE3B76CD1, 0x761AF230, 0x51F0A710, 0xC8317F03, 0x52BAB249, 0xB446287A, 0x953C1855, 0xC24113E0,
+0x0940FCC9, 0xCBC0F0F4, 0x8CAF85EB, 0x79012874, 0x3558AF1E, 0x4B2DDB27, 0x866488F2, 0xB448419B,
+0x5BD06337, 0xE96378F9, 0xD88C3DB6, 0x5F6E6FE5, 0x824C5971, 0x3A929629, 0x57C946E0, 0x3243AE07,
+0x6AE4BC3B, 0xDE51B88C, 0x45A998CB, 0x2A24CA27, 0x23170E01, 0xAECBECAD, 0xEB6C40B9, 0x115B0B3F,
+0x322A6513, 0xD8CF5BF4, 0x7AD18882, 0x65900157, 0x2ED9DFDB, 0xCE288345, 0x711101AF, 0xD23CEDFD,
+0x016A50F6, 0x4C5FF49B, 0x8BDBA56E, 0x0C745696, 0xED09489F, 0xD7901A85, 0xAD88C774, 0xBB17ACCC,
+0x65AD2A63, 0x408B3697, 0x3AEDA1B7, 0xE21382F0, 0xF29EA7C7, 0x17B9DC50, 0xE24146B7, 0x81B12DA7,
+0x1223F312, 0xFF59016A, 0x368CB7CA, 0x8E3C794C, 0x455056A2, 0xFF74F5AC, 0xC15F6A68, 0xE664F27C,
+0x111D6EDD, 0x08CA2B09, 0xDD2CFAF6, 0x997EEAF1, 0xA4E5E2CC, 0xF86F0A63, 0x023EB72C, 0x8C81C70E,
+0x2994BDEB, 0x426CA45E, 0x511CB838, 0x1760C70C, 0x70E69628, 0x62E72A40, 0x0EA53252, 0xB30DAEE6,
+0xA263A474, 0x4D85CAB0, 0xB7195BFF, 0x7F1056CC, 0x7BEFFA30, 0x8A751A00, 0x811AD9E6, 0xC12D8B24,
+0xBE92C160, 0x268B6DC6, 0xEE659BAF, 0x27D617DE, 0x5A08AEE3, 0xA1B33645, 0x2BD4AC44, 0xCBFB8BA2,
+0xCE44EBBC, 0x03FF512F, 0xE0ECDFCB, 0x4879B27A, 0xF1BB5E4E, 0xBC86902B, 0x8E216E41, 0xABF3CA5E,
+0x9EABBFFF, 0xD469B7F9, 0xB9421CE8, 0x6F9B216C, 0xD2726F2E, 0x4E74B30F, 0xED00BB14, 0x32809575,
+0x463B8B4A, 0xA5177C67, 0x946C2379, 0xE95F4329, 0x01122962, 0x538BFAB8, 0x3110DDF1, 0xD375B4BC,
+0xF836E860, 0xAE5AA642, 0x8E243A00, 0x14F10778, 0xE93FF8F2, 0xA6F9CF9E, 0xEC5F3F8D, 0x8AAD8FAA,
+0x2ABD9B60, 0xFDD25D27, 0x63730EE4, 0x8B6E9666, 0x908C22BE, 0x3633AB72, 0xA006255A, 0xF56F77F6,
+0x38589511, 0x56434674, 0x7BEB0EFD, 0x2C2466E2, 0x64DC07EE, 0x45CB75BD, 0xDF366C41, 0xF4A24025,
+0x83A6DC14, 0x7B4B8B25, 0x676F98E6, 0xC3A6F381, 0x8507A4B9, 0x62C852EA, 0x26855C5B, 0x0010820D,
+0xD69C66EC, 0xCFC7CB5E, 0xD0BFC8CE, 0x4E9BA9FF, 0xA279A050, 0xECA25C80, 0xE711DFD9, 0x59A01EEB,
+0xF5654F0F, 0x02DBBF77, 0x0084714A, 0x76D795B2, 0x132D0785, 0xCB65949D, 0xD49F215F, 0xA718AF1A,
+0x4FBB57A6, 0x3BCB329E, 0x2DDF73AE, 0xE000E4BF, 0xA5B00269, 0x6445CB7D, 0xCB6ED07B, 0x255702DC,
+0xCB1D0785, 0xA8C6E351, 0x2E97F525, 0x9BCAED9D, 0xD5849E28, 0x024ED8CF, 0x0578DFA3, 0x29BADB28,
+0x47924919, 0x181F0911, 0x2A4B30B5, 0x8C4FDD0F, 0x7A653731, 0xB3337718, 0x53CFDB4D, 0x1016BE31,
+0x3D9425E3, 0x2E4F3650, 0x51117117, 0x36EC48B2, 0x93EE26AF, 0xDB88B790, 0xF92CDFA9, 0x1E653118,
+0xBCA0216F, 0x6631FD6C, 0x893B44D2, 0x6D3B5AF4, 0x0ADA19C8, 0xB97940C0, 0xE61D4876, 0x06974E1C,
+0xDD8E582C, 0x557A4337, 0x8189C677, 0x772F41ED, 0x2B0318FE, 0x29D1C06A, 0x582E356D, 0x32BBF8A6,
+0x7BA53BAA, 0xA490AD1F, 0x50FABBA9, 0x3500BF11, 0xE6CD94C8, 0xE020BD17, 0x132269B2, 0xBD66278E,
+0x02F1C3DE, 0x03A10D32, 0x1757B981, 0x70967C65, 0xEAD89B44, 0x5E781148, 0x5FA48812, 0x6985D83F,
+0x91DBA19B, 0x5CEFEF15, 0x06F37B1B, 0x117A110B, 0x14872AD6, 0xB1147E3C, 0xB175ABFE, 0xFC227018,
+0x01E10049, 0xD13C084A, 0xF1F4B737, 0xF3F669F9, 0x9DDE066D, 0x3F75F8F3, 0x4C74F474, 0xCC17DBB8,
+0xB6779B32, 0x547F8199, 0x66828D44, 0xA27F7C17, 0x9F3D3558, 0xB3571463, 0x62726205, 0xC6DF2A52,
+0xBF87047E, 0x98DEAAFE, 0x490A9EA5, 0xAE1780DC, 0x6C04CD2B, 0xC12D2508, 0xF05FB57D, 0xF891F3A0,
+0x28D993A1, 0xCF44230F, 0xD8B35233, 0x6462E1D0, 0x972616B4, 0x7ED1B1A7, 0x55264FA1, 0x1A226D50,
+0x666BA6CA, 0xA79AE242, 0xE7EDC731, 0x30A1C720, 0x0833585A, 0x69E3EB91, 0x421C5CAC, 0x83D9060E,
+0x6134484C, 0xD16BF62E, 0x6F534640, 0xD820BA7A, 0xC846F9DE, 0x8A7ADF4D, 0xD85E7405, 0xE677F138,
+0x283726D3, 0x67632DBE, 0xBE5A0931, 0xB41CBC16, 0xAB76C55F, 0xDD935294, 0x077BFE4E, 0x7EEC36D2,
+0x60ADEDAA, 0x06F2BB0F, 0x708096C0, 0x479EE99D, 0xE1EDB6A3, 0xF56E6526, 0x504F87C3, 0x9209A671,
+0x95E7B8FC, 0xDE757C6D, 0x22001427, 0x30ADD83D, 0xD2A32BBA, 0x4B4E2B12, 0x0D224AA5, 0x34D694C5,
+0xC22729F2, 0xD68FC1F5, 0xDF56E588, 0x7D08942B, 0xA566158A, 0xA52EAFB6, 0x3244590E, 0x56C8D9B8,
+0x469B3BD3, 0x35D04DF0, 0x9E43AF2A, 0x92B2A2A7, 0x947042D6, 0x164DBA53, 0xC9C475D5, 0x50046506,
+0xBB15F05D, 0x2699CD08, 0x59532554, 0x7E5A5DE2, 0xDAB40105, 0x133F0E4B, 0x32C3D2EE, 0x80F97390,
+0xC9FAC6F4, 0x09311C97, 0x2C03CECB, 0x90732C24, 0x150E1F8F, 0xF4D996BC, 0x75260AD3, 0xF4753FE8,
+0x266AE9F5, 0xDAF094BB, 0xBCC3348E, 0x112DB68F, 0xA9B3EDC4, 0xACD3EB33, 0x0D0AF487, 0xFDFE549E,
+0xF0C3844C, 0xE5328EB1, 0x9E0E0905, 0x230CA3D2, 0xF14E400D, 0x475573F2, 0xDFC9DCE2, 0x188F60BF,
+0xAF1B5894, 0xABC70B67, 0x1DB4F7CC, 0x77FE4579, 0xD310B456, 0xC36E7138, 0x293513A7, 0xF7FB641F,
+0xC7456BB0, 0x251F5E30, 0x0DBAEB62, 0xA78912D5, 0xC179F8E2, 0x881096A4, 0x729F8DDB, 0xF99F7561,
+0xA688428B, 0xD11D3BF1, 0x7F05BC13, 0x800EECF0, 0x895731A2, 0x860E88E9, 0x4C2AF421, 0xBBA300D8,
+0x6204EFD3, 0xB4874598, 0x0F35B5F8, 0x31624C27, 0x9C6B6378, 0x8D5B221F, 0xF7F55D20, 0xDA214FD4,
+0x60D77D84, 0xE4894DBE, 0x35B02AEE, 0x22948B08, 0x51D2231F, 0x8E8EA2B5, 0x1A99AA2F, 0x884A4FB6,
+0xD32555E5, 0x59B2BA59, 0x5CA22969, 0x6213F1A6, 0xAB6560F3, 0xAA542CBA, 0xE1C07835, 0xD86AE67F,
+0x2C4A2EAB, 0x39401520, 0x6F7006FA, 0x54AA505F, 0xE761D438, 0xBE5478CC, 0x7CD2254C, 0x1BC16496,
+0x2E1D4D37, 0xAF05040F, 0x276B8E91, 0x40891446, 0x88305422, 0xC5C6A755, 0x3095F1AC, 0x34D37D58,
+0x51A943F8, 0xB2500421, 0x7F50263A, 0x423641CE, 0x8DAA4215, 0x94163FD8, 0x87A665BB, 0xDA2B83E4,
+0x9C2B4151, 0x373BA2B4, 0x904AAD42, 0x06C0B569, 0x49EC5058, 0x5F181FBC, 0xED75DBD1, 0x34D9B798,
+0x2AB844E8, 0x495EB912, 0x5FC13C23, 0x5419468D, 0xB316B6F7, 0x90C8148B, 0xC6157E88, 0xA11ABB33,
+0x8BA58294, 0x0B1B7043, 0xD1E3618E, 0x3E47ECBD, 0x11840169, 0x27C49A0D, 0x06EDCEEF, 0x9639ADB7,
+0xF4BB2F76, 0x68CD322E, 0x6C3DA7DC, 0x8B217031, 0xDD11C2A0, 0x424FEA5D, 0xF6473625, 0x9E89E990,
+0x0457ABA1, 0x1F92E6A9, 0x94D6FAA8, 0xC0EC6DBD, 0x2A4222B3, 0x93C4F8C2, 0x44E417BA, 0x65ABA272,
+0x2F96EA63, 0xBB939F28, 0x38C719AC, 0xFA74C42E, 0x537D98E9, 0x0A5220C2, 0x4E7F06CA, 0x467526DC,
+0x18013BB1, 0x2F9AEBA1, 0xDF643690, 0x33F4FFC8, 0xD1540FAE, 0xE85E94C7, 0xAAE00C82, 0xB38B848F,
+0x3D757B11, 0x02A347DF, 0x6ACE744D, 0x7395B97C, 0x47575B40, 0xB1A1550E, 0x200D28F3, 0x86217331,
+0xECA81686, 0x04B837AA, 0x3F68BC5F, 0x7C13BE20, 0xB99C2470, 0x0EF999EC, 0xD29CD8D6, 0x90F4A38B,
+0x0B1719A4, 0x948957AB, 0xC8499771, 0xE9BED379, 0xF829AD30, 0xFEEE63A1, 0xBC576ACC, 0x5DD5233A,
+0x0DE67E35, 0xB1909BA4, 0xF0BB8A5A, 0x4F724A3C, 0xA11152F4, 0x4E8CF671, 0xEAEE1F26, 0xFDC571D1,
+0x5CA456D4, 0x039CCB32, 0xB612E8A7, 0x12C9FC58, 0x366DA585, 0x4ADF940F, 0x804E3D7B, 0x080E000E,
+0x107290C4, 0x4BDA60B1, 0xFCE8EF8F, 0x771784EB, 0x18335DFD, 0x83E82D4E, 0x439F96DC, 0x37EB9719,
+0x5A0B6CD2, 0xD76E1116, 0x01DDFFAA, 0xA9ACCF42, 0x8C530DBE, 0x27FAA22B, 0xAFDEEED7, 0x37B7A475,
+0xF16179F7, 0xFB89C6C4, 0x7CF70291, 0x276310CF, 0x792C7880, 0xAA4169E0, 0x31CB9A26, 0x28FE5C38,
+0x7A70EACA, 0x9430C0DE, 0x52A40932, 0xE1FC198C, 0x9ACCF1E9, 0x72972596, 0xB09013C3, 0x2A5D6F35,
+0x40F46A7A, 0xA65EF9EC, 0xC7E6BB7A, 0x8622BEE1, 0x63AE26F1, 0x17D75DD7, 0x2FF6F263, 0xCD48D002,
+0xC72336E3, 0x6634A11C, 0x4B3663D0, 0x8B0E8077, 0x88AE6ED5, 0xE31C04AB, 0x9112F1ED, 0x771B985B,
+0x37E5439A, 0x89EAC39D, 0xE0FE2059, 0x9D01C8E0, 0x3EDC099B, 0x68D4C739, 0xF52D3908, 0xAC3E06F6,
+0x72746256, 0x77DD8907, 0x56ABBC2C, 0xCA75A48E, 0x857A4EA5, 0xE6E6E34E, 0x8EDB9AD8, 0x12661234,
+0x0956F36A, 0x5C8D2E03, 0x3C1E3275, 0xF1A98620, 0xFA990AC3, 0xB3D6D711, 0x6730926F, 0xE0293465,
+0x6DD728B5, 0x8E2A6971, 0x929CD7C3, 0x737C21AC, 0x4B656341, 0x8A569099, 0x4C125D19, 0x89088521,
+0xFF7630AA, 0xB680CFEA, 0xC4F8FF50, 0x05608645, 0xB64CDB7C, 0xCA06D83D, 0x5AC53C2F, 0x3B5F1D44,
+0xB9577600, 0xDA5DC644, 0xA2EE6612, 0x8A481B8D, 0x9FB665B1, 0x288592C7, 0x5F43D862, 0x1E51568E,
+0xDFC9549B, 0x8C79A194, 0x091A5F83, 0x441411C8, 0xEF6083C7, 0x0DF3F428, 0xDF2E7509, 0xC46C80B2,
+0xC88AA701, 0x02C96E72, 0xC1A76C9A, 0x30A2FF07, 0x81FB88AF, 0x2076F80D, 0x6410A095, 0x69BBC10C,
+0x94C57F85, 0xAEF9D2A9, 0xA4FE346D, 0xEC153837, 0xC05637DA, 0x0D3725A0, 0xC065AAFD, 0xE1EBA858,
+0x28C11BC3, 0xD5E6B70D, 0x182DCCAD, 0x1595E952, 0xC154824B, 0x6E50AEC5, 0xEA866EF8, 0x8238E0BF,
+0xEBF43381, 0xD448C5CA, 0x9CC779B6, 0x28429450, 0x17405BBD, 0x97183EC2, 0x63386C13, 0x79B6758B,
+0xAA7E21AC, 0x210EC692, 0x97ABF581, 0x3056DC11, 0x3545B757, 0xF029682B, 0xC54DDAD4, 0xBA13E94E,
+0x60BF5A7A, 0x34BD5FD1, 0x2EA93271, 0xA7150BE0, 0xD8DAD41C, 0xD56F304E, 0xE9A7F446, 0xF756DC97,
+0x58AC9D22, 0x33AA22FA, 0x86E534D7, 0xD9AD243C, 0x3D217F3B, 0xF99B82DE, 0x3ECF917D, 0x0C7AFC28,
+0x77105B9B, 0x2BD3FEFA, 0xA77AB537, 0x54D4BF18, 0xE015796C, 0x04E20DB3, 0x1A55BD48, 0x7FD3E495,
+0xD239E2A4, 0x4D7C0D16, 0x50478401, 0xE6FB3ECE, 0xF2BBE6CD, 0x5EF798AE, 0x85B5BF47, 0xA7A70F9F,
+0xDF0F8C27, 0x333B21A2, 0xF2F67BFA, 0xE2EE0163, 0x89991D0B, 0x2ED7D040, 0xD2B8C950, 0xFBE682FC,
+0x54AAB6DA, 0x295705F9, 0x890012F6, 0x257347F3, 0x58AF3423, 0x445F0247, 0x4B5D48E9, 0x8748128B,
+0x23AF2E5F, 0x65A9DDC7, 0xAF68E8B0, 0x0DCC97C9, 0x73D4ACF9, 0x2B8B32FC, 0xA8AB5D2B, 0x10DAA472,
+0xAA91A03F, 0x8F21B45C, 0x11CFC818, 0x55B65409, 0x6E059CA9, 0x4F929702, 0x197C8C34, 0xE3BE5B16,
+0xBA827751, 0xAC0D566F, 0xF547FA25, 0xD04D2F5A, 0xC9513E5A, 0x64C89DAE, 0x288EF60F, 0xD10E86CD,
+0x6B9DD364, 0xF5310102, 0xA1254D8E, 0x6D8A0A0A, 0xF0EA24FC, 0x09ADDDF1, 0xC167DCE8, 0xDE79D666,
+0x7CBC8CA7, 0x284F0A10, 0xD53D2374, 0xE2944370, 0x18066607, 0x8C6B4FEF, 0xC89694E4, 0x474E33FA,
+0x712B15DE, 0x30EFED3E, 0xEBEC6D6B, 0x0DEC72DD, 0x8BE2B136, 0xC66E17C1, 0xF3AB0020, 0x6B032DE2,
+0x55F7D392, 0x2BE373E1, 0xC82FA1B5, 0xF875C372, 0x7C98725B, 0xF677C682, 0x9174E9C2, 0x88563A7E,
+0x69682FAB, 0x94D16679, 0x3CFFF42B, 0xCBBCCB67, 0x50EC5D08, 0x9FBBC517, 0x0A2D6BD1, 0x2B4E870E,
+0x0D3E128A, 0xC80ED552, 0x33423B71, 0x8FFCE8CA, 0x8894A8D6, 0x0F9C3ED9, 0xA46885EB, 0x4FC44B00,
+0xD737AF2B, 0xCDBD568C, 0xD0AA90C2, 0x749C2CCC, 0xBD21FEA6, 0x9FA0B151, 0xD54DD3F8, 0x8DFA0748,
+0x68409929, 0x5AE57046, 0x864F9E2A, 0x1ACC9A28, 0x505CF77A, 0xDC92C329, 0xD0B599BD, 0x53907D67,
+0x1A125914, 0x09E2BF6C, 0x6B8B0731, 0xFFA2758E, 0x06E9895C, 0xC1B876AE, 0x4F3FD565, 0x3D88FED1,
+0x00F0B8A2, 0x01010000, 0x210E009E, 0x33D17F12, 0x09C2468B, 0xFAE6FB9B, 0xAC5D6DBC, 0x05FFEAF1,
+0x9E98AD3D, 0xA9A0C183, 0x0613F0BC, 0xC5F26061, 0xE0EC5360, 0xFD7444DD, 0xB0E74321, 0xBE92C5DF,
+0xDEAAF6D5, 0x370C3102, 0xDD036566, 0xFF12FAE8, 0x863D0F36, 0xD0F31EEB, 0xEA93048E, 0xC42F06FF,
+0xF9792040, 0x6CA2FC09, 0x653CD614, 0xF76E9EE8, 0x4E6C71B2, 0x13CEC4E1, 0x56C05F37, 0x4F439927,
+0x9A026A91, 0xF37C37F3, 0x0047154A, 0x754A43A2, 0x26404BA1, 0x039A2656, 0x48CFAAD5, 0x9E46253C,
+0xD6B1E2E8, 0x2C65BF2F, 0xCC4D70D5, 0xC4CA78CF, 0x6DF5F390, 0x2AF731BE, 0x2D2C5C36, 0xFF559E56,
+0x300293E2, 0xE92ADFDE, 0x90E68825, 0xFD480BF2, 0x6A83E624, 0x10C0345F, 0xE51569F7, 0x65EC2FCB,
+0x6285254A, 0x4BDEF8F2, 0x58955D32, 0x0FA6E61C, 0x00F734C0, 0xF3D07BB4, 0x8F656368, 0x465E23EE,
+0x99F83080, 0x85ED75A4, 0xBB8267D4, 0xBD2C0C37, 0xB8728A5A, 0x20E322DD, 0xD3732ADE, 0x91AFC295,
+0x4A38008D, 0xA1DD45E3, 0x0BF6BF9B, 0xB9E8F3D8, 0x1D5895EC, 0xB899A4DC, 0x9E813ED9, 0x97C887DC,
+0xC1B41D27, 0x7427FDD4, 0x7558176F, 0x057C37D6, 0x5AFB80BE, 0xC9E7B00F, 0x42FDDE55, 0x463B1126,
+0x9B55FA15, 0x32EE5C97, 0xBF33E1AA, 0x7E53DB1E, 0xC0F4C21F, 0xC0FC0997, 0x863A5E8B, 0x43DA17E4,
+0x59621FC1, 0x79535055, 0x4FA8AB5E, 0xBF9AB7BF, 0x7C450EE9, 0xBA5259E8, 0xDFACD409, 0xA3B46FD2,
+0x0D0ACDC6, 0x29BF904E, 0x7FA75F0F, 0x32BAB218, 0x39A35AAC, 0x8E210ECE, 0xF32163AD, 0x0F294AD4,
+0x02ECB152, 0xCE6691C2, 0x7D00A992, 0x722D570C, 0x7B932BF6, 0x96AEB2A8, 0xC4CC6D3C, 0x29E066BB,
+0xE99E5B6E, 0xB798EEBF, 0x1CF9A34D, 0xA43254F7, 0xF1B9A0DA, 0xCDB1A53F, 0x935A9840, 0x89A08291,
+0x11D872F8, 0xCEA68610, 0xD1B13C4C, 0x0BB84F37, 0x910330EA, 0x3C2C7559, 0x3E04DEBB, 0xD3717306,
+0xD8D8AABD, 0x6A2C1693, 0xFD5BF0F7, 0x7F68FF51, 0x528401D3, 0x09E5931D, 0x29074E2C, 0x48F1BA98,
+0xC3135AA5, 0x471B6EDD, 0x53F27E91, 0x6206E380, 0xC2371F66, 0x283D9E2F, 0x3E17C6DB, 0x03A37CF9,
+0x16579DC0, 0xD0A75F04, 0xDD608AF3, 0x3D54E564, 0xFA69958A, 0x8F06675C, 0x73F47235, 0x5816CD60,
+0x139FB53E, 0xC2164251, 0x69ECE118, 0x1C260768, 0x6513F743, 0x2EC65B70, 0xAC15B999, 0x40210A8B,
+0x0E9053A5, 0xF7EEA1EE, 0x388B051C, 0x1A080437, 0x3532DBA4, 0xCDCD003F, 0xF7443EDF, 0x729E703F,
+0x4254F04B, 0x341F9993, 0xF9C130F6, 0xD26507EF, 0x40260B71, 0xADCCF5C7, 0xD6139BD1, 0x9B6B93E0,
+0xB31BCA8B, 0xCFB8BE97, 0xBF975F15, 0x77B58BD8, 0x98965453, 0x7C40E1C3, 0x65DB9C29, 0x79AA7452,
+0x08F62C3C, 0x37920131, 0xE52E3B84, 0x276205E0, 0xE1138208, 0xD5A9F460, 0x5DBB2E6B, 0xA5DDADA8,
+0x2C035748, 0x9A8148CF, 0x4A016792, 0xA91A5602, 0x825B370B, 0xD1E6E744, 0xB208305D, 0xC802535D,
+0xEB1DC569, 0xF8C666C6, 0xE6ED2A2C, 0xF5A74ABD, 0x650F27B1, 0x1464A07F, 0xFF1FF7F1, 0xB03B21E2,
+0xA1B31500, 0x33CCDAE5, 0xF5B8EEC7, 0x0E0FBB60, 0x742D9A47, 0x3512C383, 0x75CA3111, 0x4C9F806C,
+0xB3892BCF, 0xA68B8EFA, 0x197C8326, 0x3867CEE5, 0xC92CB3B1, 0xE7069A66, 0x70A93E05, 0xE11A6EED,
+0xEF8A9D17, 0x18548026, 0xBF83ED19, 0x35EBB54E, 0xF8E3059A, 0xEA4E24E0, 0x916D6C7C, 0x358AD9A0,
+0xD1DA44F1, 0xA7D1B712, 0x9FD7D4E4, 0x58D01898, 0xEFBDCE8B, 0x36BA94D2, 0x706380B5, 0x3CBE7635,
+0x91DEDD8E, 0x8C5AB8E4, 0x6C227C3A, 0xC21132F8, 0x40A84635, 0xA72B476D, 0xE1A4B589, 0x85FD525C,
+0xFB901000, 0x1637C3D3, 0x79C51027, 0xBD2B986C, 0xB44016FE, 0x4310D87F, 0xB031E7D5, 0x3C0AD648,
+0x66F91CBE, 0x028C31C4, 0x3F6B43E5, 0xBCFBF0FC, 0x4DA91B7D, 0x5C1FDDA2, 0x7833363F, 0x5123A76A,
+0x81E8B402, 0x995CB477, 0x39BB4BAD, 0x08332052, 0xEBD1E30D, 0xF1ED5B86, 0xDF538CA0, 0xC66E1BF7,
+0x56E3EAF6, 0x479446BE, 0x3FD38050, 0xF9C70748, 0x6CE694EF, 0xD5184435, 0x96213696, 0x8D90ADBD,
+0x4A884ABC, 0x3A8627AD, 0x9DD84B12, 0xF31B1801, 0x7CFA9BD1, 0x41E273B3, 0x078E1DC2, 0xD401FAC8,
+0x84462F17, 0x30E20EB4, 0xB5E1F3F6, 0xC25C9881, 0x853B8A98, 0x70B766FD, 0xF061B517, 0x9CA4B9CA,
+0xA84B494A, 0xF3EC2C83, 0x1D77667B, 0xE9B27C5D, 0x6583B855, 0x866CE3C6, 0x552B9BDF, 0x502ADE4E,
+0xAA1DF835, 0xF65623BC, 0x83E19DE8, 0x4D381A75, 0xA20A26CD, 0x8A68F4B6, 0x1B5B321F, 0x1332BB4E,
+0x82AD526C, 0xD8FDA58E, 0x17DC971A, 0x048B4042, 0x4B71F1AD, 0x987E1ED1, 0x8E3A189E, 0x12E75A2F,
+0x66E069F8, 0x2B5986A8, 0xD0941B67, 0xC658557C, 0xFE34A4FC, 0xF1B9F9EB, 0xB30A4AD1, 0x9C2549A1,
+0xE093D78C, 0x9C7AA2A5, 0xC05BD47B, 0xF585D718, 0xF2BACBBA, 0x88561963, 0x09D20338, 0x0D2B5099,
+0x13C1370C, 0xACCE565A, 0xB05E4936, 0x1777C3AA, 0x09BCB18E, 0x37698A96, 0x6E4FF290, 0xC4E118B4,
+0xF7D6B35B, 0x591A9747, 0xC34D0292, 0x7363299F, 0xFBA9F242, 0xDE89D182, 0x8B2FDFB0, 0xE5908C86,
+0xD40DF1D5, 0xEE68404C, 0x811E079E, 0x961E196D, 0xA973C1C4, 0x1120CEC8, 0x02D5D5AD, 0xF4BF22B8,
+0x813E3E0D, 0xFAAE7446, 0xF3C1FB31, 0xC7695397, 0xFC74B945, 0x01000000, 0x0E009E01, 0xD17F1223,
+0x71E9CEEF, 0xF08339B8, 0xCEA0C4FC, 0x22DA8E8D, 0xE4B23BCF, 0xF909530E, 0xC6A46B8E, 0x139B14A7,
+0x28FCCB6D, 0xE958C62E, 0xE0E0DB7A, 0x3BDBCD59, 0x85382D78, 0x1E750B73, 0x8F6AC790, 0x68EFCEEB,
+0xAE144694, 0xB9E780BC, 0x10CE00AC, 0x90706296, 0xD2523F92, 0x7EC445EE, 0x3FE9747E, 0xF116DD0F,
+0x2F282662, 0x59061F92, 0xE8E7CCD9, 0x53CFE23F, 0x9DB6C5E8, 0xEA126519, 0x12933C50, 0x868CACC5,
+0x7E19D6E8, 0x8CE3CE95, 0x7854ED54, 0x8FD71F1D, 0xC5353BDB, 0x1D92ED0C, 0x69543A0E, 0xC64CAF46,
+0xB3630220, 0xD7BA0BCF, 0x6F9F7489, 0x3A1EE378, 0x6A79BC9E, 0x02000EB8, 0x20BA0D38, 0xF433AF2D,
+0x94D079B2, 0x89E0EB60, 0x60F147C0, 0xF0EB1081, 0x76D08369, 0xF5166006, 0x5E864100, 0xEAB87C15,
+0x077042F2, 0xB7A191F4, 0xB2DDB8CE, 0xD0FCAA32, 0x126B9823, 0xF9CF1747, 0xF674EA8E, 0xAE3374F8,
+0xA38FD3AB, 0x56D63CD7, 0x75C23451, 0x53EBCC7B, 0xF4E6382B, 0x16A46DF0, 0xF4F35DCD, 0x896E96E8,
+0x9FA9A253, 0x7D786A3C, 0x67D55238, 0x0B414B2C, 0x3278C0FF, 0x032FF685, 0x92C14524, 0x0A00AB08,
+0xFB7F3A85, 0x119B20CE, 0x7145C9C4, 0x5DEC7A2D, 0xE9DCA972, 0x8D72FA69, 0x559391AB, 0x660A541E,
+0x32EBB8BA, 0xBA80D311, 0xEAEB8096, 0xA4DD55F8, 0x2717FE7C, 0x2D2154FE, 0xA3D5EC07, 0x5936A01F,
+0x4FF856CE, 0x724523A5, 0x2B501BF2, 0x1D6946B3, 0x3C41DD82, 0xC2C307D5, 0xD4236A2F, 0xC246F721,
+0x02B0D3CD, 0x22B1E1CA, 0x0C66A3C5, 0x6082D012, 0x8C06EEF7, 0xD9A6E91F, 0x3D631B8D, 0xFB32604E,
+0x46D7F325, 0x3B6B4C0B, 0xDBA0E2B7, 0xFFC8730D, 0xE3C7D092, 0x7E8309D7, 0xA514F686, 0x10A0C931,
+0x7003E4C9, 0xF3F33399, 0xC7CDF50E, 0xC989511D, 0xA395A94F, 0x2C8E6FB0, 0x765FA866, 0x78CF1433,
+0xC722D30D, 0xF81EF56A, 0xCEF78705, 0xB010F1AA, 0xD2107255, 0x8B3B813E, 0x36440377, 0x327BD533,
+0xCED30900, 0x9916D8B7, 0x687F8DC3, 0x19FB56C4, 0x9334E515, 0x790BA767, 0x3BA25FE4, 0x6E02823A,
+0x0DEDF183, 0xD3558FFA, 0x0EB4ED92, 0xCE64BAE9, 0xF67B23B5, 0x1E3D2718, 0x8097C5BC, 0x29ABB3CE,
+0x4D3369C0, 0x78345EB7, 0x8B33CEBA, 0xF37241B0, 0x249AC1F0, 0xCF60470E, 0xC4F39C05, 0xA672565B,
+0x2A5BF7E0, 0x4831172E, 0x1F22EE3E, 0xB5EE6B14, 0xD5E22883, 0xC90D9EB5, 0x3C192211, 0x6928E07B,
+0xF24B00E3, 0x910471FA, 0xA17E8584, 0x873DA09E, 0x3537135B, 0x8C31B77B, 0x3C7D3142, 0x65EC6339,
+0x512CA9D6, 0x17B7F2F8, 0x25B1DF8E, 0xCF7D49C8, 0xCDAF8DC5, 0xD625E248, 0x6E3AC5D5, 0x1F2D76AC,
+0xF36CE650, 0x833A66C1, 0xDD90621C, 0x0D21C9A2, 0x487570A1, 0x645151FA, 0xD7F348C1, 0x86C7F5F9,
+0x0DEC86F8, 0x1C3BF08C, 0xF756F1F5, 0xDD93AC81, 0x40A91FF4, 0xB95BE921, 0xD9E26248, 0x7497374D,
+0x08578724, 0xB76F4FE4, 0xE4505653, 0xA46EC474, 0xC5A7A0B5, 0x63AC0CBB, 0x05B52F30, 0x477FC292,
+0x19EAB61D, 0xD149AAD5, 0x2300C6D8, 0x378A46C9, 0xF52D9A91, 0x759A5FC3, 0x7C1ADF1A, 0xBF89D494,
+0x61863F5F, 0x4EA4FB99, 0x0B2E4179, 0xD9C46E33, 0x0E4F3DF2, 0x9DC560C0, 0x03233283, 0x0361F4AF,
+0x07D4B358, 0x601D6586, 0xFD998B08, 0xDA0D1E7C, 0x3EB080D9, 0xE282B015, 0xC360E1AA, 0xCE074F4C,
+0x615B9547, 0x9B8D7E95, 0x922A0593, 0xCAEDEAF3, 0xD56E0839, 0x5FA18F87, 0xA6BB341F, 0x3F9E0609,
+0x7470A33D, 0xBF164693, 0xDB2B64EF, 0x14E233BC, 0x37202EAD, 0xC4FAD1D0, 0x81BC49A0, 0xF6492A8C,
+0x533B782B, 0xCB55F00F, 0xA141DBA1, 0xD12B145D, 0x35C9DBEC, 0xCF47BFCB, 0x3BE35745, 0x8057143A,
+0xE2F5E34E, 0xAC1617C7, 0x1F109446, 0xB6A3E052, 0x5F5B61A3, 0xA6AED275, 0x988EABAD, 0xCC63F125,
+0x4359DB10, 0x254E2A91, 0xF17AB50D, 0x2E8756CB, 0x97966F7B, 0xFC4E944F, 0x9E9A1DDB, 0xD87A0DA8,
+0xBCBB7AC2, 0x419A2DC5, 0x882B5071, 0x05322381, 0xD30C36E7, 0xE078A77A, 0x8925D705, 0x65531236,
+0x739F7C67, 0x4236CD02, 0x70DF9C6C, 0x21C294F1, 0x6C80E097, 0xC15F9A06, 0x4E8FB217, 0x010C3CEF,
+0xC4C506AF, 0x5F42753B, 0x3BF42B6A, 0x269E19CA, 0xCC3AB514, 0x86FCE78C, 0xF9854D53, 0x35F8AD37,
+0x8DF4F82D, 0x0B7721B8, 0x03DAA576, 0x503DA6AD, 0x4B8ED047, 0xD92D3EF3, 0x00D5E3B9, 0x5D40CCC1,
+0x90936E3C, 0x495FAA83, 0xB69505BB, 0x77EC998F, 0xA242D092, 0xA5CB2585, 0x65B602F8, 0x18070FAD,
+0xE0305CBB, 0x2AF1DDE5, 0x378497F1, 0x000000E0, 0x009A2101, 0x9E3F2A0E, 0x0E988687, 0xFC3438F1,
+0xC1F13D9A, 0x87054DD9, 0x498B7FFD, 0x39845CB7, 0xDCD7DFEC, 0x2F683AC7, 0xEAA012DE, 0x5DCFAD4F,
+0x8004BB64, 0xF17BEE2C, 0xED2881D1, 0x86383B25, 0xFD761B9E, 0x6D5B26CC, 0x103EB367, 0xA6633C47,
+0x84606604, 0xD71148FA, 0x7DAC5F60, 0xE334CC76, 0x5663C06D, 0x59256D99, 0x102753AC, 0xC1C53B7A,
+0x53103F4A, 0x252FD1DC, 0x563EBE4D, 0xA19E788D, 0x37714556, 0xB990769F, 0x7032FB33, 0x6C85F607,
+0x6A3EE668, 0x4A015B0C, 0x19B6EA84, 0xE9C4B28C, 0x8F955920, 0x060095F7, 0xF2B1C459, 0xC24D8CDB,
+0x220D7ADF, 0x1B3325E8, 0xF6D32B18, 0xF644E63D, 0xD2BD6618, 0x4B504960, 0x466726CA, 0x0E38F0CB,
+0x0F28167E, 0xC9340F8F, 0x4A5D0903, 0xCC2F1153, 0x58760CE2, 0xEDA2F63E, 0x2A36F843, 0xFCD1A0F9,
+0xA2B9E3B2, 0x6A2E1088, 0x3465947B, 0x11ADA9EB, 0x9837ABBF, 0x2194B305, 0x231BB11E, 0x87EB10C0,
+0xEC8FC2B7, 0x82A9FB11, 0xD46C41DB, 0x5183BDCF, 0xE3D085B6, 0xF297BCE2, 0x45E3CCBD, 0x61503696,
+0x9EEC92B8, 0xDA30A40F, 0xC71A1969, 0x065B16DC, 0x00146480, 0xC0D8C615, 0x76E1D23F, 0x98DA3DB8,
+0x1BEC22D6, 0x06AB60CB, 0x0E771CE7, 0x229C97FD, 0xBE7297DD, 0x79E4A855, 0xC7F3D631, 0xACEC2327,
+0xB49DD063, 0x1B6C2705, 0x4AB6CF2C, 0x006BBE2A, 0x862DDF8C, 0x7D385149, 0x31A5A21F, 0xC3259A79,
+0x826A9CED, 0xD5A13277, 0x011E7E65, 0x5D52824F, 0x6993C9A7, 0x52DC17E4, 0x32EB4B0C, 0x2AD16E8D,
+0xFA3BA8BB, 0x6FD277FC, 0xDADA5C11, 0x53AA071D, 0xF9F4ABEC, 0x748EFBC9, 0xCA9FB179, 0x8F53A4BC,
+0xAECFE99C, 0x4A5D2D47, 0xDA962FCF, 0x75BA99AA, 0xC8F763FF, 0x2BABA26F, 0x1C336888, 0x2DBA7CA3,
+0x2B586EBD, 0xDACA32BE, 0x92AC8DE9, 0x103EBB0F, 0x4376F013, 0x36393EBF, 0xF1D371D8, 0x511F8F83,
+0x218FF6F7, 0x306352A8, 0x6B52C935, 0xFA5C5DC1, 0x94E37E85, 0xD8E2D2FB, 0xF63D868D, 0x34E66964,
+0xF6C54043, 0x7C4F7409, 0x84283C03, 0xA5C95D7D, 0x74CF2B55, 0xEA5B27D8, 0x6C2F1548, 0x75401D74,
+0x45006617, 0x64A7475C, 0xFD1C4141, 0x08D697D1, 0xBB325482, 0xF00F6DF2, 0x6977F98F, 0xAD77A447,
+0xBF1DC232, 0x1F21638C, 0x5EE5B589, 0x88533962, 0xDCB5D6C2, 0xC386F031, 0x8321A40D, 0x093087ED,
+0x6970CBFA, 0x7C25B41A, 0x0D7ADAAD, 0x3B328181, 0x7F2BDF31, 0xB259BB55, 0x7B700640, 0x3A759726,
+0xC574C334, 0xA4989F6B, 0x707AD9B8, 0x816EB7D3, 0x4020BA10, 0x9374F1E1, 0x16C7813A, 0x625FFCF9,
+0x65445A30, 0x36E1EC04, 0x58860CB5, 0x22655853, 0x1F1857BD, 0xCFF6B0E7, 0x3E309378, 0x01D2CB0F,
+0x74214841, 0x7AD3ABD4, 0x610A9B03, 0x1BFD7B72, 0x30ACF110, 0x73F90570, 0x530E523F, 0x4D736D76,
+0x25875FDB, 0xB6C3DF55, 0xBA5F623E, 0x7CABB53F, 0x92FB757A, 0xE8DA9C9F, 0x41AB520B, 0xB65C7938,
+0xFCD1BE80, 0xEBCE7598, 0xF7FDA9B1, 0x8BD0A570, 0x8A41E448, 0x0A93B3DC, 0xB417818A, 0xA21EF1ED,
+0x04E87110, 0x2B93FDCC, 0x80E1F0F0, 0x6380B80E, 0x8512EE6C, 0xA39B4298, 0x8F7A6F35, 0xC356E614,
+0x7A18B828, 0x87F1221F, 0xD2D79A79, 0xFC1F14AD, 0x8C80BB46, 0xDD5C842C, 0x5A5318FE, 0xC512A457,
+0x15B20F41, 0x34BFD42F, 0x213F70F5, 0xC4480375, 0x1D86DB9C, 0xFFB3F734, 0x6F2679B9, 0xAEFE0A4B,
+0x486C51D1, 0x4071AA2F, 0x8C23443D, 0x21B6DD80, 0xB63EB529, 0x90AFFDD9, 0x2C2092AD, 0x31AF551D,
+0xC19368FE, 0xE4D3AFC4, 0x159734B0, 0x1BC42A5D, 0x1327C5F9, 0x25BAD85D, 0xFAEA5C7A, 0x4DB588CF,
+0x4DD14B3B, 0xAAABE80E, 0x4DED4464, 0x9994F285, 0x1ED53368, 0xF3F127CF, 0xD914ADE0, 0xF3599A47,
+0x147A579A, 0xAB26A42A, 0x4815B00B, 0xE448F3A9, 0xC579CCFD, 0x7C777F8F, 0xA562068E, 0x14A39416,
+0x495F240D, 0x64F7FB23, 0xEA833CF6, 0x8E7036A2, 0x7FE05880, 0x02EAAA00, 0xE7371828, 0xD3CAA1B4,
+0xCE1704B4, 0xCE7CE3F2, 0x1D56FF45, 0x068C6F94, 0x94D3F1BA, 0x04EEEA9D, 0x96B40E29, 0xC32E1493,
+0xAEC0C9E6, 0x40992BEC, 0xB9EF690F, 0xDE7237A6, 0x4AD661E4, 0xD581D6B1, 0xEC17361C, 0x05D75DF6,
+0xD00528CF, 0xEC9685D6, 0x8B927D48, 0xD3C4653C, 0x19566B61, 0x97BA0978, 0x2C244AB6, 0xD6616B9F,
+0xC7A8F6D0, 0x027EC5DD, 0x4C950977, 0xCD979122, 0xBFB6AF40, 0x9E13E096, 0x8662D4B0, 0x51762CAC,
+0x0810A861, 0x8FB880F1, 0x6A17B0D3, 0x8FFACFF0, 0x1E653FF6, 0x6F5FD25A, 0x5522A14A, 0xBFDF6462,
+0x24F2796C, 0x9F8B4D5B, 0xE82A2FD3, 0x3FD1212B, 0x8A7F2540, 0xBECCFA0A, 0x3D6A27BB, 0x2650630C,
+0xBB3E3A15, 0x9E4510BF, 0xA8865BA9, 0xEA076A88, 0xB7DEE679, 0xC4A19F69, 0x06EC4AC6, 0x67BC62B4,
+0x46A48BD1, 0x933A6A97, 0x5D37ED05, 0x1416C30A, 0x07D26CB9, 0xC98E152F, 0x228034ED, 0x8889BE14,
+0xC850F839, 0x343F7B36, 0x6296E690, 0x4D5DF967, 0x52E62F1F, 0x3A400B9D, 0x0FF90492, 0x0C11ADC7,
+0x80013A7B, 0x43B2E079, 0x52EBCABA, 0x9C01E64A, 0x2AC9C98B, 0xCD1DC208, 0x41D385B9, 0x72728CF0,
+0x1084E41D, 0x1C502F8A, 0x040B447B, 0xA4760F7E, 0x47FBE142, 0x4F177F7D, 0x744EEB51, 0x215D81BC,
+0xFA46A089, 0x086B0F98, 0xC866DE48, 0x30DA2929, 0x20B8E8F2, 0xC0215DE9, 0x066EFD90, 0xF79AA1C0,
+0xE404A2CE, 0xFF81D78B, 0x916E85E1, 0xE32C43BA, 0x9717165D, 0x48FCC08B, 0xB2197615, 0x48982A69,
+0xE7AA43C8, 0xC3B8544F, 0xB79BFCBF, 0x56B6EE42, 0x310FDC4A, 0x0099BB64, 0x2F04149B, 0xB1C17669,
+0x9FF52732, 0xB57795AA, 0xA0A8B1E0, 0x46156866, 0x49D8CBDF, 0x661C59A8, 0x0CEB5D20, 0x0C91D822,
+0x4FD99E89, 0x53C41C68, 0xFA97E62C, 0x6FF2B68A, 0xB21D4947, 0xAF54E873, 0xB38C4F68, 0x036A90D7,
+0x2E194EFD, 0x834AAB85, 0xE4846865, 0x478E3B52, 0xF4E7B1BF, 0xEB2220B5, 0x447AA0E8, 0x49EBCDE9,
+0xB901FEBE, 0x9ADA077D, 0x36C44A0A, 0x22978AD8, 0x68EC71F0, 0xE8F78350, 0x895CF422, 0x6306D69F,
+0x5D1B1857, 0x9737FABA, 0x6DA6F7BA, 0x6CE46127, 0xF34F3583, 0xFFDF0AEE, 0xCE1216D4, 0x25C70D0A,
+0x3E9E0023, 0x00629403, 0xD325159A, 0xB62EF98E, 0xC4074EFB, 0x275594C6, 0x49B460D1, 0xE10D8730,
+0x23055ABC, 0x7552AA92, 0x96CB88C9, 0x6BD2F299, 0x9DAEEF0A, 0xDF4D37BC, 0xDB27C3CA, 0x644B21B6,
+0x5B185A8E, 0xC62AC2B1, 0x460834AD, 0x781DC200, 0x497B4261, 0x866AA2DA, 0x00046FFB, 0x19E9686D,
+0x3DC5511B, 0x82B97270, 0x211D4831, 0xAD717593, 0x8E531155, 0x842FC2C3, 0x316D09A5, 0x82C7A8B9,
+0x7D388FA7, 0x0BEB4B63, 0xB4B8478F, 0x0AAD691A, 0x108BE00D, 0x9087BEF8, 0x4A3D5F30, 0xC187F48A,
+0x5D3260B8, 0x1649C03B, 0xEC9F4F1A, 0xF1998098, 0x1B27B318, 0xA18F79AA, 0x065AA566, 0xA634DBA4,
+0x2297CD4E, 0xFB6D9AD2, 0x05174632, 0xC290C217, 0xFEF314F3, 0x4BCE6F05, 0x9D711201, 0xFB1C0C5D,
+0x9D44978B, 0x8EAB051C, 0xBFE0BB80, 0xF72AD447, 0x27E30ACE, 0xDAB74DE9, 0xFA4A8D6D, 0x4C277185,
+0x6503E568, 0xD896750A, 0x1A9AA6E0, 0xB56A340C, 0x9937F4DD, 0x18C3CBD9, 0x92B1FDAA, 0xA2438B63,
+0x74B775DA, 0xC3865F6C, 0x56218E18, 0x489E56B6, 0x44060E3A, 0x5E88BF72, 0x8A0D9D14, 0xC6E52175,
+0xFCDEDEB5, 0xF6EFA45D, 0x266509F8, 0x00CF3C78, 0x109682B6, 0xF660F788, 0x300C4BF2, 0xC3809295,
+0x966C0164, 0x033B1747, 0x27068EBF, 0xDB710964, 0xA4E25221, 0xD20E8CB5, 0xE7909E6D, 0x5D739EB2,
+0x3B3C6924, 0x8BA6B62E, 0x9C4BC6F7, 0xCB5F78AE, 0x7F0AB4DA, 0xFE1816F4, 0x1410617B, 0x7D8E42DE,
+0xC199D25B, 0x7BE270D5, 0xD6A5FD14, 0x93B2E87C, 0x3977E624, 0x6BB5B5E1, 0xA8A41AD8, 0x79B5C5CF,
+0xD8AA011E, 0x278BA631, 0x06A64ABA, 0xC11A6C1A, 0x3D082672, 0x3ABD7A84, 0x7FF9A0D6, 0x01FC0ABA,
+0x2CA9423E, 0x7FCFC283, 0xA24D8CDD, 0x9AA333BE, 0xDE4CCC9F, 0x9D84AF3D, 0x9F05F9E4, 0xC5CFA195,
+0x1971060F, 0x1E19E98E, 0xB7E45ED6, 0xB62C94CA, 0x1292886A, 0xBF4A4182, 0x48499072, 0xD133C5DC,
+0x617508C6, 0xF607D824, 0x89888F48, 0x3538C498, 0x5ADFE5B0, 0x441CA6F1, 0xC517F6AE, 0x27A65261,
+0x636E3E52, 0x00AFAAC5, 0xD3BC0C4D, 0x77B47057, 0xEF21FD9A, 0x95989498, 0x4B5E2256, 0x41C22B07,
+0x1296A397, 0x5620C6EF, 0xBE92FDD2, 0x8F3BE258, 0x37DCE909, 0x7A52A426, 0xEEC88366, 0xBC12C837,
+0x74BCC2A4, 0xF4C6E642, 0xD13BEEE7, 0x136ECAE4, 0x2024B0AB, 0xD0C4692F, 0xE566DD7C, 0xBA8A40EA,
+0xFA16C836, 0x9EAFDD11, 0x49045324, 0xA1B2A7D2, 0xEDA884EE, 0x453500E1, 0x510B44F6, 0x443E3D86,
+0xE6095E2B, 0x5A902337, 0xDCCC2ACF, 0x6F30B6F7, 0x223D22E4, 0x4F524E9C, 0x5A1AA958, 0xAB358733,
+0x36FBBA53, 0xB5294DBA, 0x7CBE040C, 0xB6107BEF, 0x18873300, 0x16DDE1BE, 0x4548AF2E, 0x1DED59E6,
+0x78D0BB18, 0xB86C2A7D, 0x95565347, 0x7ADE4987, 0xD7AA1C97, 0x4B9F4DA5, 0x9C635233, 0xDD9D1632,
+0x851BE866, 0xB6F991B6, 0x3D4BA6D0, 0x24AC9D41, 0xB838ACBD, 0x5D84C1FE, 0x5984CF1E, 0x79027BD5,
+0x98C13730, 0xDA179A9C, 0x1D7D63F1, 0xB782B864, 0xD897481B, 0xD1058A2D, 0x07CBEB20, 0xBC48B65D,
+0x9845FC1F, 0x7B3A99BE, 0x635BC178, 0x73D41FDC, 0x258DC901, 0x7EFE0EA7, 0x25A254B5, 0x9561666C,
+0xCBA5DA36, 0x16B20411, 0xC7F4DF3A, 0xC73CFC3D, 0x97B550DC, 0xBE52F6AD, 0x64032152, 0x8B753C6E,
+0xCFEF5A8C, 0x67FFC8B8, 0x4034464F, 0xE43B5DE7, 0x9C3374FB, 0xF5D53B73, 0xC10A9DFD, 0x7D7F141A,
+0x930058E8, 0x7B4257F1, 0xDBB35CC4, 0x8BEA0E6F, 0xF176F9D9, 0x323C6958, 0x9D493B96, 0xCB6510E0,
+0xEBC8F82A, 0x01FBBF82, 0x53CC3D9F, 0x08558607, 0xA1DE0B0C, 0x87B99265, 0x3CA511E5, 0x066D777E,
+0xD07B5103, 0xD1FECA9C, 0x83D79804, 0x1D031D00, 0x53CB2BD0, 0x1A43B998, 0xC90EB85C, 0xD69CA2B8,
+0xE548F220, 0x85E08F40, 0x85036386, 0xD5AAE9DA, 0x61F06561, 0xED3F6D44, 0xD2441D28, 0x1B656858,
+0x5925D945, 0x6F4AC635, 0x9ED9C821, 0x3F9BCF89, 0x30AB4B48, 0x1E249B05, 0xE99CD554, 0x783C704C,
+0x0BA3411C, 0x1CB7EE18, 0x29A54C13, 0xD5FE9414, 0x91750D75, 0xA86A4AEF, 0x3BBF8417, 0x3EB55BAA,
+0x9B6B6D2A, 0x5F0C297D, 0x73FF02F8, 0x6D59F413, 0x36BBCDDD, 0xF0297B2D, 0xBD4076E0, 0xA6D91045,
+0xD7DF7F10, 0x03307458, 0xA91622FC, 0x163050BD, 0x3C5D7614, 0x9797352B, 0x57A5CF2C, 0xFC3D81E1,
+0xF321D649, 0x196E2AE4, 0xD168C889, 0x1A25527A, 0x95C325DC, 0x6E089978, 0x697E44B8, 0x8C110D80,
+0x35BC99F5, 0xB1F86DA5, 0xB1BBFA08, 0xAA3C54C8, 0x003B5487, 0xA53B95C3, 0xC3476F3A, 0x5A734B01,
+0x67361178, 0x974707CA, 0x8510EA80, 0x75680F99, 0x98DEEF29, 0xF76462D2, 0x56D1447E, 0x582A4AEC,
+0xE78B08F1, 0x0F60BA21, 0xBE2A8D95, 0x52AE511F, 0x17041566, 0xB6F913FA, 0xE3D9A4BC, 0x63C4BF20,
+0xB507E888, 0x587BA15A, 0x2B7755A7, 0xD19D0BCB, 0x067BF995, 0x8FD97486, 0xA05FD802, 0x95CB1800,
+0xD658E4BF, 0xC44FC30C, 0x06A78388, 0xDA5F088A, 0xC0D170DD, 0xFF629254, 0x11B12CCF, 0x509F45EA,
+0x6EA20E78, 0xE0AC32DD, 0x1B439287, 0xFA334DDE, 0xEAEF2B37, 0x2F7D36ED, 0x7AA3A725, 0x9E6D839D,
+0x15A5A06D, 0xFDEA257A, 0x1C052CC9, 0x9FA38395, 0x6BF704D8, 0x368DE962, 0x3103B508, 0xCC5369CC,
+0x98DE1FC9, 0x62B1551A, 0xCEC30223, 0x3D72BE17, 0xB41AC148, 0xA775ABDB, 0xF0EDBA0F, 0xC18C8C28,
+0x7BE46E09, 0xD8C20880, 0x04B17AC1, 0x55B23BA5, 0xA3A23978, 0x249BBB95, 0x5DAB0E58, 0x69E36F0C,
+0xE1E1D492, 0x3D14258E, 0x5C0FB5CD, 0x1AD9E73C, 0x2DCB7CF1, 0x13CBBC45, 0xD397ABED, 0xFF18679C,
+0x482F63A8, 0x24BFD4AC, 0xF2B48824, 0xE582B6F7, 0x9FB0E9E0, 0xC450D817, 0x0C9DA508, 0xC9C88D15,
+0xB92477DC, 0x59C0518E, 0x92949771, 0xD01160B9, 0x1EC0400E, 0xCECCB88C, 0x1E5037B2, 0x05C6D4A2,
+0x1EE3C1BF, 0x67DFE07B, 0x92B8E988, 0x04055841, 0x56C62DB8, 0x37639530, 0xA8D0DC91, 0x0F41F2C5,
+0x8F1484C8, 0xB2CBC943, 0xE07634F7, 0x86FF9BE9, 0x07B1EA44, 0xA8419664, 0x55BC03CF, 0x58A42746,
+0x3E9A0DEF, 0xC4FC53AB, 0xA92D858C, 0xF874C7BF, 0x5A911C0D, 0x3D5C072B, 0x559166C3, 0xA77E0A89,
+0x8526CF1F, 0x9CB1B15B, 0x0CD19970, 0x596C301B, 0x64949D6A, 0x6F7B1B12, 0xE7AADBDC, 0x1D541CAE,
+0xD795928F, 0x039F4051, 0x40B71A7A, 0xD8DB4768, 0x8E711492, 0x82C42F37, 0xAA7089C7, 0x145AB0A7,
+0x2384A597, 0xDFF93AEB, 0x1704522D, 0xD879622E, 0x40893AEA, 0xE0EE4C53, 0x97716010, 0x3F6E8378,
+0x2CE9E760, 0x27AAF5E4, 0xF6500A20, 0x83BD9B26, 0xFD82CE44, 0xB9D9E44C, 0x9665951C, 0xAD5540AB,
+0xB1A7383D, 0x9E354DD1, 0xB03729A7, 0x23F8F02D, 0x9412ADD9, 0x8ABD5CE9, 0xFA203901, 0x2775C6FD,
+0x57B498D5, 0xF74FFFB7, 0x40D4C5A8, 0xCA228280, 0xBB98BC14, 0xAEA9D650, 0x2E6035C3, 0x62892232,
+0xCF1DDAD4, 0x50F4AC82, 0x3C3F478B, 0x846D9DAF, 0x464083F3, 0x6DE26EB5, 0x42757D55, 0x86EC5B6A,
+0x8A4DE753, 0x672A3399, 0x03840E11, 0x76E5F7CC, 0x5F4F178D, 0xF0F49BC9, 0x0ADA94F9, 0xB7BAC64A,
+0x91BB738C, 0xACC57A22, 0xFDF88268, 0x6380839D, 0x75239A4A, 0x6EC03FD0, 0x1D0DB276, 0xC544DB7F,
+0x43B473A2, 0x59D8C49B, 0x784301DA, 0x65878767, 0x6BD8FDD6, 0xD069DA72, 0x2794B40A, 0x1B489EF0,
+0x133310AB, 0x7396143F, 0x391626A2, 0x28BD8130, 0x55C9ABE5, 0x9C81CFA9, 0x4C80A645, 0x9040D816,
+0xA93D25E0, 0x84EAF9D9, 0x9947F051, 0xAFFE0458, 0x8835060F, 0xD6AACC31, 0xDE149748, 0x65A8DD93,
+0x0529C3D7, 0x8BB3ED1C, 0x07AAA9EB, 0x87259D5E, 0xDEC1B991, 0x000000F5, 0x009E0101, 0x7F122710,
+0xD09C5FE5, 0x36E6E798, 0x94257B68, 0xE6F305BF, 0x60E2866B, 0x619AB1F9, 0xD0B5398E, 0x8524894B,
+0x3E91E4A8, 0xC876A8EC, 0xAF9A72BC, 0x9E1355E3, 0x47798C31, 0x471D727A, 0xBFEC3106, 0x2A2E60A8,
+0x7CA06E4F, 0xA980E2BE, 0xCBC720DA, 0xD631CD4A, 0x73B14452, 0x0098D2C9, 0xDED50C4C, 0x73D19652,
+0xF1D046EC, 0x21FBD871, 0x02CD7275, 0xA27314D3, 0xB1C14027, 0xDA8FE200, 0x6DA7C834, 0x07F5C3AA,
+0x200BF67F, 0x8EC0FD7C, 0x17E81DC9, 0xB2A65E67, 0x3F682433, 0x9E5D051C, 0xF7EDAC24, 0x9CE61E89,
+0xB44B09A4, 0x8DB8AE18, 0x7A0D3F6E, 0x0DBC83FA, 0xC213FFF3, 0xA75723FC, 0xBB485FB5, 0x0A93C2D7,
+0x34B63C47, 0x566A0830, 0x6E3DCFCB, 0xB2BB70D4, 0xAE0CDC3D, 0x8C81222D, 0x69D6032B, 0x71E43317,
+0xAACA1AC6, 0x2D700944, 0x269B043E, 0xC8C276E8, 0x607288FC, 0x34661124, 0x9B4B7B85, 0x3431A22B,
+0xE5B551BC, 0x4727B1CD, 0x8AC9640D, 0xF65378E2, 0x232B3A37, 0x0B9E56B3, 0x1F49CE62, 0x26469B68,
+0xF0EAE61B, 0x53C1558A, 0xA906128F, 0x7644F499, 0xF29EFB05, 0xD711C136, 0x336DF7FE, 0x0EB13F88,
+0x2A3FEB6D, 0xBA8DDC25, 0xCF7D4BAD, 0x760CA85C, 0x6C8BD9DD, 0x3AE00080, 0x66C9CCC4, 0x53B16DCB,
+0x7EADFEB2, 0x33940DB0, 0xD4A667C7, 0x80A74D6A, 0x54331FD6, 0xD36CB3AF, 0xFA2103DF, 0xE0596DFF,
+0xAB92E96A, 0xA9603204, 0x1B5F80C7, 0x195A9113, 0x8E64BE8F, 0x647E6D99, 0x7A3B2B68, 0xCE0452D5,
+0xA23B7F90, 0x66175309, 0x70E8155E, 0xB7385E9A, 0xD2E611F7, 0x11821420, 0xE144F5B4, 0xF16F5389,
+0x9E0DB990, 0xC3486689, 0x4D5E8C91, 0x11C8C32E, 0x7FC45D81, 0x2926B3DC, 0xF5FD6F7A, 0x42B64993,
+0xFD6BC143, 0xB9E25F41, 0xBE46D947, 0x5BBEE9DA, 0x5458DEDF, 0x6D016E59, 0xAB9EB375, 0x5CD569BD,
+0x9DB99E3C, 0x69B103FF, 0x66A5ED93, 0x7E267964, 0x733959DD, 0xE077626F, 0x865D5B93, 0x87B7FF1F,
+0x2346C7EE, 0x4F28B408, 0x449547B5, 0x5CBB8018, 0x12495849, 0x708EE9A7, 0x2BF00148, 0xA1354082,
+0x02CBF8AD, 0x10AA0610, 0x22F7B599, 0x0EBB1721, 0x49218C53, 0x628A868D, 0xE4EDFAFF, 0x1EC5F74B,
+0xA0C2C0A9, 0xC76CC680, 0xB13CBB3E, 0x0B932CAB, 0x72584E91, 0xA0FF9B9C, 0x17340B65, 0xCA410DCA,
+0xB68AAAFE, 0xDE8122D9, 0x0B26E4EB, 0xE36EFEAC, 0xEB3D06BD, 0xE0522CA4, 0x3370CD0C, 0x41DC912C,
+0xADED9C13, 0x479D6B2C, 0xC2392FD0, 0xBE9EB997, 0xAB094B5D, 0x88D6CB69, 0x47DE066E, 0x66EE8C78,
+0xEDDE38FF, 0x803FDF1F, 0x75B5A5F9, 0x84B78F03, 0x55CF5867, 0xC19C40B6, 0x75C90D15, 0x736126B8,
+0x9B957BF1, 0x990E8AB2, 0x988A9277, 0xEA61C6C2, 0x6BC039CE, 0x6882E8AA, 0x482FA82F, 0x78896832,
+0x7BA6F319, 0x8DC8F513, 0xB5842C49, 0x928BA32F, 0xDD965BC1, 0x83FEBE86, 0xC7F2286B, 0x0AFDA52E,
+0x379549AC, 0xA818A0F7, 0x2CD77724, 0x4FFAD4EC, 0x579373C8, 0x9EA8C7C5, 0xF620B92C, 0x181C6B40,
+0x5F3EAB33, 0x4BF0F3FE, 0x4F8605C5, 0xF6FBF96F, 0x43774C94, 0xBB3BECD3, 0xB926BA74, 0xDFD472F3,
+0xEC9A1B81, 0xC93C9E09, 0xA39A2C22, 0x9B789157, 0x9D6A19BB, 0x32FE73CE, 0x4CF45D65, 0x9B38F499,
+0xCDC4A8C5, 0x456CB682, 0x7F5EE6E7, 0x3F8B43B6, 0x63C6152B, 0x82C39FB9, 0xE7C7EAE5, 0x00521A35,
+0xD47CFD68, 0x22EC4E95, 0x9BAF3FC3, 0x1413E066, 0x3F61AC70, 0x6762B7D1, 0xE7F24D0E, 0x9D0E807C,
+0x8C644A95, 0x96CD5CDF, 0x88164646, 0xD0FF0402, 0xF7FC0DD1, 0x147FE8C9, 0xC4A5A33D, 0xEB6B3F55,
+0x95DB5742, 0x2FA83D33, 0x461A97C3, 0x050AB2C3, 0x1328CCB6, 0xC5B27B94, 0xBD2F718A, 0xCAB10048,
+0xBDA2FE3B, 0xB133B004, 0x025E497C, 0x430A189C, 0x2A044F70, 0x22E08493, 0xACE058D7, 0x956BB7B4,
+0xDB29F3C3, 0x508482B2, 0x47A0182A, 0x9885087E, 0x2E271499, 0xF5405262, 0xD5B34A08, 0x7525872D,
+0x3A8C5BDB, 0x6978CB98, 0x93379443, 0xBB6D1F1B, 0xCDF707A0, 0x55F4866B, 0x10E54F6D, 0x0CBFAB30,
+0xD71519AB, 0x9FDF8415, 0x600C7D58, 0x243A711E, 0xEB3EB85A, 0xDC8D980D, 0x99486866, 0x0BD94104,
+0xCB3DF1C4, 0x30359EC5, 0xA4F0740E, 0xCC895EE4, 0x5B079E40, 0x2501B2FF, 0x1F8E68FA, 0x3FC651C5,
+0x78457DFF, 0x97E25146, 0x01C8D1B1, 0xC68ED3A0, 0xB354899A, 0x9589A87F, 0x766AAE59, 0xF9428813,
+0xD47788B6, 0x1C81D0BA, 0x4C2496F7, 0x2B56129D, 0xAC2731F8, 0x176CCCEC, 0x00001E13, 0x9E010100,
+0x12291000, 0xA360E57F, 0x9B65A530, 0x6424768B, 0xBA0B5CDB, 0x645ADBBD, 0xC10DF80D, 0xD34041D2,
+0x50A785F7, 0x33D99612, 0xC2E32F5E, 0x2768B277, 0x223C9975, 0x05058830, 0xCF21E5CC, 0xBF3EA773,
+0xE1405F4C, 0xCF0C9F3D, 0xB7546116, 0x3028F584, 0x920E4213, 0xB425489C, 0x35F0C306, 0x5562823D,
+0xCE03B695, 0xA401BEFF, 0x3A06808D, 0x882435C3, 0xA6CD952C, 0x7C1CC79D, 0x615A8B67, 0x65CDE286,
+0xAA006F82, 0x1F6D7A7D, 0x23573517, 0xD6FDA169, 0xD3110FDF, 0xE949F5FE, 0x12587FB5, 0xAD0338A3,
+0x1D1D2563, 0x8E551D07, 0x183552BA, 0x0C3330F5, 0xCD36E566, 0xABB3C130, 0x7ECD4BFF, 0xE9FB4396,
+0x28A33AB3, 0x38BD7221, 0x7EBFD961, 0x3D77E192, 0x7ED8791A, 0x7BCE0C50, 0xA813949C, 0x52285C7E,
+0x456322DC, 0xCC162E1E, 0x60F19F33, 0x37748872, 0xF81E923C, 0x4D59C1F5, 0x2D3DA821, 0x8C38E05D,
+0x60941FCF, 0xE80A2BD9, 0x832B4C56, 0x42E2D0A4, 0x1CFEB796, 0xC30EDDD1, 0x1B82CD94, 0x3C40E631,
+0xEF78D343, 0x909CFDD1, 0x5BB817E0, 0x88634D26, 0x0420829E, 0x2422C47F, 0x1534AE39, 0xCEB30BAC,
+0xA3B06493, 0x2B2C533E, 0xD18D7D5C, 0x066EBE3E, 0x3DE005FF, 0x968B1861, 0x74D186C5, 0x182485D3,
+0x542D467B, 0xFBA5CC83, 0x96E428D2, 0x513A2738, 0x29110271, 0x20C0D245, 0x93D9AC20, 0x7EF4E98D,
+0x9CB4F25D, 0xDF4A5610, 0x335EB23E, 0x93DD632E, 0xB1181673, 0xE321C384, 0x9BD0FB8C, 0xF3A35F22,
+0x140A7C7A, 0xE8FC8E70, 0xAC522A3A, 0x92EE22C8, 0xCD328C13, 0x6D4651EC, 0xCBD8692E, 0xD6B55A3B,
+0x0475481B, 0x20223506, 0xF076FB62, 0xAF52045E, 0xF13C945B, 0xB54DC803, 0xAF647F02, 0xE6DC1239,
+0x5463013A, 0x109E6BA6, 0xF663ED08, 0x8BBFE5ED, 0x7F65ABE0, 0x64C95B00, 0x4879CA2C, 0x102B7D23,
+0xF88895EF, 0x3C649BA6, 0xA691226C, 0x9FF855B0, 0xA6ED8699, 0x94E273D2, 0x75B77B0C, 0x5015456C,
+0x1550BA83, 0xF1200A1F, 0x6CD64853, 0x546ABCCD, 0x64331394, 0xB841A8E7, 0x0A92E832, 0x6F2B03DC,
+0x44D21D0A, 0xC89D8DA6, 0xD1297667, 0xC1375463, 0x4058F7F5, 0x34A77AF7, 0x1BE84972, 0xA71A8DE6,
+0x569B4F47, 0x8C4980E0, 0x58A8BF0E, 0x102E0856, 0x8833061F, 0x71B6AA7E, 0x2AB39B4F, 0x3703CD26,
+0xFD51A02F, 0xBC7F79A3, 0x6E83628C, 0x18A31665, 0x273800C0, 0xBBB9D183, 0xF1338916, 0x20AC3CF4,
+0x6B632EF9, 0xA2AC26AA, 0xB7FC6052, 0x96B14FE9, 0xDD73C950, 0x0A161EA4, 0xAEDCE0A1, 0xA179D4DB,
+0x97B90ECC, 0xDD215F94, 0x4B56022B, 0x9EEC2939, 0xDECBC15E, 0xEF707098, 0x16288DD9, 0x1032A9CD,
+0xA2C0D879, 0xEE6939E6, 0x2FF368A7, 0x23685199, 0xEC2E74CF, 0x675F1B5A, 0x6B88F946, 0xC64169A3,
+0x4786E19E, 0x20547139, 0xF155F653, 0xA31EDDA9, 0x13628C0E, 0x10AF461E, 0x8C5FDABD, 0xAA39301A,
+0x1733FE36, 0x64A4255B, 0xB4EA24E4, 0x06A01DA6, 0xB8FC436F, 0x658A241A, 0x21A56BE3, 0x4D8CFF5F,
+0x7BB4D9D4, 0xC4FA489F, 0x6140835F, 0xA5BC09D7, 0x86571982, 0xF959ABBB, 0xD4A01073, 0x42B8E7BA,
+0xC1B55C5B, 0x243C0B06, 0x3B90836D, 0xEECDF5C4, 0x6802D206, 0x3402BDDA, 0x3391A419, 0xFDFBDBD2,
+0xBBF826FF, 0xD4C46EC6, 0x983D56CE, 0x075185A9, 0x7D364619, 0x29C2F38A, 0x093A55D1, 0xCC56D66D,
+0xA02C33A0, 0xA43113CD, 0x3CE9A6A4, 0xE1CDB5B1, 0xD4E60371, 0x1E08E4AE, 0xFC94E46F, 0x841303BA,
+0x46369FEA, 0x01EFCEB8, 0x1168775C, 0xD741E9FD, 0x7193FD17, 0x64BB76FD, 0xDE29F624, 0x16C5E92B,
+0x3A34651D, 0x87224B2E, 0x74DE7A2B, 0xF67AF6E2, 0x00000040, 0x009A2101, 0xE03F3010, 0x3F725226,
+0xFF366381, 0xB83BA889, 0xA9C872F9, 0x7937C5EF, 0x85CACA07, 0x4359415E, 0xEBA2508E, 0x72AF4FFF,
+0x62EE5653, 0x099FCDAB, 0x0A71B279, 0x0DC3EF1F, 0x7DD36BF7, 0xB1506BCA, 0x61226605, 0xD3F5667A,
+0xEC2D3E20, 0xC4374858, 0x71D28DFA, 0x57496939, 0x05FD22D2, 0xAEEA8496, 0xD96F8F07, 0x20E63552,
+0x7CA6E4F1, 0x0B779522, 0x9B1C7436, 0x3B082493, 0xF26C0CB2, 0xB44897BE, 0x53E510CA, 0x6755C480,
+0x16D82D0B, 0x34790F3B, 0xF466E487, 0x667C7334, 0x67A0636F, 0x3297B09E, 0x991BB555, 0xD1814997,
+0xD0251293, 0x0B58C8CA, 0x2031DD65, 0x40229364, 0x99B87762, 0xA8B021AA, 0x836F010B, 0x340CE1B7,
+0x999A1343, 0x02DCD937, 0xAED6987C, 0x94807CBA, 0x064B0122, 0xDD576F34, 0x2F8A6F4A, 0xDC1BA82C,
+0xB78F73EE, 0x871246F8, 0x83161BF5, 0xE5829AAC, 0x4E3FA569, 0x24060548, 0xD88BD73C, 0xFB6D3506,
+0x748651CE, 0x83D5327F, 0xB4B81395, 0x5B1172F0, 0x1EDE7BD0, 0xBF641917, 0x784CCDBB, 0x93D3D1A8,
+0xD6DF5BBD, 0x39CC940B, 0xFE4804B6, 0x288D8A4D, 0x6F54BBB6, 0xD8C24029, 0x685AB25C, 0x57CCB39B,
+0xFABB547A, 0x35E97A50, 0xB1AA319B, 0xCC6936D5, 0x25A75C5E, 0x21CD6D59, 0xF14C18EA, 0x721712A1,
+0x84FB05FA, 0xBAE6449E, 0x492DD89C, 0xBBBDABEC, 0x33199801, 0x607BDF9A, 0xEDBA26F7, 0x73B5F3FA,
+0xE4D4E71D, 0x21C2B151, 0x664BB731, 0x4996DB27, 0x5839C15E, 0xD6EC1531, 0x3289D0BA, 0x287EE40C,
+0x7FE0EC15, 0xC382DA16, 0x26448338, 0x101B1A49, 0xEEEEB6DC, 0x36BF8309, 0xFAD5F942, 0x216856FE,
+0xC8FBC30F, 0x1361C55F, 0xC8C570D0, 0x38824C3B, 0x49D68270, 0x85AE1FC0, 0xFDE38C03, 0x3D4C5B5A,
+0x8493A90E, 0xE6498568, 0xE2029127, 0xB4FADF0A, 0x8D3ACD1B, 0xA7685E26, 0xE537872E, 0xB14C9B05,
+0xDB0D36AA, 0x23638733, 0xC9616B54, 0x0D409E90, 0x890CDBBB, 0x341AD7D2, 0x7430E5AA, 0x23BDE57C,
+0xF80A060A, 0xD9F41AA5, 0x74B84C7E, 0x0F28BEB6, 0x295A4358, 0x3BB45EBF, 0x5F8D0D23, 0xCA3021BF,
+0xBA57159F, 0x59E0E1C5, 0x96CE58F4, 0x7EA47283, 0x0A863CAD, 0x96ADED45, 0x1C861D30, 0xDF4F9A42,
+0x9EC57256, 0x3995CA1D, 0xE65EAA25, 0x78A028E4, 0xB74E6010, 0xB97DD315, 0x28CC245D, 0x3241BEA3,
+0x883F8E0B, 0x70F4C7C7, 0xDE625085, 0xA8877CAF, 0x2C332593, 0x736557DA, 0x5400FBA0, 0x7033E815,
+0x2F048BCA, 0x2F966501, 0x44452FD6, 0xAEE6C2B3, 0x81FB6EBC, 0x6AE366C3, 0xC77E6194, 0x0292F58C,
+0x070C24B3, 0x7A3C94A7, 0x29B3FFFB, 0x8C52DDA7, 0xAAF0E400, 0x005595EE, 0xCF7F40F2, 0x01778E25,
+0x5A8D930C, 0x93090A70, 0xE85D7AEF, 0x15D6C962, 0x19988764, 0xD9D5A20B, 0x67B79BFC, 0x2DCF605E,
+0x1788E52A, 0x076A91FE, 0xFA089960, 0xF4FF494F, 0xB2CCADC5, 0x8D18AD50, 0x7BD1BF1B, 0x36D1AE37,
+0x165785F8, 0x024D0B32, 0x59BE6660, 0x76153A92, 0x71A48182, 0xE4EBDAD9, 0x022FBD39, 0x18FC3B26,
+0x47F5BB22, 0x049358CF, 0xBA88EA48, 0x6BF22E3C, 0xC5049AC8, 0x111DED54, 0x1617D3B3, 0x8EBA243E,
+0x042849A7, 0xA15569B5, 0x62411440, 0xA8D97267, 0x555E0051, 0x79CE44FE, 0x3D8CAA4C, 0xAF16AE0F,
+0x15EB7CDF, 0x99E7D6BE, 0x03A3CE87, 0x5AD5F82C, 0x9C32DE1D, 0x28584BEF, 0x9C5B3EB6, 0x94DC57FC,
+0x3E3E5AC0, 0x9D123730, 0x45AE0C47, 0x9EF243E1, 0x53E6B0E9, 0xC04C6EA2, 0xFC9165D2, 0x6E6880B9,
+0xBCBA2660, 0xD9C0DBF3, 0x596E0722, 0xB672A2D3, 0x4E7CE455, 0x7C1AD5E8, 0x9CC596AE, 0x06F181D5,
+0x8F25F5CB, 0xBEAA0AE5, 0x5E50BBF2, 0x80176A8F, 0x9F29E9D1, 0xE91DD606, 0x28AADEC0, 0xB3A93D61,
+0x33A9554D, 0x47B3B7F5, 0xA4C2E359, 0x064A0837, 0x67C4406D, 0x7428CB35, 0xFDB30FDC, 0xB8C8828E,
+0xFA7B8063, 0xFCCA3292, 0x824F7347, 0x2A2B2BF4, 0x1BDEA1C5, 0xC74C9FC9, 0x9914D063, 0x11CA5115,
+0x2DD703D4, 0x7E1566D8, 0x82656D13, 0xFED5E37C, 0x817F4DC6, 0xDA4814A5, 0x228E343D, 0x61E4C860,
+0x8615BF2A, 0x5F308189, 0xDA28C72D, 0x859D2A81, 0x571BC3A5, 0x7A89087D, 0x29662602, 0x5DAF9814,
+0x2F720325, 0x8B74A15B, 0x2D48B891, 0x0BE91BF1, 0xBE2F4879, 0x987DF939, 0xBD523D2C, 0x91197606,
+0x1DDCC8DC, 0x6EBE9256, 0x34C12158, 0xD147AE0C, 0xD232B3DF, 0x424E1260, 0xEC7B0B3C, 0x3A57BB14,
+0xFF0EF230, 0xFDD4AB79, 0xDA0DFB6D, 0x18E097DA, 0x9FD998DB, 0xCB8F59CA, 0x2050608D, 0x4E0C6980,
+0x4165C2E8, 0x07BE60EF, 0xA606F070, 0x6877C202, 0xFCDE9FCF, 0x239F9741, 0xF6C7E787, 0xE97A70C3,
+0xD90BDEF1, 0xBA4D6FDB, 0xE97CE200, 0x88C9974D, 0x5BD87B26, 0xC1EFC06A, 0x267C6D8C, 0x51F6219A,
+0x5897B230, 0x294EFDEC, 0x2B52646E, 0x0F26BBF2, 0xE786C79D, 0xAFD89AFA, 0xBB14C7ED, 0xCA45CB9D,
+0x3BC7E9E9, 0x0ECBD2BF, 0x9E8220C4, 0x24DA399C, 0x8AEF13D7, 0x10EC82C9, 0xD2C70387, 0xEAF08252,
+0x005F96E6, 0x6FC3B900, 0x8BD26BE5, 0x1F44D45C, 0x068CCEE7, 0xFF2CA540, 0xDC312615, 0xC16CC285,
+0x5AE68C44, 0x73E2D629, 0x1D727EC6, 0x50B5622C, 0x18F12F21, 0x250EA407, 0xBF06F007, 0x3B11113F,
+0x7904778D, 0x376B774E, 0xE9FD64B3, 0x8E566F73, 0x6D046F19, 0xDE2E3100, 0x4C16AC9C, 0xA362B644,
+0x572E99A3, 0x2A7F7A22, 0x71D30240, 0x6CE56BFD, 0x7D55A045, 0xA00235FB, 0x7E5F056D, 0xB7920C73,
+0x450068E0, 0x131A5657, 0x94B10973, 0x487D3E7C, 0x9CEF24E6, 0x6A66F07B, 0xE7A5F6C8, 0x84905777,
+0x8D8BBC3E, 0xE45CA92E, 0x9CFA1B73, 0x0FC300BB, 0x41552B19, 0x945C41D8, 0x44FDBBD3, 0x79443ACE,
+0xD0E34FB5, 0xF592FB16, 0xB53F1474, 0xF743A5AC, 0xE4747F7A, 0x73B8C17E, 0x235C5D0D, 0xA7781F0F,
+0x2B8FAA10, 0x3096F648, 0x65AD0F5C, 0xBC9C7E54, 0xF397C92B, 0xB4A1AEA6, 0xA570AC4F, 0x635C1C6F,
+0x7D3306C6, 0xC3A02AB9, 0x4C5E2312, 0xEC99D5A3, 0xAC5F9737, 0xA9264081, 0xFA832393, 0x072B06B6,
+0x640A067C, 0x599804DF, 0xDDFFF66B, 0x4855FC9C, 0x3FB237AD, 0xE96C969D, 0xAA6F0EFF, 0x6386210A,
+0x285F3BF6, 0x6620F712, 0x5CB63EBB, 0x0332442F, 0x9BF32239, 0xC38B30AB, 0x289AD049, 0xE9F2F5E9,
+0xE62A6796, 0x1B49E3B6, 0x58F8C99B, 0xD1BFF5A0, 0xABD94300, 0xE3910989, 0x28792C8E, 0x961D2CC3,
+0xC258CC7B, 0x39F95C85, 0x735D37D5, 0x91A3089F, 0x77D04D7E, 0x7EAEA6F8, 0xAD97945A, 0xBA62F64E,
+0xC495ABF6, 0x5AF680A3, 0xCF34EC67, 0x88B25E42, 0x5005ADBF, 0x7606A5F0, 0x21B6623C, 0x55B23FEA,
+0x654EDB77, 0x1C7F8283, 0x0BEF508A, 0x66897D0C, 0xF1076B30, 0xFB234A28, 0x2C24049E, 0xDCC10203,
+0x6C84B7B3, 0xF7EB77F5, 0x1158690F, 0x884B8558, 0x154D5E5A, 0x606BACEE, 0xABF6F5FC, 0x88D1B08D,
+0xAEFBDE2F, 0x82A61212, 0xA70E4386, 0x6FE4BC0F, 0x1F41C82F, 0xDA1F0255, 0xB4DFD88D, 0xD849E481,
+0x47511B6B, 0x60F128B7, 0xC71FBA30, 0x6484FF14, 0x081F59A4, 0x8D0E03C3, 0xF73FFEEE, 0xD370A4C9,
+0xE90C2C5A, 0xD1051B0A, 0x5B406E73, 0x0253B937, 0xB5825B41, 0x0E08CBEB, 0x2540BB95, 0xBA269837,
+0xA6A64183, 0x75AB691B, 0x9464AB58, 0xB71D6221, 0xE8C20E0D, 0x7271F146, 0x9DE3DF5F, 0x26AE6869,
+0xF421E1DD, 0x3404D8A3, 0xD72977C6, 0xF677CB8F, 0x03B27094, 0xC3DDAE8D, 0x603A2944, 0x2DB82FE7,
+0x4BE667D5, 0xD7BBE9F4, 0x591FD881, 0x6CCBBD81, 0x98A4D1AA, 0xBDE3C303, 0x256C09CC, 0x8E70A46C,
+0x1EF71B67, 0x72AB6E39, 0x0211EB0C, 0x8568F97F, 0x312EF63B, 0x7BC5A063, 0xC7F7909B, 0x2261DD02,
+0x12665814, 0x87891D27, 0xF112753C, 0xFC2FD003, 0x1E6AED4B, 0xCBE6CF42, 0x1E76D5F3, 0x1EDE2C59,
+0x6F49FBDD, 0xAC9570AA, 0x57B7A227, 0xBB13CC88, 0x5B2E5B27, 0x0883D368, 0xB6BF3F48, 0x28817A7C,
+0x548CA675, 0x76E6F32B, 0x0DE47FCA, 0x500911CF, 0xEDF0BBBB, 0x1A9BD3CF, 0x15E51651, 0x07BEDDBB,
+0xA6B42A51, 0x944C715D, 0xEA6D2A7B, 0xC081547F, 0xF646EACB, 0xEB33B3FF, 0x409A1873, 0x7B0D3803,
+0x24442C5E, 0xF896B0C9, 0xE9CEF1ED, 0x49522AFF, 0x6563635F, 0x38CE90E8, 0x52FC9D20, 0x8899E4A4,
+0x8AFFB654, 0x25177857, 0x04A25A82, 0x3A58CC51, 0x1791F9BD, 0x34CCAF63, 0xFDE7ACAD, 0x7AFCE413,
+0x3CFE4D87, 0xE4220AD5, 0x8C94A9AB, 0xE19679C4, 0x83CB3812, 0x33EF71BA, 0x3F0614F6, 0xA4AE550D,
+0x5FBFA0FF, 0x58EF25FB, 0x5C7B61C3, 0x0C0F360B, 0x6577B249, 0x78A71FEB, 0xAF8B5BCC, 0xB526493D,
+0x7E6EB21D, 0x35D8A15F, 0x80202E2D, 0x617E3637, 0xC1067968, 0x90073D31, 0x804EBD21, 0xADF4B2FB,
+0xD98D347D, 0xE1046232, 0xC206BA40, 0x28EC5763, 0xE97CDD31, 0xFB92D693, 0x7CD8A6BB, 0xC1A36860,
+0x54AEE49B, 0xB5E197A5, 0x1DBD0BCC, 0x8ADCE769, 0xB0EF92A1, 0x67F837A7, 0x31D77480, 0x01B58F6C,
+0x0D2E65EA, 0xB763D671, 0x50AB08F8, 0xF364B855, 0x07BCEA03, 0x31C66946, 0x15B578E3, 0xCDC551DF,
+0xCEF7DEE1, 0x4BF8CFEA, 0xCBAC5C80, 0x55BBDE0E, 0x957FCB94, 0xBCCCDDA4, 0x83703D0B, 0xA09AA568,
+0x7B3AE73B, 0x06909FA1, 0x0BE3C08E, 0x88A71D55, 0x4B64CABA, 0xC2219398, 0x745B5F41, 0x57B158B7,
+0x8F9A506A, 0xB767B9D2, 0x6813E081, 0xCB8D0699, 0xCE6BC521, 0xAA59A0FD, 0x9674B29D, 0xDF4EEF20,
+0x7E23FC20, 0x9F109B19, 0x5F040E08, 0x19D4A1F2, 0xE5F5DAEA, 0x11CE4CF6, 0x557CC533, 0x333C02E1,
+0x25329C32, 0xB3F2BCC3, 0x5E38F468, 0x847AA36F, 0x7CAF686D, 0x036DB290, 0xE8B597C3, 0x7EE69820,
+0xC051CDD7, 0x310C9102, 0xC7159D50, 0xF8FFC415, 0x85466F67, 0xD85FDEA0, 0x9C1A0D47, 0x4342A4B1,
+0x64D39C2B, 0xAF604691, 0xE230E58D, 0x342B9F75, 0x3749C62D, 0xBBB31AAD, 0xF61A9BB0, 0xE44DAF62,
+0x92720FFA, 0xD9E43834, 0x017EDE63, 0x3FCF2E22, 0x79A61738, 0x8611DBF1, 0xB1226723, 0x7FA9D530,
+0xB151F0F6, 0x6FA06DA9, 0x0466EAF1, 0x620BA670, 0x816CC56F, 0xB84A6367, 0x5C2D30F9, 0x932BDF93,
+0x5EB32EDA, 0x7E274642, 0xC76288B9, 0x0D7F314A, 0x795CC5B7, 0xBFA0AA3F, 0x90F5A8D6, 0x7A9B84B1,
+0xF61E5CCF, 0xE4D2FBB3, 0x1631E0A0, 0x6E2C2057, 0x20291321, 0x547EA6C4, 0x9DA77B83, 0x24198B8D,
+0xE7CB9241, 0x3C25BBC2, 0x2B4AAB73, 0xDE29DB20, 0xC577F74C, 0x210C034E, 0xDB6C016A, 0x8CF4173C,
+0x6B4B801C, 0x28B23E83, 0x86023720, 0xEB4B61DD, 0xF51914D2, 0xB080739B, 0x6A0D0877, 0x9E89F55D,
+0x2439BA55, 0x888492AA, 0xB9E791D8, 0x46087013, 0x8A7E6616, 0x42E97759, 0x81692EC9, 0xE28E3293,
+0x7FB5BEC4, 0x6D64BE40, 0x00DBE667, 0xE62214C9, 0x4FF556A6, 0x1166421E, 0xB16C693F, 0x2B8704AB,
+0x8EC0DCEC, 0x027FCDC2, 0x22A26703, 0x085915E4, 0x3339696A, 0xFCA29D61, 0x850E4403, 0x26A6F64F,
+0x172A5CCF, 0xD2395C9C, 0x9354CADF, 0xC1141186, 0x4686D4C9, 0x27D506CD, 0x93CCB83C, 0x6CA02ABC,
+0xB16F665D, 0x17FD44E5, 0x0D77067E, 0xDE64C905, 0x7BB0D6B4, 0xC1B9231C, 0x21FA7642, 0x641EEC66,
+0xCEB4FDBC, 0xC4553F1A, 0xDE398B29, 0xBF7B27EB, 0x858B5E35, 0x8E107D0B, 0xA093094D, 0x64098AA1,
+0xE3B6CA55, 0xFAAED90B, 0x7D88BE2E, 0x8542073B, 0x69931A16, 0xD3972707, 0xC664A2EC, 0x9020EE1E,
+0xC60B4D97, 0x6FEA5D91, 0x912B2E7D, 0x0072FB34, 0xE4750885, 0x4A50C3A2, 0xFDECD74B, 0x430AD15F,
+0x841E2DBA, 0x3A16D4E8, 0xAF9E6983, 0xB77CE88A, 0xFFE4CA0A, 0x79360593, 0xA969C84B, 0xF3D3F07F,
+0x0227D76B, 0xEA52F9B8, 0xF16A7793, 0x68C4339B, 0x5EC40D62, 0x958C22D0, 0x9726DEF9, 0x907AED99,
+0x2AF90495, 0x3725268C, 0xE0C67F54, 0x5B736AB3, 0xF329A03C, 0x08F7B3FC, 0xB64C0840, 0x52FD6F7A,
+0xB1AA5ACE, 0x0B572845, 0x116D3EE5, 0x54928511, 0x9DC36715, 0x7F62DB6F, 0x8607235C, 0x33219DF3,
+0x2EEFC9FD, 0x493D8B5C, 0xCE83AD67, 0x63E31FB0, 0xB6762DA5, 0x2D0152AA, 0x8FFE0EFF, 0xBDC175A4,
+0x9C7BD4AC, 0xC075E69A, 0x5131B014, 0xB39161C4, 0xDA158989, 0xA4F10A21, 0xF8BFD299, 0x5E1B6D68,
+0x5E05B312, 0x38A88B5F, 0x1B768F8D, 0x99C73255, 0x6368A801, 0x07C542DB, 0x83B22794, 0x7191CC01,
+0x86FB3311, 0xC43005CF, 0xEA9E698C, 0x17F7DF69, 0x216F3C4A, 0x1F5B2909, 0x6D126D1E, 0xE4D14F0A,
+0xD82815B2, 0x88440B2D, 0x99A79141, 0xD77AF9F8, 0x5113B540, 0xBE8A96C7, 0xBFF81CCB, 0xD8674891,
+0x30D208FD, 0x1750ABC2, 0x65347EAF, 0x4840A0A5, 0x5A836ECB, 0xF50B31B2, 0xB3C9D137, 0x2BA53194,
+0x086D9CA1, 0x706CCDA7, 0xD3B620B9, 0xBBE8260C, 0xE4A2B9D9, 0xC26D941D, 0x01025610, 0xF405C33F,
+0x6905B777, 0xF074685E, 0xFB5725D9, 0x7B6D1F82, 0x3D62B5A9, 0x4816B7CD, 0xB95CE9FF, 0xBA570886,
+0x3815227F, 0x4338CABB, 0xC9666BFE, 0x0DD89302, 0x10FC8106, 0x7304899D, 0xF0025FDB, 0x56E0EE5D,
+0xEE906ED2, 0x1CEB7400, 0xE2138BF6, 0x7416DDE3, 0xB2548FFF, 0xD5F9396A, 0xD80E7963, 0xE2FD180A,
+0xFE63C6ED, 0x05F00542, 0x640AA9AC, 0xBFA928D3, 0x5CA2F73F, 0x74E1C428, 0x3EB2F578, 0xC32D0B10,
+0xDC860CE5, 0x27E5CC29, 0xF8940750, 0x14719247, 0x2B1C8DD0, 0x3F46FCF9, 0x1F051C8A, 0xDA0F90F8,
+0xB8106090, 0xC5C794EC, 0xEB09724A, 0xF0435FEF, 0x10046AC3, 0x29496D7B, 0x42E108A8, 0x4D6D592C,
+0x2B003188, 0x4504F7C3, 0x607AF1D5, 0x567ED6AD, 0x2468825A, 0xDF5C4D24, 0x54B2713A, 0x25A97B58,
+0x610F3C93, 0x92701C48, 0xA93921FA, 0x5C8380C6, 0x8BEF8017, 0x36CD97DB, 0x6BE0D5B8, 0xB21585A6,
+0x8841C64B, 0x9C835E6E, 0x9168FEFC, 0x04006CDA, 0x750CFB51, 0x2EE9B013, 0xCF8613C7, 0xE7F71332,
+0x2A7E0C2B, 0xB1A7490E, 0x8B0C1BAD, 0x0AA27F5C, 0x43A85317, 0x1E9224D1, 0x9260CACC, 0x78ED4315,
+0x9CD49C77, 0xBD50DD96, 0x6B15F3B4, 0x122371D0, 0x5AFABD63, 0x06F81E70, 0xCC115B06, 0x3F5BB9AE,
+0x1364D487, 0xB855D6FD, 0x84B81F77, 0xCAB1E211, 0xA30B4218, 0xB53BBEF6, 0x0916F46E, 0xB780641F,
+0x0DDBB047, 0x070F0370, 0xFC3E6805, 0xBCA406B6, 0xC0F75AC9, 0x35543AAD, 0xE4FB0FF6, 0x49A862AA,
+0x814616D1, 0x2C7D184E, 0xDBA3D207, 0x9A888A1A, 0x31DE9950, 0xA03E4358, 0x60BE4490, 0xB5878EEA,
+0x054DD24E, 0xC9AAC65E, 0xAD1D5370, 0x8857E32D, 0x8C58CA35, 0x58FC1331, 0x28CD64F2, 0xF5FD9627,
+0x61DA7B45, 0xD0387A31, 0xDE7681B9, 0x61B2D3EB, 0x51A1BA3E, 0x904D8874, 0x0B108422, 0x0019B1C1,
+0x086A6790, 0x861E3D4D, 0x41834A0B, 0x227410DF, 0xBC25F680, 0x59A7538A, 0xED183267, 0x4C6BE093,
+0x49EDFB31, 0xD43A84F8, 0x481BB5D3, 0x6FAF6EBB, 0x6D2EBFF5, 0xB726B428, 0x1820FCA8, 0x38F2C404,
+0x776102FB, 0xB09D5A04, 0x4C21B069, 0xB9435885, 0x37E71BCD, 0xE750D2D5, 0x494564D2, 0x1DDE364C,
+0xADC3D7EC, 0x2A7DFCB3, 0xDFBC55D0, 0x9CC3208B, 0xE42DDBD1, 0xC4CA8D22, 0xC0409475, 0x01000000,
+0x12009E01, 0xF47F122D, 0x6C1C0EF1, 0x31E87BA6, 0x61CDB47C, 0xB2E0E87B, 0x9D1CAA62, 0x47BC0613,
+0xB31E1513, 0x2FB530C4, 0x1797485E, 0x19F690EF, 0xAD96F5B7, 0x9ABD35D5, 0x57520BE1, 0xD0052B81,
+0xEF02735B, 0xB4DE5085, 0xB7E9B2E4, 0xBEB32F54, 0x4AFB3117, 0x25993FFC, 0x1E5DDC6D, 0x54DF00FE,
+0x3CCE03E8, 0xC3FF724C, 0x1B3A5503, 0xD7605FB8, 0x9FA226D5, 0x6ACEC972, 0xA86BFC4E, 0x0A3C46D4,
+0xAC672434, 0xDA1DA04A, 0x839339E4, 0x945AF75F, 0x1901F6B3, 0xA343C960, 0x5ACC114E, 0xC10DB08C,
+0xDBCBCE24, 0x81A89D85, 0x3AAFBD19, 0xD19B4BB0, 0xA4622358, 0xCB066E4C, 0x5BF4FE70, 0xDF46CB2B,
+0xEE83F519, 0xE9CBDF56, 0x71EF6DB0, 0xE3059EAC, 0x36A736A2, 0xCB0B5843, 0x3190F429, 0xF2720899,
+0x37C0C5DF, 0xFA2890DC, 0x97027A24, 0xAB378354, 0xF874DABB, 0x2F156F56, 0x5C21C871, 0xBE5D8831,
+0x5D978A88, 0x2E4B283B, 0xBB52FF6F, 0x66902546, 0xAA41CB07, 0xA83E8365, 0x03F1F546, 0x58A6C917,
+0x0B712427, 0x8C5D133C, 0xAE327116, 0x6D4200F2, 0xCF042C7C, 0xA2C9A887, 0xF5F827CE, 0x1ACCB1F7,
+0xE2E10F35, 0x5CAFCFD2, 0xE94E1EC5, 0xD28571FA, 0x8F98D813, 0xD67F8E47, 0x16F89480, 0x601B9061,
+0x0C8FFBF2, 0xD41D9D79, 0x07F3ACD3, 0xD676EEAD, 0x90DBDDEB, 0x02F35D61, 0xD8D35039, 0xCD66724B,
+0x8B606E4B, 0x039EAC49, 0x254CCBE0, 0xED7AA6EE, 0x841BE1DF, 0x8F93A0E8, 0xEFBA16AC, 0x4FDBAE98,
+0xC497D13C, 0x914E962E, 0x29127CF5, 0xCC7D8C96, 0x8F0BA1FC, 0xBF8C2A64, 0xE2F5734D, 0x23BBD9FC,
+0xBDE94C00, 0xD28C2283, 0x562E7C36, 0x6DF8BA24, 0xEE5A771E, 0x3C8DEFF0, 0x1794895C, 0xE0218066,
+0x74806EE7, 0x0AC91429, 0xDB443F95, 0x6A7052D4, 0x725DB554, 0x898D83E3, 0x58DFE728, 0x339FE8B5,
+0x0E36B667, 0xF3BC84A8, 0xBCEB8682, 0x5795B2D4, 0x856CA6FB, 0x26401F49, 0xCF4A38CD, 0x5D9DC2F6,
+0xC40BA55C, 0x241B5D12, 0x0C647350, 0x9035496F, 0xA3B7BE74, 0x94EFBF23, 0xE28BCA9A, 0x6C0CA5FC,
+0x320B91BD, 0x701C1EBF, 0x6D2883E4, 0x5710E6C6, 0x0F5106A6, 0x16BD61D6, 0x922C740F, 0x030939AD,
+0x8F493B77, 0xF744F335, 0x96347159, 0x5D507195, 0xF2D10C9D, 0xCF28BD16, 0x11EE48CD, 0xF8DE0BE9,
+0x73DC86F0, 0x04DD75E1, 0x7676B50B, 0x8F4180D7, 0x5A5F43F7, 0x144A74B4, 0x3CFCA8C6, 0xE05DE765,
+0x6E3F11ED, 0x4EF613F6, 0x07D7C2BD, 0x1F49684D, 0x2A36D56A, 0x7FE1EC29, 0xEF104CDB, 0x2129C50A,
+0x0113CD8E, 0x8004679C, 0x7CD8E6CE, 0x56D6FAB6, 0x0200EABC, 0x93F47063, 0x662F790C, 0xD2CD2EEF,
+0xDAAD2FB7, 0xB9EB1523, 0x4964E20B, 0xDBFBC515, 0x3879A024, 0x110408DE, 0xFA17D3FB, 0x1D343EAC,
+0x50C6772A, 0xF0614295, 0xE01AC1E7, 0x5E75CD41, 0x54460CE7, 0x5EEF2061, 0x6770FCEE, 0x7D45E6EE,
+0xC99F110B, 0x2D6C887D, 0xDFB3783D, 0x5D3CBEE7, 0x5D34242A, 0x7145AEE6, 0xE26EC949, 0xF1F8C630,
+0xF7187016, 0xAE4D468E, 0xE05F70E7, 0x5F20823D, 0x1809E591, 0x900B09EC, 0xF5BC8E11, 0xE8D7B23F,
+0x92755D8C, 0x9C45B2FB, 0x232955BE, 0xC1510138, 0x6FACAA15, 0xE1C24433, 0x6C20F56F, 0xC2296F72,
+0xCBD8D379, 0xA7C7C5C1, 0xD01B060D, 0x53E80668, 0xB5649999, 0xC6131FEA, 0x558EB687, 0xD768FA78,
+0x9B7C343C, 0x5E7FA411, 0x6D69AC4B, 0xCF54F48F, 0x32FBA958, 0x140C4E33, 0xBCB14483, 0x42E6F4EB,
+0xB2835556, 0xA6DEB2D6, 0xD9845F50, 0x21D8791E, 0xB418A2B0, 0x34B30E3E, 0xAA99D03B, 0xFED4684B,
+0x261C87BA, 0xFABAF219, 0x5D65794B, 0xA3CFEC3B, 0x3A5E4F30, 0xD9415957, 0x8A2C3F63, 0x841831F1,
+0x1EF50715, 0x51C06187, 0x90C7A2F4, 0xD85BE9B8, 0x7BE4B8A6, 0x977EDDD8, 0xDF948E08, 0xA979EE52,
+0x92F32F23, 0xCEF941A3, 0xD0F417C3, 0x3B67F223, 0x5F39615F, 0x6BC82946, 0x6760D7BC, 0x4B8AC244,
+0x97CFE734, 0x41880AE9, 0x34B3F0DD, 0x7FE126EB, 0x3C2D9AF7, 0xF4F80263, 0xDB0BC195, 0xB60D9C31,
+0xBB662A43, 0x6C34CB8D, 0x19DEF910, 0xF5061E21, 0x8FDA7DB9, 0x5D28A819, 0xB11B9498, 0xDCBF0D92,
+0x00C0F0B2, 0x01010000, 0x2F12009E, 0x56FB7F12, 0xE917DE00, 0x5D609B40, 0xCC6C2A63, 0x9340D6E9,
+0xAC6F22FC, 0x587F9E98, 0xD2CF46DB, 0xBEEE49C1, 0xDE1E8AFD, 0x50C22AE1, 0xC23FFC53, 0x8F05482F,
+0x41444C91, 0x0AE31210, 0x4045D6D1, 0x94ADF0C8, 0x2C199E8C, 0x8B96091D, 0x5C83DB95, 0xB953B37C,
+0x394BCA0A, 0x09FFCB49, 0xF6A8D79F, 0xBF376B69, 0x9A127185, 0x84FBD2F3, 0x5AED20CB, 0x6CAAAD55,
+0xBFD3884B, 0xB26CBB70, 0x82ED35C3, 0xF7208DF5, 0xD5F9DE30, 0x03805642, 0x9FB5E81E, 0xB343B575,
+0x1F65EF5A, 0x2E9B0436, 0xD81F6764, 0xBDA9803C, 0xE2256FA2, 0xCBA125BB, 0xD1E4C25F, 0xF514555E,
+0xAE8735FF, 0xE08A7675, 0xC5A8F373, 0x9EA20AE5, 0x23CEA0A6, 0xCBEA4589, 0xB982D683, 0x82E58B7A,
+0x8E1F64CD, 0xF7794B53, 0x1E6CFAAD, 0xC4399813, 0x44867E52, 0xC7A46E78, 0x40DC3611, 0x37F19FF0,
+0xB0C15760, 0x8D2AD48B, 0x906B7AE7, 0x689F3933, 0x1EBEF049, 0x6252DA36, 0xD38243DE, 0x548E594B,
+0x4D6FB1FB, 0x3886B8C1, 0x22EB53AC, 0x5AAD8D58, 0xCE5E6E2B, 0x0B02FB03, 0x2C2F871A, 0x51F2A331,
+0x0F68444A, 0x3EE25E95, 0x03A62A45, 0xDE28953B, 0xAAF87D48, 0xA5D98935, 0x016ADD63, 0x7EE50076,
+0xE7FD802D, 0x8F7B15B0, 0xA788C5B3, 0x4344EDB9, 0x49A3A95D, 0x23AC822F, 0xCC9FD378, 0x13F3B730,
+0x3D402ACB, 0xE395E5AE, 0xDF4AABE9, 0xE9AA6BCF, 0x81F1C344, 0x54E55C03, 0xFC019611, 0x28364DFB,
+0x07D1AC80, 0x98D4A670, 0x38A4EEBC, 0x5BA0D625, 0x49558F5C, 0x70BD0F58, 0x110201B2, 0x502FA6A4,
+0xE1E43B82, 0xE66C801A, 0x5CC4E867, 0x0F23066C, 0xBB388052, 0x4F150461, 0x8B4A89E0, 0xDD3DCC99,
+0x1D773CE5, 0x19C79CA2, 0x9D4229E0, 0xA0297CAA, 0x6A3AD7B7, 0x361AAEFD, 0xDEDE48A7, 0x8D2CB728,
+0x4ACC33DD, 0xDE6DEA86, 0x7A2F1EFC, 0x2530B3C9, 0x2D545072, 0x28859084, 0x484D8FDF, 0x2BF24890,
+0x670E35CE, 0xC2044272, 0x2001EFDE, 0x0F2CCEE3, 0xF6E5123B, 0x10970EC8, 0xB13BADD6, 0x5DB8B944,
+0x1BD93007, 0xBB9602AE, 0xEF0E4479, 0x0261E3F7, 0x4F10F161, 0xDBB85583, 0x36FD7726, 0x9021793C,
+0x8060A6F6, 0x08E660D1, 0x1C0F9790, 0x05097E41, 0xD71475DD, 0x5F9F8DEC, 0x9330E014, 0x9F4FCB34,
+0x0C1FB7FF, 0x1495C5D8, 0xB9B546DD, 0x9CD7B8C5, 0x5AEA9302, 0xBCEC397B, 0xF10AE534, 0xE072356C,
+0xD44CC662, 0x500C1BDF, 0xAB8A1286, 0x4596E949, 0x39A11028, 0x3D0EC4AB, 0x0358CB76, 0xE5161408,
+0x13544AC2, 0x87C4496B, 0x8A1D846E, 0xED57204F, 0x3D11C1BE, 0x8CD8E537, 0x6726D185, 0x44D78E45,
+0x563CAF05, 0x8F279987, 0x50E1BE2E, 0xD05C0101, 0x70181A37, 0x036CA5FF, 0x1F40E598, 0x59DA4F1B,
+0xE1D4F8BB, 0x484F2F93, 0xE3847796, 0xAFD0902B, 0x75944FE5, 0x57909AEE, 0x2B0380EF, 0x26A66B3E,
+0x846126FD, 0xFE8871A6, 0xB7746E4E, 0xAE48A97E, 0x7C590317, 0x0DA86C64, 0x4624E03D, 0x60EDE51A,
+0x40B85C36, 0x26D9331E, 0x2759BDBC, 0xBC837AD6, 0xCC8652AC, 0xD7193733, 0x82BF2518, 0xBCB1620E,
+0x2EDA6C4F, 0xDBE67F6A, 0xD0D1E877, 0x62328575, 0xCDC60ED6, 0xB85AA702, 0x62ADCEA8, 0x49A5C644,
+0xA4F4DD25, 0xCA9BD3F1, 0xA6861430, 0x2CF5E2DB, 0x4D1570F7, 0x6AFA5BB1, 0x4A6F7528, 0x7F0AF481,
+0xBE61E989, 0x43AE3DE1, 0x70C0EF25, 0x89E434BE, 0xDDEDC86E, 0xCD909F10, 0x45BAFB3C, 0xA174CC22,
+0xFB1DE273, 0x078359BC, 0x614713A1, 0xE8D508C5, 0x1A9C783E, 0x1805FD8B, 0x71DE8EDF, 0xF09AC6A8,
+0x741F1CE8, 0x3D6D4806, 0x89014656, 0x82E2CE7C, 0x259BF913, 0x971C1108, 0x9FDAD4CC, 0xD716DDAD,
+0xD648C48D, 0x6745F318, 0x2BD134A1, 0x3FC16512, 0xB991661A, 0xE0E91A04, 0xB433F08F, 0x8DFD4EF8,
+0x23A801B4, 0x01A350E2, 0x5516874E, 0x17A82161, 0xCCCEA059, 0xF3813437, 0x50D6615B, 0xD08EE4C3,
+0x01000000, 0x12009A21, 0xB6E23F36, 0xCFBE5CF6, 0x98FD0E8C, 0xA1FD3F0B, 0x67603E44, 0x6F99CA47,
+0x6D1CA9AC, 0x22732A5F, 0x24F29631, 0xB20F6F85, 0x22B92E53, 0x6C85ADE1, 0x733FD6BD, 0x1BB7132E,
+0x249549C2, 0x85E90034, 0x48853CA1, 0x8C283803, 0xAD4E9DFF, 0x05DD9FFE, 0x3F89A0BD, 0x4F30A3AC,
+0x87711D0E, 0x8519F0F6, 0x3EB52BA2, 0x8D27128C, 0xAA75B842, 0xBA6DAF7E, 0x5520D22E, 0x0D66D1A6,
+0xE5C3EBDA, 0xE54FE083, 0x9AE8141A, 0x72C83A30, 0xDD3C828C, 0x411E0589, 0x5CC67BC7, 0x52B8AD19,
+0x48BFD791, 0x378A328D, 0x11F2911D, 0xC4ECD26E, 0x3551A131, 0x3468A7EC, 0xC1333D5D, 0xA07F5A40,
+0x60D9EBF0, 0xCABA4A34, 0x23A6C5B5, 0x3B38B03D, 0x37FE674D, 0x92B730BF, 0xA24D325C, 0x350B8E94,
+0x512DFB92, 0x220D8E75, 0xA33B97E9, 0x2ABDAE0E, 0xD2BEE105, 0xD4C5F0DE, 0xCF2A63D1, 0xFA92F255,
+0x296A76E3, 0x52FFDB0F, 0xC97D7BB9, 0x8386DF30, 0x76DB9C65, 0x9AAE3AE4, 0x2BD0DB37, 0x0817EB35,
+0xE6265B02, 0x6B1FB4E3, 0x4AF839DA, 0xFBC9FC68, 0x7C53F368, 0xEE116F90, 0xB1A0F174, 0x7653C460,
+0x21ED6828, 0x89186D6F, 0x63A41018, 0x5D71B46F, 0xF5CD1A82, 0xFE769FBB, 0x0BB9DD67, 0x242915AE,
+0xC9B1D499, 0x15C203F2, 0xD7174A28, 0x11CB597E, 0x9A87B055, 0x7EFA3AA6, 0xD56CBB1D, 0xD084A058,
+0x80938051, 0x14DFDD62, 0x6F501948, 0x8CDD92AB, 0xB7021831, 0x41C71EEF, 0x70B2B899, 0xA479811B,
+0xD7731F0E, 0x0CB30B85, 0x2415BF22, 0xB1AFA37A, 0x4F2888DD, 0x96176877, 0xEB53995C, 0x4A0AF847,
+0x6BA9CB5C, 0x72245A02, 0x3B3E9786, 0xA4F04A6B, 0xD2F47154, 0x1E77CB43, 0xFAD8EBB1, 0xFD101E8A,
+0x685B8E2B, 0xB6CC962A, 0x29D1821D, 0x851259BF, 0xCE790169, 0x1BE097C0, 0x640C3AE9, 0x725A2487,
+0x708045A4, 0x86C9343E, 0x41EC4B78, 0x4D66CF4A, 0xBFDCA9C1, 0x3B495835, 0xE4054BF3, 0x3828D88E,
+0x43E036AB, 0x7FBCF887, 0x7B656BF6, 0x09BEFA0F, 0xBCF32016, 0x69156E8D, 0x5D6DE83F, 0xFCE50293,
+0x5F33E2AA, 0xA76381F0, 0xE747E558, 0x681F7EB9, 0xF59CDA43, 0x7B5D7549, 0x5D6F7832, 0x9935A760,
+0x5590438D, 0x979FAF44, 0x0E3895A0, 0x96E2E550, 0xB76BDBF1, 0x0FF222D2, 0xC63F6525, 0x34B3F703,
+0x4CE2B805, 0x00AB132B, 0xFB988A02, 0xB53AC2BC, 0x4A69066C, 0xDD847978, 0xF5E6F7E7, 0xA2210169,
+0x803C3A8B, 0xE01C0C45, 0x0F45C3E7, 0x9DA265FF, 0x67D8A894, 0x9651B07B, 0x41AE8566, 0x96631E44,
+0xBB23B561, 0x5818C361, 0x6A02DE08, 0x6C47FF3D, 0x202D6EC8, 0x5AC60781, 0x1ECD3EA2, 0x45679B0C,
+0xCF4EDC07, 0x43D4DC97, 0x4F3A3E25, 0x7BD5D150, 0x9D462CDE, 0xFDC499F0, 0x3165A808, 0x99B34307,
+0x3CAFDB92, 0x6ACB8F22, 0x50ADC167, 0x4D39CD51, 0xDEC21459, 0xFABE7AFE, 0x6A711467, 0x503F015D,
+0x66A7F97D, 0xFAE5E4B6, 0x8E4CE33D, 0x752AF579, 0xC9EE8B54, 0x821272CF, 0x5DCD818D, 0x5839BADA,
+0x187E4820, 0x664D2074, 0xEBDC6694, 0xD3A14AB4, 0x72456EB6, 0x5184F127, 0xAC8CBB2B, 0x8EDEC32F,
+0xAC14878F, 0x046557BC, 0x2BD72794, 0x4ADD3904, 0xFADC9022, 0x6D59385D, 0xB52DC31E, 0x7F991F2C,
+0xCC311E3C, 0x92BAC038, 0xA538D489, 0x08F2C85D, 0x01C6782C, 0x4FD71E46, 0x2B5CE23C, 0xF57A3532,
+0x27EC7787, 0x54A50FFE, 0xCCA74166, 0xE732217B, 0x292A064F, 0x17A1DBEB, 0x8E86661C, 0x7BD144A4,
+0x2E53429A, 0x2D63737A, 0xEB340BFC, 0xF1A27942, 0x20C22523, 0x76D868C9, 0x0E435400, 0x50FD292D,
+0xB1866FFC, 0x533D3A78, 0xB2CA7402, 0x5AF80F6B, 0x7B59E54F, 0x33BC9EDC, 0xC1842D45, 0x6FCC2096,
+0xA94893CC, 0x2A8B40E9, 0x81D37C34, 0x6A4B5C85, 0x278441E8, 0x8683D376, 0xEB326FC7, 0x1B2A2AD6,
+0x48328EEE, 0x697CAAE9, 0xB13DE007, 0xE068D58F, 0xEEF85C8C, 0x3219629E, 0xD55587FC, 0x03911874,
+0xC3D0CFB6, 0x781238D0, 0x69A06BA3, 0xA3DA69E2, 0xBD89A1A1, 0xC002C68E, 0xCB441E27, 0xFDBF9A9A,
+0xF1787CAB, 0x9E5F21D4, 0xCD2193ED, 0x725A1A05, 0x9538C0E6, 0x146B59EB, 0xB2C21C09, 0x346D3035,
+0x0DAD178C, 0x82BDD2BA, 0x3ABE5B52, 0xF5ABE8CE, 0x420146FC, 0x9F824B33, 0x1C640283, 0x6056DB92,
+0x64A696A5, 0x63E79D4E, 0x00FC0CFE, 0xB6DF2C4F, 0xD3A51137, 0xF7905F73, 0x390ED428, 0xF6D6C66B,
+0x2086B17D, 0x6C412DF5, 0x13857E66, 0x2DF7EA78, 0x89A796F3, 0x3E3CA6FA, 0x8BB63CBA, 0x63DB4D89,
+0xB4525A19, 0x1DB7E091, 0x25A8B709, 0x9BCC9097, 0xC26D9C12, 0x4C3D0C8D, 0x7F1216B0, 0x258F4002,
+0xD924DBC9, 0xC4F12509, 0x1D265F3B, 0xED2EC929, 0x990C419E, 0x0112CCDF, 0x1C4F1FEC, 0x95E9F5E2,
+0x9B55B9C9, 0x9A916D4D, 0xF20752B2, 0x690753F2, 0xD5940F0B, 0xD2684D0C, 0x9BC5DE7C, 0x40BA3B2D,
+0x441AA592, 0x29FD7401, 0xA22CFE24, 0x9AA38300, 0xEDB82189, 0x329C9296, 0xB1B35768, 0x6A0A2A1B,
+0xD4E67122, 0xE7E9C324, 0x786C5849, 0xEEB07007, 0xB6897FB0, 0x09B2A092, 0x1B2EB1BC, 0xFFBBB82F,
+0xFC386EA2, 0xFF7CFD2B, 0x26C49B5C, 0x0FF57648, 0x6CCEA403, 0xEA42EF51, 0xCE149AF1, 0xE731EB3E,
+0x862F7899, 0x0CB943AE, 0x1CA0D8E2, 0x3EF6C358, 0x6DC5A693, 0x741EF913, 0x924E2E33, 0x47DCC833,
+0x36595E46, 0x658AA566, 0x31B99FA2, 0xADDD54BE, 0xE96DED76, 0xE9B5CFD0, 0xD92F7CDF, 0x06FC9EB9,
+0xCFE0D69E, 0x527D4491, 0x685D6F7B, 0x40DF174E, 0xE7E7EC53, 0xAF7C25CF, 0xE26E0811, 0xD70F3D9E,
+0x3EF423A8, 0xA5130D93, 0x5793D2AE, 0xAD3AE2E8, 0x6E42FE8D, 0x2A63428C, 0x59448AF1, 0xFFB115EA,
+0xB35CACE0, 0x2B34AB29, 0xF94DA82A, 0x1C7E0031, 0xCF8BD843, 0x415C9FB8, 0x22B7AEC6, 0xBE0B15F6,
+0xDEB0121A, 0xE8BD47B8, 0xC1741C27, 0x02128CF5, 0x37799765, 0x353423E0, 0x35624C22, 0xF9B0009D,
+0x0876EFF6, 0x249A0AAC, 0xFEEC468C, 0x02549AA0, 0x865E9EE4, 0x23E7943E, 0x9099B2CF, 0xD69B4BA1,
+0xC8BE0B12, 0x8AD43DA1, 0x3011C393, 0xE89C0DF2, 0xCEA422E8, 0x54E78389, 0xFE9C8B06, 0x396E13D7,
+0x10C408F7, 0x75EEA79B, 0x624BA193, 0xC48D24C5, 0x89D81DCC, 0x498A2FF7, 0xB69AEF49, 0xA396DEF0,
+0x56150658, 0xAD1A3A56, 0x93D6CD7D, 0x596D6A3A, 0xF0841B94, 0xC20EC5E1, 0xA381CEFD, 0xA72155E2,
+0x668FB70E, 0xFE736530, 0xA6BB2380, 0x961DBAC6, 0xDBAD5A0F, 0x38F7190D, 0x55F8252B, 0x186EC65F,
+0xB2A56148, 0xEDD55F3E, 0x9AB5BB73, 0xA5AF7614, 0x95D70705, 0xAE28C589, 0x418CB134, 0x187AA890,
+0x3D5CB60E, 0xD3DCDA90, 0x1E0CEE36, 0xCD088AA4, 0x2B426F9B, 0x6FA29C4C, 0xE2528315, 0xFFD04DF3,
+0x11D66582, 0x5916D357, 0xCAFABFF8, 0x09B4F04B, 0x1F90B498, 0x600AD321, 0x694A73B2, 0xBE161CAD,
+0x92DC74D9, 0xF58140BC, 0x32BD540A, 0x0B7206A1, 0xA858F8EC, 0xBC405E10, 0x6F935C51, 0xC1EB868F,
+0xD59AF605, 0xC3CF0C61, 0x53891A87, 0x3F86E7D3, 0xEF51C625, 0xFCCDE33A, 0x7438A83C, 0x29E6B9A9,
+0x732BCEB2, 0xE7170FB6, 0x2E369D03, 0x70884458, 0x62762AC7, 0xE402BB1B, 0x0C9B6912, 0x59554C13,
+0x053CD81F, 0x4CFBF76E, 0x52C3B4F6, 0xB4630770, 0x31BDF86F, 0x9B818C3B, 0x321CD53F, 0x73C30081,
+0x4AA45FEB, 0x77866275, 0x6DAE5EB2, 0xEFA030B4, 0x7C0D45CF, 0xF1AB0615, 0x35BF6E31, 0x12F97355,
+0xB395AC4F, 0xC8157C04, 0x4EEA24C7, 0xD68662E2, 0x468B3441, 0xD79476F0, 0xFF172665, 0x39790E32,
+0x178795C1, 0x738C391F, 0x66B57B76, 0xC2A547AC, 0x75013A8C, 0xC76776F7, 0x80435B49, 0x61F296BA,
+0x1D840B1C, 0xE8847703, 0x73BC0719, 0xA6E5891E, 0xE319F9CA, 0x8BA219B5, 0x6C82923B, 0x5DC7BD84,
+0x8C3483FF, 0x5EBE2329, 0x6901B177, 0x155189FD, 0xE1CEF256, 0xE3C185AE, 0x4507F7FC, 0xD2759D3C,
+0x855A0148, 0xBD731FFA, 0xAFD4C6DD, 0xB9B1193E, 0x2CC15184, 0xD1FA14F0, 0x07B64673, 0xFED81B29,
+0xC5874EA5, 0x514C0BC8, 0xA8F51778, 0x81648CBA, 0x9F634A3B, 0xB3D4575C, 0x3FE4F84A, 0x14AC9EDB,
+0x3151CA5A, 0x481D9561, 0x0FA1D97D, 0x6D4DDDFC, 0x0DE7C613, 0x2990E7AA, 0x2DBC569E, 0x3FF4D8CA,
+0xBD85955A, 0x85C4060C, 0x11278163, 0x505A6CD2, 0x9802EFD3, 0xEFC96B08, 0xB02D4012, 0x01E5DECD,
+0x206B6DFF, 0x2D9DBF57, 0x1333B259, 0xCA7E79F9, 0x5204F2CE, 0xF70D41CD, 0xE9A30E91, 0xE96BEE88,
+0x84521345, 0xB9FE8E7D, 0xF28CB2C8, 0x373A00E6, 0x1FA33438, 0x937629A5, 0xD9E8F379, 0xBE1F6B53,
+0x8F5A85F8, 0xEDF8FAE5, 0x6CA65037, 0x456B8559, 0x873C5022, 0x50AC97AA, 0x079D90B2, 0x45BDEF00,
+0x639206AB, 0x38E9FFF2, 0xC45AD804, 0x3DB2D944, 0x79CD2E25, 0xF54D3174, 0x1569783E, 0x41834574,
+0x8310125F, 0x329B6A7F, 0x73D74A87, 0x8431CB98, 0x847A46BB, 0xA0A4A071, 0x35ECDA3F, 0x8F88E8F9,
+0x7EE57C54, 0xC234FA49, 0x43424CDB, 0x1533645A, 0x17FDD187, 0xD66DFCDD, 0xE9278188, 0x501FB204,
+0x354B1A54, 0x2D1A9582, 0xEAA38B9D, 0xB48278C5, 0x684B582D, 0x7680863F, 0x586D58F0, 0x73B6AE46,
+0x90A56B79, 0x500B86E7, 0xB4403914, 0xC8DADB52, 0x33D13E8D, 0x169430D6, 0x70F62EBD, 0xFA63D95E,
+0x3E2B8209, 0xBAB9C0AE, 0xCB1C866C, 0x21A353DB, 0x98345297, 0x600892BB, 0x3DAB089D, 0x6086074A,
+0xE480FC33, 0x10F1D8B3, 0x696AF680, 0x5DE54EF5, 0xBCE8885E, 0x894A9D84, 0x15B857AD, 0xDAAAC52E,
+0xDB583098, 0x972E44B0, 0x3D6E38BC, 0x74B5484A, 0x8527F00F, 0x4DF5CFCC, 0xA9D3D174, 0x74E34F2B,
+0x0D04D788, 0xFE353DC2, 0x4D7B049F, 0x05A5E3B6, 0x24BEA6F7, 0x0D888537, 0x110E9DD5, 0xBCC90C95,
+0xF5AB8241, 0x1F9B8514, 0x007CBABE, 0xEF8A47A3, 0x2BC5F75C, 0x5FC8FBE7, 0xE0A835FA, 0x858AE140,
+0xD0BD15B2, 0xB5B46F80, 0xD2C661BB, 0x6BF309D3, 0xF81C99C5, 0x62BA6F50, 0x9AA8F33E, 0x7F4F5CDD,
+0x00BA16C4, 0x12CFCA0F, 0xCBB16CB4, 0xBD674FD0, 0x5810162F, 0xA246959B, 0xDBB6B61C, 0x169128FD,
+0x7FA70473, 0xB7158C07, 0x94F99BE1, 0xAC126346, 0x580E3AB2, 0xF992D06D, 0x5158B05A, 0x8A25C511,
+0x157F7436, 0x48481744, 0xC14AE2E0, 0x12442DCF, 0x3A275EE1, 0x0401151C, 0x98831926, 0xD92B8104,
+0x15E32791, 0xC3827E9D, 0xC118C10D, 0x23DA27F4, 0x054E747A, 0xE960F7DF, 0x2383E6A5, 0x2FCEDBF3,
+0x505966D1, 0xA54726CC, 0xD7FCF5AE, 0x092AF204, 0x2E40BE54, 0xB9F6BDB0, 0x6E78D278, 0x924C2C5F,
+0x5C6612A9, 0x8A7D6098, 0x2F07BD32, 0x85F4536B, 0x979FB3C9, 0x4D39E1CD, 0xDA2A22DA, 0xA2817908,
+0xEED41EB7, 0x89EF548C, 0x3FEB6688, 0xE192F7B3, 0x6F89E1F1, 0x043EA015, 0xFF892E36, 0x988C4472,
+0xD73D4AF1, 0xEF5326A6, 0xEB008889, 0x9EB08B7D, 0x627D39A7, 0xBACBFD59, 0x71BC6CAA, 0x781E8FB3,
+0x0B9291A8, 0xE6171078, 0xAF9D6FE9, 0x9EA71F95, 0xBA0FDB77, 0x854B2750, 0x9F0444BF, 0x3C706C4A,
+0xE817E076, 0xDE73F869, 0xA9ECF014, 0x6B7D4F97, 0x60257CA9, 0xB514856C, 0xBE3701E8, 0x4BA96EA6,
+0x96149769, 0x09FAE244, 0x02C40434, 0x92FB1676, 0x232B3F80, 0xE7A82A45, 0xAF6DE8F3, 0x91CE44BF,
+0x0E5A8928, 0x7BA1420C, 0x2F561D0F, 0x42B741AE, 0xFD8E950F, 0x671E3FAD, 0xC36DE3B6, 0xCB5C4A82,
+0xCEBC13A5, 0xF931FA6B, 0x4F54FD8D, 0x1EF1192F, 0x73888245, 0xA0D7CA3E, 0xA0E43865, 0x57B4B76B,
+0xB80474A6, 0xA52385C0, 0x7DFCF062, 0xC11B7FDD, 0x53A5D73B, 0xAA1C7F2C, 0x93F74F94, 0xBA7FB300,
+0xC69E0951, 0x5E1BFF71, 0xE9793CC8, 0x400864EC, 0xB75FB15F, 0xA9EA8894, 0xE1EF79F0, 0xE01F4FC7,
+0xDA3DA877, 0x6FD29E98, 0xC5AFF62B, 0xB9D481B5, 0x66D26C56, 0x455933A5, 0x19B8A76F, 0x4A874DDD,
+0x04AF4A41, 0xF144CD7E, 0x44EF074B, 0xFC9FF5F6, 0x41D173A6, 0x5299BDE5, 0xA385F614, 0x0BBBC010,
+0x4EBCFFC5, 0xE5CA6A15, 0x5E92A80D, 0xAED276CA, 0xD70812B3, 0x57CAC652, 0xE135D5E7, 0x3A7E2955,
+0x0B608F6D, 0x6BC49A18, 0x429E663B, 0xBD36F1A8, 0x6F6651AD, 0x96B68309, 0xC358A2BD, 0xF7092BBC,
+0xCF061F38, 0xF7D596FE, 0x97DA6F85, 0x15F27CA0, 0xFB141D8C, 0x3A834996, 0x5D1C1B8D, 0xA96942D8,
+0xE5199645, 0x7EE0CD41, 0x4C6CE4CB, 0xCD9A9451, 0xC17361C9, 0x5E83A83B, 0xAEE1BC57, 0x2EE535AB,
+0x6777EA03, 0x5CB0E0CC, 0x36F74326, 0xE0D9334F, 0xAA74E12D, 0xE0F227B2, 0x38C854EA, 0x544BE291,
+0x00E6F62C, 0x6A60C7AA, 0xCCB51BBA, 0x689A1DC8, 0x5749F7DE, 0x02487BEB, 0x51CFB1A1, 0x45370306,
+0xA57AA227, 0xF243717E, 0xDDDF0514, 0xEB1EB421, 0x2982627A, 0x19D8632B, 0x5ED10C40, 0x1E9999F8,
+0x74135F63, 0xC6CC36A6, 0xF5161841, 0x30DB77CC, 0x3C20E6FB, 0xA6E3A925, 0xC3BBAAEB, 0x215C91CD,
+0x5EB28EFF, 0xFFA8C993, 0xDEEA2C4A, 0x9CE0C6CE, 0xD043544A, 0x0BD98AE4, 0xC0A39516, 0x7926F336,
+0x73133AB0, 0x79B2807B, 0xA9F336B6, 0xBECB8F4E, 0x270A4AF2, 0xCFBD2B56, 0x198D0302, 0x75387D77,
+0xC1A78F19, 0x9C45DB35, 0x957B12DB, 0x884BD71A, 0xB107F2D8, 0x52956E60, 0x8D2AAE84, 0xBCB83B50,
+0x2FF20E8D, 0x6E2343A1, 0x5207B099, 0x8393FE84, 0x8286B6E4, 0x0D0968F4, 0x492AA44C, 0x0D3CE80B,
+0x6DA39C29, 0x0A8AECF1, 0x191DF7B4, 0x6FADA383, 0x2DFA88A1, 0x1A7822A4, 0x698A9E97, 0xA8FC078F,
+0x43D54A1B, 0x5C331B2F, 0x0000E0B2, 0x9E010100, 0x12331400, 0x8453FB7F, 0x6B923CA8, 0x9A4179C2,
+0x32D0C909, 0xBE152AD3, 0xB178E4B5, 0xBD8C96A8, 0x7018113F, 0xE87F3279, 0xC48CCB20, 0x2301A21E,
+0xB37B0C35, 0x5D3038D7, 0x7AF1C400, 0x6B6386F3, 0x5F882AAE, 0x2B7925FF, 0xC70FEC1B, 0x621919B7,
+0xC3817439, 0x5FCA5D6D, 0x2E49C628, 0x60D4ADD6, 0x9493E7C7, 0x74BF5D55, 0x161A7F56, 0x4FAD345D,
+0x1EEC6852, 0x8725632A, 0x0F6C27A0, 0x103DF053, 0x8099C0A7, 0xA3BD946C, 0xE62CB23E, 0x0E50C5B0,
+0xFF779EA0, 0x7590B6C1, 0x5A6FFCB8, 0x91A3F993, 0x6F7A83D4, 0xF14E4941, 0x727BE2C7, 0xDE613A8C,
+0x08A0E3EC, 0x02E83843, 0x7441EA6A, 0x1CCCCD4D, 0x93F5C20A, 0x9B564CAB, 0x1284D87A, 0x5804AA4D,
+0x9953E501, 0x2B653B5A, 0x48C80F27, 0x0A69F165, 0x29C5F58E, 0xCE9730D2, 0x73AFA30C, 0xEE0DE017,
+0x248CA6C1, 0x146CAF14, 0x222B5B16, 0xB2CD4207, 0x285B2C99, 0x72301AC5, 0xEA1A34DE, 0xF4A23B52,
+0x609BB36A, 0x658D15C2, 0xBEB5E05C, 0x2BE1CFAF, 0xC27A4A92, 0xD2F0FCA5, 0xC106F2BC, 0x7EC84D26,
+0x7EB49CCA, 0x46027982, 0xD8929971, 0x49DBF204, 0xDC79818D, 0xD1609025, 0x001CA1CE, 0x7B5F8474,
+0xC21FA4DD, 0xC29F9819, 0x45DB6EAC, 0x5B0E6B07, 0x98955B23, 0x4342EEF3, 0xCC91E6EC, 0xCC2A2BD0,
+0xC1E8951C, 0x2B1F7C2C, 0xC7C50EC9, 0xDE6AE8B7, 0x05730570, 0xC690D9FB, 0x73FD783A, 0x3E200DF1,
+0x9D2F2163, 0xA831A3EF, 0x8177D017, 0xA21CEE8A, 0xC4DC7FC6, 0xEA2D1984, 0xDC700BDE, 0xB4D3B6A1,
+0x29B0357C, 0x412D92FF, 0x336C7CC3, 0x3516A091, 0x2A5D13A4, 0x3CDF3319, 0xF32B8EA0, 0x5D1F29B0,
+0x0BA34473, 0x41040263, 0x9FB71B13, 0x7D9112AD, 0x639888AB, 0x05981449, 0xAE5EA5A0, 0x8723D895,
+0x2D47463D, 0x27AB2674, 0xEFDEC659, 0x5DF30348, 0xB194033D, 0x3EA1ACFE, 0x4A60E943, 0x3AD58097,
+0x79398567, 0xDA6B2222, 0xE28C772F, 0xA5685827, 0x5348BFD3, 0x5BFEAA9E, 0xC56ACF4B, 0xCAFDF030,
+0xCDDA47CC, 0x85CC9331, 0x6F05E3DE, 0x21352719, 0xB899B075, 0xB14D2E4B, 0xD4FA9D99, 0xD8B31053,
+0xEDA05B54, 0x2E0B7FAE, 0xDBC54199, 0xB91A5F40, 0x213DEC66, 0x4B2964BC, 0xF7B1F712, 0x74B8C780,
+0x590D0179, 0x1A2C766C, 0x6E77B794, 0x39138404, 0x9D865F70, 0x257993E1, 0x8277184F, 0xCE0C57C5,
+0xBF37BD95, 0x6AB75FAD, 0x3BE6F477, 0x5EB114B8, 0xBFB757B7, 0x07B916FF, 0x91362457, 0xACBA490F,
+0x209C9216, 0xBADEADCB, 0xA1C070A5, 0xBA4ECD08, 0x314E2BE9, 0x14CBAF3C, 0x1F118F76, 0x0298D78E,
+0x0D27A41D, 0xE4EBBB7D, 0x548AB3FB, 0x4060BCE4, 0x7F48EE6A, 0x19E48D49, 0xA6A420D2, 0xBB2DFF63,
+0x8B4259AA, 0x28974B58, 0x8E9A0989, 0xBDBD9A10, 0xEF011692, 0x58A6BD7C, 0x8F739034, 0xE6BB53D7,
+0xA80D27AD, 0x132AE83E, 0x9A7B19EC, 0xCC589764, 0x783630F8, 0x1151C4FE, 0xA39B3765, 0x446C118D,
+0x124680CC, 0x9E522F06, 0x0EB2A0E0, 0x7F9E97D3, 0x57876249, 0x4504BE56, 0x3AA24997, 0x4FA18926,
+0x89718BC9, 0xAEE3949A, 0xAF435183, 0xC5725B01, 0x1F3AF5EC, 0x8BCF5FFE, 0xBB405F2B, 0xC72E88DB,
+0xDFD048D3, 0x4A0C6CA5, 0x6F72C43B, 0x487DA6BE, 0x343EE583, 0x7DBED143, 0xB0922FDC, 0x01CBDB32,
+0x20DDE05C, 0x0E5E699E, 0xB76010C9, 0x994B5685, 0x6AC90323, 0x8DE7BAF4, 0x9C2C50AA, 0xCC3C1066,
+0x0726CDF5, 0xA20B7D16, 0x369D5875, 0x333B920E, 0xD8219FF4, 0xA57F33C9, 0x241EFDB9, 0xF570DB94,
+0xE0D8D72A, 0x2E049CB1, 0xF98D72F4, 0xB51606D1, 0x55EF873A, 0x0FAD6AA2, 0x000000A0, 0x009E0101,
+0x7F123514, 0xE89560EB, 0x68361FC9, 0x28AA4956, 0x3910681B, 0x2724D8F5, 0xB7AEBC1E, 0x51CA645D,
+0x7803F63D, 0xABA4B922, 0x95CCD547, 0x090F7359, 0xAC448E73, 0x0A0E75C4, 0xCD02FC01, 0x944C6973,
+0xCF4E1EBF, 0x9D023FD7, 0xF6D80400, 0xF4EB8A18, 0xB5ACA8CA, 0x72C6BAC5, 0x201D8AEE, 0xC3730AF1,
+0xF9FC4EE9, 0x38E9173B, 0x59E16EC6, 0x86BCB3B9, 0x4DC86134, 0x2FEB5967, 0x27B50392, 0xB6B216A2,
+0x07E17D7B, 0xD70D00C8, 0x80965166, 0xDB90ACAC, 0x8EB78DF5, 0xDC555E7A, 0xB10BFF31, 0x0147A17D,
+0xC9BC023C, 0x5114AE16, 0x88BF6AEC, 0xB1903285, 0xADA9D488, 0xEA57BD26, 0x4B4A5163, 0x7C91090E,
+0x734C5DAA, 0x7E64481B, 0xEC8BE315, 0xC6E446A8, 0xD392CF59, 0xAB2397D2, 0x7052791F, 0x77DBA95F,
+0x3572B1AD, 0x5CD3AB16, 0x6E416E73, 0x9BC62377, 0x1A4FBC28, 0xB4843AB9, 0xC7C7C857, 0x8ACED7E3,
+0xE09D3C80, 0x72D4F5A5, 0x26EAD6AB, 0xCA99EFB2, 0x4D8A648F, 0xCD567C1F, 0xA34DEE68, 0xA0B8884F,
+0xC2A47DE0, 0x6DEF327C, 0x8A52E732, 0xAF4A016E, 0xEE9EEB0B, 0x03E3006B, 0x7D4815A6, 0xFA4F6BCC,
+0x5FFD8318, 0xEC38B8B2, 0xA560C184, 0xBB0D7C33, 0x06C2F63E, 0x86B5D6EE, 0xB5C88786, 0xC11BA7AD,
+0x05C4BAAF, 0xCAFD1160, 0x852C5850, 0x32E68CD0, 0x7FB7E384, 0x3D830DDE, 0x236FB751, 0x892EE9EA,
+0xF5176C77, 0xFB0F11DA, 0x0620B170, 0x8559BA7A, 0x6C574732, 0xA5D0D18A, 0x38541722, 0x212CEBF3,
+0xB396C42B, 0xCCB4327A, 0x60397038, 0x094403E9, 0x8305FF22, 0xBC1DC8A3, 0x2F112F86, 0x31153F29,
+0x1051E6ED, 0x6F64FF73, 0x29D0ED3D, 0x02C17F50, 0x559079EB, 0x20DA45C4, 0x742A20F0, 0x38AD22F0,
+0x57237CE0, 0x454F33E7, 0x3267E05D, 0xE61A1795, 0xBAEC6C2F, 0x6C616688, 0x8F18112E, 0xD497CC43,
+0x3C51BC0B, 0xC58A4F11, 0xF0D5EC2D, 0x341E1D49, 0x6A7DB0C9, 0xE254D915, 0x92BDF6F7, 0xAE842FD1,
+0x96BEE822, 0x53D51A31, 0x5F62849D, 0xF908E3AB, 0x08AE25DA, 0x7364FA1F, 0xE08C26BA, 0x51478ABC,
+0x390EF25F, 0x8F1E2D7A, 0xFB4E6AB6, 0x728DC505, 0x5257FC34, 0x2940DD95, 0x9EE3E65F, 0x72BB9502,
+0xE75AD638, 0x22680953, 0x5D790F31, 0x36C09967, 0x247B0CAE, 0xB48C0535, 0xCC957764, 0x41464705,
+0xC74DDB6B, 0xB53881F4, 0x4B1EE4F0, 0x3711DD47, 0x00E542B9, 0xB0C24905, 0x1A95BC76, 0x95841C84,
+0x009403E5, 0x76753700, 0x2567AA43, 0x842516D5, 0x8429FB0C, 0xDBA5A6CC, 0x7D3B1373, 0x669B817F,
+0x2D34DF51, 0xB8E0E003, 0xB403B77F, 0x00A7C39E, 0xE349F381, 0xCCF2E61C, 0x7AC17B6D, 0x15512E74,
+0x8F21A5B1, 0xAC8BD8EA, 0xD53D0AE9, 0x44BD8212, 0x0E24089C, 0x35A2A4C8, 0x266FDCFB, 0x493B30B3,
+0x9E2F6910, 0x9F10315F, 0x73E7AD21, 0x684779EF, 0xE6BF5519, 0x000000AE, 0x80882101, 0xE23F0F05,
+0x0800E431, 0x7F9E87B2, 0x305083C9, 0xF2B7CED3, 0xA4BB490E, 0xCB61B1C6, 0xD705EDC2, 0x98D424A3,
+0x83BBDCFB, 0x6D2406EF, 0x87FABC46, 0xB5CF9504, 0x41A40821, 0xDC6A1BF8, 0x1955BEB0, 0x8019A585,
+0xFB908FA9, 0x3CC401DE, 0xF8D1DB55, 0x137014BB, 0x8E331C4E, 0x304599C7, 0xEDE2E4AD, 0x39772033,
+0xE7E0273D, 0xAFB94EA8, 0x38FBFFFF, 0x23AF7D1F, 0x37FE3CCC, 0xA1642042, 0x0FECDD38, 0x05450BD7,
+0xECB817F4, 0x45DF796A, 0x09D9E725, 0xE48679AD, 0x474B7467, 0xD1FD5F68, 0x9BB27C2B, 0xB4F6A54F,
+0x500C6863, 0xB9B6A5CC, 0x9CDD37FD, 0xDDC03078, 0x72B190E5, 0xA6BFC77E, 0xE4F889C8, 0x6DEA38F5,
+0x3B5725A3, 0x0469BF0B, 0xC0D63FC9, 0x61085984, 0x42A894DD, 0x4323469F, 0x9337C8F4, 0x2C64EA9E,
+0xD328CFF5, 0x83A684B1, 0x98CF832B, 0xFEFA8304, 0x0188EFCD, 0xE286DD94, 0x8B8C24CC, 0x10CA4A29,
+0xA3369F7C, 0xC69714B6, 0x75A75D2D, 0x77634FD3, 0x7D13F16D, 0xB1EED04B, 0x5F49092B, 0x70AA30B2,
+0x68EE169C, 0x6616D7BA, 0x80C01149, 0x02239260, 0x102548A7, 0x1555B174, 0x8ED00B93, 0xB0DB0449,
+0x093057F1, 0x4B680029, 0xA8FC4450, 0x0B8A91EB, 0xA687ACA6, 0xCA3E84F5, 0xAF584A71, 0x922962FA,
+0x268B29F5, 0xE55EB608, 0x87A7D5F7, 0x4A4204D4, 0x90BA7AA3, 0xA448577B, 0xD8A0767E, 0x07567365,
+0x5D3B621D, 0xBC164B2A, 0x305E0B86, 0xE1217DF3, 0xACEC8BBC, 0xC33041FB, 0xDB64CC56, 0xEE8BDB7A,
+0x5F32B13D, 0x0388B9FD, 0x90628B9B, 0xDFEBEE33, 0xC6CA42D1, 0x0CDB6439, 0x4BAB911F, 0x2ACC8F77,
+0x81D9FF9F, 0x10EC5366, 0xB9B45A41, 0xB1F9932E, 0xBC0FE7A9, 0x413A0185, 0xB9BC1673, 0xE2232418,
+0x93499980, 0x3FD53F47, 0x64537B2C, 0xD2807247, 0xC38FD1CD, 0x49744BF7, 0x063AF38E, 0x660D577E,
+0x0AD1A32D, 0x24DC00A4, 0x40820565, 0x88373187, 0xDEF1876D, 0x2BC3CEF7, 0xD3D8847B, 0x9951A8E7,
+0x9BD878B7, 0x26870A26, 0xDEF30581, 0x5891FB94, 0x29758897, 0x4B8515E1, 0xE0B9E064, 0xAFF04553,
+0x30CB2C43, 0x40D75269, 0x6E418903, 0xD170A707, 0xC316BEC2, 0x6B033A34, 0x70D2FD57, 0xF2A3E95A,
+0x22523E49, 0x0B7F6D21, 0x804AAB9B, 0x92772718, 0x9DA86D30, 0xDA55A3AE, 0xDACA6FF4, 0xF595B0A9,
+0x7517AAB1, 0x93B2CD64, 0xC31F164E, 0x0C2A27DF, 0xA4714C6F, 0x04C29126, 0x57DF5515, 0xB4220717,
+0xCCC0FE8F, 0x9AAC1BB4, 0xD8C2A09A, 0xCA5050D4, 0xF2563A85, 0x84A6EC5B, 0xAAEE35FC, 0x29FB3484,
+0xA562BD44, 0x20561A77, 0xAF0B98D1, 0x73245E56, 0x11CF137A, 0xCCD73C30, 0xB61955B3, 0xE604D147,
+0xD845D99F, 0x240F7C74, 0xD8495E9F, 0xD8809C8C, 0x4FB159E0, 0x6E67642F, 0x278E2CD2, 0xB69FBBE1,
+0x5F325A06, 0x7FF2F153, 0xD199E92F, 0xF16B9495, 0xCAC7EA9A, 0xE0C9D89C, 0xBB453759, 0x657F2698,
+0x30976114, 0x921F83F1, 0x5C729645, 0x2D1022EA, 0xF438B4DF, 0xF0C57691, 0xDB5BEF1D, 0xF831A65F,
+0xF6C22674, 0x6BFE480E, 0x7D02A0D2, 0x06D78873, 0xE2E0A02D, 0x9C700838, 0x4574A807, 0xA4636DD6,
+0xE160FDAF, 0x4FD89FA2, 0x4E91C561, 0xED9E52E4, 0x65DD274A, 0xC47CF63C, 0x001CE002, 0xE8A1EBE8,
+0x481695B2, 0x958FC076, 0x2D630612, 0xCBDB75B9, 0xCAEAE574, 0x3D1D126B, 0xB4C8235B, 0x5E5B6ED3,
+0x25029976, 0x9313D7CD, 0x6DB5E84C, 0x34FD6014, 0x4BEBC9D7, 0x5C1C8D52, 0xC661973B, 0xD68AFC1B,
+0x22891D26, 0xBCFD3E43, 0x5AE7742F, 0xCFBD1A52, 0xE2258EC5, 0xB095E7EC, 0x2FF778E3, 0xAC07AE27,
+0x3F09AAE4, 0x5326F48C, 0xD5D6FEFC, 0x8FC411DB, 0xA8C2FE7A, 0xE4B64C9C, 0xFA054E12, 0x6040CB3B,
+0x87B84A73, 0xF9C6452E, 0xB8F99B80, 0xF2E69167, 0xC3336403, 0x2E597D7F, 0x69BE0487, 0xA457DC55,
+0x7FE70982, 0x1AA8FE6C, 0xF5AA84BA, 0x1F820A50, 0xBE86A161, 0x3009C695, 0x7667F244, 0xD7BF946F,
+0xBEB0E0E5, 0x6E71A1F5, 0x06118822, 0x22B712C3, 0x7E72E483, 0x3337093B, 0xB5279E22, 0xD7C08AA1,
+0xE35679DD, 0x3AA759FF, 0x33B3FFE6, 0x9BAD39EB, 0x9ED6AF9F, 0xB6BB246D, 0x82CD869D, 0x614635FB,
+0x5D0E7877, 0x9D40C49A, 0xD9F03FD8, 0x8EAA5720, 0x285ED73D, 0x48E5A422, 0x6465B0F2, 0x74A76F08,
+0x58DFDD29, 0xDD246BDD, 0x9C87B16A, 0x9B468E4A, 0xEEDDF7C4, 0x0748DE17, 0x79CD8CDD, 0x11679246,
+0xB91919CF, 0x0711B238, 0x05C234C6, 0x43582F4E, 0x2B516E62, 0xE2371F4F, 0xCCD9F791, 0xE4B02670,
+0x0A04850F, 0x93012509, 0x170B1215, 0x72DE995B, 0xC6A1A5CC, 0xEDBB0B19, 0x381511FC, 0xE711026A,
+0xC9A422C9, 0x569154EE, 0xC85379BF, 0x00526A6F, 0x767415B5, 0x615ADA4A, 0x9936113B, 0x5060C879,
+0xA7EA75EC, 0x51545543, 0xBA19718B, 0xE09A347A, 0x4ACBA2BD, 0x33161B12, 0x9A4FFA40, 0x5AB75D97,
+0x01B7460E, 0x8E6FE327, 0x6E57C361, 0x975495A0, 0x8AA71CDB, 0xBE53FB95, 0x41CA3A64, 0xB0089AB3,
+0x626AA99A, 0x6388620F, 0xAD8D4AC8, 0xA3DA4B70, 0xD30906FA, 0x8F72E409, 0x0689C48F, 0x92F4F101,
+0x9E9BFDC1, 0x645BFA8F, 0xCF580F72, 0xA6435462, 0x79EFDFC8, 0x38CCBDBA, 0x51F9E2A5, 0xD7DB4F1D,
+0x55385749, 0x86D3BF99, 0x4D1B8597, 0x16478082, 0x7F81651D, 0xE0A492D3, 0x39BDB2EE, 0x8C2458D8,
+0x350F83FC, 0x010B7EC6, 0x456B8105, 0x6E3B2564, 0x5A23E64E, 0xCAFA0F34, 0xF7D26808, 0xFCAE011B,
+0x26E9884C, 0x1B1DE6A1, 0x177D84F7, 0x034468FD, 0xC8C372CC, 0xDBCBA9D8, 0x07CF8505, 0xAAEAF371,
+0xB45ADEE0, 0xE6655A10, 0x0104F661, 0x6D4AC4DE, 0x2E9AEFF4, 0xD7B75A7C, 0x43CC3159, 0xDBED00D4,
+0x0E49ED21, 0xE11D74BE, 0x4718BDB3, 0x51FD5EEC, 0x69F07844, 0x31657FED, 0xD545F187, 0x31CB5A23,
+0x836B25DE, 0x389C284F, 0x5A00B225, 0x4ED27309, 0x4C1C3221, 0x438DE388, 0xCAE7F6E8, 0x165F3414,
+0x8ECE21E8, 0x3633707E, 0xBCEF0E6B, 0xB12A79CD, 0xEFF07B9E, 0x36D24A80, 0x85BB2149, 0xC8210186,
+0x1C020B92, 0x53F12AB6, 0x09C537D1, 0xFD331121, 0x2D4AE4D7, 0x6A0F99B7, 0xDFE81919, 0x36DB7256,
+0xD7749151, 0x0D2EACEA, 0x51464792, 0xC50CD6B9, 0x0D8426D1, 0x98D7A4F0, 0x15118977, 0xC7A4A8C0,
+0x644D3BD9, 0x413DBA4C, 0xEAE72952, 0xCC70EFBE, 0x9FFF4BA3, 0x4EE3EB4B, 0x3BD9319D, 0x0DED4AA0,
+0xA468D5EA, 0xC2D64928, 0xC362F5AA, 0x1603AA43, 0x9823FBE4, 0x8B991EB9, 0xCCF34AFC, 0x876DCB19,
+0x6AB212A2, 0xEEFFD36A, 0x8BA42502, 0x81C90A5E, 0xBC9F3039, 0x7E758988, 0xAEE18E10, 0xD732F1B7,
+0xA521A74C, 0xEF3D1B75, 0x301C333F, 0x25A6D4EF, 0x6334A53F, 0x3E4D1F5C, 0x4E59CDF6, 0x14E14FBE,
+0xD3ADE927, 0xD0DA805B, 0xEFA7C4FC, 0xBA337FF3, 0x60053646, 0x0AF20ECB, 0xDD0FC2A7, 0x90C699B5,
+0xE8216DA8, 0x38B595E7, 0x76F7BF4E, 0xE7920DBF, 0xCA9E9B32, 0x16FA16F5, 0x0E315F03, 0xBA150411,
+0x7E186046, 0x29A46D55, 0x9B4389B8, 0xA62C8C0E, 0x29FBF49E, 0x1C870FBF, 0xE915E472, 0x77C5DF62,
+0x58130B3B, 0xA4B642A0, 0x9FB59605, 0xBC98A30F, 0xDA93E4C5, 0x48A7747D, 0x2F438CC5, 0xB24DBE51,
+0x481A300B, 0x766C5481, 0xBBD31B60, 0x4324CC51, 0x9FEAE7C9, 0xEAC335FB, 0x4FDCB95D, 0xD45DD325,
+0xC5A14543, 0xF815BB49, 0x6BEEBC0F, 0x63BA7347, 0x38A7EC2E, 0xC6A17D09, 0x40751DB7, 0xC8DDF7A5,
+0x60A556DF, 0x3D7529BF, 0xCD63D32F, 0x4340F4F8, 0x8CAC795B, 0xB6B33C76, 0xD2BF30B4, 0x970B55EF,
+0x837C24D1, 0x2296147F, 0x5FA0D1DF, 0x2B56D270, 0x484E87D1, 0x256D5785, 0x673746CF, 0xDB4612DD,
+0xF38B626F, 0xD694E4EC, 0xC4AB4CC6, 0x754E591B, 0xF9CB40B9, 0x43D219CD, 0x61A7A031, 0x91B855AD,
+0xE1579642, 0x046CC054, 0xA08900D3, 0x6E9E2046, 0xD6CA2FD6, 0x2BFBC60F, 0xC80B05F7, 0xFE89005B,
+0xF797A28A, 0x2A330521, 0xF718123B, 0xC8B8D88F, 0x187B0D61, 0xB5840811, 0x621928E1, 0x041C353E,
+0xBDF76EFC, 0x29967BA3, 0xB0FED4FB, 0x16E6E0B4, 0xC323B29C, 0x5CB85423, 0xBE604C98, 0x117A92ED,
+0x99B65A20, 0x2FA3004D, 0xB4E51F66, 0xAC7D9273, 0xD7B3D5CC, 0x44B2C3BC, 0x7F41F22D, 0x1EBD0812,
+0x606C9B2E, 0x1D4158FE, 0xE58E0CE3, 0xBB3861DB, 0x046A9956, 0xAE4E111D, 0xF5CA3809, 0x6455D23B,
+0x0702D94D, 0x673F0132, 0x09581C90, 0xE9430963, 0x006ABAC1, 0x7B5AE17B, 0x0D2CF3AC, 0x2C7E563E,
+0x72D0FA6D, 0x21602AE7, 0x9D5E1E04, 0xA641DBCA, 0x55A53947, 0xB5CF4FEA, 0xFB892FCF, 0xF642E5AF,
+0x9B303F37, 0x3D5E5E0D, 0x9AEAA44E, 0xDECA5B95, 0x8C900270, 0xF4B4643D, 0xC37869D0, 0x11D686A0,
+0x499F35D8, 0xA9657603, 0xCA52DD8C, 0x51CE74C9, 0x94049D84, 0x62588B7F, 0x3C8D01AD, 0x476900FB,
+0x11F7349D, 0xDF057407, 0x819DB5C4, 0x8527A7E6, 0x3AB18A8C, 0x8E48EB46, 0xE2BA77DD, 0x232CBDCF,
+0xC2245A62, 0x34044F2A, 0x445BD5AE, 0x7696A478, 0x08876B9E, 0x4041BAEB, 0x4EEAFA79, 0xAB91082D,
+0xE07C155D, 0x872294E2, 0x2A523F89, 0x686B6224, 0x38D009E3, 0xFD5366C9, 0x9620D24B, 0xFA1BB7C9,
+0x71C66378, 0x3FCC29B3, 0xB38AFD9E, 0x8BD5B353, 0x02CB6611, 0xA72B4CA1, 0x662C95A4, 0x01BD084B,
+0x5E1255E1, 0x9F02D0B6, 0x756D19FF, 0x61D01F45, 0x80F12F18, 0x9984D986, 0xBBD3307B, 0xFCD67A8B,
+0xA571A4E8, 0x48A2C2EC, 0x4A97B612, 0xD1A61559, 0xA80E9BEB, 0x96862476, 0x4A756F0C, 0x14A2DB47,
+0x949D444C, 0x9E1705C4, 0xDD8FB0C4, 0xC94B562E, 0xC512467A, 0xF15DCF1A, 0x39EEB4EF, 0x8269F6FD,
+0x7F45E819, 0x66FBF10E, 0x8790DCE6, 0x72616C69, 0xEE78BFA8, 0x0661DE88, 0x03243748, 0x7D92B2DC,
+0xC4E7EBB2, 0x48E7B155, 0x4DE550AB, 0xCFBF30AB, 0x1CBAA649, 0x6184FA9D, 0x9A2321FA, 0x93EAF895,
+0xBAEC5A94, 0x2FBC06B4, 0x2EAC43ED, 0x7DED2F52, 0x9211758D, 0xFD324726, 0xD2D2D77F, 0x24FCE679,
+0x86738406, 0x05B86D25, 0x3180FCD2, 0xF0B93D28, 0xCE0AEFD1, 0x9F9E6C7F, 0x70AB0DCD, 0x316A51DC,
+0x79D61C77, 0x99DBA81C, 0x4324D74D, 0x6597038B, 0x65D100FC, 0x7DB52909, 0x297F17A9, 0x8410C31A,
+0xF079BA7C, 0x2A86A85C, 0x7C6E8669, 0x9F03A368, 0x89E4FF55, 0x91CCC4AF, 0x7F1E2A8B, 0x7308AA35,
+0xA85B6DEB, 0x82A20912, 0xEF6FA529, 0xAF1417A0, 0x98DBEB2C, 0xC860135B, 0x719330A4, 0xE5871B1B,
+0x157909E5, 0x6199CC22, 0x60BEC006, 0x6CE5E1AF, 0x08CF1E2D, 0xEB16E167, 0xFA451A46, 0x2B152DB2,
+0x745B02A1, 0x0A64E932, 0x0257E28E, 0x7021E544, 0xE8A01CAA, 0x58105127, 0x3CB7EAC4, 0xA989C2E7,
+0x3FDDEB78, 0x2AB0063D, 0xC142EA5B, 0x48401E60, 0x439250DE, 0xEC4B6D08, 0x9E7E6500, 0x66D10F60,
+0xCAFA7239, 0x189DCA4E, 0xDBAF61DE, 0x9558DD1F, 0x9DE84C4F, 0x6E347156, 0xA5645DEC, 0x8A8D4719,
+0x9D54503E, 0x9BA1162D, 0xD3E94256, 0x5474CF94, 0x4BAC8997, 0x4FFA7CC1, 0xE8337D23, 0x5F168025,
+0x3C669B43, 0xF3C7AAF7, 0x132BBAA7, 0x1E829492, 0x541CB664, 0xF904BEE4, 0x7A617B25, 0xBF230738,
+0xF4D08FB7, 0xB95BAB41, 0xE7C1D254, 0xE0E0E8AD, 0x155B5233, 0x1D9A8559, 0x7C711B82, 0x716934BB,
+0x0F857F86, 0xE4BC430B, 0x3CD3D013, 0xE6913880, 0xD7B05FDE, 0xBC9102FB, 0xED8A55BA, 0x7D3AC120,
+0x556CF4E9, 0x6EB44FA4, 0xC0ED3519, 0xE100E198, 0x7D1685E8, 0x787D95C8, 0xCDD95524, 0xFF34ABA4,
+0xA41E75C5, 0xC94D726C, 0x6F128573, 0x1CD6D469, 0x456DEAD4, 0x5A8E84AC, 0xB58F309E, 0x9F164D38,
+0x097D3C92, 0xA202FB5E, 0xBE5EBB67, 0x4DBC81C4, 0xDD4A41E1, 0xB6643550, 0x43B5D77B, 0x903E565A,
+0x77C9455F, 0x48DC5C3D, 0x315CA5BB, 0x53BB69B4, 0x58CF8593, 0x7D009D19, 0x9731EE97, 0x92FFF943,
+0xFF7C0F71, 0xFAF35D01, 0x3D2CF81F, 0xD6E08852, 0xD2EEBE61, 0x67A8101E, 0xA27931B5, 0x14F81BBF,
+0x0C5D9E21, 0x82450EAB, 0x66DFD9D6, 0xB650F1DD, 0x54FCC092, 0xAB2B4694, 0x0631F04A, 0x99293FBE,
+0xE3209C50, 0xA26F7BD5, 0xC710415C, 0xE0F5A198, 0x0A87A0D6, 0x2539FB3B, 0x8AFF3CB5, 0xDD7C857A,
+0x72A497DD, 0xC92A1CEF, 0xDA17C278, 0xF915B263, 0x5D40279F, 0x7BF65646, 0x7746ECDB, 0xD6D6A254,
+0x9AB92A03, 0xD1222E4C, 0xFE6775D7, 0x1DD673C3, 0x6B953E3F, 0x1D9A8296, 0xEB7C880F, 0x33DB0AF4,
+0x69B5C8DE, 0xA3AD8521, 0x6E7BB7D5, 0xDF8B9F23, 0x50030E7B, 0x5F2F17B5, 0xD55199FF, 0xC43CA82F,
+0x9E64827F, 0x2373393C, 0x49AF874E, 0xE303EE89, 0x40A92F7E, 0xC537244D, 0xD5986C81, 0xCD138185,
+0xEEFEBD26, 0xF57EBB44, 0xD162A31B, 0x6DFB91A9, 0xFB226CFE, 0x353ACE08, 0x39DF300D, 0xC0DE76ED,
+0xF17D361F, 0x719DBF4A, 0x219E2F40, 0xDF6AEE1E, 0xC78094B2, 0x6E359488, 0xE9F8F2C0, 0xD627F9FE,
+0xD1313A6F, 0x27730015, 0x3AABE8A5, 0x573D9AAD, 0x6E2B1FA4, 0xBE67279D, 0x4CD716E2, 0x3D7ECA0A,
+0x9A58190B, 0xE719508E, 0x7CF68791, 0x0BFEA45B, 0xFB0C73A8, 0x33DFF182, 0x4DD8028B, 0x980D4A12,
+0x4A450B1B, 0xF306C280, 0x7E1D4854, 0x63928B26, 0x874E0824, 0x92148500, 0xC99B0E09, 0x473ACC2F,
+0x5F4D5798, 0x07CD7878, 0x50E3493F, 0x23D122CF, 0xF718A0BE, 0xCCCB7CF7, 0x8ED69076, 0x6B4E2B44,
+0x8D8CDE55, 0xB3E12064, 0xC2736B8B, 0x5D1740F5, 0x73EF324B, 0x9EFB1286, 0xEE712AF4, 0x8B31A703,
+0x1D265DDA, 0xFA474D99, 0x77A5315E, 0xB62B67D4, 0x1F202FC6, 0x86F4F729, 0xCEE86053, 0x5E5CF07A,
+0xBBBF8DDB, 0xF0C31F72, 0x8167ADEE, 0xD32DB45F, 0x145EC331, 0xE1E09FA5, 0x0075EE99, 0x2197A2DE,
+0xC0D7F10F, 0x764BF10B, 0x1FBC7FDE, 0x356A2532, 0x7797D8AD, 0x8112D37D, 0xC0D6D1E9, 0xC4869A21,
+0x91B95544, 0x1F995A4F, 0x303112E3, 0x206ADBCF, 0x180F0701, 0x9243BF71, 0x950BAFE3, 0x952EF24B,
+0x6007160A, 0xD9DF463F, 0x1A918F57, 0x8E9E1333, 0xC7F53B37, 0x7F481ED2, 0x6223C621, 0x380CEC53,
+0x08E4ABEE, 0xD6205BC4, 0x1A561E03, 0x4062C7FE, 0xC9A1731B, 0x393D160A, 0x6A14226E, 0x9D0399B7,
+0xACCCFE11, 0x5899BE1E, 0x06D85DB7, 0x6102098A, 0xFBAAC204, 0x1ECE83C7, 0xC7CC7D24, 0xF5D35BF3,
+0x86087063, 0x67672F1D, 0x365AB72D, 0x7C4960D5, 0x645C1929, 0x1FD22FAD, 0x71DB1DBB, 0xE24DE349,
+0xB29B77B1, 0x7ACC65AB, 0x0C9E2B74, 0x3D42DAA5, 0xB4AB0507, 0x623686E0, 0x11BC8952, 0x57DB2C11,
+0x9650E3CE, 0xA115B13C, 0x5D71A3F0, 0xE1386A18, 0xA5842B51, 0x19DDD13D, 0x4DDB8F8C, 0x586B0030,
+0xF5D58F38, 0x98168D94, 0x77C89099, 0xD06F74BE, 0xA4A909A4, 0xAC43D49D, 0xACB4A60C, 0x8978FE52,
+0xDE4E5DC2, 0x485461B7, 0xFB84376D, 0x61FC00E3, 0xD2E57F17, 0x1FB05ED7, 0xDFE7C06F, 0x8085E2AE,
+0x8EBF187B, 0xF18313AB, 0xB54596B9, 0x2F8C4C2A, 0xE8EBE90D, 0x0BF94568, 0xD9C702D2, 0xB0127568,
+0x4853901F, 0x96076ABB, 0x0897E8BB, 0x1E291B20, 0x12C16C6F, 0x62A2E3D7, 0xE16100D3, 0xDA0686B5,
+0x32B0F40C, 0x6D8D7614, 0xE5F15327, 0x9FA4A298, 0xE4BD8341, 0xAF63ABDE, 0xEDCAA791, 0xB978E289,
+0x70B6C0B7, 0x63CA69E8, 0xCA590AED, 0xC7BA2BEB, 0xE300A19E, 0xDB1E952A, 0xF34DF049, 0xF57BA797,
+0x430D5B84, 0x2021413A, 0x08EE9F72, 0xD5843FDA, 0xE26E1FF9, 0x7DD4ADD8, 0x668BCBBB, 0xC225CD29,
+0xAACA8094, 0xEBBAD87A, 0x10F8FA71, 0xA16D7040, 0xEA584C01, 0xBC0ED82B, 0x78A69A61, 0x76BEED0D,
+0xB3CCFFF9, 0xB4E1EF77, 0xB55B7583, 0xBD0816E6, 0x1FD4504E, 0x536ED2E9, 0x973681FC, 0xED1E0D66,
+0x074A67E5, 0xDEFC8060, 0x9AE18E3E, 0x8715E036, 0x5110D489, 0x0023A711, 0x214203D3, 0xBAD5F8F5,
+0x6C464B0C, 0x3DBACA4D, 0xEF98F106, 0xE1626D20, 0x0DF13CC5, 0x76BDC4DE, 0xB21432D9, 0x4F14301B,
+0x6F4F6CAE, 0xA93ECBDC, 0xF19B38FA, 0xA6E4DCEB, 0xFE1E8B84, 0x6B9EDA77, 0xED61C881, 0x237F7769,
+0xAF463A54, 0x7D96D03A, 0xF969E590, 0xD37F4A22, 0x6000B3BE, 0xED880A00, 0x148FC8E4, 0xAD6A655F,
+0x6605F57E, 0xDC0B78FF, 0x31D3E411, 0x824715B9, 0xB787D6D4, 0xE2A903C8, 0x50EC1AA5, 0xBD86F25D,
+0x5AA0DDEF, 0x2EB0C0A3, 0x27C42021, 0x2A48096F, 0x9FA2E6AA, 0xF0F5554B, 0xD2BF5CA5, 0x9B55ECBD,
+0x62C32E2A, 0x55806843, 0xDE9E5C2F, 0x6F0A779C, 0x77297290, 0x586CAFBD, 0x4247C4CF, 0x7F4CA3F1,
+0xEFCFE67F, 0xC4385BA2, 0xABF57429, 0x4F1C1CF3, 0x397E3F4D, 0xC1DC716B, 0x89493B51, 0xA01BE60D,
+0x4D825B6A, 0xF85F14EE, 0xDD5F83EF, 0xE69C7772, 0x279D4CBD, 0xB3C16D82, 0xE6DBEEBA, 0xC2BFD2FA,
+0xCE4CD2DA, 0xDA066B8E, 0x5D98AACA, 0x76862617, 0xBBDC6433, 0xB8C384E0, 0x8323737F, 0x8E005635,
+0xDD86F871, 0x75109CF5, 0xBB422EDD, 0x9BFA0D34, 0x309D1F36, 0xF0BC34F7, 0xA634E5FF, 0xFA29588B,
+0xCDBAE81E, 0x3F29680C, 0xC1535EAA, 0x6B77626A, 0x8E137898, 0x03CD72C5, 0x164D9B6B, 0xD2F3D7C3,
+0xD873734B, 0x70AD9D7A, 0x0350BA8C, 0xCD6F16CD, 0xDF63F5CE, 0xBF364421, 0xE56BFB10, 0x0EFA6DC4,
+0xC6AFAE1A, 0x00FD60F4, 0x6718CA9F, 0xF99AE4E4, 0x2C9A34F4, 0x3A9B4359, 0x38AD9B3F, 0x37EE63D9,
+0x0C60C017, 0xB62F8B22, 0x5615E124, 0x81161432, 0x435EE020, 0xF09371C9, 0xF990CEB3, 0x929C6045,
+0x108544DE, 0xC575D472, 0x0EB92BAB, 0x7A6A40AA, 0xF1032BAB, 0x50B69B8D, 0xA33A0064, 0x6463E1DA,
+0x9CBEB288, 0xFB5F7DF3, 0x66833282, 0x98773C03, 0xF1D82E9A, 0x9199FA2D, 0xC6DD0C3D, 0x422CB0B9,
+0xD6D601CB, 0xFBCE0193, 0x6BA782FF, 0xAB8EE7F1, 0x59143ABF, 0x0EC21A0C, 0x635D8832, 0x0044EB3A,
+0x1DF8E464, 0x628B307E, 0x3C968822, 0x8350AE4E, 0xDD8B21C2, 0xC133CC55, 0xA7D6EE69, 0x23DD5C70,
+0xEA28C37A, 0xD1033BBD, 0x22899F9A, 0xC76CBA3A, 0xBE61376F, 0x0B175F14, 0xFD0C3F56, 0xBBF686FA,
+0x0185A57A, 0xBBB341D2, 0x9E502A7E, 0xEF28F67D, 0x60893098, 0x2ADD31EA, 0x5E014D0D, 0xDA2537F8,
+0xA50007C9, 0xB61706B7, 0xAC21DA07, 0x90FE6A35, 0xBD02BFAB, 0x449A7701, 0x1FAC7942, 0x14B55FB0,
+0x9EC24FCA, 0x31F51978, 0x97858CE2, 0xC68D9574, 0xCF14ADF5, 0xBA4FCF4F, 0x72F5A97F, 0x26148086,
+0x16F181A4, 0x02CC13FD, 0x325E61EA, 0xFD3A6E07, 0x4467EF8A, 0x0E4A2568, 0x3F1AA48E, 0x41BA6DD3,
+0x0C02C12C, 0xE01F4D6F, 0xE8AF19F1, 0xAEDF4762, 0xAE1442AB, 0xEA920A40, 0x27947CDD, 0xE459DA94,
+0x25DC6445, 0x6C27C9E9, 0x746FAD14, 0x020AC0B1, 0x50A9C643, 0x96CBC554, 0x109636B9, 0x7D0ED785,
+0x5709F866, 0x2F51B277, 0x6970FD87, 0xAA1CE9DD, 0x71B2B4A2, 0x8CC34C4A, 0x563760DB, 0x53C53872,
+0x1D54D857, 0xFB330E27, 0x24B752A8, 0x70531905, 0x7442EFB3, 0xEA4C70A4, 0x175849FE, 0x1B3E3657,
+0xE90CC78F, 0x1C5AAFD0, 0x0639C3D0, 0x5BFA59A2, 0xB046EA25, 0xB48EDBA7, 0xB8F899F6, 0x41E5C50B,
+0x0FCFE109, 0xFE34E6C3, 0x2EC469F1, 0x1474FA85, 0x84D1CB43, 0x4601523E, 0x5D792FB3, 0xA666DACF,
+0xEB3C5295, 0xDD734277, 0xDA6D2A66, 0x0FB143C4, 0x56C4D809, 0xD2206D11, 0xABB6B362, 0x12F844C5,
+0x480413DF, 0xB39AD69C, 0xB62C2CE8, 0x3C46D4C0, 0x58F51BB7, 0xABEF71B9, 0xA352003B, 0x09F453C5,
+0x99DEC81D, 0xB3CC5F7B, 0x0B591CF3, 0x6480CB32, 0x34A15BEC, 0x4C342712, 0x60DEF805, 0x30DD1E09,
+0xC76B44F8, 0xFCE87CA5, 0x16B7CC58, 0x4515C986, 0xA8EA5F12, 0xD742945B, 0x74525248, 0xB43C91F3,
+0xD7CC296F, 0xA5D4EEC8, 0x3D3B9B5D, 0x0CBFDE84, 0x317D1DDF, 0xA36BCCBF, 0x32CFC60E, 0xE28B828A,
+0x315B54BA, 0x2328BD12, 0x7F872A45, 0x36E67F0E, 0xC870600A, 0x2743476B, 0xAC2624B1, 0x57D08D9B,
+0xB144861F, 0xC7E616C8, 0x3A878688, 0x4F816BE3, 0xFC36D06A, 0x6F5FD88C, 0xBB2DE47C, 0x5167B450,
+0x1A3877CD, 0x9A81BD8C, 0x6127BE41, 0xFA41C375, 0xF3E7D1C7, 0x93485449, 0xF49E3597, 0xA5907079,
+0x7C83B34B, 0x7E4F7C5F, 0x233D308D, 0xB3640783, 0x19107BCF, 0x524048F0, 0xB37C2F5B, 0xB9651A3D,
+0xF3BD5220, 0xE32591C4, 0x225DD06F, 0xC586C521, 0xACD3321B, 0xCCE7187E, 0x99529D6E, 0xB4D29584,
+0xAD4569B9, 0x00D3DA7D, 0xE62A3471, 0xCE52906B, 0xDA1B2AB7, 0x8AA1829E, 0x8DDFB4E7, 0xD696E79D,
+0x78382ED5, 0x32D50701, 0x54519390, 0x3A287B0D, 0xB4119F58, 0xC40FA8F5, 0x613D9625, 0x3DD7C239,
+0xEA2E6F06, 0xFAA29E63, 0x530C5E6B, 0x46E7D8C3, 0x0FBC51A6, 0xE092ECC4, 0x87BBE9B4, 0x72AEEABD,
+0xDB65BA69, 0xA88E335F, 0xD480DEFD, 0x59E74B77, 0x478886B4, 0xB2DE2EB0, 0xC2792BE8, 0x2404585E,
+0x8FD699E6, 0xFE9DFE9F, 0x868F5880, 0x29B2C436, 0xABFA9CE7, 0xEF6C9722, 0x21CA52E5, 0x2673C81D,
+0x1E0E57E8, 0x2FC878D3, 0xBEC1E319, 0x7C76C4B9, 0x0E256B5E, 0x8AD9312B, 0x83A10A26, 0x76BD7B4B,
+0xEF6391DB, 0x5F468665, 0x30810E31, 0x7938351E, 0xB1B3011A, 0x8CA79347, 0x6F96257F, 0xEC990312,
+0x1C4B3AE0, 0xF03E18DD, 0x32F4740B, 0xD909F9B4, 0xE3A7AFFB, 0xE4838880, 0x13999EE0, 0x21520B58,
+0xE51BADCD, 0xAD7832FA, 0xB5C70EA1, 0xE2BB532B, 0x79DE73EB, 0x1F6BDCF6, 0x496FB21F, 0x15838F4B,
+0xCBDB35A2, 0x1AB311BA, 0xFAD711F9, 0xFA7FEA6D, 0x0128A522, 0xC3E09593, 0xE92405A7, 0x3888E448,
+0x1414C87C, 0xA3288F9B, 0x9E3893B0, 0xE36604CE, 0xB3C56FC5, 0x85C8E651, 0x941FDEC0, 0x40E4A469,
+0x1710337B, 0xB00830DE, 0xE74D00F3, 0x3F9EB793, 0xD2654EE0, 0x416471E3, 0x84910864, 0x0A8B8918,
+0x517A4740, 0xF10D7693, 0x0931C01E, 0x2C122191, 0x505A275B, 0xD5C88735, 0xCBFC4AA2, 0xA8DFED06,
+0xF65FF1E5, 0x90CCDEA1, 0x7267C141, 0xC6EC1C0F, 0xD1E1F60C, 0x970FCFA9, 0xD333BD2C, 0x985EFE0A,
+0x7B05A6B4, 0x84C15C4C, 0x34C0B5B2, 0xF5337289, 0x8774BD8C, 0x15124161, 0x504DCE9E, 0x904BD1CD,
+0xDA2B4F95, 0x1E92B9AA, 0x2ED0B6F4, 0x6346203C, 0xBB9D868C, 0x903CC9C4, 0x223EB04E, 0x6C348469,
+0x00C2657D, 0xA9045C6B, 0x171C626A, 0xFC19EA8D, 0xAC355798, 0xF13D644C, 0x21EC5FBE, 0xA16628B5,
+0xB61DE032, 0x8A243E20, 0x60CAA31A, 0x13054B18, 0x70BB0512, 0x8C5441D8, 0x2529231F, 0x222C31DF,
+0x135D77AC, 0xBDE8C621, 0xD8E43F26, 0xAC0F1103, 0xF84EDFAE, 0xFCF0D0E6, 0x5D9AF769, 0x97A1382B,
+0xDBE9D16D, 0xEA6E0CE3, 0x1FD34199, 0x8B748247, 0x269A8025, 0x3E0EE4B2, 0x59C19E3D, 0x2B5775C7,
+0xF215BE11, 0xC93254B0, 0x0827165B, 0x639771E1, 0x67E28871, 0x6489BAED, 0x8369A123, 0xCEF584CF,
+0xF675A104, 0xA2AD8203, 0xF43C8154, 0x63055AFA, 0xD90B39F1, 0xCA84BB34, 0xAED4C190, 0x19B2429E,
+0xDAFD1C54, 0xDC9A4C4D, 0xB41A1988, 0xF8725589, 0xA0DA7914, 0x050E8249, 0xB9979340, 0x113B5948,
+0xC90E8F5E, 0xC2C09A2E, 0x3F3B06D9, 0xD3AD2ECC, 0x3DDA3B20, 0x1CC9E4EE, 0xCDA9BABB, 0x505CA4AC,
+0xA5E7ADC8, 0x43BE5F47, 0x25707937, 0x26009A2C, 0x721DCAEA, 0x411F1BE8, 0xEA1FB4BE, 0x374F9FEF,
+0xCD09EFDE, 0xA281E31C, 0x34AB3318, 0xCD7A1F2B, 0x8E24EA4C, 0xE0EAF9CE, 0x124773E6, 0x9EE6D6F4,
+0x0523B2D4, 0xF52FD176, 0x8CA2C44F, 0x511DC17A, 0xBF2B6BEC, 0xEC5B6BA2, 0xE1B83EB9, 0x4457D7DE,
+0x87A1997C, 0xEE2A1C35, 0x3E2FD6C4, 0x9E427A85, 0xA0601A2C, 0x8173BED2, 0xAA181794, 0xE9EBFE3E,
+0xE7C8CD0F, 0xBF6629C9, 0x68E56B49, 0x19313460, 0xE1B2FBFF, 0xB54ACABF, 0xB7073BD2, 0x83DCD246,
+0xA7DB692C, 0xA6688746, 0x3B3C7F3F, 0x6CA0479A, 0x1BD4C8C1, 0x0C2A486F, 0x415A4088, 0x73EF89C7,
+0x71B64268, 0x98514758, 0xE30123D4, 0xFEED47D8, 0x04614B0A, 0x548D855A, 0xE95DDDA4, 0x3780F607,
+0x72203238, 0xAFF9AE39, 0x9986CE92, 0xA0F678F4, 0xA5000993, 0x94123297, 0xF743FDF0, 0x7502287F,
+0x94F996F4, 0x566888D5, 0xA39A9793, 0x3E392C29, 0xA1EAFF48, 0x4541C130, 0x27A68093, 0xCF1B3076,
+0x40A321C6, 0xF9439DAC, 0xF801EC6D, 0x4F384708, 0x9D63ADE0, 0x62D333A0, 0xAA18D8A4, 0x6F369B53,
+0xA4474019, 0x6AB6ECD3, 0xAD942A24, 0x5E6C1D6C, 0xC556B29E, 0xC9D712E3, 0x07C7B289, 0x66F29364,
+0x4B9CAD2E, 0xD07E9882, 0x1F709492, 0xC613B0F6, 0x818E8FFA, 0x4C186602, 0xA1C949E3, 0x67962814,
+0xE5929655, 0xFF927DA1, 0x150DA977, 0xD703F7E5, 0xD6FF38BC, 0x3A4A54F6, 0x007F93B7, 0xB58D77A0,
+0x6C2E14BE, 0xDC910A6F, 0x138C9CE7, 0x68A3B3AD, 0xDC288DB7, 0x8D645F68, 0x6352332C, 0x8A9D0E18,
+0x51E83578, 0x920104B8, 0x8A25E1F1, 0x3583D73D, 0xDD7BD3F9, 0xDC4EB533, 0xD13D1F03, 0xA6E538AD,
+0x2C009561, 0x1F923488, 0x5A771051, 0xA8E07310, 0xB3448C59, 0x5A7CA1C9, 0xE5A32A0D, 0x4B166DA3,
+0xECC7D8BB, 0x83B9CCC4, 0x1CD9BCC7, 0xB7CA0108, 0xF3805169, 0xDFE10DF1, 0xB43697A0, 0x1E3D545B,
+0x8EB80ECD, 0x00C3D48A, 0x981D83D3, 0xBA5C5DEA, 0x241C5AD0, 0xA892AFEA, 0xE0E80C82, 0x9905563E,
+0x9C95ADF3, 0xC03C0F60, 0x2D260B19, 0x79DB4A36, 0x7680CC49, 0xD04F4178, 0x2766F1ED, 0x33D9EBA0,
+0x2820896D, 0xF6463B90, 0x2CBBD473, 0x98732AF3, 0xDC32F388, 0x07744B13, 0x61304259, 0x1B25849E,
+0xC0AC6A4D, 0xA1E8150B, 0x173916BC, 0x61111792, 0xFED11CB6, 0xA8297DD9, 0x25CBB3C5, 0xDC2438B8,
+0xEE6D7552, 0x5AA4F5F6, 0x83854ACB, 0x8947E8EA, 0xF267AE7E, 0xA335468F, 0x9C65434C, 0x741DF27D,
+0x7A9BC9A1, 0x0C6D2736, 0x2378DF26, 0xE072A059, 0x92EC0BEA, 0x4A86349B, 0xD1B804F6, 0x89BA222C,
+0x9957782F, 0xE739A3E6, 0x825BD707, 0xFA931BE3, 0xEFAA63E4, 0x7A4F10D2, 0x1AEB6F36, 0x9079E4CE,
+0x1126CF33, 0xD73BE3A7, 0x974683FB, 0xF8BD6C75, 0x4A3E117F, 0x2F4F92F6, 0xEA7BB2F6, 0x1B2891C3,
+0xE04E5F4A, 0xABBB1EE3, 0x1B610CC1, 0x957C9685, 0x177875B4, 0x063BBC64, 0x530676D9, 0x40FA5BBC,
+0x4CDFDF23, 0x790FFE55, 0x2045E552, 0x59E4D0C2, 0xA1619AAF, 0x3D7A82AE, 0xA5DB1546, 0x52FFF269,
+0x531D3E8A, 0x92C3DA4E, 0xCD279985, 0xC8EECD67, 0xE44AEA63, 0x751206F4, 0xF78CD455, 0x7EF02D70,
+0x1206B521, 0x56D038A3, 0x969F5019, 0x3D5E58B5, 0xFAB5BDD7, 0xBFA85B3D, 0xEFD91607, 0x3210C94E,
+0x4D7B431B, 0x3C02AAD5, 0x8EAB1929, 0x8B92D3A9, 0xAA57239D, 0x8C58D595, 0xB53A9C2E, 0xD761F97C,
+0xD6E435ED, 0x2963004D, 0x9215A2C0, 0xA674E94A, 0x89D000F4, 0xE62466B2, 0xE3C1B9C5, 0x3088BD32,
+0x0111A293, 0xAE97FAAE, 0xFC456F06, 0x2EC9676D, 0x82543DED, 0xB4F2479B, 0xC9F0F82C, 0x60AFC308,
+0xEF918D71, 0x89212AE7, 0x71248526, 0x7809D5E2, 0xB530A903, 0xB1D7CDE3, 0x59C30B1B, 0x8CB72A4A,
+0xE84B76AB, 0xB9B08EC4, 0xD23B65DC, 0xE128E50B, 0x7B909626, 0x01F62037, 0x03BE3EC4, 0x92D2C401,
+0xF8D3DE0E, 0x6F50DF8C, 0x049B32C0, 0xB097A75F, 0x44F03398, 0xB4420BFC, 0x5319AC27, 0xA228E21B,
+0x2BED1EA7, 0xD4014520, 0x657CB981, 0xF3D1983B, 0xC02AE272, 0x856288AD, 0xB0841C73, 0x0053BC70,
+0xE508B704, 0x1DBE7CC2, 0x5B4454C0, 0x9BDB8502, 0x40F6EA96, 0x5BE53103, 0xB99FB09F, 0x61B7E256,
+0x3E0F03D0, 0x02905503, 0x47E89631, 0xA5B3755B, 0x4018FBF4, 0x57064A56, 0x522D5507, 0x10125570,
+0x0FDC499C, 0x73D62FF3, 0x45A273F3, 0x5EE515E1, 0x2653C96E, 0x917642B6, 0x26CF35D6, 0x230FB184,
+0x433FA642, 0xF730BF1C, 0xDD5F8C3D, 0x1369D073, 0xED988254, 0x4FC611D8, 0x633ED62D, 0x752713AE,
+0x257DCEA2, 0x0E202047, 0xDAAB0B08, 0x929BAB78, 0x54E2427F, 0x998922FE, 0x530B1F5D, 0x54B8963B,
+0xF928BEA2, 0xF3D8B1BB, 0x120F12D5, 0x4BE5015B, 0x9D280DCF, 0xDF1C98DD, 0x487B151F, 0xBD45EB7A,
+0x0973D9AC, 0x84262AD3, 0x88A8C730, 0x6F2FC167, 0x08686F6F, 0x02401588, 0x9066BA37, 0x4C7CB029,
+0xB9CC5280, 0xABBACF7F, 0x4746D246, 0x46A8946C, 0xFF9A4593, 0xA0DA4062, 0x6D12263A, 0x475D4DC0,
+0xC3EDCDBC, 0xD910F085, 0x332EFBBF, 0xC52DEA23, 0xFFB27CF3, 0xDDA57424, 0x17112D9D, 0x3CB241CE,
+0x8F32573F, 0x77583801, 0x99D68BAB, 0xB03D7C78, 0xA77209EC, 0x7AB51904, 0xF0C4DFF4, 0x43515E60,
+0xC876EAA2, 0x4C1A8ABA, 0xC7A92C4E, 0xE53871BC, 0x7633A448, 0x1CF68AD8, 0xB520B8E0, 0x8017F8AC,
+0x03B826BF, 0xD0C118A9, 0xA8EA18A3, 0xFC4D7032, 0x49C495D1, 0x0B435F62, 0x88CEDFDC, 0xCD05E791,
+0xCDBDF374, 0xAE004ECA, 0xF8CBE572, 0x493217A6, 0x1F37F807, 0x232A8904, 0x0A3371FF, 0x9BC1199A,
+0xBA19CB6D, 0xAE527A83, 0x5D5DA650, 0x9C5E64AF, 0x4A219C63, 0x10C52173, 0x2D701F22, 0x93236858,
+0xC5E2E264, 0x0DC63307, 0x44FD68A7, 0x4B0D2320, 0xF45AAE9F, 0x7B665F28, 0x8C2411B9, 0x1B381B40,
+0x6E74705F, 0x3A7CAAA0, 0x1B5E3365, 0x1E4D1DFE, 0x548F7343, 0x42341DCA, 0x739E3C3E, 0xB11DCA0C,
+0xFCB31581, 0x97143F57, 0x28AC3E66, 0x8911C8F4, 0x8539BAFA, 0xF2DC7417, 0x019DBB66, 0x754F81F1,
+0xEF8FC204, 0x25CF7B15, 0x41CFD5C3, 0x56B099A5, 0x5305A27B, 0x25FBF6A6, 0xFA3F588B, 0x87ED71D8,
+0x6CE1EC38, 0xEB7A6A3B, 0x4A05CF67, 0x4927804D, 0x51F329AA, 0x30572B3C, 0xF8D3A5BB, 0xD1561786,
+0x1148CCD3, 0x20B0D906, 0xAF0D3F97, 0xB5BE5B7B, 0xDF349B2D, 0x0874B277, 0xF83F502D, 0x46202E00,
+0x1E70638C, 0x343BD550, 0x5473570F, 0x77561892, 0x3D2DC1DC, 0xAC97C693, 0x0273B2BC, 0x34FC1E00,
+0x258657DB, 0x39E031E7, 0x3FF7A595, 0xBB4E5B29, 0x4AF0823F, 0x73770FE7, 0x39F0B3A6, 0xBA140A9B,
+0x785C6865, 0xD02A18CC, 0x2EF9E505, 0xBDD0ADD6, 0x9D6D9C07, 0x916E2F0A, 0x17EDF26C, 0xBEC289DA,
+0x685FBFDE, 0x3450FAD5, 0xDA9651AE, 0x89A9384B, 0x6207A1D9, 0xA582828D, 0x3445B008, 0xA0BFEBE8,
+0xE5CEFF04, 0x342DE482, 0x3C86C6A2, 0x89E6A601, 0xB36FE551, 0x9C24E0CA, 0x9130F2CE, 0x0CE32726,
+0xD2B771FF, 0x483E17C0, 0x0BDA62B8, 0x1E1ACDCD, 0x69B742ED, 0xF3FD2B7C, 0xFDC120F2, 0xEE5BF4A8,
+0x1E360BB0, 0xA1AF9DB4, 0xBAD9D00D, 0x67660397, 0x91EF6138, 0x972B8486, 0xCFD87D95, 0x7E81782B,
+0xA365AF96, 0x6B53430F, 0x26200B42, 0x9526B69D, 0x735E14A6, 0x996D897C, 0x2D28A4E9, 0x8D63B40D,
+0x502FE4ED, 0xF95EA8CF, 0x2A3EF897, 0x8D1F195A, 0xAF09D684, 0xD067C394, 0xB8F9DAD8, 0xD3C82442,
+0x67566D9A, 0x1DBC325C, 0xFA10A3DB, 0xDC6E0F0B, 0xA68823CC, 0x5C61EE1B, 0x45173A19, 0x627EE4B4,
+0xA9E8E097, 0x5DD1C18A, 0x376CE55A, 0xAF78895B, 0xAED12AA6, 0xCBA18693, 0x5E9292A1, 0x97EC50B7,
+0x45DD5BF2, 0xDFE5DFAF, 0xBB3253C2, 0x8FBC6EE6, 0xB6A1BEBC, 0xED7380D7, 0x243DB2A3, 0xE178B48E,
+0x07BBE7D5, 0xB78C8A43, 0xA913C2D6, 0x86CC1AA4, 0x6D645CE7, 0xD795B619, 0x29A6DB9E, 0xF404D933,
+0x6E82E54E, 0x40F1DC97, 0x0003EECD, 0x5C1FCB49, 0x739DE2BE, 0xE9BA07C5, 0xAF63D719, 0x53DF50B4,
+0xB95463CA, 0xE3954C08, 0x44DA2928, 0x28C0DC7E, 0x32A5032F, 0x520543E4, 0x4AEBE667, 0xF1AB7037,
+0x96ED4548, 0x96EA7057, 0xF50A33AD, 0x225096EF, 0x902F7C0C, 0xD2B2159B, 0xA61EC807, 0xB851BA57,
+0x9EFBEBBA, 0x78DA1618, 0xEAB26CAE, 0xB8FD13E8, 0xDA0C58FB, 0x78F5C8E5, 0xB51AF4E2, 0xC9E205E2,
+0x2C14E06D, 0x04B919DB, 0xBEF8D860, 0xB5C4A0C1, 0x025AD749, 0x1D2C365F, 0x83D7EE54, 0xB596DC92,
+0xF2DF5509, 0xF329DD7E, 0x871F187C, 0x46D88820, 0x910B39C3, 0xA0AF6370, 0xBABF7ED2, 0x7A0170A6,
+0x176C0C88, 0x5B2BBCCB, 0x561EEBB2, 0xF7C5D677, 0x00002A29, 0x9E010100, 0x12391600, 0x98EDF47F,
+0x1927FB03, 0x8E2EE37E, 0x6037B5A2, 0x7B13C748, 0x2990854D, 0xDDFA31C3, 0x481A8CC7, 0x378BA337,
+0xC89A4DA9, 0xC4923B9B, 0x9C94071A, 0x636D1CAC, 0xB38263B9, 0x945B699D, 0x3D204BD1, 0x5438A215,
+0x54085C3B, 0x97902775, 0x734C001D, 0x6EF541D7, 0xED6551F7, 0xDBA29043, 0xA8CA0331, 0x79B55022,
+0x5146EADC, 0xBF30C1C4, 0x9D3A7A46, 0xAA70EB28, 0xF7D3D283, 0x17A1C975, 0x1F3A4C73, 0x3D3C5CCF,
+0x9C649625, 0x2D10EADA, 0x0C4F19BA, 0x3243247D, 0xDBDD81C1, 0xE6941E98, 0x1C994E86, 0x59897221,
+0x655CE4D3, 0x0C2A2CF4, 0xFD1651D9, 0x781300D5, 0x059A0AE6, 0x4B1F2854, 0x89B910D9, 0xEDA91B12,
+0x3604073D, 0xA21C4613, 0x39AF7841, 0xAB4A0BC3, 0x048DE9B0, 0xB669A0D4, 0xFB279513, 0x42819EB1,
+0x55C4EFAF, 0x1C66925C, 0x665AB014, 0xDF340454, 0x5F882B2E, 0x056087CF, 0xA27D1FCE, 0xFEF2277C,
+0xFE377829, 0xBCD85306, 0xBFAA127C, 0x1CAE0B36, 0x1A07CA80, 0x516CADF2, 0x95A1AAE6, 0x052B6F93,
+0x62098FC1, 0x3A340CF8, 0x60EAD377, 0x8D117BCE, 0x5206E136, 0xB2156417, 0x307E77A3, 0x92D67FD6,
+0xD20E66A9, 0x6278D0D2, 0x7AA8B4A4, 0x47F8A3AF, 0x98D1004E, 0xD0C2B22B, 0x94F35990, 0xEFC2C5F2,
+0x23CEA375, 0xB5BBE7F2, 0x0C67C102, 0x76605CA0, 0xD5916E7C, 0x8B07A285, 0x3AA19941, 0x38A40431,
+0xF2D27595, 0xC3C4DFB4, 0xCBC71669, 0xE6733CD7, 0xEA47D2A1, 0xED62E530, 0x86EB0E58, 0xEAC68282,
+0x3C37A61B, 0xC931E829, 0x93382816, 0xE6AC6677, 0xB79D1C9B, 0xBF4D54E1, 0xDB5279C8, 0x471372A8,
+0x9003861E, 0x08AED979, 0xC3513090, 0x23639875, 0x2A07740E, 0xDFA0BBF5, 0x82A10A04, 0x4DA1F438,
+0xF43737C9, 0x942F699D, 0x889FFF6F, 0x0471AB94, 0xA335CF6F, 0x4E4DEC1B, 0x11D5DDFB, 0xC957ED13,
+0xD7C781B9, 0x927B896C, 0x09BCEDC7, 0x7EBB0ACE, 0x799A38CB, 0x4665A973, 0xB2131734, 0x3B3A5CE1,
+0xCF315B24, 0xBFA5ABD2, 0xD1BE3B27, 0x05DA3F05, 0xC2811E66, 0x50E74248, 0xC5D07E03, 0xBA90ED1C,
+0xDDA456BC, 0x8B5C96B0, 0xA82CC158, 0xB2A66A48, 0x2FA07EE8, 0x36A88845, 0x8002DAC8, 0xA5D88008,
+0xEF813CC2, 0x0D14996D, 0x2454ADCC, 0x247F472F, 0x53AC252F, 0xED929046, 0x8DB06060, 0x5583DE88,
+0x6D505E22, 0xDE02A245, 0x4593D66F, 0xF00C433D, 0x9B8F6A63, 0x6F0AA9D9, 0xFAB7DC0B, 0x5E0C3EE7,
+0x052108FC, 0x76845CE7, 0x4DA31AFF, 0x67369AE3, 0x2E5EB7DC, 0x36D477F2, 0xB505CC0E, 0x4DB4469B,
+0x03FFAB26, 0xBB30CF0B, 0x14A3218C, 0x0A9FAF17, 0xD975BFD7, 0xE822F2EB, 0xDD11661D, 0x410E1329,
+0xD9F9830B, 0xC158D72E, 0xC1259945, 0x99FF97FA, 0x5AC3F579, 0xE792C53B, 0x91B7EAF4, 0x2635C45B,
+0x8B7F1DC3, 0xCBE17D6A, 0x3B070B10, 0x85AB3B36, 0x6D283AC4, 0x1DE66B2F, 0x80D92B75, 0x01000000,
+0x16009E01, 0xF57F123B, 0x4B6A4C05, 0x3ECA436D, 0x3F174F91, 0xAC591F1B, 0x2855F8DB, 0x0D47817E,
+0x1F8FCEE1, 0xC31F4CA8, 0xA477F1A9, 0xF7528A40, 0x19E47510, 0xB5875B27, 0xEA72E20D, 0xB828CC1B,
+0x776EA530, 0xDF213D51, 0x553337D3, 0x56E2D371, 0x6CC8CA41, 0x3D7EA72E, 0x3F83D267, 0x4A1AADD9,
+0xC7B24815, 0x80C1CE1A, 0xC110DF30, 0x6411874D, 0x169668EC, 0xB1AE3881, 0x0EA2832A, 0x87D41EDF,
+0x27C6496F, 0x9C905E4C, 0x3D8F0AD2, 0x418DC098, 0xDA5AF0AD, 0x15488717, 0xB85DDC7A, 0x43D1F8ED,
+0x7E477D53, 0x6460DC16, 0x30332127, 0x15661B1C, 0x0336197B, 0x848BBC1A, 0xD1A2BF5B, 0x72C3485E,
+0xBECDF8F7, 0xE5E245BF, 0x85817AB5, 0xD6D8CBC5, 0xAB3ABCAA, 0xEF40B1EB, 0xC7D3A640, 0x111F9C67,
+0x8C946B19, 0xCE46E5BF, 0xC6F11254, 0x0A799F45, 0x16358A19, 0x64B94BC3, 0xD600AC0D, 0x3760A545,
+0x790B9F8D, 0x554DBA83, 0x46F580E7, 0x849B506A, 0x2C3ACD02, 0xBD10F760, 0x8B1DD814, 0x954F2B24,
+0x3191E454, 0xD7186D82, 0xC44837F6, 0x8A6F8B6C, 0x794D2CB3, 0x12FB4F99, 0x694FA055, 0xBFC4E1B4,
+0xA3EDD531, 0x816FA30E, 0x0A4B8C7A, 0x837D8DA8, 0x157CD930, 0x99D4AD60, 0xD5870228, 0x4E89DD03,
+0x4ACCF173, 0x8A79ABCE, 0xFEF094FF, 0x7654891C, 0x6DE5FB38, 0x543AC6D1, 0x68D822F2, 0x44969BD1,
+0x9D4CD2D9, 0x9E7505C3, 0x681861B6, 0xBD80EDC9, 0x249B24AB, 0xD290210C, 0x03C34DF8, 0xF6CEACF0,
+0x4FC38BBE, 0x79AE8F96, 0xF5F0D1C1, 0x5C7B6194, 0x4DB65CA7, 0xC39C2674, 0x141B0850, 0x6671F6DB,
+0x2497C46C, 0xB8E15CB8, 0x9C1C5E66, 0xCEA9CE75, 0x4605C46B, 0xE998EA41, 0x36DC81FE, 0xFE79352A,
+0x400C4839, 0xF404A0D6, 0x96B5C9AC, 0xCDBB3C50, 0x845C8EA2, 0x190FF91C, 0x50718356, 0xC47D764B,
+0xAEB2044C, 0xBBCDBB4C, 0x66F67685, 0xED32ED5E, 0x4E186957, 0x260B4626, 0xAD87236D, 0x4CAEF297,
+0xB7605288, 0x9EFAB8B7, 0x632C3CAB, 0x255330A7, 0xC46DFE9C, 0xE2065A76, 0x69FA8BC0, 0x052B93AC,
+0x4B1DF2B5, 0x880B4291, 0x1B39B96E, 0xB42FFADA, 0x60CD6C27, 0x6102CC29, 0xB7A44A39, 0xADF5D066,
+0x0B9A18AC, 0x8683C0FE, 0x92B4B544, 0x35B95CC9, 0xF22E73D4, 0x181150BA, 0x3570DBA2, 0x52EF151A,
+0x73556BAE, 0x333C71F8, 0xE731E077, 0x85CD6D65, 0x20ACCB5F, 0x0F838A37, 0x027F8472, 0xAB9F541A,
+0x7EB2F48B, 0x09B20F0F, 0x7A84B054, 0x87287464, 0xAE7B3D55, 0x01004847, 0x9C348B20, 0xF7405961,
+0xE275A7E1, 0xE192172E, 0x7C456D65, 0x4E0B936A, 0xB8B23F5B, 0xA8F2BBFD, 0x00B0A64C, 0x21010000,
+0x4216009A, 0xB47EE13F, 0xA5CC03FA, 0x692CFE12, 0x35E2C338, 0x33CCD526, 0xA706A54D, 0xBAE56289,
+0x6F172909, 0x2AF52A39, 0xD9262295, 0x68419891, 0x24C5706C, 0x285363FF, 0x1B3FB91F, 0x97AD5790,
+0xA7CC3FE7, 0x63F9F465, 0xFEEB73FF, 0x4C79A488, 0xD26FF08D, 0x28471202, 0x0EE63AC6, 0x40697968,
+0xB93ECC2D, 0xA2954907, 0x6B7155B8, 0x3A593161, 0x8E71609E, 0xB4488E7F, 0x466173F8, 0x3BF2314D,
+0x1DD32D41, 0x404507C8, 0x91196326, 0x75A075A9, 0x335EB381, 0xC0599417, 0xF94E4B95, 0xEA7A9449,
+0xB33DED6C, 0x30A3DCAF, 0xDE147B16, 0xF755739A, 0x13BF2FC6, 0xDBF0644C, 0x963E82C6, 0xB779D167,
+0xBD06CA31, 0xC20766A2, 0xACEA0956, 0x0F7D8664, 0x5ED6572B, 0xBFA5D2C4, 0x81938989, 0x52DE6512,
+0x148ACC06, 0xAEB7B8F0, 0x926E9749, 0x3D1C7E0C, 0x67E965CB, 0x12C59E06, 0xB4EEE57F, 0xA03FC218,
+0x7F450241, 0x8659AFA1, 0xF4E92757, 0x025D9896, 0x6D03761D, 0x4579C5EB, 0x14B53799, 0x5143DC93,
+0xE3FA0B42, 0xD8628529, 0xB87199D6, 0xC9BDDB72, 0x42D43DF2, 0x21031332, 0xA0F8CE8D, 0xB35390BC,
+0x486831AA, 0x925DB5D1, 0xA5C824CD, 0x9144C2A3, 0x2849961F, 0xD33EA4CE, 0x0CC81A29, 0x2D86AF12,
+0x055FA236, 0x529A5EA9, 0x6A912993, 0x39F41104, 0xCC5F2A2D, 0x0E9C205C, 0x3B44E285, 0xDA211B99,
+0x4162A936, 0x4CA6519B, 0x740B1873, 0x58552300, 0x44D512AD, 0x607E48DE, 0x5149283B, 0x3B9A13FF,
+0xD3298728, 0xB6477894, 0x7B4A23AB, 0x2FA0C43D, 0xBB821901, 0xE256A1B6, 0xFFBAE6A8, 0x01ADD273,
+0xD616E0E3, 0xF511DCD8, 0xF317B60F, 0x06F69FD8, 0x7A06B40B, 0x73CD8BE1, 0xD422CC59, 0xF26BBF9B,
+0xA5080EBD, 0xFB30F79E, 0x194D72D9, 0x871BB3A0, 0xAA831905, 0x7480B0AE, 0xD4B3ACDA, 0x5D28C55F,
+0xDB80F5EF, 0x395D85CA, 0xCACF3314, 0xFF4036E0, 0xA00228D2, 0x85F422ED, 0xA2AD091F, 0x4DC90075,
+0xB4B53F24, 0xC539FAAB, 0x49FBED28, 0x80DEAF3D, 0x0D399CF4, 0x3DBCBE93, 0x7593C1CC, 0x5BF025D0,
+0xAC481493, 0x945F27DE, 0x755427A9, 0x74B0540C, 0xAE5CE984, 0xBDE90A0F, 0x5F45C640, 0xB15B4906,
+0x185293E8, 0x97938236, 0xDBCB0EA2, 0x401CF356, 0xA4969331, 0x2A63B749, 0x52DE8790, 0xE8841088,
+0x1FDEFC21, 0xE015CE26, 0xCF21EAB0, 0x1B22EFA6, 0xB2FA4874, 0xC86B5C2B, 0xD89FCA28, 0x4164A132,
+0x11BBC3BA, 0x5F75137D, 0xC6C701CA, 0x38FECCFA, 0xCC90F6DE, 0x2917D485, 0x6F53D346, 0xFDEF6947,
+0x5104AC94, 0x411C6FD6, 0xE00FB81C, 0x394D4181, 0x0181BB41, 0x2F96970A, 0xFA0937B6, 0xF4C51D82,
+0xF02C7FFE, 0x8BCF53B5, 0xC4A0B2A7, 0x38EE6EB1, 0x7F1C215D, 0x724A5CEC, 0x31F32098, 0xC397F24B,
+0x55828189, 0xC333251F, 0x4E8A0E01, 0xE645BE2F, 0x8556CE30, 0xE30AF668, 0xE57D4136, 0x87ADA87A,
+0xF825966A, 0xB1755FD1, 0xCFE73F41, 0x894949E7, 0x916FFBFC, 0x1522FAE8, 0x319BBC64, 0x631326BF,
+0xADED6389, 0x80A5C0D3, 0xA8DBA378, 0x84C13846, 0x1785FB93, 0x97853BC2, 0x4BC7E210, 0x205FBA02,
+0x7A40AEAE, 0x8F58A654, 0x11C4A37F, 0x5B12633D, 0x21E5EFAA, 0x7839E9DA, 0x32A7D589, 0x105B8021,
+0x59829AEC, 0x991A0A5D, 0x59AE9A99, 0x305DEF29, 0xCA6F9ADA, 0x1DA2F5AA, 0xBA99A845, 0x824365B2,
+0xFA5CF32E, 0x02EE081A, 0xE7A629E4, 0x3DE58690, 0xEFEF03C4, 0x997688B5, 0xA7F7DA2B, 0x2C42BCF1,
+0xF29BB0D6, 0x924C0331, 0xA0BAA9B3, 0x17A7B4DA, 0xC12A8717, 0x3350994E, 0x607314C5, 0xB06FCE3A,
+0x3BC3DC1B, 0x06F09B49, 0x0636E049, 0xE847180F, 0x1657308F, 0xDE25E9CF, 0x8D578122, 0xC02AD37A,
+0x491E5DF0, 0x34F84877, 0x122FC2FE, 0x5C1C1332, 0x937A279B, 0xE891AF21, 0x7D86937E, 0xABD3268A,
+0xD65A2F13, 0x5CFFFD0C, 0xA4DAB816, 0x6AF04FA2, 0xF29093C2, 0x44B36D3E, 0x13BE8BE1, 0x5D1EE9E1,
+0xFBB7DF46, 0xCC7EAC54, 0xDE794D3C, 0xEDCA0271, 0x35BA9304, 0xB4EEB5C3, 0xF8B00D6A, 0x6174D8CF,
+0xB61E89AA, 0x440FBBAB, 0xAED5BC58, 0x0EAB39AC, 0x212292A9, 0x42A909C6, 0xE8DF0C49, 0x62FB0749,
+0x5846D20A, 0xA0934E4C, 0x1E44C2C9, 0x170C06A1, 0x4610F2AB, 0xB66B0F7A, 0xB6AF8933, 0xBB2E77BE,
+0x53171A4B, 0x31D8DEDA, 0xDCAB6BEE, 0xC399E6B4, 0x0EE9F6D4, 0x1219C017, 0xEA32F71B, 0xEE35EA8A,
+0xB600D9BA, 0x97AFF969, 0x83C24948, 0x57A8B66B, 0xC73A0AE5, 0x3742F7E9, 0xD8832EB3, 0x93BF3E20,
+0xED8089DA, 0xF242C6AC, 0xC58F87FC, 0x6BDF6286, 0x81A6F6E0, 0xD9C1279B, 0x761DB590, 0xD6938295,
+0x2CD42A57, 0x4DACDA4B, 0x708A6EF8, 0x2CB2B9FE, 0xE391BA12, 0x2C417E48, 0x4CA5DE30, 0xD89C02C6,
+0x78210430, 0xE3447963, 0x5BEDAD34, 0xD8119E5F, 0x2ED04FA0, 0x6ECD044B, 0x4E8A08D9, 0x7B177111,
+0x419314FB, 0xEFF28356, 0x2245C56A, 0xB550E3E8, 0xDEE12A42, 0x133D3C14, 0x7C9477A6, 0x834BC06D,
+0x568FAC13, 0x750D6253, 0x5928ADA1, 0x92521068, 0x51A2A6D3, 0x8F763E9A, 0xFDCB511A, 0x36FB9D33,
+0xA11CA87F, 0xCD5B8A90, 0xDE7E08EA, 0x5C64EDDC, 0xE071F945, 0x94ED0786, 0x0042489A, 0x3E1A4FD6,
+0x30AA52C5, 0x8729FB0C, 0x128C4F0F, 0xFE348D04, 0x74091993, 0xECF1FEDC, 0xF1A2AC5B, 0x1C0C648F,
+0xCE49CFB2, 0x0D4DF748, 0x719A1478, 0x8C54D06F, 0xFE96440B, 0x4756883E, 0x1BDA7A7F, 0x11E8FE4E,
+0x60DBE075, 0x0E7D9469, 0x586C47BC, 0xD6A3FFF4, 0x04067D2B, 0x4BD88FB4, 0xF6DE37C3, 0x42D3ED91,
+0x668859B8, 0x6DF861ED, 0xF133C90A, 0x8CA89BEF, 0xA93CEA94, 0x275FD107, 0xF6FAC48C, 0xD6EF76E5,
+0x452DA227, 0x8CEEAD8C, 0x07C0AFD3, 0x49BFEC7E, 0xC2539609, 0xA6103B54, 0x0FAD4434, 0xCCC29260,
+0xFBD49575, 0x2B2FCF1A, 0x47E67816, 0x92B91B7E, 0xFBAA292F, 0x5CAEF965, 0xCA1A9276, 0x99AC7D06,
+0xAFF7A6A9, 0xA43F784B, 0xC7AA1897, 0x12DEBC7E, 0x702CA2BB, 0xAA3CB882, 0x8B3C14DE, 0x5708BB4C,
+0x8C0B084E, 0x9EDB5378, 0x4BC9FB41, 0xA0E6A1BC, 0x545B8BDE, 0x7A768BA0, 0xAA36BAC6, 0x5D8AC4B0,
+0x27652643, 0xF446AB65, 0xE0C4D0F3, 0x9935E615, 0xD7486332, 0x8CBB2916, 0x45552C39, 0x1934B44B,
+0x01A186AD, 0x74E4B060, 0x0A96EDB0, 0x15F20001, 0x6536FA45, 0xFA6E7E32, 0xEF515D0B, 0xBF96DCE6,
+0xABF310C4, 0x98D75177, 0x1289E05A, 0xCF7E2C8F, 0x062D4903, 0x860F447D, 0x3E68D60F, 0x5ED14DE7,
+0x8E8E616D, 0x36CE27E7, 0xE8200756, 0x148DD532, 0x4871431C, 0xDEB97B5B, 0x2924F1A4, 0x90A3352C,
+0x5B3D7851, 0x32813915, 0xF8D05BD4, 0x85C28368, 0x45EBB92E, 0xB5E04545, 0xD2EB45D4, 0x2D3B8332,
+0xA2E8AF65, 0xAD4BE71C, 0x57023DCD, 0x3F114F2E, 0x9D3EFAD1, 0x7DFBC0CD, 0x6A50CA7A, 0xB902CC8D,
+0x6AF71180, 0x8E3A66C8, 0x79CD5D40, 0xA60B8455, 0x13381944, 0xA8ECADF6, 0x4273EA2D, 0xF0237B55,
+0x083DA90B, 0x2D3BF9D6, 0xD2010018, 0x0860BFDF, 0xF05139DC, 0xEF9845CB, 0x4F8CD0CC, 0x2970FFEE,
+0x153605AC, 0x8BEAE01B, 0x0563BBAB, 0x45AC6274, 0xC782654C, 0xA3780575, 0x4902E2D4, 0x3BD0172E,
+0xF0E7CB41, 0x664D7034, 0x56021EF4, 0x8DE57253, 0x9D48356E, 0x2801ADD1, 0x76A4AA52, 0xCC666F59,
+0x64F9CC23, 0x5652A503, 0xED8C5D97, 0xD8F5BFAB, 0xA609C922, 0x46D567A7, 0x8433A7C5, 0xA753B083,
+0xC52B6CE2, 0x718761E3, 0x7FC21DF1, 0xF41AAE03, 0xC77375E5, 0xBCA49FE3, 0xD9BF7685, 0x41C06870,
+0x1F96E5E5, 0x3BD727CF, 0xC80D273B, 0xCECF8C7C, 0xCA303F69, 0xA25AE3AB, 0x87CF1B7E, 0xD54A474F,
+0x7773C3EF, 0x6BA328B3, 0xBE907AA6, 0xB470E29C, 0x6043B8C5, 0xA57590D3, 0x42924280, 0x732F41DC,
+0x1229186F, 0xDE6C54C1, 0xECE91A63, 0x2C6F57CC, 0xCA13FA34, 0x2EA31832, 0x4516478F, 0x4C6F4CF9,
+0xCE34FF82, 0xAA0EE273, 0xE30967C1, 0xD3E5D55C, 0xF34E3599, 0x09B64118, 0x07CAFAAB, 0x02B14FB7,
+0xFBD68E69, 0x9C4C7639, 0x676D6DE3, 0xF17914C6, 0x3AAC703C, 0x9AB48447, 0x04E98B5D, 0x0C71F64A,
+0x0C71A947, 0x4504F0BA, 0x13456627, 0x95E33155, 0x4F205B4B, 0x03C48A0B, 0xFA8A3080, 0x5A8235DA,
+0x7791CC28, 0x46FB3A66, 0xA7D77635, 0x005D9D72, 0x54400D24, 0x25B10CF8, 0xD29095E2, 0x408AE8D6,
+0x0267E8B0, 0xE4560C68, 0x1F6C1055, 0x665A3687, 0x0AA1C100, 0x540B7224, 0x2561CF87, 0x8E178438,
+0x237A7C7F, 0xEEAA0970, 0x12F6A568, 0x957D4F28, 0x746389A9, 0x3C120662, 0x5C2ED5F0, 0x7D16D274,
+0x36D74A7D, 0x2B1EC453, 0x8CE9D758, 0x7FDE1E02, 0x7948CF20, 0x1DB62E51, 0x9FE70D0B, 0xA153ED70,
+0xF0A39062, 0x6BF953C3, 0xE821BF5F, 0x39DC49C4, 0x285AF9E4, 0xDCA47E0E, 0x4D64B07C, 0xEFD1DA07,
+0xC601DAB4, 0x86014C44, 0x516D4759, 0x1F20BA5B, 0x8E8F7644, 0x111A9394, 0x3D304830, 0xFC160B04,
+0xD49EBCBA, 0xA5682F96, 0x9F04CFF1, 0x914E40E5, 0xB3C64FC5, 0xB7480434, 0x98914A98, 0x63E39435,
+0x6FFA3E1A, 0x98BC1513, 0x0F1D7258, 0x40D99952, 0x62D3E68E, 0x9F338D8C, 0xE07F74E6, 0x4DC18019,
+0xAD8743A7, 0xF6996A77, 0x902F0D23, 0xDDA41286, 0xB8A66432, 0xE6132CDE, 0xC94B7888, 0x9575D7CA,
+0x69C53FCA, 0x358DBA5A, 0x7A65273B, 0xF461F390, 0xA9ADA7DC, 0x935DD537, 0x2BFB259C, 0xE3E5B5FC,
+0x9482801A, 0xB827B912, 0xFE956E0B, 0x43CFE36F, 0xCF543F4C, 0x6AFF1229, 0x0E25F739, 0x2F61B6BE,
+0x2AC1EF48, 0xAD6B0B49, 0x2B31AC29, 0x360D283E, 0x6504E7B0, 0x60295A0A, 0x3DD4BE38, 0x9DAA9E40,
+0x582521B8, 0x36CB0ECB, 0xE289483F, 0xE6503FA0, 0xBC2B5C8D, 0x174BEA0D, 0x054B171C, 0x75A21414,
+0x920123C9, 0x3B5E51DF, 0x8920028B, 0x6671E204, 0xB2A2607C, 0x3526BA7F, 0x2D6B5163, 0x99FDFBB6,
+0xB5F7C97E, 0x1375555F, 0x11A48FF0, 0x5C8329D8, 0xCBEC1D45, 0x5BEB1A42, 0xC86C9D24, 0x8BFDEE0A,
+0xFF8C99C7, 0xC88CFCED, 0x8609630E, 0x841781CB, 0x11EF7312, 0xE1F13167, 0x84B24AD2, 0xF6EECCA6,
+0xE8FB0DBF, 0x74C942F8, 0xC3C785B7, 0xC83C94BE, 0xA531C2E8, 0xCC1EDF06, 0x3361016E, 0x1E62F152,
+0xEE048ED4, 0xF353CA0A, 0x8D5ECF5A, 0x57F63FD5, 0x8626A849, 0x170092DE, 0x3424AB21, 0x4C0AA092,
+0xF97E5333, 0x8F933534, 0xE281F1A3, 0x8E1F8401, 0x3C657E35, 0xFAF619F4, 0x5FC3843B, 0xDC7DE2B1,
+0x3FD7858F, 0x314584A5, 0xA168A8ED, 0xA4E3045E, 0x50025E3A, 0x32640CE5, 0x52FAEBD7, 0x5FD1387B,
+0x5FC88C09, 0x4F60CEBB, 0x4ABC2570, 0x1231295F, 0x7D44662C, 0x057D7164, 0xFE2F90AF, 0xE5C089AB,
+0x53FE5BA2, 0xA93244EE, 0x342E297E, 0x78846362, 0x03AF174F, 0xEF1C6710, 0x0F12DF3F, 0x9A77569B,
+0x513DFBB4, 0x33E8DCCA, 0xCEFD882F, 0xEF5D3068, 0xEC3364E0, 0xD83FF9A0, 0x9B0506E8, 0x2537E6FC,
+0x09FB3010, 0x6966C855, 0x72564FBB, 0x2F7B2F44, 0x61852B27, 0x9F66D57B, 0x5957C3BB, 0x5FD19685,
+0xE872DFC6, 0x10B8789D, 0x62CDB3D4, 0x303D966A, 0x90ECEDB2, 0xE48AC26E, 0x6B0A1FB2, 0xEFA60C3E,
+0xA8D4E07C, 0x59970A8E, 0x6AFEEF37, 0xAEF686D2, 0xEC49FA62, 0x9C106730, 0x31F3EF75, 0xFB0F8D9B,
+0x0F099F0E, 0xA3DA23DC, 0xFE14EC58, 0xEE30A593, 0xEF7712D2, 0x3BB4B5C0, 0x72C27090, 0x2CCB734F,
+0x18DAE55F, 0x664C38C4, 0x2D8A5D23, 0x5FD950FC, 0xDAFFCC94, 0x3BC18C74, 0x6AFE0E87, 0x88839DC6,
+0x130C2099, 0x413445FA, 0xAEFB1E58, 0x320C8934, 0xFE741FAD, 0x756F2A3F, 0x3E328730, 0x204E3742,
+0xA8E28BA5, 0xDC6E031C, 0x63692AB0, 0xBD171C87, 0x283C4A04, 0xA0AC4D9A, 0x1A10CCCD, 0x8352FD4F,
+0x7E781C5D, 0x91AC82C6, 0x515C167B, 0xA4D3998E, 0x80A12F1E, 0xDD217491, 0xE6B02CB1, 0x243B5BA2,
+0x667CB8AE, 0x8F9EC607, 0x153D8A66, 0x453C034B, 0xBB104172, 0xEA174314, 0x1C9D76F6, 0xCC0E1AA5,
+0x2774A4B7, 0x7975D44F, 0x5EFCB0BE, 0x598CB187, 0x5FD50102, 0x18C77D56, 0xF2295AAB, 0xA6864789,
+0xA6218298, 0x9D1BC45F, 0x55F8674D, 0x21BF7158, 0x7F7FCB9D, 0x8C6AEE8F, 0x6BB37FF8, 0x9169CA36,
+0x15BCF848, 0x9ED5E148, 0x469976EF, 0xBB45DD3C, 0xF45EB91D, 0x7BD4C274, 0x20ED3217, 0x227EAACC,
+0x23371788, 0x05F01D1A, 0x2E98069F, 0x19BDDC49, 0x0C9EEE85, 0xECE66246, 0x0CF3EC68, 0xC57F9DAB,
+0x1FA24190, 0xA9601EE8, 0xD5B5D567, 0xFC5F59E3, 0xE405C0E8, 0x3FB2D2E0, 0xCFB7E5BA, 0x44E10D8E,
+0x2C02CDC0, 0x586D2C62, 0xF262C856, 0x9FA59D98, 0x94B5542C, 0xA4322E0B, 0x305B47A3, 0x14FBC88B,
+0x456F53A9, 0xD48E8BBC, 0xC4396C86, 0x13C7D5FE, 0xFA2EDD52, 0xB6331CD3, 0x3CB21287, 0xD0BFE684,
+0xB7CCC03A, 0x18F49B15, 0x515A6869, 0x413295CC, 0xBF0FDDA5, 0xF546733B, 0x41161A69, 0xB0B3478E,
+0x47C6BE4A, 0xB6C61EF6, 0x25E63C6D, 0xBC45E93C, 0x6D6F1981, 0x48BB565E, 0x8E370D3F, 0x2C0D23F1,
+0xBB29CF49, 0x4C426B04, 0x05738024, 0x3C03E2B4, 0x13842ABA, 0x3A0C22E9, 0xAC6495C8, 0x4265CACA,
+0x2F1ECE3B, 0xE64AD45D, 0x3613F631, 0xB17384A6, 0xDE9D4256, 0xFE72EEF4, 0x1F8208F3, 0xD7E5827C,
+0xAFAC96E3, 0x3D20A1F9, 0xB15C067C, 0xACDCCE58, 0x271F1A86, 0x4EBE95F7, 0x5D1EB6EA, 0x94CE9AB7,
+0x3A865F0D, 0xD85B388C, 0x69141722, 0x3FD1F34B, 0x8B585049, 0xD0EBE79B, 0xB820D24D, 0xEFA6190F,
+0x2C191350, 0xC26CB328, 0x6A1B7A71, 0x13DE2E25, 0x4BB3D2DB, 0xDD38AE7D, 0xB543C6EB, 0x2F449C6D,
+0x4FB46BA3, 0x119AF27F, 0x4AA62D85, 0x84FFCB92, 0x984DDD19, 0xBEF8AD68, 0x263E9729, 0xB4846811,
+0x2B850500, 0x70484E0E, 0x80DD998C, 0x899775C0, 0x6693F61C, 0xE25D080E, 0xC07DE641, 0x1E215A4C,
+0x02A0219C, 0x69B37E78, 0x9E6DD584, 0x314A9424, 0x4FA344E2, 0x96529E8C, 0x2216CA84, 0x04EB31F5,
+0xF87FB0E2, 0x3DCA25AC, 0xB708BA72, 0x22DCABDA, 0x94E17B4F, 0x3B41193C, 0x55DC5D48, 0xA9C83BCB,
+0x93CC7F0B, 0xC133BA24, 0x732E1102, 0x89D81FBF, 0x39DAFD1A, 0xB48D0EF1, 0x3204819C, 0xDD74B05D,
+0x9CF726A5, 0xFC67B1F8, 0x40F7CC8B, 0x8AEC4939, 0x4B301CC4, 0xF5F69150, 0x2120C599, 0x8715CD63,
+0x7D35CDCC, 0x28D80B29, 0xD90E0BB1, 0x3253EF37, 0x63D3BFBC, 0xC6CAC164, 0x995B587E, 0xB8186AD3,
+0xC6E9BB09, 0xA8F6A17B, 0x2F405CF1, 0xAAFBA6DA, 0x08D36D07, 0xDF40E950, 0xB124F30E, 0x94399113,
+0x9C68C347, 0xA593FADD, 0xBA7F05BB, 0x948F74C4, 0xB359A56D, 0x371344E3, 0x18CDF48F, 0xE534878E,
+0x7C1EACA5, 0x85E0E455, 0x67E7C940, 0x87F956A1, 0x0DFD8F4C, 0x6E05D2BF, 0x4B74AFF3, 0x4B85941A,
+0x4E987BA0, 0x8EB47DE0, 0xE2DA9D48, 0x03C8FA80, 0xE4AA6F0D, 0xA0902BE2, 0x01000000, 0x18009E01,
+0xFB7F123F, 0xBD9D1F53, 0x72A808CF, 0x4C0C14CB, 0x956A9C7D, 0x8B0F58A2, 0x0580FB15, 0x743ECFB7,
+0x68F1B3AF, 0x35206F95, 0x0A6D0840, 0x8EE14ED7, 0x7E1A8086, 0x8A27AFD6, 0xC374E722, 0xF7BBD93D,
+0x0D6E196A, 0xB3520729, 0x35C08489, 0x425210EC, 0xF4727A91, 0xCFA85C4A, 0x548CDD1E, 0xE770B261,
+0xF84E4D43, 0x43141337, 0xCD04E09A, 0x25EBF9BF, 0xBCB3C3E3, 0xAD2F6A8C, 0x0F6C3414, 0xFBA8A6E9,
+0xC88D93AC, 0xFD590597, 0x183EC854, 0x3C606F53, 0x050D7A15, 0x5A700353, 0x29D48F2C, 0x6B2B7E94,
+0x01505DE3, 0x8FB7BD0B, 0x01773987, 0x8F0394CB, 0x2B8DA23C, 0x38E727AF, 0x0F8F01BB, 0x2F796CE3,
+0xC09C38D6, 0x8C4E8BB8, 0x13618AC9, 0x61B1DC0F, 0xDA8211CD, 0xBEAB7320, 0x8EC2C341, 0x75A7080B,
+0x8302816F, 0x1226A6B5, 0x757A7E03, 0xBD2EAB66, 0x90B1B2CA, 0xE7A829DB, 0xE69AC246, 0xDCF368E4,
+0xD1934017, 0xF0E7360D, 0xB67E0CAC, 0x32E4A3A6, 0x5ECFCC6A, 0x45ECB1A5, 0x9CFB40B9, 0x23177892,
+0x241D588A, 0x63FB9EDA, 0xA5C166C4, 0xD53AA826, 0x42E3FA0C, 0xD5A36682, 0x11140C43, 0xE91DD654,
+0xBB531ECD, 0x54BD20B7, 0xA9FD5AC1, 0x6DC33693, 0x20D4C72C, 0xF0278B64, 0xD5201C68, 0x148C6D01,
+0xEF9D3CA6, 0x90D12E02, 0x17C12A3E, 0x6EC7AE74, 0xFB21D38F, 0xAFA7963F, 0x7C3C8364, 0xCB89F90A,
+0x35076E0C, 0x8F20DAAC, 0x156F3F61, 0x525282BC, 0x533D3158, 0x7A47449C, 0xFC1F4948, 0xEF409128,
+0xFC6517F5, 0x62B0B82B, 0x6B697870, 0x4340AC2E, 0x49BFC8A2, 0x415B508E, 0x0AB4D21C, 0x78BF7010,
+0xA261A260, 0x4F202180, 0xA349D02D, 0xD13BF305, 0xB8F39E3D, 0x3449E760, 0xFD08E45D, 0x30B6EF66,
+0x9CEAE139, 0x30F92FE5, 0x15CC75ED, 0xC06B245A, 0x1E308916, 0xB7EBB42E, 0xFB04FFDC, 0x69A91B71,
+0xA799AE25, 0xAD6CD8E5, 0xA811EF23, 0xF5DA80DC, 0xA35E6AC8, 0xE19541C8, 0x9C3B80D7, 0x4679C1DA,
+0x1F58B3AB, 0x0C1A4D45, 0x09246CAC, 0x0ABFB4EF, 0x1B52F2E1, 0x3F11991C, 0x77D83F98, 0xA3E4EDB2,
+0x4716CFA1, 0xD8F2A6FC, 0xD0A3A57E, 0x5641BDC9, 0xFF85FE69, 0x88ECA413, 0xC6595014, 0x59641714,
+0xDBE79889, 0x32943823, 0x80020232, 0xB6E4C578, 0x5B2C4B57, 0x1AD34FEC, 0x9A048971, 0x9E7417B6,
+0x2206DA13, 0xC7EC56C8, 0xF1A702A5, 0xE051446E, 0x5504E2ED, 0x12287A3A, 0x4C2170EC, 0xE9A79AD5,
+0xF1939A93, 0x11C0E827, 0x9C5B5A22, 0xEAD4D2D7, 0x3DED933C, 0xE190F239, 0xE7A73496, 0xCE020B46,
+0xB37022FA, 0xD3CF398F, 0x6E37EB85, 0x6A8417D3, 0xAA78FD81, 0x783E22F6, 0x3D262EED, 0x7DE19AC3,
+0x54375B68, 0x56135617, 0x6E42D279, 0xFAEEF019, 0x82DAB8F2, 0xB5922D4A, 0x3AAE43B5, 0x65A55E41,
+0x9FBC583A, 0x7F93676A, 0x0C72F928, 0x224D906E, 0xD01841F1, 0x0825BA93, 0x628FFEA1, 0x39BF1AAC,
+0x865D5EC1, 0x36B6E69E, 0x0A2A4BE8, 0xE01B9B47, 0x8D870DDF, 0x5A636B51, 0xECA09450, 0x174405D2,
+0x98ACCEAD, 0x0546AF50, 0x2E7645E1, 0x4E6C0F0E, 0x73A2CE2C, 0x261B7141, 0x40CD22CE, 0xDF8D7B18,
+0xDE083CE8, 0xA001288B, 0x7C6E5D0E, 0x983E7382, 0xD5BD6DB8, 0x57A93094, 0xF8A68BE1, 0x56A7509C,
+0xB676217A, 0x4FAF27C7, 0x53309EBA, 0x813025E7, 0x97EDDB81, 0x3927B3C1, 0x5BC8DCFE, 0x72D475F4,
+0x3C227BB3, 0x40CA6EE2, 0xCA11FC1E, 0x5EBBED7B, 0xDDF4D7BC, 0x1A62B48E, 0xE6AF00CF, 0xD1FAE94C,
+0x1F72C7AE, 0xFC867F75, 0xF7A7F9EB, 0x830385EB, 0xD0CF0502, 0xD94E821B, 0xFE948935, 0x701324CE,
+0x4F6FD1CC, 0xAA7CBF1D, 0x211007DC, 0xA4D40BFB, 0xACD109F9, 0x00009C45, 0x9E010100, 0x12411800,
+0x1953FB7F, 0xD5B38560, 0x8609D636, 0x532D9E0D, 0x901A1C78, 0x849115D5, 0x64616559, 0xF7248805,
+0x45FCFB86, 0xC251A13A, 0x0F8EA5FE, 0x24FC9F40, 0xB4CDC092, 0x596E659F, 0x3BBA67D2, 0x70749DA9,
+0x8BAC2000, 0xBB129217, 0x5E9DF724, 0xCBA918BA, 0xC5D21FD5, 0xBD67272A, 0x2C2E51EE, 0x8AE5693A,
+0x850966E9, 0xED5969D4, 0xDBBC90CC, 0x9E815D3E, 0x722BBD03, 0x43833FDD, 0x26D95484, 0x10DCEBA3,
+0xAFA074C4, 0x300CF3BD, 0x6D3F4607, 0x196AF206, 0xF6F0E9CF, 0x40A5ECD5, 0x72E09123, 0x62BFD5C5,
+0x4C119764, 0x4BB21CF1, 0xACBCE7C4, 0x6E168329, 0xB0A33AA5, 0x0ED39AC0, 0x9FBD4345, 0x3A99F475,
+0x157A1A6D, 0xDDA6B752, 0xCB3A86E8, 0x6707E004, 0xD4C618A6, 0x4D992C1E, 0x87E5A8C0, 0x1272B6BF,
+0x6D14BF07, 0x0DBA6BF6, 0xDCDBC0A0, 0x349E58ED, 0x6455A11A, 0x89D5FA3C, 0x5D3BC934, 0x90444663,
+0xE46E6561, 0x08407C20, 0x382E9E5A, 0xBFA5A7A7, 0x837CA110, 0x74E3144E, 0xFB105FA6, 0xE5FB8AE1,
+0x90FD4D0D, 0x6A15EB47, 0x9A6F3E95, 0x1B7EACDD, 0xA4159F0F, 0xB51FC205, 0x378BD531, 0x40216278,
+0x68B6DD6C, 0x26815849, 0xBEA02B36, 0xF175288F, 0xE1F95C7B, 0x880A0174, 0x6C7F2405, 0xC95E8897,
+0x9B93825A, 0x53B71F95, 0x365607ED, 0xCB5E0724, 0x4E0035FD, 0x3BDE5651, 0x30CBDE33, 0x50ECA081,
+0x34C949A4, 0x75EF0B21, 0x911EF723, 0x4C4EBD26, 0xE5D9D1E3, 0xBB2B0E05, 0x271559CF, 0xDB616BA2,
+0x31683642, 0xFBA23E69, 0xDA671D6F, 0xB76E8C3B, 0x68BA4546, 0x59081473, 0xE1C84EAD, 0xAB2F548F,
+0xBBD3D5DD, 0x89765419, 0xD4E7570C, 0xBA11E861, 0xCC94A7DD, 0x474A1517, 0xA250FE4E, 0xA7AF2A2D,
+0x568BFEE6, 0x585A05DF, 0xDB230268, 0x071C3F9C, 0x9450108A, 0x22CE4252, 0x88DF5238, 0x9ADF3300,
+0x34067445, 0x083619F5, 0x300BC5A6, 0x9A90025A, 0x09EC6D24, 0xF552D9A3, 0x3ADE795F, 0xA4D60B89,
+0xD6BBF3E8, 0xC216855A, 0x65C846C2, 0x3B37851D, 0x2CF4DE50, 0x83766EAB, 0xE289A979, 0x2B14AA26,
+0xF43CD75A, 0x44C3ED9D, 0x0312B7E4, 0x63CA6B8E, 0x1B8AC765, 0x39913649, 0x7969C307, 0x23353BC1,
+0x80A50E75, 0x941A8E22, 0x559AEFC0, 0x835DC4B0, 0xAC1DFA26, 0xD7C447AC, 0xAADC2242, 0x153FF04B,
+0x6DBF363B, 0xB330EAEE, 0xFADFFC69, 0x0F091AC6, 0xF45DEDC1, 0x528304DF, 0x7EC45D4D, 0x50A42C7F,
+0x14852537, 0x72D2AC25, 0x1EE7A69F, 0xCBFFDAD8, 0xF38FAC1E, 0xD2D3E50C, 0x48D091D3, 0x607984D5,
+0xF010E171, 0xCA736D9A, 0x814FBDC3, 0xD597F3C8, 0x05AB2885, 0x031504AB, 0xACC55386, 0xD0D5545A,
+0xE2C19C99, 0x1D7FB56F, 0x7AD2BA96, 0x0B3EBDDF, 0x3D6806FF, 0xA823F259, 0x962EA689, 0x4DB5F692,
+0xC7AD85B8, 0xB8E12FEE, 0xE586624F, 0xC3AC874C, 0x2E7CD384, 0x3BFD83ED, 0x4AAA8346, 0xD956963D,
+0x90C70C75, 0x080D1545, 0x0283BA6F, 0x4D82039D, 0x1E519BA3, 0x7AA7BC61, 0x50B8D1B0, 0x5415DF2A,
+0x3860C1A0, 0x7EF6E226, 0x3AECF6AD, 0x16384FB8, 0xFC9C8111, 0x2DD23BFB, 0x30EB89D5, 0xDADDD353,
+0x2B5D2204, 0xE45F0505, 0xADE4E0E9, 0x4EE3A16A, 0xED742351, 0xFC7EDCF6, 0x52F7E617, 0x66FAC704,
+0xDEB7F88B, 0xFEC6D522, 0xE661CF66, 0xB0FA55C9, 0xC8984985, 0xA8BF2F74, 0x7D01B6BD, 0x7615E2A6,
+0xEC1E645D, 0xB069E03A, 0x2D77A933, 0x92FFB550, 0x1657C198, 0x0F86EC40, 0x9C6362EB, 0xFCDFA596,
+0xBC5217C9, 0xFC22CFFD, 0xCF8D9EAF, 0x0D0DFD56, 0x70B7EBD3, 0x0B655BAB, 0x5BE5199E, 0xE5F08D4A,
+0x68F574BF, 0x2786F682, 0x1C35E52A, 0xBD4E9275, 0xEE41C599, 0x5998747B, 0xD3B305A8, 0x326CDF28,
+0xF20F80C0, 0x99F950F3, 0x12FEA703, 0xB76AD61D, 0x42D81E18, 0xA16B1565, 0x9B4C99A1, 0xCA88D810,
+0xF009FC25, 0xF222E6F9, 0x133012DF, 0x76C35BEB, 0xF2F9CD3B, 0x3FECE972, 0x62F6158F, 0x51F505E4,
+0x19A742F8, 0xD165CE63, 0x00006858, 0x9A210100, 0x3F481800, 0xE5CFDFE1, 0x03A79A0C, 0x28F74BB9,
+0xE8AF678B, 0x91126F9F, 0xD8104BB2, 0x887D311A, 0x1444D182, 0x2D778175, 0x75BE8D4B, 0x368E6FE0,
+0xB192B29C, 0x55C23B28, 0x550B31CA, 0x9E628012, 0x19AA6163, 0x3AF110FF, 0x62C407F4, 0x849F34D7,
+0x9488F158, 0xE1B52C0D, 0x06367BF7, 0xFFBCA2AA, 0x8C8281CE, 0x786C1103, 0xF92586C3, 0xF927A863,
+0x1F504C52, 0xDD4D8CE6, 0x21D717F1, 0xE1069A66, 0x0EBB6FDC, 0x44C7E12B, 0xB46824E0, 0x48F909E6,
+0xEC2F1284, 0xC882EEB5, 0x4C58E026, 0x3BEB6D5E, 0x01FF763F, 0x6F3F3C73, 0x4ED235F0, 0x33AD2E10,
+0xF3531007, 0xD817EDCD, 0x177742FD, 0xC5B55C57, 0x05244420, 0x41D84FEC, 0x3303FFA8, 0x4DA84733,
+0xAC9119F6, 0x73E9606C, 0xCFBC0E5D, 0xB523F980, 0x5EF572E1, 0xA4AA2C72, 0x1CEDDA47, 0x89A9FF65,
+0x43647592, 0xE1A14039, 0x9BAD2C31, 0x890E110C, 0xAE2B755B, 0xBD63F1C3, 0x41AF5C24, 0x50F2B124,
+0xF915DBD3, 0x9F32DD34, 0xE15D6CAA, 0x0E91C26C, 0x075CD1AB, 0x3617EBCB, 0x420F7598, 0xA8D096E5,
+0x73C39732, 0x5AB97C7C, 0x15E244EF, 0x94609C82, 0xD282BE56, 0xF0C5B51E, 0xCD2C4826, 0xAAB325E9,
+0xE9A11163, 0xCCE07A22, 0x2E08CDB0, 0x51068A59, 0xB83CB34A, 0x5E448DD9, 0x8207B3A2, 0xB32387AA,
+0xC5F3EEA5, 0x28FD42E3, 0x251CAEA0, 0x83759679, 0x7F91D24F, 0x3BACEC38, 0x4EB0B235, 0x2F3F7CC9,
+0xA00E4FFF, 0x458BB400, 0x8BA86773, 0x63BBEBBE, 0xB24187E6, 0xAB48A088, 0xA14565CD, 0x3C2A7915,
+0x0188FEDA, 0x57DE8044, 0xAC2C20BC, 0x81CFE8B1, 0x2C724D04, 0xA93DB14F, 0xFEC22409, 0x2618704D,
+0x86186512, 0xA64A0BC3, 0x4A7C07EE, 0x2202687B, 0x316A0975, 0x013B78E9, 0x22627B1D, 0x68297F86,
+0xC7F8DD3D, 0x62D93FCC, 0x52C85B51, 0xDC3C9A26, 0x051E6BA4, 0xA3EC1484, 0xD15517CE, 0x250C9C85,
+0x8FC770B0, 0x06655A26, 0x324976DE, 0x196753ED, 0x557444A2, 0x158230B6, 0x885382A0, 0xD275EC08,
+0x3EC11E24, 0x75C97F88, 0xCFEBB91C, 0x21C4B473, 0xE1ADF4E5, 0x7804E7A0, 0x7323E422, 0x89D887CA,
+0xA71A4EBF, 0xF1041B1A, 0x340A7280, 0x9C1294EE, 0x39AE9BC4, 0xF7AF0E6E, 0xCEE55EE1, 0x42F46F18,
+0x19F4D58F, 0x1C219960, 0x3F9E0E49, 0xBA4F35C0, 0xFD6D5953, 0x36FCEE37, 0x7C61556A, 0xC7FF98CC,
+0xB2D18CC0, 0x34ACF807, 0xEED7CCBF, 0xEFB71278, 0x02A63EBB, 0x4E7DC3E7, 0x7002ED70, 0x93274666,
+0xA8D429A3, 0x72411EA5, 0xFA6F622C, 0xC10405F6, 0x4CA7957F, 0x1B5E9E9E, 0x69476AD0, 0xF087C9E0,
+0xB36CCC26, 0x070244E8, 0xB3A79F8F, 0xA4CAE438, 0x473CA414, 0x6EC6F9D0, 0x97AFDAF8, 0x8AD41B6D,
+0xE4E59616, 0xD5C2EF47, 0xF88DE42F, 0x79AADA71, 0xA681BFF4, 0xB12A9103, 0x0F67E0CB, 0x0AD4B854,
+0x42445E8B, 0xACF34514, 0x1E7FBDD4, 0x64481640, 0x9AB7D3E6, 0x73388033, 0xE70CE9D1, 0x54A1E5FD,
+0x9156BB57, 0x6714D01A, 0xC84A8E33, 0xF6570FE1, 0x3F06B643, 0x3A45F22C, 0x65D6B4B4, 0x9B238527,
+0xFF29BC6B, 0x6DD82CE1, 0x03E22AC1, 0xF89C7735, 0xBDA65E6D, 0x3CCA5508, 0xB049381A, 0x2B457A95,
+0x17435A59, 0x84836D99, 0x1EDF4CD6, 0x1C67DE5B, 0x8EE520DF, 0x22937E3D, 0xFFE45E31, 0x73217381,
+0xB24B1F5F, 0x68F6F6F9, 0xF059346F, 0x310D620D, 0xF1D91916, 0x2078B1FC, 0x950F00D0, 0xF2855F4A,
+0xDCC9F197, 0xEC8FC447, 0x68F6457D, 0x8E910CE3, 0x059868E9, 0x7061DF07, 0xBECFFBBA, 0x5519BBF1,
+0xAC39B18D, 0x60F7E468, 0xE09BB445, 0xF41BE2FE, 0xE08A4C19, 0xD19D8561, 0x5E452E0A, 0x01E3E996,
+0xD819E7B2, 0xD6D6B36B, 0xDFDCF225, 0x41E0CE91, 0x20FAC737, 0xB3D6B4B7, 0x154D50FF, 0x6FE3A974,
+0xBF7E02DC, 0x0A719571, 0xEE7A7E75, 0xC8DCBBAC, 0x2BCAC288, 0x0FB3C33A, 0xA7F1C903, 0x6BE1E845,
+0x306B1D74, 0x03EE8783, 0xA0878A94, 0x90F3A668, 0x866BAC9B, 0xBD387DBB, 0x96C178DB, 0xD8B9253C,
+0x068E1BC0, 0xC1F05A28, 0x0DDC59B2, 0x476AC0E3, 0x235CCB77, 0xC26C66B9, 0xADDA542C, 0xF0217067,
+0x70169464, 0xD26C4B7A, 0xC4AF37EF, 0x8A2A73AA, 0xB160EA0D, 0x8B909544, 0xF4BEF479, 0x7096290C,
+0xDE3B6499, 0xC5D8E3DE, 0xFC91EFFC, 0x2F3C18B2, 0xF0F88DC5, 0x23B9E736, 0xEFD3AA46, 0x8D77D1CC,
+0x73725161, 0xCFEE3D7B, 0x351ECF90, 0x607558AF, 0x5D1064A1, 0xF72F929B, 0xA79D7C20, 0x7BDDB95A,
+0x5ED54B7F, 0xC83A230B, 0xA346A142, 0x841059C7, 0x991ADC2B, 0x512B9063, 0xDFDD8D6F, 0x738FD9A1,
+0x528CB9A9, 0xE6DC7CC4, 0xF2F2263F, 0x3F5B9270, 0xF57D5546, 0xAFCFD460, 0xAF155F24, 0x7AAF7147,
+0x5C7DC19A, 0x9DC69286, 0x8325B932, 0x277918DB, 0x1544D8D6, 0xC5C14F1E, 0x75144CA2, 0xED6A0156,
+0x796C49D0, 0xDC99F013, 0xADFC11BD, 0x0E5F50FB, 0x50459FB4, 0x068DE276, 0x394CE135, 0x69FBA6B2,
+0x5D8DB5D1, 0x9FC8CDC6, 0x8F63EF96, 0x1287D144, 0x5E3A0CE2, 0x426ECEE3, 0x0304921B, 0x9F6412AF,
+0x8874FDDE, 0x7A248060, 0x4C8EAE04, 0x3E6D2CC5, 0xC289564C, 0x8892E47D, 0x4E63987A, 0xF10F4515,
+0xC601FFB2, 0x8A6C226A, 0x231E2D37, 0xEE1FB41D, 0xC1631870, 0xFB081902, 0x1B65E5C4, 0xBA28E037,
+0x76712EEB, 0x78EEB765, 0x3C7D940A, 0x1D9CE917, 0x8DDF7796, 0x54339CB4, 0x9FE5CC2A, 0x915E091D,
+0x16F302A8, 0x21EADFC6, 0xD4E4E443, 0x032B5033, 0xFB9B6801, 0xDFFE1BB1, 0x774663B7, 0x9BAA1483,
+0x0B8FDE5A, 0x34D1F1AC, 0x70369603, 0xE05B6527, 0x25425BD1, 0xA9986520, 0x120A2D8A, 0x4DAA1759,
+0x892DB5CA, 0x60C70CDF, 0xAD3D0453, 0xA7B3290B, 0xB8227625, 0x744FF9AB, 0x375A6DD2, 0x125BFD35,
+0x20AFF0F0, 0xE602C11F, 0x4260E286, 0xA9748094, 0x9EF9CF74, 0x24FFB135, 0x932A2EBD, 0x54F73A37,
+0xE77DEF6C, 0x06531412, 0x1E459856, 0xFBF059F3, 0xB723E37B, 0x4B273951, 0x3A3B0298, 0x30114679,
+0x55AAE5C5, 0x255DBA78, 0xD37B3495, 0x61397DFB, 0x148FA944, 0xCFB2551C, 0xEE45F3BB, 0xD27461A3,
+0x77C0F45A, 0x8532FFE2, 0xBB8D8153, 0x0F0E8D42, 0x8F7ECD30, 0xBB01BCA1, 0xC8F52954, 0xED9628CF,
+0x3B703A14, 0xB0F11CF3, 0xAECEF0CB, 0x9D868455, 0x9B2A1194, 0xB2EBE349, 0xDBC8F7BB, 0x7B0856BA,
+0x78447376, 0x3A549D22, 0x16D2569D, 0x2177CA89, 0xA33BFA8B, 0x0518FB1F, 0xEB4B077B, 0x49F1A093,
+0x5C5A165B, 0x6FC492AB, 0x1C183B02, 0xF39CEFBA, 0x658DA8F2, 0xAC538983, 0x7E06A92E, 0xDD8E995F,
+0x88415761, 0x8D1AB02B, 0xAD90FC77, 0x73EA2F8A, 0xEE13F1F5, 0xA4FC6212, 0xC7C0D6A7, 0x98ADD2D5,
+0x6C44C22A, 0xEBB149C6, 0x1D6C64DD, 0x5227AD23, 0x78642296, 0x1020F754, 0x49C1D31C, 0x1E41D19D,
+0x34D65E8B, 0xDC3670AD, 0x6B26B996, 0x96125A2C, 0x2CCD9054, 0x6E6F976B, 0x4DF9EB50, 0x3866F38D,
+0x822213FD, 0xA0ABCF35, 0x36DF98C6, 0xCE1B7311, 0x0A7A1D8F, 0x649D4506, 0xCB25735A, 0x17C0D2FF,
+0xD180C5A9, 0x72478721, 0x1360F46D, 0x98AF2EC5, 0x3039922C, 0x72281742, 0x7CC5AA6B, 0x81CB2821,
+0x3ACFC733, 0xE902964C, 0x857A9D1F, 0x776DF587, 0x0BCEC3BD, 0xF1FDB537, 0xE3AB385E, 0x1E3B0596,
+0xDFBD136E, 0x1E86E85F, 0x015F58BD, 0xBBAE3369, 0x87AFEB05, 0x144DF769, 0x0B8ECE9B, 0x5B6AACD7,
+0x10038036, 0xCA3B46F6, 0x1A7BE0CB, 0xB73149CF, 0xEF6BC136, 0x5BD773E8, 0x9534717A, 0xCEA6BA63,
+0x35942C55, 0xA76890B7, 0xD6E611D6, 0x52C5815E, 0xC4813DDE, 0x98989A3E, 0x5A095CFA, 0x97C7E3C5,
+0xFFFECAEA, 0xA5E61333, 0xE760E58D, 0xE31C4339, 0x8F708C1F, 0x9676B294, 0x71E85A5B, 0x330F0DF6,
+0xFBDA036A, 0x7C9B882F, 0x244BB0BE, 0x0F9C0987, 0xEA149769, 0xDC18156A, 0x832F8F64, 0x8F02C740,
+0xC7C674E4, 0x2A4C9328, 0xC2260DE8, 0x7655BC42, 0xE7A70BDF, 0x234C3772, 0x1886D89F, 0xEA92878E,
+0x7885E445, 0x681EDB76, 0x5CE096F1, 0xF71D2590, 0x1703A952, 0xD3631F21, 0xF449B336, 0x7BD9F937,
+0x1C3A4A81, 0x8D5A0CD3, 0xABA939B6, 0x2463DD75, 0xD043CC54, 0xE309F122, 0x6D4A35A7, 0xE442B934,
+0xF994E99F, 0xFDA5C90A, 0x37C8EBF7, 0xF26EA365, 0xFEEAE89F, 0xDDDE3D31, 0x86C222E0, 0x67D0D9CD,
+0x1AFA44C8, 0x3B2E4D0E, 0x9BAA564C, 0xD58B79BC, 0x64F949AE, 0x4FE876D2, 0x09075345, 0x1D3AEEC7,
+0xC5E933D4, 0xFFED875E, 0xF829151D, 0x0D4BFFA5, 0xA2EE8292, 0xAAA2E70D, 0x007EED29, 0xF3B1F796,
+0x515F45A8, 0x328A6347, 0x5097C484, 0xFC7B89E6, 0x88F29873, 0x11EC7E66, 0x79142CCB, 0xDDF7CCA8,
+0x52B336B1, 0x76FF7484, 0xF9A2D1CF, 0x5EBEB917, 0x85590000, 0xBE26373D, 0xB4F29D0B, 0x9B2160E3,
+0x3CFC25AD, 0x64E1565E, 0xBA4A2928, 0x02ACC24B, 0xDA6D9171, 0xFA2CA7C8, 0x2E4CD30B, 0x59B5D5AB,
+0x71AEF375, 0xBB6667C4, 0x1121CCAE, 0x518D42E3, 0x5E1B304C, 0xFB8EB56F, 0xAD55FDB6, 0x939D4DC4,
+0xCA52B3CD, 0x3507CCB8, 0xD2939CA0, 0x953B6C35, 0x74E4D0C1, 0x0A1D73E6, 0x0CBF4FA1, 0x3110F4A9,
+0xDAE1893D, 0x177CD4A5, 0x072040A8, 0x846C5A71, 0xA6C750CF, 0xAD81F8DC, 0x5FA4EA9E, 0x0E6286B7,
+0x0A168192, 0xC638214A, 0xC0840550, 0x311791E6, 0x60D4BC04, 0x1769CC37, 0x9AB2BC56, 0xC1144CAE,
+0x52EED145, 0xB555059F, 0x7F25EB62, 0xC93F27E5, 0x244106C1, 0xDB55E5F0, 0x17B3710D, 0x6FBD1592,
+0x250A9ED5, 0xD7DC6E02, 0xE48E591A, 0x2DB68A8A, 0x9F14C25B, 0xC297749B, 0x5A104A08, 0xBAD16E7E,
+0xFF1035F8, 0x296EF72F, 0x924CA983, 0x67C9EC53, 0xB4BAEE64, 0xB394ACCB, 0x6650D28A, 0x1B6C4D25,
+0xA3D625D8, 0xA80B57B7, 0xB2EA4204, 0xCA556FA8, 0x0E69B079, 0x649D12DA, 0xEAC701F1, 0xFFCF0127,
+0xA464AE28, 0x6721E23A, 0x9E7968DC, 0x396B8F18, 0xEA278942, 0x82961F1F, 0xC7612147, 0xD3269E2F,
+0xCE9A8B50, 0xD36D8C44, 0xB64F7BF9, 0x8981D0CE, 0x07C13F60, 0x66EE5249, 0x1090C324, 0xE6566511,
+0xF26EB48D, 0x960CEF7E, 0x7A3BAC71, 0x7F58CED6, 0xBFCF9F6C, 0xCCB1814B, 0xD25A6608, 0xB97543EC,
+0x8FDF3C7C, 0x47294D60, 0x09CA315A, 0xE5C243C5, 0xCECE7635, 0xE0711DA3, 0xD53375FD, 0x2683431C,
+0x87CDD075, 0x12EF616D, 0x994FF80B, 0x15E37847, 0x78707ED9, 0x1F7A2A48, 0x88011C7B, 0xB3446633,
+0xF3002F1C, 0x2E760803, 0xF579D0B8, 0x954EDF33, 0x0C3D19C2, 0x1DDCA46C, 0x6B4EC8EA, 0x97DD52EE,
+0xBFDD7F38, 0x0165CC65, 0x8F53058A, 0x5228E2E5, 0xD81EC492, 0x0CA19C6A, 0x93F46BC4, 0xBC1F97A7,
+0xC16656E3, 0x43C7F83E, 0xAD619C4C, 0x2FE51D94, 0xE8231532, 0x771B5557, 0xC0D840B3, 0x7DFF5AB8,
+0xB6D7709F, 0x89C11187, 0x3B8761C0, 0x50F4C9A8, 0x94D5023D, 0x5F270615, 0x5D890DF6, 0x3CF3453F,
+0xCD0A960A, 0xB78C4A2A, 0x1FE9DD6F, 0xF21FDCA3, 0x449E65DC, 0xBB31F143, 0x945E6CA4, 0xF4B900D5,
+0xA2852671, 0x3A94364B, 0x596C59FC, 0x4FF82CA9, 0xF2EF0E8A, 0x24B91B01, 0x764824C4, 0xC966ADE8,
+0x3463A148, 0xBE959B44, 0xF25AC2E0, 0x0799F283, 0x3BBE8D39, 0x23B7FC45, 0x006E2B99, 0xCC598ADB,
+0xA0FAC7E2, 0x34FCFDC5, 0x4E442276, 0xFC9893E3, 0x39D391EA, 0x53FB276B, 0x6C740FF2, 0x71C57DD8,
+0xA5B8A369, 0x1FA289CB, 0x99F60D69, 0x5440E387, 0x3B370ABB, 0xB60AA54F, 0xE2B567D6, 0xC401DEC5,
+0x21076D48, 0x98534190, 0xE1EEE7EB, 0x15E8AF91, 0x20CDA125, 0x0BF7DBC2, 0xE2350443, 0x01E1ED02,
+0xFC599944, 0xE0414044, 0x5CF727A1, 0x1F5FB760, 0xA5A54939, 0x178D37A2, 0xDAF4D6D5, 0x652E5540,
+0x8809E1B6, 0x73F2C57E, 0x23CF1633, 0xA9EE1323, 0xFCD42E7C, 0x7886808D, 0xE0988D07, 0x64A59F9B,
+0x7229DB65, 0x7062A19B, 0x09C3DA38, 0xEED1D4EF, 0xFD88113E, 0x9B66A2E1, 0x16872D82, 0x070B748A,
+0xC7DFC3C7, 0x47BE1642, 0x26F2F8A6, 0xF3DCEBC0, 0x142E3223, 0x20F15750, 0x9DB6D3B4, 0xC67722AD,
+0xAC720455, 0x461F663B, 0x4184B307, 0x3C7EEAA5, 0x0B7C51A5, 0xF4540AF4, 0xEB4F3B1B, 0xB7157769,
+0xD11CD92C, 0x1A058A1A, 0xD0447B24, 0x52A87E26, 0x726CE1BC, 0xED3CA3C5, 0x402A5D88, 0x07896604,
+0xED995124, 0x4AF85240, 0xE73228EB, 0x8B5BBA80, 0xD9761119, 0x28705F40, 0xE8E5B2FE, 0x46C49FEF,
+0x99890481, 0x575EEF30, 0xB76B3B45, 0x702C43DD, 0x5D8DAAFF, 0x86986F16, 0x86A15E5F, 0x0ECAD015,
+0xBD08CFC5, 0xDF786FE1, 0xE26B82F6, 0x8066F2D0, 0x27D6AA82, 0x59CF14EE, 0x075794A4, 0xC588B0EF,
+0x95E6E18C, 0x7D194A3D, 0xF304D876, 0x452DCB12, 0x37ECF33A, 0x568F2829, 0x720FA6F6, 0xE8999E84,
+0x4CADA908, 0xD6A7D0E4, 0x8B1E19B2, 0xF92412CF, 0xE296E004, 0xF5F81EC4, 0x21B091FA, 0x13B8049F,
+0x59A24814, 0xF2EAB594, 0xF390ABDF, 0x7F001342, 0x545BC257, 0x9AC7BDBD, 0xCEBABBFC, 0x878161F9,
+0x1EB07619, 0x19D8B4C7, 0x7761A3C1, 0xF9D0B2F0, 0x5F2FE8E3, 0xD41BF32F, 0xA22E811D, 0xD2556184,
+0xA1FAA4E5, 0x7A9C6BDC, 0x020CC187, 0xACDE2CCE, 0xA51E3FF4, 0x44C297D8, 0xE139683F, 0x1A47E665,
+0x4BFF6F0B, 0x557CF6B9, 0xBF03D2D2, 0xC1785068, 0x82C9A481, 0xEFFFC194, 0xBD31F16C, 0xCCA34FFC,
+0x81CBF596, 0x82F381F4, 0xDD5869F2, 0x7CE12A60, 0xBA8961A2, 0x0BEB87A6, 0x28B8D7E1, 0x748A1A0B,
+0x9EEFD8B4, 0x68A4A0B1, 0x2373F6CF, 0x9FCEBE51, 0x10D514D3, 0xF7192E89, 0xA97EEF86, 0x36FFE348,
+0x9203B2FC, 0x2668CAB6, 0x191FDBD6, 0x7099572C, 0xFAA40168, 0x6E695DFF, 0x58982F92, 0x67F14144,
+0xAB05F118, 0x71742D74, 0x8260D5B8, 0x61D05D25, 0x4DDB4767, 0x1D88EADA, 0x139AD300, 0x94498722,
+0x9EDDFB73, 0xE5A62832, 0x92A19FCD, 0xF9FB212F, 0x321AFEE5, 0xB7F839F6, 0x993B5827, 0x24C0DDBC,
+0xF471BC79, 0xD1CEF404, 0x0D248E14, 0x40FD4284, 0xDD089A8C, 0xB53121FD, 0x8921555B, 0x5BBE2097,
+0x6AF2F1CD, 0x60FB6229, 0x0A61E12D, 0x36A9EB8E, 0xC37ED426, 0x847FA850, 0x9A4F34AD, 0xE5086112,
+0x620EC7B7, 0xAB30A31E, 0x8CA05C9D, 0x729771F7, 0x49592430, 0x3C796603, 0x3D2B94EB, 0xF73BF36C,
+0xC8E91352, 0xFE7F3555, 0x2CD5FA7E, 0x6FF3A962, 0xCE9DB945, 0xBC7A21AA, 0x19F4601F, 0x8E769112,
+0xFA5446F9, 0x25B87C0E, 0x1FF71439, 0x7B3731E1, 0xA8D49161, 0xE7AF1C05, 0x8B3C9216, 0xD26F1FF5,
+0x6F87F4C5, 0x5FEAEA49, 0x63027BD2, 0x71EE804A, 0x56B14B90, 0x45E7A5B2, 0xA028AA29, 0x72C6082D,
+0x79A2FEE3, 0xB61974E5, 0x26252CFE, 0x51048CAD, 0xC1FC075B, 0x58E6FB5D, 0x770ED8E0, 0x43EA2A9E,
+0xB730E985, 0x33D46687, 0xAB5AC9E9, 0x96E796D6, 0x2F3B1C3B, 0x0BC3B719, 0x74B5D184, 0x9BBDDE5A,
+0x4AF73DBA, 0x6D790B16, 0x3D1576F3, 0xD485004C, 0x1883336A, 0xDE004941, 0x2BACDDEC, 0x6009C97E,
+0x1EC4D726, 0xADDD4A0E, 0xE75B3F5E, 0xF04BFBAC, 0xE96AB580, 0x1CA92B34, 0xDAD86171, 0x6C334E9E,
+0x88F18208, 0x3BCFC068, 0x02EA0B7B, 0xF027A82D, 0x9BDFA3DE, 0x27B9D5CA, 0x16580ECE, 0xE5B5E824,
+0x1E2F36AF, 0xC2F25A6E, 0x58709F22, 0x88E88C79, 0x0B3CEB71, 0xC7C70BFA, 0xD1B4EAC3, 0x8CA92803,
+0x4368A230, 0x4AC3F63B, 0xA7409E84, 0x617E033A, 0x2F06349D, 0x50E9A31D, 0x0E2D3AAB, 0x770BD20E,
+0x13608643, 0xB4948955, 0xADA1B5D0, 0xA0E15418, 0xC28C52D5, 0x5DB87B8E, 0x35B7D698, 0xD37D0221,
+0x0F125BFE, 0x83DD513F, 0x9FED3846, 0xCF58F9A4, 0x956A8FDA, 0xD593B532, 0x3CD4D5BC, 0xE958C959,
+0x7CEB7208, 0x06A84550, 0xA01E7B8B, 0x68B92853, 0x6E99D063, 0x06D4C6C3, 0x990908A1, 0x472B80D8,
+0x888F5A2B, 0xF5A7A443, 0x333212BD, 0x636BFAAC, 0x54A939DB, 0x56BA83AF, 0x7CC0125C, 0x85CA53ED,
+0xE58FFD12, 0xB417E356, 0x563B557F, 0x2EC53D2E, 0xD3E29E49, 0xA78EC20B, 0xF0E0F469, 0x6A2586EB,
+0xC0268FE2, 0x516ACE6D, 0x9084A8FE, 0x00400B4C, 0x01010000, 0x451A009E, 0x52FB7F12, 0x7DC23CFC,
+0xC6EDDF97, 0xC69E99F1, 0xCD9EDEA9, 0xE67469F8, 0xA008B773, 0xB1DC9A9D, 0xE026B9DB, 0x144FAF97,
+0x5DD27749, 0x50F2B1F6, 0x75547F99, 0x32066CEE, 0x7E47FB07, 0x534BA2CD, 0x76617D59, 0x4F8983D3,
+0xF9AE5D16, 0xCBBDE028, 0x78E10341, 0xD88E0EDA, 0x8079B86C, 0xF13D9F7F, 0x7C707CC8, 0xDF9BAD94,
+0x1FC3F668, 0xFAE650B9, 0x61281A46, 0x3ABC7784, 0x8EEE3BE0, 0x9528E868, 0xE21C6816, 0x14F98419,
+0x85AF0167, 0x4CAF882A, 0x4FE3F462, 0x63D2B9AB, 0x5978A9EF, 0xAAE4353B, 0xC1D18B23, 0xCF0DCF66,
+0x7A688C9C, 0xAE013F8C, 0xF8FC328E, 0xBD7219F7, 0x6F9A6E3F, 0x90144871, 0x805D1D39, 0x8B61310A,
+0x651DAFF7, 0x73DB923B, 0x2C403F21, 0x9E2ADDD4, 0xF9DA5F0B, 0x327F04B4, 0x051205C4, 0x5EB845E6,
+0x28D21687, 0x7D3164E5, 0x85C675A7, 0x07BE0B56, 0x22D95838, 0xFC0528DA, 0xB4308ED8, 0x03704C94,
+0xB1B7DE98, 0x5C1DF991, 0xC25083EA, 0x395C5062, 0x6FD960CB, 0xF11A2DE0, 0x0A23C5E1, 0x86AE10C0,
+0x3B03CC4B, 0x109C5A23, 0x4678D838, 0xEE2C6CE6, 0x5ADDE32C, 0xC6A82D45, 0x9932B45E, 0xB07DA17A,
+0xA7D76EDB, 0x07F3BB31, 0x296FB8D8, 0xDD8BD808, 0x1EC4D67E, 0x39D081F1, 0xC7DF1170, 0x0564BEB4,
+0x6F7B03A4, 0xA98F2E59, 0x214B2940, 0x04E165E0, 0xF1FC7BCB, 0x2EB7663F, 0x1C6E65BF, 0x61EEB80D,
+0x1A266724, 0x49E22940, 0x45FC5710, 0xFA68F5F9, 0xB7F2FAAD, 0xA61705BF, 0xA4E6B11D, 0xDCFB32F9,
+0xAFF95BCF, 0x64C04C6D, 0x276FFB2D, 0xFD186FC6, 0x9CFBCDFE, 0x9FFD8BF1, 0xBF12C875, 0x3995E353,
+0x95250848, 0xE1FBC6DF, 0x2187B5C4, 0xBF054C7F, 0x30394204, 0x1C4E5B0F, 0x81861284, 0x6B555080,
+0x2D5925FB, 0xA9A086CD, 0x6F35B0D5, 0x358948CB, 0x160E1910, 0xC36725C9, 0x62697F09, 0xD8D4256B,
+0x3C33F125, 0x0DB545F0, 0xC468FF36, 0xC70E1D56, 0xB9EF2DA9, 0x6A0D4056, 0x7945E3B6, 0xA5BA2C68,
+0x7DF9E9FE, 0x249C5FBA, 0x0C7D94F6, 0x793A74F5, 0x26A4BB54, 0x590A94E8, 0x82A45BB9, 0x66780296,
+0x6E6C15E6, 0xC3F1CCC1, 0x8DB1673A, 0x11841729, 0x0D60B226, 0xB2B14349, 0x7BC49AD7, 0x888EF03A,
+0xBF50383C, 0x14FF31D5, 0x9A0974D1, 0x5CFC43C6, 0x31135A0D, 0xC2F6C531, 0x3E171A06, 0xDEC68EBB,
+0x7DEA9759, 0x3EB76569, 0xCC34D1B7, 0x97AE0591, 0xAE23BC7A, 0xC8ADBED4, 0x257AC27C, 0xA8AF705D,
+0xF8BD2F2A, 0x0FF1A426, 0xA8CF94A1, 0x9BF70D19, 0x059DA6BF, 0x4D161327, 0xE57B27B9, 0xA2FA8333,
+0x0CDFEA24, 0x24553766, 0xBFCAA507, 0x6770EBAC, 0xCCEDFC71, 0x115A9B61, 0x0489849C, 0xD984C993,
+0xA2415AE1, 0xD224FCAE, 0x602DAF07, 0xC39BFFF1, 0xD1E6BC72, 0xC610D6A8, 0xA21A8CA0, 0xF785A995,
+0x9C882B59, 0x11F8FA63, 0x5663F1A3, 0x13CDD401, 0x9A975CFB, 0x381668E4, 0xC7B152A9, 0xA6F47552,
+0xA913DB26, 0x409D3F88, 0x1DEC8A3C, 0xE4E49FD5, 0xF32A1049, 0x3FCE32BC, 0xA50FED6E, 0xF7AF6A0B,
+0x490F0128, 0x1B49046E, 0xCBF69DFF, 0x2017BA2D, 0x5D46EBDE, 0x8FCF1456, 0x2B06A93F, 0xBDE70B9C,
+0x30B0B478, 0xDDC450AD, 0xB0CA1F7F, 0x062B8ABF, 0x92C7DA09, 0xFCCCA206, 0xC05A0D54, 0x72B44476,
+0xC3AF13E8, 0xCF22FB3D, 0xDA690CCE, 0xA7525B87, 0x2D358D53, 0xB25F996C, 0x15A16E06, 0xFEC8E734,
+0x1213299A, 0xF2CC1A20, 0xE7FA856E, 0xA0D07C03, 0xCE1AC06D, 0xBC407903, 0xF0CF98E9, 0x41DF5C7F,
+0x8FDFCB53, 0x41534102, 0xCAE23745, 0xE501BBC0, 0xA44A23A6, 0x1A3686A4, 0x0961E710, 0x39DC99A9,
+0xBE54FA04, 0xAE7823F4, 0x99B97243, 0x65454088, 0x4B446C52, 0x7281CDB1, 0xD3C4A93C, 0xC8E1952B,
+0x816BF32E, 0x890587BE, 0x183A3870, 0x493AE613, 0xB5FF4749, 0x64D5DBFF, 0xE544360F, 0x10BCA46B,
+0x461AFCEA, 0x6B5850F2, 0xEF862790, 0xDAC24D5C, 0xC3C556B3, 0xC4EFA97C, 0xF83EE1C4, 0x47BEF062,
+0x3E3BF87B, 0xD232C4B8, 0x21CCC1D9, 0x6BAC4DD9, 0x174D3EF5, 0x57FA575B, 0xAE8C8339, 0x2DB7561F,
+0xA61CA053, 0x62F56A5D, 0x421361CC, 0xE0C8143A, 0xC5DB611E, 0x5DA2BB9B, 0xC13ED29E, 0x39060E11,
+0x9EDC7363, 0xE256C2A5, 0xB058CA61, 0xA8AC266A, 0xB5948E05, 0xE7C4E03D, 0xA4ABF8AE, 0xAD05E4C8,
+0x8F436267, 0x151BC306, 0x144A3717, 0xCA2089EC, 0x01B13418, 0xE409BE24, 0xB0097610, 0x34E0D149,
+0x3E6CD929, 0x2B91DA7F, 0xFC9F4BD0, 0xD2C2FD1E, 0x4E52B746, 0x00002403, 0x9E010100, 0x12471A00,
+0x6054FB7F, 0x81DCFACA, 0x65C0B14C, 0x0E186F88, 0x200C61B6, 0x8C1291FF, 0x44A1BCB7, 0x321312AF,
+0xFE973B57, 0x545E0F3B, 0x4BF11079, 0xFA9889B9, 0xA381ED1A, 0x88D539F5, 0x73AD13C5, 0xC7713836,
+0x8E9FBDFF, 0x545D7F80, 0x2EF450CE, 0x06CC0C8F, 0xAA8BD81B, 0xA2B0278A, 0x647C7C7F, 0x4340DFE3,
+0x1BBED595, 0x96F15E34, 0xA6C44BBA, 0xB33C8672, 0x94AF2653, 0x19A6A7C3, 0xBFA50EB3, 0x41A9B1E8,
+0x5BC89FE0, 0xA576D262, 0xF6160804, 0xC4BE23D8, 0x5B698DEB, 0x75C3BB4C, 0x5FE6196A, 0x3E4AAACD,
+0xB691443A, 0x90BB08A4, 0x98E293C0, 0xA297FF8B, 0xBA117CDF, 0x8B2A72D9, 0x30418045, 0xB2031201,
+0x1F0AE765, 0x434D79C7, 0x4369326C, 0x3394C2B4, 0xB0F317C9, 0x9BF9CF82, 0xC8965DDA, 0xABE14D87,
+0xC8480995, 0xC7AB0620, 0xDF8F0599, 0xEE2A8457, 0x668B6833, 0xF5D020FC, 0x97C41F67, 0xAB753B6B,
+0x462F115F, 0xCFBFDE40, 0xB676693B, 0x18DBE3E4, 0xE70B973E, 0xF1125E5C, 0x5B037D15, 0x11BCAF96,
+0x7E0496E5, 0x7D30C3B3, 0x9BD27CA6, 0xB2D6A4D6, 0xBEBF69F3, 0x3568290C, 0xD36F373E, 0xA1D2DC99,
+0x5A025C49, 0x56605BA8, 0x62B6EC8D, 0x2678932C, 0xE01EA896, 0xD72765DB, 0xFA1F5C67, 0x14769BD0,
+0x26A281ED, 0x88B3773A, 0x77655D17, 0x659ECC17, 0xEC25FEF2, 0xAB3CFA46, 0xA8A60098, 0x2848B0CA,
+0xC3165920, 0x04B1AC65, 0xEC0E86BC, 0x63316C81, 0xA7530CAF, 0xDEF35C0D, 0xFF0ACAAA, 0xBF12EBD2,
+0x66EEE4D6, 0xE0B6FCB3, 0x73F8EB68, 0x193BCC94, 0x7C142BF8, 0x5121F979, 0x5DBD48DF, 0xF42919AC,
+0x3AFDC353, 0x4A630B62, 0x6B988F4D, 0x63103C6C, 0x3A1B89BA, 0x5C039D43, 0x0007F8D8, 0x333E32C8,
+0xAA9946CD, 0xF612EAE4, 0x79C6DBBA, 0x9A1A1269, 0xFFF06082, 0x5398E609, 0x9C742B54, 0x806E99C5,
+0x26B015D2, 0x06810BC4, 0xC35F6261, 0xB2EB6D31, 0x3AA595B0, 0x10F47040, 0xF89ED22A, 0xC1CCB17B,
+0x47A80428, 0xD49945B4, 0xD54A440D, 0x44883858, 0xE028404A, 0x0ABF12B8, 0x2227001E, 0x3C7FC13B,
+0x7085903F, 0xCE49CF16, 0x69C6C0A5, 0x83EB3974, 0xB07E82C5, 0x0FCC135B, 0x95FCFB27, 0x60958748,
+0xD70C8195, 0x77B4AB0D, 0xCDF23A52, 0xBBEF6A06, 0x7221BD82, 0x7E62F7F0, 0x9E68EEAA, 0x740545D7,
+0xC0B2AF24, 0x241CFB9D, 0xE6D5EA45, 0xE0939D99, 0x7382D3D9, 0x373F36C5, 0x87841024, 0xD38AD097,
+0xBC95ACEE, 0x3217FD63, 0xE053FD02, 0x279E6846, 0x0199F6EB, 0x5FDC6A77, 0x431BED24, 0x73BB9BE4,
+0x73EB7CC5, 0xA33B62C6, 0xB5B209D3, 0x9DD1E024, 0xADFC10F4, 0x83C2CC6E, 0x47ADF861, 0x8528690A,
+0x7DC85203, 0x30604D50, 0x44BEA561, 0x61843EE6, 0x80EAA149, 0x3FB92615, 0x84F6D2C3, 0x8C40B30F,
+0x82FDAB2C, 0x00C474AD, 0x0DD4783B, 0x5CB4A792, 0xBDF43057, 0xE1095204, 0x74B361C8, 0x47FAC9B4,
+0x86D6D808, 0x4E268B10, 0xC88B3485, 0x2FF5B34D, 0xB8E5FAA6, 0x62BA1E88, 0x5826E1F8, 0x15E8BB6D,
+0x85769B7C, 0x43FFAD53, 0x87F5393D, 0x7865707B, 0x288889F1, 0x92426960, 0x6AED2806, 0x99D7EABB,
+0x997514B8, 0x0C453E1C, 0x10A5A2A0, 0x42AE0562, 0xB756CC20, 0xFC3893DF, 0xBCAB914E, 0x5CB07D40,
+0xB74D604F, 0xC99069A4, 0xB4931BFC, 0x60073461, 0xFFB38703, 0xC3F0A80A, 0x789D1FDA, 0x7BA726CE,
+0x3DBAC5D1, 0x63E257CF, 0xF67563A5, 0xC189AED1, 0x90E777ED, 0xD64C3CB5, 0x1C5908C1, 0xE6E02832,
+0x0AD52626, 0xB6A72551, 0xB59DF772, 0xAE20A783, 0x87593AD8, 0x265BF5B3, 0x97F4A9B7, 0x4DB7111D,
+0xBE0EC7DD, 0x49FEB2F4, 0x74CF859B, 0x3D9B129D, 0x7D2D4432, 0xE2F5EE44, 0xD34C3052, 0x42E93648,
+0x0C3D4A62, 0xDB77AE13, 0xC24C1465, 0x513F617B, 0x0346CFAF, 0x2F685696, 0xC4AB4D70, 0x3DF416F2,
+0xA7BE6D68, 0x0D5435A2, 0x9A3FFC56, 0x793D8548, 0xD8CBAAC5, 0x01BD7990, 0x326920E7, 0xD20B8572,
+0xBFCA580A, 0xA2A643B8, 0x2C79E1C6, 0x615E5EEA, 0x1E09B4B7, 0x12B64B40, 0x000080AF, 0x9A210100,
+0x3F4E1A00, 0xEFF9B6E2, 0xA0748D4E, 0x63D3581B, 0x75094C30, 0x83BA8D7B, 0xD28A0D3B, 0x1F120150,
+0x2F0AE7B3, 0xA384B9EA, 0x1388E09F, 0xB2104469, 0x01550D61, 0x817A5C1E, 0x4E27F16F, 0x0940B646,
+0x3E85C3FA, 0x1F6FEFC4, 0x61B6CA17, 0x63271DE8, 0xCBC35CBD, 0x76D1438A, 0xA7440FF8, 0xF522FDF8,
+0x042B01F5, 0x090B0A7E, 0x232DD618, 0xA4658DD2, 0xB58F5775, 0xEDC008FC, 0x312514B5, 0x99A143D8,
+0xD7332A00, 0x1A0CF6E2, 0x838D2A8F, 0x2CC40559, 0xE37AD8D8, 0x59397F2B, 0x64D424D0, 0x9B825CEC,
+0x3986E8C3, 0xB3482D5D, 0xE9265670, 0xE2E24DF1, 0xE7BAD276, 0x4685FB97, 0x2B50F4B6, 0xAEA7CCD9,
+0x0E407559, 0x2FBAE797, 0x0B1BED27, 0x9253E758, 0xA6042B55, 0xE5C7A6ED, 0xEEB0C116, 0xDD057F3C,
+0x2C0FB43F, 0x9B7985AA, 0x3CB3B2EA, 0x5F60E96C, 0x737B6BB8, 0xC77EE325, 0x3E5C524F, 0x06F6E300,
+0xAF4B0CE3, 0x9EF6833F, 0xF64AB723, 0xD1D72219, 0x72DBF976, 0xB9390A2E, 0xBF15172C, 0x2CB1ACA9,
+0x21AC1B14, 0x0B4A7FCA, 0x777A61C3, 0x0148D226, 0x07940D88, 0x88C9C241, 0xD55271B6, 0x881C6CEA,
+0x1AFF4658, 0x0A8F20BB, 0xF8D5B5D6, 0xCB9B1D61, 0x4F80FB11, 0x7FE5F073, 0xE2DBA34A, 0x153F5A0F,
+0x0028F6BD, 0x8DA466CC, 0x16649FF9, 0x678DF713, 0xE33FF887, 0xE38C9DC7, 0x60F68D98, 0xB00094BF,
+0x8FA067C8, 0xFD989DE3, 0x782583E4, 0xE2BF7BD5, 0xAFE0494E, 0x57821858, 0x04F45F32, 0x072C503C,
+0x4F9CC97C, 0x79785132, 0xE8424957, 0xC479BC7E, 0x1832F736, 0xD58F1026, 0x5D57D794, 0xB72DC8DA,
+0xC3C0F92F, 0xDAD36D65, 0x4DB553F9, 0xC38A04E3, 0x9D99732E, 0xB1436FFA, 0xB788DC21, 0x464A7472,
+0xFD99BE99, 0xB16613FF, 0x355C21BC, 0xD771F34C, 0x389C1463, 0xC9C15F3A, 0x32F4F6A2, 0x1AF28005,
+0x9E1901F7, 0x74BB5ECC, 0x379438A9, 0xE8410E91, 0x2459547A, 0x36196804, 0x8072F31D, 0x27436906,
+0xE7636523, 0x4A516E33, 0xAB3B66E1, 0x122429A9, 0x393FE2E0, 0x421C2A5C, 0xAB1611E9, 0x7DED58F1,
+0xB88D5AC5, 0xD69374BE, 0xCE3C1071, 0x892F8795, 0x280C6021, 0x5D295674, 0x6E886FE7, 0x88336F46,
+0x08E517B8, 0xA14B6DF9, 0x5459DF3B, 0xDD74819F, 0xB8DCBCC4, 0xF0A47ABD, 0x2D74320D, 0xD53ECB26,
+0x85811A23, 0x27215E68, 0x8FD3E5DB, 0x6C2EAAC4, 0x141BC0C7, 0xB5988224, 0xC4F25B54, 0xEBC43E32,
+0x940EAA46, 0xFE010061, 0x87FD0DE9, 0x1888B891, 0x9ADA61ED, 0xDBA771A9, 0xED808B29, 0x6201EDF0,
+0xF65F004B, 0x4251D0B8, 0xB172045D, 0x7978522E, 0xFFF6BBEB, 0x1D3F2913, 0x7D5EAE08, 0x7B4B50C1,
+0xBCBD2A89, 0xCEF53B9F, 0x7DAC33D5, 0xE90305EA, 0xCF609BC3, 0x4C289906, 0x62735531, 0xFADC9802,
+0x5D6EDE3E, 0x769F85F0, 0x83E57628, 0x940BC7F9, 0x1253DF72, 0xDC8AD021, 0xAADFB093, 0x8E1F5FDC,
+0x82786D62, 0x1C54A1D0, 0x53254924, 0x3D05D075, 0xA830FE38, 0x18873991, 0x16773A09, 0x58960D76,
+0xF40D43DC, 0xF49F6B31, 0x202F06D5, 0xAA08A8FD, 0xCA0228E5, 0x7A366032, 0xB2C6AF40, 0x8F0B96A9,
+0x95A62C32, 0xB1124A48, 0x1651B2B1, 0x4353E94D, 0x143912CC, 0x097A934F, 0xC21B4639, 0x600CCA59,
+0x49A2821E, 0x6C6F9C10, 0x51054A10, 0xBAED9869, 0x594D2520, 0xCA57526E, 0x8575BA83, 0x17E55AEF,
+0x9F5071DA, 0x9E75C65F, 0x5E27255C, 0x21E65D02, 0x21D9AF03, 0xD9D584A4, 0xAE86CE58, 0xF5FCF5FC,
+0x6A7F8082, 0x2D3A4EF3, 0xE49C3BB3, 0x6B6C7EC3, 0xAE3E51BA, 0xFEF600F0, 0x8D1F2185, 0x47C143ED,
+0x995F62BE, 0xF3483FF6, 0xF327193B, 0x8E3ECC0B, 0x33161B4E, 0x3CB8D4B1, 0xCE87DB58, 0x0B836062,
+0xD5468C41, 0xD1AD96E8, 0x7E5AAA23, 0xF0575475, 0xC6C6F13C, 0x098B8C14, 0x2040A413, 0x26070412,
+0x7598D4B2, 0x8EB237C2, 0x6DF4A207, 0x1E4857DD, 0x31B1C586, 0xDE3D5332, 0xAFCE2AAE, 0x4FB7997A,
+0x28970836, 0x11F933E4, 0x9941C0B0, 0x1BAB9082, 0x2A7B63B1, 0x2BBEB5A0, 0xE7A084CC, 0x744AEB98,
+0xA8DB0300, 0x8A371914, 0x37511200, 0x25A2F4D3, 0xA6D3C8E1, 0xEC3369FB, 0x107E49E6, 0xC6740FED,
+0xACABADA6, 0xC2AA801A, 0xA66DEA8E, 0x5C08F5F2, 0x93E906C1, 0x1CDF4BA7, 0x24B2DF19, 0xD7E4662B,
+0xF679C2A7, 0x0139A134, 0x4DC6C563, 0x50535F88, 0x70122010, 0x5F505593, 0x965C0448, 0x5D007E92,
+0x1DD5A26C, 0xFF2374D8, 0xEADB882F, 0x553DEA98, 0x843921A6, 0x204F17CE, 0xA8F2BE95, 0xBE86C9D4,
+0x125C2A33, 0xB97EE2B1, 0x2209B83D, 0x21B9D8FC, 0xB553EF1E, 0x4CAB0D5E, 0x9110D87E, 0x6BEA294F,
+0x8726A068, 0x9FED0600, 0xDF08DCE9, 0x2D1101C4, 0x9E49995C, 0x37E904BD, 0xC18451C0, 0xAEA35B22,
+0x890EBE4F, 0x1F90796D, 0x41E688D2, 0xF8D2C257, 0x23AE11B8, 0xEDC192A5, 0x682469EB, 0xD8117E3C,
+0x3D7FCC8E, 0x70FA22F3, 0xF24482E9, 0x0C3C174D, 0xDE81B1D1, 0x15BEA789, 0xCDC0E56C, 0x2D89F92A,
+0x5A19D259, 0x61025F83, 0xC7D0BA67, 0x2FF06496, 0x1ED3238B, 0xEEABBC1C, 0xFD6CE68B, 0x38B40726,
+0xBE93E86C, 0x5085800A, 0xF0C4DA6A, 0x7EC6C6B8, 0xC1815F41, 0x92D7A0CE, 0x24C2DD7E, 0xD55A096B,
+0xCD37BD00, 0x86CA017B, 0xD32ECD44, 0xEA47F6C8, 0xA128ACF7, 0xFEA615C3, 0xF3C469E0, 0x3B730BA5,
+0xB5AEB853, 0x2FD27115, 0x1A311B4B, 0xF3501228, 0x243657ED, 0x387A9A55, 0xB74BF853, 0xBEA5A65F,
+0xBF4CEF2B, 0x6DA7ED2F, 0x882D8100, 0x7A5614C2, 0xCB354338, 0x3EB6CDF9, 0x909452E6, 0xA9FA3960,
+0xB7AF4CF5, 0xBF46EF1E, 0x147B9F3E, 0x3CA5CDD9, 0xE2469DA0, 0xF1D5B846, 0x7F15CF10, 0x3BEDFCB4,
+0xEEF4463C, 0x64962751, 0xD8629B58, 0xB038B9CD, 0xC25D1A3E, 0x8B0CD331, 0x5A2A2E98, 0x574BD035,
+0x30011DAE, 0xFBAF2DEF, 0x51925EA5, 0x94F22BB2, 0x4037B88B, 0xF9F3DC3B, 0xA0458F0A, 0x97253DE3,
+0x2FE755A9, 0x4E76EE33, 0xDDD0C75D, 0xEE82D4C3, 0x56DCB0F4, 0xA7E83EDB, 0x5C8584CF, 0x4F7FDF8E,
+0xE14664A0, 0x96C9B07C, 0x69A8426E, 0x609E79D3, 0x171D3158, 0xC7952B95, 0xC9B5FD0F, 0xCD952DAE,
+0x5F650A05, 0xDF07B85A, 0x6F35A757, 0xAE1B2AB9, 0x2F0D4881, 0x632F587C, 0x75968657, 0xB5A4FC4E,
+0x5F3B404B, 0xCD0209CE, 0x07B54A5F, 0x2EA3CE3D, 0x046B800D, 0xB3583DA5, 0xC3EC9755, 0xD51EEA48,
+0x316C635B, 0x72366623, 0xA3E24C77, 0x5A90F9DE, 0xBDC48880, 0xAB7F6D3B, 0x65EE3CB1, 0x60817F2F,
+0x9C16FB10, 0xB8C92231, 0x53A9E73A, 0x09C5A7CF, 0x2CC9EDE0, 0xF3554A4C, 0xF0411F5E, 0x8CD6EF5D,
+0x45196DC8, 0xE6CC68FF, 0x07F9F257, 0x9AD595CA, 0x33957E68, 0xFCD47C52, 0x8D989FDA, 0xA8E55A14,
+0x3263EB5F, 0x70314AC6, 0xE8041055, 0x22EA70C7, 0x11505702, 0x0AF72B91, 0xBAAB7B37, 0xF542635F,
+0x94FC37AD, 0xDEC35450, 0x19CCAB69, 0xE7E45806, 0x087C94C1, 0x4008D6BE, 0x7FAAAC23, 0xD3084A9D,
+0x36749C3D, 0x294371E0, 0x320EB45B, 0xCD87700E, 0x60C249C1, 0xA552F654, 0xE46433A3, 0xE8BF1A26,
+0xBF95A125, 0x586A2EEB, 0xCB9E4444, 0x86769182, 0x0C0F5468, 0x68EAE506, 0x96E4F59E, 0x275D7BB7,
+0xC04B291F, 0x849BDE2E, 0x2095E8DE, 0x8F0A21F9, 0x2593A377, 0x57459F02, 0xF580EDD0, 0x1A981B89,
+0x8C92947D, 0x775BA799, 0x5E600042, 0x8D66E879, 0x4A9D3B9A, 0xDB13FDC6, 0x2CF44A15, 0x9EDA331B,
+0x6755A0A3, 0x198E2A6F, 0xAD8E3E0A, 0x27424AA3, 0xECF4D743, 0xE826136A, 0x2DDC8578, 0xEE0CFBAE,
+0x9ABCAB16, 0xD2AE94F8, 0xC1BC9B9A, 0xD7BDA22A, 0x910A184A, 0x29AE5C9C, 0x1C528C77, 0xD7D6E6E7,
+0x26444F84, 0x3FEE273D, 0xA789BCB3, 0x89EC8B04, 0xEF21F02D, 0x69929FD1, 0xA6D9A7C3, 0x3448D297,
+0x871A762B, 0x8525DC3E, 0x224F17DA, 0xCAABF275, 0x0F7C6EF5, 0x96476EAC, 0x3C9BD2DB, 0x90BEB5BE,
+0x9334AF2D, 0x56439561, 0x3D16474C, 0xD6F20B55, 0xC590271E, 0xA1A6B49D, 0x57E1C206, 0x66E555C5,
+0x323C56E1, 0x32642B2A, 0xA83B8CF2, 0xAFE595C9, 0x16C084F4, 0xC2C6E451, 0x4B7C1937, 0x9755054B,
+0x47E9A4DE, 0xBFC1CD1E, 0x67FFDA85, 0x2442657A, 0x36DE2284, 0x38CFA83A, 0xC3C30742, 0x2A9F8A52,
+0x9043F25D, 0x4EBADF86, 0x5485666E, 0x48886302, 0x2E6A891C, 0x748EB258, 0x0DA68916, 0x088B6183,
+0xDC6F6FC0, 0x7E49EB3C, 0x3677E5A6, 0x1522AD9B, 0xDFE5ECFA, 0xF3328C33, 0x2D63E9D1, 0x82B50F0C,
+0x0244335B, 0x90C2585E, 0x6ABCCD57, 0xEC27E0E5, 0x2B65451A, 0x227FD258, 0x1231D8DE, 0x2745D165,
+0xFA573BD9, 0xA86E9CD2, 0xFDD3DDAC, 0x0930215C, 0x0114E1CC, 0x17657758, 0x3A8B5CEF, 0x7C63D9C9,
+0x06565066, 0xE3E03953, 0x06D44C66, 0xF9EF0326, 0x25708E08, 0xEB4C3A10, 0x9AE75F77, 0x7C9F3990,
+0x993EF888, 0x8D7C6E79, 0x134568EE, 0x79A423F5, 0x16954120, 0x1E6AF04A, 0x76186351, 0x4F754CFC,
+0xEFB58FF7, 0x3866B88F, 0xD98F1838, 0xF398BECC, 0x190C9441, 0x511CABF7, 0x7D0C1DE4, 0x7E1D866C,
+0x510D6AB5, 0xDA2DEE74, 0x2228A6A1, 0x70EA13AF, 0x77296576, 0xC451E9C4, 0xBFE38E5F, 0x8E94D664,
+0x15E5DDB4, 0xAD20C6A6, 0xEA753A95, 0x244745A0, 0xAB22FC45, 0x83806FE6, 0x0F1D7A66, 0x2F452AE1,
+0xC482B455, 0xC3F1D4DB, 0xA0DBACAD, 0xD83040AA, 0x0B961ADC, 0x59B450AB, 0xCDF7694F, 0x9783FDC6,
+0xE583805F, 0x63C0DB91, 0x3D210DBE, 0x3F23BE30, 0x1C9485AA, 0x8E0B9C63, 0x4099EADB, 0x8B8BD455,
+0x9FC29462, 0x41D67880, 0x9C5AF633, 0xAFC4C5EC, 0xA37D2FDE, 0x8BFDF118, 0xC8458090, 0x40714F0C,
+0xBD54AA1D, 0xE81329A0, 0xADB120D0, 0x62D016E8, 0x2FDE957B, 0x10B4588E, 0x61C86A1D, 0x4ADC7EF1,
+0xAF9827D2, 0x851E3C99, 0x3BCA9462, 0xE10A9E09, 0x3E1F8F80, 0x6D32796D, 0x3C264A38, 0x56A126E1,
+0x50441A0D, 0xD5F169D5, 0xD1055CA6, 0x6591DA42, 0xC9C6677A, 0x255FFAE8, 0xDD7FC8BA, 0xF004EC55,
+0xFFD23A13, 0x0E31BF0F, 0x054C18E6, 0xD355EF07, 0xC08F1061, 0x87DF6104, 0x1786998A, 0x9212C3ED,
+0xBFFF423A, 0xF9A83872, 0x318C0342, 0xE693853D, 0xD8782240, 0xA264E2F1, 0x6FF26A39, 0xC0C83F49,
+0x128BCDA5, 0xE414B8F0, 0x3E43214F, 0x76056EF1, 0xCE4ED53D, 0xC2D3703A, 0x27B21EBB, 0x01C66041,
+0x3DAF882D, 0x53AB888A, 0x01707887, 0x33509476, 0xDB80A5D4, 0xF5A8D2AB, 0x9F2C41C5, 0xC418C79F,
+0xBF946CE4, 0x396B7936, 0x1490A93C, 0x21A0A867, 0x6C0CADAA, 0xF93A5F2B, 0xDAB4684E, 0x29D901BE,
+0xE5247FDD, 0x89A0B031, 0x225E7812, 0x8025D436, 0x6E0D4B2A, 0xD9E7BD57, 0xCBC702BF, 0xD2958D16,
+0x583963CB, 0x18BF3468, 0xF3246CF4, 0x909696BB, 0xB9051CF1, 0x972FF885, 0x0DBF00D3, 0x4A9D0EC8,
+0x465D50E5, 0x1B7B395F, 0xB4659973, 0x417051A0, 0xCCAEC7B5, 0x6D408669, 0xBCC1D5B0, 0x30A15415,
+0x994B81BF, 0x3D5A07ED, 0x671E9551, 0x90099C5E, 0xB662A29B, 0x9B9D6CE3, 0x153F126C, 0x7A3B1DC1,
+0xA53A2B92, 0x1516700E, 0x44B8D960, 0x8E798C39, 0xEABABEA2, 0x28062FC0, 0xB132F247, 0x96829D68,
+0xDD63A457, 0xE0585253, 0x17C6103F, 0xD8C83FCA, 0x97EEAEFF, 0xACEE3FA6, 0x13DEDA36, 0xC49936D4,
+0xFD6B845C, 0xA223EFF7, 0x63557167, 0xE3027BC5, 0xD1A83B22, 0xC08B4AF8, 0xF778B660, 0xD0F1EB1E,
+0xA146E6BF, 0x922C7939, 0xA0FE2E3F, 0xCB222CD0, 0x5D446EB5, 0xAF588646, 0x5C11611E, 0xCD95A50C,
+0xE511C427, 0xFC93F340, 0x5DFD8FA5, 0xB6A78AC4, 0x2707C9A5, 0xF3B7D059, 0x62752ECB, 0xBB0C344B,
+0x002D14F0, 0x5F842A65, 0xFD33CA77, 0x9DEB08FC, 0x4474163A, 0x40F4CC5F, 0x5B647179, 0xEB30D1CC,
+0xF09DB1C1, 0xE994E17D, 0x00624BED, 0x933A8E4A, 0xDD50816F, 0x81E99A63, 0x495EDCDE, 0x8B52EC1C,
+0x96E4BD62, 0x93321F3E, 0x3B8B6F7C, 0x1F52B145, 0xF1CE2FEA, 0x966C40D2, 0x38E1AE3F, 0xDFA29247,
+0x156273D3, 0x54C28287, 0x6DCF7195, 0x32848C16, 0xFEF4B447, 0x9280BC5B, 0x9D12A94C, 0xA41B679F,
+0x4BF2747F, 0x7C48586A, 0xB3A65940, 0xD3A9473D, 0x7D8AE6ED, 0xB76B63E4, 0x42C97C5B, 0x6EF60013,
+0xC2B29892, 0x578D6EAE, 0x28FD1518, 0xE47EDED0, 0xC3080E58, 0x38111E72, 0x8618539F, 0x531DB6DA,
+0x7E9980BB, 0x1BA643F7, 0xC4DBAC0E, 0xF1012990, 0xA681740D, 0x221F44AB, 0xE2D8687D, 0x008AA3BC,
+0x46AA6BDD, 0xFB9FB8F3, 0x04AE9A4A, 0x556CBC8F, 0xC4F21D00, 0xFFF850E6, 0xB4E5BED9, 0x0951DEE1,
+0x257942D0, 0x353F26B8, 0x7F0568C9, 0x9020DB24, 0x144AAE1B, 0x0F00B44D, 0xA7462AF2, 0x61116E67,
+0x7512A859, 0x2D1EEC0B, 0xB17C233B, 0xE55EB78B, 0x54D415D3, 0xCC63BAD0, 0x904612F5, 0x9CA6C03F,
+0x76480AAB, 0xEC20215B, 0x9D821EF5, 0x55969B09, 0x471C6606, 0xFF2F6FA4, 0x4AB04145, 0x56AF7A61,
+0x00A3EF8B, 0x4AD3F0B4, 0x812EE5F3, 0xA1309366, 0x094C9C65, 0x403FADC8, 0xAF18B9D2, 0xDAB43DE4,
+0xD48B4F0B, 0x08613DF7, 0x6A2DCE17, 0x88208D79, 0xF585B3D7, 0x2A416E3A, 0x2910FD8F, 0x2669EAE0,
+0x0B19BBE4, 0x42510BCA, 0x5872363D, 0x61731B04, 0x1952C0AA, 0xF523BA9A, 0xB2508CBB, 0xF9529B60,
+0x145E3857, 0xE3E7D957, 0xD525BBE6, 0x59F9785B, 0x2240316C, 0xEDA51183, 0x19F62D45, 0x393187E4,
+0x155543B4, 0xE945CE28, 0x0F51CD70, 0xAB874246, 0x39C896B5, 0x9B3B8C73, 0xC18729D2, 0xD01C62EF,
+0x3BAA053B, 0x4442B1F3, 0x16D559C9, 0x2DB50A52, 0x531C9B39, 0xC07CD9CD, 0xBC33D690, 0x4762695E,
+0xE3BD4EDF, 0x2C31E34E, 0x2B06D038, 0x95668EF0, 0x663C7001, 0x15AB86CA, 0xD6C72C31, 0xD71C27D8,
+0x7A0722CB, 0xE3EA5E38, 0x17D1F1E6, 0xF227316F, 0x624235A8, 0x3135E67B, 0x0A0425C6, 0x7FB58DCC,
+0xAB75A29B, 0x6A62D57C, 0x33A0040F, 0x74A537D4, 0xA262B492, 0xC0F8B66E, 0x88ECC6C5, 0xEF7B172E,
+0x20492D8D, 0xA8FF4D69, 0xD2F02BD9, 0xAADAC9D3, 0xA7D87EC3, 0xD2A5AA9A, 0x70DD4F93, 0xFD886C6B,
+0x332252FC, 0x5F24FA04, 0x69C7AAC3, 0xBEC6DACD, 0x53B1B489, 0x663376D4, 0x2F1F51B8, 0xCDF51774,
+0xF02E49C4, 0x5468500A, 0x3C9B132D, 0x4AF04C02, 0x2697FB3B, 0xCE50CB18, 0xE1856C47, 0x095F4900,
+0x9ACCDF19, 0x1E2B2625, 0x86B25920, 0xA4F189EE, 0x2B06911B, 0x0D596627, 0x4AB09C95, 0x04A509B9,
+0xB4105C14, 0xE13DA785, 0xF9EE2017, 0x34A9B223, 0x0CD282FD, 0xE44B21F8, 0x5D6956B3, 0x4F1D6E74,
+0x4A96FAAE, 0x8B964109, 0x53C3A910, 0xBE4FFD91, 0xF0BA38B4, 0x6B3CEEFC, 0xB6F82704, 0x6F312DCB,
+0x5954A7CD, 0x3E3532ED, 0x3425526E, 0xE317CCFF, 0x31F3E8B5, 0xE5159C58, 0x10C7CF98, 0x61E27354,
+0xAA7C8B22, 0xBC809078, 0x021FE54D, 0xC777FF01, 0xD1614B2E, 0x76F86061, 0xFEFA652F, 0xC83AF376,
+0x9E1649F1, 0x4687E8E9, 0x03CB4F64, 0x482B27E6, 0x0F9CF175, 0xC2741C77, 0x7C0598AD, 0x01000000,
+0x1C009E01, 0xFB7F124B, 0x2ABB1556, 0x7C3F8341, 0xE332FAE5, 0xD4BA203A, 0xE326279F, 0x6094C3A9,
+0x02D692F6, 0xCA2864EB, 0xB0091BD6, 0xE9AE2609, 0xBB1DD497, 0xE2D5DEC4, 0xF2B1B0BC, 0x33F72558,
+0xCFB5931F, 0xF86DDC97, 0x6D9D6817, 0xE952BD8B, 0xB50FCB02, 0x0DAE96FA, 0xC5DE43ED, 0xEF1B8746,
+0xF9E19B92, 0xFB46E8DD, 0xDCB262BD, 0x856E3E87, 0xD5E8F1E4, 0xA7B1F490, 0x1E01DA63, 0xB52EB078,
+0x14B571E5, 0x044DC6B1, 0x9D793796, 0x62D4F4EA, 0xC97A1D87, 0xD4DAA645, 0x1D5C0030, 0x7665108B,
+0x17168417, 0x2AFA8737, 0xBBD41988, 0x8F469888, 0xBEFEDAB4, 0x76FE85FC, 0xB96E91A0, 0x9462A2AB,
+0xD20BE680, 0x028D5793, 0x7EA5C990, 0xD76D0F40, 0xABC1E0AD, 0xCFC1B16C, 0x6B07E459, 0x3409B51C,
+0xC6D53686, 0x09DB8B1F, 0xBCC1E66A, 0xF0E7E577, 0x92275B6D, 0xC0D7AF15, 0x725DBDB4, 0x8850F59D,
+0x6836A88D, 0x23B172B3, 0x0B4F408C, 0x48F56322, 0x012027D3, 0x6BB6FB2E, 0x902892B7, 0x394B4FAB,
+0x7672E609, 0x6CF9B1C7, 0xB13AA6EA, 0xB7EE6766, 0x633FB0FA, 0xE794E4E6, 0xD6C67746, 0x62D400BE,
+0x4AC3CDFE, 0x1B765691, 0xC69D2FEF, 0x5EF834D8, 0x72CD038B, 0x9789F304, 0x1A4BE43A, 0xBAF8658F,
+0x3F7B26DE, 0x5B479621, 0xA8C007AD, 0x9D195F32, 0xAD894818, 0xA290978E, 0x0994DE47, 0x045B753A,
+0x9684B304, 0x70C4F201, 0x8EB240C6, 0xD2AA6C58, 0x7EAD622C, 0xE8CFC465, 0x737A81CF, 0xF01CF930,
+0xD59F0D57, 0xC4EC9250, 0xA19A3FBC, 0xF2A49C7F, 0xFC41D0AB, 0x3632D3EE, 0x1380E835, 0xFFE09CC6,
+0x1CB188C0, 0x504C172A, 0x201C101D, 0x69D9CE71, 0xD3AF16A0, 0x8D06869D, 0xCDB50512, 0x20F7EF2C,
+0x37EC4A24, 0x17F83221, 0x3AF57E35, 0x6CC212FF, 0x16554C90, 0xD2129EB8, 0xB10628B5, 0x6D5A2CE4,
+0x1F3FE20F, 0x9F4DF0B4, 0x499DA8D7, 0x590B3C63, 0x3C316BDA, 0x8E5317A7, 0x75DA330A, 0x916FABD0,
+0x7D8563B1, 0x5DAB6816, 0x56316B83, 0x2099F1B5, 0x4828FFC1, 0xEC7984DC, 0x5AF0EAEB, 0xF539F295,
+0x74664E5B, 0x0F372DA0, 0x82A8793E, 0x17760611, 0x96F65861, 0x6FDDEC85, 0x4567E54F, 0xD5F2A7F8,
+0x7BC71CA9, 0x89F75D5E, 0x5261D849, 0x2203F236, 0x93774061, 0x52AE242D, 0xB7F6E3D0, 0x4A8A475D,
+0xBBC8938E, 0xF6E012B6, 0xA1B982B5, 0x20E972D8, 0xFD872D77, 0x84F1DCF4, 0x2E8E738A, 0x98AEE06B,
+0x3859D850, 0x3380BAA8, 0x890D6B5A, 0x4502B22C, 0xFB7ED21A, 0x6A86BE87, 0x5C29EB25, 0x8851D151,
+0x9CBFB386, 0x78FD8E5C, 0x12ACB618, 0x7ACD5788, 0x9A8F9365, 0x2F33D5FD, 0x543FC405, 0xD4A69434,
+0x8B10D51E, 0x7BE115A7, 0x24ADA2F2, 0x9F0845B6, 0x4204DF2D, 0x45634637, 0x1150A218, 0xD86C6E16,
+0x5ADF98FE, 0x1A35FA62, 0x9869ABFE, 0xDA7B3BF2, 0xDA622E01, 0x0C8E39E1, 0xDBA11C33, 0xEF22B419,
+0x520250ED, 0x3AD56EC0, 0xA6A95832, 0xA954C85F, 0xB7421A7A, 0x0394EADE, 0x79B8897C, 0xC8C0059A,
+0x28A4E705, 0x466ED101, 0xF81C3FA8, 0xF084D330, 0x5D577B89, 0x562E7CB8, 0xD6B170FD, 0xEFCB3EFC,
+0x2449436F, 0x6860D749, 0x6D4B7F22, 0x4E753F1B, 0x400102C7, 0xFB7B7707, 0xDCF0B83F, 0xCC5B48A4,
+0xA7986066, 0x1AAC62B7, 0xFE9E8C18, 0xDE097B9D, 0x9DF87B5B, 0x33CB18AC, 0xAC990819, 0x5D0C7E2B,
+0x5090FC63, 0x59B2FADA, 0xAB72BE49, 0x765D69C0, 0x06C596B2, 0x130341E1, 0xF7CA2D8D, 0xBB54E60A,
+0x9804EE4E, 0x729232D4, 0x5AD2AFD0, 0x3CED8D0B, 0xCE282D02, 0x7D3A57BF, 0x379E92FF, 0x26B81EED,
+0xCB47B2BE, 0xC25BF414, 0x4CF90D0B, 0x3B32F1DB, 0xD80868E2, 0x9EFD0189, 0x342FAE5D, 0x25E1D698,
+0x08261938, 0x9A1FAABB, 0xA32B2B6D, 0xDB97F9AE, 0xC5DEFA76, 0x1446A410, 0xC4743B94, 0x10FF4426,
+0xA1C856ED, 0xEBFEC87B, 0x225633B5, 0x01000000, 0x1C009E01, 0xFB7F124D, 0x95BE5350, 0x046DA065,
+0xF6797808, 0xFEFFB67B, 0xC7DAFA7F, 0xA492FA5E, 0xD1AA10E7, 0x866AF594, 0xE50C6187, 0x6E2BB84F,
+0xD20C71B1, 0x3AE60BE4, 0x9DC3FD31, 0xF8C089FC, 0x0A3FC9E2, 0x744DA4EB, 0x81827502, 0xF5E17CA6,
+0x51ECDF3A, 0x94ADB27A, 0x2EF908F0, 0x5A3302A6, 0x29B5C32D, 0x66AE9B32, 0x8CEF4C25, 0x4006A667,
+0x83053397, 0x7FB16D27, 0x052715FC, 0x58EF1218, 0x996DA899, 0xF726D7A2, 0x3D0AE699, 0x2028DEF0,
+0x9C2B15D0, 0x233E81A8, 0x9D553DA1, 0x109279E2, 0xB0D124A8, 0x0CD963DF, 0x3308B5F6, 0xCEFE5929,
+0x3EF6DC8C, 0xF2E74E2E, 0x180D21FD, 0xBCCE44DB, 0xC7819CA8, 0x4116F13D, 0x18407BA7, 0xB158B7C8,
+0x22C194C7, 0xC178FE0B, 0xE4DE6BD2, 0x587BACF0, 0x3E4B3016, 0x93AA7006, 0xDD9D2E02, 0xEACC347D,
+0x0B1F4621, 0xA94EF5E2, 0x432C2B41, 0xE0E9A13A, 0x45B97D0F, 0xFC833A5D, 0xECE9837C, 0x52B138E8,
+0xE241ADCD, 0xCC21A5DB, 0xB11D1FCF, 0x4015BD22, 0x324E4911, 0x8903C218, 0xEAD505B4, 0xBD769A75,
+0x73810044, 0x911DC8A0, 0x25B85B48, 0x0BB880A1, 0xF26AA84A, 0xF3B06F25, 0xEC190C2C, 0x282D960E,
+0x3114E084, 0xA95585D2, 0xDAEA1BCE, 0xC3584DD2, 0x8425BE54, 0x6142F299, 0x15AA40B6, 0xB3DA82E4,
+0x81DDCCF6, 0xE1488093, 0xAB649D5B, 0x1C4E3AD6, 0xCCE589C8, 0x2FD8D457, 0xFE46CC78, 0xDB239717,
+0x8D5CBC08, 0x260057D6, 0x6367C030, 0x7410BAC3, 0x43AE57A7, 0x74FEE2A8, 0x43A86F8D, 0xEE3286ED,
+0x16EBB618, 0x77F20B31, 0xCC5F081E, 0xA0B92B60, 0x8CD9A2AA, 0x0E3E6806, 0x26C3049D, 0x4DE8DE8C,
+0x8D7FBFB0, 0x53100FA2, 0x7B45434A, 0x94F2B3F2, 0xC44EAF52, 0x01580A39, 0x2CFF55F3, 0x30B49020,
+0x5E76758D, 0x93B75979, 0xC62F2259, 0xAFACA0D9, 0x099B04E1, 0x335FB718, 0xD0F7E886, 0x17DFF413,
+0x60EB2B79, 0x388D9A6B, 0xA3B1F56A, 0x1B4F0E52, 0xEE486FD8, 0xE7A96004, 0x64F64B3F, 0x98B9B35D,
+0x7BD21FCF, 0xD4D1CCEC, 0xF39855DD, 0xBE741E3F, 0x3FFCFC8C, 0xD1B37AA2, 0x8E8652CC, 0x049A3418,
+0x6F19A656, 0xDADF6885, 0xDD45661C, 0xFDD700F5, 0x305BC2F9, 0x5F4C1BCF, 0x32227D41, 0xDBC64F88,
+0x63E9A1D4, 0x00662028, 0x880537CD, 0x3CA58255, 0x4DE20FDE, 0x93EF555B, 0x3B837C6C, 0xAFA4DF20,
+0x17846CC3, 0x0C04BE45, 0xD3C012B3, 0xFD1DC8D8, 0xD897DBE7, 0x1D5FDE88, 0xAEFBA0D4, 0x53A0D986,
+0x926949E0, 0x3FFA7530, 0x910AA559, 0x6C5D35B5, 0x366769B5, 0xD024DD7F, 0x42A5A824, 0xAD7CB62E,
+0x3C0DCCE3, 0xCA662795, 0xF861FB98, 0xF815C755, 0xCEE905CE, 0x187507B9, 0x2BD65AC7, 0x75A4F4DB,
+0x3E3D8A3B, 0xF39B7869, 0xEE45BCF4, 0x04D210CF, 0x3549F0DA, 0x36A8DF1C, 0xE01417CC, 0x64445C11,
+0x70A548E2, 0xA0AD2571, 0xDBF30A97, 0xE1CB00A1, 0xC3E27E9F, 0xFB2AC9E6, 0x36469AC7, 0x5119A0C0,
+0x4036AA51, 0x5A91022D, 0xE935D8B0, 0x89325D84, 0xC9003788, 0x7CCB07ED, 0xE95C71C1, 0xECE428A2,
+0x73E08B62, 0x828F8DA1, 0x14E5B60D, 0x23E7A4CF, 0xD92D2D1F, 0x8BA864A8, 0x55DF286D, 0x6CD0F344,
+0x7C4DE8F7, 0x31856132, 0x60851FD7, 0x13909451, 0x9598A9EC, 0x240B3250, 0x368998FB, 0xE56C7F87,
+0xB3C96011, 0xB01334D0, 0x1726F8A5, 0xC52805CD, 0xF40D34AF, 0x9526BD1D, 0xF9952EFB, 0x1894DAEC,
+0xC7796EBA, 0xB4F14A6F, 0xFCDF12F4, 0x967F4A14, 0x10A90430, 0x84714421, 0x0F79C728, 0x4154BC35,
+0x6F27DCB3, 0x6AA07E24, 0xC698E884, 0x858B1D53, 0xB1CE830C, 0x887CDA39, 0x31CC307B, 0x4887AE25,
+0xA63C5D72, 0x4BA2E6B4, 0x62CBE60E, 0x0505F6BE, 0x671C0703, 0x4DFF3D41, 0xD19D2FC9, 0xEFFA1C86,
+0x56369B3B, 0xC1D6FAB4, 0xDB6A7336, 0xF351315D, 0xE140B439, 0xD0C515FD, 0x1DB5246E, 0xC0B24695,
+0xB2FB23BA, 0x01000000, 0x1C009A21, 0x5DDD3F54, 0x17D8BBCF, 0x19357FC7, 0xE897E8F9, 0x634FFF5B,
+0x737AE609, 0x2C7D319A, 0x96E6865F, 0x2E1D4E1B, 0xFE1AFAD8, 0x8310FF89, 0xCCE3C9D1, 0x0CB04CB0,
+0x33F9F4CC, 0x41DE25BD, 0x2CEEF960, 0xE02C30B4, 0x5109AFD2, 0xDE68EAF8, 0xE1DD02E2, 0xFECF7BB9,
+0x4561CE6D, 0x203D9C40, 0x6B5900C0, 0xFE1F66B3, 0xEA9EB37A, 0x7B691D28, 0x8B509F33, 0xA8A7E198,
+0xFAA351F1, 0xD195F231, 0x946E3803, 0x91D1C8B4, 0xCAF4F3E2, 0x4AC03D1C, 0x902306B2, 0x5B336986,
+0xFD2A8A20, 0x89F338FC, 0x164D1A6B, 0x66A0F721, 0xF9A45456, 0x5C12381B, 0x0D4FCE2F, 0xE9883DE9,
+0xA07A0A32, 0x54A3AC13, 0x01C9BF2E, 0x4D9AF4AB, 0x8E0B211A, 0x079654CE, 0x2C07ADC3, 0x53E3C6A3,
+0xC9801F0D, 0x6ED0FA6D, 0xF6F7C465, 0xDE226D2B, 0x4998A08E, 0x6850D600, 0x885852FC, 0xFB99FC33,
+0x96BD3C04, 0x5AE1E886, 0xEBB28110, 0x32A8B822, 0x1178CD5D, 0x4E5781AA, 0x3E0A5833, 0x674394DE,
+0x9B69F94D, 0x22CDA932, 0x220E78A9, 0x0A5D01EB, 0x81F3F6D6, 0xA9A3A6C8, 0x4F9197F6, 0x560F804D,
+0x554CB706, 0xFBB33A5E, 0x1F57A4BD, 0x47CDA2F9, 0x9345FE70, 0x3A33BF2C, 0xDCDC9867, 0xDE2B107D,
+0x3DC60176, 0xCCDD2FE1, 0x71D3E32E, 0xBBEB146D, 0x5800E785, 0x1CF8960A, 0xA41DDA61, 0xD538A871,
+0xB6328F4B, 0x9645F7CF, 0x83195559, 0xDA4B1351, 0x6F614F1F, 0xF25BD3C1, 0x504BAA0E, 0xC15AEE9C,
+0x92E74687, 0x1130068E, 0x4FD38756, 0x369F6533, 0x430DC2C8, 0x4F26584B, 0xCB711798, 0x379B33C6,
+0x9FA832D8, 0xB7FCE8C9, 0x424B42B9, 0x849FE692, 0xF06983E1, 0xF80CDC78, 0x38A6B175, 0xCA80E166,
+0x54F2FABF, 0xC2C93543, 0x18F7420E, 0x23F3D1B2, 0x34086C66, 0xB9C68B8D, 0x70E3ACC6, 0x69855CE1,
+0x069988FC, 0xB85B651F, 0x0AEF3C9C, 0x1A1F8054, 0x0160F378, 0xEE2A8322, 0x47E784A4, 0x755831FE,
+0x259B0DAC, 0x107FD0BA, 0x09430026, 0x665C8678, 0x6B93610E, 0x8D47FB46, 0x68200286, 0x2B6E30FD,
+0x063A83AF, 0xFBCD0716, 0x4BDCE585, 0x4390CD9E, 0xD1D7258E, 0x48C7A908, 0x8F0914F6, 0x5DC2CA9A,
+0xD07214CC, 0x0D926376, 0x90486DED, 0x959BD4E0, 0xA3C1812E, 0xF6F71A5A, 0x84C0F374, 0x6E5A5C0A,
+0x830123BF, 0xB7DB40A8, 0xB46C4F06, 0x0C82CE79, 0x551B02BE, 0xA957DEF4, 0xAAC217E4, 0xDD775440,
+0x1D121019, 0xC6ABF0BD, 0xC76A2E03, 0xE774A91E, 0x6C7F3BFE, 0xB6E301AE, 0xC6AB5AC5, 0x29997AAB,
+0xF83853B9, 0x24108EB3, 0xF0E63C19, 0xA56F1CB2, 0x2090767B, 0x01EA17B3, 0xEA110009, 0x38505D68,
+0x4E2CD8E3, 0x3E211AC4, 0x66BC0EBB, 0x344B368D, 0xD29FA175, 0x64FE8B17, 0xC4F30179, 0xF172E8C0,
+0x0F2D75CE, 0xE17F3E83, 0xE56F28DA, 0x4F3C4AA9, 0x032CEEDD, 0xE76D9EFE, 0x1B64F5D6, 0x09B4D622,
+0xE411A23F, 0xBD296C7C, 0xE7E72C2B, 0x07983C99, 0xF6A84FC4, 0xAA9F4255, 0x1012BCEA, 0x933EDAB2,
+0x3996D4FD, 0x196E7632, 0x198B51C6, 0x4097B773, 0xECF3E762, 0xD54254A6, 0x51F6758A, 0x85C0EDDA,
+0x48269847, 0xBD80BA8C, 0x475AE34D, 0x5BF9F553, 0xB40E79A1, 0x77A94AB0, 0x37ADC94B, 0x65B9A91F,
+0xFAFC98CD, 0x3396C332, 0x9FC04960, 0x49113EC8, 0xB4A2A2C2, 0xD814A267, 0xA661E818, 0x57591980,
+0x70A5CBD4, 0xF9F1DF88, 0x43A421D5, 0x7E5F125A, 0x9EA0A3D9, 0x400D084B, 0xF5A5E9AF, 0x5A34981C,
+0xA98322EB, 0x0D080943, 0xD1A18D43, 0xD41FC9A2, 0x9B236D05, 0xD79B7B91, 0x77CD931A, 0xC30D039E,
+0xE52FBCF7, 0xB6758828, 0xB4CE58C4, 0xAFE162EC, 0xB80C5F3B, 0x0EC565D0, 0xB41CBAD8, 0x7BC515AE,
+0x54F0ED29, 0xA87177AC, 0x04B4812D, 0x09CBB1FB, 0xA199CFBF, 0x8F21CBCE, 0x73787629, 0xFC7F7B1D,
+0x8D8625FF, 0xA694F0F4, 0x37DAC7F7, 0x73ED1C6E, 0x6475DFC1, 0x469034D7, 0xD0C29088, 0x614F8141,
+0x74BD9DFA, 0x72FA067F, 0x1BFED21B, 0x08597283, 0xCB6F8704, 0x8E56E8AB, 0x252B37E0, 0x812CE705,
+0x3D00AE8F, 0x74B6D3BC, 0x3028C5A7, 0x5692AC59, 0x9622997A, 0x1044BBC5, 0xF072AB8B, 0x1898566A,
+0xE2FD3955, 0x49D8A18B, 0xEE9CF39A, 0xA2A0CE00, 0x9476B235, 0x849720FB, 0x6E1E2950, 0x55FDB2A3,
+0x6D27E778, 0x1E958CF5, 0x7CD9FBC3, 0xB0A86D56, 0x0E177AB3, 0xB25F1398, 0x3D11D14F, 0xCAAA53C5,
+0xC363526E, 0xFC59F1E2, 0xA8679674, 0x92E26996, 0x3DAB3406, 0x2FD8DD8E, 0x1B56F83F, 0x726BD3FF,
+0x73DA16EF, 0xD5AE882A, 0x86182D40, 0x2DFE1B78, 0xB5D00F76, 0x069E99F6, 0xB0616F00, 0x09305A87,
+0x4A2EAA40, 0x8863E4BF, 0xD570F5B6, 0xB6308D0A, 0xB4A613E3, 0x37EBC156, 0xC38B1770, 0x83077A3E,
+0xFEF9768F, 0xC86D4194, 0x106F7BF4, 0xFA09A19C, 0x7A82A2F2, 0xAE7A05F1, 0x27B02BA6, 0xE1E93EF5,
+0x3A6B48E1, 0x9259A431, 0xB7ABFB72, 0x33F803C4, 0x9D81190A, 0x76D54559, 0x55F7E4AF, 0xD24D0706,
+0xF38826C2, 0x22280051, 0xFCE00473, 0x6F7656A7, 0x442F5EAB, 0x8CA676BE, 0x391B5F25, 0x33B29601,
+0xCA9A2D41, 0x4A2AA33A, 0x48BAEB10, 0x41645F1E, 0x275800FD, 0x07034365, 0x8F937872, 0x64AA980E,
+0x3E4E12FD, 0x20FD2DCF, 0x9360BD19, 0x8449DF76, 0x093DBA4D, 0xBD0E4474, 0xC97AA2D3, 0xC24514D1,
+0x283784F8, 0x6307FAE2, 0xB69DE263, 0x1BFF36C3, 0x7C937A21, 0x8B7965E6, 0x2BEE6AFA, 0xE4B60A6A,
+0xA3809D19, 0x747AFFC7, 0xD7758A94, 0x742EA87C, 0xAFA09655, 0x19F3C5C3, 0xBDBDFBD9, 0x236C6CD2,
+0xB47F431B, 0xBCC005EA, 0xB3399A3C, 0x11CF7F2A, 0x4AA66378, 0x14DECAF6, 0xD32B5360, 0x2EB17601,
+0x003DC01F, 0xE8365D33, 0xFBA49B96, 0x709C385C, 0xAC341F68, 0x9EDA5A70, 0x2FBC6051, 0x12F27034,
+0xB399391C, 0x1755F3B3, 0x6B9D88A8, 0x78DA66C5, 0xB0A3BFBE, 0x0CC83FC0, 0x324DBA66, 0x4D586B9F,
+0x19E7A38F, 0x4D12B479, 0xDE80410B, 0xB5CDBE5D, 0x8832C58E, 0xC67D48B4, 0xD96C74F1, 0xC5A6F913,
+0x76363A3E, 0x26B7FC2E, 0xA5188D1C, 0xCA547207, 0x6191AFF0, 0xA98D8FF4, 0xFE4A185F, 0x20FE0D18,
+0xB99A4287, 0x6C56AF48, 0xD7F95DAF, 0xCA619031, 0xA61D26A4, 0x83D298A4, 0xABF8F909, 0x1B1BFC57,
+0x13ADF7F6, 0xF9875ECB, 0xF621E738, 0x846826C1, 0xE7049085, 0x6D0EFD39, 0x22ACABFC, 0x3526C84E,
+0x3FA4D96D, 0x07DEFD7A, 0xA883FCFF, 0x85C94C10, 0x0B2D92D1, 0x0E938FD9, 0x7A942798, 0x04C96001,
+0x10A5DEBB, 0x3CE62D3E, 0x705B44A8, 0xF7763507, 0x4357CBC9, 0xC68BB4FE, 0x5E5CC213, 0x94C6959E,
+0x42967816, 0xFAA8DC51, 0x35755928, 0x6959CFB3, 0x709D6F75, 0xDD835FF1, 0x4FE3F34D, 0xADFBA720,
+0x6DF0E08E, 0xA4ACC3E6, 0xD0CE61F0, 0x0A2144BF, 0x361D65D3, 0xFD38BC55, 0x98D80690, 0x53590F88,
+0xD520DB11, 0x43AF2FDC, 0xEB701032, 0x2D336F0D, 0xA210D38C, 0xD98B05EF, 0xB4A7DEFA, 0x3DA6179F,
+0x13B39FD4, 0x1A45F6F2, 0x40BEF755, 0x76E23F86, 0x03775F95, 0x47BE8EF1, 0xA664A9F0, 0x677B2837,
+0xCC230488, 0x0E2D7E92, 0x9DF92CB1, 0x2B3A8CD1, 0x64524787, 0x6A0089FC, 0x0D7223A7, 0x42ECF501,
+0x9004D97A, 0xFA44F594, 0xB7D8F1B8, 0xDD20C58F, 0xEAA250E1, 0xAF1EBAC2, 0xDB785138, 0x26357130,
+0xB53549C2, 0xF9696C37, 0xEA703755, 0xB4E71340, 0x5EFC2760, 0x1F53B107, 0x4446363E, 0xE823CFDE,
+0xDA3E4D9B, 0x15579F51, 0xD2CE659C, 0xFA85CF3D, 0xF69DA608, 0xF1B8E247, 0x1C9595FF, 0x5BB5A8E8,
+0x1750C387, 0xBCE5297F, 0x294ADF46, 0x7DA841C6, 0x43A1CAE7, 0xF7E40A7B, 0xA48F72B6, 0x2DD8273C,
+0x89608CA3, 0x26E0B4CA, 0x37BF68AA, 0xE79DA09E, 0xD2242858, 0xD7ABB76D, 0xB527433B, 0xEEC3B86C,
+0x7898E5F2, 0x8549A93B, 0xC5AB333B, 0x6F8E5122, 0x4F90DD55, 0xCB967978, 0x198FEC46, 0x43A08E32,
+0x73503F92, 0x15582F4F, 0x54C37404, 0xA78515F7, 0x70DC69B3, 0x551C0D2F, 0x569746A2, 0xF5B57B4C,
+0x6E2A403A, 0x6532CE0C, 0x398B180E, 0xB940B37D, 0x2C798167, 0x7FFADA0B, 0xA9A43626, 0x12DD1BB2,
+0x4D860C92, 0xA45DA3CE, 0x1E9FDC61, 0x156311CC, 0xB3B3301E, 0xBE6F2FC5, 0xB2A3C921, 0xC40DA9D7,
+0x9BACB074, 0x1FF517CD, 0xDFDF3FA6, 0xA3AF9E57, 0x4B0FC0CF, 0x8E2CF9E0, 0x2EA9D67C, 0x7AD7E14D,
+0x8816080A, 0xB5F8F8F2, 0xF8EF1075, 0xF8567948, 0xC3931ECA, 0x436308EB, 0x610A2358, 0xC49646D2,
+0x0243AD04, 0x4C2481CE, 0x0D4D9414, 0x4D5A63D1, 0xBA2D5BC0, 0x25F737EB, 0xA57897BB, 0x99C07154,
+0x018B6DD9, 0x7CD3C784, 0x5FAE1C2E, 0xD797B91E, 0xF4B8BA17, 0x54AED9A8, 0x3F83FA10, 0xE0A816E4,
+0xC9495754, 0x47B5B653, 0xE22AC98B, 0x7E209A1B, 0xE80E81CE, 0x6C777966, 0xC0714ECD, 0x7E0CEB98,
+0x8FF458D3, 0xC6BA4BB0, 0x9324C60B, 0xB21BF8C5, 0xB4593FC9, 0xAFCAFA94, 0x32C4A7B2, 0xD8048C0C,
+0x4C1113E7, 0xE4092D6A, 0xAE52E67F, 0xBC52B5DC, 0xD66B2DDB, 0x078E2E60, 0xF502AEF7, 0xB6C75B18,
+0x69312273, 0xC36D0105, 0x9AD2A1BA, 0x1A4EE694, 0xA60D54ED, 0x9400189D, 0x0DF44EAE, 0xA11E944E,
+0x52134B03, 0xFDCAE07B, 0x8FAECC2F, 0xCE0F66EC, 0x195246C6, 0xF4D2E1A0, 0x5A57168E, 0xE614D412,
+0xE3867FB0, 0x79225FE8, 0x816A475C, 0xC5FE4B3B, 0xA7306DB8, 0x71D3C3E9, 0xB1E06D7B, 0xA1423772,
+0x88ECD4EE, 0x471C88BB, 0x0A5DBD19, 0x21753595, 0xA9B02A89, 0x9005ED3C, 0x903E6EE3, 0x2B64E647,
+0x7D8E7C55, 0xE488D693, 0xC7A2D685, 0x9B8D2309, 0xE8966FA4, 0xE4C04E98, 0x9926B77A, 0x13572E8F,
+0x3965DCF3, 0x6530E14D, 0x3AA597A5, 0xBAA5ED79, 0x32D2FEF6, 0xE29FDBB8, 0x584AE538, 0x321A5503,
+0xFE9FEBA7, 0xE14AC01C, 0x79A85873, 0x42008EE1, 0xE9A8C2A6, 0xC679DA76, 0xDA3E4D6B, 0x4E43989C,
+0x2BC4B469, 0x84E322B9, 0x141CAD5F, 0x749D0337, 0xC87F93B8, 0xE4C2EA04, 0xC03F6505, 0x87C16E67,
+0xA4AACF0D, 0xB0D2B720, 0x359687D9, 0x8C13C241, 0x13978632, 0x919BEB48, 0xD9EA861D, 0xD5A5B239,
+0x468CA8D3, 0x3CA50A36, 0xCB7FFF23, 0xB1A4ADF6, 0xC62C39EE, 0xB80DDDDF, 0xF1377AF4, 0xD85696D7,
+0xEFDBC06F, 0xA21F9687, 0x7DBF5618, 0x1D97BDE4, 0x96DA8643, 0xFC3E96D0, 0xE0C3D864, 0x63BA2E70,
+0xA6DCEF4B, 0x87B8A4B5, 0x23C0E1C6, 0xF00A2FEF, 0x4AA1A3FC, 0x7FF17C6C, 0xF358B89D, 0x8434BA13,
+0x27064765, 0x73B8A985, 0x38C9A236, 0x2E29E4FD, 0x643CA290, 0x0576DDF2, 0x3479F715, 0x19779D86,
+0xF3F68605, 0x9E99567B, 0x9C2651DA, 0x2AC02BE0, 0x6C419FFF, 0xFA08A279, 0x239A9D40, 0x1BEF449E,
+0xD3493228, 0x0321D056, 0x699CDCC0, 0x09C0A7A3, 0x9A0A5C18, 0x6C2D4F67, 0xFC10ACC8, 0x930ECCEA,
+0xD63246AC, 0x6B6DFA23, 0x2509CF38, 0xA008B625, 0x5494B8A5, 0x11E8C6D1, 0xB2125DFE, 0xC3E38DDE,
+0x42226C56, 0x2A62AF74, 0x994B4767, 0x50723EC6, 0x869A6B90, 0x2A2F735D, 0x47DFD96A, 0x1BD59F6E,
+0xEF9E7D14, 0xD7914A13, 0x5A9E2CAC, 0xDF3F0046, 0xE9250C52, 0x56984354, 0xCF382350, 0x30C14807,
+0x6A2927FF, 0x616EE1FE, 0xD30EA99E, 0x71DF2D50, 0x8167CF36, 0x8FEB67AA, 0x69396C52, 0x4FF4E295,
+0xA723260B, 0x14B7EEAA, 0x37CE769C, 0x8A6F7BBB, 0x932096B3, 0xA8ED63B0, 0x8E96A1F7, 0xE31226E7,
+0x97C54850, 0xBD0994CD, 0x916B1F30, 0x043542BC, 0xF90C7F32, 0xB1F62AEE, 0xEFC4BF5C, 0x95D315EB,
+0x4711EEDA, 0xDC05A72B, 0x9F0536B7, 0x5C64544D, 0x3B55EA37, 0x01341A7B, 0x4FA0685D, 0x2FD13B6C,
+0x8873CFC9, 0x287ED588, 0xD1755B10, 0x26A9D118, 0xD9B756A0, 0xA29A5142, 0xBF909C49, 0x1821427D,
+0xC10800EB, 0x9EB28409, 0x22BE6713, 0x746A2C1C, 0x633B011F, 0x3D81639E, 0x94C28450, 0xFCAF7C3C,
+0x69EC2F30, 0x43E0687E, 0x8DC2EC3B, 0x1B346A86, 0xD84144FD, 0x04628518, 0x1EA3B017, 0x0D5A7FB6,
+0x318873E7, 0x7C1B8FFD, 0x60DDD495, 0x97127076, 0xF34E1A43, 0x5B20BDA0, 0x58833F25, 0x4E3CD863,
+0xBDB918C6, 0xF3F5F078, 0x1DBEE703, 0xC8586DEB, 0x7D388773, 0x09CAEEE8, 0xD76B5F96, 0xBF4E11B9,
+0x6AA21C2D, 0x0051DE3B, 0xDD3C5CC0, 0x4989CFA3, 0x1B5A8508, 0xDCDF649A, 0x2B0645E0, 0x78D515C1,
+0x5083B427, 0x7BF8A467, 0x39BB8043, 0xD0538AB5, 0x206A13CC, 0xDC4B5FEE, 0x3542F833, 0xFD805F37,
+0xDA0481E5, 0x43BACA60, 0xF22B5718, 0x8B08A9DB, 0x1282972B, 0x77D9468F, 0xDACBA58D, 0xBD76D10F,
+0x4D3F4E50, 0x36D17661, 0x15F1DAE7, 0xC0BE228E, 0x6D4E9E7B, 0x2106C4F7, 0x51F35582, 0xF5C24AA4,
+0x0B03C237, 0x0AF424A9, 0xFE1F86A5, 0xD800FC43, 0x1DDC9E7E, 0x774967CF, 0x4AAE9C4E, 0xEEF08AB2,
+0x97A37297, 0xDF45D662, 0x86FA18EB, 0x559D9E64, 0x840D81A2, 0x74CFD549, 0xFDC7485B, 0x2ED70122,
+0x7E7A7E60, 0x0BD705FB, 0x9FB9805E, 0xF4856BCF, 0xEBC298C0, 0x690BD1A4, 0x78452015, 0x7B3C847E,
+0xDC852995, 0x016F0162, 0x642F8256, 0x27F2EA96, 0xF3EEEB8E, 0x190AA8B6, 0xF629F47D, 0x7D7621E9,
+0xF7C9D970, 0x2D8BBEA2, 0x6046799C, 0xA4F86BE1, 0x8EB0F089, 0x39945DBB, 0xF0E9D268, 0xC325C606,
+0x43265056, 0x59C6E1D6, 0x33AC5EAE, 0xB979022B, 0x2BC8348E, 0x2912A10E, 0xF4A5F5FD, 0x98342708,
+0x6B71CFE0, 0x8C43E7AE, 0x42109108, 0x74D1BECA, 0xE5ABABE3, 0x97180CE0, 0x5118B91C, 0xFE6CF329,
+0x1B0B95F4, 0xF159B23A, 0x29931C07, 0x7ABDC87A, 0xC0958E5A, 0xD9ECE028, 0x478861C6, 0xFC7788C0,
+0x00000070, 0x009E0101, 0x7F12511E, 0x8DFE54FB, 0x29B1F542, 0x20F46511, 0xA51DD714, 0x1CFCFC57,
+0xA38486D3, 0xC874BD86, 0xE92079E0, 0xC54FDC59, 0x92046460, 0x02139D5D, 0x2E8D4DFF, 0xE47031B2,
+0x853C44A3, 0xDA16F443, 0x03B0519B, 0xDEBE87BA, 0xDC1A94FD, 0x847918A5, 0xA4064AF7, 0x7716CCA3,
+0x95BDF2FE, 0xF3006F0D, 0x9C67433C, 0xC275F5A1, 0x081ED705, 0xF067DC3C, 0xCB45A07A, 0x55C1FA58,
+0xDF343E20, 0xDB3E3218, 0x6E9B3854, 0x48BA6C97, 0x0D1891F4, 0x07AADABF, 0xAEE7611E, 0x970E355F,
+0xF6036898, 0x4E209BF9, 0xA86CFC3A, 0xD5638CAE, 0xBBA840EE, 0xC665F020, 0x487D46D1, 0xB048D7E3,
+0x0A21320B, 0x1DD04EF0, 0xC5A0D725, 0x29A29444, 0xE8CBCDC6, 0x85EC1E81, 0x09C7B4C2, 0x180DB10D,
+0x8B3FC7C4, 0xD1E0FE31, 0x82EC6B8F, 0xB7D0AFBD, 0xDE96A746, 0x11704B91, 0xF25E0815, 0x5D4904A6,
+0x3954F507, 0x3146ED90, 0x249A2BF1, 0xBFD5B2FF, 0xCFE7F75A, 0x61F76DEE, 0xE374FD7D, 0xE88C6182,
+0xD84DF39D, 0x2DA3ECE2, 0x203CAC25, 0x94019E50, 0x67B20378, 0x83BF7099, 0x1D85B540, 0xA4DC2E79,
+0x79E80FEC, 0x2F201C77, 0x85709138, 0x1622C076, 0x92F9E577, 0x9C8DD5B1, 0x43A21C9C, 0x20A398E1,
+0x820E2EFD, 0x92D6F9E6, 0x5AB5F7C4, 0xC09150E3, 0x7F28DF36, 0x5E89604B, 0x63D0A2AE, 0x03C863D7,
+0x1AC9F1B9, 0x412FB90C, 0x4DEE9722, 0x307DA359, 0x372BE54C, 0x3BAEAB0D, 0xF0DA7971, 0x24C9832C,
+0x23DC45FF, 0x19DD4E4C, 0x3C6A4114, 0x3C92C2F9, 0x4A147E57, 0xA3146200, 0x3F38DAF9, 0x5BDB2B06,
+0xDD3B3DB6, 0xE9325945, 0x70099B9E, 0xAA17F77A, 0xD7B2286C, 0x1D7C800C, 0x49AEC155, 0x6C0634D8,
+0x904CABA1, 0xD75D2DD5, 0xA4CEC2FD, 0x57CC63DE, 0xAF6A3872, 0xF6D57778, 0x9AE11F50, 0x269817AF,
+0x554BC2F4, 0x6C40C4C6, 0x3030011E, 0x1AC34CC9, 0x2F48A4B4, 0x18979069, 0x9538F6AC, 0x459D69E1,
+0xC56D201A, 0xDDC3B48F, 0x72B35D85, 0x059117F5, 0xEFDA1308, 0x50D23F46, 0xA8489477, 0xFF8AB4C4,
+0xDFC3E55A, 0xD2E57EE0, 0x47BC75D6, 0xA0AB5173, 0xBDFB8D03, 0xCB72E0AC, 0xE4D208ED, 0xE547F1DF,
+0x03AB6D87, 0x29F6D2D3, 0x1F136C64, 0xDF4D77B0, 0xF25657ED, 0x414C522E, 0x1E38D0B6, 0xB3EEC815,
+0x8A1F7958, 0x5A1C927E, 0x116D34C7, 0xDFE9463C, 0x60126B79, 0x6248CBD2, 0x782C22F8, 0x2205230C,
+0x7DFB15AC, 0x9AB195F3, 0xF637E180, 0x30E9598C, 0xA7EAB563, 0x9DB5E51A, 0xED647553, 0x45A495D6,
+0x2E4AAF78, 0xB3103613, 0xF692DBE3, 0x97632589, 0x0BA0DA71, 0xE3BAF323, 0x011740DF, 0xCE59C82B,
+0xF294A3A4, 0x2516C4EE, 0xE548076D, 0x3B5FFE88, 0x397C9BEB, 0xF7F6D220, 0x921FD47E, 0x661928B2,
+0x3CBCBE0C, 0xC1D4AFD0, 0xD4526335, 0x57210B6E, 0x2A6B513E, 0x867988D2, 0xABFD6A54, 0x6000FC93,
+0xD2A5C962, 0x7BF16270, 0x36DF68CE, 0xB14C8FA8, 0xEE124495, 0xEFA0970B, 0x80D45DB1, 0x4FB1D8BF,
+0x21DCEB52, 0x98C042D0, 0x06A78DAB, 0x69D22312, 0xE005C0B0, 0x663FF324, 0xFA8299E2, 0x99A5CFD5,
+0x4F9DDD07, 0x9AF29938, 0x10E37B10, 0x8A87CE87, 0x6E3BAAAC, 0xE66E98F7, 0xBAFFEDCC, 0x77951161,
+0x7FC1AB13, 0xEC5B4548, 0x82F920EA, 0xFC26FDF2, 0x2D404D30, 0xA45E30BB, 0x39B567E9, 0x347530C4,
+0x534AE356, 0x0A89770E, 0x05C5EBC1, 0x2538942C, 0x5C932C74, 0x94984A85, 0xCEAF8763, 0x715FD26E,
+0x9E3A6CB6, 0x3C31BCD5, 0x129D70A2, 0x72B5BACA, 0x9B006CBF, 0x1E775931, 0xE0C3A90F, 0xF45F94B4,
+0x4B2FBFF3, 0xDBD9FDD4, 0xD36570BF, 0x1A6AEE8D, 0x3B29A63B, 0xBFD63086, 0x191F5618, 0x4DB95874,
+0xEC7F4B6F, 0x7D2AB3CF, 0xEF80A796, 0xC35AF611, 0x3ABE0F89, 0xFB7A174F, 0x2E2E9BF1, 0xB7BFDFFF,
+0x411EB325, 0x32048848, 0xDCDE7625, 0x76C3CDCA, 0xD63D5774, 0x027FC438, 0xDCDAF05C, 0x489FF752,
+0x80403663, 0x01000000, 0x1E009E01, 0xFB7F1253, 0x5CB17655, 0x37C4B509, 0xCB21DF06, 0x7E39DB38,
+0x87ED4736, 0x1FC26952, 0xB6D7EEB5, 0x767DD037, 0xFBD60E38, 0x7393B64E, 0xA1FF3D71, 0xFE908DB4,
+0x93CA98EA, 0x5FD32C60, 0x598F1F38, 0x9F473B81, 0xBFA58DB4, 0x3AE11DB6, 0xAEC183B6, 0xEA5F9F6A,
+0xAF276BF1, 0xC8635C46, 0x70A8376B, 0xDBBAD38C, 0x40B6187C, 0xADD741E6, 0x36E2702D, 0xF8546CE1,
+0x93435094, 0xA7850909, 0x39B6A265, 0x8D6C3D28, 0x3844F743, 0x0DD8969B, 0x82571674, 0x8D74C432,
+0x8FA9BBE0, 0xFEEAB099, 0x41E328AD, 0x570781B1, 0x470ED51B, 0x5DE9C7C2, 0x422CDBC5, 0x116D22B3,
+0x0DB544B0, 0x0A1AFFCA, 0x6FFD9D79, 0x5BCBE758, 0x9FF36C4F, 0x3FE8DCEA, 0x9A0A41C7, 0x98A45C64,
+0xC29D55F4, 0x762A0BCC, 0x3CD1301F, 0x06D75F4F, 0x48EB9992, 0x4B0383F7, 0x10462CC4, 0x41580622,
+0x6EEA4784, 0x030B860F, 0x761C274B, 0x9F5A0000, 0xC2D7C1F1, 0xCA354847, 0xC9CED96D, 0x6953B2F6,
+0xB9A0DE5C, 0x40FD9016, 0x1BB2EBE4, 0x40AD5D45, 0xAE5FA786, 0x9D2FCE2D, 0xAAC99703, 0x07868BCD,
+0xC1C16405, 0x400EE3DE, 0x95F71543, 0x55EE6971, 0x360933E7, 0xDBAA63D7, 0xE311111D, 0x90BE1304,
+0x3298A87D, 0xDD4498C4, 0x0D3DE175, 0xDAB1F765, 0xCECF2F34, 0x228EC6E0, 0xC0B91E4A, 0x39016EF4,
+0x322CEBA8, 0x4F7160CC, 0xFE036123, 0xC9526DC8, 0x52269F56, 0x2C9385DF, 0x056EAC8B, 0x3BDC046E,
+0x54AECC86, 0x1414650D, 0x1FA12192, 0x8C72D624, 0xE747588C, 0x82860CC9, 0x22F73843, 0xDDCBEBB8,
+0xF8025AB6, 0x1AB73D74, 0x4E09DBFE, 0x68E13E78, 0xE33078C8, 0x7A20FF08, 0x677E7062, 0xB831890D,
+0x68C36376, 0x1EF93389, 0x4EB6F58F, 0xDFB02282, 0xBA4EF59C, 0x5E4F5B13, 0x6AC92421, 0x0367DF20,
+0xB737E36D, 0x2FABD7A7, 0xEE30C0D4, 0x46D81E7B, 0x0AE9A70E, 0x56B12ED7, 0xE39228DE, 0xF5F2A246,
+0x2D4BCF18, 0xE904F0E5, 0x2B650FA0, 0x380D5F98, 0x95782C2F, 0x42C32985, 0x8DAB2D00, 0x4448EB1C,
+0x01D0C6D6, 0xDE921AC3, 0xD901A7C4, 0xB19C2D70, 0xD9249E7F, 0x24D0CF65, 0x3FCCA9EA, 0xE4F4038E,
+0x08D743E5, 0xAA6513B7, 0xFD3C7003, 0xB3E49584, 0xE0211781, 0x25307C1B, 0x0AEBB377, 0xD4F19E64,
+0xA942D4B6, 0x9BF79DB4, 0x83C78F0D, 0x19C21F7A, 0x63D1A9A8, 0x70CD62BB, 0x11A7EB83, 0x2C4CF4EA,
+0x73F09475, 0xEF8AC953, 0x61D0874F, 0x9D416E18, 0x2918848E, 0xAA17A583, 0x96B3D023, 0x9A848FD6,
+0xAEAEA3D3, 0x1B15C802, 0x3A05C4F0, 0x97639752, 0x1D680D52, 0x3B45BF94, 0x330993FE, 0x9FEEB931,
+0x8E0F43B1, 0x974F479E, 0xC07881CF, 0x2ACB93FC, 0x5CBB8BF4, 0x09A71D74, 0xCD64AEA2, 0xAA209E38,
+0x49B1F5E0, 0x4A04E2EC, 0x21329124, 0x76BBB534, 0x0E0E4367, 0x1CC1B680, 0x1D09FB5D, 0xA763CF47,
+0x117EEF01, 0x3A1054C6, 0xCA2EC1A0, 0x348C3B7B, 0x82DE894E, 0x21B259D2, 0x1B8A1AEB, 0x3E7207F3,
+0x50A82078, 0xF3B17502, 0xB2070B3E, 0x7D694B4C, 0x3183B46F, 0x54FCB418, 0x82F9C8AD, 0x86F0C3EE,
+0x391D3D00, 0x43680B1E, 0x59773814, 0xEE21D943, 0x93A7C5E2, 0x7262630A, 0x35E2E07D, 0xA335EEF4,
+0x842AAC3D, 0x1AD5EC27, 0xF9440862, 0xF4A3B00E, 0x33CBF764, 0xFA62286A, 0x16EFD7B2, 0xF0DB08D2,
+0x71F5F73E, 0xBE292670, 0x956997C4, 0x589FA675, 0x786CAFAE, 0x711EC216, 0x1E7CBE12, 0xE5E9CA7B,
+0x967B6991, 0xD8B6F70F, 0x2CF25F6C, 0x60BCB95E, 0x3B499009, 0x26511C95, 0xBF1C8423, 0x498F1D15,
+0x7FA9824C, 0xAEA04D83, 0x34EF2734, 0x162B2F20, 0xF4C63BAF, 0x40E4735A, 0x8BB1F1FA, 0xA06D2605,
+0xC6556E84, 0x2176621F, 0x5D4054F5, 0xA7A51C07, 0xA435F982, 0x01B4E5B7, 0x0E50D3FB, 0xB44AEAD6,
+0x8025BF4C, 0x630CA7A9, 0x44C8EDF0, 0xA9516CB0, 0x7E350F3E, 0x09BB2D4E, 0xBF3EA52B, 0x10D0BCD5,
+0x9185ED8C, 0x4FF45FD9, 0x86C20266, 0xD125AF83, 0x2DABF5A3, 0x06A0349F, 0x89AA1CCF, 0x81C76385,
+0x8E165C88, 0x0182EEB6, 0x044A4066, 0xFF14FD26, 0x1E312100, 0x1442CC32, 0x76FFADEC, 0x42542280,
+0x2CF9EF24, 0x6CD804C5, 0xBA19C30A, 0x4A118C9B, 0x35BF10F8, 0xED2DCDF2, 0x3A62164C, 0x0739645C,
+0xC00340F0, 0x82034551, 0x5ED63A45, 0x6CEDA539, 0x221D6A24, 0x1EE250DA, 0xE6A8A81A, 0x7A22E5F2,
+0x0EB6D7B0, 0xA6BA3CEF, 0x1A74A410, 0xEBBA0970, 0x65008949, 0xDD93DE4C, 0x57000001, 0x01B40244,
+0x904591B4, 0x8C63EC5B, 0xDECE2B5F, 0xF62F2030, 0x4EB5AB04, 0x6EBB5F42, 0x52011B98, 0x941ED0B7,
+0xA2317961, 0x3C35FEE7, 0xCC10DBC0, 0x64260C63, 0x8395F9D3, 0x9816CEDD, 0x74D4DDD5, 0x00000068,
+0x80882101, 0xE2BF9607, 0x7A00E431, 0xF8C95FCA, 0xD51D9BD8, 0x45D66C39, 0x070EA82F, 0x1FA818A5,
+0x7B1D4D78, 0x8D76B819, 0x81CC1BA6, 0x1905B26C, 0x392BE59B, 0xC16AE53D, 0x8A37B818, 0xE481E322,
+0xA41B669C, 0x56A50892, 0x9E61FCE7, 0x4DC38B96, 0xBE0D2AC7, 0x4E165378, 0x88C0EB13, 0x1E345F86,
+0x05496E53, 0xA9F57AF0, 0xD47F10A7, 0xFFD75C27, 0x0F9CFDFF, 0xE691D7BE, 0xA11B7F1E, 0x9C503210,
+0xEB07F66E, 0xFA82A285, 0x3576DC0B, 0x92A2EF3C, 0xD684ECF3, 0x3372C3BC, 0xB4A325BA, 0xC1A1FE2F,
+0x36834681, 0xE3A77B19, 0x53F236D2, 0xC9E70DC1, 0xDA0741CA, 0x6BDA7714, 0x5D6764CA, 0xAB623160,
+0xEB52D47F, 0x474D91E5, 0xA273D468, 0x8441B6E7, 0x253E16B1, 0x3DE78B1F, 0xD6D5A083, 0xC0E8DBAA,
+0x55B5516C, 0x5F9A7EE4, 0x4DC618F6, 0x4694DD2A, 0xBBFD4FEC, 0x0692C878, 0x7BB4FF6F, 0xD267AB7D,
+0x7512469B, 0x2C8BE2DD, 0xF6E1C9EC, 0xD152CFCE, 0x3E9343E6, 0xE0A35317, 0x7BE6D648, 0xC0C4639E,
+0x7B2CD1E7, 0x5D6B4529, 0x9677A475, 0x7369F1AB, 0x4EDFE9A0, 0x49B03B90, 0x4D46807E, 0x7A7FC4B6,
+0x041015F4, 0xD0695227, 0xA3E49717, 0xAC0B6E1F, 0x83E94C47, 0x189E5E8D, 0xEE6058DC, 0xBA6D858A,
+0xF31EF3FE, 0xC8D94B72, 0x7816266D, 0xE42155A4, 0xD948D5E3, 0xD7B59797, 0x9EC894CE, 0x93038B99,
+0x402D178D, 0x9E69FC4E, 0x24278DB6, 0x5B462C2B, 0x32487E49, 0xBD8E2120, 0xF62951FF, 0x06BFDC4D,
+0x201C0233, 0x14D67B8E, 0x314B88FF, 0xB4830FB3, 0x548287EA, 0x337A4E74, 0x1F9C6F18, 0x273B9164,
+0x1B6217DE, 0x41091031, 0xA1EAD971, 0x81559153, 0x495A13CB, 0x40FA27F7, 0xCB83A923, 0xC67D4348,
+0xCC9C1DA5, 0x86DFFD8C, 0x961B6E2B, 0xAC63237D, 0x74CFA367, 0xB183FDBA, 0x84C202F6, 0x398E3D22,
+0xBC270AD5, 0x6E500581, 0x32D33440, 0x0FFE74A0, 0x2C927A59, 0x624A2EDD, 0x7F4458FD, 0x9C465515,
+0x93C9EEE3, 0x13AE08F9, 0xFB1BA946, 0x193C118F, 0xE11D67BF, 0x94FA9A2D, 0x6C1DF3E0, 0xC60DBE8F,
+0x653D2814, 0xF58B9893, 0xDDE5685A, 0xDB0550FD, 0xDB9C5319, 0xEB5A9FA5, 0x4F6A4C3C, 0x64201D1B,
+0x9C168E2F, 0xFFFFC3A5, 0x130F0B7B, 0x2B0C4860, 0x9FB84E60, 0x61161E14, 0xC26F0557, 0x39014CBC,
+0x798891AD, 0xF23A8C71, 0x55CF8A48, 0xA662B22A, 0x32A4B216, 0x4CE1AEA6, 0x2C555805, 0x1BF836AE,
+0x51A42302, 0xED057E30, 0x859E7E89, 0x79F4E87B, 0x2F5232B9, 0xAD04A223, 0x70C2BB23, 0x1EB5712F,
+0xA8D7077A, 0x0BD5B5C5, 0x1D5EE615, 0x0F4070FD, 0x29F0451C, 0x0FE0436D, 0x8D863387, 0x536B3B21,
+0x71ACE1F6, 0x5BE54CAE, 0xA516D798, 0x35766CC5, 0xA165FCC8, 0x43EAFFEF, 0x5D467ADC, 0x39A50DC1,
+0x7B1B5D96, 0xB7BCBF41, 0x01C4E6B2, 0x5F7001AB, 0x2CD8837B, 0x256B7E19, 0x3FD25336, 0x3886CAE3,
+0xA05666BF, 0x22F8AB4E, 0xB298E116, 0x78378D67, 0xC4030ECE, 0xB033D800, 0x949370C5, 0xB50DD763,
+0x40F2810C, 0xC517DC04, 0x62DC16F9, 0xA00DB045, 0x03797D9F, 0xB7F27A1F, 0x841BC7E4, 0x8D802B93,
+0x587CFB66, 0xF77E7F49, 0x7CC85245, 0xE99E836E, 0x92E6EF87, 0xE4726764, 0xC54C9D1C, 0x09BD2964,
+0x2C1315DD, 0xBD6886F6, 0xD525C8D7, 0x83DEF59E, 0x175FA651, 0x357EAF8B, 0x0E8A14F0, 0x8AE8A8E8,
+0x5925E97D, 0x2F7F33FE, 0x8A9634DE, 0xF0DD46EE, 0x644FAB72, 0xADD3D7CF, 0x4FB2F906, 0xEAC4A081,
+0xD8D1FD02, 0x436B224F, 0x44D74724, 0xAD59B899, 0xC4B9EE57, 0x39B5218B, 0x97335200, 0x98CCE611,
+0x30EF2CB9, 0xAC1C41B4, 0x52866D8B, 0x49152F00, 0xE037E65F, 0x518D3353, 0x497A92AB, 0xF53B5700,
+0x0C4D88EE, 0xBCD71658, 0xEBFDCCC1, 0xC563AFEB, 0x4BC8DDAA, 0x0522813B, 0xD4D8D301, 0x267D3AE9,
+0x7FA7B097, 0x2693BD5B, 0x6EADEC80, 0xE8A22A2D, 0xC6497927, 0xEC437F00, 0x16B3361D, 0x83420B74,
+0xCFB6BEFC, 0xCA0B3766, 0xB5854F24, 0xF2E4E8EF, 0x21276C8A, 0x2D8C2F92, 0x170132F6, 0xFD59A4CA,
+0x3D7D5908, 0x80033666, 0x4C182E0D, 0x0D53A9B8, 0x7AAE0404, 0x0739DE5D, 0x01465E09, 0x70ED8A88,
+0xC0FA3501, 0xF7281057, 0x3A1E3D4D, 0xB1EAF600, 0xA1CD8B87, 0xC0C91E72, 0xD073E165, 0x1A865452,
+0x6257C250, 0xFD445753, 0x61E9D7AB, 0x7C562BD8, 0x6CB1C924, 0x1FB79D0A, 0x9B093F0F, 0x66D86BE3,
+0xC3682499, 0x8D2E832B, 0x4E339D23, 0x76B51B9F, 0x8579C20F, 0x84CFFB97, 0x97084236, 0x1AA12384,
+0x1D9DAEE0, 0x46B2E8D2, 0x5A3CF0AA, 0x99F3BCA5, 0x89D183E4, 0xDFC21ED1, 0x4AF0AD75, 0x81736B57,
+0x78205E4D, 0x6E2053B2, 0x7EE38E98, 0xC2F99C1B, 0x720BAFD9, 0x33DA63DA, 0x587EC2EC, 0xECABC9D9,
+0x884DCA85, 0xE93925AE, 0x4CBE3F5A, 0xB1C37F10, 0x265154AE, 0x130F9AA7, 0x91E5875D, 0x91749D35,
+0x99EB879A, 0x81D70E6D, 0x479BDDA0, 0x1CDE30FA, 0x8AF1F356, 0x37B6A7E3, 0xE218BA26, 0x97131E42,
+0xD3306405, 0x3870DB94, 0x4BB9EFEF, 0x0C8737F3, 0x27DB0BD4, 0x83151904, 0x630A3530, 0xAE91EF4B,
+0x0157EDA8, 0x250337D4, 0xF9639511, 0x267E2423, 0x24521FF5, 0x80FF2DBD, 0xFD733A0A, 0x7BAE57A7,
+0xA640B112, 0x860636CD, 0x78AB4F99, 0x27353849, 0xBEE96496, 0xE9673D1B, 0xEF90AEFC, 0x6EFB7617,
+0x1B5D4371, 0x2AECA37C, 0x710F249C, 0xA2B038EA, 0xB0761183, 0x7FB5FE8C, 0xA882127E, 0x6E38EE6D,
+0x7A2F1ACF, 0xC2A48B0B, 0x014185FC, 0x196CCAB8, 0x74E9BEA2, 0x6C03BF8A, 0x0D96EFE4, 0x88BC6CE8,
+0xE2AD5647, 0xB24FB750, 0x083520BB, 0x175A3F4F, 0xFACFC642, 0x88E7931C, 0x08830EF4, 0x9D2B4C4A,
+0x3FDEF4E0, 0x6CC62911, 0x01C6A4D3, 0xBDEFB382, 0x53EA166F, 0x9EF6F69F, 0xC719062B, 0xB28D81F6,
+0x21018DA6, 0xAB2E5632, 0x854B24CC, 0x781576E9, 0xD711B197, 0xF919048A, 0xF8F7B013, 0xF0953312,
+0xD5A19148, 0x52EA28F3, 0xEF4BDEF4, 0x56068CFF, 0x42A22297, 0x62160D43, 0x79B4DB37, 0x80A3B858,
+0x767BBA5A, 0x2E6E63E4, 0xE4422A00, 0xD048C2A0, 0x17D0098E, 0x264D62BE, 0x59B1F84C, 0xF7169381,
+0x050A68A5, 0x60342043, 0x9DE19DF6, 0xD4EB3A31, 0x995FF257, 0x00D2C1F1, 0x514CB66A, 0x3021F304,
+0x0C4CB6CF, 0x9A78ED33, 0xDA729AB5, 0xC2B6C3CC, 0x78EE5A44, 0x132BD263, 0xC267D7A6, 0xE7101B22,
+0x8D4D7FD8, 0x3A7ACA5B, 0xBE3705F9, 0xB5C5ACC5, 0xBF7CFFC7, 0x942BD79E, 0x8E47BF5D, 0xF7A72F5D,
+0xA493E700, 0xDE185A9B, 0x2AF440EB, 0x42EEDEE1, 0xA65B1CFF, 0x3D709A0A, 0x7D2D6830, 0x5A5E517F,
+0x2A70806C, 0xC551DB55, 0x6C6B79AD, 0x92036487, 0x627C0D17, 0x207001C8, 0x31107E18, 0x7440148B,
+0x5F917528, 0x20EE8F12, 0x5C680D43, 0x9BBB2F0E, 0xE11972F1, 0x9A4BF137, 0x86B2D28C, 0x864853CE,
+0x81AA5575, 0xD5AE7F3C, 0xC6CB9077, 0x6BD4E0B6, 0x29457BCC, 0x782007E7, 0x7341E0D6, 0x6C7C7043,
+0x859ED076, 0xC387C409, 0xFA510034, 0x7B9E13C4, 0xC06D8C8F, 0xD452967D, 0x400E68B5, 0xA82FA250,
+0xA8CF5083, 0x102540DC, 0x4311236D, 0x1FE1D402, 0x8F7C3BBF, 0xCB082F72, 0xF6B59339, 0x9F98061B,
+0x516A7C89, 0x57901B94, 0xE3EC7481, 0x44D9D536, 0x408B9613, 0x508614D4, 0x91A2D346, 0x6462818C,
+0x7A1C0353, 0xA3D77069, 0x438A7CF5, 0xE09B8B3A, 0x8EFD007A, 0x9227F15F, 0x5228E922, 0xAC8F19A9,
+0xAD01D107, 0xDA4EE12E, 0x1D08AD74, 0x5804FA8A, 0x5E04C9BA, 0x970EBD49, 0x3A98107E, 0xCC756B2F,
+0x7FEE8204, 0x5C7844AF, 0x78CE6780, 0x9A9A05C3, 0xDA42E3AF, 0xDBD1694A, 0x54E04A44, 0xF278017A,
+0x881DEF48, 0xE3E62E87, 0x387649CA, 0x594751C8, 0xA68B242D, 0x04E8144B, 0x4F8F4C0D, 0x3A19E2AC,
+0x1FADF9D3, 0xD72D9D6E, 0x0A6FC58F, 0x78973F45, 0xD63EE322, 0x9CC947F3, 0xBC4FA615, 0x5A3269F7,
+0x7D7F6B33, 0x7AD418ED, 0xB000E99E, 0x469BD4AC, 0xDCC09DB0, 0x481E0D36, 0x70D80076, 0x0995806E,
+0x1BC53910, 0xDEBC08BF, 0x303501C5, 0xD01F256D, 0x445EB8A8, 0x3A36E32F, 0x404C707F, 0xB508A0CC,
+0x1E588B7B, 0x71BA13F8, 0xC4527B12, 0x90E896D0, 0xDA34043B, 0xB6E66504, 0x40DC26DC, 0x98BBAD15,
+0x296E6FE1, 0x8FAA4AF9, 0xC0354275, 0xA13D530C, 0xF8154528, 0xBC751EB0, 0x2C9689F5, 0x849E023E,
+0x29F502AF, 0xF4AAB8CE, 0x17DFFACD, 0xB8D081B7, 0x7605578B, 0x29B63F30, 0x7EAA2061, 0x043BB9C3,
+0xD807A3D5, 0x77243A52, 0x24E7452A, 0x067F7454, 0x3FB1A066, 0x2CE9254F, 0x07758218, 0x148A03DD,
+0x3E3D37C9, 0x05407DFD, 0x1DE9C4C9, 0xF737AE3F, 0x412CB47C, 0x5690BDDC, 0x363A84F4, 0x6C5E63C2,
+0x2873C9F8, 0x700EB385, 0x43A21A9C, 0xF2396B1C, 0xB1F86DD2, 0x04ECE758, 0xCE08F40A, 0xBD96927F,
+0x016AA5DA, 0x146AFE43, 0xA8B6E49E, 0x697FACCD, 0xCA153CD9, 0xB9EA7F93, 0x821A7A50, 0x9F5E3E0C,
+0x980D2B65, 0xEDAE8F68, 0x80D41B2E, 0xC6836EDB, 0x2CCE8E6C, 0x9F59F4DD, 0x66A1AB8E, 0x28F34809,
+0xBC7DCE00, 0x6967F116, 0x2F412C55, 0xC99B1496, 0xE001A312, 0x777A18E4, 0x9BFA0083, 0xBE3ACA27,
+0xF321E967, 0x95F6F854, 0xCD00C11E, 0x7E7BDBD9, 0x820F01A6, 0xC831A988, 0x2B112D8A, 0x695CA04B,
+0x00F70628, 0xD1E662C5, 0x5FC2E653, 0x50B32FAD, 0x2FD2069A, 0x09B7AF3A, 0xD8E1FA98, 0x3BD18FB2,
+0x7101729D, 0xD7E95F48, 0x9DF9CB5D, 0x3E764B81, 0x7107A5C0, 0x101770B4, 0x29636A34, 0x909F35D7,
+0xCB7AFF9B, 0x8C77BDDA, 0x664A6A26, 0x1D0482F3, 0x3CB80F17, 0x6A9BF8CC, 0x3D622EB4, 0xE69AB682,
+0x2CE6575E, 0x58DA5A86, 0x5660B3F6, 0x2B6FEC34, 0xEB0361DA, 0x844544B0, 0xA2577F53, 0xDFDD09F4,
+0x85DF5B4C, 0x4825F8CB, 0x19215A8C, 0x00C4E681, 0xD8800794, 0xD3F57565, 0x6E74C0FB, 0x6DDC4363,
+0x632D80A6, 0x82DA8FE0, 0x794EA68F, 0x8B61C2C5, 0x04B77BC3, 0xCF78E765, 0xEF15C990, 0xD1FD08BB,
+0xD32D0085, 0x2CA097A6, 0xDFB8F89A, 0xC0172F0D, 0x0468356E, 0x07BAD6A1, 0x2F7B2164, 0x74C1E8F2,
+0x1B57C365, 0x66100B43, 0x1BE84FF2, 0x35D15110, 0xCFF5762E, 0x80FFFE0A, 0xFE307857, 0x533CDCA3,
+0x9103F8FF, 0x43B039F4, 0x1D115C26, 0x89BADAC9, 0x70CA31E8, 0x68F12265, 0xB4829D50, 0xD3AD0C78,
+0x5AE7C25F, 0xFA74AB01, 0xC18FF558, 0xFCCB42C5, 0x1E05EC1C, 0x73F4A2D0, 0xE6306CCE, 0x61E5C951,
+0x079BBCBE, 0x4C322BED, 0x4BB2BC95, 0x20A7531F, 0x633313E1, 0x44C6B67A, 0x0E111EC8, 0xFF7E3E2B,
+0x0AC5AAD9, 0xE1680405, 0xB9CFAFF4, 0xA780E3E9, 0x40C44A5A, 0x54C16A8A, 0xA2185D25, 0x11B3B7BC,
+0xF51FAFFD, 0xB722B6D3, 0xD39C2080, 0xB9A708AB, 0x94210460, 0xBFCCBD46, 0x04C2B2F4, 0xF89D1683,
+0x256D275E, 0xF8A2B2FE, 0xA6D8DDAE, 0x689FF0B9, 0x30EBE7B3, 0x48D60DED, 0xAD972CCC, 0x8D9A80DA,
+0x3A4D36F1, 0x35C28792, 0x1F87DD76, 0x7D510658, 0xE4161F4C, 0x159A27CD, 0x99417EA4, 0x3E7791E7,
+0x15C6E621, 0x540D6994, 0x37716EBD, 0xD044190D, 0xBD974B42, 0xCC4326DB, 0xA6FD9A58, 0x47E98063,
+0x9069DE8B, 0x8ECF1EA5, 0xA494EFBC, 0xD68DF941, 0x8198C138, 0x258FD43E, 0x769DB623, 0xB6217C91,
+0x48AF1DC1, 0x0F2E6A6C, 0x4FD16917, 0xCDB2B108, 0xBA7D1F9D, 0x37C9E508, 0x3FAEC246, 0xAFDF80F9,
+0x1FB45F66, 0x3FB50DD0, 0x52C2537E, 0xD1D9F427, 0x7A43DD11, 0xA2D4FEA2, 0x302BDCBF, 0x2C567D8D,
+0x56BAA62C, 0xB0639DB4, 0x9B25F874, 0x52CB7DA0, 0x6F2AB527, 0x4F010A2D, 0x8C3D44E1, 0x1F36F03A,
+0x86692CB5, 0x18D111B8, 0x91DFD548, 0x5C7BD347, 0xBCDBF541, 0x36452A20, 0xC956AB4E, 0x84D2C2B2,
+0xCA6FED6A, 0x46122469, 0xA59ACAAD, 0x8AA836FE, 0x434F0F20, 0xD8607CAE, 0xD664B85E, 0x0E64B3DC,
+0xC18731B6, 0xB4293CD1, 0xDAB9CEDC, 0xE02A73B1, 0x0621C599, 0x96C821D9, 0x60339F3D, 0x4CDF4771,
+0x9FBF63A9, 0x180D69A5, 0x0E1ABDE9, 0xD2DAC884, 0xBA8689D8, 0x7F70FF77, 0xB0722362, 0x6DC857C2,
+0xD95050AF, 0xC45D7E89, 0x5CFAD118, 0xFD1F4BAA, 0x0B476359, 0xC2BB966C, 0xEFEAD732, 0x2A8DC393,
+0xA934EF6F, 0x7D8D4AC1, 0xD95C0297, 0x4AA4C7D9, 0x66A2B322, 0x2C2529D0, 0xD1E40402, 0xD56EBFE6,
+0xDD70CB2E, 0x343FC66D, 0xB3676240, 0x49B89805, 0x60774E54, 0x17ED89DE, 0x9FB05333, 0x2D3DF159,
+0x6E39E5D5, 0xBFEC9EA5, 0x4F8B76BF, 0x8DCA540D, 0x0EC49068, 0x8BFB9182, 0x3D3E69D2, 0xF086DA01,
+0x25C64F40, 0xC6FEEC9E, 0xAA164DE1, 0x25ECFC68, 0xC73FACDF, 0xFE6C7EAD, 0x7E8A13E9, 0xEAA411CB,
+0x2071F794, 0xA25BCC0B, 0x2541AD29, 0xD11CD63B, 0xB8898A31, 0x9B31D073, 0xE5E9E26B, 0x12F7108A,
+0x96DC7B42, 0x2164B96C, 0x937E582B, 0xB434C109, 0x1C93ED74, 0xFED41D3C, 0x48E4AF48, 0xADAD260E,
+0x6A711CDB, 0x4A812075, 0x944E7B4E, 0x543CE63F, 0x9CFD3A6E, 0x1BD40755, 0xAA60ADEE, 0x1B525F01,
+0x43260199, 0x11AE75A4, 0x3661DD7C, 0xC8CB6B13, 0xFCB128A9, 0xB52159F2, 0x2BD436D0, 0x01FC23EA,
+0x1BEF90CF, 0x260B9325, 0x8742C35B, 0xD9E4BFD5, 0x1A57F58A, 0x6FAEA24A, 0xB5104363, 0x2378B6B7,
+0xC8DFBE8C, 0x4991C3BA, 0x09E047C1, 0x8071FAED, 0x97769158, 0x287F3750, 0xE4C46230, 0xECFA8874,
+0x05243A74, 0x9053251B, 0x912B0407, 0x3201FB9F, 0x1C99D16B, 0x58DEA41C, 0x19950446, 0x85B0885F,
+0xC6BFF7A6, 0x179E94F2, 0x2FC94DBD, 0x734C245E, 0x2F54A3A5, 0x873D82A3, 0x2230762B, 0x3B6B2753,
+0xA1634E5E, 0xBFA968E2, 0xC89B4532, 0xB2B16340, 0xA931ED13, 0xB5C85EF7, 0x42F79A1F, 0xF0DFD9DC,
+0x8BBEA13E, 0xFF86BBD2, 0x2D65D822, 0x52843730, 0x5F4ADA4E, 0x230153F3, 0x19D1ACE1, 0x5AED6D8A,
+0x48D82849, 0x5F501654, 0x5884339C, 0x8129FC89, 0x1BFBDA99, 0x7B87B22F, 0x6A34E9EB, 0xE5E1CDA4,
+0x5C51AF6C, 0x4499A5E2, 0x78573AD0, 0xE18DB540, 0x39380AC3, 0x915E0CD8, 0xDDE98D3F, 0xE4A71E82,
+0x4570D30C, 0xD4CE6FB2, 0x7ECCD834, 0xDA99B003, 0xDE25459B, 0xBACAFCAE, 0xB4139064, 0x88C4F1BB,
+0xB25CECF3, 0xBE02BA46, 0x65FCAF02, 0xCA0C52C4, 0x5534A784, 0x0547EFD3, 0x58BF9887, 0xA67CA4B1,
+0x8E8DC180, 0xE873917F, 0xAEC69D0A, 0x05E4C78D, 0xF73788E8, 0xD0815184, 0xBAE95CCC, 0xCD8336F8,
+0x879E32B7, 0xD7750713, 0xF687E39D, 0xF33FCDB0, 0x11C964E8, 0x838D096A, 0x7E13FE01, 0x0EDA4096,
+0x75F0F96D, 0xE23E13C9, 0x50183EB2, 0x35E098A8, 0x9D702EE8, 0xF50D720D, 0x3C8C1111, 0x3B31701D,
+0x9D377632, 0xE50E3E60, 0xE859C293, 0x1CB2D4A1, 0x2BCB1F12, 0x30546370, 0x69798B41, 0x3CE5F50F,
+0xC386506B, 0xB2123F04, 0xA13D5A9A, 0x62DFE15B, 0x13B55D5C, 0xC56466AB, 0xEE16E89E, 0xFCDEC885,
+0x0DD405FE, 0xEFE916FD, 0x6BC3CFA4, 0x49AFACD7, 0x7943A0D2, 0xE2D3304A, 0xE93FF0A0, 0xC3071F69,
+0xB70D4133, 0x4916A4AA, 0x4790BAF5, 0x342B5BF6, 0xEB548DBD, 0xFE5698A6, 0x03E103C8, 0x23EA55D5,
+0xF3376CF6, 0x234EEE38, 0xB9ED3F8D, 0x1BFEC6B4, 0x07E9D282, 0xA1669BFB, 0x6573FCA7, 0xAF8A4E95,
+0x3E192602, 0x7D9954DE, 0xDE7C1725, 0x976082A4, 0x35BE2ED8, 0x311883BA, 0xF59EA1C1, 0x1D4FA978,
+0x25676B48, 0xD1269CF2, 0x5FBD5F84, 0xE4EE9696, 0xF6B44855, 0x246CFFFA, 0x3017EFD7, 0x6DEA124D,
+0x7B76AABD, 0xD223155C, 0xC47C6069, 0xE444980E, 0x65A15AC0, 0x24DB4720, 0xF6EB1ACB, 0xCFEDCAFB,
+0x70D512A0, 0x08014C70, 0x0F611A65, 0x923BA614, 0x3034589D, 0xA50FE4B0, 0x922F3103, 0x706AE023,
+0x62FA74E6, 0x170E51D3, 0x646F35C3, 0xA7C88CEC, 0xBAC43878, 0x91FBB05C, 0x48913273, 0x94F6249E,
+0xDBC0B4AD, 0xE01835E3, 0x6A741F11, 0xF268FA92, 0x23B1ED4E, 0x113C37D4, 0x71FFE761, 0x2ED48449,
+0xB5284614, 0xB202847A, 0xBCBC5A48, 0xD558890B, 0x6E5E86E4, 0xE6812AF9, 0x923FFB8D, 0x04A55826,
+0xF4458891, 0xF091C1C2, 0x43F0E850, 0xF54EC3ED, 0xDC1F7ABA, 0x329D3C34, 0x50219C30, 0x12E72E5B,
+0x8D1B5B22, 0x8F7C1477, 0x8752A732, 0x726C06C0, 0x198F7CBC, 0x0809C0D3, 0x3ECFFD7F, 0x83225264,
+0x4D3CBC75, 0xA2932715, 0x09AF2596, 0x13AE57F0, 0xB65272B8, 0x26CEE540, 0xA1DA1085, 0x5CBD1E65,
+0x7EA13C0E, 0x81D6022F, 0x40EB155F, 0x906C6C91, 0xA71B5B26, 0x7C740D4A, 0xB41A0FC9, 0xE3974EC5,
+0xAC737467, 0xCBEE28FC, 0xE436E84B, 0x29160172, 0xA1141A42, 0x5BE32E9D, 0xF365A3B8, 0x24CB847D,
+0x702A5FF7, 0x3BCCFF26, 0x9419896A, 0x9BE84833, 0x8EF3AA37, 0xEFDAAA50, 0x65E8B827, 0x8CA127A5,
+0x119FD85E, 0x9B691D90, 0x6730F19F, 0x4569690A, 0x33685331, 0x098757CF, 0x4F49C7E8, 0x84265C86,
+0xBAC6FF31, 0xECDF52FE, 0x63A8CEBE, 0x4DB14308, 0x982D47CA, 0xA3C8BA57, 0xB5A87702, 0x708CC7CF,
+0x221EB156, 0x4A9BE4BC, 0x050AE9EA, 0x9B5EDD1D, 0x84326DDF, 0x1A5B0E8A, 0xBF0B5050, 0xA41EE6F8,
+0xB4DB890B, 0x4446F093, 0xB3797F3A, 0xEE5E0A8B, 0xA9B211EB, 0x9E01BCFF, 0xDEBB7244, 0xD49B9C17,
+0x0D0F9F97, 0x5B69E2E3, 0xF83537A4, 0xE3F8D357, 0xA4BE2221, 0xD01A7CF0, 0x6FC7362C, 0x2CCC9358,
+0xB8FCCF8D, 0xBC12D7C0, 0xBE734C59, 0xA428780D, 0xCEBFA0A9, 0x912A8F0D, 0x89A5CFCF, 0x45AB1FBD,
+0x69C7383E, 0x28DA35B5, 0x8DB04AA3, 0xA674C6F4, 0xF8535FE0, 0x7F4FE300, 0x7B0864F0, 0x11C32AB4,
+0x8E457D31, 0x37BA9DBF, 0x76134C87, 0x4E256C53, 0xA56E4D95, 0x5C9720A8, 0x26113EED, 0xCFB1ADE4,
+0xD813B3FE, 0x8C4F452B, 0x34FFC019, 0x63B5AFC8, 0x9AA59E56, 0x4FD0834E, 0xF7447361, 0xAD8227B7,
+0xA4344A6B, 0xB90DC2F0, 0x624B6C75, 0x29EDDF94, 0x4E7C5198, 0x379D7DFB, 0x28270D50, 0xA0F1E7A0,
+0xE79B544E, 0x219AF647, 0x96DC8417, 0x8AD50B7B, 0x4F05FF2F, 0x59DE6B3D, 0xA8628DBF, 0x42188F23,
+0x717AB247, 0x89C91161, 0xC94DDCD2, 0xAF600860, 0x6F7DE2B9, 0x80C9A668, 0xF8B38043, 0xFD6C8A96,
+0x79399314, 0x2C3E6E99, 0x179C90FE, 0xF344E0A0, 0x12431ED5, 0x9F41EA9F, 0x6AD68F48, 0x02ED6809,
+0xD474094C, 0x684A5116, 0x24A960B0, 0xA9BB31AB, 0xCCE67507, 0xBA3449AC, 0xFF682995, 0xE864622B,
+0x9886AB26, 0x681E2DB4, 0x99BC2AAC, 0x513A26CE, 0x6D60A31C, 0x4064FB62, 0xDC4C683E, 0x733FF504,
+0xF6CBBD5B, 0x0920C822, 0xD45649BF, 0x56AE7215, 0x42235F72, 0x34ACF125, 0x60E8B368, 0xFA7C5DDD,
+0xAFB5F77B, 0x208437E1, 0x05F4B503, 0x57B21A38, 0x2828252A, 0xB390F503, 0x750C4A72, 0xA26E3E60,
+0xD83B2AD7, 0x471D0571, 0x4C126FCB, 0x52E0B54B, 0x0BBF32FC, 0x2D05511F, 0x967CD091, 0x923B7D61,
+0x7FAFB440, 0x6A4EDE4D, 0xFA612B6A, 0xA1E241AE, 0xF558E837, 0x6E02AFCB, 0x8BEFF0FE, 0x56A6C664,
+0xF1617473, 0xB7FA3528, 0x14F96402, 0x1EFE2EC7, 0x2F6974AA, 0x109C5445, 0x6CC88679, 0x3162C395,
+0x06849968, 0x24FCAFA9, 0x3F0EC785, 0x6E7FE2CD, 0xAED9311F, 0x4A27B37D, 0x712DDEC0, 0xAB4DB1DA,
+0xD6D3A25A, 0x1F7C8BD1, 0xC36C1397, 0x09CD0D3F, 0xCFF02339, 0x94303001, 0xCE64E8B4, 0xD8F12F44,
+0x5CA8896E, 0xAB99B9D0, 0x2D7A0FD4, 0xD99DB3D0, 0xAA8BCFD4, 0x0FFC1C87, 0xBFEB753A, 0x20120E4F,
+0xFBD2DC1E, 0xF4C0D177, 0x5190AEC0, 0xE1323BFF, 0x04971349, 0x3318E3F2, 0xA7496959, 0x8700D1E4,
+0x41AB42AD, 0x537C98F5, 0x7D23597C, 0x8E1AB888, 0x29C4E7B3, 0xE0B9AF2D, 0xD5190F7C, 0x53C67B5F,
+0x2B86C4CA, 0x798A78B2, 0xC51E46FB, 0x5468D851, 0x685DDDEE, 0xE09158AF, 0xFD0B51DB, 0xC1ECB32F,
+0x1720C089, 0x7E0EE58D, 0x13BB11C0, 0x8F591293, 0x002B6116, 0x3A82A327, 0x14C99FC1, 0x7DF0BEC3,
+0x01466C05, 0x922268A8, 0xF1B80645, 0xE7EFB3FE, 0x4840E06E, 0x9DF0E293, 0x8971DECC, 0x1F71CF42,
+0xBD13DF58, 0xF6EB5BC5, 0x03A3197B, 0x9076A454, 0x997C860A, 0xAA159001, 0x2A90C1CF, 0xB22A87F3,
+0x56F674D9, 0xAF86C615, 0xE34D4183, 0x678BEBC0, 0x77B93F9A, 0x706A69AA, 0x79C16152, 0x7370707C,
+0xEBCEE3F9, 0x9B689F92, 0xBA55E6BA, 0x4C62C086, 0x3898B290, 0x7003A5C6, 0x7F4BE800, 0x16BCA89B,
+0xBF0A6BC2, 0xC33D8F1B, 0xFCB7F39A, 0xD4558E12, 0xF3DA1DD4, 0x1DBAB8C4, 0x42372C8B, 0xBE8C4504,
+0xA9B5DC60, 0xAC5BE9B1, 0x481AF4EF, 0xC73A8817, 0x1519356E, 0xC603B925, 0x0AB02289, 0x71AC3041,
+0x8B611126, 0x5078FE40, 0x6776FBE1, 0x6D6CE0C1, 0x79C7EA0B, 0x66736DF0, 0x09DE23B4, 0x8A39B302,
+0xE69085B6, 0x835A7BA7, 0x332073D7, 0x5BE07F6E, 0xB2540041, 0xACC681EC, 0x085F5D2C, 0x5506CE8C,
+0x9A11D383, 0xE1476DF4, 0x0835D030, 0xDD2DCEDC, 0xAF0D132E, 0xA2B36133, 0xC601A968, 0xFC346C3B,
+0xB999BB0F, 0x5F477D40, 0xBE45863F, 0x8A76F1CF, 0x90D18330, 0x2D2A42DA, 0xB98B6E52, 0x2A97628E,
+0x958B4B5E, 0xFC9B37AC, 0x4EF2644F, 0x08408C13, 0x5DF6A3D2, 0x858D80DB, 0x3947FD67, 0x467CB5B2,
+0x7EEA60D6, 0x1F764067, 0x4619335B, 0xCBCB18D2, 0xE2F224D5, 0x63924B49, 0xB6F72B1D, 0x66BF10D9,
+0xEF1FCD40, 0x58C8B844, 0x50B7CC9E, 0xBBE90849, 0x00FE28C6, 0xC0941FA3, 0x2814C225, 0x73D897D6,
+0xA658C151, 0x1A11A6C5, 0xC248C7D4, 0x990E63DF, 0x9808AE8C, 0x09472924, 0x41644092, 0x9B1327ED,
+0x21FEBD42, 0x56AA20CD, 0xB5D0A74D, 0x97EA234A, 0xB920C90F, 0x7EFBEA43, 0x2C958B77, 0x40A7CEA3,
+0x8999015A, 0xB50E1F4A, 0xDF8F780B, 0x0B3E62EA, 0x8DD7385E, 0xAEC9CDD4, 0x71FA11E1, 0x0E9514B9,
+0xB2DC931E, 0xFB01BD70, 0x965555EA, 0x5DF41F42, 0x3A498CC9, 0xBC37CABD, 0x0D7D1036, 0xB07087B3,
+0x02D317E1, 0x5A52AF72, 0xBF4E9864, 0x6F6B51F0, 0xEDAD0938, 0x6FB35E75, 0x921EF485, 0x3F2E71C3,
+0x7C03051A, 0x3553022B, 0xBE5683D9, 0xCE2E2618, 0xE1F30D93, 0x649EF788, 0x70DBC3C0, 0xF246A79B,
+0xB9DA5840, 0x129B8223, 0x2E85EC5F, 0x871C2F4E, 0x5D5041D3, 0xF5DD2AE4, 0x9B884E8D, 0x6B3BCE2A,
+0xE8FD041C, 0x58462FFF, 0xC309F58B, 0x1566F71F, 0xF67D8B73, 0xFC12F0D3, 0x0A7EA3B3, 0xB5984D73,
+0xB12CBF32, 0x6D4089F6, 0x3FB55188, 0x500002EA, 0xCE815EDB, 0x19DB69AF, 0x1E758028, 0x2F3F1FDB,
+0xF6C988E1, 0xEA5ED478, 0x6084A0DD, 0x8E5F82AE, 0x95EC4C17, 0x901A6631, 0x1F1F3C78, 0x7CAFFC50,
+0xB823C4C0, 0xE4E48CD8, 0xDCE8C483, 0xE151FF9A, 0xC0A3EEBF, 0x60FE68BC, 0x6B9534E5, 0xD675C54E,
+0x26783386, 0xD4FD38C2, 0x9B6847D9, 0x834557CC, 0x5B3E2C5C, 0xE3C788E7, 0x13502B79, 0x07F448C8,
+0x89BAF0C4, 0x3A63D534, 0xF597E8B7, 0x07B6751D, 0x6878EACB, 0x0BCFCE0C, 0x3F69E7CD, 0x3EFB196E,
+0xC609E129, 0x0520D23C, 0xB7B5CBBC, 0x7A4AD8EB, 0xB022A7CA, 0x341B9DA1, 0x212F6393, 0x65F97DDA,
+0x434C9140, 0xD7F04B80, 0x1096BE87, 0xB738211D, 0x71C2B253, 0x71A3C3C1, 0x32BF495B, 0x308FE9CF,
+0x5BB16C2A, 0xD6CE988D, 0xFE740464, 0x3139F123, 0xB2805FE9, 0x85600E21, 0x63CB3DE7, 0x07C235E4,
+0x77CDDEEC, 0x0F37F9A9, 0x555A03F6, 0x5342E09C, 0xCA0BACB8, 0x63F8BFFC, 0xB74CDDAC, 0x7AEE1690,
+0x43B1992A, 0xDD86FE33, 0xBDD1E8FB, 0x41F1AFEE, 0xDE55CE6E, 0x7634E0E8, 0xB7549B74, 0x81126594,
+0x368EA56C, 0xBD047D53, 0x132E0188, 0x4B9346A5, 0xD4E6930F, 0xB09A1BFF, 0xC2ECD8E2, 0x6EFA064B,
+0xFFC13D89, 0x47BC2229, 0x8AB3C975, 0xFB799BD8, 0x58C72FF6, 0x8E682545, 0x9226418E, 0xBAB94D61,
+0xEED1D882, 0x0B252F42, 0x67703F6E, 0xF9CF548F, 0x79C1C9FC, 0xC8F6431C, 0x07E3DF6F, 0x676EB713,
+0xBB505F38, 0x76B6ED86, 0xE0A88032, 0x9FA80E6E, 0x62B1E0D6, 0x99B7E92C, 0x1AE926FF, 0x8AE6EFA1,
+0x22474036, 0x0C75FF79, 0xFEEDECD8, 0x8E5F1BDE, 0x3559887B, 0x0EBA381C, 0xE4E8880C, 0x8AE985B6,
+0xEDAC790D, 0xF140F3C5, 0x1AE0D0C7, 0x34E63AB4, 0xE3E9A031, 0x37C6FDB9, 0x1E97C0BF, 0xADA4ABAA,
+0x476BD3DB, 0x448967C4, 0x3C0F5883, 0xCDEDCFFA, 0xDBC29D20, 0x781C51E9, 0x68F09061, 0x832640D0,
+0xA321CEED, 0x2D2A19F4, 0x9AB65D10, 0xDAC258B1, 0xDC5CFED4, 0x28466864, 0x8650AD8C, 0x6F179CBC,
+0x64B6F0D8, 0x553AD085, 0x45CFFF72, 0xEB277C01, 0x31271124, 0x26BC6BB0, 0xFC8A6BFC, 0x6ED78783,
+0x14E3AA0A, 0xD6FA5B25, 0x5C3E803F, 0x35251704, 0xF2BC8689, 0xEDE4ED52, 0xEC2942EE, 0xE724DC28,
+0x45AD815C, 0x6258B4DE, 0x85174F94, 0x2F4CBFEC, 0x8DC4F02F, 0x8840951C, 0xA62EEE79, 0xE7EF5E75,
+0x0966713E, 0xB61BC07C, 0x3D9753F5, 0x5B8D728F, 0x122FCA37, 0x69327D85, 0xBC346356, 0xA8C75640,
+0xD8DE7582, 0x322D376E, 0xA96A38E4, 0xF95E39EA, 0xA641FA0D, 0xE8E62786, 0x723BE39B, 0x1D57A2B6,
+0x124FC290, 0x2E5D3E5C, 0xF71A431F, 0x6D33A4F2, 0x1DEEF036, 0x44519655, 0x42D8B4CD, 0xCE2A5173,
+0x91C90C43, 0x11256F11, 0x8EB6239A, 0x4CB66987, 0x1B9390E5, 0xD37E0E43, 0x1AE218B2, 0xA8746FC2,
+0xB4BA3445, 0x60553F8F, 0x24A55193, 0x608CDDE3, 0x489249E3, 0x7964E6F1, 0x3ED18F5C, 0x6E3872A2,
+0x9B58437C, 0xA05683F0, 0xA2615E64, 0x44415DAB, 0xB938EC6E, 0x282E3BA6, 0x61B7B4B6, 0xDEE7B4AB,
+0xB6EFDB9D, 0xF6973411, 0x3B5C98A6, 0xB2A3502C, 0xB8DFDBCE, 0x2E8E936B, 0xBEEDDF5E, 0x5C5E05AE,
+0xF8E343E9, 0x8F41651B, 0x4EBF2382, 0xEA938CE8, 0xCDEB9BA7, 0xF9845F17, 0x7AC9CD7A, 0x101ACA1D,
+0xDA26B945, 0xE7D64E04, 0xF2B0FAD1, 0xCAEB95D2, 0xAE86096A, 0x271B8A9A, 0x9090069D, 0x5870D485,
+0xB2A76503, 0x26761822, 0x3D278D1D, 0x0A85A969, 0x40EF57AD, 0x6A4B5A4F, 0x904BA0B1, 0x15657489,
+0x165B41DF, 0x564804C1, 0x16161C93, 0x32149C03, 0x5AC16B07, 0xE6A7274F, 0xC1BE92A2, 0xF8FE5DA3,
+0xB7684AB3, 0xCB371D82, 0x45F066F2, 0xC077C7B2, 0xC8766338, 0xE58E8355, 0xFC439AD9, 0x59005BAC,
+0xC906D5B5, 0xD07FB28E, 0x1368EFA9, 0x5B36A4FA, 0x9D97AF26, 0xC40B04CA, 0xBE1C2FE4, 0x266B195A,
+0x962BDF0B, 0x0D3BABC3, 0x5F06DAE8, 0xAB897B79, 0xA34DF6FE, 0x0724AC9B, 0x039B3ACE, 0x30EA7E5D,
+0xDD57CDC2, 0x3B162393, 0xA84360DC, 0xAD6160DF, 0x251FF26C, 0xA33BDD02, 0xBC6B4587, 0x30751771,
+0xF5EBD277, 0x9091B50B, 0x76C67D92, 0xCE4D4EBF, 0x6D8A3458, 0xD19FC456, 0x87FD6A01, 0xE00AADCB,
+0x662481A2, 0x6FDC40C9, 0x2F12BD4C, 0xDDDA40CD, 0x75E22DB1, 0x8BAE95F5, 0x8EDCAA62, 0xE3E7EAAA,
+0x481CBBB4, 0xD62FFD37, 0x592100E4, 0x78449701, 0x93D04807, 0xD8235526, 0xC3E8CCB6, 0x9E278E81,
+0xCF32FFBC, 0xA0FB39AD, 0x47967495, 0xB38FEC1F, 0x18FA3137, 0xF056A1CA, 0x0C94B8C8, 0x6CF16635,
+0x83036301, 0x9170C0E5, 0x255C987B, 0xD9828C46, 0x4779BC55, 0x5AF98707, 0x4EA6B828, 0xE0FD4B68,
+0xBA562A1B, 0x429F4E48, 0x5CB963E4, 0x67EE7D55, 0x5E62E9DA, 0xD05B6328, 0xC2210851, 0x713DF1EE,
+0x5BF00C75, 0x4AF5F3B1, 0xDC4FE137, 0x0E93FD26, 0xE475E5ED, 0x57FBD13F, 0x05803A11, 0xE117D26E,
+0x4C65CDC5, 0x16722D75, 0x99C5AEF0, 0x8EE789B7, 0xC358773F, 0x1B909BE2, 0x7234A758, 0x3B5131B7,
+0xFF52A358, 0x69BD4E56, 0x20ED39E9, 0x7F81CBF7, 0x1C69FDE6, 0x38C25751, 0xE9B1D10F, 0x781DF437,
+0x4C65103D, 0x103B7CD7, 0x7C69FCE1, 0x838B8F31, 0x747B4EC7, 0x31B4B7B5, 0xA209644A, 0x5D373374,
+0x7AFB3D64, 0x609F4E9E, 0x88C07D0D, 0xCB9307AC, 0x9329BDD2, 0x8777B349, 0x9EDC6AE6, 0x133EB518,
+0x373147B4, 0xD6F3D3C0, 0x79ACCE1E, 0x442BF978, 0x5AAE5D3B, 0x2E4AC0B2, 0xC47E5794, 0xB910B5D6,
+0x0DD83DDB, 0xD410FE0D, 0xE1004E67, 0x0A83B288, 0xB5DC2D99, 0xF8A9ACAB, 0x1D3A2DB9, 0xC943C5FA,
+0xFE5E4BD1, 0x972D89BF, 0x7FCF9E3C, 0x9CDA1569, 0x0CE3FF66, 0x1B8E766A, 0x99CF1C49, 0x6487155B,
+0x9DFAA491, 0xA62B5199, 0x10EC1773, 0x21E0E1A5, 0xF008A03F, 0x47B0C1F4, 0x3F960C6B, 0xC9B32DB9,
+0xC1A88CB3, 0x2451C32E, 0x5C2B6464, 0x87CA5152, 0xDD88AC13, 0x67A99551, 0x2445ED3F, 0xE98C3C17,
+0x2FA6AEDA, 0xBCB56D43, 0xB82185F8, 0x515A9BDD, 0x70D1279F, 0x7DEC983E, 0x5A78C109, 0x5F89362E,
+0x6086CDE1, 0x8B06BBDE, 0x2CF7CD2B, 0x27181A55, 0x5FA83699, 0x51F9945E, 0xCDFC6A5C, 0x75090A7C,
+0x4C97F92C, 0x12CFD160, 0x34F1BCA4, 0x8144E66F, 0x283D8317, 0x409B9E0E, 0x162C1CE8, 0x7A641382,
+0x460B8F6A, 0xC73B6AB7, 0x6C0E69CB, 0xBFDB31F7, 0xED0C9205, 0x43C460F9, 0x2A97CF3B, 0x94F16DE2,
+0x93A2A89E, 0x92B34736, 0x433AF177, 0x20DC2A94, 0x4B8D3CA5, 0xCA4D51A8, 0x32D65802, 0xA7D6A219,
+0x1B286D92, 0xE6899302, 0xA6697EAD, 0x0EAD5958, 0x15B0CDED, 0x4ED9AA4F, 0xCE172C69, 0x72B795D6,
+0x17B55AA0, 0xAE8515ED, 0xE336DCC7, 0xD1B0B69E, 0x6731AA51, 0x2E7D3282, 0x973B82F7, 0x6567A701,
+0xBA402289, 0x7CB04E1A, 0x2E8B04B5, 0x637F5E11, 0xFACFDF65, 0xA5F96853, 0x268337E9, 0xC06ED57E,
+0xFE45E798, 0xB97264F4, 0x225523A7, 0xBDB173EC, 0x0AE3D70B, 0x1E2D7E9B, 0x08386D2D, 0x4DFF4350,
+0xD6160524, 0x4E092C87, 0x6FFB5104, 0xC72D7608, 0xD4B483C0, 0x9AF3D0E4, 0x193E9FC2, 0x90F297B2,
+0x3443C294, 0x5FA8306C, 0xB05ABF65, 0x78101411, 0x85A2C1CE, 0xE1344F1A, 0xF059192B, 0x4754A3E0,
+0x61256F61, 0xF4B21A90, 0xD42865C8, 0x586E2F2D, 0x749B071E, 0x6E9C9959, 0x8256D921, 0x55B6B568,
+0x562CAB1C, 0x3FB645E3, 0xAB374521, 0x3F9C31B5, 0x16A1839A, 0xDB38F3A1, 0xBC348930, 0x666A07EC,
+0x918EFAF2, 0x1133A348, 0x8CDB0DAC, 0xBF1B494F, 0x9660E753, 0xFBDF6ED8, 0x18D43A35, 0x87D2837F,
+0x2E1D3CE8, 0x152DE925, 0x4B71825B, 0x465833E4, 0xEB8E4C5E, 0x02F02C7E, 0xDAD1F18E, 0x55BC2B86,
+0xE79BA34F, 0x0B31EE53, 0xFC8A8633, 0xB7584735, 0xAAC83059, 0x7B362A6D, 0x064A4E04, 0x053E8542,
+0x27731943, 0x3DAF0DA0, 0xE425E49B, 0xCE4F22EF, 0x2D8DC74F, 0xA55FC87C, 0x46B3771B, 0x4AA6E2DB,
+0x32A1DC22, 0x5523BC75, 0x924DEE58, 0x75D8BF79, 0x4A633967, 0xEDE579F1, 0x41192EBD, 0x04BDAF8E,
+0x6920C8EA, 0x5CD52A1E, 0xD0C82BAC, 0x5E07188F, 0xF49FE291, 0x0FD885FD, 0xAEC1013E, 0x467996B0,
+0xB9F6B341, 0x891C7EB0, 0xC3C33520, 0xC96E6700, 0x0F457B6A, 0x4664CF70, 0x80D7FCF7, 0xD5E0D4E5,
+0xE1828513, 0xA5D23C6C, 0x56CA5888, 0xC1BB820F, 0x7F9E5514, 0xF54DEEF2, 0x2017CA8C, 0x64FD2B11,
+0x1FCC0843, 0x86C65335, 0x4BCA49D3, 0x0A19469F, 0x576FE04A, 0x06DB4CFE, 0xDAA337C6, 0x98F49A61,
+0x1F602719, 0x3B8CACA6, 0x0548B393, 0xE29F4930, 0x03B8DB6A, 0x7F1D2F9B, 0x74A20B1B, 0x257D48E5,
+0x213BFB5A, 0xC67D6CD9, 0x5F8317F4, 0x0DA4FF51, 0x9241E264, 0xF0A3AA2B, 0x01000000, 0x20009E01,
+0xFE7F1257, 0xD72666F1, 0xD49BCFF4, 0x6E221B4C, 0x47C5A0C8, 0xC8B4DCFC, 0x4000A8C2, 0x6A1303E6,
+0x9A42DB7C, 0x2BCD9BAC, 0x5732BBAD, 0x9E862611, 0x1FA7AAB2, 0x6CC2C949, 0x12606AEF, 0xA534DA52,
+0x7A498A46, 0x75AF5FF7, 0xA1C03032, 0x26B04662, 0x80848AA8, 0x0FA92077, 0x1A65281E, 0x2C413CE0,
+0x39C4C240, 0xACDEC9C6, 0x36B7FEED, 0x09B65039, 0x7C7C61D6, 0x49FBFFA1, 0x0128F6F3, 0xE3FE6142,
+0x2E7E161C, 0x0FDE425B, 0xBF5A8491, 0x5ACF7E34, 0x826F16B5, 0xEEAE1A19, 0x280758B7, 0xCFBB14EF,
+0xC8E10989, 0xB7693411, 0x0F3D754E, 0x0F0312FE, 0x6292F307, 0x5CD8534E, 0xA894D8C8, 0xC3B6D6BA,
+0x12A8384D, 0x0D3CF0BF, 0x5483FD6B, 0xCF5D2AB7, 0x11CE1648, 0xA4D18A2F, 0x68EF70B7, 0x99904E10,
+0xB1AB4D0D, 0xE2401763, 0x01DFE694, 0x29854378, 0x75FAA8D1, 0x3DE85084, 0x717327E7, 0xB5D1FEA6,
+0x8749DA67, 0x84D358AC, 0xF4347051, 0x6436B694, 0x6457CE9C, 0x7AB3CA73, 0xBAE9DEAA, 0x6A01CFFC,
+0x9E30BBF4, 0x6193A87C, 0xA103A87F, 0x0B7A4A40, 0xF04390F4, 0x7C1793EE, 0xA7986165, 0xAE8B3078,
+0x0DC82697, 0xF20B62AA, 0x153DAC6C, 0x68BF1C61, 0x80BC329D, 0x205661FD, 0xEB941028, 0xB5F79908,
+0x8EA4D789, 0x5850BC6C, 0x2F59935C, 0x2E40695A, 0xDD262D0E, 0xA935D9DD, 0x80072073, 0x02F1377A,
+0x43CBFE39, 0x51F18384, 0x09C74D8C, 0xB3162AAD, 0x00B0140E, 0x8A68746C, 0x38C3876B, 0x813C6C33,
+0x1E05B37E, 0x7CA0F763, 0xF8A0EA02, 0x2ED828D3, 0x4C09B492, 0x950CD6B3, 0xFA11DCA3, 0x44DC5846,
+0x4EE3E48F, 0xC656EEC3, 0xB99FBA28, 0xC1F2EE6E, 0x2BA7D3F8, 0xC6488B58, 0xCD22B432, 0xFCE8CE95,
+0x2A65DB2E, 0xDA36BB16, 0x10FA28A1, 0x563A2CBF, 0x9177BC4D, 0x48EF97FC, 0x4AFDBA5D, 0x62A1F21B,
+0x21D64DB9, 0xF713E596, 0xB675DD97, 0xBBAC6497, 0x3EBBD1B1, 0xDA3C36A8, 0x46E20EFC, 0xE4DE2B89,
+0xC4CB4800, 0x9891A834, 0x7E115328, 0xAEAC4995, 0x9AC3F93D, 0xB766B411, 0x33BF24BC, 0x6EDB603A,
+0x69D8CC67, 0xC21D11E3, 0x8144F3B8, 0x1D977450, 0x158E7A04, 0xAD9FAF0F, 0xBE156663, 0x1B4943A7,
+0x9D5C8B2A, 0x3473164F, 0x2A67691A, 0x292CE4BC, 0xC95DDBDF, 0x7F0FBA28, 0xF35D9A58, 0xC1ABCE00,
+0x08AEBADC, 0xF2CF4248, 0x14A0E85E, 0x718E0D6F, 0x9FC74026, 0x5F2FBF8C, 0x052C3DFC, 0x2B72F523,
+0x6E097743, 0x5E130664, 0x90F671C6, 0xBCB3C23E, 0x295576FA, 0xB7650BAE, 0xE8031C00, 0x5C5DFE1E,
+0x7E52469A, 0xF00EDCAE, 0x42C0B882, 0x4CFB9448, 0x93C1CD8F, 0x35120EE0, 0x55D1E1CB, 0xC4F63F04,
+0x80CD6B20, 0x767DBB18, 0x7444717B, 0x25130B2B, 0x09ECBF94, 0xAF9EB202, 0x03758F0A, 0xADC1D299,
+0x8DCE1C00, 0x51D90A92, 0xA2572F4A, 0x64A457C1, 0x52948380, 0xD3B1672C, 0xFA25BD75, 0x169E6745,
+0x6C040259, 0x8BAEB2D2, 0x2CCA29A4, 0xFC6A8804, 0xA924D225, 0xC27C0F53, 0x7E133849, 0x354A0ECA,
+0xC9008BF4, 0x88CA42B4, 0x71D1C188, 0x96A46F9F, 0x7F32620B, 0x382B8CB8, 0xD924F08E, 0x493BD1FD,
+0x7E59A1E1, 0x1061106C, 0x7E5927A2, 0x7B6945C1, 0x0EB89C5A, 0xA67FA83C, 0xB2EFEAB6, 0x5E9F1E07,
+0x85C7C8E8, 0x92DA5F3C, 0x0C0441BE, 0xCB9D8D65, 0xD05F76D4, 0x11DE72BB, 0x027EAAAA, 0x84083507,
+0xEA36247C, 0x8F3021ED, 0xB233EF98, 0xB0B0787B, 0x2DE0B12D, 0xC5933F33, 0x18EA3A2F, 0xF35846D7,
+0x1E0A8D96, 0x43C24374, 0x6FAAA382, 0x59BA4355, 0x14357A4C, 0xB8CFF28E, 0x278A836E, 0xC2E2DD65,
+0x1A0284D2, 0x06B58D8A, 0x37B08781, 0x54555EC0, 0x133F8768, 0x53B46579, 0x4E586CAE, 0x67C7808F,
+0xCB750500, 0x6664C02D, 0x1F396D1C, 0xAAB3E5DF, 0xFCE37A35, 0x759B71F3, 0xD2573105, 0xA391F65A,
+0x93D99516, 0x90027500, 0xEE885B77, 0x80E83383, 0x8582F1E7, 0x26175853, 0x01000000, 0x20009E01,
+0xE77F1259, 0x79EC7B02, 0x4F62777D, 0xC7E3E6AA, 0xFF4EE966, 0x1E63165D, 0x598BF377, 0x0AD8F73E,
+0x329A4EB5, 0xE8685838, 0x44B92FF6, 0x86E465B7, 0x16A8CEDB, 0xF1AE005F, 0x2734F69E, 0xDEFE3F5F,
+0xA6697F7C, 0xD20968C2, 0xAAA4B0E4, 0xC7337033, 0xA7BA33ED, 0xAE9E08C6, 0xD1F6C1D5, 0xFCA2F45F,
+0x49098EE5, 0xAE831A2C, 0xE98A3B19, 0x72A7DCA5, 0xEA5335CB, 0x041D2AE2, 0x223E8D80, 0xA4AEE08E,
+0xBBFB26C7, 0x9F9DD7B7, 0x2FF46C3C, 0xF574F2FD, 0xED2A9CFE, 0xE39303E2, 0x9A2F40DF, 0x432E2479,
+0x8F5F258C, 0x2652CF02, 0x9A6C3FF8, 0x0EE7AA2C, 0xE96784F3, 0x29F63147, 0x72D4C870, 0x833B83ED,
+0xE6289E46, 0x75453DAD, 0xCC165FC1, 0xFE083DD0, 0x66B7239D, 0x02B46DEA, 0x23F4D152, 0xCE22857D,
+0xC953E027, 0xB37D07DD, 0xA01BBBA1, 0x9382B1EA, 0x97723256, 0x62ECF7A8, 0x320C6800, 0x75A39E4C,
+0x907C7F05, 0xF63B951E, 0x8B2503FC, 0x636165E6, 0x4A6B7D3B, 0x3446CDC8, 0x12B4840E, 0x071D97B5,
+0x1F5538C8, 0xB2890A2A, 0x52DF0F19, 0xE901762D, 0x9717CA7B, 0x5E49DA8B, 0x2DDE45BB, 0x73602756,
+0x6E47E3A0, 0x0463AD9D, 0xC2D757BD, 0xF14EED23, 0xAE0CCDCC, 0xFE08B78F, 0x0F2F9023, 0xFA7ECDAB,
+0x2AC9D81C, 0x6C01FFFE, 0xA2491250, 0x1849B71F, 0x97A3D3C0, 0x8471EAD5, 0xA878139E, 0x1E5FA2D5,
+0x445B19C4, 0x9B00BF77, 0x388505E9, 0x01DAFFA8, 0x9F6F4EA9, 0x1B5B1632, 0x0B16397A, 0x2E4EF263,
+0xA1839A06, 0x23B74FCB, 0x53C69143, 0xC8466A59, 0x34FEF12F, 0x5F734BF0, 0xB85BEC96, 0x859659B8,
+0x78DCCD42, 0xF16CFE3B, 0x29B80CE9, 0x2646D40E, 0x544FC72E, 0xEF84C407, 0x0936B60D, 0x426556DB,
+0x4C455554, 0x6C57623E, 0x65EA40FC, 0x17E32567, 0xE371CA93, 0x90F5EE56, 0x0A66E543, 0xF46663F2,
+0x99A9C41A, 0xAC93893A, 0x8CFB7190, 0x60BA2665, 0x865486ED, 0xD5435B05, 0x156E890F, 0x16850D94,
+0x1A20750E, 0x813A00F4, 0x12DE46A2, 0x70E5D1BA, 0xAC6329A5, 0xB5219636, 0x4CB0889A, 0x7312E755,
+0x0281805E, 0x37E95B38, 0xE7645A83, 0xD53686D0, 0x1B8A57E8, 0x8A383292, 0x03CE2531, 0x64E35AEE,
+0x34AE686E, 0x51E28053, 0x6FA1D2FA, 0xACB08DE3, 0x21309DAD, 0xE1755DC4, 0x112DD591, 0x96AF2FB4,
+0x65400BA9, 0xBAB60B6C, 0xD0BACDB4, 0x1C6B3627, 0x67EEF72D, 0xC34AD465, 0xCAE9918F, 0xC1BD507D,
+0xB6C76755, 0x2F662B68, 0x69EECAF8, 0x26C0140B, 0xB9EAF8EF, 0x24EAD24F, 0x3D1600AB, 0x47A17BA7,
+0x3F6A6358, 0x54ACC7D4, 0x863040FD, 0x53C64D6B, 0xDE8D690D, 0x8EAAAD92, 0xC1660656, 0x2FF0EDEE,
+0xB5C12C31, 0x47A74160, 0xFC116F9D, 0xF7ECACA9, 0x3E6EE047, 0xDA5C5F3C, 0x5D7331EE, 0xDC52AE80,
+0xBE4F9CD6, 0x05F23267, 0x96F6EE6B, 0x8A4A2729, 0xFFB6FC29, 0x3AD20DDD, 0x02C66E6C, 0xF9E19DF3,
+0x455F9F4F, 0x75664CB8, 0xA2FC133F, 0x7C072280, 0xF859A500, 0xAF0E4C77, 0x685CB808, 0x76A36756,
+0xC396526A, 0x2585C901, 0x4714DCB0, 0x7A4D7E4D, 0x78202C14, 0x1AE5950B, 0xA5E276D5, 0x018DD1C1,
+0xA0AFE792, 0xDF9190BA, 0xF18FAE36, 0x6D019737, 0x42FE6159, 0xFB045188, 0xA771A1B7, 0x2AA89A66,
+0xDAE2C971, 0x8B32223A, 0x3F1418F1, 0x4F414E1C, 0x0E9F39EE, 0x80DBCECF, 0xAE58E27F, 0x8559BCE8,
+0xF41E9FE7, 0x3C56D122, 0xFC9240BE, 0x93C670A8, 0x2C3BDF89, 0x83FDDE85, 0x9234AEDE, 0x2DBDEDA8,
+0xD9B04708, 0x8A6391AA, 0xE662937E, 0x4190B6C2, 0x406DED3B, 0x370EE224, 0x25318446, 0x4210C17F,
+0x98108199, 0xEF4C76F2, 0x9C120B68, 0xD2835F40, 0xFBCC284E, 0x15A69E64, 0xEAFCA84B, 0x855076BF,
+0xD961B051, 0x00000070, 0x009A2101, 0xE13F6020, 0xACA234E3, 0x4081F22C, 0xE0789E3B, 0xA5154BB9,
+0xE3793F5A, 0xA0600D43, 0xACA70B54, 0x647DB723, 0x05F44029, 0xB08C553E, 0x553176BD, 0x3FF7A1D4,
+0x5535BA6B, 0x09D49C30, 0x6D68199F, 0x36C15DFF, 0x406BC1B0, 0x2F7C3E85, 0x4FF2E74D, 0xD69DE403,
+0x4F9B43B6, 0xAB92FBF3, 0xFFAB3CB7, 0x509B1FCC, 0xF4AA4C36, 0xBB8EAC61, 0x90D3B60E, 0xE5BEB34E,
+0x91BB61FC, 0x2F1CBED4, 0x8B104216, 0x0251E76F, 0xB928CDD7, 0xA8A3EECC, 0x15B5DB40, 0x77F00A95,
+0x8C90A0A4, 0x368B3197, 0x0E3D7532, 0xAC87E5FD, 0xF32C7219, 0x9615EF5D, 0x534BC87A, 0x36389709,
+0x6529C1F4, 0xF7772D24, 0xF633565F, 0x6CA89CA0, 0xC7FB6770, 0x5D0DBC5F, 0xF2AE9548, 0x6502A529,
+0xF9D080F8, 0xF5653C68, 0xAE97C30C, 0xCF34C847, 0xDDABA4F1, 0x6A1B6764, 0x83EDD6A8, 0xB07C3318,
+0xC38565D9, 0x23AD7A34, 0xDDEEA06E, 0x4A0DFE4C, 0x30ACC854, 0x653EBEAA, 0x8F8372D6, 0xD98ED33A,
+0x0DBC0F7A, 0xD5327BC8, 0x7B01A2ED, 0x950907DC, 0xECD5C98D, 0x038353CB, 0x83085E6A, 0xE6A816DA,
+0xB69744FD, 0xBD7ADD75, 0x99002267, 0x3E9A169F, 0xB8C5F730, 0x5326EB78, 0x189D9673, 0x5FA27E92,
+0x8AFB13C4, 0xB362EB9B, 0xDCAC26F0, 0x18DD9276, 0x4BEA9688, 0x66A27224, 0xF7154298, 0x6FF87D18,
+0x57752E3B, 0xC1FC1CE8, 0x340D2657, 0x4399B3D3, 0xB1FCF234, 0x05060DE4, 0x696CC9BF, 0xC233EEB9,
+0x37D1096C, 0x684967E5, 0xD121B19C, 0x187BAA1A, 0xBA476212, 0x29A50E07, 0x9E889FE5, 0x9D857096,
+0x78048AC9, 0xC0D24776, 0x9E12C97B, 0x19D1C3F0, 0xA1468521, 0x34BECDD9, 0x17F43C32, 0xB212A777,
+0x312CD03C, 0x75C8D65C, 0xECF0DE2F, 0x4761CD49, 0x2072D116, 0x0DD3A705, 0x7FB02654, 0x2457EBAC,
+0xC45AC3E0, 0xF1BCB5B3, 0x25FA4E09, 0x7797E7AC, 0xA247C9E1, 0x150F054A, 0xBCA9DAD8, 0xBCD0FC93,
+0xCF35389B, 0x7499FBA9, 0x633BB12C, 0x8C03CDC4, 0xF8C8AE03, 0xD64DFCE8, 0x500C3CF3, 0xD13D63D1,
+0x957A0C11, 0xFA287096, 0x2E71502A, 0x412F548E, 0x240BCFD0, 0xFDC1E137, 0x904CDE59, 0x9F01D7B8,
+0xBAC9507E, 0xB8D6B18B, 0xC20779FC, 0xC72F2AA3, 0x403286FC, 0xD47605BC, 0x78EBDC47, 0xD721DC7B,
+0xE3A5DF35, 0xA5C3404E, 0x3A90AB03, 0x813D1DE6, 0xB6BCF0B0, 0xED9CA5F5, 0x5BDF819A, 0x99384612,
+0x04D70217, 0x9CDC979B, 0x36BBB9E6, 0xF0611562, 0xA3B76EBF, 0x0EBEF301, 0xB98F9AB9, 0x0D541654,
+0xA3662F2C, 0xF6D5C2F6, 0xD19629E6, 0xF29DF398, 0xB43B4FA5, 0x10886935, 0x17BD2B98, 0xBDE7F4BF,
+0xF22892F2, 0x750D47D6, 0x08FD6888, 0x4292B91A, 0x301C8E3F, 0xAFBB6880, 0x2B44B037, 0xEEA9B5DD,
+0x5F589FCB, 0xBE7ACC59, 0xD75A9651, 0xBB99F9F8, 0x765C7B42, 0xB671DE54, 0x075B7B97, 0xABAF8227,
+0x03A3E036, 0x523F325D, 0xD7B6A19E, 0x53CCEFF1, 0x1F53A3B1, 0xE334D4AF, 0x936035BE, 0x43DFD910,
+0x20A1EEA2, 0xDCC7C7F2, 0xB7EC3FC8, 0xD4CBCE60, 0xB500271C, 0x722E48B5, 0x2891FE25, 0x2FE92BDF,
+0x7336A562, 0x0D07ADEF, 0xA7E3E4B2, 0x20F83029, 0x11E5E00B, 0xEC409B53, 0xD3BE83E1, 0xFF23B42A,
+0xCBBF2B77, 0x3F4E5455, 0x50E38711, 0x49EA87A1, 0x33FC528D, 0xB4E06E8A, 0x8469C8A8, 0x516DF593,
+0xB74212A0, 0x3CE5C920, 0x8DFB08EE, 0x4B8B744B, 0xD230C7C4, 0x6CFC6B1E, 0xE03464E1, 0x8D71A395,
+0x68B953B9, 0x930BD8DF, 0x29D82439, 0x55166ACB, 0x5BAD3B98, 0x74E8B128, 0x4AAB3C42, 0x2DAD5DA7,
+0x6B52DDA2, 0x2C2B23E9, 0x8F181496, 0x79B118EF, 0xBD06BAA6, 0x6D1AFFDA, 0x77B35B74, 0x6EB97877,
+0x3C7B8629, 0x1A579548, 0x2901D794, 0x13A9DAE7, 0x02457669, 0x7A1CF5E2, 0xE31DFCD4, 0x7C1F00F8,
+0x50B0251D, 0x4E17C3EC, 0xBEFE8286, 0xB20521B8, 0x0000ACD4, 0x8DBE534F, 0x14E75C76, 0x17B569C5,
+0x8623E539, 0xB51B1C38, 0xE0E78716, 0xAAFB2BDF, 0x170005CF, 0xF41C402C, 0x96FCFB8A, 0x6CAE3F47,
+0xDBA4EDE2, 0xF2D9B4A0, 0x777449CE, 0xC3AE7618, 0xF2BD14C7, 0x9ED30B66, 0x544793BE, 0x7646CC0D,
+0x3CD1B772, 0x5675DBAA, 0xFFC70713, 0x2AD4AFE9, 0xD2690217, 0x77C91050, 0x912AA919, 0xF3B5C0EA,
+0x8DA26FE7, 0x46375EDE, 0x3900E6DF, 0x6106D0EF, 0x361E9999, 0xFD20C7BF, 0x9109CA4C, 0x822912FD,
+0x8FBE310D, 0xE23FB519, 0xA284AD8F, 0xDC9163DD, 0x9582E34A, 0x3586EEF6, 0xBB63B86A, 0x0F963901,
+0x43F19B74, 0xF00A0C67, 0x09F09B40, 0xFD03E833, 0x3D20F537, 0xB57F4C66, 0x2EDB8252, 0xDA5D8C4A,
+0xFBF36FE4, 0x35C24508, 0xD54AFEAA, 0x2DC7174E, 0x6D715975, 0xD19DFCD8, 0x592D8FF3, 0x570F2CAE,
+0x80872CBB, 0xBAB77A97, 0xE41365D9, 0xD7BF7AB7, 0xE4AEB032, 0x380839C2, 0x6FD392D7, 0xBCBD74FC,
+0x98C8B566, 0xAC42069C, 0x1E14F149, 0xA110AC48, 0xB88C648F, 0xAF0F29A1, 0x8EDC1983, 0x988FFF0E,
+0xBDB1B995, 0x73CF5ACF, 0x6A9BDBA2, 0x38040177, 0x80AD2BA3, 0x98E242AA, 0x08FC12D6, 0xC7B143CC,
+0x6D65277B, 0xA3F6AD31, 0x5E54E828, 0x4DD3025E, 0x9E8E1E03, 0xFC65EC52, 0x1CAF9C0A, 0xDB731411,
+0x99837DBF, 0x87034019, 0x4FA997B6, 0x82F9661D, 0xC03FC56D, 0x5264FB9E, 0x67E98A29, 0xF4434918,
+0x5FAE6664, 0x5C413E0A, 0x872764ED, 0x9F275832, 0x54D7E036, 0xE849D790, 0x543F4ACC, 0xF84C4933,
+0x472F1F58, 0xC41C4159, 0x7790E2A2, 0x2ABAF8BC, 0xBFD992FF, 0xF266EDA3, 0x41A007BF, 0x00A75CDE,
+0x88380CA0, 0xA963729F, 0x73002D22, 0x9616DB6B, 0xF58AFE18, 0xF109B364, 0x4F26A57D, 0xAF6EC996,
+0x62D9C703, 0xB0096E1A, 0x7C0CB211, 0x8CD5D469, 0xF201F33F, 0xCDA60912, 0x53E5DD70, 0x79117A7E,
+0x8BE6D4B6, 0x7FC2012C, 0x01280279, 0xA9ACA0F2, 0xAE93BF07, 0x23C87B1E, 0xECC35269, 0x1772636E,
+0xE9291CAD, 0xAD6B04A4, 0xD3945C41, 0xF5D24511, 0x575B7372, 0x4F4F91EC, 0x39C47075, 0x171DE2DD,
+0x976D7B8E, 0x2FC51208, 0x8631AD1E, 0xB26995C6, 0x81BFE05A, 0x7D866105, 0xD5AC903E, 0x9962BDC2,
+0xAF3B319B, 0x24ECA750, 0xF2EB0B4E, 0xEF9BFBDA, 0x3D3C1F53, 0x22A5E94F, 0x87BE6FEF, 0x2A001048,
+0xB6D34CB6, 0x98511CB6, 0x62EC6D16, 0xF9F25091, 0xA6A31910, 0x2F726364, 0xB757A1FD, 0x706E3A65,
+0x1A7D3506, 0x23EC894D, 0xA07D4F69, 0xE78F83AF, 0x8F8B3807, 0x2DAF2CD0, 0xD8FB8715, 0xFFA92F15,
+0xFEF37CF6, 0xAD5163BE, 0xB38BF19C, 0x8620535E, 0xE5D3DA44, 0x925D259B, 0x50F8453B, 0x4CDE0D07,
+0xD8A9CEC9, 0xA7801F17, 0x499EDE54, 0xBD5679F9, 0x1F827D0D, 0xDAB85706, 0xC7421C99, 0x62AA6663,
+0x53BBD618, 0x37FD70CB, 0x7331BB40, 0x1840542B, 0xCA657B0F, 0xD13FCDB6, 0x856689D4, 0x5CAA9F0E,
+0x27B659CE, 0x22BA20F3, 0xEC079393, 0x08BD72E6, 0xDC67C7D1, 0xA7D6B34C, 0xF785960E, 0x3CF99E8C,
+0x21A05D91, 0x80848E3D, 0x4941BC4C, 0xA49ABA27, 0x37BDF720, 0x61B7F26E, 0x49B580D3, 0xAB9C06DB,
+0x5E35F9C0, 0x01E18C52, 0x2B73F8F6, 0xEEFA3A98, 0xF16FA585, 0xF409F126, 0x5C7433DB, 0x582E46DD,
+0xB21C2A95, 0xFC75C637, 0xBDCF6A1D, 0x1FACFE16, 0x01529692, 0x63ABD741, 0x9FF2A34B, 0x29561DB3,
+0x9DEB1146, 0x1CBFBFA0, 0x8577EFB6, 0x99647978, 0x6D7A1A21, 0xC3D7DFFC, 0xD9A596D8, 0x9C340609,
+0xC05E219D, 0x8A22BCE7, 0x8625E209, 0xCC0E9DB9, 0x76B66338, 0xF00AA8BB, 0xA77C85EA, 0x6AAF076C,
+0x53F8D6AD, 0x4DAB3096, 0x9A5BEA15, 0x4B8079FD, 0xBF2F7BC6, 0x368E076A, 0x14E8B088, 0xF920A749,
+0x75BB9C11, 0x9379C5B5, 0x2F2CD3C6, 0xD22614AE, 0x1E6EB718, 0x6A071601, 0xEDF36B67, 0xD88AF22F,
+0x8E4C4DC8, 0xEC9AB85D, 0x70AD8DD8, 0x82D2AD3B, 0x9034FEE3, 0xCDAB0E17, 0x56425EFA, 0x65F7B038,
+0x002EA432, 0x6700B9DC, 0xAABA5B93, 0x89865FCC, 0xD8399B07, 0x27C829C8, 0xF7FAF717, 0x5E3D3A8E,
+0xF7D1D32A, 0x672C186F, 0x34FFE048, 0x9BBAB6D5, 0x9DBA95A9, 0x45F5A28C, 0xE8330774, 0xB2575EC2,
+0x5A58FD94, 0x70125303, 0xE98674D6, 0x743C1304, 0xF49EC861, 0x52668467, 0x8D17F298, 0xA5AF1F94,
+0x5F30060B, 0x3957A3EE, 0x9DD5C067, 0xA960CECD, 0x555D3A07, 0x8EA4424D, 0x50D1A98F, 0x9073A084,
+0x9490ADA6, 0x44097ED0, 0xD9EF6775, 0x14902718, 0x78D889F0, 0x7C6149D2, 0xCA3EED3E, 0x61457979,
+0x8A745321, 0x74381A3B, 0x4EC4950B, 0x439354FB, 0x660A7E92, 0x587E7097, 0xB16DB689, 0xDCB44E71,
+0x53C98406, 0xE2C6D7DD, 0x5DE70206, 0x399673AF, 0x64EA9089, 0x9A2E2351, 0x56AAAD7B, 0x14F027B9,
+0x45A5A46B, 0xB9DD2777, 0xCE8DB486, 0xA630EB55, 0xF097F572, 0x7C8F4691, 0x1F11427F, 0x886B8AF2,
+0x84E121E8, 0x9AD63D65, 0x51728BB7, 0xB063E941, 0xCA46A829, 0x2D6CA996, 0xB4852CD5, 0x99B098C6,
+0xA60D52BF, 0xB12406C6, 0xD4069B8F, 0x597569F3, 0x390F43DA, 0x70889967, 0xADAA0D0E, 0x9C289B6F,
+0xE3F9D3D9, 0xAF03CAD9, 0xC0BE172A, 0xD3FBC9A8, 0xAE59361E, 0x69895260, 0x5287D73E, 0xD6BC5AA0,
+0xA1500677, 0x6F6C52AE, 0x3DC8EAB7, 0x1A816653, 0x3EB7BA56, 0x6F2209A7, 0xA02903DA, 0x6FF42C2B,
+0xACF6D7B4, 0x55B9B3B8, 0x5E80BBCD, 0x2CFCBC51, 0xC488C684, 0x0B5A4981, 0x256895DC, 0xA1281D6B,
+0x51D6718C, 0xB0457692, 0x33220F08, 0xA31166CD, 0x3B24347B, 0x75458816, 0xA21EB3A0, 0x9A212344,
+0xBAC4BF62, 0x8716981F, 0xBB5C5FAF, 0xF60E8FCE, 0x707ADE1C, 0xF5D44247, 0x8B63B832, 0x0F59403C,
+0xE1D6DDC8, 0xCDF5E43C, 0x61150D80, 0xFAF96EAB, 0xCB2F2FE2, 0xFE476A1B, 0x9EE896E3, 0xEBFA5CEA,
+0x2EFFC265, 0x4CE66627, 0xDF153016, 0x03B58A77, 0xD722EDC5, 0x278E29A2, 0x72B24197, 0xF5AE79B7,
+0xA4AF2041, 0x3F39799F, 0xA5DFC80E, 0xC8C03E65, 0xADD6FD7D, 0xF45F8E5E, 0x86B2FD50, 0xD907DD94,
+0xCBCDF812, 0xDBF1A974, 0x7DD17FBE, 0xAD863F7D, 0x4FA4CF57, 0xC7BE23BE, 0x0439AA19, 0x0CA8FE39,
+0x70A58C1B, 0xF11626F6, 0x2833DBD5, 0x446433F9, 0xFD787072, 0x8EFC71FF, 0x9AC562E4, 0x257F298D,
+0x4AE747F1, 0x8E11BD97, 0xBF51196C, 0xB84BABD0, 0xB129F365, 0x4A9E9E74, 0x63CCC306, 0xFD4E2E02,
+0xAFE4B26E, 0x702008F6, 0x77C71E70, 0x8F87CFB1, 0x1B12D463, 0xABD186B2, 0x596E0CE3, 0x8BAC1015,
+0x3E2F4D9E, 0x5F6EC12D, 0x3703A625, 0xBFB6DB80, 0x2020F413, 0xE40A13F5, 0xED76FCEA, 0xE6B047FC,
+0xE2A87EBC, 0x79F29394, 0x5B060062, 0xE430B3DA, 0x80D02B48, 0x3DD9DCA9, 0xDD7C9EA9, 0xBB867D61,
+0xD95A8603, 0x527E460E, 0xBA5FCD66, 0x39D0A6B7, 0xD5ADDCBF, 0x3593A8E8, 0xE19984EE, 0x1EA2035D,
+0x306C36D1, 0x1CD91CB0, 0x40FDDA0A, 0x31273C67, 0xFB14701D, 0x88C5637D, 0x1D5DA04F, 0xF7B30A0F,
+0x5C160B74, 0x88E15A80, 0x9AC1EDB9, 0xA389FBE2, 0xA8A396BC, 0x4F0B5FDF, 0x3EB9384E, 0xA810E586,
+0x1DB951E3, 0x91C12115, 0x1832CC08, 0xFB2A82F6, 0x512BDF6F, 0x8556C150, 0x7D293953, 0x39EF86A4,
+0x3CFD598B, 0xD2450CC3, 0xDAC2E00B, 0x4654F8C4, 0x331B39F9, 0x96E3C53F, 0x2AA633F4, 0xCC62042D,
+0x9B92A9A2, 0x1C804EFC, 0xD93BB633, 0x98C3B674, 0x05C61538, 0xF148936D, 0xE25630CE, 0xE6F5651C,
+0x787BAE0B, 0xFB63207F, 0x0866057B, 0xD3A1464B, 0x884CFCC2, 0x80494237, 0xF7E3C539, 0xC539188A,
+0x5671F874, 0xF1D9604A, 0xE56A44C6, 0xF5C6E8D8, 0x81AB3014, 0x9232D376, 0x2BB46174, 0xA21FDBE7,
+0xF4628C41, 0x6AC38F01, 0xD10535AC, 0x40F3BD0D, 0x9EFDD518, 0x72F81E1E, 0xDD4C9B8F, 0x70FA0FC3,
+0xA0063577, 0x0F47B59C, 0xE22CA1A8, 0x07E8A983, 0xE315F433, 0xC3B23C62, 0x68596983, 0x3676A5EE,
+0x5C60DB70, 0x69F0D8C3, 0xFB907019, 0x570B2C50, 0x9FE1222A, 0x6F506C04, 0xCB71A255, 0xB3A0A5C4,
+0x388422D6, 0x50A6799D, 0x7C26895E, 0xF2AFF42A, 0xA261AD69, 0x50D21E29, 0x6E6377BC, 0xDA1B5EBD,
+0x0BE06616, 0x9082F1F7, 0x1241B479, 0x9A9876A3, 0xA19FE6B8, 0xD9509440, 0xE89009F6, 0x3D3E6F4D,
+0x40C31D48, 0xBC77D352, 0x5C257B2C, 0xDD06DA2F, 0x0AAC0B06, 0x915FBDE9, 0x7F3999D0, 0x6922C12A,
+0x86BD89DB, 0x61653477, 0x495D5252, 0xA3595BA6, 0x4DED9782, 0x4AD0AAF5, 0xE2592520, 0x7A4AFA43,
+0xD157B1B4, 0xD2FFED6A, 0x059AA475, 0x226B9FD1, 0x67BD075F, 0x2D2DAA5D, 0xB2A06396, 0xB7CE7C5A,
+0xAB249957, 0xE4E581B8, 0x6326F029, 0xE421C886, 0xEEC54E30, 0x6E2AC43B, 0x6711CB4A, 0x352B3C7E,
+0x531D2572, 0xEF296178, 0x429D5CD7, 0xD3501D60, 0x3B471C15, 0x381D35CF, 0xD4A3B35D, 0xE2F81D9D,
+0x69DF2D60, 0x9DB84C56, 0x70592EF4, 0x5762A68C, 0x3861329A, 0x53CDA47C, 0x40711371, 0xEEB34011,
+0x33076D5E, 0x591C4267, 0x5C71CF02, 0x6643B403, 0x42D84A12, 0xB0D8AC3F, 0xE170DE52, 0x606785FA,
+0x10389042, 0x658B112A, 0xDB55F971, 0xB381A218, 0xD83CC93C, 0x382BB76B, 0x9DEBF3BA, 0xD140A141,
+0x7FFA14F6, 0x923B7FDB, 0xE217A8A1, 0x28D831BF, 0x68B01A92, 0xB1B976EF, 0x01C315AF, 0x811D24FC,
+0x5382DD19, 0xD190995E, 0x5E0519A7, 0x7ED69C51, 0x03D70A96, 0xEBA276AA, 0xE509E8FD, 0xDCDB0A77,
+0xE6FB264B, 0x308A875B, 0xDF163B32, 0xA83A0F8B, 0x3CB3126B, 0xC63CFFDA, 0xAF6D591C, 0x75D380E2,
+0x52BC24B4, 0xAC136FD3, 0x23BEEB63, 0x8F805261, 0xA36729F7, 0xC1141AE9, 0xA89638DD, 0x76EDFD94,
+0xC95ECB22, 0x8B4EE5F3, 0xE5DD6E60, 0x733D588E, 0x38009F8C, 0x262C2174, 0x570733AA, 0xBE15499C,
+0x6CB6C721, 0x47CDC379, 0x5C018319, 0x207EBC99, 0x30E86EF3, 0x8D9AC68B, 0xF08BADC2, 0xE2C5F6EA,
+0xA0259D5A, 0x437A969D, 0xE0D0CFBE, 0x87AD30A5, 0xFD1ED37A, 0xE7754F19, 0x18B7632E, 0x0563BD36,
+0x5C1CDFED, 0x6BC68AFD, 0x1F7AC921, 0xED28CF44, 0x75E34BFA, 0xFC641550, 0x4DF1A580, 0xD85DA095,
+0x554DC5FC, 0xD2FAE2D8, 0x96AD2442, 0x6304F05E, 0xBE5CC468, 0xF40D2EEB, 0xB5C8E050, 0xF68C0861,
+0xDE513B5E, 0xAAA56749, 0x3945A1BF, 0x2C5701CF, 0xCE30D2CC, 0x86EE895A, 0xCFBD5A88, 0xA6BB2F6D,
+0x23488921, 0xE047C8A2, 0x66EAB544, 0x998BB3B2, 0x5A4AAA0F, 0xF5FA580F, 0x99D27864, 0xA3DA793F,
+0x60EA0065, 0x998B1469, 0xE595ECEE, 0x297A9DB9, 0x7C615925, 0x78087482, 0xB861C3BB, 0xE0C37F8F,
+0xFD06246D, 0x4FC0BDC9, 0x0512F1F1, 0x6F73C9C1, 0x9E736289, 0x0AA8AFB8, 0xECB5EE7E, 0xB947D6E3,
+0x51FC62AF, 0xC283A98E, 0x5A8EA060, 0x94D33981, 0xC14B7370, 0x89DE6138, 0x46D870EB, 0x51D9DC28,
+0xCEC8FC1D, 0x86867AE5, 0xF4609F89, 0x07E6BA2A, 0x2CDD3B1C, 0x7B15DC38, 0x929A6A5C, 0xC9C1F066,
+0xB9BADA32, 0xE6A163D2, 0x0B90599D, 0x13BA05A0, 0x939DBE7F, 0x5345CBD2, 0x36064A1B, 0x6368666B,
+0x02DF1104, 0xFC326B1A, 0xD3062FA9, 0x7B9A44C5, 0xB3FB6DC2, 0xE67E5D2C, 0x807C6A83, 0x219487DA,
+0xC9183CC0, 0x642A30ED, 0xF1BF5B00, 0xC34B38C6, 0x4C5985BF, 0x90C94C72, 0x85ACB3DC, 0x1DE935D7,
+0x27882D97, 0x19596AD7, 0x0DFECD48, 0x98ABC8AA, 0xB6DFED3A, 0x66DE1D51, 0xC22CF402, 0x243267D0,
+0xCC03391F, 0x38ABCF89, 0x205F5D16, 0x48B06961, 0x2F424E09, 0x94D84167, 0x7FF43277, 0xD89ADAB5,
+0xBEB453E0, 0xCE960903, 0x632FA5A2, 0x44918369, 0x34282D8E, 0xBEFF8FF1, 0xEB534C47, 0xC49F690E,
+0x573F2665, 0xC65EE6ED, 0x3AEF090B, 0x1836385D, 0xFF8A3237, 0xF0EDC2E9, 0x82B49D27, 0xCAA7AE5E,
+0xB270B0EF, 0xF09D95DE, 0x1A0EDA62, 0x546BAB2F, 0xCD64362D, 0xE36391FF, 0x93FBC380, 0x53EEEA6E,
+0xFA22034E, 0x67C01382, 0xCF23C0D4, 0xFD0828D0, 0xC4765BB8, 0xFC41AF0C, 0xC25476C7, 0x6D3CF5AA,
+0x84BFE0E2, 0x22DBB727, 0x7E314222, 0xCA6AA1B0, 0x0D0A020C, 0xABE49082, 0x1413C23F, 0x26CE580A,
+0x67E1A2F7, 0xE1893EC8, 0xABCB71D3, 0x3DC9323B, 0x0AFF1BE3, 0xC7C3CA13, 0x084982D2, 0xB9123671,
+0x401E733C, 0x862BCFD9, 0xF911AF4B, 0xCA35DFB9, 0x84DE128E, 0x1EF3B1B8, 0xD727B68A, 0xBDBE4C9B,
+0x25F9748F, 0x0784ADD4, 0xDAD83A04, 0x84F04420, 0x83186F1F, 0xF5DA3943, 0xB322468C, 0x2CB60B2D,
+0x48909C1F, 0xD72CD6FE, 0x760E814C, 0xBFCA954F, 0xFC6AA46E, 0xB35D9297, 0xCBBFC3F6, 0xD6F9B007,
+0xECDAB422, 0x9B8C2902, 0xA5855CE9, 0x275173CF, 0x0D2969B4, 0x0AE84134, 0x1A77EFE7, 0x0499054B,
+0xE5F4C96D, 0x55A2C620, 0x7392BE40, 0x99AABE17, 0x7A79E87C, 0x85D8FBED, 0x000000E8, 0x009E0101,
+0x7F125D22, 0x046E56FB, 0xCDE5A5F9, 0x89E05F09, 0x892FBECE, 0xDE472A39, 0xA5993658, 0xE7DD06A8,
+0x632CAF68, 0xDF4DD033, 0xEBF66B84, 0xF45BA006, 0xE92FA1D5, 0xE43A2856, 0x87720887, 0xFB3C1FBB,
+0x34E2193C, 0xF1C4F0BB, 0x5C8D1BE5, 0x0C9EC53D, 0xF2E7A840, 0x6A3932F4, 0x7AECCBFB, 0x80005EF7,
+0x264C7ECB, 0x1EC5720C, 0xE3E991DB, 0xD3225004, 0x3BAF44A9, 0x5EF87E41, 0x7F54984D, 0x64625A58,
+0x4E8C4CCF, 0x058BA71E, 0xBE76F7EE, 0x03E887C2, 0xADFB1867, 0x2BFF785D, 0x4C1F6258, 0x431DE2C1,
+0x3CE00ED1, 0xFD25C3A2, 0x3055F7F9, 0xA4E438A3, 0xCA872FF8, 0xE8399F31, 0xAEB3779C, 0x630A6D3B,
+0x390EC2FF, 0xFB7E2BC0, 0xD4140438, 0xB2FA2FEB, 0x04793CBB, 0x45D8689B, 0x91E24A16, 0x4A702793,
+0x91705E05, 0x1F72323A, 0xD4ADA9B4, 0xE3559871, 0xF872AD94, 0x7C69BE92, 0xE2096E28, 0x2FCE67AF,
+0x12EC8953, 0x72809EEA, 0x82D5E3B3, 0xB34A7195, 0xE8B5B52E, 0x8E53A8D0, 0x127B38B4, 0xBF45764F,
+0x6A3ECE8C, 0x80525461, 0xF3DC352A, 0x8E1BB56F, 0x96A43946, 0xF89B195C, 0xC24705C8, 0xF5CCFACE,
+0xDFFF37C9, 0x976428BB, 0xF2FD5891, 0x9BC73120, 0x7E55C983, 0x35EDF2A1, 0xCF8F37B0, 0xEF5C661D,
+0x6C056692, 0xCFA5FB05, 0x64FF6395, 0x248669CC, 0xE751C87E, 0x4256F3B9, 0x5954714E, 0x9745937E,
+0xCC016680, 0xF057534B, 0xB0BC3F2A, 0x0614951E, 0x6DEC1CE4, 0x1B3BB38A, 0x95B74827, 0x3835A0B8,
+0x1CD4BFFD, 0xD23A75D6, 0x10898923, 0xFF729D94, 0x51BF2FF0, 0x7B8B179D, 0x3912AF18, 0xF31AF4FB,
+0xA42ABC52, 0x1C40536D, 0xE7FF283B, 0xC8741038, 0x0AE55C94, 0x4258567D, 0xD2A0830E, 0x8C518ADE,
+0x6913A83A, 0xF4087D2C, 0x129C13B1, 0xCB3D902E, 0xE6828154, 0x9D4D69D6, 0x743DD0AB, 0xCAA0BBE0,
+0x993448A1, 0x822F40A8, 0x34A16304, 0xA627F67A, 0xE122E31D, 0x2F0FE889, 0x0E6B4C11, 0x9CB17C75,
+0x688195E2, 0x531F4351, 0x6165788C, 0xC8C3A078, 0x36B26949, 0xAB9FF0CE, 0xF7245280, 0x85215F6D,
+0xFD781D31, 0x982593E9, 0xA8587FCB, 0x33D18061, 0x7366BF77, 0x8B017562, 0x88142D51, 0x3F08FD9F,
+0x9BCE68E4, 0x983F2FF7, 0x70287717, 0x939AD602, 0x244696F1, 0xEE5D7F4E, 0xE53C49C9, 0x00A4CF7A,
+0x47BAE5C9, 0xE7DB7A13, 0xB9B6146E, 0xAAB37A8D, 0x14CDD108, 0xF995CA90, 0x61C9B6A1, 0x82C326C1,
+0x689D99E0, 0x57332DD3, 0x875C296A, 0x92286847, 0x538E8355, 0x3CCFF343, 0xD7F04B3B, 0x35A13607,
+0xA97545D5, 0x82D0EBAD, 0xF2C912C0, 0xA16FC310, 0xA79A8756, 0xEED3E4E1, 0x80B64EE6, 0x276D23DF,
+0x685583AA, 0x387BFAFE, 0x9226B293, 0x263CBE08, 0xD82BCEA0, 0x687796A6, 0x14018BB9, 0x7B63D988,
+0xD89D5429, 0x17C4B9ED, 0xBFA4031E, 0xA70FB3D3, 0xAE50009B, 0x690EDBBF, 0xB44CAC21, 0xC652A0A2,
+0xFB61BEE0, 0x55A6777D, 0x5354FC41, 0x2CAF9DA0, 0xC990A76C, 0x28C7E542, 0x60CFC4D8, 0xD1A737D9,
+0x3EE12593, 0xC8A11FD3, 0x4F42E822, 0x40797A1C, 0x6B044933, 0xC636DB76, 0x7E20325D, 0xE64EBA70,
+0x5347524C, 0x3E238E68, 0xCD3434E2, 0xD292E911, 0x28B9DD28, 0xA0508162, 0x2CE0C4FB, 0x70B2A341,
+0x9319C200, 0x22D3E701, 0xFB3D8B98, 0xBD1FAB67, 0x506EAF0F, 0x465A7A25, 0x692F22E4, 0xF2E3F667,
+0x846DB33A, 0x91EB429C, 0x2287803A, 0x7B8A36DD, 0x7CD157B5, 0x7E89F9F2, 0x212C24EE, 0x804B3E4B,
+0x353CECE4, 0xD7B525BA, 0x391037E5, 0xE6A5734C, 0x981B4809, 0xE516FE0E, 0xA96046EB, 0x14CEFF48,
+0x27FCAF0D, 0xA5A95CDD, 0xF37D8435, 0x59611D4C, 0x63BD5A13, 0x3D16F3B3, 0x72BD77CD, 0xC9025A38,
+0xC432019B, 0xD393B81D, 0x90D3ACF5, 0x1F8D5AC8, 0x1CFECCBA, 0x71623050, 0xCB0B25A5, 0xF5644CCF,
+0x88307588, 0x263C5ADC, 0xB1F31D87, 0x2160C9F0, 0x576C176D, 0xF3B1B973, 0x80831366, 0xE03642A7,
+0x38F99842, 0x22AC6B1A, 0x3684C538, 0x2E3364AA, 0x346E0569, 0xBFF4015A, 0xD1C34617, 0xA76BB045,
+0x916C3975, 0x0ABC4508, 0x4ACA7D9D, 0xD39EB236, 0x3F74DCF2, 0x389C6B3C, 0x96267DF7, 0x03F99F38,
+0x1B0340CB, 0x48E546E8, 0xAC005CE6, 0xE0242DBF, 0x31850FB2, 0x5878E726, 0x2AB6572B, 0xC3FD2010,
+0x65C38D49, 0x928485EA, 0x75810DCC, 0xB4B26906, 0xD1932F47, 0x82CE8D70, 0x3AEA8311, 0xDE3044CD,
+0x63A63725, 0xA130D043, 0xA60DF126, 0x9BE4C04A, 0x6E204F96, 0x81F01AC9, 0xBE8FB75C, 0x00985704,
+0x01010000, 0x5F22009E, 0x50FB7F12, 0x460C72CE, 0x0F176085, 0x532DD198, 0xCC8488AA, 0x82BB0095,
+0xEAAC07FD, 0x9B21F83F, 0x72172177, 0xE5722F15, 0x870C4C1C, 0x0E9E2214, 0x37D69A48, 0xAB320736,
+0xE9A23FC0, 0xC14CB06B, 0xDBBC7301, 0xF6AB525C, 0xEE953323, 0xFF5E58E6, 0xAD777DDE, 0x392C6E9B,
+0x2A878008, 0x950B303D, 0xC1FA5E2A, 0xA4742FB1, 0x5A26003F, 0xF543F38B, 0x292126C0, 0xA2E283CC,
+0x3A19D10F, 0xB022F2D6, 0xC0BDBCA4, 0x73B367AF, 0x82BED57D, 0x162B89C9, 0x6A1B95DD, 0xE0F47D4C,
+0xDF51BD2E, 0xE7D6D0D7, 0x6F2D6F37, 0xD43A0FA7, 0x6EC36F8B, 0xBAEC4434, 0x7D8B5FE1, 0xD3069D4E,
+0x6D6F9982, 0x704DDF83, 0x7AC2FEFA, 0x8A5D8C32, 0x8FB38F4E, 0x484A99EF, 0x0B4EE9FE, 0xDDA5C89E,
+0x8B76198F, 0x4FEAA89B, 0xC09BFD1C, 0x2B2F5713, 0x6EE032E7, 0x7AAB8C41, 0xE2FBB8D7, 0xA9E8609D,
+0x79D291CE, 0x267DF37E, 0x408FA32D, 0xA7BE1409, 0x447F7BA9, 0xAFDD3FE6, 0x95B53E1B, 0xDB88903C,
+0xAA6469F2, 0x6C05342C, 0xABA52DC7, 0x609A4272, 0xF6AF732B, 0x015E8772, 0x81C59197, 0xCE1319CB,
+0xB547D4C0, 0x4CDFD06D, 0x60F18E30, 0x513C307C, 0x28A813BD, 0x0BB95237, 0xD35E3FC9, 0x3FB0919F,
+0x28248E1D, 0x3F861214, 0x30030C1C, 0xA26A1B8B, 0xDDC2CB0E, 0xF9686030, 0xB4150D96, 0x82D1C349,
+0x494D9C75, 0x7D14F300, 0x6AB7DBEC, 0xA4744127, 0x2C8C8817, 0xE8877BE3, 0xD2814E93, 0x1E0279BA,
+0xF9EDEB31, 0x1970FE8B, 0x92ECD286, 0xF0395E04, 0x3DF121AD, 0xC4682679, 0xA8CBD378, 0xF562371A,
+0x6581690F, 0xCE4CE4F6, 0x644614EC, 0x29ABE3E1, 0x2FA8FF8E, 0x886966C3, 0xFF45428F, 0x4E3197ED,
+0x53768714, 0x888CD946, 0xE9266A22, 0xC1ACA146, 0x5156E2AD, 0x1F462218, 0x4B6DA9F2, 0xB3D6B687,
+0x32F019BF, 0xE5BDCADC, 0x97983776, 0x5BA2E71A, 0x72E9897E, 0x770F1E82, 0x19ECBAE1, 0xB00E9328,
+0x23FC14E4, 0x40B36B1A, 0x1984B13B, 0x646A7382, 0xDA668FC2, 0x3EBA230E, 0x842451D5, 0xC526DBC4,
+0x9161BD0C, 0x77BB6B2F, 0x8320D682, 0x1AAAE6F1, 0xEFAD1607, 0xCCFD9A81, 0x64DBE2D8, 0xA544E16E,
+0x63DFF984, 0xD70BDBAC, 0x5413229A, 0x234F3BD7, 0x6E075CF3, 0x25609736, 0xB1ADF5B6, 0xE2E07119,
+0x93577B51, 0x46F1C864, 0x5647540C, 0x67672827, 0x42A4C3B5, 0x26D58090, 0xDD2BE98D, 0x20194A7D,
+0xED275093, 0x584663C7, 0x61115F72, 0x822377B9, 0xDFBB1D40, 0xF5AAAC06, 0x3FD07355, 0xCA6856D6,
+0x40C1EB7C, 0x607806AF, 0x93F4ABE7, 0x576FDEFA, 0x61FE570A, 0x00358E0C, 0xBAB12A3D, 0xB71F9027,
+0x88CCFC8D, 0xA3622E8D, 0x6B51ED2C, 0xDAAECB59, 0xEFD7698E, 0x36A7744B, 0xC33AD388, 0x78429AF7,
+0xA570864F, 0x6A5F1564, 0x5982D768, 0x5820B328, 0xA68AF554, 0xBF70F90A, 0x80F171D3, 0x1ACCC2B4,
+0xCE9747C3, 0x47124716, 0x041533B0, 0xC4AAAE12, 0x6ECB2792, 0xA1078BF2, 0x8788360C, 0x9915C65F,
+0x5B288A85, 0xEB172D6C, 0xF2254D56, 0xC7D01C26, 0x8D2DE66D, 0x75E138BA, 0xC5F1F034, 0x0569BE0D,
+0x0968F4FC, 0x16C4AF44, 0x7E0A3639, 0x1EA4916B, 0x7C21936B, 0x1A50D7D1, 0xAB24D806, 0xA4FCB2B1,
+0x6EEBB74E, 0x7D3DAECF, 0x8B3348F0, 0x43106CA7, 0x29F43549, 0xFCE61C61, 0x41F66902, 0xBC295E9A,
+0x1F453F3B, 0x3ACF69D6, 0x3DC40881, 0x5D52D079, 0x6BF46D5F, 0x349F2CF0, 0xF5C208B3, 0x0DACBD64,
+0xF8567F70, 0xEF20B688, 0x02D425FB, 0x3B255423, 0xDAEDB54C, 0xA1BEB818, 0x54835E6C, 0x2CDB7F5A,
+0x80576B29, 0x62B87441, 0x16B87682, 0xF75B0EB7, 0x3775D90F, 0xBFB801EB, 0x10DBD4CA, 0x959507C5,
+0x5AB65609, 0xF268CA1A, 0x675CEBA6, 0x1C4A18BE, 0x34C8760A, 0xF22B782D, 0x7E3D90F4, 0xC15965F7,
+0xBAF3EB47, 0x0EF82718, 0x5FC050E0, 0x9C480C1A, 0x0E6391CC, 0x84F34B17, 0x71F48CA5, 0xB247B031,
+0x5A0EB5BD, 0x26ACA6DD, 0x455A5B46, 0xA0C77A4A, 0x316AB0E3, 0x30CB8998, 0x18B0282B, 0xE4132341,
+0x600A964A, 0x8279BDA7, 0xCF357BF6, 0x9CCBC0F2, 0xF2CC6C4D, 0xDF223763, 0x043B992A, 0x5620611E,
+0xC43E4AA3, 0x84A60D4B, 0xEEB26DF0, 0xAC8D6E00, 0xF1A1B638, 0x5A860DE1, 0xFDAB059E, 0xFE3FF7F0,
+0xF6702308, 0x04BDB2FB, 0x0570B664, 0x123AC127, 0x852375E6, 0xE8A16E04, 0xE9FB384A, 0x1CAEE6C5,
+0x94876E33, 0x96995B72, 0x56A97FE0, 0x6D4F1A82, 0xA1478062, 0xB735CAF8, 0xF0694D09, 0x0DC113DD,
+0x2D37CB79, 0x748DF93E, 0x8EE2FE37, 0x44D764A5, 0x288A7636, 0x5803EB5E, 0x3F164606, 0xA173DD1C,
+0xA4730D76, 0x5983F229, 0x1141F9F1, 0x21BF1134, 0x33B27C3E, 0x65E053AD, 0x3DD8C1E6, 0x0F00809C,
+0xEE904703, 0x5A349482, 0xD3833615, 0x3E20E3A9, 0xE87938FF, 0xD89CA306, 0x65D3E2D3, 0x46207D2C,
+0xF2959DA1, 0x81ACA490, 0xB77A15C9, 0x42720B97, 0x97756B4F, 0xD9FA07A3, 0x810848CA, 0x6944A0DD,
+0x445A97AD, 0x9E13423A, 0x857D301D, 0x72AE40F9, 0x23AB3B03, 0xFFF54E72, 0x3D4AD2E4, 0x58E7B271,
+0x8FC821AB, 0x8FFD1A6C, 0xD8305695, 0xD09EBF5F, 0x67D13120, 0x1B9BB18C, 0x2232DDD0, 0xA782DB2E,
+0x916B51CA, 0x3EEF635C, 0xCE4F96DF, 0x068DF10A, 0x0241703C, 0xD8ED4CB2, 0x5B379EA0, 0x621178A1,
+0x6EBEB088, 0x690B8FCB, 0xE5EC4A27, 0x4CAA72A9, 0xD6D70228, 0x4D882E13, 0x86AC8FC4, 0x91869361,
+0x9AB3F7CB, 0x8106E5AF, 0x46265F3A, 0x809DF21D, 0x6D967861, 0x0EB0AAC0, 0xB381D423, 0xE32FE4B7,
+0xEF9604A2, 0x56E5D45C, 0xA7827E74, 0x616F8193, 0x49BEF9A0, 0x8104A0BE, 0x1D62CF8D, 0x12AEE46A,
+0x2BEFBE41, 0x12F5CF18, 0x88E9B788, 0x5CF43294, 0x5017E1B1, 0x653662FA, 0x0A41370E, 0x526ADDEB,
+0x54343F1B, 0xE0FA059A, 0xDFF304A6, 0xBD09F1D3, 0x440A8FCC, 0x0FA5EAAE, 0xB533A3EF, 0xC341467E,
+0x7127B83C, 0x23DC636B, 0x18F6787C, 0x4CC78133, 0x699A62C9, 0xF38DA440, 0x79DF0A99, 0x5E307884,
+0x29472DD0, 0x0CCCB748, 0x728BCFAA, 0x0000C0FC, 0x9A210100, 0x3F662200, 0xE4C64EE1, 0x2B611DC3,
+0x06D35F95, 0xB8C4E9F0, 0x4FAD91BA, 0xC1C66D18, 0x5C4F6EF2, 0xAE7DB47A, 0xF9B559F9, 0xE33CF7EB,
+0x6D1103AA, 0x1035557A, 0x16A9AD72, 0x07640A44, 0xF3DDFC33, 0xF88A9D48, 0x451B9EFE, 0xD749DDE4,
+0xFBE6C3B2, 0x45EB2619, 0xED264E0E, 0x89EC4FDA, 0xEBD0C0B4, 0xA1946878, 0x4B3A6A2E, 0x8BF95685,
+0x9EABD051, 0xCB9DD2C3, 0x12B78A34, 0x5713759E, 0x506A11C2, 0xE8AC4ECF, 0x42B0F582, 0x3DF18428,
+0x0DDCC395, 0xB0C4DF19, 0x0C2B7ECA, 0xE2B708E4, 0x21955A00, 0x35B678CF, 0x808A75C9, 0x20E6A4CE,
+0xF0819C57, 0xA44215F7, 0x4464A517, 0xF14EADAC, 0x195D67EF, 0x978684A7, 0x42FEDEEA, 0xC464DD5A,
+0x24F42A89, 0xFF849973, 0xA2488AA3, 0xFC3BE11E, 0x6C3486A1, 0xB2C2BAEB, 0x20717CC5, 0xBF3174B1,
+0x55601F81, 0xC90B4D6D, 0x67B76E6E, 0x44F4A7A0, 0x7C288DBF, 0x4C23B8AC, 0xFB5CA322, 0x67EE7ED4,
+0xB88BE4E1, 0x02042972, 0x351BA2EA, 0xEEBA21C9, 0x22785355, 0x1A8317A4, 0x7BA1A78A, 0x883AEEDC,
+0x2E8D7424, 0xD68F702C, 0x67FB0B81, 0x9F0779C2, 0x32997C39, 0xA42E902E, 0xB2826DA0, 0x5476F904,
+0x5A030E9F, 0xF1FA6F0F, 0xFCCE5570, 0x7CD3ED94, 0xBC3C26FC, 0x8C32A19E, 0x3B67CFCC, 0x6A697D19,
+0x328A3F6C, 0x3FE7602E, 0xBDB232DC, 0x6A776E4F, 0x3E525771, 0x96F68078, 0xAEE86D4A, 0x2DD471D0,
+0x93C6284A, 0x106A42CD, 0x2F29CB58, 0x2435676D, 0x2AC522E5, 0xB5FDC860, 0xFF6C6FAB, 0x15334B46,
+0x6A42C1E1, 0x15CA31E3, 0x277FFAEF, 0x9F71EE88, 0xC333A2ED, 0x9A584A4F, 0x3A3F33E8, 0x3CF1975B,
+0x451BA1B0, 0x6D39BB3F, 0x113EF102, 0x86624CB3, 0xE0962C04, 0xD471647D, 0x9F95EA97, 0xB6D70536,
+0xDD2668A8, 0x190E396B, 0xD7BDD6B7, 0xC479A994, 0x3615FCFB, 0x836D0AB9, 0x19E7A869, 0xAA038D6D,
+0x107AF9FB, 0x50E6FBAC, 0x09CE89CF, 0x658DB65B, 0x0C444930, 0xF00977CB, 0x9B36A2FC, 0xEC29C9F7,
+0x42B63385, 0x6FDA95B8, 0x805841D7, 0xE2B6F96A, 0xF9B4417D, 0xB6D6C9A1, 0x1D3FD804, 0xD2552FB1,
+0xF666ABC1, 0x918D1FA7, 0x538D9F45, 0x1E8E5535, 0xAB40BDFE, 0x566F27C7, 0x81892853, 0x338EE128,
+0xCE15BA95, 0x61467234, 0xF12564FE, 0x8701AF1B, 0xE0E1A623, 0x575B2B8E, 0xB33EAB91, 0x1C9112E0,
+0xF4627650, 0x5EB6961A, 0xC1899354, 0x3121F26C, 0x5F02D278, 0xA1FE8E32, 0xB7C7C43B, 0xB470D795,
+0x0B6D8A5F, 0xE026C4FA, 0x60A90F7B, 0x19489909, 0xF6C302B0, 0xD4E4940B, 0x71C871E3, 0x5C3E3A45,
+0x97AA6388, 0x25A6AE38, 0xF45D1E43, 0x57EE0F6B, 0x01000B13, 0xE737E5B7, 0x0034996D, 0xEE14565D,
+0x35A2F91A, 0x90CF3820, 0x2D4C40D2, 0x1ABFA2AC, 0xC2143383, 0x85FA6F53, 0x695D81C7, 0x1C587DF0,
+0xDE524511, 0x1BCC6C21, 0xB203403D, 0x22AF1CF5, 0xECCC3C17, 0x0F442B66, 0x70135DAC, 0x516FF668,
+0x45ECCC78, 0xA2687E8B, 0xF1416C37, 0x59FAD291, 0xE1BE1152, 0x2906BE92, 0xC5C74997, 0xE972FFE5,
+0x8C16CB5A, 0x4AFCFA3B, 0x1D2D3F20, 0x38204472, 0x17A23430, 0x85AD62DB, 0xFBE1DED2, 0xD90F0F0A,
+0x385CF4EF, 0x4DD8F3DE, 0x13462887, 0x629FAF44, 0xB27607E8, 0x5E9DF8E9, 0xC01CA373, 0x18CAC679,
+0x1BCA812A, 0xFEE7E0D6, 0x0FD1831B, 0xD02343ED, 0x6FB30B53, 0x53AAFBEA, 0xEFA23D99, 0x35FD135B,
+0x5429648E, 0xBDEA4C10, 0x472F015D, 0xC6E578D7, 0x960498E0, 0x35AFF200, 0x2B6B586F, 0xFEA47FEE,
+0x553E7460, 0x724BA51A, 0x0D3155D7, 0x8E8BA726, 0x28A43A6E, 0x0A42A982, 0x58034E09, 0xBE651034,
+0x4507C924, 0xBE8DBDF3, 0xA9ACAFF5, 0x8D1DE848, 0x97E9D199, 0xB72A2AA3, 0x1556B976, 0x612CE307,
+0x9EC87A23, 0x8E99CF74, 0x8D95A934, 0xC4EC0FDB, 0xF011549E, 0x08FE2391, 0x1B336405, 0xDD7F69D4,
+0xD1A28575, 0xC5F72A49, 0xA9F24476, 0x6E5E1553, 0xD510AE30, 0x96ED8C60, 0x26B54D52, 0x1A2AE13A,
+0xD64F00DA, 0xF027BAD9, 0x79AB8EB6, 0x8A9ED406, 0x31E09A45, 0xD59489BE, 0x6264C993, 0x51ABBF82,
+0xF34DB7BC, 0xC7E7BA78, 0xDDD048B6, 0x07FFC06D, 0x1D067A48, 0x6FF58D7A, 0x9B9E9FB6, 0x09CE0494,
+0x41BF75BD, 0x320065DD, 0xE50729B6, 0x27EC9B3C, 0x6EFE8E3E, 0x16828D09, 0x71AB5AF2, 0xEA2D15CD,
+0x495F9700, 0xADFC14D4, 0xCC0EC470, 0xA693565E, 0xB64DA2EB, 0xF22CC653, 0xC3BA89DF, 0x31CE5621,
+0xEA64A46C, 0xC6157184, 0x3EBE90F2, 0xECF26059, 0x1866AD31, 0xB1522435, 0xF6443B15, 0xB605B2FB,
+0x6AEF291B, 0xCCB9E9EE, 0x6683AA06, 0xA1CFE56F, 0x17E89D8A, 0xABB83C26, 0x7852DBD7, 0xFF7D4979,
+0x3C7B3D2A, 0x70EC0B68, 0x8062766F, 0xEAC91D45, 0xDA886E35, 0x6D7BE67A, 0x9056268E, 0x3A59457F,
+0x5E05C859, 0x892D836F, 0x80F080F3, 0x9D2B257B, 0x703820C0, 0x03ED1C41, 0x38ACC9D1, 0x4F2F6491,
+0xA5FB42BE, 0x9CAE223D, 0xBF2E61AA, 0x8B97494A, 0x7552B4B8, 0x9C77C6C5, 0x425DFB93, 0x5D98B1E5,
+0x3776A40F, 0x76268BEA, 0x2DD504B4, 0x813F57E2, 0xD27CE520, 0xCC26693D, 0x3D3F0F98, 0x8C4A2021,
+0x38D5340A, 0x10DB5E0C, 0xF290425D, 0xF9E3316D, 0xE2B1A60F, 0x4BCF6245, 0x0F570C53, 0xFA2DCD37,
+0x60FA1F06, 0x50E20D85, 0x8E5AD6A5, 0x44C6896F, 0xC9E7DFE7, 0xB2258C31, 0x0D8E7BC1, 0x4543CF5D,
+0x65A6CD65, 0xA5CA550C, 0x778DAC7B, 0xCC740C14, 0x2B2EE2F8, 0x423506F2, 0x0BB6848A, 0x0D48EAB6,
+0xCE6ABF7B, 0x6F918B8C, 0x6351DA8D, 0x1623BA0E, 0x82E8C6A3, 0x24F5002F, 0x4A6AA3C5, 0xE9764059,
+0xA708AD15, 0xEF4476ED, 0xB92E3735, 0x2E3D1909, 0x8FF19B7A, 0x80FEE96A, 0x2EE1F404, 0xE27B3EC4,
+0x4C18C087, 0xE2E2C33E, 0x1ACC2D48, 0xC737A8C8, 0xC755D4A7, 0x80CAD767, 0x898EB6D0, 0x68679B4C,
+0x779D689F, 0x35CF060D, 0x543B22A2, 0xDA1D1B93, 0x39C28BF4, 0xC12C5D54, 0xC5C412A1, 0x2030406D,
+0x1474D5D8, 0x313C3114, 0x4D41E6FE, 0x8B165A03, 0x33A3D2A5, 0xD2325ACE, 0xA6F9A9BC, 0xDAC22821,
+0x46B35E5E, 0xD1F00FC4, 0xAA88AE0E, 0x1F160847, 0x6B004DCC, 0xB24700DF, 0x96C8A1FB, 0x230CCAE7,
+0xA64A0DEB, 0xE61510EF, 0xDF4ECBB6, 0x075E0CC4, 0x31B749B9, 0x3FA0ABA3, 0xA9FE4B88, 0xE0759BBE,
+0xC633195B, 0x025008C7, 0xDE3B3A4E, 0xBB353585, 0x67A99C6A, 0x72E1DE43, 0x31D71D70, 0xBD3EEF46,
+0xC4CFFDFB, 0x50421220, 0x23A51276, 0x28E98864, 0xD4BC2B3F, 0x63BF4E20, 0xC739A7BB, 0x62029412,
+0xCB09A61D, 0xEF7196BF, 0xDFB1CB9F, 0xBE002DD6, 0x368FE9E6, 0xC913F0A5, 0xF51622ED, 0x61D228CF,
+0x1BD1C1BD, 0x1ED170E9, 0xC44DAECC, 0xFA053BC0, 0x2C2C04DC, 0x248A5B32, 0xDD452773, 0x959D61EF,
+0x3F9FB1F6, 0xBAC634C5, 0x75CDC8B3, 0xB5A21A00, 0x3ED07AF9, 0x2C2039D0, 0xD2604779, 0xFCC4A452,
+0xF05E68F4, 0x302F6EA7, 0x274AEE30, 0x7C7D28F4, 0x4696CBB1, 0x60348D5A, 0x5BD4C812, 0xBA2934D5,
+0x3C65532D, 0x3C46B8F2, 0x9F1DB078, 0x4C9E8778, 0x7A81B78E, 0x1F61A6C1, 0x4B4072C3, 0xCF4FE389,
+0x05542C74, 0x4003FEFD, 0x7B7E7C64, 0xDFFA93F1, 0x7DC3753A, 0x28065C90, 0x46AEC7AE, 0xC7D95123,
+0x87EA62D0, 0x0128F209, 0xA23AF8F9, 0x4EECFAE7, 0x43195065, 0x0ECB3975, 0x50F55FCC, 0x958A95E4,
+0x481D1FF0, 0xEE79DF99, 0x1BAB96D5, 0x80A7601B, 0xCEF2B9EF, 0x3777E4A4, 0x077D24A3, 0xAA60A7A5,
+0xAA810C5D, 0x75F67339, 0xFE0EB623, 0x193345A2, 0x72930D85, 0x97DC8F61, 0xC89ED1E2, 0x09A1E173,
+0x739233FA, 0xF5955C35, 0x2ECD60EA, 0x09F76B9B, 0x4C84E84C, 0x5185CD97, 0x06879A64, 0xA8C3BB39,
+0xA8813DA0, 0x4BC2F164, 0xF624A51C, 0x74724C11, 0xE24138FA, 0x56232D20, 0xE6BC17D6, 0xA7CD6288,
+0x707259C1, 0x99B15DBE, 0x72416A79, 0x5F590AE1, 0xA9216B9C, 0x70A83CCB, 0x73CC943E, 0x45CA890C,
+0xBB87C621, 0xCB0DFEEB, 0xAA3C5062, 0x7CCB87C3, 0x3BC8A446, 0x7B06596E, 0xCF4A1E55, 0x89EC6834,
+0x4BD834AB, 0x0F65813A, 0x85A05529, 0xDEB026C6, 0x07B6E91C, 0xACDF99D6, 0xFFDA30F2, 0xA8BC27B6,
+0x68E76F70, 0x93F041D0, 0x71219317, 0x21365A6C, 0x906D7368, 0x7E9F8B94, 0x98F3128D, 0x900AFE87,
+0xEEDDBB4C, 0xA854CC20, 0xA3EBAD66, 0x31EFAAF2, 0xCA3D87F2, 0x38A3369A, 0xE49F2E94, 0x933C2A51,
+0xE25DD1C5, 0x3178EB08, 0x97E06DED, 0x03108329, 0x9D4A79AC, 0x5BE1B8CE, 0xA723B604, 0x4ADDD15C,
+0xB097E40E, 0x9EE94FF7, 0xEB2F0558, 0xE5DFCCDA, 0x89B87AA7, 0x8EFA5624, 0x357D9A9B, 0xF07F5683,
+0x072C46CA, 0x8FDCA40E, 0xF5DBE9D7, 0x66910104, 0x963954EA, 0x75FC2C85, 0xFF52DE81, 0xD2FF759C,
+0x41E387AC, 0x20F14EE8, 0x5A7C9159, 0x4E4CC4B2, 0xDE3DDCD6, 0x991BF6AF, 0x9BA44C6C, 0x8D0C6B54,
+0x8741ABDB, 0x10D84A0F, 0x6422837E, 0x85739376, 0x9FBA7776, 0x72B528DB, 0xA8C2DFE6, 0x523B23FE,
+0xBEF84F04, 0x32EEF44E, 0x283D8A4F, 0xEB36B0D5, 0x895EEEAA, 0xF172CA6D, 0xFEE5132E, 0x4D6327C2,
+0x640C3FC1, 0xB527B675, 0x377A66BE, 0xF7C9C199, 0xA2EFDDA4, 0x754A98E1, 0x65D1A2E5, 0xC18C5DBF,
+0x50BAB1E3, 0x92F1BEA0, 0x238957D1, 0x97F94F92, 0x882BA467, 0x87B26FFF, 0x344CBED6, 0xADF0837F,
+0xE3E3CA57, 0xD1C5FF1F, 0x8E89790B, 0xA1C59D91, 0xFF5C525D, 0xC0389C63, 0x0B5651C0, 0x105E1600,
+0xE45C160C, 0x0BFB2CC7, 0xFA3E1D41, 0x492EB992, 0x646BA31A, 0x986B6BF4, 0xD044EE01, 0xB89E24A7,
+0x72DEA585, 0x2C53BAF4, 0xBC789577, 0xFD148DD1, 0x838EE417, 0x5CAEE01A, 0x9F226A4B, 0x07A74226,
+0x9C229FA5, 0x56599FE2, 0x875BC1D4, 0xBD9D757B, 0xFD701151, 0xB0330BFE, 0x347EE438, 0x81305EE3,
+0x1F2F59D4, 0xD713E4D9, 0xC6215556, 0xFDA96F6A, 0x0F63EC97, 0x43FFD914, 0xB1E10723, 0xE6EAEFCC,
+0x6DE5CEDF, 0x473CFCB8, 0x494C7067, 0x3F4DADC4, 0x5FDF58F1, 0x6B7016DA, 0xBBE5B4E6, 0xBFCF6C0F,
+0xCDD14A09, 0xF1FC3166, 0x0F8995A9, 0x87446FC7, 0x3719D3F4, 0x85D1AC30, 0x6FAE918E, 0xD2883E6D,
+0x527BDEA8, 0x9B259C1E, 0xEA8A94C6, 0x6ACA2558, 0xF84BC8CB, 0x12AB13E7, 0x131BE15D, 0x6E05BDC6,
+0xE7096B21, 0x9EB6BC09, 0xC6E0333B, 0xC0BD647D, 0xE60B9291, 0xB013B4A0, 0x23E91261, 0xC33ED860,
+0xA60A58AA, 0x32FB3AB7, 0xC5251834, 0x4703989D, 0x6689D900, 0x23546628, 0xD2D251C9, 0x4C0CCBE0,
+0xC4698E48, 0x6EB4C76F, 0x0820F227, 0xC8B7DC17, 0x4B5CF7B2, 0x491A1D28, 0x1E2E2A0A, 0x96FE6019,
+0x7D531243, 0x81B6FF02, 0xB21EDB7E, 0xD8A739B0, 0x61F4EA68, 0xAD4D233D, 0xC542E1B1, 0x530A0CA0,
+0x795700BE, 0x9EE546F5, 0xC9C8F9D1, 0x29953C41, 0x6D3246FE, 0x55BDB973, 0x77BFFC36, 0x9398DBAB,
+0xBCC3935F, 0xC592D50E, 0xE8DF0064, 0xC0512E95, 0xBC8E25BD, 0x0254E538, 0x053DC30D, 0x11813F62,
+0x00E5EE38, 0x77E991DA, 0x49984693, 0xF56CF2AB, 0x9AF008C2, 0xFD005A7A, 0x5946798A, 0x0B1B702B,
+0x6895D4E1, 0x22954C3F, 0xC6B4F30A, 0x8DF352B1, 0x8D4756AA, 0xE89BB800, 0x15FAD038, 0x74CF6B7E,
+0x2079F382, 0x6045C898, 0x2A72DC4B, 0x93A903CE, 0xED2AF67F, 0x4982DB16, 0x653F56B9, 0x8AE86873,
+0x1A768FE1, 0x8538A697, 0x5D31C6AE, 0x36129695, 0x9F1CCD3F, 0x8509D827, 0x7D09E822, 0x55E3AF58,
+0x0DA3AD96, 0x808CB2F1, 0x4CEA2558, 0x3C2BF0C6, 0xF930B15A, 0xD2C4388B, 0x87A513C6, 0x98C57A12,
+0x9C62C285, 0x458C25F4, 0x05860790, 0xAF4FF983, 0xFF8DE363, 0x9934AD00, 0x2ADB213D, 0x92379C8D,
+0xDB33A425, 0x0914E3D3, 0x6AEF5FC6, 0x6BBFBC8D, 0xD862B66A, 0x7BFF7DCE, 0x61008CB4, 0x332EBFC5,
+0xE0CAE6F3, 0x7EA3F13F, 0x981E268D, 0xBC716C7B, 0xACF8CCEC, 0x7536F9A7, 0xFBA55703, 0x05436DEA,
+0x6DBA8E25, 0x4F4FBAFA, 0x875199F6, 0xA480EB21, 0xE3927402, 0x9ADB59B4, 0x94642BB0, 0x11AF41CA,
+0x85E55152, 0xA5F0CAA5, 0xF78BCCA3, 0x8C5A289D, 0x261B8FEC, 0xB22283D2, 0x42DB8D32, 0x24F09521,
+0x6978D7B6, 0x4838F32A, 0x85C2ECCA, 0x878D96A9, 0x16CCB778, 0x9F691059, 0xABCF746F, 0x6FA78D6E,
+0x91BAC79C, 0xBEB1D932, 0x4681B354, 0x05CED41E, 0x48EC77D1, 0xF3A32ECC, 0x5A4B3D44, 0x7FDA6839,
+0xCC518212, 0x96A781B9, 0xBC684703, 0x6AF505E1, 0x84FA776E, 0xBABCACAD, 0xD2B973EF, 0xF40BF935,
+0x11F483B0, 0x8F144924, 0x011F8780, 0x640135EB, 0x6A360646, 0x5355E628, 0x88708EB0, 0xE0F606C4,
+0xFCDE37AF, 0xB49D2254, 0x2F2E2D2E, 0x8CF37704, 0x3A212FC1, 0xAE2B4494, 0x742BD3E4, 0x30948CFD,
+0x3DF2ACD5, 0xE638F237, 0xE4E706EB, 0x2489902D, 0xC2566841, 0xFF223FB6, 0xC7F80F08, 0x74F6E802,
+0x46FD6458, 0x6044C35E, 0x47E50448, 0x1305523A, 0x58085780, 0xDF6F42A9, 0x8DEAA06A, 0x79742696,
+0x5E9F14D1, 0x64AE1E81, 0x291C17BA, 0xD4A2E649, 0x0E000985, 0x2AB69492, 0x8F564798, 0xA98CA9D9,
+0x770496E8, 0xE93DFEF1, 0x51BD4208, 0x49027757, 0xCD96B25A, 0x21C3F920, 0xA3FE6B31, 0x63342749,
+0xA5F01C28, 0x903BB7DA, 0x82C364A7, 0x28976582, 0x8BAF142E, 0xB9266119, 0x45C8CDB5, 0x10F45EFD,
+0x89101A57, 0xBB736412, 0x1C14386A, 0x1BC195EC, 0x4EF839A7, 0xD649A879, 0xD06190A7, 0xEFBD9ECD,
+0x9B8EAA6C, 0x94900DBB, 0x70C74E18, 0xA33F67C8, 0xED14315C, 0x6709A7EB, 0xFD19A173, 0x7C87AE26,
+0x58E2E288, 0xA8EEC105, 0x030C2692, 0x135C839C, 0x46862314, 0xDC166087, 0x6C62DF6D, 0x08F78C78,
+0x1C3ED37D, 0xC8A83770, 0x5BCE313D, 0x8EE4F36C, 0x45C00539, 0x02B4E966, 0xDCAC3762, 0x8C9E8E11,
+0xF100CF3F, 0xE3385485, 0xFB1F5C51, 0xE6DFD7B4, 0x4251FDF5, 0x62BF589B, 0x8ACA6614, 0xD85B71C6,
+0xC39F3764, 0x01226E80, 0x38C3E4F0, 0x60ACB217, 0x3E91A06A, 0x2CF29CCE, 0x63986294, 0xC50D0FC6,
+0x9BE9D1AF, 0xE8127098, 0xB4F08FE9, 0x0A4711B3, 0x16621F0D, 0x3A8D2331, 0xF704DC89, 0xADD9406B,
+0xC8DDD6FC, 0xB48E970D, 0x7999617D, 0x9C7FBDA3, 0xE9E69F69, 0xED1CC873, 0x4A0F5A53, 0xB3E2EF35,
+0x27184EA0, 0xD47C70B0, 0x5DC54C2E, 0x81D36CB7, 0x328E5DA6, 0x0B516CFD, 0x06776532, 0xD18E69CC,
+0x51A014CC, 0x8CD70778, 0xC47C3F89, 0x8252E66A, 0x13FA4D9B, 0x71FF9023, 0x05CE586A, 0x382E8144,
+0xF9D5D5F7, 0xA5667A5F, 0xE74A3987, 0x7153AED5, 0x2C75F118, 0x5E46EEE2, 0x68E69522, 0x3CFE5443,
+0xE8FFCECB, 0x468F0026, 0x994F74F0, 0xF51975E9, 0x1ED6E64A, 0x9A023B22, 0x153F8894, 0x4228B94D,
+0x15411041, 0x24C17663, 0x35A20DC5, 0x3A7117C4, 0x03544B12, 0x99F40E8C, 0xEC7DA90C, 0xF4526E06,
+0xC456018F, 0x40079BB7, 0x660071FB, 0xEE8DB1E6, 0x7A1B74B6, 0xB774D6F8, 0x86E14CAF, 0xEFE15C72,
+0x1050BD6D, 0x9E9FA578, 0x0A29AA40, 0xA5BD10DC, 0xE944451D, 0x74219018, 0xA18C2CAC, 0xD6EC31FA,
+0xF6C88AE5, 0x5CC02603, 0xD86A2735, 0x4E0F6FAA, 0xEE8CD145, 0xB4C69CA3, 0xF3912635, 0xFE0B8688,
+0x3B2B47D5, 0x8A19F531, 0x14648E78, 0x150CD5B4, 0x13956C78, 0x80B3D93F, 0xF1A9BD21, 0x04CE0E46,
+0xE3C268CA, 0xFDEAC243, 0xC6D7190F, 0x54B1AA84, 0x27E64F8A, 0x4E12690A, 0x39AD1658, 0x3C38DB69,
+0x6B01B38F, 0xFCF1C994, 0xAA0CDB81, 0xF851195F, 0x768BA46A, 0xEDA56E80, 0x66216DF0, 0xF8DA5B4E,
+0x3E55D807, 0x1D4EF2C2, 0x3A2EA996, 0xF3E1C904, 0xBB20D8CB, 0x869D8E75, 0x9B39593E, 0x21F44759,
+0x13560FAF, 0xB8D9FAE6, 0xB24FEA5E, 0x27FFCE9D, 0x17A91B0E, 0xA61132E2, 0xE9A1DE19, 0x766089BA,
+0xCD56F7C1, 0x39BB26DA, 0x602E5CE5, 0xD4E37AD7, 0x326D42B4, 0xC3C37044, 0xBF4AD2AB, 0xC20BDC98,
+0x202C235E, 0x8AD48873, 0x57C36051, 0xCD641078, 0x38344ABD, 0xA5A34B37, 0xD9F8A36D, 0xE26FFAF2,
+0x5938DB65, 0x1563A488, 0xA57F6A33, 0xC5C358A1, 0x16DE5927, 0x33DE0911, 0x9C9C47A5, 0x3BCA04D7,
+0x96CE107F, 0x3FAC4787, 0x1E923BFC, 0x566101B8, 0xF87EC982, 0xA7B4ED85, 0x0DE0373A, 0x689526CB,
+0x88CEA149, 0x5B66C0E1, 0x3372A05B, 0xE8D5ADFE, 0x8D4F09C2, 0x9B084509, 0xDFB2DB7C, 0x32FED159,
+0xB25B7C4F, 0x823017C2, 0xBE685AC2, 0x9AA6BBD3, 0x5C4577E1, 0x6DC0FC99, 0xB3925E61, 0x0AEC62EE,
+0xB3101F47, 0x8C23EF19, 0x06BF9233, 0x539B6F79, 0xB8FBFD1F, 0x56780CAA, 0xD9D190F1, 0xCF6F5735,
+0x74BA28F8, 0x88D7E625, 0x8A257D32, 0xE6623B18, 0x99A81047, 0x1DDC6C39, 0x1579126B, 0xF4294A1C,
+0xB1F6AEA0, 0x787E0983, 0xD522CFDF, 0x519B63B5, 0xFF85D20A, 0x62C41648, 0xF489E82F, 0xBB8F3005,
+0x95C18594, 0x1979917F, 0x730A83DA, 0x14499F80, 0xA3C9D195, 0x8B031C38, 0x004024E1, 0x01010000,
+0x6324009E, 0x56FB7F12, 0xA0A3E54B, 0xCA860B57, 0xF9CEC6B4, 0x162D4F23, 0x9604F7F2, 0xDCF6855A,
+0x079A34FC, 0xF8E47C6F, 0x7E05E4CD, 0xEF70F0D3, 0xF0DC566E, 0xC8A8D4C5, 0x8A8D119A, 0x2A658D0B,
+0x592C04B8, 0x4AAF8855, 0x13EA9C6E, 0xD04D8D1E, 0xB88F7D7C, 0xCE72D908, 0xA64E053D, 0xBE3E8294,
+0x28FC5A49, 0xD3557D91, 0xCECDFB89, 0xBF97837E, 0x3691936F, 0x3E08BE26, 0x607EC78A, 0xE3E276F3,
+0x11344FB0, 0x4068AF4C, 0x950EAEBE, 0xBAAC3E3E, 0xF901A539, 0xA3E90A2B, 0x7BEFD86B, 0x96F46D0D,
+0x7E15004A, 0x17A1EBE8, 0x6ABE136C, 0x2658F6F2, 0x5A287612, 0x3AA78702, 0x94BD5252, 0x5FC088D4,
+0x434D237B, 0x4F5C87E9, 0xD71DD113, 0xC190BB1D, 0xC4A9BA66, 0x9BA9D78D, 0xC6242492, 0xDBE8C0E2,
+0xC00DC24A, 0xF1BB3555, 0x9B6FFAB2, 0x50507A43, 0xC2A0EA29, 0x38941C8C, 0x38CF98CB, 0x7BD2EA0E,
+0x7DFE1065, 0x56C6A5F6, 0xF661B5CA, 0xB19A586B, 0x48132BAD, 0x763CE36A, 0x72E6BC2F, 0xB52D884A,
+0x816FA9C0, 0x429DA045, 0x20696FE1, 0xC86C502D, 0xE64D3D35, 0x820CF895, 0x050D5952, 0x80DD2C12,
+0xCE1BF970, 0x9C9C6999, 0x699D8144, 0x8482285C, 0xD52F696F, 0x9D194A7B, 0xC5A2AF74, 0x70BAC35D,
+0xF323B3AA, 0x2F0DABB8, 0x8859A39D, 0xF243EC4E, 0x62A20229, 0x21A32C3D, 0xCCC73513, 0x4E5651C0,
+0xD8CECF41, 0xD8E2EB2A, 0xDF9DFAF0, 0xEE45D84A, 0x9DAE1834, 0x3E5CD672, 0xB69229F0, 0x9D14A0D9,
+0xB36033FA, 0xE62FC809, 0x28E3FAF4, 0x2E908F79, 0x29C804EB, 0xD8F2E8E7, 0xF495D33B, 0xACF53197,
+0x34EE6A3E, 0x6769A8BE, 0xB789C161, 0xDC4E38FE, 0x5A0E2D79, 0x21A3F4FF, 0x940C6602, 0x133CC641,
+0x45BB2FE9, 0x114A6F99, 0xF434C27B, 0x9634C66C, 0xD382DF59, 0xA1B6DDDA, 0xE7FC1107, 0x1CE6DDAD,
+0x01827AA3, 0x06316C86, 0xEDAA0414, 0xCF68BE30, 0xA4C9B585, 0xD7281640, 0xCB09466E, 0xE6BEEB50,
+0x65BF1B88, 0x1A987130, 0xFADE5246, 0xA519BAF8, 0x319B8211, 0x7C904965, 0x08E03E87, 0x69E12D7C,
+0x4B8CA32B, 0xD70D1EE3, 0x0355FD44, 0x1C7EE846, 0x77EBE464, 0x31793525, 0xA0D04E3F, 0x9E04DB64,
+0x04DB7254, 0xDE33BE7D, 0x69A7E591, 0x500E6E7B, 0x8137973E, 0xD031EE96, 0x497863F5, 0x70DE27BF,
+0xE3F5B6EF, 0x7743AB4B, 0x41630CCB, 0x01C2348D, 0x1B840F24, 0x5C011A9C, 0xEDAF01FE, 0x4FD8DE07,
+0xA39BC2B4, 0xE947F55A, 0xE2EC9C4A, 0x26D956C7, 0xC74BCDB8, 0x689E0DA0, 0x49728CC0, 0x13876FDE,
+0xFF9A9700, 0xFF52552C, 0x20E52E1A, 0x79F93A31, 0x9C1AFDBA, 0x8CD959BE, 0xD2DB2B93, 0xFF94495D,
+0x806EE693, 0xB4A88063, 0x7A9356B0, 0x0CAF1F09, 0x3E1E8D8B, 0x30EE61DE, 0x34FC2572, 0x8839C4CD,
+0x1FD009B8, 0xC3E43E04, 0x9FD66CBB, 0x8DD394CF, 0x0253FF60, 0x84498C0D, 0x811A15C0, 0x7DA4237D,
+0x14F67A4F, 0xE779891B, 0x7992148E, 0x8E13CBE3, 0x9EB9CF3C, 0xCA6C47BF, 0xCB62E82F, 0x5E894F5D,
+0x7480958B, 0x9A4DC49C, 0xA952ECC3, 0x18292993, 0x882280DC, 0x841382E6, 0x516C45EB, 0xAC25ED52,
+0xA78A2C9A, 0x241CA7A9, 0x13675BA7, 0x98574E6B, 0x6448A406, 0xA98A5FF6, 0xC9F08415, 0x8F06BCAB,
+0x5C532982, 0x12FC65FB, 0x65ED71BB, 0x70366660, 0x42B27483, 0xC90AC24E, 0x003E7E1D, 0x30BC6AFE,
+0x52ADB160, 0xEFF77F6C, 0x574FC2EF, 0x3165A0FA, 0xD9D60EF4, 0x28C0ECA9, 0x587694AB, 0x5BB00677,
+0xBC40B81E, 0x0AB355FA, 0x53F025CC, 0x2E90F640, 0xC3F1E90B, 0x718F491A, 0xBE4B09E4, 0x14FD1DF6,
+0x9410462F, 0xFC06AB4F, 0xE2DB5CD8, 0xB982BD1A, 0x6EBEF2BF, 0x4AEA6104, 0xA333134F, 0x02BF127F,
+0xA48DC1BE, 0xD486CF3C, 0xD3C7974F, 0x3466CB10, 0xC4883DF3, 0x7FD08748, 0x692A8CA7, 0xABE10583,
+0xEFE12D69, 0x06DC6C2E, 0x2FD7AA98, 0xC5369C69, 0xEF07AE39, 0xEFF268C1, 0x2EA4DC88, 0x347F9D99,
+0x36E1A2A1, 0x661E7984, 0x16BE6BDE, 0xF272A6F4, 0xF93D9E1A, 0xA135503A, 0x65662BD5, 0x3E143586,
+0xCEAE4192, 0x4EA19E35, 0x050A4AE1, 0x9883D4E9, 0xDCC97631, 0x60BDA914, 0x98DD91E6, 0x6573E13B,
+0xB9E436A8, 0xF223840B, 0x0F46A7B7, 0x8EC89ECC, 0x07B545EC, 0xFED4C868, 0x81381F10, 0x96838978,
+0x526B8219, 0x0D0E4383, 0xFF427044, 0x996D2812, 0x93D6E50A, 0xF71202A8, 0x81D088F2, 0x8A9E875A,
+0x3FBE0DE0, 0xDB68241B, 0x7AEE52C0, 0x77812D02, 0x9E5FDC18, 0x732BBC57, 0x7BFEB04B, 0xEFBD3987,
+0x396E53F8, 0x8EC97F82, 0x4A9433B0, 0xD5479888, 0x5087174E, 0xF6725EDA, 0x40117016, 0x71316720,
+0xB34C1E59, 0x90C5F5F3, 0x92ED6E5A, 0x8FF9B700, 0x932BEB23, 0x8ADA3C92, 0x53B82572, 0xE6175832,
+0xDAF3F4C2, 0x94CC5F7E, 0x4A0A6CF7, 0xA431FAA2, 0x8C5F8D44, 0xA123989E, 0xB5C721BB, 0x8E4F2F1F,
+0x84C358E3, 0xE9B9A3F8, 0x75C2F8A9, 0xDA6A125A, 0xF52E5112, 0xB15D7EC7, 0x6D056A1F, 0x854516BA,
+0x6FA2C0C4, 0xB5B6E1A7, 0x1E74D677, 0xC4A46ED7, 0xA99940E3, 0x87884728, 0x408189F1, 0x01000000,
+0x24009E01, 0xFB7F1265, 0x9E865350, 0x5C145E47, 0x61607063, 0x1A5CF925, 0xF16F7D0B, 0xF79B6E9A,
+0x0256EA8C, 0x13D4FFE6, 0x6E3A486B, 0xC42CA631, 0xA718F5EE, 0x3B628029, 0x859ED95F, 0x0BB040F8,
+0x41C2331A, 0x4C5A1804, 0x59324C71, 0x60B1496A, 0x01CA1B6E, 0x4ACDA6F1, 0xD8DA1834, 0x07F62D91,
+0x2E46328B, 0xA4FF153B, 0xB57E284D, 0xFEF23222, 0x3D4AB046, 0x798AA3C4, 0xB5F79DA8, 0x9EF3ACF5,
+0x4E66EF70, 0xDD8AB049, 0x66F5FE2F, 0x82DC4C8F, 0xF3E4FA58, 0x29508ABB, 0xC08A7737, 0x6F8DFDDC,
+0x48C5B852, 0xC0D3F359, 0xBB779C53, 0x139AB7AA, 0x83E067BF, 0x9DF18163, 0x484B46FE, 0x60B8475F,
+0x387498E7, 0x07FE6E42, 0x37266E35, 0x783982C2, 0xF71FBDBA, 0xA5C7B989, 0x08B7627A, 0x55CAB861,
+0xE009998D, 0x0FC119CF, 0xB5EB2D63, 0x48C0A746, 0x0160F57C, 0xCFD27829, 0x0A0DE2C9, 0x1FD1D845,
+0xA78B24FD, 0x24ECDC6E, 0xB8A74730, 0x4C4D6503, 0xD3282A73, 0x09100A17, 0xB8448426, 0x8379C206,
+0xF892A623, 0x800E561E, 0x7C916B4D, 0x74D4AD47, 0x51B2B0B8, 0x9F73D358, 0x2E95B95E, 0xEDD6B247,
+0x06E2C20E, 0x2AAB3427, 0xF10514C3, 0xA523F250, 0x2B455A20, 0xE0CB802A, 0xFB32C4D9, 0x2C0D5990,
+0x712A56D5, 0xF6D9C82C, 0x649DA51E, 0xCBFBE19B, 0xA90E66C9, 0xA3D75E51, 0x3402F07E, 0x721F7B40,
+0x4F60CD7B, 0x94C3D04B, 0xC508D88F, 0x993397EE, 0x541DAC0F, 0x33B9C83E, 0x36584DDF, 0x22EB0010,
+0x2DDDFC00, 0x5111B596, 0x283B7534, 0xE0D91867, 0xF19D5E6B, 0x4E7DC0B5, 0x1CC7A7D0, 0xF8BAB9FB,
+0xC2D39004, 0xF80FE89E, 0x8D9FB4DD, 0xBFBFC58C, 0x7A13A4E2, 0x49B2DDEF, 0x1DC624EE, 0x283F923F,
+0x64546F65, 0xE4A3D448, 0x890879AE, 0x67C374EB, 0x7FF7A653, 0x2FC51AD9, 0xDAF37A63, 0x5A879E41,
+0xC553CDC8, 0x4A5100CD, 0x00885B99, 0xD3D79415, 0x42381F24, 0x5E5C9ED3, 0x1BD54104, 0x43746C43,
+0x2C97F3B2, 0x27259ADC, 0x46122E52, 0xE1C7A985, 0x215D07C7, 0x5A1E8A4F, 0x4FF13051, 0x1DD1299B,
+0x936B123C, 0xD1C61C5C, 0xBF6D11CA, 0x8B84F5A5, 0x441F34B6, 0x094A1464, 0x34A5DECF, 0x6263DEDC,
+0xFA56CEAE, 0x1D2B6015, 0x7AB19C3D, 0x7A57274C, 0x441E3DAE, 0xECC8A749, 0x3796A55C, 0x97CB693F,
+0xBC51E892, 0xDF3068E8, 0x40E9EEED, 0x3AFE39D4, 0x9D56FAD5, 0x32227D7C, 0x7DA7C741, 0x8778D28D,
+0xAC7B2C92, 0xF872697B, 0xA3CC5669, 0x4D01E746, 0x0853CF95, 0x9FC57893, 0x4AFF6823, 0xA45862E7,
+0xB5EDEFDA, 0xABD1862E, 0x4C04E31E, 0xD1B77F32, 0x3C81F2A3, 0x3E8659CC, 0x3351980B, 0x6F7FE09E,
+0x98D05D54, 0x226C6D2D, 0x18351C89, 0xBAF2EE41, 0x5877E3E9, 0x799E6C5E, 0x902F38C4, 0x87DBBD23,
+0xE5D52B50, 0x510E0E30, 0x23CD5455, 0x10E9AFA2, 0xDAB538B2, 0x9DFE5156, 0xD9B893FC, 0x0D5F6F6B,
+0x828C57DC, 0x1B04A9C6, 0x20E48E8E, 0x217BAFFF, 0x7C7F7F38, 0x3F7502BD, 0x4A452F88, 0x99BE1BDF,
+0xD1BDBF62, 0xF383C8CE, 0x0552B711, 0x237A978B, 0x60F54D94, 0x79AC5440, 0xD25DD635, 0xCE1A3EC9,
+0xC021E3AF, 0xE592FD9F, 0x017DCDB5, 0x3539B790, 0x90BE0EC6, 0xD44C6161, 0xAE0952C5, 0x32E4DBE4,
+0x51EDB347, 0x67070935, 0xBB0A2329, 0x69F4CD0A, 0xF6C4E027, 0x536AF166, 0x75C6BB4F, 0x2B88C773,
+0xCD1CA01F, 0x58A3BA3C, 0xBA590E41, 0x53A41F5F, 0x400933E1, 0x6B6EAA99, 0x88D851AD, 0x365F0512,
+0x868F1772, 0x9E9F8662, 0xD7134647, 0x466A255D, 0x8CAB480A, 0x7333AA89, 0x2681B709, 0xED4D5206,
+0xD463F218, 0xD80FBAA2, 0x43C0BC7E, 0x0A676FCF, 0xDE9E5C82, 0x7D25B233, 0x8B113992, 0xA78D5667,
+0xE8429D0F, 0xDE065488, 0x1C78B551, 0x153E8920, 0xD468E09C, 0xAFC159F0, 0x72257DBF, 0x462648C8,
+0xEC559808, 0x7C191BA3, 0xABBD8C2A, 0x2BC09EA5, 0xB805E2D9, 0xE2520184, 0xCB5FD53B, 0x89BF2E58,
+0x3C362234, 0x617745A5, 0x00005C71, 0x9A210100, 0x3F6C2400, 0x496C5CDF, 0xA91E2C3B, 0xACD7B09A,
+0xA3B686F1, 0xC4BDBA31, 0x2AE69619, 0x57D6B3B3, 0x322BCDC0, 0xB2460926, 0x4FC81E71, 0x1C4EF5EF,
+0x9BFA1218, 0xF15FA23F, 0x3031B85F, 0x20E7CA14, 0x3B8D4FE3, 0x0259D7AE, 0x9B1A7056, 0xD9F1AD71,
+0x22FC1092, 0xE7BD4A1F, 0x2F9153EE, 0x9F7C43C4, 0x2F19196F, 0x87284096, 0x1EBEFD18, 0xBAF98C7A,
+0xA114C669, 0x37C8DD9A, 0x84822C97, 0xBBC202FC, 0xF405D666, 0x248EB44D, 0xCB3A4814, 0xC8166629,
+0x4EF3EA33, 0xBC961ED0, 0xEAE1BC30, 0xFB586B57, 0x47EA9B4D, 0xBD510E3A, 0x20F53874, 0x6C3A5227,
+0x70D28FE9, 0x9342DDAC, 0xE1EA57D5, 0xFD4E77AA, 0xCA9B8CD2, 0xDD5EF39F, 0x15C80D37, 0xAD850AB4,
+0x54D08653, 0x6AB7B061, 0xD31AE498, 0x5BF5F544, 0x64F7D941, 0x424B806F, 0xA600F0A7, 0x164C3E52,
+0x929BDCBD, 0xC6F9B96A, 0x133C38EC, 0xC7E5C425, 0xCD9B678E, 0xA2537BE1, 0x99D583F3, 0x5C0B343B,
+0xAA5020A8, 0x540827C1, 0x86BB461C, 0x6A67B89E, 0x7102574F, 0xA25C1DC4, 0xF7E24D3C, 0x2338A189,
+0xDA76FB7D, 0x14E398E5, 0x864E189B, 0x1D820878, 0x26D0181B, 0x66B203A4, 0x520DA4C2, 0x3D6E3482,
+0x6DA281C2, 0x6D789F4E, 0x1DA04439, 0x47CCC94E, 0x1AE57A61, 0x43954507, 0xE684E74F, 0x2A674AB2,
+0x0CE05194, 0x1BF5D385, 0x387271EB, 0xEAC4D6A3, 0xBCB8F70A, 0xDB178F5E, 0xD95799FA, 0x98F64B23,
+0x179A78E5, 0x541120FB, 0xF083FF60, 0x80395EF9, 0xB2FF2A90, 0x54393CCB, 0xD106F65E, 0xC02CB373,
+0xEDB84FC7, 0xD4D5ED4C, 0x82B73C27, 0x96409026, 0x1C897D4D, 0x8DD0D9E9, 0xECBD5B11, 0x89B7E5DD,
+0x285F0B64, 0x3F5DF0C8, 0x9840EB1E, 0xA7BDF5F1, 0x503ADAFB, 0xF503E1F4, 0xE6B55EA7, 0x220AEE1A,
+0x180E43DE, 0x65BDC5AE, 0x6B80BB2D, 0x82C45EDF, 0x14FB161D, 0x53E7D8D8, 0xE3BE1896, 0xC28BEB46,
+0xE6B871F0, 0x90688759, 0xF35B2B0C, 0xE12B3375, 0xD8C3B47B, 0x05C0777A, 0x5EB9ED11, 0x2CC27CB9,
+0x6A6B35E2, 0x07A96F0D, 0x37904AE3, 0xECA168A4, 0xA9E74766, 0x8FB6D7B8, 0xEB9A3772, 0x1759D86B,
+0x0166C786, 0x4A4729B3, 0x65BE4B2E, 0x6E1D0880, 0xB02FE1B0, 0xDEE945BA, 0xA2449FD9, 0x1260D1E1,
+0xB298E524, 0x02030F7F, 0x49EE818C, 0x29F91B88, 0xD618F7FB, 0x4F1BB4DC, 0x07D7DB6A, 0xBEE4D6E2,
+0xB615DC97, 0xB79B0579, 0x287C090B, 0x5A7CFA67, 0x6543A08A, 0x64DEA9A0, 0x4C444A66, 0x33410AEB,
+0x4660AD5E, 0xDCC94438, 0xFC2F96C7, 0x4F7EAFD5, 0xB3F18035, 0x0B9C3198, 0x6C4BFAE6, 0xDD89C2A5,
+0xADA9D317, 0xB0A5C237, 0x71581986, 0x83838EE6, 0xBAB98068, 0xC8704BE3, 0xF3629109, 0x548A04AD,
+0xB7076702, 0x0B721C09, 0xDF2AB16F, 0x7707C770, 0x55FB3581, 0x255A02CD, 0x7AAF1CCC, 0x6C585203,
+0x109609E1, 0xCA389298, 0x32757A0E, 0x5F34991C, 0x7AC1B71C, 0xE4FAD066, 0x5DB74B25, 0x31C58BB2,
+0x729254C6, 0x85AC4EB2, 0x7528F703, 0x51AE9FD4, 0xE095E93C, 0x1B43F7EF, 0x4D8342AB, 0xF8D8D22A,
+0x8DADBC4B, 0xC8500F09, 0x5C5B7178, 0x5B0BC040, 0x3416F348, 0xD450062D, 0x6642311C, 0x89648F9D,
+0x5F4BC425, 0x8000FA87, 0x57DF696D, 0x3F48917E, 0xCFBF0146, 0x5CF3BB2C, 0x078C1301, 0x1C1CC0E4,
+0x2306085E, 0x161AA9CD, 0xF35C1BE6, 0x9661F76B, 0x48483D4E, 0x31C2C3E2, 0x0BCDE1A3, 0x922A1565,
+0xAC6EE9FC, 0xF0416729, 0x43391740, 0x122C87C9, 0x6F9222C3, 0xB9D35539, 0x6211DD4F, 0x3C1C79C4,
+0x909C9A78, 0x487EF998, 0xEA6D757A, 0xE58D6989, 0xA5F775F8, 0x58A90A02, 0x7FD5CEC4, 0x764D0EEF,
+0x28EEEA49, 0x28BEC08F, 0xF4857730, 0x345FAF91, 0xCF79FC81, 0x85609E4F, 0xFC4F48BC, 0x4672AA0F,
+0x003E6809, 0xDC6D461C, 0x4B68A16C, 0xC5A7525C, 0x4FCB44A1, 0x30964AF1, 0x01A97020, 0xB9269A57,
+0x16DC2C0D, 0xAA39424A, 0xF4D7AE94, 0x1CD99C07, 0xBDB4AD80, 0x4602BBC5, 0xFFAC59B0, 0x37FD4812,
+0x977B1DD5, 0x946E5891, 0xADBCB373, 0xEF57E373, 0xEBCDC1C6, 0x089D74CB, 0xF623FDA3, 0x2365E398,
+0x47AF4862, 0x9E7E04C4, 0xD5D89256, 0xCCAE1EB6, 0x5BD7031B, 0xE4D1DA8E, 0x014DC7D0, 0xA3AA81EC,
+0x51D2A9BA, 0x9A5AFC96, 0x3B7C8397, 0xA5D9FC38, 0xA6869068, 0xF8C12F1C, 0xC8DE12D3, 0xA387DCC2,
+0x026BAB62, 0x60621F49, 0x89276254, 0x20A72FA2, 0xC69A1E39, 0x5BC29765, 0x017D0A3A, 0x0C80E973,
+0x499F95B0, 0x8AF0424D, 0x55A52939, 0x24B4E566, 0x2E498A73, 0xD9C5FAC3, 0xDF27E095, 0xE9115F3F,
+0x11971FE0, 0xEC2E0F30, 0x43F0EC8F, 0xA3465587, 0x5BC3EC9D, 0x568BF17A, 0xA4A2CFE3, 0x6DE1E251,
+0x5FFD9B85, 0x86105CD7, 0xD380EC9B, 0x58594BC7, 0x8043EB20, 0xD7099DC4, 0x6DCC258C, 0x83CFD08E,
+0x0715E418, 0x8CD5BE9C, 0x80709999, 0x05A23BB2, 0x6125F82D, 0x530BBEFF, 0xFB511618, 0xAF16D334,
+0xF6092246, 0x48DECD5E, 0x393377D1, 0xA2C917F5, 0x4193DBF9, 0x52866C5A, 0xF4CB010B, 0x62BFD62E,
+0xB1658FD7, 0x0F0E7EA0, 0x82611102, 0xADF82443, 0x793B0EDB, 0x1708EB4F, 0x630DB824, 0x0644FE98,
+0x0E2796AD, 0xD09B994C, 0xCFC7E114, 0xDF366889, 0xD63A1E8B, 0x65884DDB, 0xE87C41CD, 0x18C86687,
+0xCC8232E5, 0xEC598958, 0x5BF40555, 0x3E39DD05, 0xC72ABFDD, 0x7F1AA326, 0x36C38BE7, 0xBDAE4977,
+0x45DF8D24, 0x669534CA, 0xFF3D64D5, 0x722D98E9, 0x52460B1A, 0x2DC8E061, 0x5A06325D, 0xEC6B6167,
+0x051047F1, 0x4C927E74, 0x2035FCA0, 0xED6B0FB1, 0xA40EE9F3, 0xD5607477, 0x59A5A45B, 0x93E205E3,
+0xED52A6FA, 0x6199E7B5, 0xD7D3F55A, 0x4C4CEABB, 0x7C6EBCA1, 0x42226D92, 0xD722F1EF, 0x1F6A5664,
+0xC7390A39, 0xD03ECF28, 0xB99D144F, 0x2435A44C, 0x44FBF149, 0x8FBC6E3D, 0x5CAC5C05, 0xC37BA0A2,
+0x305984DE, 0x6EAA85F5, 0x679144D5, 0xED44A62D, 0x172FEF81, 0x4C4EA9CB, 0x4F38A3CA, 0x79CE723D,
+0xAD44F686, 0x194629F8, 0xD5266EA0, 0x6E54BB75, 0x900F10AA, 0x492BCC8D, 0xCC8C2295, 0x24F17119,
+0x0A807CAB, 0x3C977E7D, 0xC683FEE0, 0x58827DB8, 0x9E6FF725, 0x32B193C4, 0x6C3CA861, 0x496AC59F,
+0x5CB09530, 0x8270048B, 0x35926539, 0x1BA9C529, 0xD110E8F6, 0x8E4D8B85, 0x617BA3C6, 0xF289EDF8,
+0x798C8001, 0xF1B33EEE, 0xB600C0BE, 0x68390468, 0x81211334, 0xF7264CFD, 0x1B0BBE19, 0x7B8EDB5B,
+0xE3D90604, 0x6B91C283, 0xEE9ECF10, 0xB7314F2F, 0x73533B25, 0x07E01969, 0x0244F3DA, 0xF7D270EE,
+0xAF9F92F8, 0x639000BE, 0xBC4C533A, 0xC543B764, 0xFDA0909C, 0xB98A7965, 0xA63F03E9, 0xC9BA515D,
+0xDA32036F, 0xBD6B11FC, 0x04C24F1E, 0x8383B0A4, 0x4DCD38F3, 0x32270804, 0x564037C2, 0xB9ACE9A7,
+0x75B9643A, 0x00E6CF94, 0xB38C9C42, 0x9AFC6B15, 0x6F95E15C, 0x7B0743C8, 0x17D4AC04, 0x4E363A18,
+0x10E68C5B, 0x4FE4A011, 0x5F508C4E, 0xF13E5A4B, 0x7DE9BC3D, 0xDAF1709A, 0x0F87E9CD, 0xCB6844AE,
+0x3C3D0E96, 0xAEFD1B31, 0xC51112AD, 0x48451D90, 0xB359F959, 0x6076C597, 0xA7B44A15, 0x5EEEE990,
+0x325BC5B4, 0x976A4E4D, 0x3EAB3D9A, 0x17D95797, 0x9CF3B210, 0x655819A0, 0x263649BA, 0x742B9F56,
+0xAED4DA4A, 0xCB4795AC, 0x3441A2EF, 0x72660890, 0x59E3A48E, 0xDBBE7963, 0x3C5B058A, 0xDB3C13D2,
+0x15B32B6A, 0xFF501702, 0x6C8740BD, 0x26C533C3, 0xB90741DD, 0x2724AEA7, 0xAAB9B43E, 0xFB102B03,
+0x88DE408A, 0xF58A68E8, 0x6B86D780, 0x18C371F3, 0xF901D44C, 0x206B4029, 0x6457076A, 0x66857528,
+0x38D5BD8D, 0x06A40278, 0x4187276A, 0xFD88F83A, 0xFA1BF389, 0xECBA974C, 0x82BCFC7C, 0x95006CD7,
+0x378B84BC, 0x10150B0A, 0x10EF5D75, 0x48B9FC7A, 0xED1F783B, 0xD3637EEB, 0xC58AEB18, 0x40DEB55C,
+0xCC07C920, 0x0AD71465, 0x3E6F19A9, 0x06D51FA6, 0x95C7C2B0, 0x1F1EBB7C, 0xA81A13C2, 0xF9645C9A,
+0x92757521, 0xDB7FCEF6, 0x73872C8D, 0x5CB64B92, 0xA1E02ACD, 0xA47B64F4, 0x4D69F041, 0x11DE51CA,
+0x5B30800A, 0xB853D5D4, 0xF2EDF3FB, 0x40C918E1, 0x2ED6AA29, 0x5484B736, 0x3BB3D9D8, 0x7BCD32F1,
+0x20D5A926, 0xBEA011A3, 0xC17644C2, 0x8867AD19, 0xD693B043, 0xCE4A32F9, 0x576927C6, 0xCF1E31A8,
+0xAA7D7357, 0xCC10C373, 0xFE9E3071, 0xD4EC86D6, 0xDA16CF8F, 0x10A0BC3E, 0x50CDD718, 0xF6ED86D2,
+0x49E7632C, 0x4452066B, 0xAB6F3584, 0x7D161A14, 0x8A868212, 0xCC27904C, 0xA73282D5, 0x304AEAFD,
+0x0A924AD1, 0xDA53C475, 0x4143EAAC, 0xEE345FF5, 0x13F7CE09, 0x0178C903, 0x14765558, 0x74AF0708,
+0xD4B05BF1, 0x8961E09A, 0x0455047C, 0x766036B9, 0x4C9683F1, 0xCF49C044, 0xB5DEB316, 0xA76CCBC0,
+0x9219FB72, 0x27F1BFDB, 0xC3EF0DE1, 0x0EBDF8B0, 0x7D7ACB76, 0x4FD081B0, 0xA2A56DBD, 0x3C4725E6,
+0xAADACB6A, 0x14065D6C, 0x06607C18, 0xF1A552F7, 0x9568943C, 0x1B93A5CB, 0x59144601, 0x3F25EFAB,
+0x75645529, 0x15AAF8D5, 0x8A8B3C89, 0xC68DC3A6, 0x1A13C9D9, 0xA9E69AC2, 0x8D47B0BC, 0xCA5AEA3D,
+0x00380CA5, 0xFF3EB313, 0x2DEC416B, 0x96383133, 0xF9ABE2E2, 0xA480519C, 0x9CE23086, 0xC8AB7C59,
+0x8F8A5621, 0x2C5462D9, 0x4505EAB4, 0x3EB5E8C2, 0xD09CEDF0, 0xD1DFB1EF, 0x53A2E72F, 0x4EE116FD,
+0xAD76300C, 0xEB6B0861, 0x1B245288, 0x6B69CA39, 0x28AB81D7, 0xB3C6D257, 0xFAC444DB, 0x996E2897,
+0xDAEA0542, 0xBDAB8093, 0xD0052D2E, 0x9420516F, 0x6A72830A, 0xD91E1B4B, 0xD25298C9, 0x198ADD1D,
+0x14F1B448, 0xB7E45339, 0x033C78F5, 0x3804CED9, 0x4A7AB4EB, 0x5709F46B, 0xE3B6E72D, 0xD0F68542,
+0x8B78C4EE, 0x426BB364, 0x58CDD4DD, 0x7FDB4C0E, 0x09E123E9, 0x80CF3B51, 0x28723912, 0xBF9CBD11,
+0x0ECF0D36, 0xD03AFC1F, 0xCFCB4097, 0x3BAA8BBE, 0xCB69EC90, 0xD8F2172F, 0x6C3D98E0, 0x452FC40E,
+0x2D96B5F1, 0xE65ACD80, 0x6B6C32AA, 0x5E6289E3, 0x2937EAC4, 0x16B8CF62, 0x440608D2, 0x0847BD3D,
+0xC59E207D, 0x60867539, 0x09AE5DDD, 0xC5C299B3, 0x6FFFE571, 0x79C9BC5D, 0x21177184, 0x087C567A,
+0x0F6695F5, 0xA95D73BF, 0x9481C864, 0xAD59116F, 0xC4F585AA, 0x62DA4D69, 0xFA66380C, 0x97F700DC,
+0x1080EFF0, 0x7792BE3B, 0xC42E0981, 0x7C37AE89, 0x84906830, 0xB819BCE6, 0x92B35CAF, 0xFC2925AC,
+0x97359950, 0x14CBA60C, 0xB57E7340, 0x9E0F41B0, 0x8DF6185A, 0x7DA78AE4, 0x4BC8FA92, 0x12239BD6,
+0x38F9C69A, 0xEAAA4D1B, 0x644E10F5, 0x8618C5B5, 0x8508C0E8, 0x56A5036A, 0xE6593B2E, 0xFB6E2EDA,
+0x22ECBA48, 0x9CB288F2, 0x46B49597, 0xCE5E0819, 0x06330204, 0x760AC25D, 0x7E115439, 0xD0791196,
+0x1394BC0B, 0x8273F71B, 0xEF0E275B, 0x5CD2015C, 0x7E73E26B, 0x2D5B5E24, 0x2D4C910C, 0x42F647ED,
+0x43260447, 0x9B7AF41C, 0x8B096339, 0xDB304B37, 0x9854F273, 0x0AEF8B89, 0xB09D830A, 0x53BD6084,
+0xFEC83242, 0x51CF39EB, 0x09F23FD9, 0x60CC7BE0, 0x60A6E632, 0xFDEC0A85, 0xA6FBA2D6, 0xB662ECB4,
+0xA38E6D91, 0x7972730E, 0x1AF465EB, 0xF8B75BEB, 0xE3483685, 0xDD3C98A5, 0xB5C655FB, 0xEF670628,
+0xB0D562A6, 0x7F4FC85B, 0x2B041BF8, 0xA8CFCC4C, 0xFDFFEC2B, 0x9191B019, 0x7EEFC9DF, 0x930CE9EE,
+0x81646D9E, 0x60A2D1D4, 0xD48EEE34, 0xADB2BEAB, 0x54EE0AEA, 0x8333DEE8, 0x48E53332, 0xB4322ACB,
+0x2D3D1E3F, 0x2F82455A, 0x15E9115F, 0xC5EC180B, 0x67B4783F, 0xA63F3004, 0xFFA70591, 0xFD44E75F,
+0x23934592, 0xA5A9DDA5, 0xAA933D27, 0x35D9B48B, 0xD939D858, 0xB0CFB2E9, 0xB1F4EA3A, 0x9780F8C5,
+0x54B45FE7, 0xDB0E9BCE, 0xE05EE570, 0xD1A903C4, 0x84ED314B, 0x3BEC4936, 0x186B39B9, 0xFFC29746,
+0x81DC8C98, 0x42331F21, 0xA5ED8A3B, 0x5435F4E1, 0x58E188CD, 0x1DA78284, 0x644DEDD3, 0x822728B7,
+0x9A3E7359, 0x22C29F1D, 0x9DD2BCC9, 0xA14D4699, 0x83DD4151, 0xE0EE092E, 0xC707A9AC, 0x9A169734,
+0x5185DB8A, 0xA6A24A23, 0xDDE9F495, 0x261926CC, 0xE520C774, 0xFB8E7D2F, 0x186B8D28, 0xA932C996,
+0x42790ACE, 0xF858B142, 0x92ED290F, 0x2EBED8BD, 0x227D7BF9, 0x35984842, 0x0D454A22, 0xE235F928,
+0xC0A3237F, 0x062373DD, 0x82475632, 0xEFB02F57, 0xD5535F21, 0x188CF6EF, 0xE560C790, 0xBA7B3560,
+0x754D97C3, 0x7EE37268, 0xDC14788C, 0x0B52C055, 0x3847A080, 0xE071EB93, 0xB7ACC5A3, 0x51334522,
+0x2491B8ED, 0x946A2646, 0xBC4DC5AA, 0x76079794, 0xD54618E1, 0x709BB225, 0x89A3B909, 0xBFAC056E,
+0x73309003, 0x18D3ACA7, 0x9A96183D, 0x65633A7F, 0x49CE84AD, 0x6F5173ED, 0x093E7811, 0x630DC214,
+0x25A7509D, 0x96C59AF8, 0xAB921838, 0x24411E24, 0x54A174C6, 0xD264C735, 0x63FF3F43, 0x8D19B3D2,
+0x1DA725B4, 0x344FAF3B, 0x92691961, 0xD1163C62, 0x98321CDE, 0x8361DD0C, 0x9830A2DB, 0xE5823FBD,
+0x9648E1EA, 0x8FFA4DE3, 0xC5F920AC, 0x65BF1A69, 0x6379550C, 0x0AFF297A, 0x706E7345, 0x83337C3C,
+0xE1D0BCE9, 0x0E0F09BF, 0xE85DE6AD, 0xE547B3FC, 0xCB1D28B1, 0xB1CC67F1, 0xB6DA57D3, 0x65A7E73A,
+0x4811B02C, 0xE4080CDD, 0x2F44FAFD, 0xA9424B15, 0xDAFE0404, 0x4DEC05D2, 0x6B2B87C7, 0x1699DB2B,
+0x0E8159EA, 0xE29C9604, 0x1204C199, 0x4FD7E0FA, 0x4276A0AF, 0x04A2180B, 0x4C68D843, 0x1CE9930D,
+0x1CBBBF53, 0x7207C857, 0xCF52DA2F, 0xBBC6911A, 0xF02A924A, 0xE4C94EF5, 0x2B4F6E5E, 0x08A643B3,
+0x43EEB676, 0xFD91EF49, 0x8CE41F7E, 0x90344614, 0x8C375C9A, 0xD058A5D3, 0x38372F12, 0x0B5D3545,
+0x398D6E3D, 0x98575261, 0xAEDE9014, 0xB7E6D926, 0x59111532, 0xCFEF8EAE, 0x1F6AB00D, 0xB7FC666B,
+0xC04BB60C, 0x5BBB8B27, 0x74B20366, 0x5F753027, 0xC00FFACF, 0xB459150F, 0x7D97CC95, 0x75CD070B,
+0x8C9E696E, 0xC95ADB68, 0x4BEB39CE, 0x4C82DAA4, 0x4CE52496, 0xA4B32C18, 0x74582F19, 0x18C1600F,
+0x263E930F, 0xD458ADFB, 0xB031F343, 0xF55C4EF3, 0xB1C48948, 0xB738FC38, 0xE96EDE79, 0x6B7BDE67,
+0xB7789A17, 0x8228D0BE, 0x4E016A76, 0x5B7D250C, 0x8C192052, 0xF0A65E1D, 0xF42DCFF2, 0xE8F28817,
+0x4E657B44, 0x984546FF, 0xA8315F89, 0x431E2A00, 0x03DA621A, 0xC218B5E9, 0x884DBD89, 0xD7D6AAA1,
+0x6AD1330E, 0x91707B51, 0x5FC4DE2F, 0x251B9947, 0x9F1A997D, 0xA9E60D7D, 0xA91B1B86, 0x7FD05D20,
+0x6C4686AA, 0x8C372570, 0x1F5270C7, 0x28C374F7, 0x7ABB88C6, 0x1EC75186, 0x75383672, 0x8E514288,
+0x28DADF88, 0x129FF911, 0x3A7ABB73, 0xA6E2EEE3, 0x14DEC4A4, 0x1F140784, 0xFADD76F1, 0x405B3F7D,
+0x875E33FE, 0xFA542061, 0x60B8CD9C, 0xFCB33E5C, 0x58F4FABC, 0xB30A1062, 0x8CD995DE, 0x767C655C,
+0xA5F85C6E, 0x65982CA8, 0x21746DB5, 0x672D64C6, 0xC5C64AB6, 0xF803BB6B, 0x700C5C6A, 0x4DA826B9,
+0x036D23D1, 0x57944A73, 0x67A8D653, 0x78420464, 0xF2E4D1AD, 0x8E52491D, 0x3BB85841, 0x978EAC36,
+0x70EAAC95, 0xFC7ADE7D, 0xE588D17C, 0x2AE4A64A, 0xF5D557B5, 0x25261C48, 0x8FBC53E8, 0xE4553417,
+0xF5C820F3, 0x365D1A29, 0x22DF7BFC, 0x5AEE849A, 0x64C223B7, 0x64AFF99A, 0x4A173842, 0xB18B33B8,
+0x7DFA3451, 0xE6C64B05, 0xAA6F38F7, 0x4A54884F, 0x8358C6C7, 0x59644F18, 0xB5111C0B, 0xB5737F4E,
+0xFADCEF01, 0x0B88FE64, 0x99117AED, 0x218ADC9C, 0x83E242EE, 0x5D79A8E6, 0x29D34092, 0x5138608B,
+0x7CC7EDE4, 0x16605A34, 0x64C8D337, 0xB09A0854, 0xAD0D9EBB, 0xA68FD124, 0x642CEB09, 0x6D6EC980,
+0x1533B184, 0x64C7A968, 0x601E20C4, 0xF0D292CA, 0x860D0AC6, 0xD8B633D2, 0x29E53C4D, 0x79FA75CD,
+0x962BF841, 0x6D1DF6D5, 0x65173CEF, 0xAF9BF960, 0x958A8F82, 0x9CCA9B68, 0x3AA4156B, 0x1D51BF4B,
+0x41D244D1, 0x5279FEF3, 0x3C162935, 0x1D794773, 0x4741AD67, 0x3BE48B42, 0x76473746, 0x58E0DFA1,
+0x0D4C682E, 0x2E672E69, 0xA54B28CD, 0xA6AFAFBC, 0x4E36236B, 0x03D747DE, 0x0129CE2A, 0x2DC53919,
+0x6D03FB73, 0x442F58F4, 0x2DBCC24E, 0x324F86BB, 0xCFF41AED, 0x98C44177, 0xD4C2648B, 0x671ACDA1,
+0xAA55AB35, 0x172F3A93, 0x443AE744, 0x215E562E, 0x39E206CD, 0xDD7E00BB, 0x692D3158, 0x7412CE21,
+0xA7DE1A87, 0x5BBB961D, 0xF1C0675D, 0xBF864725, 0x651EFC95, 0xCBF70678, 0xA4B4FF1B, 0xEA01A4DD,
+0x015A5CE4, 0x6C29665D, 0xFA10E930, 0x5DA494D1, 0x3DBF17A8, 0x22B88601, 0x64CD6624, 0x4B79F821,
+0x702A069C, 0x52465320, 0x70C4053E, 0xFA2C864F, 0x7CE06F07, 0x5D8A256E, 0xD2783B3B, 0x07DF53A1,
+0x727AE04F, 0xE9B7AA94, 0xD4776E0E, 0xCBE6B0DB, 0x79301AC8, 0xF2561D7A, 0xB7FC7F2E, 0xA03A32BE,
+0x45F378B0, 0x5DEAF285, 0x34417C1E, 0xE1B0CD16, 0xD8785BA1, 0x60B752B0, 0xAE836DC7, 0xA038E026,
+0x4C1A4D7B, 0xD4C5F11F, 0x4B4FC95E, 0x19383F2A, 0xD849837C, 0x990A91C5, 0x9F839653, 0x856EE41E,
+0x8A921283, 0x2F773438, 0x0056EC96, 0x44C5BBDE, 0x42E81FDF, 0xB7034F53, 0x78EA9438, 0x3751B5C0,
+0xA6281A4F, 0x45F8EC83, 0x28E6CA4C, 0x51ACD786, 0x8CE246D6, 0x67983141, 0xFBEC96A7, 0x21FEA605,
+0x4D7A0355, 0xC7BA8C5E, 0x99ABE27E, 0x499D4C67, 0x8002A9A3, 0xBD9CE96B, 0xC37907D4, 0x90CB5598,
+0x045E5B8E, 0x1F8B49FB, 0x39258D71, 0x6F3ECC3B, 0x44ACFFEB, 0x28B0A811, 0x6C9D14D2, 0xF7A069C2,
+0x8E637D76, 0x327EFC9B, 0x567352B9, 0x9E10EC2D, 0x9AE3D684, 0xD5A5D7B1, 0x6FAFC9FC, 0x9CD188C5,
+0x79DBF344, 0x3F4FCA15, 0x55240DC8, 0x3E10C746, 0x2ED038D9, 0x78405003, 0x1FF32851, 0x25272033,
+0x24A6DBF1, 0x317AA06C, 0xE16B99AE, 0x494DEDD2, 0xE38F1AD0, 0xAC009EF8, 0xF41ABF81, 0x950052F6,
+0x4E6E27C3, 0x4403F2EC, 0x6F4EB3E8, 0x3498EEE2, 0x4B6370D1, 0xE40161B8, 0xFF3C7500, 0x7ED5EE6F,
+0x6C148B9E, 0x659924D1, 0x537261A0, 0xDF80737C, 0x4A0507FB, 0x44852E4E, 0xDF34D3BC, 0xF086F388,
+0x6C23A981, 0x87659798, 0xA6144E02, 0x114E4D4B, 0x104CEFF2, 0x1A1F366B, 0xC5EFD11E, 0x2F87C84F,
+0xEAD3DD05, 0x151BC02E, 0x50E61EB6, 0xD0576138, 0xC40BD27D, 0xD0C10DB9, 0x07F8F9B8, 0xBB8DC6C8,
+0x000000F2, 0x009E0101, 0x7F126926, 0xB30555FB, 0xEFD6A02D, 0xCA5BF12E, 0xD8F80374, 0x9811CF98,
+0x85507699, 0x15C6B416, 0x2518B55B, 0x1B07F4BE, 0xCDAF6EE0, 0x5153D6D0, 0x30EA396B, 0x34CCD048,
+0x1F8616E7, 0xF08D980E, 0x8C31F207, 0x9CBA567C, 0x8E083629, 0xBF093891, 0x2C0EA8CC, 0x6ABE2418,
+0x4E63C89F, 0xD9315EDD, 0xD2CEC4D2, 0x51813CE6, 0x5CAA997E, 0xE9274135, 0x56B47B53, 0x002B212B,
+0xD42886DF, 0x7FC9461A, 0xFF244E12, 0xA6ACB405, 0x9E2C8A33, 0x2943A00B, 0x0B3BEBCB, 0x4F64E3B3,
+0x83CF405D, 0xE6E8A59C, 0x85FB12C3, 0x021A7227, 0x3D86A5FC, 0x550844A8, 0xE0893300, 0x536E5B79,
+0xDEEEBCE4, 0xAD19BDC7, 0xAA8A8474, 0x22542869, 0x26C1088A, 0xE00983E8, 0xD9BF1485, 0xE8431786,
+0xD0387DB2, 0xDE166351, 0xFEBBF7A5, 0x1FB7A9AD, 0x57DD14B3, 0xBF92817A, 0xE054A962, 0x94B72635,
+0x9B289941, 0x84207065, 0xC972B9A7, 0x8633166E, 0x511C62B3, 0xA65DA036, 0xA310F114, 0x090D985B,
+0xBAB1AAD0, 0xA6A11721, 0x125A55F4, 0xB73901B4, 0x1BFF5866, 0x445CB99F, 0x58E2CD2C, 0x7B089567,
+0xDC9B8DEE, 0xC37AC32B, 0x21012015, 0x88EA8E5F, 0xA9D0C17C, 0x1A49B093, 0x961E8551, 0xCF8979DA,
+0x10DCEF84, 0x21602CA8, 0x6CA967CF, 0xE52A57CC, 0xF7C95C6E, 0xC9053C9A, 0x45191AC5, 0x0FB8ECE8,
+0x3774A276, 0xB8E3F337, 0x0120591C, 0xB98066CE, 0x5AEFF6BA, 0xC549A189, 0xA2D9DD48, 0x045C6A95,
+0x575AE0CE, 0x0435FFFF, 0x01F80960, 0xD69F0C46, 0x9B7357F2, 0xE553D7A7, 0x9E17D47C, 0x3975A693,
+0x61910A71, 0xD9A1174A, 0x2AC02952, 0xAC486165, 0x1BF71094, 0xD6F863A2, 0x9DD0440E, 0x2057CFA2,
+0x5CDA780E, 0x9611A356, 0xDEE11AFE, 0xAB474756, 0xE13F2E4F, 0x95D30953, 0x926D6748, 0x2ABB5EBC,
+0x868C5724, 0x250FDC95, 0x1CD1BAF8, 0x2DEE5E4A, 0xB14E5999, 0xC8963CEA, 0x422F86E2, 0x2E6247C2,
+0x7BA72086, 0x436204E1, 0x7542297F, 0xA6733E00, 0x61532431, 0x9652EC26, 0x3599CEDB, 0xA316F429,
+0x6C89B90D, 0xA47ED005, 0x9BFB5DC1, 0xDF0137F6, 0x918DADE5, 0x87E5ABD7, 0x8E199E47, 0xA4DDAB97,
+0x2B05EAB2, 0x238A7ABA, 0x54EB4846, 0x519D2B36, 0xE9AC696F, 0x2D1D9F45, 0x90699A7F, 0xEE2945F1,
+0x20E56AE4, 0xE2C2F960, 0x583397F4, 0x46E4D7B0, 0xC3098A26, 0xF0E626F4, 0xA69FF220, 0x3CE67C1E,
+0xD5B0B498, 0x96BDDE28, 0x035404AE, 0x37DCB387, 0x67B81F05, 0x153A0ED0, 0xC7E7E2B0, 0x27140D52,
+0xE4D4F599, 0x7B2BB885, 0xE7C224DF, 0x12E5AEFC, 0x2E621ADE, 0xE72E1B8F, 0xA9AFD6F3, 0xD32063AC,
+0xD168EEFF, 0xD9792426, 0x82FF0E7B, 0xA724B0EB, 0xCD7BEB5E, 0x87B515D3, 0x1BD6003C, 0x1377ADC7,
+0x601E2B5D, 0x3E11CCC9, 0x46F1D88D, 0x11C0283B, 0x6FE74269, 0xD2DB1DF3, 0x653BB7FA, 0xE93EE2AD,
+0x4DF8ED55, 0xC66F4999, 0x422D069B, 0x8F1282C9, 0xE71DD3B1, 0x3E3F00EA, 0x512C74DA, 0x979BA3CE,
+0x124E7D77, 0x7E44BA30, 0xF5E57857, 0x812736F7, 0xB5F80294, 0x498B8462, 0x21C3D115, 0xD2E1E8D9,
+0x7D5E5E60, 0xEF4F0CFD, 0xD94AA243, 0x6582056E, 0xD2CA6641, 0xBC0BD841, 0xB8E155FA, 0xE512A5E7,
+0x5B978C2B, 0xED1DAEC1, 0x8445C790, 0x6783868C, 0x6B701589, 0xE291E1D5, 0xFB97151D, 0x8032D071,
+0x9D4B72C1, 0x30FF0D86, 0xE456D292, 0x49A61653, 0xE01219C6, 0xAF24D3FA, 0x2B7EEF4E, 0x39268713,
+0x3BD04EA7, 0x349CB41B, 0xF8823140, 0x7E67F1D4, 0xE04602AC, 0xC9BE6E9F, 0xD14386BF, 0x50DA7842,
+0xFF8FC4EA, 0x2E293CB6, 0xBA58AF59, 0xD9F4E2AB, 0x53A03430, 0xC7B5A8A9, 0x06EF58A8, 0xAE5563D0,
+0xCEC09F64, 0xD1FB37F1, 0x590C7BFE, 0x3949AAD9, 0xC0975458, 0xE47C4892, 0x81717C1F, 0x2FCBDA0D,
+0x7659B83B, 0x3CAF09BD, 0x5CF34EF1, 0x26EB42C2, 0xBA12984F, 0xE0F919E4, 0x4AF5752E, 0x1D73EE50,
+0x9A444FEC, 0x1EEFDB05, 0x13B0388E, 0x4CE074E7, 0x69B512FC, 0xB6D87033, 0x14983D31, 0xBEC1CA94,
+0x5F0446C9, 0x418A1A50, 0xC67149A7, 0x9D8DBE4C, 0x03C8099D, 0xCE33220C, 0xE15108C8, 0x32DF6199,
+0xB019428D, 0xDA0E4418, 0x8E6D37E4, 0xC4750CBE, 0x1FEB2CE5, 0xFCC4C709, 0x6B051559, 0xC067E417,
+0x62B27B99, 0x75C90831, 0x83FD1087, 0x0F35ABED, 0x7E0BCF20, 0x27BA0733, 0x329F0F5B, 0x1912145A,
+0xAE7F11B0, 0x93592701, 0xE804EF56, 0x7FF5F1E3, 0x15901ED5, 0x3C0C2470, 0xA966C2AE, 0x00809EC3,
+0x01010000, 0x6B26009E, 0x55FB7F12, 0xA36A7805, 0x9D651FF0, 0xFF4EE21F, 0x5CADA133, 0x6C83FA37,
+0x800F49E3, 0x6D9D7885, 0x00300A1E, 0xCC10AD0A, 0x0AA9FD6B, 0xB973516D, 0x1D6EAE64, 0xEF1A6010,
+0xD63AC50F, 0x299E1DA7, 0xB7D54737, 0xEAAE5C42, 0x70B9BF3A, 0x73A532E8, 0xB2DAC318, 0x7CD3A1D2,
+0x2BD3878E, 0x997FCB56, 0xC47F5D5D, 0x33F18CF4, 0xE47077AE, 0x81337B1E, 0xA9ABB806, 0xC7E00AE0,
+0x268D1AD9, 0x08182E86, 0x80E17D80, 0x77F026DE, 0x0BB35F5B, 0xE91B7B57, 0x000F6E26, 0xB2136668,
+0x0B124B98, 0xC43C7278, 0xE8AF6F01, 0xC4E8F1AB, 0xFB041383, 0x69CD7C63, 0xAEC1265E, 0x8625E977,
+0x8FDAB2FB, 0xE6492D91, 0x8CFE800B, 0x64E85CAB, 0xC75F050F, 0xD0EFF315, 0x967EA8A0, 0xE5D41BCB,
+0x15D79C81, 0x2B069415, 0xBE641A5E, 0x67B476F7, 0x3F522E83, 0xCC6FEB7E, 0xC7814A89, 0x3F4F01A8,
+0x5BA88534, 0xA71BEB89, 0x0BAF747E, 0x44F9E6D9, 0x5EA05F2E, 0x825129AD, 0xFFE85B80, 0xB7447641,
+0x29A8046D, 0xBC3B6B68, 0x9D96D850, 0xFA86B09F, 0x1213898A, 0x28BBC3CF, 0xC1EAB81E, 0xDBCF6166,
+0x3C36DA63, 0xF433B644, 0xFF43BC8C, 0x5E66B13C, 0x06D81E73, 0x84B02501, 0x08D1B439, 0xBCEC2750,
+0x96683C80, 0xA3501421, 0x6068BA4D, 0x50C09A2F, 0x3D7EA354, 0x0278EC0A, 0x5FF2EF02, 0xCC4A6952,
+0xF377A31E, 0xC667367B, 0x60D96B8E, 0xEA27B2B1, 0xC6A1E74C, 0xFCEC85A9, 0x745560A2, 0xC0605AFD,
+0x0EACE1DE, 0x353519B6, 0x37D4A4F1, 0x10843E1E, 0xE11E805E, 0xD356A086, 0xE51B6203, 0x9C127995,
+0x991588D3, 0x266D2DEC, 0x67CF1448, 0x8BBD6BEA, 0x13B18B23, 0x2E4B26F3, 0x26A8238D, 0x75A7A021,
+0xF0D5F84B, 0x5DD024F8, 0x3E6F8F65, 0xF54F096E, 0x85D60283, 0x871F3382, 0xCD933603, 0x060B8485,
+0x0CD9BD18, 0xAF4D101D, 0xFFC5E4FC, 0x1FA95608, 0x02F80792, 0x8930095D, 0xB45DA69E, 0x8DC0FCD8,
+0x43B0FF03, 0x89144931, 0xCDFB06D3, 0xF113E736, 0x6AC7E792, 0xDDC9ECE7, 0xEB348DC3, 0xF015175B,
+0xAB4858A6, 0x8709B767, 0x8A673598, 0xF462AB12, 0xFA985053, 0xFDEF04DA, 0x7229A0C8, 0x2EC39A49,
+0x76A8EA25, 0x294487D6, 0xD2C3850D, 0x03066F2B, 0xD3DCE3EE, 0x17C5C6B0, 0x2B463CA6, 0xD557DF35,
+0x2DA7CC90, 0xE71531D3, 0x1922EA0F, 0xAFFA86CF, 0x9020052B, 0xB03A47B0, 0xCA1982A8, 0x438C5DC9,
+0x882195E9, 0xC14F2F46, 0x9F7FC7D4, 0x57747666, 0xE6DF6431, 0x3755348A, 0xD527ACEC, 0x12AECCE5,
+0xF11C4C98, 0x35C34322, 0xDFECCE41, 0x5C5526D0, 0xE79E582F, 0x210E4011, 0xCBB31762, 0xD2FD72CD,
+0xEF4D3236, 0x260A6D51, 0x97ED13C4, 0x6F6566E6, 0x72974DE8, 0x54B89426, 0x21EFE3B7, 0x03F7FD12,
+0x546AA03A, 0x1C4A9E57, 0x6BCDB556, 0x01B1AFB7, 0x1D632F14, 0x30C8E710, 0x010E7D84, 0x716D130C,
+0x7085A7B2, 0x74CC3129, 0xBFDCF364, 0xAB658250, 0x9B081006, 0x66025427, 0x9B35BC13, 0x9EBBC8B3,
+0x2B2B9F71, 0xA089E588, 0x97FD5B60, 0x2DB870C1, 0x9C70AD16, 0x71E2E2DF, 0xF0FA0964, 0xCAB7853C,
+0xC8819680, 0x6490BA8D, 0x5E5345E4, 0x103E2747, 0xA8B389B9, 0xFB24A5BF, 0xD5822342, 0x01DB25D1,
+0x967D111B, 0x6B85E231, 0x2470299A, 0xD39846C0, 0x6C0BCF62, 0x361A1092, 0x99748237, 0x6281518B,
+0x1D40D26D, 0x412651CC, 0xD6345962, 0x3B89C9B9, 0x9D305BCA, 0x79836C58, 0x3D3D126E, 0xDDA3AF63,
+0x2C627007, 0x1F17851D, 0xD1F5730C, 0x1B3DE868, 0xDDFCADA0, 0x91094FA1, 0x55EC16D8, 0x5520F9B1,
+0xB9EB56CE, 0x39087ACB, 0x07FD9BF7, 0xBF5AA78A, 0x5FA22A45, 0x0E83A12F, 0x5D1488B7, 0x9D12E653,
+0x99BFA291, 0x7E1A4551, 0x08F0D140, 0x85854434, 0x5AB76E1D, 0x8A0DCE54, 0x64C66671, 0x26B87562,
+0xAB3F666E, 0xA2470EED, 0xF50EAB0C, 0x6EEA84AA, 0x81129DF2, 0x402D26D2, 0x34AB5AF8, 0x70D35BBF,
+0xF97ADEDE, 0xDB047AD5, 0x5C46F50A, 0xDF90B629, 0xC16FC5CC, 0xB9F0B23A, 0xB156D76C, 0xA9D25F09,
+0x83BE1619, 0xF5E513E0, 0xF6EFD3D5, 0x042ACC27, 0x537EE76A, 0x74D126DA, 0xF28F9B5E, 0xCBA896B0,
+0x6A011248, 0xDD487782, 0xEFEAA445, 0xA49CA7F9, 0xA84A0ADE, 0x2164DF88, 0x120AF46F, 0x93E522B3,
+0x11C23B3A, 0x363F5309, 0x951360B9, 0xF35B9B99, 0xB73477FE, 0x36230866, 0xF75BFE0A, 0xB18F843B,
+0x8428FB63, 0x77AE4CC0, 0xA8723F98, 0xEEE1E6F1, 0x377C7944, 0xF0F21FA1, 0x33A13538, 0xE45BB0D5,
+0x4468F83C, 0xCB346187, 0x64E3ECC7, 0xE0CEB432, 0x940495EA, 0x00B89D05, 0x1B53149B, 0x8CA80F04,
+0x1806252A, 0x4BA2E7F7, 0xF38096CB, 0x27DB7954, 0xCA6E0D02, 0xE880239D, 0x52CEEF91, 0x48FC0785,
+0x31DBB200, 0x20B13455, 0xAC31AE6E, 0x7A671FA5, 0xBFA9134B, 0xA996DA77, 0x3C77EAC5, 0x18C358AA,
+0xD08E7887, 0x75340C0F, 0x306136D8, 0xEC7D077C, 0xA6D13C42, 0x283AC015, 0x785238BE, 0x2E82C7EB,
+0xB58BE027, 0xAA38DB80, 0x199FA9AB, 0x3C87AFF9, 0x2D5DD701, 0xDDEF5AB9, 0x7F62DF26, 0x00008043,
+0x9A210100, 0x3F722600, 0x815075E1, 0x300F9EA2, 0x212A6768, 0x25BAD1A1, 0x80A0D5CF, 0xDE832169,
+0x82EC03B2, 0x44DD715E, 0x828BCB67, 0x3F21F873, 0x2D43EC71, 0xD9C456B5, 0x26C2177E, 0xA15D09F0,
+0xCBAA2226, 0xD7FC3DD4, 0xE73F26E7, 0x4C98DCBF, 0x777C5C3A, 0x10992D8C, 0x14785E2B, 0x37AAA41E,
+0xFD475745, 0x1269B4A7, 0x300C2657, 0xF28D0DB2, 0x7EFE01DF, 0xA95C46E0, 0x5FC24A3C, 0x06B2E0DF,
+0x7DA249AE, 0xE5BC34E2, 0xFF03A9A3, 0xC74AB4CA, 0x96A910C9, 0x7ECDFE6E, 0xF9FEEEA8, 0x42570909,
+0x677CD8D5, 0x06B80D0F, 0x98709988, 0x7DA7BBB8, 0x00C1227A, 0x9ACE325E, 0x74734DBF, 0x633EAB89,
+0x4695CCA6, 0xA03CA4C6, 0xE3F5CFEA, 0x0DBC7E2E, 0x31CFE9D6, 0xBC6F5B6C, 0x1033D9F8, 0x76DB3CE8,
+0x712AE319, 0x287F0769, 0x4C28FD4F, 0x1A7AB06E, 0x70512F20, 0xF15173D7, 0xA4F52072, 0xBBC820C3,
+0x9E60DF44, 0x31CD8314, 0x289964CB, 0xC4E438DE, 0x498C4DD2, 0x1DFA201E, 0xCB161AB9, 0x4BBD697D,
+0xEA9A2D3B, 0xD4B3B0A9, 0xCAF41738, 0x13B75875, 0x5ADBDF8A, 0x4AEA7017, 0x78836555, 0x7D1DEB87,
+0xA617FAB3, 0xE09DFB0D, 0xC69823BC, 0xC0F73E22, 0x336B1B82, 0xFD87A76D, 0x974E430C, 0x6F7EC1A9,
+0xB5E9B1A4, 0xE48099F7, 0x29F05832, 0x161B9678, 0x539E366E, 0x73262A54, 0x9F29E087, 0xD6811CE1,
+0xB5C386A2, 0x6106F209, 0x2DCE1399, 0xA919B04B, 0x357E29EB, 0xF6CB599E, 0x82CAF2E6, 0x1DBCD488,
+0x2D329E94, 0xD12823D6, 0x51E224F7, 0x6B63E3B1, 0xC5D2CDCE, 0x947ADCA9, 0x70BA36EE, 0xA988F639,
+0x711711F4, 0x639F573D, 0xFF8E6D45, 0xCA19D359, 0x7E28E306, 0x4DF4B0F0, 0x5F686F31, 0xA026FEA9,
+0xDBEFD536, 0x9609978E, 0x4C017289, 0xA1FD5CA5, 0x6D2AAE62, 0x4AA74460, 0xFA642F89, 0x7CC66108,
+0xC0E187E9, 0xD96D247F, 0x3096F2FD, 0x5B83D1EA, 0x2940A93F, 0xD55D3A61, 0xA7FADA55, 0x3E0DE474,
+0xD1001C61, 0x2A9805E2, 0x789EF6B7, 0x7AE1702E, 0x81D66BD4, 0xF47CEB10, 0x58056C47, 0xBB28D120,
+0x0E544344, 0xBDF8A0FD, 0xDB09CA40, 0x8ABB79C6, 0x97CD0714, 0x814AA9F6, 0xF7912897, 0xE30AD66C,
+0xD2D2DB1B, 0x9C81DDFA, 0xE7DAE2AD, 0x037160F3, 0x1D4280B6, 0xB2F691C2, 0xEC6F7136, 0x3FEC3EE7,
+0x9DFE2CD7, 0x622B4E65, 0x1120C695, 0x32FC3F7A, 0xF0E87979, 0xC5A77B52, 0x99AB13FC, 0x14E43070,
+0x2582F9C7, 0x8DE43567, 0x9413AC9D, 0xC330421B, 0x3DFC84A3, 0x2E78FBF4, 0x4DE5ED0D, 0x9DD5DE01,
+0x5A24BFFE, 0xAF584F48, 0x8D723831, 0xF511EDD5, 0xA174D80D, 0x22CE3705, 0x6143ABD7, 0x02F37912,
+0xAF89FBC1, 0x098E075B, 0xD74738CE, 0xFC029ADB, 0xF297B6EE, 0x53A8881F, 0xB3B106CB, 0xE6D2218E,
+0x21915DAC, 0x6E3809BD, 0xBE5E7CC0, 0x5DE3C1F5, 0x8C654CDF, 0xCE55885E, 0xC49A66E4, 0x13D33AB7,
+0xF0267BAE, 0x7EDAA7F8, 0xBDEBDA4D, 0x24ED1382, 0x6AEBBE69, 0x5850FAB7, 0x0E7FA911, 0x75FF63A4,
+0xB9F47519, 0xCEBE50CA, 0x81B62A96, 0x49CF9CD9, 0x6E4AEEA4, 0x00E0BD77, 0xC59DF2BE, 0xE79778BE,
+0x7B8DE2CC, 0x0127042D, 0x2D371E1D, 0xD60357FC, 0xB95B5764, 0x8507AB67, 0x58E08B48, 0x307C3234,
+0xB43A0A9D, 0xC5BA9387, 0x9EC2D610, 0x27FA4BEC, 0x2EC5B16A, 0xB6FE7710, 0x53760556, 0xB7C35543,
+0x3FF811F5, 0x7E3AFC2E, 0xC4148039, 0x1DF6845A, 0xFBC67C33, 0xAA977C4C, 0x02132822, 0x405BBE95,
+0x577C834F, 0x34BC9F88, 0x766DF5E1, 0x4569CB72, 0x949D75EF, 0xE9B6D363, 0xAAB3BDF4, 0xF3097FC6,
+0xBC8FB32C, 0x4F30EA63, 0xDA4CDED1, 0xD9BE1A1F, 0x980935C3, 0xCBA06583, 0x4E858AD0, 0x0669665C,
+0x7E39AAA2, 0x78DA8D2B, 0x4F8EAD6A, 0x05359961, 0x65509D93, 0xF24F86DD, 0x21128E7A, 0x1E8CF653,
+0x2351A729, 0x89253C22, 0x14B8F4F7, 0x9E461437, 0xEBE9FA9F, 0xEF842304, 0xB3FEC66F, 0x8DFFDAE1,
+0x4421EB86, 0xB46DD39C, 0x54DA11F4, 0xC4B235AA, 0x943D2A1C, 0x4B406152, 0x9DB72F56, 0xA9EBFBBC,
+0xA98ED267, 0x294E98D9, 0x79100163, 0x3BA4D775, 0x3FB585AF, 0x3EFBD0CE, 0x758006E9, 0xD8555F8E,
+0x2781185F, 0xA37E6DB8, 0x2231EA17, 0xC2019AE3, 0xC6BCEDEB, 0x29B89450, 0xA017EB11, 0x0F789FB5,
+0x25131322, 0x3D7DDDD4, 0x131C1E60, 0x8CF9869E, 0xABC43FD5, 0xA3EBC045, 0x04EDAE13, 0x2AEF9820,
+0xCC780B67, 0x07917937, 0x3633B3DF, 0xB1CAE2AD, 0x976F59CF, 0x3FDABFC2, 0x3CA1E1D4, 0xE76A270B,
+0xCACE9344, 0x07B59374, 0xEEF5839B, 0x5EE649D6, 0x5589F055, 0x80975919, 0xD17F931E, 0xC80C53FD,
+0xFC7F1960, 0x60930746, 0xB2786A61, 0x37170EE1, 0x8998DA41, 0x88B41CC2, 0xD10CFFD8, 0x80F41472,
+0x73981CC3, 0x4D646804, 0x7692A738, 0x9A6D38B9, 0x8559C808, 0x1341409D, 0xDE985F85, 0x3F3A1486,
+0xC52D18F6, 0x1FA2767E, 0x4120B3F5, 0xD82966F9, 0x10142A00, 0x2AEF48FD, 0x775859D5, 0xF8B91388,
+0x6DA66C49, 0x6B075D6B, 0x21A1B8CE, 0xD69521E8, 0x17CA710E, 0x181A1568, 0xEBFAF8C0, 0x5FA63319,
+0x1E2FA07A, 0x67D303AE, 0xD10A11FE, 0xE6E7F7AA, 0x43C4AB75, 0x5ED61B7C, 0xB0775BCA, 0xAF18040B,
+0x88535C02, 0xAFC28186, 0xA64C8E47, 0x03BFA21D, 0x44E2EC63, 0x0A18913D, 0xFAD75D84, 0xEF0F2FA5,
+0x8021736D, 0x98C71187, 0xFA6778B1, 0xED4A222F, 0x331DF764, 0x3D3EB649, 0x8FB28A2F, 0x663F46C1,
+0xDF9F6A1A, 0x2F047BFC, 0xC5FCFD56, 0x13CF603E, 0x972344C7, 0x579C0B8B, 0xDF6EDA62, 0xF9899EF4,
+0x01D20F0F, 0x14A31807, 0x11FF044A, 0x4DCE4822, 0x171F720B, 0x62E84055, 0xEDC27E28, 0x3CD872E5,
+0x3D1D5662, 0xF8F49010, 0x3E900864, 0xB696D667, 0x21B5308C, 0xF932FBA7, 0x327FF78B, 0x13DA3375,
+0x6DB7570A, 0xFCF49437, 0x965424F4, 0x3D6363A2, 0x914E936E, 0x72E6E626, 0x53F6913E, 0xB174A38F,
+0x41006DE8, 0x70C792FD, 0xB675DC29, 0x144F0BFC, 0xE2F16393, 0x556E2D35, 0x9CC27D32, 0x58F17851,
+0xEC55213B, 0x775705D3, 0x407D0D67, 0xF7D6C356, 0x6D09BAA8, 0x5B090DC8, 0xFCD2935E, 0x56ED74E0,
+0xED79FFE4, 0xE7977E7D, 0xE4DBDB26, 0x9B51CA1B, 0x503C12F2, 0x1350ED81, 0xF673CCA1, 0x8D1B4BE0,
+0x9E9E305E, 0x30AD5224, 0xD7EB3AED, 0x29C0802B, 0x9C8895AE, 0x2AF3A33F, 0xF65BCDF5, 0xB806C3CC,
+0x22F8FC07, 0x7A52C216, 0x3110FEE7, 0xD328AB2E, 0x7AC890C8, 0xB42B327C, 0x40AD4870, 0xD7BCA2FD,
+0x47D9A65F, 0x2215E631, 0xD6693770, 0x874D6EC1, 0x7B6D46B6, 0x51B6E411, 0x86C32A9A, 0x036EC147,
+0x6D352DB3, 0x43CB8454, 0xF3C49737, 0x4A207521, 0x8AC3852D, 0xC48D9F75, 0x00626E7A, 0x452B20A3,
+0x5A5401C4, 0xB808972C, 0x3E011B85, 0xDE9BDA96, 0x0E6FF141, 0xF603AB02, 0x559E98C0, 0x64AAB40C,
+0xF3E78FD4, 0xCBA66D47, 0x324EBDDD, 0x59C961FD, 0x0585F0C4, 0x67AFE436, 0x175BD635, 0x87369B6B,
+0xC64E74CF, 0x495D1789, 0x9C6257CB, 0x32F50EB6, 0xAF93F5AC, 0xA89E576B, 0x261DEA94, 0xE3815B22,
+0xFCE3974B, 0x1B9EE30E, 0x86B07C20, 0x2DCDCB0D, 0x2B7882F9, 0x991FE3BC, 0xBC23FBCC, 0x1425593B,
+0x22D649DC, 0xC1010F92, 0x72AEFEF1, 0xA689589E, 0x7DC2CB70, 0xB6DB7E16, 0x556C4E4D, 0xD89B8565,
+0x1EF34AF0, 0x63351032, 0x227F4C30, 0x6A0C02A4, 0x4CE3A8CD, 0xA59DB043, 0xD7668472, 0x420643D2,
+0x80A18795, 0x155DD9B5, 0xB6806AFA, 0x86BDFBD5, 0x011CB0B0, 0x5E828DBD, 0x001BA3EB, 0x0DD29DD9,
+0x6E2517C6, 0x256FACB3, 0x6C62D0F8, 0xDE633365, 0x9ED93CAF, 0xC4E464DC, 0x82DA2DF2, 0x5E230750,
+0xD41361ED, 0xB8AA9A24, 0xD97C08B5, 0x856D0D39, 0x430DC0DB, 0xF684E218, 0x65D6F9F8, 0xCF35A30C,
+0xA1500466, 0x9B45A996, 0x1CF124D3, 0x047BE07B, 0x59D076A6, 0x5A8A00AB, 0x14355411, 0xF5C1B838,
+0xED8F5EAC, 0x89742E74, 0x253BE588, 0x0C831BA1, 0xEE3B0484, 0xF7DD6D0E, 0x17439320, 0xF9AD35F6,
+0x2CDBEBC7, 0x9FB8A216, 0x106D638C, 0xE3AFCB2F, 0xD697639C, 0x9BDBA968, 0xCBF67584, 0xC0E46F5F,
+0xD490E43E, 0xFA50A8E5, 0xF8227060, 0xE67FC659, 0xEF1BF3BE, 0x89D950D7, 0x79D59EF9, 0xEC27E34C,
+0x41FABCE2, 0xB4D018D7, 0x1021912E, 0x29196F8C, 0xFEB5D8B5, 0x2775C92B, 0x99186CEB, 0x821EC463,
+0xF43708B7, 0x1A4A352B, 0x1C834D55, 0xA10C351C, 0x82C32E4A, 0x04A5B1AB, 0x42714BC5, 0x67CCF6D7,
+0x013076DC, 0xBE309D25, 0xEECC09C7, 0x1CBD5726, 0x7403FAD7, 0x397DA62B, 0x3A4F9FF3, 0xE5F5C6FE,
+0x856A5661, 0x47FDCB55, 0xE766F793, 0x6F8CE04A, 0x8B60CFA0, 0x725A0456, 0x4E313D91, 0xB68C54D2,
+0x75DADF8A, 0xB89296EF, 0x6664EAF9, 0xE0F18391, 0xE61BE43C, 0xFF6AF551, 0xAE8216EA, 0xEFE1C30E,
+0xFC0A38E7, 0x5107728E, 0x12ECD4BB, 0x155F6200, 0x6A480CF3, 0x7B871A47, 0x1939C267, 0xF208BB48,
+0x9FC71BC2, 0x8AF1B482, 0x41BAB5BE, 0x1E550C91, 0xE6BC6876, 0xFF256F09, 0xBE31C456, 0x7109BCC2,
+0xCB1252D0, 0xD439DC54, 0xF1939F17, 0x210BE170, 0xEB6C1223, 0x691F99ED, 0x02013729, 0xBFC13493,
+0x416CAC47, 0xAEA21A61, 0x22722B77, 0xBA14AFD0, 0xD701DB42, 0x981CA4B5, 0xC33EB8F2, 0x8F327959,
+0x9C0AEFCC, 0x4694106D, 0x03CC6AF9, 0xA3A86507, 0x31718E9B, 0xA176524E, 0x1C69B835, 0xC1AA55E5,
+0xB1D37922, 0xA36A2CC4, 0xD3898B35, 0x9087FFEE, 0xCEA222FF, 0xC069729C, 0xEDD20EEA, 0x7C5E2E36,
+0x8468C9DF, 0x78E074AC, 0xD8C9C3EC, 0x673D5BD4, 0xA5900DB4, 0x01A94254, 0x77B93810, 0x6ADFB922,
+0x5DE73DE1, 0x73E266C1, 0x85A6BAA4, 0x040C54BA, 0xF4E5F298, 0xC818A93E, 0x19364B29, 0x11B6DB50,
+0x79B63E34, 0x0D80E914, 0xE725F9B2, 0x3C429F53, 0xC925F5B4, 0xF2C4D3BE, 0x1528503F, 0xF81208EF,
+0x9F2D36EE, 0x7A27D6B2, 0x421DA6E3, 0xD0DD0C70, 0x902B6210, 0x8CF5B50C, 0x53BCA9C9, 0xF2A5EB49,
+0x4966CEF8, 0x06CC614A, 0xF8FD9A58, 0x2106AF87, 0xCA29FC56, 0xC91DE360, 0x9EA377DA, 0x4564EFCA,
+0xFC763618, 0x46B50648, 0xF49193AB, 0x9E8AB3FA, 0xFDB089D8, 0xA39C119C, 0xE9DCC59F, 0x442768C1,
+0xD0B5A8BA, 0x3266C3AD, 0x24B9B0A8, 0x31091DDD, 0xDEDB2ADF, 0x1A5ECCE3, 0xB4B503D8, 0x09B993A6,
+0x668E11E6, 0x61B1C9B2, 0xE552346E, 0x86F1C1F5, 0x4F0887C1, 0x1FD10592, 0xBEA13514, 0x248A2489,
+0xC0A6B8E1, 0x8E570D3C, 0x32762519, 0x9CDB4AA9, 0x181CB37C, 0x3339F63B, 0x9D92F872, 0x673C261C,
+0xE38DB659, 0x79CFE4D0, 0x7CFA0533, 0xED9078BD, 0xECF91F68, 0x69C6B0A4, 0x784C1CF3, 0x55727959,
+0xBF80A769, 0xAEAB936A, 0x931A9442, 0x0449AEE0, 0x396F8114, 0x21B87E01, 0xC3886804, 0x52736C1C,
+0xFFDB55B5, 0xCDA42F93, 0x6429CE20, 0xFF312E3E, 0x96554650, 0x2FF45DC5, 0x0ACC2016, 0xEE0C2ECE,
+0xBE91B07C, 0xD10B24D3, 0x336960F8, 0x15C09C25, 0x4034389F, 0x58D43A9E, 0x1655E043, 0x42A7B310,
+0x8FECA511, 0x15A771DD, 0xD92FFCBB, 0xD5993CCF, 0x3702C7E5, 0xB67E6926, 0xAC47A41D, 0xE08EA949,
+0xAE9F8AB5, 0x778382C8, 0x160C260B, 0x9D66396B, 0x11E29E64, 0x610BCEF1, 0x9BDE07F5, 0x2B3747D8,
+0xEFFCD981, 0x3FEEC47E, 0xF16E2FFF, 0x10A3E4A2, 0xB5CC99C4, 0x1CFB2468, 0x9DF3F75C, 0x85F74372,
+0x38E95286, 0x47E3B400, 0xC7538F9F, 0x9F14F2C0, 0x6DC40A70, 0xD3B2BF0B, 0xF3B685CE, 0x27289DE9,
+0xCF55B228, 0x838204DB, 0x286C5696, 0xCC9BF4DF, 0x4E7712C0, 0x5806BE24, 0xE60D1159, 0x6356809E,
+0xF69E8BE5, 0x5BDD638D, 0x0F554FB6, 0x8AE800C3, 0x4FF912C1, 0xC73DCCBA, 0x8D5D843F, 0x2129420E,
+0x85AA5F74, 0x88072647, 0x87CD40A7, 0xDBA2C126, 0x6521C145, 0x8E37ED02, 0x185E39EF, 0xBB383BBB,
+0x81FAA9E2, 0xD9AC9347, 0x3ABA4F78, 0xD1E9560E, 0x5A85E9A8, 0x42A11B48, 0xBD7FD66C, 0x2685A192,
+0xE49945AD, 0xFC161A0F, 0x4B30A05D, 0xAA3BE26D, 0x322001E0, 0xED5F3F27, 0xA434C3D9, 0x3AD23C53,
+0xBFBA14DB, 0xD7F6722F, 0xC8F48F20, 0xABB646ED, 0x284CF6FF, 0xFB1A25A1, 0x115B1927, 0x5463E80E,
+0x2F27963E, 0x432F41F6, 0x5E0160AB, 0x79DECD2F, 0xF4351AC1, 0xD5E4AE55, 0xE9106741, 0x4174A157,
+0x9F0E60AC, 0xAC38064C, 0xEA26973A, 0x06043C1E, 0x33EB4265, 0xFCA25763, 0xC5B33A68, 0xEB66C65A,
+0x2F8DED77, 0x57CAB00D, 0x9F774744, 0x5842CB10, 0x71AA5AD0, 0xDB273599, 0x4FCE04EF, 0x0E41C314,
+0x5D1F850C, 0xCA9D9A74, 0xC9CE1C6E, 0x2AB6176B, 0xE77393C9, 0xAE0F432C, 0x12D5DDFA, 0xA1E78732,
+0x38B27FAC, 0xEB50CD58, 0x57630517, 0xBB742489, 0x553B7864, 0x7DB1630F, 0x0F797813, 0x3A363B03,
+0xC0EC68AA, 0x1C824607, 0x9740A94E, 0x0A8E0280, 0xB89093D1, 0x94978994, 0x121841C5, 0xDD34C63F,
+0x72384D7C, 0xDE081510, 0x54ADB660, 0xD20A83AE, 0xBC37E1FF, 0x5AE909AB, 0xB3DCF514, 0xB02E2860,
+0xB5D6F099, 0x52553F2B, 0xAA2F7E95, 0x061A9FA4, 0x8FA61E39, 0xF47FFF59, 0x81502E52, 0x48685218,
+0x1FECBA4D, 0x2670185C, 0xFB2C67E8, 0x172FEA68, 0x1A62EA1B, 0xDA108411, 0xDC52F295, 0x4CF56245,
+0xB28344AC, 0x6D5B3C09, 0x40BB7974, 0x99DC4E58, 0x914A862B, 0xF02F6806, 0x52447112, 0xF6D551AF,
+0xB128FDB9, 0x69B3AE2F, 0xFFBE4A46, 0xAD4C84F4, 0xAA1778F3, 0xC8B184BE, 0x0CF48A8A, 0xA5C2DE3B,
+0xE0B0DAB7, 0x20224F1C, 0x598A27EB, 0x32CF4DAF, 0x3ECB54E0, 0x841AE831, 0xFE26FFDB, 0xB6F44433,
+0x8DB8C0F6, 0xF0AE127B, 0xDE9C763D, 0x769A536E, 0xE3BF7562, 0x7B85455D, 0xD45FE5F2, 0x9263BDDD,
+0x3B7D7767, 0xC4392B98, 0x9843CD9C, 0x48B73270, 0x05DB72CD, 0x213AFE58, 0x935BBD26, 0x2B5DD33C,
+0xFCBAB4BA, 0x73E0AC3A, 0x20C02752, 0x0034B087, 0xF6B878DF, 0x17F2B874, 0x8FBEA705, 0x5F49F185,
+0xBF6FD62C, 0x20A11AAB, 0xB29C1F1E, 0x864E4655, 0xA8DD8279, 0x43866012, 0x804817F5, 0x6F436371,
+0x604DB756, 0xED331B70, 0xB046D546, 0xB87B6092, 0xF6C79304, 0x8394A91F, 0x86034DD6, 0x7711F01B,
+0x3C564B15, 0x454C8874, 0x25F5867E, 0x0E2FAB84, 0xA2546036, 0xB7A73A3A, 0xBC7551BD, 0xE8E01415,
+0xA39707BD, 0x6BC97392, 0x1B5F0598, 0x7AB45705, 0x59B81E86, 0xAEBB110E, 0xF56A54C7, 0x1E0505E3,
+0x819E737D, 0x61A05D6B, 0x250C7189, 0x370FE100, 0x3CDDDDBB, 0x5831BEAE, 0xEA642ACA, 0xD367EB7A,
+0x00412D67, 0x2CD94077, 0x210EE8E6, 0x5205E62A, 0xDA89562C, 0xB59DFCAB, 0xB251744F, 0xCA98DDF4,
+0x3D6DDDCA, 0x3FF38828, 0xBC425EE3, 0x39FD0BCC, 0x866BAD9D, 0x89788BDE, 0x828E80D6, 0x512019A3,
+0x6361C955, 0x726D1DF5, 0xC0F6036E, 0x4ABB3FB6, 0xB7A9C980, 0x519453A5, 0x027F4098, 0xA1F20026,
+0x9D623806, 0x04B22FA0, 0xD3624541, 0x44D385EB, 0xFD70F8DA, 0x6764780A, 0x1F80A298, 0x67B3EFE3,
+0x67E56770, 0xE7FB69E2, 0xBF128585, 0xAF972AA1, 0xFFCA54D0, 0x58FF1287, 0x954281F5, 0xAB6F6511,
+0xCBA46FF6, 0xB048B783, 0x580B88E4, 0x32436C0B, 0x0AE48881, 0x281CB15E, 0xBC1A6C6D, 0x50221141,
+0x50252F60, 0x71994315, 0x944022DC, 0x22ACF87D, 0x9D748F70, 0xEC2D8C79, 0x1DED13F4, 0xE47951C0,
+0x7FE744C5, 0x3AA6B156, 0x5B6C701F, 0xA62AC931, 0x8CD21CA4, 0x3D146CAB, 0x647CBBB2, 0x3691582F,
+0xBF78B89D, 0xCDA222FF, 0x5C5DE6F4, 0x5A561DD8, 0xB0E3BF93, 0x77285B53, 0x27F89458, 0x7D7A83D6,
+0x5B14BA5E, 0xF15D0F0F, 0xEF84C7B6, 0x73772FC8, 0x144D2168, 0xDD8AACC8, 0xC0C58013, 0xFE8411B0,
+0x9478EEEB, 0xC729703F, 0x902CB374, 0xA0B12408, 0x64CBDAE5, 0x7764755C, 0xAA4C545E, 0x04D9989A,
+0x14CE1DFF, 0xEA7F5E13, 0x6845E7AE, 0x914BFED8, 0x09D6EDD5, 0x5AA1DCCE, 0xD7E86E02, 0x30FCAC6F,
+0x9DDF5134, 0xB61490DE, 0x104DA3E7, 0x3257687F, 0xF646B4F1, 0xE0C19FB4, 0x5A59AB73, 0x3CAB9E68,
+0x6C1921F6, 0x8D3B7E3D, 0x51B35A10, 0x176066DA, 0x8EAB6E52, 0x7392CF7C, 0x066B3B11, 0x8C1EB4CC,
+0x208F01B3, 0x3B486E42, 0x45237C55, 0xB1D949FA, 0x8A77AD03, 0x268818C1, 0x674CE3A0, 0xCFBD05E0,
+0xF3841425, 0x4903072D, 0xBF641CD2, 0x8B4FD870, 0x2FA48516, 0x45E39BF9, 0x9C6B1775, 0x46D546B2,
+0xD8FE46D5, 0xF69A3A74, 0x5373317F, 0x359122F5, 0x65E380AB, 0xF48377A9, 0xE98EA126, 0x70F75C0F,
+0xAD91E482, 0x10CBB944, 0x6F126AF7, 0x23E37E69, 0x68AD545D, 0xA3B29FD4, 0x57AD6DF4, 0xCCDE5AD2,
+0xB015C756, 0xD24E77C7, 0xAB66A36C, 0xB1E36530, 0x4A59C1D7, 0x89C9BFC0, 0x3C5E26AB, 0x2244C126,
+0xB26B972B, 0x48097D3E, 0xF3775509, 0xC91D8554, 0xC4F3930C, 0x6D709069, 0xFFC8D9AE, 0xB0302540,
+0x9AADE8E9, 0x1D15C82D, 0x6A6E7D47, 0xBF85C568, 0x020BD388, 0xC9944F3B, 0x4A2F61D8, 0xC73B27E3,
+0xDC757A94, 0xC18830AD, 0xB270F2C0, 0x346225B9, 0xB2C45F1B, 0x09962162, 0x9752DC88, 0x49AE2AB0,
+0xF83AD582, 0x64230A2E, 0x5D048E98, 0x07DFCC3C, 0x55618575, 0xF64FA4D0, 0xAF503F3C, 0xDE4B8E88,
+0x8268B6CF, 0x21D9985F, 0x0C422890, 0x25E7F2E3, 0x0E02FD12, 0x196A049B, 0x07704890, 0xC484AADF,
+0xC723F7C3, 0xEDA42118, 0x05A54180, 0x81AB9EC0, 0x97AF47C6, 0xC891A3AD, 0x1E2DE634, 0xDFF28CAF,
+0x7D6153FC, 0xD4B941EC, 0xA3BBBB02, 0xDD237CEA, 0x39EA95A5, 0x616BDCF4, 0x2A3B8BEC, 0x004CB3C1,
+0x01010000, 0x6F28009E, 0x4FFB7F12, 0x833FEE16, 0x8DE08D29, 0x681782FE, 0x07C0CF8B, 0x6EA7D0BE,
+0xD4C2BF25, 0xA0247A51, 0x08CECBB2, 0xE4E81462, 0xE7652AC4, 0xEBBB7A7B, 0xF21D5C72, 0x574B3297,
+0xA1A8B64A, 0x8F8B8D40, 0x6DDF9121, 0x3E0A1791, 0xE2B9DA2B, 0xD2A92088, 0x751153D0, 0xDC70E7C3,
+0x7513DAED, 0x34E07F98, 0x4658ED7F, 0x3321D68B, 0xF65456D0, 0x7BF2B07F, 0xC3CAF70B, 0x224A4692,
+0x42D20D1F, 0x5A030EE9, 0x3FFD8A6D, 0x9A2C0123, 0x7B4F11A2, 0x1D527552, 0x65FC789A, 0x2CDF4742,
+0x54032226, 0xB84B9460, 0x8F9EB865, 0x89BCE7A4, 0xAB0E5478, 0xEA0A7119, 0xD901B558, 0x2F4F0C90,
+0xC0890717, 0x4DF3B245, 0xCC747062, 0x28E01CB8, 0x708DFCE5, 0xD04F6972, 0xFB790B8A, 0x025A891F,
+0x654DC168, 0xAA3A5A60, 0x128BF57A, 0x0E557D6C, 0x62214F11, 0xDA747290, 0x71F7F063, 0x8BE9FDC8,
+0x2D58A9D1, 0xF75CA7BF, 0x7A834EDD, 0x4340E2C1, 0xDE18F118, 0x41971C81, 0xE51DFEF2, 0x7899C2CC,
+0xDBB293B1, 0xF4FD63D6, 0x42853865, 0x68F9F107, 0x4E4869A4, 0x2F866888, 0x41A781EF, 0xAFC8BEA9,
+0x189E3CD9, 0xCA49A9F0, 0x4447AAF7, 0xD2237142, 0xE4E0900A, 0x563466D2, 0x035C07CF, 0x210D7D2B,
+0xD37DFB67, 0x5D86F567, 0xAA0BFFA3, 0x733A726B, 0x7948694B, 0x208A66C7, 0x61EFDB93, 0x228E6BBD,
+0x1E38A73E, 0x086DB7A2, 0xD02D9DFE, 0xEC950E96, 0xBF7AD78B, 0x51557D7D, 0x92293ED0, 0x56D313E6,
+0xA6A72C26, 0x8EB25E9C, 0x2A9BCFB4, 0xFD4DCE43, 0x3B8010EB, 0x9E51A321, 0xFD1A1E70, 0x311B7865,
+0x2FB36F86, 0x896ACDC9, 0xC15CBB4E, 0xF2A0C188, 0x22A3A524, 0xEBFEDBDF, 0x98E368CC, 0xA00497A7,
+0x9EC092CB, 0x244AA0E7, 0x69A39233, 0x0D061F87, 0x7B287050, 0xB9338386, 0x1238C372, 0xE49C88E8,
+0x3635F18D, 0x2D942A8F, 0xB874810D, 0x93BEBC8D, 0x53DDB582, 0x69A0C5BE, 0x14B3E310, 0x4340BA41,
+0x9FA2EC71, 0xF90A8987, 0x1DA19261, 0xA3A16FB6, 0xB675325D, 0x41E522EE, 0x58AA137C, 0xDD312235,
+0x255B8B68, 0xB8435ACE, 0xC5AD1644, 0x41C21420, 0xA1A4B442, 0x6C64A11A, 0xCC09D26F, 0x6F2CA358,
+0x9AAF4B7D, 0x52AC16BD, 0xB4EFA4FC, 0x6CB10385, 0x65A21A8A, 0x2342188D, 0x1EBCDF22, 0xA03903ED,
+0x5208D167, 0xADCA27B2, 0x8BBDC38D, 0xD1253FE2, 0x744B3A9E, 0xA17B0B67, 0xD36D0DEA, 0x22757394,
+0x40609038, 0x430A79B7, 0xD7049A98, 0xE0085FD4, 0xE33C6A70, 0xFA2A9005, 0x70AC66B6, 0x37FD1EF8,
+0xB80AD782, 0x936E502E, 0x721DD74E, 0x209617C7, 0xE89920E0, 0xFE8904FF, 0x5B751B28, 0x964BD15B,
+0x49B0974D, 0x15734F99, 0x5B74F9A8, 0x5350367E, 0x45DDCABC, 0x4FF1643D, 0xDBCB0F49, 0xB897B6E4,
+0x27F7C28D, 0xBE3139E8, 0x038D6FFF, 0x1871062A, 0xF6C8E51A, 0xDA425C8D, 0x6874853A, 0x5B91BADC,
+0x99F5DDCE, 0x3A880D38, 0x98DD9E95, 0x0976CDA5, 0x60C9D279, 0x26255E77, 0xD2A8DDF3, 0x0D3686A6,
+0x95EB8064, 0x7D6EE8FF, 0xC5054063, 0xF6A3328F, 0xE87FA6B1, 0x575B31E8, 0x8F981E4D, 0x5AA4D482,
+0xBE712A0B, 0x729B932D, 0x998885B6, 0xEBFF2127, 0x63F0C839, 0x7277EF16, 0xA412916C, 0x013B5139,
+0x2BDE7CAD, 0xA0B27C33, 0x1E78A066, 0x8A749766, 0x553EA9E8, 0xD01DCD5C, 0xB5D9C4A5, 0x79FFE187,
+0x4C690D78, 0x791820AA, 0x599932C9, 0xE91EEA09, 0xA115D802, 0x11B5AE59, 0xEBF54D25, 0xBB37A577,
+0x8B5243CE, 0xC08D65F6, 0x7C271E8F, 0xBE9F8AAD, 0xE1EA61A6, 0x8D979497, 0x9AEE4DC5, 0xDD3B2FBE,
+0x481CE3EC, 0x8358230D, 0x28C50AD2, 0x64D29E5E, 0x581D4F29, 0x0A63EC1A, 0x62B94027, 0x98AB9481,
+0xD11DB43B, 0x2E35B161, 0x5E53673E, 0x4708C756, 0x5AF7CD99, 0xDFC93969, 0xE3D55BBC, 0x0DA35AB3,
+0x7AE81836, 0xDE28F5C2, 0xE317568A, 0x7758B20A, 0xDB336453, 0x246417DD, 0x10BE55B5, 0xB348FF08,
+0x4AA73A6C, 0xA49F6E4C, 0x728F9241, 0x06B0C73C, 0x3B0A0EA4, 0xF7CCE138, 0xB33B33D0, 0x22CC1034,
+0xF1AB74B5, 0x9CF5144E, 0xC4F3B897, 0x803D8D98, 0x795320A4, 0x7628B639, 0x46117BD6, 0x90639F46,
+0x2B056476, 0x253C4F0D, 0x40731737, 0xFE5D08A8, 0x1DA5052B, 0x0BC6A6E6, 0x183EF883, 0xD1F1AAD1,
+0xFB75E278, 0x992C66C2, 0xBB5C4D47, 0xD5CE2667, 0x22B1A0A2, 0x7FFD1E93, 0xFF6DDA9D, 0x8FA27F3E,
+0xEAF4C5D2, 0x0FCAE300, 0xD2C086FF, 0x207C660E, 0x91A97FA3, 0x7D48516B, 0x9399D319, 0x24924DA0,
+0xD02E086D, 0x9345C2B9, 0xD81E4B67, 0xF3FEFE01, 0x7B9DEBED, 0xDE68E4AC, 0x3DDA0A17, 0x71F8166E,
+0xA22F79C4, 0xA36614FA, 0x4D07887C, 0xD9AE4B03, 0xCCCD80F6, 0xD41846E9, 0x29677268, 0x9C8BDACB,
+0x7F616BE3, 0x10ED8B9D, 0x2739B70F, 0x724EF4A9, 0x18D3A6F2, 0xD2CD0CCA, 0x1CCCD5B0, 0xF83EF6EC,
+0x207EFB8A, 0x33A2333E, 0x1E9C9E53, 0x3AF4CF9D, 0x467C6968, 0xF084B5A4, 0xAB1E9CC6, 0x1601D0E3,
+0x60462AD0, 0x66226935, 0xE329A536, 0xD1C6B2E3, 0x6C32EB33, 0x8BA47CB9, 0x35B48011, 0x36166CF3,
+0x8E5480F4, 0x858F0A81, 0x1BA0D823, 0x19DCF826, 0x7547EA15, 0xC1808353, 0x39BDCF59, 0xFF3A0D23,
+0x30E85037, 0x157D0BD5, 0x634EE819, 0x61559A06, 0xA9534BCD, 0xA0ED9AC6, 0x01000000, 0x28009E01,
+0xFB7F1271, 0xC11F1D56, 0x9BDF905A, 0x60CBDD44, 0xA744325F, 0x5AC0F92A, 0xB3CBF202, 0x8D42C2DA,
+0x802A1169, 0xA0F426F2, 0xB36BD8F3, 0x807B8E4A, 0x17002035, 0xE1B10F09, 0x95BCD569, 0x8DB76B4B,
+0x6F60C497, 0x8CA00AA9, 0xE28C902F, 0xECB612D7, 0xFAB538A0, 0x03BCD3B4, 0x13119C9B, 0xE81E68BF,
+0x3CB3D7BB, 0xC3158D83, 0x2521EFA0, 0x9E84AB35, 0x76917B80, 0xDD1CAEEF, 0xBE03A523, 0xA1B61E9E,
+0x1D17DD49, 0xBC53394C, 0xD6E86EC1, 0x152451B7, 0x4F4F9C84, 0x00EC3DAB, 0x2D5D06A1, 0x12229380,
+0xA5D96D76, 0x1889C532, 0xB4EEC5B9, 0x27AB19A7, 0x173CC9BE, 0xC1807545, 0xB170F1F9, 0x2C14836F,
+0x2FFE2547, 0x3929AFFF, 0xF765E117, 0x9CD7630F, 0xCA645609, 0x81D62315, 0x3FF773A2, 0x70595582,
+0xDE297807, 0x06B7497F, 0x586775BF, 0x6FA71E48, 0x31DD9FD4, 0xFBC357F4, 0x9DF4F067, 0x649FD77B,
+0x08E134AC, 0x30CD9E78, 0xDCB0C873, 0xDF507CB1, 0x05C6BD6A, 0x5D7D6882, 0xC73F23A3, 0x975A8E81,
+0x86D1D60E, 0xBF42ACE2, 0x49490C2E, 0x1DFE6316, 0x3CF3B63E, 0xEB24D2D0, 0xC9F0176B, 0x12D7E228,
+0x416BA504, 0x7FD24EC7, 0x8F4B49F0, 0xAE371649, 0xBAE22F61, 0x9A2A9855, 0x9AECD3FE, 0x7C34BA66,
+0x6B5DD1A8, 0xF38644F7, 0x25B62843, 0x438C8A9B, 0x6D6819E8, 0x335D9894, 0x68B780CC, 0x2D10B3F2,
+0xE66BB01F, 0x6CDB6DA2, 0xC0E24A32, 0x666DBBA7, 0xCB28F53B, 0x504245DB, 0x80093F04, 0x4920427F,
+0xE864766B, 0x54FED4C8, 0xA103D796, 0x1D81A290, 0xCB66DD73, 0x87456DDA, 0xC06AF176, 0x6038DA2E,
+0xE5EA3B2D, 0x59B1B206, 0xA19AC5E2, 0x89DD9211, 0x7AA6E5A2, 0x01C0C3B6, 0xBB01FBA0, 0x51053513,
+0xBFC929E4, 0x7F6CC2AC, 0xB7745720, 0x435FB965, 0x2E728FC0, 0xFED56F5E, 0x5D8B2651, 0x7B4F9DA3,
+0x6B0A8C66, 0x602857C9, 0x05E84F9A, 0x291F891A, 0x9DE55565, 0x88D5C169, 0x976C14D4, 0x3E9114C0,
+0xD0011894, 0xE7B31D5C, 0x7AFCF41B, 0x3495112C, 0x0CCDB201, 0x1599E176, 0xB8774BD4, 0xCFA33C5E,
+0xA9E55641, 0x712C4359, 0x295691EC, 0x17D402FA, 0x252AB82B, 0xA4C8D4D8, 0xC06B25BA, 0xC5FDE178,
+0x9970D6E7, 0xADDA0E4F, 0x3D0A256D, 0xC48233C5, 0x9F9967FE, 0x6113F926, 0x66A63FDA, 0x9D77E175,
+0x93A47ABA, 0x223310D2, 0x4D6A75CC, 0xD84EE829, 0xCAADED36, 0xD358246A, 0x45A1A989, 0x5B289C0D,
+0x3C2F16AF, 0x8579303C, 0x0487E6E1, 0x6662E7AD, 0xA078FECC, 0x3F324CDF, 0xD9A6FE62, 0xFD5A394D,
+0x0E4B8F62, 0xE915EFC7, 0xC888AB7F, 0xB4E2B265, 0xE9DECC5A, 0x4722F68B, 0x781775E9, 0x333D1050,
+0xD02F24C8, 0x5509E787, 0xE36921D3, 0xB746005E, 0xC5D08577, 0x66A665EC, 0x6DCFE140, 0x9C33C68E,
+0x56252E07, 0x7C2E6521, 0x74FCFD81, 0x9E72858B, 0xF9BDCB28, 0x14DB4F16, 0x68972D8C, 0x20FE1ED6,
+0x6A1995F7, 0x0CBC8126, 0x5B0F17C1, 0xBFDE3FD5, 0xC6D302DE, 0x880D587B, 0x373BC0C6, 0x8ED09961,
+0x738A9459, 0x4C6FD434, 0x61F8E03E, 0x35BFE0F1, 0xAF187AD6, 0xE726BEAA, 0xE120F422, 0x6A6FD49E,
+0x55FD2617, 0x1EC63097, 0xFB742143, 0x13645BAA, 0xF594A8D4, 0x5A2505F0, 0xD15F62FD, 0xA5973BCA,
+0x47048BC0, 0xC2614D42, 0x7970E227, 0xD1EC2357, 0x0CDBA706, 0xBDC21533, 0x526ADCCE, 0xD3949763,
+0x23B27D3E, 0xBC11B1E4, 0xC6EC7E57, 0xE22ED4A9, 0xC8316F45, 0xFB7C3102, 0x03004441, 0x4A771BC4,
+0x765970EC, 0xEFA530D7, 0x26CB5B44, 0x1248F847, 0x29A7AE51, 0x33E7254F, 0xAB2CEDF3, 0x0EBE228B,
+0x349192AA, 0x6A4D1F97, 0x81102966, 0x5F95C290, 0x9380AA8A, 0x411A89A1, 0x1FC17CBD, 0x4B25C13A,
+0x185A1532, 0x815997C0, 0x344BE826, 0x2FEC5E49, 0x4847970E, 0x0B2DE68B, 0x986E8591, 0xD26D9DE4,
+0xFA85101A, 0x5453953B, 0x0DB45C84, 0xDA0DE61C, 0x1A681AA7, 0xAB87D38A, 0x4B1793E0, 0x0AF8090F,
+0xAC139420, 0xFB3A1C1F, 0x2233A743, 0x39902809, 0x63890C47, 0xDE5FB18D, 0xD677959A, 0x3368595D,
+0xBE48EE98, 0x0E52993E, 0xC6B67696, 0x96926B6B, 0x82D09AED, 0xC98D17AB, 0x10434C64, 0x6F31F70E,
+0xEA69A459, 0x19B83783, 0x3FB83561, 0x12219D2A, 0xA68D9F09, 0x05428860, 0xDBA58AA0, 0x73132D1D,
+0xFE933382, 0x086747E8, 0x0D03F7A0, 0x1C437D6D, 0x85558827, 0x86FD1110, 0x9F4E43E0, 0xD6BEA8E3,
+0xA5D98650, 0x217EB81B, 0xD895F6C0, 0xAB3FDC6D, 0xD911C003, 0x4DBD1040, 0xE9B34F6F, 0xEA800456,
+0x2AB0585E, 0xE6021520, 0x204D5088, 0x66EA8BE7, 0x8AC0B02C, 0x4CF0E391, 0xC34EBF53, 0xDCD3BD4B,
+0x50673340, 0x0020BCB1, 0x21010000, 0x1E0A8088, 0xF8B6993F, 0xA460DC0D, 0xE3FFFFAE, 0xBEFE7FDA,
+0x1C1F8D94, 0xA4B6C624, 0x2BBE9DFF, 0x1F3CCDA5, 0x1F8004CE, 0x332332C6, 0xCAFAC206, 0xBD615901,
+0x3C124E1C, 0x66394CF2, 0x669771E9, 0x254746EB, 0x22D3B09E, 0x50F3D8DB, 0x28DA888B, 0x6BC5B255,
+0x0A484C7A, 0xE16DE20B, 0x260878B7, 0x9E5A1C43, 0x51453C98, 0x63800A54, 0x5A9764BD, 0x856190AA,
+0xA124AFBD, 0x5BCD9CC3, 0x5811A49A, 0x11C41ED2, 0xFC2E0B49, 0xFD27D042, 0x6C0BD1D1, 0xF3BB8C5D,
+0xEEDA5228, 0x2CCBDF9D, 0xDE38546C, 0xAACDFA59, 0x302B1ED9, 0xF9DF9ED5, 0x8C900B83, 0x8E677A0B,
+0xF01EA4F1, 0x11176336, 0xB51DF801, 0x4D90A2AC, 0xC1AF386A, 0xB17E8872, 0x865FE606, 0xC5998125,
+0x22011A36, 0xBC572807, 0x91346ED3, 0x891E6FB5, 0x3D3DB8B1, 0x71A7F3D6, 0x17C875D7, 0xC5097039,
+0x4340CDD4, 0x8B34E783, 0xDCF7A4D4, 0x6CE1912F, 0x7884D017, 0x416B2BFA, 0x156DE694, 0x3BB0BD45,
+0x04589AB0, 0xB201BF5E, 0xD9B5E357, 0xCB8BE489, 0xEBCA4489, 0x34BAB877, 0x7A42CC89, 0x214BF46B,
+0x77AA698B, 0x159CCC5D, 0xFCA356EC, 0x02C54484, 0x09098ED3, 0xB1635122, 0x813EB2B8, 0xE8C13368,
+0xE2C9C041, 0x1B45B3D8, 0xEE257E4D, 0x87CC93C6, 0x098AA05B, 0x6A049E8B, 0x4E95AA0F, 0xF1D11863,
+0xC1C52994, 0xBA2EC14C, 0x13ACA6D2, 0x4717A886, 0xEBFFD9A8, 0x12222D27, 0x3AF42BC3, 0x3CBE6816,
+0x43FA0211, 0xF4E311A0, 0xC3282E88, 0x3C32491F, 0x93D2595F, 0x22CB03B9, 0xEB3CB179, 0x8336E5E5,
+0x0C1DA767, 0x98AB9612, 0xA993B823, 0x7D5F680F, 0x23118CED, 0xE4F49CF7, 0xE69BF01C, 0x86A058DE,
+0x8987AD3B, 0xEE9019BB, 0xF9F306F9, 0x3E746BD5, 0x7E3A84F5, 0x6720FC78, 0x2B9BF73A, 0x82BA3457,
+0x35285642, 0xF64E2A6F, 0x2CA416D9, 0x1F28DC6E, 0x36565864, 0xE5D82466, 0x67D7644C, 0xB02A48E1,
+0x03547622, 0xC7969403, 0xA1EA530E, 0xCFACD067, 0x919F986F, 0xB19B0EDA, 0x77B01A19, 0xBBCBB6AE,
+0xF436FF59, 0x1FA63AEF, 0x937EDB37, 0x1A3529F9, 0xF7014FDD, 0xBD5D19D1, 0x4E46000E, 0xBAF0D764,
+0x504FB6D8, 0x3099D1B6, 0x884C501A, 0x51912AEA, 0x99013F02, 0xBFA6D78C, 0xD8AD11B9, 0x64442661,
+0xFFF26336, 0x2DD40AC6, 0xFEA6C359, 0x42D0CBBD, 0x634CCCEA, 0xF3E9FA14, 0x9A162131, 0x404D66E0,
+0xA6F5E906, 0x0DB26A03, 0x44A69542, 0x573A604A, 0x4ABD4F05, 0x2333F497, 0x58BA6EDE, 0xC50245B3,
+0xF4FD8227, 0xC46F0B1B, 0xF3345DA7, 0xF0FF298E, 0xCFB33EB6, 0xB2DB8772, 0x4D8B9BC9, 0x8810D640,
+0xF2B75FBA, 0x2E34F1C2, 0x4FE75F22, 0x6D7B32C8, 0xA8637F5E, 0x9E722CF2, 0xAD17A958, 0x25FD5A0A,
+0xAC2D35AB, 0xC760C1D6, 0x1F0A28EA, 0xC51A279A, 0xE0BD25FF, 0x896BF5F7, 0x55A9597E, 0x070FC39A,
+0xCFBEFE4D, 0x9B1A62B7, 0xB2C41003, 0x83BC8CA4, 0x7CC7E2E4, 0x479E5750, 0x2A8C14E0, 0x37B6D10A,
+0x78D1C6AC, 0x4841AC90, 0xF7C401CC, 0x4A868157, 0x5E7B0229, 0x243C439D, 0x4E7E12B2, 0x93D57D3D,
+0x7F434956, 0xA2F48077, 0x30080884, 0x9FA4553A, 0x9C061D05, 0x14161470, 0x82FF5B12, 0x5B7C7607,
+0xCE084FF2, 0xB1E8463B, 0x0984B431, 0x501E502F, 0xA4DF9860, 0xC07B698B, 0x033DA2DD, 0xD22F95EB,
+0xB1A55421, 0x2A2B55D8, 0x27E09B54, 0x5A991D6C, 0x9A0866F6, 0xCEC540B9, 0x8F70E1B7, 0x0F3AE5F7,
+0xD6AF5560, 0x84588EAE, 0x1C98C7D7, 0x5F8CC773, 0x429D1558, 0x553388FB, 0x703E9CAE, 0x38B66DAE,
+0x78AFB674, 0x17356203, 0x29AB00FB, 0x4C88E2B3, 0x8B93F756, 0xEDF55BA9, 0xE99D3FB2, 0x2F9D0FD0,
+0xCE14804A, 0x2B77AF7A, 0x35682DEB, 0xD3D5CD0F, 0x612A13F0, 0x222F9DF8, 0xDCC925B1, 0x92A7AAAD,
+0x1346180F, 0x023C2887, 0x8923C802, 0x337D829C, 0x26CE1255, 0xFF6D0684, 0xCE2AD8E6, 0xF7E7398A,
+0xCB28B2D4, 0x7FB950F7, 0x53115FA8, 0xB7C107B5, 0x1F1B1BB2, 0xDD3D94A7, 0x9A9A4B1B, 0xFA41E3CB,
+0xA61AC26D, 0xA53D1C75, 0xD1CF16C0, 0x4988B796, 0x9B66270C, 0x485EBB9A, 0xC394A722, 0xDFE59F06,
+0x8BFBB9BD, 0x17986F4B, 0x06DE10E1, 0xBA6A73FD, 0xA27EB07E, 0x32D8F1A7, 0x28D112F7, 0x1973F55C,
+0xA58D60B6, 0x44648AC2, 0xD323BC8F, 0x79D30B43, 0xC5D37D7F, 0xDFDA4C7E, 0xEB3E31D9, 0xFBE7AB56,
+0x70356B8C, 0x61584446, 0x0579C66F, 0x664E6C3C, 0x6237BB90, 0xB8FC787D, 0xDE34DD19, 0x23799DDA,
+0x0F088FA1, 0x85A2250C, 0x8408CEFD, 0xE77E3F32, 0x1318FE5E, 0xCB6F5D03, 0xBFAF8D3B, 0xA615BF7C,
+0xBC385953, 0x625FD39A, 0x62B847A3, 0x29E2650F, 0xF98004D8, 0x28CDE967, 0x2C09D57D, 0x60BA72B9,
+0xD0D349BB, 0xC1998116, 0x1485CDA3, 0xA3FCF91E, 0x3A35A852, 0xD1BECED7, 0x7FF6506E, 0x410BF613,
+0xAE0882FB, 0xD7F90DC1, 0x5DAEC7F8, 0xDE32B65A, 0xDBB8FCE1, 0x82DE43EC, 0x790FA597, 0x9894275E,
+0x506CC697, 0x7550CC0C, 0x8273A1FE, 0x1E45D6B3, 0x4308953D, 0xC9FE7382, 0x7FE801D7, 0x07685F10,
+0x2E993250, 0xB4981479, 0x333BEBBE, 0x29A8E87E, 0x0928D1E7, 0xCB6EAA19, 0x7F035AD6, 0x5CB11367,
+0x94AF849A, 0xB6AE90EA, 0x33A9C202, 0x7B098B4A, 0xF1787108, 0x5A05E05A, 0x8A1C0ED1, 0xAB9C7B79,
+0xA9F69E61, 0x13EE09A1, 0x7ADCA933, 0x8FBFCBFB, 0xCF2060C3, 0x58C9FF28, 0x04EB93CE, 0xF7F0F30D,
+0xBF5DFC81, 0x6FBCB9FE, 0x2D9DDC9B, 0xE2DA58A0, 0xFF69DD1A, 0xD9B222CA, 0xB66FDC6F, 0xC8004499,
+0x9EC605BF, 0x36AB2988, 0x72DED8C7, 0x09875857, 0x75B90ADF, 0x7731131C, 0x2EC46464, 0x6B0BEF16,
+0x5A6DC626, 0x5A101555, 0xF0300702, 0x697AE0CA, 0xD91AB470, 0xB1E0C9FB, 0x4978D9C5, 0xDAB2C912,
+0xAA0CA3FF, 0x2F952C3C, 0x50C87409, 0x4ED03141, 0xFBC49464, 0x818D251F, 0x07A07B21, 0x72B49868,
+0x15DA475E, 0x79296FD1, 0x18D2D21A, 0xD8B7808B, 0x9198D56A, 0x635AEBAB, 0x15517786, 0x29B57F1E,
+0xB02A9759, 0xE7ECC2B0, 0x41B50AD8, 0xBFF022E5, 0x45B19776, 0x47E1E31B, 0x8991F8D7, 0xCBB48781,
+0x2C4F4473, 0xA000624F, 0xADE426CC, 0x5CB7C614, 0x3D26C9DA, 0x9AA3FD3D, 0x2C3DA628, 0x6886C2EC,
+0x4C327153, 0xD710DF9C, 0x2FB78DFC, 0x6A947CDF, 0x8DE83602, 0x4EB48A3C, 0xC9BEFF9A, 0xAE4BE336,
+0x1B013B72, 0xE09499C9, 0x3A8FD34E, 0xF9BADF5D, 0xFF2B4A1D, 0xC83D2883, 0x2EB6FF05, 0xC9524983,
+0x25450B2A, 0x92FDAD8C, 0x49CD4625, 0xCC258ECE, 0xCF421949, 0xECF0ADDF, 0x6488DB0B, 0xC92BE591,
+0x3FD7D728, 0x3CBB3EC0, 0x211BF791, 0x8E466C2B, 0x91CC513F, 0x9067E2D0, 0x88E5AED3, 0xDDFDB6F6,
+0xD818D054, 0xAD25CA03, 0x71C77457, 0x8E393E51, 0x03852C1C, 0xF0B83181, 0x31C610A0, 0xFA75B1CD,
+0x27367176, 0xA9980763, 0x27172C5F, 0xDF09069B, 0xC9FE9959, 0xF0C39E6A, 0xCEFF35C0, 0xC8B198CE,
+0x3A63EF20, 0x3CCF6C90, 0xEFC6AEFC, 0x1D3AA9B6, 0x9C23CDE6, 0x8EAD6956, 0x009612C6, 0x57727AFB,
+0x1ECE2861, 0xCE0B9806, 0xFCFCFBC9, 0x69037423, 0xE1CCBD2A, 0x2E61142D, 0xE6FB4D40, 0xAFBFF434,
+0x335AF435, 0xEB53721E, 0xD12431EA, 0x398A89AF, 0x6F6110AD, 0x217518D1, 0x347665C5, 0x5A55C46D,
+0xA12F2039, 0x44A0C304, 0xDF6B7D21, 0x8F4F2CD7, 0xA19D196B, 0xC8BC2061, 0xF6637C0B, 0x40B71C74,
+0xE9647CD1, 0xAF0DF12D, 0x9AC0CC9B, 0xA8ED2EB4, 0xD7BFEE24, 0xA6EB10EE, 0x50A2CA26, 0x84F09112,
+0x5DDCFF85, 0x75A70374, 0x63CF57D7, 0x6AB8BB09, 0x590EA721, 0x41468AD8, 0xA1B1D4B7, 0x5669BE81,
+0xF5CE6CAE, 0x26270B55, 0xC4B6930A, 0x17109662, 0x46348880, 0xB8225591, 0x195E103E, 0xE4C4A1FA,
+0x423092EF, 0xAE124AC1, 0xB4149E60, 0x68BCD7E3, 0xAD474EAE, 0xA24ED5A0, 0x64A6C175, 0x5F9FDB5C,
+0xF042C4F7, 0x3EA56508, 0x61DCABD4, 0x887F737F, 0xCFD3C2BA, 0x7E1697D4, 0xDC649F88, 0x05C1D842,
+0xB6FA8D12, 0x006EBA15, 0xD461B700, 0x9D2ACE24, 0xC62D1982, 0x7A621148, 0xE5F937BD, 0x733FBB39,
+0xF6557D5F, 0x3164EA8A, 0xD3CC2574, 0x0AD22099, 0xB57A4D66, 0xD5F0C3EF, 0xFA181199, 0x20EB30DA,
+0xD602F77B, 0x70BD4EFF, 0xFDBECEFF, 0xA039E96C, 0xD9A353EC, 0x1886ADA3, 0xD330525A, 0x85DAEA47,
+0x22F21B1D, 0x88ABC654, 0x4BFFA6D9, 0x9C2FDAFD, 0x65C87002, 0xB4A8A55B, 0x07921B64, 0x6BD394C1,
+0x770420B1, 0xEB800129, 0x1E3D38E1, 0x60D4F91D, 0x9DEBF204, 0x40C62721, 0x7F2F5D64, 0xE2507A13,
+0x22E941C2, 0x4B04BAB0, 0xC198691E, 0x8CE35C02, 0x1E101F45, 0xD1075145, 0x88CCA577, 0xB4761866,
+0x69EE2546, 0x30741929, 0x3D3FD574, 0x0A04BC47, 0x126A49B0, 0x3EE8C7FD, 0xC42F8115, 0x2E5B518C,
+0x6E5673BC, 0x9BC698C9, 0x596D5530, 0x4BD6C116, 0xECA0CD78, 0xCF867731, 0x163DC499, 0xF57D304A,
+0xB7CAA948, 0x7665B020, 0xC7729633, 0xC2EDBFA0, 0x3C209F17, 0x9108C1D6, 0x0318AC47, 0x972C0EC6,
+0x6A93C61F, 0x09B9C6AD, 0xE393650B, 0x913FD12B, 0xE04C5042, 0xF7EB285D, 0xD8EC5300, 0x75140100,
+0xD1821225, 0x69E53F50, 0xB3DD7E4E, 0x4B83FEC8, 0x0C2AD8ED, 0x7A25C4C0, 0x065569AE, 0xFE2A9516,
+0x0ED895FA, 0x090B4EC5, 0x0DFB023B, 0x25027C61, 0xB593F96A, 0xC74B02AE, 0x522EF8EB, 0x463DA01D,
+0x29B3F1F0, 0x408AEEED, 0xC1F86E5A, 0xD57E6A2A, 0xB74425C7, 0xC798F8D1, 0x1AED4EED, 0xCE1A0F39,
+0xB30D4273, 0xBC89C00F, 0x810B21C7, 0x9802D1E1, 0x9F8FBDB4, 0xC22536CF, 0xE9992014, 0x6EBAC537,
+0xA5BCA2B0, 0x55B65E88, 0x75EFB514, 0xD49BFA5B, 0x9B93A822, 0x95A7E421, 0x16250BB4, 0xB7EE4439,
+0xA7675425, 0xF84C4CCE, 0xA59C3A42, 0x00ECA944, 0x52AA8BA6, 0xEDFD893A, 0xD7058CE2, 0x9C6E6D5B,
+0xC5DA561C, 0xDA440DFC, 0x8EA86BD4, 0x71978C36, 0x99B7E639, 0x3AD5FC62, 0x42DC45D3, 0xDA74267D,
+0x647BF2BA, 0xEC8925F4, 0xDEFFA5B1, 0x930CF00A, 0x206B2055, 0x3CCF1103, 0xF28E9074, 0xB5B7637D,
+0x14A20AE0, 0x2F3424EE, 0xE8987D2B, 0xED13B071, 0xE10CA18B, 0x0797FD55, 0x036B7153, 0x570BE6DB,
+0x0ED14562, 0x862A5551, 0xF67FC798, 0x29B2CC22, 0xB395F789, 0x701C379A, 0x183760EE, 0x38415096,
+0x7F7F1452, 0xDBE912D6, 0x12919464, 0x5B450E2F, 0x0733E1F1, 0xCC18FB08, 0xE31551BA, 0xA73254C8,
+0x9CE7919B, 0x68625572, 0x6CE818AF, 0xA1BAF868, 0x42E78863, 0x19BEE879, 0x774D4786, 0xB3F15B40,
+0xAC2846C2, 0xA9C911C8, 0x386B58BE, 0x3D81CF56, 0x2A98BF55, 0xEF8669D0, 0xAB96E5EB, 0xB4B901A5,
+0xA642BCAD, 0x88E06242, 0x3CA21F20, 0x5EA269FF, 0xA91F825A, 0x0C23628C, 0x052AA448, 0x769D405A,
+0xE9094C8A, 0xE996A996, 0xDA833446, 0xA9543E4B, 0xAF032A3D, 0x29510F61, 0xF874319D, 0x0DB10EDA,
+0x8AB7E70F, 0x38094B07, 0x42C0D291, 0x7B0784FF, 0xE0930D67, 0xE5792D49, 0x647D7E72, 0x31A349CA,
+0x637C709B, 0xBA8830B0, 0xD5AC130C, 0x61C2F27A, 0xEABA6EB5, 0x8CC973AB, 0x3223310E, 0xF0CA856A,
+0x689E40A0, 0xD2D50848, 0x6ABB89AA, 0x0A8A74C2, 0xDD80A308, 0x9310CC21, 0xB686B7D1, 0x7145CAAB,
+0x720D1612, 0x4D61802E, 0xF60E94EA, 0xC06D6B49, 0xEF16D6C7, 0x78086973, 0x9A41FC41, 0x37460070,
+0xCE856A62, 0xB69BA8DB, 0x40D702A4, 0xFD16A130, 0xD7195D20, 0x6DB00301, 0x64D0651F, 0x15E33C4B,
+0x86D88FB4, 0xFD1A5489, 0xDD9D52DA, 0x92F69B3E, 0xB0BF0A01, 0x0DABC99C, 0x7D83D253, 0x9E6C9AA7,
+0xFF0C23FE, 0x7C6182D9, 0xF2DD8E1A, 0x1E3BCED1, 0xFE3FB2B3, 0xDC394119, 0x7B887D94, 0xDC454A36,
+0x9E4C185B, 0x906E5355, 0xE8E5FA76, 0xB9F7BB88, 0x6A330180, 0x8202C548, 0xFCC367D5, 0x8B544BCC,
+0xAFC443E5, 0x5CE7A98C, 0x1AD2F181, 0x43C52D4F, 0xB3EC9E39, 0x6F4C53C6, 0x705961E7, 0x0CA63CF5,
+0xA7FFBAA7, 0x1131B72C, 0x025B039E, 0xDE993EE8, 0xF9FA99B0, 0xBEA86A14, 0xE1389A27, 0x59DA5AEE,
+0xB2B0C65E, 0x735A9CBC, 0x98332C7E, 0xFE46D574, 0x5C4336A6, 0xF38C3727, 0x7F728374, 0xA92146A9,
+0xE042D1A6, 0x3A6751F1, 0x89ADDBC1, 0x663786E6, 0xE13AEAAE, 0x794D6D75, 0x7690D141, 0x6B507E10,
+0x6A59976B, 0xC7609015, 0xEB760282, 0x7A4B664F, 0x1D02999D, 0xDDAD7AF9, 0x1E41E721, 0x9FF13C24,
+0xC122E959, 0xF1B49394, 0x2EC28094, 0x4F3474CB, 0x7A00690A, 0x0950EDDF, 0x171A8684, 0x68E1F84C,
+0x03A3B41A, 0x1CDE63A6, 0x03C452FA, 0x09408577, 0x8D27374D, 0x23382D78, 0xDFD0256A, 0x0ECB6139,
+0xF4BF0DFD, 0xBD782936, 0xB3D1D897, 0xB45A8F6F, 0x677A1F8B, 0x684AD05D, 0xE8E18DF6, 0x4BE7C14F,
+0xE389D64F, 0x95947FE1, 0x40FDD810, 0xC98D00C8, 0x9AA8B30E, 0x27D4619E, 0x866D1DFD, 0x1094427F,
+0x97E6BE57, 0x34E00311, 0xD23AA8EC, 0x73E7734F, 0x90B363DD, 0xDEC592F7, 0x56C8F265, 0x6AD280BA,
+0xEED2F7E2, 0x9EB40525, 0xA2AFD502, 0x31CA6431, 0xD8CFCEEC, 0x9132A1F5, 0xC8166AC5, 0x15E03AD6,
+0x36906F78, 0x8CE0BCB5, 0xD0EC5BE4, 0xCD5E68CA, 0xB029CFDB, 0xF70278CC, 0x4FB5C553, 0xFD4B391B,
+0xBED656E6, 0xBC9C505B, 0x39450538, 0x8CD7F625, 0xE4A883F9, 0xCED743A3, 0x88FEDC1E, 0x84577DE3,
+0x6B305B8C, 0x35C20252, 0x74634F5C, 0xBB04FE39, 0xC77164CC, 0xDA70A819, 0x817527AC, 0x0562E240,
+0xF4A87373, 0x12E93869, 0x86F63751, 0x2F5E5CD8, 0xDCE17998, 0xC3209D82, 0x08247CE3, 0xFC8E9014,
+0x57D9D69D, 0x61F2EDD9, 0x011842D4, 0xBC11B558, 0x6ABAF81E, 0x1C95D8FE, 0x631ECFE9, 0x7251AC39,
+0x8296FFDA, 0x43ABCC36, 0x0EAB426F, 0x41199B6D, 0xAC02F26F, 0xA34776BA, 0x30B69AE3, 0x694B5BD2,
+0x56A00EDF, 0x57F572DB, 0xEE3175D3, 0x21B92B5B, 0x8895BF09, 0x0F3A0D79, 0xB55C1CE6, 0x6AB58B4D,
+0x085A031F, 0x4E83510D, 0xAF34BBB8, 0xA994A9B5, 0xFCB5B85E, 0x8444BA8A, 0x8DCCBB3A, 0x2E8362E7,
+0xDEE02193, 0x1EF536CF, 0x44931E82, 0x7F2E231E, 0x7A0BDBE6, 0x2C9F2C79, 0x736A631B, 0x37F121EF,
+0x49CDA607, 0x29C37EE9, 0xA4A07DF4, 0x22CFCCB9, 0xE98D350A, 0xA6C5A9DE, 0x4956FDDD, 0x4AC9A8A7,
+0x1A83301F, 0xC10EC611, 0x3A10183F, 0x56C6D651, 0xE3B05CE2, 0x7C16B048, 0x4A82CCAD, 0x0B174617,
+0x116EBBCB, 0x138E9D5F, 0x1A946B1B, 0x7BE5814B, 0x386C5175, 0xBD1E9CD6, 0x7D6DD20A, 0x6DF3B9C5,
+0x4639E379, 0x8502AC6F, 0x2D74648F, 0xE1677190, 0xF9EA96D3, 0xF73904FA, 0xE43B0F4F, 0x5445FF73,
+0x6D1A618D, 0x1C77B72A, 0x7BB4001E, 0x7FC5E0B0, 0x2634E71C, 0x8B507D4E, 0x8AA63EB6, 0xE8E69BDF,
+0x7CE8A65B, 0xCE3291EC, 0x35087BD1, 0x3BD8E56E, 0xB4C396D7, 0x48BCD46E, 0x81362CA6, 0xC790C3B8,
+0x1130D87B, 0xFA637394, 0x2EFC9DE4, 0x022DA048, 0x595D4059, 0xBC6CE62E, 0x50004305, 0x344525A7,
+0xD78AC563, 0xFC9B87EF, 0xD0F08020, 0x9DEFA533, 0x972337ED, 0x4D8588A2, 0x53B19AA2, 0x15C5870D,
+0x7EC460FF, 0xD8345732, 0x3F4B1537, 0x62E54541, 0xA098C209, 0xC3FCA32A, 0x817C7A9F, 0x798B0620,
+0x623E9E5B, 0xD36B025D, 0xF5118436, 0x6759E356, 0x4F6B6A22, 0x3D285FA9, 0x81C709FC, 0xE8E54BE2,
+0xC109660F, 0x48BB7B8A, 0x01947F4E, 0x4A95016F, 0x312C37E5, 0x0DCB3EA5, 0xFC044FCE, 0xD27EEC29,
+0xF3739583, 0xA3CEAA53, 0xBE0071F1, 0xF2DD8AC4, 0xEB02F569, 0x33E719D6, 0xCF4E82AC, 0x4FD7289C,
+0x093747ED, 0x27B77EB1, 0x5157F5D6, 0x255D2136, 0xFD9D2FF6, 0x89BA77F0, 0xC7E795CF, 0xB545FC24,
+0x39542C6F, 0x54B3A7F2, 0x0FD08B54, 0x6D39AF33, 0xF4701914, 0x56003B2F, 0xAB90A2D4, 0x3DB7A27A,
+0x972A8614, 0x1F4F1B8B, 0x9F901A5C, 0x9B02B44F, 0xC4AEF83A, 0x39D752EA, 0x2D6D981F, 0xAED78D24,
+0xE81C02B0, 0x7182D0B4, 0x88950E25, 0xF193BDE1, 0xECD3F15B, 0x2365E7DD, 0xC7D98191, 0xAB9B7A8B,
+0x7F6D00C1, 0xF9E3A5A7, 0x5CA22CAB, 0xDEFD757E, 0x874EC400, 0x9E3A1C09, 0x2DD450EE, 0x1F14FDC7,
+0x8B28D31B, 0x622770A5, 0x7AECD668, 0x25D93AD4, 0x7D5CB008, 0x69629FAA, 0x13BB566F, 0x6692734E,
+0xB9DA99C4, 0x042C7D28, 0x8D83BE0C, 0x9F276C45, 0xD7895259, 0x63C8A3ED, 0x73873F92, 0x5F0D5CE6,
+0xC0212D34, 0xFAEF6B73, 0x5A4E9DE3, 0x38098DD3, 0x2A27D83A, 0xBB912EDE, 0xF0A6659B, 0x22E79DAE,
+0x5EA98C93, 0x93896967, 0x8A3305A2, 0x4278B0A2, 0x8B56FC3C, 0x71804836, 0xCFEC24B5, 0x309691CA,
+0x78FA7426, 0x9131B530, 0x8CC53DE2, 0xD36177DF, 0xAB666CA3, 0x03BA8AEC, 0xA477E6DE, 0xF89E1F29,
+0xACF1C799, 0x86BE16B5, 0x841DC59F, 0x7BA56B1B, 0xF1C01188, 0xE870AF22, 0xF2B53637, 0x67FBA312,
+0x6CB31C05, 0x7186D494, 0xF4C59623, 0x9DA7DC5B, 0xFC4C3369, 0x65E149F3, 0xD0276D16, 0x6006B2F6,
+0x539AE424, 0x2BF88513, 0x4256410F, 0xE1896E51, 0x522C7605, 0x328D5A36, 0x0F5C09C2, 0x269330B4,
+0x3F45FE87, 0x3147D528, 0x35C1AAAD, 0x5AF79F24, 0x040CEC1D, 0xA38D362B, 0xEB6ED24C, 0x514324C7,
+0x4F44D000, 0x2420C2E9, 0x42580B97, 0x5C312539, 0x46EAF86E, 0xE08338BF, 0x3AA2C84D, 0x06D528ED,
+0x40AD3085, 0x29FE9D3C, 0x9330C8B8, 0xB1BE33DB, 0x8FBC8E34, 0x90E7CD8C, 0xD296DECD, 0x9F49FD54,
+0x1141A48F, 0xE931D562, 0x33BBF3B8, 0x0C751C22, 0x8E8077B5, 0x101FE9C0, 0xFF78F5C0, 0x0ED3E56F,
+0xB4FCEF6D, 0xA8858AC0, 0xCC173BA9, 0x6AC98B2E, 0x683CD1EA, 0xAD55201A, 0xCB2D680A, 0xF9A3F4EC,
+0x3D29B61F, 0x8171F672, 0x1C745ADB, 0x1C33F0F2, 0xF0E239A5, 0xB7A90659, 0x30B71256, 0xA9B0FE1F,
+0xCABF2DE4, 0xAAEAA423, 0x358A15B6, 0x46A01890, 0x950ACF0D, 0xCA5629D7, 0x98DD260F, 0xCD6FC6BA,
+0x6A4B52A4, 0x8DC6429F, 0x44593F19, 0x7D186915, 0x32F1F61E, 0x958C9312, 0x388A19BA, 0x9834C2A2,
+0x034085A4, 0x19B13C16, 0x14F25223, 0x4DE915AB, 0x7C5329F1, 0xF00080A1, 0x60B764DC, 0x4EFFDC77,
+0xE1CF95BE, 0xF16B9731, 0x82392AD7, 0x4B33279F, 0xFE88F8F6, 0xEB27A973, 0x93E6A90C, 0xC1B9681A,
+0x1F9E4114, 0x17EF5AFC, 0x5E067F8F, 0x37372B0D, 0xB41E6525, 0x6059C8CA, 0x1222E546, 0xDF1E315A,
+0xFFDDEF65, 0x03C347D0, 0x404F7000, 0x2B534459, 0xA9DC1BB7, 0x884CA265, 0x7181EE35, 0xB4340FB2,
+0xAEBB1EFB, 0xC6FDC928, 0xFBD3BE19, 0x1EA31A20, 0x6292338A, 0x479F2D78, 0xA88E246E, 0xEFAAA62E,
+0xB768EBA4, 0xC6D86F0F, 0xC8C867FE, 0xABDC51E5, 0xCDE89445, 0x319CFCDB, 0x1E8CF8C5, 0x853A263C,
+0xA02A1D38, 0xC8029D14, 0x37B69D69, 0x086636EA, 0x62BE4A88, 0x570FDC60, 0x0BF37238, 0xC7C4FDA4,
+0xCEFAC85D, 0x44586434, 0xA4D8271B, 0xCBD4DC9B, 0xE46B83BB, 0xF9B9D527, 0xF52C4FD5, 0xEFA42DD7,
+0xC18D979B, 0x78DC32DE, 0x280B06CB, 0x37F09987, 0xEE14D033, 0xD60D355C, 0x4EAC28F9, 0xE516DB9F,
+0xE7A36A1E, 0xF74BB2BE, 0x47C90810, 0x34F7549F, 0xBC7EBD47, 0x189CECAA, 0x56532E5F, 0xEE107072,
+0x3B727823, 0x9C54BBCC, 0xF8887891, 0x07DEBCBA, 0x8A5C2900, 0xB5D7DC45, 0xA46402A2, 0x0D2F3B96,
+0x6B54F6E7, 0x123FAE19, 0x45D273E9, 0xF6FA62A4, 0xEB3D7510, 0x32563447, 0x62FCB342, 0x02350C1A,
+0x36FFCBA7, 0x085BD817, 0x25AD74EA, 0x036F291C, 0x5B1852C9, 0x172753E7, 0xCF8327E4, 0x27BEB561,
+0x4B7F8DE1, 0x0E442E4B, 0xE2989AAE, 0xB40ABAAD, 0xFCEA5B9F, 0x49CDA0B1, 0xA913A564, 0xDEEDE732,
+0x6E9C6D49, 0xAFCD6BAD, 0x217A37E1, 0xF0B8C324, 0xE59BECAB, 0x0637104B, 0x4567ADAD, 0x7995A484,
+0x01D4C0ED, 0xB56F8131, 0x8C674DDD, 0x454F3638, 0xF7CB5AD9, 0xE8A298F0, 0x6FF98A7B, 0x1D8099F1,
+0x2C3297B0, 0xE01A99C6, 0x4CB86DDD, 0x0A1F6C68, 0xE1AE8B07, 0xC215CC9C, 0x6507CB38, 0x64A85843,
+0x68F409D9, 0x52F19A79, 0xA0026724, 0xE92DE7EB, 0x5A56ED1F, 0x71172A4A, 0x737F2CAD, 0x3622D196,
+0xB48265A1, 0x44E2A3A3, 0x1FB4238C, 0x57CD6319, 0x658D4645, 0x012CBDA7, 0x2C062B2B, 0x10A99E44,
+0xE5208F75, 0x23425155, 0xB70BB164, 0xF30190F4, 0xD7803C9E, 0x26FD82B9, 0xAAD6407C, 0x64F070B8,
+0xD6F453A1, 0x5668DCB2, 0x5540EC0B, 0xAF491F3B, 0x2F7456A4, 0x1396DFBC, 0x25A4A46F, 0xBB9C45A7,
+0xED9B7FB6, 0x5591A6AF, 0x694C3C01, 0x66F7DDFB, 0xE5C04EF5, 0x8BF1DD02, 0x353962A5, 0x134007EE,
+0x2BD1BE41, 0xA0379B49, 0xA86E76A5, 0x5EC10EFF, 0x20D3B274, 0x9293DFC2, 0xD548CE48, 0xD85E0BB1,
+0xDABF5399, 0x0E58E778, 0xBE5473BF, 0x81D3E557, 0xD1247505, 0x8CBA3368, 0x7F7496CB, 0x32644886,
+0x1F313BF7, 0xB3F18E6C, 0x2479C143, 0xE2761606, 0xC5A840E6, 0x8B510E13, 0xE4AC730A, 0x32FD9429,
+0x8E19A6FF, 0x457286F1, 0x694F4D8A, 0xF4D40850, 0x02B1D68F, 0x66E5EC4E, 0x9F6D7B3B, 0x747B43AF,
+0xF7E4B26F, 0x6653043B, 0x58575844, 0xCD07F67E, 0x99E92E16, 0x52EBDAA6, 0xF54924CB, 0x375A2BAF,
+0xF0B3DC5D, 0xAAE3C35C, 0xA8404541, 0xAE2F5E59, 0xEFBD2AC9, 0x8D94F122, 0xAFE2A86D, 0xABBCA737,
+0x740DF7F1, 0xDE53BF5C, 0x03C5DB82, 0x9E5BCE9A, 0xF1AAA3BC, 0x40720A63, 0x16F107CD, 0xD8AEB185,
+0xAF09EBF0, 0x4D613EEE, 0xF6A3B99D, 0x1E730EB4, 0x9996CDD8, 0xDCCF6F15, 0x8248B2F3, 0xACA27C20,
+0x1B978EA4, 0x1CFD9BE0, 0x69B1F0ED, 0xDAA19244, 0x3B97A6D7, 0x7603509A, 0xBB4EE416, 0xD065CA1B,
+0x77A1212A, 0x20CAD204, 0x4BF98289, 0x29A6B711, 0x5B8F0772, 0x2070F54E, 0xD14A5BCD, 0xC1B14BE2,
+0x5398E587, 0x72FC4836, 0x931AC806, 0xA0E560A3, 0x83CB3CBC, 0x3ACCEE21, 0x97FC8B14, 0x23452941,
+0xAD23536B, 0x9B71217B, 0x06864EBB, 0xC20B8497, 0x753AEE15, 0xD9C30732, 0x5DB868CF, 0x8E1E0905,
+0x85D8B2F4, 0xE85F6D80, 0x1A4625F1, 0xFB4A624E, 0xCF264862, 0xB7CC55DC, 0xB59C8A88, 0x842C5E22,
+0x30438AD9, 0xCADD58CB, 0x09511699, 0x06D1577B, 0x7531B32A, 0x41D221C6, 0xAF9B6B9B, 0xE7480140,
+0x817B66EF, 0xEEF19CAD, 0x449ADEB8, 0xBADF432A, 0xB8D5B83F, 0xD79B1BC2, 0x152254F7, 0xF46F8223,
+0xAA4E40B7, 0x568D3374, 0xC222BB3F, 0x0CF59F21, 0xFEAAB75E, 0x1751B6DE, 0xE583D47E, 0x82156F28,
+0xA86911B7, 0x3720A6E1, 0x8E8ED930, 0x331FC1A1, 0x17F50058, 0x169407F4, 0x8FBCADF6, 0x8F1DCBD5,
+0x1C70382C, 0x42B15B2F, 0x422968F6, 0xE9C1DC4D, 0xFD2958C0, 0xF7FF224A, 0xD7546FD5, 0x43AA72F7,
+0x9A4E8E05, 0x470CC5DD, 0xABBB5431, 0xAB509256, 0x74FF9058, 0xF155E2B7, 0xEA063881, 0xC2CC02A6,
+0x46B48460, 0xD7C903B7, 0xD3A33962, 0x255BF448, 0x3F486353, 0x39C9CFBE, 0x9BEF1F8E, 0x6BAECE12,
+0x9683B4BC, 0x0CE23A9F, 0xDF63C687, 0x858691E6, 0x06C095F1, 0x60584C7C, 0x478274D9, 0x155E97BB,
+0x3E89ED37, 0x83E687CF, 0x3A179921, 0x4C36920D, 0xCED9B571, 0xAFC15CD5, 0x02786BA2, 0xA46D59D6,
+0x31F9A1CD, 0x1A3DB233, 0xD2685AB3, 0x6B49A09A, 0x8FA948F9, 0x261CB8B3, 0xEFFA9475, 0x33E661F6,
+0xAC1EC9D8, 0x3EF667DC, 0xBCFCA5DC, 0x03433D02, 0xFFDA9270, 0xC67F4214, 0x840547FF, 0x1219BEDB,
+0x21D6C9F8, 0xE4B0E2FF, 0x758CAC0A, 0x46B1F96A, 0xC7C886A8, 0xE9BC835D, 0x740AC79D, 0x815588BF,
+0x9F644514, 0xE374BF2B, 0xFBE2C365, 0xA8A92213, 0x89404C80, 0x528A59F7, 0x1A4753DD, 0x2B7CD528,
+0x7C9ED905, 0x7BFD1FE4, 0x7606C588, 0x9CCDCA5E, 0x17FE3CF7, 0xC2D42C1B, 0xFED05EE0, 0xB6234978,
+0x670F2E0A, 0xA3EB3CBC, 0xCD0675A7, 0x342DB478, 0xF6C43196, 0x5DB46238, 0xE994DA75, 0x61ED691A,
+0xBBB79F59, 0x0B279B66, 0x382D448C, 0x835C1AA7, 0x089D779E, 0x37C9A7C9, 0x703A711F, 0xAF0B107F,
+0xD222569F, 0x43644409, 0x7FC654A1, 0xCD1590BE, 0x859E221F, 0x4D1F42F3, 0xEDD66382, 0x43942ED1,
+0x9A8ACADD, 0xAC69EA1C, 0x15515A47, 0x71C0A91E, 0x03861605, 0x5983D3BD, 0xC9F922F7, 0x5EEACDA0,
+0x561C4E94, 0x6C5A9B71, 0x75F27525, 0x882C69EA, 0x8EAB75FE, 0xF9867B66, 0xD4112EA1, 0x1F03912A,
+0x8B7A34E8, 0x1AB1EDDC, 0xFD73174D, 0xCA4BBA05, 0xB3D0B4F8, 0x47D349C4, 0x10A59523, 0xB2F58A60,
+0xF0859565, 0x9349014D, 0x8FC7EF1B, 0x497C6533, 0x737F99BC, 0x1B095647, 0xEDEBDE8D, 0xC5EE1AA3,
+0x0B4A73D5, 0x6C57F99E, 0x2DDD7ECC, 0xF576878A, 0xC5036A90, 0xE65E48A2, 0x84DB3266, 0x7153399D,
+0x3307E997, 0xC043A8A5, 0x2730C41D, 0x2B3B8117, 0xFB75096C, 0x0B195585, 0x3F9DC924, 0xFD6F32F2,
+0xEE72B333, 0xFCF7FC10, 0xE65D2817, 0xF22F196D, 0x203022A8, 0xB1186DBE, 0x1CDDDEC8, 0xBEC7589A,
+0x4E404B1E, 0xE1B53993, 0xB18B2202, 0xFE28B58F, 0x59E8CBB8, 0x5E4D926D, 0x895A038F, 0xF64CDE34,
+0x83631F6D, 0x2B1475C5, 0xFBE579F0, 0xD576CC08, 0xEDF2DC61, 0x9FA14072, 0x2EF806FE, 0x815EA493,
+0xFA474F6E, 0x8A0ECCF5, 0x08BD5C7B, 0x4232F5E1, 0xCF91C7EF, 0x8C93EDE3, 0xC0C69566, 0x3C5375D8,
+0x4F27566A, 0x14AD58A6, 0x3AE7D2FB, 0x8146AB5C, 0xE67C9582, 0x42B7D78B, 0x0B895084, 0xE4746E21,
+0x8AAC0EF7, 0x995A9635, 0x97F9A758, 0x34BD12EA, 0x4C073E7A, 0x1A40A902, 0x0282C970, 0x83B36936,
+0xE9ACEB62, 0x6C18659D, 0xD670AC59, 0x881A83D1, 0xA236C983, 0x0FC14185, 0x17C7521A, 0x47826D41,
+0x5269837E, 0xD2101371, 0x36A3FC03, 0x902FBAC8, 0x873179A7, 0x1D2E4728, 0x7E52D117, 0x41FC0DED,
+0x94323634, 0x6D48A2CE, 0xC43D6264, 0x15551B33, 0x9CAAEBEA, 0xD2B45B6C, 0x07D03A37, 0xED907323,
+0x9174A84A, 0x453928D3, 0x49B9E123, 0x9ED9237A, 0x0E296EF5, 0x757DD1F8, 0x5B9E2D68, 0x6B93F439,
+0x8E850903, 0x77432F09, 0xCDB294E8, 0x7196B053, 0x782B2512, 0x11A60209, 0xC371788C, 0xAC6B45A6,
+0x6E8056D6, 0x7F78D9A5, 0x6F4DA788, 0x117E69F2, 0x390EE202, 0xE4DBCD15, 0x7737B067, 0xCCDD208D,
+0x77CF4651, 0x467CED6E, 0xBA09914A, 0x986B8945, 0x9D521726, 0x5239D1B2, 0xE3E391E3, 0x68D59C5B,
+0x1A603C56, 0xAA315072, 0x9D7B8DB6, 0xD7FB6568, 0xF448FFE3, 0xF3B4EA1C, 0x3D3E82C7, 0xEE14451C,
+0x3620305E, 0x5CF5C845, 0x2697FC99, 0x8C2C682E, 0x774B8135, 0x24B83274, 0x5D143C04, 0xCD0226FD,
+0x259C2D0A, 0x3E350D39, 0x79644B26, 0x8438DF8A, 0x8902A6FE, 0xF67E6085, 0x845209F0, 0x2276C50F,
+0x78AA810F, 0x30D5AF21, 0x676CF184, 0x6C530359, 0x9560191A, 0x957D60F5, 0x45CD7EAB, 0x6041E457,
+0x3CA82835, 0xD500FF6C, 0xCE1C8362, 0xF593C858, 0xFB5153BE, 0xE2C04203, 0x7892FFB7, 0xCA060C38,
+0xC7379B33, 0x2D8A5D39, 0x58233527, 0xA8B91846, 0x99B4B34C, 0x2DB099F6, 0x19EAFC1E, 0xC49F6480,
+0xD5B81E35, 0xE5F9E7E6, 0xDFAEB801, 0xF3689022, 0xC56AC6D0, 0xB83E6873, 0xDCD5927D, 0xEB18D342,
+0x575E1670, 0x324DC45E, 0x1CB17BDA, 0xFB16C40D, 0xDC776FEF, 0xDE4C7A8F, 0x4641B138, 0xDFC5B32A,
+0x570D95D4, 0x7CBE7840, 0x057CF45D, 0x7DF2A9FC, 0x809BDB69, 0x83584041, 0x30B77CAF, 0x7E1B8919,
+0x5955F9D1, 0x44133D8D, 0xC7C5C7B1, 0x398DAD5B, 0x1A7233B2, 0x1792661C, 0x4861B23B, 0x722D6CC1,
+0x34C0D302, 0x963659DC, 0x0C3664D3, 0x861EA6B6, 0x334726CD, 0x1A9699F0, 0xC10EA424, 0x39DEF76E,
+0x820BE7D0, 0x7BD26D65, 0x5A484158, 0x41E4644E, 0xB80F889E, 0x335A7E5C, 0x25166C2A, 0x52BD6BD7,
+0x595F2A43, 0xCEEE1096, 0x23BD607D, 0x1E02AA37, 0x7417B13E, 0xAF27C1BA, 0x3664630A, 0xFD98EB9E,
+0xEF0CDC4F, 0xF3740586, 0x21530A0B, 0x7EE25AF0, 0xC9173AAD, 0x77347FBF, 0xFAFC69AA, 0xBC5F95E0,
+0xC854C30F, 0x7E096247, 0x33BCE98A, 0x0602DDE0, 0xFC4E3F26, 0x887975AF, 0x6C324644, 0xD74DF489,
+0x75968F88, 0xBCD18931, 0x9D5CD95C, 0x2F3FBD50, 0x80331124, 0xBA8B43DE, 0xBC3050A8, 0x9FA21598,
+0x55EE7B98, 0x49CDCA80, 0x835BD29A, 0x9BEA92B8, 0x02EA8BD0, 0x3DC68CEF, 0xFF41AB34, 0x7A440D75,
+0xF13CF419, 0xEA872DFD, 0xB58B4E4B, 0x9928D828, 0x9708AAF3, 0x45E3C78A, 0xE134522D, 0x2DF5F940,
+0x88E330D2, 0xEC97B52A, 0x55536AEF, 0xD7D23F4C, 0xF76A42A5, 0xB83C035D, 0x54BB3648, 0xB82316EE,
+0xCFCFA0D1, 0x28457E42, 0xEC41A2F8, 0x780709DA, 0x2F7AD9B1, 0xBE1A94AE, 0x9DBF297A, 0x436D49CA,
+0x592A6BD8, 0xB9D971CA, 0x69268B48, 0x85452C68, 0x06F6A432, 0x6CCAF53F, 0x67CA59A6, 0xB93CE498,
+0xDF309FEA, 0xEE1ABFA8, 0x4FFD5D80, 0x8515D00B, 0xB56FA8A2, 0x11DFEAC5, 0xC6712E8E, 0x3C1F640C,
+0xE74F6790, 0x6EB09CB3, 0xFE0D3D48, 0x97CD90D4, 0x00111702, 0xE6813BD7, 0xB97A8CD1, 0x6A4EF86F,
+0xAD45C00B, 0x4F7A48D4, 0x519FACBE, 0x8B2E73A5, 0x633C0DF4, 0x80F3B904, 0x184FD415, 0xD4164844,
+0xFC1E9777, 0xF98FF9C2, 0xA633D08A, 0x15227A45, 0x72C6CCBE, 0xF5B0CCCE, 0x8B4DBBD9, 0x5444586E,
+0xDA9F82A3, 0x4BE0A85E, 0x7CD42760, 0xC9F46B74, 0xF061CCB0, 0x91AA98B6, 0x312F2849, 0x8982EAF2,
+0xB64C6819, 0xE7C2621C, 0x69FC06C6, 0x2E14142D, 0x5127FD67, 0xF4EDE14E, 0x5F2453B1, 0x4E07B32E,
+0x8AB380A5, 0x3DF592A5, 0x6927741C, 0x4842DDF8, 0x26491B50, 0xCCABACF2, 0xE9438CAB, 0x58A751C2,
+0x4DE89880, 0xAB84F9E6, 0xD36113F3, 0x2484D606, 0x5E424D41, 0x66AA1961, 0x334FD42F, 0x230BEF9D,
+0x2D65C4C7, 0x715F9A71, 0x5A1A79F6, 0x8D5224E7, 0x550DD464, 0x39C24961, 0x984B01B1, 0xDFCD0175,
+0x505C6C19, 0x89028F5A, 0x3D9313ED, 0x435E7BE7, 0xDEEECC49, 0x3651BEF8, 0x5D95442E, 0x784C1937,
+0xE61F04F4, 0x1EE8F4C1, 0x2C95C64C, 0x979795CF, 0x9FB8F5AC, 0xBD25D3AB, 0x5B5E1463, 0x0F365981,
+0xACC656E7, 0x6AF456F6, 0x5F095919, 0x95B7441A, 0x05381A1E, 0x0C5E2571, 0xA0199F93, 0xEB734FA6,
+0x1E162974, 0xEFA71914, 0x53460AE2, 0x08E6D7E6, 0xB8E4023F, 0x8ADB4DF5, 0x73AACFC6, 0x45BCAA17,
+0x1AE0B443, 0x24DB479F, 0x559CA726, 0x0DF7CFE2, 0xF341376F, 0xAA8EFFE4, 0x3E7ACE91, 0x53C05ADB,
+0xA792C0C3, 0x37FA4E54, 0xD8562320, 0x6EDE01F8, 0xF80CC6C6, 0x5629E78B, 0x8FAAAF5F, 0xF035D699,
+0x61EFBD43, 0x4DE532DA, 0x75254BEA, 0x8C2D3BB8, 0xE9597CDE, 0x00C704A9, 0x91C86B09, 0xFC3DE389,
+0xAEEA646C, 0x5AC4FECE, 0xB206E25C, 0xDF2F1948, 0x4925B32B, 0xFBFB3AA7, 0x5E595659, 0xACEF380F,
+0xD0D113C5, 0x76F1FAD5, 0x1F53C2AF, 0x22A474FB, 0x58AEDD14, 0x645EC5B8, 0x03F259F9, 0x8761A639,
+0x2A82D4A9, 0xDDD360DA, 0xED87E2C0, 0xD1CEB36F, 0x1D71F818, 0x0BB407E8, 0x20E83510, 0x1B480642,
+0x29805474, 0xCC658559, 0x0CB17AAF, 0xAEA27601, 0x7C47644B, 0x2EBFA85D, 0x4A590FC9, 0x2166F8D2,
+0x414658E8, 0x70BF86B7, 0xE36FB43F, 0x018FF137, 0x79DC639A, 0x2E271978, 0xAF4F48C8, 0x9505EDA1,
+0x188D663A, 0x44BA8381, 0xFF5DA294, 0xCEDB273D, 0xD07B1388, 0x3AD989E0, 0x743CA325, 0x07E35756,
+0x65E6F279, 0x1A0929D8, 0x31DB78BD, 0x31F63989, 0xC1F3216C, 0xC3B21403, 0x6C99BDAF, 0xCB556034,
+0xC0174C1E, 0x042313D1, 0x79365CD2, 0x36D6D608, 0x663E2A76, 0xB4FC5149, 0x1D0ECE2E, 0xCAEF3AAE,
+0x379A498E, 0x8204EC43, 0xD3670D07, 0xF0769073, 0x7084245E, 0x4B920D31, 0x066FE6B5, 0xEF3B8A4C,
+0xDA18121B, 0xC06B468B, 0x4209EC89, 0xD3DE7208, 0x8BF7CF8A, 0xD8D94EAA, 0x30879150, 0xFDA704EA,
+0x416687CA, 0x80CD4256, 0x53CD11BC, 0x0AA32D0D, 0xB864777C, 0x9567546B, 0xC155A4F5, 0x685F6231,
+0x9241B079, 0x0E0D2291, 0xBFBE7B2A, 0xFEBFD4A4, 0x6405F9CE, 0xB729AF7E, 0xD6264E00, 0xDF5FA1E2,
+0xB2786C6F, 0xB088A02B, 0x5455E721, 0xED39A8DB, 0x97B0DD69, 0xB7DCAED0, 0x122E69BC, 0x5F08FC7D,
+0xF44D56B4, 0xFE95C61F, 0x8DB3A2E8, 0xC274509F, 0x6F7AB713, 0xAC068193, 0x4AAEBC1D, 0x18A422F0,
+0x6A13F2C1, 0xA26BD712, 0xA0CB96D1, 0xF8A4BA20, 0xF2F9651E, 0xE216FA20, 0xF41C798A, 0xE282389B,
+0x16B921AD, 0x0752DCA7, 0x0A217177, 0x08858D20, 0x29DCB1F3, 0x7E40332B, 0xF0C4D42F, 0x4A01986B,
+0x321B2E01, 0x91AF6010, 0xBAFAE66A, 0x005D697F, 0x364A3DDC, 0xF9C32D08, 0xDB73FA7E, 0x88ABEE11,
+0x557F5438, 0x31DFEC45, 0xABFBCAEC, 0xF2E934A2, 0xE643A2B3, 0x360F4805, 0x550044C8, 0xA0F29817,
+0xF8512EBC, 0xD9183229, 0x67A780C4, 0xE88820ED, 0xFD03477A, 0x28E320A4, 0xEFD3D83D, 0x4E99E0C1,
+0xA572D631, 0x4225EE04, 0xE083AF6F, 0xB38458B1, 0xF38BEB8D, 0xAEBC03C0, 0x3ADED11B, 0x061B562F,
+0x54C61E7B, 0xC8EE0CAA, 0x0000477D, 0x9E010100, 0x12752A00, 0x0554FB7F, 0x9A9ECD22, 0x6B804497,
+0xC137EBDB, 0xD2B1A5C1, 0x753B1F22, 0x649EE0EF, 0x4FC0F27F, 0x045253EB, 0x1F412CB9, 0x42EB946D,
+0xBCC149BC, 0x7BE9F34F, 0xF4FD9547, 0x60CE94B9, 0x3D15A793, 0x314FFD5E, 0xDC89437D, 0x86AB93C2,
+0xAF1C43B0, 0x7816B432, 0x4489F78D, 0xA0DE223C, 0x6BFBA972, 0xFA3481DC, 0x729606CA, 0x7DC7DA1F,
+0xF694276F, 0x39F30EA2, 0xDF7597A3, 0x23676D5F, 0x66695E97, 0x1E0BA04D, 0xE81CC235, 0x55B60743,
+0x03F8E7D8, 0x587C52B9, 0x261DE5AA, 0x15758C84, 0x17ADD630, 0xEA491FFD, 0xB1EBDE58, 0x66594FD1,
+0x89060C0A, 0x15C30768, 0x5C6DE9F8, 0x9A934D00, 0xA3C584E0, 0xB916AC7A, 0x5CC20C60, 0x4442DC24,
+0x22E998D2, 0x259C21AF, 0x6A874068, 0xB4F79FDA, 0x072F05AB, 0x7914BA75, 0x25D8CDCC, 0x71542A66,
+0x972F275C, 0xCF2A8866, 0x1E1AFE1C, 0x6136CA9B, 0xD714F7B1, 0x59BCBFBB, 0xC36C530B, 0x08E868E2,
+0x4019F0DE, 0x51F32076, 0x44510289, 0x60A022CA, 0xB7B326FD, 0xC9CCACA3, 0x4E6FECFF, 0xDA6D590F,
+0x52F88551, 0xE243A85C, 0x46369DDF, 0x0E89B3DB, 0xE5953492, 0x677525CE, 0xC021BC9E, 0x084F1CC8,
+0x7E45B411, 0x9CA73A9D, 0x13BDFB9E, 0xE248F29A, 0x10462FD2, 0xDB666CA8, 0x1D736C45, 0x0B276ED4,
+0xBB03B656, 0xE93BE9B6, 0x67946528, 0x959820E6, 0xD4814DE0, 0x5E113686, 0x2B6FC80B, 0x354D2ADA,
+0x98A0E3BC, 0x0116C346, 0xC3997B7E, 0xF32483F2, 0x56F14D3E, 0x3D655E65, 0xE3A3178A, 0xF2203F43,
+0x38ABE58F, 0x34FA0922, 0x139DC978, 0x93DDA207, 0x36386A9A, 0xA52EA413, 0xAF61BF26, 0xE667113C,
+0x7CBACC75, 0xBAAACA02, 0x6F81861D, 0x6C157C4E, 0x12800303, 0x66535ECD, 0xDE89258A, 0x61F8CAEC,
+0x1A7AA718, 0x642539B9, 0x4FC9091A, 0xA832EB97, 0xB45375FD, 0x76FD48F7, 0x02D3CA98, 0xE0DD452B,
+0x68592336, 0xFBBC566E, 0xAE8E68A6, 0x5C36463C, 0x26AE7D93, 0x49650BED, 0x72BD3213, 0x68EE15CC,
+0x6F896422, 0xDC233239, 0xEA976CD7, 0x85EE7F96, 0xE090DEA0, 0x1B5282F3, 0x06C99DDD, 0x017503D8,
+0xFA61BFA1, 0x728E5C5C, 0xE67DCE04, 0xF9AB4EE6, 0x20FE1D64, 0x73B806B4, 0x94F271F3, 0x54782838,
+0xEA4C1F41, 0x0E1BA1E5, 0xE85A21DF, 0xB9F17F7C, 0xC13D3F8E, 0xE0ADD11D, 0x8546CC03, 0xFF15E977,
+0x55EB1F62, 0x8BD367DF, 0x16DC03BB, 0x87AD3AAE, 0x09D45E01, 0x41D94EF5, 0x79EA7463, 0xE2C55F08,
+0xE46AE75B, 0x2CAB1001, 0x79509B0D, 0xACE95ED6, 0xD973A663, 0x788C49FC, 0x997FDB07, 0xE6C8EE76,
+0xD585134F, 0x9C9AE460, 0x18458489, 0xD9238326, 0xAEAD6304, 0x01F66136, 0x2985616B, 0x2593164B,
+0xC8647569, 0x393993E2, 0xB068FDA8, 0xDE1837BC, 0x382B1FE1, 0x0245CA54, 0xF8FEDB7C, 0xC0BAC3DF,
+0xA6FFAAFC, 0x633BF8E7, 0xB6559620, 0xBA391E51, 0x8B2E5C3F, 0x5B3972A7, 0x04A29AE7, 0xDC2E6A40,
+0xAB76AA7E, 0xBA9DA04A, 0x972C19DD, 0xB1A3D910, 0xB6282D93, 0x40FAF8B5, 0x5A6024E2, 0x3D7F31D5,
+0xAE84DB30, 0xF32E2415, 0x30B08151, 0x4E7B3E19, 0xDE41484A, 0xACC1407E, 0x869AB884, 0xFAA3462B,
+0x4BA3755D, 0x25C5F19A, 0xF90975CF, 0x08B0245A, 0x82B24AC9, 0xB3783AF3, 0x604B3FEA, 0x27835DC3,
+0xC8666C79, 0x369B1D8A, 0x597F5F4B, 0x50E0C86F, 0x188E0E33, 0x3398E4ED, 0xA911204A, 0x140F99E8,
+0x22A0B6F6, 0x8EDB1D26, 0x92EFCA47, 0x54B869EE, 0x5D05E1A0, 0x5D1F69A8, 0xA519C612, 0xE5AADD7E,
+0xD3C619B8, 0x219993BB, 0xC63396BE, 0x8522D1A3, 0xA9753754, 0xFAADE7ED, 0xBFBE6F51, 0xC1DA0588,
+0xBC3AF873, 0xCD8EF9C8, 0xDEF16757, 0x473084F1, 0x9C27B91B, 0x7000989C, 0x769DB0C3, 0x32400613,
+0x1B12B586, 0x3991DF6F, 0xBDBCE270, 0x6833A58A, 0xCBACBBCD, 0xE5B0EB8A, 0x0131E85D, 0x2496C89C,
+0xA81982B9, 0x404AF618, 0x9E9BAF69, 0xC8FCD97C, 0x28C2BF77, 0xEDF76C23, 0x99396F92, 0xB081A3BD,
+0x49016E95, 0x8A22E337, 0xB74168A1, 0x805B4BC5, 0x04E3A173, 0x44999F27, 0x1F15503D, 0x0C64D973,
+0x46B65BD9, 0xAEB43AF7, 0x9AF3BD94, 0x2669A4A9, 0xA314EBF0, 0x23248734, 0x6BA15119, 0xB382156A,
+0xDF811BAC, 0x3AE60599, 0xE0E39AA7, 0x8B01FF84, 0xA7896445, 0x957A7EA2, 0x3916858B, 0xE6704C4D,
+0x16163FBA, 0x3603C24A, 0x4D02FDAE, 0x1F7FA3FE, 0xCBEA47FF, 0xA82E385B, 0xC69D8569, 0x7D6A6C0A,
+0x7A77A723, 0x86569FED, 0x8FDF0624, 0xBA9E3E75, 0x0000A04D, 0x9E010100, 0x12772A00, 0x0153FB7F,
+0xEB89FA72, 0x92E0E894, 0x017AEF2D, 0xC1E1A8E4, 0x8C137BB3, 0x6904566B, 0x930E8EFE, 0xAF3F5A60,
+0xF858D040, 0xCE0A834B, 0x3319C442, 0x1687BE8B, 0xC1FBC125, 0x9E09A9A2, 0x53B73DA2, 0xD8AA1FA6,
+0x4A2F3CAD, 0x24965A01, 0x40BDD11B, 0xEABDE079, 0x79DE859E, 0xC657E1A7, 0x1B655E2C, 0x61CDF264,
+0x9EC8AE80, 0xE0A8D527, 0x995D2A7B, 0x282568BF, 0x38D6F741, 0x35535FDB, 0x6262394C, 0x39964608,
+0x2A71C17C, 0xF705D81C, 0x0AE9FC02, 0xDBA7024A, 0xCF5FB3E6, 0xB69998E8, 0x97EA64A5, 0x1A1B9D8E,
+0xB04A42F5, 0xDA5ACF59, 0xA094200A, 0x5E784B27, 0x9B43C540, 0x4A6ACE71, 0x852395B2, 0xF4E9983C,
+0x169F459A, 0xAB5B0F46, 0xE12CBB6E, 0xA07AC8BB, 0x0AABB873, 0x018319F6, 0x2AD8A0E7, 0x94E371D9,
+0x131143A5, 0x12DD1C40, 0x66A8D118, 0xA993F315, 0x3C4C0BAF, 0xEB697546, 0x6FC57374, 0x42C2BDB8,
+0x2765F913, 0xE2DB5038, 0xB9E85D7E, 0x4DFDB9D9, 0x2366BFE8, 0xB3714619, 0x1EE07520, 0x1CA9B222,
+0x3F724790, 0xC744D512, 0xB7342273, 0xA7407446, 0x37B9708C, 0x1425E9A0, 0xD31A6A9D, 0x3FBDC65E,
+0xCF7F7AC2, 0x23BBB366, 0x5FB62468, 0x4736BDEB, 0xDB8C135C, 0x11D71AE4, 0x2E399C61, 0x5A545B17,
+0x16675C9D, 0x2ECAD90E, 0xA806B3B5, 0xD17CD6F4, 0x5A85BCED, 0x17D92A1A, 0x8947EA1A, 0x68FE120A,
+0x4D0B3F83, 0x903599A2, 0xF5208DB4, 0xFC9D0EF0, 0x52C9F78F, 0x351A4645, 0x7E2DC460, 0x71E6F604,
+0xE22A1147, 0xECA76933, 0x3021AF92, 0xD4C6007B, 0x75C44F5E, 0xF493EA5A, 0x5C28ACAE, 0xA37FD140,
+0x11512361, 0x879FB106, 0x4607F2B6, 0x1F09922A, 0x33EEAD19, 0xB1219937, 0x172A41C8, 0x4B183E68,
+0x86C6EE8C, 0xEDEA97B7, 0xA28D7CFE, 0xFDA222BB, 0x55600178, 0x166BAC90, 0xC418BBD5, 0xEA4AD3D8,
+0xC0077D6D, 0xAA5B6503, 0x50BE2523, 0x617A9D21, 0x8B897473, 0xF85841E1, 0xFEE67C25, 0xAF9AE87A,
+0x25C24157, 0xF91CF6B4, 0x5A695E5E, 0x865E12F6, 0xD8D024AD, 0xB2F08EBD, 0xA6938AE5, 0x816A502C,
+0xA2C05462, 0x7335AADD, 0xF75C0CA4, 0xD6EF98C9, 0xAC3CBF6B, 0x5A6EC1EF, 0xDC7F91C7, 0x1BF43F32,
+0x88CAAD94, 0xA650EC83, 0x4BF3FD6A, 0x5FACE7A9, 0x5A15299C, 0x60E71C75, 0xE6A2DD92, 0x43357A4B,
+0x6DFD7AB3, 0x1DAAFA66, 0x9F31EDEA, 0x460EA9B3, 0x1C786AED, 0x16C1EA2D, 0xD1581888, 0x06353E57,
+0xF0AF35CF, 0x9C315AF5, 0x2A13426D, 0x3AFD9BE6, 0x214282BD, 0x9C514858, 0x73882D99, 0xC4CB9663,
+0xBB852A20, 0x3C380229, 0x4A637AC0, 0xDFC62EBB, 0x53143187, 0xDC4AA1F2, 0xEC45BBE8, 0x5AF4267C,
+0xBC001BE5, 0x1CBE7128, 0x459AC923, 0x961B7C8C, 0x3B6F5D3B, 0xA99B42DF, 0x8CA12231, 0xCA98E5FE,
+0x985DCDD8, 0xCB08BB61, 0xFEA15C95, 0xB73AE4A7, 0xF5DBDDC4, 0xC7F20C82, 0x7E23B9DA, 0xBB68176B,
+0x2E4DA9CA, 0xF0407A16, 0xE77C816A, 0x1295E714, 0x077662A5, 0xBE48C7B2, 0xB637C45E, 0xF341C3E2,
+0x1A59FACE, 0x0097B014, 0xCA278ADF, 0x5C8E183B, 0xDBC4C429, 0xB120C46F, 0xA1B8A890, 0xE7C1F5E4,
+0x45E7CEF7, 0xE97F7DBC, 0x3E717E09, 0xF228595D, 0xA179A809, 0xFBDB38A7, 0x94D28346, 0x5D3A89D7,
+0x050852AB, 0x5AEC5AF0, 0x4577FE97, 0xBCA39D6E, 0xA1D37E46, 0xA8DABC1C, 0x77BB2E76, 0xE871BCBA,
+0x0AFDBEA6, 0x2FE3F8FC, 0x0AEBC85F, 0xEFCC5901, 0x6A31980E, 0x63BFBA08, 0xED8E8BC2, 0x8280B1F6,
+0xDBC04EF5, 0x6B4D1DBF, 0x5BE4C473, 0x13DA57EA, 0x61E5D5D1, 0x17BE827A, 0x50C018E3, 0xC8952586,
+0x5A78CAF2, 0x5FE04F32, 0xF7A0980C, 0x3352CE8B, 0xA34DDD94, 0x47816451, 0xE94D00AA, 0x2BC96A49,
+0x1B1096B3, 0xAE8C6BB0, 0xE67456EF, 0x1D2BDBCE, 0x7537BDD9, 0xAC4580E0, 0x6FCDD1FB, 0x4371B925,
+0xF07DAF15, 0x560958DD, 0xB183019E, 0xB4CCE192, 0x93394288, 0x78D19D53, 0x0F8552ED, 0xA8F50009,
+0xFA334F55, 0x87ACF0C9, 0xC0392FB7, 0xDAEE690E, 0xC9ABCB64, 0x814BF3DE, 0xABF7BFD5, 0xE36981F6,
+0x92FB017E, 0x087B1D12, 0x0B81082F, 0xD6608E4C, 0x56672CDC, 0xF1B2CB4A, 0x96C66A08, 0x54F99030,
+0xE1D31166, 0x1295BB3F, 0xE05C6C00, 0x7B7BF5EA, 0x91206A10, 0x96E54B93, 0x27CA0F70, 0x76D11216,
+0xEE4FF1B3, 0x2129287C, 0xFB4140D1, 0xEF14A239, 0x5D8B3968, 0xF5EEBE30, 0x26846313, 0xF556E42A,
+0x64EF974B, 0xCA5CBD52, 0x84EC44FD, 0xCD9211FB, 0xAF3E8051, 0x22E3EBA7, 0xEB02A920, 0x00542541,
+0x21010000, 0x7E2A009A, 0x5D9CE03F, 0x0CCE94AF, 0x43337430, 0xA3143AE7, 0xC510BAEB, 0x24928423,
+0xAF42A828, 0x3BCF9971, 0xAA2FCE74, 0x655D44AE, 0x4D67DFA2, 0x108CC9D8, 0x7507A413, 0x20FC4B5F,
+0x5A481512, 0x872E2855, 0xFBD86664, 0xE60E44E6, 0x159AAD8D, 0xA3FBA9B8, 0x68A7AEFC, 0xB7E78FBB,
+0xE192CB67, 0x9E2CFAA1, 0x13D31564, 0xFEC553A9, 0x4A12F187, 0xA7CCC8CE, 0x4D4792E9, 0x7BFDE300,
+0xCFED353D, 0x6147E799, 0x47BC528E, 0x7202A9AC, 0x4FCB23A5, 0x7F7A9C66, 0x8364C4AA, 0xB78A0C78,
+0x5CA0837A, 0x639D1019, 0x1D5149F1, 0x4EEA9C45, 0x54B8E288, 0xE13ED00E, 0x29BEF536, 0x54947486,
+0x681896C6, 0x3D80D093, 0x5DC638C6, 0x1B902408, 0x99B47344, 0x977AB1D7, 0x4748EF4B, 0x0C88542D,
+0x07ED6D28, 0xC3CBBF2D, 0xF1D2E33E, 0xCC2F0348, 0xDCE94E3E, 0x7C3C9A2C, 0x71714F4C, 0xCEB23325,
+0xFAA7A994, 0x1B32F104, 0x04AD3CB6, 0x88C33F21, 0xB58A6844, 0xF0BF25ED, 0xF1BD2B53, 0xC8B0AE97,
+0x862BB4DF, 0x1D8CCA9F, 0x444D4371, 0xD2FA7DE2, 0x692F2050, 0x438F2352, 0x25A2AEC3, 0x282D58AD,
+0xD148EB93, 0xDF8F2306, 0xCF98AA16, 0x2D197E7D, 0x9472AF5E, 0x6A97B004, 0xD9BF4F7B, 0xBF7C54CD,
+0xCA79D529, 0x9FCC7AA3, 0x400FAEE7, 0xDFE3CC5D, 0xC7D79AEF, 0xB25AC204, 0x6DB10FC9, 0x2CA287C1,
+0xAADC76D9, 0xCF0CDD4B, 0xE5A514E8, 0xDCB4BBF2, 0x907094BD, 0x622712B5, 0x471F960E, 0x7A5085A6,
+0x257FCC0E, 0xE456B869, 0x602EADD1, 0x36CB16A5, 0xC230A774, 0x94ECD520, 0x4D2171DA, 0xFF551251,
+0x0D4200BA, 0xEFD3F972, 0x78F086FC, 0x32F71146, 0x10CAAFDA, 0x08E8177D, 0x1CDA232B, 0x8F32C859,
+0xB4CF36E0, 0x5758736E, 0xDE57D706, 0x5B7B04BB, 0xB1740352, 0x383BE595, 0xC599641B, 0xF6087B79,
+0x752B0D55, 0x2563FC17, 0xF1ED453A, 0x192E647B, 0x8EB1B818, 0xF0DE508B, 0xC9A7E2E6, 0x0ED87430,
+0x0C413644, 0x66F6E7AA, 0x70B246F0, 0x1DDABF75, 0xC9BCE48C, 0xB7B2573F, 0xF06A9EB2, 0xD873554E,
+0x6E5BF8BE, 0x79935DDC, 0x90882BB1, 0x6421936F, 0x3BC967CA, 0x21937EEE, 0xB5D0E7D4, 0xA1344EB1,
+0xF858F581, 0x12B9EF91, 0x85C21D76, 0xC566D86E, 0x92AB86B8, 0xEF3D6FAA, 0x8E0EB70A, 0xACFA9D6E,
+0x180AAB3D, 0xBAB91F31, 0x0EC4F3A8, 0x7C6878A6, 0xA13C5398, 0xD89DBDDC, 0xA97C1A0D, 0xC510B3E2,
+0x1D66F407, 0x385CF1E7, 0x13D00426, 0xED5E95FA, 0x2BEAB93E, 0x94022F76, 0x760A5B43, 0x2FA92231,
+0x16FDBC57, 0xC5F2FF95, 0xED3A941F, 0xF2586508, 0x81491F02, 0x38B8DAD1, 0x5E2F37BE, 0xE55139E3,
+0x3B60B529, 0xC59C14E5, 0x98111F67, 0x7C09A661, 0x811E31B1, 0x8BFBC403, 0x89972183, 0xE0C426A8,
+0x71F68C8B, 0x606D1475, 0xD0BD1813, 0xCBC1C06B, 0x550A2C29, 0x5AE4A1B8, 0x3F895F8E, 0xCD691D61,
+0x1DAD953A, 0xFD2CEE1E, 0x4B735936, 0x958F83CB, 0x33404676, 0xFEB19A49, 0x4534F1B5, 0x4F64DFEA,
+0x6562471D, 0xEFE9C0F0, 0xA50F0ED9, 0x168A3366, 0x2FFC21A9, 0x6188D354, 0x07AA9CF2, 0xB8C19805,
+0x0F4A3D75, 0x8A6A3ED6, 0xA8D6F352, 0x8A049CFA, 0xEF35C881, 0x3295F306, 0x758CDAD7, 0xD093A289,
+0xE9624A2F, 0xD8C3FE25, 0xF032A3DA, 0xF46EAD18, 0x89A26220, 0x4C7ABFD6, 0xEB8F4E9D, 0xAB485779,
+0x71DCA4D4, 0xF243808E, 0x983C3F0E, 0xD0513F07, 0x8A9FD994, 0x993F254F, 0xD37B3A06, 0x3BFBBF68,
+0x54FEE3C3, 0xAFA2B7D0, 0xFBB5286C, 0x3FDFC6D4, 0xF395BC7D, 0x330F83FB, 0x04D7F515, 0x00A0E12D,
+0x83F12722, 0xEDF6066F, 0x33C6F4C3, 0x3B6BB2E9, 0x073D6CA3, 0xB460C725, 0x1724815A, 0x1E56E034,
+0x55216A14, 0x6168F8EC, 0xF96B9A0D, 0x5492C1A6, 0xCE00F9ED, 0x1AD29BB8, 0x6DF70705, 0x7FA5C1FF,
+0xCF542E34, 0x2D8EAEDF, 0x93B08010, 0xFCC6B9EE, 0xEAA014AE, 0x0083BB05, 0x280E4E44, 0xD859D7E5,
+0xEE416CC9, 0x120C1AAF, 0x918BDCEB, 0x5603A31E, 0xEB500EF0, 0x4FB0FF68, 0xFE856094, 0xEC675427,
+0xEED68C5D, 0x9C4A9F34, 0xC22AE829, 0x2DEC1063, 0x1FB6C699, 0x930D27FD, 0xF111082F, 0xA8E61DF7,
+0x20DA3F55, 0x532F5B1D, 0x06870C38, 0x64C79170, 0x30057EE7, 0x2B98EBEE, 0x6167367F, 0x9F1247BE,
+0x75A34A78, 0xB1BBB887, 0xD5CAAE0C, 0x34F7705E, 0xF960CB4F, 0x0114A059, 0xDB259E93, 0xA3C567BD,
+0xB6AE7D2B, 0x704FA8CC, 0xD982E76A, 0xD2D10B76, 0xAA5AB189, 0xEB3B31BD, 0x55BBFE36, 0xB7FF56A4,
+0x87C499F5, 0xDC79AD37, 0xDEE1ED95, 0x5E2009E8, 0xA8321504, 0x8F1E9500, 0x0087866B, 0x68FA4347,
+0xD87B4135, 0x65458508, 0xAB74DB36, 0xAB255F0B, 0xDC85F55B, 0x7C1716AB, 0x5FC5E003, 0xB243B137,
+0x8F6A1C6F, 0x011468F7, 0xF6BF3F4D, 0x74DF89FA, 0xA1CFA2EB, 0x8885A842, 0x406D0C3A, 0xF49BF03C,
+0x78D32DF7, 0x77555163, 0xD193F95C, 0x1D5C816A, 0x3242CE6A, 0x92E207C8, 0x3D4E9ED6, 0xC0589540,
+0x8AC0FD42, 0x3731C325, 0x403444AA, 0xE269F7BF, 0xB4AB951B, 0x244EBCAD, 0x5DE3FD6A, 0x7DDEFC44,
+0xB437DA1E, 0xD2C127E9, 0xEC546950, 0xA0D729C7, 0x40320D8B, 0x833A7CFA, 0xE76F1AEC, 0x307E2236,
+0x205FFF0E, 0xDFD615F1, 0xE908C443, 0x87C0AD02, 0x6691D4B0, 0x4BE0EFCB, 0x59CB59D2, 0xFE9F5F03,
+0x3C25BCB8, 0x6055ABEE, 0xFBC47E02, 0xD0AC9126, 0xAADFEC57, 0x2F140E3F, 0x7D079066, 0xA5527FD2,
+0xE307469F, 0xE92826D9, 0xD846AD44, 0x36D5AB80, 0xCB7971D1, 0xC32EF8E5, 0x971531AD, 0x144F2F34,
+0xE4E555C6, 0xD69E7FD2, 0xF2875452, 0x7D6E4BA8, 0x552BF2B3, 0x7A90F4CF, 0xA235D725, 0x8896405F,
+0x38127025, 0x98711708, 0xEEDC2E80, 0x8E502BE4, 0x95FC4942, 0x8F0E30B2, 0x968BC876, 0xD68F6254,
+0x7F25B550, 0xF5CFD859, 0x042AFAA4, 0xCDCE842D, 0x6911C07A, 0x32B4FD3E, 0x55FD7B39, 0xC9945796,
+0xC54224AC, 0x343DC85A, 0x63F86FC0, 0xEAE80FC9, 0x7489EF8B, 0x7CCAF1F7, 0xDC8D3F8F, 0x58D8B017,
+0xD7CB04D0, 0xF9C38511, 0x88B74C60, 0xBD5B9559, 0xA03EC33D, 0xE4DE39B5, 0xB3F64A68, 0x3A913C00,
+0x04352B73, 0x7E7CAD58, 0xCBBBE39D, 0x384F647A, 0x15F73D94, 0xBC4DB6A2, 0xA0933C20, 0x53B0B029,
+0x9A28A396, 0xBFF7F806, 0x334819A4, 0x7BFB62FA, 0xE9F8F10C, 0x1C54D635, 0x9B366110, 0xC188CCCD,
+0x9ACD9988, 0x88358245, 0x23183387, 0x61EAA319, 0x01B05578, 0x8DE2C8CC, 0xBD56D09C, 0xAAEF5177,
+0x4C67194F, 0x725FD322, 0xFFD2505F, 0xA900A456, 0x0A2EA0F5, 0x4DC343AF, 0x53543B44, 0xD4D72884,
+0x83D1827F, 0x4DD8EF7B, 0xFB11F56D, 0xBA068478, 0x5FAAFA02, 0x61B6C8E1, 0xA89505C0, 0xD9B2469F,
+0xC6D4B4BD, 0x48282EC9, 0xC62D53AE, 0x5D96EB65, 0x9C05CD1C, 0x547C4B33, 0x0E887211, 0x1668FD06,
+0x49BB7BDA, 0x20EDF211, 0x0DA5D619, 0x41503FDF, 0x54D66E84, 0x018AB0E5, 0x34F177EF, 0xC9F14BA1,
+0xEB04CE81, 0x8391C85E, 0xA1601355, 0xB15BC87C, 0x36DAA953, 0xC4E92F3E, 0xC49FBFF2, 0x0B807838,
+0x3A58C269, 0x4993B7AC, 0xAC438FBD, 0xED792842, 0x6F667EF9, 0x801C2D77, 0xCD1A6C2F, 0xCACC56C3,
+0x5CC8F640, 0x123B2D9D, 0x84405FCD, 0x4855C622, 0x5382CEB4, 0xE8EF4B50, 0x5E280322, 0xCE845677,
+0x0D14F02D, 0x379687D0, 0x7756A219, 0xEFDAC82C, 0x0706593A, 0xC91B9221, 0xC781FFC7, 0x4752CA5F,
+0xE7A2B9F3, 0xD30E1064, 0x987C0C16, 0xCA33C0BD, 0x9DB175C4, 0xFDCE1226, 0x0518F4CB, 0xFB9D887D,
+0x89A62803, 0x27264B61, 0x1C146E60, 0x70537C6B, 0x8D12BA7C, 0x7985AB52, 0x76E9919D, 0x7DAA7A41,
+0x6CA8A4EB, 0x85AE005F, 0x7AC90EA3, 0x7B00E929, 0xDAFCCC8E, 0x182C6065, 0x8DDB03EE, 0x8707D60E,
+0x9AEF0A6B, 0x694805BB, 0x5BFE1E59, 0x44410D61, 0xC26F6A51, 0xC1EAFDCB, 0xCF5B1450, 0x70F58208,
+0x19734DD1, 0xA2F028F6, 0xDEB8947F, 0x8665F1EE, 0x97A266F3, 0x9689CB5F, 0x10E24C8D, 0xFB707790,
+0x0295285A, 0x41ACF593, 0x30484CD5, 0xF28F916A, 0x071C1043, 0x86DF00EC, 0x3878702E, 0x9AB70617,
+0xED225998, 0x36C18AA1, 0xC6AEEEE0, 0x5CB672CE, 0x61A0D7C0, 0x5C39D78D, 0x572BF1F1, 0x94B3D89C,
+0x2E08CE1E, 0xE64F6C34, 0xBC563B22, 0xBE74770C, 0x39BEB65D, 0xF2F851E2, 0x403D00C8, 0x8B6C0BBA,
+0xF3A8880F, 0x97FE044A, 0x00A0EB97, 0xD4E7673E, 0xFA53593A, 0x7D914D13, 0xCBE0D27E, 0x2CABF925,
+0xA9F533CC, 0x0A35DDF3, 0x41DE9582, 0xA4608E3E, 0xCE6F3AEC, 0x088A54AB, 0x0FE02690, 0x8C0E6DE4,
+0xC06EA35F, 0x3CCCC0CF, 0xF4E9CB6E, 0xF513ADE7, 0xF8BAC521, 0xB5A28925, 0x021BF2EA, 0x3F0F048D,
+0xF4BC2A2D, 0x4B6EDED6, 0x57E4D13B, 0xF7AAD78E, 0xA758629D, 0xA4F845EC, 0xDFDCC23E, 0x1A79EB42,
+0x644572EA, 0x90BA7046, 0x5BFD7515, 0x52E470E1, 0x887E371B, 0x7C6D6945, 0xA90CDC01, 0xA722B090,
+0x949796BC, 0x6CFAA293, 0x8FB99406, 0x6E0D33FC, 0xE0D7D73A, 0xED85990F, 0xE8810643, 0xB7F85AE3,
+0x2CBDB4B1, 0x6434B84E, 0x110576DA, 0xEA4569FB, 0xE6031A78, 0x535B0DCC, 0x2C9BEA06, 0x71A068F1,
+0x9DCD3201, 0x091C2336, 0x0106D511, 0x030D8468, 0x43ADFC40, 0xDCACD286, 0x2E688BAD, 0xC0A6AF28,
+0xE9B8BE9A, 0xD10F2DF2, 0x503DFAE2, 0x2BBDCCDF, 0x86652EC6, 0x76994221, 0xB9BB7471, 0x548FFDBE,
+0xCDFCBDA9, 0x5B0791ED, 0xF5F87CB6, 0x2BD08A15, 0xF3CA1E96, 0xB92F4401, 0x1BB0789B, 0xA2B850C6,
+0x1429FFD2, 0x0F3A885A, 0x6F7E6FDE, 0x24128A2B, 0x19F53BD7, 0x1FCD1C5D, 0x71702DD2, 0xA88D72C2,
+0x1E73345E, 0x1D9A0BD5, 0x13DFBB27, 0xC9A00933, 0xE60FA56B, 0x78150B72, 0x776855BF, 0xE920FE97,
+0x20789AC8, 0x1BDAAA74, 0x0FCD4DFD, 0xED78FCC4, 0x3B3437DA, 0x834B49AB, 0xE3255C16, 0x20FC0011,
+0xBBE0DC2B, 0xBE204317, 0xA82AF876, 0xF4BDD66A, 0x8A403B79, 0x7E461406, 0x84E86C8D, 0xB61E8A09,
+0x32BE79EF, 0x3E3395F4, 0xC29CBA6B, 0xB888F16E, 0xCE555346, 0xE64C7236, 0x4AACC26C, 0xE654B5D3,
+0x2ADCC5E3, 0xF1A07597, 0xC4064650, 0x218E89BF, 0x85178D84, 0xDC9F81A5, 0x18683728, 0x0B8572CC,
+0x8E7AD7DF, 0x5AE93812, 0x397581CF, 0x4D78D5CE, 0xE402FB61, 0x21C12712, 0x3C01E634, 0x1F88E479,
+0x3D83BB22, 0x94ED4EF7, 0x79430FEC, 0x2A737F3E, 0x5D5330D6, 0x2C303BCC, 0x5AD53EC1, 0xD84C3412,
+0x818F6220, 0x86498BAB, 0xBA72A07A, 0xA248E59A, 0x9876FAD8, 0xBEEE1A6F, 0x39756044, 0x66924FF2,
+0x5BE4CA4C, 0x159C74A5, 0xB65C9656, 0x329D611E, 0x478476CC, 0xA0C9A9F3, 0xD5C3DF04, 0xF84D86DD,
+0x85EFFF33, 0x397FFEFF, 0x9DAABA10, 0x1E506B63, 0xB43DB0BB, 0x17F71BF4, 0x4857EDC7, 0x54E1DAD1,
+0xDE4C85F0, 0xDBF341A7, 0x0414BCE2, 0x66E0BFB6, 0x82217E1B, 0x23FA56F9, 0x9F743CC5, 0x3C0EA35A,
+0x7B7E7034, 0x26A0D51C, 0x0110A717, 0xE623A798, 0x9D4FC9FA, 0xC13F6B18, 0xF99DF9E4, 0x5D998BC8,
+0xD0B657BA, 0x62F03706, 0xB0624DF0, 0x6F6D8E99, 0x4F065A28, 0xB49292DF, 0xACEC0FAE, 0xCDA0F0E6,
+0xBE7FAD6A, 0x344C9CCC, 0xFDCF5F80, 0x4CA3869E, 0xE7069D62, 0x7DB27A59, 0xED0AA38D, 0xF804BD91,
+0xE20C4B53, 0x229D1BF0, 0xE1BE034E, 0xFA865DBD, 0x75EC87A2, 0x2254F784, 0x9BD3E641, 0x5A84CB14,
+0x3B121A09, 0xCA4907D3, 0x859FA9CD, 0x8ED56F91, 0x394C93DE, 0xA14C366C, 0xAF9FFBE1, 0x152304A5,
+0xA1CFDBD7, 0xD6CA4E87, 0x0DDB0987, 0x6261E35A, 0xE3CCAFB5, 0xF3A487AC, 0xFEA735AC, 0x7ED27915,
+0xC37316AF, 0xA5EF3A25, 0x08694705, 0xB7AB0A3D, 0x4E26579F, 0x64F30B63, 0x402AEDCD, 0x4084CE92,
+0x262D1D13, 0x8706030C, 0x747F6971, 0xA42EBFF7, 0x75FEAF03, 0xCDEECEB5, 0x7E8DD844, 0xE0F116B6,
+0xB6EAFDC6, 0xC1BBD699, 0x5340A2AC, 0x6741657D, 0xB7ADF37F, 0xFD55DF8C, 0x66B13BC5, 0xA846DC63,
+0x203D799D, 0x6B875E24, 0x6748684D, 0xC7345AE4, 0xEF9C2625, 0x06C79C04, 0x1C1D3147, 0xDD93164A,
+0x16A8F3AB, 0x3D5E29E0, 0x68D58073, 0xFDA19D01, 0x9B825D0F, 0xC5E409FD, 0xBA4646A5, 0x5FAB9D63,
+0x6E300FAD, 0x97BE45FB, 0xE260B39A, 0x169E53B1, 0x49947BD3, 0x7F79F075, 0x5BCEFB67, 0x7277314D,
+0x37319604, 0x89C60BB1, 0x34FF9753, 0xD88F6BCA, 0x5545A176, 0x126A1ED6, 0xC4F493EA, 0xFBEBAE59,
+0x2D10C816, 0x3532464B, 0xE48E4A8F, 0x56CA16C7, 0xDF321764, 0xB2A112D6, 0x0AAD27DF, 0x026692FA,
+0x0C01AD5E, 0x7BF7BE1E, 0x3CA2DEFD, 0x29C10997, 0xD58F9D38, 0x86C5F925, 0x5BF18B49, 0x36E9C480,
+0x2010FB98, 0x64E9E2BB, 0x2436D298, 0x8FBD39A0, 0xAAB04FE3, 0x3341FECF, 0xB6A4EDC5, 0xD4730392,
+0xA622CF56, 0x1F235B12, 0xD93E03CE, 0x3529E5BB, 0x0BE00A0C, 0x00C87153, 0x171FCB80, 0x1349E992,
+0x4DF667B7, 0x887E7380, 0x5EBC01FE, 0x697211D4, 0x218851D1, 0x1C6F12F8, 0x0014AB0B, 0x3CFDB8C7,
+0x85350A5A, 0x71850C02, 0x8F0B5EE6, 0x4D99C01D, 0xFBF7EB45, 0x367B6572, 0xD0A4F046, 0x11568ADC,
+0xF3A2E975, 0xCFD50013, 0x45668F5B, 0x349B6065, 0x6F063D4C, 0x09D5BBDB, 0x93B0EC95, 0x73D6ABF3,
+0x2CEA7823, 0x8A1B9FD4, 0xD176CDB1, 0xFC4497BD, 0x05860077, 0xBE833353, 0xF60DD3C8, 0xA3C1587E,
+0x126A0219, 0xB87FC740, 0xD2B2FAD1, 0x52287134, 0x8D30FD14, 0x87E688A9, 0x2E56ECF4, 0xB8B66BE8,
+0xE8CC4E49, 0x1B72CFC3, 0xAC9B0F31, 0x5E6DC097, 0x4A7DDFB1, 0x13A21428, 0x8E28891E, 0xA1439D11,
+0xA6E04755, 0x6E9E4815, 0x1371B128, 0x010797F8, 0xFF3D3339, 0xC535B46A, 0x010EA25D, 0xF7D8D79E,
+0xC5DD6DE5, 0x2AF55F7D, 0xF1D4F7C0, 0x20962EA7, 0x034C7C99, 0xFEFE468F, 0xF0F65908, 0x47263A30,
+0x53613784, 0x26889CEF, 0xDF847184, 0xD409AF5D, 0x4FACE370, 0x6CA80C6D, 0x4DCB3C30, 0x33D81DC0,
+0x4D9307FF, 0x8C400A9F, 0xD876BDF3, 0x2C55432B, 0x7DA768CC, 0xA2A6252D, 0x9DD3695F, 0xA84B37CD,
+0x12072A2B, 0x36DD9BAA, 0x22C7B873, 0xCB1DF29E, 0x75338056, 0x5C296101, 0xD5508453, 0xDF4646C6,
+0x25278923, 0x4A8C1381, 0xEE504F91, 0x00AC875C, 0x8A9BE342, 0xFD60FD6C, 0x73801B7B, 0x00800DF3,
+0x01010000, 0x7B2C009E, 0x4EFB7F12, 0x3EDD75FF, 0x24A64FA0, 0xDEE41DEC, 0x442B8F13, 0xD3650551,
+0x29E69F25, 0x36CC9218, 0xF9B81213, 0x251335B1, 0x64785F77, 0x5040C233, 0x58D8738C, 0xDBC9F97F,
+0x18786AA7, 0xDC2B952B, 0xC0CC4882, 0xCC9C065D, 0x09899768, 0xBE9FED7B, 0x18EED675, 0x8F3C59D4,
+0x078EA93B, 0xA255D56E, 0x2F0E2520, 0x93262F69, 0x0DAD3BE5, 0x8C02E599, 0x3B958459, 0xC915F946,
+0xEF125299, 0x1704DBE8, 0xC966E8B8, 0x4A821419, 0x9770CFA5, 0x2687137A, 0x4EFD5EEC, 0x92AF50B2,
+0x1F6E50B7, 0x8B81B9CD, 0x0BC29C42, 0xDAB94FB4, 0xB84C25EE, 0x71D9B7DB, 0x48199BDA, 0x4158275B,
+0xB19A5D09, 0x08927E23, 0xE9D7A084, 0x51FFEAB2, 0x0032957B, 0x0144C03F, 0xCBEB75F3, 0x7C269717,
+0xBAF5FF6B, 0x277F76B5, 0x6486485F, 0xE65063FE, 0x530C8CCA, 0xFE03539B, 0x412BF14B, 0xEA20166C,
+0xB68009C3, 0x17D85D86, 0x4B6891B9, 0xCDD878EC, 0x4D1BBFFD, 0xF0053A27, 0x58562376, 0x6828B33C,
+0xA28234F5, 0xC9635CD2, 0xEB3609F9, 0x90FDB0D9, 0xD0B3A4BF, 0x950F94AD, 0x9BF6A424, 0x600FF9EC,
+0x7DBC5E44, 0x6D54B9A2, 0xEDE8661C, 0x689A1B25, 0xB26BEA0E, 0x13AED4B5, 0x3CAC5780, 0x59B4299C,
+0x68CA3DCF, 0xECCB95E2, 0x2203D82F, 0xBBF673B8, 0x40FA8A6F, 0x31056A48, 0x2A769D2D, 0x33F21E40,
+0x9F8C491C, 0xB5ECDFAF, 0x7A5402B9, 0x34C4A59C, 0x7857602E, 0xEFE4C385, 0x0FECF74C, 0x89077DC9,
+0x26746096, 0x795F5941, 0x2662F29B, 0xF4292B9E, 0xFD893BD6, 0xA9803381, 0xB66B2443, 0x6B4A3F79,
+0x9B3F5E6E, 0xD4ACFA6D, 0xAE970244, 0x8411494F, 0xF3D5EC4C, 0x601F5F2E, 0xB21B68F9, 0x924D048D,
+0x4F020663, 0xFF7DA09A, 0x1582EB9F, 0xCB62B278, 0xE6C0EAE6, 0x2B023495, 0xFCCCA67F, 0x49D28092,
+0xA23FFB3C, 0x10CD27F3, 0x063F6A43, 0xCBFE8E3A, 0xEBC61822, 0x670DF361, 0x801CA014, 0x039A9512,
+0xB9FEB39C, 0xE828C1E7, 0xC946E668, 0x13A80ACB, 0xB71126D3, 0x48544957, 0x68B4993E, 0xBFED1180,
+0xEB07A3EE, 0x8CAEA6F6, 0xD3FF2C5C, 0xD900CC6E, 0x7F8373CA, 0xA6FF77B3, 0x87C63F68, 0xF185FEE3,
+0xAC2A7459, 0xD83DB9A6, 0xA7043981, 0x6D90006C, 0x4E604877, 0x8DF1A380, 0x5D988C2A, 0xFF36276F,
+0xC7D6C33E, 0x176782A2, 0x4E89CAE1, 0x15E90B8E, 0xDCE3394E, 0x8714BD44, 0xD2E79DBF, 0x265E02A6,
+0x18948C4E, 0x368795E0, 0x0CF36830, 0x90581660, 0x1607A414, 0xBF902E91, 0xAA730FDC, 0x36043342,
+0x8B8DCB24, 0x16B125E7, 0x735143A7, 0x917E5C46, 0x9CD6428A, 0x487C506F, 0xB16F729C, 0x84E37F31,
+0xB54C0966, 0x87E7A04E, 0xF63C9D63, 0xEF7A3639, 0x3F973414, 0x881BCD80, 0x86E0DC0B, 0x85590143,
+0xC056EBB1, 0x8AD79EDE, 0x38AEDA90, 0xA64E069E, 0x9AD05D42, 0xFA7FA1E7, 0x41257737, 0x4621B7BF,
+0x2D47DF86, 0x7D95FBA9, 0x8F0530FB, 0x9A232B7F, 0xBFFB2156, 0x0B6D6524, 0x10E80D61, 0xB860B281,
+0xD80BFE7B, 0x044C4BB7, 0x3FF38944, 0x4268A844, 0x1D7633B9, 0x6C2F4EC9, 0xE95A567C, 0xEE82F562,
+0x4619B73F, 0x6596BB72, 0xE9864B42, 0xB5D35C8E, 0xEC233EE2, 0xA8B7C492, 0xED1C9F10, 0x06B636D5,
+0xED10EE94, 0x13EB29C4, 0x98801A45, 0x280598DD, 0x07CE00F1, 0x2A78FD4D, 0xB5881AC4, 0x7E86FD91,
+0x4B28D32A, 0x0B98B89B, 0xD2E8476B, 0xDB6E1FF4, 0x4B21A76F, 0x33BA6242, 0x98EF8F7D, 0x8E402884,
+0xA61DDF38, 0x8183528E, 0xC412C2A6, 0x62176A16, 0x0630B10C, 0xCCBA0D1A, 0xC9601E2A, 0xD8C5D3A1,
+0x94226CBB, 0xCD09A09C, 0xDA391E7E, 0x33FF89A6, 0x5845365A, 0x5CDE9245, 0xF569DCC2, 0x6415041F,
+0x010F5A5B, 0x546E40B1, 0x2762D3A2, 0x76D2EC4F, 0x9CC1321D, 0x1B004413, 0xFF54E6B1, 0xA4D8DDE2,
+0x0DE7FAC6, 0x754D1CBF, 0x81284F2E, 0xD49D261C, 0x6E391C9C, 0x82F8D81B, 0x3F6AF79D, 0x4C16485F,
+0xEE08E0E7, 0x0A3EC4D9, 0xED87A0FE, 0xE39DB8A3, 0xFEA10DCE, 0x30BCB478, 0x968B0A9F, 0xCBC0F740,
+0xA114E19F, 0xEC385295, 0x631C2A41, 0xF2D040D4, 0xA7888B16, 0x71B4AFA8, 0xE59BA8FC, 0xB01C1A83,
+0x77D41B84, 0x57E65933, 0xB2D1DA2C, 0x58B69F3F, 0xAA1151AA, 0x8F15EA47, 0x6897A75D, 0x40C06773,
+0xA9746CC9, 0xCB7E1B24, 0xA4FC7092, 0x325C33D1, 0x4596D2E7, 0x8EF7D850, 0xC84774B8, 0xBA898351,
+0x535AD020, 0x8C74E009, 0xF398C081, 0xE3820168, 0x00C08CD4, 0x01010000, 0x7D2C009E, 0xF3FB7F12,
+0x1C3985FD, 0xC8E0F1DD, 0x641C5936, 0xEFB74DC6, 0x9442F8A5, 0xFB9EC2E8, 0x42140B83, 0xCE3123E3,
+0xFD2CFD62, 0x97BE16F9, 0x79E6E02D, 0x8E92C7DC, 0xEFB0CF5E, 0xD69288B8, 0x8727CCF2, 0x68D889C9,
+0x4F2AFF48, 0xBC5A431F, 0xA186BD98, 0x4A128D63, 0x19A40854, 0xAF5EA66D, 0x6087B17D, 0xA140443C,
+0x57F2070E, 0x3A0D4425, 0x947AD068, 0x4A27B268, 0xC5879B87, 0xEF67DF23, 0x1D205F05, 0x8FC7FDEF,
+0xB87633F1, 0x5FA3332D, 0x7EDE20FB, 0x06513537, 0x9E35A141, 0x5F9785DE, 0xDFB3F4CA, 0x1E7836E0,
+0x05028AF0, 0x2FE2F900, 0xA71716C3, 0x4A17E073, 0xDBCCF5AB, 0x083FBBB0, 0xE7CC9BCE, 0xD8BEA28C,
+0xF7985073, 0xEF2A282E, 0xC2164588, 0xA9042A4B, 0x742D2B6A, 0xFA11E194, 0xD2810894, 0xC8830D80,
+0x1C956D9A, 0x697929B2, 0x5B1AEAAC, 0xE0453940, 0x2FD0D3E2, 0xE62D3E36, 0x4C0987CB, 0x3B4EF9E0,
+0x26C951C8, 0x7332A83E, 0xECD394BE, 0x4ED8E306, 0x607DE7B6, 0xDAC5A459, 0x5FA9D975, 0x5F730382,
+0x9234BEE7, 0x4AAA269E, 0x25E24D23, 0x78FF3352, 0xEDBB9977, 0x8D737558, 0x92F74B33, 0x8ACB3F3B,
+0x1357E80C, 0xFFFA12E1, 0x6CD84880, 0x10D2ED40, 0x9FE9214C, 0x80A93960, 0xBB96594E, 0x8FB89475,
+0xA6FC4113, 0x9AFE1DEC, 0x24D24B50, 0xC46BC2B1, 0xDE19F670, 0x59D68F69, 0xA5AEE93C, 0xBEE1DFA4,
+0xBA37E662, 0x5B79D6C5, 0x10CF51D8, 0x711C5C55, 0xBCEC5A34, 0x135F6E0E, 0x00E4AED1, 0x2AEF9180,
+0xD6AD60B5, 0xF499A907, 0x1002958E, 0x90CC335E, 0xE8FF53CE, 0x3B79AF4E, 0x31DA7995, 0x6C06DC5A,
+0xDAA2BBF9, 0xC9CF0A7A, 0x18E46616, 0x8EC55E53, 0xF4F0F76A, 0xD93E9FEF, 0xAE68BF44, 0xAC99F9A8,
+0x7ABD3AD6, 0xC95CE85A, 0xC11DEFCE, 0x80A42399, 0x0FDBB5A3, 0x281834D3, 0xA763C721, 0x663BE8BC,
+0x8C17F187, 0x7F1144A0, 0x88DD5A51, 0x24BEC163, 0x867FFF8E, 0x2D0A26DC, 0x1EA0F744, 0x76F2E28A,
+0x2FF4C152, 0x9B9B4877, 0x5BAEAA0B, 0x8403245A, 0x914FBE28, 0xFE9443F2, 0x95FB82FE, 0x338A9D66,
+0x792361A7, 0x87EF7679, 0xE98BE72D, 0x1F6ED164, 0x0BDD08AC, 0xB16E5B31, 0xE4E04674, 0xFEA54E23,
+0x4C52E9DC, 0x032A680D, 0x73671793, 0x8920B01D, 0xFE74E9F0, 0x34928475, 0x7E6EFF78, 0xD41D019D,
+0x380FC02A, 0xBDB36370, 0x0CAB1EF1, 0xA2084080, 0x7D5E81A0, 0xF559A2CE, 0x03EAACBB, 0x08DCB447,
+0x28597DDD, 0xA06D2A3A, 0x04EEE2A6, 0x0B1B7E47, 0x8FD6058E, 0xA1CE9BDD, 0xB1C75322, 0x00F13F7A,
+0x5B3E0964, 0xB93C7673, 0x6C6B8D2F, 0xFEAB09C2, 0x068EB6B2, 0x86257BB3, 0xAD08226E, 0xC8FB337A,
+0xA0E3015A, 0xBFE36265, 0xF518D0AE, 0x51ADDB99, 0x18FE7050, 0x62FEE271, 0x65FB63A8, 0x0E61B81B,
+0xA0887D9F, 0xACF02ADB, 0xFA5630BB, 0xE4D74361, 0x88D8B476, 0x8BF1EA9D, 0xB2AB6B26, 0x3B985EF5,
+0x4F4549A0, 0xD27A2B3D, 0x9EC07F3D, 0xF917ED2A, 0x58F883C8, 0x078E38C1, 0xC9FD71A7, 0xCDB44874,
+0xF071B887, 0x0B0A30CA, 0xC6E2D55D, 0x992615CF, 0x3D09950C, 0x39A93912, 0xF0EFF4CC, 0x90481430,
+0x25C0DBEE, 0xBD8CADF2, 0xF7DA2892, 0xB001DC75, 0x4BF7F1CE, 0xE41922F4, 0x92CE0657, 0xBDB867E6,
+0x985FAF41, 0x195BAA22, 0xEE3DC6E5, 0xA5E13A50, 0xAD04E97C, 0xFF71B1B4, 0x8E62C6CE, 0xA509AC52,
+0x3CC7FA08, 0xA5EE6A4E, 0x876E7FCA, 0xEDC0DC04, 0xFC421552, 0x72FB2670, 0x84025410, 0x3A7A4A35,
+0xB35DB1AA, 0x876E67E7, 0x769BC889, 0xBEF0D7E6, 0xB7EAE341, 0x66793579, 0xABF2FAFE, 0x55C307C1,
+0x612023EE, 0x4C8339B8, 0x59C0E86C, 0x107423A9, 0x002C21FA, 0xDD8BF40F, 0xEE8B994D, 0x1FD38229,
+0xCB9DE8E4, 0x675D0A8D, 0xD522F8B5, 0x077E1774, 0xD98B5364, 0xF5F1CA79, 0x4F3FDD44, 0x9C79F07C,
+0x38AC1714, 0xA30874D6, 0xD5273D95, 0x4D6B0D32, 0x92976641, 0xD7D5543A, 0x5CEFDF59, 0xEBD6D9AC,
+0xFBE8519D, 0x36682367, 0x0B2D7BCF, 0x16803BF6, 0x9B481D59, 0x17EB363F, 0xF815A1AA, 0xCA6B4433,
+0xAE770FCD, 0xA6D838B6, 0x8DBEF02D, 0xBF4ABAF7, 0x1D41C179, 0xA650178D, 0xE0A59FC4, 0xF1EF1688,
+0x5DBC47DF, 0xE2B2CA27, 0x7C43BF69, 0x566546C8, 0xF86C8366, 0x0A55A117, 0x0643350E, 0x16BD630F,
+0x3AD99648, 0x832C7BE3, 0x5B5C5FAD, 0x1C96616B, 0x630411CE, 0xAB1F74A7, 0x23B36E83, 0x9C61409C,
+0x0287DB66, 0x775ADB18, 0xD23A412A, 0xB976C97A, 0x0FC7D4C6, 0x6542CBF7, 0x44ADA032, 0xADFF770D,
+0x8D57A0AC, 0x62B255B6, 0xBF88263A, 0xDC2155AC, 0x0128A6EF, 0x22B3B36E, 0xE89B38B4, 0x278B121B,
+0xDF44931D, 0x5FD35F18, 0x22268378, 0x1E2EC30E, 0x0060880B, 0x21010000, 0x842C009A, 0x561FE23F,
+0xE65540CF, 0x8C5890F7, 0xB310D656, 0x0737F6DA, 0x99B342F9, 0x3C766555, 0xDF26B662, 0x9E9FE4DA,
+0x516905E6, 0x83593CEE, 0x6A5D2E1A, 0xC70DEE2A, 0x8CF34952, 0x01C045F7, 0x313BC948, 0xCC7C11DF,
+0x019D2C29, 0xEBB523E6, 0x57024D28, 0x39DB4256, 0x6AC330BF, 0x8A4F2036, 0xDF265F55, 0x1FDC377E,
+0x7B765DFE, 0xA3CB8A08, 0x8B78CBD1, 0xE4AFFA5E, 0x17C62E7A, 0xE7E1AA89, 0x6734AC31, 0xA0B1F07A,
+0xEF4AEBE2, 0x1D25E4AB, 0xBA7CE2F5, 0x628BABE6, 0x3CBF7A5A, 0xB22EAA58, 0x85E194B1, 0xBF279A2C,
+0x2A9E4B2E, 0xEEF2D101, 0x0E8C99CA, 0x3A44E302, 0xE83CEEE9, 0x5FF3E6C9, 0x6F44B1BE, 0x49174ABC,
+0x253BF9B7, 0xF41AD32C, 0xE99CD543, 0x9B984D83, 0xEC3BEB3E, 0x34C5B8F7, 0x99E15DC9, 0xC723E939,
+0x9D9572E3, 0x2EE78880, 0x7D5F8A30, 0x73B84ED0, 0x8CF7FB06, 0xA6B306CC, 0x845DFDEB, 0x06882E13,
+0x4D3602D5, 0xE5758DFE, 0xB1341EAA, 0x90D1A4E4, 0xA91A21E3, 0x6A1C0C1E, 0x27C2E9CD, 0x4EF3EB24,
+0x04AC3A6B, 0xF1209B95, 0x33491D1F, 0x60AB159E, 0x02EABCCB, 0xB32195C6, 0xDDA78E98, 0x1953AF6D,
+0x9F86D33C, 0xF76CFC5B, 0x747BAF33, 0x79FD6675, 0x65A67157, 0x19FD2840, 0x302EEA49, 0x831E4E5A,
+0x82EDFC54, 0xFCF8046E, 0x8124E7C5, 0x63BA2654, 0xAD75B673, 0xA461817B, 0x0600F24E, 0x62551E8A,
+0x9D3B8236, 0xCCA14FC8, 0x8AA17C95, 0xB405335E, 0xC5311990, 0x7A7E5C38, 0x223E51A5, 0x42D77BED,
+0xE24A1403, 0xAE1D4763, 0x10C8E029, 0xE0D11612, 0xF6C2443E, 0x3A5984B4, 0xEFAB8609, 0xB734EF23,
+0xE99ABCA8, 0xCD69C7EC, 0x873B4476, 0xD8B0946D, 0xF7093AB4, 0x2A92D8E5, 0x94134BA9, 0xFDEBAE6B,
+0x18FE5336, 0xC5FEA832, 0xA5F1297F, 0x479DF0CE, 0xA0AA529E, 0xC2E31CCA, 0xD04A8145, 0xDFF349D9,
+0x2A7A5E58, 0x4CA62AAA, 0xEDAC3798, 0xF8B80A46, 0x0D0FB73B, 0x302AE7E2, 0xC395122D, 0xF1A9316D,
+0x16C834A6, 0x10AEF2E0, 0xCDF35D8D, 0xF90285AA, 0x4F987CF4, 0x9B18B71D, 0x83C44832, 0x80C1105F,
+0xEE156177, 0x499312C4, 0x7555BF8A, 0x45776B1D, 0x028C908D, 0xD8850FC3, 0x6975C502, 0x406738B5,
+0x536FE9B0, 0xC5BAA09B, 0xB0F7FEB8, 0x7F9021F0, 0x04700F4D, 0xEF7A9610, 0xE9146C7A, 0x03BC7173,
+0xC687EE10, 0x87A5A89D, 0x060C8517, 0x31C49C7F, 0xC282D0A0, 0xD1161375, 0x5A3EE926, 0xB8F6DA0B,
+0x4A354AAF, 0x55B12A8A, 0xF62FCED1, 0xC936CA6F, 0xF76B2C06, 0xB684C595, 0xA0108098, 0x79A8251E,
+0x3AA64874, 0xB3B740AB, 0xFD8FF7DC, 0x84301EE2, 0x0DC328E7, 0x6B6A5C1C, 0x735F1AD8, 0x6FB043D6,
+0xBAA20023, 0x4E6B5543, 0xA27FEDAA, 0xC609E2B3, 0xC75890F3, 0xFC25FFC4, 0x22BD533A, 0x6A02CD02,
+0xDF47BE58, 0x3166E7B8, 0x03F56357, 0x61B7BD89, 0x3D3E0CC9, 0x5D2A1111, 0xD9817311, 0xC38D6F7A,
+0x38345E81, 0x14A9EC12, 0x661D5693, 0xF9B6A860, 0x161C4C16, 0x3E55C5A0, 0xF7CE4AA0, 0xA22AAA26,
+0xEBD2DD0E, 0x877BD917, 0xAD22C5E4, 0xC0556897, 0x6E3DAB2D, 0xE98BC359, 0x6A618C1A, 0xC4F41B4F,
+0x96EEB863, 0xF75F0419, 0xC3F3377B, 0xA05F351A, 0xBA9B291B, 0x6C934BA9, 0xEE3B665E, 0x63D9FA20,
+0xDC9A326C, 0x0352A312, 0x5967C045, 0x1E79E075, 0xD3241636, 0x03681EFF, 0xC16E319E, 0x7E307351,
+0xF04B23E2, 0x36D336CC, 0x3841EE34, 0xC316EE55, 0xACB82FD6, 0xB7C0155C, 0x27DE042E, 0xE923136E,
+0x511FD295, 0x41504392, 0x62761BDD, 0x57FC5B66, 0xBE05658A, 0x65C9BA48, 0x0603D070, 0x055B5427,
+0xE9EA2286, 0x9D703013, 0x1264DFAB, 0xB0DB2050, 0x44C321AF, 0x676C1FEF, 0x8E43A6BE, 0xD1C504DF,
+0xEBAEF456, 0xE9D2749F, 0xB88426F0, 0x62562125, 0xB482182D, 0x90ED700F, 0xBA715A8B, 0x5A14248A,
+0xA401BA3B, 0x739EC7EB, 0xEEBAD2FD, 0x8448F8D2, 0xA93460AE, 0xCEA7AAE4, 0x8086348A, 0x3522C0B7,
+0x06424ED6, 0xBAEB02FF, 0x49BF6866, 0x31A9CB96, 0x22666519, 0xE857E372, 0xBB7F1B1A, 0x5AE54048,
+0x10C844A6, 0x202C6616, 0x331D3850, 0x3AF8C71D, 0xFD0BFDB7, 0x26E36B99, 0x8A974125, 0x7880B954,
+0x8BDDA42D, 0xA360BBFE, 0x542D4899, 0x7D4B5925, 0xAE2566ED, 0x02A70B8F, 0xFBBE3336, 0xBC2755FC,
+0x2E6722DB, 0x2D5E18AD, 0x29C4B79E, 0x58CC8464, 0x0D495869, 0x2F946FBD, 0x7C1E4977, 0xD20D57C5,
+0x8B12798E, 0x7FBEBEFD, 0x447C7A1D, 0x977CE94C, 0x94CE1F6C, 0x627B4916, 0x1925E8CB, 0xE911B380,
+0x77B7A07C, 0xDEA0BB7B, 0xCCAD175C, 0x09D14C22, 0x8EEBF17A, 0xC39059E4, 0x3A8CE8C0, 0xFD78666F,
+0x448FDE1F, 0x5B5D9629, 0x730D80E7, 0x3276A23B, 0x7E072817, 0xB11436C6, 0x31D42BA1, 0x4EA12A09,
+0x6D902870, 0xF547AE59, 0x07A872C5, 0x3DC16F40, 0x6184EE0B, 0xE3FED993, 0xA09CD4A8, 0x6DBFF207,
+0x93296FD0, 0x994B6011, 0xFA3C44A3, 0xA0EECD9B, 0x4BFA1506, 0x37423412, 0x8296B125, 0x14A2C684,
+0x2A417FA4, 0xC3BE1D1E, 0x3C727E35, 0x1F45ED8D, 0xB394BCA9, 0x70142423, 0x4122FF34, 0x40F3EF00,
+0x960E6247, 0x547089F6, 0x968D3082, 0x1C434EE2, 0xD4B1CB6B, 0x7D05BA90, 0x1E447B45, 0x03356835,
+0x48521C35, 0xE704E9CD, 0xD3408126, 0x29DA3E7B, 0xDE67345E, 0xF94B52B2, 0x4CD3A009, 0x078FE0E6,
+0x64A96E63, 0x4BC98578, 0x43E2AAC7, 0xAA62CCFB, 0x5CA1AA23, 0x49E536C0, 0x1B5A9E8D, 0x4F4EB6DB,
+0x10EBDBFB, 0x2B2E736D, 0xA7109439, 0x41F5EAFE, 0xC204746A, 0x627C8EAD, 0x9705B9B1, 0xA347C2CC,
+0xC225CD4F, 0x48B5B827, 0xF5FCC679, 0x29D9C4E7, 0x8296C5C7, 0xC87D9D88, 0xA73612A2, 0x00E64D61,
+0x8871FE92, 0x9C04EAA0, 0xC1A2E490, 0x462FED18, 0xFA3C867E, 0x8D38C7FC, 0xEC388776, 0x2B63F399,
+0x1FA5F1BA, 0xBC24E755, 0x3E0CFAA5, 0xD6AECB58, 0x91AA824E, 0xEBC4572B, 0xF0212AA7, 0x300ED9C6,
+0xE99A48A8, 0x839228C2, 0xE0E06988, 0x613AA5AA, 0x9590DA59, 0x8D88ADB5, 0x95E0D211, 0xCE927A5C,
+0xA228F0AF, 0x84170F8D, 0x6E0FD711, 0x98084BFC, 0x5252FA87, 0xE93548B1, 0xDF7A3244, 0x48CA18DB,
+0x1561AC82, 0xC84A3834, 0x94D48FE8, 0xB9F25BBF, 0xD8376561, 0x160B6E94, 0x3856AF10, 0x169F2C14,
+0x47D05C8F, 0xEE420B8B, 0x17338D93, 0xA0CEA089, 0xEDCEFBBD, 0x9266B811, 0x8B76D9A3, 0x3B85E9C0,
+0x712F8E5F, 0x196E4B92, 0xE864FC8D, 0x072CF481, 0xC8D7F2DE, 0x0649402F, 0x2AE2FD5C, 0xD4AD09A0,
+0x2357171B, 0xB26A1326, 0x920F5E7F, 0xEF726AEB, 0x5EC3D939, 0x84A1DB2B, 0x397CE575, 0x6BD7BB92,
+0x4BB97B99, 0xD6A03604, 0xC9BFB97F, 0x60BB7291, 0x56230C19, 0xA93A84D1, 0x23114CF9, 0xAF872896,
+0x16C09795, 0x2EDA19E4, 0xD1000053, 0xC397D21F, 0x5B9EE78C, 0x3B67AA23, 0xB114D9F8, 0x6D68B3A3,
+0xC9193451, 0xD258B910, 0x810D258B, 0x57039C2F, 0x76414A08, 0x027C3916, 0x46AF429F, 0x079EEAAA,
+0xDD92FEFF, 0x3A372BBA, 0xDACC1556, 0xA8E406F3, 0x824018B1, 0x5584B363, 0x889E9EE0, 0x31C90250,
+0x3786910C, 0x10814C50, 0x83127845, 0x7F9CD3C0, 0xB36F6DC9, 0xD45DDA05, 0x959A6301, 0xD0D946AF,
+0x0F8238F5, 0xBAF316DA, 0x1B741102, 0xE695B517, 0x1F2902F8, 0xCC0D3895, 0x9861642C, 0x1C2A48E0,
+0x8F325630, 0xF5D8AD39, 0x0CFE463E, 0xCF9B23C2, 0x3FD07F66, 0xD05607EA, 0x78CD5084, 0x764B308F,
+0x5CC376D5, 0x1631793A, 0x8D0D4153, 0x4E499865, 0x1ED7038D, 0xD3C8CC76, 0xF9A8DD69, 0x3A6B9BF6,
+0x8A1F8E0E, 0x628393A1, 0x997ED5D9, 0x0B7A659D, 0xFCE00916, 0xA3A2D010, 0x80D19B05, 0xA7A37887,
+0xD20D7602, 0x2EA4E42D, 0x9E08A060, 0x41307971, 0x297269B9, 0x58C384EA, 0x1B00CF4D, 0xCE1F48ED,
+0xC83A62BF, 0x59380364, 0x0E1A7706, 0x0C6AB7A6, 0x9E034143, 0x8E59F968, 0x7C8CAC10, 0x23DCCFF6,
+0x278F1ECD, 0x9DD61AEA, 0x7D046E9C, 0x2CD67ECD, 0x8A1213A4, 0x286A7524, 0xE533A5DE, 0xAF857E05,
+0x5EA49743, 0x8E4B2C27, 0x30C14984, 0xA0A8FDEA, 0xBC7DE660, 0x26C99C60, 0x0DFA33AC, 0x72DD5742,
+0x85376E42, 0x21EC6239, 0xF37509FE, 0xF92148D1, 0x117448D7, 0xBE86D681, 0xB87B5E52, 0x7763BCC1,
+0x8E1619C4, 0x116E98B2, 0xE8F02A2C, 0x3C8813E4, 0x8BB3A23F, 0x860516DF, 0x75E1F869, 0x12B6C66A,
+0xF51D1EB5, 0xACFC9E20, 0x3BFE9BD0, 0x11153166, 0xF2473B21, 0xD8E7CDC5, 0x9945D56C, 0x5C981FC3,
+0x70E7D908, 0xB997980E, 0xF978E0CC, 0x12C06805, 0xE81406B6, 0xAF7FD9E8, 0x88E12734, 0x9FCCBCA7,
+0xE7FD522D, 0x1F356C85, 0xD0F3361D, 0xEB4833FE, 0xBDDFD978, 0x5A8C3A20, 0x450C3790, 0x854C49C7,
+0xD35E83DA, 0x99ABAA24, 0x971C9FE8, 0x83133563, 0xBB1384A3, 0x912CF193, 0x39E18029, 0xD27B2D4C,
+0x0C862D0D, 0x61A27E32, 0xFD665E90, 0x32328325, 0x5AC69EE1, 0xD3F79AE0, 0xF58BB433, 0xB2984474,
+0x856D2612, 0xF5F0F6AC, 0x75627C7D, 0x4BAC0926, 0x094D7B69, 0xBC20F555, 0x72E79DBA, 0xD6CD3B09,
+0x5DF4FFF9, 0x0020DBAF, 0xF2E63FDC, 0x42E466C0, 0x504DB09A, 0xFF741E90, 0x0995C510, 0xB68CF9B5,
+0x31108D19, 0xC339CC61, 0xCE0E45DF, 0xA204B466, 0x85C42881, 0x0105BF67, 0xE66E6CF7, 0xEE281FA4,
+0x849D7D4B, 0xEEE1CCBB, 0x58ADABED, 0x4DDE4336, 0x233F3D32, 0x942F5DCA, 0xA71CCE50, 0xAE1481BD,
+0xDB44B6D6, 0x9F534ED4, 0xC8397CD8, 0x0D86FB35, 0x9E833DDA, 0xF5D5257B, 0xC678A28D, 0xA67A8913,
+0x9BA7EE88, 0xF2EA1751, 0xA866C0C4, 0x2334DAA6, 0x7AB6DE7C, 0x0FE1AC32, 0x7072295F, 0xAE638387,
+0x08EF5EE8, 0x69A6C2A7, 0x1619FD8B, 0x644CE7E5, 0x161C3C47, 0xE9BC5FB7, 0x8719040E, 0x8CC023BB,
+0x6D4794FC, 0xF683E5CA, 0xEA49DE3F, 0x25F99C1D, 0x139A9CC8, 0xDC779D27, 0xDD7654E5, 0xF99719DD,
+0x0B2C5F25, 0x4359D99D, 0x24B4EAFF, 0x5B345F95, 0xE4043B42, 0xD7E80ACE, 0xDAB05189, 0x15292D74,
+0x278D8E8F, 0x188F370C, 0xD693C909, 0x8AF7F6CD, 0xEAC08B67, 0x4F0EDB38, 0x76AADD05, 0x894E57D9,
+0x3D94D2E9, 0x395A18D3, 0xC352A107, 0xE7A1B2F9, 0xB0EA4C90, 0xADF36DE3, 0x18564ACD, 0xB7C4CE62,
+0x58B21F66, 0xBAC704E8, 0xC6312C4C, 0xE18FFB6A, 0x62C96D85, 0xC6E7252D, 0xC84801E9, 0x0D4B841C,
+0x53902824, 0x566CE55B, 0xD0D4B78C, 0x97C3C86D, 0x9DA96036, 0xE9494B2E, 0x20B15835, 0xF5CE5AE6,
+0x4DE40CE7, 0x07BE2324, 0x2B27EDC1, 0xF798950D, 0xCCDBAF04, 0x94709E9F, 0xE769A501, 0x678AA0C6,
+0x3918E9E8, 0x81120DF6, 0xA0BEE38B, 0xEA7D1834, 0x1A43A4F6, 0x74A35449, 0xE93B62EC, 0x3C5E4724,
+0x7D1448CD, 0x81F2B4F7, 0x4509454B, 0x297E40DD, 0xAF077E8C, 0xE4E2D39E, 0xE12A10DF, 0x8C4B0359,
+0x630BEDCE, 0x417C235B, 0xEC1A93C4, 0x853F5176, 0xC2808709, 0xDD5E5337, 0x07ADF4BA, 0x0B4EC7CC,
+0xBE71C9C3, 0x16C1FEF4, 0xFC0B41E7, 0xCF223B8A, 0x19D323D0, 0x583C8613, 0x17123A6B, 0x7C5E1577,
+0xFE268646, 0x6142CB00, 0xA1BAB462, 0xA810B1A5, 0xC20E2E10, 0xABD6C0A4, 0xBD3D261D, 0x3B138D9E,
+0x5989D9D6, 0x89595468, 0xA604F958, 0x4447DAE0, 0x2E8DEF9B, 0xF1F154C8, 0x0CFFCC8B, 0x0A5FE483,
+0x45B1B679, 0x5D566462, 0x0B600DDB, 0xFDE8633D, 0xE5948951, 0x22BBC20F, 0x92303BFB, 0x4F96C9AC,
+0xFBF65969, 0x84844AA6, 0x6A6A6C53, 0x8981A105, 0xDC277FC8, 0x702D10FC, 0x390B0F42, 0x7AA8B915,
+0xC1B8B431, 0x276C2D2E, 0x323B1DBA, 0x91802AE7, 0xE7368387, 0xC10CCF27, 0x07CF3A50, 0x3865FE8A,
+0x39687D10, 0xFDBA1427, 0x7A2743AB, 0x47485C11, 0x3D8295A4, 0x95DDF58D, 0xCDAF8D49, 0x68C9C222,
+0x8A685F3F, 0x4B1E2470, 0x98E629A6, 0xB0BEC811, 0xAE96C5E7, 0x79560B7A, 0x29614EC2, 0x755523FD,
+0xD24CA483, 0x3FC81A30, 0x33A12492, 0xC7CF6AC6, 0x3674B4FD, 0x8BAA1103, 0x8B2F6A6E, 0xD67635BB,
+0xC3FD82B2, 0xE8A40E79, 0xF6BBD4C6, 0x24A63AA5, 0x450A2364, 0x07E13921, 0xD5879EE7, 0x6E37CFEA,
+0x97ECCBE0, 0x103E4FA4, 0xDF717185, 0x0285DFF4, 0x83F4AE9E, 0x4A946D6D, 0x2156B5C6, 0x944CDDB0,
+0xDFAC6993, 0xD79E454B, 0x2A9AA834, 0xF3518610, 0x99E0E6E7, 0x863D9E9A, 0x12D4DE43, 0x06C1DF75,
+0xF8D0242A, 0x59A0468E, 0x3B8D5DBB, 0x744633FD, 0xE061106F, 0x8E62CF4D, 0xCA3454CD, 0x00222B6A,
+0x335EAB4A, 0xB7435289, 0x6A30867E, 0x8FC1D1C1, 0x3B41C98E, 0x5181A443, 0x7FB516C8, 0xDC370525,
+0x9F1C83A7, 0x1761C2BA, 0xFA1DB67C, 0x4C9E3670, 0xCE3E35DA, 0xB0D86D8F, 0x6DC79BC2, 0x21C42B88,
+0xA095E452, 0xBEEA36A0, 0x3BDAD237, 0x395BA98B, 0xF3BA8AF4, 0x181FC664, 0xA86869DF, 0xEB425B8A,
+0xD3E6ADE3, 0xFBA3E2E0, 0x3A8F31FB, 0xA6744B9B, 0xE1B7D53E, 0x540BF7D4, 0xF0763DA6, 0xE5FC8ABD,
+0xF48DBE63, 0x2957C20B, 0xA33D5483, 0x9BD7AB44, 0xED838780, 0x8BA2A6D0, 0x2564A28A, 0x0BEFA744,
+0x2669CBD1, 0x1421F825, 0x8756AFD0, 0x43C5CF57, 0x582A7F1F, 0x16EC2CC7, 0x40A90ADB, 0xF1B76D53,
+0x3E55D1B2, 0xD07DB050, 0x71E8324C, 0xD11B067C, 0xFD9043CB, 0xBAE929D5, 0x1E35FFF1, 0xE1376534,
+0xA02A3AEA, 0x5135058B, 0xFE952044, 0x9F1B914C, 0x881106C1, 0x0CBF88F0, 0x4E83476C, 0xAFE8ECCE,
+0xB856BB44, 0xECF45D2E, 0x7C443075, 0x56911C5A, 0x7FFDDCCE, 0xAE62B2DB, 0x0388AB9C, 0x45CFF011,
+0xE78015B5, 0xE11F4730, 0xF916AE29, 0x337C31B3, 0xBA4664B7, 0x5CBF0571, 0x2C00DD36, 0x4C812C06,
+0x04BDDE4C, 0x51996F65, 0x8B6F33B8, 0x221A7130, 0xFFDDA13D, 0x4D48A611, 0x31A698C2, 0x4E8BD95E,
+0xD3F9D496, 0xFDC4EBBC, 0x43540966, 0x113E6DBA, 0x3C8524B9, 0xDF8F61A7, 0x2A386C0B, 0x26FB23DE,
+0x22EE5FCF, 0x47EFD516, 0x588F6FA0, 0x4D51D227, 0x14F94004, 0xC61B5114, 0xD6B160CB, 0x21F013CC,
+0x766A428D, 0xFBFF2B04, 0xDE2F27AB, 0xCF938BCB, 0x1F667BCB, 0x53942FCD, 0xA0A84A98, 0x3ABF0A5E,
+0xB8DED3CC, 0x76F662D8, 0x99632685, 0x7D3B4F56, 0x029DD95E, 0xF8D3DEDA, 0x26CE78E3, 0xC2DE4BA3,
+0x805003C4, 0xB031F9AF, 0x6588D44F, 0xF6D68366, 0x2E0B658B, 0xBE995E98, 0x18B4A0FD, 0x0CEE54FA,
+0xB4DA846F, 0xA70AB4DD, 0x68901B4F, 0x6355F365, 0x87A0FE2D, 0xB5B11BA9, 0x0A98B58E, 0x51C80780,
+0x0072DACB, 0xA3D715EC, 0x02F7E2DB, 0x08C8846B, 0xAFC1D35D, 0x99943B2A, 0xA45330D2, 0xC4F8467D,
+0xB82F59D9, 0x0A8E6E31, 0x80BCAC76, 0xB4C4A856, 0x7C2B6E48, 0x1ECBE70E, 0x1C3FF70B, 0x609C1078,
+0xD27EEE1B, 0xA0B9907B, 0x986452CA, 0x53B31578, 0x7F7EDAC0, 0x14B9DE8A, 0xF9DCDCFC, 0x1635E4C0,
+0x30783534, 0x045FA41E, 0xB63EDDF7, 0xB1B08935, 0x52FD665A, 0x74296C3A, 0xE702B9AC, 0x94BD5B27,
+0xFA5D0F9E, 0x1558E21B, 0xAA1E4935, 0xB7A10F0B, 0x1D8AAE85, 0x673CBD55, 0x7FF8EDE1, 0x937D30A2,
+0xA4850133, 0x364307E0, 0x88A3FC15, 0x2DF6BBE5, 0x6056EBF6, 0x05CA0CE4, 0xB1A0364B, 0x7256D602,
+0xB3613B78, 0x1F740718, 0xFE3B2E7D, 0x24E8AA2B, 0x0FDF609E, 0x7F47EE65, 0xF7C7718E, 0x05D81F8B,
+0xD9F670D8, 0x2CCBF9F9, 0xEA57314B, 0xB7D53DA9, 0x12217F6B, 0x4F3BC459, 0x88B1DB4B, 0x7D8F5E18,
+0xFF45D72F, 0xFCEA904D, 0x93A23DDE, 0x8E479055, 0x12935218, 0x7D60C634, 0xB2429D80, 0x4D17BE01,
+0x6A0FF839, 0xF6F1BC6D, 0xA11A4AB6, 0x4031E186, 0xB83F00D4, 0xB30EDB3C, 0x28CDAA56, 0x876D59DF,
+0xAC6B369D, 0xABE4D5E7, 0x23AAC934, 0xB1911640, 0x56A2A751, 0x5DF09C1D, 0xEC49D185, 0x747FC0C4,
+0x8ABA5AD3, 0x80DD2D6A, 0xCFA86C90, 0xEEDFDE09, 0xADFF32C7, 0x01DF6238, 0x15883D9E, 0xD937FA48,
+0xD009032C, 0x96AD90B1, 0x754D9E56, 0xBAABC0D2, 0x0018D007, 0xF901C8A0, 0x4847D0C5, 0x2B244A4C,
+0x58DCF078, 0x6D147E2D, 0x9D1C143E, 0xA1A32E6C, 0x9A6A3A15, 0x76E9567B, 0x547CB070, 0xA39F53F9,
+0x438852F1, 0x11F82D16, 0x9B115A3A, 0xFCE3ABF9, 0xA3D120FA, 0x3EB77F1D, 0x75AEE2EB, 0x70A16249,
+0xB4179CE3, 0x5B1F00A3, 0x94B273DE, 0x70FB2962, 0xE829E0AD, 0xF82AF97A, 0x630098AC, 0x6BAF9466,
+0xBF30FA3F, 0x053DD17E, 0x67D3B70A, 0x44E20469, 0xE76F0C3A, 0xB9E0E983, 0x6CFF4015, 0x27CE9DA7,
+0xED4634D5, 0x37CB4506, 0x813FC63C, 0xD3CC25AD, 0xCB2565D4, 0x52082D5D, 0x8AB2287E, 0x09CA6D10,
+0x7F5F9B47, 0x0D7CA65A, 0xF731FCA6, 0x97BCCED3, 0xD4E3682E, 0x2C6BD34C, 0xD9E4364A, 0xE6E2DB98,
+0x250962A3, 0x1FB02EEA, 0xE1DF1FBF, 0x91C03AF4, 0x7CB0AFDA, 0x5A45AF7C, 0xF226116E, 0xF2C3B041,
+0xF2CAE6F2, 0xF90CB2EA, 0xADF6B865, 0xC2B6BA14, 0x8D30A617, 0xB12EC838, 0x928C1C85, 0x21E6A1A2,
+0x9E12CACC, 0x879B6A6C, 0xF14DB8B4, 0xBB8373E5, 0xD9BEBDCC, 0x5BFC0115, 0x8E65CD59, 0x7E1D53A8,
+0x1EC77DB0, 0xAB999DCC, 0xBDA83240, 0xE2CFBDBB, 0x55722170, 0x0155ACC6, 0x96827956, 0x6CBFE929,
+0x2B9A0F70, 0xAB3DEA5B, 0xD74E4EEE, 0x63CA995F, 0x1BF59180, 0x43A45C8A, 0x4254267F, 0xDA88FECB,
+0xCB736778, 0x83A2DE4C, 0x7A75CABC, 0x0729469F, 0xFB00C3BA, 0x2AE2D066, 0x0F9A9B4B, 0x46BC22B8,
+0x64D08404, 0x6F410C66, 0x0FDFA4B3, 0x5B67E2F7, 0x2513CC1F, 0xB3E5DA4D, 0xCBF2EF4E, 0x9CFDD7E3,
+0x69A28299, 0x03EF5FB3, 0xA4459BDE, 0x3A57DF27, 0x7E683D75, 0x7210CD55, 0x65846B90, 0xA8CD736F,
+0xC5F9E09E, 0xE4D8AEBA, 0x97B4588B, 0x9251B792, 0x135CE39C, 0xEA9289D0, 0x6AED9064, 0xBAB17A4F,
+0x316D9360, 0xD6CAE801, 0x0661F772, 0xD219A6E2, 0xE1377827, 0x00000030, 0x009E0101, 0x7F12812E,
+0xA8FA5FE5, 0xB081BF50, 0x10D5027A, 0x3CB236C5, 0x8966E6F2, 0x03A5FE94, 0x8C62CED7, 0x6BF6EEE3,
+0x91CE4E75, 0x7A67B5FA, 0x9F766C90, 0xB531F0BB, 0x269514DA, 0x734DE99D, 0x164BAFB8, 0x144856B4,
+0x4AA24A12, 0x4D0EC9DE, 0x2732524D, 0x87D715F3, 0xF67E3679, 0x60A1B3F0, 0x8180E92E, 0xAEBCC9D5,
+0x5527D3C7, 0x3D8C72E3, 0x1743FD17, 0xC413792F, 0xC65F949A, 0x3BAAD5ED, 0x96D37395, 0x1FE4C123,
+0xA3103B21, 0x7C54ED02, 0xB6268233, 0x59AD0FF2, 0x8226F6CD, 0x4436E6D1, 0x841C9E19, 0xC2A3E6E4,
+0x7AA82562, 0x923F28C8, 0x24C635AE, 0x61343EC6, 0x597D6E0D, 0x38D8C242, 0x9A1ED507, 0xFAD92C33,
+0x212E2DB3, 0x1E33C9A4, 0xFBE6FC21, 0x314DEA8D, 0x0303E5E4, 0x90FBDFDF, 0xD868B6F3, 0x7B8FD4F4,
+0x62CDD15E, 0x74FC735E, 0x70782A0D, 0x740EA860, 0x1B64C6CD, 0x5282AAC2, 0xF3B9F9F5, 0x51F1B403,
+0xFFDCDF62, 0xAD501984, 0x6A520A0C, 0x674BFB90, 0xBCAE8B7B, 0x7031F561, 0xED53ADCC, 0x14445FB8,
+0x2FC9980E, 0xA5EB383E, 0xD7A02AEF, 0x81F03A69, 0x395B5FBD, 0x46345E96, 0xB448A8C1, 0x3082E315,
+0x2619B1B6, 0xFE3E1D4A, 0x3FE90559, 0xA7D781C4, 0xAB1883D9, 0x2F764631, 0xBC1BE527, 0x564EAC94,
+0xF20E739E, 0x4A73BBA3, 0xB4755087, 0xED6827E4, 0xD01CAF6F, 0x347C769E, 0xDFCC1D83, 0x3A6CB994,
+0x4141CB15, 0xA0F59E88, 0xF5175D65, 0x8AA5E57C, 0xC143A417, 0xAA98C1FA, 0x0721A3D5, 0x465646D3,
+0xD094039B, 0x5EFB68EB, 0xBD5F4480, 0x10187574, 0x90AEE0F0, 0xD152B522, 0xD7912A29, 0xD0BBFBFF,
+0x217659A0, 0x67D16250, 0x537328D7, 0xF3ED8DED, 0x2E528982, 0xB84AB9B6, 0x56888E39, 0x74AEC47B,
+0xCC6F97CB, 0x604058CE, 0xDD4635E0, 0x01521532, 0x6AE351F5, 0x565D57E3, 0x3B607F29, 0x530A5D70,
+0xDEA0C1A7, 0x44C682DD, 0x8C676641, 0xE1A3F072, 0x65B0D428, 0x2C705A3C, 0x13C735EC, 0x78F6A06B,
+0xC419B156, 0xDF4E748B, 0x51814305, 0x1B3ED058, 0x8DB9ED1B, 0xFD4B44E5, 0x73870806, 0x68363C17,
+0x3230DFF9, 0x80F478F4, 0xFA0A53B8, 0xD862EE09, 0x5B5663F6, 0x0657CB22, 0xF18032D5, 0x48AA0AB8,
+0x0C044C75, 0x424C94CC, 0x0A00DD95, 0xC6138B56, 0x5BE09E9D, 0x20682783, 0xBB0F3610, 0x1FF569F3,
+0xCFDDCD6F, 0x5FD13011, 0x98B8D0DE, 0x13358CF2, 0x16B58DEE, 0xAE7F269E, 0x08CF9400, 0x8DD7B812,
+0x6FC30DA8, 0x11D450E6, 0x0219E0CA, 0x89AE2EFD, 0xF463CDA9, 0x60354388, 0x83EC0B4B, 0x91B5EEE9,
+0xAFAB6CEB, 0xC5CC6880, 0xC3FF03D0, 0xFC9C683F, 0x72D37817, 0x4C4EC85F, 0xC57C7DE2, 0x147F129C,
+0xB85A8324, 0x9B5D076B, 0x9A7E3625, 0x883B69CE, 0x8ABDC4B9, 0xB5B0FF94, 0xB50DBF5D, 0xE0D5F7F0,
+0xD7C73E46, 0xB2F36B31, 0x82971D76, 0x830DDBEB, 0xC881723B, 0x0E582CE3, 0x0DCB1EFD, 0x6C0D8A24,
+0x37E4CA4F, 0xAF597115, 0xBC42F1CA, 0x547759FF, 0x80E42002, 0x51AD3F62, 0x3FA80087, 0x56586FB0,
+0x9DF776AA, 0x30BFAAC2, 0xF6F8D4F2, 0x0EA8D17F, 0xCF19B225, 0x77DE3259, 0xBEA8F4EB, 0x3A8F5D97,
+0xB8E4CA74, 0x4E02C2CC, 0x0DF33AE7, 0x51EE2DC2, 0xB783D0EA, 0xC9118A88, 0x7DB1A58C, 0x9AF7C5F5,
+0x7830C3B3, 0x576DD2B0, 0x403BB8C9, 0x2B7E2A39, 0xF00C6BAB, 0xA7880EDB, 0x4E898F39, 0x2736C2C8,
+0x9398A7AA, 0x8EC23947, 0x8CEED590, 0x4FF1EDC6, 0xFB7207D0, 0xE67F83FB, 0xFC3CD93A, 0x084CA012,
+0x5D927D69, 0x9128D46E, 0x1D25E96B, 0xB63AF057, 0x6A9E9F4E, 0xA957392A, 0xECA0B414, 0x636C2453,
+0x304F67C6, 0xE9BCC4EE, 0x9A2FB8E5, 0x3AAFD245, 0x4D97C5FF, 0x15907549, 0x0FD69DE5, 0x6858251B,
+0xD57F2631, 0x0720D5DC, 0x3AD673A0, 0xA247E83B, 0xCC74A7E8, 0x697C757A, 0x039E69DA, 0x529F7BB6,
+0x92562E1B, 0x77EBDFA9, 0x755D1A9A, 0x5FEF3103, 0x7E1A2960, 0x09B51B2E, 0x397F0F59, 0x13EFC609,
+0x265E5340, 0xCFF3505B, 0x81FA47E4, 0x3242DD88, 0xA5DB6483, 0x0AAE280D, 0x02F04460, 0xAC759106,
+0x88EB68E1, 0xBEC234A3, 0x619660CF, 0x717446D4, 0xEE5FEAFC, 0x669371F7, 0xB0784A61, 0x54979638,
+0x200B0C9A, 0x8E772316, 0x2BB2C4B4, 0xA73FEEC0, 0x0846A0C2, 0xF3301306, 0x83086AF5, 0x415734C0,
+0x34163A04, 0x72F70F2D, 0x7DC97E94, 0xD1D4419D, 0xA12ED288, 0x00ABAE0E, 0xD64DFB56, 0xC9630B51,
+0x7CA5A500, 0x9C40AF96, 0x79F4B809, 0x6D1A11C7, 0xA620432A, 0x8B4FA218, 0xF7371F5B, 0xFEDD0CB0,
+0x88A0546A, 0x475CB2A5, 0x927DD044, 0xD854952D, 0xE54A9242, 0x3C1045F2, 0x6AF554A3, 0xA25E526C,
+0xECCC6CAB, 0xD3A36950, 0x7033E207, 0x589BDBCF, 0x0AEB18AB, 0x9860D39D, 0x1F5E4DDF, 0x59A7C81B,
+0xB4FDF165, 0xD4414DDD, 0x7E8D5187, 0xC45ED4D2, 0xC0F2D9E2, 0x01000000, 0x2E009E01, 0xFB7F1283,
+0xCF0F7554, 0xE01389E0, 0x4625D94F, 0x8BDA23A6, 0x76B496CD, 0x619DA660, 0x74D0E4CE, 0xF9F8B899,
+0x9D6EDFAB, 0x0CC98F2F, 0x6047F656, 0x21AB20FF, 0xDD81469D, 0x16A8FF0C, 0xDCA7795A, 0x21D343B4,
+0xFCF96BDC, 0xD7B0EEFE, 0xD849EC7C, 0x63DEB931, 0x6E85F631, 0x64909675, 0x0E14997B, 0xD5A79BB2,
+0x0A812A63, 0x183B2002, 0x7AF33320, 0xEC8740B7, 0x707562F9, 0xA2AA056E, 0x9C45A038, 0xCCB94703,
+0x6694C9FD, 0x1AFB5D4F, 0x5C44EF91, 0xDE739A4B, 0xD9846FEC, 0xAF973716, 0x5B6990F5, 0x46A5DFBA,
+0x03F01AB7, 0x4E21137B, 0xCB631B2C, 0xDB4CA2A4, 0x1C4CC409, 0xB4C93CBD, 0x0679ACFC, 0x29A0F407,
+0x3AEE720C, 0xEE9C26B2, 0xD981B511, 0xA0B2B709, 0x8227EAC8, 0x6842631F, 0x7B2EEE2F, 0x861A7D8E,
+0x448CFAC8, 0xCD3D13D7, 0xE709887B, 0xD2630761, 0x398AAF52, 0x1126C68F, 0x1A14651E, 0x4DB15D09,
+0xC1C7B459, 0xAB8B4C1C, 0x49A537F1, 0x53D2EEF0, 0x4150ADF0, 0xC8EBB1A8, 0xF0072643, 0x2822372F,
+0xEB2CDE83, 0x397DC222, 0xFADC52D1, 0x6D435FB1, 0xC00EB59A, 0x6869417A, 0xBDCEDB8C, 0x87C3568E,
+0x24EC9083, 0xB7B3369A, 0x98254FD0, 0xD95B3165, 0xA8CDA902, 0xF4EE9994, 0xCEE5041C, 0x6012E408,
+0x1918A012, 0x19A26E9E, 0x5B1C73CB, 0x882AEF7C, 0xA8A5753A, 0x62CAAF01, 0xC838DA2E, 0x481C3C97,
+0xD0908DD9, 0x7FDBC163, 0xBC1DD74C, 0x4283BF35, 0x3F4CF119, 0xD2CD4B00, 0xA3FBCCED, 0x7326152F,
+0xD55BC847, 0xDC826314, 0x91B3D2DD, 0xD1BBDEC5, 0x52293E16, 0x07464355, 0xD12C9A89, 0x2C9A1D0D,
+0x94714363, 0xD74AC467, 0xB5F3A2F0, 0xF1312728, 0x3E80E4AE, 0x27FC54B8, 0x4D5EBEF0, 0xC6889B76,
+0x0983E06A, 0xBD8B99A3, 0x7992F73A, 0x59071CD9, 0xC44B0054, 0x16FAA150, 0xEE5FD315, 0x263D7510,
+0x2557E74F, 0x48BF2A24, 0x2487F27A, 0xEBF85720, 0x5449FA9F, 0x99BD8D7E, 0x77AF1DA8, 0xCFE65335,
+0x959939C5, 0x183C43D8, 0x5602BB7B, 0xB51AB488, 0xFDDCCC60, 0x23CEE25B, 0xB7E0F723, 0xAEDAC834,
+0x927B957C, 0xCB000C7B, 0xC98912CB, 0x42180850, 0x1E78BA5D, 0xE980EE16, 0xB2FA639E, 0x514349E4,
+0x6E939B5E, 0x9F5BB734, 0xA82FC5E6, 0x0D7E1CC7, 0xDAC0FD0D, 0x4FD179EF, 0x628D5E1C, 0xFC56C7AC,
+0x1E111100, 0xB8771D15, 0x13B7B002, 0x5603879E, 0xF11B39C4, 0xF25FABFB, 0xC5F2977F, 0xB4CB817D,
+0x02F070F0, 0x57D39185, 0x34628A18, 0x6DD6E2FE, 0xECC2D609, 0x47E99521, 0x043404A1, 0x475C53C6,
+0x5EBE9EBE, 0x491DC491, 0x4E0B9644, 0x95075BF8, 0x687D050E, 0x3008AE30, 0x92CA18A4, 0x0EE366DB,
+0x9E453D77, 0xF9989B65, 0x025818C2, 0x8F194FFA, 0x53C6D922, 0x447B29EE, 0xBDFB6293, 0x149B12D5,
+0xAB078DB0, 0x5EC3D684, 0x79185885, 0xF77893AF, 0xE0657EA1, 0x8B4D985A, 0x435A5E11, 0x0CFBB315,
+0x6D9BD6C7, 0x71EF3B3A, 0x4333E68B, 0x2C7C844E, 0x5B96F20B, 0xB2472F02, 0x3367D560, 0xBDD4347A,
+0xD4B08999, 0xC10EA1D7, 0xA3AF55D3, 0x3892BA69, 0xAA1F65D2, 0x24F74C4C, 0x5B5F7FBF, 0xB16C4E55,
+0x64B71F81, 0x63C8147D, 0xAC96D3FD, 0xD7CBA4F8, 0x3D068A10, 0xD2E8BCBD, 0xEA3571BB, 0xE6CF42D4,
+0x44871075, 0x3E554994, 0x51FB7AD5, 0x65DDB15E, 0x12B0ED36, 0x757F194A, 0x2B3C5923, 0xBFDE977B,
+0xB761BC8F, 0x68578523, 0xF6AA2674, 0x986DCE32, 0xFAC95E2D, 0x86E93081, 0x411A537A, 0x18EA04F0,
+0x393B827C, 0xE5DCAFA9, 0x6953CFA5, 0x33F1AC56, 0xB7A1FC3C, 0x3FD2A2D0, 0x2C1C0D5D, 0x8627E0C0,
+0x8D5C4283, 0xB22934D1, 0x941DB696, 0xD86F90E7, 0xEDD867B4, 0xD3E4295C, 0x8E629FE7, 0x1DA33743,
+0xCA4CD887, 0xD5DAFF33, 0x7950A90C, 0x24770A98, 0xD19345B6, 0x10EDEFBD, 0x0EC5F224, 0x9B720BB1,
+0x909D275D, 0xD1B7D67F, 0x181B58B1, 0x2809ADB1, 0xBCE8C549, 0xD8B8A3A3, 0x5481FDAC, 0x9DE3B523,
+0x00ED79BF, 0xAEEDE6E9, 0x9F3E2857, 0x4294D775, 0xA14DFA3B, 0x253AE8DF, 0xA88B48A3, 0x3AFF4B45,
+0x54AB6491, 0xEAAD05DF, 0xBD87E0F2, 0xC61A2762, 0xDE068FB6, 0xF41B9FE7, 0x6DF9DBAB, 0x2BABC84D,
+0x69C5EEF3, 0x264EE5E9, 0x4EF2E5DB, 0xB1228B49, 0xD8180D69, 0xEC1D3B42, 0xFDFF9750, 0x152CD4A0,
+0xAB709A03, 0xE3070368, 0x31CB868E, 0x36DED832, 0x6C867826, 0xF1949AB7, 0x83FBCC0B, 0xAA3BD5B4,
+0xD5683650, 0x2DC834D7, 0x45D00683, 0x548EDC7B, 0x0C1BC62D, 0xA4E7DBB5, 0xF34FA1B2, 0xB80424DC,
+0x4E4A1F18, 0x9C4C0CCA, 0x7987E6AF, 0x39AA357A, 0xB5514ADA, 0x61A85EC9, 0x7ACD1C09, 0x2C2DBF64,
+0xD0ADC239, 0x9A293102, 0x16131120, 0x78C068D4, 0x4C6979C3, 0xC3A44D6C, 0x61C96BD6, 0x1C13CFA9,
+0xEE1C1BB4, 0x873E29E0, 0x33B603D9, 0x6559B31C, 0xE4B123C1, 0x9172D015, 0x0080C122, 0x21010000,
+0x8A2E009A, 0xEF80E13F, 0x7B9CBE24, 0xCB370FFE, 0xD9BF4E12, 0xB816A0BE, 0x396BC04F, 0xA61274A4,
+0x76F58DE4, 0x01E35EDA, 0xF238FECE, 0x73826F3D, 0xBBC5EC8C, 0x1B64D495, 0xCFDBCE24, 0xFB91748A,
+0x6BCD6589, 0x1EFE83FD, 0xE8427332, 0x1F53A0A3, 0x05E5A939, 0x1F88C4B9, 0x63D785D4, 0xA28BAC5F,
+0xFC2804DE, 0xACCE340D, 0xD1AFBEC6, 0x72525B8E, 0x5190B7F8, 0x9F01B1DD, 0xA072DC01, 0x0823F34F,
+0xFD5217D4, 0x67F9793A, 0x88769BAE, 0xF1BD5BCB, 0x58DFE663, 0x16FF9B19, 0xE9927A41, 0xE9690812,
+0x45BE5C4E, 0x18D40F9C, 0x781C6AFB, 0x7B5065D7, 0xB49B06FC, 0x2CC7D50F, 0xFF25E7C2, 0x25D4513A,
+0x5BA58919, 0xE12C5676, 0x55885E6C, 0x6E8DD2B5, 0x426E42BC, 0x726E8DCB, 0x6BC14033, 0x2250AD75,
+0x9A904970, 0x762B9AF0, 0xB2248461, 0xE60F9A86, 0x740F0448, 0x9FEC941D, 0x21DA3D41, 0x6FF53537,
+0x28679A32, 0x0752A9E2, 0xC5E72DF1, 0x3E3B32EC, 0x227A5FD0, 0xA3397C6E, 0xB39B23A1, 0xC1D7097F,
+0x23147811, 0x5D8C0D4D, 0xDA73D192, 0x8CD81CA3, 0x97DA250F, 0x6FC95857, 0xD62A0755, 0x472403E3,
+0x54F5F2D7, 0x0661B50E, 0x2E54DD91, 0xBF890298, 0xDEF2EE9C, 0x545732D4, 0x3912529D, 0xCBD75EBE,
+0x2CAB9210, 0xC397DF91, 0x3E782DDD, 0x4E1AF1E7, 0xF8BE2ADA, 0xB3FF3C1C, 0xEC537383, 0x05169581,
+0x9E136165, 0x893B19FF, 0xB45B8EDD, 0x0CD93127, 0xF137BAA7, 0xE3AFE75A, 0x35007910, 0xCC1BA3DB,
+0x7CB56AE0, 0x163AF295, 0xBE9D42F9, 0xE3922C64, 0x4F4B21F5, 0xF1B47465, 0x73A4BA57, 0x1C4D6A7F,
+0x23F814CB, 0xA3713884, 0xD62DEFBC, 0xAB39F34D, 0x59207068, 0xB3280101, 0x52C17DAE, 0xA2056BAA,
+0x0C83E90C, 0xA79298D8, 0xD560A095, 0x58855D5F, 0x16B81280, 0x14140E72, 0xB6617CDF, 0xD08CCFBF,
+0xD0507586, 0xA55E6536, 0x5240D086, 0x3E05D684, 0xA630DC90, 0xF213F4E5, 0x1FBBF7DF, 0x254C168E,
+0x9DB9B0E0, 0x822AB2B6, 0x0337EEE6, 0x436F7F8D, 0xED33047A, 0xD144519F, 0xD8AA7149, 0x8E6F3E5C,
+0x010F9C54, 0xDD9E79C4, 0xAD76B155, 0x00F05A1D, 0x3462BA19, 0x4E5326AA, 0x8D24D9FD, 0xD23F129A,
+0x1D569285, 0x88879FBF, 0x1C090080, 0x93DF9535, 0xAA7DA720, 0x18D5BC8B, 0xB7BFF999, 0x5DB24E51,
+0xB100ACF5, 0x1ADB5D7D, 0x6B7726E6, 0x08A04360, 0x95F507EE, 0x5DA4BA7C, 0x100895D1, 0xF0B0C0D6,
+0x27D75A9E, 0xDA69D495, 0x1B38DC0E, 0x775EFC7F, 0x92E20764, 0x75F193CE, 0xAB79247A, 0x02910BD6,
+0x9B531BEE, 0x4D2708F9, 0x4AEA862D, 0xF7F99E6D, 0x0F2FEA70, 0x9F49406D, 0x0906B295, 0xD5D89A6B,
+0xE6232254, 0x934ABD4E, 0xADFB85EC, 0x96253D72, 0xCD1388D7, 0xF3B4FA8B, 0x4B13ABE1, 0x3939AC60,
+0x99029D8D, 0xAE120E8E, 0x22EF50B1, 0xCD82F7FD, 0x96626C67, 0x04EB6F3B, 0x5896BE64, 0xA10BEB0F,
+0xAFC4EC19, 0x312EC2DF, 0x358424A2, 0x1F083EDA, 0xCA404759, 0x6D22D465, 0xFD062C61, 0x33F7845E,
+0x4FF2C507, 0xEE569B86, 0xCAE3A02C, 0xBEF9BF1C, 0x6877C5BA, 0x767BE05C, 0x97CEB5E9, 0xCDEC0DD9,
+0xF25BCB49, 0x0E663BB3, 0x4EC94B35, 0x705581E1, 0xE4214AAB, 0x02AC896B, 0x2F76A74A, 0x81E22948,
+0x8D27DF9E, 0x479BC38C, 0x6D26A61B, 0x15495132, 0x060609FB, 0x4345664A, 0x4BAE0453, 0x49FF26CA,
+0x5AA6D8E8, 0x9BAEA8FB, 0x69CD79C9, 0x7CA70B35, 0x34D39464, 0x80C7C48D, 0xE788FF00, 0x5A6927BD,
+0x0A909F36, 0xFBE6A3F9, 0x829A9DC0, 0xB40783CC, 0x215DE1BB, 0xDFC49F36, 0xFFACED70, 0x23216C02,
+0x1445D50A, 0x9B7B293D, 0x379E139F, 0x75909471, 0x2961314A, 0x058927FA, 0x47109C8D, 0x253221EA,
+0x76883A4E, 0xDA8F7ADA, 0xD86D88C7, 0xDDBBE059, 0xB4AF2348, 0x01FF9BD2, 0x2D5A5667, 0xE1170341,
+0xD872C062, 0xBE8901EA, 0xE95DCF1B, 0x4A0D0865, 0x01A9B284, 0x2CF09A62, 0xAC077B15, 0xBB5B6A3F,
+0xC1744F70, 0x8C2DB777, 0xB83AA6A5, 0xE48F9A6C, 0x30C3A613, 0xC06B672F, 0x34B3829C, 0x0AA2AC02,
+0xD6DA686F, 0x0F781A1A, 0x8B3FA5C6, 0x8481FFD9, 0x2B2E87B9, 0x66FA08E3, 0x2695F6B2, 0x9E9CB761,
+0x98EAF3DE, 0x4EE7C46E, 0x71A19CB8, 0xF6C00262, 0xE3E3E3D6, 0x5380367A, 0x45AFE73B, 0xCD1A9BA4,
+0xEFEF710C, 0x8035CCDA, 0x256475E2, 0xEEDAC499, 0xA5BB13BC, 0x4D04E7F7, 0x20754EC0, 0xC0CCD6B7,
+0x14C546C3, 0x2FF347FD, 0x2038BE84, 0xB0F9D74B, 0xC61385D7, 0x9B4D1F3B, 0xC3DB1CC2, 0xC5E3C617,
+0xCAD376B0, 0xB2FB95DB, 0xAD6AF170, 0xCECD59AD, 0xF16AC63F, 0xB7D819E1, 0xB9F78703, 0x1E9C4849,
+0x0DEC8692, 0x55FF1CD7, 0xDC83548D, 0xFFF6A090, 0x3763A764, 0xAE5DA702, 0x8C4A00F0, 0xF3ACC5FF,
+0x723A3949, 0xA383527E, 0x9AC370AD, 0xE023015F, 0xBC20878C, 0xC99FFADC, 0x40ADE116, 0xCFD4DC62,
+0xEF602C2C, 0xF112000A, 0x01583ACE, 0x643471B8, 0xC64C08F2, 0x7DFE1A7E, 0xDE616385, 0x0BEBF770,
+0x12D9ABDB, 0x0AB72396, 0x2A95E5EF, 0xE94F5732, 0xC30D0B67, 0x5052FD3A, 0x7D918D16, 0xBAE6359A,
+0x989DF2B3, 0xAA9180C7, 0x8E74736C, 0x38405752, 0x47958F6A, 0x3D09AC2E, 0xD440846B, 0xE97432DF,
+0x567FFB2E, 0x8609043B, 0x1627ADF0, 0xE2F9F423, 0x0FD5DD98, 0x016B8E94, 0x6ABE14EC, 0xD743366B,
+0x022072FE, 0x7E9A4902, 0xEC71EF17, 0x24F0E97C, 0xE7C23B12, 0x40895AA2, 0xD379A3A9, 0x6496E14F,
+0x0C807779, 0x18CE8EC3, 0xF9874192, 0x5FB188B8, 0x1A66B3B9, 0x76F4B860, 0x45346064, 0x1A1A3240,
+0x2EA7EF09, 0x0D141442, 0x983FA6F5, 0x10023915, 0xF2E1F352, 0xCD13C9FD, 0x79D48039, 0x833406CA,
+0x0526650E, 0x3487CD7F, 0xC2CDFC5F, 0x787884D4, 0xCDF6B03E, 0x80B782CD, 0x7B760D62, 0x98F00BBC,
+0xB966AEEF, 0xC930C7A9, 0xD29F3FEB, 0x2302FAB1, 0xA450C8A6, 0x33FB1CBA, 0x6E33B50E, 0x4D3CD3C8,
+0xE96F0021, 0x10936C26, 0x3CDCEA16, 0xF8E31EAF, 0xBD9ABFC5, 0x29A6930A, 0xB71073DB, 0xADF28419,
+0x3FFCF8CD, 0x7787FF4F, 0xD9C8496A, 0x11AC9D15, 0xBC0E4D37, 0x7726BB0C, 0x65B8EEBB, 0xF4F47364,
+0x2D87A4C7, 0xCD8D2CB0, 0xBEDC5BB9, 0x1C73C45C, 0xF14776A5, 0xE606B402, 0x137D8C7B, 0xA1344A86,
+0xF7671191, 0x02B8C7B0, 0xD652BDF9, 0xFAD9EFB3, 0x5620A211, 0x9D89F63F, 0x2613BAF7, 0x0DA27F79,
+0x3393DBC0, 0xB57A05B1, 0xE91181D1, 0xD8893570, 0xE5F64375, 0x42F6DF22, 0x1CFB03BC, 0xD16F05C7,
+0xA05A47EF, 0xEDE46FFB, 0x96C164D0, 0xBEC50EDE, 0x23808E34, 0x08E99F6A, 0x22DF8205, 0x84354628,
+0xB682ADF1, 0x52F3514B, 0x94833684, 0x53DA9A88, 0x64F15A1C, 0x3354DCDE, 0xBFC58FFD, 0xCA97FD20,
+0x2B5A145C, 0x1F26AD5B, 0x0D535E1B, 0x5E8E76AF, 0xC89D1ED0, 0x8BD5088E, 0xB05B6F05, 0xE570B351,
+0x5089E65F, 0x9E08B866, 0xEF76990E, 0x32DFC188, 0xB5389677, 0xDBC2CD4B, 0x0ABB2196, 0xCC460E7F,
+0x99F24A41, 0xDAEAF585, 0xA496E46D, 0xD4DC32B4, 0x7A587091, 0x6055586E, 0x1FB749A3, 0x4C6B2AB5,
+0xE9DE90A3, 0xF77BECC8, 0x5B0F1EAA, 0x6196D5FB, 0xA989A164, 0x3A66E2EC, 0x5BDD9912, 0x1B36EB59,
+0xA220778E, 0x14F617E7, 0x83C9E68C, 0x757371A1, 0xE6615281, 0x0ADA9266, 0x5B0CE207, 0xF93E6362,
+0x979BB9A2, 0xB7194510, 0x86B0611D, 0x6DA8AF23, 0x8B5F4937, 0x64B27938, 0xE96FDF2E, 0x1D2214E6,
+0x22151076, 0x944694FC, 0xAD5E577D, 0x67FCA9C7, 0x1DEEDAD4, 0xF92597CD, 0xE09FC0F3, 0xD6C8E821,
+0x2243B80D, 0x35961606, 0x85B0748A, 0x5EC2F931, 0x8BB93CCA, 0x9140A24E, 0xCBCFB3F6, 0x3A7E6900,
+0x1340ED28, 0xBEBE0325, 0xC6370540, 0x6A091278, 0xF79FBB4B, 0x98164259, 0xBB37B6E7, 0xE958156E,
+0x4B9A20C9, 0x3A7EABF5, 0x6A30ABE2, 0xBB8710C6, 0x47ED8A35, 0xF73A9C91, 0xAAC1F3E2, 0xDC78D5B7,
+0x8C81F0B7, 0xECF987A2, 0xC656FEC2, 0xD20E14C5, 0xBE4AC14D, 0x5B0E43A5, 0x66B2D42B, 0x3539415A,
+0x013A9F41, 0x5CACAC4D, 0x22B5404C, 0x01256004, 0x707BADB1, 0x46A2A34E, 0x89DB7C6D, 0xD221FFF6,
+0xE0BBE645, 0x81C70C4B, 0x3CBD966D, 0xD344354F, 0xE4D7674A, 0x91FCDC9D, 0xD0ACE757, 0x9A32CD08,
+0x59BF4C06, 0xE2124BD6, 0xB0C43144, 0x0D922603, 0xEA3AAF5B, 0x17F522B8, 0x7C804665, 0x0FAADA37,
+0xF19E06C0, 0x09B3C5C1, 0x7AF600DD, 0x0D96F011, 0x9B32879E, 0x6B231353, 0x8A7667E0, 0x969D6285,
+0xBC335995, 0x3F858937, 0x536153A7, 0x15143804, 0xDE6850B4, 0x605CF61A, 0x36FC7677, 0x889888DE,
+0xD6EA9CBC, 0xD8234266, 0x8CA441EF, 0x584DA9C1, 0xCC2AE67B, 0x80F8B8DE, 0x5D179FD0, 0x6173DFF6,
+0x26DE8ABB, 0x47B53BDA, 0x32CCFA2F, 0xD6AE5C70, 0x11AA27BC, 0x608632D1, 0xF0E7B4D3, 0x7EB334B4,
+0x59C12904, 0xD92ABFC9, 0xF43B294B, 0x76592DB0, 0xAC274EBD, 0x280CE4FF, 0x91E2E130, 0x94BE0E57,
+0x33D57A9C, 0x018AE673, 0xC052950E, 0xD246D6B9, 0xBAF8A21C, 0xD90AC89F, 0x894C3028, 0xC47F8D57,
+0x07FB66C6, 0x50FAADE8, 0xFBAD58AC, 0x2A816E84, 0x94EDC0E7, 0x05B964C2, 0xAAC0E307, 0x705E91CB,
+0x51D02EED, 0x23148CE9, 0xB038CE8F, 0x3DDE7815, 0xDF8FE922, 0x01A6C6E1, 0x65FE5FA6, 0x736FF6BF,
+0xF4326284, 0xA9EE2282, 0xE9E2F140, 0xED887E98, 0x0C65A6CC, 0xE994C97B, 0x6885C37C, 0x7B9F614E,
+0xA94C6383, 0x0E1619D9, 0xEA1C82AB, 0x911F2648, 0x6721AC47, 0x777D160A, 0x505DEEE7, 0x14536D10,
+0x89AEC883, 0xD530FA44, 0xB42A2876, 0xF26A3162, 0x74FB0BCC, 0x03000002, 0xEBF8A703, 0xA519EF36,
+0x0DE26E4A, 0x3C8DC26C, 0x0F134A02, 0x62D0ABC8, 0xB9F9BADB, 0xF86D504D, 0x5ED962DD, 0x2B4F2025,
+0x42290DFC, 0x00DE8471, 0x8F827F8A, 0x6F325500, 0xA8E8D6E6, 0x8ECBE765, 0xBB7454D0, 0x91FCC9A7,
+0x30CD2884, 0x73B2514B, 0xDC88A540, 0x5A00F33A, 0xE399B80F, 0x951E5295, 0x25BAFB03, 0x592E6622,
+0xD222CE02, 0xBB08E18E, 0xEC9AB983, 0xB0693CBA, 0x71D271DD, 0x8DC40A62, 0x376F5062, 0x8A4038FA,
+0x060E8ED8, 0xEF7645A4, 0xDA1A08CC, 0xEB216508, 0x1C5CA532, 0xA9B5CAAD, 0xDD2CEC66, 0x2671CA43,
+0xAE3DEFDB, 0x6240B692, 0x6A8B2159, 0xAE0FE1E5, 0x91F918F6, 0xE71BB1CA, 0x884BB630, 0xF989065B,
+0xEFB2584C, 0x4C4B5FA8, 0xE1343152, 0x0164C9E3, 0x700ACFA8, 0x99D9CA01, 0x05D85653, 0x379FA2E3,
+0xC62EB373, 0x86DFACD4, 0x6856BAFF, 0x1AB7679C, 0x6A09AC98, 0xC315B376, 0x2882F206, 0x74A75770,
+0x410B5792, 0x0A1DA020, 0x88F38B6C, 0xE23ACC8D, 0x4B31595C, 0x54D89504, 0xF382643C, 0xFC1B896C,
+0xF662A0EB, 0x9315063D, 0xA18FBCD0, 0xE391879A, 0x902E93D4, 0x681DE3AB, 0x7FF518D4, 0x23A1636B,
+0x43FBBA10, 0x45009FFA, 0xD719AC35, 0x8A28B51B, 0x39B2ADE9, 0x3EB36ACF, 0x2477B4AD, 0x4B0F90D0,
+0x87292321, 0x7B53E69D, 0xF8576FB3, 0x9C5FE7D9, 0xB324EE18, 0x1DA4BB84, 0x03EE2766, 0xAB655D99,
+0x3E7730EC, 0x2433E8DF, 0x1F28910D, 0x674F2625, 0xD4BE32FE, 0xC906A15C, 0x0C952F27, 0x379DD033,
+0xE86DD0E0, 0xB2E8ACB9, 0x6E28B8E8, 0xD0D36B25, 0x2E3AE602, 0x7154A2B9, 0xA0DED551, 0x71265C39,
+0x8F4FA47B, 0x612C49C4, 0xF410FA90, 0x92F35DCF, 0xAE5E9422, 0x45F9D10C, 0x58C875E3, 0x383EB25E,
+0xEBA2ED23, 0x6AE977C8, 0xEEBCEB14, 0x0E3B76E5, 0x9087AB4E, 0xCCE165A2, 0x81515DB4, 0x27C2968F,
+0x3C3E9346, 0x80369741, 0xA2789DAD, 0x8A665D6B, 0x00A59D79, 0x736D4E27, 0xC47C35A2, 0xE9FC2019,
+0x3049B7A1, 0xAAA4558C, 0x3B5500F5, 0x5DB35B8B, 0x8D7926BC, 0x3A40BA8E, 0x91D8044A, 0xE9C40EB0,
+0x2F52E949, 0xE3C29625, 0x2B4DBD83, 0xF452691B, 0xB329CD0F, 0x287B15E2, 0xFA64D336, 0xA724448C,
+0x48E8B829, 0xC12E5680, 0xAF12DFEE, 0xF44E5ACA, 0xD6D7FA29, 0x2059A3BD, 0xD3335B7A, 0xED41443B,
+0xF615AE61, 0x8E5B3AE0, 0xEE08ABCB, 0x0271DEAD, 0xE84BFCCE, 0xFD110A5B, 0x92845256, 0x6BADB9A5,
+0x51194704, 0xA1EF9D50, 0x44296DF0, 0xAAFFBAA3, 0x13C95D92, 0xF7FCBBF7, 0xE505D148, 0xEFB658ED,
+0x91B95117, 0x8DF60F87, 0x894959C5, 0x73A48F31, 0x3B76BB1D, 0xF2EA1549, 0xD8FA068E, 0x4144A813,
+0x03D2A0CD, 0xC4EF0C2B, 0x411FC1B8, 0xDA3BAE67, 0x5C48A87F, 0x8B618FC4, 0xB2EC5C70, 0xD359166D,
+0xAEECEF54, 0x61000CBC, 0x592A62FC, 0x8FD6B37F, 0xF9129F91, 0x76B602FD, 0xC8ABB50C, 0x8188040F,
+0xF86587D8, 0x71759D0F, 0xC7C845C8, 0x0D7D23E2, 0xDFA5CC68, 0xA71EF836, 0x74525061, 0xA4D36DA2,
+0x4DFD4533, 0x75C4B173, 0x1E6A0EA9, 0xA664845A, 0xF8ACE7D7, 0x4804F534, 0xDE0FFBE4, 0xC234F7E6,
+0xE52DA4BD, 0x6BFDCBFE, 0x5AF818BE, 0xDDE0F001, 0xC16883A6, 0x7FBAF57E, 0x3BED4A8C, 0x39C66B13,
+0x7F663638, 0x5F3E559F, 0xEEEEC45F, 0xF5954CE8, 0x60E3FAC9, 0xD01EAC9C, 0xC818374F, 0xA5AABABA,
+0xFB91219F, 0x6B01314D, 0x787EF5A7, 0x9CCCDBE9, 0xDB5EEC75, 0x95D2CD90, 0x71212AEC, 0xA11D9D86,
+0xD22A8DC8, 0x494B2DB0, 0x84560134, 0x59D05D07, 0x9D387391, 0x5404CF4F, 0x4BE43FF3, 0x36B5C90E,
+0xACF1CDDE, 0x3674A80D, 0xDC40CAAF, 0x349C56D2, 0x5F277862, 0x3E31DBD5, 0xF7ABF901, 0xFAC32EF2,
+0xEC9907C5, 0x54CC338A, 0xE2E8CC9D, 0x12B3F9CB, 0xA5014800, 0xB8468CFD, 0x4C3A8B54, 0x70AF6EF4,
+0x6CFF45C8, 0x5DFE6CD0, 0x1E53AAE9, 0xB9D29629, 0x9E62A6A0, 0x4B3B563D, 0x16D79EAE, 0xD9CEC2C9,
+0x3019F1C1, 0xA7020ACD, 0xA6A12CE5, 0x3837497C, 0xA379E566, 0x8FEAEBD1, 0x23687B0D, 0xBD20002F,
+0x1961B95C, 0x6D966AF7, 0xE15AE875, 0xBB9FDA28, 0x65BFF529, 0xC5DB8CC2, 0xEB7E6230, 0xA952826D,
+0xACC096A7, 0x916A8465, 0x5EDF8242, 0x7EDAFFA6, 0x51351DDA, 0x02B4DD6C, 0xD720EED1, 0x3CC6D70E,
+0xA4B393AC, 0xA7769195, 0x49E7C51B, 0x5D3C4389, 0x471B997A, 0xDA731CCA, 0xE99D47D5, 0xCA7C5EEB,
+0xDD8FA1CF, 0x471BE18D, 0x4561639E, 0xAD15D2E8, 0x7A43FACF, 0xD60F6373, 0xAA613220, 0xC3F0E708,
+0x20A2BE97, 0x424887FA, 0x1F99146C, 0x52965B96, 0x2B371660, 0x04C0F120, 0xC49F2EF1, 0xD9CF4F3B,
+0x6B0DD5B9, 0x7058774B, 0x05CFA3D2, 0x1539BD3D, 0x7FC91D82, 0x4B271F9F, 0x380522C9, 0x8F84DCDF,
+0xD07C2179, 0x8984E31D, 0x02A079F4, 0xEE757EFF, 0x522150F6, 0xAE4D5DB4, 0xBAA4FC90, 0xB66C8DEB,
+0x19E80684, 0xAA5C3397, 0xE493F013, 0x6E433BB7, 0x7D23594B, 0x730300FB, 0xB0232A15, 0x23D1B097,
+0x61E1C1C7, 0x564C0B19, 0x97A8CFC0, 0xD1AFD5F9, 0x1EE3B6E2, 0xDDA89B32, 0xD59985A1, 0xE20DC8F7,
+0x7B8B1E87, 0xE802713F, 0x16EFDD92, 0x6462CB8C, 0xE36E9F1E, 0xBB49D195, 0x137C9627, 0x2873C15A,
+0x43751D2D, 0x0F8AD26F, 0x5213890D, 0x84A05172, 0x0E56810F, 0x39206683, 0x94D147C6, 0xF01A6615,
+0x58361732, 0x366BBB6C, 0x571C4BA7, 0x5ED502ED, 0xE04A33F0, 0x2123B78A, 0xBD13D605, 0x8E4B78C6,
+0x960607C5, 0x0CC666A3, 0x224EEBAB, 0xBD79530A, 0x08957356, 0xAF19D1D1, 0xBEEA759E, 0x204F054A,
+0x5AEF472E, 0x03449303, 0x9F02E795, 0xFBEFD9F7, 0x0B6BB781, 0xB3AD01E9, 0x82BE2F92, 0x3FD7CBCB,
+0x4BBEA203, 0x0D4FE48C, 0x4F1941FE, 0x7F65FCE4, 0xBFA4D961, 0xEE070296, 0x6C6063B3, 0x9CC05C39,
+0x3FEC9A93, 0xB7BF3A78, 0x9AA17552, 0x46661EEB, 0x1E5D26FB, 0x6ED7C137, 0x0EC8471B, 0x3D6CED70,
+0xB2DBF199, 0x01770E1C, 0x32B1FC5E, 0xD9407738, 0xE54162C1, 0x1BA299E2, 0x6C6C9E96, 0xD45971FE,
+0xBC250F29, 0xEC8D3287, 0x1464F2EE, 0xF38B848F, 0x4EEDE5BB, 0x7109C788, 0xF896CFC1, 0x0B63D232,
+0xD322EC8E, 0xC8EB86F6, 0x4BB8EF4F, 0x91DC8B25, 0xD4B99AEE, 0x9AB35B73, 0xBD2F7BC9, 0xB4F314E4,
+0x21EE6E67, 0x023FF876, 0x4C9AAE37, 0x402A9395, 0xF93697E1, 0x9085BCBB, 0x828CC289, 0xF0315683,
+0x6C81DD02, 0x90ECF0A3, 0x97EA8417, 0x96B2440E, 0x1C4EB76E, 0x80671E80, 0x548B28F4, 0x9DB2286A,
+0xE67B73DA, 0x48D145FC, 0x93111ED5, 0x4F15A859, 0x78FA52AE, 0x1ECEADC3, 0xD44C4009, 0x9A4E5C02,
+0x5D5ABA59, 0xD7D4D21F, 0xBF0937C6, 0x0EC089B8, 0xA2EA1C17, 0x7BFF82EC, 0x79F3FBF0, 0x194D02CE,
+0xD3BE7273, 0x26BB91BA, 0x3238EBB4, 0xB2E8C834, 0x03963785, 0x6E715187, 0x34F54C30, 0x485C7004,
+0xF6E883BD, 0x0BC5B158, 0x4D8CCF75, 0xA8A65AEC, 0xC849FE5E, 0x93635B6A, 0xD902E59B, 0xE90E43FD,
+0x7B1ED779, 0x83C6072F, 0x33D7B65A, 0xC72FBD8B, 0x08F8DF8D, 0x2D86993A, 0xE4F2F524, 0x45448503,
+0x00008089, 0x9E010100, 0x12873000, 0x00F1FE7F, 0x3707DE14, 0xBE15AB3E, 0x9A9C3B11, 0x1D59911D,
+0x1FE90125, 0xC0680423, 0x607463A9, 0x74BBA12F, 0xF24ED6AE, 0x5E4BF591, 0x206A0EBB, 0x0B9B1D37,
+0x8A244053, 0x45BBA2CE, 0x6A910FDA, 0x1D8538DE, 0xE6D84BFC, 0x908AF826, 0x61D08FF7, 0x0BC0287B,
+0x9FC0EC77, 0xEECB0244, 0xFF61C7F8, 0xF91E67CD, 0x6CDC95DC, 0xD7066252, 0x1D9D7008, 0x959B0F68,
+0x8DB9B270, 0xF653FAC6, 0x636880C4, 0x5E01E1CB, 0x1D8F57B1, 0x3D74C526, 0x52DF7287, 0x6ADE5D4F,
+0x527BBCDD, 0xF204AADC, 0x6B1DE43B, 0xAD48DC0E, 0xEB8B3339, 0x4E4AF5D0, 0x37A5B1DC, 0x45E7D1AB,
+0x0DAA6A5B, 0xD71B06D6, 0xD4C0B5FE, 0x52C5A2ED, 0x16805CD3, 0x6DF104AA, 0xB69CF9F6, 0x72BA20A4,
+0x6143354A, 0x7EEC497F, 0xFB2E54AB, 0x76F010F0, 0xDEFA2428, 0x753C3DB5, 0x920582D2, 0x213A329C,
+0x6C952E22, 0x629BB1AE, 0x690AE8C7, 0x3C0FC351, 0x301FF8EF, 0x011397D3, 0x9FEFDB64, 0x85324705,
+0xCD619A9E, 0xC16EAE04, 0xF8796596, 0x9E48D7C4, 0xB1BFEA33, 0xD3F979E0, 0xC0372DEA, 0xA53C5AA0,
+0xFE8E2535, 0xBBA8AE45, 0xFA4A11D5, 0x121AF22B, 0x91FBBC68, 0x2ECBE940, 0xE3557C51, 0xD198CF84,
+0xB0A5C94B, 0xC970D2F8, 0x1A7289BB, 0x58F16C28, 0x9ECAA604, 0x64625574, 0x15836BBB, 0xE099CB50,
+0x6E98B916, 0xAF7E0AF5, 0x35C1AB0F, 0x601F9FBE, 0xE7ED9D7E, 0xDE436BB1, 0x7F7BA0AD, 0xCA1BAFD9,
+0x6404D6F8, 0xFD0F69DA, 0xCB1D9FFF, 0x29F5706F, 0x966E0E47, 0xA23D7130, 0xF33D07DC, 0x07045B31,
+0x4A19D092, 0x5F0C6A9A, 0x5A9D224E, 0x3321369C, 0xC760A04E, 0xD399F713, 0xC0769566, 0x653FB0E5,
+0x482B8054, 0x07AC19B2, 0x7CC71EF8, 0x024EC764, 0x2C82356D, 0xC4BFF9CD, 0xF0EDF77F, 0xAF128033,
+0x561E83EA, 0xABE17674, 0x99F4D2D7, 0x3200DC92, 0xF60C5637, 0x01CA8055, 0xCDD6367D, 0x273AE716,
+0xFD889BD7, 0x8A7AAAE2, 0x2B68960F, 0xC7967693, 0x01D300AC, 0x0977DFCF, 0x114C0CB5, 0x9C79AC3B,
+0x71A5A97A, 0xC02FFFB1, 0xA985795F, 0x75452CEC, 0xBD7AD51B, 0xCAD5EC2A, 0xEB35F374, 0x1EA9A386,
+0xA989C2BB, 0x1FE9F762, 0x354F5A33, 0xAF84FCD3, 0xD18D96A6, 0x7C62941F, 0x11A0D930, 0x0773D8FD,
+0xD31D3F28, 0xB10CB7E7, 0x1E77A9A4, 0xA72D577B, 0x553A8C84, 0x2C209121, 0xD07FAD99, 0x8017DBB4,
+0x9E64237F, 0xEEA95302, 0xE281F1E1, 0x76602892, 0xD1BF94B3, 0xF64665F6, 0x14A681EB, 0xB8F39396,
+0x6AE88904, 0x00344A30, 0xA14631BF, 0x8A127632, 0xA8D60CA5, 0xB4EF504C, 0xEDA98F6F, 0xE7FE9A70,
+0x0ABF4B1E, 0xE56A3CF5, 0xC16BA625, 0xBA262BB9, 0x06034DA5, 0x7E1563CA, 0x943457E4, 0x3DCC8502,
+0x1C13FF5F, 0xA34C184B, 0x8DC10F8A, 0xD3FA7A20, 0x5F128FB7, 0xD4900AD8, 0xE17D9D17, 0x4ACB5961,
+0x8C5B3C09, 0xCF354E0F, 0x594D0589, 0x645F5922, 0xC5063EFC, 0x984A4CF8, 0x5F3CB4AF, 0x7C0EF2A0,
+0x465FD6C0, 0x4DCB85DB, 0x850E4260, 0xE0D3AF47, 0xCB2BA435, 0xE1458600, 0x7BCAC71E, 0x2B041629,
+0xE34FBA1D, 0x13B30DDF, 0x7EA72D23, 0x34073932, 0x471F49DB, 0xEC994FCA, 0x880522C7, 0x16FA3B9C,
+0x5FDD1B6D, 0x7FCD98E9, 0x550A5CCE, 0xE3AA1FE9, 0x294770A6, 0xE9D18DE5, 0xD92752D0, 0x01B44E2F,
+0x77553454, 0x915478C7, 0xB7DFBD78, 0xC71128D2, 0x972AC417, 0x48624610, 0x73B4839A, 0x79D7ADB3,
+0x20ACE0A3, 0xFAE20433, 0x77C90B8D, 0xDDE44BEA, 0x87C71AE8, 0xC8E86BFB, 0x9403461E, 0x5B87F62F,
+0x8BBCCF31, 0x8DBB6C20, 0x5F874C33, 0xBEDF92BD, 0x0391E5D7, 0xA54CE164, 0xE49AE387, 0xFDAC1D04,
+0x80C3E71E, 0xCE0A5AA6, 0xCE726ECE, 0x344F9B5B, 0x1E0366CA, 0xEFF0D7E4, 0xE1C9200A, 0xCC7290A4,
+0xE97FEB4D, 0xC595BD9A, 0x0B056F4F, 0x53D3EB60, 0x070E3BBE, 0x6222EDBB, 0xD2057559, 0x51CCA9C7,
+0x2069D393, 0x9E905553, 0x35B6DAEA, 0x7951848F, 0xBE0AA0F0, 0x30EA34C6, 0xDD9C16CD, 0xD8E1904E,
+0x56E28617, 0x76EDB22D, 0x945988EB, 0x83846878, 0x57C165D4, 0xFC73274A, 0xC778C7AD, 0x9C4C965C,
+0xBEE4F6B3, 0xFD203E7D, 0x2CD9E875, 0xE4A96B15, 0x3C55251E, 0xA52D090F, 0xE6CDD9D3, 0x3B47CBA1,
+0x027E77E1, 0x09F3111F, 0x0B0C8C87, 0xFA7661FD, 0x256C8153, 0x4743AB42, 0x460F45F2, 0xDC316719,
+0x8BC1F792, 0x6C2D66DC, 0xE423C8BB, 0xC9C6A734, 0xAB812CD3, 0x0C615059, 0x5659125D, 0xBF56A510,
+0xF9A9D92F, 0xAA2F7845, 0x0FCEC210, 0x09F16F33, 0xD49B3483, 0xFCB1018B, 0x8E266B58, 0x55ADB29E,
+0x3B9C8F34, 0xA7CFBA4C, 0xC8677FF5, 0x01C2C70D, 0xF5099AE9, 0x41E8653C, 0xA2D0C302, 0xA09EF248,
+0xEC9DE69E, 0x1BEB6E72, 0x5D7C4BDC, 0x319E42E8, 0x1383DBE3, 0x4482EFEA, 0x4970084F, 0x71F45DDB,
+0x77C41BF9, 0xCB14E378, 0x18772013, 0x154A661A, 0x8351A846, 0xC2342852, 0xC0B1FD4F, 0x428DF99C,
+0xA5ED6733, 0xD19FEA79, 0x38F6DE8A, 0x2A492B2C, 0x7CFFEE59, 0x6061578D, 0x786FB313, 0xCF4930DC,
+0x16ABE7A4, 0x395ECC6E, 0x2D930788, 0x52963920, 0x3AE88C8A, 0x8FF47C62, 0x54BDABD6, 0xF00B4825,
+0x416121B3, 0xE935567E, 0x886DBEDB, 0x6615A80D, 0x399B70F2, 0x36FFC6EF, 0x2D66EBE5, 0xF71F6D12,
+0x2F86ADAA, 0x537FD62C, 0xB8C0FE50, 0xA154C062, 0x31835389, 0x9F0E5ACA, 0x9A95D43D, 0x4AFBF48C,
+0x00000040, 0x009E0101, 0x7F128930, 0xEE0763EB, 0x59BF23E4, 0x72810AE2, 0xC5F4F433, 0xACED2DAE,
+0x8DBFF1C8, 0xCD9ACC54, 0x25C27E09, 0x9260ADBE, 0x296C5BDC, 0xC14DA6A2, 0xA7E0BAC2, 0x4AC5CF67,
+0x9892588E, 0x42A4005C, 0x6E8A8C4B, 0xC63AADDB, 0x7C69E0B4, 0xEF75234F, 0x3085EA32, 0xC1421671,
+0x2713336C, 0x73801F0F, 0x791D8EF0, 0xFEA3312B, 0x15792617, 0x48F45812, 0xAB42B983, 0x976BB7BE,
+0x08885EB6, 0xA0708368, 0xC29EB83C, 0xD3E8A619, 0x0D89CA93, 0xBE06A39B, 0xE59F1C4B, 0xCD80DB0F,
+0xB02E9761, 0x25027469, 0x8E5860EC, 0x90CBFA3C, 0x0222DAD9, 0xCD1DCB6B, 0xE5D3D416, 0xC873810B,
+0x0B75D11B, 0x0CF778A6, 0x09012511, 0x580306F7, 0xA0745797, 0xE7D6CCB4, 0x78ABA7B1, 0xD76E22F1,
+0x8BCBC5A3, 0xBF09977B, 0xC72B9839, 0x705566A1, 0x60237A1E, 0x7FA0054A, 0x36D942DF, 0x8F443C72,
+0x69409FCB, 0x638787F1, 0xDDC62922, 0x781CB732, 0xF5B84453, 0x367F57B3, 0x08E54FBC, 0xD6AF391D,
+0x02BA29CF, 0xB02F595F, 0x0C0C52AC, 0x5E24349D, 0xD97CDA07, 0xE828463F, 0x231AE2E0, 0xC6E3013C,
+0x34F96A23, 0x93DE5FC2, 0x987E7C80, 0x19667FDC, 0x7DEC75EB, 0xC76AF249, 0x865528A1, 0xFC1D7813,
+0x10A0740C, 0x80EDE864, 0x2D2CC93C, 0x75C1B185, 0x7F725AB5, 0x972CE54C, 0x09834C81, 0x409DD6A4,
+0x0EF1302A, 0x27544E5C, 0xBBDB174E, 0xFF2E1E80, 0x5E25BB62, 0x66775C8E, 0x4846A467, 0x43546386,
+0xB34F2F8A, 0x0C8B1C99, 0x1C749E55, 0xF1CDE0F9, 0x2DE6B466, 0x5281C7B5, 0x6D00E4F7, 0x106DFC98,
+0x2ADF2F65, 0xF09F9799, 0x21C47CB0, 0xB894E252, 0x4B6BD199, 0x25CF0475, 0x6F79DAD7, 0x160B9511,
+0xE82D4802, 0x0A52A3FD, 0x0EB621F7, 0x63D679D7, 0x009D0ACE, 0xA44772B0, 0xC5F20B4A, 0x7682BC17,
+0x83DE4DB8, 0xA25A41D5, 0xCD7A30D2, 0x1DF39DB3, 0x86522645, 0xBA087165, 0xBE0F22E0, 0xADEB678F,
+0x12406023, 0x229B2828, 0x2D609F1A, 0xC4D082CE, 0xC9186775, 0x6341DF8B, 0x8E3290F1, 0xEDC914FA,
+0xC8531E0D, 0xBFE55746, 0x6767C594, 0x25E6F923, 0xE556E22B, 0x2C40D555, 0xA0513191, 0x8C0DD247,
+0x434FF9C8, 0x3E4A16EC, 0x4304622B, 0x5AFFABDD, 0x44D08F29, 0x3C133D15, 0x2C1C7A0F, 0xBCF89A92,
+0x205294CA, 0xB8F1C5CC, 0xBD7E9253, 0xBC342FB3, 0x7110A69A, 0x6633A4B6, 0xBAD3910F, 0xF641AE06,
+0x48D332C5, 0xEA2B9128, 0x50E1E146, 0x3BAD6FA7, 0x6D0A2334, 0xC47FEFCB, 0x5868AD09, 0xE4D8ECF6,
+0x76F9AEA4, 0x592DEF0C, 0xD98159C4, 0xFFBAA37D, 0x56414F89, 0xCE124773, 0xAB631E4D, 0x7A269A03,
+0x8B6B7661, 0xAA232EF7, 0x4AA815B2, 0xEC452419, 0xE1EE5324, 0x140C14CB, 0xDFEDC06D, 0x89B05492,
+0x1DF02B39, 0xFB8AB18E, 0x87DBD4FE, 0x12415205, 0x8963CF99, 0xD9EFD9F0, 0x6FE61F30, 0x5D359A1A,
+0xE36C13BD, 0x248E0842, 0x64904A13, 0x9320E6B7, 0x30CFD805, 0x8831BDF1, 0x01BE2EA5, 0x8BE0B683,
+0xB40ED8B0, 0x78AA580A, 0x5D8260BC, 0x09FBF507, 0xE845F7CB, 0xC85ADA1E, 0x2F22F199, 0x5E9ED3BF,
+0x67078229, 0x1DFA888E, 0x5C36BBD2, 0x3F2D41CC, 0x981BA1A2, 0x95312BEA, 0x0E6CB35E, 0x059B25C0,
+0xD4EAC7C6, 0xCDB2BBB9, 0x39245111, 0xFEE54BEE, 0x97293EE7, 0x81E04502, 0x463BB95F, 0xBBC7D2B5,
+0x39D421B1, 0x6F9E0006, 0x04512300, 0x26873639, 0xE90E3E68, 0x0311C4CC, 0x679EB447, 0x2A43F3F7,
+0x70E4722A, 0x250E5054, 0x1BE6E823, 0xE8A0F6BC, 0xFA0A4718, 0x8C5B8DF1, 0x812816EB, 0xD69DEAB6,
+0xECE08910, 0x4C53B28C, 0x90323779, 0x98EACECA, 0xDE59894E, 0x5A0E4434, 0x12CE2E6B, 0xB5B48253,
+0xF982B861, 0xFF6906BA, 0x848164DD, 0x31241A0C, 0xCEE1426B, 0x7084F6B6, 0xD8AF42F2, 0xFEBAC89A,
+0xB967CA03, 0xCB368433, 0x0DAC1432, 0x9CFF31E4, 0xFD9FD856, 0x2528FF19, 0xD379F444, 0x7004F8F6,
+0xF6989710, 0x0E38D457, 0x1CC3D0C8, 0xE6B562B7, 0x940D2CB3, 0xF5625A45, 0xEA1A791A, 0x4F78E6C8,
+0xF94DBA1E, 0x27776E4E, 0x181010A9, 0xBC3A7CBB, 0x6CC55469, 0xC9860F53, 0xB60E64B6, 0x3935659A,
+0x1596D303, 0x3900F995, 0x065F7CB5, 0xC3D41FD6, 0x7F1430A4, 0x4961E186, 0x5698C99F, 0x08E74C77,
+0xE52B89C3, 0x237E1EF0, 0x0215B99F, 0x192A750B, 0x4ACE781E, 0x6ADF47C3, 0xAF8FD94D, 0x9ED8DC11,
+0x60277C53, 0x14286185, 0x95E7445F, 0xDAD38463, 0xB91A836F, 0x40152C75, 0xEE5D17E6, 0x9F123381,
+0xB0619802, 0x8BD9A0FB, 0x9A46BE85, 0xB494DE7C, 0x2D7BF045, 0xA85934B7, 0x144C425C, 0x3A4C5683,
+0xE7F1C6A7, 0x5CC81CFC, 0xF1E1FBF6, 0x250FA5B8, 0x9D1279AF, 0xB714D1AD, 0x36303616, 0x2A57E59C,
+0xFF980F1E, 0xC36671EF, 0x72A7FA1A, 0xCD110BCA, 0x9C601B5C, 0x718BE7B0, 0x95E6563C, 0x86384913,
+0x6B5B1B2A, 0xFDB2821D, 0x792D4B6A, 0xBC0DFC1B, 0xCE9B62FD, 0xA583CB2D, 0xB98C2483, 0x2F125715,
+0xAC1E770C, 0xF876CD83, 0x012928B2, 0x1913F11E, 0xB86D9CE5, 0xDFB0E9C8, 0x85F781C6, 0xDB54D629,
+0x4F1B5A77, 0x48A665D9, 0x3559C5E8, 0x94B6EA17, 0x548A45A3, 0x0000F0DC, 0x9A210100, 0x3F903000,
+0x4701AFBB, 0xC9B42B17, 0x421195DD, 0x2E9F34BD, 0xF1C5F693, 0xDDBF4C31, 0x797E4458, 0xF2668494,
+0xF2A19919, 0x37B5F7AC, 0xBA6165A2, 0xAC91F6FF, 0xDCF901F6, 0xE314B644, 0x0F3B8BD8, 0xD24BC5FC,
+0x88FE3535, 0x627DFE57, 0x5ECC8FA6, 0x568FC45C, 0xADC0EB6D, 0xAD546137, 0x60FDB677, 0x07449ECA,
+0x7B934281, 0x1B395951, 0x8DBFB02E, 0x5FEFA39C, 0x62140E7E, 0xD6AE712A, 0x08BCBB63, 0xA62CAC4E,
+0x0C83A9DE, 0xF16A9B36, 0xF3A679AB, 0x875D2E1A, 0x79CF3FA2, 0x9941B2B1, 0xFBC0542E, 0x449F873A,
+0x554B3A43, 0x2C25F39D, 0xCEBC272D, 0x5A59AF23, 0xC18B9CAA, 0xD57CA2BB, 0x4A641EF2, 0x226878FD,
+0x4126473B, 0x4693145C, 0xB8A55AC7, 0x7977F6F0, 0x02BF470E, 0xE43AA85D, 0x385E8932, 0x6FA9F299,
+0x3E757F35, 0x9CCA8B85, 0x33A464CC, 0xCE3AAF51, 0x9A994F1B, 0xE1B84DE9, 0xAFFDE86A, 0xC20CC2EB,
+0xCAADA191, 0x993467D3, 0x7012676A, 0x64DB5BBD, 0xC1B36FA2, 0x28BDF754, 0x53E470CD, 0x3EFFCDFE,
+0x6ACEEDF2, 0x1E5445C9, 0xE9A46418, 0xE72D1905, 0x34388558, 0x009E0544, 0x7522EAA0, 0xA73066DE,
+0x45104187, 0xDF0B9E66, 0x278C3F0A, 0xC4D8B244, 0x8A4F8842, 0x79208427, 0x9F0B2690, 0xD81807CC,
+0x2A175D9C, 0xA76CD755, 0x8C5AB380, 0x10EEEEF9, 0x5A191616, 0x22992C8C, 0xD826655C, 0x8A8AD28A,
+0x92D5FD78, 0xA7CA543E, 0x518AB20F, 0x4309B68F, 0x2290E090, 0x83C7EBA2, 0x0B9EB4B9, 0xD9095DB0,
+0xCA7F6279, 0x13100332, 0x6FAB440F, 0x08D01912, 0x77135CA2, 0xAEFEDD2A, 0x28770EAB, 0x595E54CB,
+0x29A12B93, 0xCEC9F6B0, 0xEF395EC5, 0x0697AD6D, 0x49CAE322, 0x81D1B09D, 0xD0B35F59, 0xF548DBA8,
+0x207D360A, 0x0110E7B5, 0x2A3C82E7, 0x97742E5E, 0xB2831386, 0xE074D0F7, 0x22722EBC, 0x60BCBD09,
+0x2D3141F3, 0x6414AC6E, 0x12860245, 0xB57F828C, 0x69D0FBD5, 0x57224816, 0x3739E218, 0x36AEF2DF,
+0x49683F50, 0x497463F2, 0x1D51DADF, 0x148855E4, 0x54C0DDD7, 0x888DC9E7, 0x28C6CDB3, 0xB42BC55D,
+0xDFCA3C92, 0x25981455, 0x81E1BCE5, 0x886A1841, 0x8475644C, 0xF4AE6110, 0x5E231067, 0xF6A45915,
+0xAF796DE4, 0x02D0A0F5, 0x8C66CEB8, 0xDA073A1F, 0x4CF39CAA, 0x15EE1097, 0x36324D87, 0x651F8B6C,
+0x4CE31C31, 0x97AF699F, 0xA97D492B, 0x674FB61F, 0x061019CD, 0x2BEB85AB, 0xABCC92BA, 0x026BCAD8,
+0xD93B6C87, 0x31B771B3, 0x86A74A47, 0xA279F682, 0xE38A3278, 0x39498386, 0x5FC65E0E, 0xD02180EB,
+0x8908AF6A, 0x4828392B, 0x57EF6234, 0xD377FA04, 0x291A2E56, 0xEF44E641, 0xF4272502, 0x7A0DFFB1,
+0xACBBCEBB, 0x7140AD48, 0xD3F12427, 0x4AA387B0, 0x90D5B4A0, 0x3E164606, 0x5B38163B, 0x1458CA6A,
+0x037668AC, 0x120EB0D5, 0x52C344CA, 0x5AFCBF20, 0xB18AC3FB, 0x44A4706B, 0xC1B9EF6B, 0xFDEE5A69,
+0x7BA45AC4, 0x48D9DFFE, 0x81D5573C, 0xEB654172, 0x58F79819, 0x71C9F96E, 0xABD2E5A8, 0x21A8E5D6,
+0x64CF4935, 0xA4835942, 0x0B0E7B44, 0x6AD95FE5, 0x9ED2EECD, 0x6FA5236B, 0xAE3C0022, 0x79A1C0F6,
+0x5D00EC69, 0x646A3AA9, 0x8E636341, 0xE0FC655F, 0xB20E6ECA, 0x1000981F, 0x4182EEB4, 0xF25881C6,
+0xCA2EC4E0, 0x88387A30, 0x5C906A7C, 0x0B15AD1E, 0x5B4C35E6, 0x9696D669, 0x87D67F49, 0xDFB52470,
+0x36EBC74B, 0xCF67B2EF, 0xF2960E4B, 0x4894A10F, 0xE873646F, 0x0A031531, 0x84C37BCB, 0xB71BDDE9,
+0x5025DB7F, 0xBB2C1AE6, 0x3D8E15C2, 0xCE4069D1, 0x20E08367, 0x63D4E227, 0x558B2CC4, 0xD414DDC2,
+0x86992167, 0x1F2F0A50, 0x31BDB3F3, 0xD56155FD, 0xE0433F98, 0xFC9B0016, 0x8AB703E1, 0x844496CD,
+0x74AE7752, 0x41236911, 0x78AD2C44, 0xDBBC0F9F, 0xCE33BAA9, 0xB623D1BE, 0x438F5CAA, 0x66FF9278,
+0xD3DF48EB, 0xAB850A5C, 0x8DEAD283, 0xC0FAFA43, 0xAE148BEE, 0x46128620, 0x011F7A8D, 0x5A627D40,
+0x59B2978B, 0xB2776854, 0x8ADDE613, 0x906A1C8F, 0x3E49D803, 0x5E2987E9, 0xE22C72E6, 0x7FF09D9C,
+0x1AE7F679, 0xAF48D4AD, 0x3B89A24B, 0x29AAFD43, 0xF1D9EB35, 0x9981A41D, 0x12F5A4FD, 0xE6D67932,
+0x10B5C923, 0x628A0180, 0xB59A1A1B, 0x6F9B9ED6, 0xC50BC5AD, 0xE2A8CB9B, 0x9AA4E466, 0xD772CB95,
+0x46EA98C2, 0x7F0CEE6D, 0x16C9BA0E, 0x13C03E41, 0xAF8F05F7, 0x729F7C71, 0xF5700B35, 0x2F719994,
+0x84C249A1, 0xD72A6DDE, 0x6C0E6CC9, 0x5D4649F3, 0x9C3FD1FC, 0xBB0C5523, 0x184C2C73, 0x03353980,
+0xF024D214, 0x6525D756, 0xBC6D4A7D, 0x491E6AE7, 0x86E8B3A8, 0xE4B34AE7, 0xD7C68545, 0xDA4964AE,
+0x854A72DA, 0xDCD4F7A9, 0x5AE81543, 0xCECACC71, 0x217CFE34, 0x11388EDB, 0xA0E21FAA, 0x08AA07B5,
+0x115A6B43, 0x3669994A, 0x99A9DF51, 0x93BAD0D1, 0x139BBC25, 0x248B3672, 0x2326B41B, 0x46655143,
+0x9F9B8619, 0xF019E621, 0x37084B7E, 0x257F8B22, 0xFB6F7925, 0x3D2923B2, 0x0E84B6A4, 0x6368B76A,
+0xBD0B58EE, 0xCF09FA59, 0x129AB71D, 0x6CD96476, 0x18328593, 0xCD27E66B, 0x4DC635A5, 0x2DF90260,
+0xDFF66F0A, 0x31ABFAB3, 0xB868A509, 0x2DFF7EF2, 0x0C7AF327, 0x2B6E8AA4, 0x60B498F8, 0xBB02BD28,
+0x6AF9E089, 0x1C71AEFD, 0x19FFB46D, 0xE751C841, 0xA25A0981, 0x396A9985, 0xAE1E48B1, 0x827EB584,
+0x66D2609B, 0xA15F6D20, 0x1BD6BCCA, 0x5D8E7A22, 0xB15A4DDD, 0xE508267A, 0x692C87C8, 0x901B8490,
+0xCB942627, 0xB5C9D752, 0xE91D0857, 0x7AB71F88, 0xE3849C34, 0xE077484B, 0x5D2FF103, 0x276920D5,
+0xE701DAB1, 0x3C640BBE, 0x2581A6A8, 0x4F5E31A5, 0xD8E14AF3, 0x11658FAF, 0xE74EA700, 0x650D6340,
+0x71E4B36D, 0xB0A5FDC3, 0x898E3480, 0xF44F8061, 0x2F3DAAD0, 0xA15CE993, 0xC6E6CCE1, 0xD9C365DE,
+0x693C14D4, 0x9C79D7FB, 0xFFDC17C0, 0xEAEA498C, 0x3F637794, 0x8C77D41B, 0x47241C10, 0x3E429A82,
+0xCCD5060E, 0x4073B211, 0x74A8F670, 0xD6F41B7C, 0x77BE64BC, 0xE649161A, 0x6B3B7D79, 0xABC5BEF0,
+0xBC8DB1A1, 0x0B2E107F, 0x925EF4C1, 0x7CD415C9, 0xD721B699, 0x721F21C9, 0x7905BDDD, 0x530ABAD0,
+0xED9ECE86, 0xE846CDD4, 0xA9907B64, 0x75C0AA43, 0x5AA9853D, 0x403F36A9, 0xC5B441D6, 0x8244F748,
+0x7216CDD3, 0x7AB94F7D, 0x9C9E544B, 0x24D0E984, 0xDC91739E, 0xFF3C00DC, 0x332BC2F6, 0x6DAFF69B,
+0xA3E97440, 0x62A8A431, 0xFE79990E, 0x2DA582FD, 0x31226DD7, 0x0703F6A6, 0xD7659094, 0x818CDC59,
+0xC6D22CC3, 0xFE5A5676, 0xC94ECF25, 0xB844A5EA, 0x48C3CFDF, 0x620EEEB2, 0xF6114F88, 0xF5903793,
+0xDD0FFDCA, 0x7C1C0FCC, 0x31461446, 0x2C7FDC05, 0x1C4A05E7, 0x5F6CC8FD, 0x6309A7DA, 0x54B79F3C,
+0xD5D62AF6, 0xA04BE334, 0xDBA4534F, 0x954B8E89, 0x3D11EBB1, 0x1AFE4D17, 0xB6909AD2, 0x3BBE0628,
+0xB225BB3C, 0x11CA188A, 0xAE8C57D6, 0x40ADAFFF, 0x2DE051CC, 0xA9EDCCA4, 0x9D32571C, 0xC61F5C53,
+0x0C634345, 0x0D1F4227, 0x106A5E0F, 0x06CD7ED4, 0x2765F6B0, 0xFDC4B706, 0x1D4BB490, 0x23C79702,
+0x33914947, 0x1ED9C6CC, 0xB2F8D804, 0x54AE7E8F, 0xF106B572, 0x4FD013FD, 0xD3DC727A, 0x4C7A01A1,
+0x3B6B05A9, 0x28FEEFEB, 0xFF179B1B, 0x70470AC9, 0xECCF3103, 0x8473DCEB, 0x1E6F7807, 0x8F772A92,
+0x49038769, 0x734A8B56, 0x5038D949, 0x400FAD57, 0x65B771E8, 0xCE3670DD, 0xA2430D69, 0x5240EEBB,
+0x6179AF9F, 0xCAEA1E70, 0x3B6C68C8, 0x5A725CE8, 0x8714E639, 0xC6BEC2AA, 0x82A61D3F, 0x23B9BAE4,
+0x9991C07D, 0xCBC13A8A, 0x6802E883, 0x2445269D, 0x0CD3D6B0, 0x9BB8C6FE, 0x5EF170E4, 0x6AA5E979,
+0x8A495869, 0xC0C72567, 0x2FD4C2F2, 0x60AAFEAD, 0x33E75FB9, 0x675DDECF, 0x86FCD135, 0x502CE0B7,
+0x96A3986E, 0xBA67F933, 0xE630D1F5, 0xCFA235FA, 0x7EDF68E9, 0x293DF23D, 0x22A92700, 0x5887FBE4,
+0xCF7DE81B, 0x5B47DB78, 0xB466781F, 0xB53B6D7D, 0x7F20A694, 0xD0FC840D, 0xC3F44DEB, 0x5612E804,
+0x8110B834, 0xBEF2258E, 0xB77879BC, 0x2443C8A9, 0x1E02A117, 0x2E627C0D, 0x1A3E89B7, 0xC1F57A34,
+0x5260B3E3, 0xE082C0B3, 0xD9495E97, 0xAC568297, 0x8F224147, 0x8D9E70B4, 0x5B27037C, 0x05466795,
+0x3A0A5A68, 0x3DEED2DD, 0x9A2BD705, 0x63508E8F, 0xF5656E94, 0xA8FCCE80, 0x7E3D224F, 0x08EC3770,
+0x7DA81D31, 0x603E722D, 0x7902B76B, 0x843DC461, 0x08954999, 0x4055B6BA, 0xE6222606, 0xE84F8A2D,
+0x78AA24EC, 0x45D29E68, 0x8E7EBA8A, 0x0CE8D153, 0xD623B773, 0x6195B391, 0x04644E70, 0xA0C32903,
+0xE95150AE, 0xD3879D1D, 0x8941D289, 0x7B4CD82A, 0x6F744161, 0x94EDF172, 0xFBBC23F9, 0x46F981FA,
+0x3B253C83, 0x3F7F9E8B, 0x75BF8253, 0xDEF55906, 0xCD141804, 0x4406D356, 0xC859B255, 0x8AB1F4B8,
+0xB7286688, 0x41286E86, 0xC3422E38, 0x82614009, 0x49D56228, 0xED6D9C47, 0x859FDBCD, 0x8BAF8CD2,
+0x33A230D6, 0x3007BCEC, 0xA180A9C1, 0x1DECA54E, 0x3743220A, 0x965866B0, 0x40D91D8C, 0x0EA0B638,
+0xF9AF9D78, 0x95744931, 0xD7A46833, 0x95708F48, 0x7F49C182, 0x9DEB38A6, 0xB4EE05A0, 0x0F713617,
+0xEE533A87, 0x93AF601A, 0x2DCB5559, 0xB3B4E3B8, 0x459083AE, 0x4E3F2BD8, 0x2D9A68D9, 0x1CA128D2,
+0xF077C104, 0xA804A6B0, 0x7F0000AE, 0xE162C0D9, 0x53198866, 0x70C79794, 0xCB0B0B7B, 0xD53D2474,
+0x3FE15D97, 0xBF4576CD, 0x102F931A, 0x19CFA02B, 0xF9302AE4, 0x592564D2, 0x3D5F0BBD, 0xF53AE4ED,
+0x24A06816, 0x0ADE4938, 0x09D72995, 0x33D6D603, 0x1918F08B, 0x569C13C8, 0xEF798FBB, 0x1590CD7C,
+0x2C4F54A1, 0x901FFEF1, 0xCD896DDA, 0xCAEF6909, 0xA027CA68, 0x042F4E83, 0xA58FF20D, 0xD0B10F65,
+0x391AE697, 0x9F813122, 0x01F1A42C, 0x24A93722, 0x31D3A45F, 0x8CBDD7EB, 0x0CF07CBD, 0x968B8341,
+0x35470B13, 0x6F60FFC5, 0x54B21AEF, 0xB0E6C013, 0x536E22DB, 0x13170DB3, 0xFD6A74A3, 0xED1BA4D1,
+0x5EAC4EA0, 0xB96DB666, 0xAB43D227, 0x9A15A572, 0xF6225ED0, 0xF6609DC0, 0x96C33BEC, 0xB7D37656,
+0x77DA6396, 0x17A44527, 0xBF9546ED, 0xAF5B4171, 0x13CC7F99, 0xE91761FD, 0xF2D57F25, 0x6991CD34,
+0x0E044658, 0x7471D13D, 0x7D2CD93C, 0x15ADD265, 0x0EA54CD0, 0xB2B32F29, 0xC5BFD452, 0x4F9CD3B8,
+0x9C091898, 0x6B8CB809, 0xF13815E2, 0xE394577E, 0x2AF3CF70, 0x4879B828, 0x0D786E75, 0x37ECFAF5,
+0x4DF0E5D3, 0x5F8AC247, 0xF143E99E, 0x04A3786C, 0xEBD9DA20, 0xF186CAB8, 0x5F05CDD3, 0x3A182DFF,
+0xDC2FB55D, 0x36FED062, 0x3D78FB9D, 0x6D0E21C7, 0xD363B453, 0x48E06C2A, 0xD8AEB75B, 0x72178F24,
+0x47F811A2, 0x7EDEC55D, 0x5B484D1A, 0xA7FB27ED, 0x54BE2A71, 0x26E4089A, 0xD3310BA5, 0xE4C2B092,
+0xE2797357, 0x6F1D9916, 0xCBC62D01, 0xA56ED600, 0x77C9E7D7, 0x415C5B90, 0x7F4F9187, 0x61F3DEE4,
+0x140B1799, 0x0A7F2F58, 0x18076580, 0x0E321CE0, 0x2106FFF8, 0xBC1338BB, 0x04BC947E, 0x47F417A5,
+0x9B449DBE, 0x6584A463, 0xE86F00DD, 0x22CC100C, 0x71AE00AF, 0xD7B55F3F, 0xEDCC836B, 0x2CE2C526,
+0x03ACAACC, 0xA809C6FB, 0xD9C91993, 0x2E9037DB, 0x6A19F735, 0x9E889844, 0xE365E4A3, 0x8B8694B5,
+0x9D1D760F, 0x07F90FB2, 0x4526CDA7, 0x329879AC, 0x0B3E5915, 0x6B72F048, 0x6D60EBAF, 0x873C4FF5,
+0x604406B4, 0x4E77AAC9, 0x07009B9E, 0x2CE958B4, 0x3609C187, 0xB5BD8CCE, 0xE4C35820, 0xCDA96322,
+0x6AC3B37F, 0xA9B42908, 0xEBC0EB91, 0xB4B6A669, 0x2D488559, 0xCEE84753, 0xC1BD4C56, 0xEA1EFF92,
+0xD7417FD4, 0xA820EC88, 0xA42A9472, 0x76B30A34, 0x92E291E6, 0x719F04BB, 0x9A20A462, 0xB8928812,
+0x34EA6B85, 0x51DEF927, 0xC3B6BE3C, 0x4BA51D4A, 0xE8DCC0F8, 0xC6AE6825, 0xA41AA4A6, 0x782B1AD3,
+0x6E8B13D2, 0x8E676052, 0x87D11028, 0x99E648FF, 0xF8149955, 0xB7E6F5D1, 0xE8B22B5D, 0xABEEF2C9,
+0x9410D72E, 0xF7C5397D, 0xBD3556F2, 0xBBC1A2F2, 0xC365DCB3, 0x932A5CD4, 0xB5043A3F, 0x6E84FA01,
+0x2FBD3512, 0x7C4015A5, 0xC4CE9E3A, 0x8BB752E4, 0x3E0A861F, 0x5BFA5A0B, 0x346BB373, 0xE223B1AB,
+0xBB21FE37, 0xCC5B5562, 0x754C2D3F, 0x6EECB23F, 0xC8263380, 0x685B50E9, 0x9CCA39A8, 0xBCE5AFC8,
+0x6DAFF98D, 0x058289CB, 0x37A2CC22, 0x22FE7445, 0x42780F48, 0x14092458, 0x7FF4D893, 0xD4CA40EA,
+0x05896306, 0x2F82E258, 0x8166CFA3, 0x7DE7BC30, 0xA58EB321, 0x3E5B269A, 0x35DFD67C, 0xCEF5D702,
+0x107CE05C, 0xB6DB3C34, 0x795459F4, 0x57B5A2B0, 0x3C17D73D, 0x51E55213, 0x1DB13888, 0xF560307B,
+0x4A07FE3D, 0xB3875338, 0x4A2B9B76, 0xBAECFFB4, 0xA39B8039, 0x7EBE9A33, 0xF225BB72, 0x57879DE0,
+0xA70C5CFD, 0x5E6D6FE0, 0x101E125E, 0xF2AC3F8E, 0x06C1BE42, 0x073F5C2D, 0x9FA46A0D, 0x7DD7EAAF,
+0x5836FA12, 0x3863CF07, 0x8EF3F3AE, 0x0E59FFEC, 0xE2B1746F, 0xAB162E5F, 0x869E2608, 0xC853EE3E,
+0xEFEFF656, 0xF07CDD67, 0xF1641849, 0xDCE2E19C, 0x5B6A4D0D, 0x82CE5F0D, 0x8503131C, 0xC3A2FB1B,
+0x6A28844A, 0x22F4AF66, 0x865295F7, 0x6D101420, 0x99A67BDB, 0x0CBEF948, 0x25C1AC1D, 0xC5D1B967,
+0xABEBBDE9, 0xAA745866, 0x0826D897, 0x7E2D7F6E, 0xCA7657E4, 0xE4AAF70A, 0x61873CFB, 0x50BFC27E,
+0x12EDC14D, 0x6E611429, 0x6A78A7AD, 0x9A1432DC, 0x0E4D7E43, 0xB58FBC5D, 0xDE73902F, 0xD49B773A,
+0xD2E0C43F, 0x883BFE8C, 0x8663852B, 0x1EB9E4FF, 0xDAD9F76C, 0x8A614744, 0x7AE76CA0, 0x9CA68175,
+0x06911C88, 0x1828C099, 0xE2E5CA00, 0x1B9C9305, 0x12C029E5, 0xECE13317, 0x5F3E5903, 0x6092881D,
+0x3C4A8219, 0x8496857B, 0x02186B80, 0xB78FF142, 0x5C836C1F, 0xFC5B3583, 0x030616F9, 0xF955B648,
+0x84FF8BD7, 0x7F7BFF7B, 0x2A642A68, 0x83B5878B, 0x451B1BED, 0x4E83E01D, 0x8AC1CB4B, 0x31F0ABA5,
+0xAA49F312, 0x149F009C, 0xCA5D51C1, 0x6CBAF836, 0xA25FDF62, 0xB980D229, 0x48E4C3A5, 0xD878B255,
+0x160413E5, 0x2A2FF83C, 0xAEDC7239, 0xDD4E4E3D, 0x8C37E6B4, 0x406E38C1, 0xD1D303FF, 0xD16D6A29,
+0xD402CFD1, 0x5627B703, 0x424B258B, 0x33C48E20, 0x93D4F769, 0x19DBA96A, 0xEFC34365, 0xD7694B08,
+0x1714DDDF, 0x686FD56B, 0xE9D15D32, 0x0B4AAE6A, 0x687BE360, 0x2100B7E0, 0xF70B96A7, 0xA3B841A6,
+0x74F8C1F2, 0x85205B7D, 0x919A6485, 0xAA45FEFE, 0x0F82CA07, 0x5DAF56B7, 0x9D19B166, 0xC2797E17,
+0x6B168658, 0x09E30CCF, 0x252860C1, 0xBC03BA4C, 0x48B325F5, 0xEA451FAA, 0x3DE4089C, 0xCE5F0843,
+0xC810A0A1, 0xB616E86D, 0xF614B8CE, 0x8DEF1F40, 0x12FF480C, 0xB807D872, 0xAC24F797, 0xE2CA9605,
+0x48A6ACB4, 0x684D3918, 0x1B83DE3C, 0xEB9016CD, 0x4B2D3C8B, 0x230F8853, 0x47AB540C, 0xD3A19F96,
+0x54FE2A78, 0xD7963CDE, 0xEB2819E4, 0xA271FE18, 0xCCE7484B, 0x6222C006, 0xA6A193C6, 0x74EC8D97,
+0xFAB441F6, 0x08CC29E4, 0xA4323DD5, 0xFDBFB7C7, 0xC73ED2C4, 0x32A38626, 0x6E9FE6FB, 0xA29CB6E6,
+0x6E2E3433, 0x93418C9A, 0x74390802, 0x28D502FE, 0xB2D571CB, 0x0E8B0064, 0x0F6EA60E, 0xE729B89C,
+0x8F67CEFF, 0xAC70B049, 0x47CBEF03, 0x4E6DC69C, 0x575BFF53, 0x110D4024, 0x083551B3, 0x8DD59535,
+0xE59BA5D3, 0xFDE32C13, 0x55CEF427, 0xF6EE8486, 0x2F453D9A, 0xC3C639D9, 0x693DA5CA, 0x48E87399,
+0x01210FBF, 0x3DFF948F, 0xB016FB65, 0x05B41493, 0x1DECD994, 0x293FAADE, 0x817531AD, 0x8C876920,
+0x17C5C760, 0x3E130CC6, 0xCF20AC73, 0x3997C4A8, 0xE10F41A2, 0x2A3B654E, 0x03417DB0, 0x727345A1,
+0xD24707C4, 0x6BDA80C6, 0xC83F5235, 0x62C8326D, 0xBD273CC2, 0x56E397D4, 0x058B2D90, 0x2542477B,
+0xD7675E7E, 0xE890F114, 0xEFAE1541, 0x96913540, 0x19862F97, 0xE9EC1A80, 0x6465D57C, 0x4B08643F,
+0x40058B89, 0x5C89070B, 0x767C31F2, 0x9A575B7D, 0x1271AD46, 0x9C623A4A, 0x00757095, 0xE7867C97,
+0x9295E533, 0xA5D3D01B, 0xA8CAC2B0, 0xFBDDB141, 0x5BAC05D7, 0xD3FE0A50, 0x48182555, 0xA0FF85C4,
+0x9FB7C195, 0x266C1735, 0xAE404F34, 0x9C1A31E5, 0x9E48DEC4, 0xD6FDBA2C, 0xA3F02C9C, 0x8DF7148A,
+0x550284AD, 0xE3CE94A9, 0x6C1EE2DA, 0x75EA1D8F, 0xAD034E3B, 0xF3C289A2, 0x0D462CAA, 0xFC16CCBB,
+0xAB3BEE90, 0x8EAFBD75, 0x91066F07, 0x0EFF9904, 0x4F6327B9, 0x13DF958D, 0x533EF25F, 0x74CDD977,
+0x3035C10A, 0xAB15F19C, 0xBC0A0A77, 0x000000B0, 0x009E0101, 0x7F128D32, 0x9DFA28BC, 0x93A44630,
+0x8B98A8E0, 0xCC2EBD9D, 0x8BA8FA93, 0x18F209FA, 0x9CFB8E34, 0x33F665E4, 0xAECDA521, 0x51585F2C,
+0x04A2DF7E, 0x14DC2531, 0x4E85DD2C, 0x18A4AC2D, 0x9A59AACD, 0x97216D20, 0xD1BC3111, 0x022F8D95,
+0x025C9B8A, 0x5E81D3E2, 0x5E5EEC8A, 0xF290822D, 0x5BED9FF9, 0xE3C2F0D7, 0x684BDEE6, 0xF1BCEF72,
+0xA756FE53, 0x35F0B5AE, 0x048A32AC, 0x8E00A485, 0x6C0E647D, 0xB94DF58A, 0xD1B30920, 0x4108B7D6,
+0xE3CAE939, 0xF7D9F3E9, 0x9550E8D9, 0x0CAFEF32, 0x18203E9E, 0xCEF3C1CD, 0x5537AF29, 0x71FB5723,
+0x4C7F06FE, 0x8BDB510A, 0x380611E8, 0xF7756780, 0x6945FF53, 0x30AB4368, 0xFD9E9738, 0xD8380A5B,
+0x5096B343, 0xCE930FF2, 0xDF116834, 0xF7DDF35D, 0x4180C4E0, 0xF5D6DAF1, 0x27EEFBEC, 0x9006DD55,
+0xF1DFC551, 0x49AA86BC, 0x7470C3B6, 0x157D4F2F, 0x945555AE, 0x17F76633, 0x284DDF7C, 0x2B11C250,
+0xD9CB386D, 0x1BBFE49D, 0xF03926FD, 0x84FB4944, 0x60FD4D49, 0xB8E23842, 0x0328CE6A, 0x3C436EA7,
+0x9ACB3DB7, 0x3829E5F9, 0x665DD3BA, 0x2DB1B61B, 0x5DA6600F, 0xCB354038, 0xBBD29301, 0xF4DED030,
+0x690A6BDE, 0xBEAED483, 0xB11CDDDE, 0x78D267E2, 0xE352CF75, 0x02842EF7, 0x515EB18A, 0xA6AAC9B9,
+0x51128880, 0xC633D1D3, 0xD2E96B9C, 0xEC1D2407, 0xB0105C1B, 0x38EC8D76, 0xC32F2C9F, 0x22A0904A,
+0xB3481ACC, 0xDD6893F4, 0xFFEDCD19, 0x40D7D1A8, 0xDFA1A04B, 0x373D708B, 0xDB0C8B06, 0x045931D0,
+0x17D04646, 0xBD12BBD3, 0x9A45D408, 0x320F60DB, 0x4828478C, 0xCB8DF118, 0xC374ACF3, 0xA76FDCF9,
+0x60A9B930, 0x73FA2B13, 0x5A9531F7, 0xEDC1CEB6, 0xAF552666, 0xB027BB36, 0xED1C0B8A, 0x0954FF9E,
+0x3970EF60, 0xEDC6F35D, 0xB114745D, 0x3CB3B8BD, 0x24B3C22A, 0xEE685CFB, 0x4A6F4A02, 0x6D9FD654,
+0x8486B2CA, 0xDFC1969C, 0xB88F876A, 0xA897B480, 0xE4254609, 0x3B68DD94, 0xFC64BEF7, 0x985C12A2,
+0x5C6C4558, 0x54AA7181, 0xE468D8A7, 0xD1718805, 0xBD5500A8, 0xBC4CD3A1, 0x3ADB5F9C, 0xEA0799B5,
+0x7EAB6152, 0xA06C7DE6, 0xFE7B23C4, 0x38F9781C, 0x75EF2E02, 0x800E7C67, 0x8273A36E, 0xE287A163,
+0xE75BC2E7, 0xA5F9907C, 0xCF419316, 0x20FF934D, 0x54A7D24B, 0x4D599938, 0x44147F13, 0x9F4D95E5,
+0xA41FB383, 0xE049FE1F, 0x84274F0B, 0x20F6AFAA, 0x11686AD2, 0xAED55A8D, 0xFB6F1360, 0x042E5159,
+0xC5EFCC5F, 0xEDF0C955, 0x88782DF5, 0x3CE80BE5, 0xB66FB7C3, 0xFB96CCB0, 0xB7C882A9, 0x63BFED7A,
+0xF16E01F3, 0xA6E3E2F3, 0xD37B438F, 0x8AB39418, 0x17779F77, 0x10855C30, 0x06179CFA, 0xC157DFF7,
+0xFE2CAAEC, 0xEE18B381, 0xBDB0805A, 0x79AA2832, 0xEF524D8A, 0xA79189B0, 0x356E40C8, 0x61E00A72,
+0x2D00F3B6, 0xE51B3745, 0x8D9C4037, 0x29C350CC, 0x80B58E6F, 0x4E240A0D, 0xB7E471B4, 0x2DC90C87,
+0xC3290EFA, 0x4589C2A8, 0x0DEB3234, 0x92C7E622, 0xF2FC0CAD, 0x4E62EB18, 0xBE6C03F1, 0x9A244C4C,
+0x5A14F044, 0x6C7E6102, 0x9D41058A, 0x5FE05017, 0x08A77646, 0xD29537AB, 0xD1249A0C, 0x6CB265C2,
+0x5B3AA10D, 0x89008A67, 0x1F766BB1, 0x2D593EE1, 0xFFBD3396, 0xA2E3D3DA, 0x05958AA6, 0x9589A606,
+0xB9B945A1, 0x6F2BC2B3, 0x98A3D59D, 0x200100B1, 0xC4614151, 0x05B89530, 0xA6CA46DB, 0x4AFC9BD0,
+0x0E24AF1E, 0xB93ED202, 0xF9BA2718, 0x957B5FB8, 0xE1883647, 0xF4DD61CB, 0xD7F7FD37, 0x8F5EB9DF,
+0x9BD10472, 0x7266D02B, 0x65FF50A3, 0x7B55F574, 0xCADED1CC, 0x0F327D35, 0x0CFBBE1F, 0xBF6E8F24,
+0x3978B62E, 0x9F3EDB7C, 0xD14C00F6, 0xD20209C0, 0x8CFDA637, 0x0B5F8711, 0x3CA1FA47, 0x47C25787,
+0x6FBDC836, 0xE31BE156, 0xC0EC92CE, 0x31E46E9C, 0x985AF5E5, 0xE72503AD, 0x48E931BD, 0xCECAF68D,
+0x9DD39A38, 0x70328AEC, 0x86F4DEBF, 0x71DAB1A5, 0x7BB04A03, 0x2A6FBD75, 0x58E14EB2, 0xEE25F24E,
+0x04553D98, 0x1702A624, 0xB63F6F86, 0xB447F97D, 0xC25EDD4A, 0x5FF79469, 0x5C788528, 0xB340E6D5,
+0x91C27A3A, 0x1B09B1D0, 0xFD29AC6D, 0x238626F9, 0x4583C653, 0x39AB97F3, 0x6844DE4E, 0xD7B72312,
+0xFCDD6554, 0x598470B2, 0x4AD3DDDD, 0x165A54B0, 0x5A14A712, 0x9C34F5F2, 0xE2F3DFBF, 0x0A4164AC,
+0x83009C72, 0xFEE29E7E, 0x3B1B06DE, 0x60933CF8, 0x12546742, 0xA1479868, 0x3552A8F3, 0x324A40BC,
+0x877357BC, 0xFCE90BEA, 0x24E91919, 0xE4B7C954, 0x477DDF67, 0x50F71003, 0x854F9245, 0xB374B82C,
+0xAA89AEC3, 0xF986B3CB, 0x06CB8DF3, 0xF015DFE8, 0xE0B2A5D3, 0x6E859479, 0x88330EDB, 0x2DC4EC9C,
+0x4E81B295, 0xECE3D5C7, 0xC305953F, 0x1273DA9F, 0x346CE02C, 0x82CCC896, 0x45C3A1B0, 0xDA3F121A,
+0x2BDF3F2B, 0xDF76344E, 0x24F84CF4, 0x04F97C21, 0x65F6228D, 0x615A3D68, 0x7A31790D, 0x133FB459,
+0xB16FB5CB, 0xDE176C6C, 0xCEC98003, 0x9D73FDA5, 0x4662D877, 0xB44B64EE, 0x3DB2A238, 0xFDB2D32A,
+0xFE807AA7, 0x5A0CF6B9, 0xE980EC3C, 0xBAA4C105, 0x8B4E04E4, 0x7D2034E3, 0x72F19A4C, 0xC67D38F2,
+0x4DA98298, 0x4A87E39E, 0xE36C2D9A, 0x88BE2641, 0xF80D5123, 0xB5520862, 0xD0A30CAB, 0x66EA8EA4,
+0xD1DC51A5, 0x1E285B76, 0x4FBA6CBC, 0xF5184CC0, 0xC5DBC9A7, 0x2DFF9B93, 0x673A2548, 0x43AE936E,
+0x35667B59, 0xAB844AF1, 0x459E7D12, 0xC8327855, 0xF91112FA, 0xEC66327F, 0xDCA8858B, 0x2F46B84B,
+0x34371E06, 0x34B2D67C, 0x4AFA157F, 0x7BB7FE85, 0xDFC8C8DD, 0x96319D99, 0xE2EDC6CE, 0x9BB49ECC,
+0xCA18E558, 0x0BF0CA1C, 0xCE29B4AC, 0x6712D5A1, 0xE6817869, 0xC0443C8B, 0xC3D1F004, 0x3242FEC8,
+0xDFC75451, 0x5792AEEA, 0x0754E909, 0x0C95C9CA, 0xBC7C699B, 0x3B8764B3, 0xB1EAD364, 0x39BD47E9,
+0x6216D325, 0xA64EF7C4, 0xA07B05C9, 0x2D830EAA, 0xC3F32544, 0x98555069, 0x959EF177, 0x00000080,
+0x009E0101, 0x7F128F32, 0x0E4966A6, 0x0EF45177, 0x68F3EE46, 0xBA0781C7, 0x6B34730B, 0x0A96FA15,
+0x236E9DB9, 0xD363AF82, 0xD38957D7, 0xC8C79AE3, 0xC40D37A4, 0x854BED3A, 0xA7578FC7, 0xE90BAB4E,
+0xEEBF1E77, 0x65EB9E6C, 0x9FCA0245, 0xCDF3730B, 0xD474F245, 0xAD8F6402, 0xD3C8A908, 0xCF22A99D,
+0x834D0EB0, 0x869FF2B7, 0xFA37CE11, 0x60116D53, 0xE110C8C7, 0x006A46D4, 0xA07B240F, 0x72B04E19,
+0xD98D7E0A, 0x1F39DE68, 0x0712010C, 0x0E348DDA, 0x4C41A957, 0xD4F941B0, 0xFCD62E35, 0x43DC8719,
+0xDE045900, 0xE3501ED8, 0xB226BAA0, 0x13BDA7B8, 0x2DFB6F7C, 0xD8AAE2B7, 0x1F3ECDF2, 0x181E2D66,
+0x42C2970F, 0x2E97A3AA, 0xC8B90E7A, 0x5396E2FA, 0xCFE2A31E, 0x89FDBDCC, 0xF11C7EE2, 0x5ECF038B,
+0xB1CABFD2, 0xB460BC83, 0x4FAF836A, 0xD6786F16, 0xD905B24B, 0x94C86802, 0x4DDE9CB4, 0x76F4897A,
+0x423A3EC0, 0xE8470618, 0xC70EF7E6, 0xE74C9E61, 0x1B4805A5, 0x924BD179, 0xEA05AEF5, 0xB28D3154,
+0x8FB8BB55, 0x8A925EB7, 0x52438040, 0xE7D003A6, 0x86AF316F, 0x49D9916E, 0x7DCBBC60, 0x8CBA800C,
+0x53C2BF25, 0xA7B248D7, 0xB0B4B384, 0x185A969E, 0xD476D912, 0x388425D6, 0x25D5EB8E, 0xC4892324,
+0xCFCD3B2C, 0xFD61547D, 0x9D118606, 0x74589B06, 0xCEE484AA, 0xB57D1ED8, 0x7FB976C7, 0xFA4ABD63,
+0x28000359, 0x0D7998DD, 0xE5031C9E, 0x060A0815, 0x6CE5EA11, 0xFA07B7DA, 0xDCF8B3D2, 0x350953A4,
+0x08A5C13D, 0x0CE8C105, 0x384997B3, 0xCE7E387B, 0x6D40FE33, 0x41FC0C44, 0x6970A691, 0xB4CCF491,
+0xA7BAEB2F, 0x6AF171EC, 0xD775A267, 0xEC6B406F, 0xFB4DC1ED, 0x666C573F, 0x5DB9A4C8, 0xD2BE99D1,
+0x33D4B593, 0xAD142E27, 0x16191D19, 0xB6E655DF, 0x7D3336D0, 0x71A1F56D, 0x878EF0C2, 0xD95BCE43,
+0xB0E34881, 0x27699E61, 0x71737306, 0x9C5FB8B7, 0xF84CEF43, 0xABFA9428, 0xCC41C6C0, 0x605FBD3D,
+0xD82C68F9, 0x228BE804, 0xA0420877, 0x6AF86414, 0x1C4C450D, 0x3F629FD2, 0x205DA2BE, 0x17CF552D,
+0x985F5FEA, 0x761C8CCA, 0x167BA7D4, 0xD988353E, 0x24DE53DA, 0xEB8B7629, 0xF30B814F, 0x1FA0E362,
+0x162EEC57, 0xB2C06407, 0xD9E234DF, 0x5964F4AB, 0x301FB4A5, 0x3365CEDF, 0x4075E7A1, 0x9F802B47,
+0xA72462D5, 0xF44202C7, 0x3C8C6CB0, 0x8B93FE27, 0x441CC847, 0x3D6A593F, 0xC3A0F190, 0x3CDADDBC,
+0x5860EF4F, 0x01B9024D, 0x4169911C, 0xC07AD237, 0x6BFCFC9A, 0x9374200E, 0x94C6A23D, 0x374BC9B4,
+0x51D4B5DB, 0xB8AC952C, 0x4AC51254, 0xEB301A49, 0xEC130B43, 0x0A0BFE8B, 0xB17F414E, 0xD2B5416D,
+0x37A26DF4, 0xD3022C06, 0x43F82072, 0x23F8786B, 0x06ADECBB, 0x4CF73ADD, 0xC83D58C6, 0x51FF2B64,
+0x94400D2E, 0xFD5DBC90, 0xA607E52C, 0x45524536, 0x09070658, 0x48425DDE, 0xD453B8F0, 0x9F4DDA12,
+0xD64E7A90, 0x8A5C5B69, 0xB3917D4E, 0x88545F42, 0xE7FD3244, 0xF9E41DC0, 0x3E86D170, 0x3D77F8A9,
+0x1CFC6B8E, 0xC564AD95, 0x3C9C3497, 0x41B3EE3B, 0x63D323B3, 0xF5D293EB, 0xF515D950, 0xBEC7291E,
+0x2E02993C, 0x27502885, 0x186BCA2D, 0x6BE476CE, 0xF20E853D, 0xAF9C23F2, 0xE02D12B5, 0xCF8A18C1,
+0x1C817164, 0xB22FF27E, 0xFEB8B73F, 0x9685DAFB, 0x846EA331, 0xE7664459, 0x75FD5F31, 0x330B2DF2,
+0xB33794A5, 0x5AC2725C, 0x37217A5B, 0x434EB72A, 0xDD0AAA02, 0xC9C7B41B, 0x5EB4057B, 0xE69499BC,
+0x75F47040, 0xAC19E126, 0x57B2552F, 0x2E153F37, 0xBB661DB6, 0xDEB1BB1F, 0x75153E0F, 0x93987701,
+0x217397DF, 0x38BB9973, 0x0AA519DA, 0x0ED20B41, 0x7B3BBB52, 0xB56745ED, 0xD06107C7, 0xEEA3AE55,
+0x80365FE5, 0x904DF093, 0x4713BF16, 0x51B3DE21, 0x9C9F2F9F, 0x3EE2AB8E, 0xC1DD94C9, 0x5DD0971E,
+0x28372398, 0x44E0506E, 0xEEBD4689, 0xA901C15F, 0x44EE64B5, 0xA7C403BA, 0xD185CC5C, 0x415085ED,
+0xA28CBDAD, 0xBF809E7B, 0x7F8D3214, 0x301ACBDD, 0xFE475D51, 0x72B8CBD1, 0x6B833894, 0x929315CD,
+0x6DD3EEF1, 0xD5929013, 0xAC518E28, 0x476EA857, 0x65CC2047, 0x47DD0605, 0x59F7D659, 0xF2AFA956,
+0x54337E62, 0x224A5A3B, 0xEAC9B6AA, 0xE6850C2E, 0xB91C6033, 0x4F7BC7EB, 0x14CB1A81, 0xBA9B7101,
+0x39A7E8B3, 0x0E320907, 0x4468F801, 0x67D926A3, 0xD0EC24A2, 0x857F305D, 0x2F616A52, 0xE2722CDD,
+0xC2BC5285, 0xAE421728, 0x9A8642E8, 0x6B1B35F4, 0xA83AC982, 0x3E7299C7, 0x4DE35704, 0xBD6E7BD0,
+0x24A52289, 0xA41BED19, 0xFEC8C6CF, 0xE1D86FB3, 0xE4006706, 0x59B4A68B, 0x4FA6E1D5, 0x15452E66,
+0x23A2B913, 0xF7A50B68, 0x013511AB, 0xC6AD8005, 0xE5331AF8, 0x453D8D78, 0xC8AA81A6, 0xEE59721F,
+0x00F92CDE, 0xCE8172ED, 0x44FE9752, 0x9B99D94D, 0xF3BFF56E, 0x2701A60B, 0xAE0DFEE8, 0x2695AB6B,
+0x56DEC5D6, 0xA6FF84AE, 0xF592B323, 0x6828C1FD, 0xF932BD78, 0xD4B85103, 0xAD38BFDB, 0x14CE4F05,
+0x7ACA13E0, 0xD8D2B89F, 0x3140CC95, 0x2DF4F738, 0x3284868A, 0xB65CC5E9, 0x211861EA, 0x615BA975,
+0x25400083, 0x4F30082E, 0x505CD98B, 0x768B8684, 0x4CFD7623, 0xC710E5FE, 0x50B0B808, 0x166ACE01,
+0x7650974B, 0x8AF614F2, 0x0A90A102, 0x59C1F7E8, 0x7B8094DC, 0x12FE7D65, 0xD518B3A6, 0x679D4D5E,
+0xCB995ADA, 0xCE27897A, 0xDE335CE7, 0x5C429DFC, 0x0FA5E28E, 0x10FFBBEC, 0x6D535D2F, 0xFE3CA554,
+0x4576F64E, 0xFCA56897, 0x0E70519A, 0x1B2AB340, 0xCBD4B97A, 0x9E0C3176, 0x4F1EF12C, 0xA2FB9979,
+0x248B58BA, 0x45562107, 0xBB6AB92F, 0x9ACFF29C, 0x85525A7E, 0xFEB51280, 0x25709B32, 0x31FA835F,
+0x33A30BC5, 0x5BAA4B49, 0x43EB3B98, 0x56A05E70, 0x01627F1A, 0xD08FEAE3, 0xE85DF2DD, 0x3ACC4B69,
+0x1E8C721E, 0x20F16D8F, 0xF563243C, 0xB4AF9C8F, 0xFD0CAEE2, 0x2725FF19, 0xDC5D5942, 0x83E547C5,
+0x6E347712, 0xB588DACA, 0xE2088356, 0x6623EC1B, 0x4689117C, 0x11F96F75, 0x8D3E09CC, 0x5CF2173D,
+0x9005C587, 0x287474E1, 0xEDD917D2, 0xE19A1779, 0xFA949CCB, 0xF62F92B3, 0x83A2E2ED, 0x6AD48788,
+0x7E401701, 0xDA8E43C5, 0xE0C1B9A6, 0xCBFCEC32, 0x46EAD50D, 0x91F875AC, 0x9F71CCC2, 0x3684FEF3,
+0x00C0054E, 0x21010000, 0xA50C8088, 0xE431E2BF, 0xAE688000, 0xD8C4C64F, 0xB5F9E3DB, 0x13F23127,
+0xA919CF00, 0x12ACD0E2, 0x7033F63A, 0x7F0920ED, 0x48EAFD79, 0x966F6614, 0x95F7E47C, 0x7064D4A7,
+0x4355D516, 0x279166A0, 0xE0C3E144, 0x425E8BB5, 0x6A710C59, 0x15F1607A, 0x65E64E45, 0x2769A066,
+0x5C2E205F, 0xD709E221, 0xFFFFFF35, 0xB5EF0367, 0x9F8779E4, 0x0C44E8C6, 0xBD1B2794, 0x68E1FA81,
+0xF782BEA0, 0x3B4F8D1D, 0xFBBCA4E8, 0x30AF3521, 0x89EE8CDC, 0x040CED68, 0x1021372D, 0x3B90885D,
+0x2D3C6F80, 0x7935BE51, 0xFD4F596A, 0x152F6AEA, 0x1EECA330, 0xB2133358, 0x04C8E69C, 0x573BA115,
+0x2D64DCD4, 0xC3823E94, 0xC4FD4921, 0x0EEB3415, 0x0DB3DA59, 0xA5AEAE9F, 0xF5E22B59, 0x1D8F89B9,
+0xDAB9B4AB, 0x6DBC3A79, 0x2B5C6529, 0x77870335, 0x3C749EF2, 0x1CEF4B5B, 0x653F0862, 0x3BB09ACF,
+0x3A871AA9, 0xC1081CED, 0xF536E5C4, 0xB6A3F01B, 0xB0DF083E, 0x0B47B9EC, 0xB48D77BA, 0xCFEC495A,
+0xAF5F1615, 0x53A907B5, 0x791E789C, 0xEFB36DE6, 0x9718CB0B, 0xB1CAF1E4, 0xFC906581, 0xC21162BB,
+0x7728CA9F, 0x897BEFCA, 0x75C329E2, 0x5DC603A7, 0x54CF4E0F, 0xC444E269, 0x19D37EB0, 0x47292AB0,
+0x7C11E1C7, 0xA5A13DF2, 0x78A8342C, 0xC3F6E26E, 0xECFBE92F, 0x54A8B076, 0xD657659C, 0x89C35D8C,
+0x0D0D6988, 0x1EDEE3C1, 0xD23B45F4, 0x92E5CBB4, 0x2FCA147A, 0x17B90D99, 0x973BE055, 0xF840759A,
+0xB8E10E8C, 0x9CA8E80A, 0xEDB66C99, 0x1DD240DB, 0x0920A3CB, 0xB50D721C, 0x84C09205, 0x2E46D457,
+0xCF7771AB, 0x22F933DB, 0xA3AD33F4, 0xF18E60F6, 0x67C06846, 0x118B9F17, 0x0D8F8C63, 0xBBF07D28,
+0x1B809A3B, 0xB683C027, 0x9BAA3861, 0xB5DBEAEE, 0x2F8AF572, 0xDC95E3A1, 0x1F50DF16, 0x8DED6292,
+0x943F39C9, 0x29A4C57F, 0x2F29566C, 0xEBEF6F65, 0x3D37E6C7, 0x90E47E49, 0xFBE21C3D, 0xD19AC831,
+0xE21828CE, 0x0F31E71F, 0xD9FD6759, 0x8B0C6D7D, 0x3E29869D, 0x203EF609, 0x54465BEE, 0x1AD563BC,
+0x8254C5B5, 0xC712FC7B, 0x8A48370E, 0x63704F29, 0x74F6F0B4, 0xF3E85734, 0xE027CA3C, 0x3F4A55FA,
+0x143E1C64, 0x15FCEDCB, 0xCD32E6FF, 0x7FD1B16F, 0x09047F09, 0x8E42880A, 0xEEEAC957, 0x1759D75A,
+0x2BEED0AF, 0x02180F7C, 0x5B1E6250, 0xDC2C78CF, 0xF36FE76C, 0x516E5345, 0x97215038, 0xD8EEB7F1,
+0x0006A35D, 0xF9967A14, 0x9C09D784, 0x12B866BF, 0xB79ADCEF, 0x1C25E335, 0x66FBBC37, 0x84CB8CDF,
+0xF5824FA6, 0x36D59341, 0x5EF3886D, 0x96D6BCE4, 0xF11D64D5, 0xB5E234F3, 0x1BED0A5E, 0x8049F92B,
+0x00764028, 0x25335FA3, 0x1BFCBE47, 0xE588F032, 0x16C056C9, 0x90E4BA64, 0x4A43C32A, 0x18D13B5C,
+0x082F96F1, 0x5DA6225D, 0xC494DF19, 0xFDA55BA1, 0xB504D963, 0x34AC949D, 0xD6152C55, 0x3A7649E4,
+0x1966B465, 0xC2080445, 0xB1F5C0C6, 0x5F2B8281, 0x5B1D5BA9, 0xCBE6B95B, 0xCBABB462, 0x5F231C4F,
+0xF900D467, 0xE9F76D53, 0x5431994E, 0xE9032325, 0x4D8F3112, 0x5BFA52AF, 0xA9AD6406, 0x58788DC7,
+0x24268D68, 0x0FFC3EA3, 0x5D7AAABB, 0xB5D91441, 0xFCC1DCFE, 0x00F75A5F, 0xD0915044, 0x27744676,
+0xDF60E538, 0x2F5C037F, 0xB884E7F4, 0xC6AF8EB3, 0x5BFE520E, 0xA4697E76, 0x9E0CD538, 0x7518C530,
+0x96F31E50, 0x4D8D309E, 0xA8A2ECBB, 0x61C07CB9, 0xD5232247, 0x1EDE2E10, 0x44A88656, 0x16587AB9,
+0xABC803DE, 0x44785044, 0x8CFBD8BC, 0xC626B3D9, 0xC07594CF, 0x9E28AEC5, 0xF4916D8B, 0xEE179AB2,
+0x0A3FE16F, 0xBDF8BE3A, 0xC044F80C, 0x50749D6C, 0x1D61D2B9, 0xB751A683, 0x508E6487, 0x1DA21854,
+0xBDA49D55, 0x0E1B96A4, 0xC719CE0E, 0x2F48CBB5, 0x3EDD071A, 0xBEE2DADB, 0x2341C73E, 0x8024FE0A,
+0xCD30577C, 0x496D7C2B, 0xF6C96819, 0xBEBD4D82, 0x962344C3, 0x78597A25, 0xD741CE70, 0xE310A42A,
+0x314771DA, 0xD31873D6, 0xF2522579, 0x9FAB5012, 0xD92E4CB5, 0x925E5BDD, 0x769A88C3, 0x64617765,
+0x44093EE4, 0x7C4E8312, 0x02657529, 0xB97E4574, 0xFE0515B4, 0xD86DA15A, 0x495DB64A, 0xB324A4E8,
+0x5FFFCE60, 0x6B44409D, 0xE8295FED, 0x7F054EF9, 0xE1578C66, 0x5D24F375, 0xF9993CA5, 0x5EDCC302,
+0x3B3873ED, 0xD9F57468, 0x3CB74324, 0x5B3B5ADB, 0xF6818552, 0xD8D67A38, 0xDA07EA8A, 0x1D403E73,
+0x7768B53D, 0xFFFF6EAD, 0x5FC168F9, 0xEF7464F3, 0xFA0FC080, 0x31A4CEBC, 0xB8C575FC, 0x69023B4E,
+0x5E510AC9, 0xDCBB1397, 0x32BA1A56, 0xA2630C2B, 0x5246A243, 0xBD00FFA1, 0x5D64BFD1, 0xDE0BBA94,
+0xC0EA8866, 0xA8BB56B4, 0xBCB1A32E, 0x83089062, 0x274C4BEC, 0x95732554, 0xA9BFC9DB, 0x5B894EEA,
+0x61E1824B, 0x676EAD13, 0x3E4E73F7, 0xCF992513, 0x48322D58, 0x64DC5630, 0x8D6244D5, 0x9BB9EE47,
+0x1BB338F2, 0xCAEEAF2D, 0x09FAA5E7, 0xB3DA0A9C, 0x96EBA40F, 0xAA7178C3, 0x54E5A184, 0xF59A4336,
+0x95C3D1BE, 0x6F3A5CAC, 0x29158461, 0x6995E0F9, 0xA6308A94, 0x3F7B06A9, 0x1766B07B, 0x957A479F,
+0x8D25CF9E, 0x7D4B25BC, 0xE6BA8441, 0xB8AAAC62, 0x9DE58AF4, 0xB9D4F3BF, 0x0E2937F7, 0x3C545F90,
+0x92BEF57B, 0x8D5C1C4C, 0x0ED2BA19, 0xBA8DF903, 0xE9D240C5, 0x39778D2C, 0xAA16C9B9, 0xCBBD7655,
+0x799EF85F, 0x14CD83C9, 0xB745A5F3, 0x2B25A6B6, 0x2CB67473, 0x1C078DB0, 0x567DADE6, 0x89803D33,
+0x6D14501E, 0x1D78600B, 0x48A7A07F, 0x534BD3B0, 0x766EE1C4, 0x770E3445, 0x92F31467, 0xB5D52644,
+0x862AC2EF, 0x9484A208, 0xB657219B, 0xC0F0EE64, 0x2629716C, 0xBD77B9FD, 0x8B40ECE8, 0x3855F01E,
+0x6929946B, 0x66B54DB0, 0xE79A41A1, 0xE0826192, 0xB2D03AF5, 0x35D4D097, 0xE7204CFA, 0x1D75AC31,
+0x0B34FE94, 0x1AFD6E82, 0x34EA457E, 0x076B50AD, 0x705DBC38, 0xB22A6885, 0x7038B9AB, 0x258FD9AF,
+0x32ECD3A7, 0x17E4BB2A, 0x410E4C7A, 0x1F1BDC5B, 0x550710FF, 0xF2D6E3F4, 0xE7164A1B, 0x2FCE8951,
+0xACA81D31, 0xC1758734, 0xFAE778CD, 0xB6D14928, 0xD7D22F12, 0xED62FF5E, 0xCA2191A1, 0xEB5DEFF7,
+0x56F28AB7, 0x9681B033, 0x625E8EAD, 0xDF4577A8, 0x66FC4FFD, 0x0E41A6D4, 0xCDB4DA40, 0x272DAB81,
+0x630213E5, 0xF30E32C6, 0x7CDB39A7, 0x21821E8C, 0xE30BB64D, 0x125B8E8C, 0x00A32B09, 0x6986ECF2,
+0x74C81663, 0xA00CF8EE, 0x7B6D5EDF, 0x5F5F9C02, 0xA9C0C36E, 0xBFC84416, 0xFEA93EDF, 0xD02D0CFD,
+0xD9C45D51, 0xED899051, 0xEEFAE72C, 0x410A6C4B, 0xA031FA04, 0x008472F8, 0xFBB35CF5, 0xE73D0CF6,
+0x04CFB927, 0x0785348E, 0x49D69139, 0x19D3C3C4, 0xA4B58293, 0xF7A5614B, 0x24BE8F38, 0xAE8AABDC,
+0xC3D249C8, 0xADB14118, 0xB210D5FF, 0x6EF62082, 0xCD905657, 0x7F3AB1AA, 0x5721B83D, 0x7744BA62,
+0x27CCA962, 0x282DE030, 0x7CA1CC55, 0xEE9D8280, 0x5F136B19, 0x71D60FEA, 0x2EA4C47D, 0xBD36946E,
+0xA966C960, 0x7269B2BE, 0xCA8243B7, 0x3167AC77, 0x8C5BCD28, 0x25EFE2D5, 0x85C345A2, 0x5296140E,
+0x5770C8D7, 0xA00F0048, 0xE5EB397D, 0xF18513C4, 0x7E459D4B, 0xB7665000, 0x43299053, 0xD6FFA918,
+0x3DAEEDF9, 0xB03A29B4, 0x271E44D7, 0x05D2486D, 0xE83CE821, 0xE1DE23CE, 0xB56E31D4, 0x9D254D7D,
+0x93448455, 0xD435BF12, 0x9D60B323, 0x4D55ADE1, 0x334E8FBF, 0x69574145, 0x7C6CD0F0, 0x43B8E671,
+0x12F600EE, 0xE7FC2534, 0xF293F725, 0x06A9F558, 0xD6D381B9, 0x5885BB18, 0x1EF92D93, 0x862FFA21,
+0xBC305DA1, 0x225A771C, 0xACC40CE6, 0xC71198E3, 0x79DF162E, 0xF40E6836, 0xA2154C3D, 0x51FCB25C,
+0xC70AAA3C, 0x18917356, 0xB3F444BA, 0x78993C47, 0x2D443692, 0xFC26A15E, 0xCEFE16C5, 0x4646EFA2,
+0x0701704A, 0x377B5612, 0x299ABA93, 0x6EFE1414, 0x7CDD03B9, 0x839DB122, 0x4A06207E, 0x8793FAB1,
+0x9F4D4936, 0xF6121694, 0x227D1D7F, 0x87129252, 0x356184E2, 0xD0178C24, 0x789F5A68, 0xA2B99CCA,
+0xD3D73587, 0x7B735F4E, 0x7B6EC773, 0x6060F294, 0xDC818340, 0x4DA8EA30, 0xA631324F, 0x4DA60825,
+0x849A7B9A, 0xF484E9AB, 0xB01BD853, 0xCA7DF129, 0x84A2AC1D, 0xFF5BB596, 0x1DF28E33, 0x685E90D0,
+0x5687D29E, 0xA864209C, 0xE866F2F2, 0xB4595B2A, 0xB006F1C3, 0xD697C697, 0xC8B929F2, 0x715FF21F,
+0x082E901E, 0x0B469E48, 0x87BB7A62, 0xF6F89878, 0x0E174678, 0xC5BFB243, 0xC2097D9C, 0x90F3ECEC,
+0x55203BE4, 0xE69917F1, 0x4014F157, 0x08E0FE3D, 0xE8038A2F, 0x9DA76C1C, 0x1F4AC980, 0x4C21F16F,
+0x67CEF59A, 0x5DE49A0A, 0xEF34AE66, 0x12F30053, 0x9CE29675, 0x17C6B811, 0x99509E4B, 0x783FEAC7,
+0xA234ECE8, 0xD12E7671, 0x9322035D, 0xD36240B4, 0x7FBE8004, 0x89491F7A, 0xF4C08F36, 0x69CB4A5E,
+0x9C817D2B, 0x99B71833, 0x8B979A39, 0x1FB59E70, 0x17B8ECD7, 0x0716B651, 0x31C57670, 0xD05788BD,
+0xA7E73BA4, 0x75763E9F, 0xB9C8515F, 0x0393DE21, 0x01CF46C3, 0x182451E3, 0x72E16797, 0x67E37E9B,
+0xE6740A34, 0xF06C57C2, 0x28D30AFF, 0xDE495D82, 0x1CB67D38, 0xC4959643, 0x0167A7D9, 0x416D0AE9,
+0xACDEE5F3, 0x54B05788, 0x744B9F88, 0x8BC96711, 0x80878463, 0x61E948E3, 0x2B96080C, 0x7A42C9CB,
+0xA114A26A, 0x450F2E1D, 0x5411F604, 0x5E5E9D46, 0x8294B4A1, 0xD6515932, 0x903EB1A1, 0x523A2291,
+0x073249F3, 0x32953466, 0x291997FE, 0xF5DBA00C, 0xB96AA8B1, 0x51075D26, 0xA434C9D4, 0xE321D701,
+0xF04D87ED, 0xE21BA485, 0xAAF605B7, 0x39F92136, 0xAF768B8A, 0x0DC29EF6, 0x556229B0, 0x7826E4B1,
+0xB3EB7EDF, 0xA302C06A, 0xDF466855, 0xE967A948, 0x035ABFFD, 0xD68B5E7E, 0x7D03CD65, 0xAAF52CA8,
+0xE3E6F802, 0xBAE3CCCA, 0x04D078E1, 0xC2AFB22C, 0xB47E4BF3, 0xF1B47480, 0x3E14FDEB, 0x7B168E22,
+0xE634E774, 0x5B068553, 0x8168B1E6, 0xF761BB14, 0xB354FF25, 0xA8A162F6, 0x03093416, 0x10645CF2,
+0xF7B24834, 0x246D1621, 0xB5EEF585, 0xD2B6B7F1, 0x296BED03, 0xA9026538, 0x62B2F4C1, 0x6542AFF0,
+0x68F2939D, 0x1B20D23B, 0x8179833F, 0xB1F4640D, 0x668D7EE2, 0xAB62F3EA, 0xAF87F194, 0x4B04C784,
+0x028FE3D7, 0x56060221, 0x08C5E76D, 0x66EA9FAB, 0x0E188EB2, 0xFAC7BAA5, 0x3A462678, 0x41579238,
+0xFBACCB7B, 0x0CBEB3DB, 0x196E0D9B, 0xDF6137FA, 0xDC797434, 0x87440A93, 0x196A8C36, 0x1B3633B7,
+0x3AD46647, 0x8C4CEBCC, 0xA33DC473, 0xFF0EE130, 0xE956649D, 0x91033A9A, 0x138263C8, 0xAC570975,
+0x339498B9, 0x9ABBD9EC, 0xF545D23B, 0xE59E2566, 0x46ED16D4, 0xDE0740C9, 0xFE620E5A, 0x89DE99A3,
+0x6E625053, 0x633DB512, 0x331B22DF, 0x7649C021, 0xB987EB50, 0xC72A1CE5, 0x44EE89B2, 0x117923EA,
+0x6FBEC134, 0x8CFD7640, 0x8099D312, 0x7984F176, 0xBBAB497F, 0xF10C2B71, 0xD0F4430F, 0x37CC1F0A,
+0x2706DA11, 0xA290BC73, 0x011025AC, 0xC99A4380, 0x06154661, 0x2BD2D24F, 0x07A16199, 0x1690C452,
+0xBE1F71CD, 0xA9CE94CD, 0x86FB0E23, 0x03060444, 0x1EFA725F, 0xBF564F3C, 0xB8C1B54A, 0xBAFC1F66,
+0x7B8597FB, 0x38AD6512, 0xCA6342F8, 0x0BC3AEC5, 0x42CD97AE, 0x00B594AD, 0x5D9AD425, 0x7DBEAB69,
+0xA93B22AC, 0x355E9A35, 0x049002E1, 0x991B4DE7, 0xA6AC84E1, 0x5B1390FE, 0xF0FB6BA2, 0x668E05DB,
+0x7E56CAB5, 0xBEF9DDD2, 0x5E44F1E9, 0x9086B8E3, 0x109908A2, 0xD593DC4A, 0x2FEDADA5, 0xDA79FC1A,
+0xB2C24A7C, 0xDD5EC0F5, 0xE9DC98B3, 0x343F1CF6, 0x4B9FB07C, 0xE3958A1B, 0x37E20EA4, 0xCC05A04D,
+0xFC530BB4, 0x13A4066E, 0x68E07A0B, 0x8A41B702, 0xB9EDFF10, 0xBC898C21, 0x9F656453, 0x36EFAF8F,
+0x39D1FBF2, 0xBC2A3580, 0xD2A81FFA, 0xB9B20ED8, 0x96ADC102, 0xF254173C, 0x1D59B543, 0x510C91A1,
+0x475D5630, 0x39C95B9B, 0xBCD51C3E, 0x293D4AC5, 0x32A95E8D, 0x2F5C7F54, 0x5E0933B4, 0x9DA35764,
+0x2666E4DF, 0xB5DDACAC, 0x9A2DF297, 0x66089ACA, 0xE0F3DA2E, 0xCB031F3F, 0x4FF545A8, 0xBA63FA30,
+0xD850B8B9, 0x11CCBEB4, 0x4B3F5D5D, 0x5D8854C7, 0xB71924BD, 0x1D2118F0, 0xC592510D, 0x4FB00F7E,
+0xC59017FF, 0xBE48D094, 0x462C02BF, 0x8370875F, 0xB0790C25, 0xFE8C7C34, 0x6DBA40C8, 0x406A42DC,
+0x5C19D734, 0x7652EA35, 0xA085FA48, 0x5CD8EBC3, 0x4BD70C99, 0x51DD9561, 0x5219F138, 0x671A1ACC,
+0xA5DD3AF1, 0x2CE9DA3A, 0x4D489506, 0x607CD652, 0xF2A7051D, 0x32C64B1F, 0x8D96AA1E, 0xFF3C44D3,
+0x0CA34E75, 0x13C8014F, 0x642F5F02, 0xE6B20C54, 0x51A710BB, 0x11169CCF, 0x27969040, 0x6D10BF43,
+0xB2BBD7B2, 0x1DBA7996, 0x5646AEBC, 0x4A8E4C94, 0x7CAB36DD, 0x2F5C2B2E, 0x14735E95, 0xD9D73E7B,
+0x5ED462DB, 0xAEED8032, 0x00346020, 0x3923D8CA, 0xEF45187E, 0x04461A5A, 0x40025B98, 0x928470EC,
+0x3E1498CF, 0x25C8A09D, 0x3B20F241, 0xEC132CDA, 0x044A1FD4, 0xEDA3A75C, 0xBC3AAD10, 0x1A404DDC,
+0x511FD839, 0xA7DB7359, 0xBC85552F, 0x5C618674, 0xD494768D, 0xB8C51F0D, 0x8874B680, 0xC3B8235C,
+0xE8283EE6, 0x942F47D0, 0x395BC5EC, 0x19F772AC, 0x2C42375B, 0x775751D7, 0xBF6C8171, 0x3167D364,
+0xB1BFFFB0, 0xF7834E9C, 0xA1866A5E, 0x003850C2, 0x61D07954, 0x05DC9BEB, 0xF2290C1F, 0x0B1C9D40,
+0x9AE21C3A, 0x70642162, 0x504EF751, 0x4EF1D498, 0x7D22B99E, 0x6FDA1C0B, 0xAA940FD1, 0x2727F225,
+0xD08576EE, 0xA6E454DB, 0x68D63012, 0xF49D7977, 0xA24F3961, 0xB46E85CC, 0xA2BDDF4E, 0x075931B5,
+0x8AB11C90, 0x32EF525D, 0x68D986E1, 0x643C2988, 0xEACBED02, 0xEB113BDF, 0x8BF0F7F8, 0xF1952C84,
+0xC2BFC5CB, 0x7467855F, 0xB2FC9F95, 0x6DB63377, 0x39F125E0, 0x1C0BA1DD, 0x0DA6B861, 0xF37827E0,
+0x90A8530F, 0x573EDAE9, 0xF963257F, 0x2E8DEE56, 0xB2E5F4B6, 0x4B22D143, 0x2573FCF6, 0xE3E94192,
+0x870D5E75, 0x2C267E1A, 0x4FB0E011, 0x6C52A2B2, 0x033BFE71, 0x1AE620ED, 0x393737C6, 0x5EC8E716,
+0x91FA18FC, 0x4B122BF0, 0xE747C1A9, 0x40BD06E9, 0x61B8F4EF, 0x7E7E7F4C, 0xD66C8DE7, 0xB6763EC3,
+0x5DD5BE33, 0xA9FD2D65, 0x4690F3E8, 0x7530E7EC, 0xA2910FB8, 0xDC3F7605, 0xCD09B906, 0x89C8E8CB,
+0x9095FA70, 0x225F398F, 0xAAA085C7, 0x2971CDCA, 0x8F70BC2A, 0x2FEE06BA, 0xD4EE75B8, 0x9B8BA7BD,
+0xB99A1A02, 0xD701610B, 0xE583DB0A, 0x4EB821B3, 0x72D13C47, 0xE40A1CC4, 0xED0330BE, 0x613C48BB,
+0xA61CCC16, 0x675068EF, 0x424F32F8, 0x43E5678F, 0x3F184876, 0xEE4B36CF, 0x112A6D55, 0x9E9DAB56,
+0x2C8F43A5, 0x72C26E72, 0x82A443D6, 0x1E84709C, 0x24A8E5EC, 0x8EC6A349, 0x4CAC5159, 0x6D85FE60,
+0xB3A9FB77, 0xD86BB7D4, 0x2CDC3CD8, 0x5557F409, 0xACB08A4B, 0x584C2ABC, 0x9535CED4, 0x09126E32,
+0xAC19F065, 0x7FB7696A, 0x8AAC2A72, 0xC9328789, 0x2A400F2F, 0xFBAB42BA, 0x2870FA11, 0xEC2DD8D9,
+0x28F1C176, 0xD06211BE, 0xE9ABFBD7, 0x60A3C4E5, 0x3D45EE5A, 0x3C185476, 0x6EE61845, 0xE8C5D97B,
+0xDA2D72A6, 0x4FD3177E, 0x03DCDA15, 0x97ACBE42, 0x7C74DBA7, 0x31E81C00, 0xFEAB74D8, 0xC0547877,
+0x87E6C79F, 0x52E0C12A, 0x6F8A40E2, 0x428F25EC, 0x634D075A, 0x7147A67F, 0x55BA1964, 0x87B83515,
+0xD9F4E673, 0x8997EA30, 0x41EBDB27, 0x839F550D, 0x144C257A, 0x67AC5127, 0xA513AB52, 0xFC4F999F,
+0x631D1CB8, 0xA693C6DD, 0xF3B97FF6, 0x972DEE8D, 0x692F4D23, 0xD218F80A, 0x3591EA3F, 0xDB4F0C81,
+0xFD878F0A, 0xE7F9FEF9, 0xE3AB272D, 0x80B134C5, 0x62EE9F6B, 0x5BC1E614, 0xCC8D0941, 0x39B353CD,
+0x45B240B7, 0x7D893E36, 0x5A873E80, 0x3648C041, 0xE7773A05, 0x22005A2C, 0xB9254CAE, 0x796AB90E,
+0xFE37A87A, 0x6D842AFD, 0x504523A4, 0xD993D6F7, 0xB1BF4F5A, 0x228B0931, 0xC0EA557E, 0x091D49C5,
+0x78AAEAD7, 0x8FAF86EA, 0x9EE15C91, 0x99B69764, 0x44327572, 0x4829FB7F, 0x5AF5E663, 0xC0B82739,
+0x77EF4495, 0xE75C341B, 0xEEAABB81, 0x97ECEBB2, 0x1D549F49, 0xE42F0FB0, 0xE5BCB919, 0xF3919C75,
+0x48914BD8, 0xD9D917A0, 0x04E44685, 0xC1EA131E, 0xFD4A5DA0, 0x4285A943, 0xFB0A5C2B, 0x29849EC8,
+0x517C37F3, 0x6005C90A, 0x96BF935B, 0xACA033DC, 0x6582B196, 0xDEC5930F, 0x3365BC64, 0x4B7DEF8A,
+0x69733B2C, 0x7D621A0F, 0xF09D6846, 0xA12827BA, 0xD637C94C, 0x2A665C75, 0xDE447A1C, 0xF282D870,
+0xAE0A2F52, 0xBEEF564C, 0xCF38111A, 0xB9A53119, 0x801F1724, 0xC18296E7, 0xE7279A32, 0xEF356E3F,
+0x412AA5D5, 0xDE25C3DB, 0x9724F6AF, 0x89060E5C, 0x4C2B8C8A, 0xC84645D4, 0x5E37533D, 0x8B0B3817,
+0x80B55338, 0xFCBB8F97, 0xF77944C8, 0xD775749F, 0xD9182546, 0xABFFB619, 0x9C705C62, 0x694C9B85,
+0x55E0E518, 0x6DE5BBBA, 0xE123292D, 0xCA947A31, 0xE418C0A7, 0x442E7BB8, 0xAF4B99FE, 0x926BC3E3,
+0x9C83ACAC, 0x30763BF3, 0x2760D73D, 0x00E1CBAC, 0x33BAA09B, 0x97A3BD92, 0xF0A2B189, 0x27925614,
+0x858F8819, 0x3AF65E8D, 0x7FCB8036, 0x3520EDEA, 0xB7F37CF3, 0x538D6709, 0x6E112577, 0x83FABFCA,
+0xE40CA8FF, 0x616481E8, 0x7B3455C9, 0x0E1FE8AC, 0x68706087, 0x762E8603, 0xF8A88625, 0x32F8291E,
+0x7B78E35E, 0xA37AEE5A, 0x06BF2DE4, 0x93174FB2, 0xEBCCF9E6, 0xD233014E, 0x9B028829, 0x1C4D79F6,
+0x107FB027, 0x46F60FA6, 0xE6ABDD0B, 0xFD3B030E, 0xBE7E3CAF, 0x2A7F3659, 0x49CFB2E0, 0x76BA3646,
+0x162477E7, 0x5BFE5A06, 0x1D4C77C2, 0x6414673B, 0xFE3FE8FD, 0x4464B5B4, 0x4DDBC983, 0xB8F23315,
+0xEEE6A097, 0xADE46B7B, 0x2D38D8C4, 0x01FFCE5E, 0xFEFDABC1, 0xB53B078F, 0x740E14B4, 0x0BBB15D2,
+0xB0EA0047, 0x60E000C8, 0x32F31118, 0xEF3491A9, 0x25A365B2, 0xA44AF9C2, 0x607AC5D6, 0x46559B02,
+0x1025C2A0, 0xCABFE389, 0x06183E7C, 0xEB793727, 0xC00A5649, 0x61C2D8D9, 0x0A261E99, 0x8F3AC8BD,
+0xE7CE4318, 0x30D34528, 0x5F6747DB, 0x9501C441, 0x08C2F0AA, 0x18995B88, 0xB48B83ED, 0xBFB978D3,
+0xFC0F3931, 0x4681C4E0, 0xF415603E, 0xC9C1AF55, 0x06829143, 0xB6015EB3, 0x540ED0E1, 0xC93965B9,
+0x1F31C6A5, 0xDCAFA982, 0x13D24C40, 0xCD8314E8, 0x83A8DFAD, 0xDE05D4C1, 0x941E5B73, 0x2F3F125C,
+0xC1C3E355, 0x9A2AF70F, 0x3C220112, 0xBEDE6A17, 0x08D4896C, 0xCD3050CD, 0xAFCBD081, 0x64C86A86,
+0xF4C7D7E2, 0x962328F2, 0x5DB4D756, 0x7F8070CA, 0x446F3360, 0x1E87CD46, 0x7ED1D0C6, 0x709C21FB,
+0x96F455B6, 0x732B20AA, 0x3E9D0D46, 0xA688315B, 0x599F637C, 0x054DAFC5, 0x29E79F48, 0x73FEC910,
+0x822D3031, 0xDFA8CF2A, 0x629B9100, 0xB4E6E8D0, 0x59F92046, 0x90755E16, 0x88780CC3, 0x21BB9A28,
+0x04F2EAAE, 0x3AC3695F, 0xFA4D2000, 0xCEE0CC99, 0x6EDBD4C6, 0x365B39E4, 0x7619066A, 0x9305DEF3,
+0x91D699BD, 0x2681502C, 0x6A1FF975, 0x38FDFCE0, 0x522A59F5, 0x00F4364F, 0x65EB513C, 0x2EBDA3BE,
+0xC35F19EA, 0x067B2DDC, 0xBAFB0653, 0x7A7C1723, 0x473E527C, 0x5592B008, 0x1EAB88E3, 0x9DE0D549,
+0x6106353E, 0x9DE09EAA, 0x8A4DB4CF, 0xCD48D5B2, 0x1DC3BABC, 0x6E21FD0E, 0x4B411A9D, 0x5B7CD516,
+0x9F4ECBFE, 0x09F1CDEC, 0xC70276E4, 0xC2BF3CB6, 0xFCF858BB, 0x06E1C8C2, 0xA832CB9F, 0x0B5C5D9A,
+0x840FF9AA, 0xC9466E06, 0x51EE91D7, 0x3E612341, 0x0A90CCB3, 0x6A544414, 0x77C71F48, 0x8DE6CF6A,
+0x577A9804, 0xD0C1BE0C, 0x057DC908, 0x63943497, 0x92783D8A, 0x17EAE891, 0xA5639A18, 0x35C6A611,
+0x855E1B20, 0xD73BFDFB, 0x86940174, 0x877AD63B, 0xE8F0F079, 0x58547C15, 0xA95D7A04, 0x97AB3C0C,
+0x355BF279, 0x64AE88F8, 0xAFFA0CEC, 0x5816CFD6, 0x35375575, 0xD363D544, 0xA15742C1, 0xF6B95F34,
+0xB7F43109, 0x8F94DC82, 0x023A6B7F, 0x5541B02F, 0x0B7EF6BA, 0xA130FBC3, 0x846A0E17, 0xC0BDCF50,
+0x9FCE1734, 0x7330A80D, 0x3B0D510F, 0x21FCA592, 0x315CB026, 0xA0A4E500, 0x17F129F3, 0xF11A5FA7,
+0x28BEE6D0, 0x10078B65, 0x6FDAB8CA, 0x2C47CAC8, 0xFB69F6E0, 0xAF1397FE, 0x9C1E1624, 0x46CEA979,
+0x23FD351F, 0x805348D4, 0xF7E8E04F, 0x8DCD586B, 0xD3F88241, 0x9B0B0FFF, 0xA82E7D82, 0x3587F9EA,
+0x67CADD93, 0x067EFB31, 0xB13EAD36, 0xB5A141F1, 0x559C3E0D, 0xD7B64020, 0x3554076E, 0x482D749A,
+0x25938FC1, 0x7C235D1C, 0x1BBDA8BC, 0x9707B1DA, 0xEC416828, 0x1C062B97, 0xF8711F2B, 0xE8C71198,
+0x874BF97F, 0xFADF22FF, 0x937C8177, 0x4EDADD23, 0xB86FC940, 0x92C7ABB4, 0x1299E320, 0x7BA429AC,
+0x7CF2C2C8, 0xC90A41B5, 0x5419A05F, 0xD7E07BF3, 0xBE135273, 0xACCFC76D, 0x39CED2AB, 0x9652E59B,
+0xE696F9D3, 0xBCAFFCD2, 0x26D5338F, 0xCEA4D981, 0x776D974B, 0xA36DBE01, 0xCFCF597E, 0xB3CE90E2,
+0xE83481F2, 0xD626D0CC, 0x5847597E, 0x7C9EE76C, 0x69849651, 0x6D67EDAB, 0xCBFF68A2, 0x1AF89569,
+0xC5AAA81A, 0x5AC6057C, 0x0362BEBF, 0x98E2D5A8, 0xE0500505, 0x461D883E, 0x6E543FE0, 0xB2680B93,
+0x039F264F, 0x4F3989E4, 0x7AD94266, 0xCE343233, 0x635B12DE, 0xD94837CB, 0x6AB65F89, 0xFB427980,
+0x059B6D26, 0xA6C18590, 0x033DB1F2, 0x186F54B2, 0x879AB482, 0xAB6C97DA, 0x76A41510, 0x8A10E99C,
+0xDE0A7B0D, 0x753568FF, 0x791038A7, 0x45598E11, 0xF174521B, 0x580CB719, 0xEFCE75CE, 0x7F2C8EBF,
+0x3B6287ED, 0x57FC2B61, 0xAE2997E8, 0xED9B3ADE, 0xD9EA5B24, 0xA986B28A, 0x269DAC65, 0x9651863B,
+0x1D651EC9, 0xC1B46C42, 0xB2BB7904, 0xDB948C87, 0xAE36DF7C, 0xD9EB1458, 0x302BCB88, 0xFDE83742,
+0xA6C08D6E, 0x028CFC54, 0x1DD47477, 0x7173F13F, 0x81E7F3DC, 0x82D6FC13, 0x228119CC, 0xFA97C991,
+0x46F95CE9, 0x48342730, 0x9510BAB1, 0x4843DA24, 0x98742A60, 0xBABEBCF8, 0xC634C018, 0xFD79DE9C,
+0xB5F39974, 0x8C6A17D1, 0x0DA2FD03, 0xF29A75BF, 0xC127F4F6, 0x46214F80, 0x4FF571C2, 0x93338B15,
+0x99C378AB, 0x5E0DD7FA, 0x53065C1D, 0x4A923286, 0x752FC3B5, 0xA733CB5A, 0x785D4CC1, 0x37526EBD,
+0xC28D893A, 0x2E32FAEA, 0x301EF5F1, 0x9D400D12, 0x3722AC5A, 0xFA380D5C, 0xFB2C5E5E, 0xFF82D995,
+0x855A3888, 0x00443F37, 0xED0D95DE, 0x87B3319B, 0x35E5FC87, 0x6161A919, 0x0E55BB72, 0xC97D3F88,
+0x3EFD88CA, 0xB693BBF2, 0x6930C61E, 0xD207A9F0, 0x72CA9655, 0xEA789E6C, 0x6FAAB29B, 0x1461A4DC,
+0xA02B3678, 0xEF0E3B08, 0x703E18C3, 0x4D8CDD20, 0x4D2A0D83, 0xA88E7B27, 0x481EA946, 0x1609735A,
+0x258FBFC2, 0x488866A5, 0xFEAF3C89, 0x53645DB0, 0x87A57A53, 0xD7DED73D, 0xA92CF377, 0x3B6605BE,
+0x671F0E59, 0xFF5CAD08, 0xF895703F, 0x739B2F88, 0x1C2FA91D, 0x6F8BB195, 0x7BC110AF, 0x103949F5,
+0x74D76C70, 0x8BF0B074, 0x43CF7FB5, 0xE3CE61F9, 0xF7BE9ED8, 0xA14434A4, 0x1C0756DB, 0x92621128,
+0x70340F39, 0x3A3078D8, 0xF4B8642C, 0x1675D8AC, 0x83905070, 0x9C8AF114, 0xAB4C6081, 0xA41E532C,
+0xCBD948FD, 0x78C299E0, 0x5883DD57, 0xECBE81D6, 0x70D0A737, 0xA7F56B72, 0x5479C596, 0xBD741FEF,
+0x824F8E8F, 0x72BD37CD, 0x41FBC026, 0xE9F45A8C, 0x933BAD42, 0x30E7A9EC, 0xF17A4B2D, 0x715FF9C5,
+0x3AF70A0B, 0x050C34B4, 0xDDDB87AD, 0x92EF6F21, 0x7BCD9FE0, 0x4A77285E, 0x59CCC4D5, 0x2A3BD975,
+0x32E19CDF, 0x64EEBC4B, 0xC33868E3, 0xE0906D36, 0x9CADE2E5, 0x948580D8, 0x8312E15E, 0x172F1CD3,
+0x064D9E5D, 0xFE1B2069, 0xA660269E, 0xDA3C4239, 0x6C59AFD7, 0xD902F67E, 0x1566AC26, 0xC579D407,
+0x2747E079, 0x54440BAE, 0x75DC24FB, 0x399562F8, 0xAF778C7F, 0xD010902A, 0xDF04FE2E, 0x6A78BED6,
+0x003BB05A, 0x60D87BDE, 0x53558E27, 0x5A82FD01, 0x93E03DC5, 0xD8AC53BB, 0xE9B103B4, 0x45AE6FBB,
+0xB8D17755, 0x2ED2C08A, 0xDA6FDE09, 0xF1BAFA12, 0xB24D31F8, 0xA6A2F06D, 0xE6C2913C, 0x2DC5D9E5,
+0x37C51C72, 0xD3E10E8C, 0x09369934, 0x65B59030, 0xFE0E8504, 0x5A6C7C98, 0x2E8881DF, 0x46397039,
+0x76ABF900, 0x69DE9F28, 0x32AD640D, 0xD201CAF9, 0x79418300, 0x33939396, 0x0B087ABA, 0x819FFF65,
+0xF53C3FB7, 0xEDFD4664, 0x9D8FA37C, 0xEBD08270, 0x33E3A1C1, 0x75094879, 0xD1DC4D89, 0x9A94C200,
+0x2E6F4A56, 0xB8D6B034, 0xA01A6508, 0xECA289A2, 0x82CD5CFF, 0xF381996B, 0x57F7CC96, 0xD7BB03F7,
+0x3A208CBE, 0x920747C9, 0x87026EE4, 0x4828FD53, 0xF68AF7AD, 0x19F3AB44, 0xCD20EDA0, 0x8D4A24D3,
+0x861764A6, 0x45612A12, 0xF07549FE, 0x7A57E04B, 0x6C77C2B6, 0x9F4DB5E5, 0xAA0BC372, 0x8D7A8770,
+0xF99F23AC, 0x85C64E6D, 0xDECA5E77, 0xE1213574, 0xD58A874B, 0x99F4149C, 0xBC837163, 0x7F07AB28,
+0x01323076, 0xCD530C7C, 0xFC68ECC8, 0xEA7E5D03, 0x8E838D07, 0x426EAB8C, 0xD19A2D8B, 0xBFD1DA98,
+0x8B0ECF8E, 0x8DA98796, 0x19561CC7, 0xE2721220, 0xE4E67263, 0xB7031DB7, 0x472EC748, 0x37670E18,
+0x8FB8B437, 0x474A3EB6, 0x24DDCB8B, 0x755DFB5B, 0x2F9811EA, 0x0450CADC, 0x474EC255, 0xA38E8DB4,
+0x6DB501CF, 0x6FC12DAD, 0x693E724B, 0xAC4ED951, 0xCF1BE059, 0x5381BF36, 0x07E1D628, 0xD7076754,
+0x625D3189, 0x48530E5C, 0x58C810ED, 0x1348F846, 0x54CED3AB, 0x4122FDDA, 0xB40B0B2A, 0xE148CC56,
+0x11E19C00, 0x731CBA75, 0x70E68E79, 0x2F11E53B, 0xD4A461FA, 0xBB647B18, 0xE79F2644, 0x15411FBE,
+0x16317734, 0x04AC1E9D, 0x480E59B9, 0xC8D239E9, 0x632DBF00, 0x44A90C6F, 0x1520CC45, 0xEBEBAEE6,
+0xAF89B18B, 0xC9C5B4A6, 0x4AE13C79, 0x1676DB29, 0x25850E59, 0xB6E0964D, 0xDA1913EE, 0x90A2AB03,
+0xE9F52BF9, 0x68DAB43F, 0xD3C1DDF6, 0x21B9F2D3, 0x5190E473, 0x895B3C19, 0x896650FC, 0xC78D15DF,
+0xC23ECF9F, 0x171802AE, 0xF348F92B, 0x44BB22FA, 0x3FFB1739, 0x6AA00A1D, 0x8CFEAB85, 0xEE8E8D06,
+0x04B5B1EF, 0xE20D7774, 0x9BE109A9, 0x10214BCB, 0x60BAB712, 0x5691B501, 0x690F5A46, 0xA17BFD5D,
+0x36703831, 0x5BF92837, 0x03C46121, 0xBCF93338, 0x950F061C, 0xDF3D51B6, 0xA7AEAC32, 0x86FF8829,
+0x57F7FBFF, 0x78A0F8CF, 0x60E22398, 0x96A09B51, 0xC3B323DD, 0x8734FD05, 0x9C69C199, 0x844CE0CC,
+0x7240B8CF, 0xF8EF280D, 0x0FCD4D82, 0x71FF4717, 0xEC560D3D, 0x2BAA1B5B, 0x7679F2A7, 0x7434FCA2,
+0xDEE9C1B2, 0xDB71E409, 0x7E4E68F4, 0xE0047EDA, 0x6958ECAE, 0x92889AB4, 0x50258F7A, 0x489873E9,
+0x7EE4149B, 0xF5851C2E, 0xBCFC47C4, 0xE3AF61DA, 0x8D37BD2C, 0x36A888D8, 0x0D649F68, 0xCBA43C85,
+0x504BE42F, 0x2E35A34F, 0xD9C7EB83, 0x9893F7BA, 0x3EA2C165, 0x9DD7CE69, 0xB7175F79, 0x1A3CEAAF,
+0xB17BD1DF, 0xE696FB7B, 0xE3680236, 0xCAB8549B, 0x2877EC2B, 0x7D6E796F, 0xF1C1F3AA, 0xD17C0288,
+0xAAE4FE88, 0x02FFD15E, 0x32CF2FE0, 0x5F3DA606, 0xE01BF061, 0x35332C92, 0x736C55D6, 0x5FCD0F0F,
+0x2ABFB1C1, 0x310D85E5, 0x435D8AFD, 0xF7D790B9, 0xD47480CF, 0x4A9D0ED3, 0xD4DFCF68, 0x2C9272C3,
+0xCEE324F2, 0xED81E290, 0x8086E3B0, 0xD71CDEE9, 0x983D8B51, 0x5A292E2A, 0x588B5CCB, 0x22A6A511,
+0x64B96137, 0xEFB1BF8C, 0x1B741422, 0x7A3B20BB, 0xD483B573, 0x9826E3F6, 0x77799328, 0xADC5DEFB,
+0x4656032F, 0xAB4CFF31, 0x5E9497B3, 0xF18D410F, 0x370EA4C8, 0x76588A03, 0x7268BC76, 0xDA1D58E7,
+0x75D63DF3, 0x5C28BFA4, 0x1327652C, 0x818EEB61, 0xF9EBFF97, 0x78779F09, 0xD64ED5FF, 0xBC5DFC9D,
+0x35EAA7A1, 0xB4F1EA2C, 0x16BCBFED, 0xB4BABC0B, 0xEDC53702, 0xE1EA8BD4, 0x0BFA8369, 0x4D4BF0A9,
+0xDE52EA63, 0x1EE09DA9, 0xD616836D, 0x2E4366B6, 0x97C80084, 0xDC7528D9, 0x495B1DA3, 0xAF20CDB6,
+0x37C40D16, 0xC56295B2, 0xC756C272, 0x96246966, 0x9E8B5C12, 0xDDAE55EC, 0xD8BABB97, 0xF8CA1BF7,
+0x4EF22763, 0xA5CD2572, 0xA578889A, 0xA3632CA8, 0x36EA359A, 0x3339FB18, 0x30DBEF10, 0xC29923E8,
+0x2F2C0B4F, 0x4FAD1310, 0x968504A7, 0x20A2146F, 0x53D9B3E6, 0xFA1BFC6B, 0x7396A5AA, 0x3AEE0A0E,
+0xCA1580C1, 0x7B9A321C, 0x1F9C92FF, 0xA77FF6D1, 0x62E97A2C, 0x04E6ACA3, 0x68A1DF9B, 0x89273278,
+0x51E9AE66, 0x398C18AB, 0x8B3925E1, 0x7A3B96DA, 0x5BF074E1, 0x20F393F5, 0x9F8ACF74, 0x544F55A5,
+0x1F4A5BA3, 0x13B30F5F, 0x517A3EB1, 0x478CC9AD, 0x6A397DBC, 0x0B96648C, 0xB5E4FD92, 0x0353AD4D,
+0xE34ED8E2, 0x700F498E, 0x2AC38B55, 0xF5D38772, 0x7F0B3D8A, 0xB55D0930, 0x7447997E, 0x265D19E4,
+0x3A6875EF, 0xB31E7828, 0x9E7EE939, 0x041F0655, 0xD59BF3B0, 0xC8199CD7, 0xA2FFF9E8, 0x1BFFEF98,
+0x9CB78798, 0xF301726C, 0x6D75A48F, 0xBA346071, 0xF1F3763E, 0x107FC398, 0xB001A507, 0xF0B1063C,
+0xA72CA80B, 0x58AF35C6, 0x4D61076C, 0x2BA1031E, 0x0794DFAC, 0x6B74E297, 0xBFD4F887, 0x1243F3B9,
+0x379DAFA1, 0x23FD6066, 0x288EADA9, 0x1618D804, 0xA1439B11, 0xDB88AEBA, 0x6DA540BA, 0x7768209F,
+0x3800DEF6, 0x35400858, 0xE2F709AB, 0xA8A5FE86, 0x818C8E7D, 0x2AE3E6C9, 0xD406AA02, 0xA928100F,
+0xD3060F19, 0x82DF2954, 0xDDF371C2, 0x4549C9CD, 0x73EF1730, 0xC98CD973, 0xC7E2CBA6, 0x4AD67D41,
+0x48A8A9F1, 0x94875F8E, 0xF7CA43D3, 0x131782D1, 0xF01B7F8D, 0x8492B09A, 0x2FBF1D43, 0x88238599,
+0x89F3F6A8, 0xEBA81507, 0x4C6CB6B9, 0x7FD2169B, 0x9D689C37, 0x0030DEC5, 0x01010000, 0x9334009E,
+0x76CB7F12, 0x70995C63, 0x5B3858DC, 0x1B12398B, 0x10ADFF8A, 0xB6C01894, 0x85B7938C, 0x261A2359,
+0x3703A5B1, 0xE9308CA6, 0x9480CEE9, 0x4CF2BB2F, 0x3C0507E9, 0x4FDCE71A, 0xAE175C6C, 0x48CE1BDC,
+0xFF260E30, 0x34B138C0, 0x4B392315, 0x5EA1EB77, 0x78B85DA3, 0x1CEC8673, 0x1B1CE551, 0xDFAD7756,
+0x58333B6E, 0x4BBB4675, 0xC0E2DD8E, 0xD5683863, 0xC17DCB5E, 0x42428992, 0xF4F4D58C, 0xA4E8524C,
+0xA8CF3288, 0xC7574C9F, 0x20BAE8E7, 0xE1D24953, 0xE306B031, 0x9A8EFA33, 0x77E1BE0B, 0xF07DF932,
+0x29B985ED, 0x692D9271, 0x172CA5AC, 0x5256E9DF, 0xB6F8F293, 0x116C21EF, 0xDDCEE7DD, 0x34559C3B,
+0xAE05CE0F, 0x63179C48, 0x1D20331C, 0x5B48F23B, 0xF2F9268E, 0x08390437, 0x403E6999, 0xC5C9E650,
+0xF07FC7A6, 0x30BACBE9, 0x239C51F9, 0x34FF67E3, 0xF0C9F322, 0x0B4DBA8D, 0x08CFA2DE, 0x2F1AD3C6,
+0xA3566FFB, 0xE98E4455, 0x163228B6, 0x3C5FA39A, 0x20789AA6, 0x137657EB, 0xB6D6B222, 0xF5003AC2,
+0xE5768A91, 0x065D2272, 0xE68BB400, 0x25435A62, 0x046C5F4C, 0xFB7C0A6E, 0x923E29C9, 0xE6D5E08C,
+0xEFFDD699, 0x71285764, 0xB521DC6A, 0x195E69A2, 0xAB686DFF, 0x2FEEE2D5, 0x2EA7DFAF, 0xC4A60000,
+0x54C99A9A, 0xBC22E189, 0x41C6A7FE, 0x08B05CE5, 0x6D7A8043, 0x48BF6B1A, 0x30A65C2E, 0xE34A8DE3,
+0x3B283C9D, 0x91F4FF4D, 0xC78477A2, 0x159B465F, 0x8FCF86CD, 0x5E8FB4C0, 0xABD470C3, 0x73921A41,
+0x744B34B1, 0x47885AE8, 0x70581A5D, 0x37C9865B, 0xAAA5A2BB, 0x9757731E, 0x7EFAC62E, 0xBBF34B06,
+0x78A36579, 0x466DD043, 0x9B250F45, 0x95D3C482, 0x13E086CB, 0xC66D988C, 0x02E1D45B, 0xA0CC555B,
+0x77AC0EA7, 0x78D8EBF0, 0x4E083ADA, 0xD399542D, 0x0929B924, 0x2A551745, 0x761D1AC3, 0xF8FC5E52,
+0xD76B3622, 0xF3A6292A, 0x300F33B3, 0xEDE59766, 0x98826BE7, 0x788B77E0, 0x4E2882A5, 0xDB7856F4,
+0x23C635D4, 0xC8BFE9A5, 0xB0C01470, 0xB6857385, 0x4DF1BA54, 0x326FEE20, 0xFC62A370, 0xB89F2F7C,
+0x966AD03F, 0xCBF05897, 0x4ABD8776, 0x7501E098, 0x59465F04, 0x69A3ED17, 0x2C2455B5, 0xCF3D1FE6,
+0x5CE2C4BC, 0x22C14340, 0xF96CFDF2, 0xC270B28F, 0xF9C30BA4, 0x4DFAFA55, 0xB6502632, 0x560CDB27,
+0xB4CE0333, 0xBAE2FBCF, 0x1755CB36, 0xDA151426, 0xE5E5D550, 0xE87CBFCF, 0x8B671E96, 0x91275854,
+0x9C9E5D81, 0x7B624ED6, 0x70301E7C, 0xB162F812, 0x0C117298, 0x378EC71B, 0x84C478D1, 0x9EF09870,
+0x01FA21D5, 0x4BBF6297, 0xFDA2E883, 0x34820D45, 0x8A7A4DBA, 0x582607C3, 0xEB5CE29C, 0x1D43D658,
+0xA7BB455A, 0x6CC51773, 0x19CC8848, 0x3FE19278, 0xF19F16F9, 0xB5BA71A9, 0x38DFB982, 0x134315EF,
+0x0E507C04, 0xE92822DE, 0x5DDCBB00, 0x0CE1EC78, 0xCB7FF758, 0x629C04C5, 0xCCBCC4B2, 0x79B91D2D,
+0xCBB5C31F, 0x839612D6, 0x148021F4, 0x856EF157, 0x2684D05A, 0xB3DA2E23, 0xEDE67311, 0x8545DFE5,
+0xA973007F, 0xB5044791, 0x0DE866D8, 0xD5D294E3, 0x49691B64, 0xA5855033, 0x68BE0B26, 0xAFC0A64D,
+0x6625A583, 0xAC19863E, 0x5B86F617, 0xDF459D2F, 0x2E774AB1, 0x187D16CE, 0x38288417, 0x1C7CB098,
+0xD70AEF96, 0x0372ECAA, 0x5A41AB88, 0x4DE35B62, 0x6C297E7A, 0xECB9CB57, 0xA72641E5, 0x256910ED,
+0xBD517C2D, 0xBBB32D56, 0x1E604A8D, 0x5FAF67B4, 0xA927B9BE, 0xC5B3D6E1, 0x13D1AFD7, 0x6EE0252B,
+0x877FD7F7, 0xAFA4161C, 0xF8D644E7, 0x79573B54, 0x35A6D58A, 0xB028A117, 0x9A15F3AC, 0xF8CA8F38,
+0x15EEE487, 0x8DEB5A71, 0x87CBA0DF, 0xC241C92E, 0xF4DD40FB, 0x6685713E, 0xE4DC9A66, 0x309DE37E,
+0x692EF75E, 0x23177520, 0x3A98694A, 0x0F5ABE9A, 0x10AF8330, 0xEDCB45E0, 0xCAB972BC, 0xC1D62A0F,
+0x57B2FB8B, 0xFF3B72F3, 0x57F040F5, 0xD334B473, 0xBE748ED9, 0xBD894B83, 0x7AEA7C23, 0x9699902B,
+0x6A847612, 0x7218BD71, 0xC67B9080, 0xA19FBB85, 0x121E3CCD, 0x573C3A3A, 0x02ACD929, 0xD6A23CA5,
+0xDC7A878D, 0x711EFFC1, 0x2BEE197C, 0x382951AB, 0x68B3C688, 0x4272C7B3, 0x2281F456, 0x401FA558,
+0xE515A773, 0x2FBED134, 0x03D1D441, 0x2796EF09, 0x4E213ABC, 0x87935BE5, 0xFAF578B9, 0x3CB48BD1,
+0x0EF74059, 0xDFFF17C6, 0x5E6107E2, 0xC44B73D1, 0x3584C5C6, 0x9CDD52B2, 0xAEC990F9, 0x815CC8B0,
+0xE2C708E7, 0xC263ABC6, 0x64E3B61F, 0x79E18BE2, 0x747D0DC4, 0x1234C1D5, 0x6B3755C7, 0x03BCB71D,
+0x4875E635, 0x0DCEDF7F, 0x4CDDF124, 0x5D304EB2, 0xDFF5A1B4, 0xA22F867D, 0x550C7C84, 0xBF988DC8,
+0xE73A1E15, 0xD9772C40, 0x326798EF, 0xDCFB7C9E, 0xA7B85B39, 0x60AA2FEF, 0x415CBF20, 0xE8B504B4,
+0x81DA9172, 0xC582BB38, 0x467AAAA7, 0x382A18BD, 0x7C779B7F, 0xB717A525, 0xB2E97346, 0xBA0777A9,
+0xE4F99EBC, 0xB0CBA5DE, 0x0646F90B, 0x9CD6BE0E, 0x5FD810F0, 0xABFF0E44, 0xDA7A63CF, 0xA0738602,
+0x06D13169, 0xEF085712, 0x2D51F816, 0x00000040, 0x009E0101, 0x7F129534, 0x80E9D1C0, 0x2D27AAEB,
+0xFB765098, 0xB4630047, 0x6D011386, 0x8D7D21A1, 0xBD0E058F, 0xB2765846, 0x5E5824CB, 0xC24C903E,
+0x2A82384E, 0xFBFBC48C, 0xB6B21327, 0xD6386E03, 0x48B7BE72, 0x812D6714, 0x8C0A57DA, 0x7DEB3F71,
+0x5A00EB48, 0xB555A8B2, 0x36907B68, 0xF4D1465E, 0xDE51FA6A, 0xDDC2AC60, 0xD0F247A7, 0x7ACE5E46,
+0xDCDBE6CA, 0x518EA50B, 0xE87EB91E, 0x32C640D4, 0xCCDD2163, 0x10D7CF8B, 0x977D900B, 0xC4C473A5,
+0x50868610, 0xE2F27C5C, 0x1EAC64E1, 0xEFFF0960, 0xC474D5CB, 0x57555549, 0x7F9D2DDB, 0x87E223B0,
+0x07A58FF7, 0xC3FF6881, 0x0F7730BD, 0x0EAFFEB7, 0xC9ABD94B, 0x97200E2B, 0xFDDE7C2F, 0xDB24427D,
+0xFDB39511, 0x8BF6EAB5, 0x23C64AB2, 0xD0E9FA9C, 0x53157ED0, 0x51AB4B0F, 0x293A4BA6, 0x743E5277,
+0xDB2044B8, 0x4075B60F, 0xECEB7BE3, 0x1E5EE719, 0x522C450D, 0xD028B614, 0xEEAAB477, 0xCB56F824,
+0x931E52A8, 0x060562A0, 0xE6D87EDC, 0xB344669E, 0xEA8B06AE, 0xB3E18F2A, 0xE1E82A14, 0x7C1E91B2,
+0x0378E107, 0xBB36535C, 0x89DB1C8B, 0x8C24CA2F, 0x4DAF1735, 0x148E1026, 0xF4849BB8, 0xCE534BE5,
+0x9BA59D2B, 0x475211D9, 0x2D0E3299, 0xFABC0355, 0xE9931D0E, 0xECBE4411, 0x96FC5CC2, 0x46418B8A,
+0xFDC1277D, 0x61C515EA, 0xFE878C83, 0x057B94A3, 0x3571C3AA, 0x15CACD3D, 0x707A4CC8, 0x4E764A29,
+0x2A6ED7D0, 0xB3306D4F, 0x327E3B75, 0x6341C97C, 0xF4CDC610, 0xC589C0A0, 0x2C931F06, 0xCC76316B,
+0x123B04F7, 0x28A96ACE, 0xAB8E46AD, 0xD393D0DF, 0x92B1DBFE, 0x03B5449A, 0x8C7B627C, 0xC8BCC144,
+0x1CD14BAD, 0x50B8238A, 0x92456D4D, 0x4A40D3BC, 0xAB0A3794, 0x78E0C9D8, 0xC71FABD6, 0x71ECB7D5,
+0xC1083C56, 0x5A31BFED, 0x9419501C, 0x7E26A7DE, 0x6714ABB4, 0x6A39EAA2, 0xF7A045C1, 0x3C80763C,
+0xBF0F8446, 0x832FD77E, 0xCF429A83, 0x2E5D8B8F, 0xE5FCAB80, 0xD7C34B2D, 0x40547FC8, 0x1C62E684,
+0x5655CE33, 0xA56399C5, 0x66F2A66F, 0x2ED23193, 0x83FBA331, 0x1000C31C, 0x6CE8E1C7, 0x3F337F08,
+0x33714C85, 0xDA0086D2, 0x39DC6A8A, 0x1932077D, 0x39BF8A52, 0xCA10BC87, 0xDEBBE200, 0xA06174EB,
+0x889D1F85, 0x59348E25, 0xB49C413F, 0xE35E5DAB, 0x2F3BD88C, 0xB6253226, 0xF9EE6C8B, 0x0EEDD619,
+0x513CA8DB, 0x8A984E4E, 0xCE7D759D, 0x9B1E856E, 0x5D787137, 0x2A2AEF6C, 0x25BE72A8, 0x1C931823,
+0x7871E74D, 0x9064703F, 0xD9DBBDF0, 0x51D53F0F, 0xB8C666F3, 0x1718CFF8, 0xE799B67E, 0x887D20D6,
+0x2A4FE77A, 0x6ED2CDF1, 0xEFBC0208, 0x087BE122, 0xF5EC7A5F, 0xE8C91D04, 0xE9D5319D, 0xBF5B26F6,
+0x140B49AB, 0x55F6B093, 0xA760F9A9, 0x9F1A2704, 0xF38AF3B3, 0x8B927F24, 0x29905C43, 0x984061C5,
+0x8CA4453C, 0xA1F2A227, 0xBFF900C5, 0x6822D62D, 0xF6709372, 0x5546478A, 0x6D6A3245, 0x606D0B22,
+0x7F6F060B, 0x58AF4E67, 0x36D43F9A, 0x0588BCA3, 0xDCB59B6E, 0x5F8043D3, 0x366B7E76, 0x0CDF8D83,
+0x1C5E7098, 0x32B343B7, 0x3BAC56EE, 0x76377193, 0xBC16699A, 0x7030805D, 0xEFA2974B, 0x61006D58,
+0xB5BC5672, 0xE7B9DEA3, 0xA1D6F72E, 0x2A2F368E, 0xB6E2A652, 0x3CFA8B05, 0x2BBC0B83, 0x134EF72A,
+0x472F6E4B, 0xFF058359, 0xA9D56DA0, 0xD2834B5B, 0x93A33B3E, 0xE707ECB6, 0xDCEF2C20, 0x51B8D35E,
+0xE474686D, 0xC19134F4, 0x6D943608, 0x4213F253, 0x5B0F2673, 0x06CA3FB9, 0xCA2AEE27, 0x2270ED86,
+0x23EE92CB, 0x547761F1, 0xB19208C2, 0xA781A9EA, 0xB8C53B0C, 0xE0B84AE5, 0xE5D0FB4D, 0x5CBDE771,
+0x4EEFB2AD, 0xF89047CD, 0x91A3B3A6, 0x51B5F581, 0xB5A54615, 0x9B7F4DE7, 0x509CE9A6, 0xAC0582D0,
+0x3EA34735, 0x891485F0, 0x2361EB9E, 0x793895ED, 0x14713A2D, 0x6DE43829, 0xE187E367, 0x7006E284,
+0x7BBE5722, 0xA821AD7D, 0x02134E18, 0x99968CE2, 0x6B96D9FE, 0x6660F430, 0xC22AD9C5, 0xF21FBD04,
+0x31868D13, 0x3D12DDA0, 0xFF733F03, 0xB2D08EC8, 0xF552EC44, 0x386C0D2F, 0x02D0B20F, 0xFD4849A3,
+0xF7ACFFBD, 0xE4BF8F0B, 0x4E1B2DAD, 0xE5E1826F, 0x4CBC858D, 0x3B0D09B5, 0xA19B4848, 0xD4A593CC,
+0x01000000, 0x34009A21, 0xD0DD3F9C, 0x02654BDF, 0x2905F59C, 0x76235E13, 0x8130457E, 0xC167CA17,
+0x3E8D41A9, 0x451374B9, 0x79305029, 0x3434CA38, 0xA1ACE87B, 0xBF0387AE, 0x72FC89F3, 0x7B3133F0,
+0x8CE5582A, 0xE00E9B1E, 0x4D153287, 0xE651792D, 0xEB873DD9, 0x1780ABC2, 0xFB227F1F, 0xCA93A26F,
+0x0F0C5437, 0xEFAE831C, 0x81611283, 0xB5FDBAF4, 0x0320E1B1, 0xC010642F, 0x34E33509, 0xF4F86445,
+0x320CA2F9, 0x6CB6208C, 0x4A586B0B, 0xD8649AD6, 0x463AD440, 0xB957CD4C, 0x3D687E17, 0x779488D5,
+0x2920EB4D, 0x41461859, 0x6B0F3F72, 0xF2ABFDC5, 0x40A5A35E, 0xBA04618C, 0x27ABA0B3, 0x4A862F23,
+0xCA44635D, 0xC207831E, 0x1B7ABCB7, 0xD570BD37, 0x3332E1A0, 0xAF24B470, 0x0C984CE9, 0x17373391,
+0xC3F65562, 0xF45E50DF, 0xDB972442, 0xCC8BB3EE, 0x4786F7A4, 0x7E0E2880, 0x44E6C273, 0xC8411497,
+0x4311B05C, 0x8E4E3486, 0x11F866C1, 0xC36EB2BE, 0x9BBB55B9, 0x30E8D988, 0x6D79BF5F, 0x4B5DA839,
+0x3F67D3E1, 0x296A3725, 0x136B7564, 0x872DF4B6, 0x69CED785, 0xB1655358, 0x47E689FF, 0xAC24AA5B,
+0x16917FC9, 0xB9368A85, 0xC8DC6AB8, 0x11521CFC, 0x6287EB9B, 0x832ED053, 0xCF5FC81B, 0x652A9CE9,
+0x04472C55, 0x5C3F8C50, 0xF2E96A76, 0xAC9A2C96, 0xC80D9D5E, 0x854BAFAC, 0x61AD5461, 0xA2D42AD7,
+0x16D84E47, 0x172D79E8, 0x2427ACA6, 0x863C82DC, 0xB531D84C, 0x0C18D10B, 0x9282D3D3, 0x143472A6,
+0xE24DA590, 0xB529036E, 0xBAA48A0F, 0xB3782753, 0x8A085D1F, 0xDF4280CC, 0x3867F407, 0xFFF49CF9,
+0x0DE2CF07, 0x4DF4B807, 0x9DCC663D, 0x5197278B, 0x5A70B48B, 0x0E860125, 0x118DDFC3, 0xF8DC9870,
+0xD7497609, 0xCD19807B, 0x5EA55E7D, 0x65E60E5F, 0x6566DDA5, 0x1C301F5D, 0x9422931E, 0xA93AF538,
+0x56982A75, 0x53E97805, 0xCB0F0AB1, 0x52ECE615, 0xD2A64370, 0xCE157F81, 0xADB60229, 0xA32C752E,
+0xE1894A42, 0xF3853776, 0xB7EE2B64, 0xB401B3BE, 0xD76A48FF, 0x0B00DFC2, 0x73B506C8, 0xCEDBBFEF,
+0xE2537490, 0x89AE2F32, 0x903F071E, 0x87EB0AB6, 0x36DE3C5F, 0x02EB129B, 0x0D0837AE, 0xA0CFF4CC,
+0xE9B596FF, 0xB7795731, 0x5629F27C, 0x68D55E68, 0x58F63CAC, 0x0F932379, 0x02FA5439, 0x0CA2E9B2,
+0xA27645AE, 0x3E2166E7, 0xD36C8D87, 0xC6BE239D, 0x9905ED64, 0x91C06223, 0x95B1CBF5, 0x3709742B,
+0x2C1DF3A7, 0x24B608F2, 0xB4490C71, 0x8BD4D37A, 0xC656AE75, 0xD24FFA4E, 0xB2735B25, 0xCE5B2E53,
+0x806D0260, 0xAEDA69EF, 0xC510835E, 0xCE63CABA, 0xAEB8E3C0, 0x9F9C0903, 0xBED0413C, 0xE6EDA124,
+0x8753865D, 0x29002361, 0x6D1DA79F, 0x1CCD23FF, 0x0F05ABB8, 0x6717FF31, 0x58599E8B, 0x81D8048C,
+0x1429C7F8, 0x6934D79B, 0xA1DDCA4E, 0x454E79FE, 0x68399A3C, 0xA157E4E3, 0x427CC982, 0xF80BB2D3,
+0x754884DE, 0x871DB76B, 0x0F755D0D, 0x76FC92F0, 0x70A2637F, 0x07D34B60, 0xBDC3D2BA, 0x71320C55,
+0x3C9DDBCD, 0xEF1AD725, 0x8DCE2BAC, 0x62593B6B, 0xB8E5C911, 0xA42A550D, 0x9A8A13DF, 0xDE372497,
+0x0A8D6CFD, 0xE8095210, 0xC8778398, 0xAA89E0D5, 0x1A4548AC, 0xE8C6A0DF, 0xB8E1F6C4, 0x6ECD71B7,
+0xDFFDBEE8, 0xD6250BC6, 0xC7C72E58, 0x6FCD78E1, 0xC451626F, 0x0BEFD535, 0xAD0E9E1A, 0x1DB0FB6B,
+0x0A850508, 0x5B18F3DD, 0x7F5FD3B9, 0xD77A05EB, 0x4A00B624, 0x5C9245C1, 0xDB8978DC, 0x6A96954B,
+0xC2D69814, 0x34BD2FF1, 0x417BAB65, 0x7B5D2ABD, 0x6CCDF92C, 0x067A8A02, 0x78504156, 0x248B8EDA,
+0x02F50947, 0x75CD53CF, 0xE2690DF3, 0xC189B982, 0xC8475FCB, 0x12BC634E, 0x56C4FD10, 0xFCDBD4EF,
+0x87F3CE93, 0xB2692BF1, 0x58051FD8, 0x993161DD, 0x5E23EB7B, 0xC288F252, 0xDB72429C, 0x0A2F2E73,
+0x8CFFCB21, 0xFAD96EB4, 0x28A723B8, 0xDC4EBF93, 0xE2449B8B, 0x9FB78717, 0x606CCD01, 0xFB66711A,
+0x9E9F5F60, 0x47493DC1, 0x3FE75965, 0x76205981, 0x1B5E8B9D, 0x0F5B78FF, 0x8BC03316, 0xB6577B5E,
+0x620C6B55, 0x95FF7810, 0xDCDB9F49, 0xA4B41093, 0x77575C36, 0x5680AF4B, 0x48BF6400, 0xAD4D92F9,
+0xF66036FD, 0xEA06278A, 0x9DDA7DFC, 0x59FCAE7C, 0x98245CF4, 0x38940213, 0x507F0720, 0xF712D036,
+0x1CA239CC, 0x9455D0A3, 0x1D43B7E5, 0x052C7A70, 0x784CE3B8, 0x9851F63B, 0x1F0C6CB2, 0x39CF1189,
+0x8663A8BB, 0xEB55CE43, 0x1593B706, 0x7950286C, 0xEDDD80E7, 0x5E0EA6F2, 0x5A9C2FD0, 0xD9AD14BA,
+0x54653424, 0x50C53CAA, 0xCEC85D05, 0x99EB92FD, 0x6AC3D57D, 0x17E293BB, 0x4BA35B44, 0xFE8E4885,
+0x02DF7D24, 0x20682F47, 0xFA0FC9F4, 0x1CA676FB, 0xDD9AC776, 0xBCF0372C, 0x18939A95, 0x9058BA9B,
+0x073DE61C, 0x8892DF56, 0x49054C78, 0x39EC7D16, 0x287ED275, 0x12F742FA, 0x7680A89F, 0xC7BA3B8E,
+0x6A7B7907, 0x06138E09, 0x76183BD6, 0x9F136464, 0xC9E2F5CC, 0x09BFCA6A, 0xE29128C7, 0xF851DF7C,
+0xCFF26B96, 0xC6BF8B30, 0x3FEA90AE, 0x8DAA2F20, 0xE2414F9F, 0x1DD663D5, 0x38E36EE7, 0x3C8B37E5,
+0x84D192E8, 0x80A1A24C, 0xC08E3978, 0xDB7E499B, 0x2602194E, 0x7B556EF1, 0x8571A407, 0x858A527B,
+0x497E4882, 0x81F6FA3B, 0xC13CE64E, 0x9A9A63DD, 0x41D14382, 0xD58A5701, 0x8E51899A, 0x9E2B4B1C,
+0xA3A75E80, 0x4B98AFBC, 0xF6315CD0, 0x4012CC76, 0x1CD68322, 0x38AEDC0D, 0x7EB938A5, 0x52265BD1,
+0xD9DC0833, 0x16289767, 0x734D9A3C, 0xF62A1139, 0xEF782DF5, 0x96931AD2, 0x0444842C, 0xACCDEDAB,
+0xFEEDB31D, 0x8A6CBFD0, 0x510D7EC1, 0xC80661D0, 0xEDED33FB, 0xCCA7D429, 0x8F863F43, 0x65D1B991,
+0x2E80A9E3, 0x7B387E4C, 0xE538A07C, 0x057A2959, 0x0BE586BC, 0x76C390FD, 0x3D8872A9, 0x4F085341,
+0x1C2D0C1C, 0x98E89644, 0xA3A39DD2, 0x2018FBC7, 0x2748FD5F, 0x62B34791, 0x68A55756, 0x8A714CEE,
+0xEFA7A40C, 0xBBD77E66, 0x2C899132, 0x06F847ED, 0x6102373C, 0xB2C7855E, 0xA4330515, 0xE8158B2B,
+0x1FB18DEB, 0x4199F06E, 0x29C12F3D, 0x674B274B, 0x67616330, 0xD9EDDEEF, 0x6B679600, 0x21743ED4,
+0x40AC1A79, 0x9C460AED, 0x9837090C, 0x9B465634, 0x5C4A20A3, 0x90A28AC7, 0xB69E13D6, 0x8DAAFB49,
+0xF1C00A36, 0xBE425BB9, 0x5AF755FF, 0x8D44E90A, 0x70477CD3, 0xFE84C7D0, 0x5EC2C53F, 0xACCC3358,
+0x9781A239, 0xE66ED92C, 0xC94C0B4B, 0x580F71D6, 0x18068A23, 0x23543C00, 0x267F59C0, 0xCD5DDC15,
+0xAEA13514, 0xF040E4FF, 0x9F1DE13E, 0x11C9DA58, 0xDFBF2388, 0x565E2584, 0x71F6577E, 0x22FF2C38,
+0x58B8081C, 0x8A3B5477, 0xE83A51C8, 0xE600D46F, 0x6630D30E, 0x59025FF7, 0x0E160EB5, 0x0A62BB27,
+0x6138856E, 0x96496610, 0x8BBC3FC0, 0x5BC87628, 0x87FAFE70, 0xB50D5652, 0x9E2E4BC6, 0x07C47F89,
+0x39325B5A, 0x7CA8CBD1, 0x213FE4E2, 0xB64A0D10, 0x8D4F4063, 0x7914EE27, 0x2EC18AC6, 0xBB85EDF7,
+0xF7B7A546, 0xFECC20EA, 0xBB7BEA4F, 0xEF853F58, 0x6107B714, 0x885FCC17, 0xBFFF6FEF, 0xDAAE62E3,
+0x223994AA, 0x15416481, 0xCC51653B, 0x0D6053FF, 0x8E7413EB, 0x5FF1D861, 0x06E315CE, 0xA61D70A6,
+0x4D0EBA7B, 0x89D1D2E5, 0x9021A3BA, 0x7C4B9ABB, 0xF6F9D237, 0xFD8D5A45, 0x4F0CB69A, 0x8C544865,
+0xED0E20D6, 0x9F3AC912, 0x11581977, 0x22B91257, 0xB9F1DAF5, 0x6F88C3DC, 0xD552A311, 0x3AF87ED5,
+0x99982039, 0xEC392B2D, 0x5158F0A3, 0xB7D86627, 0x52C143F5, 0x8B2887BD, 0xE7F9F50C, 0x07EB3ECD,
+0x49A1972A, 0xBF7CD526, 0x83849011, 0xD6F4AE8F, 0x30233D12, 0xD58A4E2C, 0xAD59ED36, 0xF66C3A36,
+0x0F9ADC70, 0xFA020E7D, 0xDB1885BB, 0x0464B116, 0xF471AB93, 0xD89CE7F9, 0x9CA93859, 0xB4247350,
+0x0158B680, 0x427EBFAA, 0x8A537037, 0xF197A2F3, 0x202187C6, 0xFBD81B92, 0xC06439E6, 0x094E0215,
+0xE38BE1D4, 0x1FD09C69, 0x8E55E7B7, 0x10270159, 0x333D2701, 0xD24C55BD, 0x24488F0E, 0xCC0C8FC4,
+0xE0B94172, 0xF7AF8C88, 0x28EAD3FF, 0x9FB0006A, 0xD7B5A12B, 0x0FB04379, 0x30D3F4E5, 0x9ED3A63C,
+0xF18C052A, 0x3FB5747C, 0xC1F9DCCE, 0xC672B058, 0x4A969F5D, 0x09AD5659, 0xA7EE5D72, 0xA2DF2A9C,
+0x42A24876, 0xE3B99D78, 0x566AA6C9, 0x9ADD62E3, 0xDD7BCDB3, 0x9BB7EC5E, 0x33C7C178, 0x8D54BF6C,
+0xA8FF97E7, 0x9CB87549, 0x34DDB2F0, 0x805AB870, 0x6F9E66BE, 0x51A22835, 0xF037F516, 0x4AB548C7,
+0x496A9C99, 0x2214F4F6, 0x085F0AD6, 0xA1A7CB83, 0x482A0BA7, 0x0C2C07D8, 0x26D7A61E, 0x2B5682C4,
+0x98933496, 0x9BBE82B9, 0xE8327E02, 0x1DBB9DFC, 0xD20D3EE3, 0xD4937A24, 0xF221CB31, 0xCAADAEC4,
+0x7DFAADB1, 0x1E60F45D, 0x56937F9B, 0x0BD74552, 0x22B33C8B, 0x10C1B3E3, 0xD32C0FAE, 0x18F61D1F,
+0xD121309B, 0x00C7176A, 0x939107B1, 0xC7E22774, 0x571D614D, 0x04919533, 0xC55718F8, 0x81190C2C,
+0xF25F11F4, 0xDA2F753A, 0x91D4F667, 0xC9187FF6, 0xE8DFC192, 0x4FED8FC5, 0x3242BECB, 0x9BFEE10D,
+0x3C3F85E9, 0x9531A125, 0x080D75DB, 0x97758682, 0x17E9312B, 0xD8E1C934, 0x857B5F98, 0xE586989D,
+0x795FC997, 0x3B5D2EBB, 0x6C552270, 0x43B9E404, 0xBED58C97, 0x67B7EA25, 0xDF2F7059, 0x1EEF8CB9,
+0x2614202A, 0x169D52BC, 0xBB3AF9A3, 0xDC9E4BCB, 0x50816E52, 0xBAC39AD9, 0xFB2ED5C4, 0x7CAF6FF2,
+0x02B9BDB3, 0x7BCA28B2, 0xB93C93E1, 0xA816AFDE, 0x8D01C2C0, 0x57C0A2B0, 0xB8E5969D, 0x6E298131,
+0xD2D4B6E0, 0xE3B78080, 0x1A464D9C, 0xC6196069, 0xD8D62792, 0x3D6DEF5A, 0x04CE9479, 0x4C74E2BB,
+0xD14F2483, 0x00578C91, 0x63826019, 0x29B12673, 0x0E160B5B, 0xE8C41D0F, 0xB3D251EA, 0x6494826F,
+0x4C50CB9B, 0xFDF83323, 0x48FA5D7A, 0x06D934CF, 0xD1149C10, 0xF423D984, 0x453C45DC, 0x1D3EB65E,
+0x9497950C, 0x97B4335B, 0x448F8483, 0x8C1F53F6, 0xE942AA45, 0xC960CC9C, 0x19853F7F, 0xD0D43B93,
+0x5E7AC8B4, 0x8F5C1F83, 0x94E34ADD, 0xC8127648, 0x16942D01, 0x4762308E, 0xC0DF7658, 0x0E1FE345,
+0x1E2D834B, 0xD11C96FB, 0x682880AA, 0x1504CE79, 0x9D1E460E, 0x66F4EDE1, 0xDC559909, 0xE6AA7996,
+0x8FBFA047, 0xAEA59788, 0xFBEF259F, 0x75787949, 0x1B1384FE, 0x7BFD3913, 0x8D4135AC, 0x20415487,
+0x1811260D, 0xCAFE7FAF, 0x9A21C73F, 0x4735B4BD, 0x17425F61, 0xB42BF91C, 0x6032CDBA, 0x31BA374D,
+0x41295BDC, 0x8736771C, 0x46B1FA29, 0xBD09A06A, 0xC3E7BA5E, 0xEF33770A, 0xFAF41BB8, 0x780BBE48,
+0xA49E17C3, 0x599C6A4D, 0xB41FA683, 0xA8A94E41, 0x7EE1E652, 0x44D8790E, 0x7680DBB5, 0x66C2311F,
+0x25AE919B, 0x4A7C15B2, 0x60D41203, 0x10AA1BB6, 0x54FFDFD6, 0x19C047C5, 0x4B1FE34D, 0xD52E0D3E,
+0x2D48EE03, 0x5B57A788, 0x888223E7, 0x064C42A9, 0x55573316, 0x47E503F7, 0x99C743DD, 0x444878D7,
+0x4EF0569F, 0x6544B687, 0x9DD9A035, 0xC2B37F1D, 0x1ED815F1, 0x1EFFD84C, 0x99A9B09A, 0x5DD21F81,
+0x933DFF03, 0x1A4BBDDA, 0xA3FF4F66, 0xCC6D7FF6, 0x97333ECA, 0xC7C0EF6B, 0x8F0AFBE7, 0x7B9B34DE,
+0xE5850CED, 0xE748352A, 0x37592ACF, 0x73D80247, 0xF6E43CFF, 0x599079E0, 0x4AC19CEE, 0x1AD35B0B,
+0x9341EA77, 0xDE9C58E6, 0x3528ACF9, 0x50729F9E, 0xFDA79C0F, 0xFDA7E4EB, 0xF2C05BB6, 0x411A3416,
+0xC392F4EF, 0x2DBCDE77, 0x6492AD7D, 0x52131010, 0xD4A69E2E, 0xB97C5A60, 0x1AAF757B, 0x7AC1A16B,
+0x347776CF, 0x420CF0C6, 0x06A627AE, 0x61496E2F, 0x4CE2B0EE, 0xF7957812, 0xA71BCBE4, 0x2E24B70E,
+0xDF0E9349, 0x0BAB8261, 0x641BE48E, 0xA530F50E, 0x1C3A44BD, 0x7ABCBFB9, 0x7D81E9C3, 0xF4B70B48,
+0x4BB666FC, 0xD55749CF, 0xA2C1BDD2, 0xAC5F6D4D, 0x58E9F74F, 0xC64F0CC0, 0x7AE5D17A, 0xEC24266D,
+0xFC53FEF5, 0x7C8D20DD, 0xD227A983, 0xF740ADF5, 0x29F34612, 0xA29F177D, 0xD1903F8C, 0x2263F7E7,
+0x168B5A23, 0xEC7F2F79, 0x582B0C2A, 0xF1B43DDF, 0x850B8C11, 0x1F4CBC22, 0x4B3B048F, 0x3FA1CEF4,
+0xBD15BD75, 0xA94C59B8, 0x8E904C9D, 0xDAB421D7, 0xA41F4873, 0xCF6253A9, 0xFBBDD53F, 0x687AAB27,
+0x900ADF42, 0x707E1026, 0x09F668D3, 0x241D0B1C, 0x05FAE688, 0xB9F53610, 0x34B5E2F5, 0xA196DC2A,
+0xD590000D, 0xCCDC712C, 0x57D64EF7, 0xB87025AC, 0x6433D6B6, 0x20A03E9D, 0xC8F120CE, 0x385B1F85,
+0xA46D1D70, 0xB996517E, 0x238B3C90, 0x8E08FEBD, 0x41A87A09, 0xB63D94EA, 0xBCE307B7, 0x4F638685,
+0x843C71E4, 0xFC28E8D1, 0xA30689EA, 0x528FF51C, 0x68EC5B86, 0x4E5E4848, 0xC9F5CBBE, 0xEB89D913,
+0x4F7FA01A, 0x76013C68, 0x2DBCFD71, 0x95041C93, 0xA83AA400, 0xA0DA9866, 0x95FBB38D, 0x57B8AFDF,
+0x2178FFB9, 0xBEE683AB, 0xED5D1B9F, 0xAE9001FA, 0x661B2579, 0xCDEA1007, 0x5BBEEE47, 0x863FDD49,
+0xDE392561, 0x30FEEBFF, 0x6387C1CF, 0x900F63E8, 0xD9A79F67, 0xA934D0CE, 0xCE7BF1DB, 0x420878B3,
+0x9A3FEEBC, 0xA92F5087, 0x461CC26F, 0x4C553529, 0x1739B789, 0x4EA70F40, 0xFB73B1BF, 0x4C1EC95D,
+0x7203A4C6, 0x4AAD389B, 0xCDD97B8A, 0x87616E48, 0x7D1814FA, 0xE37DA85B, 0x31CC84E1, 0x458B20A3,
+0xB7C39E05, 0x1F33D340, 0x26952BC2, 0x90CA54A4, 0x6F568471, 0x5116547A, 0x7D0447AB, 0x4A60D5E6,
+0x4BBCFA6C, 0xBF1F60E8, 0x24A28705, 0xFACE40F0, 0xDD9720C1, 0x2F3A66FB, 0x4C051CE9, 0x7242B989,
+0xA62942C6, 0x8D7C2765, 0x84DCD7B3, 0x38288F7C, 0x52EEF4A8, 0x3FE63F53, 0x4CF87891, 0xCC40D033,
+0x4BF5CBDA, 0xF284A910, 0xB1527F3D, 0xFA9D11AA, 0x7E8FC035, 0x1D1C6F35, 0xDFA12087, 0x526E6110,
+0x975CF6DC, 0x7E41A5DC, 0x919B1824, 0x8572CC95, 0xAF7409A1, 0x81937859, 0x657DA0A9, 0xACE5D153,
+0x3DDF1076, 0xB912C836, 0x81C54C2C, 0x455A75EE, 0x1AFCEB65, 0x5AD18D45, 0xDC7BC6A8, 0x733B160D,
+0xC7F3AFA3, 0x62D7950E, 0x43510205, 0x5834EB40, 0xE96F41CA, 0x3CDC682A, 0x50E9DCB8, 0x7F33B622,
+0x2BACA7B5, 0x6598D2ED, 0xD11117C7, 0xD4E6E0A6, 0xC549DCDD, 0x4D307268, 0xD1D05767, 0x4BF36913,
+0x8B208F64, 0xC70E4A4F, 0x7CAC1396, 0x118FFAAA, 0x3A70A9A6, 0xC7866574, 0xFCBAFA4F, 0x89FD0389,
+0x30915532, 0x5245089B, 0x66B156D3, 0xFC679ED8, 0xE7121BC7, 0x679F7C08, 0x78A51B6D, 0xA51021EE,
+0x404807AF, 0xD7C7E4AA, 0xAB3A5100, 0x8EAB08F3, 0xD7F83DC1, 0x8AC84B07, 0x29132019, 0xF66CA045,
+0x521AA00C, 0xD223EC5F, 0x14F8B750, 0x96454EDA, 0xE1412604, 0x7AB4AEC3, 0xED0D35CE, 0x69F561CB,
+0x8C38D9A8, 0xC8C15E00, 0x8F292F62, 0xA928F2A3, 0x37F40E0C, 0xE05D7DB3, 0x40918B24, 0x964AB438,
+0x8A97A119, 0x194C6372, 0xD943EA37, 0x8FEDB3FB, 0x3CA6E82A, 0x0B0BD549, 0xE32C7E65, 0x01397B78,
+0xC89B64C7, 0xD32ACD54, 0x245F8E2B, 0x3C5F9C01, 0xBBA0ABA0, 0xCD28A6DD, 0xD4D8BCEC, 0x607108E5,
+0x3D749051, 0x0F090095, 0x274F77FF, 0xBF25BCBA, 0xC24DD829, 0xA2308A86, 0xA2496767, 0xF490A7EA,
+0x77C9AA14, 0x7EDE23E7, 0x5E755AD4, 0x6C82DA31, 0x895E69DC, 0x8137C8ED, 0xDAC98AA5, 0x050EDA03,
+0xA8E69A14, 0x281F9136, 0x90F6AFEC, 0xB777F52D, 0x6AF176B5, 0x15A16ACA, 0x15A9132A, 0x45B861F7,
+0x5089CB20, 0xAAD45F0F, 0xB037D6C6, 0x07A6562A, 0xAF22286B, 0x9C9F5FB6, 0x6BBD46B4, 0x631FE975,
+0x68530B11, 0xCAC31184, 0xAED8E771, 0xEE990B06, 0x2CFD4B0E, 0x007D0083, 0xE18E1D0A, 0x00246A93,
+0x7C4ACBC8, 0x6A46FA5B, 0x1E8ED663, 0x4ACA2F06, 0x4192919C, 0x612E0A0A, 0x5813AB51, 0xCB088F25,
+0x43775061, 0x6129B05E, 0xECA76FAB, 0x95C20357, 0x1D87C9DE, 0xF79EBD1E, 0x101B954C, 0xAD9FB482,
+0x37769FCE, 0x79A0C209, 0x3A9C068B, 0x7D88F314, 0xEC37BA7D, 0xA06A0B19, 0xC2410D95, 0xC0201E89,
+0xFBD6130F, 0xEF279378, 0x6AA2782E, 0x1E575E05, 0x157950DE, 0x81ACEFAB, 0x4C268771, 0xC5D4DE73,
+0xC13524AD, 0x4332EB9F, 0x4BD8F213, 0x312DA500, 0xAB93D6EE, 0xC148EDD2, 0x59BC71E2, 0xF46FA990,
+0x4FA2C94B, 0x6BD98A63, 0x1A723EC0, 0x7477ABFF, 0x8C0F29E0, 0xF3E5B074, 0x15AABDDF, 0xDA3D4514,
+0xCE22042C, 0xA7C30DBF, 0x1BF12E2B, 0x072D946B, 0x352EFAC7, 0xA7F0CAA4, 0x1F4153BF, 0xA80252CB,
+0x9D0E972A, 0x977E9426, 0x0E24D5BC, 0x9F948841, 0xD27D8F1E, 0x8968E70E, 0x588F8B41, 0xDC4E1344,
+0xD7C35D07, 0x065FA50D, 0x3E72EBEC, 0x5B2E8B2D, 0x015BC7AA, 0x7BFC7CE9, 0xF0B65122, 0x3201B30B,
+0x96A055B6, 0x98A9FE78, 0x8FFD11D4, 0x3C3DE3C4, 0xC82464D1, 0xB06A6BBB, 0xF975D5AF, 0xF41D8188,
+0x454F6E78, 0x38404844, 0x30671B85, 0x153A5C8C, 0x1752CF48, 0x542CBEB2, 0x26EBA6C6, 0xFE69E322,
+0xD70823E9, 0x11EF3F1D, 0x97F899EA, 0xE277CE07, 0xB3C12544, 0xB83414E2, 0x38E935A7, 0x76027995,
+0x0D6F44FD, 0xDBC3A314, 0x53D43D08, 0x14BF57A8, 0xB2F5C16F, 0x92D7DDB9, 0x6C8CD3A2, 0x7AD850DE,
+0x102DAC19, 0x6082FD83, 0x9B70549B, 0x1050FD5D, 0xB751793D, 0xFA9D75BE, 0xF33449F6, 0xBA23A222,
+0xB3CFE507, 0x55A45C66, 0x49B03C36, 0xB5ACAB85, 0xCF54C026, 0x186CC2A1, 0x9262F006, 0xE98EE596,
+0x7EE54D41, 0x3A25FA7D, 0x8E322C63, 0xB4558D19, 0x5DE66FBC, 0x41920EE4, 0xFD845DC6, 0xEDD42D77,
+0x499E479A, 0x000F554C, 0xBC9625C5, 0x3B116579, 0xDD3F6994, 0x5821ADA8, 0xA88679B2, 0x2EE52D64,
+0x4F302A89, 0x838257B0, 0x00007B2B, 0x9E010100, 0x12993600, 0xC761D07F, 0x0E1F3DA1, 0xD65D02FA,
+0x771FD0AA, 0xC02149B4, 0x4B9E9208, 0xF823853B, 0x5DFB82CE, 0x03330FA5, 0x9CD5FD87, 0x44ECBBEF,
+0xFBC59A75, 0xC07AEEC1, 0xB05F653A, 0x2F3C042D, 0x6EC9FDAD, 0x691EC699, 0x9F5C229E, 0xC8D266A5,
+0x58F24232, 0xC887CC3B, 0x822A8917, 0x9097577C, 0x424104A8, 0x78551244, 0x33C43A0D, 0xF313B03A,
+0xB09F6578, 0xEBEDD0AB, 0x9A63DC96, 0x0B252337, 0xDE73A3C4, 0xC369A69F, 0xF240F99A, 0x491814F8,
+0x1F953C9D, 0xC5EE0A3E, 0xB11EB1C2, 0x70CAE318, 0x174C040A, 0x57965B85, 0x92398DFE, 0x51EA2E23,
+0x2EA0794F, 0xF877285F, 0xE1958551, 0x7E9A73BB, 0x0C871295, 0xA3CA6A11, 0x8CCAA0EA, 0x463D10EC,
+0xB9913B36, 0xF19AB452, 0x80DBA949, 0x19672B20, 0xC35527F8, 0xB370461D, 0xC331B140, 0x58882A40,
+0xC8FC4955, 0x786791D6, 0xCA4E2B0D, 0xD2AC215D, 0x2E02929C, 0x0F10453E, 0x0A3D6902, 0xF65FC733,
+0x48CA1BA3, 0x6B146AC8, 0x9FC7FFE5, 0xB505070A, 0xC43AAC94, 0xB4201E88, 0x5BAFDE33, 0xF133B30F,
+0x0FDF2725, 0x07F82973, 0xE26C5F5F, 0xF3E9D9F0, 0xDC588866, 0x94041476, 0x7C54CC67, 0x28A74513,
+0x997E60C1, 0xE246DBDC, 0x2CCA2554, 0x6EFC43C3, 0x2C86BBB6, 0x2C411145, 0x2CE3AC50, 0x2AF8E65F,
+0x45058C6B, 0x4359A683, 0x0D954C82, 0x06DAD09C, 0xE44A253E, 0xD90B621D, 0xDE86FC86, 0x7A23C804,
+0x99E6DEE2, 0xD33FFB08, 0x2BCB0326, 0xCC08D366, 0x5D952FEC, 0x0038D3EC, 0xA399C058, 0x271430E6,
+0x75FA5702, 0x7F1066CC, 0x7D23B097, 0x0632CD4F, 0x1740E486, 0xDE5452A9, 0x76D616E9, 0x7B7EC265,
+0x87BBEC28, 0xB9FBCE73, 0x428308EB, 0xE65ADBF5, 0x8A3CA466, 0x3AA5CAD0, 0xBA1A330F, 0x3DFFB3A5,
+0x33BA4F60, 0x99EAA92D, 0x3355DB71, 0x6AE69A92, 0xE613742C, 0x142745B2, 0xF9FF4C72, 0x9A959BA3,
+0x0DEF7B6D, 0x31545D06, 0xD37DBD17, 0x2FE3A38F, 0x2F1B0CC0, 0x898DF8F1, 0x0FCF1869, 0xC49C49DE,
+0x5DBA2D02, 0x9C112784, 0x18278DA0, 0x1A1355DC, 0x425F7541, 0x5A942B34, 0x09B8618C, 0x0DC68891,
+0x85A74687, 0x35B0F88F, 0x11779CEA, 0xA1D69347, 0x4DED7D33, 0x0E583FE3, 0x90BE59EF, 0xD4B19CAE,
+0x5FFC5599, 0xAA49639D, 0x8F03DB02, 0xAAEE8835, 0x3584CAD3, 0x80FA2BC1, 0xEF1293CF, 0xB66C38F8,
+0x979E6006, 0x78A20BE2, 0xF8CA5C03, 0xD925FBD8, 0x00462754, 0xDFA72B78, 0xB12DA56A, 0x538B8B52,
+0x9C256989, 0x6754A3D7, 0xF59549C0, 0x7ACF64D6, 0x0F4506F4, 0x17E6FE38, 0x44A880A1, 0x80F32734,
+0x6733673E, 0xBE48A2D6, 0xE478CAFF, 0xD39868D7, 0x68DD46D3, 0xAD959021, 0xD3CCAFEE, 0x482ABD1D,
+0x05EAF5CD, 0x337953DF, 0x34B5B194, 0x0E7A51C4, 0xDF772C56, 0x6263EB5A, 0x81EFF375, 0x79BB9A5E,
+0x389EACF4, 0x50FAC0EB, 0xBB444D4B, 0x7FD8E03A, 0xDD264C21, 0x174A2BA9, 0xA331C708, 0xA52C94A3,
+0xC982236F, 0xC8354481, 0x36C8C656, 0x03B91BAA, 0x909884D7, 0x8C5F08FE, 0x965D7F64, 0xA99E5812,
+0x6EF8F8F3, 0x1B2B8AC1, 0xE08618BB, 0x4C965868, 0xEF983DC5, 0x5C3D5D6C, 0x294AD1A8, 0xCA9EB66A,
+0x8804F9C9, 0x339338EF, 0x6701E1BC, 0xC69E35E7, 0x95BC6758, 0x9B6A97AE, 0xEC0D870A, 0x3AB8BAD3,
+0x3DEB7720, 0x6BFA655C, 0x3554B9FE, 0x6B399338, 0xAD4FF5C0, 0xA5F529EC, 0x2354A6C1, 0x945CEBAF,
+0x7D581B56, 0x60C160AE, 0xE0ED3296, 0x973FAB79, 0x594C0964, 0x46F63E38, 0xE9D28731, 0x8E30AB24,
+0x0C989FE0, 0x2D617B77, 0xE14655EF, 0x79A2A6E4, 0x3D7BCA10, 0x73433E72, 0xB1BA244E, 0xFA3812B3,
+0xE1529D84, 0x47198D1C, 0xEC3C9629, 0xE538760E, 0x481C0D78, 0xFA88EF18, 0xBF6B3BB4, 0x194C06A5,
+0xDEA4C0A4, 0xFB2CB8B0, 0xD90031F5, 0x59D066D7, 0xC66C5B50, 0xC0D99AB4, 0x4B0725C6, 0x185A70DD,
+0x1869D69D, 0x94716520, 0xCD03358B, 0x9F28C9DD, 0xAFD669DB, 0xF3A74AB4, 0xF5D2CE82, 0x9A7ECF5F,
+0x2F8DE6A3, 0x261E03FD, 0xEE4F16BD, 0x456437AF, 0x3BE3DB14, 0x21144C1F, 0x12C5BDEB, 0x5330E542,
+0xBF096319, 0x84A0621A, 0xEBCB054F, 0x717AA9D0, 0x8E2DD59A, 0x423CCC78, 0x7CCFC2D3, 0xB500A768,
+0xC3E8F6FC, 0xDFADEDB1, 0xC61A66D5, 0xDA66D7A8, 0xAAC1F42F, 0x3EE08D06, 0x128BBEF8, 0x66C01EA7,
+0xE339E2CC, 0x90D6506C, 0x8D4880C6, 0x6719DF66, 0x265A4CDE, 0xEF66EF96, 0x9D3C426D, 0x8AB90A53,
+0xE5E8BF77, 0x759049D6, 0x0FBD29D7, 0x914CDA68, 0xE9A4E5C7, 0x29D0DAC5, 0x2A53F25F, 0x04955391,
+0xF7467720, 0x8CC3F351, 0x4E8B9BCA, 0xF6AFE016, 0x385664D3, 0xC4C1019B, 0xB83E1272, 0xAED65E15,
+0x737EEE6D, 0xAF5F0D53, 0xCAFA47E7, 0xE7797BB9, 0x99C450D5, 0x24E90B05, 0xF154B575, 0x35D31EE5,
+0xB15CB076, 0x6A86E7BC, 0x37F156C7, 0xA113EB0F, 0x7371E9FE, 0x3BA0DE34, 0xE581EF34, 0x0AF39CEB,
+0xE81F9D52, 0xDCE79A50, 0x80A4BC4D, 0xB2B5F9C2, 0x24A597B3, 0x31D49FD3, 0x9E6F026C, 0x381B615C,
+0x0ED33865, 0x27EA30ED, 0xBBBEAEC3, 0xB37736E3, 0xCCD4E8D4, 0x1EE78EC5, 0x18727FCB, 0xF6293244,
+0x1D9C2D17, 0xE5F2710B, 0xF7EF4780, 0xE6B560AB, 0x86BC676C, 0x094BBD2E, 0x38674F2A, 0xF66220C1,
+0x9768B853, 0x34C05FCC, 0x4DC6D171, 0xCE9DA3EB, 0xEDBFF6AF, 0x3E70C453, 0xE6660B09, 0x61E0056A,
+0x7E5F71D3, 0x405278FC, 0x808279F6, 0xD87480FC, 0x4D1C3038, 0x210F6DAB, 0xECE878B6, 0xD5EA8F51,
+0x827E74AC, 0x89205DCE, 0xB0FAB319, 0x1684C405, 0x7AC9AD7D, 0xB7ACE649, 0xD9035FB5, 0xFE1BE69E,
+0x0000F015, 0x9E010100, 0x129B3600, 0x1586EB7F, 0xB2141D7F, 0x23286453, 0x3E94DCD7, 0x000D1EA4,
+0x87177EF8, 0xE67A6517, 0xFCDE3DDB, 0x4842CF49, 0x6DFDF535, 0x1A3A767D, 0xB63CCE0F, 0xC3387AD6,
+0x374ED504, 0xEC8B0826, 0x0761B5AB, 0xD9B756EB, 0xFFA482B0, 0xCD2C9354, 0x4FA3C1FF, 0xBBD6DCA2,
+0x81F7126E, 0x06060FDD, 0x14A4E8D2, 0xA135E544, 0x9A44DB7C, 0xCD8C150F, 0xBC5587DB, 0x23917437,
+0xD58104A7, 0x3D0CE357, 0x84E2555D, 0x12D5DF8F, 0xD68436F9, 0xD3F6C818, 0xEC0AC738, 0x19246FF2,
+0x81D6F99A, 0x38609212, 0x808775E5, 0x75389AE4, 0x1CF38916, 0x0C0FFAC3, 0x1644FFEA, 0xBA555322,
+0xDF1845CF, 0x2CA64CE5, 0x8A5B49B3, 0x73DF39CA, 0x5BBEEA82, 0xB501C21F, 0xCE003B5B, 0x380AC69D,
+0x7C8CE8BE, 0x068099DF, 0x1E3F48B0, 0x7C9E868A, 0x97FF1645, 0xB046C1D5, 0xB9FFC1D8, 0x17215329,
+0xD9EA7C69, 0x1376DA6E, 0x16DDD5EE, 0xC15F4A14, 0xF6AD2A13, 0xE7011FE3, 0x66199578, 0x3BF5A9B0,
+0x21873DED, 0x0F876CF5, 0xCCD77761, 0x1ED13C3D, 0x04547C59, 0xF9AF21EA, 0x7929CFE2, 0x8FFB13EE,
+0x53995F67, 0x1497F8BF, 0x2615EAE7, 0xD33C357F, 0x9F461398, 0x5D829DF9, 0xBA332FA3, 0x35EFDF94,
+0x8EF1A30B, 0x09E883D1, 0x39B3150D, 0xBA9B6765, 0x7B9BAD59, 0x8296EA27, 0xE088B51F, 0x1482E398,
+0x8A0BCA5A, 0xDF278994, 0xFF924739, 0xD20213F9, 0x38E56E8A, 0x24897288, 0x142D080F, 0xB46528B7,
+0xDA2214A1, 0x8FA1563B, 0xD864C06B, 0xB6E6F727, 0x831B3D30, 0x5FC5235F, 0xD430D242, 0xCC0CD20C,
+0x05E10265, 0xB58EAAAD, 0xFD421354, 0x3A015394, 0x20EE7A82, 0x49B10F83, 0x4C332DAC, 0x70214767,
+0x71D9BD05, 0xC6C57465, 0xD1ACDFCC, 0x25575F7A, 0xC7082FB7, 0x887D3F74, 0xA87CFC01, 0x6F30BD55,
+0xC6E2B9E6, 0x434D1BC9, 0x5BCB36EE, 0x0A221EF0, 0x1C216B76, 0x317EF654, 0x03CA38F8, 0x2A688E3E,
+0xCEA9C6CF, 0x3C4F5CA9, 0x24638B31, 0x2A6BF081, 0x4A61D750, 0x1C4CC8DF, 0x4AE62D2F, 0x2AA2ED1C,
+0x6DC49A61, 0x0DE2ABB0, 0x336C82E5, 0xE8B92C63, 0xB17B99D7, 0x323A83FB, 0x1EDFC9A1, 0xC193B97D,
+0x22BDBABF, 0xF9F8A889, 0x9F501FC7, 0xA4F1151C, 0xAE9C829B, 0xA574A2C3, 0x50B3441F, 0xF1379E47,
+0xAF262B64, 0x924FEB90, 0x961699CF, 0xD407A897, 0xD7D02FDD, 0xA80EDF50, 0x67411516, 0x94A2C284,
+0x11B8AF83, 0x48A10BF7, 0x2EAEC718, 0x2610CE98, 0xAF56CED4, 0x8948A948, 0xD328A3E8, 0x92F97C0B,
+0x0162576E, 0x80C0D3A7, 0x94427159, 0xC0468924, 0x8AD9C680, 0xA04893EA, 0x2171CE3D, 0x12552496,
+0xCE002C80, 0x39E6F936, 0xB27312C5, 0xE079412E, 0x6391C7C5, 0x0766D06F, 0xEDA3C973, 0x662CE4FE,
+0x5FB691DE, 0x4C2474E6, 0x3AB22F46, 0x811DDDDC, 0xD83855B2, 0xD28AE5CF, 0x24FCA386, 0xCE406D62,
+0x4321A3A0, 0x6DA49589, 0x71641BFE, 0x83071A62, 0x83EC1085, 0x3C96252F, 0x25C604CC, 0x635A47EA,
+0xAFC93564, 0x7ACEACE0, 0x1A8A3F86, 0xFF685651, 0x9D8F72FC, 0xF9B538E3, 0x5AB858F4, 0x29AAF5BD,
+0xC64F1A46, 0x27EB06CE, 0x8DC2AD8F, 0x27369F78, 0x37CD18B4, 0xD9A5CA27, 0x95BAC1F4, 0x3F7210B9,
+0x29EA4DDE, 0x8F76EB48, 0x817B879E, 0x55A3CC85, 0x74CE9DD6, 0xD6D2DC3A, 0xAAC2125E, 0xF19E5717,
+0xC7A8B83F, 0x175CFC75, 0x3D936DE1, 0x12AB83B9, 0xD068FD40, 0xC049C2C6, 0x66E2D0FE, 0x2CD02F71,
+0x6E6E6C9F, 0xE5841536, 0x0677662A, 0x8D59A918, 0xC2F942EB, 0x4FD7F14E, 0x1288FDBF, 0xFF5DE33E,
+0x2B54875B, 0x7E179FB2, 0x4DD5B211, 0x90036BFA, 0x078392E5, 0x55E64F1F, 0x8D7DDAA1, 0xA9800137,
+0x78505139, 0x76BC75B3, 0xB6E0F433, 0x61605114, 0x7EBB501A, 0x05549F5E, 0x6DEB5269, 0x3DAC3EFA,
+0xF10DC3A2, 0x0B05D95A, 0xEF58E226, 0x6601B752, 0xB74181E2, 0x74026C65, 0xF7BB963E, 0x0B7447C6,
+0xED3F82D7, 0xD79C3807, 0x71A34D99, 0x14DF4216, 0x8123311B, 0xC887F966, 0x802AF15D, 0xF8176DB3,
+0xB36FDB23, 0x542C04E2, 0x26639D11, 0xD896C0AF, 0x8A1AC604, 0x2C727AE1, 0x491AC5ED, 0x10E7CE7E,
+0x4362A04A, 0x66CB72E9, 0xFA9BF3DE, 0xBAB90105, 0xB0EEAEFC, 0xDA8F1289, 0x2A20D535, 0xC63C2DFE,
+0x2F5113D0, 0xEF689748, 0xB174EA49, 0xB13660BB, 0xF77EE6CD, 0xC1A93F2C, 0x41DBEFC7, 0xC0D5185C,
+0x3C0D4F62, 0xE0E2136B, 0xD0AEB438, 0x7FA09A2B, 0xC77C760E, 0x16BDA94D, 0xF4D8F56A, 0x3E6F6BFE,
+0x35AA2697, 0xD81776B0, 0xDD687ED3, 0x24496E22, 0x3FC52DC3, 0x373A690F, 0xC727B1CE, 0x862B4412,
+0xEDFEF242, 0x7A37D612, 0xA381671E, 0x2094A7A2, 0x98280C80, 0x352CD369, 0xC58B2744, 0xCAA9158E,
+0x00FC8CA2, 0x33EC2836, 0xF71B073E, 0x1FF11F1D, 0xFA1C3A92, 0xE92E8F6E, 0x21376830, 0xF7521095,
+0x017B7986, 0xFE232630, 0xAD10992C, 0xAE09E82C, 0x3EEE1F98, 0xFEB7333B, 0xAFEFA058, 0x054878F1,
+0x6A72BA4E, 0x6C75DCEF, 0xACBA3CA1, 0x67A6663A, 0x3A79526B, 0x9479A77C, 0xDD934251, 0x0B20EB02,
+0x244175E7, 0xE6DE3307, 0x1B983B3F, 0x4DD450E3, 0x56933998, 0xBDC303CF, 0x143CD1F5, 0xF1D47B0C,
+0xBFD7955A, 0xAA32C879, 0x4A640DDA, 0x6FE10289, 0x8DA2A778, 0x3925CB62, 0xA2127B40, 0xEBC62253,
+0xC69EF7F9, 0x3AF2566F, 0x90962BDD, 0xB1998B58, 0x73816155, 0x5EAEFA3C, 0x66B61298, 0xD0EC407C,
+0xD7CFC66B, 0x52674869, 0x4974BAF1, 0x565BD4DB, 0xD1EC2AE3, 0xF34F29D4, 0x1BD5842D, 0x4FDE09ED,
+0x75BEFC9F, 0x0203EFE6, 0x0082E541, 0xDA4DC58B, 0x0DE8E151, 0xFD1A4F32, 0x486DB8E6, 0x0FFE069F,
+0xEFBBFA06, 0x26287CB2, 0xCA369D32, 0x11BABCD5, 0x86C93323, 0xE30F80EF, 0xC7A1F201, 0x617215D1,
+0x6FB042B1, 0xE85A3610, 0xF14BA58B, 0x002FB0BD, 0xC067F5F0, 0xC8AE9951, 0x6436691F, 0x47F6F857,
+0x9D6A7494, 0xCE88421B, 0xDCFCAD66, 0x44D3B830, 0x4FE4C27E, 0xF6B2E633, 0xE5997460, 0x27869800,
+0x480029DB, 0x807AE84D, 0x4196F446, 0x9490BC84, 0x84BF7D17, 0x854B8FD6, 0xFFC79AD7, 0xA1EF45FF,
+0x34C7E440, 0xA50FC1E4, 0x379E985C, 0x99E90527, 0x43F4AF43, 0x52597C18, 0xD1FE7C89, 0xF4CE93EF,
+0x9AD97DCC, 0xE967E085, 0x8265938B, 0x1277EA8A, 0xF410D785, 0xA3F61C86, 0xAD293C16, 0xDFBADF0A,
+0xCE9F7268, 0x5B924E07, 0x8560064A, 0x7028CA05, 0x81168EE3, 0xAEB40993, 0x7AFE06D3, 0x65E3E3FB,
+0x89B1F32D, 0xBE8197D6, 0x23C32430, 0xD608E0A0, 0x85A0CA36, 0xBD77F189, 0x2D7C4133, 0xF7A2F07F,
+0xD04FD9F0, 0x0840FD4C, 0xDE549471, 0x359EE923, 0x6C274A5F, 0xE5F0D718, 0xF6BBBFF0, 0xD8A55E78,
+0x19EA627D, 0xD60D6F02, 0x17F796FF, 0x8D99DC08, 0xB7882445, 0x5E36AFE8, 0x4535E16A, 0x7110B1D7,
+0xE729C8F8, 0x5C92A35E, 0xCD19D278, 0x648572C6, 0x30E597DC, 0x985D1CDC, 0x089F7274, 0x12E4ABE4,
+0xC86CD218, 0x8EF77805, 0xBBAD6B0D, 0x1FE54D11, 0xCE2DAE5F, 0x01000000, 0x36009A21, 0xD2B83FA2,
+0x63774059, 0x078871FB, 0xFCECA0F1, 0x095C95C8, 0x54AF8352, 0x77329737, 0x80C425D9, 0x5AC5B379,
+0xA001DF41, 0x3E23DAA1, 0xF0463827, 0x575C07BC, 0x81B2679E, 0xDE502D80, 0x526A42AE, 0xE932077B,
+0x27FD8A14, 0xF4D2D142, 0x6983D575, 0xA7D894A0, 0xF1826E77, 0xC1E5FD1D, 0xE04DFDCD, 0xD00FBFCF,
+0xF3610A24, 0xD9FAD228, 0x6A04776F, 0x8F80A4FF, 0xE678BE78, 0x27F9DC2E, 0x80DED2CF, 0xA898DD37,
+0xF7B4B7BA, 0x6CA8622C, 0x1F609A23, 0xED52692D, 0x8C4C393E, 0x30143F1E, 0xE8BA2F3F, 0x8B0DEF44,
+0x3DF29AF9, 0xC3B7D8E8, 0x87705B4D, 0xC4F31D0B, 0x52E40D3D, 0x3EFE89DA, 0xC3ACC306, 0xE7D92D74,
+0x860CBA1A, 0x7750E0C5, 0x90B3A9C6, 0x9B664F1F, 0x09C6C888, 0xFF79C269, 0x1D4170D6, 0x836B7FC7,
+0xA13FC1E1, 0x57FB31E2, 0xD2E65B38, 0xFE1C60C4, 0x41C0CDF2, 0x0020C178, 0x4CC10155, 0xE734B056,
+0x00016F6F, 0x1C19E410, 0x38B64FC2, 0x226706C3, 0xEBDA1FC9, 0x68EA2B5A, 0xD0243A1F, 0xD75C8194,
+0x0F6428D4, 0x3E9FC67E, 0xE5ACF4F9, 0x84461660, 0xF604D618, 0x1A90AC31, 0x9FFA97AE, 0x94216515,
+0xB4A17A7C, 0x6D2F97B7, 0xF17E7561, 0x47C48410, 0x56F77169, 0x17677355, 0x0D23DA8B, 0x2F5CB045,
+0x560CB6E1, 0x89201011, 0xBC0ED364, 0x37E11988, 0x28E0F7C6, 0x572D6015, 0xF393B8DA, 0xBEE5D40E,
+0x7A7A3951, 0x8A0EC3E1, 0x1F9F6E79, 0x6ED4AE37, 0xDEA9075E, 0x707948C4, 0x8EB4FB9C, 0xBB9F46C8,
+0xE68AABB7, 0x9E3DCD16, 0x688F0B54, 0x547DF7D5, 0x42CF45CE, 0x81D8CCBE, 0x037968A8, 0x6FA8FE27,
+0x0B91112E, 0xFA94F933, 0x9156B575, 0x88B4A0B2, 0xE68331E6, 0xAB5EC2A9, 0x6B9BB89F, 0x9B0639D1,
+0x2AFB8185, 0xDFA3C7FB, 0xA6082D83, 0x6216B620, 0x68CA1570, 0x8FCCEEB5, 0xA81DBF11, 0x2135D967,
+0x7C2AB543, 0x26C53FC0, 0xDB2DCCA2, 0xFB5ACE60, 0xE0A2AAFB, 0x3E3CD6B7, 0x98720EAF, 0xCF2BEDED,
+0xD3C189C5, 0xF914BF85, 0x82CBE650, 0xCD164C66, 0x6FBA45FC, 0x951904F0, 0x8FE43C43, 0xCCA0F956,
+0x3D5351EE, 0xF72CD9D3, 0x0C55408B, 0xD09DE1FD, 0x4E296B1E, 0xB8FA5ABB, 0x94D3BAF3, 0xC2DC0DE5,
+0x33B89891, 0x2EC0748C, 0x41711E3A, 0x338F01AE, 0x90DFC470, 0x47AF42D4, 0xBB69EF99, 0x58526D21,
+0x558F8265, 0x274F3960, 0x43B93288, 0x71CB4B3B, 0x10D116A4, 0xDC8B19ED, 0xB46CDB5D, 0xF51080FF,
+0xEE00CD1C, 0x6BC3BD44, 0x24011D69, 0x65326D73, 0xEE98F000, 0xD05EDBBF, 0x80E84C0B, 0x03245BC6,
+0x6380500B, 0x7F20CF39, 0xE237EDF0, 0xA91F00F0, 0xD4D8AAE4, 0xD8BA80BB, 0xD74032F1, 0x09F3C714,
+0xC3114BBB, 0x043BDB2B, 0x71617079, 0xA36809C4, 0x1C4B22F4, 0x64100F12, 0xD49E0D10, 0x516F42A5,
+0xD6BCED08, 0xC5D586C0, 0xBA70955C, 0xD2800795, 0x306C4C40, 0xE7442761, 0x32D81EB0, 0x62A371F2,
+0x72873F84, 0xBED013EC, 0x2CD95305, 0x62625464, 0x20BC6E79, 0x80D49CB2, 0x8FECDE3C, 0x3F8779C2,
+0x9CB4C35C, 0xAD014D9B, 0x8FAE264A, 0x2118F935, 0xD447B4DF, 0x8E11854A, 0xF2AB07BA, 0xE8D8A776,
+0xEA74D5AF, 0x998ABD81, 0xCE4FB507, 0x75538F6C, 0xEA349796, 0x80FFE1A5, 0x25C94583, 0xFA3E51A6,
+0x4EE8F1AD, 0x151C7A04, 0xAB85B266, 0xB0805B96, 0x0EE3C90D, 0xB89D60D6, 0x095BF254, 0x7283FCED,
+0x55E48E2F, 0x7E83A3C2, 0xB34085C9, 0x870366F5, 0xA7D6B64D, 0x0887350E, 0x677B1058, 0x4047C99F,
+0x71A68958, 0x85B15BAC, 0x39E2FB5A, 0xABE3FE62, 0x54001B1D, 0x5E7B3CA4, 0xE6C38D2D, 0xB59FFEED,
+0xDAF7A106, 0x90042A20, 0x131907FA, 0xAA8043CA, 0xF3ECC5D2, 0x19FF2A82, 0xD84415B9, 0xB968A3DB,
+0xEABB4148, 0xB561BA18, 0x68AF73CB, 0xB7F2BE25, 0xD9945BCD, 0xDCCFD2B8, 0x3B8E7D6F, 0x69A90340,
+0xD53A4313, 0x9E48CD7B, 0xA4F4EA06, 0xFC16E956, 0x00E666E4, 0x98BC4E5C, 0x6D80E1D6, 0x7D17E484,
+0xC7B23034, 0x6DB44488, 0x5F5C0E56, 0xFD49ECF7, 0x92849C47, 0xB715EE3D, 0x54EDE635, 0xA7BC6AF2,
+0xF30FD46E, 0x111A6407, 0xE8019254, 0xE6D27C2C, 0x39FE2179, 0xF267B39B, 0x3ACCD483, 0xFDE05C66,
+0xC3084346, 0xEECA20A3, 0x539D35F3, 0x8747EAD5, 0xAE089205, 0x0CD2B503, 0xB4BA0018, 0x74E7F1B1,
+0x060AB2B0, 0x1CD971B2, 0x27B721D3, 0x4AAB447A, 0xE920722D, 0x737FF81B, 0xB77F4380, 0x490EA86E,
+0x8E33FDB0, 0xE9C90E53, 0xACD3D60A, 0x31E3180F, 0x012CD2B8, 0x60D4D9CA, 0xD16C1C0B, 0x8E85B370,
+0x5F177369, 0xDF3BAE58, 0xFCDA4F54, 0xD6C98279, 0xF3B5272E, 0xAE7BC0BA, 0x71ABA865, 0x50C0C0CB,
+0xB7707065, 0xA57764C1, 0x9D9CC03E, 0xD08F1370, 0xD06EB4F1, 0x94D97FF0, 0xFBC36E3A, 0xE0BFFD52,
+0xA053B9D7, 0xC1BF66A8, 0xFDD8C3C0, 0x8826C707, 0x416E075C, 0x1F28B6CC, 0xB7914F4A, 0x052D234D,
+0x0353F242, 0x65F5A30E, 0x1A145EF9, 0x9DD1FE1B, 0x54F349D4, 0x2B024AF7, 0xDB1E8583, 0xF28DD75E,
+0x3A5DB334, 0xA41F94BE, 0x51513DA2, 0x3A31CEEE, 0x89EF2E00, 0x2BF04646, 0x9538F13C, 0x716F39E8,
+0x906C1D42, 0xEE7DB793, 0x6C71315D, 0x14E70EF4, 0x07F48A6D, 0x7FC22B3A, 0x1E83FE8C, 0xB7C32F2E,
+0xD007F8C2, 0x8F2243E9, 0x11693350, 0x3FC7BBC6, 0x6D11A583, 0xB9861C6F, 0xB584174C, 0xE53A185F,
+0xCEE8CF4B, 0x218FC21B, 0x1DC9CA8A, 0x2ED96FF8, 0xA57CAD44, 0xCC2DEA47, 0x0E73E966, 0xBE4CD153,
+0x8AF34F99, 0x6ED39290, 0x131850E5, 0x74EE2B93, 0x647B01E6, 0xDE7497E5, 0xFA704226, 0x198928DE,
+0x3703B803, 0x883B7CAF, 0x00AB48BB, 0x31CC771F, 0x6F3A86BD, 0x5C68FF2F, 0xF5325E70, 0xB3D11D01,
+0x7B2FBD6A, 0x3C49A9E7, 0xA478961D, 0x8CB7F0D8, 0x3A4CF131, 0x4211D8D0, 0x5EDC04DE, 0xB1A4DB5F,
+0xB0E984AF, 0x0522CAF0, 0x7059A83B, 0x82D7EC3A, 0x0A7A9A1C, 0xFD63A9B3, 0xEE79E2BD, 0x3357ACFF,
+0x6C68D606, 0xEE7DE91B, 0xCC6C6BF8, 0xBA0007B7, 0x61BF41DB, 0xF49F876E, 0xA5F6AE21, 0xBC2C2FC5,
+0xE161507C, 0xE1CCA06C, 0xA4C3A4F4, 0x742904E6, 0x5C2FF168, 0x7CF45CC1, 0x1D544FF6, 0x67248787,
+0xF7404E13, 0x398B508E, 0x7948178B, 0x42BBB62E, 0xC596E14F, 0xABF71ABB, 0x24C19E73, 0x74B0ADA2,
+0xB499100A, 0x9E473AE1, 0xFAF6E4C4, 0xA310F665, 0xAD24E399, 0xE47F4AD6, 0x841E7182, 0xE707AAD6,
+0x9BD130E9, 0x9B3E64B6, 0x5D3219E6, 0x1D9E49FF, 0xB62E2A64, 0x181F11DE, 0x64F0493D, 0x764B891E,
+0x074B0714, 0x44634BFE, 0x03104331, 0x7774CE44, 0x3B79DC77, 0x1D58FABE, 0x826D5BC2, 0x4577068A,
+0x12BBD731, 0xEA72A5F8, 0x507BD20A, 0xA16FFA76, 0xC07A261F, 0x20EBDCDC, 0xAD3606AC, 0xBFB257AB,
+0x1245F5A4, 0x703FA6B7, 0x2E1CE8D8, 0x6C2625A2, 0xA28354E9, 0x9737F0BF, 0x6B968731, 0x817C7210,
+0xBBFE2199, 0xCE709DD8, 0x50D788E8, 0x5EDDF38B, 0x983A7C39, 0xEE002193, 0xF35595C4, 0x372211E1,
+0xB814CC5D, 0x0DCCA9D1, 0xAF65C615, 0xB843EF7A, 0x6A3ED21B, 0x16C843DD, 0x3981DA5F, 0xDB8F8CBA,
+0x317249C1, 0xAC7A5843, 0x64875BCD, 0xBAF2208D, 0x3FC76577, 0x8F5B661C, 0x82AA2088, 0x461F9547,
+0x12C98E32, 0x87858B54, 0x45356743, 0x9BF95628, 0x2E777342, 0x0EEBD4EA, 0x53455686, 0x0EF6BDC4,
+0xA6603BFC, 0xD56FC47D, 0x30DB39F1, 0x57F76977, 0x47645EEA, 0x3CEBAA6F, 0x912E01C5, 0x268D9F81,
+0x4554892E, 0xB1EA358D, 0xB27F830A, 0x6449BB28, 0x20526D65, 0x5BC15137, 0x65366E99, 0x00FC203B,
+0xCA12101C, 0x9A563E1B, 0x1C5174EB, 0xF6C67028, 0xC9BE15C3, 0x02FA0AEE, 0xACE9F7A9, 0x88E3B6CF,
+0x5D310F31, 0xF2BF2915, 0x26AD0FDB, 0xAC4E8A3B, 0xB1BAD1B4, 0xC4E146C9, 0x58D5ED77, 0x64F8B693,
+0xA81D41EE, 0xCBAD256B, 0x05359812, 0x8542F796, 0xE0F87E21, 0x54241A8A, 0x9C214665, 0xD0930FFC,
+0x94057D1F, 0x2B62E7F2, 0xFB13EA57, 0x1ECF3183, 0x52333BAE, 0x1B23BE3C, 0xFA2B4248, 0x97B10F67,
+0x6EFADC43, 0x1AAD7A2B, 0x7F3177BA, 0x20220E36, 0x7C38F96B, 0x8DE015F0, 0x7534A87D, 0xB679EBB4,
+0x900617F6, 0xE6671E35, 0x82AACA5C, 0x39A8D24A, 0x707025B3, 0x3CE9E4EB, 0x06B98093, 0x25F37381,
+0xD1B70067, 0x6756E903, 0xAA2BC88A, 0x5AE59519, 0x4175CE54, 0x6F80E78E, 0x0DAACB6F, 0x4138ACA2,
+0x17848F25, 0x8B5A6A8B, 0x67360D1D, 0x6FE2F825, 0x52F51662, 0xE39EBE16, 0x80183076, 0xF8FABEC8,
+0x61AAED9E, 0xE9D6F2F8, 0x48BC2587, 0x9C7BE352, 0xB51D76DB, 0x39EDEA56, 0x3B5CA3DD, 0x53B5C16C,
+0x737AB717, 0x6E8C9E8A, 0x8E246A97, 0x2894E120, 0xD604ADF3, 0xF20A6E3D, 0xF02A7CDA, 0x60A7D3BD,
+0x8471F096, 0x438DFB0B, 0x07858CD7, 0x0D3C875E, 0x3CB9684E, 0x8022C9A1, 0x28D0D7B0, 0x26F7BD7A,
+0x1F04E2DB, 0xF066AD82, 0xBB509160, 0x7C2ACD49, 0x214B77EB, 0x2D76A98D, 0xCFE0693F, 0x9FD5A026,
+0xD68571B5, 0x6107E48F, 0xFEC5F4E6, 0x6F85A2D2, 0xC68015CB, 0xDDAF4D54, 0xDDA9EECF, 0x217D042A,
+0xBFA0B7EC, 0x3665E91B, 0x0B9AA860, 0x1BE62559, 0xB1999912, 0xBDF4FDF6, 0x3C89C547, 0x75C49CE1,
+0xF8184E64, 0x4BCF9BA0, 0x42CB1ED6, 0x291DBA15, 0x03264A77, 0xA76DE201, 0x24CE0F29, 0x05053D6F,
+0xDB6163C2, 0x47F64177, 0xFEF8E886, 0x4E0C971C, 0xE6632944, 0x67EFB129, 0x880B2986, 0xBF57FFBD,
+0x355CF406, 0x46B782D3, 0xADF15076, 0x255E22B3, 0xD4E8EF34, 0x99E08A9B, 0x57D046B5, 0xFE272E9F,
+0x28CA968F, 0xFA7CC159, 0x3DA020AE, 0x98111CE6, 0x446F6921, 0x26B8251D, 0x58432024, 0xF25FE74A,
+0x27112E09, 0xB6617F8A, 0xC9F8B5D8, 0x7EE51DBD, 0x59CBBB42, 0xFA5CE634, 0x1B9FC90E, 0x84D3A69A,
+0x8E141482, 0xC37123BF, 0xA63C7698, 0x96D30345, 0x47E96749, 0x5B58EFD7, 0x259F1559, 0xFDAD1C2E,
+0x7E3EF298, 0x0FF444B0, 0xB7A38339, 0xE52B44C9, 0x08702DD9, 0x0387A7E1, 0xF349827B, 0xD2939E89,
+0x7543091C, 0xCC702DE3, 0x3A34A860, 0x5F936F75, 0xA7A3FF67, 0xABCC46DA, 0x28CB7E53, 0xCF8FEBC5,
+0x1DC6421B, 0x6A510FC3, 0x3FE991BF, 0xB5D10BD0, 0xB663B614, 0xD18CFCC9, 0xDFA6414E, 0x36051482,
+0x051553BC, 0x2F50AD88, 0x1C4F6C76, 0xA2E4A9CF, 0x41DC06FE, 0xAFEF1265, 0x11032B0F, 0x4AACABCF,
+0xFFC6B041, 0x3AFBE080, 0xA89D43A9, 0xD3D18692, 0x2665099C, 0xADC0946D, 0xEF5741B4, 0xA0CB4213,
+0x2013B2F7, 0x2CC12F66, 0x18DC9A4A, 0x53338B76, 0x2DCDC3D8, 0xFC5AC6D9, 0x24AF899A, 0x87F16F8C,
+0xAF8C5025, 0xE145DA67, 0x33189A87, 0x336517C8, 0x2D15122E, 0x4189A6F8, 0xA9ADA527, 0x927D18EA,
+0xF955E45F, 0xB5A446EC, 0xF6AD349E, 0xB068A78F, 0x60F8230D, 0x692398F0, 0xAC50098B, 0x6D1C789E,
+0xDA773950, 0x286A036E, 0x9688E414, 0x460030E9, 0x269B56C4, 0x5F9336FC, 0xDF86F265, 0x022629B1,
+0x717BE380, 0xA5B31300, 0xE7596AFE, 0xBE7AA783, 0xF972A6E6, 0xBE7C6118, 0x87A72519, 0xE93CE888,
+0xDD39DAC4, 0xF1C5D072, 0xCFF1A061, 0xFCBCB5D3, 0xD8D0886D, 0xFD4D31A9, 0xC1F1B32C, 0x748D536C,
+0x49A76CDF, 0x3372DB34, 0x79B120A6, 0x9CABB184, 0x952302C3, 0xBA9134EF, 0x4A6D370F, 0x65935C09,
+0x4B1A208D, 0x5EF564BF, 0x31937C42, 0x0D8B40A6, 0xD031CFFB, 0xFA474554, 0x072D0B94, 0x32CBA752,
+0xA7664341, 0x83D41D93, 0x30DAA6E8, 0x1A3EA806, 0xD746D026, 0x195C1457, 0x5D3A2070, 0xF969F726,
+0x9B7408F4, 0xA3142A22, 0xE34DAED6, 0x903D0AEA, 0x41F0E964, 0x9D7FE7FE, 0x865075F7, 0xC02FEF8A,
+0x6FABE3E2, 0x7DA82554, 0x211E3B1E, 0x3B3DFEF6, 0xD5B96286, 0xFB7E9AD6, 0xBA93FB8A, 0x9AC7B121,
+0x7C80C119, 0x7F98BF6E, 0x8197B485, 0xF9987C2B, 0x35B1F16D, 0x9EF7548F, 0xD950DADD, 0x5B2C7183,
+0xA8611298, 0x1F4F2BE1, 0x1B919379, 0xAB17D523, 0xB7D1E9ED, 0x3398F505, 0x770F30D3, 0x16B0783F,
+0x57CBC56F, 0x7F430349, 0xDF42FE9C, 0x3CE1C4B5, 0x5F1A907F, 0xCAEC16E8, 0x45596B66, 0x739C3DEE,
+0x5B0669D7, 0x16B99841, 0xB4D5087A, 0xE41BF4A7, 0x011EBDB8, 0xDA15AEC6, 0x46CA3462, 0x6A49ABC9,
+0x44D5D643, 0x21708181, 0x938D3E63, 0xD5A894F6, 0xE918B7D0, 0x24DB5C2E, 0x12F11ACE, 0xBA6A85FA,
+0x282EABAD, 0x762EEC43, 0xCD85DE22, 0x4D7329B0, 0x75DD8C79, 0x08FE863D, 0xE79B3361, 0x7E44E3AA,
+0x764F1E21, 0xDDD4B6F5, 0x7EFEF3C3, 0x7B7E357D, 0xCA0B10B1, 0xA9CB38B3, 0x0EC157DF, 0xCCAF34F9,
+0x92E68C10, 0x9419F1CD, 0xEFE4C52A, 0x41979954, 0x63364C48, 0x2C60326E, 0x2E3F4385, 0xB1665816,
+0x35364BC5, 0x652E462B, 0x0C391460, 0x43C02466, 0x3173B73D, 0xF514A0BE, 0xF7B7E437, 0xAE1CD72C,
+0xA06951E2, 0xA92C876C, 0x479BA322, 0x727388F7, 0xAF24E9F5, 0xC131D8FC, 0xC3432AEE, 0x703FDCA2,
+0x5521C0FC, 0x1E3F92F5, 0x1445A18F, 0x873F5460, 0xBB3A4FF4, 0x8AEB1764, 0xE3842C16, 0x730D591B,
+0x17CB0C6A, 0xD01B04C1, 0x6CC125E0, 0x2AB21300, 0xD73B598F, 0xF70510CD, 0x6218902E, 0xC7AA1213,
+0xAF754EA7, 0x27456DA0, 0x038FB0F2, 0x311E9A5F, 0x902755C8, 0xFA54DDBF, 0x6ED5BAA0, 0x744DF1D2,
+0xE57836BE, 0x71761D73, 0x2A0CAEF3, 0xBE57067E, 0x2B1C4D81, 0x08CF96D5, 0x72234E73, 0xA2CFDF15,
+0x47DD9A14, 0x0B00CFCE, 0xC2DD5EF6, 0xB208E82A, 0x84B9E308, 0xC54F5317, 0x5C7E3E93, 0x1ACC2947,
+0x03DF7041, 0x7FD5C453, 0x0B4AF6E4, 0x900E9752, 0x940E9CA8, 0x19BC62EC, 0x07C9D0AE, 0xC196CBCB,
+0x244DADAF, 0x83AC0DDD, 0x12AEA8D2, 0x0B394B80, 0x0BCC3121, 0x6729EAA7, 0x92A6DC77, 0xF4267805,
+0x6F8EDFD8, 0xF86B5E15, 0xBA36E472, 0xAEF5D816, 0x19A58AFA, 0xF6370674, 0x293814A0, 0x3BCDD2F4,
+0x6D006E6D, 0xF408A09A, 0x56BB63A0, 0x3FBE0B2B, 0x0A4FD24F, 0xC6256337, 0x99B2BF24, 0x0C4FBA3A,
+0x22DFE966, 0xF2A0F891, 0x3EE093B6, 0x566BCB39, 0x250D263C, 0x27BA8BD6, 0xE9713BDD, 0x547C6FBA,
+0x9F2F4120, 0xE094CB26, 0xD4994E85, 0x87045F69, 0x85EE9596, 0xBDE50A8D, 0xCE270F54, 0xF1632777,
+0x880DF53A, 0x4078BBCB, 0x9D6C604E, 0x25BC3B32, 0x4D5EE945, 0xF408C7CA, 0x156ADCC4, 0x452F3B63,
+0xE8C52DBF, 0x1FDFD795, 0x96B16722, 0xBF2805D8, 0x24251DED, 0x4C8EF7A8, 0xFCF6891F, 0x32B77DBC,
+0x8FDBC45B, 0x6EA2DCC2, 0xA6142A21, 0x076E005A, 0xDA703DC9, 0x2DE77DB9, 0xEEF887A2, 0xE289A012,
+0xADFDFD18, 0xB63E2C13, 0xBA1D6CFD, 0x7EBB1EAF, 0x02D02B56, 0x46FCF0EA, 0x955EF60E, 0xDD3DBF4F,
+0xA47CFD81, 0xA3DD7CA8, 0x9169A8F2, 0x8131AD04, 0x34F5F8A2, 0x8F866D86, 0xA7CE96F3, 0x578D7026,
+0x050A3562, 0xA8816B65, 0xFDAE7791, 0x8B8B0B1F, 0xA58621CA, 0x81FFDF8A, 0xF76E992B, 0x212A644B,
+0xA3A03179, 0xA88A6CBE, 0xE2C75723, 0x89B5B555, 0xCCDFF961, 0x5E39F173, 0x497861E4, 0xF5696E01,
+0x813EB739, 0x27C42D56, 0xAFF7FE16, 0x31E9FE49, 0x2C141BF9, 0x8979EB94, 0x9411B9C7, 0x0E875195,
+0xA9B6BCCE, 0x129F0FDF, 0x8FAFD377, 0x2FC2C51F, 0xDC51BDFC, 0x69ECFC36, 0xE4A6EAF6, 0x1BAC97E9,
+0xC21345D7, 0x40EF1AFE, 0x3DCCDDA6, 0x0DCF683A, 0x05B15F99, 0x20CF159B, 0x942F8036, 0x9A15572E,
+0xF66608E0, 0xA387B8E6, 0x27BDE7BB, 0x59F6B97B, 0x1E4186D0, 0x6B24309E, 0x77A72BE2, 0x3808D67C,
+0xB1255815, 0xB7CC966E, 0xBDD465D8, 0xE348D40F, 0x861B878D, 0xC97F7244, 0xEB36477D, 0x71FB2E64,
+0xF5759405, 0x97948ED7, 0x95AF8C86, 0x658468AF, 0x4AA2B659, 0x162B20BE, 0xCA291A9B, 0xB3373A76,
+0x0CB79E27, 0xF2077CEF, 0x610B9BD3, 0xE3F1E57F, 0x25EF5387, 0x5F862988, 0x99DAEFC8, 0xD8A23030,
+0xB7DB9E4B, 0x9041EF81, 0x0587A708, 0x47E34BF7, 0x7B7CF480, 0x70630228, 0xCAF2D262, 0x719BE82B,
+0x5C03CEEE, 0x9747ACD2, 0x269EB38E, 0x73DB6231, 0x4256A8A4, 0x2B2073EF, 0xFA675227, 0xD2F62436,
+0xC40424DD, 0xCF54E876, 0x2B2BB2D5, 0x4AAA3F9D, 0xD9860002, 0xB65FD38C, 0x986FC744, 0xC2AE115F,
+0x0126747E, 0xB4B54458, 0x0EDB3681, 0x38DDAEF5, 0xE0620C97, 0xDE554221, 0x26B10994, 0x1A391706,
+0x726967B0, 0xAD30B679, 0xEE042336, 0x3DEBC98A, 0x5B829802, 0xDB0524EA, 0x5C120B13, 0x27B36971,
+0x55009A7B, 0x15629BFB, 0x696CEE93, 0x66F78BB5, 0xD29929FE, 0x1F1B708A, 0xA2E95732, 0xC5F48F48,
+0x2FBB9406, 0x92734892, 0x1BC0903C, 0x33FBB7EE, 0x5D2AADC2, 0x932C0408, 0xD64802E1, 0xE294B575,
+0x5D600F80, 0xDEAEA443, 0xC22780A0, 0xB931F2CD, 0xBB4A69D2, 0x3629780F, 0x31F74539, 0xBFEEFE0A,
+0x3AF8E583, 0x45CA2CC9, 0x756D3398, 0xA7F6ED02, 0x7DE94B8F, 0xF5F60A2B, 0xA379B773, 0x75A036C6,
+0x360D78C9, 0xEF473B65, 0x69F0F90C, 0xDDB265E7, 0x7889B8BA, 0xE316520A, 0xBAA401CE, 0x45ECC260,
+0x7050687D, 0x692EA306, 0x0576AA9C, 0x56D1C0F8, 0x946FE807, 0x943882EE, 0x05458AE4, 0x29703E6D,
+0xEEDFCDB5, 0x5C1E0FFC, 0x865EBE51, 0x3EE5BA1B, 0x958DC8A1, 0xFFB041E4, 0xB3D49A5A, 0x0CEC43FD,
+0xF6251133, 0x423E4179, 0xFDABB503, 0x3EAF5A72, 0xC65F05F6, 0xFBC59E7E, 0x1775E052, 0xFC16B6AD,
+0x48468292, 0xBE82930F, 0x84792B60, 0x69E0254B, 0xDBDF7D3C, 0x80CE84E8, 0xCEA18F0E, 0x78A4DA07,
+0x561BE301, 0xE211626C, 0x909647FE, 0x0BC0997C, 0x97F956F5, 0xBE201348, 0xE356BF75, 0xAB68B450,
+0x87AC77A4, 0xB69E8288, 0x17A62D38, 0x508C5312, 0xF9CB6C5C, 0xE79D195E, 0x4A5BD086, 0xDFF9AA3F,
+0xE56E8F22, 0xDF681F71, 0x844A3F63, 0xCBECDC6F, 0x26710EDA, 0x95FA807B, 0x4A9C8204, 0x16B6963B,
+0xDBDBFA54, 0x4303CF8D, 0xFEA51E33, 0xAAF76E29, 0xD82FD0BC, 0x135F9E6A, 0x1BEA9DD4, 0x94682974,
+0x7522BDB0, 0x91C26459, 0xA9DB1156, 0x148040E9, 0xDCBCF8D7, 0x7054CAAD, 0x79C3C6E3, 0xFAFBD50F,
+0xB4CABF28, 0xA1834610, 0x0B31EEFA, 0x42813968, 0x99075C84, 0xF6F27FDA, 0xD735CE9B, 0x6CDF32BA,
+0x9C157448, 0xA1A7D916, 0x5D5B3959, 0x68A974BE, 0xB035B4F0, 0x82C2981C, 0x68A85F5E, 0x91124462,
+0x6EAB0265, 0xE79BC8F6, 0x5B2D0829, 0x2810A7D9, 0xB8C75CD4, 0x499A9719, 0xBB78CF38, 0xD026AEDC,
+0xC4BFFF06, 0x728F57A6, 0x0803BEDB, 0x449A0B4E, 0x5A9F3AB4, 0xE9FB7B4C, 0x687A5046, 0x4DC69748,
+0x4297ECB8, 0x3F573ACF, 0x802775B0, 0x01000000, 0x38009E01, 0xD17F129F, 0x136E30EF, 0x7D2F784D,
+0xD6900E2E, 0x38401BBF, 0x9CE3ED29, 0x730EAB20, 0xA04CABB2, 0xD7356BC1, 0x48FA7F75, 0x4AE336E7,
+0x62C3E9D2, 0x69767E92, 0x425E463B, 0x3ECEA591, 0x39A642D3, 0x2D085800, 0xE957F54B, 0xA9DBD721,
+0x2276AE5A, 0x26C92510, 0xD4499714, 0x693C981A, 0xD1C36F7A, 0x76FBFC44, 0x0CE052EF, 0xED952C52,
+0xE5DBB909, 0x3F65F360, 0x5D0EE895, 0x042ED625, 0xD5FA6A59, 0x48F36A00, 0xD397AF00, 0xA679880F,
+0x1B9BF6D3, 0xA28A9B91, 0x64A7CBBC, 0x0544E57D, 0x59209756, 0x2071C5C5, 0xA4D5CE38, 0xD9B9EFAD,
+0xD4247EEF, 0xF313650A, 0x50EDBF49, 0x2D163A5F, 0x5192B8F2, 0xA2359A59, 0xC876DFCE, 0x30DECAC4,
+0xC81D092D, 0xF4007B51, 0xF88B520F, 0x20DE3777, 0x3569DEF0, 0x0CCD20A2, 0x6D5E63B4, 0x256EDD58,
+0x040E8A3B, 0x25D5A6A7, 0xA93CBC2A, 0x451BCF0C, 0x8F8D551C, 0x7BD4CC66, 0x1B245608, 0x08FB51E9,
+0x94D330B0, 0x184ED2D4, 0x43B2F5F6, 0x12FB3547, 0xD8EEF1A9, 0x8E5E2F8A, 0x37F39067, 0x67C6E587,
+0xF4985EE8, 0x92703B08, 0xC9A6AE37, 0x65BBEC4D, 0xC94ED56B, 0x7DEE7099, 0x93B974F8, 0x6445CAE3,
+0x132404CD, 0x021CA38A, 0x85ED9C21, 0x8E01798D, 0xCFE323AA, 0x7476A085, 0xE9E4C06B, 0xA2F8173D,
+0x18C47FFE, 0xB0972958, 0xE2622277, 0xFF8E3202, 0x501B5285, 0xD4B6879C, 0xA975F95D, 0x45956637,
+0x5F87CBBD, 0xE472F985, 0x72C4112F, 0x438A7ACC, 0x3F8CC2C3, 0x85BFE02B, 0xC26FFF3F, 0xBAE8FFBD,
+0xC0B57DCD, 0x6E405503, 0x344A4633, 0xE124DEAF, 0x35B40F05, 0xD9D2CEF0, 0xF556975D, 0xBB16C4B6,
+0x218FFFD0, 0x85F21157, 0x9BEABE63, 0x90A92E84, 0x38A73175, 0x3C7721F3, 0xFE446A40, 0x161795DE,
+0xDCAD1EFC, 0x4022C87E, 0x24B6C369, 0x285CA896, 0xAA6A434B, 0x79CB81F3, 0x2546C219, 0x677A0F15,
+0xF24A46A5, 0x387629E3, 0xEC823B16, 0xDE43FAE7, 0x6B865F52, 0xF8CCBA6E, 0x6163B9FE, 0x451A9B50,
+0x7FEABAE9, 0x5D58E11B, 0x3C7A8550, 0x91EF06F8, 0x07A4B21F, 0x17DB59D9, 0x0B760EEF, 0x33530225,
+0x7A076322, 0x3680CD03, 0x5B7D8322, 0x8E2054C2, 0xE939392D, 0x7BFC9710, 0x662610CC, 0xF69EE85E,
+0x2AD58682, 0x2BDD2DCE, 0xE6C08C67, 0x8CEF7D50, 0x30B1A22B, 0x4C59783A, 0xED095AEB, 0x4010958E,
+0x917AFDFB, 0xB55059E0, 0x1C21824F, 0x8DB7EFC9, 0xF10E0ED5, 0x6AF38337, 0x34C7518D, 0xBFC5FD3E,
+0xB44F590D, 0x2BCD3BA2, 0x36818FF9, 0xF14D5223, 0xA7C1060E, 0x4D2A85E5, 0x211A8B95, 0x3CC3B867,
+0x79F44EBF, 0xDA2FF098, 0xBEEED354, 0x04A09A92, 0x2501A6F4, 0x3B9B95E3, 0xEA98BF2E, 0x3C96FF81,
+0xBE511B8A, 0x6C9F69E0, 0x64B96AE9, 0x2C594AC6, 0xA413022D, 0xAD8E08D8, 0x40A3CF74, 0xC2FCC62E,
+0x6C278CCE, 0x2A575C52, 0x1B919C78, 0x03ABAC1F, 0xFDCC4568, 0x0B17684B, 0xC2C19612, 0x02084912,
+0x7946EDB7, 0x3C9795CF, 0x27BD3435, 0x852B9AEA, 0x89083655, 0xCF6150DD, 0x74B526A7, 0xDBCC4633,
+0xF0FFDB8A, 0xA153B29F, 0x716A82FC, 0x9ECB975A, 0x6D3B62DA, 0x6C87896E, 0x58D641CA, 0x9F9F6FF9,
+0x2596E4A6, 0x0B58F18B, 0xDFC850C8, 0x929FA7C9, 0xD519DE18, 0x8B588A56, 0x88FCE698, 0x6F53D6D1,
+0x80DD436B, 0xACAD9339, 0x9F5E3D8B, 0xF58C18D5, 0x9CEFA826, 0xB456A0E1, 0x0FB3950C, 0x0F9A732B,
+0x5F65D893, 0x562B50B8, 0x38D3E098, 0x2876566F, 0x4F19BCE7, 0x4F33E6A6, 0xA81DCD53, 0x5AC3F511,
+0xA1BD4103, 0x9F005667, 0xED0FDFA0, 0x254BB45A, 0xF2BA9271, 0xA7D58442, 0x4A67EF08, 0xD866BE32,
+0x1E4ABFDE, 0xCEEA363F, 0xD1EF5153, 0xB34145A9, 0x7500BA5A, 0x85CF72AD, 0xF0A50ED3, 0x1061DCDE,
+0x54AF248F, 0xC659EC70, 0x88677D2E, 0x600622BA, 0xA70E005F, 0x61A0DB42, 0xED5A205B, 0x56D84C80,
+0x6A5C7665, 0xAAC4B2F4, 0x92DD6B86, 0x45C8D71A, 0xEE37AA03, 0x6E2BAB54, 0x35169B6B, 0x67F2E485,
+0x20D3D705, 0xE498B57B, 0xFDF8D9C3, 0x70A04426, 0xE2A85C48, 0x59D2C224, 0xEC9FEBEA, 0x3BDC18B9,
+0x20B886AA, 0xFC2CEF9E, 0xA7C5481D, 0x050E9B54, 0xC4D07F9D, 0x99FC29F6, 0xA593998A, 0xA12C2160,
+0x5D4ADD6B, 0x447C3016, 0x91AF09E3, 0x08AC6DAC, 0x368A9B85, 0x551DCC46, 0x8EBED516, 0x7A3632BE,
+0x24EF3BEA, 0x61D0C9FC, 0x26F61B12, 0xD0B9CD5D, 0xDDE80FDB, 0xCD9780B6, 0xB5077CCC, 0xD090B4D8,
+0x94D2BE1E, 0xA54F05AB, 0x657EFE03, 0x0C03A36B, 0xE426ADD5, 0x2B3FE69D, 0xDA579893, 0x64E025E9,
+0x1AC720F3, 0x3624D57B, 0x4871168B, 0x69D62267, 0x6240CDB4, 0xE9D7AF67, 0xD8BE5A1A, 0xDF3E3A96,
+0x9C975E81, 0xE010F89E, 0x59F42A0A, 0x98C5F239, 0xDE19EC9F, 0x2FF976FB, 0x2C9D0B29, 0x60D599F2,
+0x8704C0EB, 0xC8C4FA5B, 0x400126B9, 0xD8573D4B, 0x861D4E39, 0x472A3BFB, 0xFE2FEC65, 0xC1293F8A,
+0x04718B56, 0x00556305, 0xDEE76108, 0xAE8224B5, 0x013B0E03, 0x1E509617, 0x59D03281, 0x7FC674BD,
+0x6C2E0007, 0x143C8A41, 0x6C967391, 0x6DDE24BD, 0x7F4D59C7, 0xE45D563A, 0x06357D87, 0x5A39EFD4,
+0x30B7F7F0, 0x80B1D6E6, 0xD641BFDE, 0x4AEE35E6, 0xE4F670EC, 0x2B0783EE, 0x0575E352, 0xCA0CD915,
+0x96FDCE28, 0x8837C1AC, 0xB3B284B7, 0x71655E26, 0x777857A9, 0x5C32792E, 0xF0B004D2, 0x247C8B80,
+0x2022EBB5, 0x570139EF, 0x45BCDE7E, 0xEC7CBF18, 0xBF037EA4, 0xCE86E969, 0x8551B9F9, 0x779CC4FE,
+0xEB4BA66C, 0x9EA00E82, 0xB6500CD1, 0xC2ED7444, 0xD797D82F, 0xFB997F61, 0xF8D8F6F7, 0x9214A4E4,
+0xBA38A516, 0x205356BB, 0x4B35556E, 0xA1C75B73, 0x10A4F56A, 0x55258A40, 0xA7029F1A, 0xBC4F18A2,
+0x727C3C46, 0x5E6CD98A, 0xDE62D347, 0xCABF57BD, 0xB97F6F1A, 0xFF62487D, 0x5E993C60, 0x3CF7C6D1,
+0x49D2BB02, 0x35BEB605, 0xD4D3A4F9, 0xBC4D050D, 0x9F249BEE, 0x234D6EC9, 0x6067DC55, 0x3BA85B15,
+0xCDA84A21, 0xBF6940A4, 0x28D5A611, 0x59070EE5, 0x090D2531, 0x672C50C7, 0xA4749639, 0x2ECF2CBE,
+0x85310CDE, 0xED87FF1D, 0x84CF5CF5, 0x9E137AC3, 0xC96A6BD2, 0x000000FC, 0x009E0101, 0x7F12A138,
+0x313EF0D1, 0x9448307E, 0xA646D57A, 0x90B5DDD7, 0xDE2B79C5, 0x572C3C6C, 0x3791C469, 0x6DC8BFF4,
+0x3CDC3EAF, 0x072FBE18, 0x759E5BF6, 0xD407B71C, 0xD2914C56, 0x583261DE, 0xBB01383F, 0x690E5840,
+0x466AEF7E, 0x2D78C3D6, 0x7627A0C9, 0x7753BAA2, 0x00F1A1E1, 0x325FB842, 0xC215FD2B, 0xD67CF3B4,
+0xFD0D7747, 0xA2762D79, 0xB503A52C, 0xC3BE43CD, 0xA9931B50, 0x30B4FF16, 0xB301A698, 0x6EDFAC08,
+0x4AFCD731, 0x9AB5E8E4, 0x3D83CF50, 0x1F86571A, 0x81A36245, 0x2CCC0500, 0x2B1C80AF, 0x9D2FDB50,
+0x3CB00525, 0xA18FD5FD, 0x89CA5387, 0x1C016758, 0x470CA646, 0xF3C7B9C6, 0x2E49285A, 0xC8B8B076,
+0x7A9649FC, 0x3F16B7F6, 0x08919332, 0x336FB2F2, 0x0364A424, 0x4B966187, 0xBD1B8569, 0x9B14EE08,
+0xDBE03185, 0xF63FE7F5, 0x8124DFD9, 0x7B13AD22, 0xAE4B0C2F, 0xF072F118, 0x40B44372, 0x41AC41AB,
+0x2797A2CD, 0xD63E00CE, 0xCB7DB3D9, 0xE8A18195, 0xDC94D12E, 0xFE2B5E58, 0x95A533E9, 0x96F49AC1,
+0x0FE18BCC, 0x511C34C9, 0x4B42C289, 0xC95F3C10, 0xDFF85164, 0xD99602BC, 0x6F19BC37, 0x9751D643,
+0x8AE55FF8, 0x285B923D, 0x7A13461D, 0x5AD04744, 0x2676A0B3, 0x14F5C02C, 0xA343550E, 0xD60E42EF,
+0x0B62D68D, 0x8E1C429A, 0x7CB05D26, 0xA261C2B0, 0x839FB296, 0x4467BDBD, 0x7757393B, 0x431BA48C,
+0x756EE878, 0x7204221C, 0x4CAD548E, 0x92FF5BB5, 0x8AAB8FB3, 0x603FC131, 0x0B7C5F60, 0xF422A3B3,
+0x3414CAE4, 0xB643F2F5, 0x715DE646, 0x3AE53FFC, 0x92168EB8, 0xBAE76412, 0x04458234, 0x88771959,
+0x58CDF45B, 0xF52C2A61, 0x7FDE3756, 0x12C555CA, 0x3F8CB2B6, 0x2DA59151, 0x54528E3E, 0x46924789,
+0xF938149D, 0xE6C3C234, 0x141685A7, 0x600CF04B, 0xD82AFE5F, 0xFB6C853F, 0xBAF26A35, 0xFF97E91F,
+0x8ED45962, 0x659D7CA8, 0x73C06380, 0x2193DDE3, 0xCD6178C0, 0xA4BBAA91, 0x8007BB5A, 0x2C1E3127,
+0xB0ACB819, 0x96E10D59, 0x3279F960, 0x669057E3, 0x1F1A4446, 0xEA57ED6A, 0xC9461D12, 0x5D0CB372,
+0x37AE3B5C, 0x6E7F4E05, 0x7B965AE4, 0x41F30EAD, 0xE23E8503, 0x6896CA70, 0x7695DD68, 0xBDFB5A84,
+0x5DBD8E09, 0x803F0419, 0x1F237FF6, 0xC87CAA54, 0x322E5945, 0xDB786BD2, 0xC5AE1573, 0xC83E0D57,
+0x21B9D413, 0x92B6C738, 0xAA6A3A72, 0x875B7041, 0x5F894C7C, 0xE493EE7C, 0x8C2C72EB, 0x70FCC64A,
+0x6D980020, 0xB31EA62A, 0xEA455575, 0xF03BAAB1, 0xFD49FE4E, 0x02999190, 0xD8B42972, 0xC0730FEE,
+0x3617356F, 0x3292AD56, 0x202F48E2, 0x6AAF7127, 0x1F5AC111, 0x2F23BCA2, 0xD2AD9EF9, 0xEFD58C94,
+0x0FCDCBE8, 0x2636A779, 0x51C0A84C, 0xEEF30B08, 0xE96BAFE1, 0x22D703E7, 0xDC9D894A, 0x642D50BF,
+0x0E0A75AB, 0xE395B558, 0x5931F15B, 0x0CB0DB38, 0x53D21CA6, 0x2B33022A, 0x345A4926, 0x8F74AA3A,
+0x390DEF59, 0xF3C98D1B, 0x73FB5D55, 0x0E7D96E0, 0x90726213, 0x3FF7EA19, 0xA37BC250, 0xD6DBA375,
+0xDDDEB911, 0xD2108001, 0xAA637447, 0x640A023A, 0xFB8C987F, 0x086A7898, 0x347292A7, 0xDDD2CF7C,
+0x660B31CF, 0xE836BC0D, 0x5DF6311B, 0x1AD1DDD5, 0x8EC201D2, 0x17AAC1A1, 0x5153FF1B, 0x0EBBAD63,
+0xF3BCF722, 0x2D71E151, 0x11A84F5D, 0xA2049068, 0x2081987B, 0x0BB57A6F, 0xC2E392A5, 0x8B2C274F,
+0x7BE52F19, 0x283D41AB, 0xB7BA9F2A, 0xC44A883D, 0xAC633236, 0x339566FB, 0xDE290032, 0x70D40919,
+0x884BD981, 0x6149DD83, 0x6D822CD1, 0xF24D8D40, 0x08958D80, 0x20D5E6B9, 0x9D97E748, 0xD58485FC,
+0x1B78C52C, 0x7EFDE628, 0x52268101, 0xA1337FB1, 0x154A8578, 0x9A5B0A19, 0x5396234D, 0x785F7751,
+0xD035F9F4, 0x49AB14DD, 0x26CD66B0, 0x7DAC1A81, 0x232DC93E, 0xFB48D0E1, 0x3952DF6F, 0xA45E339D,
+0xE4EFA291, 0x39BDB14C, 0xD9032E89, 0xA9746A44, 0xB7BDE794, 0x2218C354, 0x1B33745C, 0xCB3A2877,
+0xD8249FF2, 0xBBDC3182, 0x6E047AE1, 0x265A2273, 0xBAD56560, 0x1CAF2BC7, 0xC0A9791C, 0x7EA4DFF2,
+0xB9649270, 0x43DC1411, 0x3C9F9FFB, 0xB180B4A4, 0x2D6C2AD9, 0x9BFCC1F3, 0xCEDAA898, 0x640DA167,
+0xE270E471, 0x7F96EE44, 0x347A8ACA, 0x39861FD7, 0x64913F79, 0x6B90B791, 0x3FE5209A, 0x8DB84084,
+0x9A8284E9, 0x1E1221DE, 0x2D9DDBE5, 0xAF5B790F, 0x806F4B30, 0xC4C42995, 0x6F8CA90C, 0x9B3BDF7F,
+0x988C40DE, 0x742F8913, 0x1E87BFFB, 0x2B5DEDF7, 0x34DEB8FA, 0x64EA1426, 0xFDF534D1, 0x1D1C7D71,
+0xB6589FF8, 0xEDEF3D33, 0x1ACC51C4, 0x2401E9B5, 0xE0A18DE8, 0x71E74604, 0xA50CB357, 0xFBC1CA62,
+0x7B6D3C5E, 0x02A2A9D0, 0x7BB15262, 0xA8C07445, 0x3CC4DAB1, 0x494913F0, 0x916B2E37, 0x8B635421,
+0x91B40E79, 0xAFDAB816, 0xDB3B8E75, 0x550EC952, 0x6DC16E9E, 0xF0945DAE, 0x99C9ADEF, 0xFBBA25E4,
+0xB2E9875D, 0x5A0D25B8, 0x953CCEC3, 0xBA922C37, 0xC6812156, 0xDAF24838, 0x6DA61372, 0xD08A9B70,
+0x6177CB77, 0x29545E7A, 0x2819F4B9, 0xE551557D, 0xEF1C98D8, 0x11EFAA10, 0x02A5F145, 0xDE516629,
+0x35E98745, 0xFF788107, 0x36889625, 0x2E3099EB, 0xAE3C1635, 0xC812378B, 0xE2C83249, 0xCD4688AB,
+0x3668F1EC, 0xCCE054EC, 0x467418B3, 0x6368D3F2, 0x6BFC3AE6, 0x25730D96, 0x49C59DAF, 0x0ACD45B8,
+0x58646E3F, 0x24CB1183, 0xA7D58799, 0x2ECEF83A, 0x77B6CB00, 0x0DCE9BFA, 0xE0457FCF, 0xEF379A95,
+0x6F232A46, 0x0A84F18D, 0x18657EF5, 0x0B6F6925, 0xBEAD304B, 0xA78247B4, 0x33C5E462, 0x9AC72BC8,
+0x6A6EFF38, 0x477CB7F4, 0xB2ACD148, 0x76D2ADED, 0x3DDB4F86, 0x3227838A, 0x4A7421EC, 0x4CF80A88,
+0xE8EE09F4, 0xAFF1BF20, 0xFEEB7870, 0x82C68A2F, 0xD286B8CB, 0x6FE03A4E, 0x5F39A412, 0x6AEF1858,
+0x744005A4, 0x4840BBA7, 0x9CA1EDC9, 0x1DFD8861, 0x88991D24, 0xF94053F4, 0x9C73D46F, 0x3AA16FD1,
+0xD1C85F1F, 0x979465EF, 0x9FF5BBA9, 0xC02FB543, 0x01000000, 0x38009A21, 0xC69C3FA8, 0x8EA8BCBD,
+0x2CED1DBF, 0xBB981CB2, 0x7D02D513, 0x9DB4D859, 0x3BADEDEB, 0x028E9F6B, 0xCD054D9F, 0xBEDBBD9A,
+0xC988A7F3, 0xCEAB1E95, 0xD53AB7EC, 0xD08CC18F, 0x7186AECE, 0xA02FE91F, 0x9FE211CE, 0xB6E54AB5,
+0x00089BD9, 0x6296BF81, 0xBF5EA034, 0x95581F37, 0x82807820, 0xAB8EBF78, 0xD0B62544, 0x9BF6FAC9,
+0xD5266B52, 0xEC425726, 0x746DBA2A, 0x29DA0FA3, 0xF7B6499B, 0x278A4E25, 0xB1E2B262, 0xD02A9461,
+0xB11A7FCF, 0x231C4DE0, 0x42AE6753, 0xDC1B70E3, 0x91149F1A, 0x1DA699A4, 0x264186D0, 0x87F6A661,
+0x2856A344, 0xD82CD49E, 0xA5C1D6FC, 0x1CFE424C, 0xC561F8A4, 0x841CAF33, 0x80AEE3B7, 0x6325BFA5,
+0xA4D37969, 0xD60B61BB, 0x34A3F8C6, 0xA3234DBE, 0x76D6A316, 0x230D134A, 0x09973FD0, 0x695ADE5A,
+0x0EB6CEE6, 0xBC12E7EB, 0xFA2D74F8, 0x200B370E, 0x1BEA6996, 0xABC955BE, 0x9C2B3F3A, 0xAE1100C6,
+0xDDD75345, 0xDD837AD9, 0xAA82AEA1, 0xF815DDB1, 0xAADD1386, 0xE0D81C38, 0x0A2C134A, 0x25982399,
+0xB41090B3, 0x769DDAB4, 0x50536713, 0xCA657146, 0x1EFFA96D, 0x761E6719, 0x14ADF601, 0x196CBB55,
+0x17CE6EFB, 0xB08A4398, 0x468A62F3, 0xECE2DCBF, 0xC4DDDF81, 0xF7BDAA1C, 0x3942B83C, 0x3BB937ED,
+0x74EE508D, 0x198FD237, 0xC9E02EF1, 0x6019D6FF, 0xDC014EA9, 0xA8A558EE, 0xF318793B, 0xC9046097,
+0x4E3E69C8, 0x403F4B30, 0x256894C3, 0x4ACA61D4, 0x38E6F2C2, 0x8A0B2B1F, 0xDF6CF436, 0xB3514A33,
+0x12918D71, 0xA8F43B1D, 0x50A20450, 0x94F3378B, 0x5756C845, 0xA28A1D52, 0xDAC70B39, 0xC42A5395,
+0x78275C6D, 0x6EBAB075, 0x1054CF91, 0x678A8667, 0xB7C47974, 0x6ADFC47E, 0x05E08352, 0x000EDA7F,
+0xDB5805E3, 0x64693DB7, 0xC5F3E9B6, 0xAE8D07BF, 0xF85A462A, 0x33560C58, 0xBD303878, 0x3699A5BA,
+0x8CC5F34B, 0x54E9C50A, 0xDF9953F4, 0x874881E4, 0xD0155178, 0xBFA92B68, 0xE3B5667C, 0x4CF99E99,
+0xC1DA8AFB, 0x53F5779D, 0xE80ADD95, 0x2D09EFC2, 0x860E341C, 0x3C19A461, 0xB3600B47, 0x9F2846F2,
+0x22DE2ED1, 0x7C4A3DB4, 0x82210317, 0x1A8424A9, 0x23D930F6, 0xB4F64FFF, 0xDF512E7D, 0x4592E311,
+0xCEB8886B, 0xB8CC409F, 0xE2F1A7BC, 0x46999093, 0x6EF9F46A, 0xEB5B1311, 0xFFF0828B, 0x87B56537,
+0xBDCCC75F, 0x9BEC236C, 0x5E1D648A, 0x3F4949E2, 0xA020AA0B, 0x2A1A9A6C, 0x518DB263, 0xB1BA4144,
+0x9D0632D1, 0xF8889F02, 0xA8CF404A, 0xC0ED51EE, 0x26EAA54F, 0x4B5CB2B9, 0xD345BC96, 0xFC1A3F39,
+0xA1B6EAAC, 0x39884A97, 0x02F7CA09, 0x5B43C355, 0x2B8E87D4, 0x37542B0E, 0xDF6DB150, 0x143E062E,
+0xFD2378FA, 0x57F496FD, 0x5F26A127, 0xFB6B38C6, 0xE1FF5594, 0xD7B39A71, 0x458CFE93, 0x1E10A97B,
+0xFA1F5844, 0x904C5A29, 0x1CB87138, 0xC851DEDB, 0xCE280DF6, 0x013679DB, 0x4E55E541, 0xEC99C09F,
+0x9CE35996, 0x0F3EA987, 0xA12D89C9, 0x5EBD4A1A, 0x032ADD69, 0x6E2949AE, 0x906EB6B6, 0x68E78B52,
+0xF87E7481, 0x06A148AC, 0x0A0B27C9, 0x6DFCC6F1, 0xA92B3AAB, 0x38D686A7, 0x6CC594DD, 0x35C57429,
+0x31F0F7E2, 0x477E752D, 0xC7DFE33E, 0x64D257BA, 0xBD7BD252, 0x9EBA0B07, 0xBE46F659, 0x7D262275,
+0x2AA9EBC4, 0x084C20C7, 0x251826AE, 0x38CCE81F, 0x11084FD3, 0xA796E325, 0xEEF6D1DC, 0x01E9EDEA,
+0x0590060A, 0xF930426D, 0x0B6CC2E4, 0x7FC2566E, 0x6513A5D2, 0x9351AF33, 0xEC991C4C, 0xBDAFAC35,
+0x4FC20D3F, 0xA4273BE0, 0x49ABCC29, 0x804B0CB0, 0x28F29510, 0x912B548D, 0xA556AC96, 0xC088C4B7,
+0x6E152BFD, 0x766E9A34, 0x7109EBF2, 0xAEA2FE7A, 0x9796E23B, 0xD14049AF, 0x37438491, 0x673208C6,
+0x311E2F3C, 0x738DE68C, 0x5DD98BFC, 0x6507D644, 0xAB69C6FE, 0x6F6EDFA1, 0xAA8F8F74, 0xDAA280D9,
+0x89947221, 0xAEA7780E, 0xCED986DE, 0x17D6ACA8, 0x97E8F4FE, 0xD61143FA, 0x23B25073, 0x902818AA,
+0x54A16887, 0x33DD4A55, 0xAF49C495, 0xD35260E9, 0x5DFC72BA, 0x198A6BC9, 0x4A020F89, 0xE47D2919,
+0x6B93D426, 0x49CAAB8D, 0x9F70ABE4, 0xA1826D00, 0xCC6C5144, 0x5F0609F7, 0xF389F1C3, 0x721EC1D0,
+0x24BC5446, 0x552DEF01, 0x98C72F18, 0x82465807, 0x65EA288C, 0x54A8C153, 0x718474EA, 0x032DA992,
+0x848F923A, 0x47232E37, 0xC9FEB51A, 0x5E1EDE86, 0x0922092F, 0xEB3C6D20, 0xC6200D8A, 0xB4864DE2,
+0x72EB150E, 0xE7A31C7F, 0x702AA6F2, 0xA1F3AE1C, 0x1AB3F6B4, 0x96E3766B, 0x16EB55E6, 0x0AA2C27C,
+0x309D95C8, 0x2535B78D, 0xA1A1B0E4, 0x300B8788, 0x19685646, 0x5207A04D, 0xFA2C69AE, 0x11DF4C9B,
+0x55560964, 0x386294B5, 0x88E30D38, 0x8660F953, 0xC67FC6EF, 0x2DE6CA7B, 0xE3B00E2D, 0xAE661681,
+0x0C038018, 0x53BA4FC0, 0xE27FEC44, 0xE3EA8267, 0x9258A574, 0xD3F39B18, 0x0F75F230, 0x455C882A,
+0xA5AE683E, 0x40615295, 0x32B1C876, 0xAF1224D4, 0xD1F5B944, 0xE0471337, 0x3291ED08, 0x5A5CD42E,
+0x9A8B3442, 0xD03484E8, 0xA7964182, 0x80BCBA5B, 0x798EEE6F, 0x2C8C610C, 0xC4E8A79B, 0xD77912BA,
+0x2AAE8C3A, 0x6692E584, 0xBA6068BC, 0x286D93AE, 0x01A1BC0A, 0x220A84BF, 0xA7A624F0, 0x2F66DD8E,
+0x769D7DA0, 0x36FF72AE, 0x8AF40C73, 0x0EC66112, 0xC9EB3AC8, 0x8F7E1FA4, 0x0C48189D, 0x97767DA3,
+0xDF0DB786, 0x5EEA02BF, 0x109C7E17, 0x61B34B95, 0x20857EEA, 0xB4A912AE, 0x72032175, 0x368B5D65,
+0x0F3C8643, 0xF09A30B8, 0x9D5EF4FD, 0x0C203DC8, 0x7A786629, 0x274F6C58, 0xB02587B8, 0x1221484B,
+0xE6DAEC0C, 0x345A1FE1, 0x4E974FC4, 0x74AADC5A, 0xDA38D2D1, 0x306249E7, 0xF88CE9D0, 0xD2672DC4,
+0x221D69B8, 0xA6D76FFB, 0xAFD96B51, 0x3272ACFB, 0x3611B5E9, 0x175A9E81, 0x1C70A6B4, 0xB11D9FEE,
+0xBE16A669, 0xD4D17529, 0xFD100958, 0xB72981E6, 0x4C3C5C1E, 0xC39BF8DE, 0xBC1A7FF1, 0x01BF12C1,
+0x00C862A9, 0x3ECB9B8A, 0x1E63049C, 0x2022A2EF, 0x3D786A79, 0x79C193E1, 0x1C4A5BE7, 0x9606A17B,
+0x741DD073, 0x4184FD66, 0xF94F16C0, 0x82DF9AAC, 0x69E65332, 0x819FDEEF, 0xFD0879F1, 0x884F8412,
+0x73D02EA3, 0x72CCB4D1, 0xCF74CCAC, 0x1657CBDB, 0xE480E38B, 0xD6F71606, 0xDB8C1632, 0x3C978617,
+0x3072C009, 0x8331D322, 0x115401EF, 0x836594AE, 0x1B5D527D, 0x257673ED, 0x945B7BB5, 0x02EE59FD,
+0xB6947A0F, 0x24A27FA7, 0xC35C9E8F, 0x47705D8E, 0x111147B7, 0xC5550288, 0xD83CA14E, 0x3733F29A,
+0x433BC26C, 0xE9230278, 0xDC4ECDE9, 0xA58A87A7, 0x64B14283, 0x1ED93652, 0xFCB6F6A6, 0xAEC6C7CF,
+0xC517BE86, 0x0429A606, 0x454DD987, 0xDF75F63D, 0xCFB581CB, 0x2C0308F4, 0x22808B5C, 0x971B0845,
+0xAB7ACC37, 0xD8CA0645, 0xD8C92F2F, 0xA733343C, 0x5EEDD6F1, 0x7A5F4722, 0x7780E616, 0xEC2A51B4,
+0xFD5B1A27, 0xF4B1B2F6, 0xC8B48816, 0x10C9E743, 0x67094A47, 0x24E1607B, 0xED28118B, 0xF1F8EAC0,
+0x9F18C215, 0x2399C919, 0xCB750B43, 0x996CAF14, 0x851C97CB, 0x8676FEF2, 0xB86AA2E0, 0x0C312159,
+0x2B8E0FEF, 0x4B6FD00E, 0x13A6AE8E, 0x8DA18AFD, 0x1597ACBA, 0x1061E88C, 0xF1F02D79, 0x442E2C43,
+0xBE6DCA9F, 0x8341500A, 0x997DEE49, 0x8539286A, 0x1A777E7E, 0x39E449E2, 0x8BA08D87, 0xC0741C78,
+0xDD730DFC, 0x78B78B06, 0x33C4C5DF, 0x7436D5B4, 0x04A7FBF5, 0xED0898F9, 0x903FEF54, 0x51661683,
+0x827233D7, 0x4164C714, 0xEAF9E8EF, 0xB97D163A, 0x933132D0, 0x3B118864, 0x349A545E, 0x8E48EC87,
+0x0C8A9FBB, 0x1D327897, 0x8AC80C58, 0xB8E8D832, 0x8C7E36B2, 0x67E5F5D6, 0x3232575C, 0x888646A1,
+0xE9F83AAB, 0x2EE7B6DA, 0x62F19488, 0x06A57DAF, 0x8158A829, 0x57F51D4B, 0xBF91BD8C, 0xFD9C4EA9,
+0xA589B49D, 0x71C85E16, 0xF5C3E337, 0x5EF4179A, 0xFD113AF4, 0xB1E5447D, 0x992454FD, 0xBB34D2C5,
+0xE66364E7, 0xE7C39E91, 0xD4CF9652, 0xEE2D1F8D, 0xB49D1D6D, 0x76C8A276, 0x1F2EEC39, 0x38175C1D,
+0xC19C07FA, 0x50BABD4E, 0xF2507269, 0xE6896DE0, 0xD29C057C, 0x4A8D32E8, 0xC9FC2584, 0x808B64F6,
+0x354638F8, 0xCC58A7A7, 0xB5441B9B, 0x5088A5ED, 0x419DC150, 0xCC687F93, 0xB1C70BFF, 0xCBF35ECA,
+0xE2E41EB2, 0xD6C2618D, 0xF0D02661, 0x81C1F5D5, 0xB511806F, 0x6D041860, 0x86999AFB, 0x065C81CE,
+0x84049183, 0xD8036F19, 0x274AD3B4, 0xF1BED07D, 0xA6AF1D17, 0xAEF668FD, 0x7E6EDAD2, 0x95738461,
+0x067EADE8, 0x5C96BB5C, 0x8F21B68E, 0x97243FB6, 0x9EA70F86, 0x59982DE2, 0xEE22D68E, 0xB14C0A2E,
+0xAC86ED97, 0xE8C6916E, 0x4FDBF683, 0x87BB2658, 0xBB0CB3D9, 0xA58D3586, 0x073BBC88, 0xC6BA20D9,
+0xC9627496, 0xD7E6D5D4, 0x5DBFA7F4, 0x977F5568, 0x175BD8D2, 0xA05268D7, 0x29343DF2, 0x21AE0E96,
+0x43FD0D1B, 0x0DE00001, 0x4A6728AE, 0xC1A88C6D, 0x14D10947, 0x798C4059, 0x1C5D13A0, 0x60061393,
+0x680752DD, 0xCF92374D, 0x7EB652CF, 0x4C9B465C, 0x97315567, 0xC49552BD, 0xD1B2B230, 0x01A7E2EC,
+0x688A38A1, 0xF71230A6, 0xC98BAF52, 0x7BFC94B7, 0xD4399BB4, 0xF5EBC482, 0x9C92D722, 0xD45BA92B,
+0x6E292556, 0xB09EAA7F, 0xAA0DE705, 0xD4EAA9D0, 0x954C93FE, 0x24BD6DD9, 0x0437BEEE, 0xFF08BA16,
+0xAFCA32EC, 0xEC12C2AC, 0xAD0D38D7, 0x119ECCE9, 0xD68DBE1C, 0x7413BCDB, 0xD7D1E774, 0x530CA2A3,
+0xFA0CDD61, 0x265C2A7B, 0xE355194A, 0xF81F6597, 0x71AEFB0B, 0xA952683A, 0x38723249, 0xE340DE24,
+0x3E4FFA1A, 0x331454C9, 0x6FA27AE6, 0x7EEDBD7E, 0x6C78EB83, 0x1AFB2DC9, 0x2C8A3002, 0xCE6080B5,
+0xB15E0B6E, 0xF225C0C5, 0x626CB1E1, 0x5A9D05F7, 0x706915A9, 0x9A7D75E7, 0xCD16BD13, 0x0F6F3769,
+0xF92B4787, 0x519EC2DE, 0x8C902AA6, 0x0735C362, 0x9BB0F4D3, 0xE9196C56, 0xF44387F8, 0xDD525C3A,
+0xD03B6613, 0x8D58C9C6, 0xACE9AAD2, 0xC67A7AFF, 0x09D788D3, 0x1AE1519D, 0x019305AB, 0x8A6AED44,
+0x7303E48E, 0x23CBA659, 0x19658AAB, 0xB3E2269A, 0x025FC29A, 0x97BFB0C3, 0x7C4BC223, 0x3E0FA6C4,
+0x36C3AA7E, 0xFAC7CCD6, 0x1BE6EFB7, 0x41CA4E4F, 0x960A2D2B, 0xB92F76BE, 0xB35CF235, 0x09018DE8,
+0x4D81CE68, 0x17367900, 0x4B8E751E, 0xE47358BB, 0xA114267B, 0x894EDA7D, 0x35E3050F, 0x45E295B2,
+0x7ABACBF5, 0xD0F49D5E, 0x600B0C79, 0xFECAEDDF, 0x0C456E6B, 0x779210CE, 0xE53D2589, 0x6C39657C,
+0x53153925, 0x93B02A2D, 0x3CE648BA, 0x94980DDB, 0xBADC850C, 0x248E8C8E, 0xF4C2A008, 0x95E6BDE7,
+0xF92D82A8, 0xC1FA49D3, 0xCFE27A33, 0x76A60FB7, 0x230444E8, 0x6F7BCA19, 0xB712190C, 0x71ADA22C,
+0x4EC9FBC6, 0xB9592F6B, 0xFC9449BF, 0x3D6C61FA, 0x287A5594, 0xFBE98161, 0xEA1F2858, 0x0E02204E,
+0x5E33C28D, 0xF48B026A, 0x9AD5E228, 0xEFEB4313, 0x9328C270, 0x3F847136, 0x1E847A8D, 0x4FE7056F,
+0x7585B4BB, 0x09C27015, 0x058436E5, 0xF1C43C85, 0x29D19357, 0xAF64A1E7, 0x78C95983, 0x7582B8C7,
+0xDA5F0B99, 0x93714459, 0xE51F89BA, 0x5820AC9E, 0xC929964F, 0x83DEC02E, 0x4FCE7DD1, 0x1D703333,
+0xBC8DF44C, 0x9CF15B29, 0x58621FC3, 0x5A3A0A7D, 0x637B3738, 0x63AF1F70, 0x002382D4, 0xB8D8268F,
+0x7D9980D2, 0xA4E44695, 0x72E26ACA, 0xE7475554, 0x293A0479, 0x63BCF1DC, 0x2CFB1941, 0x0D95F82E,
+0xC82DC41A, 0xFB22696F, 0xF63AD495, 0x5FD7FA89, 0x2FEFC265, 0xF4CE1B2D, 0x7625304D, 0x3B806D8B,
+0x336C1724, 0x26913FD7, 0x604464FD, 0xC5EAD82E, 0x5EDA5DBF, 0xB5338010, 0x5DE86DD8, 0x448DB47E,
+0x5ADF904C, 0x0AFA319C, 0xF1F01C03, 0x8E2CACF3, 0x72EBF5AA, 0x872BC0E5, 0xCC72AB1D, 0xC5544681,
+0x0D7972BF, 0x5E5C104E, 0x82296AB9, 0x018E97EA, 0xCA1F5D59, 0x7BEF7202, 0xA7D14061, 0x6628C451,
+0xD3F1DF74, 0x87066B34, 0xF7B426D0, 0xEE40D2E6, 0x749C787E, 0x7EDB81BF, 0x17AB6AFB, 0x187052F5,
+0x4A68D3B5, 0xA3B7517B, 0x546B399D, 0x3F2A17F5, 0xF23B0537, 0xCE81CBDF, 0x0E696356, 0x9176E218,
+0x0CF9BD6D, 0x91D5DEA3, 0x921B7059, 0xB918362D, 0xE6D9730D, 0xD5A3EC7B, 0x38EAAEFF, 0x63074E6F,
+0x3F4F78EC, 0xEB8FBD26, 0x5FE87BAB, 0x96095BB2, 0x9AA213EE, 0x08DA6FCE, 0x5001951E, 0xEB18463D,
+0xAEC007A5, 0xB0A1EDC0, 0x37BD24A2, 0x317F4C24, 0xDC9AF509, 0x6FC8AAA4, 0x782360DD, 0xDDF9AF19,
+0x109FE8C7, 0x87B09C8E, 0xBABDA7D0, 0xF6D715D8, 0xB4D50B00, 0xCB3A49D6, 0xAFA2AE08, 0xD7F62BA7,
+0xCAA73853, 0x571997C5, 0xEE783809, 0xF799B9E1, 0x5A375EF2, 0xBF8C98D3, 0x216FB378, 0x9CA7E29C,
+0x6F644D3E, 0x0A32AD2C, 0x41ACF910, 0x83D38BD4, 0xECAE459F, 0xB4019023, 0x97B7024A, 0x84395728,
+0xB572CB44, 0x9E190427, 0x26286692, 0x7B6F914C, 0xB766F3BA, 0xE9CE6066, 0x3F788E4C, 0x2CCC06B1,
+0x600CF465, 0x3BE7F401, 0xC9D9E268, 0x9D827C76, 0xDDF5D29F, 0x84C77434, 0x43983D0C, 0x9E7EAE6D,
+0xB1DB5728, 0x170EDCEB, 0x4D2D3DFB, 0x60058C36, 0xE11CEEAE, 0x915D82EE, 0x2074F9E2, 0x72F3B701,
+0x0835EF54, 0x79196EF0, 0x4ADFC726, 0xA6BFD4B8, 0xF5082BFD, 0xCB941DD9, 0x04CFAB60, 0x997604A1,
+0xAF50CE8B, 0x5ADC20BE, 0x9BB423E5, 0xBF24A618, 0x089C83DD, 0x8BCC7AD8, 0xA087DAF7, 0x8D8E5827,
+0x93C0011B, 0x4036EC92, 0x8BA98F8E, 0xC21CFF86, 0x6DC083BD, 0x5AD926E1, 0xD0514153, 0xFC005F12,
+0xC4166B7E, 0xA57EB354, 0x6216D2A1, 0xB2CC93F2, 0x4026AF73, 0x253CDA28, 0x1893216B, 0x619872A5,
+0x9B305E9E, 0x9B35888A, 0x76793413, 0x7EC217A7, 0xFBC4E79F, 0x4E111181, 0x5202139D, 0xEDBB628F,
+0x7B09E6CE, 0x0033FE3A, 0xAD0E39E1, 0x8A8E7CED, 0xD8F259C4, 0xBF530334, 0x6F410A2C, 0xEC859955,
+0xE6314713, 0x025D7F34, 0xAC0F5478, 0x4752228C, 0x02405E6B, 0x31A8DF70, 0x52CF916B, 0x4612AA85,
+0xC3EA92F2, 0x2D2B3904, 0x50B85AB1, 0xAB29F288, 0x8204FE2B, 0x185F30A3, 0x29F87C61, 0x2462C33B,
+0xF2C597C1, 0xBB424E68, 0xAB316A81, 0x6D1EC66C, 0x8DD2EAFC, 0xDE4A9A34, 0x6DE2F853, 0x500BCCA4,
+0xBFC6E22C, 0x52AB9122, 0x2BC5CB3C, 0x4847910B, 0x4184CCA2, 0xCCD1E239, 0x6D6AD423, 0x467C8963,
+0xEC5898AE, 0x8FA8261B, 0x71796AB0, 0xC32D0013, 0x633FAD26, 0x47C85956, 0x8C16EBA2, 0x90EA2DAF,
+0x6974C628, 0x1B27F538, 0x3D1288E2, 0xC35B23DF, 0x59D1C898, 0x74D07E77, 0x6070019B, 0xEC0E70A1,
+0xD53FE7BC, 0xC115A679, 0x79300890, 0x1569784A, 0x0FD1DFA2, 0x1A001AA4, 0xB140DDD8, 0x4F334BB6,
+0x27E64C77, 0xFD901C7B, 0xBB62BD19, 0x5786CC9D, 0xE717F937, 0x46C64384, 0xE3EBA073, 0x5A7A2D57,
+0x3BD224BD, 0xBC149186, 0x460B05F6, 0x74D57D48, 0x39112FEB, 0x50EB01CC, 0x5F392993, 0x24E288BA,
+0x726AEAF0, 0x97CB7D36, 0x058F7F16, 0xF9F4E0CA, 0xC412D7C2, 0x2E52073C, 0x4DC8C68D, 0xDCCE8AEE,
+0xD150E363, 0xA56845D3, 0x15E507D4, 0x2CC71AA1, 0x5B398FE3, 0x881A5579, 0x65D6FED8, 0x332572CE,
+0x3BCAF409, 0x66D7F0E8, 0x2E9054D5, 0xC3E3C222, 0xAC8CA316, 0x0FC648BC, 0x67F8AA80, 0x3B9948FB,
+0x4D0A2630, 0xF4931788, 0xA02C5CCC, 0x0A9E3F33, 0x8162B6BA, 0x7AE8FB5F, 0xB82BB3D9, 0x48ADF4B3,
+0x127E8E17, 0xCEB56ABB, 0x599A0644, 0x89E880A3, 0x8B56BFD6, 0xFB1AD779, 0x5EF73E0C, 0xFA4E4696,
+0xD6650563, 0xFB410C99, 0xDB9012E5, 0xCCC36EB5, 0xB0021761, 0x48EEE160, 0x0922A1AA, 0x06BF7501,
+0x4DA5BA18, 0x7DDC87E9, 0xCB041426, 0xE21E7E61, 0x978BB0CC, 0xEFC86678, 0xD91E4333, 0xD06A3237,
+0x358D5062, 0x3D855507, 0x633835E9, 0xC61E1CE0, 0x513ABAE3, 0x2C10D0F9, 0xA11BC352, 0xF7D1979B,
+0x012322F7, 0x2F3F3AC7, 0xBA815281, 0xD0161F3F, 0xCCBE27D0, 0xB9DDAF45, 0xA16515AD, 0xB17DC3D3,
+0x7CEA3185, 0xFF041D9F, 0xD18F3132, 0x56E68E7C, 0x23579E5E, 0x621A1894, 0xF803F336, 0x799E869C,
+0x173D36B7, 0x9F8170A4, 0x18F8A307, 0x188D4864, 0x509B9C39, 0x9FBDC6FE, 0x21D861F0, 0x728EF639,
+0xF0EB8B10, 0x11F6328B, 0x72337303, 0xEF4F3761, 0x084A6EA3, 0x84E37C80, 0x45026EA1, 0xC702C146,
+0x609BD375, 0xF24DF256, 0x2DFCDFE5, 0xF5C96372, 0x0198C903, 0x0298CDC9, 0x9BBF9EDE, 0xEE5FFD4E,
+0x27BF6776, 0x1EFABC70, 0xC0B7A071, 0x8C3391F1, 0x85C1F822, 0x09449444, 0x5394AEBB, 0xC931C790,
+0x8121CB04, 0x0BC23502, 0xBA2ECD3C, 0x1422420E, 0x0CA03A92, 0x4F2172E4, 0x06297D4A, 0x1607F2E6,
+0x7955DCF7, 0x9C777225, 0xF086ABC9, 0xF44A51C0, 0xC0AB421D, 0x564E92C0, 0x1D83E852, 0x4E38034C,
+0x2D81BFA5, 0xCC56668B, 0x7F554237, 0xC9B758D3, 0x477FCB91, 0x290C90E7, 0x0172F62A, 0x1613A2F8,
+0x40C40DB0, 0x977432EA, 0x385E304D, 0xA97A5BFF, 0x33F8CE2B, 0xB81E0A79, 0x27D7C479, 0xBF004D78,
+0xCCC77ABB, 0xBB2D85C9, 0x35BA378B, 0xEAECBB75, 0xB6DF6963, 0x21CAA9CE, 0xD3F572CD, 0x7DE30BDE,
+0xE08582CB, 0x57959981, 0x63702FFE, 0xDB2B93FA, 0x2B6552D5, 0xD6B9DBD6, 0x9B6E3602, 0x4F3F2F4C,
+0xAFE2E879, 0x333D1AF8, 0x80787FA2, 0xC80B2FCD, 0x4404BDD5, 0x4C33F8C6, 0xCC9124FF, 0xEFCF482C,
+0xEB527FAE, 0xE3F2C30B, 0x4124BF0E, 0xB89734D7, 0xA5863089, 0x78AB6659, 0xE71FC6B6, 0xC074304D,
+0xE04786F5, 0x7CEC39DF, 0x6C34E525, 0xD54E842D, 0x3F735B94, 0xCC5E977D, 0xCA2EFC1F, 0x7B576CEE,
+0xA0056B3F, 0x1976E23E, 0x4774F39B, 0xB13D2BE6, 0x420BD0CF, 0x1FC5CF6D, 0x0CF04301, 0x9EDCA476,
+0x9E550DB7, 0xA1A00D89, 0x3A031AE8, 0xF7B59022, 0x8FC18550, 0xE700EB66, 0x6E7376A8, 0xF5EE38F3,
+0x36713A2C, 0x52E55654, 0x7A2B135A, 0x1C5D52C0, 0x280DC4E7, 0x322BEA30, 0x9595041D, 0xECDEC60B,
+0xFD98FF1A, 0x69986A44, 0x0A74A91B, 0x1DBD6BFB, 0x35D71B04, 0x54CC4458, 0x42D5635A, 0xBE474E6C,
+0x00F879E7, 0x01010000, 0xA53A009E, 0xD0C07F12, 0x2407FC2C, 0x0C0DA429, 0x67349A3F, 0xC84AFADF,
+0xBE4FAC16, 0x48E65BEB, 0x16B544DB, 0xA284EEA8, 0x9387D6B1, 0xCFBEC2A3, 0x0DAFDD0C, 0xD0DBB591,
+0x44C7446C, 0xD2F1430E, 0xB4E46614, 0x68C12984, 0xE2ED4A83, 0x6A6EB19F, 0x9B2FF922, 0x54BE693E,
+0x13AF5A77, 0x31E0A5A2, 0xC912EC9D, 0x921DA178, 0x385875EF, 0x85E9FBB2, 0xEFD82F1B, 0xCCB041D3,
+0xC230E979, 0xE42F6D35, 0x7C612F65, 0xA5B6FA92, 0x6B34900C, 0x79A80A71, 0x106C0DE2, 0x7B4617E6,
+0xA93F614C, 0x7DB2FBDA, 0xF00864FE, 0x07538CBE, 0x4995308B, 0x86CAF2B3, 0x740ED8D6, 0x54632086,
+0x50671899, 0x24F13DA3, 0x774E9270, 0x91666E95, 0xA7AE5B29, 0x755354C0, 0x26D1DD31, 0x84697B41,
+0xB6CC7003, 0x57D1D912, 0xFAC9FBAB, 0xC4DAB8DC, 0x81FDF1B4, 0x9B46C7BA, 0x2D257949, 0xE7F011A0,
+0x2913CA6F, 0x8AE04CCC, 0x416F27B1, 0x33832E49, 0x0709FD5C, 0x43EC0109, 0xA9AC0DD8, 0x7C05721F,
+0xC8827052, 0xFA6A495D, 0x3A6B0E52, 0xC52004A5, 0x9831AF00, 0x074DF98A, 0xB6AAA7B7, 0x63B53AF8,
+0xD9664AA1, 0x34A16201, 0x3C9D6BA4, 0x610B4E05, 0xEAEFA992, 0x3976F5A0, 0xC3F7D535, 0xFB6E62F4,
+0x763D2027, 0xC8B6E2DC, 0x03E887A7, 0x1868EF41, 0x3986E543, 0x47E4C3BA, 0x6C1A737D, 0xB892E655,
+0x16826BCD, 0x3A4B0E0B, 0xA9BE1E0A, 0x5F885D00, 0x97369285, 0x056C8FCA, 0xA50A851D, 0x53D15C91,
+0xD5A99C5E, 0x474D7FE5, 0xD3CC9599, 0xEAECC735, 0x73FDDBA4, 0x06BF8FC8, 0xD9BE3096, 0x46B828D0,
+0x3057DD58, 0x98B7B8C1, 0x8338DA54, 0x92A7D696, 0x994C5B99, 0x827F2818, 0xB277285B, 0xCF54DB4A,
+0x4501D199, 0x4073B2A9, 0x9139E64D, 0x74D6EE9A, 0x49940CF5, 0xB6BA9197, 0xE7A11AF4, 0x00AF3CF1,
+0x899F51CE, 0x9FAF8CE1, 0x5BCCAB36, 0xB86108B6, 0x20057B92, 0x8C7391E9, 0xEBCC6CED, 0xD6B6675E,
+0x28CB7754, 0xA5C722F6, 0xE72977FA, 0x066D6844, 0x773B28E3, 0x2EE5C669, 0xB98F5C20, 0xDDD7F293,
+0x911983AC, 0xD5283394, 0xDEB15D77, 0x03DF6EA4, 0xA5BAA0D5, 0x976480D1, 0xC6897BCA, 0xF3ED3310,
+0x50FA3DF7, 0xE7096452, 0x80D7EB4F, 0xDB2481AB, 0x29527A84, 0x18DA3AC3, 0xC0B5F8B8, 0x3850A050,
+0xD2AFF0DE, 0xE577D25E, 0x8F96C54A, 0x9AA5C55B, 0x99B510F8, 0x1515E429, 0x65DFF044, 0x3D9AA5DF,
+0xCEC67D2B, 0x2E9A0FB2, 0x38BF04F0, 0x955BADA0, 0xF57B6EF6, 0xD8C281B8, 0x0164FB31, 0x588ACC1B,
+0xC246F493, 0x1007F46F, 0x18129F39, 0x0B73C691, 0xAE9D2921, 0x0342EB78, 0x389AAAFE, 0x465A4357,
+0x9861807A, 0x74C1B9B9, 0x975AAFAA, 0x6E0F62B7, 0xB1A18470, 0x52A1B322, 0xF0306BE9, 0x39E0C337,
+0x75546DF3, 0x63112EE1, 0x4A544576, 0x38A26BF8, 0x42CA4242, 0xDD3E919D, 0x9C0EE8D7, 0xF10A4BCF,
+0x6296CFCF, 0xDC8558E8, 0xBAD20CA3, 0xC8B1CB22, 0xFC8B26EE, 0xED7214DC, 0xAE4EB9DE, 0x48D0D83B,
+0x78906D59, 0x8F4BF8DD, 0x0EA4376D, 0x7D029282, 0xF8DD957E, 0x0197FCEE, 0x32D5B9D4, 0xC786260F,
+0x0DA4FBD2, 0x83128E31, 0x3A2716CA, 0xE69496CA, 0x76F59437, 0xF4713A63, 0xA63A4914, 0x1DBDB4D8,
+0xF63BE839, 0xFB82F6B0, 0xF35A9880, 0x67DB106B, 0x35C71485, 0x8D65A9CE, 0x9DBD71B1, 0xF473F222,
+0x5895DBFD, 0x68756A8C, 0x54910305, 0x2E653162, 0x8CD849B2, 0x8280DD66, 0xF30049B9, 0xD80ECEF4,
+0x7FE642AD, 0x7C2DA0D4, 0xA6F00A4A, 0x04E0488A, 0xA2C7990D, 0x4D3A6A63, 0xFF8E5A03, 0xB9FF3DD3,
+0xCD3F593C, 0x3829EE70, 0x3D8ABADE, 0x358BC101, 0x93B73BCB, 0x4EFA372C, 0xE76B5A10, 0xC9AEB382,
+0x9D35F4D5, 0xCDDA9F55, 0xB83713CF, 0x6239A146, 0xCD24F700, 0xC365E7E0, 0x3140CF71, 0x6AC7D92A,
+0xAFFBAED9, 0x17182CCC, 0x8A064177, 0x14322F0E, 0x573EABE6, 0x1B161A6F, 0x0DB89E36, 0x62446625,
+0xFC2215EC, 0x7C88CA64, 0xBA4C0CD5, 0xC3DE9056, 0x11E18B0D, 0x192ED400, 0xE807257A, 0x599A9C04,
+0xA01352B1, 0x1C0AC92D, 0xC7E0B760, 0x1D326FB9, 0x9982E32E, 0x6693C1F9, 0xF1C742B3, 0xCE35BC46,
+0x21866C6A, 0x3F71C6ED, 0x2A727386, 0xFF019C76, 0x1704DDB1, 0xEAA60007, 0x09D82BBA, 0xC0DB29B6,
+0x4CB69E5F, 0x5079E9F8, 0x76649022, 0x12D6189D, 0x6C385250, 0xEAE5DAFC, 0x104AB529, 0x2F8A19AC,
+0x71FF5D27, 0x833AED5A, 0xB74913A2, 0x0042C493, 0x9D68C7C7, 0xB761B8F5, 0xDC8CCF7C, 0x84A995AE,
+0xBD1C26DE, 0x972D9C0A, 0xC5DFCBDC, 0xDD1F2392, 0x8A085670, 0x2D9FA2A0, 0xD1F9D131, 0xB3AAF0C5,
+0x53057ACC, 0xAB380170, 0x8D120765, 0xA585A233, 0xE4B1CBB1, 0x00208685, 0xC1AD308F, 0x668A4513,
+0x8E9AAD06, 0xF4B241AD, 0xF0067AF7, 0x6BB28492, 0xEC238A41, 0xC6510C8F, 0xBD4A3528, 0xDA31BD4A,
+0x011722DD, 0x1D552E3A, 0x24D4B8BF, 0x57004A97, 0x360A8E06, 0x524BA798, 0x176DBBB4, 0x94039FDB,
+0xD4B57158, 0x281AA0BC, 0x5608CB13, 0xEA215DB1, 0xD16CA416, 0x34C6F747, 0x29EF86D3, 0xDAB6F8D6,
+0xBE075246, 0x6F1E6F08, 0xBF46181B, 0x09F33EE4, 0x0A37AE6A, 0xD69B1D2D, 0xB8BDC5E8, 0x2363D4CB,
+0x9978CFB4, 0xEB87FE17, 0x33FF1DFF, 0x1786168F, 0x78C06538, 0xB80A341D, 0x5A6E5D94, 0x901E4A00,
+0x66B6745D, 0x31993CD4, 0x0AFE070B, 0x7CB85CF4, 0x97498546, 0xF96D5E69, 0x14DA1F77, 0xB7AA6687,
+0x44C48599, 0x1A25099E, 0x678737BE, 0x9264DB20, 0xB158AA59, 0x5471F1D2, 0xD6109F9B, 0x430751C7,
+0x06D30C88, 0x6CC8014C, 0x65A36EB8, 0x57DD1B75, 0x6E84A8C2, 0x40F00633, 0x385072E2, 0xD98F9005,
+0x4FBF3939, 0x084A5EF3, 0xBCDB6B4D, 0xA99D6037, 0x3567D636, 0x81033593, 0xADBF4706, 0xA7E0D415,
+0x51274359, 0x16FBCC6F, 0x4F2873F0, 0x74BCCDEA, 0x75536A41, 0x8B51720D, 0x1D9890D2, 0x19CAA819,
+0xEF3E7ABE, 0x82B24BAC, 0x88EC6FEA, 0x0C40D7B8, 0xF4E16B43, 0xFB58EA5B, 0x54C0D054, 0x596F8B66,
+0x1EF77152, 0x331DC401, 0xE4FFE604, 0x0000208B, 0x9E010100, 0x12A73A00, 0xFEB9D17F, 0xF1C008D5,
+0xE4CAE132, 0x56D8D7C9, 0x549E2C63, 0xCB7C5575, 0xDC9FB92E, 0x636F7AEB, 0x7D4E5D65, 0x81C6DCB7,
+0x5ED334DF, 0x3969D25F, 0x5F625814, 0xA5B4C327, 0x4B77B0F5, 0x46AB12BE, 0x938286A3, 0xC860C7E4,
+0xE37479DB, 0xC7B877F0, 0xF12A2184, 0x00B7A376, 0xDF27D186, 0xFB61FF0F, 0xE1CEB14E, 0x7DE50E33,
+0x93DD0728, 0x16C4CEA1, 0xA5560FAB, 0x15C39801, 0x4D230BB9, 0x779580F8, 0x887B2F58, 0x7ADE2BE3,
+0xEE38A018, 0x48F53971, 0x8467AF61, 0x7293085F, 0x1DAA3D3C, 0x8565DE15, 0x87475A01, 0x513B010E,
+0xCE45F4EF, 0x24F32038, 0x38226936, 0xA8131540, 0xD8E208B7, 0x78A8A905, 0x1A2E4192, 0x3D6ED008,
+0x91E8AD92, 0x7E7B6930, 0xC2BC6AF3, 0x170BB7E7, 0x55F29963, 0x873B1050, 0x75DC8621, 0xA5BD83E9,
+0x31B1B402, 0x4E970DD0, 0x79B8D721, 0xA5A4ADA9, 0x1E8AB337, 0x15750A56, 0x9DDA3A50, 0x336E6810,
+0x1296AF8A, 0x1345B3A8, 0x28D1577F, 0xE566A9F7, 0x7B02801B, 0xB146961E, 0xDE444AEA, 0x2A309172,
+0x207E729C, 0xCD8DC0AB, 0xA7DB408A, 0x102403A2, 0xDC5CB536, 0xF388DF42, 0x909C3940, 0x02837D82,
+0xD589413F, 0x36CDFE8F, 0xF7ABE5AF, 0x9160D890, 0x4CED2A91, 0x071D64E5, 0x3AEDA413, 0x8AE15915,
+0x62B4D4F2, 0xE43C5797, 0x072C3631, 0x5D8E2F17, 0x6D86952A, 0xC02E63C0, 0x85635C1E, 0x562A9CDD,
+0xB39DF67E, 0x670CD5B5, 0xD2CBB067, 0x98342C8F, 0x552E4A8C, 0x26FD6839, 0x8DC96EF7, 0xD3CFEB4D,
+0xB72D5A89, 0x1BFC9321, 0x306CD791, 0xBAE6D97C, 0xEC9976D0, 0x7C125431, 0xDC862D94, 0x8A651EBD,
+0x9258A5EE, 0x5953A5E9, 0xB4E93CB8, 0x071069D8, 0x6CCBD58F, 0x3EFDC3A1, 0xA1715657, 0xCCE12DF1,
+0x973EB747, 0x0FA385BB, 0xD2458250, 0xD95BD2AE, 0xF715F240, 0x4F663608, 0xE0D65EEB, 0xE293E965,
+0x009C1918, 0xB327692F, 0xB950C715, 0x183B1FF9, 0xC457EFF8, 0xB9BB9E59, 0xE982FF83, 0xC0AA5233,
+0x7A5C3021, 0x2142F2ED, 0x083239C6, 0xB950F5F7, 0xC987A98C, 0xA6AC6DDA, 0x560E127C, 0x26EFBD6C,
+0xEC8DB33B, 0xDE81A09C, 0x82D45EE5, 0x0A59235F, 0x3FF76583, 0x53EBFAB4, 0x1A14B8B4, 0x80F58565,
+0x336AE3A6, 0xF4C55E2F, 0x71B8B5BD, 0xBF69A8D8, 0x5745C097, 0x311051A0, 0xCD6027DC, 0x01CF2AB6,
+0x6B72C244, 0x83A69793, 0xAE0D1F90, 0x627EB5A8, 0x1058654B, 0xCB513AFE, 0x1B8BE43B, 0xA8819201,
+0x07C88024, 0xFB35F42B, 0x7642E0F7, 0xCB0D6E8E, 0xDF4EF5EF, 0x2FB54E7B, 0x1C95EBDE, 0xB5A26924,
+0x911ABFB5, 0xF466130F, 0x5132C044, 0x54F2821E, 0x90BBE0E4, 0xB97F3C94, 0x1FD8DD98, 0x2E68F435,
+0x48657316, 0x1F9EBD9B, 0x1EC1A63B, 0x627D60A8, 0x4B1A7614, 0x61049096, 0x7E9FF608, 0x368338A1,
+0x0230D245, 0xB7396172, 0x4E09E130, 0xAF8EB09F, 0x33BFDD75, 0xF593B745, 0x7A5DAFBA, 0x2E551B67,
+0x50913B64, 0x83B53178, 0x0C66BB92, 0x9567BC25, 0xD5BBB0AE, 0x1FCE8458, 0x24702B54, 0x3E1DC3C4,
+0xF6F413A3, 0x3BFA5454, 0xB31B415C, 0x2783D5EF, 0xD3B36061, 0x85862A40, 0xBDFBBDC5, 0x3529AE88,
+0x470D0103, 0xE1D8A288, 0x1250D575, 0xE00CD588, 0x438687C5, 0x76067797, 0x9E1068AD, 0xF5695339,
+0x5AE31FA4, 0xCE1E98A8, 0x26857F3B, 0x504472F8, 0x84F130EC, 0x39A25A68, 0xD2AACE26, 0x4A62ED78,
+0xAC558879, 0x5B26B3FA, 0x3F1775A8, 0xDA83188D, 0x47AD6273, 0x87607888, 0x5953F10A, 0xED79BA1A,
+0xC1F1C66E, 0x4C266252, 0xE4635075, 0x67CB31F2, 0xC5B41C00, 0x2F7991C5, 0xCC87D2D2, 0xA4C4AF3B,
+0x43CA6E93, 0x6ACAC87A, 0x0AA93B89, 0x78BD25A8, 0xBE6BF934, 0x241AE0A3, 0x340C8FC3, 0xC6E93645,
+0xE82C8A49, 0xEFC3E15D, 0x2AB5C76A, 0x37AF682D, 0x5D91BDEC, 0xEDE7C2BA, 0x51E802AB, 0x0F25B745,
+0xE91D0F36, 0x29ED03B1, 0xD672F42D, 0xC7015C95, 0x5C20933A, 0x6192167C, 0x2B5421AD, 0xCE8E9CC2,
+0x3801A24E, 0x18B2B585, 0x83547D1D, 0xF84C5F22, 0x4A9ABD53, 0x6DD6A774, 0xBDF5CFCA, 0x4A9CA346,
+0x5B81951F, 0xC573F4EB, 0x79319BA4, 0x4324A68C, 0x46B261E3, 0xCE992C34, 0xCD8F4A4F, 0x2F30B3A4,
+0x1DB1E8C0, 0x68890F20, 0xB1F4264C, 0x74CD46B0, 0x6416CAE1, 0xD82ED11A, 0x0E50ECDE, 0x562F0A7E,
+0xC2EAC563, 0xCBB9199B, 0xA4CCBDDA, 0xE2337004, 0xBB7E994E, 0x5D9DC7C3, 0x956BB373, 0xF9E3C7AC,
+0xDDD203A4, 0x6E96099C, 0x5A28A4FB, 0x79E75743, 0x801F2857, 0xA6EE68EF, 0x5B3749B3, 0x086E0191,
+0xF3060FE7, 0x1C6FDFA9, 0x36523DC0, 0x7E3E113B, 0xAE318384, 0x2196CD3A, 0xFCDF4A94, 0x7D659240,
+0xA34D63B4, 0xA09A80F1, 0x7794AFD2, 0x5E3FC84C, 0x40CDFC76, 0xBCA58C52, 0x5540F043, 0xDA856157,
+0x4AFC0F03, 0x67AE5787, 0xEECDF12D, 0x104A5A51, 0xBD6FDF95, 0x9CA31FBB, 0x1177CEF3, 0xA2C6A5FB,
+0xD093F4A4, 0xA0D8BDD9, 0x7ED31A44, 0x49D64260, 0xFF183062, 0x237C1805, 0x302C7CAC, 0x9B03AF99,
+0xDE208E34, 0xBCDBC286, 0x9FB26E99, 0x32F83847, 0x6C209643, 0x67ABC101, 0x456BC2CA, 0x371D4EC2,
+0xDC1A2E78, 0xDD4A99C6, 0xA47F419F, 0xA5A088A9, 0x778A994D, 0x81048B81, 0x7C29D434, 0x8B99AD9F,
+0x1B7A7F45, 0x14472B71, 0x9478CBD4, 0xF9D2CA33, 0xE5FEB143, 0x757244D4, 0xA2528EE7, 0xAE349296,
+0x9D700770, 0x5F6ED8AC, 0x650AB22B, 0xB97FB201, 0xE4D1C0A8, 0x335B4F4D, 0x07555D9B, 0x9C42728C,
+0xECCDD050, 0xA6F0E1F3, 0x2D87B7DC, 0x088ED192, 0x1B977241, 0x751FBA1E, 0x89F3AB10, 0x84CDCB05,
+0x1ADCC122, 0x2A22F6B9, 0x668F28D9, 0xCD947774, 0x77D5B9EE, 0x3CBD7E99, 0x914A9ED7, 0xD2F98E21,
+0x0094A6F8, 0x0AD794DE, 0x395FF548, 0x0B10CDF6, 0xB7122F74, 0x921EA2B0, 0x1C6556CB, 0x2AB3E1C8,
+0xADF0C670, 0x784AC84C, 0x19666DAB, 0x5A0055ED, 0x3DF352DD, 0xAB287D95, 0xA96D60B4, 0xA50801BA,
+0x10BF38DF, 0x412A374B, 0x003A6C78, 0xD91F5CC7, 0xDFD3D907, 0x9C414CA2, 0x75186354, 0xFA76DD40,
+0x216D7700, 0xE2C54BDB, 0x000000B0, 0x009A2101, 0xBB3FAE3A, 0x092898AF, 0x7726BC7C, 0x40501FE8,
+0xDA0C29CE, 0xB0CC22D5, 0xB1D9C5B3, 0x797F9328, 0x62A52E8A, 0x32209AAC, 0x03DF4F2A, 0x0F5B065D,
+0xAA9881EF, 0x6DD49C6B, 0x031CAE20, 0x3A44B3FA, 0xA89DAEA8, 0x2F42065D, 0x99A3FFFF, 0x49C724D7,
+0xDE4F3372, 0xBEB3F880, 0x912D277B, 0x3BA9A455, 0x8B324D8B, 0xFE3FA7E6, 0x8B8786D0, 0x1FF26E3E,
+0x179ABE8C, 0xCC841769, 0x4A39118D, 0xAFCE4C70, 0xF6CA7601, 0xCCA5A220, 0x1FE2431C, 0xCE86503B,
+0x77E37028, 0x61D9697D, 0x3793BB41, 0x60217C9E, 0xFDFF7D8D, 0x28F2F7EE, 0x6CF32BA6, 0xFA32DCCB,
+0x64BD3A37, 0x694AD7FC, 0xF7EC5547, 0x2ABF4E9E, 0x0C42B3C0, 0x627AE04F, 0xAE7B6690, 0x927D0093,
+0x034DCFEB, 0xB5CFFA88, 0xF6E318CC, 0xFF8C877D, 0xB6744253, 0x289CA00E, 0x546603F2, 0x186AB583,
+0xAB1200B8, 0xBAAF169D, 0xFE952D35, 0x30D116F6, 0x44935F47, 0x60272BD7, 0xA6ADB4D0, 0x2D10A3F3,
+0xD7559948, 0x9A31BFD1, 0x5985EEEA, 0xEE1A17F8, 0x09949AA6, 0xAD5868BD, 0x327E361F, 0x46253512,
+0x0C232FAA, 0x3D210A39, 0x3BB74A21, 0xBE261C5E, 0xCEF55698, 0x19D07A2D, 0x8EBE829B, 0x13492B00,
+0x29CF81CD, 0xA1101A74, 0xB572AF51, 0x1BA029F0, 0x055CFFBC, 0x0580B2D5, 0x84CAD5B8, 0xA899A04E,
+0xC3CA204A, 0xA0145F82, 0xB3904980, 0xEDC28D7F, 0x016FB2E7, 0x43D94396, 0x9EE14A39, 0xDB6EAF91,
+0x3CB47048, 0x87640C73, 0x6EE04259, 0xB3D28FC1, 0x95C2FB58, 0x85402728, 0xC3340DC5, 0x1C9D1B7D,
+0x948E91D1, 0xDA47D1C5, 0xC0478A05, 0x108F1592, 0xFEF22C67, 0x8D72E322, 0x79F79262, 0x5ADF0433,
+0xF4362C9E, 0x1D24EECA, 0x754E1673, 0xB27D522D, 0xB13620E3, 0x88201EBC, 0x64DB31BE, 0xEE817D52,
+0xA208C97B, 0xE7689E45, 0x491EACDD, 0x1B034282, 0xA534277C, 0x3E7A2CA1, 0x1021129A, 0x52EE5E6A,
+0x0A5127A3, 0x75AF233F, 0x422E014E, 0xA6FC416B, 0x9D7AD939, 0x2F06BACD, 0x9AF1BEE4, 0x5D7A3771,
+0xB33EE9D0, 0x9C81D09B, 0x8E3EF963, 0xA46463F8, 0x2AC45162, 0x4D80FBEC, 0x864FF8E1, 0xBEE5089D,
+0xA4339DAD, 0x15A85DE2, 0xA89BD241, 0x5A08260D, 0xD26E85F3, 0xC8BD44ED, 0x9A96189C, 0x31040195,
+0xAD4DD1C4, 0x4047CDA7, 0x6BB40F19, 0xFF72AD90, 0xF6E5F69C, 0x73070935, 0x350CA32D, 0xEE61003B,
+0x63F52370, 0x36C86D06, 0x4BB2C5FF, 0xD846C4C2, 0x5C07CA4B, 0x5A2F4EC4, 0x0DD7CEEF, 0x41008EAF,
+0x2FD8D735, 0x40DB2F27, 0xDD4979D2, 0x52AE5786, 0x1E88BCAD, 0x16F7D4F6, 0x593056C7, 0xF390249E,
+0x48B26A20, 0x240CE665, 0x244A93A3, 0xF6575B77, 0x98011993, 0x574A58FA, 0xFA9D5C8B, 0x0D5CC158,
+0x5A3637B8, 0xA6317DFD, 0xAC01F236, 0x63617FAB, 0xC5CF852E, 0x51304E67, 0xC987D0BF, 0x85BD7F41,
+0x766F6E2A, 0x1FFDE640, 0x35D98BF1, 0x929C2AB9, 0x7D23CB81, 0xDE997594, 0x65E7EEF3, 0xE84263FD,
+0x4BDE4234, 0x99353D2E, 0xA4839CC0, 0x69EA004B, 0xCAD73DD2, 0x443C71F8, 0x36F60374, 0x5D06D12F,
+0x37DE5E05, 0x16CA6768, 0xF4BD79B5, 0x79324D69, 0x41662839, 0xB016DD29, 0x015B5338, 0xFDB253FB,
+0x243D89D0, 0xE4899F4B, 0xA7831E8F, 0xE73ACEAB, 0xB6FEDB22, 0x1635AF55, 0xA0F344DC, 0x398B6B21,
+0x9C449A16, 0xD9786334, 0x57F2A544, 0x4E1CCA99, 0xA0506AE1, 0x3B0C3609, 0x3D757F53, 0xA8FCE8EF,
+0xCEE5DC72, 0xB061DBBE, 0xC94B88F0, 0x78BF7187, 0xD1176637, 0x41CBCE71, 0x4BC6251F, 0x0620821E,
+0xF91215CF, 0xC0E3931E, 0xE515BE66, 0x643E7E9E, 0xD9F0EF65, 0xD117D8CA, 0x24A4F821, 0xA5843BD1,
+0x6F3BD38A, 0x3E21CEBD, 0x1C7457FE, 0xFF3D3C8E, 0x770218BF, 0x8FABE2D0, 0xAB725F7C, 0x2B63212E,
+0x323E443B, 0x6C09C5A8, 0x865A6177, 0x05E232E9, 0x79EC8C32, 0x56BBD90A, 0x757BD784, 0x34FADD64,
+0x790290C8, 0x8926410F, 0x289E39CA, 0x75DD4B95, 0x9172CBF2, 0x1316F011, 0xB4ED9417, 0x76480C6B,
+0x3EB7CDC3, 0x1429A34A, 0x52AAAE9D, 0xAD1DA762, 0xBEA83216, 0xA970B00E, 0x467C3715, 0x553D01DA,
+0x7787FB43, 0x53580DB6, 0xCDB20CD5, 0xDB60839B, 0x8040496E, 0xB9B5D01D, 0xB4A91927, 0x34863DA9,
+0x04D03BBB, 0x0688744B, 0xCC4A559B, 0xA4A0909C, 0xD9CB1F37, 0xA8C69335, 0x09EE0677, 0x3CF7CA89,
+0x43C691A8, 0xAAB64E3F, 0xC2EEB5F6, 0xF40E6280, 0xF0A324BE, 0x417CB3E9, 0xC739CA05, 0x99BC0CA6,
+0x88F27FA7, 0x42F45DCC, 0xB029BFE7, 0x6BA910D9, 0xFAB710AB, 0x1464B43D, 0xC2020201, 0xF2A417D2,
+0x4482C40C, 0x86999F20, 0x404D3768, 0x03AB4918, 0xD655297C, 0xED654C43, 0x609DAC07, 0x6DD41C8B,
+0xE8AC0E75, 0x17249E07, 0x95DFD956, 0x41DAD1FE, 0x19A16AF9, 0x1E13DF58, 0x386D9790, 0x852C00BC,
+0x5D414716, 0x929FA1E8, 0x65A516EB, 0x6004F4BB, 0x74713D25, 0xA1D77563, 0x3CFFB668, 0x480D9929,
+0xC88BB619, 0xAE98B0D0, 0x6016B8E2, 0x202F93D2, 0x64457ADE, 0xB44699A1, 0x181301D8, 0xA8EB3AE4,
+0x02AF5EDC, 0xFAD6583D, 0x0639E222, 0x551FB13E, 0xF372A547, 0xAC6E052C, 0xF857E919, 0xE3F223F8,
+0x6D4F54D3, 0xBB90CBD8, 0x5B9A13AE, 0x58F90B18, 0xFFA9B5C4, 0xAAA9878E, 0xDC40D8C2, 0xC638C802,
+0xBA987F59, 0x9739BC7F, 0xD8BD7372, 0x4BFBACE2, 0x47016140, 0xCB46B077, 0xD081940D, 0xE7B7371A,
+0xF9F427DA, 0xD5BEC922, 0xEEA7CE0E, 0x6FC233FD, 0x2A50111A, 0x9AD76CB0, 0x24EAFE82, 0x6C283CAD,
+0xB80836FE, 0x5999E7F5, 0xDFE0A911, 0x78401A3F, 0x2B50CDF2, 0x39A41EC6, 0xAABB7EFC, 0xCBBD8BC9,
+0xCEDFCA4B, 0xE3B8BDB3, 0x63445542, 0x8100A927, 0x19CCC8C6, 0x125F75AA, 0x3EB56A6B, 0xAEAC3B1B,
+0x213E380B, 0xD0E57A12, 0xF4512B54, 0xA2468D43, 0x7F25104A, 0xF5CE16F7, 0x1F25545F, 0x36109227,
+0xAEB1E72D, 0xBB349178, 0x01141975, 0x39780DA2, 0xE6DAD23C, 0x4F8A563A, 0x035C5E12, 0x2050AAB9,
+0xA207E7EC, 0x19CE0B8F, 0xE096AA04, 0xEDDA1314, 0xCB8CAB9A, 0x4444F590, 0xAFE533A9, 0x58405C6C,
+0x5BA45A6A, 0xC949018F, 0xD98B7101, 0x4851BA55, 0x405A7EFB, 0x4071B971, 0x544ABE1F, 0x58DAA070,
+0xCF633EC5, 0xB2AF1B24, 0x054E2AF2, 0x1C34C1A5, 0xD0489794, 0x3F1F03FF, 0x9B505155, 0x8A50389A,
+0x8ECAF636, 0x8581DE9B, 0xCEC16391, 0x93C41027, 0x8C88333B, 0x2DB5A1B7, 0xB63A428B, 0xA3F314C9,
+0xA3C0242F, 0xEF63EFA0, 0x368A72E0, 0xD1C27F7E, 0xA3393793, 0x3F52D6BA, 0x2D22CC38, 0x52BE8523,
+0x33D92C39, 0xB28166B2, 0x3FBAC147, 0x574ADFFE, 0x3A3CF998, 0xC878B722, 0x7FC7EF34, 0xF66C4AA7,
+0x89E2FE50, 0xBF197127, 0xB9E02CBD, 0x2A37ACA1, 0x9922F755, 0x833C9129, 0x29970C59, 0x19BFD4BB,
+0xF5424A5A, 0x37776C0A, 0xF8C14B21, 0x505FBAEF, 0xEF4D210B, 0xE7BA9CDB, 0x209F33C3, 0x28817A63,
+0xAEF12227, 0xEB124F3C, 0x1FD69E09, 0x6E52B934, 0x2790C549, 0xA46BA67D, 0x007D54EB, 0x96CB5469,
+0xE6FF5117, 0xC3473603, 0x290C789A, 0x473EB721, 0x31F45689, 0x68BA9834, 0xA0BF6196, 0x66B12062,
+0x0AFC5CA7, 0x32E059C1, 0x7A6B1813, 0x59F89DE0, 0xCDF918AB, 0x62B6DBA7, 0x8A3880A4, 0xB086605D,
+0x27053996, 0x7AC76F2E, 0xB1A40C6C, 0x48B2F97B, 0x0AB97097, 0x5050308F, 0xAC6EC178, 0x98C7FBB0,
+0x17EC987C, 0x6F66F8CF, 0x567647C6, 0xFD7F3FC9, 0x0C3B368F, 0xF660CC85, 0xBE9D0A01, 0x79A2A948,
+0x4280D6B9, 0xC93C6649, 0xE269E9E4, 0x3F1AA9A9, 0xEA4CB6B5, 0x9D875DED, 0xCD8265D8, 0x978275A6,
+0xDF2C271C, 0x9DC746D9, 0x804CCBAF, 0x479B89D4, 0x50A45BAA, 0xD32DAEC9, 0x414C75D4, 0x3C8AF6F0,
+0x7740011C, 0xF8967231, 0x76816BBA, 0x420930C2, 0x5E7720C5, 0x1818AF59, 0xD68A81AC, 0x015EB91C,
+0xE57DBB7D, 0x6740B0C0, 0x815C13C6, 0x48B9411F, 0x8F56AD20, 0xACAF30C3, 0xA4A407FD, 0x7F05F4AA,
+0x1A4E52C1, 0x4C86D9C5, 0x2E8D3AE1, 0xADBDF3A4, 0xCA98BCA8, 0xF784B754, 0xD2EB24AA, 0xA236E7D6,
+0x5CE4896C, 0x0B5C184C, 0x14BAAF2D, 0xDFC838B2, 0xE4DC3304, 0x4F3D9847, 0x79AC83A4, 0x634BA87B,
+0xF607B5E2, 0x1D2883DE, 0xD738264B, 0x1EE87011, 0x81CFCB59, 0x9C516867, 0x20DA9AD3, 0xD8AC4DAD,
+0xFC4E33C3, 0x8E808FDD, 0x99747C95, 0xDD09C2A3, 0xB952C7E2, 0xFEED64AE, 0x123E2816, 0x8ACB26B3,
+0x504694D4, 0xB139D48D, 0x3859BFF7, 0xCD60CB9C, 0xA64333DB, 0xD8A528AC, 0x461391F2, 0x8351B5BF,
+0xB90559D1, 0xB05BF614, 0x64FD1191, 0x80CAA6C5, 0x608716C6, 0xA2A15E46, 0x0FB59C3B, 0x56750815,
+0xA6221F8F, 0x2454EFA6, 0x49545CC9, 0xFE784A7D, 0x61290CB8, 0xD4B10406, 0xCF708FD5, 0xC266124A,
+0x53B504E4, 0x9ADE65FA, 0xEA166A52, 0xBAD000A3, 0xCE90D6C3, 0xCA3F55D0, 0xA99FF984, 0xDBF7F026,
+0xE4159A39, 0xDFEB5B2C, 0x6B9C9C18, 0xD0A2B2A1, 0xB4A70F71, 0x88826AC9, 0xC59D35A7, 0x019C38DD,
+0xE41BF36A, 0x8C278357, 0xFA64C0EA, 0x9EBD9515, 0x86A834DB, 0xB02DBBC7, 0x8B375E38, 0x61557C12,
+0x6517F239, 0x36F62EB0, 0x8C10BC99, 0xAB4D9A0A, 0xE4F21E47, 0x0CA2C39C, 0x9C11463F, 0x18D083C7,
+0x1BC34BC0, 0xB8991797, 0x075B3EFD, 0xA1656374, 0x319485B3, 0x58ACE814, 0x948251E3, 0x406C1B13,
+0x1F2047E3, 0x3C34B835, 0xBE7BAEA7, 0xF64A88C7, 0x01721903, 0xEACEAD48, 0xF1F4A786, 0x4DAB83A7,
+0xC6FE2B64, 0xC0319F00, 0x817726B6, 0x88AAAAE6, 0xC4AFA3EB, 0x484A40E2, 0x3FDA0033, 0xE82E7CEE,
+0x6FA93A22, 0x1B94E9EE, 0xBA30B0E2, 0x6BF5491F, 0x24D06C7E, 0x05F80C04, 0xDD941026, 0x497A1F44,
+0x6E4EFCA7, 0xFC65485F, 0xFE17FC36, 0x552FD8FA, 0xD04F3471, 0x9CFF1F9D, 0x54E09807, 0xB429170D,
+0x2DBD8C4D, 0x8504C155, 0x5E984687, 0xA1650B39, 0x519E2FD9, 0x3F6CFA56, 0x1FE9C8D3, 0x63CC395C,
+0x4726662A, 0x13801C1E, 0x2FEF2FD2, 0xB095DE8B, 0x3A6B508A, 0xFA7F0BD1, 0x16E1050B, 0x0DB6AA46,
+0x031F7A82, 0xFD873A5F, 0x9D5112CB, 0x8BF998D8, 0xB9E2284A, 0xFF49E732, 0xE598856E, 0x3BC3D007,
+0x871249A7, 0xB228E5BA, 0x16B67A64, 0xD160B13C, 0x8264CEEB, 0x6C6EA9E3, 0x9AC49A2C, 0xEE55F09F,
+0x769883B0, 0xE37DDCB3, 0x4D45DD38, 0x1EDBD83D, 0x0F3A85CB, 0x722B7879, 0x82B8FACA, 0xFB00395F,
+0xB7E85527, 0x27EE8EB4, 0x94727F07, 0x06310443, 0xEE9069E9, 0x5E04418A, 0xA5A62E81, 0xF87DBB32,
+0xC17DEFC8, 0xD264A6A4, 0x22A1CCBC, 0xA64F7DB1, 0x52A84E59, 0x78CF34EF, 0x660B6318, 0xFEB6B3CA,
+0xFDBDC5D7, 0x7F85C0EE, 0xFE21CA37, 0x7A3486CD, 0x171ED0AC, 0x261F51FB, 0x5557F03D, 0x8F07A448,
+0xAACFE812, 0x200746C2, 0x97F840AC, 0x0F94CE89, 0x712B64C7, 0xFB727D6A, 0xF224C207, 0xC28B93DB,
+0x9DE5D53F, 0x93CF7F64, 0x99CB1C87, 0x5C0C980F, 0x65EEDD7F, 0x7376A780, 0x3ADC71CA, 0xC0AC7409,
+0x5D426F03, 0xB35A446F, 0x62D3DDEC, 0x568C2F36, 0xA1838166, 0x2C9163A0, 0x878F6EC3, 0x1963EC1A,
+0xABC0796E, 0x80A08220, 0xEBAB2292, 0xE00A7D72, 0x1B15683A, 0xD19E5217, 0x41AF1F50, 0x84B124C3,
+0xB517D2B6, 0x720C3764, 0x59026433, 0xE36BDCBD, 0x690BF3E4, 0xE5DEB0D4, 0x8AC54935, 0x471B17E6,
+0xBEDEB1FF, 0x9E5C5EAE, 0x60B8AF31, 0x8CA562E7, 0xA27736F1, 0x3733142F, 0x51A9DCC4, 0x0A8E417D,
+0x940143F7, 0x8F5896BC, 0x94391B7D, 0x2D847C89, 0x0578CA41, 0xC4ED1330, 0x009AC8F2, 0x2E64C4C9,
+0x3D88A5D8, 0x76F77D4B, 0x7FFF0246, 0x3E1A1538, 0x7C4DABA5, 0xE94C6F95, 0x75E4749B, 0x2B58733C,
+0x8C96C2AC, 0x7E5270F6, 0x712D0CBD, 0x7BB1E8B5, 0x071B85A0, 0xAD593E7B, 0xA8A83ABC, 0xF70A2864,
+0xCF1C6661, 0xFF6A2D09, 0xB5265B70, 0x1090C6C7, 0x10066005, 0xFEE70C86, 0x410DC1AD, 0x0EF81DC8,
+0xE26E0781, 0x915DB0A1, 0xF29ADAD2, 0x1B1E8B90, 0xC27624EA, 0xA1067F9D, 0x5067DAE1, 0xCD316129,
+0x3159D327, 0xF6BFBA79, 0x3849D0BC, 0x4200E1EE, 0x54B0969A, 0xA21A0D95, 0x23D759FF, 0xD83CE327,
+0x79B7A0D6, 0x075BB18E, 0x25DF3D52, 0x9E4A3D46, 0x4D71FF18, 0x2E603077, 0x19547FF7, 0x185ED3C3,
+0x4622DCC1, 0xD216C489, 0xFD478240, 0xB3BADC45, 0xE5678D79, 0x7E40B4F1, 0xC2430D99, 0x2F8ACF7B,
+0x4F24AF4C, 0x04C898E7, 0xC33F8747, 0x488EE720, 0x54C134D9, 0xF9FB81D5, 0xAA2ABD6C, 0x7C87AD14,
+0x6A59FD89, 0x3A554EC5, 0x91BBB800, 0x107CF9A3, 0xDC0F0C15, 0x382C7E0D, 0x3FD4B21A, 0x1C5DBBCD,
+0xAA20A77D, 0xAEA0999B, 0x994890CE, 0xAF5BA50F, 0x4C3CFE2B, 0xB3A5171C, 0x38C64856, 0x263FF6F6,
+0x0BF5A430, 0x2DE1414C, 0xC77AB74B, 0x2B0CDBE4, 0x080A2100, 0x0A96D693, 0xD200A08F, 0xCBAF2025,
+0x61594705, 0xDE998CE3, 0xB8AA74B5, 0x7B34ED5E, 0x769E32C0, 0x33B3E88F, 0xE79C9AA5, 0x32A07B94,
+0x9172D459, 0xD40288D6, 0xB9147676, 0xF5293134, 0xD0788897, 0x379D7811, 0x403B114E, 0xB89DF02A,
+0xD402A890, 0xD78BE71A, 0x1743268C, 0xE8DBCCF4, 0x6F130672, 0xDBDFAF8E, 0x9BE7DF6C, 0xB3558C45,
+0x6E48E792, 0x9E958C90, 0x4E47FB4C, 0xF6F72B3B, 0x5498761C, 0xABC58E3B, 0x67CEE292, 0xEAFDE9D1,
+0xE98FEBFA, 0xCD5D86A3, 0x52F71AB7, 0xA3E7584A, 0xAFD93F81, 0xBE2D6EE8, 0x93043099, 0xC1CEC3B9,
+0x7FF7EC5F, 0x1AF1F515, 0xD44159B5, 0x83873C85, 0xB45D4B37, 0xA7DAFD3F, 0xA145445C, 0xB7B5E2FA,
+0x299AA308, 0xACBEFA68, 0x2D437954, 0xC32D1A87, 0xAC0FCAB1, 0x59F5571C, 0x3BB8D4DE, 0x81555D2E,
+0x689DFFC6, 0x4EC5FFCC, 0xDDCE906E, 0xBFEADA97, 0x352938EA, 0x3FF5EED4, 0xCCAB8459, 0xA61CDF42,
+0xCE2D7474, 0x746D3225, 0xEFDEDA8F, 0x2D98C223, 0x5F74030F, 0x8F832AA7, 0x8DA419EA, 0x6375DE90,
+0x9E55F30B, 0xF4D96420, 0xE4812A0A, 0x41554825, 0x45AFE10C, 0x8A51F3D0, 0x38354DE2, 0xAD935F42,
+0xA0B3038E, 0x778A0507, 0x259B53E0, 0x0FF6AD00, 0xF2513E0D, 0x9C61A930, 0x19403A59, 0xE3B478C5,
+0x26C4B724, 0x42F11A02, 0xAD21B76A, 0xE5ADC64C, 0xA4C6022D, 0xCA4C15E7, 0x2702BF67, 0xC65470E4,
+0xE424A0F7, 0xE0FBEE5A, 0x3B2F46AD, 0x13EE2F1D, 0xF9482C01, 0xAD34D7C6, 0xAD914DF3, 0x76E0263F,
+0xEC99AD6F, 0xCBDBA71A, 0x1E15A93A, 0x3C4B77E9, 0x733DAB2A, 0x23687645, 0x127CF096, 0xF391D041,
+0xB21EBA70, 0x4828D673, 0xBDB3848D, 0x7BB2479B, 0xB545E3C0, 0xC84D3DE4, 0x48093D74, 0x7ECAAF52,
+0x476EDA29, 0x9803C6BE, 0xB42BF49D, 0x7995BC23, 0xD3AC9C51, 0x2A2FB4AD, 0xBF923CD7, 0x8415212B,
+0xF9096564, 0x47A010D9, 0xCAFFB14E, 0xFE2547BC, 0x44738982, 0x952DD6A0, 0x9955FC02, 0x04E30881,
+0xCFB58F77, 0xD0412EE5, 0x22A29963, 0x7CD6BC61, 0x977E57B7, 0xA1EBC0AD, 0xF0DE5ADF, 0x0A4E5346,
+0xFF15DDE1, 0xA60B7DD5, 0xA8022F68, 0x60E9BB3A, 0xC06153D6, 0x55BBBD6C, 0xAB92AEB3, 0xFE6E1BED,
+0x57720032, 0x33F16553, 0x7CD19996, 0x429C5738, 0xD7FE558F, 0xEB200924, 0x11B02D57, 0x8B57708F,
+0x622E9C9A, 0x93B80A89, 0xE31A6D4F, 0x6BD9D85E, 0x2156BBB9, 0x66703066, 0x46EB6B25, 0x3DB4DD27,
+0x63B54FB7, 0x27713082, 0xD7C09ABA, 0x24BFEB6E, 0x498A0BF9, 0x7683B9BF, 0x3EBA0C2F, 0x2676D825,
+0x797CD8BB, 0xA04EE19B, 0x9A4BBBC5, 0x525B3545, 0x694083B6, 0x8925DFD7, 0x948B0FF8, 0x65D5E8D1,
+0x6B0796A0, 0x551012A1, 0xB0AB4DFC, 0x46992008, 0xEB3134F6, 0xD8D824B3, 0x6A229862, 0xE5A0E53D,
+0x1A518B2A, 0x54F895E7, 0xE7D62DC8, 0xEA646A1D, 0x7119AB57, 0x868FC8C1, 0x27E46B20, 0x2608FB46,
+0x344B2FC6, 0x554EE140, 0x94B2C5D0, 0x2CC23585, 0x5BFD4837, 0x47AADCDB, 0x384F450D, 0x4517FDC2,
+0xB2C4F183, 0x043F9A55, 0x284B44C8, 0x2DDF8C31, 0x86A693E0, 0x225B4675, 0x1349399E, 0x21AFD1C8,
+0x87512593, 0xAC401D91, 0xF0CA5F54, 0x62E6201A, 0x22351248, 0x3F118012, 0x481DAA59, 0x16BCEA42,
+0x57C1939F, 0xEE631603, 0x8ACAA96C, 0x326C12E3, 0xD3F395D3, 0x2DA5676A, 0x6107755E, 0x3FF1BC7B,
+0x994291F6, 0x9A50C5F8, 0xD9BA2F39, 0x5EA3FC44, 0x37D6A8A4, 0x96C5C75F, 0x6542AE03, 0x60B1E649,
+0xA57D8A09, 0xB13C1AC2, 0xD9C41A77, 0x41775980, 0x9A01493A, 0x15196244, 0x1C17AF74, 0x3AE10DED,
+0x47CE2DF3, 0xB4299162, 0xEC36B97A, 0x29860464, 0x8DE0D251, 0xA1490DC2, 0xF2C5D25F, 0x50E0AEA7,
+0x05F220D6, 0x6C4861B3, 0x966F0201, 0xAF7320DC, 0x3BFAAA01, 0x07D6089B, 0x7C1FE0B7, 0x51A8EDD6,
+0x5EFBF2CA, 0x06CA3742, 0x812C359F, 0x5574AEBD, 0x843ACB69, 0xCB2B37FA, 0x933336E1, 0x08E41A44,
+0x9F2DECBA, 0xB68B1010, 0x321EFEC8, 0xB8EABD49, 0x4D0B79A4, 0x2F275128, 0x81F1E782, 0x23CC4677,
+0x4F9FDDF2, 0x8061477B, 0x5832B0FC, 0x5546447E, 0xA216E471, 0x81A951D0, 0x5C677310, 0x610E073D,
+0xB54BEB3E, 0x5CA4E792, 0x391A16E4, 0x546D66C3, 0x107C7FFC, 0xFEA655C8, 0xA65B2276, 0xC1AD4858,
+0x478EDB3B, 0x14462957, 0xDC7A3F28, 0x4642AE56, 0x7187BA34, 0x390069EF, 0xD9BA3694, 0x02E8F407,
+0xF1F8B560, 0x5FBF106F, 0xA2971B0F, 0xCD5BB86C, 0x520B2F8F, 0x58D8FC9A, 0xFFDC28AB, 0x458184D1,
+0x9A500036, 0xD0F523EB, 0xB70BC818, 0x9FF1441D, 0xF073D345, 0x1812A1D9, 0x38066A1F, 0x8543E66C,
+0x37DA9E88, 0x481DFA57, 0x70337175, 0x146950F5, 0x1985B14D, 0x35445BCE, 0x20D3BF8F, 0xCA8398D5,
+0x56BFD6A4, 0x3DE9F06D, 0xDAAE5922, 0x6A9BD448, 0x8B0C9B41, 0x8A8703D2, 0x9A49E68F, 0xFC37B9E1,
+0x569E6A5C, 0xBB5E938A, 0xA37CD367, 0x8D94127C, 0x80D68916, 0xF6227D56, 0x120F7B9E, 0x478A3F15,
+0x7D5E76DF, 0xC7D1B923, 0x01E7F984, 0x1B13FF4F, 0x1EA78E3E, 0xDF53AF24, 0x46281024, 0xBCA323F5,
+0x422B4EC3, 0xA7814B14, 0x9CB132FE, 0x0DC8033C, 0x6DA20129, 0x0546BDB6, 0xF99F42D7, 0x175425B2,
+0xFA421C40, 0x954E1D16, 0x80C45F5E, 0x3CC18C4C, 0x0620F1B4, 0x045D66D9, 0x0590D408, 0x668D471B,
+0x0AE3E21F, 0x36A5626D, 0x3E91DACD, 0x08EEC945, 0x662958BE, 0x7C049548, 0x82C3A42A, 0x8777D62A,
+0x6E91F9FB, 0xA6A9CCCD, 0xBF91161D, 0xF0C0204B, 0x5DE5DF73, 0x3D9DE2FD, 0x59476634, 0x1A7A9894,
+0x1D039F7F, 0x2F452F02, 0x8EC8EBED, 0xDED57DBD, 0xB6A96030, 0xAE2067A5, 0x608ABA27, 0xDB96FD8E,
+0x07905FA6, 0xE4F3ADF7, 0x27BCBD38, 0x4A88C69A, 0xDCAA5435, 0x42967894, 0x22147D32, 0x746F7890,
+0xA63D6FA8, 0xC8C9FCC2, 0x02605396, 0x4554459E, 0x2BE26877, 0xE2237073, 0x887FF301, 0x4A4EA34F,
+0xFB72CE42, 0x3406DDD7, 0x35E87052, 0x8B533694, 0x3F453117, 0xCA62DE34, 0x6301B198, 0xFE819487,
+0x544F9F44, 0x683516CD, 0x7B05848D, 0x690FEFBB, 0x4720C125, 0x7D1814E7, 0xDA49AE86, 0xC98C51E1,
+0x07AE0F77, 0xEA958BC9, 0x617ED7B4, 0x72FBB89B, 0xBCDE83AA, 0x00C0B1C7, 0x01010000, 0xAB3C009E,
+0x74D17F12, 0xC041A79A, 0x3BCC6B4A, 0xEA3993FE, 0xBF159271, 0xAE5C57F3, 0x9C42C536, 0xA8DB3C80,
+0x235C9D40, 0x55DDAACA, 0xF091DB9E, 0xB7ABE0B0, 0x7CB25E8F, 0xF474929A, 0xC074DAD5, 0x53268B5A,
+0xC517664B, 0xA6501853, 0x89E687A0, 0x5AC2E4B4, 0x8625D482, 0xC2F8924A, 0xF3F4D871, 0x0903C70C,
+0x3093D19F, 0xC9B5B426, 0x8C7647DA, 0x11885BC0, 0x1B67A68E, 0x6304E8CC, 0x859AAEAF, 0xE4EA3DA9,
+0x16EC3DCA, 0x924EE9CE, 0x8C2545AA, 0x74C9D8D0, 0xCC8C734D, 0x2B2E9746, 0x7DD2E176, 0xA804B9C2,
+0xFE4FEB25, 0x792D7AE4, 0xDEF30CFB, 0x012ACC70, 0xEA3EFFBF, 0x060428D4, 0x14F7F9C5, 0x64912878,
+0x7941B875, 0x14B162CF, 0x4BF2ACAB, 0xF4168DC6, 0x143E776F, 0x36AA04C9, 0x8EE15437, 0x59AD5471,
+0x5D9AD93F, 0xDDB24596, 0x98AE434C, 0x9D0F1B13, 0x48DE69E0, 0xA028D857, 0x61D47C4F, 0x454CDAAA,
+0x8FCBAE12, 0xCD9B5E9C, 0xE8B2B6DB, 0x5FC89357, 0x68FA1A4F, 0x5E34D8C7, 0xA4D7EED4, 0xAB631FFB,
+0x8DB04226, 0x35E2C94B, 0xF88C796C, 0xD7E07322, 0xF3D6CFE0, 0xF1077EC4, 0x11BB02D9, 0x748A8F3A,
+0xD868C833, 0x8BB12231, 0xD4C183EF, 0x185F6531, 0x78D46733, 0xC6697E96, 0x749C9C0C, 0x81CED248,
+0x74B0A26C, 0x65D1E3FD, 0x22659344, 0x503CDC43, 0x2D424DA9, 0xEEAC1964, 0x294E7DA9, 0xA6BFD9AC,
+0x33F82ADF, 0x901AA6AB, 0x8F87DB61, 0x752B10B5, 0x2BBAADB3, 0x81D6B0D8, 0xE9230626, 0x9833B487,
+0xF7DA0E10, 0x5ACD6E8C, 0x3FC380A9, 0x3246B8E4, 0xAD49678B, 0x2F2EABA5, 0x78FA05A4, 0x1B50B24E,
+0x04445B34, 0x0AAADA08, 0xE62A8F0A, 0x6C453A22, 0xCE25AE4B, 0x49552E3B, 0xACF2EF87, 0x13920F42,
+0x8F763CDB, 0x81BB9292, 0x4CD8E84B, 0x11243297, 0xB2B3AB2F, 0x351623CC, 0x1B3BD6B8, 0x919DCDC3,
+0x5CC0D5A2, 0x47E8175C, 0x4CFCEA28, 0x01D0FC03, 0x6E1BE207, 0x4188E63E, 0xC0B3ECF7, 0x8977157C,
+0xAA337D66, 0x8FABD196, 0xF83A8081, 0x77FC6026, 0x6268698F, 0x610B80E6, 0xEC4A5CCE, 0xCA32BC9E,
+0x0F0188D3, 0x994576AE, 0x98962B37, 0xA29F4710, 0x17AD9F01, 0x73BE6795, 0x4DF0503B, 0x1021E117,
+0xA6071DA5, 0x89282B30, 0x2FED67E5, 0xB3773BC7, 0xA9219F80, 0x3F63546B, 0x5C64D251, 0xA7EE560C,
+0xECC044B0, 0xBECFCEE9, 0x43AC8AB4, 0x01DE6642, 0xD60F1C32, 0xCC31631B, 0xB375CC9E, 0xE2CA6319,
+0x58BD0B27, 0x7FD4C7D2, 0x140B2310, 0x37BD967E, 0x4CB39023, 0xB6EB709B, 0xB01E77D9, 0xDECC371E,
+0x1B9C518A, 0xCEF1A366, 0xC05531AE, 0xD75E5F00, 0x38A19710, 0xEA5C1FC0, 0x027ABAAE, 0x4EB5F1F2,
+0x60893EB6, 0xDA32E510, 0x04C87021, 0x19FAB886, 0x2AD84DCF, 0xBEAF5239, 0x44CAD6EA, 0x749A2291,
+0xFA45F9F0, 0xAC75C2E0, 0x5200E817, 0x7CA35068, 0x83B7FB54, 0x9C0AA5AF, 0x972F376D, 0xD14747DF,
+0xC4CD278C, 0x0C363624, 0xDFBF262A, 0x97BF41F3, 0x021D1833, 0xF868F223, 0x7654249E, 0x63CFE18A,
+0x13D0A5EC, 0xD2591BA7, 0xED225A3F, 0x57BFF833, 0x28A87E7B, 0xEB7774DB, 0xF981F3EA, 0xA70A7BB5,
+0x66CDFB70, 0xBD7C4EBC, 0x4832948F, 0x20940AF8, 0x41F239F3, 0x021FFCFF, 0x5AFC93FE, 0x4C07CABA,
+0x6AC309CF, 0x805261CB, 0x9AAA9FBD, 0x4CC8AEE8, 0x2A17F102, 0xF0A8CF36, 0x0A498C8A, 0xB96E17D2,
+0xF0992725, 0x307B5C65, 0x35950BF1, 0x3CA99B77, 0xEA846A28, 0xD5D85C78, 0xAD1C5135, 0x6990A48A,
+0x03AECC16, 0xD766DD4C, 0xB42DA0D1, 0xFF78543E, 0x6D65C9C2, 0x05C66531, 0x412F79B9, 0xE11331EE,
+0x59734D0E, 0xD4F65BE0, 0x3E6D8B46, 0x9BF83327, 0x2722164E, 0xCE6250F4, 0x3669CEE1, 0x39BCAB07,
+0x2C05C99D, 0x1A85A486, 0x2B316E88, 0x89016AD1, 0x357D4E0A, 0xC087D6D0, 0x651E6FD9, 0x245E5E5A,
+0xA3EB9885, 0xE1B5BF8D, 0x7B28019B, 0x418FEA19, 0xFDEFC945, 0x87870368, 0xA88296A8, 0x5BCACF9F,
+0xBF521F99, 0x5194441D, 0x493E5FC6, 0xC4F24971, 0x80DF645C, 0xCAA7E86A, 0x9F118EA3, 0xEB255387,
+0x83CA5923, 0x78D9D98A, 0xB82613FC, 0xEDF5B702, 0xD6662505, 0x19186CE4, 0x9F15EC94, 0xDCD89356,
+0xC701F389, 0x5DB63A69, 0xA4F41FC8, 0x3585C12C, 0x2D76D0A7, 0x877E02E8, 0x472B563C, 0xF67E31E8,
+0x320CFEFA, 0x61533350, 0x07A8FDAB, 0xC965E502, 0x7D522F25, 0x591B7ACE, 0x5CDDA8BF, 0x87EFF1F6,
+0xFB60BBB9, 0x4063EC97, 0x7ADB5BCC, 0xA8FCAFDE, 0x6D34FA6D, 0x0616C0FB, 0x8E948CAF, 0xF1E8E9FC,
+0x505BD3A6, 0x7883A416, 0x44FCC919, 0x58659B3C, 0x53E0FCD2, 0x2B0B2D7A, 0xFD6EB33F, 0x935C395F,
+0x33EC2A0A, 0x9C7247D7, 0xE69CB47D, 0xAF56117E, 0xC15DE75D, 0xB50D94C1, 0xFE2D7B4C, 0x47EA3FBB,
+0xD62EA30D, 0x1C753552, 0xF9C15133, 0x2295E7BD, 0xF05C681D, 0xC3F6FFBA, 0x5A0B8589, 0x549192B6,
+0x9FC23BE5, 0xEB9269DE, 0xEBF3C80C, 0x874307CF, 0x82C8DD82, 0x37818E39, 0x1ED8A55B, 0x9F872E26,
+0x665A36CF, 0x576B552C, 0x77A91C47, 0x51C6929C, 0x76CA6E2C, 0xABC50C6E, 0x1FAD20AB, 0xEF0EBED5,
+0xE8781896, 0x82E3A863, 0x222BEA3C, 0xD4140F8F, 0xE29EE70D, 0xF0D3EF3F, 0x08C27DD2, 0x8B9B5B21,
+0x1DB0D115, 0x9BEFD6B2, 0xBAB99CE0, 0x75A1A0CC, 0x724CDE58, 0xD6EB7C32, 0x93A975FD, 0xC1B72DC6,
+0xB5C266A6, 0xBEB9B888, 0x932E4101, 0x82DB77BB, 0x3C4B6C48, 0xE50F83B0, 0x2B4A5255, 0xE0A5A7F8,
+0xC08564BC, 0x2F5D37C4, 0xBE8E9142, 0xC6DFED43, 0xFDBA20BC, 0xAE46C2B3, 0x2EF2601C, 0xAEC1981C,
+0x708357C4, 0x5DF619E4, 0x22450388, 0xDF19F5DC, 0x39300966, 0xC78AE2DB, 0x12F03FB1, 0x36F0386D,
+0xA9766201, 0x5401DF60, 0x5C362995, 0x3EC9BF4D, 0xBCD48D47, 0xAF94B482, 0xFE4B5B58, 0x41BA4763,
+0x85736588, 0x9E284D48, 0x6A1AD237, 0x7065A493, 0xD0C1971A, 0x445DF499, 0x950A4558, 0x94D33E35,
+0xFF784D68, 0x71DDE30D, 0x1B85D9F8, 0xCF13649E, 0x858754F9, 0x1ECCA8C9, 0x88C4EB49, 0x225471E6,
+0x75DDAD4A, 0x85DD0702, 0xE67EB035, 0x478D0627, 0xAE3BC30E, 0x87FA40E0, 0x62C1883E, 0x6DFD942C,
+0x3E70EA6C, 0xF4508843, 0x101A4584, 0xBD89051C, 0x47CD58C8, 0x92F884C6, 0xBF136D54, 0x5E64F9DA,
+0x5D585514, 0xBAE330A9, 0xEBAEC169, 0x834368E5, 0x4A1705F6, 0x000080A2, 0x9E010100, 0x12AD3C00,
+0xEDEFD17F, 0x8617783C, 0xCD891B3A, 0xDE1FF811, 0xD1F510B8, 0xAD07C438, 0xAA057FD0, 0x0878AC61,
+0x150CD5A2, 0x985535F5, 0xC29BDE55, 0x02A298D1, 0x5600CAC7, 0xE61F20D6, 0x2693BF7C, 0xDE48E26F,
+0xB4300FA2, 0x11932032, 0xDCE4C9F8, 0x3EB435BF, 0x212E2A78, 0x6C9BD4F4, 0x64DAA02C, 0xE7186620,
+0x1B36A827, 0x5991BF82, 0xD2C0A140, 0xB8526677, 0x66A6273A, 0xA82852FC, 0xB74D379A, 0x47D8AFDF,
+0x23867D59, 0x274F7304, 0x40F1EF97, 0x5AE462B9, 0x67F963F6, 0x0A47B608, 0x66A0C715, 0xB35130AA,
+0xB1A37469, 0x9EE7C585, 0x3C5083D8, 0x3FAC9794, 0xA5C61419, 0xD0A45AAB, 0x162E123A, 0x86EF49EE,
+0xA8FECC8E, 0xBE4C9CB5, 0x019ECEF8, 0x7AE8563F, 0x091FEB3F, 0x41787A96, 0x933C6207, 0x4E7450FE,
+0x0CDF3EC9, 0x1C68DF9E, 0xB26924D8, 0x7EC51867, 0xC6A2562D, 0x293BD314, 0x74F76B30, 0xFBE44B67,
+0x4E15D18D, 0x21EBEE8C, 0x4FBEC99E, 0x7DEDEB7A, 0xCFA98C13, 0xD341DF8D, 0x3FFE7160, 0x5008B9EB,
+0x0BCBB8FD, 0x1ED4383E, 0xB6120CE8, 0x9AE9ABC5, 0x3B24BF24, 0x787A7928, 0x4AC8E0CF, 0x5840DFC6,
+0xBA73EDC2, 0xE4A7B124, 0x018B03C6, 0x745DC693, 0xB908F5D3, 0x804D8F69, 0xAA03C267, 0x8F3DC63A,
+0xAD54860F, 0x029C0AB4, 0x1BA48FBA, 0x4888AC3A, 0x818C1AFB, 0xE8EDC715, 0xD597AE35, 0x7C1EDE69,
+0x76CC68BD, 0x52221BB3, 0x54DED261, 0xEF7A2A2E, 0x6CECFCA2, 0x73AE3B7F, 0x6172A15D, 0x3E53D0C3,
+0x90C539A6, 0x87C0A6EF, 0xCD1E5B4B, 0x8B4E42D5, 0xD65F8F5C, 0xCCEBC2EB, 0x8BC1C717, 0x16E0BC06,
+0xAA7FDCD2, 0x3A99FBE8, 0xD2869A65, 0x756799D9, 0x8B804D85, 0x61A1298A, 0x9D81CE10, 0x8E93A82F,
+0xBE491B56, 0x42788F41, 0x497E71B7, 0xCBB1F2D9, 0xFA459C6F, 0x28AA04AF, 0x6E4D691B, 0x5BF4B588,
+0x513D4D38, 0xBBE5297B, 0x3FC48E86, 0x0CC704B2, 0x9477D2E7, 0x6F351ED2, 0x920B4B51, 0x42DFB624,
+0xB1093164, 0xFB73369A, 0x3C79353B, 0xB6295D11, 0xC7FCFF38, 0x9FDFA1A1, 0xCA37C000, 0xCE823928,
+0xD399A3E4, 0x4FD64C61, 0xC00E14C3, 0x0D691EFA, 0xC4E5F027, 0xD635AC8B, 0x40BE0628, 0x75E644C1,
+0x8A7A961A, 0x7E306A0C, 0xA99A8665, 0x5BC266A6, 0x62168FD4, 0x23B50564, 0xC1346F3B, 0x4C4223B0,
+0x78F51D73, 0x8E8B30A9, 0x85D3A19F, 0x5FA3A962, 0xAC2CA633, 0x862FE7A1, 0x165B12AC, 0x931D63DB,
+0xD5082782, 0xAEB54428, 0xD373BA95, 0xF52BF777, 0xFA372EDD, 0xCF7433E7, 0xF38A32B2, 0x29ADC4FF,
+0x3E20617C, 0x7BB439FE, 0x725FE3B8, 0x3A289838, 0xD0A4ECD0, 0xD80938C9, 0x842990ED, 0xAD5BE107,
+0x9A5B6CE2, 0x49C97C17, 0xFFC19069, 0x1573E14A, 0xE78DA626, 0x21E04231, 0xAAC11FAE, 0x8D8245E2,
+0xC703F766, 0x43131C66, 0xF67271E8, 0x7959DB7F, 0xB7CBB679, 0x8610C0E9, 0x7ED96E40, 0x0B755108,
+0x409DF724, 0xBF574D35, 0xE5223E79, 0x1805B750, 0xB930A9EF, 0xAA6C500B, 0x7A6ECF7A, 0x5A149297,
+0xC844E5A9, 0xF6CCBE43, 0xB7A27247, 0x0FD09CBA, 0xBC3EF00C, 0xCB85F9B0, 0x20A4F2CA, 0x957D8A33,
+0x51C9E9DA, 0x2B72530E, 0x2217562E, 0xD61FCB7E, 0x4440CEC0, 0x64440C0B, 0xAC1571CD, 0xE67B16D9,
+0xF6B69BEC, 0xAAB1D260, 0xF197B0B2, 0x72DF4AD2, 0x5356DD63, 0xF1045649, 0xF8C8E2CF, 0x3F6D8A72,
+0x3E6DF6E4, 0xF24F5409, 0x17DCC1DB, 0x06D1797A, 0x9C673439, 0x60C29C14, 0xACF2859F, 0xDA6789E7,
+0x59DD42BE, 0x17853BF0, 0xB994FA5A, 0x2FF50D1C, 0x9914E6F9, 0x421B1628, 0x88667AAF, 0xD1FBAA15,
+0xB3598D8A, 0x830DB149, 0xE13F37B0, 0xF37D85C6, 0x45E95311, 0x79208EF7, 0x0813A7CE, 0xE5C31045,
+0x7A200DD5, 0x5F456A65, 0xAB93468C, 0xAEB58836, 0xB2A3A102, 0x126FE5C7, 0x9A12E890, 0xEC1BDCFC,
+0x1937B8E7, 0xDD429646, 0x42267EB2, 0xBE1CFF6C, 0x42B2A8E6, 0x48E86E7B, 0x23EAC7A0, 0x8DF227A6,
+0xA2B4D47A, 0x01E1BB1E, 0x18E63E01, 0x5AE00C73, 0xFE626F1D, 0x1C067168, 0x6BC9742F, 0xA5C6A142,
+0xCA80015A, 0x7EDDFB73, 0x4A712176, 0x76B80BEF, 0x19530FAF, 0x376356C4, 0x4262EC82, 0x3AF6021B,
+0xB7F9E3A3, 0xB9D96C56, 0x9D2C0E85, 0xA82FEC78, 0x2EF09CC0, 0x716E5A33, 0x0879E812, 0x0E016CFF,
+0x68EEE895, 0xD7CA1FA6, 0x9D110958, 0xF27E9AE2, 0xBA4849A5, 0x787D2FF7, 0x00C11815, 0x9206BA59,
+0xDC8AA7C9, 0x4BBF263D, 0xE855BF20, 0x8E09A53E, 0xDC77B57C, 0xD9ED6AA7, 0xBE974168, 0x3339E65A,
+0x8656AE06, 0x165E07E2, 0xA88F5AE5, 0x03FA1CE0, 0x48D11C8B, 0xC434F9E6, 0x98E73DFC, 0x904BB788,
+0xA6D1A09D, 0x28DA50D9, 0xD26A1584, 0xCF5AC18D, 0xFD5B1BD9, 0x5D1103C7, 0x29A53C92, 0x339EE8C8,
+0xC78A121F, 0x34E07603, 0x22BDF6A8, 0x7D5D58AD, 0x0ED892CB, 0x47083976, 0x068B27D8, 0x68A730B6,
+0xAF109226, 0xB6C43FBD, 0xB2057CDB, 0xA0BC5D0E, 0xECEDBD34, 0x10027320, 0x195749B0, 0xE83E18EA,
+0xCA5D84B6, 0x136934B7, 0x8E5D9E4D, 0x9AC14283, 0x211F13FA, 0x0B992DF3, 0x967213A5, 0xF011227B,
+0x171B6793, 0x193E6E56, 0x3748D3A1, 0xD35909AD, 0x99FBFC93, 0x465809AA, 0x6976DEBD, 0xC82B6B70,
+0x1DFE318E, 0x98F1F284, 0x1FA6123F, 0x12C754C4, 0x618155A8, 0xB887ADDA, 0x58D04A99, 0x79A67A17,
+0x2A63E3EC, 0x76027718, 0x85737695, 0x365BAD4F, 0x81956BA7, 0xD9CA3CFD, 0x25114BAF, 0xC8CD1D73,
+0x674B739D, 0xC8818F72, 0x091DE2BD, 0x0D72E108, 0xBA21816C, 0xB99FCD2B, 0x61AB8CB0, 0x4D40DDA7,
+0x36BF0797, 0x93343499, 0x4AF040A7, 0xE99D06A6, 0xA13C7153, 0xD5AEB2B8, 0x5460A1B9, 0xC1E00D4A,
+0x0000207B, 0x88210100, 0x3F2D0F80, 0x00E431E2, 0x3F39A881, 0x6F63131B, 0x9CD4E68F, 0xF54FC8C7,
+0xB4784A94, 0xBC6E022B, 0x483BDC9C, 0x7FDE9F81, 0x1983FD79, 0xA026E59B, 0x076AA524, 0xB5055C18,
+0x34AB7B4E, 0x00169A0A, 0xB2D853BA, 0xA85591FC, 0x4659DA7A, 0xA60B4EF9, 0x69A06665, 0x921F5F27,
+0x09622330, 0xFFFF35D7, 0xEF0367FF, 0x8779E4B5, 0x44E8C69F, 0x1B27940C, 0xE1FA81BD, 0x82BEA068,
+0x4F8D1DF7, 0xBCA4E83B, 0xAF3521FB, 0xEE8CDC30, 0x0CED6889, 0x34C31804, 0xA91BC8A8, 0xD37B0208,
+0x3C15EB6C, 0xAF4ED92E, 0x17775153, 0xD27FBEC9, 0xC6766176, 0x839A9DA2, 0xCEE88636, 0xF949389A,
+0x7AB99674, 0x9906494C, 0x4BB41B01, 0x040EC336, 0x9F84B49A, 0x08BDBE1E, 0xC5DEFBE9, 0x334FC8E0,
+0xA8223A79, 0x88A1D465, 0xF95331A6, 0x23AB3154, 0x1703BEF4, 0x8C1D1859, 0x83B4FC74, 0xABF95CF6,
+0xDF2BBA03, 0x0EC378F9, 0xFFD6E0D0, 0xF7FCE259, 0xD462FAB7, 0xDEDADDAA, 0x8DE269B6, 0xF0D73711,
+0x408C4840, 0xDDF99B1F, 0x4B204D80, 0x8C574C2F, 0xB23D7FE3, 0xD070D9FB, 0xD1196BEE, 0xAE26FD9A,
+0x398214F1, 0xE51A584C, 0x7B4F4150, 0x6BBB5B25, 0xB917E729, 0x1FCEEA53, 0xE85F84E6, 0x33D70F35,
+0xA070088A, 0xECE5F05E, 0x774792AB, 0x4DF6B32A, 0x84B044DA, 0x4978E098, 0x887FE295, 0xCBF5AFBF,
+0xB4CECB37, 0xADD7FFD5, 0x8D108057, 0xD2EF678C, 0x8CFFFE72, 0x58879E86, 0x08076590, 0x4E27C4FA,
+0x67011C06, 0x41C07A67, 0xF251E716, 0x9582EBB9, 0x55F9E74F, 0xFDF3934D, 0xBA90C250, 0xC1160360,
+0x4CFFDC77, 0xB7877C80, 0x49EE520A, 0x0E8F2C62, 0x87D90375, 0x760461FF, 0x709FB2F9, 0xE52A2A3C,
+0x8A79F325, 0x4321C37F, 0xA570966D, 0xCC31FDA8, 0xBFC7FCAF, 0x69356F31, 0x0E9453E7, 0xEF3F7757,
+0x93C7FC52, 0x1D4EC5FD, 0x940A94A4, 0xCAE55AA8, 0x04F8F228, 0x6D314758, 0x5BACD468, 0x6D857CD0,
+0xEA35AEE5, 0x377B8D3A, 0xFCEBF747, 0xAE8D606F, 0xBE2A191F, 0x7D52DCC1, 0x15752BE5, 0x9E1B6ACE,
+0x806DBC4D, 0x8D85D605, 0x6BAD8F32, 0x2896B673, 0x516FB41F, 0x629AAFDB, 0x589CA0B5, 0x22E1EEC4,
+0x220DBEE9, 0x525484EF, 0xC3B7F4A6, 0x6D4BD05D, 0x387FB878, 0xDBB539CB, 0x93FF1F07, 0xFA29D5C9,
+0x820F715A, 0x518407BD, 0x51F10991, 0xB18D4779, 0xCA0858DB, 0x60A30246, 0x04A9E39C, 0x0738DC26,
+0x729BD862, 0x727AE3D9, 0xF9840345, 0x1DE3824C, 0x3FA11D75, 0x9CB5CF05, 0xBDD9164B, 0x07285AAC,
+0x6CB6C557, 0x753DFFA0, 0xD0FF34CA, 0xA66BB410, 0x0D59DFCF, 0x7B3E831B, 0x8774C386, 0xA8116B95,
+0xC912E05C, 0xE3133ED7, 0x7D2C2DB8, 0x492A5035, 0xF1D3454A, 0x74359240, 0x1538ED5F, 0x25B2573F,
+0x2B7B4A62, 0x732861F4, 0xBC80D802, 0xAA25840D, 0x7E98D558, 0x7FCB7A04, 0x4E79BD44, 0xC705B8B6,
+0xF906DA60, 0x185F4C6A, 0x03A93C13, 0x35CDF5B7, 0xD0AF82FF, 0x208DBFF1, 0xCDCFEF13, 0x753D5EA5,
+0x2A90022B, 0x4FB09A22, 0xFBFDA7B0, 0x1419F2B1, 0x564A630D, 0x07A50304, 0x721FAB03, 0x629BECAB,
+0x91304162, 0x8C02EF3F, 0xC9384E06, 0x4B6D8D6B, 0x28EDF67E, 0xFE5AC9C7, 0x8EEFD8A2, 0x82170F42,
+0xE5406E55, 0xB5CFC9FB, 0x7F7066B2, 0x37A0973C, 0x42486441, 0x8799E548, 0x83FECD4F, 0x2FCD23D9,
+0xC74BCACD, 0x2873D6EB, 0xE6025FC4, 0x6345594E, 0xBE8A996C, 0x0E0A35DA, 0x3B928781, 0x62487583,
+0x3FE6F3E9, 0xC936EABB, 0xC73BE965, 0x78FB948A, 0xF53F87F5, 0xFADDF2DC, 0x7717747C, 0xCC72A96E,
+0x05E860B3, 0x5ED9DD20, 0x792B6395, 0x23CBADE6, 0x58ABAE3F, 0x84FD5300, 0xDD21FD40, 0xC1948BE8,
+0x72610E93, 0x41A3C140, 0x78BC2D3C, 0x90058185, 0x3D6ED3A6, 0xDEEB48C4, 0xE57508B7, 0xC8F55452,
+0x31AC2BC7, 0xC451BA8E, 0x09EF37C5, 0xD7B39F03, 0x0C6C95C7, 0x1777D71A, 0x4493B7AA, 0x036D6BE0,
+0xC974BD4C, 0xCF5FCCF8, 0x2DA5746F, 0x90D6A008, 0x5FE78FCB, 0x75CD2823, 0x3495D23F, 0x00D23A09,
+0x2FD3FB5B, 0x0E5AB87E, 0x6582037B, 0x0A0A26DF, 0xA7B939CB, 0xE172CBE7, 0x93B9116D, 0x7CE73EBC,
+0xFB93ABC1, 0x977D081A, 0x37C14D74, 0x5E917360, 0xB23D9932, 0x716FED3B, 0x3550BC1A, 0x5F0C7A47,
+0x557EE8F2, 0x05CFF7F2, 0xE400D70A, 0x111D403C, 0x2539F0A6, 0x092FC4E1, 0xB3EF629B, 0x936BA404,
+0x2C5D0A53, 0xF5853F96, 0x5A4D443A, 0xAA0BC67B, 0x69E451A7, 0x0C40F6D7, 0x5D55DDC0, 0x67C1A941,
+0xBD2DD8FE, 0x23E976F1, 0x88BC289A, 0x3FC76A3D, 0x5B00A51C, 0x101BA1E8, 0x3C552BE5, 0xEC593DC6,
+0x1C57FC55, 0xA564E153, 0xDA030989, 0xC7600EA3, 0x1209E0B5, 0x0DD530D7, 0x1FE3C91F, 0xF567BA4E,
+0x01DA9531, 0x8C8AE306, 0xE3C72EA1, 0x65E646F8, 0xDDEA927D, 0xAB226B38, 0xB862C3AB, 0x0ED6D252,
+0x7AABCC59, 0x6EE15111, 0x73E8B298, 0xC6AB0B03, 0x348BFCA6, 0x301338C7, 0x4ACB351D, 0x4052884D,
+0xBD2367D1, 0x67CF0233, 0x41B9F5BA, 0xD00E061B, 0x409A4CF3, 0x6A588F01, 0x716E6A32, 0xC7CF188E,
+0x5D28709A, 0x02191E6B, 0xE729CA38, 0xE424BD64, 0xA1E0DBC7, 0x997C382C, 0x78491E99, 0xFE9923B6,
+0xE3E2AB5C, 0xD5CC595E, 0x6A6CC135, 0xD424919F, 0x92015724, 0x618F133C, 0x5B97E0F3, 0x4AB944BB,
+0x37FD1D93, 0xC576535F, 0x274878F7, 0x29E85AA1, 0xA7882E40, 0xB46C1C2B, 0xA54664C4, 0x27617295,
+0xE0B98A62, 0xFFDDB0FA, 0x5ED0D7BA, 0x2CFE062F, 0x602B86EF, 0x8AC8B055, 0x30231683, 0xB5CE6927,
+0x4E11D7BB, 0x9630E9A5, 0xB641F6F0, 0x63042BF0, 0x39732660, 0x50CD3331, 0x5F3B9463, 0x9F3D2C4E,
+0x0B40B8F5, 0x4EFBC40B, 0x0129BECC, 0x89CC0F40, 0xE17D4C7D, 0x94B1353E, 0x0D90FDA9, 0xCD42CAC9,
+0xB04C7C39, 0xBC7AE4A1, 0xC3FA4AD8, 0xCD08990D, 0xF3CD8A4A, 0x7986B943, 0x33DAF71D, 0x354759B6,
+0xD3378A9C, 0x322CE302, 0x31C2B030, 0x3678584C, 0xE80F4694, 0x9AB09201, 0x6324CDAC, 0x5233DE4D,
+0x9177C89C, 0x32D8BD53, 0x6FAA7B4F, 0x4276BDCB, 0x49BCDC9D, 0x6432A5FB, 0xEAEFF244, 0x2DC5327D,
+0x2744AAEB, 0xB4D75CE6, 0xA09E003C, 0x56F7A327, 0x545ED7F4, 0x9563B9C6, 0x5BCF074F, 0xAA3D8735,
+0x4BACA802, 0x7C3D27EC, 0x9E005EDE, 0x521DA19C, 0x7D322C8C, 0x8781F501, 0x12A32BAD, 0xF5A62622,
+0xAC39E37E, 0xF758E82F, 0x2B4BAAF6, 0x377F065E, 0x5896FEB1, 0xA66650C8, 0x8EF9F0E3, 0xA235B8DA,
+0x49ACB0A5, 0x55EB98DE, 0x66244F53, 0x50995CFA, 0xABBD7AF2, 0x2220E2F4, 0xE97EC0B0, 0xE3411E90,
+0x326A87CA, 0x19E67BC7, 0xB2D3E022, 0x36E7BBE1, 0x26CC3EC9, 0xF53BCD8E, 0x4464E071, 0x30FCF948,
+0x69670C9B, 0x9CEA68C6, 0xDBE00D22, 0x06CA8ED9, 0xBDEC0028, 0xD82ACC8D, 0x697B53A3, 0x6F5D5A05,
+0xC1099D3B, 0x8BBFFC7C, 0x8FB90440, 0x9AF6261E, 0x4F2B5E7C, 0x29F28A4D, 0xC55A4CD1, 0x6D49532E,
+0x15BE2E94, 0xDE12789E, 0xE3902200, 0x7F78B502, 0x5A6C6034, 0xAE71AE46, 0x7C801830, 0x7047870A,
+0x7EDCB94C, 0x46C04F10, 0x784D678C, 0x3D944C35, 0x65EBB24A, 0x59D94FD8, 0x8032444E, 0x218D09A9,
+0x1C446DA0, 0x5AE5A0E2, 0xB822C6B1, 0x1BEC1BDA, 0xED93CA77, 0xCF7D8199, 0x7E037EE7, 0x05B4BA44,
+0xED107015, 0x759031A8, 0x724D9C87, 0xA704063C, 0x8ACECB99, 0xB2943E11, 0x0AFE3636, 0x91C14027,
+0x43849807, 0x1266B222, 0x41171E51, 0x654D378F, 0xAE8A5A41, 0xD7573D70, 0x06AB0A6B, 0x6154EC9F,
+0x8EEEA9DD, 0x95BEC503, 0xB5A215F0, 0xB66663B7, 0x97C5ADFA, 0xADA13E28, 0xF7251E52, 0xD972A652,
+0x4F8493A5, 0x63266C5B, 0x1BF2E647, 0x3872AFB2, 0x683805BA, 0x922C7837, 0x9DE64452, 0x441D6172,
+0x21E98BAB, 0x842D429F, 0xF09B7C90, 0x386C67EA, 0xFE41C139, 0x5C6395E5, 0xA4263924, 0x1EC2CE74,
+0x1AD17B8A, 0x35D28541, 0xA082C951, 0x8D78F2DF, 0x49A363DC, 0xA435E8C1, 0x1B42BB6C, 0x6738A686,
+0xC6EA9D8E, 0x4EA4C8F6, 0xB4CDD45D, 0xBD065EBA, 0x7EA41F51, 0xEE58A57B, 0x982BD34B, 0x2C0E374C,
+0x7633D300, 0x1019ABB6, 0x35AD94CE, 0xE93C0EAD, 0x2BCF6987, 0xFAE9F522, 0x9B8665D4, 0xDC49EC0B,
+0x2254FB4F, 0xCD497B07, 0xF0D52E26, 0x9A2131E7, 0x2687118C, 0x8BAA2681, 0x27176AB7, 0xEEFD7879,
+0xB9CE71D8, 0x53B207DB, 0xFA9B3552, 0xE5AA684F, 0xEB3659F4, 0x1D0F27BA, 0x39E2D338, 0x31ADA0D1,
+0xD7A38BB1, 0xB39D26E7, 0x82052A5C, 0x6D6F94AE, 0xACDBEEA6, 0x8DF4E10E, 0x64668CC8, 0xE71F902B,
+0xC2AE2700, 0xB4655261, 0x39BBD802, 0xB0DA43E1, 0x5D3407EA, 0xC0849092, 0x05820551, 0x3E325030,
+0xD5076A33, 0x6446040E, 0xF0846663, 0xE3A05473, 0xC2DA23EC, 0xDF5EE813, 0x1129E486, 0x18818243,
+0xFFD3B79F, 0x933DBC3A, 0x9ED711D5, 0x0F446EDB, 0x261A0FE8, 0x73033E7A, 0xAF1F58CE, 0x24DBCD71,
+0x9ADCA9C7, 0x8E037DC2, 0xC7F86B45, 0x4B01EDAC, 0x3EC04E21, 0x8C129035, 0xC60D3FE8, 0xAB43F2BB,
+0x80CCFCA0, 0xC7BAB76A, 0x54C579BD, 0x39053732, 0xE32C9AFF, 0x4C9F5017, 0x0D67010F, 0x6998E0AC,
+0x9A5E7E4C, 0x7EAAB2D3, 0x7B823B66, 0xB69760B4, 0x76038D10, 0xE62E1A9B, 0x1F64A059, 0x0C0A728B,
+0x38B229DE, 0x8D5B1E43, 0xDD4F193C, 0xBC2220E3, 0x7F5D5473, 0x5D10F786, 0xF2C52F33, 0xA359E2DB,
+0xC26CCDC7, 0x6D173B60, 0x87F26800, 0x69F9ABC6, 0x195F0512, 0x1380F169, 0xE05D25E9, 0xBDBB46CD,
+0xA4CC2817, 0xC0248C2E, 0xA4A803DD, 0x1A27C38C, 0xCA336EA2, 0x4543CC4C, 0xB0ECD914, 0x80978465,
+0x41CCE19B, 0x86F4728D, 0xD873A9F8, 0xD0572012, 0xD38B4D14, 0xE7C2C969, 0xB358FF92, 0xF282D8B5,
+0xC7A1896C, 0xCD36D344, 0x4195AE6D, 0xD7699862, 0x8C84D512, 0x6573A976, 0x67DD0664, 0xF38197AE,
+0x890C62B8, 0x974145DA, 0xE922E7E0, 0x6A271569, 0xB62B80F1, 0x3779AC83, 0xAC25A298, 0x54FF65F7,
+0x710DB722, 0x5854AA7A, 0x3D4328B3, 0xDA4A2419, 0x7F5E9717, 0x34D8938A, 0x3B3354E7, 0x1697E916,
+0xE698B7C9, 0x5F8D877D, 0xFD54513D, 0xCA7FA7EF, 0x5ED5FB9C, 0x7D3E6B9B, 0x55B3E71D, 0x049C6296,
+0xF3399643, 0xB60BDE5C, 0x83796206, 0xAD68BD32, 0x8D2A5A42, 0x4EE6F4BF, 0xCA7D0B63, 0x333B8C52,
+0x6AAFB1D8, 0x8BAF161D, 0x2C806D32, 0xB832A5B9, 0x4D6F7A14, 0x36D6496C, 0x02A129CE, 0x63086CCD,
+0xB4C71E76, 0x5CC16FCA, 0xA597B786, 0xBFE355B8, 0xC1E5DF9E, 0x3F4C6541, 0x88F29157, 0x357FB3F2,
+0x1F0C3D0D, 0xE4CF07D8, 0xBC067F5A, 0xC0EDEF0D, 0x16DDD0FC, 0xF0582A94, 0x1B062777, 0xF75CAD42,
+0x27C06D2F, 0x68604916, 0xA41E647F, 0x34FB0A52, 0xAED56B8B, 0x253E1D8D, 0xD8E50649, 0x6D6C7470,
+0x839B8B16, 0x568D1EC3, 0x9DF270AD, 0xB41A7992, 0x7C55378D, 0x1A6329FA, 0x3A2F3BFD, 0x78D2F5FA,
+0x3742AEA7, 0xBE78478C, 0x390F358E, 0x846BB73E, 0x40A7716D, 0xDDEDA23F, 0x0154FC6D, 0x6942588D,
+0x63CEE302, 0xFD67DE6C, 0x50ED0ACB, 0x0A3EF0EA, 0x21E2549F, 0x3BD67CD1, 0x0793125B, 0x6A6F129C,
+0x0A473C5B, 0x5955D94E, 0x53E929FD, 0x8C67DD44, 0x20B77650, 0x31368988, 0x6CB2BA46, 0xFF0F488A,
+0x83F4FCD1, 0x6210352F, 0x5280163A, 0xB4CFCEF8, 0x160A419A, 0xDAE8B1C7, 0x1305823E, 0xE85007FA,
+0x4B7B1885, 0xCA000A3A, 0x604D2FA3, 0xC1AA0081, 0x478B680B, 0xEC9C4758, 0x2E9C06D8, 0x7AA7D434,
+0x471E3737, 0xB92E6CFE, 0x020E9C11, 0x35DC59CC, 0x548FEB20, 0x7856C84A, 0x616AEF10, 0xEDF3AB73,
+0x7B2CE10D, 0x780BB6A4, 0x7605C32A, 0x12CC4106, 0x1080213F, 0xDD6A163D, 0xD47D34C8, 0xE95B91FC,
+0x07D5FC10, 0xF7D1E072, 0x4ACA1355, 0x1761B3A9, 0x76686D0F, 0x9CF5DCCD, 0x4AE403CE, 0xFDE54384,
+0xE345678B, 0x24916A42, 0x2D2E1140, 0x6EED8589, 0x5F08350A, 0xA2734750, 0x574B43AF, 0x7E14A43F,
+0x7BD93BFF, 0x1BB659A4, 0xCA632806, 0x0903B7E4, 0xAE51EA36, 0x0C3D140C, 0x59B55668, 0xCD74587C,
+0x3583FF37, 0xA6663DDE, 0x9CB4399B, 0x79F6F04B, 0x4366BD64, 0xCF5074B2, 0x585B0AD8, 0x2E80C833,
+0xCAD96347, 0x0D2506F2, 0x18C29B57, 0xFF11DA83, 0x9B49840D, 0x4F46E4B1, 0x60B1707C, 0xE10C02CD,
+0x20579A63, 0x649943AA, 0x41039D96, 0x008484FC, 0x354A20F5, 0xC869A675, 0x12C425A0, 0xBA472F73,
+0x4E260F5D, 0x7C4E4529, 0x726661AD, 0xE2FBBC50, 0x62F91A68, 0x408E8B26, 0x8EFBE05D, 0x870F5887,
+0x74EF567C, 0x0D9177B0, 0xE8EA87F8, 0xB464AFB0, 0x598AA07B, 0x628117E7, 0xE66FAB18, 0xE9BEA3DC,
+0x88257BC2, 0xAA70B4CE, 0x1851CC38, 0x3CD0F956, 0x2A31E99C, 0xD56A8A12, 0xDC71FB66, 0x0152FC5C,
+0x27DED29F, 0x38C3D7B6, 0xB2710FDB, 0x84F12CE4, 0xA2CCE247, 0x30FE5B48, 0x4A28F08E, 0xD3B7BB69,
+0xE10F1B67, 0xCC34344C, 0x0E38283E, 0x52A2CD8B, 0xBEA33505, 0x7BF2F3D7, 0x756E0801, 0x6E9616A6,
+0x2B835057, 0xE15679E6, 0x7E27EE24, 0xDE169AC6, 0x67B9C337, 0x70E433A3, 0xC795D494, 0x0C462B08,
+0x33D7AFE8, 0x628DDEEA, 0xD6FE98A5, 0x5ABD30EE, 0x36FCDC91, 0x16AF11DC, 0x4E6C9BC9, 0x96898F73,
+0xA89D9265, 0x34ABAE62, 0x1D3472FB, 0x4C176190, 0x40789E17, 0x4F660EC7, 0xBC4CB9DE, 0x62C29CA7,
+0xE46700E4, 0x8455077E, 0x65CCA3C4, 0xB1CA02F8, 0xE9F009ED, 0x0F045F5B, 0x05E52CC0, 0xBCCAF322,
+0xF89CB50E, 0x8A315CFB, 0x432B9251, 0x06F143B1, 0xB848D056, 0x6A009157, 0xE0E33845, 0xBFA37994,
+0xF248B1F2, 0x3DABF9C7, 0xCF169FE5, 0x95BC2C21, 0x13C964E9, 0xAEF7FFC2, 0x22B2E09F, 0x7FBEE3E3,
+0x82AC1BEA, 0x7C176E81, 0x78FBD442, 0xEDDC7C01, 0x0D749074, 0x499510A1, 0x102BD363, 0x29406AC4,
+0x07D19D4E, 0xDD2A29A6, 0x35205D50, 0x30A84131, 0xAB00C898, 0x0F1CEC7A, 0xFBBBEC6B, 0x5C2FEA22,
+0x5460BC73, 0x677AF055, 0x535D99CC, 0x1B262D20, 0x6A2A70CE, 0xD1C6C356, 0xE11BF6A9, 0xB7932D28,
+0x4484E942, 0xBD378FB1, 0x4D1BEA76, 0xA0D08AC9, 0x8D29DC22, 0x33392376, 0xCC1941DB, 0xC5C75C52,
+0xC3A8A6E9, 0xC1E5C146, 0x53F90828, 0xE5D36A31, 0x3CBB187F, 0x6C5B3CFA, 0xE6C5F49B, 0x68EEF781,
+0xE3272522, 0x4EE0A1E7, 0xFE4E3B0A, 0x37F8A26E, 0x785EEF95, 0x866BACDD, 0x576925C5, 0xA4427068,
+0xA2684E95, 0x93406D26, 0xBB896C52, 0xB854FC8E, 0xD91498A0, 0x3735E9DD, 0x2FA3E2CF, 0x846A943A,
+0xC3162E94, 0xB05229E9, 0xB23585D1, 0xDD47620B, 0xC7403601, 0x1C0407A4, 0xC4F0BF00, 0xF8CEEEBB,
+0x8BEC14F3, 0xAEC3BA7F, 0xAC26584B, 0xA2773F4B, 0x30E490D2, 0x9D4A991F, 0xC0E175EA, 0xD70EC608,
+0x93F404A5, 0x4AF10880, 0xC7028B93, 0x4056C9B3, 0xD114F11C, 0x095BECFA, 0xAF509C4A, 0x8258D75B,
+0x0D726A6E, 0xAA445F16, 0xD12F8F27, 0xE106B883, 0xCAD06952, 0x02FE1832, 0x653FD861, 0xC50EDBA1,
+0x2904C412, 0x37785A0B, 0x0484FAA3, 0xDABC3B81, 0xFBCA5A13, 0x41C2A291, 0x182B6E3B, 0xD772AD65,
+0xDA52B09B, 0x54AD7641, 0x355DC111, 0xC92231BC, 0xF86721EE, 0xE3BFA25E, 0xB4941525, 0x6F39677D,
+0xECAFD45B, 0xD460A1F8, 0x1A1B4EBC, 0x22AC41A4, 0x22483F35, 0x70BDAF06, 0xC95CAE74, 0x62381C21,
+0xFEC41009, 0xC0FEC08E, 0x97E788ED, 0xED474D4B, 0x38EC398B, 0x6C3F4A12, 0xC83DF4B4, 0x7AA11A22,
+0x41EAB102, 0xE3DAA353, 0x73A76D09, 0x066D2E63, 0x2268C5B3, 0x26838F65, 0x6F65FF2F, 0x7A5C2DCE,
+0xF3396C29, 0x411CA9AC, 0x7CFDE033, 0x75FF8C4C, 0x890BCEAF, 0xD0E8EEA3, 0xFAFE55D5, 0x5E9F7633,
+0x3816D3F6, 0xDE354B25, 0xC023178C, 0x6CD7B1B5, 0x4BD8BD28, 0x0ED72F23, 0xB86F67E6, 0x5575A991,
+0x30AD3662, 0x18C086AD, 0xD1C573DF, 0x1899CCFC, 0x046B0A20, 0x35C24C5E, 0x6D894A89, 0x1C84FAEE,
+0x4B62C549, 0xCFBB962F, 0x386CEC2D, 0x5CADC808, 0x9B20EC79, 0xB23CDAA9, 0x9967162D, 0x41225A77,
+0xC5793468, 0x64D0323B, 0xE180292A, 0xFCD724B6, 0xACE9B0E1, 0xFFD1BF79, 0xBDA3769E, 0x97A95052,
+0x7A0C349F, 0x239C9FCD, 0x9B6F1BF1, 0xEB6D9D86, 0x8E5C9BA6, 0x5A792844, 0x6C42046B, 0x5A8DABF1,
+0xC0B924ED, 0xBED5191A, 0x0B63E861, 0x867AD7AD, 0x7E8A54B5, 0x6980E542, 0x7CFD1C35, 0x8B7554E5,
+0x64F5FE84, 0x0A759B09, 0x0883FFEC, 0xA6B6BFCB, 0x0E6704E0, 0x05539905, 0x5DC65078, 0xAB756418,
+0x7F366655, 0x415FB0DC, 0x4CC85B9A, 0x84BA851F, 0x01A37618, 0x6B663CE6, 0x71265AFF, 0x69AFBE57,
+0x3B4D5B17, 0x0DC5F32B, 0x49F2C66D, 0x418EC507, 0x095109CC, 0x10278689, 0x9AB31DC8, 0x9AFDDECB,
+0xA9470DF0, 0x86573CDA, 0x6DD66553, 0x28AC9647, 0x76F1113D, 0xC5106DE0, 0xBBFDF3EF, 0xBA9EB6A7,
+0x6AD2DFD7, 0x182AB7AF, 0x00C78A47, 0xC01E536B, 0x6CE3FF0E, 0x5A5D0E6E, 0xCF4B604C, 0xB124AF03,
+0x6A3D43E4, 0x7BD1CEF8, 0x546C86EB, 0x0C74E6F4, 0x48038857, 0xE41F1BF1, 0x18FE6B37, 0xCED7E081,
+0x56CC2D74, 0x6CE71616, 0xE3ADB2F2, 0xA7F3F194, 0x155EB972, 0xE154C4D3, 0x0BE2B5FF, 0x47D280D2,
+0x12080A42, 0x174AEE08, 0xB93C4929, 0x14683489, 0xDFCE5B7E, 0x5C0F3657, 0x30D99784, 0xD7EA45B3,
+0xD640C1EC, 0x7578D8F2, 0x148970A5, 0x953195AC, 0x5A099B09, 0x2850D9FD, 0xF5559C56, 0x13998C10,
+0x8AAF3E1A, 0xDA20ABFB, 0x9345381B, 0x2AFCDC3B, 0xBC83FA87, 0xA44141D7, 0xAB52C27B, 0xA64BEE1D,
+0x896C87E4, 0x212B6E7C, 0x965BE25C, 0xD1961826, 0x3A34CA21, 0x4BD5DC0D, 0x18B28FB1, 0x88716BA6,
+0xF0A3EA95, 0x8BBDEE32, 0x6D4F4FF1, 0xFED7D3D7, 0x531762D2, 0x8A909461, 0xE3A3C3B6, 0x15462C86,
+0x3432C6C0, 0x8AB4AF02, 0x5A145B3D, 0x570EB3BC, 0x65D8EAD6, 0xC0B613DF, 0xD3F4F85B, 0xE857BDD6,
+0x2588922A, 0xD85AE7E8, 0xB419DAD5, 0x223FB070, 0x39F53ECC, 0x5650B1F1, 0xEA226FD8, 0xC62777A1,
+0x401FCB9E, 0xA3DC507B, 0x604A8914, 0xA659A0D1, 0xE905F56B, 0x9D7BD751, 0xBC5028EF, 0xF1E12174,
+0x72763B3B, 0x2810DE41, 0x733E43E1, 0x94035284, 0x29DF7A2A, 0x27C7B908, 0x89B2315A, 0x5C15F50F,
+0x188EE312, 0x76D5C599, 0x9689F21A, 0xFB919325, 0xDC3B05C4, 0x4A584355, 0x9AC3F098, 0xAF8F5BDD,
+0xC919AC83, 0xBBB559B3, 0x4E566862, 0xD0AAB6D1, 0xAA07752D, 0xC3A41B3D, 0xA77AFCFB, 0x5E78CCAA,
+0x971610A1, 0x61A0F96B, 0x060C7719, 0x40D11AC9, 0xBBC2AD71, 0x3A657B9C, 0x03F42ED6, 0x3020F061,
+0xDBCB31FE, 0x4C420CC9, 0xB49A0703, 0x73A71CC2, 0x2A954FC8, 0x959F8219, 0xE0EE42B8, 0x30171711,
+0x8077DA22, 0xC1428546, 0x10FE3A6D, 0x4340A8D7, 0x3539EB04, 0x12F76E14, 0x715960B1, 0xB027D3A0,
+0x4200D1CF, 0x9F584EEB, 0xB8359B8B, 0x74AFACEF, 0x33F021A0, 0x7D8BC152, 0x7211C270, 0xF8553B87,
+0xA50A5CAB, 0x8A56E3CF, 0xC5A10B2E, 0xE4F6AE29, 0xC437F165, 0x41E9FAA2, 0xE884161E, 0x6BE7B677,
+0xFAD3BD21, 0xEB7972B1, 0x26A06CA8, 0x38408EED, 0xF23CD376, 0x6202664F, 0xF0F14EF5, 0xDBBF890E,
+0x9DA1FC6B, 0xB3AC7C51, 0xDEEC9E7B, 0xBDA4A3DD, 0xF3957193, 0x85357486, 0x640A7A89, 0x0FB2E735,
+0x8D2250BE, 0xFE051EF3, 0xC36663CB, 0xE2CA2B11, 0x2EB486E2, 0x0143E0CC, 0x83CCA633, 0x28D67C64,
+0x0314971A, 0xF86CFF5E, 0x074EF691, 0x7FBFA1C4, 0x949FD9E3, 0xD630B2E5, 0xC524B083, 0x686D690F,
+0x5A89A91D, 0x7700B00C, 0x5D4D84F9, 0x9CD65429, 0x49DAE3F5, 0x4BD7488A, 0xB1692E96, 0xFE9123CF,
+0xCF11F391, 0x42B903F9, 0x23DF5AA8, 0x038521E4, 0x5710AD06, 0x87109408, 0x0DD0FAAD, 0xE056337D,
+0x72686107, 0x50637F52, 0x85ECE010, 0x96F4CA26, 0xFBD2D427, 0xF5E2F0FF, 0x49076CB5, 0x6082A973,
+0x220102FC, 0xA34A4AC1, 0xC1217C45, 0x5A8FF29B, 0xE034E155, 0x09239CA9, 0x909C62A7, 0xE3002D4A,
+0xDB91A1C8, 0xB0AA4F62, 0xB40B2C2D, 0x1BA4D9C4, 0x92EB9A7E, 0xF5AA39F7, 0x963C6307, 0xEABFF696,
+0xE314F016, 0xAABC4C1B, 0x4997D911, 0x171AF0D3, 0x427A7377, 0xE1C72CF3, 0xD79FE686, 0xAF122892,
+0x3AEAC1FA, 0x2D5D99E8, 0xF7383E11, 0x842B3F2B, 0xE4168A0F, 0x4A8F4016, 0x20C0C63D, 0x10746685,
+0xD514DC81, 0x5C8C6B33, 0x2329A489, 0x547A61E5, 0xCEF96AD2, 0x4CB4CDF2, 0xEA4BB9F5, 0xCBB90F5B,
+0xBBE564E4, 0xC67828F5, 0xA89B1E05, 0x9FF0703B, 0x75672971, 0x7DE5C7B7, 0x89022242, 0x8C64544E,
+0x1239B812, 0x117CAFC8, 0x68C09F7B, 0x6BD0D58F, 0x63C13175, 0x4A1B009A, 0xF84C515E, 0x4D695B08,
+0xAE6C65CE, 0x7323ECFF, 0xF8387B78, 0x29393E96, 0xC4540E65, 0xD2CEDB47, 0x068ED31D, 0x4B71A643,
+0x59E4960A, 0x13D11C57, 0x5BA31BB9, 0x42C7A805, 0x889EBACA, 0xE36F971C, 0x67727443, 0x90D085FD,
+0x57D85111, 0x0E5A6562, 0xCA3F74EE, 0x45DBED43, 0xDA459ECB, 0x4EEAD09D, 0x4F9D7923, 0xDDB40D7A,
+0x45547CE5, 0xF77566CA, 0x10634E78, 0xD3EE9BF9, 0xA2461671, 0x713FD327, 0x879F7D6E, 0xFB21E103,
+0x6656E88B, 0x31FE130D, 0x6850F996, 0xB7A57994, 0xFDD03E35, 0x35CEE269, 0x3A95CE39, 0x2F528C7A,
+0x63E0973C, 0xA3EE8968, 0x7DAC5F55, 0xE3DFD3A0, 0x99EFAAAF, 0x9C808CB4, 0xD74D4D37, 0xA31C861B,
+0x3015C56F, 0xC4DC2409, 0x99551B05, 0x7213C483, 0x9B05B55B, 0xECA355A5, 0x5D92B36F, 0xDA75BDBB,
+0x5161BE83, 0x4162DD7D, 0xDBF5564E, 0xD0D2C105, 0x0B86BD97, 0xBD16EB3A, 0xD5B15648, 0x1165C6FA,
+0x0BAACABE, 0x21A4BE98, 0x1D22D460, 0x96848217, 0xB0D75D28, 0xC6892EA9, 0xDC1CB73B, 0xD5D781F8,
+0xCB76C8E9, 0x9801FE22, 0x11A0B1EE, 0xDEFBB22D, 0x9749CC48, 0x1015E33B, 0x27D59F23, 0x75A33D60,
+0x10296980, 0x01DEBC94, 0x1003B31F, 0xB2F691CC, 0x0245F583, 0x0DFF7CCB, 0x94F131A5, 0xB750E788,
+0xAFC450BB, 0xAC881EC8, 0xAB380FD2, 0xC189A8D6, 0x5D40E7BA, 0xEFD8BF68, 0xC2957CD1, 0xB360F204,
+0xEB0E4F71, 0x2FF40B61, 0x722E7F90, 0x60F93F23, 0x064EF692, 0x9DD1C436, 0x11463011, 0x8450B5D5,
+0xC070A9C6, 0xFCA59D38, 0xCEEFC081, 0x42721265, 0xDB7BCAD9, 0x85D53E18, 0x5A17E698, 0xB105F753,
+0x37DBAC50, 0x7510DED4, 0x11723920, 0x5B23525A, 0xC6720784, 0x791B8222, 0xF4144C0E, 0x7CDDAEBD,
+0x2DA623A3, 0xAACEB6E8, 0x7E6818FE, 0xE9FA2CB4, 0x054DD831, 0xAE4833A9, 0xF34D0C90, 0x1D47460E,
+0x2C548D65, 0x9863173A, 0x836E22A3, 0xEB02C067, 0x4C8E351C, 0xA89A4DE7, 0xCDD827D2, 0xE75F3CBD,
+0x0F4F2EE2, 0x21486CE7, 0x8E1361B6, 0x98FAEA43, 0x094F5847, 0x9EE41DFB, 0x5EF5E751, 0x251E0DE0,
+0x47AFCAB1, 0xBAB378B8, 0xE4299E13, 0x797001AD, 0xBE52E1B2, 0xA4E6E80C, 0x1D921AB4, 0xE35FF4B6,
+0xF779DE43, 0x0AA04905, 0x90A0F9D6, 0x984A4E7A, 0xCC65D05E, 0xA667745E, 0xF46C951B, 0xDED506A1,
+0xB77027B0, 0x47D2D5F3, 0xD56A0917, 0x091EA75D, 0x2AFB22AA, 0x800035E0, 0xC85DF4EE, 0x1982216C,
+0xBE2070DE, 0xFA58BDF6, 0xA00C744D, 0x3CE4AC7F, 0x3CE0D80D, 0xC2933166, 0xB09F620B, 0x7F5D6411,
+0x7B5F1A34, 0x08B9BA96, 0xF457ED2A, 0x6E100421, 0xB5565413, 0x8BA4ECFC, 0x15197893, 0x739FF7F7,
+0x8F7C8B99, 0x7608C950, 0xDE1606C3, 0xC3555B60, 0x3E810741, 0xE8CD09E7, 0x9DC8C504, 0x774E26A8,
+0xA910DDD7, 0x82451884, 0x095BA75D, 0xC3E09AA4, 0x9FDEC283, 0xA9B57D50, 0x0E051FB2, 0xEF48CDFB,
+0xB97BB71C, 0x6D32C5FD, 0x6C26C8E8, 0xC9D9D315, 0x654EC22A, 0xA942F392, 0x1247E935, 0x14458F94,
+0x60DE9C79, 0xC53E92F5, 0x8C0A4569, 0xCC705BCC, 0x2E080CB6, 0x98AB9C52, 0x9EF3FBBD, 0x5FEAB4F8,
+0x54D4457B, 0x2206C8D4, 0xEC1E49CB, 0xE770400F, 0x8D42389F, 0x217296E3, 0x8FE7D61F, 0x2BE42BD3,
+0xAB3238C1, 0xDDE386BB, 0x8009D485, 0xC6AD3768, 0x52295C8D, 0x045DD188, 0xCA168B71, 0xA9A817D9,
+0xC2C61E7F, 0x1FB3F356, 0x01ACEFD8, 0x508EF64B, 0x2025C96A, 0x82BCC66E, 0x10FBC2F1, 0x2E2818A4,
+0x6C81D89C, 0x8BA81ABD, 0xE232FA93, 0xFF68EA0F, 0xEF106B4E, 0xD02450B1, 0xC56034D9, 0x2E54980E,
+0xD59D8F87, 0xBC8B40E0, 0x914D71C4, 0x51F6F372, 0x9899DB92, 0x3A81B974, 0xF229568F, 0x94A5716A,
+0x51BF6EF8, 0x45BC14D7, 0x10389BEB, 0xE9E25796, 0xDC27BD6F, 0xB7092488, 0x7B3FE196, 0xB467EED3,
+0x534E2B19, 0x6ED229A1, 0x9CDCD8B1, 0xE53DAF8B, 0xD10A793D, 0x809F2CD2, 0xA88CFF33, 0x8FA06FEB,
+0xE40F34FF, 0x3E24111C, 0x9D5632F0, 0x91E9952B, 0x7780F756, 0xD80197E9, 0x56D71F34, 0x3E819A45,
+0xE98239F2, 0x3C309036, 0x19BAD801, 0x2624FABC, 0xAA51186E, 0x0DF5E95E, 0x2FA6B84F, 0xB75287AC,
+0x0B492645, 0x39A81C81, 0x9075DF38, 0xB93E458D, 0xADE9C182, 0xF4E0C6CE, 0xF5781D50, 0xFC1C8C81,
+0xDF314A32, 0x53664861, 0x3AEB17FF, 0x5D18C75A, 0x8D523609, 0xE2EE4E89, 0xACE5053E, 0xA1CDBA0C,
+0x45FC8A99, 0xD72A54FD, 0x0E836731, 0xA90BE189, 0x1695CB99, 0x8C1B8D6A, 0x27BA98DA, 0x52D26C27,
+0x596B7FAB, 0x44BF36BC, 0xC96C91B1, 0xCC44ACC3, 0xBBCBA7C0, 0x3725E42D, 0x2867E63B, 0x59992B33,
+0xC5541193, 0x2CB74D51, 0x710669B6, 0x9D381D27, 0x265C790E, 0x6CC327DA, 0x36F62D17, 0xA0FB5636,
+0x3D2FC012, 0x4891695D, 0x5D001E31, 0x47C53E94, 0xE4EA815A, 0x580BD9AC, 0xB0948DD5, 0x9EDC19C1,
+0xA2452DD5, 0x1170D830, 0xE55D7283, 0x640D4765, 0xB174F682, 0x9B01B95C, 0xC578B597, 0x0A88E8C4,
+0x1638BAA4, 0x109E10E5, 0xBD1C41FB, 0xA8F53C0D, 0xF9D910C9, 0xD8A8DD78, 0x005807BD, 0x37283316,
+0xBBA24258, 0xC8C85AA4, 0x7B33B1B9, 0x75D851C0, 0x8FC83F62, 0xCE5533F0, 0x33C0C142, 0xE5331A36,
+0x5C94B498, 0x2333252C, 0xBB40802F, 0x2B11621F, 0xF5D16DC6, 0xD0EE6ED2, 0xD9271114, 0xB7CCF916,
+0x6156B876, 0x8311B529, 0x2C067A0C, 0x0CCC45C7, 0x63BC940F, 0xA6EC41FE, 0xDF3EC83C, 0xB1FF9C88,
+0xAC5FAA21, 0xBFFB74DD, 0x2DFC5FCD, 0xAA5F2CC9, 0x0F7E5C16, 0x3404E096, 0x87FA436D, 0xA81C001B,
+0x969B466A, 0x44845F6D, 0xD2A620C3, 0x67F5F8D0, 0xA5797B53, 0xD1A727AF, 0xD5AE47FE, 0xFA97CAF9,
+0x82BF0064, 0x55C8FACE, 0x594DD95F, 0xDE5CEE5C, 0xEB7FCB31, 0xA7149ED7, 0x8E47D191, 0x9639187D,
+0x867FB3F5, 0x8CC1150F, 0xCB070649, 0x59F08EC3, 0x3AE848E9, 0x03EA7087, 0x98FF784D, 0x084C951F,
+0x384B49A7, 0xDCCB69BD, 0xF81D7D7D, 0xA505CC11, 0x8B12211F, 0xE40A90B6, 0xF8D5B953, 0x51E76F93,
+0x4AFF38B1, 0x65290B72, 0xD1552D5B, 0xCBD3E78A, 0x2FF2AF69, 0x5FD23358, 0x2B28E0DE, 0xC287D880,
+0xBD302687, 0x6EB1EFEE, 0x43C50670, 0x1D629010, 0x556C3D34, 0xB314CB51, 0xEE7A3107, 0x49FA0F73,
+0x794208A5, 0xB90A427C, 0xEB42A893, 0x10B8D865, 0xB455C3AA, 0xA6540AA1, 0x6679A894, 0x4685EFAB,
+0xD24563F4, 0x648EA4B1, 0x9ABBC474, 0x9A399AD1, 0x1824FB2B, 0xCB64273D, 0x7279B957, 0xC33561BE,
+0x6E27D85B, 0xD8E42C8E, 0xD7ADF91E, 0x52BF8119, 0xCF5FAF84, 0x0D7ADFFF, 0xBFCCD8BB, 0xAD3D5D68,
+0xE1BD987E, 0x213B0721, 0x898B7E62, 0xB7DEC61A, 0xFEA24E0F, 0xB0ADA72E, 0xD65B3A96, 0xFE83594B,
+0xA5707221, 0x03322682, 0xB4795D98, 0xC4176002, 0xF6DE1590, 0xC2EC9602, 0xA9D2C45A, 0xC62CBF51,
+0xFDD7BE4C, 0xFE199349, 0xA54D4008, 0xE17248F6, 0x88395B4C, 0x545C7800, 0x03949440, 0x0B2CD71B,
+0xD1D0757C, 0xDF2E5903, 0xB12EA640, 0x484701D2, 0xED982E34, 0x99638334, 0x9FD16E12, 0xFDBE6EA0,
+0x9E57F807, 0x506F33EB, 0x274F1D64, 0xB03D0950, 0xCDA49745, 0x9D5B4A29, 0xE3A75264, 0x5EC9A9F8,
+0x5A77CAED, 0x816EE3F4, 0xFCE5987F, 0x0327CF15, 0x3C4A6EFF, 0x1944AD28, 0x1EA9430D, 0xA3E4053A,
+0xE0E8D7DD, 0xD8814C80, 0xBAFD2A9E, 0xFEA9CAEC, 0x110DE93C, 0xCFFAF093, 0x34AD09D5, 0x981D8EF7,
+0x2A6087AB, 0x3243FB1D, 0x4111B199, 0xD9D280DB, 0xFCE54C29, 0x474692A7, 0x7E95AE1D, 0xFB1E384B,
+0xBC5A6662, 0x23CAE4D4, 0xB1DB496B, 0xC0DB6121, 0xA00F1B2A, 0xCD0ECE4C, 0x5E0F328A, 0xA0B36261,
+0xA8FB2E80, 0x1F2AAAC6, 0x7540C677, 0x5149D2F6, 0x3F63A454, 0xB37F1002, 0x74807C07, 0x976F0FC8,
+0x0C74BEAA, 0x78D4887B, 0xB6F47249, 0x4D2AE755, 0x2C3AC2C0, 0xF8B45AA0, 0x83EA3B4A, 0x3C207F62,
+0x53AD995E, 0xA08589EE, 0x23B26E37, 0xBA9D9D57, 0x3B4018FA, 0x48895D24, 0x1A0220CF, 0x5AB1F3CC,
+0x762BA857, 0x8E7214B5, 0xCFFAC771, 0xF888E4C3, 0x11735D05, 0x3FDFDFB4, 0xD6E0B2A0, 0x5D84BFAD,
+0x5F2D9F69, 0x84EBB354, 0x56F5BD1A, 0x1BC6F520, 0x565F4757, 0xEECBE275, 0xDD65401D, 0x908A9C19,
+0xD1648EBE, 0xB5784381, 0xE1687CBD, 0x928CE97E, 0x9E977B76, 0x61956BB4, 0x182A75A9, 0xA71A460C,
+0x0676834B, 0x43F81990, 0x51FD3DCE, 0x41C63787, 0xBB877EAF, 0x5DDE67B5, 0xE63B4A87, 0x033F02BC,
+0x727D7D93, 0x72DCD007, 0x1F5722FD, 0x8086F059, 0xDDBD1789, 0x47CDB116, 0x6A7AB8A1, 0x70E30579,
+0x5475B429, 0x98A81889, 0x9153ACAE, 0x8CE81C4A, 0x5B9ECF51, 0xF3B43A9B, 0x8348962E, 0x8E8B5F76,
+0xF8FBF488, 0xEA7465A5, 0x6AF7AA4E, 0x33DD2A15, 0x9FF78110, 0x9E9D14CA, 0xE08EB62C, 0xB7D73BF6,
+0xC9D4C9C3, 0xBEF15C48, 0xB90CFFA9, 0x70CDEBA8, 0xAFDC41E3, 0xBDC3C019, 0x66793DFD, 0xD657050B,
+0x8D44EB78, 0x58820F6F, 0x56675C76, 0xD1B54D5C, 0xDB6B28FC, 0x4AAEE9E8, 0x183157B1, 0xBB07B3EA,
+0xE64A82AA, 0x3D6CBB03, 0x538E7A14, 0x52AFF9F8, 0xAABF8BD6, 0xE6EEC853, 0xD3760B1D, 0xEA6B895F,
+0xF13CE1F9, 0xEC9F0D00, 0x49D5F4FF, 0x4712CED9, 0x35BBF19A, 0x94B1BCB2, 0xB64B4D4F, 0x234913F0,
+0x124A18D3, 0xAE3C2D6C, 0x7F1F3716, 0x651DD846, 0xDE362CEB, 0xF806DDCC, 0x8082B465, 0xDA067209,
+0x6F48884E, 0x56CB3533, 0xA8F0B4F1, 0xE384F452, 0x1635F4D7, 0x7209D8C8, 0x60ABF2DB, 0x28DC3DC5,
+0xA0A2B04C, 0xE69D36D1, 0x9D7F7368, 0x446A6153, 0x45F756B5, 0x55B93178, 0xAD12CC45, 0x44F56544,
+0x90EFECDB, 0x58D0F95C, 0x0123E7D4, 0x1226690F, 0x00FDE0DE, 0xFC2B427E, 0x421D9763, 0x9FF0894E,
+0x03687ACC, 0x2B387102, 0x003D6D5C, 0x6DE61FB4, 0x4AF7C8AB, 0xF4DDE565, 0x475618AE, 0x69D75468,
+0xDCBB0004, 0xD99B6477, 0xF850F433, 0x7D9FB30D, 0xC40A3A0D, 0x5FD82122, 0xE53A255A, 0xADBD9FDB,
+0xC14C0480, 0xA4F04D0C, 0x4CB34934, 0x7A53EC28, 0x15827841, 0xD14B706C, 0x8D298AF0, 0x900A8AF8,
+0x87E87294, 0x3117C957, 0x0EE6F295, 0x65B10A42, 0x8C96C5F8, 0xEFD0724E, 0xED241FC2, 0x3ECA8D5A,
+0xBC78E87E, 0xC4830037, 0x5CC862A3, 0x884C9E36, 0xB24D4D4C, 0xB28CE3C6, 0x51B111C2, 0x344F1AAA,
+0xE1350674, 0x7034DD76, 0x21D37FA2, 0xB956F123, 0xC6A5333B, 0x4F044AEA, 0xA41C6955, 0x5B287D9F,
+0x90F44FFC, 0x61009101, 0x52B437CE, 0x0093DAC2, 0xE6173ADB, 0xB9DC8854, 0xCD4B7A72, 0x2C561D78,
+0x43D0BFE6, 0xF4932CE5, 0x8FE13E73, 0x22186204, 0xB6853DAD, 0x3AE03C76, 0xDF282159, 0xD614305C,
+0x60B062EA, 0x28CD9D38, 0xD2ED69C2, 0x839CA9EB, 0xD78D6A3D, 0x331299EA, 0x78CB2041, 0xAD7DAA5B,
+0x34603E46, 0x78CDB9E7, 0x446B50B2, 0x981A12B0, 0x002379C7, 0x3EE55103, 0xC99D35A5, 0xD0F58062,
+0x01000000, 0x3E009E01, 0xF47F12B1, 0xA3A2FFEC, 0x23B39A9E, 0x506D008A, 0xBF9CFA6D, 0x3B08C9EB,
+0x79732CBC, 0xD58A461C, 0xC4D6A179, 0xBC6FDC55, 0xCCE885F6, 0x8F1F1EB8, 0x9BE83F26, 0xB09F172D,
+0x0BB1AE40, 0x265D0527, 0x0694D337, 0xCFCEEC5F, 0x61AF2277, 0xA76CFA8B, 0xD38FF8C8, 0xCFDA3A9B,
+0x241377F4, 0x0BDCE713, 0x2DD40EAC, 0x52F1381F, 0x46EF2058, 0x5D24DE55, 0xCD0D240F, 0x087C0E17,
+0x99899B0E, 0xD0B29D62, 0xAFD55D13, 0x88AF5E87, 0x27DA8160, 0xC9E48E6C, 0xD2CAD0C6, 0xFA1A3B71,
+0x6D209EEC, 0x6D274C40, 0x41A7371A, 0x5FCA416E, 0x20E4E015, 0x2223CFE7, 0x945DA214, 0x0ABF1A73,
+0x2BD6CEA2, 0x68912730, 0x8AAE6677, 0xB67DB944, 0xED2709B7, 0x7EF09536, 0x2EAB230D, 0xFFA91139,
+0x76F9A98A, 0xED9E3230, 0x7EB3D0C9, 0x1C2178E3, 0xB58EEF80, 0xC04FEE26, 0x6D4CAFB4, 0xC61BE7EB,
+0x6EFC8FC9, 0x73F19C29, 0x41135326, 0xE9397B54, 0x944B0867, 0xDE690669, 0x30178FCD, 0x098298D7,
+0x9D61F181, 0x3C5849B0, 0x76EECCA1, 0xBE9A10B5, 0x0DD78B4F, 0x0FC09F1E, 0xDFF57232, 0x50852CE4,
+0xE08D0B59, 0x133F381B, 0x05D38CCF, 0xCC54B3DE, 0x45CD6E2C, 0xB9FF4205, 0xC4213F2A, 0xA26BFB6C,
+0xAF472AC2, 0x2CB0A2A1, 0xCE9600F3, 0xF9870628, 0x7386E52C, 0x3E80B361, 0xEC736F91, 0xDCBADE9B,
+0x4FC313B3, 0x31063E94, 0xB59599BA, 0xD2223A15, 0x2A73B349, 0xCD444EDE, 0x5F989F3F, 0xE8FC1049,
+0xA2F5FE41, 0x8C6E1F1E, 0xE5FE065B, 0x73D9CB47, 0x1D49D54F, 0x928DE365, 0x13EFFB46, 0xC39A5272,
+0xE021DDD5, 0xEE814088, 0x9EEB83EF, 0x903BF5D7, 0x330F94DB, 0xCD31D8E1, 0x2B9692BF, 0xBA9F5905,
+0x07EB1056, 0xFFDCC7BB, 0xEBBCD444, 0x7FAB3EE0, 0x52779357, 0x51696704, 0x91C3AA6C, 0x90E9D561,
+0xD47962C5, 0x9EEFAE0B, 0x15D6584C, 0x0683E70E, 0x9866C5B9, 0x72122FC5, 0x28B439A3, 0xD2C2F4B1,
+0x88514D32, 0x3993F9D0, 0xBA4E1950, 0xE9AAD280, 0x8304D1C2, 0x4B5E11C4, 0xD1734A3F, 0x08EF20DD,
+0xC0636114, 0xA07900E6, 0x392221B8, 0xE2FB018E, 0xCEA6BDF9, 0x62FB0FE3, 0xE78E2E59, 0x72A58FED,
+0x390FAEA3, 0x4078D6B5, 0xB6573265, 0xE6FD29CD, 0x23E28565, 0x0531E6F5, 0x515F306B, 0x7CDC8A0B,
+0x823DFDD4, 0x69CCE966, 0x1A469D19, 0x8A38A569, 0xB983492A, 0x39F82477, 0xD255733D, 0x91B05108,
+0x18CDEB59, 0x0D596ABE, 0x9C2BB094, 0x25E1F894, 0x16A6A94B, 0x79E57A8D, 0x5FFD726A, 0x843D11AF,
+0x31A4F61A, 0x3399B347, 0x2F8344C1, 0xEC9A2E69, 0x43F28C2D, 0xC99D04EF, 0xF8463B48, 0xC51DBF94,
+0x8E0920CD, 0xF17E7ED4, 0x87A20D0B, 0x4B1B874D, 0xB814FE89, 0x45A7CB8B, 0xE04280D6, 0xC3C5ADF9,
+0xB3DA09D8, 0x74D0DB3C, 0x3A723C03, 0xF37836FF, 0xD63407BB, 0x37B5E28C, 0xFF30F5A8, 0x2B78D9AE,
+0x4E776236, 0x49A028CF, 0x50169FA2, 0x5DE57977, 0x360E2960, 0xCE9ABC7F, 0x4E38B3D6, 0x73B7A796,
+0x3BC60422, 0x3E1DDEEB, 0x3FC2D748, 0x4996D119, 0xCD56B8A5, 0x2DBEABFF, 0xEB6EF900, 0x6B0906E3,
+0xCFE0A0F4, 0x39DC53EC, 0x621388BB, 0x2EF37E70, 0x2064F661, 0xFF38CD97, 0x0BD1C051, 0xB16B0D3B,
+0xED9B4646, 0xCA427A22, 0xFE3E2564, 0xDD5C4520, 0xBE8AFE8A, 0x1C474665, 0xB336F969, 0x6AD01BB1,
+0x2931BE41, 0x55E9AEDD, 0x00431625, 0xB47CBFDF, 0x93D28453, 0x64B2B453, 0xEA1BEF50, 0xAB94AB56,
+0x66E5E760, 0xAC3176BD, 0xBE972FCD, 0xD76ABE72, 0x075D5C87, 0x4D840B59, 0x85016A73, 0x3B4F674C,
+0x7F07E744, 0xA2F0F248, 0xE9E71B51, 0x6DCC585A, 0x24EA83EA, 0x56B528F7, 0x2BE55B66, 0x9DB6DBAE,
+0xAC88C825, 0x1BC67AC0, 0x85C20815, 0x74CB3835, 0x78EE30C5, 0xE15AF8A1, 0x48BE01C0, 0xAEB9D381,
+0x237288FB, 0x61A57F66, 0xB13FCEF4, 0x57BA448C, 0x65954657, 0xECEDF589, 0x0C76E45D, 0x56630413,
+0x568F742C, 0x44ABEFBA, 0x167582FD, 0x0E8E31BC, 0x2EF5CD1C, 0xC1227D94, 0x53A89A51, 0xA154A928,
+0x870EDBE6, 0xE0989471, 0x4D2AA4B7, 0x0B52BBCD, 0x935FB258, 0xE70D7968, 0x52E08B0E, 0x2E17F54F,
+0x1D25D1D1, 0x37A135E0, 0x05ECC9A9, 0x133C3B11, 0x92029007, 0x21A56B92, 0x6B9E136B, 0x90A5516E,
+0x9830F534, 0xCC07BDE3, 0x8A494E09, 0x8035AA3B, 0x6F735700, 0xF0CC09F2, 0x34E6A5F8, 0xADADDD51,
+0x85118B08, 0x73849420, 0xD7D73EC5, 0xDC2E44AA, 0x00874CDA, 0x11F28304, 0x1B280900, 0x6098F118,
+0xAD051DDF, 0xFC5BAFEE, 0x036D47DE, 0x9E7AA543, 0x5B154D2D, 0x62D777F2, 0x7A9C0CB2, 0xEC686622,
+0x6DF8EDD5, 0xA6F0CEB1, 0x6D2FAB90, 0x39F47D01, 0x584C382A, 0x04203318, 0xDC5A0685, 0x05B156B2,
+0x7BAE6FBF, 0x591DBB50, 0xC719A783, 0xB3764259, 0xAFF30D19, 0xF1F1C6D6, 0x26585C9C, 0x18D3B4D5,
+0x7688039E, 0x1446D66F, 0xF9189BF5, 0xC75040A0, 0xDEE1ED31, 0xE69CD576, 0xC5F6BB5F, 0x592316E0,
+0x2FF87A74, 0xDFAFE966, 0x83677F3A, 0x74861FE3, 0x3748A6EF, 0x555EB73B, 0x5BA044EF, 0xCF67CD86,
+0x4CF5A580, 0x3F138F49, 0x165C1AEA, 0x69AB98BF, 0x98D681DE, 0x09CE050F, 0x7490BE7F, 0xB71BDC3E,
+0x79056B8E, 0x6FDDFFDA, 0xCF69F1D3, 0x02B38F5B, 0xCE523F7C, 0x34475B94, 0x81A27928, 0xAD79C9C2,
+0xC093F617, 0x2618D437, 0x90D120A5, 0x29EB7156, 0x8026C6E9, 0x47F4EB2E, 0x59E89F08, 0x21E3ECAA,
+0x6605F381, 0xAA2AB94A, 0x6DC7185F, 0x6CBCDE02, 0x03513FB4, 0x1BA7A571, 0x457C5EF7, 0x7B4633B9,
+0x53A55DF1, 0x3D6CFECC, 0x8469947A, 0xA6E2346C, 0x69132823, 0x054E84C0, 0xA68582B2, 0xF94F4540,
+0x808A556C, 0xB51DE9B4, 0x90460974, 0x86401260, 0x77B58A21, 0x91CF2CD4, 0xDD7E043E, 0xA4C9408E,
+0x25B519F9, 0xA4B22526, 0xD671AC90, 0xDC248AD9, 0x246A725F, 0x58020E2A, 0xB10A5F31, 0x5CD9B88C,
+0xA2F93063, 0x491EE45D, 0x575A0AD5, 0x36B05BAF, 0x3ADE0F2A, 0x5161260B, 0x9B17BE77, 0x9572D10C,
+0xDA2AD213, 0x54E126D3, 0xC8110297, 0xEB3F9F47, 0x003494B6, 0x01010000, 0xB33E009E, 0x2CD27F12,
+0xFDCD09FC, 0xB016DE88, 0x78506BD9, 0xBC2FB270, 0xA8568932, 0x79D433D5, 0xF1D9940F, 0x51FC22BB,
+0x13F34AE3, 0xB13523A3, 0xBA4A377C, 0x506A9EDB, 0xF8E3FAC3, 0x99E50C06, 0x713AC676, 0x08E0EC56,
+0xC9AF8F9A, 0x4B23534E, 0x525E78F4, 0x56407842, 0x164E6E2B, 0x33A3EF2B, 0x8B9FAECA, 0x9E43BEBF,
+0x1FD55431, 0x44DB17F7, 0xCC2F813D, 0x7DFFA562, 0x4B690417, 0xA036057A, 0x9796390F, 0xB229FEC7,
+0x60B11BDF, 0x7636525B, 0xD618B2C9, 0xA439A74A, 0xD57C74B3, 0x4F378D61, 0x282613B8, 0x05C13453,
+0x18F8FFCC, 0x6EF5805A, 0xF123C0DA, 0x4E8D3B68, 0xDC7162CF, 0x29AB3395, 0x163836B3, 0xFA7727C1,
+0xEAE444AA, 0x2B6E7EB2, 0xE6D9CC57, 0xCE37E712, 0xAFF11E2C, 0x4413D4EB, 0x30FC7E44, 0x516F9A6D,
+0xF4E2925B, 0x201F0039, 0x754BFA1C, 0xDA049C98, 0xA4C9768D, 0x47B7FF11, 0x2751DC1D, 0xE4E6424A,
+0xEDC2B8B2, 0x28A60E7D, 0x6584638E, 0x28AEE6E0, 0x871FCBC1, 0x3DFF7BD7, 0x13358CA2, 0x95201021,
+0xCB912E09, 0x9F495ED8, 0xE25BB81D, 0xB16062D2, 0xA3498CF8, 0x8400882D, 0x853E75EA, 0x2B0B30B1,
+0xF10A4D15, 0x3C8C35B8, 0x57E5080A, 0xE10F6126, 0x857FD796, 0x2B021DBF, 0xECEC462E, 0xCF5E39F6,
+0x1665E33F, 0xA20F4375, 0x5EEB9DAC, 0x6C9B6123, 0xDF2F0F01, 0x59F20A83, 0x7BD9BD1C, 0x08986B82,
+0x8AE802BD, 0xFCC56D6F, 0xA1AC2933, 0x53B669C4, 0x4397FD39, 0xEFAEF142, 0xDC04F365, 0xF1BB5B1B,
+0x4CDDB933, 0x98997E2E, 0xB61863C4, 0xFEDF0070, 0x22454A8D, 0x8BE500A9, 0x07417B65, 0x18D53018,
+0xF650C10B, 0xABF63A35, 0x75F02BA9, 0x137A6033, 0xCFA2C9EB, 0x33782683, 0x2B84772B, 0x11716E61,
+0xA623CFB3, 0xF12D38FB, 0xB8F03D70, 0x7CD7C990, 0x044B4338, 0x93B48FB9, 0x0071C051, 0xE2978F6D,
+0x6B68DF9D, 0x1ACFE6A8, 0xC67A70D6, 0x7B75187D, 0x75B612F3, 0xCC72C56F, 0x5BD8DE99, 0x791F0346,
+0x5A82F218, 0x8E388FF0, 0x6D9E3631, 0xC5B35812, 0x345951B4, 0x40D14452, 0x93F68B5A, 0xB8450FFF,
+0x2282AF0D, 0xE9D9D717, 0xB3385327, 0xB43DA96D, 0xA0048A3A, 0x8706EDB9, 0x13AB19D5, 0xF901F00B,
+0xFB9E68E7, 0xFCC06E19, 0xE806A3ED, 0x62B0BFF8, 0x07C1E06F, 0x777EA9F9, 0x49909532, 0x792A6448,
+0x95293218, 0x83509A48, 0x21A58564, 0xCC77BD9E, 0xF17EABA6, 0x8B264F6E, 0xB5DB9039, 0xCC60CF61,
+0xEC30A57E, 0x7CCD9DEB, 0x16CB6341, 0x875A014F, 0xF97CAA1D, 0xEFEE3568, 0xBD579B57, 0x37763CE5,
+0xFF3EC215, 0x0FA4CE8F, 0xAB6F3C36, 0x8437CCB4, 0xA7E8C868, 0x3E2D7F35, 0xD4540AAA, 0x90D84AEA,
+0x9103CF5D, 0x649D8614, 0xF206620C, 0x13917948, 0x108DDD46, 0xDB5DF021, 0x50C5C1A6, 0xC74407C3,
+0xF0F8EC0A, 0x13442F35, 0x7F4369BD, 0x392C1AA3, 0x5BB3CD1A, 0x0366E82C, 0xE92865B5, 0x56724577,
+0xA1809576, 0x93501DE7, 0xE3D968FC, 0x7915C218, 0xA6C853C2, 0x0C5456A7, 0x0519A99B, 0xB30F4133,
+0xF66DBE76, 0x7FABFA26, 0x35DDD5E0, 0xB742F84F, 0x96AA77BC, 0x7699A99C, 0x41DD1893, 0x382FC8CB,
+0xB263AD6A, 0x0BCA1529, 0xBD0DFF61, 0xF0EBED8C, 0x0B0FEFA2, 0xB4D0048F, 0x9DBA4EE5, 0xF793D89D,
+0x7700F444, 0x8B331DF9, 0x4ED3C558, 0xF3EDCBB2, 0x8A02E4C7, 0xDB65D3A6, 0x0802BAC7, 0x2B92133A,
+0xA7FE1A3A, 0x5C62EF92, 0x23D8DAA4, 0xEE6CDADD, 0x5B5D4C7D, 0xADA02619, 0x26EF6FFD, 0xA60E2BE4,
+0xB89AC425, 0xE0FEF49C, 0x649891F9, 0x139EE872, 0x98916CA6, 0x06183CCE, 0xE2482664, 0x70ED1661,
+0x7711C2FC, 0xA284B099, 0x3FAF83EC, 0x15BAC230, 0xC4AE4B61, 0x4C9219E9, 0xC4BA68DA, 0xA0B5ABF9,
+0x4C9B0917, 0xCFA484B0, 0x5A319645, 0x1EFDD391, 0x53816387, 0xD1D4DDF9, 0x4432766B, 0x7B915412,
+0x62F75048, 0xA0B34F1E, 0x640B467C, 0xF83B6B8F, 0xF9D2931B, 0xDD27E618, 0xBB39215D, 0x0E5E4C7F,
+0x531AA2D5, 0x047D15AD, 0xFAC8BF37, 0x51C67BA8, 0x8F377E78, 0xB9333668, 0x8D405928, 0xE61D8B7F,
+0x556F0EA8, 0x4018D0D2, 0x6F159C73, 0x153A042C, 0xC790587D, 0x4FFF9351, 0xDF98F2B7, 0x4EDB3F2D,
+0x822C9D95, 0xE95323EA, 0xA43BFC72, 0xC5D638AA, 0xA1C38DFF, 0x277B00E5, 0x47311D5B, 0x2976A240,
+0xED4179FC, 0x345D2A51, 0x4625CBB4, 0x6EB93614, 0xFE7981A0, 0x3A8D389A, 0x7EF83A0A, 0x5E00EDE0,
+0x708919F5, 0x0646D16B, 0x427EEA51, 0x525CFFE1, 0x6DB693B6, 0xAF3545F2, 0x78D131A9, 0xFBE96CDF,
+0x30329FF6, 0xF19DD240, 0x5DE71E1D, 0x58B2CFB0, 0x511711B1, 0x780B96A1, 0xDB4463BC, 0x5E0C7E04,
+0x064D6267, 0x2F5BDBED, 0x2DC70B9D, 0xD81ADD32, 0xE7B16060, 0xB4547F83, 0x864C76E2, 0xE4692BC2,
+0x33F95038, 0xBED4F06A, 0xBE8A7638, 0xFDFA9E7D, 0xC65D8BB2, 0x9323396A, 0xAEE9FD12, 0x0DCAF13D,
+0xA2618472, 0x3F0A3AB6, 0xDB690E7D, 0x4479BF0E, 0xBD665D36, 0x4D8A4B30, 0xC158C1B5, 0x8849DF8B,
+0x4D3C370A, 0x079E78CE, 0x50AF23CB, 0xD5C2CFB8, 0x58476CBC, 0x130FCF65, 0xC66ED54D, 0x42E3F99D,
+0x5D034AEC, 0x6C15E662, 0xBE847665, 0x6AC0B586, 0xB6B752FC, 0x7AD54E65, 0xF49E783E, 0x594FA5AA,
+0x48967206, 0xEDB69512, 0x634FE3A3, 0x16D11C86, 0xF1330BE6, 0x82F3A6AC, 0x105EB281, 0x7D151DA1,
+0x6847C2A8, 0xA2B6130F, 0x4DE0B4E6, 0x3D7C9364, 0x51982008, 0x34B6CB6F, 0xA0E48E0D, 0x334FA062,
+0xF7E1B9C5, 0xB73198D4, 0xFB7E6A15, 0x68AF1F44, 0x3B5B7A72, 0x9DFDB5A5, 0xFA198D0D, 0x9D9EB5D2,
+0x7F66FF88, 0x9CE5F079, 0x86B1D579, 0x92B7F38D, 0xD9DEF7A8, 0xE48AD2B0, 0xBD817F0F, 0xDA1BDF46,
+0x482B32B3, 0x584EB27C, 0x16061B86, 0x34334EF9, 0x8C634D84, 0x27329EA5, 0x3D48BD02, 0x1758AF3D,
+0xB9D4B33D, 0xF1C2B4A5, 0x86B4841C, 0x079B5D9D, 0xA9BED4F1, 0xBE78EF94, 0x80D311DA, 0xFE5A33B5,
+0x63363E65, 0x21096248, 0x00C996ED, 0x2EC9176B, 0x0AE69425, 0x7AC0D96A, 0xDF5792C6, 0x6C5338A6,
+0x1CE18768, 0x0BEEC63B, 0x5466890C, 0xF61CC5C2, 0x0802A5D1, 0x039F29F8, 0xC7C5A8EA, 0xC52E978F,
+0x16C90C68, 0x45D75842, 0x1B270834, 0x4735BACC, 0x7C41341E, 0x5D3ACB38, 0xB9121681, 0x2C4F1A8A,
+0xCE0DEA77, 0xCF8908BC, 0x11C70216, 0xB9C32457, 0xA9F2D0FC, 0xD0E15B9F, 0xE667D2F8, 0x4528F568,
+0x31BE5E36, 0x0815802E, 0xCE6E7887, 0xA4279B89, 0x11D29E2E, 0xD38F376D, 0x3E0B2B6A, 0xFFE88C18,
+0xA859C2F3, 0x0E14475D, 0x52B6A673, 0x35E4004D, 0x4E267724, 0x0EDE5425, 0x27863A33, 0x116C91AB,
+0x8EA631FF, 0x0DBBC55E, 0x76AFD345, 0xD32141E9, 0x835B2832, 0x592716B2, 0x33DCD02D, 0xC6B20F1C,
+0x83F20A09, 0xBBA20D8E, 0xA45E8143, 0xCDB810BF, 0x3FD5BCC6, 0x0CA2EE1D, 0x35ABB5FE, 0x1B919D49,
+0xE8171FC9, 0xD777A841, 0x2F60C6E0, 0x2AF2B33F, 0xC5792FF8, 0x0A4A61E8, 0x9DC43BD1, 0x014F44D8,
+0xC8F2BE22, 0xDACB8247, 0x2516AF60, 0x579C73A5, 0xDFDF063A, 0x69CFBAED, 0x40E898A1, 0x6A280A02,
+0x6DBADE71, 0x134A0AFD, 0x0B6DF1E3, 0xB8B381BE, 0x82FF0153, 0xC268629F, 0x7FEAC96F, 0x48C5ADED,
+0x5B460947, 0x15BFB351, 0xD5BA1533, 0x827EE10B, 0xFC0D75C5, 0xF63046C9, 0xAD065488, 0x8C657439,
+0x39F1E059, 0x38CF8516, 0xC42FA16B, 0xD3839466, 0xD5E86679, 0x34A2926D, 0x90EFFA4D, 0x719FEBCF,
+0xEC6DC1C4, 0x0C99AC8A, 0x53761C2E, 0x8C054FF6, 0x14E88869, 0x3B4395BD, 0xEFE2816C, 0x610F4D01,
+0x129905B2, 0x92DB77F3, 0x92261BC2, 0x322B2920, 0x20FE0220, 0xD384DF6B, 0xDDFF57DF, 0x000000BD,
+0x009A2101, 0xD03FBA3E, 0x18088AEB, 0x2A5A992F, 0x14C933FB, 0x05E4AB2B, 0xD812C87F, 0x20611CA8,
+0x6696CBD3, 0xF6ECE8EF, 0xD8F1B9B1, 0x1ECF4EF1, 0x0A7F609B, 0x91653F6C, 0xFCF9BDFD, 0x27FA7675,
+0xA38F1A2E, 0xDF3BE88A, 0x99AEBEBF, 0x1347E9DD, 0xAB0D08AD, 0xB8E86A33, 0x5F9F57F5, 0xE80E9882,
+0x186F9CD1, 0x08F3BCA8, 0xB082B158, 0xD7171FD6, 0x3CC48C21, 0xCE40D90C, 0xE1787952, 0xA54C1BEB,
+0xE063D22D, 0xB6B2A82F, 0xBA9B59FB, 0xD5380754, 0xA016166C, 0x52C5681E, 0xE2EB2973, 0xFE9205D6,
+0xEC806557, 0x07710E60, 0x4093FA17, 0x05082FF9, 0x52ECCDFD, 0x84BD2E57, 0x53C0F1B7, 0x2786CA4F,
+0x590D2A53, 0x722F8471, 0xE80FE07D, 0xB5328060, 0x7CC79622, 0x3091389C, 0xF8C044C4, 0xCC56F94D,
+0x38EB950A, 0x10789889, 0x6AADF1E7, 0x5C256964, 0xE8CE24FD, 0x6004A014, 0xF4CA138D, 0xB754319E,
+0x8E8C1342, 0x9908E29A, 0x24410B1F, 0xAD87596C, 0xDA3A1D52, 0x06C679B0, 0xDB1C962D, 0x3F9E96B8,
+0xD0593793, 0x0811D2EC, 0xEABD7692, 0xAFBB0DBD, 0xB67D1464, 0x449B0164, 0xA30FFFEC, 0x6B6EE0D2,
+0xCDBA67D7, 0xB9A43E91, 0x29481EEB, 0x2FA20A0D, 0xCE4792DD, 0x6B393082, 0x53B3BD76, 0xA4B14291,
+0x388EF597, 0x88CE8EF4, 0xCF6FAE58, 0xC29D9B30, 0xA59DD698, 0xD34DAB2D, 0x38476EFF, 0xB4EBB599,
+0x6CE807D9, 0x8160A6D4, 0x77723613, 0x607C1DF4, 0xF9E56F3D, 0x79B3AB01, 0x2434DE04, 0x06819428,
+0xD4921369, 0xD264C062, 0x14CF0137, 0xF0C40305, 0xECF386AB, 0xA68CE6F7, 0x0D04BA77, 0x9A73A685,
+0x9A59C6B1, 0x4B683976, 0xB5C0B59C, 0xD9294BC0, 0xE48E2A79, 0xB1C17593, 0xC4561C07, 0xC5637A81,
+0x8840569B, 0x70445B8F, 0x0400F950, 0x7E153893, 0x6592904D, 0xA857ED63, 0xD66EA609, 0xE0ADCD8E,
+0xB8993121, 0x9070F97C, 0x37D74A87, 0x66AC3E40, 0x630BA48E, 0x002C1EE9, 0xF97ABBF8, 0xC58640F1,
+0xC5BA33A3, 0xE5BC57F0, 0x9FD2AC30, 0x96C17659, 0x9A01E7ED, 0x02D4B80B, 0xDD5720B0, 0x0CEE9674,
+0xE71BD0CF, 0x08626E86, 0x993E0518, 0xCA020069, 0x6282968C, 0xF8F9AECF, 0x38055177, 0xC3D68E7F,
+0xF1CF30C2, 0x41FA40FB, 0xCF1F0E89, 0xBAC4AFCE, 0x2210DFF5, 0xAFF0FCBE, 0x1E4C90C2, 0x9C9B09BD,
+0x8945C429, 0xDA0E117F, 0x96921F3D, 0xAE116A83, 0xB27F63A5, 0x6B321F0C, 0x7185A674, 0xE3D093F6,
+0xE0959965, 0x4A1C685B, 0x349CB0B9, 0x1F7081D4, 0x67AB9AE1, 0xED0C952A, 0x67A4F4E2, 0x2F423F78,
+0x1CACED99, 0xDAD56274, 0x39CEB68E, 0x68CDA169, 0xD7A50306, 0xB1EE2FBB, 0x7EACD59C, 0x06BF6413,
+0x11F5FE21, 0xDD4ED73E, 0x7C941845, 0x1813F58B, 0xBC7425EC, 0xC52E125E, 0x2B7DAEFA, 0xE1D94281,
+0xAE703549, 0x9F5D74A6, 0x824FD210, 0x433A5022, 0xC5AE6CDF, 0xFBD0CD3C, 0x48E520AB, 0xA1EFC1F9,
+0xDC3C3077, 0x32FF97D5, 0xDF75B62A, 0x90918EB2, 0x61406AA3, 0xAB595FD5, 0x620E831F, 0xF447DD74,
+0x31CB6AD4, 0x534B0418, 0xEF8E2136, 0xCC4EC1C1, 0x674E8A79, 0x42571AAD, 0xB7D8F741, 0x5120CFA8,
+0xAEFF76CD, 0xA6D7FEFC, 0x10C2C10C, 0x926FD13D, 0x6A716970, 0x3300FF83, 0xAEAD7E1E, 0x0FC805AC,
+0x15E26BDA, 0x0A32FD16, 0x17369A55, 0xF235D3B0, 0xE62CAA72, 0xD037ED10, 0xED5E7624, 0x521BE9F3,
+0xBDA739CF, 0x58AD92C5, 0xDF7C9149, 0x8A0192E5, 0xE1AE8AC9, 0x5B823781, 0x0D4DD481, 0xE1241812,
+0xA5E93290, 0x87B4E7D5, 0x291B9520, 0x3EE17FDB, 0x99217A9F, 0xC2AEE126, 0x152A0670, 0xEBA8A27D,
+0x2D0DDDCB, 0x4D3C67A2, 0x1BEB7ADC, 0x29CB6DF4, 0x70C3C239, 0xCB5C8BAB, 0x30A89417, 0xDB17C65F,
+0xCEE1CB0D, 0x3652B6EF, 0x13516004, 0x326BE419, 0x7DB7829E, 0x3AD852FE, 0x1716180B, 0x4D11DE7D,
+0x7A0DCB64, 0xD78A7715, 0x1BD1E703, 0xAE9C838A, 0x7C6BEE4C, 0xA5F49CDB, 0x0B68AF2D, 0x57756903,
+0x49136636, 0xAF50F23A, 0x0D642BA7, 0x24CD802C, 0x2F8763F1, 0x3A0A0B40, 0xBF234D2F, 0xEB9EA950,
+0xEBFD50C7, 0x23EF3422, 0x68A22789, 0x7921DC60, 0xAE1CE8F2, 0x1BEDDD7B, 0x71E63A0F, 0xE1CFDE54,
+0xA5F62B14, 0x828C67CD, 0x7BB41425, 0xD0A3E49B, 0x004A8A34, 0xA1C74DC0, 0x31734C3A, 0x5D1AD1AA,
+0xCEFBB7F1, 0x5A251D2F, 0x426689B1, 0x96F94A1E, 0x42B43D65, 0xC88A3952, 0xE446C9BB, 0xAC51E3B1,
+0x12EA1578, 0x7B46AFC1, 0xC62EC050, 0x430C2625, 0x153C9F61, 0xE5344E4B, 0x90DC7B16, 0xABAAFB64,
+0x61196566, 0x1FC8AF1D, 0x6E93C7EB, 0xF20594A6, 0x18FB8B6A, 0xFD5FC465, 0x2F01C20B, 0x5D54AF5B,
+0x78E2208C, 0x21A2A0FC, 0x92E47C5D, 0xC72E3B6F, 0xCF33E5C1, 0x4F73CFE3, 0x4095A062, 0x088642BD,
+0x633D9A4B, 0x16FC15BE, 0x5C1A0673, 0x28B89B0E, 0x3CC892B6, 0xFFF37428, 0x49FB0138, 0x2E5A3C20,
+0xEDA5B602, 0xD6B4D69B, 0xCCA681C6, 0xAD608F0A, 0xBE4C55ED, 0x262C8BB0, 0xD5ADD757, 0x78F4940D,
+0x260FFD17, 0x0609896A, 0x48AE8B11, 0x12790834, 0x47FE0D17, 0xAB6A7115, 0xF79BF071, 0x0A44CCFD,
+0xD9A1F301, 0x611B8D87, 0x9FECE799, 0x60C0FD5E, 0x544C04CB, 0xC564F053, 0x7311E27B, 0x14B6A28C,
+0xA870A37B, 0xB77BE54E, 0xDDDE70CC, 0x910F799B, 0xD507250B, 0x6298A3C2, 0xEAF84E69, 0xA0656C29,
+0xEC724A90, 0xBDA6C3E4, 0xA246C6D9, 0xB71B43A5, 0x8944B715, 0xF122005F, 0x17CE9F2F, 0x5D33FFF0,
+0x3019FDCF, 0xDCE56D6D, 0x0BF50A34, 0x74FC66D9, 0x7649D487, 0x5AF0D8BE, 0x15645103, 0x742728BB,
+0xDC92C44A, 0xD847DF2A, 0xC1900FE4, 0x63304244, 0xF692DE43, 0xE84A6201, 0xB5A29088, 0x7A2EED73,
+0x6C425B40, 0x3C4A5880, 0xFBC8EFCD, 0x84EA3F7E, 0x23BD21B2, 0x0F72F702, 0x6CD03547, 0x05A6CFB7,
+0xD205D54F, 0xA91E11DD, 0xC4C3A75E, 0x27D6BC73, 0x4BD60DEA, 0x7BBFD6AE, 0x1B8D5EF8, 0x8141102A,
+0xC9480AD4, 0x1FAE1747, 0x5860FFE5, 0x4FBEA155, 0x71A0FC23, 0xE9E73735, 0x24D65E30, 0x769A077A,
+0x0C0924B5, 0x089275F8, 0x8F8F767B, 0xD4F40CD5, 0xFB9113E2, 0x0A5EA1BF, 0x75EEC842, 0x8593F32B,
+0xA692C2C5, 0xD756E693, 0xE4E34CB5, 0xB99C17B2, 0x230070D4, 0x9D0F62EB, 0xF5A5BE05, 0x74F4E68D,
+0xD5AC34AD, 0xB9C9A205, 0xFA38FEB1, 0xA197F47A, 0xB58C656B, 0xD970BE9F, 0xAB65F1D6, 0xC493F936,
+0x469EC27C, 0xE589A974, 0xD057BD72, 0xADC11D70, 0xD7EFCD69, 0xF1291B5C, 0xA4154CC8, 0xC0AA74C4,
+0x6D2EEC1F, 0x7A292695, 0xAE3130CD, 0x2ACA4660, 0x759507DD, 0x01D68BCF, 0xCB535F74, 0x2F7A3223,
+0x3D9A6738, 0x6FDBD71B, 0xC91ED5B7, 0x487B8ED0, 0x676C4D45, 0xE211DA53, 0xCB5EBB29, 0xF4E38E2B,
+0x3154CE77, 0x8545EF73, 0x6F016966, 0x91BAB429, 0x113F4BF2, 0xD58120E9, 0x11B8018F, 0xBE9BC827,
+0x4EA6D3B8, 0x53A0E836, 0xBB692065, 0x204E9EA2, 0xA996270E, 0x9935A7E1, 0x5AFCBFD4, 0x789CFF6A,
+0xC3690B38, 0x67A45522, 0x8C0B0223, 0x11ECE873, 0xC8582A71, 0x48740B87, 0xD8FAF66F, 0x2AC853CF,
+0x9616082D, 0x93C9A578, 0x64143407, 0x1F1F2591, 0xD7B5CA8A, 0x26A3EBD7, 0x33EF68B6, 0x4F625AEF,
+0xFB4BF9DC, 0xD442C891, 0x02E810B4, 0x054F5006, 0x073E6A0B, 0x2140CF8D, 0xC2DF0889, 0x7B0CAEAF,
+0x95B96453, 0x092DCA58, 0x65169B17, 0x3FE2D125, 0x26C49BC9, 0x0398453A, 0xAE61EC67, 0x4163EF85,
+0xE063525A, 0xBDBA42E0, 0x25279765, 0x177691CA, 0x6707CF8C, 0x62439FF7, 0x8290A197, 0x6A168205,
+0xA57B9374, 0x51B9223F, 0x99604237, 0xB011D9E2, 0x714D9097, 0xF51EE2BA, 0x4AD8DB10, 0x680D6E00,
+0x471B0210, 0xE41F9FE1, 0xA1BA365E, 0x356FA239, 0x57037280, 0x9A9C5234, 0x37B55214, 0x66CB6D37,
+0x3B85EFF7, 0xF07FE34F, 0xDB76DC8B, 0x73301A43, 0x7994DED6, 0xE34DB32F, 0x321D8B18, 0xB4ADD03C,
+0x10E24E1D, 0x46C20765, 0x3167B42F, 0xE04A7725, 0x71BE7C77, 0xCF96AF3C, 0x06A46A9E, 0xB4BF7DC0,
+0x0CC21C12, 0x892F593D, 0x3E1CF90A, 0x02B97074, 0x4F9DBCC3, 0x33B7A491, 0x5E7DF384, 0xCB53D652,
+0xF971E461, 0x83C66905, 0x66A39D27, 0x2F57C0B9, 0xDBC755BC, 0x9CFEBF71, 0x187CB759, 0xCC6C8156,
+0xCD56B249, 0x82D6BC34, 0x71EA6FBD, 0xC527A736, 0xB7AD2356, 0x302C828A, 0xA5D2DA0A, 0xB9B6478D,
+0xF50AC356, 0x977425E7, 0x5CD07DCE, 0xC41A1309, 0x2CAD9E44, 0xBB4EFA97, 0x37EA466B, 0x032E127E,
+0x41F777C8, 0x6E8E93F0, 0xA4724973, 0xC517DF48, 0x9E263CBE, 0x82C4CD97, 0x06D93F61, 0x5835C6CA,
+0x85C3DBB2, 0x9B81A505, 0x7877A862, 0xE1D22577, 0xE505BD1B, 0x18FC9130, 0x8A2A655C, 0x47E064E2,
+0x6129293C, 0x33308FA6, 0x5377A85A, 0x906A44DC, 0x26CE7354, 0xD7D0DF65, 0xB32847E8, 0x9CB67689,
+0x7F022343, 0xC9F76EB3, 0xD527B612, 0x7765D17D, 0xA9664F40, 0x888DF685, 0x23B4F20A, 0xD73290EE,
+0xD19050FB, 0xE5FFF147, 0x062764B9, 0x7D4AB04C, 0xDC4F3917, 0x1FD2256F, 0x267F4902, 0xB58AD3D9,
+0xCA5DF2E4, 0x4282F9B5, 0xCE0BD727, 0x4C0E8879, 0x313152C0, 0x4A03C329, 0x552C24B5, 0xB4837C52,
+0x107E8A74, 0xDE76C947, 0xD297D4E9, 0xA409B07B, 0x0D9865C5, 0x46DA8623, 0x87404D5B, 0xEA385F85,
+0xF7FA3B46, 0x1F118F40, 0x4EB38569, 0x71D654A3, 0x13FFB48F, 0x1E3FD5E8, 0x0F59C687, 0xD1C9E036,
+0xA2A53EC2, 0xB141466F, 0x5F990CFA, 0x778D80EB, 0x4419F638, 0x31C6B583, 0x4DEEF4E0, 0xACBED8A3,
+0xA2FB965D, 0xBB1BAEE7, 0xB1D56354, 0x008EA23A, 0x74DF854C, 0x81993F93, 0x12D3A1A4, 0x69F8DD64,
+0xED11F881, 0x695623F9, 0x4B80AE50, 0xC6C6814C, 0xEAC3CB3D, 0x4111BF11, 0x3BFEA61A, 0xF2231D3B,
+0x2C15DBB8, 0x59F45EA1, 0xDA1AD17C, 0xBDAC268B, 0xA6D024C7, 0x24EBFF28, 0xAC89ACE2, 0xBB525592,
+0x6F59EBF8, 0xA8ECDBEC, 0x509D860F, 0x0B39CAFC, 0x0326CADA, 0x134FC7AE, 0xC3C462C4, 0xDADB7F6C,
+0xFCBBAB74, 0x93F9D4D5, 0x62CA0F28, 0xDF10D7D1, 0x48209D43, 0xC2654DFD, 0xD53A7AFB, 0x3328017E,
+0xDB74F2EA, 0x5BDA0B88, 0xCB06AC99, 0xF5FC4F24, 0x4DFCDE60, 0xB95F8AC7, 0x5403F824, 0x8B7D6651,
+0xE0C8F808, 0x1DDB835D, 0xD2BC5620, 0xF5BC3EA9, 0x10497DF0, 0xD7424621, 0xB4CE9AD2, 0x6775241A,
+0x1383E5E6, 0x191E74D7, 0x453D01D4, 0xD6E5BD4E, 0xB05028BA, 0xC682DCCE, 0x6F031367, 0x5FB81523,
+0x589DF37A, 0xD9A15ADE, 0x6C5F8B0E, 0xC2C87560, 0xA25AF989, 0x6FCDE3D6, 0x28DE6E7B, 0x004A044D,
+0xBFD93CCD, 0x5697B9E9, 0x1D04C43D, 0xB723F78F, 0xEEABCB2C, 0x7FE810F2, 0xD0478E40, 0x99167A1B,
+0x8D9E32CE, 0x724F9504, 0x29E735FA, 0xF4F4F5C5, 0x2CC4A1A3, 0xBEF4E8D7, 0xA18A4A21, 0x4AC8E0A5,
+0xE5DD71FE, 0x8E813D6D, 0x05E5B4F0, 0x18904D38, 0x4586B68E, 0x4CC2303A, 0x9D8D7698, 0x489D23C2,
+0xD23C5E9B, 0xEFE18BA4, 0x7C027FEA, 0xD5AF589A, 0xA80F3294, 0x43EC4293, 0x7B5983C1, 0xF7FB5C31,
+0x69686EC3, 0x4DE9997C, 0x9A36A832, 0x84964D2B, 0xBF53E345, 0xE05B3A38, 0x9647351C, 0x4742DC64,
+0x09E457BF, 0xFE66A81C, 0x4C89AAA3, 0x8C3FAE95, 0x38A5CF68, 0x64A3F485, 0x9181C8E9, 0x4258E1B9,
+0x0B1F9D19, 0x0D663B13, 0x2CD03318, 0xA927CF98, 0xD9E93DA8, 0x505C8997, 0xC1B96963, 0x244C0F94,
+0xB1C0E414, 0xAAB69AE0, 0x67D4B553, 0x1C0C5703, 0x2F96B08B, 0xAAACBCCE, 0x3F505DAC, 0x34629E55,
+0x529DF695, 0xCC6E9B7A, 0x05C8B391, 0xBCF3D4CA, 0x0BC20528, 0x29AC2AAD, 0x15EBCF1D, 0x76724484,
+0xB309AC70, 0x22766885, 0x3242B518, 0x2E4C8BCF, 0x57E6084D, 0x512C4BBE, 0xF4484347, 0x895B2B7B,
+0x12A4DF74, 0x511D1975, 0x1D23C351, 0x29C16B6E, 0xCFF0B9D3, 0x05FAAEC3, 0x657BB61A, 0x9B390154,
+0x885FD07A, 0xD8139A5C, 0x6F2BD964, 0x7219E4DA, 0x45F170EE, 0x22239796, 0x9D49289A, 0x61C414DA,
+0xCE305A4D, 0x69B3FEE1, 0x8BC30A54, 0x855CC939, 0x2B30E33D, 0xCA2E386A, 0x58FBC88D, 0x1655E8CA,
+0x76162838, 0x07E90307, 0x8C0132C6, 0x20BA54CF, 0x8E05317C, 0x11DC7E48, 0xB64E76F7, 0x6453E0F5,
+0xCE067BD6, 0xFD50B0D2, 0xEAAE4659, 0x95AB6A6E, 0x4015E643, 0x5ABC676C, 0xE5410ADC, 0xCEA316F8,
+0x0BA449E0, 0xC0BF2B69, 0xE2A6B0A1, 0xCCF02B4F, 0xC326F190, 0x46C1EA68, 0xAD9E912D, 0x49CD979F,
+0xE431842A, 0x4C88A43A, 0xE31BBF51, 0xE5CDC16C, 0xD1A3E5A4, 0xEB501F01, 0x6AB393BC, 0xEE70FB84,
+0xD7FE1D14, 0x3BE755F8, 0x402BCC86, 0x85F909AD, 0x1AD9870D, 0x9FE0DF39, 0x425B81F7, 0xAC51D609,
+0xEA4387EC, 0x206AFEF9, 0x5BB2F70C, 0x2999E51E, 0xD181FEED, 0x030D8539, 0x11FCD80D, 0xD5B6B295,
+0x9CD526B5, 0x9E9D118F, 0xD85AC901, 0x94C65087, 0x3AD16ABE, 0xD50B4BD7, 0xFC666263, 0x2DDB127E,
+0xF227801D, 0x26530D1E, 0x5D3EFB28, 0x51DFDB73, 0xEE841FCC, 0x662AD02F, 0x106D7E1D, 0x4196F149,
+0x98A10073, 0xE6F90B6C, 0x454989B2, 0x8E1E0EF9, 0x19CD2D25, 0x833D8312, 0xD78B9DE3, 0x58937D2B,
+0xDB1F331C, 0x981C281C, 0x8B910B68, 0xADA7D263, 0x5545EEDF, 0x6453AEDE, 0xF6E58547, 0x4932C674,
+0x0289B993, 0x6A48CEC6, 0xBAB8E6B1, 0x04D30B91, 0x26CEA361, 0x9939B684, 0x039EC88B, 0xCD60EAA6,
+0xCB06A7F1, 0xAC4AA648, 0xDBCA0E06, 0x2627339D, 0x87A1B763, 0xA047EA3E, 0xE2A5E3FE, 0xF23EE234,
+0xF24B8819, 0x3B35B08E, 0xDD40FCA7, 0xE2F94907, 0x9429A648, 0xFDA70077, 0xB3C3FC9C, 0x297AF737,
+0xD986956E, 0xDA1083DD, 0x622581AF, 0x1D81A341, 0x2BD2C2EA, 0x6B6F4491, 0xFB92F7AA, 0x241BC030,
+0x3C742913, 0x30CC5F9A, 0x31622FD7, 0xAA4E06D8, 0x02632290, 0x08CD2E5D, 0xD5BB1F98, 0xD8494D23,
+0x38D701F0, 0x1EA38336, 0x3C69D3F3, 0xEE518F1D, 0x33C60A49, 0x7EDE6239, 0xA19DD39F, 0x0FAC9E11,
+0x27740F4C, 0x767DBB72, 0x21530936, 0xF0186F78, 0xAAEBF9B7, 0x52EDA9C0, 0x8A002D99, 0x0259F4F2,
+0x83102464, 0xA78D9D4C, 0xD4A599C0, 0x96A4358C, 0x9ACF44CE, 0x39970B53, 0xB691FAE0, 0x2B70C0A9,
+0x40C37227, 0x609F7F4F, 0x129CDF89, 0xC3FC7AB8, 0x4B90FE59, 0xF0B1012F, 0x79C06341, 0x4DF11B89,
+0x20A889D1, 0x2F73CEA1, 0x76147C95, 0x7716C1B4, 0xED75BC19, 0xB68B7947, 0xCE2D43D6, 0x9658CC4D,
+0x683EC720, 0x8062749D, 0x06063066, 0xAA8FE95D, 0xC6015234, 0xC3E93A91, 0x1C03A1BD, 0x7E56E3C0,
+0x86451230, 0xAC1CF48F, 0x4148A521, 0xD8D38212, 0x4C4A354F, 0x4A8DCB4F, 0x5969CEC9, 0x1CF3D440,
+0x177A77F8, 0x8B99C9AB, 0xEBDE0FC6, 0x1B881FDA, 0x3EFBFF6B, 0x3DCB544C, 0xA6915775, 0xE3E218DF,
+0x84910F05, 0x4E18EE82, 0xF392255E, 0x23F0F95E, 0xAF806482, 0x0DECBC54, 0x07F46277, 0xDF75C271,
+0x74C17F75, 0xC31997A0, 0x05407130, 0x1F06E207, 0xAB96F7C0, 0x867D4E89, 0xEA6C16DC, 0x0C7C8453,
+0xA6EF75EA, 0x0D1A6924, 0xEA7C27CF, 0xDA1556F6, 0xF1508E2C, 0x99CC5987, 0x9DD19797, 0x402C6EF9,
+0x07376235, 0x1900655A, 0xEB6E81EE, 0xDF4D62EF, 0xE0549569, 0xD046A69A, 0x35C52893, 0xFB2510CC,
+0xDB1C1FA5, 0x09EE0D8E, 0x9AF453C9, 0x1A568F3F, 0xD518B316, 0xF28F4190, 0x699790B4, 0xF6B11902,
+0xFC44BD0D, 0x88471B96, 0x816AC02C, 0xE1E69202, 0x5ED631E0, 0x394305F7, 0x869E8186, 0xDAD805F4,
+0x82AF9A39, 0x89BB698E, 0xD989EB08, 0x40CBC711, 0x90B7F5E3, 0xB2007B54, 0xE4B33182, 0x7696CD84,
+0x88DEA67B, 0x8D00EC0B, 0x68FD94BC, 0x6D648541, 0xB06D8438, 0xFFC38EC3, 0x5AC97A26, 0xE2234C7C,
+0xF27101D7, 0x4FEBC0C7, 0x38717D0F, 0x29C0A400, 0x2FF62B53, 0x3C87A028, 0x72FBB19C, 0xBD8AF46C,
+0x6E83A2A9, 0x9DA60093, 0xB26A70A8, 0xFDCD188D, 0xA7F34FBC, 0xE146004C, 0x22C808BE, 0x9A6DD6E1,
+0x702DCF60, 0xDFA04D99, 0xFE46316F, 0xD914CC0B, 0x6F486D5F, 0x0A8FA791, 0x70E7ED78, 0x525F6968,
+0x670581D5, 0xE4551B7E, 0x2F549AA7, 0x8F019B0C, 0xC435A828, 0x9E1919D4, 0x27534F4D, 0xD4B0F75F,
+0xAE3DA27A, 0x4652FB94, 0xB0C1E12B, 0xEECDB754, 0x37A4BD9F, 0x063B5933, 0xCC6815D6, 0x662B0C97,
+0x66591D7E, 0xCAE42E69, 0x5D28F2D4, 0x9E8B7588, 0xF249EC1B, 0x103D787F, 0x5220CA2B, 0xCBEDB937,
+0x7AD8071C, 0x6E06AE3F, 0x26A386FD, 0xEB3D519F, 0x23F68DF1, 0x208430FF, 0x1C4C9C3C, 0x2ECC80A3,
+0x5BF28C5A, 0xF0D3E6A1, 0x899734B5, 0x813742E3, 0x90B22F5D, 0xE6CBE9FF, 0x812387F7, 0xB4D4E7D3,
+0xEF067C2A, 0xD54D6D87, 0x7F8D8355, 0xDF350DB5, 0xD2989135, 0xAC2A0E72, 0x2516EA45, 0x9E201571,
+0xCB24F307, 0x7FA8C3F5, 0x1828229C, 0x0C805010, 0x4BAD8896, 0x14D6B31E, 0xB823066A, 0x1B6FB0E3,
+0xC1E7891A, 0x70F9F189, 0xFC820A65, 0x88EB6794, 0x7F058C04, 0xFDC9549B, 0x49C310BC, 0x0FB0F5C9,
+0x19AFB81B, 0x92E21D78, 0x12DE345A, 0xF5DBA0AA, 0xC0B7A51C, 0x7FAFBFE5, 0xE602268C, 0xEF32EB44,
+0x378EC308, 0x11C43FA9, 0xDBDDCCD1, 0x66851730, 0xE65EA876, 0xC45F0B71, 0x91B9EB56, 0xEACC318C,
+0x7BF874AD, 0x22464EAC, 0x7595206C, 0xFCECFED9, 0x5A4C8917, 0x3773C0C2, 0x07951397, 0x7C57A7E0,
+0xCD23E729, 0xAC705E61, 0x3673CB24, 0xE5C9A7CA, 0x56F77236, 0xF613F722, 0x2D6BFCB2, 0x50B6C73D,
+0xD748230A, 0x9BC5682D, 0x685149DE, 0x8441DCDC, 0xB8CA49FD, 0x0033473B, 0x40A96A5F, 0x0102B7AE,
+0xC5BB7BFC, 0x9F1E68CD, 0x91409D94, 0x276D4674, 0x832104AA, 0xE394D87B, 0xE3571DEF, 0xD729E2C3,
+0x13EC95F9, 0xAA371F0B, 0x6C637BD0, 0x56F310DA, 0xA083DEA2, 0x6BC89B73, 0xFFF561C5, 0xBE219F9F,
+0xBF5787F8, 0xBC428B20, 0x4D9D3CAA, 0xB54C441F, 0x469DAEA8, 0xC12C8959, 0xF44491AA, 0x3B2DAE32,
+0xAACB0C73, 0xA74B71F9, 0x33914294, 0xDD235653, 0xE3DAF7A1, 0xBA0B1D5A, 0x5A8FB132, 0x13E885A0,
+0x3795757B, 0xF807AC7C, 0x36DE9B18, 0xAD35F1B6, 0xBD2D819D, 0xA7CBFBCC, 0x71A0A1FC, 0x560447FF,
+0xBC05AF5E, 0xBDA3BEBC, 0x29D348A7, 0x7D3DB7B9, 0x86CFC40E, 0x0FFB9CE8, 0xA6EC139E, 0xD03D9DCC,
+0xA4CAF6EC, 0xB5ABD22B, 0x81CF2B44, 0x87F7A270, 0xE53B59C4, 0x1478E7D3, 0x94C4CFDF, 0x9682F418,
+0x6EAD7E75, 0x90F0F43C, 0xF7426C13, 0xDD46407E, 0xCF866317, 0xBCD8B923, 0x21366B9B, 0x9D1DBF3A,
+0x650D34AC, 0xDEB4A992, 0xE9052B7B, 0x24AD6E08, 0x5CFB36C7, 0xCDCE7B97, 0xDD6D4D3C, 0xF3AF58D4,
+0x2B28C0F5, 0x3EB40277, 0xC06C5421, 0x07A88C65, 0xF7FBA090, 0x99E03BD2, 0x11EB9F55, 0xFC0E9E0A,
+0x0BD246FC, 0xF70D4366, 0xB7A6F2E0, 0x74D80BFE, 0x000080B1, 0x9E010100, 0x12B74000, 0x0FF1D17F,
+0xA17FE377, 0x210AF967, 0x5E05C3F2, 0xBDC08388, 0xB38E9F4A, 0x56B09BDF, 0xE05D02C4, 0xD33E1456,
+0xDC709863, 0xDD0FEE4F, 0xE06C5BBD, 0x95E0A83E, 0xD213F039, 0x989D4E3C, 0x1F4957D2, 0x76160516,
+0x76FD851A, 0x311D595E, 0x718B81DA, 0xF18E1110, 0x5354E8DB, 0xD6E32897, 0x0D0ABC64, 0x0AF12126,
+0x24FE8B08, 0xE19D6D15, 0xB377668E, 0x9031DFE2, 0x79410A25, 0xF6E729F7, 0xA80F7E2D, 0x8CF19C79,
+0x91783D86, 0xDC2C4291, 0xD5A0656B, 0x22BAED8A, 0x60DEA9D9, 0x06D44A2F, 0x328E999F, 0x96B9667D,
+0x4EEF0DCB, 0xC01A6F20, 0x25267F88, 0xDB51EDCF, 0x8EC5445B, 0x51B19869, 0x941F47CE, 0x33CF3A74,
+0xD77F040B, 0xB5146E6A, 0x009CF5F6, 0x1030236C, 0x71D11CD3, 0x23E9F145, 0x31104326, 0xF2698BB7,
+0x1E2BB5B1, 0xF05CA485, 0x5355B76B, 0x0F9750FA, 0x1C181B1C, 0x6C6F1917, 0x8D038CD5, 0x5918FC3B,
+0x6BE23D44, 0x07A6D3DD, 0xC32905D0, 0x93CAE9ED, 0x8057A9C8, 0xB59BCCC0, 0x03FF04BA, 0xE17C69D3,
+0x261D45B6, 0x24B8DD6C, 0x810DF874, 0xDF0D55BE, 0xCBC6ECE1, 0x9D8E2FB3, 0x2498A37A, 0xE0FFCE8B,
+0x3C4967CF, 0xF5A2F2C3, 0x09D5F041, 0xC8ACAEB7, 0x609BABE6, 0x26E70524, 0xEE10734C, 0xF2ABA25B,
+0x3E632387, 0x0AD09A53, 0xC4B054FD, 0x763531B7, 0x796F544B, 0x90D8457E, 0x537CD43D, 0x03B7A4C8,
+0xC8B3591F, 0x3BE45011, 0xC1469A87, 0x45C36CF7, 0xAB86233C, 0x00F42656, 0x93756385, 0xD48728F7,
+0x3A745EEB, 0xA3A8CCE4, 0x2F9D4ADB, 0xBB988FA6, 0x70D24D26, 0x8C1268F8, 0x35EBFEC3, 0x46696F54,
+0x963D1BEA, 0x44830771, 0xEA82E7EC, 0x355D94F5, 0x4F352D65, 0xFD24C3C8, 0x644160AE, 0xF9BA0BBA,
+0x8727C80E, 0x0D4891FE, 0xEFD88455, 0x96885E35, 0xFC706957, 0xA7FD5EE2, 0x76C36C9D, 0x08D973B9,
+0xF573C211, 0x4DF5442E, 0x4544D206, 0x0448E80D, 0x0DC075FB, 0x615C3A5A, 0x0F2BC111, 0xAA37B616,
+0x23AF7282, 0x53A62220, 0x2804EEEF, 0x08307799, 0x345468C9, 0x3799299C, 0xA808F780, 0xAA899738,
+0xDCA6DAB0, 0xE691FE79, 0x04153074, 0x3139B59A, 0x7421C439, 0x2656998B, 0x63E815D6, 0x671755BA,
+0x88767280, 0xBFC70D6A, 0xD524F73B, 0xB8E9CD0F, 0xF49D7B67, 0xDF6FD328, 0x95AC66E6, 0xB038484D,
+0x0347FEB4, 0x348FE4FC, 0xB2A01E19, 0x2A1CDBE4, 0x840CA1B4, 0x001C14FB, 0x2C37AB40, 0x8B0E691D,
+0xC18A4243, 0x8E907612, 0x01A8ADA9, 0xBFED8B9D, 0x48A490AE, 0xD09A07C4, 0x235E1D77, 0xE8D95ED5,
+0x55D416F8, 0x3E22E41D, 0x7795BF47, 0xEE16C284, 0xAB511B06, 0x94203296, 0x8CE37C27, 0xEAAD09E3,
+0xF654E19A, 0x6EF96A3F, 0xA96B232F, 0xA7CCD48D, 0xF61B3D7B, 0x19231100, 0xAF90CEFD, 0xCE9D112F,
+0x4EFC3D8D, 0x44057F02, 0x09557068, 0x87EBF542, 0x8F0E969D, 0x33067299, 0x8D6D674E, 0xA4304BEC,
+0x814A4A06, 0x61D15F7E, 0xF9F7A6B5, 0xDF08DDE3, 0x1456F9AA, 0x21319835, 0xABD1D558, 0xA4CB8F9F,
+0xA43A407E, 0x9EDD5633, 0xA90221D4, 0xD7505F52, 0x9D2BF7C4, 0x380C21D5, 0x222FC2A9, 0xCB92A142,
+0xE6ECA9C8, 0xE4EF0BB3, 0x2982A0B7, 0x358BFA1B, 0x106AFA96, 0x070F2051, 0x17B7B44F, 0xFD51FF56,
+0x5D58E33A, 0x747CF0F2, 0x78606075, 0xECD9F4F8, 0x94C5898C, 0xFEC76BCB, 0xDA756A56, 0x0F92C04A,
+0x40900BD0, 0x8C981A9C, 0x693662CC, 0x7CB60C01, 0x1DBBCCF5, 0x23C44716, 0x2181D68D, 0xA379F7BE,
+0x7C43A264, 0x330EBECE, 0x284D4398, 0x5736D88C, 0xBC9708F9, 0xF4118881, 0x19095263, 0x401E1085,
+0x4EE20FA4, 0x9F588561, 0x8AE3F88F, 0xB6CE3524, 0xC655588B, 0x8600711F, 0x5B844A43, 0x5C8A4AAB,
+0xC4D746D3, 0x319CE298, 0x002C92D8, 0x89585D99, 0x3F6A7DAB, 0x88E96061, 0x3D6596E2, 0x5B281E55,
+0xF1C791B4, 0xA83E11F9, 0x6D036124, 0x1AB3DC70, 0xA4756576, 0x64FA3C8C, 0x5EC392D5, 0xA5D0B53C,
+0x97CE0CD4, 0xB328239B, 0x69FE2CDB, 0x3A3B1C8A, 0x8EF1F557, 0x81454871, 0xFECF2BE3, 0x1FAE902F,
+0x8F3F8EBD, 0x7F8651D5, 0x507500CB, 0xD7047DE1, 0xADF9A269, 0xC7FD4232, 0x7FC23B1A, 0x197373FB,
+0x47E6DBA9, 0x97EEEE1A, 0x0657FBC7, 0xDED89412, 0x5FD66577, 0x33A85911, 0x70DB3BA6, 0xC74073BB,
+0x88500B5C, 0x52DC7190, 0xBF626791, 0xD5F889D1, 0x673FD6C6, 0x2577CC79, 0x7B368DB8, 0xB06AE44C,
+0xEB3AE0D2, 0x10E225EF, 0x3186D89E, 0x9B26A206, 0x31E1CBDF, 0x26800F93, 0xB955B292, 0xBCFB1293,
+0x2EA0A3DE, 0x5A4D526B, 0x26802FF8, 0x3825EF3C, 0x73C04167, 0x3D5F8DF1, 0x78C13405, 0xE3C56CD4,
+0x3BDD366F, 0xD705A2A5, 0x5F8ABA38, 0x8D05A6C1, 0x9AEDEE95, 0x21E60034, 0xEA1DE6AD, 0xFEA6C088,
+0xDE4E67A5, 0x8A52B24D, 0xF30C8A8D, 0x2A8AC1DD, 0xE8B1C2CD, 0x78677B12, 0x8BC39128, 0x53E01B57,
+0x9E20D6AC, 0xAFCFDB51, 0x0B5094CE, 0xA394FF2E, 0xD5622C47, 0x9B1A4A38, 0xD78ADE40, 0x87D3ABA5,
+0x6F6FEFC6, 0x69942356, 0xE59FC18C, 0x2B0CCEE2, 0xB9A6D18B, 0xF7410779, 0xF3B3DCBC, 0x73B68DB3,
+0xE89065D7, 0xB3E19D45, 0xBBD850D0, 0x0EB69540, 0xBDF73246, 0xE2A21320, 0xA2A36321, 0x82993252,
+0xCC499A21, 0xB01DBBE5, 0x31034940, 0xC133C9B0, 0x5C492CCD, 0xE7FAE301, 0x5D310AF3, 0x665B40A9,
+0x7D706A3A, 0x456FD8A5, 0xF5A06E5A, 0x94B021A5, 0xF3628854, 0xABCBC57B, 0x8A4041FA, 0x111C6331,
+0x9ABA3DEC, 0xC885F5D6, 0xDEB88943, 0xE9F9AFAE, 0xFD421325, 0xAF61D1FC, 0x9B317EBD, 0xCDA2FB78,
+0xECEC3B58, 0x605956EE, 0x5E2E1D83, 0x7B7EE4F9, 0x966DDBBA, 0x01F0A500, 0x475886C9, 0x2136AAC1,
+0x3CCF51A9, 0x5F8FE488, 0x8B27C8F0, 0x77E5786A, 0x6581C246, 0x742BA2E8, 0x16BFE679, 0xDC32A8E6,
+0x6D0339F6, 0xB26601FA, 0x5D7A3CC1, 0x06BB0739, 0x9BE05AD9, 0x29C3DB22, 0x9B8E8AD7, 0xA61426D8,
+0xD4D4C520, 0xF2FD6766, 0x1B255207, 0x55FAAD96, 0x659BBC13, 0xCE6F4025, 0x1F745A22, 0x3004E619,
+0xC3AABAC3, 0xD56BD254, 0x5D4A113B, 0x6D8A870F, 0xB65F0F7D, 0xA0AE0640, 0x24E0017E, 0x0733822D,
+0xDA966384, 0x48F25D45, 0x5D4FD455, 0x6095EF4E, 0xC4DDFC6D, 0xACD6B00C, 0x09A837A8, 0xD28702E2,
+0xDB5583DC, 0xD6E99027, 0x6AC2F84C, 0xE3523DC0, 0xAB6E6025, 0xC36D6CF4, 0x0E027DBC, 0xF2918C5A,
+0x3A12EFE7, 0x32448912, 0x1652B1B0, 0x9073EC98, 0x8E5F37D3, 0x27E51B72, 0x9218D8AD, 0x5C0F0BA1,
+0x8869E0ED, 0x22A07959, 0x8B0869C8, 0x11D118F3, 0x73EA705D, 0x52819636, 0x99371C05, 0x4D84FA30,
+0x9B6E1FA8, 0x4DCAE241, 0x02085C66, 0xDA624E9E, 0x8CFB9335, 0x156CC4EA, 0x8BC09E00, 0x66844A06,
+0x147C6313, 0x9BDF4FFD, 0x0CDB78E2, 0xC8EAE994, 0x89317789, 0x1679BB38, 0xC1924058, 0xD818D8C0,
+0x85633082, 0x5539E0A4, 0x3947B34F, 0x250C1A28, 0x04EED22C, 0x183E2248, 0x17A31DE5, 0xF1B4EBAA,
+0xEC9CBF68, 0x88355ADF, 0xBC949210, 0xC1823F2C, 0x53D17CD0, 0x7B50C0B1, 0xE10932DC, 0xDC00A071,
+0x01E07AA7, 0x603CD8C2, 0x2EAF061E, 0x7ABAE9AA, 0x87DD01EB, 0xF3F36066, 0x765FA6A9, 0xED3601BE,
+0x6D2A6839, 0xBCD1D77C, 0xD50ACA33, 0xA1B6AB2A, 0x9EE47DF3, 0x54ECD80E, 0xFB7D233D, 0x9C4E1F5C,
+0x4DC57E75, 0x8C976B85, 0x7354268A, 0xFB84373C, 0xBEAEC2A1, 0x0AF920D6, 0x636BB396, 0x3A3B2594,
+0xA36E9952, 0xCF42CD27, 0xC9EA36FE, 0x992C2147, 0x70739080, 0x50F1A5A9, 0xD446B5B1, 0xA0B49769,
+0xC7637113, 0x133ED94A, 0x86469753, 0xCE066EDC, 0x0E85283D, 0xF7D6C4E2, 0x68753565, 0xB94AF9B8,
+0xB68CF213, 0x6A305CDC, 0xEE7B68C0, 0x679CA821, 0xCC2F4DFB, 0x56554321, 0x99B49DD6, 0xB77A6039,
+0x0B6CDD01, 0xFFB4165B, 0x92DADB10, 0xF4D61DF5, 0x2C016C80, 0x380C3C4A, 0xD18A6282, 0xBAEE144E,
+0x1088AA84, 0xF1B1F1D4, 0xC95D4722, 0xFE48375F, 0xB91E41C7, 0xA4E439BB, 0x83B23B14, 0x7FECF524,
+0x9ADA22EA, 0xB9B04FF2, 0x51D7DA90, 0x9B9BB212, 0x3303DF39, 0x45B7DD27, 0x6B772D55, 0x30844CD7,
+0x625C154C, 0xC10A88DB, 0xF531EF26, 0x143B72D2, 0x9E4D8FB6, 0xDE58C737, 0x017BA0CA, 0xB760EB24,
+0x124E0779, 0x658D5B0D, 0x27839AE2, 0x81FEDADB, 0x00C06215, 0x01010000, 0xB940009E, 0x71C37F12,
+0x8F20B2A2, 0xCF0C1DD8, 0xC516C628, 0x46D3A5CC, 0xD5DCFD61, 0x2BE36773, 0x5DB86E5D, 0x19FF4A07,
+0xA95D72A8, 0xA2623EB9, 0x5E8E7F43, 0x9B63A60C, 0x614C14DC, 0x5639A8E5, 0xF1EAF37D, 0xA2D3DF73,
+0x9DAF072D, 0xD310A0A4, 0x924D5600, 0xA5AFC952, 0x7772888A, 0xD82E6630, 0xB866C321, 0x7C0C90CA,
+0x65211916, 0x1C936FAB, 0x18D22384, 0xD3F8C37E, 0x32D60DE0, 0x34DEE544, 0x859715A8, 0x96B18ED7,
+0xC8476F46, 0xFD70ED58, 0x0DFC83AC, 0xCA693709, 0xDF8F4471, 0xE4F0FB8A, 0x629DF633, 0x4539089D,
+0x313D5D35, 0x33DAC664, 0x9B4AEE0B, 0x14353D3B, 0x94B744BE, 0xD0B08DBA, 0xDC4EF5B7, 0x6371E85D,
+0xB9AC08BD, 0x4CE1854F, 0xE1C4075F, 0xDCAAF708, 0x3BB3D14A, 0x5A3E3523, 0x1B672110, 0x4234DFC2,
+0x2614B62A, 0xA852B2C3, 0xFD26296E, 0x1075D2B1, 0x85C5CC42, 0x7F8DB07C, 0x51BEC141, 0xD23C2BD3,
+0xCEF6726C, 0xB109CCC9, 0xD70F0646, 0xAF5BD57D, 0x19CE9DA8, 0x70588335, 0xC1156696, 0x70EFC507,
+0x6F315F3C, 0x67D5FFAC, 0xB47E6C98, 0x89434A45, 0x258CCF41, 0x7C69E28D, 0x2EFED24A, 0x126EBFA5,
+0x556BAC6F, 0x16D0686A, 0x8D703C66, 0x7F0CAD05, 0x20905802, 0xC9870C0D, 0x483C1D52, 0x786FDFDC,
+0x642C2F5D, 0xAF06CF51, 0x6A6FB1F8, 0x44017872, 0xCAF6A467, 0x2C8B6996, 0x8A69375E, 0xEC12F132,
+0xF478CB9B, 0x402C9936, 0xD6478432, 0xA80D8FFA, 0xD0B18C68, 0x65513C68, 0xF3FC1979, 0x2A9D565A,
+0xD16DF719, 0x5ECF484F, 0xE599AC15, 0x21E585BE, 0x1E02A05B, 0x0BE223A9, 0xD8C9E012, 0xC59DD75F,
+0x0B227DC0, 0xCF079FEF, 0x8E48C06D, 0x4432481D, 0x32429F8E, 0xCF0E462C, 0x364D0D4E, 0xB498E9DF,
+0xDF337A19, 0x45A744C2, 0x46D72681, 0x16BC2775, 0x7B1F76F1, 0x076D2B93, 0xE56F9750, 0xAE7A42C4,
+0xB210A489, 0x82316370, 0xD8032101, 0x00BE3B03, 0x299357AF, 0xAA326660, 0x0B54A1F8, 0xD2DA534B,
+0xDB1AD123, 0x26EE3B07, 0x641E1B7A, 0x5833A404, 0xF0BAF6F8, 0x3AC449EA, 0x058CD31F, 0xF2113DCE,
+0x21808EA5, 0x547EE0F9, 0x1AE926AE, 0x1ECC9376, 0xE2AE7611, 0x8B7E0D05, 0xA8A9424F, 0x57EFA4DC,
+0xFD351CFB, 0x22AFF2C4, 0x7E9D8010, 0xAB0B7771, 0x099D648C, 0x8ACC2819, 0x29816B93, 0x836CC82E,
+0x919A26CA, 0x50FC9575, 0xCF47F81F, 0x8BE0644A, 0x2D2E3D75, 0x044016A2, 0x656BD066, 0x5E14DE05,
+0xEFF1B31B, 0x768983FD, 0x18D0660D, 0x47F8CAEB, 0x3C817838, 0x9503A69C, 0xAEC5FE82, 0x383EB06E,
+0x695D9ABF, 0x41CA9FF2, 0xAE944D54, 0x8CF410D1, 0x8EDCAB10, 0xCDD086CB, 0x1E354335, 0x0AD9D09B,
+0x26CCF39B, 0x095CD08B, 0x83C807B3, 0x412FBFF4, 0x567E5D17, 0x2A09FD20, 0x264FF9BE, 0x94B17AA0,
+0xFB6BEB0C, 0x86BB38D7, 0x64D5B066, 0xF4BDD866, 0x76FDAD65, 0x031754A0, 0xAFD360B0, 0x666C9713,
+0x262A5765, 0xB2E29FD8, 0x45759AC7, 0xD2ABB3B4, 0xA0C8E98E, 0xF1020685, 0xAE7FC1CF, 0x7AF0760C,
+0x643601CC, 0x925CD7BC, 0x300922FA, 0x2A1B5A5A, 0xA0A9DAE6, 0x432EB722, 0x9551A514, 0x5D8BE155,
+0x09B5CEF8, 0xCA694ED5, 0x43275FF0, 0x677350B1, 0x7ECD65C7, 0x6E2B40BF, 0xE6227F80, 0xB19A89A6,
+0x06CAFEBE, 0x4C63A1D3, 0xCA404509, 0x33C219E2, 0x321CC85E, 0xC9B83064, 0x054C7483, 0x9D66C4E1,
+0x6C2792CD, 0x7CCC3391, 0xDF8FE98C, 0x41E93809, 0xFC94C3EA, 0x49F9B6D3, 0xFB71393F, 0xECFB0BA0,
+0xA991B8E0, 0x55DB6246, 0x2D73AE24, 0x2EB447E0, 0x35ADD76E, 0x1BCD05FF, 0x73824C7C, 0x59538956,
+0x7186EF08, 0x144E80B1, 0x16934300, 0xB2D89DC3, 0x2225ABB6, 0x9B17BDBB, 0xB1E4D232, 0xE2CE1E00,
+0xC70229AB, 0xDD9418CD, 0x29ED8D66, 0x57D7C06E, 0x316DEA18, 0xDE685055, 0x19CC0AA5, 0xCA428523,
+0x16CAEB6D, 0x99C705EC, 0x2EA2F054, 0x7AF5DE4C, 0x8336FC26, 0xB4DB5862, 0x76B432AA, 0x2D6BE368,
+0xF8528C8F, 0x46D89465, 0x44C9FE5C, 0xF862833D, 0x104799CC, 0x76139FA1, 0xF3D0B44E, 0xD9C7A822,
+0x992DE1A4, 0x56A980E5, 0x9E001191, 0x74C9C3C4, 0xA58F4DD0, 0xDD1C15FF, 0x0A0A7019, 0xF06F28DE,
+0x89B82933, 0x6F881F48, 0x09255DDE, 0xE8F5454B, 0x23AAF98E, 0xC92E18AA, 0xEF857D4D, 0x17C44CBF,
+0x04C7863A, 0x61C85F2F, 0x6FAB5390, 0x15824231, 0x5F6F1D0D, 0x3A9178FA, 0x6E67DC1D, 0xCDEA6EAB,
+0x302E7770, 0x2A5EF3D9, 0x3E31D75E, 0xEE519DEF, 0xD0937D20, 0x9E065B8B, 0x565EC0AF, 0xC189EBB7,
+0x8156A3AF, 0xFB6D4C08, 0xF725920F, 0xE1689EB5, 0x3F5F28AB, 0x245D48CA, 0x617B3C28, 0x203D8499,
+0x6CC26571, 0x915F0063, 0x415ED3F7, 0xD28707D1, 0xA94C20DD, 0x6FEEE4DC, 0x7C3D8A86, 0x0650E757,
+0xCC81A627, 0xE25EDA58, 0x94A5D214, 0x0AEC0724, 0x76161346, 0x5CB220A8, 0x42290E78, 0x227FB678,
+0x35032FEC, 0x18F21DA9, 0x2F19D6B7, 0x95E5E7B0, 0xFF01928B, 0x14B74056, 0xB30BCB06, 0x3965E1DF,
+0x309CB9EB, 0xE3B5557A, 0xA5FF0CE9, 0xB8089324, 0x8C9883DE, 0xF11E5BC7, 0xF35E10B7, 0x3DCF760A,
+0xF28AF6F3, 0x26977310, 0x5C66D4EC, 0x2CB665A8, 0x94BDAFE5, 0xFA39A4A1, 0x75EC4AC3, 0xED970F16,
+0x4F98CAAE, 0x829FF0A2, 0xD220A3EA, 0x50F1D96C, 0xAFD6516C, 0xAF0486E2, 0xD39976B0, 0x0DDF22AD,
+0xE450BE05, 0xBF4389F2, 0xB28BB4A1, 0xC8C140D7, 0x9361A579, 0x3C0A76BB, 0x16CF74BE, 0x4CD54182,
+0x6EC05E44, 0x46DE126B, 0x14FB4B2D, 0x9CCA2129, 0xBFCAF1B1, 0xB866DC1F, 0x0E7BFB2F, 0x707582A2,
+0x47DC06C6, 0x07A2F776, 0xCD412792, 0xD311A397, 0x97FC2EB2, 0xACFCBB3A, 0xAAF7BD88, 0xA29A903A,
+0x13E744A9, 0x29D6D8AF, 0xB933BA9B, 0xE5700939, 0xE38DB764, 0x30D79B55, 0x6A0A5BD9, 0x8BCC9973,
+0xBA19CA8C, 0xF00C82F4, 0xC5125667, 0x17452A4B, 0x094A8C47, 0x90609164, 0x9A0E9498, 0x4E4AC4FB,
+0x53EDD371, 0x234A4B78, 0x2977DE8C, 0x9FCE3267, 0x638B0AF4, 0xE6C737F6, 0x68CD44E4, 0xCB0BF3A3,
+0x9C48A1E9, 0xD53AD578, 0x33BDEB05, 0xCA31538C, 0x23100C01, 0x8F96F38B, 0x847CA4EA, 0xFAAFF8C8,
+0x5824997B, 0x3C93AB98, 0x8B43BEB1, 0xAE58681A, 0x3CBAFCB2, 0x1AE21B63, 0xED6ADD5A, 0x8733C45A,
+0x299ABA62, 0xC563BBE3, 0xE06875B0, 0x70AD5C50, 0xD0699372, 0xCB600009, 0x9FD4013E, 0x1237A989,
+0xC1626BAD, 0x7A1B8471, 0xB90EBBE7, 0x727A574A, 0x0C54DF6A, 0x32DA8C87, 0x06C7005B, 0xEEC3725F,
+0x1A600321, 0xF9AC72DB, 0x4EBEC26B, 0xE2FA305B, 0x4E77A99A, 0x09477E17, 0x2898DE72, 0x12EDF751,
+0xED4BEB1A, 0xAB0CF601, 0x9AB062AE, 0x1E6701CA, 0x53BE8BDE, 0x2EFEA9B6, 0x79613653, 0xB3A2E8C7,
+0xB3A3EA58, 0x636D9003, 0x0131B546, 0xEC157754, 0xC5FC5CA2, 0x04F6E182, 0xB377547B, 0x8F0836FD,
+0x3E19AF68, 0xFD5D2882, 0xB5958CCA, 0xF67DA676, 0x52FECEEC, 0x00FC6747, 0x62DEECBA, 0xCD32A630,
+0xDBD17FAF, 0x771DA00B, 0x6A70E516, 0x2DC7A832, 0xAA5DAC57, 0x6CD439B1, 0xF6D8D979, 0x203CD43B,
+0x749D7D9C, 0xD0C4B6DA, 0x245CADA6, 0x5FDA1F70, 0xABA154CA, 0x973DC7C7, 0xE3A5F180, 0x77A4321E,
+0x29E7DD2A, 0x325D4711, 0xDD240742, 0x49DC846C, 0xCCBE4AA4, 0x5F8E4163, 0x86028094, 0x9DEAB959,
+0xBEB43511, 0x33D6FFB6, 0xA254C1F0, 0xBBE14842, 0x36D703D8, 0xAFD809CA, 0x41A7E0E0, 0xCB264C1A,
+0xF7A38D0E, 0x9FFBC67F, 0x1C91F557, 0x85B10695, 0x8078F5C0, 0x7E6AE162, 0xBEE2C8A6, 0xFBB4E4BA,
+0x70443B8B, 0x5AC64C6D, 0x1787B210, 0x52DBA24E, 0x8DE7A318, 0x752939E0, 0xA3575AA3, 0x36E90BAA,
+0xF4323C25, 0xF5317258, 0xC2C1A81F, 0x6F2206EA, 0xB6E47106, 0x76D02BE4, 0xF00DE5D4, 0x54B52172,
+0x4264D340, 0x52C280FD, 0xE8445E5F, 0x44050D53, 0xB3C58C33, 0xF76DC0D5, 0xBCBF7B98, 0xD3CE4836,
+0x7111B312, 0x6BFFC9B3, 0x8DFC0079, 0xFC2A020E, 0x628C6552, 0xE7EC3510, 0x07206FCF, 0xD37FF1C7,
+0xEEE2CC48, 0x77F48141, 0x741AD507, 0x045E1AE8, 0x3F115037, 0x254C735A, 0xE6601C08, 0xE31CADFC,
+0x73A6F572, 0x8535285E, 0x75CA3C02, 0x67EB5970, 0xE09BD871, 0x22F5F186, 0xDAC73DC0, 0xC3DD77A2,
+0x5A65B45C, 0x8E26EBAF, 0x30EA5D8D, 0x8125D498, 0x181088AE, 0x5FA2A37B, 0x648CA8B5, 0x1BF3949B,
+0x6BD0EDEE, 0x671D200F, 0xB752E3FE, 0xA19C3441, 0x2C6A108D, 0xC5B72782, 0xEE5EF8E0, 0x0247C149,
+0x44B0E001, 0x3C31F2FD, 0xF4B6D63D, 0x23A4964C, 0x7BF8D16D, 0x61C7AE0A, 0xAE4C6108, 0xC18A416C,
+0x6F453D97, 0x8BD348AC, 0x5736FE8B, 0xC93B0E68, 0x98C10DD3, 0x20BB12CB, 0xF997D24D, 0x8499B93A,
+0xF16CB77C, 0x8954B2E9, 0xEFEF01B4, 0xF355A1F1, 0xC3FC7059, 0xFE0D255F, 0x08250B88, 0x9F447DD1,
+0x83CAC0A9, 0xFD46DF27, 0x3369A885, 0x4FAC1685, 0x4BC529FD, 0xF1F32EC7, 0x3F0D25EE, 0x237B3B1A,
+0xC7C03D55, 0x675F8791, 0x39347E82, 0xADBB766D, 0x9CC27598, 0x8E642045, 0xA19A7249, 0x9D0B89F1,
+0x0A4ADC33, 0x77FCB61C, 0x49233E47, 0x7A01457C, 0x37262604, 0xC73BC8EE, 0x043C5D97, 0x54B4742C,
+0x3925591D, 0x1A042067, 0x9E843150, 0x874090EB, 0x8A0AEA3B, 0xD4F532A1, 0x950D8CE7, 0xD570CED1,
+0x3632E4B6, 0xB6346B03, 0xB01701A3, 0x98834AFE, 0x2011A4E9, 0x180DECB2, 0x20FD0E9D, 0xCD401DFD,
+0x6902319C, 0xC190E6D3, 0x55464A4B, 0xCA104CF1, 0xF993A0F2, 0x127AD709, 0x396D2855, 0xA9C81131,
+0x4F0C01D6, 0xECD2D414, 0x532290E1, 0xAACD49D1, 0x56A49892, 0x3F1865EB, 0x22A3AC4A, 0x66874FC0,
+0xE881952B, 0x0725EDD0, 0xDA5F6311, 0xBE53B72C, 0x2748AB9E, 0x07322B46, 0xBE7D2B6A, 0x67B817E5,
+0x3C969591, 0xA3914311, 0x080D3AA1, 0xBDCBFB17, 0x463C2EB9, 0x8BB74E98, 0xE8DE9DFA, 0x00C04746,
+0x21010000, 0xC040009A, 0xF0C5BB3F, 0x300B300E, 0x284BFF53, 0x2C1753AA, 0x0077A70C, 0x72233CAE,
+0xF5A66874, 0xB7B448CA, 0x5736FA7E, 0xD4D0F65A, 0x8F199D23, 0xD84ACC27, 0xBBDFBB65, 0x6ED32EF3,
+0x7D9556F3, 0x3E484D58, 0xFF547D63, 0x8BB27DA8, 0x7F120C7F, 0x0CC795E6, 0xC9E03277, 0x8A15F83E,
+0xE6713323, 0xC3125872, 0x0A1785DD, 0x72B3DE76, 0xEC114616, 0xE5E2F6FE, 0xD6745523, 0xC45EA2F7,
+0x91475E26, 0x808DCE68, 0x4574E0D3, 0xFEA3E3EE, 0x6C6FAF9C, 0x71518C52, 0xF5CC985C, 0xD6EC84BE,
+0xC9FC6CA9, 0x34D88BD8, 0x6AB81685, 0xBC8DEBB9, 0xAB8AB0B5, 0x7ACFC8D2, 0xEC82D1A8, 0xFBF2ED28,
+0x1516572B, 0x1DE87EDA, 0xA3E362D7, 0xF566B571, 0xCC8CF7AC, 0x5428BB67, 0x5CFA4547, 0xCCCE1831,
+0x8EF1A939, 0x308C9C02, 0xB19C2815, 0x1E73D783, 0xDB23A409, 0x7828D395, 0x912AB367, 0xD085A922,
+0xE3EBDC8F, 0x5450289D, 0x98E75D0A, 0x7C7B2EC6, 0xE9C1DB99, 0x46B156A2, 0x4DE6F1B5, 0x68DF2B49,
+0xADF2A696, 0x536DAD54, 0xC0F9DA7C, 0x1025BD17, 0x778C4F45, 0xAA1F0A07, 0xAF8A6FC3, 0x97129475,
+0x13CB8491, 0xFCB4027B, 0x58B7255C, 0x84F12915, 0xF30062FC, 0x2D9EC5EA, 0xD6E782D0, 0x574FA8DD,
+0xA9229E40, 0x25AF1EC6, 0x0160E5F5, 0x292FCE71, 0x34BE639B, 0x62ADA392, 0x3F55125B, 0x0513CE3A,
+0x571E5499, 0x0D2FAB62, 0x72B31AB3, 0xE9B0776D, 0xE96FB474, 0xC77258A3, 0xA9FECC1F, 0x525C3E88,
+0x009F4D52, 0x04C9EE08, 0x4BA9CDAB, 0x2F6E55F4, 0x40ADCE40, 0x42CB7D84, 0x7D3F7217, 0x91B47CC7,
+0xE5F7BA54, 0x45EBACD9, 0x61B06810, 0x9A06B181, 0x8DA9D61A, 0x5C93A9E4, 0xB5038DFA, 0x2AD1BFB3,
+0x75BD4251, 0x84296248, 0x955272A2, 0x51B6E1D0, 0x32050EF1, 0xFA213202, 0x499D28AB, 0x9C4844C2,
+0x347F9942, 0xD8C8C3CA, 0xB0554678, 0x1EB80BD3, 0xE265A307, 0xA2F95124, 0x9460B491, 0x7F395463,
+0x63CEF398, 0x025327A0, 0xDD2B9D2A, 0xEBE111F4, 0x32D4F983, 0xEAD799AB, 0xA2855AEF, 0x2A5BD89A,
+0x6B9AE5D7, 0xCBCFBF43, 0x678C43D7, 0xA007C62D, 0xCCBEA791, 0x9F09C617, 0xFDBFFF08, 0xB2B9CB6A,
+0x7E9CB5E2, 0x9C621073, 0xD35F22AB, 0x613801FC, 0xBC361AB1, 0x818F7EEE, 0x162732EC, 0x0A78EF73,
+0xB82E2505, 0xB0AC04B4, 0xA1609C1E, 0x2A3C1524, 0x970F5C60, 0xE14AE2BB, 0x2AB2B0B2, 0xC825B54A,
+0x01E4E8DF, 0x9192A188, 0x20BA28A0, 0xB9D625CD, 0x85373861, 0x92225415, 0x3084E240, 0xC9533BF9,
+0xE4BF90D4, 0x61014DBA, 0x13944BD0, 0x816050BC, 0xEBDD5B52, 0xB700302A, 0xC0C0685C, 0xE3B6E854,
+0x75E45DF2, 0xD321E3FB, 0xC164CA8A, 0xC1A21B2C, 0x63DFD0D8, 0x5422008F, 0xA08B28F0, 0xC582B3C6,
+0x7AA21F0F, 0x088BB442, 0x2558D135, 0x99598479, 0xA97DE983, 0xA01D2638, 0x4C9E5A59, 0xD0C2DBA3,
+0xE5C965F8, 0xC0ED0EB0, 0x43FA173D, 0x6448B236, 0x1F4235C0, 0x4CA97988, 0xFCE7B21E, 0x87270FE1,
+0xD2ABBA52, 0xFFA64AED, 0x53A89470, 0x893C5EBB, 0x1E43AED5, 0xF576DAE3, 0xEDA57034, 0x9A6CF32B,
+0x3CD3B98B, 0x31052078, 0x69352FC4, 0x97A46740, 0xE03FB55B, 0xB55946D1, 0x73D77A12, 0xB68FEB10,
+0x4FC7A243, 0xC87877B6, 0x8DCC92C5, 0x4377085B, 0xDCD7A2F2, 0x2F281CED, 0xF08E8153, 0x80AB7F70,
+0x1A45029B, 0x5BB46A43, 0x26317B9E, 0xE2288375, 0x8FED9B43, 0xF5F38366, 0x05A67F4D, 0x5F793764,
+0x6299B7F9, 0x7A5DF298, 0xA4714B01, 0x690B363B, 0x4B1133F3, 0xEC5CA98D, 0xA24160ED, 0xCE30CC17,
+0x153ECEA3, 0xA72E2CCB, 0x42015D9C, 0xB9EB5308, 0xD20A572F, 0x543BAECD, 0xD559CA31, 0x6324773D,
+0x2A84C319, 0xB241FAD2, 0x32F3FA93, 0x5A961080, 0x6F02E3D5, 0xB0E1221E, 0x9617DAFC, 0x87A8D574,
+0x866BEEA7, 0x93CB850A, 0xF87D8501, 0x9D967723, 0x6D29D792, 0xBCE77A50, 0x56300790, 0x1C12D25A,
+0x711486F7, 0x9722CBCD, 0xDF911516, 0xE96ED836, 0xDBAC0642, 0xA9484D37, 0x9B5651F8, 0xD9AAD8E8,
+0x61AA5E47, 0x36E14414, 0x2C8406B5, 0xF09F8BBE, 0x5CECB396, 0x4F10200D, 0xF3B221D0, 0x2A510B72,
+0xF7AA72EF, 0xB03F1EB5, 0x4E622DCB, 0x9560B0D0, 0xAA887C68, 0xBB1FF6B0, 0x4162CA60, 0xAEE90677,
+0xCF21E14D, 0xF9BBA30D, 0x6CBCE7DF, 0x04B68DB0, 0x27B177B6, 0x290CDB94, 0x91349FBC, 0xFA0AA638,
+0x79DF462D, 0xB449E28C, 0x2525E2EE, 0x4530BE87, 0x29D30C46, 0x6A46781D, 0xC2E4487F, 0x016083A5,
+0xB2255234, 0x9570ECF9, 0x5136A803, 0xE4E6BD01, 0xB45A1C9B, 0xCC0A1FBE, 0xD7B42853, 0xEAD2EEA2,
+0x2C658EB9, 0xB89B3F0B, 0xEC8E4934, 0xA74F5A0F, 0xA7019AFF, 0x8FEA7C70, 0xE0146549, 0x715EE77B,
+0x730DE4BC, 0xED304953, 0xFBDEFEF7, 0xEBCD1472, 0x48CF8A12, 0x4880AB2B, 0xF8543FCA, 0x2BD8DD2A,
+0x58DECFAD, 0x8DEFC0C4, 0x145BD6B7, 0x4AF47D9F, 0xFB1215C0, 0x3A3B1D86, 0x0BD8B24A, 0x8FD30C59,
+0x1BFE217F, 0x211FD8D5, 0xACB8DD33, 0x100AD76B, 0x3F402B33, 0x80095D96, 0xF8CEB9CC, 0x930349A0,
+0x0895B17C, 0x17DEA9DD, 0xCDB7A2B0, 0x5BEB9C75, 0xEA4FDD64, 0x140BCAEA, 0x804BEC88, 0x66601217,
+0x1926B028, 0xBDDDA6F2, 0x69160B00, 0x371BC7E9, 0xD10E1FB5, 0xA54542E9, 0x52DDEA00, 0xFE136FC8,
+0x176A86B3, 0x6F8931C4, 0x32A5C172, 0xE67F131A, 0x1C9E4E63, 0xA5F33BD9, 0x99666862, 0x0B277658,
+0x431558F2, 0x38383CDD, 0x6CBDFB02, 0x14092DD2, 0x34DE3A3A, 0x9459930C, 0xB9E56EA8, 0x5EB867AF,
+0x5A0347FD, 0x3547708B, 0x24056E16, 0xA2E843FE, 0xBFF16FB3, 0x7BE24B99, 0x791439CD, 0xC8E45A12,
+0x136D7AF7, 0x28122C8B, 0xB3306D5A, 0xA4D2BB31, 0x1E9BDBC0, 0x4C7066E9, 0x587684BF, 0x8DC86148,
+0x429C430B, 0x8777D52C, 0x5F1BFDDD, 0x7234C068, 0x281775A1, 0x55455E30, 0x145CDFEA, 0x211B4FDC,
+0x56C75793, 0x54B35925, 0x5062C766, 0x0C6C6B98, 0xC0A0244D, 0xB7C25CC0, 0x9396D8AB, 0x4B1ECFAF,
+0x8EDB4CDF, 0x1BCB20A6, 0xDCFD7AAC, 0x6EDA993A, 0xA12B5D92, 0x875B892E, 0xE1CB7EC3, 0x8554285B,
+0x9CD62CCA, 0x070058E0, 0xDAEE7446, 0x6ABDA8F7, 0x7B4BDBC7, 0xC8D7188B, 0x642324EC, 0x725B818A,
+0x1036CCED, 0x6D21AA32, 0x0AD28D43, 0x6593D198, 0xFA783D7D, 0x969E3959, 0xB2A36D71, 0x294EA28B,
+0xF3DA9E8F, 0x11F4001C, 0xC07BF230, 0x0D9230C7, 0xEA20338B, 0xC8C04430, 0x19F3767E, 0x0FC50920,
+0x18EEDCAF, 0xA7CF179A, 0x07E5B4EF, 0x74F2432C, 0x991D2787, 0x1067DFC1, 0xBA8FEDCD, 0x57C5DD4C,
+0x682833EA, 0x9CC16EE1, 0xAC4A2EF2, 0xAE35CDBC, 0x82110D88, 0x629997EE, 0xDE70D846, 0x26E6B15A,
+0xEA5C25A2, 0x3A1E298B, 0xCE23B5A2, 0xECF86BBC, 0x8C48C346, 0xD2F90C0D, 0xF26DACE1, 0x8F237D42,
+0xC65096B8, 0x5C068E03, 0x2721FE71, 0x2C0161E5, 0xE8E9765E, 0xF5BA0F21, 0xBE60B497, 0x9167955C,
+0x6591083A, 0x6685116B, 0xF14035CE, 0x869ADA35, 0xE832C070, 0x18CD3190, 0xEE8DC60F, 0xC91819F7,
+0x6988EAB3, 0xC4B2BC40, 0x4F1614DD, 0x0B293322, 0x0208BDC4, 0x403854E8, 0xE9433DD9, 0x83BC19DE,
+0x7752CFCC, 0x350515EC, 0xBF91A9F6, 0x76D9D051, 0xEFEDCC43, 0x9B2F95C8, 0x852DC338, 0x7FB18502,
+0x2EC4BD6C, 0x693A2B10, 0xF6A197BE, 0x191BA355, 0x069F3112, 0xF6966451, 0xD2D06886, 0x9DAE6440,
+0x14174552, 0x8AC3FD03, 0xCEA1FF57, 0xA550B939, 0xA1F399B3, 0x7F256443, 0x795A4EFF, 0xAAD0F132,
+0x00F80715, 0x55C01BFD, 0x65492569, 0xFE16BF9D, 0x88F13E51, 0x5D272351, 0xD435BC8F, 0xBC9C7D1B,
+0x9616805A, 0x610A45E6, 0xFACD4DB9, 0x29C1646A, 0xD30FFA64, 0x7EDB06D6, 0x27154B42, 0xC043F201,
+0x0B7053F6, 0x3ABE1F34, 0x156ED23E, 0xF1C244E1, 0xCDF58837, 0xC12E11F5, 0xE51D8F3A, 0x2CD50B1D,
+0x129BB4B1, 0x66011CA0, 0x022D229F, 0x7FE3DC9E, 0x99647803, 0xEC3D635A, 0x94BCD62A, 0x5164DB7D,
+0x5093F02D, 0x231FD06E, 0x7B062617, 0xF9DFE4EA, 0x1181E624, 0x45F7CF29, 0x518751C3, 0xD16682AE,
+0x7B7E0E98, 0x3523BC10, 0x11A4BD5B, 0x57A22D06, 0x46E86769, 0x9DC84D23, 0xB82B51FC, 0xAD91E714,
+0xBD3C556E, 0xB133E92C, 0x9EF7083C, 0x008EDC80, 0xA092B696, 0x26DECB42, 0xF52B2550, 0x029B2937,
+0x96F19828, 0xC1838645, 0x0898F037, 0x9CC558E0, 0xE4DB0E95, 0x6D30AA96, 0xF4C1889F, 0x08B7B1F7,
+0x96009095, 0x23F9F630, 0x6B535990, 0x8DA81851, 0x3E5D1E1F, 0x834FC401, 0xE88E604A, 0x5D2B0E34,
+0xB99A3780, 0xEEB8C45E, 0xF7AC799D, 0x6B269050, 0x0B8689E9, 0xA68F0F40, 0x3F77BD7A, 0xD956B4D6,
+0xA18F8A4A, 0x6C6DC25A, 0x3714C28F, 0xD4D22AC3, 0x7EF25E64, 0x0332D1B6, 0x8E0E969B, 0x6E0876C0,
+0xFD57CFA3, 0x1A6EC554, 0x75C26943, 0xC1988BD9, 0x050C7070, 0xFD01BD48, 0xB5F4E31E, 0x6EB9187D,
+0x33149F6B, 0x398282E7, 0xCD937627, 0xFFF06E2D, 0x38585F67, 0x4B779DDF, 0x9C10F7B2, 0xBFC761B5,
+0x77F891B4, 0xC9717D74, 0x8C98237C, 0xF7FEAEA7, 0x1B41F2C1, 0xB84B1F2A, 0xB1D73392, 0xA82E5D8D,
+0xFC3DF236, 0x50C706A0, 0xC10C76C4, 0xC0F411C3, 0xEAC17A4B, 0xE573AF5B, 0x13535E4C, 0xD545805F,
+0xEC02DD39, 0x4688E8DE, 0xFC76A44F, 0xEA0EF8A4, 0x7DCDF465, 0x77235186, 0xBFA909C2, 0xE63D5122,
+0xE05E55A4, 0x21C3C93D, 0xE7C83798, 0xF657637C, 0xBFBEB9E9, 0x20E4B947, 0xBA29D95B, 0x9A9A424C,
+0x83E0766E, 0x1081D9AF, 0xB8705C5E, 0x6C34E020, 0xDF0FE16D, 0xB65F14E0, 0xFDF9E9D8, 0xF64B2353,
+0xC781D607, 0x6F61121B, 0x29D8C58B, 0xC52A951D, 0xE0D12680, 0x0E693052, 0x47FA99AD, 0xDFAD0C33,
+0x6661BD7A, 0xDD7D1E0F, 0xCCA77676, 0x80ADD320, 0x72A30247, 0x4F2BE286, 0xB48BE525, 0x08BEDBE2,
+0xB83A5EEC, 0xE6E30937, 0x84F79AE1, 0x7F540390, 0x4D4057BE, 0x3681EFE7, 0x59CABC93, 0x5F249EF1,
+0x140ADA16, 0x05A4EC0C, 0x620627DD, 0xB85E2A25, 0x00C60955, 0x5F4781E5, 0xA4099EFC, 0x28B1FD6F,
+0x10DD61BF, 0x7BACCFAF, 0xBDF05C97, 0x4D64AC81, 0x05ECE93B, 0x0DC5CEE2, 0xEAB03164, 0xD8C0E94E,
+0xBA335C1F, 0x691B4C78, 0xD2470770, 0xEF18BE28, 0x8A903DB2, 0xC70C1553, 0x20F5FCAE, 0xA797AF18,
+0xEE839B12, 0x443BB28B, 0x3DBA9A45, 0x2FDB107B, 0x55E58061, 0x1487F354, 0x7BEEF77B, 0xC45EC1BB,
+0x279C95CA, 0x551C51FA, 0xD30D17B3, 0x99011FED, 0x2AFB1BD4, 0xB9C32EF0, 0xBFB6DFBC, 0x215E1CD6,
+0xFC4E6497, 0x5A8166DD, 0x631B55E9, 0x471A3BF2, 0x554E9EF7, 0x14ABA1D7, 0x083FC83F, 0x4FE79BBA,
+0xACCB145A, 0xCEA2F42C, 0xBFF4DB43, 0x02A1268B, 0xE778E20F, 0xCE8EA9BA, 0xF52F9BA6, 0xF0BB68AB,
+0xC383137D, 0x227E2365, 0x2895A835, 0xE22DCF09, 0xA58B4C86, 0xAFFEBF9C, 0x394E41AA, 0x834FAE2A,
+0x719FBC9D, 0x3E34461C, 0x1A7665B7, 0x32DB67F4, 0x8681D2A8, 0x225029A7, 0x01277F8B, 0x338208EF,
+0x0284D93C, 0xB8B0C5E1, 0xE4CDDC19, 0x15ECFF77, 0x80A8CD4B, 0xB17C3213, 0xD4217C59, 0xF56F282D,
+0xD3CA638E, 0x1422B904, 0xA34C3736, 0x8B43A955, 0x4051FAEC, 0xDB7BE763, 0x3645FCC9, 0x99C59663,
+0x219E329C, 0x245DFDE6, 0x97709706, 0xFB5944A2, 0xB34ACF35, 0xFD6EF46A, 0x26E77FCE, 0x59DEEDCD,
+0x90D9970C, 0x6F0875FF, 0xFA42B5FE, 0x6250C08F, 0x650B4E44, 0x26FB14FE, 0x56952F99, 0x38EF6080,
+0x9E2EA538, 0xED218C34, 0x39B1CFAA, 0x7C603359, 0x6B1D7984, 0xA4CFD5A0, 0xE30BF667, 0x1358D45E,
+0x025878E0, 0xBFBEF9A6, 0x1C01452A, 0x678A5329, 0xC46E9C15, 0xD5B5CEDC, 0x5650C7FD, 0x61D651AC,
+0x6F5B9AE1, 0x95DC59E6, 0x63CF0007, 0x25F2D9AB, 0x042D0246, 0x5B577B0D, 0x5CC45AC3, 0xE157F10D,
+0xC9BEAE0C, 0xBEC35395, 0xEE84C9E9, 0x73BACC37, 0x68A3D3FE, 0x24F59FF7, 0xDD30F9D2, 0x81BC8322,
+0x9FDDA5E9, 0xF8B69CD7, 0x341E0D9C, 0x6B2B96B0, 0x96E434C0, 0xA3128E52, 0x61092577, 0x853048CE,
+0xA482A96B, 0xDEC4F4CB, 0xC6CEF49E, 0x9202C68F, 0xA74DA864, 0xDD01D184, 0x59EA62E6, 0xDB329057,
+0x047D5D5B, 0x684623D1, 0x17927C53, 0x5D79B1C6, 0x7A8E0A25, 0xD6F400D3, 0x88E313F7, 0xB1B58017,
+0x9E8EB5E6, 0x02BFF983, 0xC0B1A656, 0xEC602338, 0x3BB767FF, 0x8C979FC8, 0xFE8F1F77, 0x07ACEA1B,
+0x46211335, 0xE5212BFC, 0xFDBACF28, 0xD38BC317, 0x2E2F53CA, 0x16D88360, 0xF19F013F, 0x58AEAC6E,
+0x7F19B4C2, 0xBAFB0DA4, 0xA21F1375, 0x8D7D1E62, 0xC50F1A55, 0x8998E8CB, 0x2F646777, 0xD438F4FD,
+0x681F1915, 0xC512C83B, 0xB2772187, 0x303068DA, 0x55761286, 0x56C271EC, 0xB14F1087, 0x68ABFDD9,
+0xB5BB587D, 0x99C09CCB, 0x58B4A32D, 0x2CCDA1D3, 0xDDBC1806, 0x6AA52265, 0xCD01E409, 0xB52EB76D,
+0x8B1A6193, 0x830D1F01, 0x512080E0, 0x8AAFC740, 0x28F682A8, 0xD4CD6887, 0xEBB86D8F, 0x98BDFEBF,
+0xB36C00D7, 0x220F4A49, 0x939D2948, 0x1BEC8F5C, 0x00587673, 0x4106E0DC, 0xC91887EC, 0xDB1A7305,
+0x8ED76829, 0xF840DE28, 0x22C80803, 0xE8864180, 0xC7E981DF, 0xFDE10DEA, 0x4C4E4351, 0x4F2237AA,
+0x7A09B720, 0x88C0C69A, 0xA58C0993, 0x8F304C6E, 0x2A43C69F, 0x30128695, 0x3C6CC452, 0xBE3288B1,
+0xB2E8CFA1, 0xF27F66B1, 0xFF6AA1ED, 0x801EF828, 0x3008C222, 0xF709956F, 0xB8B2C126, 0x073A04AE,
+0xDBA4BE18, 0x5A385C48, 0xA4F74275, 0xAB364584, 0x07FA257C, 0xB4F07718, 0x43BB8624, 0x5FD68DD7,
+0x4F66CD01, 0xA114AF54, 0xE00D341E, 0xB9C48321, 0xEC6B3EA5, 0x10D9E4BC, 0x3334F827, 0x91EBC4E2,
+0x3BC0325D, 0x988EB99F, 0x2D418590, 0xAA0CDA10, 0xCA07A7A7, 0xE72911EC, 0x48AA000D, 0x5CD114A8,
+0x6208A7EC, 0xDB05F65D, 0xCD989ADA, 0xCCFFD002, 0x30C30FB0, 0x0D550D12, 0xB614777C, 0x8C260822,
+0xCB3786C5, 0xF988180E, 0xFCB0F488, 0x92A006C1, 0x201428C6, 0x620F47A1, 0x4E74C018, 0x82E7435E,
+0x599DCD39, 0x1DA9834F, 0x1787AC46, 0x20AF439D, 0xCFA9BBCB, 0x88F31B46, 0x3C421405, 0x196FB1C6,
+0x55710C90, 0x4F42C47A, 0xCAF75B31, 0xCBFF13E7, 0x980BA9A7, 0x9E8F3199, 0x6E781107, 0x3E7C4ADE,
+0x0D15F12F, 0x26662484, 0x6BA5BF71, 0x9D7F1F89, 0x1E3D6A53, 0x7F82035D, 0x67964216, 0x8908F95F,
+0x1D15BACB, 0x47AC3211, 0xF86739E6, 0xDBDEF268, 0xB22DB7FB, 0x1DED8E09, 0x6BFE7037, 0xF5E23985,
+0x7A37E98D, 0x04EF5841, 0xA1CD97EC, 0x815C810E, 0x787F7684, 0xEEFBCA77, 0xAAA28B13, 0x3C64CF72,
+0x9AFFE687, 0xE11809AB, 0x923872CE, 0x68121E02, 0x0C2430C4, 0x84F55580, 0x1477A3E8, 0x7CA25AC8,
+0x31E2CB4E, 0xC5C9A48B, 0x979DC9CE, 0x81EFBE43, 0x925B31E9, 0x2D39BA14, 0xD6B353FB, 0xA0D327F3,
+0x6B7BB19E, 0x02FF6397, 0x33972728, 0x1F28DA46, 0x5136CE55, 0x08172608, 0xC23F2FE3, 0x88D79154,
+0x05954F26, 0xF34F6E20, 0x03F7280A, 0xC3A17D87, 0x7A6BA5E7, 0x1F0D0A3B, 0x51136AB6, 0xD9B2722E,
+0x05377EA5, 0xE1EAFC0D, 0x748DBAEA, 0xF421E029, 0x8A79E3D7, 0x169F1ABC, 0x297BA3F4, 0x4DE2C9F9,
+0xF26A7C62, 0xAA72F10C, 0x635A98A2, 0xE29307F9, 0x14A137E1, 0x4B7A53C3, 0x6C5513F1, 0x219BD164,
+0x009C4082, 0xE26A23EC, 0x245A6F84, 0x5D013BA8, 0xCD7134F8, 0x22EA4BDA, 0x5D6EA8F9, 0x84448F54,
+0x4A263DE5, 0x6661A488, 0x4F585610, 0x7E815049, 0x0252EE43, 0x96EB2F7F, 0xC1CF9925, 0x5013D339,
+0xD351E544, 0x7F9995AD, 0xC95E68B3, 0x2589535B, 0xE0E90BCB, 0x0FD1292B, 0x21614F15, 0xCE2C66AB,
+0x79E6D068, 0xD907B70A, 0x0EEB80DD, 0x02134470, 0x7DC1B1EF, 0xC7789D0E, 0xFBEA0D76, 0x729FAED4,
+0x5D5ADC08, 0xC2F0979E, 0x60DC37FA, 0x057A0063, 0x945886B9, 0x1DFBB5AE, 0xBB9A0AD1, 0xCD04042B,
+0x0F986F6B, 0x60ECD7E0, 0x43DD2A67, 0x5A80466E, 0x3E0B6C12, 0xF0D5275F, 0xB385A3C6, 0xC1026F56,
+0xD53D6729, 0x8CCE3852, 0xEF5CB0FB, 0x79AE5AB0, 0xB0E8570A, 0x7811C886, 0xDA088C1E, 0xAF912BA6,
+0x1F2E6520, 0x2A93F6F7, 0x119F0C70, 0xC6E43696, 0x7C34D9CA, 0xE91FEF4A, 0x69F6CD0A, 0xB5C2C7DC,
+0x44012340, 0x5F815E67, 0x5556F1B0, 0x22802717, 0x7E3C8FB3, 0xB512E164, 0x4EC4C87B, 0xC84E5253,
+0x2832096D, 0xFCBA95C9, 0x385C9E29, 0xF32C536F, 0xAA5DF133, 0xE5A9B35F, 0xCE2E6727, 0x89CF019E,
+0xACC9CF7D, 0x2EB59C03, 0x33D864BF, 0x37BC5DD9, 0x62D6222D, 0x340B0093, 0x49676CBA, 0x24950BBD,
+0x5BE97CB4, 0x00F006FC, 0x7170955E, 0xB5280BA4, 0x6BFF8D08, 0xE3D81E5A, 0xDE092581, 0x0BCCE9AB,
+0xF09FA063, 0xAF611958, 0xE9134BD4, 0xC19B8F1C, 0xBBB6DA69, 0x3E9D01F1, 0x473C622F, 0x07A63E39,
+0x906292DC, 0x8C727E71, 0x19EEB6AF, 0xB32BA513, 0x372B1554, 0x012CC084, 0xF9882078, 0x5A3D9F40,
+0xDB5C4BA8, 0xA7F83449, 0x07E642AC, 0x5F1A0ECE, 0x466A0905, 0x92C49E80, 0x8C7FDFF9, 0x4E50566C,
+0x42705C28, 0x34921D04, 0x0380A22D, 0x9F716BD3, 0x73DBC8E1, 0xA67639D9, 0x5E686D24, 0xDA941DEB,
+0xC71DCE6D, 0xF7D4EA69, 0x92D65624, 0xFFE80A60, 0x1BD39A7C, 0x3413F0B7, 0x92B05503, 0x0FC8CE5D,
+0xA5C3B8C7, 0xDC56B0BC, 0x017134E3, 0xF60CDC76, 0x4BB86B85, 0xDD7FFAAF, 0x3705DC82, 0x157D35D1,
+0xA27EF733, 0x605BA514, 0xEE9A2C38, 0x5EDAEEDA, 0xC3B0253E, 0xB492993A, 0xA53E8659, 0xBB8F1375,
+0x4D167001, 0xCF5A0708, 0x5CAFD681, 0xE744FD82, 0x4721B11D, 0xC8CB7FF7, 0x40EF8F81, 0xAD5AF0A1,
+0xF5A0FC03, 0x7F61F47A, 0x23480C92, 0x72F7B947, 0xBE3BBECD, 0x4AC285A5, 0x89431E52, 0x876546B9,
+0xE4EA95EB, 0x7822A4D1, 0xE9A8DD17, 0x6F20B954, 0xFA20B16B, 0xD783FE50, 0x20104BC6, 0xFAEDCB6C,
+0xD63F10D7, 0xD04AD668, 0xAE52E858, 0xA642ACFA, 0x923A09A3, 0x04399B61, 0x939D9CB2, 0x83CF35EA,
+0xD6CFA06C, 0x4D01F359, 0x1A6483B5, 0xDA98C901, 0x64D8A7C6, 0xA497E15D, 0x38B30FF9, 0x4A8854FE,
+0x2637F383, 0xFFCEEF0B, 0xD3E9219F, 0x372A26C9, 0x9E522AC3, 0x00D0A111, 0x01010000, 0xBD42009E,
+0xB8D17F12, 0x1A23EFD0, 0x072BAF44, 0x594FA219, 0x16DE61AC, 0xA9CD3DE0, 0x9B35EED4, 0x645F40AC,
+0xBDB5FC03, 0x26DB3C75, 0x0978A2C1, 0x9E142B62, 0xA67810B4, 0xD70A5885, 0xFB1E4A7E, 0x76DC0679,
+0x43E5E39D, 0x193E50F7, 0xBDF2F884, 0x23931D87, 0x6CC6B714, 0x1C748445, 0xBA83349C, 0xA3EFE636,
+0x7C52DB6A, 0xE1BAA25E, 0x2260D9EF, 0x2AAFC2C9, 0xA13CFBCB, 0xBDE5D443, 0xB8835CE8, 0xA7111D9D,
+0x042C9A3E, 0xF4F60BA7, 0xC464CE30, 0xF2D54661, 0x90DF35DD, 0x0B165601, 0xDD6A86A4, 0xF39EE5B4,
+0x43319AA2, 0x580FBA13, 0x8BC6E348, 0xA85AB427, 0xBA9C8A63, 0xB267F539, 0xAC2D5671, 0xA0E7F304,
+0xD46C79B2, 0x3EC63FE0, 0x826CEFE4, 0xA60B698A, 0x7C96466A, 0x91EAA31C, 0x41A05A73, 0x5CAAE993,
+0x46173BFD, 0x0E88876D, 0xA8D25903, 0x001F4F73, 0xEFEC8F23, 0xFB02EC4F, 0x26DC4DF5, 0xEB5BFECF,
+0xA62F7889, 0x515B40CA, 0xEC68261F, 0xACBA0052, 0xB21A9672, 0xCF874BB1, 0x91757816, 0xDE7665C1,
+0x1FFEEABB, 0xE5E43496, 0x122E83C2, 0xE6017836, 0xBE46C87E, 0x7152AF86, 0x1814DF47, 0xA0663FA6,
+0x620BB72B, 0x51681A2B, 0x8227939E, 0x4D6E8D33, 0xDE2B5450, 0x429A34E4, 0x47312B27, 0xD8A801F9,
+0x7D495192, 0x5CA8E5B3, 0x1C054BDA, 0x77962266, 0x958D55A3, 0x75EEEEAC, 0xC6A6060E, 0x3BF59A02,
+0xAB7B287D, 0xD576B5A4, 0x7B61A350, 0x738BA208, 0xB0D82B6D, 0xC0B65D2D, 0x62D3398B, 0x5EA26798,
+0x3446A269, 0xE59BC7FC, 0xF8D78875, 0x0385359F, 0x2FC644BE, 0x7697F182, 0x325A2A25, 0x0B4DC22C,
+0x24563E66, 0xB4E28B04, 0xEB7E9079, 0xCD325EF5, 0xD54AEB97, 0x54134221, 0xC324651B, 0x50119095,
+0xB3797079, 0xFF265E08, 0x36B3F7AD, 0xE3216E71, 0xA243AF42, 0xDC907677, 0xC1D4AC1F, 0x38D9E607,
+0x6EFD6D0A, 0x0DF3EF76, 0x2EDE4182, 0x9376F360, 0x44D93CC4, 0x29A10B2B, 0x398B8D39, 0x9A109C78,
+0xE8D24F66, 0x3CE6970D, 0x65DC63A6, 0xB0047EF7, 0x9F38FB9D, 0xCD584065, 0x30094D74, 0xF1E20C60,
+0xB9F61DFC, 0x9AE75BBA, 0x9C8D84D7, 0xA84CF312, 0x043B7E74, 0x9565D0D8, 0x8E52ED39, 0x3546EEBE,
+0xC7F19591, 0x054B8D1F, 0xCFFC1128, 0x168334B2, 0xA9E70A27, 0x5B28071B, 0x4EE73DE6, 0x1BCE5D74,
+0x6CC4C414, 0x55F571E8, 0xC94B69B4, 0x086AD68D, 0x2C88F736, 0xE047A864, 0x59346171, 0xFBEAEAF7,
+0x1DAAE6C0, 0x9AD4857E, 0xAB828123, 0x203D8A39, 0x0180A6F3, 0xEE7A96B2, 0x6B089922, 0xD214171D,
+0xF827F444, 0xC08659C9, 0x816FC57B, 0x6F361E16, 0x33144E8D, 0x596DF863, 0x104C5C18, 0xEFAB215E,
+0xC36AD39A, 0xBCDB609E, 0x2AB0FA25, 0xD55582C6, 0xBB586775, 0x49365A00, 0x93A76968, 0xEBD08A8C,
+0xC6DF4995, 0x4376AE89, 0x4FC6D746, 0xD82EE550, 0x8C72D45D, 0x65254DE6, 0x9C354995, 0x1380AAC7,
+0x392422C3, 0xD16210F1, 0x16BC1853, 0xB0070709, 0xFD9C9623, 0x61C7AAE9, 0x6C4E3BC2, 0xD8D7973F,
+0xD5C9A81B, 0xA5C97643, 0x8AAA1CC8, 0x1B4338EF, 0xF2F32005, 0x0D793F61, 0x4D0813C7, 0x2171F1F2,
+0xCFF44398, 0x5996C57B, 0xF6F5D0D2, 0xBC5C1C9B, 0x7288260D, 0x9497F123, 0x8AE2F3AB, 0xDE67C9DE,
+0x95D5AB66, 0xAA47C58A, 0x4B3CA4D0, 0xAB275FEA, 0xC1C6DAED, 0xFC5A6489, 0x49E513A0, 0x5F867ABE,
+0x3B566DEC, 0xFF153297, 0x91204318, 0x7DA90B61, 0xFD65CAF9, 0x69A55E14, 0x56830FC5, 0x64F2F93A,
+0xA869E944, 0xD3F9A696, 0xBE112D89, 0x13606E54, 0xF9B1A18D, 0x45429B08, 0x1C5643E9, 0x00C34EC6,
+0x81059303, 0xE260A907, 0x87B381D8, 0xA175B492, 0xE42FB84A, 0x0E647BEB, 0xA2F942FE, 0x245F9A24,
+0x62B6672F, 0x5E90B89B, 0xE575E8C3, 0xB80A0F9E, 0xA21BE632, 0x8412E03A, 0xCB41E037, 0xFE94E554,
+0xCA94A84E, 0x97B060EC, 0x3D85CE42, 0x67D8B0CE, 0x95A2D40A, 0x17D7174D, 0xE4AF3917, 0x2B84E255,
+0x0A385FCE, 0xA16041C4, 0x542764FA, 0xA7A49E2E, 0xED8B8709, 0xB0859F8B, 0x3BA5EE27, 0x4372AA7F,
+0xCEE1A6AD, 0x79A1D393, 0xED37D453, 0x29B3216E, 0x91ED4717, 0x5010358C, 0x733759A1, 0x39739E05,
+0x4E268BD7, 0xB08CC4A5, 0x8945C0FB, 0xB3FC4A73, 0xCEA1CC04, 0xE35BD5BB, 0x7FE5EB53, 0x3547B232,
+0x3D69EE87, 0x37FAD9C6, 0x52C32930, 0xBE397BF7, 0x4A44D674, 0x60A83134, 0x2AF6DC3A, 0x96D92898,
+0x9FD773CC, 0x35DD4EFE, 0xD4A33C7E, 0x9F7A309D, 0x2AE18A7A, 0x7122ED7F, 0xD798FC21, 0x01F3CE20,
+0x7FE4F60C, 0xA7EBB23A, 0x2F03C083, 0xF64FCF50, 0x2899100E, 0x07CDC851, 0x1ACED13C, 0x1FCFA416,
+0xE4293673, 0x4FF4AF6B, 0xF7765CA5, 0xE96F264D, 0xB71E747A, 0xB24F19DF, 0x80F6C834, 0x1335F04A,
+0x201F921F, 0xE18A3DA9, 0x4DDBA0E4, 0x7AA3C7EB, 0x659F583E, 0x9E35268F, 0x4E715893, 0x31BE3EEE,
+0xC3E4FA70, 0xAA97C24D, 0x766D358A, 0xADF83665, 0xC6A55E2F, 0xBD19598B, 0x2899AB1E, 0x03DA0AE8,
+0x6789ABE3, 0xE791AFED, 0xA3EA7C20, 0xE6163341, 0xE0A87B0C, 0xC692A25B, 0x4B31CBAB, 0x4F992967,
+0xE0F01943, 0x72E4CBF1, 0x8BDC60B2, 0xC21F0E46, 0xE6997497, 0xA9C7530D, 0xD68DAD03, 0x7DA25954,
+0x3E6CF4C8, 0xACF59C05, 0xD60D7622, 0xC8E4FC2A, 0xBA199EFB, 0xBE6E9C23, 0x4CAC87ED, 0x95086A94,
+0xD49C9041, 0x4CBC068C, 0x0163E450, 0x4B0CE596, 0x903B831F, 0xF751271C, 0x644C688A, 0xA092FC4D,
+0x3A1912D9, 0xD33E2FFA, 0x0D96C36A, 0x1EE8CF2D, 0x10968598, 0x22F6E6EA, 0xE71785C4, 0xAEF4DE7A,
+0x4F3438AB, 0x7B0A0E5F, 0xD22ECBDB, 0xBFC6ACA4, 0x88B12D7D, 0x040E63E7, 0x6380F77D, 0xB267146C,
+0xA99071C3, 0xF6C957A5, 0xE7DB8141, 0xF5761158, 0xFF5EF9CE, 0x4DE07434, 0x25AE516B, 0x090D3DB8,
+0x44A48520, 0x709E4DFA, 0xBCA52C2C, 0x239F52B8, 0xA87A1F74, 0xB9FE3E0A, 0xF0E335F5, 0x7B3F9512,
+0x3C1D03BD, 0xB2076AD5, 0x5A60F1E8, 0xE78F89EA, 0x236E171C, 0xBC4F4668, 0x2B201E1B, 0xCCFD8BCC,
+0xF433006C, 0x6E54A546, 0xD1610B0C, 0x4FB0ECF3, 0x000ACE93, 0x9290FC03, 0xC05FA3F2, 0x80643199,
+0x7E41AA7D, 0xA1B08E0A, 0x984839A7, 0x6FD9FFA2, 0xDCA39B68, 0x441DC627, 0x66702694, 0xEBC2CBE9,
+0x417F4E1E, 0x27A18C90, 0x41632EB1, 0xCB56FFCE, 0x04FF8D20, 0x71769D83, 0xCD2675F9, 0x0FBE23B4,
+0x0F7E3C23, 0x178817E9, 0x5D428EC5, 0x09C17EE6, 0x9742949B, 0x47999B65, 0x8FE94A42, 0xF4313B52,
+0x4693543B, 0x3A9488F2, 0x67931CF8, 0x16063B57, 0x4FBC4CE2, 0x17D19DC4, 0xFB05031E, 0xDAB983E6,
+0x779C107D, 0x3790463C, 0x29D26FCB, 0x46265313, 0x9DC84160, 0x6A27BE2E, 0x8E9C2100, 0x560A2352,
+0xC3BA80BB, 0xEED1DE65, 0xBD6057EA, 0xD630AEB8, 0x11B3E767, 0x22535313, 0xDD6EC195, 0xB83200EC,
+0x20F4B7E9, 0x34893591, 0xD14B5327, 0x641CF7E0, 0x80A8918E, 0xC94E4741, 0x9FCEDB9D, 0x81DEEFC7,
+0xB58D6BA6, 0x3D7A0904, 0xA21BC417, 0xB7C7B826, 0xD3904FC5, 0xB642D8A1, 0xDB7D7795, 0x630040AE,
+0x8CE006CE, 0x0446536E, 0x45479017, 0xB1B2E651, 0x1AAE135F, 0x98957DE8, 0x1A874A76, 0x1A53B5BB,
+0xEEF90BEF, 0x13DC9C9E, 0x99BFDA76, 0xB3FCE54F, 0x95E2AAF0, 0x8FB32473, 0x20810E17, 0x13CC066C,
+0x800BFD16, 0x4E4906C0, 0x0DECAC6A, 0x6E71616A, 0x94FB02CD, 0x62902A79, 0x12BE21EB, 0x2E206D9D,
+0x26EC450C, 0x4A424767, 0xE1FBD0F4, 0xFC676E87, 0x65052509, 0x17BF8ACD, 0x7ED6BCE2, 0xE6C4013C,
+0x36E63512, 0x63963727, 0x434F946D, 0x9B09808E, 0xF6554C6C, 0xC9D9A04F, 0xCFAC65A7, 0x0C4C5A04,
+0x2300F6EE, 0x43ABD82B, 0x38A67108, 0xA72497B4, 0xF94F371E, 0xBA352496, 0x357FB315, 0xDCB3E6F3,
+0x1B775D75, 0x6668D9CC, 0xC7C1FF9D, 0xB3D80995, 0x7352310D, 0x82A638C9, 0x21F0F26E, 0xBE4ECA3D,
+0xD709ED33, 0xA0BBDC06, 0x00506BA5, 0x01010000, 0xBF42009E, 0xA6B57F12, 0x2A214B0E, 0x0ED729B3,
+0x57EFB846, 0xE33EDE63, 0x99F34449, 0x3E9D6E73, 0xD46ACCED, 0xF39F30AB, 0xB162A087, 0xFE78C0B4,
+0xFF92CC86, 0x487A8747, 0xB48D4C57, 0x3DE4FB28, 0xBBD81455, 0x4D600187, 0x62029A32, 0x516A01D3,
+0x503CFA91, 0x8B1B05CC, 0x408B740C, 0x44C14D03, 0x3A4B1CEC, 0x9DC94DA6, 0x51DC2AC3, 0x542BA668,
+0xF6C91015, 0x19F27C18, 0x938015CA, 0xE468F311, 0x45F58D47, 0xAAB7D392, 0x698A24AD, 0xBB81500B,
+0xE3940491, 0x38C98F88, 0xB071942D, 0x7E403EFA, 0x3FEE9D0D, 0x2EA5D192, 0x006E6200, 0x77B502F1,
+0x2DD6C1B9, 0x07E7E177, 0x53C8A981, 0xA2467F9E, 0xFEC2CB1F, 0x5177326E, 0x69E3BCDD, 0x2D7F9575,
+0xA425578C, 0xEF9B071F, 0x26FEF2CE, 0x0FC2A44D, 0xBF627526, 0x9803817B, 0x8464D0D6, 0xE94E2129,
+0x59627100, 0xAFB677DB, 0x5ED206BD, 0x27C696DE, 0x44286A96, 0x63CB0A14, 0x9D2ABD14, 0x342380D3,
+0xB6FC3DE9, 0xC049D4F5, 0xAD661524, 0xBE0C83D0, 0x853E22AA, 0xE27D6E95, 0x5964C77B, 0x2206B310,
+0x94067021, 0xE9372C3D, 0x6C4F059C, 0x9BF7E5E9, 0x1D56908A, 0xA93253B7, 0xC3A21AB8, 0x0ECF90CE,
+0x6C55FB81, 0xF3B90FA0, 0x958FA487, 0xEFCF4A68, 0x5FA14CF1, 0x55D1E992, 0x9E19E299, 0x10DC1250,
+0x4CE1A567, 0x1001677A, 0x5E83E6D6, 0xBE0A6A82, 0xEC4D1E45, 0x630E4BBD, 0x76AE08BD, 0xC7BEE1E2,
+0x2B27169A, 0xAED9576B, 0xB678159F, 0xF91A4496, 0x0138F889, 0xDACCB783, 0xA59B9DD7, 0x7DFB640A,
+0xF83D720F, 0xA57E59E8, 0x723DEA0A, 0x1296236B, 0xD4E5BE67, 0x4B54D41C, 0x5107C882, 0xF8B625E4,
+0x669C7B6D, 0x1F5E9EB0, 0x3203A6E1, 0x4D7A7629, 0x6899A694, 0x676F4347, 0xF9BDF612, 0xB6061E78,
+0x1FC39F31, 0xE0BEB46B, 0x19AF0F93, 0xAD5A8AF0, 0xACE6EB2E, 0xC465350E, 0xC253AD32, 0x23BC1927,
+0x6480EAFC, 0x3E905AA2, 0xDD14D4A9, 0xACB3D657, 0xECBE822B, 0xFBEF6D96, 0x6E7C6661, 0xF1ECF0B2,
+0x1C73F4E4, 0x10CAC98C, 0x3912FEC3, 0x4712B1CD, 0x05AB6AEF, 0xAE0B11C5, 0x169F430A, 0x84B8DBF7,
+0x81E7D89A, 0xED33F91A, 0x6A0EC194, 0x5FDD85A8, 0x2D4CAA76, 0xF9DA759A, 0x20C022DC, 0x1D3F53DB,
+0x3840AA7D, 0xF74182A1, 0x4E0DAFD5, 0x7ACE7C89, 0x983BF202, 0x3E2845E9, 0x3B09EF9A, 0x299B83DB,
+0x630B30AE, 0xC2720043, 0x49628378, 0x947F5BC7, 0x0A85D399, 0x035BE045, 0x5FF030D8, 0x042080F4,
+0x7E693819, 0xC1C9B11D, 0xDBC84AE0, 0xF138E166, 0xF3CACE6C, 0x46FEE5B2, 0xCC9D84F7, 0x0A34405E,
+0xA986927F, 0xA6EA1CC8, 0x02AA1ED2, 0x2DBF76E7, 0x95CE1FDA, 0xBCBF01F1, 0xF9D43A0A, 0x507B064F,
+0x3FE494B0, 0x9F8480A0, 0x3C78FB22, 0xE7EC9B7B, 0x607DE4F3, 0x80063204, 0x7831BF42, 0xB6A4287B,
+0x05F18542, 0x732AD1C1, 0x39BB0AD6, 0x697FD19C, 0x2C440B1D, 0x21EF2BC2, 0x76D3A5FB, 0x50F19B9A,
+0x1D813783, 0x7B4B3507, 0x99D7CA2C, 0x4CE3B0C6, 0x51C29374, 0x8810F724, 0x25075F84, 0x1141AA11,
+0x0B96305E, 0x96CC1A43, 0xAA3BD9D1, 0x57F1BBC0, 0xE42FBA47, 0xB83FBFD2, 0x547386D8, 0x49B889A1,
+0x918269E4, 0x99A189C0, 0xDFDFCCCB, 0xBFF218FD, 0xDE6DAA99, 0x47A9334E, 0x8FAB5309, 0x41345F92,
+0x165EBF62, 0xA308C2A5, 0xCB76484E, 0x9F694FD3, 0x0DA80072, 0x0C3C791E, 0x4CA69A95, 0xF87C0C63,
+0xB55FB43D, 0x5578AEA8, 0x132CBA62, 0xB179147B, 0x10423097, 0xFAC31005, 0x1D62500F, 0x385BC860,
+0x9EC8AA8A, 0x91DAFB05, 0xAD3212E5, 0xDE470301, 0x4B30A9FF, 0xFB379494, 0x92DBDF00, 0x80EBAAA0,
+0x521457B3, 0xFD4F22D0, 0xE81B46F2, 0xECE0384F, 0x5A4B24BF, 0xEB4B450E, 0x2FD82669, 0xDF830DF0,
+0xA50297F3, 0x41B0F41B, 0xF65EE18F, 0xEE81BCED, 0x155EBB1D, 0x6457733A, 0xE681DF6F, 0xA44AC844,
+0x73D67A73, 0x6292568F, 0xE50781E5, 0x0549CF41, 0x9AC57706, 0x5D4BA46D, 0xE5156595, 0x79A150DF,
+0x1210194E, 0xE3608A5A, 0xA0A77B4C, 0x3097FF41, 0xC05B8717, 0xFAC23BA2, 0xCD936B77, 0x7D21AEC7,
+0x54680A1B, 0xE3626587, 0xBBF87978, 0x13D5CC30, 0x4AB200D1, 0xC9DBBEE9, 0xD66D38EF, 0xBFF57C07,
+0x8E99580E, 0x8F00E0AE, 0xF5B2C28F, 0x448D77D0, 0x46A22336, 0x3097ACF1, 0x46461EED, 0xD27FB007,
+0xBE8F4440, 0x14AA5842, 0x829FA04F, 0xE51DB91F, 0xB675D799, 0xE7A05240, 0x7242C83D, 0x8CDE70A2,
+0x92B29354, 0x9B07D932, 0xE52FDA43, 0x0EF4FA6D, 0x3B7D56D6, 0x80778775, 0xEE68217B, 0xC23DAEB3,
+0x9CC36A9A, 0x29612097, 0x16B28724, 0x94568065, 0x52E5F1EC, 0x11FD21E3, 0xB25EF446, 0x80F3C66D,
+0xF74549B2, 0x3CDC07FF, 0xDBD36FD4, 0x4F340179, 0xC51AA14C, 0x0EBD2578, 0x66ED34E4, 0x52358633,
+0x9CE507F4, 0x6804DAC1, 0x2B9E5D56, 0x4C5FB644, 0xA669A3FA, 0x96A05828, 0x1A06C20A, 0x4CDB62A1,
+0x10D39222, 0x1F8311F8, 0x52FACC3F, 0xC1EA085A, 0x1FAF84EB, 0x82B6BDE7, 0x28B35197, 0xA22CF7B9,
+0x9516AEFB, 0x66C429E7, 0xC6ECB372, 0xE035825D, 0x8AAFDEA4, 0xD2B3DB40, 0xBB794624, 0x514C5EB7,
+0x9EC39D88, 0x89412CA7, 0x86AAA703, 0x53FFB7C1, 0x1A1768FF, 0x3E7946B8, 0x7A44765C, 0xF5E71575,
+0xBFBEA9F2, 0x2FA2AFE8, 0xD5BF3B14, 0x03BB8255, 0x093071EA, 0x878084FC, 0x7E0F0EA5, 0x9758B5D3,
+0x5F7E441F, 0x33E2A418, 0x34B87A11, 0x6CEE8F73, 0x02B51287, 0xF1EF2623, 0xFAF6A993, 0x60FB3E94,
+0xC7AD4D48, 0x926365B0, 0xFB509BA5, 0xF4134EF1, 0x455A1AAE, 0xFD88930C, 0x0C03AA96, 0x213C4671,
+0xB5294F12, 0x55B4D343, 0xC651BB95, 0xDDE5E3DF, 0xDFA88633, 0xF2050EBF, 0xEB3762C5, 0x3C1B1618,
+0x13CD45CB, 0x1FC421A3, 0x311D57AA, 0x00009CE0, 0x9A210100, 0x3FC64200, 0x7BE3FB82, 0x0C4435BA,
+0x20E30814, 0xABDD582C, 0xB56CD0A9, 0xDF962904, 0x0EEBEB55, 0xEB6196C0, 0xD794FD03, 0x8C583F8F,
+0x164FED0E, 0x9013BDF8, 0xCEDDFBE2, 0x4872104F, 0x4B5CC91A, 0xC935EB20, 0xCC9139FF, 0xF52C725D,
+0x3FFD8E1C, 0xA15CD87D, 0xFD703C4B, 0xECAE38D9, 0x7728CB8D, 0x3B76ED63, 0x99214661, 0xFD4746A3,
+0x29858D4D, 0xEBBB2013, 0x2BCA92D2, 0xE9699CE2, 0xAC5B9E66, 0xC2CCB165, 0xA836A824, 0xD03299DE,
+0xB2822987, 0x69506C54, 0x1B6AACDE, 0x3468DB47, 0x3B154058, 0x868D3843, 0xB90880A3, 0x313B1F9E,
+0x0B3FEE2B, 0xC9FEFBF7, 0x93A493CD, 0xDADB8F12, 0x18B5F0EF, 0x9EA698C5, 0x87CCAED4, 0x48B0392A,
+0xA7E3D338, 0x6A82A926, 0x1CB0A84A, 0x3ECD2C29, 0x421E52C4, 0x856849B4, 0xF4D0802F, 0xBAA8112D,
+0x9018193A, 0x6A6E3483, 0xB154F2A6, 0xBBE97444, 0x2B5CD183, 0x78061519, 0xF7B955D9, 0x76BA708F,
+0x490B5ACD, 0xA944AFF0, 0x47A5236A, 0x2D6D92FB, 0x68E43A90, 0x87504272, 0x06E37BEA, 0x02B22D5A,
+0x74348319, 0x785A432C, 0xE70082E9, 0x450DA411, 0x544486CD, 0xF132186F, 0x0D400279, 0x3256142E,
+0x6656BDF3, 0xE5438E2C, 0xEDD67523, 0x1C6C2FA8, 0xADC3B1C6, 0x25FF44A8, 0x383ECACE, 0xFA3097FA,
+0xC30F9470, 0x71D6B607, 0xAB8AFA72, 0xE4FD4194, 0xAD2DBC53, 0x08681D11, 0x093AB59C, 0xBD53FB7F,
+0x586A76DF, 0xAD8B14ED, 0xD1EC6D4B, 0x641D5099, 0x05650EB1, 0xB61B8061, 0x6AB4A527, 0x1148F7B9,
+0xD88A9E64, 0xA1FF3EFF, 0xF88B2E44, 0x7CC3BEEE, 0x016800EF, 0xBA0BDB3B, 0xDEE81860, 0x07E228A9,
+0xE854B31E, 0xE1E77125, 0x7F36AB90, 0xC193C70A, 0x1A4A50ED, 0x20DDA748, 0xE3FF3DF3, 0x071DA7EA,
+0xEE6132C1, 0x0D7D7274, 0xC0C13D2A, 0x9E82A472, 0xA5605477, 0xEE05E922, 0x239D1CD4, 0x94B9A491,
+0xFA6F9C7A, 0x8EC43E25, 0x0DF34DDB, 0x0861277F, 0xAAA4C02D, 0x7679FFFB, 0x7D616510, 0x80CF882D,
+0x02673585, 0xB0E150FB, 0x69AFC064, 0xE6B8C2C1, 0xD2C3E4DD, 0x5D824853, 0x5E5763D9, 0xC2EFD40F,
+0x8B94F033, 0x42CE3537, 0x804EC871, 0xCA4C5BBC, 0xF321DE00, 0xE57D6710, 0xB7CDF885, 0x732DE2E9,
+0xE264DFAC, 0x0351E9D0, 0xCD806BB3, 0xC635C03A, 0x14B78BA4, 0x9C20C3CB, 0xFB006E63, 0x4F1FE3DA,
+0x3A026A1A, 0xCF0B0A0E, 0x402AF326, 0x74773A34, 0x7B4E2198, 0x84E5A798, 0xA5F36833, 0x68299EE3,
+0x73D2F89E, 0x7D767FB1, 0xD0A71E44, 0xD2190FEC, 0xA9A3C17F, 0x878A1AE1, 0xF307D9F0, 0xEE821D38,
+0x907E48F1, 0x7E047843, 0x6D43E25C, 0x9EEB4A00, 0x6829EE20, 0x3B065331, 0xCFED99DF, 0x00DFD204,
+0xF4AF4269, 0xA36B37DD, 0xBC39BBE7, 0x289E0AFA, 0x35311E34, 0xFB1DF8C1, 0x854463B6, 0x533F36D4,
+0x206DCD22, 0xAC28E1C6, 0x486C0915, 0xD2560425, 0x4C63E017, 0x1568AD7B, 0xD39FB487, 0xB2F70A6C,
+0x61039EBB, 0xC071F8EB, 0xB5C13626, 0x704D6E93, 0x82CF8122, 0xFC2B7FAE, 0xB19E0AD8, 0x8A2C0484,
+0xA06C722D, 0x597A2D07, 0x710E6563, 0x1EE69D98, 0x1E95E938, 0x6BA4A147, 0xBE87B0CA, 0xC3EE95D3,
+0x9A01DB87, 0x7ECA4529, 0xD9A768E0, 0xD13EEB37, 0xC2965326, 0xA8035807, 0xC963B6DB, 0xEF6D3F29,
+0x9D028333, 0x31C117F7, 0x0A89F4B0, 0x117F2BFD, 0xB459C248, 0xECFC6BE8, 0x6EA03832, 0x51C97C5C,
+0xCE85718D, 0xC1C8B860, 0xA9266223, 0x5EA39F4F, 0xB1F4636A, 0x103AC4B4, 0x19D5553B, 0x0B6C857D,
+0x408BABCB, 0xF233D262, 0x48D2FB41, 0x8053B8E5, 0xDA26FF84, 0xF24E0883, 0xA566D4DA, 0xEDCC0818,
+0x6CCF5D38, 0x0DF5D1A6, 0xF1281A63, 0xF7773AE8, 0x9ECD31F1, 0xF5481498, 0x5D2DDC15, 0xE8CEDEF5,
+0xF978002A, 0xD6E4CF43, 0xD39BD831, 0xDB0B5429, 0x2B8629FF, 0xA319D1F2, 0xB81DB640, 0xE9FA4AC1,
+0x1555DAFA, 0x6218246C, 0xCE5F1FA9, 0x52FC2937, 0xF3236D2D, 0x7EF25CEC, 0x752EAD4F, 0xFC25A711,
+0x2C8E67E1, 0x1D027BD8, 0xFA5A1A16, 0x24BA4563, 0x5AFA91E9, 0xA4901387, 0x34B6BA43, 0x89A33499,
+0xED6AB45A, 0x3F71BB0C, 0x3E537E31, 0xAF66F444, 0xD53943BC, 0x6123A505, 0x495BCD67, 0x64DDAC2E,
+0x2C669CEA, 0x2DEFC6A0, 0xC55B8E46, 0xEA1BB3FB, 0x5AED7993, 0x1DCE3C3A, 0x68B7E4F0, 0xB7818BDC,
+0x287C22C6, 0x64B1794B, 0x7C73364B, 0x7DA6B487, 0x216CBDB8, 0x18A19619, 0x25663427, 0x3B1B4306,
+0xF4B7E60B, 0x139DE313, 0xA32ECABD, 0x2A13F6BC, 0xE59371B5, 0xBE173A57, 0x89CE9BF1, 0x42C793DD,
+0xF65E2965, 0xA0996EF0, 0xC1A37DC7, 0x02E3AA81, 0xDAC20082, 0x2CC98E6D, 0xAFACDCDB, 0x9CE7937B,
+0x44A6FAC6, 0xEF9D2E21, 0xEF8E4483, 0xE44E5ADF, 0x21F5A516, 0x17994721, 0xBF14A2FF, 0xC08BD69E,
+0xC5210C54, 0x216ABD6D, 0xAAFCECE7, 0xBADDD962, 0x454B8D0E, 0xC8034B4D, 0xB12B4758, 0xB04A78C0,
+0x8176253F, 0x49FEAC6E, 0xB194BA5A, 0x19973EB2, 0x8315BDDA, 0x55D90423, 0x19C475C0, 0xD635371A,
+0x10A00B67, 0x97871E6E, 0x3062B6D4, 0x6949698D, 0x290C73E9, 0x76226637, 0x8A21639A, 0xB4DA7D09,
+0x8F2CD6F1, 0x7F3146C2, 0x1989818A, 0xFA50A006, 0xB0504BCC, 0x8163799E, 0xB1A485FC, 0x4E9DB932,
+0x5378B466, 0x1C1FB93A, 0xF2D65654, 0xC31C0EC0, 0x4DE2EFEC, 0x277E72C2, 0xF5CD34CC, 0x7FB0CFF7,
+0x7674E8D1, 0x5CA8C4DD, 0x7BE7E231, 0x14E83D5C, 0xA93FF01A, 0x6DF16D22, 0xC972F005, 0xE1D4A797,
+0xE53B83E5, 0x4653B5C2, 0x15AB8502, 0xE879049E, 0x454881B3, 0x6EC231BC, 0xA303ED11, 0x2C91E006,
+0x6AA4B19A, 0x2B5F0A46, 0x0901477A, 0xDA32AF39, 0xBA9AC352, 0xCDA047F9, 0x233D62DD, 0x31908F20,
+0xC885CC78, 0xA35A9452, 0xCDDD29A9, 0x2B49E85A, 0x6D597174, 0xDD9A1807, 0xE2C3FC3E, 0x48E7099B,
+0x75A91251, 0xC0EF9E00, 0xA716D50E, 0x2E27E94F, 0x7AFBABCE, 0x1D14A585, 0x7CE58CED, 0xBD6A24CB,
+0xBACEA203, 0xBC7455F8, 0xD21EFD5A, 0x24B05307, 0x533BD728, 0xA9DFE1E8, 0xD0FD22F8, 0x85B42268,
+0xBBB3E76A, 0xDFE27A93, 0x35E85E5D, 0x95F9AD86, 0xDE8AC022, 0x6DE26684, 0x531D9429, 0x34DDC0D4,
+0xA2D210CA, 0x261752D1, 0xD0223802, 0x2C050BFC, 0x8356CBAB, 0xC2EDB0D3, 0x88680225, 0x802EFA6B,
+0x1A516D66, 0x01BC3B94, 0x9FE5C152, 0xC10D8394, 0x3627E14E, 0x6022C3E3, 0x58B6EB12, 0xF9D1F2B7,
+0x66E37806, 0xB2A1F271, 0xDDD4FD53, 0x9D7B6812, 0x14298F5B, 0x02D2D2D0, 0x1829DEED, 0x0F0229B3,
+0x793684E2, 0xF97E7DE0, 0x40F6CBD9, 0xF3B5EBAF, 0xBDA2D3A6, 0xF9AA2CF5, 0x4724BE3C, 0x419D9D45,
+0x4E15EF0C, 0xC0B43459, 0xD5A75963, 0x93079C39, 0x8E79BD10, 0x5960A695, 0x9BC8F390, 0x51552888,
+0x7B68AACE, 0xD559D9BF, 0x3A67EE99, 0xFB589D4D, 0x35065C1F, 0x5F767A30, 0x5F30F863, 0x75073964,
+0xDFCB16F2, 0xC897427C, 0xFBF2E558, 0xD1827A10, 0x55251BB8, 0x611AE619, 0x504BD1E3, 0x84DA557D,
+0xC78E967F, 0x856AEA49, 0xB0C2579D, 0xFD154B4C, 0x4549EA73, 0x44B0599F, 0x7027B499, 0x8364EF8F,
+0xAFD45D06, 0x3A94790E, 0x72826504, 0xE33C8C7A, 0x50FEA071, 0xF89E4BAF, 0x4399CA36, 0x916A1FCC,
+0x3C3CF481, 0x2071FA7E, 0xBC419D5A, 0xD0ADA476, 0x0DED1F2D, 0xC093BFE2, 0x6BE75AF3, 0x4A367213,
+0x892DE859, 0x94664B5C, 0x4394D84F, 0xBAD74FD2, 0x14D2D276, 0xD1184B1E, 0x2B4E3E30, 0xCB75C6FA,
+0xB6224352, 0x216D7036, 0x6B848D1C, 0xAAB6C9DE, 0x08962385, 0xCE32FBCE, 0xC370AEB0, 0xDD424AEE,
+0x00A9CD64, 0xBBF65D50, 0x373D8CC2, 0x5BDFB4BD, 0xC87DDA36, 0x505C58AE, 0x6A6A26DE, 0x81819FA0,
+0x10D6B6D1, 0xFB58495C, 0x2D8F0C0C, 0xDE38C72D, 0xD80BB10F, 0x65C55DE9, 0xF0E59BA6, 0x563FB6E0,
+0x3F81B5AC, 0xF1526134, 0xBCE44291, 0x86D7C771, 0xD2A5D0D5, 0x010EFBA4, 0x3E5D6091, 0x51D36BA1,
+0x9862C0FA, 0x24B19C4A, 0x711980BA, 0x152F1A45, 0x9132B765, 0xDB7E8D8E, 0x2C89A97E, 0xA2D8CE89,
+0xB23312CC, 0x74D5E8C6, 0x8FB88C58, 0x46052163, 0x67DC2A03, 0x4C5752CF, 0xC5E1ABB1, 0xAD360301,
+0x1AFEB701, 0x160D5462, 0x1D52670D, 0x12245F38, 0xDA944006, 0x3620A0E7, 0x2D64EA32, 0x40FFC943,
+0x6AC6EAE0, 0xCB4A0F71, 0x7023DFD7, 0x674755E3, 0xFA9B3A39, 0xABD83953, 0xE4AFDAD2, 0x7A2E1818,
+0x12B87300, 0x548B3E4F, 0xDC8347F8, 0xD721BBE3, 0xD608EE30, 0xCA08BF57, 0x0973FA54, 0x20625192,
+0xD69DA5A3, 0xCF328C67, 0x68E3333F, 0x3EF34E8F, 0x3233C9F3, 0x60DCA3D1, 0x2C8608C5, 0xDAAC9DA2,
+0x88B7FFC9, 0x6F870A44, 0xEDF2DBF5, 0xAFF89FA4, 0x7F9B3F8E, 0x79DBC1A5, 0xB11A7D2F, 0xED823E81,
+0x4D0DE311, 0x32165B73, 0x3185193D, 0x6F1DA0B1, 0xE2E36DF2, 0x531FC918, 0xB7D3E640, 0x82DD4DA8,
+0x4BBBB3E1, 0x66E211A5, 0x6B5AA255, 0x9D4DCF00, 0xE4F8ED7F, 0xF9AB0B67, 0x00C6107C, 0xB6AD2817,
+0x3189AB6E, 0x779A4271, 0x68A39A7D, 0x2AB3E8F9, 0x616A4812, 0xE3414B1E, 0xD74FB039, 0x9491DC6F,
+0xC0220643, 0x6E1241AB, 0xE342A140, 0xAE79DB73, 0x11F102DE, 0x155E899E, 0x3851844D, 0x50586DF9,
+0xDD78B51A, 0x42C2BDBE, 0xDEB2C6D9, 0x3C4A1025, 0xD1D561F4, 0x9EFC4272, 0x03E7C683, 0x1D72F2B3,
+0x95E5BCAB, 0x6DF6443A, 0x35FE34A6, 0x5D714241, 0x8C4D0E83, 0x8659353A, 0x90D03735, 0x2EA59C95,
+0xD282B933, 0xDA0ABCE6, 0xED6408E6, 0x4C3B75A2, 0x3E3650FD, 0xA1282DC1, 0x86CBAD3D, 0x21BE6430,
+0xFE40EF09, 0xB7F4DAA2, 0x975DB637, 0x294D7E5F, 0xBE59760B, 0xCE93D571, 0xA0F8417C, 0xAF6C201A,
+0x4463C8E5, 0x527686B1, 0xC3B99802, 0xF3F9142A, 0xB7F748D0, 0xAD13BDCB, 0xC8068424, 0xB543EAF5,
+0x17F4053D, 0x3F70FC61, 0x0B4BFC58, 0x9B498B4C, 0xB1473923, 0x11A127C0, 0x69231E3E, 0x4CFF0389,
+0xEB514DDB, 0x56CE1507, 0xAD3A707E, 0x49D9C5B5, 0xA5F2F5F1, 0xFE132CE9, 0x275B2E3B, 0xFB55D04C,
+0xB25C40B7, 0x7320AFF8, 0xAD6BD078, 0x51749770, 0x838DE227, 0x2BFD68C8, 0xD9742917, 0xECD529B0,
+0x7330F1BB, 0x044BCD50, 0x34002800, 0x45F56633, 0xD6F45C51, 0x9811BFBC, 0x7CE131CA, 0xAE78624F,
+0xCD9CE7E2, 0x430B2F1F, 0x4C12841E, 0x9D306756, 0x49D84F77, 0x3E7135CF, 0x757A71B3, 0x248379F6,
+0x5601FF44, 0x75F9AA87, 0x262D7E94, 0x15C74C31, 0x39555A26, 0x8ACC05EA, 0x5937CB61, 0x43E8794E,
+0xA56F3663, 0x7244F073, 0x53AF6F88, 0xB88E3C9A, 0x60ABF476, 0xFDEE5EC8, 0xAC021F2E, 0xA414002F,
+0x6879D377, 0x3309E4C7, 0x5B2384C9, 0x59E2CA49, 0x97E2B7FB, 0xEF31CF2F, 0x642AE213, 0xC634B581,
+0xDEE6748B, 0x709CF3B4, 0xAAD3FB4B, 0x9D3A8629, 0xF8F0CC3B, 0x72D1FAA9, 0xB77F52A9, 0xE39A5B02,
+0x2BEC3D63, 0x10B6389F, 0xCA7A9BD0, 0x35FAF2C0, 0xB7C3C733, 0x15ED561B, 0x55509F8A, 0xE0CF7B91,
+0x0EF29CED, 0x4ACCDAA5, 0x1D4A52DB, 0xFFDA58D6, 0x470311C9, 0x37BA101E, 0xDE024905, 0xFB30C951,
+0x2A511A26, 0xE9BCC081, 0x4CD1B447, 0x8FE3A732, 0x1B2032E6, 0xC5BE085B, 0xC00EF437, 0x9DF68BC7,
+0xB61AC8AE, 0x78D5FE59, 0x62CA48C4, 0xE8941352, 0xB0829FBD, 0xEA5C0D90, 0x209E2628, 0x1EC279EB,
+0x270B6C20, 0x0CD3AF40, 0x2FAD8C66, 0x03DC9B83, 0x7F8761D7, 0x142FFE9C, 0x1D1467B0, 0x3B2B69EA,
+0xC0F6C2AA, 0xC9B09DC0, 0x004AA3B9, 0xEED6B3F0, 0xC362423D, 0xDC36CB8A, 0xD833B620, 0xB9DE1D56,
+0x4639E76E, 0x05E221B4, 0x80823978, 0xCE963957, 0x3613C300, 0x13849F9D, 0xFD4E954E, 0x3D818793,
+0x0E97EED6, 0x2F7C2048, 0x52947E3B, 0x624B9A1F, 0x7D04F7FE, 0xFA32046A, 0xEDADBB3C, 0xCF529927,
+0x0487A748, 0xE7902B8F, 0x174B0A64, 0x899C159E, 0xCCB4FC98, 0x0641B02C, 0xDE6A55B3, 0xF2877E38,
+0xBBEFE80D, 0x384D5B29, 0x6DC4A65C, 0xDF904A85, 0xCA2C5888, 0x50C9C467, 0xF99BB6C5, 0x832B50B0,
+0xD705B894, 0x86A1B9DE, 0xD515DC85, 0x688D5B33, 0xEB1874A2, 0xC5E27B9A, 0xEC78F21E, 0x83490EFD,
+0xEBD71A86, 0x4E78AEF3, 0xF2D486B8, 0xDD8322DB, 0xCC5031F8, 0x75F14316, 0x26BF3CAE, 0x5C625D9F,
+0x7E348836, 0x5B5FE136, 0x5C89D6FB, 0x2B8D0DDC, 0x51CB27A8, 0x6A74CD81, 0x74FD61AE, 0xF32E2FB8,
+0xA3195DD9, 0x252BC47F, 0x4BDCCCD4, 0xF0A9A50B, 0xCD2537DC, 0x4AD79FC6, 0xB4899743, 0xF7F2C50A,
+0x4F383EAA, 0x4F7ED293, 0xE70E9E98, 0xEEED18F9, 0xEA82ECA9, 0x6B05A579, 0x2CC1F902, 0x07AFE992,
+0x96421B60, 0x0CB7E82E, 0x5FE158B4, 0x9F81AECF, 0x79526BE0, 0xA3727254, 0x3DF0BCA2, 0x9EA58C57,
+0x6E0F0299, 0xC03A18EC, 0xCAF9168F, 0x9019CE5C, 0xB57BA3DF, 0x87BA00A6, 0xB8D3FE1B, 0xF6E8BB15,
+0xB5A6C0EE, 0x0B6ECB40, 0x39D0662D, 0xF8948BB9, 0x2E3CD644, 0x7EE43848, 0xC8CC6C75, 0x6B901C88,
+0xA5E0C700, 0x3659FB92, 0xE3BF6175, 0x0CB748CF, 0xC87EB109, 0xB6D5337A, 0x4C5DC129, 0xB2BA441B,
+0xE5CE5C32, 0xA1C7F97C, 0x7723C3F8, 0x440C1141, 0x29E5AF6D, 0xB6EEF8A5, 0x9448740D, 0xA966E661,
+0xBBCA4C9A, 0x3E864FBD, 0x3E7CB4C0, 0x715F75C6, 0x5C8AC7CA, 0x708BF387, 0x32721B54, 0x329CD0CB,
+0x6C465EDE, 0xFC9DE417, 0xE0832980, 0xEFA51935, 0xB5CFC055, 0xF1824471, 0x81CE7BCE, 0xEC3BA071,
+0x41C0A2F0, 0x5092319D, 0x1B427BB8, 0xCC1637F0, 0xF2E13472, 0xED13FDEB, 0xF596E581, 0x669887EC,
+0x9D17CEA0, 0x40F17D4F, 0x01000000, 0x44009E01, 0xD17F12C3, 0x224B5DB8, 0x0F3720CC, 0xAD153DCA,
+0x12065748, 0x05639F70, 0xD64971A9, 0x8E01DDA9, 0x2E544143, 0x547B8C52, 0xEA8AE911, 0x1353388E,
+0x967CF517, 0x202E68AD, 0xA90BC43C, 0xB40A0CA9, 0xE2C7C34A, 0x21B1A9D6, 0x054F1362, 0xBA9A7827,
+0x2B3C1761, 0x81762FB7, 0x7FBC7B8B, 0x3EFB8FB9, 0xC4DA42D5, 0x4F51E9E8, 0xBA833851, 0xBA8BAEB9,
+0x00AADDBD, 0xA0D4B53E, 0xC6E23B86, 0x760B9B6E, 0x8B595215, 0x26CAFB50, 0xD0A8B6D6, 0x6D45F0C7,
+0x9400DCAD, 0x2DA5FE12, 0x1B38E167, 0xCAB696E0, 0x06B36A95, 0x72270B88, 0x0C0394A8, 0x0D9D676A,
+0xF50A39C0, 0xE878D58D, 0xAC015FD2, 0xCF793727, 0x095BF000, 0x4D9ED5A1, 0x83ACBE78, 0x586AF1FC,
+0xB81ECFC5, 0x02C33908, 0x72419F9D, 0x204AE6EF, 0x42096FA7, 0x2CE7C790, 0xBAC1FE32, 0x41060304,
+0x816B73E1, 0xE783D6AA, 0xA3D60EF8, 0x0D730AE9, 0x10604F72, 0x8AA6DB5E, 0xF9CC74BF, 0x972AAD85,
+0x86F058E8, 0xFD104D49, 0xC18262C7, 0x94BF4813, 0x5ED31B40, 0x4C0BD37E, 0x35BF2B11, 0x1AEA8513,
+0xAC67E277, 0x646D1EE6, 0xA888DD14, 0x3BA3E96B, 0xEE510213, 0x7A8B9272, 0x57243766, 0xF328F614,
+0xC5DC75D0, 0x363696D9, 0xFE3A3B18, 0x6CA70E9F, 0xBAC1C6C9, 0xC3CA3447, 0x98791C11, 0x01F398C3,
+0x45830B62, 0x9731F6B7, 0x44D9E0A3, 0x60109502, 0x952B3430, 0x7475C504, 0x4AE869CB, 0x5942966B,
+0x1D46E75E, 0x16F4B9E3, 0xCD0776AD, 0xC2548289, 0xCA8E3A72, 0xEBD19BFD, 0xB971FBAC, 0x153BFADD,
+0x49CB2F07, 0xAAA1DB85, 0x8E191A68, 0x5B65EE4C, 0xFF0BB67D, 0x304F57AB, 0xE28B03F9, 0xB3B9339F,
+0x4F66ADEF, 0xBF3EF854, 0x4B5359DF, 0xCAA644BE, 0x7BF29422, 0x51472CC6, 0xC29347F2, 0xA74AC2F3,
+0x148D4136, 0x2404DC3A, 0x8D32ECE2, 0xEF4FC3AD, 0x8C45BCB6, 0x25960D26, 0x809B7D6B, 0x606F6B37,
+0x2FA130FF, 0x667B372E, 0xC0A1F8FB, 0x5E4C24A3, 0x63DCD5E5, 0x3BAFA168, 0x7E6A894E, 0x5248C0B3,
+0x799BF80F, 0x455D0D9E, 0x1AEAAE60, 0x3AF9BEF1, 0x9DC4214A, 0x6E27B6A2, 0x91862717, 0x6BAA649C,
+0x3E5E50D0, 0xEC0263E7, 0x07220E5D, 0xD31FEBFF, 0x4A21846E, 0xDC3C4306, 0x74A2E0DF, 0x5644D751,
+0xC0EF1391, 0x5791315D, 0xB61433AA, 0xBB15C5D1, 0x2CD3C344, 0xD6CDE6AF, 0x7DDE27E3, 0xF268F784,
+0x22700BDC, 0xADA72BC2, 0x260EC089, 0x89448497, 0xF90F0D47, 0xCD50517C, 0xE1B8EA60, 0x6DC9332D,
+0x045C37C7, 0x90033D2F, 0xC10C74E3, 0xB240DD5C, 0x893F1021, 0xE6DE05A3, 0x387BFBD2, 0x59F743B5,
+0xEFFDCFBD, 0x6E3887F6, 0xBA2870E6, 0x822465AA, 0xF7916EB4, 0xEE408D22, 0x26FBE8A2, 0x38FAB921,
+0x3DE83B84, 0x05E0398C, 0x87BAAF71, 0xEFB9D79E, 0xC29F739A, 0x6C2E215E, 0x23954D74, 0x12B9994B,
+0x633A51AE, 0x2DD9469A, 0x6C2BC7B6, 0x23FC26B9, 0x3D1C44C1, 0xCF619685, 0xDF1D39E8, 0x1D97C9FA,
+0xD0D20D1D, 0x8AB1C78B, 0xC987A075, 0x764AAC40, 0xDEAC8AED, 0x97B690A0, 0x8B021303, 0xBA5C9370,
+0xC46BA5A7, 0x7D21D986, 0x6B013734, 0x1409E7EA, 0xDE80D0CA, 0x4709E1DA, 0xB17BF694, 0x79F5D943,
+0x929B9397, 0xB1710A7A, 0xF56F560F, 0xA8F00A42, 0x7DAF07C5, 0x4EC04145, 0xE940E603, 0xD09FF311,
+0x2C0E1FE0, 0x6AF7174C, 0x00C4F954, 0x2EC022CB, 0xDF33555B, 0x7B0A1B95, 0x946F6669, 0xBA4C1F4F,
+0xCC25030B, 0xB188A2CC, 0x77332231, 0xB2C6C8C5, 0x657CD06B, 0xEEBF7F30, 0x1BAC737B, 0x85530FCD,
+0x0533F1E7, 0xD24F683A, 0x7BE7E5F3, 0x813AB5F6, 0x49A698EA, 0x94EBD113, 0x362D8D3D, 0x0777E3E4,
+0xBC4F2706, 0x0A42ED47, 0xC507C1DA, 0xE38435FF, 0x492E60D8, 0x8881F27F, 0xC2606A12, 0x23CF008A,
+0x1CE33948, 0xBE749C78, 0x7C49D6E2, 0xFAE89F62, 0x01BE773A, 0x5B412C95, 0x35ABACB2, 0xD0164815,
+0x1AC6B77E, 0x2EFC0DF0, 0xFD9FE696, 0xF6F3021B, 0x00801F9E, 0x01010000, 0xC544009E, 0xB9D17F12,
+0x845895FD, 0x78D00D38, 0x68E0B8E8, 0xC1FA9101, 0xD9705629, 0x25567A93, 0x1D94FE30, 0x05719709,
+0x7FCAF756, 0x24D1ED71, 0xB7122459, 0x5736507F, 0xCF4D42F6, 0xEA9EC64C, 0x8EEFB94B, 0xEE2B17D9,
+0x1A186AB2, 0x5539BE3D, 0x02106F3F, 0x2D34EBD5, 0xF5CC8609, 0xBAB2DF21, 0xD4F5D7F3, 0x51C18548,
+0xC1943D7F, 0xEF01A193, 0x7386E3E5, 0x3F562C7B, 0xDF9ADC99, 0x315F19BA, 0xB4BC0622, 0xCEC7C1AB,
+0x33E0AE4A, 0x7E11DF07, 0xA9D56584, 0xA85C7809, 0x394131F4, 0xA25AF126, 0x6BA833CB, 0x46227BCD,
+0x9D0F1E85, 0x2228CD37, 0x1EE02F1E, 0x7F6955C9, 0xD9A2682F, 0x2AD67F72, 0x2BD7BD44, 0x7C8A3BA7,
+0x069CD884, 0x0A8F701E, 0x1DA9F2B7, 0x968A0C13, 0x27B8BAA6, 0x90B41EFF, 0x3388AF6A, 0xF3C456F1,
+0xAF7926EB, 0x41D3FE9B, 0x909CD075, 0x54A8CC17, 0x343E97F9, 0xD5506B46, 0x6F93B0D2, 0x0D0D674D,
+0xFFDF5FBF, 0x72E3511B, 0xB3E4FDE7, 0x89E99489, 0xA26CA3A0, 0x330ECE53, 0x3A3C111E, 0x8FB26FC1,
+0x91A9C93A, 0x78BC9228, 0xDD31441A, 0x0B530C82, 0xDACA56BB, 0xE79E40A8, 0x89229991, 0x71424567,
+0x33B49129, 0xC742A6DC, 0x7DCF5950, 0x65C95844, 0x18B37026, 0x830A9C51, 0xF31A1653, 0x670F1358,
+0x66A2424F, 0x3CBE55F3, 0xAEED0006, 0x22E792C8, 0xE2B41262, 0x73E8C30A, 0x4D8471CA, 0xE783800B,
+0x3FC3B976, 0xD9BE280F, 0x9C63A1AD, 0x61F6054C, 0x74B8505C, 0xA0B89403, 0xF6687C55, 0x73027347,
+0x76CAB0A0, 0xC393F363, 0xFA8DE502, 0xCE887ADC, 0x7EBEFBE3, 0x08ECF28B, 0x8546E227, 0xB4348036,
+0x6B23E33A, 0x1D220BA9, 0x5486717F, 0x97B08F7C, 0xD9D4372B, 0xA91F3E86, 0xD282B661, 0x3F293568,
+0xB15C5DDF, 0x6DB91962, 0x3E914D3E, 0x7FEB162C, 0xA4EDE143, 0xA1B65BE5, 0x60276922, 0x2068C261,
+0x1EDA6602, 0x5AC7333E, 0xBF388F07, 0xAB215695, 0x0909C826, 0x30290873, 0xD77CE62D, 0xF3ED6D8C,
+0xF5AEB6DB, 0x97ECCFFC, 0x0ED3FA19, 0xA72E15B4, 0x6E5A8A4E, 0x0C723164, 0x971359A0, 0x841D2260,
+0x862D14C9, 0xA2DB52B6, 0x3A353DFC, 0xC4CA669B, 0x53B2DED7, 0x56C9D7F6, 0x9445548E, 0x98061A26,
+0xC7F629B5, 0xB7BFFAAD, 0xFD78EEF4, 0x50553006, 0xAB8E11A4, 0xE28FCDFF, 0x766EEEE4, 0x59CD27DF,
+0x8A18EDC4, 0x9EDA78D8, 0xDBE7878F, 0x3B247B97, 0xB20F9039, 0xCDE0F99F, 0x3B0A2220, 0x1EE895CB,
+0x99A8D3E7, 0xEE0F0E7E, 0x5F460462, 0xB947B2EB, 0xB444E57D, 0x06410519, 0x4E49B779, 0xC80801C4,
+0xA5D5A75E, 0x1E2B42C9, 0x5B74BF42, 0xC43B27DF, 0x462A90C0, 0xC9BAEAF9, 0x7A13EEFA, 0x356BD93E,
+0xC2D093E3, 0x27E82A2D, 0xC6D84066, 0x3AB85D92, 0xA980C82E, 0xD8DCD61A, 0xA349787E, 0x10D1CE49,
+0xB05C062D, 0x1E9A6FB1, 0xEA29A9DC, 0xF13E1ED5, 0xFC3CDDFA, 0xE53DB35C, 0xF5BF5040, 0xE9D21B26,
+0xEF4FD684, 0x7EAD03A5, 0xD57E1FB1, 0x22F31869, 0xDB84ACB8, 0x8CF50A44, 0x451FB297, 0xFCFA954B,
+0x52513109, 0x07ACAFF1, 0x281A3024, 0x5C82B3CD, 0x9455E05E, 0x91615912, 0x50D96A20, 0xA48B3A89,
+0x892E2AD7, 0x2CAE0F46, 0x9FBB73DE, 0x60C8129F, 0x6D522730, 0xB5B6D663, 0x6AC0AA06, 0x82C3F277,
+0xB9981F3C, 0x85B5FB0B, 0x184FBBA2, 0xDF55E4AF, 0x0304D708, 0xD0FDB30E, 0x0040EBAE, 0x000A0100,
diff --git a/board/rda/common/include/hal_ap_config.h b/board/rda/common/include/hal_ap_config.h
new file mode 100644
index 0000000000..8452471975
--- /dev/null
+++ b/board/rda/common/include/hal_ap_config.h
@@ -0,0 +1,178 @@
+/*
+* devices.c - RDA platform devices
+*
+* Copyright (C) 2013 RDA Microelectronics Inc.
+*
+* This program is free software; you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 2 of the License, or
+* (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with this program; if not, write to the Free Software
+* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+*
+*/
+
+#ifndef _HAL_AP_AP_CONFIG_H_
+#define _HAL_AP_AP_CONFIG_H_
+
+#define CHIP_AP_STD_UART_QTY 3
+#define CHIP_AP_STD_SPI_QTY 3
+
+#define CHIP_AP_GOUDA_MAGIC_NUM 0x12345678
+#define CHIP_AP_LCD_MAGIC_NUM 0x81234567
+#define CHIP_AP_USB_MAGIC_NUM 0x78123456
+#define CHIP_AP_BT_MAGIC_NUM 0x67812345
+#define CHIP_AP_CAM_MAGIC_NUM 0x56781234
+#define CHIP_AP_LED_MAGIC_NUM 0x45678123
+#define CHIP_AP_MMC_MAGIC_NUM 0x34567812
+#define CHIP_AP_EARPHONE_MAGIC_NUM 0x23456781
+#define CHIP_AP_LOUDSPK_MAGIC_NUM 0x12345678
+
+/* Synced with iomap @ap side */
+#define CHIP_AP_SHARED_MEMORY_SIZE 0x00010000
+#define CHIP_AP_SHARED_MEMORY_BASE 0x00100000
+
+/* **********************************************************
+* gouda cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* goudaResetPin
+*
+*************************************************************/
+struct HAL_AP_GOUDA_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* lcd cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* lcdResetPin
+*
+*************************************************************/
+struct HAL_AP_LCD_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* usb cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* usbResetPin
+*
+*************************************************************/
+struct HAL_AP_USB_T
+{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* bt cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* btResetPin
+*
+*************************************************************/
+struct HAL_AP_BT_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* cam cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* camResetPin
+*
+*************************************************************/
+struct HAL_AP_CAM_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* led cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* ledResetPin
+*
+*************************************************************/
+struct HAL_AP_LED_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* mmc cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* mmcResetPin
+*
+*************************************************************/
+struct HAL_AP_MMC_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* earphone cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* earphoneResetPin
+*
+*************************************************************/
+struct HAL_AP_EARPHONE_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* loudspk cofig
+*
+* bankId GPIO_A ,GPIO_B,GPIO_D??
+* loudSpkResetPin
+*
+*************************************************************/
+struct HAL_AP_LOUDSPK_T{
+ int magic;
+ enum gpio_id reset_pin;
+};
+
+/* **********************************************************
+* configure gpio used by ap
+*
+*
+*************************************************************/
+struct HAL_AP_CFG_CONFIG_T{
+ struct HAL_AP_GOUDA_T gouda_cfg;
+ struct HAL_AP_LCD_T lcd_cfg;
+ struct HAL_AP_USB_T usb_cfg;
+ struct HAL_AP_BT_T bt_cfg;
+ struct HAL_AP_CAM_T cam_cfg;
+ struct HAL_AP_LED_T led_cfg;
+ struct HAL_AP_MMC_T mmc_cfg;
+ struct HAL_AP_LOUDSPK_T loudspk_cfg;
+ struct HAL_AP_EARPHONE_T earphone_cfg;
+
+ int noConnectGpio_A;
+ int usedGpio_A;
+ int usedGpo_A;
+ int noConnectGpio_B;
+ int usedGpio_B;
+ int noConnectGpio_D;
+ int usedGpio_D;
+};
+
+
+#endif // _HAL_AP_AP_CONFIG_H_
+
diff --git a/board/rda/common/include/hal_ap_gpio.h b/board/rda/common/include/hal_ap_gpio.h
new file mode 100644
index 0000000000..32e6317a9a
--- /dev/null
+++ b/board/rda/common/include/hal_ap_gpio.h
@@ -0,0 +1,111 @@
+#ifndef __MACH_GPIO_ID_H__
+#define __MACH_GPIO_ID_H__
+
+enum gpio_id {
+ GPIO_NONE = -1,
+ GPIO_A0 = 0,
+ GPIO_A1,
+ GPIO_A2,
+ GPIO_A3,
+ GPIO_A4,
+ GPIO_A5,
+ GPIO_A6,
+ GPIO_A7,
+ GPIO_A8,
+ GPIO_A9,
+ GPIO_A10,
+ GPIO_A11,
+ GPIO_A12,
+ GPIO_A13,
+ GPIO_A14,
+ GPIO_A15,
+ GPIO_A16,
+ GPIO_A17,
+ GPIO_A18,
+ GPIO_A19,
+ GPIO_A20,
+ GPIO_A21,
+ GPIO_A22,
+ GPIO_A23,
+ GPIO_A24,
+ GPIO_A25,
+ GPIO_A26,
+ GPIO_A27,
+ GPIO_A28,
+ GPIO_A29,
+ GPIO_A30,
+ GPIO_A31,
+ GPIO_B0 = 32,
+ GPIO_B1,
+ GPIO_B2,
+ GPIO_B3,
+ GPIO_B4,
+ GPIO_B5,
+ GPIO_B6,
+ GPIO_B7,
+ GPIO_B8,
+ GPIO_B9,
+ GPIO_B10,
+ GPIO_B11,
+ GPIO_B12,
+ GPIO_B13,
+ GPIO_B14,
+ GPIO_B15,
+ GPIO_B16,
+ GPIO_B17,
+ GPIO_B18,
+ GPIO_B19,
+ GPIO_B20,
+ GPIO_B21,
+ GPIO_B22,
+ GPIO_B23,
+ GPIO_B24,
+ GPIO_B25,
+ GPIO_B26,
+ GPIO_B27,
+ GPIO_B28,
+ GPIO_B29,
+ GPIO_B30,
+ GPIO_B31,
+ GPIO_D0 = 64,
+ GPIO_D1,
+ GPIO_D2,
+ GPIO_D3,
+ GPIO_D4,
+ GPIO_D5,
+ GPIO_D6,
+ GPIO_D7,
+ GPIO_D8,
+ GPIO_D9,
+ GPIO_D10,
+ GPIO_D11,
+ GPIO_D12,
+ GPIO_D13,
+ GPIO_D14,
+ GPIO_D15,
+ GPIO_D16,
+ GPIO_D17,
+ GPIO_D18,
+ GPIO_D19,
+ GPIO_D20,
+ GPIO_D21,
+ GPIO_D22,
+ GPIO_D23,
+ GPIO_D24,
+ GPIO_D25,
+ GPIO_D26,
+ GPIO_D27,
+ GPIO_D28,
+ GPIO_D29,
+ GPIO_D30,
+ GPIO_D31,
+ GPO_0 = 96,
+ GPO_1,
+ GPO_2,
+ GPO_3,
+ GPO_4,
+ GPIO_MAX_NUM
+};
+
+#endif
+
diff --git a/board/rda/common/include/hal_camera.h b/board/rda/common/include/hal_camera.h
new file mode 100644
index 0000000000..dd50c60092
--- /dev/null
+++ b/board/rda/common/include/hal_camera.h
@@ -0,0 +1,360 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2012-2020,RDA, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _HAL_CAMERA_H_
+#define _HAL_CAMERA_H_
+
+#include "asm/arch/cs_types.h"
+#include "hal_gpio.h"
+// =============================================================================
+// HAL_CAMERA_IRQ_CAUSE_T
+// -----------------------------------------------------------------------------
+/// Describes the camera interrupt cause.
+// =============================================================================
+typedef struct
+{
+ /// An overflow occured.
+ UINT8 overflow:1;
+
+ /// Frame start interrupt cause.
+ UINT8 fstart:1;
+
+ /// Frame end interrupt cause.
+ UINT8 fend:1;
+
+ /// DMA done interrupt cause.
+ UINT8 dma:1;
+} HAL_CAMERA_IRQ_CAUSE_T;
+
+
+// =============================================================================
+// HAL_CAMERA_ENDIANESS_T
+// -----------------------------------------------------------------------------
+/// Camera endiannes. Defines the swapping operation done on any 32 bits of
+/// received data from the camera data flow, to get pixels in the proper order.
+// =============================================================================
+typedef enum
+{
+ /// No reordering.
+ NO_SWAP=0,
+
+ /// Bytes order is inverted.
+ BYTE_SWAP=1,
+
+ /// 16 bits data are swapped.
+ HALF_WORD_SWAP=2,
+
+ /// Bits are swapped.
+ BIT_SWAP=3
+} HAL_CAMERA_ENDIANESS_T;
+
+
+// =============================================================================
+// HAL_CAMERA_XFER_STATUS_T
+// -----------------------------------------------------------------------------
+/// Describes the status returned by the #hal_CameraStopXfer() function.
+// =============================================================================
+typedef enum
+{
+ /// The transfer finished properly, the whole image
+ /// has been received.
+ XFER_SUCCESS,
+
+ /// The transfer has not finished.
+ XFER_NOT_FINISHED,
+
+ /// The transfer finished, but an overflow occured.
+ /// There is probably a misconfiguration between
+ /// the number of pixels expected and the camera
+ /// resolution configuration.
+ XFER_FINISHED_WITH_OVERFLOW,
+
+ /// There was no IFC configured for a transfer.
+ /// #hal_CameraStopXfer() was called before
+ /// #hal_CameraStartXfer() ?
+ XFER_ERR_WRONG_PARAM
+} HAL_CAMERA_XFER_STATUS_T;
+
+// =============================================================================
+// HAL_CAMERA_ROW_RATIO_T
+// -----------------------------------------------------------------------------
+/// Describes the row pixel decimation ratio.
+// =============================================================================
+typedef enum
+{
+ /// Original size, decimation disabled, 1/1.
+ ROW_RATIO_1_1,
+
+ /// Row pixel decimation 1/2.
+ ROW_RATIO_1_2,
+
+ /// Row pixel decimation 1/3.
+ ROW_RATIO_1_3,
+
+ /// Row pixel decimation 1/4.
+ ROW_RATIO_1_4,
+} HAL_CAMERA_ROW_RATIO_T;
+
+
+// =============================================================================
+// HAL_CAMERA_COL_RATIO_T
+// -----------------------------------------------------------------------------
+/// Describes the column pixel decimation ratio.
+// =============================================================================
+typedef enum
+{
+ /// Original size, decimation disabled, 1/1.
+ COL_RATIO_1_1,
+
+ /// Column pixel decimation 1/2.
+ COL_RATIO_1_2,
+
+ /// Column pixel decimation 1/3.
+ COL_RATIO_1_3,
+
+ /// Column pixel decimation 1/4.
+ COL_RATIO_1_4,
+} HAL_CAMERA_COL_RATIO_T;
+
+#if (CHIP_HAS_ASYNC_TCU)
+
+typedef enum {
+ SPI_MODE_NO = 0, // parallel sensor in use
+ SPI_MODE_SLAVE , // SPI sensor as SPI slave
+ SPI_MODE_MASTER1, // SPI sensor as SPI master, 1 sdo output with SSN
+ SPI_MODE_MASTER2_1, // SPI sensor as SPI master, 1 sdo output without SSN
+ SPI_MODE_MASTER2_2, // SPI sensor as SPI master, 2 sdos output
+ SPI_MODE_MASTER2_4, // SPI sensor as SPI master, 4 sdos output
+ SPI_MODE_UNDEF,
+} HAL_CAMERA_SPI_MODE_E;
+
+typedef enum {
+ SPI_OUT_Y0_U0_Y1_V0 = 0,
+ SPI_OUT_Y0_V0_Y1_U0,
+ SPI_OUT_U0_Y0_V0_Y1,
+ SPI_OUT_U0_Y1_V0_Y0,
+ SPI_OUT_V0_Y1_U0_Y0,
+ SPI_OUT_V0_Y0_U0_Y1,
+ SPI_OUT_Y1_V0_Y0_U0,
+ SPI_OUT_Y1_U0_Y0_V0,
+} HAL_CAMERA_SPI_YUV_OUT_E;
+#endif // (CHIP_HAS_ASYNC_TCU)
+// =============================================================================
+// HAL_CAMERA_CFG_T
+// -----------------------------------------------------------------------------
+/// Camera configuration. This structure is used by #hal_CameraOpen() to
+/// configure how the chip and the camera sensors are connected, and which
+/// camera sensor to use in case there would be two.
+// =============================================================================
+typedef struct
+{
+ /// Reset line polarity. Active high if \c TRUE.
+ BOOL rstActiveH;
+ /// Power DOWN line polarity. Active high if \c TRUE.
+ BOOL pdnActiveH;
+ /// If \c TRUE, all even frame are skipped.
+ BOOL dropFrame;
+ // Enable window crop
+ BOOL cropEnable;
+ /// Clock divider to apply to produce the camera clock
+ /// from the 156 MHz clock.
+ UINT8 camClkDiv;
+ UINT8 reOrder;
+ BOOL vsync_inv;
+ /// Describes the swapping operation to apply to data
+ /// received from the camera sensor.
+ HAL_CAMERA_ENDIANESS_T endianess;
+ /// Id (0 or 1) of the camera to use.
+ UINT32 camId;
+ /// Row pixel decimation ratio
+ HAL_CAMERA_ROW_RATIO_T rowRatio;
+ /// Column pixel decimation ratio
+ HAL_CAMERA_COL_RATIO_T colRatio;
+ // start pixel of cropped window
+ UINT16 dstWinColStart;
+ // end pixel of cropped window
+ UINT16 dstWinColEnd;
+ // start line of cropped window
+ UINT16 dstWinRowStart;
+ // end line of cropped window
+ UINT16 dstWinRowEnd;
+#if (CHIP_HAS_ASYNC_TCU)
+ UINT16 spi_pixels_per_line;
+ UINT16 spi_pixels_per_column;
+ BOOL spi_href_inv;
+ BOOL spi_little_endian_en;
+ // ssn high enable, only for spi master mode 1
+ BOOL spi_ssn_high_en;
+ UINT16 spi_ctrl_clk_div;
+ HAL_CAMERA_SPI_MODE_E spi_mode;
+ HAL_CAMERA_SPI_YUV_OUT_E spi_yuv_out;
+#endif //CHIP_HAS_ASYNC_TCU
+
+ /// The remapped GPIO controlling PDN (HAL_GPIO_NONE if not remapped), for the rear sensor.
+ HAL_APO_ID_T camPdnRemap;
+ /// The remapped GPIO controlling RST (HAL_GPIO_NONE if not remapped), for the rear sensor.
+ HAL_APO_ID_T camRstRemap;
+ HAL_APO_ID_T cam1PdnRemap;
+ /// The remapped GPIO controlling RST (HAL_GPIO_NONE if not remapped), for the rear sensor.
+ HAL_APO_ID_T cam1RstRemap;
+ BOOL csi_mode;
+ UINT16 num_d_term_en;
+ UINT16 num_hs_settle;
+ UINT16 num_c_term_en;
+ UINT16 num_c_hs_settle;
+ u8 csi_cs;// 0 use csi1 . 1 use csi2
+ UINT16 frame_line_number;
+ u8 csi_lane_2v8;
+
+} HAL_CAMERA_CFG_T;
+
+
+
+// =============================================================================
+// HAL_CAMERA_IRQ_HANDLER_T
+// -----------------------------------------------------------------------------
+/// Type for the user function called when a camera interrupt occurs.
+// =============================================================================
+typedef VOID (*HAL_CAMERA_IRQ_HANDLER_T)(HAL_CAMERA_IRQ_CAUSE_T cause);
+
+// =============================================================================
+// hal_CameraOpen
+// -----------------------------------------------------------------------------
+/// Enable the Camera Control module and set the default configuration
+/// for the selected external camera module. It is both held in reset
+/// AND kept in power down.
+///
+/// In case of dual-sensor platform, the #camId field of the #camConfig
+/// parameter is to be used to select which sensor is to be enabled.
+///
+/// @param camConfig Camera configuration. (cf #HAL_CAMERA_CFG_T).
+// =============================================================================
+PUBLIC VOID hal_CameraOpen(HAL_CAMERA_CFG_T* camConfig);
+PUBLIC VOID hal_CameraPowerDownBoth(BOOL PowerDown);
+PUBLIC VOID hal_CameraClkOut(BOOL out);
+
+// =============================================================================
+// hal_CameraClose
+// -----------------------------------------------------------------------------
+/// Power off the camera sensor by setting the PowerDown bit.
+/// Resets the camera sensor by enabling the Camera Reset bit.
+/// This function can only be called after the camera transfer has been stopped
+/// by a call to #hal_CameraStopXfer().
+// =============================================================================
+PUBLIC VOID hal_CameraClose(VOID);
+
+
+// =============================================================================
+// hal_CameraReset
+// -----------------------------------------------------------------------------
+/// Controls the Reset line going to the sensor
+/// Uses the rstActiveH field of the configuration structure to know the polarity
+/// Should not be called before the open
+/// @param reset \c TRUE, the sensor is in reset
+/// \c FALSE, the sensor is out of reset
+// =============================================================================
+PUBLIC VOID hal_CameraReset(BOOL reset);
+
+
+// =============================================================================
+// hal_CameraPowerOn
+// -----------------------------------------------------------------------------
+/// Controls the PDN line going to the sensor
+/// Uses the pdnActiveH field of the configuration structure to know the polarity
+/// Should not be called before the open
+/// @param powerDown \c TRUE, the sensor is in Power Down
+/// \c FALSE, the sensor is out of Power Down
+// =============================================================================
+PUBLIC VOID hal_CameraPowerDown(BOOL powerDown);
+
+
+// =============================================================================
+// hal_CameraControllerEnable
+// -----------------------------------------------------------------------------
+/// Turns the Camera controller module On and Off
+/// Should not be called before the open
+/// @param enable \cTRUE, the Controller is active
+/// FALSE, the Controller is turned off
+// =============================================================================
+PUBLIC VOID hal_CameraControllerEnable(BOOL enable);
+
+
+// ============================================================================
+// hal_CameraIrqSetHandler
+// ----------------------------------------------------------------------------
+/// This function configures which user function will be called by the
+/// camera driver when an interruption is generated.
+///
+/// @param handler Pointer to a user function called when an interruption
+/// is generated by the camera driver.
+// ============================================================================
+PUBLIC VOID hal_CameraIrqSetHandler(HAL_CAMERA_IRQ_HANDLER_T handler);
+
+
+// =============================================================================
+// hal_CameraIrqConfig()
+// -----------------------------------------------------------------------------
+/// Configure the desired interrupts
+///
+/// @param mask Mask to enable specific interrupts. Valid interrupts are
+/// liste in HAL_CAMERA_IRQ_CAUSE_T.
+// =============================================================================
+PUBLIC VOID hal_CameraIrqSetMask(HAL_CAMERA_IRQ_CAUSE_T mask);
+
+
+// =============================================================================
+// hal_CameraStartXfer
+// -----------------------------------------------------------------------------
+/// This function begins the IFC transfer of the camera data. The camera
+/// itself is reset and the camera module internal fifo is cleared. The IFC
+/// transfer is then started.
+/// @param bufSize This is the size of the buffer in _bytes_
+/// @param buffer Pointer to the video buffer where the IFC will store the data.
+/// @return IFC channel number.
+// =============================================================================
+PUBLIC UINT8 hal_CameraStartXfer(UINT32 bufSize, UINT8* buffer);
+
+
+
+// =============================================================================
+// hal_CameraStopXfer()
+// -----------------------------------------------------------------------------
+/// Must be called at the end of the Frame Capture
+/// If an underflow occured and the IFC tranfer is not complete,
+/// this function will handle the channel release
+///
+/// @param stop If \c TRUE, stops the camera controller.
+/// @return 0 when the IC transfer was complete
+/// 1 when the IFC transfer was not complete and the channel had to be released
+// =============================================================================
+PUBLIC HAL_CAMERA_XFER_STATUS_T hal_CameraStopXfer(BOOL stop);
+
+
+// =============================================================================
+// hal_CameraSetupClockDivider
+// -----------------------------------------------------------------------------
+/// setup the divider of the camera module to generate the required frequency
+/// @param divider : the generated clock will be 156MHz/divider
+/// divider must be between 2 and 18
+// =============================================================================
+PUBLIC VOID hal_CameraSetupClockDivider(UINT8 divider);
+
+PUBLIC VOID hal_CameraSetLane(UINT8 lane);
+
+PUBLIC UINT32 hal_getCameraStatus(HAL_CAMERA_IRQ_CAUSE_T *cause);
+
+PUBLIC VOID hal_SetCameraClkOut(U16 value);
+
+#endif // _HAL_CAMERA_H_
+
+
diff --git a/board/rda/common/include/hal_config.h b/board/rda/common/include/hal_config.h
new file mode 100644
index 0000000000..0922453279
--- /dev/null
+++ b/board/rda/common/include/hal_config.h
@@ -0,0 +1,422 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2013, RDA Microeletronics. //
+// All Rights Reserved //
+// //
+// This source code is the property of RDA Microeletronics and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA Microeletronics. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/8810/include/hal_config.h $ //
+// $Author: huazeng $ //
+// $Date: 2013-07-30 19:19:13 +0800 (Tue, 30 Jul 2013) $ //
+// $Revision: 20765 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_config.h //
+/// That file describes the configuration structure used to set all
+/// configurable parameters in HAL. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _HAL_CONFIG_H_
+#define _HAL_CONFIG_H_
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// =============================================================================
+// HAL_LCD_MODE_T
+// -----------------------------------------------------------------------------
+/// The LCD interface modes.
+// =============================================================================
+typedef enum
+{
+ HAL_LCD_MODE_SPI,
+ HAL_LCD_MODE_PARALLEL_16BIT,
+ HAL_LCD_MODE_DSI,
+ HAL_LCD_MODE_RGB_16BIT,
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+ HAL_LCD_MODE_RGB_18BIT,
+#endif
+ HAL_LCD_MODE_RGB_24BIT,
+
+ HAL_LCD_MODE_QTY,
+} HAL_LCD_MODE_T;
+
+// =============================================================================
+// HAL_CAM_MODE_T
+// -----------------------------------------------------------------------------
+/// The camera interface modes.
+// =============================================================================
+typedef enum
+{
+ HAL_CAM_MODE_PARALLEL,
+ HAL_CAM_MODE_SPI,
+ HAL_CAM_MODE_CSI,
+
+ HAL_CAM_MODE_QTY,
+} HAL_CAM_MODE_T;
+
+// =============================================================================
+// HAL_CAM_CSI_ID_T
+// -----------------------------------------------------------------------------
+/// The camera CSI IDs.
+// =============================================================================
+typedef enum
+{
+ HAL_CAM_CSI_NONE,
+ HAL_CAM_CSI_1,
+ HAL_CAM_CSI_2,
+
+ HAL_CAM_CSI_ID_QTY,
+} HAL_CAM_CSI_ID_T;
+
+// =============================================================================
+// HAL_CFG_SDMMC_T
+// -----------------------------------------------------------------------------
+/// This structure describes the SDMMC configuration for a given target.
+// =============================================================================
+typedef struct
+{
+ /// The sdmmc is used.
+ BOOL sdmmcUsed :1;
+ /// The sdmmc2 is used.
+ BOOL sdmmc2Used :1;
+ /// The sdmmc3 is used.
+ BOOL sdmmc3Used :1;
+} HAL_CFG_SDMMC_T;
+
+// =============================================================================
+// HAL_CFG_CAM_T
+// -----------------------------------------------------------------------------
+/// This structure describes the camera configuration for a given target.
+/// The first field identify if camera is used.
+/// The second and third field is the RemapFlag which identify if camera PDN/RST
+/// need to be remapped to other GPIOs instead of default (GPIO_5 and GPIO_4),
+/// for the first camera sensor.
+/// The fourth and fifth field is the remapped pin when RemapFlag is set, for the
+/// first camera sensor.
+/// The sixth and seventh fields are used to describe which GPIOs are used for
+/// the PDN/RST lines of the optional second camera sensor. This second camera
+/// sensor can only be used on with GPIOs to control its PDN and RST lines.
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the rear camera is used
+ BOOL camUsed :1;
+ /// The polarity of the Power DowN line, for the rear sensor.
+ BOOL camPdnActiveH :1;
+ /// The polarity of the Reset line, for the rear sensor.
+ BOOL camRstActiveH :1;
+ /// The remapped GPIO controlling PDN (-1 if not remapped), for the rear sensor.
+ INT32 camPdnRemap;
+ /// The remapped GPIO controlling RST (-1 if not remapped), for the rear sensor.
+ INT32 camRstRemap;
+ /// The CSI ID (valid only if camera mode is CSI)
+ HAL_CAM_CSI_ID_T camCsiId;
+ /// \c TRUE if the front camera is used
+ BOOL cam1Used :1;
+ /// The polarity of the Power DowN line, for the front sensor.
+ BOOL cam1PdnActiveH :1;
+ /// The polarity of the Reset line, for the front sensor.
+ BOOL cam1RstActiveH :1;
+ /// The remapped GPIO controlling PDN (-1 if not remapped), for the front sensor.
+ INT32 cam1PdnRemap;
+ /// The remapped GPIO controlling RST (-1 if not remapped), for the front sensor.
+ INT32 cam1RstRemap;
+ /// The CSI ID (valid only if camera mode is CSI)
+ HAL_CAM_CSI_ID_T cam1CsiId;
+ /// The camera interface mode
+ HAL_CAM_MODE_T camMode;
+} HAL_CFG_CAM_T;
+
+// =============================================================================
+// HAL_CFG_PWM_T
+// -----------------------------------------------------------------------------
+/// This structure describes the PWM configuration for a given target.
+/// The fields tell wether the pin corresponding to PWM output
+/// is actually used as PWM output and not as something else (for
+/// instance as a GPIO).
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the PWL0 is used
+ BOOL pwl0Used :1;
+ /// \c TRUE if the PWL1 is used
+ BOOL pwl1Used :1;
+ /// \c TRUE if the PWT is used
+ BOOL pwtUsed :1;
+ /// \c TRUE if the LPG is used
+ BOOL lpgUsed :1;
+} HAL_CFG_PWM_T;
+
+// =============================================================================
+// HAL_CFG_I2C_T
+// -----------------------------------------------------------------------------
+/// This structure describes the I2C configuration for a given target. The
+/// fields tell wether the corresponding I2C pins are actually used
+/// for I2C and not as something else (for instance as a GPIO).
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the I2C pins are used
+ BOOL i2cUsed :1;
+ /// \c TRUE if the I2C2 pins are used
+ BOOL i2c2Used :1;
+ /// \c TRUE if the I2C2 pins are used from cam pins
+ BOOL i2c2PinsCam :1;
+ /// \c TRUE if the I2C3 pins are used
+ BOOL i2c3Used :1;
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+ /// \c TRUE if the I2CBB pins are used
+ BOOL modemI2cUsed :1;
+#endif
+} HAL_CFG_I2C_T;
+
+// =============================================================================
+// HAL_CFG_I2S_T
+// -----------------------------------------------------------------------------
+/// This structure describes the I2S configuration for a given target. The
+/// fields tell wether the corresponding I2S pin is actually used
+/// for I2S and not as something else (for instance as a GPIO).
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the data out pin is used
+ BOOL doUsed :1;
+ BOOL :3;
+ /// \c TRUE if corresponding input is used
+ BOOL di0Used :1;
+ BOOL di1Used :1;
+ BOOL di2Used :1;
+} HAL_CFG_I2S_T;
+
+// =============================================================================
+// HAL_UART_CONFIG_T
+// -----------------------------------------------------------------------------
+/// Used to describes a configuration for used pin by an UART for a given target.
+// =============================================================================
+typedef enum
+{
+ /// invalid
+ HAL_UART_CONFIG_INVALID = 0,
+
+ /// UART is not used
+ HAL_UART_CONFIG_NONE,
+
+ /// UART use only data lines (TXD & RXD)
+ HAL_UART_CONFIG_DATA,
+
+ /// UART use data and flow control lines (TXD, RXD, RTS & CTS)
+ HAL_UART_CONFIG_FLOWCONTROL,
+
+ /// UART use all lines (TXD, RXD, RTS, CTS, RI, DSR, DCD & DTR)
+ HAL_UART_CONFIG_MODEM,
+
+ HAL_UART_CONFIG_QTY
+} HAL_UART_CONFIG_T;
+
+// =============================================================================
+// HAL_CFG_SPI_T
+// -----------------------------------------------------------------------------
+/// This structure describes the SPI configuration for a given target. The first
+/// fields tell wether the pin corresponding to chip select is actually used
+/// as a chip select and not as something else (for instance as a GPIO).
+/// Then, the polarity of the Chip Select is given. It is only relevant
+/// if the corresponding Chip Select is used as a Chip Select.
+/// Finally which pin is used as input, Can be none, one or the other.
+/// On most chip configuration the input 0 (di0) is on the output pin: SPI_DIO
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the corresponding pin is used as a Chip Select.
+ BOOL cs0Used :1;
+ BOOL cs1Used :1;
+ BOOL cs2Used :1;
+ BOOL cs3Used :1;
+ /// \c TRUE if the first edge is falling
+ BOOL cs0ActiveLow :1;
+ BOOL cs1ActiveLow :1;
+ BOOL cs2ActiveLow :1;
+ BOOL cs3ActiveLow :1;
+ /// \c TRUE if corresponding input is used
+ BOOL di0Used :1;
+ BOOL di1Used :1;
+} HAL_CFG_SPI_T;
+
+// =============================================================================
+// HAL_CFG_GOUDA_T
+// -----------------------------------------------------------------------------
+/// This structure describes the GOUDA configuration for a given target.
+/// The first fields tell wether the pin corresponding to chip select is
+/// actually used as a chip select and not as something else (for instance
+/// as a GPIO). If none are used, the GOUDA is considered unused.
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the corresponding pin is used as a Chip Select.
+ BOOL cs0Used :1;
+ BOOL cs1Used :1;
+ /// \c TRUE if LCD 16-23 bits are from camera, FALSE from NAND
+ BOOL lcd16_23Cam :1;
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+ /// \c TRUE if LCD 8-23 (except for 16-17) bits are from camera2, FALSE from other
+ BOOL lcd8_23Cam2 :1;
+ /// \c TRUE if LCD 16-17 bits are from LCD CS, FALSE from other
+ BOOL lcd16_17Cs :1;
+#endif
+ /// \c LCD interface mode
+ HAL_LCD_MODE_T lcdMode;
+} HAL_CFG_GOUDA_T;
+
+// =============================================================================
+// HAL_CFG_IO_DRIVE_T
+// -----------------------------------------------------------------------------
+/// This structure describes the IO Drive configuration for a given target.
+// =============================================================================
+typedef union
+{
+ struct
+ {
+ UINT32 vDdrDomain:3; // 2:0
+ UINT32 vPsram1Domain:3; // 5:3
+ UINT32 vPsram2Domain:3; // 6:8
+ UINT32 vNFlashDomain:3; // 11:9
+ UINT32 vLcd1Domain:3; // 14:12
+ UINT32 vLcd2Domain:3; // 17:15
+ UINT32 vSDat1Domain:3; // 20:18
+ UINT32 vSDat2Domain:3; // 23 :21
+ UINT32 vCamDomain:2; // 25:24
+ UINT32 vSim1Domain:2; // 27:26
+ UINT32 vSim2Domain:2; // 29:28
+ UINT32 vSim3Domain:2; // 31:30
+ UINT32 vGpioDomain:2; // 1:0
+ UINT32 :30;
+ };
+ struct
+ {
+ UINT32 select1;
+ UINT32 select2;
+ };
+} HAL_CFG_IO_DRIVE_T;
+
+// =============================================================================
+// HAL_CFG_CONFIG_T
+// -----------------------------------------------------------------------------
+/// HAL configuration structure.
+/// This structure is used to setup HAL with regards to the specific
+/// configuration of the board.
+/// Enabling a feature such as i2sCfg will set the corresponding pins which
+/// could also be a GPIO to their alternative use, that is I2S for this
+/// example.
+/// GPIO Pins not connected must be set in the noConnectPins bitfield, for
+/// power saving. They are configured as output and driven to '0'.
+/// Pins which are not not connected (ie are connected) but are not used in
+/// an alternative mode as I2S, are considered to be used as GPIOs.
+// =============================================================================
+typedef struct{
+ /// Chip version
+ UINT32 chipVersion;
+ /// RF Clock Frequency
+ UINT32 rfClkFreq;
+ /// \c TRUE if LPS_CO_1 is used as LPS
+ BOOL useLpsCo1;
+ /// Bitfield with '1' for keypad pins used as input on the keypad
+ UINT8 keyInMask;
+ /// Bitfield with '1' for keypad pins used as output on the keypad
+ UINT8 keyOutMask;
+ /// PWM Configuration
+ HAL_CFG_PWM_T pwmCfg;
+ HAL_CFG_I2C_T i2cCfg;
+ /// I2S Configuration
+ HAL_CFG_I2S_T i2sCfg;
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+ HAL_CFG_I2S_T i2s2Cfg;
+#endif
+ /// UART Configuration
+ HAL_UART_CONFIG_T uartCfg[3];
+ /// SPI Configuration
+ HAL_CFG_SPI_T modemSpiCfg[1];
+ HAL_CFG_SPI_T spiCfg[2];
+ /// SDMMC Configuration
+ HAL_CFG_SDMMC_T sdmmcCfg;
+ /// Camera Configuration
+ HAL_CFG_CAM_T camCfg;
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+ /// Camera2 Configuration
+ HAL_CFG_CAM_T cam2Cfg;
+#endif
+ /// Gouda/LCD Configuration
+ HAL_CFG_GOUDA_T goudaCfg;
+ /// \c TRUE if parallel NAND interface is used
+ BOOL parallelNandUsed;
+ /// \c TRUE if host UART is used
+ BOOL hostUartUsed;
+ /// \c TRUE if host clock is used
+ BOOL hostClkUsed;
+ /// \c TRUE if CLK_OUT pin is used
+ BOOL clkOutUsed;
+ /// \c TRUE if CLK_32K pin is used
+ BOOL useClk32k;
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+ /// \c TRUE if SDIO2_UART1 pin is used for UART1, FALSE for SDIO2
+ BOOL sdio2Uart1Used;
+ /// \c TRUE if EMAC pin is used
+ BOOL emacUsed;
+#endif
+
+ /// Bitfield with '1' for physically not connected GPIO_C pins
+ UINT32 noConnectGpio_C;
+ /// Bitfield with '1' for GPIO really used as GPIO_C
+ UINT32 usedGpio_C;
+ /// Bitfield with '1' for TCO really used as TCO
+ UINT32 usedTco;
+ /// Bitfield with '1' for physically not connected GPIO_A pins
+ UINT32 noConnectGpio_A;
+ /// Bitfield with '1' for GPIO really used as GPIO_A
+ UINT32 usedGpio_A;
+ /// Bitfield with '1' for GPO really used as GPO_A
+ UINT32 usedGpo_A;
+ /// Bitfield with '1' for physically not connected GPIO_B pins
+ UINT32 noConnectGpio_B;
+ /// Bitfield with '1' for GPIO really used as GPIO_B
+ UINT32 usedGpio_B;
+ /// Bitfield with '1' for physically not connected GPIO_D pins
+ UINT32 noConnectGpio_D;
+ /// Bitfield with '1' for GPIO really used as GPIO_D
+ UINT32 usedGpio_D;
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+ /// Bitfield with '1' for physically not connected GPIO_E pins
+ UINT32 noConnectGpio_E;
+ /// Bitfield with '1' for GPIO really used as GPIO_E
+ UINT32 usedGpio_E;
+#endif
+ /// IO Drive Value
+ HAL_CFG_IO_DRIVE_T ioDrive;
+
+} HAL_CFG_CONFIG_T;
+
+
+// =============================================================================
+// GLOBAL VARIABLES
+// =============================================================================
+
+//
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+
+#endif // _HAL_CONFIG_H_
+
diff --git a/board/rda/common/include/hal_gpio.h b/board/rda/common/include/hal_gpio.h
new file mode 100644
index 0000000000..5f378a817f
--- /dev/null
+++ b/board/rda/common/include/hal_gpio.h
@@ -0,0 +1,553 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/include/hal_gpio.h $ //
+// $Author: huazeng $ //
+// $Date: 2013-07-08 14:14:23 +0800 (Mon, 08 Jul 2013) $ //
+// $Revision: 20589 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_gpio.h //
+/// Describes the GPIO driver API //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _HAL_GPIO_H_
+#define _HAL_GPIO_H_
+
+/// @defgroup gpio HAL GPIO Driver
+/// This document describes the characteristics of the GPIO module
+/// and how to use it via its Hardware Abstraction Layer API.
+///
+/// @par GPIO Operation
+/// GPIOs are used to control external chips, or to get external events. They
+/// can be used as inputs or outputs. As input 8 of them can trigger an
+/// interruption.
+///
+/// @par Interruption Handler
+/// For each one of the 8 interrupt capable GPIO, the user handler is set
+/// through a call to the #hal_GpioIrqSetHandler function. When an interrupt
+/// occurs on a GPIO, whether on a falling or rising edge, the registered
+/// user function is called. No information about the kind of edge is available,
+/// so these functions don't have a status.
+///
+/// @par Interruption Mask
+/// For each one of the 8 interrupt capable GPIO, the mask is set through
+/// #hal_GpioIrqSetMask, using the #HAL_GPIO_IRQ_MASK_T structure to set on
+/// which edge the GPIO are sensitive.
+///
+/// @par HAL GPIO Driver is designed for ease of use and configurability for
+/// edrv and svc, not for high speed toggling. If for some specific situation
+/// (mostly experimental projects) a Fast GPIO interface is needed, this
+/// could be added to HAL.
+///
+/// @{
+///
+
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+
+
+// =============================================================================
+// HAL_GPIO_TYPE_T
+// -----------------------------------------------------------------------------
+/// Used to give a type to a general purpose pin that can be either a GPIO pin
+/// or a GPO pin.
+// =============================================================================
+typedef enum
+{
+ /// invalid IO type
+ HAL_GPIO_TYPE_INVALID = 0,
+
+ /// no IO type
+ HAL_GPIO_TYPE_NONE,
+
+ /// GPIO type
+ HAL_GPIO_TYPE_IO,
+
+ /// GPO type
+ HAL_GPIO_TYPE_O,
+
+ /// TCO type
+ HAL_GPIO_TYPE_TCO,
+
+ HAL_GPIO_TYPE_QTY
+} HAL_GPIO_TYPE_T;
+
+
+
+// =============================================================================
+// HAL_GPIO_GPIO_ID_T
+// -----------------------------------------------------------------------------
+/// This type is used to name all the GPIO.
+/// Functions of the GPIO driver are called with a parameter of
+/// this type to specify which GPIO is concerned by a the function call.
+// =============================================================================
+typedef enum
+{
+ /// To be used in configuration when the field for this GPIO is not used
+ HAL_GPIO_NONE = HAL_GPIO_TYPE_NONE << 16,
+ // Only the first eight ones can trig interrupts
+ /// Can cause an interrupt
+ HAL_GPIO_0 = HAL_GPIO_TYPE_IO << 16,
+ /// Can cause an interrupt
+ HAL_GPIO_1,
+ /// Can cause an interrupt
+ HAL_GPIO_2,
+ /// Can cause an interrupt
+ HAL_GPIO_3,
+ /// Can cause an interrupt
+ HAL_GPIO_4,
+ /// Can cause an interrupt
+ HAL_GPIO_5,
+ /// Can cause an interrupt
+ HAL_GPIO_6,
+ /// Can cause an interrupt
+ HAL_GPIO_7,
+ // Those following are not interruptible
+ HAL_GPIO_8,
+ HAL_GPIO_9,
+ HAL_GPIO_10,
+ HAL_GPIO_11,
+ HAL_GPIO_12,
+ HAL_GPIO_13,
+ HAL_GPIO_14,
+ HAL_GPIO_15,
+ HAL_GPIO_16,
+ HAL_GPIO_17,
+ HAL_GPIO_18,
+ HAL_GPIO_19,
+ HAL_GPIO_20,
+ HAL_GPIO_21,
+ HAL_GPIO_22,
+ HAL_GPIO_23,
+ HAL_GPIO_24,
+ HAL_GPIO_25,
+ HAL_GPIO_26,
+ HAL_GPIO_27,
+ HAL_GPIO_28,
+ HAL_GPIO_29,
+ HAL_GPIO_30,
+ HAL_GPIO_31,
+ HAL_GPIO_QTY = 32
+
+} HAL_GPIO_GPIO_ID_T;
+
+
+
+// =============================================================================
+// HAL_GPIO_GPO_ID_T
+// -----------------------------------------------------------------------------
+/// This type is used to name all the GPO.
+/// GPO functions of the GPIO driver are called with a parameter of
+/// this type to specify which GPO is concerned by a the function call.
+// =============================================================================
+typedef enum
+{
+ /// To be used in configuration when the field for this GPO is not used
+ HAL_GPO_NONE = HAL_GPIO_TYPE_NONE << 16,
+ HAL_GPO_0 = HAL_GPIO_TYPE_O << 16,
+ HAL_GPO_1,
+ HAL_GPO_2,
+ HAL_GPO_3,
+ HAL_GPO_4,
+ HAL_GPO_5,
+ HAL_GPO_6,
+ HAL_GPO_7,
+ HAL_GPO_8,
+ HAL_GPO_9,
+ HAL_GPO_10,
+ HAL_GPO_11,
+
+ HAL_GPO_QTY = 12
+} HAL_GPIO_GPO_ID_T;
+
+
+
+// =============================================================================
+// HAL_GPIO_TCO_ID_T
+// -----------------------------------------------------------------------------
+/// This type is used to name all the TCO.
+/// TCO functions of the GPIO driver are called with a parameter of
+/// this type to specify which TCO is concerned by a the function call.
+// =============================================================================
+typedef enum
+{
+ /// To be used in configuration when the field for this TCO is not used
+ HAL_TCO_NONE = HAL_GPIO_TYPE_NONE << 16,
+ HAL_TCO_0 = HAL_GPIO_TYPE_TCO << 16,
+ HAL_TCO_1,
+ HAL_TCO_2,
+ HAL_TCO_3,
+ HAL_TCO_4,
+ HAL_TCO_5,
+ HAL_TCO_6,
+ HAL_TCO_7,
+ HAL_TCO_8,
+ HAL_TCO_9,
+
+ HAL_TCO_QTY = 10
+} HAL_GPIO_TCO_ID_T;
+
+
+
+// =============================================================================
+// HAL_APO_ID_T
+// -----------------------------------------------------------------------------
+/// Any Programmable Output IDentifier
+/// Used to identify any general purpose output pin which can be either a GPIO
+/// pin, a GPO pin or a TCO pin.
+// =============================================================================
+typedef union
+{
+ struct
+ {
+ // NOTE: THIS IS ENDIANNES DEPENDANT
+ UINT16 id:16;
+ /// Defines the kind of the pin: GPIO, GPO, TCO, none
+ HAL_GPIO_TYPE_T type:16;
+ };
+ /// id field is either a GPIO ID ...
+ HAL_GPIO_GPIO_ID_T gpioId;
+ /// or a GPO ID
+ HAL_GPIO_GPO_ID_T gpoId;
+ /// or a TCO ID depending on the type.
+ HAL_GPIO_TCO_ID_T tcoId;
+} HAL_APO_ID_T;
+
+
+
+// =============================================================================
+// HAL_GPIO_IRQ_MASK_T
+// -----------------------------------------------------------------------------
+/// This structure is used to define on which occasion an interrupt
+/// will be triggered from an interruptible GPIO.
+/// In that sense, it is the interrupt mask, but the configuration is
+/// much more precise
+// =============================================================================
+typedef struct
+{
+ /// Defines whether an interruption will be triggered on a rising
+ /// edge on the GPIO
+ BOOL rising;
+
+ /// Defines whether an interruption will be triggered on a falling
+ /// edge on the GPIO
+ BOOL falling;
+
+ /// Defines if the GPIO's signal will be debounced before the interrupt
+ /// is triggered
+ BOOL debounce;
+
+ /// Defines if the interruption is on level (\c TRUE), or on edge (\c FALSE)
+ BOOL level;
+} HAL_GPIO_IRQ_MASK_T;
+
+
+
+// =============================================================================
+// HAL_GPIO_IRQ_HANDLER_T
+// -----------------------------------------------------------------------------
+/// Type for the user function called when an interrupt is triggered on
+/// a GPIO.
+// =============================================================================
+typedef VOID (*HAL_GPIO_IRQ_HANDLER_T)(VOID);
+
+
+
+
+
+
+// =============================================================================
+// HAL_GPIO_DC_ON_INT_MODE_T
+// -----------------------------------------------------------------------------
+/// Type used to define the interruption mode of the DC_ON read.
+// =============================================================================
+typedef enum
+{
+ /// Send IRQ if last read DCON is '0' and now is '1'.
+ HAL_GPIO_DC_ON_INT_L2H,
+ /// Send IRQ if last read DCON is '1' and now is '0'.
+ HAL_GPIO_DC_ON_INT_H2L,
+ /// Send IRQ every time read is ready.
+ HAL_GPIO_DC_ON_INT_RR,
+ /// disable IRQ for DCON
+ HAL_GPIO_DC_ON_INT_NO
+} HAL_GPIO_DC_ON_INT_MODE_T;
+
+
+// =============================================================================
+// HAL_GPIO_DIRECTION_T
+// -----------------------------------------------------------------------------
+/// Direction of a GPIO
+// =============================================================================
+typedef enum
+{
+ HAL_GPIO_DIRECTION_INPUT,
+ HAL_GPIO_DIRECTION_OUTPUT,
+
+ HAL_GPIO_DIRECTION_QTY
+} HAL_GPIO_DIRECTION_T;
+
+
+
+// =============================================================================
+// HAL_GPIO_CFG_T
+// -----------------------------------------------------------------------------
+/// This structure is used to define the initial state of a GPIO when it is
+/// opened by a call to #hal_GpioOpen.
+// =============================================================================
+typedef struct
+{
+ /// Direction of the GPIO
+ HAL_GPIO_DIRECTION_T direction;
+
+ /// Initial value (if this GPIO is an output)
+ BOOL value;
+
+ /// IRQ mask, only valid if applied to an interruptible GPIO
+ HAL_GPIO_IRQ_MASK_T irqMask;
+
+ /// IRQ handler, only valid if applied to an interruptible GPIO
+ HAL_GPIO_IRQ_HANDLER_T irqHandler;
+} HAL_GPIO_CFG_T;
+
+
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+
+// =============================================================================
+// hal_GpioOpen
+// -----------------------------------------------------------------------------
+/// Opens the a GPIO and sets its initial configuration. The GPIO's state can
+/// then be changed by the others functions of this API.
+/// It also sets the corresponding pin in GPIO mode.
+///
+/// @param gpio Identifier of the GPIO to open
+/// @param cfg Initial configuration of this GPIO.
+// =============================================================================
+PUBLIC VOID hal_GpioOpen(HAL_GPIO_GPIO_ID_T gpio, CONST HAL_GPIO_CFG_T* cfg);
+
+
+
+// =============================================================================
+// hal_GpioClose
+// -----------------------------------------------------------------------------
+/// Closes a GPIO driver. The GPIO is returned to its reset state
+/// @param gpio GPIO to close.
+// =============================================================================
+PUBLIC VOID hal_GpioClose(HAL_GPIO_GPIO_ID_T gpio);
+
+
+
+// =============================================================================
+// hal_GpioSetOut
+// -----------------------------------------------------------------------------
+/// This function sets one GPIO to output and leaves the others'directions
+/// unchanged.
+// =============================================================================
+PUBLIC VOID hal_GpioSetOut(HAL_GPIO_GPIO_ID_T gpio);
+
+
+
+// =============================================================================
+// hal_GpioSetIn
+// -----------------------------------------------------------------------------
+/// This function sets one GPIO to input and leaves the others'directions
+/// unchanged.
+// =============================================================================
+PUBLIC VOID hal_GpioSetIn(HAL_GPIO_GPIO_ID_T gpio);
+
+
+
+// =============================================================================
+// hal_GpioGet
+// -----------------------------------------------------------------------------
+/// This function reads a GPIO, and returns its value. It
+/// returns the input value of GPIO configured as input and the output value
+/// for GPIO configured as output.
+///
+/// @return The input value for a GPIO configured as input and
+/// the output value for a GPIO configured as output.
+// =============================================================================
+PUBLIC UINT32 hal_GpioGet(HAL_GPIO_GPIO_ID_T gpio);
+
+
+
+// =============================================================================
+// hal_GpioSet
+// -----------------------------------------------------------------------------
+/// This function sets to '1' the value of the given GPIO, GPO or TCO and leaves
+/// the others unchanged
+/// @param apo A GPIO, a GPO or a TCO set to '1', others being unchanged.
+// =============================================================================
+PUBLIC VOID hal_GpioSet(HAL_APO_ID_T apo);
+
+
+
+// =============================================================================
+// hal_GpioClr
+// -----------------------------------------------------------------------------
+/// This function sets to '0' the value of the given GPIO, GPO or TCO and leaves
+/// the others unchanged
+/// @param apo A GPIO, a GPO or a TCO set to '0', others being unchanged.
+// =============================================================================
+PUBLIC VOID hal_GpioClr(HAL_APO_ID_T apo);
+
+
+
+// =============================================================================
+// hal_GpioResetIrq
+// -----------------------------------------------------------------------------
+/// Clears the gpio IRQ,
+/// This function should only be called to avoid unwanted IRQ. \n
+/// For regular usage, IRQ clearing is done automatically by the driver. \n
+/// Rise and fall cause are cleared simultaneously
+///
+/// @param gpio A GPIO whose interrupt cause is cleared.
+// ==========================================================================
+PUBLIC VOID hal_GpioResetIrq(HAL_GPIO_GPIO_ID_T gpio);
+
+
+
+// =============================================================================
+// hal_GpioIrqSetHandler
+// -----------------------------------------------------------------------------
+/// Sets the user IRQ handler called when an interruption is triggerd on a
+/// given GPIO.
+///
+/// @param gpio The GPIO whose interrupt will trig the handler
+/// @param handler The user function called on an interruption on this GPIO.
+// =============================================================================
+PUBLIC VOID hal_GpioIrqSetHandler(HAL_GPIO_GPIO_ID_T gpio, HAL_GPIO_IRQ_HANDLER_T handler);
+
+
+
+
+// =============================================================================
+// hal_GpioIrqSetMask
+// -----------------------------------------------------------------------------
+/// Set the condition under which an interrupt is triggered on a GPIO
+/// @param gpio The GPIO
+/// @param cfg Pointer to the configuration defining the condition
+/// under which the interrupts are triggered, ie the interrupt mask.
+// =============================================================================
+PUBLIC VOID hal_GpioIrqSetMask(HAL_GPIO_GPIO_ID_T gpio, CONST HAL_GPIO_IRQ_MASK_T* cfg);
+
+
+
+// =============================================================================
+// hal_GpioGetCfg
+// -----------------------------------------------------------------------------
+/// Return the configuration of a GPIO.
+/// @param gpio Identifier of the GPIO.
+/// @param cfg Current configuration of this GPIO.
+// =============================================================================
+PUBLIC VOID hal_GpioGetCfg(HAL_GPIO_GPIO_ID_T gpio, HAL_GPIO_CFG_T* cfg);
+
+
+
+// =============================================================================
+// hal_GpioGetIntStatus
+// -----------------------------------------------------------------------------
+/// Return the interrupt status of a GPIO.
+/// @param gpio Identifier of the GPIO.
+/// @return The interrupt status of this GPIO.
+// =============================================================================
+PUBLIC BOOL hal_GpioGetIntStatus(HAL_GPIO_GPIO_ID_T gpio);
+
+
+
+#if 0
+// =============================================================================
+// hal_GpioDcOnOpen
+// =============================================================================
+/// Configure the DC-ON command
+/// @param outTime Time for which GPIO0 is set to output mode, after a start
+/// read DCON command is issued.
+/// @param waitTime Time for which GPIO0 should wait before reading DC_ON,
+/// after a start read DCON command is issued (Note: \p waitTime must be
+/// strictly greater than \p outTime).
+/// @param intMode Interruption mode of GPIO0 in mode DC_ON detection.
+// =============================================================================
+PUBLIC VOID hal_GpioDcOnOpen(UINT32 outTime, UINT32 waitTime,
+ HAL_GPIO_DC_ON_INT_MODE_T intMode);
+
+
+// =============================================================================
+// hal_GpioDcOnClose
+// =============================================================================
+/// Disable the DC-ON command: set back GPIO0 as regular GPIO
+// =============================================================================
+PUBLIC VOID hal_GpioDcOnClose(VOID);
+
+
+// =============================================================================
+// hal_GpioChgSetMode
+// -----------------------------------------------------------------------------
+/// Enable or disable the charger according to \p on.
+/// when enabled, #hal_GpioChgDown can be called to pulse down the charger.
+/// @param on charger state
+// =============================================================================
+PUBLIC VOID hal_GpioChgSetMode(BOOL on);
+
+
+// =============================================================================
+// hal_GpioChgDown
+// -----------------------------------------------------------------------------
+/// Sends the down signal to the charger to avoid a time-out. The user will
+/// have to call that function at least every 5 seconds.
+// =============================================================================
+PUBLIC VOID hal_GpioChgDown(VOID);
+
+
+// =============================================================================
+// hal_GpioChgGet
+// -----------------------------------------------------------------------------
+/// This function reads the charger dedicated GPIO, and returns its value.
+///
+/// @return The input value of the charger dedicated GPIO.
+// =============================================================================
+PUBLIC UINT32 hal_GpioChgGet(VOID);
+
+
+// =============================================================================
+// hal_GpioChgIrqSetHandler
+// -----------------------------------------------------------------------------
+/// Sets the user IRQ handler called when an interruption is triggerd on the
+/// charger dedicated GPIO.
+///
+/// @param gpio The GPIO whose interrupt will trig the handler
+/// @param handler The user function called on an interruption on the charger
+/// dedicated GPIO.
+// =============================================================================
+PUBLIC VOID hal_GpioChgIrqSetHandler(HAL_GPIO_IRQ_HANDLER_T handler);
+
+
+#endif
+
+
+
+/// @} <- End of the gpio group
+
+
+#endif // _HAL_GPIO_H_
+
+
+
diff --git a/board/rda/common/include/hal_sys.h b/board/rda/common/include/hal_sys.h
new file mode 100644
index 0000000000..f7aad7231c
--- /dev/null
+++ b/board/rda/common/include/hal_sys.h
@@ -0,0 +1,831 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+//
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/include/hal_sys.h $
+// $Author: huazeng $
+// $Date: 2013-08-30 12:04:12 +0800 (Fri, 30 Aug 2013) $
+// $Revision: 20989 $
+//
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_sys.h
+/// That file describes the SYSTEM driver API.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _HAL_SYS_H_
+#define _HAL_SYS_H_
+
+/// @defgroup system HAL Sytem Driver
+/// description
+/// ...
+/// @{
+
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// Chip product IDs
+
+#define HAL_SYS_CHIP_PROD_ID_8808 0x8808
+
+#define HAL_SYS_CHIP_PROD_ID_8808S 0x880a
+
+#define HAL_SYS_CHIP_PROD_ID_8809 0x8809
+
+#define HAL_SYS_CHIP_PROD_ID_8810 0x8810
+
+
+#ifdef BIG_ENDIAN
+
+#define HAL_ENDIAN_LITTLE_32(X) (((((X) >> 24) & 0xFF) << 0) \
+ |((((X) >> 16) & 0xFF) << 8) \
+ |((((X) >> 8) & 0xFF) << 16) \
+ |((((X) >> 0) & 0xFF) << 24))
+
+#define HAL_ENDIAN_LITTLE_24(X) (((((X) >> 16) & 0xFF) << 0) \
+ |((((X) >> 8) & 0xFF) << 8) \
+ |((((X) >> 0) & 0xFF) << 16))
+
+#define HAL_ENDIAN_LITTLE_16(X) (((((X) >> 8) & 0xFF) << 0) \
+ |((((X) >> 0) & 0xFF) << 8))
+
+#define HAL_ENDIAN_BIG_32(X) (X)
+
+#define HAL_ENDIAN_BIG_24(X) (X)
+
+#define HAL_ENDIAN_BIG_16(X) (X)
+
+#else
+
+#define HAL_ENDIAN_BIG_32(X) (((((X) >> 24) & 0xFF) << 0) \
+ |((((X) >> 16) & 0xFF) << 8) \
+ |((((X) >> 8) & 0xFF) << 16) \
+ |((((X) >> 0) & 0xFF) << 24))
+
+#define HAL_ENDIAN_BIG_24(X) (((((X) >> 16) & 0xFF) << 0) \
+ |((((X) >> 8) & 0xFF) << 8) \
+ |((((X) >> 0) & 0xFF) << 16))
+
+#define HAL_ENDIAN_BIG_16(X) (((((X) >> 8) & 0xFF) << 0) \
+ |((((X) >> 0) & 0xFF) << 8))
+
+#define HAL_ENDIAN_LITTLE_32(X) (X)
+
+#define HAL_ENDIAN_LITTLE_24(X) (X)
+
+#define HAL_ENDIAN_LITTLE_16(X) (X)
+
+#endif /* BIG_ENDIAN */
+
+// =============================================================================
+// HAL_SYS_CRITICAL_SECTION_ADDRESS
+// -----------------------------------------------------------------------------
+/// Address of the interrupt enable semaphore, used to control the critical
+/// section.
+// =============================================================================
+#define HAL_SYS_CRITICAL_SECTION_ADDRESS CHIP_SYS_CRITICAL_SECTION_REG
+
+
+// =============================================================================
+// HAL_SYS_GET_CACHED_ADDR
+// -----------------------------------------------------------------------------
+/// That macro is used to get the cached version of a given address
+// =============================================================================
+#define HAL_SYS_GET_CACHED_ADDR(addr) (((UINT32)(addr))&0xdfffffff)
+
+
+// =============================================================================
+// HAL_SYS_GET_UNCACHED_ADDR
+// -----------------------------------------------------------------------------
+/// That macro is used to get the uncached version of a given address
+// =============================================================================
+#define HAL_SYS_GET_UNCACHED_ADDR(addr) (((UINT32)(addr))|0x20000000)
+
+#ifdef __mips16
+// =============================================================================
+// HAL_SYS_GET_RA
+// -----------------------------------------------------------------------------
+/// That macro puts in store the current value of the RA register. It should
+/// be called at the beginning of the function (before any other function call)
+/// to ensure the correctness of the result.
+///
+/// This is the macro for mips16 code. It also exists for mips32 code, in
+/// which case its value would be:
+///
+/// <code>
+/// \#define HAL_SYS_GET_RA(store) asm volatile("sw $31, 0(%0)"::"r"((store)))
+/// </code>
+///
+/// @param store The return address of the current function
+// =============================================================================
+#define HAL_SYS_GET_RA(store) asm volatile("move $2, $31\n\tsw $2, 0(%0)"::"d"((store)):"$2")
+#else
+// =============================================================================
+// HAL_SYS_GET_RA
+// -----------------------------------------------------------------------------
+/// That macro puts in store the current value of the RA register. It should
+/// be called at the beginning of the function (before any other function call)
+/// to ensure the correctness of the result.
+///
+/// This is the macro for mips32 code. It also exists for mips16 code, in
+/// which case its value would be:
+///
+/// <code>
+/// \#define HAL_SYS_GET_RA(store) asm volatile("move $2, $31\n\tsw $2, 0(%0)"::"r"((store)):"$2")
+/// </code>
+///
+/// @param store The return address of the current function
+// =============================================================================
+#define HAL_SYS_GET_RA(store) asm volatile("sw $31, 0(%0)"::"r"((store)))
+#endif
+
+
+
+
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// =============================================================================
+// HAL_SYS_FREQ_USER_ID_T
+// -----------------------------------------------------------------------------
+/// Those are the different user recognized at the system scale.
+/// @todo fill
+// =============================================================================
+typedef enum
+{
+ // Resource ID to be used by the platform
+ HAL_SYS_FREQ_PLATFORM_FIRST_USER = 25,
+ HAL_SYS_FREQ_PAL = HAL_SYS_FREQ_PLATFORM_FIRST_USER,
+ HAL_SYS_FREQ_BCPU,
+ HAL_SYS_FREQ_XCV,
+ HAL_SYS_FREQ_CAMS,
+ HAL_SYS_FREQ_VOIS,
+ HAL_SYS_FREQ_NONE_0,
+ HAL_SYS_FREQ_NONE_1,
+ HAL_SYS_FREQ_AVRS,
+ // !!! Add new platform users above !!!
+ HAL_SYS_FREQ_PLATFORM_USER_END,
+ HAL_SYS_FREQ_PLATFORM_LAST_USER = HAL_SYS_FREQ_PLATFORM_USER_END-1,
+
+ // Resource ID to be used by the application (MMI)
+ HAL_SYS_FREQ_APP_FIRST_USER = 40,
+ HAL_SYS_FREQ_APP_USER_0 = HAL_SYS_FREQ_APP_FIRST_USER,
+ HAL_SYS_FREQ_APP_USER_1,
+ HAL_SYS_FREQ_APP_USER_2,
+ HAL_SYS_FREQ_APP_USER_3,
+ HAL_SYS_FREQ_APP_USER_4,
+ HAL_SYS_FREQ_APP_USER_5,
+ HAL_SYS_FREQ_APP_USER_6,
+ HAL_SYS_FREQ_APP_USER_7,
+ // !!! Add new app users above !!!
+ HAL_SYS_FREQ_APP_USER_END,
+ HAL_SYS_FREQ_APP_LAST_USER = HAL_SYS_FREQ_APP_USER_END-1,
+
+ // Total number of resource IDs
+ HAL_SYS_FREQ_USER_QTY
+} HAL_SYS_FREQ_USER_ID_T;
+
+
+
+// =============================================================================
+// HAL_SYS_FREQ_T
+// -----------------------------------------------------------------------------
+/// That type defines all the possible frequencies for the system clock.
+/// This type is used to define the minimum system frequency required
+/// by a user selected among #HAL_SYS_FREQ_USER_ID_T.
+/// Some frequencies might not be supported by some chips.
+// =============================================================================
+typedef enum
+{
+#if (!CHIP_HAS_ASYNC_TCU)
+ HAL_SYS_FREQ_32K = 32768,
+ HAL_SYS_FREQ_13M = 13000000,
+ HAL_SYS_FREQ_26M = 26000000,
+ HAL_SYS_FREQ_39M = 39000000,
+ HAL_SYS_FREQ_52M = 52000000,
+ HAL_SYS_FREQ_78M = 78000000,
+ HAL_SYS_FREQ_104M = 104000000,
+ HAL_SYS_FREQ_156M = 156000000,
+ HAL_SYS_FREQ_208M = 208000000,
+ HAL_SYS_FREQ_UNKNOWN = 0,
+#else // CHIP_HAS_ASYNC_TCU
+ HAL_SYS_FREQ_32K = 32768,
+ HAL_SYS_FREQ_13M = 13000000,
+ HAL_SYS_FREQ_26M = 26000000,
+ HAL_SYS_FREQ_39M = 39000000,
+ HAL_SYS_FREQ_52M = 52000000,
+ HAL_SYS_FREQ_78M = 78000000,
+ HAL_SYS_FREQ_89M = 89142857, //624M/7
+ HAL_SYS_FREQ_104M = 104000000,
+ HAL_SYS_FREQ_113M = 113454545, //624M/5.5
+ HAL_SYS_FREQ_125M = 124800000,
+ HAL_SYS_FREQ_139M = 138666667, //624M/4.5
+ HAL_SYS_FREQ_156M = 156000000,
+ HAL_SYS_FREQ_178M = 178285714, //624M/3.5
+ HAL_SYS_FREQ_208M = 208000000,
+ HAL_SYS_FREQ_250M = 249600000, //624M/2.5
+ HAL_SYS_FREQ_312M = 312000000,
+ HAL_SYS_FREQ_UNKNOWN = 0,
+#endif // CHIP_HAS_ASYNC_TCU
+} HAL_SYS_FREQ_T;
+
+
+// =============================================================================
+// HAL_SYS_BB_FREQ_T
+// -----------------------------------------------------------------------------
+/// That type defines all the possible frequencies for the bb clock.
+/// Some frequencies might not be supported by some chips.
+// =============================================================================
+typedef enum
+{
+ HAL_SYS_BB_FREQ_26M = 26000000,
+ HAL_SYS_BB_FREQ_39M = 39000000,
+ HAL_SYS_BB_FREQ_52M = 52000000,
+ HAL_SYS_BB_FREQ_78M = 78000000,
+ HAL_SYS_BB_FREQ_104M = 104000000,
+ HAL_SYS_BB_FREQ_156M = 156000000,
+ HAL_SYS_BB_FREQ_208M = 208000000,
+ HAL_SYS_BB_FREQ_312M = 312000000,
+} HAL_SYS_BB_FREQ_T;
+
+
+
+// =============================================================================
+// HAL_SYS_FREQ_CHANGE_HANDLER_T
+// -----------------------------------------------------------------------------
+/// Type for Handler called when the system frequency changes
+/// as registered by function hal_SysRequestFreq()
+// =============================================================================
+typedef VOID (*HAL_SYS_FREQ_CHANGE_HANDLER_T)(HAL_SYS_FREQ_T);
+
+
+
+// =============================================================================
+// HAL_SYS_MEM_FREQ_T
+// -----------------------------------------------------------------------------
+/// That type defines all the possible frequencies for the memory clock.
+/// Some frequencies might not be supported by some chips.
+// =============================================================================
+typedef enum
+{
+ HAL_SYS_MEM_FREQ_13M = 13000000,
+ HAL_SYS_MEM_FREQ_26M = 26000000,
+ HAL_SYS_MEM_FREQ_39M = 39000000,
+ HAL_SYS_MEM_FREQ_52M = 52000000,
+ HAL_SYS_MEM_FREQ_78M = 78000000,
+ HAL_SYS_MEM_FREQ_89M = 89142857, //624M/7
+ HAL_SYS_MEM_FREQ_104M = 104000000,
+ HAL_SYS_MEM_FREQ_113M = 113454545, //624M/5.5
+ HAL_SYS_MEM_FREQ_125M = 124800000,
+ HAL_SYS_MEM_FREQ_139M = 138666667, //624M/4.5
+ HAL_SYS_MEM_FREQ_156M = 156000000,
+ HAL_SYS_MEM_FREQ_178M = 178285714, //624M/3.5
+ HAL_SYS_MEM_FREQ_208M = 208000000,
+ HAL_SYS_MEM_FREQ_250M = 249600000, //624M/2.5
+ HAL_SYS_MEM_FREQ_312M = 312000000,
+} HAL_SYS_MEM_FREQ_T;
+
+
+// =============================================================================
+// HAL_SYS_VOC_FREQ_T
+// -----------------------------------------------------------------------------
+/// That type defines all the possible frequencies for the VoC clock.
+/// Some frequencies might not be supported by some chips.
+// =============================================================================
+typedef enum
+{
+ HAL_SYS_VOC_FREQ_13M = 13000000,
+ HAL_SYS_VOC_FREQ_26M = 26000000,
+ HAL_SYS_VOC_FREQ_39M = 39000000,
+ HAL_SYS_VOC_FREQ_52M = 52000000,
+ HAL_SYS_VOC_FREQ_78M = 78000000,
+ HAL_SYS_VOC_FREQ_89M = 89142857, //624M/7
+ HAL_SYS_VOC_FREQ_104M = 104000000,
+ HAL_SYS_VOC_FREQ_113M = 113454545, //624M/5.5
+ HAL_SYS_VOC_FREQ_125M = 124800000,
+ HAL_SYS_VOC_FREQ_139M = 138666667, //624M/4.5
+ HAL_SYS_VOC_FREQ_156M = 156000000,
+ HAL_SYS_VOC_FREQ_178M = 178285714, //624M/3.5
+ HAL_SYS_VOC_FREQ_208M = 208000000,
+ HAL_SYS_VOC_FREQ_250M = 249600000, //624M/2.5
+ HAL_SYS_VOC_FREQ_312M = 312000000,
+} HAL_SYS_VOC_FREQ_T;
+
+
+// =============================================================================
+// HAL_SYS_CLOCK_OUT_ID_T
+// -----------------------------------------------------------------------------
+/// That type defines all the possible user Id for the clock Out Pin sharing.
+// =============================================================================
+typedef enum
+{
+ /// returned when no more IDs are availlable
+ HAL_SYS_CLOCK_OUT_ID_1 = 0,
+ HAL_SYS_CLOCK_OUT_ID_2,
+ HAL_SYS_CLOCK_OUT_ID_3,
+ HAL_SYS_CLOCK_OUT_ID_4,
+
+ HAL_SYS_CLOCK_OUT_ID_QTY,
+
+ HAL_SYS_CLOCK_OUT_RESOURCE_UNAVAILABLE = -1
+} HAL_SYS_CLOCK_OUT_ID_T;
+
+
+// =============================================================================
+// HAL_SYS_CLOCK_OUT_FREQ_T
+// -----------------------------------------------------------------------------
+/// That type defines all the possible frequencies for the clock Out Pin.
+// =============================================================================
+typedef enum
+{
+ HAL_SYS_CLOCK_OUT_FREQ_32K = 1,
+ HAL_SYS_CLOCK_OUT_FREQ_26M
+} HAL_SYS_CLOCK_OUT_FREQ_T;
+
+
+// =============================================================================
+// HAL_SYS_RESET_CAUSE_T
+// -----------------------------------------------------------------------------
+/// Describes the cause of a system reset. This type is returned by the function
+/// #hal_SysGetResetCause.
+// =============================================================================
+typedef enum
+{
+ /// Normal cause, ie power up
+ HAL_SYS_RESET_CAUSE_NORMAL,
+
+ /// The reset was caused by a watchdog
+ HAL_SYS_RESET_CAUSE_WATCHDOG,
+
+ /// The reset was caused by a soft restart, triggered by the function
+ /// #hal_SysRestart.
+ HAL_SYS_RESET_CAUSE_RESTART,
+
+ /// The reset was initiated from the Host Interface.
+ HAL_SYS_RESET_CAUSE_HOST_DEBUG,
+
+ /// The reset was caused by alarm, from the calendar.
+ HAL_SYS_RESET_CAUSE_ALARM,
+
+ HAL_SYS_RESET_CAUSE_QTY
+
+} HAL_SYS_RESET_CAUSE_T;
+
+
+// =============================================================================
+// HAL_SYS_CHIP_ID_T
+// -----------------------------------------------------------------------------
+/// Describes the cause of a system reset. This type is returned by the function
+/// #hal_SysGetResetCause.
+// =============================================================================
+typedef enum
+{
+ /// Chip product ID
+ HAL_SYS_CHIP_PROD_ID,
+
+ /// Chip bond ID
+ HAL_SYS_CHIP_BOND_ID,
+
+ /// Chip metal ID
+ HAL_SYS_CHIP_METAL_ID,
+
+ /// Chip ID whole
+ HAL_SYS_CHIP_ID_WHOLE,
+
+} HAL_SYS_CHIP_ID_T;
+
+
+// =============================================================================
+// HAL_SYS_CHIP_METAL_ID_T
+// -----------------------------------------------------------------------------
+/// Those are the different metal IDs.
+/// @todo fill
+// =============================================================================
+typedef enum
+{
+ HAL_SYS_CHIP_METAL_ID_U00 = 0x00,
+ HAL_SYS_CHIP_METAL_ID_U01,
+ HAL_SYS_CHIP_METAL_ID_U02,
+ HAL_SYS_CHIP_METAL_ID_U03,
+ HAL_SYS_CHIP_METAL_ID_U04,
+ HAL_SYS_CHIP_METAL_ID_U05,
+ HAL_SYS_CHIP_METAL_ID_U06,
+ HAL_SYS_CHIP_METAL_ID_U07,
+ HAL_SYS_CHIP_METAL_ID_U08,
+ HAL_SYS_CHIP_METAL_ID_U09,
+ HAL_SYS_CHIP_METAL_ID_U0a,
+ HAL_SYS_CHIP_METAL_ID_U0b,
+ HAL_SYS_CHIP_METAL_ID_U0c,
+ HAL_SYS_CHIP_METAL_ID_U0d,
+ HAL_SYS_CHIP_METAL_ID_U0e,
+ HAL_SYS_CHIP_METAL_ID_U0f,
+ HAL_SYS_CHIP_METAL_ID_U10,
+}HAL_SYS_CHIP_METAL_ID_T;
+
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+
+
+// ============================================================================
+// hal_SysSetupPLL
+// ----------------------------------------------------------------------------
+/// Setup PLL at early system boot time.
+// ============================================================================
+PUBLIC VOID hal_SysSetupPLL(VOID);
+
+
+// =============================================================================
+// hal_SysStartBcpu
+// -----------------------------------------------------------------------------
+/// Start the BCPU with a stack to at the given address.
+/// @param bcpuMain Main function to run on the BCPU.
+/// @param stackStartAddr Stack top for the program running on the BCPU
+// =============================================================================
+PUBLIC VOID hal_SysStartBcpu(VOID* bcpuMain, VOID* stackStartAddr);
+
+
+// =============================================================================
+// hal_SysStopBcpu
+// -----------------------------------------------------------------------------
+/// Stop the BCPU and leave it in reset
+/// Use it for debug only as it is prefereable to
+/// not send any commands to it
+// =============================================================================
+PUBLIC VOID hal_SysStopBcpu(VOID);
+
+
+// =============================================================================
+// hal_SysSetRequestFreq
+// -----------------------------------------------------------------------------
+/// When a given users requires a minimum frequency to be able to execute a
+/// task, this function must be called.
+/// @param userId Identifier of the calling user.
+/// @param minFreq Minimum required frequency.
+/// @param handler User function registered for this userId
+/// The function is called when the frequency is switched by any following call
+/// to hal_SysSetRequestFreq() including the current one.
+/// If \c NULL, no function is registered.
+// =============================================================================
+PUBLIC VOID hal_SysRequestFreq(HAL_SYS_FREQ_USER_ID_T userId, HAL_SYS_FREQ_T minFreq,
+ HAL_SYS_FREQ_CHANGE_HANDLER_T handler);
+
+
+
+// =============================================================================
+// hal_SysGetRequestFreq
+// -----------------------------------------------------------------------------
+/// Get the minimum frequency required by a given user
+/// @param userId Identifier of the calling user.
+/// @return The minimum required frequency for this user.
+// =============================================================================
+PUBLIC HAL_SYS_FREQ_T hal_SysGetRequestFreq(HAL_SYS_FREQ_USER_ID_T userId);
+
+
+
+// =============================================================================
+// hal_SysGetFreq
+// -----------------------------------------------------------------------------
+/// Get the current system clock frequency.
+/// @return The current system clock frequency.
+// =============================================================================
+PUBLIC HAL_SYS_FREQ_T hal_SysGetFreq(VOID);
+
+
+
+// =============================================================================
+// hal_SysSetBBClock
+// -----------------------------------------------------------------------------
+/// Set the BB clock.
+/// @param newClock New BB clock.
+// =============================================================================
+PUBLIC VOID hal_SysSetBBClock(HAL_SYS_BB_FREQ_T newClock);
+
+
+
+// =============================================================================
+// hal_SysSetVocClock
+// -----------------------------------------------------------------------------
+/// Set the VOC clock.
+/// @param newClock New VOC clock.
+/// @return Old VOC clock.
+// =============================================================================
+PUBLIC HAL_SYS_VOC_FREQ_T hal_SysSetVocClock(HAL_SYS_VOC_FREQ_T newClock);
+
+
+
+// =============================================================================
+// hal_SysShutdown
+// -----------------------------------------------------------------------------
+/// A call to this function shuts the system down.
+// =============================================================================
+PUBLIC VOID hal_SysShutdown(VOID);
+
+
+
+// =============================================================================
+// hal_SysSoftReset
+// -----------------------------------------------------------------------------
+/// Does a soft reset on the chip.
+/// Generally, you should NOT use this function, use hal_SysRestart() instead.
+// =============================================================================
+PUBLIC VOID hal_SysSoftReset(VOID);
+
+
+
+// =============================================================================
+// hal_SysRestart
+// -----------------------------------------------------------------------------
+/// A call to this function reboots the system.
+/// First, this function does a power cycle on USB
+// =============================================================================
+PUBLIC VOID hal_SysRestart(VOID);
+
+
+
+// =============================================================================
+// hal_SysGetResetCause
+// -----------------------------------------------------------------------------
+/// Get the cause of the last reset.
+/// This function only returns the reset cause. It does not proceed to any test
+/// to now if the boot was due to a press on the Power On button or because
+/// the charger was plugged. Those tests are to be done by the user code,
+/// when this function returns HAL_SYS_RESET_CAUSE_ALARM.
+/// @return The last reset cause
+// =============================================================================
+PUBLIC HAL_SYS_RESET_CAUSE_T hal_SysGetResetCause(VOID);
+
+
+
+// =============================================================================
+// hal_SysSleep
+// -----------------------------------------------------------------------------
+/// Check if the system can sleep and, in that case, make it sleep.
+///
+/// This function is to be called by pal_Sleep, normally in
+/// the idle task. It switches the system on the 32khz clock if no user requires
+/// a higher clock and if it is ready to do it, ie: the LPS is operational
+// =============================================================================
+PUBLIC VOID hal_SysSleep(VOID);
+
+
+
+// =============================================================================
+// hal_SysResetOut
+// -----------------------------------------------------------------------------
+/// A call to this function resets an external device through the reset-out
+/// line, if the parameter is \c TRUE.
+/// @param resetOut If \c TRUE, rises the reset-out line.
+/// If \c FALSE, pulls it down.
+// =============================================================================
+PUBLIC VOID hal_SysResetOut(BOOL resetOut);
+
+
+
+// =============================================================================
+// hal_SysInvalidateCache
+// -----------------------------------------------------------------------------
+/// This function invalidates in the cache the line corresponding to the given
+/// memory area, referred by a pointer and a size.
+/// It must be called with the destination buffer after a DMA copy.
+/// @param buffer Pointer to the first address whose cache line must be
+/// invalidated
+/// @param size Size of the buffer.
+// =============================================================================
+PUBLIC VOID hal_SysInvalidateCache(VOID* buffer, UINT32 size);
+
+
+
+// =============================================================================
+// hal_SysGetChipId
+// -----------------------------------------------------------------------------
+/// That function gives the chip ID the software is running on.
+/// @param part Which part of the chip ID
+/// @return The requested part of the chip ID.
+// =============================================================================
+PUBLIC UINT32 hal_SysGetChipId(HAL_SYS_CHIP_ID_T part);
+
+
+
+// =============================================================================
+// g_halSysCsAddress
+// -----------------------------------------------------------------------------
+/// This global variable stores the address of the chip critical section.
+///
+/// *ATTENTION* It is forbidden to use global variables, but here we e
+/// exceptionally need to have one for critical performance reasons.
+/// This is not an exchange variable, it is forbidden to use it directly.
+///
+/// hal_SysEnterCriticalSection and hal_SysExitCriticalSection are inline
+/// built using that variable and must be used to access the critical
+/// section.
+// =============================================================================
+EXPORT VOLATILE UINT32* g_bootSysCsAddress;
+
+
+
+// =============================================================================
+// hal_SysEnterCriticalSection
+// -----------------------------------------------------------------------------
+/// This function enters in a critical section (relative to the hardware
+/// interrupts) and return a status that should be given to the
+/// #hal_SysExitCriticalSection function.
+///
+/// @return The \c status that should be given to the #hal_SysExitCriticalSection
+/// function.
+// =============================================================================
+INLINE UINT32 hal_SysEnterCriticalSection(VOID)
+{
+ UINT32 myLocalVar = *g_bootSysCsAddress;
+ // add this empty assembly line to avoid the compiler to re-order
+ // the code around the critical section call
+ asm volatile ("");
+ return myLocalVar;
+}
+
+
+
+
+// =============================================================================
+// hal_SysExitCriticalSection
+// -----------------------------------------------------------------------------
+/// This function leaves the critical section. The <CODE>status</CODE>
+/// parameter is the return value of the #hal_SysEnterCriticalSection call
+/// that opened the critical section.
+///
+/// @param status The value returned by #hal_SysEnterCriticalSection.
+// =============================================================================
+INLINE VOID hal_SysExitCriticalSection(UINT32 status)
+{
+ // add this empty assembly line to avoid the compiler to re-order
+ // the code around the critical section call
+ asm volatile ("");
+ *g_bootSysCsAddress = status;
+}
+
+
+
+// =============================================================================
+// hal_SysGetSp
+// -----------------------------------------------------------------------------
+/// This function returns the current value of the stack register
+/// @return The current value of the stack pointer.
+// =============================================================================
+PUBLIC UINT32 hal_SysGetSp(VOID);
+
+
+
+// =============================================================================
+// hal_SysClkOutOpen
+// -----------------------------------------------------------------------------
+/// Manage the output of the clock-out, to an external device
+///
+/// This function requests a resource of #HAL_SYS_FREQ_26M or release it
+/// to #HAL_SYS_FREQ_32K depending on the \p freq parameter value.
+///
+/// @param freq the required frequency
+/// @return the user id to be used for #hal_SysClkOutClose
+/// or #HAL_SYS_CLOCK_OUT_RESOURCE_UNAVAILABLE when the clock is already
+/// in use at a different frequency.
+// =============================================================================
+PUBLIC HAL_SYS_CLOCK_OUT_ID_T hal_SysClkOutOpen(HAL_SYS_CLOCK_OUT_FREQ_T freq);
+
+
+
+// =============================================================================
+// hal_SysClkOutClose
+// -----------------------------------------------------------------------------
+/// Manage the output of the clock-out, to an external device
+///
+/// This function release a resource to #HAL_SYS_FREQ_32K.
+///
+/// @param id the user id returned by #hal_SysClkOutOpen
+// =============================================================================
+PUBLIC VOID hal_SysClkOutClose(HAL_SYS_CLOCK_OUT_ID_T id);
+
+
+
+// ==========================================================================
+// hal_SysAuxClkOut
+// --------------------------------------------------------------------------
+/// Manage the output of the 26M AUX Clock, to an external device
+/// @param enable If \c TRUE, enable AuxClk output.
+/// If \c FALSE, disable AuxClk output.
+// ==========================================================================
+PUBLIC VOID hal_SysAuxClkOut(BOOL enable);
+
+
+
+// ==========================================================================
+// hal_Sys32kClkOut
+// --------------------------------------------------------------------------
+/// Manage the output of the 32K Clock, to an external device
+/// @param enable If \c TRUE, enable 32K clock output.
+/// If \c FALSE, disable 32K clock output.
+// ==========================================================================
+PUBLIC VOID hal_Sys32kClkOut(BOOL enable);
+
+
+
+#if (!CHIP_HAS_ASYNC_TCU)
+// =============================================================================
+// hal_SysQBitError
+// -----------------------------------------------------------------------------
+/// This function returns error on QBit due to clock switch mechanism.
+/// If the error has to be compensated the error is cleared.
+/// @param forceReset force to clear the error counter.
+/// @return -1, 0 or 1 QBit error to be compensated.
+// =============================================================================
+PUBLIC INT32 hal_SysQBitError(BOOL forceReset);
+#endif // (!CHIP_HAS_ASYNC_TCU)
+
+
+
+// =============================================================================
+// hal_SysIrqPending
+// -----------------------------------------------------------------------------
+/// This function checks the IRQ pending status. It should be called in critical
+/// section to know if some IRQ are pending and then decide to release the
+/// critical section.
+/// @return \c TRUE if IRQ are pending.
+/// \c FALSE Otherwise.
+// =============================================================================
+PUBLIC BOOL hal_SysIrqPending(VOID);
+
+
+
+// =============================================================================
+// hal_SysProcessHostMonitor
+// -----------------------------------------------------------------------------
+/// This function is called in the idle task or in gdb loop.
+/// It is used to execute the function processing possible commands
+/// from the Host.
+// =============================================================================
+PUBLIC VOID hal_SysProcessHostMonitor(VOID);
+
+
+
+// =============================================================================
+// hal_SysProcessIdle
+// -----------------------------------------------------------------------------
+/// This function is called in the idle task.
+/// It is used to execute in idle the function processing possible commands
+/// from the Host, and thus, for example, call the executor. etc ...
+// =============================================================================
+PUBLIC VOID hal_SysProcessIdle(VOID);
+
+
+
+// =============================================================================
+// hal_SysWaitMicrosecond
+// -----------------------------------------------------------------------------
+/// This function wait some time in microseconds.
+/// It calculates CPU instruction cycles needed, depending on current system frequency.
+/// Note that it does NOT have critical section operations.
+/// @param us Microseconds to wait.
+// =============================================================================
+PUBLIC VOID hal_SysWaitMicrosecond(UINT32 us);
+
+
+
+// =============================================================================
+// hal_BootEnterMonitor
+// -----------------------------------------------------------------------------
+/// Call this function to enter the boot monitor.
+// =============================================================================
+PUBLIC VOID hal_BootEnterMonitor(VOID);
+
+
+
+// =============================================================================
+// hal_BootRegisterBeforeMonCallback
+// -----------------------------------------------------------------------------
+/// Call this function to register a callback function which is run
+/// before entering the boot monitor.
+// =============================================================================
+PUBLIC VOID hal_BootRegisterBeforeMonCallback(VOID (*funcPtr)(VOID));
+
+
+
+/// @} // end of the system group
+
+
+
+#endif // _HAL_SYS_H_
+
diff --git a/board/rda/common/include/hal_tcu.h b/board/rda/common/include/hal_tcu.h
new file mode 100644
index 0000000000..242c249d84
--- /dev/null
+++ b/board/rda/common/include/hal_tcu.h
@@ -0,0 +1,330 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/include/hal_tcu.h $ //
+// $Author: huazeng $ //
+// $Date: 2013-07-08 14:14:23 +0800 (Mon, 08 Jul 2013) $ //
+// $Revision: 20589 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_tcu.h //
+/// That file provides the TCU driver API //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef _HAL_TCU_H_
+#define _HAL_TCU_H_
+
+/// @defgroup tcu HAL TCU driver
+///
+/// @{
+// =============================================================================
+// MACROS
+// =============================================================================
+
+typedef enum
+{
+ HAL_TCU_TCO_GMSK_ON = 0x00000006,
+ HAL_TCU_TCO_TX_OEN = 0x00000007,
+ HAL_TCU_TCO_TX_ON = 0x00000008,
+ HAL_TCU_TCO_RX_ON = 0x00000009,
+ HAL_TCU_TCO_RX_DEC_ON = 0x0000000a,
+ HAL_TCU_TCO_RX_PDN = 0x0000000b,
+} HAL_TCU_TCO_MAPPING_T;
+
+
+// =============================================================================
+// SET_TCO
+// -----------------------------------------------------------------------------
+/// This define must be used to build the TCU events.
+/// It must NOT be used to pass a tcoNumber, for instance it
+/// must NOT be used for the parameters passed to the functions:
+/// hal_TcuSetTco(), hal_TcuClrTco() or hal_TcuPulseTco().
+// =============================================================================
+#define SET_TCO(n) ((n<<1) | 0x1)
+
+// =============================================================================
+// CLR_TCO
+// -----------------------------------------------------------------------------
+/// This define must be used to build the TCU events.
+/// It must NOT be used to pass a tcoNumber, for instance it
+/// must NOT be used for the parameters passed to the functions:
+/// hal_TcuSetTco(), hal_TcuClrTco() or hal_TcuPulseTco().
+// =============================================================================
+#define CLR_TCO(n) ((n<<1))
+
+// =============================================================================
+// MASK_TCO
+// -----------------------------------------------------------------------------
+/// This define must be used to build the TCU events.
+/// It must NOT be used to pass a tcoNumber, for instance it
+/// must NOT be used for the parameters passed to the functions:
+/// hal_TcuSetTco(), hal_TcuClrTco() or hal_TcuPulseTco().
+// =============================================================================
+#define MASK_TCO(n) (1<<n)
+
+// =============================================================================
+// HAL_TCU_MASK_DTX
+// -----------------------------------------------------------------------------
+/// These defines are used to disable the different Tx signals in case of DTX.
+// =============================================================================
+#define HAL_TCU_MASK_TCO_GMSK_ON MASK_TCO(HAL_TCU_TCO_GMSK_ON)
+#define HAL_TCU_MASK_TCO_TX_OEN MASK_TCO(HAL_TCU_TCO_TX_OEN)
+#define HAL_TCU_MASK_TCO_TX_ON MASK_TCO(HAL_TCU_TCO_TX_ON)
+
+// =============================================================================
+// HAL_TCU_MASK_RX
+// -----------------------------------------------------------------------------
+/// These defines are used to disable the different Rx signals in case of Rx on.
+// =============================================================================
+#define HAL_TCU_MASK_TCO_RX_PDN MASK_TCO(HAL_TCU_TCO_RX_PDN)
+#define HAL_TCU_MASK_TCO_RX_DEC_ON MASK_TCO(HAL_TCU_TCO_RX_DEC_ON)
+
+// Values copied by "tcu.h". If tcu.h changes these values need to be updated.
+#define HAL_TCU_MASK_RAMP (31<<19)
+#define HAL_TCU_MASK_DIGRF_STROBE (1<<25)
+#define HAL_TCU_MASK_RF_SPI_MARKED_CMD (1<<31)
+
+// =============================================================================
+// TCO
+// -----------------------------------------------------------------------------
+/// This define can be used for the parameters passed to the functions:
+/// hal_TcuSetTco(), hal_TcuClrTco() or hal_TcuPulseTco().
+// =============================================================================
+#define TCO(n) (n)
+
+#define TCO_UNUSED (-1)
+
+
+// =============================================================================
+// Types
+// =============================================================================
+
+// =============================================================================
+// HAL_TCU_EVENT_ID_T
+// -----------------------------------------------------------------------------
+/// This type lists all the TCU events
+// =============================================================================
+typedef enum {
+ // TODO: should get rid of useless event
+ /// Clear TCO #0
+ HAL_TCU_TCO_0_CLR, //0
+ /// Set TCO #0
+ HAL_TCU_TCO_0_SET,
+ HAL_TCU_TCO_1_CLR,
+ HAL_TCU_TCO_1_SET,
+ HAL_TCU_TCO_2_CLR,
+ HAL_TCU_TCO_2_SET,
+ HAL_TCU_TCO_3_CLR,
+ HAL_TCU_TCO_3_SET,
+ HAL_TCU_TCO_4_CLR,
+ HAL_TCU_TCO_4_SET,
+ HAL_TCU_TCO_5_CLR, // 10
+ HAL_TCU_TCO_5_SET,
+ /// stop modulation
+ HAL_TCU_STOP_GMSK,
+ /// starts modulation and output on IQ DAC
+ HAL_TCU_START_GMSK,
+ HAL_TCU_HIGHZ_IQ_DAC,
+ HAL_TCU_DRIVE_IQ_DAC,
+ HAL_TCU_DISABLE_IQ_DAC,
+ HAL_TCU_ENABLE_IQ_DAC,
+ /// disable IQ ADC
+ HAL_TCU_DISABLE_IQ_ADC,
+ /// enable IQ ADC
+ HAL_TCU_ENABLE_IQ_ADC,
+ /// stop recording IQ samples
+ HAL_TCU_STOP_RFIN_RECORD,
+ /// start recording IQ samples
+ HAL_TCU_START_RFIN_RECORD,
+ /// Clear RF_PDN
+ HAL_TCU_CLR_PDN,
+ /// Set RF_PDN
+ HAL_TCU_SET_PDN,
+ /// sends a sequence of commands to the RF chip through spi
+ HAL_TCU_SEND_SPI_CMD,
+ HAL_TCU_NEXT_GAIN,
+ HAL_TCU_FIRST_GAIN,
+ /// set the next value in fifo on frequency control DAC
+ HAL_TCU_SET_NEXT_FC,
+ /// send the pre-programmed ramp0 and stay at the final level
+ HAL_TCU_PA_USE_RAMP0,
+ HAL_TCU_PA_USE_RAMP1,
+ HAL_TCU_PA_USE_RAMP2,
+ HAL_TCU_PA_USE_RAMP3,
+ HAL_TCU_PA_USE_RAMP4,
+ HAL_TCU_RX_SOC,
+ HAL_TCU_DIGRF_STB,
+ /// trigger one irq on the BCPU
+ HAL_TCU_TRIGGER_BCPU_SOFTIRQ0,
+ HAL_TCU_TRIGGER_BCPU_SOFTIRQ1,
+ /// trigger one irq on the XCPU
+ HAL_TCU_TRIGGER_XCPU_SOFTIRQ0,
+ HAL_TCU_TRIGGER_XCPU_SOFTIRQ1,
+ /// End of the WakeUp mode
+ HAL_TCU_WAKEUP_DONE,
+ HAL_TCU_NO_EVENT = 0x3f
+} HAL_TCU_EVENT_ID_T;
+
+
+// =============================================================================
+// hal_TcuInit
+// -----------------------------------------------------------------------------
+/// Initialize the TCU
+/// This function opens the TCU and configures the TCO polarities.
+/// @param tcoPolarity Bitfield where '0' means the corresponding. Only the
+/// lowest 17 bits are relevant.
+/// TCO output is active high and '1' that it is active low
+// =============================================================================
+PUBLIC VOID hal_TcuOpen(UINT32 tcoPolarity);
+
+
+// =============================================================================
+// hal_TcuStart
+// -----------------------------------------------------------------------------
+/// Start the TCU with an initial Value
+/// @param value Value loaded in the TCU counter when it starts.
+// =============================================================================
+PUBLIC VOID hal_TcuStart (UINT16 value);
+
+
+
+// =============================================================================
+// hal_TcuStop
+// -----------------------------------------------------------------------------
+/// Stops the TCU
+// =============================================================================
+PUBLIC VOID hal_TcuStop(VOID);
+
+
+
+// =============================================================================
+// hal_TcuSetTco
+// -----------------------------------------------------------------------------
+/// This function sets the corresponding TCO line to its
+/// active level (which depends on TCO's polarity)
+/// @param tcoNumber: index of the TCO to be set,
+/// you can use the define TCO(n). No need to shift the number.
+// =============================================================================
+PUBLIC VOID hal_TcuSetTco(UINT8 tcoNumber);
+
+
+
+// =============================================================================
+// hal_TcuClrTco
+// -----------------------------------------------------------------------------
+/// This function sets the corresponding TCO line to its
+/// inactive level (which depends on TCO's polarity)
+/// @param tcoNumber: index of the TCO to be reset,
+/// you can use the define TCO(n). No need to shift the number.
+// =============================================================================
+PUBLIC VOID hal_TcuClrTco(UINT8 tcoNumber);
+
+
+
+// =============================================================================
+// hal_TcuPulseTco
+// -----------------------------------------------------------------------------
+/// This function must only be called when the TCU timings are not available.
+/// Send a pulse on a TCO.
+/// @param tcoNumber: index of the TCO, you can use the define TCO(n). No need
+/// to shift the number.
+/// @param time Time in number of 16384Hz tick between the rise and the fall
+// =============================================================================
+PUBLIC VOID hal_TcuPulseTco(UINT8 tcoNumber, UINT16 time);
+
+
+
+// =============================================================================
+// hal_TcuGetCount
+// -----------------------------------------------------------------------------
+/// Get the TCU counter
+/// Only the less significant 14 bits are
+/// relevant.
+/// @return The TCU counter
+// =============================================================================
+PUBLIC UINT32 hal_TcuGetCount(VOID);
+
+
+
+// =============================================================================
+// hal_TcuSetWrap
+// -----------------------------------------------------------------------------
+/// Set the wrap value
+/// It is the time when the programming table becomes
+/// the active table. The counter's next value is 0.
+/// Only the less significant 14 bits are
+/// relevant to set the counter.
+/// @param value Wrap Value
+// =============================================================================
+PUBLIC VOID hal_TcuSetWrap(UINT32 value);
+
+
+// =============================================================================
+// hal_TcuSetEvent
+// -----------------------------------------------------------------------------
+/// Set a TCU event.
+/// This function handles the increment of TCU's event
+/// pointer.
+/// @param evId Event id, that is the event to set.
+/// @param time Time when the foresaid event is to be
+/// triggered.
+// =============================================================================
+PUBLIC VOID hal_TcuSetEvent( HAL_TCU_EVENT_ID_T evId, UINT16 time);
+
+
+// =============================================================================
+// hal_TcuClrEvtRange
+// -----------------------------------------------------------------------------
+/// Remove a range of events.
+///
+/// @param first first event to be removed.
+/// @param last last event to be removed.
+// =============================================================================
+PUBLIC VOID hal_TcuClrEvtRange(UINT8 first, UINT8 last);
+
+// =============================================================================
+// hal_TcuClrAllEvents
+// -----------------------------------------------------------------------------
+/// Remove all active and programmed events
+///
+// =============================================================================
+PUBLIC VOID hal_TcuClrAllEvents(VOID);
+
+
+// =============================================================================
+// hal_TcuSetEvtPtr
+// -----------------------------------------------------------------------------
+/// Set TCU's event pointer
+/// @param tcuPtr new pointer position.
+// =============================================================================
+PUBLIC VOID hal_TcuSetEvtPtr(UINT8 tcuPtr);
+
+
+
+// =============================================================================
+// hal_TcuGetEvtPtr
+// -----------------------------------------------------------------------------
+/// Get current value of TCU's event pointer.
+/// @return The current value of the TCU's event pointer.
+// =============================================================================
+PUBLIC UINT8 hal_TcuGetEvtPtr(VOID);
+
+
+/// @} // <-- End of the TCU group
+#endif // _HAL_TCU_H_
+
+
+
diff --git a/board/rda/common/include/halp_gpio.h b/board/rda/common/include/halp_gpio.h
new file mode 100644
index 0000000000..d45bc43a90
--- /dev/null
+++ b/board/rda/common/include/halp_gpio.h
@@ -0,0 +1,64 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/src/halp_gpio.h $ //
+// $Author: admin $ //
+// $Date: 2010-07-07 20:28:03 +0800 (Wed, 07 Jul 2010) $ //
+// $Revision: 269 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file halp_gpio.h //
+/// This file contains Granite's GPIO driver implementation //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+
+#ifndef _HALP_GPIO_H_
+#define _HALP_GPIO_H_
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+// =============================================================================
+// HAL_GPIO_BIT
+// -----------------------------------------------------------------------------
+/// This macro is used by internal code to convert gpio number to bit.
+/// It masks the upper bit so it can be used directly with #HAL_GPIO_GPIO_ID_T.
+// =============================================================================
+#define HAL_GPIO_BIT(n) (1<<((n)&0x3f))
+
+// =============================================================================
+// HAL_GPO_BIT
+// -----------------------------------------------------------------------------
+/// This macro is used by internal code to convert gpio number to bit.
+/// It masks the upper bit so it can be used directly with #HAL_GPIO_GPO_ID_T.
+// =============================================================================
+#define HAL_GPO_BIT(n) (1<<((n)&0x3f))
+
+
+
+
+// =============================================================================
+// hal_GpioIrqHandler
+// -----------------------------------------------------------------------------
+/// GPIO module IRQ handler
+///
+/// Clear the IRQ and call the IRQ handler
+/// user function
+/// @param interruptId The interruption ID
+// =============================================================================
+PROTECTED VOID hal_GpioIrqHandler(UINT8 interruptId);
+
+
+#endif //HAL_GPIO_H
diff --git a/board/rda/common/include/halp_sys.h b/board/rda/common/include/halp_sys.h
new file mode 100644
index 0000000000..e962ac8aca
--- /dev/null
+++ b/board/rda/common/include/halp_sys.h
@@ -0,0 +1,404 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+//
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/src/halp_sys.h $
+// $Author: huazeng $
+// $Date: 2013-08-05 11:38:03 +0800 (Mon, 05 Aug 2013) $
+// $Revision: 20799 $
+//
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file halp_sys.h //
+/// That file provides the private interface for the System Driver. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _HALP_SYS_H_
+#define _HALP_SYS_H_
+
+// =============================================================================
+//
+// -----------------------------------------------------------------------------
+// =============================================================================
+
+
+// =============================================================================
+// MACROS
+// =============================================================================
+
+
+// =============================================================================
+// HAL_SYS_FREQ_MAX_RESOURCE_NB
+// -----------------------------------------------------------------------------
+/// Maximum number of resources
+// =============================================================================
+#define HAL_SYS_FREQ_MAX_RESOURCE_NB 64
+
+
+// =============================================================================
+// HAL_SYS_FREQ_WIDTH
+// -----------------------------------------------------------------------------
+/// Width of the bitfield holding a frequency value in bits.
+/// Not sure that scales pretty well...
+// =============================================================================
+#define HAL_SYS_FREQ_WIDTH 8
+
+
+
+// default clock generation params
+// PCM_CLOCKS_POLARITY : INVERT_PCM_BCK | INVERT_PCM_MCK
+#define PCM_CLOCKS_POLARITY 0
+// ANA_CLOCKS_POLARITY : INVERT_AU_ADC_CLK | INVERT_TX_FS_CLK
+// | INVERT_RX_FS_CLK | INVERT_PA_DAC_CLK | INVERT_AFC_DAC_CLK
+#define ANA_CLOCKS_POLARITY ANA_ACCO_GPADC_CLK_POL
+// RF_FS_SETTING : RX_FS_IS_13M, RX_FS_IS_6M5
+#define RF_FS_SETTING RX_FS_IS_6M5
+// AFC_DIVIDER_SETTING : n
+#define AFC_DIVIDER_SETTING 8
+#define GPADC_DIVIDER_SETTING 0x1F
+
+
+#define PLL_CONFIG (SYS_CTRL_PLL_R(4-2) | SYS_CTRL_PLL_F(48-2) | SYS_CTRL_PLL_OD_DIV_BY_1)
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+// =============================================================================
+// HAL_SYS_FREQ_SCAL_USERS_T
+// -----------------------------------------------------------------------------
+/// That type lists all the possible entities (software / drivers / peripherals)
+/// that need a specific minimum clock.
+/// This is the internal type for HAL use only. Specific resource identifiers
+/// are exported through the interface for use in upper layer or by upper
+/// layers.
+/// The list attempts to be exhaustive, but could contain useless fields
+/// and lack some others. Don't forget to adjust #HAL_SYS_TENS_QTY consequently.
+// =============================================================================
+typedef enum
+{
+ HAL_SYS_FREQ_PWM, // 0
+ HAL_SYS_FREQ_SIM,
+ HAL_SYS_FREQ_SPI,
+ HAL_SYS_FREQ_TRACE,
+ HAL_SYS_FREQ_UART,
+ HAL_SYS_FREQ_I2C, // 5
+ HAL_SYS_FREQ_RF_SPI,
+ HAL_SYS_FREQ_DEBUG_HOST,
+ HAL_SYS_FREQ_AIF,
+ HAL_SYS_FREQ_AUDIO,
+ HAL_SYS_FREQ_HAL_NULL_0, // 10
+ HAL_SYS_FREQ_SDMMC,
+ HAL_SYS_FREQ_SDMMC2,
+ HAL_SYS_FREQ_LCD,
+ HAL_SYS_FREQ_CLK_OUT,
+ HAL_SYS_FREQ_CAMCLK, // 15
+ HAL_SYS_FREQ_USB,
+ HAL_SYS_FREQ_DMA,
+ HAL_SYS_FREQ_VOC,
+ HAL_SYS_FREQ_AP,
+ HAL_SYS_FREQ_BTCPU, // 20
+ // !!! Add new sys users above !!!
+ HAL_SYS_FREQ_SYS_USER_END,
+ HAL_SYS_FREQ_SYS_LAST_USER = HAL_SYS_FREQ_SYS_USER_END-1,
+
+// The last sys user ID should be less than the first platform user
+// ID, which is 25 in hal_sys.h at present.
+// This is checked in hal_SysSetupSystemClock, PROTECTED function
+// called only once during hal_Open().
+ HAL_SYS_USER_START = HAL_SYS_FREQ_PLATFORM_FIRST_USER,
+
+ HAL_SYS_TOTAL_USERS_QTY = HAL_SYS_FREQ_USER_QTY
+
+} HAL_SYS_FREQ_SCAL_USERS_T;
+
+
+// =============================================================================
+// HAL_SYS_FREQ_SCAL_FREQ_T
+// -----------------------------------------------------------------------------
+/// This list the possible value for the frequency required by the frequence
+/// scaling users. This type differs from the one in the interface because
+/// the value here have to be stored into the #HAL_SYS_FREQ_WIDTH (8 bits) wide
+/// field. It is only used in the managing of the frequency scaling.
+// =============================================================================
+typedef enum
+{
+ HAL_SYS_FREQ_SCAL_32K = 0,
+ HAL_SYS_FREQ_SCAL_13M = 1,
+ HAL_SYS_FREQ_SCAL_26M = 2,
+ HAL_SYS_FREQ_SCAL_39M = 3,
+ HAL_SYS_FREQ_SCAL_52M = 4,
+ HAL_SYS_FREQ_SCAL_78M = 5,
+ HAL_SYS_FREQ_SCAL_104M = 6,
+ HAL_SYS_FREQ_SCAL_156M = 7,
+#if (CHIP_HAS_ASYNC_TCU)
+ HAL_SYS_FREQ_SCAL_208M = 8,
+ HAL_SYS_FREQ_SCAL_250M = 9,
+ HAL_SYS_FREQ_SCAL_312M = 10,
+#endif
+ HAL_SYS_FREQ_SCAL_QTY
+
+} HAL_SYS_FREQ_SCAL_FREQ_T;
+
+
+//// =============================================================================
+//// EXPORTED VARIABLES
+//// =============================================================================
+//
+//#if (CHIP_HAS_ASYNC_TCU)
+//// ============================================================================
+//// g_bootSysTcuRunningAt26M
+//// ----------------------------------------------------------------------------
+///// Whether TCU is running at 26M
+//// ============================================================================
+//PUBLIC EXPORT BOOL g_bootSysTcuRunningAt26M;
+//#endif
+//
+//// =============================================================================
+//// g_halSysFreqScalRegistry
+//// -----------------------------------------------------------------------------
+///// This array is used to store the frequency required by each frequency scaling
+///// user, a dime a tens.
+//// =============================================================================
+//PROTECTED EXPORT UINT32 g_halSysFreqScalRegistry[HAL_SYS_FREQ_MAX_RESOURCE_NB/4];
+//
+//// ============================================================================
+//// g_halSysSystemFreq
+//// ----------------------------------------------------------------------------
+///// Global var to have a view of the system frequency
+//// ============================================================================
+//PROTECTED EXPORT HAL_SYS_FREQ_T g_halSysSystemFreq;
+//
+//// ============================================================================
+//// g_halNumberOfUserPerFreq
+//// ----------------------------------------------------------------------------
+///// This array is used to calculate the minimum system frequency to set
+///// (that is the maximum required by a module among all the module) in a
+///// constant time (relative to the number of users).
+/////
+//// ============================================================================
+//PROTECTED EXPORT UINT32 g_halNumberOfUserPerFreq[HAL_SYS_FREQ_SCAL_QTY];
+//
+//
+//// =============================================================================
+//// FUNCTIONS
+//// =============================================================================
+//
+//// =============================================================================
+//// hal_SysFreqScalSet
+//// -----------------------------------------------------------------------------
+///// Set the required frequency for a given user in the frequency scaling
+///// registry.
+///// @param user Frequency scaling user Id.
+///// @param freq Minimum frequency required by this user.
+//// =============================================================================
+//INLINE VOID hal_SysFreqScalSet(HAL_SYS_FREQ_SCAL_USERS_T user, HAL_SYS_FREQ_SCAL_FREQ_T freq)
+//{
+// UINT8* registry = (UINT8*)g_halSysFreqScalRegistry;
+//
+// // We exit the previous frequency class
+// g_halNumberOfUserPerFreq[registry[user]] -=1;
+//
+// // To enter the new one
+// g_halNumberOfUserPerFreq[freq] += 1;
+//
+// // Update the registry
+// registry[user] = freq;
+//}
+//
+//
+//
+//// =============================================================================
+//// hal_SysFreqScalGet
+//// -----------------------------------------------------------------------------
+///// Get the required frequency for a given user.
+///// @return The frequency required by a given user.
+//// =============================================================================
+//INLINE HAL_SYS_FREQ_SCAL_FREQ_T hal_SysFreqScalGet(HAL_SYS_FREQ_SCAL_USERS_T user)
+//{
+// UINT8* registry = (UINT8*)g_halSysFreqScalRegistry;
+// return (registry[user]);
+//}
+//
+//// =============================================================================
+//// hal_SysSF2FSF
+//// -----------------------------------------------------------------------------
+///// Convert a System Frequency into a Frequency Scaling Frequency
+//// =============================================================================
+//PROTECTED HAL_SYS_FREQ_SCAL_FREQ_T hal_SysSF2FSF(HAL_SYS_FREQ_T freq);
+//
+//
+//
+//// =============================================================================
+//// hal_SysFSF2SF
+//// -----------------------------------------------------------------------------
+///// Convert a Frequency Scaling Frequency into a System Frequency
+//// =============================================================================
+//PROTECTED HAL_SYS_FREQ_T hal_SysFSF2SF(HAL_SYS_FREQ_SCAL_FREQ_T fsfFreq);
+//
+//
+//
+//// =============================================================================
+//// hal_SysSetupSystemClock
+//// -----------------------------------------------------------------------------
+///// Configure the initial settings of the system clock.
+///// This function is to be called only by hal_init.
+///// @param fastClockSetup Initial System Clock.
+//// =============================================================================
+//PROTECTED VOID hal_SysSetupSystemClock(HAL_SYS_FREQ_T fastClockSetup);
+//
+//
+//
+//// =============================================================================
+//// hal_SysXcpuSleep
+//// -----------------------------------------------------------------------------
+///// Put the XCPU to sleep
+///// @param wakeUpMask Set the WakeUp mask, a bitfield where a bit to '1'
+///// means that the corresponding IRQ can wake up the CPU.
+//// =============================================================================
+//INLINE VOID hal_SysXcpuSleep(VOID)
+//{
+// hwp_sysIrq->Cpu_Sleep = SYS_IRQ_SLEEP;
+// // flush the write buffer to ensure we sleep before exiting this function
+// UINT32 clkSysDisable __attribute__((unused)) = hwp_sysIrq->Cpu_Sleep;
+//}
+//
+//// =============================================================================
+//// hal_SysEnablePLL
+//// -----------------------------------------------------------------------------
+///// Enable PLL
+//// =============================================================================
+//PROTECTED VOID hal_SysEnablePLL(VOID);
+//
+//// =============================================================================
+//// hal_SysDisablePLL
+//// -----------------------------------------------------------------------------
+///// Disable PLL and switch on low clock
+//// =============================================================================
+//PROTECTED VOID hal_SysDisablePLL(VOID);
+//
+//// =============================================================================
+//// hal_SysGetPLLLock
+//// -----------------------------------------------------------------------------
+///// Return PLL lock
+///// @return PLL status
+///// If \c TRUE, PLL locked.
+///// If \c FALSE, PLL not locked.
+//// =============================================================================
+//PROTECTED BOOL hal_SysGetPLLLock(VOID);
+//
+//
+//#ifdef CHIP_IS_MODEM
+//// =============================================================================
+//// hal_SysApHostEnable
+//// -----------------------------------------------------------------------------
+///// Enable or disable usb host.
+///// This is useful to inform hal_SysProcessHostMonitor() that the AP Host functions
+///// must be called to process the host commands.
+///// @param enable \c TRUE to enable, \c FALSE to disable.
+//// =============================================================================
+//PROTECTED VOID hal_SysApHostEnable(BOOL enable);
+//
+//
+//// =============================================================================
+//// hal_SysEnableApClock
+//// -----------------------------------------------------------------------------
+///// Enable or disable AP clock.
+///// @param enable \c TRUE to enable, \c FALSE to disable.
+//// =============================================================================
+//PROTECTED VOID hal_SysEnableApClock(BOOL enable);
+//
+//
+//// =============================================================================
+//// hal_SysEnableApIrq
+//// -----------------------------------------------------------------------------
+///// Enable or disable AP irq.
+///// @param enable \c TRUE to enable, \c FALSE to disable.
+//// =============================================================================
+//PROTECTED VOID hal_SysEnableApIrq(BOOL enable);
+//
+//
+//// =============================================================================
+//// hal_SysApIrqActive
+//// -----------------------------------------------------------------------------
+///// Check AP irq status.
+///// @return TRUE if AP irq is active; FALSE otherwise
+//// =============================================================================
+//PROTECTED BOOL hal_SysApIrqActive(VOID);
+//
+//
+//#else // !CHIP_IS_MODEM
+//// =============================================================================
+//// hal_SysSetupClkUart
+//// -----------------------------------------------------------------------------
+///// Setup the uart clock
+///// Be careful not to use it with a uart2 which doesn't exist here (yet)
+///// or any improper parameter.
+///// @param Uart_id Id of the uart whose clock we want to setup
+///// @param divider Divider of the clock, from 2 to 1025
+//// =============================================================================
+//INLINE VOID hal_SysSetupClkUart(HAL_UART_ID_T uartId, UINT16 divider)
+//{
+// hwp_sysCtrl->Cfg_Clk_Uart[uartId] = divider-2;
+//}
+//
+//
+//// =============================================================================
+//// hal_SysSetupClkPwm
+//// -----------------------------------------------------------------------------
+///// Setup the PWM clock
+///// The PWM clock is got by dividing the system clock
+///// @param divider The divider used
+//// =============================================================================
+//INLINE VOID hal_SysSetupClkPwm(UINT8 divider)
+//{
+// hwp_sysCtrl->Cfg_Clk_PWM = divider;
+//}
+//#endif // !CHIP_IS_MODEM
+//
+//
+//// =============================================================================
+//// hal_SysSetupSystemClock
+//// -----------------------------------------------------------------------------
+///// Configure the initial settings of the system clocks.
+///// This function is to be called only by hal_init.
+///// It also checks the validity of the public enum for HAL_SYS_FREQ_T and
+///// the internal one HAL_SYS_FREQ_SCAL_USERS_T use for frequency scaling.
+///// @param fastClockSetup Initial System Clock.
+//// =============================================================================
+//PROTECTED VOID hal_SysSetupSystemClock(HAL_SYS_FREQ_T fastClockSetup);
+//
+//
+//
+//// =============================================================================
+//// hal_SysUpdateSystemFrequency
+//// -----------------------------------------------------------------------------
+///// Set the system frequency to the highest minimal frequency required
+///// by the user of the system.
+//// =============================================================================
+//PROTECTED VOID hal_SysUpdateSystemFrequency();
+//
+//
+//// =============================================================================
+//// hal_SysUsbHostEnable
+//// -----------------------------------------------------------------------------
+///// Enable or disable usb host.
+///// This is useful to inform hal_SysProcessIdle() that the USB Host functions
+///// must be called to process the host commands.
+///// @param enable \c TRUE to enable, \c FALSE to disable.
+//// =============================================================================
+//PROTECTED VOID hal_SysUsbHostEnable(BOOL enable);
+
+
+#endif // HAL_SYS_H
+
+
diff --git a/board/rda/common/include/rda_gic.h b/board/rda/common/include/rda_gic.h
new file mode 100644
index 0000000000..13c9230c05
--- /dev/null
+++ b/board/rda/common/include/rda_gic.h
@@ -0,0 +1,67 @@
+#ifndef __RDA_GIC_H
+#define __RDA_GIC_H
+
+#if defined(CONFIG_MACH_RDA8850E)
+#define RDA50E_GIC_BASE 0x20970000
+#define RDA_GICD_BASE (RDA50E_GIC_BASE + 0x1000)
+#define RDA_GICC_BASE (RDA50E_GIC_BASE + 0x2000)
+#elif defined(CONFIG_MACH_RDA8810H)
+#define RDA10H_GIC_BASE 0x20970000
+#define RDA_GICD_BASE (RDA10H_GIC_BASE + 0x1000)
+#define RDA_GICC_BASE (RDA10H_GIC_BASE + 0x2000)
+#else
+#error "unknown machine !"
+#endif
+
+#define VID_ARM 0x43B
+
+#define GIC_CPU_CTRL 0x00
+#define GIC_CPU_PRIMASK 0x04
+#define GIC_CPU_BINPOINT 0x08
+#define GIC_CPU_INTACK 0x0c
+#define GIC_CPU_EOI 0x10
+#define GIC_CPU_RUNNINGPRI 0x14
+#define GIC_CPU_HIGHPRI 0x18
+#define GIC_CPU_IID 0xFC
+
+#define GIC_DIST_CTRL 0x000
+#define GIC_DIST_CTR 0x004
+#define GIC_DIST_IID 0x008
+#define GIC_DIST_IGROUP 0x080
+#define GIC_DIST_ENABLE_SET 0x100
+#define GIC_DIST_ENABLE_CLEAR 0x180
+#define GIC_DIST_PENDING_SET 0x200
+#define GIC_DIST_PENDING_CLEAR 0x280
+#define GIC_DIST_ACTIVE_SET 0x300
+#define GIC_DIST_ACTIVE_CLEAR 0x380
+#define GIC_DIST_PRI 0x400
+#define GIC_DIST_TARGET 0x800
+#define GIC_DIST_CONFIG 0xc00
+#define GIC_DIST_SOFTINT 0xf00
+
+#define GICH_HCR 0x0
+#define GICH_VTR 0x4
+#define GICH_VMCR 0x8
+#define GICH_MISR 0x10
+#define GICH_EISR0 0x20
+#define GICH_EISR1 0x24
+#define GICH_ELRSR0 0x30
+#define GICH_ELRSR1 0x34
+#define GICH_APR 0xf0
+#define GICH_LR0 0x100
+
+#define GICH_HCR_EN (1 << 0)
+#define GICH_HCR_UIE (1 << 1)
+
+#define GICH_LR_VIRTUALID (0x3ff << 0)
+#define GICH_LR_PHYSID_CPUID_SHIFT (10)
+#define GICH_LR_PHYSID_CPUID (7 << GICH_LR_PHYSID_CPUID_SHIFT)
+#define GICH_LR_STATE (3 << 28)
+#define GICH_LR_PENDING_BIT (1 << 28)
+#define GICH_LR_ACTIVE_BIT (1 << 29)
+#define GICH_LR_EOI (1 << 19)
+
+#define GICH_MISR_EOI (1 << 0)
+#define GICH_MISR_U (1 << 1)
+
+#endif
diff --git a/board/rda/common/include/rda_lcdc.h b/board/rda/common/include/rda_lcdc.h
new file mode 100644
index 0000000000..4da163de0b
--- /dev/null
+++ b/board/rda/common/include/rda_lcdc.h
@@ -0,0 +1,163 @@
+#ifndef __RDA_LCDC_H__
+#define __RDA_LCDC_H__
+
+#include <common.h>
+#include <asm/arch/cs_types.h>
+
+/*LCDC reg offset start*/
+#define LCDC_COMMAND 0x0
+#define LCDC_STATUS 0x04
+#define LCDC_EOF_IRQ 0x08
+#define LCDC_EOF_IRQ_MASK 0xC
+#define LCD_CTRL 0x10
+#define LCD_TIMING 0x14
+#define LCDC_MEM_ADDRESS 0x18
+#define LCD_STRIDE_OFFSET 0x1C
+#define LCDC_SINGLE_ACCESS 0x20
+#define LCDC_SPILCD_CONFIG 0x24
+#define LCDC_SPILCD_RD 0x28
+#define LCDC_DCT_SHIFT_UV_REG1 0x2C
+#define DPI_CONFIG 0x30
+#define DPI_FRAME0_ADDR 0x34
+#define DPI_FRAME0_CON 0x38
+#define DPI_FRAME1_ADRR 0x3C
+#define DPI_FRAME1_CON 0x40
+#define DPI_FRAME2_ADRR 0x44
+#define DPI_FRAME2_CON 0x48
+#define DPI_SIZE 0x4C
+#define DPI_FIFO_CTRL 0x50
+#define DPI_THROT 0x54
+#define DPI_POL 0x58
+#define DPI_TIME0 0x5C
+#define DPI_TIME1 0x60
+#define DPI_TIME2 0x64
+#define DPI_TIME3 0x68
+#define DPI_STATUS 0x6C
+#define LCDC_DITHER_CTRL 0x70
+#define LCDC_DITHER_MATRIX0_0 0x74
+#define LCDC_DITHER_MATRIX0_1 0x78
+#define LCDC_DITHER_MATRIX1 0x7C
+#define TECON 0x80
+#define TECON2 0x84
+#define DSI_REG_OFFSET 0x400
+
+/* rgb order */
+#define RGB_ORDER_RGB (0<<3)
+#define RGB_ORDER_BGR (1<<3)
+
+/* pixel format */
+#define RGB_PIX_FMT_RGB565 (0<<4)
+#define RGB_PIX_FMT_RGB888 (1<<4)
+#define RGB_PIX_FMT_XRGB888 (2<<4)
+#define RGB_PIX_FMT_RGBX888 (3<<4)
+
+#define MIPI_DSI_ENABLE (1<<9)
+#define MIPI_DSI_DISABLE (0<<9)
+
+#define MIPI_CMD_SEL_CMD (1<<20)
+#define REG_PEND_REQ(n) (((n)&0x1F)<<21)
+
+#define DPI_FRAME_LINE_STEP(n) (((n)&0x1FFF)<<16)
+#define DPI_FRAME_VALID (1<<0)
+
+//dpi size
+#define VERTICAL_PIX_NUM(n) (((n)&0x7FF)<<16)
+#define HORIZONTAL_PIX_NUM(n) (((n)&0x7FF)<<0)
+
+//dct_shift_uv_reg1
+#define DCT_SHIFT_UV_ENABLE (1<<30)
+#define LCDC_RGB_WAIT (1<<30)
+
+/*dpi_fifo_ctrl*/
+#define DPI_DATA_FIFO_LOWTHRES(n) (((n)&0x3FF)<<16)
+#define DPI_DATA_FIFO_RST_AUTO (1<<1)
+#define DPI_DATA_FIFO_RST (1<<0)
+
+#define MIPI_DSI_LANE(n) (((n)&0x3)<<0)
+
+//gd_eof_irq
+#define LCDC_EOF_CAUSE (1 << 0)
+#define LCDC_VSYNC_RISE (1 << 2)
+#define LCDC_VSYNC_FALL (1 << 3)
+#define LCDC_DPI_OVERFLOW (1 << 4)
+#define LCDC_DPI_FRAMEOVER (1 << 5)
+#define LCDC_MIPI_INT (1 << 6)
+#define LCDC_EOF_STATUS (1 << 16)
+#define LCDC_IRQ_CLEAR_ALL (~0)
+
+//gd_eof_irq_mask
+#define LCDC_EOF_MASK (1<<0)
+#define LCDC_VSYNC_RISE_MASK (1<<1)
+#define LCDC_VSYNC_FALL_MASK (1<<2)
+#define LCDC_DPI_OVERFLOW_MASK (1<<3)
+#define LCDC_DPI_FRAMEOVER_MAS (1<<4)
+#define LCDC_MIPI_INT_MASK (1<<5)
+#define LCDC_IRQ_MASK_ALL (0x3f)
+
+/*dsi irq status*/
+#define DSI_TX_END_FLAG (1 << 0)
+#define DSI_RX_END_FLAG (1 << 1)
+
+/* lcd mode */
+#define LCD_DSI_MODE (0x1)
+
+struct dsi_timing {
+ u32 off;
+ u32 value;
+};
+
+struct rda_dsi_phy_ctrl {
+ u32 pll[6];
+ struct dsi_timing video_timing[13];
+ struct dsi_timing cmd_timing[8];
+};
+
+struct mipi_panel_info {
+ u8 data_lane;
+ u8 mipi_mode;
+ u8 pixel_format;
+ u8 dsi_format;
+ u8 trans_mode;
+ u8 rgb_order;
+ bool bllp_enable;
+ u32 h_sync_active;
+ u32 h_back_porch;
+ u32 h_front_porch;
+ u32 v_sync_active;
+ u32 v_back_porch;
+ u32 v_front_porch;
+ u8 frame_rate;
+ u8 te_sel;
+ u32 dsi_pclk_rate;
+ const struct rda_dsi_phy_ctrl *dsi_phy_db;
+};
+
+struct lcd_panel_info {
+ u16 width;
+ u16 height;
+ u16 bpp;
+ struct mipi_panel_info mipi_pinfo;
+};
+
+#define LCDC_OUTL(addr, data) writel((data), (addr))
+#define LCDC_INL(addr) readl(addr)
+
+#define LCDC_OR_WITH_REG(addr, data) \
+ do{ \
+ LCDC_OUTL(addr,data | LCDC_INL(addr)); \
+ }while(0);
+
+#define LCDC_AND_WITH_REG(addr, data) \
+ do{ \
+ LCDC_OUTL(addr,data & LCDC_INL(addr)); \
+ }while(0);
+
+PUBLIC VOID rda_write_dsi_reg(u32 offset, u32 value);
+PUBLIC U32 rda_read_dsi_reg(u32 offset);
+PUBLIC VOID set_lcdc_for_cmd(u32 addr, int group_num);
+PUBLIC VOID set_lcdc_for_video(u32 addr, const struct lcd_panel_info *lcd);
+PUBLIC VOID rda_lcdc_set(const struct rda_dsi_phy_ctrl*dsi_phy_db);
+PUBLIC INT rda_lcdc_irq_status(void);
+
+#endif /*__RDA_LCDC_H*/
+
diff --git a/board/rda/common/include/rda_md5.h b/board/rda/common/include/rda_md5.h
new file mode 100644
index 0000000000..e09c16a6e3
--- /dev/null
+++ b/board/rda/common/include/rda_md5.h
@@ -0,0 +1,34 @@
+/*
+ * This file was transplanted with slight modifications from Linux sources
+ * (fs/cifs/md5.h) into U-Boot by Bartlomiej Sieka <tur@semihalf.com>.
+ */
+
+#ifndef _MD5_H
+#define _MD5_H
+
+#include "compiler.h"
+
+struct MD5Context {
+ __u32 buf[4];
+ __u32 bits[2];
+ union {
+ unsigned char in[64];
+ __u32 in32[16];
+ };
+};
+
+/*
+ * Calculate and store in 'output' the MD5 digest of 'len' bytes at
+ * 'input'. 'output' must have enough space to hold 16 bytes.
+ */
+void md5 (unsigned char *input, int len, unsigned char output[16]);
+
+/*
+ * Calculate and store in 'output' the MD5 digest of 'len' bytes at 'input'.
+ * 'output' must have enough space to hold 16 bytes. If 'chunk' Trigger the
+ * watchdog every 'chunk_sz' bytes of input processed.
+ */
+void md5_wd (unsigned char *input, int len, unsigned char output[16],
+ unsigned int chunk_sz);
+
+#endif /* _MD5_H */
diff --git a/board/rda/common/include/rda_mipi_dsi.h b/board/rda/common/include/rda_mipi_dsi.h
new file mode 100644
index 0000000000..b84200bad6
--- /dev/null
+++ b/board/rda/common/include/rda_mipi_dsi.h
@@ -0,0 +1,60 @@
+#ifndef RDA_MIPI_DSI_H
+#define RDA_MIPI_DSI_H
+#include "rda_lcdc.h"
+
+struct rda_dsi_cmd{
+ int dtype;
+ int delay;
+ int dlen;
+ const char *payload;
+};
+
+enum mipi_mode{
+ DSI_VIDEO_MODE,
+ DSI_CMD_MODE,
+};
+
+enum dsi_tx_mode {
+ DSI_CMD,
+ DSI_PULSE,
+ DSI_EVENT,
+ DSI_BURST
+};
+
+enum dsi_cmd_mode {
+ CMD_LP_MODE,
+ CMD_HS_MODE
+};
+
+enum mipi_pixel_fmt {
+ DSI_FMT_RGB565 = 0,
+ DSI_FMT_RGB666,
+ DSI_FMT_RGB666L,
+ DSI_FMT_RGB888
+};
+
+#define DSI_HDR_SHORT_PKT (0 << 5) /*or 0x1*/
+#define DSI_HDR_LONG_PKT (0x2 << 5) /*or 0x3*/
+#define DSI_HDR_BTA (1 << 0)
+#define DSI_HDR_HS (1 << 1)
+
+#define DSI_HDR_VC(vc) (((vc) & 0x03) << 14)
+#define DSI_HDR_DTYPE(dtype)(((dtype) & 0x03f) << 8)
+#define DSI_HDR_DATA2(data) (((data) & 0x0ff) << 24)
+#define DSI_HDR_DATA1(data) (((data) & 0x0ff) << 16)
+#define DSI_HDR_WC(wc) (((wc) & 0x0ffff) << 16)
+
+/* dcs read/write */
+#define DTYPE_DCS_SWRITE 0x05 /* short write,with 0 parameter */
+#define DTYPE_DCS_LWRITE 0x39 /* long write */
+
+PUBLIC VOID dsi_set_tx_mode(u8 mode);
+PUBLIC U8 dsi_get_tx_mode(void);
+PUBLIC VOID dsi_enable(bool on);
+PUBLIC VOID dsi_pll_on(bool enable);
+PUBLIC VOID dsi_op_mode(int mode);
+PUBLIC VOID dsi_swrite(u8 cmd);
+PUBLIC INT dsi_lwrite(const struct rda_dsi_cmd *cmds, int cmds_cnt);
+PUBLIC VOID dsi_config(const struct lcd_panel_info *lcd);
+
+#endif
diff --git a/board/rda/common/mipi_loop_test.c b/board/rda/common/mipi_loop_test.c
new file mode 100644
index 0000000000..21f8bc2543
--- /dev/null
+++ b/board/rda/common/mipi_loop_test.c
@@ -0,0 +1,310 @@
+#include <common.h>
+#include "asm/arch/cs_types.h"
+#include "hal_gpio.h"
+#include "rda_mipi_dsi.h"
+#include "rda_lcdc.h"
+#include "hal_camera.h"
+#include <asm/arch/reg_spi.h>
+#include <asm/arch/ispi.h>
+#include <asm/io.h>
+
+#define LDO_ACTIVE_SETTING1 (u32) 0x03
+#define LDO_ACTIVE_SETTING2 (u32) 0x04
+
+#define CONFIG_DRAM_START 0x80000000
+#define CONFIG_TEST_DRAM_ADDR (CONFIG_DRAM_START + 0x2000000)
+
+#define CSI_BUFFER_SRC 0xa0000000
+#define CSI_BUFFER_DST 0xa1000000
+#define CSI_FRAME_BUFFER 0xa2000000
+
+#define AP_GPIO_A_MODE 0x11a0900c
+#define AP_GPIO_B_MODE 0x11a09010
+
+#define PIN_MUX_LCD ~(0x3FFF << 18)
+#define PIN_MUX_CAM ~(0x3FFF << 10)
+
+#define TEST_RESULT_ADDR 0x11C010F4
+
+static const struct rda_dsi_phy_ctrl pll_phy_260mhz = {
+ {0x2800, 0x0000, 0x10, 0xbc00, 0x20a, 0x20b},
+ {
+ {0x6C, 0x53}, {0x10C, 0x3}, {0x108,0x2}, {0x118, 0x4}, {0x11C, 0x0},
+ {0x120, 0xC}, {0x124, 0x2}, {0x128, 0x3}, {0x80, 0xE}, {0x84, 0xC},
+ {0x130, 0xC}, {0x150, 0x12}, {0x170, 0x87A},
+ },
+ {
+ {0x64, 0x3}, {0x134, 0x3}, {0x138, 0xB}, {0x14C, 0x2C}, {0x13C, 0x7},
+ {0x114, 0x40}, {0x170, 0x87A}, {0x140, 0xFF},
+ },
+};
+
+static const struct lcd_panel_info test_lcd = {
+ .width = 480,
+ .height = 800,
+ .bpp = 16,
+ .mipi_pinfo = {
+ .data_lane = 2,
+ .mipi_mode = DSI_VIDEO_MODE,
+ .pixel_format = RGB_PIX_FMT_RGB565,
+ .dsi_format = DSI_FMT_RGB565,
+ .rgb_order = RGB_ORDER_BGR,
+ .trans_mode = DSI_BURST,
+ .bllp_enable = TRUE,
+ .h_sync_active = 0x1c,
+ .h_back_porch = 0x7a,
+ .h_front_porch = 0x7b,
+ .v_sync_active = 0x8,
+ .v_back_porch = 0x5,
+ .v_front_porch = 0x6,
+ .frame_rate = 60,
+ .te_sel = TRUE,
+ .dsi_pclk_rate = 260,//260MHz
+ .dsi_phy_db = &pll_phy_260mhz,
+ }
+};
+
+/***************************************************
+ Synchronization Short Packet Data Type Codes
+ Data Type Description
+ 0x00 Frame Start Code
+ 0x01 Frame End Code
+ 0x02 Line Start Code (Optional)
+ 0x03 Line End Code (Optional)
+
+ Each image frame shall begin with a Frame Start (FS) Packet containing the Frame Start Code.
+ The FS Packet shall be followed by one or more long packets containing image data and zero or more short packets
+ containing synchronization codes.Each image frame shall end with a Frame End (FE) Packet containing the Frame End Code.
+
+ Frame Structure with Embedded Data at the Beginning and End of the Frame
+ YUV Image Data Types
+ Data Type Description
+ 0x18 YUV420 8-bit
+ 0x19 YUV420 10-bit
+ 0x1A Legacy YUV420 8-bit
+ 0x1B Reserved
+ 0x1C YUV420 8-bit (Chroma Shifted Pixel Sampling)
+ 0x1D YUV420 10-bit (Chroma Shifted Pixel Sampling)
+ 0x1E YUV422 8-bit
+ 0x1F YUV422 10-bit
+
+ RGB Image Data
+ defines the data type codes for RGB data formats described in this section.
+ RGB Image Data Types
+ Data Type Description
+ 0x20 RGB444
+ 0x21 RGB555
+ 0x22 RGB565
+ 0x23 RGB666
+ 0x24 RGB888
+ 0x25 Reserved
+ 0x26 Reserved
+ 0x27 Reserved
+*****************************************************/
+static void csi_send_frame(int len)
+{
+ U32 header = 0;
+
+ dsi_enable(FALSE);
+ dsi_op_mode(DSI_CMD); //cmd mode
+ dsi_pll_on(TRUE);
+ rda_write_dsi_reg(0x40,0x2);
+ rda_write_dsi_reg(0x44,0x3);
+ rda_write_dsi_reg(0x180,0x02); //Frame Start Code
+
+ header |= (len & 0xff) << 16;
+ header |= 0x1e << 8;
+ header |= DSI_HDR_LONG_PKT;
+ header |= DSI_HDR_HS;
+ rda_write_dsi_reg(0x184,header); //hs cmd mode send
+ rda_write_dsi_reg(0x188,0x102); //Frame End Code
+ dsi_enable(TRUE);
+}
+
+static void dsi_hs_frame_init(void)
+{
+ int i;
+ unsigned char *frame = (unsigned char *)CSI_BUFFER_SRC;
+ unsigned char *data = (unsigned char *)CSI_FRAME_BUFFER;
+ for (i =0; i < 64; i += 4) {
+ *(data + i) = 0x11;
+ *(data + i + 1) = 0x22;
+ *(data + i + 2) = 0x33;
+ *(data + i + 3) = 0x44;
+ }
+ for (i = 0; i < 32; i++) {
+ frame = (unsigned char *)CSI_BUFFER_SRC + 8 * i;
+ *frame = 0x11;
+ *(frame + 1) = 0x22;
+ *(frame + 2) = 0x33;
+ *(frame + 3) = 0x00;
+ *(frame + 4) = 0x44;
+ *(frame + 5) = 0x00;
+ *(frame + 6) = 0x00;
+ *(frame + 7) = 0x00;
+ }
+}
+
+static void camera_reg_config(void)
+{
+ u8 data_lane = 2;
+ HAL_CAMERA_CFG_T CamConfig = {0,};
+ HAL_CAMERA_IRQ_CAUSE_T mask = {0,0,0,0};
+ CamConfig.cam1PdnRemap.gpioId = HAL_GPIO_NONE;
+ CamConfig.camPdnRemap.gpioId = HAL_GPIO_NONE;
+ CamConfig.camRstRemap.gpioId = HAL_GPIO_NONE;
+ CamConfig.cam1RstRemap.gpioId = HAL_GPIO_NONE;
+
+ hal_SetCameraClkOut(0x101); // 0x11 = 13M 0x1 = 30M
+
+ CamConfig.rstActiveH = FALSE;
+ CamConfig.pdnActiveH = TRUE;
+ CamConfig.dropFrame = FALSE;
+ CamConfig.camClkDiv = 6; // 156/x: 13M(x=12), 26M(x=6)
+ CamConfig.endianess = NO_SWAP;
+ CamConfig.csi_mode = TRUE;
+ CamConfig.num_d_term_en=21;
+ CamConfig.num_hs_settle=21;
+ CamConfig.num_c_term_en=55;
+ CamConfig.num_c_hs_settle=55;
+ CamConfig.csi_cs=0; // 0 use csi1 . 1 use csi2
+ CamConfig.frame_line_number=1;
+
+ CamConfig.cropEnable = FALSE;
+
+ CamConfig.colRatio= 0;
+ CamConfig.rowRatio= 0;
+ CamConfig.reOrder = 4;
+
+ hal_CameraOpen(&CamConfig);
+ hal_CameraIrqSetMask(mask);
+ hal_CameraSetLane(data_lane);
+}
+
+static int receive_data(unsigned char * data)
+{
+ int data_len = 64;
+ int ret, times = 0;
+ HAL_CAMERA_IRQ_CAUSE_T cause = {0};
+
+ HAL_CAMERA_IRQ_CAUSE_T mask = {1,1,1,1};
+ hal_CameraStartXfer(data_len, (UINT8*)data);
+ hal_CameraIrqSetMask(mask);
+ hal_CameraControllerEnable(TRUE);
+
+ csi_send_frame(data_len);
+ mdelay(50);
+ ret = rda_lcdc_irq_status();
+ if (ret)
+ return 1;
+
+ while(times < 100) {
+ hal_getCameraStatus(&cause);
+
+ if (cause.fstart == 1)
+ printf("frame: fstart\n");
+ if (cause.fend == 1) {
+ hal_CameraControllerEnable(FALSE);
+ printf("frame: fend\n");
+ if (hal_CameraStopXfer(FALSE) == XFER_SUCCESS)
+ printf("cam:AXI ok\n");
+ }
+ if (cause.overflow == 1)
+ printf("camera_cause .overflow\n");
+ if (cause.dma == 1)
+ printf("frame: dma donn\n");
+ if (cause.fend == 1)
+ break;
+ udelay(100);
+ times++;
+ }
+ if (times == 100)
+ return 2;
+ else
+ return 0;
+}
+
+static void set_pmu(void)
+{
+ u32 value = 0;
+
+ ispi_open(1);
+ value = ispi_reg_read(LDO_ACTIVE_SETTING1);
+ value |= 0x3 << 7;
+ ispi_reg_write(LDO_ACTIVE_SETTING1, value); // v_cam_act, v_lcd_act
+
+ value = ispi_reg_read(LDO_ACTIVE_SETTING2);
+ value |= 0x3 << 9;
+ ispi_reg_write(LDO_ACTIVE_SETTING2, value); //vcam=1.8v, vlcd=1.8v
+ ispi_open(0);
+}
+
+static void set_pinmux(void)
+{
+ unsigned long temp;
+
+ /* pinmux for lcd */
+ temp = readl(AP_GPIO_A_MODE);
+ temp &= PIN_MUX_LCD;
+ writel(temp, AP_GPIO_A_MODE);
+ /* pinmux for cam */
+ temp = readl(AP_GPIO_B_MODE);
+ temp &= PIN_MUX_CAM;
+ writel(temp, AP_GPIO_B_MODE);
+}
+
+int test_dsi_csi_loop(int times)
+{
+ int test_times = 1;
+ int ret;
+
+ set_pmu();
+ set_pinmux();
+ dsi_hs_frame_init();
+
+ while(test_times <= times) {
+ printf("\n%s: times %d / %d ...\n", __func__, test_times, times);
+ memset((char *)CSI_BUFFER_DST, 0, 100);
+ camera_reg_config();
+ rda_lcdc_set(test_lcd.mipi_pinfo.dsi_phy_db);
+ dsi_config(&test_lcd);
+ set_lcdc_for_cmd(CSI_BUFFER_SRC, 16);
+ ret = receive_data((unsigned char *)CSI_BUFFER_DST);
+
+ if (ret) {
+ printf("mipi_loop failed, ");
+ writel(0xdeaddead, TEST_RESULT_ADDR);
+ if (ret == 1) {
+ printf("dsi failed\n");
+
+ return 1;
+ } else if (ret == 2) {
+ printf("csi failed\n");
+
+ return 1;
+ }
+ }
+
+ // if ret == 0, dsi and csi both correct, loop should be successful
+ if(memcmp((char*)CSI_BUFFER_DST, (char*)CSI_FRAME_BUFFER, 64)) {
+ printf("mipi_loop failed, unknown reason\n");
+ writel(0xdeaddead, TEST_RESULT_ADDR); //unknown reason
+
+ return 1;
+ } else {
+ printf("loop success\n");
+ writel(0x55aaaa55, TEST_RESULT_ADDR); //success
+ }
+
+ printf("test done\n\n");
+ /*
+ char *p= (char *)CSI_BUFFER_DST;
+ for (i = 0; i < 64; i++) {
+ printf("%x\n", *p++);
+ }*/
+ test_times++;
+ }
+
+ return 0;
+}
+
diff --git a/board/rda/common/misc.c b/board/rda/common/misc.c
new file mode 100644
index 0000000000..3497db60ba
--- /dev/null
+++ b/board/rda/common/misc.c
@@ -0,0 +1,19 @@
+#include <common.h>
+#include <asm/arch/hardware.h>
+#include <asm/io.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int dram_init(void)
+{
+ /* dram_init must store complete ramsize in gd->ram_size */
+ gd->ram_size = (_TGT_AP_OS_MEM_SIZE) << 20;
+ return 0;
+}
+
+void dram_init_banksize(void)
+{
+ gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+ gd->bd->bi_dram[0].size = gd->ram_size;
+}
+
diff --git a/board/rda/common/rda_lcdc.c b/board/rda/common/rda_lcdc.c
new file mode 100644
index 0000000000..2ecbe194bd
--- /dev/null
+++ b/board/rda/common/rda_lcdc.c
@@ -0,0 +1,141 @@
+#include <common.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/rda_iomap.h>
+#include "rda_lcdc.h"
+#include "rda_mipi_dsi.h"
+#include <asm/arch/reg_spi.h>
+#include <asm/arch/ispi.h>
+#include <asm/io.h>
+
+#define ALT_MUX_SELECT 0x11a09018
+
+u32 rda_read_dsi_reg(u32 offset)
+{
+ u32 value;
+
+ value = LCDC_INL(RDA_LCDC_BASE + DSI_REG_OFFSET + offset);
+ return value;
+}
+
+void rda_write_dsi_reg(u32 offset, u32 value)
+{
+ LCDC_OUTL(RDA_LCDC_BASE + DSI_REG_OFFSET + offset,value);
+}
+
+void reset_lcdc_fifo(void)
+{
+ LCDC_AND_WITH_REG(RDA_LCDC_BASE + DPI_FIFO_CTRL, ~DPI_DATA_FIFO_RST_AUTO);
+ LCDC_OR_WITH_REG(RDA_LCDC_BASE + DPI_FIFO_CTRL, DPI_DATA_FIFO_RST);
+ LCDC_AND_WITH_REG(RDA_LCDC_BASE + DPI_FIFO_CTRL, ~DPI_DATA_FIFO_RST);
+}
+
+static void rda_dsi_irq_clear(void)
+{
+ u32 reg;
+ reg = rda_read_dsi_reg(0x48);
+ reg |= 0x1 << 2;
+ rda_write_dsi_reg(0x48,0x1 << 2);
+ rda_write_dsi_reg(0x48,reg & ~(1 << 2));
+}
+
+void set_lcdc_for_cmd(u32 addr, int group_num)
+{
+ /* fifo reset */
+ reset_lcdc_fifo();
+ dsi_pll_on(TRUE);
+
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_EOF_IRQ_MASK, LCDC_MIPI_INT_MASK);
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_EOF_IRQ, LCDC_IRQ_CLEAR_ALL);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_FRAME0_ADDR, addr);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_FRAME0_CON, DPI_FRAME_LINE_STEP(group_num * 8) | DPI_FRAME_VALID);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_SIZE, VERTICAL_PIX_NUM(1) | HORIZONTAL_PIX_NUM(group_num * 2));
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_DCT_SHIFT_UV_REG1, LCDC_RGB_WAIT | 0x143);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_CONFIG, MIPI_CMD_SEL_CMD | MIPI_DSI_ENABLE | RGB_PIX_FMT_XRGB888);
+}
+
+void set_lcdc_for_video(u32 addr, const struct lcd_panel_info *lcd)
+{
+ u32 dsi_bpp;
+
+ reset_lcdc_fifo();
+ dsi_enable(FALSE);
+ rda_write_dsi_reg(0x144, 0x14);
+ dsi_pll_on(TRUE);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_FRAME0_ADDR, addr);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_FRAME0_CON, DPI_FRAME_LINE_STEP(lcd->width \
+ * (lcd->bpp >> 3)) | DPI_FRAME_VALID);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_SIZE, VERTICAL_PIX_NUM(lcd->height)
+ | HORIZONTAL_PIX_NUM(lcd->width));
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_DCT_SHIFT_UV_REG1, LCDC_RGB_WAIT | 0x143);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_CONFIG, MIPI_DSI_ENABLE | lcd->mipi_pinfo.pixel_format \
+ | RGB_ORDER_BGR | REG_PEND_REQ(16));
+ if (lcd->mipi_pinfo.pixel_format == RGB_PIX_FMT_RGB565)
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_DCT_SHIFT_UV_REG1, 0x143);
+
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_FIFO_CTRL, DPI_DATA_FIFO_RST_AUTO);
+ rda_write_dsi_reg(0x8,lcd->mipi_pinfo.data_lane >> 1);
+
+ /*rgb num, width bytes + header + crc*/
+ dsi_bpp = lcd->bpp != 32 ? lcd->bpp : 24;
+ rda_write_dsi_reg(0x2c,(lcd->width * (dsi_bpp >> 3)+ 6) >> (lcd->mipi_pinfo.data_lane >> 1));
+ /*mipi tx mode*/
+ dsi_op_mode(DSI_BURST);
+ dsi_enable(TRUE);
+
+}
+
+static void set_dsi_ap_pll(const struct rda_dsi_phy_ctrl *pll_phy)
+{
+ ispi_open(0);
+ dsi_pll_on(TRUE);
+
+ ispi_reg_write(0xA5, pll_phy->pll[0]);
+ ispi_reg_write(0xA6, pll_phy->pll[1]);
+ ispi_reg_write(0xA7, pll_phy->pll[2]);
+ ispi_reg_write(0xA3, pll_phy->pll[3]);
+ ispi_reg_write(0xA2, pll_phy->pll[4]);
+ udelay(100);
+ ispi_reg_write(0xA2, pll_phy->pll[5]);
+}
+
+void rda_lcdc_set(const struct rda_dsi_phy_ctrl *dsi_phy_db)
+{
+ unsigned long temp;
+
+ LCDC_OUTL(RDA_SYSCTRL_BASE + 0x34, 0x10);
+ LCDC_OUTL(RDA_SYSCTRL_BASE + 0x38, 0x10);
+ temp = readl(ALT_MUX_SELECT);
+ temp |= LCD_DSI_MODE;
+ writel(temp, ALT_MUX_SELECT);
+ LCDC_OUTL(RDA_LCDC_BASE + DPI_FIFO_CTRL, DPI_DATA_FIFO_RST_AUTO);
+ set_dsi_ap_pll(dsi_phy_db);
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_EOF_IRQ_MASK, LCDC_MIPI_INT_MASK);
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_EOF_IRQ, LCDC_IRQ_CLEAR_ALL);
+}
+
+int rda_lcdc_irq_status(void)
+{
+ u8 time_out = 0;
+ u32 status;
+ do {
+ status = LCDC_INL(RDA_LCDC_BASE + LCDC_EOF_IRQ);
+ printf("irq status: %x\n",status);
+
+ if (status & LCDC_DPI_FRAMEOVER) {
+ printf("irq: LCDC_DPI_FRAMEOVER\n");
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_EOF_IRQ, LCDC_IRQ_CLEAR_ALL);
+ }
+ if (status & LCDC_MIPI_INT) {
+ status = rda_read_dsi_reg(0x90);
+ printf("irq: LCDC_MIPI_INT\r\n");
+ if(status & DSI_TX_END_FLAG || status & DSI_RX_END_FLAG){
+ rda_dsi_irq_clear();
+ LCDC_OUTL(RDA_LCDC_BASE + LCDC_EOF_IRQ, LCDC_IRQ_CLEAR_ALL);
+ return 0;
+ }
+ }
+ udelay(100);
+ } while (time_out++ < 10);
+ return -1;
+}
+
diff --git a/board/rda/common/rda_md5.c b/board/rda/common/rda_md5.c
new file mode 100644
index 0000000000..1cba0e4221
--- /dev/null
+++ b/board/rda/common/rda_md5.c
@@ -0,0 +1,314 @@
+/*
+ * This file was transplanted with slight modifications from Linux sources
+ * (fs/cifs/md5.c) into U-Boot by Bartlomiej Sieka <tur@semihalf.com>.
+ */
+
+/*
+ * This code implements the MD5 message-digest algorithm.
+ * The algorithm is due to Ron Rivest. This code was
+ * written by Colin Plumb in 1993, no copyright is claimed.
+ * This code is in the public domain; do with it what you wish.
+ *
+ * Equivalent code is available from RSA Data Security, Inc.
+ * This code has been tested against that, and is equivalent,
+ * except that you don't need to include two pages of legalese
+ * with every copy.
+ *
+ * To compute the message digest of a chunk of bytes, declare an
+ * MD5Context structure, pass it to MD5Init, call MD5Update as
+ * needed on buffers full of bytes, and then call MD5Final, which
+ * will fill a supplied 16-byte array with the digest.
+ */
+
+/* This code slightly modified to fit into Samba by
+ abartlet@samba.org Jun 2001
+ and to fit the cifs vfs by
+ Steve French sfrench@us.ibm.com */
+
+#include "compiler.h"
+
+#ifndef USE_HOSTCC
+#include <common.h>
+#include <watchdog.h>
+#endif /* USE_HOSTCC */
+#include "rda_md5.h"
+
+static void
+MD5Transform(__u32 buf[4], __u32 const in[16]);
+
+/*
+ * Note: this code is harmless on little-endian machines.
+ */
+static void
+byteReverse(unsigned char *buf, unsigned longs)
+{
+ __u32 t;
+ do {
+ t = (__u32) ((unsigned) buf[3] << 8 | buf[2]) << 16 |
+ ((unsigned) buf[1] << 8 | buf[0]);
+ *(__u32 *) buf = t;
+ buf += 4;
+ } while (--longs);
+}
+
+/*
+ * Start MD5 accumulation. Set bit count to 0 and buffer to mysterious
+ * initialization constants.
+ */
+static void
+MD5Init(struct MD5Context *ctx)
+{
+ ctx->buf[0] = 0x67452301;
+ ctx->buf[1] = 0xefcdab89;
+ ctx->buf[2] = 0x98badcfe;
+ ctx->buf[3] = 0x10325476;
+
+ ctx->bits[0] = 0;
+ ctx->bits[1] = 0;
+}
+
+/*
+ * Update context to reflect the concatenation of another buffer full
+ * of bytes.
+ */
+static void
+MD5Update(struct MD5Context *ctx, unsigned char const *buf, unsigned len)
+{
+ register __u32 t;
+
+ /* Update bitcount */
+
+ t = ctx->bits[0];
+ if ((ctx->bits[0] = t + ((__u32) len << 3)) < t)
+ ctx->bits[1]++; /* Carry from low to high */
+ ctx->bits[1] += len >> 29;
+
+ t = (t >> 3) & 0x3f; /* Bytes already in shsInfo->data */
+
+ /* Handle any leading odd-sized chunks */
+
+ if (t) {
+ unsigned char *p = (unsigned char *) ctx->in + t;
+
+ t = 64 - t;
+ if (len < t) {
+ memmove(p, buf, len);
+ return;
+ }
+ memmove(p, buf, t);
+ byteReverse(ctx->in, 16);
+ MD5Transform(ctx->buf, (__u32 *) ctx->in);
+ buf += t;
+ len -= t;
+ }
+ /* Process data in 64-byte chunks */
+
+ while (len >= 64) {
+ memmove(ctx->in, buf, 64);
+ byteReverse(ctx->in, 16);
+ MD5Transform(ctx->buf, (__u32 *) ctx->in);
+ buf += 64;
+ len -= 64;
+ }
+
+ /* Handle any remaining bytes of data. */
+
+ memmove(ctx->in, buf, len);
+}
+
+/*
+ * Final wrapup - pad to 64-byte boundary with the bit pattern
+ * 1 0* (64-bit count of bits processed, MSB-first)
+ */
+static void
+MD5Final(unsigned char digest[16], struct MD5Context *ctx)
+{
+ unsigned int count;
+ unsigned char *p;
+
+ /* Compute number of bytes mod 64 */
+ count = (ctx->bits[0] >> 3) & 0x3F;
+
+ /* Set the first char of padding to 0x80. This is safe since there is
+ always at least one byte free */
+ p = ctx->in + count;
+ *p++ = 0x80;
+
+ /* Bytes of padding needed to make 64 bytes */
+ count = 64 - 1 - count;
+
+ /* Pad out to 56 mod 64 */
+ if (count < 8) {
+ /* Two lots of padding: Pad the first block to 64 bytes */
+ memset(p, 0, count);
+ byteReverse(ctx->in, 16);
+ MD5Transform(ctx->buf, (__u32 *) ctx->in);
+
+ /* Now fill the next block with 56 bytes */
+ memset(ctx->in, 0, 56);
+ } else {
+ /* Pad block to 56 bytes */
+ memset(p, 0, count - 8);
+ }
+ byteReverse(ctx->in, 14);
+
+ /* Append length in bits and transform */
+ ctx->in32[14] = ctx->bits[0];
+ ctx->in32[15] = ctx->bits[1];
+
+ MD5Transform(ctx->buf, (__u32 *) ctx->in);
+ byteReverse((unsigned char *) ctx->buf, 4);
+ memmove(digest, ctx->buf, 16);
+ memset(ctx, 0, sizeof(*ctx)); /* In case it's sensitive */
+}
+
+/* The four core functions - F1 is optimized somewhat */
+
+/* #define F1(x, y, z) (x & y | ~x & z) */
+#define F1(x, y, z) (z ^ (x & (y ^ z)))
+#define F2(x, y, z) F1(z, x, y)
+#define F3(x, y, z) (x ^ y ^ z)
+#define F4(x, y, z) (y ^ (x | ~z))
+
+/* This is the central step in the MD5 algorithm. */
+#define MD5STEP(f, w, x, y, z, data, s) \
+ ( w += f(x, y, z) + data, w = w<<s | w>>(32-s), w += x )
+
+/*
+ * The core of the MD5 algorithm, this alters an existing MD5 hash to
+ * reflect the addition of 16 longwords of new data. MD5Update blocks
+ * the data and converts bytes into longwords for this routine.
+ */
+static void
+MD5Transform(__u32 buf[4], __u32 const in[16])
+{
+ register __u32 a, b, c, d;
+
+ a = buf[0];
+ b = buf[1];
+ c = buf[2];
+ d = buf[3];
+
+ MD5STEP(F1, a, b, c, d, in[0] + 0xd76aa478, 7);
+ MD5STEP(F1, d, a, b, c, in[1] + 0xe8c7b756, 12);
+ MD5STEP(F1, c, d, a, b, in[2] + 0x242070db, 17);
+ MD5STEP(F1, b, c, d, a, in[3] + 0xc1bdceee, 22);
+ MD5STEP(F1, a, b, c, d, in[4] + 0xf57c0faf, 7);
+ MD5STEP(F1, d, a, b, c, in[5] + 0x4787c62a, 12);
+ MD5STEP(F1, c, d, a, b, in[6] + 0xa8304613, 17);
+ MD5STEP(F1, b, c, d, a, in[7] + 0xfd469501, 22);
+ MD5STEP(F1, a, b, c, d, in[8] + 0x698098d8, 7);
+ MD5STEP(F1, d, a, b, c, in[9] + 0x8b44f7af, 12);
+ MD5STEP(F1, c, d, a, b, in[10] + 0xffff5bb1, 17);
+ MD5STEP(F1, b, c, d, a, in[11] + 0x895cd7be, 22);
+ MD5STEP(F1, a, b, c, d, in[12] + 0x6b901122, 7);
+ MD5STEP(F1, d, a, b, c, in[13] + 0xfd987193, 12);
+ MD5STEP(F1, c, d, a, b, in[14] + 0xa679438e, 17);
+ MD5STEP(F1, b, c, d, a, in[15] + 0x49b40821, 22);
+
+ MD5STEP(F2, a, b, c, d, in[1] + 0xf61e2562, 5);
+ MD5STEP(F2, d, a, b, c, in[6] + 0xc040b340, 9);
+ MD5STEP(F2, c, d, a, b, in[11] + 0x265e5a51, 14);
+ MD5STEP(F2, b, c, d, a, in[0] + 0xe9b6c7aa, 20);
+ MD5STEP(F2, a, b, c, d, in[5] + 0xd62f105d, 5);
+ MD5STEP(F2, d, a, b, c, in[10] + 0x02441453, 9);
+ MD5STEP(F2, c, d, a, b, in[15] + 0xd8a1e681, 14);
+ MD5STEP(F2, b, c, d, a, in[4] + 0xe7d3fbc8, 20);
+ MD5STEP(F2, a, b, c, d, in[9] + 0x21e1cde6, 5);
+ MD5STEP(F2, d, a, b, c, in[14] + 0xc33707d6, 9);
+ MD5STEP(F2, c, d, a, b, in[3] + 0xf4d50d87, 14);
+ MD5STEP(F2, b, c, d, a, in[8] + 0x455a14ed, 20);
+ MD5STEP(F2, a, b, c, d, in[13] + 0xa9e3e905, 5);
+ MD5STEP(F2, d, a, b, c, in[2] + 0xfcefa3f8, 9);
+ MD5STEP(F2, c, d, a, b, in[7] + 0x676f02d9, 14);
+ MD5STEP(F2, b, c, d, a, in[12] + 0x8d2a4c8a, 20);
+
+ MD5STEP(F3, a, b, c, d, in[5] + 0xfffa3942, 4);
+ MD5STEP(F3, d, a, b, c, in[8] + 0x8771f681, 11);
+ MD5STEP(F3, c, d, a, b, in[11] + 0x6d9d6122, 16);
+ MD5STEP(F3, b, c, d, a, in[14] + 0xfde5380c, 23);
+ MD5STEP(F3, a, b, c, d, in[1] + 0xa4beea44, 4);
+ MD5STEP(F3, d, a, b, c, in[4] + 0x4bdecfa9, 11);
+ MD5STEP(F3, c, d, a, b, in[7] + 0xf6bb4b60, 16);
+ MD5STEP(F3, b, c, d, a, in[10] + 0xbebfbc70, 23);
+ MD5STEP(F3, a, b, c, d, in[13] + 0x289b7ec6, 4);
+ MD5STEP(F3, d, a, b, c, in[0] + 0xeaa127fa, 11);
+ MD5STEP(F3, c, d, a, b, in[3] + 0xd4ef3085, 16);
+ MD5STEP(F3, b, c, d, a, in[6] + 0x04881d05, 23);
+ MD5STEP(F3, a, b, c, d, in[9] + 0xd9d4d039, 4);
+ MD5STEP(F3, d, a, b, c, in[12] + 0xe6db99e5, 11);
+ MD5STEP(F3, c, d, a, b, in[15] + 0x1fa27cf8, 16);
+ MD5STEP(F3, b, c, d, a, in[2] + 0xc4ac5665, 23);
+
+ MD5STEP(F4, a, b, c, d, in[0] + 0xf4292244, 6);
+ MD5STEP(F4, d, a, b, c, in[7] + 0x432aff97, 10);
+ MD5STEP(F4, c, d, a, b, in[14] + 0xab9423a7, 15);
+ MD5STEP(F4, b, c, d, a, in[5] + 0xfc93a039, 21);
+ MD5STEP(F4, a, b, c, d, in[12] + 0x655b59c3, 6);
+ MD5STEP(F4, d, a, b, c, in[3] + 0x8f0ccc92, 10);
+ MD5STEP(F4, c, d, a, b, in[10] + 0xffeff47d, 15);
+ MD5STEP(F4, b, c, d, a, in[1] + 0x85845dd1, 21);
+ MD5STEP(F4, a, b, c, d, in[8] + 0x6fa87e4f, 6);
+ MD5STEP(F4, d, a, b, c, in[15] + 0xfe2ce6e0, 10);
+ MD5STEP(F4, c, d, a, b, in[6] + 0xa3014314, 15);
+ MD5STEP(F4, b, c, d, a, in[13] + 0x4e0811a1, 21);
+ MD5STEP(F4, a, b, c, d, in[4] + 0xf7537e82, 6);
+ MD5STEP(F4, d, a, b, c, in[11] + 0xbd3af235, 10);
+ MD5STEP(F4, c, d, a, b, in[2] + 0x2ad7d2bb, 15);
+ MD5STEP(F4, b, c, d, a, in[9] + 0xeb86d391, 21);
+
+ buf[0] += a;
+ buf[1] += b;
+ buf[2] += c;
+ buf[3] += d;
+}
+
+/*
+ * Calculate and store in 'output' the MD5 digest of 'len' bytes at
+ * 'input'. 'output' must have enough space to hold 16 bytes.
+ */
+void
+md5 (unsigned char *input, int len, unsigned char output[16])
+{
+ struct MD5Context context;
+
+ MD5Init(&context);
+ MD5Update(&context, input, len);
+ MD5Final(output, &context);
+}
+
+
+/*
+ * Calculate and store in 'output' the MD5 digest of 'len' bytes at 'input'.
+ * 'output' must have enough space to hold 16 bytes. If 'chunk' Trigger the
+ * watchdog every 'chunk_sz' bytes of input processed.
+ */
+void
+md5_wd (unsigned char *input, int len, unsigned char output[16],
+ unsigned int chunk_sz)
+{
+ struct MD5Context context;
+#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
+ unsigned char *end, *curr;
+ int chunk;
+#endif
+
+ MD5Init(&context);
+
+#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
+ curr = input;
+ end = input + len;
+ while (curr < end) {
+ chunk = end - curr;
+ if (chunk > chunk_sz)
+ chunk = chunk_sz;
+ MD5Update(&context, curr, chunk);
+ curr += chunk;
+ WATCHDOG_RESET ();
+ }
+#else
+ MD5Update(&context, input, len);
+#endif
+
+ MD5Final(output, &context);
+}
diff --git a/board/rda/common/rda_mipi_dsi.c b/board/rda/common/rda_mipi_dsi.c
new file mode 100644
index 0000000000..e764b91e56
--- /dev/null
+++ b/board/rda/common/rda_mipi_dsi.c
@@ -0,0 +1,283 @@
+#include <common.h>
+#include <asm/arch/cs_types.h>
+#include "rda_lcdc.h"
+#include "rda_mipi_dsi.h"
+
+#define COMMANDS_ADDR 0x85000008
+#define CMD_QUEUE_BASE 0x180
+
+static u8 cmd_tx_mode = CMD_HS_MODE;
+
+void dsi_set_tx_mode(u8 mode)
+{
+ cmd_tx_mode = mode;
+}
+
+u8 dsi_get_tx_mode(void)
+{
+ return cmd_tx_mode;
+}
+
+static void dsi_dump_cmds(char *buf, int group_num)
+{
+ int i;
+ U64 *data = (U64 *)buf;
+
+ for(i = 0; i < group_num; i++)
+ printf("%16llx\n", *data++);
+}
+
+static int dsi_get_cmds_num(const struct rda_dsi_cmd *cmds, int cmds_cnt)
+{
+ int i,j,cmds_num = 0;
+
+ const struct rda_dsi_cmd *cmds_ptr = cmds;
+
+ for (i = 0; i < cmds_cnt; i++) {
+ for (j = 0; j < cmds_ptr->dlen; j++)
+ cmds_num++;
+ cmds_ptr++;
+ }
+ return cmds_num;
+}
+
+void dsi_enable(bool on)
+{
+ rda_write_dsi_reg(0x04, on ? 0x1 : 0x0);
+}
+
+void dsi_op_mode(int mode)
+{
+ rda_write_dsi_reg(0x14, mode);
+}
+
+void dsi_cmd_queue_init(int cmd_cnt)
+{
+ rda_write_dsi_reg(0x40, cmd_cnt - 1); // dsi cmds num,actualy cmd - 1
+ rda_write_dsi_reg(0x44, 0x03); // dsi cmd queue enable
+}
+
+/****************************************************************
+***************** COMMAND DATA FORMAT IN DDR ********************
+*
+* LP MODE: 0x| xx | xx |xx|xx|xx|xx|xx|xx| first command useless
+* 0x|cmd0|cmd0|00|00|00|00|00|00|
+* 0x|cmd1|cmd1|00|00|00|00|00|00|
+* ...
+*
+* HS MODE: 0x|cmd0|cmd1|cmd2|00|cmd3|00|00|00|
+* 0x|cmd4|cmd5|cmd6|00|cmd7|00|00|00|
+* ...
+*
+****************************************************************/
+
+static void dsi_cmds_into_ddr(const struct rda_dsi_cmd *cmd, char **buf)
+{
+ int i,j;
+ u8 pd;
+ char *buf_ptr = *buf;
+ static int index = 0;
+ const char *payload;
+ payload = cmd->payload;
+ if (cmd_tx_mode == CMD_LP_MODE) {
+ for (i = 0; i < cmd->dlen; i++) {
+ pd = *payload++;
+ *buf_ptr++ = pd;
+ *buf_ptr++ = pd;
+ printf("cmd %8x\n", pd);
+ for (j = 0; j < 6; j++)
+ *buf_ptr++ = 0x00;
+ }
+ } else {
+ j = 0;
+ start:
+ while (index < 3) {
+ if (j < cmd->dlen) {
+ *buf_ptr++ = *payload++;
+ index++;
+ j++;
+ } else {
+ *buf = buf_ptr;
+ return;
+ }
+ }
+ if (index == 3) {
+ *buf_ptr++ = 0;
+ index++;
+ }
+ if (index == 4) {
+ if (j < cmd->dlen) {
+ *buf_ptr++ = *payload++;
+ index++;
+ j++;
+ } else {
+ *buf = buf_ptr;
+ return;
+ }
+ }
+ while (index < 8) {
+ *buf_ptr++ = 0;
+ index++;
+ }
+ index = 0;
+ if (j < cmd->dlen)
+ goto start;
+ }
+ *buf = buf_ptr;
+}
+
+
+void dsi_pll_on(bool enable)
+{
+ if (enable)
+ rda_write_dsi_reg(0x00, 0x3);
+ else
+ rda_write_dsi_reg(0x00, 0x0);
+}
+
+static void dsi_set_timing(const struct rda_dsi_phy_ctrl *dsi_phy_db)
+{
+ int i;
+ u32 off,value;
+
+ /* cmd mode */
+ for (i = 0; i < ARRAY_SIZE(dsi_phy_db->cmd_timing); i++) {
+ off = dsi_phy_db->cmd_timing[i].off;
+ value = dsi_phy_db->cmd_timing[i].value;
+ rda_write_dsi_reg(off,value);
+ }
+ /* video mode */
+ for (i = 0; i < ARRAY_SIZE(dsi_phy_db->video_timing); i++) {
+ off = dsi_phy_db->video_timing[i].off;
+ value = dsi_phy_db->video_timing[i].value;
+ rda_write_dsi_reg(off, value);
+ }
+}
+
+static void dsi_set_parameter(const struct lcd_panel_info *lcd)
+{
+ u32 data_lane;
+ u32 dsi_bpp;
+ data_lane = (cmd_tx_mode == CMD_HS_MODE) ? lcd->mipi_pinfo.data_lane >> 1 : 0;
+ rda_write_dsi_reg(0x8,data_lane);
+ /*pixel num*/
+ rda_write_dsi_reg(0xc,lcd->width);
+ /*pixel type*/
+ rda_write_dsi_reg(0x10,lcd->mipi_pinfo.dsi_format);
+
+ /*vc,bllp enable*/
+ if(lcd->mipi_pinfo.bllp_enable)
+ rda_write_dsi_reg(0x18,0x1 << 2);
+
+ rda_write_dsi_reg(0x20,lcd->mipi_pinfo.h_sync_active);
+ rda_write_dsi_reg(0x24,lcd->mipi_pinfo.h_back_porch);
+ rda_write_dsi_reg(0x28,lcd->mipi_pinfo.h_front_porch);
+
+ dsi_bpp = (lcd->bpp != 32) ? lcd->bpp : 24;
+ rda_write_dsi_reg(0x2c,(lcd->width * (dsi_bpp >> 3)+ 6) >> data_lane);
+
+ rda_write_dsi_reg(0x30,lcd->mipi_pinfo.v_sync_active);
+ rda_write_dsi_reg(0x34,lcd->mipi_pinfo.v_back_porch);
+ rda_write_dsi_reg(0x38,lcd->mipi_pinfo.v_front_porch);
+ rda_write_dsi_reg(0x3c,lcd->height - 1);/*vat line */
+
+ /*
+ * sync data swap
+ */
+ rda_write_dsi_reg(0x104,0x2);
+}
+
+void dsi_config(const struct lcd_panel_info *lcd)
+{
+ const struct rda_dsi_phy_ctrl *dsi_phy_db = lcd->mipi_pinfo.dsi_phy_db;
+
+ rda_write_dsi_reg(0x144, 0x14); //analog phase
+ dsi_pll_on(TRUE); //pll enable
+
+ dsi_enable(FALSE); //dsi disable
+ dsi_op_mode(DSI_CMD); //cmd mode
+ dsi_set_timing(dsi_phy_db);
+ dsi_set_parameter(lcd);
+}
+
+void dsi_swrite(u8 cmd)
+{
+
+ u32 cmd_header = 0;
+
+ cmd_header |= DSI_HDR_VC(0);
+ cmd_header |= DSI_HDR_SHORT_PKT;
+ if (cmd_tx_mode == CMD_HS_MODE)
+ cmd_header |= DSI_HDR_HS;
+ cmd_header |= DSI_HDR_DTYPE(DTYPE_DCS_SWRITE);
+ cmd_header |= DSI_HDR_DATA1(cmd);
+ cmd_header |= DSI_HDR_DATA2(0);
+
+ dsi_enable(FALSE);
+ dsi_op_mode(DSI_CMD);
+ dsi_cmd_queue_init(1);
+ rda_write_dsi_reg((u32)CMD_QUEUE_BASE, cmd_header);
+ dsi_enable(TRUE);
+}
+
+int dsi_lwrite(const struct rda_dsi_cmd *cmds, int cmds_cnt)
+{
+ u32 cmd_header = 0;
+ char *buf = (char *)COMMANDS_ADDR;
+ u32 offset = 0;
+ int cmds_num = 0, group_num = 0;
+ int i;
+
+ cmds_num = dsi_get_cmds_num(cmds, cmds_cnt);
+
+ if (cmd_tx_mode == CMD_LP_MODE) {
+ cmds_num++;
+ group_num = cmds_num;
+ } else
+ group_num = roundup(cmds_num, 4) / 4;
+
+ memset(buf, 0, group_num * 8);
+ if (cmd_tx_mode == CMD_LP_MODE) {
+ *buf++ = 0xaa;
+ for(i = 0; i < 7; i++)
+ *buf++ = 0x00;
+ }
+
+ for (i = 0; i < cmds_cnt; i++)
+ dsi_cmds_into_ddr(&cmds[i], &buf);
+
+ buf -= group_num * 8;
+ if (cmd_tx_mode == CMD_HS_MODE)
+ buf += (8 - cmds_num % 4);
+ printf("buf addr: %x\n", (u32)&(*buf));
+
+ dsi_dump_cmds(buf, group_num);
+ printf("cmds_num = %d\n", cmds_num);
+
+ set_lcdc_for_cmd((u32)&(*buf), group_num);
+
+ if (cmd_tx_mode == CMD_HS_MODE)
+ cmd_header |= DSI_HDR_HS;
+
+ dsi_enable(FALSE);
+ dsi_op_mode(DSI_CMD);
+ dsi_cmd_queue_init(cmds_cnt);
+ for (i = 0; i < cmds_cnt; i++) {
+ cmd_header |= DSI_HDR_WC(cmds[i].dlen);
+ cmd_header |= DSI_HDR_VC(0);
+ cmd_header |= DSI_HDR_LONG_PKT;
+ cmd_header |= DSI_HDR_DTYPE(DTYPE_DCS_LWRITE);
+ rda_write_dsi_reg(CMD_QUEUE_BASE + offset, cmd_header);
+ printf("cmd_header: %x %x\n", cmd_header, offset);
+
+ offset += 4;
+ cmd_header = 0;
+ if (cmd_tx_mode == CMD_HS_MODE)
+ cmd_header |= DSI_HDR_HS;
+ }
+
+ dsi_enable(TRUE);
+
+ return 0;
+}
+
diff --git a/board/rda/common/timer_test.c b/board/rda/common/timer_test.c
new file mode 100644
index 0000000000..0cfbee680d
--- /dev/null
+++ b/board/rda/common/timer_test.c
@@ -0,0 +1,1620 @@
+#include <common.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/reg_timer.h>
+
+#ifdef CONFIG_IRQ
+#include "irq.h"
+#endif
+
+#if defined(CONFIG_MACH_RDA8850E)
+static HWP_TIMER_AP_T *hwp_timer_tab[] = {hwp_apTimer,NULL,NULL};
+#elif defined(CONFIG_MACH_RDA8810H)
+//static HWP_TIMER_AP_T *hwp_timer_tab[] = {hwp_apTimer0,hwp_apTimer1,hwp_apTimer2};
+static HWP_TIMER_AP_T *hwp_timer_tab[] = {hwp_apTimer,NULL,NULL};
+#else
+#error "unknown machine !"
+#endif
+
+/* Hardware timer frequency value 2MHz or 16KHz */
+#define CONFIG_HW_TIMER_FAST_FREQ 2000000
+#define CONFIG_HW_TIMER_SLOW_FREQ 16384
+
+#define TIMER_BASE_TICK_US 1000000
+#define TIMER_BASE_TICK_MS 1000
+#define TIMER_BASE_TICK_S 1
+
+#define d_printf printf
+
+#define USE_DATA_SIZE_64_BIT
+
+#ifdef USE_DATA_SIZE_64_BIT
+typedef unsigned long long int u64;
+#else
+typedef unsigned int u64;
+#endif /* USE_DATA_SIZE_64_BIT */
+
+typedef union
+{
+ volatile unsigned long long int timer;
+ struct
+ {
+ volatile unsigned int timer_l:32;
+ volatile unsigned int timer_h:32;
+ }fields;
+}TIMER;
+
+/* TIMER id number */
+enum TIMER_ID_TYPE
+{
+ TIMER0_ID = 0,
+ TIMER1_ID = 1,
+ TIMER2_ID = 2,
+};
+
+/* TIMER test case id number */
+enum TIMER_TC_ID_TYPE
+{
+ HWTIMER_TC_ID_REG_DEFAULT_VAL = 0,
+ HWTIMER_TC_ID_DELAY_US,
+ HWTIMER_TC_ID_DELAY_MS,
+ HWTIMER_TC_ID_DELAY_S,
+ HWTIMER_TC_ID_INTERVAL_IRQ_125MS,
+ HWTIMER_TC_ID_INTERVAL_IRQ_250MS,
+ HWTIMER_TC_ID_INTERVAL_IRQ_500MS,
+ HWTIMER_TC_ID_INTERVAL_IRQ_1000MS,
+ HWTIMER_TC_ID_DELAY_WAVE_1MS,
+ HWTIMER_TC_ID_IRQ_WAVE_125MS,
+ HWTIMER_TC_ID_IRQ_WAVE_250MS,
+ HWTIMER_TC_ID_IRQ_WAVE_500MS,
+ HWTIMER_TC_ID_IRQ_WAVE_1000MS,
+ HWTIMER_TC_ID_WRAP_IRQ,
+ HWTIMER_TC_ID_LOCK_VAL,
+ OSTIMER_TC_ID_REG_DEFAULT_VAL,
+ OSTIMER_TC_ID_DELAY_US,
+ OSTIMER_TC_ID_DELAY_MS,
+ OSTIMER_TC_ID_DELAY_WAVE_1MS,
+ OSTIMER_TC_ID_TEST_IRQ_STATUS,
+ OSTIMER_TC_ID_IRQ_WRAP,
+ OSTIMER_TC_ID_IRQ_REPEAT,
+ OSTIMER_TC_ID_LOCK_VAL,
+};
+
+/*
+ * TIMER LOCAL VARIBLE DEFINITION
+ *********************************************************
+ */
+
+/* hardware timer interval interrupt cycle*/
+enum TIMER_IT_CYCLE_TYPE
+{
+ IT_PERIOD_125MS = 0,
+ IT_PERIOD_250MS,
+ IT_PERIOD_500MS,
+ IT_PERIOD_1000MS,
+};
+
+static u32 g_hwtimer_freq = CONFIG_HW_TIMER_FAST_FREQ;
+static HWP_TIMER_AP_T *hwp_timer = hwp_apTimer;
+
+void hwt_delay_us(u32 us);
+static void timer_reset(void);
+static u32 caculate_tick_val(u32 time_us);
+static u32 caculate_time_val(u32 tick);
+static void set_timer_clk_freq(int fast_mode);
+static void ostimer_enable(int is_enable);
+static void ostimer_clear_irq(void);
+static void do_waiting_print(int *ptr_wait_cnt,int is_clear,const char *str);
+
+/*
+ * TIMER PRIVATE FUNCTION IMPLEMENTATION
+ *********************************************************
+ */
+static void get_hwtimer_time(TIMER *ptimer)
+{
+ /* Read high word first */
+ ptimer->fields.timer_h = (UINT32)(hwp_apTimer->HWTimer_LockVal_H);
+ ptimer->fields.timer_l = (UINT32)(hwp_apTimer->HWTimer_LockVal_L);
+ /* Check wrap case */
+ if (ptimer->fields.timer_h != hwp_apTimer->HWTimer_LockVal_H) {
+ ptimer->fields.timer_h = (UINT32)(hwp_apTimer->HWTimer_LockVal_H);
+ ptimer->fields.timer_l = (UINT32)(hwp_apTimer->HWTimer_LockVal_L);
+ }
+}
+
+static void hwtimer_delay_process(TIMER *start_time, TIMER *end_time,TIMER *cur_time,u64 tick)
+{
+ /* get current time value */
+ get_hwtimer_time(cur_time);
+
+ /* add us */
+ start_time->timer = cur_time->timer;
+ end_time->timer = cur_time->timer+tick;
+
+ /* wait until timeout */
+ while(1) {
+ get_hwtimer_time(cur_time);
+ if((cur_time->timer) > (end_time->timer))
+ break;
+ }
+}
+
+void hwt_delay_us(u32 us)
+{
+ TIMER start_time,end_time,cur_time;
+ u64 temp1,temp2;
+
+ temp1 = us * g_hwtimer_freq;
+ temp2 = TIMER_BASE_TICK_US;
+ temp1 = temp1 / temp2;
+ hwtimer_delay_process(&start_time,&end_time,&cur_time,temp1);
+}
+
+void hwt_delay_ms(u32 ms)
+{
+ u32 i = 0;
+ for(i = 0; i < ms; i++)
+ hwt_delay_us(1000); // delay 1 ms
+}
+
+static void do_waiting_print(int *ptr_wait_cnt,int is_clear,const char *str)
+{
+ static int cnt = 0;
+
+ if(is_clear) {
+ cnt = 0;
+ d_printf("\n");
+ return;
+ }
+ if(ptr_wait_cnt != NULL)
+ *ptr_wait_cnt = *ptr_wait_cnt + 1;
+ d_printf("%s",str);
+ cnt++;
+ if((cnt % 80) == 0) {
+ cnt = 0;
+ d_printf("\n");
+ }
+ hwt_delay_ms(1000);
+}
+
+static u32 caculate_tick_val(u32 time_us)
+{
+ u32 tick = 0;
+ u32 base = 0;
+ if(g_hwtimer_freq >= TIMER_BASE_TICK_US) {
+ // fast freq = 2MHz, 1 us is 2 tick
+ base = g_hwtimer_freq / (u32)TIMER_BASE_TICK_US;
+ tick = time_us * base;
+ } else {
+ //slow freq = 16384Hz, 61 us is 1 tick
+ base = (u32)TIMER_BASE_TICK_US / g_hwtimer_freq;
+ tick = time_us / base;
+ }
+// d_printf("cal tick value is 0x%x\n",tick);
+ return tick;
+}
+
+static u32 caculate_time_val(u32 tick)
+{ u32 base,time_val;
+ if(g_hwtimer_freq > TIMER_BASE_TICK_US) {
+ base = g_hwtimer_freq / TIMER_BASE_TICK_US;
+ time_val = tick / base;
+ } else {
+ base = TIMER_BASE_TICK_US / g_hwtimer_freq;
+ time_val = tick * base;
+ }
+// d_printf("cal time value is 0x%x\n",time_val);
+ return time_val;
+}
+
+static void timer_reset(void)
+{
+ // reset all timer
+ hwp_sysCtrlAp->APB1_Rst_Set = SYS_CTRL_AP_SET_APB1_RST_TIMER;
+ hwp_sysCtrlAp->APB1_Rst_Clr = SYS_CTRL_AP_SET_APB1_RST_TIMER;
+}
+
+static void set_timer_clk_freq(int fast_mode)
+{
+ //0 is fast mode, 1 is slow mode
+ if(fast_mode) {
+ hwp_sysCtrlAp->Sel_Clock &= (~SYS_CTRL_AP_TIMER_SEL_FAST_SLOW);
+ g_hwtimer_freq = CONFIG_HW_TIMER_FAST_FREQ;
+ } else {
+ hwp_sysCtrlAp->Sel_Clock |= SYS_CTRL_AP_TIMER_SEL_FAST_SLOW;
+ g_hwtimer_freq = CONFIG_HW_TIMER_SLOW_FREQ;
+ }
+}
+
+#define GPIOA_SET_ADDR 0x20930030
+#define GPIOA_CLR_ADDR 0x20930034
+
+static void do_set_gpo_pin(int pin_id, int pin_val)
+{
+ unsigned int set_addr = GPIOA_SET_ADDR; //GPIOA 's GPO register set address
+ unsigned int clr_addr = GPIOA_CLR_ADDR; // GPIOA 's GPO register reset address
+ unsigned int val = 0;
+
+ /* pin_id must be 0,1,2 */
+ if((pin_id < 0) || (pin_id >= 3)) {
+ d_printf("set gpo pin value failed!,pin id is %d\n",pin_id);
+ return;
+ }
+ val = 1 << pin_id;
+ if(pin_val) {
+ *(volatile unsigned int *)set_addr = val;
+ } else {
+ *(volatile unsigned int *)clr_addr = val;
+ }
+#if 0
+ {
+ unsigned int val = *(volatile unsigned int *)set_addr;
+ d_printf("set_gpo_reg value : %x\n",val);
+ }
+#endif
+
+}
+/*
+ * TIMER PUBLIC FUNCTION IMPLEMENTATION
+ *********************************************************
+ */
+
+int hwtimer_reg_default_value(u8 is_reset)
+{
+ unsigned int reg_val[8];
+ int idx = 0;
+
+ d_printf("\nread HWTimer register value ...\n");
+ if(is_reset > 0) {
+ timer_reset();
+ }
+ reg_val[idx++] = hwp_timer->HWTimer_Ctrl;
+ reg_val[idx++] = hwp_timer->HWTimer_CurVal_L;
+ reg_val[idx++] = hwp_timer->HWTimer_CurVal_H;
+ reg_val[idx++] = hwp_timer->HWTimer_LockVal_L;
+ reg_val[idx++] = hwp_timer->HWTimer_LockVal_H;
+ idx = 0;
+ d_printf("HWTimer_Ctrl: 0x%x\n",reg_val[idx++]);
+ d_printf("HWTimer_CurVal_L: 0x%x\n",reg_val[idx++]);
+ d_printf("HWTimer_CurVal_H: 0x%x\n",reg_val[idx++]);
+ d_printf("HWTimer_LockVal_L: 0x%x\n",reg_val[idx++]);
+ d_printf("HWTimer_LockVal_H: 0x%x\n",reg_val[idx++]);
+ return 0;
+}
+
+int hwtimer_delay_us(u32 us)
+{
+ TIMER start_time,end_time,cur_time;
+ u32 tick,dly_time = 0;
+ u32 real_err = 0,max_err = 5,err_diff;
+
+ d_printf("\nHWTimer delay %d us ...\n",(int)us);
+
+ tick = caculate_tick_val(us);
+ hwtimer_delay_process(&start_time,&end_time,&cur_time,tick);
+
+ /* get real delay value */
+ //dly_time = (cur_time.fields.timer_l - start_time.fields.timer_l) / tick_1us;
+ dly_time = caculate_time_val((cur_time.fields.timer_l - start_time.fields.timer_l));
+ err_diff = (dly_time > us) ? (dly_time - us):(us - dly_time);
+ real_err = (err_diff * 100) / us;
+
+ d_printf("\n");
+ d_printf("expect delay: 0x%x us\n",us);
+ d_printf("real delay: 0x%x us\n",dly_time);
+ d_printf("error value: 0x%x us\n",err_diff);
+ d_printf("error percent: 0x%x\n",real_err);
+ if(real_err <= max_err) {
+ d_printf("timer error %d is less than %d,test success !!!\n",
+ real_err,max_err);
+ return 0;
+ } else {
+ d_printf("time error %d is greater than %d,test failed ###\n",
+ real_err,max_err);
+ return -1;
+ }
+}
+
+int hwtimer_delay_ms(u32 ms)
+{
+ u32 i = 0;
+
+ d_printf("delay %d ms ...\n",(int)ms);
+ for(i = 0; i < ms; i++)
+ hwt_delay_us(1000); // delay 1 ms
+ d_printf("delay %d ms success !!!\n",(int)ms);
+ return 0;
+}
+
+int hwtimer_delay_s(u32 s)
+{
+ u32 i = 0;
+ d_printf("delay %d s ...\n",(int)s);
+ for(i = 0; i < s*1000; i++)
+ hwt_delay_us(1000); //delay 1 ms
+ d_printf("delay %d s success !!!\n",(int)s);
+ return 0;
+}
+
+int hwtimer_delay_wave(int period_us, int irq_times)
+{
+ int irq_cnt = 0;
+ int half_period = period_us / 2;
+ int gpo_pin = 0;
+
+ if(irq_times <= 0)
+ return -1;
+ d_printf("\n");
+ d_printf("HWTimer delay wave starts\n");
+ d_printf("period_us is 0x%x\n",period_us);
+ d_printf("irq_times is 0x%x\n",irq_times);
+ d_printf("Output wave from GPO 0 ...\n");
+ while(1) {
+ if(irq_cnt % 2) {
+ do_set_gpo_pin(gpo_pin,0);
+ } else {
+ do_set_gpo_pin(gpo_pin,1);
+ }
+ hwt_delay_us(half_period);
+ irq_cnt++;
+ if(irq_cnt >= irq_times)
+ break;
+ }
+ do_set_gpo_pin(gpo_pin,0);
+ d_printf("HWTimer delay wave passed !!!\n");
+ return 0;
+}
+
+/******************************************************************************
+ * @name: hwtimer_interval_irq
+ * @description: to test hwtimer interval irq function
+ * @parameter:
+ * cycle: interval cycle value, this value can be:
+ * IT_PERIOD_125MS
+ * IT_PERIOD_250MS
+ * IT_PERIOD_500MS
+ * IT_PERIOD_1000MS
+ * irq_times: test times value
+ * @notes:
+ * step1: disable timer irq
+ * step2: configure irq cycle
+ * step3: clear irq mask
+ * step4: enable timer irq
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int hwtimer_interval_irq_wave( enum TIMER_IT_CYCLE_TYPE cycle,int irq_times)
+{
+ int irq_cnt = 0;
+ int gpo_pin = 0;
+
+ d_printf("\nHWTimer interval irq wave starts\n");
+ d_printf("cycle bit: 0x%x\n",cycle);
+ d_printf("irq_times: 0x%x\n",irq_times);
+
+ /* Disable interval IRQ */
+ hwp_timer->HWTimer_Ctrl &= (~TIMER_AP_INTERVAL_EN);
+
+ /* Set intterupt cycle */
+ hwp_timer->HWTimer_Ctrl &= TIMER_AP_INTERVAL(0x3); //bit0,bit1
+ hwp_timer->HWTimer_Ctrl |= TIMER_AP_INTERVAL(cycle);
+
+ /* Set irq mask interval */
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_HWTIMER_ITV_MASK;
+
+ // clear interval irq
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_HWTIMER_ITV_CLR;
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_ITV_CAUSE) != 0);
+
+ d_printf("TIMER_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("TIMER_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Clr: 0x%x\n",hwp_timer->Timer_Irq_Clr);
+ d_printf("HWTimer_Ctrl: 0x%x\n",hwp_timer->HWTimer_Ctrl);
+ d_printf("Output wave from GPO %x ...\n",gpo_pin);
+ /* Enable interval IRQ */
+ hwp_timer->HWTimer_Ctrl |= TIMER_AP_INTERVAL_EN;
+ // Get Start time
+ irq_cnt = 0;
+ while(1) {
+ // set gpo pin level HIGH or LOW
+ if(irq_cnt % 2)
+ do_set_gpo_pin(gpo_pin,0); // set low level
+ else
+ do_set_gpo_pin(gpo_pin,1); // set high level
+ // waiting for irq status set
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_ITV_CAUSE) == 0);
+ //clear irq status
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_HWTIMER_ITV_CLR;
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_ITV_CAUSE) != 0);
+
+ irq_cnt++;
+ if(irq_cnt >= irq_times) {
+ break;
+ }
+ }
+ d_printf("Output wave end\n");
+ do_set_gpo_pin(gpo_pin,0);
+
+ // disable irq
+ hwp_timer->HWTimer_Ctrl &= (~TIMER_AP_INTERVAL_EN);
+
+ // clear mask
+ hwp_timer->Timer_Irq_Mask_Clr = TIMER_AP_HWTIMER_ITV_MASK;
+ d_printf("HWTimer interval irq wave passed !!!\n");
+ return 0;
+}
+
+int hwtimer_interval_irq( enum TIMER_IT_CYCLE_TYPE cycle,int irq_times)
+{
+ TIMER timer_a,timer_b;
+ u32 tick_diff = 0,e_period = 0,r_period,d_period = 0;
+ volatile int irq_cnt = 0;
+ u32 real_err = 0, max_err = 5;
+ volatile u32 t1;
+ volatile u32 t2;
+
+ d_printf("\nHWTimer interval irq test starts\n");
+ d_printf("cycle bit: 0x%x\n",cycle);
+ d_printf("irq_times: 0x%x\n",irq_times);
+
+ /* Disable interval IRQ */
+ hwp_timer->HWTimer_Ctrl &= (~TIMER_AP_INTERVAL_EN);
+
+ /* Set intterupt cycle */
+ hwp_timer->HWTimer_Ctrl &= TIMER_AP_INTERVAL(0x3); //bit0,bit1
+ hwp_timer->HWTimer_Ctrl |= TIMER_AP_INTERVAL(cycle);
+
+ /* Set/Clear irq mask interval */
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_HWTIMER_ITV_MASK;
+
+ // clear interval irq
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_HWTIMER_ITV_CLR;
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_ITV_CAUSE) != 0);
+
+ d_printf("TIMER_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("TIMER_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Clr: 0x%x\n",hwp_timer->Timer_Irq_Clr);
+ d_printf("HWTimer_Ctrl: 0x%x\n",hwp_timer->HWTimer_Ctrl);
+
+ /* Enable interval IRQ */
+ hwp_timer->HWTimer_Ctrl |= TIMER_AP_INTERVAL_EN;
+ // Get Start time
+ get_hwtimer_time(&timer_a);
+ while(1) {
+ //wait irq status
+ //while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_ITV_STATUS) == 0);
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_ITV_CAUSE) == 0);
+ get_hwtimer_time(&timer_b);
+ //clear irq status
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_HWTIMER_ITV_CLR;
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_ITV_CAUSE) != 0);
+
+ irq_cnt++;
+ if(irq_cnt >= irq_times) {
+ break;
+ }
+ }
+ // disable irq
+ hwp_timer->HWTimer_Ctrl &= (~TIMER_AP_INTERVAL_EN);
+ // clear mask
+ hwp_timer->Timer_Irq_Mask_Clr = TIMER_AP_HWTIMER_ITV_MASK;
+ // check result
+ d_printf("Timer_a value,h:%x,l:%x\n",
+ timer_a.fields.timer_h,
+ timer_a.fields.timer_l);
+ d_printf("Timer_b value,h:%x,l:%x\n",
+ timer_b.fields.timer_h,
+ timer_b.fields.timer_l);
+ switch(cycle) {
+ case IT_PERIOD_125MS: e_period = 125;break;
+ case IT_PERIOD_250MS: e_period = 250;break;
+ case IT_PERIOD_500MS: e_period = 500;break;
+ case IT_PERIOD_1000MS: e_period = 1000;break;
+ default:d_printf("timer cycle error,exit !\n");return -1;
+ }
+
+ t1 = (u32)(timer_b.fields.timer_l);
+ t2 = (u32)(timer_a.fields.timer_l);
+ tick_diff = t1 - t2;
+ r_period = caculate_time_val(tick_diff) / irq_times;
+ r_period = r_period / 1000;
+ d_period = (r_period > e_period)?(r_period - e_period):(e_period - r_period);
+ real_err = (d_period * 100) / e_period;
+
+ d_printf("\n");
+ d_printf("tick_diff: 0x%x\n",tick_diff);
+ d_printf("expected period: 0x%x\n",e_period);
+ d_printf("real period: 0x%x\n",r_period);
+ d_printf("error value: 0x%x\n",d_period);
+ d_printf("error percent 0x%x\n",real_err);
+ if(real_err <= max_err) {
+ d_printf("timer error %d is less than %d,test success !!!\n",
+ real_err,max_err);
+ return 0;
+ } else {
+ d_printf("timer error %d is greater than %d,test failed ###\n",
+ real_err,max_err);
+ return -1;
+ }
+}
+
+/******************************************************************************
+ * @name: hwtimer_wrap_irq
+ * @description: to test hwtimer wrap irq function
+ * @parameter:
+ * irq_times: test times value
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int hwtimer_wrap_irq(int irq_times)
+{
+ int sec_count = 0;
+ u32 val_h,val_l,wait_sec = 3,wait_tick;
+
+ d_printf("test HWTimer wrap irq starts\n");
+ timer_reset();
+ // disable interval irq
+ hwp_timer->HWTimer_Ctrl &= (~TIMER_AP_INTERVAL_EN);
+ // disable warp irq
+ hwp_timer->Timer_Irq_Mask_Clr = TIMER_AP_HWTIMER_WRAP_MASK;
+ // clear warp irq
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_HWTIMER_WRAP_CLR;
+ // enable wrap irq
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_HWTIMER_WRAP_MASK;
+ wait_tick = 0xFFFFFFFF - caculate_tick_val(wait_sec * 1000000);
+ sec_count = 0;
+ d_printf("\nWaiting high 32 bit Counter increasing to 0x%x...\n",
+ 0xFFFFFFFE);
+ while(1) {
+ val_h = hwp_timer->HWTimer_LockVal_H;
+ val_l = hwp_timer->HWTimer_LockVal_L;
+ do_waiting_print(&sec_count,0,".");
+ if(val_h == 0xFFFFFFFE)
+ break;
+ }
+ d_printf("\nWaiting low 32 bit counter increasing to 0x%x\n",
+ wait_tick);
+ while(1) {
+ val_h = hwp_timer->HWTimer_LockVal_H;
+ val_l = hwp_timer->HWTimer_LockVal_L;
+ do_waiting_print(&sec_count,0,".");
+ if(val_l >= wait_tick)
+ break;
+ }
+ d_printf("\nWaiting Wrap interrupt occuring...\n");
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_WRAP_CAUSE) == 0);
+ val_h = hwp_timer->HWTimer_LockVal_H;
+ val_l = hwp_timer->HWTimer_LockVal_L;
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_HWTIMER_WRAP_CLR;
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_HWTIMER_WRAP_CAUSE) != 0);
+ // disable warp irq
+ hwp_timer->Timer_Irq_Mask_Clr = TIMER_AP_HWTIMER_WRAP_MASK;
+ // clear wrap interrupt status
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_HWTIMER_WRAP_CLR;
+ d_printf("Time elasped 0x%x us\n",sec_count);
+ d_printf("When wrap irq occur, the timer tick is H:%x,L:%x\n",
+ val_h,val_l);
+ // after warp interrupt occur, the counter should change from maximum value to 0.
+ if((val_l & 0xFFFFFFF0) != 0) {
+ d_printf("HWTimer warp irq test failed ###\n");
+ return -1;
+ } else {
+ d_printf("HWTimer warp irq test success !!!\n");
+ return 0;
+ }
+}
+
+/******************************************************************************
+ * @name: hwtimer_lockval_function
+ * @description: to test hwtimer lock function
+ * @parameter:
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+int hwtimer_lock_value(void)
+{
+ u32 val_h,val_l;
+ u32 wait_tick = 0, wait_sec = 3,cnt_1s = 0;
+ int ok = 0;
+
+ d_printf("\nHWTimer lock value starts\n");
+ wait_tick = 0xFFFFFFFF - caculate_tick_val(wait_sec * 1000000);
+ timer_reset();
+ val_l = hwp_timer->HWTimer_LockVal_L;
+ val_h = hwp_timer->HWTimer_LockVal_H;
+ if(val_h != 0) {
+ d_printf("High 32 bit counter is not zero,exit\n");
+ return -1;
+ }
+ d_printf("High 32 bit counter val: 0x%x\n",val_h);
+ d_printf("Low 32 bit counter val : 0x%x\n",val_l);
+ d_printf("\nWaiting for low 32 bit counter increasing to 0x%x...\n",wait_tick);
+ while(1) {
+ val_l = hwp_timer->HWTimer_LockVal_L;
+ val_h = hwp_timer->HWTimer_LockVal_H;
+ if(val_l >= wait_tick)
+ break;
+ do_waiting_print(NULL,0,".");
+ cnt_1s++;
+ }
+ d_printf("\nTime has elapsed 0x%x seconds\n",cnt_1s);
+ d_printf("\nWaiting for jitter occuring...\n");
+ while(1) {
+ val_l = hwp_timer->HWTimer_LockVal_L;
+ val_h = hwp_timer->HWTimer_LockVal_H;
+ if((val_l == 0) || (val_l <= 0xFF))
+ break;
+ }
+ // when jitter occur, val_h = 0x00000000, val_l = 0xffffffff,
+ // if okay, next should be: val_h = 0x00000001, val_l = 0x00000000
+ // if error, maybe: val_h = 0x00000000, val_h = 0x00000000;
+ if(val_h == 1)
+ ok = 1;
+ d_printf("Get last counter high 32 bit: 0x%x\n",val_h);
+ d_printf("Get last counter low 32 bit: 0x%x\n",val_l);
+ if(ok) {
+ d_printf("HWTimer lock value test success !!!\n");
+ return 0;
+ } else {
+ d_printf("HWTimer lock value test failed ###\n");
+ return -1;
+ }
+}
+
+/******************************************************************************
+ * @name: get_ostimer_register_value
+ * @description: to test ostimer register default value
+ * @parameter:
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int ostimer_reg_default_value(int is_reset)
+{
+ u32 reg_val[10];
+ int idx = 0;
+
+ d_printf("read OSTimer register value ...\n");
+ if(is_reset > 0) {
+ timer_reset();
+ }
+ reg_val[idx++] = hwp_timer->OSTimer_Ctrl;
+ reg_val[idx++] = hwp_timer->OSTimer_LoadVal_L;
+ reg_val[idx++] = hwp_timer->OSTimer_CurVal_H;
+ reg_val[idx++] = hwp_timer->OSTimer_CurVal_L;
+ reg_val[idx++] = hwp_timer->OSTimer_LockVal_H;
+ reg_val[idx++] = hwp_timer->OSTimer_LockVal_L;
+ reg_val[idx++] = hwp_timer->Timer_Irq_Mask_Set;
+ reg_val[idx++] = hwp_timer->Timer_Irq_Mask_Clr;
+ reg_val[idx++] = hwp_timer->Timer_Irq_Cause;
+ idx = 0;
+ d_printf("OSTimer_Ctrl: %x\n",reg_val[idx++]);
+ d_printf("OSTimer_LoadVal_L: %x\n",reg_val[idx++]);
+ d_printf("OSTimer_CurVal_H: %x\n",reg_val[idx++]);
+ d_printf("OSTimer_CurVal_L: %x\n",reg_val[idx++]);
+ d_printf("OSTimer_LockVal_H: %x\n",reg_val[idx++]);
+ d_printf("OSTimer_LockVal_L: %x\n",reg_val[idx++]);
+ d_printf("Timer_Irq_Mask_Set: %x\n",reg_val[idx++]);
+ d_printf("Timer_Irq_Mask_Clr: %x\n",reg_val[idx++]);
+ d_printf("Timer_Irq_Cause: %x\n",reg_val[idx++]);
+ return 0;
+}
+
+static void ostimer_enable(int is_enable)
+{
+ if(is_enable) {
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_ENABLE;
+ while((hwp_timer->OSTimer_Ctrl & TIMER_AP_ENABLED) == 0);
+ } else {
+ hwp_timer->OSTimer_Ctrl &= (u32)(~TIMER_AP_ENABLE);
+ while((hwp_timer->OSTimer_Ctrl & TIMER_AP_ENABLED) != 0);
+ }
+}
+
+static void ostimer_clear_irq(void)
+{
+ // Clear IRQ status
+ hwp_timer->Timer_Irq_Clr = TIMER_AP_OSTIMER_CLR;
+ // Waiting until state is cleared
+ //while((hwp_timer->OSTimer_Ctrl & TIMER_AP_CLEARED) != 0);
+ while((hwp_timer->Timer_Irq_Cause & TIMER_AP_OSTIMER_CAUSE) != 0);
+}
+
+/******************************************************************************
+ * @name: ostimer_test_irq_status
+ * @description: to check irq status wether is set when interrupt occuring.
+ * @parameter:
+ * tick: the initial value of ostimer starts
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int ostimer_test_irq_status(u32 us)
+{
+ u64 temp;
+ u32 load_tick_h,load_tick_l;
+ int ok = 0;
+
+ d_printf("\nOSTimer test irq status starts\n");
+ // disable timer
+ ostimer_enable(0);
+ // repeat mode,not wrap
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_WRAP);
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_REPEAT;
+ // write initial value
+ temp = caculate_tick_val(us);
+ load_tick_l = 0xFFFFFFFF & temp;
+#ifdef USE_DATA_SIZE_64_BIT
+ load_tick_h = 0xFFFFFF & (temp >> 32);
+#else
+ load_tick_h = 0;
+#endif
+ hwp_timer->OSTimer_LoadVal_L = load_tick_l;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_OS_LOADVAL_H_MASK);
+ hwp_timer->OSTimer_Ctrl |= load_tick_h;
+ // load to initial value
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_LOAD;
+ // clear irq status
+ ostimer_clear_irq();
+ d_printf("IRQ Mask is cleared\n");
+ // clear mask
+ hwp_timer->Timer_Irq_Mask_Clr = TIMER_AP_OSTIMER_MASK;
+ // print value for debug
+ d_printf("OSTimer_Ctrl: 0x%x\n",hwp_timer->OSTimer_Ctrl);
+ d_printf("OSTimer_LoadVal_L: 0x%x\n",hwp_timer->OSTimer_LoadVal_L);
+ d_printf("Timer_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("Timer_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Cause: 0x%x\n",hwp_timer->Timer_Irq_Cause);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",hwp_timer->OSTimer_LockVal_H);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",hwp_timer->OSTimer_LockVal_L);
+ d_printf("\n");
+ d_printf("Enable timer ...\n");
+ d_printf("Waiting for interrupt occuring ...\n");
+ ostimer_enable(1);
+ // waiting for irq cause state
+ while(1) {
+ if(hwp_timer->Timer_Irq_Cause & TIMER_AP_OSTIMER_STATUS) {
+ // the irq cause flag should not be 1
+ if((hwp_timer->Timer_Irq_Cause & TIMER_AP_OSTIMER_CAUSE) == 0)
+ ok = 1;
+ else
+ ok = 0;
+ break;
+ }
+ }
+ d_printf("\n");
+ d_printf("OSTimer_Ctrl: 0x%x\n",hwp_timer->OSTimer_Ctrl);
+ d_printf("OSTimer_LoadVal_L: 0x%x\n",hwp_timer->OSTimer_LoadVal_L);
+ d_printf("Timer_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("Timer_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Cause: 0x%x\n",hwp_timer->Timer_Irq_Cause);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",hwp_timer->OSTimer_LockVal_H);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",hwp_timer->OSTimer_LockVal_L);
+ d_printf("\n");
+ d_printf("disable timer ...\n");
+ ostimer_enable(0);
+ ostimer_clear_irq();
+ if(ok) {
+ d_printf("\nOSTimer irq status test success !!!\n");
+ return 0;
+ } else {
+ d_printf("\nOSTimer irq status test failed ###\n");
+ return -1;
+ }
+}
+
+/******************************************************************************
+ * @name: ostimer_delay_us
+ * @description: delay n us by ostimer
+ * @parameter:
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+void ost_delay_us(u32 us)
+{
+ u32 load_tick_h,load_tick_l;
+ u64 temp;
+
+ // disable timer
+ ostimer_enable(0);
+ // repeat mode,not wrap
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_WRAP);
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_REPEAT;
+ // write initial value
+ temp = caculate_tick_val(us);
+ load_tick_l = 0xFFFFFFFF & temp;
+#ifdef USE_DATA_SIZE_64_BIT
+ load_tick_h = 0xFFFFFF & (temp >> 32);
+#else
+ load_tick_h = 0x0;
+#endif
+ hwp_timer->OSTimer_LoadVal_L = load_tick_l;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_OS_LOADVAL_H_MASK);
+ hwp_timer->OSTimer_Ctrl |= load_tick_h;
+ // load to initial value
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_LOAD;
+ // clear irq status
+ ostimer_clear_irq();
+ // set mask
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_OSTIMER_MASK;
+ // enable timer
+ ostimer_enable(1);
+ // waiting for irq cause state
+ while(1) {
+ if(hwp_timer->Timer_Irq_Cause & TIMER_AP_OSTIMER_CAUSE) {
+ break;
+ }
+ }
+ ostimer_enable(0);
+ ostimer_clear_irq();
+ return;
+}
+
+int ostimer_delay_wave(int period_us,int times)
+{
+ u32 half_period = period_us / 2;
+ int cnt = 0;
+ int gpo_pin = 0;
+
+ d_printf("OSTimer delay wave starts\n");
+ while(1) {
+ if(cnt % 2) {
+ do_set_gpo_pin(gpo_pin,0);
+ } else {
+ do_set_gpo_pin(gpo_pin,1);
+ }
+ ost_delay_us(half_period);
+ cnt++;
+ if(cnt >= times)
+ break;
+ }
+ d_printf("OSTimer delay wave test success !!!\n");
+ return 0;
+}
+
+int ostimer_delay_us(u32 us)
+{
+ u32 load_tick_h,load_tick_l,real_dly,err_dly,max_err = 5,real_err;
+ u64 temp;
+ int ok = 0;
+ TIMER timer_a,timer_b;
+
+ d_printf("\nOSTimer delay %d us ...\n",us);
+ // disable timer
+ ostimer_enable(0);
+ // repeat mode,not wrap
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_WRAP);
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_REPEAT;
+ // write initial value
+ temp = caculate_tick_val(us);
+ load_tick_l = 0xFFFFFFFF & temp;
+#ifdef USE_DATA_SIZE_64_BIT
+ load_tick_h = 0xFFFFFF & (temp >> 32);
+#else
+ load_tick_h = 0x0;
+#endif
+ hwp_timer->OSTimer_LoadVal_L = load_tick_l;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_OS_LOADVAL_H_MASK);
+ hwp_timer->OSTimer_Ctrl |= load_tick_h;
+ // load to initial value
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_LOAD;
+ // clear irq status
+ ostimer_clear_irq();
+ // set mask
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_OSTIMER_MASK;
+ // print value for debug
+ d_printf("OSTimer_Ctrl: 0x%x\n",hwp_timer->OSTimer_Ctrl);
+ d_printf("OSTimer_LoadVal_L: 0x%x\n",hwp_timer->OSTimer_LoadVal_L);
+ d_printf("Timer_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("Timer_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Cause: 0x%x\n",hwp_timer->Timer_Irq_Cause);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",hwp_timer->OSTimer_LockVal_H);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",hwp_timer->OSTimer_LockVal_L);
+ d_printf("Enable timer...\n");
+ d_printf("Waiting for interrupt occuring...\n");
+ ostimer_enable(1);
+ get_hwtimer_time(&timer_a);
+ // waiting for irq cause state
+ while(1) {
+ if(hwp_timer->Timer_Irq_Cause & TIMER_AP_OSTIMER_CAUSE) {
+ get_hwtimer_time(&timer_b);
+ break;
+ }
+ }
+ real_dly = caculate_time_val((timer_b.fields.timer_l - timer_a.fields.timer_l));
+ err_dly = (real_dly > us) ? (real_dly - us):(us - real_dly);
+ real_err = (err_dly * 100) / real_dly;
+ if(real_err <= max_err)
+ ok = 1;
+ else
+ ok = 0;
+
+ d_printf("\n");
+ d_printf("Expected delay: 0x%x\n",us);
+ d_printf("Real delay: 0x%x\n",real_dly);
+ d_printf("Error value: 0x%x\n",err_dly);
+ d_printf("Error percent: 0x%x\n",real_err);
+ d_printf("\n");
+ d_printf("OSTimer_Ctrl: 0x%x\n",hwp_timer->OSTimer_Ctrl);
+ d_printf("OSTimer_LoadVal_L: 0x%x\n",hwp_timer->OSTimer_LoadVal_L);
+ d_printf("Timer_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("Timer_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Cause: 0x%x\n",hwp_timer->Timer_Irq_Cause);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",hwp_timer->OSTimer_LockVal_H);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",hwp_timer->OSTimer_LockVal_L);
+ d_printf("\n");
+ d_printf("disable timer\n");
+ ostimer_enable(0);
+ ostimer_clear_irq();
+ if(ok) {
+ d_printf("\nerror %d is less than %d,test success !!!\n"
+ ,real_err,max_err);
+ return 0;
+ } else {
+ d_printf("\nerror %d is greater than %d,test failed ####\n"
+ ,real_err,max_err);
+ return -1;
+ }
+}
+
+/******************************************************************************
+ * @name: ostimer_delay_ms
+ * @description: delay n ms by ostimer
+ * @parameter:
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int ostimer_delay_ms(u32 ms)
+{
+ d_printf("OSTimer delay %d ms \n",ms);
+ ostimer_delay_us(ms * 1000);
+ d_printf("OSTimer delay ms test success !!!\n");
+ return 0;
+}
+
+/******************************************************************************
+ * @name: ostimer_repeat_irq
+ * @description: to generate irq status when ostimer work at repeat mode
+ * @parameter:
+ * period: the interrupt period us time value
+ * irq_times: the irq occuring times when ostimer is running.
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int ostimer_repeat_irq(u32 period,int irq_times)
+{
+ u32 load_tick_h,load_tick_l,real_period,err_period,err_percent,max_err_percent = 5;
+ int irq_cnt = 0,ok = 0;
+ u64 temp;
+ TIMER timer_a,timer_b;
+
+ d_printf("\nOSTimer repeat irq %d times with period %d\n",irq_times,period);
+ // disable timer
+ ostimer_enable(0);
+ // repeat mode,not wrap
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_REPEAT;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_WRAP);
+ // write initial value
+ temp = caculate_tick_val(period);
+ load_tick_l = 0xFFFFFFFF & (temp);
+#ifdef USE_DATA_SIZE_64_BIT
+ load_tick_h = 0xFFFFFF & (temp >> 32);
+#else
+ load_tick_h = 0x0;
+#endif
+ hwp_timer->OSTimer_LoadVal_L = load_tick_l;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_OS_LOADVAL_H_MASK);
+ hwp_timer->OSTimer_Ctrl |= load_tick_h;
+ // load to initial value
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_LOAD;
+ // clear irq status
+ ostimer_clear_irq();
+ // set mask
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_OSTIMER_MASK;
+ // print value for debug
+ d_printf("OSTimer_Ctrl: 0x%x\n",hwp_timer->OSTimer_Ctrl);
+ d_printf("OSTimer_LoadVal_L: 0x%x\n",hwp_timer->OSTimer_LoadVal_L);
+ d_printf("Timer_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("Timer_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Cause: 0x%x\n",hwp_timer->Timer_Irq_Cause);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",hwp_timer->OSTimer_LockVal_H);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",hwp_timer->OSTimer_LockVal_L);
+ d_printf("\n");
+ d_printf("Enable timer...\n");
+ d_printf("Waiting for interrupt occuring...\n");
+ ostimer_enable(1);
+ get_hwtimer_time(&timer_a);
+ // waiting for irq cause state
+ irq_cnt = 0;
+ while(1) {
+ if(hwp_timer->Timer_Irq_Cause & TIMER_AP_OSTIMER_CAUSE) {
+ d_printf(".");
+ ostimer_clear_irq();
+ irq_cnt++;
+ }
+ if(irq_cnt >= irq_times) {
+ get_hwtimer_time(&timer_b);
+ break;
+ }
+ }
+ real_period = caculate_time_val((timer_b.fields.timer_l - timer_a.fields.timer_l)) / irq_times;
+ err_period = (real_period > period) ? (real_period - period):(period - real_period);
+ err_percent = (err_period * 100) / period;
+ if(err_percent <= max_err_percent)
+ ok = 1;
+ else
+ ok = 0;
+ // disable timer
+ ostimer_enable(0);
+ // clear irq status
+ ostimer_clear_irq();
+ d_printf("\n");
+ d_printf("Expected period: 0x%x\n",period);
+ d_printf("Real period: 0x%x\n",real_period);
+ d_printf("Error value: 0x%x\n",err_period);
+ d_printf("Error percent: 0x%x\n",err_percent);
+ d_printf("\n");
+ if(ok) {
+ d_printf("\nerror %d is less than %d,test success !!!\n"
+ ,err_percent,max_err_percent);
+ return 0;
+ } else {
+ d_printf("\nerr %d is greater than %d,test failed ###\n"
+ ,err_percent,max_err_percent);
+ return -1;
+ }
+}
+
+/******************************************************************************
+ * @name: ostimer_wrap_irq
+ * @description: to generate irq status when os timer work at wrap mode
+ * @parameter:
+ * tick: the initial value of ostimer starts
+ * irq_times: the irq occuring times when ostimer is running.
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int ostimer_wrap_irq(u64 tick, int irq_times)
+{
+ u32 load_tick_h,load_tick_l;
+ int irq_cnt = 0,print_cnt = 0;
+ u32 tick_val_h,tick_val_l;
+ u32 tick_val_hh,tick_val_ll;
+
+ print_cnt = print_cnt;
+ d_printf("\nOSTimer wrap irq starts\n");
+ // disable timer
+ ostimer_enable(0);
+ // wrap mode,not repeat
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_WRAP;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_REPEAT);
+ // write initial value
+ load_tick_l = 0xFFFFFFFF & tick;
+#ifdef USE_DATA_SIZE_64_BIT
+ load_tick_h = 0xFFFFFF & (tick >> 32);
+#else
+ load_tick_h = 0x0;
+#endif
+ hwp_timer->OSTimer_LoadVal_L = load_tick_l;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_OS_LOADVAL_H_MASK);
+ hwp_timer->OSTimer_Ctrl |= load_tick_h;
+ // load to initial value
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_LOAD;
+ // clear irq status
+ ostimer_clear_irq();
+ // set mask
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_OSTIMER_MASK;
+ // print value for debug
+ d_printf("OSTimer_Ctrl: 0x%x\n",hwp_timer->OSTimer_Ctrl);
+ d_printf("OSTimer_LoadVal_L: 0x%x\n",hwp_timer->OSTimer_LoadVal_L);
+ d_printf("Timer_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("Timer_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Cause: 0x%x\n",hwp_timer->Timer_Irq_Cause);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",hwp_timer->OSTimer_LockVal_H);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",hwp_timer->OSTimer_LockVal_L);
+ d_printf("\n");
+ d_printf("Enable timer...\n");
+ d_printf("Waiting for interrupt occuring...\n");
+ // enable timer
+ ostimer_enable(1);
+ // waiting for irq cause state
+ irq_cnt = 0;
+ while(1) {
+ if(hwp_timer->Timer_Irq_Cause & TIMER_AP_OSTIMER_CAUSE) {
+ // clear irq status
+ ostimer_clear_irq();
+ irq_cnt++;
+ }
+ if(irq_cnt >= irq_times) {
+ // delay sometime, then to check lock value which should be the maximum value
+ //hwt_delay_us(1000);
+ tick_val_hh = hwp_timer->OSTimer_LockVal_H;
+ tick_val_ll = hwp_timer->OSTimer_LockVal_L;
+ break;
+ }
+ }
+ hwt_delay_us(10);
+ tick_val_h = hwp_timer->OSTimer_LockVal_H;
+ tick_val_l = hwp_timer->OSTimer_LockVal_L;
+ // disable timer
+ ostimer_enable(0);
+ // clear irq status
+ ostimer_clear_irq();
+ d_printf("OSTimer_LockVal_HH: 0x%x\n",tick_val_hh);
+ d_printf("OSTimer_LockVal_LL: 0x%x\n",tick_val_ll);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",tick_val_h);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",tick_val_l);
+ if(tick_val_h == 0xFFFFFFFF) {
+ d_printf("\nOSTimer wrap irq test success !!!\n");
+ return 0;
+ } else {
+ d_printf("\nOSTimer wrap irq test failed ###\n");
+ return -1;
+ }
+}
+
+/******************************************************************************
+ * @name: ostimer_lock_value
+ * @description: to check lock function if worked when counter's value is
+ * changing.
+ * @parameter:
+ * tick: the initial value of ostimer starts
+ * @notes:
+ * @return: 0(SUCCESS), -1(FAILED)
+ ******************************************************************************
+ */
+
+int ostimer_lock_value(void)
+{
+ int ok = 0;
+ u32 read_val_h,read_val_l;
+ u32 val_h,val_l;
+
+ d_printf("\nOSTimer lock value test starts\n");
+ ostimer_enable(0);
+ // wrap mode,not repeat mode
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_WRAP;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_REPEAT);
+ // write load value
+ val_h = 0x00000001;
+ val_l = 0x00000000;
+ hwp_timer->OSTimer_LoadVal_L = TIMER_AP_OS_LOADVAL_L(val_l);
+ hwp_timer->OSTimer_Ctrl &= ~(TIMER_AP_OS_LOADVAL_H_MASK);
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_OS_LOADVAL_H(val_h);
+ // load to initial value
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_LOAD;
+ // clear irq status
+ ostimer_clear_irq();
+ // set mask
+ hwp_timer->Timer_Irq_Mask_Set = TIMER_AP_OSTIMER_MASK;
+ d_printf("Waiting for jitter occur...\n");
+ // enable timer
+ ostimer_enable(1);
+ while(1) {
+ read_val_h = hwp_timer->OSTimer_LockVal_H;
+ read_val_l = hwp_timer->OSTimer_LockVal_L;
+ if(read_val_h == 0)
+ break;
+ }
+ // disable timer
+ ostimer_enable(0);
+ // clear irq status
+ ostimer_clear_irq();
+ /* When jitter occur, read_val_h = 0x00000001,read_val_l = 0x00000000
+ if okay, read_val_h = 0x00000000,read_val_l = 0xFFFFFFFF
+ if error, read_val_h = 0x00000000,read_val_l = 0x00000000
+ */
+ if((read_val_l & 0xFFFFFF00) == 0xFFFFFF00)
+ ok = 1;
+ else
+ ok = 0;
+ // read value
+ d_printf("Last lock value h: 0x%x\n",read_val_h);
+ d_printf("Last lock value l: 0x%x\n",read_val_l);
+ if(ok) {
+ d_printf("OSTimer lock value test success!!!\n");
+ return 0;
+ } else {
+ d_printf("OSTimer lock value test failed ###\n");
+ return -1;
+ }
+}
+
+int timer_simple_test_in(unsigned int period)
+{
+ int cnt = 0;
+ d_printf("print message with period %d ms\n",(int)period);
+ do {
+ hwt_delay_ms(period); // delay one second
+ d_printf("Hello world,0x%x\n",cnt);
+ cnt++;
+ }while(cnt<5);
+ d_printf("test finished\n");
+ return 0;
+}
+
+/*
+ * TIMER FULL TEST
+ *********************************************************
+ */
+int timer_full_test_in(int timer_id, enum TIMER_TC_ID_TYPE case_id)
+{
+ int ret = 0;
+ // reset timer
+ timer_reset();
+ hwt_delay_us(10);
+
+ switch(case_id) {
+ case HWTIMER_TC_ID_REG_DEFAULT_VAL:
+ ret = hwtimer_reg_default_value(1);
+ break;
+ case HWTIMER_TC_ID_DELAY_US:
+ //ret = hwtimer_delay_us(61);
+ //ret += hwtimer_delay_us(610);
+ ret += hwtimer_delay_us(1000);
+ break;
+ case HWTIMER_TC_ID_DELAY_MS:
+ ret = hwtimer_delay_ms(50);
+ ret += hwtimer_delay_ms(100);
+ ret += hwtimer_delay_ms(1000);
+ break;
+ case HWTIMER_TC_ID_DELAY_S:
+ ret = hwtimer_delay_s(1);
+ ret += hwtimer_delay_s(2);
+ break;
+ case HWTIMER_TC_ID_DELAY_WAVE_1MS:
+ // output 10000 wave which period is 1000 us,
+ ret = hwtimer_delay_wave(1000,10000);
+ break;
+ case HWTIMER_TC_ID_INTERVAL_IRQ_125MS:
+ ret = hwtimer_interval_irq(IT_PERIOD_125MS,4);
+ break;
+ case HWTIMER_TC_ID_INTERVAL_IRQ_250MS:
+ ret = hwtimer_interval_irq(IT_PERIOD_250MS,4);
+ break;
+ case HWTIMER_TC_ID_INTERVAL_IRQ_500MS:
+ ret = hwtimer_interval_irq(IT_PERIOD_500MS,2);
+ break;
+ case HWTIMER_TC_ID_INTERVAL_IRQ_1000MS:
+ ret = hwtimer_interval_irq(IT_PERIOD_1000MS,2);
+ break;
+ case HWTIMER_TC_ID_IRQ_WAVE_125MS:
+ ret = hwtimer_interval_irq_wave(IT_PERIOD_125MS,80);
+ break;
+ case HWTIMER_TC_ID_IRQ_WAVE_250MS:
+ ret = hwtimer_interval_irq_wave(IT_PERIOD_250MS,40);
+ break;
+ case HWTIMER_TC_ID_IRQ_WAVE_500MS:
+ ret = hwtimer_interval_irq_wave(IT_PERIOD_500MS,20);
+ break;
+ case HWTIMER_TC_ID_IRQ_WAVE_1000MS:
+ ret = hwtimer_interval_irq_wave(IT_PERIOD_1000MS,10);
+ break;
+ case HWTIMER_TC_ID_WRAP_IRQ:
+ ret = hwtimer_wrap_irq(1);//test only once
+ break;
+ case HWTIMER_TC_ID_LOCK_VAL:
+ ret = hwtimer_lock_value();
+ break;
+ case OSTIMER_TC_ID_REG_DEFAULT_VAL:
+ ret = ostimer_reg_default_value(1);
+ break;
+ case OSTIMER_TC_ID_DELAY_US:
+ ret = ostimer_delay_us(500); // delay 500 us
+ break;
+ case OSTIMER_TC_ID_DELAY_MS:
+ ret = ostimer_delay_ms(5); // delay 500 ms
+ break;
+ case OSTIMER_TC_ID_DELAY_WAVE_1MS:
+ ret = ostimer_delay_wave(1000,10000);
+ break;
+ case OSTIMER_TC_ID_TEST_IRQ_STATUS:
+ ret = ostimer_test_irq_status(500); // delay 500 us for checking irq status and irq cause
+ break;
+ case OSTIMER_TC_ID_IRQ_REPEAT:
+ ret = ostimer_repeat_irq(10000,10); // period = 10 ms, 10 times
+ break;
+ case OSTIMER_TC_ID_IRQ_WRAP:
+ ret = ostimer_wrap_irq(0x1000,1); //initial tick = 0x1000, test only once
+ break;
+ case OSTIMER_TC_ID_LOCK_VAL:
+ ret = ostimer_lock_value();
+ break;
+ default:
+ d_printf("Test case is not found\n");
+ ret = -1;
+ break;
+ }
+ return ret;
+}
+
+void config_clock_source(void)
+{
+ char ch;
+ while(1) {
+ d_printf("\nSelect TIMER clock source\n"
+ "\t 1: 2MHz clock source\n"
+ "\t 2: 16KHz clock source\n"
+ "\t q: exit\n");
+ ch = serial_getc();
+ if(ch == 'q') {
+ d_printf("Exit configuration\n");
+ return;
+ }
+ d_printf("Input cmd: ");
+ serial_putc(ch);
+ d_printf("\n");
+ switch(ch) {
+ case '1':
+ set_timer_clk_freq(1);
+ d_printf("Set 2MHz clock source OK\n");
+ break;
+ case '2':
+ set_timer_clk_freq(0);
+ d_printf("Set 16KHz clock source OK\n");
+ break;
+ default:
+ d_printf("Invalid cmd\n");
+ break;
+ }
+ }
+}
+
+void timer_single_test_in(int timer_id)
+{
+ char choice;
+ int case_id = 0xff;
+ d_printf("**************************************************************"
+ "\n\tThis program is used to output wave from GPO 0\n"
+ "\tAll waves are generated by HWTimer and OSTimer\n"
+ "*************************************************************");
+ while(1) {
+ d_printf("\nInput your choice:\n"
+ "\t1: wave period 1 ms by hwtimer\n"
+ "\t2: wave period 250ms\n"
+ "\t3: wave period 500ms\n"
+ "\t4: wave period 1000ms\n"
+ "\t5: wave period 2000ms\n"
+ "\t6: wave period 1 ms by ostimer\n"
+ "\tq: exit\n");
+ choice = serial_getc();
+ if(choice == 'q') {
+ d_printf("Have a nice day !\n");
+ return;
+ }
+ d_printf("Input cmd: ");
+ serial_putc(choice);
+ d_printf("\n");
+ switch(choice) {
+ case '1': case_id = HWTIMER_TC_ID_DELAY_WAVE_1MS;break;
+ case '2': case_id = HWTIMER_TC_ID_IRQ_WAVE_125MS;break;
+ case '3': case_id = HWTIMER_TC_ID_IRQ_WAVE_250MS;break;
+ case '4': case_id = HWTIMER_TC_ID_IRQ_WAVE_500MS;break;
+ case '5': case_id = HWTIMER_TC_ID_IRQ_WAVE_1000MS;break;
+ case '6': case_id = OSTIMER_TC_ID_DELAY_WAVE_1MS;break;
+ default: d_printf("\nInvalied input\n"); case_id = 0xFF;break;
+ }
+ if(case_id != 0xFF)
+ timer_full_test_in(timer_id, case_id);
+ }
+}
+
+#ifdef CONFIG_IRQ
+int start_ostimer(u32 us)
+{
+ u64 temp;
+ u32 load_tick_h,load_tick_l;
+
+ d_printf("OSTimer runs at repeat irq mode,period is %d us\n",us);
+ // disable timer
+ ostimer_enable(0);
+ // repeat mode,not wrap
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_WRAP);
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_REPEAT;
+ // write initial value
+ temp = caculate_tick_val(us);
+ load_tick_l = 0xFFFFFFFF & temp;
+#ifdef USE_DATA_SIZE_64_BIT
+ load_tick_h = 0xFFFFFF & (temp >> 32);
+#else
+ load_tick_h = 0;
+#endif
+ hwp_timer->OSTimer_LoadVal_L = load_tick_l;
+ hwp_timer->OSTimer_Ctrl &= (~TIMER_AP_OS_LOADVAL_H_MASK);
+ hwp_timer->OSTimer_Ctrl |= load_tick_h;
+ // load to initial value
+ hwp_timer->OSTimer_Ctrl |= TIMER_AP_LOAD;
+ // clear irq status
+ ostimer_clear_irq();
+ // set mask
+ hwp_timer->Timer_Irq_Mask_Set |= TIMER_AP_OSTIMER_MASK;
+ // print value for debug
+#if 0
+ d_printf("OSTimer_Ctrl: 0x%x\n",hwp_timer->OSTimer_Ctrl);
+ d_printf("OSTimer_LoadVal_L: 0x%x\n",hwp_timer->OSTimer_LoadVal_L);
+ d_printf("Timer_Irq_Mask_Set: 0x%x\n",hwp_timer->Timer_Irq_Mask_Set);
+ d_printf("Timer_Irq_Mask_Clr: 0x%x\n",hwp_timer->Timer_Irq_Mask_Clr);
+ d_printf("Timer_Irq_Cause: 0x%x\n",hwp_timer->Timer_Irq_Cause);
+ d_printf("OSTimer_LockVal_H: 0x%x\n",hwp_timer->OSTimer_LockVal_H);
+ d_printf("OSTimer_LockVal_L: 0x%x\n",hwp_timer->OSTimer_LockVal_L);
+ d_printf("\n");
+ d_printf("Enable timer ...\n");
+ d_printf("Waiting for interrupt occuring ...\n");
+#endif
+ d_printf("waiting for irq occuring ...\n");
+ ostimer_enable(1);
+ return 0;
+}
+
+int stop_ostimer(void)
+{
+ ostimer_enable(0);
+// timer_reset();
+ return 0;
+}
+
+static volatile int ostimer_cb_tick = 0;
+void ostimer_callback(void)
+{
+ d_printf("ostimer tick is %d\n",++ostimer_cb_tick);
+ //clear OSTimer irq status
+ ostimer_clear_irq();
+}
+
+void ostimer_interrupt_test(int count)
+{
+ /* handler OSTIMER pointer */
+ hwp_timer = hwp_apTimer;
+ /* to stop timer firstly */
+ stop_ostimer();
+ /* request a irq for OSTIMER */
+ irq_request(RDA_IRQ_TIMEROS,ostimer_callback);
+ /* enable interrupt */
+ irq_unmask(RDA_IRQ_TIMEROS);
+ /* clear callback tick value */
+ ostimer_cb_tick = 0;
+ /* start OSTIMER and set IRQs period is 1 second */
+ start_ostimer(1000000);
+ d_printf("waiting ...\n");
+ while(1) {
+ if(ostimer_cb_tick > count) {
+ d_printf("stop\n");
+ stop_ostimer();
+ irq_mask(RDA_IRQ_TIMEROS);
+ irq_free(RDA_IRQ_TIMEROS);
+ break;
+ }
+// d_printf(".");
+ }
+ d_printf("ostimer irq test finished \n");
+}
+#endif /* CONFIG_IRQ */
+
+/*
+ * TIMER TEST ENTRY
+ *********************************************************
+ */
+int timer_test_entry(int timer_id)
+{
+ int ret = 0;
+
+ if(timer_id > 2) {
+ d_printf("handle timer failed,timer id is %d\n",timer_id);
+ return -1;
+ }
+ hwp_timer = hwp_timer_tab[timer_id];
+ if(hwp_timer == NULL) {
+ d_printf("timer do not exist,timer id is %d\n",timer_id);
+ return -1;
+ }
+ d_printf("\nstart to test timer %d ...\n",timer_id);
+/* This is used to test OSTIMER's IRQ */
+#ifdef CONFIG_IRQ
+ d_printf("interrupts test ...\n");
+ set_timer_clk_freq(1);
+ hwt_delay_ms(1000);
+ ostimer_interrupt_test(5);
+#endif
+/* simple test */
+#if 1
+ d_printf("simple test ...\n");
+ set_timer_clk_freq(1);
+ hwt_delay_ms(1000);
+ ret = timer_simple_test_in(1000);
+#endif
+/* fast mode test */
+#if 1
+ d_printf("fast mode test ... clock frequency is 2MHz\n");
+ set_timer_clk_freq(1);
+ hwt_delay_ms(1000);
+ hwt_delay_ms(1000);
+
+ ret = 0;
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_REG_DEFAULT_VAL);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_DELAY_US);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_DELAY_MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_DELAY_S);
+
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_125MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_250MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_500MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_1000MS);
+
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_REG_DEFAULT_VAL);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_DELAY_US);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_DELAY_MS);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_TEST_IRQ_STATUS);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_IRQ_REPEAT);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_IRQ_WRAP);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_LOCK_VAL);
+#endif
+/* slow mode test */
+#if 1
+ d_printf("slow mode test ... clock frequency is 16384Hz\n");
+ set_timer_clk_freq(0);
+ hwt_delay_ms(1000);
+ hwt_delay_ms(1000);
+
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_REG_DEFAULT_VAL);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_DELAY_US);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_DELAY_MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_DELAY_S);
+
+/* ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_125MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_250MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_500MS);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_INTERVAL_IRQ_1000MS);
+*/
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_REG_DEFAULT_VAL);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_DELAY_US);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_DELAY_MS);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_TEST_IRQ_STATUS);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_IRQ_REPEAT);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_IRQ_WRAP);
+ ret += timer_full_test_in(timer_id,OSTIMER_TC_ID_LOCK_VAL);
+#endif
+/* lock & wrap test in fast mode */
+#if 0
+ d_printf("lock and wrap test ... clock frequency is 2MHz\n");
+ set_timer_clk_freq(1);
+ hwt_delay_ms(1000);
+ hwt_delay_ms(1000);
+
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_LOCK_VAL);
+ ret += timer_full_test_in(timer_id,HWTIMER_TC_ID_WRAP_IRQ);
+#endif
+ if(ret != 0)
+ d_printf("\nreturn value is %x, test failed !!!\n",(unsigned int)ret);
+ else
+ d_printf("\nreturn value is %x, test successful!!!\n",(unsigned int)ret);
+ hwt_delay_ms(1000);
+ hwt_delay_ms(1000);
+ d_printf("timer test finished\n\n");
+ return ret;
+}
+
+int tim_test(int timer_id,int times)
+{
+ int ret = 0,n = 0;
+ while(n < times) {
+ n++;
+ printf("\ntim_test: %d / %d\n",n,times);
+ ret += timer_test_entry(timer_id);
+ printf("\ntim_test end,ret is %d\n",ret);
+ }
+ return ret;
+}
diff --git a/board/rda/common/uart_test.c b/board/rda/common/uart_test.c
new file mode 100644
index 0000000000..5dcd73cefc
--- /dev/null
+++ b/board/rda/common/uart_test.c
@@ -0,0 +1,1110 @@
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_uart.h>
+#include <asm/arch/reg_sysctrl.h>
+
+#if defined(CONFIG_MACH_RDA8850E) || defined(CONFIG_MACH_RDA8810H)
+
+/* #define CONFIG_UART_DMA_TEST */
+
+/* #define UART_BAUD_RATE_DEFAULT 115200 */
+#define UART_BAUD_RATE_DEFAULT 921600
+
+#define MARRAY_SIZE(x) (sizeof(x)/(x)[0])
+#define CONFIG_PUTS_UART_INFO
+#define CONFIG_UART_TEST_DEBUG
+
+#ifdef CONFIG_UART_TEST_DEBUG
+#define d_printf printf
+#else
+#define d_printf(...) do{}while(0)
+#endif
+
+/*
+ *Default uart perpherial configuration
+ */
+#define SER_TEST_DATA_COUNT 10
+
+#else
+#error "CONFIG_MACH_RDA8850E or CONFIG_MACH_RDA8810H is undefined !"
+#endif
+
+enum UART_PORT_ID
+{
+ UART_ID_1 = 0,
+ UART_ID_2 = 1,
+ UART_ID_3 = 2,//this port is used to print debug message
+};
+
+/* UART test case id number*/
+enum UART_TC_ID
+{
+ UART_TC_ID_POL_TRANSMIT = 0,
+ UART_TC_ID_DMA_TRANSMIT,
+ UART_TC_ID_RX_IRQ,
+ UART_TC_ID_RX_OVF_IRQ,
+ UART_TC_ID_TX_IRQ,
+ UART_TC_ID_CTS_RTS,
+ UART_TC_ID_RX_OVF_STATE,
+ UART_TC_ID_REG_DEFAULT_VALUE,
+ UART_TC_ID_TX_FIFO_DEPTH,
+ UART_TC_ID_RX_FIFO_LEVEL,
+};
+
+enum UART_TEST_STATE
+{
+ TEST_OK = 0,
+ TEST_ERROR = -1,
+};
+
+static HWP_UART_T *hwpt_uart = hwp_uart3;
+static HWP_UART_T *hwp_uart_tab[] = {hwp_uart1,hwp_uart2,hwp_uart3};
+
+static int g_uart_id = UART_ID_3;//uart3 is used
+static u8 g_uart_buf[2080];
+static int serial_baud_rate_tab[] = {
+ 2400,
+ 4800,
+ 9600,
+ //14400,
+ 19200,
+ //28800,
+ //33600,
+ 38400,
+ 57600,
+ 115200,
+ 230400,
+ 460800,
+ 921600,
+ //1843200,
+};
+
+/*
+ * UART PRIVATE FUNCTION DECLARATION
+ *********************************************************
+ */
+
+static int set_speed(int speed);
+static int config_frame_format(int speed, int data_bit, int parity_bit, int stop_bit);
+static void put_case_info(const char *str);
+static void clear_error_state(void);
+static int tx_is_finished(void);
+static void enable_cts_rts(int enabled);
+static int reset_uart(int id);
+static void set_irq_trigger_level(int rx_triggered,int value);
+
+/*
+ * UART FUNCTION IMPLEMENTATION
+ *********************************************************
+ */
+
+#ifdef CONFIG_UART_DMA_TEST
+
+BOOL hal_UartDmaFifoEmpty(HAL_IFC_REQUEST_ID_T requestId)
+{
+ UINT8 i;
+ BOOL fifoIsEmpty = TRUE;
+
+ /* Check the requested id is not currently already used. */
+ for (i = 0; i < SYS_IFC_STD_CHAN_NB ; i++) {
+ if (GET_BITFIELD(hwp_sysIfc->std_ch[i].control,
+ SYS_IFC_REQ_SRC) == requestId) {
+ fifoIsEmpty = hal_IfcChannelIsFifoEmpty(requestId, i);
+ return fifoIsEmpty;
+ }
+ }
+ return TRUE;
+}
+
+void hal_UartDmaResetFifoTc(HAL_IFC_REQUEST_ID_T requestId)
+{
+ UINT8 i;
+ /* Check the requested id is not currently already used. */
+ for (i = 0; i < SYS_IFC_STD_CHAN_NB ; i++) {
+ if (GET_BITFIELD(hwp_sysIfc->std_ch[i].control,
+ SYS_IFC_REQ_SRC) == requestId){
+ hwp_sysIfc->std_ch[i].tc = 0;
+ return;
+ }
+ }
+ return;
+}
+
+void hal_UartRxDmaPurgeFifo(HAL_IFC_REQUEST_ID_T requestId)
+{
+ UINT8 i;
+ for (i = 0; i < SYS_IFC_STD_CHAN_NB ; i++){
+ if (GET_BITFIELD(hwp_sysIfc->std_ch[i].control,
+ SYS_IFC_REQ_SRC) == requestId) {
+ (void)hal_IfcChannelFlush(requestId, i);
+ }
+ }
+}
+
+UINT32 hal_UartSendData(CONST UINT8* data, UINT32 length)
+{
+ UINT8 TxChannelNum = 0;
+ TxChannelNum = hal_IfcTransferStart(HAL_IFC_UART3_TX,
+ (UINT8 *)data,
+ length,
+ HAL_IFC_SIZE_8_MODE_AUTO);
+ if (HAL_UNKNOWN_CHANNEL == TxChannelNum) {
+ /* No channel available */
+ return 0;
+ } else {
+ /* all data will be send */
+ return length;
+ }
+}
+
+UINT32 hal_UartGetData(UINT8* destAddress, UINT32 length)
+{
+ UINT8 RxChannelNum = 0;
+
+ /* (Re)Start transfert, this will reset the timeout counter.
+ Do this before clearing the mask and cause, to prevent
+ a previous unwanted timeout interrupt to occur right between the
+ two clears and then the restart transfert. */
+
+ RxChannelNum = hal_IfcTransferStart(HAL_IFC_UART3_RX,
+ destAddress,
+ length,
+ HAL_IFC_SIZE_8_MODE_AUTO);
+
+ /* check if we got an IFC channel */
+ if (HAL_UNKNOWN_CHANNEL == RxChannelNum) {
+ /* No channel available */
+ /* No data received */
+ return 0;
+ } else {
+ /* all data will be fetched */
+ return length;
+ }
+}
+
+void serial_dma_init(void)
+{
+ set_speed(UART_BAUD_RATE_DEFAULT);
+
+ hwpt_uart->triggers = UART_AFC_LEVEL(1); //7 ?
+ hwpt_uart->ctrl = UART_ENABLE
+ |UART_DATA_BITS_8_BITS
+ |UART_TX_STOP_BITS_1_BIT
+ |UART_PARITY_ENABLE_NO
+ |UART_DMA_MODE_ENABLE;
+ /* Allow reception */
+ hwpt_uart->CMD_Set = UART_RTS;
+ hwpt_uart->irq_mask = UART_RX_DMA_DONE | UART_RX_DMA_TIMEOUT;
+}
+
+void serial_dma_puts(const UINT8 *s)
+{
+ UINT32 length = 0;
+
+ length = (UINT32)strlen((const char *)s);
+
+ /* wait until fifo is empty, to prevent overlap original data */
+ while(!hal_UartDmaFifoEmpty(HAL_IFC_UART3_TX));
+ (void)hal_UartSendData(s, length);
+}
+
+void serial_dma_gets(UINT8 *s, UINT32 length)
+{
+ if (hwpt_uart->irq_cause & UART_RX_DMA_TIMEOUT) {
+ hal_UartRxDmaPurgeFifo(HAL_IFC_UART3_RX);
+ while(!hal_UartDmaFifoEmpty(HAL_IFC_UART3_RX));
+ hwpt_uart->irq_cause |= UART_RX_DMA_TIMEOUT;
+ }
+ hal_UartDmaResetFifoTc(HAL_IFC_UART3_RX);
+ (void)hal_UartGetData(s, length);
+}
+
+void serial_dma_getc(UINT8 *s)
+{
+ serial_dma_gets(s, 1);
+}
+
+//this case will test dma mode
+// Phepherial to Memory
+// Memory to Phepherial
+static void subtest_dma(int len)
+{
+ u8 rd_buf[50] = {0};
+ int cnt = 0;
+ cnt = cnt;
+ len = (len > 50)?(50):(len);
+
+ //check error flags
+ clear_error_state();
+
+ /* Begin to receive data by DMA (Phepherial to Memory) */
+ serial_dma_gets(rd_buf,len);
+ /* Waiting for DMA Rx done*/
+ while(!(hwpt_uart->irq_cause & UART_RX_DMA_DONE));
+ /* Clear DMA Rx done flag*/
+ hwpt_uart->irq_cause |= UART_RX_DMA_DONE;
+ /* Waiting for DMA Tx FIFO is empty*/
+ while(!hal_UartDmaFifoEmpty(HAL_IFC_UART3_TX));
+ /* Send back data by DMA (Memory to Phepherial)*/
+ hal_UartSendData(rd_buf,len);
+
+// while(!(hwpt_uart->irq_cause & UART_TX_DMA_DONE));
+// hwpt_uart->irq_cause |= UART_TX_DMA_DONE;
+
+ /* Waiting for all data sending finished */
+ while((hwpt_uart->status & UART_TX_ACTIVE) == 0);
+ while((hwpt_uart->status & UART_TX_ACTIVE) != 0);
+
+ /* Clear DMA Tx done flag */
+ if(hwpt_uart->irq_cause & UART_TX_DMA_DONE)
+ hwpt_uart->irq_cause |= UART_TX_DMA_DONE;
+}
+
+int uart_case_dma_transmitting(void)
+{
+ int n=0;
+ int len = SER_TEST_DATA_COUNT;
+ int speed = 0;
+ int tab_size = MARRAY_SIZE(serial_baud_rate_tab);
+
+ put_case_info("Start UART DMA transmitting\n");
+ serial_init(); //921600 8 N 1
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ serial_dma_init();
+ hwpt_uart->irq_mask |=UART_TX_DMA_DONE;
+ hwpt_uart->irq_mask |=UART_RX_DMA_DONE;
+ hwpt_uart->irq_mask |=UART_RX_DMA_TIMEOUT;
+ while(1) {
+ /* Get baudrate value */
+ speed = serial_baud_rate_tab[n];
+
+ /* Begin to DMA transmitting */
+ //8 N 1
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_dma(len);
+ //8 E 1
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_dma(len);
+ //8 O 1
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_dma(len);
+ //8 N 2
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_dma(len);
+ //8 E 2
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_dma(len);
+ //8 O 2
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_dma(len);
+ //7 N 1
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_dma(len);
+ //7 E 1
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_dma(len);
+ //7 O 1
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_dma(len);
+ //7 N 2
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_dma(len);
+ //7 E 2
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_dma(len);
+ //7 O 2
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_dma(len);
+
+ /* Change speed table index */
+ n++;
+ if(n == tab_size)
+ break;
+ }
+ hwpt_uart->ctrl &= (~(UART_DMA_MODE_ENABLE));
+ hwpt_uart->irq_mask &= (~UART_TX_DMA_DONE);
+ hwpt_uart->irq_mask &=(~UART_RX_DMA_DONE);
+ hwpt_uart->irq_mask &=(~UART_RX_DMA_TIMEOUT);
+ put_case_info("Finsh UART DMA transmitting\n");
+ return 0;
+}
+#endif /* CONFIG_UART_DMA_TEST */
+
+static int set_speed(int speed)
+{
+ u32 clksrc;
+ u32 divmode;
+ u32 div;
+ u32 reg;
+
+ if (speed > 3250000 ) {
+ speed = 3250000;
+ hwpt_uart->ctrl &= (~UART_DIVISOR_MODE);
+ divmode = 4;
+ }
+ else if (speed < 6342 ) {
+ hwpt_uart->ctrl |= UART_DIVISOR_MODE;
+ divmode = 16;
+ } else {
+ hwpt_uart->ctrl &= (~UART_DIVISOR_MODE);
+ divmode = 4;
+ }
+ div = (26000000 + divmode / 2 * speed) / (divmode * speed) - 2;
+ clksrc = SYS_CTRL_AP_UART_SEL_PLL_SLOW;
+ //clksrc = SYS_CTRL_AP_UART_SEL_PLL_PLL;
+ reg = hwp_sysCtrlAp->Cfg_Clk_Uart[g_uart_id];
+ reg &= (~(SYS_CTRL_AP_UART_DIVIDER_MASK));
+ reg &= (~(SYS_CTRL_AP_UART_SEL_PLL_PLL));
+ reg |= (clksrc | SYS_CTRL_AP_UART_DIVIDER(div));
+ hwp_sysCtrlAp->Cfg_Clk_Uart[g_uart_id] = reg;
+// iowrite32(clksrc | SYS_CTRL_AP_UART_DIVIDER(div),
+// &hwp_sysCtrlAp->Cfg_Clk_Uart[g_uart_id]);
+ return 0;
+}
+
+static int config_frame_format(int speed, int data_bit, int parity_bit,
+ int stop_bit)
+{
+ int config_err = 0;
+ u32 ctrl_reg;
+
+ ctrl_reg = hwpt_uart->ctrl;
+
+ /* Set data bit: 8, 7 */
+ ctrl_reg &= (~UART_DATA_BITS);
+ switch(data_bit) {
+ case HAL_UART_8_DATA_BITS:
+ ctrl_reg |= UART_DATA_BITS_8_BITS;
+ break;
+ case HAL_UART_7_DATA_BITS:
+ ctrl_reg |= UART_DATA_BITS_7_BITS;
+ break;
+ default:
+ config_err |= 0x01;
+ break;
+ }
+ /* Set parity bit: N, O, E */
+ ctrl_reg &= (~UART_PARITY_ENABLE);
+ switch(parity_bit) {
+ case HAL_UART_NO_PARITY:
+ ctrl_reg |= UART_PARITY_ENABLE_NO;
+ break;
+ case HAL_UART_ODD_PARITY:
+ ctrl_reg |= UART_PARITY_ENABLE_YES;
+ ctrl_reg &= (~UART_PARITY_SELECT_MARK);
+ ctrl_reg |= UART_PARITY_SELECT_ODD;
+ break;
+ case HAL_UART_EVEN_PARITY:
+ ctrl_reg |= UART_PARITY_ENABLE_YES;
+ ctrl_reg &= (~UART_PARITY_SELECT_MARK);
+ ctrl_reg |= UART_PARITY_SELECT_EVEN;
+ break;
+ default:
+ config_err |= 0x02;
+ break;
+ }
+ /* Set stop bit: 1, 2 */
+ ctrl_reg &= (~UART_TX_STOP_BITS);
+ switch(stop_bit) {
+ case HAL_UART_1_STOP_BIT:
+ ctrl_reg |= UART_TX_STOP_BITS_1_BIT;
+ break;
+ case HAL_UART_2_STOP_BITS:
+ ctrl_reg |= UART_TX_STOP_BITS_2_BITS;
+ break;
+ default:
+ config_err |= 0x04;
+ break;
+ }
+ /* Enable UART */
+ ctrl_reg |= UART_ENABLE;
+ /* Check error */
+ if(config_err > 0) {
+ d_printf("config frame format failed,error is 0x%x\n",
+ config_err);
+ return -1;
+ }
+ /* Write to register */
+ hwpt_uart->ctrl = ctrl_reg;
+ /* Set baud rate*/
+ set_speed(speed);
+ return 0;
+}
+
+static int get_rx_fifo_level(void)
+{
+ int rx_level;
+ rx_level = (hwpt_uart->status & UART_RX_FIFO_LEVEL_MASK)
+ >> UART_RX_FIFO_LEVEL_SHIFT;
+ return rx_level;
+}
+
+static int get_tx_fifo_empty_space(void)
+{
+ int tx_space;
+ tx_space = (hwpt_uart->status & UART_TX_FIFO_SPACE_MASK)
+ >> UART_TX_FIFO_SPACE_SHIFT;
+ return tx_space;
+}
+
+static int tx_fifo_all_empty(void)
+{
+ int empty_space = get_tx_fifo_empty_space();
+ return ((empty_space == UART_TX_FIFO_SIZE)?(1):(0));
+}
+
+static int tx_is_active(void)
+{
+ int state;
+ state = (hwpt_uart->status & UART_TX_ACTIVE);
+ return ((state)?(1):(0));
+}
+
+static int tx_is_finished(void)
+{
+ if((tx_fifo_all_empty()) && (!tx_is_active()))
+ return 1;//tx finished
+ else
+ return 0;//tx do not finished
+}
+
+static void clear_error_state(void)
+{
+ u32 state_reg = hwpt_uart->status;
+ u32 err_mask = UART_TX_OVERFLOW_ERR
+ | UART_RX_OVERFLOW_ERR
+ | UART_RX_PARITY_ERR
+ | UART_RX_FRAMING_ERR;
+
+ /* Check error flags */
+ if(state_reg & err_mask) {
+ //reset FIFO
+ hwpt_uart->CMD_Set |= UART_RX_FIFO_RESET;
+ hwpt_uart->CMD_Set |= UART_TX_FIFO_RESET;
+ //clear error by writing
+ hwpt_uart->status = err_mask;
+ while(1) {
+ state_reg = hwpt_uart->status;
+ if(state_reg & err_mask)
+ hwpt_uart->status = err_mask;
+ // else
+ break;
+ }
+ }
+}
+
+static void put_case_info(const char *str)
+{
+#ifdef CONFIG_PUTS_UART_INFO
+ while(!tx_is_finished());
+ serial_init(); //8 N 1
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ serial_puts(str);
+ while(!tx_is_finished());
+#endif
+}
+
+int uart_case_test_tx_fifo_depth(void)
+{
+ int tx_space = 0;
+ //delay somtime
+ while(!tx_is_finished());
+ mdelay(100);
+ //reset tx fifo
+ hwpt_uart->CMD_Set |= UART_TX_FIFO_RESET;
+ clear_error_state();
+ mdelay(1);
+ //get fifo empty space number
+ tx_space = (hwpt_uart->status & UART_TX_FIFO_SPACE_MASK)
+ >> UART_TX_FIFO_SPACE_SHIFT;
+ if(tx_space != UART_TX_FIFO_SIZE){
+ d_printf("check tx fifo size error, should be %d\n",tx_space);
+ return -1;
+ } else {
+ d_printf("uart tx fifo size is %d\n",tx_space);
+ return 0;
+ }
+}
+
+int uart_case_test_rx_fifo_level(void)
+{
+ int rx_space = 0;
+
+ while(!tx_is_finished());
+ mdelay(100);
+ hwpt_uart->CMD_Set |= UART_RX_FIFO_RESET;
+ clear_error_state();
+ mdelay(1);
+ rx_space = (hwpt_uart->status & UART_RX_FIFO_LEVEL_MASK)
+ >> UART_RX_FIFO_LEVEL_SHIFT;
+ if(rx_space != 0) {
+ d_printf("check rx fifo level error,should be %d\n",0);
+ return -1;
+ } else {
+ d_printf("uart rx fifo level is %d\n",rx_space);
+ return 0;
+ }
+}
+
+static void subtest_pol(int len)
+{
+ u8 rd_buf[50] = {0};
+ int cnt = 0;
+
+ len = (len > 50)?(50):(len);
+ /* clear error flags */
+ clear_error_state();
+ /* receive data */
+ while(1) {
+ if(cnt >= len)
+ break;
+ rd_buf[cnt] = serial_getc();
+ cnt++;
+ }
+ /* delay n us for host ready */
+ mdelay(100);
+ /* write data back */
+ cnt = 0;
+ while(1) {
+ if(cnt >= len)
+ break;
+ // Place in the TX Fifo
+ while ((GET_BITFIELD(hwpt_uart->status, UART_TX_FIFO_SPACE)) == 0);
+ hwpt_uart->rxtx_buffer = (UINT32)(rd_buf[cnt]);
+ cnt++;
+ }
+ /* wait until tx is finished */
+ while(!tx_is_finished());
+}
+
+int uart_case_pol_transmitting(void)
+{
+ int n=0;
+ int len = SER_TEST_DATA_COUNT;
+ int speed = 0;
+ int tab_size = MARRAY_SIZE(serial_baud_rate_tab);
+
+ put_case_info("start uart polling transmitting\n");
+ while(1) {
+ /* Get baudrate value */
+ speed = serial_baud_rate_tab[n];
+
+ /* Begin to data transmitting */
+ //8 N 1
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_pol(len);
+ //8 E 1
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_pol(len);
+ //8 O 1
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_pol(len);
+ //8 N 2
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_pol(len);
+ //8 E 2
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_pol(len);
+ //8 O 2
+ config_frame_format(speed,
+ HAL_UART_8_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_pol(len);
+ //7 N 1
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_pol(len);
+ //7 E 1
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_pol(len);
+ //7 O 1
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_1_STOP_BIT);
+ subtest_pol(len);
+ //7 N 2
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_NO_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_pol(len);
+ //7 E 2
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_EVEN_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_pol(len);
+ //7 O 2
+ config_frame_format(speed,
+ HAL_UART_7_DATA_BITS,
+ HAL_UART_ODD_PARITY,
+ HAL_UART_2_STOP_BITS);
+ subtest_pol(len);
+
+ /* Change baudrate table index */
+ n++;
+ if(n == tab_size)
+ break;
+ }
+ put_case_info("finished polling transmitting\n");
+ return 0;
+}
+
+static void set_irq_trigger_level(int rx_triggered,int value)
+{
+ unsigned int reg = hwpt_uart->triggers;
+
+ if(rx_triggered) {
+ reg &= ~(0x1F);//bit4~bit0
+ reg |= UART_RX_TRIGGER(value);
+ } else {
+ reg &= ~(0xF00);//bit11~bit8
+ reg |= UART_TX_TRIGGER(value);
+ }
+ hwpt_uart->triggers = reg;
+}
+
+int uart_case_test_rx_irq(int triggered_val)
+{
+ int cnt = 0,err;
+ int temp;
+
+ //waiting for tx finished
+ while(!tx_is_finished());
+ //reset uart
+ reset_uart(g_uart_id);
+ //init uart
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ // set rx triggered value
+ set_irq_trigger_level(1,triggered_val);
+ //set rx irq mask
+ hwpt_uart->irq_mask |= UART_RX_DATA_AVAILABLE;
+ d_printf("input more than %d data to trigger rx interrupt\n"
+ ,triggered_val);
+ //waiting for irq flag
+ while((hwpt_uart->irq_cause & 0x02) == 0);
+ //check test result
+ cnt = triggered_val + 1;
+ temp = get_rx_fifo_level();
+ if(temp == cnt) {
+ err = 0;//the rx irq should occur when Rx_FIFO > Rx_Trigger
+ d_printf("triggered rx irq at correct level %d\n",temp);
+ } else {
+ err = -1;
+ d_printf("triggered rx irq at error level %d\n",temp);
+ }
+ while(!tx_is_finished());
+ reset_uart(g_uart_id);
+ return err;
+}
+
+int uart_case_test_tx_irq(int triggered_val)
+{
+ int cnt,err,a,b,c,d;
+ int i;
+ //waiting for tx finished
+ while(!tx_is_finished());
+ //reset uart
+ reset_uart(g_uart_id);
+ //init uart
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ //set tx triggered value
+ set_irq_trigger_level(0,triggered_val);
+ mdelay(5);
+ a = hwpt_uart->triggers;
+ b = get_tx_fifo_empty_space();
+
+ if((hwpt_uart->irq_cause & 0x4)) {
+ d_printf("tx irq occured without irq enabled,exit\n");
+ return -1;
+ }
+
+ //enable tx irq
+ hwpt_uart->irq_mask |= UART_TX_DATA_NEEDED;
+ //write data to tx fifo
+ for(i = 0;i < 15;i++)
+ hwpt_uart->rxtx_buffer = 0x55;
+ c = get_tx_fifo_empty_space();
+ //waiting for irq flag
+ while((hwpt_uart->irq_cause & 0x04) == 0);
+ d = get_tx_fifo_empty_space();
+ //disable tx irq
+ hwpt_uart->irq_mask &= ~UART_TX_DATA_NEEDED;
+ cnt = UART_TX_FIFO_SIZE - d;
+ //check result
+ if(cnt <= triggered_val ) {
+ err = 0;//the tx irq should occur when TX_FIFO <= TX_Trigger
+ d_printf("\ntriggered tx irq at correct level %d\n",cnt);
+ } else {
+ err = -1;
+ d_printf("\ntriggered tx irq at error level %d,level should be %d\n",
+ cnt,triggered_val);
+ }
+ d_printf("a = %x,b = %d,c = %d,d= %d\n",a,b,c,d);
+ d_printf("wait tx is finished ...\n");
+ while(!tx_is_finished());
+ // wait irq cause flag change to zero from one
+ mdelay(6);
+ reset_uart(g_uart_id);
+ return err;
+}
+
+int uart_case_test_rx_ovf_irq(void)
+{
+ int cnt,err;
+
+ while(!tx_is_finished());
+ reset_uart(g_uart_id);
+
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+
+ d_printf("input more than %d data to trigger rx overflow irq:\n",
+ UART_RX_FIFO_SIZE);
+ hwpt_uart->irq_mask |= UART_RX_LINE_ERR;
+ while((hwpt_uart->irq_cause & 0x10) == 0);
+
+ cnt = get_rx_fifo_level();
+ d_printf("triggered rx ovf irq correctly and rx fifo level is %d\n",
+ cnt);
+ err = 0;
+ while(!tx_is_finished());
+ reset_uart(g_uart_id);
+ return err;
+}
+
+int uart_case_test_rx_ovf_state(void)
+{
+ int cnt = 0,err;
+
+ while(!tx_is_finished());
+ reset_uart(g_uart_id);
+
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ clear_error_state();
+
+ d_printf("input more than %d data to rise up rx overflow state:\n",
+ UART_RX_FIFO_SIZE);
+ /* Waiting for Rx overflow error occurring */
+ while((hwpt_uart->status & UART_RX_OVERFLOW_ERR) == 0);
+ cnt = get_rx_fifo_level();
+ clear_error_state();
+ err = 0;
+ d_printf("rise up rx ovf state correctly and rx fifo level is %d\n",
+ cnt);
+ while(!tx_is_finished());
+ reset_uart(g_uart_id);
+ return err;
+}
+
+static void enable_cts_rts(int enabled)
+{
+ hwpt_uart->ctrl &= (~UART_AUTO_FLOW_CONTROL);
+ if(enabled)
+ hwpt_uart->ctrl |= UART_AUTO_FLOW_CONTROL;
+}
+
+int uart_case_test_cts_rts(void)
+{
+ int cnt = 0;
+ int len = 2048;
+
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ //LAB_TEST_BEGIN:
+ enable_cts_rts(1);
+ //Check error flags
+ clear_error_state();
+ //Receive data
+ cnt = 0;
+ while(1) {
+ if(cnt >= len)
+ break;
+ g_uart_buf[cnt] = serial_getc();
+ cnt++;
+ }
+ //Delay n us for host ready
+ mdelay(100);
+ //Write data back
+ cnt = 0;
+ while(1) {
+ if(cnt >= len)
+ break;
+ while(!(GET_BITFIELD(hwpt_uart->status,UART_TX_FIFO_SPACE)));
+ hwpt_uart->rxtx_buffer = (UINT32)g_uart_buf[cnt];
+ cnt++;
+ }
+ //Waitting for data sending end
+ while(!tx_is_finished());
+ //Disable CTS/RTS
+ enable_cts_rts(0);
+ return 0;
+}
+
+/*
+ * when program runs in DRAM, the APB2 bus should not be reset
+ * otherwise it will dead
+ */
+#if 0
+static int reset_uart(int id)
+{
+ int ret = 0;
+ if(id == UART_ID_1) {
+ hwp_sysCtrlAp->APB2_Rst_Set = SYS_CTRL_AP_SET_APB2_RST_UART1;
+ hwp_sysCtrlAp->APB2_Rst_Clr = SYS_CTRL_AP_CLR_APB2_RST_UART1;
+ } else if(id == UART_ID_2) {
+ hwp_sysCtrlAp->APB2_Rst_Set = SYS_CTRL_AP_SET_APB2_RST_UART2;
+ hwp_sysCtrlAp->APB2_Rst_Clr = SYS_CTRL_AP_CLR_APB2_RST_UART2;
+ } else if(id == UART_ID_3) {
+ hwp_sysCtrlAp->APB2_Rst_Set = SYS_CTRL_AP_SET_APB2_RST_UART3;
+ hwp_sysCtrlAp->APB2_Rst_Clr = SYS_CTRL_AP_CLR_APB2_RST_UART3;
+ } else {
+ ret = -1;
+ }
+ return ret;
+}
+#else
+static int reset_uart(int id)
+{
+ /* reset the TX FIFO,RX FIFO */
+ hwpt_uart->CMD_Set |= UART_RX_FIFO_RESET;
+ hwpt_uart->CMD_Set |= UART_TX_FIFO_RESET;
+ return 0;
+}
+#endif
+int uart_case_test_default_value(void)
+{
+ unsigned int buf[10];
+ int idx = 0;
+
+ // reset uart
+ while(!tx_is_finished());
+ reset_uart(g_uart_id);
+
+ buf[idx++] = hwpt_uart->ctrl;
+ buf[idx++] = hwpt_uart->status;
+ buf[idx++] = hwpt_uart->irq_mask;
+ buf[idx++] = hwpt_uart->irq_cause;
+ buf[idx++] = hwpt_uart->triggers;
+ buf[idx++] = hwpt_uart->CMD_Set;
+ buf[idx++] = hwpt_uart->CMD_Clr;
+ //init uart
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ idx = 0;
+ d_printf("\nread register default value ...\n");
+ d_printf("ctrl: %x\n",buf[idx++]);
+ d_printf("status: %x\n",buf[idx++]);
+ d_printf("irq_mask: %x\n",buf[idx++]);
+ d_printf("irq_cause: %x\n",buf[idx++]);
+ d_printf("triggers: %x\n",buf[idx++]);
+ d_printf("CMD_Set: %x\n",buf[idx++]);
+ d_printf("CMD_Clr: %x\n",buf[idx++]);
+ d_printf("\n");
+ return 0;
+}
+
+int uart_simple_test_in(int port_id)
+{
+ char data,reply;
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ d_printf("\n\n Start UART easy test.\n");
+ d_printf("\nThis is a simple loop-back test."
+ "\nPlease input some string,Press q to exit\n");
+ do {
+ serial_puts("Check input: ");
+
+ data = (char)serial_getc();
+
+ if(data >= 'A' && data <='Z'){
+ reply = data + 'a' - 'A';
+ }else if(data >= 'a' && data <= 'z'){
+ reply = data + 'A' - 'a';
+ }else if(data >= '0' && data <= '9'){
+ reply = '0' + ((data - '0' + 5) % 10);
+ }else{
+ reply = data;
+ }
+ serial_putc(reply);
+ serial_puts("\n");
+ if (data == 'q' || data== 'Q')
+ break;
+ }while(1);
+ d_printf("\nFinish UART easy test.\n");
+ return 0;
+}
+
+int uart_full_test_in(int port_id, int case_id)
+{
+ int ret = 0;
+
+ /* Be ready */
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ d_printf("start to test uart, case id is %d\n",case_id);
+ /* Begin tests */
+ switch(case_id) {
+ case UART_TC_ID_POL_TRANSMIT:
+ ret = uart_case_pol_transmitting();
+ break;
+ case UART_TC_ID_DMA_TRANSMIT:
+#ifdef XXXDMATEST //CONFIG_UART_DMA_TEST
+ ret = uart_case_dma_transmitting();
+#else
+ ret = -1;
+#endif
+ break;
+ case UART_TC_ID_RX_IRQ:
+ ret = uart_case_test_rx_irq(0);//min value
+ ret += uart_case_test_rx_irq(1);
+ ret += uart_case_test_rx_irq(2);
+ ret += uart_case_test_rx_irq(0x1F);//max value
+ break;
+ case UART_TC_ID_TX_IRQ:
+ ret = uart_case_test_tx_irq(3);
+ ret += uart_case_test_tx_irq(4);
+ ret += uart_case_test_tx_irq(5);
+ break;
+ case UART_TC_ID_RX_OVF_IRQ:
+ ret = uart_case_test_rx_ovf_irq();
+ break;
+ case UART_TC_ID_CTS_RTS:
+ ret = uart_case_test_cts_rts();
+ break;
+ case UART_TC_ID_RX_OVF_STATE:
+ ret = uart_case_test_rx_ovf_state();
+ break;
+ case UART_TC_ID_REG_DEFAULT_VALUE:
+ ret = uart_case_test_default_value();
+ break;
+ case UART_TC_ID_TX_FIFO_DEPTH:
+ ret = uart_case_test_tx_fifo_depth();
+ break;
+ case UART_TC_ID_RX_FIFO_LEVEL:
+ ret = uart_case_test_rx_fifo_level();
+ break;
+ default:
+ d_printf("unknown case id %d\n",case_id);
+ ret =-1;
+ break;
+ }
+ /* Print test result */
+ serial_init();
+ set_speed(UART_BAUD_RATE_DEFAULT);
+ if(ret == 0)
+ d_printf("UART test successful !!!\n");
+ else
+ d_printf("UART test failed ###\n");
+ return ret;
+}
+
+/*
+ * UART EASY TEST ENTRY
+ *********************************************************
+ */
+
+int uart_test_entry(int uart_id)
+{
+ int ret = 0;
+
+ /* Handle uart port */
+ if(uart_id > 2) {
+ d_printf("handle uart failed,uart id is %d\n",uart_id);
+ return -1;
+ }
+ hwpt_uart = hwp_uart_tab[uart_id];
+ if(hwpt_uart == NULL) {
+ d_printf("uart port do not exist,uart_id is %d\n",uart_id);
+ return -1;
+ }
+ d_printf("start to test uart %d\n ...",uart_id + 1);
+ g_uart_id = uart_id;
+ /* This is a simple case */
+ ret = uart_simple_test_in(g_uart_id);
+ /* These cases do not need a tester */
+ ret += uart_full_test_in(g_uart_id,UART_TC_ID_REG_DEFAULT_VALUE);
+ ret += uart_full_test_in(g_uart_id,UART_TC_ID_RX_FIFO_LEVEL);
+ ret += uart_full_test_in(g_uart_id,UART_TC_ID_TX_FIFO_DEPTH);
+ ret += uart_full_test_in(g_uart_id,UART_TC_ID_TX_IRQ);
+ ret += uart_full_test_in(g_uart_id,UART_TC_ID_RX_IRQ);
+ ret += uart_full_test_in(g_uart_id,UART_TC_ID_RX_OVF_IRQ);
+ ret += uart_full_test_in(g_uart_id,UART_TC_ID_RX_OVF_STATE);
+ /* These cases need a tester for Tx/Rx data */
+// ret += uart_full_test_in(g_uart_id,UART_TC_ID_POL_TRANSMIT);
+// ret += uart_full_test_in(g_uart_id,UART_TC_ID_CTS_RTS);
+ return ret;
+}
+
+int uart_test(int uart_id,int times)
+{
+ int ret = 0,n = 0;
+ while(n < times) {
+ n++;
+ printf("\nuart_test: %d / %d\n",n,times);
+ ret += uart_test_entry(uart_id);
+ printf("\nuart_test end,ret is %d\n",ret);
+ }
+ return ret;
+}
diff --git a/board/rda/common/vpu_test.c b/board/rda/common/vpu_test.c
new file mode 100644
index 0000000000..65e9acb9ac
--- /dev/null
+++ b/board/rda/common/vpu_test.c
@@ -0,0 +1,149 @@
+#include <common.h>
+#include <asm/arch/ispi.h>
+
+//#define VPU_TEST_DEBUG
+#ifdef VPU_TEST_DEBUG
+#define debug_printf printf
+#else
+#define debug_printf(...) do{}while(0)
+#endif
+
+//#define DO_WRITE_RESULT_TO_SRAM
+#ifdef DO_WRITE_RESULT_TO_SRAM
+#include <asm/io.h>
+/* VPU & MD5 test result storage address */
+#define VPU_TEST_DATA_BASE 0X11C010E4
+#define VPU_TEST_RESULT_ADDR (VPU_TEST_DATA_BASE+0X00)
+#define VPU_TEST_COUNT_ADDR (VPU_TEST_DATA_BASE+0X04)
+#define MD5_TEST_RESULT_ADDR (VPU_TEST_DATA_BASE+0X08)
+#define MD5_TEST_COUNT_ADDR (VPU_TEST_DATA_BASE+0X0C)
+#define VPU_MD5_TEST_RESULT_OK 0XA55A6666
+#define VPU_MD5_TEST_RESULT_ERROR 0XDEADDEAD
+#endif
+
+#ifdef CONFIG_MACH_RDA8850E
+#define PMU_VCORE_VOLTAGE_REG (u32)0x53
+#define PMU_DDR_VOLTAGE_VAL_REG (u32)0x2A
+#elif defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8810)
+#define PMU_VCORE_VOLTAGE_REG (u32)0x2F
+#define PMU_DDR_VOLTAGE_VAL_REG (u32)0x2A
+#else
+#error "define pmu vcore,ddr register address error for vpu test!"
+#endif
+
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H) || defined(CONFIG_MACH_RDA8850E)
+#include "vpu_test_coda7l.c"
+#elif defined(CONFIG_MACH_RDA8810)
+#include "vpu_test_coda960.c"
+#else
+static int _vpu_test(int md5_check)
+{
+ return 0;
+}
+#endif
+static void sys_get_pmu_values(unsigned int *vcore_value, unsigned int *ddr_value)
+{
+ ispi_open(1);
+ *vcore_value = ispi_reg_read(PMU_VCORE_VOLTAGE_REG);
+ *ddr_value = ispi_reg_read(PMU_DDR_VOLTAGE_VAL_REG);
+ ispi_open(0);
+}
+static void sys_set_pmu_values(unsigned int vcore_value, unsigned int ddr_value)
+{
+ ispi_open(1);
+ ispi_reg_write(PMU_VCORE_VOLTAGE_REG,vcore_value);
+ ispi_reg_write(PMU_DDR_VOLTAGE_VAL_REG,ddr_value);
+ ispi_open(0);
+}
+static void sys_setup_vpu_clk(unsigned int div)
+{
+ *((unsigned long *)0x209000E8) = div;
+}
+void vpu_sta_test(int times)
+{
+ unsigned int vcore_value, ddr_value,t_vcore=0,t_ddr=0;
+ int i,ret;
+ int err_buf[3] = {0,0,0};
+
+ printf("\n%s: current ticks = %llu\n",__func__,get_ticks());
+ sys_get_pmu_values(&vcore_value, &ddr_value);
+ debug_printf("\n%s: before test: vcore_value = %#x , ddr_value = %#x\n", __func__,vcore_value,ddr_value);
+#ifdef CONFIG_MACH_RDA8850E
+ sys_set_pmu_values(0x9525, 0xba45);//vcore=9,ddr=11
+#else
+ //sys_set_pmu_values(0xb444, 0xbab5); //vcore=11, ddr=11
+ //sys_set_pmu_values(0xb444, 0xaab5); //vcore=11, ddr=10
+ //sys_set_pmu_values(0xa444, 0x9ab5); //vcore=10, ddr=9
+ //sys_set_pmu_values(0x9444, 0x9ab5); //vcore=9, ddr=9
+ //sys_set_pmu_values(0xa444, 0xaab5); //vcore=10, ddr=10
+ sys_set_pmu_values(0xa444, 0xbab5); //vcore=10, ddr=11
+#endif
+ sys_get_pmu_values(&t_vcore, &t_ddr);
+ debug_printf("\n%s: when test: vcore_value = %#x, ddr_value = %#x\n", __func__, t_vcore, t_ddr);
+ printf("\n%s: %d times, test start\n",__func__,times);
+ for(i = 1;i <= times;i++) {
+ printf("\n%s: times %d / %d\n", __func__, i, times);
+ if(i % 2 == 1) {
+ sys_setup_vpu_clk(0x16);
+ } else {
+ sys_setup_vpu_clk(0x1c);
+ }
+ ret = _vpu_test(1);
+ /*
+ * store test result to error buffer:
+ * err_buf[0]: md5 check error
+ * err_buf[1]: vpu decode error
+ * err_buf[2]: success
+ */
+ ret += 2;
+ if((ret >= 0) && (ret <= 2)) {
+ err_buf[ret] += 1;
+ }
+ printf("\n");
+ }
+ sys_set_pmu_values(vcore_value, ddr_value);
+ printf("\n%s: current ticks = %llu\n", __func__, get_ticks());
+ printf("\n%s: end seq\n",__func__);
+ printf("\n md5 error: %d, vpu error %d, success: %d, sum: %d\n\n",
+ err_buf[0],err_buf[1],err_buf[2],times);
+
+#ifdef DO_WRITE_RESULT_TO_SRAM
+ writel(i-1,VPU_TEST_COUNT_ADDR);
+ if(err_buf[1] != 0)
+ writel(VPU_MD5_TEST_RESULT_ERROR, VPU_TEST_RESULT_ADDR);
+ else
+ writel(VPU_MD5_TEST_RESULT_OK, VPU_TEST_RESULT_ADDR);
+
+ writel(i-1,MD5_TEST_COUNT_ADDR);
+ if(err_buf[0] != 0)
+ writel(VPU_MD5_TEST_RESULT_ERROR,MD5_TEST_RESULT_ADDR);
+ else
+ writel(VPU_MD5_TEST_RESULT_OK,MD5_TEST_RESULT_ADDR);
+#endif /* DO_WRITE_RESULT_TO_SRAM */
+ sys_get_pmu_values(&t_vcore, &t_ddr);
+ debug_printf("\n%s: after test: vcore_value = %#x, ddr_value = %#x\n", __func__, t_vcore, t_ddr);
+ printf("\n%s: finish successfully\n",__func__);
+}
+
+int vpu_md5_test(int times)
+{
+ unsigned int vcore_value, ddr_value;
+ int i, ret = 0;
+ debug_printf("\n%s: current ticks = %llu\n", __func__, get_ticks());
+#if 0
+ sys_get_pmu_values(&vcore_value, &ddr_value);
+ sys_set_pmu_values(0xa444, 0xbab5); //vcore=10, ddr=11
+#endif
+ for(i=1; i<=times; i++) {
+ printf("\n%s: times %d / %d\n", __func__, i, times);
+ ret = _vpu_test(1);
+ printf("\n");
+ if(ret)
+ break;
+ }
+#if 0
+ sys_set_pmu_values(vcore_value, ddr_value);
+#endif
+ debug_printf("\n%s: current ticks = %llu\n", __func__, get_ticks());
+ return ret;
+}
diff --git a/board/rda/common/vpu_test_coda7l.c b/board/rda/common/vpu_test_coda7l.c
new file mode 100644
index 0000000000..505147f49b
--- /dev/null
+++ b/board/rda/common/vpu_test_coda7l.c
@@ -0,0 +1,584 @@
+/**********************************
+vpu test.
+ver 1.0 : for CODA7L
+It's only for normal vpu decode, the advanced functions like on-the-fly down scale and YUV422 encoder will be test in vpurun.
+2015.03.30
+
+ver 1.1
+add md5 check.
+2015.09.29
+
+sheen
+***********************************/
+
+#include "coda7l_regs.h" //sync with cnm-coda-sw-pkg within android project.
+//vpu firmware
+//Falcon 94208*2Bytes
+#include "coda7l_fw.h" //sync with cnm-coda-sw-pkg within android project.
+
+//test video stream.
+#define FRAME_TEST_NUM (14) //decode frmae num < bit_stream frame num.
+const unsigned int bit_stream[] =
+{
+//don't rename bitstream!!
+//#include "bs_h264_5f_720x480.txt"
+#include "freh3_h264_99f_hp_cif.txt"
+};
+//16bytes each md5 digest.
+const unsigned char yuv_md5_digest[]=
+{
+//bs_h264_5f_720x480.txt yuv md5,create by coda960 cmodel.
+//coda7l and coda960 decode yuv is same.
+//#include "bs_h264_5f_720x480.md5"
+#include "freh3_h264_30f_hp_cif_decOrder.md5"
+};
+//#include <u-boot/md5.h>
+#include "rda_md5.h"
+/*************************************************
+ configs
+**************************************************/
+//0= little endian, 1= big endian.
+#define VPU_FRAME_ENDIAN 0
+#define VPU_STREAM_ENDIAN 0
+
+#define VPU_ENABLE_BWB 0 //burst write back. wirtes output with 8 burst in linear map mode.
+#define CBCR_INTERLEAVE 0 //[default 1 for BW checking with CnMViedo Conformance] 0 (chroma separate mode), 1 (chroma interleave mode) // if the type of tiledmap uses the kind of MB_RASTER_MAP. must set to enable CBCR_INTERLEAVE
+#define VPU_REPORT_USERDATA 0//if enabled, user data is writen to user data buffer
+#define USE_BIT_INTERNAL_BUF 1 //enable secondary AXI for prediction data of the bit-processor.
+#define USE_IP_INTERNAL_BUF 1 //enable secondary AXI for row pixel data of IP/AC-DC.
+#define USE_DBKY_INTERNAL_BUF 1 //enable secondary AXI for temporal luminance data of the de-blocking filter.
+#define USE_DBKC_INTERNAL_BUF 1 //enable secondary AXI for temporal chrominance data of the de-blocking filter.
+#define USE_OVL_INTERNAL_BUF 0 //enable secondary AXI for temporal data of the overlap filter(VC1 only)
+#define USE_BTP_INTERNAL_BUF 0//enable secondary AXI for bit-plane data of the bit-processor(VC1 only).
+
+typedef enum {
+ INT_BIT_INIT = 0,
+ INT_BIT_SEQ_INIT = 1,
+ INT_BIT_SEQ_END = 2,
+ INT_BIT_PIC_RUN = 3,
+ INT_BIT_FRAMEBUF_SET = 4,
+ INT_BIT_ENC_HEADER = 5,
+ INT_BIT_DEC_PARA_SET = 7,
+ INT_BIT_DEC_BUF_FLUSH = 8,
+ INT_BIT_USERDATA = 9,
+ INT_BIT_DEC_MB_ROWS = 13,
+ INT_BIT_BIT_BUF_EMPTY = 14,
+ INT_BIT_BIT_BUF_FULL = 15
+}InterruptBit;
+
+//ms
+#define VPU_ENC_TIMEOUT 5000
+#define VPU_DEC_TIMEOUT 5000
+
+
+/*****************************************************
+ register and memory base address.
+******************************************************/
+//vpu reg base addr. sheen
+#define BIT_REG_BASE 0x20830000 //CODA7L 8810E
+#define BIT_REG_SIZE 0x4000
+
+//second AXI base addr.
+//80k SECOND AXI ACCCESS MEMORY ON CHIP //8810E CODA7L
+//VC1 HD decoder MAX need 0x17D00=96k
+#define HD_SEC_AXI_BASE_ADDR 0x100000
+#define INTERNAL_SRAM_SIZE 0x1C000 //80k
+
+//external sdram base addr. sheen
+// FIRST AXI ACCCESS SDRAM
+//#define HD_BASE_ADDR 0x8db00000
+#define HD_BASE_ADDR 0x88000000 //minimum reserve 128M for 32 frames 1080P
+
+// Base address of the bitstream buffer. for the whole bitstream.
+#define HD_ADDR_BIT_STREAM (HD_BASE_ADDR + 0x000000)
+// Size of the bitstream buffer in byte,(1M bytes)
+#define HD_STREAM_BUF_SIZE 0x100000
+// Base address for the Falcon.h firmware image, (firmware size 94208x2)
+#define HD_ADDR_BIT_CODE (HD_ADDR_BIT_STREAM + HD_STREAM_BUF_SIZE)
+//bitcode buf size 260KB
+#define CODE_BUF_SIZE (248*1024)//for CODA7L
+// Base address for the firmware common parameters buffer.
+//1.record decode frame buf YUV addr,384= 4*3*MAX32, 2.record MvColBuf.sheen
+#define HD_ADDR_BIT_PARA (HD_ADDR_BIT_CODE + CODE_BUF_SIZE)
+//common parameters buffer size 10KB
+#define PARA_BUF_SIZE (10*1024) //CODA7L
+// Base address for the firmware common working buffer.
+#define HD_ADDR_BIT_WORK (HD_ADDR_BIT_PARA + PARA_BUF_SIZE)
+//common work buffer size.
+//WORK_BUF_SIZE= (512*1024) + (MAX_NUM_INSTANCE*48*1024) + MINI_PIPP EN_SCALER_COEFFCIENT_ARRAY_SIZE= 512k+48k+256=564k
+#define WORK_BUF_SIZE (564*1024) //CODA7L
+// Slice Buffer of decoder. max as frame buffer.
+#define HD_ADDR_SLICE_BUFFER (HD_ADDR_BIT_WORK + WORK_BUF_SIZE)
+//max slice save buffer size. max 1920*1088*1.5
+#define SLICE_SAVE_SIZE (1920*1088*3/4)
+//SPS/PPS save buffer. Parameter Set Buffer for H.264 decoder
+#define HD_ADDR_PS_SAVE_BUFFER (HD_ADDR_SLICE_BUFFER + SLICE_SAVE_SIZE)
+//SPS/PPS save buffer size. CODA7L 512KB.
+#define PS_SAVE_SIZE (512*1024)
+// Base address of the DPB.yuv frame buffer.
+#define HD_ADDR_FRAME_BASE (HD_ADDR_PS_SAVE_BUFFER + PS_SAVE_SIZE)
+//register yuv buf num for decode. MAX=32, sheen
+#define HD_REG_FRAME_BUF_NUM 32
+// End address of the DPB(128MB-21MB)
+//resolution is limited to 1920x1088 (1920x1088x1.75x32=112 MB frame buffer size)
+#define HD_MAX_FRAME_BASE (HD_ADDR_FRAME_BASE + (1920*1088*7/4)*HD_REG_FRAME_BUF_NUM)
+
+
+/********second AXI addr config***********/
+//second AXI SRAM size 0x1C000 (8810 CODA7L)
+//max size for 1920x1088(120x68MB) H.264 8810 CODA7L
+//H.264 Y Deblocking FIlter buffer, size 120*128= 0x3C00 bytes
+#define HD_ADDR_SEC_AXI_DBKY (HD_SEC_AXI_BASE_ADDR)
+//H.264 C Deblocking FIlter buffer, size 120*128= 0x3C00 bytes
+#define HD_ADDR_SEC_AXI_DBKC (HD_ADDR_SEC_AXI_DBKY + 0x3C00)
+//H.264 MB Information, size 120*128= 0x3C00 bytes
+#define HD_ADDR_SEC_AXI_BIT (HD_ADDR_SEC_AXI_DBKC + 0x3C00)
+//H.264 Intra Prediciton buffer, size 120*64=0x1e00 bytes
+#define HD_ADDR_SEC_AXI_IP (HD_ADDR_SEC_AXI_BIT + 0x3C00)
+//VC1 only overlap Filter, size 120*80= 0x2580 bytes
+#define HD_ADDR_SEC_AXI_OVL (HD_ADDR_SEC_AXI_IP + 0x1E00)
+//VC1 only BIT PLANE, size 0xF00 bytes
+#define HD_ADDR_SEC_AXI_BTP (HD_ADDR_SEC_AXI_OVL + 0x2580)
+//CODA7L add for motion estimation buffers, size 120*16*36+2048=0x11600 bytes. size exceed internal sram, not use it.
+#define HD_ADDR_SEC_AXI_ME (HD_ADDR_SEC_AXI_OVL + 0xF00)
+//CODA7L add for on-the-fly scaler
+#define HD_ADDR_SEC_AXI_SCALER
+#define HD_ADDR_SEC_AXI_BUF_END (HD_SEC_AXI_BASE_ADDR + INTERNAL_SRAM_SIZE)
+
+/************************************************************/
+
+//vpu registers read/write
+#define VpuWriteReg(ADDR, DATA) *((volatile unsigned int *)(ADDR + (unsigned int)BIT_REG_BASE)) = DATA
+#define VpuReadReg(ADDR) *((volatile unsigned int *)(ADDR + (unsigned int)BIT_REG_BASE))
+
+//directly addr read/write
+#define MREAD_WORD(ADDR) *((volatile int *)(ADDR))
+#define MWRITE_WORD(ADDR,DATA) *((volatile int *)(ADDR)) = DATA
+
+
+static int _vpu_test(int md5_check)
+{
+ int i,k;
+ int ret;
+ int sizeX;
+ int sizeY;
+ int FrameBufNum = 0;
+ int PicSize = 0;
+ int DispFrameIdx;
+ int DecDecFrameIdx;
+ int DecPicType;
+ unsigned int data;
+ int dec_num=0;
+ int stride;
+ unsigned int DpbLum[HD_REG_FRAME_BUF_NUM];
+ unsigned int DpbCb[HD_REG_FRAME_BUF_NUM];
+ unsigned int DpbCr[HD_REG_FRAME_BUF_NUM];
+ unsigned int MvColBuf[HD_REG_FRAME_BUF_NUM];
+ int dataSize;
+ int bitStreamSize;
+ unsigned char md5Data[16];
+ // VPP_MEDIA_NODE p_node;
+
+//RE_INIT:
+ printf("%s: start\n", __func__);
+
+ //store firmware in sdram and then dma firmware to internal PMEM by vpu. sheen
+ dataSize = sizeof(bit_code) / sizeof(bit_code[0]);//94208*2
+ for (k = 0; k < dataSize; k += 4) {
+ int dataH = 0;
+ int dataL = 0;
+ dataH = (bit_code[k+0] << 16) | bit_code[k+1];
+ dataL = (bit_code[k+2] << 16) | bit_code[k+3];
+ // 64 BIT BIG Endian
+ MWRITE_WORD(HD_ADDR_BIT_CODE + k * 2, dataL);
+ MWRITE_WORD(HD_ADDR_BIT_CODE+k * 2 + 4, dataH);
+ //j=50; // which is 338us low level
+ //while(--j);
+ }
+
+ flush_dcache_range(HD_ADDR_BIT_CODE, HD_ADDR_BIT_CODE+CODE_BUF_SIZE);
+
+ //init_vpu register
+ for(k = 0; k <(64*1024) ; k += 4)
+ MWRITE_WORD(BIT_REG_BASE + k,0);
+
+ //32bits index for buf display.
+ VpuWriteReg(BIT_FRM_DIS_FLG, 0);
+
+ // Start decoding configuration
+ VpuWriteReg(BIT_BASE + 0xffc, 0x01); // enable clk, any other value than 0xA1B2C3D4
+ VpuWriteReg(BIT_CODE_RUN, 0x0);//control bit processor
+ VpuWriteReg(BIT_INT_ENABLE, 0x0);//Disable interrupt
+
+ //load bit stream to sdram. sheen
+ dataSize = sizeof(bit_stream) / sizeof(bit_stream[0]);
+ if(dataSize > (HD_STREAM_BUF_SIZE / 4))
+ dataSize = HD_STREAM_BUF_SIZE / 4;
+ bitStreamSize = dataSize * 4;
+ for(k = 0; k < dataSize; k++) {
+ data = bit_stream[k];
+ MWRITE_WORD(HD_ADDR_BIT_STREAM + k * 4, data);
+ }
+
+ if(dataSize < (HD_STREAM_BUF_SIZE / 4)) {
+ //set 0
+ for(k = dataSize; k < (HD_STREAM_BUF_SIZE / 4); k++)
+ MWRITE_WORD(HD_ADDR_BIT_STREAM + k * 4, 0);
+ }
+
+ flush_dcache_range(HD_ADDR_BIT_STREAM, HD_ADDR_BIT_STREAM+HD_STREAM_BUF_SIZE);
+ // Download init common firmware. sheen
+ // BIT_CODE_DOWN
+ for(k = 0; k <2048; k++) {
+ data = bit_code[k];
+ VpuWriteReg(BIT_CODE_DOWN,(k << 16) | data);
+ i=50;
+ while(i--);
+ }
+
+ // Initialize the CODA
+ //buffer for bit processor command execution argument and return data.
+ VpuWriteReg(BIT_PARA_BUF_ADDR, HD_ADDR_BIT_PARA);
+ //buffer for firmware code.
+ VpuWriteReg(BIT_CODE_BUF_ADDR, HD_ADDR_BIT_CODE);
+ //bitstream buffer endian format,0= 64bit little endian
+ VpuWriteReg(BIT_BIT_STREAM_CTRL, 0x0);
+ //if the whole stream feeded,set bit2=1.
+ VpuWriteReg(BIT_BIT_STREAM_PARAM, 0x0);
+ //Dpb YUV buffer Endian mode:bit0=0 64bit little endian, bit2=0 CbCr separate format.
+ VpuWriteReg(BIT_FRAME_MEM_CTRL , 0x0);
+ //disable interrupt.
+ VpuWriteReg(BIT_INT_ENABLE, 0x0);
+ //7 secAxi enable bit.(disable VC1(Ovl,Btp),ME )
+ VpuWriteReg(BIT_AXI_SRAM_USE, 0x0f0f);
+ //bit processor busy flag.
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);
+ //bit processor code reset.
+ VpuWriteReg(BIT_CODE_RESET, 0x1);
+ //start vpu.
+ VpuWriteReg(BIT_CODE_RUN , 0x1);
+ while (VpuReadReg(BIT_BUSY_FLAG) == 1);
+
+ debug_printf("%s:(VPU_Init,InitializeVPU) load base code and init vpu done.CUR_PC=%x\n", __func__, VpuReadReg(BIT_CUR_PC));
+
+ //bit stream buffer read ptr.
+ VpuWriteReg(BIT_RD_PTR, HD_ADDR_BIT_STREAM);
+ //maximum is 15M, this value is for real bitstream write point position
+ VpuWriteReg(BIT_WR_PTR, HD_ADDR_BIT_STREAM+HD_STREAM_BUF_SIZE);
+ //(bs input mode) If all the streams are feeded, the value is 4 , in demo stream, all the stream is feeded, should not exceed 15M
+ VpuWriteReg(BIT_BIT_STREAM_PARAM , 4);
+ //common working buffer
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK);
+ // wait for BIT_BUSY_FLAG = 0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1);
+ //current bitstream read address.(512bytes increased each time)
+ data= VpuReadReg(BIT_RD_PTR);
+
+ debug_printf("%s:set bit stream buf done. BIT_RD_PTR 0x%x\n", __func__,data);
+
+ //for BIT_RUN_COMMAND: SEQ_INIT.
+ //(BIT_BASE+0x180... reuse). sheen
+ //seq Bitstream buffer SDRAM byte address.(align with mem bus width)
+ VpuWriteReg(CMD_DEC_SEQ_BB_START, HD_ADDR_BIT_STREAM);
+ //seq Bitstream buffer size in kilo bytes count
+ VpuWriteReg(CMD_DEC_SEQ_BB_SIZE, HD_STREAM_BUF_SIZE/1024);
+ //valid seq stream offset from start addr.(only valid in SEQ_INIT).
+ VpuWriteReg(CMD_DEC_SEQ_START_BYTE, 0x0);
+ //bit[1],enable display buffer reordering.(for B frame, will make delay)
+ VpuWriteReg(CMD_DEC_SEQ_OPTION, 0x2);
+ //buffer for saving sps/pps info.(parameter sets)
+ VpuWriteReg(CMD_DEC_SEQ_PS_BB_START, HD_ADDR_PS_SAVE_BUFFER);
+ //ps buffer size.
+ VpuWriteReg(CMD_DEC_SEQ_PS_BB_SIZE, PS_SAVE_SIZE/1024);
+ //support x264.
+ VpuWriteReg(CMD_DEC_SEQ_X264_MV_EN, 0x1);
+
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ debug_printf("%s: seq dec set done.\n", __func__);
+
+ // set busy.
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);
+ //common work buffer.
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK);
+ //vpu instance index.
+ VpuWriteReg(BIT_RUN_INDEX, 0x0);
+ //codec standard:0= H.264 DECODER
+ VpuWriteReg(BIT_RUN_COD_STD, 0x0);
+ //auxiliary codec standard index.(exp.when COD_STD MPEG4,0=MPEG4,1=DivX3)
+ VpuWriteReg(BIT_RUN_AUX_STD, 0x0);
+ //run vpu command. 1=SEQ_INIT,decode sps and report sequence header info.
+ VpuWriteReg(BIT_RUN_COMMAND, 0x1);
+
+ /*!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ need coolwatch write BUSY_FLAG to 0 when the first time hang after power on.
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!*/
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG) == 1);
+
+ //cur bitstream addr after sps decode.
+ data= VpuReadReg(BIT_RD_PTR);
+
+ debug_printf("%s:(VPU_DecGetInitialInfo) seq header init done. BIT_RD_PTR 0x%x\n", __func__,data);
+
+#if 1
+ //CONFIG IPB BUS
+ for(k = 0; k < 144; k += 4)
+ VpuWriteReg(BIT_BASE + 0x1800 + k, 0x4040);
+
+ VpuWriteReg(BIT_BASE+0x1890, 0x0);
+ VpuWriteReg(BIT_BASE+0x18a0, 0xc30);
+ VpuWriteReg(BIT_BASE+0x18a4, 0xc30);
+ VpuWriteReg(BIT_BASE+0x18a8, 0xc30);
+
+ for(k = 0; k < 9; k++)
+ VpuWriteReg(BIT_BASE + 0x18ac + 4 * k, k * 65);
+
+ VpuWriteReg(BIT_BASE+0x18d0, 0x410);
+ VpuWriteReg(BIT_BASE+0x18d4, 0x451);
+ VpuWriteReg(BIT_BASE+0x18d8, 0x820);
+ VpuWriteReg(BIT_BASE+0x18dc, 0x861);
+
+ VpuWriteReg(BIT_BASE+0x18e0, 0x8a2);
+ VpuWriteReg(BIT_BASE+0x18e4, 0x8e3);
+ VpuWriteReg(BIT_BASE+0x18e8, 0x924);
+ VpuWriteReg(BIT_BASE+0x18ec, 0x965);
+
+ VpuWriteReg(BIT_BASE+0x18f0, 0x9a6);
+ VpuWriteReg(BIT_BASE+0x18f4, 0x9e7);
+ VpuWriteReg(BIT_BASE+0x18f8, 0xa28);
+ VpuWriteReg(BIT_BASE+0x18fc, 0xa69);
+
+ VpuWriteReg(BIT_BASE+0x1900, 0xaaa);
+ VpuWriteReg(BIT_BASE+0x1904, 0xaeb);
+ VpuWriteReg(BIT_BASE+0x1908, 0xb2c);
+ VpuWriteReg(BIT_BASE+0x190c, 0xb6d);
+
+ VpuWriteReg(BIT_BASE+0x1910, 0xbae);
+ VpuWriteReg(BIT_BASE+0x1914, 0xbef);
+ VpuWriteReg(BIT_BASE+0x1918, 0xc30);
+ VpuWriteReg(BIT_BASE+0x191c, 0xc30);
+
+ VpuWriteReg(BIT_BASE+0x1920, 0xc000000);
+#endif
+
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1);
+
+ // Allocate DPB to the IP
+ // seqInitStatus for DEC_SEQ_INIT, 0 error, 1 success
+ ret = VpuReadReg(RET_DEC_SEQ_SUCCESS);
+ debug_printf("%s: seqInitStatus = %d\n", __func__, ret);
+ if (ret == 1) {
+ //bit[31:16],pic width
+ sizeX = VpuReadReg(RET_DEC_SEQ_SRC_SIZE) >> 16;
+ //bit[15:0],pic height
+ sizeY = VpuReadReg(RET_DEC_SEQ_SRC_SIZE) & 0xffff;
+ //minimum frame buffer number to decode.
+ FrameBufNum = VpuReadReg(RET_DEC_SEQ_FRAME_NEED);
+ if(FrameBufNum > HD_REG_FRAME_BUF_NUM)
+ FrameBufNum = HD_REG_FRAME_BUF_NUM;
+ debug_printf("%s: minimal request of frame buf num= %d\n", __func__, FrameBufNum);
+ //for BIT_RUN_COMMAND: SET_FRAME_BUF
+ // Number of frames used for reference or output reodering.
+ VpuWriteReg(CMD_SET_FRAME_BUF_NUM, FrameBufNum);
+
+ stride = ((sizeX + 15) & ~15);
+ VpuWriteReg(CMD_SET_FRAME_BUF_STRIDE, stride);// 8 multiplier, resolution width
+ PicSize = stride * ((sizeY + 15) & ~15);
+ debug_printf("%s: bufStride= %d sizex = %d, sizey = %d\n", __func__, stride, sizeX, sizeY);
+
+ } else {
+ // Report Error message
+ debug_printf("%s: seq dec err!!\n", __func__);
+ return -1;
+ }
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1);
+
+ VpuWriteReg(CMD_SET_FRAME_AXI_BIT_ADDR, HD_ADDR_SEC_AXI_BIT);//second AXI address,ADDR_AXI_BIT
+ VpuWriteReg(CMD_SET_FRAME_AXI_IPACDC_ADDR, HD_ADDR_SEC_AXI_IP);//second AXI address,ADDR_AXI_IP
+ VpuWriteReg(CMD_SET_FRAME_AXI_DBKY_ADDR, HD_ADDR_SEC_AXI_DBKY);//second AXI address,ADDR_AXI_DBKY
+ VpuWriteReg(CMD_SET_FRAME_AXI_DBKC_ADDR, HD_ADDR_SEC_AXI_DBKC);//second AXI address,ADDR_AXI_DBKC
+#if 0 //for VC1 only
+ VpuWriteReg(CMD_SET_FRAME_AXI_OVL_ADDR, HD_ADDR_SEC_AXI_OVL);//second AXI address,ADDR_AXI_OVL
+ VpuWriteReg(CMD_SET_FRAME_AXI_BTP_ADDR, HD_ADDR_SEC_AXI_BTP);//second AXI address,ADDR_AXI_BTP
+#else
+ VpuWriteReg(CMD_SET_FRAME_AXI_OVL_ADDR, 0); //second AXI address,ADDR_AXI_OVL
+ //VpuWriteReg(CMD_SET_FRAME_AXI_BTP_ADDR, 0); //second AXI address,ADDR_AXI_BTP
+#endif
+ //VpuWriteReg(CMD_SET_FRAME_CACHE_CONFIG, 0x7e0);//2D CACHE CONFIG
+ //buffer for saving SLICE RBSP.
+ VpuWriteReg(CMD_SET_FRAME_SLICE_BB_START, HD_ADDR_SLICE_BUFFER);
+ //SILCE RBSP buffer size in kilo bytes.
+ VpuWriteReg(CMD_SET_FRAME_SLICE_BB_SIZE, SLICE_SAVE_SIZE/1024);
+
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1);
+
+ // 4b0000: H.264 DECODER
+ // 4b0001: VC-1 DECODER
+ // 4b0010: MPEG-2 DECODER
+ // 4b0011: MPEG-4/DivX-3 DECODER
+ // 4b0100: RV DECODER
+ // 4b0101: AVS DECODER
+ // 4b1000: MJPEG DECODER
+
+ // Calculate frame buffer addresses
+ {
+ int addrNextLuma = HD_ADDR_FRAME_BASE;
+
+ for (k=0; k < FrameBufNum; k = k + 1) {
+ DpbLum[k] = addrNextLuma;
+ DpbCb[k] = DpbLum[k] + PicSize;
+ DpbCr[k] = DpbCb[k] + PicSize/4;
+ MvColBuf[k] = DpbCr[k] + PicSize/4;
+ addrNextLuma = MvColBuf[k] + PicSize/4;
+ debug_printf("dump addr yuv[%d]:0x%x size %d\n",k,DpbLum[k],PicSize*3/2 );
+ }
+
+ // registering the base addresses of created frame buffers, little endian is ok?
+ for (k=0; k < FrameBufNum; k = k + 2) {
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) , DpbCb[k] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 4, DpbLum[k] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 8, DpbLum[k+1]);
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 12, DpbCr[k] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 16, DpbCr[k+1] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 20, DpbCb[k+1] );
+ }
+
+ //mvCol buf
+ for (k=0; k < FrameBufNum; k = k + 2) {
+ MWRITE_WORD(HD_ADDR_BIT_PARA + 384+(k*4) , MvColBuf[k+1]);
+ MWRITE_WORD(HD_ADDR_BIT_PARA + 384+(k*4) + 4, MvColBuf[k]);
+
+ }
+
+ flush_dcache_range(HD_ADDR_BIT_PARA, HD_ADDR_BIT_PARA+PARA_BUF_SIZE);
+
+ }
+ // set busy flag.
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK);
+ //vpu run instance index.
+ VpuWriteReg(BIT_RUN_INDEX, 0x0);
+ //codec standard index.0= H.264
+ VpuWriteReg(BIT_RUN_COD_STD, 0x0);
+ //auxiliary codec standard index.
+ VpuWriteReg(BIT_RUN_AUX_STD, 0x0);
+ //n-th bit means display buffer index.
+ VpuWriteReg(BIT_FRM_DIS_FLG, 0x0);
+ // BIT_RUN_COMMAND: SET_FRAME_BUF= 0x4
+ VpuWriteReg(BIT_RUN_COMMAND, 0x4);
+
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1);
+
+ // decode processing
+ while(1) {
+ debug_printf("%s: decoding...%d\n", __func__, dec_num);
+ /*
+ if(dec_num==0 || dec_num==1){
+ for(k=0;k<0x200;k+=4)
+ debug_printf("0x%03X: 0x%08X\n",k,VpuReadReg(k));
+ }*/
+
+ //for BIT_RUN_COMMAND: PIC_RUN
+ //n-th bit means: preScan,I search,B skip,user data report...
+ VpuWriteReg(CMD_DEC_PIC_OPTION, 0x0);
+ //CMD_DEC_PIC_SKIP_NUM:the number of frame decoder skips.
+ VpuWriteReg(BIT_BASE+0x198, 0x0);
+ //rotation and mirroring.
+ VpuWriteReg(CMD_DEC_PIC_ROT_MODE, 0x0);
+ // set busy flag
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK);
+ //vpu run instance index.
+ VpuWriteReg(BIT_RUN_INDEX, 0x0);
+ //codec standard. 0= H.264
+ VpuWriteReg(BIT_RUN_COD_STD, 0x0);
+ //auxiliary codec index. H.264/AVC =0
+ VpuWriteReg(BIT_RUN_AUX_STD, 0x0);
+ // BIT_RUN_COMMAND :PIC_RUN
+ VpuWriteReg(BIT_RUN_COMMAND , 0x3);
+
+ // decode 1 frame complete
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1);
+
+ // Read output information
+ // Display frame index
+ DispFrameIdx = VpuReadReg(RET_DEC_PIC_DISPLAY_IDX);
+ // Decoded frame index
+ DecDecFrameIdx = VpuReadReg(RET_DEC_PIC_DECODED_IDX);
+ //0=I,1=P,2=B
+ DecPicType = VpuReadReg(RET_DEC_PIC_TYPE) & 0xff;
+ //PIC_RUN result.0=err in header.1=ok....
+ ret= VpuReadReg(RET_DEC_PIC_SUCCESS);
+ //frame bytes size
+ PicSize= VpuReadReg(BIT_RD_PTR)-data;
+ //cur bitstream addr
+ data= VpuReadReg(BIT_RD_PTR);
+
+ debug_printf("%s:ret 0x%x type %d disIDX %d decIDX %d BIT_RD_PTR 0x%x frmSz %d\n", __func__, ret, DecPicType,DispFrameIdx, DecDecFrameIdx,data,PicSize);
+
+ if(ret != 1 || PicSize <=0){
+ debug_printf("%s: One frame dec err!\n", __func__);
+ break;
+ }
+
+ if (DispFrameIdx == -1) // -1, no output ,end of the sequence.
+ {
+ // Decode successful
+ debug_printf("%s: EOS 1.\n", __func__);
+ break;
+
+ } else if (DispFrameIdx >=0 /*DispFrameIdx != -3 && DispFrameIdx != -2*/) { // -2,-3, no display frame
+ // Host handle output picture, such as display, then clear display flag
+ // For example, if host wants to display index0 frame, the Y, CB, CR addresses are // located in DpbLum[0]), DpbCb[0], DpbCr[0];
+ // By calling VpuWriteReg(BIT_BASE+0x150, 0x0) to clear display flag of index0 after displaying index0 frame
+ //32 bits, each bit match one frame index.sheen
+ DispFrameIdx = VpuReadReg(BIT_FRM_DIS_FLG) & (~(1<<DispFrameIdx));
+ VpuWriteReg(BIT_FRM_DIS_FLG, DispFrameIdx);
+ }
+
+ //check md5
+ if(md5_check && DecDecFrameIdx>=0){
+ flush_dcache_range(DpbLum[DecDecFrameIdx],DpbLum[DecDecFrameIdx]+sizeX*sizeY*3/2);
+ md5((unsigned char*)DpbLum[DecDecFrameIdx], sizeX*sizeY*3/2, md5Data);
+
+ debug_printf("md5 digest[0-7]=[0x%x %x %x %x %x %x %x %x]\n",md5Data[0],md5Data[1],md5Data[2],md5Data[3],md5Data[4],md5Data[5],md5Data[6],md5Data[7]);
+ debug_printf("md5 digest[8-15]=[0x%x %x %x %x %x %x %x %x]\n",md5Data[8],md5Data[9],md5Data[10],md5Data[11],md5Data[12],md5Data[13],md5Data[14],md5Data[15]);
+ for(k=0;k<16;k++){
+ if(md5Data[k]!=yuv_md5_digest[dec_num*16+k]){
+ debug_printf("md5 check fail!!!\n");
+ return -2;
+ }
+ }
+ debug_printf("md5 check pass!!!\n");
+ }
+
+
+ // copying yuv data to a file
+ // You should use your own method to output decoded frames to outside, such as using USB library.
+ dec_num++;
+
+ if(dec_num >= FRAME_TEST_NUM )
+ break;
+
+ if((data - HD_ADDR_BIT_STREAM) >= (bitStreamSize - 7)){
+ debug_printf("%s: EOS 2.\n", __func__);
+ break;
+ }
+ }
+
+ debug_printf("%s: end seq.\n", __func__);
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);// set busy.sheen
+ VpuWriteReg(BIT_RUN_COMMAND , 0x2); // BIT_RUN_COMMAND :SEQ_END
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ // You can directly output these 32 frame buffers to outside using USB driver.
+ printf("%s: test success finish.\n", __func__);
+ return 0;
+}
+
diff --git a/board/rda/common/vpu_test_coda960.c b/board/rda/common/vpu_test_coda960.c
new file mode 100644
index 0000000000..82b0b1190f
--- /dev/null
+++ b/board/rda/common/vpu_test_coda960.c
@@ -0,0 +1,570 @@
+/**********************************
+vpu test.
+modify ver 1.0 : for CODA960-8810
+2014.12.29
+modify ver 1.1
+2015.01.07
+sheen
+***********************************/
+
+#include "coda960_regs.h" //sync with cnm-coda-sw-pkg within android project.
+//vpu firmware
+#include "coda960_fw.h"
+
+//test video stream.
+#define FRAME_TEST_NUM (14) //decode frmae num < bit_stream frame num.
+const unsigned int bit_stream[] =
+{
+//don't rename bitstream!!
+//#include "bs_h264_5f_720x480.txt"
+#include "freh3_h264_99f_hp_cif.txt"
+};
+//16bytes each md5 digest.
+const unsigned char yuv_md5_digest[]=
+{
+//bs_h264_5f_720x480.txt yuv md5,create by coda960 cmodel.
+//#include "bs_h264_5f_720x480.md5"
+#include "freh3_h264_30f_hp_cif_decOrder.md5"
+};
+//#include <u-boot/md5.h>
+#include "rda_md5.h"
+/*************************************************
+ configs
+**************************************************/
+//0= little endian, 1= big endian.
+#define VPU_FRAME_ENDIAN 0
+#define VPU_STREAM_ENDIAN 0
+
+#define VPU_ENABLE_BWB 0 //burst write back. wirtes output with 8 burst in linear map mode.
+#define CBCR_INTERLEAVE 0 //[default 1 for BW checking with CnMViedo Conformance] 0 (chroma separate mode), 1 (chroma interleave mode) // if the type of tiledmap uses the kind of MB_RASTER_MAP. must set to enable CBCR_INTERLEAVE
+#define VPU_REPORT_USERDATA 0//if enabled, user data is writen to user data buffer
+#define USE_BIT_INTERNAL_BUF 1 //enable secondary AXI for prediction data of the bit-processor.
+#define USE_IP_INTERNAL_BUF 1 //enable secondary AXI for row pixel data of IP/AC-DC.
+#define USE_DBKY_INTERNAL_BUF 1 //enable secondary AXI for temporal luminance data of the de-blocking filter.
+#define USE_DBKC_INTERNAL_BUF 1 //enable secondary AXI for temporal chrominance data of the de-blocking filter.
+#define USE_OVL_INTERNAL_BUF 0 //enable secondary AXI for temporal data of the overlap filter(VC1 only)
+#define USE_BTP_INTERNAL_BUF 0//enable secondary AXI for bit-plane data of the bit-processor(VC1 only).
+
+typedef enum {
+ INT_BIT_INIT = 0,
+ INT_BIT_SEQ_INIT = 1,
+ INT_BIT_SEQ_END = 2,
+ INT_BIT_PIC_RUN = 3,
+ INT_BIT_FRAMEBUF_SET = 4,
+ INT_BIT_ENC_HEADER = 5,
+ INT_BIT_DEC_PARA_SET = 7,
+ INT_BIT_DEC_BUF_FLUSH = 8,
+ INT_BIT_USERDATA = 9,
+ INT_BIT_DEC_MB_ROWS = 13,
+ INT_BIT_BIT_BUF_EMPTY = 14,
+ INT_BIT_BIT_BUF_FULL = 15
+}InterruptBit;
+
+//ms
+#define VPU_ENC_TIMEOUT 5000
+#define VPU_DEC_TIMEOUT 5000
+
+
+/*****************************************************
+ register and memory base address.
+******************************************************/
+//vpu reg base addr. sheen
+#define BIT_REG_BASE 0x20830000 //CODA960
+#define BIT_REG_SIZE 0x4000
+
+//second AXI base addr.
+// SECOND AXI ACCCESS MEMORY ON CHIP
+//#define HD_SEC_AXI_BASE_ADDR 0x1C00000 //8810 CODA960
+#define HD_SEC_AXI_BASE_ADDR 0x100000 //8810 CODA960
+
+//external sdram base addr. sheen
+// FIRST AXI ACCCESS SDRAM
+//#define HD_BASE_ADDR 0x8db00000
+#define HD_BASE_ADDR 0x88000000 //minimum reserve 128M for 32 frames 1080P
+
+// Base address of the bitstream buffer. for the whole bitstream.
+#define HD_ADDR_BIT_STREAM (HD_BASE_ADDR + 0x000000)
+// Size of the bitstream buffer in byte,(1M bytes)
+#define HD_STREAM_BUF_SIZE 0x100000
+// Base address for the firmware image, (firmware size 126976x2)
+#define HD_ADDR_BIT_CODE (HD_ADDR_BIT_STREAM + HD_STREAM_BUF_SIZE)
+//bitcode buf size 260KB
+#define CODE_BUF_SIZE (260*1024)//CODA960
+// Base address for the firmware common parameters buffer.
+//1.record decode frame buf YUV addr,384= 4*3*MAX32, 2.record MvColBuf.sheen
+#define HD_ADDR_BIT_PARA (HD_ADDR_BIT_CODE + CODE_BUF_SIZE)
+//common parameters buffer size 10KB
+#define PARA_BUF_SIZE (10*1024) //CODA960
+// Base address for the firmware common working buffer.
+#define HD_ADDR_BIT_WORK (HD_ADDR_BIT_PARA + PARA_BUF_SIZE)
+//common work buffer size, AVC MAX= (WORK_BUF_SIZE + PS_SAVE_SIZE)=(80KB+320KB)= 400KB
+#define WORK_BUF_SIZE (400*1024) //CODA960
+//base address of the firmware common temp buffer.
+#define HD_ADDR_TEMP_BUF (HD_ADDR_BIT_WORK + WORK_BUF_SIZE)
+//common temp buffer size.
+#define TEMP_BUF_SIZE (204*1024) //CODA960
+// Slice Buffer of decoder. max as frame buffer.
+#define HD_ADDR_SLICE_BUFFER (HD_ADDR_TEMP_BUF + TEMP_BUF_SIZE)
+// For VP8. reuse HD_ADDR_SLICE_BUFFER
+#define HD_ADDR_VP8DEC_MB_BUF HD_ADDR_SLICE_BUFFER
+// For MP4. reuse HD_ADDR_SLICE_BUFFER
+#define HD_ADDR_MP4ENC_DP_BUF HD_ADDR_SLICE_BUFFER
+//max slice save buffer size. max 1920*1088*1.5
+#define SLICE_SAVE_SIZE (1920*1088*3/4)
+//SPS/PPS save buffer. Parameter Set Buffer for H.264 decoder
+#define HD_ADDR_PS_SAVE_BUFFER (HD_ADDR_SLICE_BUFFER + SLICE_SAVE_SIZE)
+//SPS/PPS save buffer size. CODA960 320KB, CODA7L 512KB.
+#define HD_PS_SAVE_SIZE 0x100000
+// Base address of the DPB.yuv frame buffer.
+#define HD_ADDR_FRAME_BASE (HD_ADDR_PS_SAVE_BUFFER + HD_PS_SAVE_SIZE)
+//register yuv buf num for decode. MAX=32, sheen
+#define HD_REG_FRAME_BUF_NUM 32
+// End address of the DPB(128MB-21MB)
+//resolution is limited to 1920x1088 (1920x1088x1.75x32=112 MB frame buffer size)
+#define HD_MAX_FRAME_BASE (HD_ADDR_FRAME_BASE + (1920*1088*7/4)*HD_REG_FRAME_BUF_NUM)
+
+
+/********second AXI addr config***********/
+//second AXI SRAM size 0x10000 (8810 CODA960)
+//max size for 1920x1088(120x68MB) H.264 8810 CODA960
+//Y Deblocking FIlter buffer, size 120*128= 0x3C00 bytes
+#define HD_ADDR_SEC_AXI_DBKY (HD_SEC_AXI_BASE_ADDR)
+//C Deblocking FIlter buffer, size 120*128= 0x3C00 bytes
+#define HD_ADDR_SEC_AXI_DBKC (HD_ADDR_SEC_AXI_DBKY + 0x3C00)
+//MB Information, size 120*144= 0x4380 bytes
+#define HD_ADDR_SEC_AXI_BIT (HD_ADDR_SEC_AXI_DBKC + 0x3C00)
+//Intra Prediciton buffer, size 120*64=0x1e00 bytes
+#define HD_ADDR_SEC_AXI_IP (HD_ADDR_SEC_AXI_BIT + 0x4380)
+//VC1 only overlap Filter, size 0x2580 bytes
+#define HD_ADDR_SEC_AXI_OVL (HD_ADDR_SEC_AXI_IP + 0x1E00)
+//VC1 only BIT PLANE, size 0xF00 bytes
+#define HD_ADDR_SEC_AXI_BTP (HD_ADDR_SEC_AXI_OVL + 0x2580)
+#define HD_ADDR_SEC_AXI_BUF_END (HD_SEC_AXI_BASE_ADDR + 0x10000)
+
+/************************************************************/
+
+//vpu registers read/write
+#define VpuWriteReg(ADDR, DATA) *((volatile unsigned int *)(ADDR + (unsigned int)BIT_REG_BASE)) = DATA
+#define VpuReadReg(ADDR) *((volatile unsigned int *)(ADDR + (unsigned int)BIT_REG_BASE))
+
+//directly addr read/write
+#define MREAD_WORD(ADDR) *((volatile int *)(ADDR))
+#define MWRITE_WORD(ADDR,DATA) *((volatile int *)(ADDR)) = DATA
+
+static int _vpu_test(int md5_check)
+{
+ int k;
+ int ret;
+ int sizeX;
+ int sizeY;
+ int FrameBufNum = 0;
+ int PicSize = 0;
+ int DispFrameIdx;
+ int DecDecFrameIdx;
+ int DecPicType;
+ unsigned int data;
+ int dec_num=0;
+ int stride;
+ unsigned int DpbLum[HD_REG_FRAME_BUF_NUM];
+ unsigned int DpbCb[HD_REG_FRAME_BUF_NUM];
+ unsigned int DpbCr[HD_REG_FRAME_BUF_NUM];
+ unsigned int MvColBuf[HD_REG_FRAME_BUF_NUM];
+ int dataSize;
+ int bitStreamSize;
+ unsigned char md5Data[16];
+ // VPP_MEDIA_NODE p_node;
+
+ printf("%s: start\n", __func__);
+
+ //store firmware in sdram and then dma firmware to internal PMEM by vpu. sheen
+ dataSize = sizeof(bit_code) / sizeof(bit_code[0]);//126976
+ for (k = 0; k < dataSize; k += 4) {
+ int dataH = 0;
+ int dataL = 0;
+ dataH = (bit_code[k+0] << 16) | bit_code[k+1];
+ dataL = (bit_code[k+2] << 16) | bit_code[k+3];
+ // 64 BIT BIG Endian
+ MWRITE_WORD(HD_ADDR_BIT_CODE + k * 2, dataL);
+ MWRITE_WORD(HD_ADDR_BIT_CODE+k * 2 + 4, dataH);
+ //j=50; // which is 338us low level
+ //while(--j);
+ }
+
+ flush_dcache_range(HD_ADDR_BIT_CODE, HD_ADDR_BIT_CODE+CODE_BUF_SIZE);
+
+ //init_vpu register
+ for(k = 0; k < 0x200; k += 4)
+ MWRITE_WORD(BIT_REG_BASE + k, 0);
+
+ VpuWriteReg(BIT_FRM_DIS_FLG, 0);//BIT_FRM_DIS_FLG
+
+ // Start decoding configuration
+ VpuWriteReg(BIT_BASE + 0xffc, 0x01); // enable clk, any other value than 0xA1B2C3D4
+ VpuWriteReg(BIT_CODE_RUN, 0x0); // BIT_CODE_RUN
+ VpuWriteReg(BIT_INT_ENABLE, 0x0); // BIT_INT_ENABLE, Disable interrupt
+
+ //load bit stream to sdram. sheen
+ dataSize = sizeof(bit_stream) / sizeof(bit_stream[0]);
+ if(dataSize > (HD_STREAM_BUF_SIZE / 4))
+ dataSize = HD_STREAM_BUF_SIZE / 4;
+ bitStreamSize = dataSize * 4;
+ for(k = 0; k < dataSize; k++) {
+ data = bit_stream[k];
+ MWRITE_WORD(HD_ADDR_BIT_STREAM + k * 4, data);
+ }
+
+ if(dataSize < (HD_STREAM_BUF_SIZE / 4)) {
+ //set 0
+ for(k = dataSize; k < (HD_STREAM_BUF_SIZE / 4); k++)
+ MWRITE_WORD(HD_ADDR_BIT_STREAM + k * 4, 0);
+ }
+
+ flush_dcache_range(HD_ADDR_BIT_STREAM, HD_ADDR_BIT_STREAM+HD_STREAM_BUF_SIZE);
+ // Download init common firmware. sheen
+ // BIT_CODE_DOWN
+ for(k = 0; k < 512; k += 4) {
+ data = bit_code[k];
+ VpuWriteReg(BIT_CODE_DOWN,(k << 16) | data);
+
+ data = bit_code[k+1];
+ VpuWriteReg(BIT_CODE_DOWN,((k+1) << 16) | data);
+
+ data = bit_code[k+2];
+ VpuWriteReg(BIT_CODE_DOWN,((k+2) << 16) | data);
+
+ data = bit_code[k+3];
+ VpuWriteReg(BIT_CODE_DOWN,((k+3) << 16) | data);
+ }
+
+ // Initialize the CODA
+ VpuWriteReg(BIT_PARA_BUF_ADDR, HD_ADDR_BIT_PARA); // BIT_PARA_BUF_ADDR
+ //VpuWriteReg(BIT_BASE+0x104, HD_ADDR_BIT_WORK); // BIT_WORK_BUF_ADDR
+ VpuWriteReg(BIT_CODE_BUF_ADDR, HD_ADDR_BIT_CODE); // BIT_CODE_BUF_ADDR
+ VpuWriteReg(BIT_BIT_STREAM_CTRL, 0x0); // BIT_BIT_STREAM_CTRL, 0= 64bit little endian
+ VpuWriteReg(BIT_BIT_STREAM_PARAM, 0x0); // BIT_BIT_STREAM_PARAM
+ //VpuWriteReg(BIT_BASE+0x110, 0x1); // Dpb Endian mode:1, 64bit big endian
+ VpuWriteReg(BIT_FRAME_MEM_CTRL , 0x0); //BIT_FRAME_MEM_CTRL Dpb Endian mode:1, 0=64bit little endian
+
+ VpuWriteReg(BIT_INT_ENABLE, 0x0); // BIT_INT_ENABLE
+ VpuWriteReg(BIT_AXI_SRAM_USE, 0x0f0f); // BIT_AXI_SRAM_USE, 6 secAxi enable bit.(disable VC1(Ovl,Btp) )
+ //VpuWriteReg(BIT_BASE+0x140, 0x78f); // BIT_AXI_SRAM_USE
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1); // BIT_BUSY_FLAG= 1
+ VpuWriteReg(BIT_CODE_RESET, 0x1); // BIT_CODE_RESET
+ VpuWriteReg(BIT_CODE_RUN , 0x1); // BIT_CODE_RUN
+ while (VpuReadReg(BIT_BUSY_FLAG) == 1); // BIT_BUSY_FLAG = 0
+
+ debug_printf("%s:(VPU_Init,InitializeVPU) load base code and init vpu done.\n", __func__);
+
+ VpuWriteReg(BIT_TEMP_BUF_ADDR, HD_ADDR_TEMP_BUF);
+ VpuWriteReg(BIT_RD_PTR, HD_ADDR_BIT_STREAM); // BIT_RD_PTR_0
+ VpuWriteReg(BIT_WR_PTR, HD_ADDR_BIT_STREAM+HD_STREAM_BUF_SIZE); // BIT_WR_PTR_0, maximum is 15M, this value is for real bitstream write point position
+ VpuWriteReg(BIT_BIT_STREAM_PARAM , 4); // BIT_BIT_STREAM_PARAM (bs input mode) If all the streams are feeded, the value is 4 , in demo stream, all the stream is feeded, should not exceed 15M
+
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK); // BIT_WORK_BUF_ADDR
+
+ // wait for BIT_BUSY_FLAG = 0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ data= VpuReadReg(BIT_RD_PTR);//cur bitstream addr
+
+ debug_printf("%s:set bit stream buf done. BIT_RD_PTR 0x%x\n", __func__,data);
+
+ //VpuWriteReg(BIT_BASE+0x124, HD_ADDR_BIT_STREAM); // BIT_WR_PTR_0, maximum is 15M, this value is for real bitstream write point position
+ //VpuWriteReg(BIT_BASE+0x110, 0x1); // Dpb Endian mode:1, 64bit little endian
+ //VpuWriteReg(BIT_BASE+0x114, 0x0); // BIT_BIT_STREAM_PARA
+
+ //for BIT_RUN_COMMAND: SEQ_INIT. (BIT_BASE+0x180... reuse). sheen
+ VpuWriteReg(CMD_DEC_SEQ_BB_START, HD_ADDR_BIT_STREAM);//CMD_DEC_SEQ_BB_START,seq Bitstream buffer SDRAM byte address
+ VpuWriteReg(CMD_DEC_SEQ_BB_SIZE, HD_STREAM_BUF_SIZE/1024); //CMD_DEC_SEQ_BB_SIZE, 15K, Bitstream buffer size in kilo bytes count
+ //VpuWriteReg(BIT_BASE+0x190, 0x0);// ? sheen
+ VpuWriteReg(CMD_DEC_SEQ_OPTION, 0x2);//bit[1],enable display buffer reordering.
+ //VpuWriteReg(BIT_BASE+0x194, HD_ADDR_PS_SAVE_BUFFER);// CMD_DEC_SEQ_PS_BB_START ? sheen
+ //VpuWriteReg(BIT_BASE+0x198, 0x200); // CMD_DEC_SEQ_PS_BB_SIZE
+ //VpuWriteReg(BIT_BASE+0x198, 0x80);// CMD_DEC_SEQ_PS_BB_SIZE ? sheen
+ VpuWriteReg(CMD_DEC_SEQ_X264_MV_EN, 0x1);//support x264. sheen
+ VpuWriteReg(CMD_DEC_SEQ_SPP_CHUNK_SIZE, 512);//GBU(get bit unit) size.
+
+ //VpuWriteReg(0xA0000000+0x198, HD_ADDR_PS_SAVE_BUFFER+0x200);// CMD_DEC_SEQ_PS_BB_SIZE
+
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ debug_printf("%s: seq dec set done.\n", __func__);
+
+ // CMD_DEC_SEQ_OPTION
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);// set busy.sheen
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK);
+ VpuWriteReg(BIT_RUN_INDEX, 0x0); //BIT_RUN_INDEX
+ VpuWriteReg(BIT_RUN_COD_STD, 0x0); //BIT_RUN_COD_STD 0: H.264 DECODER
+ // Command the CODA to initialize for the sequence level
+ VpuWriteReg(BIT_RUN_AUX_STD, 0x0); //BIT_RUN_AUX_STD
+
+ VpuWriteReg(BIT_RUN_COMMAND, 0x1); //BIT_RUN_COMMAND, SEQ_INIT=1 //////////source header
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG) == 1); // BIT_BUSY_FLAG = 0
+
+ data= VpuReadReg(BIT_RD_PTR);//cur bitstream addr
+
+ debug_printf("%s:(VPU_DecGetInitialInfo) seq header init done. BIT_RD_PTR 0x%x\n", __func__,data);
+
+#if 1
+ //CONFIG IPB BUS
+ for(k = 0; k < 144; k += 4)
+ VpuWriteReg(BIT_BASE + 0x1800 + k, 0x4040);
+
+ VpuWriteReg(BIT_BASE+0x1890, 0x0);
+ VpuWriteReg(BIT_BASE+0x18a0, 0xc30);
+ VpuWriteReg(BIT_BASE+0x18a4, 0xc30);
+ VpuWriteReg(BIT_BASE+0x18a8, 0xc30);
+
+ for(k = 0; k < 9; k++)
+ VpuWriteReg(BIT_BASE + 0x18ac + 4 * k, k * 65);
+
+ VpuWriteReg(BIT_BASE+0x18d0, 0x410);
+ VpuWriteReg(BIT_BASE+0x18d4, 0x451);
+ VpuWriteReg(BIT_BASE+0x18d8, 0x820);
+ VpuWriteReg(BIT_BASE+0x18dc, 0x861);
+
+ VpuWriteReg(BIT_BASE+0x18e0, 0x8a2);
+ VpuWriteReg(BIT_BASE+0x18e4, 0x8e3);
+ VpuWriteReg(BIT_BASE+0x18e8, 0x924);
+ VpuWriteReg(BIT_BASE+0x18ec, 0x965);
+
+ VpuWriteReg(BIT_BASE+0x18f0, 0x9a6);
+ VpuWriteReg(BIT_BASE+0x18f4, 0x9e7);
+ VpuWriteReg(BIT_BASE+0x18f8, 0xa28);
+ VpuWriteReg(BIT_BASE+0x18fc, 0xa69);
+
+ VpuWriteReg(BIT_BASE+0x1900, 0xaaa);
+ VpuWriteReg(BIT_BASE+0x1904, 0xaeb);
+ VpuWriteReg(BIT_BASE+0x1908, 0xb2c);
+ VpuWriteReg(BIT_BASE+0x190c, 0xb6d);
+
+ VpuWriteReg(BIT_BASE+0x1910, 0xbae);
+ VpuWriteReg(BIT_BASE+0x1914, 0xbef);
+ VpuWriteReg(BIT_BASE+0x1918, 0xc30);
+ VpuWriteReg(BIT_BASE+0x191c, 0xc30);
+
+ VpuWriteReg(BIT_BASE+0x1920, 0xc000000);
+#endif
+
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ //VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK); // BIT_WORK_BUF_ADDR
+
+ // Allocate DPB to the IP
+ //REG32(0x10000000) = VpuReadReg(BIT_BASE+0x1c0); // seqInitStatus, 0 error, 1 success
+ ret = VpuReadReg(RET_DEC_SEQ_SUCCESS); // seqInitStatus, 0 error, 1 success
+ debug_printf("%s: seqInitStatus = %d\n", __func__, ret);
+ if (ret == 1) {
+ //REG32(0x10000004) = VpuReadReg(BIT_BASE+0x1c4); // RET_DEC_SEQ_SRC_SIZE
+ sizeX = VpuReadReg(RET_DEC_SEQ_SRC_SIZE) >> 16; // [31:16]
+ sizeY = VpuReadReg(RET_DEC_SEQ_SRC_SIZE) & 0xffff; // [15: 0]
+ //PicSize = sizeX * sizeY;
+ //debug_printf("%s: sizex = %d, sizey = %d\n", __func__, sizeX, sizeY);
+
+ //REG32(0x10000008) = VpuReadReg(BIT_BASE+0x1cc); // Minimum decoded frame buffer need to decode stream successfully.
+ FrameBufNum = VpuReadReg(RET_DEC_SEQ_FRAME_NEED);
+ //FrameBufNum = 32; //Allocate 32 frame buffer for decoding. resolution is limited to 1920x1080 (1920x1080x1.75x32=111 MB frame buffer size)
+ if(FrameBufNum > HD_REG_FRAME_BUF_NUM)
+ FrameBufNum = HD_REG_FRAME_BUF_NUM;
+ debug_printf("%s: minimal request of frame buf num= %d\n", __func__, FrameBufNum);
+ //for BIT_RUN_COMMAND: SET_FRAME_BUF
+ VpuWriteReg(CMD_SET_FRAME_BUF_NUM, FrameBufNum); // Number of frames used for reference or output reodering.
+
+ stride = ((sizeX + 15) & ~15);
+ VpuWriteReg(CMD_SET_FRAME_BUF_STRIDE, stride);// 8 multiplier, resolution width
+ PicSize = stride * ((sizeY + 15) & ~15);
+ debug_printf("%s: bufStride= %d sizex = %d, sizey = %d\n", __func__, stride, sizeX, sizeY);
+
+ } else {
+ // Report Error message
+ debug_printf("%s: seq dec err!!\n", __func__);
+ return -1;
+ }
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1);// BIT_BUSY_FLAG = 0
+
+
+ VpuWriteReg(CMD_SET_FRAME_AXI_BIT_ADDR, HD_ADDR_SEC_AXI_BIT);//second AXI address,ADDR_AXI_BIT
+ VpuWriteReg(CMD_SET_FRAME_AXI_IPACDC_ADDR, HD_ADDR_SEC_AXI_IP);//second AXI address,ADDR_AXI_IP
+ VpuWriteReg(CMD_SET_FRAME_AXI_DBKY_ADDR, HD_ADDR_SEC_AXI_DBKY);//second AXI address,ADDR_AXI_DBKY
+ VpuWriteReg(CMD_SET_FRAME_AXI_DBKC_ADDR, HD_ADDR_SEC_AXI_DBKC);//second AXI address,ADDR_AXI_DBKC
+#if 0 //for VC1 only
+ VpuWriteReg(CMD_SET_FRAME_AXI_OVL_ADDR, HD_ADDR_SEC_AXI_OVL);//second AXI address,ADDR_AXI_OVL
+ VpuWriteReg(CMD_SET_FRAME_AXI_BTP_ADDR, HD_ADDR_SEC_AXI_BTP);//second AXI address,ADDR_AXI_BTP
+#else
+ VpuWriteReg(CMD_SET_FRAME_AXI_OVL_ADDR, 0); //second AXI address,ADDR_AXI_OVL
+ VpuWriteReg(CMD_SET_FRAME_AXI_BTP_ADDR, 0); //second AXI address,ADDR_AXI_BTP
+#endif
+ VpuWriteReg(CMD_SET_FRAME_CACHE_CONFIG, 0x7e0);//2D CACHE CONFIG
+
+ VpuWriteReg(CMD_SET_FRAME_SLICE_BB_START, HD_ADDR_SLICE_BUFFER);//ADDR_SLICE_BUFFER
+ VpuWriteReg(CMD_SET_FRAME_SLICE_BB_SIZE, SLICE_SAVE_SIZE);//ADDR_SLICE_SIZE
+
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+ /*
+ VpuWriteReg(BIT_RUN_INDEX, 0x0); // BIT_RUN_INDEX
+ VpuWriteReg(BIT_RUN_COD_STD, 0x0); // BIT_RUN_COD_STD, H.264
+ VpuWriteReg(BIT_RUN_AUX_STD, 0x0); // BIT_RUN_AUX_STD
+ VpuWriteReg(BIT_FRM_DIS_FLG, 0x0); // BIT_FRM_DIS_FLG
+ */
+
+ // 4b0000: H.264 DECODER
+ // 4b0001: VC-1 DECODER
+ // 4b0010: MPEG-2 DECODER
+ // 4b0011: MPEG-4/DivX-3 DECODER
+ // 4b0100: RV DECODER
+ // 4b0101: AVS DECODER
+ // 4b1000: MJPEG DECODER
+
+ // Calculate frame buffer addresses
+ {
+ int addrNextLuma = HD_ADDR_FRAME_BASE;
+
+ for (k=0; k < FrameBufNum; k = k + 1) {
+ DpbLum[k] = addrNextLuma;
+ DpbCb[k] = DpbLum[k] + PicSize;
+ DpbCr[k] = DpbCb[k] + PicSize/4;
+ MvColBuf[k] = DpbCr[k] + PicSize/4;
+ addrNextLuma = MvColBuf[k] + PicSize/4;
+ debug_printf("k=%d y=0x%x u=0x%x v=0x%x\n", k,DpbLum[k],DpbCb[k],DpbCr[k]);
+ }
+
+ // registering the base addresses of created frame buffers, little endian is ok?
+ for (k=0; k < FrameBufNum; k = k + 2) {
+ // 64 BIT BIG Endian
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) , DpbCb[k] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 4, DpbLum[k] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 8, DpbLum[k+1]);
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 12, DpbCr[k] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 16, DpbCr[k+1] );
+ MWRITE_WORD(HD_ADDR_BIT_PARA + (k*12) + 20, DpbCb[k+1] );
+ }
+
+ //mvCol buf
+ for (k=0; k < FrameBufNum; k = k + 2) {
+ // 64 BIT BIG Endian
+ MWRITE_WORD(HD_ADDR_BIT_PARA + 384+(k*4) , MvColBuf[k+1]);
+ MWRITE_WORD(HD_ADDR_BIT_PARA + 384+(k*4) + 4, MvColBuf[k]);
+ }
+
+ flush_dcache_range(HD_ADDR_BIT_PARA, HD_ADDR_BIT_PARA+PARA_BUF_SIZE);
+ }
+
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);// set busy.sheen
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK);
+ VpuWriteReg(BIT_RUN_INDEX, 0x0); // BIT_RUN_INDEX
+ VpuWriteReg(BIT_RUN_COD_STD, 0x0); // BIT_RUN_COD_STD, H.264
+ VpuWriteReg(BIT_RUN_AUX_STD, 0x0); // BIT_RUN_AUX_STD
+ VpuWriteReg(BIT_FRM_DIS_FLG, 0x0); // BIT_FRM_DIS_FLG
+
+ VpuWriteReg(BIT_RUN_COMMAND, 0x4); // BIT_RUN_COMMAND: SET_FRAME_BUF
+
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ // decode processing
+ while(1) {
+ //ret= VpuReadReg(BIT_BIT_STREAM_PARAM);
+ debug_printf("%s: decoding...%d\n", __func__, dec_num);
+ //VpuWriteReg(BIT_BIT_STREAM_PARAM, 0); // BIT_BIT_STREAM_PARAM
+ //VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK); // BIT_WORK_BUF_ADDR
+ /*
+ if(dec_num==0 || dec_num==1){
+ for(k=0;k<0x200;k+=4)
+ debug_printf("0x%03X: 0x%08X\n",k,VpuReadReg(k));
+ }*/
+
+ //for BIT_RUN_COMMAND: PIC_RUN
+ VpuWriteReg(CMD_DEC_PIC_OPTION, 0x0); //I search,B skip,user data report...sheen
+ VpuWriteReg(BIT_BASE+0x198, 0x0); //CMD_DEC_FRAME_SKIP_NUM .sheen
+ VpuWriteReg(CMD_DEC_PIC_ROT_MODE, 0x0); //rotation and mirroring.sheen
+
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);// set busy.sheen
+ VpuWriteReg(BIT_WORK_BUF_ADDR, HD_ADDR_BIT_WORK);
+ VpuWriteReg(BIT_RUN_INDEX, 0x0); //instance or process index.sheen
+ VpuWriteReg(BIT_RUN_COD_STD, 0x0); //codec index, H.264 =0
+ VpuWriteReg(BIT_RUN_AUX_STD, 0x0); //auxiliary codec index. H.264/AVC =0
+
+ VpuWriteReg(BIT_RUN_COMMAND , 0x3); // BIT_RUN_COMMAND :PIC_RUN
+
+ // decode 1 frame complete
+ // Wait until busyFlag==0
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ // Read output information
+ //REG32(0x1000000c)= VpuReadReg(BIT_BASE+0x1c4); // Display frame index
+ DispFrameIdx = VpuReadReg(RET_DEC_PIC_DISPLAY_IDX); // Display frame index
+ //REG32(0x10000010) = VpuReadReg(BIT_BASE+0x1dc); // Decoded frame index
+ DecDecFrameIdx = VpuReadReg(RET_DEC_PIC_DECODED_IDX);
+
+ DecPicType = VpuReadReg(RET_DEC_PIC_TYPE) & 7; // REC_DEC_PIC_TYPE
+ ret= VpuReadReg(RET_DEC_PIC_SUCCESS);//PIC_RUN result
+ PicSize= VpuReadReg(BIT_RD_PTR)-data; //frame bytes size
+ data= VpuReadReg(BIT_RD_PTR);//cur bitstream addr
+
+ debug_printf("%s:ret 0x%x type %d disIDX %d decIDX %d BIT_RD_PTR 0x%x frmSz %d\n", __func__, ret, DecPicType,DispFrameIdx, DecDecFrameIdx,data,PicSize);
+
+ if(ret != 1 || PicSize <=0){
+ debug_printf("%s: One frame dec err!\n", __func__);
+ break;
+ }
+
+ if (DispFrameIdx == -1) // -1, no output ,end of the sequence.
+ {
+ // Decode successful
+ debug_printf("%s: EOS 1.\n", __func__);
+ break;
+
+ } else if (DispFrameIdx >=0 /*DispFrameIdx != -3 && DispFrameIdx != -2*/) { // -2,-3, no display frame
+ // Host handle output picture, such as display, then clear display flag
+ // For example, if host wants to display index0 frame, the Y, CB, CR addresses are // located in DpbLum[0]), DpbCb[0], DpbCr[0];
+ // By calling VpuWriteReg(BIT_BASE+0x150, 0x0) to clear display flag of index0 after displaying index0 frame
+ //32 bits, each bit match one frame index.sheen
+ DispFrameIdx = VpuReadReg(BIT_FRM_DIS_FLG) & (~(1<<DispFrameIdx));
+
+ VpuWriteReg(BIT_FRM_DIS_FLG, DispFrameIdx);
+ }
+
+ //check md5
+ if(md5_check && DecDecFrameIdx>=0){
+ flush_dcache_range(DpbLum[DecDecFrameIdx],DpbLum[DecDecFrameIdx]+sizeX*sizeY*3/2);
+ md5((unsigned char*)DpbLum[DecDecFrameIdx], sizeX*sizeY*3/2, md5Data);
+
+ debug_printf("md5 digest[0-7]=[0x%x %x %x %x %x %x %x %x]\n",md5Data[0],md5Data[1],md5Data[2],md5Data[3],md5Data[4],md5Data[5],md5Data[6],md5Data[7]);
+ debug_printf("md5 digest[8-15]=[0x%x %x %x %x %x %x %x %x]\n",md5Data[8],md5Data[9],md5Data[10],md5Data[11],md5Data[12],md5Data[13],md5Data[14],md5Data[15]);
+ for(k=0;k<16;k++){
+ if(md5Data[k]!=yuv_md5_digest[dec_num*16+k]){
+ debug_printf("md5 check fail!!!\n");
+ return -2;
+ }
+ }
+ debug_printf("md5 check pass!!!\n");
+ }
+
+
+ // copying yuv data to a file
+ // You should use your own method to output decoded frames to outside, such as using USB library.
+ dec_num++;
+
+ if(dec_num >= FRAME_TEST_NUM )
+ break;
+
+ if((data - HD_ADDR_BIT_STREAM) >= (bitStreamSize - 7)){
+ debug_printf("%s: EOS 2.\n", __func__);
+ break;
+ }
+ }
+
+ debug_printf("%s: end seq.\n", __func__);
+ VpuWriteReg(BIT_BUSY_FLAG, 0x1);// set busy.sheen
+ VpuWriteReg(BIT_RUN_COMMAND , 0x2); // BIT_RUN_COMMAND :SEQ_END
+ while (VpuReadReg(BIT_BUSY_FLAG ) == 1); // BIT_BUSY_FLAG = 0
+
+ // You can directly output these 32 frame buffers to outside using USB driver.
+ printf("%s: test success finish.\n", __func__);
+ return 0;
+}
+
diff --git a/board/rda/rda8810/Makefile b/board/rda/rda8810/Makefile
new file mode 100644
index 0000000000..5750c05000
--- /dev/null
+++ b/board/rda/rda8810/Makefile
@@ -0,0 +1,82 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += clock_config.o clock.o ddr3.o
+else
+COBJS-$(CONFIG_MACH_RDA8810) += hal_config.o
+endif
+
+RDA_TARGET_DEF_FILE := $(TOPDIR)/target-device.def
+RDA_GET_MAKEFILE_VAR_FUNC = $(strip $(shell sed -n 's/^[ ]*$(1)[ ]*[?:]\?=\([^\#]\+\)\#*.*$$/\1/p' $(2)))
+
+NUMBER_OF_SIM := $(call RDA_GET_MAKEFILE_VAR_FUNC,NUMBER_OF_SIM,$(RDA_TARGET_DEF_FILE))
+ifeq ($(NUMBER_OF_SIM),)
+$(error Failed to get NUMBER_OF_SIM in $(RDA_TARGET_DEF_FILE))
+endif
+
+USER_SIM_ORDER := $(call RDA_GET_MAKEFILE_VAR_FUNC,USER_SIM_ORDER,$(RDA_TARGET_DEF_FILE))
+ifeq ($(USER_SIM_ORDER),)
+$(error Failed to get USER_SIM_ORDER in $(RDA_TARGET_DEF_FILE))
+endif
+
+NULL_STRING :=
+SPACE := ${NULL_STRING} # end of the line
+COMMA := ,
+TGT_SIM_ORDER := $(foreach SIM,$(USER_SIM_ORDER),$(SIM)$(COMMA))
+TGT_SIM_ORDER := $(subst ${SPACE},,${TGT_SIM_ORDER})
+
+CPPFLAGS_board/$(BOARDDIR)/hal_config.o += -I$(TOPDIR)/board/$(VENDOR)/common/include -DTGT_SIM_ORDER=$(TGT_SIM_ORDER) -DNUMBER_OF_SIM=$(NUMBER_OF_SIM)
+
+ifeq ($(strip $(TARGET_TABLET_MODE)),true)
+CPPFLAGS_board/$(BOARDDIR)/clock.o += -DTARGET_TABLET_MODE
+endif
+
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/rda8810/clock.c b/board/rda/rda8810/clock.c
new file mode 100644
index 0000000000..bbcefd036f
--- /dev/null
+++ b/board/rda/rda8810/clock.c
@@ -0,0 +1,1967 @@
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/ispi.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/defs_mdcom.h>
+#include <asm/arch/spl_board_info.h>
+#include "clock_config.h"
+#include "debug.h"
+#include "ddr3.h"
+#include <rda/tgt_ap_clock_config.h>
+
+#if (PMU_VBUCK1_VAL < 0 || PMU_VBUCK1_VAL > 15)
+#error "Invalid PMU_VBUCK1_VAL"
+#endif
+#if (PMU_VBUCK3_VAL < 0 || PMU_VBUCK3_VAL > 15)
+#error "Invalid PMU_VBUCK3_VAL"
+#endif
+#ifdef PMU_VBUCK4_VAL
+#if (PMU_VBUCK4_VAL < 0 || PMU_VBUCK4_VAL > 15)
+#error "Invalid PMU_VBUCK4_VAL"
+#endif
+#endif
+
+//#define DO_SIMPLE_DDR_TEST
+//#define DO_DDR_PLL_DEBUG
+
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+extern UINT8 g_debug_ddr3;
+static UINT8 rda2_result[8] = {0};
+
+extern ulong __ddrcal_start;
+extern ulong __start;
+
+static u16 * spl_text_start_addr;
+static u16 * ddr_cal_val_start_addr;
+#endif
+
+enum {
+ AP_CPU_CLK_IDX = 0,
+ AP_BUS_CLK_IDX,
+ AP_MEM_CLK_IDX,
+ AP_USB_CLK_IDX,
+};
+
+static int pll_enabled(int idx)
+{
+ if ((hwp_sysCtrlAp->Cfg_Pll_Ctrl[idx] &
+ (SYS_CTRL_AP_AP_PLL_ENABLE_MASK |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK)) ==
+ (SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET))
+ return 1;
+ else
+ return 0;
+}
+
+static int usb_in_use = 0;
+
+static void check_usb_usage(void)
+{
+ unsigned int mask = SYS_CTRL_AP_BUS_SEL_FAST_SLOW |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_MASK |
+ SYS_CTRL_AP_PLL_LOCKED_USB_MASK;
+ unsigned int reg = SYS_CTRL_AP_BUS_SEL_FAST_FAST |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED |
+ SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED;
+
+ if ((hwp_sysCtrlAp->Sel_Clock & mask) == reg &&
+ pll_enabled(AP_BUS_CLK_IDX) &&
+ pll_enabled(AP_USB_CLK_IDX))
+ usb_in_use = 1;
+ else
+ usb_in_use = 0;
+}
+
+#ifdef DO_SIMPLE_DDR_TEST
+
+void mem_test_write(void)
+{
+ unsigned short flag, mask;
+ unsigned int i, a, b;
+ volatile unsigned int *addr;
+
+ printf("write ddr test!!!!!!\n");
+
+ addr = (volatile unsigned int *)(0x83000000);
+ while((uint32)addr < 0x85000000)
+ {
+ for (i=0; i<16; i++) {
+ flag = 0x0101 << i;
+ mask = ~flag;
+ a = mask<<16 | mask;
+ b = mask<<16 |flag ;
+ *(addr++) = a;
+ *(addr++) = a;
+ *(addr++) = b;
+ *(addr++) = a;
+ }
+ }
+}
+
+void mem_test_read(void)
+{
+ unsigned short flag, mask;
+ unsigned int i, temp, a, b, i_err;
+ volatile unsigned int *addr;
+
+ printf("read ddr!!!!\n");
+
+ addr = (volatile unsigned int *)(0x83000000);
+ i_err=0;
+
+ while((uint32)addr < 0x85000000)
+ {
+ for (i=0; i<16; i++) {
+ flag = 0x0101 << i;
+ mask = ~flag;
+ a = mask<<16 | mask;
+ b = mask<<16 |flag ;
+ temp = *(addr++);
+ if ( temp != a) {
+ i_err=i_err+1;
+ if (i_err > 2 ) break;
+ printf("addr: 0x");
+ print_u32((UINT32)addr);
+ printf("\n");
+ printf("error value: 0x");
+ print_u32(temp);
+ printf("\n");
+ printf("right value: 0x");
+ print_u32(a);
+ printf("\n");
+ }
+ temp = *(addr++);
+ if ( temp != a) {
+ i_err=i_err+1;
+ if (i_err > 2 ) break;
+ printf("addr: 0x");
+ print_u32((UINT32)addr);
+ printf("\n");
+ printf("error value: 0x");
+ print_u32(temp);
+ printf("\n");
+ printf("right value: 0x");
+ print_u32(a);
+ printf("\n");
+ }
+ temp = *(addr++);
+ if ( temp != b) {
+ i_err=i_err+1;
+ if (i_err > 2 ) break;
+ printf("addr: 0x");
+ print_u32((UINT32)addr);
+ printf("\n");
+ printf("error value: 0x");
+ print_u32(temp);
+ printf("\n");
+ printf("right value: 0x");
+ print_u32(b);
+ printf("\n");
+ }
+ temp = *(addr++);
+ if ( temp != a) {
+ i_err=i_err+1;
+ if (i_err > 2 ) break;
+ printf("addr: 0x");
+ print_u32((UINT32)addr);
+ printf("\n");
+ printf("error value: 0x");
+ print_u32(temp);
+ printf("\n");
+ printf("right value: 0x");
+ print_u32(a);
+ printf("\n");
+ }
+ }
+ }
+ printf("test complete!\n");
+}
+
+#endif /* DO_SIMPLE_DDR_TEST */
+
+#ifndef CONFIG_RDA_FPGA
+
+// PMU bit fields
+#define PMU_SET_BITFIELD(dword, bitfield, value) \
+ (((dword) & ~(bitfield ## _MASK)) | (bitfield(value)))
+
+#define RDA_PMU_VBUCK1_BIT_ACT(n) (((n)&0xf)<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_SHIFT (12)
+
+#define RDA_PMU_VBUCK4_BIT_ACT_SHIFT (4)
+#define RDA_PMU_VBUCK4_BIT_ACT_MASK (0xf<<4)
+#define RDA_PMU_VBUCK4_BIT_ACT(n) (((n)&0xf)<<4)
+
+#define RDA_PMU_VBUCK3_BIT_ACT_SHIFT (12)
+#define RDA_PMU_VBUCK3_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK3_BIT_ACT(n) (((n)&0xf)<<12)
+
+struct pll_freq {
+ UINT32 freq_mhz;
+ UINT16 major;
+ UINT16 minor;
+ UINT16 with_div;
+ UINT16 div;
+};
+
+typedef enum {
+ PLL_REG_CPU_BASE = 0x00,
+ PLL_REG_BUS_BASE = 0x20,
+ PLL_REG_MEM_BASE = 0x60,
+ PLL_REG_USB_BASE = 0x80,
+} PLL_REG_BASE_INDEX_t;
+
+typedef enum {
+ PLL_REG_OFFSET_01H = 1,
+ PLL_REG_OFFSET_02H = 2,
+ PLL_REG_OFFSET_DIV = 3,
+ PLL_REG_OFFSET_04H = 4,
+ PLL_REG_OFFSET_MAJOR = 5,
+ PLL_REG_OFFSET_MINOR = 6,
+ PLL_REG_OFFSET_07H = 7,
+} PLL_REG_OFFSET_INDEX_t;
+
+/* MajorMinor = 2^29 * (freq / 26), only hign 32bits */
+static struct pll_freq pll_freq_table[] = {
+ /* MHz Major Minor div */
+ {1600, 0x7B13, 0xB138, 0, 0x0000},
+ {1200, 0x5C4E, 0xC4EC, 0, 0x0000},
+ {1150, 0x5876, 0x2762, 0, 0x0000},
+ {1100, 0x549D, 0x89D8, 0, 0x0000},
+ {1050, 0x50C4, 0xEC4E, 0, 0x0000},
+ {1020, 0x4E76, 0x2762, 0, 0x0000},
+ {1010, 0x4DB1, 0x3B13, 0, 0x0000},
+ {1000, 0x4CEC, 0x4EC4, 0, 0x0000},
+ { 988, 0x4C00, 0x0000, 0, 0x0000},
+ { 800, 0x3D89, 0xD89C, 0, 0x0000},
+ { 780, 0x3C00, 0x0000, 0, 0x0000},
+ { 750, 0x39B1, 0x3B13, 0, 0x0000},
+ { 600, 0x2E27, 0x6274, 0, 0x0000},
+ { 520, 0x2800, 0x0000, 0, 0x0000},
+ { 519, 0x27EC, 0x4EC4, 1, 0x0007},
+ { 500, 0x2676, 0x2762, 1, 0x0007},
+ { 480, 0x24EC, 0x4EC4, 0, 0x0000},
+ { 455, 0x2300, 0x0000, 1, 0x0007},
+ { 416, 0x2000, 0x0000, 1, 0x0007},
+ /* 800M div 1, PLL:800M DDR:400M for mem pll only */
+ { 400, 0x1EC4, 0xEC4C, 1, 0x0007},
+ { 355, 0x369D, 0x89D8, 1, 0x0007},
+ /* 702M div 1, PLL:702M DDR:351M for mem pll only */
+ { 351, 0x3600, 0x0000, 1, 0x0007},
+ { 333, 0x333B, 0x13B1, 1, 0x0007},
+ /* 624M div 1, PLL:624M DDR:312M for mem pll only */
+ { 312, 0x3000, 0x0000, 1, 0x0007},
+ { 290, 0x2C9D, 0x89D8, 1, 0x0007},
+ /* 520M div 1, PLL:520M DDR:260M for mem pll only */
+ { 260, 0x2800, 0x0000, 1, 0x0007},
+ /* 800M div 2, PLL:400M DDR:200M for mem pll only */
+ { 200, 0x3D89, 0xD89C, 1, 0x0006},
+ /* DDR:156M for mem pll only */
+ { 156, 0x3000, 0x0000, 1, 0x0006},
+ /* 800M div 4, PLL:200M DDR:100M for mem pll only */
+ { 100, 0x3D89, 0xD89C, 1, 0x0005},
+ /* 800M div 8, PLL:100M DDR:50M for mem pll only */
+ { 50, 0x3D89, 0xD89C, 1, 0x0004},
+};
+
+static struct clock_config *g_clock_config;
+
+#ifdef DO_DDR_PLL_DEBUG
+static struct clock_config clock_debug_config;
+static UINT32 ddrfreq = 400, ddr32bit = 0;
+#endif
+
+unsigned int * const g_reg_cache =
+ (unsigned int *)RDA_MDCOM_CHN_AT_BUF_ADD_WRITE;
+unsigned short g_reg_cnt = 0;
+const unsigned short g_reg_to_save[] = {
+ 0x65, 0x69, 0x100, 0x120, 0x140, 0x160,
+ 0x107, 0x127, 0x147, 0x167, 0x18a, };
+
+#define AP_ISPI_REG_CACHE_FLAG (0xac1561ca)
+
+static void reg_cache_start(void)
+{
+ *g_reg_cache = AP_ISPI_REG_CACHE_FLAG;
+}
+
+static void reg_cache_save(unsigned int idx, unsigned int value)
+{
+ int i;
+
+ for (i = 0; i < g_reg_cnt; i++) {
+ if ((*(g_reg_cache + 2 + i) >> 16) == idx) {
+ *(g_reg_cache + 2 + i) = (idx << 16) | (value & 0xFFFF);
+ return;
+ }
+ }
+
+ *(g_reg_cache + 2 + g_reg_cnt) = (idx << 16) | (value & 0xFFFF);
+ ++g_reg_cnt;
+}
+
+static void reg_cache_end(void)
+{
+ *(g_reg_cache + 1) = g_reg_cnt;
+ *(g_reg_cache + 2 + g_reg_cnt) = AP_ISPI_REG_CACHE_FLAG;
+}
+
+static void ispi_reg_write_and_save(unsigned int idx, unsigned int value)
+{
+ int i;
+
+ ispi_reg_write(idx, value);
+
+ for (i = 0; i < ARRAY_SIZE(g_reg_to_save); i++) {
+ if (idx == g_reg_to_save[i])
+ reg_cache_save(idx, value);
+ }
+}
+
+static void sys_shutdown_pll(void)
+{
+ int i;
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ if (usb_in_use) {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ } else {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_SLOW
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ }
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET;
+ }
+}
+
+static const unsigned short pll_patch_reg_base[] =
+{ PLL_REG_CPU_BASE, PLL_REG_BUS_BASE, PLL_REG_MEM_BASE, PLL_REG_USB_BASE };
+static char pll_patch_multi2[ARRAY_SIZE(pll_patch_reg_base)] = { 0, };
+
+void pll_patch_reg_set(unsigned int mask, unsigned int offset,
+ unsigned int value)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(pll_patch_reg_base); i++) {
+ if ((mask & (1 << i)) == 0) {
+ continue;
+ }
+
+ if (offset == PLL_REG_OFFSET_02H) {
+ // Keep the original refmulti2 flag
+ value |= pll_patch_multi2[i] ? (1 << 8) : 0;
+ if (i == AP_USB_CLK_IDX && rda_metal_id_get() >= 7)
+ value ^= (1 << 8);
+ }
+ ispi_reg_write_and_save(pll_patch_reg_base[i] + offset, value);
+ }
+}
+
+unsigned int pll_patch_reg_check(unsigned int mask, unsigned int check,
+ unsigned int count)
+{
+ int i, j;
+ unsigned int value;
+ unsigned int lockMask = mask;
+
+ for (j = 0; j < count; j++) {
+ for (i = 0; i < ARRAY_SIZE(pll_patch_reg_base); i++) {
+ if ((mask & (1 << i)) == 0) {
+ continue;
+ }
+
+ value = ispi_reg_read(pll_patch_reg_base[i] + PLL_REG_OFFSET_04H);
+ if ((value & check) != check) {
+ lockMask &= ~(1 << i);
+ if (lockMask == 0) {
+ goto _exit;
+ }
+ }
+ }
+ }
+
+_exit:
+ return lockMask;
+}
+
+static void pll_setup_patch(unsigned int mask)
+{
+ unsigned int cnt;
+ unsigned int lockMask;
+ unsigned int vcore;
+
+ if (mask == 0)
+ return;
+
+ /* AP ISPI read requires low vcore & high vpad */
+ ispi_open(1);
+ vcore = pmu_reg_read(0x2F);
+ pmu_reg_write(0x05, 0x4FF8);
+ pmu_reg_write(0x2F, 0x8444);
+ ispi_open(0);
+ udelay(5000);
+
+ lockMask = pll_patch_reg_check(mask, 0xE000, 10);
+ mask &= ~lockMask;
+ if (mask == 0) {
+ goto _exit;
+ }
+
+ pll_patch_reg_set(mask, PLL_REG_OFFSET_07H, 0x0010);
+ pll_patch_reg_set(mask, PLL_REG_OFFSET_02H, 0x02c9);
+
+ cnt = 0;
+ do {
+ if (cnt < 5 || (cnt % 100) == 0)
+ printf("Applying PLL enable patch: mask=0x%x\n", mask);
+
+ pll_patch_reg_set(mask, PLL_REG_OFFSET_01H, (cnt & 0x1) ? 0x7e70 : 0x7e7f);
+
+ lockMask = pll_patch_reg_check(mask, 0xA000, 1);
+ if (lockMask) {
+ pll_patch_reg_set(lockMask, PLL_REG_OFFSET_01H, 0x7e78);
+ pll_patch_reg_set(lockMask, PLL_REG_OFFSET_02H, 0x0209);
+ udelay(1000);
+ lockMask = pll_patch_reg_check(lockMask, 0xE000, 10);
+ mask &= ~lockMask;
+ if (mask == 0)
+ break;
+ }
+
+ cnt++;
+ } while (1);
+
+ printf("PLL enable patch done: %d\n", cnt);
+
+_exit:
+ ispi_open(1);
+ pmu_reg_write(0x2F, vcore);
+ ispi_open(0);
+ udelay(5000);
+}
+
+static void sys_setup_pll(void)
+{
+ int i;
+ UINT32 mask;
+ UINT32 locked;
+ int cnt = 10; //10us, according to IC, the pll must be locked
+ UINT32 pllMask = 0;
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+
+ pllMask |= (1 << i);
+
+ if (AP_MEM_CLK_IDX == i)
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(1)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ else
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ }
+
+ pll_setup_patch(pllMask);
+
+ mask = SYS_CTRL_AP_PLL_LOCKED_CPU_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_MASK
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_MASK
+ ;
+ locked = SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED
+ ;
+
+ while (((hwp_sysCtrlAp->Sel_Clock & mask) != locked) && cnt) {
+ udelay(1);
+ cnt--;
+ }
+ if (cnt == 0) {
+ printf("WARNING, cannot lock cpu/bus/mem pll 0x%08x ",
+ hwp_sysCtrlAp->Sel_Clock);
+ printf("but we run anyway ...\n");
+ }
+
+ for (i = 0; i < 3; i++) {
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] |=
+ SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE;
+ }
+
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_FAST
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+}
+
+static void sys_setup_clk(void)
+{
+ // Disable some power-consuming clocks
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_APO_Enable = SYS_CTRL_AP_ENABLE_APOC_VPU;
+ hwp_sysCtrlAp->Clk_MEM_Enable = SYS_CTRL_AP_ENABLE_MEM_VPU;
+#else
+ hwp_sysCtrlAp->Clk_APO_Disable = SYS_CTRL_AP_DISABLE_APOC_VPU;
+ hwp_sysCtrlAp->Clk_MEM_Disable = SYS_CTRL_AP_DISABLE_MEM_VPU;
+#endif
+
+ // Init clock gating mode
+ hwp_sysCtrlAp->Clk_CPU_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL | SYS_CTRL_AP_MODE_APB0_CONF_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL;
+#endif
+ hwp_sysCtrlAp->Clk_AXIDIV2_Mode = 0;
+ hwp_sysCtrlAp->Clk_GCG_Mode = SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL
+ | SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL;
+ hwp_sysCtrlAp->Clk_AHB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB2_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_MEM_Mode = SYS_CTRL_AP_MODE_CLK_MEM_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_MEM_Mode = 0;
+#endif
+ hwp_sysCtrlAp->Clk_APO_Mode = SYS_CTRL_AP_MODE_APOC_VPU_MANUAL;
+
+ // Init module frequency
+ hwp_sysCtrlAp->Cfg_Clk_AP_CPU = g_clock_config->CLK_CPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_AXI = g_clock_config->CLK_AXI;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GCG = g_clock_config->CLK_GCG;
+
+ if (!usb_in_use) {
+ hwp_sysCtrlAp->Cfg_Clk_AP_AHB1 = g_clock_config->CLK_AHB1;
+ }
+
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB1 = g_clock_config->CLK_APB1;
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB2 = g_clock_config->CLK_APB2;
+ hwp_sysCtrlAp->Cfg_Clk_AP_MEM = g_clock_config->CLK_MEM;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GPU = g_clock_config->CLK_GPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VPU = g_clock_config->CLK_VPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VOC = g_clock_config->CLK_VOC;
+ hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH = g_clock_config->CLK_SFLSH;
+}
+
+static void print_sys_reg(char *name, UINT32 value)
+{
+#if 0
+ printf("clk %s = %lx\n", name, value);
+#endif
+}
+
+static void sys_dump_clk(void)
+{
+ print_sys_reg("CPU", hwp_sysCtrlAp->Cfg_Clk_AP_CPU);
+ print_sys_reg("AXI", hwp_sysCtrlAp->Cfg_Clk_AP_AXI);
+ print_sys_reg("GCG", hwp_sysCtrlAp->Cfg_Clk_AP_GCG);
+ print_sys_reg("AHB1", hwp_sysCtrlAp->Cfg_Clk_AP_AHB1);
+ print_sys_reg("APB1", hwp_sysCtrlAp->Cfg_Clk_AP_APB1);
+ print_sys_reg("APB2", hwp_sysCtrlAp->Cfg_Clk_AP_APB2);
+ print_sys_reg("MEM", hwp_sysCtrlAp->Cfg_Clk_AP_MEM);
+ print_sys_reg("GPU", hwp_sysCtrlAp->Cfg_Clk_AP_GPU);
+ print_sys_reg("VPU", hwp_sysCtrlAp->Cfg_Clk_AP_VPU);
+ print_sys_reg("VOC", hwp_sysCtrlAp->Cfg_Clk_AP_VOC);
+ print_sys_reg("SFLSH", hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH);
+}
+
+static int pll_freq_set(UINT32 reg_base, UINT32 freq_mhz)
+{
+ int i;
+ struct pll_freq *freq;
+ unsigned int major, minor;
+ unsigned short value_02h;
+
+ /* find pll_freq */
+ for (i = 0; i < ARRAY_SIZE(pll_freq_table); i++) {
+ if (pll_freq_table[i].freq_mhz == freq_mhz)
+ break;
+ }
+ if (i >= ARRAY_SIZE(pll_freq_table)) {
+ printf("pll_freq_set, fail to find freq\n");
+ return -1;
+ }
+
+ freq = &pll_freq_table[i];
+ if (freq->with_div && (reg_base == PLL_REG_MEM_BASE)) {
+ ispi_reg_write_and_save(reg_base + PLL_REG_OFFSET_DIV,
+ freq->div);
+ // Calculate the real MEM PLL freq
+ freq_mhz *= (1 << (8 - (freq->div & 0x7)));
+ }
+ if (freq_mhz >= 800 || reg_base == PLL_REG_USB_BASE) {
+ // Apply multi2 option for PLL over 800M
+ for (i = 0; i < ARRAY_SIZE(pll_patch_reg_base); i++) {
+ if (pll_patch_reg_base[i] == reg_base)
+ break;
+ }
+ if (i >= ARRAY_SIZE(pll_patch_reg_base)) {
+ printf("pll_freq_set: fail to find reg base: 0x%x",
+ (unsigned int)reg_base);
+ return -1;
+ }
+ pll_patch_multi2[i] = 1;
+ value_02h = 0x0309;
+ // Div PLL freq by 2
+ minor = ((freq->major & 0xFFFF) << 14) |
+ ((freq->minor >> 2) & 0x3FFF);
+ minor >>= 1;
+ // Recalculate the divider
+ major = (minor >> 14) & 0xFFFF;
+ minor = (minor << 2) & 0xFFFF;
+ } else {
+ value_02h = 0x0209;
+ major = freq->major;
+ minor = freq->minor;
+ }
+ if (reg_base == PLL_REG_USB_BASE && rda_metal_id_get() >= 7)
+ value_02h ^= (1 << 8);
+ ispi_reg_write_and_save(reg_base + PLL_REG_OFFSET_02H, value_02h);
+ ispi_reg_write_and_save(reg_base + PLL_REG_OFFSET_MAJOR, major);
+ ispi_reg_write_and_save(reg_base + PLL_REG_OFFSET_MINOR, minor);
+ ispi_reg_write_and_save(reg_base + PLL_REG_OFFSET_07H, 0x0010);
+
+ return 0;
+}
+
+static void pll_setup_freq(void)
+{
+ pll_freq_set(PLL_REG_CPU_BASE, g_clock_config->PLL_FREQ_CPU);
+ // Always configure BUS PLL, even when it is being used
+ pll_freq_set(PLL_REG_BUS_BASE, g_clock_config->PLL_FREQ_BUS);
+ pll_freq_set(PLL_REG_MEM_BASE, g_clock_config->PLL_FREQ_MEM);
+ pll_freq_set(PLL_REG_USB_BASE, g_clock_config->PLL_FREQ_USB);
+}
+
+static void print_pll_freq(char *name, UINT32 value)
+{
+ printf("pll freq %s = %d\n", name, (int)value);
+}
+
+static void sys_dump_pll_freq(void)
+{
+ print_pll_freq("CPU", g_clock_config->PLL_FREQ_CPU);
+ print_pll_freq("BUS", g_clock_config->PLL_FREQ_BUS);
+ print_pll_freq("MEM", g_clock_config->PLL_FREQ_MEM);
+ //print_pll_freq("USB", g_clock_config->PLL_FREQ_USB);
+}
+
+#if 0
+static void pmu_get_efuse_dcdc(int buckVoltLow[])
+{
+ static const u8 setBitCnt[8] = { 0, 1, 1, 2, 1, 2, 2, 3, };
+ u16 dcdc;
+ int i;
+
+ pmu_reg_write(0x51, 0x02ed);
+ udelay(2000);
+ pmu_reg_write(0x51, 0x02fd);
+ dcdc = pmu_reg_read(0x52);
+ pmu_reg_write(0x51, 0x0200);
+
+ for (i = 0; i < 4; i++) {
+ buckVoltLow[i] = (setBitCnt[dcdc & 0x7] > 1);
+ dcdc >>= 3;
+ }
+}
+#endif
+
+static void pmu_setup_init(void)
+{
+ u32 value;
+ int buck_volt_low[4] = { 0, };
+
+ rda_nand_iodrive_set();
+
+#ifdef CONFIG_RDA_PDL
+ enable_charger(0);
+#endif
+
+ ispi_open(1);
+
+ // Disable vibrator
+ if (rda_metal_id_get() < 9)
+ pmu_reg_write(0x03, 0x9FDF);
+ else
+ pmu_reg_write(0x03, 0x9FFF);
+ // Enable bandgap chopper mode
+ pmu_reg_write(0x0F, 0x1E90);
+ // Enable high AC throttling
+ pmu_reg_write(0x12, 0x1218);
+#ifdef TARGET_TABLET_MODE
+ // Charger current (cc = 6, pre = 7)
+ pmu_reg_write(0x13, 0x1B70);
+#else
+ // Charger current (cc = 2, pre = 7)
+ pmu_reg_write(0x13, 0x1970);
+#endif
+ // Vcore DCDC freq
+ pmu_reg_write(0x2D, 0x96BA);
+ pmu_reg_write(0x2E, 0x12AA);
+#if 0
+ // Get efuse dcdc
+ pmu_get_efuse_dcdc(buck_volt_low);
+#endif
+ // Vcore voltage
+ value = 0x9444;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK1_BIT_ACT,
+ PMU_VBUCK1_VAL +
+ ((PMU_VBUCK1_VAL < 15 && buck_volt_low[0]) ? 1 : 0));
+ pmu_reg_write(0x2F, value);
+ // DDR PWM mode
+ pmu_reg_write(0x0D, 0x92D0);
+ // DDR voltage
+ value = 0xAAB5;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK3_BIT_ACT,
+ PMU_VBUCK3_VAL +
+ ((PMU_VBUCK3_VAL < 15 && buck_volt_low[2]) ? 1 : 0));
+#ifdef PMU_VBUCK4_VAL
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK4_BIT_ACT,
+ PMU_VBUCK4_VAL +
+ ((PMU_VBUCK4_VAL < 15 && buck_volt_low[3]) ? 1 : 0));
+ if (rda_metal_id_get() >= 9)
+ value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ // vBuck4 in low voltage range
+ if (rda_metal_id_get() < 9)
+ pmu_reg_write(0x36, 0x6E44);
+ else
+ pmu_reg_write(0x36, 0x6E45);
+#else
+ if (rda_metal_id_get() < 9)
+ pmu_reg_write(0x36, 0x6E55);
+ else
+ pmu_reg_write(0x36, 0x6E54);
+#endif
+ pmu_reg_write(0x2A, value);
+ // DDR power parameters
+ pmu_reg_write(0x4A, 0x96AA);
+ pmu_reg_write(0x4B, 0x96AA);
+
+ ispi_open(0);
+ printf("PMU vbuck1 = %u, vbuck3 = %u\n", PMU_VBUCK1_VAL, PMU_VBUCK3_VAL);
+}
+
+static void setup_ddr_vtt(int vtt)
+{
+ if (rda_metal_id_get() >= 2) {
+ printf("setup ddr vtt to %d\n", vtt);
+ ispi_reg_write_and_save(0x69, 0x0008 | (vtt & 0x07) );
+ }
+}
+
+/*
+ * we initialize usb clock, but this won't cause the usb clock jitter,
+ * because wo don't setup the usb pll
+ */
+static void usb_clock_pre_init(void)
+{
+ if (rda_metal_id_get() < 2) {
+ ispi_reg_write_and_save(0x81, 0x7a68);
+ ispi_reg_write_and_save(0x82, 0x0308);
+ ispi_reg_write_and_save(0x83, 0xfae7);
+ ispi_reg_write_and_save(0x85, 0x1276);
+ ispi_reg_write_and_save(0x86, 0x2762);
+ ispi_reg_write_and_save(0x89, 0x7441);
+ } else {
+ ispi_reg_write_and_save(0x83, 0x72ef);
+ ispi_reg_write_and_save(0x89, 0x7400);
+ }
+}
+
+static void pll_setup_init(void)
+{
+ setup_ddr_vtt(DDR_VTT_VAL);
+
+ if (g_clock_config->DDR_CHAN_1_VALID) {
+ ispi_reg_write_and_save(0x100, g_clock_config->DDR_TIMING_100H);
+ ispi_reg_write_and_save(0x101, g_clock_config->DDR_TIMING_101H);
+ ispi_reg_write_and_save(0x102, g_clock_config->DDR_TIMING_102H);
+ ispi_reg_write_and_save(0x103, g_clock_config->DDR_TIMING_103H);
+ ispi_reg_write_and_save(0x104, g_clock_config->DDR_TIMING_104H);
+ ispi_reg_write_and_save(0x105, g_clock_config->DDR_TIMING_105H);
+ ispi_reg_write_and_save(0x106, g_clock_config->DDR_TIMING_106H);
+ ispi_reg_write_and_save(0x107, g_clock_config->DDR_TIMING_107H);
+ ispi_reg_write_and_save(0x108, g_clock_config->DDR_TIMING_108H);
+ ispi_reg_write_and_save(0x109, g_clock_config->DDR_TIMING_109H);
+ ispi_reg_write_and_save(0x10A, g_clock_config->DDR_TIMING_10AH);
+ ispi_reg_write_and_save(0x10B, g_clock_config->DDR_TIMING_10BH);
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID) {
+ ispi_reg_write_and_save(0x120, g_clock_config->DDR_TIMING_120H);
+ ispi_reg_write_and_save(0x121, g_clock_config->DDR_TIMING_121H);
+ ispi_reg_write_and_save(0x122, g_clock_config->DDR_TIMING_122H);
+ ispi_reg_write_and_save(0x123, g_clock_config->DDR_TIMING_123H);
+ ispi_reg_write_and_save(0x124, g_clock_config->DDR_TIMING_124H);
+ ispi_reg_write_and_save(0x125, g_clock_config->DDR_TIMING_125H);
+ ispi_reg_write_and_save(0x126, g_clock_config->DDR_TIMING_126H);
+ ispi_reg_write_and_save(0x127, g_clock_config->DDR_TIMING_127H);
+ ispi_reg_write_and_save(0x128, g_clock_config->DDR_TIMING_128H);
+ ispi_reg_write_and_save(0x129, g_clock_config->DDR_TIMING_129H);
+ ispi_reg_write_and_save(0x12A, g_clock_config->DDR_TIMING_12AH);
+ ispi_reg_write_and_save(0x12B, g_clock_config->DDR_TIMING_12BH);
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID) {
+ ispi_reg_write_and_save(0x140, g_clock_config->DDR_TIMING_140H);
+ ispi_reg_write_and_save(0x141, g_clock_config->DDR_TIMING_141H);
+ ispi_reg_write_and_save(0x142, g_clock_config->DDR_TIMING_142H);
+ ispi_reg_write_and_save(0x143, g_clock_config->DDR_TIMING_143H);
+ ispi_reg_write_and_save(0x144, g_clock_config->DDR_TIMING_144H);
+ ispi_reg_write_and_save(0x145, g_clock_config->DDR_TIMING_145H);
+ ispi_reg_write_and_save(0x146, g_clock_config->DDR_TIMING_146H);
+ ispi_reg_write_and_save(0x147, g_clock_config->DDR_TIMING_147H);
+ ispi_reg_write_and_save(0x148, g_clock_config->DDR_TIMING_148H);
+ ispi_reg_write_and_save(0x149, g_clock_config->DDR_TIMING_149H);
+ ispi_reg_write_and_save(0x14A, g_clock_config->DDR_TIMING_14AH);
+ ispi_reg_write_and_save(0x14B, g_clock_config->DDR_TIMING_14BH);
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID) {
+ ispi_reg_write_and_save(0x160, g_clock_config->DDR_TIMING_160H);
+ ispi_reg_write_and_save(0x161, g_clock_config->DDR_TIMING_161H);
+ ispi_reg_write_and_save(0x162, g_clock_config->DDR_TIMING_162H);
+ ispi_reg_write_and_save(0x163, g_clock_config->DDR_TIMING_163H);
+ ispi_reg_write_and_save(0x164, g_clock_config->DDR_TIMING_164H);
+ ispi_reg_write_and_save(0x165, g_clock_config->DDR_TIMING_165H);
+ ispi_reg_write_and_save(0x166, g_clock_config->DDR_TIMING_166H);
+ ispi_reg_write_and_save(0x167, g_clock_config->DDR_TIMING_167H);
+ ispi_reg_write_and_save(0x168, g_clock_config->DDR_TIMING_168H);
+ ispi_reg_write_and_save(0x169, g_clock_config->DDR_TIMING_169H);
+ ispi_reg_write_and_save(0x16A, g_clock_config->DDR_TIMING_16AH);
+ ispi_reg_write_and_save(0x16B, g_clock_config->DDR_TIMING_16BH);
+ }
+
+ ispi_reg_write_and_save(0x180, g_clock_config->DDR_TIMING_180H);
+ ispi_reg_write_and_save(0x181, g_clock_config->DDR_TIMING_181H);
+ ispi_reg_write_and_save(0x182, g_clock_config->DDR_TIMING_182H);
+ ispi_reg_write_and_save(0x183, g_clock_config->DDR_TIMING_183H);
+ ispi_reg_write_and_save(0x184, g_clock_config->DDR_TIMING_184H);
+ ispi_reg_write_and_save(0x185, g_clock_config->DDR_TIMING_185H);
+ ispi_reg_write_and_save(0x186, g_clock_config->DDR_TIMING_186H);
+ ispi_reg_write_and_save(0x187, g_clock_config->DDR_TIMING_187H);
+ ispi_reg_write_and_save(0x188, g_clock_config->DDR_TIMING_188H);
+ ispi_reg_write_and_save(0x189, g_clock_config->DDR_TIMING_189H);
+ ispi_reg_write_and_save(0x18A, g_clock_config->DDR_TIMING_18AH);
+ ispi_reg_write_and_save(0x18B, g_clock_config->DDR_TIMING_18BH);
+ ispi_reg_write_and_save(0x18C, g_clock_config->DDR_TIMING_18CH);
+
+ usb_clock_pre_init();
+
+ udelay(5000);
+}
+
+static void pll_setup_mem(void)
+{
+}
+
+static void pll_setup_mem_cal(void)
+{
+}
+
+#if 0
+static void print_pll_reg(UINT32 index, UINT32 value)
+{
+ printf("pll reg %lx = %lx\n", index, value);
+}
+#endif
+
+static void pll_dump_reg(void)
+{
+#if 0
+ print_pll_reg(0x005, ispi_reg_read(0x005));
+ print_pll_reg(0x006, ispi_reg_read(0x006));
+ print_pll_reg(0x063, ispi_reg_read(0x063));
+ print_pll_reg(0x065, ispi_reg_read(0x065));
+ print_pll_reg(0x066, ispi_reg_read(0x066));
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ {
+ print_pll_reg(0x100, ispi_reg_read(0x100));
+ print_pll_reg(0x101, ispi_reg_read(0x101));
+ print_pll_reg(0x102, ispi_reg_read(0x102));
+ print_pll_reg(0x103, ispi_reg_read(0x103));
+ print_pll_reg(0x104, ispi_reg_read(0x104));
+ print_pll_reg(0x105, ispi_reg_read(0x105));
+ print_pll_reg(0x106, ispi_reg_read(0x106));
+ print_pll_reg(0x107, ispi_reg_read(0x107));
+ print_pll_reg(0x108, ispi_reg_read(0x108));
+ print_pll_reg(0x109, ispi_reg_read(0x109));
+ print_pll_reg(0x10A, ispi_reg_read(0x10A));
+ print_pll_reg(0x10B, ispi_reg_read(0x10B));
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ {
+ print_pll_reg(0x120, ispi_reg_read(0x120));
+ print_pll_reg(0x121, ispi_reg_read(0x121));
+ print_pll_reg(0x122, ispi_reg_read(0x122));
+ print_pll_reg(0x123, ispi_reg_read(0x123));
+ print_pll_reg(0x124, ispi_reg_read(0x124));
+ print_pll_reg(0x125, ispi_reg_read(0x125));
+ print_pll_reg(0x126, ispi_reg_read(0x126));
+ print_pll_reg(0x127, ispi_reg_read(0x127));
+ print_pll_reg(0x128, ispi_reg_read(0x128));
+ print_pll_reg(0x129, ispi_reg_read(0x129));
+ print_pll_reg(0x12A, ispi_reg_read(0x12A));
+ print_pll_reg(0x12B, ispi_reg_read(0x12B));
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ {
+ print_pll_reg(0x140, ispi_reg_read(0x140));
+ print_pll_reg(0x141, ispi_reg_read(0x141));
+ print_pll_reg(0x142, ispi_reg_read(0x142));
+ print_pll_reg(0x143, ispi_reg_read(0x143));
+ print_pll_reg(0x144, ispi_reg_read(0x144));
+ print_pll_reg(0x145, ispi_reg_read(0x145));
+ print_pll_reg(0x146, ispi_reg_read(0x146));
+ print_pll_reg(0x147, ispi_reg_read(0x147));
+ print_pll_reg(0x148, ispi_reg_read(0x148));
+ print_pll_reg(0x149, ispi_reg_read(0x149));
+ print_pll_reg(0x14A, ispi_reg_read(0x14A));
+ print_pll_reg(0x14B, ispi_reg_read(0x14B));
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ {
+ print_pll_reg(0x161, ispi_reg_read(0x161));
+ print_pll_reg(0x162, ispi_reg_read(0x162));
+ print_pll_reg(0x163, ispi_reg_read(0x163));
+ print_pll_reg(0x164, ispi_reg_read(0x164));
+ print_pll_reg(0x165, ispi_reg_read(0x165));
+ print_pll_reg(0x166, ispi_reg_read(0x166));
+ print_pll_reg(0x167, ispi_reg_read(0x167));
+ print_pll_reg(0x168, ispi_reg_read(0x168));
+ print_pll_reg(0x169, ispi_reg_read(0x169));
+ print_pll_reg(0x16A, ispi_reg_read(0x16A));
+ print_pll_reg(0x16B, ispi_reg_read(0x16B));
+ }
+
+ print_pll_reg(0x160, ispi_reg_read(0x160));
+ print_pll_reg(0x180, ispi_reg_read(0x180));
+ print_pll_reg(0x181, ispi_reg_read(0x181));
+ print_pll_reg(0x182, ispi_reg_read(0x182));
+ print_pll_reg(0x183, ispi_reg_read(0x183));
+ print_pll_reg(0x184, ispi_reg_read(0x184));
+ print_pll_reg(0x185, ispi_reg_read(0x185));
+ print_pll_reg(0x186, ispi_reg_read(0x186));
+ print_pll_reg(0x187, ispi_reg_read(0x187));
+ print_pll_reg(0x188, ispi_reg_read(0x188));
+ print_pll_reg(0x189, ispi_reg_read(0x189));
+ print_pll_reg(0x18A, ispi_reg_read(0x18A));
+ print_pll_reg(0x18B, ispi_reg_read(0x18B));
+#endif
+}
+
+static int clock_save_config(void)
+{
+ /* save config to nand */
+ return 1;
+}
+
+#ifdef DO_DDR_PLL_DEBUG
+
+static int ddr_get_freq(UINT8 chioce)
+{
+ switch(chioce)
+ {
+ case 1:
+ return 50;
+ case 2:
+ return 100;
+ case 3:
+ return 156;
+ case 4:
+ return 200;
+ case 5:
+ return 290;
+ case 6:
+ return 333;
+ case 7:
+ return 355;
+ case 8:
+ return 400;
+ case 9:
+ return 416;
+ case 10:
+ return 455;
+ case 11:
+ return 500;
+ case 12:
+ return 519;
+ default:
+ return -1;
+ }
+}
+
+static void freq_choose(void)
+{
+ UINT8 i = 0, buf[3] = {0}, choice = 0;
+ INT32 freq_temp = 0;
+
+ printf("\nPlese choose the ddr Freq:");
+ printf("\n1.50M 2.100M 3.156M 4.200M 5.290M 6.333M 7.355M 8.400M 9.416M 10.455M 11.500M 12.519M");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ choice = buf[0] - 0x30;
+ else if (2 == i)
+ choice = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ freq_temp = ddr_get_freq(choice);
+ if (-1 == freq_temp )
+ printf("\n Sorry, the fre you choose is wrong");
+ ddrfreq = freq_temp;
+}
+
+static void data_bits_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+
+ printf("\nPlese choose the ddr data bits:");
+ printf("\n1.16 2.32");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr32bit = 0;
+ else
+ ddr32bit = 1;
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+#if 0
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ printf("\nPlese input DDR voltage(0 ~ 15):");
+ }
+
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = pmu_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ pmu_reg_write(regid, reg_value);
+ mdelay(100);
+}
+#endif
+
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ if (2 == vcoreselect)
+ printf("\nPlese input DDR buck3 voltage(0 ~ 15):");
+ else
+ printf("\nPlese input DDR buck4 voltage(0 ~ 15):");
+ }
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ if ((vcoreselect == 1) || (vcoreselect == 2))
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = pmu_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ pmu_reg_write(regid, reg_value);
+ mdelay(100);
+ }
+ else
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 4;
+ reg_value = pmu_reg_read(regid);
+ reg_value &= ~(0xf << 4);
+ reg_value |= temp ;
+ if (rda_metal_id_get() >= 9)
+ reg_value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ pmu_reg_write(regid, reg_value);
+ pmu_reg_write(0x0D, 0x92D0);
+ pmu_reg_write(0x4B, 0x96A8);
+ mdelay(100);
+ }
+}
+
+static void pmu_buck4_buck3_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+ UINT8 ddr_voltage_source = 0;
+
+ printf("\nPlese choose the ddr voltage:");
+ printf("\n1.DDR3L 2.DDR3");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr_voltage_source =2;
+ else{
+ ddr_voltage_source = 3;
+ pmu_setup_calibration_voltage(2);
+ }
+ pmu_setup_calibration_voltage(ddr_voltage_source);
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+
+void clock_load_ddr_cal_config(void)
+{
+ clock_debug_config.PLL_FREQ_MEM = ddrfreq;
+ if (ddrfreq < 200)
+ clock_debug_config.DDR_FLAGS |= DDR_FLAGS_DLLOFF;
+ else
+ clock_debug_config.DDR_FLAGS &= ~DDR_FLAGS_DLLOFF;
+
+ if (0 == ddr32bit)
+ {
+ clock_debug_config.DDR_CHAN_3_VALID = 0;
+ clock_debug_config.DDR_CHAN_4_VALID = 0;
+ }
+
+ clock_debug_config.DDR_PARA &= ~DDR_PARA_MEM_BITS_MASK;
+ if (0 == ddr32bit)
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(1);
+ else
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(2);
+}
+
+static int serial_gets(UINT8 *pstr)
+{
+ UINT32 length;
+
+ length = 0;
+ while(1) {
+ pstr[length] = serial_getc();
+ if(pstr[length] == '\r') {
+ pstr[length] = 0x00;
+ break;
+ }
+ else if( pstr[length] == '\b' ) {
+ if(length>0) {
+ length --;
+ printf("\b");
+ }
+ }
+ else {
+ serial_putc(pstr[length]);
+ length ++;
+ }
+
+ if(length > 32)
+ return -1;
+ }
+ return length;
+}
+
+UINT32 asc2hex(UINT8 *pstr, UINT8 len)
+{
+ UINT8 i,ch,mylen;
+ UINT32 hexvalue;
+
+ for(mylen=0,i=0; i<8; i++)
+ {
+ if( pstr[i] == 0 )
+ break;
+ mylen ++;
+ }
+ if( len != 0 )
+ {
+ if(mylen>len)
+ mylen = len;
+ }
+ if(mylen>8)
+ mylen = 8;
+
+ hexvalue = 0;
+ for (i = 0; i < mylen; i++)
+ {
+ hexvalue <<= 4;
+ ch = *(pstr+i);
+ if((ch>='0') && (ch<='9'))
+ hexvalue |= ch - '0';
+ else if((ch>='A') && (ch<='F'))
+ hexvalue |= ch - ('A' - 10);
+ else if((ch>='a') && (ch<='f'))
+ hexvalue |= ch - ('a' - 10);
+ else
+ ;
+ }
+ return(hexvalue);
+}
+
+#define DDR_ANALOG_PHY_NUM 65
+static const UINT16 ddr_pll_num[DDR_ANALOG_PHY_NUM] = {
+ 0x0001,
+ 0x100,
+ 0x101,
+ 0x102,
+ 0x103,
+ 0x104,
+ 0x105,
+ 0x106,
+ 0x107,
+ 0x108,
+ 0x109,
+ 0x10A,
+ 0x10B,
+
+ 0x0002,
+ 0x120,
+ 0x121,
+ 0x122,
+ 0x123,
+ 0x124,
+ 0x125,
+ 0x126,
+ 0x127,
+ 0x128,
+ 0x129,
+ 0x12A,
+ 0x12B,
+
+ 0x0004,
+ 0x140,
+ 0x141,
+ 0x142,
+ 0x143,
+ 0x144,
+ 0x145,
+ 0x146,
+ 0x147,
+ 0x148,
+ 0x149,
+ 0x14A,
+ 0x14B,
+
+ 0x0006,
+ 0x160,
+ 0x161,
+ 0x162,
+ 0x163,
+ 0x164,
+ 0x165,
+ 0x166,
+ 0x167,
+ 0x168,
+ 0x169,
+ 0x16A,
+ 0x16B,
+
+ 0x180,
+ 0x181,
+ 0x182,
+ 0x183,
+ 0x184,
+ 0x185,
+ 0x186,
+ 0x187,
+ 0x188,
+ 0x189,
+ 0x18A,
+ 0x18B,
+ 0x18C
+};
+
+void ddr_pll_save_by_id(UINT16 reg_id, UINT16 reg_val)
+{
+ int i = 0;
+ UINT16 * ddr_pll_reg_base = &g_clock_config->DDR_CHAN_1_VALID;
+
+ for (; i < DDR_ANALOG_PHY_NUM; i++)
+ if (reg_id == ddr_pll_num[i])
+ break;
+
+ if (i >= DDR_ANALOG_PHY_NUM)
+ return;
+
+ writew(reg_val, ddr_pll_reg_base + i);
+
+ return;
+}
+
+static int process_cmd(char * cmd)
+{
+ char cmd_element[3][16] = {{0}};
+ char * cmd_temp = cmd;
+ UINT8 i = 0, cmd_element_num = 0, former_space = 1;
+ UINT16 reg = 0, reg_value = 0;
+
+ if (NULL == cmd)
+ return -1;
+
+ while(('\0' != *cmd_temp) && ('\r' != *cmd_temp) && ('\n' != *cmd_temp))
+ {
+ if (' ' == * cmd_temp)
+ {
+ if (0 == former_space)
+ {
+ former_space = 1;
+ cmd_element[cmd_element_num][i] = '\0';
+ cmd_element_num++;
+ if (cmd_element_num > 2)
+ return -1;
+
+ i = 0;
+ }
+ }
+ else
+ {
+ former_space = 0;
+ cmd_element[cmd_element_num][i] = *cmd_temp;
+ i++;
+ if (i > 6)
+ return -1;
+ }
+
+ cmd_temp++;
+ }
+
+ cmd_element[cmd_element_num][i] = '\0';
+
+ if (!strcmp(cmd_element[0], "read"))
+ {
+ if (cmd_element_num == 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1]))
+ return -1;
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = ispi_reg_read(reg);
+ printf("value = 0x%x", reg_value);
+ printf("\nddrPll#");
+ }
+ else if (!strcmp(cmd_element[0], "write"))
+ {
+ if (cmd_element_num != 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1])
+ || ('0' != cmd_element[2][0]) || ('x' != cmd_element[2][1]))
+ return -1;
+
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = (UINT16)asc2hex((UINT8 *)&cmd_element[2][2], 4);
+ ispi_reg_write_and_save(reg, reg_value);
+ ddr_pll_save_by_id(reg, reg_value);
+ }
+ else if (!strcmp(cmd_element[0], "finish"))
+ {
+ return 1;
+ }
+ else if (!strcmp(cmd_element[0], "dump"))
+ {
+ pll_dump_reg();
+ printf("ddrPll#");
+ }
+ else
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+static void cmd_input(void)
+{
+ char cmd[48] = {0};
+ int len = 0;
+
+ ispi_open(0);
+ printf("\nddrPll#");
+ while(1)
+ {
+ len = serial_gets((UINT8 *)cmd);
+ printf("\nddrPll#");
+ if (len > 0)
+ {
+ int result = 0;
+
+ result = process_cmd(cmd);
+ if (-1 == result)
+ printf("command error! \nddrPll#");
+ else if (1 == result)
+ break;
+ else
+ continue;
+ }
+ }
+
+ return;
+}
+
+#endif /* DO_DDR_PLL_DEBUG */
+
+#ifdef DDR_TIMING_101H_VAL_U08
+static void pll_val_reset(u16 meta_id)
+{
+ if (0xC == meta_id){
+ g_clock_config->DDR_TIMING_101H = DDR_TIMING_101H_VAL_U08;
+ g_clock_config->DDR_TIMING_102H = DDR_TIMING_102H_VAL_U08;
+ g_clock_config->DDR_TIMING_103H = DDR_TIMING_103H_VAL_U08;
+ g_clock_config->DDR_TIMING_104H = DDR_TIMING_104H_VAL_U08;
+ g_clock_config->DDR_TIMING_105H = DDR_TIMING_105H_VAL_U08;
+ g_clock_config->DDR_TIMING_106H = DDR_TIMING_106H_VAL_U08;
+
+ g_clock_config->DDR_TIMING_121H = DDR_TIMING_121H_VAL_U08;
+ g_clock_config->DDR_TIMING_122H = DDR_TIMING_122H_VAL_U08;
+ g_clock_config->DDR_TIMING_123H = DDR_TIMING_123H_VAL_U08;
+ g_clock_config->DDR_TIMING_124H = DDR_TIMING_124H_VAL_U08;
+ g_clock_config->DDR_TIMING_125H = DDR_TIMING_125H_VAL_U08;
+ g_clock_config->DDR_TIMING_126H = DDR_TIMING_126H_VAL_U08;
+
+ g_clock_config->DDR_TIMING_141H = DDR_TIMING_141H_VAL_U08;
+ g_clock_config->DDR_TIMING_142H = DDR_TIMING_142H_VAL_U08;
+ g_clock_config->DDR_TIMING_143H = DDR_TIMING_143H_VAL_U08;
+ g_clock_config->DDR_TIMING_144H = DDR_TIMING_144H_VAL_U08;
+ g_clock_config->DDR_TIMING_145H = DDR_TIMING_145H_VAL_U08;
+ g_clock_config->DDR_TIMING_146H = DDR_TIMING_146H_VAL_U08;
+
+ g_clock_config->DDR_TIMING_161H = DDR_TIMING_161H_VAL_U08;
+ g_clock_config->DDR_TIMING_162H = DDR_TIMING_162H_VAL_U08;
+ g_clock_config->DDR_TIMING_163H = DDR_TIMING_163H_VAL_U08;
+ g_clock_config->DDR_TIMING_164H = DDR_TIMING_164H_VAL_U08;
+ g_clock_config->DDR_TIMING_165H = DDR_TIMING_165H_VAL_U08;
+ g_clock_config->DDR_TIMING_166H = DDR_TIMING_166H_VAL_U08;
+
+ g_clock_config->DDR_TIMING_18BH = DDR_TIMING_18BH_VAL_U08;
+ }
+}
+#endif
+
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+static void sys_reset_mem(void)
+{
+ hwp_sysCtrlAp->MEM_Rst_Set = SYS_CTRL_AP_SET_MEM_RST_DMC | SYS_CTRL_AP_SET_MEM_RST_DDRPHY_P;
+ mdelay(1);
+ hwp_sysCtrlAp->MEM_Rst_Clr = SYS_CTRL_AP_CLR_MEM_RST_DMC | SYS_CTRL_AP_CLR_MEM_RST_DDRPHY_P;
+ mdelay(1);
+}
+
+static void pll_setup_init_cal_dynamic(u8 rda2)
+{
+ u16 reg_b = 0;
+
+ reg_b=rda2*0x1000;
+ reg_b |= (g_clock_config->DDR_TIMING_103H & 0xfff);
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ ispi_reg_write_and_save(0x103, reg_b); //default 0x44b0, dqs_prsel_preset<3:0>,dq_prsel_todig<3:0>,dqs_prsel_todig<3:0>,dq_prsel_offset<35:32>
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ ispi_reg_write_and_save(0x123, reg_b); //default 0x44b0, dqs_prsel_preset<3:0>,dq_prsel_todig<3:0>,dqs_prsel_todig<3:0>,dq_prsel_offset<35:32>
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ ispi_reg_write_and_save(0x143, reg_b); //default 0x44b0, dqs_prsel_preset<3:0>,dq_prsel_todig<3:0>,dqs_prsel_todig<3:0>,dq_prsel_offset<35:32>
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ ispi_reg_write_and_save(0x163, reg_b); //default 0x44b0, dqs_prsel_preset<3:0>,dq_prsel_todig<3:0>,dqs_prsel_todig<3:0>,dq_prsel_offset<35:32>
+}
+
+static void pll_save_ddr_cal_dynamic(UINT8 rda2)
+{
+ u16 reg_b = 0;
+
+ reg_b = rda2*0x1000;
+ reg_b |= (g_clock_config->DDR_TIMING_103H & 0xfff);
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ g_clock_config->DDR_TIMING_103H = reg_b;
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ g_clock_config->DDR_TIMING_123H = reg_b;
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ g_clock_config->DDR_TIMING_143H = reg_b;
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ g_clock_config->DDR_TIMING_163H = reg_b;
+}
+
+static void pll_setup_ddr_cal_dynamic(u16 val)
+{
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ g_clock_config->DDR_TIMING_103H = val;
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ g_clock_config->DDR_TIMING_123H = val;
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ g_clock_config->DDR_TIMING_143H = val;
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ g_clock_config->DDR_TIMING_163H = val;
+}
+static int print_rda2_result(UINT8 * rda2, UINT8 rda2_old)
+{
+ int j, first_position = 0, total_num = 0, chioce_rda2 = 0;
+
+ printf("\n\n");
+ printf("rda2 stand for dqs_prsel_preset \n");
+ printf("rda2=0 rda2=1 rda2=2 rda2=3 rda2=4 rda2=5 rda2=6 rda2=7\n");
+ for (j=0;j<8;j=j+1){
+ printf(" %c ",rda2_result[j]);
+ }
+ printf("\nPlease check the result and choose the best one");
+
+ for (j=0;j<8;j=j+1)
+ if (('*' == rda2_result[j]) && ('R' == rda2_result[(j + 1) % 8]))
+ break;
+
+ first_position = (j + 1) % 8;
+
+ for (j=0;j<8;j=j+1)
+ if ('R' == rda2_result[j])
+ total_num += 1;
+
+ chioce_rda2 = first_position + total_num/2 -1;
+
+ if (chioce_rda2 < 0)
+ printf("\nerror!The range of rda2 is 0~~7!Calculated rda2 is minus\n");
+
+ if (0 != (total_num % 2) )
+ chioce_rda2 += 1;
+
+ if (8 == total_num)
+ *rda2 = rda2_old;
+ else
+ *rda2 = ((UINT8)chioce_rda2 % 8);
+ printf("\n final rda2= %d, rda2_old = %d \n", *rda2, rda2_old);
+
+ return total_num;
+}
+
+static void mem_test_cal_write(UINT32 offset, UINT8 rda2)
+{
+ volatile unsigned int *addr, addr_val_write;
+
+ addr = (volatile unsigned int *)(0x83000000);
+ while((unsigned int)addr < offset){
+ if (((unsigned int )addr % 8) == 0)
+ addr_val_write = 0xfefefefe | rda2;
+ else
+ addr_val_write = (unsigned int)addr;
+ *addr = addr_val_write;
+ addr++;
+ }
+}
+
+static int mem_test_cal_read(UINT32 offset, UINT8 rda2)
+{
+ volatile unsigned int *addr, addr_val_read, addr_val_write;
+
+ addr = (volatile unsigned int *)(0x83000000);
+ while((unsigned int)addr < offset){
+ if (((unsigned int )addr % 8) == 0)
+ addr_val_write = 0xfefefefe | rda2;
+ else
+ addr_val_write = (unsigned int)addr;
+ addr_val_read = *addr;
+ if (addr_val_read != addr_val_write){
+ //printf("Read ddr error, write value = %x, read val = %x",(unsigned int)addr, addr_val_read);
+ return -1;
+ }
+ addr++;
+ }
+
+ return 0;
+}
+
+static void mem_test_result(UINT32 offset, UINT8 rda2)
+{
+ rda2_result[rda2]='R';
+
+ mem_test_cal_write(offset, rda2);
+ if (0 != mem_test_cal_read(offset, rda2))
+ rda2_result[rda2]='*';
+}
+
+static int ddr_rda2_cal(UINT32 offset, UINT8 * rda2_choose, UINT8 rda2_old)
+{
+ u8 rda2 = 0;
+
+ for (rda2=0;rda2 < 8;rda2=rda2 + 1){
+ sys_reset_mem();
+ sys_shutdown_pll();
+ ispi_open(0);
+ pll_setup_init();
+ pll_setup_init_cal_dynamic(rda2);
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ mem_test_result(offset, rda2);
+ }
+
+ return print_rda2_result(rda2_choose, rda2_old);
+}
+
+/**
+SRAM MAP
+-- 0x100000
+| +CONFIG_TRAP_SIZE(0xC0)
+--
+| +CONFIG_UIMAGEHDR_SIZE(0x40)
+-- spl_text_start_addr
+| +TEXT DATA
+-- ddr_cal_val_start_addr
+| +CONFIG_DDR_CAL_VAL_SIZE
+--
+| + BSS STATCK
+--
+| +SPL BOARD INFO SIZE(0x200)
+-- 0x110000
+**/
+static void ddr_auto_cal_val_save(void)
+{
+ spl_bd_t * spl_board_info = (spl_bd_t *)CONFIG_SPL_BOARD_INFO_ADDR;
+
+ spl_board_info->spl_ddr_cal_info.ddr_auto_cal_flag = CONIFG_DDR_CAL_VAL_FLAG;
+ spl_board_info->spl_ddr_cal_info.ddr_auto_cal_offs = (u8 *)(ddr_cal_val_start_addr)
+ - (u8 *)(spl_text_start_addr) + CONFIG_UIMAGEHDR_SIZE;
+ spl_board_info->spl_ddr_cal_info.ddr_auto_cal_val[0] = g_clock_config->DDR_TIMING_103H;
+}
+
+static void ddr_auto_cal_choose(void)
+{
+ UINT8 rda2 = 0;
+ UINT8 rda2_old = 0;
+ int rda2_r_total_num = 0;
+ int i = 0;
+
+ g_debug_ddr3 = 0;
+ rda2_old = (g_clock_config->DDR_TIMING_103H & 0xf000) >> 12;
+
+ for (i = 0; i < 3; i++){
+ int off = i << 18;
+
+ if (2 == i)
+ off = i << 20;
+ rda2_r_total_num = ddr_rda2_cal(0x83040000 + off, &rda2, rda2_old);
+ if (8 != rda2_r_total_num)
+ break;
+ }
+
+ sys_reset_mem();
+ sys_shutdown_pll();
+ ispi_open(0);
+ pll_setup_init();
+ pll_save_ddr_cal_dynamic(rda2);
+ pll_setup_init_cal_dynamic(rda2);
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+
+ g_debug_ddr3 = 1;
+}
+#endif
+
+int clock_init(void)
+{
+#ifdef DO_DDR_PLL_DEBUG
+ char choice = 'n';
+#endif
+
+#ifdef DDR_TIMING_101H_VAL_U08
+ u16 metal_id = rda_metal_id_get();
+#endif
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+ u16 ddr_auto_cal_val;
+ spl_text_start_addr = (u16 *)&__start;
+ ddr_cal_val_start_addr = (u16 *)&__ddrcal_start;
+
+ u16 ddr_auto_cal_flag = *ddr_cal_val_start_addr;
+ ddr_auto_cal_val = *(ddr_cal_val_start_addr + 1);
+#endif
+
+ /* First check current usb usage */
+ check_usb_usage();
+
+ printf("Init Clock ...\n");
+ g_clock_config = get_default_clock_config();
+
+ printf("Clock config ver: %d.%d\n",
+ g_clock_config->VERSION_MAJOR, g_clock_config->VERSION_MINOR);
+
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+ if (CONIFG_DDR_CAL_VAL_FLAG == ddr_auto_cal_flag)
+ pll_setup_ddr_cal_dynamic(ddr_auto_cal_val);
+#endif
+ pmu_setup_init();
+
+#ifdef DO_DDR_PLL_DEBUG
+ printf("If you want to config the ddr para manully ?(y = yes, n = no) \n");
+ choice = serial_getc();
+ if (choice == 'y')
+ {
+ memcpy(&clock_debug_config, g_clock_config,
+ sizeof(clock_debug_config));
+ g_clock_config = &clock_debug_config;
+ pmu_setup_calibration_voltage(1);
+ pmu_buck4_buck3_choose();
+ freq_choose();
+ data_bits_choose();
+ clock_load_ddr_cal_config();
+ }
+#endif
+
+ sys_shutdown_pll();
+ ispi_open(0);
+
+ reg_cache_start();
+
+#ifdef DDR_TIMING_101H_VAL_U08
+ printf("Metal id = %x\n", (int)metal_id);
+
+ if (0xA == metal_id){
+ printf("Default val will be used.");
+ }
+ else if (0xC == metal_id){
+ pll_val_reset(metal_id);
+ }
+ else{
+ printf("Sorry, metal id is not fit\n");
+ }
+#endif
+
+ pll_setup_init();
+#ifdef DO_DDR_PLL_DEBUG
+ if (choice == 'y')
+ cmd_input();
+#endif
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+
+ if (g_clock_config->DDR_CAL) {
+ printf("Init DDR for ddr_cal\n");
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+ pll_setup_mem_cal();
+ clock_save_config();
+ } else {
+ pll_setup_mem();
+ }
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+ if (CONIFG_DDR_CAL_VAL_FLAG != ddr_auto_cal_flag){
+ ddr_auto_cal_choose();
+ }
+#endif
+ sys_dump_pll_freq();
+ sys_dump_clk();
+ pll_dump_reg();
+
+ printf("Init DDR, flag = 0x%04x, para = 0x%08lx\n",
+ g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+ ddr_auto_cal_val_save();
+#endif
+ reg_cache_end();
+
+ printf("Done\n");
+
+ return 0;
+}
+
+#else /* CONFIG_RDA_FPGA */
+int clock_init(void)
+{
+ u16 ddr_flags = DDR_FLAGS_DLLOFF
+ | DDR_FLAGS_ODT(1)
+ | DDR_FLAGS_RON(0);
+ //16bit
+ u32 ddr_para = DDR_PARA_MEM_BITS(1)
+ | DDR_PARA_BANK_BITS(3)
+ | DDR_PARA_ROW_BITS(3)
+ | DDR_PARA_COL_BITS(2);
+
+ printf("Init DDR\n");
+ ddr_init(ddr_flags, ddr_para);
+ printf("Done\n");
+
+#ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+ return 0;
+}
+
+#endif /* CONFIG_RDA_FPGA */
+
diff --git a/board/rda/rda8810/clock_config.c b/board/rda/rda8810/clock_config.c
new file mode 100644
index 0000000000..5c635eaf04
--- /dev/null
+++ b/board/rda/rda8810/clock_config.c
@@ -0,0 +1,145 @@
+#ifndef TARGET_TOOL
+#include <common.h>
+#include <asm/arch/factory.h>
+#include "clock_config.h"
+#endif
+
+#include "ddr3.h"
+#include <rda/tgt_ap_clock_config.h>
+
+#ifndef DDR_TIMING_100H_VAL
+#define DDR_TIMING_100H_VAL 0
+#endif
+#ifndef DDR_TIMING_120H_VAL
+#define DDR_TIMING_120H_VAL 0
+#endif
+#ifndef DDR_TIMING_140H_VAL
+#define DDR_TIMING_140H_VAL 0
+#endif
+#ifndef DDR_TIMING_18CH_VAL
+#define DDR_TIMING_18CH_VAL 0
+#endif
+
+static struct clock_config clock_default_config = {
+ /* Header */
+ 0, // MAGIC;
+ CLOCK_VER_MAJOR, // VERSION_MAJOR;
+ CLOCK_VER_MINOR, // VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ _TGT_AP_PLL_CPU_FREQ, // PLL_FREQ_CPU; /* 05, 06 */
+ _TGT_AP_PLL_BUS_FREQ, // PLL_FREQ_BUS; /* 25, 26 */
+ _TGT_AP_PLL_MEM_FREQ, // PLL_FREQ_MEM; /* 65, 66 */
+ _TGT_AP_PLL_USB_FREQ, // PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Cal */
+ 0, // DDR_CAL;
+ /* DDR_FLAGS */
+ DDR_FLAGS_ODT(_TGT_AP_DDR_ODT) // 010 -- 120 Ohm
+#if (_TGT_AP_DDR_CLOCK < 200)
+ | DDR_FLAGS_DLLOFF
+#endif
+#ifdef _TGT_AP_DDR_LOWPWR
+ | DDR_FLAGS_LOWPWR
+#endif
+ | DDR_FLAGS_RON(_TGT_AP_DDR_RON), // 00 -- 40 Ohm
+ /* DDR_PARA */
+ DDR_PARA_CHIP_BITS(_TGT_AP_DDR_CHIP_BITS)
+ | DDR_PARA_MEM_BITS(_TGT_AP_DDR_MEM_BITS)
+ | DDR_PARA_BANK_BITS(_TGT_AP_DDR_BANK_BITS)
+ | DDR_PARA_ROW_BITS(_TGT_AP_DDR_ROW_BITS )
+ | DDR_PARA_COL_BITS(_TGT_AP_DDR_COL_BITS),
+
+ /* AP sysctrl */
+ _TGT_AP_CLK_CPU, // CLK_CPU;
+ _TGT_AP_CLK_AXI, // CLK_AXI;
+ _TGT_AP_CLK_GCG, // CLK_GCG;
+ _TGT_AP_CLK_AHB1, // CLK_AHB1;
+ _TGT_AP_CLK_APB1, // CLK_APB1;
+ _TGT_AP_CLK_APB2, // CLK_APB2;
+ _TGT_AP_CLK_MEM, // CLK_MEM;
+ _TGT_AP_CLK_GPU, // CLK_GPU;
+ _TGT_AP_CLK_VPU, // CLK_VPU;
+ _TGT_AP_CLK_VOC, // CLK_VOC;
+ _TGT_AP_CLK_SFLSH, // CLK_SFLSH;
+ 0, // RESERVE;
+
+ /* DDR timings, defined in target */
+ DDR_CHAN_1_VALID_VAL, // DDR_CHAN_1_VALID;
+ DDR_TIMING_100H_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_101H_VAL, // DDR_TIMING_101H;
+ DDR_TIMING_102H_VAL, // DDR_TIMING_102H;
+ DDR_TIMING_103H_VAL, // DDR_TIMING_103H;
+ DDR_TIMING_104H_VAL, // DDR_TIMING_104H;
+ DDR_TIMING_105H_VAL, // DDR_TIMING_105H;
+ DDR_TIMING_106H_VAL, // DDR_TIMING_106H;
+ DDR_TIMING_107H_VAL, // DDR_TIMING_107H;
+ DDR_TIMING_108H_VAL, // DDR_TIMING_108H;
+ DDR_TIMING_109H_VAL, // DDR_TIMING_109H;
+ DDR_TIMING_10AH_VAL, // DDR_TIMING_10AH;
+ DDR_TIMING_10BH_VAL, // DDR_TIMING_10BH;
+
+ DDR_CHAN_2_VALID_VAL, // DDR_CHAN_2_VALID;
+ DDR_TIMING_120H_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_121H_VAL, // DDR_TIMING_121H;
+ DDR_TIMING_122H_VAL, // DDR_TIMING_122H;
+ DDR_TIMING_123H_VAL, // DDR_TIMING_123H;
+ DDR_TIMING_124H_VAL, // DDR_TIMING_124H;
+ DDR_TIMING_125H_VAL, // DDR_TIMING_125H;
+ DDR_TIMING_126H_VAL, // DDR_TIMING_126H;
+ DDR_TIMING_127H_VAL, // DDR_TIMING_127H;
+ DDR_TIMING_128H_VAL, // DDR_TIMING_128H;
+ DDR_TIMING_129H_VAL, // DDR_TIMING_129H;
+ DDR_TIMING_12AH_VAL, // DDR_TIMING_12AH;
+ DDR_TIMING_12BH_VAL, // DDR_TIMING_12BH;
+
+ DDR_CHAN_3_VALID_VAL, // DDR_CHAN_3_VALID;
+ DDR_TIMING_140H_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_141H_VAL, // DDR_TIMING_141H;
+ DDR_TIMING_142H_VAL, // DDR_TIMING_142H;
+ DDR_TIMING_143H_VAL, // DDR_TIMING_143H;
+ DDR_TIMING_144H_VAL, // DDR_TIMING_144H;
+ DDR_TIMING_145H_VAL, // DDR_TIMING_145H;
+ DDR_TIMING_146H_VAL, // DDR_TIMING_146H;
+ DDR_TIMING_147H_VAL, // DDR_TIMING_147H;
+ DDR_TIMING_148H_VAL, // DDR_TIMING_148H;
+ DDR_TIMING_149H_VAL, // DDR_TIMING_149H;
+ DDR_TIMING_14AH_VAL, // DDR_TIMING_14AH;
+ DDR_TIMING_14BH_VAL, // DDR_TIMING_14BH;
+
+ DDR_CHAN_4_VALID_VAL, // DDR_CHAN_4_VALID;
+ DDR_TIMING_160H_VAL, // DDR_TIMING_160H;
+ DDR_TIMING_161H_VAL, // DDR_TIMING_161H;
+ DDR_TIMING_162H_VAL, // DDR_TIMING_162H;
+ DDR_TIMING_163H_VAL, // DDR_TIMING_163H;
+ DDR_TIMING_164H_VAL, // DDR_TIMING_164H;
+ DDR_TIMING_165H_VAL, // DDR_TIMING_165H;
+ DDR_TIMING_166H_VAL, // DDR_TIMING_166H;
+ DDR_TIMING_167H_VAL, // DDR_TIMING_167H;
+ DDR_TIMING_168H_VAL, // DDR_TIMING_168H;
+ DDR_TIMING_169H_VAL, // DDR_TIMING_169H;
+ DDR_TIMING_16AH_VAL, // DDR_TIMING_16AH;
+ DDR_TIMING_16BH_VAL, // DDR_TIMING_16BH;
+
+ DDR_TIMING_180H_VAL, // DDR_TIMING_180H;
+ DDR_TIMING_181H_VAL, // DDR_TIMING_181H;
+ DDR_TIMING_182H_VAL, // DDR_TIMING_182H;
+ DDR_TIMING_183H_VAL, // DDR_TIMING_183H;
+ DDR_TIMING_184H_VAL, // DDR_TIMING_184H;
+ DDR_TIMING_185H_VAL, // DDR_TIMING_185H;
+ DDR_TIMING_186H_VAL, // DDR_TIMING_186H;
+ DDR_TIMING_187H_VAL, // DDR_TIMING_187H;
+ DDR_TIMING_188H_VAL, // DDR_TIMING_188H;
+ DDR_TIMING_189H_VAL, // DDR_TIMING_189H;
+ DDR_TIMING_18AH_VAL, // DDR_TIMING_18AH;
+ DDR_TIMING_18BH_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_18CH_VAL, // DDR_TIMING_18CH;
+};
+
+struct clock_config *get_default_clock_config(void)
+{
+#ifndef TARGET_TOOL
+ BUILD_BUG_ON(sizeof(struct clock_config) > AP_FACTORY_CLOCK_CFG_LEN);
+#endif
+
+ return &clock_default_config;
+}
+
diff --git a/board/rda/rda8810/clock_config.h b/board/rda/rda8810/clock_config.h
new file mode 100644
index 0000000000..0c83efa678
--- /dev/null
+++ b/board/rda/rda8810/clock_config.h
@@ -0,0 +1,115 @@
+#ifndef __CLOCK_CONFIG_H__
+#define __CLOCK_CONFIG_H__
+
+typedef unsigned long UINT32;
+typedef unsigned short UINT16;
+typedef long INT32;
+typedef short INT16;
+typedef unsigned char UINT8;
+typedef char INT8;
+
+#define CLOCK_VER_MAJOR 1
+#define CLOCK_VER_MINOR 0
+
+struct clock_config {
+ /* Header */
+ UINT32 MAGIC;
+ UINT16 VERSION_MAJOR;
+ UINT16 VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ UINT32 PLL_FREQ_CPU; /* 05, 06 */
+ UINT32 PLL_FREQ_BUS; /* 25, 26 */
+ UINT32 PLL_FREQ_MEM; /* 65, 66 */
+ UINT32 PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Flags */
+ UINT16 DDR_CAL;
+ UINT16 DDR_FLAGS;
+ UINT32 DDR_PARA;
+ /* AP sysctrl */
+ UINT16 CLK_CPU;
+ UINT16 CLK_AXI;
+ UINT16 CLK_GCG;
+ UINT16 CLK_AHB1;
+ UINT16 CLK_APB1;
+ UINT16 CLK_APB2;
+ UINT16 CLK_MEM;
+ UINT16 CLK_GPU;
+ UINT16 CLK_VPU;
+ UINT16 CLK_VOC;
+ UINT16 CLK_SFLSH;
+ UINT16 RESERVE;
+ /* DDR timings */
+ UINT16 DDR_CHAN_1_VALID;
+ UINT16 DDR_TIMING_100H;
+ UINT16 DDR_TIMING_101H;
+ UINT16 DDR_TIMING_102H;
+ UINT16 DDR_TIMING_103H;
+ UINT16 DDR_TIMING_104H;
+ UINT16 DDR_TIMING_105H;
+ UINT16 DDR_TIMING_106H;
+ UINT16 DDR_TIMING_107H;
+ UINT16 DDR_TIMING_108H;
+ UINT16 DDR_TIMING_109H;
+ UINT16 DDR_TIMING_10AH;
+ UINT16 DDR_TIMING_10BH;
+
+ UINT16 DDR_CHAN_2_VALID;
+ UINT16 DDR_TIMING_120H;
+ UINT16 DDR_TIMING_121H;
+ UINT16 DDR_TIMING_122H;
+ UINT16 DDR_TIMING_123H;
+ UINT16 DDR_TIMING_124H;
+ UINT16 DDR_TIMING_125H;
+ UINT16 DDR_TIMING_126H;
+ UINT16 DDR_TIMING_127H;
+ UINT16 DDR_TIMING_128H;
+ UINT16 DDR_TIMING_129H;
+ UINT16 DDR_TIMING_12AH;
+ UINT16 DDR_TIMING_12BH;
+
+ UINT16 DDR_CHAN_3_VALID;
+ UINT16 DDR_TIMING_140H;
+ UINT16 DDR_TIMING_141H;
+ UINT16 DDR_TIMING_142H;
+ UINT16 DDR_TIMING_143H;
+ UINT16 DDR_TIMING_144H;
+ UINT16 DDR_TIMING_145H;
+ UINT16 DDR_TIMING_146H;
+ UINT16 DDR_TIMING_147H;
+ UINT16 DDR_TIMING_148H;
+ UINT16 DDR_TIMING_149H;
+ UINT16 DDR_TIMING_14AH;
+ UINT16 DDR_TIMING_14BH;
+
+ UINT16 DDR_CHAN_4_VALID;
+ UINT16 DDR_TIMING_160H;
+ UINT16 DDR_TIMING_161H;
+ UINT16 DDR_TIMING_162H;
+ UINT16 DDR_TIMING_163H;
+ UINT16 DDR_TIMING_164H;
+ UINT16 DDR_TIMING_165H;
+ UINT16 DDR_TIMING_166H;
+ UINT16 DDR_TIMING_167H;
+ UINT16 DDR_TIMING_168H;
+ UINT16 DDR_TIMING_169H;
+ UINT16 DDR_TIMING_16AH;
+ UINT16 DDR_TIMING_16BH;
+
+ UINT16 DDR_TIMING_180H;
+ UINT16 DDR_TIMING_181H;
+ UINT16 DDR_TIMING_182H;
+ UINT16 DDR_TIMING_183H;
+ UINT16 DDR_TIMING_184H;
+ UINT16 DDR_TIMING_185H;
+ UINT16 DDR_TIMING_186H;
+ UINT16 DDR_TIMING_187H;
+ UINT16 DDR_TIMING_188H;
+ UINT16 DDR_TIMING_189H;
+ UINT16 DDR_TIMING_18AH;
+ UINT16 DDR_TIMING_18BH;
+ UINT16 DDR_TIMING_18CH;
+};
+
+struct clock_config *get_default_clock_config(void);
+
+#endif
diff --git a/board/rda/rda8810/config.mk b/board/rda/rda8810/config.mk
new file mode 100644
index 0000000000..5c279539fd
--- /dev/null
+++ b/board/rda/rda8810/config.mk
@@ -0,0 +1,13 @@
+#
+#the spl code should not exceed the SPL_MAX_SIZE,and if
+#the spl don't up to the max size, paddint the last with
+#zero(or 0xff?)
+
+#48kbytes, 48*1024
+#SPL_APPENDING_TO := 48
+#SPL_MAX_SIZE := 49512
+
+# space for spl(48KiB) & mtd partition table(24KiB)
+SPL_APPENDING_TO := 72
+
+CONFIG_SPL_SIGNATURE_CHECK_IMAGE := y
diff --git a/board/rda/rda8810/ddr3.c b/board/rda/rda8810/ddr3.c
new file mode 100644
index 0000000000..bb7ef9a5b2
--- /dev/null
+++ b/board/rda/rda8810/ddr3.c
@@ -0,0 +1,524 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include <rda/tgt_ap_clock_config.h>
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+#define USE_ADDR 129
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+#define debug_ddr3(fmt, args...) \
+ do { \
+ if (g_debug_ddr3) \
+ printf(fmt, ##args); \
+ } while (0)
+UINT8 g_debug_ddr3 = 1;
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0x1f/*0xb*/, 0x1f/*0xb*/},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x1f001f/*0x4000b*/, 0x1f001f/*0x4000b*/},
+ {T_WTR, 0x1f001f/*0x4000b*/, 0x1f001f/*0x4000b*/},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x8/*0x6*/, 0x8/*0x6*/},
+ {WR_LATENCY, 0x4/*0x3*/, 0x4/*0x3*/},
+ {T_RDDATA_EN, 0x8/*0x3*/, 0x8/*0x3*/},
+ {T_PHYWRLAT, 0x104/*0x101*/, 0x104/*0x101*/},
+ {T_PHYWRLAT, 0x104/*0x103*/, 0x104/*0x103*/},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x3f},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x5},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x5},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0e, 0x0c},// turn for now
+// {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x1},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_PHYWRLAT, 0x103, 0x104},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 __attribute__((unused)) dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ debug_ddr3("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + USE_ADDR * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_ENABLE_LAT *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL *4)) = 0x5;
+ *((volatile UINT32*)(PHY_REG_BASE + RDELAY_SEL *4)) = 0x6;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT *4)) = 0x0;
+
+ debug_ddr3("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ if (!dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + RDELAY_SEL * 4)) = 2;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = (3<<2);
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = (3<<2);
+ debug_ddr3("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 __attribute__((unused)) dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ debug_ddr3("unsupported DDR width: %lx\n", mem_width);
+ *addr = val;
+
+ debug_ddr3("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ debug_ddr3("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+
+ *addr = val;
+
+ debug_ddr3("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ debug_ddr3("unsupported stripe decode: %lx\n", tmp);
+ *addr = val;
+
+ debug_ddr3("decode ctrl value: %lx\n", val);
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ //val = 0x10000402;//0ld 0x10000102
+ val = 0x10000602;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000403;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config ECC control
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x4f;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //debug_ddr3("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2105110C) = 0x00000060;
+ *(volatile UINT32*)(0x21051110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ debug_ddr3("8bit ");
+ break;
+ case 1:
+ debug_ddr3("16bit ");
+ break;
+ case 2:
+ debug_ddr3("32bit ");
+ break;
+ }
+ if (dll_off)
+ debug_ddr3("dll-off Mode ...\n");
+ else
+ debug_ddr3("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ debug_ddr3("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8810/ddr3.h b/board/rda/rda8810/ddr3.h
new file mode 100644
index 0000000000..7481954144
--- /dev/null
+++ b/board/rda/rda8810/ddr3.h
@@ -0,0 +1,50 @@
+#ifndef _SYS_DDR3_H_
+#define _SYS_DDR3_H_
+
+#include "clock_config.h"
+
+/*
+ * defination of ddr flags
+ */
+/* [Debug] DLL off mode, 0 is dll on mode */
+#define DDR_FLAGS_DLLOFF 0x8000
+/* [Debug] LowSpeed mode*/
+#define DDR_FLAGS_RESERVE 0x4000
+/* DDR LowPower mode */
+#define DDR_FLAGS_LOWPWR 0x2000
+/* ODT: 000--Null 001--60 010--120 011--40 100--20 101--30 */
+#define DDR_FLAGS_ODT(n) (((n)<<0)&0x0007)
+#define DDR_FLAGS_ODT_SHIFT 0
+#define DDR_FLAGS_ODT_MASK 0x0007
+/* RON: 00--40 01--30 */
+#define DDR_FLAGS_RON(n) (((n)<<3)&0x0018)
+#define DDR_FLAGS_RON_SHIFT 3
+#define DDR_FLAGS_RON_MASK 0x0018
+
+/*
+ * defination of ddr parameters
+ */
+#define DDR_PARA_CHIP_BITS(n) (((n)<<0)&0x00000003)
+#define DDR_PARA_CHIP_BITS_SHIFT 0
+#define DDR_PARA_CHIP_BITS_MASK 0x00000003
+/* memory width 0--8bit 1--16bit 2--32bit */
+#define DDR_PARA_MEM_BITS(n) (((n)<<2)&0x0000000c)
+#define DDR_PARA_MEM_BITS_SHIFT 2
+#define DDR_PARA_MEM_BITS_MASK 0x0000000c
+/* 2--4banks 3--8banks */
+#define DDR_PARA_BANK_BITS(n) (((n)<<4)&0x000000f0)
+#define DDR_PARA_BANK_BITS_SHIFT 4
+#define DDR_PARA_BANK_BITS_MASK 0x000000f0
+/* 2--13rbs 3--14rbs 4--15rbs 5--16rbs */
+#define DDR_PARA_ROW_BITS(n) (((n)<<8)&0x00000f00)
+#define DDR_PARA_ROW_BITS_SHIFT 8
+#define DDR_PARA_ROW_BITS_MASK 0x00000f00
+/* 0--8cbs 1--9cbs 2--10cbs 3--11cbs 4--12cbs */
+#define DDR_PARA_COL_BITS(n) (((n)<<12)&0x0000f000)
+#define DDR_PARA_COL_BITS_SHIFT 12
+#define DDR_PARA_COL_BITS_MASK 0x0000f000
+
+int ddr_init(UINT16 flags, UINT32 para);
+
+#endif /* _SYS_DDR3_H_ */
+
diff --git a/board/rda/rda8810/ddr3_init.h b/board/rda/rda8810/ddr3_init.h
new file mode 100644
index 0000000000..402375d269
--- /dev/null
+++ b/board/rda/rda8810/ddr3_init.h
@@ -0,0 +1,101 @@
+#ifndef _SYS_RAM_INIT_H_
+#define _SYS_RAM_INIT_H_
+
+#define MEMC_STATUS 0x000
+#define MEMC_CONFIG 0x004
+#define MEMC_CMD 0x008
+#define ADDR_CTRL 0x010
+#define DECODE_CTRL 0x014
+#define FORMAT_CTRL 0x018
+#define LOWPWR_CTRL 0x020
+#define TURNAROUND_PRIO 0x030
+#define HIT_PRIO 0x034
+//QOS0~QOS15:038~078
+#define QOSX_CTRL 0x038
+#define QOSX_CTRL7 0x058
+#define QOSX_CTRL15 0x078
+#define TIMEOUT_CTRL 0x07C
+#define QUEUE_CTRL 0x080
+#define WR_PRIO_CTRL 0x088
+#define WR_PRIO_CTRL2 0x08C
+#define RD_PRIO_CTRL 0x090
+#define RD_PRIO_CTRL2 0x094
+#define ACCESS_ADDR_MATCH 0x098
+#define ACCESS_ADDR_MATCH_63_32 0x09C
+#define ACCESS_ADDR_MASK 0x0A0
+#define ACCESS_ADDR_MASK_63_32 0x0A4
+
+#define CHANNEL_STATUS 0x100
+#define DIRECT_CMD 0x108
+#define MR_DATA 0x110
+#define REFRESH_CTRL 0x120
+#define INTR_CTRL 0x128
+#define INTR_CLR 0x130
+#define INTR_STATUS 0x138
+#define INTR_INFO 0x140
+#define ECC_CTRL 0x148
+
+#define T_REFI 0x200
+#define T_RFC 0x204
+#define T_MRR 0x208
+#define T_MRW 0x20C
+#define T_RCD 0x218
+#define T_RAS 0x21C
+#define T_RP 0x220
+#define T_RPALL 0x224
+#define T_RRD 0x228
+#define T_FAW 0x22C
+#define RD_LATENCY 0x230
+#define T_RTR 0x234
+#define T_RTW 0x238
+#define T_RTP 0x23C
+#define WR_LATENCY 0x240
+#define T_WR 0x244
+#define T_WTR 0x248
+#define T_WTW 0x24C
+#define T_ECKD 0x250
+#define T_XCKD 0x254
+#define T_EP 0x258
+#define T_XP 0x25C
+#define T_ESR 0x260
+#define T_XSR 0x264
+#define T_SRCKD 0x268
+#define T_CKSRD 0x26C
+
+#define T_RDDATA_EN 0x300
+#define T_PHYWRLAT 0x304
+#define RDLVL_CTRL 0x308
+#define RDLVL_DIRECT 0x310
+#define T_RDLVL_EN 0x318
+#define T_RDLVL_RR 0x31C
+#define WRLVL_CTRL 0x328
+#define WRLVL_DIRECT 0x330
+#define T_WRLVL_EN 0x338
+#define T_WRLVL_WW 0x33C
+
+#define PHY_PWR_CTRL 0x348
+#define PHY_UPD_CTRL 0x350
+
+#define USER_STATUS 0x400
+#define USER_CONFIG0 0x404
+#define USER_CONFIG1 0x408
+
+#define INTEG_CFG 0xE00
+#define INTEG_OUTPUTS 0xE08
+
+#define PERIPH_ID_0 0xFE0
+#define PERIPH_ID_1 0xFE4
+#define PERIPH_ID_2 0xFE8
+#define PERIPH_ID_3 0xFEC
+#define COMPONENT_ID_0 0xFF0
+#define COMPONENT_ID_1 0xFF4
+#define COMPONENT_ID_2 0xFF8
+#define COMPONENT_ID_3 0xFFC
+
+typedef struct {
+ UINT32 reg_offset;
+ UINT32 dll_on_val;
+ UINT32 dll_off_val;
+} dmc_reg_t;
+
+#endif /* _SYS_RAM_INIT_H_ */
diff --git a/board/rda/rda8810/debug.h b/board/rda/rda8810/debug.h
new file mode 100644
index 0000000000..1d4f03bedb
--- /dev/null
+++ b/board/rda/rda8810/debug.h
@@ -0,0 +1,9 @@
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+void print_u8(u8 ch);
+void print_u16(u16 data);
+void print_u32(u32 data);
+void dump_buf(u8 *buf, u32 size);
+
+#endif /* _DEBUG_H_ */
diff --git a/board/rda/rda8810/hal_config.c b/board/rda/rda8810/hal_config.c
new file mode 100644
index 0000000000..294fbdf856
--- /dev/null
+++ b/board/rda/rda8810/hal_config.c
@@ -0,0 +1,1180 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2013, RDA Microeletronics. //
+// All Rights Reserved //
+// //
+// This source code is the property of RDA Microeletronics and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA Microeletronics. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/8810/src/hal_config.c $ //
+// $Author: huazeng $ //
+// $Date: 2013-08-31 17:48:58 +0800 (Sat, 31 Aug 2013) $ //
+// $Revision: 21005 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_config.c
+/// Implementation of HAL initialization related with the particular instance
+/// of the IP.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+/* uboot */
+#include <common.h>
+
+/* common */
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/chip_id.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_gpio.h>
+
+/* device */
+#include "hal_sys.h"
+#include "halp_sys.h"
+#include "halp_gpio.h"
+#include "bootp_mode.h"
+#include "hal_config.h"
+#include "hal_ap_gpio.h"
+#include "hal_ap_config.h"
+#include <asm/arch/reg_cfg_regs.h>
+
+/* target */
+#include <rda/tgt_board_cfg.h>
+#include <rda/tgt_ap_gpio_setting.h>
+#define HAL_ASSERT(cond, fmt, ...) \
+ if(!(cond)) { \
+ hal_assert(fmt, ##__VA_ARGS__); \
+ g_halConfigError = TRUE; \
+ }
+
+//// =============================================================================
+//// GLOBAL VARIABLES
+//// =============================================================================
+PRIVATE CONST UINT8 g_halCfgSimOrder[] = { TGT_SIM_ORDER };
+PRIVATE HAL_CFG_CONFIG_T hal_cfg = TGT_HAL_CONFIG;
+PRIVATE UINT32 g_bootBootMode = 0;
+PRIVATE BOOL g_halConfigError = FALSE;
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+// HAL_ASSERT
+PRIVATE VOID hal_assert(const char *fmt, ...)
+{
+ va_list args;
+ puts("\n#-------Board Mux config found error-------#\n");
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ putc('\n');
+ puts("--------------------------------------------\n\n");
+ va_end(args);
+}
+
+// =============================================================================
+// hal_BoardSimUsed
+// -----------------------------------------------------------------------------
+/// Check whether a SIM card interface is used.
+// ============================================================================
+PRIVATE BOOL hal_BoardSimUsed(UINT32 simId)
+{
+ UINT32 i;
+ for (i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ {
+ if (g_halCfgSimOrder[i] == simId)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+#if 0
+// =============================================================================
+// hal_BoardConfigClk32k
+// -----------------------------------------------------------------------------
+/// Configure CLK_32K output.
+/// @param enable TRUE to configure, and FALSE to disable.
+// ============================================================================
+PROTECTED VOID hal_BoardConfigClk32k(BOOL enable)
+{
+ HAL_ASSERT(g_halCfg->useClk32k == TRUE, "32K clock is not configured");
+
+ if (enable)
+ {
+ // Setup the pin as 32K clock output
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_CLK_32K;
+ }
+ else
+ {
+ // Setup the pin as GPO (and low ouput has been
+ // configured in hal_BoardSetup())
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_GPO_2;
+ }
+}
+#endif
+
+// =============================================================================
+// hal_BoardSetupGeneral
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL for general purpose
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+PROTECTED VOID hal_BoardSetupGeneral(CONST HAL_CFG_CONFIG_T* halCfg)
+{
+ UINT32 altMux = 0;
+
+ UINT32 availableGpo_A = 0;
+
+ UINT32 availableGpio_C = 0;
+ UINT32 availableGpio_A = 0;
+ UINT32 availableGpio_B = 0;
+ UINT32 availableGpio_D = 0;
+
+ UINT32 bootModeGpio_C = 0;
+ UINT32 bootModeGpio_A = 0;
+ UINT32 bootModeGpio_B = 0;
+ UINT32 bootModeGpio_D = 0;
+
+ UINT32 noConnectMask_C = 0;
+ UINT32 noConnectMask_A = 0;
+ UINT32 noConnectMask_B = 0;
+ UINT32 noConnectMask_D = 0;
+
+ UINT32 gpoClr_A = 0;
+
+#ifdef FPGA
+
+ // no muxing, do nothing
+
+#else // !FPGA
+
+ // GPIOs as boot mode pins
+ bootModeGpio_C = HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ bootModeGpio_A = HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7);
+ bootModeGpio_B = HAL_GPIO_BIT(0);
+ bootModeGpio_D = 0;
+
+ // Available GPIOs
+ availableGpio_C |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ // Volume down/up keys
+ availableGpio_D |= HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6);
+
+ // Boot modes
+ BOOL spiFlashCam = FALSE;
+ BOOL spiFlashNand = FALSE;
+ if (g_bootBootMode & BOOT_MODE_BOOT_SPI)
+ {
+ if (g_bootBootMode & BOOT_MODE_SPI_PIN_NAND)
+ {
+ HAL_ASSERT((g_bootBootMode & BOOT_MODE_BOOT_EMMC),
+ "Emmc boot pin should be pulled up to boot on SPI flash over NAND pins");
+ spiFlashNand = TRUE;
+ }
+ else
+ {
+ spiFlashCam = TRUE;
+ }
+ }
+
+ UINT32 metalId = rda_metal_id_get();
+ UINT32 emmcBootModeMask;
+ if (metalId < 0x0B)
+ {
+ emmcBootModeMask = BOOT_MODE_BOOT_EMMC
+ | BOOT_MODE_BOOT_SPI
+ | BOOT_MODE_BOOT_SPI_NAND;
+ }
+ else
+ {
+ emmcBootModeMask = BOOT_MODE_BOOT_EMMC
+ | BOOT_MODE_BOOT_SPI;
+ }
+ if ((g_bootBootMode & emmcBootModeMask) == BOOT_MODE_BOOT_EMMC)
+ {
+ // Boot from EMMC
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 (EMMC) should be used");
+ }
+
+ if (metalId < 0x0B)
+ {
+ if ( (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_SPI_NAND ||
+ (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L))
+ == (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L)
+ )
+ {
+ // Boot from SDMMC1
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmcUsed, "SDMMC1 should be used");
+ }
+ }
+
+ // For convenience, we do not consider spiFlashCam at present.
+ // We assume that SPI flash always uses parallel nand pins.
+#if 0
+ BOOL parallelNandUsed = halCfg->parallelNandUsed;
+#else
+ BOOL parallelNandUsed = !spiFlashNand && !halCfg->sdmmcCfg.sdmmc3Used;
+#endif
+ BOOL nand8_15Cam = FALSE;
+ BOOL nand8_15Lcd = FALSE;
+ if ((g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_EMMC)) == 0)
+ {
+ HAL_ASSERT(parallelNandUsed, "Parallel NAND should be used");
+ }
+ if (parallelNandUsed)
+ {
+ HAL_ASSERT(!spiFlashNand, "SPI flash uses parallel NAND pins");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used,
+ "SDMMC3 (EMMC) uses parallel NAND pins");
+ if ((g_bootBootMode & BOOT_MODE_NAND_8BIT) == 0)
+ {
+ if (g_bootBootMode & BOOT_MODE_NAND_HIGH_PIN_CAM)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses NAND 8-15 bits on cam pins");
+ nand8_15Cam = TRUE;
+ }
+ else
+ {
+ nand8_15Lcd = TRUE;
+ }
+ }
+ }
+
+ if (!(parallelNandUsed || spiFlashNand))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }
+
+ CONST HAL_CFG_CAM_T *camCfg = &halCfg->camCfg;
+ CONST HAL_LCD_MODE_T lcdMode = halCfg->goudaCfg.lcdMode;
+
+ // LCD
+ if (lcdMode == HAL_LCD_MODE_PARALLEL_16BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ altMux |= CFG_REGS_LCD_MODE_PARALLEL_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_DSI)
+ {
+ altMux |= CFG_REGS_LCD_MODE_DSI;
+ availableGpio_A |= HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23);
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_16BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ if (lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ if (halCfg->goudaCfg.lcd16_23Cam)
+ {
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_PARALLEL &&
+ (camCfg->camUsed || camCfg->cam1Used)),
+ "Parallel camera uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam),
+ "I2C2 uses LCD 22-23 bits");
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses LCD 16-21 bits");
+ HAL_ASSERT(!nand8_15Cam, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_CSI &&
+ ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))),
+ "Camera CSI1 uses LCD 16-21 bits");
+ altMux |= CFG_REGS_LCD24_CAM_CAM_IO;
+ }
+ else
+ {
+ HAL_ASSERT(!parallelNandUsed, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 uses LCD 16-23 bits");
+ altMux |= CFG_REGS_LCD24_CAM_NAND_IO;
+ }
+ }
+ altMux |= CFG_REGS_LCD_MODE_RGB_24BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_SPI)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use SPI LCD pins");
+ HAL_ASSERT((halCfg->usedGpo_A & (HAL_GPO_BIT(3)|HAL_GPO_BIT(4))) == 0,
+ "GPO 3/4 use SPI LCD pins");
+ altMux |= CFG_REGS_SPI_LCD_SPI_LCD;
+ availableGpio_A |= HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21);
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Lcd mode not defined!");
+ }
+
+ if (lcdMode == HAL_LCD_MODE_DSI || lcdMode == HAL_LCD_MODE_SPI)
+ {
+ if (!nand8_15Lcd)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(24)
+ | HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+ }
+
+ if (halCfg->goudaCfg.cs0Used)
+ {
+ altMux |= CFG_REGS_GPO_4_LCD_CS_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_4_GPO_4;
+ availableGpo_A |= HAL_GPO_BIT(4);
+ }
+
+ if (halCfg->goudaCfg.cs1Used)
+ {
+ altMux |= CFG_REGS_GPO_3_LCD_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_3_GPO_3;
+ availableGpo_A |= HAL_GPO_BIT(3);
+ }
+
+ // I2C
+ if (!halCfg->i2cCfg.i2cUsed)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+
+ if (halCfg->i2cCfg.i2c2Used)
+ {
+ if (halCfg->i2cCfg.i2c2PinsCam)
+ {
+ if (camCfg->camUsed)
+ {
+ HAL_ASSERT(camCfg->camPdnRemap == GPIO_NONE &&
+ camCfg->camRstRemap == GPIO_NONE,
+ "Cam uses PDN/RST pins");
+ }
+ if (camCfg->cam1Used)
+ {
+ HAL_ASSERT(camCfg->cam1PdnRemap == GPIO_NONE &&
+ camCfg->cam1RstRemap == GPIO_NONE,
+ "Cam1 uses PDN/RST pins");
+ }
+ HAL_ASSERT(!nand8_15Cam, "NAND uses cam PDN/RST pins");
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ altMux |= CFG_REGS_CAM_I2C2_I2C2;
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ }
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+
+ if (halCfg->i2cCfg.i2c3Used)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x18) == 0, "Keyout 3/4 use I2C3 pins");
+ altMux |= CFG_REGS_KEYOUT_3_4_I2C3;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYOUT_3_4_KEYOUT_3_4;
+ if ((halCfg->keyOutMask & 0x8) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(6);
+ }
+ if ((halCfg->keyOutMask & 0x10) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // Camera
+ if (camCfg->camUsed || camCfg->cam1Used)
+ {
+ if(camCfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses cam pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use cam pins");
+ altMux |= CFG_REGS_CSI2_PARALLEL_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(24);
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux |= CFG_REGS_CSI2_SPI_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(14);
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses CSI1 pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use CSI1 pins");
+ }
+ else
+ {
+ // CSI1 is unused
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ altMux |= CFG_REGS_CSI2_CSI2;
+ // If CSI2 is unused
+ if (!((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_2) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Invalid cam mode: %d", camCfg->camMode);
+ }
+
+ // Cam PDN/RST pins
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ if (!((camCfg->camUsed && camCfg->camRstRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10);
+ }
+ if (!((camCfg->camUsed && camCfg->camPdnRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1PdnRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(11);
+ }
+ }
+ }
+ else // cam is unused
+ {
+ availableGpio_B |= HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11);
+ }
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+
+ // UART 1 Pin configuration
+ switch (halCfg->uartCfg[0])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ availableGpio_C |= HAL_GPIO_BIT(6);
+ availableGpio_A |= HAL_GPIO_BIT(14);
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART1 TXD, RXD
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART1 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ // use UART1 TXD, RXD, CTS, RTS, RI, DSR, DCD, DTR
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ HAL_ASSERT(!halCfg->hostUartUsed, "Host UART uses UART1 DCD/DTR");
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART 2 must be unused to use UART1 Modem lines.");
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART1 DSR");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART1 RI");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS
+ | CFG_REGS_UART1_8LINE_UART1_8_LINE;
+ break;
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart 1 Configuration (%d).",
+ halCfg->uartCfg[0]);
+ break;
+ }
+
+ // Host UART
+ if (halCfg->hostUartUsed)
+ {
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART2 uses host UART RXD/TXD.");
+ }
+
+ // UART 2 Pin configuration
+ switch (halCfg->uartCfg[1])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_UART2_HOST_UART
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if (halCfg->uartCfg[0] != HAL_UART_CONFIG_MODEM)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART2 TXD, RXD
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART2 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART2 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART2 RTS");
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_UART2_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart2 Configuration (%d).",
+ halCfg->uartCfg[1]);
+ break;
+ }
+
+ // UART 3 Pin configuration
+ switch (halCfg->uartCfg[2])
+ {
+ case HAL_UART_CONFIG_NONE:
+ availableGpio_D |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART3 TXD, RXD
+ availableGpio_D |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART3 TXD, RXD, CTS, RTS
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart3 Configuration (%d).",
+ halCfg->uartCfg[2]);
+ break;
+ }
+
+ // I2S
+ altMux |= CFG_REGS_DAI_I2S;
+ if (halCfg->i2sCfg.di0Used || halCfg->i2sCfg.di1Used ||
+ halCfg->i2sCfg.di2Used || halCfg->i2sCfg.doUsed)
+ {
+ if (!halCfg->i2sCfg.di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(11);
+ }
+ if (!halCfg->i2sCfg.di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(12);
+ }
+ if (halCfg->i2sCfg.di2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x4) == 0, "Keyin 2 uses I2S DI2");
+ altMux |= CFG_REGS_I2S_DI_2_I2S_DI_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_I2S_DI_2_KEYIN_2;
+ if ((halCfg->keyInMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(2);
+ }
+ }
+ if (!halCfg->i2sCfg.doUsed)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(13);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13);
+ }
+
+ // LPS CO1
+ if (halCfg->useLpsCo1)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x10) == 0, "Keyin 4 uses LPS_CO1");
+ altMux |= CFG_REGS_LPSCO_1_LPSCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_LPSCO_1_KEYIN_4;
+ if ((halCfg->keyInMask & 0x10) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // TCO
+ if (halCfg->usedTco & 0x1)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x1) == 0, "Keyout 0 uses TCO0");
+ altMux |= CFG_REGS_TCO_0_TCO_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_0_KEYOUT_0;
+ if ((halCfg->keyOutMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(3);
+ }
+ }
+
+ if (halCfg->usedTco & 0x2)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x2) == 0, "Keyout 1 uses TCO1");
+ altMux |= CFG_REGS_TCO_1_TCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_1_KEYOUT_1;
+ if ((halCfg->keyOutMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(4);
+ }
+ }
+
+ if (halCfg->usedTco & 0x4)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x4) == 0, "Keyout 2 uses TCO2");
+ altMux |= CFG_REGS_TCO_2_TCO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_2_KEYOUT_2;
+ if ((halCfg->keyOutMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(5);
+ }
+ }
+
+ // PWM
+ if (halCfg->pwmCfg.pwtUsed)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x20) == 0, "Keyin 5 uses PWT");
+ altMux |= CFG_REGS_GPO_0_PWT;
+ }
+ else if (halCfg->keyInMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_0_KEYIN_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_0_GPO_0;
+ availableGpo_A |= HAL_GPO_BIT(0);
+ }
+
+ if (halCfg->pwmCfg.lpgUsed)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x20) == 0, "Keyout 5 uses LPG");
+ altMux |= CFG_REGS_GPO_1_LPG;
+ }
+ else if (halCfg->keyOutMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_1_KEYOUT_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_1_GPO_1;
+ availableGpo_A |= HAL_GPO_BIT(1);
+ }
+
+ if (halCfg->pwmCfg.pwl1Used)
+ {
+ HAL_ASSERT(!halCfg->useClk32k, "Clk 32k uses PWL1");
+ altMux |= CFG_REGS_GPO_2_PWL_1;
+ }
+ else if (halCfg->useClk32k)
+ {
+ // Default to GPO low output
+ // 32K clock will be enabled per request
+ //altMux |= CFG_REGS_GPO_2_CLK_32K;
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ availableGpo_A |= HAL_GPO_BIT(2);
+ }
+
+ // Clock out and host clock
+ if (halCfg->clkOutUsed)
+ {
+ HAL_ASSERT(!halCfg->hostClkUsed, "HST_CLK uses CLK_OUT pin");
+ altMux |= CFG_REGS_CLK_OUT_CLK_OUT;
+ }
+ else if (halCfg->hostClkUsed)
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ }
+ else
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ availableGpo_A |= HAL_GPO_BIT(8);
+ }
+
+ // SPI
+ if (halCfg->spiCfg[0].cs0Used || halCfg->spiCfg[0].cs1Used ||
+ halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT(!(halCfg->modemSpiCfg[0].cs0Used ||
+ halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used), "Modem SPI1 is in use");
+ altMux |= CFG_REGS_AP_SPI1_AP_SPI1;
+ if (!halCfg->spiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->spiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x2) == 0, "Keyin 1 uses SPI1 CS2");
+ altMux |= CFG_REGS_SPI1_CS_2_SPI1_CS_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_SPI1_CS_2_KEYIN_1;
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ if (!halCfg->spiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->spiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else // AP SPI1 unused
+ {
+ altMux |= CFG_REGS_AP_SPI1_BB_SPI1;
+ if (halCfg->modemSpiCfg[0].cs0Used || halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used)
+ {
+ if (!halCfg->modemSpiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->modemSpiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (!halCfg->modemSpiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->modemSpiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ availableGpio_C |= HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ }
+ if (halCfg->spiCfg[1].cs0Used || halCfg->spiCfg[1].cs1Used)
+ {
+ if (!halCfg->spiCfg[1].cs0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(5);
+ }
+ if (halCfg->spiCfg[1].cs1Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x8) == 0, "Keyin 3 uses SPI2 CS1");
+ altMux |= CFG_REGS_KEYIN_3_SPI2_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYIN_3_KEYIN_3;
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+ if (!halCfg->spiCfg[1].di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(3);
+ }
+ if (!halCfg->spiCfg[1].di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(4);
+ }
+ }
+ else // AP SPI2 unused
+ {
+ availableGpio_A |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+
+ // Standalone keyin/out
+ if ((halCfg->keyInMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(0);
+ }
+
+ // SDMMC
+ if (!halCfg->sdmmcCfg.sdmmcUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->sdmmcCfg.sdmmc2Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20);
+ }
+ HAL_ASSERT(!(parallelNandUsed && halCfg->sdmmcCfg.sdmmc3Used),
+ "Parallel NAND uses SDMMC3 pins");
+
+ // SIM
+ if (1)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27);
+ }
+
+ if (!hal_BoardSimUsed(3))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30);
+ }
+
+ UINT32 gpioMask;
+ // GPIO_C mask check
+ gpioMask = ~availableGpio_C & halCfg->usedGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO C are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_C &
+ (~halCfg->usedGpio_C & ~halCfg->noConnectGpio_C);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO C declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_A mask check
+ gpioMask = ~availableGpio_A & halCfg->usedGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO A are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_A &
+ (~halCfg->usedGpio_A & ~halCfg->noConnectGpio_A);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO A declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_B mask check
+ gpioMask = ~availableGpio_B & halCfg->usedGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO B are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_B &
+ (~halCfg->usedGpio_B & ~halCfg->noConnectGpio_B);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO B declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_D mask check
+ gpioMask = ~availableGpio_D & halCfg->usedGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO D are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_D &
+ (~halCfg->usedGpio_D & ~halCfg->noConnectGpio_D);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO D declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPO_A mask check
+ gpioMask = ~availableGpo_A & halCfg->usedGpo_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPO A are not available (0x%x)",
+ gpioMask);
+
+#endif // !FPGA
+
+ // Set IO drive
+ hwp_configRegs->IO_Drive1_Select = halCfg->ioDrive.select1;
+ hwp_configRegs->IO_Drive2_Select = halCfg->ioDrive.select2;
+
+ // Set the not connected ones as output and drive 0
+ // But keep boot mode GPIOs as input to avoid current leakage
+ noConnectMask_C = halCfg->noConnectGpio_C & ~bootModeGpio_C;
+ noConnectMask_A = halCfg->noConnectGpio_A & ~bootModeGpio_A;
+ noConnectMask_B = halCfg->noConnectGpio_B & ~bootModeGpio_B;
+ noConnectMask_D = halCfg->noConnectGpio_D & ~bootModeGpio_D;
+
+ hwp_gpio->gpio_clr = noConnectMask_C;
+ hwp_gpio->gpio_oen_set_out = noConnectMask_C;
+
+ hwp_apGpioA->gpio_clr = noConnectMask_A;
+ hwp_apGpioA->gpio_oen_set_out = noConnectMask_A;
+
+ hwp_apGpioB->gpio_clr = noConnectMask_B;
+ hwp_apGpioB->gpio_oen_set_out = noConnectMask_B;
+
+ hwp_apGpioD->gpio_clr = noConnectMask_D;
+ hwp_apGpioD->gpio_oen_set_out = noConnectMask_D;
+
+ // Init GPO_A values
+ gpoClr_A = availableGpo_A;
+ if (halCfg->useClk32k)
+ {
+ // Init 32K clock pin to low (by setting up GPO)
+ gpoClr_A |= HAL_GPO_BIT(2);
+ }
+#ifdef _TGT_AP_GPIO_USBID_CTRL
+ // if GPO_1 used for usb id, it should be high
+ gpoClr_A &= ~(HAL_GPO_BIT(1));
+#endif
+ hwp_apGpioA->gpo_clr = gpoClr_A;
+
+ // Configure MUX after initializing all the GPO pins
+ // (GPIO pins are in input mode by default)
+
+ // Set GPIO mode
+ hwp_configRegs->BB_GPIO_Mode = availableGpio_C;
+ hwp_configRegs->AP_GPIO_A_Mode = availableGpio_A;
+ hwp_configRegs->AP_GPIO_B_Mode = availableGpio_B;
+ hwp_configRegs->AP_GPIO_D_Mode = availableGpio_D;
+ // Set Alt Mux configuration
+ hwp_configRegs->Alt_mux_select = altMux;
+
+ // --------------------------------------------------
+ // As of now, all connected GPIOs, which are as GPIO
+ // or not used at all but connected are configured as
+ // GPIOs in input mode, except for Gouda reset pins
+ // --------------------------------------------------
+
+}
+
+
+// =============================================================================
+// hal_BoardSetup
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+//PROTECTED VOID hal_BoardSetup(CONST HAL_CFG_CONFIG_T* halCfg)
+PUBLIC INT32 hal_BoardSetup(INT8 run_mode)
+{
+ g_bootBootMode = rda_hwcfg_get();
+ hal_BoardSetupGeneral(&hal_cfg);
+
+ if(g_halConfigError)
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
diff --git a/board/rda/rda8810/u-boot-spl.lds b/board/rda/rda8810/u-boot-spl.lds
new file mode 100644
index 0000000000..2528012e2a
--- /dev/null
+++ b/board/rda/rda8810/u-boot-spl.lds
@@ -0,0 +1,44 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00100100;
+ . = ALIGN(4);
+ .text :
+ {
+ __start = .;
+ arch/arm/cpu/armv7/start.o (.text)
+ *(.text)
+ }
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+ . = ALIGN(4);
+ . = .;
+ . = ALIGN(4);
+ __image_copy_end = .;
+ _end = .;
+ . = __start + CONFIG_DDR_CAL_SEC_OFFS;
+ . = ALIGN(4);
+ .ddrcal : {
+ __ddrcal_start = .;
+ . = __ddrcal_start + CONFIG_DDR_CAL_VAL_SIZE;
+ __ddrcal_end = .;
+ }
+ . = .;
+ . = ALIGN(4);
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start = .;
+ *(.bss*)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ ASSERT((ABSOLUTE(__bss_end__) < 0x00110000 - CONFIG_SPL_BOARD_INFO_SIZE), \
+ "too big data in spl, don't exceed intrenal ram");
+ }
+}
diff --git a/board/rda/rda8810e/Makefile b/board/rda/rda8810e/Makefile
new file mode 100644
index 0000000000..073f60c53f
--- /dev/null
+++ b/board/rda/rda8810e/Makefile
@@ -0,0 +1,82 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += clock_config.o clock.o ddr3.o
+else
+COBJS-$(CONFIG_MACH_RDA8810E) += hal_config.o
+endif
+
+RDA_TARGET_DEF_FILE := $(ANDROID_BUILD_TOP)/$(RDA_TARGET_DEVICE_DIR)/target.def
+RDA_GET_MAKEFILE_VAR_FUNC = $(strip $(shell sed -n 's/^[ ]*$(1)[ ]*[?:]\?=\([^\#]\+\)\#*.*$$/\1/p' $(2)))
+
+NUMBER_OF_SIM := $(call RDA_GET_MAKEFILE_VAR_FUNC,NUMBER_OF_SIM,$(RDA_TARGET_DEF_FILE))
+ifeq ($(NUMBER_OF_SIM),)
+$(error Failed to get NUMBER_OF_SIM in $(RDA_TARGET_DEF_FILE))
+endif
+
+USER_SIM_ORDER := $(call RDA_GET_MAKEFILE_VAR_FUNC,USER_SIM_ORDER,$(RDA_TARGET_DEF_FILE))
+ifeq ($(USER_SIM_ORDER),)
+$(error Failed to get USER_SIM_ORDER in $(RDA_TARGET_DEF_FILE))
+endif
+
+NULL_STRING :=
+SPACE := ${NULL_STRING} # end of the line
+COMMA := ,
+TGT_SIM_ORDER := $(foreach SIM,$(USER_SIM_ORDER),$(SIM)$(COMMA))
+TGT_SIM_ORDER := $(subst ${SPACE},,${TGT_SIM_ORDER})
+
+CPPFLAGS_board/$(BOARDDIR)/hal_config.o += -I$(TOPDIR)/board/$(VENDOR)/common/include -DTGT_SIM_ORDER=$(TGT_SIM_ORDER) -DNUMBER_OF_SIM=$(NUMBER_OF_SIM)
+
+ifeq ($(strip $(TARGET_TABLET_MODE)),true)
+CPPFLAGS_board/$(BOARDDIR)/clock.o += -DTARGET_TABLET_MODE
+endif
+
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/rda8810e/clock.c b/board/rda/rda8810e/clock.c
new file mode 100644
index 0000000000..30a063b3b5
--- /dev/null
+++ b/board/rda/rda8810e/clock.c
@@ -0,0 +1,1338 @@
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/ispi.h>
+#include <asm/arch/rda_sys.h>
+#include "clock_config.h"
+#include "debug.h"
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#if (PMU_VBUCK1_VAL < 0 || PMU_VBUCK1_VAL > 15)
+#error "Invalid PMU_VBUCK1_VAL"
+#endif
+#if (PMU_VBUCK3_VAL < 0 || PMU_VBUCK3_VAL > 15)
+#error "Invalid PMU_VBUCK3_VAL"
+#endif
+#ifdef PMU_VBUCK4_VAL
+#if (PMU_VBUCK4_VAL < 0 || PMU_VBUCK4_VAL > 15)
+#error "Invalid PMU_VBUCK4_VAL"
+#endif
+#endif
+
+//#define DO_SIMPLE_DDR_TEST
+//#define DO_DDR_PLL_DEBUG
+
+enum {
+ AP_CPU_CLK_IDX = 0,
+ AP_BUS_CLK_IDX,
+ AP_MEM_CLK_IDX,
+ AP_USB_CLK_IDX,
+};
+
+static int pll_enabled(int idx)
+{
+ if ((hwp_sysCtrlAp->Cfg_Pll_Ctrl[idx] &
+ (SYS_CTRL_AP_AP_PLL_ENABLE_MASK |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK)) ==
+ (SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET))
+ return 1;
+ else
+ return 0;
+}
+
+static int usb_in_use = 0;
+
+static void check_usb_usage(void)
+{
+ unsigned int mask = SYS_CTRL_AP_BUS_SEL_FAST_SLOW |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_MASK |
+ SYS_CTRL_AP_PLL_LOCKED_USB_MASK;
+ unsigned int reg = SYS_CTRL_AP_BUS_SEL_FAST_FAST |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED |
+ SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED;
+
+ if ((hwp_sysCtrlAp->Sel_Clock & mask) == reg &&
+ pll_enabled(AP_BUS_CLK_IDX) &&
+ pll_enabled(AP_USB_CLK_IDX))
+ usb_in_use = 1;
+ else
+ usb_in_use = 0;
+}
+
+#ifdef DO_SIMPLE_DDR_TEST
+
+void mem_test_write(void)
+{
+ volatile unsigned int *addr;
+
+ printf("write ddr test!!!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+ while((unsigned int)addr < 0x81000000)
+ {
+ *addr = (unsigned int )addr;
+ addr++;
+ }
+}
+
+void mem_test_read(void)
+{
+ volatile unsigned int *addr;
+
+ printf("read ddr!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+
+ while((unsigned int)addr < 0x81000000)
+ {
+ if (*addr != (unsigned int)addr){
+ int i = 0;
+
+ printf("test error!!!!!, addr = %x\n", (unsigned int)addr);
+ for (i = 0; i < 80;i++){
+ printf("%x ", *(addr + i));
+ if ((i % 4) == 0)
+ printf("\n");
+ }
+
+ return;
+ }
+
+ addr++;
+ }
+ printf("test complete!\n");
+}
+
+#endif /* DO_SIMPLE_DDR_TEST */
+
+#ifndef CONFIG_RDA_FPGA
+
+// PMU bit fields
+#define PMU_SET_BITFIELD(dword, bitfield, value) \
+ (((dword) & ~(bitfield ## _MASK)) | (bitfield(value)))
+
+#define RDA_PMU_VBUCK1_BIT_ACT(n) (((n)&0xf)<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_SHIFT (12)
+
+#define RDA_PMU_VBUCK4_BIT_ACT_SHIFT (4)
+#define RDA_PMU_VBUCK4_BIT_ACT_MASK (0xf<<4)
+#define RDA_PMU_VBUCK4_BIT_ACT(n) (((n)&0xf)<<4)
+
+#define RDA_PMU_VBUCK3_BIT_ACT_SHIFT (12)
+#define RDA_PMU_VBUCK3_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK3_BIT_ACT(n) (((n)&0xf)<<12)
+
+struct pll_freq {
+ UINT32 freq_mhz;
+ UINT16 major;
+ UINT16 minor;
+ UINT16 with_div;
+ UINT16 div;
+};
+
+typedef enum {
+ PLL_REG_CPU_BASE = 0x00,
+ PLL_REG_BUS_BASE = 0x20,
+ PLL_REG_MEM_BASE = 0x60,
+ PLL_REG_USB_BASE = 0x80,
+} PLL_REG_BASE_INDEX_t;
+
+typedef enum {
+ PLL_REG_OFFSET_01H = 1,
+ PLL_REG_OFFSET_02H = 2,
+ PLL_REG_OFFSET_DIV = 3,
+ PLL_REG_OFFSET_04H = 4,
+ PLL_REG_OFFSET_MAJOR = 5,
+ PLL_REG_OFFSET_MINOR = 6,
+ PLL_REG_OFFSET_07H = 7,
+} PLL_REG_OFFSET_INDEX_t;
+
+#define PLL_FREQ_TABLE_COUNT 23
+
+static struct pll_freq pll_freq_table[PLL_FREQ_TABLE_COUNT] = {
+ /* MHz Major Minor div */
+ {1600, 0x7B13, 0xB138, 0, 0x0000},
+ {1200, 0x5C4E, 0xC4EC, 0, 0x0000},
+ {1000, 0x4BEC, 0x4EC4, 0, 0x0000},
+ { 988, 0x4000, 0x0000, 0, 0x0000},
+ { 800, 0x3C00, 0x0000, 0, 0x0000},
+ { 600, 0x2E27, 0x6274, 0, 0x0000},
+ { 533, 0x2900, 0x0000, 1, 0xc797},
+ { 519, 0x27EC, 0x4EC4, 1, 0xc797},
+ { 500, 0x2676, 0x2762, 1, 0xc797},
+ { 480, 0x24EC, 0x4EC4, 0, 0x0000},
+ { 455, 0x2300, 0x0000, 1, 0xC297},
+ { 416, 0x1FD8, 0x0000, 1, 0xCB97},
+ /* 800M div 1, PLL:800M DDR:400M for mem pll only */
+ { 400, 0x1F00, 0x0000, 1, 0xCA97},
+ { 355, 0x369D, 0x89D8, 1, 0xD597},
+ /* 702M div 1, PLL:702M DDR:351M for mem pll only */
+ { 351, 0x3600, 0x0000, 1, 0xD297},
+ { 333, 0x333B, 0x13B1, 1, 0xD097},
+ /* 624M div 1, PLL:624M DDR:312M for mem pll only */
+ { 312, 0x3000, 0x0000, 1, 0xD897},
+ { 290, 0x2C9D, 0x89D8, 1, 0xE097},
+ /* 520M div 1, PLL:520M DDR:260M for mem pll only */
+ { 260, 0x2800, 0x0000, 1, 0xE897},
+ /* 800M div 2, PLL:400M DDR:200M for mem pll only */
+ { 200, 0x3D89, 0xD89C, 1, 0x0006},
+ /* DDR:156M for mem pll only */
+ { 156, 0x3000, 0x0000, 1, 0x0006},
+ /* 800M div 4, PLL:200M DDR:100M for mem pll only */
+ { 100, 0x3D89, 0xD89C, 1, 0x0005},
+ /* 800M div 8, PLL:100M DDR:50M for mem pll only */
+ { 50, 0x3D89, 0xD89C, 1, 0x0004},
+};
+
+static const struct clock_config *g_clock_config;
+
+#ifdef DO_DDR_PLL_DEBUG
+static struct clock_config clock_debug_config;
+static UINT32 ddrfreq = 400, ddr32bit = 0;
+#endif
+
+static void sys_shutdown_pll(void)
+{
+ int i;
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ if (usb_in_use) {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ } else {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_SLOW
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ }
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET;
+ }
+}
+
+static void sys_setup_pll(void)
+{
+ int i;
+ UINT32 mask;
+ UINT32 locked;
+ int cnt = 10; //10us, according to IC, the pll must be locked
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+
+ if (AP_MEM_CLK_IDX == i)
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(1)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ else
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ }
+
+ mask = SYS_CTRL_AP_PLL_LOCKED_CPU_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_MASK
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_MASK
+ ;
+ locked = SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED
+ ;
+
+ while (((hwp_sysCtrlAp->Sel_Clock & mask) != locked) && cnt) {
+ udelay(1);
+ cnt--;
+ }
+ if (cnt == 0) {
+ printf("WARNING, cannot lock cpu/bus/mem pll 0x%08x ",
+ hwp_sysCtrlAp->Sel_Clock);
+ printf("but we run anyway ...\n");
+ }
+
+ for (i = 0; i < 3; i++) {
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] |=
+ SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE;
+ }
+
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_FAST
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+}
+
+static void sys_setup_clk(void)
+{
+ // Disable some power-consuming clocks
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_APO_Enable = SYS_CTRL_AP_ENABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Enable = SYS_CTRL_AP_ENABLE_MEM_VPU;
+#else
+ hwp_sysCtrlAp->Clk_APO_Disable = SYS_CTRL_AP_DISABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Disable = SYS_CTRL_AP_DISABLE_MEM_VPU;
+#endif
+
+ // Init clock gating mode
+ hwp_sysCtrlAp->Clk_CPU_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL | SYS_CTRL_AP_MODE_APB0_CONF_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL;
+#endif
+ hwp_sysCtrlAp->Clk_AXIDIV2_Mode = 0;
+ hwp_sysCtrlAp->Clk_GCG_Mode = SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL
+ | SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL;
+ hwp_sysCtrlAp->Clk_AHB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB2_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_MEM_Mode = SYS_CTRL_AP_MODE_CLK_MEM_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_MEM_Mode = 0;
+#endif
+ //hwp_sysCtrlAp->Clk_APO_Mode = SYS_CTRL_AP_MODE_APOC_VPU_MANUAL;
+
+ // Init module frequency
+ hwp_sysCtrlAp->Cfg_Clk_AP_CPU = g_clock_config->CLK_CPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_AXI = g_clock_config->CLK_AXI;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GCG = g_clock_config->CLK_GCG;
+
+ if (!usb_in_use) {
+ hwp_sysCtrlAp->Cfg_Clk_AP_AHB1 = g_clock_config->CLK_AHB1;
+ }
+
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB1 = g_clock_config->CLK_APB1;
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB2 = g_clock_config->CLK_APB2;
+ hwp_sysCtrlAp->Cfg_Clk_AP_MEM = g_clock_config->CLK_MEM;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GPU = g_clock_config->CLK_GPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VPU = g_clock_config->CLK_VPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VOC = g_clock_config->CLK_VOC;
+ hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH = g_clock_config->CLK_SFLSH;
+}
+
+static void print_sys_reg(char *name, UINT32 value)
+{
+ printf("clk %s = %lx\n", name, value);
+}
+
+static void sys_dump_clk(void)
+{
+ print_sys_reg("CPU", hwp_sysCtrlAp->Cfg_Clk_AP_CPU);
+ print_sys_reg("AXI", hwp_sysCtrlAp->Cfg_Clk_AP_AXI);
+ print_sys_reg("GCG", hwp_sysCtrlAp->Cfg_Clk_AP_GCG);
+ print_sys_reg("AHB1", hwp_sysCtrlAp->Cfg_Clk_AP_AHB1);
+ print_sys_reg("APB1", hwp_sysCtrlAp->Cfg_Clk_AP_APB1);
+ print_sys_reg("APB2", hwp_sysCtrlAp->Cfg_Clk_AP_APB2);
+ print_sys_reg("MEM", hwp_sysCtrlAp->Cfg_Clk_AP_MEM);
+ print_sys_reg("GPU", hwp_sysCtrlAp->Cfg_Clk_AP_GPU);
+ print_sys_reg("VPU", hwp_sysCtrlAp->Cfg_Clk_AP_VPU);
+ print_sys_reg("VOC", hwp_sysCtrlAp->Cfg_Clk_AP_VOC);
+ print_sys_reg("SFLSH", hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH);
+}
+
+static int pll_freq_set(UINT32 reg_base, UINT32 freq_mhz)
+{
+ int i;
+ struct pll_freq *freq;
+ unsigned int major, minor;
+ unsigned short value_02h;
+
+ /* find pll_freq */
+ for (i = 0; i < PLL_FREQ_TABLE_COUNT; i++) {
+ if (pll_freq_table[i].freq_mhz == freq_mhz)
+ break;
+ }
+ if (i >= PLL_FREQ_TABLE_COUNT) {
+ printf("pll_freq_set, fail to find freq\n");
+ return -1;
+ }
+
+ freq = &pll_freq_table[i];
+
+ if (freq_mhz >= 800 || reg_base == PLL_REG_USB_BASE) {
+ value_02h = 0x0309;
+ // Div PLL freq by 2
+ minor = ((freq->major & 0xFFFF) << 14) |
+ ((freq->minor >> 2) & 0x3FFF);
+ minor >>= 1;
+ // Recalculate the divider
+ major = (minor >> 14) & 0xFFFF;
+ minor = (minor << 2) & 0xFFFF;
+ } else {
+ value_02h = 0x0209;
+ major = freq->major;
+ minor = freq->minor;
+ }
+ if (reg_base == PLL_REG_USB_BASE)
+ value_02h ^= (1 << 8);
+
+ if ((freq_mhz >= 400) && (PLL_REG_MEM_BASE == reg_base)){
+ value_02h = 0x308;
+ }
+
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_02H, value_02h);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MAJOR, major);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MINOR, minor);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0010);
+
+ if (reg_base == PLL_REG_MEM_BASE) {
+ ispi_reg_write(0x63, freq->div&0x7FFF);
+ udelay(10000);
+ ispi_reg_write(0x63, freq->div);
+ }
+
+ udelay(10000);
+ return 0;
+}
+
+static void pll_setup_freq(void)
+{
+ pll_freq_set(PLL_REG_CPU_BASE, g_clock_config->PLL_FREQ_CPU);
+ // Always configure BUS PLL, even when it is being used
+ pll_freq_set(PLL_REG_BUS_BASE, g_clock_config->PLL_FREQ_BUS);
+ pll_freq_set(PLL_REG_MEM_BASE, g_clock_config->PLL_FREQ_MEM);
+ //pll_freq_set(PLL_REG_USB_BASE, g_clock_config->PLL_FREQ_USB);
+}
+
+static void print_pll_freq(char *name, UINT32 value)
+{
+ printf("pll freq %s = %d\n", name, (int)value);
+}
+
+static void sys_dump_pll_freq(void)
+{
+ print_pll_freq("CPU", g_clock_config->PLL_FREQ_CPU);
+ print_pll_freq("BUS", g_clock_config->PLL_FREQ_BUS);
+ print_pll_freq("MEM", g_clock_config->PLL_FREQ_MEM);
+ //print_pll_freq("USB", g_clock_config->PLL_FREQ_USB);
+}
+
+static void pmu_get_efuse_dcdc(int buckVoltLow[])
+{
+ static const u8 setBitCnt[8] = { 0, 1, 1, 2, 1, 2, 2, 3, };
+ u16 dcdc;
+ int i;
+
+ ispi_reg_write(0x51, 0x02ed);
+ udelay(2000);
+ ispi_reg_write(0x51, 0x02fd);
+ dcdc = ispi_reg_read(0x52);
+ ispi_reg_write(0x51, 0x0200);
+
+ for (i = 0; i < 4; i++) {
+ buckVoltLow[i] = (setBitCnt[dcdc & 0x7] > 1);
+ dcdc >>= 3;
+ }
+}
+
+static void pmu_setup_init(void)
+{
+ u32 value;
+ int buck_volt_low[4] = { 0, };
+
+ rda_nand_iodrive_set();
+
+#ifdef CONFIG_RDA_PDL
+ enable_charger(0);
+#endif
+
+ ispi_open(1);
+
+ // Disable vibrator
+ ispi_reg_write(0x03, 0x9FFF);
+ // Enable bandgap chopper mode
+ ispi_reg_write(0x0F, 0x1E90);
+ // Enable high AC throttling
+ ispi_reg_write(0x12, 0x1218);
+#ifdef TARGET_TABLET_MODE
+ // Charger current (cc = 6, pre = 7)
+ ispi_reg_write(0x13, 0x1B70);
+#else
+ // Charger current (cc = 2, pre = 7)
+ ispi_reg_write(0x13, 0x1970);
+#endif
+ // Vcore DCDC freq
+ ispi_reg_write(0x2D, 0x96BA);
+ ispi_reg_write(0x2E, 0x12AA);
+ // Get efuse dcdc
+ pmu_get_efuse_dcdc(buck_volt_low);
+ // Vcore voltage
+ value = 0x9244;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK1_BIT_ACT,
+ PMU_VBUCK1_VAL +
+ ((PMU_VBUCK1_VAL < 15 && buck_volt_low[0]) ? 1 : 0));
+ ispi_reg_write(0x2F, value);
+ // DDR PWM mode
+ ispi_reg_write(0x0D, 0x92D0);
+ // DDR voltage
+ value = 0xAAB5;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK3_BIT_ACT,
+ PMU_VBUCK3_VAL +
+ ((PMU_VBUCK3_VAL < 15 && buck_volt_low[2]) ? 1 : 0));
+#ifdef PMU_VBUCK4_VAL
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK4_BIT_ACT,
+ PMU_VBUCK4_VAL +
+ ((PMU_VBUCK4_VAL < 15 && buck_volt_low[3]) ? 1 : 0));
+ value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ // vBuck4 in low voltage range
+ ispi_reg_write(0x36, 0x6E45);
+#else
+ ispi_reg_write(0x36, 0x6E54);
+#endif
+ ispi_reg_write(0x2A, value);
+ // DDR power parameters
+ ispi_reg_write(0x4A, 0x96AA);
+ ispi_reg_write(0x4B, 0x96AA);
+
+ ispi_open(0);
+}
+
+static void setup_ddr_vtt(int vtt)
+{
+ printf("setup ddr vtt to %d\n", vtt);
+ ispi_reg_write(0x69, g_clock_config->DDR_TIMING_069H);
+}
+
+#if 0
+/*
+ * we initialize usb clock, but this won't cause the usb clock jitter,
+ * because wo don't setup the usb pll
+ */
+static void usb_clock_pre_init(void)
+{
+ ispi_reg_write(0x83, 0x72ef);
+ ispi_reg_write(0x89, 0x7400);
+}
+#endif
+
+static void pll_setup_init(void)
+{
+ setup_ddr_vtt(DDR_VTT_VAL);
+
+ if (g_clock_config->DDR_CHAN_1_VALID) {
+ ispi_reg_write(0x100, g_clock_config->DDR_TIMING_100H);
+ ispi_reg_write(0x101, g_clock_config->DDR_TIMING_101H);
+ ispi_reg_write(0x102, g_clock_config->DDR_TIMING_102H);
+ ispi_reg_write(0x103, g_clock_config->DDR_TIMING_103H);
+ ispi_reg_write(0x104, g_clock_config->DDR_TIMING_104H);
+ ispi_reg_write(0x105, g_clock_config->DDR_TIMING_105H);
+ ispi_reg_write(0x106, g_clock_config->DDR_TIMING_106H);
+ ispi_reg_write(0x107, g_clock_config->DDR_TIMING_107H);
+ ispi_reg_write(0x108, g_clock_config->DDR_TIMING_108H);
+ ispi_reg_write(0x109, g_clock_config->DDR_TIMING_109H);
+ ispi_reg_write(0x10A, g_clock_config->DDR_TIMING_10AH);
+ ispi_reg_write(0x10B, g_clock_config->DDR_TIMING_10BH);
+ ispi_reg_write(0x10C, g_clock_config->DDR_TIMING_10CH);
+ ispi_reg_write(0x10D, g_clock_config->DDR_TIMING_10DH);
+ ispi_reg_write(0x10E, g_clock_config->DDR_TIMING_10EH);
+ ispi_reg_write(0x10F, g_clock_config->DDR_TIMING_10FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID) {
+ ispi_reg_write(0x120, g_clock_config->DDR_TIMING_120H);
+ ispi_reg_write(0x121, g_clock_config->DDR_TIMING_121H);
+ ispi_reg_write(0x122, g_clock_config->DDR_TIMING_122H);
+ ispi_reg_write(0x123, g_clock_config->DDR_TIMING_123H);
+ ispi_reg_write(0x124, g_clock_config->DDR_TIMING_124H);
+ ispi_reg_write(0x125, g_clock_config->DDR_TIMING_125H);
+ ispi_reg_write(0x126, g_clock_config->DDR_TIMING_126H);
+ ispi_reg_write(0x127, g_clock_config->DDR_TIMING_127H);
+ ispi_reg_write(0x128, g_clock_config->DDR_TIMING_128H);
+ ispi_reg_write(0x129, g_clock_config->DDR_TIMING_129H);
+ ispi_reg_write(0x12A, g_clock_config->DDR_TIMING_12AH);
+ ispi_reg_write(0x12B, g_clock_config->DDR_TIMING_12BH);
+ ispi_reg_write(0x12C, g_clock_config->DDR_TIMING_12CH);
+ ispi_reg_write(0x12D, g_clock_config->DDR_TIMING_12DH);
+ ispi_reg_write(0x12E, g_clock_config->DDR_TIMING_12EH);
+ ispi_reg_write(0x12F, g_clock_config->DDR_TIMING_12FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID) {
+ ispi_reg_write(0x140, g_clock_config->DDR_TIMING_140H);
+ ispi_reg_write(0x141, g_clock_config->DDR_TIMING_141H);
+ ispi_reg_write(0x142, g_clock_config->DDR_TIMING_142H);
+ ispi_reg_write(0x143, g_clock_config->DDR_TIMING_143H);
+ ispi_reg_write(0x144, g_clock_config->DDR_TIMING_144H);
+ ispi_reg_write(0x145, g_clock_config->DDR_TIMING_145H);
+ ispi_reg_write(0x146, g_clock_config->DDR_TIMING_146H);
+ ispi_reg_write(0x147, g_clock_config->DDR_TIMING_147H);
+ ispi_reg_write(0x148, g_clock_config->DDR_TIMING_148H);
+ ispi_reg_write(0x149, g_clock_config->DDR_TIMING_149H);
+ ispi_reg_write(0x14A, g_clock_config->DDR_TIMING_14AH);
+ ispi_reg_write(0x14B, g_clock_config->DDR_TIMING_14BH);
+ ispi_reg_write(0x14C, g_clock_config->DDR_TIMING_14CH);
+ ispi_reg_write(0x14D, g_clock_config->DDR_TIMING_14DH);
+ ispi_reg_write(0x14E, g_clock_config->DDR_TIMING_14EH);
+ ispi_reg_write(0x14F, g_clock_config->DDR_TIMING_14FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID) {
+ ispi_reg_write(0x160, g_clock_config->DDR_TIMING_160H);
+ ispi_reg_write(0x161, g_clock_config->DDR_TIMING_161H);
+ ispi_reg_write(0x162, g_clock_config->DDR_TIMING_162H);
+ ispi_reg_write(0x163, g_clock_config->DDR_TIMING_163H);
+ ispi_reg_write(0x164, g_clock_config->DDR_TIMING_164H);
+ ispi_reg_write(0x165, g_clock_config->DDR_TIMING_165H);
+ ispi_reg_write(0x166, g_clock_config->DDR_TIMING_166H);
+ ispi_reg_write(0x167, g_clock_config->DDR_TIMING_167H);
+ ispi_reg_write(0x168, g_clock_config->DDR_TIMING_168H);
+ ispi_reg_write(0x169, g_clock_config->DDR_TIMING_169H);
+ ispi_reg_write(0x16A, g_clock_config->DDR_TIMING_16AH);
+ ispi_reg_write(0x16B, g_clock_config->DDR_TIMING_16BH);
+ ispi_reg_write(0x16C, g_clock_config->DDR_TIMING_16CH);
+ ispi_reg_write(0x16D, g_clock_config->DDR_TIMING_16DH);
+ ispi_reg_write(0x16E, g_clock_config->DDR_TIMING_16EH);
+ ispi_reg_write(0x16F, g_clock_config->DDR_TIMING_16FH);
+ }
+
+ ispi_reg_write(0x180, g_clock_config->DDR_TIMING_180H);
+ ispi_reg_write(0x181, g_clock_config->DDR_TIMING_181H);
+ ispi_reg_write(0x182, g_clock_config->DDR_TIMING_182H);
+ ispi_reg_write(0x183, g_clock_config->DDR_TIMING_183H);
+ ispi_reg_write(0x184, g_clock_config->DDR_TIMING_184H);
+ ispi_reg_write(0x185, g_clock_config->DDR_TIMING_185H);
+ ispi_reg_write(0x186, g_clock_config->DDR_TIMING_186H);
+ ispi_reg_write(0x187, g_clock_config->DDR_TIMING_187H);
+ ispi_reg_write(0x188, g_clock_config->DDR_TIMING_188H);
+ ispi_reg_write(0x189, g_clock_config->DDR_TIMING_189H);
+ ispi_reg_write(0x18A, g_clock_config->DDR_TIMING_18AH);
+ ispi_reg_write(0x18B, g_clock_config->DDR_TIMING_18BH);
+ ispi_reg_write(0x18C, g_clock_config->DDR_TIMING_18CH);
+
+ //usb_clock_pre_init();
+
+ udelay(5000);
+}
+
+static void pll_setup_mem(void)
+{
+}
+
+static void pll_setup_mem_cal(void)
+{
+}
+
+static void print_pll_reg(UINT32 index, UINT32 value)
+{
+ printf("pll reg %lx = %lx\n", index, value);
+}
+
+static void pll_dump_reg(void)
+{
+ print_pll_reg(0x005, ispi_reg_read(0x005));
+ print_pll_reg(0x006, ispi_reg_read(0x006));
+ print_pll_reg(0x063, ispi_reg_read(0x063));
+ print_pll_reg(0x065, ispi_reg_read(0x065));
+ print_pll_reg(0x066, ispi_reg_read(0x066));
+ print_pll_reg(0x069, ispi_reg_read(0x069));
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ {
+ print_pll_reg(0x100, ispi_reg_read(0x100));
+ print_pll_reg(0x101, ispi_reg_read(0x101));
+ print_pll_reg(0x102, ispi_reg_read(0x102));
+ print_pll_reg(0x103, ispi_reg_read(0x103));
+ print_pll_reg(0x104, ispi_reg_read(0x104));
+ print_pll_reg(0x105, ispi_reg_read(0x105));
+ print_pll_reg(0x106, ispi_reg_read(0x106));
+ print_pll_reg(0x107, ispi_reg_read(0x107));
+ print_pll_reg(0x108, ispi_reg_read(0x108));
+ print_pll_reg(0x109, ispi_reg_read(0x109));
+ print_pll_reg(0x10A, ispi_reg_read(0x10A));
+ print_pll_reg(0x10B, ispi_reg_read(0x10B));
+ print_pll_reg(0x10C, ispi_reg_read(0x10C));
+ print_pll_reg(0x10D, ispi_reg_read(0x10D));
+ print_pll_reg(0x10E, ispi_reg_read(0x10E));
+ print_pll_reg(0x10F, ispi_reg_read(0x10F));
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ {
+ print_pll_reg(0x120, ispi_reg_read(0x120));
+ print_pll_reg(0x121, ispi_reg_read(0x121));
+ print_pll_reg(0x122, ispi_reg_read(0x122));
+ print_pll_reg(0x123, ispi_reg_read(0x123));
+ print_pll_reg(0x124, ispi_reg_read(0x124));
+ print_pll_reg(0x125, ispi_reg_read(0x125));
+ print_pll_reg(0x126, ispi_reg_read(0x126));
+ print_pll_reg(0x127, ispi_reg_read(0x127));
+ print_pll_reg(0x128, ispi_reg_read(0x128));
+ print_pll_reg(0x129, ispi_reg_read(0x129));
+ print_pll_reg(0x12A, ispi_reg_read(0x12A));
+ print_pll_reg(0x12B, ispi_reg_read(0x12B));
+ print_pll_reg(0x12C, ispi_reg_read(0x12C));
+ print_pll_reg(0x12D, ispi_reg_read(0x12D));
+ print_pll_reg(0x12E, ispi_reg_read(0x12E));
+ print_pll_reg(0x12F, ispi_reg_read(0x12F));
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ {
+ print_pll_reg(0x140, ispi_reg_read(0x140));
+ print_pll_reg(0x141, ispi_reg_read(0x141));
+ print_pll_reg(0x142, ispi_reg_read(0x142));
+ print_pll_reg(0x143, ispi_reg_read(0x143));
+ print_pll_reg(0x144, ispi_reg_read(0x144));
+ print_pll_reg(0x145, ispi_reg_read(0x145));
+ print_pll_reg(0x146, ispi_reg_read(0x146));
+ print_pll_reg(0x147, ispi_reg_read(0x147));
+ print_pll_reg(0x148, ispi_reg_read(0x148));
+ print_pll_reg(0x149, ispi_reg_read(0x149));
+ print_pll_reg(0x14A, ispi_reg_read(0x14A));
+ print_pll_reg(0x14B, ispi_reg_read(0x14B));
+ print_pll_reg(0x14C, ispi_reg_read(0x14C));
+ print_pll_reg(0x14D, ispi_reg_read(0x14D));
+ print_pll_reg(0x14E, ispi_reg_read(0x14E));
+ print_pll_reg(0x14F, ispi_reg_read(0x14F));
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ {
+ print_pll_reg(0x160, ispi_reg_read(0x160));
+ print_pll_reg(0x161, ispi_reg_read(0x161));
+ print_pll_reg(0x162, ispi_reg_read(0x162));
+ print_pll_reg(0x163, ispi_reg_read(0x163));
+ print_pll_reg(0x164, ispi_reg_read(0x164));
+ print_pll_reg(0x165, ispi_reg_read(0x165));
+ print_pll_reg(0x166, ispi_reg_read(0x166));
+ print_pll_reg(0x167, ispi_reg_read(0x167));
+ print_pll_reg(0x168, ispi_reg_read(0x168));
+ print_pll_reg(0x169, ispi_reg_read(0x169));
+ print_pll_reg(0x16A, ispi_reg_read(0x16A));
+ print_pll_reg(0x16B, ispi_reg_read(0x16B));
+ print_pll_reg(0x16C, ispi_reg_read(0x16C));
+ print_pll_reg(0x16D, ispi_reg_read(0x16D));
+ print_pll_reg(0x16E, ispi_reg_read(0x16E));
+ print_pll_reg(0x16F, ispi_reg_read(0x16F));
+ }
+
+ print_pll_reg(0x180, ispi_reg_read(0x180));
+ print_pll_reg(0x181, ispi_reg_read(0x181));
+ print_pll_reg(0x182, ispi_reg_read(0x182));
+ print_pll_reg(0x183, ispi_reg_read(0x183));
+ print_pll_reg(0x184, ispi_reg_read(0x184));
+ print_pll_reg(0x185, ispi_reg_read(0x185));
+ print_pll_reg(0x186, ispi_reg_read(0x186));
+ print_pll_reg(0x187, ispi_reg_read(0x187));
+ print_pll_reg(0x188, ispi_reg_read(0x188));
+ print_pll_reg(0x189, ispi_reg_read(0x189));
+ print_pll_reg(0x18A, ispi_reg_read(0x18A));
+ print_pll_reg(0x18B, ispi_reg_read(0x18B));
+ print_pll_reg(0x18C, ispi_reg_read(0x18C));
+}
+
+static int clock_save_config(void)
+{
+ /* save config to nand */
+ return 1;
+}
+
+#ifdef DO_DDR_PLL_DEBUG
+
+static int ddr_get_freq(UINT8 chioce)
+{
+ switch(chioce)
+ {
+ case 1:
+ return 50;
+ case 2:
+ return 100;
+ case 3:
+ return 156;
+ case 4:
+ return 200;
+ case 5:
+ return 290;
+ case 6:
+ return 333;
+ case 7:
+ return 355;
+ case 8:
+ return 400;
+ case 9:
+ return 416;
+ case 10:
+ return 455;
+ case 11:
+ return 519;
+ case 12:
+ return 533;
+ case 13:
+ return 260;
+ default:
+ return -1;
+ }
+}
+
+static void freq_choose(void)
+{
+ UINT8 i = 0, buf[3] = {0}, choice = 0;
+ INT32 freq_temp = 0;
+
+ printf("\nPlese choose the ddr Freq:");
+ printf("\n1.50M 2.100M 3.156M 4.200M 5.290M 6.333M 7.355M 8.400M 9.416M 10.455M 11.519M 12.533M 13.260M");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ serial_puts("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ choice = buf[0] - 0x30;
+ else if (2 == i)
+ choice = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ freq_temp = ddr_get_freq(choice);
+ if (-1 == freq_temp )
+ printf("\n Sorry, the fre you choose is wrong");
+ ddrfreq = freq_temp;
+}
+
+static void data_bits_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+
+ printf("\nPlese choose the ddr data bits:");
+ printf("\n1.16 2.32");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr32bit = 0;
+ else
+ ddr32bit = 1;
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+#if 0
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ printf("\nPlese input DDR voltage(0 ~ 15):");
+ }
+
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+}
+#endif
+
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ if (2 == vcoreselect)
+ printf("\nPlese input DDR buck3 voltage(0 ~ 15):");
+ else
+ printf("\nPlese input DDR buck4 voltage(0 ~ 15):");
+ }
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ if ((vcoreselect == 1) || (vcoreselect == 2))
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+ }
+ else
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 4;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 4);
+ reg_value |= temp ;
+ reg_value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ ispi_reg_write(regid, reg_value);
+ ispi_reg_write(0x0D, 0x92D0);
+ ispi_reg_write(0x4B, 0x96A8);
+ mdelay(100);
+ }
+}
+
+static void pmu_buck4_buck3_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+ UINT8 ddr_voltage_source = 0;
+
+ printf("\nPlese choose the ddr voltage:");
+ printf("\n1.DDR3L 2.DDR3");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr_voltage_source =2;
+ else{
+ ddr_voltage_source = 3;
+ pmu_setup_calibration_voltage(2);
+ }
+ pmu_setup_calibration_voltage(ddr_voltage_source);
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+
+void clock_load_ddr_cal_config(void)
+{
+ clock_debug_config.PLL_FREQ_MEM = ddrfreq;
+ if (ddrfreq < 200)
+ clock_debug_config.DDR_FLAGS |= DDR_FLAGS_DLLOFF;
+ else
+ clock_debug_config.DDR_FLAGS &= ~DDR_FLAGS_DLLOFF;
+
+ if (0 == ddr32bit)
+ {
+ clock_debug_config.DDR_CHAN_3_VALID = 0;
+ clock_debug_config.DDR_CHAN_4_VALID = 0;
+ }
+
+ clock_debug_config.DDR_PARA &= ~DDR_PARA_MEM_BITS_MASK;
+ if (0 == ddr32bit)
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(1);
+ else
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(2);
+}
+
+static int serial_gets(UINT8 *pstr)
+{
+ UINT32 length;
+
+ length = 0;
+ while(1) {
+ pstr[length] = serial_getc();
+ if(pstr[length] == '\r') {
+ pstr[length] = 0x00;
+ break;
+ }
+ else if( pstr[length] == '\b' ) {
+ if(length>0) {
+ length --;
+ printf("\b");
+ }
+ }
+ else {
+ serial_putc(pstr[length]);
+ length ++;
+ }
+
+ if(length > 32)
+ return -1;
+ }
+ return length;
+}
+
+UINT32 asc2hex(UINT8 *pstr, UINT8 len)
+{
+ UINT8 i,ch,mylen;
+ UINT32 hexvalue;
+
+ for(mylen=0,i=0; i<8; i++)
+ {
+ if( pstr[i] == 0 )
+ break;
+ mylen ++;
+ }
+ if( len != 0 )
+ {
+ if(mylen>len)
+ mylen = len;
+ }
+ if(mylen>8)
+ mylen = 8;
+
+ hexvalue = 0;
+ for (i = 0; i < mylen; i++)
+ {
+ hexvalue <<= 4;
+ ch = *(pstr+i);
+ if((ch>='0') && (ch<='9'))
+ hexvalue |= ch - '0';
+ else if((ch>='A') && (ch<='F'))
+ hexvalue |= ch - ('A' - 10);
+ else if((ch>='a') && (ch<='f'))
+ hexvalue |= ch - ('a' - 10);
+ else
+ ;
+ }
+ return(hexvalue);
+}
+
+static int process_cmd(char * cmd)
+{
+ char cmd_element[3][16] = {{0}};
+ char * cmd_temp = cmd;
+ UINT8 i = 0, cmd_element_num = 0, former_space = 1;
+ UINT16 reg = 0, reg_value = 0;
+
+ if (NULL == cmd)
+ return -1;
+
+ while(('\0' != *cmd_temp) && ('\r' != *cmd_temp) && ('\n' != *cmd_temp))
+ {
+ if (' ' == * cmd_temp)
+ {
+ if (0 == former_space)
+ {
+ former_space = 1;
+ cmd_element[cmd_element_num][i] = '\0';
+ cmd_element_num++;
+ if (cmd_element_num > 2)
+ return -1;
+
+ i = 0;
+ }
+ }
+ else
+ {
+ former_space = 0;
+ cmd_element[cmd_element_num][i] = *cmd_temp;
+ i++;
+ if (i > 6)
+ return -1;
+ }
+
+ cmd_temp++;
+ }
+
+ cmd_element[cmd_element_num][i] = '\0';
+
+ if (!strcmp(cmd_element[0], "read"))
+ {
+ if (cmd_element_num == 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1]))
+ return -1;
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = ispi_reg_read(reg);
+ printf("value = 0x%x", reg_value);
+ printf("\nddrPll#");
+ }
+ else if (!strcmp(cmd_element[0], "write"))
+ {
+ if (cmd_element_num != 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1])
+ || ('0' != cmd_element[2][0]) || ('x' != cmd_element[2][1]))
+ return -1;
+
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = (UINT16)asc2hex((UINT8 *)&cmd_element[2][2], 4);
+ ispi_reg_write(reg, reg_value);
+ }
+ else if (!strcmp(cmd_element[0], "finish"))
+ {
+ return 1;
+ }
+ else if (!strcmp(cmd_element[0], "dump"))
+ {
+ pll_dump_reg();
+ printf("ddrPll#");
+ }
+ else
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+static void cmd_input(void)
+{
+ char cmd[48] = {0};
+ int len = 0;
+
+ ispi_open(0);
+ printf("\nddrPll#");
+ while(1)
+ {
+ len = serial_gets((UINT8 *)cmd);
+ printf("\nddrPll#");
+ if (len > 0)
+ {
+ int result = 0;
+
+ result = process_cmd(cmd);
+ if (-1 == result)
+ printf("command error! \nddrPll#");
+ else if (1 == result)
+ break;
+ else
+ continue;
+ }
+ }
+
+ return;
+}
+
+#endif /* DO_DDR_PLL_DEBUG */
+
+int clock_init(void)
+{
+#ifdef DO_DDR_PLL_DEBUG
+ char choice = 'n';
+#endif
+
+ /* First check current usb usage */
+ check_usb_usage();
+
+ printf("Init Clock ...\n");
+ g_clock_config = get_default_clock_config();
+
+ printf("Clock config ver: %d.%d\n",
+ g_clock_config->VERSION_MAJOR, g_clock_config->VERSION_MINOR);
+
+ pmu_setup_init();
+
+#ifdef DO_DDR_PLL_DEBUG
+ printf("If you want to config the ddr para manully ?(y = yes, n = no) \n");
+ choice = serial_getc();
+ if (choice == 'y')
+ {
+ memcpy(&clock_debug_config, g_clock_config,
+ sizeof(clock_debug_config));
+ g_clock_config = &clock_debug_config;
+ pmu_setup_calibration_voltage(1);
+ pmu_buck4_buck3_choose();
+ freq_choose();
+ data_bits_choose();
+ clock_load_ddr_cal_config();
+ }
+#endif
+
+ sys_shutdown_pll();
+ ispi_open(0);
+ pll_setup_init();
+#ifdef DO_DDR_PLL_DEBUG
+ if (choice == 'y')
+ cmd_input();
+#endif
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+
+ if (g_clock_config->DDR_CAL) {
+ printf("Init DDR for ddr_cal\n");
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+ pll_setup_mem_cal();
+ clock_save_config();
+ } else {
+ pll_setup_mem();
+ }
+
+ sys_dump_pll_freq();
+ sys_dump_clk();
+ pll_dump_reg();
+
+ printf("Init DDR, flag = 0x%04x, para = 0x%08lx\n",
+ g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+
+ #ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#else /* CONFIG_RDA_FPGA */
+
+int clock_init(void)
+{
+ u16 ddr_flags = DDR_FLAGS_DLLOFF
+ | DDR_FLAGS_ODT(1)
+ | DDR_FLAGS_RON(0);
+ //16bit
+ u32 ddr_para = DDR_PARA_MEM_BITS(1)
+ | DDR_PARA_BANK_BITS(3)
+ | DDR_PARA_ROW_BITS(3)
+ | DDR_PARA_COL_BITS(2);
+
+ printf("Init DDR\n");
+ ddr_init(ddr_flags, ddr_para);
+ printf("Done\n");
+
+#ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#endif /* CONFIG_RDA_FPGA */
+
diff --git a/board/rda/rda8810e/clock_config.c b/board/rda/rda8810e/clock_config.c
new file mode 100644
index 0000000000..85254c90d7
--- /dev/null
+++ b/board/rda/rda8810e/clock_config.c
@@ -0,0 +1,149 @@
+#ifndef TARGET_TOOL
+#include <common.h>
+#include <asm/arch/factory.h>
+#include "clock_config.h"
+#endif
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+static const struct clock_config clock_default_config = {
+ /* Header */
+ 0, // MAGIC;
+ CLOCK_VER_MAJOR, // VERSION_MAJOR;
+ CLOCK_VER_MINOR, // VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ _TGT_AP_PLL_CPU_FREQ, // PLL_FREQ_CPU; /* 05, 06 */
+ _TGT_AP_PLL_BUS_FREQ, // PLL_FREQ_BUS; /* 25, 26 */
+ _TGT_AP_PLL_MEM_FREQ, // PLL_FREQ_MEM; /* 65, 66 */
+ _TGT_AP_PLL_USB_FREQ, // PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Cal */
+ 0, // DDR_CAL;
+ /* DDR_FLAGS */
+ DDR_FLAGS_ODT(_TGT_AP_DDR_ODT) // 010 -- 120 Ohm
+#if (_TGT_AP_DDR_CLOCK < 200)
+ | DDR_FLAGS_DLLOFF
+#endif
+#ifdef _TGT_AP_DDR_LOWPWR
+ | DDR_FLAGS_LOWPWR
+#endif
+ | DDR_FLAGS_RON(_TGT_AP_DDR_RON), // 00 -- 40 Ohm
+ /* DDR_PARA */
+ DDR_PARA_CHIP_BITS(_TGT_AP_DDR_CHIP_BITS)
+ | DDR_PARA_MEM_BITS(_TGT_AP_DDR_MEM_BITS)
+ | DDR_PARA_BANK_BITS(_TGT_AP_DDR_BANK_BITS)
+ | DDR_PARA_ROW_BITS(_TGT_AP_DDR_ROW_BITS )
+ | DDR_PARA_COL_BITS(_TGT_AP_DDR_COL_BITS),
+
+ /* AP sysctrl */
+ _TGT_AP_CLK_CPU, // CLK_CPU;
+ _TGT_AP_CLK_AXI, // CLK_AXI;
+ _TGT_AP_CLK_GCG, // CLK_GCG;
+ _TGT_AP_CLK_AHB1, // CLK_AHB1;
+ _TGT_AP_CLK_APB1, // CLK_APB1;
+ _TGT_AP_CLK_APB2, // CLK_APB2;
+ _TGT_AP_CLK_MEM, // CLK_MEM;
+ _TGT_AP_CLK_GPU, // CLK_GPU;
+ _TGT_AP_CLK_VPU, // CLK_VPU;
+ _TGT_AP_CLK_VOC, // CLK_VOC;
+ _TGT_AP_CLK_SFLSH, // CLK_SFLSH;
+ 0, // RESERVE;
+
+ /* DDR timings, defined in target */
+ DDR_CHAN_1_VALID_VAL, // DDR_CHAN_1_VALID;
+ DDR_TIMING_100H_VAL, // DDR_TIMING_100H;
+ DDR_TIMING_101H_VAL, // DDR_TIMING_101H;
+ DDR_TIMING_102H_VAL, // DDR_TIMING_102H;
+ DDR_TIMING_103H_VAL, // DDR_TIMING_103H;
+ DDR_TIMING_104H_VAL, // DDR_TIMING_104H;
+ DDR_TIMING_105H_VAL, // DDR_TIMING_105H;
+ DDR_TIMING_106H_VAL, // DDR_TIMING_106H;
+ DDR_TIMING_107H_VAL, // DDR_TIMING_107H;
+ DDR_TIMING_108H_VAL, // DDR_TIMING_108H;
+ DDR_TIMING_109H_VAL, // DDR_TIMING_109H;
+ DDR_TIMING_10AH_VAL, // DDR_TIMING_10AH;
+ DDR_TIMING_10BH_VAL, // DDR_TIMING_10BH;
+ DDR_TIMING_10CH_VAL, // DDR_TIMING_10CH;
+ DDR_TIMING_10DH_VAL, // DDR_TIMING_10DH;
+ DDR_TIMING_10EH_VAL, // DDR_TIMING_10EH;
+ DDR_TIMING_10FH_VAL, // DDR_TIMING_10FH;
+
+ DDR_CHAN_2_VALID_VAL, // DDR_CHAN_2_VALID;
+ DDR_TIMING_120H_VAL, // DDR_TIMING_120H;
+ DDR_TIMING_121H_VAL, // DDR_TIMING_121H;
+ DDR_TIMING_122H_VAL, // DDR_TIMING_122H;
+ DDR_TIMING_123H_VAL, // DDR_TIMING_123H;
+ DDR_TIMING_124H_VAL, // DDR_TIMING_124H;
+ DDR_TIMING_125H_VAL, // DDR_TIMING_125H;
+ DDR_TIMING_126H_VAL, // DDR_TIMING_126H;
+ DDR_TIMING_127H_VAL, // DDR_TIMING_127H;
+ DDR_TIMING_128H_VAL, // DDR_TIMING_128H;
+ DDR_TIMING_129H_VAL, // DDR_TIMING_129H;
+ DDR_TIMING_12AH_VAL, // DDR_TIMING_12AH;
+ DDR_TIMING_12BH_VAL, // DDR_TIMING_12BH;
+ DDR_TIMING_12CH_VAL, // DDR_TIMING_12CH;
+ DDR_TIMING_12DH_VAL, // DDR_TIMING_12DH;
+ DDR_TIMING_12EH_VAL, // DDR_TIMING_12EH;
+ DDR_TIMING_12FH_VAL, // DDR_TIMING_12FH;
+
+ DDR_CHAN_3_VALID_VAL, // DDR_CHAN_3_VALID;
+ DDR_TIMING_140H_VAL, // DDR_TIMING_140H;
+ DDR_TIMING_141H_VAL, // DDR_TIMING_141H;
+ DDR_TIMING_142H_VAL, // DDR_TIMING_142H;
+ DDR_TIMING_143H_VAL, // DDR_TIMING_143H;
+ DDR_TIMING_144H_VAL, // DDR_TIMING_144H;
+ DDR_TIMING_145H_VAL, // DDR_TIMING_145H;
+ DDR_TIMING_146H_VAL, // DDR_TIMING_146H;
+ DDR_TIMING_147H_VAL, // DDR_TIMING_147H;
+ DDR_TIMING_148H_VAL, // DDR_TIMING_148H;
+ DDR_TIMING_149H_VAL, // DDR_TIMING_149H;
+ DDR_TIMING_14AH_VAL, // DDR_TIMING_14AH;
+ DDR_TIMING_14BH_VAL, // DDR_TIMING_14BH;
+ DDR_TIMING_14CH_VAL, // DDR_TIMING_14CH;
+ DDR_TIMING_14DH_VAL, // DDR_TIMING_14DH;
+ DDR_TIMING_14EH_VAL, // DDR_TIMING_14EH;
+ DDR_TIMING_14FH_VAL, // DDR_TIMING_14FH;
+
+ DDR_CHAN_4_VALID_VAL, // DDR_CHAN_4_VALID;
+ DDR_TIMING_160H_VAL, // DDR_TIMING_160H;
+ DDR_TIMING_161H_VAL, // DDR_TIMING_161H;
+ DDR_TIMING_162H_VAL, // DDR_TIMING_162H;
+ DDR_TIMING_163H_VAL, // DDR_TIMING_163H;
+ DDR_TIMING_164H_VAL, // DDR_TIMING_164H;
+ DDR_TIMING_165H_VAL, // DDR_TIMING_165H;
+ DDR_TIMING_166H_VAL, // DDR_TIMING_166H;
+ DDR_TIMING_167H_VAL, // DDR_TIMING_167H;
+ DDR_TIMING_168H_VAL, // DDR_TIMING_168H;
+ DDR_TIMING_169H_VAL, // DDR_TIMING_169H;
+ DDR_TIMING_16AH_VAL, // DDR_TIMING_16AH;
+ DDR_TIMING_16BH_VAL, // DDR_TIMING_16BH;
+ DDR_TIMING_16CH_VAL, // DDR_TIMING_16CH;
+ DDR_TIMING_16DH_VAL, // DDR_TIMING_16DH;
+ DDR_TIMING_16EH_VAL, // DDR_TIMING_16EH;
+ DDR_TIMING_16FH_VAL, // DDR_TIMING_16FH;
+
+ DDR_TIMING_180H_VAL, // DDR_TIMING_180H;
+ DDR_TIMING_181H_VAL, // DDR_TIMING_181H;
+ DDR_TIMING_182H_VAL, // DDR_TIMING_182H;
+ DDR_TIMING_183H_VAL, // DDR_TIMING_183H;
+ DDR_TIMING_184H_VAL, // DDR_TIMING_184H;
+ DDR_TIMING_185H_VAL, // DDR_TIMING_185H;
+ DDR_TIMING_186H_VAL, // DDR_TIMING_186H;
+ DDR_TIMING_187H_VAL, // DDR_TIMING_187H;
+ DDR_TIMING_188H_VAL, // DDR_TIMING_188H;
+ DDR_TIMING_189H_VAL, // DDR_TIMING_189H;
+ DDR_TIMING_18AH_VAL, // DDR_TIMING_18AH;
+ DDR_TIMING_18BH_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_18CH_VAL, // DDR_TIMING_18CH;
+ DDR_TIMING_069H_VAL // DDR_TIMING_18CH;
+};
+
+const struct clock_config *get_default_clock_config(void)
+{
+#ifndef TARGET_TOOL
+ BUILD_BUG_ON(sizeof(struct clock_config) > AP_FACTORY_CLOCK_CFG_LEN);
+#endif
+
+ return &clock_default_config;
+}
+
diff --git a/board/rda/rda8810e/clock_config.h b/board/rda/rda8810e/clock_config.h
new file mode 100644
index 0000000000..3e472df08d
--- /dev/null
+++ b/board/rda/rda8810e/clock_config.h
@@ -0,0 +1,132 @@
+#ifndef __CLOCK_CONFIG_H__
+#define __CLOCK_CONFIG_H__
+
+typedef unsigned long UINT32;
+typedef unsigned short UINT16;
+typedef long INT32;
+typedef short INT16;
+typedef unsigned char UINT8;
+typedef char INT8;
+
+#define CLOCK_VER_MAJOR 2
+#define CLOCK_VER_MINOR 0
+
+struct clock_config {
+ /* Header */
+ UINT32 MAGIC;
+ UINT16 VERSION_MAJOR;
+ UINT16 VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ UINT32 PLL_FREQ_CPU; /* 05, 06 */
+ UINT32 PLL_FREQ_BUS; /* 25, 26 */
+ UINT32 PLL_FREQ_MEM; /* 65, 66 */
+ UINT32 PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Flags */
+ UINT16 DDR_CAL;
+ UINT16 DDR_FLAGS;
+ UINT32 DDR_PARA;
+ /* AP sysctrl */
+ UINT16 CLK_CPU;
+ UINT16 CLK_AXI;
+ UINT16 CLK_GCG;
+ UINT16 CLK_AHB1;
+ UINT16 CLK_APB1;
+ UINT16 CLK_APB2;
+ UINT16 CLK_MEM;
+ UINT16 CLK_GPU;
+ UINT16 CLK_VPU;
+ UINT16 CLK_VOC;
+ UINT16 CLK_SFLSH;
+ UINT16 RESERVE;
+ /* DDR timings */
+ UINT16 DDR_CHAN_1_VALID;
+ UINT16 DDR_TIMING_100H;
+ UINT16 DDR_TIMING_101H;
+ UINT16 DDR_TIMING_102H;
+ UINT16 DDR_TIMING_103H;
+ UINT16 DDR_TIMING_104H;
+ UINT16 DDR_TIMING_105H;
+ UINT16 DDR_TIMING_106H;
+ UINT16 DDR_TIMING_107H;
+ UINT16 DDR_TIMING_108H;
+ UINT16 DDR_TIMING_109H;
+ UINT16 DDR_TIMING_10AH;
+ UINT16 DDR_TIMING_10BH;
+ UINT16 DDR_TIMING_10CH;
+ UINT16 DDR_TIMING_10DH;
+ UINT16 DDR_TIMING_10EH;
+ UINT16 DDR_TIMING_10FH;
+
+ UINT16 DDR_CHAN_2_VALID;
+ UINT16 DDR_TIMING_120H;
+ UINT16 DDR_TIMING_121H;
+ UINT16 DDR_TIMING_122H;
+ UINT16 DDR_TIMING_123H;
+ UINT16 DDR_TIMING_124H;
+ UINT16 DDR_TIMING_125H;
+ UINT16 DDR_TIMING_126H;
+ UINT16 DDR_TIMING_127H;
+ UINT16 DDR_TIMING_128H;
+ UINT16 DDR_TIMING_129H;
+ UINT16 DDR_TIMING_12AH;
+ UINT16 DDR_TIMING_12BH;
+ UINT16 DDR_TIMING_12CH;
+ UINT16 DDR_TIMING_12DH;
+ UINT16 DDR_TIMING_12EH;
+ UINT16 DDR_TIMING_12FH;
+
+ UINT16 DDR_CHAN_3_VALID;
+ UINT16 DDR_TIMING_140H;
+ UINT16 DDR_TIMING_141H;
+ UINT16 DDR_TIMING_142H;
+ UINT16 DDR_TIMING_143H;
+ UINT16 DDR_TIMING_144H;
+ UINT16 DDR_TIMING_145H;
+ UINT16 DDR_TIMING_146H;
+ UINT16 DDR_TIMING_147H;
+ UINT16 DDR_TIMING_148H;
+ UINT16 DDR_TIMING_149H;
+ UINT16 DDR_TIMING_14AH;
+ UINT16 DDR_TIMING_14BH;
+ UINT16 DDR_TIMING_14CH;
+ UINT16 DDR_TIMING_14DH;
+ UINT16 DDR_TIMING_14EH;
+ UINT16 DDR_TIMING_14FH;
+
+ UINT16 DDR_CHAN_4_VALID;
+ UINT16 DDR_TIMING_160H;
+ UINT16 DDR_TIMING_161H;
+ UINT16 DDR_TIMING_162H;
+ UINT16 DDR_TIMING_163H;
+ UINT16 DDR_TIMING_164H;
+ UINT16 DDR_TIMING_165H;
+ UINT16 DDR_TIMING_166H;
+ UINT16 DDR_TIMING_167H;
+ UINT16 DDR_TIMING_168H;
+ UINT16 DDR_TIMING_169H;
+ UINT16 DDR_TIMING_16AH;
+ UINT16 DDR_TIMING_16BH;
+ UINT16 DDR_TIMING_16CH;
+ UINT16 DDR_TIMING_16DH;
+ UINT16 DDR_TIMING_16EH;
+ UINT16 DDR_TIMING_16FH;
+
+ UINT16 DDR_TIMING_180H;
+ UINT16 DDR_TIMING_181H;
+ UINT16 DDR_TIMING_182H;
+ UINT16 DDR_TIMING_183H;
+ UINT16 DDR_TIMING_184H;
+ UINT16 DDR_TIMING_185H;
+ UINT16 DDR_TIMING_186H;
+ UINT16 DDR_TIMING_187H;
+ UINT16 DDR_TIMING_188H;
+ UINT16 DDR_TIMING_189H;
+ UINT16 DDR_TIMING_18AH;
+ UINT16 DDR_TIMING_18BH;
+ UINT16 DDR_TIMING_18CH;
+ UINT16 DDR_TIMING_069H;
+};
+
+const struct clock_config *get_default_clock_config(void);
+
+#endif
diff --git a/board/rda/rda8810e/config.mk b/board/rda/rda8810e/config.mk
new file mode 100644
index 0000000000..ec124aff34
--- /dev/null
+++ b/board/rda/rda8810e/config.mk
@@ -0,0 +1,11 @@
+#
+#the spl code should not exceed the SPL_MAX_SIZE,and if
+#the spl don't up to the max size, paddint the last with
+#zero(or 0xff?)
+
+#48kbytes, 48*1024
+#SPL_APPENDING_TO := 48
+#SPL_MAX_SIZE := 49512
+
+# space for spl(48KiB) & mtd partition table(24KiB)
+SPL_APPENDING_TO := 72
diff --git a/board/rda/rda8810e/ddr3.c b/board/rda/rda8810e/ddr3.c
new file mode 100644
index 0000000000..13af197db1
--- /dev/null
+++ b/board/rda/rda8810e/ddr3.c
@@ -0,0 +1,533 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include "tgt_ap_clock_config.h"
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+#define DMC_READY 128
+#define USE_ADDR 129
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x3f, 0x3f},
+ {T_MRW, 0x3f, 0x3f},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0xf, 0xf},
+ {T_RTW, 0x1f, 0x1f},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4001f, 0x4001f},
+ {T_WTR, 0x4001f, 0x4001f},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x8, 0x8},
+ {WR_LATENCY, 0x4, 0x4},
+ {T_RDDATA_EN, 0x8, 0x8},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {QOSX_CTRL7, 0x08, 0x08},
+ {TURNAROUND_PRIO,0x1A, 0x0},
+ {HIT_PRIO, 0x1A, 0x0},
+ {T_REFI, 0x186, 0x3f},
+ {QUEUE_CTRL, 0xffff, 0x0},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x6},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x6},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0c, 0x6},// turn for now
+// {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x2},
+ {T_PHYWRLAT, 0x104, 0x105},
+ {T_PHYWRLAT, 0x104, 0x105},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 __attribute__((unused)) dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ printf("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + USE_ADDR * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_ENABLE_LAT *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL *4)) = 0x7;
+ *((volatile UINT32*)(PHY_REG_BASE + RDELAY_SEL *4)) = 0x6;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT *4)) = 0x1;
+ printf("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + 128 *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+
+ if (dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+
+ if (!dll_off){
+ *((volatile UINT32*)(PHY_REG_BASE + PHY_RDLAT * 4)) = 7;
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_ENABLE_LAT * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 3;
+ }else
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = 0xf;
+
+ serial_puts("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 __attribute__((unused)) dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+ *addr = val;
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+
+ *addr = val;
+
+ printf("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+ *addr = val;
+
+ printf("decode ctrl value: %lx\n", val);
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ val = 0x10000602;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ val = 0x10000103;//0ld 0x10000102
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+#endif
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000103;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+#endif
+
+ //config ECC control
+ wait_idle = 0x6;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2104210C) = 0x00000060;
+ *(volatile UINT32*)(0x21042110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ //axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8810e/ddr3.h b/board/rda/rda8810e/ddr3.h
new file mode 100644
index 0000000000..7481954144
--- /dev/null
+++ b/board/rda/rda8810e/ddr3.h
@@ -0,0 +1,50 @@
+#ifndef _SYS_DDR3_H_
+#define _SYS_DDR3_H_
+
+#include "clock_config.h"
+
+/*
+ * defination of ddr flags
+ */
+/* [Debug] DLL off mode, 0 is dll on mode */
+#define DDR_FLAGS_DLLOFF 0x8000
+/* [Debug] LowSpeed mode*/
+#define DDR_FLAGS_RESERVE 0x4000
+/* DDR LowPower mode */
+#define DDR_FLAGS_LOWPWR 0x2000
+/* ODT: 000--Null 001--60 010--120 011--40 100--20 101--30 */
+#define DDR_FLAGS_ODT(n) (((n)<<0)&0x0007)
+#define DDR_FLAGS_ODT_SHIFT 0
+#define DDR_FLAGS_ODT_MASK 0x0007
+/* RON: 00--40 01--30 */
+#define DDR_FLAGS_RON(n) (((n)<<3)&0x0018)
+#define DDR_FLAGS_RON_SHIFT 3
+#define DDR_FLAGS_RON_MASK 0x0018
+
+/*
+ * defination of ddr parameters
+ */
+#define DDR_PARA_CHIP_BITS(n) (((n)<<0)&0x00000003)
+#define DDR_PARA_CHIP_BITS_SHIFT 0
+#define DDR_PARA_CHIP_BITS_MASK 0x00000003
+/* memory width 0--8bit 1--16bit 2--32bit */
+#define DDR_PARA_MEM_BITS(n) (((n)<<2)&0x0000000c)
+#define DDR_PARA_MEM_BITS_SHIFT 2
+#define DDR_PARA_MEM_BITS_MASK 0x0000000c
+/* 2--4banks 3--8banks */
+#define DDR_PARA_BANK_BITS(n) (((n)<<4)&0x000000f0)
+#define DDR_PARA_BANK_BITS_SHIFT 4
+#define DDR_PARA_BANK_BITS_MASK 0x000000f0
+/* 2--13rbs 3--14rbs 4--15rbs 5--16rbs */
+#define DDR_PARA_ROW_BITS(n) (((n)<<8)&0x00000f00)
+#define DDR_PARA_ROW_BITS_SHIFT 8
+#define DDR_PARA_ROW_BITS_MASK 0x00000f00
+/* 0--8cbs 1--9cbs 2--10cbs 3--11cbs 4--12cbs */
+#define DDR_PARA_COL_BITS(n) (((n)<<12)&0x0000f000)
+#define DDR_PARA_COL_BITS_SHIFT 12
+#define DDR_PARA_COL_BITS_MASK 0x0000f000
+
+int ddr_init(UINT16 flags, UINT32 para);
+
+#endif /* _SYS_DDR3_H_ */
+
diff --git a/board/rda/rda8810e/ddr3_8810.c b/board/rda/rda8810e/ddr3_8810.c
new file mode 100644
index 0000000000..b6ccc52375
--- /dev/null
+++ b/board/rda/rda8810e/ddr3_8810.c
@@ -0,0 +1,540 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include "tgt_ap_clock_config.h"
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x3f},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x5},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x5},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0e, 0x0c},// turn for now
+// {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x1},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_PHYWRLAT, 0x103, 0x104},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ printf("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + 129 * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = 0xf;
+ printf("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ if (!dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + RDELAY_SEL * 4)) = 2;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = (3<<2);
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = (3<<2);
+ printf("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x22000202;
+#elif (DDR_TYPE == 2)
+ val = 0x22000202;
+#else
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+#endif
+ *addr = val;
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x20302;
+#elif (DDR_TYPE == 2)
+ val = 0x30200;
+#else
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+#endif
+ *addr = val;
+
+ printf("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+
+ val = 0x30301;
+
+ *addr = val;
+
+ printf("address ctrl 2 value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x00;
+#elif (DDR_TYPE == 2)
+ val = 0x50;
+#else
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+#endif
+ *addr = val;
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ val = 0x10;
+ *addr = val;
+ wait_idle = 0x6;
+ while (wait_idle--);
+#endif
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ val = 0x10000402;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000103;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config ECC control
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x4f;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2104210C) = 0x00000060;
+ *(volatile UINT32*)(0x21042110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ //axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8810e/ddr3_8810e_16bit.c b/board/rda/rda8810e/ddr3_8810e_16bit.c
new file mode 100644
index 0000000000..2469e0c75e
--- /dev/null
+++ b/board/rda/rda8810e/ddr3_8810e_16bit.c
@@ -0,0 +1,388 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+//////////////////////////////////////////////////////////////////////
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+ serial_puts("ddr3 phy init done!\n");
+}
+///////////////////////////////////////////////////////////////////
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int * addr;
+ wait_idle = 0x4e;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x200);
+*addr = 0x3f;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x204);
+*addr = 0x23008c;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x204);
+*addr = 0x8c008c;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x208);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x20c);
+*addr = 0xc;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x218);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x21c);
+*addr = 0xf;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x220);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x224);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x228);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x22c);
+*addr = 0x14;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x234);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x238);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x23c);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x244);
+*addr = 0x10;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x248);
+*addr = 0x4000d;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x248);
+*addr = 0x6000f;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x24c);
+*addr = 0x60000;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x230);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x240);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x300);
+*addr = 0x2;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x304);
+*addr = 0x105;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x304);
+*addr = 0x105;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x258);
+*addr = 0x3;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x25c);
+*addr = 0x20003;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x25c);
+*addr = 0xa0003;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x260);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x264);
+*addr = 0x1000090;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x264);
+*addr = 0x2000090;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x268);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x26c);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x250);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x254);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x148);
+*addr = 0x0;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x18);
+*addr = 0x22000201;
+
+ wait_idle = 0x1d;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30401;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x14);
+*addr = 0x50;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x14);
+*addr = 0x10;
+
+ wait_idle = 0x6;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x0;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10020008;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10030000;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10010001;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10000520;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x50000400;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x30000000;
+
+ wait_idle = 0x6;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x148);
+*addr = 0x0;
+
+ wait_idle = 0x8;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x8);
+*addr = 0x3;
+
+addr = (int * ) (DMCREG_BADDR + 0x0);
+wait_idle = 0;
+while ( wait_idle != 3)
+wait_idle = *addr;
+serial_puts("ddr3 dmc400 init done!\n");
+}
+
+///////////////////////////////////////////////////////////////////
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ serial_puts("8bit ");
+ break;
+ case 1:
+ serial_puts("16bit ");
+ break;
+ case 2:
+ serial_puts("32bit ");
+ break;
+ }
+ if (dll_off)
+ serial_puts("dll-off Mode ...\n");
+ else
+ serial_puts("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ //serial_puts("dram");
+ //print_u32(DDR_TYPE);
+ //serial_puts(" init done ...\n");
+ printf("dram%d init done ...\n", DDR_TYPE);
+
+ return 0;
+}
+
diff --git a/board/rda/rda8810e/ddr3_8810e_32bit.c b/board/rda/rda8810e/ddr3_8810e_32bit.c
new file mode 100644
index 0000000000..c3a8c1fa95
--- /dev/null
+++ b/board/rda/rda8810e/ddr3_8810e_32bit.c
@@ -0,0 +1,410 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DATA_ODT_ENABLE_REG*4);
+ *addr = 0xf;
+
+ addr = (int *) (PHY_BADDR + DATA_WRITE_ENABLE_REG*4);
+ *addr = 0xf;
+
+ serial_puts("ddr3 phy init done!\n");
+}
+
+#define DMC_WAIT_IDLE 1
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int *addr;
+ volatile int temp;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x200);
+ *addr = 0x3f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x23008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x8c008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x208);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x20c);
+ *addr = 0xc;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x218);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x21c);
+ *addr = 0xf;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x220);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x224);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x228);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x22c);
+ *addr = 0x14;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x234);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x238);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x23c);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x244);
+ *addr = 0x10;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x4000d;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x6000f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x24c);
+ *addr = 0x60000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x230);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x240);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x300);
+ *addr = 0x2;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x258);
+ *addr = 0x3;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0x20003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0xa0003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x260);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x1000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x2000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x268);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x26c);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x250);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x254);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x18);
+ //*addr = 0x22000201;
+ *addr = 0x22000202;
+
+ wait_idle = DMC_WAIT_IDLE * 0x1d;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ //*addr = 0x30401;
+ *addr = 0x30302;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ *addr = 0x50;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ //*addr = 0x10;
+ *addr = 0x00;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10020008;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10030000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10010001;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10000520;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x50000400;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x30000000;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE * 0x8;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x8);
+ *addr = 0x3;
+
+ addr = (int * ) (DMCREG_BADDR + 0x0);
+ temp = 0;
+ while (temp != 3)
+ temp = *addr;
+
+ serial_puts("ddr3 dmc400 init done!\n");
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2104210C) = 0x00000060;
+ *(volatile UINT32*)(0x21042110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ //axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ serial_puts("8bit ");
+ break;
+ case 1:
+ serial_puts("16bit ");
+ break;
+ case 2:
+ serial_puts("32bit ");
+ break;
+ }
+ if (dll_off)
+ serial_puts("dll-off Mode ...\n");
+ else
+ serial_puts("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ //serial_puts("dram ");
+ //print_u32(DDR_TYPE);
+ //serial_puts(" init done ...\n");
+ printf("ddr%d init done\n");
+
+ return 0;
+}
diff --git a/board/rda/rda8810e/ddr3_init.h b/board/rda/rda8810e/ddr3_init.h
new file mode 100644
index 0000000000..402375d269
--- /dev/null
+++ b/board/rda/rda8810e/ddr3_init.h
@@ -0,0 +1,101 @@
+#ifndef _SYS_RAM_INIT_H_
+#define _SYS_RAM_INIT_H_
+
+#define MEMC_STATUS 0x000
+#define MEMC_CONFIG 0x004
+#define MEMC_CMD 0x008
+#define ADDR_CTRL 0x010
+#define DECODE_CTRL 0x014
+#define FORMAT_CTRL 0x018
+#define LOWPWR_CTRL 0x020
+#define TURNAROUND_PRIO 0x030
+#define HIT_PRIO 0x034
+//QOS0~QOS15:038~078
+#define QOSX_CTRL 0x038
+#define QOSX_CTRL7 0x058
+#define QOSX_CTRL15 0x078
+#define TIMEOUT_CTRL 0x07C
+#define QUEUE_CTRL 0x080
+#define WR_PRIO_CTRL 0x088
+#define WR_PRIO_CTRL2 0x08C
+#define RD_PRIO_CTRL 0x090
+#define RD_PRIO_CTRL2 0x094
+#define ACCESS_ADDR_MATCH 0x098
+#define ACCESS_ADDR_MATCH_63_32 0x09C
+#define ACCESS_ADDR_MASK 0x0A0
+#define ACCESS_ADDR_MASK_63_32 0x0A4
+
+#define CHANNEL_STATUS 0x100
+#define DIRECT_CMD 0x108
+#define MR_DATA 0x110
+#define REFRESH_CTRL 0x120
+#define INTR_CTRL 0x128
+#define INTR_CLR 0x130
+#define INTR_STATUS 0x138
+#define INTR_INFO 0x140
+#define ECC_CTRL 0x148
+
+#define T_REFI 0x200
+#define T_RFC 0x204
+#define T_MRR 0x208
+#define T_MRW 0x20C
+#define T_RCD 0x218
+#define T_RAS 0x21C
+#define T_RP 0x220
+#define T_RPALL 0x224
+#define T_RRD 0x228
+#define T_FAW 0x22C
+#define RD_LATENCY 0x230
+#define T_RTR 0x234
+#define T_RTW 0x238
+#define T_RTP 0x23C
+#define WR_LATENCY 0x240
+#define T_WR 0x244
+#define T_WTR 0x248
+#define T_WTW 0x24C
+#define T_ECKD 0x250
+#define T_XCKD 0x254
+#define T_EP 0x258
+#define T_XP 0x25C
+#define T_ESR 0x260
+#define T_XSR 0x264
+#define T_SRCKD 0x268
+#define T_CKSRD 0x26C
+
+#define T_RDDATA_EN 0x300
+#define T_PHYWRLAT 0x304
+#define RDLVL_CTRL 0x308
+#define RDLVL_DIRECT 0x310
+#define T_RDLVL_EN 0x318
+#define T_RDLVL_RR 0x31C
+#define WRLVL_CTRL 0x328
+#define WRLVL_DIRECT 0x330
+#define T_WRLVL_EN 0x338
+#define T_WRLVL_WW 0x33C
+
+#define PHY_PWR_CTRL 0x348
+#define PHY_UPD_CTRL 0x350
+
+#define USER_STATUS 0x400
+#define USER_CONFIG0 0x404
+#define USER_CONFIG1 0x408
+
+#define INTEG_CFG 0xE00
+#define INTEG_OUTPUTS 0xE08
+
+#define PERIPH_ID_0 0xFE0
+#define PERIPH_ID_1 0xFE4
+#define PERIPH_ID_2 0xFE8
+#define PERIPH_ID_3 0xFEC
+#define COMPONENT_ID_0 0xFF0
+#define COMPONENT_ID_1 0xFF4
+#define COMPONENT_ID_2 0xFF8
+#define COMPONENT_ID_3 0xFFC
+
+typedef struct {
+ UINT32 reg_offset;
+ UINT32 dll_on_val;
+ UINT32 dll_off_val;
+} dmc_reg_t;
+
+#endif /* _SYS_RAM_INIT_H_ */
diff --git a/board/rda/rda8810e/debug.h b/board/rda/rda8810e/debug.h
new file mode 100644
index 0000000000..1d4f03bedb
--- /dev/null
+++ b/board/rda/rda8810e/debug.h
@@ -0,0 +1,9 @@
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+void print_u8(u8 ch);
+void print_u16(u16 data);
+void print_u32(u32 data);
+void dump_buf(u8 *buf, u32 size);
+
+#endif /* _DEBUG_H_ */
diff --git a/board/rda/rda8810e/hal_config.c b/board/rda/rda8810e/hal_config.c
new file mode 100644
index 0000000000..86af7cd2c8
--- /dev/null
+++ b/board/rda/rda8810e/hal_config.c
@@ -0,0 +1,1449 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2013, RDA Microeletronics. //
+// All Rights Reserved //
+// //
+// This source code is the property of RDA Microeletronics and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA Microeletronics. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/8810/src/hal_config.c $ //
+// $Author: huazeng $ //
+// $Date: 2013-08-31 17:48:58 +0800 (Sat, 31 Aug 2013) $ //
+// $Revision: 21005 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_config.c
+/// Implementation of HAL initialization related with the particular instance
+/// of the IP.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+/* uboot */
+#include <common.h>
+
+/* common */
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/chip_id.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_gpio.h>
+
+/* device */
+#include "hal_sys.h"
+#include "halp_sys.h"
+#include "halp_gpio.h"
+#include "bootp_mode.h"
+#include "hal_config.h"
+#include "hal_ap_gpio.h"
+#include "hal_ap_config.h"
+#include <asm/arch/reg_cfg_regs.h>
+
+/* target */
+#include "tgt_board_cfg.h"
+#include "tgt_ap_gpio_setting.h"
+#define HAL_ASSERT(cond, fmt, ...) \
+ if(!(cond)) { \
+ hal_assert(fmt, ##__VA_ARGS__); \
+ g_halConfigError = TRUE; \
+ }
+
+//// =============================================================================
+//// GLOBAL VARIABLES
+//// =============================================================================
+PRIVATE CONST UINT8 g_halCfgSimOrder[] = { TGT_SIM_ORDER };
+PRIVATE HAL_CFG_CONFIG_T hal_cfg = TGT_HAL_CONFIG;
+PRIVATE UINT32 g_bootBootMode = 0;
+PRIVATE BOOL g_halConfigError = FALSE;
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+// HAL_ASSERT
+PRIVATE VOID hal_assert(const char *fmt, ...)
+{
+ va_list args;
+ puts("\n#-------Board Mux config found error-------#\n");
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ putc('\n');
+ puts("--------------------------------------------\n\n");
+ va_end(args);
+}
+
+// =============================================================================
+// hal_BoardSimUsed
+// -----------------------------------------------------------------------------
+/// Check whether a SIM card interface is used.
+// ============================================================================
+PRIVATE BOOL hal_BoardSimUsed(UINT32 simId)
+{
+ UINT32 i;
+ for (i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ {
+ if (g_halCfgSimOrder[i] == simId)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+#if 0
+// =============================================================================
+// hal_BoardConfigClk32k
+// -----------------------------------------------------------------------------
+/// Configure CLK_32K output.
+/// @param enable TRUE to configure, and FALSE to disable.
+// ============================================================================
+PROTECTED VOID hal_BoardConfigClk32k(BOOL enable)
+{
+ HAL_ASSERT(g_halCfg->useClk32k == TRUE, "32K clock is not configured");
+
+ if (enable)
+ {
+ // Setup the pin as 32K clock output
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_CLK_32K;
+ }
+ else
+ {
+ // Setup the pin as GPO (and low ouput has been
+ // configured in hal_BoardSetup())
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_GPO_2;
+ }
+}
+#endif
+
+// =============================================================================
+// hal_BoardSetupGeneral
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL for general purpose
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+PROTECTED VOID hal_BoardSetupGeneral(CONST HAL_CFG_CONFIG_T* halCfg)
+{
+ UINT32 altMux = 0;
+ UINT32 altMux2 = 0;
+
+ UINT32 availableGpo_A = 0;
+
+ UINT32 availableGpio_C = 0;
+ UINT32 availableGpio_A = 0;
+ UINT32 availableGpio_B = 0;
+ UINT32 availableGpio_D = 0;
+ UINT32 availableGpio_E = 0;
+
+ UINT32 bootModeGpio_C = 0;
+ UINT32 bootModeGpio_A = 0;
+ UINT32 bootModeGpio_B = 0;
+ UINT32 bootModeGpio_D = 0;
+ UINT32 bootModeGpio_E = 0;
+
+ UINT32 noConnectMask_C = 0;
+ UINT32 noConnectMask_A = 0;
+ UINT32 noConnectMask_B = 0;
+ UINT32 noConnectMask_D = 0;
+ UINT32 noConnectMask_E = 0;
+
+ UINT32 gpoClr_A = 0;
+
+#ifdef FPGA
+
+ // no muxing, do nothing
+
+#else // !FPGA
+
+ // GPIOs as boot mode pins
+ bootModeGpio_C = HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ bootModeGpio_A = HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7);
+ bootModeGpio_B = HAL_GPIO_BIT(0);
+ bootModeGpio_D = 0;
+ bootModeGpio_E = 0;
+
+ // Available GPIOs
+ availableGpio_C |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ // Volume down/up keys
+ availableGpio_D |= HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6);
+
+ // Boot modes
+ BOOL spiFlashCam = FALSE;
+ BOOL spiFlashNand = FALSE;
+ if (g_bootBootMode & BOOT_MODE_BOOT_SPI)
+ {
+ if (g_bootBootMode & BOOT_MODE_SPI_PIN_NAND)
+ {
+ HAL_ASSERT((g_bootBootMode & BOOT_MODE_BOOT_EMMC),
+ "Emmc boot pin should be pulled up to boot on SPI flash over NAND pins");
+ spiFlashNand = TRUE;
+ }
+ else
+ {
+ spiFlashCam = TRUE;
+ }
+ }
+
+ //UINT32 metalId = rda_metal_id_get();
+ UINT32 emmcBootModeMask;
+ if (1) //metalId < 0x02)
+ {
+ emmcBootModeMask = BOOT_MODE_BOOT_EMMC
+ | BOOT_MODE_BOOT_SPI
+ | BOOT_MODE_BOOT_SPI_NAND;
+ }
+ else
+ {
+ emmcBootModeMask = BOOT_MODE_BOOT_EMMC
+ | BOOT_MODE_BOOT_SPI;
+ }
+ if ((g_bootBootMode & emmcBootModeMask) == BOOT_MODE_BOOT_EMMC)
+ {
+ // Boot from EMMC
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 (EMMC) should be used");
+ }
+
+ if (1) //metalId < 0x02)
+ {
+ if ( (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_SPI_NAND ||
+ (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L))
+ == (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L)
+ )
+ {
+ // Boot from SDMMC1
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmcUsed, "SDMMC1 should be used");
+ }
+ }
+
+ // For convenience, we do not consider spiFlashCam at present.
+ // We assume that SPI flash always uses parallel nand pins.
+#if 0
+ BOOL parallelNandUsed = halCfg->parallelNandUsed;
+#else
+ BOOL parallelNandUsed = !spiFlashNand && !halCfg->sdmmcCfg.sdmmc3Used;
+#endif
+ BOOL nand8_15Cam = FALSE;
+ BOOL nand8_15Lcd = FALSE;
+ if ((g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_EMMC)) == 0)
+ {
+ HAL_ASSERT(parallelNandUsed, "Parallel NAND should be used");
+ }
+ if (parallelNandUsed)
+ {
+ HAL_ASSERT(!spiFlashNand, "SPI flash uses parallel NAND pins");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used,
+ "SDMMC3 (EMMC) uses parallel NAND pins");
+ if ((g_bootBootMode & BOOT_MODE_NAND_8BIT) == 0)
+ {
+ if (g_bootBootMode & BOOT_MODE_NAND_HIGH_PIN_CAM)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses NAND 8-15 bits on cam pins");
+ nand8_15Cam = TRUE;
+ }
+ else
+ {
+ nand8_15Lcd = TRUE;
+ }
+ }
+ }
+
+ if (!parallelNandUsed)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(9);
+
+#ifdef NAND_IO_RECONFIG_WORKROUND
+ if (spiFlashNand)
+ {/*GPIO_B:25,26,27,28,29; GPIO_D:4 the output level is inverted*/
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }else{
+ availableGpio_D |= HAL_GPIO_BIT(8);
+ }
+#else
+ if (!spiFlashNand)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(8);
+ }
+#endif
+
+ if (!halCfg->sdmmcCfg.sdmmc3Used)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(10);
+ }
+ }
+#ifdef NAND_IO_RECONFIG_WORKROUND
+ else
+ {/*GPIO_B:25,26,27,28,29; GPIO_D:4 the output level is inverted*/
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }
+#endif
+
+ CONST HAL_CFG_CAM_T *camCfg = &halCfg->camCfg;
+ CONST HAL_CFG_CAM_T *cam2Cfg = &halCfg->cam2Cfg;
+ CONST HAL_LCD_MODE_T lcdMode = halCfg->goudaCfg.lcdMode;
+
+ // LCD
+ if (lcdMode == HAL_LCD_MODE_PARALLEL_16BIT)
+ {
+ /* Check LCD 8-15 bits */
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ HAL_ASSERT(!halCfg->goudaCfg.lcd8_23Cam2, "Parallel LCD 8-5 bits should use NAND pins only");
+ altMux |= CFG_REGS_LCD_MODE_PARALLEL_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_DSI)
+ {
+ altMux |= CFG_REGS_LCD_MODE_DSI;
+ availableGpio_A |= HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23);
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_16BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ /* Check LCD 8-15 bits */
+ if (halCfg->goudaCfg.lcd8_23Cam2)
+ {
+ HAL_ASSERT(!(cam2Cfg->camUsed || cam2Cfg->cam1Used),
+ "Camera2 uses LCD 8-15 bits");
+ altMux2 |= CFG_REGS_RGB_CAM_2_ENABLE;
+ }
+ else
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ }
+ if (lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ /* Check LCD 16-23 bits */
+ if (lcdMode == HAL_LCD_MODE_RGB_18BIT && halCfg->goudaCfg.lcd16_17Cs)
+ {
+ HAL_ASSERT(!halCfg->goudaCfg.lcd16_23Cam,
+ "LCD 16-17 bits have been configured on camera pins");
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use LCD 16-17 bits");
+ altMux2 |= CFG_REGS_LCD_RGB_17_16_LCD_DATA;
+ }
+ else if (halCfg->goudaCfg.lcd8_23Cam2)
+ {
+ HAL_ASSERT(!halCfg->goudaCfg.lcd16_23Cam,
+ "LCD 16-23 bits have been configured on camera pins");
+ HAL_ASSERT(halCfg->goudaCfg.lcd16_17Cs,
+ "LCD 16-17 bits should use LCD CS 0/1");
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use LCD 16-17 bits");
+ HAL_ASSERT(!(cam2Cfg->camUsed || cam2Cfg->cam1Used),
+ "Camera2 uses LCD 18-23 bits");
+ altMux2 |= CFG_REGS_LCD_RGB_17_16_LCD_DATA;
+ altMux2 |= CFG_REGS_RGB_CAM_2_ENABLE;
+ }
+ else if (halCfg->goudaCfg.lcd16_23Cam)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.lcd16_17Cs || halCfg->goudaCfg.lcd8_23Cam2),
+ "LCD 16-23 bits have been configured on LCD CS 0/1 and camera2 pins");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_PARALLEL &&
+ (camCfg->camUsed || camCfg->cam1Used)),
+ "Parallel camera uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam),
+ "I2C2 uses LCD 22-23 bits");
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses LCD 16-21 bits");
+ HAL_ASSERT(!nand8_15Cam, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_CSI &&
+ ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))),
+ "Camera CSI1 uses LCD 16-21 bits");
+ altMux |= CFG_REGS_RGB_CAM_ENABLE;
+ }
+ else
+ {
+ HAL_ASSERT(!parallelNandUsed, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 uses LCD 16-23 bits");
+ altMux |= CFG_REGS_RGB_CAM_DISABLE;
+ }
+ }
+ altMux |= CFG_REGS_LCD_MODE_RGB_24BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_SPI)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use SPI LCD pins");
+ HAL_ASSERT((halCfg->usedGpo_A & (HAL_GPO_BIT(3)|HAL_GPO_BIT(4))) == 0,
+ "GPO 3/4 use SPI LCD pins");
+ altMux |= CFG_REGS_SPI_LCD_SPI_LCD;
+ availableGpio_A |= HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21);
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Lcd mode not defined!");
+ }
+
+ if (lcdMode == HAL_LCD_MODE_DSI ||
+ lcdMode == HAL_LCD_MODE_SPI ||
+ ((lcdMode == HAL_LCD_MODE_RGB_16BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT) &&
+ halCfg->goudaCfg.lcd8_23Cam2))
+ {
+ if (!nand8_15Lcd)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(24)
+ | HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+ }
+
+ if (halCfg->goudaCfg.cs0Used)
+ {
+ altMux |= CFG_REGS_GPO_4_LCD_CS_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_4_GPO_4;
+ availableGpo_A |= HAL_GPO_BIT(4);
+ }
+
+ if (halCfg->goudaCfg.cs1Used)
+ {
+ altMux |= CFG_REGS_GPO_3_LCD_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_3_GPO_3;
+ availableGpo_A |= HAL_GPO_BIT(3);
+ }
+
+ // I2C
+ if (!halCfg->i2cCfg.i2cUsed)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+
+ if (halCfg->i2cCfg.i2c2Used)
+ {
+ if (halCfg->i2cCfg.i2c2PinsCam)
+ {
+ if (camCfg->camUsed)
+ {
+ HAL_ASSERT(camCfg->camPdnRemap == GPIO_NONE &&
+ camCfg->camRstRemap == GPIO_NONE,
+ "Cam uses PDN/RST pins");
+ }
+ if (camCfg->cam1Used)
+ {
+ HAL_ASSERT(camCfg->cam1PdnRemap == GPIO_NONE &&
+ camCfg->cam1RstRemap == GPIO_NONE,
+ "Cam1 uses PDN/RST pins");
+ }
+ HAL_ASSERT(!nand8_15Cam, "NAND uses cam PDN/RST pins");
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ altMux |= CFG_REGS_CAM_I2C2_I2C2;
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ }
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+
+ if (halCfg->i2cCfg.i2c3Used)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x18) == 0, "Keyout 3/4 use I2C3 pins");
+ altMux |= CFG_REGS_KEYOUT_3_4_I2C3;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYOUT_3_4_KEYOUT_3_4;
+ if ((halCfg->keyOutMask & 0x8) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(6);
+ }
+ if ((halCfg->keyOutMask & 0x10) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ if (halCfg->i2cCfg.modemI2cUsed)
+ {
+ HAL_ASSERT(!halCfg->emacUsed, "EMAC uses modem I2C pins");
+ }
+ else
+ {
+ if (!halCfg->emacUsed)
+ {
+ availableGpio_E |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+ }
+
+ // Camera
+ if (camCfg->camUsed || camCfg->cam1Used)
+ {
+ if(camCfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses cam pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use cam pins");
+ altMux |= CFG_REGS_CSI2_PARALLEL_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(24);
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux |= CFG_REGS_CSI2_SPI_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(14);
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses CSI1 pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use CSI1 pins");
+ }
+ else
+ {
+ // CSI1 is unused
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ altMux |= CFG_REGS_CSI2_CSI2;
+ // If CSI2 is unused
+ if (!((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_2) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Invalid cam mode: %d", camCfg->camMode);
+ }
+
+ // Cam PDN/RST pins
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ if (!((camCfg->camUsed && camCfg->camRstRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10);
+ }
+ if (!((camCfg->camUsed && camCfg->camPdnRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1PdnRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(11);
+ }
+ }
+ }
+ else // cam is unused
+ {
+ availableGpio_B |= HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11);
+ }
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+
+ // Camera2
+ if (cam2Cfg->camUsed || cam2Cfg->cam1Used)
+ {
+ if(cam2Cfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ altMux2 |= CFG_REGS_CSI2_2_PARALLEL_CAM;
+ }
+ else if (cam2Cfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux2 |= CFG_REGS_CSI2_2_SPI_CAM;
+ availableGpio_E |= HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+ else if (cam2Cfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((cam2Cfg->camUsed && (cam2Cfg->camCsiId == HAL_CAM_CSI_1 ||
+ cam2Cfg->camCsiId == HAL_CAM_CSI_2)) ||
+ (cam2Cfg->cam1Used && (cam2Cfg->cam1CsiId == HAL_CAM_CSI_1 ||
+ cam2Cfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ altMux2 |= CFG_REGS_CSI2_2_CSI2;
+ }
+ else
+ {
+ availableGpio_E |= HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8)
+ | HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Invalid cam2 mode: %d", cam2Cfg->camMode);
+ }
+
+ // Cam2 PDN/RST pins
+ if (!((cam2Cfg->camUsed && cam2Cfg->camRstRemap == GPIO_NONE) ||
+ (cam2Cfg->cam1Used && cam2Cfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_E |= HAL_GPIO_BIT(2);
+ }
+ if (!((cam2Cfg->camUsed && cam2Cfg->camPdnRemap == GPIO_NONE) ||
+ (cam2Cfg->cam1Used && cam2Cfg->cam1PdnRemap == GPIO_NONE) ||
+ (altMux2 & CFG_REGS_CSI2_2_CSI2)))
+ {
+ availableGpio_E |= HAL_GPIO_BIT(3);
+ }
+ }
+ else // cam2 is unused
+ {
+ if (!((lcdMode == HAL_LCD_MODE_RGB_16BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT) &&
+ halCfg->goudaCfg.lcd8_23Cam2))
+ {
+ availableGpio_E |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8)
+ | HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+ }
+
+ // UART 1 Pin configuration
+ switch (halCfg->uartCfg[0])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ availableGpio_C |= HAL_GPIO_BIT(6);
+ availableGpio_A |= HAL_GPIO_BIT(14);
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART1 TXD, RXD
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART1 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ // use UART1 TXD, RXD, CTS, RTS, RI, DSR, DCD, DTR
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ HAL_ASSERT(!halCfg->hostUartUsed, "Host UART uses UART1 DCD/DTR");
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART 2 must be unused to use UART1 Modem lines.");
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART1 DSR");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART1 RI");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS
+ | CFG_REGS_UART1_8LINE_UART1_8_LINE;
+ break;
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart 1 Configuration (%d).",
+ halCfg->uartCfg[0]);
+ break;
+ }
+
+ // Host UART
+ if (halCfg->hostUartUsed)
+ {
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART2 uses host UART RXD/TXD.");
+ }
+
+ // UART 2 Pin configuration
+ switch (halCfg->uartCfg[1])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_UART2_HOST_UART
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if (halCfg->uartCfg[0] != HAL_UART_CONFIG_MODEM)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART2 TXD, RXD
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART2 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART2 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART2 RTS");
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_UART2_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart2 Configuration (%d).",
+ halCfg->uartCfg[1]);
+ break;
+ }
+
+ // UART 3 Pin configuration
+ switch (halCfg->uartCfg[2])
+ {
+ case HAL_UART_CONFIG_NONE:
+ availableGpio_D |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART3 TXD, RXD
+ availableGpio_D |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART3 TXD, RXD, CTS, RTS
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart3 Configuration (%d).",
+ halCfg->uartCfg[2]);
+ break;
+ }
+
+ // I2S
+ altMux |= CFG_REGS_DAI_I2S;
+ if (halCfg->i2sCfg.di0Used || halCfg->i2sCfg.di1Used ||
+ halCfg->i2sCfg.di2Used || halCfg->i2sCfg.doUsed)
+ {
+ if (!halCfg->i2sCfg.di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(11);
+ }
+ if (!halCfg->i2sCfg.di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(12);
+ }
+ if (halCfg->i2sCfg.di2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x4) == 0, "Keyin 2 uses I2S DI2");
+ altMux |= CFG_REGS_I2S_DI_2_I2S_DI_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_I2S_DI_2_KEYIN_2;
+ if ((halCfg->keyInMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(2);
+ }
+ }
+ if (!halCfg->i2sCfg.doUsed)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(13);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13);
+ }
+
+ // I2S2
+ if (halCfg->i2s2Cfg.di0Used || halCfg->i2s2Cfg.di1Used ||
+ halCfg->i2s2Cfg.di2Used || halCfg->i2s2Cfg.doUsed)
+ {
+ HAL_ASSERT(!halCfg->emacUsed, "EMAC uses I2S2 pins");
+ if (!halCfg->i2s2Cfg.di0Used)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(13);
+ }
+ if (!halCfg->i2s2Cfg.di1Used)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->i2s2Cfg.doUsed)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(15);
+ }
+ }
+ else
+ {
+ availableGpio_D |= HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+
+ // LPS CO1
+ if (halCfg->useLpsCo1)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x10) == 0, "Keyin 4 uses LPS_CO1");
+ altMux |= CFG_REGS_LPSCO_1_LPSCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_LPSCO_1_KEYIN_4;
+ if ((halCfg->keyInMask & 0x10) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // TCO
+ if (halCfg->usedTco & 0x1)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x1) == 0, "Keyout 0 uses TCO0");
+ altMux |= CFG_REGS_TCO_0_TCO_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_0_KEYOUT_0;
+ if ((halCfg->keyOutMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(3);
+ }
+ }
+
+ if (halCfg->usedTco & 0x2)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x2) == 0, "Keyout 1 uses TCO1");
+ altMux |= CFG_REGS_TCO_1_TCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_1_KEYOUT_1;
+ if ((halCfg->keyOutMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(4);
+ }
+ }
+
+ if (halCfg->usedTco & 0x4)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x4) == 0, "Keyout 2 uses TCO2");
+ altMux |= CFG_REGS_TCO_2_TCO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_2_KEYOUT_2;
+ if ((halCfg->keyOutMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(5);
+ }
+ }
+
+ // PWM
+ if (halCfg->pwmCfg.pwtUsed)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x20) == 0, "Keyin 5 uses PWT");
+ altMux |= CFG_REGS_GPO_0_PWT;
+ }
+ else if (halCfg->keyInMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_0_KEYIN_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_0_GPO_0;
+ availableGpo_A |= HAL_GPO_BIT(0);
+ }
+
+ if (halCfg->pwmCfg.lpgUsed)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x20) == 0, "Keyout 5 uses LPG");
+ altMux |= CFG_REGS_GPO_1_LPG;
+ }
+ else if (halCfg->keyOutMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_1_KEYOUT_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_1_GPO_1;
+ availableGpo_A |= HAL_GPO_BIT(1);
+ }
+
+ if (halCfg->pwmCfg.pwl1Used)
+ {
+ HAL_ASSERT(!halCfg->useClk32k, "Clk 32k uses PWL1");
+ altMux |= CFG_REGS_GPO_2_PWL_1;
+ }
+ else if (halCfg->useClk32k)
+ {
+ // Default to GPO low output
+ // 32K clock will be enabled per request
+ //altMux |= CFG_REGS_GPO_2_CLK_32K;
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ availableGpo_A |= HAL_GPO_BIT(2);
+ }
+
+ // Clock out and host clock
+ if (halCfg->clkOutUsed)
+ {
+ HAL_ASSERT(!halCfg->hostClkUsed, "HST_CLK uses CLK_OUT pin");
+ altMux |= CFG_REGS_CLK_OUT_CLK_OUT;
+ }
+ else if (halCfg->hostClkUsed)
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ }
+ else
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ availableGpo_A |= HAL_GPO_BIT(8);
+ }
+
+ // SPI
+ if (halCfg->spiCfg[0].cs0Used || halCfg->spiCfg[0].cs1Used ||
+ halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT(!(halCfg->modemSpiCfg[0].cs0Used ||
+ halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used), "Modem SPI1 is in use");
+ altMux |= CFG_REGS_AP_SPI1_AP_SPI1;
+ if (!halCfg->spiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->spiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x2) == 0, "Keyin 1 uses SPI1 CS2");
+ altMux |= CFG_REGS_SPI1_CS_2_SPI1_CS_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_SPI1_CS_2_KEYIN_1;
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ if (!halCfg->spiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->spiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else // AP SPI1 unused
+ {
+ altMux |= CFG_REGS_AP_SPI1_BB_SPI1;
+ if (halCfg->modemSpiCfg[0].cs0Used || halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used)
+ {
+ if (!halCfg->modemSpiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->modemSpiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (!halCfg->modemSpiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->modemSpiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ availableGpio_C |= HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ }
+ if (halCfg->spiCfg[1].cs0Used || halCfg->spiCfg[1].cs1Used)
+ {
+ if (!halCfg->spiCfg[1].cs0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(5);
+ }
+ if (halCfg->spiCfg[1].cs1Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x8) == 0, "Keyin 3 uses SPI2 CS1");
+ altMux |= CFG_REGS_KEYIN_3_SPI2_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYIN_3_KEYIN_3;
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+ if (!halCfg->spiCfg[1].di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(3);
+ }
+ if (!halCfg->spiCfg[1].di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(4);
+ }
+ }
+ else // AP SPI2 unused
+ {
+ availableGpio_A |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+
+ // Standalone keyin/out
+ if ((halCfg->keyInMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(0);
+ }
+
+ // SDMMC
+ if (!halCfg->sdmmcCfg.sdmmcUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->sdmmcCfg.sdmmc2Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16);
+ if (!halCfg->sdio2Uart1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20);
+ }
+ }
+ HAL_ASSERT(!(parallelNandUsed && halCfg->sdmmcCfg.sdmmc3Used),
+ "Parallel NAND uses SDMMC3 pins");
+
+ // SDIO2_UART1
+ if (halCfg->sdio2Uart1Used)
+ {
+ HAL_ASSERT(halCfg->uartCfg[0] == HAL_UART_CONFIG_NONE,
+ "UART1 has been configured on UART1 pins");
+ altMux2 |= CFG_REGS_UART1_SDIO2_UART1;
+ }
+ else
+ {
+ altMux2 |= CFG_REGS_UART1_SDIO2_SDIO2;
+ }
+
+ // EMAC
+ if (halCfg->emacUsed)
+ {
+ altMux2 |= CFG_REGS_MAC_EN_ENABLE;
+ }
+ else
+ {
+ altMux2 |= CFG_REGS_MAC_EN_DISABLE;
+ }
+
+ // SIM
+ if (!hal_BoardSimUsed(2))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27);
+ }
+
+ if (hal_BoardSimUsed(3))
+ {
+ HAL_ASSERT(!halCfg->emacUsed, "EMAC uses SIM3 pins");
+ }
+ else
+ {
+ if (!halCfg->emacUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30);
+ }
+ }
+
+ UINT32 gpioMask;
+ // GPIO_C mask check
+ gpioMask = ~availableGpio_C & halCfg->usedGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO C are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_C &
+ (~halCfg->usedGpio_C & ~halCfg->noConnectGpio_C);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO C declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_A mask check
+ gpioMask = ~availableGpio_A & halCfg->usedGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO A are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_A &
+ (~halCfg->usedGpio_A & ~halCfg->noConnectGpio_A);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO A declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_B mask check
+ gpioMask = ~availableGpio_B & halCfg->usedGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO B are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_B &
+ (~halCfg->usedGpio_B & ~halCfg->noConnectGpio_B);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO B declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_D mask check
+ gpioMask = ~availableGpio_D & halCfg->usedGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO D are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_D &
+ (~halCfg->usedGpio_D & ~halCfg->noConnectGpio_D);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO D declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_E mask check
+ gpioMask = ~availableGpio_E & halCfg->usedGpio_E;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO E are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_E & halCfg->noConnectGpio_E;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO E declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_E & halCfg->noConnectGpio_E;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO E declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_E &
+ (~halCfg->usedGpio_E & ~halCfg->noConnectGpio_E);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO E declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPO_A mask check
+ gpioMask = ~availableGpo_A & halCfg->usedGpo_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPO A are not available (0x%x)",
+ gpioMask);
+
+#endif // !FPGA
+
+ // Set IO drive
+ hwp_configRegs->IO_Drive1_Select = halCfg->ioDrive.select1;
+ hwp_configRegs->IO_Drive2_Select = halCfg->ioDrive.select2;
+
+ // Set the not connected ones as output and drive 0
+ // But keep boot mode GPIOs as input to avoid current leakage
+ noConnectMask_C = halCfg->noConnectGpio_C & ~bootModeGpio_C;
+ noConnectMask_A = halCfg->noConnectGpio_A & ~bootModeGpio_A;
+ noConnectMask_B = halCfg->noConnectGpio_B & ~bootModeGpio_B;
+ noConnectMask_D = halCfg->noConnectGpio_D & ~bootModeGpio_D;
+ noConnectMask_E = halCfg->noConnectGpio_E & ~bootModeGpio_E;
+
+ hwp_gpio->gpio_clr = noConnectMask_C;
+ hwp_gpio->gpio_oen_set_out = noConnectMask_C;
+
+ hwp_apGpioA->gpio_clr = noConnectMask_A;
+ hwp_apGpioA->gpio_oen_set_out = noConnectMask_A;
+
+ hwp_apGpioB->gpio_clr = noConnectMask_B;
+ hwp_apGpioB->gpio_oen_set_out = noConnectMask_B;
+
+ hwp_apGpioD->gpio_clr = noConnectMask_D;
+ hwp_apGpioD->gpio_oen_set_out = noConnectMask_D;
+
+ hwp_apGpioE->gpio_clr = noConnectMask_E;
+ hwp_apGpioE->gpio_oen_set_out = noConnectMask_E;
+
+ // Init GPO_A values
+ gpoClr_A = availableGpo_A;
+ if (halCfg->useClk32k)
+ {
+ // Init 32K clock pin to low (by setting up GPO)
+ gpoClr_A |= HAL_GPO_BIT(2);
+ }
+#ifdef _TGT_AP_GPIO_USBID_CTRL
+ // if GPO_1 used for usb id, it should be high
+ gpoClr_A &= ~(HAL_GPO_BIT(1));
+#endif
+ hwp_apGpioA->gpo_clr = gpoClr_A;
+
+ // Configure MUX after initializing all the GPO pins
+ // (GPIO pins are in input mode by default)
+
+ // Set GPIO mode
+ hwp_configRegs->BB_GPIO_Mode = availableGpio_C;
+ hwp_configRegs->AP_GPIO_A_Mode = availableGpio_A;
+ hwp_configRegs->AP_GPIO_B_Mode = availableGpio_B;
+ hwp_configRegs->AP_GPIO_D_Mode = availableGpio_D;
+ hwp_configRegs->AP_GPIO_E_Mode = availableGpio_E;
+ // Set Alt Mux configuration
+ hwp_configRegs->Alt_mux_select = altMux;
+ hwp_configRegs->Alt_mux_select2 = altMux2;
+
+ // --------------------------------------------------
+ // As of now, all connected GPIOs, which are as GPIO
+ // or not used at all but connected are configured as
+ // GPIOs in input mode, except for Gouda reset pins
+ // --------------------------------------------------
+
+}
+
+
+// =============================================================================
+// hal_BoardSetup
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+//PROTECTED VOID hal_BoardSetup(CONST HAL_CFG_CONFIG_T* halCfg)
+PUBLIC INT32 hal_BoardSetup(INT8 run_mode)
+{
+ g_bootBootMode = rda_hwcfg_get();
+ hal_BoardSetupGeneral(&hal_cfg);
+
+ if(g_halConfigError)
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
diff --git a/board/rda/rda8810e/u-boot-spl.lds b/board/rda/rda8810e/u-boot-spl.lds
new file mode 100644
index 0000000000..afe35fd2a8
--- /dev/null
+++ b/board/rda/rda8810e/u-boot-spl.lds
@@ -0,0 +1,35 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00100100;
+ . = ALIGN(4);
+ .text :
+ {
+ __start = .;
+ arch/arm/cpu/armv7/start.o (.text)
+ *(.text)
+ }
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+ . = ALIGN(4);
+ . = .;
+ . = ALIGN(4);
+ __image_copy_end = .;
+ _end = .;
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start = .;
+ *(.bss*)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ ASSERT((ABSOLUTE(__bss_end__) < 0x00110000), \
+ "too big data in spl, don't exceed intrenal ram");
+ }
+}
diff --git a/board/rda/rda8810h/Makefile b/board/rda/rda8810h/Makefile
new file mode 100644
index 0000000000..7412489b30
--- /dev/null
+++ b/board/rda/rda8810h/Makefile
@@ -0,0 +1,82 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += clock_config.o clock.o ddr3.o
+else
+COBJS-$(CONFIG_MACH_RDA8810H) += hal_config.o
+endif
+
+RDA_TARGET_DEF_FILE := $(ANDROID_BUILD_TOP)/$(RDA_TARGET_DEVICE_DIR)/target.def
+RDA_GET_MAKEFILE_VAR_FUNC = $(strip $(shell sed -n 's/^[ ]*$(1)[ ]*[?:]\?=\([^\#]\+\)\#*.*$$/\1/p' $(2)))
+
+NUMBER_OF_SIM := $(call RDA_GET_MAKEFILE_VAR_FUNC,NUMBER_OF_SIM,$(RDA_TARGET_DEF_FILE))
+ifeq ($(NUMBER_OF_SIM),)
+$(error Failed to get NUMBER_OF_SIM in $(RDA_TARGET_DEF_FILE))
+endif
+
+USER_SIM_ORDER := $(call RDA_GET_MAKEFILE_VAR_FUNC,USER_SIM_ORDER,$(RDA_TARGET_DEF_FILE))
+ifeq ($(USER_SIM_ORDER),)
+$(error Failed to get USER_SIM_ORDER in $(RDA_TARGET_DEF_FILE))
+endif
+
+NULL_STRING :=
+SPACE := ${NULL_STRING} # end of the line
+COMMA := ,
+TGT_SIM_ORDER := $(foreach SIM,$(USER_SIM_ORDER),$(SIM)$(COMMA))
+TGT_SIM_ORDER := $(subst ${SPACE},,${TGT_SIM_ORDER})
+
+CPPFLAGS_board/$(BOARDDIR)/hal_config.o += -I$(TOPDIR)/board/$(VENDOR)/common/include -DTGT_SIM_ORDER=$(TGT_SIM_ORDER) -DNUMBER_OF_SIM=$(NUMBER_OF_SIM)
+
+ifeq ($(strip $(TARGET_TABLET_MODE)),true)
+CPPFLAGS_board/$(BOARDDIR)/clock.o += -DTARGET_TABLET_MODE
+endif
+
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/rda8810h/clock.c b/board/rda/rda8810h/clock.c
new file mode 100644
index 0000000000..45caa4177d
--- /dev/null
+++ b/board/rda/rda8810h/clock.c
@@ -0,0 +1,1329 @@
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/ispi.h>
+#include <asm/arch/rda_sys.h>
+#include "clock_config.h"
+#include "debug.h"
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#if (PMU_VBUCK1_VAL < 0 || PMU_VBUCK1_VAL > 15)
+#error "Invalid PMU_VBUCK1_VAL"
+#endif
+#if (PMU_VBUCK3_VAL < 0 || PMU_VBUCK3_VAL > 15)
+#error "Invalid PMU_VBUCK3_VAL"
+#endif
+#ifdef PMU_VBUCK4_VAL
+#if (PMU_VBUCK4_VAL < 0 || PMU_VBUCK4_VAL > 15)
+#error "Invalid PMU_VBUCK4_VAL"
+#endif
+#endif
+
+//#define DO_SIMPLE_DDR_TEST
+//#define DO_DDR_PLL_DEBUG
+
+enum {
+ AP_CPU_CLK_IDX = 0,
+ AP_BUS_CLK_IDX,
+ AP_MEM_CLK_IDX,
+ AP_USB_CLK_IDX,
+};
+
+static int pll_enabled(int idx)
+{
+ if ((hwp_sysCtrlAp->Cfg_Pll_Ctrl[idx] &
+ (SYS_CTRL_AP_AP_PLL_ENABLE_MASK |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK)) ==
+ (SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET))
+ return 1;
+ else
+ return 0;
+}
+
+static int usb_in_use = 0;
+
+static void check_usb_usage(void)
+{
+ unsigned int mask = SYS_CTRL_AP_BUS_SEL_FAST_SLOW |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_MASK |
+ SYS_CTRL_AP_PLL_LOCKED_USB_MASK;
+ unsigned int reg = SYS_CTRL_AP_BUS_SEL_FAST_FAST |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED |
+ SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED;
+
+ if ((hwp_sysCtrlAp->Sel_Clock & mask) == reg &&
+ pll_enabled(AP_BUS_CLK_IDX) &&
+ pll_enabled(AP_USB_CLK_IDX))
+ usb_in_use = 1;
+ else
+ usb_in_use = 0;
+}
+
+#ifdef DO_SIMPLE_DDR_TEST
+
+void mem_test_write(void)
+{
+ volatile unsigned int *addr;
+
+ printf("write ddr test!!!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+ while((unsigned int)addr < 0x81000000)
+ {
+ *addr = (unsigned int )addr;
+ addr++;
+ }
+}
+
+void mem_test_read(void)
+{
+ volatile unsigned int *addr;
+
+ printf("read ddr!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+
+ while((unsigned int)addr < 0x81000000)
+ {
+ if (*addr != (unsigned int)addr){
+ int i = 0;
+
+ printf("test error!!!!!, addr = %x\n", (unsigned int)addr);
+ for (i = 0; i < 80;i++){
+ printf("%x ", *(addr + i));
+ if ((i % 4) == 0)
+ printf("\n");
+ }
+
+ return;
+ }
+
+ addr++;
+ }
+ printf("test complete!\n");
+}
+
+#endif /* DO_SIMPLE_DDR_TEST */
+
+#ifndef CONFIG_RDA_FPGA
+
+// PMU bit fields
+#define PMU_SET_BITFIELD(dword, bitfield, value) \
+ (((dword) & ~(bitfield ## _MASK)) | (bitfield(value)))
+
+#define RDA_PMU_VBUCK1_BIT_ACT(n) (((n)&0xf)<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_SHIFT (12)
+
+#define RDA_PMU_VBUCK4_BIT_ACT_SHIFT (4)
+#define RDA_PMU_VBUCK4_BIT_ACT_MASK (0xf<<4)
+#define RDA_PMU_VBUCK4_BIT_ACT(n) (((n)&0xf)<<4)
+
+#define RDA_PMU_VBUCK3_BIT_ACT_SHIFT (12)
+#define RDA_PMU_VBUCK3_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK3_BIT_ACT(n) (((n)&0xf)<<12)
+
+struct pll_freq {
+ UINT32 freq_mhz;
+ UINT16 major;
+ UINT16 minor;
+ UINT16 with_div;
+ UINT16 div;
+};
+
+typedef enum {
+ PLL_REG_CPU_BASE = 0x00,
+ PLL_REG_BUS_BASE = 0x20,
+ PLL_REG_MEM_BASE = 0x60,
+ PLL_REG_USB_BASE = 0x80,
+} PLL_REG_BASE_INDEX_t;
+
+typedef enum {
+ PLL_REG_OFFSET_01H = 1,
+ PLL_REG_OFFSET_02H = 2,
+ PLL_REG_OFFSET_DIV = 3,
+ PLL_REG_OFFSET_04H = 4,
+ PLL_REG_OFFSET_MAJOR = 5,
+ PLL_REG_OFFSET_MINOR = 6,
+ PLL_REG_OFFSET_07H = 7,
+} PLL_REG_OFFSET_INDEX_t;
+
+static struct pll_freq pll_freq_table[] = {
+ /* MHz Major Minor div */
+ {1600, 0x7B13, 0xB138, 0, 0x0000},
+ {1200, 0x5C4E, 0xC4EC, 0, 0x0000},
+ {1000, 0x4BEC, 0x4EC4, 0, 0x0000},
+ { 988, 0x4000, 0x0000, 0, 0x0000},
+ { 800, 0x3C00, 0x0000, 0, 0x0000},
+ { 600, 0x2E27, 0x6274, 0, 0x0000},
+ { 533, 0x2900, 0x0000, 1, 0xc797},
+ { 519, 0x27EC, 0x4EC4, 1, 0xc797},
+ { 500, 0x2676, 0x2762, 1, 0xc797},
+ { 480, 0x24EC, 0x4EC4, 0, 0x0000},
+ { 455, 0x2300, 0x0000, 1, 0xC297},
+ { 416, 0x1FD8, 0x0000, 1, 0xCB97},
+ /* 800M div 1, PLL:800M DDR:400M for mem pll only */
+ { 400, 0x1F00, 0x0000, 1, 0xCA97},
+ { 355, 0x369D, 0x89D8, 1, 0xD597},
+ /* 702M div 1, PLL:702M DDR:351M for mem pll only */
+ { 351, 0x3600, 0x0000, 1, 0xD297},
+ { 333, 0x333B, 0x13B1, 1, 0xD097},
+ /* 624M div 1, PLL:624M DDR:312M for mem pll only */
+ { 312, 0x3000, 0x0000, 1, 0xD897},
+ { 290, 0x2C9D, 0x89D8, 1, 0xE097},
+ /* 520M div 1, PLL:520M DDR:260M for mem pll only */
+ { 260, 0x2800, 0x0000, 1, 0xE897},
+ /* 800M div 2, PLL:400M DDR:200M for mem pll only */
+ { 200, 0x3D89, 0xD89C, 1, 0x0006},
+ /* DDR:156M for mem pll only */
+ { 156, 0x3000, 0x0000, 1, 0x0006},
+ /* 800M div 4, PLL:200M DDR:100M for mem pll only */
+ { 100, 0x3D89, 0xD89C, 1, 0x0005},
+ /* 800M div 8, PLL:100M DDR:50M for mem pll only */
+ { 50, 0x3D89, 0xD89C, 1, 0x0004},
+};
+
+static const struct clock_config *g_clock_config;
+
+#ifdef DO_DDR_PLL_DEBUG
+static struct clock_config clock_debug_config;
+static UINT32 ddrfreq = 400, ddr32bit = 0;
+#endif
+
+static void sys_shutdown_pll(void)
+{
+ int i;
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ if (usb_in_use) {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ } else {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_SLOW
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ }
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET;
+ }
+}
+
+static void sys_setup_pll(void)
+{
+ int i;
+ UINT32 mask;
+ UINT32 locked;
+ int cnt = 10; //10us, according to IC, the pll must be locked
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+
+ if (AP_MEM_CLK_IDX == i)
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(1)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ else
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ }
+
+ mask = SYS_CTRL_AP_PLL_LOCKED_CPU_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_MASK
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_MASK
+ ;
+ locked = SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED
+ ;
+
+ while (((hwp_sysCtrlAp->Sel_Clock & mask) != locked) && cnt) {
+ udelay(1);
+ cnt--;
+ }
+ if (cnt == 0) {
+ printf("WARNING, cannot lock cpu/bus/mem pll 0x%08x ",
+ hwp_sysCtrlAp->Sel_Clock);
+ printf("but we run anyway ...\n");
+ }
+
+ for (i = 0; i < 3; i++) {
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] |=
+ SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE;
+ }
+
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_FAST
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+}
+
+static void sys_setup_clk(void)
+{
+ // Disable some power-consuming clocks
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_APO_Enable = SYS_CTRL_AP_ENABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Enable = SYS_CTRL_AP_ENABLE_MEM_VPU;
+#else
+ hwp_sysCtrlAp->Clk_APO_Disable = SYS_CTRL_AP_DISABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Disable = SYS_CTRL_AP_DISABLE_MEM_VPU;
+#endif
+
+ // Init clock gating mode
+ hwp_sysCtrlAp->Clk_CPU_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL | SYS_CTRL_AP_MODE_APB0_CONF_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL;
+#endif
+ hwp_sysCtrlAp->Clk_AXIDIV2_Mode = 0;
+ hwp_sysCtrlAp->Clk_GCG_Mode = SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL
+ | SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL;
+ hwp_sysCtrlAp->Clk_AHB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB2_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_MEM_Mode = SYS_CTRL_AP_MODE_CLK_MEM_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_MEM_Mode = 0;
+#endif
+ //hwp_sysCtrlAp->Clk_APO_Mode = SYS_CTRL_AP_MODE_APOC_VPU_MANUAL;
+
+ // Init module frequency
+ hwp_sysCtrlAp->Cfg_Clk_AP_CPU = g_clock_config->CLK_CPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_AXI = g_clock_config->CLK_AXI;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GCG = g_clock_config->CLK_GCG;
+
+ if (!usb_in_use) {
+ hwp_sysCtrlAp->Cfg_Clk_AP_AHB1 = g_clock_config->CLK_AHB1;
+ }
+
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB1 = g_clock_config->CLK_APB1;
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB2 = g_clock_config->CLK_APB2;
+ hwp_sysCtrlAp->Cfg_Clk_AP_MEM = g_clock_config->CLK_MEM;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GPU = g_clock_config->CLK_GPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VPU = g_clock_config->CLK_VPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VOC = g_clock_config->CLK_VOC;
+ hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH = g_clock_config->CLK_SFLSH;
+}
+
+static void print_sys_reg(char *name, UINT32 value)
+{
+ printf("clk %s = %lx\n", name, value);
+}
+
+static void sys_dump_clk(void)
+{
+ print_sys_reg("CPU", hwp_sysCtrlAp->Cfg_Clk_AP_CPU);
+ print_sys_reg("AXI", hwp_sysCtrlAp->Cfg_Clk_AP_AXI);
+ print_sys_reg("GCG", hwp_sysCtrlAp->Cfg_Clk_AP_GCG);
+ print_sys_reg("AHB1", hwp_sysCtrlAp->Cfg_Clk_AP_AHB1);
+ print_sys_reg("APB1", hwp_sysCtrlAp->Cfg_Clk_AP_APB1);
+ print_sys_reg("APB2", hwp_sysCtrlAp->Cfg_Clk_AP_APB2);
+ print_sys_reg("MEM", hwp_sysCtrlAp->Cfg_Clk_AP_MEM);
+ print_sys_reg("GPU", hwp_sysCtrlAp->Cfg_Clk_AP_GPU);
+ print_sys_reg("VPU", hwp_sysCtrlAp->Cfg_Clk_AP_VPU);
+ print_sys_reg("VOC", hwp_sysCtrlAp->Cfg_Clk_AP_VOC);
+ print_sys_reg("SFLSH", hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH);
+}
+
+static int pll_freq_set(UINT32 reg_base, UINT32 freq_mhz)
+{
+ int i;
+ struct pll_freq *freq;
+ unsigned int major, minor;
+ unsigned short value_02h;
+
+ /* find pll_freq */
+ for (i = 0; i < ARRAY_SIZE(pll_freq_table); i++) {
+ if (pll_freq_table[i].freq_mhz == freq_mhz)
+ break;
+ }
+ if (i >= ARRAY_SIZE(pll_freq_table)) {
+ printf("pll_freq_set, fail to find freq\n");
+ return -1;
+ }
+
+ freq = &pll_freq_table[i];
+ if (freq->with_div && (reg_base == PLL_REG_MEM_BASE)) {
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV,
+ freq->div);
+ // Calculate the real MEM PLL freq
+ freq_mhz *= (1 << (8 - (freq->div & 0x7)));
+ }
+ if (freq_mhz >= 800 || reg_base == PLL_REG_USB_BASE) {
+ value_02h = 0x0309;
+ // Div PLL freq by 2
+ minor = ((freq->major & 0xFFFF) << 14) |
+ ((freq->minor >> 2) & 0x3FFF);
+ minor >>= 1;
+ // Recalculate the divider
+ major = (minor >> 14) & 0xFFFF;
+ minor = (minor << 2) & 0xFFFF;
+ } else {
+ value_02h = 0x0209;
+ major = freq->major;
+ minor = freq->minor;
+ }
+ if (reg_base == PLL_REG_USB_BASE)
+ value_02h ^= (1 << 8);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_02H, value_02h);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MAJOR, major);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MINOR, minor);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0010);
+
+ return 0;
+}
+
+static void pll_setup_freq(void)
+{
+ pll_freq_set(PLL_REG_CPU_BASE, g_clock_config->PLL_FREQ_CPU);
+ // Always configure BUS PLL, even when it is being used
+ pll_freq_set(PLL_REG_BUS_BASE, g_clock_config->PLL_FREQ_BUS);
+ pll_freq_set(PLL_REG_MEM_BASE, g_clock_config->PLL_FREQ_MEM);
+ pll_freq_set(PLL_REG_USB_BASE, g_clock_config->PLL_FREQ_USB);
+}
+
+static void print_pll_freq(char *name, UINT32 value)
+{
+ printf("pll freq %s = %d\n", name, (int)value);
+}
+
+static void sys_dump_pll_freq(void)
+{
+ print_pll_freq("CPU", g_clock_config->PLL_FREQ_CPU);
+ print_pll_freq("BUS", g_clock_config->PLL_FREQ_BUS);
+ print_pll_freq("MEM", g_clock_config->PLL_FREQ_MEM);
+ //print_pll_freq("USB", g_clock_config->PLL_FREQ_USB);
+}
+
+static void pmu_get_efuse_dcdc(int buckVoltLow[])
+{
+ static const u8 setBitCnt[8] = { 0, 1, 1, 2, 1, 2, 2, 3, };
+ u16 dcdc;
+ int i;
+
+ ispi_reg_write(0x51, 0x02ed);
+ udelay(2000);
+ ispi_reg_write(0x51, 0x02fd);
+ dcdc = ispi_reg_read(0x52);
+ ispi_reg_write(0x51, 0x0200);
+
+ for (i = 0; i < 4; i++) {
+ buckVoltLow[i] = (setBitCnt[dcdc & 0x7] > 1);
+ dcdc >>= 3;
+ }
+}
+
+static void pmu_setup_init(void)
+{
+ u32 value;
+ int buck_volt_low[4] = { 0, };
+
+ rda_nand_iodrive_set();
+
+#ifdef CONFIG_RDA_PDL
+ enable_charger(0);
+#endif
+
+ ispi_open(1);
+
+ // Disable vibrator
+ ispi_reg_write(0x03, 0x9FFF);
+ // Enable bandgap chopper mode
+ ispi_reg_write(0x0F, 0x1E90);
+ // Enable high AC throttling
+ ispi_reg_write(0x12, 0x1218);
+#ifdef TARGET_TABLET_MODE
+ // Charger current (cc = 6, pre = 7)
+ ispi_reg_write(0x13, 0x1B70);
+#else
+ // Charger current (cc = 2, pre = 7)
+ ispi_reg_write(0x13, 0x1970);
+#endif
+ // Vcore DCDC freq
+ ispi_reg_write(0x2D, 0x96BA);
+ ispi_reg_write(0x2E, 0x12AA);
+ // Get efuse dcdc
+ pmu_get_efuse_dcdc(buck_volt_low);
+ // Vcore voltage
+ value = 0x9244;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK1_BIT_ACT,
+ PMU_VBUCK1_VAL +
+ ((PMU_VBUCK1_VAL < 15 && buck_volt_low[0]) ? 1 : 0));
+ ispi_reg_write(0x2F, value);
+ // DDR PWM mode
+ ispi_reg_write(0x0D, 0x92D0);
+ // DDR voltage
+ value = 0xAAB5;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK3_BIT_ACT,
+ PMU_VBUCK3_VAL +
+ ((PMU_VBUCK3_VAL < 15 && buck_volt_low[2]) ? 1 : 0));
+#ifdef PMU_VBUCK4_VAL
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK4_BIT_ACT,
+ PMU_VBUCK4_VAL +
+ ((PMU_VBUCK4_VAL < 15 && buck_volt_low[3]) ? 1 : 0));
+ value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ // vBuck4 in low voltage range
+ ispi_reg_write(0x36, 0x6E45);
+#else
+ ispi_reg_write(0x36, 0x6E54);
+#endif
+ ispi_reg_write(0x2A, value);
+ // DDR power parameters
+ ispi_reg_write(0x4A, 0x96AA);
+ ispi_reg_write(0x4B, 0x96AA);
+
+ ispi_open(0);
+}
+
+static void setup_ddr_vtt(int vtt)
+{
+ printf("setup ddr vtt to %d\n", vtt);
+ ispi_reg_write(0x69, g_clock_config->DDR_TIMING_069H);
+}
+
+#if 0
+/*
+ * we initialize usb clock, but this won't cause the usb clock jitter,
+ * because wo don't setup the usb pll
+ */
+static void usb_clock_pre_init(void)
+{
+ ispi_reg_write(0x83, 0x72ef);
+ ispi_reg_write(0x89, 0x7400);
+}
+#endif
+
+static void pll_setup_init(void)
+{
+ setup_ddr_vtt(DDR_VTT_VAL);
+
+ if (g_clock_config->DDR_CHAN_1_VALID) {
+ ispi_reg_write(0x100, g_clock_config->DDR_TIMING_100H);
+ ispi_reg_write(0x101, g_clock_config->DDR_TIMING_101H);
+ ispi_reg_write(0x102, g_clock_config->DDR_TIMING_102H);
+ ispi_reg_write(0x103, g_clock_config->DDR_TIMING_103H);
+ ispi_reg_write(0x104, g_clock_config->DDR_TIMING_104H);
+ ispi_reg_write(0x105, g_clock_config->DDR_TIMING_105H);
+ ispi_reg_write(0x106, g_clock_config->DDR_TIMING_106H);
+ ispi_reg_write(0x107, g_clock_config->DDR_TIMING_107H);
+ ispi_reg_write(0x108, g_clock_config->DDR_TIMING_108H);
+ ispi_reg_write(0x109, g_clock_config->DDR_TIMING_109H);
+ ispi_reg_write(0x10A, g_clock_config->DDR_TIMING_10AH);
+ ispi_reg_write(0x10B, g_clock_config->DDR_TIMING_10BH);
+ ispi_reg_write(0x10C, g_clock_config->DDR_TIMING_10CH);
+ ispi_reg_write(0x10D, g_clock_config->DDR_TIMING_10DH);
+ ispi_reg_write(0x10E, g_clock_config->DDR_TIMING_10EH);
+ ispi_reg_write(0x10F, g_clock_config->DDR_TIMING_10FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID) {
+ ispi_reg_write(0x120, g_clock_config->DDR_TIMING_120H);
+ ispi_reg_write(0x121, g_clock_config->DDR_TIMING_121H);
+ ispi_reg_write(0x122, g_clock_config->DDR_TIMING_122H);
+ ispi_reg_write(0x123, g_clock_config->DDR_TIMING_123H);
+ ispi_reg_write(0x124, g_clock_config->DDR_TIMING_124H);
+ ispi_reg_write(0x125, g_clock_config->DDR_TIMING_125H);
+ ispi_reg_write(0x126, g_clock_config->DDR_TIMING_126H);
+ ispi_reg_write(0x127, g_clock_config->DDR_TIMING_127H);
+ ispi_reg_write(0x128, g_clock_config->DDR_TIMING_128H);
+ ispi_reg_write(0x129, g_clock_config->DDR_TIMING_129H);
+ ispi_reg_write(0x12A, g_clock_config->DDR_TIMING_12AH);
+ ispi_reg_write(0x12B, g_clock_config->DDR_TIMING_12BH);
+ ispi_reg_write(0x12C, g_clock_config->DDR_TIMING_12CH);
+ ispi_reg_write(0x12D, g_clock_config->DDR_TIMING_12DH);
+ ispi_reg_write(0x12E, g_clock_config->DDR_TIMING_12EH);
+ ispi_reg_write(0x12F, g_clock_config->DDR_TIMING_12FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID) {
+ ispi_reg_write(0x140, g_clock_config->DDR_TIMING_140H);
+ ispi_reg_write(0x141, g_clock_config->DDR_TIMING_141H);
+ ispi_reg_write(0x142, g_clock_config->DDR_TIMING_142H);
+ ispi_reg_write(0x143, g_clock_config->DDR_TIMING_143H);
+ ispi_reg_write(0x144, g_clock_config->DDR_TIMING_144H);
+ ispi_reg_write(0x145, g_clock_config->DDR_TIMING_145H);
+ ispi_reg_write(0x146, g_clock_config->DDR_TIMING_146H);
+ ispi_reg_write(0x147, g_clock_config->DDR_TIMING_147H);
+ ispi_reg_write(0x148, g_clock_config->DDR_TIMING_148H);
+ ispi_reg_write(0x149, g_clock_config->DDR_TIMING_149H);
+ ispi_reg_write(0x14A, g_clock_config->DDR_TIMING_14AH);
+ ispi_reg_write(0x14B, g_clock_config->DDR_TIMING_14BH);
+ ispi_reg_write(0x14C, g_clock_config->DDR_TIMING_14CH);
+ ispi_reg_write(0x14D, g_clock_config->DDR_TIMING_14DH);
+ ispi_reg_write(0x14E, g_clock_config->DDR_TIMING_14EH);
+ ispi_reg_write(0x14F, g_clock_config->DDR_TIMING_14FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID) {
+ ispi_reg_write(0x160, g_clock_config->DDR_TIMING_160H);
+ ispi_reg_write(0x161, g_clock_config->DDR_TIMING_161H);
+ ispi_reg_write(0x162, g_clock_config->DDR_TIMING_162H);
+ ispi_reg_write(0x163, g_clock_config->DDR_TIMING_163H);
+ ispi_reg_write(0x164, g_clock_config->DDR_TIMING_164H);
+ ispi_reg_write(0x165, g_clock_config->DDR_TIMING_165H);
+ ispi_reg_write(0x166, g_clock_config->DDR_TIMING_166H);
+ ispi_reg_write(0x167, g_clock_config->DDR_TIMING_167H);
+ ispi_reg_write(0x168, g_clock_config->DDR_TIMING_168H);
+ ispi_reg_write(0x169, g_clock_config->DDR_TIMING_169H);
+ ispi_reg_write(0x16A, g_clock_config->DDR_TIMING_16AH);
+ ispi_reg_write(0x16B, g_clock_config->DDR_TIMING_16BH);
+ ispi_reg_write(0x16C, g_clock_config->DDR_TIMING_16CH);
+ ispi_reg_write(0x16D, g_clock_config->DDR_TIMING_16DH);
+ ispi_reg_write(0x16E, g_clock_config->DDR_TIMING_16EH);
+ ispi_reg_write(0x16F, g_clock_config->DDR_TIMING_16FH);
+ }
+
+ ispi_reg_write(0x180, g_clock_config->DDR_TIMING_180H);
+ ispi_reg_write(0x181, g_clock_config->DDR_TIMING_181H);
+ ispi_reg_write(0x182, g_clock_config->DDR_TIMING_182H);
+ ispi_reg_write(0x183, g_clock_config->DDR_TIMING_183H);
+ ispi_reg_write(0x184, g_clock_config->DDR_TIMING_184H);
+ ispi_reg_write(0x185, g_clock_config->DDR_TIMING_185H);
+ ispi_reg_write(0x186, g_clock_config->DDR_TIMING_186H);
+ ispi_reg_write(0x187, g_clock_config->DDR_TIMING_187H);
+ ispi_reg_write(0x188, g_clock_config->DDR_TIMING_188H);
+ ispi_reg_write(0x189, g_clock_config->DDR_TIMING_189H);
+ ispi_reg_write(0x18A, g_clock_config->DDR_TIMING_18AH);
+ ispi_reg_write(0x18B, g_clock_config->DDR_TIMING_18BH);
+ ispi_reg_write(0x18C, g_clock_config->DDR_TIMING_18CH);
+
+ //usb_clock_pre_init();
+
+ udelay(5000);
+}
+
+static void pll_setup_mem(void)
+{
+}
+
+static void pll_setup_mem_cal(void)
+{
+}
+
+static void print_pll_reg(UINT32 index, UINT32 value)
+{
+ printf("pll reg %lx = %lx\n", index, value);
+}
+
+static void pll_dump_reg(void)
+{
+ print_pll_reg(0x005, ispi_reg_read(0x005));
+ print_pll_reg(0x006, ispi_reg_read(0x006));
+ print_pll_reg(0x063, ispi_reg_read(0x063));
+ print_pll_reg(0x065, ispi_reg_read(0x065));
+ print_pll_reg(0x066, ispi_reg_read(0x066));
+ print_pll_reg(0x069, ispi_reg_read(0x069));
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ {
+ print_pll_reg(0x100, ispi_reg_read(0x100));
+ print_pll_reg(0x101, ispi_reg_read(0x101));
+ print_pll_reg(0x102, ispi_reg_read(0x102));
+ print_pll_reg(0x103, ispi_reg_read(0x103));
+ print_pll_reg(0x104, ispi_reg_read(0x104));
+ print_pll_reg(0x105, ispi_reg_read(0x105));
+ print_pll_reg(0x106, ispi_reg_read(0x106));
+ print_pll_reg(0x107, ispi_reg_read(0x107));
+ print_pll_reg(0x108, ispi_reg_read(0x108));
+ print_pll_reg(0x109, ispi_reg_read(0x109));
+ print_pll_reg(0x10A, ispi_reg_read(0x10A));
+ print_pll_reg(0x10B, ispi_reg_read(0x10B));
+ print_pll_reg(0x10C, ispi_reg_read(0x10C));
+ print_pll_reg(0x10D, ispi_reg_read(0x10D));
+ print_pll_reg(0x10E, ispi_reg_read(0x10E));
+ print_pll_reg(0x10F, ispi_reg_read(0x10F));
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ {
+ print_pll_reg(0x120, ispi_reg_read(0x120));
+ print_pll_reg(0x121, ispi_reg_read(0x121));
+ print_pll_reg(0x122, ispi_reg_read(0x122));
+ print_pll_reg(0x123, ispi_reg_read(0x123));
+ print_pll_reg(0x124, ispi_reg_read(0x124));
+ print_pll_reg(0x125, ispi_reg_read(0x125));
+ print_pll_reg(0x126, ispi_reg_read(0x126));
+ print_pll_reg(0x127, ispi_reg_read(0x127));
+ print_pll_reg(0x128, ispi_reg_read(0x128));
+ print_pll_reg(0x129, ispi_reg_read(0x129));
+ print_pll_reg(0x12A, ispi_reg_read(0x12A));
+ print_pll_reg(0x12B, ispi_reg_read(0x12B));
+ print_pll_reg(0x12C, ispi_reg_read(0x12C));
+ print_pll_reg(0x12D, ispi_reg_read(0x12D));
+ print_pll_reg(0x12E, ispi_reg_read(0x12E));
+ print_pll_reg(0x12F, ispi_reg_read(0x12F));
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ {
+ print_pll_reg(0x140, ispi_reg_read(0x140));
+ print_pll_reg(0x141, ispi_reg_read(0x141));
+ print_pll_reg(0x142, ispi_reg_read(0x142));
+ print_pll_reg(0x143, ispi_reg_read(0x143));
+ print_pll_reg(0x144, ispi_reg_read(0x144));
+ print_pll_reg(0x145, ispi_reg_read(0x145));
+ print_pll_reg(0x146, ispi_reg_read(0x146));
+ print_pll_reg(0x147, ispi_reg_read(0x147));
+ print_pll_reg(0x148, ispi_reg_read(0x148));
+ print_pll_reg(0x149, ispi_reg_read(0x149));
+ print_pll_reg(0x14A, ispi_reg_read(0x14A));
+ print_pll_reg(0x14B, ispi_reg_read(0x14B));
+ print_pll_reg(0x14C, ispi_reg_read(0x14C));
+ print_pll_reg(0x14D, ispi_reg_read(0x14D));
+ print_pll_reg(0x14E, ispi_reg_read(0x14E));
+ print_pll_reg(0x14F, ispi_reg_read(0x14F));
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ {
+ print_pll_reg(0x160, ispi_reg_read(0x160));
+ print_pll_reg(0x161, ispi_reg_read(0x161));
+ print_pll_reg(0x162, ispi_reg_read(0x162));
+ print_pll_reg(0x163, ispi_reg_read(0x163));
+ print_pll_reg(0x164, ispi_reg_read(0x164));
+ print_pll_reg(0x165, ispi_reg_read(0x165));
+ print_pll_reg(0x166, ispi_reg_read(0x166));
+ print_pll_reg(0x167, ispi_reg_read(0x167));
+ print_pll_reg(0x168, ispi_reg_read(0x168));
+ print_pll_reg(0x169, ispi_reg_read(0x169));
+ print_pll_reg(0x16A, ispi_reg_read(0x16A));
+ print_pll_reg(0x16B, ispi_reg_read(0x16B));
+ print_pll_reg(0x16C, ispi_reg_read(0x16C));
+ print_pll_reg(0x16D, ispi_reg_read(0x16D));
+ print_pll_reg(0x16E, ispi_reg_read(0x16E));
+ print_pll_reg(0x16F, ispi_reg_read(0x16F));
+ }
+
+ print_pll_reg(0x180, ispi_reg_read(0x180));
+ print_pll_reg(0x181, ispi_reg_read(0x181));
+ print_pll_reg(0x182, ispi_reg_read(0x182));
+ print_pll_reg(0x183, ispi_reg_read(0x183));
+ print_pll_reg(0x184, ispi_reg_read(0x184));
+ print_pll_reg(0x185, ispi_reg_read(0x185));
+ print_pll_reg(0x186, ispi_reg_read(0x186));
+ print_pll_reg(0x187, ispi_reg_read(0x187));
+ print_pll_reg(0x188, ispi_reg_read(0x188));
+ print_pll_reg(0x189, ispi_reg_read(0x189));
+ print_pll_reg(0x18A, ispi_reg_read(0x18A));
+ print_pll_reg(0x18B, ispi_reg_read(0x18B));
+ print_pll_reg(0x18C, ispi_reg_read(0x18C));
+}
+
+static int clock_save_config(void)
+{
+ /* save config to nand */
+ return 1;
+}
+
+#ifdef DO_DDR_PLL_DEBUG
+
+static int ddr_get_freq(UINT8 chioce)
+{
+ switch(chioce)
+ {
+ case 1:
+ return 50;
+ case 2:
+ return 100;
+ case 3:
+ return 156;
+ case 4:
+ return 200;
+ case 5:
+ return 290;
+ case 6:
+ return 333;
+ case 7:
+ return 355;
+ case 8:
+ return 400;
+ case 9:
+ return 416;
+ case 10:
+ return 455;
+ case 11:
+ return 519;
+ case 12:
+ return 533;
+ case 13:
+ return 260;
+ default:
+ return -1;
+ }
+}
+
+static void freq_choose(void)
+{
+ UINT8 i = 0, buf[3] = {0}, choice = 0;
+ INT32 freq_temp = 0;
+
+ printf("\nPlese choose the ddr Freq:");
+ printf("\n1.50M 2.100M 3.156M 4.200M 5.290M 6.333M 7.355M 8.400M 9.416M 10.455M 11.519M 12.533M 13.260M");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ serial_puts("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ choice = buf[0] - 0x30;
+ else if (2 == i)
+ choice = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ freq_temp = ddr_get_freq(choice);
+ if (-1 == freq_temp )
+ printf("\n Sorry, the fre you choose is wrong");
+ ddrfreq = freq_temp;
+}
+
+static void data_bits_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+
+ printf("\nPlese choose the ddr data bits:");
+ printf("\n1.16 2.32");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr32bit = 0;
+ else
+ ddr32bit = 1;
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+#if 0
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ printf("\nPlese input DDR voltage(0 ~ 15):");
+ }
+
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+}
+#endif
+
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ if (2 == vcoreselect)
+ printf("\nPlese input DDR buck3 voltage(0 ~ 15):");
+ else
+ printf("\nPlese input DDR buck4 voltage(0 ~ 15):");
+ }
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ if ((vcoreselect == 1) || (vcoreselect == 2))
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+ }
+ else
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 4;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 4);
+ reg_value |= temp ;
+ reg_value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ ispi_reg_write(regid, reg_value);
+ ispi_reg_write(0x0D, 0x92D0);
+ ispi_reg_write(0x4B, 0x96A8);
+ mdelay(100);
+ }
+}
+
+static void pmu_buck4_buck3_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+ UINT8 ddr_voltage_source = 0;
+
+ printf("\nPlese choose the ddr voltage:");
+ printf("\n1.DDR3L 2.DDR3");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr_voltage_source =2;
+ else{
+ ddr_voltage_source = 3;
+ pmu_setup_calibration_voltage(2);
+ }
+ pmu_setup_calibration_voltage(ddr_voltage_source);
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+
+void clock_load_ddr_cal_config(void)
+{
+ clock_debug_config.PLL_FREQ_MEM = ddrfreq;
+ if (ddrfreq < 200)
+ clock_debug_config.DDR_FLAGS |= DDR_FLAGS_DLLOFF;
+ else
+ clock_debug_config.DDR_FLAGS &= ~DDR_FLAGS_DLLOFF;
+
+ if (0 == ddr32bit)
+ {
+ clock_debug_config.DDR_CHAN_3_VALID = 0;
+ clock_debug_config.DDR_CHAN_4_VALID = 0;
+ }
+
+ clock_debug_config.DDR_PARA &= ~DDR_PARA_MEM_BITS_MASK;
+ if (0 == ddr32bit)
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(1);
+ else
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(2);
+}
+
+static int serial_gets(UINT8 *pstr)
+{
+ UINT32 length;
+
+ length = 0;
+ while(1) {
+ pstr[length] = serial_getc();
+ if(pstr[length] == '\r') {
+ pstr[length] = 0x00;
+ break;
+ }
+ else if( pstr[length] == '\b' ) {
+ if(length>0) {
+ length --;
+ printf("\b");
+ }
+ }
+ else {
+ serial_putc(pstr[length]);
+ length ++;
+ }
+
+ if(length > 32)
+ return -1;
+ }
+ return length;
+}
+
+UINT32 asc2hex(UINT8 *pstr, UINT8 len)
+{
+ UINT8 i,ch,mylen;
+ UINT32 hexvalue;
+
+ for(mylen=0,i=0; i<8; i++)
+ {
+ if( pstr[i] == 0 )
+ break;
+ mylen ++;
+ }
+ if( len != 0 )
+ {
+ if(mylen>len)
+ mylen = len;
+ }
+ if(mylen>8)
+ mylen = 8;
+
+ hexvalue = 0;
+ for (i = 0; i < mylen; i++)
+ {
+ hexvalue <<= 4;
+ ch = *(pstr+i);
+ if((ch>='0') && (ch<='9'))
+ hexvalue |= ch - '0';
+ else if((ch>='A') && (ch<='F'))
+ hexvalue |= ch - ('A' - 10);
+ else if((ch>='a') && (ch<='f'))
+ hexvalue |= ch - ('a' - 10);
+ else
+ ;
+ }
+ return(hexvalue);
+}
+
+static int process_cmd(char * cmd)
+{
+ char cmd_element[3][16] = {{0}};
+ char * cmd_temp = cmd;
+ UINT8 i = 0, cmd_element_num = 0, former_space = 1;
+ UINT16 reg = 0, reg_value = 0;
+
+ if (NULL == cmd)
+ return -1;
+
+ while(('\0' != *cmd_temp) && ('\r' != *cmd_temp) && ('\n' != *cmd_temp))
+ {
+ if (' ' == * cmd_temp)
+ {
+ if (0 == former_space)
+ {
+ former_space = 1;
+ cmd_element[cmd_element_num][i] = '\0';
+ cmd_element_num++;
+ if (cmd_element_num > 2)
+ return -1;
+
+ i = 0;
+ }
+ }
+ else
+ {
+ former_space = 0;
+ cmd_element[cmd_element_num][i] = *cmd_temp;
+ i++;
+ if (i > 6)
+ return -1;
+ }
+
+ cmd_temp++;
+ }
+
+ cmd_element[cmd_element_num][i] = '\0';
+
+ if (!strcmp(cmd_element[0], "read"))
+ {
+ if (cmd_element_num == 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1]))
+ return -1;
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = ispi_reg_read(reg);
+ printf("value = 0x%x", reg_value);
+ printf("\nddrPll#");
+ }
+ else if (!strcmp(cmd_element[0], "write"))
+ {
+ if (cmd_element_num != 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1])
+ || ('0' != cmd_element[2][0]) || ('x' != cmd_element[2][1]))
+ return -1;
+
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = (UINT16)asc2hex((UINT8 *)&cmd_element[2][2], 4);
+ ispi_reg_write(reg, reg_value);
+ }
+ else if (!strcmp(cmd_element[0], "finish"))
+ {
+ return 1;
+ }
+ else if (!strcmp(cmd_element[0], "dump"))
+ {
+ pll_dump_reg();
+ printf("ddrPll#");
+ }
+ else
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+static void cmd_input(void)
+{
+ char cmd[48] = {0};
+ int len = 0;
+
+ ispi_open(0);
+ printf("\nddrPll#");
+ while(1)
+ {
+ len = serial_gets((UINT8 *)cmd);
+ printf("\nddrPll#");
+ if (len > 0)
+ {
+ int result = 0;
+
+ result = process_cmd(cmd);
+ if (-1 == result)
+ printf("command error! \nddrPll#");
+ else if (1 == result)
+ break;
+ else
+ continue;
+ }
+ }
+
+ return;
+}
+
+#endif /* DO_DDR_PLL_DEBUG */
+
+int clock_init(void)
+{
+#ifdef DO_DDR_PLL_DEBUG
+ char choice = 'n';
+#endif
+
+ /* First check current usb usage */
+ check_usb_usage();
+
+ printf("Init Clock ...\n");
+ g_clock_config = get_default_clock_config();
+
+ printf("Clock config ver: %d.%d\n",
+ g_clock_config->VERSION_MAJOR, g_clock_config->VERSION_MINOR);
+
+ pmu_setup_init();
+
+#ifdef DO_DDR_PLL_DEBUG
+ printf("If you want to config the ddr para manully ?(y = yes, n = no) \n");
+ choice = serial_getc();
+ if (choice == 'y')
+ {
+ memcpy(&clock_debug_config, g_clock_config,
+ sizeof(clock_debug_config));
+ g_clock_config = &clock_debug_config;
+ pmu_setup_calibration_voltage(1);
+ pmu_buck4_buck3_choose();
+ freq_choose();
+ data_bits_choose();
+ clock_load_ddr_cal_config();
+ }
+#endif
+
+ sys_shutdown_pll();
+ ispi_open(0);
+ pll_setup_init();
+#ifdef DO_DDR_PLL_DEBUG
+ if (choice == 'y')
+ cmd_input();
+#endif
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+
+ if (g_clock_config->DDR_CAL) {
+ printf("Init DDR for ddr_cal\n");
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+ pll_setup_mem_cal();
+ clock_save_config();
+ } else {
+ pll_setup_mem();
+ }
+
+ sys_dump_pll_freq();
+ sys_dump_clk();
+ pll_dump_reg();
+
+ printf("Init DDR, flag = 0x%04x, para = 0x%08lx\n",
+ g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+
+ #ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#else /* CONFIG_RDA_FPGA */
+
+int clock_init(void)
+{
+ u16 ddr_flags = DDR_FLAGS_DLLOFF
+ | DDR_FLAGS_ODT(1)
+ | DDR_FLAGS_RON(0);
+ //16bit
+ u32 ddr_para = DDR_PARA_MEM_BITS(2)
+ | DDR_PARA_BANK_BITS(3)
+ | DDR_PARA_ROW_BITS(3)
+ | DDR_PARA_COL_BITS(1);
+
+ printf("Init DDR\n");
+ ddr_init(ddr_flags, ddr_para);
+ printf("Done\n");
+
+#ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#endif /* CONFIG_RDA_FPGA */
+
diff --git a/board/rda/rda8810h/clock_config.c b/board/rda/rda8810h/clock_config.c
new file mode 100644
index 0000000000..85254c90d7
--- /dev/null
+++ b/board/rda/rda8810h/clock_config.c
@@ -0,0 +1,149 @@
+#ifndef TARGET_TOOL
+#include <common.h>
+#include <asm/arch/factory.h>
+#include "clock_config.h"
+#endif
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+static const struct clock_config clock_default_config = {
+ /* Header */
+ 0, // MAGIC;
+ CLOCK_VER_MAJOR, // VERSION_MAJOR;
+ CLOCK_VER_MINOR, // VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ _TGT_AP_PLL_CPU_FREQ, // PLL_FREQ_CPU; /* 05, 06 */
+ _TGT_AP_PLL_BUS_FREQ, // PLL_FREQ_BUS; /* 25, 26 */
+ _TGT_AP_PLL_MEM_FREQ, // PLL_FREQ_MEM; /* 65, 66 */
+ _TGT_AP_PLL_USB_FREQ, // PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Cal */
+ 0, // DDR_CAL;
+ /* DDR_FLAGS */
+ DDR_FLAGS_ODT(_TGT_AP_DDR_ODT) // 010 -- 120 Ohm
+#if (_TGT_AP_DDR_CLOCK < 200)
+ | DDR_FLAGS_DLLOFF
+#endif
+#ifdef _TGT_AP_DDR_LOWPWR
+ | DDR_FLAGS_LOWPWR
+#endif
+ | DDR_FLAGS_RON(_TGT_AP_DDR_RON), // 00 -- 40 Ohm
+ /* DDR_PARA */
+ DDR_PARA_CHIP_BITS(_TGT_AP_DDR_CHIP_BITS)
+ | DDR_PARA_MEM_BITS(_TGT_AP_DDR_MEM_BITS)
+ | DDR_PARA_BANK_BITS(_TGT_AP_DDR_BANK_BITS)
+ | DDR_PARA_ROW_BITS(_TGT_AP_DDR_ROW_BITS )
+ | DDR_PARA_COL_BITS(_TGT_AP_DDR_COL_BITS),
+
+ /* AP sysctrl */
+ _TGT_AP_CLK_CPU, // CLK_CPU;
+ _TGT_AP_CLK_AXI, // CLK_AXI;
+ _TGT_AP_CLK_GCG, // CLK_GCG;
+ _TGT_AP_CLK_AHB1, // CLK_AHB1;
+ _TGT_AP_CLK_APB1, // CLK_APB1;
+ _TGT_AP_CLK_APB2, // CLK_APB2;
+ _TGT_AP_CLK_MEM, // CLK_MEM;
+ _TGT_AP_CLK_GPU, // CLK_GPU;
+ _TGT_AP_CLK_VPU, // CLK_VPU;
+ _TGT_AP_CLK_VOC, // CLK_VOC;
+ _TGT_AP_CLK_SFLSH, // CLK_SFLSH;
+ 0, // RESERVE;
+
+ /* DDR timings, defined in target */
+ DDR_CHAN_1_VALID_VAL, // DDR_CHAN_1_VALID;
+ DDR_TIMING_100H_VAL, // DDR_TIMING_100H;
+ DDR_TIMING_101H_VAL, // DDR_TIMING_101H;
+ DDR_TIMING_102H_VAL, // DDR_TIMING_102H;
+ DDR_TIMING_103H_VAL, // DDR_TIMING_103H;
+ DDR_TIMING_104H_VAL, // DDR_TIMING_104H;
+ DDR_TIMING_105H_VAL, // DDR_TIMING_105H;
+ DDR_TIMING_106H_VAL, // DDR_TIMING_106H;
+ DDR_TIMING_107H_VAL, // DDR_TIMING_107H;
+ DDR_TIMING_108H_VAL, // DDR_TIMING_108H;
+ DDR_TIMING_109H_VAL, // DDR_TIMING_109H;
+ DDR_TIMING_10AH_VAL, // DDR_TIMING_10AH;
+ DDR_TIMING_10BH_VAL, // DDR_TIMING_10BH;
+ DDR_TIMING_10CH_VAL, // DDR_TIMING_10CH;
+ DDR_TIMING_10DH_VAL, // DDR_TIMING_10DH;
+ DDR_TIMING_10EH_VAL, // DDR_TIMING_10EH;
+ DDR_TIMING_10FH_VAL, // DDR_TIMING_10FH;
+
+ DDR_CHAN_2_VALID_VAL, // DDR_CHAN_2_VALID;
+ DDR_TIMING_120H_VAL, // DDR_TIMING_120H;
+ DDR_TIMING_121H_VAL, // DDR_TIMING_121H;
+ DDR_TIMING_122H_VAL, // DDR_TIMING_122H;
+ DDR_TIMING_123H_VAL, // DDR_TIMING_123H;
+ DDR_TIMING_124H_VAL, // DDR_TIMING_124H;
+ DDR_TIMING_125H_VAL, // DDR_TIMING_125H;
+ DDR_TIMING_126H_VAL, // DDR_TIMING_126H;
+ DDR_TIMING_127H_VAL, // DDR_TIMING_127H;
+ DDR_TIMING_128H_VAL, // DDR_TIMING_128H;
+ DDR_TIMING_129H_VAL, // DDR_TIMING_129H;
+ DDR_TIMING_12AH_VAL, // DDR_TIMING_12AH;
+ DDR_TIMING_12BH_VAL, // DDR_TIMING_12BH;
+ DDR_TIMING_12CH_VAL, // DDR_TIMING_12CH;
+ DDR_TIMING_12DH_VAL, // DDR_TIMING_12DH;
+ DDR_TIMING_12EH_VAL, // DDR_TIMING_12EH;
+ DDR_TIMING_12FH_VAL, // DDR_TIMING_12FH;
+
+ DDR_CHAN_3_VALID_VAL, // DDR_CHAN_3_VALID;
+ DDR_TIMING_140H_VAL, // DDR_TIMING_140H;
+ DDR_TIMING_141H_VAL, // DDR_TIMING_141H;
+ DDR_TIMING_142H_VAL, // DDR_TIMING_142H;
+ DDR_TIMING_143H_VAL, // DDR_TIMING_143H;
+ DDR_TIMING_144H_VAL, // DDR_TIMING_144H;
+ DDR_TIMING_145H_VAL, // DDR_TIMING_145H;
+ DDR_TIMING_146H_VAL, // DDR_TIMING_146H;
+ DDR_TIMING_147H_VAL, // DDR_TIMING_147H;
+ DDR_TIMING_148H_VAL, // DDR_TIMING_148H;
+ DDR_TIMING_149H_VAL, // DDR_TIMING_149H;
+ DDR_TIMING_14AH_VAL, // DDR_TIMING_14AH;
+ DDR_TIMING_14BH_VAL, // DDR_TIMING_14BH;
+ DDR_TIMING_14CH_VAL, // DDR_TIMING_14CH;
+ DDR_TIMING_14DH_VAL, // DDR_TIMING_14DH;
+ DDR_TIMING_14EH_VAL, // DDR_TIMING_14EH;
+ DDR_TIMING_14FH_VAL, // DDR_TIMING_14FH;
+
+ DDR_CHAN_4_VALID_VAL, // DDR_CHAN_4_VALID;
+ DDR_TIMING_160H_VAL, // DDR_TIMING_160H;
+ DDR_TIMING_161H_VAL, // DDR_TIMING_161H;
+ DDR_TIMING_162H_VAL, // DDR_TIMING_162H;
+ DDR_TIMING_163H_VAL, // DDR_TIMING_163H;
+ DDR_TIMING_164H_VAL, // DDR_TIMING_164H;
+ DDR_TIMING_165H_VAL, // DDR_TIMING_165H;
+ DDR_TIMING_166H_VAL, // DDR_TIMING_166H;
+ DDR_TIMING_167H_VAL, // DDR_TIMING_167H;
+ DDR_TIMING_168H_VAL, // DDR_TIMING_168H;
+ DDR_TIMING_169H_VAL, // DDR_TIMING_169H;
+ DDR_TIMING_16AH_VAL, // DDR_TIMING_16AH;
+ DDR_TIMING_16BH_VAL, // DDR_TIMING_16BH;
+ DDR_TIMING_16CH_VAL, // DDR_TIMING_16CH;
+ DDR_TIMING_16DH_VAL, // DDR_TIMING_16DH;
+ DDR_TIMING_16EH_VAL, // DDR_TIMING_16EH;
+ DDR_TIMING_16FH_VAL, // DDR_TIMING_16FH;
+
+ DDR_TIMING_180H_VAL, // DDR_TIMING_180H;
+ DDR_TIMING_181H_VAL, // DDR_TIMING_181H;
+ DDR_TIMING_182H_VAL, // DDR_TIMING_182H;
+ DDR_TIMING_183H_VAL, // DDR_TIMING_183H;
+ DDR_TIMING_184H_VAL, // DDR_TIMING_184H;
+ DDR_TIMING_185H_VAL, // DDR_TIMING_185H;
+ DDR_TIMING_186H_VAL, // DDR_TIMING_186H;
+ DDR_TIMING_187H_VAL, // DDR_TIMING_187H;
+ DDR_TIMING_188H_VAL, // DDR_TIMING_188H;
+ DDR_TIMING_189H_VAL, // DDR_TIMING_189H;
+ DDR_TIMING_18AH_VAL, // DDR_TIMING_18AH;
+ DDR_TIMING_18BH_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_18CH_VAL, // DDR_TIMING_18CH;
+ DDR_TIMING_069H_VAL // DDR_TIMING_18CH;
+};
+
+const struct clock_config *get_default_clock_config(void)
+{
+#ifndef TARGET_TOOL
+ BUILD_BUG_ON(sizeof(struct clock_config) > AP_FACTORY_CLOCK_CFG_LEN);
+#endif
+
+ return &clock_default_config;
+}
+
diff --git a/board/rda/rda8810h/clock_config.h b/board/rda/rda8810h/clock_config.h
new file mode 100644
index 0000000000..3e472df08d
--- /dev/null
+++ b/board/rda/rda8810h/clock_config.h
@@ -0,0 +1,132 @@
+#ifndef __CLOCK_CONFIG_H__
+#define __CLOCK_CONFIG_H__
+
+typedef unsigned long UINT32;
+typedef unsigned short UINT16;
+typedef long INT32;
+typedef short INT16;
+typedef unsigned char UINT8;
+typedef char INT8;
+
+#define CLOCK_VER_MAJOR 2
+#define CLOCK_VER_MINOR 0
+
+struct clock_config {
+ /* Header */
+ UINT32 MAGIC;
+ UINT16 VERSION_MAJOR;
+ UINT16 VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ UINT32 PLL_FREQ_CPU; /* 05, 06 */
+ UINT32 PLL_FREQ_BUS; /* 25, 26 */
+ UINT32 PLL_FREQ_MEM; /* 65, 66 */
+ UINT32 PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Flags */
+ UINT16 DDR_CAL;
+ UINT16 DDR_FLAGS;
+ UINT32 DDR_PARA;
+ /* AP sysctrl */
+ UINT16 CLK_CPU;
+ UINT16 CLK_AXI;
+ UINT16 CLK_GCG;
+ UINT16 CLK_AHB1;
+ UINT16 CLK_APB1;
+ UINT16 CLK_APB2;
+ UINT16 CLK_MEM;
+ UINT16 CLK_GPU;
+ UINT16 CLK_VPU;
+ UINT16 CLK_VOC;
+ UINT16 CLK_SFLSH;
+ UINT16 RESERVE;
+ /* DDR timings */
+ UINT16 DDR_CHAN_1_VALID;
+ UINT16 DDR_TIMING_100H;
+ UINT16 DDR_TIMING_101H;
+ UINT16 DDR_TIMING_102H;
+ UINT16 DDR_TIMING_103H;
+ UINT16 DDR_TIMING_104H;
+ UINT16 DDR_TIMING_105H;
+ UINT16 DDR_TIMING_106H;
+ UINT16 DDR_TIMING_107H;
+ UINT16 DDR_TIMING_108H;
+ UINT16 DDR_TIMING_109H;
+ UINT16 DDR_TIMING_10AH;
+ UINT16 DDR_TIMING_10BH;
+ UINT16 DDR_TIMING_10CH;
+ UINT16 DDR_TIMING_10DH;
+ UINT16 DDR_TIMING_10EH;
+ UINT16 DDR_TIMING_10FH;
+
+ UINT16 DDR_CHAN_2_VALID;
+ UINT16 DDR_TIMING_120H;
+ UINT16 DDR_TIMING_121H;
+ UINT16 DDR_TIMING_122H;
+ UINT16 DDR_TIMING_123H;
+ UINT16 DDR_TIMING_124H;
+ UINT16 DDR_TIMING_125H;
+ UINT16 DDR_TIMING_126H;
+ UINT16 DDR_TIMING_127H;
+ UINT16 DDR_TIMING_128H;
+ UINT16 DDR_TIMING_129H;
+ UINT16 DDR_TIMING_12AH;
+ UINT16 DDR_TIMING_12BH;
+ UINT16 DDR_TIMING_12CH;
+ UINT16 DDR_TIMING_12DH;
+ UINT16 DDR_TIMING_12EH;
+ UINT16 DDR_TIMING_12FH;
+
+ UINT16 DDR_CHAN_3_VALID;
+ UINT16 DDR_TIMING_140H;
+ UINT16 DDR_TIMING_141H;
+ UINT16 DDR_TIMING_142H;
+ UINT16 DDR_TIMING_143H;
+ UINT16 DDR_TIMING_144H;
+ UINT16 DDR_TIMING_145H;
+ UINT16 DDR_TIMING_146H;
+ UINT16 DDR_TIMING_147H;
+ UINT16 DDR_TIMING_148H;
+ UINT16 DDR_TIMING_149H;
+ UINT16 DDR_TIMING_14AH;
+ UINT16 DDR_TIMING_14BH;
+ UINT16 DDR_TIMING_14CH;
+ UINT16 DDR_TIMING_14DH;
+ UINT16 DDR_TIMING_14EH;
+ UINT16 DDR_TIMING_14FH;
+
+ UINT16 DDR_CHAN_4_VALID;
+ UINT16 DDR_TIMING_160H;
+ UINT16 DDR_TIMING_161H;
+ UINT16 DDR_TIMING_162H;
+ UINT16 DDR_TIMING_163H;
+ UINT16 DDR_TIMING_164H;
+ UINT16 DDR_TIMING_165H;
+ UINT16 DDR_TIMING_166H;
+ UINT16 DDR_TIMING_167H;
+ UINT16 DDR_TIMING_168H;
+ UINT16 DDR_TIMING_169H;
+ UINT16 DDR_TIMING_16AH;
+ UINT16 DDR_TIMING_16BH;
+ UINT16 DDR_TIMING_16CH;
+ UINT16 DDR_TIMING_16DH;
+ UINT16 DDR_TIMING_16EH;
+ UINT16 DDR_TIMING_16FH;
+
+ UINT16 DDR_TIMING_180H;
+ UINT16 DDR_TIMING_181H;
+ UINT16 DDR_TIMING_182H;
+ UINT16 DDR_TIMING_183H;
+ UINT16 DDR_TIMING_184H;
+ UINT16 DDR_TIMING_185H;
+ UINT16 DDR_TIMING_186H;
+ UINT16 DDR_TIMING_187H;
+ UINT16 DDR_TIMING_188H;
+ UINT16 DDR_TIMING_189H;
+ UINT16 DDR_TIMING_18AH;
+ UINT16 DDR_TIMING_18BH;
+ UINT16 DDR_TIMING_18CH;
+ UINT16 DDR_TIMING_069H;
+};
+
+const struct clock_config *get_default_clock_config(void);
+
+#endif
diff --git a/board/rda/rda8810h/config.mk b/board/rda/rda8810h/config.mk
new file mode 100644
index 0000000000..39782ba05e
--- /dev/null
+++ b/board/rda/rda8810h/config.mk
@@ -0,0 +1,15 @@
+#
+#the spl code should not exceed the SPL_MAX_SIZE,and if
+#the spl don't up to the max size, paddint the last with
+#zero(or 0xff?)
+
+#48kbytes, 48*1024
+#SPL_APPENDING_TO := 48
+#SPL_MAX_SIZE := 49512
+
+# space for spl(48KiB) & mtd partition table(4KiB),
+# so uboot offset 52KiB(48 + 4).
+
+SPL_APPENDING_TO := 52
+
+CONFIG_SPL_SIGNATURE_CHECK_IMAGE := y
diff --git a/board/rda/rda8810h/ddr3.c b/board/rda/rda8810h/ddr3.c
new file mode 100644
index 0000000000..a0f49e6efe
--- /dev/null
+++ b/board/rda/rda8810h/ddr3.c
@@ -0,0 +1,533 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include "tgt_ap_clock_config.h"
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+#define DMC_READY 128
+#define USE_ADDR 129
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x3f, 0x3f},
+ {T_MRW, 0x3f, 0x3f},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0xf, 0xf},
+ {T_RTW, 0x1f, 0x1f},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4001f, 0x4001f},
+ {T_WTR, 0x4001f, 0x4001f},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x8, 0x8},
+ {WR_LATENCY, 0x4, 0x4},
+ {T_RDDATA_EN, 0x8, 0x8},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {QOSX_CTRL7, 0x08, 0x08},
+ {TURNAROUND_PRIO,0x1A, 0x0},
+ {HIT_PRIO, 0x1A, 0x0},
+ {T_REFI, 0x186, 0x3f},
+ {QUEUE_CTRL, 0xffff, 0x0},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x6},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x6},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0c, 0x6},// turn for now
+ {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x3},
+ {T_PHYWRLAT, 0x102, 0x102},
+ {T_PHYWRLAT, 0x102, 0x103},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 __attribute__((unused)) dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ printf("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + USE_ADDR * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_ENABLE_LAT *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL *4)) = 0x7;
+ *((volatile UINT32*)(PHY_REG_BASE + RDELAY_SEL *4)) = 0x6;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT *4)) = 0x1;
+ printf("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + DMC_READY *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+
+ if (dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+
+ if (!dll_off){
+ *((volatile UINT32*)(PHY_REG_BASE + PHY_RDLAT * 4)) = 7;
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_ENABLE_LAT * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 3;
+ }else
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = 0xf;
+
+ serial_puts("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 __attribute__((unused)) dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+ *addr = val;
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+
+ *addr = val;
+
+ printf("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+ *addr = val;
+
+ printf("decode ctrl value: %lx\n", val);
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ val = 0x10000602;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ val = 0x10000103;//0ld 0x10000102
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+#endif
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000103;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+#endif
+
+ //config ECC control
+ wait_idle = 0x6;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2104210C) = 0x00000060;
+ *(volatile UINT32*)(0x21042110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ //axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8810h/ddr3.h b/board/rda/rda8810h/ddr3.h
new file mode 100644
index 0000000000..7481954144
--- /dev/null
+++ b/board/rda/rda8810h/ddr3.h
@@ -0,0 +1,50 @@
+#ifndef _SYS_DDR3_H_
+#define _SYS_DDR3_H_
+
+#include "clock_config.h"
+
+/*
+ * defination of ddr flags
+ */
+/* [Debug] DLL off mode, 0 is dll on mode */
+#define DDR_FLAGS_DLLOFF 0x8000
+/* [Debug] LowSpeed mode*/
+#define DDR_FLAGS_RESERVE 0x4000
+/* DDR LowPower mode */
+#define DDR_FLAGS_LOWPWR 0x2000
+/* ODT: 000--Null 001--60 010--120 011--40 100--20 101--30 */
+#define DDR_FLAGS_ODT(n) (((n)<<0)&0x0007)
+#define DDR_FLAGS_ODT_SHIFT 0
+#define DDR_FLAGS_ODT_MASK 0x0007
+/* RON: 00--40 01--30 */
+#define DDR_FLAGS_RON(n) (((n)<<3)&0x0018)
+#define DDR_FLAGS_RON_SHIFT 3
+#define DDR_FLAGS_RON_MASK 0x0018
+
+/*
+ * defination of ddr parameters
+ */
+#define DDR_PARA_CHIP_BITS(n) (((n)<<0)&0x00000003)
+#define DDR_PARA_CHIP_BITS_SHIFT 0
+#define DDR_PARA_CHIP_BITS_MASK 0x00000003
+/* memory width 0--8bit 1--16bit 2--32bit */
+#define DDR_PARA_MEM_BITS(n) (((n)<<2)&0x0000000c)
+#define DDR_PARA_MEM_BITS_SHIFT 2
+#define DDR_PARA_MEM_BITS_MASK 0x0000000c
+/* 2--4banks 3--8banks */
+#define DDR_PARA_BANK_BITS(n) (((n)<<4)&0x000000f0)
+#define DDR_PARA_BANK_BITS_SHIFT 4
+#define DDR_PARA_BANK_BITS_MASK 0x000000f0
+/* 2--13rbs 3--14rbs 4--15rbs 5--16rbs */
+#define DDR_PARA_ROW_BITS(n) (((n)<<8)&0x00000f00)
+#define DDR_PARA_ROW_BITS_SHIFT 8
+#define DDR_PARA_ROW_BITS_MASK 0x00000f00
+/* 0--8cbs 1--9cbs 2--10cbs 3--11cbs 4--12cbs */
+#define DDR_PARA_COL_BITS(n) (((n)<<12)&0x0000f000)
+#define DDR_PARA_COL_BITS_SHIFT 12
+#define DDR_PARA_COL_BITS_MASK 0x0000f000
+
+int ddr_init(UINT16 flags, UINT32 para);
+
+#endif /* _SYS_DDR3_H_ */
+
diff --git a/board/rda/rda8810h/ddr3_init.h b/board/rda/rda8810h/ddr3_init.h
new file mode 100644
index 0000000000..402375d269
--- /dev/null
+++ b/board/rda/rda8810h/ddr3_init.h
@@ -0,0 +1,101 @@
+#ifndef _SYS_RAM_INIT_H_
+#define _SYS_RAM_INIT_H_
+
+#define MEMC_STATUS 0x000
+#define MEMC_CONFIG 0x004
+#define MEMC_CMD 0x008
+#define ADDR_CTRL 0x010
+#define DECODE_CTRL 0x014
+#define FORMAT_CTRL 0x018
+#define LOWPWR_CTRL 0x020
+#define TURNAROUND_PRIO 0x030
+#define HIT_PRIO 0x034
+//QOS0~QOS15:038~078
+#define QOSX_CTRL 0x038
+#define QOSX_CTRL7 0x058
+#define QOSX_CTRL15 0x078
+#define TIMEOUT_CTRL 0x07C
+#define QUEUE_CTRL 0x080
+#define WR_PRIO_CTRL 0x088
+#define WR_PRIO_CTRL2 0x08C
+#define RD_PRIO_CTRL 0x090
+#define RD_PRIO_CTRL2 0x094
+#define ACCESS_ADDR_MATCH 0x098
+#define ACCESS_ADDR_MATCH_63_32 0x09C
+#define ACCESS_ADDR_MASK 0x0A0
+#define ACCESS_ADDR_MASK_63_32 0x0A4
+
+#define CHANNEL_STATUS 0x100
+#define DIRECT_CMD 0x108
+#define MR_DATA 0x110
+#define REFRESH_CTRL 0x120
+#define INTR_CTRL 0x128
+#define INTR_CLR 0x130
+#define INTR_STATUS 0x138
+#define INTR_INFO 0x140
+#define ECC_CTRL 0x148
+
+#define T_REFI 0x200
+#define T_RFC 0x204
+#define T_MRR 0x208
+#define T_MRW 0x20C
+#define T_RCD 0x218
+#define T_RAS 0x21C
+#define T_RP 0x220
+#define T_RPALL 0x224
+#define T_RRD 0x228
+#define T_FAW 0x22C
+#define RD_LATENCY 0x230
+#define T_RTR 0x234
+#define T_RTW 0x238
+#define T_RTP 0x23C
+#define WR_LATENCY 0x240
+#define T_WR 0x244
+#define T_WTR 0x248
+#define T_WTW 0x24C
+#define T_ECKD 0x250
+#define T_XCKD 0x254
+#define T_EP 0x258
+#define T_XP 0x25C
+#define T_ESR 0x260
+#define T_XSR 0x264
+#define T_SRCKD 0x268
+#define T_CKSRD 0x26C
+
+#define T_RDDATA_EN 0x300
+#define T_PHYWRLAT 0x304
+#define RDLVL_CTRL 0x308
+#define RDLVL_DIRECT 0x310
+#define T_RDLVL_EN 0x318
+#define T_RDLVL_RR 0x31C
+#define WRLVL_CTRL 0x328
+#define WRLVL_DIRECT 0x330
+#define T_WRLVL_EN 0x338
+#define T_WRLVL_WW 0x33C
+
+#define PHY_PWR_CTRL 0x348
+#define PHY_UPD_CTRL 0x350
+
+#define USER_STATUS 0x400
+#define USER_CONFIG0 0x404
+#define USER_CONFIG1 0x408
+
+#define INTEG_CFG 0xE00
+#define INTEG_OUTPUTS 0xE08
+
+#define PERIPH_ID_0 0xFE0
+#define PERIPH_ID_1 0xFE4
+#define PERIPH_ID_2 0xFE8
+#define PERIPH_ID_3 0xFEC
+#define COMPONENT_ID_0 0xFF0
+#define COMPONENT_ID_1 0xFF4
+#define COMPONENT_ID_2 0xFF8
+#define COMPONENT_ID_3 0xFFC
+
+typedef struct {
+ UINT32 reg_offset;
+ UINT32 dll_on_val;
+ UINT32 dll_off_val;
+} dmc_reg_t;
+
+#endif /* _SYS_RAM_INIT_H_ */
diff --git a/board/rda/rda8810h/debug.h b/board/rda/rda8810h/debug.h
new file mode 100644
index 0000000000..1d4f03bedb
--- /dev/null
+++ b/board/rda/rda8810h/debug.h
@@ -0,0 +1,9 @@
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+void print_u8(u8 ch);
+void print_u16(u16 data);
+void print_u32(u32 data);
+void dump_buf(u8 *buf, u32 size);
+
+#endif /* _DEBUG_H_ */
diff --git a/board/rda/rda8810h/hal_config.c b/board/rda/rda8810h/hal_config.c
new file mode 100644
index 0000000000..ade97c4b5a
--- /dev/null
+++ b/board/rda/rda8810h/hal_config.c
@@ -0,0 +1,1451 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2013, RDA Microeletronics. //
+// All Rights Reserved //
+// //
+// This source code is the property of RDA Microeletronics and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA Microeletronics. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/8810/src/hal_config.c $ //
+// $Author: huazeng $ //
+// $Date: 2013-08-31 17:48:58 +0800 (Sat, 31 Aug 2013) $ //
+// $Revision: 21005 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_config.c
+/// Implementation of HAL initialization related with the particular instance
+/// of the IP.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+/* uboot */
+#include <common.h>
+
+/* common */
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/chip_id.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_gpio.h>
+
+/* device */
+#include "hal_sys.h"
+#include "halp_sys.h"
+#include "halp_gpio.h"
+#include "bootp_mode.h"
+#include "hal_config.h"
+#include "hal_ap_gpio.h"
+#include "hal_ap_config.h"
+#include <asm/arch/reg_cfg_regs.h>
+
+/* target */
+#include "tgt_board_cfg.h"
+#include "tgt_ap_gpio_setting.h"
+#define HAL_ASSERT(cond, fmt, ...) \
+ if(!(cond)) { \
+ hal_assert(fmt, ##__VA_ARGS__); \
+ g_halConfigError = TRUE; \
+ }
+
+//// =============================================================================
+//// GLOBAL VARIABLES
+//// =============================================================================
+PRIVATE CONST UINT8 g_halCfgSimOrder[] = { TGT_SIM_ORDER };
+PRIVATE HAL_CFG_CONFIG_T hal_cfg = TGT_HAL_CONFIG;
+PRIVATE UINT32 g_bootBootMode = 0;
+PRIVATE BOOL g_halConfigError = FALSE;
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+// HAL_ASSERT
+PRIVATE VOID hal_assert(const char *fmt, ...)
+{
+ va_list args;
+ puts("\n#-------Board Mux config found error-------#\n");
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ putc('\n');
+ puts("--------------------------------------------\n\n");
+ va_end(args);
+}
+
+// =============================================================================
+// hal_BoardSimUsed
+// -----------------------------------------------------------------------------
+/// Check whether a SIM card interface is used.
+// ============================================================================
+PRIVATE BOOL hal_BoardSimUsed(UINT32 simId)
+{
+ UINT32 i;
+ for (i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ {
+ if (g_halCfgSimOrder[i] == simId)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+#if 0
+// =============================================================================
+// hal_BoardConfigClk32k
+// -----------------------------------------------------------------------------
+/// Configure CLK_32K output.
+/// @param enable TRUE to configure, and FALSE to disable.
+// ============================================================================
+PROTECTED VOID hal_BoardConfigClk32k(BOOL enable)
+{
+ HAL_ASSERT(g_halCfg->useClk32k == TRUE, "32K clock is not configured");
+
+ if (enable)
+ {
+ // Setup the pin as 32K clock output
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_CLK_32K;
+ }
+ else
+ {
+ // Setup the pin as GPO (and low ouput has been
+ // configured in hal_BoardSetup())
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_GPO_2;
+ }
+}
+#endif
+
+// =============================================================================
+// hal_BoardSetupGeneral
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL for general purpose
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+PROTECTED VOID hal_BoardSetupGeneral(CONST HAL_CFG_CONFIG_T* halCfg)
+{
+ UINT32 altMux = 0;
+ UINT32 altMux2 = 0;
+
+ UINT32 availableGpo_A = 0;
+
+ UINT32 availableGpio_C = 0;
+ UINT32 availableGpio_A = 0;
+ UINT32 availableGpio_B = 0;
+ UINT32 availableGpio_D = 0;
+ UINT32 availableGpio_E = 0;
+
+ UINT32 bootModeGpio_C = 0;
+ UINT32 bootModeGpio_A = 0;
+ UINT32 bootModeGpio_B = 0;
+ UINT32 bootModeGpio_D = 0;
+ UINT32 bootModeGpio_E = 0;
+
+ UINT32 noConnectMask_C = 0;
+ UINT32 noConnectMask_A = 0;
+ UINT32 noConnectMask_B = 0;
+ UINT32 noConnectMask_D = 0;
+ UINT32 noConnectMask_E = 0;
+
+ UINT32 gpoClr_A = 0;
+
+#ifdef CONFIG_RDA_FPGA
+
+ // no muxing, do nothing
+ // add support for sd card
+ hwp_configRegs->BB_GPIO_Mode &= ~(0x3F<<9);
+
+#else // !FPGA
+
+ // GPIOs as boot mode pins
+ bootModeGpio_C = HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ bootModeGpio_A = HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7);
+ bootModeGpio_B = HAL_GPIO_BIT(0);
+ bootModeGpio_D = 0;
+ bootModeGpio_E = 0;
+
+ // Available GPIOs
+ availableGpio_C |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ // Volume down/up keys
+ availableGpio_D |= HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6);
+
+ // Boot modes
+ BOOL spiFlashCam = FALSE;
+ BOOL spiFlashNand = FALSE;
+ if (g_bootBootMode & BOOT_MODE_BOOT_SPI)
+ {
+ if (g_bootBootMode & BOOT_MODE_SPI_PIN_NAND)
+ {
+ HAL_ASSERT((g_bootBootMode & BOOT_MODE_BOOT_EMMC),
+ "Emmc boot pin should be pulled up to boot on SPI flash over NAND pins");
+ spiFlashNand = TRUE;
+ }
+ else
+ {
+ spiFlashCam = TRUE;
+ }
+ }
+
+ //UINT32 metalId = rda_metal_id_get();
+ UINT32 emmcBootModeMask;
+ if (1) //metalId < 0x02)
+ {
+ emmcBootModeMask = BOOT_MODE_BOOT_EMMC
+ | BOOT_MODE_BOOT_SPI
+ | BOOT_MODE_BOOT_SPI_NAND;
+ }
+ else
+ {
+ emmcBootModeMask = BOOT_MODE_BOOT_EMMC
+ | BOOT_MODE_BOOT_SPI;
+ }
+ if ((g_bootBootMode & emmcBootModeMask) == BOOT_MODE_BOOT_EMMC)
+ {
+ // Boot from EMMC
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 (EMMC) should be used");
+ }
+
+ if (1) //metalId < 0x02)
+ {
+ if ( (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_SPI_NAND ||
+ (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L))
+ == (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L)
+ )
+ {
+ // Boot from SDMMC1
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmcUsed, "SDMMC1 should be used");
+ }
+ }
+
+ // For convenience, we do not consider spiFlashCam at present.
+ // We assume that SPI flash always uses parallel nand pins.
+#if 0
+ BOOL parallelNandUsed = halCfg->parallelNandUsed;
+#else
+ BOOL parallelNandUsed = !spiFlashNand && !halCfg->sdmmcCfg.sdmmc3Used;
+#endif
+ BOOL nand8_15Cam = FALSE;
+ BOOL nand8_15Lcd = FALSE;
+ if ((g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_EMMC)) == 0)
+ {
+ HAL_ASSERT(parallelNandUsed, "Parallel NAND should be used");
+ }
+ if (parallelNandUsed)
+ {
+ HAL_ASSERT(!spiFlashNand, "SPI flash uses parallel NAND pins");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used,
+ "SDMMC3 (EMMC) uses parallel NAND pins");
+ if ((g_bootBootMode & BOOT_MODE_NAND_8BIT) == 0)
+ {
+ if (g_bootBootMode & BOOT_MODE_NAND_HIGH_PIN_CAM)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses NAND 8-15 bits on cam pins");
+ nand8_15Cam = TRUE;
+ }
+ else
+ {
+ nand8_15Lcd = TRUE;
+ }
+ }
+ }
+
+ if (!parallelNandUsed)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(9);
+
+#ifdef NAND_IO_RECONFIG_WORKROUND
+ if (spiFlashNand)
+ {/*GPIO_B:25,26,27,28,29; GPIO_D:4 the output level is inverted*/
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }else{
+ availableGpio_D |= HAL_GPIO_BIT(8);
+ }
+#else
+ if (!spiFlashNand)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(8);
+ }
+#endif
+
+ if (!halCfg->sdmmcCfg.sdmmc3Used)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(10);
+ }
+ }
+#ifdef NAND_IO_RECONFIG_WORKROUND
+ else
+ {/*GPIO_B:25,26,27,28,29; GPIO_D:4 the output level is inverted*/
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }
+#endif
+
+ CONST HAL_CFG_CAM_T *camCfg = &halCfg->camCfg;
+ CONST HAL_CFG_CAM_T *cam2Cfg = &halCfg->cam2Cfg;
+ CONST HAL_LCD_MODE_T lcdMode = halCfg->goudaCfg.lcdMode;
+
+ // LCD
+ if (lcdMode == HAL_LCD_MODE_PARALLEL_16BIT)
+ {
+ /* Check LCD 8-15 bits */
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ HAL_ASSERT(!halCfg->goudaCfg.lcd8_23Cam2, "Parallel LCD 8-5 bits should use NAND pins only");
+ altMux |= CFG_REGS_LCD_MODE_PARALLEL_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_DSI)
+ {
+ altMux |= CFG_REGS_LCD_MODE_DSI;
+ availableGpio_A |= HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23);
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_16BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ /* Check LCD 8-15 bits */
+ if (halCfg->goudaCfg.lcd8_23Cam2)
+ {
+ HAL_ASSERT(!(cam2Cfg->camUsed || cam2Cfg->cam1Used),
+ "Camera2 uses LCD 8-15 bits");
+ altMux2 |= CFG_REGS_RGB_CAM_2_ENABLE;
+ }
+ else
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ }
+ if (lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ /* Check LCD 16-23 bits */
+ if (lcdMode == HAL_LCD_MODE_RGB_18BIT && halCfg->goudaCfg.lcd16_17Cs)
+ {
+ HAL_ASSERT(!halCfg->goudaCfg.lcd16_23Cam,
+ "LCD 16-17 bits have been configured on camera pins");
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use LCD 16-17 bits");
+ altMux2 |= CFG_REGS_LCD_RGB_17_16_LCD_DATA;
+ }
+ else if (halCfg->goudaCfg.lcd8_23Cam2)
+ {
+ HAL_ASSERT(!halCfg->goudaCfg.lcd16_23Cam,
+ "LCD 16-23 bits have been configured on camera pins");
+ HAL_ASSERT(halCfg->goudaCfg.lcd16_17Cs,
+ "LCD 16-17 bits should use LCD CS 0/1");
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use LCD 16-17 bits");
+ HAL_ASSERT(!(cam2Cfg->camUsed || cam2Cfg->cam1Used),
+ "Camera2 uses LCD 18-23 bits");
+ altMux2 |= CFG_REGS_LCD_RGB_17_16_LCD_DATA;
+ altMux2 |= CFG_REGS_RGB_CAM_2_ENABLE;
+ }
+ else if (halCfg->goudaCfg.lcd16_23Cam)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.lcd16_17Cs || halCfg->goudaCfg.lcd8_23Cam2),
+ "LCD 16-23 bits have been configured on LCD CS 0/1 and camera2 pins");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_PARALLEL &&
+ (camCfg->camUsed || camCfg->cam1Used)),
+ "Parallel camera uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam),
+ "I2C2 uses LCD 22-23 bits");
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses LCD 16-21 bits");
+ HAL_ASSERT(!nand8_15Cam, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_CSI &&
+ ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))),
+ "Camera CSI1 uses LCD 16-21 bits");
+ altMux |= CFG_REGS_RGB_CAM_ENABLE;
+ }
+ else
+ {
+ HAL_ASSERT(!parallelNandUsed, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 uses LCD 16-23 bits");
+ altMux |= CFG_REGS_RGB_CAM_DISABLE;
+ }
+ }
+ altMux |= CFG_REGS_LCD_MODE_RGB_24BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_SPI)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use SPI LCD pins");
+ HAL_ASSERT((halCfg->usedGpo_A & (HAL_GPO_BIT(3)|HAL_GPO_BIT(4))) == 0,
+ "GPO 3/4 use SPI LCD pins");
+ altMux |= CFG_REGS_SPI_LCD_SPI_LCD;
+ availableGpio_A |= HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21);
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Lcd mode not defined!");
+ }
+
+ if (lcdMode == HAL_LCD_MODE_DSI ||
+ lcdMode == HAL_LCD_MODE_SPI ||
+ ((lcdMode == HAL_LCD_MODE_RGB_16BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT) &&
+ halCfg->goudaCfg.lcd8_23Cam2))
+ {
+ if (!nand8_15Lcd)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(24)
+ | HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+ }
+
+ if (halCfg->goudaCfg.cs0Used)
+ {
+ altMux |= CFG_REGS_GPO_4_LCD_CS_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_4_GPO_4;
+ availableGpo_A |= HAL_GPO_BIT(4);
+ }
+
+ if (halCfg->goudaCfg.cs1Used)
+ {
+ altMux |= CFG_REGS_GPO_3_LCD_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_3_GPO_3;
+ availableGpo_A |= HAL_GPO_BIT(3);
+ }
+
+ // I2C
+ if (!halCfg->i2cCfg.i2cUsed)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+
+ if (halCfg->i2cCfg.i2c2Used)
+ {
+ if (halCfg->i2cCfg.i2c2PinsCam)
+ {
+ if (camCfg->camUsed)
+ {
+ HAL_ASSERT(camCfg->camPdnRemap == GPIO_NONE &&
+ camCfg->camRstRemap == GPIO_NONE,
+ "Cam uses PDN/RST pins");
+ }
+ if (camCfg->cam1Used)
+ {
+ HAL_ASSERT(camCfg->cam1PdnRemap == GPIO_NONE &&
+ camCfg->cam1RstRemap == GPIO_NONE,
+ "Cam1 uses PDN/RST pins");
+ }
+ HAL_ASSERT(!nand8_15Cam, "NAND uses cam PDN/RST pins");
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ altMux |= CFG_REGS_CAM_I2C2_I2C2;
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ }
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+
+ if (halCfg->i2cCfg.i2c3Used)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x18) == 0, "Keyout 3/4 use I2C3 pins");
+ altMux |= CFG_REGS_KEYOUT_3_4_I2C3;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYOUT_3_4_KEYOUT_3_4;
+ if ((halCfg->keyOutMask & 0x8) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(6);
+ }
+ if ((halCfg->keyOutMask & 0x10) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ if (halCfg->i2cCfg.modemI2cUsed)
+ {
+ HAL_ASSERT(!halCfg->emacUsed, "EMAC uses modem I2C pins");
+ }
+ else
+ {
+ if (!halCfg->emacUsed)
+ {
+ availableGpio_E |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+ }
+
+ // Camera
+ if (camCfg->camUsed || camCfg->cam1Used)
+ {
+ if(camCfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses cam pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use cam pins");
+ altMux |= CFG_REGS_CSI2_PARALLEL_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(24);
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux |= CFG_REGS_CSI2_SPI_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(14);
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses CSI1 pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use CSI1 pins");
+ }
+ else
+ {
+ // CSI1 is unused
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ altMux |= CFG_REGS_CSI2_CSI2;
+ // If CSI2 is unused
+ if (!((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_2) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Invalid cam mode: %d", camCfg->camMode);
+ }
+
+ // Cam PDN/RST pins
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ if (!((camCfg->camUsed && camCfg->camRstRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10);
+ }
+ if (!((camCfg->camUsed && camCfg->camPdnRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1PdnRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(11);
+ }
+ }
+ }
+ else // cam is unused
+ {
+ availableGpio_B |= HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11);
+ }
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+
+ // Camera2
+ if (cam2Cfg->camUsed || cam2Cfg->cam1Used)
+ {
+ if(cam2Cfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ altMux2 |= CFG_REGS_CSI2_2_PARALLEL_CAM;
+ }
+ else if (cam2Cfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux2 |= CFG_REGS_CSI2_2_SPI_CAM;
+ availableGpio_E |= HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+ else if (cam2Cfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((cam2Cfg->camUsed && (cam2Cfg->camCsiId == HAL_CAM_CSI_1 ||
+ cam2Cfg->camCsiId == HAL_CAM_CSI_2)) ||
+ (cam2Cfg->cam1Used && (cam2Cfg->cam1CsiId == HAL_CAM_CSI_1 ||
+ cam2Cfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ altMux2 |= CFG_REGS_CSI2_2_CSI2;
+ }
+ else
+ {
+ availableGpio_E |= HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8)
+ | HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Invalid cam2 mode: %d", cam2Cfg->camMode);
+ }
+
+ // Cam2 PDN/RST pins
+ if (!((cam2Cfg->camUsed && cam2Cfg->camRstRemap == GPIO_NONE) ||
+ (cam2Cfg->cam1Used && cam2Cfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_E |= HAL_GPIO_BIT(2);
+ }
+ if (!((cam2Cfg->camUsed && cam2Cfg->camPdnRemap == GPIO_NONE) ||
+ (cam2Cfg->cam1Used && cam2Cfg->cam1PdnRemap == GPIO_NONE) ||
+ (altMux2 & CFG_REGS_CSI2_2_CSI2)))
+ {
+ availableGpio_E |= HAL_GPIO_BIT(3);
+ }
+ }
+ else // cam2 is unused
+ {
+ if (!((lcdMode == HAL_LCD_MODE_RGB_16BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_18BIT ||
+ lcdMode == HAL_LCD_MODE_RGB_24BIT) &&
+ halCfg->goudaCfg.lcd8_23Cam2))
+ {
+ availableGpio_E |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8)
+ | HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+ }
+
+ // UART 1 Pin configuration
+ switch (halCfg->uartCfg[0])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ availableGpio_C |= HAL_GPIO_BIT(6);
+ availableGpio_A |= HAL_GPIO_BIT(14);
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART1 TXD, RXD
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART1 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ // use UART1 TXD, RXD, CTS, RTS, RI, DSR, DCD, DTR
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ HAL_ASSERT(!halCfg->hostUartUsed, "Host UART uses UART1 DCD/DTR");
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART 2 must be unused to use UART1 Modem lines.");
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART1 DSR");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART1 RI");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS
+ | CFG_REGS_UART1_8LINE_UART1_8_LINE;
+ break;
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart 1 Configuration (%d).",
+ halCfg->uartCfg[0]);
+ break;
+ }
+
+ // Host UART
+ if (halCfg->hostUartUsed)
+ {
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART2 uses host UART RXD/TXD.");
+ }
+
+ // UART 2 Pin configuration
+ switch (halCfg->uartCfg[1])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_UART2_HOST_UART
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if (halCfg->uartCfg[0] != HAL_UART_CONFIG_MODEM)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART2 TXD, RXD
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART2 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART2 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART2 RTS");
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_UART2_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart2 Configuration (%d).",
+ halCfg->uartCfg[1]);
+ break;
+ }
+
+ // UART 3 Pin configuration
+ switch (halCfg->uartCfg[2])
+ {
+ case HAL_UART_CONFIG_NONE:
+ availableGpio_D |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART3 TXD, RXD
+ availableGpio_D |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART3 TXD, RXD, CTS, RTS
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart3 Configuration (%d).",
+ halCfg->uartCfg[2]);
+ break;
+ }
+
+ // I2S
+ altMux |= CFG_REGS_DAI_I2S;
+ if (halCfg->i2sCfg.di0Used || halCfg->i2sCfg.di1Used ||
+ halCfg->i2sCfg.di2Used || halCfg->i2sCfg.doUsed)
+ {
+ if (!halCfg->i2sCfg.di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(11);
+ }
+ if (!halCfg->i2sCfg.di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(12);
+ }
+ if (halCfg->i2sCfg.di2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x4) == 0, "Keyin 2 uses I2S DI2");
+ altMux |= CFG_REGS_I2S_DI_2_I2S_DI_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_I2S_DI_2_KEYIN_2;
+ if ((halCfg->keyInMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(2);
+ }
+ }
+ if (!halCfg->i2sCfg.doUsed)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(13);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13);
+ }
+
+ // I2S2
+ if (halCfg->i2s2Cfg.di0Used || halCfg->i2s2Cfg.di1Used ||
+ halCfg->i2s2Cfg.di2Used || halCfg->i2s2Cfg.doUsed)
+ {
+ HAL_ASSERT(!halCfg->emacUsed, "EMAC uses I2S2 pins");
+ if (!halCfg->i2s2Cfg.di0Used)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(13);
+ }
+ if (!halCfg->i2s2Cfg.di1Used)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->i2s2Cfg.doUsed)
+ {
+ availableGpio_D |= HAL_GPIO_BIT(15);
+ }
+ }
+ else
+ {
+ availableGpio_D |= HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15);
+ }
+
+ // LPS CO1
+ if (halCfg->useLpsCo1)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x10) == 0, "Keyin 4 uses LPS_CO1");
+ altMux |= CFG_REGS_LPSCO_1_LPSCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_LPSCO_1_KEYIN_4;
+ if ((halCfg->keyInMask & 0x10) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // TCO
+ if (halCfg->usedTco & 0x1)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x1) == 0, "Keyout 0 uses TCO0");
+ altMux |= CFG_REGS_TCO_0_TCO_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_0_KEYOUT_0;
+ if ((halCfg->keyOutMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(3);
+ }
+ }
+
+ if (halCfg->usedTco & 0x2)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x2) == 0, "Keyout 1 uses TCO1");
+ altMux |= CFG_REGS_TCO_1_TCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_1_KEYOUT_1;
+ if ((halCfg->keyOutMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(4);
+ }
+ }
+
+ if (halCfg->usedTco & 0x4)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x4) == 0, "Keyout 2 uses TCO2");
+ altMux |= CFG_REGS_TCO_2_TCO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_2_KEYOUT_2;
+ if ((halCfg->keyOutMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(5);
+ }
+ }
+
+ // PWM
+ if (halCfg->pwmCfg.pwtUsed)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x20) == 0, "Keyin 5 uses PWT");
+ altMux |= CFG_REGS_GPO_0_PWT;
+ }
+ else if (halCfg->keyInMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_0_KEYIN_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_0_GPO_0;
+ availableGpo_A |= HAL_GPO_BIT(0);
+ }
+
+ if (halCfg->pwmCfg.lpgUsed)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x20) == 0, "Keyout 5 uses LPG");
+ altMux |= CFG_REGS_GPO_1_LPG;
+ }
+ else if (halCfg->keyOutMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_1_KEYOUT_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_1_GPO_1;
+ availableGpo_A |= HAL_GPO_BIT(1);
+ }
+
+ if (halCfg->pwmCfg.pwl1Used)
+ {
+ HAL_ASSERT(!halCfg->useClk32k, "Clk 32k uses PWL1");
+ altMux |= CFG_REGS_GPO_2_PWL_1;
+ }
+ else if (halCfg->useClk32k)
+ {
+ // Default to GPO low output
+ // 32K clock will be enabled per request
+ //altMux |= CFG_REGS_GPO_2_CLK_32K;
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ availableGpo_A |= HAL_GPO_BIT(2);
+ }
+
+ // Clock out and host clock
+ if (halCfg->clkOutUsed)
+ {
+ HAL_ASSERT(!halCfg->hostClkUsed, "HST_CLK uses CLK_OUT pin");
+ altMux |= CFG_REGS_CLK_OUT_CLK_OUT;
+ }
+ else if (halCfg->hostClkUsed)
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ }
+ else
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ availableGpo_A |= HAL_GPO_BIT(8);
+ }
+
+ // SPI
+ if (halCfg->spiCfg[0].cs0Used || halCfg->spiCfg[0].cs1Used ||
+ halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT(!(halCfg->modemSpiCfg[0].cs0Used ||
+ halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used), "Modem SPI1 is in use");
+ altMux |= CFG_REGS_AP_SPI1_AP_SPI1;
+ if (!halCfg->spiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->spiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x2) == 0, "Keyin 1 uses SPI1 CS2");
+ altMux |= CFG_REGS_SPI1_CS_2_SPI1_CS_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_SPI1_CS_2_KEYIN_1;
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ if (!halCfg->spiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->spiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else // AP SPI1 unused
+ {
+ altMux |= CFG_REGS_AP_SPI1_BB_SPI1;
+ if (halCfg->modemSpiCfg[0].cs0Used || halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used)
+ {
+ if (!halCfg->modemSpiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->modemSpiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (!halCfg->modemSpiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->modemSpiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ availableGpio_C |= HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ }
+ if (halCfg->spiCfg[1].cs0Used || halCfg->spiCfg[1].cs1Used)
+ {
+ if (!halCfg->spiCfg[1].cs0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(5);
+ }
+ if (halCfg->spiCfg[1].cs1Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x8) == 0, "Keyin 3 uses SPI2 CS1");
+ altMux |= CFG_REGS_KEYIN_3_SPI2_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYIN_3_KEYIN_3;
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+ if (!halCfg->spiCfg[1].di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(3);
+ }
+ if (!halCfg->spiCfg[1].di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(4);
+ }
+ }
+ else // AP SPI2 unused
+ {
+ availableGpio_A |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+
+ // Standalone keyin/out
+ if ((halCfg->keyInMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(0);
+ }
+
+ // SDMMC
+ if (!halCfg->sdmmcCfg.sdmmcUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->sdmmcCfg.sdmmc2Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16);
+ if (!halCfg->sdio2Uart1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20);
+ }
+ }
+ HAL_ASSERT(!(parallelNandUsed && halCfg->sdmmcCfg.sdmmc3Used),
+ "Parallel NAND uses SDMMC3 pins");
+
+ // SDIO2_UART1
+ if (halCfg->sdio2Uart1Used)
+ {
+ HAL_ASSERT(halCfg->uartCfg[0] == HAL_UART_CONFIG_NONE,
+ "UART1 has been configured on UART1 pins");
+ altMux2 |= CFG_REGS_UART1_SDIO2_UART1;
+ }
+ else
+ {
+ altMux2 |= CFG_REGS_UART1_SDIO2_SDIO2;
+ }
+
+ // EMAC
+ if (halCfg->emacUsed)
+ {
+ altMux2 |= CFG_REGS_MAC_EN_ENABLE;
+ }
+ else
+ {
+ altMux2 |= CFG_REGS_MAC_EN_DISABLE;
+ }
+
+ // SIM
+ if (!hal_BoardSimUsed(2))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27);
+ }
+
+ if (hal_BoardSimUsed(3))
+ {
+ HAL_ASSERT(!halCfg->emacUsed, "EMAC uses SIM3 pins");
+ }
+ else
+ {
+ if (!halCfg->emacUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30);
+ }
+ }
+
+ UINT32 gpioMask;
+ // GPIO_C mask check
+ gpioMask = ~availableGpio_C & halCfg->usedGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO C are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_C &
+ (~halCfg->usedGpio_C & ~halCfg->noConnectGpio_C);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO C declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_A mask check
+ gpioMask = ~availableGpio_A & halCfg->usedGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO A are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_A &
+ (~halCfg->usedGpio_A & ~halCfg->noConnectGpio_A);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO A declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_B mask check
+ gpioMask = ~availableGpio_B & halCfg->usedGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO B are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_B &
+ (~halCfg->usedGpio_B & ~halCfg->noConnectGpio_B);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO B declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_D mask check
+ gpioMask = ~availableGpio_D & halCfg->usedGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO D are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_D &
+ (~halCfg->usedGpio_D & ~halCfg->noConnectGpio_D);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO D declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_E mask check
+ gpioMask = ~availableGpio_E & halCfg->usedGpio_E;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO E are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_E & halCfg->noConnectGpio_E;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO E declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_E & halCfg->noConnectGpio_E;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO E declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_E &
+ (~halCfg->usedGpio_E & ~halCfg->noConnectGpio_E);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO E declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPO_A mask check
+ gpioMask = ~availableGpo_A & halCfg->usedGpo_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPO A are not available (0x%x)",
+ gpioMask);
+
+#endif // !FPGA
+
+ // Set IO drive
+ hwp_configRegs->IO_Drive1_Select = halCfg->ioDrive.select1;
+ hwp_configRegs->IO_Drive2_Select = halCfg->ioDrive.select2;
+
+ // Set the not connected ones as output and drive 0
+ // But keep boot mode GPIOs as input to avoid current leakage
+ noConnectMask_C = halCfg->noConnectGpio_C & ~bootModeGpio_C;
+ noConnectMask_A = halCfg->noConnectGpio_A & ~bootModeGpio_A;
+ noConnectMask_B = halCfg->noConnectGpio_B & ~bootModeGpio_B;
+ noConnectMask_D = halCfg->noConnectGpio_D & ~bootModeGpio_D;
+ noConnectMask_E = halCfg->noConnectGpio_E & ~bootModeGpio_E;
+
+ hwp_gpio->gpio_clr = noConnectMask_C;
+ hwp_gpio->gpio_oen_set_out = noConnectMask_C;
+
+ hwp_apGpioA->gpio_clr = noConnectMask_A;
+ hwp_apGpioA->gpio_oen_set_out = noConnectMask_A;
+
+ hwp_apGpioB->gpio_clr = noConnectMask_B;
+ hwp_apGpioB->gpio_oen_set_out = noConnectMask_B;
+
+ hwp_apGpioD->gpio_clr = noConnectMask_D;
+ hwp_apGpioD->gpio_oen_set_out = noConnectMask_D;
+
+ hwp_apGpioE->gpio_clr = noConnectMask_E;
+ hwp_apGpioE->gpio_oen_set_out = noConnectMask_E;
+
+ // Init GPO_A values
+ gpoClr_A = availableGpo_A;
+ if (halCfg->useClk32k)
+ {
+ // Init 32K clock pin to low (by setting up GPO)
+ gpoClr_A |= HAL_GPO_BIT(2);
+ }
+#ifdef _TGT_AP_GPIO_USBID_CTRL
+ // if GPO_1 used for usb id, it should be high
+ gpoClr_A &= ~(HAL_GPO_BIT(1));
+#endif
+ hwp_apGpioA->gpo_clr = gpoClr_A;
+
+ // Configure MUX after initializing all the GPO pins
+ // (GPIO pins are in input mode by default)
+
+ // Set GPIO mode
+ hwp_configRegs->BB_GPIO_Mode = availableGpio_C;
+ hwp_configRegs->AP_GPIO_A_Mode = availableGpio_A;
+ hwp_configRegs->AP_GPIO_B_Mode = availableGpio_B;
+ hwp_configRegs->AP_GPIO_D_Mode = availableGpio_D;
+ hwp_configRegs->AP_GPIO_E_Mode = availableGpio_E;
+ // Set Alt Mux configuration
+ hwp_configRegs->Alt_mux_select = altMux;
+ hwp_configRegs->Alt_mux_select2 = altMux2;
+
+ // --------------------------------------------------
+ // As of now, all connected GPIOs, which are as GPIO
+ // or not used at all but connected are configured as
+ // GPIOs in input mode, except for Gouda reset pins
+ // --------------------------------------------------
+
+}
+
+
+// =============================================================================
+// hal_BoardSetup
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+//PROTECTED VOID hal_BoardSetup(CONST HAL_CFG_CONFIG_T* halCfg)
+PUBLIC INT32 hal_BoardSetup(INT8 run_mode)
+{
+ g_bootBootMode = rda_hwcfg_get();
+ hal_BoardSetupGeneral(&hal_cfg);
+
+ if(g_halConfigError)
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
diff --git a/board/rda/rda8810h/u-boot-spl.lds b/board/rda/rda8810h/u-boot-spl.lds
new file mode 100644
index 0000000000..afe35fd2a8
--- /dev/null
+++ b/board/rda/rda8810h/u-boot-spl.lds
@@ -0,0 +1,35 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00100100;
+ . = ALIGN(4);
+ .text :
+ {
+ __start = .;
+ arch/arm/cpu/armv7/start.o (.text)
+ *(.text)
+ }
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+ . = ALIGN(4);
+ . = .;
+ . = ALIGN(4);
+ __image_copy_end = .;
+ _end = .;
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start = .;
+ *(.bss*)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ ASSERT((ABSOLUTE(__bss_end__) < 0x00110000), \
+ "too big data in spl, don't exceed intrenal ram");
+ }
+}
diff --git a/board/rda/rda8820/Makefile b/board/rda/rda8820/Makefile
new file mode 100644
index 0000000000..ba9ad575bb
--- /dev/null
+++ b/board/rda/rda8820/Makefile
@@ -0,0 +1,82 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += clock_config.o clock.o ddr3_zhangli_32bit_dlloff.o
+else
+COBJS-$(CONFIG_MACH_RDA8820) += hal_config.o
+endif
+
+RDA_TARGET_DEF_FILE := $(ANDROID_BUILD_TOP)/$(RDA_TARGET_DEVICE_DIR)/target.def
+RDA_GET_MAKEFILE_VAR_FUNC = $(strip $(shell sed -n 's/^[ ]*$(1)[ ]*[?:]\?=\([^\#]\+\)\#*.*$$/\1/p' $(2)))
+
+NUMBER_OF_SIM := $(call RDA_GET_MAKEFILE_VAR_FUNC,NUMBER_OF_SIM,$(RDA_TARGET_DEF_FILE))
+ifeq ($(NUMBER_OF_SIM),)
+$(error Failed to get NUMBER_OF_SIM in $(RDA_TARGET_DEF_FILE))
+endif
+
+USER_SIM_ORDER := $(call RDA_GET_MAKEFILE_VAR_FUNC,USER_SIM_ORDER,$(RDA_TARGET_DEF_FILE))
+ifeq ($(USER_SIM_ORDER),)
+$(error Failed to get USER_SIM_ORDER in $(RDA_TARGET_DEF_FILE))
+endif
+
+NULL_STRING :=
+SPACE := ${NULL_STRING} # end of the line
+COMMA := ,
+TGT_SIM_ORDER := $(foreach SIM,$(USER_SIM_ORDER),$(SIM)$(COMMA))
+TGT_SIM_ORDER := $(subst ${SPACE},,${TGT_SIM_ORDER})
+
+CPPFLAGS_board/$(BOARDDIR)/hal_config.o += -I$(TOPDIR)/board/$(VENDOR)/common/include -DTGT_SIM_ORDER=$(TGT_SIM_ORDER) -DNUMBER_OF_SIM=$(NUMBER_OF_SIM)
+
+ifeq ($(strip $(TARGET_TABLET_MODE)),true)
+CPPFLAGS_board/$(BOARDDIR)/clock.o += -DTARGET_TABLET_MODE
+endif
+
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/rda8820/clock.c b/board/rda/rda8820/clock.c
new file mode 100644
index 0000000000..264f3f777f
--- /dev/null
+++ b/board/rda/rda8820/clock.c
@@ -0,0 +1,1312 @@
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/ispi.h>
+#include <asm/arch/rda_sys.h>
+#include "clock_config.h"
+#include "debug.h"
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#if (PMU_VBUCK1_VAL < 0 || PMU_VBUCK1_VAL > 15)
+#error "Invalid PMU_VBUCK1_VAL"
+#endif
+#if (PMU_VBUCK3_VAL < 0 || PMU_VBUCK3_VAL > 15)
+#error "Invalid PMU_VBUCK3_VAL"
+#endif
+#ifdef PMU_VBUCK4_VAL
+#if (PMU_VBUCK4_VAL < 0 || PMU_VBUCK4_VAL > 15)
+#error "Invalid PMU_VBUCK4_VAL"
+#endif
+#endif
+
+//#define DO_SIMPLE_DDR_TEST
+//#define DO_DDR_PLL_DEBUG
+
+enum {
+ AP_CPU_CLK_IDX = 0,
+ AP_BUS_CLK_IDX,
+ AP_MEM_CLK_IDX,
+ AP_USB_CLK_IDX,
+};
+
+static int pll_enabled(int idx)
+{
+ if ((hwp_sysCtrlAp->Cfg_Pll_Ctrl[idx] &
+ (SYS_CTRL_AP_AP_PLL_ENABLE_MASK |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK)) ==
+ (SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET))
+ return 1;
+ else
+ return 0;
+}
+
+static int usb_in_use = 0;
+
+static void check_usb_usage(void)
+{
+ unsigned int mask = SYS_CTRL_AP_BUS_SEL_FAST_SLOW |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_MASK |
+ SYS_CTRL_AP_PLL_LOCKED_USB_MASK;
+ unsigned int reg = SYS_CTRL_AP_BUS_SEL_FAST_FAST |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED |
+ SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED;
+
+ if ((hwp_sysCtrlAp->Sel_Clock & mask) == reg &&
+ pll_enabled(AP_BUS_CLK_IDX) &&
+ pll_enabled(AP_USB_CLK_IDX))
+ usb_in_use = 1;
+ else
+ usb_in_use = 0;
+}
+
+#ifdef DO_SIMPLE_DDR_TEST
+
+void mem_test_write(void)
+{
+ volatile unsigned int *addr;
+
+ printf("write ddr test!!!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+ while((unsigned int)addr < 0x81000000)
+ {
+ *addr = (unsigned int )addr;
+ addr++;
+ }
+}
+
+void mem_test_read(void)
+{
+ volatile unsigned int *addr;
+
+ printf("read ddr!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+
+ while((unsigned int)addr < 0x81000000)
+ {
+ if (*addr != (unsigned int)addr){
+ int i = 0;
+
+ printf("test error!!!!!, addr = %x\n", (unsigned int)addr);
+ for (i = 0; i < 80;i++){
+ printf("%x ", *(addr + i));
+ if ((i % 4) == 0)
+ printf("\n");
+ }
+
+ return;
+ }
+
+ addr++;
+ }
+ printf("test complete!\n");
+}
+
+#endif /* DO_SIMPLE_DDR_TEST */
+
+#ifndef CONFIG_RDA_FPGA
+
+// PMU bit fields
+#define PMU_SET_BITFIELD(dword, bitfield, value) \
+ (((dword) & ~(bitfield ## _MASK)) | (bitfield(value)))
+
+#define RDA_PMU_VBUCK1_BIT_ACT(n) (((n)&0xf)<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_SHIFT (12)
+
+#define RDA_PMU_VBUCK4_BIT_ACT_SHIFT (4)
+#define RDA_PMU_VBUCK4_BIT_ACT_MASK (0xf<<4)
+#define RDA_PMU_VBUCK4_BIT_ACT(n) (((n)&0xf)<<4)
+
+#define RDA_PMU_VBUCK3_BIT_ACT_SHIFT (12)
+#define RDA_PMU_VBUCK3_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK3_BIT_ACT(n) (((n)&0xf)<<12)
+
+struct pll_freq {
+ UINT32 freq_mhz;
+ UINT16 major;
+ UINT16 minor;
+ UINT16 with_div;
+ UINT16 div;
+};
+
+typedef enum {
+ PLL_REG_CPU_BASE = 0x00,
+ PLL_REG_BUS_BASE = 0x20,
+ PLL_REG_MEM_BASE = 0x60,
+ PLL_REG_USB_BASE = 0x80,
+} PLL_REG_BASE_INDEX_t;
+
+typedef enum {
+ PLL_REG_OFFSET_01H = 1,
+ PLL_REG_OFFSET_02H = 2,
+ PLL_REG_OFFSET_DIV = 3,
+ PLL_REG_OFFSET_04H = 4,
+ PLL_REG_OFFSET_MAJOR = 5,
+ PLL_REG_OFFSET_MINOR = 6,
+ PLL_REG_OFFSET_07H = 7,
+} PLL_REG_OFFSET_INDEX_t;
+
+#define PLL_FREQ_TABLE_COUNT 21
+
+static struct pll_freq pll_freq_table[PLL_FREQ_TABLE_COUNT] = {
+ /* MHz Major Minor div */
+ {1600, 0x7B13, 0xB138, 0, 0x0000},
+ {1200, 0x5C4E, 0xC4EC, 0, 0x0000},
+ {1000, 0x4CEC, 0x4EC4, 0, 0x0000},
+ { 800, 0x3D89, 0xD89C, 0, 0x0000},
+ { 600, 0x2E27, 0x6274, 0, 0x0000},
+ { 519, 0x27EC, 0x4EC4, 1, 0x0007},
+ { 500, 0x2676, 0x2762, 1, 0x0007},
+ { 480, 0x24EC, 0x4EC4, 0, 0x0000},
+ { 455, 0x2300, 0x0000, 1, 0xF397},
+ { 416, 0x2000, 0x0000, 1, 0xFA97},
+ /* 800M div 1, PLL:800M DDR:400M for mem pll only */
+ { 400, 0x1EC4, 0xEC4C, 1, 0xF997},
+ { 355, 0x369D, 0x89D8, 1, 0x9597},
+ /* 702M div 1, PLL:702M DDR:351M for mem pll only */
+ { 351, 0x3600, 0x0000, 1, 0x9597},
+ { 333, 0x333B, 0x13B1, 1, 0x9D97},
+ /* 624M div 1, PLL:624M DDR:312M for mem pll only */
+ { 312, 0x3000, 0x0000, 1, 0x9D97},
+ { 290, 0x2C9D, 0x89D8, 1, 0x9A97},
+ /* 520M div 1, PLL:520M DDR:260M for mem pll only */
+ { 260, 0x2800, 0x0000, 1, 0xA297},
+ /* 800M div 2, PLL:400M DDR:200M for mem pll only */
+ { 200, 0x3D89, 0xD89C, 1, 0xB996},
+ /* DDR:156M for mem pll only */
+ { 156, 0x3000, 0x0000, 1, 0x0006},
+ /* 800M div 4, PLL:200M DDR:100M for mem pll only */
+ { 100, 0x3D89, 0xD89C, 1, 0x0005},
+ /* 800M div 8, PLL:100M DDR:50M for mem pll only */
+ { 50, 0x3D89, 0xD89C, 1, 0x0004},
+};
+
+static const struct clock_config *g_clock_config;
+
+#ifdef DO_DDR_PLL_DEBUG
+static struct clock_config clock_debug_config;
+static UINT32 ddrfreq = 400, ddr32bit = 0;
+#endif
+
+static void sys_shutdown_pll(void)
+{
+ int i;
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ if (usb_in_use) {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ } else {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_SLOW
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ }
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET;
+ }
+}
+
+static void sys_setup_pll(void)
+{
+ int i;
+ UINT32 mask;
+ UINT32 locked;
+ int cnt = 10; //10us, according to IC, the pll must be locked
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+
+ if (AP_MEM_CLK_IDX == i)
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(1)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ else
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ }
+
+ mask = SYS_CTRL_AP_PLL_LOCKED_CPU_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_MASK
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_MASK
+ ;
+ locked = SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED
+ ;
+
+ while (((hwp_sysCtrlAp->Sel_Clock & mask) != locked) && cnt) {
+ udelay(1);
+ cnt--;
+ }
+ if (cnt == 0) {
+ printf("WARNING, cannot lock cpu/bus/mem pll 0x%08x ",
+ hwp_sysCtrlAp->Sel_Clock);
+ printf("but we run anyway ...\n");
+ }
+
+ for (i = 0; i < 3; i++) {
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] |=
+ SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE;
+ }
+
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_FAST
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+}
+
+static void sys_setup_clk(void)
+{
+ // Disable some power-consuming clocks
+ hwp_sysCtrlAp->Clk_APO_Disable = SYS_CTRL_AP_DISABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Disable = SYS_CTRL_AP_DISABLE_MEM_VPU;
+
+ // Init clock gating mode
+ hwp_sysCtrlAp->Clk_CPU_Mode = 0;
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL;
+ hwp_sysCtrlAp->Clk_AXIDIV2_Mode = 0;
+ hwp_sysCtrlAp->Clk_GCG_Mode = SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL
+ | SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL;
+ hwp_sysCtrlAp->Clk_AHB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB2_Mode = 0;
+ hwp_sysCtrlAp->Clk_MEM_Mode = 0;
+ //hwp_sysCtrlAp->Clk_APO_Mode = SYS_CTRL_AP_MODE_APOC_VPU_MANUAL;
+
+ // Init module frequency
+ hwp_sysCtrlAp->Cfg_Clk_AP_CPU = g_clock_config->CLK_CPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_AXI = g_clock_config->CLK_AXI;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GCG = g_clock_config->CLK_GCG;
+
+ if (!usb_in_use) {
+ hwp_sysCtrlAp->Cfg_Clk_AP_AHB1 = g_clock_config->CLK_AHB1;
+ }
+
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB1 = g_clock_config->CLK_APB1;
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB2 = g_clock_config->CLK_APB2;
+ hwp_sysCtrlAp->Cfg_Clk_AP_MEM = g_clock_config->CLK_MEM;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GPU = g_clock_config->CLK_GPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VPU = g_clock_config->CLK_VPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VOC = g_clock_config->CLK_VOC;
+ hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH = g_clock_config->CLK_SFLSH;
+}
+
+static void print_sys_reg(char *name, UINT32 value)
+{
+ printf("clk %s = %lx\n", name, value);
+}
+
+static void sys_dump_clk(void)
+{
+ print_sys_reg("CPU", hwp_sysCtrlAp->Cfg_Clk_AP_CPU);
+ print_sys_reg("AXI", hwp_sysCtrlAp->Cfg_Clk_AP_AXI);
+ print_sys_reg("GCG", hwp_sysCtrlAp->Cfg_Clk_AP_GCG);
+ print_sys_reg("AHB1", hwp_sysCtrlAp->Cfg_Clk_AP_AHB1);
+ print_sys_reg("APB1", hwp_sysCtrlAp->Cfg_Clk_AP_APB1);
+ print_sys_reg("APB2", hwp_sysCtrlAp->Cfg_Clk_AP_APB2);
+ print_sys_reg("MEM", hwp_sysCtrlAp->Cfg_Clk_AP_MEM);
+ print_sys_reg("GPU", hwp_sysCtrlAp->Cfg_Clk_AP_GPU);
+ print_sys_reg("VPU", hwp_sysCtrlAp->Cfg_Clk_AP_VPU);
+ print_sys_reg("VOC", hwp_sysCtrlAp->Cfg_Clk_AP_VOC);
+ print_sys_reg("SFLSH", hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH);
+}
+
+static int pll_freq_set(UINT32 reg_base, UINT32 freq_mhz)
+{
+ int i;
+ struct pll_freq *freq;
+ unsigned int major, minor;
+ unsigned short value_02h;
+
+ /* find pll_freq */
+ for (i = 0; i < PLL_FREQ_TABLE_COUNT; i++) {
+ if (pll_freq_table[i].freq_mhz == freq_mhz)
+ break;
+ }
+ if (i >= PLL_FREQ_TABLE_COUNT) {
+ printf("pll_freq_set, fail to find freq\n");
+ return -1;
+ }
+
+ freq = &pll_freq_table[i];
+ if (freq->with_div && (reg_base == PLL_REG_MEM_BASE)) {
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV,
+ freq->div);
+ // Calculate the real MEM PLL freq
+ freq_mhz *= (1 << (8 - (freq->div & 0x7)));
+ }
+ if (freq_mhz >= 800 || reg_base == PLL_REG_USB_BASE) {
+ value_02h = 0x0309;
+ // Div PLL freq by 2
+ minor = ((freq->major & 0xFFFF) << 14) |
+ ((freq->minor >> 2) & 0x3FFF);
+ minor >>= 1;
+ // Recalculate the divider
+ major = (minor >> 14) & 0xFFFF;
+ minor = (minor << 2) & 0xFFFF;
+ } else {
+ value_02h = 0x0209;
+ major = freq->major;
+ minor = freq->minor;
+ }
+ if (reg_base == PLL_REG_USB_BASE)
+ value_02h ^= (1 << 8);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_02H, value_02h);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MAJOR, major);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MINOR, minor);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0010);
+
+ return 0;
+}
+
+static void pll_setup_freq(void)
+{
+ pll_freq_set(PLL_REG_CPU_BASE, g_clock_config->PLL_FREQ_CPU);
+ // Always configure BUS PLL, even when it is being used
+ pll_freq_set(PLL_REG_BUS_BASE, g_clock_config->PLL_FREQ_BUS);
+ pll_freq_set(PLL_REG_MEM_BASE, g_clock_config->PLL_FREQ_MEM);
+ pll_freq_set(PLL_REG_USB_BASE, g_clock_config->PLL_FREQ_USB);
+}
+
+static void print_pll_freq(char *name, UINT32 value)
+{
+ printf("pll freq %s = %d\n", name, (int)value);
+}
+
+static void sys_dump_pll_freq(void)
+{
+ print_pll_freq("CPU", g_clock_config->PLL_FREQ_CPU);
+ print_pll_freq("BUS", g_clock_config->PLL_FREQ_BUS);
+ print_pll_freq("MEM", g_clock_config->PLL_FREQ_MEM);
+ //print_pll_freq("USB", g_clock_config->PLL_FREQ_USB);
+}
+
+static void pmu_get_efuse_dcdc(int buckVoltLow[])
+{
+ static const u8 setBitCnt[8] = { 0, 1, 1, 2, 1, 2, 2, 3, };
+ u16 dcdc;
+ int i;
+
+ ispi_reg_write(0x51, 0x02ed);
+ udelay(2000);
+ ispi_reg_write(0x51, 0x02fd);
+ dcdc = ispi_reg_read(0x52);
+ ispi_reg_write(0x51, 0x0200);
+
+ for (i = 0; i < 4; i++) {
+ buckVoltLow[i] = (setBitCnt[dcdc & 0x7] > 1);
+ dcdc >>= 3;
+ }
+}
+
+static void pmu_setup_init(void)
+{
+ u32 value;
+ int buck_volt_low[4] = { 0, };
+
+ rda_nand_iodrive_set();
+
+#ifdef CONFIG_RDA_PDL
+ enable_charger(0);
+#endif
+
+ ispi_open(1);
+
+ // Disable vibrator
+ ispi_reg_write(0x03, 0x9FFF);
+ // Enable bandgap chopper mode
+ ispi_reg_write(0x0F, 0x1E90);
+ // Enable high AC throttling
+ ispi_reg_write(0x12, 0x1218);
+#ifdef TARGET_TABLET_MODE
+ // Charger current (cc = 6, pre = 7)
+ ispi_reg_write(0x13, 0x1B70);
+#else
+ // Charger current (cc = 2, pre = 7)
+ ispi_reg_write(0x13, 0x1970);
+#endif
+ // Vcore DCDC freq
+ ispi_reg_write(0x2D, 0x96BA);
+ ispi_reg_write(0x2E, 0x12AA);
+ // Get efuse dcdc
+ pmu_get_efuse_dcdc(buck_volt_low);
+ // Vcore voltage
+ value = 0x9244;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK1_BIT_ACT,
+ PMU_VBUCK1_VAL +
+ ((PMU_VBUCK1_VAL < 15 && buck_volt_low[0]) ? 1 : 0));
+ ispi_reg_write(0x2F, value);
+ // DDR PWM mode
+ ispi_reg_write(0x0D, 0x92D0);
+ // DDR voltage
+ value = 0xAAB5;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK3_BIT_ACT,
+ PMU_VBUCK3_VAL +
+ ((PMU_VBUCK3_VAL < 15 && buck_volt_low[2]) ? 1 : 0));
+#ifdef PMU_VBUCK4_VAL
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK4_BIT_ACT,
+ PMU_VBUCK4_VAL +
+ ((PMU_VBUCK4_VAL < 15 && buck_volt_low[3]) ? 1 : 0));
+ value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ // vBuck4 in low voltage range
+ ispi_reg_write(0x36, 0x6E45);
+#else
+ ispi_reg_write(0x36, 0x6E54);
+#endif
+ ispi_reg_write(0x2A, value);
+ // DDR power parameters
+ ispi_reg_write(0x4A, 0x96AA);
+ ispi_reg_write(0x4B, 0x96AA);
+
+ ispi_open(0);
+}
+
+static void setup_ddr_vtt(int vtt)
+{
+ printf("setup ddr vtt to %d\n", vtt);
+ ispi_reg_write(0x69, 0x0008 | (vtt & 0x07) );
+}
+
+#if 0
+/*
+ * we initialize usb clock, but this won't cause the usb clock jitter,
+ * because wo don't setup the usb pll
+ */
+static void usb_clock_pre_init(void)
+{
+ ispi_reg_write(0x83, 0x72ef);
+ ispi_reg_write(0x89, 0x7400);
+}
+#endif
+
+static void pll_setup_init(void)
+{
+ setup_ddr_vtt(DDR_VTT_VAL);
+
+ if (g_clock_config->DDR_CHAN_1_VALID) {
+ ispi_reg_write(0x101, g_clock_config->DDR_TIMING_101H);
+ ispi_reg_write(0x102, g_clock_config->DDR_TIMING_102H);
+ ispi_reg_write(0x103, g_clock_config->DDR_TIMING_103H);
+ ispi_reg_write(0x104, g_clock_config->DDR_TIMING_104H);
+ ispi_reg_write(0x105, g_clock_config->DDR_TIMING_105H);
+ ispi_reg_write(0x106, g_clock_config->DDR_TIMING_106H);
+ ispi_reg_write(0x107, g_clock_config->DDR_TIMING_107H);
+ ispi_reg_write(0x108, g_clock_config->DDR_TIMING_108H);
+ ispi_reg_write(0x109, g_clock_config->DDR_TIMING_109H);
+ ispi_reg_write(0x10A, g_clock_config->DDR_TIMING_10AH);
+ ispi_reg_write(0x10B, g_clock_config->DDR_TIMING_10BH);
+ ispi_reg_write(0x10C, g_clock_config->DDR_TIMING_10CH);
+ ispi_reg_write(0x10D, g_clock_config->DDR_TIMING_10DH);
+ ispi_reg_write(0x10E, g_clock_config->DDR_TIMING_10EH);
+ ispi_reg_write(0x10F, g_clock_config->DDR_TIMING_10FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID) {
+ ispi_reg_write(0x121, g_clock_config->DDR_TIMING_121H);
+ ispi_reg_write(0x122, g_clock_config->DDR_TIMING_122H);
+ ispi_reg_write(0x123, g_clock_config->DDR_TIMING_123H);
+ ispi_reg_write(0x124, g_clock_config->DDR_TIMING_124H);
+ ispi_reg_write(0x125, g_clock_config->DDR_TIMING_125H);
+ ispi_reg_write(0x126, g_clock_config->DDR_TIMING_126H);
+ ispi_reg_write(0x127, g_clock_config->DDR_TIMING_127H);
+ ispi_reg_write(0x128, g_clock_config->DDR_TIMING_128H);
+ ispi_reg_write(0x129, g_clock_config->DDR_TIMING_129H);
+ ispi_reg_write(0x12A, g_clock_config->DDR_TIMING_12AH);
+ ispi_reg_write(0x12B, g_clock_config->DDR_TIMING_12BH);
+ ispi_reg_write(0x12C, g_clock_config->DDR_TIMING_12CH);
+ ispi_reg_write(0x12D, g_clock_config->DDR_TIMING_12DH);
+ ispi_reg_write(0x12E, g_clock_config->DDR_TIMING_12EH);
+ ispi_reg_write(0x12F, g_clock_config->DDR_TIMING_12FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID) {
+ ispi_reg_write(0x141, g_clock_config->DDR_TIMING_141H);
+ ispi_reg_write(0x142, g_clock_config->DDR_TIMING_142H);
+ ispi_reg_write(0x143, g_clock_config->DDR_TIMING_143H);
+ ispi_reg_write(0x144, g_clock_config->DDR_TIMING_144H);
+ ispi_reg_write(0x145, g_clock_config->DDR_TIMING_145H);
+ ispi_reg_write(0x146, g_clock_config->DDR_TIMING_146H);
+ ispi_reg_write(0x147, g_clock_config->DDR_TIMING_147H);
+ ispi_reg_write(0x148, g_clock_config->DDR_TIMING_148H);
+ ispi_reg_write(0x149, g_clock_config->DDR_TIMING_149H);
+ ispi_reg_write(0x14A, g_clock_config->DDR_TIMING_14AH);
+ ispi_reg_write(0x14B, g_clock_config->DDR_TIMING_14BH);
+ ispi_reg_write(0x14C, g_clock_config->DDR_TIMING_14CH);
+ ispi_reg_write(0x14D, g_clock_config->DDR_TIMING_14DH);
+ ispi_reg_write(0x14E, g_clock_config->DDR_TIMING_14EH);
+ ispi_reg_write(0x14F, g_clock_config->DDR_TIMING_14FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID) {
+ ispi_reg_write(0x161, g_clock_config->DDR_TIMING_161H);
+ ispi_reg_write(0x162, g_clock_config->DDR_TIMING_162H);
+ ispi_reg_write(0x163, g_clock_config->DDR_TIMING_163H);
+ ispi_reg_write(0x164, g_clock_config->DDR_TIMING_164H);
+ ispi_reg_write(0x165, g_clock_config->DDR_TIMING_165H);
+ ispi_reg_write(0x166, g_clock_config->DDR_TIMING_166H);
+ ispi_reg_write(0x167, g_clock_config->DDR_TIMING_167H);
+ ispi_reg_write(0x168, g_clock_config->DDR_TIMING_168H);
+ ispi_reg_write(0x169, g_clock_config->DDR_TIMING_169H);
+ ispi_reg_write(0x16A, g_clock_config->DDR_TIMING_16AH);
+ ispi_reg_write(0x16B, g_clock_config->DDR_TIMING_16BH);
+ ispi_reg_write(0x16C, g_clock_config->DDR_TIMING_16CH);
+ ispi_reg_write(0x16D, g_clock_config->DDR_TIMING_16DH);
+ ispi_reg_write(0x16E, g_clock_config->DDR_TIMING_16EH);
+ ispi_reg_write(0x16F, g_clock_config->DDR_TIMING_16FH);
+ }
+
+ ispi_reg_write(0x160, g_clock_config->DDR_TIMING_160H);
+ ispi_reg_write(0x180, g_clock_config->DDR_TIMING_180H);
+ ispi_reg_write(0x181, g_clock_config->DDR_TIMING_181H);
+ ispi_reg_write(0x182, g_clock_config->DDR_TIMING_182H);
+ ispi_reg_write(0x183, g_clock_config->DDR_TIMING_183H);
+ ispi_reg_write(0x184, g_clock_config->DDR_TIMING_184H);
+ ispi_reg_write(0x185, g_clock_config->DDR_TIMING_185H);
+ ispi_reg_write(0x186, g_clock_config->DDR_TIMING_186H);
+ ispi_reg_write(0x187, g_clock_config->DDR_TIMING_187H);
+ ispi_reg_write(0x188, g_clock_config->DDR_TIMING_188H);
+ ispi_reg_write(0x189, g_clock_config->DDR_TIMING_189H);
+ ispi_reg_write(0x18A, g_clock_config->DDR_TIMING_18AH);
+ ispi_reg_write(0x18B, g_clock_config->DDR_TIMING_18BH);
+ ispi_reg_write(0x18C, g_clock_config->DDR_TIMING_18CH);
+
+ //usb_clock_pre_init();
+
+ udelay(5000);
+}
+
+static void pll_setup_mem(void)
+{
+}
+
+static void pll_setup_mem_cal(void)
+{
+}
+
+static void print_pll_reg(UINT32 index, UINT32 value)
+{
+ printf("pll reg %lx = %lx\n", index, value);
+}
+
+static void pll_dump_reg(void)
+{
+ print_pll_reg(0x005, ispi_reg_read(0x005));
+ print_pll_reg(0x006, ispi_reg_read(0x006));
+ print_pll_reg(0x063, ispi_reg_read(0x063));
+ print_pll_reg(0x065, ispi_reg_read(0x065));
+ print_pll_reg(0x066, ispi_reg_read(0x066));
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ {
+ print_pll_reg(0x100, ispi_reg_read(0x100));
+ print_pll_reg(0x101, ispi_reg_read(0x101));
+ print_pll_reg(0x102, ispi_reg_read(0x102));
+ print_pll_reg(0x103, ispi_reg_read(0x103));
+ print_pll_reg(0x104, ispi_reg_read(0x104));
+ print_pll_reg(0x105, ispi_reg_read(0x105));
+ print_pll_reg(0x106, ispi_reg_read(0x106));
+ print_pll_reg(0x107, ispi_reg_read(0x107));
+ print_pll_reg(0x108, ispi_reg_read(0x108));
+ print_pll_reg(0x109, ispi_reg_read(0x109));
+ print_pll_reg(0x10A, ispi_reg_read(0x10A));
+ print_pll_reg(0x10B, ispi_reg_read(0x10B));
+ print_pll_reg(0x10C, ispi_reg_read(0x10C));
+ print_pll_reg(0x10D, ispi_reg_read(0x10D));
+ print_pll_reg(0x10E, ispi_reg_read(0x10E));
+ print_pll_reg(0x10F, ispi_reg_read(0x10F));
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ {
+ print_pll_reg(0x120, ispi_reg_read(0x120));
+ print_pll_reg(0x121, ispi_reg_read(0x121));
+ print_pll_reg(0x122, ispi_reg_read(0x122));
+ print_pll_reg(0x123, ispi_reg_read(0x123));
+ print_pll_reg(0x124, ispi_reg_read(0x124));
+ print_pll_reg(0x125, ispi_reg_read(0x125));
+ print_pll_reg(0x126, ispi_reg_read(0x126));
+ print_pll_reg(0x127, ispi_reg_read(0x127));
+ print_pll_reg(0x128, ispi_reg_read(0x128));
+ print_pll_reg(0x129, ispi_reg_read(0x129));
+ print_pll_reg(0x12A, ispi_reg_read(0x12A));
+ print_pll_reg(0x12B, ispi_reg_read(0x12B));
+ print_pll_reg(0x12C, ispi_reg_read(0x12C));
+ print_pll_reg(0x12D, ispi_reg_read(0x12D));
+ print_pll_reg(0x12E, ispi_reg_read(0x12E));
+ print_pll_reg(0x12F, ispi_reg_read(0x12F));
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ {
+ print_pll_reg(0x140, ispi_reg_read(0x140));
+ print_pll_reg(0x141, ispi_reg_read(0x141));
+ print_pll_reg(0x142, ispi_reg_read(0x142));
+ print_pll_reg(0x143, ispi_reg_read(0x143));
+ print_pll_reg(0x144, ispi_reg_read(0x144));
+ print_pll_reg(0x145, ispi_reg_read(0x145));
+ print_pll_reg(0x146, ispi_reg_read(0x146));
+ print_pll_reg(0x147, ispi_reg_read(0x147));
+ print_pll_reg(0x148, ispi_reg_read(0x148));
+ print_pll_reg(0x149, ispi_reg_read(0x149));
+ print_pll_reg(0x14A, ispi_reg_read(0x14A));
+ print_pll_reg(0x14B, ispi_reg_read(0x14B));
+ print_pll_reg(0x14C, ispi_reg_read(0x14C));
+ print_pll_reg(0x14D, ispi_reg_read(0x14D));
+ print_pll_reg(0x14E, ispi_reg_read(0x14E));
+ print_pll_reg(0x14F, ispi_reg_read(0x14F));
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ {
+ print_pll_reg(0x161, ispi_reg_read(0x161));
+ print_pll_reg(0x162, ispi_reg_read(0x162));
+ print_pll_reg(0x163, ispi_reg_read(0x163));
+ print_pll_reg(0x164, ispi_reg_read(0x164));
+ print_pll_reg(0x165, ispi_reg_read(0x165));
+ print_pll_reg(0x166, ispi_reg_read(0x166));
+ print_pll_reg(0x167, ispi_reg_read(0x167));
+ print_pll_reg(0x168, ispi_reg_read(0x168));
+ print_pll_reg(0x169, ispi_reg_read(0x169));
+ print_pll_reg(0x16A, ispi_reg_read(0x16A));
+ print_pll_reg(0x16B, ispi_reg_read(0x16B));
+ print_pll_reg(0x16C, ispi_reg_read(0x16C));
+ print_pll_reg(0x16D, ispi_reg_read(0x16D));
+ print_pll_reg(0x16E, ispi_reg_read(0x16E));
+ print_pll_reg(0x16F, ispi_reg_read(0x16F));
+ }
+
+ print_pll_reg(0x160, ispi_reg_read(0x160));
+ print_pll_reg(0x180, ispi_reg_read(0x180));
+ print_pll_reg(0x181, ispi_reg_read(0x181));
+ print_pll_reg(0x182, ispi_reg_read(0x182));
+ print_pll_reg(0x183, ispi_reg_read(0x183));
+ print_pll_reg(0x184, ispi_reg_read(0x184));
+ print_pll_reg(0x185, ispi_reg_read(0x185));
+ print_pll_reg(0x186, ispi_reg_read(0x186));
+ print_pll_reg(0x187, ispi_reg_read(0x187));
+ print_pll_reg(0x188, ispi_reg_read(0x188));
+ print_pll_reg(0x189, ispi_reg_read(0x189));
+ print_pll_reg(0x18A, ispi_reg_read(0x18A));
+ print_pll_reg(0x18B, ispi_reg_read(0x18B));
+ print_pll_reg(0x18C, ispi_reg_read(0x18C));
+}
+
+static int clock_save_config(void)
+{
+ /* save config to nand */
+ return 1;
+}
+
+#ifdef DO_DDR_PLL_DEBUG
+
+static int ddr_get_freq(UINT8 chioce)
+{
+ switch(chioce)
+ {
+ case 1:
+ return 50;
+ case 2:
+ return 100;
+ case 3:
+ return 156;
+ case 4:
+ return 200;
+ case 5:
+ return 290;
+ case 6:
+ return 333;
+ case 7:
+ return 355;
+ case 8:
+ return 400;
+ case 9:
+ return 416;
+ case 10:
+ return 455;
+ case 11:
+ return 500;
+ case 12:
+ return 519;
+ case 13:
+ return 260;
+ default:
+ return -1;
+ }
+}
+
+static void freq_choose(void)
+{
+ UINT8 i = 0, buf[3] = {0}, choice = 0;
+ INT32 freq_temp = 0;
+
+ printf("\nPlese choose the ddr Freq:");
+ printf("\n1.50M 2.100M 3.156M 4.200M 5.290M 6.333M 7.355M 8.400M 9.416M 10.455M 11.500M 12.519M 13.260M");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ serial_puts("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ choice = buf[0] - 0x30;
+ else if (2 == i)
+ choice = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ freq_temp = ddr_get_freq(choice);
+ if (-1 == freq_temp )
+ printf("\n Sorry, the fre you choose is wrong");
+ ddrfreq = freq_temp;
+}
+
+static void data_bits_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+
+ printf("\nPlese choose the ddr data bits:");
+ printf("\n1.16 2.32");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr32bit = 0;
+ else
+ ddr32bit = 1;
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+#if 0
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ printf("\nPlese input DDR voltage(0 ~ 15):");
+ }
+
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+}
+#endif
+
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ if (2 == vcoreselect)
+ printf("\nPlese input DDR buck3 voltage(0 ~ 15):");
+ else
+ printf("\nPlese input DDR buck4 voltage(0 ~ 15):");
+ }
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ if ((vcoreselect == 1) || (vcoreselect == 2))
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+ }
+ else
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 4;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 4);
+ reg_value |= temp ;
+ reg_value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ ispi_reg_write(regid, reg_value);
+ ispi_reg_write(0x0D, 0x92D0);
+ ispi_reg_write(0x4B, 0x96A8);
+ mdelay(100);
+ }
+}
+
+static void pmu_buck4_buck3_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+ UINT8 ddr_voltage_source = 0;
+
+ printf("\nPlese choose the ddr voltage:");
+ printf("\n1.DDR3L 2.DDR3");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr_voltage_source =2;
+ else{
+ ddr_voltage_source = 3;
+ pmu_setup_calibration_voltage(2);
+ }
+ pmu_setup_calibration_voltage(ddr_voltage_source);
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+
+void clock_load_ddr_cal_config(void)
+{
+ clock_debug_config.PLL_FREQ_MEM = ddrfreq;
+ if (ddrfreq < 200)
+ clock_debug_config.DDR_FLAGS |= DDR_FLAGS_DLLOFF;
+ else
+ clock_debug_config.DDR_FLAGS &= ~DDR_FLAGS_DLLOFF;
+
+ if (0 == ddr32bit)
+ {
+ clock_debug_config.DDR_CHAN_3_VALID = 0;
+ clock_debug_config.DDR_CHAN_4_VALID = 0;
+ }
+
+ clock_debug_config.DDR_PARA &= ~DDR_PARA_MEM_BITS_MASK;
+ if (0 == ddr32bit)
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(1);
+ else
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(2);
+}
+
+static int serial_gets(UINT8 *pstr)
+{
+ UINT32 length;
+
+ length = 0;
+ while(1) {
+ pstr[length] = serial_getc();
+ if(pstr[length] == '\r') {
+ pstr[length] = 0x00;
+ break;
+ }
+ else if( pstr[length] == '\b' ) {
+ if(length>0) {
+ length --;
+ printf("\b");
+ }
+ }
+ else {
+ serial_putc(pstr[length]);
+ length ++;
+ }
+
+ if(length > 32)
+ return -1;
+ }
+ return length;
+}
+
+UINT32 asc2hex(UINT8 *pstr, UINT8 len)
+{
+ UINT8 i,ch,mylen;
+ UINT32 hexvalue;
+
+ for(mylen=0,i=0; i<8; i++)
+ {
+ if( pstr[i] == 0 )
+ break;
+ mylen ++;
+ }
+ if( len != 0 )
+ {
+ if(mylen>len)
+ mylen = len;
+ }
+ if(mylen>8)
+ mylen = 8;
+
+ hexvalue = 0;
+ for (i = 0; i < mylen; i++)
+ {
+ hexvalue <<= 4;
+ ch = *(pstr+i);
+ if((ch>='0') && (ch<='9'))
+ hexvalue |= ch - '0';
+ else if((ch>='A') && (ch<='F'))
+ hexvalue |= ch - ('A' - 10);
+ else if((ch>='a') && (ch<='f'))
+ hexvalue |= ch - ('a' - 10);
+ else
+ ;
+ }
+ return(hexvalue);
+}
+
+static int process_cmd(char * cmd)
+{
+ char cmd_element[3][16] = {{0}};
+ char * cmd_temp = cmd;
+ UINT8 i = 0, cmd_element_num = 0, former_space = 1;
+ UINT16 reg = 0, reg_value = 0;
+
+ if (NULL == cmd)
+ return -1;
+
+ while(('\0' != *cmd_temp) && ('\r' != *cmd_temp) && ('\n' != *cmd_temp))
+ {
+ if (' ' == * cmd_temp)
+ {
+ if (0 == former_space)
+ {
+ former_space = 1;
+ cmd_element[cmd_element_num][i] = '\0';
+ cmd_element_num++;
+ if (cmd_element_num > 2)
+ return -1;
+
+ i = 0;
+ }
+ }
+ else
+ {
+ former_space = 0;
+ cmd_element[cmd_element_num][i] = *cmd_temp;
+ i++;
+ if (i > 6)
+ return -1;
+ }
+
+ cmd_temp++;
+ }
+
+ cmd_element[cmd_element_num][i] = '\0';
+
+ if (!strcmp(cmd_element[0], "read"))
+ {
+ if (cmd_element_num == 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1]))
+ return -1;
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = ispi_reg_read(reg);
+ printf("value = 0x%x", reg_value);
+ printf("\nddrPll#");
+ }
+ else if (!strcmp(cmd_element[0], "write"))
+ {
+ if (cmd_element_num != 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1])
+ || ('0' != cmd_element[2][0]) || ('x' != cmd_element[2][1]))
+ return -1;
+
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = (UINT16)asc2hex((UINT8 *)&cmd_element[2][2], 4);
+ ispi_reg_write(reg, reg_value);
+ }
+ else if (!strcmp(cmd_element[0], "finish"))
+ {
+ return 1;
+ }
+ else if (!strcmp(cmd_element[0], "dump"))
+ {
+ pll_dump_reg();
+ printf("ddrPll#");
+ }
+ else
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+static void cmd_input(void)
+{
+ char cmd[48] = {0};
+ int len = 0;
+
+ ispi_open(0);
+ printf("\nddrPll#");
+ while(1)
+ {
+ len = serial_gets((UINT8 *)cmd);
+ printf("\nddrPll#");
+ if (len > 0)
+ {
+ int result = 0;
+
+ result = process_cmd(cmd);
+ if (-1 == result)
+ printf("command error! \nddrPll#");
+ else if (1 == result)
+ break;
+ else
+ continue;
+ }
+ }
+
+ return;
+}
+
+#endif /* DO_DDR_PLL_DEBUG */
+
+int clock_init(void)
+{
+#ifdef DO_DDR_PLL_DEBUG
+ char choice = 'n';
+#endif
+
+ /* First check current usb usage */
+ check_usb_usage();
+
+ printf("Init Clock ...\n");
+ g_clock_config = get_default_clock_config();
+
+ printf("Clock config ver: %d.%d\n",
+ g_clock_config->VERSION_MAJOR, g_clock_config->VERSION_MINOR);
+
+ pmu_setup_init();
+
+#ifdef DO_DDR_PLL_DEBUG
+ printf("If you want to config the ddr para manully ?(y = yes, n = no) \n");
+ choice = serial_getc();
+ if (choice == 'y')
+ {
+ memcpy(&clock_debug_config, g_clock_config,
+ sizeof(clock_debug_config));
+ g_clock_config = &clock_debug_config;
+ pmu_setup_calibration_voltage(1);
+ pmu_buck4_buck3_choose();
+ freq_choose();
+ data_bits_choose();
+ clock_load_ddr_cal_config();
+ }
+#endif
+
+ sys_shutdown_pll();
+ ispi_open(0);
+ pll_setup_init();
+#ifdef DO_DDR_PLL_DEBUG
+ if (choice == 'y')
+ cmd_input();
+#endif
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+
+ if (g_clock_config->DDR_CAL) {
+ printf("Init DDR for ddr_cal\n");
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+ pll_setup_mem_cal();
+ clock_save_config();
+ } else {
+ pll_setup_mem();
+ }
+
+ sys_dump_pll_freq();
+ sys_dump_clk();
+ pll_dump_reg();
+
+ printf("Init DDR, flag = 0x%04x, para = 0x%08lx\n",
+ g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+
+ #ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#else /* CONFIG_RDA_FPGA */
+
+int clock_init(void)
+{
+ u16 ddr_flags = DDR_FLAGS_DLLOFF
+ | DDR_FLAGS_ODT(1)
+ | DDR_FLAGS_RON(0);
+ //32bit
+ u32 ddr_para = DDR_PARA_MEM_BITS(2)
+ | DDR_PARA_BANK_BITS(3)
+ | DDR_PARA_ROW_BITS(3)
+ | DDR_PARA_COL_BITS(2);
+
+ printf("Init DDR\n");
+ ddr_init(ddr_flags, ddr_para);
+ printf("Done\n");
+
+#ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#endif /* CONFIG_RDA_FPGA */
+
diff --git a/board/rda/rda8820/clock_config.c b/board/rda/rda8820/clock_config.c
new file mode 100644
index 0000000000..84091581fc
--- /dev/null
+++ b/board/rda/rda8820/clock_config.c
@@ -0,0 +1,147 @@
+#ifndef TARGET_TOOL
+#include <common.h>
+#include <asm/arch/factory.h>
+#include "clock_config.h"
+#endif
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+static const struct clock_config clock_default_config = {
+ /* Header */
+ 0, // MAGIC;
+ CLOCK_VER_MAJOR, // VERSION_MAJOR;
+ CLOCK_VER_MINOR, // VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ _TGT_AP_PLL_CPU_FREQ, // PLL_FREQ_CPU; /* 05, 06 */
+ _TGT_AP_PLL_BUS_FREQ, // PLL_FREQ_BUS; /* 25, 26 */
+ _TGT_AP_PLL_MEM_FREQ, // PLL_FREQ_MEM; /* 65, 66 */
+ _TGT_AP_PLL_USB_FREQ, // PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Cal */
+ 0, // DDR_CAL;
+ /* DDR_FLAGS */
+ DDR_FLAGS_ODT(_TGT_AP_DDR_ODT) // 010 -- 120 Ohm
+#if (_TGT_AP_DDR_CLOCK < 200)
+ | DDR_FLAGS_DLLOFF
+#endif
+#ifdef _TGT_AP_DDR_LOWPWR
+ | DDR_FLAGS_LOWPWR
+#endif
+ | DDR_FLAGS_RON(_TGT_AP_DDR_RON), // 00 -- 40 Ohm
+ /* DDR_PARA */
+ DDR_PARA_CHIP_BITS(_TGT_AP_DDR_CHIP_BITS)
+ | DDR_PARA_MEM_BITS(_TGT_AP_DDR_MEM_BITS)
+ | DDR_PARA_BANK_BITS(_TGT_AP_DDR_BANK_BITS)
+ | DDR_PARA_ROW_BITS(_TGT_AP_DDR_ROW_BITS )
+ | DDR_PARA_COL_BITS(_TGT_AP_DDR_COL_BITS),
+
+ /* AP sysctrl */
+ _TGT_AP_CLK_CPU, // CLK_CPU;
+ _TGT_AP_CLK_AXI, // CLK_AXI;
+ _TGT_AP_CLK_GCG, // CLK_GCG;
+ _TGT_AP_CLK_AHB1, // CLK_AHB1;
+ _TGT_AP_CLK_APB1, // CLK_APB1;
+ _TGT_AP_CLK_APB2, // CLK_APB2;
+ _TGT_AP_CLK_MEM, // CLK_MEM;
+ _TGT_AP_CLK_GPU, // CLK_GPU;
+ _TGT_AP_CLK_VPU, // CLK_VPU;
+ _TGT_AP_CLK_VOC, // CLK_VOC;
+ _TGT_AP_CLK_SFLSH, // CLK_SFLSH;
+ 0, // RESERVE;
+
+#if 0
+ /* DDR timings, defined in target */
+ DDR_CHAN_1_VALID_VAL, // DDR_CHAN_1_VALID;
+ DDR_TIMING_101H_VAL, // DDR_TIMING_101H;
+ DDR_TIMING_102H_VAL, // DDR_TIMING_102H;
+ DDR_TIMING_103H_VAL, // DDR_TIMING_103H;
+ DDR_TIMING_104H_VAL, // DDR_TIMING_104H;
+ DDR_TIMING_105H_VAL, // DDR_TIMING_105H;
+ DDR_TIMING_106H_VAL, // DDR_TIMING_106H;
+ DDR_TIMING_107H_VAL, // DDR_TIMING_107H;
+ DDR_TIMING_108H_VAL, // DDR_TIMING_108H;
+ DDR_TIMING_109H_VAL, // DDR_TIMING_109H;
+ DDR_TIMING_10AH_VAL, // DDR_TIMING_10AH;
+ DDR_TIMING_10BH_VAL, // DDR_TIMING_10BH;
+ DDR_TIMING_10CH_VAL, // DDR_TIMING_10CH;
+ DDR_TIMING_10DH_VAL, // DDR_TIMING_10DH;
+ DDR_TIMING_10EH_VAL, // DDR_TIMING_10EH;
+ DDR_TIMING_10FH_VAL, // DDR_TIMING_10FH;
+
+ DDR_CHAN_2_VALID_VAL, // DDR_CHAN_2_VALID;
+ DDR_TIMING_121H_VAL, // DDR_TIMING_121H;
+ DDR_TIMING_122H_VAL, // DDR_TIMING_122H;
+ DDR_TIMING_123H_VAL, // DDR_TIMING_123H;
+ DDR_TIMING_124H_VAL, // DDR_TIMING_124H;
+ DDR_TIMING_125H_VAL, // DDR_TIMING_125H;
+ DDR_TIMING_126H_VAL, // DDR_TIMING_126H;
+ DDR_TIMING_127H_VAL, // DDR_TIMING_127H;
+ DDR_TIMING_128H_VAL, // DDR_TIMING_128H;
+ DDR_TIMING_129H_VAL, // DDR_TIMING_129H;
+ DDR_TIMING_12AH_VAL, // DDR_TIMING_12AH;
+ DDR_TIMING_12BH_VAL, // DDR_TIMING_12BH;
+ DDR_TIMING_12CH_VAL, // DDR_TIMING_12CH;
+ DDR_TIMING_12DH_VAL, // DDR_TIMING_12DH;
+ DDR_TIMING_12EH_VAL, // DDR_TIMING_12EH;
+ DDR_TIMING_12FH_VAL, // DDR_TIMING_12FH;
+
+ DDR_CHAN_3_VALID_VAL, // DDR_CHAN_3_VALID;
+ DDR_TIMING_141H_VAL, // DDR_TIMING_141H;
+ DDR_TIMING_142H_VAL, // DDR_TIMING_142H;
+ DDR_TIMING_143H_VAL, // DDR_TIMING_143H;
+ DDR_TIMING_144H_VAL, // DDR_TIMING_144H;
+ DDR_TIMING_145H_VAL, // DDR_TIMING_145H;
+ DDR_TIMING_146H_VAL, // DDR_TIMING_146H;
+ DDR_TIMING_147H_VAL, // DDR_TIMING_147H;
+ DDR_TIMING_148H_VAL, // DDR_TIMING_148H;
+ DDR_TIMING_149H_VAL, // DDR_TIMING_149H;
+ DDR_TIMING_14AH_VAL, // DDR_TIMING_14AH;
+ DDR_TIMING_14BH_VAL, // DDR_TIMING_14BH;
+ DDR_TIMING_14CH_VAL, // DDR_TIMING_14CH;
+ DDR_TIMING_14DH_VAL, // DDR_TIMING_14DH;
+ DDR_TIMING_14EH_VAL, // DDR_TIMING_14EH;
+ DDR_TIMING_14FH_VAL, // DDR_TIMING_14FH;
+
+ DDR_CHAN_4_VALID_VAL, // DDR_CHAN_4_VALID;
+ DDR_TIMING_161H_VAL, // DDR_TIMING_161H;
+ DDR_TIMING_162H_VAL, // DDR_TIMING_162H;
+ DDR_TIMING_163H_VAL, // DDR_TIMING_163H;
+ DDR_TIMING_164H_VAL, // DDR_TIMING_164H;
+ DDR_TIMING_165H_VAL, // DDR_TIMING_165H;
+ DDR_TIMING_166H_VAL, // DDR_TIMING_166H;
+ DDR_TIMING_167H_VAL, // DDR_TIMING_167H;
+ DDR_TIMING_168H_VAL, // DDR_TIMING_168H;
+ DDR_TIMING_169H_VAL, // DDR_TIMING_169H;
+ DDR_TIMING_16AH_VAL, // DDR_TIMING_16AH;
+ DDR_TIMING_16BH_VAL, // DDR_TIMING_16BH;
+ DDR_TIMING_16CH_VAL, // DDR_TIMING_16CH;
+ DDR_TIMING_16DH_VAL, // DDR_TIMING_16DH;
+ DDR_TIMING_16EH_VAL, // DDR_TIMING_16EH;
+ DDR_TIMING_16FH_VAL, // DDR_TIMING_16FH;
+
+ DDR_TIMING_160H_VAL, // DDR_TIMING_160H;
+ DDR_TIMING_180H_VAL, // DDR_TIMING_180H;
+ DDR_TIMING_181H_VAL, // DDR_TIMING_181H;
+ DDR_TIMING_182H_VAL, // DDR_TIMING_182H;
+ DDR_TIMING_183H_VAL, // DDR_TIMING_183H;
+ DDR_TIMING_184H_VAL, // DDR_TIMING_184H;
+ DDR_TIMING_185H_VAL, // DDR_TIMING_185H;
+ DDR_TIMING_186H_VAL, // DDR_TIMING_186H;
+ DDR_TIMING_187H_VAL, // DDR_TIMING_187H;
+ DDR_TIMING_188H_VAL, // DDR_TIMING_188H;
+ DDR_TIMING_189H_VAL, // DDR_TIMING_189H;
+ DDR_TIMING_18AH_VAL, // DDR_TIMING_18AH;
+ DDR_TIMING_18BH_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_18CH_VAL, // DDR_TIMING_18CH;
+#endif
+};
+
+const struct clock_config *get_default_clock_config(void)
+{
+#ifndef TARGET_TOOL
+ BUILD_BUG_ON(sizeof(struct clock_config) > AP_FACTORY_CLOCK_CFG_LEN);
+#endif
+
+ return &clock_default_config;
+}
+
diff --git a/board/rda/rda8820/clock_config.h b/board/rda/rda8820/clock_config.h
new file mode 100644
index 0000000000..e39dfa8652
--- /dev/null
+++ b/board/rda/rda8820/clock_config.h
@@ -0,0 +1,128 @@
+#ifndef __CLOCK_CONFIG_H__
+#define __CLOCK_CONFIG_H__
+
+typedef unsigned long UINT32;
+typedef unsigned short UINT16;
+typedef long INT32;
+typedef short INT16;
+typedef unsigned char UINT8;
+typedef char INT8;
+
+#define CLOCK_VER_MAJOR 2
+#define CLOCK_VER_MINOR 0
+
+struct clock_config {
+ /* Header */
+ UINT32 MAGIC;
+ UINT16 VERSION_MAJOR;
+ UINT16 VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ UINT32 PLL_FREQ_CPU; /* 05, 06 */
+ UINT32 PLL_FREQ_BUS; /* 25, 26 */
+ UINT32 PLL_FREQ_MEM; /* 65, 66 */
+ UINT32 PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Flags */
+ UINT16 DDR_CAL;
+ UINT16 DDR_FLAGS;
+ UINT32 DDR_PARA;
+ /* AP sysctrl */
+ UINT16 CLK_CPU;
+ UINT16 CLK_AXI;
+ UINT16 CLK_GCG;
+ UINT16 CLK_AHB1;
+ UINT16 CLK_APB1;
+ UINT16 CLK_APB2;
+ UINT16 CLK_MEM;
+ UINT16 CLK_GPU;
+ UINT16 CLK_VPU;
+ UINT16 CLK_VOC;
+ UINT16 CLK_SFLSH;
+ UINT16 RESERVE;
+ /* DDR timings */
+ UINT16 DDR_CHAN_1_VALID;
+ UINT16 DDR_TIMING_101H;
+ UINT16 DDR_TIMING_102H;
+ UINT16 DDR_TIMING_103H;
+ UINT16 DDR_TIMING_104H;
+ UINT16 DDR_TIMING_105H;
+ UINT16 DDR_TIMING_106H;
+ UINT16 DDR_TIMING_107H;
+ UINT16 DDR_TIMING_108H;
+ UINT16 DDR_TIMING_109H;
+ UINT16 DDR_TIMING_10AH;
+ UINT16 DDR_TIMING_10BH;
+ UINT16 DDR_TIMING_10CH;
+ UINT16 DDR_TIMING_10DH;
+ UINT16 DDR_TIMING_10EH;
+ UINT16 DDR_TIMING_10FH;
+
+ UINT16 DDR_CHAN_2_VALID;
+ UINT16 DDR_TIMING_121H;
+ UINT16 DDR_TIMING_122H;
+ UINT16 DDR_TIMING_123H;
+ UINT16 DDR_TIMING_124H;
+ UINT16 DDR_TIMING_125H;
+ UINT16 DDR_TIMING_126H;
+ UINT16 DDR_TIMING_127H;
+ UINT16 DDR_TIMING_128H;
+ UINT16 DDR_TIMING_129H;
+ UINT16 DDR_TIMING_12AH;
+ UINT16 DDR_TIMING_12BH;
+ UINT16 DDR_TIMING_12CH;
+ UINT16 DDR_TIMING_12DH;
+ UINT16 DDR_TIMING_12EH;
+ UINT16 DDR_TIMING_12FH;
+
+ UINT16 DDR_CHAN_3_VALID;
+ UINT16 DDR_TIMING_141H;
+ UINT16 DDR_TIMING_142H;
+ UINT16 DDR_TIMING_143H;
+ UINT16 DDR_TIMING_144H;
+ UINT16 DDR_TIMING_145H;
+ UINT16 DDR_TIMING_146H;
+ UINT16 DDR_TIMING_147H;
+ UINT16 DDR_TIMING_148H;
+ UINT16 DDR_TIMING_149H;
+ UINT16 DDR_TIMING_14AH;
+ UINT16 DDR_TIMING_14BH;
+ UINT16 DDR_TIMING_14CH;
+ UINT16 DDR_TIMING_14DH;
+ UINT16 DDR_TIMING_14EH;
+ UINT16 DDR_TIMING_14FH;
+
+ UINT16 DDR_CHAN_4_VALID;
+ UINT16 DDR_TIMING_161H;
+ UINT16 DDR_TIMING_162H;
+ UINT16 DDR_TIMING_163H;
+ UINT16 DDR_TIMING_164H;
+ UINT16 DDR_TIMING_165H;
+ UINT16 DDR_TIMING_166H;
+ UINT16 DDR_TIMING_167H;
+ UINT16 DDR_TIMING_168H;
+ UINT16 DDR_TIMING_169H;
+ UINT16 DDR_TIMING_16AH;
+ UINT16 DDR_TIMING_16BH;
+ UINT16 DDR_TIMING_16CH;
+ UINT16 DDR_TIMING_16DH;
+ UINT16 DDR_TIMING_16EH;
+ UINT16 DDR_TIMING_16FH;
+
+ UINT16 DDR_TIMING_160H;
+ UINT16 DDR_TIMING_180H;
+ UINT16 DDR_TIMING_181H;
+ UINT16 DDR_TIMING_182H;
+ UINT16 DDR_TIMING_183H;
+ UINT16 DDR_TIMING_184H;
+ UINT16 DDR_TIMING_185H;
+ UINT16 DDR_TIMING_186H;
+ UINT16 DDR_TIMING_187H;
+ UINT16 DDR_TIMING_188H;
+ UINT16 DDR_TIMING_189H;
+ UINT16 DDR_TIMING_18AH;
+ UINT16 DDR_TIMING_18BH;
+ UINT16 DDR_TIMING_18CH;
+};
+
+const struct clock_config *get_default_clock_config(void);
+
+#endif
diff --git a/board/rda/rda8820/config.mk b/board/rda/rda8820/config.mk
new file mode 100644
index 0000000000..ec124aff34
--- /dev/null
+++ b/board/rda/rda8820/config.mk
@@ -0,0 +1,11 @@
+#
+#the spl code should not exceed the SPL_MAX_SIZE,and if
+#the spl don't up to the max size, paddint the last with
+#zero(or 0xff?)
+
+#48kbytes, 48*1024
+#SPL_APPENDING_TO := 48
+#SPL_MAX_SIZE := 49512
+
+# space for spl(48KiB) & mtd partition table(24KiB)
+SPL_APPENDING_TO := 72
diff --git a/board/rda/rda8820/ddr3.c b/board/rda/rda8820/ddr3.c
new file mode 100644
index 0000000000..e3628005ac
--- /dev/null
+++ b/board/rda/rda8820/ddr3.c
@@ -0,0 +1,516 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include "tgt_ap_clock_config.h"
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+#define DMC_READY 128
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {QOSX_CTRL7, 0x08, 0x08},
+ {TURNAROUND_PRIO,0x1A, 0x0},
+ {HIT_PRIO, 0x1A, 0x0},
+ {T_REFI, 0x186, 0x3f},
+ {QUEUE_CTRL, 0xffff, 0x0},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x6},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x6},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0c, 0x6},// turn for now
+// {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x2},
+ {T_PHYWRLAT, 0x104, 0x105},
+ {T_PHYWRLAT, 0x104, 0x105},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 __attribute__((unused)) dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ printf("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + 129 * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = 0xf;
+ printf("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + 128 *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+
+ if (dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+
+ if (!dll_off){
+ *((volatile UINT32*)(PHY_REG_BASE + PHY_RDLAT * 4)) = 7;
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_ENABLE_LAT * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 3;
+ }else
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = 0xf;
+
+ serial_puts("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 __attribute__((unused)) dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+ *addr = val;
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+
+ *addr = val;
+
+ printf("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+ *addr = val;
+
+ printf("decode ctrl value: %lx\n", val);
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ val = 0x10000402;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000103;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+#endif
+
+ //config ECC control
+ wait_idle = 0x6;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2105110C) = 0x00000060;
+ *(volatile UINT32*)(0x21051110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8820/ddr3.h b/board/rda/rda8820/ddr3.h
new file mode 100644
index 0000000000..7481954144
--- /dev/null
+++ b/board/rda/rda8820/ddr3.h
@@ -0,0 +1,50 @@
+#ifndef _SYS_DDR3_H_
+#define _SYS_DDR3_H_
+
+#include "clock_config.h"
+
+/*
+ * defination of ddr flags
+ */
+/* [Debug] DLL off mode, 0 is dll on mode */
+#define DDR_FLAGS_DLLOFF 0x8000
+/* [Debug] LowSpeed mode*/
+#define DDR_FLAGS_RESERVE 0x4000
+/* DDR LowPower mode */
+#define DDR_FLAGS_LOWPWR 0x2000
+/* ODT: 000--Null 001--60 010--120 011--40 100--20 101--30 */
+#define DDR_FLAGS_ODT(n) (((n)<<0)&0x0007)
+#define DDR_FLAGS_ODT_SHIFT 0
+#define DDR_FLAGS_ODT_MASK 0x0007
+/* RON: 00--40 01--30 */
+#define DDR_FLAGS_RON(n) (((n)<<3)&0x0018)
+#define DDR_FLAGS_RON_SHIFT 3
+#define DDR_FLAGS_RON_MASK 0x0018
+
+/*
+ * defination of ddr parameters
+ */
+#define DDR_PARA_CHIP_BITS(n) (((n)<<0)&0x00000003)
+#define DDR_PARA_CHIP_BITS_SHIFT 0
+#define DDR_PARA_CHIP_BITS_MASK 0x00000003
+/* memory width 0--8bit 1--16bit 2--32bit */
+#define DDR_PARA_MEM_BITS(n) (((n)<<2)&0x0000000c)
+#define DDR_PARA_MEM_BITS_SHIFT 2
+#define DDR_PARA_MEM_BITS_MASK 0x0000000c
+/* 2--4banks 3--8banks */
+#define DDR_PARA_BANK_BITS(n) (((n)<<4)&0x000000f0)
+#define DDR_PARA_BANK_BITS_SHIFT 4
+#define DDR_PARA_BANK_BITS_MASK 0x000000f0
+/* 2--13rbs 3--14rbs 4--15rbs 5--16rbs */
+#define DDR_PARA_ROW_BITS(n) (((n)<<8)&0x00000f00)
+#define DDR_PARA_ROW_BITS_SHIFT 8
+#define DDR_PARA_ROW_BITS_MASK 0x00000f00
+/* 0--8cbs 1--9cbs 2--10cbs 3--11cbs 4--12cbs */
+#define DDR_PARA_COL_BITS(n) (((n)<<12)&0x0000f000)
+#define DDR_PARA_COL_BITS_SHIFT 12
+#define DDR_PARA_COL_BITS_MASK 0x0000f000
+
+int ddr_init(UINT16 flags, UINT32 para);
+
+#endif /* _SYS_DDR3_H_ */
+
diff --git a/board/rda/rda8820/ddr3_8810.c b/board/rda/rda8820/ddr3_8810.c
new file mode 100644
index 0000000000..d665019b8d
--- /dev/null
+++ b/board/rda/rda8820/ddr3_8810.c
@@ -0,0 +1,540 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include "tgt_ap_clock_config.h"
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x3f},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x5},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x5},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0e, 0x0c},// turn for now
+// {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x1},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_PHYWRLAT, 0x103, 0x104},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ printf("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + 129 * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = 0xf;
+ printf("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ if (!dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + RDELAY_SEL * 4)) = 2;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = (3<<2);
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = (3<<2);
+ printf("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x22000202;
+#elif (DDR_TYPE == 2)
+ val = 0x22000202;
+#else
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+#endif
+ *addr = val;
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x20302;
+#elif (DDR_TYPE == 2)
+ val = 0x30200;
+#else
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+#endif
+ *addr = val;
+
+ printf("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+
+ val = 0x30301;
+
+ *addr = val;
+
+ printf("address ctrl 2 value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x00;
+#elif (DDR_TYPE == 2)
+ val = 0x50;
+#else
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+#endif
+ *addr = val;
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ val = 0x10;
+ *addr = val;
+ wait_idle = 0x6;
+ while (wait_idle--);
+#endif
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ val = 0x10000402;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000103;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config ECC control
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x4f;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2105110C) = 0x00000060;
+ *(volatile UINT32*)(0x21051110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8820/ddr3_8810e_16bit.c b/board/rda/rda8820/ddr3_8810e_16bit.c
new file mode 100644
index 0000000000..2469e0c75e
--- /dev/null
+++ b/board/rda/rda8820/ddr3_8810e_16bit.c
@@ -0,0 +1,388 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+//////////////////////////////////////////////////////////////////////
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+ serial_puts("ddr3 phy init done!\n");
+}
+///////////////////////////////////////////////////////////////////
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int * addr;
+ wait_idle = 0x4e;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x200);
+*addr = 0x3f;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x204);
+*addr = 0x23008c;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x204);
+*addr = 0x8c008c;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x208);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x20c);
+*addr = 0xc;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x218);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x21c);
+*addr = 0xf;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x220);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x224);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x228);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x22c);
+*addr = 0x14;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x234);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x238);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x23c);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x244);
+*addr = 0x10;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x248);
+*addr = 0x4000d;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x248);
+*addr = 0x6000f;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x24c);
+*addr = 0x60000;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x230);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x240);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x300);
+*addr = 0x2;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x304);
+*addr = 0x105;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x304);
+*addr = 0x105;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x258);
+*addr = 0x3;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x25c);
+*addr = 0x20003;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x25c);
+*addr = 0xa0003;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x260);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x264);
+*addr = 0x1000090;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x264);
+*addr = 0x2000090;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x268);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x26c);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x250);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x254);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x148);
+*addr = 0x0;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x18);
+*addr = 0x22000201;
+
+ wait_idle = 0x1d;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30401;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x14);
+*addr = 0x50;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x14);
+*addr = 0x10;
+
+ wait_idle = 0x6;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x0;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10020008;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10030000;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10010001;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10000520;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x50000400;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x30000000;
+
+ wait_idle = 0x6;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x148);
+*addr = 0x0;
+
+ wait_idle = 0x8;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x8);
+*addr = 0x3;
+
+addr = (int * ) (DMCREG_BADDR + 0x0);
+wait_idle = 0;
+while ( wait_idle != 3)
+wait_idle = *addr;
+serial_puts("ddr3 dmc400 init done!\n");
+}
+
+///////////////////////////////////////////////////////////////////
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ serial_puts("8bit ");
+ break;
+ case 1:
+ serial_puts("16bit ");
+ break;
+ case 2:
+ serial_puts("32bit ");
+ break;
+ }
+ if (dll_off)
+ serial_puts("dll-off Mode ...\n");
+ else
+ serial_puts("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ //serial_puts("dram");
+ //print_u32(DDR_TYPE);
+ //serial_puts(" init done ...\n");
+ printf("dram%d init done ...\n", DDR_TYPE);
+
+ return 0;
+}
+
diff --git a/board/rda/rda8820/ddr3_8810e_32bit.c b/board/rda/rda8820/ddr3_8810e_32bit.c
new file mode 100644
index 0000000000..6cdef162f6
--- /dev/null
+++ b/board/rda/rda8820/ddr3_8810e_32bit.c
@@ -0,0 +1,410 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DATA_ODT_ENABLE_REG*4);
+ *addr = 0xf;
+
+ addr = (int *) (PHY_BADDR + DATA_WRITE_ENABLE_REG*4);
+ *addr = 0xf;
+
+ serial_puts("ddr3 phy init done!\n");
+}
+
+#define DMC_WAIT_IDLE 1
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int *addr;
+ volatile int temp;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x200);
+ *addr = 0x3f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x23008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x8c008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x208);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x20c);
+ *addr = 0xc;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x218);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x21c);
+ *addr = 0xf;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x220);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x224);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x228);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x22c);
+ *addr = 0x14;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x234);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x238);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x23c);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x244);
+ *addr = 0x10;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x4000d;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x6000f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x24c);
+ *addr = 0x60000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x230);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x240);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x300);
+ *addr = 0x2;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x258);
+ *addr = 0x3;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0x20003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0xa0003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x260);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x1000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x2000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x268);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x26c);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x250);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x254);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x18);
+ //*addr = 0x22000201;
+ *addr = 0x22000202;
+
+ wait_idle = DMC_WAIT_IDLE * 0x1d;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ //*addr = 0x30401;
+ *addr = 0x30302;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ *addr = 0x50;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ //*addr = 0x10;
+ *addr = 0x00;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10020008;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10030000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10010001;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10000520;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x50000400;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x30000000;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE * 0x8;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x8);
+ *addr = 0x3;
+
+ addr = (int * ) (DMCREG_BADDR + 0x0);
+ temp = 0;
+ while (temp != 3)
+ temp = *addr;
+
+ serial_puts("ddr3 dmc400 init done!\n");
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2105110C) = 0x00000060;
+ *(volatile UINT32*)(0x21051110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ serial_puts("8bit ");
+ break;
+ case 1:
+ serial_puts("16bit ");
+ break;
+ case 2:
+ serial_puts("32bit ");
+ break;
+ }
+ if (dll_off)
+ serial_puts("dll-off Mode ...\n");
+ else
+ serial_puts("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ //serial_puts("dram ");
+ //print_u32(DDR_TYPE);
+ //serial_puts(" init done ...\n");
+ printf("ddr%d init done\n");
+
+ return 0;
+}
diff --git a/board/rda/rda8820/ddr3_init.h b/board/rda/rda8820/ddr3_init.h
new file mode 100644
index 0000000000..402375d269
--- /dev/null
+++ b/board/rda/rda8820/ddr3_init.h
@@ -0,0 +1,101 @@
+#ifndef _SYS_RAM_INIT_H_
+#define _SYS_RAM_INIT_H_
+
+#define MEMC_STATUS 0x000
+#define MEMC_CONFIG 0x004
+#define MEMC_CMD 0x008
+#define ADDR_CTRL 0x010
+#define DECODE_CTRL 0x014
+#define FORMAT_CTRL 0x018
+#define LOWPWR_CTRL 0x020
+#define TURNAROUND_PRIO 0x030
+#define HIT_PRIO 0x034
+//QOS0~QOS15:038~078
+#define QOSX_CTRL 0x038
+#define QOSX_CTRL7 0x058
+#define QOSX_CTRL15 0x078
+#define TIMEOUT_CTRL 0x07C
+#define QUEUE_CTRL 0x080
+#define WR_PRIO_CTRL 0x088
+#define WR_PRIO_CTRL2 0x08C
+#define RD_PRIO_CTRL 0x090
+#define RD_PRIO_CTRL2 0x094
+#define ACCESS_ADDR_MATCH 0x098
+#define ACCESS_ADDR_MATCH_63_32 0x09C
+#define ACCESS_ADDR_MASK 0x0A0
+#define ACCESS_ADDR_MASK_63_32 0x0A4
+
+#define CHANNEL_STATUS 0x100
+#define DIRECT_CMD 0x108
+#define MR_DATA 0x110
+#define REFRESH_CTRL 0x120
+#define INTR_CTRL 0x128
+#define INTR_CLR 0x130
+#define INTR_STATUS 0x138
+#define INTR_INFO 0x140
+#define ECC_CTRL 0x148
+
+#define T_REFI 0x200
+#define T_RFC 0x204
+#define T_MRR 0x208
+#define T_MRW 0x20C
+#define T_RCD 0x218
+#define T_RAS 0x21C
+#define T_RP 0x220
+#define T_RPALL 0x224
+#define T_RRD 0x228
+#define T_FAW 0x22C
+#define RD_LATENCY 0x230
+#define T_RTR 0x234
+#define T_RTW 0x238
+#define T_RTP 0x23C
+#define WR_LATENCY 0x240
+#define T_WR 0x244
+#define T_WTR 0x248
+#define T_WTW 0x24C
+#define T_ECKD 0x250
+#define T_XCKD 0x254
+#define T_EP 0x258
+#define T_XP 0x25C
+#define T_ESR 0x260
+#define T_XSR 0x264
+#define T_SRCKD 0x268
+#define T_CKSRD 0x26C
+
+#define T_RDDATA_EN 0x300
+#define T_PHYWRLAT 0x304
+#define RDLVL_CTRL 0x308
+#define RDLVL_DIRECT 0x310
+#define T_RDLVL_EN 0x318
+#define T_RDLVL_RR 0x31C
+#define WRLVL_CTRL 0x328
+#define WRLVL_DIRECT 0x330
+#define T_WRLVL_EN 0x338
+#define T_WRLVL_WW 0x33C
+
+#define PHY_PWR_CTRL 0x348
+#define PHY_UPD_CTRL 0x350
+
+#define USER_STATUS 0x400
+#define USER_CONFIG0 0x404
+#define USER_CONFIG1 0x408
+
+#define INTEG_CFG 0xE00
+#define INTEG_OUTPUTS 0xE08
+
+#define PERIPH_ID_0 0xFE0
+#define PERIPH_ID_1 0xFE4
+#define PERIPH_ID_2 0xFE8
+#define PERIPH_ID_3 0xFEC
+#define COMPONENT_ID_0 0xFF0
+#define COMPONENT_ID_1 0xFF4
+#define COMPONENT_ID_2 0xFF8
+#define COMPONENT_ID_3 0xFFC
+
+typedef struct {
+ UINT32 reg_offset;
+ UINT32 dll_on_val;
+ UINT32 dll_off_val;
+} dmc_reg_t;
+
+#endif /* _SYS_RAM_INIT_H_ */
diff --git a/board/rda/rda8820/ddr3_zhangli_32bit_dlloff.c b/board/rda/rda8820/ddr3_zhangli_32bit_dlloff.c
new file mode 100644
index 0000000000..aeabca6ba2
--- /dev/null
+++ b/board/rda/rda8820/ddr3_zhangli_32bit_dlloff.c
@@ -0,0 +1,400 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DATA_ODT_ENABLE_REG*4);
+ *addr = 0xf;
+
+ addr = (int *) (PHY_BADDR + DATA_WRITE_ENABLE_REG*4);
+ *addr = 0xf;
+
+ printf("ddr3 phy init done!\n");
+}
+
+#define DMC_WAIT_IDLE 1
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int *addr;
+ volatile int temp;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x200);
+ *addr = 0x3f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x23008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x8c008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x208);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x20c);
+ *addr = 0xc;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x218);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x21c);
+ *addr = 0xf;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x220);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x224);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x228);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x22c);
+ *addr = 0x14;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x234);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x238);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x23c);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x244);
+ *addr = 0x10;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x4000d;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x6000f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x24c);
+ *addr = 0x60000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x230);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x240);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x300);
+ *addr = 0x2;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x258);
+ *addr = 0x3;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0x20003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0xa0003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x260);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x1000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x2000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x268);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x26c);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x250);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x254);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x18);
+ //*addr = 0x22000201;
+ *addr = 0x22000202;
+
+ wait_idle = DMC_WAIT_IDLE * 0x1d;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ //*addr = 0x30401;
+ *addr = 0x30302;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ *addr = 0x50;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ //*addr = 0x10;
+ *addr = 0x00;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10020008;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10030000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10010001;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10000520;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x50000400;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x30000000;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE * 0x8;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x8);
+ *addr = 0x3;
+
+ addr = (int * ) (DMCREG_BADDR + 0x0);
+ temp = 0;
+ while (temp != 3)
+ temp = *addr;
+
+ printf("ddr3 dmc400 init done!\n");
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram%x init done ...\n", DDR_TYPE);
+
+ return 0;
+}
+
diff --git a/board/rda/rda8820/debug.h b/board/rda/rda8820/debug.h
new file mode 100644
index 0000000000..1d4f03bedb
--- /dev/null
+++ b/board/rda/rda8820/debug.h
@@ -0,0 +1,9 @@
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+void print_u8(u8 ch);
+void print_u16(u16 data);
+void print_u32(u32 data);
+void dump_buf(u8 *buf, u32 size);
+
+#endif /* _DEBUG_H_ */
diff --git a/board/rda/rda8820/hal_config.c b/board/rda/rda8820/hal_config.c
new file mode 100644
index 0000000000..c52d21d0d2
--- /dev/null
+++ b/board/rda/rda8820/hal_config.c
@@ -0,0 +1,1166 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2013, RDA Microeletronics. //
+// All Rights Reserved //
+// //
+// This source code is the property of RDA Microeletronics and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA Microeletronics. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/8810/src/hal_config.c $ //
+// $Author: huazeng $ //
+// $Date: 2013-08-31 17:48:58 +0800 (Sat, 31 Aug 2013) $ //
+// $Revision: 21005 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_config.c
+/// Implementation of HAL initialization related with the particular instance
+/// of the IP.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+/* uboot */
+#include <common.h>
+
+/* common */
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/chip_id.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_gpio.h>
+
+/* device */
+#include "hal_sys.h"
+#include "halp_sys.h"
+#include "halp_gpio.h"
+#include "bootp_mode.h"
+#include "hal_config.h"
+#include "hal_ap_gpio.h"
+#include "hal_ap_config.h"
+#include <asm/arch/reg_cfg_regs.h>
+
+/* target */
+#include "tgt_board_cfg.h"
+#include "tgt_ap_gpio_setting.h"
+#define HAL_ASSERT(cond, fmt, ...) \
+ if(!(cond)) { \
+ hal_assert(fmt, ##__VA_ARGS__); \
+ g_halConfigError = TRUE; \
+ }
+
+//// =============================================================================
+//// GLOBAL VARIABLES
+//// =============================================================================
+PRIVATE CONST UINT8 g_halCfgSimOrder[] = { TGT_SIM_ORDER };
+PRIVATE HAL_CFG_CONFIG_T hal_cfg = TGT_HAL_CONFIG;
+PRIVATE UINT32 g_bootBootMode = 0;
+PRIVATE BOOL g_halConfigError = FALSE;
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+// HAL_ASSERT
+PRIVATE VOID hal_assert(const char *fmt, ...)
+{
+ va_list args;
+ puts("\n#-------Board Mux config found error-------#\n");
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ putc('\n');
+ puts("--------------------------------------------\n\n");
+ va_end(args);
+}
+
+// =============================================================================
+// hal_BoardSimUsed
+// -----------------------------------------------------------------------------
+/// Check whether a SIM card interface is used.
+// ============================================================================
+PRIVATE BOOL hal_BoardSimUsed(UINT32 simId)
+{
+ UINT32 i = 0;
+ //for (UINT32 i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ for (i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ {
+ if (g_halCfgSimOrder[i] == simId)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+#if 0
+// =============================================================================
+// hal_BoardConfigClk32k
+// -----------------------------------------------------------------------------
+/// Configure CLK_32K output.
+/// @param enable TRUE to configure, and FALSE to disable.
+// ============================================================================
+PROTECTED VOID hal_BoardConfigClk32k(BOOL enable)
+{
+ HAL_ASSERT(g_halCfg->useClk32k == TRUE, "32K clock is not configured");
+
+ if (enable)
+ {
+ // Setup the pin as 32K clock output
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_CLK_32K;
+ }
+ else
+ {
+ // Setup the pin as GPO (and low ouput has been
+ // configured in hal_BoardSetup())
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_GPO_2;
+ }
+}
+#endif
+
+// =============================================================================
+// hal_BoardSetupGeneral
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL for general purpose
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+PROTECTED VOID hal_BoardSetupGeneral(CONST HAL_CFG_CONFIG_T* halCfg)
+{
+ UINT32 altMux = 0;
+
+ UINT32 availableGpo_A = 0;
+
+ UINT32 availableGpio_C = 0;
+ UINT32 availableGpio_A = 0;
+ UINT32 availableGpio_B = 0;
+ UINT32 availableGpio_D = 0;
+
+ UINT32 bootModeGpio_C = 0;
+ UINT32 bootModeGpio_A = 0;
+ UINT32 bootModeGpio_B = 0;
+ UINT32 bootModeGpio_D = 0;
+
+ UINT32 noConnectMask_C = 0;
+ UINT32 noConnectMask_A = 0;
+ UINT32 noConnectMask_B = 0;
+ UINT32 noConnectMask_D = 0;
+
+#ifdef FPGA
+
+ // no muxing, do nothing
+
+#else // !FPGA
+
+ // GPIOs as boot mode pins
+ bootModeGpio_C = HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ bootModeGpio_A = HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7);
+ bootModeGpio_B = HAL_GPIO_BIT(0);
+ bootModeGpio_D = 0;
+
+ // Available GPIOs
+ availableGpio_C |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ // Volume down/up keys
+ availableGpio_D |= HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6);
+
+ // Boot modes
+ BOOL spiFlashCam = FALSE;
+ BOOL spiFlashNand = FALSE;
+ if (g_bootBootMode & BOOT_MODE_BOOT_SPI)
+ {
+ if (g_bootBootMode & BOOT_MODE_SPI_PIN_NAND)
+ {
+ HAL_ASSERT((g_bootBootMode & BOOT_MODE_BOOT_EMMC),
+ "Emmc boot pin should be pulled up to boot on SPI flash over NAND pins");
+ spiFlashNand = TRUE;
+ }
+ else
+ {
+ spiFlashCam = TRUE;
+ }
+ }
+
+ if ((g_bootBootMode & (BOOT_MODE_BOOT_EMMC|BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_EMMC)
+ {
+ // Boot from EMMC
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 should be used");
+ }
+
+ if ( (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_SPI_NAND ||
+ (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L))
+ == (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L)
+ )
+ {
+ // Boot from SDMMC1
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmcUsed, "SDMMC1 should be used");
+ }
+
+ // For convenience, we do not consider spiFlashCam at present.
+ // We assume that SPI flash always uses parallel nand pins.
+#if 0
+ BOOL parallelNandUsed = halCfg->parallelNandUsed;
+#else
+ BOOL parallelNandUsed = !spiFlashNand && !halCfg->sdmmcCfg.sdmmc3Used;
+#endif
+ BOOL nand8_15Cam = FALSE;
+ BOOL nand8_15Lcd = FALSE;
+ if ((g_bootBootMode & BOOT_MODE_BOOT_EMMC) == 0)
+ {
+ // If BOOT_MODE_BOOT_EMMC is not set, the parallel NAND pins
+ // are multiplexed to parallel NAND controller
+ HAL_ASSERT(parallelNandUsed, "Parallel NAND should be used");
+ if ((g_bootBootMode & BOOT_MODE_NAND_8BIT) == 0)
+ {
+ if (g_bootBootMode & BOOT_MODE_NAND_HIGH_PIN_CAM)
+ {
+ nand8_15Cam = TRUE;
+ }
+ else
+ {
+ nand8_15Lcd = TRUE;
+ }
+ }
+ }
+
+ HAL_ASSERT(!(parallelNandUsed && spiFlashNand), "SPI flash uses parallel NAND pins");
+ HAL_ASSERT(!(nand8_15Cam && spiFlashCam), "NAND 8-15 bits and SPI flash both use cam pins");
+
+ if (!(parallelNandUsed || spiFlashNand))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }
+
+ CONST HAL_CFG_CAM_T *camCfg = &halCfg->camCfg;
+ CONST HAL_LCD_MODE_T lcdMode = halCfg->goudaCfg.lcdMode;
+
+ // LCD
+ if (lcdMode == HAL_LCD_MODE_PARALLEL_16BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ altMux |= CFG_REGS_LCD_MODE_PARALLEL_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_DSI)
+ {
+ altMux |= CFG_REGS_LCD_MODE_DSI;
+ availableGpio_A |= HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23);
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_16BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ altMux |= CFG_REGS_LCD_MODE_RGB_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ if (halCfg->goudaCfg.lcd16_23Cam)
+ {
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_PARALLEL &&
+ (camCfg->camUsed || camCfg->cam1Used)),
+ "Parallel camera uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam),
+ "I2C2 uses LCD 22-23 bits");
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses LCD 16-21 bits");
+ HAL_ASSERT(!nand8_15Cam, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_CSI &&
+ ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))),
+ "Camera CSI1 uses LCD 16-21 bits");
+ altMux |= CFG_REGS_LCD24_CAM_CAM_IO;
+ }
+ else
+ {
+ HAL_ASSERT(!parallelNandUsed, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 uses LCD 16-23 bits");
+ altMux |= CFG_REGS_LCD24_CAM_NAND_IO;
+ }
+ altMux |= CFG_REGS_LCD_MODE_RGB_24BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_SPI)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use SPI LCD pins");
+ HAL_ASSERT((halCfg->usedGpo_A & 0x18) == 0, "GPO 3/4 use SPI LCD pins");
+ altMux |= CFG_REGS_SPI_LCD_SPI_LCD;
+ availableGpio_A |= HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21);
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Lcd mode not defined!");
+ }
+
+ if (lcdMode == HAL_LCD_MODE_DSI || lcdMode == HAL_LCD_MODE_SPI)
+ {
+ if (nand8_15Lcd)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(24)
+ | HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+ }
+
+ if (halCfg->goudaCfg.cs0Used)
+ {
+ altMux |= CFG_REGS_GPO_4_LCD_CS_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_4_GPO_4;
+ availableGpo_A |= HAL_GPO_BIT(4);
+ }
+
+ if (halCfg->goudaCfg.cs1Used)
+ {
+ altMux |= CFG_REGS_GPO_3_LCD_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_3_GPO_3;
+ availableGpo_A |= HAL_GPO_BIT(3);
+ }
+
+ // I2C
+ if (!halCfg->i2cCfg.i2cUsed)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+
+ if (halCfg->i2cCfg.i2c2Used)
+ {
+ if (halCfg->i2cCfg.i2c2PinsCam)
+ {
+ if (camCfg->camUsed)
+ {
+ HAL_ASSERT(camCfg->camPdnRemap == GPIO_NONE &&
+ camCfg->camRstRemap == GPIO_NONE,
+ "Cam uses PDN/RST pins");
+ }
+ if (camCfg->cam1Used)
+ {
+ HAL_ASSERT(camCfg->cam1PdnRemap == GPIO_NONE &&
+ camCfg->cam1RstRemap == GPIO_NONE,
+ "Cam1 uses PDN/RST pins");
+ }
+ HAL_ASSERT(!nand8_15Cam, "NAND uses cam PDN/RST pins");
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ altMux |= CFG_REGS_CAM_I2C2_I2C2;
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ }
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+
+ if (halCfg->i2cCfg.i2c3Used)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x18) == 0, "Keyout 3/4 use I2C3 pins");
+ altMux |= CFG_REGS_KEYOUT_3_4_I2C3;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYOUT_3_4_KEYOUT_3_4;
+ if ((halCfg->keyOutMask & 0x8) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(6);
+ }
+ if ((halCfg->keyOutMask & 0x10) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // Camera
+ if (camCfg->camUsed || camCfg->cam1Used)
+ {
+ if(camCfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses cam pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use cam pins");
+ altMux |= CFG_REGS_CSI2_PARALLEL_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(24);
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux |= CFG_REGS_CSI2_SPI_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(14);
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses CSI1 pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use CSI1 pins");
+ }
+ else
+ {
+ // CSI1 is unused
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ altMux |= CFG_REGS_CSI2_CSI2;
+ // If CSI2 is unused
+ if (!((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_2) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE,"Invalid cam mode: %d", camCfg->camMode);
+ }
+
+ // Cam PDN/RST pins
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ if (!((camCfg->camUsed && camCfg->camRstRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10);
+ }
+ if (!((camCfg->camUsed && camCfg->camPdnRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1PdnRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(11);
+ }
+ }
+ }
+ else // cam is unused
+ {
+ availableGpio_B |= HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11);
+ }
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+
+ // UART 1 Pin configuration
+ switch (halCfg->uartCfg[0])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ availableGpio_C |= HAL_GPIO_BIT(6);
+ availableGpio_A |= HAL_GPIO_BIT(14);
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART1 TXD, RXD
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART1 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ // use UART1 TXD, RXD, CTS, RTS, RI, DSR, DCD, DTR
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ HAL_ASSERT(!halCfg->hostUartUsed, "Host UART uses UART1 DCD/DTR");
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART 2 must be unused to use UART1 Modem lines.");
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART1 DSR");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART1 RI");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS
+ | CFG_REGS_UART1_8LINE_UART1_8_LINE;
+ break;
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart 1 Configuration (%d).",
+ halCfg->uartCfg[0]);
+ break;
+ }
+
+ // Host UART
+ if (halCfg->hostUartUsed)
+ {
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART2 uses host UART RXD/TXD.");
+ }
+
+ // UART 2 Pin configuration
+ switch (halCfg->uartCfg[1])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_UART2_HOST_UART
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if (halCfg->uartCfg[0] != HAL_UART_CONFIG_MODEM)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART2 TXD, RXD
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART2 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART2 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART2 RTS");
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_UART2_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart2 Configuration (%d).",
+ halCfg->uartCfg[1]);
+ break;
+ }
+
+ // UART 3 Pin configuration
+ switch (halCfg->uartCfg[2])
+ {
+ case HAL_UART_CONFIG_NONE:
+ availableGpio_D |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART3 TXD, RXD
+ availableGpio_D |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART3 TXD, RXD, CTS, RTS
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart3 Configuration (%d).",
+ halCfg->uartCfg[2]);
+ break;
+ }
+
+ // I2S
+ altMux |= CFG_REGS_DAI_I2S;
+ if (halCfg->i2sCfg.di0Used || halCfg->i2sCfg.di1Used ||
+ halCfg->i2sCfg.di2Used || halCfg->i2sCfg.doUsed)
+ {
+ if (!halCfg->i2sCfg.di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(11);
+ }
+ if (!halCfg->i2sCfg.di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(12);
+ }
+ if (halCfg->i2sCfg.di2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x4) == 0, "Keyin 2 uses I2S DI2");
+ altMux |= CFG_REGS_I2S_DI_2_I2S_DI_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_I2S_DI_2_KEYIN_2;
+ if ((halCfg->keyInMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(2);
+ }
+ }
+ if (!halCfg->i2sCfg.doUsed)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(13);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13);
+ }
+
+ // LPS CO1
+ if (halCfg->useLpsCo1)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x10) == 0, "Keyin 4 uses LPS_CO1");
+ altMux |= CFG_REGS_LPSCO_1_LPSCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_LPSCO_1_KEYIN_4;
+ if ((halCfg->keyInMask & 0x10) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // TCO
+ if (halCfg->usedTco & 0x1)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x1) == 0, "Keyout 0 uses TCO0");
+ altMux |= CFG_REGS_TCO_0_TCO_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_0_KEYOUT_0;
+ if ((halCfg->keyOutMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(3);
+ }
+ }
+
+ if (halCfg->usedTco & 0x2)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x2) == 0, "Keyout 1 uses TCO1");
+ altMux |= CFG_REGS_TCO_1_TCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_1_KEYOUT_1;
+ if ((halCfg->keyOutMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(4);
+ }
+ }
+
+ if (halCfg->usedTco & 0x4)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x4) == 0, "Keyout 2 uses TCO2");
+ altMux |= CFG_REGS_TCO_2_TCO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_2_KEYOUT_2;
+ if ((halCfg->keyOutMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(5);
+ }
+ }
+
+ // PWM
+ if (halCfg->pwmCfg.pwtUsed)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x20) == 0, "Keyin 5 uses PWT");
+ altMux |= CFG_REGS_GPO_0_PWT;
+ }
+ else if (halCfg->keyInMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_0_KEYIN_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_0_GPO_0;
+ availableGpo_A |= HAL_GPO_BIT(0);
+ }
+
+ if (halCfg->pwmCfg.lpgUsed)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x20) == 0, "Keyout 5 uses LPG");
+ altMux |= CFG_REGS_GPO_1_LPG;
+ }
+ else if (halCfg->keyOutMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_1_KEYOUT_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_1_GPO_1;
+ availableGpo_A |= HAL_GPO_BIT(1);
+ }
+
+ if (halCfg->pwmCfg.pwl1Used)
+ {
+ HAL_ASSERT(!halCfg->useClk32k, "Clk 32k uses PWL1");
+ altMux |= CFG_REGS_GPO_2_PWL_1;
+ }
+ else if (halCfg->useClk32k)
+ {
+ // Default to GPO low output
+ // 32K clock will be enabled per request
+ //altMux |= CFG_REGS_GPO_2_CLK_32K;
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ availableGpo_A |= HAL_GPO_BIT(2);
+ }
+
+ // Clock out and host clock
+ if (halCfg->clkOutUsed)
+ {
+ HAL_ASSERT(!halCfg->hostClkUsed, "HST_CLK uses CLK_OUT pin");
+ altMux |= CFG_REGS_CLK_OUT_CLK_OUT;
+ }
+ else if (halCfg->hostClkUsed)
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ }
+ else
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ availableGpo_A |= HAL_GPO_BIT(8);
+ }
+
+ // SPI
+ if (halCfg->spiCfg[0].cs0Used || halCfg->spiCfg[0].cs1Used ||
+ halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT(!(halCfg->modemSpiCfg[0].cs0Used ||
+ halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used), "Modem SPI1 is in use");
+ altMux |= CFG_REGS_AP_SPI1_AP_SPI1;
+ if (!halCfg->spiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->spiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x2) == 0, "Keyin 1 uses SPI1 CS2");
+ altMux |= CFG_REGS_SPI1_CS_2_SPI1_CS_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_SPI1_CS_2_KEYIN_1;
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ if (!halCfg->spiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->spiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else // AP SPI1 unused
+ {
+ altMux |= CFG_REGS_AP_SPI1_BB_SPI1;
+ if (halCfg->modemSpiCfg[0].cs0Used || halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used)
+ {
+ if (!halCfg->modemSpiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->modemSpiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (!halCfg->modemSpiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->modemSpiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ availableGpio_C |= HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ }
+ if (halCfg->spiCfg[1].cs0Used || halCfg->spiCfg[1].cs1Used)
+ {
+ if (!halCfg->spiCfg[1].cs0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(5);
+ }
+ if (halCfg->spiCfg[1].cs1Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x8) == 0, "Keyin 3 uses SPI2 CS1");
+ altMux |= CFG_REGS_KEYIN_3_SPI2_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYIN_3_KEYIN_3;
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+ if (!halCfg->spiCfg[1].di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(3);
+ }
+ if (!halCfg->spiCfg[1].di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(4);
+ }
+ }
+ else // AP SPI2 unused
+ {
+ availableGpio_A |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+
+ // Standalone keyin/out
+ if ((halCfg->keyInMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(0);
+ }
+
+ // SDMMC
+ if (!halCfg->sdmmcCfg.sdmmcUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->sdmmcCfg.sdmmc2Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20);
+ }
+ HAL_ASSERT(!(parallelNandUsed && halCfg->sdmmcCfg.sdmmc3Used),
+ "Parallel NAND uses SDMMC3 pins");
+
+ // SIM
+ if (!hal_BoardSimUsed(2))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27);
+ }
+
+ if (!hal_BoardSimUsed(3))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30);
+ }
+
+ UINT32 gpioMask;
+ // GPIO_C mask check
+ gpioMask = ~availableGpio_C & halCfg->usedGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO C are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_C &
+ (~halCfg->usedGpio_C & ~halCfg->noConnectGpio_C);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO C declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_A mask check
+ gpioMask = ~availableGpio_A & halCfg->usedGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO A are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_A &
+ (~halCfg->usedGpio_A & ~halCfg->noConnectGpio_A);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO A declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_B mask check
+ gpioMask = ~availableGpio_B & halCfg->usedGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO B are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_B &
+ (~halCfg->usedGpio_B & ~halCfg->noConnectGpio_B);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO B declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_D mask check
+ gpioMask = ~availableGpio_D & halCfg->usedGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO D are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_D &
+ (~halCfg->usedGpio_D & ~halCfg->noConnectGpio_D);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO D declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPO_A mask check
+ gpioMask = ~availableGpo_A & halCfg->usedGpo_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPO A are not available (0x%x)",
+ gpioMask);
+
+#endif // !FPGA
+
+ // Set IO drive
+ hwp_configRegs->IO_Drive1_Select = halCfg->ioDrive.select1;
+ hwp_configRegs->IO_Drive2_Select = halCfg->ioDrive.select2;
+
+ // Set the not connected ones as output and drive 0
+ // But keep boot mode GPIOs as input to avoid current leakage
+ noConnectMask_C = halCfg->noConnectGpio_C & ~bootModeGpio_C;
+ noConnectMask_A = halCfg->noConnectGpio_A & ~bootModeGpio_A;
+ noConnectMask_B = halCfg->noConnectGpio_B & ~bootModeGpio_B;
+ noConnectMask_D = halCfg->noConnectGpio_D & ~bootModeGpio_D;
+
+ hwp_gpio->gpio_clr = noConnectMask_C;
+ hwp_gpio->gpio_oen_set_out = noConnectMask_C;
+
+ hwp_apGpioA->gpio_clr = noConnectMask_A;
+ hwp_apGpioA->gpio_oen_set_out = noConnectMask_A;
+
+ hwp_apGpioB->gpio_clr = noConnectMask_B;
+ hwp_apGpioB->gpio_oen_set_out = noConnectMask_B;
+
+ hwp_apGpioD->gpio_clr = noConnectMask_D;
+ hwp_apGpioD->gpio_oen_set_out = noConnectMask_D;
+
+ // Init GPO_A values
+ if (halCfg->useClk32k)
+ {
+ // Init 32K clock pin to low (by setting up GPO)
+ hwp_apGpioA->gpo_clr = availableGpo_A
+ | HAL_GPO_BIT(2);
+ }
+ else
+ {
+ /* if GPO_1 used for usb id, it should be high */
+ #if defined(_TGT_AP_GPIO_USBID_CTRL)
+ hwp_apGpioA->gpo_clr = availableGpo_A & ~0x2;
+ #else
+ hwp_apGpioA->gpo_clr = availableGpo_A;
+ #endif
+ }
+
+ // Configure MUX after initializing all the GPO pins
+ // (GPIO pins are in input mode by default)
+
+ // Set GPIO mode
+ hwp_configRegs->BB_GPIO_Mode = availableGpio_C;
+ hwp_configRegs->AP_GPIO_A_Mode = availableGpio_A;
+ hwp_configRegs->AP_GPIO_B_Mode = availableGpio_B;
+ hwp_configRegs->AP_GPIO_D_Mode = availableGpio_D;
+ // Set Alt Mux configuration
+ hwp_configRegs->Alt_mux_select = altMux;
+
+ // --------------------------------------------------
+ // As of now, all connected GPIOs, which are as GPIO
+ // or not used at all but connected are configured as
+ // GPIOs in input mode, except for Gouda reset pins
+ // --------------------------------------------------
+
+}
+
+
+// =============================================================================
+// hal_BoardSetup
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+//PROTECTED VOID hal_BoardSetup(CONST HAL_CFG_CONFIG_T* halCfg)
+PUBLIC INT32 hal_BoardSetup(INT8 run_mode)
+{
+ g_bootBootMode = rda_hwcfg_get();
+ hal_BoardSetupGeneral(&hal_cfg);
+
+ if(g_halConfigError)
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
diff --git a/board/rda/rda8820/u-boot-spl.lds b/board/rda/rda8820/u-boot-spl.lds
new file mode 100644
index 0000000000..afe35fd2a8
--- /dev/null
+++ b/board/rda/rda8820/u-boot-spl.lds
@@ -0,0 +1,35 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00100100;
+ . = ALIGN(4);
+ .text :
+ {
+ __start = .;
+ arch/arm/cpu/armv7/start.o (.text)
+ *(.text)
+ }
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+ . = ALIGN(4);
+ . = .;
+ . = ALIGN(4);
+ __image_copy_end = .;
+ _end = .;
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start = .;
+ *(.bss*)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ ASSERT((ABSOLUTE(__bss_end__) < 0x00110000), \
+ "too big data in spl, don't exceed intrenal ram");
+ }
+}
diff --git a/board/rda/rda8850/Makefile b/board/rda/rda8850/Makefile
new file mode 100644
index 0000000000..2fc03d19cb
--- /dev/null
+++ b/board/rda/rda8850/Makefile
@@ -0,0 +1,82 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += clock_config.o clock.o ddr3.o
+else
+COBJS-$(CONFIG_MACH_RDA8850) += hal_config.o
+endif
+
+RDA_TARGET_DEF_FILE := $(ANDROID_BUILD_TOP)/$(RDA_TARGET_DEVICE_DIR)/target.def
+RDA_GET_MAKEFILE_VAR_FUNC = $(strip $(shell sed -n 's/^[ ]*$(1)[ ]*[?:]\?=\([^\#]\+\)\#*.*$$/\1/p' $(2)))
+
+NUMBER_OF_SIM := $(call RDA_GET_MAKEFILE_VAR_FUNC,NUMBER_OF_SIM,$(RDA_TARGET_DEF_FILE))
+ifeq ($(NUMBER_OF_SIM),)
+$(error Failed to get NUMBER_OF_SIM in $(RDA_TARGET_DEF_FILE))
+endif
+
+USER_SIM_ORDER := $(call RDA_GET_MAKEFILE_VAR_FUNC,USER_SIM_ORDER,$(RDA_TARGET_DEF_FILE))
+ifeq ($(USER_SIM_ORDER),)
+$(error Failed to get USER_SIM_ORDER in $(RDA_TARGET_DEF_FILE))
+endif
+
+NULL_STRING :=
+SPACE := ${NULL_STRING} # end of the line
+COMMA := ,
+TGT_SIM_ORDER := $(foreach SIM,$(USER_SIM_ORDER),$(SIM)$(COMMA))
+TGT_SIM_ORDER := $(subst ${SPACE},,${TGT_SIM_ORDER})
+
+CPPFLAGS_board/$(BOARDDIR)/hal_config.o += -I$(TOPDIR)/board/$(VENDOR)/common/include -DTGT_SIM_ORDER=$(TGT_SIM_ORDER) -DNUMBER_OF_SIM=$(NUMBER_OF_SIM)
+
+ifeq ($(strip $(TARGET_TABLET_MODE)),true)
+CPPFLAGS_board/$(BOARDDIR)/clock.o += -DTARGET_TABLET_MODE
+endif
+
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/rda8850/clock.c b/board/rda/rda8850/clock.c
new file mode 100644
index 0000000000..d773e9ccab
--- /dev/null
+++ b/board/rda/rda8850/clock.c
@@ -0,0 +1,1313 @@
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/ispi.h>
+#include <asm/arch/rda_sys.h>
+#include "clock_config.h"
+#include "debug.h"
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#if (PMU_VBUCK1_VAL < 0 || PMU_VBUCK1_VAL > 15)
+#error "Invalid PMU_VBUCK1_VAL"
+#endif
+#if (PMU_VBUCK3_VAL < 0 || PMU_VBUCK3_VAL > 15)
+#error "Invalid PMU_VBUCK3_VAL"
+#endif
+#ifdef PMU_VBUCK4_VAL
+#if (PMU_VBUCK4_VAL < 0 || PMU_VBUCK4_VAL > 15)
+#error "Invalid PMU_VBUCK4_VAL"
+#endif
+#endif
+
+//#define DO_SIMPLE_DDR_TEST
+//#define DO_DDR_PLL_DEBUG
+
+enum {
+ AP_CPU_CLK_IDX = 0,
+ AP_BUS_CLK_IDX,
+ AP_MEM_CLK_IDX,
+ AP_USB_CLK_IDX,
+};
+
+static int pll_enabled(int idx)
+{
+ if ((hwp_sysCtrlAp->Cfg_Pll_Ctrl[idx] &
+ (SYS_CTRL_AP_AP_PLL_ENABLE_MASK |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK)) ==
+ (SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET))
+ return 1;
+ else
+ return 0;
+}
+
+static int usb_in_use = 0;
+
+static void check_usb_usage(void)
+{
+ unsigned int mask = SYS_CTRL_AP_BUS_SEL_FAST_SLOW |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_MASK |
+ SYS_CTRL_AP_PLL_LOCKED_USB_MASK;
+ unsigned int reg = SYS_CTRL_AP_BUS_SEL_FAST_FAST |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED |
+ SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED;
+
+ if ((hwp_sysCtrlAp->Sel_Clock & mask) == reg &&
+ pll_enabled(AP_BUS_CLK_IDX) &&
+ pll_enabled(AP_USB_CLK_IDX))
+ usb_in_use = 1;
+ else
+ usb_in_use = 0;
+}
+
+#ifdef DO_SIMPLE_DDR_TEST
+
+void mem_test_write(void)
+{
+ volatile unsigned int *addr;
+
+ printf("write ddr test!!!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+ while((unsigned int)addr < 0x81000000)
+ {
+ *addr = (unsigned int )addr;
+ addr++;
+ }
+}
+
+void mem_test_read(void)
+{
+ volatile unsigned int *addr;
+
+ printf("read ddr!!!!\n");
+
+ addr = (volatile unsigned int *)(0x80000000);
+
+ while((unsigned int)addr < 0x81000000)
+ {
+ if (*addr != (unsigned int)addr){
+ int i = 0;
+
+ printf("test error!!!!!, addr = %x\n", (unsigned int)addr);
+ for (i = 0; i < 80;i++){
+ printf("%x ", *(addr + i));
+ if ((i % 4) == 0)
+ printf("\n");
+ }
+
+ return;
+ }
+
+ addr++;
+ }
+ printf("test complete!\n");
+}
+
+#endif /* DO_SIMPLE_DDR_TEST */
+
+#ifndef CONFIG_RDA_FPGA
+
+// PMU bit fields
+#define PMU_SET_BITFIELD(dword, bitfield, value) \
+ (((dword) & ~(bitfield ## _MASK)) | (bitfield(value)))
+
+#define RDA_PMU_VBUCK1_BIT_ACT(n) (((n)&0xf)<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK1_BIT_ACT_SHIFT (12)
+
+#define RDA_PMU_VBUCK4_BIT_ACT_SHIFT (4)
+#define RDA_PMU_VBUCK4_BIT_ACT_MASK (0xf<<4)
+#define RDA_PMU_VBUCK4_BIT_ACT(n) (((n)&0xf)<<4)
+
+#define RDA_PMU_VBUCK3_BIT_ACT_SHIFT (12)
+#define RDA_PMU_VBUCK3_BIT_ACT_MASK (0xf<<12)
+#define RDA_PMU_VBUCK3_BIT_ACT(n) (((n)&0xf)<<12)
+
+struct pll_freq {
+ UINT32 freq_mhz;
+ UINT16 major;
+ UINT16 minor;
+ UINT16 with_div;
+ UINT16 div;
+};
+
+typedef enum {
+ PLL_REG_CPU_BASE = 0x00,
+ PLL_REG_BUS_BASE = 0x20,
+ PLL_REG_MEM_BASE = 0x60,
+ PLL_REG_USB_BASE = 0x80,
+} PLL_REG_BASE_INDEX_t;
+
+typedef enum {
+ PLL_REG_OFFSET_01H = 1,
+ PLL_REG_OFFSET_02H = 2,
+ PLL_REG_OFFSET_DIV = 3,
+ PLL_REG_OFFSET_04H = 4,
+ PLL_REG_OFFSET_MAJOR = 5,
+ PLL_REG_OFFSET_MINOR = 6,
+ PLL_REG_OFFSET_07H = 7,
+} PLL_REG_OFFSET_INDEX_t;
+
+#define PLL_FREQ_TABLE_COUNT 21
+
+static struct pll_freq pll_freq_table[PLL_FREQ_TABLE_COUNT] = {
+ /* MHz Major Minor div */
+ {1600, 0x7B13, 0xB138, 0, 0x0000},
+ {1200, 0x5C4E, 0xC4EC, 0, 0x0000},
+ {1000, 0x4CEC, 0x4EC4, 0, 0x0000},
+ { 800, 0x3D89, 0xD89C, 0, 0x0000},
+ { 600, 0x2E27, 0x6274, 0, 0x0000},
+ { 519, 0x27EC, 0x4EC4, 1, 0x0007},
+ { 500, 0x2676, 0x2762, 1, 0x0007},
+ { 480, 0x24EC, 0x4EC4, 0, 0x0000},
+ { 455, 0x2300, 0x0000, 1, 0xF397},
+ { 416, 0x2000, 0x0000, 1, 0xFA97},
+ /* 800M div 1, PLL:800M DDR:400M for mem pll only */
+ { 400, 0x1EC4, 0xEC4C, 1, 0xF997},
+ { 355, 0x369D, 0x89D8, 1, 0x9597},
+ /* 702M div 1, PLL:702M DDR:351M for mem pll only */
+ { 351, 0x3600, 0x0000, 1, 0x9597},
+ { 333, 0x333B, 0x13B1, 1, 0x9D97},
+ /* 624M div 1, PLL:624M DDR:312M for mem pll only */
+ { 312, 0x3000, 0x0000, 1, 0x9D97},
+ { 290, 0x2C9D, 0x89D8, 1, 0x9A97},
+ /* 520M div 1, PLL:520M DDR:260M for mem pll only */
+ { 260, 0x2800, 0x0000, 1, 0xA297},
+ /* 800M div 2, PLL:400M DDR:200M for mem pll only */
+ { 200, 0x3D89, 0xD89C, 1, 0xB996},
+ /* DDR:156M for mem pll only */
+ { 156, 0x3000, 0x0000, 1, 0x0006},
+ /* 800M div 4, PLL:200M DDR:100M for mem pll only */
+ { 100, 0x3D89, 0xD89C, 1, 0x0005},
+ /* 800M div 8, PLL:100M DDR:50M for mem pll only */
+ { 50, 0x3D89, 0xD89C, 1, 0x0004},
+};
+
+static const struct clock_config *g_clock_config;
+
+#ifdef DO_DDR_PLL_DEBUG
+static struct clock_config clock_debug_config;
+static UINT32 ddrfreq = 400, ddr32bit = 0;
+#endif
+
+static void sys_shutdown_pll(void)
+{
+ int i;
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ if (usb_in_use) {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ } else {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_SLOW
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ }
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET;
+ }
+}
+
+static void sys_setup_pll(void)
+{
+ int i;
+ UINT32 mask;
+ UINT32 locked;
+ int cnt = 10; //10us, according to IC, the pll must be locked
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+
+ if (AP_MEM_CLK_IDX == i)
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(1)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ else
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ }
+
+ mask = SYS_CTRL_AP_PLL_LOCKED_CPU_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_MASK
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_MASK
+ ;
+ locked = SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED
+ ;
+
+ while (((hwp_sysCtrlAp->Sel_Clock & mask) != locked) && cnt) {
+ udelay(1);
+ cnt--;
+ }
+ if (cnt == 0) {
+ printf("WARNING, cannot lock cpu/bus/mem pll 0x%08x ",
+ hwp_sysCtrlAp->Sel_Clock);
+ printf("but we run anyway ...\n");
+ }
+
+ for (i = 0; i < 3; i++) {
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] |=
+ SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE;
+ }
+
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_FAST
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+}
+
+static void sys_setup_clk(void)
+{
+ // Disable some power-consuming clocks
+ hwp_sysCtrlAp->Clk_APO_Disable = SYS_CTRL_AP_DISABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Disable = SYS_CTRL_AP_DISABLE_MEM_VPU;
+
+ // Init clock gating mode
+ hwp_sysCtrlAp->Clk_CPU_Mode = 0;
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL;
+ hwp_sysCtrlAp->Clk_AXIDIV2_Mode = 0;
+ hwp_sysCtrlAp->Clk_GCG_Mode = SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL
+ | SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL;
+ hwp_sysCtrlAp->Clk_AHB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB2_Mode = 0;
+ hwp_sysCtrlAp->Clk_MEM_Mode = 0;
+ //hwp_sysCtrlAp->Clk_APO_Mode = SYS_CTRL_AP_MODE_APOC_VPU_MANUAL;
+
+ // Init module frequency
+ hwp_sysCtrlAp->Cfg_Clk_AP_CPU = g_clock_config->CLK_CPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_AXI = g_clock_config->CLK_AXI;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GCG = g_clock_config->CLK_GCG;
+
+ if (!usb_in_use) {
+ hwp_sysCtrlAp->Cfg_Clk_AP_AHB1 = g_clock_config->CLK_AHB1;
+ }
+
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB1 = g_clock_config->CLK_APB1;
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB2 = g_clock_config->CLK_APB2;
+ hwp_sysCtrlAp->Cfg_Clk_AP_MEM = g_clock_config->CLK_MEM;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GPU = g_clock_config->CLK_GPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VPU = g_clock_config->CLK_VPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VOC = g_clock_config->CLK_VOC;
+ hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH = g_clock_config->CLK_SFLSH;
+}
+
+static void print_sys_reg(char *name, UINT32 value)
+{
+ printf("clk %s = %lx\n", name, value);
+}
+
+static void sys_dump_clk(void)
+{
+ print_sys_reg("CPU", hwp_sysCtrlAp->Cfg_Clk_AP_CPU);
+ print_sys_reg("AXI", hwp_sysCtrlAp->Cfg_Clk_AP_AXI);
+ print_sys_reg("GCG", hwp_sysCtrlAp->Cfg_Clk_AP_GCG);
+ print_sys_reg("AHB1", hwp_sysCtrlAp->Cfg_Clk_AP_AHB1);
+ print_sys_reg("APB1", hwp_sysCtrlAp->Cfg_Clk_AP_APB1);
+ print_sys_reg("APB2", hwp_sysCtrlAp->Cfg_Clk_AP_APB2);
+ print_sys_reg("MEM", hwp_sysCtrlAp->Cfg_Clk_AP_MEM);
+ print_sys_reg("GPU", hwp_sysCtrlAp->Cfg_Clk_AP_GPU);
+ print_sys_reg("VPU", hwp_sysCtrlAp->Cfg_Clk_AP_VPU);
+ print_sys_reg("VOC", hwp_sysCtrlAp->Cfg_Clk_AP_VOC);
+ print_sys_reg("SFLSH", hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH);
+}
+
+static int pll_freq_set(UINT32 reg_base, UINT32 freq_mhz)
+{
+ int i;
+ struct pll_freq *freq;
+ unsigned int major, minor;
+ unsigned short value_02h;
+
+ /* find pll_freq */
+ for (i = 0; i < PLL_FREQ_TABLE_COUNT; i++) {
+ if (pll_freq_table[i].freq_mhz == freq_mhz)
+ break;
+ }
+ if (i >= PLL_FREQ_TABLE_COUNT) {
+ printf("pll_freq_set, fail to find freq\n");
+ return -1;
+ }
+
+ freq = &pll_freq_table[i];
+ if (freq->with_div && (reg_base == PLL_REG_MEM_BASE)) {
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV,
+ freq->div);
+ // Calculate the real MEM PLL freq
+ freq_mhz *= (1 << (8 - (freq->div & 0x7)));
+ }
+ if (freq_mhz >= 800 || reg_base == PLL_REG_USB_BASE) {
+ value_02h = 0x0309;
+ // Div PLL freq by 2
+ minor = ((freq->major & 0xFFFF) << 14) |
+ ((freq->minor >> 2) & 0x3FFF);
+ minor >>= 1;
+ // Recalculate the divider
+ major = (minor >> 14) & 0xFFFF;
+ minor = (minor << 2) & 0xFFFF;
+ } else {
+ value_02h = 0x0209;
+ major = freq->major;
+ minor = freq->minor;
+ }
+ if (reg_base == PLL_REG_USB_BASE)
+ value_02h ^= (1 << 8);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_02H, value_02h);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MAJOR, major);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MINOR, minor);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0010);
+
+ return 0;
+}
+
+static void pll_setup_freq(void)
+{
+ pll_freq_set(PLL_REG_CPU_BASE, g_clock_config->PLL_FREQ_CPU);
+ // Always configure BUS PLL, even when it is being used
+ pll_freq_set(PLL_REG_BUS_BASE, g_clock_config->PLL_FREQ_BUS);
+ pll_freq_set(PLL_REG_MEM_BASE, g_clock_config->PLL_FREQ_MEM);
+ pll_freq_set(PLL_REG_USB_BASE, g_clock_config->PLL_FREQ_USB);
+}
+
+static void print_pll_freq(char *name, UINT32 value)
+{
+ printf("pll freq %s = %d\n", name, (int)value);
+}
+
+static void sys_dump_pll_freq(void)
+{
+ print_pll_freq("CPU", g_clock_config->PLL_FREQ_CPU);
+ print_pll_freq("BUS", g_clock_config->PLL_FREQ_BUS);
+ print_pll_freq("MEM", g_clock_config->PLL_FREQ_MEM);
+ //print_pll_freq("USB", g_clock_config->PLL_FREQ_USB);
+}
+
+static void pmu_get_efuse_dcdc(int buckVoltLow[])
+{
+ static const u8 setBitCnt[8] = { 0, 1, 1, 2, 1, 2, 2, 3, };
+ u16 dcdc;
+ int i;
+
+ ispi_reg_write(0x51, 0x02ed);
+ udelay(2000);
+ ispi_reg_write(0x51, 0x02fd);
+ dcdc = ispi_reg_read(0x52);
+ ispi_reg_write(0x51, 0x0200);
+
+ for (i = 0; i < 4; i++) {
+ buckVoltLow[i] = (setBitCnt[dcdc & 0x7] > 1);
+ dcdc >>= 3;
+ }
+}
+
+static void pmu_setup_init(void)
+{
+ u32 value;
+ int buck_volt_low[4] = { 0, };
+
+ rda_nand_iodrive_set();
+
+#ifdef CONFIG_RDA_PDL
+ enable_charger(0);
+#endif
+
+ ispi_open(1);
+
+ // Disable vibrator
+ ispi_reg_write(0x03, 0x9FFF);
+ // Enable bandgap chopper mode
+ ispi_reg_write(0x0F, 0x1E90);
+ // Enable high AC throttling
+ ispi_reg_write(0x12, 0x1218);
+#ifdef TARGET_TABLET_MODE
+ // Charger current (cc = 6, pre = 7)
+ ispi_reg_write(0x13, 0x1B70);
+#else
+ // Charger current (cc = 2, pre = 7)
+ ispi_reg_write(0x13, 0x1970);
+#endif
+ // Vcore DCDC freq
+ ispi_reg_write(0x2D, 0x96BA);
+ ispi_reg_write(0x2E, 0x12AA);
+ // Get efuse dcdc
+ pmu_get_efuse_dcdc(buck_volt_low);
+ // Vcore voltage
+ value = 0x9244;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK1_BIT_ACT,
+ PMU_VBUCK1_VAL +
+ ((PMU_VBUCK1_VAL < 15 && buck_volt_low[0]) ? 1 : 0));
+ ispi_reg_write(0x2F, value);
+ // DDR PWM mode
+ ispi_reg_write(0x0D, 0x92D0);
+ // DDR voltage
+ value = 0xAAB5;
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK3_BIT_ACT,
+ PMU_VBUCK3_VAL +
+ ((PMU_VBUCK3_VAL < 15 && buck_volt_low[2]) ? 1 : 0));
+#ifdef PMU_VBUCK4_VAL
+ value = PMU_SET_BITFIELD(value, RDA_PMU_VBUCK4_BIT_ACT,
+ PMU_VBUCK4_VAL +
+ ((PMU_VBUCK4_VAL < 15 && buck_volt_low[3]) ? 1 : 0));
+ value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ // vBuck4 in low voltage range
+ ispi_reg_write(0x36, 0x6E45);
+#else
+ ispi_reg_write(0x36, 0x6E54);
+#endif
+ ispi_reg_write(0x2A, value);
+ // DDR power parameters
+ ispi_reg_write(0x4A, 0x96AA);
+ ispi_reg_write(0x4B, 0x96AA);
+
+ ispi_open(0);
+}
+
+static void setup_ddr_vtt(int vtt)
+{
+ printf("setup ddr vtt to %d\n", vtt);
+ ispi_reg_write(0x69, 0x0008 | (vtt & 0x07) );
+}
+
+#if 0
+/*
+ * we initialize usb clock, but this won't cause the usb clock jitter,
+ * because wo don't setup the usb pll
+ */
+static void usb_clock_pre_init(void)
+{
+ ispi_reg_write(0x83, 0x72ef);
+ ispi_reg_write(0x89, 0x7400);
+}
+#endif
+
+static void pll_setup_init(void)
+{
+ setup_ddr_vtt(DDR_VTT_VAL);
+
+ if (g_clock_config->DDR_CHAN_1_VALID) {
+ ispi_reg_write(0x101, g_clock_config->DDR_TIMING_101H);
+ ispi_reg_write(0x102, g_clock_config->DDR_TIMING_102H);
+ ispi_reg_write(0x103, g_clock_config->DDR_TIMING_103H);
+ ispi_reg_write(0x104, g_clock_config->DDR_TIMING_104H);
+ ispi_reg_write(0x105, g_clock_config->DDR_TIMING_105H);
+ ispi_reg_write(0x106, g_clock_config->DDR_TIMING_106H);
+ ispi_reg_write(0x107, g_clock_config->DDR_TIMING_107H);
+ ispi_reg_write(0x108, g_clock_config->DDR_TIMING_108H);
+ ispi_reg_write(0x109, g_clock_config->DDR_TIMING_109H);
+ ispi_reg_write(0x10A, g_clock_config->DDR_TIMING_10AH);
+ ispi_reg_write(0x10B, g_clock_config->DDR_TIMING_10BH);
+ ispi_reg_write(0x10C, g_clock_config->DDR_TIMING_10CH);
+ ispi_reg_write(0x10D, g_clock_config->DDR_TIMING_10DH);
+ ispi_reg_write(0x10E, g_clock_config->DDR_TIMING_10EH);
+ ispi_reg_write(0x10F, g_clock_config->DDR_TIMING_10FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID) {
+ ispi_reg_write(0x121, g_clock_config->DDR_TIMING_121H);
+ ispi_reg_write(0x122, g_clock_config->DDR_TIMING_122H);
+ ispi_reg_write(0x123, g_clock_config->DDR_TIMING_123H);
+ ispi_reg_write(0x124, g_clock_config->DDR_TIMING_124H);
+ ispi_reg_write(0x125, g_clock_config->DDR_TIMING_125H);
+ ispi_reg_write(0x126, g_clock_config->DDR_TIMING_126H);
+ ispi_reg_write(0x127, g_clock_config->DDR_TIMING_127H);
+ ispi_reg_write(0x128, g_clock_config->DDR_TIMING_128H);
+ ispi_reg_write(0x129, g_clock_config->DDR_TIMING_129H);
+ ispi_reg_write(0x12A, g_clock_config->DDR_TIMING_12AH);
+ ispi_reg_write(0x12B, g_clock_config->DDR_TIMING_12BH);
+ ispi_reg_write(0x12C, g_clock_config->DDR_TIMING_12CH);
+ ispi_reg_write(0x12D, g_clock_config->DDR_TIMING_12DH);
+ ispi_reg_write(0x12E, g_clock_config->DDR_TIMING_12EH);
+ ispi_reg_write(0x12F, g_clock_config->DDR_TIMING_12FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID) {
+ ispi_reg_write(0x141, g_clock_config->DDR_TIMING_141H);
+ ispi_reg_write(0x142, g_clock_config->DDR_TIMING_142H);
+ ispi_reg_write(0x143, g_clock_config->DDR_TIMING_143H);
+ ispi_reg_write(0x144, g_clock_config->DDR_TIMING_144H);
+ ispi_reg_write(0x145, g_clock_config->DDR_TIMING_145H);
+ ispi_reg_write(0x146, g_clock_config->DDR_TIMING_146H);
+ ispi_reg_write(0x147, g_clock_config->DDR_TIMING_147H);
+ ispi_reg_write(0x148, g_clock_config->DDR_TIMING_148H);
+ ispi_reg_write(0x149, g_clock_config->DDR_TIMING_149H);
+ ispi_reg_write(0x14A, g_clock_config->DDR_TIMING_14AH);
+ ispi_reg_write(0x14B, g_clock_config->DDR_TIMING_14BH);
+ ispi_reg_write(0x14C, g_clock_config->DDR_TIMING_14CH);
+ ispi_reg_write(0x14D, g_clock_config->DDR_TIMING_14DH);
+ ispi_reg_write(0x14E, g_clock_config->DDR_TIMING_14EH);
+ ispi_reg_write(0x14F, g_clock_config->DDR_TIMING_14FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID) {
+ ispi_reg_write(0x161, g_clock_config->DDR_TIMING_161H);
+ ispi_reg_write(0x162, g_clock_config->DDR_TIMING_162H);
+ ispi_reg_write(0x163, g_clock_config->DDR_TIMING_163H);
+ ispi_reg_write(0x164, g_clock_config->DDR_TIMING_164H);
+ ispi_reg_write(0x165, g_clock_config->DDR_TIMING_165H);
+ ispi_reg_write(0x166, g_clock_config->DDR_TIMING_166H);
+ ispi_reg_write(0x167, g_clock_config->DDR_TIMING_167H);
+ ispi_reg_write(0x168, g_clock_config->DDR_TIMING_168H);
+ ispi_reg_write(0x169, g_clock_config->DDR_TIMING_169H);
+ ispi_reg_write(0x16A, g_clock_config->DDR_TIMING_16AH);
+ ispi_reg_write(0x16B, g_clock_config->DDR_TIMING_16BH);
+ ispi_reg_write(0x16C, g_clock_config->DDR_TIMING_16CH);
+ ispi_reg_write(0x16D, g_clock_config->DDR_TIMING_16DH);
+ ispi_reg_write(0x16E, g_clock_config->DDR_TIMING_16EH);
+ ispi_reg_write(0x16F, g_clock_config->DDR_TIMING_16FH);
+ }
+
+ ispi_reg_write(0x160, g_clock_config->DDR_TIMING_160H);
+ ispi_reg_write(0x180, g_clock_config->DDR_TIMING_180H);
+ ispi_reg_write(0x181, g_clock_config->DDR_TIMING_181H);
+ ispi_reg_write(0x182, g_clock_config->DDR_TIMING_182H);
+ ispi_reg_write(0x183, g_clock_config->DDR_TIMING_183H);
+ ispi_reg_write(0x184, g_clock_config->DDR_TIMING_184H);
+ ispi_reg_write(0x185, g_clock_config->DDR_TIMING_185H);
+ ispi_reg_write(0x186, g_clock_config->DDR_TIMING_186H);
+ ispi_reg_write(0x187, g_clock_config->DDR_TIMING_187H);
+ ispi_reg_write(0x188, g_clock_config->DDR_TIMING_188H);
+ ispi_reg_write(0x189, g_clock_config->DDR_TIMING_189H);
+ ispi_reg_write(0x18A, g_clock_config->DDR_TIMING_18AH);
+ ispi_reg_write(0x18B, g_clock_config->DDR_TIMING_18BH);
+
+ //usb_clock_pre_init();
+
+ udelay(5000);
+}
+
+static void pll_setup_mem(void)
+{
+}
+
+static void pll_setup_mem_cal(void)
+{
+}
+
+static void print_pll_reg(UINT32 index, UINT32 value)
+{
+ printf("pll reg %lx = %lx\n", index, value);
+}
+
+static void pll_dump_reg(void)
+{
+/*
+ print_pll_reg(0x005, ispi_reg_read(0x005));
+ print_pll_reg(0x006, ispi_reg_read(0x006));
+ print_pll_reg(0x063, ispi_reg_read(0x063));
+ print_pll_reg(0x065, ispi_reg_read(0x065));
+ print_pll_reg(0x066, ispi_reg_read(0x066));
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ {
+ print_pll_reg(0x100, ispi_reg_read(0x100));
+ print_pll_reg(0x101, ispi_reg_read(0x101));
+ print_pll_reg(0x102, ispi_reg_read(0x102));
+ print_pll_reg(0x103, ispi_reg_read(0x103));
+ print_pll_reg(0x104, ispi_reg_read(0x104));
+ print_pll_reg(0x105, ispi_reg_read(0x105));
+ print_pll_reg(0x106, ispi_reg_read(0x106));
+ print_pll_reg(0x107, ispi_reg_read(0x107));
+ print_pll_reg(0x108, ispi_reg_read(0x108));
+ print_pll_reg(0x109, ispi_reg_read(0x109));
+ print_pll_reg(0x10A, ispi_reg_read(0x10A));
+ print_pll_reg(0x10B, ispi_reg_read(0x10B));
+ print_pll_reg(0x10C, ispi_reg_read(0x10C));
+ print_pll_reg(0x10D, ispi_reg_read(0x10D));
+ print_pll_reg(0x10E, ispi_reg_read(0x10E));
+ print_pll_reg(0x10F, ispi_reg_read(0x10F));
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ {
+ print_pll_reg(0x120, ispi_reg_read(0x120));
+ print_pll_reg(0x121, ispi_reg_read(0x121));
+ print_pll_reg(0x122, ispi_reg_read(0x122));
+ print_pll_reg(0x123, ispi_reg_read(0x123));
+ print_pll_reg(0x124, ispi_reg_read(0x124));
+ print_pll_reg(0x125, ispi_reg_read(0x125));
+ print_pll_reg(0x126, ispi_reg_read(0x126));
+ print_pll_reg(0x127, ispi_reg_read(0x127));
+ print_pll_reg(0x128, ispi_reg_read(0x128));
+ print_pll_reg(0x129, ispi_reg_read(0x129));
+ print_pll_reg(0x12A, ispi_reg_read(0x12A));
+ print_pll_reg(0x12B, ispi_reg_read(0x12B));
+ print_pll_reg(0x12C, ispi_reg_read(0x12C));
+ print_pll_reg(0x12D, ispi_reg_read(0x12D));
+ print_pll_reg(0x12E, ispi_reg_read(0x12E));
+ print_pll_reg(0x12F, ispi_reg_read(0x12F));
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ {
+ print_pll_reg(0x140, ispi_reg_read(0x140));
+ print_pll_reg(0x141, ispi_reg_read(0x141));
+ print_pll_reg(0x142, ispi_reg_read(0x142));
+ print_pll_reg(0x143, ispi_reg_read(0x143));
+ print_pll_reg(0x144, ispi_reg_read(0x144));
+ print_pll_reg(0x145, ispi_reg_read(0x145));
+ print_pll_reg(0x146, ispi_reg_read(0x146));
+ print_pll_reg(0x147, ispi_reg_read(0x147));
+ print_pll_reg(0x148, ispi_reg_read(0x148));
+ print_pll_reg(0x149, ispi_reg_read(0x149));
+ print_pll_reg(0x14A, ispi_reg_read(0x14A));
+ print_pll_reg(0x14B, ispi_reg_read(0x14B));
+ print_pll_reg(0x14C, ispi_reg_read(0x14C));
+ print_pll_reg(0x14D, ispi_reg_read(0x14D));
+ print_pll_reg(0x14E, ispi_reg_read(0x14E));
+ print_pll_reg(0x14F, ispi_reg_read(0x14F));
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ {
+ print_pll_reg(0x161, ispi_reg_read(0x161));
+ print_pll_reg(0x162, ispi_reg_read(0x162));
+ print_pll_reg(0x163, ispi_reg_read(0x163));
+ print_pll_reg(0x164, ispi_reg_read(0x164));
+ print_pll_reg(0x165, ispi_reg_read(0x165));
+ print_pll_reg(0x166, ispi_reg_read(0x166));
+ print_pll_reg(0x167, ispi_reg_read(0x167));
+ print_pll_reg(0x168, ispi_reg_read(0x168));
+ print_pll_reg(0x169, ispi_reg_read(0x169));
+ print_pll_reg(0x16A, ispi_reg_read(0x16A));
+ print_pll_reg(0x16B, ispi_reg_read(0x16B));
+ print_pll_reg(0x16C, ispi_reg_read(0x16C));
+ print_pll_reg(0x16D, ispi_reg_read(0x16D));
+ print_pll_reg(0x16E, ispi_reg_read(0x16E));
+ print_pll_reg(0x16F, ispi_reg_read(0x16F));
+ }
+
+ print_pll_reg(0x160, ispi_reg_read(0x160));
+ print_pll_reg(0x180, ispi_reg_read(0x180));
+ print_pll_reg(0x181, ispi_reg_read(0x181));
+ print_pll_reg(0x182, ispi_reg_read(0x182));
+ print_pll_reg(0x183, ispi_reg_read(0x183));
+ print_pll_reg(0x184, ispi_reg_read(0x184));
+ print_pll_reg(0x185, ispi_reg_read(0x185));
+ print_pll_reg(0x186, ispi_reg_read(0x186));
+ print_pll_reg(0x187, ispi_reg_read(0x187));
+ print_pll_reg(0x188, ispi_reg_read(0x188));
+ print_pll_reg(0x189, ispi_reg_read(0x189));
+ print_pll_reg(0x18A, ispi_reg_read(0x18A));
+ print_pll_reg(0x18B, ispi_reg_read(0x18B));
+ print_pll_reg(0x18C, ispi_reg_read(0x18C));
+*/
+}
+
+static int clock_save_config(void)
+{
+ /* save config to nand */
+ return 1;
+}
+
+#ifdef DO_DDR_PLL_DEBUG
+
+static int ddr_get_freq(UINT8 chioce)
+{
+ switch(chioce)
+ {
+ case 1:
+ return 50;
+ case 2:
+ return 100;
+ case 3:
+ return 156;
+ case 4:
+ return 200;
+ case 5:
+ return 290;
+ case 6:
+ return 333;
+ case 7:
+ return 355;
+ case 8:
+ return 400;
+ case 9:
+ return 416;
+ case 10:
+ return 455;
+ case 11:
+ return 500;
+ case 12:
+ return 519;
+ case 13:
+ return 260;
+ default:
+ return -1;
+ }
+}
+
+static void freq_choose(void)
+{
+ UINT8 i = 0, buf[3] = {0}, choice = 0;
+ INT32 freq_temp = 0;
+
+ printf("\nPlese choose the ddr Freq:");
+ printf("\n1.50M 2.100M 3.156M 4.200M 5.290M 6.333M 7.355M 8.400M 9.416M 10.455M 11.500M 12.519M 13.260M");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ serial_puts("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ choice = buf[0] - 0x30;
+ else if (2 == i)
+ choice = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ freq_temp = ddr_get_freq(choice);
+ if (-1 == freq_temp )
+ printf("\n Sorry, the fre you choose is wrong");
+ ddrfreq = freq_temp;
+}
+
+static void data_bits_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+
+ printf("\nPlese choose the ddr data bits:");
+ printf("\n1.16 2.32");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr32bit = 0;
+ else
+ ddr32bit = 1;
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+#if 0
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ printf("\nPlese input DDR voltage(0 ~ 15):");
+ }
+
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+}
+#endif
+
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ if (1 == vcoreselect)
+ {
+ regid = 0x2f;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ }
+ else
+ {
+ regid = 0x2a;
+ if (2 == vcoreselect)
+ printf("\nPlese input DDR buck3 voltage(0 ~ 15):");
+ else
+ printf("\nPlese input DDR buck4 voltage(0 ~ 15):");
+ }
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ printf("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ if ((vcoreselect == 1) || (vcoreselect == 2))
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);
+ mdelay(100);
+ }
+ else
+ {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 4;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 4);
+ reg_value |= temp ;
+ reg_value ^= RDA_PMU_VBUCK4_BIT_ACT(8);
+ ispi_reg_write(regid, reg_value);
+ ispi_reg_write(0x0D, 0x92D0);
+ ispi_reg_write(0x4B, 0x96A8);
+ mdelay(100);
+ }
+}
+
+static void pmu_buck4_buck3_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+ UINT8 ddr_voltage_source = 0;
+
+ printf("\nPlese choose the ddr voltage:");
+ printf("\n1.DDR3L 2.DDR3");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr_voltage_source =2;
+ else{
+ ddr_voltage_source = 3;
+ pmu_setup_calibration_voltage(2);
+ }
+ pmu_setup_calibration_voltage(ddr_voltage_source);
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+
+void clock_load_ddr_cal_config(void)
+{
+ clock_debug_config.PLL_FREQ_MEM = ddrfreq;
+ if (ddrfreq < 200)
+ clock_debug_config.DDR_FLAGS |= DDR_FLAGS_DLLOFF;
+ else
+ clock_debug_config.DDR_FLAGS &= ~DDR_FLAGS_DLLOFF;
+
+ if (0 == ddr32bit)
+ {
+ clock_debug_config.DDR_CHAN_3_VALID = 0;
+ clock_debug_config.DDR_CHAN_4_VALID = 0;
+ }
+
+ clock_debug_config.DDR_PARA &= ~DDR_PARA_MEM_BITS_MASK;
+ if (0 == ddr32bit)
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(1);
+ else
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(2);
+}
+
+static int serial_gets(UINT8 *pstr)
+{
+ UINT32 length;
+
+ length = 0;
+ while(1) {
+ pstr[length] = serial_getc();
+ if(pstr[length] == '\r') {
+ pstr[length] = 0x00;
+ break;
+ }
+ else if( pstr[length] == '\b' ) {
+ if(length>0) {
+ length --;
+ printf("\b");
+ }
+ }
+ else {
+ serial_putc(pstr[length]);
+ length ++;
+ }
+
+ if(length > 32)
+ return -1;
+ }
+ return length;
+}
+
+UINT32 asc2hex(UINT8 *pstr, UINT8 len)
+{
+ UINT8 i,ch,mylen;
+ UINT32 hexvalue;
+
+ for(mylen=0,i=0; i<8; i++)
+ {
+ if( pstr[i] == 0 )
+ break;
+ mylen ++;
+ }
+ if( len != 0 )
+ {
+ if(mylen>len)
+ mylen = len;
+ }
+ if(mylen>8)
+ mylen = 8;
+
+ hexvalue = 0;
+ for (i = 0; i < mylen; i++)
+ {
+ hexvalue <<= 4;
+ ch = *(pstr+i);
+ if((ch>='0') && (ch<='9'))
+ hexvalue |= ch - '0';
+ else if((ch>='A') && (ch<='F'))
+ hexvalue |= ch - ('A' - 10);
+ else if((ch>='a') && (ch<='f'))
+ hexvalue |= ch - ('a' - 10);
+ else
+ ;
+ }
+ return(hexvalue);
+}
+
+static int process_cmd(char * cmd)
+{
+ char cmd_element[3][16] = {{0}};
+ char * cmd_temp = cmd;
+ UINT8 i = 0, cmd_element_num = 0, former_space = 1;
+ UINT16 reg = 0, reg_value = 0;
+
+ if (NULL == cmd)
+ return -1;
+
+ while(('\0' != *cmd_temp) && ('\r' != *cmd_temp) && ('\n' != *cmd_temp))
+ {
+ if (' ' == * cmd_temp)
+ {
+ if (0 == former_space)
+ {
+ former_space = 1;
+ cmd_element[cmd_element_num][i] = '\0';
+ cmd_element_num++;
+ if (cmd_element_num > 2)
+ return -1;
+
+ i = 0;
+ }
+ }
+ else
+ {
+ former_space = 0;
+ cmd_element[cmd_element_num][i] = *cmd_temp;
+ i++;
+ if (i > 6)
+ return -1;
+ }
+
+ cmd_temp++;
+ }
+
+ cmd_element[cmd_element_num][i] = '\0';
+
+ if (!strcmp(cmd_element[0], "read"))
+ {
+ if (cmd_element_num == 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1]))
+ return -1;
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = ispi_reg_read(reg);
+ printf("value = 0x%x", reg_value);
+ printf("\nddrPll#");
+ }
+ else if (!strcmp(cmd_element[0], "write"))
+ {
+ if (cmd_element_num != 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1])
+ || ('0' != cmd_element[2][0]) || ('x' != cmd_element[2][1]))
+ return -1;
+
+ reg = (UINT16)asc2hex((UINT8 *)&cmd_element[1][2], 4);
+ reg_value = (UINT16)asc2hex((UINT8 *)&cmd_element[2][2], 4);
+ ispi_reg_write(reg, reg_value);
+ }
+ else if (!strcmp(cmd_element[0], "finish"))
+ {
+ return 1;
+ }
+ else if (!strcmp(cmd_element[0], "dump"))
+ {
+ pll_dump_reg();
+ printf("ddrPll#");
+ }
+ else
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+static void cmd_input(void)
+{
+ char cmd[48] = {0};
+ int len = 0;
+
+ ispi_open(0);
+ printf("\nddrPll#");
+ while(1)
+ {
+ len = serial_gets((UINT8 *)cmd);
+ printf("\nddrPll#");
+ if (len > 0)
+ {
+ int result = 0;
+
+ result = process_cmd(cmd);
+ if (-1 == result)
+ printf("command error! \nddrPll#");
+ else if (1 == result)
+ break;
+ else
+ continue;
+ }
+ }
+
+ return;
+}
+
+#endif /* DO_DDR_PLL_DEBUG */
+
+int clock_init(void)
+{
+#ifdef DO_DDR_PLL_DEBUG
+ char choice = 'n';
+#endif
+
+ /* First check current usb usage */
+ check_usb_usage();
+
+ printf("Init Clock ...\n");
+ g_clock_config = get_default_clock_config();
+
+ printf("Clock config ver: %d.%d\n",
+ g_clock_config->VERSION_MAJOR, g_clock_config->VERSION_MINOR);
+
+ pmu_setup_init();
+
+#ifdef DO_DDR_PLL_DEBUG
+ printf("If you want to config the ddr para manully ?(y = yes, n = no) \n");
+ choice = serial_getc();
+ if (choice == 'y')
+ {
+ memcpy(&clock_debug_config, g_clock_config,
+ sizeof(clock_debug_config));
+ g_clock_config = &clock_debug_config;
+ pmu_setup_calibration_voltage(1);
+ pmu_buck4_buck3_choose();
+ freq_choose();
+ data_bits_choose();
+ clock_load_ddr_cal_config();
+ }
+#endif
+
+ sys_shutdown_pll();
+ ispi_open(0);
+ pll_setup_init();
+#ifdef DO_DDR_PLL_DEBUG
+ if (choice == 'y')
+ cmd_input();
+#endif
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+
+ if (g_clock_config->DDR_CAL) {
+ printf("Init DDR for ddr_cal\n");
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+ pll_setup_mem_cal();
+ clock_save_config();
+ } else {
+ pll_setup_mem();
+ }
+
+ sys_dump_pll_freq();
+ sys_dump_clk();
+ pll_dump_reg();
+
+ printf("Init DDR, flag = 0x%04x, para = 0x%08lx\n",
+ g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+
+ #ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#else /* CONFIG_RDA_FPGA */
+
+int clock_init(void)
+{
+ u16 ddr_flags = DDR_FLAGS_DLLOFF
+ | DDR_FLAGS_ODT(1)
+ | DDR_FLAGS_RON(0);
+ //32bit
+ u32 ddr_para = DDR_PARA_MEM_BITS(2)
+ | DDR_PARA_BANK_BITS(3)
+ | DDR_PARA_ROW_BITS(3)
+ | DDR_PARA_COL_BITS(2);
+
+ printf("Init DDR\n");
+ ddr_init(ddr_flags, ddr_para);
+ printf("Done\n");
+
+#ifdef DO_SIMPLE_DDR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif
+
+ return 0;
+}
+
+#endif /* CONFIG_RDA_FPGA */
+
diff --git a/board/rda/rda8850/clock_config.c b/board/rda/rda8850/clock_config.c
new file mode 100644
index 0000000000..6df3c72e62
--- /dev/null
+++ b/board/rda/rda8850/clock_config.c
@@ -0,0 +1,147 @@
+#ifndef TARGET_TOOL
+#include <common.h>
+#include <asm/arch/factory.h>
+#include "clock_config.h"
+#endif
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+static const struct clock_config clock_default_config = {
+ /* Header */
+ 0, // MAGIC;
+ CLOCK_VER_MAJOR, // VERSION_MAJOR;
+ CLOCK_VER_MINOR, // VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ _TGT_AP_PLL_CPU_FREQ, // PLL_FREQ_CPU; /* 05, 06 */
+ _TGT_AP_PLL_BUS_FREQ, // PLL_FREQ_BUS; /* 25, 26 */
+ _TGT_AP_PLL_MEM_FREQ, // PLL_FREQ_MEM; /* 65, 66 */
+ _TGT_AP_PLL_USB_FREQ, // PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Cal */
+ 0, // DDR_CAL;
+ /* DDR_FLAGS */
+ DDR_FLAGS_ODT(_TGT_AP_DDR_ODT) // 010 -- 120 Ohm
+#if (_TGT_AP_DDR_CLOCK < 200)
+ | DDR_FLAGS_DLLOFF
+#endif
+#ifdef _TGT_AP_DDR_LOWPWR
+ | DDR_FLAGS_LOWPWR
+#endif
+ | DDR_FLAGS_RON(_TGT_AP_DDR_RON), // 00 -- 40 Ohm
+ /* DDR_PARA */
+ DDR_PARA_CHIP_BITS(_TGT_AP_DDR_CHIP_BITS)
+ | DDR_PARA_MEM_BITS(_TGT_AP_DDR_MEM_BITS)
+ | DDR_PARA_BANK_BITS(_TGT_AP_DDR_BANK_BITS)
+ | DDR_PARA_ROW_BITS(_TGT_AP_DDR_ROW_BITS )
+ | DDR_PARA_COL_BITS(_TGT_AP_DDR_COL_BITS),
+
+ /* AP sysctrl */
+ _TGT_AP_CLK_CPU, // CLK_CPU;
+ _TGT_AP_CLK_AXI, // CLK_AXI;
+ _TGT_AP_CLK_GCG, // CLK_GCG;
+ _TGT_AP_CLK_AHB1, // CLK_AHB1;
+ _TGT_AP_CLK_APB1, // CLK_APB1;
+ _TGT_AP_CLK_APB2, // CLK_APB2;
+ _TGT_AP_CLK_MEM, // CLK_MEM;
+ _TGT_AP_CLK_GPU, // CLK_GPU;
+ _TGT_AP_CLK_VPU, // CLK_VPU;
+ _TGT_AP_CLK_VOC, // CLK_VOC;
+ _TGT_AP_CLK_SFLSH, // CLK_SFLSH;
+ 0, // RESERVE;
+
+ /* DDR timings, defined in target */
+ DDR_CHAN_1_VALID_VAL, // DDR_CHAN_1_VALID;
+ DDR_TIMING_100H_VAL, // DDR_TIMING_100H;
+ DDR_TIMING_101H_VAL, // DDR_TIMING_101H;
+ DDR_TIMING_102H_VAL, // DDR_TIMING_102H;
+ DDR_TIMING_103H_VAL, // DDR_TIMING_103H;
+ DDR_TIMING_104H_VAL, // DDR_TIMING_104H;
+ DDR_TIMING_105H_VAL, // DDR_TIMING_105H;
+ DDR_TIMING_106H_VAL, // DDR_TIMING_106H;
+ DDR_TIMING_107H_VAL, // DDR_TIMING_107H;
+ DDR_TIMING_108H_VAL, // DDR_TIMING_108H;
+ DDR_TIMING_109H_VAL, // DDR_TIMING_109H;
+ DDR_TIMING_10AH_VAL, // DDR_TIMING_10AH;
+ DDR_TIMING_10BH_VAL, // DDR_TIMING_10BH;
+ DDR_TIMING_10CH_VAL, // DDR_TIMING_10CH;
+ DDR_TIMING_10DH_VAL, // DDR_TIMING_10DH;
+ DDR_TIMING_10EH_VAL, // DDR_TIMING_10EH;
+ DDR_TIMING_10FH_VAL, // DDR_TIMING_10FH;
+
+ DDR_CHAN_2_VALID_VAL, // DDR_CHAN_2_VALID;
+ DDR_TIMING_120H_VAL, // DDR_TIMING_120H;
+ DDR_TIMING_121H_VAL, // DDR_TIMING_121H;
+ DDR_TIMING_122H_VAL, // DDR_TIMING_122H;
+ DDR_TIMING_123H_VAL, // DDR_TIMING_123H;
+ DDR_TIMING_124H_VAL, // DDR_TIMING_124H;
+ DDR_TIMING_125H_VAL, // DDR_TIMING_125H;
+ DDR_TIMING_126H_VAL, // DDR_TIMING_126H;
+ DDR_TIMING_127H_VAL, // DDR_TIMING_127H;
+ DDR_TIMING_128H_VAL, // DDR_TIMING_128H;
+ DDR_TIMING_129H_VAL, // DDR_TIMING_129H;
+ DDR_TIMING_12AH_VAL, // DDR_TIMING_12AH;
+ DDR_TIMING_12BH_VAL, // DDR_TIMING_12BH;
+ DDR_TIMING_12CH_VAL, // DDR_TIMING_12CH;
+ DDR_TIMING_12DH_VAL, // DDR_TIMING_12DH;
+ DDR_TIMING_12EH_VAL, // DDR_TIMING_12EH;
+ DDR_TIMING_12FH_VAL, // DDR_TIMING_12FH;
+
+ DDR_CHAN_3_VALID_VAL, // DDR_CHAN_3_VALID;
+ DDR_TIMING_140H_VAL, // DDR_TIMING_140H;
+ DDR_TIMING_141H_VAL, // DDR_TIMING_141H;
+ DDR_TIMING_142H_VAL, // DDR_TIMING_142H;
+ DDR_TIMING_143H_VAL, // DDR_TIMING_143H;
+ DDR_TIMING_144H_VAL, // DDR_TIMING_144H;
+ DDR_TIMING_145H_VAL, // DDR_TIMING_145H;
+ DDR_TIMING_146H_VAL, // DDR_TIMING_146H;
+ DDR_TIMING_147H_VAL, // DDR_TIMING_147H;
+ DDR_TIMING_148H_VAL, // DDR_TIMING_148H;
+ DDR_TIMING_149H_VAL, // DDR_TIMING_149H;
+ DDR_TIMING_14AH_VAL, // DDR_TIMING_14AH;
+ DDR_TIMING_14BH_VAL, // DDR_TIMING_14BH;
+ DDR_TIMING_14CH_VAL, // DDR_TIMING_14CH;
+ DDR_TIMING_14DH_VAL, // DDR_TIMING_14DH;
+ DDR_TIMING_14EH_VAL, // DDR_TIMING_14EH;
+ DDR_TIMING_14FH_VAL, // DDR_TIMING_14FH;
+
+ DDR_CHAN_4_VALID_VAL, // DDR_CHAN_4_VALID;
+ DDR_TIMING_161H_VAL, // DDR_TIMING_161H;
+ DDR_TIMING_162H_VAL, // DDR_TIMING_162H;
+ DDR_TIMING_163H_VAL, // DDR_TIMING_163H;
+ DDR_TIMING_164H_VAL, // DDR_TIMING_164H;
+ DDR_TIMING_165H_VAL, // DDR_TIMING_165H;
+ DDR_TIMING_166H_VAL, // DDR_TIMING_166H;
+ DDR_TIMING_167H_VAL, // DDR_TIMING_167H;
+ DDR_TIMING_168H_VAL, // DDR_TIMING_168H;
+ DDR_TIMING_169H_VAL, // DDR_TIMING_169H;
+ DDR_TIMING_16AH_VAL, // DDR_TIMING_16AH;
+ DDR_TIMING_16BH_VAL, // DDR_TIMING_16BH;
+ DDR_TIMING_16CH_VAL, // DDR_TIMING_16CH;
+ DDR_TIMING_16DH_VAL, // DDR_TIMING_16DH;
+ DDR_TIMING_16EH_VAL, // DDR_TIMING_16EH;
+ DDR_TIMING_16FH_VAL, // DDR_TIMING_16FH;
+
+ DDR_TIMING_160H_VAL, // DDR_TIMING_160H;
+ DDR_TIMING_180H_VAL, // DDR_TIMING_180H;
+ DDR_TIMING_181H_VAL, // DDR_TIMING_181H;
+ DDR_TIMING_182H_VAL, // DDR_TIMING_182H;
+ DDR_TIMING_183H_VAL, // DDR_TIMING_183H;
+ DDR_TIMING_184H_VAL, // DDR_TIMING_184H;
+ DDR_TIMING_185H_VAL, // DDR_TIMING_185H;
+ DDR_TIMING_186H_VAL, // DDR_TIMING_186H;
+ DDR_TIMING_187H_VAL, // DDR_TIMING_187H;
+ DDR_TIMING_188H_VAL, // DDR_TIMING_188H;
+ DDR_TIMING_189H_VAL, // DDR_TIMING_189H;
+ DDR_TIMING_18AH_VAL, // DDR_TIMING_18AH;
+ DDR_TIMING_18BH_VAL, // DDR_TIMING_18BH;
+};
+
+const struct clock_config *get_default_clock_config(void)
+{
+#ifndef TARGET_TOOL
+ BUILD_BUG_ON(sizeof(struct clock_config) > AP_FACTORY_CLOCK_CFG_LEN);
+#endif
+
+ return &clock_default_config;
+}
+
diff --git a/board/rda/rda8850/clock_config.h b/board/rda/rda8850/clock_config.h
new file mode 100644
index 0000000000..57e31bb6d3
--- /dev/null
+++ b/board/rda/rda8850/clock_config.h
@@ -0,0 +1,130 @@
+#ifndef __CLOCK_CONFIG_H__
+#define __CLOCK_CONFIG_H__
+
+typedef unsigned long UINT32;
+typedef unsigned short UINT16;
+typedef long INT32;
+typedef short INT16;
+typedef unsigned char UINT8;
+typedef char INT8;
+
+#define CLOCK_VER_MAJOR 2
+#define CLOCK_VER_MINOR 0
+
+struct clock_config {
+ /* Header */
+ UINT32 MAGIC;
+ UINT16 VERSION_MAJOR;
+ UINT16 VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ UINT32 PLL_FREQ_CPU; /* 05, 06 */
+ UINT32 PLL_FREQ_BUS; /* 25, 26 */
+ UINT32 PLL_FREQ_MEM; /* 65, 66 */
+ UINT32 PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Flags */
+ UINT16 DDR_CAL;
+ UINT16 DDR_FLAGS;
+ UINT32 DDR_PARA;
+ /* AP sysctrl */
+ UINT16 CLK_CPU;
+ UINT16 CLK_AXI;
+ UINT16 CLK_GCG;
+ UINT16 CLK_AHB1;
+ UINT16 CLK_APB1;
+ UINT16 CLK_APB2;
+ UINT16 CLK_MEM;
+ UINT16 CLK_GPU;
+ UINT16 CLK_VPU;
+ UINT16 CLK_VOC;
+ UINT16 CLK_SFLSH;
+ UINT16 RESERVE;
+ /* DDR timings */
+ UINT16 DDR_CHAN_1_VALID;
+ UINT16 DDR_TIMING_100H;
+ UINT16 DDR_TIMING_101H;
+ UINT16 DDR_TIMING_102H;
+ UINT16 DDR_TIMING_103H;
+ UINT16 DDR_TIMING_104H;
+ UINT16 DDR_TIMING_105H;
+ UINT16 DDR_TIMING_106H;
+ UINT16 DDR_TIMING_107H;
+ UINT16 DDR_TIMING_108H;
+ UINT16 DDR_TIMING_109H;
+ UINT16 DDR_TIMING_10AH;
+ UINT16 DDR_TIMING_10BH;
+ UINT16 DDR_TIMING_10CH;
+ UINT16 DDR_TIMING_10DH;
+ UINT16 DDR_TIMING_10EH;
+ UINT16 DDR_TIMING_10FH;
+
+ UINT16 DDR_CHAN_2_VALID;
+ UINT16 DDR_TIMING_120H;
+ UINT16 DDR_TIMING_121H;
+ UINT16 DDR_TIMING_122H;
+ UINT16 DDR_TIMING_123H;
+ UINT16 DDR_TIMING_124H;
+ UINT16 DDR_TIMING_125H;
+ UINT16 DDR_TIMING_126H;
+ UINT16 DDR_TIMING_127H;
+ UINT16 DDR_TIMING_128H;
+ UINT16 DDR_TIMING_129H;
+ UINT16 DDR_TIMING_12AH;
+ UINT16 DDR_TIMING_12BH;
+ UINT16 DDR_TIMING_12CH;
+ UINT16 DDR_TIMING_12DH;
+ UINT16 DDR_TIMING_12EH;
+ UINT16 DDR_TIMING_12FH;
+
+ UINT16 DDR_CHAN_3_VALID;
+ UINT16 DDR_TIMING_140H;
+ UINT16 DDR_TIMING_141H;
+ UINT16 DDR_TIMING_142H;
+ UINT16 DDR_TIMING_143H;
+ UINT16 DDR_TIMING_144H;
+ UINT16 DDR_TIMING_145H;
+ UINT16 DDR_TIMING_146H;
+ UINT16 DDR_TIMING_147H;
+ UINT16 DDR_TIMING_148H;
+ UINT16 DDR_TIMING_149H;
+ UINT16 DDR_TIMING_14AH;
+ UINT16 DDR_TIMING_14BH;
+ UINT16 DDR_TIMING_14CH;
+ UINT16 DDR_TIMING_14DH;
+ UINT16 DDR_TIMING_14EH;
+ UINT16 DDR_TIMING_14FH;
+
+ UINT16 DDR_CHAN_4_VALID;
+ UINT16 DDR_TIMING_161H;
+ UINT16 DDR_TIMING_162H;
+ UINT16 DDR_TIMING_163H;
+ UINT16 DDR_TIMING_164H;
+ UINT16 DDR_TIMING_165H;
+ UINT16 DDR_TIMING_166H;
+ UINT16 DDR_TIMING_167H;
+ UINT16 DDR_TIMING_168H;
+ UINT16 DDR_TIMING_169H;
+ UINT16 DDR_TIMING_16AH;
+ UINT16 DDR_TIMING_16BH;
+ UINT16 DDR_TIMING_16CH;
+ UINT16 DDR_TIMING_16DH;
+ UINT16 DDR_TIMING_16EH;
+ UINT16 DDR_TIMING_16FH;
+
+ UINT16 DDR_TIMING_160H;
+ UINT16 DDR_TIMING_180H;
+ UINT16 DDR_TIMING_181H;
+ UINT16 DDR_TIMING_182H;
+ UINT16 DDR_TIMING_183H;
+ UINT16 DDR_TIMING_184H;
+ UINT16 DDR_TIMING_185H;
+ UINT16 DDR_TIMING_186H;
+ UINT16 DDR_TIMING_187H;
+ UINT16 DDR_TIMING_188H;
+ UINT16 DDR_TIMING_189H;
+ UINT16 DDR_TIMING_18AH;
+ UINT16 DDR_TIMING_18BH;
+};
+
+const struct clock_config *get_default_clock_config(void);
+
+#endif
diff --git a/board/rda/rda8850/config.mk b/board/rda/rda8850/config.mk
new file mode 100644
index 0000000000..ec124aff34
--- /dev/null
+++ b/board/rda/rda8850/config.mk
@@ -0,0 +1,11 @@
+#
+#the spl code should not exceed the SPL_MAX_SIZE,and if
+#the spl don't up to the max size, paddint the last with
+#zero(or 0xff?)
+
+#48kbytes, 48*1024
+#SPL_APPENDING_TO := 48
+#SPL_MAX_SIZE := 49512
+
+# space for spl(48KiB) & mtd partition table(24KiB)
+SPL_APPENDING_TO := 72
diff --git a/board/rda/rda8850/ddr3.c b/board/rda/rda8850/ddr3.c
new file mode 100644
index 0000000000..e3628005ac
--- /dev/null
+++ b/board/rda/rda8850/ddr3.c
@@ -0,0 +1,516 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include "tgt_ap_clock_config.h"
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+#define DMC_READY 128
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {QOSX_CTRL7, 0x08, 0x08},
+ {TURNAROUND_PRIO,0x1A, 0x0},
+ {HIT_PRIO, 0x1A, 0x0},
+ {T_REFI, 0x186, 0x3f},
+ {QUEUE_CTRL, 0xffff, 0x0},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x6},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x6},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0c, 0x6},// turn for now
+// {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x2},
+ {T_PHYWRLAT, 0x104, 0x105},
+ {T_PHYWRLAT, 0x104, 0x105},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 __attribute__((unused)) dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ printf("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + 129 * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = 0xf;
+ printf("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + 128 *4)) = 0x0;
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+
+ if (dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+
+ if (!dll_off){
+ *((volatile UINT32*)(PHY_REG_BASE + PHY_RDLAT * 4)) = 7;
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_ENABLE_LAT * 4)) =2;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 3;
+ }else
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_ODT_ENABLE_REG *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4)) = 0xf;
+
+ serial_puts("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 __attribute__((unused)) dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+ *addr = val;
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+
+ *addr = val;
+
+ printf("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+ *addr = val;
+
+ printf("decode ctrl value: %lx\n", val);
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ val = 0x10000402;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000103;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+#endif
+
+ //config ECC control
+ wait_idle = 0x6;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2105110C) = 0x00000060;
+ *(volatile UINT32*)(0x21051110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8850/ddr3.h b/board/rda/rda8850/ddr3.h
new file mode 100644
index 0000000000..7481954144
--- /dev/null
+++ b/board/rda/rda8850/ddr3.h
@@ -0,0 +1,50 @@
+#ifndef _SYS_DDR3_H_
+#define _SYS_DDR3_H_
+
+#include "clock_config.h"
+
+/*
+ * defination of ddr flags
+ */
+/* [Debug] DLL off mode, 0 is dll on mode */
+#define DDR_FLAGS_DLLOFF 0x8000
+/* [Debug] LowSpeed mode*/
+#define DDR_FLAGS_RESERVE 0x4000
+/* DDR LowPower mode */
+#define DDR_FLAGS_LOWPWR 0x2000
+/* ODT: 000--Null 001--60 010--120 011--40 100--20 101--30 */
+#define DDR_FLAGS_ODT(n) (((n)<<0)&0x0007)
+#define DDR_FLAGS_ODT_SHIFT 0
+#define DDR_FLAGS_ODT_MASK 0x0007
+/* RON: 00--40 01--30 */
+#define DDR_FLAGS_RON(n) (((n)<<3)&0x0018)
+#define DDR_FLAGS_RON_SHIFT 3
+#define DDR_FLAGS_RON_MASK 0x0018
+
+/*
+ * defination of ddr parameters
+ */
+#define DDR_PARA_CHIP_BITS(n) (((n)<<0)&0x00000003)
+#define DDR_PARA_CHIP_BITS_SHIFT 0
+#define DDR_PARA_CHIP_BITS_MASK 0x00000003
+/* memory width 0--8bit 1--16bit 2--32bit */
+#define DDR_PARA_MEM_BITS(n) (((n)<<2)&0x0000000c)
+#define DDR_PARA_MEM_BITS_SHIFT 2
+#define DDR_PARA_MEM_BITS_MASK 0x0000000c
+/* 2--4banks 3--8banks */
+#define DDR_PARA_BANK_BITS(n) (((n)<<4)&0x000000f0)
+#define DDR_PARA_BANK_BITS_SHIFT 4
+#define DDR_PARA_BANK_BITS_MASK 0x000000f0
+/* 2--13rbs 3--14rbs 4--15rbs 5--16rbs */
+#define DDR_PARA_ROW_BITS(n) (((n)<<8)&0x00000f00)
+#define DDR_PARA_ROW_BITS_SHIFT 8
+#define DDR_PARA_ROW_BITS_MASK 0x00000f00
+/* 0--8cbs 1--9cbs 2--10cbs 3--11cbs 4--12cbs */
+#define DDR_PARA_COL_BITS(n) (((n)<<12)&0x0000f000)
+#define DDR_PARA_COL_BITS_SHIFT 12
+#define DDR_PARA_COL_BITS_MASK 0x0000f000
+
+int ddr_init(UINT16 flags, UINT32 para);
+
+#endif /* _SYS_DDR3_H_ */
+
diff --git a/board/rda/rda8850/ddr3_8810.c b/board/rda/rda8850/ddr3_8810.c
new file mode 100644
index 0000000000..d665019b8d
--- /dev/null
+++ b/board/rda/rda8850/ddr3_8810.c
@@ -0,0 +1,540 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "ddr3_init.h"
+#include "tgt_ap_clock_config.h"
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#if (DDR_TYPE == 1)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x186},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {REFRESH_CTRL, 0x0, 0x0},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 2)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x3f, 0x3f},
+ {T_RFC, 0x230024, 0x230024},
+ {T_RFC, 0x540024, 0x540024},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0xb, 0xb},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xe, 0xe},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTR, 0x4000b, 0x4000b},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x6, 0x6},
+ {WR_LATENCY, 0x3, 0x3},
+ {T_RDDATA_EN, 0x3, 0x3},
+ {T_PHYWRLAT, 0x101, 0x101},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x1000058, 0x1000058},
+ {T_XSR, 0x580058, 0x580058},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#elif (DDR_TYPE == 3)
+static dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x186, 0x3f},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x5},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x5},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+// {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0e, 0x0c},// turn for now
+// {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+// {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x1},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_PHYWRLAT, 0x103, 0x104},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL7, 0x0f, 0x0f},
+ {TURNAROUND_PRIO,0x1A, 0x1A},
+ {HIT_PRIO, 0x1A, 0x1A},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+};
+#else
+#error "Wrong DDR Type"
+#endif
+
+void config_ddr_phy(UINT16 flag)
+{
+ int wait_idle;
+ UINT16 dll_off;
+
+ wait_idle = DF_DELAY + 16;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+ while (wait_idle--);
+
+#if (DDR_TYPE == 1)
+ *((volatile UINT32*)(PHY_REG_BASE + CTRL_DELAY * 4)) = 1;
+ printf("ddr1 phy init done!\n");
+#elif (DDR_TYPE ==2)
+ *((volatile UINT32*)(PHY_REG_BASE + 129 * 4)) = 0;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = 0xf;
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = 0xf;
+ printf("ddr2 phy init done!\n");
+#else
+ *((volatile UINT32*)(PHY_REG_BASE + RESET_DDR3 * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + WRITE_DATA_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + DDR3_USED * 4)) = 1;
+ if (!dll_off)
+ *((volatile UINT32*)(PHY_REG_BASE + RDELAY_SEL * 4)) = 2;
+ *((volatile UINT32*)(PHY_REG_BASE + WDELAY_SEL * 4)) = 3;
+ *((volatile UINT32*)(PHY_REG_BASE + DQOUT_ENABLE_LAT * 4)) = 1;
+ *((volatile UINT32*)(PHY_REG_BASE + 48 *4)) = (3<<2);
+ *((volatile UINT32*)(PHY_REG_BASE + 20 *4)) = (3<<2);
+ printf("ddr3 phy init done!\n");
+#endif
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ volatile UINT32 *addr;
+ UINT16 dll_off, lpw, odt, ron;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+
+ for (i=0; i<ARRAY_NUM(dmc_reg_cfg); i++) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+
+#if (DDR_TYPE == 3)
+ //config low power control register
+ if (lpw) {
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x48;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_ESR);//0x260
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_XSR);//0x264
+ *addr = 0x200;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_SRCKD);//0x268
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + T_CKSRD);//0x26C
+ *addr = 0xa;
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+#elif (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + LOWPWR_CTRL);//0x20
+ *addr = 0x38;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config format control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + FORMAT_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x22000202;
+#elif (DDR_TYPE == 2)
+ val = 0x22000202;
+#else
+ val = *addr;
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+#endif
+ *addr = val;
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x20302;
+#elif (DDR_TYPE == 2)
+ val = 0x30200;
+#else
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+#endif
+ *addr = val;
+
+ printf("address ctrl value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + ADDR_CTRL);
+
+ val = 0x30301;
+
+ *addr = val;
+
+ printf("address ctrl 2 value: %lx\n", val);
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config decode control register
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+#if (DDR_TYPE == 1)
+ val = 0x00;
+#elif (DDR_TYPE == 2)
+ val = 0x50;
+#else
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+#endif
+ *addr = val;
+ wait_idle = 0x6;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + DECODE_CTRL);
+ val = 0x10;
+ *addr = val;
+ wait_idle = 0x6;
+ while (wait_idle--);
+#endif
+
+ wait_idle = DF_DELAY;
+ while (wait_idle--);
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x0;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0;
+#elif (DDR_TYPE == 2)
+ val = 0;
+#else
+ //config MR2
+ if (dll_off)
+ val = 0x10020008;
+ else
+ val = 0x10020000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x20000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000003f;
+#else
+ //config MR3
+ val = 0x10030000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x1000ff0a;
+#else
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x30000000;
+#elif (DDR_TYPE == 2)
+ val = 0x10008301;
+#else
+ //config MR0
+ val = 0x10000520;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10000033;
+#elif (DDR_TYPE == 2)
+ val = 0x10000402;//0ld 0x10000102
+#else
+ val = 0x50000400;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x6;
+ while (wait_idle--);
+
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+#if (DDR_TYPE == 1)
+ val = 0x10020000;
+#elif (DDR_TYPE == 2)
+ val = 0x30000000;
+#else
+ val = 0x30000000;
+#endif
+ *addr = val;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+
+#if (DDR_TYPE == 2)
+/* zhangli for MCP */
+ addr = (volatile UINT32*)(DMC_REG_BASE + DIRECT_CMD);
+ *addr = 0x10000103;
+ wait_idle = DF_DELAY + 0x9;
+ while (wait_idle--);
+#endif
+
+#if (DDR_TYPE == 2)
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x4;
+ *addr = val;
+ wait_idle = 0x5;
+ while (wait_idle--);
+#endif
+
+ //config ECC control
+ addr = (volatile UINT32*)(DMC_REG_BASE + ECC_CTRL);
+ val = 0x0;
+ *addr = val;
+ wait_idle = 0x4f;
+ while (wait_idle--);
+
+ //config MEMC CMD
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_CMD);
+ val = 0x3;
+ *addr = val;
+ wait_idle = 0x8;
+ while (wait_idle--);
+
+ //READ MEMC STATUS
+ addr = (volatile UINT32*)(DMC_REG_BASE + MEMC_STATUS);
+ val = 0;
+ do {
+ val = *addr;
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2105110C) = 0x00000060;
+ *(volatile UINT32*)(0x21051110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
+
diff --git a/board/rda/rda8850/ddr3_8810e_16bit.c b/board/rda/rda8850/ddr3_8810e_16bit.c
new file mode 100644
index 0000000000..2469e0c75e
--- /dev/null
+++ b/board/rda/rda8850/ddr3_8810e_16bit.c
@@ -0,0 +1,388 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+//////////////////////////////////////////////////////////////////////
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+ serial_puts("ddr3 phy init done!\n");
+}
+///////////////////////////////////////////////////////////////////
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int * addr;
+ wait_idle = 0x4e;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x200);
+*addr = 0x3f;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x204);
+*addr = 0x23008c;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x204);
+*addr = 0x8c008c;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x208);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x20c);
+*addr = 0xc;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x218);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x21c);
+*addr = 0xf;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x220);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x224);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x228);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x22c);
+*addr = 0x14;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x234);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x238);
+*addr = 0x6;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x23c);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x244);
+*addr = 0x10;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x248);
+*addr = 0x4000d;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x248);
+*addr = 0x6000f;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x24c);
+*addr = 0x60000;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x230);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x240);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x300);
+*addr = 0x2;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x304);
+*addr = 0x105;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x304);
+*addr = 0x105;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x258);
+*addr = 0x3;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x25c);
+*addr = 0x20003;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x25c);
+*addr = 0xa0003;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x260);
+*addr = 0x4;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x264);
+*addr = 0x1000090;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x264);
+*addr = 0x2000090;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x268);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x26c);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x250);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x254);
+*addr = 0x5;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x148);
+*addr = 0x0;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x18);
+*addr = 0x22000201;
+
+ wait_idle = 0x1d;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30200;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x10);
+*addr = 0x30401;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x14);
+*addr = 0x50;
+
+ wait_idle = 0x5;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x14);
+*addr = 0x10;
+
+ wait_idle = 0x6;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x0;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10020008;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10030000;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10010001;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x10000520;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x50000400;
+
+ wait_idle = 0x10;
+ while(wait_idle--);
+DDR_CONFIG_DELAY(DF_DELAY);
+addr = (int *) (DMCREG_BADDR + 0x108);
+*addr = 0x30000000;
+
+ wait_idle = 0x6;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x148);
+*addr = 0x0;
+
+ wait_idle = 0x8;
+ while(wait_idle--);
+addr = (int *) (DMCREG_BADDR + 0x8);
+*addr = 0x3;
+
+addr = (int * ) (DMCREG_BADDR + 0x0);
+wait_idle = 0;
+while ( wait_idle != 3)
+wait_idle = *addr;
+serial_puts("ddr3 dmc400 init done!\n");
+}
+
+///////////////////////////////////////////////////////////////////
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ serial_puts("8bit ");
+ break;
+ case 1:
+ serial_puts("16bit ");
+ break;
+ case 2:
+ serial_puts("32bit ");
+ break;
+ }
+ if (dll_off)
+ serial_puts("dll-off Mode ...\n");
+ else
+ serial_puts("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ //serial_puts("dram");
+ //print_u32(DDR_TYPE);
+ //serial_puts(" init done ...\n");
+ printf("dram%d init done ...\n", DDR_TYPE);
+
+ return 0;
+}
+
diff --git a/board/rda/rda8850/ddr3_8810e_32bit.c b/board/rda/rda8850/ddr3_8810e_32bit.c
new file mode 100644
index 0000000000..6cdef162f6
--- /dev/null
+++ b/board/rda/rda8850/ddr3_8810e_32bit.c
@@ -0,0 +1,410 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+#include "tgt_ap_clock_config.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DATA_ODT_ENABLE_REG*4);
+ *addr = 0xf;
+
+ addr = (int *) (PHY_BADDR + DATA_WRITE_ENABLE_REG*4);
+ *addr = 0xf;
+
+ serial_puts("ddr3 phy init done!\n");
+}
+
+#define DMC_WAIT_IDLE 1
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int *addr;
+ volatile int temp;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x200);
+ *addr = 0x3f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x23008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x8c008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x208);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x20c);
+ *addr = 0xc;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x218);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x21c);
+ *addr = 0xf;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x220);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x224);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x228);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x22c);
+ *addr = 0x14;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x234);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x238);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x23c);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x244);
+ *addr = 0x10;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x4000d;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x6000f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x24c);
+ *addr = 0x60000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x230);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x240);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x300);
+ *addr = 0x2;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x258);
+ *addr = 0x3;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0x20003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0xa0003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x260);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x1000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x2000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x268);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x26c);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x250);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x254);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x18);
+ //*addr = 0x22000201;
+ *addr = 0x22000202;
+
+ wait_idle = DMC_WAIT_IDLE * 0x1d;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ //*addr = 0x30401;
+ *addr = 0x30302;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ *addr = 0x50;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ //*addr = 0x10;
+ *addr = 0x00;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10020008;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10030000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10010001;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10000520;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x50000400;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x30000000;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE * 0x8;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x8);
+ *addr = 0x3;
+
+ addr = (int * ) (DMCREG_BADDR + 0x0);
+ temp = 0;
+ while (temp != 3)
+ temp = *addr;
+
+ serial_puts("ddr3 dmc400 init done!\n");
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+void axi_outstandings_init(void)
+{
+ *(volatile UINT32*)(0x2105110C) = 0x00000060;
+ *(volatile UINT32*)(0x21051110) = 0x00000300;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ serial_puts("8bit ");
+ break;
+ case 1:
+ serial_puts("16bit ");
+ break;
+ case 2:
+ serial_puts("32bit ");
+ break;
+ }
+ if (dll_off)
+ serial_puts("dll-off Mode ...\n");
+ else
+ serial_puts("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ //serial_puts("dram ");
+ //print_u32(DDR_TYPE);
+ //serial_puts(" init done ...\n");
+ printf("ddr%d init done\n");
+
+ return 0;
+}
diff --git a/board/rda/rda8850/ddr3_init.h b/board/rda/rda8850/ddr3_init.h
new file mode 100644
index 0000000000..402375d269
--- /dev/null
+++ b/board/rda/rda8850/ddr3_init.h
@@ -0,0 +1,101 @@
+#ifndef _SYS_RAM_INIT_H_
+#define _SYS_RAM_INIT_H_
+
+#define MEMC_STATUS 0x000
+#define MEMC_CONFIG 0x004
+#define MEMC_CMD 0x008
+#define ADDR_CTRL 0x010
+#define DECODE_CTRL 0x014
+#define FORMAT_CTRL 0x018
+#define LOWPWR_CTRL 0x020
+#define TURNAROUND_PRIO 0x030
+#define HIT_PRIO 0x034
+//QOS0~QOS15:038~078
+#define QOSX_CTRL 0x038
+#define QOSX_CTRL7 0x058
+#define QOSX_CTRL15 0x078
+#define TIMEOUT_CTRL 0x07C
+#define QUEUE_CTRL 0x080
+#define WR_PRIO_CTRL 0x088
+#define WR_PRIO_CTRL2 0x08C
+#define RD_PRIO_CTRL 0x090
+#define RD_PRIO_CTRL2 0x094
+#define ACCESS_ADDR_MATCH 0x098
+#define ACCESS_ADDR_MATCH_63_32 0x09C
+#define ACCESS_ADDR_MASK 0x0A0
+#define ACCESS_ADDR_MASK_63_32 0x0A4
+
+#define CHANNEL_STATUS 0x100
+#define DIRECT_CMD 0x108
+#define MR_DATA 0x110
+#define REFRESH_CTRL 0x120
+#define INTR_CTRL 0x128
+#define INTR_CLR 0x130
+#define INTR_STATUS 0x138
+#define INTR_INFO 0x140
+#define ECC_CTRL 0x148
+
+#define T_REFI 0x200
+#define T_RFC 0x204
+#define T_MRR 0x208
+#define T_MRW 0x20C
+#define T_RCD 0x218
+#define T_RAS 0x21C
+#define T_RP 0x220
+#define T_RPALL 0x224
+#define T_RRD 0x228
+#define T_FAW 0x22C
+#define RD_LATENCY 0x230
+#define T_RTR 0x234
+#define T_RTW 0x238
+#define T_RTP 0x23C
+#define WR_LATENCY 0x240
+#define T_WR 0x244
+#define T_WTR 0x248
+#define T_WTW 0x24C
+#define T_ECKD 0x250
+#define T_XCKD 0x254
+#define T_EP 0x258
+#define T_XP 0x25C
+#define T_ESR 0x260
+#define T_XSR 0x264
+#define T_SRCKD 0x268
+#define T_CKSRD 0x26C
+
+#define T_RDDATA_EN 0x300
+#define T_PHYWRLAT 0x304
+#define RDLVL_CTRL 0x308
+#define RDLVL_DIRECT 0x310
+#define T_RDLVL_EN 0x318
+#define T_RDLVL_RR 0x31C
+#define WRLVL_CTRL 0x328
+#define WRLVL_DIRECT 0x330
+#define T_WRLVL_EN 0x338
+#define T_WRLVL_WW 0x33C
+
+#define PHY_PWR_CTRL 0x348
+#define PHY_UPD_CTRL 0x350
+
+#define USER_STATUS 0x400
+#define USER_CONFIG0 0x404
+#define USER_CONFIG1 0x408
+
+#define INTEG_CFG 0xE00
+#define INTEG_OUTPUTS 0xE08
+
+#define PERIPH_ID_0 0xFE0
+#define PERIPH_ID_1 0xFE4
+#define PERIPH_ID_2 0xFE8
+#define PERIPH_ID_3 0xFEC
+#define COMPONENT_ID_0 0xFF0
+#define COMPONENT_ID_1 0xFF4
+#define COMPONENT_ID_2 0xFF8
+#define COMPONENT_ID_3 0xFFC
+
+typedef struct {
+ UINT32 reg_offset;
+ UINT32 dll_on_val;
+ UINT32 dll_off_val;
+} dmc_reg_t;
+
+#endif /* _SYS_RAM_INIT_H_ */
diff --git a/board/rda/rda8850/ddr3_zhangli_32bit_dlloff.c b/board/rda/rda8850/ddr3_zhangli_32bit_dlloff.c
new file mode 100644
index 0000000000..aeabca6ba2
--- /dev/null
+++ b/board/rda/rda8850/ddr3_zhangli_32bit_dlloff.c
@@ -0,0 +1,400 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+
+#include "ddr3.h"
+
+#define DDR_TYPE 3
+#define DF_DELAY (0x100000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DMC_READY 128
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+
+#define ARRAY_NUM(n) (sizeof(n))/(sizeof(n[0]))
+
+#define DMCREG_BADDR DMC_REG_BASE
+#define PHY_BADDR PHY_REG_BASE
+
+void DDR_CONFIG_DELAY(int delay)
+{
+ int i;
+ i = delay;
+ while(i--);
+}
+
+void config_ddr_phy(UINT16 flag)
+{
+ int cnt;
+ volatile int * addr;
+ cnt = 16;
+ while(cnt--);
+
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (PHY_BADDR + DMC_READY*4);
+ *addr = 0;
+
+ addr = (int *) (PHY_BADDR + RESET_DDR3*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WRITE_DATA_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DDR3_USED*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + WDELAY_SEL*4);
+ *addr = 3;
+
+ addr = (int *) (PHY_BADDR + DQOUT_ENABLE_LAT*4);
+ *addr = 1;
+
+ addr = (int *) (PHY_BADDR + DATA_ODT_ENABLE_REG*4);
+ *addr = 0xf;
+
+ addr = (int *) (PHY_BADDR + DATA_WRITE_ENABLE_REG*4);
+ *addr = 0xf;
+
+ printf("ddr3 phy init done!\n");
+}
+
+#define DMC_WAIT_IDLE 1
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int wait_idle;
+ volatile int *addr;
+ volatile int temp;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x200);
+ *addr = 0x3f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x23008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x204);
+ *addr = 0x8c008c;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x208);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x20c);
+ *addr = 0xc;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x218);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x21c);
+ *addr = 0xf;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x220);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x224);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x228);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x22c);
+ *addr = 0x14;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x234);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x238);
+ *addr = 0x6;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x23c);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x244);
+ *addr = 0x10;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x4000d;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x248);
+ *addr = 0x6000f;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x24c);
+ *addr = 0x60000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x230);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x240);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x300);
+ *addr = 0x2;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x304);
+ *addr = 0x105;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x258);
+ *addr = 0x3;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0x20003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x25c);
+ *addr = 0xa0003;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x260);
+ *addr = 0x4;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x1000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x264);
+ *addr = 0x2000090;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x268);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x26c);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x250);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x254);
+ *addr = 0x5;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x18);
+ //*addr = 0x22000201;
+ *addr = 0x22000202;
+
+ wait_idle = DMC_WAIT_IDLE * 0x1d;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ *addr = 0x30200;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x10);
+ //*addr = 0x30401;
+ *addr = 0x30302;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ *addr = 0x50;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x14);
+ //*addr = 0x10;
+ *addr = 0x00;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10020008;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10030000;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10010001;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x10000520;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x50000400;
+
+ wait_idle = DMC_WAIT_IDLE;
+ while(wait_idle--);
+ DDR_CONFIG_DELAY(DF_DELAY);
+ addr = (int *) (DMCREG_BADDR + 0x108);
+ *addr = 0x30000000;
+
+ wait_idle = DMC_WAIT_IDLE * 0x6;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x148);
+ *addr = 0x0;
+
+ wait_idle = DMC_WAIT_IDLE * 0x8;
+ while(wait_idle--);
+ addr = (int *) (DMCREG_BADDR + 0x8);
+ *addr = 0x3;
+
+ addr = (int * ) (DMCREG_BADDR + 0x0);
+ temp = 0;
+ while (temp != 3)
+ temp = *addr;
+
+ printf("ddr3 dmc400 init done!\n");
+}
+
+void axi_prio_init(void)
+{
+ *(volatile UINT32*)(0x20900100) = 0xaa0000aa;
+ *(volatile UINT32*)(0x21054100) = 0x00000008;
+ *(volatile UINT32*)(0x21054104) = 0x00000008;
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ axi_prio_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+ config_dmc400(flags, para);
+ printf("dram%x init done ...\n", DDR_TYPE);
+
+ return 0;
+}
+
diff --git a/board/rda/rda8850/debug.h b/board/rda/rda8850/debug.h
new file mode 100644
index 0000000000..1d4f03bedb
--- /dev/null
+++ b/board/rda/rda8850/debug.h
@@ -0,0 +1,9 @@
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+void print_u8(u8 ch);
+void print_u16(u16 data);
+void print_u32(u32 data);
+void dump_buf(u8 *buf, u32 size);
+
+#endif /* _DEBUG_H_ */
diff --git a/board/rda/rda8850/hal_config.c b/board/rda/rda8850/hal_config.c
new file mode 100644
index 0000000000..e07d22afaa
--- /dev/null
+++ b/board/rda/rda8850/hal_config.c
@@ -0,0 +1,1168 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2013, RDA Microeletronics. //
+// All Rights Reserved //
+// //
+// This source code is the property of RDA Microeletronics and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA Microeletronics. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/8810/src/hal_config.c $ //
+// $Author: huazeng $ //
+// $Date: 2013-08-31 17:48:58 +0800 (Sat, 31 Aug 2013) $ //
+// $Revision: 21005 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_config.c
+/// Implementation of HAL initialization related with the particular instance
+/// of the IP.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+/* uboot */
+#include <common.h>
+
+/* common */
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/chip_id.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_gpio.h>
+
+/* device */
+#include "hal_sys.h"
+#include "halp_sys.h"
+#include "halp_gpio.h"
+#include "bootp_mode.h"
+#include "hal_config.h"
+#include "hal_ap_gpio.h"
+#include "hal_ap_config.h"
+#include <asm/arch/reg_cfg_regs.h>
+
+/* target */
+#include "tgt_board_cfg.h"
+#include "tgt_ap_gpio_setting.h"
+#define HAL_ASSERT(cond, fmt, ...) \
+ if(!(cond)) { \
+ hal_assert(fmt, ##__VA_ARGS__); \
+ g_halConfigError = TRUE; \
+ }
+
+//// =============================================================================
+//// GLOBAL VARIABLES
+//// =============================================================================
+PRIVATE CONST UINT8 g_halCfgSimOrder[] = { TGT_SIM_ORDER };
+PRIVATE HAL_CFG_CONFIG_T hal_cfg = TGT_HAL_CONFIG;
+PRIVATE UINT32 g_bootBootMode = 0;
+PRIVATE BOOL g_halConfigError = FALSE;
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+// HAL_ASSERT
+PRIVATE VOID hal_assert(const char *fmt, ...)
+{
+ va_list args;
+ puts("\n#-------Board Mux config found error-------#\n");
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ putc('\n');
+ puts("--------------------------------------------\n\n");
+ va_end(args);
+}
+
+// =============================================================================
+// hal_BoardSimUsed
+// -----------------------------------------------------------------------------
+/// Check whether a SIM card interface is used.
+// ============================================================================
+PRIVATE BOOL hal_BoardSimUsed(UINT32 simId)
+{
+ UINT32 i = 0;
+ //for (UINT32 i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ for (i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ {
+ if (g_halCfgSimOrder[i] == simId)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+#if 0
+// =============================================================================
+// hal_BoardConfigClk32k
+// -----------------------------------------------------------------------------
+/// Configure CLK_32K output.
+/// @param enable TRUE to configure, and FALSE to disable.
+// ============================================================================
+PROTECTED VOID hal_BoardConfigClk32k(BOOL enable)
+{
+ HAL_ASSERT(g_halCfg->useClk32k == TRUE, "32K clock is not configured");
+
+ if (enable)
+ {
+ // Setup the pin as 32K clock output
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_CLK_32K;
+ }
+ else
+ {
+ // Setup the pin as GPO (and low ouput has been
+ // configured in hal_BoardSetup())
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_GPO_2;
+ }
+}
+#endif
+
+// =============================================================================
+// hal_BoardSetupGeneral
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL for general purpose
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+PROTECTED VOID hal_BoardSetupGeneral(CONST HAL_CFG_CONFIG_T* halCfg)
+{
+ UINT32 altMux = 0;
+
+ UINT32 availableGpo_A = 0;
+
+ UINT32 availableGpio_C = 0;
+ UINT32 availableGpio_A = 0;
+ UINT32 availableGpio_B = 0;
+ UINT32 availableGpio_D = 0;
+
+ UINT32 bootModeGpio_C = 0;
+ UINT32 bootModeGpio_A = 0;
+ UINT32 bootModeGpio_B = 0;
+ UINT32 bootModeGpio_D = 0;
+
+ UINT32 noConnectMask_C = 0;
+ UINT32 noConnectMask_A = 0;
+ UINT32 noConnectMask_B = 0;
+ UINT32 noConnectMask_D = 0;
+
+#ifdef FPGA
+
+ // no muxing, do nothing
+
+#else // !FPGA
+
+ // GPIOs as boot mode pins
+ bootModeGpio_C = HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ bootModeGpio_A = HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7);
+ bootModeGpio_B = HAL_GPIO_BIT(0);
+ bootModeGpio_D = 0;
+
+ // Available GPIOs
+ availableGpio_C |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ // Volume down/up keys
+ availableGpio_D |= HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6);
+
+ // Boot modes
+ BOOL spiFlashCam = FALSE;
+ BOOL spiFlashNand = FALSE;
+ if (g_bootBootMode & BOOT_MODE_BOOT_SPI)
+ {
+ if (g_bootBootMode & BOOT_MODE_SPI_PIN_NAND)
+ {
+ HAL_ASSERT((g_bootBootMode & BOOT_MODE_BOOT_EMMC),
+ "Emmc boot pin should be pulled up to boot on SPI flash over NAND pins");
+ spiFlashNand = TRUE;
+ }
+ else
+ {
+ spiFlashCam = TRUE;
+ }
+ }
+
+ if ((g_bootBootMode & (BOOT_MODE_BOOT_EMMC|BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_EMMC)
+ {
+ // Boot from EMMC
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 should be used");
+ }
+
+ if ( (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_SPI_NAND ||
+ (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L))
+ == (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L)
+ )
+ {
+ // Boot from SDMMC1
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmcUsed, "SDMMC1 should be used");
+ }
+
+ // For convenience, we do not consider spiFlashCam at present.
+ // We assume that SPI flash always uses parallel nand pins.
+#if 0
+ BOOL parallelNandUsed = halCfg->parallelNandUsed;
+#else
+ BOOL parallelNandUsed = !spiFlashNand && !halCfg->sdmmcCfg.sdmmc3Used;
+#endif
+ BOOL nand8_15Cam = FALSE;
+ BOOL nand8_15Lcd = FALSE;
+ if ((g_bootBootMode & BOOT_MODE_BOOT_EMMC) == 0)
+ {
+ // If BOOT_MODE_BOOT_EMMC is not set, the parallel NAND pins
+ // are multiplexed to parallel NAND controller
+ HAL_ASSERT(parallelNandUsed, "Parallel NAND should be used");
+ if ((g_bootBootMode & BOOT_MODE_NAND_8BIT) == 0)
+ {
+ if (g_bootBootMode & BOOT_MODE_NAND_HIGH_PIN_CAM)
+ {
+ nand8_15Cam = TRUE;
+ }
+ else
+ {
+ nand8_15Lcd = TRUE;
+ }
+ }
+ }
+
+ HAL_ASSERT(!(parallelNandUsed && spiFlashNand), "SPI flash uses parallel NAND pins");
+ HAL_ASSERT(!(nand8_15Cam && spiFlashCam), "NAND 8-15 bits and SPI flash both use cam pins");
+
+ if (!(parallelNandUsed || spiFlashNand))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }
+
+ CONST HAL_CFG_CAM_T *camCfg = &halCfg->camCfg;
+ CONST HAL_LCD_MODE_T lcdMode = halCfg->goudaCfg.lcdMode;
+
+ // LCD
+ if (lcdMode == HAL_LCD_MODE_PARALLEL_16BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ altMux |= CFG_REGS_LCD_MODE_PARALLEL_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_DSI)
+ {
+ altMux |= CFG_REGS_LCD_MODE_DSI;
+ availableGpio_A |= HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23);
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_16BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ altMux |= CFG_REGS_LCD_MODE_RGB_16BIT;
+ }
+/*
+ else if (lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ if (halCfg->goudaCfg.lcd16_23Cam)
+ {
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_PARALLEL &&
+ (camCfg->camUsed || camCfg->cam1Used)),
+ "Parallel camera uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam),
+ "I2C2 uses LCD 22-23 bits");
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses LCD 16-21 bits");
+ HAL_ASSERT(!nand8_15Cam, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_CSI &&
+ ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))),
+ "Camera CSI1 uses LCD 16-21 bits");
+ altMux |= CFG_REGS_LCD24_CAM_CAM_IO;
+ }
+ else
+ {
+ HAL_ASSERT(!parallelNandUsed, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 uses LCD 16-23 bits");
+ altMux |= CFG_REGS_LCD24_CAM_NAND_IO;
+ }
+ altMux |= CFG_REGS_LCD_MODE_RGB_24BIT;
+ }
+*/
+ else if (lcdMode == HAL_LCD_MODE_SPI)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use SPI LCD pins");
+ HAL_ASSERT((halCfg->usedGpo_A & 0x18) == 0, "GPO 3/4 use SPI LCD pins");
+ altMux |= CFG_REGS_SPI_LCD_SPI_LCD;
+ availableGpio_A |= HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21);
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Lcd mode not defined!");
+ }
+
+ if (lcdMode == HAL_LCD_MODE_DSI || lcdMode == HAL_LCD_MODE_SPI)
+ {
+ if (nand8_15Lcd)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(24)
+ | HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+ }
+
+ if (halCfg->goudaCfg.cs0Used)
+ {
+ altMux |= CFG_REGS_GPO_4_LCD_CS_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_4_GPO_4;
+ availableGpo_A |= HAL_GPO_BIT(4);
+ }
+
+ if (halCfg->goudaCfg.cs1Used)
+ {
+ altMux |= CFG_REGS_GPO_3_LCD_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_3_GPO_3;
+ availableGpo_A |= HAL_GPO_BIT(3);
+ }
+
+ // I2C
+ if (!halCfg->i2cCfg.i2cUsed)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+
+ if (halCfg->i2cCfg.i2c2Used)
+ {
+ if (halCfg->i2cCfg.i2c2PinsCam)
+ {
+ if (camCfg->camUsed)
+ {
+ HAL_ASSERT(camCfg->camPdnRemap == GPIO_NONE &&
+ camCfg->camRstRemap == GPIO_NONE,
+ "Cam uses PDN/RST pins");
+ }
+ if (camCfg->cam1Used)
+ {
+ HAL_ASSERT(camCfg->cam1PdnRemap == GPIO_NONE &&
+ camCfg->cam1RstRemap == GPIO_NONE,
+ "Cam1 uses PDN/RST pins");
+ }
+ HAL_ASSERT(!nand8_15Cam, "NAND uses cam PDN/RST pins");
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ altMux |= CFG_REGS_CAM_I2C2_I2C2;
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ }
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+
+ if (halCfg->i2cCfg.i2c3Used)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x18) == 0, "Keyout 3/4 use I2C3 pins");
+ altMux |= CFG_REGS_KEYOUT_3_4_I2C3;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYOUT_3_4_KEYOUT_3_4;
+ if ((halCfg->keyOutMask & 0x8) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(6);
+ }
+ if ((halCfg->keyOutMask & 0x10) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // Camera
+ if (camCfg->camUsed || camCfg->cam1Used)
+ {
+ if(camCfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses cam pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use cam pins");
+ altMux |= CFG_REGS_CSI2_PARALLEL_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(24);
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux |= CFG_REGS_CSI2_SPI_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(14);
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses CSI1 pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use CSI1 pins");
+ }
+ else
+ {
+ // CSI1 is unused
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ altMux |= CFG_REGS_CSI2_CSI2;
+ // If CSI2 is unused
+ if (!((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_2) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE,"Invalid cam mode: %d", camCfg->camMode);
+ }
+
+ // Cam PDN/RST pins
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ if (!((camCfg->camUsed && camCfg->camRstRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10);
+ }
+ if (!((camCfg->camUsed && camCfg->camPdnRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1PdnRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(11);
+ }
+ }
+ }
+ else // cam is unused
+ {
+ availableGpio_B |= HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11);
+ }
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+
+ // UART 1 Pin configuration
+ switch (halCfg->uartCfg[0])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ availableGpio_C |= HAL_GPIO_BIT(6);
+ availableGpio_A |= HAL_GPIO_BIT(14);
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART1 TXD, RXD
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART1 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ // use UART1 TXD, RXD, CTS, RTS, RI, DSR, DCD, DTR
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ HAL_ASSERT(!halCfg->hostUartUsed, "Host UART uses UART1 DCD/DTR");
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART 2 must be unused to use UART1 Modem lines.");
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART1 DSR");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART1 RI");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS
+ | CFG_REGS_UART1_8LINE_UART1_8_LINE;
+ break;
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart 1 Configuration (%d).",
+ halCfg->uartCfg[0]);
+ break;
+ }
+
+ // Host UART
+ if (halCfg->hostUartUsed)
+ {
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART2 uses host UART RXD/TXD.");
+ }
+
+ // UART 2 Pin configuration
+ switch (halCfg->uartCfg[1])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_UART2_HOST_UART
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if (halCfg->uartCfg[0] != HAL_UART_CONFIG_MODEM)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART2 TXD, RXD
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART2 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART2 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART2 RTS");
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_UART2_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart2 Configuration (%d).",
+ halCfg->uartCfg[1]);
+ break;
+ }
+
+ // UART 3 Pin configuration
+ switch (halCfg->uartCfg[2])
+ {
+ case HAL_UART_CONFIG_NONE:
+ availableGpio_D |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART3 TXD, RXD
+ availableGpio_D |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART3 TXD, RXD, CTS, RTS
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart3 Configuration (%d).",
+ halCfg->uartCfg[2]);
+ break;
+ }
+
+ // I2S
+ altMux |= CFG_REGS_DAI_I2S;
+ if (halCfg->i2sCfg.di0Used || halCfg->i2sCfg.di1Used ||
+ halCfg->i2sCfg.di2Used || halCfg->i2sCfg.doUsed)
+ {
+ if (!halCfg->i2sCfg.di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(11);
+ }
+ if (!halCfg->i2sCfg.di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(12);
+ }
+ if (halCfg->i2sCfg.di2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x4) == 0, "Keyin 2 uses I2S DI2");
+ altMux |= CFG_REGS_I2S_DI_2_I2S_DI_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_I2S_DI_2_KEYIN_2;
+ if ((halCfg->keyInMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(2);
+ }
+ }
+ if (!halCfg->i2sCfg.doUsed)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(13);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13);
+ }
+
+ // LPS CO1
+ if (halCfg->useLpsCo1)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x10) == 0, "Keyin 4 uses LPS_CO1");
+ altMux |= CFG_REGS_LPSCO_1_LPSCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_LPSCO_1_KEYIN_4;
+ if ((halCfg->keyInMask & 0x10) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // TCO
+ if (halCfg->usedTco & 0x1)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x1) == 0, "Keyout 0 uses TCO0");
+ altMux |= CFG_REGS_TCO_0_TCO_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_0_KEYOUT_0;
+ if ((halCfg->keyOutMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(3);
+ }
+ }
+
+ if (halCfg->usedTco & 0x2)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x2) == 0, "Keyout 1 uses TCO1");
+ altMux |= CFG_REGS_TCO_1_TCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_1_KEYOUT_1;
+ if ((halCfg->keyOutMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(4);
+ }
+ }
+
+ if (halCfg->usedTco & 0x4)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x4) == 0, "Keyout 2 uses TCO2");
+ altMux |= CFG_REGS_TCO_2_TCO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_2_KEYOUT_2;
+ if ((halCfg->keyOutMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(5);
+ }
+ }
+
+ // PWM
+ if (halCfg->pwmCfg.pwtUsed)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x20) == 0, "Keyin 5 uses PWT");
+ altMux |= CFG_REGS_GPO_0_PWT;
+ }
+ else if (halCfg->keyInMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_0_KEYIN_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_0_GPO_0;
+ availableGpo_A |= HAL_GPO_BIT(0);
+ }
+
+ if (halCfg->pwmCfg.lpgUsed)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x20) == 0, "Keyout 5 uses LPG");
+ altMux |= CFG_REGS_GPO_1_LPG;
+ }
+ else if (halCfg->keyOutMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_1_KEYOUT_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_1_GPO_1;
+ availableGpo_A |= HAL_GPO_BIT(1);
+ }
+
+ if (halCfg->pwmCfg.pwl1Used)
+ {
+ HAL_ASSERT(!halCfg->useClk32k, "Clk 32k uses PWL1");
+ altMux |= CFG_REGS_GPO_2_PWL_1;
+ }
+ else if (halCfg->useClk32k)
+ {
+ // Default to GPO low output
+ // 32K clock will be enabled per request
+ //altMux |= CFG_REGS_GPO_2_CLK_32K;
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ availableGpo_A |= HAL_GPO_BIT(2);
+ }
+
+ // Clock out and host clock
+ if (halCfg->clkOutUsed)
+ {
+ HAL_ASSERT(!halCfg->hostClkUsed, "HST_CLK uses CLK_OUT pin");
+ altMux |= CFG_REGS_CLK_OUT_CLK_OUT;
+ }
+ else if (halCfg->hostClkUsed)
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ }
+ else
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ availableGpo_A |= HAL_GPO_BIT(8);
+ }
+
+ // SPI
+ if (halCfg->spiCfg[0].cs0Used || halCfg->spiCfg[0].cs1Used ||
+ halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT(!(halCfg->modemSpiCfg[0].cs0Used ||
+ halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used), "Modem SPI1 is in use");
+ altMux |= CFG_REGS_AP_SPI1_AP_SPI1;
+ if (!halCfg->spiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->spiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x2) == 0, "Keyin 1 uses SPI1 CS2");
+ altMux |= CFG_REGS_SPI1_CS_2_SPI1_CS_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_SPI1_CS_2_KEYIN_1;
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ if (!halCfg->spiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->spiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else // AP SPI1 unused
+ {
+ altMux |= CFG_REGS_AP_SPI1_BB_SPI1;
+ if (halCfg->modemSpiCfg[0].cs0Used || halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used)
+ {
+ if (!halCfg->modemSpiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->modemSpiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (!halCfg->modemSpiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->modemSpiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ availableGpio_C |= HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ }
+ if (halCfg->spiCfg[1].cs0Used || halCfg->spiCfg[1].cs1Used)
+ {
+ if (!halCfg->spiCfg[1].cs0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(5);
+ }
+ if (halCfg->spiCfg[1].cs1Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x8) == 0, "Keyin 3 uses SPI2 CS1");
+ altMux |= CFG_REGS_KEYIN_3_SPI2_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYIN_3_KEYIN_3;
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+ if (!halCfg->spiCfg[1].di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(3);
+ }
+ if (!halCfg->spiCfg[1].di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(4);
+ }
+ }
+ else // AP SPI2 unused
+ {
+ availableGpio_A |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+
+ // Standalone keyin/out
+ if ((halCfg->keyInMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(0);
+ }
+
+ // SDMMC
+ if (!halCfg->sdmmcCfg.sdmmcUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->sdmmcCfg.sdmmc2Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20);
+ }
+ HAL_ASSERT(!(parallelNandUsed && halCfg->sdmmcCfg.sdmmc3Used),
+ "Parallel NAND uses SDMMC3 pins");
+
+ // SIM
+ if (!hal_BoardSimUsed(2))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27);
+ }
+
+ if (!hal_BoardSimUsed(3))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30);
+ }
+
+ UINT32 gpioMask;
+ // GPIO_C mask check
+ gpioMask = ~availableGpio_C & halCfg->usedGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO C are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_C &
+ (~halCfg->usedGpio_C & ~halCfg->noConnectGpio_C);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO C declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_A mask check
+ gpioMask = ~availableGpio_A & halCfg->usedGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO A are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_A &
+ (~halCfg->usedGpio_A & ~halCfg->noConnectGpio_A);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO A declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_B mask check
+ gpioMask = ~availableGpio_B & halCfg->usedGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO B are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_B &
+ (~halCfg->usedGpio_B & ~halCfg->noConnectGpio_B);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO B declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_D mask check
+ gpioMask = ~availableGpio_D & halCfg->usedGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO D are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_D &
+ (~halCfg->usedGpio_D & ~halCfg->noConnectGpio_D);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO D declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPO_A mask check
+ gpioMask = ~availableGpo_A & halCfg->usedGpo_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPO A are not available (0x%x)",
+ gpioMask);
+
+#endif // !FPGA
+
+ // Set IO drive
+ hwp_configRegs->IO_Drive1_Select = halCfg->ioDrive.select1;
+ hwp_configRegs->IO_Drive2_Select = halCfg->ioDrive.select2;
+
+ // Set the not connected ones as output and drive 0
+ // But keep boot mode GPIOs as input to avoid current leakage
+ noConnectMask_C = halCfg->noConnectGpio_C & ~bootModeGpio_C;
+ noConnectMask_A = halCfg->noConnectGpio_A & ~bootModeGpio_A;
+ noConnectMask_B = halCfg->noConnectGpio_B & ~bootModeGpio_B;
+ noConnectMask_D = halCfg->noConnectGpio_D & ~bootModeGpio_D;
+
+ hwp_gpio->gpio_clr = noConnectMask_C;
+ hwp_gpio->gpio_oen_set_out = noConnectMask_C;
+
+ hwp_apGpioA->gpio_clr = noConnectMask_A;
+ hwp_apGpioA->gpio_oen_set_out = noConnectMask_A;
+
+ hwp_apGpioB->gpio_clr = noConnectMask_B;
+ hwp_apGpioB->gpio_oen_set_out = noConnectMask_B;
+
+ hwp_apGpioD->gpio_clr = noConnectMask_D;
+ hwp_apGpioD->gpio_oen_set_out = noConnectMask_D;
+
+ // Init GPO_A values
+ if (halCfg->useClk32k)
+ {
+ // Init 32K clock pin to low (by setting up GPO)
+ hwp_apGpioA->gpo_clr = availableGpo_A
+ | HAL_GPO_BIT(2);
+ }
+ else
+ {
+ /* if GPO_1 used for usb id, it should be high */
+ #if defined(_TGT_AP_GPIO_USBID_CTRL)
+ hwp_apGpioA->gpo_clr = availableGpo_A & ~0x2;
+ #else
+ hwp_apGpioA->gpo_clr = availableGpo_A;
+ #endif
+ }
+
+ // Configure MUX after initializing all the GPO pins
+ // (GPIO pins are in input mode by default)
+
+ // Set GPIO mode
+ hwp_configRegs->BB_GPIO_Mode = availableGpio_C;
+ hwp_configRegs->AP_GPIO_A_Mode = availableGpio_A;
+ hwp_configRegs->AP_GPIO_B_Mode = availableGpio_B;
+ hwp_configRegs->AP_GPIO_D_Mode = availableGpio_D;
+ // Set Alt Mux configuration
+ hwp_configRegs->Alt_mux_select = altMux;
+
+ // --------------------------------------------------
+ // As of now, all connected GPIOs, which are as GPIO
+ // or not used at all but connected are configured as
+ // GPIOs in input mode, except for Gouda reset pins
+ // --------------------------------------------------
+
+}
+
+
+// =============================================================================
+// hal_BoardSetup
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+//PROTECTED VOID hal_BoardSetup(CONST HAL_CFG_CONFIG_T* halCfg)
+PUBLIC INT32 hal_BoardSetup(INT8 run_mode)
+{
+ g_bootBootMode = rda_hwcfg_get();
+ hal_BoardSetupGeneral(&hal_cfg);
+
+ if(g_halConfigError)
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
diff --git a/board/rda/rda8850/u-boot-spl.lds b/board/rda/rda8850/u-boot-spl.lds
new file mode 100644
index 0000000000..afe35fd2a8
--- /dev/null
+++ b/board/rda/rda8850/u-boot-spl.lds
@@ -0,0 +1,35 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00100100;
+ . = ALIGN(4);
+ .text :
+ {
+ __start = .;
+ arch/arm/cpu/armv7/start.o (.text)
+ *(.text)
+ }
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+ . = ALIGN(4);
+ . = .;
+ . = ALIGN(4);
+ __image_copy_end = .;
+ _end = .;
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start = .;
+ *(.bss*)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ ASSERT((ABSOLUTE(__bss_end__) < 0x00110000), \
+ "too big data in spl, don't exceed intrenal ram");
+ }
+}
diff --git a/board/rda/rda8850e/Makefile b/board/rda/rda8850e/Makefile
new file mode 100644
index 0000000000..c4aa06a9a7
--- /dev/null
+++ b/board/rda/rda8850e/Makefile
@@ -0,0 +1,82 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+ifdef CONFIG_SPL_BUILD
+COBJS-y += clock_config.o clock.o ddr.o
+else
+COBJS-$(CONFIG_MACH_RDA8850E) += hal_config.o
+endif
+
+RDA_TARGET_DEF_FILE := $(ANDROID_BUILD_TOP)/$(RDA_TARGET_DEVICE_DIR)/target.def
+RDA_GET_MAKEFILE_VAR_FUNC = $(strip $(shell sed -n 's/^[ ]*$(1)[ ]*[?:]\?=\([^\#]\+\)\#*.*$$/\1/p' $(2)))
+
+NUMBER_OF_SIM := $(call RDA_GET_MAKEFILE_VAR_FUNC,NUMBER_OF_SIM,$(RDA_TARGET_DEF_FILE))
+ifeq ($(NUMBER_OF_SIM),)
+$(error Failed to get NUMBER_OF_SIM in $(RDA_TARGET_DEF_FILE))
+endif
+
+USER_SIM_ORDER := $(call RDA_GET_MAKEFILE_VAR_FUNC,USER_SIM_ORDER,$(RDA_TARGET_DEF_FILE))
+ifeq ($(USER_SIM_ORDER),)
+$(error Failed to get USER_SIM_ORDER in $(RDA_TARGET_DEF_FILE))
+endif
+
+NULL_STRING :=
+SPACE := ${NULL_STRING} # end of the line
+COMMA := ,
+TGT_SIM_ORDER := $(foreach SIM,$(USER_SIM_ORDER),$(SIM)$(COMMA))
+TGT_SIM_ORDER := $(subst ${SPACE},,${TGT_SIM_ORDER})
+
+CPPFLAGS_board/$(BOARDDIR)/hal_config.o += -I$(TOPDIR)/board/$(VENDOR)/common/include -DTGT_SIM_ORDER=$(TGT_SIM_ORDER) -DNUMBER_OF_SIM=$(NUMBER_OF_SIM)
+
+ifeq ($(strip $(TARGET_TABLET_MODE)),true)
+CPPFLAGS_board/$(BOARDDIR)/clock.o += -DTARGET_TABLET_MODE
+endif
+
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/rda8850e/clock.c b/board/rda/rda8850e/clock.c
new file mode 100644
index 0000000000..884b6c9259
--- /dev/null
+++ b/board/rda/rda8850e/clock.c
@@ -0,0 +1,2331 @@
+#include <common.h>
+#include <errno.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/io.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/ispi.h>
+#include <asm/arch/rda_sys.h>
+#include "clock_config.h"
+#include "debug.h"
+#include "ddr.h"
+#include "tgt_ap_clock_config.h"
+
+#if (PMU_VBUCK3_VAL < 0 || PMU_VBUCK3_VAL > 15)
+#error "Invalid PMU_VBUCK3_VAL"
+#endif
+
+#ifdef PMU_VBUCK5_VAL
+#if (PMU_VBUCK5_VAL < 0 || PMU_VBUCK5_VAL > 15)
+#error "Invalid PMU_VBUCK5_VAL"
+#endif
+#endif
+
+//#define DO_DDR_PLL_DEBUG
+
+#define RDA_PMU_VBUCK4_BIT_ACT_SHIFT (4)
+#define RDA_PMU_VBUCK4_BIT_ACT_MASK (0xf<<4)
+#define RDA_PMU_VBUCK4_BIT_ACT(n) (((n)&0xf)<<4)
+
+/* This macro is used to select GPU, VPU, CPU clock value manully */
+//#define TGT_AP_SELECT_CLK
+/* For staying so that watching register value */
+#ifdef TGT_AP_SELECT_CLK
+#define DO_STAY_FOR_WATCHING
+#endif
+#define PMU_REG_VIBRATOR_NUM 3
+#define PMU_REG_VIBRATOR_BIT 5
+
+const static UINT32 test_pattern[] =
+{
+
+ 0xa5a5a5a5, 0x5a5a5a5a,
+
+ 0x4f35b7da, 0x8e354c91,
+
+ 0x00000000, 0xFFFFFFFF,
+
+ 0x00000000, 0x00000000,
+
+ 0x0000FFFF, 0x00000000,
+};
+
+enum {
+ AP_CPU_CLK_IDX = 0,
+ AP_BUS_CLK_IDX,
+ AP_MEM_CLK_IDX,
+ AP_USB_CLK_IDX,
+};
+
+static int pll_enabled(int idx)
+{
+ if ((hwp_sysCtrlAp->Cfg_Pll_Ctrl[idx] &
+ (SYS_CTRL_AP_AP_PLL_ENABLE_MASK |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_MASK)) ==
+ (SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET))
+ return 1;
+ else
+ return 0;
+}
+
+static int usb_in_use = 0;
+
+static void check_usb_usage(void)
+{
+ unsigned int mask = SYS_CTRL_AP_BUS_SEL_FAST_SLOW |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_MASK |
+ SYS_CTRL_AP_PLL_LOCKED_USB_MASK;
+ unsigned int reg = SYS_CTRL_AP_BUS_SEL_FAST_FAST |
+ SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED |
+ SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED;
+
+ if ((hwp_sysCtrlAp->Sel_Clock & mask) == reg &&
+ pll_enabled(AP_BUS_CLK_IDX) &&
+ pll_enabled(AP_USB_CLK_IDX))
+ usb_in_use = 1;
+ else
+ usb_in_use = 0;
+}
+
+#ifndef CONFIG_RDA_FPGA
+struct pll_freq {
+ UINT32 freq_mhz;
+ UINT16 major;
+ UINT16 minor;
+ UINT16 with_div;
+ UINT16 div;
+};
+
+struct pmu_reg {
+ UINT32 reg_num;
+ UINT32 reg_val;
+};
+
+static const struct pmu_reg pmu_reg_table[] = {
+ {0x3f, 0x30fb},/*set nand protect battery voltage:
+ 0x30f3:2.4v 0x30f7:2.7v 0x30fb:3.0v 0x30ff:3.2v*/
+ //{0x01, 0x000b},/*enable nand protect, 0x000a in default*/
+ {0x03, 0x1853},/*shut down vbuck1, vasw, vcam, vlcd, vmic,bb1_led voltage*/
+ {0x04, 0x9670},/* vmc_vsel_act = 0 */
+ {0x0f, 0x1e90},/* enable bandgap chopper mode */
+ {0x13, 0x3b70},
+ {0x2d, 0x96ae},/*all dcdc settings are set to 0x96ae */
+ {0x2e, 0x96ae},/*all dcdc settings are set to 0x96ae */
+ {0x2f, 0x9244},
+ {0x53, 0x9505}, /*vbuck5 val = 8, vout_sel_buck5_lp = 0 */
+ {0x0d, 0x8280},/* shut down vbuck4 voltage.If backlight need, please open. */
+ {0x36, 0x6e45},
+ {0x2a, 0xaa45},
+ {0x4a, 0x96ae},/*all dcdc settings are set to 0x96ae */
+ {0x4b, 0x96ae},/*all dcdc settings are set to 0x96ae */
+ {0x54, 0x96ae},/*all dcdc settings are set to 0x96ae */
+};
+
+typedef enum {
+ PLL_REG_CPU_BASE = 0x00,
+ PLL_REG_BUS_BASE = 0x20,
+ PLL_REG_MEM_BASE = 0x60,
+ PLL_REG_USB_BASE = 0x80,
+} PLL_REG_BASE_INDEX_t;
+
+typedef enum {
+ PLL_REG_OFFSET_01H = 1,
+ PLL_REG_OFFSET_02H = 2,
+ PLL_REG_OFFSET_DIV = 3,
+ PLL_REG_OFFSET_04H = 4,
+ PLL_REG_OFFSET_MAJOR = 5,
+ PLL_REG_OFFSET_MINOR = 6,
+ PLL_REG_OFFSET_07H = 7,
+} PLL_REG_OFFSET_INDEX_t;
+
+static const struct pll_freq pll_freq_table[] = {
+ /* MHz Major Minor div */
+ {1600, 0x7B13, 0xB138, 0, 0x0000},
+ {1200, 0x5C4E, 0xC4EC, 0, 0x0000},
+ {1150, 0x5876, 0x2762, 0, 0x0000},
+ {1100, 0x549D, 0x89D8, 0, 0x0000},
+ {1050, 0x50C4, 0xEC4E, 0, 0x0000},
+ {1020, 0x4E76, 0x2762, 0, 0x0000},
+ {1010, 0x4DB1, 0x3B13, 0, 0x0000},
+ {1000, 0x4CEC, 0x4EC4, 0, 0x0000},
+ { 988, 0x4C00, 0x0000, 0, 0x0000},
+ { 962, 0x4A00, 0x0000, 0, 0x0000},
+ { 936, 0x4800, 0x0000, 0, 0x0000},
+ { 910, 0x4600, 0x0000, 0, 0x0000},
+ { 884, 0x4400, 0x0000, 0, 0x0000},
+ { 858, 0x4200, 0x0000, 0, 0x0000},
+ { 832, 0x4000, 0x0000, 0, 0x0000},
+ { 806, 0x3E00, 0x0000, 0, 0x0000},
+ { 800, 0x3D89, 0xD89C, 0, 0x0000},
+ { 780, 0x3C00, 0x0000, 0, 0x0000},
+ { 750, 0x39B1, 0x3B13, 0, 0x0000},
+ { 600, 0x2E27, 0x6274, 0, 0x0000},
+ { 520, 0x2800, 0x0000, 0, 0x0000},
+ { 519, 0x27EC, 0x4EC4, 1, 0x0007},
+ { 500, 0x2676, 0x2762, 1, 0x0007},
+ { 480, 0x24EC, 0x4EC4, 0, 0x0000},
+ { 455, 0x2300, 0x0000, 1, 0x0007},
+ { 416, 0x2000, 0x0000, 1, 0x0007},
+ { 400, 0x1EC4, 0xEC4C, 1, 0x0007},
+};
+static const struct pll_freq pll_ddr_freq_table[] = {
+ /* MHz Major Minor div */
+ { 600, 0x2E27, 0x6274, 1, 0xC497},
+ { 590, 0x2D62, 0x7624, 1, 0xC497},
+ { 573, 0x2C13, 0xB138, 1, 0xC497},
+ { 555, 0x2AB1, 0x3B10, 1, 0xC497},
+ { 538, 0x2962, 0x7624, 1, 0xC497},
+ { 519, 0x27EC, 0x4EC4, 1, 0xC497},
+ { 500, 0x2676, 0x2760, 1, 0xC397},
+ { 480, 0x24EC, 0x4EC4, 1, 0xC297},
+ { 455, 0x2300, 0x0000, 1, 0xC097},
+ { 429, 0x2100, 0x0000, 1, 0xC097},
+ { 416, 0x2000, 0x0000, 1, 0xC897},
+ { 403, 0x1F00, 0x0000, 1, 0xC897},
+ { 400, 0x1EC4, 0xEC4C, 1, 0xC897},
+ { 397, 0x1E89, 0xD89C, 1, 0xC897},
+ { 390, 0x1E00, 0x0000, 1, 0xC897},
+ { 383, 0x1D76, 0x2760, 1, 0xC897},
+ { 377, 0x1D00, 0x0000, 1, 0xD397},
+ { 370, 0x1C76, 0x2760, 1, 0xD297},
+ { 364, 0x1C00, 0x0000, 1, 0xD297},
+ { 358, 0x1B89, 0xD89C, 1, 0xD197},
+ { 355, 0x369D, 0x89D8, 0, 0xD097},
+ { 351, 0x3600, 0x0000, 0, 0xD097},
+ { 338, 0x3400, 0x0000, 0, 0xC897},
+ { 333, 0x333B, 0x13B0, 0, 0xC897},
+ { 328, 0x3276, 0x2760, 0, 0xC897},
+ { 325, 0x3200, 0x0000, 0, 0xC897},
+ { 321, 0x3162, 0x7624, 0, 0xC897},
+ { 316, 0x309D, 0x89D8, 0, 0xC897},
+ { 312, 0x3000, 0x0000, 0, 0xD897},
+ { 290, 0x2C9D, 0x89D8, 0, 0xE097},
+ { 260, 0x2800, 0x0000, 0, 0xF097},
+ { 200, 0x1EC4, 0xEC4C, 1, 0xB996},
+ { 156, 0x3000, 0x0000, 0, 0x0006},
+ { 100, 0x1EC4, 0xEC4C, 1, 0x0005},
+ { 50, 0x1EC4, 0xEC4C, 1, 0x0004},
+};
+
+static const struct clock_config *g_clock_config;
+
+#ifdef DO_DDR_PLL_DEBUG
+static struct clock_config clock_debug_config;
+static UINT32 ddrfreq = 400, ddr32bit = 0;
+#endif
+
+static void sys_shutdown_pll(void)
+{
+ int i;
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ if (usb_in_use) {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ } else {
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_SLOW
+ | SYS_CTRL_AP_BUS_SEL_FAST_SLOW
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+ }
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_POWER_DOWN |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_RESET;
+ }
+}
+
+static void sys_setup_pll(void)
+{
+ int i;
+ UINT32 mask;
+ UINT32 locked;
+ int cnt = 10; //10us, according to IC, the pll must be locked
+
+ hwp_sysCtrlAp->REG_DBG = AP_CTRL_PROTECT_UNLOCK;
+
+ for (i = 0; i < 3; i++) {
+ /* In download mode, rom code has been set ap bus*/
+ if (usb_in_use) {
+ if (i == AP_BUS_CLK_IDX) // ap bus
+ continue;
+ }
+
+ if (AP_MEM_CLK_IDX == i)
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(1)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ else
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)|
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+ }
+
+ mask = SYS_CTRL_AP_PLL_LOCKED_CPU_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_MASK
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_MASK
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_MASK
+ ;
+ locked = SYS_CTRL_AP_PLL_LOCKED_CPU_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_BUS_LOCKED
+ | SYS_CTRL_AP_PLL_LOCKED_MEM_LOCKED
+ //| SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED
+ ;
+
+ while (((hwp_sysCtrlAp->Sel_Clock & mask) != locked) && cnt) {
+ udelay(1);
+ cnt--;
+ }
+ if (cnt == 0) {
+ printf("WARNING, cannot lock cpu/bus/mem pll 0x%08x ",
+ hwp_sysCtrlAp->Sel_Clock);
+ printf("but we run anyway ...\n");
+ }
+
+ for (i = 0; i < 3; i++) {
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[i] |=
+ SYS_CTRL_AP_AP_PLL_CLK_FAST_ENABLE_ENABLE;
+ }
+
+ hwp_sysCtrlAp->Sel_Clock = SYS_CTRL_AP_SLOW_SEL_RF_RF
+ | SYS_CTRL_AP_CPU_SEL_FAST_FAST
+ | SYS_CTRL_AP_BUS_SEL_FAST_FAST
+ | SYS_CTRL_AP_TIMER_SEL_FAST_FAST;
+}
+
+static void sys_setup_clk(void)
+{
+ // Disable some power-consuming clocks
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_APO_Enable = SYS_CTRL_AP_ENABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Enable = SYS_CTRL_AP_ENABLE_MEM_VPU;
+#else
+ hwp_sysCtrlAp->Clk_APO_Disable = SYS_CTRL_AP_DISABLE_APOC_VPU;
+ //hwp_sysCtrlAp->Clk_MEM_Disable = SYS_CTRL_AP_DISABLE_MEM_VPU;
+#endif
+
+ // Init clock gating mode
+ hwp_sysCtrlAp->Clk_CPU_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL | SYS_CTRL_AP_MODE_APB0_CONF_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_AXI_Mode = SYS_CTRL_AP_MODE_AXI_DMA_MANUAL;
+#endif
+ hwp_sysCtrlAp->Clk_AXIDIV2_Mode = 0;
+ hwp_sysCtrlAp->Clk_GCG_Mode = SYS_CTRL_AP_MODE_GCG_GOUDA_MANUAL
+ | SYS_CTRL_AP_MODE_GCG_CAMERA_MANUAL;
+ hwp_sysCtrlAp->Clk_AHB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB1_Mode = 0;
+ hwp_sysCtrlAp->Clk_APB2_Mode = 0;
+#ifdef CONFIG_VPU_TEST
+ hwp_sysCtrlAp->Clk_MEM_Mode = SYS_CTRL_AP_MODE_CLK_MEM_MANUAL;
+#else
+ hwp_sysCtrlAp->Clk_MEM_Mode = 0;
+#endif
+ //hwp_sysCtrlAp->Clk_APO_Mode = SYS_CTRL_AP_MODE_APOC_VPU_MANUAL;
+
+ // Init module frequency
+ hwp_sysCtrlAp->Cfg_Clk_AP_CPU = g_clock_config->CLK_CPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_AXI = g_clock_config->CLK_AXI;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GCG = g_clock_config->CLK_GCG;
+
+ if (!usb_in_use) {
+ hwp_sysCtrlAp->Cfg_Clk_AP_AHB1 = g_clock_config->CLK_AHB1;
+ }
+
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB1 = g_clock_config->CLK_APB1;
+ hwp_sysCtrlAp->Cfg_Clk_AP_APB2 = g_clock_config->CLK_APB2;
+ hwp_sysCtrlAp->Cfg_Clk_AP_MEM = g_clock_config->CLK_MEM;
+ hwp_sysCtrlAp->Cfg_Clk_AP_GPU = g_clock_config->CLK_GPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VPU = g_clock_config->CLK_VPU;
+ hwp_sysCtrlAp->Cfg_Clk_AP_VOC = g_clock_config->CLK_VOC;
+ hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH = g_clock_config->CLK_SFLSH;
+}
+
+static void print_sys_reg(char *name, UINT32 value)
+{
+ printf("clk %s = %lx\n", name, value);
+}
+
+static void sys_dump_clk(void)
+{
+ print_sys_reg("CPU", hwp_sysCtrlAp->Cfg_Clk_AP_CPU);
+ print_sys_reg("AXI", hwp_sysCtrlAp->Cfg_Clk_AP_AXI);
+ print_sys_reg("GCG", hwp_sysCtrlAp->Cfg_Clk_AP_GCG);
+ print_sys_reg("AHB1", hwp_sysCtrlAp->Cfg_Clk_AP_AHB1);
+ print_sys_reg("APB1", hwp_sysCtrlAp->Cfg_Clk_AP_APB1);
+ print_sys_reg("APB2", hwp_sysCtrlAp->Cfg_Clk_AP_APB2);
+ print_sys_reg("MEM", hwp_sysCtrlAp->Cfg_Clk_AP_MEM);
+ print_sys_reg("GPU", hwp_sysCtrlAp->Cfg_Clk_AP_GPU);
+ print_sys_reg("VPU", hwp_sysCtrlAp->Cfg_Clk_AP_VPU);
+ print_sys_reg("VOC", hwp_sysCtrlAp->Cfg_Clk_AP_VOC);
+ print_sys_reg("SFLSH", hwp_sysCtrlAp->Cfg_Clk_AP_SFLSH);
+}
+
+static int pll_freq_set(UINT32 reg_base, UINT32 freq_mhz)
+{
+ int i;
+ const struct pll_freq *freq;
+ unsigned int major, minor;
+ unsigned short value_02h;
+
+ /* find pll_freq */
+ for (i = 0; i < ARRAY_SIZE(pll_freq_table); i++) {
+ if (pll_freq_table[i].freq_mhz == freq_mhz)
+ break;
+ }
+ if (i >= ARRAY_SIZE(pll_freq_table)) {
+ printf("pll_freq_set, fail to find freq\n");
+ return -1;
+ }
+
+ freq = &pll_freq_table[i];
+ if (freq->with_div && (reg_base == PLL_REG_MEM_BASE)) {
+ if (freq_mhz >= 200)
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV, freq->div & 0x7fff);
+ mdelay(5);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV,
+ freq->div);
+ // Calculate the real MEM PLL freq
+ freq_mhz *= (1 << (8 - (freq->div & 0x7)));
+ }
+ if (freq_mhz >= 800 || reg_base == PLL_REG_USB_BASE) {
+ value_02h = 0x030B;
+ // Div PLL freq by 2
+ minor = ((freq->major & 0xFFFF) << 14) |
+ ((freq->minor >> 2) & 0x3FFF);
+ minor >>= 1;
+ // Recalculate the divider
+ major = (minor >> 14) & 0xFFFF;
+ minor = (minor << 2) & 0xFFFF;
+ } else {
+ value_02h = 0x020B;
+ major = freq->major;
+ minor = freq->minor;
+ }
+
+ if(reg_base == PLL_REG_USB_BASE)
+ ispi_reg_write(reg_base + 0x9, 0x7100);
+ if (reg_base == PLL_REG_USB_BASE)
+ value_02h ^= (1 << 8);
+#ifndef _TGT_AP_CPU_PLL_FREQ_AUTO_REGULATE
+ if(reg_base == PLL_REG_CPU_BASE) {
+ /* Disable pll freq divided by 2 when VCore voltage is lower than a threshold value. */
+ if(rda_metal_id_get() > 1)
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV, 0x72A2);
+ }
+#endif
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_02H, value_02h);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MAJOR, major);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MINOR, minor);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0012);
+ mdelay(1);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0013);
+ return 0;
+}
+
+static int pll_ddr_freq_set(UINT32 reg_base, UINT32 freq_mhz)
+{
+ int i;
+ const struct pll_freq *freq;
+ unsigned int major, minor;
+ unsigned short value_02h;
+
+ /* find pll_freq */
+ for (i = 0; i < ARRAY_SIZE(pll_ddr_freq_table); i++) {
+ if (pll_ddr_freq_table[i].freq_mhz == freq_mhz)
+ break;
+ }
+ if (i >= ARRAY_SIZE(pll_ddr_freq_table)) {
+ printf("pll_freq_set, fail to find freq\n");
+ return -1;
+ }
+
+ freq = &pll_ddr_freq_table[i];
+ if (freq->with_div)
+ value_02h = 0x030B;
+ else
+ value_02h = 0x020B;
+ major = freq->major;
+ minor = freq->minor;
+
+ printf("major = %x, minor = %x --\n", major, minor);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_02H, value_02h);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MAJOR, major);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_MINOR, minor);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0012);
+ mdelay(1);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_07H, 0x0013);
+ mdelay(1);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV, freq->div & 0x7fff);
+ mdelay(1);
+ ispi_reg_write(reg_base + PLL_REG_OFFSET_DIV, freq->div);
+ return 0;
+}
+
+void modem_RfspiInit_624M(void);
+void modem_8850eeco2_RfspiInit_624M(void);
+
+static void pll_setup_freq(void)
+{
+ u16 metal_id = rda_metal_id_get();
+
+ pll_freq_set(PLL_REG_CPU_BASE, g_clock_config->PLL_FREQ_CPU);
+ // Always configure BUS PLL, even when it is being used
+ pll_freq_set(PLL_REG_BUS_BASE, g_clock_config->PLL_FREQ_BUS);
+ pll_ddr_freq_set(PLL_REG_MEM_BASE, g_clock_config->PLL_FREQ_MEM);
+ pll_freq_set(PLL_REG_USB_BASE, g_clock_config->PLL_FREQ_USB);
+
+ if (metal_id < 2)
+ modem_RfspiInit_624M();
+ else
+ modem_8850eeco2_RfspiInit_624M();
+}
+
+static void print_pll_freq(char *name, UINT32 value)
+{
+ printf("pll freq %s = %d\n", name, (int)value);
+}
+
+static void sys_dump_pll_freq(void)
+{
+ print_pll_freq("CPU", g_clock_config->PLL_FREQ_CPU);
+ print_pll_freq("BUS", g_clock_config->PLL_FREQ_BUS);
+ print_pll_freq("MEM", g_clock_config->PLL_FREQ_MEM);
+ //print_pll_freq("USB", g_clock_config->PLL_FREQ_USB);
+}
+
+static void pmu_setup_init(void)
+{
+ int i;
+ u16 metal_id = rda_metal_id_get();
+ u32 reg_val = 0;
+
+ rda_nand_iodrive_set();
+
+ ispi_open(1);
+ for (i = 0; i < ARRAY_SIZE(pmu_reg_table); i++){
+ /*Fix is used for vibrator shutdown for eco2 and later chip.
+ If 8850e eco1 is not used, then we should change reg3 value
+ in pmu_reg_table and remove the redundant code*/
+ reg_val = pmu_reg_table[i].reg_val;
+ if ((metal_id >= 2) && (pmu_reg_table[i].reg_num == PMU_REG_VIBRATOR_NUM))
+ reg_val &= ~(1 << PMU_REG_VIBRATOR_NUM);
+ if (pmu_reg_table[i].reg_num == 0x53)
+ reg_val = (reg_val & ~(0xf << 5)) | (PMU_VBUCK5_VAL << 5);
+ ispi_reg_write(pmu_reg_table[i].reg_num, reg_val);
+ }
+ ispi_open(0);
+
+#ifdef CONFIG_RDA_PDL
+ enable_charger(0);
+#endif
+}
+
+/*
+ * we initialize usb clock, but this won't cause the usb clock jitter,
+ * because wo don't setup the usb pll
+ */
+static void usb_clock_pre_init(void)
+{
+#if 0
+ u16 val = ispi_reg_read(0x83);
+ printf("%s: reg 0x83 = %#x\n", __func__, val);
+ val = ispi_reg_read(0x89);
+ printf("%s: reg 0x89 = %#x\n", __func__, val);
+ val = ispi_reg_read(0x8d);
+ printf("%s: reg 0x8d = %#x\n", __func__, val);
+#endif
+ ispi_reg_write(0x83, 0x72ff); /* default 0x72e3, update bit 1~4, b0001 -> b1111 */
+ ispi_reg_write(0x89, 0x7180); /* default 0x7100, update bit 7, b0 -> b1 */
+ ispi_reg_write(0x8d, 0x0302); /* default 0x0304, update bit 0~2, b100 -> b010 */
+}
+
+static void pll_setup_init(void)
+{
+ if (g_clock_config->DDR_CHAN_1_VALID) {
+ ispi_reg_write(0x101, g_clock_config->DDR_TIMING_101H);
+ ispi_reg_write(0x102, g_clock_config->DDR_TIMING_102H);
+ ispi_reg_write(0x103, g_clock_config->DDR_TIMING_103H);
+ ispi_reg_write(0x104, g_clock_config->DDR_TIMING_104H);
+ ispi_reg_write(0x105, g_clock_config->DDR_TIMING_105H);
+ ispi_reg_write(0x106, g_clock_config->DDR_TIMING_106H);
+ ispi_reg_write(0x107, g_clock_config->DDR_TIMING_107H);
+ ispi_reg_write(0x108, g_clock_config->DDR_TIMING_108H);
+ ispi_reg_write(0x109, g_clock_config->DDR_TIMING_109H);
+ ispi_reg_write(0x10A, g_clock_config->DDR_TIMING_10AH);
+ ispi_reg_write(0x10B, g_clock_config->DDR_TIMING_10BH);
+ ispi_reg_write(0x10C, g_clock_config->DDR_TIMING_10CH);
+ ispi_reg_write(0x10D, g_clock_config->DDR_TIMING_10DH);
+ ispi_reg_write(0x10E, g_clock_config->DDR_TIMING_10EH);
+ ispi_reg_write(0x10F, g_clock_config->DDR_TIMING_10FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID) {
+ ispi_reg_write(0x121, g_clock_config->DDR_TIMING_121H);
+ ispi_reg_write(0x122, g_clock_config->DDR_TIMING_122H);
+ ispi_reg_write(0x123, g_clock_config->DDR_TIMING_123H);
+ ispi_reg_write(0x124, g_clock_config->DDR_TIMING_124H);
+ ispi_reg_write(0x125, g_clock_config->DDR_TIMING_125H);
+ ispi_reg_write(0x126, g_clock_config->DDR_TIMING_126H);
+ ispi_reg_write(0x127, g_clock_config->DDR_TIMING_127H);
+ ispi_reg_write(0x128, g_clock_config->DDR_TIMING_128H);
+ ispi_reg_write(0x129, g_clock_config->DDR_TIMING_129H);
+ ispi_reg_write(0x12A, g_clock_config->DDR_TIMING_12AH);
+ ispi_reg_write(0x12B, g_clock_config->DDR_TIMING_12BH);
+ ispi_reg_write(0x12C, g_clock_config->DDR_TIMING_12CH);
+ ispi_reg_write(0x12D, g_clock_config->DDR_TIMING_12DH);
+ ispi_reg_write(0x12E, g_clock_config->DDR_TIMING_12EH);
+ ispi_reg_write(0x12F, g_clock_config->DDR_TIMING_12FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID) {
+ ispi_reg_write(0x141, g_clock_config->DDR_TIMING_141H);
+ ispi_reg_write(0x142, g_clock_config->DDR_TIMING_142H);
+ ispi_reg_write(0x143, g_clock_config->DDR_TIMING_143H);
+ ispi_reg_write(0x144, g_clock_config->DDR_TIMING_144H);
+ ispi_reg_write(0x145, g_clock_config->DDR_TIMING_145H);
+ ispi_reg_write(0x146, g_clock_config->DDR_TIMING_146H);
+ ispi_reg_write(0x147, g_clock_config->DDR_TIMING_147H);
+ ispi_reg_write(0x148, g_clock_config->DDR_TIMING_148H);
+ ispi_reg_write(0x149, g_clock_config->DDR_TIMING_149H);
+ ispi_reg_write(0x14A, g_clock_config->DDR_TIMING_14AH);
+ ispi_reg_write(0x14B, g_clock_config->DDR_TIMING_14BH);
+ ispi_reg_write(0x14C, g_clock_config->DDR_TIMING_14CH);
+ ispi_reg_write(0x14D, g_clock_config->DDR_TIMING_14DH);
+ ispi_reg_write(0x14E, g_clock_config->DDR_TIMING_14EH);
+ ispi_reg_write(0x14F, g_clock_config->DDR_TIMING_14FH);
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID) {
+ ispi_reg_write(0x161, g_clock_config->DDR_TIMING_161H);
+ ispi_reg_write(0x162, g_clock_config->DDR_TIMING_162H);
+ ispi_reg_write(0x163, g_clock_config->DDR_TIMING_163H);
+ ispi_reg_write(0x164, g_clock_config->DDR_TIMING_164H);
+ ispi_reg_write(0x165, g_clock_config->DDR_TIMING_165H);
+ ispi_reg_write(0x166, g_clock_config->DDR_TIMING_166H);
+ ispi_reg_write(0x167, g_clock_config->DDR_TIMING_167H);
+ ispi_reg_write(0x168, g_clock_config->DDR_TIMING_168H);
+ ispi_reg_write(0x169, g_clock_config->DDR_TIMING_169H);
+ ispi_reg_write(0x16A, g_clock_config->DDR_TIMING_16AH);
+ ispi_reg_write(0x16B, g_clock_config->DDR_TIMING_16BH);
+ ispi_reg_write(0x16C, g_clock_config->DDR_TIMING_16CH);
+ ispi_reg_write(0x16D, g_clock_config->DDR_TIMING_16DH);
+ ispi_reg_write(0x16E, g_clock_config->DDR_TIMING_16EH);
+ ispi_reg_write(0x16F, g_clock_config->DDR_TIMING_16FH);
+ }
+
+ ispi_reg_write(0x160, g_clock_config->DDR_TIMING_160H);
+ ispi_reg_write(0x180, g_clock_config->DDR_TIMING_180H);
+ ispi_reg_write(0x181, g_clock_config->DDR_TIMING_181H);
+ ispi_reg_write(0x182, g_clock_config->DDR_TIMING_182H);
+ ispi_reg_write(0x183, g_clock_config->DDR_TIMING_183H);
+ ispi_reg_write(0x184, g_clock_config->DDR_TIMING_184H);
+ ispi_reg_write(0x185, g_clock_config->DDR_TIMING_185H);
+ ispi_reg_write(0x186, g_clock_config->DDR_TIMING_186H);
+ ispi_reg_write(0x187, g_clock_config->DDR_TIMING_187H);
+ ispi_reg_write(0x188, g_clock_config->DDR_TIMING_188H);
+ ispi_reg_write(0x189, g_clock_config->DDR_TIMING_189H);
+ ispi_reg_write(0x18A, g_clock_config->DDR_TIMING_18AH);
+ ispi_reg_write(0x18B, g_clock_config->DDR_TIMING_18BH);
+ ispi_reg_write(0x18C, g_clock_config->DDR_TIMING_18CH);
+ ispi_reg_write(0x18D, g_clock_config->DDR_TIMING_18DH);
+ ispi_reg_write(0x18E, g_clock_config->DDR_TIMING_18EH);
+ ispi_reg_write(0x18F, g_clock_config->DDR_TIMING_18FH);
+
+ ispi_reg_write(0x69, g_clock_config->DDR_TIMING_69H);
+ usb_clock_pre_init();
+
+ udelay(5000);
+}
+
+static void pll_setup_mem(void)
+{
+}
+
+static void pll_setup_mem_cal(void)
+{
+}
+
+static void print_pll_reg(UINT32 index, UINT32 value)
+{
+ printf("pll reg %lx = %lx\n", index, value);
+}
+
+static void pll_dump_reg(void)
+{
+ print_pll_reg(0x005, ispi_reg_read(0x005));
+ print_pll_reg(0x006, ispi_reg_read(0x006));
+ print_pll_reg(0x063, ispi_reg_read(0x063));
+ print_pll_reg(0x065, ispi_reg_read(0x065));
+ print_pll_reg(0x066, ispi_reg_read(0x066));
+
+ if (g_clock_config->DDR_CHAN_1_VALID)
+ {
+ print_pll_reg(0x100, ispi_reg_read(0x100));
+ print_pll_reg(0x101, ispi_reg_read(0x101));
+ print_pll_reg(0x102, ispi_reg_read(0x102));
+ print_pll_reg(0x103, ispi_reg_read(0x103));
+ print_pll_reg(0x104, ispi_reg_read(0x104));
+ print_pll_reg(0x105, ispi_reg_read(0x105));
+ print_pll_reg(0x106, ispi_reg_read(0x106));
+ print_pll_reg(0x107, ispi_reg_read(0x107));
+ print_pll_reg(0x108, ispi_reg_read(0x108));
+ print_pll_reg(0x109, ispi_reg_read(0x109));
+ print_pll_reg(0x10A, ispi_reg_read(0x10A));
+ print_pll_reg(0x10B, ispi_reg_read(0x10B));
+ print_pll_reg(0x10C, ispi_reg_read(0x10C));
+ print_pll_reg(0x10D, ispi_reg_read(0x10D));
+ print_pll_reg(0x10E, ispi_reg_read(0x10E));
+ print_pll_reg(0x10F, ispi_reg_read(0x10F));
+ }
+
+ if (g_clock_config->DDR_CHAN_2_VALID)
+ {
+ print_pll_reg(0x120, ispi_reg_read(0x120));
+ print_pll_reg(0x121, ispi_reg_read(0x121));
+ print_pll_reg(0x122, ispi_reg_read(0x122));
+ print_pll_reg(0x123, ispi_reg_read(0x123));
+ print_pll_reg(0x124, ispi_reg_read(0x124));
+ print_pll_reg(0x125, ispi_reg_read(0x125));
+ print_pll_reg(0x126, ispi_reg_read(0x126));
+ print_pll_reg(0x127, ispi_reg_read(0x127));
+ print_pll_reg(0x128, ispi_reg_read(0x128));
+ print_pll_reg(0x129, ispi_reg_read(0x129));
+ print_pll_reg(0x12A, ispi_reg_read(0x12A));
+ print_pll_reg(0x12B, ispi_reg_read(0x12B));
+ print_pll_reg(0x12C, ispi_reg_read(0x12C));
+ print_pll_reg(0x12D, ispi_reg_read(0x12D));
+ print_pll_reg(0x12E, ispi_reg_read(0x12E));
+ print_pll_reg(0x12F, ispi_reg_read(0x12F));
+ }
+
+ if (g_clock_config->DDR_CHAN_3_VALID)
+ {
+ print_pll_reg(0x140, ispi_reg_read(0x140));
+ print_pll_reg(0x141, ispi_reg_read(0x141));
+ print_pll_reg(0x142, ispi_reg_read(0x142));
+ print_pll_reg(0x143, ispi_reg_read(0x143));
+ print_pll_reg(0x144, ispi_reg_read(0x144));
+ print_pll_reg(0x145, ispi_reg_read(0x145));
+ print_pll_reg(0x146, ispi_reg_read(0x146));
+ print_pll_reg(0x147, ispi_reg_read(0x147));
+ print_pll_reg(0x148, ispi_reg_read(0x148));
+ print_pll_reg(0x149, ispi_reg_read(0x149));
+ print_pll_reg(0x14A, ispi_reg_read(0x14A));
+ print_pll_reg(0x14B, ispi_reg_read(0x14B));
+ print_pll_reg(0x14C, ispi_reg_read(0x14C));
+ print_pll_reg(0x14D, ispi_reg_read(0x14D));
+ print_pll_reg(0x14E, ispi_reg_read(0x14E));
+ print_pll_reg(0x14F, ispi_reg_read(0x14F));
+ }
+
+ if (g_clock_config->DDR_CHAN_4_VALID)
+ {
+ print_pll_reg(0x161, ispi_reg_read(0x161));
+ print_pll_reg(0x162, ispi_reg_read(0x162));
+ print_pll_reg(0x163, ispi_reg_read(0x163));
+ print_pll_reg(0x164, ispi_reg_read(0x164));
+ print_pll_reg(0x165, ispi_reg_read(0x165));
+ print_pll_reg(0x166, ispi_reg_read(0x166));
+ print_pll_reg(0x167, ispi_reg_read(0x167));
+ print_pll_reg(0x168, ispi_reg_read(0x168));
+ print_pll_reg(0x169, ispi_reg_read(0x169));
+ print_pll_reg(0x16A, ispi_reg_read(0x16A));
+ print_pll_reg(0x16B, ispi_reg_read(0x16B));
+ print_pll_reg(0x16C, ispi_reg_read(0x16C));
+ print_pll_reg(0x16D, ispi_reg_read(0x16D));
+ print_pll_reg(0x16E, ispi_reg_read(0x16E));
+ print_pll_reg(0x16F, ispi_reg_read(0x16F));
+ }
+
+ print_pll_reg(0x160, ispi_reg_read(0x160));
+ print_pll_reg(0x180, ispi_reg_read(0x180));
+ print_pll_reg(0x181, ispi_reg_read(0x181));
+ print_pll_reg(0x182, ispi_reg_read(0x182));
+ print_pll_reg(0x183, ispi_reg_read(0x183));
+ print_pll_reg(0x184, ispi_reg_read(0x184));
+ print_pll_reg(0x185, ispi_reg_read(0x185));
+ print_pll_reg(0x186, ispi_reg_read(0x186));
+ print_pll_reg(0x187, ispi_reg_read(0x187));
+ print_pll_reg(0x188, ispi_reg_read(0x188));
+ print_pll_reg(0x189, ispi_reg_read(0x189));
+ print_pll_reg(0x18A, ispi_reg_read(0x18A));
+ print_pll_reg(0x18B, ispi_reg_read(0x18B));
+ print_pll_reg(0x18C, ispi_reg_read(0x18C));
+ print_pll_reg(0x18D, ispi_reg_read(0x18D));
+ print_pll_reg(0x18E, ispi_reg_read(0x18E));
+ print_pll_reg(0x18F, ispi_reg_read(0x18F));
+}
+
+static int clock_save_config(void)
+{
+ /* save config to nand */
+ return 1;
+}
+
+#ifdef DO_DDR_PLL_DEBUG
+
+static int ddr_get_freq(UINT8 chioce)
+{
+ switch(chioce)
+ {
+ case 1:
+ return 200;
+ case 2:
+ return 290;
+ case 3:
+ return 312;
+ case 4:
+ return 316;
+ case 5:
+ return 321;
+ case 6:
+ return 325;
+ case 7:
+ return 328;
+ case 8:
+ return 333;
+ case 9:
+ return 338;
+ case 10:
+ return 351;
+ case 11:
+ return 355;
+ case 12:
+ return 358;
+ case 13:
+ return 364;
+ case 14:
+ return 370;
+ case 15:
+ return 377;
+ case 16:
+ return 383;
+ case 17:
+ return 390;
+ case 18:
+ return 397;
+ case 19:
+ return 400;
+ case 20:
+ return 403;
+ case 21:
+ return 416;
+ case 22:
+ return 429;
+ case 23:
+ return 455;
+ case 24:
+ return 480;
+ case 25:
+ return 100;
+ case 26:
+ return 500;
+ case 27:
+ return 519;
+ case 28:
+ return 538;
+ case 29:
+ return 555;
+ case 30:
+ return 573;
+ case 31:
+ return 590;
+ case 32:
+ return 600;
+
+ default:
+ return -1;
+ }
+}
+
+static void freq_choose(void)
+{
+ UINT8 i = 0, buf[3] = {0}, choice = 0;
+ INT32 freq_temp = 0;
+
+ printf("\nPlese choose the ddr Freq:");
+ printf("\n 1.200M 2.290M 3.312M 4.316M 5.321M ");
+ printf("\n 6.325M 7.328M 8.333M 9.338M 10.351M ");
+ printf("\n11.355M 12.358M 13.364M 14.370M 15.377M ");
+ printf("\n11.355M 12.358M 13.364M 14.370M 15.377M ");
+ printf("\n16.383M 17.390M 18.397M 19.400M 20.403M ");
+ printf("\n21.416M 22.429M 23.455M 24.480M 25.100M ");
+ printf("\n26.500M 27.519M 28.538M 29.555M 30.573M ");
+ printf("\n31.590M 32.600M ");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ if (i > 2)
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ serial_puts("\n");
+ break;
+ }
+
+ i++;
+ }
+
+ if (1 == i)
+ choice = buf[0] - 0x30;
+ else if (2 == i)
+ choice = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+
+ freq_temp = ddr_get_freq(choice);
+ if (-1 == freq_temp )
+ printf("\n Sorry, the fre you choose is wrong");
+ ddrfreq = freq_temp;
+}
+
+static void data_bits_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+
+ printf("\nPlese choose the ddr data bits:");
+ printf("\n1.16 2.32");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr32bit = 0;
+ else
+ ddr32bit = 1;
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+
+static void pmu_setup_calibration_voltage(UINT8 vcoreselect)
+{
+ UINT8 buf[3] = {0}, voltage = 0;
+ int i = 0;
+ UINT32 reg_value,temp, regid = 0;
+
+ ispi_open(1);
+ switch(vcoreselect) {
+ case 1:
+ regid = 0x53;
+ printf("\nPlese input vcore voltage(0 ~ 15):");
+ break;
+ case 2:
+ regid = 0x2a;
+ printf("\nPlese input DDR buck3 voltage(0 ~ 15):");
+ break;
+ case 3:
+ regid = 0x2a;
+ printf("\nPlese input DDR buck4 voltage(0 ~ 15):");
+ break;
+ default:
+ printf("\ninvalid vcoreselect,exit\n");
+ return;
+ }
+
+ while(1) {
+ if (i > 2) {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ }
+ buf[i] = serial_getc();
+ serial_putc(buf[i]);
+
+ if ( ('\r' == buf[i]) || ('\n' == buf[i])) {
+ printf("\n");
+ break;
+ }
+ i++;
+ }
+ if (1 == i)
+ voltage = buf[0] - 0x30;
+ else if (2 == i)
+ voltage = 10*(buf[0] - 0x30) + (buf[1] - 0x30);
+ else
+ return;
+ printf("voltage is: 0x%x\n",(unsigned int)voltage);
+
+ if (vcoreselect == 1){
+ reg_value = 0x9415;
+ reg_value &= ~(0xf << 5);
+ reg_value |= ((voltage & 0xf) << 5);
+ ispi_reg_write(regid, reg_value);//write vbuc5 act voltage bit5~bit8
+ } else if (vcoreselect == 2) {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 12;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 12);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);//write vbuck3 act voltage,bit12~bit15
+ mdelay(100);
+ } else {
+ temp = (UINT32)voltage;
+ temp = (temp & 0xf) << 4;
+ reg_value = ispi_reg_read(regid);
+ reg_value &= ~(0xf << 4);
+ reg_value |= temp ;
+ ispi_reg_write(regid, reg_value);//write vbuck4 act voltage,bit4~bit7
+ mdelay(100);
+ }
+ printf("write reg: 0x%x,val: 0x%x\n",(unsigned int)regid,(unsigned int)reg_value);
+}
+#if 0
+static void pmu_buck4_buck3_choose(void)
+{
+ UINT8 i = 0, buf[2] = {0};
+ UINT8 ddr_voltage_source = 0;
+
+ printf("\nPlese choose the ddr voltage:");
+ printf("\n1.DDR3L 2.DDR3");
+ printf("\nThe number is:");
+
+ while(1)
+ {
+ buf[i] =serial_getc();
+
+ if (i == 1)
+ {
+ if (('\r' == buf[i]) || ('\n' == buf[i]))
+ {
+ if (1 == (buf[0] - 0x30))
+ ddr_voltage_source =2;
+ else{
+ ddr_voltage_source = 3;
+ pmu_setup_calibration_voltage(2);
+ }
+ pmu_setup_calibration_voltage(ddr_voltage_source);
+ return;
+ }
+ else
+ {
+ printf("\n Sorry, you input is wrong. Please input again:");
+ i = 0;
+ continue;
+ }
+ }
+
+ serial_putc(buf[i]);
+
+ if ((buf[i] - 0x30) > 2 || 0 == (buf[i] - 0x30))
+ printf("\n Sorry, you input is wrong. Please input again:");
+ else
+ i++;
+ }
+}
+#endif
+
+void clock_load_ddr_cal_config(void)
+{
+ clock_debug_config.PLL_FREQ_MEM = ddrfreq;
+ if (ddrfreq < 200)
+ clock_debug_config.DDR_FLAGS |= DDR_FLAGS_DLLOFF;
+ else
+ clock_debug_config.DDR_FLAGS &= ~DDR_FLAGS_DLLOFF;
+
+ if (0 == ddr32bit)
+ {
+ clock_debug_config.DDR_CHAN_3_VALID = 0;
+ clock_debug_config.DDR_CHAN_4_VALID = 0;
+ }
+
+ clock_debug_config.DDR_PARA &= ~DDR_PARA_MEM_BITS_MASK;
+ if (0 == ddr32bit)
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(1);
+ else
+ clock_debug_config.DDR_PARA |= DDR_PARA_MEM_BITS(2);
+}
+
+static int serial_gets(UINT8 *pstr)
+{
+ UINT32 length;
+
+ length = 0;
+ while(1) {
+ pstr[length] = serial_getc();
+ if(pstr[length] == '\r') {
+ pstr[length] = 0x00;
+ break;
+ }
+ else if( pstr[length] == '\b' ) {
+ if(length>0) {
+ length --;
+ printf("\b");
+ }
+ }
+ else {
+ serial_putc(pstr[length]);
+ length ++;
+ }
+
+ if(length > 32)
+ return -1;
+ }
+ return length;
+}
+
+UINT32 asc2hex(UINT8 *pstr, UINT8 len)
+{
+ UINT8 i,ch,mylen;
+ UINT32 hexvalue;
+
+ for(mylen=0,i=0; i<8; i++)
+ {
+ if( pstr[i] == 0 )
+ break;
+ mylen ++;
+ }
+ if( len != 0 )
+ {
+ if(mylen>len)
+ mylen = len;
+ }
+ if(mylen>8)
+ mylen = 8;
+
+ hexvalue = 0;
+ for (i = 0; i < mylen; i++)
+ {
+ hexvalue <<= 4;
+ ch = *(pstr+i);
+ if((ch>='0') && (ch<='9'))
+ hexvalue |= ch - '0';
+ else if((ch>='A') && (ch<='F'))
+ hexvalue |= ch - ('A' - 10);
+ else if((ch>='a') && (ch<='f'))
+ hexvalue |= ch - ('a' - 10);
+ else
+ ;
+ }
+ return(hexvalue);
+}
+
+static int process_cmd(char * pname, char * cmd, UINT32 reb_base)
+{
+ char cmd_element[3][16] = {{0}};
+ char * cmd_temp = cmd;
+ UINT8 i = 0, cmd_element_num = 0, former_space = 1;
+ UINT32 reg = 0, reg_value = 0;
+
+ if (NULL == cmd)
+ return -1;
+
+ while(('\0' != *cmd_temp) && ('\r' != *cmd_temp) && ('\n' != *cmd_temp))
+ {
+ if (' ' == * cmd_temp)
+ {
+ if (0 == former_space)
+ {
+ former_space = 1;
+ cmd_element[cmd_element_num][i] = '\0';
+ cmd_element_num++;
+ if (cmd_element_num > 2)
+ return -1;
+ i = 0;
+ }
+ }
+ else
+ {
+ former_space = 0;
+ cmd_element[cmd_element_num][i] = *cmd_temp;
+ i++;
+ if (i > 10)
+ return -1;
+ }
+
+ cmd_temp++;
+ }
+
+ cmd_element[cmd_element_num][i] = '\0';
+
+ if (!strcmp(cmd_element[0], "read"))
+ {
+ if (cmd_element_num == 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1]))
+ return -1;
+
+ reg = asc2hex((UINT8 *)&cmd_element[1][2], 8);
+ if (reb_base)
+ reg_value = *(UINT32 *)(reb_base + reg);
+ else
+ reg_value = ispi_reg_read(reg);
+
+ printf("value = 0x%x", (unsigned int)reg_value);
+ printf("\n%s#", pname);
+ }
+ else if (!strcmp(cmd_element[0], "write"))
+ {
+ if (cmd_element_num != 2)
+ return -1;
+ if (('0' != cmd_element[1][0]) || ('x' != cmd_element[1][1])
+ || ('0' != cmd_element[2][0]) || ('x' != cmd_element[2][1]))
+ return -1;
+
+ reg = asc2hex((UINT8 *)&cmd_element[1][2], 8);
+ reg_value = asc2hex((UINT8 *)&cmd_element[2][2], 8);
+ if (reb_base)
+ *(UINT32 *)(reb_base + reg) = reg_value;
+ else
+ ispi_reg_write(reg, reg_value);
+ }
+ else if (!strcmp(cmd_element[0], "finish"))
+ {
+ return 1;
+ }
+ else if (!strcmp(cmd_element[0], "dump"))
+ {
+ if (reb_base == 0)
+ pll_dump_reg();
+ printf("\n%s#", pname);
+ }
+ else
+ {
+ return -1;
+ }
+
+ return 0;
+}
+
+void cmd_input(char * pname, UINT32 reg_base)
+{
+ char cmd[48] = {0};
+ int len = 0;
+
+ ispi_open(0);
+ printf("\n%s#", pname);
+ while(1)
+ {
+ len = serial_gets((UINT8 *)cmd);
+ printf("\n%s#", pname);
+ if (len > 0)
+ {
+ int result = 0;
+
+ result = process_cmd(pname, cmd, reg_base);
+ if (-1 == result)
+ printf("command error! \n%s#", pname);
+ else if (1 == result)
+ break;
+ else
+ continue;
+ }
+ }
+ printf("Command is finished .\n");
+ return;
+}
+
+#endif /* DO_DDR_PLL_DEBUG */
+
+
+#ifdef TGT_AP_SELECT_CLK
+
+/* clock divider table size */
+#define CLOCK_DIV_TAB_SIZE 60
+const static UINT16 clock_div_tab[CLOCK_DIV_TAB_SIZE][2] = {
+ {10, 0x1F},{11, 0x1F},{12, 0x1F},{13, 0x1F},{14, 0x1F},
+ {15, 0x1F},{16, 0x1F},{17, 0x1F},{18, 0x1F},{19, 0x1F},
+ {20, 0x1E},{21, 0x1E},{22, 0x1E},{23, 0x1E},{24, 0x1E},
+ {25, 0x1D},{26, 0x1D},{27, 0x1D},{28, 0x1D},{29, 0x1D},
+ {30, 0x1C},{31, 0x1C},{32, 0x1C},{33, 0x1C},{34, 0x1C},
+ {35, 0x1B},{36, 0x1B},{37, 0x1B},{38, 0x1B},{39, 0x1B},
+ {40, 0x1A},{41, 0x1A},{42, 0x1A},{43, 0x1A},{44, 0x1A},
+ {45, 0x19},{46, 0x19},{47, 0x19},{48, 0x19},{49, 0x19},
+ {50, 0x18},{51, 0x18},{52, 0x18},{53, 0x18},{54, 0x18},
+ {55, 0x17},{56, 0x17},{57, 0x17},{58, 0x17},{59, 0x17},
+ {60, 0x16},{61, 0x16},{62, 0x16},{63, 0x16},{64, 0x16},
+ {65, 0x15},{66, 0x15},{67, 0x15},{68, 0x15},{69, 0x15},
+};
+
+static struct clock_config clock_select_config;
+
+static void do_clock_selection(void)
+{
+ char choice = 'n';
+
+ UINT32 set_cpu_clk = _TGT_AP_PLL_CPU_FREQ;
+ UINT16 set_vpu_clk = 133,vpu_clk_div = _TGT_AP_CLK_VPU; //divided 6
+ UINT16 set_gpu_clk = 200,gpu_clk_div = _TGT_AP_CLK_GPU; //divided 4
+ UINT16 set_axi_clk = 400,axi_clk_div = _TGT_AP_CLK_AXI; //divided 2
+ UINT32 real_vpu_clk = 0;
+ UINT32 real_gpu_clk = 0;
+ UINT32 real_axi_clk = 0;
+ UINT16 clk_div;
+ int i;
+
+ printf("If you want to configure clock manully?(y=yes,n=no)\n");
+ choice = serial_getc();
+ if((choice != 'y') && (choice != 'Y')) {
+ printf("Use default value as CPU,VPU,GPU AXI clock\n");
+ return;
+ }
+ printf("\nYou are trying to set CPU,VPU,GPU AXI clock.\n"
+ "Press <Enter> will use default value.\n\n");
+ /* CPU clock selection process */
+ choice = '1';
+ printf("Set CPU clock:\n"
+ "\t 1: 800 MHz\n"
+ "\t 2: 910 MHz\n"
+ "\t 3: 962 MHz\n");
+ choice = serial_getc();
+ switch(choice) {
+ case '1':
+ set_cpu_clk = 800;
+ break;
+ case '2':
+ set_cpu_clk = 910;
+ break;
+ case '3':
+ set_cpu_clk = 962;
+ break;
+ default:
+ printf("Use default value: %d\n",(int)set_cpu_clk);
+ break;
+ }
+ printf("CPU clock value is %d MHz\n",(int)set_cpu_clk);
+ /* GPU clock selection process */
+ choice = '1';
+ printf("Set GPU clock:\n"
+ "\t 1: 400 MHz\n"
+ "\t 2: 320 MHz\n"
+ "\t 3: 266 MHz\n");
+ choice = serial_getc();
+ switch(choice) {
+ case '1':
+ set_gpu_clk = 400;
+ break;
+ case '2':
+ set_gpu_clk = 320;
+ break;
+ case '3':
+ set_gpu_clk = 266;
+ break;
+ default:
+ printf("Use default value: %d\n",(int)set_gpu_clk);
+ break;
+ }
+ printf("GPU clock value is %d MHz\n",(int)set_gpu_clk);
+
+ /* VPU clock selection process */
+ choice = '1';
+ printf("Set VPU clock:\n"
+ "\t 1: 228 MHz\n"
+ "\t 2: 200 MHz\n");
+ choice = serial_getc();
+ switch(choice) {
+ case '1':
+ set_vpu_clk = 228;
+ break;
+ case '2':
+ set_vpu_clk = 200;
+ break;
+ default:
+ printf("Use default value: %d\n",(int)set_vpu_clk);
+ break;
+ }
+ printf("VPU clock value is %d MHz\n",(int)set_vpu_clk);
+ choice = '1';
+ printf("Set AXI clock:\n"
+ "\t 1: 400 MHz\n"
+ "\t 2: 320 MHz\n");
+ choice = serial_getc();
+ switch(choice) {
+ case '1':
+ set_axi_clk = 400;
+ break;
+ case '2':
+ set_axi_clk = 320;
+ break;
+ case '3':
+ set_axi_clk = 266;
+ break;
+ default:
+ printf("Use default value: %d\n",(int)set_axi_clk);
+ break;
+ }
+ printf("AXI clock value is %d MHz\n",(int)set_axi_clk);
+
+ /* Get GPU clock div value */
+ clk_div = (10 * set_cpu_clk) / set_gpu_clk;
+ for ( i = 0; i < CLOCK_DIV_TAB_SIZE; i++) {
+ if(clock_div_tab[i][0] == clk_div) {
+ break;
+ }
+ }
+ gpu_clk_div = clock_div_tab[i][1];
+ real_gpu_clk = (10 * set_cpu_clk) / clk_div;
+
+ /* Get VPU clock div value */
+ clk_div = (10 * set_cpu_clk) / set_vpu_clk;
+ for ( i = 0; i < CLOCK_DIV_TAB_SIZE; i++) {
+ if(clock_div_tab[i][0] == clk_div) {
+ break;
+ }
+ }
+ vpu_clk_div = clock_div_tab[i][1];
+ real_vpu_clk = (10 * set_cpu_clk) / clk_div;
+
+ /* Get AXI clock div value */
+ clk_div = (10 * set_cpu_clk) / set_axi_clk;
+ for ( i = 0; i < CLOCK_DIV_TAB_SIZE; i++) {
+ if(clock_div_tab[i][0] == clk_div) {
+ break;
+ }
+ }
+ axi_clk_div = clock_div_tab[i][1];
+ real_axi_clk = (10 * set_cpu_clk) / clk_div;
+
+ printf("\nAll clock value:\n");
+ printf("CPU clk: %d\n",(int)set_cpu_clk);
+ printf("GPU max clk: %d MHz, div val: 0x%x, real clk: %d MHz\n",(int)set_gpu_clk,(int)gpu_clk_div,(int)real_gpu_clk);
+ printf("VPU max clk: %d MHz, div val: 0x%x, real clk: %d MHz\n",(int)set_vpu_clk,(int)vpu_clk_div,(int)real_vpu_clk);
+ printf("AXI max clk: %d MHz, div val: 0x%x, real clk: %d MHz\n",(int)set_axi_clk,(int)axi_clk_div,(int)real_axi_clk);
+
+ printf("Write to register ? (y=yes,n=no)\n");
+ choice = 'y';
+ choice = serial_getc();
+ if((choice != 'y')&&(choice != 'Y')) {
+ printf("Clock selection canceled\n");
+ return;
+ }
+ /* Set CPU, GPU, VPU AXI clock value */
+ memcpy(&clock_select_config,g_clock_config,
+ sizeof(clock_select_config));
+ clock_select_config.PLL_FREQ_CPU = set_cpu_clk;
+ clock_select_config.CLK_GPU = gpu_clk_div;
+ clock_select_config.CLK_VPU = vpu_clk_div;
+ clock_select_config.CLK_AXI = axi_clk_div;
+ g_clock_config = &clock_select_config;
+ printf("Set Clock successful !!!\n");
+}
+
+#endif /* TGT_AP_SELECT_CLK */
+
+#ifdef DO_STAY_FOR_WATCHING
+
+void do_stay_for_watching_clock_reg(void)
+{
+ char ch;
+ printf("Press <Enter> to continue\n");
+ ch = serial_getc();
+ ch = ch;
+}
+
+#endif /* DO_STAY_FOR_WATCHING */
+
+
+#ifdef TGT_AP_DO_DDR_TEST
+
+/* DDR test case list */
+#define DDR_T_C_GET_INFO
+#define DDR_T_C_FUNCTION
+#define DDR_T_C_MEMORY_COPY
+#define DDR_T_C_BOUNDARY_SCAN
+#define DDR_T_C_PLL_SWITCH
+
+/* DDR test result storage base address */
+#define DDR_TEST_DATA_BASE 0x11C010C0
+#define DDR_T_MANU_ID_ADDR (DDR_TEST_DATA_BASE+0X00)
+#define DDR_T_CAPACITY_ADDR (DDR_TEST_DATA_BASE+0X04)
+#define DDR_T_BAND_WIDTH_ADDR (DDR_TEST_DATA_BASE+0X08)
+#define DDR_T_PLL_SWITCH_ADDR (DDR_TEST_DATA_BASE+0X0C)
+#define DDR_T_FUNCTION_ADDR (DDR_TEST_DATA_BASE+0X10)
+#define DDR_T_BOUNDARY_ADDR (DDR_TEST_DATA_BASE+0X14)
+#define DDR_T_MEM_COPY_ADDR (DDR_TEST_DATA_BASE+0X18)
+#define DDR_T_MANU_NAME_ADDR (DDR_TEST_DATA_BASE+0X1C)
+#define DDR_T_MANU_NAME_SIZE 8
+
+#define DDR_TEST_RESULT_OK 0XA55A6666
+#define DDR_TEST_RESULT_ERROR 0XDEADDEAD
+
+typedef unsigned int uint32;
+
+typedef struct ddr_manufacture {
+ UINT32 value;
+ const char* name;
+}DDR_MANUFACTURE;
+
+const static DDR_MANUFACTURE g_ddr_type[] = {
+ {0x0,"S4 SDRAM"},
+ {0x1,"S2 SDRAM"},
+ {0x2,"N NVM"},
+};
+
+const static DDR_MANUFACTURE g_ddr_manuacture[] ={
+ {0x3, "Elpida"},
+ {0x5, "Nanya"},
+ {0xff, "Micron"}
+};
+
+const static UINT16 g_ddr_capacity_value[] = {
+ 8,
+ 16,
+ 32,
+ 64,
+ 128,
+ 256,
+ 512,
+ 1024,
+ 2048,
+ 4096
+};
+
+const static UINT16 g_ddr_io_width[]={
+ 32,
+ 16,
+ 8
+};
+
+extern unsigned int g_ddr_manufacture_id;
+extern unsigned int g_ddr_capacity_id;
+extern unsigned int con_dram_mrdata(unsigned int val);
+
+static void write_ddr_test_result( unsigned int addr , unsigned int val);
+static void do_set_gpo_pin(int pin_id, int pin_val);
+
+int get_dram_info(void)
+{
+ int i = 0;
+ UINT8 ddr_cap_id = 0;
+ UINT8 ddr_band_id = 0;
+ UINT8 ddr_type_id = 0;
+ char *ptr_addr;
+ const char *ptr_str;
+
+ printf("Read dram info... ");
+ ddr_cap_id = (g_ddr_capacity_id & 0x3C)>>2; //bit 2 3 4 5
+ ddr_band_id = (g_ddr_capacity_id & 0xC0)>>6; // bit 6 7
+ if((ddr_band_id >=0x1) || (ddr_cap_id < 0x4)) {
+ g_ddr_manufacture_id = con_dram_mrdata(g_ddr_manufacture_id);
+ g_ddr_capacity_id = con_dram_mrdata(g_ddr_capacity_id);
+ }
+ for(i = 0; i < 3; i++) {
+ if((g_ddr_manufacture_id & 0xFF) == g_ddr_manuacture[i].value) {
+ break;
+ }
+ }
+ if(i > 2) {
+ printf("unknown manufacture id: 0x%x\n",g_ddr_manufacture_id);
+ return -1;
+ }
+
+ ddr_cap_id = (g_ddr_capacity_id & 0x3C)>>2; //bit 2 3 4 5
+ ddr_band_id = (g_ddr_capacity_id & 0xC0)>>6; // bit 6 7
+ ddr_type_id = (g_ddr_capacity_id & 0x03); //bit 0 1
+ if(ddr_type_id > 2) {
+ printf("unknown type id 0x%x\n",ddr_type_id);
+ return -1;
+ }
+ if(ddr_band_id > 2) {
+ printf("unknown band id 0x%x\n",ddr_band_id);
+ return -1;
+ }
+ if(ddr_cap_id > 9) {
+ printf("unknown capacity id 0x%x\n",ddr_cap_id);
+ return -1;
+ }
+ printf("%s, ",g_ddr_type[ddr_type_id].name);
+ printf("%s, ", g_ddr_manuacture[i].name);
+ printf("id: 0x%x, ", (int)g_ddr_manuacture[i].value);
+ printf("bandwidth: %d bit, ", g_ddr_io_width[ddr_band_id]);
+ printf("capacity: %d MB\n", g_ddr_capacity_value[ddr_cap_id]);
+
+ writel((int)(g_ddr_io_width[ddr_band_id]),DDR_T_BAND_WIDTH_ADDR);
+ writel((int)(g_ddr_capacity_value[ddr_cap_id]),DDR_T_CAPACITY_ADDR);
+ writel((int)(g_ddr_manuacture[i].value),DDR_T_MANU_ID_ADDR);
+
+ ptr_str = (g_ddr_manuacture[i].name);
+ ptr_addr = (char *)(DDR_T_MANU_NAME_ADDR);
+ for(i = 0;i < DDR_T_MANU_NAME_SIZE; i++)
+ *ptr_addr++ = '\0';
+ ptr_addr = (char *)(DDR_T_MANU_NAME_ADDR);
+ for(i = 0;i < DDR_T_MANU_NAME_SIZE; i++)
+ *ptr_addr++ = *ptr_str++;
+ return 0;
+}
+
+#define DMC_STAT_CONFIG 0
+#define DMC_STAT_READY 3
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define DRAM_RW_TEST_DEBUG 0
+#include "ddr_init.h"
+static u32 get_dram_paramter(unsigned int offset_addr)
+{
+ unsigned int reg = 0;
+ unsigned status;
+
+ writel(DMC_STAT_CONFIG, DMC_REG_BASE + MEMC_CMD);
+ do {
+ status = readl(DMC_REG_BASE + MEMC_STATUS);
+#if DRAM_RW_TEST_DEBUG
+ printf("dmc status is %d\n",(int)status);
+#endif
+ } while (status != DMC_STAT_CONFIG);
+
+ reg = readl(RDA_DMC400_BASE+offset_addr);
+#if DRAM_RW_TEST_DEBUG
+ printf("read dmc reg 0x%x = 0x%x\n",offset_addr, reg);
+#endif
+ writel(DMC_STAT_READY, DMC_REG_BASE + MEMC_CMD);
+ do {
+ status = readl(DMC_REG_BASE + MEMC_STATUS);
+#if DRAM_RW_TEST_DEBUG
+ printf("dmc status is %d\n",(int)status);
+#endif
+ } while (status != DMC_STAT_READY);
+
+ return reg;
+}
+static int parse_dram_address(u32 *row_bits, u32 *col_bits, u32 *bank_bits, u32 *channel_bits,u32 *chip_bits,u32 *addr_order)
+{
+ u32 reg_val = 0,t;
+
+ // Get ADDR_CTRL register value
+ reg_val = get_dram_paramter(ADDR_CTRL);
+
+ /* Get column bits number */
+ t = reg_val & 0x0F;
+ if(t < 5)
+ *col_bits = 8 + t;
+ else
+ return -1;
+
+ /* Get row bits number */
+ t = (reg_val & 0x0F00)>>8;
+ if((t >= 2)&&(t <= 5))
+ *row_bits = 11 + t;
+ else
+ return -1;
+
+ /* Get bank bits number */
+ t = (reg_val & 0xF0000)>>16;
+ if((t == 2)||(t == 3))
+ *bank_bits = t;
+ else
+ return -1;
+
+ /* Get chip bits number */
+ t = (reg_val & 0x03000000)>>24;//bit24, bit25
+ if((t == 0)||(t == 1))
+ *chip_bits = t;
+ else
+ return -1;
+
+ /* Get channel bits number */
+ t = (reg_val & 0x30000000)>>28;//bit28, bit29
+ if((t == 0)||(t == 1))
+ *channel_bits = t;
+ else
+ return -1;
+
+ /* Get decode control register value */
+ reg_val = get_dram_paramter(DECODE_CTRL);
+ *addr_order = reg_val & 0x03;
+ return 0;
+}
+/*
+ ****************************************************************************************
+ * @name: ddr_rw_data_test
+ * @description: DRAM reading and writing row,bank,column address test.
+ * @parameter
+ * dram_offset_addr: the DRAM's offset address
+ * reverse_data: 0, data will be reversed,such as 0xfe,0xfd,0xfc...
+ * 1, adta will not be reversed,such as 0x1,0x2,0x3...
+ * is_addr32: 0, 8 bit address reading or writing
+ * 1, 32 bit address reading or writing
+ * @return: 0(OK), -1(FAILED)
+ ****************************************************************************************
+*/
+int ddr_rw_data_test(unsigned int dram_offset_addr, unsigned int reverse_data, unsigned int is_addr32)
+{
+ unsigned int dat,rd_dat;
+ unsigned int temp_addr = 0,row_addr = 0,col_addr = 0,bank_addr = 0, end_addr = 0,dram_base_addr = 0x80000000;
+ unsigned int row_bits,col_bits,bank_bits,channel_bits,chip_bits,addr_order;
+ int i,is_err = 0,err_cnt = 0;
+ /* Parse DRAM address parameters */
+ i = parse_dram_address(&row_bits, &col_bits, &bank_bits, &channel_bits, &chip_bits, &addr_order);
+ if( i != 0) {
+ printf("Parse DRAM address parameter failed.\n");
+ return -1;
+ }
+ dram_base_addr += dram_offset_addr;
+ printf("\nDRAM RW test,offset addr 0x%x,",dram_offset_addr);
+ if(is_addr32)
+ printf("32 bit,");
+ else
+ printf("8 bit,");
+ if(reverse_data)
+ printf("reversed data\n");
+ else
+ printf("no reversed data\n");
+
+ /* Row address 8 bit or 32 bit data writing */
+ printf("\nStart row address RW test\n");
+ printf("Writing row data...\n");
+ row_addr = 0;
+ dat = 0;
+ i = 0;
+ end_addr = 0x100; //writing ending address
+ while(i < end_addr){
+ if(reverse_data)
+ dat = (unsigned int)~i;
+ else
+ dat = i;
+ row_addr = (unsigned int )i;
+ if(addr_order == 0x00)
+ temp_addr = (row_addr)<<(col_bits+bank_bits);
+ else if(addr_order == 0x02)
+ temp_addr = (row_addr)<<(col_bits+channel_bits);
+ else
+ temp_addr = (row_addr)<<(channel_bits + chip_bits + col_bits + bank_bits);
+
+ if(is_addr32){
+ //32bit data address
+ *(unsigned int *)(dram_base_addr + temp_addr) = (unsigned int )dat;
+ i += 4;
+ } else {
+ //8bit data address
+ dat = dat & 0xFF;
+ *(unsigned char *)(dram_base_addr + temp_addr) = (unsigned char)dat;
+ i += 1;
+ }
+#if DRAM_RW_TEST_DEBUG
+ printf("Row addr: 0x%x, data: 0x%x\n", (dram_base_addr + temp_addr), dat);
+#endif
+ }
+ /* Row address 8 bit or 32 bit data reading */
+ printf("Reading row data...\n");
+ row_addr = 0;
+ dat = 0;
+ i = 0;
+ is_err = 0;
+ err_cnt = 0;
+ while(i < end_addr){
+ if(reverse_data)
+ dat = (unsigned int)~i;
+ else
+ dat = i;
+ row_addr = i;
+ if(addr_order == 0x00)
+ temp_addr = (row_addr)<<(col_bits+bank_bits);
+ else if(addr_order == 0x02)
+ temp_addr = (row_addr)<<(col_bits+channel_bits);
+ else
+ temp_addr = (row_addr)<<(channel_bits + chip_bits + col_bits + bank_bits);
+
+ if(is_addr32) {
+ //32bit data address
+ rd_dat = *(unsigned int *)(dram_base_addr + temp_addr);
+ i += 4;
+ } else {
+ //8bit data address
+ dat = dat & 0xFF;
+ rd_dat = *(unsigned char *)(dram_base_addr + temp_addr);
+ i += 1;
+ }
+#if DRAM_RW_TEST_DEBUG
+ printf("Row addr: 0x%x, data: 0x%x\n", (dram_base_addr + temp_addr), rd_dat);
+#endif
+ if ( rd_dat != dat) {
+ is_err = 1;
+ err_cnt++;
+ }
+ }
+ if(!is_err) {
+ printf("Row address RW test passed !!!\n");
+ }else{
+ printf("Row address RW test failed ###\t, error count is 0x%d\n",err_cnt);
+ return -1;
+ }
+ /* Start to test column address reading ,writing */
+ printf("\nStart column address RW test\n");
+ printf("Writing column data...\n");
+ col_addr = 0;
+ dat = 0;
+ i = 0;
+ end_addr = 0x100;
+ while(i < end_addr) {
+ if(reverse_data)
+ dat = (unsigned int)~i;
+ else
+ dat = i;
+ col_addr = (unsigned int)i;
+ temp_addr = col_addr;
+ if(is_addr32){
+ *(unsigned int *)(dram_base_addr + temp_addr) = dat;
+ i += 4;
+ } else {
+ dat = dat & 0xFF;
+ *(unsigned char *)(dram_base_addr + temp_addr) = (unsigned char)dat;
+ i += 1;
+ }
+#if DRAM_RW_TEST_DEBUG
+ printf("Column addr: 0x%x, data: 0x%x\n", (dram_base_addr + temp_addr), dat);
+#endif
+ }
+ printf("Reading column data...\n");
+ col_addr = 0;
+ dat = 0;
+ i = 0;
+ err_cnt = 0;
+ is_err = 0;
+ while(i < end_addr) {
+ if(reverse_data)
+ dat = (unsigned int)~i;
+ else
+ dat = i;
+ col_addr = (unsigned int)i;
+ temp_addr = col_addr;
+ if(is_addr32){
+ rd_dat = *(unsigned int *)(dram_base_addr + temp_addr);
+ i += 4;
+ } else {
+ dat = dat & 0xFF;
+ rd_dat = *(unsigned char *)(dram_base_addr + temp_addr);
+ i += 1;
+ }
+#if DRAM_RW_TEST_DEBUG
+ printf("Column addr: 0x%x, data: 0x%x\n", (dram_base_addr + temp_addr), rd_dat);
+#endif
+ if ( rd_dat != dat) {
+ is_err = 1;
+ err_cnt++;
+ }
+ }
+ if(!is_err) {
+ printf("Column address RW test passed !!!\n");
+ }else{
+ printf("Column address RW test failed ###\t, error count is 0x%d\n",err_cnt);
+ return -1;
+ }
+ /* Start to test bank address reading and writing */
+ printf("\nStart bank address RW test\n");
+ printf("Writing bank data...\n");
+ bank_addr = 0;
+ dat = 0;
+ i = 0;
+ end_addr = 0x8;
+ while(i < end_addr) {
+ if(reverse_data)
+ dat = (unsigned int)~i;
+ else
+ dat = i;
+ bank_addr = (unsigned int)i;
+ if(addr_order == 0x02)
+ temp_addr = (bank_addr)<<(col_bits + channel_bits + row_bits);
+ else if(addr_order == 0x03)
+ temp_addr = (bank_addr)<<(col_bits+channel_bits);
+ else
+ temp_addr = (bank_addr)<<(col_bits);
+
+ if(is_addr32){
+ *(unsigned int *)(dram_base_addr + temp_addr) = dat;
+ i += 4;
+ } else {
+ dat = dat & 0xFF;
+ *(unsigned char *)(dram_base_addr + temp_addr) = (unsigned char)dat;
+ i += 1;
+ }
+#if DRAM_RW_TEST_DEBUG
+ printf("Bank addr: 0x%x, data: 0x%x\n", (dram_base_addr + temp_addr), dat);
+#endif
+ }
+ printf("Reading bank data...\n");
+ bank_addr = 0;
+ dat = 0;
+ i = 0;
+ err_cnt = 0;
+ is_err = 0;
+ while(i < end_addr) {
+ if(reverse_data)
+ dat = (unsigned int)~i;
+ else
+ dat = i;
+ bank_addr = (unsigned int)i;
+ if(addr_order == 0x02)
+ temp_addr = (bank_addr)<<(col_bits + channel_bits + row_bits);
+ else if(addr_order == 0x03)
+ temp_addr = (bank_addr)<<(col_bits+channel_bits);
+ else
+ temp_addr = (bank_addr)<<(col_bits);
+
+ if(is_addr32){
+ rd_dat = *(unsigned int *)(dram_base_addr + temp_addr);
+ i += 4;
+ } else {
+ dat = dat & 0xFF;
+ rd_dat = *(unsigned char *)(dram_base_addr + temp_addr);
+ i += 1;
+ }
+#if DRAM_RW_TEST_DEBUG
+ printf("Bank addr: 0x%x, data: 0x%x\n", (dram_base_addr + temp_addr), rd_dat);
+#endif
+ if ( rd_dat != dat) {
+ is_err = 1;
+ err_cnt++;
+ }
+ }
+ if(!is_err) {
+ printf("Bank address RW test passed !!!\n");
+ }else{
+ printf("Bank address RW test failed ###\t, error count is 0x%d\n",err_cnt);
+ return -1;
+ }
+ return 0;
+}
+
+int ddr_memory_copy_test(uint32 src_addr, uint32 des_addr, uint32 nwords)
+{
+ int ret = 0;
+ unsigned int dat = 0x00,t = 0;;
+ uint32 count;
+ volatile unsigned int *psrc, *pdes;
+
+ printf("ddr memory copy test: from 0x%x to 0x%x,0x%x words\n",
+ src_addr, des_addr, nwords);
+ /* write n bytes to src address */
+ psrc = (volatile unsigned int *)src_addr;
+ pdes = (volatile unsigned int *)des_addr;
+ count = nwords;
+ dat = 0;
+ while(count--) {
+ *psrc++ = dat++;
+ }
+ /* copy bytes from src addr to des addr */
+ psrc = (volatile unsigned int *)src_addr;
+ pdes = (volatile unsigned int *)des_addr;
+ count = nwords;
+ while(count--) {
+ dat = *psrc++;
+ *pdes++ = dat;
+ }
+ /* compare data */
+ psrc = (volatile unsigned int *)src_addr;
+ pdes = (volatile unsigned int *)des_addr;
+ count = nwords;
+ dat = 0;
+ while(count--) {
+ t = *psrc++;
+ if(dat != t) {
+ printf("compare data error,position = %d\n",(int)count);
+ ret = -1;
+ break;
+ }
+ dat++;
+ }
+ return ret;
+}
+
+int ddr_boundscan_test(uint32 addr, uint32 nwords)
+{
+ unsigned int dat = 0;
+ uint32 count = nwords;
+ volatile unsigned int *pdes;
+
+ printf("ddr boundary scan test: addr: 0x%x, nwords: 0x%x\n",
+ addr,nwords);
+ if(nwords == 0)
+ return -1;
+ /* read data from boundary address */
+ pdes = (volatile unsigned int *)addr;
+ while(count--) {
+ dat = *pdes;
+ dat = dat;
+ printf("0x%x\n",dat);
+ pdes++;
+ }
+ return 0;
+}
+
+int ddr_pll_switch_test(int times)
+{
+ printf("ddr pll switch test times: %d\n",times);
+ while(times--) {
+ sys_shutdown_pll();
+ //ispi_open(0);
+ //pll_setup_init();
+ //pll_setup_freq();
+ sys_setup_pll();
+ }
+ return 0;
+}
+
+static void do_set_gpo_pin(int pin_id, int pin_val)
+{
+ unsigned int set_addr = 0x20930030; //GPIOA 's GPO register set address
+ unsigned int clr_addr = 0x20930034; // GPIOA 's GPO register reset address
+
+ switch(pin_id) {
+ case 0:
+ if(pin_val)
+ *(volatile unsigned int *)set_addr = 0x01;//gpo 0 = 1
+ else
+ *(volatile unsigned int *)clr_addr = 0x01;//gpo 0 = 0
+ break;
+ case 1:
+ if(pin_val)
+ *(volatile unsigned int *)set_addr = 0x02;//gpo 1 = 1
+ else
+ *(volatile unsigned int *)clr_addr = 0x02;//gpo 1 = 0
+ break;
+ case 2:
+ if(pin_val)
+ *(volatile unsigned int *)set_addr = 0x04;//gpo 2 = 1
+ else
+ *(volatile unsigned int *)clr_addr = 0x04;
+ break;
+ default:
+ break;
+ }
+#if 0
+ {
+ unsigned int val = *(volatile unsigned int *)set_addr;
+ printf("set_gpo_reg value : %x\n",val);
+ }
+#endif
+
+}
+
+static void write_ddr_test_result( unsigned int addr , unsigned int val)
+{
+ writel(val,addr);
+#if 0
+ printf("Write ddr test result: addr = 0x%x,val = 0x%x\n",addr,val);
+#endif
+}
+
+static void ddr_test_entry(void)
+{
+ int res[7]= {0},j = 0,err = 0;
+ uint32 ddr_start_addr = 0x80000000, ddr_end_addr = 0xbfffffff, scan_len = 6;
+
+ printf("\n%s: current ticks = %llu\n",__func__,get_ticks());
+ printf("--------------------DDR test starts-------------------------\n");
+ printf("MP:DDR test bootloader 4.0\n");
+ printf("SV:0x10\n");
+
+ /* ddr test starts */
+ do_set_gpo_pin(1,0);
+
+ /* reset gpo0 to low level */
+ do_set_gpo_pin(0,0);
+
+ /* avoid generating building warnning*/
+ for(j = 0;j<7;j++)
+ res[j] = 0;
+
+ ddr_start_addr = ddr_start_addr;
+ ddr_end_addr = ddr_end_addr;
+ scan_len = scan_len;
+
+#ifdef DDR_T_C_PLL_SWITCH
+ /* ddr pll switch test */
+ res[0] = ddr_pll_switch_test(100);
+#endif
+
+#ifdef DDR_T_C_GET_INFO
+ /* get ddr information */
+ res[1] = get_dram_info();
+#endif
+
+#ifdef DDR_T_C_FUNCTION
+ /* ddr function test */
+ res[2] = ddr_rw_data_test(0x01000000,0,0);
+ res[2] += ddr_rw_data_test(0x02000000,0,1);
+ res[3] = ddr_rw_data_test(0x03000000,1,0);
+ res[3] += ddr_rw_data_test(0x04000000,1,1);
+ if((res[2] == 0) && (res[3] == 0)) {
+ printf("ddr function test OK\n");
+ write_ddr_test_result(DDR_T_FUNCTION_ADDR,DDR_TEST_RESULT_OK);
+ } else {
+ printf("ddr function test error,res1 = %d,res2 = %d\n",res[2],res[3]);
+ write_ddr_test_result(DDR_T_FUNCTION_ADDR,DDR_TEST_RESULT_ERROR);
+ }
+#endif
+
+#ifdef DDR_T_C_BOUNDARY_SCAN
+ /* ddr boundary scan test from 0x80000000 to 0xBFFFFFFF */
+ scan_len = 3;
+ ddr_start_addr = 0x80000000;
+ ddr_end_addr = 0xBFFFFFFF;
+ res[4] = ddr_boundscan_test(ddr_start_addr, scan_len);
+ res[5] = ddr_boundscan_test((ddr_end_addr-scan_len), scan_len);
+ if((res[4] == 0) && (res[5] == 0)) {
+ printf("ddr boundary scan test OK\n");
+ write_ddr_test_result(DDR_T_BOUNDARY_ADDR,DDR_TEST_RESULT_OK);
+ } else {
+ printf("ddr boudary scan test error, res = 0x%x\n",res[4]);
+ write_ddr_test_result(DDR_T_BOUNDARY_ADDR,DDR_TEST_RESULT_ERROR);
+ }
+#endif
+
+#ifdef DDR_T_C_MEMORY_COPY
+ /* ddr memory copy test */
+ res[6] = ddr_memory_copy_test(0x84000000, 0x85000000, 0x1000);
+ if(res[6] == 0) {
+ printf("ddr memory copy test OK\n");
+ write_ddr_test_result(DDR_T_MEM_COPY_ADDR,DDR_TEST_RESULT_OK);
+ } else {
+ printf("ddr memory copy test error, res = 0x%x\n",res[6]);
+ write_ddr_test_result(DDR_T_MEM_COPY_ADDR,DDR_TEST_RESULT_ERROR);
+ }
+#endif
+
+#ifdef DDR_T_C_PLL_SWITCH
+ printf("ddr pll switch test OK\n");
+ write_ddr_test_result(DDR_T_PLL_SWITCH_ADDR, DDR_TEST_RESULT_OK);
+#endif
+ /*check all test case result */
+ err = 0;
+ for(j = 0; j<7;j++){
+ if(res[j] != 0){
+ err = -1;
+ break;
+ }
+ }
+ if(!err) {
+ do_set_gpo_pin(0,1);//test result ok
+ printf("\nDDR test successfully !!!\n");
+ }
+ /* ddr test ends */
+ do_set_gpo_pin(1,1);//gpo1 set high level
+ printf("--------------------DDR test ends-------------------------\n");
+ printf("\n%s: current ticks = %llu\n",__func__,get_ticks());
+}
+#endif /* TGT_AP_DO_DDR_TEST */
+
+#ifdef CONFIG_MEM_WR_TEST
+void mem_test_write(void)
+{
+ volatile unsigned int *addr;
+ int pos = 0, cnt = 0;
+
+ printf("Start writing DDR test!!!!!!\n");
+ addr = (volatile unsigned int *)(0x83000000);
+ while((u32)addr < 0x83008000) {
+ pos = cnt % 10;
+ *addr = test_pattern[pos];
+ addr++;
+ cnt++;
+ }
+}
+
+int mem_test_read(void)
+{
+ volatile unsigned int *addr;
+ unsigned int temp= 0;
+ int pos = 0, cnt = 0, i = 0;
+
+ printf("Start reading DDR test!!!!\n");
+
+ addr = (volatile unsigned int *)(0x83000000);
+
+ while((u32)addr < 0x83008000) {
+
+ pos = cnt % 10;
+ temp = test_pattern[pos];
+ if ( temp != *addr) {
+ printf("test error!!!!!, addr = %x\n", (unsigned int)addr);
+ //printf("GPIO output,addr=0x20930030,value=0x01\n");
+ //*(volatile unsigned int *)0x20930030 = 0x01;
+
+ for (i = 0; i < 80;i++){
+ printf("%x ", *(addr + i));
+ if ((i % 4) == 0)
+ printf("\n");
+ }
+
+ return -1;
+ }
+
+ addr++;
+ cnt++;
+ }
+ serial_puts("DDR test OK********************************!\n");
+ //printf("GPIO output,addr = 0x20930030,value=0x02;\n");
+ //*(volatile unsigned int *)0x20930030 = 0x02;
+ return 0;
+}
+#endif /* CONFIG_MEM_WR_TEST */
+
+void sys_config_dcache_ema(unsigned int ema_val)
+{
+ unsigned int val;
+ unsigned int addr = RDA_APDEBUG_BASE + 0x24;
+ val = readl(addr);
+ /* clear bit 8,7,6 */
+ val &= (~(0x7 << 6));
+ val |= ((ema_val & 0x7) << 6);
+ writel(val,addr);
+}
+
+void sys_config_dram_qos(unsigned int idx)
+{
+ unsigned int val;
+ //L2cc_Ctrl register address
+ unsigned int addr = RDA_SYSCTRL_BASE + 0x100;
+ val = readl(addr);
+ val &= 0xFFFF00FF;
+ val |= (idx << 8);
+ val |= (idx << 12);
+ writel(val,addr);
+}
+
+int clock_init(void)
+{
+#ifdef DO_DDR_PLL_DEBUG
+ char choice = 'n';
+#endif
+
+ /* First check current usb usage */
+ check_usb_usage();
+
+ printf("Init Clock ...\n");
+ g_clock_config = get_default_clock_config();
+
+ printf("Clock config ver: %d.%d\n",
+ g_clock_config->VERSION_MAJOR, g_clock_config->VERSION_MINOR);
+
+ pmu_setup_init();
+
+#ifdef TGT_AP_SELECT_CLK
+ do_clock_selection();
+#endif /* TGT_AP_SELECT_CLK */
+
+#ifdef DO_DDR_PLL_DEBUG
+ printf("If you want to config the ddr para manully ?(y = yes, n = no) \n");
+ choice = serial_getc();
+ if (choice == 'y') {
+ memcpy(&clock_debug_config, g_clock_config,
+ sizeof(clock_debug_config));
+ g_clock_config = &clock_debug_config;
+ pmu_setup_calibration_voltage(1);
+ pmu_setup_calibration_voltage(2);
+ //pmu_buck4_buck3_choose();
+ freq_choose();
+ data_bits_choose();
+ clock_load_ddr_cal_config();
+ }
+#endif
+
+ sys_shutdown_pll();
+ ispi_open(0);
+ pll_setup_init();
+#ifdef DO_DDR_PLL_DEBUG
+ if (choice == 'y')
+ cmd_input("ddrPll", 0);
+#endif
+ pll_setup_freq();
+ sys_setup_pll();
+ sys_setup_clk();
+ /* modem use qos6_ctrl register */
+ sys_config_dram_qos(6);
+ /* set l2 d-cache ema is 0 */
+ sys_config_dcache_ema(0);
+
+ if (g_clock_config->DDR_CAL) {
+ printf("Init DDR for ddr_cal\n");
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+ pll_setup_mem_cal();
+ clock_save_config();
+ } else {
+ pll_setup_mem();
+ }
+
+ sys_dump_pll_freq();
+ sys_dump_clk();
+ pll_dump_reg();
+
+ printf("Init DDR, flag = 0x%04x, para = 0x%08lx\n",
+ g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ ddr_init(g_clock_config->DDR_FLAGS, g_clock_config->DDR_PARA);
+ printf("Done\n");
+
+#ifdef TGT_AP_DO_DDR_TEST
+ ddr_test_entry();
+#endif /* TGT_AP_DO_DDR_TEST */
+
+#ifdef CONFIG_MEM_WR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif /* CONFIG_MEM_WR_TEST */
+
+#ifdef DO_STAY_FOR_WATCHING
+ do_stay_for_watching_clock_reg();
+#endif /* DO_STAY_FOR_WATCHING */
+
+ return 0;
+}
+#else /* CONFIG_RDA_FPGA */
+
+int clock_init(void)
+{
+ u16 ddr_flags = DDR_FLAGS_DLLOFF
+ | DDR_FLAGS_ODT(1)
+ | DDR_FLAGS_RON(0);
+ //16bit
+ u32 ddr_para = DDR_PARA_MEM_BITS(2)
+ | DDR_PARA_BANK_BITS(3)
+ | DDR_PARA_ROW_BITS(4)
+ | DDR_PARA_COL_BITS(1);
+
+ printf("Init DDR\n");
+ ddr_init(ddr_flags, ddr_para);
+ printf("Done\n");
+
+#ifdef TGT_AP_DO_DDR_TEST
+ ddr_test_entry();
+#endif /* TGT_AP_DO_DDR_TEST */
+
+#ifdef CONFIG_MEM_WR_TEST
+ mem_test_write();
+ mem_test_read();
+#endif /* CONFIG_MEM_WR_TEST */
+
+ return 0;
+}
+
+#endif /* CONFIG_RDA_FPGA */
diff --git a/board/rda/rda8850e/clock_config.c b/board/rda/rda8850e/clock_config.c
new file mode 100644
index 0000000000..ac169fb37b
--- /dev/null
+++ b/board/rda/rda8850e/clock_config.c
@@ -0,0 +1,150 @@
+#ifndef TARGET_TOOL
+#include <common.h>
+#include <asm/arch/factory.h>
+#include "clock_config.h"
+#endif
+
+#include "ddr.h"
+#include "tgt_ap_clock_config.h"
+
+static const struct clock_config clock_default_config = {
+ /* Header */
+ 0, // MAGIC;
+ CLOCK_VER_MAJOR, // VERSION_MAJOR;
+ CLOCK_VER_MINOR, // VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ _TGT_AP_PLL_CPU_FREQ, // PLL_FREQ_CPU; /* 05, 06 */
+ _TGT_AP_PLL_BUS_FREQ, // PLL_FREQ_BUS; /* 25, 26 */
+ _TGT_AP_PLL_MEM_FREQ, // PLL_FREQ_MEM; /* 65, 66 */
+ _TGT_AP_PLL_USB_FREQ, // PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Cal */
+ 0, // DDR_CAL;
+ /* DDR_FLAGS */
+ DDR_FLAGS_ODT(_TGT_AP_DDR_ODT) // 010 -- 120 Ohm
+#if (_TGT_AP_DDR_CLOCK < 200)
+ | DDR_FLAGS_DLLOFF
+#endif
+#ifdef _TGT_AP_DDR_LOWPWR
+ | DDR_FLAGS_LOWPWR
+#endif
+ | DDR_FLAGS_RON(_TGT_AP_DDR_RON), // 00 -- 40 Ohm
+
+ /* DDR_PARA */
+ DDR_PARA_CHIP_BITS(_TGT_AP_DDR_CHIP_BITS)
+ | DDR_PARA_MEM_BITS(_TGT_AP_DDR_MEM_BITS)
+ | DDR_PARA_BANK_BITS(_TGT_AP_DDR_BANK_BITS)
+ | DDR_PARA_ROW_BITS(_TGT_AP_DDR_ROW_BITS )
+ | DDR_PARA_COL_BITS(_TGT_AP_DDR_COL_BITS),
+
+ /* AP sysctrl */
+ _TGT_AP_CLK_CPU, // CLK_CPU;
+ _TGT_AP_CLK_AXI, // CLK_AXI;
+ _TGT_AP_CLK_GCG, // CLK_GCG;
+ _TGT_AP_CLK_AHB1, // CLK_AHB1;
+ _TGT_AP_CLK_APB1, // CLK_APB1;
+ _TGT_AP_CLK_APB2, // CLK_APB2;
+ _TGT_AP_CLK_MEM, // CLK_MEM;
+ _TGT_AP_CLK_GPU, // CLK_GPU;
+ _TGT_AP_CLK_VPU, // CLK_VPU;
+ _TGT_AP_CLK_VOC, // CLK_VOC;
+ _TGT_AP_CLK_SFLSH, // CLK_SFLSH;
+ 0, // RESERVE;
+
+ /* DDR timings, defined in target */
+ DDR_CHAN_1_VALID_VAL, // DDR_CHAN_1_VALID;
+ DDR_TIMING_101H_VAL, // DDR_TIMING_101H;
+ DDR_TIMING_102H_VAL, // DDR_TIMING_102H;
+ DDR_TIMING_103H_VAL, // DDR_TIMING_103H;
+ DDR_TIMING_104H_VAL, // DDR_TIMING_104H;
+ DDR_TIMING_105H_VAL, // DDR_TIMING_105H;
+ DDR_TIMING_106H_VAL, // DDR_TIMING_106H;
+ DDR_TIMING_107H_VAL, // DDR_TIMING_107H;
+ DDR_TIMING_108H_VAL, // DDR_TIMING_108H;
+ DDR_TIMING_109H_VAL, // DDR_TIMING_109H;
+ DDR_TIMING_10AH_VAL, // DDR_TIMING_10AH;
+ DDR_TIMING_10BH_VAL, // DDR_TIMING_10BH;
+ DDR_TIMING_10CH_VAL, // DDR_TIMING_10CH;
+ DDR_TIMING_10DH_VAL, // DDR_TIMING_10DH;
+ DDR_TIMING_10EH_VAL, // DDR_TIMING_10EH;
+ DDR_TIMING_10FH_VAL, // DDR_TIMING_10FH;
+
+ DDR_CHAN_2_VALID_VAL, // DDR_CHAN_2_VALID;
+ DDR_TIMING_121H_VAL, // DDR_TIMING_121H;
+ DDR_TIMING_122H_VAL, // DDR_TIMING_122H;
+ DDR_TIMING_123H_VAL, // DDR_TIMING_123H;
+ DDR_TIMING_124H_VAL, // DDR_TIMING_124H;
+ DDR_TIMING_125H_VAL, // DDR_TIMING_125H;
+ DDR_TIMING_126H_VAL, // DDR_TIMING_126H;
+ DDR_TIMING_127H_VAL, // DDR_TIMING_127H;
+ DDR_TIMING_128H_VAL, // DDR_TIMING_128H;
+ DDR_TIMING_129H_VAL, // DDR_TIMING_129H;
+ DDR_TIMING_12AH_VAL, // DDR_TIMING_12AH;
+ DDR_TIMING_12BH_VAL, // DDR_TIMING_12BH;
+ DDR_TIMING_12CH_VAL, // DDR_TIMING_12CH;
+ DDR_TIMING_12DH_VAL, // DDR_TIMING_12DH;
+ DDR_TIMING_12EH_VAL, // DDR_TIMING_12EH;
+ DDR_TIMING_12FH_VAL, // DDR_TIMING_12FH;
+
+ DDR_CHAN_3_VALID_VAL, // DDR_CHAN_3_VALID;
+ DDR_TIMING_141H_VAL, // DDR_TIMING_141H;
+ DDR_TIMING_142H_VAL, // DDR_TIMING_142H;
+ DDR_TIMING_143H_VAL, // DDR_TIMING_143H;
+ DDR_TIMING_144H_VAL, // DDR_TIMING_144H;
+ DDR_TIMING_145H_VAL, // DDR_TIMING_145H;
+ DDR_TIMING_146H_VAL, // DDR_TIMING_146H;
+ DDR_TIMING_147H_VAL, // DDR_TIMING_147H;
+ DDR_TIMING_148H_VAL, // DDR_TIMING_148H;
+ DDR_TIMING_149H_VAL, // DDR_TIMING_149H;
+ DDR_TIMING_14AH_VAL, // DDR_TIMING_14AH;
+ DDR_TIMING_14BH_VAL, // DDR_TIMING_14BH;
+ DDR_TIMING_14CH_VAL, // DDR_TIMING_14CH;
+ DDR_TIMING_14DH_VAL, // DDR_TIMING_14DH;
+ DDR_TIMING_14EH_VAL, // DDR_TIMING_14EH;
+ DDR_TIMING_14FH_VAL, // DDR_TIMING_14FH;
+
+ DDR_CHAN_4_VALID_VAL, // DDR_CHAN_4_VALID;
+ DDR_TIMING_161H_VAL, // DDR_TIMING_161H;
+ DDR_TIMING_162H_VAL, // DDR_TIMING_162H;
+ DDR_TIMING_163H_VAL, // DDR_TIMING_163H;
+ DDR_TIMING_164H_VAL, // DDR_TIMING_164H;
+ DDR_TIMING_165H_VAL, // DDR_TIMING_165H;
+ DDR_TIMING_166H_VAL, // DDR_TIMING_166H;
+ DDR_TIMING_167H_VAL, // DDR_TIMING_167H;
+ DDR_TIMING_168H_VAL, // DDR_TIMING_168H;
+ DDR_TIMING_169H_VAL, // DDR_TIMING_169H;
+ DDR_TIMING_16AH_VAL, // DDR_TIMING_16AH;
+ DDR_TIMING_16BH_VAL, // DDR_TIMING_16BH;
+ DDR_TIMING_16CH_VAL, // DDR_TIMING_16CH;
+ DDR_TIMING_16DH_VAL, // DDR_TIMING_16DH;
+ DDR_TIMING_16EH_VAL, // DDR_TIMING_16EH;
+ DDR_TIMING_16FH_VAL, // DDR_TIMING_16FH;
+
+ DDR_TIMING_160H_VAL, // DDR_TIMING_160H;
+ DDR_TIMING_180H_VAL, // DDR_TIMING_180H;
+ DDR_TIMING_181H_VAL, // DDR_TIMING_181H;
+ DDR_TIMING_182H_VAL, // DDR_TIMING_182H;
+ DDR_TIMING_183H_VAL, // DDR_TIMING_183H;
+ DDR_TIMING_184H_VAL, // DDR_TIMING_184H;
+ DDR_TIMING_185H_VAL, // DDR_TIMING_185H;
+ DDR_TIMING_186H_VAL, // DDR_TIMING_186H;
+ DDR_TIMING_187H_VAL, // DDR_TIMING_187H;
+ DDR_TIMING_188H_VAL, // DDR_TIMING_188H;
+ DDR_TIMING_189H_VAL, // DDR_TIMING_189H;
+ DDR_TIMING_18AH_VAL, // DDR_TIMING_18AH;
+ DDR_TIMING_18BH_VAL, // DDR_TIMING_18BH;
+ DDR_TIMING_18CH_VAL, // DDR_TIMING_18CH;
+ DDR_TIMING_18DH_VAL, // DDR_TIMING_18DH;
+ DDR_TIMING_18EH_VAL, // DDR_TIMING_18EH;
+ DDR_TIMING_18FH_VAL, // DDR_TIMING_18FH;
+ DDR_TIMING_69H_VAL, // DDR_TIMING_69H;
+};
+
+const struct clock_config *get_default_clock_config(void)
+{
+#ifndef TARGET_TOOL
+ BUILD_BUG_ON(sizeof(struct clock_config) > AP_FACTORY_CLOCK_CFG_LEN);
+#endif
+
+ return &clock_default_config;
+}
+
diff --git a/board/rda/rda8850e/clock_config.h b/board/rda/rda8850e/clock_config.h
new file mode 100644
index 0000000000..46a090b15c
--- /dev/null
+++ b/board/rda/rda8850e/clock_config.h
@@ -0,0 +1,133 @@
+#ifndef __CLOCK_CONFIG_H__
+#define __CLOCK_CONFIG_H__
+
+typedef unsigned long UINT32;
+typedef unsigned short UINT16;
+typedef long INT32;
+typedef short INT16;
+typedef unsigned char UINT8;
+typedef char INT8;
+
+#define CLOCK_VER_MAJOR 2
+#define CLOCK_VER_MINOR 0
+
+struct clock_config {
+ /* Header */
+ UINT32 MAGIC;
+ UINT16 VERSION_MAJOR;
+ UINT16 VERSION_MINOR;
+ /* PLL Freqs (MHz) */
+ UINT32 PLL_FREQ_CPU; /* 05, 06 */
+ UINT32 PLL_FREQ_BUS; /* 25, 26 */
+ UINT32 PLL_FREQ_MEM; /* 65, 66 */
+ UINT32 PLL_FREQ_USB; /* 85, 86 */
+ /* DDR Flags */
+ UINT16 DDR_CAL;
+ UINT16 DDR_FLAGS;
+ UINT32 DDR_PARA;
+ /* AP sysctrl */
+ UINT16 CLK_CPU;
+ UINT16 CLK_AXI;
+ UINT16 CLK_GCG;
+ UINT16 CLK_AHB1;
+ UINT16 CLK_APB1;
+ UINT16 CLK_APB2;
+ UINT16 CLK_MEM;
+ UINT16 CLK_GPU;
+ UINT16 CLK_VPU;
+ UINT16 CLK_VOC;
+ UINT16 CLK_SFLSH;
+ UINT16 RESERVE;
+ /* DDR timings */
+ UINT16 DDR_CHAN_1_VALID;
+ UINT16 DDR_TIMING_101H;
+ UINT16 DDR_TIMING_102H;
+ UINT16 DDR_TIMING_103H;
+ UINT16 DDR_TIMING_104H;
+ UINT16 DDR_TIMING_105H;
+ UINT16 DDR_TIMING_106H;
+ UINT16 DDR_TIMING_107H;
+ UINT16 DDR_TIMING_108H;
+ UINT16 DDR_TIMING_109H;
+ UINT16 DDR_TIMING_10AH;
+ UINT16 DDR_TIMING_10BH;
+ UINT16 DDR_TIMING_10CH;
+ UINT16 DDR_TIMING_10DH;
+ UINT16 DDR_TIMING_10EH;
+ UINT16 DDR_TIMING_10FH;
+
+ UINT16 DDR_CHAN_2_VALID;
+ UINT16 DDR_TIMING_121H;
+ UINT16 DDR_TIMING_122H;
+ UINT16 DDR_TIMING_123H;
+ UINT16 DDR_TIMING_124H;
+ UINT16 DDR_TIMING_125H;
+ UINT16 DDR_TIMING_126H;
+ UINT16 DDR_TIMING_127H;
+ UINT16 DDR_TIMING_128H;
+ UINT16 DDR_TIMING_129H;
+ UINT16 DDR_TIMING_12AH;
+ UINT16 DDR_TIMING_12BH;
+ UINT16 DDR_TIMING_12CH;
+ UINT16 DDR_TIMING_12DH;
+ UINT16 DDR_TIMING_12EH;
+ UINT16 DDR_TIMING_12FH;
+
+ UINT16 DDR_CHAN_3_VALID;
+ UINT16 DDR_TIMING_141H;
+ UINT16 DDR_TIMING_142H;
+ UINT16 DDR_TIMING_143H;
+ UINT16 DDR_TIMING_144H;
+ UINT16 DDR_TIMING_145H;
+ UINT16 DDR_TIMING_146H;
+ UINT16 DDR_TIMING_147H;
+ UINT16 DDR_TIMING_148H;
+ UINT16 DDR_TIMING_149H;
+ UINT16 DDR_TIMING_14AH;
+ UINT16 DDR_TIMING_14BH;
+ UINT16 DDR_TIMING_14CH;
+ UINT16 DDR_TIMING_14DH;
+ UINT16 DDR_TIMING_14EH;
+ UINT16 DDR_TIMING_14FH;
+
+ UINT16 DDR_CHAN_4_VALID;
+ UINT16 DDR_TIMING_161H;
+ UINT16 DDR_TIMING_162H;
+ UINT16 DDR_TIMING_163H;
+ UINT16 DDR_TIMING_164H;
+ UINT16 DDR_TIMING_165H;
+ UINT16 DDR_TIMING_166H;
+ UINT16 DDR_TIMING_167H;
+ UINT16 DDR_TIMING_168H;
+ UINT16 DDR_TIMING_169H;
+ UINT16 DDR_TIMING_16AH;
+ UINT16 DDR_TIMING_16BH;
+ UINT16 DDR_TIMING_16CH;
+ UINT16 DDR_TIMING_16DH;
+ UINT16 DDR_TIMING_16EH;
+ UINT16 DDR_TIMING_16FH;
+
+ UINT16 DDR_TIMING_160H;
+ UINT16 DDR_TIMING_180H;
+ UINT16 DDR_TIMING_181H;
+ UINT16 DDR_TIMING_182H;
+ UINT16 DDR_TIMING_183H;
+ UINT16 DDR_TIMING_184H;
+ UINT16 DDR_TIMING_185H;
+ UINT16 DDR_TIMING_186H;
+ UINT16 DDR_TIMING_187H;
+ UINT16 DDR_TIMING_188H;
+ UINT16 DDR_TIMING_189H;
+ UINT16 DDR_TIMING_18AH;
+ UINT16 DDR_TIMING_18BH;
+ UINT16 DDR_TIMING_18CH;
+ UINT16 DDR_TIMING_18DH;
+ UINT16 DDR_TIMING_18EH;
+ UINT16 DDR_TIMING_18FH;
+
+ UINT16 DDR_TIMING_69H;
+};
+
+const struct clock_config *get_default_clock_config(void);
+
+#endif
diff --git a/board/rda/rda8850e/config.mk b/board/rda/rda8850e/config.mk
new file mode 100644
index 0000000000..39782ba05e
--- /dev/null
+++ b/board/rda/rda8850e/config.mk
@@ -0,0 +1,15 @@
+#
+#the spl code should not exceed the SPL_MAX_SIZE,and if
+#the spl don't up to the max size, paddint the last with
+#zero(or 0xff?)
+
+#48kbytes, 48*1024
+#SPL_APPENDING_TO := 48
+#SPL_MAX_SIZE := 49512
+
+# space for spl(48KiB) & mtd partition table(4KiB),
+# so uboot offset 52KiB(48 + 4).
+
+SPL_APPENDING_TO := 52
+
+CONFIG_SPL_SIGNATURE_CHECK_IMAGE := y
diff --git a/board/rda/rda8850e/ddr.c b/board/rda/rda8850e/ddr.c
new file mode 100644
index 0000000000..b288e2017b
--- /dev/null
+++ b/board/rda/rda8850e/ddr.c
@@ -0,0 +1,753 @@
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/io.h>
+#include "tgt_ap_clock_config.h"
+
+#define DDR_TYPE _TGT_AP_DDR_TYPE
+#if (DDR_TYPE == 2)
+#include "lpddr2_init.h"
+#elif (DDR_TYPE == 3)
+#include "ddr3_init.h"
+#else
+#error "_TGT_AP_DDR_TYPE is not valid !"
+#endif
+#include <asm/arch/rda_sys.h>
+
+#pragma GCC push_options
+#pragma GCC optimize ("O0")
+
+#define DF_DELAY (0x10000)
+
+#define DMC_REG_BASE RDA_DMC400_BASE
+#define PHY_REG_BASE RDA_DDRPHY_BASE
+
+/*To test DDR self-refresh timing */
+#ifdef TGT_AP_SET_DDR_LP_PARAM
+#define SEL_DDR_REG_ESR_TAB_SIZE 16
+#define SEL_DDR_REG_NUMBER 4
+
+enum DMC_STATE_VALUE
+{
+ DMC_STATE_CONFIG = 0X0,
+ DMC_STATE_LOW_POWER = 0X1,
+ DMC_STATE_PAUSED = 0X2,
+ DMC_STATE_READY = 0X03,
+};
+enum SEL_DDR_REG_INDEX
+{
+ DDR_REG_IDX_ESR = 0,
+ DDR_REG_IDX_XSR,
+ DDR_REG_IDX_XRCKD,
+ DDR_REG_IDX_CKSRD,
+};
+typedef struct
+{
+ const char *sel_str;
+ UINT32 sel_val;
+}sel_ddr_reg_val_item_t;
+
+const static sel_ddr_reg_val_item_t sel_ddr_reg_esr_tab[] = {
+ {"0: 0x00",0x00},{"1: 0x01",0x01},{"2: 0x02",0x02},{"3: 0x03",0x03},
+ {"4: 0x04",0x04},{"5: 0x05",0x05},{"6: 0x06",0x06},{"7: 0x07",0x07},
+ {"8: 0x08",0x08},{"9: 0x09",0x09},{"a: 0x0A",0x0A},{"b: 0x0B",0x0B},
+ {"c: 0x0C",0x0C},{"d: 0x0D",0x0D},{"e: 0x0E",0x0E},{"f: 0x0F",0x0F},
+};
+const static sel_ddr_reg_val_item_t sel_ddr_reg_xsr_tab[] = {
+ {"0: 0x1D8",0x1D8},
+ {"1: 0x1DC",0x1DC},
+ {"2: 0x1E0",0x1E0},
+ {"3: 0x1E4",0x1E4},
+ {"4: 0x1E8",0x1E8},
+ {"5: 0x1EC",0x1EC},
+ {"6: 0x1F0",0x1F0},
+ {"7: 0x1F4",0x1F4},
+ {"8: 0x1F8",0x1F8},
+ {"9: 0x1FA",0x1FA},
+ {"a: 0x1FB",0x1FB},
+ {"b: 0x1FC",0x1FC},
+ {"c: 0x1FD",0x1FD},
+ {"d: 0x1FE",0x1FE},
+ {"e: 0x1FF",0x1FF},
+ {"f: 0x200",0x200},
+};
+const static sel_ddr_reg_val_item_t sel_ddr_reg_xrckd_tab[] = {
+ {"0: 0x00",0x00},{"1: 0x01",0x01},{"2: 0x02",0x02},{"3: 0x03",0x03},
+ {"4: 0x04",0x04},{"5: 0x05",0x05},{"6: 0x06",0x06},{"7: 0x07",0x07},
+ {"8: 0x08",0x08},{"9: 0x09",0x09},{"a: 0x0A",0x0A},{"b: 0x0B",0x0B},
+ {"c: 0x0C",0x0C},{"d: 0x0D",0x0D},{"e: 0x0E",0x0E},{"f: 0x0F",0x0F},
+};
+
+typedef struct {
+ const char *name_str;
+ unsigned int offset_val;
+}sel_ddr_reg_info_item_t;
+
+const static sel_ddr_reg_info_item_t sel_ddr_reg_tab[] = {
+ {"enter self-refresh timing",0x260,},
+ {"exit self-refresh timing",0x264,},
+ {"self-refresh to DRAM clock disable timing",0x268,},
+ {"DRAM clock enable to exist self-refresh timing",0x26C,},
+};
+typedef struct
+{
+ unsigned int stop_mem_clock_idle:1; //bit0
+ unsigned int stop_mem_clock_sref:1; //bit1
+ unsigned int auto_power_down :1; //bit2
+ unsigned int auto_self_refresh :1; //bit3
+ unsigned int asr_period :4; //bit4-bit7
+} ddr_lp_cntl_reg_bit_t;
+typedef union
+{
+ unsigned int value;
+ ddr_lp_cntl_reg_bit_t bit;
+} ddr_lp_cntl_reg_t;
+
+static int _ddr_config_low_power_mode(void)
+{
+ char choice = 'n';
+ int wait_idle = 0;
+ unsigned int dmc_state = 0,temp;
+ ddr_lp_cntl_reg_t lp_reg,lp_reg_set;
+
+ /* Print message for selection */
+ printf("\nConfigure LOWPWR_CTRL register manully?(y=yes,n=no)\n");
+ choice = serial_getc();
+ if((choice != 'y') && (choice != 'Y')) {
+ printf("Using default value for DDR configuration\n");
+ return -1;
+ }
+LAB_CONFIG:
+ /* initiale value */
+ dmc_state = 0;
+ temp = 0;
+ lp_reg.value = 0;
+ lp_reg_set.value = 0;
+
+ /* check dmc current state */
+ dmc_state = readl(DMC_REG_BASE + MEMC_STATUS);
+ if(dmc_state != DMC_STATE_CONFIG) {
+ printf("DMC is not in CONFIG state, current state value: 0x%x,exit\n",dmc_state);
+ return -1;
+ }
+ /* read current low power configuration value */
+ lp_reg_set.value = 0;
+ lp_reg.value = readl(DMC_REG_BASE + LOWPWR_CTRL);
+ printf("Current LOWPWR_CTRL register value: 0x%x\n",lp_reg.value);
+ /* set stop_mem_clock_idle */
+#if 0
+ /* In RDA8850E, the DMC400 do not support auto power down mode,
+ so
+ stop_mem_clock_idle = 0,
+ stop_mem_clock_sref = 0,
+ auto_power_down = 0
+ */
+ lp_reg_set.bit.stop_mem_clock_idle = 0;
+ lp_reg_set.bit.stop_mem_clock_sref = 0;
+ lp_reg_set.bit.auto_power_down = 0;
+ lp_reg_set.bit.auto_self_refresh = 1; //enable auto self refresh mode
+#else
+ printf("Enable or disable stop_mem_clock_idle ? (e/d)\n");
+ choice = serial_getc();
+ printf("Your choice is: %c\n",choice);
+ if((choice == 'e')||(choice == 'E')) {
+ lp_reg_set.bit.stop_mem_clock_idle = 1;
+ } else {
+ lp_reg_set.bit.stop_mem_clock_idle = 0;
+ }
+ /* set stop_mem_clock_sref */
+ printf("Enable or disable stop_mem_clock_sref ? (e/d)\n");
+ choice = serial_getc();
+ printf("Your choice is: %c\n",choice);
+ if((choice == 'e')||(choice == 'E')) {
+ lp_reg_set.bit.stop_mem_clock_sref = 1;
+ } else {
+ lp_reg_set.bit.stop_mem_clock_sref = 0;
+ }
+ /* set auto_power_down */
+ printf("Enable or disable auto_power_down ? (e/d)\n");
+ choice = serial_getc();
+ printf("Your choice is: %c\n",choice);
+ if((choice == 'e')||(choice == 'E')) {
+ lp_reg_set.bit.auto_power_down = 1;
+ } else {
+ lp_reg_set.bit.auto_power_down = 0;
+ }
+ /* set auto_self_refresh */
+ printf("Enable or disable auto_self_refresh ? (e/d)\n");
+ choice = serial_getc();
+ printf("Your choice is: %c\n",choice);
+ if((choice == 'e')||(choice == 'E')) {
+ lp_reg_set.bit.auto_self_refresh = 1;
+ } else {
+ lp_reg_set.bit.auto_self_refresh = 0;
+ }
+#endif
+ /* set asr period */
+ printf("Set asr_period: 0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f\n");
+ choice = serial_getc();
+ printf("Your choice is: %c\n",choice);
+ if((choice >= 'a')&&(choice <= 'f'))
+ choice -= 0x20;
+ if((choice >= 'A') && (choice <= 'F'))
+ choice -=0x37;
+ else
+ choice -=0x30;
+
+ temp = (unsigned int )choice;
+ printf("temp: 0x%x\n",temp);
+ if(temp > 0x0F) {
+ printf("Input data error,use default value 0x04\n");
+ temp = 0x04;
+ }
+ lp_reg_set.bit.asr_period = temp;
+ /* be sure to write */
+ printf("LOWPWR_CTRL register's setting value: 0x%x\n",lp_reg_set.value);
+ printf("Write to register ? (y/n)\n");
+ choice = serial_getc();
+ if((choice != 'y')&&(choice != 'Y')) {
+ printf("Writing cancelled,exit\n");
+ goto LAB_RECONFIG;
+ }
+ /* write register */
+ printf("Writing register...");
+ writel(lp_reg_set.value, DMC_REG_BASE + LOWPWR_CTRL);
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+ printf("address is 0x%x, value is 0x%x\n",LOWPWR_CTRL,lp_reg_set.value);
+ /* read resigter */
+ printf("Reading register...");
+ temp = readl(DMC_REG_BASE + LOWPWR_CTRL);
+ printf("address is 0x%x, value is 0x%x\n",LOWPWR_CTRL,temp);
+LAB_RECONFIG:
+ printf("\nRe-configure LOWPWR_CTRL register ? (y/n)\n");
+ choice = serial_getc();
+ if((choice == 'y') || (choice == 'Y')) {
+ goto LAB_CONFIG;
+ }
+ printf("Configure LOWPWR_CTRL register success !!!\n");
+ return 0;
+}
+static int _ddr_set_refresh_timing(void)
+{
+ char choice = 'n';
+ int try_times = 0,i,idx = 0,wait_idle = 0;
+ unsigned int temp,reg_val[SEL_DDR_REG_NUMBER] = {0};
+ unsigned int dmc_status = 0;
+
+ dmc_status = dmc_status;
+ /* Print message for selection */
+ printf("Configure DDR parameters manully?(y=yes,n=no)\n");
+ choice = serial_getc();
+ if((choice != 'y') && (choice != 'Y')) {
+ printf("Using default value for DDR configuration\n");
+ return 0;
+ }
+ idx = 0;
+LAB_INPUT:
+ try_times = 0;
+ while(1) {
+ /* get current register value */
+ temp = readl(DMC_REG_BASE + sel_ddr_reg_tab[idx].offset_val);
+ printf("\nConfigure %s parameter, current value is: 0x%x\n",
+ sel_ddr_reg_tab[idx].name_str, temp);
+ /* print selection table */
+ switch(idx){
+ case DDR_REG_IDX_ESR:
+ for( i = 0; i < SEL_DDR_REG_ESR_TAB_SIZE; i++)
+ printf("\t%s\n",sel_ddr_reg_esr_tab[i].sel_str);
+ break;
+ case DDR_REG_IDX_XSR:
+ for( i = 0; i < SEL_DDR_REG_ESR_TAB_SIZE; i++)
+ printf("\t%s\n",sel_ddr_reg_xsr_tab[i].sel_str);
+ break;
+ case DDR_REG_IDX_XRCKD:
+ case DDR_REG_IDX_CKSRD:
+ for( i = 0; i < SEL_DDR_REG_ESR_TAB_SIZE; i++)
+ printf("\t%s\n",sel_ddr_reg_xrckd_tab[i].sel_str);
+ break;
+ default:
+ printf("print selection table error,idx = %d\n",idx);
+ return -1;
+ }
+ /* input selection :[0,9],[A,F],[a,f] */
+ choice = serial_getc();
+ try_times++;
+ if((choice < '0')
+ ||((choice > '9')&&(choice < 'A'))
+ ||((choice > 'F')&&(choice < 'a'))
+ ||(choice > 'f')) {
+ printf("Your input:%c is invalid,asc is 0x%x\n",choice,choice);
+ if(try_times > 3)
+ break;
+ else
+ continue;
+ }
+ break;
+ }
+ if(try_times > 3) {
+ printf("Invalid input over 3 times ,exit\n");
+ return -1;
+ }
+ printf("debug: choice is 0x%x\n",choice);
+ if((choice >= 'a')&&(choice <= 'f'))
+ choice -= 0x20;
+ if((choice >= 'A') && (choice <= 'F'))
+ choice -=0x37;
+ else
+ choice -=0x30;
+
+ if(choice >= SEL_DDR_REG_ESR_TAB_SIZE) {
+ printf("Input error choice 0x%x, exit\n",choice);
+ return -1;
+ }
+ i = (int)(choice);
+ switch(idx) {
+ case DDR_REG_IDX_ESR:
+ reg_val[idx] = sel_ddr_reg_esr_tab[i].sel_val;
+ break;
+ case DDR_REG_IDX_XSR:
+ reg_val[idx] = sel_ddr_reg_xsr_tab[i].sel_val;
+ break;
+ case DDR_REG_IDX_XRCKD:
+ case DDR_REG_IDX_CKSRD:
+ reg_val[idx] = sel_ddr_reg_xrckd_tab[i].sel_val;
+ break;
+ default:
+ printf("read selection table error,idx = %d\n",idx);
+ return -1;
+ break;
+ }
+ printf("Register offset: 0x%x, value: 0x%x\n",
+ sel_ddr_reg_tab[idx].offset_val,reg_val[idx]);
+ idx++;
+ if(idx < SEL_DDR_REG_NUMBER)
+ goto LAB_INPUT;
+ /* List all selection */
+ printf("\nList your selection:\n");
+ for(i = 0; i < SEL_DDR_REG_NUMBER; i++)
+ printf("\t%s, value: 0x%x\n",sel_ddr_reg_tab[i].name_str, reg_val[i]);
+
+ /* Request writing decision */
+ printf("\nWrite to register ?(y=yes,n=no)\n");
+ choice = serial_getc();
+ if((choice != 'y') && (choice != 'Y')) {
+ printf("Using default value for DDR configuration\n");
+ return 0;
+ }
+ /* write to register */
+ printf("Writing DMC register...\n");
+ for(i = 0; i < SEL_DDR_REG_NUMBER; i++){
+ writel(reg_val[i],DMC_REG_BASE + sel_ddr_reg_tab[i].offset_val);
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+ printf("Address: 0x%x, value: 0x%x\n",
+ sel_ddr_reg_tab[i].offset_val, reg_val[i]);
+ }
+ /* read from register */
+ printf("Reading DMC register...\n");
+ for( i = 0;i < SEL_DDR_REG_NUMBER; i++) {
+ temp = readl(DMC_REG_BASE + sel_ddr_reg_tab[i].offset_val);
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+ printf("Address: 0x%x, value: 0x%x\n",
+ sel_ddr_reg_tab[i].offset_val, temp);
+ }
+ /* Finish configuration */
+ printf("Configure DDR parameter successful !!!.\n");
+ return 0;
+}
+
+#endif /* TGT_AP_SET_DDR_LP_PARAM */
+
+/* This macro is used to test DDR */
+#ifdef TGT_AP_DO_DDR_TEST
+unsigned int g_ddr_manufacture_id = 0;
+unsigned int g_ddr_capacity_id = 0;
+#endif /* TGT_AP_DO_DDR_TEST */
+
+typedef struct
+{
+ unsigned char val;
+ const char *str;
+}dram_info_t;
+
+const static dram_info_t dram_manu[] =
+{
+ {0x01,"Samsung"},
+ {0x03,"Elpida"},
+ {0x05,"Nanya"},
+ {0x06,"Hynix"},
+ {0x08,"Winbond"},
+ {0x0E,"Intel"},
+ {0xFF,"Micron"},
+};
+
+const static char *dram_density[] =
+{
+ "64Mb",
+ "128Mb",
+ "256Mb",
+ "512Mb",
+ "1Gb",
+ "2Gb",
+ "4Gb",
+ "8Gb",
+ "16Gb",
+ "32Gb",
+};
+
+const static char *dram_type[] =
+{
+ "S4 SDRAM",
+ "S2 SDRAM",
+ "N NVM",
+ "Reserved",
+};
+
+const static int dram_io_width[] =
+{
+ 32,
+ 16,
+ 8,
+ 0,
+};
+
+unsigned int con_dram_mrdata(unsigned int val)
+{
+ unsigned int t = 0;
+ /* order: 7 6 5 4 3 2 1 0 -> 7 3 1 6 5 4 2 0 */
+ t |= (val & 0x80);
+ t |= (val & 0x40)>>2;
+ t |= (val & 0x20)>>2;
+ t |= (val & 0x10)>>2;
+ t |= (val & 0x08)<<3;
+ t |= (val & 0x04)>>1;
+ t |= (val & 0x02)<<4;
+ t |= (val & 0x01);
+ return t;
+}
+
+void show_dram_info(void)
+{
+ int wait_idle,i,num;
+ unsigned int mr5,mr8,status;
+ unsigned char manu_idx,den_idx,width_idx,type_idx;
+ /* read dmc status */
+ status = readl(DMC_REG_BASE+MEMC_STATUS);
+ if(status != 0) {
+ return;
+ }
+ /* read MR5, manufacture id */
+ writel(0x60000005,DMC_REG_BASE+DIRECT_CMD);
+ wait_idle = DF_DELAY+0xFF;
+ while(wait_idle--);
+ mr5 = readl(DMC_REG_BASE + MR_DATA);
+ /* read MR8, capacity id */
+ writel(0x60000008,DMC_REG_BASE+DIRECT_CMD);
+ wait_idle = DF_DELAY+0xFF;
+ while(wait_idle--);
+ mr8 = readl(DMC_REG_BASE + MR_DATA);
+#ifdef TGT_AP_DO_DDR_TEST
+ g_ddr_manufacture_id = mr5;
+ g_ddr_capacity_id = mr8;
+#endif /* TGT_AP_DO_DDR_TEST */
+ /* to determine wether to transform bit order */
+ width_idx = (mr8 >> 6) & 0x3;
+ den_idx = (mr8 >> 2) & 0xF;
+ if((width_idx >= 0x1) || (den_idx < 0x4)) {
+ mr5 = con_dram_mrdata(mr5);
+ mr8 = con_dram_mrdata(mr8);
+ }
+ /* parse dram info */
+ manu_idx = mr5 & 0xFF;
+ num = ARRAY_SIZE(dram_manu);
+ for(i = 0;i < num;i++) {
+ if(dram_manu[i].val == manu_idx)
+ break;
+ }
+ if(i >= num) {
+ printf("unknown manu id %x\n",mr5);
+ return;
+ }
+ manu_idx = i;
+ type_idx = mr8 & 0x3;
+ den_idx = (mr8 >> 2) & 0xF;
+ width_idx = (mr8 >> 6) & 0x3;
+ num = ARRAY_SIZE(dram_density);
+ if(den_idx >= num) {
+ printf("unknown density %x\n",mr8);
+ return;
+ }
+ printf("dram info: %s, %s, %s, x%d\n",
+ dram_manu[manu_idx].str,
+ dram_type[type_idx],
+ dram_density[den_idx],
+ dram_io_width[width_idx]);
+}
+
+#ifdef DO_DDR_PLL_DEBUG
+extern void cmd_input(char * pname, UINT32 reg_base);
+#endif /* DO_DDR_PLL_DEBUG */
+
+void config_ddr_phy(UINT16 flag)
+{
+ UINT16 __attribute__((unused)) dll_off;
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+
+#if (DDR_TYPE == 2) /* LPDDR2 */
+ int wait_idle, i, num;
+ UINT32 val;
+ u16 metal_id = rda_metal_id_get();
+ dmc_reg_t *dmc_digphy_config_ptr;
+
+ wait_idle = DF_DELAY + 16;
+ while (wait_idle--);
+
+ if (metal_id < 2) {
+ dmc_digphy_config_ptr = (dmc_reg_t *)dmc_digphy_config;
+ num = ARRAY_SIZE(dmc_digphy_config);
+ } else {
+ dmc_digphy_config_ptr = (dmc_reg_t *)dmc_digphy_eco2_config;
+ num = ARRAY_SIZE(dmc_digphy_eco2_config);
+ }
+
+ for (i = 0; i < num; i++) {
+ if (dll_off)
+ val = dmc_digphy_config_ptr[i].dll_off_val;
+ else
+ val = dmc_digphy_config_ptr[i].dll_on_val;
+
+ writel(val, PHY_REG_BASE + dmc_digphy_config_ptr[i].reg_offset);
+ //printf("reg = %x, val = %x \n",PHY_REG_BASE + dmc_digphy_config_ptr[i].reg_offset, val );
+ }
+#else /* DDR3 */
+ writel(0x00,PHY_REG_BASE + DMC_READY *4);
+ writel(0x01,PHY_REG_BASE + RESET_DDR3 *4);
+
+ if (dll_off)
+ writel(0x01,PHY_REG_BASE + WRITE_DATA_LAT *4);
+
+ writel(0x01,PHY_REG_BASE + DDR3_USED *4);
+ writel(0x03,PHY_REG_BASE + WDELAY_SEL *4);
+
+ if (!dll_off){
+ writel(0x07,PHY_REG_BASE + PHY_RDLAT *4);
+ writel(0x02,PHY_REG_BASE + CTRL_DELAY *4);
+ writel(0x02,PHY_REG_BASE + WRITE_ENABLE_LAT *4);
+ writel(0x03,PHY_REG_BASE + WRITE_DATA_LAT *4);
+ writel(0x03,PHY_REG_BASE + DQOUT_ENABLE_LAT *4);
+ }else
+ writel(0x01,PHY_REG_BASE + DQOUT_ENABLE_LAT *4);
+
+ writel(0x0e,PHY_REG_BASE + DATA_ODT_ENABLE_REG *4);
+ writel(0x0f,PHY_REG_BASE + DATA_WRITE_ENABLE_REG *4);
+
+#endif
+ printf("ddr %d phy init done!\n",(int)DDR_TYPE);
+}
+
+void config_dmc400(UINT16 flag, UINT32 para)
+{
+ int i, wait_idle;
+ UINT32 val, tmp;
+ UINT16 __attribute__((unused)) dll_off, lpw;
+ UINT32 mem_width, col_bits, row_bits, bank_bits;
+#if (DDR_TYPE == 3)
+ UINT16 odt,ron;
+
+ odt = (flag & DDR_FLAGS_ODT_MASK) >> DDR_FLAGS_ODT_SHIFT;
+ ron = (flag & DDR_FLAGS_RON_MASK) >> DDR_FLAGS_RON_SHIFT;
+#endif
+ // parse parameter
+ dll_off = flag & DDR_FLAGS_DLLOFF;
+ lpw = flag & DDR_FLAGS_LOWPWR;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+ bank_bits = (para & DDR_PARA_BANK_BITS_MASK) >> DDR_PARA_BANK_BITS_SHIFT;
+ row_bits = (para & DDR_PARA_ROW_BITS_MASK) >> DDR_PARA_ROW_BITS_SHIFT;
+ col_bits = (para & DDR_PARA_COL_BITS_MASK) >> DDR_PARA_COL_BITS_SHIFT;
+
+ wait_idle = 0x4e;
+ while (wait_idle--);
+ //config MEMC CMD
+ writel(0x0, DMC_REG_BASE + MEMC_CMD);
+
+ //READ MEMC STATUS
+ val = 0;
+ do {
+ val = readl(DMC_REG_BASE + MEMC_STATUS);
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 0);
+
+ for (i = 0; i < ARRAY_SIZE(dmc_reg_cfg); i++) {
+ if (dll_off)
+ val = dmc_reg_cfg[i].dll_off_val;
+ else
+ val = dmc_reg_cfg[i].dll_on_val;
+
+ writel(val, DMC_REG_BASE + dmc_reg_cfg[i].reg_offset);
+ wait_idle = 0x5;
+ while (wait_idle--);
+ /*printf("dmc reg 0x%x = 0x%x\n",
+ (unsigned int)(dmc_reg_cfg[i].reg_offset),(unsigned int)val);*/
+ }
+ //config low power control register
+ if (lpw) {
+ printf("enter low power mode \n");
+ for (i = 0; i < ARRAY_SIZE(dmc_reg_low_power_cfg); i++) {
+ writel(dmc_reg_low_power_cfg[i].dll_off_val,
+ DMC_REG_BASE + dmc_reg_low_power_cfg[i].reg_offset);
+ wait_idle = 0x5;
+ while (wait_idle--);
+ }
+ }
+#ifdef DO_DDR_PLL_DEBUG
+ cmd_input("Dmc400",DMC_REG_BASE);
+#endif
+ //config format control register
+ val = readl(DMC_REG_BASE + FORMAT_CTRL);
+ val &= ~0xf;
+ if (mem_width == 2)
+ val |= 0x2; //for 32bit DDR
+ else if ((mem_width == 1) || (mem_width == 0))
+ val |= 0x1; //for 16bit & 8bit DDR
+ else
+ printf("unsupported DDR width: %lx\n", mem_width);
+ writel(val, DMC_REG_BASE + FORMAT_CTRL);
+
+ printf("format ctrl value: %lx\n", val);
+
+ wait_idle = 0x1d;
+ while (wait_idle--);
+
+ //config address control register
+ if (mem_width == 2)
+ tmp = col_bits; //for 32bit
+ else if (mem_width == 1)
+ tmp = col_bits - 1; //for 16bit
+ else if (mem_width == 0)
+ tmp = col_bits - 2; //for 8bit
+ else {
+ printf("unsupported DDR width: %lx\n", mem_width);
+ tmp = col_bits;
+ }
+ val = (bank_bits << 16) | (row_bits << 8) | tmp;
+ writel(val, DMC_REG_BASE + ADDR_CTRL);
+
+ printf("address ctrl value: %lx\n", val);
+
+ wait_idle = 0x5;
+ while (wait_idle--);
+
+ //config decode control register
+ tmp = 12 - (8 + col_bits + mem_width);
+ if (tmp < 8)
+ val = tmp << 4;
+ else
+ printf("unsupported stripe decode: %lx\n", tmp);
+ writel(val, DMC_REG_BASE + DECODE_CTRL);
+
+ printf("decode ctrl value: %lx\n", val);
+
+ wait_idle = 0x6;
+ while (wait_idle--);
+#if (DDR_TYPE == 2)
+ //config direct command
+ for (i = 0; i < ARRAY_SIZE(ddr_config); i++) {
+ mdelay(1);
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+ writel(ddr_config[i].dll_off_val, DMC_REG_BASE + ddr_config[i].reg_offset);
+/* printf("reg 0x%x = 0x%x\n",
+ (unsigned int)(ddr_config[i].reg_offset),
+ (unsigned int)(ddr_config[i].dll_off_val));*/
+ }
+#else
+ //direct cmd ddr3
+ for (i = 0; i < ARRAY_SIZE(ddr_config); i++) {
+ mdelay(1);
+ wait_idle = DF_DELAY + 0x10;
+ while (wait_idle--);
+ if(i == 3) {
+ //config MR1 ODT [9,6,2] RON [5,1] DLLOFF [0]
+ val = 0x10010000;
+ val |= (odt & 0x4)<<7 | (odt & 0x2)<<5 | (odt & 0x1)<<2;
+ val |= (ron & 0x2)<<4 | (ron & 0x1)<<1;
+ if (dll_off)
+ val |= 0x1;
+ writel(val, DMC_REG_BASE + ddr_config[i].reg_offset);
+ /* printf("MR1 is %x\n", (unsigned int)val);*/
+ } else {
+ writel(ddr_config[i].dll_off_val, DMC_REG_BASE + ddr_config[i].reg_offset);
+ /* printf("reg 0x%x = 0x%x\n",
+ (unsigned int)(ddr_config[i].reg_offset),
+ (unsigned int)(ddr_config[i].dll_off_val));*/
+ }
+ }
+#endif
+#if (DDR_TYPE == 2)
+ show_dram_info();
+#ifdef TGT_AP_SET_DDR_LP_PARAM
+ _ddr_config_low_power_mode();
+ _ddr_set_refresh_timing();
+#endif
+#endif
+ //config MEMC CMD to READY state
+ writel(0x3, DMC_REG_BASE + MEMC_CMD);
+
+ //READ MEMC STATUS
+ val = 0;
+ do {
+ val = readl(DMC_REG_BASE + MEMC_STATUS);
+ //printf("MEMC_STATUS value: %x\n", val);
+ } while (val != 3);
+}
+
+void axi_prio_init(void)
+{
+ writel(0xaa0000aa, 0x20900100);
+ writel(0x00000008, 0x21054100);
+ writel(0x00000008, 0x21054104);
+}
+
+void axi_outstandings_init(void)
+{
+ writel(0x00000060, 0x2104210c);
+ writel(0x00000300, 0x21042110);
+}
+
+int ddr_init(UINT16 flags, UINT32 para)
+{
+ UINT16 dll_off;
+ UINT32 mem_width;
+
+ //axi_prio_init();
+ axi_outstandings_init();
+
+ dll_off = flags & DDR_FLAGS_DLLOFF;
+ mem_width = (para & DDR_PARA_MEM_BITS_MASK) >> DDR_PARA_MEM_BITS_SHIFT;
+
+ switch (mem_width) {
+ case 0:
+ printf("8bit ");
+ break;
+ case 1:
+ printf("16bit ");
+ break;
+ case 2:
+ printf("32bit ");
+ break;
+ }
+ if (dll_off)
+ printf("dll-off Mode ...\n");
+ else
+ printf("dll-on Mode ...\n");
+
+ config_ddr_phy(flags);
+#ifdef DO_DDR_PLL_DEBUG
+ cmd_input("DigPhy", PHY_REG_BASE);
+#endif
+ config_dmc400(flags, para);
+ printf("dram init done ...\n");
+
+ return 0;
+}
diff --git a/board/rda/rda8850e/ddr.h b/board/rda/rda8850e/ddr.h
new file mode 100644
index 0000000000..7481954144
--- /dev/null
+++ b/board/rda/rda8850e/ddr.h
@@ -0,0 +1,50 @@
+#ifndef _SYS_DDR3_H_
+#define _SYS_DDR3_H_
+
+#include "clock_config.h"
+
+/*
+ * defination of ddr flags
+ */
+/* [Debug] DLL off mode, 0 is dll on mode */
+#define DDR_FLAGS_DLLOFF 0x8000
+/* [Debug] LowSpeed mode*/
+#define DDR_FLAGS_RESERVE 0x4000
+/* DDR LowPower mode */
+#define DDR_FLAGS_LOWPWR 0x2000
+/* ODT: 000--Null 001--60 010--120 011--40 100--20 101--30 */
+#define DDR_FLAGS_ODT(n) (((n)<<0)&0x0007)
+#define DDR_FLAGS_ODT_SHIFT 0
+#define DDR_FLAGS_ODT_MASK 0x0007
+/* RON: 00--40 01--30 */
+#define DDR_FLAGS_RON(n) (((n)<<3)&0x0018)
+#define DDR_FLAGS_RON_SHIFT 3
+#define DDR_FLAGS_RON_MASK 0x0018
+
+/*
+ * defination of ddr parameters
+ */
+#define DDR_PARA_CHIP_BITS(n) (((n)<<0)&0x00000003)
+#define DDR_PARA_CHIP_BITS_SHIFT 0
+#define DDR_PARA_CHIP_BITS_MASK 0x00000003
+/* memory width 0--8bit 1--16bit 2--32bit */
+#define DDR_PARA_MEM_BITS(n) (((n)<<2)&0x0000000c)
+#define DDR_PARA_MEM_BITS_SHIFT 2
+#define DDR_PARA_MEM_BITS_MASK 0x0000000c
+/* 2--4banks 3--8banks */
+#define DDR_PARA_BANK_BITS(n) (((n)<<4)&0x000000f0)
+#define DDR_PARA_BANK_BITS_SHIFT 4
+#define DDR_PARA_BANK_BITS_MASK 0x000000f0
+/* 2--13rbs 3--14rbs 4--15rbs 5--16rbs */
+#define DDR_PARA_ROW_BITS(n) (((n)<<8)&0x00000f00)
+#define DDR_PARA_ROW_BITS_SHIFT 8
+#define DDR_PARA_ROW_BITS_MASK 0x00000f00
+/* 0--8cbs 1--9cbs 2--10cbs 3--11cbs 4--12cbs */
+#define DDR_PARA_COL_BITS(n) (((n)<<12)&0x0000f000)
+#define DDR_PARA_COL_BITS_SHIFT 12
+#define DDR_PARA_COL_BITS_MASK 0x0000f000
+
+int ddr_init(UINT16 flags, UINT32 para);
+
+#endif /* _SYS_DDR3_H_ */
+
diff --git a/board/rda/rda8850e/ddr3_init.h b/board/rda/rda8850e/ddr3_init.h
new file mode 100644
index 0000000000..58b5f04aba
--- /dev/null
+++ b/board/rda/rda8850e/ddr3_init.h
@@ -0,0 +1,127 @@
+#ifndef _SYS_DDR_INIT_H_
+#define _SYS_DDR_INIT_H_
+
+#include <common.h>
+#include "ddr.h"
+#include "ddr_init.h"
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+#define DMC_READY 128
+#define USE_ADDR 129
+
+const dmc_reg_t dmc_reg_cfg[] = {
+ {QOSX_CTRL7, 0x08, 0x08},
+ {TURNAROUND_PRIO,0x1A, 0x0},
+ {HIT_PRIO, 0x1A, 0x0},
+ {T_REFI, 0x186, 0x3f},
+ {QUEUE_CTRL, 0xffff, 0x0},
+ {T_RFC, 0x23008c, 0x23008c},
+ {T_RFC, 0x8c008c, 0x8c008c},
+ {T_MRR, 0x4, 0x4},
+ {T_MRW, 0xc, 0xc},
+ {T_RCD, 0x6, 0x6},
+ {T_RAS, 0xf, 0xf},
+ {T_RP, 0x6, 0x6},
+ {T_RPALL, 0x6, 0x5},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x6, 0x6},
+ // {T_RTW, 0x7, 0x6},
+ {T_RTW, 0x0c, 0x6},// turn for now
+ {T_RTW, 0x1f, 0x1f},//for low speed
+ {T_RTP, 0x4, 0x4},
+ {T_WR, 0xf, 0x10},
+ {T_WTR, 0x4000d, 0x4000d},
+ {T_WTR, 0x6000d, 0x6000f},
+ // {T_WTR, 0x6001f, 0x6001f},//for low speed
+ {T_WTW, 0x60000, 0x60000},
+ {RD_LATENCY, 0x5, 0x5},
+ {WR_LATENCY, 0x5, 0x5},
+ {T_RDDATA_EN, 0x8, 0x3},
+ {T_PHYWRLAT, 0x102, 0x102},
+ {T_PHYWRLAT, 0x102, 0x103},
+ {T_EP, 0x3, 0x3},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0xa0003, 0xa0003},
+ {T_ESR, 0x4, 0x4},
+ {T_XSR, 0x1000090, 0x1000090},
+ {T_XSR, 0x2000090, 0x2000090},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ADDR_CTRL, 0x30200, 0x30200},
+
+};
+
+const dmc_reg_t dmc_reg_low_power_cfg[] = {
+ {LOWPWR_CTRL, 0x48, 0x48},
+ {T_ESR, 0xa, 0xa},
+ {T_XSR, 0x200, 0x200},
+ {T_SRCKD, 0xa, 0xa},
+ {T_CKSRD, 0xa, 0xa},
+};
+
+const dmc_reg_t ddr_config[] = {
+ {DIRECT_CMD, 0x0, 0x0},
+ {DIRECT_CMD, 0x10020000, 0x10020008},
+ {DIRECT_CMD, 0x10030000, 0x10030000},
+ {DIRECT_CMD, 0x10010004, 0x10010005},
+ {DIRECT_CMD, 0x10000520, 0x10000520},
+ {DIRECT_CMD, 0x50000400, 0x50000400},
+ {DIRECT_CMD, 0x30000000, 0x30000000},
+};
+
+const dmc_reg_t dmc_digphy_config[] = {
+ {DMC_READY*4, 0x0, 0x0},
+ {RESET_DDR3*4, 0x1, 0x1},
+ {WRITE_DATA_LAT*4, 0x3, 0x1},
+ {DDR3_USED*4, 0x1, 0x1},
+ {WDELAY_SEL*4, 0x3, 0x3},
+// {RDELAY_SEL*4, 0x1, 0x1},
+ {PHY_RDLAT*4, 0x7, 0x7},
+ {CTRL_DELAY*4, 0x2, 0x2},
+ {WRITE_ENABLE_LAT*4, 0x2, 0x2},
+ {DQOUT_ENABLE_LAT*4, 0x3, 0x1},
+ {DATA_WRITE_ENABLE_REG*4, 0xf, 0xf},
+ {DATA_ODT_ENABLE_REG*4, 0xe, 0xe},
+
+};
+
+const dmc_reg_t dmc_digphy_eco2_config[] = {
+ {DMC_READY*4, 0x0, 0x0},
+ {RESET_DDR3*4, 0x1, 0x1},
+ {WRITE_DATA_LAT*4, 0x3, 0x1},
+ {DDR3_USED*4, 0x1, 0x1},
+ {WDELAY_SEL*4, 0x3, 0x3},
+// {RDELAY_SEL*4, 0x1, 0x1},
+ {PHY_RDLAT*4, 0x7, 0x7},
+ {CTRL_DELAY*4, 0x2, 0x2},
+ {WRITE_ENABLE_LAT*4, 0x2, 0x2},
+ {DQOUT_ENABLE_LAT*4, 0x3, 0x1},
+ {DATA_WRITE_ENABLE_REG*4, 0xf, 0xf},
+ {DATA_ODT_ENABLE_REG*4, 0xe, 0xe},
+
+};
+#endif
diff --git a/board/rda/rda8850e/ddr_init.h b/board/rda/rda8850e/ddr_init.h
new file mode 100644
index 0000000000..1d3f4d130f
--- /dev/null
+++ b/board/rda/rda8850e/ddr_init.h
@@ -0,0 +1,114 @@
+#ifndef _SYS_RAM_INIT_H_
+#define _SYS_RAM_INIT_H_
+
+#define MEMC_STATUS 0x000
+#define MEMC_CONFIG 0x004
+#define MEMC_CMD 0x008
+#define ADDR_CTRL 0x010
+#define DECODE_CTRL 0x014
+#define FORMAT_CTRL 0x018
+#define LOWPWR_CTRL 0x020
+#define TURNAROUND_PRIO 0x030
+#define HIT_PRIO 0x034
+//QOS0~QOS15:038~078
+#define QOSX_CTRL0 0x038
+#define QOSX_CTRL1 0x03C
+#define QOSX_CTRL2 0x040
+#define QOSX_CTRL3 0x044
+#define QOSX_CTRL4 0x048
+#define QOSX_CTRL5 0x04C
+#define QOSX_CTRL6 0x050
+#define QOSX_CTRL7 0x054
+#define QOSX_CTRL8 0x058
+#define QOSX_CTRL9 0x05C
+#define QOSX_CTRL10 0x060
+#define QOSX_CTRL11 0x064
+#define QOSX_CTRL12 0x068
+#define QOSX_CTRL13 0x070
+#define QOSX_CTRL14 0x074
+#define QOSX_CTRL15 0x078
+#define TIMEOUT_CTRL 0x07C
+#define QUEUE_CTRL 0x080
+#define WR_PRIO_CTRL 0x088
+#define WR_PRIO_CTRL2 0x08C
+#define RD_PRIO_CTRL 0x090
+#define RD_PRIO_CTRL2 0x094
+#define ACCESS_ADDR_MATCH 0x098
+#define ACCESS_ADDR_MATCH_63_32 0x09C
+#define ACCESS_ADDR_MASK 0x0A0
+#define ACCESS_ADDR_MASK_63_32 0x0A4
+
+#define CHANNEL_STATUS 0x100
+#define DIRECT_CMD 0x108
+#define MR_DATA 0x110
+#define REFRESH_CTRL 0x120
+#define INTR_CTRL 0x128
+#define INTR_CLR 0x130
+#define INTR_STATUS 0x138
+#define INTR_INFO 0x140
+#define ECC_CTRL 0x148
+
+#define T_REFI 0x200
+#define T_RFC 0x204
+#define T_MRR 0x208
+#define T_MRW 0x20C
+#define T_RCD 0x218
+#define T_RAS 0x21C
+#define T_RP 0x220
+#define T_RPALL 0x224
+#define T_RRD 0x228
+#define T_FAW 0x22C
+#define RD_LATENCY 0x230
+#define T_RTR 0x234
+#define T_RTW 0x238
+#define T_RTP 0x23C
+#define WR_LATENCY 0x240
+#define T_WR 0x244
+#define T_WTR 0x248
+#define T_WTW 0x24C
+#define T_ECKD 0x250
+#define T_XCKD 0x254
+#define T_EP 0x258
+#define T_XP 0x25C
+#define T_ESR 0x260
+#define T_XSR 0x264
+#define T_SRCKD 0x268
+#define T_CKSRD 0x26C
+
+#define T_RDDATA_EN 0x300
+#define T_PHYWRLAT 0x304
+#define RDLVL_CTRL 0x308
+#define RDLVL_DIRECT 0x310
+#define T_RDLVL_EN 0x318
+#define T_RDLVL_RR 0x31C
+#define WRLVL_CTRL 0x328
+#define WRLVL_DIRECT 0x330
+#define T_WRLVL_EN 0x338
+#define T_WRLVL_WW 0x33C
+
+#define PHY_PWR_CTRL 0x348
+#define PHY_UPD_CTRL 0x350
+
+#define USER_STATUS 0x400
+#define USER_CONFIG0 0x404
+#define USER_CONFIG1 0x408
+
+#define INTEG_CFG 0xE00
+#define INTEG_OUTPUTS 0xE08
+
+#define PERIPH_ID_0 0xFE0
+#define PERIPH_ID_1 0xFE4
+#define PERIPH_ID_2 0xFE8
+#define PERIPH_ID_3 0xFEC
+#define COMPONENT_ID_0 0xFF0
+#define COMPONENT_ID_1 0xFF4
+#define COMPONENT_ID_2 0xFF8
+#define COMPONENT_ID_3 0xFFC
+
+typedef struct {
+ UINT32 reg_offset;
+ UINT32 dll_on_val;
+ UINT32 dll_off_val;
+} dmc_reg_t;
+
+#endif /* _SYS_RAM_INIT_H_ */
diff --git a/board/rda/rda8850e/debug.h b/board/rda/rda8850e/debug.h
new file mode 100644
index 0000000000..1d4f03bedb
--- /dev/null
+++ b/board/rda/rda8850e/debug.h
@@ -0,0 +1,9 @@
+#ifndef _DEBUG_H_
+#define _DEBUG_H_
+
+void print_u8(u8 ch);
+void print_u16(u16 data);
+void print_u32(u32 data);
+void dump_buf(u8 *buf, u32 size);
+
+#endif /* _DEBUG_H_ */
diff --git a/board/rda/rda8850e/hal_config.c b/board/rda/rda8850e/hal_config.c
new file mode 100644
index 0000000000..1364297b8b
--- /dev/null
+++ b/board/rda/rda8850e/hal_config.c
@@ -0,0 +1,1166 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2013, RDA Microeletronics. //
+// All Rights Reserved //
+// //
+// This source code is the property of RDA Microeletronics and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of RDA Microeletronics. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+// $HeadURL: http://svn.rdamicro.com/svn/developing1/Sources/chip/branches/8810/hal/8810/src/hal_config.c $ //
+// $Author: huazeng $ //
+// $Date: 2013-08-31 17:48:58 +0800 (Sat, 31 Aug 2013) $ //
+// $Revision: 21005 $ //
+// //
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file hal_config.c
+/// Implementation of HAL initialization related with the particular instance
+/// of the IP.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+/* uboot */
+#include <common.h>
+
+/* common */
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/chip_id.h>
+#include <asm/arch/cs_types.h>
+#include <asm/arch/global_macros.h>
+#include <asm/arch/reg_gpio.h>
+
+/* device */
+#include "hal_sys.h"
+#include "halp_sys.h"
+#include "halp_gpio.h"
+#include "bootp_mode.h"
+#include "hal_config.h"
+#include "hal_ap_gpio.h"
+#include "hal_ap_config.h"
+#include <asm/arch/reg_cfg_regs.h>
+
+/* target */
+#include "tgt_board_cfg.h"
+#include "tgt_ap_gpio_setting.h"
+#define HAL_ASSERT(cond, fmt, ...) \
+ if(!(cond)) { \
+ hal_assert(fmt, ##__VA_ARGS__); \
+ g_halConfigError = TRUE; \
+ }
+
+//// =============================================================================
+//// GLOBAL VARIABLES
+//// =============================================================================
+PRIVATE CONST UINT8 g_halCfgSimOrder[] = { TGT_SIM_ORDER };
+PRIVATE HAL_CFG_CONFIG_T hal_cfg = TGT_HAL_CONFIG;
+PRIVATE UINT32 g_bootBootMode = 0;
+PRIVATE BOOL g_halConfigError = FALSE;
+
+
+// =============================================================================
+// FUNCTIONS
+// =============================================================================
+// HAL_ASSERT
+PRIVATE VOID hal_assert(const char *fmt, ...)
+{
+ va_list args;
+ puts("\n#-------Board Mux config found error-------#\n");
+ va_start(args, fmt);
+ vprintf(fmt, args);
+ putc('\n');
+ puts("--------------------------------------------\n\n");
+ va_end(args);
+}
+
+// =============================================================================
+// hal_BoardSimUsed
+// -----------------------------------------------------------------------------
+/// Check whether a SIM card interface is used.
+// ============================================================================
+PRIVATE BOOL hal_BoardSimUsed(UINT32 simId)
+{
+ UINT32 i = 0;
+ //for (UINT32 i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ for (i=0; i<ARRAY_SIZE(g_halCfgSimOrder) && i<NUMBER_OF_SIM; i++)
+ {
+ if (g_halCfgSimOrder[i] == simId)
+ {
+ return TRUE;
+ }
+ }
+
+ return FALSE;
+}
+
+#if 0
+// =============================================================================
+// hal_BoardConfigClk32k
+// -----------------------------------------------------------------------------
+/// Configure CLK_32K output.
+/// @param enable TRUE to configure, and FALSE to disable.
+// ============================================================================
+PROTECTED VOID hal_BoardConfigClk32k(BOOL enable)
+{
+ HAL_ASSERT(g_halCfg->useClk32k == TRUE, "32K clock is not configured");
+
+ if (enable)
+ {
+ // Setup the pin as 32K clock output
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_CLK_32K;
+ }
+ else
+ {
+ // Setup the pin as GPO (and low ouput has been
+ // configured in hal_BoardSetup())
+ hwp_configRegs->Alt_mux_select =
+ (hwp_configRegs->Alt_mux_select & ~CFG_REGS_GPO_2_MASK) |
+ CFG_REGS_GPO_2_GPO_2;
+ }
+}
+#endif
+
+// =============================================================================
+// hal_BoardSetupGeneral
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL for general purpose
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+PROTECTED VOID hal_BoardSetupGeneral(CONST HAL_CFG_CONFIG_T* halCfg)
+{
+ UINT32 altMux = 0;
+
+ UINT32 availableGpo_A = 0;
+
+ UINT32 availableGpio_C = 0;
+ UINT32 availableGpio_A = 0;
+ UINT32 availableGpio_B = 0;
+ UINT32 availableGpio_D = 0;
+
+ UINT32 bootModeGpio_C = 0;
+ UINT32 bootModeGpio_A = 0;
+ UINT32 bootModeGpio_B = 0;
+ UINT32 bootModeGpio_D = 0;
+
+ UINT32 noConnectMask_C = 0;
+ UINT32 noConnectMask_A = 0;
+ UINT32 noConnectMask_B = 0;
+ UINT32 noConnectMask_D = 0;
+
+#ifdef CONFIG_RDA_FPGA
+ // add support for sd card
+ hwp_configRegs->BB_GPIO_Mode &= ~(0x3F<<9);
+#else // !FPGA
+
+ // GPIOs as boot mode pins
+ bootModeGpio_C = HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ bootModeGpio_A = HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6)
+ | HAL_GPIO_BIT(7);
+ bootModeGpio_B = HAL_GPIO_BIT(0);
+ bootModeGpio_D = 0;
+
+ // Available GPIOs
+ availableGpio_C |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ // Volume down/up keys
+ availableGpio_D |= HAL_GPIO_BIT(5)
+ | HAL_GPIO_BIT(6);
+
+ // Boot modes
+ BOOL spiFlashCam = FALSE;
+ BOOL spiFlashNand = FALSE;
+ if (g_bootBootMode & BOOT_MODE_BOOT_SPI)
+ {
+ if (g_bootBootMode & BOOT_MODE_SPI_PIN_NAND)
+ {
+ HAL_ASSERT((g_bootBootMode & BOOT_MODE_BOOT_EMMC),
+ "Emmc boot pin should be pulled up to boot on SPI flash over NAND pins");
+ spiFlashNand = TRUE;
+ }
+ else
+ {
+ spiFlashCam = TRUE;
+ }
+ }
+
+ if ((g_bootBootMode & (BOOT_MODE_BOOT_EMMC|BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_EMMC)
+ {
+ // Boot from EMMC
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 should be used");
+ }
+
+ if ( (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_BOOT_SPI_NAND))
+ == BOOT_MODE_BOOT_SPI_NAND ||
+ (g_bootBootMode & (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L))
+ == (BOOT_MODE_BOOT_SPI|BOOT_MODE_NAND_PAGE_SIZE_L)
+ )
+ {
+ // Boot from SDMMC1
+ HAL_ASSERT(halCfg->sdmmcCfg.sdmmcUsed, "SDMMC1 should be used");
+ }
+
+ // For convenience, we do not consider spiFlashCam at present.
+ // We assume that SPI flash always uses parallel nand pins.
+#if 0
+ BOOL parallelNandUsed = halCfg->parallelNandUsed;
+#else
+ BOOL parallelNandUsed = !spiFlashNand && !halCfg->sdmmcCfg.sdmmc3Used;
+#endif
+ BOOL nand8_15Cam = FALSE;
+ BOOL nand8_15Lcd = FALSE;
+ if ((g_bootBootMode & BOOT_MODE_BOOT_EMMC) == 0)
+ {
+ // If BOOT_MODE_BOOT_EMMC is not set, the parallel NAND pins
+ // are multiplexed to parallel NAND controller
+ HAL_ASSERT(parallelNandUsed, "Parallel NAND should be used");
+ if ((g_bootBootMode & BOOT_MODE_NAND_8BIT) == 0)
+ {
+ if (g_bootBootMode & BOOT_MODE_NAND_HIGH_PIN_CAM)
+ {
+ nand8_15Cam = TRUE;
+ }
+ else
+ {
+ nand8_15Lcd = TRUE;
+ }
+ }
+ }
+
+ HAL_ASSERT(!(parallelNandUsed && spiFlashNand), "SPI flash uses parallel NAND pins");
+ HAL_ASSERT(!(nand8_15Cam && spiFlashCam), "NAND 8-15 bits and SPI flash both use cam pins");
+
+ if (!(parallelNandUsed || spiFlashNand))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29);
+ availableGpio_D |= HAL_GPIO_BIT(4);
+ }
+
+ const HAL_CFG_CAM_T *camCfg = &halCfg->camCfg;
+ const HAL_LCD_MODE_T lcdMode = halCfg->goudaCfg.lcdMode;
+
+ // LCD
+ if (lcdMode == HAL_LCD_MODE_PARALLEL_16BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ altMux |= CFG_REGS_LCD_MODE_PARALLEL_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_DSI)
+ {
+ altMux |= CFG_REGS_LCD_MODE_DSI;
+ availableGpio_A |= HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23);
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_16BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ altMux |= CFG_REGS_LCD_MODE_RGB_16BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_RGB_24BIT)
+ {
+ HAL_ASSERT(!nand8_15Lcd, "NAND uses LCD 8-15 bits");
+ if (halCfg->goudaCfg.lcd16_23Cam)
+ {
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_PARALLEL &&
+ (camCfg->camUsed || camCfg->cam1Used)),
+ "Parallel camera uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam),
+ "I2C2 uses LCD 22-23 bits");
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses LCD 16-21 bits");
+ HAL_ASSERT(!nand8_15Cam, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(
+ !(camCfg->camMode == HAL_CAM_MODE_CSI &&
+ ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))),
+ "Camera CSI1 uses LCD 16-21 bits");
+ //altMux |= CFG_REGS_LCD24_CAM_CAM_IO;
+ }
+ else
+ {
+ HAL_ASSERT(!parallelNandUsed, "NAND uses LCD 16-23 bits");
+ HAL_ASSERT(!halCfg->sdmmcCfg.sdmmc3Used, "SDMMC3 uses LCD 16-23 bits");
+ //altMux |= CFG_REGS_LCD24_CAM_NAND_IO;
+ }
+ altMux |= CFG_REGS_LCD_MODE_RGB_24BIT;
+ }
+ else if (lcdMode == HAL_LCD_MODE_SPI)
+ {
+ HAL_ASSERT(!(halCfg->goudaCfg.cs0Used || halCfg->goudaCfg.cs1Used),
+ "LCD CS 0/1 use SPI LCD pins");
+ HAL_ASSERT((halCfg->usedGpo_A & 0x18) == 0, "GPO 3/4 use SPI LCD pins");
+ altMux |= CFG_REGS_SPI_LCD_SPI_LCD;
+ availableGpio_A |= HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21);
+ }
+ else
+ {
+ HAL_ASSERT(FALSE, "Lcd mode not defined!");
+ }
+
+ if (lcdMode == HAL_LCD_MODE_DSI || lcdMode == HAL_LCD_MODE_SPI)
+ {
+ if (nand8_15Lcd)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(24)
+ | HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27)
+ | HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+ }
+
+ if (halCfg->goudaCfg.cs0Used)
+ {
+ altMux |= CFG_REGS_GPO_4_LCD_CS_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_4_GPO_4;
+ availableGpo_A |= HAL_GPO_BIT(4);
+ }
+
+ if (halCfg->goudaCfg.cs1Used)
+ {
+ altMux |= CFG_REGS_GPO_3_LCD_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_3_GPO_3;
+ availableGpo_A |= HAL_GPO_BIT(3);
+ }
+
+ // I2C
+ if (!halCfg->i2cCfg.i2cUsed)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(30)
+ | HAL_GPIO_BIT(31);
+ }
+
+ if (halCfg->i2cCfg.i2c2Used)
+ {
+ if (halCfg->i2cCfg.i2c2PinsCam)
+ {
+ if (camCfg->camUsed)
+ {
+ HAL_ASSERT(camCfg->camPdnRemap == GPIO_NONE &&
+ camCfg->camRstRemap == GPIO_NONE,
+ "Cam uses PDN/RST pins");
+ }
+ if (camCfg->cam1Used)
+ {
+ HAL_ASSERT(camCfg->cam1PdnRemap == GPIO_NONE &&
+ camCfg->cam1RstRemap == GPIO_NONE,
+ "Cam1 uses PDN/RST pins");
+ }
+ HAL_ASSERT(!nand8_15Cam, "NAND uses cam PDN/RST pins");
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ altMux |= CFG_REGS_CAM_I2C2_I2C2;
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ }
+ }
+ else
+ {
+ // I2C2 does not use cam pins
+ altMux |= CFG_REGS_CAM_I2C2_CAM;
+ availableGpio_A |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1);
+ }
+
+ if (halCfg->i2cCfg.i2c3Used)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x18) == 0, "Keyout 3/4 use I2C3 pins");
+ altMux |= CFG_REGS_KEYOUT_3_4_I2C3;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYOUT_3_4_KEYOUT_3_4;
+ if ((halCfg->keyOutMask & 0x8) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(6);
+ }
+ if ((halCfg->keyOutMask & 0x10) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // Camera
+ if (camCfg->camUsed || camCfg->cam1Used)
+ {
+ if(camCfg->camMode == HAL_CAM_MODE_PARALLEL)
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses cam pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use cam pins");
+ altMux |= CFG_REGS_CSI2_PARALLEL_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(24);
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_SPI)
+ {
+ altMux |= CFG_REGS_CSI2_SPI_CAM;
+ availableGpio_B |= HAL_GPIO_BIT(14);
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ else if (camCfg->camMode == HAL_CAM_MODE_CSI)
+ {
+ if ((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_1) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_1))
+ {
+ HAL_ASSERT(!spiFlashCam, "SPI flash uses CSI1 pins");
+ HAL_ASSERT(!nand8_15Cam, "NAND 8-15 bits use CSI1 pins");
+ }
+ else
+ {
+ // CSI1 is unused
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT &&
+ halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+ altMux |= CFG_REGS_CSI2_CSI2;
+ // If CSI2 is unused
+ if (!((camCfg->camUsed && camCfg->camCsiId == HAL_CAM_CSI_2) ||
+ (camCfg->cam1Used && camCfg->cam1CsiId == HAL_CAM_CSI_2)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ }
+ }
+ else
+ {
+ HAL_ASSERT(FALSE,"Invalid cam mode: %d", camCfg->camMode);
+ }
+
+ // Cam PDN/RST pins
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ if (!((camCfg->camUsed && camCfg->camRstRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1RstRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10);
+ }
+ if (!((camCfg->camUsed && camCfg->camPdnRemap == GPIO_NONE) ||
+ (camCfg->cam1Used && camCfg->cam1PdnRemap == GPIO_NONE)))
+ {
+ availableGpio_B |= HAL_GPIO_BIT(11);
+ availableGpio_B |= HAL_GPIO_BIT(3);
+ }
+ }
+ }
+ else // cam is unused
+ {
+ availableGpio_B |= HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(14)
+ | HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19);
+ if (!(nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam) ||
+ (halCfg->i2cCfg.i2c2Used && halCfg->i2cCfg.i2c2PinsCam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11);
+ }
+ if (!(spiFlashCam || nand8_15Cam ||
+ (lcdMode == HAL_LCD_MODE_RGB_24BIT && halCfg->goudaCfg.lcd16_23Cam)
+ )
+ )
+ {
+ availableGpio_B |= HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(20)
+ | HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ }
+ }
+
+ // UART 1 Pin configuration
+ switch (halCfg->uartCfg[0])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ availableGpio_C |= HAL_GPIO_BIT(6);
+ availableGpio_A |= HAL_GPIO_BIT(14);
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART1 TXD, RXD
+ altMux |= CFG_REGS_KEYOUT_7_KEYOUT_7;
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(15);
+ }
+ if ((halCfg->keyInMask & 0x80) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(16);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART1 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ // use UART1 TXD, RXD, CTS, RTS, RI, DSR, DCD, DTR
+ HAL_ASSERT((halCfg->keyInMask & 0x80) == 0, "Keyin 7 uses UART1 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x80) == 0, "Keyout 7 uses UART1 RTS");
+ HAL_ASSERT(!halCfg->hostUartUsed, "Host UART uses UART1 DCD/DTR");
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART 2 must be unused to use UART1 Modem lines.");
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART1 DSR");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART1 RI");
+ altMux |= CFG_REGS_KEYOUT_7_UART1_RTS
+ | CFG_REGS_UART1_8LINE_UART1_8_LINE;
+ break;
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart 1 Configuration (%d).",
+ halCfg->uartCfg[0]);
+ break;
+ }
+
+ // Host UART
+ if (halCfg->hostUartUsed)
+ {
+ HAL_ASSERT(halCfg->uartCfg[1] == HAL_UART_CONFIG_NONE,
+ "UART2 uses host UART RXD/TXD.");
+ }
+
+ // UART 2 Pin configuration
+ switch (halCfg->uartCfg[1])
+ {
+ case HAL_UART_CONFIG_NONE:
+ altMux |= CFG_REGS_UART2_HOST_UART
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if (halCfg->uartCfg[0] != HAL_UART_CONFIG_MODEM)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(7)
+ | HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART2 TXD, RXD
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_KEYOUT_6;
+ if ((halCfg->keyInMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(8);
+ }
+ if ((halCfg->keyOutMask & 0x40) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(9);
+ }
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART2 TXD, RXD, CTS, RTS
+ HAL_ASSERT((halCfg->keyInMask & 0x40) == 0, "Keyin 6 uses UART2 CTS");
+ HAL_ASSERT((halCfg->keyOutMask & 0x40) == 0, "Keyout 6 uses UART2 RTS");
+ altMux |= CFG_REGS_UART2_UART2
+ | CFG_REGS_KEYOUT_6_UART2_RTS;
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart2 Configuration (%d).",
+ halCfg->uartCfg[1]);
+ break;
+ }
+
+ // UART 3 Pin configuration
+ switch (halCfg->uartCfg[2])
+ {
+ case HAL_UART_CONFIG_NONE:
+ availableGpio_D |= HAL_GPIO_BIT(0)
+ | HAL_GPIO_BIT(1)
+ | HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_DATA:
+ // use UART3 TXD, RXD
+ availableGpio_D |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3);
+ break;
+ case HAL_UART_CONFIG_FLOWCONTROL:
+ // use UART3 TXD, RXD, CTS, RTS
+ break;
+ case HAL_UART_CONFIG_MODEM:
+ default:
+ HAL_ASSERT(FALSE,
+ "Invalid Uart3 Configuration (%d).",
+ halCfg->uartCfg[2]);
+ break;
+ }
+
+ // I2S
+ altMux |= CFG_REGS_DAI_I2S;
+ if (halCfg->i2sCfg.di0Used || halCfg->i2sCfg.di1Used ||
+ halCfg->i2sCfg.di2Used || halCfg->i2sCfg.doUsed)
+ {
+ if (!halCfg->i2sCfg.di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(11);
+ }
+ if (!halCfg->i2sCfg.di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(12);
+ }
+ if (halCfg->i2sCfg.di2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x4) == 0, "Keyin 2 uses I2S DI2");
+ altMux |= CFG_REGS_I2S_DI_2_I2S_DI_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_I2S_DI_2_KEYIN_2;
+ if ((halCfg->keyInMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(2);
+ }
+ }
+ if (!halCfg->i2sCfg.doUsed)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(13);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13);
+ }
+
+ // LPS CO1
+ if (halCfg->useLpsCo1)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x10) == 0, "Keyin 4 uses LPS_CO1");
+ altMux |= CFG_REGS_LPSCO_1_LPSCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_LPSCO_1_KEYIN_4;
+ if ((halCfg->keyInMask & 0x10) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(7);
+ }
+ }
+
+ // TCO
+ if (halCfg->usedTco & 0x1)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x1) == 0, "Keyout 0 uses TCO0");
+ altMux |= CFG_REGS_TCO_0_TCO_0;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_0_KEYOUT_0;
+ if ((halCfg->keyOutMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(3);
+ }
+ }
+
+ if (halCfg->usedTco & 0x2)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x2) == 0, "Keyout 1 uses TCO1");
+ altMux |= CFG_REGS_TCO_1_TCO_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_1_KEYOUT_1;
+ if ((halCfg->keyOutMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(4);
+ }
+ }
+
+ if (halCfg->usedTco & 0x4)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x4) == 0, "Keyout 2 uses TCO2");
+ altMux |= CFG_REGS_TCO_2_TCO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_TCO_2_KEYOUT_2;
+ if ((halCfg->keyOutMask & 0x4) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(5);
+ }
+ }
+
+ // PWM
+ if (halCfg->pwmCfg.pwtUsed)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x20) == 0, "Keyin 5 uses PWT");
+ altMux |= CFG_REGS_GPO_0_PWT;
+ }
+ else if (halCfg->keyInMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_0_KEYIN_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_0_GPO_0;
+ availableGpo_A |= HAL_GPO_BIT(0);
+ }
+
+ if (halCfg->pwmCfg.lpgUsed)
+ {
+ HAL_ASSERT((halCfg->keyOutMask & 0x20) == 0, "Keyout 5 uses LPG");
+ altMux |= CFG_REGS_GPO_1_LPG;
+ }
+ else if (halCfg->keyOutMask & 0x20)
+ {
+ altMux |= CFG_REGS_GPO_1_KEYOUT_5;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_1_GPO_1;
+ availableGpo_A |= HAL_GPO_BIT(1);
+ }
+
+ if (halCfg->pwmCfg.pwl1Used)
+ {
+ HAL_ASSERT(!halCfg->useClk32k, "Clk 32k uses PWL1");
+ altMux |= CFG_REGS_GPO_2_PWL_1;
+ }
+ else if (halCfg->useClk32k)
+ {
+ // Default to GPO low output
+ // 32K clock will be enabled per request
+ //altMux |= CFG_REGS_GPO_2_CLK_32K;
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_GPO_2_GPO_2;
+ availableGpo_A |= HAL_GPO_BIT(2);
+ }
+
+ // Clock out and host clock
+ if (halCfg->clkOutUsed)
+ {
+ HAL_ASSERT(!halCfg->hostClkUsed, "HST_CLK uses CLK_OUT pin");
+ altMux |= CFG_REGS_CLK_OUT_CLK_OUT;
+ }
+ else if (halCfg->hostClkUsed)
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ }
+ else
+ {
+ altMux |= CFG_REGS_CLK_OUT_HST_CLK;
+ availableGpo_A |= HAL_GPO_BIT(8);
+ }
+
+ // SPI
+ if (halCfg->spiCfg[0].cs0Used || halCfg->spiCfg[0].cs1Used ||
+ halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT(!(halCfg->modemSpiCfg[0].cs0Used ||
+ halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used), "Modem SPI1 is in use");
+ altMux |= CFG_REGS_AP_SPI1_AP_SPI1;
+ if (!halCfg->spiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->spiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (halCfg->spiCfg[0].cs2Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x2) == 0, "Keyin 1 uses SPI1 CS2");
+ altMux |= CFG_REGS_SPI1_CS_2_SPI1_CS_2;
+ }
+ else
+ {
+ altMux |= CFG_REGS_SPI1_CS_2_KEYIN_1;
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ if (!halCfg->spiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->spiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else // AP SPI1 unused
+ {
+ altMux |= CFG_REGS_AP_SPI1_BB_SPI1;
+ if (halCfg->modemSpiCfg[0].cs0Used || halCfg->modemSpiCfg[0].cs1Used ||
+ halCfg->modemSpiCfg[0].cs2Used)
+ {
+ if (!halCfg->modemSpiCfg[0].cs0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(22);
+ }
+ if (!halCfg->modemSpiCfg[0].cs1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ }
+ if (!halCfg->modemSpiCfg[0].di0Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(23);
+ }
+ if (!halCfg->modemSpiCfg[0].di1Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(24);
+ }
+ }
+ else
+ {
+ availableGpio_A |= HAL_GPIO_BIT(17);
+ availableGpio_C |= HAL_GPIO_BIT(21)
+ | HAL_GPIO_BIT(22)
+ | HAL_GPIO_BIT(23)
+ | HAL_GPIO_BIT(24);
+ if ((halCfg->keyInMask & 0x2) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(1);
+ }
+ }
+ }
+ if (halCfg->spiCfg[1].cs0Used || halCfg->spiCfg[1].cs1Used)
+ {
+ if (!halCfg->spiCfg[1].cs0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(5);
+ }
+ if (halCfg->spiCfg[1].cs1Used)
+ {
+ HAL_ASSERT((halCfg->keyInMask & 0x8) == 0, "Keyin 3 uses SPI2 CS1");
+ altMux |= CFG_REGS_KEYIN_3_SPI2_CS_1;
+ }
+ else
+ {
+ altMux |= CFG_REGS_KEYIN_3_KEYIN_3;
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+ if (!halCfg->spiCfg[1].di0Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(3);
+ }
+ if (!halCfg->spiCfg[1].di1Used)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(4);
+ }
+ }
+ else // AP SPI2 unused
+ {
+ availableGpio_A |= HAL_GPIO_BIT(2)
+ | HAL_GPIO_BIT(3)
+ | HAL_GPIO_BIT(4)
+ | HAL_GPIO_BIT(5);
+ if ((halCfg->keyInMask & 0x8) == 0)
+ {
+ availableGpio_A |= HAL_GPIO_BIT(6);
+ }
+ }
+
+ // Standalone keyin/out
+ if ((halCfg->keyInMask & 0x1) == 0)
+ {
+ availableGpio_B |= HAL_GPIO_BIT(0);
+ }
+
+ // SDMMC
+ if (!halCfg->sdmmcCfg.sdmmcUsed)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(9)
+ | HAL_GPIO_BIT(10)
+ | HAL_GPIO_BIT(11)
+ | HAL_GPIO_BIT(12)
+ | HAL_GPIO_BIT(13)
+ | HAL_GPIO_BIT(14);
+ }
+ if (!halCfg->sdmmcCfg.sdmmc2Used)
+ {
+ availableGpio_C |= HAL_GPIO_BIT(15)
+ | HAL_GPIO_BIT(16)
+ | HAL_GPIO_BIT(17)
+ | HAL_GPIO_BIT(18)
+ | HAL_GPIO_BIT(19)
+ | HAL_GPIO_BIT(20);
+ }
+ HAL_ASSERT(!(parallelNandUsed && halCfg->sdmmcCfg.sdmmc3Used),
+ "Parallel NAND uses SDMMC3 pins");
+
+ // SIM
+ if (!hal_BoardSimUsed(2))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(25)
+ | HAL_GPIO_BIT(26)
+ | HAL_GPIO_BIT(27);
+ }
+
+ if (!hal_BoardSimUsed(3))
+ {
+ availableGpio_C |= HAL_GPIO_BIT(28)
+ | HAL_GPIO_BIT(29)
+ | HAL_GPIO_BIT(30);
+ }
+
+ UINT32 gpioMask;
+ // GPIO_C mask check
+ gpioMask = ~availableGpio_C & halCfg->usedGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO C are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_C & halCfg->noConnectGpio_C;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO C declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_C &
+ (~halCfg->usedGpio_C & ~halCfg->noConnectGpio_C);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO C declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_A mask check
+ gpioMask = ~availableGpio_A & halCfg->usedGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO A are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_A & halCfg->noConnectGpio_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO A declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_A &
+ (~halCfg->usedGpio_A & ~halCfg->noConnectGpio_A);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO A declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_B mask check
+ gpioMask = ~availableGpio_B & halCfg->usedGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO B are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_B & halCfg->noConnectGpio_B;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO B declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_B &
+ (~halCfg->usedGpio_B & ~halCfg->noConnectGpio_B);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO B declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPIO_D mask check
+ gpioMask = ~availableGpio_D & halCfg->usedGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPIO D are not available (0x%x)",
+ gpioMask);
+ gpioMask = ~availableGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are not available (0x%x)",
+ gpioMask);
+ gpioMask = halCfg->usedGpio_D & halCfg->noConnectGpio_D;
+ HAL_ASSERT(gpioMask == 0,
+ "Some GPIO D declared as not connected are used (0x%x)",
+ gpioMask);
+#ifdef CHECK_GPIO_ALT_FUNC
+ gpioMask = availableGpio_D &
+ (~halCfg->usedGpio_D & ~halCfg->noConnectGpio_D);
+ HAL_ASSERT(gpioMask == 0,
+ "Some available GPIO D declared as alt function (0x%x)",
+ gpioMask);
+#endif
+
+ // GPO_A mask check
+ gpioMask = ~availableGpo_A & halCfg->usedGpo_A;
+ HAL_ASSERT(gpioMask == 0,
+ "Some used GPO A are not available (0x%x)",
+ gpioMask);
+
+#endif // !FPGA
+
+ // Set IO drive
+ hwp_configRegs->IO_Drive1_Select = halCfg->ioDrive.select1;
+ hwp_configRegs->IO_Drive2_Select = halCfg->ioDrive.select2;
+
+ // Set the not connected ones as output and drive 0
+ // But keep boot mode GPIOs as input to avoid current leakage
+ noConnectMask_C = halCfg->noConnectGpio_C & ~bootModeGpio_C;
+ noConnectMask_A = halCfg->noConnectGpio_A & ~bootModeGpio_A;
+ noConnectMask_B = halCfg->noConnectGpio_B & ~bootModeGpio_B;
+ noConnectMask_D = halCfg->noConnectGpio_D & ~bootModeGpio_D;
+
+ hwp_gpio->gpio_clr = noConnectMask_C;
+ hwp_gpio->gpio_oen_set_out = noConnectMask_C;
+
+ hwp_apGpioA->gpio_clr = noConnectMask_A;
+ hwp_apGpioA->gpio_oen_set_out = noConnectMask_A;
+
+ hwp_apGpioB->gpio_clr = noConnectMask_B;
+ hwp_apGpioB->gpio_oen_set_out = noConnectMask_B;
+
+ hwp_apGpioD->gpio_clr = noConnectMask_D;
+ hwp_apGpioD->gpio_oen_set_out = noConnectMask_D;
+
+ // Init GPO_A values
+ if (halCfg->useClk32k)
+ {
+ // Init 32K clock pin to low (by setting up GPO)
+ hwp_apGpioA->gpo_clr = availableGpo_A
+ | HAL_GPO_BIT(2);
+ }
+ else
+ {
+ /* if GPO_1 used for usb id, it should be high */
+ #if defined(_TGT_AP_GPIO_USBID_CTRL)
+ hwp_apGpioA->gpo_clr = availableGpo_A & ~0x2;
+ #else
+ hwp_apGpioA->gpo_clr = availableGpo_A;
+ #endif
+ }
+
+ // Configure MUX after initializing all the GPO pins
+ // (GPIO pins are in input mode by default)
+
+ // Set GPIO mode
+ hwp_configRegs->BB_GPIO_Mode = availableGpio_C;
+ hwp_configRegs->AP_GPIO_A_Mode = availableGpio_A;
+ hwp_configRegs->AP_GPIO_B_Mode = availableGpio_B;
+ hwp_configRegs->AP_GPIO_D_Mode = availableGpio_D;
+ // Set Alt Mux configuration
+ hwp_configRegs->Alt_mux_select = altMux;
+
+ // --------------------------------------------------
+ // As of now, all connected GPIOs, which are as GPIO
+ // or not used at all but connected are configured as
+ // GPIOs in input mode, except for Gouda reset pins
+ // --------------------------------------------------
+
+}
+
+
+// =============================================================================
+// hal_BoardSetup
+// -----------------------------------------------------------------------------
+/// Apply board dependent configuration to HAL
+/// @param halCfg Pointer to HAL configuration structure (from the target
+/// module).
+// ============================================================================
+//PROTECTED VOID hal_BoardSetup(CONST HAL_CFG_CONFIG_T* halCfg)
+PUBLIC INT32 hal_BoardSetup(INT8 run_mode)
+{
+ g_bootBootMode = rda_hwcfg_get();
+ hal_BoardSetupGeneral(&hal_cfg);
+
+ if(g_halConfigError)
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
diff --git a/board/rda/rda8850e/lpddr2_init.h b/board/rda/rda8850e/lpddr2_init.h
new file mode 100644
index 0000000000..8e7dc70d62
--- /dev/null
+++ b/board/rda/rda8850e/lpddr2_init.h
@@ -0,0 +1,114 @@
+#ifndef _SYS_DDR_INIT_H_
+#define _SYS_DDR_INIT_H_
+
+#include <common.h>
+#include "ddr.h"
+#include "ddr_init.h"
+
+#define PHY_RDLAT 0
+#define PHYWRDATA 1
+#define STA 3
+#define CLKSEL 4
+#define PSSTART 5
+#define PSDONE 6
+#define LOCKED 6
+#define CTRL_DELAY 7
+#define RDELAY_SEL 8
+#define WDELAY_SEL 9
+#define PHY_RESET 10
+#define RESET_DDR3 11
+#define ODT_DELAY 12
+#define DDR3_USED 13
+#define WRITE_ENABLE_LAT 14
+#define WRITE_DATA_LAT 15
+#define DQOUT_ENABLE_LAT 16
+#define DATA_ODT_ENABLE_REG 20
+#define DATA_WRITE_ENABLE_REG 48
+#define DMC_READY 128
+#define USE_ADDR 129
+
+const dmc_reg_t dmc_reg_cfg[] = {
+ {T_REFI, 0x90, 0x90},
+ {T_RFC, 0x2F0016, 0x2F0016},
+ {T_MRR, 0x2, 0x2},
+ {T_MRW, 0x5, 0x5},
+ {T_RCD, 0x8, 0x8},
+ {T_RAS, 0x11, 0x11},
+ {T_RP, 0x8, 0x8},
+ {T_RPALL, 0x9, 0x9},
+ {T_RRD, 0x4, 0x4},
+ {T_FAW, 0x14, 0x14},
+ {T_RTR, 0x4, 0x4},
+ {T_RTW, 0x0F, 0x0F},
+ {T_RTP, 0x6, 0x6},
+ {T_WR, 0xE, 0xE},
+ {T_WTR, 0x1F000F, 0x1F000F},
+ {T_WTW, 0x40000, 0x40000},
+ {RD_LATENCY, 0x8, 0x8},
+ {WR_LATENCY, 0x4, 0x4},
+ {T_RDDATA_EN, 0x9, 0x9},
+ {T_PHYWRLAT, 0x103, 0x103},
+ {T_XP, 0x20003, 0x20003},
+ {T_XP, 0x80003, 0x80003},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x580032, 0x580032},
+ {T_SRCKD, 0x5, 0x5},
+ {T_CKSRD, 0x5, 0x5},
+ {T_ECKD, 0x5, 0x5},
+ {T_XCKD, 0x5, 0x5},
+ {T_EP, 0x5, 0x5},
+ {RDLVL_CTRL, 0x1010, 0x1010},
+ {RDLVL_CTRL, 0x1110, 0x1110},
+ {RDLVL_CTRL, 0x11110, 0x11110},
+ {REFRESH_CTRL, 0x1, 0x1},
+ {ECC_CTRL, 0x0, 0x0},
+ {ADDR_CTRL, 0x30200, 0x30200},
+ {ECC_CTRL, 0x0, 0x0},
+ {QOSX_CTRL6, 0x9, 0x9}, //set qos priority 9 for modem
+ {QUEUE_CTRL, 0x10, 0x10},//reserve 1 queue for modem
+};
+
+const dmc_reg_t dmc_reg_low_power_cfg[] = {
+ {LOWPWR_CTRL, 0x48, 0x48},
+ {T_ESR, 0x6, 0x6},
+ {T_XSR, 0x32, 0x32},
+ {T_SRCKD, 0xa, 0xa},
+ {T_CKSRD, 0xa, 0x5},
+};
+
+const dmc_reg_t ddr_config[] = {
+ {DIRECT_CMD, 0x0, 0x0},
+ {DIRECT_CMD, 0x1000003f, 0x1000003f},
+ {DIRECT_CMD, 0x1000ff0a, 0x1000ff0a},
+ {DIRECT_CMD, 0x10008301, 0x10008301},
+ {DIRECT_CMD, 0x10000602, 0x10000602},
+ {DIRECT_CMD, 0x10000103, 0x10000103},
+ {DIRECT_CMD, 0x30000000, 0x30000000},
+};
+
+const dmc_reg_t dmc_digphy_config[] = {
+ {USE_ADDR*4, 0x0, 0x0},
+ {WDELAY_SEL*4, 0x3, 0x3},
+ {RDELAY_SEL*4, 0x6, 0x6},
+ {DQOUT_ENABLE_LAT*4, 0x1, 0x1},
+ {DATA_WRITE_ENABLE_REG*4, 0xf, 0xf},
+#ifdef CONFIG_RDA_FPGA
+ {DATA_ODT_ENABLE_REG*4, 0xe, 0xe},
+#else
+ {DATA_ODT_ENABLE_REG*4, 0xf, 0xf},
+#endif
+};
+
+const dmc_reg_t dmc_digphy_eco2_config[] = {
+ {USE_ADDR*4, 0x0, 0x0},
+ {WDELAY_SEL*4, 0x7, 0x7},
+ {RDELAY_SEL*4, 0x6, 0x6},
+ {DQOUT_ENABLE_LAT*4, 0x3, 0x3},
+ {DATA_WRITE_ENABLE_REG*4, 0xf, 0xf},
+#ifdef CONFIG_RDA_FPGA
+ {DATA_ODT_ENABLE_REG*4, 0xe, 0xe},
+#else
+ {DATA_ODT_ENABLE_REG*4, 0xf, 0xf},
+#endif
+};
+#endif
diff --git a/board/rda/rda8850e/u-boot-spl.lds b/board/rda/rda8850e/u-boot-spl.lds
new file mode 100644
index 0000000000..afe35fd2a8
--- /dev/null
+++ b/board/rda/rda8850e/u-boot-spl.lds
@@ -0,0 +1,35 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00100100;
+ . = ALIGN(4);
+ .text :
+ {
+ __start = .;
+ arch/arm/cpu/armv7/start.o (.text)
+ *(.text)
+ }
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+ . = ALIGN(4);
+ . = .;
+ . = ALIGN(4);
+ __image_copy_end = .;
+ _end = .;
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start = .;
+ *(.bss*)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ ASSERT((ABSOLUTE(__bss_end__) < 0x00110000), \
+ "too big data in spl, don't exceed intrenal ram");
+ }
+}
diff --git a/board/rda/rdaarm926ejs/Makefile b/board/rda/rdaarm926ejs/Makefile
new file mode 100644
index 0000000000..f78058b490
--- /dev/null
+++ b/board/rda/rdaarm926ejs/Makefile
@@ -0,0 +1,53 @@
+#
+# (C) Copyright 2000, 2001, 2002
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+COBJS-$(CONFIG_MACH_RDAARM926EJS) += rdaarm926ejs.o misc.o
+
+COBJS := $(COBJS-y)
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+clean:
+ rm -f $(SOBJS) $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak *~ .depend
+
+#########################################################################
+# This is for $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/rda/rdaarm926ejs/misc.c b/board/rda/rdaarm926ejs/misc.c
new file mode 100644
index 0000000000..00b67fe49f
--- /dev/null
+++ b/board/rda/rdaarm926ejs/misc.c
@@ -0,0 +1,22 @@
+#include <common.h>
+#include <asm/arch/hardware.h>
+#include <asm/io.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+int dram_init(void)
+{
+ /* dram_init must store complete ramsize in gd->ram_size */
+ gd->ram_size = get_ram_size(
+ (volatile void *)CONFIG_SYS_SDRAM_BASE,
+ CONFIG_MAX_RAM_BANK_SIZE);
+ icache_enable();
+ return 0;
+}
+
+void dram_init_banksize(void)
+{
+ gd->bd->bi_dram[0].start = CONFIG_SYS_SDRAM_BASE;
+ gd->bd->bi_dram[0].size = gd->ram_size;
+}
+
diff --git a/board/rda/rdaarm926ejs/rdaarm926ejs.c b/board/rda/rdaarm926ejs/rdaarm926ejs.c
new file mode 100644
index 0000000000..97c7959603
--- /dev/null
+++ b/board/rda/rdaarm926ejs/rdaarm926ejs.c
@@ -0,0 +1,67 @@
+#include <common.h>
+#include <asm/arch/hardware.h>
+#include <asm/io.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+void rda_dump_buf(char *data, size_t len)
+{
+ char temp_buf[64];
+ size_t i, off = 0;
+
+ memset(temp_buf, 0, 64);
+ for (i=0;i<len;i++) {
+ if(i%8 == 0) {
+ sprintf(&temp_buf[off], " ");
+ off += 2;
+ }
+ sprintf(&temp_buf[off], "%02x ", data[i]);
+ off += 3;
+ if((i+1)%16 == 0 || (i+1) == len) {
+ printf("%s\n", temp_buf);
+ memset(temp_buf, 0, 64);
+ off = 0;
+ }
+ }
+ printf("\n");
+}
+
+/*
+ * get_board_rev() - setup to pass kernel board revision information
+ * Returns:
+ * bit[0-3] Maximum cpu clock rate supported by onboard SoC
+ */
+u32 get_board_rev(void)
+{
+ u32 rev = 0;
+ return rev;
+}
+
+int board_init(void)
+{
+ /* arch number of the board */
+ gd->bd->bi_arch_number = MACH_TYPE_RDAARM926EJS;
+
+ /* address of boot parameters */
+ gd->bd->bi_boot_params = LINUX_BOOT_PARAM_ADDR;
+
+ return 0;
+}
+
+#ifdef CONFIG_RDA_MMC
+int rda_mmc_init(void);
+#endif
+
+int board_mmc_init(bd_t *bis)
+{
+ int err = -1;
+
+#ifdef CONFIG_RDA_MMC
+ err = rda_mmc_init();
+ if (err)
+ return err;
+#endif
+
+ return err;
+}
+
diff --git a/board/samsung/smdk5250/tzpc_init.c b/board/samsung/smdk5250/tzpc_init.c
index c2ccef3381..c833541fd0 100644
--- a/board/samsung/smdk5250/tzpc_init.c
+++ b/board/samsung/smdk5250/tzpc_init.c
@@ -28,11 +28,11 @@
/* Setting TZPC[TrustZone Protection Controller] */
void tzpc_init(void)
{
- struct exynos5_tzpc *tzpc;
+ struct exynos_tzpc *tzpc;
unsigned int addr;
for (addr = TZPC0_BASE; addr <= TZPC9_BASE; addr += TZPC_BASE_OFFSET) {
- tzpc = (struct exynos5_tzpc *)addr;
+ tzpc = (struct exynos_tzpc *)addr;
if (addr == TZPC0_BASE)
writel(R0SIZE, &tzpc->r0size);
diff --git a/board/samsung/smdk6400/.gitignore b/board/samsung/smdk6400/.gitignore
deleted file mode 100644
index 25ab492c50..0000000000
--- a/board/samsung/smdk6400/.gitignore
+++ /dev/null
@@ -1,5 +0,0 @@
-#
-# Generated files
-#
-
-/config.tmp
diff --git a/board/samsung/smdkc100/onenand.c b/board/samsung/smdkc100/onenand.c
index 501855edd3..e34cd31f24 100644
--- a/board/samsung/smdkc100/onenand.c
+++ b/board/samsung/smdkc100/onenand.c
@@ -22,7 +22,7 @@
*/
#include <common.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
#include <linux/mtd/samsung_onenand.h>
diff --git a/board/samsung/trats/trats.c b/board/samsung/trats/trats.c
index aa4291df4a..3085de1a14 100644
--- a/board/samsung/trats/trats.c
+++ b/board/samsung/trats/trats.c
@@ -2,6 +2,7 @@
* Copyright (C) 2011 Samsung Electronics
* Heungjun Kim <riverful.kim@samsung.com>
* Kyungmin Park <kyungmin.park@samsung.com>
+ * Donghwa Lee <dh09.lee@samsung.com>
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -23,16 +24,19 @@
*/
#include <common.h>
+#include <lcd.h>
#include <asm/io.h>
#include <asm/arch/cpu.h>
#include <asm/arch/gpio.h>
#include <asm/arch/mmc.h>
#include <asm/arch/clock.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/mipi_dsim.h>
#include <asm/arch/watchdog.h>
#include <asm/arch/power.h>
#include <pmic.h>
#include <usb/s3c_udc.h>
-#include <max8998_pmic.h>
+#include <max8997_pmic.h>
#include "setup.h"
@@ -216,26 +220,19 @@ static int s5pc210_phy_control(int on)
return -1;
if (on) {
- ret |= pmic_set_output(p,
- MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
- MAX8998_SAFEOUT1, LDO_ON);
- ret |= pmic_set_output(p, MAX8998_REG_ONOFF1,
- MAX8998_LDO3, LDO_ON);
- ret |= pmic_set_output(p, MAX8998_REG_ONOFF2,
- MAX8998_LDO8, LDO_ON);
-
+ ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL,
+ ENSAFEOUT1, LDO_ON);
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, EN_LDO);
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, EN_LDO);
} else {
- ret |= pmic_set_output(p, MAX8998_REG_ONOFF2,
- MAX8998_LDO8, LDO_OFF);
- ret |= pmic_set_output(p, MAX8998_REG_ONOFF1,
- MAX8998_LDO3, LDO_OFF);
- ret |= pmic_set_output(p,
- MAX8998_REG_BUCK_ACTIVE_DISCHARGE3,
- MAX8998_SAFEOUT1, LDO_OFF);
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO8CTRL, DIS_LDO);
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, DIS_LDO);
+ ret |= pmic_set_output(p, MAX8997_REG_SAFEOUTCTRL,
+ ENSAFEOUT1, LDO_OFF);
}
if (ret) {
- puts("MAX8998 LDO setting error!\n");
+ puts("MAX8997 LDO setting error!\n");
return -1;
}
@@ -364,3 +361,145 @@ int board_early_init_f(void)
return 0;
}
+
+static void lcd_reset(void)
+{
+ struct exynos4_gpio_part2 *gpio2 =
+ (struct exynos4_gpio_part2 *)samsung_get_base_gpio_part2();
+
+ s5p_gpio_direction_output(&gpio2->y4, 5, 1);
+ udelay(10000);
+ s5p_gpio_direction_output(&gpio2->y4, 5, 0);
+ udelay(10000);
+ s5p_gpio_direction_output(&gpio2->y4, 5, 1);
+}
+
+static int lcd_power(void)
+{
+ int ret = 0;
+ struct pmic *p = get_pmic();
+
+ if (pmic_probe(p))
+ return 0;
+
+ /* LDO15 voltage: 2.2v */
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO15CTRL, 0x1c | EN_LDO);
+ /* LDO13 voltage: 3.0v */
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO13CTRL, 0x2c | EN_LDO);
+
+ if (ret) {
+ puts("MAX8997 LDO setting error!\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+static struct mipi_dsim_config dsim_config = {
+ .e_interface = DSIM_VIDEO,
+ .e_virtual_ch = DSIM_VIRTUAL_CH_0,
+ .e_pixel_format = DSIM_24BPP_888,
+ .e_burst_mode = DSIM_BURST_SYNC_EVENT,
+ .e_no_data_lane = DSIM_DATA_LANE_4,
+ .e_byte_clk = DSIM_PLL_OUT_DIV8,
+ .hfp = 1,
+
+ .p = 3,
+ .m = 120,
+ .s = 1,
+
+ /* D-PHY PLL stable time spec :min = 200usec ~ max 400usec */
+ .pll_stable_time = 500,
+
+ /* escape clk : 10MHz */
+ .esc_clk = 20 * 1000000,
+
+ /* stop state holding counter after bta change count 0 ~ 0xfff */
+ .stop_holding_cnt = 0x7ff,
+ /* bta timeout 0 ~ 0xff */
+ .bta_timeout = 0xff,
+ /* lp rx timeout 0 ~ 0xffff */
+ .rx_timeout = 0xffff,
+};
+
+static struct exynos_platform_mipi_dsim s6e8ax0_platform_data = {
+ .lcd_panel_info = NULL,
+ .dsim_config = &dsim_config,
+};
+
+static struct mipi_dsim_lcd_device mipi_lcd_device = {
+ .name = "s6e8ax0",
+ .id = -1,
+ .bus_id = 0,
+ .platform_data = (void *)&s6e8ax0_platform_data,
+};
+
+static int mipi_power(void)
+{
+ int ret = 0;
+ struct pmic *p = get_pmic();
+
+ if (pmic_probe(p))
+ return 0;
+
+ /* LDO3 voltage: 1.1v */
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO3CTRL, 0x6 | EN_LDO);
+ /* LDO4 voltage: 1.8v */
+ ret |= pmic_reg_write(p, MAX8997_REG_LDO4CTRL, 0x14 | EN_LDO);
+
+ if (ret) {
+ puts("MAX8997 LDO setting error!\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+void init_panel_info(vidinfo_t *vid)
+{
+ vid->vl_freq = 60;
+ vid->vl_col = 720;
+ vid->vl_row = 1280;
+ vid->vl_width = 720;
+ vid->vl_height = 1280;
+ vid->vl_clkp = CONFIG_SYS_HIGH;
+ vid->vl_hsp = CONFIG_SYS_LOW;
+ vid->vl_vsp = CONFIG_SYS_LOW;
+ vid->vl_dp = CONFIG_SYS_LOW;
+
+ vid->vl_bpix = 5;
+ vid->dual_lcd_enabled = 0;
+
+ /* s6e8ax0 Panel */
+ vid->vl_hspw = 5;
+ vid->vl_hbpd = 10;
+ vid->vl_hfpd = 10;
+
+ vid->vl_vspw = 2;
+ vid->vl_vbpd = 1;
+ vid->vl_vfpd = 13;
+ vid->vl_cmd_allow_len = 0xf;
+
+ vid->win_id = 3;
+ vid->cfg_gpio = NULL;
+ vid->backlight_on = NULL;
+ vid->lcd_power_on = NULL; /* lcd_power_on in mipi dsi driver */
+ vid->reset_lcd = lcd_reset;
+
+ vid->init_delay = 0;
+ vid->power_on_delay = 0;
+ vid->reset_delay = 0;
+ vid->interface_mode = FIMD_RGB_INTERFACE;
+ vid->mipi_enabled = 1;
+
+ strcpy(s6e8ax0_platform_data.lcd_panel_name, mipi_lcd_device.name);
+ s6e8ax0_platform_data.lcd_power = lcd_power;
+ s6e8ax0_platform_data.mipi_power = mipi_power;
+ s6e8ax0_platform_data.phy_enable = set_mipi_phy_ctrl;
+ s6e8ax0_platform_data.lcd_panel_info = (void *)vid;
+ exynos_mipi_dsi_register_lcd_device(&mipi_lcd_device);
+ s6e8ax0_init();
+ exynos_set_dsim_platform_data(&s6e8ax0_platform_data);
+
+ setenv("lcdinfo", "lcd=s6e8ax0");
+}
diff --git a/board/samsung/universal_c210/universal.c b/board/samsung/universal_c210/universal.c
index d0ff8341f6..90fff5cf5e 100644
--- a/board/samsung/universal_c210/universal.c
+++ b/board/samsung/universal_c210/universal.c
@@ -58,13 +58,13 @@ int board_init(void)
gd->bd->bi_arch_number = MACH_TYPE_UNIVERSAL_C210;
gd->bd->bi_boot_params = PHYS_SDRAM_1 + 0x100;
- check_hw_revision();
- printf("HW Revision:\t0x%x\n", board_rev);
-
#if defined(CONFIG_PMIC)
pmic_init();
#endif
+ check_hw_revision();
+ printf("HW Revision:\t0x%x\n", board_rev);
+
return 0;
}
@@ -109,10 +109,27 @@ static unsigned short get_adc_value(int channel)
return ret;
}
+static int adc_power_control(int on)
+{
+ int ret;
+ struct pmic *p = get_pmic();
+
+ if (pmic_probe(p))
+ return -1;
+
+ ret = pmic_set_output(p,
+ MAX8998_REG_ONOFF1,
+ MAX8998_LDO4, !!on);
+
+ return ret;
+}
+
static unsigned int get_hw_revision(void)
{
int hwrev, mode0, mode1;
+ adc_power_control(1);
+
mode0 = get_adc_value(1); /* HWREV_MODE0 */
mode1 = get_adc_value(2); /* HWREV_MODE1 */
@@ -135,6 +152,8 @@ static unsigned int get_hw_revision(void)
debug("mode0: %d, mode1: %d, hwrev 0x%x\n", mode0, mode1, hwrev);
+ adc_power_control(0);
+
return hwrev;
}
diff --git a/board/technexion/twister/twister.c b/board/technexion/twister/twister.c
index b92758692d..c2b10ac1ea 100644
--- a/board/technexion/twister/twister.c
+++ b/board/technexion/twister/twister.c
@@ -133,7 +133,7 @@ int board_eth_init(bd_t *bis)
!defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- return omap_mmc_init(0);
+ return omap_mmc_init(0, 0, 0);
}
#endif
diff --git a/board/teejet/mt_ventoux/mt_ventoux.c b/board/teejet/mt_ventoux/mt_ventoux.c
index c5eb42c362..9fbaedd792 100644
--- a/board/teejet/mt_ventoux/mt_ventoux.c
+++ b/board/teejet/mt_ventoux/mt_ventoux.c
@@ -196,13 +196,6 @@ int board_init(void)
return 0;
}
-int misc_init_r(void)
-{
- dieid_num_r();
-
- return 0;
-}
-
/*
* Routine: set_muxconf_regs
* Description: Setting up the configuration Mux registers specific to the
@@ -228,6 +221,6 @@ int board_eth_init(bd_t *bis)
!defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- return omap_mmc_init(0);
+ return omap_mmc_init(0, 0, 0);
}
#endif
diff --git a/board/ti/am3517crane/am3517crane.c b/board/ti/am3517crane/am3517crane.c
index 436645a83f..888398deac 100644
--- a/board/ti/am3517crane/am3517crane.c
+++ b/board/ti/am3517crane/am3517crane.c
@@ -78,7 +78,7 @@ void set_muxconf_regs(void)
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/ti/beagle/beagle.c b/board/ti/beagle/beagle.c
index e26b387934..9edd3c5c4f 100644
--- a/board/ti/beagle/beagle.c
+++ b/board/ti/beagle/beagle.c
@@ -477,7 +477,7 @@ void set_muxconf_regs(void)
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/ti/evm/evm.c b/board/ti/evm/evm.c
index 8497aee6de..61fc7b5531 100644
--- a/board/ti/evm/evm.c
+++ b/board/ti/evm/evm.c
@@ -278,7 +278,7 @@ int board_eth_init(bd_t *bis)
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/ti/omap5912osk/omap5912osk.c b/board/ti/omap5912osk/omap5912osk.c
index 6f0e763f01..fac683a7e6 100644
--- a/board/ti/omap5912osk/omap5912osk.c
+++ b/board/ti/omap5912osk/omap5912osk.c
@@ -81,13 +81,6 @@ int board_init (void)
return 0;
}
-
-int misc_init_r (void)
-{
- /* currently empty */
- return (0);
-}
-
/******************************
Routine:
Description:
diff --git a/board/ti/omap5_evm/evm.c b/board/ti/omap5_evm/evm.c
index ea0cb13b43..c8dfdf8142 100644
--- a/board/ti/omap5_evm/evm.c
+++ b/board/ti/omap5_evm/evm.c
@@ -23,7 +23,7 @@
* MA 02111-1307 USA
*/
#include <common.h>
-#include <twl6030.h>
+#include <twl6035.h>
#include <asm/arch/sys_proto.h>
#include <asm/arch/mmc_host_def.h>
@@ -63,8 +63,8 @@ int board_eth_init(bd_t *bis)
*/
int misc_init_r(void)
{
-#ifdef CONFIG_TWL6030_POWER
- twl6030_init_battery_charging();
+#ifdef CONFIG_TWL6035_POWER
+ twl6035_init_settings();
#endif
return 0;
}
@@ -94,8 +94,8 @@ void set_muxconf_regs_non_essential(void)
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
- omap_mmc_init(1);
+ omap_mmc_init(0, 0, 0);
+ omap_mmc_init(1, 0, 0);
return 0;
}
#endif
diff --git a/board/ti/omap5_evm/mux_data.h b/board/ti/omap5_evm/mux_data.h
index 18f4729257..296eb682e1 100644
--- a/board/ti/omap5_evm/mux_data.h
+++ b/board/ti/omap5_evm/mux_data.h
@@ -2,8 +2,7 @@
* (C) Copyright 2010
* Texas Instruments Incorporated, <www.ti.com>
*
- * Balaji Krishnamoorthy <balajitk@ti.com>
- * Aneesh V <aneesh@ti.com>
+ * Sricharan R <r.sricharan@ti.com>
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -30,246 +29,276 @@
const struct pad_conf_entry core_padconf_array_essential[] = {
-{GPMC_AD0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat0 */
-{GPMC_AD1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat1 */
-{GPMC_AD2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat2 */
-{GPMC_AD3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat3 */
-{GPMC_AD4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat4 */
-{GPMC_AD5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat5 */
-{GPMC_AD6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat6 */
-{GPMC_AD7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_dat7 */
-{GPMC_NOE, (PTU | IEN | OFF_EN | OFF_OUT_PTD | M1)}, /* sdmmc2_clk */
-{GPMC_NWE, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* sdmmc2_cmd */
-{SDMMC1_CLK, (PTU | OFF_EN | OFF_OUT_PTD | M0)}, /* sdmmc1_clk */
-{SDMMC1_CMD, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_cmd */
-{SDMMC1_DAT0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat0 */
-{SDMMC1_DAT1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat1 */
-{SDMMC1_DAT2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat2 */
-{SDMMC1_DAT3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat3 */
-{SDMMC1_DAT4, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat4 */
-{SDMMC1_DAT5, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat5 */
-{SDMMC1_DAT6, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat6 */
-{SDMMC1_DAT7, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc1_dat7 */
-{UART3_CTS_RCTX, (PTU | IEN | M0)}, /* uart3_tx */
-{UART3_RTS_SD, (M0)}, /* uart3_rts_sd */
-{UART3_RX_IRRX, (IEN | M0)}, /* uart3_rx */
-{UART3_TX_IRTX, (M0)} /* uart3_tx */
+ {EMMC_CLK, (PTU | IEN | M0)}, /* EMMC_CLK */
+ {EMMC_CMD, (PTU | IEN | M0)}, /* EMMC_CMD */
+ {EMMC_DATA0, (PTU | IEN | M0)}, /* EMMC_DATA0 */
+ {EMMC_DATA1, (PTU | IEN | M0)}, /* EMMC_DATA1 */
+ {EMMC_DATA2, (PTU | IEN | M0)}, /* EMMC_DATA2 */
+ {EMMC_DATA3, (PTU | IEN | M0)}, /* EMMC_DATA3 */
+ {EMMC_DATA4, (PTU | IEN | M0)}, /* EMMC_DATA4 */
+ {EMMC_DATA5, (PTU | IEN | M0)}, /* EMMC_DATA5 */
+ {EMMC_DATA6, (PTU | IEN | M0)}, /* EMMC_DATA6 */
+ {EMMC_DATA7, (PTU | IEN | M0)}, /* EMMC_DATA7 */
+ {SDCARD_CLK, (PTU | IEN | M0)}, /* SDCARD_CLK */
+ {SDCARD_CMD, (PTU | IEN | M0)}, /* SDCARD_CMD */
+ {SDCARD_DATA0, (PTU | IEN | M0)}, /* SDCARD_DATA0*/
+ {SDCARD_DATA1, (PTU | IEN | M0)}, /* SDCARD_DATA1*/
+ {SDCARD_DATA2, (PTU | IEN | M0)}, /* SDCARD_DATA2*/
+ {SDCARD_DATA3, (PTU | IEN | M0)}, /* SDCARD_DATA3*/
+ {UART3_RX_IRRX, (PTU | IEN | M0)}, /* UART3_RX_IRRX */
+ {UART3_TX_IRTX, (M0)}, /* UART3_TX_IRTX */
};
const struct pad_conf_entry wkup_padconf_array_essential[] = {
-{PAD1_SR_SCL, (PTU | IEN | M0)}, /* sr_scl */
-{PAD0_SR_SDA, (PTU | IEN | M0)}, /* sr_sda */
-{PAD1_SYS_32K, (IEN | M0)} /* sys_32k */
+ {SR_PMIC_SCL, (PTU | IEN | M0)}, /* SR_PMIC_SCL */
+ {SR_PMIC_SDA, (PTU | IEN | M0)}, /* SR_PMIC_SDA */
+ {SYS_32K, (IEN | M0)}, /* SYS_32K */
};
const struct pad_conf_entry core_padconf_array_non_essential[] = {
- {GPMC_AD8, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M3)}, /* gpio_32 */
- {GPMC_AD9, (PTU | IEN | M3)}, /* gpio_33 */
- {GPMC_AD10, (PTU | IEN | M3)}, /* gpio_34 */
- {GPMC_AD11, (PTU | IEN | M3)}, /* gpio_35 */
- {GPMC_AD12, (PTU | IEN | M3)}, /* gpio_36 */
- {GPMC_AD13, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)}, /* gpio_37 */
- {GPMC_AD14, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)}, /* gpio_38 */
- {GPMC_AD15, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)}, /* gpio_39 */
- {GPMC_A16, (M3)}, /* gpio_40 */
- {GPMC_A17, (PTD | M3)}, /* gpio_41 */
- {GPMC_A18, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row6 */
- {GPMC_A19, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row7 */
- {GPMC_A20, (IEN | M3)}, /* gpio_44 */
- {GPMC_A21, (M3)}, /* gpio_45 */
- {GPMC_A22, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col6 */
- {GPMC_A23, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col7 */
- {GPMC_A24, (PTD | M3)}, /* gpio_48 */
- {GPMC_A25, (PTD | M3)}, /* gpio_49 */
- {GPMC_NCS0, (M3)}, /* gpio_50 */
- {GPMC_NCS1, (IEN | M3)}, /* gpio_51 */
- {GPMC_NCS2, (IEN | M3)}, /* gpio_52 */
- {GPMC_NCS3, (IEN | M3)}, /* gpio_53 */
- {GPMC_NWP, (M3)}, /* gpio_54 */
- {GPMC_CLK, (PTD | M3)}, /* gpio_55 */
- {GPMC_NADV_ALE, (M3)}, /* gpio_56 */
- {GPMC_NBE0_CLE, (M3)}, /* gpio_59 */
- {GPMC_NBE1, (PTD | M3)}, /* gpio_60 */
- {GPMC_WAIT0, (PTU | IEN | M3)}, /* gpio_61 */
- {GPMC_WAIT1, (IEN | M3)}, /* gpio_62 */
- {C2C_DATA11, (PTD | M3)}, /* gpio_100 */
- {C2C_DATA12, (M1)}, /* dsi1_te0 */
- {C2C_DATA13, (PTD | M3)}, /* gpio_102 */
- {C2C_DATA14, (M1)}, /* dsi2_te0 */
- {C2C_DATA15, (PTD | M3)}, /* gpio_104 */
- {HDMI_HPD, (M0)}, /* hdmi_hpd */
- {HDMI_CEC, (M0)}, /* hdmi_cec */
- {HDMI_DDC_SCL, (PTU | M0)}, /* hdmi_ddc_scl */
- {HDMI_DDC_SDA, (PTU | IEN | M0)}, /* hdmi_ddc_sda */
- {CSI21_DX0, (IEN | M0)}, /* csi21_dx0 */
- {CSI21_DY0, (IEN | M0)}, /* csi21_dy0 */
- {CSI21_DX1, (IEN | M0)}, /* csi21_dx1 */
- {CSI21_DY1, (IEN | M0)}, /* csi21_dy1 */
- {CSI21_DX2, (IEN | M0)}, /* csi21_dx2 */
- {CSI21_DY2, (IEN | M0)}, /* csi21_dy2 */
- {CSI21_DX3, (PTD | M7)}, /* csi21_dx3 */
- {CSI21_DY3, (PTD | M7)}, /* csi21_dy3 */
- {CSI21_DX4, (PTD | OFF_EN | OFF_PD | OFF_IN | M7)}, /* csi21_dx4 */
- {CSI21_DY4, (PTD | OFF_EN | OFF_PD | OFF_IN | M7)}, /* csi21_dy4 */
- {CSI22_DX0, (IEN | M0)}, /* csi22_dx0 */
- {CSI22_DY0, (IEN | M0)}, /* csi22_dy0 */
- {CSI22_DX1, (IEN | M0)}, /* csi22_dx1 */
- {CSI22_DY1, (IEN | M0)}, /* csi22_dy1 */
- {CAM_SHUTTER, (OFF_EN | OFF_PD | OFF_OUT_PTD | M0)}, /* cam_shutter */
- {CAM_STROBE, (OFF_EN | OFF_PD | OFF_OUT_PTD | M0)}, /* cam_strobe */
- {CAM_GLOBALRESET, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M3)}, /* gpio_83 */
- {USBB1_ULPITLL_CLK, (IEN | OFF_EN | OFF_IN | M1)}, /* hsi1_cawake */
- {USBB1_ULPITLL_STP, (IEN | OFF_EN | OFF_IN | M1)}, /* hsi1_cadata */
- {USBB1_ULPITLL_DIR, (IEN | OFF_EN | OFF_IN | M1)}, /* hsi1_caflag */
- {USBB1_ULPITLL_NXT, (OFF_EN | M1)}, /* hsi1_acready */
- {USBB1_ULPITLL_DAT0, (OFF_EN | M1)}, /* hsi1_acwake */
- {USBB1_ULPITLL_DAT1, (OFF_EN | M1)}, /* hsi1_acdata */
- {USBB1_ULPITLL_DAT2, (OFF_EN | M1)}, /* hsi1_acflag */
- {USBB1_ULPITLL_DAT3, (IEN | OFF_EN | OFF_IN | M1)}, /* hsi1_caready */
- {USBB1_ULPITLL_DAT4, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)}, /* usbb1_ulpiphy_dat4 */
- {USBB1_ULPITLL_DAT5, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)}, /* usbb1_ulpiphy_dat5 */
- {USBB1_ULPITLL_DAT6, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)}, /* usbb1_ulpiphy_dat6 */
- {USBB1_ULPITLL_DAT7, (IEN | OFF_EN | OFF_PD | OFF_IN | M4)}, /* usbb1_ulpiphy_dat7 */
- {USBB1_HSIC_DATA, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* usbb1_hsic_data */
- {USBB1_HSIC_STROBE, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* usbb1_hsic_strobe */
- {USBC1_ICUSB_DP, (IEN | M0)}, /* usbc1_icusb_dp */
- {USBC1_ICUSB_DM, (IEN | M0)}, /* usbc1_icusb_dm */
- {ABE_MCBSP2_CLKX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_mcbsp2_clkx */
- {ABE_MCBSP2_DR, (IEN | OFF_EN | OFF_OUT_PTD | M0)}, /* abe_mcbsp2_dr */
- {ABE_MCBSP2_DX, (OFF_EN | OFF_OUT_PTD | M0)}, /* abe_mcbsp2_dx */
- {ABE_MCBSP2_FSX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_mcbsp2_fsx */
- {ABE_MCBSP1_CLKX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_mcbsp1_clkx */
- {ABE_MCBSP1_DR, (IEN | OFF_EN | OFF_OUT_PTD | M0)}, /* abe_mcbsp1_dr */
- {ABE_MCBSP1_DX, (OFF_EN | OFF_OUT_PTD | M0)}, /* abe_mcbsp1_dx */
- {ABE_MCBSP1_FSX, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_mcbsp1_fsx */
- {ABE_PDM_UL_DATA, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_pdm_ul_data */
- {ABE_PDM_DL_DATA, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_pdm_dl_data */
- {ABE_PDM_FRAME, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_pdm_frame */
- {ABE_PDM_LB_CLK, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_pdm_lb_clk */
- {ABE_CLKS, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* abe_clks */
- {ABE_DMIC_CLK1, (M0)}, /* abe_dmic_clk1 */
- {ABE_DMIC_DIN1, (IEN | M0)}, /* abe_dmic_din1 */
- {ABE_DMIC_DIN2, (IEN | M0)}, /* abe_dmic_din2 */
- {ABE_DMIC_DIN3, (IEN | M0)}, /* abe_dmic_din3 */
- {UART2_CTS, (PTU | IEN | M0)}, /* uart2_cts */
- {UART2_RTS, (M0)}, /* uart2_rts */
- {UART2_RX, (PTU | IEN | M0)}, /* uart2_rx */
- {UART2_TX, (M0)}, /* uart2_tx */
- {HDQ_SIO, (M3)}, /* gpio_127 */
- {MCSPI1_CLK, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi1_clk */
- {MCSPI1_SOMI, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi1_somi */
- {MCSPI1_SIMO, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi1_simo */
- {MCSPI1_CS0, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi1_cs0 */
- {MCSPI1_CS1, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M3)}, /* mcspi1_cs1 */
- {MCSPI1_CS2, (PTU | OFF_EN | OFF_OUT_PTU | M3)}, /* gpio_139 */
- {MCSPI1_CS3, (PTU | IEN | M3)}, /* gpio_140 */
- {SDMMC5_CLK, (PTU | IEN | OFF_EN | OFF_OUT_PTD | M0)}, /* sdmmc5_clk */
- {SDMMC5_CMD, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc5_cmd */
- {SDMMC5_DAT0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc5_dat0 */
- {SDMMC5_DAT1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc5_dat1 */
- {SDMMC5_DAT2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc5_dat2 */
- {SDMMC5_DAT3, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* sdmmc5_dat3 */
- {MCSPI4_CLK, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi4_clk */
- {MCSPI4_SIMO, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi4_simo */
- {MCSPI4_SOMI, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi4_somi */
- {MCSPI4_CS0, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi4_cs0 */
- {UART4_RX, (IEN | M0)}, /* uart4_rx */
- {UART4_TX, (M0)}, /* uart4_tx */
- {USBB2_ULPITLL_CLK, (PTD | IEN | M3)}, /* gpio_157 */
- {USBB2_ULPITLL_STP, (IEN | M5)}, /* dispc2_data23 */
- {USBB2_ULPITLL_DIR, (IEN | M5)}, /* dispc2_data22 */
- {USBB2_ULPITLL_NXT, (IEN | M5)}, /* dispc2_data21 */
- {USBB2_ULPITLL_DAT0, (IEN | M5)}, /* dispc2_data20 */
- {USBB2_ULPITLL_DAT1, (IEN | M5)}, /* dispc2_data19 */
- {USBB2_ULPITLL_DAT2, (IEN | M5)}, /* dispc2_data18 */
- {USBB2_ULPITLL_DAT3, (IEN | M5)}, /* dispc2_data15 */
- {USBB2_ULPITLL_DAT4, (IEN | M5)}, /* dispc2_data14 */
- {USBB2_ULPITLL_DAT5, (IEN | M5)}, /* dispc2_data13 */
- {USBB2_ULPITLL_DAT6, (IEN | M5)}, /* dispc2_data12 */
- {USBB2_ULPITLL_DAT7, (IEN | M5)}, /* dispc2_data11 */
- {USBB2_HSIC_DATA, (PTD | OFF_EN | OFF_OUT_PTU | M3)}, /* gpio_169 */
- {USBB2_HSIC_STROBE, (PTD | OFF_EN | OFF_OUT_PTU | M3)}, /* gpio_170 */
- {UNIPRO_TX0, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col0 */
- {UNIPRO_TY0, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col1 */
- {UNIPRO_TX1, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col2 */
- {UNIPRO_TY1, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col3 */
- {UNIPRO_TX2, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col4 */
- {UNIPRO_TY2, (OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_col5 */
- {UNIPRO_RX0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row0 */
- {UNIPRO_RY0, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row1 */
- {UNIPRO_RX1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row2 */
- {UNIPRO_RY1, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row3 */
- {UNIPRO_RX2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row4 */
- {UNIPRO_RY2, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M1)}, /* kpd_row5 */
- {USBA0_OTG_CE, (PTD | OFF_EN | OFF_PD | OFF_OUT_PTD | M0)}, /* usba0_otg_ce */
- {USBA0_OTG_DP, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* usba0_otg_dp */
- {USBA0_OTG_DM, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* usba0_otg_dm */
- {FREF_CLK1_OUT, (M0)}, /* fref_clk1_out */
- {FREF_CLK2_OUT, (M0)}, /* fref_clk2_out */
- {SYS_NIRQ1, (PTU | IEN | M0)}, /* sys_nirq1 */
- {SYS_NIRQ2, (M7)}, /* sys_nirq2 */
- {SYS_BOOT0, (PTU | IEN | M3)}, /* gpio_184 */
- {SYS_BOOT1, (M3)}, /* gpio_185 */
- {SYS_BOOT2, (PTD | IEN | M3)}, /* gpio_186 */
- {SYS_BOOT3, (PTD | IEN | M3)}, /* gpio_187 */
- {SYS_BOOT4, (M3)}, /* gpio_188 */
- {SYS_BOOT5, (PTD | IEN | M3)}, /* gpio_189 */
- {DPM_EMU0, (IEN | M0)}, /* dpm_emu0 */
- {DPM_EMU1, (IEN | M0)}, /* dpm_emu1 */
- {DPM_EMU2, (IEN | M0)}, /* dpm_emu2 */
- {DPM_EMU3, (IEN | M5)}, /* dispc2_data10 */
- {DPM_EMU4, (IEN | M5)}, /* dispc2_data9 */
- {DPM_EMU5, (IEN | M5)}, /* dispc2_data16 */
- {DPM_EMU6, (IEN | M5)}, /* dispc2_data17 */
- {DPM_EMU7, (IEN | M5)}, /* dispc2_hsync */
- {DPM_EMU8, (IEN | M5)}, /* dispc2_pclk */
- {DPM_EMU9, (IEN | M5)}, /* dispc2_vsync */
- {DPM_EMU10, (IEN | M5)}, /* dispc2_de */
- {DPM_EMU11, (IEN | M5)}, /* dispc2_data8 */
- {DPM_EMU12, (IEN | M5)}, /* dispc2_data7 */
- {DPM_EMU13, (IEN | M5)}, /* dispc2_data6 */
- {DPM_EMU14, (IEN | M5)}, /* dispc2_data5 */
- {DPM_EMU15, (IEN | M5)}, /* dispc2_data4 */
- {DPM_EMU16, (M3)}, /* gpio_27 */
- {DPM_EMU17, (IEN | M5)}, /* dispc2_data2 */
- {DPM_EMU18, (IEN | M5)}, /* dispc2_data1 */
- {DPM_EMU19, (IEN | M5)}, /* dispc2_data0 */
- {I2C1_SCL, (PTU | IEN | M0)}, /* i2c1_scl */
- {I2C1_SDA, (PTU | IEN | M0)}, /* i2c1_sda */
- {I2C2_SCL, (PTU | IEN | M0)}, /* i2c2_scl */
- {I2C2_SDA, (PTU | IEN | M0)}, /* i2c2_sda */
- {I2C3_SCL, (PTU | IEN | M0)}, /* i2c3_scl */
- {I2C3_SDA, (PTU | IEN | M0)}, /* i2c3_sda */
- {I2C4_SCL, (PTU | IEN | M0)}, /* i2c4_scl */
- {I2C4_SDA, (PTU | IEN | M0)} /* i2c4_sda */
+
+ {C2C_DATAIN0, (IEN | M0)}, /* C2C_DATAIN0 */
+ {C2C_DATAIN1, (IEN | M0)}, /* C2C_DATAIN1 */
+ {C2C_DATAIN2, (IEN | M0)}, /* C2C_DATAIN2 */
+ {C2C_DATAIN3, (IEN | M0)}, /* C2C_DATAIN3 */
+ {C2C_DATAIN4, (IEN | M0)}, /* C2C_DATAIN4 */
+ {C2C_DATAIN5, (IEN | M0)}, /* C2C_DATAIN5 */
+ {C2C_DATAIN6, (IEN | M0)}, /* C2C_DATAIN6 */
+ {C2C_DATAIN7, (IEN | M0)}, /* C2C_DATAIN7 */
+ {C2C_CLKIN1, (IEN | M0)}, /* C2C_CLKIN1 */
+ {C2C_CLKIN0, (IEN | M0)}, /* C2C_CLKIN0 */
+ {C2C_CLKOUT0, (M0)}, /* C2C_CLKOUT0 */
+ {C2C_CLKOUT1, (M0)}, /* C2C_CLKOUT1 */
+ {C2C_DATAOUT0, (M0)}, /* C2C_DATAOUT0 */
+ {C2C_DATAOUT1, (M0)}, /* C2C_DATAOUT1 */
+ {C2C_DATAOUT2, (M0)}, /* C2C_DATAOUT2 */
+ {C2C_DATAOUT3, (M0)}, /* C2C_DATAOUT3 */
+ {C2C_DATAOUT4, (M0)}, /* C2C_DATAOUT4 */
+ {C2C_DATAOUT5, (M0)}, /* C2C_DATAOUT5 */
+ {C2C_DATAOUT6, (M0)}, /* C2C_DATAOUT6 */
+ {C2C_DATAOUT7, (M0)}, /* C2C_DATAOUT7 */
+ {C2C_DATA8, (IEN | M0)}, /* C2C_DATA8 */
+ {C2C_DATA9, (IEN | M0)}, /* C2C_DATA9 */
+ {C2C_DATA10, (IEN | M0)}, /* C2C_DATA10 */
+ {C2C_DATA11, (IEN | M0)}, /* C2C_DATA11 */
+ {C2C_DATA12, (IEN | M0)}, /* C2C_DATA12 */
+ {C2C_DATA13, (IEN | M0)}, /* C2C_DATA13 */
+ {C2C_DATA14, (IEN | M0)}, /* C2C_DATA14 */
+ {C2C_DATA15, (IEN | M0)}, /* C2C_DATA15 */
+ {LLIB_WAKEREQOUT, (PTU | IEN | M6)}, /* GPIO2_32 */
+ {LLIA_WAKEREQOUT, (M1)}, /* C2C_WAKEREQOUT */
+ {HSI1_ACREADY, (PTD | M6)}, /* GPIO3_64 */
+ {HSI1_CAREADY, (PTD | M6)}, /* GPIO3_65 */
+ {HSI1_ACWAKE, (PTD | IEN | M6)}, /* GPIO3_66 */
+ {HSI1_CAWAKE, (PTU | IEN | M6)}, /* GPIO3_67 */
+ {HSI1_ACFLAG, (PTD | IEN | M6)}, /* GPIO3_68 */
+ {HSI1_ACDATA, (PTD | M6)}, /* GPIO3_69 */
+ {HSI1_CAFLAG, (M6)}, /* GPIO3_70 */
+ {HSI1_CADATA, (M6)}, /* GPIO3_71 */
+ {UART1_TX, (M0)}, /* UART1_TX */
+ {UART1_CTS, (PTU | IEN | M0)}, /* UART1_CTS */
+ {UART1_RX, (PTU | IEN | M0)}, /* UART1_RX */
+ {UART1_RTS, (M0)}, /* UART1_RTS */
+ {HSI2_CAREADY, (IEN | M0)}, /* HSI2_CAREADY */
+ {HSI2_ACREADY, (OFF_EN | M0)}, /* HSI2_ACREADY */
+ {HSI2_CAWAKE, (IEN | PTD | M0)}, /* HSI2_CAWAKE */
+ {HSI2_ACWAKE, (M0)}, /* HSI2_ACWAKE */
+ {HSI2_CAFLAG, (IEN | PTD | M0)}, /* HSI2_CAFLAG */
+ {HSI2_CADATA, (IEN | PTD | M0)}, /* HSI2_CADATA */
+ {HSI2_ACFLAG, (M0)}, /* HSI2_ACFLAG */
+ {HSI2_ACDATA, (M0)}, /* HSI2_ACDATA */
+ {UART2_RTS, (IEN | M1)}, /* MCSPI3_SOMI */
+ {UART2_CTS, (IEN | M1)}, /* MCSPI3_CS0 */
+ {UART2_RX, (IEN | M1)}, /* MCSPI3_SIMO */
+ {UART2_TX, (IEN | M1)}, /* MCSPI3_CLK */
+ {USBB1_HSIC_STROBE, (PTU | IEN | M0)}, /* USBB1_HSIC_STROBE */
+ {USBB1_HSIC_DATA, (PTU | IEN | M0)}, /* USBB1_HSIC_DATA */
+ {USBB2_HSIC_STROBE, (PTU | IEN | M0)}, /* USBB2_HSIC_STROBE */
+ {USBB2_HSIC_DATA, (PTU | IEN | M0)}, /* USBB2_HSIC_DATA */
+ {TIMER10_PWM_EVT, (IEN | M0)}, /* TIMER10_PWM_EVT */
+ {DSIPORTA_TE0, (IEN | M0)}, /* DSIPORTA_TE0 */
+ {DSIPORTA_LANE0X, (IEN | M0)}, /* DSIPORTA_LANE0X */
+ {DSIPORTA_LANE0Y, (IEN | M0)}, /* DSIPORTA_LANE0Y */
+ {DSIPORTA_LANE1X, (IEN | M0)}, /* DSIPORTA_LANE1X */
+ {DSIPORTA_LANE1Y, (IEN | M0)}, /* DSIPORTA_LANE1Y */
+ {DSIPORTA_LANE2X, (IEN | M0)}, /* DSIPORTA_LANE2X */
+ {DSIPORTA_LANE2Y, (IEN | M0)}, /* DSIPORTA_LANE2Y */
+ {DSIPORTA_LANE3X, (IEN | M0)}, /* DSIPORTA_LANE3X */
+ {DSIPORTA_LANE3Y, (IEN | M0)}, /* DSIPORTA_LANE3Y */
+ {DSIPORTA_LANE4X, (IEN | M0)}, /* DSIPORTA_LANE4X */
+ {DSIPORTA_LANE4Y, (IEN | M0)}, /* DSIPORTA_LANE4Y */
+ {TIMER9_PWM_EVT, (IEN | M0)}, /* TIMER9_PWM_EVT */
+ {DSIPORTC_TE0, (IEN | M0)}, /* DSIPORTC_TE0 */
+ {DSIPORTC_LANE0X, (IEN | M0)}, /* DSIPORTC_LANE0X */
+ {DSIPORTC_LANE0Y, (IEN | M0)}, /* DSIPORTC_LANE0Y */
+ {DSIPORTC_LANE1X, (IEN | M0)}, /* DSIPORTC_LANE1X */
+ {DSIPORTC_LANE1Y, (IEN | M0)}, /* DSIPORTC_LANE1Y */
+ {DSIPORTC_LANE2X, (IEN | M0)}, /* DSIPORTC_LANE2X */
+ {DSIPORTC_LANE2Y, (IEN | M0)}, /* DSIPORTC_LANE2Y */
+ {DSIPORTC_LANE3X, (IEN | M0)}, /* DSIPORTC_LANE3X */
+ {DSIPORTC_LANE3Y, (IEN | M0)}, /* DSIPORTC_LANE3Y */
+ {DSIPORTC_LANE4X, (IEN | M0)}, /* DSIPORTC_LANE4X */
+ {DSIPORTC_LANE4Y, (IEN | M0)}, /* DSIPORTC_LANE4Y */
+ {RFBI_HSYNC0, (M4)}, /* KBD_COL5 */
+ {RFBI_TE_VSYNC0, (PTD | M6)}, /* GPIO6_161 */
+ {RFBI_RE, (M4)}, /* KBD_COL4 */
+ {RFBI_A0, (PTD | IEN | M6)}, /* GPIO6_165 */
+ {RFBI_DATA8, (M4)}, /* KBD_COL3 */
+ {RFBI_DATA9, (PTD | M6)}, /* GPIO6_175 */
+ {RFBI_DATA10, (PTD | M6)}, /* GPIO6_176 */
+ {RFBI_DATA11, (PTD | M6)}, /* GPIO6_177 */
+ {RFBI_DATA12, (PTD | M6)}, /* GPIO6_178 */
+ {RFBI_DATA13, (PTU | IEN | M6)}, /* GPIO6_179 */
+ {RFBI_DATA14, (M4)}, /* KBD_COL7 */
+ {RFBI_DATA15, (M4)}, /* KBD_COL6 */
+ {GPIO6_182, (M6)}, /* GPIO6_182 */
+ {GPIO6_183, (PTD | M6)}, /* GPIO6_183 */
+ {GPIO6_184, (M4)}, /* KBD_COL2 */
+ {GPIO6_185, (PTD | IEN | M6)}, /* GPIO6_185 */
+ {GPIO6_186, (PTD | M6)}, /* GPIO6_186 */
+ {GPIO6_187, (PTU | IEN | M4)}, /* KBD_ROW2 */
+ {RFBI_DATA0, (PTD | M6)}, /* GPIO6_166 */
+ {RFBI_DATA1, (PTD | M6)}, /* GPIO6_167 */
+ {RFBI_DATA2, (PTD | M6)}, /* GPIO6_168 */
+ {RFBI_DATA3, (PTD | IEN | M6)}, /* GPIO6_169 */
+ {RFBI_DATA4, (IEN | M6)}, /* GPIO6_170 */
+ {RFBI_DATA5, (IEN | M6)}, /* GPIO6_171 */
+ {RFBI_DATA6, (PTD | M6)}, /* GPIO6_172 */
+ {RFBI_DATA7, (PTD | M6)}, /* GPIO6_173 */
+ {RFBI_CS0, (PTD | IEN | M6)}, /* GPIO6_163 */
+ {RFBI_WE, (PTD | M6)}, /* GPIO6_162 */
+ {MCSPI2_CS0, (M0)}, /* MCSPI2_CS0 */
+ {MCSPI2_CLK, (IEN | M0)}, /* MCSPI2_CLK */
+ {MCSPI2_SIMO, (IEN | M0)}, /* MCSPI2_SIMO*/
+ {MCSPI2_SOMI, (PTU | IEN | M0)}, /* MCSPI2_SOMI*/
+ {I2C4_SCL, (IEN | M0)}, /* I2C4_SCL */
+ {I2C4_SDA, (IEN | M0)}, /* I2C4_SDA */
+ {HDMI_CEC, (IEN | M0)}, /* HDMI_CEC */
+ {HDMI_HPD, (PTD | IEN | M0)}, /* HDMI_HPD */
+ {HDMI_DDC_SCL, (IEN | M0)}, /* HDMI_DDC_SCL */
+ {HDMI_DDC_SDA, (IEN | M0)}, /* HDMI_DDC_SDA */
+ {CSIPORTA_LANE0X, (IEN | M0)}, /* CSIPORTA_LANE0X */
+ {CSIPORTA_LANE0Y, (IEN | M0)}, /* CSIPORTA_LANE0Y */
+ {CSIPORTA_LANE1Y, (IEN | M0)}, /* CSIPORTA_LANE1Y */
+ {CSIPORTA_LANE1X, (IEN | M0)}, /* CSIPORTA_LANE1X */
+ {CSIPORTA_LANE2Y, (IEN | M0)}, /* CSIPORTA_LANE2Y */
+ {CSIPORTA_LANE2X, (IEN | M0)}, /* CSIPORTA_LANE2X */
+ {CSIPORTA_LANE3X, (IEN | M0)}, /* CSIPORTA_LANE3X */
+ {CSIPORTA_LANE3Y, (IEN | M0)}, /* CSIPORTA_LANE3Y */
+ {CSIPORTA_LANE4X, (IEN | M0)}, /* CSIPORTA_LANE4X */
+ {CSIPORTA_LANE4Y, (IEN | M0)}, /* CSIPORTA_LANE4Y */
+ {CSIPORTB_LANE0X, (IEN | M0)}, /* CSIPORTB_LANE0X */
+ {CSIPORTB_LANE0Y, (IEN | M0)}, /* CSIPORTB_LANE0Y */
+ {CSIPORTB_LANE1Y, (IEN | M0)}, /* CSIPORTB_LANE1Y */
+ {CSIPORTB_LANE1X, (IEN | M0)}, /* CSIPORTB_LANE1X */
+ {CSIPORTB_LANE2Y, (IEN | M0)}, /* CSIPORTB_LANE2Y */
+ {CSIPORTB_LANE2X, (IEN | M0)}, /* CSIPORTB_LANE2X */
+ {CSIPORTC_LANE0Y, (IEN | M0)}, /* CSIPORTC_LANE0Y */
+ {CSIPORTC_LANE0X, (IEN | M0)}, /* CSIPORTC_LANE0X */
+ {CSIPORTC_LANE1Y, (IEN | M0)}, /* CSIPORTC_LANE1Y */
+ {CSIPORTC_LANE1X, (IEN | M0)}, /* CSIPORTC_LANE1X */
+ {CAM_SHUTTER, (M0)}, /* CAM_SHUTTER */
+ {CAM_STROBE, (M0)}, /* CAM_STROBE */
+ {CAM_GLOBALRESET, (IEN | M0)}, /* CAM_GLOBALRESET */
+ {TIMER11_PWM_EVT, (PTD | M6)}, /* GPIO8_227 */
+ {TIMER5_PWM_EVT, (PTD | M6)}, /* GPIO8_228 */
+ {TIMER6_PWM_EVT, (PTD | M6)}, /* GPIO8_229 */
+ {TIMER8_PWM_EVT, (PTU | M6)}, /* GPIO8_230 */
+ {I2C3_SCL, (IEN | M0)}, /* I2C3_SCL */
+ {I2C3_SDA, (IEN | M0)}, /* I2C3_SDA */
+ {GPIO8_233, (IEN | M2)}, /* TIMER8_PWM_EVT */
+ {ABE_CLKS, (IEN | M0)}, /* ABE_CLKS */
+ {ABEDMIC_DIN1, (IEN | M0)}, /* ABEDMIC_DIN1 */
+ {ABEDMIC_DIN2, (IEN | M0)}, /* ABEDMIC_DIN2 */
+ {ABEDMIC_DIN3, (IEN | M0)}, /* ABEDMIC_DIN3 */
+ {ABEDMIC_CLK1, (M0)}, /* ABEDMIC_CLK1 */
+ {ABEDMIC_CLK2, (IEN | M1)}, /* ABEMCBSP1_FSX */
+ {ABEDMIC_CLK3, (M1)}, /* ABEMCBSP1_DX */
+ {ABESLIMBUS1_CLOCK, (IEN | M1)}, /* ABEMCBSP1_CLKX */
+ {ABESLIMBUS1_DATA, (IEN | M1)}, /* ABEMCBSP1_DR */
+ {ABEMCBSP2_DR, (IEN | M0)}, /* ABEMCBSP2_DR */
+ {ABEMCBSP2_DX, (M0)}, /* ABEMCBSP2_DX */
+ {ABEMCBSP2_FSX, (IEN | M0)}, /* ABEMCBSP2_FSX */
+ {ABEMCBSP2_CLKX, (IEN | M0)}, /* ABEMCBSP2_CLKX */
+ {ABEMCPDM_UL_DATA, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* ABEMCPDM_UL_DATA */
+ {ABEMCPDM_DL_DATA, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* ABEMCPDM_DL_DATA */
+ {ABEMCPDM_FRAME, (PTU | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* ABEMCPDM_FRAME */
+ {ABEMCPDM_LB_CLK, (PTD | IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* ABEMCPDM_LB_CLK */
+ {WLSDIO_CLK, (PTU | IEN | M0)}, /* WLSDIO_CLK */
+ {WLSDIO_CMD, (PTU | IEN | M0)}, /* WLSDIO_CMD */
+ {WLSDIO_DATA0, (PTU | IEN | M0)}, /* WLSDIO_DATA0*/
+ {WLSDIO_DATA1, (PTU | IEN | M0)}, /* WLSDIO_DATA1*/
+ {WLSDIO_DATA2, (PTU | IEN | M0)}, /* WLSDIO_DATA2*/
+ {WLSDIO_DATA3, (PTU | IEN | M0)}, /* WLSDIO_DATA3*/
+ {UART5_RX, (PTU | IEN | M0)}, /* UART5_RX */
+ {UART5_TX, (M0)}, /* UART5_TX */
+ {UART5_CTS, (PTU | IEN | M0)}, /* UART5_CTS */
+ {UART5_RTS, (M0)}, /* UART5_RTS */
+ {I2C2_SCL, (IEN | M0)}, /* I2C2_SCL */
+ {I2C2_SDA, (IEN | M0)}, /* I2C2_SDA */
+ {MCSPI1_CLK, (M6)}, /* GPIO5_140 */
+ {MCSPI1_SOMI, (IEN | M6)}, /* GPIO5_141 */
+ {MCSPI1_SIMO, (PTD | M6)}, /* GPIO5_142 */
+ {MCSPI1_CS0, (PTD | M6)}, /* GPIO5_143 */
+ {MCSPI1_CS1, (PTD | IEN | M6)}, /* GPIO5_144 */
+ {I2C5_SCL, (IEN | M0)}, /* I2C5_SCL */
+ {I2C5_SDA, (IEN | M0)}, /* I2C5_SDA */
+ {PERSLIMBUS2_CLOCK, (PTD | M6)}, /* GPIO5_145 */
+ {PERSLIMBUS2_DATA, (PTD | IEN | M6)}, /* GPIO5_146 */
+ {UART6_TX, (PTU | IEN | M6)}, /* GPIO5_149 */
+ {UART6_RX, (PTU | IEN | M6)}, /* GPIO5_150 */
+ {UART6_CTS, (PTU | IEN | M6)}, /* GPIO5_151 */
+ {UART6_RTS, (PTU | M0)}, /* UART6_RTS */
+ {UART3_CTS_RCTX, (PTU | IEN | M6)}, /* GPIO5_153 */
+ {UART3_RTS_IRSD, (PTU | IEN | M1)}, /* HDQ_SIO */
+ {USBB3_HSIC_STROBE, (PTU | IEN | M0)}, /* USBB3_HSIC_STROBE*/
+ {USBB3_HSIC_DATA, (PTU | IEN | M0)}, /* USBB3_HSIC_DATA */
+ {USBD0_HS_DP, (IEN | M0)}, /* USBD0_HS_DP */
+ {USBD0_HS_DM, (IEN | M0)}, /* USBD0_HS_DM */
+ {USBD0_SS_RX, (IEN | M0)}, /* USBD0_SS_RX */
+ {I2C1_PMIC_SCL, (PTU | IEN | M0)}, /* I2C1_PMIC_SCL */
+ {I2C1_PMIC_SDA, (PTU | IEN | M0)}, /* I2C1_PMIC_SDA */
+
};
const struct pad_conf_entry wkup_padconf_array_non_essential[] = {
- {PAD0_SIM_IO, (IEN | M0)}, /* sim_io */
- {PAD1_SIM_CLK, (M0)}, /* sim_clk */
- {PAD0_SIM_RESET, (M0)}, /* sim_reset */
- {PAD1_SIM_CD, (PTU | IEN | M0)}, /* sim_cd */
- {PAD0_SIM_PWRCTRL, (M0)}, /* sim_pwrctrl */
- {PAD1_FREF_XTAL_IN, (M0)}, /* # */
- {PAD0_FREF_SLICER_IN, (M0)}, /* fref_slicer_in */
- {PAD1_FREF_CLK_IOREQ, (M0)}, /* fref_clk_ioreq */
- {PAD0_FREF_CLK0_OUT, (M2)}, /* sys_drm_msecure */
- {PAD1_FREF_CLK3_REQ, (PTU | IEN | M0)}, /* # */
- {PAD0_FREF_CLK3_OUT, (M0)}, /* fref_clk3_out */
- {PAD1_FREF_CLK4_REQ, (PTU | IEN | M0)}, /* # */
- {PAD0_FREF_CLK4_OUT, (M0)}, /* # */
- {PAD0_SYS_NRESPWRON, (M0)}, /* sys_nrespwron */
- {PAD1_SYS_NRESWARM, (M0)}, /* sys_nreswarm */
- {PAD0_SYS_PWR_REQ, (PTU | M0)}, /* sys_pwr_req */
- {PAD1_SYS_PWRON_RESET, (M3)}, /* gpio_wk29 */
- {PAD0_SYS_BOOT6, (IEN | M3)}, /* gpio_wk9 */
- {PAD1_SYS_BOOT7, (IEN | M3)}, /* gpio_wk10 */
- {PAD1_FREF_CLK3_REQ, (M3)}, /* gpio_wk30 */
- {PAD1_FREF_CLK4_REQ, (M3)}, /* gpio_wk7 */
- {PAD0_FREF_CLK4_OUT, (M3)}, /* gpio_wk8 */
+
+/*
+ * This pad keeps C2C Module always enabled.
+ * Putting this in safe mode do not cause the issue.
+ * C2C driver could enable this mux setting if needed.
+ */
+ {LLIA_WAKEREQIN, (M7)}, /* SAFE MODE */
+ {LLIB_WAKEREQIN, (M7)}, /* SAFE MODE */
+ {DRM_EMU0, (PTU | IEN | M0)}, /* DRM_EMU0 */
+ {DRM_EMU1, (PTU | IEN | M0)}, /* DRM_EMU1 */
+ {JTAG_NTRST, (IEN | M0)}, /* JTAG_NTRST */
+ {JTAG_TCK, (IEN | M0)}, /* JTAG_TCK */
+ {JTAG_RTCK, (M0)}, /* JTAG_RTCK */
+ {JTAG_TMSC, (IEN | M0)}, /* JTAG_TMSC */
+ {JTAG_TDI, (IEN | M0)}, /* JTAG_TDI */
+ {JTAG_TDO, (M0)}, /* JTAG_TDO */
+ {FREF_CLK_IOREQ, (IEN | M0)}, /* FREF_CLK_IOREQ */
+ {FREF_CLK0_OUT, (M0)}, /* FREF_CLK0_OUT */
+ {FREF_CLK1_OUT, (M0)}, /* FREF_CLK1_OUT */
+ {FREF_CLK2_OUT, (M0)}, /* FREF_CLK2_OUT */
+ {FREF_CLK2_REQ, (PTU | IEN | M6)}, /* GPIO1_WK9 */
+ {FREF_CLK1_REQ, (PTD | IEN | M6)}, /* GPIO1_WK8 */
+ {SYS_NRESPWRON, (IEN | M0)}, /* SYS_NRESPWRON */
+ {SYS_NRESWARM, (PTU | IEN | M0)}, /* SYS_NRESWARM */
+ {SYS_PWR_REQ, (M0)}, /* SYS_PWR_REQ */
+ {SYS_NIRQ1, (PTU | IEN | M0)}, /* SYS_NIRQ1 */
+ {SYS_NIRQ2, (PTU | IEN | M0)}, /* SYS_NIRQ2 */
+ {SYS_BOOT0, (IEN | M0)}, /* SYS_BOOT0 */
+ {SYS_BOOT1, (IEN | M0)}, /* SYS_BOOT1 */
+ {SYS_BOOT2, (IEN | M0)}, /* SYS_BOOT2 */
+ {SYS_BOOT3, (IEN | M0)}, /* SYS_BOOT3 */
+ {SYS_BOOT4, (IEN | M0)}, /* SYS_BOOT4 */
+ {SYS_BOOT5, (IEN | M0)}, /* SYS_BOOT5 */
+
};
#endif /* _EVM4430_MUX_DATA_H */
diff --git a/board/ti/omap730p2/omap730p2.c b/board/ti/omap730p2/omap730p2.c
index 954ced5efe..36204b2c88 100644
--- a/board/ti/omap730p2/omap730p2.c
+++ b/board/ti/omap730p2/omap730p2.c
@@ -129,12 +129,6 @@ int board_init (void)
return 0;
}
-int misc_init_r (void)
-{
- /* currently empty */
- return (0);
-}
-
/******************************
Routine:
Description:
diff --git a/board/ti/panda/panda.c b/board/ti/panda/panda.c
index ca4b8b35eb..ee82771b08 100644
--- a/board/ti/panda/panda.c
+++ b/board/ti/panda/panda.c
@@ -179,7 +179,7 @@ void set_muxconf_regs_non_essential(void)
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/ti/panda/panda_mux_data.h b/board/ti/panda/panda_mux_data.h
index 5b66a14242..dc8b3886c2 100644
--- a/board/ti/panda/panda_mux_data.h
+++ b/board/ti/panda/panda_mux_data.h
@@ -76,7 +76,7 @@ const struct pad_conf_entry wkup_padconf_array_essential[] = {
const struct pad_conf_entry wkup_padconf_array_essential_4460[] = {
-{PAD1_FREF_CLK4_REQ, (PTU | M7)}, /* gpio_wk7 for TPS: safe mode + pull up */
+{PAD1_FREF_CLK4_REQ, (M3)}, /* gpio_wk7 for TPS: Mode 3 */
};
@@ -168,10 +168,10 @@ const struct pad_conf_entry core_padconf_array_non_essential[] = {
{ABE_DMIC_DIN1, (IEN | M0)}, /* abe_dmic_din1 */
{ABE_DMIC_DIN2, (PTU | IEN | M3)}, /* gpio_121 */
{ABE_DMIC_DIN3, (IEN | M0)}, /* abe_dmic_din3 */
- {UART2_CTS, (PTU | IEN | M0)}, /* uart2_cts */
- {UART2_RTS, (M0)}, /* uart2_rts */
- {UART2_RX, (PTU | IEN | M0)}, /* uart2_rx */
- {UART2_TX, (M0)}, /* uart2_tx */
+ {UART2_CTS, (PTU | IEN | M7)}, /* uart2_cts */
+ {UART2_RTS, (M7)}, /* uart2_rts */
+ {UART2_RX, (PTU | IEN | M7)}, /* uart2_rx */
+ {UART2_TX, (M7)}, /* uart2_tx */
{HDQ_SIO, (M3)}, /* gpio_127 */
{MCSPI1_CLK, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi1_clk */
{MCSPI1_SOMI, (IEN | OFF_EN | OFF_PD | OFF_IN | M0)}, /* mcspi1_somi */
diff --git a/board/ti/sdp3430/sdp.c b/board/ti/sdp3430/sdp.c
index d73f501819..9a1c012145 100644
--- a/board/ti/sdp3430/sdp.c
+++ b/board/ti/sdp3430/sdp.c
@@ -209,7 +209,7 @@ void set_muxconf_regs(void)
#ifdef CONFIG_GENERIC_MMC
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/ti/sdp4430/sdp.c b/board/ti/sdp4430/sdp.c
index 9ae9e2c602..982c771a73 100644
--- a/board/ti/sdp4430/sdp.c
+++ b/board/ti/sdp4430/sdp.c
@@ -108,8 +108,8 @@ void set_muxconf_regs_non_essential(void)
#if !defined(CONFIG_SPL_BUILD) && defined(CONFIG_GENERIC_MMC)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
- omap_mmc_init(1);
+ omap_mmc_init(0, 0, 0);
+ omap_mmc_init(1, 0, 0);
return 0;
}
#endif
diff --git a/board/ti/sdp4430/sdp4430_mux_data.h b/board/ti/sdp4430/sdp4430_mux_data.h
index 0a20968978..6140b999ef 100644
--- a/board/ti/sdp4430/sdp4430_mux_data.h
+++ b/board/ti/sdp4430/sdp4430_mux_data.h
@@ -67,7 +67,7 @@ const struct pad_conf_entry wkup_padconf_array_essential[] = {
const struct pad_conf_entry wkup_padconf_array_essential_4460[] = {
-{PAD1_FREF_CLK4_REQ, (PTU | M7)}, /* gpio_wk7 for TPS: safe mode + pull up */
+{PAD1_FREF_CLK4_REQ, (M3)}, /* gpio_wk7 for TPS: Mode 3 */
};
diff --git a/board/timll/devkit3250/Makefile b/board/timll/devkit3250/Makefile
new file mode 100644
index 0000000000..ea7827c80d
--- /dev/null
+++ b/board/timll/devkit3250/Makefile
@@ -0,0 +1,44 @@
+#
+# Copyright (C) 2011 by Vladimir Zapolskiy <vz@mleia.com>
+# Copyright (C) 2008, Guennadi Liakhovetski <lg@denx.de>
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+# MA 02110-1301, USA.
+#
+
+include $(TOPDIR)/config.mk
+
+LIB = $(obj)lib$(BOARD).o
+
+COBJS := devkit3250.o
+
+SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+SOBJS := $(addprefix $(obj),$(SOBJS))
+
+$(LIB): $(obj).depend $(OBJS) $(SOBJS)
+ $(call cmd_link_o_target, $(OBJS) $(SOBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/board/timll/devkit3250/devkit3250.c b/board/timll/devkit3250/devkit3250.c
new file mode 100644
index 0000000000..6b0ec80fcd
--- /dev/null
+++ b/board/timll/devkit3250/devkit3250.c
@@ -0,0 +1,65 @@
+/*
+ * Embest/Timll DevKit3250 board support
+ *
+ * Copyright (C) 2011 Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <asm/arch/sys_proto.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/emc.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static struct emc_regs *emc = (struct emc_regs *)EMC_BASE;
+
+int board_early_init_f(void)
+{
+ lpc32xx_uart_init(CONFIG_SYS_LPC32XX_UART);
+
+ return 0;
+}
+
+int board_init(void)
+{
+ /* adress of boot parameters */
+ gd->bd->bi_boot_params = CONFIG_SYS_SDRAM_BASE + 0x100;
+
+#ifdef CONFIG_SYS_FLASH_CFI
+ /* Use 16-bit memory interface for NOR Flash */
+ emc->stat[0].config = EMC_STAT_CONFIG_PB | EMC_STAT_CONFIG_16BIT;
+
+ /* Change the NOR timings to optimum value to get maximum bandwidth */
+ emc->stat[0].waitwen = EMC_STAT_WAITWEN(1);
+ emc->stat[0].waitoen = EMC_STAT_WAITOEN(1);
+ emc->stat[0].waitrd = EMC_STAT_WAITRD(12);
+ emc->stat[0].waitpage = EMC_STAT_WAITPAGE(12);
+ emc->stat[0].waitwr = EMC_STAT_WAITWR(5);
+ emc->stat[0].waitturn = EMC_STAT_WAITTURN(2);
+#endif
+
+ return 0;
+}
+
+int dram_init(void)
+{
+ gd->ram_size = get_ram_size((void *)CONFIG_SYS_SDRAM_BASE,
+ CONFIG_SYS_SDRAM_SIZE);
+
+ return 0;
+}
diff --git a/board/timll/devkit8000/devkit8000.c b/board/timll/devkit8000/devkit8000.c
index d75e86b32e..35f5e15fc2 100644
--- a/board/timll/devkit8000/devkit8000.c
+++ b/board/timll/devkit8000/devkit8000.c
@@ -136,7 +136,7 @@ void set_muxconf_regs(void)
#if defined(CONFIG_GENERIC_MMC) && !defined(CONFIG_SPL_BUILD)
int board_mmc_init(bd_t *bis)
{
- omap_mmc_init(0);
+ omap_mmc_init(0, 0, 0);
return 0;
}
#endif
diff --git a/board/xilinx/ml507/.gitignore b/board/xilinx/ml507/.gitignore
deleted file mode 100644
index f6418a0c50..0000000000
--- a/board/xilinx/ml507/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/config.tmp
diff --git a/board/xilinx/ppc405-generic/.gitignore b/board/xilinx/ppc405-generic/.gitignore
deleted file mode 100644
index b644f59941..0000000000
--- a/board/xilinx/ppc405-generic/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-config.tmp
diff --git a/board/xilinx/ppc440-generic/.gitignore b/board/xilinx/ppc440-generic/.gitignore
deleted file mode 100644
index f6418a0c50..0000000000
--- a/board/xilinx/ppc440-generic/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/config.tmp
diff --git a/boards.cfg b/boards.cfg
index 3cf75c3151..da1458c576 100644
--- a/boards.cfg
+++ b/boards.cfg
@@ -136,6 +136,7 @@ hawkboard arm arm926ejs da8xxevm davinci
hawkboard_uart arm arm926ejs da8xxevm davinci davinci hawkboard:UART_U_BOOT
enbw_cmc arm arm926ejs enbw_cmc enbw davinci
calimain arm arm926ejs calimain omicron davinci
+pogo_e02 arm arm926ejs - cloudengines kirkwood
dns325 arm arm926ejs - d-link kirkwood
km_kirkwood arm arm926ejs km_arm keymile kirkwood km_kirkwood:KM_DISABLE_PCI
km_kirkwood_pci arm arm926ejs km_arm keymile kirkwood km_kirkwood:KM_RECONFIG_XLX
@@ -153,7 +154,9 @@ openrd_client arm arm926ejs openrd Marvell
openrd_ultimate arm arm926ejs openrd Marvell kirkwood openrd:BOARD_IS_OPENRD_ULTIMATE
rd6281a arm arm926ejs - Marvell kirkwood
sheevaplug arm arm926ejs - Marvell kirkwood
+ib62x0 arm arm926ejs ib62x0 raidsonic kirkwood
dockstar arm arm926ejs - Seagate kirkwood
+devkit3250 arm arm926ejs devkit3250 timll lpc32xx
jadecpu arm arm926ejs jadecpu syteco mb86r0x
mx25pdk arm arm926ejs mx25pdk freescale mx25 mx25pdk:IMX_CONFIG=board/freescale/mx25pdk/imximage.cfg
tx25 arm arm926ejs tx25 karo mx25
@@ -170,6 +173,7 @@ omap730p2_cs0boot arm arm926ejs omap730p2 ti omap
omap730p2_cs3boot arm arm926ejs omap730p2 ti omap omap730p2:CS3_BOOT
edminiv2 arm arm926ejs - LaCie orion5x
dkb arm arm926ejs - Marvell pantheon
+rdaarm926ejs arm arm926ejs rdaarm926ejs rda rda
spear300 arm arm926ejs spear300 spear spear spear3xx:spear300
spear310 arm arm926ejs spear310 spear spear spear3xx:spear310
spear320 arm arm926ejs spear320 spear spear spear3xx:spear320
@@ -189,6 +193,7 @@ mx53ard arm armv7 mx53ard freesca
mx53evk arm armv7 mx53evk freescale mx5 mx53evk:IMX_CONFIG=board/freescale/mx53evk/imximage.cfg
mx53loco arm armv7 mx53loco freescale mx5 mx53loco:IMX_CONFIG=board/freescale/mx53loco/imximage.cfg
mx53smd arm armv7 mx53smd freescale mx5 mx53smd:IMX_CONFIG=board/freescale/mx53smd/imximage.cfg
+ima3-mx53 arm armv7 ima3-mx53 esg mx5 ima3-mx53:IMX_CONFIG=board/esg/ima3-mx53/imximage.cfg
vision2 arm armv7 vision2 ttcontrol mx5 vision2:IMX_CONFIG=board/ttcontrol/vision2/imximage_hynix.cfg
mx6qarm2 arm armv7 mx6qarm2 freescale mx6 mx6qarm2:IMX_CONFIG=board/freescale/mx6qarm2/imximage.cfg
mx6qsabrelite arm armv7 mx6qsabrelite freescale mx6 mx6qsabrelite:IMX_CONFIG=board/freescale/mx6qsabrelite/imximage.cfg
@@ -196,8 +201,8 @@ cm_t35 arm armv7 cm_t35 -
omap3_overo arm armv7 overo - omap3
omap3_pandora arm armv7 pandora - omap3
dig297 arm armv7 dig297 comelit omap3
-igep0020 arm armv7 igep0020 isee omap3
-igep0030 arm armv7 igep0030 isee omap3
+igep0020 arm armv7 igep0020 isee omap3 igep00x0:MACH_TYPE=MACH_TYPE_IGEP0020
+igep0030 arm armv7 igep0030 isee omap3 igep00x0:MACH_TYPE=MACH_TYPE_IGEP0030
am3517_evm arm armv7 am3517evm logicpd omap3
mt_ventoux arm armv7 mt_ventoux teejet omap3
omap3_zoom1 arm armv7 zoom1 logicpd omap3
@@ -228,6 +233,12 @@ harmony arm armv7 harmony nvidia
seaboard arm armv7 seaboard nvidia tegra2
ventana arm armv7 ventana nvidia tegra2
u8500_href arm armv7 u8500 st-ericsson u8500
+rda8810 arm armv7 rda8810 rda rda
+rda8810e arm armv7 rda8810e rda rda
+rda8810h arm armv7 rda8810h rda rda
+rda8820 arm armv7 rda8820 rda rda
+rda8850 arm armv7 rda8850 rda rda
+rda8850e arm armv7 rda8850e rda rda
actux1_4_16 arm ixp actux1 - - actux1:FLASH2X2
actux1_4_32 arm ixp actux1 - - actux1:FLASH2X2,RAM_32MB
actux1_8_16 arm ixp actux1 - - actux1:FLASH1X8
@@ -370,6 +381,7 @@ incaip_150MHz mips mips32 incaip -
qi_lb60 mips xburst qi_lb60 qi
adp-ag101 nds32 n1213 adp-ag101 AndesTech ag101
adp-ag101p nds32 n1213 adp-ag101p AndesTech ag101
+adp-ag102 nds32 n1213 adp-ag102 AndesTech ag102
nios2-generic nios2 nios2 nios2-generic altera
PCI5441 nios2 nios2 pci5441 psyent
PK1C20 nios2 nios2 pk1c20 psyent
@@ -742,6 +754,7 @@ P2020RDB-PC_SPIFLASH powerpc mpc85xx p1_p2_rdb_pc freesca
P2020RDB_SDCARD powerpc mpc85xx p1_p2_rdb freescale - P1_P2_RDB:P2020RDB,SDCARD
P2020RDB_SPIFLASH powerpc mpc85xx p1_p2_rdb freescale - P1_P2_RDB:P2020RDB,SPIFLASH
P2041RDB powerpc mpc85xx p2041rdb freescale
+P2041RDB_NAND powerpc mpc85xx p2041rdb freescale - P2041RDB:RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF80000
P2041RDB_SDCARD powerpc mpc85xx p2041rdb freescale - P2041RDB:RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
P2041RDB_SECURE_BOOT powerpc mpc85xx p2041rdb freescale - P2041RDB:SECURE_BOOT
P2041RDB_SPIFLASH powerpc mpc85xx p2041rdb freescale - P2041RDB:RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
@@ -750,6 +763,8 @@ P3041DS_NAND powerpc mpc85xx corenet_ds freescale -
P3041DS_SDCARD powerpc mpc85xx corenet_ds freescale - P3041DS:RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
P3041DS_SECURE_BOOT powerpc mpc85xx corenet_ds freescale - P3041DS:SECURE_BOOT
P3041DS_SPIFLASH powerpc mpc85xx corenet_ds freescale - P3041DS:RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
+P3041DS_SRIOBOOT_MASTER powerpc mpc85xx corenet_ds freescale - P3041DS:SRIOBOOT_MASTER
+P3041DS_SRIOBOOT_SLAVE powerpc mpc85xx corenet_ds freescale - P3041DS:SRIOBOOT_SLAVE,SYS_TEXT_BASE=0xFFF80000
P3060QDS powerpc mpc85xx p3060qds freescale
P3060QDS_NAND powerpc mpc85xx p3060qds freescale - P3060QDS:RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF80000
P3060QDS_SECURE_BOOT powerpc mpc85xx p3060qds freescale - P3060QDS:SECURE_BOOT
@@ -757,11 +772,15 @@ P4080DS powerpc mpc85xx corenet_ds freesca
P4080DS_SDCARD powerpc mpc85xx corenet_ds freescale - P4080DS:RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
P4080DS_SECURE_BOOT powerpc mpc85xx corenet_ds freescale - P4080DS:SECURE_BOOT
P4080DS_SPIFLASH powerpc mpc85xx corenet_ds freescale - P4080DS:RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
+P4080DS_SRIOBOOT_MASTER powerpc mpc85xx corenet_ds freescale - P4080DS:SRIOBOOT_MASTER
+P4080DS_SRIOBOOT_SLAVE powerpc mpc85xx corenet_ds freescale - P4080DS:SRIOBOOT_SLAVE,SYS_TEXT_BASE=0xFFF80000
P5020DS powerpc mpc85xx corenet_ds freescale
P5020DS_NAND powerpc mpc85xx corenet_ds freescale - P5020DS:RAMBOOT_PBL,NAND,SYS_TEXT_BASE=0xFFF80000
P5020DS_SDCARD powerpc mpc85xx corenet_ds freescale - P5020DS:RAMBOOT_PBL,SDCARD,SYS_TEXT_BASE=0xFFF80000
P5020DS_SECURE_BOOT powerpc mpc85xx corenet_ds freescale - P5020DS:SECURE_BOOT
P5020DS_SPIFLASH powerpc mpc85xx corenet_ds freescale - P5020DS:RAMBOOT_PBL,SPIFLASH,SYS_TEXT_BASE=0xFFF80000
+P5020DS_SRIOBOOT_MASTER powerpc mpc85xx corenet_ds freescale - P5020DS:SRIOBOOT_MASTER
+P5020DS_SRIOBOOT_SLAVE powerpc mpc85xx corenet_ds freescale - P5020DS:SRIOBOOT_SLAVE,SYS_TEXT_BASE=0xFFF80000
stxgp3 powerpc mpc85xx stxgp3 stx
stxssa powerpc mpc85xx stxssa stx - stxssa
stxssa_4M powerpc mpc85xx stxssa stx - stxssa:STXSSA_4M
@@ -982,7 +1001,7 @@ intip powerpc ppc4xx intip gdsys
io powerpc ppc4xx 405ep gdsys
io64 powerpc ppc4xx 405ex gdsys
iocon powerpc ppc4xx 405ep gdsys
-neo powerpc ppc4xx - gdsys
+neo powerpc ppc4xx 405ep gdsys
icon powerpc ppc4xx - mosaixtech
MIP405 powerpc ppc4xx mip405 mpl
MIP405T powerpc ppc4xx mip405 mpl - MIP405:MIP405T
diff --git a/common/Makefile b/common/Makefile
index d9f10f3f6e..7c828fc587 100644
--- a/common/Makefile
+++ b/common/Makefile
@@ -59,6 +59,7 @@ COBJS-$(CONFIG_ENV_IS_IN_NAND) += env_nand.o
COBJS-$(CONFIG_ENV_IS_IN_NVRAM) += env_nvram.o
COBJS-$(CONFIG_ENV_IS_IN_ONENAND) += env_onenand.o
COBJS-$(CONFIG_ENV_IS_IN_SPI_FLASH) += env_sf.o
+COBJS-$(CONFIG_ENV_IS_IN_REMOTE) += env_remote.o
COBJS-$(CONFIG_ENV_IS_NOWHERE) += env_nowhere.o
# command
@@ -123,6 +124,7 @@ ifdef CONFIG_PHYLIB
COBJS-$(CONFIG_CMD_MII) += cmd_mdio.o
endif
COBJS-$(CONFIG_CMD_MISC) += cmd_misc.o
+COBJS-$(CONFIG_CMD_MDCOM) += cmd_mdcom.o
COBJS-$(CONFIG_CMD_MMC) += cmd_mmc.o
COBJS-$(CONFIG_CMD_MMC_SPI) += cmd_mmc_spi.o
COBJS-$(CONFIG_MP) += cmd_mp.o
@@ -189,6 +191,7 @@ endif
ifdef CONFIG_SPL_BUILD
COBJS-$(CONFIG_SPL_YMODEM_SUPPORT) += xyzModem.o
+COBJS-$(CONFIG_SPL_IMAGE_SUPPORT) += image.o
endif
COBJS-y += console.o
COBJS-y += dlmalloc.o
@@ -204,6 +207,11 @@ XOBJS := $(addprefix $(obj),$(XCOBJS))
CPPFLAGS += -I..
+ifeq ($(REBOOT_WHEN_CRASH),1)
+CPPFLAGS_common/cmd_misc.o += -DREBOOT_WHEN_CRASH
+CPPFLAGS_common/main.o += -DREBOOT_WHEN_CRASH
+endif
+
all: $(LIB) $(XOBJS)
$(LIB): $(obj).depend $(OBJS)
diff --git a/common/cmd_bdinfo.c b/common/cmd_bdinfo.c
index 5359a47859..42f08fdd0d 100644
--- a/common/cmd_bdinfo.c
+++ b/common/cmd_bdinfo.c
@@ -119,6 +119,14 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
print_mhz("pevfreq", bd->bi_pevfreq);
#endif
+#ifdef CONFIG_ENABLE_36BIT_PHYS
+#ifdef CONFIG_PHYS_64BIT
+ puts("addressing = 36-bit\n");
+#else
+ puts("addressing = 32-bit\n");
+#endif
+#endif
+
print_eth(0);
#if defined(CONFIG_HAS_ETH1)
print_eth(1);
@@ -139,7 +147,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#ifdef CONFIG_HERMES
print_mhz("ethspeed", bd->bi_ethspeed);
#endif
- printf("IP addr = %pI4\n", &bd->bi_ip_addr);
+ printf("IP addr = %s\n", getenv("ipaddr"));
printf("baudrate = %6ld bps\n", bd->bi_baudrate);
print_num("relocaddr", gd->relocaddr);
return 0;
@@ -164,7 +172,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %ld bps\n", bd->bi_baudrate);
@@ -188,7 +196,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#endif
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %ld bps\n", (ulong)bd->bi_baudrate);
return 0;
@@ -221,7 +229,7 @@ int do_bdinfo(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %6ld bps\n", bd->bi_baudrate);
return 0;
@@ -267,7 +275,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
print_eth(3);
#endif
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %ld bps\n", bd->bi_baudrate);
@@ -295,7 +303,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
print_num("flashoffset", (ulong)bd->bi_flashoffset);
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
printf("baudrate = %d bps\n", bd->bi_baudrate);
return 0;
@@ -315,7 +323,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
print_num("flashoffset", (ulong)bd->bi_flashoffset);
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
printf("baudrate = %d bps\n", bd->bi_baudrate);
return 0;
@@ -335,7 +343,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
print_num("flashoffset", (ulong)bd->bi_flashoffset);
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
printf("baudrate = %lu bps\n", bd->bi_baudrate);
return 0;
@@ -359,7 +367,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %d bps\n", bd->bi_baudrate);
#if !(defined(CONFIG_SYS_ICACHE_OFF) && defined(CONFIG_SYS_DCACHE_OFF))
@@ -395,7 +403,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %ld bps\n", (ulong)bd->bi_baudrate);
return 0;
@@ -428,7 +436,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
print_mhz("ethspeed", bd->bi_ethspeed);
#endif
printf("baudrate = %d bps\n", bd->bi_baudrate);
@@ -453,7 +461,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
print_num("FB base ", gd->fb_base);
return 0;
@@ -477,7 +485,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %d bps\n", bd->bi_baudrate);
@@ -498,7 +506,7 @@ int do_bdinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#if defined(CONFIG_CMD_NET)
print_eth(0);
- printf("ip_addr = %pI4\n", &bd->bi_ip_addr);
+ printf("ip_addr = %s\n", getenv("ipaddr"));
#endif
printf("baudrate = %ld bps\n", bd->bi_baudrate);
diff --git a/common/cmd_bootm.c b/common/cmd_bootm.c
index 5685232892..45e726af8b 100644
--- a/common/cmd_bootm.c
+++ b/common/cmd_bootm.c
@@ -1587,7 +1587,6 @@ static int bootz_start(cmd_tbl_t *cmdtp, int flag, int argc,
static int do_bootz(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
- ulong iflag;
bootm_headers_t images;
if (bootz_start(cmdtp, flag, argc, argv, &images))
@@ -1598,7 +1597,7 @@ static int do_bootz(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
* overwrite all exception vector code, so we cannot easily
* recover from any failures any more...
*/
- iflag = disable_interrupts();
+ disable_interrupts();
#if defined(CONFIG_CMD_USB)
/*
diff --git a/common/cmd_load.c b/common/cmd_load.c
index f4d66deae3..cd00ad1251 100644
--- a/common/cmd_load.c
+++ b/common/cmd_load.c
@@ -975,7 +975,7 @@ static ulong load_serial_ymodem (ulong offset)
ulong addr = 0;
size = 0;
- info.mode = xyzModem_ymodem;
+ info.mode = xyzModem_xmodem;
res = xyzModem_stream_open (&info, &err);
if (!res) {
diff --git a/common/cmd_mdcom.c b/common/cmd_mdcom.c
new file mode 100644
index 0000000000..a2bc1bac59
--- /dev/null
+++ b/common/cmd_mdcom.c
@@ -0,0 +1,1360 @@
+/*
+ * (C) Copyright 2001
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * Misc functions
+ */
+#include <common.h>
+#include <command.h>
+#include <usb/usbserial.h>
+#include <nand.h>
+#include <jffs2/jffs2.h>
+#include <asm/arch/mdcom.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/factory.h>
+#include <asm/arch/prdinfo.h>
+#include <asm/arch/rda_sys.h>
+#include <part.h>
+#include <mmc.h>
+#include <mmc/mmcpart.h>
+#include <nand.h>
+#include <malloc.h>
+#include <linux/mtd/nand.h>
+#include <mtd/nand/rda_nand.h>
+
+
+#if 1
+#define bb_dbg(fmt, args...) printf(fmt, ##args)
+#else
+#define bb_dbg(fmt, args...) do {} while(0)
+#endif
+
+#define RDA_ADD_ROUNDUP(x) (((x) + 3) & ~3)
+#define RDA_CHN_BUF_LEN 140
+
+struct rda_sys_hdr {
+ u16 magic;
+ u16 mod_id;
+ u32 req_id;
+ u32 ret_val;
+ u16 msg_id;
+ u16 ext_len;
+ u8 ext_data[];
+};
+
+struct rda_bp_info {
+ u32 bm_ver;
+ u32 bm_commit_rev;
+ u32 bm_build_date;
+ u32 bs_ver;
+ u32 bs_commit_rev;
+ u32 bs_build_date;
+};
+
+extern int mtdparts_init_default(void);
+extern int find_dev_and_part(const char *id, struct mtd_device **dev,
+ u8 *part_num, struct part_info **part);
+
+#ifdef REBOOT_WHEN_CRASH
+#define ROLLBACK_TO_RECOVERY_MODE 0
+#endif
+
+/*
+ * Syntax:
+ * mdcom_send {channel} {adress} {size} [{timeout} {mode}]
+ */
+int do_mdcom_send(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ unsigned int channel;
+ void *buf;
+ int size;
+ int timeout = 0;
+ int mode = 0;
+
+ if (argc < 4)
+ return CMD_RET_USAGE;
+
+ channel = simple_strtoul(argv[1], NULL, 10);
+ buf = (void*) simple_strtoul(argv[2], NULL, 16);
+ size = simple_strtoul(argv[3], NULL, 10);
+ if (argc >4)
+ timeout = simple_strtoul(argv[4], NULL, 10);
+ if (argc >5)
+ mode = simple_strtoul(argv[5], NULL, 10);
+
+ if (mode) {
+ bb_dbg("MDCOM send %d bytes stream to channel %d with returned value %d.\n",
+ size, channel, rda_mdcom_channel_buf_send_stream(channel, buf,
+ size, timeout));
+ } else {
+ bb_dbg("MDCOM send %d bytes dgram to channel %d with returned value %d.\n",
+ size, channel, rda_mdcom_channel_buf_send_dgram(channel, buf,
+ size, timeout));
+ }
+
+ rda_mdcom_channel_show(channel);
+ return 0;
+}
+
+/*
+ * Syntax:
+ * mdcom_recv {channel} {adress} {size} [{timeout} {mode}]
+ */
+int do_mdcom_recv(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ unsigned int channel;
+ void *buf;
+ int size;
+ int timeout = 0;
+ int mode = 0;
+
+ if (argc < 4)
+ return CMD_RET_USAGE;
+
+ channel = simple_strtoul(argv[1], NULL, 10);
+ buf = (void*) simple_strtoul(argv[2], NULL, 16);
+ size = simple_strtoul(argv[3], NULL, 10);
+ if (argc >4)
+ timeout = simple_strtoul(argv[4], NULL, 10);
+ if (argc >5)
+ mode = simple_strtoul(argv[5], NULL, 10);
+
+ if (mode) {
+ bb_dbg("MDCOM receive %d bytes stream from channel %d with returned value %d.\n",
+ size, channel, rda_mdcom_channel_buf_recv_stream(channel, buf,
+ size, timeout));
+ } else {
+ bb_dbg("MDCOM receive %d bytes dgram from channel %d with returned value %d.\n",
+ size, channel, rda_mdcom_channel_buf_recv_dgram(channel, buf,
+ size, timeout));
+ }
+
+ rda_mdcom_channel_show(channel);
+ return 0;
+}
+
+static int rda_image_verify_header(const image_header_t *hdr)
+{
+ bb_dbg(" Verifying Image Header ... ");
+ if (!image_check_magic(hdr)) {
+ bb_dbg("Bad Magic Number\n");
+ return CMD_RET_FAILURE;
+ }
+
+ if (!image_check_hcrc(hdr)) {
+ bb_dbg("Bad Header Checksum\n");
+ return CMD_RET_FAILURE;
+ }
+ bb_dbg("OK\n");
+
+ image_print_contents(hdr);
+
+ return CMD_RET_SUCCESS;
+}
+
+static int rda_image_verify_data(const image_header_t *hdr)
+{
+ bb_dbg(" Verifying Data Checksum ... ");
+ if (!image_check_dcrc(hdr)) {
+ bb_dbg("Bad Data CRC\n");
+ return CMD_RET_FAILURE;
+ }
+ bb_dbg("OK\n");
+
+ return CMD_RET_SUCCESS;
+}
+
+static int rda_image_verify(const image_header_t *hdr)
+{
+ int ret;
+
+ ret = rda_image_verify_header(hdr);
+ if (ret == CMD_RET_SUCCESS) {
+ ret = rda_image_verify_data(hdr);
+ }
+ return ret;
+}
+
+int rda_modem_image_load(const image_header_t *hdr, int cal_en)
+{
+ u32 pc, param;
+ u32 modem_load_addr = image_get_load(hdr);
+ u32 ap_load_addr = rda_mdcom_address_modem2ap(modem_load_addr);
+
+ bb_dbg("%08x (AP address %08x) ...\n", modem_load_addr, ap_load_addr);
+
+ memcpy((void *)ap_load_addr, (const void *)image_get_data(hdr),
+ image_get_size(hdr));
+
+ pc = image_get_ep(hdr);
+ param = cal_en ? 0xCA1BCA1B : 0;
+ if (rda_mdcom_setup_run_env(pc, param))
+ return -1;
+
+ bb_dbg(" pc = %08x\n", pc);
+ bb_dbg(" param = %08x\n", param);
+ bb_dbg("Done\n");
+
+ return 0;
+}
+
+int rda_modem_cal_save(void)
+{
+ u32 addr, size;
+ int ret;
+
+ /* update all data to factorydata part. */
+ rda_mdcom_get_calib_section(&addr, &size);
+ factory_set_modem_calib((unsigned char *)addr);
+ rda_mdcom_get_ext_calib_section(&addr, &size);
+ factory_set_modem_ext_calib((unsigned char *)addr);
+ rda_mdcom_get_factory_section(&addr, &size);
+ factory_set_modem_factory((unsigned char *)addr);
+ rda_mdcom_get_ap_factory_section(&addr, &size);
+ factory_set_ap_factory((unsigned char *)addr);
+
+ ret = factory_burn();
+ if (ret) {
+ bb_dbg("Error when saving calibration data\n");
+ return ret;
+ }
+ return 0;
+}
+
+static void rda_modem_handle_syscmd(void)
+{
+ u8 md_com_buf[RDA_CHN_BUF_LEN / sizeof(u8)];
+ struct rda_sys_hdr *phdr = (struct rda_sys_hdr *)md_com_buf;
+
+#ifdef TEST_SYS
+ static int test_num = 0;
+ u8 tx_buf[RDA_CHN_BUF_LEN / sizeof(u8)];
+ struct rda_sys_hdr *ptx_hdr;
+ u32 *pext;
+ int ret;
+
+ if (test_num < 40) {
+ ptx_hdr = (struct rda_sys_hdr *) tx_buf;
+
+ ptx_hdr->magic = 0xA8B1;
+ ptx_hdr->mod_id = 0x1;
+ ptx_hdr->msg_id = 0x2000 + test_num;
+ ptx_hdr->req_id = 0xA1234567;
+ ptx_hdr->ret_val = 0xF7654321;
+
+ ptx_hdr->ext_len = 4;
+ pext = (u32 *)ptx_hdr->ext_data;
+ pext[0] = 0x1000123F;
+
+ ret = rda_mdcom_channel_buf_send_dgram(RDA_MDCOM_CHANNEL_SYSTEM, tx_buf, 16, 0);
+ if (!ret) {
+ rda_mdcom_line_set(RDA_MDCOM_PORT1, 2);
+ test_num++;
+ }
+ }
+#endif /* TEST_SYS */
+
+ if (!rda_mdcom_tstc(RDA_MDCOM_CHANNEL_SYSTEM))
+ return;
+
+ if (rda_mdcom_channel_buf_recv_dgram(
+ RDA_MDCOM_CHANNEL_SYSTEM,
+ md_com_buf,
+ 16,
+ usec2ticks(1000)))
+ return;
+
+ if (phdr->magic == 0xA8B1) {
+ u16 len;
+ u8 *pdata;
+ u32 i;
+ u32 *pret;
+
+ len = phdr->ext_len;
+
+ bb_dbg("## RECEIVED SYSTEM CMD:\n");
+ bb_dbg("MODID - 0x%04x\n", phdr->mod_id);
+ bb_dbg("REQID - 0x%08x\n", phdr->req_id);
+ bb_dbg("RETVAL - 0x%08x\n", phdr->ret_val);
+ bb_dbg("MSGID - 0x%04x\n", phdr->msg_id);
+ bb_dbg("LEN - 0x%04x\n", phdr->ext_len);
+
+ if (len) {
+ pdata = phdr->ext_data;
+
+ if (len > 128) {
+ bb_dbg("Length is invalid!\n");
+ } else if (len != rda_mdcom_channel_buf_recv_stream(
+ RDA_MDCOM_CHANNEL_SYSTEM, pdata, len, 0)) {
+ bb_dbg("Read Parameters Failed!\n");
+ } else {
+ bb_dbg("Params - ");
+ for (i = 0; i < len; i++) {
+ bb_dbg("%02x ", pdata[i]);
+ }
+ bb_dbg("\n\n");
+ }
+ } else {
+ if ((phdr->mod_id == 1) && (phdr->msg_id == 2)) {
+ bb_dbg("Calibration done\n");
+ phdr->msg_id = 0x1001;
+ phdr->ext_len = 4;
+ pret = (u32 *) phdr->ext_data;
+
+ if (rda_modem_cal_save()) {
+ pret[0] = 0x0;
+ bb_dbg("Calibration data save failed\n");
+ } else {
+ pret[0] = 0x1;
+ bb_dbg("Calibration data save succeed\n");
+ prdinfo_set_cali_result(1);
+ }
+
+ rda_mdcom_channel_buf_send_dgram(
+ RDA_MDCOM_CHANNEL_SYSTEM, md_com_buf, 20, 0);
+ rda_mdcom_line_set(RDA_MDCOM_PORT1, 2);
+ }
+ }
+ }
+}
+
+static void rda_modem_handle_trace(void)
+{
+ u8 md_com_buf[RDA_CHN_BUF_LEN / sizeof(u8)];
+ int ch;
+
+ while (rda_mdcom_tstc(RDA_MDCOM_CHANNEL_TRACE)) {
+ int len = rda_mdcom_channel_buf_recv_stream(
+ RDA_MDCOM_CHANNEL_TRACE,
+ md_com_buf,
+ 128,
+ 0);
+ usbser_write(USB_ACM_CHAN_0, (unsigned char *) md_com_buf, len);
+ }
+
+ while (usbser_tstc(USB_ACM_CHAN_0) &&
+ rda_mdcom_channel_buf_send_available(RDA_MDCOM_CHANNEL_TRACE)) {
+ ch = usbser_getc(USB_ACM_CHAN_0);
+ rda_mdcom_putc((char) ch, RDA_MDCOM_CHANNEL_TRACE);
+ }
+}
+
+static void rda_modem_handle_atcmd(void)
+{
+ u8 md_com_buf[RDA_CHN_BUF_LEN / sizeof(u8)];
+ if (!rda_mdcom_tstc(RDA_MDCOM_CHANNEL_AT))
+ return;
+
+ bb_dbg("## RECEIVED AT CMD:");
+ do {
+ unsigned short len = rda_mdcom_channel_buf_recv_stream(
+ RDA_MDCOM_CHANNEL_AT,
+ md_com_buf,
+ 128,
+ 0);
+ *((char*) md_com_buf + len) = 0;
+ puts((const char *) md_com_buf);
+ } while (rda_mdcom_tstc(RDA_MDCOM_CHANNEL_AT));
+ bb_dbg("\n");
+}
+
+int rda_modem_cal_load(void)
+{
+ u32 addr, size;
+ const u8 *data;
+
+ /* extended calibration data */
+ rda_mdcom_get_ext_calib_section(&addr, &size);
+ data = factory_get_modem_ext_calib();
+ memcpy((u8 *)addr, data, size);
+ bb_dbg("MOMEM EXT CALIB address %08x ...\n", addr);
+
+ /* calibration data */
+ rda_mdcom_get_calib_section(&addr, &size);
+ data = factory_get_modem_calib();
+ memcpy((u8 *)addr, data, size);
+ bb_dbg("MOMEM CALIB address %08x ...\n", addr);
+
+ /* modem fact data */
+ rda_mdcom_get_factory_section(&addr, &size);
+ data = factory_get_modem_factory();
+ memcpy((u8 *)addr, data, size);
+ bb_dbg("MOMEM FACT address %08x ...\n", addr);
+
+ /* ap fact data */
+ rda_mdcom_get_ap_factory_section(&addr, &size);
+ data = factory_get_ap_factory();
+ memcpy((u8 *)addr, data, size);
+ bb_dbg("AP FACT address %08x ...\n", addr);
+
+ return 0;
+}
+
+static int rda_check_ap_calib_msg(void)
+{
+ unsigned int msg_id = 0;
+ unsigned int msg_size = 0;
+ unsigned char *msg_data = malloc(RDA_AP_CALIB_MSG_DATA_LEN);
+
+ if (!msg_data)
+ return -1;
+
+ if (factory_get_ap_calib_msg(&msg_id, &msg_size, msg_data)) {
+ free(msg_data);
+ return -1;
+ }
+
+ if (msg_id & RDA_AP_CALIB_MSG_SET_PRDINFO)
+ prdinfo_set_data((struct prdinfo *)msg_data);
+
+ free(msg_data);
+ return 0;
+}
+
+/* use this function after factorydata is loaded */
+static int rda_send_prdinfo_data(void)
+{
+ unsigned int msg_id = 0;
+ unsigned int msg_size = 0;
+ unsigned char *msg_data = malloc(RDA_AP_CALIB_MSG_DATA_LEN);
+
+ if (!msg_data)
+ return -1;
+
+ memset(msg_data, 0, RDA_AP_CALIB_MSG_DATA_LEN);
+ prdinfo_get_data((struct prdinfo *)msg_data);
+
+ msg_id = RDA_AP_CALIB_MSG_GET_PRDINFO;
+ msg_size = sizeof(struct prdinfo);
+ factory_set_ap_calib_msg(msg_id, msg_size, msg_data);
+ free(msg_data);
+ return 0;
+}
+
+void rda_modem_cal_loop(void)
+{
+ /* send prdinfo data to calib tool */
+ rda_send_prdinfo_data();
+
+ while (1) {
+#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
+ WATCHDOG_RESET();
+#endif
+ /* check Ctrl-C */
+ ctrlc();
+ if ((had_ctrlc())) {
+ bb_dbg("\n## ABORT MANUALLY!\n\n");
+ return;
+ }
+
+ rda_modem_handle_syscmd();
+
+ rda_modem_handle_trace();
+
+ rda_modem_handle_atcmd();
+
+ /* check message to u-boot from PC calib tool*/
+ rda_check_ap_calib_msg();
+ }
+}
+
+int rda_modem_bbimages_load_from_nand(const image_header_t **hdrInit,
+ const image_header_t **hdrWork)
+{
+ struct mtd_info *nand;
+ struct mtd_device *dev;
+ struct part_info *part;
+ size_t page_size, block_size;
+ loff_t offset;
+ size_t read_size, image_size;
+ u8 pnum;
+ int ret;
+ u_char *buffer;
+ image_header_t *hdr;
+ u32 bad_blocks;
+ char buf[256];
+ u32 ih_len;
+ int i;
+
+ ret = mtdparts_init_default();
+ if (ret != 0) {
+ bb_dbg("mtdparts init error\n");
+ return ret;
+ }
+
+ ret = find_dev_and_part("modem", &dev, &pnum, &part);
+ if (ret) {
+ bb_dbg("unknown partition name - modem\n");
+ return ret;
+ } else if (dev->id->type != MTD_DEV_TYPE_NAND) {
+ bb_dbg("mtd dev type error");
+ return CMD_RET_FAILURE;
+ }
+ bb_dbg("found modem part '%s' offset: 0x%llx length: 0x%llx\n",
+ part->name, part->offset, part->size);
+
+ nand = &nand_info[dev->id->num];
+ page_size = nand->writesize;
+ block_size = nand->erasesize;
+
+ bb_dbg("\n## Checking Modem Code Image ...\n\n");
+
+ for (i = 0; i < 2; ++i) {
+ if (i == 0) {
+ offset = part->offset;
+ buffer = (u_char *)SCRATCH_ADDR;
+ hdr = (image_header_t *)buffer;
+ } else {
+ hdr = (image_header_t *)((u8 *)hdr + image_size);
+ }
+
+ if (buffer < (u8 *)hdr + sizeof(image_header_t)) {
+ read_size = (u8 *)hdr + sizeof(image_header_t) - buffer;
+ if (is_power_of_2(page_size))
+ read_size = ROUND(read_size, page_size);
+ else
+ read_size = roundup(read_size, page_size);
+ bad_blocks = 0;
+
+ bb_dbg("read 0x%x bytes from '%s' offset: 0x%08x\n",
+ read_size, part->name, (u32)offset);
+ ret = nand_read_skip_bad_new(nand, offset, &read_size,
+ buffer, &bad_blocks);
+ if (ret) {
+ bb_dbg("nand read fail\n");
+ return ret;
+ }
+
+ offset += read_size + block_size * bad_blocks;
+ buffer += read_size;
+ }
+
+ ret = rda_image_verify_header(hdr);
+ if (ret)
+ return ret;
+
+ image_size = image_get_image_size(hdr);
+
+ if (buffer < (u8 *)hdr + image_size) {
+ read_size = (u8 *)hdr + image_size - buffer;
+ if (is_power_of_2(page_size))
+ read_size = ROUND(read_size, page_size);
+ else
+ read_size = roundup(read_size, page_size);
+
+ bb_dbg("\nread 0x%x bytes from '%s' offset: 0x%08x\n",
+ read_size, part->name, (u32)offset);
+ ret = nand_read_skip_bad_new(nand, offset, &read_size,
+ buffer, &bad_blocks);
+ if (ret) {
+ bb_dbg("nand read fail\n");
+ return ret;
+ }
+
+ offset += read_size + block_size * bad_blocks;
+ buffer += read_size;
+ }
+
+ ret = rda_image_verify_data(hdr);
+ if (ret)
+ return ret;
+
+ if (i == 0) {
+ ih_len = min(sizeof(buf), IH_NMLEN);
+ strncpy(buf, (const char *)hdr->ih_name, ih_len);
+ buf[ih_len - 1] = '\0';
+ }
+ if (i == 0 && strstr(buf, "raminit")) {
+ bb_dbg("## Raminit Image Detected\n");
+ bb_dbg("\n");
+ *hdrInit = hdr;
+ } else {
+ bb_dbg("## Work Image Detected\n");
+ bb_dbg("\n");
+ *hdrWork = hdr;
+ break;;
+ }
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+int rda_modem_bbimages_load_from_mmc(const image_header_t **hdrInit,
+ const image_header_t **hdrWork)
+{
+ u64 offset = 0;
+ size_t read_size, image_size;
+ u_char *buffer;
+ image_header_t *hdr;
+ char buf[256];
+ u32 ih_len;
+ int i;
+ int ret;
+ disk_partition_t *ptn;
+ block_dev_desc_t *mmc_blkdev;
+ struct mmc *mmc;
+
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (mmc_blkdev)
+ mmc = container_of(mmc_blkdev, struct mmc, block_dev);
+ else
+ return CMD_RET_FAILURE;
+
+ if (!mmc) {
+ bb_dbg("mmc doesn't exist");
+ return CMD_RET_FAILURE;
+ }
+
+ ptn = partition_find_ptn("modem");
+ if(ptn == 0) {
+ bb_dbg("mmc partition table doesn't exist");
+ return -1;
+ }
+
+ bb_dbg("found modem part offset: 0x%lx\n", ptn->start);
+
+ bb_dbg("\n## Checking Modem Code Image ...\n\n");
+
+ for (i = 0; i < 2; ++i) {
+ if (i == 0) {
+ offset = ptn->start * ptn->blksz;
+ buffer = (u_char *)SCRATCH_ADDR;
+ hdr = (image_header_t *)buffer;
+ } else {
+ hdr = (image_header_t *)((u8 *)hdr + image_size);
+ }
+
+ if (buffer < (u8 *)hdr + sizeof(image_header_t)) {
+ read_size = (u8 *)hdr + sizeof(image_header_t) - buffer;
+ read_size = ROUND(read_size, 512);
+
+ bb_dbg("read 0x%x bytes offset: 0x%08x\n",
+ read_size, (u32)offset);
+ ret = mmc_read(mmc, offset, buffer, read_size);
+ if (ret <= 0) {
+ bb_dbg("mmc read fail\n");
+ return ret;
+ }
+
+ offset += read_size;
+ buffer += read_size;
+ }
+
+ ret = rda_image_verify_header(hdr);
+ if (ret)
+ return ret;
+
+ image_size = image_get_image_size(hdr);
+
+ if (buffer < (u8 *)hdr + image_size) {
+ read_size = (u8 *)hdr + image_size - buffer;
+ read_size = ROUND(read_size, 512);
+
+ bb_dbg("\nread 0x%x bytes offset: 0x%08x\n",
+ read_size, (u32)offset);
+ ret = mmc_read(mmc, offset, buffer, read_size);
+ if (ret <= 0) {
+ bb_dbg("mmc read fail\n");
+ return ret;
+ }
+
+ offset += read_size;
+ buffer += read_size;
+ }
+
+ ret = rda_image_verify_data(hdr);
+ if (ret)
+ return ret;
+
+ if (i == 0) {
+ ih_len = min(sizeof(buf), IH_NMLEN);
+ strncpy(buf, (const char *)hdr->ih_name, ih_len);
+ buf[ih_len - 1] = '\0';
+ }
+ if (i == 0 && strstr(buf, "raminit")) {
+ bb_dbg("## Raminit Image Detected\n");
+ bb_dbg("\n");
+ *hdrInit = hdr;
+ } else {
+ bb_dbg("## Work Image Detected\n");
+ bb_dbg("\n");
+ *hdrWork = hdr;
+ break;;
+ }
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+void rdaHexPuts(char* p, int l)
+{
+ char strBuf[64];
+ char* s = strBuf;
+ if (l > 20)
+ l = 20;
+
+ while (l--) {
+ unsigned char c = (unsigned char) *p++;
+ *s = ((c >> 4) & 0xF) + '0';
+ if (*s > '9')
+ *s = *s + 'A' - '9' - 1;
+
+ *++s = (c & 0xF) + '0';
+ if (*s > '9')
+ *s = *s + 'A' - '9' - 1;
+
+ *++s = ' ';
+ ++s;
+ }
+ *s = '\r';
+ *++s = '\n';
+ *++s = 0;
+ puts((const char *) strBuf);
+}
+
+void rda_modem_cal_test(void)
+{
+ char cmdbuf[16];
+ unsigned long long end_time = get_ticks();
+
+ while (1) {
+#if defined(CONFIG_HW_WATCHDOG) || defined(CONFIG_WATCHDOG)
+ WATCHDOG_RESET();
+#endif
+ /* check Ctrl-C */
+ ctrlc();
+ if ((had_ctrlc())) {
+ bb_dbg("\n## ABORT MANUALLY!\n\n");
+ return;
+ }
+
+ if (end_time < get_ticks()) {
+ char* p = cmdbuf;
+ *p++ = 0xad;
+ *p++ = 0x00;
+ *p++ = 0x0a;
+ *p++ = 0xFF;
+ *p++ = 0x82;
+ *p++ = 0x00;
+ *p++ = 0x00;
+ *p++ = 0x00;
+ *p++ = 0x82;
+ *p++ = (char)((end_time >> 0) & 0xFF);
+ *p++ = (char)((end_time >> 8) & 0xFF);
+ *p++ = (char)((end_time >> 16) & 0xFF);
+ *p++ = (char)((end_time >> 24) & 0xFF);
+ *p++ = 0xFF;
+ bb_dbg("## Send write cmd to modem: ");
+ rdaHexPuts(cmdbuf, rda_mdcom_channel_buf_send_stream(
+ RDA_MDCOM_CHANNEL_TRACE, cmdbuf, 14, 0));
+
+ p = cmdbuf;
+ *p++ = 0xad;
+ *p++ = 0x00;
+ *p++ = 0x07;
+ *p++ = 0xFF;
+ *p++ = 0x02;
+ *p++ = 0x00;
+ *p++ = 0x00;
+ *p++ = 0x00;
+ *p++ = 0x82;
+ *p++ = (char)((end_time >> 24) & 0xFF);
+ *p++ = 0xFF;
+ bb_dbg("## Send read cmd to modem: ");
+ rdaHexPuts(cmdbuf, rda_mdcom_channel_buf_send_stream(
+ RDA_MDCOM_CHANNEL_TRACE, cmdbuf, 11, 0));
+
+ end_time = get_ticks() + usec2ticks(20000);
+ }
+
+ if (rda_mdcom_tstc(RDA_MDCOM_CHANNEL_TRACE)) {
+ bb_dbg("## received from modem:");
+ do {
+ rdaHexPuts(cmdbuf, rda_mdcom_channel_buf_recv_stream(
+ RDA_MDCOM_CHANNEL_TRACE, cmdbuf,
+ sizeof(cmdbuf), 0));
+ } while (rda_mdcom_tstc(RDA_MDCOM_CHANNEL_TRACE));
+ }
+ }
+}
+
+static void rda_show_modem_exception(void)
+{
+ char *addr;
+ unsigned int len;
+ char buf[256];
+
+ rda_mdcom_get_modem_exception_info((u32 *)&addr, &len);
+ snprintf(buf, sizeof(buf), "%s\n", addr);
+ buf[sizeof(buf) - 1] = '\0';
+ puts("\n");
+ if (addr) {
+ puts("Modem exception info:\n");
+ puts("---------------------\n");
+ puts(buf);
+ puts("---------------------\n");
+ } else {
+ puts("No valid modem exception info\n");
+ }
+}
+
+extern void shutdown_system(void);
+
+static void rda_modem_shutdown_system(void)
+{
+ struct rda_sys_hdr hdr;
+
+ bb_dbg("\n## System is being shutdown ... ");
+
+ hdr.magic = 0xA8B1;
+ hdr.mod_id = 0x0;
+ hdr.msg_id = 0x1001;
+ hdr.req_id = 0x0;
+ hdr.ret_val = 0x0;
+ hdr.ext_len = 0;
+
+ rda_mdcom_channel_buf_send_dgram(
+ RDA_MDCOM_CHANNEL_SYSTEM, &hdr, sizeof(hdr),
+ usec2ticks(100000));
+ rda_mdcom_line_set(RDA_MDCOM_PORT1, 2);
+ /* Wait sometime until modem shutdowns the system (about 1.8s) */
+ udelay(5000000);
+ /* Modem is in trouble. Shutdown the system directly. */
+ bb_dbg("\n## Bootloader directly shutdown ... ");
+ shutdown_system();
+}
+
+int bbimages_get_header(const u8 *p_image, const image_header_t **hdrInit,
+ const image_header_t **hdrWork)
+{
+ int retVal;
+ char buf[256];
+ u32 ih_len;
+ int i;
+ image_header_t *hdr;
+
+ for (i = 0; i < 2; i++) {
+ hdr = (image_header_t *) RDA_ADD_ROUNDUP((int) p_image);
+
+ bb_dbg("\n## Checking Modem Code Image at %08x ...\n",
+ (unsigned int)hdr);
+ retVal = rda_image_verify(hdr);
+ if (retVal) {
+ /* If there is no image, we initialize channels
+ * still. Otherwise kernel would not be
+ * loaded. */
+ rda_mdcom_channel_all_init();
+ return retVal;
+ }
+
+ if (i == 0) {
+ ih_len = min(sizeof(buf), IH_NMLEN);
+ strncpy(buf, (const char *)hdr->ih_name, ih_len);
+ buf[ih_len - 1] = '\0';
+ }
+ if (i == 0 && strstr(buf, "raminit")) {
+ bb_dbg("## Raminit Image Detected\n");
+ p_image += image_get_image_size(hdr);
+ *hdrInit = hdr;
+ } else {
+ bb_dbg("## Work Image Detected\n");
+ *hdrWork = hdr;
+ break;
+ }
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+int mdcom_check_and_wait_modem(int check_boot_key)
+{
+ int shutdown = 0;
+ unsigned long long end_time;
+ u32 reset_cause;
+ u32 itf_version;
+
+ /* Set a timeout of 2 seconds to wait for BP */
+ bb_dbg("\n## Waiting for modem response ... ");
+
+ end_time = get_ticks() + usec2ticks(2000000);
+ while (!rda_mdcom_line_set_wait(RDA_MDCOM_PORT0,
+ RDA_MDCOM_LINE_CMD_START, 100)) {
+ /* check exception */
+ if (rda_mdcom_line_set_check(RDA_MDCOM_PORT0,
+ RDA_MDCOM_LINE_EXCEPTION)) {
+ bb_dbg("\n\n");
+ bb_dbg("**********************************\n");
+ bb_dbg("*** Error: Detect modem exception!\n");
+ rda_show_modem_exception();
+#ifdef REBOOT_WHEN_CRASH
+ bb_dbg("Rebooting ...\n\n\n");
+ udelay(5000);
+ disable_interrupts();
+ if (ROLLBACK_TO_RECOVERY_MODE)
+ rda_reboot(REBOOT_TO_RECOVERY_MODE);
+ else
+ rda_reboot(REBOOT_TO_NORMAL_MODE);
+#endif
+ return CMD_RET_FAILURE;
+ }
+ /* check timeout */
+ if (get_ticks() > end_time) {
+#ifdef REBOOT_WHEN_CRASH
+ bb_dbg("\n\n## Error: Timeout when waiting for "
+ "modem response. Rebooting ...\n\n\n");
+ udelay(5000);
+ disable_interrupts();
+ if (ROLLBACK_TO_RECOVERY_MODE)
+ rda_reboot(REBOOT_TO_RECOVERY_MODE);
+ else
+ rda_reboot(REBOOT_TO_NORMAL_MODE);
+#else
+ end_time = -1;
+ bb_dbg("\n\n## Warning: Timeout when waiting for "
+ "modem response. Press Ctrl-C to abort.\n");
+#endif
+ }
+ /* check Ctrl-C */
+ ctrlc();
+ if ((had_ctrlc())) {
+ bb_dbg("\n## ABORT MANUALLY!\n\n");
+ return CMD_RET_FAILURE;
+ }
+ }
+ bb_dbg("Done\n");
+
+ reset_cause = rda_mdcom_get_reset_cause();
+ itf_version = rda_mdcom_get_interface_version();
+ bb_dbg("\n## Reset cause : 0x%08x\n", reset_cause);
+ bb_dbg("\n## Communication interface version : 0x%08x\n", itf_version);
+ if (itf_version != RDA_BP_VER) {
+ bb_dbg("*** Error: Unsupported version. 0x%08x is expected.\n",
+ RDA_BP_VER);
+ return CMD_RET_FAILURE;
+ }
+
+ if (reset_cause == RDA_RESET_CAUSE_NORMAL) {
+ /* Check power-on key status */
+ if (check_boot_key && !get_saved_boot_key_state()) {
+ shutdown = 0;
+ bb_dbg("\n## Power-on key is not pressed for normal boot.");
+ bb_dbg("\n## ****** Shutdown is needed later ******\n");
+ }
+ }
+
+ bb_dbg("\n## Init mdcom channels ... ");
+ rda_mdcom_channel_all_init();
+ rda_mdcom_line_clear(RDA_MDCOM_PORT0, RDA_MDCOM_LINE_CMD_START);
+ bb_dbg("Done\n");
+
+ /* Check if shutdown is needed after modem fully starts up */
+ if (shutdown)
+ rda_modem_shutdown_system();
+
+ /* rda_mdcom_show_software_version(); */
+ return CMD_RET_SUCCESS;
+}
+
+static int do_check_and_wait_modem(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int check_boot_key = 0;
+
+ if (argc >= 2)
+ check_boot_key = (int) simple_strtoul(argv[1], NULL, 10);
+
+ return mdcom_check_and_wait_modem(check_boot_key);
+}
+
+int bbimages_load(const image_header_t *hdrInit, const image_header_t *hdrWork,
+ int cal_en)
+{
+ unsigned long long end_time;
+ u32 addr, len;
+ char buf[256];
+ int update_calib = 0, update_factory = 0, update_ap_factory = 0;
+ u32 modem_load_addr = image_get_load(hdrWork);
+
+ /* set modem logic base address for modem side,
+ by the work code loading address in image header */
+ rda_mdcom_set_logic_base_addr(modem_load_addr);
+
+ bb_dbg("\n## Init mdcom ports ... ");
+ rda_mdcom_init_port(RDA_MDCOM_PORT0);
+ rda_mdcom_init_port(RDA_MDCOM_PORT1);
+ bb_dbg("Done\n");
+
+ if (hdrInit) {
+ bb_dbg("\n## Load Raminit Code to modem at ");
+ rda_modem_image_load(hdrInit, 0);
+
+ bb_dbg("\n## Start modem and waiting for response ... ");
+ rda_mdcom_line_set(RDA_MDCOM_PORT0, RDA_MDCOM_LINE_DL_HANDSHAKE);
+ /* Set a timeout of 2 seconds to wait for BP */
+ end_time = get_ticks() + usec2ticks(2000000);
+ while (!rda_mdcom_line_set_wait(RDA_MDCOM_PORT0,
+ RDA_MDCOM_LINE_DL_HANDSHAKE, 100)) {
+ /* check timeout */
+ if (get_ticks() > end_time) {
+#ifdef REBOOT_WHEN_CRASH
+ bb_dbg("\n\n## Error: Timeout when waiting for "
+ "modem response. Rebooting ...\n\n\n");
+ udelay(5000);
+ disable_interrupts();
+ if (ROLLBACK_TO_RECOVERY_MODE)
+ rda_reboot(REBOOT_TO_RECOVERY_MODE);
+ else
+ rda_reboot(REBOOT_TO_NORMAL_MODE);
+#else
+ end_time = -1;
+ bb_dbg("\n\n## Warning: Timeout when waiting for "
+ "modem response. Press Ctrl-C to abort.\n");
+#endif
+ }
+ /* check Ctrl-C */
+ ctrlc();
+ if ((had_ctrlc())) {
+ bb_dbg("\n## ABORT MANUALLY!\n\n");
+ return CMD_RET_FAILURE;
+ }
+ }
+ rda_mdcom_line_clear(RDA_MDCOM_PORT0, RDA_MDCOM_LINE_DL_HANDSHAKE);
+ bb_dbg("Done\n");
+ }
+
+ /* Check whether modem crashed in the last run */
+ if (rda_mdcom_modem_crashed_before()) {
+ rda_mdcom_get_modem_exception_info(&addr, &len);
+ buf[0] = '\0';
+ if (addr) {
+ snprintf(buf, sizeof(buf), "%s", (char *)addr);
+ buf[sizeof(buf) - 1] = '\0';
+ /* TODO: Save the exception info to nand/sdmmc */
+ }
+ rda_mdcom_get_modem_log_info(&addr, &len);
+ if (addr) {
+ /* TODO: Save the log info to nand/sdmmc */
+ /* NOTE: The log is in binary format! */
+ }
+ }
+ /* Check whether to udpate modem calib and factory data */
+ if (system_rebooted()) {
+ update_calib = rda_mdcom_calib_update_cmd_valid();
+ if (update_calib) {
+ bb_dbg("\n## Detect calib update command\n");
+ rda_mdcom_get_calib_section(&addr, &len);
+ factory_set_modem_calib((unsigned char *)addr);
+ rda_mdcom_get_ext_calib_section(&addr, &len);
+ factory_set_modem_ext_calib((unsigned char *)addr);
+ }
+ update_factory = rda_mdcom_factory_update_cmd_valid();
+ if (update_factory) {
+ bb_dbg("\n## Detect factory update command\n");
+ rda_mdcom_get_factory_section(&addr, &len);
+ factory_set_modem_factory((unsigned char *)addr);
+ }
+ update_ap_factory = rda_mdcom_ap_factory_update_cmd_valid();
+ if (update_ap_factory) {
+ bb_dbg("\n## Detect AP factory update command\n");
+ rda_mdcom_get_ap_factory_section(&addr, &len);
+ factory_set_ap_factory((unsigned char *)addr);
+ }
+ if (update_calib || update_factory || update_ap_factory) {
+ bb_dbg("\n## Burn calib and/or factory data\n");
+ if (factory_burn())
+ bb_dbg("\n** Error when burning data\n");
+ }
+ }
+ /* Init all log info and some magic numbers */
+ rda_mdcom_init_all_log_info();
+
+ bb_dbg("\n## Load Work Code to modem at ");
+ if (rda_modem_image_load(hdrWork, cal_en)) {
+ printf("\n## Load modem failed!\n");
+ return CMD_RET_FAILURE;
+ }
+
+ bb_dbg("\n## Load Calib Data to modem at ");
+ rda_modem_cal_load();
+
+ bb_dbg("\n## Start modem ...\n");
+ rda_mdcom_line_set(RDA_MDCOM_PORT0, RDA_MDCOM_LINE_DL_HANDSHAKE);
+
+ return CMD_RET_SUCCESS;
+}
+
+int mdcom_load_from_mem(const u8 *data, int cal_en)
+{
+ const image_header_t *hdrInit = NULL;
+ const image_header_t *hdrWork = NULL;
+
+ if (bbimages_get_header(data, &hdrInit, &hdrWork)) {
+ /* If there is no image, we initialize channels still.
+ * Otherwise kernel would not be loaded. */
+ rda_mdcom_channel_all_init();
+ return CMD_RET_FAILURE;
+ }
+
+ return bbimages_load(hdrInit, hdrWork, cal_en);
+}
+
+int mdcom_load_from_flash(int cal_en)
+{
+ int ret;
+ const image_header_t *hdrInit = NULL;
+ const image_header_t *hdrWork = NULL;
+
+ /*
+ * Save the boot key state now.
+ * It takes about 1.9s to run into here if boot delay is 1s.
+ */
+ save_current_boot_key_state();
+
+ if (rda_media_get() == MEDIA_MMC)
+ ret = rda_modem_bbimages_load_from_mmc(&hdrInit, &hdrWork);
+ else
+ ret = rda_modem_bbimages_load_from_nand(&hdrInit, &hdrWork);
+
+ if (ret) {
+ /*
+ * If there is no image, we initialize channels still.
+ * Otherwise kernel would not be loaded.
+ */
+ rda_mdcom_channel_all_init();
+ return CMD_RET_FAILURE;
+ }
+ return bbimages_load(hdrInit, hdrWork, cal_en);
+}
+
+/*
+ * Syntax:
+ * mdcom_loadm {adress} [cal_en]
+ */
+int do_mdcom_loadm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int cal_en = 0;
+ const u8 *data;
+
+ if (argc < 2)
+ return CMD_RET_USAGE;
+ if (argc >= 3)
+ cal_en = (int) simple_strtoul(argv[2], NULL, 10);
+
+ data = (const u8 *)simple_strtoul(argv[1], NULL, 16);
+
+ return mdcom_load_from_mem(data, cal_en);
+}
+
+int do_mdcom_cal_loadm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ const u8 *data;
+ if (argc != 2)
+ return CMD_RET_USAGE;
+
+ data = (const u8 *)simple_strtoul(argv[1], NULL, 16);
+ if (rda_image_verify_header((const image_header_t *)data))
+ return CMD_RET_FAILURE;
+
+ if (factory_copy_from_mem(data))
+ return CMD_RET_FAILURE;
+
+ return CMD_RET_SUCCESS;
+}
+
+/*
+ * Syntax:
+ * mdcom_loadf [cal_en]
+ */
+int do_mdcom_loadf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int cal_en = 0;
+
+ if (argc >= 2)
+ cal_en = (int) simple_strtoul(argv[1], NULL, 10);
+
+ return mdcom_load_from_flash(cal_en);
+}
+
+int do_mdcom_cal_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ rda_modem_cal_test();
+ return CMD_RET_SUCCESS;
+}
+
+int do_mdcom_cal(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ drv_usbser_init();
+ rda_modem_cal_loop();
+ return CMD_RET_SUCCESS;
+}
+
+int do_mdcom_ch_show(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ bb_dbg("\n## MDCOM Channel AT Show:\n");
+ rda_mdcom_channel_show(RDA_MDCOM_CHANNEL_AT);
+ bb_dbg("\n## MDCOM Channel SYS Show:\n");
+ rda_mdcom_channel_show(RDA_MDCOM_CHANNEL_SYSTEM);
+ bb_dbg("\n## MDCOM Channel TRACE Show:\n");
+ rda_mdcom_channel_show(RDA_MDCOM_CHANNEL_TRACE);
+ return CMD_RET_SUCCESS;
+}
+
+int do_mdcom_cal_save(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ if (rda_modem_cal_save())
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
+
+int do_mdcom_cal_load(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ if (rda_modem_cal_load())
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
+
+int do_mdcom_diag(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ rda_mdcom_show_xcpu_info();
+ return CMD_RET_SUCCESS;
+}
+
+int do_mdcom_ver(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ rda_mdcom_show_software_version();
+ return CMD_RET_SUCCESS;
+}
+
+U_BOOT_CMD(
+ mdcom_send , 6, 1, do_mdcom_send,
+ "send data to mdCom channels",
+ "Syntax:\n"
+ " - mdcom_send {channel} {adress} {size} [{timeout} {mode}]"
+ "Parameters:\n"
+ " - channel: the mdcom channel number\n"
+ " - adress: the address of the data buffer to send\n"
+ " - size: the size of the sending buffer\n"
+ " - timeout: (optional) the timeout with unit ms\n"
+ " - mode: (optional) 0 - stream mode; else - dgram mode\n"
+);
+
+U_BOOT_CMD(
+ mdcom_recv , 6, 1, do_mdcom_recv,
+ "send data to mdCom channels",
+ "Syntax:\n"
+ " - mdcom_recv {channel} {address} {size} [{timeout} {mode}]\n"
+ "Parameters:\n"
+ " - channel: the mdcom channel number\n"
+ " - adress: the address of the buffer to receive data\n"
+ " - size: the size of the receiving buffer\n"
+ " - timeout: (optional) the timeout with unit ms\n"
+ " - mode: (optional) 0 - stream mode; else - dgram mode\n"
+);
+
+U_BOOT_CMD(
+ mdcom_cal_loadm , 2, 1, do_mdcom_cal_loadm,
+ "load modem calibration data from memory",
+ "Syntax:\n"
+ " - mdcom_cal_loadm {address} \n"
+ "Parameters:\n"
+ " - address: the address of the buffer to receive data\n"
+);
+
+U_BOOT_CMD(
+ mdcom_loadm , 3, 1, do_mdcom_loadm,
+ "load modem codes from memory",
+ "Syntax:\n"
+ " - mdcom_loadm {adress} [{cal_en}] \n"
+ "Parameters:\n"
+ " - address: the address of the buffer to receive data\n"
+ " - cal_en: enable calibration\n"
+);
+
+U_BOOT_CMD(
+ mdcom_loadf , 2, 1, do_mdcom_loadf,
+ "load modem codes from flash",
+ "Syntax:\n"
+ " - mdcom_loadf [{cal_en}] \n"
+ "Parameters:\n"
+ " - cal_en: enable calibration\n"
+);
+
+U_BOOT_CMD(
+ mdcom_calt , 1, 1, do_mdcom_cal_test,
+ "modem calibration test",
+ "Syntax:\n"
+ " - mdcom_calt\n"
+);
+
+U_BOOT_CMD(
+ mdcom_cal , 1, 1, do_mdcom_cal,
+ "modem calibration",
+ "Syntax:\n"
+ " - mdcom_cal\n"
+);
+
+U_BOOT_CMD(
+ mdcom_show , 1, 1, do_mdcom_ch_show,
+ "show mdcom all channels",
+ "Syntax:\n"
+ " - mdcom_show\n"
+);
+
+U_BOOT_CMD(
+ mdcom_cal_save , 1, 1, do_mdcom_cal_save,
+ "modem calibration data save",
+ "Syntax:\n"
+ " - mdcom_cal_save\n"
+);
+
+U_BOOT_CMD(
+ mdcom_cal_load , 1, 1, do_mdcom_cal_load,
+ "modem calibration data load",
+ "Syntax:\n"
+ " - mdcom_cal_load\n"
+);
+
+U_BOOT_CMD(
+ mdcom_diag, 1, 1, do_mdcom_diag,
+ "Show modem XCPU diagostic information",
+ "Syntax:\n"
+ " - mdcom_diag\n"
+);
+
+U_BOOT_CMD(
+ mdcom_ver, 1, 1, do_mdcom_ver,
+ "Show modem software versions",
+ "Syntax:\n"
+ " - mdcom_ver\n"
+);
+
+U_BOOT_CMD(
+ mdcom_check, 2, 1, do_check_and_wait_modem,
+ "check modem status, may wait",
+ "Syntax:\n"
+ " - mdcom_check {[check_boot_key]}\n"
+ "Parameters:\n"
+ " - check_boot_key: whether to check boot key status\n"
+);
+
diff --git a/common/cmd_mem.c b/common/cmd_mem.c
index fa6f5991a5..38e4fa264e 100644
--- a/common/cmd_mem.c
+++ b/common/cmd_mem.c
@@ -261,7 +261,7 @@ int do_mem_mwc ( cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
- ulong addr1, addr2, count, ngood;
+ ulong addr1, addr2, count, ngood, nbad;
int size;
int rcode = 0;
@@ -296,6 +296,7 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
#endif
ngood = 0;
+ nbad = 0;
while (count-- > 0) {
if (size == 4) {
@@ -306,7 +307,8 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
"!= word at 0x%08lx (0x%08lx)\n",
addr1, word1, addr2, word2);
rcode = 1;
- break;
+ nbad++;
+ //break;
}
}
else if (size == 2) {
@@ -317,7 +319,8 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
"!= halfword at 0x%08lx (0x%04x)\n",
addr1, hword1, addr2, hword2);
rcode = 1;
- break;
+ nbad++;
+ //break;
}
}
else {
@@ -328,10 +331,20 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
"!= byte at 0x%08lx (0x%02x)\n",
addr1, byte1, addr2, byte2);
rcode = 1;
- break;
+ nbad++;
+ // break;
}
}
- ngood++;
+
+ if(rcode == 1){
+ rcode = 0;
+ if(nbad > 100){
+ return 1;
+ }
+ }
+ else
+ ngood++;
+
addr1 += size;
addr2 += size;
@@ -343,6 +356,9 @@ int do_mem_cmp (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
printf("Total of %ld %s%s were the same\n",
ngood, size == 4 ? "word" : size == 2 ? "halfword" : "byte",
ngood == 1 ? "" : "s");
+ printf("Total of %ld %s%s were different\n",
+ nbad, size == 4 ? "word" : size == 2 ? "halfword" : "byte",
+ nbad == 1 ? "" : "s");
return rcode;
}
diff --git a/common/cmd_misc.c b/common/cmd_misc.c
index 973b1c2082..5d2a0a30e9 100644
--- a/common/cmd_misc.c
+++ b/common/cmd_misc.c
@@ -26,8 +26,39 @@
*/
#include <common.h>
#include <command.h>
+#include <usb/usbserial.h>
+#include <nand.h>
+#include <jffs2/jffs2.h>
+#include <asm/arch/mdcom.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/factory.h>
+#include <asm/arch/prdinfo.h>
+#include <asm/arch/rda_sys.h>
+#include <part.h>
+#include <mmc.h>
+#include <mmc/mmcpart.h>
+#include <nand.h>
+#include <linux/mtd/nand.h>
+#include <mtd/nand/rda_nand.h>
+#include <android/android_boot.h>
+#include <android/android_bootimg.h>
+#include <rda/tgt_ap_panel_setting.h>
+#include <asm/arch/spl_board_info.h>
-int do_sleep (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+#ifdef FLASH_PAGE_SIZE
+#undef FLASH_PAGE_SIZE
+#endif
+#define FLASH_PAGE_SIZE 2048
+
+#define rda_dbg(fmt, args...) printf(fmt, ##args)
+
+extern int mtdparts_init_default(void);
+extern int find_dev_and_part(const char *id, struct mtd_device **dev,
+ u8 *part_num, struct part_info **part);
+
+static int rollback_to_recovery_mode = 0;
+
+int do_sleep(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
ulong start = get_timer(0);
ulong delay;
@@ -38,18 +69,673 @@ int do_sleep (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
delay = simple_strtoul(argv[1], NULL, 10) * CONFIG_SYS_HZ;
while (get_timer(start) < delay) {
- if (ctrlc ())
+ if (ctrlc())
return (-1);
- udelay (100);
+ udelay(100);
+ }
+
+ return 0;
+}
+
+int do_flush_dcache(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ unsigned long start_addr = 0;
+ unsigned long end_addr = 0;
+
+ if (argc < 3) {
+ printf("do flush dcache all...\n");
+ flush_dcache_all();
+ return 0;
+ }
+
+ start_addr = simple_strtoul(argv[1], NULL, 16);
+ end_addr = simple_strtoul(argv[2], NULL, 16);
+
+ printf("flush dcache %#x -> %#x\n", (unsigned int)start_addr, (unsigned int)end_addr);
+ flush_dcache_range(start_addr, end_addr);
+ return 0;
+}
+
+
+int do_mytest(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ ulong usec;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+
+ usec = simple_strtoul(argv[1], NULL, 10) * 1000000;
+
+ udelay(usec);
+
+ return 0;
+}
+
+int do_rdaswcfg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ u16 swcfg;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+
+ swcfg = (u16)simple_strtoul(argv[1], NULL, 10);
+ rda_swcfg_reg_set(swcfg);
+
+ return 0;
+}
+
+int do_rdahwcfg(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("RDA: HW_CFG 0x%04x\n", rda_hwcfg_get());
+ return 0;
+}
+
+int do_rdabm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ printf("RDA: Boot_Mode %d\n", rda_bm_get());
+ return 0;
+}
+
+int do_rdabminit(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ rda_bm_init();
+
+ return 0;
+}
+
+static int get_lcd_name(void)
+{
+ char lcd_paras[50] = "lcd=";
+ char *lcd_name = (char *)factory_get_lcd_name();
+
+#define PANEL_PARM "lcd="PANEL_NAME
+
+ setenv("lcd", PANEL_PARM);
+ if (!lcd_name || strlen(lcd_name) == 0) {
+ rda_dbg("factorydata does not contain lcd name, using default\n");
+ return 0;
+ }
+
+ if (strstr(RDA_PANEL_SUPPORT_LIST, lcd_name) == NULL) {
+ rda_dbg("RDA does not support %s lcd panel\n", lcd_name);
+ rda_dbg("Using default, please contact RDA.n");
+ return 0;
+ }
+
+ strncat(lcd_paras, lcd_name, 50);
+ setenv("lcd", lcd_paras);
+ return 0;
+}
+
+
+static int get_bootlogo_name(void)
+{
+ char logo_paras[50] = "bootlogo=";
+#ifdef CONFIG_MACH_RDA8810E//need debug in future
+ char *name = NULL;//(char *)factory_get_bootlogo_name();
+#else
+ char *name = (char *)factory_get_bootlogo_name();
+#endif
+
+ if (!name || strlen(name) == 0) {
+ rda_dbg("Does not find bootlogo name, using default\n");
+ return 0;
}
+ strncat(logo_paras, name, 50);
+ setenv("bootlogo", logo_paras);
return 0;
}
+int do_get_bootlogo_name(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ if (get_bootlogo_name())
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
+
+int do_ap_factory_use(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ u8* addr;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+ addr = (u8*)simple_strtoul(argv[1], NULL, 16);
+
+ if (factory_set_ap_factory(addr))
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
+
+int do_ap_factory_update(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ u8* addr;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+ addr = (u8*)simple_strtoul(argv[1], NULL, 16);
+
+ if (factory_update_ap_factory(addr))
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
+
+int do_get_lcd_name(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ if (get_lcd_name())
+ return CMD_RET_FAILURE;
+ else
+ return CMD_RET_SUCCESS;
+}
+
+int do_get_emmc_id(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ struct spl_emmc_info * emmc_info = get_bd_spl_emmc_info();
+ char emmc_id[16] = {0};
+
+ if(CONFIG_MMC_DEV_NUM == 0)
+ return CMD_RET_SUCCESS;
+
+ sprintf(emmc_id, "emmc_id=%d", emmc_info->manufacturer_id);
+
+ setenv("emmc_id", emmc_id);
+
+ return CMD_RET_SUCCESS;
+}
+
+extern int rda_flash_intf_is_spi(void);
+
+static int do_get_flash_intf(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ if (rda_media_get() == MEDIA_MMC ) {
+#ifdef CONFIG_SDMMC_BOOT
+ setenv("flash_if", "flash_if=sdcard");
+#else
+ setenv("flash_if", "flash_if=emmc");
+#endif
+ } else {
+ if(rda_flash_intf_is_spi())
+ setenv("flash_if", "flash_if=spi");
+ else
+ setenv("flash_if", "flash_if=normal");
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+extern int hal_BoardSetup(void);
+
+static int do_board_mux_config(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+#ifdef CONFIG_RDA_MUX_CONFIG
+ int ret = 0;
+ ret = hal_BoardSetup();
+ if(ret == CMD_RET_SUCCESS)
+ puts("Board Mux : Done. \n");
+ else
+ puts("Board Mux : Error. \n");
+
+ return ret;
+#else
+ puts("Board Mux : Bypass bootloader board mux config. \n");
+ return CMD_RET_SUCCESS;
+#endif
+}
+
+static int do_get_android_bm(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ enum rda_bm_type bm;
+ u32 reset_cause;
+
+ setenv("chargerboot", "0");
+ bm = rda_bm_get();
+ switch (bm) {
+ case RDA_BM_RECOVERY:
+ setenv("androidboot", "androidboot.mode=recovery");
+ break;
+ case RDA_BM_FACTORY:
+ setenv("androidboot", "androidboot.mode=factory");
+ break;
+ default:
+ reset_cause = rda_mdcom_get_reset_cause();
+ if (reset_cause == RDA_RESET_CAUSE_CHARGER) {
+ setenv("androidboot", "androidboot.mode=charger");
+#ifdef CHARGER_IN_RECOVERY
+/* only move charger to recovery partition after aosp 4.4 (including)*/
+ setenv("chargerboot", "1");
+#endif
+ } else {
+ setenv("androidboot", "androidboot.mode=normal");
+ }
+ break;
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+static u8 *recovery_image = (u8 *)SCRATCH_ADDR;
+
+static int load_recovery_from_nand(void)
+{
+ void *data = (void *)recovery_image;
+ struct mtd_info *nand;
+ struct mtd_device *dev;
+ struct part_info *part;
+ size_t size = 0;
+ u8 pnum;
+ int ret;
+
+ ret = find_dev_and_part("recovery", &dev, &pnum, &part);
+ if (ret) {
+ serial_printf("unknown partition name");
+ return CMD_RET_FAILURE;
+ } else if (dev->id->type != MTD_DEV_TYPE_NAND) {
+ serial_printf("mtd dev type error");
+ return CMD_RET_FAILURE;
+ }
+ nand = &nand_info[dev->id->num];
+ serial_printf("found part '%s' offset: 0x%llx length: 0x%llx\n",
+ part->name, part->offset, part->size);
+
+ size = part->size;
+
+ serial_printf("read 0x%x bytes from '%s' offset: 0x%llx\n",
+ size, part->name, part->offset);
+ ret = nand_read_skip_bad(nand, part->offset, &size, (u_char *) data);
+ if (ret) {
+ serial_printf("nand read fail");
+ return CMD_RET_FAILURE;
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+static int load_recovery_from_mmc(void)
+{
+ void *data = (void *)recovery_image;
+ disk_partition_t *ptn;
+ block_dev_desc_t *mmc_blkdev;
+ loff_t size = 0;
+
+ serial_printf("%s\n", __func__);
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ ptn = partition_find_ptn("recovery");
+
+ if (ptn == 0) {
+ serial_printf("mmc partition table doesn't exist");
+ puts("Board Mux : Done. \n");
+ return CMD_RET_FAILURE;
+ }
+
+ size = ptn->size * ptn->blksz;
+
+ serial_printf("read 0x%x bytes from recovery offset: %lx\n", (unsigned int)size,
+ ptn->start);
+ if (partition_read_bytes(mmc_blkdev, ptn, &size, data)) {
+ serial_printf("mmc read failure");
+ return CMD_RET_FAILURE;
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+static int check_recovery_image(void)
+{
+ boot_img_hdr *hdr;
+
+ /* Check recovery image header */
+ hdr = (boot_img_hdr *)recovery_image;
+ if (memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
+ serial_printf("Invalid magic\n");
+ return CMD_RET_FAILURE;
+ }
+
+ if (hdr->page_size != FLASH_PAGE_SIZE) {
+ serial_printf("Invalid page size: %d (expecting %d)\n",
+ hdr->page_size, FLASH_PAGE_SIZE);
+ return CMD_RET_FAILURE;
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+
+static int load_ap_recovery(void)
+{
+ int ret = CMD_RET_SUCCESS;
+ enum media_type media;
+
+ media = rda_media_get();
+ if (media == MEDIA_MMC)
+ ret = load_recovery_from_mmc();
+ else if ((media == MEDIA_NAND) || media == MEDIA_SPINAND)
+ ret = load_recovery_from_nand();
+ else {
+ serial_printf("%s can't find boot media\n", __func__);
+ ret = CMD_RET_FAILURE;
+ }
+
+ if (ret != CMD_RET_SUCCESS) {
+ serial_printf("%s failed, ret is %d\n", __func__, ret);
+ return ret;
+ }
+ ret = check_recovery_image();
+
+ return ret;
+}
+
+/*
+ * For moving charger to recovery image to save 500KB in ramdisk
+ * CHARGER BOOT mode will need to load recovery kernel and rootfs
+ * 1. load modem from boot image and normal boot image first, so no extra delay
+ * for normal boot. (rda_mdcom_get_reset_cause only works after modem is up)
+ * 2. after modem is up and CHARGER MODE detected, load recovery image
+ */
+static int do_load_ap_recovery(cmd_tbl_t *cmdtp, int flag, int argc,
+ char * const argv[])
+{
+ return load_ap_recovery();
+}
+
+extern int mdcom_load_from_flash(int cal_en);
+extern int mdcom_load_from_mem(const u8 *data, int cal_en);
+extern int mdcom_check_and_wait_modem(int check_boot_key);
+
+static int do_load_recovery(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int ret = CMD_RET_SUCCESS;
+ enum rda_bm_type bm;
+ boot_img_hdr *hdr;
+ unsigned kernel_actual;
+ unsigned ramdisk_actual;
+ unsigned second_actual;
+ unsigned size;
+
+ /* Load recovery modem only in recovery mode, and
+ * load normal modem in factory mode */
+ bm = rda_bm_get();
+ if (bm != RDA_BM_RECOVERY) {
+ rollback_to_recovery_mode = 1;
+ ret = mdcom_load_from_flash(0);
+ if (ret != CMD_RET_SUCCESS) {
+ serial_printf("Bad modem image. Try recovery mode\n");
+ udelay(5000);
+ rda_reboot(REBOOT_TO_RECOVERY_MODE);
+ }
+ }
+
+ ret = load_ap_recovery();
+ if (ret != CMD_RET_SUCCESS)
+ return ret;
+
+
+ if (bm == RDA_BM_RECOVERY) {
+ hdr = (boot_img_hdr *)recovery_image;
+ kernel_actual = ROUND(hdr->kernel_size, FLASH_PAGE_SIZE);
+ ramdisk_actual = ROUND(hdr->ramdisk_size, FLASH_PAGE_SIZE);
+ second_actual = ROUND(hdr->second_size, FLASH_PAGE_SIZE);
+ size = FLASH_PAGE_SIZE + kernel_actual + ramdisk_actual +
+ second_actual;
+
+ ret = mdcom_load_from_mem(recovery_image + size, 0);
+
+ if (ret != CMD_RET_SUCCESS)
+ return ret;
+ }
+
+ ret = mdcom_check_and_wait_modem(0);
+ if (ret != CMD_RET_SUCCESS && bm != RDA_BM_RECOVERY) {
+ serial_printf("Modem no response. Try recovery mode\n");
+ udelay(5000);
+ rda_reboot(REBOOT_TO_RECOVERY_MODE);
+ }
+
+ return ret;
+}
+
+int load_boot_from_nand(void)
+{
+ boot_img_hdr *hdr;
+ void *data = (void *)SCRATCH_ADDR;
+ struct mtd_info *nand;
+ struct mtd_device *dev;
+ struct part_info *part;
+ size_t size = 0;
+ u8 pnum;
+ unsigned kernel_actual;
+ unsigned ramdisk_actual;
+ int ret;
+
+ ret = find_dev_and_part("boot", &dev, &pnum, &part);
+ if (ret) {
+ rda_dbg("unknown partition name\n");
+ return CMD_RET_FAILURE;
+ } else if (dev->id->type != MTD_DEV_TYPE_NAND) {
+ rda_dbg("mtd dev type error\n");
+ return CMD_RET_FAILURE;
+ }
+ nand = &nand_info[dev->id->num];
+ rda_dbg("found part '%s' offset: 0x%llx length: 0x%llx\n",
+ part->name, part->offset, part->size);
+
+ /* get hdr first */
+ size = ROUND(2048, FLASH_PAGE_SIZE);
+ rda_dbg("read 0x%x bytes from '%s' offset: 0x%llx\n",
+ size, part->name, part->offset);
+
+ ret = nand_read_skip_bad(nand, part->offset, &size, (u_char *) data);
+ if (ret) {
+ rda_dbg("nand read fail\n");
+ return CMD_RET_FAILURE;
+ }
+
+ /* get size from hdr */
+ hdr = (boot_img_hdr *) data;
+ kernel_actual = ROUND(hdr->kernel_size, FLASH_PAGE_SIZE);
+ ramdisk_actual = ROUND(hdr->ramdisk_size, FLASH_PAGE_SIZE);
+ size = 2048 + kernel_actual + ramdisk_actual;
+
+ /* load whole boot.img */
+ rda_dbg("read 0x%x bytes from '%s' offset: 0x%llx\n",
+ size, part->name, part->offset);
+ ret = nand_read_skip_bad(nand, part->offset, &size, (u_char *) data);
+ if (ret) {
+ rda_dbg("nand read fail\n");
+ return CMD_RET_FAILURE;
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+static block_dev_desc_t *mmc_blkdev;
+int load_boot_from_mmc(void)
+{
+ void *data = (void *)SCRATCH_ADDR;
+ disk_partition_t *ptn;
+ loff_t size = 0;
+
+ rda_dbg("%s\n", __func__);
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ ptn = partition_find_ptn("boot");
+
+ if (ptn == 0) {
+ rda_dbg("mmc partition table doesn't exist\n");
+ return CMD_RET_FAILURE;
+ }
+
+ size = ptn->size * ptn->blksz;
+
+ rda_dbg("read 0x%x bytes from boot offset: %lx\n", (unsigned int)size,
+ ptn->start);
+ if (partition_read_bytes(mmc_blkdev, ptn, &size, data)) {
+ rda_dbg("mmc read failure\n");
+ return CMD_RET_FAILURE;
+ }
+
+ return CMD_RET_SUCCESS;
+}
+
+static int do_load_boot(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int ret = CMD_RET_FAILURE;
+ enum media_type media;
+
+ media = rda_media_get();
+ serial_printf("load boot image ...\n");
+ if (media == MEDIA_MMC)
+ ret = load_boot_from_mmc();
+ else if ((media == MEDIA_NAND) || (media == MEDIA_SPINAND))
+ ret = load_boot_from_nand();
+ else
+ serial_printf("load_boot can't find boot media\n");
+
+ return ret;
+}
+
+static int do_adjust_bootdelay(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int bootmode;
+
+ bootmode = rda_bm_get();
+ if (bootmode == RDA_BM_FASTBOOT)
+ setenv("bootdelay", "3");
+
+ return CMD_RET_SUCCESS;
+}
U_BOOT_CMD(
sleep , 2, 1, do_sleep,
"delay execution for some time",
"N\n"
" - delay execution for N seconds (N is _decimal_ !!!)"
);
+
+U_BOOT_CMD(
+ flush_dcache , 3, 1, do_flush_dcache,
+ "flush dcache",
+ "start_addr end_addr\n"
+ " - flush dcache from [start_addr] to [end_addr]"
+);
+
+U_BOOT_CMD(
+ mytest , 2, 1, do_mytest,
+ "exec certain test routine",
+ "arg\n"
+ " - exec with arg (arg is _decimal_ !!!)"
+);
+
+U_BOOT_CMD(
+ rdaswcfg , 2, 1, do_rdaswcfg,
+ "set rda swcfg",
+ "Syntax:\n"
+ " - rdaswcfg swcfg\n"
+);
+
+U_BOOT_CMD(
+ rdahwcfg , 1, 1, do_rdahwcfg,
+ "get rda hwcfg",
+ "Syntax:\n"
+ " - rdahwcfg\n"
+);
+
+U_BOOT_CMD(
+ rdabm , 1, 1, do_rdabm,
+ "get rda boot_mode",
+ "Syntax:\n"
+ " - rdabm\n"
+);
+
+U_BOOT_CMD(
+ rdabminit , 1, 1, do_rdabminit,
+ "init rda boot_mode",
+ "Syntax:\n"
+ " - rdabminit\n"
+);
+
+U_BOOT_CMD(
+ ap_factory_use , 2, 1, do_ap_factory_use,
+ "use ap factory data from specified memory",
+ "Syntax:\n"
+ " - factory_use addr\n"
+);
+
+
+U_BOOT_CMD(
+ ap_factory_update , 2, 1, do_ap_factory_update,
+ "update ap factory data from specified memory",
+ "Syntax:\n"
+ " - factory_update addr\n"
+);
+
+U_BOOT_CMD(
+ get_lcd_name , 1, 1, do_get_lcd_name,
+ "ap find lcd panel name",
+ "Syntax:\n"
+ " - find_lcd_name\n"
+);
+
+U_BOOT_CMD(
+ get_flash_intf, 1, 1, do_get_flash_intf,
+ "ap find flash interface",
+ "Syntax:\n"
+ " - get_flash_intf\n"
+);
+
+U_BOOT_CMD(
+ get_emmc_id, 1, 1, do_get_emmc_id,
+ "ap find emmc manufacturer id and pass it to kernel",
+ "Syntax:\n"
+ " - get_emmc_id\n"
+);
+
+U_BOOT_CMD(
+ mux_config, 1, 1, do_board_mux_config,
+ "check and set board mux config (pinmux,io drive,io pin mode...)",
+ "Syntax:\n"
+ " - mux_config\n"
+);
+
+U_BOOT_CMD(
+ get_android_bm, 1, 1, do_get_android_bm,
+ "get android bootmode",
+ "Syntax:\n"
+ " - get_android_bm \n"
+);
+
+U_BOOT_CMD(
+ load_ap_recovery, 1, 1, do_load_ap_recovery,
+ "load recovery kernel and ramdisk to address",
+ "Syntax:\n"
+ " - load_ap_recovery address \n"
+);
+
+U_BOOT_CMD(
+ load_recovery, 1, 1, do_load_recovery,
+ "load recovery image to address",
+ "Syntax:\n"
+ " - load_recovery address \n"
+);
+
+U_BOOT_CMD(
+ load_boot, 1, 1, do_load_boot,
+ "load boot image to address",
+ "Syntax:\n"
+ " - load_boot address \n"
+);
+
+U_BOOT_CMD(
+ get_bootlogo_name , 1, 1, do_get_bootlogo_name,
+ "find bootlogo name",
+ "Syntax:\n"
+ " - get_bootlogo_name\n"
+);
+
+U_BOOT_CMD(
+ adjust_bootdelay , 1, 1, do_adjust_bootdelay,
+ "re-adjust bootdelay according to bootmode",
+ "Syntax:\n"
+ " - adjust_bootdelay\n"
+);
diff --git a/common/cmd_mmc.c b/common/cmd_mmc.c
index 750509da5e..674c1f5a7e 100644
--- a/common/cmd_mmc.c
+++ b/common/cmd_mmc.c
@@ -2,23 +2,7 @@
* (C) Copyright 2003
* Kyle Harris, kharris@nexus-tech.net
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier: GPL-2.0+
*/
#include <common.h>
@@ -92,6 +76,8 @@ enum mmc_state {
MMC_READ,
MMC_WRITE,
MMC_ERASE,
+ MMC_ERASE_PART,
+ MMC_TEST,
};
static void print_mmcinfo(struct mmc *mmc)
{
@@ -106,7 +92,7 @@ static void print_mmcinfo(struct mmc *mmc)
printf("Rd Block Len: %d\n", mmc->read_bl_len);
printf("%s version %d.%d\n", IS_SD(mmc) ? "SD" : "MMC",
- (mmc->version >> 4) & 0xf, mmc->version & 0xf);
+ (mmc->version >> 8) & 0xf, mmc->version & 0xff);
printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No");
puts("Capacity: ");
@@ -115,13 +101,13 @@ static void print_mmcinfo(struct mmc *mmc)
printf("Bus Width: %d-bit\n", mmc->bus_width);
}
-int do_mmcinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+static int do_mmcinfo(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
struct mmc *mmc;
if (curr_device < 0) {
if (get_mmc_num() > 0)
- curr_device = 0;
+ curr_device = 1;
else {
puts("No MMC device available\n");
return 1;
@@ -144,11 +130,40 @@ int do_mmcinfo (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
U_BOOT_CMD(
mmcinfo, 1, 0, do_mmcinfo,
"display MMC info",
- " - device number of the device to dislay info of\n"
- ""
+ "- display info of the current MMC device"
);
-int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+#ifdef CONFIG_SUPPORT_EMMC_BOOT
+static int boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
+{
+ int err;
+ err = mmc_boot_part_access(mmc, ack, part_num, access);
+
+ if ((err == 0) && (access != 0)) {
+ printf("\t\t\t!!!Notice!!!\n");
+
+ printf("!You must close EMMC boot Partition");
+ printf("after all images are written\n");
+
+ printf("!EMMC boot partition has continuity");
+ printf("at image writing time.\n");
+
+ printf("!So, do not close the boot partition");
+ printf("before all images are written.\n");
+ return 0;
+ } else if ((err == 0) && (access == 0))
+ return 0;
+ else if ((err != 0) && (access != 0)) {
+ printf("EMMC boot partition-%d OPEN Failed.\n", part_num);
+ return 1;
+ } else {
+ printf("EMMC boot partition-%d CLOSE Failed.\n", part_num);
+ return 1;
+ }
+}
+#endif
+
+static int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
enum mmc_state state;
@@ -157,7 +172,7 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
if (curr_device < 0) {
if (get_mmc_num() > 0)
- curr_device = 0;
+ curr_device = 1;
else {
puts("No MMC device available\n");
return 1;
@@ -165,8 +180,12 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
}
if (strcmp(argv[1], "rescan") == 0) {
- struct mmc *mmc = find_mmc_device(curr_device);
+ struct mmc *mmc;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+ mmc = find_mmc_device(curr_device);
if (!mmc) {
printf("no mmc device at slot %x\n", curr_device);
return 1;
@@ -180,8 +199,12 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
return 0;
} else if (strncmp(argv[1], "part", 4) == 0) {
block_dev_desc_t *mmc_dev;
- struct mmc *mmc = find_mmc_device(curr_device);
+ struct mmc *mmc;
+
+ if (argc != 2)
+ return CMD_RET_USAGE;
+ mmc = find_mmc_device(curr_device);
if (!mmc) {
printf("no mmc device at slot %x\n", curr_device);
return 1;
@@ -197,8 +220,56 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
puts("get mmc type error!\n");
return 1;
} else if (strcmp(argv[1], "list") == 0) {
+ if (argc != 2)
+ return CMD_RET_USAGE;
print_mmc_devices('\n');
return 0;
+ } else if (strncmp(argv[1], "speed", 5) == 0) {
+ struct mmc *mmc;
+ int ret;
+ u64 offset;
+ unsigned long long start_clock, end_clock;
+ unsigned long duration, mmc_read_speed, mmc_write_speed;
+ u_char *datbuf;
+ size_t test_data_size;
+
+ if (argc < 5) {
+ datbuf = (u_char *)(0x80000000);
+ offset = (u64)(0x00100000);
+ test_data_size = (size_t)(0x00A00000);
+ } else {
+ datbuf = (u_char *)simple_strtoul(argv[2], NULL, 16);
+ offset = (u64)simple_strtoul(argv[3], NULL, 16);
+ test_data_size = (size_t)simple_strtoul(argv[4], NULL, 16);
+ }
+
+ mmc = find_mmc_device(curr_device);
+ mmc_init(mmc);
+
+ start_clock = get_ticks();
+ ret = mmc_read(mmc, offset, datbuf, test_data_size);
+ end_clock = get_ticks();
+ duration = (unsigned long)(end_clock - start_clock);
+ mmc_read_speed = (unsigned long)(test_data_size / (duration * 1000 / get_tbclk()) * 1000 / 1024);
+ if (ret == test_data_size)
+ printf("\nMmc Read speed = %ld Kbyte/s\n", mmc_read_speed);
+ else {
+ printf("\nRead data from Mmc failed\n");
+ return 1;
+ }
+
+ start_clock = get_ticks();
+ ret = mmc_write(mmc, offset, datbuf, test_data_size);
+ end_clock = get_ticks();
+ duration = (unsigned long)(end_clock - start_clock);
+ mmc_write_speed = (unsigned long)(test_data_size / (duration * 1000 / get_tbclk()) * 1000 / 1024);
+ if (ret == test_data_size)
+ printf("\nMmc Write speed = %ld Kbyte/s\n", mmc_write_speed);
+ else {
+ printf("\nWrite data to Mmc failed\n");
+ return 1;
+ }
+ return 0;
} else if (strcmp(argv[1], "dev") == 0) {
int dev, part = -1;
struct mmc *mmc;
@@ -237,7 +308,7 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
if (!ret)
mmc->part_num = part;
- printf("switch to partions #%d, %s\n",
+ printf("switch to partitions #%d, %s\n",
part, (!ret) ? "OK" : "ERROR");
}
}
@@ -249,41 +320,132 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
curr_device, mmc->part_num);
return 0;
- }
+#ifdef CONFIG_SUPPORT_EMMC_BOOT
+ } else if ((strcmp(argv[1], "open") == 0) ||
+ (strcmp(argv[1], "close") == 0)) {
+ int dev;
+ struct mmc *mmc;
+ u8 part_num, access = 0;
- if (strcmp(argv[1], "read") == 0)
+ if (argc == 4) {
+ dev = simple_strtoul(argv[2], NULL, 10);
+ part_num = simple_strtoul(argv[3], NULL, 10);
+ } else {
+ return CMD_RET_USAGE;
+ }
+
+ mmc = find_mmc_device(dev);
+ if (!mmc) {
+ printf("no mmc device at slot %x\n", dev);
+ return 1;
+ }
+
+ if (IS_SD(mmc)) {
+ printf("SD device cannot be opened/closed\n");
+ return 1;
+ }
+
+ if ((part_num <= 0) || (part_num > MMC_NUM_BOOT_PARTITION)) {
+ printf("Invalid boot partition number:\n");
+ printf("Boot partition number cannot be <= 0\n");
+ printf("EMMC44 supports only 2 boot partitions\n");
+ return 1;
+ }
+
+ if (strcmp(argv[1], "open") == 0)
+ access = part_num; /* enable R/W access to boot part*/
+ else
+ access = 0; /* No access to boot partition */
+
+ /* acknowledge to be sent during boot operation */
+ return boot_part_access(mmc, 1, part_num, access);
+
+ } else if (strcmp(argv[1], "bootpart") == 0) {
+ int dev;
+ dev = simple_strtoul(argv[2], NULL, 10);
+
+ u32 bootsize = simple_strtoul(argv[3], NULL, 10);
+ u32 rpmbsize = simple_strtoul(argv[4], NULL, 10);
+ struct mmc *mmc = find_mmc_device(dev);
+ if (!mmc) {
+ printf("no mmc device at slot %x\n", dev);
+ return 1;
+ }
+
+ if (IS_SD(mmc)) {
+ printf("It is not a EMMC device\n");
+ return 1;
+ }
+
+ if (0 == mmc_boot_partition_size_change(mmc,
+ bootsize, rpmbsize)) {
+ printf("EMMC boot partition Size %d MB\n", bootsize);
+ printf("EMMC RPMB partition Size %d MB\n", rpmbsize);
+ return 0;
+ } else {
+ printf("EMMC boot partition Size change Failed.\n");
+ return 1;
+ }
+#endif /* CONFIG_SUPPORT_EMMC_BOOT */
+ }
+ state = MMC_INVALID;
+ if (argc == 5 && strcmp(argv[1], "read") == 0)
state = MMC_READ;
- else if (strcmp(argv[1], "write") == 0)
+ else if (argc == 5 && strcmp(argv[1], "write") == 0)
state = MMC_WRITE;
- else if (strcmp(argv[1], "erase") == 0)
+ else if (argc == 6 && strcmp(argv[1], "test") == 0)
+ state = MMC_TEST;
+ else if (argc == 4 && strcmp(argv[1], "erase") == 0)
state = MMC_ERASE;
- else
- state = MMC_INVALID;
+ else if (argc == 3 && strcmp(argv[1], "erase.part") == 0)
+ state = MMC_ERASE_PART;
if (state != MMC_INVALID) {
struct mmc *mmc = find_mmc_device(curr_device);
int idx = 2;
u32 blk, cnt, n;
- void *addr;
-
- if (state != MMC_ERASE) {
- addr = (void *)simple_strtoul(argv[idx], NULL, 16);
- ++idx;
- } else
- addr = 0;
- blk = simple_strtoul(argv[idx], NULL, 16);
- cnt = simple_strtoul(argv[idx + 1], NULL, 16);
+ void *addr = NULL;
+ int times = 10;
if (!mmc) {
printf("no mmc device at slot %x\n", curr_device);
return 1;
}
- printf("\nMMC %s: dev # %d, block # %d, count %d ... ",
- argv[1], curr_device, blk, cnt);
-
mmc_init(mmc);
+ if ((state == MMC_WRITE || state == MMC_ERASE)) {
+ if (mmc_getwp(mmc) == 1) {
+ printf("Error: card is write protected!\n");
+ return 1;
+ }
+ }
+
+ if (state == MMC_ERASE_PART) {
+ disk_partition_t *ptn;
+ ptn = partition_find_ptn(argv[idx]);
+ if (!ptn) {
+ printf("Error: not found part [%s]\n", argv[idx]);
+ return 1;
+ }
+ blk = ptn->start;
+ cnt = ptn->size;
+ state = MMC_ERASE;
+
+ } else {
+ if (state != MMC_ERASE) {
+ addr = (void *)simple_strtoul(argv[idx], NULL, 16);
+ ++idx;
+ }
+ blk = simple_strtoul(argv[idx], NULL, 16);
+ cnt = simple_strtoul(argv[idx + 1], NULL, 16);
+ if (state == MMC_TEST)
+ times = simple_strtoul(argv[idx + 2], NULL, 10);
+ }
+
+ printf("\nMMC %s: dev # %d, block # %d, count %d ... ",
+ argv[1], curr_device, blk, cnt);
+
switch (state) {
case MMC_READ:
n = mmc->block_dev.block_read(curr_device, blk,
@@ -298,6 +460,51 @@ int do_mmcops(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
case MMC_ERASE:
n = mmc->block_dev.block_erase(curr_device, blk, cnt);
break;
+ case MMC_TEST:
+ {
+ u32 pat = 0x5a5a1234;
+ u32 *dat = addr;
+ u32 crc1 = 0, crc2 = 0;
+ u32 siz = cnt * 512;
+ int i, t;
+
+ /* test write/read */
+ n = cnt;
+ printf("\nTest start...\n");
+ for(t = 1; t <= times; t++)
+ {
+ /* fill buffer by pattern */
+ dat = addr;
+ for(i = 0; i < siz; i += 4)
+ {
+ *dat++ = pat;
+ pat += 0x10001;
+ }
+ crc1 = crc32(0, (void *)addr, siz);
+ pat = ~pat;
+
+ /* write to device */
+ mmc->block_dev.block_write(curr_device, blk, cnt, addr);
+
+ /* clear buffer */
+ memset((void*)addr, 0, siz);
+
+ /* read back */
+ mmc->block_dev.block_read(curr_device, blk, cnt, addr);
+ flush_cache((ulong)addr, cnt * 512);
+
+ /* compare and show result */
+ crc2 = crc32(0, (void *)addr, siz);
+ printf("Test %02d: expect crc = 0x%08x, got = 0x%08x, %s\n",
+ t, crc1, crc2,
+ (crc1==crc2) ? "SUCCESS!" : "FAIL!");
+
+ /* make fail tag */
+ if(crc1 != crc2)
+ n = cnt - 1;
+ }
+ }
+ break;
default:
BUG();
}
@@ -315,9 +522,20 @@ U_BOOT_CMD(
"MMC sub system",
"read addr blk# cnt\n"
"mmc write addr blk# cnt\n"
+ "mmc test addr blk# cnt times\n"
"mmc erase blk# cnt\n"
+ "mmc erase.part part_name\n"
"mmc rescan\n"
"mmc part - lists available partition on current mmc device\n"
"mmc dev [dev] [part] - show or set current mmc device [partition]\n"
- "mmc list - lists available devices");
+ "mmc list - lists available devices\n"
+#ifdef CONFIG_SUPPORT_EMMC_BOOT
+ "mmc open <dev> <boot_partition>\n"
+ " - Enable boot_part for booting and enable R/W access of boot_part\n"
+ "mmc close <dev> <boot_partition>\n"
+ " - Enable boot_part for booting and disable access to boot_part\n"
+ "mmc bootpart <device num> <boot part size MB> <RPMB part size MB>\n"
+ " - change sizes of boot and RPMB partitions of specified device\n"
#endif
+ );
+#endif /* !CONFIG_GENERIC_MMC */
diff --git a/common/cmd_mtdparts.c b/common/cmd_mtdparts.c
index 22688293ae..add0585037 100644
--- a/common/cmd_mtdparts.c
+++ b/common/cmd_mtdparts.c
@@ -99,6 +99,7 @@
#if defined(CONFIG_CMD_NAND)
#include <linux/mtd/nand.h>
#include <nand.h>
+#include <mtd/nand/rda_nand.h>
#endif
#if defined(CONFIG_CMD_ONENAND)
@@ -325,7 +326,7 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part)
{
struct mtd_info *mtd = NULL;
int i, j;
- ulong start;
+ u64 start;
if (get_mtd_info(id->type, id->num, &mtd))
return 1;
@@ -337,7 +338,7 @@ static int part_validate_eraseblock(struct mtdids *id, struct part_info *part)
* Only one eraseregion (NAND, OneNAND or uniform NOR),
* checking for alignment is easy here
*/
- if ((unsigned long)part->offset % mtd->erasesize) {
+ if (part->offset % (u64)mtd->erasesize) {
printf("%s%d: partition (%s) start offset"
"alignment incorrect\n",
MTD_DEV_TYPE(id->type), id->num, part->name);
@@ -412,19 +413,20 @@ static int part_validate(struct mtdids *id, struct part_info *part)
part->size = id->size - part->offset;
if (part->offset > id->size) {
- printf("%s: offset %08x beyond flash size %08x\n",
+ printf("%s: offset %llx beyond flash size 0x%llx\n",
id->mtd_id, part->offset, id->size);
return 1;
}
- if ((part->offset + part->size) <= part->offset) {
+ if (((u64)part->offset + (u64)part->size) <= (u64)part->offset) {
printf("%s%d: partition (%s) size too big\n",
MTD_DEV_TYPE(id->type), id->num, part->name);
return 1;
}
if (part->offset + part->size > id->size) {
- printf("%s: partitioning exceeds flash size\n", id->mtd_id);
+ printf("%s: partitioning exceeds flash size %llx, part %llx+%llx\n",
+ id->mtd_id, id->size, part->offset, part->size);
return 1;
}
@@ -462,7 +464,7 @@ static int part_del(struct mtd_device *dev, struct part_info *part)
if (curr_pi == part) {
printf("current partition deleted, resetting current to 0\n");
current_mtd_partnum = 0;
- } else if (part->offset <= curr_pi->offset) {
+ } else if (part->offset <= (u64)curr_pi->offset) {
current_mtd_partnum--;
}
current_save_needed = 1;
@@ -595,8 +597,7 @@ static int part_add(struct mtd_device *dev, struct part_info *part)
static int part_parse(const char *const partdef, const char **ret, struct part_info **retpart)
{
struct part_info *part;
- unsigned long size;
- unsigned long offset;
+ u64 size, offset;
const char *name;
int name_len;
unsigned int mask_flags;
@@ -615,7 +616,7 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
} else {
size = memsize_parse(p, &p);
if (size < MIN_PART_SIZE) {
- printf("partition size too small (%lx)\n", size);
+ printf("partition size too small (%llx)\n", size);
return 1;
}
}
@@ -680,6 +681,8 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
part->offset = offset;
part->mask_flags = mask_flags;
part->name = (char *)(part + 1);
+ /*we set the mtdpart is dirty and force erase before program if needed*/
+ part->dirty = 1;
if (name) {
/* copy user provided name */
@@ -687,14 +690,14 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
part->auto_name = 0;
} else {
/* auto generated name in form of size@offset */
- sprintf(part->name, "0x%08lx@0x%08lx", size, offset);
+ sprintf(part->name, "0x%llx@0x%llx", size, offset);
part->auto_name = 1;
}
part->name[name_len - 1] = '\0';
INIT_LIST_HEAD(&part->link);
- debug("+ partition: name %-22s size 0x%08x offset 0x%08x mask flags %d\n",
+ debug("+ partition: name %-22s size 0x%llx offset 0x%llx mask flags %d\n",
part->name, part->size,
part->offset, part->mask_flags);
@@ -710,7 +713,7 @@ static int part_parse(const char *const partdef, const char **ret, struct part_i
* @param size a pointer to the size of the mtd device (output)
* @return 0 if device is valid, 1 otherwise
*/
-int mtd_device_validate(u8 type, u8 num, u32 *size)
+int mtd_device_validate(u8 type, u8 num, u64 *size)
{
struct mtd_info *mtd = NULL;
@@ -843,7 +846,7 @@ static int device_parse(const char *const mtd_dev, const char **ret, struct mtd_
LIST_HEAD(tmp_list);
struct list_head *entry, *n;
u16 num_parts;
- u32 offset;
+ u64 offset;
int err = 1;
debug("===device_parse===\n");
@@ -1087,7 +1090,8 @@ static int generate_mtdparts(char *buf, u32 buflen)
struct part_info *part, *prev_part;
char *p = buf;
char tmpbuf[32];
- u32 size, offset, len, part_cnt;
+ u64 size, offset;
+ u32 len, part_cnt;
u32 maxlen = buflen - 1;
debug("--- generate_mtdparts ---\n");
@@ -1274,7 +1278,7 @@ static void print_partition_table(void)
part = list_entry(pentry, struct part_info, link);
net_size = net_part_size(mtd, part);
size_note = part->size == net_size ? " " : " (!)";
- printf("%2d: %-20s0x%08x\t0x%08x%s\t0x%08x\t%d\n",
+ printf("%2d: %-20s0x%llx\t0x%08x%s\t0x%llx\t%d\n",
part_num, part->name, part->size,
net_size, size_note, part->offset,
part->mask_flags);
@@ -1286,7 +1290,7 @@ static void print_partition_table(void)
list_for_each(pentry, &dev->parts) {
part = list_entry(pentry, struct part_info, link);
- printf("%2d: %-20s0x%08x\t0x%08x\t%d\n",
+ printf("%2d: %-20s0x%llx\t0x%llx\t%d\n",
part_num, part->name, part->size,
part->offset, part->mask_flags);
#endif /* defined(CONFIG_CMD_MTDPARTS_SHOW_NET_SIZES) */
@@ -1299,6 +1303,41 @@ static void print_partition_table(void)
}
/**
+ * Given nand partition number find the partition info and
+ * corresponding nand device
+ *
+ * @param part_num nand partition number
+ * @param part pointer to requested partition (output)
+ * @param nand pointer to the nand device (output)
+ * @return 0 on success, -1 otherwise
+ */
+int find_nand_part_info(int part_num, struct part_info **part,
+ struct mtd_info **nand)
+{
+ struct list_head *dentry;
+ struct mtd_device *dev;
+
+ if (list_empty(&devices)) {
+ printf("no partitions defined\n");
+ return -1;
+ }
+
+ list_for_each(dentry, &devices) {
+ dev = list_entry(dentry, struct mtd_device, link);
+ /* list partitions for given device */
+
+ if (dev->id->type == MTD_DEV_TYPE_NAND) {
+ *part = mtd_part_info(dev, part_num);
+ if (!part)
+ return -1;
+ *nand = &nand_info[dev->id->num];
+ return 0;
+ }
+ }
+
+ return -1;
+}
+/**
* Format and print out a partition list for each device from global device
* list.
*/
@@ -1313,7 +1352,7 @@ static void list_partitions(void)
if (current_mtd_dev) {
part = mtd_part_info(current_mtd_dev, current_mtd_partnum);
if (part) {
- printf("\nactive partition: %s%d,%d - (%s) 0x%08x @ 0x%08x\n",
+ printf("\nactive partition: %s%d,%d - (%s) 0x%llx @ 0x%llx\n",
MTD_DEV_TYPE(current_mtd_dev->id->type),
current_mtd_dev->id->num, current_mtd_partnum,
part->name, part->size, part->offset);
@@ -1413,7 +1452,7 @@ static int delete_partition(const char *id)
if (find_dev_and_part(id, &dev, &pnum, &part) == 0) {
- debug("delete_partition: device = %s%d, partition %d = (%s) 0x%08x@0x%08x\n",
+ debug("delete_partition: device = %s%d, partition %d = (%s) 0x%llx@0x%llx\n",
MTD_DEV_TYPE(dev->id->type), dev->id->num, pnum,
part->name, part->size, part->offset);
@@ -1502,7 +1541,7 @@ static int spread_partitions(void)
part = list_entry(pentry, struct part_info, link);
debug("spread_partitions: device = %s%d, partition %d ="
- " (%s) 0x%08x@0x%08x\n",
+ " (%s) 0x%08x@0x%llx\n",
MTD_DEV_TYPE(dev->id->type), dev->id->num,
part_num, part->name, part->size,
part->offset);
@@ -1599,7 +1638,7 @@ static int parse_mtdids(const char *const ids)
struct list_head *entry, *n;
struct mtdids *id_tmp;
u8 type, num;
- u32 size;
+ u64 size;
int ret = 1;
debug("\n---parse_mtdids---\nmtdids = %s\n\n", ids);
@@ -1673,7 +1712,7 @@ static int parse_mtdids(const char *const ids)
id->mtd_id[mtd_id_len - 1] = '\0';
INIT_LIST_HEAD(&id->link);
- debug("+ id %s%d\t%16d bytes\t%s\n",
+ debug("+ id %s%d\t%lld bytes\t%s\n",
MTD_DEV_TYPE(id->type), id->num,
id->size, id->mtd_id);
@@ -1829,6 +1868,296 @@ int mtdparts_init(void)
return 0;
}
+/* Load mtd partition table from flash */
+static int mtdparts_ptbl_read(char *data)
+{
+ nand_info_t *nand;
+ int dev = nand_curr_device;
+ int ret = 0;
+ char *buff;
+ size_t rsize;
+ u32 offs = CONFIG_MTD_PTBL_OFFS;
+ u32 data_size, data_crc;
+
+ if (dev < 0 || dev >= CONFIG_SYS_MAX_NAND_DEVICE ||
+ !nand_info[dev].name) {
+ printf("%s: nand not init.\n", __func__);
+ return -1;
+ }
+ nand = &nand_info[dev];
+
+ {
+ struct nand_chip *this = nand->priv;
+ struct rda_nand_info *info = this->priv;
+ offs = (offs * info->spl_adjust_ratio) / 2;
+ }
+
+ buff = malloc(CONFIG_MTD_PTBL_SIZE);
+ if(!buff) {
+ printf("%s: can't malloc memory.\n", __func__);
+ return -1;
+ }
+
+ /* calculate read size */
+ rsize = nand->erasesize - (offs % nand->erasesize);
+ if(rsize > CONFIG_MTD_PTBL_SIZE) {
+ rsize = CONFIG_MTD_PTBL_SIZE;
+ }
+
+ /* read data from flash */
+ ret = nand_read_skip_bad(nand, offs, &rsize, (u_char *)buff);
+ if(ret) {
+ printf("%s: flash read error %d\n", __func__, ret);
+ ret = -1;
+ goto exit;
+ }
+
+ memcpy((void*)&data_size, (void*)&buff[0], 4);
+ memcpy((void*)&data_crc, (void*)&buff[4], 4);
+ if(!data_size || data_size > (CONFIG_MTD_PTBL_SIZE - 8)) {
+ printf("%s: partition table is invalid.\n", __func__);
+ ret = -1;
+ goto exit;
+ }
+
+ /* crc checking */
+ if(data_crc != crc32(0, (const unsigned char *)(&buff[8]), data_size)) {
+ printf("%s: crc checking failed.\n", __func__);
+ ret = -1;
+ goto exit;
+ }
+
+ memcpy(data, (void*)&buff[8], data_size);
+ printf("%s: load partition table from %#x\n", __func__, offs);
+ printf("partition table: %s\n", data);
+
+exit:
+ free(buff);
+ return ret;
+}
+
+/* save mtd partition table to flash */
+static int mtdparts_ptbl_write(char *data, int need_erase)
+{
+ nand_info_t *nand;
+ int dev = nand_curr_device;
+ int ret = 0;
+ size_t wsize, rsize;
+ char *buff;
+ u32 offs = CONFIG_MTD_PTBL_OFFS;
+ nand_erase_options_t opts;
+ u32 data_size = strlen(data) + 1;
+ u32 data_crc;
+
+ buff = malloc(CONFIG_MTD_PTBL_SIZE);
+ if(!buff) {
+ printf("%s: can't malloc memory.\n", __func__);
+ return -1;
+ }
+
+ /* check if the new table is same as old */
+ if(mtdparts_ptbl_read(buff) == 0) {
+ if(strcmp(buff, data) == 0) {
+ printf("%s: same as old, do nothing.\n", __func__);
+ free(buff);
+ return 0;
+ }
+ }
+ free(buff);
+
+ if (dev < 0 || dev >= CONFIG_SYS_MAX_NAND_DEVICE ||
+ !nand_info[dev].name) {
+ printf("%s: nand not init.\n", __func__);
+ return -1;
+ }
+ nand = &nand_info[dev];
+
+ {
+ printf("mtdparts_ptbl_write0: offs = 0x%x \n", offs);
+ struct nand_chip *this = nand->priv;
+ struct rda_nand_info *info = this->priv;
+ offs = (offs * info->spl_adjust_ratio) / 2;
+ printf("mtdparts_ptbl_write1: offs = 0x%x \n", offs);
+ }
+
+ printf("%s: save partition table to %#x\n", __func__, offs);
+ printf("%s: %s\n", __func__, data);
+
+ /* Limit data in one block */
+ if(data_size > (CONFIG_MTD_PTBL_SIZE - 8) ||
+ data_size > (nand->erasesize - (offs % nand->erasesize) - 8)) {
+ printf("%s: data size is too large.\n", __func__);
+ return -1;
+ }
+
+ buff = malloc(nand->erasesize);
+ if(!buff) {
+ printf("%s: can't malloc memory.\n", __func__);
+ return -1;
+ }
+
+ /* not need to do erase */
+ if(!need_erase) {
+ /* fill buffer */
+ data_crc = crc32(0, (const unsigned char *)data, data_size);
+ memcpy((void *)(buff), &data_size, 4);
+ memcpy((void *)(buff+4), &data_crc, 4);
+ memcpy((void *)(buff+8), data, data_size);
+
+ /* write data to flash */
+ wsize = data_size + 8;
+ ret = nand_write_skip_bad(nand, offs, &wsize, (u_char *)buff, 0);
+ if(ret) {
+ printf("%s: flash write error %d\n", __func__, ret);
+ }
+ goto exit;
+ }
+
+ /* need to do erase */
+
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = (loff_t) (offs - (offs % nand->erasesize));
+ opts.length = (loff_t) nand->erasesize;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+
+ /* Read this block data to buffer */
+ rsize = nand->erasesize;
+ ret = nand_read_skip_bad(nand, opts.offset, &rsize, (u_char *)buff);
+ if(ret) {
+ printf("%s: flash read error %d\n", __func__, ret);
+ goto exit;
+ }
+
+ /* erase block */
+ ret = nand_erase_opts(nand, &opts);
+ if(ret) {
+ printf("%s: flash erase error %d\n", __func__, ret);
+ goto exit;
+ }
+
+ /* fill buffer */
+ data_crc = crc32(0, (const unsigned char *)data, data_size);
+ memcpy((void *)(buff+(offs % nand->erasesize)), &data_size, 4);
+ memcpy((void *)(buff+(offs % nand->erasesize)+4), &data_crc, 4);
+ memcpy((void *)(buff+(offs % nand->erasesize)+8), data, data_size);
+
+ /* write data to flash */
+ wsize = nand->erasesize;
+ ret = nand_write_skip_bad(nand, opts.offset, &wsize, (u_char *)buff, 0);
+ if(ret) {
+ printf("%s: flash write error %d\n", __func__, ret);
+ }
+
+exit:
+ free(buff);
+ return ret;
+}
+
+int mtdparts_init_from_ptbl(void)
+{
+ char *mtdparts_str = malloc(CONFIG_MTD_PTBL_SIZE);
+
+ setenv("mtdparts", (char *)mtdparts_default);
+
+ /* load partition table from flash */
+ if(mtdparts_str){
+ if(mtdparts_ptbl_read(mtdparts_str) == 0) {
+ setenv("mtdparts", mtdparts_str);
+ }
+ free(mtdparts_str);
+ }
+
+ setenv("mtdids", (char *)mtdids_default);
+ setenv("partition", NULL);
+
+ return mtdparts_init();
+}
+
+int mtdparts_save_ptbl(int need_erase)
+{
+ if(mtdparts_ptbl_write((char *)mtdparts_default, need_erase)){
+ printf("%s: save partition table failed.\n", __func__);
+ return -1;
+ }
+ return 0;
+}
+
+int mtdparts_init_default(void)
+{
+ setenv("mtdids", (char *)mtdids_default);
+ setenv("mtdparts", (char *)mtdparts_default);
+ setenv("partition", NULL);
+
+ return mtdparts_init();
+}
+
+/* Check if the partition table is same with the table stored in flash */
+int mtdparts_ptbl_check(int *same)
+{
+ int ret;
+ char *buff;
+
+ if(!same) return -1;
+ *same = 0;
+
+ if(!mtdparts_default) {
+ return -1;
+ }
+
+ buff = malloc(CONFIG_MTD_PTBL_SIZE);
+ if(!buff) {
+ printf("%s: can't malloc memory.\n", __func__);
+ return -1;
+ }
+
+ ret = mtdparts_ptbl_read(buff);
+ if(!ret) {
+ printf("mtdparts_default: %s\n", mtdparts_default);
+ printf("mtdparts_in_flash: %s\n", buff);
+ if(strcmp(buff, mtdparts_default) == 0) {
+ *same = 1;
+ }
+ }
+
+ free(buff);
+ return ret;
+}
+
+/* Check if the part(bootloader & factorydata) of partition
+ table is same with the table stored in flash */
+int mtdparts_ptbl_check_factorydata(int *same)
+{
+ int ret;
+ char *buff;
+
+ if(!same) return -1;
+ *same = 0;
+
+ if(!mtdparts_default) {
+ return -1;
+ }
+
+ buff = malloc(CONFIG_MTD_PTBL_SIZE);
+ if(!buff) {
+ printf("%s: can't malloc memory.\n", __func__);
+ return -1;
+ }
+
+ ret = mtdparts_ptbl_read(buff);
+ if(!ret) {
+ int len = strstr(buff, "factorydata") - buff;
+ //printf("mtdparts_default: %s\n", mtdparts_default);
+ //printf("mtdparts_in_flash: %s\n", buff);
+ if(strncmp(buff, mtdparts_default, len) == 0) {
+ *same = 1;
+ }
+ }
+
+ free(buff);
+ return ret;
+}
+
/**
* Return pointer to the partition of a requested number from a requested
* device.
@@ -1870,6 +2199,23 @@ static struct part_info* mtd_part_info(struct mtd_device *dev, unsigned int part
return NULL;
}
+int mtdparts_clear_all_dirty(struct mtd_device *dev)
+{
+ struct list_head *entry;
+ struct part_info *part;
+
+ if(!dev)
+ return -1;
+
+ printf("clear all %d mtdparts's dirty\n", dev->num_parts);
+ list_for_each(entry, &dev->parts) {
+ part = list_entry(entry, struct part_info, link);
+ if (part)
+ part->dirty = 0;
+ }
+ return 0;
+
+}
/***************************************************/
/* U-boot commands */
/***************************************************/
diff --git a/common/cmd_nand.c b/common/cmd_nand.c
index bae630dfb6..cdd1258b1b 100644
--- a/common/cmd_nand.c
+++ b/common/cmd_nand.c
@@ -11,7 +11,7 @@
* Added 16-bit nand support
* (C) 2004 Texas Instruments
*
- * Copyright 2010 Freescale Semiconductor
+ * Copyright 2010, 2012 Freescale Semiconductor
* The portions of this file whose copyright is held by Freescale and which
* are not considered a derived work of GPL v2-only code may be distributed
* and/or modified under the terms of the GNU General Public License as
@@ -27,6 +27,7 @@
#include <asm/byteorder.h>
#include <jffs2/jffs2.h>
#include <nand.h>
+#include <mtd/nand/rda_nand.h>
#if defined(CONFIG_CMD_MTDPARTS)
@@ -37,11 +38,17 @@ int find_dev_and_part(const char *id, struct mtd_device **dev,
u8 *part_num, struct part_info **part);
#endif
-static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
+static int nand_dump(nand_info_t *nand, uint64_t off, int only_oob, int repeat)
{
int i;
u_char *datbuf, *oobbuf, *p;
static loff_t last;
+ struct nand_chip *chip = nand->priv;
+ struct rda_nand_info *info = chip->priv;
+
+ /* just for dump nand first 16k bytes in nand driver V3,*/
+ /* no care to nand driver V1. */
+ info->dump_debug_flag = 1;
if (repeat)
off = last + nand->writesize;
@@ -54,7 +61,13 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
puts("No memory for page buffer\n");
return 1;
}
- off &= ~(nand->writesize - 1);
+
+ /* off is 64 bit*/
+ if(chip->page_shift == 0)
+ off = (loff_t)mtd_div_by_ws(off, nand) * nand->writesize;
+ else
+ off &= ~((loff_t)nand->writesize - 1);
+
loff_t addr = (loff_t) off;
struct mtd_oob_ops ops;
memset(&ops, 0, sizeof(ops));
@@ -65,12 +78,12 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
ops.mode = MTD_OOB_RAW;
i = nand->read_oob(nand, addr, &ops);
if (i < 0) {
- printf("Error (%d) reading page %08lx\n", i, off);
+ printf("Error (%d) reading page 0x%llx\n", i, off);
free(datbuf);
free(oobbuf);
return 1;
}
- printf("Page %08lx dump:\n", off);
+ printf("Page 0x%llx dump:\n", off);
i = nand->writesize >> 4;
p = datbuf;
@@ -91,6 +104,8 @@ static int nand_dump(nand_info_t *nand, ulong off, int only_oob, int repeat)
p[0], p[1], p[2], p[3], p[4], p[5], p[6], p[7]);
p += 8;
}
+
+ info->dump_debug_flag = 0;
free(datbuf);
free(oobbuf);
@@ -191,7 +206,7 @@ static int arg_off_size(int argc, char *const argv[], int *idx,
loff_t *off, loff_t *size)
{
int ret;
- loff_t maxsize;
+ loff_t maxsize = 0;
if (argc == 0) {
*off = 0;
@@ -277,6 +292,7 @@ int do_nand_env_oob(cmd_tbl_t *cmdtp, int argc, char *const argv[])
int ret;
uint32_t oob_buf[ENV_OFFSET_SIZE/sizeof(uint32_t)];
nand_info_t *nand = &nand_info[0];
+ struct nand_chip *chip = nand->priv;
char *cmd = argv[1];
if (CONFIG_SYS_MAX_NAND_DEVICE == 0 || !nand->name) {
@@ -319,9 +335,16 @@ int do_nand_env_oob(cmd_tbl_t *cmdtp, int argc, char *const argv[])
return 1;
}
- if ((addr & (nand->erasesize - 1)) != 0) {
- printf("Environment offset must be block-aligned\n");
- return 1;
+ if (chip->bbt_erase_shift == 0) {
+ if(mtd_mod_by_eb(addr, nand) != 0){
+ printf("Environment offset must be block-aligned\n");
+ return 1;
+ }
+ } else {
+ if ((addr & (nand->erasesize - 1)) != 0) {
+ printf("Environment offset must be block-aligned\n");
+ return 1;
+ }
}
ops.datbuf = NULL;
@@ -390,6 +413,47 @@ static void nand_print_and_set_info(int idx)
setenv("nand_erasesize", buf);
}
+static void nand_print_ID(void)
+{
+ nand_info_t *nand = &nand_info[0];
+ struct nand_chip *chip = nand->priv;
+
+ chip->read_nand_ID(nand);
+}
+
+static int raw_access(nand_info_t *nand, ulong addr, loff_t off, ulong count,
+ int read)
+{
+ int ret = 0;
+
+ while (count--) {
+ /* Raw access */
+ mtd_oob_ops_t ops = {
+ .datbuf = (u8 *)addr,
+ .oobbuf = ((u8 *)addr) + nand->writesize,
+ .len = nand->writesize,
+ .ooblen = nand->oobsize,
+ .mode = MTD_OOB_RAW
+ };
+
+ if (read)
+ ret = nand->read_oob(nand, off, &ops);
+ else
+ ret = nand->write_oob(nand, off, &ops);
+
+ if (ret) {
+ printf("%s: error at offset %llx, ret %d\n",
+ __func__, (long long)off, ret);
+ break;
+ }
+
+ addr += nand->writesize + nand->oobsize;
+ off += nand->writesize;
+ }
+
+ return ret;
+}
+
int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
{
int i, ret = 0;
@@ -429,6 +493,11 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
return 0;
}
+ if (strcmp(cmd, "id") == 0 || strcmp(cmd, "ID") == 0) {
+ nand_print_ID();
+ return 0;
+ }
+
if (strcmp(cmd, "device") == 0) {
if (argc < 3) {
putc('\n');
@@ -560,15 +629,75 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
if (argc < 3)
goto usage;
- off = (int)simple_strtoul(argv[2], NULL, 16);
+ off = simple_strtoull(argv[2], NULL, 16);
ret = nand_dump(nand, off, !strcmp(&cmd[4], ".oob"), repeat);
return ret == 0 ? 1 : 0;
}
+ if (strncmp(cmd, "speed", 5) == 0) {
+
+ unsigned long long start_clock, end_clock;
+ unsigned long duration, nand_speed;
+ u_char *datbuf;
+ nand_erase_options_t opts;
+ uint32_t test_data_size;
+
+ if (argc < 5){
+ datbuf = (u_char *)(0x80000000);
+ off = (ulong)(0x00100000);
+ test_data_size = (ulong)(0x00A00000);
+ } else {
+ datbuf = (u_char *)simple_strtoul(argv[2], NULL, 16);
+ off = (ulong)simple_strtoul(argv[3], NULL, 16);
+ test_data_size = (ulong)simple_strtoul(argv[4], NULL, 16);
+ }
+
+ start_clock = get_ticks();
+ ret = nand_read_skip_bad(nand, off, &test_data_size, datbuf);
+ end_clock = get_ticks();
+ duration = (unsigned long)(end_clock - start_clock);
+ nand_speed = (unsigned long)(test_data_size / (duration * 1000 / get_tbclk()) * 1000 / 1024);
+ if (!ret)
+ printf("\nNand Read speed = %ld Kbyte/s\n\n", nand_speed);
+ else {
+ printf("\nRead data from Nand failed\n");
+ return 1;
+ }
+
+ /* set nand erasing parameters */
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = off;
+ opts.length = test_data_size;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+ opts.spread = 0;
+
+ /* erase flash */
+ start_clock = get_ticks();
+ ret = nand_erase_opts(nand, &opts);
+ if(ret != 0) {
+ printf("erase nand flash error, returned value: ret = %d\n", ret);
+ return 1;
+ }
+ ret = nand_write_skip_bad(nand, off, &test_data_size, datbuf, 0);
+ end_clock = get_ticks();
+ duration = (unsigned long)(end_clock - start_clock);
+ nand_speed = (unsigned long)(test_data_size / (duration * 1000 / get_tbclk()) * 1000 / 1024);
+ if (!ret)
+ printf("\nNand Write speed = %ld Kbyte/s\n", nand_speed);
+ else {
+ printf("\nWrite data to Nand failed\n");
+ return 1;
+ }
+ return ret == 0 ? 0 : 1;
+ }
+
if (strncmp(cmd, "read", 4) == 0 || strncmp(cmd, "write", 5) == 0) {
size_t rwsize;
+ ulong pagecount = 1;
int read;
+ int raw;
if (argc < 4)
goto usage;
@@ -577,13 +706,36 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
read = strncmp(cmd, "read", 4) == 0; /* 1 = read, 0 = write */
printf("\nNAND %s: ", read ? "read" : "write");
- if (arg_off_size(argc - 3, argv + 3, &dev, &off, &size) != 0)
- return 1;
nand = &nand_info[dev];
- rwsize = size;
s = strchr(cmd, '.');
+
+ if (!strcmp(s, ".raw")) {
+ raw = 1;
+
+ if (arg_off(argv[3], &dev, &off, &size))
+ return 1;
+
+ if (argc > 4 && !str2long(argv[4], &pagecount)) {
+ printf("'%s' is not a number\n", argv[4]);
+ return 1;
+ }
+
+ if (pagecount * nand->writesize > size) {
+ puts("Size exceeds partition or device limit\n");
+ return -1;
+ }
+
+ rwsize = pagecount * (nand->writesize + nand->oobsize);
+ } else {
+ if (arg_off_size(argc - 3, argv + 3, &dev,
+ &off, &size) != 0)
+ return 1;
+
+ rwsize = size;
+ }
+
if (!s || !strcmp(s, ".jffs2") ||
!strcmp(s, ".e") || !strcmp(s, ".i")) {
if (read)
@@ -609,7 +761,8 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
return 1;
}
ret = nand_write_skip_bad(nand, off, &rwsize,
- (u_char *)addr, WITH_YAFFS_OOB);
+ (u_char *)addr,
+ WITH_YAFFS_OOB); // WITH_INLINE_OOB); ???
#endif
} else if (!strcmp(s, ".oob")) {
/* out-of-band data */
@@ -623,22 +776,8 @@ int do_nand(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
ret = nand->read_oob(nand, off, &ops);
else
ret = nand->write_oob(nand, off, &ops);
- } else if (!strcmp(s, ".raw")) {
- /* Raw access */
- mtd_oob_ops_t ops = {
- .datbuf = (u8 *)addr,
- .oobbuf = ((u8 *)addr) + nand->writesize,
- .len = nand->writesize,
- .ooblen = nand->oobsize,
- .mode = MTD_OOB_RAW
- };
-
- rwsize = nand->writesize + nand->oobsize;
-
- if (read)
- ret = nand->read_oob(nand, off, &ops);
- else
- ret = nand->write_oob(nand, off, &ops);
+ } else if (raw) {
+ ret = raw_access(nand, addr, off, pagecount, read);
} else {
printf("Unknown nand command suffix '%s'.\n", s);
return 1;
@@ -726,15 +865,16 @@ usage:
U_BOOT_CMD(
nand, CONFIG_SYS_MAXARGS, 1, do_nand,
"NAND sub-system",
+ "id or ID - print nand ID \n"
"info - show available NAND devices\n"
"nand device [dev] - show or set current device\n"
"nand read - addr off|partition size\n"
"nand write - addr off|partition size\n"
" read/write 'size' bytes starting at offset 'off'\n"
" to/from memory address 'addr', skipping bad blocks.\n"
- "nand read.raw - addr off|partition\n"
- "nand write.raw - addr off|partition\n"
- " Use read.raw/write.raw to avoid ECC and access the page as-is.\n"
+ "nand read.raw - addr off|partition [count]\n"
+ "nand write.raw - addr off|partition [count]\n"
+ " Use read.raw/write.raw to avoid ECC and access the flash as-is.\n"
#ifdef CONFIG_CMD_NAND_TRIMFFS
"nand write.trimffs - addr off|partition size\n"
" write 'size' bytes starting at offset 'off' from memory address\n"
@@ -754,6 +894,7 @@ U_BOOT_CMD(
"nand erase.chip [clean] - erase entire chip'\n"
"nand bad - show bad blocks\n"
"nand dump[.oob] off - dump page\n"
+ "nand speed [-addr -off -test data length]- show read speed and write speed of NAND\n"
"nand scrub [-y] off size | scrub.part partition | scrub.chip\n"
" really clean NAND erasing bad blocks (UNSAFE)\n"
"nand markbad off [...] - mark bad block(s) at offset (UNSAFE)\n"
@@ -936,3 +1077,202 @@ U_BOOT_CMD(nboot, 4, 1, do_nandboot,
"boot from NAND device",
"[partition] | [[[loadAddr] dev] offset]"
);
+
+static char test_buf[4096 + 224];
+static char temp_buf[4096 + 224];
+
+int erase_block(nand_info_t *nand, loff_t off)
+{
+ int ret;
+ nand_erase_options_t opts;
+ struct nand_chip *chip = nand->priv;
+
+ if (chip->phys_erase_shift == 0) {
+ if(mtd_mod_by_eb(off, nand) != 0){
+ printf("not aligned erase size\n");
+ return 1;
+ }
+ } else {
+ if ((off & (nand->erasesize - 1)) != 0 ) {
+ printf("not aligned erase size\n");
+ return 1;
+ }
+ }
+
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = off;
+ opts.length = nand->erasesize;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+ opts.spread = 0;
+
+ ret = nand_erase_opts(nand, &opts);
+ printf("%s\n", ret ? "ERROR" : "OK");
+
+ return ret == 0 ? 0 : 1;
+}
+
+static void dump_flash_buf(nand_info_t *nand, char *new)
+{
+ int i;
+
+ printf("flash data:\n");
+ for (i = 0; i < nand->writesize; i+=8)
+ printf("%04x: %2x %2x %2x %2x %2x %2x %2x %2x\n",i, new[i], new[i+1], new[i+2],
+ new[i+3], new[i+4], new[i+5], new[i+6], new[i+7]);
+
+ printf("flash oob:\n");
+ for (; i < (nand->writesize + nand->oobsize); i+=8)
+ printf("%04x: %2x %2x %2x %2x %2x %2x %2x %2x\n",i, new[i], new[i+1], new[i+2],
+ new[i+3], new[i+4], new[i+5], new[i+6], new[i+7]);
+}
+
+/*
+ * use lcd backlight as trigger of digital analyzer
+ */
+#include <asm/arch/reg_nand.h>
+#include <asm/io.h>
+static void trigger_gpio(int high)
+{
+#define RDA_GPIO_DIR (RDA_GPIO_A_BASE + 0x04)
+#define RDA_GPIO_VAL (RDA_GPIO_A_BASE + 0x0c)
+#define RDA_GPIO_SET (RDA_GPIO_A_BASE + 0x10)
+#define RDA_GPIO_CLR (RDA_GPIO_A_BASE + 0x14)
+
+ __raw_writel(0xffffffff, RDA_GPIO_DIR);
+ if (high) {
+ __raw_writel(0x0f, RDA_GPIO_SET);
+ } else {
+ __raw_writel(0x0f, RDA_GPIO_CLR);
+ }
+}
+int do_nandstress(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[])
+{
+ int i;
+ int dev = nand_curr_device;
+ int ret;
+ nand_info_t *nand;
+ unsigned long long count_h, count_l;
+ loff_t off = 0;
+ char * s;
+ int need_erase = 1;
+
+ if (argc < 2)
+ goto usage;
+
+ off = simple_strtoul(argv[1], NULL, 16);
+ printf("nand stress test offset %llx\n", off);
+ s = argv[2];
+
+ /*
+ DANGROUS!!!!!!!
+ if you dont erase the block and write/read
+ the page, the page maybe damaged for ever.
+ this test used as test the hardware ecc functions:
+ write the page repeatedly until the page error, and test if
+ the handware ecc can detect and correct them;
+ */
+ if (!strcmp(s, "noerase")) {
+ const char *noerase_warning =
+ "!!!!!DANGROUS test!!!!!!\n"
+ "This may damage the flash page for ever ....y/N\n";
+ puts(noerase_warning);
+ if (getc() == 'y') {
+ puts("y");
+ if (getc() == '\r') {
+ printf("\nwill don't erase the block anyway...\n");
+ need_erase = 0;
+ }
+ }
+ }
+
+ printf("nand stress test erase/write/read ....\n");
+
+ count_h = 0;
+ count_l = 0;
+ nand = &nand_info[dev];
+
+ for (i = 0; i < (nand->writesize + nand->oobsize); i++) {
+ test_buf[i] = i+255;
+ }
+
+ trigger_gpio(1);
+ while (1) {
+ int error_count;
+ /* Raw access */
+ mtd_oob_ops_t ops_w= {
+ .datbuf = (u8 *)test_buf,
+ .oobbuf = ((u8 *)test_buf) + nand->writesize,
+ .len = nand->writesize,
+ .ooblen = nand->oobsize,
+ .mode = MTD_OOB_RAW
+ };
+ mtd_oob_ops_t ops_r= {
+ .datbuf = (u8 *)temp_buf,
+ .oobbuf = ((u8 *)temp_buf) + nand->writesize,
+ .len = nand->writesize,
+ .ooblen = nand->oobsize,
+ .mode = MTD_OOB_RAW
+ };
+
+ if (need_erase) {
+ if (erase_block(nand, off)){
+ trigger_gpio(0);
+ printf("oops, erase error\n");
+ goto error;
+ }
+ }
+ ret = nand->write_oob(nand, off, &ops_w);
+ if (ret) {
+ trigger_gpio(0);
+ printf("%s: error at offset %llx, ret %d\n",
+ __func__, (long long)off, ret);
+ goto error;
+ }
+ ret = nand->read_oob(nand, off, &ops_r);
+ if (ret) {
+ printf("%s: error at offset %llx, ret %d\n",
+ __func__, (long long)off, ret);
+ goto error;
+ }
+
+ error_count = 0;
+ //for (i = 0; i < (nand->writesize + nand->oobsize); i++) {
+ for (i = 0; i < (nand->writesize); i++) {
+ if(test_buf[i] != temp_buf[i]) {
+ trigger_gpio(0);
+ printf("oops, read/write is error at %x, source %02x, flash %02x\n",
+ i, test_buf[i], temp_buf[i]);
+ printf("nand interrupt stauts %x\n",__raw_readl(NANDFC_REG_INT_STAT));
+ printf("nand busy flag %x\n",__raw_readl(NANDFC_REG_BUSY_FLAG));
+ error_count ++;
+ }
+ }
+
+ if (error_count) {
+ printf("oops, error num %d, \n",error_count);
+ dump_flash_buf(nand, temp_buf);
+ printf("read nand fifo \n");
+ goto error;
+ }
+ count_l++;
+ if (count_l == 0) {
+ count_h++;
+ }
+ printf("###################NAND testing... the loop is:high %lld, low %lld\n"
+ , count_h, count_l);
+ };
+
+ return 1;
+usage:
+ return CMD_RET_USAGE;
+error:
+ printf("NAND stress test end, the loop is:high %lld, low %lld\n", count_h, count_l);
+ return 1;
+}
+
+U_BOOT_CMD(nandstress, 3, 1, do_nandstress,
+ "nand stress test for one page read/write: nandstress off",
+ "[ off ]\n"
+ " - test nand from page offset 'off'"
+);
diff --git a/common/cmd_net.c b/common/cmd_net.c
index 65f32bceef..a9ade8b927 100644
--- a/common/cmd_net.c
+++ b/common/cmd_net.c
@@ -153,12 +153,16 @@ static void netboot_update_env (void)
ip_to_string (NetOurIP, tmp);
setenv ("ipaddr", tmp);
}
-
+#if !defined(CONFIG_BOOTP_SERVERIP)
+ /*
+ * Only attempt to change serverip if net/bootp.c:BootpCopyNetParams()
+ * could have set it
+ */
if (NetServerIP) {
ip_to_string (NetServerIP, tmp);
setenv ("serverip", tmp);
}
-
+#endif
if (NetOurDNSIP) {
ip_to_string (NetOurDNSIP, tmp);
setenv ("dnsip", tmp);
@@ -424,3 +428,34 @@ U_BOOT_CMD(
);
#endif /* CONFIG_CMD_DNS */
+
+#if defined(CONFIG_CMD_LINK_LOCAL)
+static int do_link_local(cmd_tbl_t *cmdtp, int flag, int argc,
+ char * const argv[])
+{
+ char tmp[22];
+
+ if (NetLoop(LINKLOCAL) < 0)
+ return 1;
+
+ NetOurGatewayIP = 0;
+ ip_to_string(NetOurGatewayIP, tmp);
+ setenv("gatewayip", tmp);
+
+ ip_to_string(NetOurSubnetMask, tmp);
+ setenv("netmask", tmp);
+
+ ip_to_string(NetOurIP, tmp);
+ setenv("ipaddr", tmp);
+ setenv("llipaddr", tmp); /* store this for next time */
+
+ return 0;
+}
+
+U_BOOT_CMD(
+ linklocal, 1, 1, do_link_local,
+ "acquire a network IP address using the link-local protocol",
+ ""
+);
+
+#endif /* CONFIG_CMD_LINK_LOCAL */
diff --git a/common/cmd_nvedit.c b/common/cmd_nvedit.c
index b1494dcb0c..271200266c 100644
--- a/common/cmd_nvedit.c
+++ b/common/cmd_nvedit.c
@@ -66,9 +66,10 @@ DECLARE_GLOBAL_DATA_PTR;
!defined(CONFIG_ENV_IS_IN_NVRAM) && \
!defined(CONFIG_ENV_IS_IN_ONENAND) && \
!defined(CONFIG_ENV_IS_IN_SPI_FLASH) && \
+ !defined(CONFIG_ENV_IS_IN_REMOTE) && \
!defined(CONFIG_ENV_IS_NOWHERE)
# error Define one of CONFIG_ENV_IS_IN_{EEPROM|FLASH|DATAFLASH|ONENAND|\
-SPI_FLASH|MG_DISK|NVRAM|MMC|FAT} or CONFIG_ENV_IS_NOWHERE
+SPI_FLASH|MG_DISK|NVRAM|MMC|FAT|REMOTE} or CONFIG_ENV_IS_NOWHERE
#endif
#define XMK_STR(x) #x
@@ -203,7 +204,6 @@ static int do_env_grep(cmd_tbl_t *cmdtp, int flag,
*/
int _do_env_set(int flag, int argc, char * const argv[])
{
- bd_t *bd = gd->bd;
int i, len;
int console = -1;
char *name, *value, *s;
@@ -342,21 +342,7 @@ int _do_env_set(int flag, int argc, char * const argv[])
* Some variables should be updated when the corresponding
* entry in the environment is changed
*/
- if (strcmp(name, "ipaddr") == 0) {
- char *s = argv[2]; /* always use only one arg */
- char *e;
- unsigned long addr;
- bd->bi_ip_addr = 0;
- for (addr = 0, i = 0; i < 4; ++i) {
- ulong val = s ? simple_strtoul(s, &e, 10) : 0;
- addr <<= 8;
- addr |= val & 0xFF;
- if (s)
- s = *e ? e + 1 : e;
- }
- bd->bi_ip_addr = htonl(addr);
- return 0;
- } else if (strcmp(argv[1], "loadaddr") == 0) {
+ if (strcmp(argv[1], "loadaddr") == 0) {
load_addr = simple_strtoul(argv[2], NULL, 16);
return 0;
}
diff --git a/common/cmd_onenand.c b/common/cmd_onenand.c
index 0f2e208717..a0d25e5521 100644
--- a/common/cmd_onenand.c
+++ b/common/cmd_onenand.c
@@ -13,7 +13,7 @@
#include <command.h>
#include <malloc.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
diff --git a/common/cmd_sata.c b/common/cmd_sata.c
index 7b1703fe41..3f98235a38 100644
--- a/common/cmd_sata.c
+++ b/common/cmd_sata.c
@@ -48,9 +48,12 @@ int __sata_initialize(void)
sata_dev_desc[i].block_write = sata_write;
rc = init_sata(i);
- rc = scan_sata(i);
- if ((sata_dev_desc[i].lba > 0) && (sata_dev_desc[i].blksz > 0))
- init_part(&sata_dev_desc[i]);
+ if (!rc) {
+ rc = scan_sata(i);
+ if (!rc && (sata_dev_desc[i].lba > 0) &&
+ (sata_dev_desc[i].blksz > 0))
+ init_part(&sata_dev_desc[i]);
+ }
}
sata_curr_device = 0;
return rc;
diff --git a/common/cmd_test.c b/common/cmd_test.c
index fcb5ef2f71..cd9a1a2836 100644
--- a/common/cmd_test.c
+++ b/common/cmd_test.c
@@ -171,3 +171,220 @@ U_BOOT_CMD(
"do nothing, successfully",
NULL
);
+
+#ifdef CONFIG_VPU_TEST
+#include <asm/arch/hw_test.h>
+int do_vpu_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+ if(argc > 1) {
+ times = simple_strtoul(argv[1], NULL, 10);
+ }
+ vpu_sta_test(times);
+ return 0;
+}
+U_BOOT_CMD(
+ vpu_test, CONFIG_SYS_MAXARGS, 1, do_vpu_test,
+ "vpu test",
+ NULL
+);
+
+#ifdef CONFIG_VPU_MD5_TEST
+int do_vpu_md5_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+ if(argc > 1) {
+ times = simple_strtoul(argv[1], NULL, 10);
+ }
+ vpu_md5_test(times);
+ return 0;
+}
+U_BOOT_CMD(
+ vpu_md5_test, CONFIG_SYS_MAXARGS, 1, do_vpu_md5_test,
+ "vpu md5 test",
+ NULL
+);
+#endif //CONFIG_VPU_MD5_TEST
+#endif //CONFIG_VPU_TEST
+
+#ifdef CONFIG_CPU_TEST
+#include <asm/arch/hw_test.h>
+int do_cpu_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+ if(argc > 1) {
+ times = simple_strtoul(argv[1], NULL, 10);
+ }
+ cpu_pll_test(times);
+ return 0;
+}
+U_BOOT_CMD(
+ cpu_test, CONFIG_SYS_MAXARGS, 1, do_cpu_test,
+ "cpu test",
+ NULL
+);
+#endif //CONFIG_VPU_TEST
+
+#ifdef CONFIG_DDR_TEST
+#include <asm/arch/hw_test.h>
+int do_ddr_mem_copy_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+ unsigned int src_addr = 0x80000000,des_addr = 0x83000000,n = 0x10;
+
+ if(argc > 1) {
+ times = simple_strtoul(argv[1], NULL, 10);
+ }
+ if(argc > 2) {
+ src_addr = simple_strtoul(argv[2],NULL,16);
+ }
+ if(argc > 3) {
+ des_addr = simple_strtoul(argv[3],NULL,16);
+ }
+ if(argc > 4) {
+ n = simple_strtoul(argv[4],NULL,16);
+ }
+ ddr_mem_copy_test(times,src_addr,des_addr,n);
+ return 0;
+}
+
+U_BOOT_CMD(
+ ddr_mem_cp, 5, 1, do_ddr_mem_copy_test,
+ "ddr memory copy test",
+ NULL
+);
+#endif //CONFIG_DDR_TEST
+
+#ifdef CONFIG_TIMER_TEST
+#include <asm/arch/hw_test.h>
+int do_timer_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+ unsigned int timer_id = 0;
+
+ if(argc > 1) {
+ timer_id = simple_strtoul(argv[1], NULL, 10);
+ }
+ if(argc > 2) {
+ times = simple_strtoul(argv[2],NULL,16);
+ }
+ tim_test(timer_id,times);
+ return 0;
+}
+
+U_BOOT_CMD(
+ timer_test, 5, 1, do_timer_test,
+ "timer_test timer_id(0~2) times",
+ NULL
+);
+#endif /* CONFIG_TIMER_TEST */
+
+#ifdef CONFIG_UART_TEST
+#include <asm/arch/hw_test.h>
+int do_uart_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+ unsigned int uart_id = 2;// uart3 as default test port
+
+ if(argc > 1) {
+ uart_id = simple_strtoul(argv[1], NULL, 10);
+ }
+ if(argc > 2) {
+ times = simple_strtoul(argv[2],NULL,16);
+ }
+ uart_test(uart_id,times);
+ return 0;
+}
+
+U_BOOT_CMD(
+ uart_test, 5, 1, do_uart_test,
+ "uart_test uart_id(0~2) times",
+ NULL
+);
+#endif /* CONFIG_UART_TEST */
+
+#ifdef CONFIG_GIC_TEST
+#include <asm/arch/hw_test.h>
+int do_gic_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+
+ if(argc > 1) {
+ times = simple_strtoul(argv[1], NULL, 10);
+ }
+ gic_test(times);
+ return 0;
+}
+
+U_BOOT_CMD(
+ gic_test, 5, 1, do_gic_test,
+ "gic_test times",
+ NULL
+);
+#endif /* CONFIG_GIC_TEST */
+
+#ifdef CONFIG_CACHE_TEST
+#include <asm/arch/hw_test.h>
+int do_cache_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+
+ if(argc > 1) {
+ times = simple_strtoul(argv[1], NULL, 10);
+ }
+ cpu_cache_test(times);
+ return 0;
+}
+
+U_BOOT_CMD(
+ cache_test, 5, 1, do_cache_test,
+ "cpu L1/L2 D-cache I-cache test",
+ NULL
+);
+#endif /* CONFIG_CACHE_TEST */
+
+#ifdef CONFIG_MIPI_LOOP_TEST
+#include<asm/arch/hw_test.h>
+int do_mipi_loop_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+
+ if (argc > 1)
+ times = simple_strtoull(argv[1], NULL, 10);
+ if (times < 1) {
+ printf("Invalid parameter\n");
+ return 1;
+ }
+ test_dsi_csi_loop(times);
+
+ return 0;
+}
+
+U_BOOT_CMD(
+ mipi_loop, 5, 5, do_mipi_loop_test,
+ "mipi loop test",
+ NULL
+);
+#endif /* CONFIG_MIPI_LOOP_TEST */
+
+#ifdef CONFIG_I2C_TEST
+#include<asm/arch/hw_test.h>
+int do_i2c_test(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ int times = 1;
+ int id = 2; /* I2C id number:0,1,2,I2C 2 is default device */
+
+ if(argc > 1)
+ times = simple_strtoull(argv[1], NULL, 10);
+ if(argc > 2)
+ id = simple_strtoul(argv[2],NULL,10);
+ test_i2c(id,times);
+ return 0;
+}
+
+U_BOOT_CMD(
+ i2c_test, 5, 5, do_i2c_test,
+ "i2c test",
+ NULL
+);
+#endif /* CONFIG_I2C_TET */
diff --git a/common/cmd_ubi.c b/common/cmd_ubi.c
index 35b1d31f9c..aff6d69de5 100644
--- a/common/cmd_ubi.c
+++ b/common/cmd_ubi.c
@@ -149,7 +149,10 @@ static int verify_mkvol_req(const struct ubi_device *ubi,
if (req->alignment > ubi->leb_size)
goto bad;
- n = req->alignment % ubi->min_io_size;
+ if (is_power_of_2(ubi->min_io_size))
+ n = req->alignment & (ubi->min_io_size -1);
+ else
+ n = req->alignment % ubi->min_io_size;
if (req->alignment != 1 && n)
goto bad;
@@ -164,7 +167,7 @@ bad:
return err;
}
-static int ubi_create_vol(char *volume, int size, int dynamic)
+static int ubi_create_vol(const char *volume, int64_t size, int dynamic)
{
struct ubi_mkvol_req req;
int err;
@@ -188,13 +191,13 @@ static int ubi_create_vol(char *volume, int size, int dynamic)
printf("verify_mkvol_req failed %d\n", err);
return err;
}
- printf("Creating %s volume %s of size %d\n",
+ printf("Creating %s volume %s of size 0x%llx\n",
dynamic ? "dynamic" : "static", volume, size);
/* Call real ubi create volume */
return ubi_create_volume(ubi, &req);
}
-static struct ubi_volume *ubi_find_volume(char *volume)
+static struct ubi_volume *ubi_find_volume(const char *volume)
{
struct ubi_volume *vol = NULL;
int i;
@@ -209,7 +212,7 @@ static struct ubi_volume *ubi_find_volume(char *volume)
return NULL;
}
-static int ubi_remove_vol(char *volume)
+static int ubi_remove_vol(const char *volume)
{
int err, reserved_pebs, i;
struct ubi_volume *vol;
@@ -263,7 +266,7 @@ out_err:
return err;
}
-static int ubi_volume_write(char *volume, void *buf, size_t size)
+static int ubi_volume_write(const char *volume, void *buf, size_t size)
{
int err = 1;
int rsvd_bytes = 0;
@@ -313,13 +316,12 @@ static int ubi_volume_write(char *volume, void *buf, size_t size)
return 0;
}
-static int ubi_volume_read(char *volume, char *buf, size_t size)
+static int ubi_volume_read(const char *volume, loff_t offp, char *buf, size_t size)
{
int err, lnum, off, len, tbuf_size;
void *tbuf;
unsigned long long tmp;
struct ubi_volume *vol;
- loff_t offp = 0;
vol = ubi_find_volume(volume);
if (vol == NULL)
@@ -349,8 +351,12 @@ static int ubi_volume_read(char *volume, char *buf, size_t size)
size = vol->used_bytes - offp;
tbuf_size = vol->usable_leb_size;
- if (size < tbuf_size)
- tbuf_size = ALIGN(size, ubi->min_io_size);
+ if (size < tbuf_size) {
+ if (is_power_of_2(ubi->min_io_size))
+ tbuf_size = ALIGN(size, ubi->min_io_size);
+ else
+ tbuf_size = roundup(size, ubi->min_io_size);
+ }
tbuf = malloc(tbuf_size);
if (!tbuf) {
printf("NO MEM\n");
@@ -390,7 +396,7 @@ static int ubi_volume_read(char *volume, char *buf, size_t size)
return err;
}
-static int ubi_dev_scan(struct mtd_info *info, char *ubidev,
+static int ubi_dev_scan(struct mtd_info *info, const char *ubidev,
const char *vid_header_offset)
{
struct mtd_device *dev;
@@ -431,6 +437,272 @@ static int ubi_dev_scan(struct mtd_info *info, char *ubidev,
return 0;
}
+#ifdef MTDPARTS_UBI_DEF
+int ubi_part_scan(const char *part_name)
+{
+ struct mtd_info *info;
+ struct mtd_device *dev;
+ struct part_info *part;
+ nand_erase_options_t opts;
+ char mtd_dev[20];
+ u8 pnum;
+ int ret = 0;
+
+ if(ubi_initialized){
+ ubi = ubi_devices[0];
+ return 0;
+ }
+ /*
+ * Search the mtd device number where this partition
+ * is located
+ */
+ if (find_dev_and_part(part_name, &dev, &pnum, &part)) {
+ printf("Partition %s not found!\n", part_name);
+ return -1;
+ }
+ sprintf(mtd_dev, "%s%d", MTD_DEV_TYPE(dev->id->type), dev->id->num);
+ info = get_mtd_device_nm(mtd_dev);
+ if (IS_ERR(info)) {
+ printf("Partition %s not found on device %s!\n", part_name, mtd_dev);
+ return 1;
+ }
+ printf("found part '%s' offset: 0x%llx length: 0x%llx id: %d\n",
+ part->name, part->offset, part->size, dev->id->num);
+
+ ret = ubi_dev_scan(info, part_name, NULL);
+ /* if fail, erase the part, try again */
+ if(ret) {
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = (loff_t) part->offset;
+ opts.length = (loff_t) part->size;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+
+ ret = nand_erase_opts(info, &opts);
+ if(ret)
+ return ret;
+ ret = ubi_dev_scan(info, part_name, NULL);
+ if(ret)
+ return ret;
+ }
+
+ ubi = ubi_devices[0];
+ return ret;
+}
+
+struct ubi_vol_info {
+ char name[20];
+ size_t size;
+};
+static int ubi_parse_ubi_str(const char *ubi_default_str,
+ struct ubi_vol_info **ubivol_info, int *ubivol_count)
+{
+ char *def_str = malloc(strlen(ubi_default_str)+1);
+ char *p = def_str;
+ char *q;
+ int i = 0;
+ struct ubi_vol_info *info;
+
+ if(!def_str)
+ return -1;
+ strcpy(def_str, ubi_default_str);
+
+ while(1) {
+ q = strstr(p, "M(");
+ if(!q) {
+ q = strstr(p, "-(");
+ if(!q)
+ break;
+ }
+ i++;
+ p = q + 2;
+ }
+
+ info = (struct ubi_vol_info *)malloc(sizeof(struct ubi_vol_info) * i);
+ *ubivol_info = info;
+ *ubivol_count = i;
+
+ p = def_str;
+ i = 0;
+ while(1) {
+ /* size */
+ q = strstr(p, "M(");
+ if(q) {
+ *q = '\0';
+ info[i].size = simple_strtoul(p, NULL, 10) * 1024 * 1024;
+ p = q + 2;
+ } else {
+ q = strstr(p, "-(");
+ if(q) {
+ info[i].size = 0;
+ p = q + 2;
+ } else {
+ break;
+ }
+ }
+
+ /* name */
+ q = strstr(p, ")");
+ if(q)
+ *q = '\0';
+ strcpy(info[i].name, p);
+ if(!q)
+ break;
+ p = q + 1;
+ if(*p == ',')
+ p++;
+
+ i++;
+ }
+ free(def_str);
+ return 0;
+}
+
+int ubi_check_default_vols(const char *ubi_default_str)
+{
+ int ret = 0;
+ struct ubi_vol_info *info = NULL;
+ int count = 0, i;
+ int checked = 1;
+ struct ubi_volume *vol;
+
+ if(ubi_parse_ubi_str(ubi_default_str, &info, &count))
+ return -1;
+ if(count <= 0 || !info)
+ return -1;
+
+ for(i = 0; i < count; i++) {
+ vol = ubi_find_volume(info[i].name);
+ if(vol == NULL) {
+ checked = 0;
+ break;
+ }
+ }
+
+ /* format */
+ if(!checked) {
+ /* remove all volumes */
+ for(i = 0; i < (ubi->vtbl_slots + 1); i++) {
+ if(!ubi->volumes[i])
+ continue;
+ ret = ubi_remove_vol(ubi->volumes[i]->name);
+ if(ret) break;
+ }
+ /* create new volumes */
+ for(i = 0; i < count; i++) {
+ /* Use maximum available size */
+ if (!info[i].size) {
+ info[i].size = ubi->avail_pebs * ubi->leb_size;
+ printf("No size specified -> Using max size (%u)\n", info[i].size);
+ }
+ ret = ubi_create_vol(info[i].name, info[i].size, 1);
+ if(ret) break;
+ }
+ }
+
+ free(info);
+ return ret;
+}
+
+int ubi_erase_vol(const char *vol_name)
+{
+ struct ubi_volume *vol;
+
+ vol = ubi_find_volume(vol_name);
+ if(vol == NULL) { /* not need to erase */
+ return 0;
+ }
+ return ubi_volume_write(vol_name, "", 0);
+}
+
+int ubi_read_vol(const char *vol_name, loff_t offp, void *buf, size_t size)
+{
+ return ubi_volume_read(vol_name, offp, buf, size);
+}
+
+int ubi_prepare_write_vol(const char *volume, size_t size)
+{
+ int err = 1;
+ int rsvd_bytes = 0;
+ struct ubi_volume *vol;
+
+ vol = ubi_find_volume(volume);
+ if (vol == NULL)
+ return -ENODEV;
+
+ rsvd_bytes = vol->reserved_pebs * (ubi->leb_size - vol->data_pad);
+ if (size < 0 || size > rsvd_bytes) {
+ printf("size > volume size! Aborting!\n");
+ return -EINVAL;
+ }
+
+ err = ubi_start_update(ubi, vol, size);
+ if (err < 0) {
+ printf("Cannot start volume update\n");
+ return err;
+ }
+
+ printf("prepare to write %d bytes to volume %s\n", size, volume);
+ return 0;
+}
+
+int ubi_do_write_vol(const char *volume, void *buf, size_t size)
+{
+ int err = 1;
+ struct ubi_volume *vol;
+
+ vol = ubi_find_volume(volume);
+ if (vol == NULL)
+ return -ENODEV;
+
+ err = ubi_more_update_data(ubi, vol, buf, size);
+ if (err < 0) {
+ printf("Couldnt or partially wrote data\n");
+ return err;
+ }
+
+ printf("%d bytes written to volume %s\n", size, volume);
+ return 0;
+}
+
+int ubi_finish_write_vol(const char *volume)
+{
+ int err = 1;
+ struct ubi_volume *vol;
+
+ vol = ubi_find_volume(volume);
+ if (vol == NULL)
+ return -ENODEV;
+
+ err = ubi_check_volume(ubi, vol->vol_id);
+ if (err < 0)
+ return err;
+
+ if (err) {
+ ubi_warn("volume %d on UBI device %d is corrupted",
+ vol->vol_id, ubi->ubi_num);
+ vol->corrupted = 1;
+ }
+
+ vol->checked = 1;
+ ubi_gluebi_updated(vol);
+
+ printf("finish to write volume %s\n", volume);
+ return 0;
+}
+
+int ubi_update_vol(const char *vol_name, void *buf, size_t size)
+{
+ return ubi_volume_write(vol_name, buf, size);
+}
+
+size_t ubi_sizeof_vol(const char *vol_name)
+{
+ struct ubi_volume *vol = ubi_find_volume(vol_name);
+ return vol->used_bytes;
+}
+#endif /* MTDPARTS_UBI_DEF */
+
static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
{
size_t size = 0;
@@ -598,7 +870,7 @@ static int do_ubi(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
}
if (argc == 3)
- return ubi_volume_read(argv[3], (char *)addr, size);
+ return ubi_volume_read(argv[3], 0, (char *)addr, size);
}
printf("Please see usage\n");
diff --git a/common/cmd_usb.c b/common/cmd_usb.c
index 9eba2713ea..a8e3ae5b67 100644
--- a/common/cmd_usb.c
+++ b/common/cmd_usb.c
@@ -150,7 +150,8 @@ void usb_display_class_sub(unsigned char dclass, unsigned char subclass,
void usb_display_string(struct usb_device *dev, int index)
{
- char buffer[256];
+ ALLOC_CACHE_ALIGN_BUFFER(char, buffer, 256);
+
if (index != 0) {
if (usb_string(dev, index, &buffer[0], 256) > 0)
printf("String: \"%s\"", buffer);
diff --git a/common/cmd_version.c b/common/cmd_version.c
index e4b2ac1efc..bdb476df94 100644
--- a/common/cmd_version.c
+++ b/common/cmd_version.c
@@ -25,6 +25,8 @@
#include <command.h>
#include <version.h>
#include <linux/compiler.h>
+#include <timestamp.h>
+#include "generated/version_autogenerated.h"
const char __weak version_string[] = U_BOOT_VERSION_STRING;
diff --git a/common/cmd_yaffs2.c b/common/cmd_yaffs2.c
index 0e22d90e7a..d43a9d444c 100644
--- a/common/cmd_yaffs2.c
+++ b/common/cmd_yaffs2.c
@@ -1,18 +1,37 @@
+/* Yaffs commands.
+ * Modified by Charles Manning by adding ydevconfig command.
+ *
+ * Use ydevconfig to configure a mountpoint before use.
+ * For example:
+ * # Configure mountpt xxx using nand device 0 using blocks 100-500
+ * ydevconfig xxx 0 100 500
+ * # Mount it
+ * ymount xxx
+ * # yls, yrdm etc
+ * yls -l xxx
+ * yrdm xxx/boot-image 82000000
+ * ...
+ */
+
#include <common.h>
#include <config.h>
#include <command.h>
-#ifdef YAFFS2_DEBUG
-#define PRINTF(fmt,args...) printf (fmt ,##args)
+#ifdef YAFFS2_DEBUG
+#define PRINTF(fmt, args...) printf(fmt, ##args)
#else
-#define PRINTF(fmt,args...)
+#define PRINTF(fmt, args...) do { } while (0)
#endif
+extern void cmd_yaffs_dev_ls(void);
+extern void cmd_yaffs_tracemask(unsigned set, unsigned mask);
+extern void cmd_yaffs_devconfig(char *mp, int flash_dev,
+ int start_block, int end_block);
extern void cmd_yaffs_mount(char *mp);
extern void cmd_yaffs_umount(char *mp);
extern void cmd_yaffs_read_file(char *fn);
-extern void cmd_yaffs_write_file(char *fn,char bval,int sizeOfFile);
+extern void cmd_yaffs_write_file(char *fn, char bval, int sizeOfFile);
extern void cmd_yaffs_ls(const char *mountpt, int longlist);
extern void cmd_yaffs_mwrite_file(char *fn, char *addr, int size);
extern void cmd_yaffs_mread_file(char *fn, char *addr);
@@ -21,193 +40,287 @@ extern void cmd_yaffs_rmdir(const char *dir);
extern void cmd_yaffs_rm(const char *path);
extern void cmd_yaffs_mv(const char *oldPath, const char *newPath);
-extern int yaffs_DumpDevStruct(const char *path);
+extern int yaffs_dump_dev(const char *path);
+
+/* ytrace - show/set yaffs trace mask */
+int do_ytrace(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+ if (argc > 1)
+ cmd_yaffs_tracemask(1, simple_strtol(argv[1], NULL, 16));
+ else
+ cmd_yaffs_tracemask(0, 0);
+ return 0;
+}
-int do_ymount (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+/* ydevls - lists yaffs mount points. */
+int do_ydevls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *mtpoint = argv[1];
- cmd_yaffs_mount(mtpoint);
+ cmd_yaffs_dev_ls();
- return(0);
+ return 0;
}
-int do_yumount (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+/* ydevconfig mount_pt mtd_dev_num start_block end_block */
+int do_ydevconfig(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *mtpoint = argv[1];
- cmd_yaffs_umount(mtpoint);
+ char *mtpoint;
+ int mtd_dev;
+ int start_block;
+ int end_block;
+
+ if (argc != 5) {
+ printf
+ ("Bad arguments: ydevconfig mount_pt mtd_dev start_block end_block\n");
+ return -1;
+ }
+
+ mtpoint = argv[1];
+ mtd_dev = simple_strtol(argv[2], NULL, 16);
+ start_block = simple_strtol(argv[3], NULL, 16);
+ end_block = simple_strtol(argv[4], NULL, 16);
- return(0);
+ cmd_yaffs_devconfig(mtpoint, mtd_dev, start_block, end_block);
+
+ return 0;
}
-int do_yls (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_ymount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *dirname = argv[argc-1];
+ char *mtpoint;
+
+ if (argc != 2) {
+ printf("Bad arguments: ymount mount_pt\n");
+ return -1;
+ }
+
+ mtpoint = argv[1];
+ printf("Mounting yaffs2 mount point %s\n", mtpoint);
- cmd_yaffs_ls(dirname, (argc>2)?1:0);
+ cmd_yaffs_mount(mtpoint);
- return(0);
+ return 0;
}
-int do_yrd (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_yumount(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *filename = argv[1];
- printf ("Reading file %s ", filename);
+ char *mtpoint;
- cmd_yaffs_read_file(filename);
+ if (argc != 2) {
+ printf("Bad arguments: yumount mount_pt\n");
+ return -1;
+ }
- printf ("done\n");
- return(0);
+ mtpoint = argv[1];
+ printf("Unmounting yaffs2 mount point %s\n", mtpoint);
+ cmd_yaffs_umount(mtpoint);
+
+ return 0;
}
-int do_ywr (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_yls(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *filename = argv[1];
- ulong value = simple_strtoul(argv[2], NULL, 16);
- ulong numValues = simple_strtoul(argv[3], NULL, 16);
+ char *dirname;
+
+ if (argc < 2 || argc > 3 || (argc == 3 && strcmp(argv[1], "-l"))) {
+ printf("Bad arguments: yls [-l] dir\n");
+ return -1;
+ }
- printf ("Writing value (%lx) %lx times to %s... ", value, numValues, filename);
+ dirname = argv[argc - 1];
- cmd_yaffs_write_file(filename,value,numValues);
+ cmd_yaffs_ls(dirname, (argc > 2) ? 1 : 0);
- printf ("done\n");
- return(0);
+ return 0;
}
-int do_yrdm (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_yrd(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *filename = argv[1];
- ulong addr = simple_strtoul(argv[2], NULL, 16);
+ char *filename;
+
+ if (argc != 2) {
+ printf("Bad arguments: yrd file_name\n");
+ return -1;
+ }
- cmd_yaffs_mread_file(filename, (char *)addr);
+ filename = argv[1];
- return(0);
+ printf("Reading file %s ", filename);
+
+ cmd_yaffs_read_file(filename);
+
+ printf("done\n");
+ return 0;
}
-int do_ywrm (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_ywr(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *filename = argv[1];
- ulong addr = simple_strtoul(argv[2], NULL, 16);
- ulong size = simple_strtoul(argv[3], NULL, 16);
+ char *filename;
+ ulong value;
+ ulong numValues;
+
+ if (argc != 4) {
+ printf("Bad arguments: ywr file_name value n_values\n");
+ return -1;
+ }
- cmd_yaffs_mwrite_file(filename, (char *)addr, size);
+ filename = argv[1];
+ value = simple_strtoul(argv[2], NULL, 16);
+ numValues = simple_strtoul(argv[3], NULL, 16);
- return(0);
+ printf("Writing value (%lx) %lx times to %s... ", value, numValues,
+ filename);
+
+ cmd_yaffs_write_file(filename, value, numValues);
+
+ printf("done\n");
+ return 0;
}
-int do_ymkdir (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_yrdm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *dirname = argv[1];
+ char *filename;
+ ulong addr;
+
+ if (argc != 3) {
+ printf("Bad arguments: yrdm file_name addr\n");
+ return -1;
+ }
- cmd_yaffs_mkdir(dirname);
+ filename = argv[1];
+ addr = simple_strtoul(argv[2], NULL, 16);
- return(0);
+ cmd_yaffs_mread_file(filename, (char *)addr);
+
+ return 0;
}
-int do_yrmdir (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_ywrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *dirname = argv[1];
+ char *filename;
+ ulong addr;
+ ulong size;
+
+ if (argc != 4) {
+ printf("Bad arguments: ywrm file_name addr size\n");
+ return -1;
+ }
+
+ filename = argv[1];
+ addr = simple_strtoul(argv[2], NULL, 16);
+ size = simple_strtoul(argv[3], NULL, 16);
- cmd_yaffs_rmdir(dirname);
+ cmd_yaffs_mwrite_file(filename, (char *)addr, size);
- return(0);
+ return 0;
}
-int do_yrm (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_ymkdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *path = argv[1];
+ char *dirname;
- cmd_yaffs_rm(path);
+ if (argc != 2) {
+ printf("Bad arguments: ymkdir dir_name\n");
+ return -1;
+ }
- return(0);
+ dirname = argv[1];
+ cmd_yaffs_mkdir(dirname);
+
+ return 0;
}
-int do_ymv (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_yrmdir(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *oldPath = argv[1];
- char *newPath = argv[2];
+ char *dirname;
+
+ if (argc != 2) {
+ printf("Bad arguments: yrmdir dir_name\n");
+ return -1;
+ }
- cmd_yaffs_mv(newPath, oldPath);
+ dirname = argv[1];
+ cmd_yaffs_rmdir(dirname);
- return(0);
+ return 0;
}
-int do_ydump (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+int do_yrm(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
{
- char *dirname = argv[1];
- if (yaffs_DumpDevStruct(dirname) != 0)
- printf("yaffs_DumpDevStruct returning error when dumping path: , %s\n", dirname);
- return 0;
+ char *name;
+
+ if (argc != 2) {
+ printf("Bad arguments: yrm name\n");
+ return -1;
+ }
+
+ name = argv[1];
+
+ cmd_yaffs_rm(name);
+
+ return 0;
+}
+
+int do_ymv(cmd_tbl_t *cmdtp, int flag, int argc, char *const argv[])
+{
+ char *oldPath;
+ char *newPath;
+
+ if (argc != 3) {
+ printf("Bad arguments: ymv old_path new_path\n");
+ return -1;
+ }
+
+ oldPath = argv[1];
+ newPath = argv[2];
+
+ cmd_yaffs_mv(newPath, oldPath);
+
+ return 0;
}
-U_BOOT_CMD(
- ymount, 3, 0, do_ymount,
- "mount yaffs",
- ""
-);
-
-U_BOOT_CMD(
- yumount, 3, 0, do_yumount,
- "unmount yaffs",
- ""
-);
-
-U_BOOT_CMD(
- yls, 4, 0, do_yls,
- "yaffs ls",
- "[-l] name"
-);
-
-U_BOOT_CMD(
- yrd, 2, 0, do_yrd,
- "read file from yaffs",
- "filename"
-);
-
-U_BOOT_CMD(
- ywr, 4, 0, do_ywr,
- "write file to yaffs",
- "filename value num_vlues"
-);
-
-U_BOOT_CMD(
- yrdm, 3, 0, do_yrdm,
- "read file to memory from yaffs",
- "filename offset"
-);
-
-U_BOOT_CMD(
- ywrm, 4, 0, do_ywrm,
- "write file from memory to yaffs",
- "filename offset size"
-);
-
-U_BOOT_CMD(
- ymkdir, 2, 0, do_ymkdir,
- "YAFFS mkdir",
- "dirname"
-);
-
-U_BOOT_CMD(
- yrmdir, 2, 0, do_yrmdir,
- "YAFFS rmdir",
- "dirname"
-);
-
-U_BOOT_CMD(
- yrm, 2, 0, do_yrm,
- "YAFFS rm",
- "path"
-);
-
-U_BOOT_CMD(
- ymv, 4, 0, do_ymv,
- "YAFFS mv",
- "oldPath newPath"
-);
-
-U_BOOT_CMD(
- ydump, 2, 0, do_ydump,
- "YAFFS device struct",
- "dirname"
-);
+U_BOOT_CMD(ytrace, 2, 0, do_ytrace,
+ "show/set yaffs trace mask",
+ "ytrace [new_mask] show/set yaffs trace mask");
+
+U_BOOT_CMD(ydevls, 1, 0, do_ydevls,
+ "list yaffs mount points", "list yaffs mount points");
+
+U_BOOT_CMD(ydevconfig, 5, 0, do_ydevconfig,
+ "configure yaffs mount point",
+ "ydevconfig mtpoint mtd_id start_block end_block configures a yaffs2 mount point");
+
+U_BOOT_CMD(ymount, 2, 0, do_ymount,
+ "mount yaffs", "ymount mtpoint mounts a yaffs2 mount point");
+
+U_BOOT_CMD(yumount, 2, 0, do_yumount,
+ "unmount yaffs", "yunmount mtpoint unmounts a yaffs2 mount point");
+
+U_BOOT_CMD(yls, 3, 0, do_yls, "yaffs ls", "yls [-l] dirname");
+
+U_BOOT_CMD(yrd, 2, 0, do_yrd,
+ "read file from yaffs", "yrd path read file from yaffs");
+
+U_BOOT_CMD(ywr, 4, 0, do_ywr,
+ "write file to yaffs",
+ "ywr filename value num_vlues write values to yaffs file");
+
+U_BOOT_CMD(yrdm, 3, 0, do_yrdm,
+ "read file to memory from yaffs",
+ "yrdm filename offset reads yaffs file into memory");
+
+U_BOOT_CMD(ywrm, 4, 0, do_ywrm,
+ "write file from memory to yaffs",
+ "ywrm filename offset size writes memory to yaffs file");
+
+U_BOOT_CMD(ymkdir, 2, 0, do_ymkdir,
+ "YAFFS mkdir", "ymkdir dir create a yaffs directory");
+
+U_BOOT_CMD(yrmdir, 2, 0, do_yrmdir,
+ "YAFFS rmdir", "yrmdir dirname removes a yaffs directory");
+
+U_BOOT_CMD(yrm, 2, 0, do_yrm, "YAFFS rm", "yrm path removes a yaffs file");
+
+U_BOOT_CMD(ymv, 4, 0, do_ymv,
+ "YAFFS mv",
+ "ymv old_path new_path moves/rename files within a yaffs mount point");
diff --git a/common/env_onenand.c b/common/env_onenand.c
index 652665a189..7197ab6585 100644
--- a/common/env_onenand.c
+++ b/common/env_onenand.c
@@ -33,7 +33,7 @@
#include <errno.h>
#include <onenand_uboot.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
diff --git a/common/env_remote.c b/common/env_remote.c
new file mode 100644
index 0000000000..3bf0f957b3
--- /dev/null
+++ b/common/env_remote.c
@@ -0,0 +1,79 @@
+/*
+ * (C) Copyright 2011-2012 Freescale Semiconductor, Inc.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/* #define DEBUG */
+
+#include <common.h>
+#include <command.h>
+#include <environment.h>
+#include <linux/stddef.h>
+
+char *env_name_spec = "Remote";
+
+#ifdef ENV_IS_EMBEDDED
+env_t *env_ptr = &environment;
+#else /* ! ENV_IS_EMBEDDED */
+env_t *env_ptr = (env_t *)CONFIG_ENV_ADDR;
+#endif /* ENV_IS_EMBEDDED */
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#if !defined(CONFIG_ENV_OFFSET)
+#define CONFIG_ENV_OFFSET 0
+#endif
+
+uchar env_get_char_spec(int index)
+{
+ return *((uchar *)(gd->env_addr + index));
+}
+
+int env_init(void)
+{
+ if (crc32(0, env_ptr->data, ENV_SIZE) == env_ptr->crc) {
+ gd->env_addr = (ulong)&(env_ptr->data);
+ gd->env_valid = 1;
+ return 0;
+ }
+
+ gd->env_addr = (ulong)default_environment;
+ gd->env_valid = 0;
+ return 0;
+}
+
+#ifdef CONFIG_CMD_SAVEENV
+int saveenv(void)
+{
+#ifdef CONFIG_SRIOBOOT_SLAVE
+ printf("Can not support the 'saveenv' when boot from SRIO!\n");
+ return 1;
+#else
+ return 0;
+#endif
+}
+#endif /* CONFIG_CMD_SAVEENV */
+
+void env_relocate_spec(void)
+{
+#ifndef ENV_IS_EMBEDDED
+ env_import((char *)env_ptr, 1);
+#endif
+}
diff --git a/common/hush.c b/common/hush.c
index 672ab9e157..888c4a1a32 100644
--- a/common/hush.c
+++ b/common/hush.c
@@ -1042,7 +1042,7 @@ static void get_user_input(struct in_str *i)
else {
if (console_buffer[0] != '\n') {
strcpy(the_command,console_buffer);
- flag_repeat = 1;
+ /* flag_repeat = 1; */
}
else {
do_repeat = 1;
diff --git a/common/image.c b/common/image.c
index 342b315918..ba6f010ac6 100644
--- a/common/image.c
+++ b/common/image.c
@@ -78,12 +78,13 @@ static const table_entry_t uimage_arch[] = {
{ IH_ARCH_INVALID, NULL, "Invalid ARCH", },
{ IH_ARCH_ALPHA, "alpha", "Alpha", },
{ IH_ARCH_ARM, "arm", "ARM", },
+ { IH_ARCH_MIPS, "mips", "MIPS", },
+ { IH_ARCH_MIPS64, "mips64", "MIPS 64 Bit", },
+#ifndef CONFIG_SPL_BUILD
{ IH_ARCH_I386, "x86", "Intel x86", },
{ IH_ARCH_IA64, "ia64", "IA64", },
{ IH_ARCH_M68K, "m68k", "M68K", },
{ IH_ARCH_MICROBLAZE, "microblaze", "MicroBlaze", },
- { IH_ARCH_MIPS, "mips", "MIPS", },
- { IH_ARCH_MIPS64, "mips64", "MIPS 64 Bit", },
{ IH_ARCH_NIOS2, "nios2", "NIOS II", },
{ IH_ARCH_PPC, "powerpc", "PowerPC", },
{ IH_ARCH_PPC, "ppc", "PowerPC", },
@@ -95,19 +96,21 @@ static const table_entry_t uimage_arch[] = {
{ IH_ARCH_AVR32, "avr32", "AVR32", },
{ IH_ARCH_NDS32, "nds32", "NDS32", },
{ IH_ARCH_OPENRISC, "or1k", "OpenRISC 1000",},
+#endif
{ -1, "", "", },
};
static const table_entry_t uimage_os[] = {
{ IH_OS_INVALID, NULL, "Invalid OS", },
{ IH_OS_LINUX, "linux", "Linux", },
+ { IH_OS_U_BOOT, "u-boot", "U-Boot", },
+#ifndef CONFIG_SPL_BUILD
#if defined(CONFIG_LYNXKDI) || defined(USE_HOSTCC)
{ IH_OS_LYNXOS, "lynxos", "LynxOS", },
#endif
{ IH_OS_NETBSD, "netbsd", "NetBSD", },
{ IH_OS_OSE, "ose", "Enea OSE", },
{ IH_OS_RTEMS, "rtems", "RTEMS", },
- { IH_OS_U_BOOT, "u-boot", "U-Boot", },
#if defined(CONFIG_CMD_ELF) || defined(USE_HOSTCC)
{ IH_OS_QNX, "qnx", "QNX", },
{ IH_OS_VXWORKS, "vxworks", "VxWorks", },
@@ -128,6 +131,7 @@ static const table_entry_t uimage_os[] = {
{ IH_OS_SOLARIS, "solaris", "Solaris", },
{ IH_OS_SVR4, "svr4", "SVR4", },
#endif
+#endif
{ -1, "", "", },
};
@@ -1829,7 +1833,7 @@ static int fit_parse_spec(const char *spec, char sepc, ulong addr_curr,
* addr and conf_name are set accordingly
* 0 otherwise
*/
-inline int fit_parse_conf(const char *spec, ulong addr_curr,
+int fit_parse_conf(const char *spec, ulong addr_curr,
ulong *addr, const char **conf_name)
{
return fit_parse_spec(spec, '#', addr_curr, addr, conf_name);
@@ -1855,7 +1859,7 @@ inline int fit_parse_conf(const char *spec, ulong addr_curr,
* addr and image_name are set accordingly
* 0 otherwise
*/
-inline int fit_parse_subimage(const char *spec, ulong addr_curr,
+int fit_parse_subimage(const char *spec, ulong addr_curr,
ulong *addr, const char **image_name)
{
return fit_parse_spec(spec, ':', addr_curr, addr, image_name);
diff --git a/common/main.c b/common/main.c
index 3b9e39a980..8b7fd8fffe 100644
--- a/common/main.c
+++ b/common/main.c
@@ -43,6 +43,8 @@
#include <linux/ctype.h>
#include <menu.h>
+/* #define DEBUG_BOOTKEYS 1 */
+
#if defined(CONFIG_SILENT_CONSOLE) || defined(CONFIG_POST) || defined(CONFIG_CMDLINE_EDITING)
DECLARE_GLOBAL_DATA_PTR;
#endif
@@ -50,7 +52,7 @@ DECLARE_GLOBAL_DATA_PTR;
/*
* Board-specific Platform code can reimplement show_boot_progress () if needed
*/
-void inline __show_boot_progress (int val) {}
+void __show_boot_progress (int val) {}
void show_boot_progress (int val) __attribute__((weak, alias("__show_boot_progress")));
#if defined(CONFIG_UPDATE_TFTP)
@@ -95,7 +97,7 @@ static inline
int abortboot(int bootdelay)
{
int abort = 0;
- uint64_t etime = endtick(bootdelay);
+ uint64_t etime = endtick(1);
struct {
char* str;
u_int len;
@@ -113,10 +115,6 @@ int abortboot(int bootdelay)
u_int presskey_max = 0;
u_int i;
-# ifdef CONFIG_AUTOBOOT_PROMPT
- printf(CONFIG_AUTOBOOT_PROMPT);
-# endif
-
# ifdef CONFIG_AUTOBOOT_DELAY_STR
if (delaykey[0].str == NULL)
delaykey[0].str = CONFIG_AUTOBOOT_DELAY_STR;
@@ -134,6 +132,10 @@ int abortboot(int bootdelay)
delaykey[3].str = CONFIG_AUTOBOOT_STOP_STR2;
# endif
+# if DEBUG_BOOTKEYS
+ printf("\n");
+# endif
+
for (i = 0; i < sizeof(delaykey) / sizeof(delaykey[0]); i ++) {
delaykey[i].len = delaykey[i].str == NULL ?
0 : strlen (delaykey[i].str);
@@ -144,16 +146,46 @@ int abortboot(int bootdelay)
presskey_max : delaykey[i].len;
# if DEBUG_BOOTKEYS
- printf("%s key:<%s>\n",
- delaykey[i].retry ? "delay" : "stop",
- delaykey[i].str ? delaykey[i].str : "NULL");
+ u_int j;
+ printf("%s key: <", delaykey[i].retry ? "Delay" : "Stop ");
+ if (delaykey[i].str) {
+ for (j = 0; j < delaykey[i].len; j++) {
+ if (delaykey[i].str[j] < 0x80 &&
+ isprint(delaykey[i].str[j])) {
+ printf("%c", delaykey[i].str[j]);
+ } else {
+ printf("\\x%02X", delaykey[i].str[j]);
+ }
+ }
+ } else {
+ printf("NULL");
+ }
+ printf(">\n");
# endif
}
+# if DEBUG_BOOTKEYS
+ printf("\n");
+# endif
+
+# ifdef CONFIG_AUTOBOOT_PROMPT
+ printf(CONFIG_AUTOBOOT_PROMPT);
+# else
+ printf("Hit delay/stop key to delay/stop autoboot: %2d ", bootdelay);
+# endif
+
/* In order to keep up with incoming data, check timeout only
* when catch up.
*/
- do {
+ while (!abort && bootdelay > 0) {
+ if (get_ticks() > etime) {
+ etime = endtick(1);
+ --bootdelay;
+# ifndef CONFIG_AUTOBOOT_PROMPT
+ printf("\b\b\b%2d ", bootdelay);
+# endif
+ }
+
if (tstc()) {
if (presskey_len < presskey_max) {
presskey [presskey_len ++] = getc();
@@ -172,11 +204,14 @@ int abortboot(int bootdelay)
memcmp (presskey + presskey_len - delaykey[i].len,
delaykey[i].str,
delaykey[i].len) == 0) {
+# ifndef CONFIG_AUTOBOOT_PROMPT
+ puts("\n");
+# endif
# if DEBUG_BOOTKEYS
- printf("got %skey\n",
+ printf("Got %s key\n",
delaykey[i].retry ? "delay" : "stop");
# endif
-
+ puts("\n");
# ifdef CONFIG_BOOT_RETRY_TIME
/* don't retry auto boot */
if (! delaykey[i].retry)
@@ -185,12 +220,17 @@ int abortboot(int bootdelay)
abort = 1;
}
}
- } while (!abort && get_ticks() <= etime);
+ }
+ if (!abort) {
+# ifndef CONFIG_AUTOBOOT_PROMPT
+ puts("\n");
+# endif
# if DEBUG_BOOTKEYS
- if (!abort)
- puts("key timeout\n");
+ puts("Key timeout\n");
# endif
+ puts("\n");
+ }
#ifdef CONFIG_SILENT_CONSOLE
if (abort)
@@ -227,7 +267,9 @@ int abortboot(int bootdelay)
if (bootdelay >= 0) {
if (tstc()) { /* we got a key press */
(void) getc(); /* consume input */
+#ifndef CONFIG_MENUPROMPT
puts ("\b\b\b 0");
+#endif
abort = 1; /* don't auto boot */
}
}
@@ -252,7 +294,9 @@ int abortboot(int bootdelay)
udelay(10000);
}
+#ifndef CONFIG_MENUPROMPT
printf("\b\b\b%2d ", bootdelay);
+#endif
}
putc('\n');
@@ -271,6 +315,7 @@ int abortboot(int bootdelay)
void main_loop (void)
{
+ int autoboot;
#ifndef CONFIG_SYS_HUSH_PARSER
static char lastcommand[CONFIG_SYS_CBSIZE] = { 0, };
int len;
@@ -376,7 +421,12 @@ void main_loop (void)
debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "<UNDEFINED>");
- if (bootdelay >= 0 && s && !abortboot (bootdelay)) {
+# ifdef REBOOT_WHEN_CRASH
+ autoboot = (s != NULL);
+# else
+ autoboot = (bootdelay >= 0 && s && !abortboot (bootdelay));
+# endif
+ if (autoboot) {
# ifdef CONFIG_AUTOBOOT_KEYED
int prev = disable_ctrlc(1); /* disable Control C checking */
# endif
@@ -973,7 +1023,6 @@ int readline_into_buffer(const char *const prompt, char *buffer, int timeout)
#ifdef CONFIG_SHOW_ACTIVITY
while (!tstc()) {
- extern void show_activity(int arg);
show_activity(0);
WATCHDOG_RESET();
}
diff --git a/common/usb.c b/common/usb.c
index 1ec30bc058..c80155ce76 100644
--- a/common/usb.c
+++ b/common/usb.c
@@ -47,6 +47,7 @@
#include <common.h>
#include <command.h>
#include <asm/processor.h>
+#include <linux/compiler.h>
#include <linux/ctype.h>
#include <asm/byteorder.h>
#include <asm/unaligned.h>
@@ -169,7 +170,7 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe,
unsigned short value, unsigned short index,
void *data, unsigned short size, int timeout)
{
- struct devrequest setup_packet;
+ ALLOC_CACHE_ALIGN_BUFFER(struct devrequest, setup_packet, 1);
if ((timeout == 0) && (!asynch_allowed)) {
/* request for a asynch control pipe is not allowed */
@@ -177,17 +178,17 @@ int usb_control_msg(struct usb_device *dev, unsigned int pipe,
}
/* set setup command */
- setup_packet.requesttype = requesttype;
- setup_packet.request = request;
- setup_packet.value = cpu_to_le16(value);
- setup_packet.index = cpu_to_le16(index);
- setup_packet.length = cpu_to_le16(size);
+ setup_packet->requesttype = requesttype;
+ setup_packet->request = request;
+ setup_packet->value = cpu_to_le16(value);
+ setup_packet->index = cpu_to_le16(index);
+ setup_packet->length = cpu_to_le16(size);
USB_PRINTF("usb_control_msg: request: 0x%X, requesttype: 0x%X, " \
"value 0x%X index 0x%X length 0x%X\n",
request, requesttype, value, index, size);
dev->status = USB_ST_NOT_PROC; /*not yet processed */
- submit_control_msg(dev, pipe, data, size, &setup_packet);
+ submit_control_msg(dev, pipe, data, size, setup_packet);
if (timeout == 0)
return (int)size;
@@ -261,7 +262,7 @@ int usb_maxpacket(struct usb_device *dev, unsigned long pipe)
*
* NOTE: Similar behaviour was observed with GCC4.6 on ARMv5.
*/
-static void __attribute__((noinline))
+static void noinline
usb_set_maxpacket_ep(struct usb_device *dev, int if_idx, int ep_idx)
{
int b;
@@ -681,7 +682,7 @@ static int usb_string_sub(struct usb_device *dev, unsigned int langid,
*/
int usb_string(struct usb_device *dev, int index, char *buf, size_t size)
{
- unsigned char mybuf[USB_BUFSIZ];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, mybuf, USB_BUFSIZ);
unsigned char *tbuf;
int err;
unsigned int u, idx;
@@ -781,7 +782,7 @@ int usb_new_device(struct usb_device *dev)
{
int addr, err;
int tmp;
- unsigned char tmpbuf[USB_BUFSIZ];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, tmpbuf, USB_BUFSIZ);
/* We still haven't set the Address yet */
addr = dev->devnum;
@@ -908,8 +909,8 @@ int usb_new_device(struct usb_device *dev)
le16_to_cpus(&dev->descriptor.idProduct);
le16_to_cpus(&dev->descriptor.bcdDevice);
/* only support for one config for now */
- usb_get_configuration_no(dev, &tmpbuf[0], 0);
- usb_parse_config(dev, &tmpbuf[0], 0);
+ usb_get_configuration_no(dev, tmpbuf, 0);
+ usb_parse_config(dev, tmpbuf, 0);
usb_set_maxpacket(dev);
/* we set the default configuration here */
if (usb_set_configuration(dev, dev->config.desc.bConfigurationValue)) {
diff --git a/common/usb_hub.c b/common/usb_hub.c
index e0edaad56b..f35ad95324 100644
--- a/common/usb_hub.c
+++ b/common/usb_hub.c
@@ -153,7 +153,7 @@ int hub_port_reset(struct usb_device *dev, int port,
unsigned short *portstat)
{
int tries;
- struct usb_port_status portsts;
+ ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
unsigned short portstatus, portchange;
USB_HUB_PRINTF("hub_port_reset: resetting port %d...\n", port);
@@ -162,13 +162,13 @@ int hub_port_reset(struct usb_device *dev, int port,
usb_set_port_feature(dev, port + 1, USB_PORT_FEAT_RESET);
mdelay(200);
- if (usb_get_port_status(dev, port + 1, &portsts) < 0) {
+ if (usb_get_port_status(dev, port + 1, portsts) < 0) {
USB_HUB_PRINTF("get_port_status failed status %lX\n",
dev->status);
return -1;
}
- portstatus = le16_to_cpu(portsts.wPortStatus);
- portchange = le16_to_cpu(portsts.wPortChange);
+ portstatus = le16_to_cpu(portsts->wPortStatus);
+ portchange = le16_to_cpu(portsts->wPortChange);
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
portstatus, portchange,
@@ -206,19 +206,19 @@ int hub_port_reset(struct usb_device *dev, int port,
void usb_hub_port_connect_change(struct usb_device *dev, int port)
{
struct usb_device *usb;
- struct usb_port_status portsts;
+ ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
unsigned short portstatus;
/* Check status */
- if (usb_get_port_status(dev, port + 1, &portsts) < 0) {
+ if (usb_get_port_status(dev, port + 1, portsts) < 0) {
USB_HUB_PRINTF("get_port_status failed\n");
return;
}
- portstatus = le16_to_cpu(portsts.wPortStatus);
+ portstatus = le16_to_cpu(portsts->wPortStatus);
USB_HUB_PRINTF("portstatus %x, change %x, %s\n",
portstatus,
- le16_to_cpu(portsts.wPortChange),
+ le16_to_cpu(portsts->wPortChange),
portspeed(portstatus));
/* Clear the connection change status */
@@ -267,7 +267,8 @@ void usb_hub_port_connect_change(struct usb_device *dev, int port)
static int usb_hub_configure(struct usb_device *dev)
{
int i;
- unsigned char buffer[USB_BUFSIZ], *bitmap;
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, USB_BUFSIZ);
+ unsigned char *bitmap;
struct usb_hub_descriptor *descriptor;
struct usb_hub_device *hub;
#ifdef USB_HUB_DEBUG
@@ -389,16 +390,16 @@ static int usb_hub_configure(struct usb_device *dev)
usb_hub_power_on(hub);
for (i = 0; i < dev->maxchild; i++) {
- struct usb_port_status portsts;
+ ALLOC_CACHE_ALIGN_BUFFER(struct usb_port_status, portsts, 1);
unsigned short portstatus, portchange;
- if (usb_get_port_status(dev, i + 1, &portsts) < 0) {
+ if (usb_get_port_status(dev, i + 1, portsts) < 0) {
USB_HUB_PRINTF("get_port_status failed\n");
continue;
}
- portstatus = le16_to_cpu(portsts.wPortStatus);
- portchange = le16_to_cpu(portsts.wPortChange);
+ portstatus = le16_to_cpu(portsts->wPortStatus);
+ portchange = le16_to_cpu(portsts->wPortChange);
USB_HUB_PRINTF("Port %d Status %X Change %X\n",
i + 1, portstatus, portchange);
diff --git a/common/usb_storage.c b/common/usb_storage.c
index 12083337b0..faad23706f 100644
--- a/common/usb_storage.c
+++ b/common/usb_storage.c
@@ -79,8 +79,7 @@ static const unsigned char us_direction[256/8] = {
};
#define US_DIRECTION(x) ((us_direction[x>>3] >> (x & 7)) & 1)
-static unsigned char usb_stor_buf[512];
-static ccb usb_ccb;
+static ccb usb_ccb __attribute__((aligned(ARCH_DMA_MINALIGN)));
/*
* CBI style
@@ -210,17 +209,17 @@ int usb_stor_info(void)
static unsigned int usb_get_max_lun(struct us_data *us)
{
int len;
- unsigned char result;
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, result, 1);
len = usb_control_msg(us->pusb_dev,
usb_rcvctrlpipe(us->pusb_dev, 0),
US_BBB_GET_MAX_LUN,
USB_TYPE_CLASS | USB_RECIP_INTERFACE | USB_DIR_IN,
0, us->ifnum,
- &result, sizeof(result),
+ result, sizeof(char),
USB_CNTL_TIMEOUT * 5);
USB_STOR_PRINTF("Get Max LUN -> len = %i, result = %i\n",
- len, (int) result);
- return (len > 0) ? result : 0;
+ len, (int) *result);
+ return (len > 0) ? *result : 0;
}
/*******************************************************************************
@@ -233,9 +232,6 @@ int usb_stor_scan(int mode)
unsigned char i;
struct usb_device *dev;
- /* GJ */
- memset(usb_stor_buf, 0, sizeof(usb_stor_buf));
-
if (mode == 1)
printf(" scanning bus for storage devices... ");
@@ -499,7 +495,7 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
int actlen;
int dir_in;
unsigned int pipe;
- umass_bbb_cbw_t cbw;
+ ALLOC_CACHE_ALIGN_BUFFER(umass_bbb_cbw_t, cbw, 1);
dir_in = US_DIRECTION(srb->cmd[0]);
@@ -522,16 +518,16 @@ int usb_stor_BBB_comdat(ccb *srb, struct us_data *us)
/* always OUT to the ep */
pipe = usb_sndbulkpipe(us->pusb_dev, us->ep_out);
- cbw.dCBWSignature = cpu_to_le32(CBWSIGNATURE);
- cbw.dCBWTag = cpu_to_le32(CBWTag++);
- cbw.dCBWDataTransferLength = cpu_to_le32(srb->datalen);
- cbw.bCBWFlags = (dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT);
- cbw.bCBWLUN = srb->lun;
- cbw.bCDBLength = srb->cmdlen;
+ cbw->dCBWSignature = cpu_to_le32(CBWSIGNATURE);
+ cbw->dCBWTag = cpu_to_le32(CBWTag++);
+ cbw->dCBWDataTransferLength = cpu_to_le32(srb->datalen);
+ cbw->bCBWFlags = (dir_in ? CBWFLAGS_IN : CBWFLAGS_OUT);
+ cbw->bCBWLUN = srb->lun;
+ cbw->bCDBLength = srb->cmdlen;
/* copy the command data into the CBW command data buffer */
/* DST SRC LEN!!! */
- memcpy(cbw.CBWCDB, srb->cmd, srb->cmdlen);
- result = usb_bulk_msg(us->pusb_dev, pipe, &cbw, UMASS_BBB_CBW_SIZE,
+ memcpy(cbw->CBWCDB, srb->cmd, srb->cmdlen);
+ result = usb_bulk_msg(us->pusb_dev, pipe, cbw, UMASS_BBB_CBW_SIZE,
&actlen, USB_CNTL_TIMEOUT * 5);
if (result < 0)
USB_STOR_PRINTF("usb_stor_BBB_comdat:usb_bulk_msg error\n");
@@ -675,7 +671,7 @@ int usb_stor_BBB_transport(ccb *srb, struct us_data *us)
int dir_in;
int actlen, data_actlen;
unsigned int pipe, pipein, pipeout;
- umass_bbb_csw_t csw;
+ ALLOC_CACHE_ALIGN_BUFFER(umass_bbb_csw_t, csw, 1);
#ifdef BBB_XPORT_TRACE
unsigned char *ptr;
int index;
@@ -733,7 +729,7 @@ st:
retry = 0;
again:
USB_STOR_PRINTF("STATUS phase\n");
- result = usb_bulk_msg(us->pusb_dev, pipein, &csw, UMASS_BBB_CSW_SIZE,
+ result = usb_bulk_msg(us->pusb_dev, pipein, csw, UMASS_BBB_CSW_SIZE,
&actlen, USB_CNTL_TIMEOUT*5);
/* special handling of STALL in STATUS phase */
@@ -753,28 +749,28 @@ again:
return USB_STOR_TRANSPORT_FAILED;
}
#ifdef BBB_XPORT_TRACE
- ptr = (unsigned char *)&csw;
+ ptr = (unsigned char *)csw;
for (index = 0; index < UMASS_BBB_CSW_SIZE; index++)
printf("ptr[%d] %#x ", index, ptr[index]);
printf("\n");
#endif
/* misuse pipe to get the residue */
- pipe = le32_to_cpu(csw.dCSWDataResidue);
+ pipe = le32_to_cpu(csw->dCSWDataResidue);
if (pipe == 0 && srb->datalen != 0 && srb->datalen - data_actlen != 0)
pipe = srb->datalen - data_actlen;
- if (CSWSIGNATURE != le32_to_cpu(csw.dCSWSignature)) {
+ if (CSWSIGNATURE != le32_to_cpu(csw->dCSWSignature)) {
USB_STOR_PRINTF("!CSWSIGNATURE\n");
usb_stor_BBB_reset(us);
return USB_STOR_TRANSPORT_FAILED;
- } else if ((CBWTag - 1) != le32_to_cpu(csw.dCSWTag)) {
+ } else if ((CBWTag - 1) != le32_to_cpu(csw->dCSWTag)) {
USB_STOR_PRINTF("!Tag\n");
usb_stor_BBB_reset(us);
return USB_STOR_TRANSPORT_FAILED;
- } else if (csw.bCSWStatus > CSWSTATUS_PHASE) {
+ } else if (csw->bCSWStatus > CSWSTATUS_PHASE) {
USB_STOR_PRINTF(">PHASE\n");
usb_stor_BBB_reset(us);
return USB_STOR_TRANSPORT_FAILED;
- } else if (csw.bCSWStatus == CSWSTATUS_PHASE) {
+ } else if (csw->bCSWStatus == CSWSTATUS_PHASE) {
USB_STOR_PRINTF("=PHASE\n");
usb_stor_BBB_reset(us);
return USB_STOR_TRANSPORT_FAILED;
@@ -782,7 +778,7 @@ again:
USB_STOR_PRINTF("transferred %dB instead of %ldB\n",
data_actlen, srb->datalen);
return USB_STOR_TRANSPORT_FAILED;
- } else if (csw.bCSWStatus == CSWSTATUS_FAILED) {
+ } else if (csw->bCSWStatus == CSWSTATUS_FAILED) {
USB_STOR_PRINTF("FAILED\n");
return USB_STOR_TRANSPORT_FAILED;
}
@@ -1343,7 +1339,8 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
block_dev_desc_t *dev_desc)
{
unsigned char perq, modi;
- unsigned long cap[2];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned long, cap, 2);
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, usb_stor_buf, 36);
unsigned long *capacity, *blksz;
ccb *pccb = &usb_ccb;
@@ -1367,9 +1364,9 @@ int usb_stor_get_info(struct usb_device *dev, struct us_data *ss,
/* drive is removable */
dev_desc->removable = 1;
}
- memcpy(&dev_desc->vendor[0], &usb_stor_buf[8], 8);
- memcpy(&dev_desc->product[0], &usb_stor_buf[16], 16);
- memcpy(&dev_desc->revision[0], &usb_stor_buf[32], 4);
+ memcpy(&dev_desc->vendor[0], (const void *) &usb_stor_buf[8], 8);
+ memcpy(&dev_desc->product[0], (const void *) &usb_stor_buf[16], 16);
+ memcpy(&dev_desc->revision[0], (const void *) &usb_stor_buf[32], 4);
dev_desc->vendor[8] = 0;
dev_desc->product[16] = 0;
dev_desc->revision[4] = 0;
diff --git a/config.mk b/config.mk
index fa33e62851..5b570e1092 100644
--- a/config.mk
+++ b/config.mk
@@ -104,19 +104,27 @@ HOSTCFLAGS += -pedantic
#########################################################################
#
-# Option checker (courtesy linux kernel) to ensure
+# Option checker, gcc version (courtesy linux kernel) to ensure
# only supported compiler options are used
#
CC_OPTIONS_CACHE_FILE := $(OBJTREE)/include/generated/cc_options.mk
-CC_TEST_OFILE := $(OBJTREE)/include/generated/cc_test_file.o
+CC_TEST_OFILE = $(OBJTREE)/include/generated/cc_test_file_$$$$.o
-include $(CC_OPTIONS_CACHE_FILE)
-cc-option-sys = $(shell mkdir -p $(dir $(CC_TEST_OFILE)); \
- if $(CC) $(CFLAGS) $(1) -S -xc /dev/null -o $(CC_TEST_OFILE) \
- > /dev/null 2>&1; then \
- echo 'CC_OPTIONS += $(strip $1)' >> $(CC_OPTIONS_CACHE_FILE); \
- echo "$(1)"; fi)
+cc-option-sys-cmd = \
+ set -e; \
+ mkdir -p "$(dir $(CC_TEST_OFILE))"; \
+ if ( $(CC) $(CFLAGS) $(1) -S -xc /dev/null \
+ -o "$(CC_TEST_OFILE)" ) \
+ >/dev/null 2>&1; then \
+ echo "CC_OPTIONS += $(strip $1)" \
+ >> "$(CC_OPTIONS_CACHE_FILE)"; \
+ echo "$(1)"; \
+ fi; \
+ rm -f "$(CC_TEST_OFILE)"
+
+cc-option-sys = $(shell $(cc-option-sys-cmd))
ifeq ($(CONFIG_CC_OPT_CACHE_DISABLE),y)
cc-option = $(strip $(if $(call cc-option-sys,$1),$1,$2))
@@ -125,6 +133,10 @@ cc-option = $(strip $(if $(findstring $1,$(CC_OPTIONS)),$1,\
$(if $(call cc-option-sys,$1),$1,$2)))
endif
+# cc-version
+# Usage gcc-ver := $(call cc-version)
+cc-version = $(shell $(SHELL) $(SRCTREE)/tools/gcc-version.sh $(CC))
+
#
# Include the make variables (CC, etc...)
#
@@ -213,7 +225,10 @@ ifneq ($(OBJTREE),$(SRCTREE))
CPPFLAGS += -I$(OBJTREE)/include2 -I$(OBJTREE)/include
endif
-CPPFLAGS += -I$(TOPDIR)/include
+
+CPPFLAGS += -DCHARGER_IN_RECOVERY
+
+CPPFLAGS += -I$(TOPDIR)/include -mno-unaligned-access
CPPFLAGS += -fno-builtin -ffreestanding -nostdinc \
-isystem $(gccincdir) -pipe $(PLATFORM_CPPFLAGS)
@@ -305,14 +320,19 @@ ALL_CFLAGS += $(EXTRA_CPPFLAGS)
EXTRA_CPPFLAGS_DEP = $(CPPFLAGS_$(BCURDIR)/$(addsuffix .o,$(basename $<))) \
$(CPPFLAGS_$(BCURDIR))
$(obj)%.s: %.S
+ $(XECHO) " CPP $<"
$(CPP) $(ALL_AFLAGS) -o $@ $<
$(obj)%.o: %.S
+ $(XECHO) " CC $<"
$(CC) $(ALL_AFLAGS) -o $@ $< -c
$(obj)%.o: %.c
+ $(XECHO) " CC $<"
$(CC) $(ALL_CFLAGS) -o $@ $< -c
$(obj)%.i: %.c
+ $(XECHO) " CC $<"
$(CPP) $(ALL_CFLAGS) -o $@ $< -c
$(obj)%.s: %.c
+ $(XECHO) " CC $<"
$(CC) $(ALL_CFLAGS) -o $@ $< -c -S
#########################################################################
diff --git a/customer.mk b/customer.mk
new file mode 100644
index 0000000000..7302385287
--- /dev/null
+++ b/customer.mk
@@ -0,0 +1,47 @@
+# different one for slc
+# flash config
+BOARD_NAND_PAGE_SIZE := 4096
+BOARD_NAND_SPARE_SIZE := 128
+# 4096 * 64
+BOARD_FLASH_BLOCK_SIZE := 262144
+
+# touch screen selection
+ RDA_CUSTOMER_DRV_TS := TS_GSL168X
+# GSL168X_MODEL := GSL168X_MODEL_35_HVGA_1680
+# GSL168X_MODEL := GSL168X_MODEL_35_HVGA_1688E
+ GSL168X_MODEL := GSL168X_MODEL_40_WVGA
+#RDA_CUSTOMER_DRV_TS := TS_MSG2133 TS_FT6X06
+# RDA_CUSTOMER_DRV_TS := TS_FT6X06
+# TS_FT6X06_MODEL := VIR_HVGA_VER
+# RDA_CUSTOMER_DRV_TS := TS_IT7252
+# RDA_CUSTOMER_DRV_TS := TS_GTP868
+# RDA_CUSTOMER_DRV_TS := TS_ICN831X
+
+# gsensor selection
+# RDA_CUSTOMER_DRV_GS := GS_MMA865X
+# RDA_CUSTOMER_DRV_GS := GS_MMA7660
+# RDA_CUSTOMER_DRV_GS := GS_STK8312
+# RDA_CUSTOMER_DRV_GS := GS_MMA845X
+RDA_CUSTOMER_DRV_GS := GS_MXC622X
+
+# light sensor selection
+RDA_CUSTOMER_DRV_LS := LS_NONE
+
+#camera sensor selection
+# supported list in device/rda/driver/camera/inc/
+# RDA_CUSTOMER_DRV_CSB := GC0309
+RDA_CUSTOMER_DRV_CSB := GC2035
+#RDA_CUSTOMER_DRV_CSF := GC0329
+#RDA_CUSTOMER_DRV_ATV := RDA5888
+
+export RDA_CUSTOMER_DRV_TS
+ifeq ($(RDA_CUSTOMER_DRV_TS), TS_GSL168X)
+export GSL168X_MODEL
+endif
+export RDA_CUSTOMER_DRV_GS
+export RDA_CUSTOMER_DRV_LS
+export RDA_CUSTOMER_DRV_CSB
+#export RDA_CUSTOMER_DRV_CSF
+export TS_FT6X06_MODEL
+#export RDA_CUSTOMER_DRV_ATV
+
diff --git a/disk/part.c b/disk/part.c
index 8ca5d4bdfc..f54a704e99 100644
--- a/disk/part.c
+++ b/disk/part.c
@@ -1,6 +1,7 @@
/*
* (C) Copyright 2001
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ * Copyright (C) 2011-2012 Google, Inc.
*
* See file CREDITS for list of people who contributed to this
* project.
@@ -25,6 +26,7 @@
#include <command.h>
#include <ide.h>
#include <part.h>
+#include <mmc/sparse.h>
#undef PART_DEBUG
@@ -74,7 +76,7 @@ static const struct block_drvr block_drvr[] = {
DECLARE_GLOBAL_DATA_PTR;
-block_dev_desc_t *get_dev(char* ifname, int dev)
+block_dev_desc_t *get_dev(const char* ifname, int dev)
{
const struct block_drvr *drvr = block_drvr;
block_dev_desc_t* (*reloc_get_dev)(int dev);
@@ -100,11 +102,642 @@ block_dev_desc_t *get_dev(char* ifname, int dev)
}
return NULL;
}
+/*
+ * Given a devname with a concatenated ifname and an id (e.g. "mmc0"), return
+ * a pointer to the associated block device structure.
+ */
+block_dev_desc_t *get_dev_by_name(char *devname)
+{
+ char *digit_pointer, *ep, c;
+ int devid;
+ for (digit_pointer = devname; (c = *digit_pointer); ) {
+ if ('0' <= c && c <= '9') {
+ /*
+ * Due to the ambiguity of determining if characters in
+ * the range of 'a' to 'f' are hex digits or part of
+ * the device interface, we use base 10.
+ */
+ devid = (int)simple_strtoul(digit_pointer, &ep, 10);
+ if (*ep != '\0') {
+ /*
+ * There's non-digits after our digits, keep
+ * scanning for digits at the end.
+ */
+ digit_pointer = ep;
+ continue;
+ }
+ /*
+ * Normally, you would think we would put a '\0' at
+ * digit_pointer, but we don't want to modify the
+ * passed devname, and get_dev() uses strncmp() so it
+ * will match even if there is "junk" after the match.
+ * In our case, the "junk" is the id that we just
+ * parsed. Go ahead and call get_dev().
+ */
+ return get_dev(devname, devid);
+ }
+ digit_pointer++;
+ }
+ return NULL;
+}
+
+int get_partition_by_name(block_dev_desc_t *dev, const char *partition_name,
+ disk_partition_t *partition_info)
+{
+ int i;
+ if (!dev)
+ return -ENODEV;
+ if (!partition_name || !partition_info)
+ return -EINVAL;
+ if (dev->part_type == PART_TYPE_UNKNOWN) {
+ init_part(dev); /* Maybe it is just uninitialized. */
+ if (dev->part_type == PART_TYPE_UNKNOWN)
+ return -ENOENT;
+ }
+ for (i = CONFIG_MIN_PARTITION_NUM; i <= CONFIG_MAX_PARTITION_NUM; i++) {
+ if (get_partition_info(dev, i, partition_info))
+ continue;
+ if (!strcmp((char *)partition_info->name, partition_name))
+ return 0;
+ }
+ return -ENOENT;
+}
+
+/*
+ * Note that the partition functions use environment variables for storing
+ * commands that need to be executed before and after the operations.
+ * Refer to doc/README.partition_funcs for information about this.
+ */
+
+/*
+ * Provide a helper function that will get the value of an environment
+ * variable and interpret the value as commands to be run. This is used to
+ * allow users to have commands executed before and after partition
+ * operations. The environment variable that will be used is based upon the
+ * three passed arguments. Assuming that you want commands to be executed
+ * before and after writing to a partition named "bob", you could do something
+ * like:
+ * setenv pre_write.bob echo before
+ * setenv post_write.bob echo after
+ */
+enum when_t {BEFORE, AFTER};
+static int run_env(enum when_t when, const char *op_str, const uchar *ptn_name)
+{
+ char var_name[sizeof("post_write.")
+ + sizeof(((disk_partition_t *)0)->name)
+ + 8 /* Extra future-proofing insurance */];
+ char *var_val;
+ int len;
+
+ len = snprintf(var_name, sizeof(var_name), "%s_%s.%s",
+ (when == BEFORE) ? "pre" : "post", op_str, ptn_name);
+ if (len >= sizeof(var_name))
+ return -EOVERFLOW;
+
+ var_val = getenv(var_name);
+ if (var_val && run_command(var_val, 0) < 0)
+ return -ENOEXEC;
+ return 0;
+}
+int partition_erase_pre(disk_partition_t *ptn)
+{
+ return run_env(BEFORE, "erase", ptn->name);
+}
+int partition_erase_post(disk_partition_t *ptn)
+{
+ return run_env(AFTER, "erase", ptn->name);
+}
+int partition_read_pre(disk_partition_t *ptn)
+{
+ return run_env(BEFORE, "read", ptn->name);
+}
+int partition_read_post(disk_partition_t *ptn)
+{
+ return run_env(AFTER, "read", ptn->name);
+}
+int partition_write_pre(disk_partition_t *ptn)
+{
+ return run_env(BEFORE, "write", ptn->name);
+}
+int partition_write_post(disk_partition_t *ptn)
+{
+ return run_env(AFTER, "write", ptn->name);
+}
+
+/* Simple helper for partition_* functions to validate arguments. */
+static int _partition_validate(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt, lbaint_t *blkcnt, const void *buffer)
+{
+ if (!dev)
+ return -ENODEV;
+ if (!ptn || !buffer || (blkcnt && bytecnt) /* One or the other */)
+ return -EINVAL;
+ if (blkcnt && *blkcnt > ptn->size)
+ return -EFBIG;
+ /*
+ * Don't validate bytecnt yet because the pre_ commands
+ * (e.g. nandoob enable) may change the block size.
+ */
+ return 0;
+}
+
+static loff_t get_and_zero_loff_t(loff_t *p)
+{
+ loff_t n;
+ if (p) {
+ n = *p;
+ *p = 0;
+ return n;
+ }
+ return 0;
+}
+static lbaint_t get_and_zero_lbaint_t(lbaint_t *p)
+{
+ lbaint_t n;
+ if (p) {
+ n = *p;
+ *p = 0;
+ return n;
+ }
+ return 0;
+}
+/*
+ * Define the guts of the partition_ functions. The _blks and _bytes
+ * permutations will call these to do the actual work.
+ */
+static int _partition_erase(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt_p, lbaint_t *blkcnt_p)
+{
+ /*
+ * Fetch the number of bytes or blocks and then zero them right away
+ * to make the error handling easier.
+ */
+ loff_t bytes_to_do = get_and_zero_loff_t(bytecnt_p);
+ lbaint_t blks_to_do = get_and_zero_lbaint_t(blkcnt_p), blks_done;
+ int err = _partition_validate(dev, ptn, bytecnt_p, blkcnt_p,
+ (void *)-1/*fake*/);
+ if (err)
+ return err;
+
+ err = partition_erase_pre(ptn);
+ if (err)
+ return err;
+
+ if (bytes_to_do) {
+ blks_to_do = DIV_ROUND_UP(bytes_to_do, dev->blksz);
+ if (blks_to_do > ptn->size)
+ return -EFBIG;
+ } else if (!blks_to_do)
+ blks_to_do = ptn->size;
+
+ blks_done = dev->block_erase(dev->dev, ptn->start, blks_to_do);
+ if (blkcnt_p)
+ *blkcnt_p = blks_done;
+ if (bytecnt_p)
+ *bytecnt_p = (loff_t)blks_done * dev->blksz;
+
+ err = partition_erase_post(ptn);
+
+ if (blks_done != blks_to_do)
+ return -EIO;
+ return err;
+}
+int partition_erase_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt)
+{
+ return _partition_erase(dev, ptn, NULL, blkcnt);
+}
+int partition_erase_bytes(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt)
+{
+ return _partition_erase(dev, ptn, bytecnt, NULL);
+}
+
+#ifdef CONFIG_MD5
+void partition_md5_helper(block_dev_desc_t *dev, lbaint_t blk_start,
+ lbaint_t *blkcnt, unsigned char md5[16])
+{
+ struct MD5Context context;
+ lbaint_t buf_blks, blks_left, blks_read;
+ unsigned char *buf;
+#ifndef CONF_MD5_BUFLEN
+#define CONF_MD5_BUFLEN (16*1024)
+#endif
+
+ buf_blks = CONF_MD5_BUFLEN / dev->blksz;
+ if (!buf_blks) {
+ *blkcnt = 0;
+ return;
+ }
+ buf = malloc(buf_blks * dev->blksz);
+ if (!buf) {
+ *blkcnt = 0;
+ return;
+ }
+
+ MD5Init(&context);
+ blks_left = *blkcnt;
+ while (blks_left) {
+ if (blks_left < buf_blks)
+ buf_blks = blks_left;
+
+ blks_read = dev->block_read(dev->dev, blk_start, buf_blks,
+ buf);
+ MD5Update(&context, buf, blks_read * dev->blksz);
+ blk_start += blks_read;
+ blks_left -= blks_read;
+ if (blks_read != buf_blks)
+ break;
+ }
+ MD5Final(md5, &context);
+
+ free(buf);
+ *blkcnt -= blks_left;
+}
+static int _partition_md5(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt_p, lbaint_t *blkcnt_p,
+ unsigned char md5[16])
+{
+ /*
+ * Fetch the number of bytes or blocks and then zero them right away
+ * to make the error handling easier.
+ */
+ loff_t bytes_to_do = get_and_zero_loff_t(bytecnt_p);
+ lbaint_t blks_to_do = get_and_zero_lbaint_t(blkcnt_p), blks_done;
+ int err = _partition_validate(dev, ptn, bytecnt_p, blkcnt_p,
+ (void *)-1/*fake*/);
+ if (err)
+ return err;
+
+ err = partition_read_pre(ptn);
+ if (err)
+ return err;
+
+ if (bytes_to_do) {
+ blks_to_do = DIV_ROUND_UP(bytes_to_do, dev->blksz);
+ if (blks_to_do > ptn->size)
+ return -EFBIG;
+ } else if (!blks_to_do)
+ blks_to_do = ptn->size;
+
+ blks_done = blks_to_do;
+ partition_md5_helper(dev, ptn->start, &blks_done, md5);
+
+ if (blkcnt_p)
+ *blkcnt_p = blks_done;
+ if (bytecnt_p)
+ *bytecnt_p = (loff_t)blks_done * dev->blksz;
+
+ err = partition_read_post(ptn);
+
+ if (blks_done != blks_to_do)
+ return -EIO;
+ return err;
+}
+int partition_md5_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt, unsigned char md5[16])
+{
+ return _partition_md5(dev, ptn, NULL, blkcnt, md5);
+}
+int partition_md5_bytes(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt, unsigned char md5[16])
+{
+ return _partition_md5(dev, ptn, bytecnt, NULL, md5);
+}
+#endif /* CONFIG_MD5 */
+
+static int _partition_read(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt_p, lbaint_t *blkcnt_p,
+ void *buffer)
+{
+ /*
+ * Fetch the number of bytes or blocks and then zero them right away
+ * to make the error handling easier.
+ */
+ loff_t bytes_to_do = get_and_zero_loff_t(bytecnt_p);
+ lbaint_t blks_to_do = get_and_zero_lbaint_t(blkcnt_p), blks_done;
+ int err = _partition_validate(dev, ptn, bytecnt_p, blkcnt_p, buffer);
+ if (err)
+ return err;
+
+ err = partition_read_pre(ptn);
+ if (err)
+ return err;
+
+ if (bytes_to_do) {
+ blks_to_do = DIV_ROUND_UP(bytes_to_do, dev->blksz);
+ if (blks_to_do > ptn->size)
+ return -EFBIG;
+ } else if (!blks_to_do)
+ blks_to_do = ptn->size;
+
+ blks_done = dev->block_read(dev->dev, ptn->start, blks_to_do, buffer);
+ if (blkcnt_p)
+ *blkcnt_p = blks_done;
+ if (bytecnt_p)
+ *bytecnt_p = (loff_t)blks_done * dev->blksz;
+
+ err = partition_read_post(ptn);
+
+ if (blks_done != blks_to_do)
+ return -EIO;
+ return err;
+}
+int partition_read_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt, void *buffer)
+{
+ return _partition_read(dev, ptn, NULL, blkcnt, buffer);
+}
+int partition_read_bytes(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt, void *buffer)
+{
+ return _partition_read(dev, ptn, bytecnt, NULL, buffer);
+}
+
+static int _partition_write(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt_p, lbaint_t *blkcnt_p,
+ const void *buffer)
+{
+#if defined(CONFIG_ERASE_PARTITION_ALWAYS)
+ int do_erase = 1;
+#else
+ int do_erase = 0;
+#endif
+ /*
+ * Fetch the number of bytes or blocks and then zero them right away
+ * to make the error handling easier.
+ */
+ loff_t bytes_to_do = get_and_zero_loff_t(bytecnt_p);
+ lbaint_t blks_done, blks_to_do = get_and_zero_lbaint_t(blkcnt_p);
+ int err = _partition_validate(dev, ptn, bytecnt_p, blkcnt_p, buffer);
+ if (err)
+ return err;
+
+ err = partition_write_pre(ptn);
+ if (!err) {
+ if (bytes_to_do) {
+ blks_to_do = DIV_ROUND_UP(bytes_to_do, dev->blksz);
+ if (blks_to_do > ptn->size)
+ err = -EFBIG;
+ } else if (!blks_to_do)
+ blks_to_do = ptn->size;
+ }
+ blks_done = blks_to_do;
+ if (!err) {
+ if (do_erase)
+ blks_done = dev->block_erase(dev->dev, ptn->start,
+ blks_to_do);
+ if (!do_erase || (blks_done == blks_to_do)) {
+ blks_done = dev->block_write(dev->dev, ptn->start,
+ blks_to_do, buffer);
+ if (blkcnt_p)
+ *blkcnt_p = blks_done;
+ if (bytecnt_p)
+ *bytecnt_p = (loff_t)blks_done * dev->blksz;
+ }
+
+ err = partition_write_post(ptn);
+ }
+
+ if (blks_done != blks_to_do)
+ return -EIO;
+ return err;
+}
+
+int partition_write_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt, const void *buffer)
+{
+ return _partition_write(dev, ptn, NULL, blkcnt, buffer);
+}
+int partition_write_bytes(block_dev_desc_t *dev, disk_partition_t *ptn,
+ loff_t *bytecnt, const void *buffer)
+{
+ return _partition_write(dev, ptn, bytecnt, NULL, buffer);
+}
+
+#define SPARSE_HEADER_MAJOR_VER 1
+
+static int _unsparse(block_dev_desc_t *bdev, unsigned char *source,
+ lbaint_t sector, lbaint_t num_blks)
+{
+ sparse_header_t *header = (void *) source;
+ u32 i;
+ unsigned long blksz = bdev->blksz;
+ u64 section_size = (u64)num_blks * blksz;
+ u64 outlen = 0;
+ int blksz_shift;
+
+ blksz_shift = LOG2(blksz);
+ PRINTF("sparse_header:\n");
+ PRINTF("\t magic=0x%08X\n", header->magic);
+ PRINTF("\t version=%u.%u\n", header->major_version,
+ header->minor_version);
+ PRINTF("\t file_hdr_size=%u\n", header->file_hdr_sz);
+ PRINTF("\tchunk_hdr_size=%u\n", header->chunk_hdr_sz);
+ PRINTF("\t blk_sz=%u\n", header->blk_sz);
+ PRINTF("\t total_blks=%u\n", header->total_blks);
+ PRINTF("\t total_chunks=%u\n", header->total_chunks);
+ PRINTF("\timage_checksum=%u\n", header->image_checksum);
+ PRINTF("\tblock device shift=%d\n", blksz_shift);
+
+ if (header->magic != SPARSE_HEADER_MAGIC) {
+ printf("sparse: bad magic\n");
+ return 1;
+ }
+
+ if (((u64)header->total_blks * header->blk_sz) > section_size) {
+ printf("sparse: section size %llu MB limit: exceeded\n",
+ section_size/(1024*1024));
+ return 1;
+ }
+
+ if ((header->major_version != SPARSE_HEADER_MAJOR_VER) ||
+ (header->file_hdr_sz != sizeof(sparse_header_t)) ||
+ (header->chunk_hdr_sz != sizeof(chunk_header_t))) {
+ printf("sparse: incompatible format\n");
+ return 1;
+ }
+
+ /* Skip the header now */
+ source += header->file_hdr_sz;
+
+ for (i = 0; i < header->total_chunks; i++) {
+ u64 clen = 0;
+ lbaint_t blkcnt;
+ chunk_header_t *chunk = (void *) source;
+
+ PRINTF("chunk_header:\n");
+ PRINTF("\t chunk_type=%u\n", chunk->chunk_type);
+ PRINTF("\t chunk_sz=%u\n", chunk->chunk_sz);
+ PRINTF("\t total_sz=%u\n", chunk->total_sz);
+ /* move to next chunk */
+ source += sizeof(chunk_header_t);
+
+ switch (chunk->chunk_type) {
+ case CHUNK_TYPE_RAW:
+ clen = (u64)chunk->chunk_sz * header->blk_sz;
+ PRINTF("sparse: RAW blk=%d bsz=%d:"
+ " write(sector=%lu,clen=%llu)\n",
+ chunk->chunk_sz, header->blk_sz, sector, clen);
+
+ if (chunk->total_sz != (clen + sizeof(chunk_header_t))) {
+ printf("sparse: bad chunk size for"
+ " chunk %d, type Raw\n", i);
+ return 1;
+ }
+
+ outlen += clen;
+ if (outlen > section_size) {
+ printf("sparse: section size %llu MB limit:"
+ " exceeded\n", section_size/(1024*1024));
+ return 1;
+ }
+ blkcnt = clen >> blksz_shift;
+ debug("sparse: RAW blk=%d bsz=%d:"
+ " write(sector=%lu,clen=%llu)\n",
+ chunk->chunk_sz, header->blk_sz, sector, clen);
+ if (bdev->block_write(bdev->dev,
+ sector, blkcnt, source)
+ != blkcnt) {
+ printf("sparse: block write to sector %lu"
+ " of %llu bytes (%ld blkcnt) failed\n",
+ sector, clen, blkcnt);
+ return 1;
+ }
+
+ sector += (clen >> blksz_shift);
+ source += clen;
+ break;
+
+ case CHUNK_TYPE_DONT_CARE:
+ if (chunk->total_sz != sizeof(chunk_header_t)) {
+ printf("sparse: bogus DONT CARE chunk\n");
+ return 1;
+ }
+ clen = (u64)chunk->chunk_sz * header->blk_sz;
+ debug("sparse: DONT_CARE blk=%d bsz=%d:"
+ " skip(sector=%lu,clen=%llu)\n",
+ chunk->chunk_sz, header->blk_sz, sector, clen);
+
+ outlen += clen;
+ if (outlen > section_size) {
+ printf("sparse: section size %llu MB limit:"
+ " exceeded\n", section_size/(1024*1024));
+ return 1;
+ }
+ sector += (clen >> blksz_shift);
+ break;
+
+ default:
+ printf("sparse: unknown chunk ID %04x\n",
+ chunk->chunk_type);
+ return 1;
+ }
+ }
+
+ printf("sparse: out-length %llu MB\n", outlen/(1024*1024));
+ return 0;
+}
+/*
+ unsparse an image with sparse header
+*/
+
+int partition_unsparse(block_dev_desc_t *dev, disk_partition_t *ptn,
+ unsigned char *source, lbaint_t sector, lbaint_t num_blks)
+{
+ int rtn;
+ if (partition_write_pre(ptn))
+ return 1;
+
+ rtn = _unsparse(dev, source, sector, num_blks);
+
+ if (partition_write_post(ptn))
+ return 1;
+
+ return rtn;
+}
+
+
#else
block_dev_desc_t *get_dev(char* ifname, int dev)
{
return NULL;
}
+block_dev_desc_t *get_dev_by_name(char *devname)
+{
+ return NULL;
+}
+int get_partition_by_name(block_dev_desc_t *dev, const char *partition_name,
+ disk_partition_t *partition_info)
+{
+ return -ENODEV;
+}
+int partition_erase_pre(disk_partition_t *ptn)
+{
+ return -ENODEV;
+}
+int partition_erase_post(disk_partition_t *ptn)
+{
+ return -ENODEV;
+}
+int partition_read_pre(disk_partition_t *ptn)
+{
+ return -ENODEV;
+}
+int partition_read_post(disk_partition_t *ptn)
+{
+ return -ENODEV;
+}
+int partition_write_pre(disk_partition_t *ptn)
+{
+ return -ENODEV;
+}
+int partition_write_post(disk_partition_t *ptn)
+{
+ return -ENODEV;
+}
+int partition_erase_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt)
+{
+ return -ENODEV;
+}
+int partition_erase_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt)
+{
+ return -ENODEV;
+}
+#ifdef CONFIG_MD5
+int partition_md5_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt)
+{
+ return -ENODEV;
+}
+int partition_md5_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt)
+{
+ return -ENODEV;
+}
+#endif /* CONFIG_MD5 */
+int partition_read_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt, void *buffer)
+{
+ return -ENODEV;
+}
+int partition_read_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt, void *buffer)
+{
+ return -ENODEV;
+}
+int partition_write_blks(block_dev_desc_t *dev, disk_partition_t *ptn,
+ lbaint_t *blkcnt, const void *buffer)
+{
+ return -ENODEV;
+}
+int partition_write_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt, const void *buffer)
+{
+ return -ENODEV;
+}
#endif
#if (defined(CONFIG_CMD_IDE) || \
@@ -300,6 +933,9 @@ void init_part (block_dev_desc_t * dev_desc)
int get_partition_info (block_dev_desc_t *dev_desc, int part
, disk_partition_t *info)
{
+ if (dev_desc->part_type == PART_TYPE_UNKNOWN)
+ init_part(dev_desc); /* Maybe it is just uninitialized. */
+
switch (dev_desc->part_type) {
#ifdef CONFIG_MAC_PARTITION
case PART_TYPE_MAC:
@@ -387,6 +1023,8 @@ static void print_part_header (const char *type, block_dev_desc_t * dev_desc)
void print_part (block_dev_desc_t * dev_desc)
{
+ if (dev_desc->part_type == PART_TYPE_UNKNOWN)
+ init_part(dev_desc); /* Maybe it is just uninitialized. */
switch (dev_desc->part_type) {
#ifdef CONFIG_MAC_PARTITION
diff --git a/disk/part_dos.c b/disk/part_dos.c
index b5bcb3735c..c028aaf1b1 100644
--- a/disk/part_dos.c
+++ b/disk/part_dos.c
@@ -87,7 +87,7 @@ static int test_block_type(unsigned char *buffer)
int test_part_dos (block_dev_desc_t *dev_desc)
{
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
if ((dev_desc->block_read(dev_desc->dev, 0, 1, (ulong *) buffer) != 1) ||
(buffer[DOS_PART_MAGIC_OFFSET + 0] != 0x55) ||
@@ -102,7 +102,7 @@ int test_part_dos (block_dev_desc_t *dev_desc)
static void print_partition_extended (block_dev_desc_t *dev_desc, int ext_part_sector, int relative,
int part_num)
{
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
dos_partition_t *pt;
int i;
@@ -166,7 +166,7 @@ static int get_partition_info_extended (block_dev_desc_t *dev_desc, int ext_part
int relative, int part_num,
int which_part, disk_partition_t *info)
{
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
dos_partition_t *pt;
int i;
diff --git a/doc/README.ag102 b/doc/README.ag102
new file mode 100644
index 0000000000..7d142a70d1
--- /dev/null
+++ b/doc/README.ag102
@@ -0,0 +1,36 @@
+Andes Technology SoC AG102
+==========================
+
+AG102 is the second SoC produced by Andes Technology using N1213 CPU core
+with FPU and DDR contoller support.
+AG102 has integrated both AHB and APB bus and many periphals for application
+and product development.
+
+ADP-AG102
+=========
+
+ADP-AG102 is the SoC with AG102 hardcore CPU.
+
+Configurations
+==============
+
+CONFIG_MEM_REMAP:
+ Doing memory remap is essential for preparing some non-OS or RTOS
+ applications.
+
+CONFIG_SKIP_LOWLEVEL_INIT:
+ If you want to boot this system from SPI ROM and bypass e-bios (the
+ other boot loader on ROM). You should undefine CONFIG_SKIP_LOWLEVEL_INIT
+ in "include/configs/adp-ag102.h".
+
+Build and boot steps
+====================
+
+build:
+1. Prepare the toolchains and make sure the $PATH to toolchains is correct.
+2. Use `make adp-ag102` in u-boot root to build the image.
+
+Burn u-boot to SPI ROM:
+====================
+
+This section will be added later.
diff --git a/doc/README.link-local b/doc/README.link-local
new file mode 100644
index 0000000000..e623e5659f
--- /dev/null
+++ b/doc/README.link-local
@@ -0,0 +1,76 @@
+------------------------------------------
+ Link-local IP address auto-configuration
+------------------------------------------
+
+Negotiate with other link-local clients on the local network
+for an address that doesn't require explicit configuration.
+This is especially useful if a DHCP server cannot be guaranteed
+to exist in all environments that the device must operate.
+
+This is an implementation of RFC3927.
+
+----------
+ Commands
+----------
+
+When CONFIG_CMD_LINK_LOCAL is defined in the board config file,
+the "linklocal" command is available. This running this will
+take approximately 5 seconds while the address is negotiated.
+
+------------------------
+ Environment interation
+------------------------
+
+The "llipaddr" variable is set with the most recently
+negotiated address and is preferred in future negotiations.
+
+The "ipaddr", "netmask", and "gatewayip" variables are set
+after successful negotiation to enable network access.
+
+-------------
+ Limitations
+-------------
+
+RFC3927 requires that addresses are continuously checked to
+avoid conflicts, however this can only happen when the NetLoop
+is getting called. It is possible for a conflict to go undetected
+until a command that accesses the network is executed.
+
+Using NetConsole is one way to ensure that NetLoop is always
+processing packets and monitoring for conflicts.
+
+This is also not a concern if the feature is use to connect
+directly to another machine that may not be running a DHCP server.
+
+----------------
+ Example script
+----------------
+
+This script allows use of DHCP and/or Link-local controlled
+by env variables. It depends on CONFIG_CMD_LINK_LOCAL, CONFIG_CMD_DHCP,
+and CONFIG_BOOTP_MAY_FAIL.
+If both fail or are disabled, static settings are used.
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "ipconfigcmd=if test \\\"$dhcpenabled\\\" -ne 0;" \
+ "then " \
+ "dhcpfail=0;dhcp || dhcpfail=1;" \
+ "else " \
+ "dhcpfail=-1;" \
+ "fi;" \
+ "if test \\\"$linklocalenabled\\\" -ne 0 -a " \
+ "\\\"$dhcpfail\\\" -ne 0;" \
+ "then " \
+ "linklocal;" \
+ "llfail=0;" \
+ "else " \
+ "llfail=-1;" \
+ "fi;" \
+ "if test \\\"$llfail\\\" -ne 0 -a " \
+ "\\\"$dhcpfail\\\" -ne 0; " \
+ "then " \
+ "setenv ipaddr $sipaddr; " \
+ "setenv netmask $snetmask; " \
+ "setenv gatewayip $sgatewayip; " \
+ "fi;\0" \
+
diff --git a/doc/README.nand b/doc/README.nand
index 04a87c9918..1602b5eee9 100644
--- a/doc/README.nand
+++ b/doc/README.nand
@@ -94,14 +94,14 @@ Commands:
of data for one 512-byte page or 2 256-byte pages. There is no check
for bad blocks.
- nand read.raw addr ofs|partition
- Read page from `ofs' in NAND flash to `addr'. This reads the raw page,
- so ECC is avoided and the OOB area is read as well.
-
- nand write.raw addr ofs|partition
- Write page from `addr' to `ofs' in NAND flash. This writes the raw page,
- so ECC is avoided and the OOB area is written as well, making the whole
- page written as-is.
+ nand read.raw addr ofs|partition [count]
+ nand write.raw addr ofs|partition [count]
+ Read or write one or more pages at "ofs" in NAND flash, from or to
+ "addr" in memory. This is a raw access, so ECC is avoided and the
+ OOB area is transferred as well. If count is absent, it is assumed
+ to be one page. As with .yaffs2 accesses, the data is formatted as
+ a packed sequence of "data, oob, data, oob, ..." -- no alignment of
+ individual pages is maintained.
Configuration Options:
diff --git a/doc/README.srio-boot-corenet b/doc/README.srio-boot-corenet
new file mode 100644
index 0000000000..56b094c9a2
--- /dev/null
+++ b/doc/README.srio-boot-corenet
@@ -0,0 +1,103 @@
+------------------------------
+SRIO Boot on Corenet Platforms
+------------------------------
+
+For some PowerPC processors with SRIO interface, boot location can be configured
+to SRIO by RCW. The processor booting from SRIO can do without flash for u-boot
+image, ucode and ENV. All the images can be fetched from another processor's
+memory space by SRIO link connected between them.
+
+This document describes the processes based on an example implemented on P4080DS
+platforms and a RCW example with boot from SRIO configuration.
+
+Environment of the SRIO boot:
+ a) Master and slave can be SOCs in one board or SOCs in separate boards.
+ b) They are connected with SRIO links, whether 1x or 4x, and directly or
+ through switch system.
+ c) Only Master has NorFlash for booting, and all the Master's and Slave's
+ U-Boot images, UCodes will be stored in this flash.
+ d) Slave has its own EEPROM for RCW and PBI.
+ e) Slave's RCW should configure the SerDes for SRIO boot port, set the boot
+ location to SRIO, and holdoff all the cores if needed.
+
+ ---------- ----------- -----------
+ | | | | | |
+ | | | | | |
+ | NorFlash|<----->| Master | SRIO | Slave |<---->[EEPROM]
+ | | | |<===========>| |
+ | | | | | |
+ ---------- ----------- -----------
+
+The example based on P4080DS platform:
+ Two P4080DS platforms can be used to implement the boot from SRIO. Their SRIO
+ ports 0 will be connected directly and will be used for the boot from SRIO.
+
+ 1. Slave's RCW example for boot from SRIO port 0 and core 0 not in holdoff.
+ 00000000: aa55 aa55 010e 0100 0c58 0000 0000 0000
+ 00000010: 1818 1818 0000 8888 7440 4000 0000 2000
+ 00000020: f400 0000 0100 0000 0000 0000 0000 0000
+ 00000030: 0000 0000 0083 0000 0000 0000 0000 0000
+ 00000040: 0000 0000 0000 0000 0813 8040 698b 93fe
+
+ 2. Slave's RCW example for boot from SRIO port 0 and all cores in holdoff.
+ 00000000: aa55 aa55 010e 0100 0c58 0000 0000 0000
+ 00000010: 1818 1818 0000 8888 7440 4000 0000 2000
+ 00000020: f440 0000 0100 0000 0000 0000 0000 0000
+ 00000030: 0000 0000 0083 0000 0000 0000 0000 0000
+ 00000040: 0000 0000 0000 0000 0813 8040 063c 778f
+
+ 3. Sequence in Step by Step.
+ a) Update RCW for slave with boot from SRIO port 0 configuration.
+ b) Program slave's U-Boot image, UCode, and ENV parameters into master's
+ NorFlash.
+ c) Start up master and it will boot up normally from its NorFlash.
+ Then, it will finish necessary configurations for slave's boot from
+ SRIO port 0.
+ d) Master will set inbound SRIO windows covered slave's U-Boot image stored
+ in master's NorFlash.
+ e) Master will set an inbound SRIO window covered slave's UCode stored in
+ master's NorFlash.
+ f) Master will set an inbound SRIO window covered slave's ENV stored in
+ master's NorFlash.
+ g) If need to release slave's core, master will set outbound SRIO windows
+ in order to configure slave's registers for the core's releasing.
+ h) If all cores of slave in holdoff, slave should be powered on before all
+ the above master's steps, and wait to be released by master. If not all
+ cores in holdoff, that means core 0 will start up normally, slave should
+ be powered on after all the above master's steps. In the startup phase
+ of the slave from SRIO, it will finish some necessary configurations.
+ i) Slave will set a specific TLB entry for the boot process.
+ j) Slave will set a LAW entry with the TargetID SRIO port 0 for the boot.
+ k) Slave will set a specific TLB entry in order to fetch UCode and ENV
+ from master.
+ l) Slave will set a LAW entry with the TargetID SRIO port 0 for UCode and ENV.
+
+How to use this feature:
+ To use this feature, you need to focus three points.
+
+ 1. Slave's RCW with SRIO boot configurations, and all cores in holdoff
+ configurations if needed.
+ Please refer to the examples given above.
+
+ 2. U-Boot image's compilation.
+ For master, U-Boot image should be generated specifically by
+
+ make xxxx_SRIOBOOT_MASTER_config.
+
+ For example, master U-Boot image used on P4080DS should be compiled with
+
+ make P4080DS_SRIOBOOT_MASTER_config.
+
+ For slave, U-Boot image should be generated specifically by
+
+ make xxxx_SRIOBOOT_SLAVE_config.
+
+ For example, slave U-Boot image used on P4080DS should be compiled with
+
+ make P4080DS_SRIOBOOT_SLAVE_config.
+
+ 3. Necessary modifications based on a specific environment.
+ For a specific environment, the SRIO port for boot, the addresses of the
+ slave's U-Boot image, UCode, ENV stored in master's NorFlash, and any other
+ configurations can be modified in the file:
+ include/configs/corenet_ds.h.
diff --git a/doc/SPL/README.omap3 b/doc/SPL/README.omap3
index cc5d5c09ad..a543e65d39 100644
--- a/doc/SPL/README.omap3
+++ b/doc/SPL/README.omap3
@@ -34,14 +34,14 @@ DDR1: 0x80000000 - 0xBFFFFFFF
Option 1 (SPL only):
0x40200800 - 0x4020BBFF: Area for SPL text, data and rodata
-0x4020BC00 - 0x4020FFFC: Area for the SPL stack.
+0x4020E000 - 0x4020FFFC: Area for the SPL stack.
0x80000000 - 0x8007FFFF: Area for the SPL BSS.
0x80100000: CONFIG_SYS_TEXT_BASE of U-Boot
0x80208000 - 0x80307FFF: malloc() pool available to SPL.
Option 2 (SPL or X-Loader):
0x40200800 - 0x4020BBFF: Area for SPL text, data and rodata
-0x4020BC00 - 0x4020FFFC: Area for the SPL stack.
+0x4020E000 - 0x4020FFFC: Area for the SPL stack.
0x80008000: CONFIG_SYS_TEXT_BASE of U-Boot
0x87000000 - 0x8707FFFF: Area for the SPL BSS.
0x87080000 - 0x870FFFFF: malloc() pool available to SPL.
diff --git a/drivers/bios_emulator/x86emu/prim_ops.c b/drivers/bios_emulator/x86emu/prim_ops.c
index 7553087b26..5f6c795fb7 100644
--- a/drivers/bios_emulator/x86emu/prim_ops.c
+++ b/drivers/bios_emulator/x86emu/prim_ops.c
@@ -118,11 +118,6 @@ static u32 x86emu_parity_tab[8] =
#define PARITY(x) (((x86emu_parity_tab[(x) / 32] >> ((x) % 32)) & 1) == 0)
#define XOR2(x) (((x) ^ ((x)>>1)) & 0x1)
-/*----------------------------- Implementation ----------------------------*/
-int abs(int v)
-{
- return (v>0)?v:-v;
-}
/*----------------------------- Implementation ----------------------------*/
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index 98560ef76f..b9c20475c2 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -27,6 +27,7 @@ LIB := $(obj)libblock.o
COBJS-$(CONFIG_SCSI_AHCI) += ahci.o
COBJS-$(CONFIG_ATA_PIIX) += ata_piix.o
+COBJS-$(CONFIG_DWC_AHSATA) += dwc_ahsata.o
COBJS-$(CONFIG_FSL_SATA) += fsl_sata.o
COBJS-$(CONFIG_IDE_FTIDE020) += ftide020.o
COBJS-$(CONFIG_LIBATA) += libata.o
diff --git a/drivers/block/dwc_ahsata.c b/drivers/block/dwc_ahsata.c
new file mode 100644
index 0000000000..2703d3dc84
--- /dev/null
+++ b/drivers/block/dwc_ahsata.c
@@ -0,0 +1,969 @@
+/*
+ * Copyright (C) 2010-2011 Freescale Semiconductor, Inc.
+ * Terry Lv <r65388@freescale.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc.
+ *
+ */
+
+#include <libata.h>
+#include <ahci.h>
+#include <fis.h>
+
+#include <common.h>
+#include <malloc.h>
+#include <linux/ctype.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <linux/bitops.h>
+#include <asm/arch/clock.h>
+#include "dwc_ahsata.h"
+
+struct sata_port_regs {
+ u32 clb;
+ u32 clbu;
+ u32 fb;
+ u32 fbu;
+ u32 is;
+ u32 ie;
+ u32 cmd;
+ u32 res1[1];
+ u32 tfd;
+ u32 sig;
+ u32 ssts;
+ u32 sctl;
+ u32 serr;
+ u32 sact;
+ u32 ci;
+ u32 sntf;
+ u32 res2[1];
+ u32 dmacr;
+ u32 res3[1];
+ u32 phycr;
+ u32 physr;
+};
+
+struct sata_host_regs {
+ u32 cap;
+ u32 ghc;
+ u32 is;
+ u32 pi;
+ u32 vs;
+ u32 ccc_ctl;
+ u32 ccc_ports;
+ u32 res1[2];
+ u32 cap2;
+ u32 res2[30];
+ u32 bistafr;
+ u32 bistcr;
+ u32 bistfctr;
+ u32 bistsr;
+ u32 bistdecr;
+ u32 res3[2];
+ u32 oobr;
+ u32 res4[8];
+ u32 timer1ms;
+ u32 res5[1];
+ u32 gparam1r;
+ u32 gparam2r;
+ u32 pparamr;
+ u32 testr;
+ u32 versionr;
+ u32 idr;
+};
+
+#define MAX_DATA_BYTES_PER_SG (4 * 1024 * 1024)
+#define MAX_BYTES_PER_TRANS (AHCI_MAX_SG * MAX_DATA_BYTES_PER_SG)
+
+#define writel_with_flush(a, b) do { writel(a, b); readl(b); } while (0)
+
+static int is_ready;
+
+static inline u32 ahci_port_base(u32 base, u32 port)
+{
+ return base + 0x100 + (port * 0x80);
+}
+
+static int waiting_for_cmd_completed(u8 *offset,
+ int timeout_msec,
+ u32 sign)
+{
+ int i;
+ u32 status;
+
+ for (i = 0;
+ ((status = readl(offset)) & sign) && i < timeout_msec;
+ ++i)
+ mdelay(1);
+
+ return (i < timeout_msec) ? 0 : -1;
+}
+
+static int ahci_setup_oobr(struct ahci_probe_ent *probe_ent,
+ int clk)
+{
+ struct sata_host_regs *host_mmio =
+ (struct sata_host_regs *)probe_ent->mmio_base;
+
+ writel(SATA_HOST_OOBR_WE, &(host_mmio->oobr));
+ writel(0x02060b14, &(host_mmio->oobr));
+
+ return 0;
+}
+
+static int ahci_host_init(struct ahci_probe_ent *probe_ent)
+{
+ u32 tmp, cap_save, num_ports;
+ int i, j, timeout = 1000;
+ struct sata_port_regs *port_mmio = NULL;
+ struct sata_host_regs *host_mmio =
+ (struct sata_host_regs *)probe_ent->mmio_base;
+ int clk = mxc_get_clock(MXC_SATA_CLK);
+
+ cap_save = readl(&(host_mmio->cap));
+ cap_save |= SATA_HOST_CAP_SSS;
+
+ /* global controller reset */
+ tmp = readl(&(host_mmio->ghc));
+ if ((tmp & SATA_HOST_GHC_HR) == 0)
+ writel_with_flush(tmp | SATA_HOST_GHC_HR, &(host_mmio->ghc));
+
+ while ((readl(&(host_mmio->ghc)) & SATA_HOST_GHC_HR)
+ && --timeout)
+ ;
+
+ if (timeout <= 0) {
+ debug("controller reset failed (0x%x)\n", tmp);
+ return -1;
+ }
+
+ /* Set timer 1ms */
+ writel(clk / 1000, &(host_mmio->timer1ms));
+
+ ahci_setup_oobr(probe_ent, 0);
+
+ writel_with_flush(SATA_HOST_GHC_AE, &(host_mmio->ghc));
+ writel(cap_save, &(host_mmio->cap));
+ num_ports = (cap_save & SATA_HOST_CAP_NP_MASK) + 1;
+ writel_with_flush((1 << num_ports) - 1,
+ &(host_mmio->pi));
+
+ /*
+ * Determine which Ports are implemented by the DWC_ahsata,
+ * by reading the PI register. This bit map value aids the
+ * software to determine how many Ports are available and
+ * which Port registers need to be initialized.
+ */
+ probe_ent->cap = readl(&(host_mmio->cap));
+ probe_ent->port_map = readl(&(host_mmio->pi));
+
+ /* Determine how many command slots the HBA supports */
+ probe_ent->n_ports =
+ (probe_ent->cap & SATA_HOST_CAP_NP_MASK) + 1;
+
+ debug("cap 0x%x port_map 0x%x n_ports %d\n",
+ probe_ent->cap, probe_ent->port_map, probe_ent->n_ports);
+
+ for (i = 0; i < probe_ent->n_ports; i++) {
+ probe_ent->port[i].port_mmio =
+ ahci_port_base((u32)host_mmio, i);
+ port_mmio =
+ (struct sata_port_regs *)probe_ent->port[i].port_mmio;
+
+ /* Ensure that the DWC_ahsata is in idle state */
+ tmp = readl(&(port_mmio->cmd));
+
+ /*
+ * When P#CMD.ST, P#CMD.CR, P#CMD.FRE and P#CMD.FR
+ * are all cleared, the Port is in an idle state.
+ */
+ if (tmp & (SATA_PORT_CMD_CR | SATA_PORT_CMD_FR |
+ SATA_PORT_CMD_FRE | SATA_PORT_CMD_ST)) {
+
+ /*
+ * System software places a Port into the idle state by
+ * clearing P#CMD.ST and waiting for P#CMD.CR to return
+ * 0 when read.
+ */
+ tmp &= ~SATA_PORT_CMD_ST;
+ writel_with_flush(tmp, &(port_mmio->cmd));
+
+ /*
+ * spec says 500 msecs for each bit, so
+ * this is slightly incorrect.
+ */
+ mdelay(500);
+
+ timeout = 1000;
+ while ((readl(&(port_mmio->cmd)) & SATA_PORT_CMD_CR)
+ && --timeout)
+ ;
+
+ if (timeout <= 0) {
+ debug("port reset failed (0x%x)\n", tmp);
+ return -1;
+ }
+ }
+
+ /* Spin-up device */
+ tmp = readl(&(port_mmio->cmd));
+ writel((tmp | SATA_PORT_CMD_SUD), &(port_mmio->cmd));
+
+ /* Wait for spin-up to finish */
+ timeout = 1000;
+ while (!(readl(&(port_mmio->cmd)) | SATA_PORT_CMD_SUD)
+ && --timeout)
+ ;
+ if (timeout <= 0) {
+ debug("Spin-Up can't finish!\n");
+ return -1;
+ }
+
+ for (j = 0; j < 100; ++j) {
+ mdelay(10);
+ tmp = readl(&(port_mmio->ssts));
+ if (((tmp & SATA_PORT_SSTS_DET_MASK) == 0x3) ||
+ ((tmp & SATA_PORT_SSTS_DET_MASK) == 0x1))
+ break;
+ }
+
+ /* Wait for COMINIT bit 26 (DIAG_X) in SERR */
+ timeout = 1000;
+ while (!(readl(&(port_mmio->serr)) | SATA_PORT_SERR_DIAG_X)
+ && --timeout)
+ ;
+ if (timeout <= 0) {
+ debug("Can't find DIAG_X set!\n");
+ return -1;
+ }
+
+ /*
+ * For each implemented Port, clear the P#SERR
+ * register, by writing ones to each implemented\
+ * bit location.
+ */
+ tmp = readl(&(port_mmio->serr));
+ debug("P#SERR 0x%x\n",
+ tmp);
+ writel(tmp, &(port_mmio->serr));
+
+ /* Ack any pending irq events for this port */
+ tmp = readl(&(host_mmio->is));
+ debug("IS 0x%x\n", tmp);
+ if (tmp)
+ writel(tmp, &(host_mmio->is));
+
+ writel(1 << i, &(host_mmio->is));
+
+ /* set irq mask (enables interrupts) */
+ writel(DEF_PORT_IRQ, &(port_mmio->ie));
+
+ /* register linkup ports */
+ tmp = readl(&(port_mmio->ssts));
+ debug("Port %d status: 0x%x\n", i, tmp);
+ if ((tmp & SATA_PORT_SSTS_DET_MASK) == 0x03)
+ probe_ent->link_port_map |= (0x01 << i);
+ }
+
+ tmp = readl(&(host_mmio->ghc));
+ debug("GHC 0x%x\n", tmp);
+ writel(tmp | SATA_HOST_GHC_IE, &(host_mmio->ghc));
+ tmp = readl(&(host_mmio->ghc));
+ debug("GHC 0x%x\n", tmp);
+
+ return 0;
+}
+
+static void ahci_print_info(struct ahci_probe_ent *probe_ent)
+{
+ struct sata_host_regs *host_mmio =
+ (struct sata_host_regs *)probe_ent->mmio_base;
+ u32 vers, cap, impl, speed;
+ const char *speed_s;
+ const char *scc_s;
+
+ vers = readl(&(host_mmio->vs));
+ cap = probe_ent->cap;
+ impl = probe_ent->port_map;
+
+ speed = (cap & SATA_HOST_CAP_ISS_MASK)
+ >> SATA_HOST_CAP_ISS_OFFSET;
+ if (speed == 1)
+ speed_s = "1.5";
+ else if (speed == 2)
+ speed_s = "3";
+ else
+ speed_s = "?";
+
+ scc_s = "SATA";
+
+ printf("AHCI %02x%02x.%02x%02x "
+ "%u slots %u ports %s Gbps 0x%x impl %s mode\n",
+ (vers >> 24) & 0xff,
+ (vers >> 16) & 0xff,
+ (vers >> 8) & 0xff,
+ vers & 0xff,
+ ((cap >> 8) & 0x1f) + 1,
+ (cap & 0x1f) + 1,
+ speed_s,
+ impl,
+ scc_s);
+
+ printf("flags: "
+ "%s%s%s%s%s%s"
+ "%s%s%s%s%s%s%s\n",
+ cap & (1 << 31) ? "64bit " : "",
+ cap & (1 << 30) ? "ncq " : "",
+ cap & (1 << 28) ? "ilck " : "",
+ cap & (1 << 27) ? "stag " : "",
+ cap & (1 << 26) ? "pm " : "",
+ cap & (1 << 25) ? "led " : "",
+ cap & (1 << 24) ? "clo " : "",
+ cap & (1 << 19) ? "nz " : "",
+ cap & (1 << 18) ? "only " : "",
+ cap & (1 << 17) ? "pmp " : "",
+ cap & (1 << 15) ? "pio " : "",
+ cap & (1 << 14) ? "slum " : "",
+ cap & (1 << 13) ? "part " : "");
+}
+
+static int ahci_init_one(int pdev)
+{
+ int rc;
+ struct ahci_probe_ent *probe_ent = NULL;
+
+ probe_ent = malloc(sizeof(struct ahci_probe_ent));
+ memset(probe_ent, 0, sizeof(struct ahci_probe_ent));
+ probe_ent->dev = pdev;
+
+ probe_ent->host_flags = ATA_FLAG_SATA
+ | ATA_FLAG_NO_LEGACY
+ | ATA_FLAG_MMIO
+ | ATA_FLAG_PIO_DMA
+ | ATA_FLAG_NO_ATAPI;
+
+ probe_ent->mmio_base = CONFIG_DWC_AHSATA_BASE_ADDR;
+
+ /* initialize adapter */
+ rc = ahci_host_init(probe_ent);
+ if (rc)
+ goto err_out;
+
+ ahci_print_info(probe_ent);
+
+ /* Save the private struct to block device struct */
+ sata_dev_desc[pdev].priv = (void *)probe_ent;
+
+ return 0;
+
+err_out:
+ return rc;
+}
+
+static int ahci_fill_sg(struct ahci_probe_ent *probe_ent,
+ u8 port, unsigned char *buf, int buf_len)
+{
+ struct ahci_ioports *pp = &(probe_ent->port[port]);
+ struct ahci_sg *ahci_sg = pp->cmd_tbl_sg;
+ u32 sg_count, max_bytes;
+ int i;
+
+ max_bytes = MAX_DATA_BYTES_PER_SG;
+ sg_count = ((buf_len - 1) / max_bytes) + 1;
+ if (sg_count > AHCI_MAX_SG) {
+ printf("Error:Too much sg!\n");
+ return -1;
+ }
+
+ for (i = 0; i < sg_count; i++) {
+ ahci_sg->addr =
+ cpu_to_le32((u32)buf + i * max_bytes);
+ ahci_sg->addr_hi = 0;
+ ahci_sg->flags_size = cpu_to_le32(0x3fffff &
+ (buf_len < max_bytes
+ ? (buf_len - 1)
+ : (max_bytes - 1)));
+ ahci_sg++;
+ buf_len -= max_bytes;
+ }
+
+ return sg_count;
+}
+
+static void ahci_fill_cmd_slot(struct ahci_ioports *pp, u32 cmd_slot, u32 opts)
+{
+ struct ahci_cmd_hdr *cmd_hdr = (struct ahci_cmd_hdr *)(pp->cmd_slot +
+ AHCI_CMD_SLOT_SZ * cmd_slot);
+
+ memset(cmd_hdr, 0, AHCI_CMD_SLOT_SZ);
+ cmd_hdr->opts = cpu_to_le32(opts);
+ cmd_hdr->status = 0;
+ cmd_hdr->tbl_addr = cpu_to_le32(pp->cmd_tbl & 0xffffffff);
+ cmd_hdr->tbl_addr_hi = 0;
+}
+
+#define AHCI_GET_CMD_SLOT(c) ((c) ? ffs(c) : 0)
+
+static int ahci_exec_ata_cmd(struct ahci_probe_ent *probe_ent,
+ u8 port, struct sata_fis_h2d *cfis,
+ u8 *buf, u32 buf_len, s32 is_write)
+{
+ struct ahci_ioports *pp = &(probe_ent->port[port]);
+ struct sata_port_regs *port_mmio =
+ (struct sata_port_regs *)pp->port_mmio;
+ u32 opts;
+ int sg_count = 0, cmd_slot = 0;
+
+ cmd_slot = AHCI_GET_CMD_SLOT(readl(&(port_mmio->ci)));
+ if (32 == cmd_slot) {
+ printf("Can't find empty command slot!\n");
+ return 0;
+ }
+
+ /* Check xfer length */
+ if (buf_len > MAX_BYTES_PER_TRANS) {
+ printf("Max transfer length is %dB\n\r",
+ MAX_BYTES_PER_TRANS);
+ return 0;
+ }
+
+ memcpy((u8 *)(pp->cmd_tbl), cfis, sizeof(struct sata_fis_h2d));
+ if (buf && buf_len)
+ sg_count = ahci_fill_sg(probe_ent, port, buf, buf_len);
+ opts = (sizeof(struct sata_fis_h2d) >> 2) | (sg_count << 16);
+ if (is_write)
+ opts |= 0x40;
+ ahci_fill_cmd_slot(pp, cmd_slot, opts);
+
+ writel_with_flush(1 << cmd_slot, &(port_mmio->ci));
+
+ if (waiting_for_cmd_completed((u8 *)&(port_mmio->ci),
+ 10000, 0x1 << cmd_slot)) {
+ printf("timeout exit!\n");
+ return -1;
+ }
+ debug("ahci_exec_ata_cmd: %d byte transferred.\n",
+ pp->cmd_slot->status);
+
+ return buf_len;
+}
+
+static void ahci_set_feature(u8 dev, u8 port)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ struct sata_fis_h2d h2d, *cfis = &h2d;
+
+ memset(cfis, 0, sizeof(struct sata_fis_h2d));
+ cfis->fis_type = SATA_FIS_TYPE_REGISTER_H2D;
+ cfis->pm_port_c = 1 << 7;
+ cfis->command = ATA_CMD_SET_FEATURES;
+ cfis->features = SETFEATURES_XFER;
+ cfis->sector_count = ffs(probe_ent->udma_mask + 1) + 0x3e;
+
+ ahci_exec_ata_cmd(probe_ent, port, cfis, NULL, 0, READ_CMD);
+}
+
+static int ahci_port_start(struct ahci_probe_ent *probe_ent,
+ u8 port)
+{
+ struct ahci_ioports *pp = &(probe_ent->port[port]);
+ struct sata_port_regs *port_mmio =
+ (struct sata_port_regs *)pp->port_mmio;
+ u32 port_status;
+ u32 mem;
+ int timeout = 10000000;
+
+ debug("Enter start port: %d\n", port);
+ port_status = readl(&(port_mmio->ssts));
+ debug("Port %d status: %x\n", port, port_status);
+ if ((port_status & 0xf) != 0x03) {
+ printf("No Link on this port!\n");
+ return -1;
+ }
+
+ mem = (u32)malloc(AHCI_PORT_PRIV_DMA_SZ + 1024);
+ if (!mem) {
+ free(pp);
+ printf("No mem for table!\n");
+ return -ENOMEM;
+ }
+
+ mem = (mem + 0x400) & (~0x3ff); /* Aligned to 1024-bytes */
+ memset((u8 *)mem, 0, AHCI_PORT_PRIV_DMA_SZ);
+
+ /*
+ * First item in chunk of DMA memory: 32-slot command table,
+ * 32 bytes each in size
+ */
+ pp->cmd_slot = (struct ahci_cmd_hdr *)mem;
+ debug("cmd_slot = 0x%x\n", (unsigned int) pp->cmd_slot);
+ mem += (AHCI_CMD_SLOT_SZ * DWC_AHSATA_MAX_CMD_SLOTS);
+
+ /*
+ * Second item: Received-FIS area, 256-Byte aligned
+ */
+ pp->rx_fis = mem;
+ mem += AHCI_RX_FIS_SZ;
+
+ /*
+ * Third item: data area for storing a single command
+ * and its scatter-gather table
+ */
+ pp->cmd_tbl = mem;
+ debug("cmd_tbl_dma = 0x%x\n", pp->cmd_tbl);
+
+ mem += AHCI_CMD_TBL_HDR;
+
+ writel_with_flush(0x00004444, &(port_mmio->dmacr));
+ pp->cmd_tbl_sg = (struct ahci_sg *)mem;
+ writel_with_flush((u32)pp->cmd_slot, &(port_mmio->clb));
+ writel_with_flush(pp->rx_fis, &(port_mmio->fb));
+
+ /* Enable FRE */
+ writel_with_flush((SATA_PORT_CMD_FRE | readl(&(port_mmio->cmd))),
+ &(port_mmio->cmd));
+
+ /* Wait device ready */
+ while ((readl(&(port_mmio->tfd)) & (SATA_PORT_TFD_STS_ERR |
+ SATA_PORT_TFD_STS_DRQ | SATA_PORT_TFD_STS_BSY))
+ && --timeout)
+ ;
+ if (timeout <= 0) {
+ debug("Device not ready for BSY, DRQ and"
+ "ERR in TFD!\n");
+ return -1;
+ }
+
+ writel_with_flush(PORT_CMD_ICC_ACTIVE | PORT_CMD_FIS_RX |
+ PORT_CMD_POWER_ON | PORT_CMD_SPIN_UP |
+ PORT_CMD_START, &(port_mmio->cmd));
+
+ debug("Exit start port %d\n", port);
+
+ return 0;
+}
+
+int init_sata(int dev)
+{
+ int i;
+ u32 linkmap;
+ struct ahci_probe_ent *probe_ent = NULL;
+
+ if (dev < 0 || dev > (CONFIG_SYS_SATA_MAX_DEVICE - 1)) {
+ printf("The sata index %d is out of ranges\n\r", dev);
+ return -1;
+ }
+
+ ahci_init_one(dev);
+
+ probe_ent = (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ linkmap = probe_ent->link_port_map;
+
+ if (0 == linkmap) {
+ printf("No port device detected!\n");
+ return 1;
+ }
+
+ for (i = 0; i < probe_ent->n_ports; i++) {
+ if ((linkmap >> i) && ((linkmap >> i) & 0x01)) {
+ if (ahci_port_start(probe_ent, (u8)i)) {
+ printf("Can not start port %d\n", i);
+ return 1;
+ }
+ probe_ent->hard_port_no = i;
+ break;
+ }
+ }
+
+ return 0;
+}
+
+static void dwc_ahsata_print_info(int dev)
+{
+ block_dev_desc_t *pdev = &(sata_dev_desc[dev]);
+
+ printf("SATA Device Info:\n\r");
+#ifdef CONFIG_SYS_64BIT_LBA
+ printf("S/N: %s\n\rProduct model number: %s\n\r"
+ "Firmware version: %s\n\rCapacity: %lld sectors\n\r",
+ pdev->product, pdev->vendor, pdev->revision, pdev->lba);
+#else
+ printf("S/N: %s\n\rProduct model number: %s\n\r"
+ "Firmware version: %s\n\rCapacity: %ld sectors\n\r",
+ pdev->product, pdev->vendor, pdev->revision, pdev->lba);
+#endif
+}
+
+static void dwc_ahsata_identify(int dev, u16 *id)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ struct sata_fis_h2d h2d, *cfis = &h2d;
+ u8 port = probe_ent->hard_port_no;
+
+ memset(cfis, 0, sizeof(struct sata_fis_h2d));
+
+ cfis->fis_type = SATA_FIS_TYPE_REGISTER_H2D;
+ cfis->pm_port_c = 0x80; /* is command */
+ cfis->command = ATA_CMD_ID_ATA;
+
+ ahci_exec_ata_cmd(probe_ent, port, cfis,
+ (u8 *)id, ATA_ID_WORDS * 2, READ_CMD);
+ ata_swap_buf_le16(id, ATA_ID_WORDS);
+}
+
+static void dwc_ahsata_xfer_mode(int dev, u16 *id)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+
+ probe_ent->pio_mask = id[ATA_ID_PIO_MODES];
+ probe_ent->udma_mask = id[ATA_ID_UDMA_MODES];
+ debug("pio %04x, udma %04x\n\r",
+ probe_ent->pio_mask, probe_ent->udma_mask);
+}
+
+static u32 dwc_ahsata_rw_cmd(int dev, u32 start, u32 blkcnt,
+ u8 *buffer, int is_write)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ struct sata_fis_h2d h2d, *cfis = &h2d;
+ u8 port = probe_ent->hard_port_no;
+ u32 block;
+
+ block = start;
+
+ memset(cfis, 0, sizeof(struct sata_fis_h2d));
+
+ cfis->fis_type = SATA_FIS_TYPE_REGISTER_H2D;
+ cfis->pm_port_c = 0x80; /* is command */
+ cfis->command = (is_write) ? ATA_CMD_WRITE : ATA_CMD_READ;
+ cfis->device = ATA_LBA;
+
+ cfis->device |= (block >> 24) & 0xf;
+ cfis->lba_high = (block >> 16) & 0xff;
+ cfis->lba_mid = (block >> 8) & 0xff;
+ cfis->lba_low = block & 0xff;
+ cfis->sector_count = (u8)(blkcnt & 0xff);
+
+ if (ahci_exec_ata_cmd(probe_ent, port, cfis,
+ buffer, ATA_SECT_SIZE * blkcnt, is_write) > 0)
+ return blkcnt;
+ else
+ return 0;
+}
+
+void dwc_ahsata_flush_cache(int dev)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ struct sata_fis_h2d h2d, *cfis = &h2d;
+ u8 port = probe_ent->hard_port_no;
+
+ memset(cfis, 0, sizeof(struct sata_fis_h2d));
+
+ cfis->fis_type = SATA_FIS_TYPE_REGISTER_H2D;
+ cfis->pm_port_c = 0x80; /* is command */
+ cfis->command = ATA_CMD_FLUSH;
+
+ ahci_exec_ata_cmd(probe_ent, port, cfis, NULL, 0, 0);
+}
+
+static u32 dwc_ahsata_rw_cmd_ext(int dev, u32 start, lbaint_t blkcnt,
+ u8 *buffer, int is_write)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ struct sata_fis_h2d h2d, *cfis = &h2d;
+ u8 port = probe_ent->hard_port_no;
+ u64 block;
+
+ block = (u64)start;
+
+ memset(cfis, 0, sizeof(struct sata_fis_h2d));
+
+ cfis->fis_type = SATA_FIS_TYPE_REGISTER_H2D;
+ cfis->pm_port_c = 0x80; /* is command */
+
+ cfis->command = (is_write) ? ATA_CMD_WRITE_EXT
+ : ATA_CMD_READ_EXT;
+
+ cfis->lba_high_exp = (block >> 40) & 0xff;
+ cfis->lba_mid_exp = (block >> 32) & 0xff;
+ cfis->lba_low_exp = (block >> 24) & 0xff;
+ cfis->lba_high = (block >> 16) & 0xff;
+ cfis->lba_mid = (block >> 8) & 0xff;
+ cfis->lba_low = block & 0xff;
+ cfis->device = ATA_LBA;
+ cfis->sector_count_exp = (blkcnt >> 8) & 0xff;
+ cfis->sector_count = blkcnt & 0xff;
+
+ if (ahci_exec_ata_cmd(probe_ent, port, cfis, buffer,
+ ATA_SECT_SIZE * blkcnt, is_write) > 0)
+ return blkcnt;
+ else
+ return 0;
+}
+
+u32 dwc_ahsata_rw_ncq_cmd(int dev, u32 start, lbaint_t blkcnt,
+ u8 *buffer, int is_write)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ struct sata_fis_h2d h2d, *cfis = &h2d;
+ u8 port = probe_ent->hard_port_no;
+ u64 block;
+
+ if (sata_dev_desc[dev].lba48 != 1) {
+ printf("execute FPDMA command on non-LBA48 hard disk\n\r");
+ return -1;
+ }
+
+ block = (u64)start;
+
+ memset(cfis, 0, sizeof(struct sata_fis_h2d));
+
+ cfis->fis_type = SATA_FIS_TYPE_REGISTER_H2D;
+ cfis->pm_port_c = 0x80; /* is command */
+
+ cfis->command = (is_write) ? ATA_CMD_FPDMA_WRITE
+ : ATA_CMD_FPDMA_READ;
+
+ cfis->lba_high_exp = (block >> 40) & 0xff;
+ cfis->lba_mid_exp = (block >> 32) & 0xff;
+ cfis->lba_low_exp = (block >> 24) & 0xff;
+ cfis->lba_high = (block >> 16) & 0xff;
+ cfis->lba_mid = (block >> 8) & 0xff;
+ cfis->lba_low = block & 0xff;
+
+ cfis->device = ATA_LBA;
+ cfis->features_exp = (blkcnt >> 8) & 0xff;
+ cfis->features = blkcnt & 0xff;
+
+ /* Use the latest queue */
+ ahci_exec_ata_cmd(probe_ent, port, cfis,
+ buffer, ATA_SECT_SIZE * blkcnt, is_write);
+
+ return blkcnt;
+}
+
+void dwc_ahsata_flush_cache_ext(int dev)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ struct sata_fis_h2d h2d, *cfis = &h2d;
+ u8 port = probe_ent->hard_port_no;
+
+ memset(cfis, 0, sizeof(struct sata_fis_h2d));
+
+ cfis->fis_type = SATA_FIS_TYPE_REGISTER_H2D;
+ cfis->pm_port_c = 0x80; /* is command */
+ cfis->command = ATA_CMD_FLUSH_EXT;
+
+ ahci_exec_ata_cmd(probe_ent, port, cfis, NULL, 0, 0);
+}
+
+static void dwc_ahsata_init_wcache(int dev, u16 *id)
+{
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+
+ if (ata_id_has_wcache(id) && ata_id_wcache_enabled(id))
+ probe_ent->flags |= SATA_FLAG_WCACHE;
+ if (ata_id_has_flush(id))
+ probe_ent->flags |= SATA_FLAG_FLUSH;
+ if (ata_id_has_flush_ext(id))
+ probe_ent->flags |= SATA_FLAG_FLUSH_EXT;
+}
+
+u32 ata_low_level_rw_lba48(int dev, u32 blknr, lbaint_t blkcnt,
+ void *buffer, int is_write)
+{
+ u32 start, blks;
+ u8 *addr;
+ int max_blks;
+
+ start = blknr;
+ blks = blkcnt;
+ addr = (u8 *)buffer;
+
+ max_blks = ATA_MAX_SECTORS_LBA48;
+
+ do {
+ if (blks > max_blks) {
+ if (max_blks != dwc_ahsata_rw_cmd_ext(dev, start,
+ max_blks, addr, is_write))
+ return 0;
+ start += max_blks;
+ blks -= max_blks;
+ addr += ATA_SECT_SIZE * max_blks;
+ } else {
+ if (blks != dwc_ahsata_rw_cmd_ext(dev, start,
+ blks, addr, is_write))
+ return 0;
+ start += blks;
+ blks = 0;
+ addr += ATA_SECT_SIZE * blks;
+ }
+ } while (blks != 0);
+
+ return blkcnt;
+}
+
+u32 ata_low_level_rw_lba28(int dev, u32 blknr, lbaint_t blkcnt,
+ void *buffer, int is_write)
+{
+ u32 start, blks;
+ u8 *addr;
+ int max_blks;
+
+ start = blknr;
+ blks = blkcnt;
+ addr = (u8 *)buffer;
+
+ max_blks = ATA_MAX_SECTORS;
+ do {
+ if (blks > max_blks) {
+ if (max_blks != dwc_ahsata_rw_cmd(dev, start,
+ max_blks, addr, is_write))
+ return 0;
+ start += max_blks;
+ blks -= max_blks;
+ addr += ATA_SECT_SIZE * max_blks;
+ } else {
+ if (blks != dwc_ahsata_rw_cmd(dev, start,
+ blks, addr, is_write))
+ return 0;
+ start += blks;
+ blks = 0;
+ addr += ATA_SECT_SIZE * blks;
+ }
+ } while (blks != 0);
+
+ return blkcnt;
+}
+
+/*
+ * SATA interface between low level driver and command layer
+ */
+ulong sata_read(int dev, unsigned long blknr, lbaint_t blkcnt, void *buffer)
+{
+ u32 rc;
+
+ if (sata_dev_desc[dev].lba48)
+ rc = ata_low_level_rw_lba48(dev, blknr, blkcnt,
+ buffer, READ_CMD);
+ else
+ rc = ata_low_level_rw_lba28(dev, blknr, blkcnt,
+ buffer, READ_CMD);
+ return rc;
+}
+
+ulong sata_write(int dev, unsigned long blknr, lbaint_t blkcnt, void *buffer)
+{
+ u32 rc;
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ u32 flags = probe_ent->flags;
+
+ if (sata_dev_desc[dev].lba48) {
+ rc = ata_low_level_rw_lba48(dev, blknr, blkcnt,
+ buffer, WRITE_CMD);
+ if ((flags & SATA_FLAG_WCACHE) &&
+ (flags & SATA_FLAG_FLUSH_EXT))
+ dwc_ahsata_flush_cache_ext(dev);
+ } else {
+ rc = ata_low_level_rw_lba28(dev, blknr, blkcnt,
+ buffer, WRITE_CMD);
+ if ((flags & SATA_FLAG_WCACHE) &&
+ (flags & SATA_FLAG_FLUSH))
+ dwc_ahsata_flush_cache(dev);
+ }
+ return rc;
+}
+
+int scan_sata(int dev)
+{
+ u8 serial[ATA_ID_SERNO_LEN + 1] = { 0 };
+ u8 firmware[ATA_ID_FW_REV_LEN + 1] = { 0 };
+ u8 product[ATA_ID_PROD_LEN + 1] = { 0 };
+ u16 *id;
+ u64 n_sectors;
+ struct ahci_probe_ent *probe_ent =
+ (struct ahci_probe_ent *)sata_dev_desc[dev].priv;
+ u8 port = probe_ent->hard_port_no;
+ block_dev_desc_t *pdev = &(sata_dev_desc[dev]);
+
+ id = (u16 *)malloc(ATA_ID_WORDS * 2);
+ if (!id) {
+ printf("id malloc failed\n\r");
+ return -1;
+ }
+
+ /* Identify device to get information */
+ dwc_ahsata_identify(dev, id);
+
+ /* Serial number */
+ ata_id_c_string(id, serial, ATA_ID_SERNO, sizeof(serial));
+ memcpy(pdev->product, serial, sizeof(serial));
+
+ /* Firmware version */
+ ata_id_c_string(id, firmware, ATA_ID_FW_REV, sizeof(firmware));
+ memcpy(pdev->revision, firmware, sizeof(firmware));
+
+ /* Product model */
+ ata_id_c_string(id, product, ATA_ID_PROD, sizeof(product));
+ memcpy(pdev->vendor, product, sizeof(product));
+
+ /* Totoal sectors */
+ n_sectors = ata_id_n_sectors(id);
+ pdev->lba = (u32)n_sectors;
+
+ pdev->type = DEV_TYPE_HARDDISK;
+ pdev->blksz = ATA_SECT_SIZE;
+ pdev->lun = 0 ;
+
+ /* Check if support LBA48 */
+ if (ata_id_has_lba48(id)) {
+ pdev->lba48 = 1;
+ debug("Device support LBA48\n\r");
+ }
+
+ /* Get the NCQ queue depth from device */
+ probe_ent->flags &= (~SATA_FLAG_Q_DEP_MASK);
+ probe_ent->flags |= ata_id_queue_depth(id);
+
+ /* Get the xfer mode from device */
+ dwc_ahsata_xfer_mode(dev, id);
+
+ /* Get the write cache status from device */
+ dwc_ahsata_init_wcache(dev, id);
+
+ /* Set the xfer mode to highest speed */
+ ahci_set_feature(dev, port);
+
+ free((void *)id);
+
+ dwc_ahsata_print_info(dev);
+
+ is_ready = 1;
+
+ return 0;
+}
diff --git a/drivers/block/dwc_ahsata.h b/drivers/block/dwc_ahsata.h
new file mode 100644
index 0000000000..84860ea492
--- /dev/null
+++ b/drivers/block/dwc_ahsata.h
@@ -0,0 +1,335 @@
+/*
+ * Copyright (C) 2010 Freescale Semiconductor, Inc.
+ * Terry Lv <r65388@freescale.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __FSL_SATA_H__
+#define __FSL_SATA_H__
+
+#define DWC_AHSATA_MAX_CMD_SLOTS 32
+
+/* Max host controller numbers */
+#define SATA_HC_MAX_NUM 4
+/* Max command queue depth per host controller */
+#define DWC_AHSATA_HC_MAX_CMD 32
+/* Max port number per host controller */
+#define SATA_HC_MAX_PORT 16
+
+/* Generic Host Register */
+
+/* HBA Capabilities Register */
+#define SATA_HOST_CAP_S64A 0x80000000
+#define SATA_HOST_CAP_SNCQ 0x40000000
+#define SATA_HOST_CAP_SSNTF 0x20000000
+#define SATA_HOST_CAP_SMPS 0x10000000
+#define SATA_HOST_CAP_SSS 0x08000000
+#define SATA_HOST_CAP_SALP 0x04000000
+#define SATA_HOST_CAP_SAL 0x02000000
+#define SATA_HOST_CAP_SCLO 0x01000000
+#define SATA_HOST_CAP_ISS_MASK 0x00f00000
+#define SATA_HOST_CAP_ISS_OFFSET 20
+#define SATA_HOST_CAP_SNZO 0x00080000
+#define SATA_HOST_CAP_SAM 0x00040000
+#define SATA_HOST_CAP_SPM 0x00020000
+#define SATA_HOST_CAP_PMD 0x00008000
+#define SATA_HOST_CAP_SSC 0x00004000
+#define SATA_HOST_CAP_PSC 0x00002000
+#define SATA_HOST_CAP_NCS 0x00001f00
+#define SATA_HOST_CAP_CCCS 0x00000080
+#define SATA_HOST_CAP_EMS 0x00000040
+#define SATA_HOST_CAP_SXS 0x00000020
+#define SATA_HOST_CAP_NP_MASK 0x0000001f
+
+/* Global HBA Control Register */
+#define SATA_HOST_GHC_AE 0x80000000
+#define SATA_HOST_GHC_IE 0x00000002
+#define SATA_HOST_GHC_HR 0x00000001
+
+/* Interrupt Status Register */
+
+/* Ports Implemented Register */
+
+/* AHCI Version Register */
+#define SATA_HOST_VS_MJR_MASK 0xffff0000
+#define SATA_HOST_VS_MJR_OFFSET 16
+#define SATA_HOST_VS_MJR_MNR 0x0000ffff
+
+/* Command Completion Coalescing Control */
+#define SATA_HOST_CCC_CTL_TV_MASK 0xffff0000
+#define SATA_HOST_CCC_CTL_TV_OFFSET 16
+#define SATA_HOST_CCC_CTL_CC_MASK 0x0000ff00
+#define SATA_HOST_CCC_CTL_CC_OFFSET 8
+#define SATA_HOST_CCC_CTL_INT_MASK 0x000000f8
+#define SATA_HOST_CCC_CTL_INT_OFFSET 3
+#define SATA_HOST_CCC_CTL_EN 0x00000001
+
+/* Command Completion Coalescing Ports */
+
+/* HBA Capabilities Extended Register */
+#define SATA_HOST_CAP2_APST 0x00000004
+
+/* BIST Activate FIS Register */
+#define SATA_HOST_BISTAFR_NCP_MASK 0x0000ff00
+#define SATA_HOST_BISTAFR_NCP_OFFSET 8
+#define SATA_HOST_BISTAFR_PD_MASK 0x000000ff
+#define SATA_HOST_BISTAFR_PD_OFFSET 0
+
+/* BIST Control Register */
+#define SATA_HOST_BISTCR_FERLB 0x00100000
+#define SATA_HOST_BISTCR_TXO 0x00040000
+#define SATA_HOST_BISTCR_CNTCLR 0x00020000
+#define SATA_HOST_BISTCR_NEALB 0x00010000
+#define SATA_HOST_BISTCR_LLC_MASK 0x00000700
+#define SATA_HOST_BISTCR_LLC_OFFSET 8
+#define SATA_HOST_BISTCR_ERREN 0x00000040
+#define SATA_HOST_BISTCR_FLIP 0x00000020
+#define SATA_HOST_BISTCR_PV 0x00000010
+#define SATA_HOST_BISTCR_PATTERN_MASK 0x0000000f
+#define SATA_HOST_BISTCR_PATTERN_OFFSET 0
+
+/* BIST FIS Count Register */
+
+/* BIST Status Register */
+#define SATA_HOST_BISTSR_FRAMERR_MASK 0x0000ffff
+#define SATA_HOST_BISTSR_FRAMERR_OFFSET 0
+#define SATA_HOST_BISTSR_BRSTERR_MASK 0x00ff0000
+#define SATA_HOST_BISTSR_BRSTERR_OFFSET 16
+
+/* BIST DWORD Error Count Register */
+
+/* OOB Register*/
+#define SATA_HOST_OOBR_WE 0x80000000
+#define SATA_HOST_OOBR_cwMin_MASK 0x7f000000
+#define SATA_HOST_OOBR_cwMAX_MASK 0x00ff0000
+#define SATA_HOST_OOBR_ciMin_MASK 0x0000ff00
+#define SATA_HOST_OOBR_ciMax_MASK 0x000000ff
+
+/* Timer 1-ms Register */
+
+/* Global Parameter 1 Register */
+#define SATA_HOST_GPARAM1R_ALIGN_M 0x80000000
+#define SATA_HOST_GPARAM1R_RX_BUFFER 0x40000000
+#define SATA_HOST_GPARAM1R_PHY_DATA_MASK 0x30000000
+#define SATA_HOST_GPARAM1R_PHY_RST 0x08000000
+#define SATA_HOST_GPARAM1R_PHY_CTRL_MASK 0x07e00000
+#define SATA_HOST_GPARAM1R_PHY_STAT_MASK 0x001f8000
+#define SATA_HOST_GPARAM1R_LATCH_M 0x00004000
+#define SATA_HOST_GPARAM1R_BIST_M 0x00002000
+#define SATA_HOST_GPARAM1R_PHY_TYPE 0x00001000
+#define SATA_HOST_GPARAM1R_RETURN_ERR 0x00000400
+#define SATA_HOST_GPARAM1R_AHB_ENDIAN_MASK 0x00000300
+#define SATA_HOST_GPARAM1R_S_HADDR 0X00000080
+#define SATA_HOST_GPARAM1R_M_HADDR 0X00000040
+
+/* Global Parameter 2 Register */
+#define SATA_HOST_GPARAM2R_DEV_CP 0x00004000
+#define SATA_HOST_GPARAM2R_DEV_MP 0x00002000
+#define SATA_HOST_GPARAM2R_DEV_ENCODE_M 0x00001000
+#define SATA_HOST_GPARAM2R_RXOOB_CLK_M 0x00000800
+#define SATA_HOST_GPARAM2R_RXOOB_M 0x00000400
+#define SATA_HOST_GPARAM2R_TX_OOB_M 0x00000200
+#define SATA_HOST_GPARAM2R_RXOOB_CLK_MASK 0x000001ff
+
+/* Port Parameter Register */
+#define SATA_HOST_PPARAMR_TX_MEM_M 0x00000200
+#define SATA_HOST_PPARAMR_TX_MEM_S 0x00000100
+#define SATA_HOST_PPARAMR_RX_MEM_M 0x00000080
+#define SATA_HOST_PPARAMR_RX_MEM_S 0x00000040
+#define SATA_HOST_PPARAMR_TXFIFO_DEPTH_MASK 0x00000038
+#define SATA_HOST_PPARAMR_RXFIFO_DEPTH_MASK 0x00000007
+
+/* Test Register */
+#define SATA_HOST_TESTR_PSEL_MASK 0x00070000
+#define SATA_HOST_TESTR_TEST_IF 0x00000001
+
+/* Port Register Descriptions */
+/* Port# Command List Base Address Register */
+#define SATA_PORT_CLB_CLB_MASK 0xfffffc00
+
+/* Port# Command List Base Address Upper 32-Bits Register */
+
+/* Port# FIS Base Address Register */
+#define SATA_PORT_FB_FB_MASK 0xfffffff0
+
+/* Port# FIS Base Address Upper 32-Bits Register */
+
+/* Port# Interrupt Status Register */
+#define SATA_PORT_IS_CPDS 0x80000000
+#define SATA_PORT_IS_TFES 0x40000000
+#define SATA_PORT_IS_HBFS 0x20000000
+#define SATA_PORT_IS_HBDS 0x10000000
+#define SATA_PORT_IS_IFS 0x08000000
+#define SATA_PORT_IS_INFS 0x04000000
+#define SATA_PORT_IS_OFS 0x01000000
+#define SATA_PORT_IS_IPMS 0x00800000
+#define SATA_PORT_IS_PRCS 0x00400000
+#define SATA_PORT_IS_DMPS 0x00000080
+#define SATA_PORT_IS_PCS 0x00000040
+#define SATA_PORT_IS_DPS 0x00000020
+#define SATA_PORT_IS_UFS 0x00000010
+#define SATA_PORT_IS_SDBS 0x00000008
+#define SATA_PORT_IS_DSS 0x00000004
+#define SATA_PORT_IS_PSS 0x00000002
+#define SATA_PORT_IS_DHRS 0x00000001
+
+/* Port# Interrupt Enable Register */
+#define SATA_PORT_IE_CPDE 0x80000000
+#define SATA_PORT_IE_TFEE 0x40000000
+#define SATA_PORT_IE_HBFE 0x20000000
+#define SATA_PORT_IE_HBDE 0x10000000
+#define SATA_PORT_IE_IFE 0x08000000
+#define SATA_PORT_IE_INFE 0x04000000
+#define SATA_PORT_IE_OFE 0x01000000
+#define SATA_PORT_IE_IPME 0x00800000
+#define SATA_PORT_IE_PRCE 0x00400000
+#define SATA_PORT_IE_DMPE 0x00000080
+#define SATA_PORT_IE_PCE 0x00000040
+#define SATA_PORT_IE_DPE 0x00000020
+#define SATA_PORT_IE_UFE 0x00000010
+#define SATA_PORT_IE_SDBE 0x00000008
+#define SATA_PORT_IE_DSE 0x00000004
+#define SATA_PORT_IE_PSE 0x00000002
+#define SATA_PORT_IE_DHRE 0x00000001
+
+/* Port# Command Register */
+#define SATA_PORT_CMD_ICC_MASK 0xf0000000
+#define SATA_PORT_CMD_ASP 0x08000000
+#define SATA_PORT_CMD_ALPE 0x04000000
+#define SATA_PORT_CMD_DLAE 0x02000000
+#define SATA_PORT_CMD_ATAPI 0x01000000
+#define SATA_PORT_CMD_APSTE 0x00800000
+#define SATA_PORT_CMD_ESP 0x00200000
+#define SATA_PORT_CMD_CPD 0x00100000
+#define SATA_PORT_CMD_MPSP 0x00080000
+#define SATA_PORT_CMD_HPCP 0x00040000
+#define SATA_PORT_CMD_PMA 0x00020000
+#define SATA_PORT_CMD_CPS 0x00010000
+#define SATA_PORT_CMD_CR 0x00008000
+#define SATA_PORT_CMD_FR 0x00004000
+#define SATA_PORT_CMD_MPSS 0x00002000
+#define SATA_PORT_CMD_CCS_MASK 0x00001f00
+#define SATA_PORT_CMD_FRE 0x00000010
+#define SATA_PORT_CMD_CLO 0x00000008
+#define SATA_PORT_CMD_POD 0x00000004
+#define SATA_PORT_CMD_SUD 0x00000002
+#define SATA_PORT_CMD_ST 0x00000001
+
+/* Port# Task File Data Register */
+#define SATA_PORT_TFD_ERR_MASK 0x0000ff00
+#define SATA_PORT_TFD_STS_MASK 0x000000ff
+#define SATA_PORT_TFD_STS_ERR 0x00000001
+#define SATA_PORT_TFD_STS_DRQ 0x00000008
+#define SATA_PORT_TFD_STS_BSY 0x00000080
+
+/* Port# Signature Register */
+
+/* Port# Serial ATA Status {SStatus} Register */
+#define SATA_PORT_SSTS_IPM_MASK 0x00000f00
+#define SATA_PORT_SSTS_SPD_MASK 0x000000f0
+#define SATA_PORT_SSTS_DET_MASK 0x0000000f
+
+/* Port# Serial ATA Control {SControl} Register */
+#define SATA_PORT_SCTL_IPM_MASK 0x00000f00
+#define SATA_PORT_SCTL_SPD_MASK 0x000000f0
+#define SATA_PORT_SCTL_DET_MASK 0x0000000f
+
+/* Port# Serial ATA Error {SError} Register */
+#define SATA_PORT_SERR_DIAG_X 0x04000000
+#define SATA_PORT_SERR_DIAG_F 0x02000000
+#define SATA_PORT_SERR_DIAG_T 0x01000000
+#define SATA_PORT_SERR_DIAG_S 0x00800000
+#define SATA_PORT_SERR_DIAG_H 0x00400000
+#define SATA_PORT_SERR_DIAG_C 0x00200000
+#define SATA_PORT_SERR_DIAG_D 0x00100000
+#define SATA_PORT_SERR_DIAG_B 0x00080000
+#define SATA_PORT_SERR_DIAG_W 0x00040000
+#define SATA_PORT_SERR_DIAG_I 0x00020000
+#define SATA_PORT_SERR_DIAG_N 0x00010000
+#define SATA_PORT_SERR_ERR_E 0x00000800
+#define SATA_PORT_SERR_ERR_P 0x00000400
+#define SATA_PORT_SERR_ERR_C 0x00000200
+#define SATA_PORT_SERR_ERR_T 0x00000100
+#define SATA_PORT_SERR_ERR_M 0x00000002
+#define SATA_PORT_SERR_ERR_I 0x00000001
+
+/* Port# Serial ATA Active {SActive} Register */
+
+/* Port# Command Issue Register */
+
+/* Port# Serial ATA Notification Register */
+
+/* Port# DMA Control Register */
+#define SATA_PORT_DMACR_RXABL_MASK 0x0000f000
+#define SATA_PORT_DMACR_TXABL_MASK 0x00000f00
+#define SATA_PORT_DMACR_RXTS_MASK 0x000000f0
+#define SATA_PORT_DMACR_TXTS_MASK 0x0000000f
+
+/* Port# PHY Control Register */
+
+/* Port# PHY Status Register */
+
+#define SATA_HC_CMD_HDR_ENTRY_SIZE sizeof(struct cmd_hdr_entry)
+
+/* DW0
+*/
+#define CMD_HDR_DI_CFL_MASK 0x0000001f
+#define CMD_HDR_DI_CFL_OFFSET 0
+#define CMD_HDR_DI_A 0x00000020
+#define CMD_HDR_DI_W 0x00000040
+#define CMD_HDR_DI_P 0x00000080
+#define CMD_HDR_DI_R 0x00000100
+#define CMD_HDR_DI_B 0x00000200
+#define CMD_HDR_DI_C 0x00000400
+#define CMD_HDR_DI_PMP_MASK 0x0000f000
+#define CMD_HDR_DI_PMP_OFFSET 12
+#define CMD_HDR_DI_PRDTL 0xffff0000
+#define CMD_HDR_DI_PRDTL_OFFSET 16
+
+/* prde_fis_len
+*/
+#define CMD_HDR_PRD_ENTRY_SHIFT 16
+#define CMD_HDR_PRD_ENTRY_MASK 0x003f0000
+#define CMD_HDR_FIS_LEN_SHIFT 2
+
+/* attribute
+*/
+#define CMD_HDR_ATTR_RES 0x00000800 /* Reserved bit, should be 1 */
+#define CMD_HDR_ATTR_VBIST 0x00000400 /* Vendor BIST */
+/* Snoop enable for all descriptor */
+#define CMD_HDR_ATTR_SNOOP 0x00000200
+#define CMD_HDR_ATTR_FPDMA 0x00000100 /* FPDMA queued command */
+#define CMD_HDR_ATTR_RESET 0x00000080 /* Reset - a SRST or device reset */
+/* BIST - require the host to enter BIST mode */
+#define CMD_HDR_ATTR_BIST 0x00000040
+#define CMD_HDR_ATTR_ATAPI 0x00000020 /* ATAPI command */
+#define CMD_HDR_ATTR_TAG 0x0000001f /* TAG mask */
+
+#define FLAGS_DMA 0x00000000
+#define FLAGS_FPDMA 0x00000001
+
+#define SATA_FLAG_Q_DEP_MASK 0x0000000f
+#define SATA_FLAG_WCACHE 0x00000100
+#define SATA_FLAG_FLUSH 0x00000200
+#define SATA_FLAG_FLUSH_EXT 0x00000400
+
+#define READ_CMD 0
+#define WRITE_CMD 1
+
+extern block_dev_desc_t sata_dev_desc[CONFIG_SYS_SATA_MAX_DEVICE];
+
+#endif /* __FSL_SATA_H__ */
diff --git a/drivers/dma/Makefile b/drivers/dma/Makefile
index 5d864b56ef..c01ffa54fe 100644
--- a/drivers/dma/Makefile
+++ b/drivers/dma/Makefile
@@ -29,6 +29,7 @@ COBJS-$(CONFIG_FSLDMAFEC) += MCD_tasksInit.o MCD_dmaApi.o MCD_tasks.o
COBJS-$(CONFIG_APBH_DMA) += apbh_dma.o
COBJS-$(CONFIG_FSL_DMA) += fsl_dma.o
COBJS-$(CONFIG_OMAP3_DMA) += omap3_dma.o
+COBJS-$(CONFIG_NAND_RDA_DMA) += rda_dma.o
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/dma/rda_dma.c b/drivers/dma/rda_dma.c
new file mode 100644
index 0000000000..c7f74c9930
--- /dev/null
+++ b/drivers/dma/rda_dma.c
@@ -0,0 +1,143 @@
+/***************************************************************
+*
+* Copyright(C) RDA Micro Company.,2012
+* All Rights Reserved. Confidential
+*
+****************************************************************
+*
+* Project: RDA8810
+* File Name: drivers/dma/rda_dma.c
+*
+* Author: Jason Tao
+* Creation Date: 2012-11-15
+*
+*****************************************************************
+*
+* Implementation of functions of DMA
+*
+*****************************************************************
+*/
+
+#include <common.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/dma.h>
+#include <asm/io.h>
+#include <asm/errno.h>
+#include <linux/compiler.h>
+
+/* 0x20820000 */
+static void __iomem *dma_base = (void __iomem *)RDA_DMA_BASE;
+
+static inline void __dma_write(u32 val, u32 offset, u8 ch)
+{
+ __raw_writel(val, dma_base + offset);
+}
+
+static inline u32 __dma_read(u32 offset, u8 ch)
+{
+ u32 val;
+
+ val = __raw_readl(dma_base + offset);
+ return val;
+}
+
+int rda_set_dma_params(u8 ch, struct rda_dma_chan_params *params)
+{
+ dma_addr_t src;
+ dma_addr_t dst;
+ u32 size;
+ u32 mode;
+
+ if (!params) {
+ printf("rda8810 dma : Invalid parameter!\n");
+ return -EINVAL;
+ }
+
+ src = params->src_addr;
+ dst = params->dst_addr;
+ size = params->xfer_size;
+ mode = (params->dma_mode & RDA_DMA_MODE_MASK);
+#if 0
+ printf("[rda_dma] : src = 0x%08x, dst = 0x%08x, size = 0x%x\n", src,
+ dst, size);
+#endif /* #if 0 */
+ switch (mode) {
+ case RDA_DMA_FW_MODE:
+ /*
+ * DMA transits data by a word(4 bytes).
+ * The mask is only for NANDFC that supports no more than 2048 words(8192 bytes),
+ * but our address's unit is byte. So we have to mask 0x1FFF.
+ */
+ dst &= 0x1FFF;
+ break;
+
+ case RDA_DMA_FR_MODE:
+ src &= 0x1FFF;
+ break;
+
+ case RDA_DMA_NOR_MODE:
+ /* Nothing to do */
+ break;
+
+ default:
+ printf("[rda8810 dma] : Invalid mode of dma!\r\n");
+ return -EINVAL;
+ }
+
+ /* Fill src address */
+ __dma_write(src, RDA_DMA_SRC_REG, ch);
+ /* Fill dst address */
+ __dma_write(dst, RDA_DMA_DST_REG, ch);
+ /* Fill size */
+ __dma_write(size, RDA_DMA_XFER_SIZE_REG, ch);
+
+ /* Set ctl flag */
+ __dma_write(mode, RDA_DMA_CTL_REG, ch);
+
+ return 0;
+}
+
+void rda_start_dma(u8 ch)
+{
+ u32 reg = 0;
+
+ reg = __dma_read(RDA_DMA_CTL_REG, ch);
+
+ reg |= RDA_DMA_CTL_EN;
+ __dma_write(reg, RDA_DMA_CTL_REG, ch);
+
+ return;
+}
+
+void rda_stop_dma(u8 ch)
+{
+ u32 reg = RDA_DMA_CTL_INT_CLE;
+
+ __dma_write(reg, RDA_DMA_CTL_REG, ch);
+ return;
+}
+
+void rda_poll_dma(u8 ch)
+{
+ u32 reg = 0;
+
+ while (!((reg = __dma_read(RDA_DMA_STATUS_REG, ch)) & RDA_DMA_STA_INT)) {
+ asm("nop");
+ }
+
+ return;
+}
+
+int rda_request_dma(u8 * dma_ch_out)
+{
+ /* Clear interrupt flag and disble dma. */
+ rda_stop_dma(0);
+ *dma_ch_out = 0;
+
+ return 0;
+}
+
+void rda_free_dma(u8 ch)
+{
+ return;
+}
diff --git a/drivers/gpio/mxc_gpio.c b/drivers/gpio/mxc_gpio.c
index f1b1c16b1b..661553552e 100644
--- a/drivers/gpio/mxc_gpio.c
+++ b/drivers/gpio/mxc_gpio.c
@@ -41,7 +41,8 @@ static unsigned long gpio_ports[] = {
[0] = GPIO1_BASE_ADDR,
[1] = GPIO2_BASE_ADDR,
[2] = GPIO3_BASE_ADDR,
-#if defined(CONFIG_MX51) || defined(CONFIG_MX53) || defined(CONFIG_MX6Q)
+#if defined(CONFIG_MX25) || defined(CONFIG_MX51) || defined(CONFIG_MX53) || \
+ defined(CONFIG_MX6Q)
[3] = GPIO4_BASE_ADDR,
#endif
#if defined(CONFIG_MX53) || defined(CONFIG_MX6Q)
diff --git a/drivers/i2c/Makefile b/drivers/i2c/Makefile
index f86e46c111..5dbdbe3672 100644
--- a/drivers/i2c/Makefile
+++ b/drivers/i2c/Makefile
@@ -27,6 +27,7 @@ LIB := $(obj)libi2c.o
COBJS-$(CONFIG_BFIN_TWI_I2C) += bfin-twi_i2c.o
COBJS-$(CONFIG_DRIVER_DAVINCI_I2C) += davinci_i2c.o
+COBJS-$(CONFIG_DW_I2C) += designware_i2c.o
COBJS-$(CONFIG_FSL_I2C) += fsl_i2c.o
COBJS-$(CONFIG_I2C_MVTWSI) += mvtwsi.o
COBJS-$(CONFIG_I2C_MV) += mv_i2c.o
@@ -40,11 +41,11 @@ COBJS-$(CONFIG_PPC4XX_I2C) += ppc4xx_i2c.o
COBJS-$(CONFIG_DRIVER_S3C24X0_I2C) += s3c24x0_i2c.o
COBJS-$(CONFIG_S3C44B0_I2C) += s3c44b0_i2c.o
COBJS-$(CONFIG_SOFT_I2C) += soft_i2c.o
-COBJS-$(CONFIG_SPEAR_I2C) += spr_i2c.o
COBJS-$(CONFIG_TEGRA_I2C) += tegra_i2c.o
COBJS-$(CONFIG_TSI108_I2C) += tsi108_i2c.o
COBJS-$(CONFIG_U8500_I2C) += u8500_i2c.o
COBJS-$(CONFIG_SH_I2C) += sh_i2c.o
+COBJS-$(CONFIG_SH_SH7734_I2C) += sh_sh7734_i2c.o
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/i2c/spr_i2c.c b/drivers/i2c/designware_i2c.c
index eabfe843f7..6d118acec4 100644
--- a/drivers/i2c/spr_i2c.c
+++ b/drivers/i2c/designware_i2c.c
@@ -24,7 +24,7 @@
#include <common.h>
#include <asm/io.h>
#include <asm/arch/hardware.h>
-#include <asm/arch/spr_i2c.h>
+#include "designware_i2c.h"
static struct i2c_regs *const i2c_regs_p =
(struct i2c_regs *)CONFIG_SYS_I2C_BASE;
@@ -40,6 +40,13 @@ static void set_speed(int i2c_spd)
unsigned int cntl;
unsigned int hcnt, lcnt;
unsigned int high, low;
+ unsigned int enbl;
+
+ /* to set speed cltr must be disabled */
+ enbl = readl(&i2c_regs_p->ic_enable);
+ enbl &= ~IC_ENABLE_0B;
+ writel(enbl, &i2c_regs_p->ic_enable);
+
cntl = (readl(&i2c_regs_p->ic_con) & (~IC_CON_SPD_MSK));
@@ -71,6 +78,10 @@ static void set_speed(int i2c_spd)
lcnt = (IC_CLK * low) / NANO_TO_MICRO;
writel(lcnt, &i2c_regs_p->ic_fs_scl_lcnt);
+
+ /* re-enable i2c ctrl back now that speed is set */
+ enbl |= IC_ENABLE_0B;
+ writel(enbl, &i2c_regs_p->ic_enable);
}
/*
@@ -113,7 +124,7 @@ int i2c_get_bus_speed(void)
/*
* i2c_init - Init function
* @speed: required i2c speed
- * @slaveadd: slave address for the spear device
+ * @slaveadd: slave address for the device
*
* Initialization function.
*/
diff --git a/arch/arm/include/asm/arch-spear/spr_i2c.h b/drivers/i2c/designware_i2c.h
index 7521ebc6cf..03b520ed43 100644
--- a/arch/arm/include/asm/arch-spear/spr_i2c.h
+++ b/drivers/i2c/designware_i2c.h
@@ -21,8 +21,8 @@
* MA 02111-1307 USA
*/
-#ifndef __SPR_I2C_H_
-#define __SPR_I2C_H_
+#ifndef __DW_I2C_H_
+#define __DW_I2C_H_
struct i2c_regs {
u32 ic_con;
@@ -143,4 +143,4 @@ struct i2c_regs {
#define I2C_FAST_SPEED 400000
#define I2C_STANDARD_SPEED 100000
-#endif /* __SPR_I2C_H_ */
+#endif /* __DW_I2C_H_ */
diff --git a/drivers/i2c/sh_sh7734_i2c.c b/drivers/i2c/sh_sh7734_i2c.c
new file mode 100644
index 0000000000..9da173d31e
--- /dev/null
+++ b/drivers/i2c/sh_sh7734_i2c.c
@@ -0,0 +1,387 @@
+/*
+ * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
+ * Copyright (C) 2012 Renesas Solutions Corp.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <i2c.h>
+#include <asm/io.h>
+
+struct sh_i2c {
+ u8 iccr1;
+ u8 iccr2;
+ u8 icmr;
+ u8 icier;
+ u8 icsr;
+ u8 sar;
+ u8 icdrt;
+ u8 icdrr;
+ u8 nf2cyc;
+ u8 __pad0;
+ u8 __pad1;
+};
+
+static struct sh_i2c *base;
+static u8 iccr1_cks, nf2cyc;
+
+/* ICCR1 */
+#define SH_I2C_ICCR1_ICE (1 << 7)
+#define SH_I2C_ICCR1_RCVD (1 << 6)
+#define SH_I2C_ICCR1_MST (1 << 5)
+#define SH_I2C_ICCR1_TRS (1 << 4)
+#define SH_I2C_ICCR1_MTRS \
+ (SH_I2C_ICCR1_MST | SH_I2C_ICCR1_TRS)
+
+/* ICCR1 */
+#define SH_I2C_ICCR2_BBSY (1 << 7)
+#define SH_I2C_ICCR2_SCP (1 << 6)
+#define SH_I2C_ICCR2_SDAO (1 << 5)
+#define SH_I2C_ICCR2_SDAOP (1 << 4)
+#define SH_I2C_ICCR2_SCLO (1 << 3)
+#define SH_I2C_ICCR2_IICRST (1 << 1)
+
+#define SH_I2C_ICIER_TIE (1 << 7)
+#define SH_I2C_ICIER_TEIE (1 << 6)
+#define SH_I2C_ICIER_RIE (1 << 5)
+#define SH_I2C_ICIER_NAKIE (1 << 4)
+#define SH_I2C_ICIER_STIE (1 << 3)
+#define SH_I2C_ICIER_ACKE (1 << 2)
+#define SH_I2C_ICIER_ACKBR (1 << 1)
+#define SH_I2C_ICIER_ACKBT (1 << 0)
+
+#define SH_I2C_ICSR_TDRE (1 << 7)
+#define SH_I2C_ICSR_TEND (1 << 6)
+#define SH_I2C_ICSR_RDRF (1 << 5)
+#define SH_I2C_ICSR_NACKF (1 << 4)
+#define SH_I2C_ICSR_STOP (1 << 3)
+#define SH_I2C_ICSR_ALOVE (1 << 2)
+#define SH_I2C_ICSR_AAS (1 << 1)
+#define SH_I2C_ICSR_ADZ (1 << 0)
+
+#define IRQ_WAIT 1000
+
+static void sh_i2c_send_stop(struct sh_i2c *base)
+{
+ clrbits_8(&base->iccr2, SH_I2C_ICCR2_BBSY | SH_I2C_ICCR2_SCP);
+}
+
+static int check_icsr_bits(struct sh_i2c *base, u8 bits)
+{
+ int i;
+
+ for (i = 0; i < IRQ_WAIT; i++) {
+ if (bits & readb(&base->icsr))
+ return 0;
+ udelay(10);
+ }
+
+ return 1;
+}
+
+static int check_stop(struct sh_i2c *base)
+{
+ int ret = check_icsr_bits(base, SH_I2C_ICSR_STOP);
+ clrbits_8(&base->icsr, SH_I2C_ICSR_STOP);
+
+ return ret;
+}
+
+static int check_tend(struct sh_i2c *base, int stop)
+{
+ int ret = check_icsr_bits(base, SH_I2C_ICSR_TEND);
+
+ if (stop) {
+ clrbits_8(&base->icsr, SH_I2C_ICSR_STOP);
+ sh_i2c_send_stop(base);
+ }
+
+ clrbits_8(&base->icsr, SH_I2C_ICSR_TEND);
+ return ret;
+}
+
+static int check_tdre(struct sh_i2c *base)
+{
+ return check_icsr_bits(base, SH_I2C_ICSR_TDRE);
+}
+
+static int check_rdrf(struct sh_i2c *base)
+{
+ return check_icsr_bits(base, SH_I2C_ICSR_RDRF);
+}
+
+static int check_bbsy(struct sh_i2c *base)
+{
+ int i;
+
+ for (i = 0 ; i < IRQ_WAIT ; i++) {
+ if (!(SH_I2C_ICCR2_BBSY & readb(&base->iccr2)))
+ return 0;
+ udelay(10);
+ }
+ return 1;
+}
+
+static int check_ackbr(struct sh_i2c *base)
+{
+ int i;
+
+ for (i = 0 ; i < IRQ_WAIT ; i++) {
+ if (!(SH_I2C_ICIER_ACKBR & readb(&base->icier)))
+ return 0;
+ udelay(10);
+ }
+
+ return 1;
+}
+
+static void sh_i2c_reset(struct sh_i2c *base)
+{
+ setbits_8(&base->iccr2, SH_I2C_ICCR2_IICRST);
+
+ udelay(100);
+
+ clrbits_8(&base->iccr2, SH_I2C_ICCR2_IICRST);
+}
+
+static int i2c_set_addr(struct sh_i2c *base, u8 id, u8 reg)
+{
+ if (check_bbsy(base)) {
+ puts("i2c bus busy\n");
+ goto fail;
+ }
+
+ setbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS);
+ clrsetbits_8(&base->iccr2, SH_I2C_ICCR2_SCP, SH_I2C_ICCR2_BBSY);
+
+ writeb((id << 1), &base->icdrt);
+
+ if (check_tend(base, 0)) {
+ puts("TEND check fail...\n");
+ goto fail;
+ }
+
+ if (check_ackbr(base)) {
+ check_tend(base, 0);
+ sh_i2c_send_stop(base);
+ goto fail;
+ }
+
+ writeb(reg, &base->icdrt);
+
+ if (check_tdre(base)) {
+ puts("TDRE check fail...\n");
+ goto fail;
+ }
+
+ if (check_tend(base, 0)) {
+ puts("TEND check fail...\n");
+ goto fail;
+ }
+
+ return 0;
+fail:
+
+ return 1;
+}
+
+static int
+i2c_raw_write(struct sh_i2c *base, u8 id, u8 reg, u8 *val, int size)
+{
+ int i;
+
+ if (i2c_set_addr(base, id, reg)) {
+ puts("Fail set slave address\n");
+ return 1;
+ }
+
+ for (i = 0; i < size; i++) {
+ writeb(val[i], &base->icdrt);
+ check_tdre(base);
+ }
+
+ check_tend(base, 1);
+ check_stop(base);
+
+ udelay(100);
+
+ clrbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS);
+ clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE);
+ sh_i2c_reset(base);
+
+ return 0;
+}
+
+static u8 i2c_raw_read(struct sh_i2c *base, u8 id, u8 reg)
+{
+ u8 ret = 0;
+
+ if (i2c_set_addr(base, id, reg)) {
+ puts("Fail set slave address\n");
+ goto fail;
+ }
+
+ clrsetbits_8(&base->iccr2, SH_I2C_ICCR2_SCP, SH_I2C_ICCR2_BBSY);
+ writeb((id << 1) | 1, &base->icdrt);
+
+ if (check_tend(base, 0))
+ puts("TDRE check fail...\n");
+
+ clrsetbits_8(&base->iccr1, SH_I2C_ICCR1_TRS, SH_I2C_ICCR1_MST);
+ clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE);
+ setbits_8(&base->icier, SH_I2C_ICIER_ACKBT);
+ setbits_8(&base->iccr1, SH_I2C_ICCR1_RCVD);
+
+ /* read data (dummy) */
+ ret = readb(&base->icdrr);
+
+ if (check_rdrf(base)) {
+ puts("check RDRF error\n");
+ goto fail;
+ }
+
+ clrbits_8(&base->icsr, SH_I2C_ICSR_STOP);
+ udelay(1000);
+
+ sh_i2c_send_stop(base);
+
+ if (check_stop(base)) {
+ puts("check STOP error\n");
+ goto fail;
+ }
+
+ clrbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS);
+ clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE);
+
+ /* data read */
+ ret = readb(&base->icdrr);
+
+fail:
+ clrbits_8(&base->iccr1, SH_I2C_ICCR1_RCVD);
+
+ return ret;
+}
+
+#ifdef CONFIG_I2C_MULTI_BUS
+static unsigned int current_bus;
+
+/**
+ * i2c_set_bus_num - change active I2C bus
+ * @bus: bus index, zero based
+ * @returns: 0 on success, non-0 on failure
+ */
+int i2c_set_bus_num(unsigned int bus)
+{
+ switch (bus) {
+ case 0:
+ base = (void *)CONFIG_SH_I2C_BASE0;
+ break;
+ case 1:
+ base = (void *)CONFIG_SH_I2C_BASE1;
+ break;
+ default:
+ printf("Bad bus: %d\n", bus);
+ return -1;
+ }
+
+ current_bus = bus;
+
+ return 0;
+}
+
+/**
+ * i2c_get_bus_num - returns index of active I2C bus
+ */
+unsigned int i2c_get_bus_num(void)
+{
+ return current_bus;
+}
+#endif
+
+void i2c_init(int speed, int slaveaddr)
+{
+#ifdef CONFIG_I2C_MULTI_BUS
+ current_bus = 0;
+#endif
+ base = (struct sh_i2c *)CONFIG_SH_I2C_BASE0;
+
+ if (speed == 400000)
+ iccr1_cks = 0x07;
+ else
+ iccr1_cks = 0x0F;
+
+ nf2cyc = 1;
+
+ /* Reset */
+ sh_i2c_reset(base);
+
+ /* ICE enable and set clock */
+ writeb(SH_I2C_ICCR1_ICE | iccr1_cks, &base->iccr1);
+ writeb(nf2cyc, &base->nf2cyc);
+}
+
+/*
+ * i2c_read: - Read multiple bytes from an i2c device
+ *
+ * The higher level routines take into account that this function is only
+ * called with len < page length of the device (see configuration file)
+ *
+ * @chip: address of the chip which is to be read
+ * @addr: i2c data address within the chip
+ * @alen: length of the i2c data address (1..2 bytes)
+ * @buffer: where to write the data
+ * @len: how much byte do we want to read
+ * @return: 0 in case of success
+ */
+int i2c_read(u8 chip, u32 addr, int alen, u8 *buffer, int len)
+{
+ int i = 0;
+ for (i = 0; i < len; i++)
+ buffer[i] = i2c_raw_read(base, chip, addr + i);
+
+ return 0;
+}
+
+/*
+ * i2c_write: - Write multiple bytes to an i2c device
+ *
+ * The higher level routines take into account that this function is only
+ * called with len < page length of the device (see configuration file)
+ *
+ * @chip: address of the chip which is to be written
+ * @addr: i2c data address within the chip
+ * @alen: length of the i2c data address (1..2 bytes)
+ * @buffer: where to find the data to be written
+ * @len: how much byte do we want to read
+ * @return: 0 in case of success
+ */
+int i2c_write(u8 chip, u32 addr, int alen, u8 *buffer, int len)
+{
+ return i2c_raw_write(base, chip, addr, buffer, len);
+}
+
+/*
+ * i2c_probe: - Test if a chip answers for a given i2c address
+ *
+ * @chip: address of the chip which is searched for
+ * @return: 0 if a chip was found, -1 otherwhise
+ */
+int i2c_probe(u8 chip)
+{
+ u8 byte;
+ return i2c_read(chip, 0, 0, &byte, 1);
+}
diff --git a/drivers/i2c/tegra_i2c.c b/drivers/i2c/tegra_i2c.c
index 21f6897269..5b6ea0e759 100644
--- a/drivers/i2c/tegra_i2c.c
+++ b/drivers/i2c/tegra_i2c.c
@@ -567,3 +567,17 @@ int i2c_set_bus_num(unsigned int bus)
return 0;
}
#endif
+
+int tegra_i2c_get_dvc_bus_num(void)
+{
+ int i;
+
+ for (i = 0; i < CONFIG_SYS_MAX_I2C_BUS; i++) {
+ struct i2c_bus *bus = &i2c_controllers[i];
+
+ if (bus->inited && bus->is_dvc)
+ return i;
+ }
+
+ return -1;
+}
diff --git a/drivers/input/Makefile b/drivers/input/Makefile
index 1f4dad35b5..5c831b2611 100644
--- a/drivers/input/Makefile
+++ b/drivers/input/Makefile
@@ -26,10 +26,13 @@ include $(TOPDIR)/config.mk
LIB := $(obj)libinput.o
COBJS-$(CONFIG_I8042_KBD) += i8042.o
+COBJS-$(CONFIG_TEGRA2_KEYBOARD) += tegra-kbc.o
ifdef CONFIG_PS2KBD
COBJS-y += keyboard.o pc_keyb.o
COBJS-$(CONFIG_PS2MULT) += ps2mult.o ps2ser.o
endif
+COBJS-y += input.o
+COBJS-$(CONFIG_OF_CONTROL) += key_matrix.o
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/input/input.c b/drivers/input/input.c
new file mode 100644
index 0000000000..4eadd773b4
--- /dev/null
+++ b/drivers/input/input.c
@@ -0,0 +1,430 @@
+/*
+ * Translate key codes into ASCII
+ *
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2004 DENX Software Engineering, Wolfgang Denk, wd@denx.de
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <stdio_dev.h>
+#include <input.h>
+#include <linux/input.h>
+
+enum {
+ /* These correspond to the lights on the keyboard */
+ FLAG_NUM_LOCK = 1 << 0,
+ FLAG_CAPS_LOCK = 1 << 1,
+ FLAG_SCROLL_LOCK = 1 << 2,
+
+ /* Special flag ORed with key code to indicate release */
+ KEY_RELEASE = 1 << 15,
+ KEY_MASK = 0xfff,
+};
+
+/*
+ * These takes map key codes to ASCII. 0xff means no key, or special key.
+ * Three tables are provided - one for plain keys, one for when the shift
+ * 'modifier' key is pressed and one for when the ctrl modifier key is
+ * pressed.
+ */
+static const uchar kbd_plain_xlate[] = {
+ 0xff, 0x1b, '1', '2', '3', '4', '5', '6',
+ '7', '8', '9', '0', '-', '=', '\b', '\t', /* 0x00 - 0x0f */
+ 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
+ 'o', 'p', '[', ']', '\r', 0xff, 'a', 's', /* 0x10 - 0x1f */
+ 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';',
+ '\'', '`', 0xff, '\\', 'z', 'x', 'c', 'v', /* 0x20 - 0x2f */
+ 'b', 'n', 'm', ',' , '.', '/', 0xff, 0xff, 0xff,
+ ' ', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x30 - 0x3f */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, '7',
+ '8', '9', '-', '4', '5', '6', '+', '1', /* 0x40 - 0x4f */
+ '2', '3', '0', '.', 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x50 - 0x5F */
+ '\r', 0xff, 0xff
+};
+
+static unsigned char kbd_shift_xlate[] = {
+ 0xff, 0x1b, '!', '@', '#', '$', '%', '^',
+ '&', '*', '(', ')', '_', '+', '\b', '\t', /* 0x00 - 0x0f */
+ 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I',
+ 'O', 'P', '{', '}', '\r', 0xff, 'A', 'S', /* 0x10 - 0x1f */
+ 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':',
+ '"', '~', 0xff, '|', 'Z', 'X', 'C', 'V', /* 0x20 - 0x2f */
+ 'B', 'N', 'M', '<', '>', '?', 0xff, 0xff, 0xff,
+ ' ', 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x30 - 0x3f */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, '7',
+ '8', '9', '-', '4', '5', '6', '+', '1', /* 0x40 - 0x4f */
+ '2', '3', '0', '.', 0xff, 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x50 - 0x5F */
+ '\r', 0xff, 0xff
+};
+
+static unsigned char kbd_ctrl_xlate[] = {
+ 0xff, 0x1b, '1', 0x00, '3', '4', '5', 0x1E,
+ '7', '8', '9', '0', 0x1F, '=', '\b', '\t', /* 0x00 - 0x0f */
+ 0x11, 0x17, 0x05, 0x12, 0x14, 0x18, 0x15, 0x09,
+ 0x0f, 0x10, 0x1b, 0x1d, '\n', 0xff, 0x01, 0x13, /* 0x10 - 0x1f */
+ 0x04, 0x06, 0x08, 0x09, 0x0a, 0x0b, 0x0c, ';',
+ '\'', '~', 0x00, 0x1c, 0x1a, 0x18, 0x03, 0x16, /* 0x20 - 0x2f */
+ 0x02, 0x0e, 0x0d, '<', '>', '?', 0xff, 0xff,
+ 0xff, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x30 - 0x3f */
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, '7',
+ '8', '9', '-', '4', '5', '6', '+', '1', /* 0x40 - 0x4f */
+ '2', '3', '0', '.', 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x50 - 0x5F */
+ '\r', 0xff, 0xff
+};
+
+
+int input_queue_ascii(struct input_config *config, int ch)
+{
+ if (config->fifo_in + 1 == INPUT_BUFFER_LEN) {
+ if (!config->fifo_out)
+ return -1; /* buffer full */
+ else
+ config->fifo_in = 0;
+ } else {
+ if (config->fifo_in + 1 == config->fifo_out)
+ return -1; /* buffer full */
+ config->fifo_in++;
+ }
+ config->fifo[config->fifo_in] = (uchar)ch;
+
+ return 0;
+}
+
+int input_tstc(struct input_config *config)
+{
+ if (config->fifo_in == config->fifo_out && config->read_keys) {
+ if (!(*config->read_keys)(config))
+ return 0;
+ }
+ return config->fifo_in != config->fifo_out;
+}
+
+int input_getc(struct input_config *config)
+{
+ int err = 0;
+
+ while (config->fifo_in == config->fifo_out) {
+ if (config->read_keys)
+ err = (*config->read_keys)(config);
+ if (err)
+ return -1;
+ }
+
+ if (++config->fifo_out == INPUT_BUFFER_LEN)
+ config->fifo_out = 0;
+
+ return config->fifo[config->fifo_out];
+}
+
+/**
+ * Process a modifier/special key press or release and decide which key
+ * translation array should be used as a result.
+ *
+ * TODO: Should keep track of modifier press/release
+ *
+ * @param config Input state
+ * @param key Key code to process
+ * @param release 0 if a press, 1 if a release
+ * @return pointer to keycode->ascii translation table that should be used
+ */
+static struct input_key_xlate *process_modifier(struct input_config *config,
+ int key, int release)
+{
+ struct input_key_xlate *table;
+ int flip = -1;
+ int i;
+
+ /* Start with the main table, and see what modifiers change it */
+ assert(config->num_tables > 0);
+ table = &config->table[0];
+ for (i = 1; i < config->num_tables; i++) {
+ struct input_key_xlate *tab = &config->table[i];
+
+ if (key == tab->left_keycode || key == tab->right_keycode)
+ table = tab;
+ }
+
+ /* Handle the lighted keys */
+ if (!release) {
+ switch (key) {
+ case KEY_SCROLLLOCK:
+ flip = FLAG_SCROLL_LOCK;
+ break;
+ case KEY_NUMLOCK:
+ flip = FLAG_NUM_LOCK;
+ break;
+ case KEY_CAPSLOCK:
+ flip = FLAG_CAPS_LOCK;
+ break;
+ }
+ }
+
+ if (flip != -1) {
+ int leds = 0;
+
+ config->leds ^= flip;
+ if (config->flags & FLAG_NUM_LOCK)
+ leds |= INPUT_LED_NUM;
+ if (config->flags & FLAG_CAPS_LOCK)
+ leds |= INPUT_LED_CAPS;
+ if (config->flags & FLAG_SCROLL_LOCK)
+ leds |= INPUT_LED_SCROLL;
+ config->leds = leds;
+ }
+
+ return table;
+}
+
+/**
+ * Search an int array for a key value
+ *
+ * @param array Array to search
+ * @param count Number of elements in array
+ * @param key Key value to find
+ * @return element where value was first found, -1 if none
+ */
+static int array_search(int *array, int count, int key)
+{
+ int i;
+
+ for (i = 0; i < count; i++) {
+ if (array[i] == key)
+ return i;
+ }
+
+ return -1;
+}
+
+/**
+ * Sort an array so that those elements that exist in the ordering are
+ * first in the array, and in the same order as the ordering. The algorithm
+ * is O(count * ocount) and designed for small arrays.
+ *
+ * TODO: Move this to common / lib?
+ *
+ * @param dest Array with elements to sort, also destination array
+ * @param count Number of elements to sort
+ * @param order Array containing ordering elements
+ * @param ocount Number of ordering elements
+ * @return number of elements in dest that are in order (these will be at the
+ * start of dest).
+ */
+static int sort_array_by_ordering(int *dest, int count, int *order,
+ int ocount)
+{
+ int temp[count];
+ int dest_count;
+ int same; /* number of elements which are the same */
+ int i;
+
+ /* setup output items, copy items to be sorted into our temp area */
+ memcpy(temp, dest, count * sizeof(*dest));
+ dest_count = 0;
+
+ /* work through the ordering, move over the elements we agree on */
+ for (i = 0; i < ocount; i++) {
+ if (array_search(temp, count, order[i]) != -1)
+ dest[dest_count++] = order[i];
+ }
+ same = dest_count;
+
+ /* now move over the elements that are not in the ordering */
+ for (i = 0; i < count; i++) {
+ if (array_search(order, ocount, temp[i]) == -1)
+ dest[dest_count++] = temp[i];
+ }
+ assert(dest_count == count);
+ return same;
+}
+
+/**
+ * Check a list of key codes against the previous key scan
+ *
+ * Given a list of new key codes, we check how many of these are the same
+ * as last time.
+ *
+ * @param config Input state
+ * @param keycode List of key codes to examine
+ * @param num_keycodes Number of key codes
+ * @param same Returns number of key codes which are the same
+ */
+static int input_check_keycodes(struct input_config *config,
+ int keycode[], int num_keycodes, int *same)
+{
+ /* Select the 'plain' xlate table to start with */
+ if (!config->num_tables) {
+ debug("%s: No xlate tables: cannot decode keys\n", __func__);
+ return -1;
+ }
+
+ /* sort the keycodes into the same order as the previous ones */
+ *same = sort_array_by_ordering(keycode, num_keycodes,
+ config->prev_keycodes, config->num_prev_keycodes);
+
+ memcpy(config->prev_keycodes, keycode, num_keycodes * sizeof(int));
+ config->num_prev_keycodes = num_keycodes;
+
+ return *same != num_keycodes;
+}
+
+/**
+ * Convert a list of key codes into ASCII
+ *
+ * You must call input_check_keycodes() before this. It turns the keycode
+ * list into a list of ASCII characters which are ready to send to the
+ * input layer.
+ *
+ * Characters which were seen last time do not generate fresh ASCII output.
+ *
+ * @param config Input state
+ * @param keycode List of key codes to examine
+ * @param num_keycodes Number of key codes
+ * @param same Number of key codes which are the same
+ */
+static int input_keycodes_to_ascii(struct input_config *config,
+ int keycode[], int num_keycodes, char output_ch[], int same)
+{
+ struct input_key_xlate *table;
+ int ch_count;
+ int i;
+
+ table = &config->table[0];
+
+ /* deal with modifiers first */
+ for (i = 0; i < num_keycodes; i++) {
+ int key = keycode[i] & KEY_MASK;
+
+ if (key >= table->num_entries || table->xlate[key] == 0xff) {
+ table = process_modifier(config, key,
+ keycode[i] & KEY_RELEASE);
+ }
+ }
+
+ /* now find normal keys */
+ for (i = ch_count = 0; i < num_keycodes; i++) {
+ int key = keycode[i];
+
+ if (key < table->num_entries && i >= same) {
+ int ch = table->xlate[key];
+
+ /* If a normal key with an ASCII value, add it! */
+ if (ch != 0xff)
+ output_ch[ch_count++] = (uchar)ch;
+ }
+ }
+
+ /* ok, so return keys */
+ return ch_count;
+}
+
+int input_send_keycodes(struct input_config *config,
+ int keycode[], int num_keycodes)
+{
+ char ch[num_keycodes];
+ int count, i, same = 0;
+ int is_repeat = 0;
+ unsigned delay_ms;
+
+ config->modifiers = 0;
+ if (!input_check_keycodes(config, keycode, num_keycodes, &same)) {
+ /*
+ * Same as last time - is it time for another repeat?
+ * TODO(sjg@chromium.org) We drop repeats here and since
+ * the caller may not call in again for a while, our
+ * auto-repeat speed is not quite correct. We should
+ * insert another character if we later realise that we
+ * have missed a repeat slot.
+ */
+ is_repeat = (int)get_timer(config->next_repeat_ms) >= 0;
+ if (!is_repeat)
+ return 0;
+ }
+
+ count = input_keycodes_to_ascii(config, keycode, num_keycodes,
+ ch, is_repeat ? 0 : same);
+ for (i = 0; i < count; i++)
+ input_queue_ascii(config, ch[i]);
+ delay_ms = is_repeat ?
+ config->repeat_rate_ms :
+ config->repeat_delay_ms;
+
+ config->next_repeat_ms = get_timer(0) + delay_ms;
+ return 0;
+}
+
+int input_add_table(struct input_config *config, int left_keycode,
+ int right_keycode, const uchar *xlate, int num_entries)
+{
+ struct input_key_xlate *table;
+
+ if (config->num_tables == INPUT_MAX_MODIFIERS) {
+ debug("%s: Too many modifier tables\n", __func__);
+ return -1;
+ }
+
+ table = &config->table[config->num_tables++];
+ table->left_keycode = left_keycode;
+ table->right_keycode = right_keycode;
+ table->xlate = xlate;
+ table->num_entries = num_entries;
+
+ return 0;
+}
+
+int input_init(struct input_config *config, int leds, int repeat_delay_ms,
+ int repeat_rate_ms)
+{
+ memset(config, '\0', sizeof(*config));
+ config->leds = leds;
+ config->repeat_delay_ms = repeat_delay_ms;
+ config->repeat_rate_ms = repeat_rate_ms;
+ if (input_add_table(config, -1, -1,
+ kbd_plain_xlate, ARRAY_SIZE(kbd_plain_xlate)) ||
+ input_add_table(config, KEY_LEFTSHIFT, KEY_RIGHTSHIFT,
+ kbd_shift_xlate, ARRAY_SIZE(kbd_shift_xlate)) ||
+ input_add_table(config, KEY_LEFTCTRL, KEY_RIGHTCTRL,
+ kbd_ctrl_xlate, ARRAY_SIZE(kbd_ctrl_xlate))) {
+ debug("%s: Could not add modifier tables\n", __func__);
+ return -1;
+ }
+
+ return 0;
+}
+
+int input_stdio_register(struct stdio_dev *dev)
+{
+ int error;
+
+ error = stdio_register(dev);
+
+ /* check if this is the standard input device */
+ if (!error && strcmp(getenv("stdin"), dev->name) == 0) {
+ /* reassign the console */
+ if (OVERWRITE_CONSOLE ||
+ console_assign(stdin, dev->name))
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/drivers/input/key_matrix.c b/drivers/input/key_matrix.c
new file mode 100644
index 0000000000..84b898ff38
--- /dev/null
+++ b/drivers/input/key_matrix.c
@@ -0,0 +1,208 @@
+/*
+ * Manage Keyboard Matrices
+ *
+ * Copyright (c) 2012 The Chromium OS Authors.
+ * (C) Copyright 2004 DENX Software Engineering, Wolfgang Denk, wd@denx.de
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <fdtdec.h>
+#include <key_matrix.h>
+#include <malloc.h>
+#include <linux/input.h>
+
+/**
+ * Determine if the current keypress configuration can cause key ghosting
+ *
+ * We figure this out by seeing if we have two or more keys in the same
+ * column, as well as two or more keys in the same row.
+ *
+ * @param config Keyboard matrix config
+ * @param keys List of keys to check
+ * @param valid Number of valid keypresses to check
+ * @return 0 if no ghosting is possible, 1 if it is
+ */
+static int has_ghosting(struct key_matrix *config, struct key_matrix_key *keys,
+ int valid)
+{
+ int key_in_same_col = 0, key_in_same_row = 0;
+ int i, j;
+
+ for (i = 0; i < valid; i++) {
+ /*
+ * Find 2 keys such that one key is in the same row
+ * and the other is in the same column as the i-th key.
+ */
+ for (j = i + 1; j < valid; j++) {
+ if (keys[j].col == keys[i].col)
+ key_in_same_col = 1;
+ if (keys[j].row == keys[i].row)
+ key_in_same_row = 1;
+ }
+ }
+
+ if (key_in_same_col && key_in_same_row)
+ return 1;
+ else
+ return 0;
+}
+
+int key_matrix_decode(struct key_matrix *config, struct key_matrix_key keys[],
+ int num_keys, int keycode[], int max_keycodes)
+{
+ const u8 *keymap;
+ int valid, upto;
+ int pos;
+
+ debug("%s: num_keys = %d\n", __func__, num_keys);
+ keymap = config->plain_keycode;
+ for (valid = upto = 0; upto < num_keys; upto++) {
+ struct key_matrix_key *key = &keys[upto];
+
+ debug(" valid=%d, row=%d, col=%d\n", key->valid, key->row,
+ key->col);
+ if (!key->valid)
+ continue;
+ pos = key->row * config->num_cols + key->col;
+ if (config->fn_keycode && pos == config->fn_pos)
+ keymap = config->fn_keycode;
+
+ /* Convert the (row, col) values into a keycode */
+ if (valid < max_keycodes)
+ keycode[valid++] = keymap[pos];
+ debug(" keycode=%d\n", keymap[pos]);
+ }
+
+ /* For a ghost key config, ignore the keypresses for this iteration. */
+ if (valid >= 3 && has_ghosting(config, keys, valid)) {
+ valid = 0;
+ debug(" ghosting detected!\n");
+ }
+ debug(" %d valid keycodes found\n", valid);
+
+ return valid;
+}
+
+/**
+ * Create a new keycode map from some provided data
+ *
+ * This decodes a keycode map in the format used by the fdt, which is one
+ * word per entry, with the row, col and keycode encoded in that word.
+ *
+ * We create a (row x col) size byte array with each entry containing the
+ * keycode for that (row, col). We also search for map_keycode and return
+ * its position if found (this is used for finding the Fn key).
+ *
+ * @param config Key matrix dimensions structure
+ * @param data Keycode data
+ * @param len Number of entries in keycode table
+ * @param map_keycode Key code to find in the map
+ * @param pos Returns position of map_keycode, if found, else -1
+ * @return map Pointer to allocated map
+ */
+static uchar *create_keymap(struct key_matrix *config, u32 *data, int len,
+ int map_keycode, int *pos)
+{
+ uchar *map;
+
+ if (pos)
+ *pos = -1;
+ map = (uchar *)calloc(1, config->key_count);
+ if (!map) {
+ debug("%s: failed to malloc %d bytes\n", __func__,
+ config->key_count);
+ return NULL;
+ }
+
+ for (; len >= sizeof(u32); data++, len -= 4) {
+ u32 tmp = fdt32_to_cpu(*data);
+ int key_code, row, col;
+ int entry;
+
+ row = (tmp >> 24) & 0xff;
+ col = (tmp >> 16) & 0xff;
+ key_code = tmp & 0xffff;
+ entry = row * config->num_cols + col;
+ map[entry] = key_code;
+ if (pos && map_keycode == key_code)
+ *pos = entry;
+ }
+
+ return map;
+}
+
+int key_matrix_decode_fdt(struct key_matrix *config, const void *blob,
+ int node)
+{
+ const struct fdt_property *prop;
+ int offset;
+
+ /* Check each property name for ones that we understand */
+ for (offset = fdt_first_property_offset(blob, node);
+ offset > 0;
+ offset = fdt_next_property_offset(blob, offset)) {
+ const char *name;
+ int len;
+
+ prop = fdt_get_property_by_offset(blob, offset, NULL);
+ name = fdt_string(blob, fdt32_to_cpu(prop->nameoff));
+ len = strlen(name);
+
+ /* Name needs to match "1,<type>keymap" */
+ debug("%s: property '%s'\n", __func__, name);
+ if (strncmp(name, "1,", 2) || len < 8 ||
+ strcmp(name + len - 6, "keymap"))
+ continue;
+
+ len -= 8;
+ if (len == 0) {
+ config->plain_keycode = create_keymap(config,
+ (u32 *)prop->data, fdt32_to_cpu(prop->len),
+ KEY_FN, &config->fn_pos);
+ } else if (0 == strncmp(name + 2, "fn-", len)) {
+ config->fn_keycode = create_keymap(config,
+ (u32 *)prop->data, fdt32_to_cpu(prop->len),
+ -1, NULL);
+ } else {
+ debug("%s: unrecognised property '%s'\n", __func__,
+ name);
+ }
+ }
+ debug("%s: Decoded key maps %p, %p from fdt\n", __func__,
+ config->plain_keycode, config->fn_keycode);
+
+ if (!config->plain_keycode) {
+ debug("%s: cannot find keycode-plain map\n", __func__);
+ return -1;
+ }
+
+ return 0;
+}
+
+int key_matrix_init(struct key_matrix *config, int rows, int cols)
+{
+ memset(config, '\0', sizeof(*config));
+ config->num_rows = rows;
+ config->num_cols = cols;
+ config->key_count = rows * cols;
+ assert(config->key_count > 0);
+
+ return 0;
+}
diff --git a/drivers/input/tegra-kbc.c b/drivers/input/tegra-kbc.c
new file mode 100644
index 0000000000..f164791bee
--- /dev/null
+++ b/drivers/input/tegra-kbc.c
@@ -0,0 +1,375 @@
+/*
+ * (C) Copyright 2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <fdtdec.h>
+#include <input.h>
+#include <key_matrix.h>
+#include <stdio_dev.h>
+#include <tegra-kbc.h>
+#include <asm/io.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/funcmux.h>
+#include <asm/arch/timer.h>
+#include <linux/input.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+enum {
+ KBC_MAX_GPIO = 24,
+ KBC_MAX_KPENT = 8, /* size of keypress entry queue */
+};
+
+#define KBC_FIFO_TH_CNT_SHIFT 14
+#define KBC_DEBOUNCE_CNT_SHIFT 4
+#define KBC_CONTROL_FIFO_CNT_INT_EN (1 << 3)
+#define KBC_CONTROL_KBC_EN (1 << 0)
+#define KBC_INT_FIFO_CNT_INT_STATUS (1 << 2)
+#define KBC_KPENT_VALID (1 << 7)
+#define KBC_ST_STATUS (1 << 3)
+
+enum {
+ KBC_DEBOUNCE_COUNT = 2,
+ KBC_REPEAT_RATE_MS = 30,
+ KBC_REPEAT_DELAY_MS = 240,
+ KBC_CLOCK_KHZ = 32, /* Keyboard uses a 32KHz clock */
+};
+
+/* keyboard controller config and state */
+static struct keyb {
+ struct input_config input; /* The input layer */
+ struct key_matrix matrix; /* The key matrix layer */
+
+ struct kbc_tegra *kbc; /* tegra keyboard controller */
+ unsigned char inited; /* 1 if keyboard has been inited */
+ unsigned char first_scan; /* 1 if this is our first key scan */
+
+ /*
+ * After init we must wait a short time before polling the keyboard.
+ * This gives the tegra keyboard controller time to react after reset
+ * and lets us grab keys pressed during reset.
+ */
+ unsigned int init_dly_ms; /* Delay before we can read keyboard */
+ unsigned int start_time_ms; /* Time that we inited (in ms) */
+ unsigned int last_poll_ms; /* Time we should last polled */
+ unsigned int next_repeat_ms; /* Next time we repeat a key */
+} config;
+
+/**
+ * reads the keyboard fifo for current keypresses
+ *
+ * @param config Keyboard config
+ * @param fifo Place to put fifo results
+ * @param max_keycodes Maximum number of key codes to put in the fifo
+ * @return number of items put into fifo
+ */
+static int tegra_kbc_find_keys(struct keyb *config, int *fifo,
+ int max_keycodes)
+{
+ struct key_matrix_key keys[KBC_MAX_KPENT], *key;
+ u32 kp_ent = 0;
+ int i;
+
+ for (key = keys, i = 0; i < KBC_MAX_KPENT; i++, key++) {
+ /* Get next word */
+ if (!(i & 3))
+ kp_ent = readl(&config->kbc->kp_ent[i / 4]);
+
+ key->valid = (kp_ent & KBC_KPENT_VALID) != 0;
+ key->row = (kp_ent >> 3) & 0xf;
+ key->col = kp_ent & 0x7;
+
+ /* Shift to get next entry */
+ kp_ent >>= 8;
+ }
+ return key_matrix_decode(&config->matrix, keys, KBC_MAX_KPENT, fifo,
+ max_keycodes);
+}
+
+/**
+ * Process all the keypress sequences in fifo and send key codes
+ *
+ * The fifo contains zero or more keypress sets. Each set
+ * consists of from 1-8 keycodes, representing the keycodes which
+ * were simultaneously pressed during that scan.
+ *
+ * This function works through each set and generates ASCII characters
+ * for each. Not that one set may produce more than one ASCII characters -
+ * for example holding down 'd' and 'f' at the same time will generate
+ * two ASCII characters.
+ *
+ * Note: if fifo_cnt is 0, we will tell the input layer that no keys are
+ * pressed.
+ *
+ * @param config Keyboard config
+ * @param fifo_cnt Number of entries in the keyboard fifo
+ */
+static void process_fifo(struct keyb *config, int fifo_cnt)
+{
+ int fifo[KBC_MAX_KPENT];
+ int cnt = 0;
+
+ /* Always call input_send_keycodes() at least once */
+ do {
+ if (fifo_cnt)
+ cnt = tegra_kbc_find_keys(config, fifo, KBC_MAX_KPENT);
+
+ input_send_keycodes(&config->input, fifo, cnt);
+ } while (--fifo_cnt > 0);
+}
+
+/**
+ * Check the keyboard controller and emit ASCII characters for any keys that
+ * are pressed.
+ *
+ * @param config Keyboard config
+ */
+static void check_for_keys(struct keyb *config)
+{
+ int fifo_cnt;
+
+ if (!config->first_scan &&
+ get_timer(config->last_poll_ms) < KBC_REPEAT_RATE_MS)
+ return;
+ config->last_poll_ms = get_timer(0);
+ config->first_scan = 0;
+
+ /*
+ * Once we get here we know the keyboard has been scanned. So if there
+ * scan waiting for us, we know that nothing is held down.
+ */
+ fifo_cnt = (readl(&config->kbc->interrupt) >> 4) & 0xf;
+ process_fifo(config, fifo_cnt);
+}
+
+/**
+ * In order to detect keys pressed on boot, wait for the hardware to
+ * complete scanning the keys. This includes time to transition from
+ * Wkup mode to Continous polling mode and the repoll time. We can
+ * deduct the time that's already elapsed.
+ *
+ * @param config Keyboard config
+ */
+static void kbd_wait_for_fifo_init(struct keyb *config)
+{
+ if (!config->inited) {
+ unsigned long elapsed_time;
+ long delay_ms;
+
+ elapsed_time = get_timer(config->start_time_ms);
+ delay_ms = config->init_dly_ms - elapsed_time;
+ if (delay_ms > 0) {
+ udelay(delay_ms * 1000);
+ debug("%s: delay %ldms\n", __func__, delay_ms);
+ }
+
+ config->inited = 1;
+ }
+}
+
+/**
+ * Check the tegra keyboard, and send any keys that are pressed.
+ *
+ * This is called by input_tstc() and input_getc() when they need more
+ * characters
+ *
+ * @param input Input configuration
+ * @return 1, to indicate that we have something to look at
+ */
+int tegra_kbc_check(struct input_config *input)
+{
+ kbd_wait_for_fifo_init(&config);
+ check_for_keys(&config);
+
+ return 1;
+}
+
+/**
+ * Test if keys are available to be read
+ *
+ * @return 0 if no keys available, 1 if keys are available
+ */
+static int kbd_tstc(void)
+{
+ /* Just get input to do this for us */
+ return input_tstc(&config.input);
+}
+
+/**
+ * Read a key
+ *
+ * TODO: U-Boot wants 0 for no key, but Ctrl-@ is a valid key...
+ *
+ * @return ASCII key code, or 0 if no key, or -1 if error
+ */
+static int kbd_getc(void)
+{
+ /* Just get input to do this for us */
+ return input_getc(&config.input);
+}
+
+/* configures keyboard GPIO registers to use the rows and columns */
+static void config_kbc_gpio(struct kbc_tegra *kbc)
+{
+ int i;
+
+ for (i = 0; i < KBC_MAX_GPIO; i++) {
+ u32 row_cfg, col_cfg;
+ u32 r_shift = 5 * (i % 6);
+ u32 c_shift = 4 * (i % 8);
+ u32 r_mask = 0x1f << r_shift;
+ u32 c_mask = 0xf << c_shift;
+ u32 r_offs = i / 6;
+ u32 c_offs = i / 8;
+
+ row_cfg = readl(&kbc->row_cfg[r_offs]);
+ col_cfg = readl(&kbc->col_cfg[c_offs]);
+
+ row_cfg &= ~r_mask;
+ col_cfg &= ~c_mask;
+
+ if (i < config.matrix.num_rows) {
+ row_cfg |= ((i << 1) | 1) << r_shift;
+ } else {
+ col_cfg |= (((i - config.matrix.num_rows) << 1) | 1)
+ << c_shift;
+ }
+
+ writel(row_cfg, &kbc->row_cfg[r_offs]);
+ writel(col_cfg, &kbc->col_cfg[c_offs]);
+ }
+}
+
+/**
+ * Start up the keyboard device
+ */
+static void tegra_kbc_open(void)
+{
+ struct kbc_tegra *kbc = config.kbc;
+ unsigned int scan_period;
+ u32 val;
+
+ /*
+ * We will scan at twice the keyboard repeat rate, so that there is
+ * always a scan ready when we check it in check_for_keys().
+ */
+ scan_period = KBC_REPEAT_RATE_MS / 2;
+ writel(scan_period * KBC_CLOCK_KHZ, &kbc->rpt_dly);
+ writel(scan_period * KBC_CLOCK_KHZ, &kbc->init_dly);
+ /*
+ * Before reading from the keyboard we must wait for the init_dly
+ * plus the rpt_delay, plus 2ms for the row scan time.
+ */
+ config.init_dly_ms = scan_period * 2 + 2;
+
+ val = KBC_DEBOUNCE_COUNT << KBC_DEBOUNCE_CNT_SHIFT;
+ val |= 1 << KBC_FIFO_TH_CNT_SHIFT; /* fifo interrupt threshold */
+ val |= KBC_CONTROL_KBC_EN; /* enable */
+ writel(val, &kbc->control);
+
+ config.start_time_ms = get_timer(0);
+ config.last_poll_ms = config.next_repeat_ms = get_timer(0);
+ config.first_scan = 1;
+}
+
+/**
+ * Set up the tegra keyboard. This is called by the stdio device handler
+ *
+ * We want to do this init when the keyboard is actually used rather than
+ * at start-up, since keyboard input may not currently be selected.
+ *
+ * Once the keyboard starts there will be a period during which we must
+ * wait for the keyboard to init. We do this only when a key is first
+ * read - see kbd_wait_for_fifo_init().
+ *
+ * @return 0 if ok, -ve on error
+ */
+static int init_tegra_keyboard(void)
+{
+#ifdef CONFIG_OF_CONTROL
+ int node;
+
+ node = fdtdec_next_compatible(gd->fdt_blob, 0,
+ COMPAT_NVIDIA_TEGRA20_KBC);
+ if (node < 0) {
+ debug("%s: cannot locate keyboard node\n", __func__);
+ return node;
+ }
+ config.kbc = (struct kbc_tegra *)fdtdec_get_addr(gd->fdt_blob,
+ node, "reg");
+ if ((fdt_addr_t)config.kbc == FDT_ADDR_T_NONE) {
+ debug("%s: No keyboard register found\n", __func__);
+ return -1;
+ }
+
+ /* Decode the keyboard matrix information (16 rows, 8 columns) */
+ if (key_matrix_init(&config.matrix, 16, 8)) {
+ debug("%s: Could not init key matrix\n", __func__);
+ return -1;
+ }
+ if (key_matrix_decode_fdt(&config.matrix, gd->fdt_blob, node)) {
+ debug("%s: Could not decode key matrix from fdt\n", __func__);
+ return -1;
+ }
+ if (config.matrix.fn_keycode) {
+ if (input_add_table(&config.input, KEY_FN, -1,
+ config.matrix.fn_keycode,
+ config.matrix.key_count))
+ return -1;
+ }
+#else
+#error "Tegra keyboard driver requires FDT definitions"
+#endif
+
+ /* Set up pin mux and enable the clock */
+ funcmux_select(PERIPH_ID_KBC, FUNCMUX_DEFAULT);
+ clock_enable(PERIPH_ID_KBC);
+ config_kbc_gpio(config.kbc);
+
+ tegra_kbc_open();
+ debug("%s: Tegra keyboard ready\n", __func__);
+
+ return 0;
+}
+
+int drv_keyboard_init(void)
+{
+ struct stdio_dev dev;
+
+ if (input_init(&config.input, 0, KBC_REPEAT_DELAY_MS,
+ KBC_REPEAT_RATE_MS)) {
+ debug("%s: Cannot set up input\n", __func__);
+ return -1;
+ }
+ config.input.read_keys = tegra_kbc_check;
+
+ memset(&dev, '\0', sizeof(dev));
+ strcpy(dev.name, "tegra-kbc");
+ dev.flags = DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;
+ dev.getc = kbd_getc;
+ dev.tstc = kbd_tstc;
+ dev.start = init_tegra_keyboard;
+
+ /* Register the device. init_tegra_keyboard() will be called soon */
+ return input_stdio_register(&dev);
+}
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index a70970784c..fdf6813149 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -35,10 +35,14 @@ COBJS-$(CONFIG_PDSP188x) += pdsp188x.o
COBJS-$(CONFIG_STATUS_LED) += status_led.o
COBJS-$(CONFIG_TWL4030_LED) += twl4030_led.o
COBJS-$(CONFIG_PMIC) += pmic_core.o
+COBJS-$(CONFIG_DIALOG_PMIC) += pmic_dialog.o
COBJS-$(CONFIG_PMIC_FSL) += pmic_fsl.o
COBJS-$(CONFIG_PMIC_I2C) += pmic_i2c.o
COBJS-$(CONFIG_PMIC_SPI) += pmic_spi.o
COBJS-$(CONFIG_PMIC_MAX8998) += pmic_max8998.o
+COBJS-$(CONFIG_PMIC_MAX8997) += pmic_max8997.o
+COBJS-$(CONFIG_RDA_FACTORY) += factory.o
+COBJS-$(CONFIG_RDA_PRDINFO) += prdinfo.o
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/misc/factory.c b/drivers/misc/factory.c
new file mode 100644
index 0000000000..addf32ea1d
--- /dev/null
+++ b/drivers/misc/factory.c
@@ -0,0 +1,715 @@
+#include <linux/types.h>
+#include <common.h>
+#include <errno.h>
+#include <nand.h>
+#include <pdl.h>
+#include <malloc.h>
+#include <mmc.h>
+#include <part.h>
+#include <mmc/mmcpart.h>
+#include <jffs2/load_kernel.h>
+#include <asm/arch/rda_iomap.h>
+#include <asm/arch/factory.h>
+#include <asm/arch/rda_sys.h>
+
+enum FACTORY_DATA_STATUS {
+ FACTORY_DATA_UNKNOWN = 0,
+ FACTORY_DATA_INVALID,
+ FACTORY_DATA_VALID,
+};
+
+struct ap_factory_config_v0 {
+ u32 magic;
+ u8 lcd_name[128];
+ u8 clock_config[1024];
+ u8 reserved[1024];
+};
+
+const static char factory_sector_name[] = "factorydata";
+
+static enum FACTORY_DATA_STATUS factory_data_status
+ = FACTORY_DATA_UNKNOWN;
+
+static struct factory_data_sector factory_data
+ __attribute__((__aligned__(32)));
+
+static int factory_data_is_valid(u8 *data, u32 size)
+{
+ struct factory_data_sector *sector = (void *)data;
+ struct ap_factory_config *config = (void *)sector->ap_factory_data;
+ int valid = 0;
+ u32 crc, crc_calc;
+ u32 version;
+
+ BUILD_BUG_ON(sizeof(struct ap_factory_config) > RDA_AP_FACT_LEN);
+
+ memcpy(&version, &config->version, sizeof(version));
+ printf("Factory version: 0x%08X\n", version);
+ if ((version & 0xFFFF0000) == AP_FACTORY_MARK_VERSION) {
+ u32 crc_size = RDA_FACT_TOTAL_LEN;
+ /* Factory structure version the current version */
+ if (version == AP_FACTORY_VERSION_NUMBER) {
+ valid = 1;
+ /* Factory structure version is old, but we can support it */
+ } else if (version == AP_FACTORY_VERSION_1_NUMBER) {
+ crc_size = AP_FACTORY_VERSION_1_LEN;
+ valid = 1;
+ } else {
+ /* Factory structure version is invalid */
+ printf("Factory version is unknown\n");
+ printf("Current code version: 0x%08X\n",
+ AP_FACTORY_VERSION_NUMBER);
+ }
+
+ if(size < crc_size) {
+ valid = 0;
+ printf("Factory data size is too small.\n");
+ }
+
+ if(valid) {
+ memcpy(&crc, &config->crc, sizeof(crc));
+ memset(&config->crc, 0, sizeof(crc));
+ crc_calc = crc32(0, (u8 *)sector, crc_size);
+ memcpy(&config->crc, &crc, sizeof(crc));
+ if (crc == crc_calc) {
+ printf("Factory CRC is OK %#x\n", crc);
+ } else {
+ printf("ERROR: Bad factory CRC, got %#x, expect %#x\n",
+ crc_calc, crc);
+ valid = 0;
+ }
+ }
+ } else {
+ printf("No valid factory data\n");
+ }
+
+ return valid;
+}
+
+extern int find_dev_and_part(const char *id, struct mtd_device **dev,
+ u8 *part_num, struct part_info **part);
+
+static int nand_mtd_factory_init(struct mtd_info **minfo,
+ struct part_info **pinfo)
+{
+ struct mtd_info *nand;
+ struct mtd_device *dev;
+ struct part_info *part;
+ u8 pnum;
+ int ret;
+ u32 block_size, page_size;
+ u32 block_nums;
+
+ ret = find_dev_and_part(factory_sector_name, &dev, &pnum, &part);
+ if (ret) {
+ printf("unknown partition name '%s'\n", factory_sector_name);
+ return ret;
+ } else if (dev->id->type != MTD_DEV_TYPE_NAND) {
+ printf("mtd dev type error: %d\n", dev->id->type);
+ return -EIO;
+ }
+ printf("found factorydata part '%s' offset: 0x%llx length: 0x%llx\n",
+ part->name, part->offset, part->size);
+
+ nand = &nand_info[dev->id->num];
+ block_size = nand->erasesize;
+ page_size = nand->writesize;
+
+ printf("nand info: blockSize=%d pageSize=%d\n", block_size, page_size);
+
+ if (block_size < sizeof(struct factory_data_sector)) {
+ printf("Invalid block size: %d (should >= %d)\n",
+ block_size, sizeof(struct factory_data_sector));
+ hang();
+ }
+ block_nums = part->size / nand->erasesize;
+ if (block_nums < 2) {
+ printf("partition for factorydata is too small");
+ printf(" at least two blocks\n");
+ hang();
+ }
+ *minfo = nand;
+ *pinfo = part;
+ return 0;
+}
+
+static int nand_mtd_load_factory(u8 *dst)
+{
+ struct mtd_info *nand;
+ struct part_info *part;
+ size_t size;
+ int ret;
+ u64 offs;
+ u32 block_size;
+ u32 bad_blocks = 0;
+
+ ret = nand_mtd_factory_init(&nand, &part);
+ if (ret)
+ return ret;
+
+ block_size = nand->erasesize;
+ size = sizeof(struct factory_data_sector);
+ offs = part->offset;
+
+ printf("read 0x%x bytes from '%s' offset: 0x%llx\n",
+ size, part->name, offs);
+ ret = nand_read_skip_bad_new(nand, offs, &size, dst, &bad_blocks);
+ if (ret) {
+ printf("nand read fail\n");
+ return ret;
+ }
+
+ if (factory_data_is_valid(dst, size))
+ return 0;
+
+ printf("Try the backup copy of factory data\n");
+
+ size = sizeof(struct factory_data_sector);
+ offs = part->offset + (bad_blocks + 1) * block_size;
+
+ printf("read 0x%x bytes from '%s' offset: 0x%llx\n",
+ size, part->name, offs);
+
+ ret = nand_read_skip_bad_new(nand, offs, &size, dst, &bad_blocks);
+ if (ret) {
+ printf("nand read fail\n");
+ return ret;
+ }
+
+ if (factory_data_is_valid(dst, size))
+ return 0;
+
+ return -EIO;
+}
+
+static void factory_data_prepare_write(u8 *buf)
+{
+ struct factory_data_sector *sector = (void *)buf;
+ struct ap_factory_config *config = (void *)sector->ap_factory_data;
+ u32 version = AP_FACTORY_VERSION_NUMBER;
+ u32 crc_size = sizeof(*sector);
+ u32 crc;
+
+ if(config->version == AP_FACTORY_VERSION_1_NUMBER)
+ crc_size = AP_FACTORY_VERSION_1_LEN;
+ else
+ memcpy(&config->version, &version, sizeof(config->version));
+
+ memset(&config->crc, 0, sizeof(config->crc));
+ crc = crc32(0, (u8 *)sector, crc_size);
+ memcpy(&config->crc, &crc, sizeof(config->crc));
+}
+
+static void factory_data_dump(u8 *data, size_t size, int flash)
+{
+ printf("dump factory data from %s :\n", flash ? "flash" : "tools");
+ rda_dump_buf((char *)data, size);
+}
+
+static int factory_data_check(struct mtd_info *nand, u32 offs, u8 *data)
+{
+ int ret = 0;;
+ u8 *dst;
+ size_t size;
+ u32 bad_blocks = 0;
+ int i;
+
+ if (pdl_dbg_rw_check == 0 && pdl_dbg_factory_part == 0)
+ return 0;
+
+ printf("Check the factory data just written ...\n");
+
+ dst = malloc(sizeof(struct factory_data_sector));
+ if (dst == NULL) {
+ printf("Failed to malloc buffer %d bytes\n",
+ sizeof(struct factory_data_sector));
+ return -ENOMEM;
+ }
+
+ size = sizeof(struct factory_data_sector);
+
+ printf("read 0x%x bytes offset: 0x%08x\n", size, offs);
+ ret = nand_read_skip_bad_new(nand, offs, &size, dst, &bad_blocks);
+ if (ret) {
+ printf("nand read fail\n");
+ goto _exit;
+ }
+
+ if (pdl_dbg_factory_part)
+ factory_data_dump(dst, sizeof(struct factory_data_sector), 1);
+
+ if (pdl_dbg_rw_check) {
+ for (i = 0; i < sizeof(struct factory_data_sector); ++i) {
+ if (data[i] != dst[i])
+ break;
+ }
+ if (i < sizeof(struct factory_data_sector)) {
+ ret = -EIO;
+ size = sizeof(struct factory_data_sector) - i;
+ if (size > 2048)
+ size = 2048;
+ printf("*** CHECK FAILURE: offset=%d\n", i);
+ printf("==> Before %p is:\n", data);
+ rda_dump_buf((char *)&data[i], size);
+ printf("==> After %p is:\n", dst);
+ rda_dump_buf((char *)&dst[i], size);
+ }
+ }
+
+_exit:
+ free(dst);
+ return ret;
+}
+
+static loff_t factory_backup_offs = 0;
+
+static int write_factory(nand_info_t *nand, loff_t offset, size_t size,
+ loff_t max_limit, u8 *buf)
+{
+ nand_erase_options_t opts;
+ struct nand_chip *chip = nand->priv;
+ int ret;
+
+ if (chip->bbt_erase_shift == 0) {
+ if(mtd_mod_by_eb(offset, nand) != 0)
+ return -EINVAL;
+ } else {
+ if ((offset & (nand->erasesize -1)) != 0)
+ return -EINVAL;
+ }
+
+ if (chip->bbt_erase_shift == 0) {
+ while (offset < max_limit) {
+ if (nand_block_isbad (nand,
+ mtd_div_by_eb(offset, nand) * nand->erasesize)) {
+ printf ("Skip bad block 0x%08llx\n",
+ (loff_t)mtd_div_by_eb(offset, nand) * nand->erasesize);
+ offset += nand->erasesize;
+ continue;
+ } else {
+ break;
+ }
+ }
+ } else {
+ while (offset < max_limit) {
+ if (nand_block_isbad (nand,
+ offset & ~(nand->erasesize - 1))) {
+ printf ("Skip bad block 0x%08llx\n",
+ offset & ~(nand->erasesize - 1));
+ offset += nand->erasesize;
+ continue;
+ } else {
+ break;
+ }
+ }
+ }
+
+ if (offset >= max_limit) {
+ printf("no good block for factory data\n");
+ return -EIO;
+ }
+ /* erase the factory partition */
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = offset;
+ opts.length = nand->erasesize;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+ printf("erase 0x%x bytes to offset: 0x%08x\n",
+ (unsigned int)opts.length,
+ (unsigned int)opts.offset);
+ ret = nand_erase_opts(nand, &opts);
+ if (ret) {
+ printf("nand erase fail\n");
+ return ret;
+ }
+
+ ret = nand_write(nand, offset, &size, buf);
+ if (ret) {
+ printf("nand write fail\n");
+ return ret;
+ } else {
+ /* Check the factory data in flash */
+ ret = factory_data_check(nand, offset, buf);
+ if (ret)
+ return ret;
+ }
+
+ factory_backup_offs = offset + nand->erasesize;
+ return 0;
+}
+
+static int nand_mtd_write_factory(u8 *buf)
+{
+ struct mtd_info *nand;
+ struct part_info *part;
+ int ret;
+ size_t size;
+ u64 offs;
+ loff_t max_limit;
+
+ ret = nand_mtd_factory_init(&nand, &part);
+ if (ret)
+ return ret;
+
+ max_limit = part->offset + part->size;
+
+ /* Dump the data from tools */
+ if (pdl_dbg_factory_part)
+ factory_data_dump(buf, sizeof(struct factory_data_sector), 0);
+
+ /* Set version and crc */
+ factory_data_prepare_write(buf);
+
+ /* write back the factory */
+ size = sizeof(struct factory_data_sector);
+ offs = part->offset;
+ printf("write 0x%x bytes to '%s' offset: 0x%llx\n",
+ size, part->name, offs);
+
+ ret = write_factory(nand, offs, size, max_limit, buf);
+ if (ret) {
+ printf("factorydata write fail\n");
+ return ret;
+ }
+
+ printf("Write the backup copy of factory data\n");
+
+ size = sizeof(struct factory_data_sector);
+ offs = factory_backup_offs;
+ printf("write 0x%x bytes to '%s' offset: 0x%llx\n",
+ size, part->name, offs);
+
+ ret = write_factory(nand, offs, size, max_limit, buf);
+ if (ret) {
+ printf("factorydata backup write fail, ");
+ printf("and only one copy in factorydata\n");
+ }
+ return 0;
+}
+
+#define BACKUP_FACTORY_START 128 /* 128 mmc blocks, 64KB */
+int emmc_load_factory(u8 *dst)
+{
+ disk_partition_t *ptn;
+ block_dev_desc_t *mmc_blkdev;
+ struct mmc *mmc;
+ u64 offset;
+ u64 backup_offset;
+ size_t size;
+ int blksz_shift;
+
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (mmc_blkdev)
+ mmc = container_of(mmc_blkdev, struct mmc, block_dev);
+ else
+ return -1;
+
+ if (!mmc) {
+ printf("mmc doesn't exist");
+ return -1;
+ }
+
+ ptn = partition_find_ptn("factorydata");
+ if(!ptn) {
+ printf("mmc partition table doesn't exist");
+ return -1;
+ }
+
+ blksz_shift = LOG2(ptn->blksz);
+ offset = (u64)ptn->start << blksz_shift;
+ size = sizeof(struct factory_data_sector);
+ printf("read 0x%x bytes from '%s' offset: 0x%08llx\n",
+ size, ptn->name, offset);
+ if (mmc_read(mmc, offset, dst, size) <= 0) {
+ printf("mmc read fail\n");
+ return -EIO;
+ }
+
+ if (factory_data_is_valid(dst, size))
+ return 0;
+
+ printf("Try the backup copy of factory data\n");
+
+ size = sizeof(struct factory_data_sector);
+ backup_offset = offset + (BACKUP_FACTORY_START << blksz_shift);
+
+ printf("read 0x%x bytes from '%s' offset: 0x%08llx\n",
+ size, ptn->name, backup_offset);
+
+ if (mmc_read(mmc, backup_offset, dst, size) <= 0) {
+ printf("mmc read backup factorydata fail\n");
+ return -EIO;
+ }
+
+ if (factory_data_is_valid(dst, size))
+ return 0;
+
+ return -EIO;
+}
+
+static int emmc_write_factory(u8 *buf)
+{
+ disk_partition_t *ptn;
+ block_dev_desc_t *mmc_blkdev;
+ struct mmc *mmc;
+ u64 offset;
+ u64 backup_offset;
+ size_t size;
+ int blksz_shift;
+
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (mmc_blkdev)
+ mmc = container_of(mmc_blkdev, struct mmc, block_dev);
+ else
+ return -1;
+
+ if (!mmc) {
+ printf("mmc doesn't exist");
+ return -1;
+ }
+
+ ptn = partition_find_ptn("factorydata");
+ if (!ptn) {
+ printf("mmc partition table doesn't exist");
+ return -1;
+ }
+
+ /* Dump the data from tools */
+ if (pdl_dbg_factory_part)
+ factory_data_dump(buf, sizeof(struct factory_data_sector), 0);
+
+ /* Set version and crc */
+ factory_data_prepare_write(buf);
+
+ /* write back the factory */
+ size = sizeof(struct factory_data_sector);
+ blksz_shift = LOG2(ptn->blksz);
+ offset = (u64)ptn->start << blksz_shift;
+ printf("write 0x%x bytes to '%s' offset: 0x%llx\n",
+ size, ptn->name, offset);
+
+ if (mmc_write(mmc, offset, buf, size) <= 0) {
+ printf("factorydata write fail\n");
+ return -EIO;
+ }
+
+ printf("Write the backup copy of factory data\n");
+
+ size = sizeof(struct factory_data_sector);
+ backup_offset = offset + (BACKUP_FACTORY_START << blksz_shift);
+ printf("write 0x%x bytes to '%s' offset: 0x%llx\n",
+ size, ptn->name, backup_offset);
+
+ if (mmc_write(mmc, backup_offset, buf, size) <= 0) {
+ printf("factorydata backup write fail, ");
+ printf("and only one copy in factorydata\n");
+ }
+ return 0;
+}
+
+int factory_copy_from_mem(const u8 *buf)
+{
+ u8 *data = (u8 *)image_get_data((const image_header_t *)buf);
+ size_t size = image_get_data_size((const image_header_t *)buf);
+
+ if (factory_data_is_valid(data, size)) {
+ printf("Calibration data is valid, copying to memory\n");
+ memcpy(&factory_data, data, sizeof(factory_data));
+ factory_data_status = FACTORY_DATA_VALID;
+ return 0;
+ } else {
+ printf("Calibration data is invalid\n");
+ return 1;
+ }
+}
+
+int factory_load(void)
+{
+ int ret = 0;
+
+ if (factory_data_status != FACTORY_DATA_UNKNOWN) {
+ printf("Factory already loaded\n");
+ return ret;
+ }
+
+ printf("Load factory from flash ...\n");
+
+ if (rda_media_get() == MEDIA_MMC)
+ ret = emmc_load_factory((u8 *)&factory_data);
+ else
+ ret = nand_mtd_load_factory((u8 *)&factory_data);
+ if (ret) {
+ printf("Load Failed\n");
+ memset(&factory_data, 0, sizeof(factory_data));
+ factory_data_status = FACTORY_DATA_INVALID;
+ return ret;
+ }
+
+ printf("Done\n");
+ factory_data_status = FACTORY_DATA_VALID;
+ return ret;
+}
+
+const unsigned char* factory_get_lcd_name(void)
+{
+ struct ap_factory_config *config =
+ (void *)factory_data.ap_factory_data;
+ factory_load();
+ return config->lcd_name;
+}
+
+const unsigned char* factory_get_bootlogo_name(void)
+{
+ struct ap_factory_config *config =
+ (void *)factory_data.ap_factory_data;
+ factory_load();
+ return config->bootlogo_name;
+}
+
+const unsigned char* factory_get_ap_factory(void)
+{
+ factory_load();
+ return factory_data.ap_factory_data;
+}
+
+const unsigned char* factory_get_modem_factory(void)
+{
+ factory_load();
+ return factory_data.modem_factory_data;
+}
+
+const unsigned char* factory_get_modem_calib(void)
+{
+ factory_load();
+ return factory_data.modem_calib_data;
+}
+
+const unsigned char* factory_get_modem_ext_calib(void)
+{
+ factory_load();
+ return factory_data.modem_ext_calib_data;
+}
+
+unsigned long factory_get_all(unsigned char *buf)
+{
+ struct ap_factory_config *config =
+ (void *)factory_data.ap_factory_data;
+ if (!buf)
+ return 0;
+
+ factory_load();
+ memcpy(buf, &factory_data, sizeof(factory_data));
+
+ if(config->version == AP_FACTORY_VERSION_1_NUMBER)
+ return AP_FACTORY_VERSION_1_LEN;
+
+ return sizeof(factory_data);
+}
+
+int factory_set_ap_factory(unsigned char *data)
+{
+ factory_load();
+ memcpy(factory_data.ap_factory_data, data,
+ sizeof(factory_data.ap_factory_data));
+ return 0;
+}
+
+int factory_set_modem_calib(unsigned char *data)
+{
+ factory_load();
+ memcpy(factory_data.modem_calib_data, data,
+ sizeof(factory_data.modem_calib_data));
+ return 0;
+}
+
+int factory_set_modem_ext_calib(unsigned char *data)
+{
+ factory_load();
+ memcpy(factory_data.modem_ext_calib_data, data,
+ sizeof(factory_data.modem_ext_calib_data));
+ return 0;
+}
+
+int factory_set_modem_factory(unsigned char *data)
+{
+ factory_load();
+ memcpy(factory_data.modem_factory_data, data,
+ sizeof(factory_data.modem_factory_data));
+ return 0;
+}
+
+int factory_burn(void)
+{
+ if (rda_media_get() == MEDIA_MMC)
+ return emmc_write_factory((u8 *)&factory_data);
+ else
+ return nand_mtd_write_factory((u8 *)&factory_data);
+}
+
+int factory_update_modem_calib(unsigned char *data)
+{
+ factory_set_modem_calib(data);
+ return factory_burn();
+}
+
+int factory_update_modem_ext_calib(unsigned char *data)
+{
+ factory_set_modem_ext_calib(data);
+ return factory_burn();
+}
+
+int factory_update_modem_factory(unsigned char *data)
+{
+ factory_set_modem_factory(data);
+ return factory_burn();
+}
+
+int factory_update_ap_factory(unsigned char *data)
+{
+ factory_set_ap_factory(data);
+ return factory_burn();
+}
+
+int factory_update_all(unsigned char *data, unsigned long size)
+{
+ if (!factory_data_is_valid(data, size)) {
+ printf("factory data is invalid.\n");
+ return -EINVAL;
+ }
+ factory_load();
+ memcpy(&factory_data, data, sizeof(factory_data));
+ return factory_burn();
+}
+
+
+/* message rx/tx for PC calib tool and u-boot */
+int factory_get_ap_calib_msg(unsigned int *id, unsigned int *size, unsigned char *data)
+{
+ struct ap_calib_message *msg = (struct ap_calib_message *)RDA_AP_CALIB_MSG_ADDR;
+ if (msg->magic == RDA_AP_CALIB_MSG_MAGIC &&
+ !(msg->id & 0x80000000) ) {
+ *id = msg->id;
+ if (size)
+ *size = msg->size;
+ if (data)
+ memcpy(data, msg->data, msg->size);
+ /* clear */
+ memset(msg, 0, RDA_AP_CALIB_MSG_LEN);
+ flush_dcache_range(RDA_AP_CALIB_MSG_ADDR, RDA_AP_CALIB_MSG_ADDR+RDA_AP_CALIB_MSG_LEN);
+ return 0;
+ }
+ return -1;
+}
+
+int factory_set_ap_calib_msg(unsigned int id, unsigned int size, unsigned char *data)
+{
+ struct ap_calib_message *msg = (struct ap_calib_message *)RDA_AP_CALIB_MSG_ADDR;
+ msg->magic = RDA_AP_CALIB_MSG_MAGIC;
+ msg->id = id;
+ msg->size = size;
+ if (data)
+ memcpy(msg->data, data, size);
+ flush_dcache_range(RDA_AP_CALIB_MSG_ADDR, RDA_AP_CALIB_MSG_ADDR+RDA_AP_CALIB_MSG_LEN);
+ return 0;
+}
+
diff --git a/drivers/misc/pmic_dialog.c b/drivers/misc/pmic_dialog.c
new file mode 100644
index 0000000000..e97af1d1d0
--- /dev/null
+++ b/drivers/misc/pmic_dialog.c
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ * Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+#include <common.h>
+#include <pmic.h>
+#include <dialog_pmic.h>
+
+int pmic_dialog_init(void)
+{
+ struct pmic *p = get_pmic();
+ static const char name[] = "DIALOG_PMIC";
+
+ p->name = name;
+ p->number_of_regs = DIALOG_NUM_OF_REGS;
+
+ p->interface = PMIC_I2C;
+ p->hw.i2c.addr = CONFIG_SYS_DIALOG_PMIC_I2C_ADDR;
+ p->hw.i2c.tx_num = 1;
+ p->bus = I2C_PMIC;
+
+ return 0;
+}
diff --git a/drivers/misc/pmic_max8997.c b/drivers/misc/pmic_max8997.c
new file mode 100644
index 0000000000..62dbc05311
--- /dev/null
+++ b/drivers/misc/pmic_max8997.c
@@ -0,0 +1,43 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ * Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <pmic.h>
+#include <max8997_pmic.h>
+
+int pmic_init(void)
+{
+ struct pmic *p = get_pmic();
+ static const char name[] = "MAX8997_PMIC";
+
+ puts("Board PMIC init\n");
+
+ p->name = name;
+ p->interface = PMIC_I2C;
+ p->number_of_regs = PMIC_NUM_OF_REGS;
+ p->hw.i2c.addr = MAX8997_I2C_ADDR;
+ p->hw.i2c.tx_num = 1;
+ p->bus = I2C_PMIC;
+
+ return 0;
+}
diff --git a/drivers/misc/prdinfo.c b/drivers/misc/prdinfo.c
new file mode 100644
index 0000000000..8f42df776e
--- /dev/null
+++ b/drivers/misc/prdinfo.c
@@ -0,0 +1,344 @@
+#include <linux/types.h>
+#include <common.h>
+#include <command.h>
+#include <errno.h>
+#include <nand.h>
+#include <pdl.h>
+#include <malloc.h>
+#include <mmc.h>
+#include <part.h>
+#include <mmc/mmcpart.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/mtdparts_def.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/prdinfo.h>
+
+int nand_read_partition(const char *part_name, unsigned char *data,
+ size_t size, size_t *actual_len);
+int nand_write_partition(const char *part_name, unsigned char *data,
+ size_t size);
+int nand_erase_partition(const char *part_name);
+int emmc_erase_partition(const char *part_name);
+int emmc_read_partition(const char *part_name, unsigned char *data, size_t size,
+ size_t *actual_len);
+int emmc_write_partition(const char *part_name, unsigned char *data, size_t size);
+
+#ifdef CONFIG_SYS_CACHELINE_SIZE
+static unsigned char prdinfo_buf[PRDINFO_TOTAL_SIZE]
+ __attribute__((__aligned__(CONFIG_SYS_CACHELINE_SIZE)));
+#else
+static unsigned char prdinfo_buf[PRDINFO_TOTAL_SIZE]
+ __attribute__((__aligned__(32)));
+#endif
+int prdinfo_load(void)
+{
+ int ret = 0;
+ static int loaded = 0;
+ unsigned char *data = prdinfo_buf;
+ struct prdinfo *info = (struct prdinfo *)data;
+ size_t actual_sz = 0;
+ size_t total_sz = PRDINFO_TOTAL_SIZE;
+ uint32_t crc = 0, new_crc = 0;
+
+ if(loaded)
+ return 0;
+
+ if (rda_media_get() == MEDIA_MMC)
+ ret = emmc_read_partition(PRDINFO_PART_NAME, data,
+ total_sz, &actual_sz);
+ else
+ ret = nand_read_partition(PRDINFO_PART_NAME, data,
+ total_sz, &actual_sz);
+
+ if(ret)
+ return -1;
+
+ /* crc verify */
+ memcpy(&crc, &data[PRDINFO_CRC_OFFSET], sizeof(uint32_t));
+ new_crc = crc32(0, data, total_sz - sizeof(uint32_t));
+
+ /* if data is invalid, fill by zero */
+ if(crc == 0 || crc == 0xffffffff || crc != new_crc)
+ memset((void *)data, 0, total_sz);
+
+ if(info->pdl_image_count > PDL_IMAGE_MAX_NUM)
+ info->pdl_image_count = PDL_IMAGE_MAX_NUM;
+
+ loaded = 1;
+ return 0;
+}
+
+int prdinfo_save(void)
+{
+ int ret = 0;
+ unsigned char *data = prdinfo_buf;
+ size_t total_sz = PRDINFO_TOTAL_SIZE;
+ uint32_t *crc_p;
+
+ crc_p = (uint32_t *)&data[PRDINFO_CRC_OFFSET];
+ *crc_p = crc32(0, data, total_sz - sizeof(uint32_t));
+
+ if (rda_media_get() == MEDIA_MMC) {
+ ret = emmc_write_partition(PRDINFO_PART_NAME, data, total_sz);
+ } else {
+ ret = nand_erase_partition(PRDINFO_PART_NAME);
+ if(!ret)
+ ret = nand_write_partition(PRDINFO_PART_NAME, data, total_sz);
+ }
+
+ return ret;
+}
+
+int prdinfo_update_all(char *buf, unsigned long sz)
+{
+ if(sz != PRDINFO_TOTAL_SIZE) {
+ printf("%s: size %lu is invaild.\n", __func__, sz);
+ return -1;
+ }
+ memcpy(prdinfo_buf, buf, sz);
+ prdinfo_save();
+ return 0;
+}
+
+int prdinfo_set_data(struct prdinfo *info)
+{
+ memcpy(prdinfo_buf, (void *)info, sizeof(struct prdinfo));
+ prdinfo_save();
+ return 0;
+}
+
+int prdinfo_get_data(struct prdinfo *info)
+{
+ if(prdinfo_load())
+ return -1;
+ memcpy((void *)info, prdinfo_buf, sizeof(struct prdinfo));
+ return 0;
+}
+
+static int prdinfo_clear(void)
+{
+ memset(prdinfo_buf, 0, PRDINFO_TOTAL_SIZE);
+
+ if (rda_media_get() == MEDIA_MMC)
+ return emmc_erase_partition(PRDINFO_PART_NAME);
+ else
+ return nand_erase_partition(PRDINFO_PART_NAME);
+}
+
+void prdinfo_dump(void)
+{
+ int i;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ printf("product infomation:\n");
+ printf(" Download : %s\n", info->pdl_result ? "OK" : "None");
+ for(i = 0; i < info->pdl_image_count; i++) {
+ int r = info->pdl_images[i].result;
+ printf(" %10s: %s\n", info->pdl_images[i].name,
+ r ? "OK" : "None");
+ }
+ printf(" Calibration : %s\n", info->cali_result ? "OK" : "None");
+ printf(" Autocall Test : %s\n", info->autocall_result ? "OK" : "None");
+ printf(" Factory Test : %s\n", info->factorytest_result ? "OK" : "None");
+ printf(" IMEI Write : %s\n", info->imei_result ? "OK" : "None");
+ printf(" PSN Write : %s\n", info->psn_result ? "OK" : "None");
+ printf(" MBSN Write : %s\n", info->mbsn_result ? "OK" : "None");
+ printf(" MACAddr Write : %s\n", info->macaddr_result ? "OK" : "None");
+ printf(" BTAddr Write : %s\n", info->btaddr_result ? "OK" : "None");
+ printf(" FTM TAG : %#x\n", info->factory_tag);
+ printf(" Reserve Data : ");
+ for(i = 0; i < 10; i++) {
+ printf("0x%x ", ((u32)info->reserve[i]) & 0xff);
+ }
+ printf("\n");
+}
+
+int prdinfo_set_pdl_result(uint8_t rt, uint32_t ftm_tag)
+{
+ int ret = 0;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ ret = prdinfo_load();
+ if(!ret) {
+ info->pdl_result = !!rt;
+ info->factory_tag = ftm_tag ? FACTORY_TAG_NUM : 0;
+ ret = prdinfo_save();
+ }
+ return ret;
+}
+
+int prdinfo_set_cali_result(uint8_t rt)
+{
+ int ret = 0;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ ret = prdinfo_load();
+ if(!ret) {
+ info->cali_result = !!rt;
+ ret = prdinfo_save();
+ }
+ return ret;
+}
+
+int prdinfo_set_autocall_result(uint8_t rt)
+{
+ int ret = 0;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ ret = prdinfo_load();
+ if(!ret) {
+ info->autocall_result = !!rt;
+ ret = prdinfo_save();
+ }
+ return ret;
+}
+
+int prdinfo_set_coupling_result(uint8_t rt)
+{
+ int ret = 0;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ ret = prdinfo_load();
+ if(!ret) {
+ info->reserve[0] = !!rt;
+ ret = prdinfo_save();
+ }
+ return ret;
+}
+
+int prdinfo_set_factorytest_result(uint8_t rt)
+{
+ int ret = 0;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ ret = prdinfo_load();
+ if(!ret) {
+ info->factorytest_result = !!rt;
+ ret = prdinfo_save();
+ }
+ return ret;
+}
+
+int prdinfo_init(char *image_list)
+{
+ int ret = 0;
+ int i, len;
+ char *buff, *p, *q;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ /* clear old data first */
+ prdinfo_clear();
+
+ len = strlen(image_list);
+ if(len < 1) {
+ printf("%s: name list is empty!\n", __func__);
+ return -1;
+ }
+
+ buff = malloc(len + 1);
+ if(!buff)
+ return -1;
+ memcpy(buff, image_list, len+1);
+
+ /* get image names */
+ p = buff;
+ i = 0;
+ while(1) {
+ q = strstr(p, ",");
+ if(q) *q = '\0';
+
+ if(strlen(p) > 0) {
+ strncpy(info->pdl_images[i++].name, p, PDL_IMAGE_NAME_LEN-1);
+ if(i >= PDL_IMAGE_MAX_NUM) break;
+ }
+
+ if(!q) break;
+
+ p = q + 1;
+ if(*p == '\0') break;
+ }
+ info->pdl_image_count = i;
+
+ /* write data to flash */
+ ret = prdinfo_save();
+
+ free(buff);
+ return ret;
+
+}
+
+int prdinfo_set_pdl_image_download_result(char *image_name, uint8_t dl_rt)
+{
+ int ret = 0;
+ int update = 0;
+ int i;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ ret = prdinfo_load();
+ if(ret)
+ return ret;
+
+ for(i = 0; i < info->pdl_image_count; i++) {
+ if(strcmp(image_name, info->pdl_images[i].name) == 0) {
+ if(info->pdl_images[i].result != !!dl_rt) {
+ info->pdl_images[i].result = !!dl_rt;
+ update = 1;
+ }
+ break;
+ }
+ }
+
+ if(update) {
+ ret = prdinfo_save();
+ printf("part '%s', set download result '%s'\n", image_name,
+ (!!dl_rt) ? "success" : "fail");
+ }
+
+ return ret;
+}
+
+uint32_t prdinfo_get_factory_tag(void)
+{
+ uint32_t tag = 0;
+ struct prdinfo *info = (struct prdinfo *)prdinfo_buf;
+
+ if(!prdinfo_load())
+ tag = info->factory_tag;
+ return tag;
+}
+
+
+/****************************************************************************/
+/****************************************************************************/
+/****************************************************************************/
+#ifdef CONFIG_CMD_PRDINFO
+int do_dump_prdinfo(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[])
+{
+ prdinfo_dump();
+ return CMD_RET_SUCCESS;
+}
+
+int do_rda_check_factory_tag(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ if(prdinfo_get_factory_tag() == FACTORY_TAG_NUM){
+ enum rda_bm_type bm;
+ char str[2];
+
+ bm = rda_bm_get();
+ if(bm == RDA_BM_NORMAL) {
+ rda_bm_set(RDA_BM_FACTORY);
+ sprintf(str, "%1d", RDA_BM_FACTORY);
+ setenv("bootmode", str);
+ printf("Found factory tag, change bootmode to %1d\n", RDA_BM_FACTORY);
+ }
+ }
+ return 0;
+}
+
+U_BOOT_CMD(prdinfo, 1, 1, do_dump_prdinfo,
+ "dump product infomation", "");
+
+U_BOOT_CMD(rdachkfactag , 1, 1, do_rda_check_factory_tag,
+ "check FTM tag 0xFAC12345 in 'misc' part", "");
+
+#endif
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index c245352aca..40c79b3f30 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -25,6 +25,14 @@ include $(TOPDIR)/config.mk
LIB := $(obj)libmmc.o
+ifdef CONFIG_SPL_BUILD
+ifdef CONFIG_SPL_EMMC_LOAD
+COBJS-y += mmc_spl_load.o
+endif
+else
+COBJS-$(CONFIG_GENERIC_MMC) += mmc_write.o
+endif
+
COBJS-$(CONFIG_BFIN_SDH) += bfin_sdh.o
COBJS-$(CONFIG_DAVINCI_MMC) += davinci_mmc.o
COBJS-$(CONFIG_FSL_ESDHC) += fsl_esdhc.o
@@ -39,10 +47,15 @@ COBJS-$(CONFIG_MXS_MMC) += mxsmmc.o
COBJS-$(CONFIG_OMAP_HSMMC) += omap_hsmmc.o
COBJS-$(CONFIG_PXA_MMC) += pxa_mmc.o
COBJS-$(CONFIG_PXA_MMC_GENERIC) += pxa_mmc_gen.o
-COBJS-$(CONFIG_S5P_MMC) += s5p_mmc.o
+COBJS-$(CONFIG_RDA_MMC) += rda_mmc.o
+COBJS-$(CONFIG_RDA_MMC_LEGACY) += rda_mmc_legacy.o
COBJS-$(CONFIG_SDHCI) += sdhci.o
+COBJS-$(CONFIG_S5P_SDHCI) += s5p_sdhci.o
COBJS-$(CONFIG_SH_MMCIF) += sh_mmcif.o
COBJS-$(CONFIG_TEGRA2_MMC) += tegra2_mmc.o
+ifndef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_PARTITIONS) += mmc_parts.o
+endif
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/mmc/bfin_sdh.c b/drivers/mmc/bfin_sdh.c
index 08fc5c1d3e..8d59d46c64 100644
--- a/drivers/mmc/bfin_sdh.c
+++ b/drivers/mmc/bfin_sdh.c
@@ -256,7 +256,6 @@ int bfin_mmc_init(bd_t *bis)
mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34;
mmc->f_max = get_sclk();
mmc->f_min = mmc->f_max >> 9;
- mmc->block_dev.part_type = PART_TYPE_DOS;
mmc->b_max = 0;
diff --git a/drivers/mmc/fsl_esdhc.c b/drivers/mmc/fsl_esdhc.c
index a2f35e3e99..07370b5729 100644
--- a/drivers/mmc/fsl_esdhc.c
+++ b/drivers/mmc/fsl_esdhc.c
@@ -307,19 +307,56 @@ esdhc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
#else
esdhc_write32(&regs->xfertyp, xfertyp);
#endif
+
+ /* Mask all irqs */
+ esdhc_write32(&regs->irqsigen, 0);
+
/* Wait for the command to complete */
- while (!(esdhc_read32(&regs->irqstat) & IRQSTAT_CC))
+ while (!(esdhc_read32(&regs->irqstat) & (IRQSTAT_CC | IRQSTAT_CTOE)))
;
irqstat = esdhc_read32(&regs->irqstat);
esdhc_write32(&regs->irqstat, irqstat);
+ /* Reset CMD and DATA portions on error */
+ if (irqstat & (CMD_ERR | IRQSTAT_CTOE)) {
+ esdhc_write32(&regs->sysctl, esdhc_read32(&regs->sysctl) |
+ SYSCTL_RSTC);
+ while (esdhc_read32(&regs->sysctl) & SYSCTL_RSTC)
+ ;
+
+ if (data) {
+ esdhc_write32(&regs->sysctl,
+ esdhc_read32(&regs->sysctl) |
+ SYSCTL_RSTD);
+ while ((esdhc_read32(&regs->sysctl) & SYSCTL_RSTD))
+ ;
+ }
+ }
+
if (irqstat & CMD_ERR)
return COMM_ERR;
if (irqstat & IRQSTAT_CTOE)
return TIMEOUT;
+ /* Workaround for ESDHC errata ENGcm03648 */
+ if (!data && (cmd->resp_type & MMC_RSP_BUSY)) {
+ int timeout = 2500;
+
+ /* Poll on DATA0 line for cmd with busy signal for 250 ms */
+ while (timeout > 0 && !(esdhc_read32(&regs->prsstat) &
+ PRSSTAT_DAT0)) {
+ udelay(100);
+ timeout--;
+ }
+
+ if (timeout <= 0) {
+ printf("Timeout waiting for DAT0 to go high!\n");
+ return TIMEOUT;
+ }
+ }
+
/* Copy the response to the response buffer */
if (cmd->resp_type & MMC_RSP_136) {
u32 cmdrsp3, cmdrsp2, cmdrsp1, cmdrsp0;
diff --git a/drivers/mmc/mmc.c b/drivers/mmc/mmc.c
index 596732e80e..1d09a56f3e 100644
--- a/drivers/mmc/mmc.c
+++ b/drivers/mmc/mmc.c
@@ -4,23 +4,7 @@
*
* Based vaguely on the Linux code
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier: GPL-2.0+
*/
#include <config.h>
@@ -31,6 +15,10 @@
#include <malloc.h>
#include <linux/list.h>
#include <div64.h>
+#include "mmc_private.h"
+
+//#define CONFIG_MMC_TRACE
+//#define CONFIG_MMC_DDR_MODE
/* Set block count limit because of 16 bit register limit on some hardware*/
#ifndef CONFIG_SYS_MMC_MAX_BLK_COUNT
@@ -40,118 +28,58 @@
static struct list_head mmc_devices;
static int cur_dev_num = -1;
-int __board_mmc_getcd(struct mmc *mmc) {
- return -1;
-}
-
-int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
- alias("__board_mmc_getcd")));
+/*
+* Manufacturer ID list
+*/
+static const struct mmc_manufacturers mmc_manuf_ids[] = {
+ {MMC_MFR_TOSHIBA, "Toshiba"},
+ {MMC_MFR_SAMSUNG, "Samsung"},
+ {MMC_MFR_SANDISK, "SanDisk"},
+ {MMC_MFR_GIGADEVICE, "GigaDevice"},
+ {MMC_MFR_HYNIX, "Hynix"},
+ {MMC_MFR_MICRON, "Micron"},
+ {MMC_MFR_MICRON1, "Micron"},
+ {0x0, "Unknown"}
+};
-#ifdef CONFIG_MMC_BOUNCE_BUFFER
-static int mmc_bounce_need_bounce(struct mmc_data *orig)
+int __weak board_mmc_getwp(struct mmc *mmc)
{
- ulong addr, len;
-
- if (orig->flags & MMC_DATA_READ)
- addr = (ulong)orig->dest;
- else
- addr = (ulong)orig->src;
-
- if (addr % ARCH_DMA_MINALIGN) {
- debug("MMC: Unaligned data destination address %08lx!\n", addr);
- return 1;
- }
-
- len = (ulong)(orig->blocksize * orig->blocks);
- if (len % ARCH_DMA_MINALIGN) {
- debug("MMC: Unaligned data destination length %08lx!\n", len);
- return 1;
- }
-
- return 0;
+ return -1;
}
-static int mmc_bounce_buffer_start(struct mmc_data *backup,
- struct mmc_data *orig)
+int mmc_getwp(struct mmc *mmc)
{
- ulong origlen, len;
- void *buffer;
+ int wp;
- if (!orig)
- return 0;
-
- if (!mmc_bounce_need_bounce(orig))
- return 0;
+ wp = board_mmc_getwp(mmc);
- memcpy(backup, orig, sizeof(struct mmc_data));
-
- origlen = orig->blocksize * orig->blocks;
- len = roundup(origlen, ARCH_DMA_MINALIGN);
- buffer = memalign(ARCH_DMA_MINALIGN, len);
- if (!buffer) {
- puts("MMC: Error allocating MMC bounce buffer!\n");
- return 1;
- }
-
- if (orig->flags & MMC_DATA_READ) {
- orig->dest = buffer;
- } else {
- memcpy(buffer, orig->src, origlen);
- orig->src = buffer;
+ if (wp < 0) {
+ if (mmc->getwp)
+ wp = mmc->getwp(mmc);
+ else
+ wp = 0;
}
- return 0;
+ return wp;
}
-static void mmc_bounce_buffer_stop(struct mmc_data *backup,
- struct mmc_data *orig)
-{
- ulong len;
-
- if (!orig)
- return;
-
- if (!mmc_bounce_need_bounce(backup))
- return;
-
- if (backup->flags & MMC_DATA_READ) {
- len = backup->blocksize * backup->blocks;
- memcpy(backup->dest, orig->dest, len);
- free(orig->dest);
- orig->dest = backup->dest;
- } else {
- free((void *)orig->src);
- orig->src = backup->src;
- }
-
- return;
-
+int __board_mmc_getcd(struct mmc *mmc) {
+ return -1;
}
-#else
-static inline int mmc_bounce_buffer_start(struct mmc_data *backup,
- struct mmc_data *orig) { return 0; }
-static inline void mmc_bounce_buffer_stop(struct mmc_data *backup,
- struct mmc_data *orig) { }
-#endif
+
+int board_mmc_getcd(struct mmc *mmc)__attribute__((weak,
+ alias("__board_mmc_getcd")));
int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
{
- struct mmc_data backup;
int ret;
- memset(&backup, 0, sizeof(backup));
-
- ret = mmc_bounce_buffer_start(&backup, data);
- if (ret)
- return ret;
-
#ifdef CONFIG_MMC_TRACE
int i;
u8 *ptr;
printf("CMD_SEND:%d\n", cmd->cmdidx);
printf("\t\tARG\t\t\t 0x%08X\n", cmd->cmdarg);
- printf("\t\tFLAG\t\t\t %d\n", cmd->flags);
ret = mmc->send_cmd(mmc, cmd, data);
switch (cmd->resp_type) {
case MMC_RSP_NONE:
@@ -197,7 +125,6 @@ int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
#else
ret = mmc->send_cmd(mmc, cmd, data);
#endif
- mmc_bounce_buffer_stop(&backup, data);
return ret;
}
@@ -213,7 +140,6 @@ int mmc_send_status(struct mmc *mmc, int timeout)
cmd.resp_type = MMC_RSP_R1;
if (!mmc_host_is_spi(mmc))
cmd.cmdarg = mmc->rca << 16;
- cmd.flags = 0;
do {
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -223,8 +149,10 @@ int mmc_send_status(struct mmc *mmc, int timeout)
MMC_STATE_PRG)
break;
else if (cmd.response[0] & MMC_STATUS_MASK) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
printf("Status Error: 0x%08X\n",
cmd.response[0]);
+#endif
return COMM_ERR;
}
} else if (--retries < 0)
@@ -238,10 +166,14 @@ int mmc_send_status(struct mmc *mmc, int timeout)
status = (cmd.response[0] & MMC_STATUS_CURR_STATE) >> 9;
printf("CURR STATE:%d\n", status);
#endif
- if (!timeout) {
+ if (timeout <= 0) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
printf("Timeout waiting card ready\n");
+#endif
return TIMEOUT;
}
+ if (cmd.response[0] & MMC_STATUS_SWITCH_ERROR)
+ return SWITCH_ERR;
return 0;
}
@@ -250,10 +182,14 @@ int mmc_set_blocklen(struct mmc *mmc, int len)
{
struct mmc_cmd cmd;
+#ifdef CONFIG_MMC_DDR_MODE
+ if (mmc->card_caps & MMC_MODE_DDR_52MHz)
+ return 0;
+#endif
+
cmd.cmdidx = MMC_CMD_SET_BLOCKLEN;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = len;
- cmd.flags = 0;
return mmc_send_cmd(mmc, &cmd, NULL);
}
@@ -270,175 +206,15 @@ struct mmc *find_mmc_device(int dev_num)
return m;
}
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
printf("MMC Device %d not found\n", dev_num);
+#endif
return NULL;
}
-static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
-{
- struct mmc_cmd cmd;
- ulong end;
- int err, start_cmd, end_cmd;
-
- if (mmc->high_capacity)
- end = start + blkcnt - 1;
- else {
- end = (start + blkcnt - 1) * mmc->write_bl_len;
- start *= mmc->write_bl_len;
- }
-
- if (IS_SD(mmc)) {
- start_cmd = SD_CMD_ERASE_WR_BLK_START;
- end_cmd = SD_CMD_ERASE_WR_BLK_END;
- } else {
- start_cmd = MMC_CMD_ERASE_GROUP_START;
- end_cmd = MMC_CMD_ERASE_GROUP_END;
- }
-
- cmd.cmdidx = start_cmd;
- cmd.cmdarg = start;
- cmd.resp_type = MMC_RSP_R1;
- cmd.flags = 0;
-
- err = mmc_send_cmd(mmc, &cmd, NULL);
- if (err)
- goto err_out;
-
- cmd.cmdidx = end_cmd;
- cmd.cmdarg = end;
-
- err = mmc_send_cmd(mmc, &cmd, NULL);
- if (err)
- goto err_out;
-
- cmd.cmdidx = MMC_CMD_ERASE;
- cmd.cmdarg = SECURE_ERASE;
- cmd.resp_type = MMC_RSP_R1b;
-
- err = mmc_send_cmd(mmc, &cmd, NULL);
- if (err)
- goto err_out;
-
- return 0;
-
-err_out:
- puts("mmc erase failed\n");
- return err;
-}
-
-static unsigned long
-mmc_berase(int dev_num, unsigned long start, lbaint_t blkcnt)
-{
- int err = 0;
- struct mmc *mmc = find_mmc_device(dev_num);
- lbaint_t blk = 0, blk_r = 0;
-
- if (!mmc)
- return -1;
-
- if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
- printf("\n\nCaution! Your devices Erase group is 0x%x\n"
- "The erase range would be change to 0x%lx~0x%lx\n\n",
- mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1),
- ((start + blkcnt + mmc->erase_grp_size)
- & ~(mmc->erase_grp_size - 1)) - 1);
-
- while (blk < blkcnt) {
- blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ?
- mmc->erase_grp_size : (blkcnt - blk);
- err = mmc_erase_t(mmc, start + blk, blk_r);
- if (err)
- break;
-
- blk += blk_r;
- }
-
- return blk;
-}
-
-static ulong
-mmc_write_blocks(struct mmc *mmc, ulong start, lbaint_t blkcnt, const void*src)
-{
- struct mmc_cmd cmd;
- struct mmc_data data;
- int timeout = 1000;
-
- if ((start + blkcnt) > mmc->block_dev.lba) {
- printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
- start + blkcnt, mmc->block_dev.lba);
- return 0;
- }
-
- if (blkcnt > 1)
- cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
- else
- cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
-
- if (mmc->high_capacity)
- cmd.cmdarg = start;
- else
- cmd.cmdarg = start * mmc->write_bl_len;
-
- cmd.resp_type = MMC_RSP_R1;
- cmd.flags = 0;
-
- data.src = src;
- data.blocks = blkcnt;
- data.blocksize = mmc->write_bl_len;
- data.flags = MMC_DATA_WRITE;
-
- if (mmc_send_cmd(mmc, &cmd, &data)) {
- printf("mmc write failed\n");
- return 0;
- }
-
- /* SPI multiblock writes terminate using a special
- * token, not a STOP_TRANSMISSION request.
- */
- if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
- cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
- cmd.cmdarg = 0;
- cmd.resp_type = MMC_RSP_R1b;
- cmd.flags = 0;
- if (mmc_send_cmd(mmc, &cmd, NULL)) {
- printf("mmc fail to send stop cmd\n");
- return 0;
- }
- }
-
- /* Waiting for the ready status */
- if (mmc_send_status(mmc, timeout))
- return 0;
-
- return blkcnt;
-}
-
-static ulong
-mmc_bwrite(int dev_num, ulong start, lbaint_t blkcnt, const void*src)
-{
- lbaint_t cur, blocks_todo = blkcnt;
-
- struct mmc *mmc = find_mmc_device(dev_num);
- if (!mmc)
- return 0;
-
- if (mmc_set_blocklen(mmc, mmc->write_bl_len))
- return 0;
-
- do {
- cur = (blocks_todo > mmc->b_max) ? mmc->b_max : blocks_todo;
- if(mmc_write_blocks(mmc, start, cur, src) != cur)
- return 0;
- blocks_todo -= cur;
- start += cur;
- src += cur * mmc->write_bl_len;
- } while (blocks_todo > 0);
-
- return blkcnt;
-}
-
-int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
+static int mmc_read_blocks(struct mmc *mmc, void *dst, lbaint_t start,
+ lbaint_t blkcnt)
{
struct mmc_cmd cmd;
struct mmc_data data;
@@ -454,7 +230,6 @@ int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
cmd.cmdarg = start * mmc->read_bl_len;
cmd.resp_type = MMC_RSP_R1;
- cmd.flags = 0;
data.dest = dst;
data.blocks = blkcnt;
@@ -468,9 +243,10 @@ int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
cmd.cmdarg = 0;
cmd.resp_type = MMC_RSP_R1b;
- cmd.flags = 0;
if (mmc_send_cmd(mmc, &cmd, NULL)) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
printf("mmc fail to send stop cmd\n");
+#endif
return 0;
}
}
@@ -478,7 +254,7 @@ int mmc_read_blocks(struct mmc *mmc, void *dst, ulong start, lbaint_t blkcnt)
return blkcnt;
}
-static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
+static ulong mmc_bread(int dev_num, lbaint_t start, lbaint_t blkcnt, void *dst)
{
lbaint_t cur, blocks_todo = blkcnt;
@@ -490,8 +266,10 @@ static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
return 0;
if ((start + blkcnt) > mmc->block_dev.lba) {
- printf("MMC: block number 0x%lx exceeds max(0x%lx)\n",
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+ printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
start + blkcnt, mmc->block_dev.lba);
+#endif
return 0;
}
@@ -510,7 +288,7 @@ static ulong mmc_bread(int dev_num, ulong start, lbaint_t blkcnt, void *dst)
return blkcnt;
}
-int mmc_go_idle(struct mmc* mmc)
+static int mmc_go_idle(struct mmc *mmc)
{
struct mmc_cmd cmd;
int err;
@@ -520,7 +298,6 @@ int mmc_go_idle(struct mmc* mmc)
cmd.cmdidx = MMC_CMD_GO_IDLE_STATE;
cmd.cmdarg = 0;
cmd.resp_type = MMC_RSP_NONE;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -532,8 +309,7 @@ int mmc_go_idle(struct mmc* mmc)
return 0;
}
-int
-sd_send_op_cond(struct mmc *mmc)
+static int sd_send_op_cond(struct mmc *mmc)
{
int timeout = 1000;
int err;
@@ -543,7 +319,6 @@ sd_send_op_cond(struct mmc *mmc)
cmd.cmdidx = MMC_CMD_APP_CMD;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = 0;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -584,7 +359,6 @@ sd_send_op_cond(struct mmc *mmc)
cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
cmd.resp_type = MMC_RSP_R3;
cmd.cmdarg = 0;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -600,66 +374,92 @@ sd_send_op_cond(struct mmc *mmc)
return 0;
}
+/* We pass in the cmd since otherwise the init seems to fail */
+static int mmc_send_op_cond_iter(struct mmc *mmc, struct mmc_cmd *cmd,
+ int use_arg)
+{
+ int err;
+
+ cmd->cmdidx = MMC_CMD_SEND_OP_COND;
+ cmd->resp_type = MMC_RSP_R3;
+ cmd->cmdarg = 0;
+ if (use_arg && !mmc_host_is_spi(mmc)) {
+ cmd->cmdarg =
+ (mmc->voltages &
+ (mmc->op_cond_response & OCR_VOLTAGE_MASK)) |
+ (mmc->op_cond_response & OCR_ACCESS_MODE);
+ }
+ if (mmc->host_caps & MMC_MODE_HC)
+ cmd->cmdarg |= OCR_HCS;
+
+ err = mmc_send_cmd(mmc, cmd, NULL);
+ if (err)
+ return err;
+ mmc->op_cond_response = cmd->response[0];
+ mmc->ocr = cmd->response[0];
+ return 0;
+}
+
int mmc_send_op_cond(struct mmc *mmc)
{
- int timeout = 10000;
struct mmc_cmd cmd;
- int err;
+ int err, i;
/* Some cards seem to need this */
mmc_go_idle(mmc);
/* Asking to the card its capabilities */
- cmd.cmdidx = MMC_CMD_SEND_OP_COND;
- cmd.resp_type = MMC_RSP_R3;
- cmd.cmdarg = 0;
- cmd.flags = 0;
-
- err = mmc_send_cmd(mmc, &cmd, NULL);
-
- if (err)
- return err;
-
- udelay(1000);
-
- do {
- cmd.cmdidx = MMC_CMD_SEND_OP_COND;
- cmd.resp_type = MMC_RSP_R3;
- cmd.cmdarg = (mmc_host_is_spi(mmc) ? 0 :
- (mmc->voltages &
- (cmd.response[0] & OCR_VOLTAGE_MASK)) |
- (cmd.response[0] & OCR_ACCESS_MODE));
-
- if (mmc->host_caps & MMC_MODE_HC)
- cmd.cmdarg |= OCR_HCS;
-
- cmd.flags = 0;
-
- err = mmc_send_cmd(mmc, &cmd, NULL);
-
+ mmc->op_cond_pending = 1;
+ for (i = 0; i < 2; i++) {
+ err = mmc_send_op_cond_iter(mmc, &cmd, i != 0);
if (err)
return err;
- udelay(1000);
- } while (!(cmd.response[0] & OCR_BUSY) && timeout--);
+ /* exit if not busy (flag seems to be inverted) */
+ if (mmc->op_cond_response & OCR_BUSY)
+ return 0;
+ }
+ return IN_PROGRESS;
+}
- if (timeout <= 0)
- return UNUSABLE_ERR;
+int mmc_complete_op_cond(struct mmc *mmc)
+{
+ struct mmc_cmd cmd;
+ int timeout = 1000;
+ uint start;
+ int err;
+
+ mmc->op_cond_pending = 0;
+
+ /* If device is ready, do not check OCR again.
+ * For NCMMCS16G, another OCR reading may cause that it's not working. */
+ if(!(mmc->ocr & OCR_BUSY))
+ {
+ start = get_timer(0);
+ do {
+ err = mmc_send_op_cond_iter(mmc, &cmd, 1);
+ if (err)
+ return err;
+ if (get_timer(start) > timeout)
+ return UNUSABLE_ERR;
+ udelay(100);
+ } while (!(mmc->op_cond_response & OCR_BUSY));
+ }
if (mmc_host_is_spi(mmc)) { /* read OCR for spi */
cmd.cmdidx = MMC_CMD_SPI_READ_OCR;
cmd.resp_type = MMC_RSP_R3;
cmd.cmdarg = 0;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
if (err)
return err;
+
+ mmc->ocr = cmd.response[0];
}
mmc->version = MMC_VERSION_UNKNOWN;
- mmc->ocr = cmd.response[0];
mmc->high_capacity = ((mmc->ocr & OCR_HCS) == OCR_HCS);
mmc->rca = 0;
@@ -668,7 +468,7 @@ int mmc_send_op_cond(struct mmc *mmc)
}
-int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)
+static int mmc_send_ext_csd(struct mmc *mmc, u8 *ext_csd)
{
struct mmc_cmd cmd;
struct mmc_data data;
@@ -678,11 +478,10 @@ int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)
cmd.cmdidx = MMC_CMD_SEND_EXT_CSD;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = 0;
- cmd.flags = 0;
- data.dest = ext_csd;
+ data.dest = (char *)ext_csd;
data.blocks = 1;
- data.blocksize = 512;
+ data.blocksize = MMC_MAX_BLOCK_LEN;
data.flags = MMC_DATA_READ;
err = mmc_send_cmd(mmc, &cmd, &data);
@@ -691,7 +490,7 @@ int mmc_send_ext_csd(struct mmc *mmc, char *ext_csd)
}
-int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
+static int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
{
struct mmc_cmd cmd;
int timeout = 1000;
@@ -702,7 +501,6 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
(index << 16) |
(value << 8);
- cmd.flags = 0;
ret = mmc_send_cmd(mmc, &cmd, NULL);
@@ -714,9 +512,9 @@ int mmc_switch(struct mmc *mmc, u8 set, u8 index, u8 value)
}
-int mmc_change_freq(struct mmc *mmc)
+static int mmc_change_freq(struct mmc *mmc)
{
- ALLOC_CACHE_ALIGN_BUFFER(char, ext_csd, 512);
+ ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
char cardtype;
int err;
@@ -739,7 +537,7 @@ int mmc_change_freq(struct mmc *mmc)
err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_HS_TIMING, 1);
if (err)
- return err;
+ return err == SWITCH_ERR ? 0 : err;
/* Now check to see that it worked */
err = mmc_send_ext_csd(mmc, ext_csd);
@@ -752,10 +550,43 @@ int mmc_change_freq(struct mmc *mmc)
return 0;
/* High Speed is set, there are two types: 52MHz and 26MHz */
- if (cardtype & MMC_HS_52MHZ)
+ if (cardtype & EXT_CSD_CARD_TYPE_52) {
+#ifdef CONFIG_MMC_DDR_MODE
+ if (cardtype & EXT_CSD_CARD_TYPE_DDR_52)
+ mmc->card_caps |= MMC_MODE_DDR_52MHz;
+#endif
mmc->card_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS;
- else
+ } else {
mmc->card_caps |= MMC_MODE_HS;
+ }
+
+ return 0;
+}
+
+static int mmc_set_capacity(struct mmc *mmc, int part_num)
+{
+ switch (part_num) {
+ case 0:
+ mmc->capacity = mmc->capacity_user;
+ break;
+ case 1:
+ case 2:
+ mmc->capacity = mmc->capacity_boot;
+ break;
+ case 3:
+ mmc->capacity = mmc->capacity_rpmb;
+ break;
+ case 4:
+ case 5:
+ case 6:
+ case 7:
+ mmc->capacity = mmc->capacity_gp[part_num - 4];
+ break;
+ default:
+ return -1;
+ }
+
+ mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
return 0;
}
@@ -763,13 +594,18 @@ int mmc_change_freq(struct mmc *mmc)
int mmc_switch_part(int dev_num, unsigned int part_num)
{
struct mmc *mmc = find_mmc_device(dev_num);
+ int ret;
if (!mmc)
return -1;
- return mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
- (mmc->part_config & ~PART_ACCESS_MASK)
- | (part_num & PART_ACCESS_MASK));
+ ret = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL, EXT_CSD_PART_CONF,
+ (mmc->part_config & ~PART_ACCESS_MASK)
+ | (part_num & PART_ACCESS_MASK));
+ if (ret)
+ return ret;
+
+ return mmc_set_capacity(mmc, part_num);
}
int mmc_getcd(struct mmc *mmc)
@@ -778,13 +614,17 @@ int mmc_getcd(struct mmc *mmc)
cd = board_mmc_getcd(mmc);
- if ((cd < 0) && mmc->getcd)
- cd = mmc->getcd(mmc);
+ if (cd < 0) {
+ if (mmc->getcd)
+ cd = mmc->getcd(mmc);
+ else
+ cd = 1;
+ }
return cd;
}
-int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
+static int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
{
struct mmc_cmd cmd;
struct mmc_data data;
@@ -795,7 +635,6 @@ int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
cmd.cmdarg = (mode << 31) | 0xffffff;
cmd.cmdarg &= ~(0xf << (group * 4));
cmd.cmdarg |= value << (group * 4);
- cmd.flags = 0;
data.dest = (char *)resp;
data.blocksize = 64;
@@ -806,7 +645,7 @@ int sd_switch(struct mmc *mmc, int mode, int group, u8 value, u8 *resp)
}
-int sd_change_freq(struct mmc *mmc)
+static int sd_change_freq(struct mmc *mmc)
{
int err;
struct mmc_cmd cmd;
@@ -824,7 +663,6 @@ int sd_change_freq(struct mmc *mmc)
cmd.cmdidx = MMC_CMD_APP_CMD;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = mmc->rca << 16;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -834,7 +672,6 @@ int sd_change_freq(struct mmc *mmc)
cmd.cmdidx = SD_CMD_APP_SEND_SCR;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = 0;
- cmd.flags = 0;
timeout = 3;
@@ -865,6 +702,8 @@ retry_scr:
break;
case 2:
mmc->version = SD_VERSION_2;
+ if ((mmc->scr[0] >> 15) & 0x1)
+ mmc->version = SD_VERSION_3;
break;
default:
mmc->version = SD_VERSION_1_0;
@@ -947,7 +786,7 @@ static const int multipliers[] = {
80,
};
-void mmc_set_ios(struct mmc *mmc)
+static void mmc_set_ios(struct mmc *mmc)
{
mmc->set_ios(mmc);
}
@@ -965,21 +804,21 @@ void mmc_set_clock(struct mmc *mmc, uint clock)
mmc_set_ios(mmc);
}
-void mmc_set_bus_width(struct mmc *mmc, uint width)
+static void mmc_set_bus_width(struct mmc *mmc, uint width)
{
mmc->bus_width = width;
mmc_set_ios(mmc);
}
-int mmc_startup(struct mmc *mmc)
+static int mmc_startup(struct mmc *mmc)
{
- int err, width;
+ int err, i;
uint mult, freq;
u64 cmult, csize, capacity;
struct mmc_cmd cmd;
- ALLOC_CACHE_ALIGN_BUFFER(char, ext_csd, 512);
- ALLOC_CACHE_ALIGN_BUFFER(char, test_csd, 512);
+ ALLOC_CACHE_ALIGN_BUFFER(u8, ext_csd, MMC_MAX_BLOCK_LEN);
+ ALLOC_CACHE_ALIGN_BUFFER(u8, test_csd, MMC_MAX_BLOCK_LEN);
int timeout = 1000;
#ifdef CONFIG_MMC_SPI_CRC_ON
@@ -987,7 +826,6 @@ int mmc_startup(struct mmc *mmc)
cmd.cmdidx = MMC_CMD_SPI_CRC_ON_OFF;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = 1;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
if (err)
@@ -1000,7 +838,6 @@ int mmc_startup(struct mmc *mmc)
MMC_CMD_ALL_SEND_CID; /* cmd not supported in spi */
cmd.resp_type = MMC_RSP_R2;
cmd.cmdarg = 0;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -1018,7 +855,6 @@ int mmc_startup(struct mmc *mmc)
cmd.cmdidx = SD_CMD_SEND_RELATIVE_ADDR;
cmd.cmdarg = mmc->rca << 16;
cmd.resp_type = MMC_RSP_R6;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -1033,7 +869,6 @@ int mmc_startup(struct mmc *mmc)
cmd.cmdidx = MMC_CMD_SEND_CSD;
cmd.resp_type = MMC_RSP_R2;
cmd.cmdarg = mmc->rca << 16;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -1096,21 +931,24 @@ int mmc_startup(struct mmc *mmc)
cmult = (mmc->csd[2] & 0x00038000) >> 15;
}
- mmc->capacity = (csize + 1) << (cmult + 2);
- mmc->capacity *= mmc->read_bl_len;
+ mmc->capacity_user = (csize + 1) << (cmult + 2);
+ mmc->capacity_user *= mmc->read_bl_len;
+ mmc->capacity_boot = 0;
+ mmc->capacity_rpmb = 0;
+ for (i = 0; i < 4; i++)
+ mmc->capacity_gp[i] = 0;
- if (mmc->read_bl_len > 512)
- mmc->read_bl_len = 512;
+ if (mmc->read_bl_len > MMC_MAX_BLOCK_LEN)
+ mmc->read_bl_len = MMC_MAX_BLOCK_LEN;
- if (mmc->write_bl_len > 512)
- mmc->write_bl_len = 512;
+ if (mmc->write_bl_len > MMC_MAX_BLOCK_LEN)
+ mmc->write_bl_len = MMC_MAX_BLOCK_LEN;
/* Select the card, and put it into Transfer Mode */
if (!mmc_host_is_spi(mmc)) { /* cmd not supported in spi */
cmd.cmdidx = MMC_CMD_SELECT_CARD;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = mmc->rca << 16;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
if (err)
@@ -1125,7 +963,7 @@ int mmc_startup(struct mmc *mmc)
if (!IS_SD(mmc) && (mmc->version >= MMC_VERSION_4)) {
/* check ext_csd version and capacity */
err = mmc_send_ext_csd(mmc, ext_csd);
- if (!err & (ext_csd[EXT_CSD_REV] >= 2)) {
+ if (!err && (ext_csd[EXT_CSD_REV] >= 2)) {
/*
* According to the JEDEC Standard, the value of
* ext_csd's capacity is valid if the value is more
@@ -1135,20 +973,48 @@ int mmc_startup(struct mmc *mmc)
| ext_csd[EXT_CSD_SEC_CNT + 1] << 8
| ext_csd[EXT_CSD_SEC_CNT + 2] << 16
| ext_csd[EXT_CSD_SEC_CNT + 3] << 24;
- capacity *= 512;
+ capacity *= MMC_MAX_BLOCK_LEN;
if ((capacity >> 20) > 2 * 1024)
- mmc->capacity = capacity;
+ mmc->capacity_user = capacity;
+ }
+
+ switch (ext_csd[EXT_CSD_REV]) {
+ case 1:
+ mmc->version = MMC_VERSION_4_1;
+ break;
+ case 2:
+ mmc->version = MMC_VERSION_4_2;
+ break;
+ case 3:
+ mmc->version = MMC_VERSION_4_3;
+ break;
+ case 5:
+ mmc->version = MMC_VERSION_4_41;
+ break;
+ case 6:
+ mmc->version = MMC_VERSION_4_5;
+ break;
}
/*
- * Check whether GROUP_DEF is set, if yes, read out
- * group size from ext_csd directly, or calculate
- * the group size from the csd value.
+ * Host needs to enable ERASE_GRP_DEF bit if device is
+ * partitioned. This bit will be lost every time after a reset
+ * or power off. This will affect erase size.
*/
- if (ext_csd[EXT_CSD_ERASE_GROUP_DEF])
+ if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) &&
+ (ext_csd[EXT_CSD_PARTITIONS_ATTRIBUTE] & PART_ENH_ATTRIB)) {
+ err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
+ EXT_CSD_ERASE_GROUP_DEF, 1);
+
+ if (err)
+ return err;
+
+ /* Read out group size from ext_csd */
mmc->erase_grp_size =
- ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] * 512 * 1024;
- else {
+ ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE] *
+ MMC_MAX_BLOCK_LEN * 1024;
+ } else {
+ /* Calculate the group size from the csd value. */
int erase_gsz, erase_gmul;
erase_gsz = (mmc->csd[2] & 0x00007c00) >> 10;
erase_gmul = (mmc->csd[2] & 0x000003e0) >> 5;
@@ -1157,10 +1023,28 @@ int mmc_startup(struct mmc *mmc)
}
/* store the partition info of emmc */
- if (ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT)
+ if ((ext_csd[EXT_CSD_PARTITIONING_SUPPORT] & PART_SUPPORT) ||
+ ext_csd[EXT_CSD_BOOT_MULT])
mmc->part_config = ext_csd[EXT_CSD_PART_CONF];
+
+ mmc->capacity_boot = ext_csd[EXT_CSD_BOOT_MULT] << 17;
+
+ mmc->capacity_rpmb = ext_csd[EXT_CSD_RPMB_MULT] << 17;
+
+ for (i = 0; i < 4; i++) {
+ int idx = EXT_CSD_GP_SIZE_MULT + i * 3;
+ mmc->capacity_gp[i] = (ext_csd[idx + 2] << 16) +
+ (ext_csd[idx + 1] << 8) + ext_csd[idx];
+ mmc->capacity_gp[i] *=
+ ext_csd[EXT_CSD_HC_ERASE_GRP_SIZE];
+ mmc->capacity_gp[i] *= ext_csd[EXT_CSD_HC_WP_GRP_SIZE];
+ }
}
+ err = mmc_set_capacity(mmc, mmc->part_num);
+ if (err)
+ return err;
+
if (IS_SD(mmc))
err = sd_change_freq(mmc);
else
@@ -1177,7 +1061,6 @@ int mmc_startup(struct mmc *mmc)
cmd.cmdidx = MMC_CMD_APP_CMD;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = mmc->rca << 16;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
if (err)
@@ -1186,7 +1069,6 @@ int mmc_startup(struct mmc *mmc)
cmd.cmdidx = SD_CMD_APP_SET_BUS_WIDTH;
cmd.resp_type = MMC_RSP_R1;
cmd.cmdarg = 2;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
if (err)
return err;
@@ -1195,23 +1077,59 @@ int mmc_startup(struct mmc *mmc)
}
if (mmc->card_caps & MMC_MODE_HS)
- mmc_set_clock(mmc, 50000000);
+ mmc->tran_speed = 50000000;
else
- mmc_set_clock(mmc, 25000000);
+ mmc->tran_speed = 25000000;
} else {
- for (width = EXT_CSD_BUS_WIDTH_8; width >= 0; width--) {
- /* Set the card to use 4 bit*/
+ int idx;
+
+ /* An array of possible bus widths in order of preference */
+ static unsigned ext_csd_bits[] = {
+#ifdef CONFIG_MMC_DDR_MODE
+ EXT_CSD_DDR_BUS_WIDTH_8,
+ EXT_CSD_DDR_BUS_WIDTH_4,
+#endif
+ EXT_CSD_BUS_WIDTH_8,
+ EXT_CSD_BUS_WIDTH_4,
+ EXT_CSD_BUS_WIDTH_1,
+ };
+
+ /* An array to map CSD bus widths to host cap bits */
+ static unsigned ext_to_hostcaps[] = {
+#ifdef CONFIG_MMC_DDR_MODE
+ [EXT_CSD_DDR_BUS_WIDTH_4] = MMC_MODE_DDR_52MHz,
+ [EXT_CSD_DDR_BUS_WIDTH_8] = MMC_MODE_DDR_52MHz,
+#endif
+ [EXT_CSD_BUS_WIDTH_4] = MMC_MODE_4BIT,
+ [EXT_CSD_BUS_WIDTH_8] = MMC_MODE_8BIT,
+ };
+
+ /* An array to map chosen bus width to an integer */
+ static unsigned widths[] = {
+#ifdef CONFIG_MMC_DDR_MODE
+ 0x80000008, 0x80000004, /* ddr mode */
+#endif
+ 8, 4, 1,
+ };
+
+ for (idx=0; idx < ARRAY_SIZE(ext_csd_bits); idx++) {
+ unsigned int extw = ext_csd_bits[idx];
+
+ /*
+ * Check to make sure the controller supports
+ * this bus width, if it's more than 1
+ */
+ if (extw != EXT_CSD_BUS_WIDTH_1 &&
+ !(mmc->host_caps & ext_to_hostcaps[extw]))
+ continue;
+
err = mmc_switch(mmc, EXT_CSD_CMD_SET_NORMAL,
- EXT_CSD_BUS_WIDTH, width);
+ EXT_CSD_BUS_WIDTH, extw);
if (err)
continue;
- if (!width) {
- mmc_set_bus_width(mmc, 1);
- break;
- } else
- mmc_set_bus_width(mmc, 4 * width);
+ mmc_set_bus_width(mmc, widths[idx]);
err = mmc_send_ext_csd(mmc, test_csd);
if (!err && ext_csd[EXT_CSD_PARTITIONING_SUPPORT] \
@@ -1225,38 +1143,76 @@ int mmc_startup(struct mmc *mmc)
&& memcmp(&ext_csd[EXT_CSD_SEC_CNT], \
&test_csd[EXT_CSD_SEC_CNT], 4) == 0) {
- mmc->card_caps |= width;
+ mmc->card_caps |= ext_to_hostcaps[extw];
break;
}
}
if (mmc->card_caps & MMC_MODE_HS) {
if (mmc->card_caps & MMC_MODE_HS_52MHz)
- mmc_set_clock(mmc, 52000000);
+ mmc->tran_speed = 52000000;
else
- mmc_set_clock(mmc, 26000000);
- } else
- mmc_set_clock(mmc, 20000000);
+ mmc->tran_speed = 26000000;
+ }
}
+ mmc_set_clock(mmc, mmc->tran_speed);
+
/* fill in device description */
mmc->block_dev.lun = 0;
mmc->block_dev.type = 0;
mmc->block_dev.blksz = mmc->read_bl_len;
+ mmc->block_dev.log2blksz = LOG2(mmc->block_dev.blksz);
mmc->block_dev.lba = lldiv(mmc->capacity, mmc->read_bl_len);
- sprintf(mmc->block_dev.vendor, "Man %06x Snr %08x", mmc->cid[0] >> 8,
- (mmc->cid[2] << 8) | (mmc->cid[3] >> 24));
- sprintf(mmc->block_dev.product, "%c%c%c%c%c", mmc->cid[0] & 0xff,
- (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
- (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff);
- sprintf(mmc->block_dev.revision, "%d.%d", mmc->cid[2] >> 28,
- (mmc->cid[2] >> 24) & 0xf);
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+ sprintf(mmc->block_dev.vendor, "Man %06x Snr %04x%04x",
+ mmc->cid[0] >> 24, (mmc->cid[2] & 0xffff),
+ (mmc->cid[3] >> 16) & 0xffff);
+ sprintf(mmc->block_dev.product, "%c%c%c%c%c%c", mmc->cid[0] & 0xff,
+ (mmc->cid[1] >> 24), (mmc->cid[1] >> 16) & 0xff,
+ (mmc->cid[1] >> 8) & 0xff, mmc->cid[1] & 0xff,
+ (mmc->cid[2] >> 24) & 0xff);
+ sprintf(mmc->block_dev.revision, "%d.%d", (mmc->cid[2] >> 20) & 0xf,
+ (mmc->cid[2] >> 16) & 0xf);
+#else
+ mmc->block_dev.vendor[0] = 0;
+ mmc->block_dev.product[0] = 0;
+ mmc->block_dev.revision[0] = 0;
+#endif
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBDISK_SUPPORT)
init_part(&mmc->block_dev);
+#endif
return 0;
}
-int mmc_send_if_cond(struct mmc *mmc)
+static void print_mmcinfo(struct mmc *mmc)
+{
+ int maf_idx;
+ for (maf_idx = 0; mmc_manuf_ids[maf_idx].id != 0x0; maf_idx++) {
+ if (mmc_manuf_ids[maf_idx].id == (mmc->cid[0] >> 24))
+ break;
+ }
+
+ printf("-------------MMC information-----------\n");
+ printf("Manufacturer ID: %x, Name: %s \n", mmc->cid[0] >> 24, mmc_manuf_ids[maf_idx].name);
+ printf("OEM: %x\n", (mmc->cid[0] >> 8) & 0xffff);
+
+ printf("Tran Speed: %d\n", mmc->tran_speed);
+ printf("Rd Block Len: %d\n", mmc->read_bl_len);
+
+ printf("%s version %d.%d\n", IS_SD(mmc) ? "SD" : "MMC",
+ (mmc->version >> 8) & 0xf, mmc->version & 0xff);
+
+ printf("High Capacity: %s\n", mmc->high_capacity ? "Yes" : "No");
+ puts("Capacity: ");
+ //print_size(mmc->capacity, "\n");
+
+ printf("Bus Width: %d-bit\n", mmc->bus_width);
+ printf("-----------------------------------------\n");
+}
+
+static int mmc_send_if_cond(struct mmc *mmc)
{
struct mmc_cmd cmd;
int err;
@@ -1265,7 +1221,6 @@ int mmc_send_if_cond(struct mmc *mmc)
/* We set the bit if the host supports voltages between 2.7 and 3.6 V */
cmd.cmdarg = ((mmc->voltages & 0xff8000) != 0) << 8 | 0xaa;
cmd.resp_type = MMC_RSP_R7;
- cmd.flags = 0;
err = mmc_send_cmd(mmc, &cmd, NULL);
@@ -1303,18 +1258,22 @@ int mmc_register(struct mmc *mmc)
block_dev_desc_t *mmc_get_dev(int dev)
{
struct mmc *mmc = find_mmc_device(dev);
+ if (!mmc || mmc_init(mmc))
+ return NULL;
- return mmc ? &mmc->block_dev : NULL;
+ return &mmc->block_dev;
}
#endif
-int mmc_init(struct mmc *mmc)
+int mmc_start_init(struct mmc *mmc)
{
int err;
if (mmc_getcd(mmc) == 0) {
mmc->has_init = 0;
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
printf("MMC: no card present\n");
+#endif
return NO_CARD_ERR;
}
@@ -1348,17 +1307,51 @@ int mmc_init(struct mmc *mmc)
if (err == TIMEOUT) {
err = mmc_send_op_cond(mmc);
- if (err) {
+ if (err && err != IN_PROGRESS) {
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
printf("Card did not respond to voltage select!\n");
+#endif
return UNUSABLE_ERR;
}
}
- err = mmc_startup(mmc);
+ if (err == IN_PROGRESS)
+ mmc->init_in_progress = 1;
+
+ return err;
+}
+
+static int mmc_complete_init(struct mmc *mmc)
+{
+ int err = 0;
+
+ if (mmc->op_cond_pending)
+ err = mmc_complete_op_cond(mmc);
+
+ if (!err)
+ err = mmc_startup(mmc);
if (err)
mmc->has_init = 0;
else
mmc->has_init = 1;
+ mmc->init_in_progress = 0;
+ return err;
+}
+
+int mmc_init(struct mmc *mmc)
+{
+ int err = IN_PROGRESS;
+ unsigned start = get_timer(0);
+
+ if (mmc->has_init)
+ return 0;
+ if (!mmc->init_in_progress)
+ err = mmc_start_init(mmc);
+
+ if (!err || err == IN_PROGRESS)
+ err = mmc_complete_init(mmc);
+ debug("%s: %d, time %lu\n", __func__, err, get_timer(start));
+ print_mmcinfo(mmc);
return err;
}
@@ -1374,6 +1367,8 @@ static int __def_mmc_init(bd_t *bis)
int cpu_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
int board_mmc_init(bd_t *bis) __attribute__((weak, alias("__def_mmc_init")));
+#if !defined(CONFIG_SPL_BUILD) || defined(CONFIG_SPL_LIBCOMMON_SUPPORT)
+
void print_mmc_devices(char separator)
{
struct mmc *m;
@@ -1391,11 +1386,34 @@ void print_mmc_devices(char separator)
printf("\n");
}
+#else
+void print_mmc_devices(char separator) { }
+#endif
+
int get_mmc_num(void)
{
return cur_dev_num;
}
+void mmc_set_preinit(struct mmc *mmc, int preinit)
+{
+ mmc->preinit = preinit;
+}
+
+static void do_preinit(void)
+{
+ struct mmc *m;
+ struct list_head *entry;
+
+ list_for_each(entry, &mmc_devices) {
+ m = list_entry(entry, struct mmc, link);
+
+ if (m->preinit)
+ mmc_start_init(m);
+ }
+}
+
+
int mmc_initialize(bd_t *bis)
{
INIT_LIST_HEAD (&mmc_devices);
@@ -1404,7 +1422,144 @@ int mmc_initialize(bd_t *bis)
if (board_mmc_init(bis) < 0)
cpu_mmc_init(bis);
+#ifndef CONFIG_SPL_BUILD
print_mmc_devices(',');
+#endif
+ do_preinit();
return 0;
}
+
+#ifdef CONFIG_SUPPORT_EMMC_BOOT
+/*
+ * This function changes the size of boot partition and the size of rpmb
+ * partition present on EMMC devices.
+ *
+ * Input Parameters:
+ * struct *mmc: pointer for the mmc device strcuture
+ * bootsize: size of boot partition
+ * rpmbsize: size of rpmb partition
+ *
+ * Returns 0 on success.
+ */
+
+int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
+ unsigned long rpmbsize)
+{
+ int err;
+ struct mmc_cmd cmd;
+
+ /* Only use this command for raw EMMC moviNAND. Enter backdoor mode */
+ cmd.cmdidx = MMC_CMD_RES_MAN;
+ cmd.resp_type = MMC_RSP_R1b;
+ cmd.cmdarg = MMC_CMD62_ARG1;
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err) {
+ debug("mmc_boot_partition_size_change: Error1 = %d\n", err);
+ return err;
+ }
+
+ /* Boot partition changing mode */
+ cmd.cmdidx = MMC_CMD_RES_MAN;
+ cmd.resp_type = MMC_RSP_R1b;
+ cmd.cmdarg = MMC_CMD62_ARG2;
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err) {
+ debug("mmc_boot_partition_size_change: Error2 = %d\n", err);
+ return err;
+ }
+ /* boot partition size is multiple of 128KB */
+ bootsize = (bootsize * 1024) / 128;
+
+ /* Arg: boot partition size */
+ cmd.cmdidx = MMC_CMD_RES_MAN;
+ cmd.resp_type = MMC_RSP_R1b;
+ cmd.cmdarg = bootsize;
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err) {
+ debug("mmc_boot_partition_size_change: Error3 = %d\n", err);
+ return err;
+ }
+ /* RPMB partition size is multiple of 128KB */
+ rpmbsize = (rpmbsize * 1024) / 128;
+ /* Arg: RPMB partition size */
+ cmd.cmdidx = MMC_CMD_RES_MAN;
+ cmd.resp_type = MMC_RSP_R1b;
+ cmd.cmdarg = rpmbsize;
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err) {
+ debug("mmc_boot_partition_size_change: Error4 = %d\n", err);
+ return err;
+ }
+ return 0;
+}
+
+/*
+ * This function shall form and send the commands to open / close the
+ * boot partition specified by user.
+ *
+ * Input Parameters:
+ * ack: 0x0 - No boot acknowledge sent (default)
+ * 0x1 - Boot acknowledge sent during boot operation
+ * part_num: User selects boot data that will be sent to master
+ * 0x0 - Device not boot enabled (default)
+ * 0x1 - Boot partition 1 enabled for boot
+ * 0x2 - Boot partition 2 enabled for boot
+ * access: User selects partitions to access
+ * 0x0 : No access to boot partition (default)
+ * 0x1 : R/W boot partition 1
+ * 0x2 : R/W boot partition 2
+ * 0x3 : R/W Replay Protected Memory Block (RPMB)
+ *
+ * Returns 0 on success.
+ */
+int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access)
+{
+ int err;
+ struct mmc_cmd cmd;
+
+ /* Boot ack enable, boot partition enable , boot partition access */
+ cmd.cmdidx = MMC_CMD_SWITCH;
+ cmd.resp_type = MMC_RSP_R1b;
+
+ cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
+ (EXT_CSD_PART_CONF << 16) |
+ ((EXT_CSD_BOOT_ACK(ack) |
+ EXT_CSD_BOOT_PART_NUM(part_num) |
+ EXT_CSD_PARTITION_ACCESS(access)) << 8);
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err) {
+ if (access) {
+ debug("mmc boot partition#%d open fail:Error1 = %d\n",
+ part_num, err);
+ } else {
+ debug("mmc boot partition#%d close fail:Error = %d\n",
+ part_num, err);
+ }
+ return err;
+ }
+
+ if (access) {
+ /* 4bit transfer mode at booting time. */
+ cmd.cmdidx = MMC_CMD_SWITCH;
+ cmd.resp_type = MMC_RSP_R1b;
+
+ cmd.cmdarg = (MMC_SWITCH_MODE_WRITE_BYTE << 24) |
+ (EXT_CSD_BOOT_BUS_WIDTH << 16) |
+ ((1 << 0) << 8);
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err) {
+ debug("mmc boot partition#%d open fail:Error2 = %d\n",
+ part_num, err);
+ return err;
+ }
+ }
+ return 0;
+}
+#endif
diff --git a/drivers/mmc/mmc_parts.c b/drivers/mmc/mmc_parts.c
new file mode 100644
index 0000000000..c50d75fd76
--- /dev/null
+++ b/drivers/mmc/mmc_parts.c
@@ -0,0 +1,725 @@
+/* Copyright (c) 2011-2012, Code Aurora Forum. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Code Aurora Forum, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include <linux/string.h>
+#include "common.h"
+#include <malloc.h>
+#include <asm/arch/rda_sys.h>
+#include "mmc.h"
+#include <part.h>
+
+#define EFI_ENTRIES 32
+
+static int part_nums;
+
+/* To support the Android-style naming of flash */
+#define MAX_PTN (CONFIG_MAX_PARTITION_NUM - CONFIG_MIN_PARTITION_NUM + 1)
+static disk_partition_t ptable[MAX_PTN];
+
+/* special size referring to all the remaining space in a partition */
+#define SIZE_REMAINING (u64)(-1)
+
+/* special offset value, it is used when not provided by user
+ *
+ * this value is used temporarily during parsing, later such offests
+ * are recalculated */
+#define OFFSET_NOT_SPECIFIED (u64)(-1)
+
+
+/* a bunch of this is duplicate of part_efi.c and part_efi.h
+ * we should consider putting this code in there and layer
+ * the partition info.
+ */
+#define EFI_VERSION 0x00010000
+#define EFI_NAMELEN 36
+
+static const u8 partition_type[16] = {
+ 0xa2, 0xa0, 0xd0, 0xeb, 0xe5, 0xb9, 0x33, 0x44,
+ 0x87, 0xc0, 0x68, 0xb6, 0xb7, 0x26, 0x99, 0xc7,
+};
+
+static const u8 random_uuid[16] = {
+ 0xff, 0x1f, 0xf2, 0xf9, 0xd4, 0xa8, 0x0e, 0x5f,
+ 0x97, 0x46, 0x59, 0x48, 0x69, 0xae, 0xc3, 0x4e,
+};
+
+struct efi_entry {
+ u8 type_uuid[16];
+ u8 uniq_uuid[16];
+ u64 first_lba;
+ u64 last_lba;
+ u64 attr;
+ u16 name[EFI_NAMELEN];
+};
+
+struct efi_header {
+ u8 magic[8];
+
+ u32 version;
+ u32 header_sz;
+
+ u32 crc32;
+ u32 reserved;
+
+ u64 header_lba;
+ u64 backup_lba;
+ u64 first_lba;
+ u64 last_lba;
+
+ u8 volume_uuid[16];
+
+ u64 entries_lba;
+
+ u32 entries_count;
+ u32 entries_size;
+ u32 entries_crc32;
+} __attribute__((packed));
+
+struct ptable {
+ u8 mbr[512];
+ union {
+ struct efi_header header;
+ u8 block[512];
+ };
+ struct efi_entry entry[EFI_ENTRIES];
+};
+
+static struct ptable the_ptable;
+
+/* in a board specific file */
+struct fbt_partition {
+ char name[32];
+ char type[32];
+ u64 offset;
+ u64 size;
+ unsigned int attr;
+};
+/* For the 16GB eMMC part used in Tungsten, the erase group size is 512KB.
+ * So every partition should be at least 512KB to make it possible to use
+ * the mmc erase operation when doing 'fastboot erase'.
+ * However, the xloader is an exception because in order for the OMAP4 ROM
+ * bootloader to find it, it must be at offset 0KB, 128KB, 256KB, or 384KB.
+ * Since the partition table is at 0KB, we choose 128KB. Special care
+ * must be kept to prevent erase the partition table when/if the xloader
+ * partition is being erased.
+ */
+struct fbt_partition fbt_partitions[EFI_ENTRIES];
+
+/**
+ * Parses a string into a number. The number stored at ptr is
+ * potentially suffixed with K (for kilobytes, or 1024 bytes),
+ * M (for megabytes, or 1048576 bytes), or G (for gigabytes, or
+ * 1073741824). If the number is suffixed with K, M, or G, then
+ * the return value is the number multiplied by one kilobyte, one
+ * megabyte, or one gigabyte, respectively.
+ *
+ * @param ptr where parse begins
+ * @param retptr output pointer to next char after parse completes (output)
+ * @return resulting unsigned int
+ */
+static unsigned long memsize_parse (const char *const ptr, const char **retptr)
+{
+ unsigned long ret = simple_strtoul(ptr, (char **)retptr, 0);
+
+ switch (**retptr) {
+ case 'G':
+ case 'g':
+ ret <<= 10;
+ case 'M':
+ case 'm':
+ ret <<= 10;
+ case 'K':
+ case 'k':
+ ret <<= 10;
+ (*retptr)++;
+ default:
+ break;
+ }
+
+ return ret;
+}
+
+#define MIN_PART_SIZE 4096
+/**
+ * Parse one partition definition, allocate memory and return pointer to this
+ * location in retpart.
+ *
+ * @param partdef pointer to the partition definition string i.e. <part-def>
+ * @param ret output pointer to next char after parse completes (output)
+ * @param retpart pointer to the allocated partition (output)
+ * @return 0 on success, 1 otherwise
+ */
+static int part_parse(const char *const partdef, const char **ret, struct fbt_partition *part)
+{
+ u64 size;
+ u64 offset;
+ const char *name;
+ int name_len;
+ unsigned int mask_flags;
+ const char *p;
+
+ p = partdef;
+ *ret = NULL;
+
+ /* fetch the partition size */
+ if (*p == '-') {
+ /* assign all remaining space to this partition */
+ debug("'-': remaining size assigned\n");
+ size = SIZE_REMAINING;
+ p++;
+ } else {
+ size = memsize_parse(p, &p);
+ if (size < MIN_PART_SIZE) {
+ printf("partition size too small (%llx)\n", size);
+ return 1;
+ }
+ }
+
+ /* check for offset */
+ offset = OFFSET_NOT_SPECIFIED;
+ if (*p == '@') {
+ p++;
+ offset = memsize_parse(p, &p);
+ }
+
+ /* now look for the name */
+ if (*p == '(') {
+ name = ++p;
+ if ((p = strchr(name, ')')) == NULL) {
+ printf("no closing ) found in partition name\n");
+ return 1;
+ }
+ name_len = p - name + 1;
+ if ((name_len - 1) == 0) {
+ printf("empty partition name\n");
+ return 1;
+ }
+ p++;
+ } else {
+ /* 0x00000000@0x00000000 */
+ name_len = 22;
+ name = NULL;
+ }
+
+ /* test for options */
+ mask_flags = 0;
+ if (strncmp(p, "ro", 2) == 0) {
+ mask_flags |= 1;
+ p += 2;
+ }
+
+ /* check for next partition definition */
+ if (*p == ',') {
+ if (size == SIZE_REMAINING) {
+ *ret = NULL;
+ printf("no partitions allowed after a fill-up partition\n");
+ return 1;
+ }
+ *ret = ++p;
+ } else if ((*p == ';') || (*p == '\0')) {
+ *ret = p;
+ } else {
+ printf("unexpected character '%c' at the end of partition\n", *p);
+ *ret = NULL;
+ return 1;
+ }
+
+ memset(part, 0, sizeof(struct fbt_partition));
+ part->size = size;
+ part->offset = offset;
+ part->attr = mask_flags;
+
+ if (name) {
+ /* copy user provided name */
+ strncpy(part->name, name, name_len - 1);
+ } else {
+ /* auto generated name in form of size@offset */
+ sprintf(part->name, "0x%llx@0x%llx", size, offset);
+ }
+
+ part->name[name_len - 1] = '\0';
+
+ debug("+ partition: name %-22s size 0x%llx offset 0x%llx mask flags %x\n",
+ part->name, part->size,
+ part->offset, part->attr);
+
+ return 0;
+}
+
+/**
+ * Performs sanity check for supplied partition. Offset and size are verified
+ * to be within valid range. Partition type is checked and either
+ * parts_validate_nor() or parts_validate_nand() is called with the argument
+ * of part.
+ *
+ * @param id of the parent device
+ * @param part partition to validate
+ * @return 0 if partition is valid, 1 otherwise
+ */
+static int part_validate(struct mmc *mmc, struct fbt_partition *part)
+{
+
+ if (part->size == SIZE_REMAINING)
+ part->size = mmc->capacity - part->offset;
+/*
+
+ if (part->offset > id->size) {
+ printf("%s: offset %08x beyond flash size 0x%llx\n",
+ id->mtd_id, part->offset, id->size);
+ return 1;
+ }
+
+ if (((u64)part->offset + (u64)part->size) <= (u64)part->offset) {
+ printf("%s%d: partition (%s) size too big\n",
+ MTD_DEV_TYPE(id->type), id->num, part->name);
+ return 1;
+ }
+
+ if (part->offset + part->size > id->size) {
+ printf("%s: partitioning exceeds flash size %llx, part %x+%x\n",
+ id->mtd_id, id->size, part->offset, part->size);
+ return 1;
+ }
+*/
+ /*
+ * Now we need to check if the partition starts and ends on
+ * sector (eraseblock) regions
+ */
+ return 0;
+}
+
+static const char *const mmcparts_default = MTDPARTS_DEF;
+
+int mmc_part_parse(struct mmc *mmc)
+{
+ const char *p;
+ struct fbt_partition *part;
+ u64 offset;
+ int index = 0;
+ int err = 0;
+
+ p = mmcparts_default;
+ offset = 0;
+ while (p && (*p != '\0') && (*p != ';')) {
+ err = 1;
+ part = &fbt_partitions[index];
+ if ((part_parse(p, &p, part) != 0))
+ break;
+
+ /* calculate offset when not specified */
+ if (part->offset == OFFSET_NOT_SPECIFIED)
+ part->offset = offset;
+ else
+ offset = part->offset;
+
+ /* verify alignment and size */
+ if (part_validate(mmc, part) != 0)
+ break;
+
+ offset += part->size;
+
+ /* partition is ok, add it to the list */
+ index++;
+ if (index > EFI_ENTRIES)
+ break;
+ err = 0;
+ debug("++++++++++++ partition: name %-22s size 0x%llx offset 0x%llx mask flags %x\n",
+ part->name, part->size,
+ part->offset, part->attr);
+ }
+ part_nums = index;
+ return err;
+}
+
+
+static void init_mbr(u8 *mbr, u32 blocks)
+{
+ mbr[0x1be] = 0x00; // nonbootable
+ mbr[0x1bf] = 0xFF; // bogus CHS
+ mbr[0x1c0] = 0xFF;
+ mbr[0x1c1] = 0xFF;
+
+ mbr[0x1c2] = 0xEE; // GPT partition
+ mbr[0x1c3] = 0xFF; // bogus CHS
+ mbr[0x1c4] = 0xFF;
+ mbr[0x1c5] = 0xFF;
+
+ mbr[0x1c6] = 0x01; // start
+ mbr[0x1c7] = 0x00;
+ mbr[0x1c8] = 0x00;
+ mbr[0x1c9] = 0x00;
+
+ memcpy(mbr + 0x1ca, &blocks, sizeof(u32));
+
+ mbr[0x1fe] = 0x55;
+ mbr[0x1ff] = 0xaa;
+}
+
+static void start_ptbl(struct ptable *ptbl, unsigned blocks)
+{
+ struct efi_header *hdr = &ptbl->header;
+
+ memset(ptbl, 0, sizeof(*ptbl));
+
+ init_mbr(ptbl->mbr, blocks - 1);
+
+ memcpy(hdr->magic, "EFI PART", 8);
+ hdr->version = EFI_VERSION;
+ hdr->header_sz = sizeof(struct efi_header);
+ hdr->header_lba = 1;
+ hdr->backup_lba = blocks - 1;
+ hdr->first_lba = 34;
+ hdr->last_lba = blocks - 1;
+ memcpy(hdr->volume_uuid, random_uuid, 16);
+ hdr->entries_lba = 2;
+ hdr->entries_count = EFI_ENTRIES;
+ hdr->entries_size = sizeof(struct efi_entry);
+}
+
+static void end_ptbl(struct ptable *ptbl)
+{
+ struct efi_header *hdr = &ptbl->header;
+ u32 n;
+
+ n = crc32(0, 0, 0);
+ n = crc32(n, (void*) ptbl->entry, sizeof(ptbl->entry));
+ hdr->entries_crc32 = n;
+
+ n = crc32(0, 0, 0);
+ n = crc32(0, (void*) &ptbl->header, sizeof(ptbl->header));
+ hdr->crc32 = n;
+}
+
+static int add_ptn(struct ptable *ptbl, u64 first, u64 last, const char *name)
+{
+ struct efi_header *hdr = &ptbl->header;
+ struct efi_entry *entry = ptbl->entry;
+ unsigned n;
+
+ if (first < 34) {
+ printf("partition '%s' overlaps partition table\n", name);
+ return -1;
+ }
+
+ if (last > hdr->last_lba) {
+ printf("partition '%s' does not fit\n", name);
+ return -1;
+ }
+ for (n = 0; n < EFI_ENTRIES; n++, entry++) {
+ if (entry->last_lba)
+ continue;
+ memcpy(entry->type_uuid, partition_type, 16);
+ memcpy(entry->uniq_uuid, random_uuid, 16);
+ entry->uniq_uuid[0] = n;
+ entry->first_lba = first;
+ entry->last_lba = last;
+ for (n = 0; (n < EFI_NAMELEN) && *name; n++)
+ entry->name[n] = *name++;
+ return 0;
+ }
+ printf("out of partition table entries\n");
+ return -1;
+}
+
+static unsigned int pcount;
+void fbt_add_ptn(disk_partition_t *ptn)
+{
+ if (pcount < MAX_PTN) {
+ memcpy(ptable + pcount, ptn, sizeof(*ptn));
+ pcount++;
+ }
+}
+
+
+static block_dev_desc_t *mmc_blkdev;
+
+static int __def_fbt_load_ptbl(void)
+{
+ u64 length;
+ disk_partition_t ptn;
+ int n;
+ int res = -1;
+ block_dev_desc_t *blkdev = mmc_blkdev;
+ unsigned long blksz = blkdev->blksz;
+
+ init_part(blkdev);
+ if (blkdev->part_type == PART_TYPE_UNKNOWN) {
+ printf("unknown partition table on %s\n", CONFIG_MMC_DEV_NAME);
+ return -1;
+ }
+
+ printf("lba size = %lu\n", blksz);
+ printf("lba_start partition_size name\n");
+ printf("========= ====================== ==============\n");
+ for (n = CONFIG_MIN_PARTITION_NUM; n <= CONFIG_MAX_PARTITION_NUM; n++) {
+ if (get_partition_info(blkdev, n, &ptn))
+ continue; /* No partition <n> */
+ if (!ptn.size || !ptn.blksz || !ptn.name[0])
+ continue; /* Partition <n> is empty (or sick) */
+ fbt_add_ptn(&ptn);
+
+ length = (u64)blksz * ptn.size;
+ if (length > (1024 * 1024))
+ printf(" %8lu %12llu(%7lluM) %s\n",
+ ptn.start,
+ length, length/(1024*1024),
+ ptn.name);
+ else
+ printf(" %8lu %12llu(%7lluK) %s\n",
+ ptn.start,
+ length, length/1024,
+ ptn.name);
+ res = 0;
+ }
+ printf("========= ====================== ==============\n");
+ return res;
+}
+
+int board_fbt_load_ptbl(void)
+ __attribute__((weak, alias("__def_fbt_load_ptbl")));
+
+disk_partition_t *partition_find_ptn(const char *name);
+
+static int fbt_load_partition_table(void)
+{
+ if (board_fbt_load_ptbl()) {
+ printf("board_fbt_load_ptbl() failed\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+disk_partition_t *partition_find_ptn(const char *name)
+{
+ unsigned int n;
+
+ if (pcount == 0) {
+ if (fbt_load_partition_table()) {
+ printf("Unable to load partition table, aborting\n");
+ return NULL;
+ }
+ }
+
+ for (n = 0; n < pcount; n++)
+ if (!strcmp((char *)ptable[n].name, name))
+ return ptable + n;
+ return NULL;
+}
+
+void fbt_reset_ptn(void)
+{
+ pcount = 0;
+ if (fbt_load_partition_table())
+ printf("Unable to load partition table\n");
+}
+
+static int do_format(void)
+{
+ struct ptable *ptbl = &the_ptable;
+ unsigned next;
+ int n;
+ block_dev_desc_t *dev_desc;
+ unsigned long blocks_to_write, result;
+ struct mmc *mmc;
+
+ dev_desc = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!dev_desc) {
+ printf("error getting device %s\n", CONFIG_MMC_DEV_NAME);
+ return -1;
+ }
+ if (!dev_desc->lba) {
+ printf("device %s has no space\n", CONFIG_MMC_DEV_NAME);
+ return -1;
+ }
+ mmc = container_of(dev_desc, struct mmc, block_dev);
+
+ mmc_part_parse(mmc);
+ start_ptbl(ptbl, dev_desc->lba);
+ for (n = 0; n < part_nums; n++) {
+ u64 sz = fbt_partitions[n].size / 512;
+ next = fbt_partitions[n].offset / 512;
+ if (fbt_partitions[n].name[0] == '-') {
+ next += sz;
+ continue;
+ }
+ if (sz == 0)
+ sz = dev_desc->lba - next;
+
+ if (add_ptn(ptbl, next, next + sz - 1, fbt_partitions[n].name))
+ return -1;
+ }
+ end_ptbl(ptbl);
+
+ blocks_to_write = DIV_ROUND_UP(sizeof(struct ptable), dev_desc->blksz);
+ result = dev_desc->block_write(dev_desc->dev, 0, blocks_to_write, ptbl);
+ if (result != blocks_to_write) {
+ printf("\nFormat failed, block_write() returned %lu instead of %lu\n",
+ result, blocks_to_write);
+ return -1;
+ }
+
+ debug("\nnew partition table of %lu %lu-byte blocks\n",
+ blocks_to_write, dev_desc->blksz);
+ fbt_reset_ptn();
+
+ return 0;
+}
+
+/* check if the partition table is same with the table stored in device */
+int mmc_check_parts(int *same)
+{
+ struct ptable *ptbl = NULL;
+ struct ptable *ptbl_r = NULL;
+ unsigned next;
+ int n;
+ block_dev_desc_t *dev_desc;
+ unsigned long blocks_to_read, result;
+ struct mmc *mmc;
+
+ if(!same) return -1;
+ *same = 0;
+
+ dev_desc = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!dev_desc) {
+ printf("error getting device %s\n", CONFIG_MMC_DEV_NAME);
+ return -1;
+ }
+ if (!dev_desc->lba) {
+ printf("device %s has no space\n", CONFIG_MMC_DEV_NAME);
+ return -1;
+ }
+ mmc = container_of(dev_desc, struct mmc, block_dev);
+
+ ptbl = (struct ptable *)malloc(sizeof(struct ptable));
+ if(!ptbl) {
+ printf("can't malloc memory.\n");
+ return -1;
+ }
+ ptbl_r = (struct ptable *)malloc(sizeof(struct ptable));
+ if(!ptbl_r) {
+ printf("can't malloc memory.\n");
+ free(ptbl);
+ return -1;
+ }
+
+ mmc_part_parse(mmc);
+ start_ptbl(ptbl, dev_desc->lba);
+ for (n = 0; n < part_nums; n++) {
+ u64 sz = fbt_partitions[n].size / 512;
+ next = fbt_partitions[n].offset / 512;
+ if (fbt_partitions[n].name[0] == '-') {
+ next += sz;
+ continue;
+ }
+ if (sz == 0)
+ sz = dev_desc->lba - next;
+
+ if (add_ptn(ptbl, next, next + sz - 1, fbt_partitions[n].name)) {
+ free(ptbl);
+ free(ptbl_r);
+ return -1;
+ }
+ }
+ end_ptbl(ptbl);
+
+ memset((void *)ptbl_r, 0, sizeof(struct ptable));
+ blocks_to_read = DIV_ROUND_UP(sizeof(struct ptable), dev_desc->blksz);
+ result = dev_desc->block_read(dev_desc->dev, 0, blocks_to_read, ptbl_r);
+ if (result != blocks_to_read) {
+ printf("\nCheck Failed, block_read() returned %lu instead of %lu\n",
+ result, blocks_to_read);
+ free(ptbl);
+ free(ptbl_r);
+ return -1;
+ }
+
+#if 0
+ /* dump */
+ printf("New paritition table:\n");
+ for(n = 0; n < sizeof(struct ptable); n++) {
+ char *p = (char *)ptbl;
+ printf("%02x ", p[n]);
+ if((n + 1) % 32 == 0 )
+ printf("\n");
+ }
+ printf("Old partition table:\n");
+ for(n = 0; n < sizeof(struct ptable); n++) {
+ char *p = (char *)ptbl_r;
+ printf("%02x ", p[n]);
+ if((n + 1) % 32 == 0 )
+ printf("\n");
+ }
+#endif
+
+ if(memcmp(ptbl, ptbl_r, sizeof(struct ptable)) == 0) {
+ *same = 1;
+ }
+
+ free(ptbl);
+ free(ptbl_r);
+ return 0;
+}
+
+int mmc_parts_format(void)
+{
+ if (!mmc_blkdev) {
+ printf("mmc block device hasn't initialize\n");
+ return -1;
+ }
+
+ return do_format();
+}
+
+int mmc_parts_init(void)
+{
+ struct mmc* mmc = NULL;
+
+ /* We register only one device. So, the dev id is always 0 */
+ mmc = find_mmc_device(CONFIG_MMC_DEV_NUM);
+ if (!mmc) {
+ printf("make_write_mbr_ebr: mmc device not found!!\n");
+ return -1;
+ }
+ mmc_init(mmc);
+
+ if (part_nums > EFI_ENTRIES) {
+ printf("too many mmc parts\n");
+ return -1;
+ }
+
+
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!mmc_blkdev) {
+ printf("%s: fastboot device %s not found\n",
+ __func__, CONFIG_MMC_DEV_NAME);
+ return -1;
+ }
+
+ return 0;
+}
+
diff --git a/drivers/mmc/mmc_private.h b/drivers/mmc/mmc_private.h
new file mode 100644
index 0000000000..16dcf9ff61
--- /dev/null
+++ b/drivers/mmc/mmc_private.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2008,2010 Freescale Semiconductor, Inc
+ * Andy Fleming
+ *
+ * Based (loosely) on the Linux code
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#ifndef _MMC_PRIVATE_H_
+#define _MMC_PRIVATE_H_
+
+#include <mmc.h>
+
+extern int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
+ struct mmc_data *data);
+extern int mmc_send_status(struct mmc *mmc, int timeout);
+extern int mmc_set_blocklen(struct mmc *mmc, int len);
+
+#ifndef CONFIG_SPL_BUILD
+
+extern unsigned long mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt);
+
+extern ulong mmc_bwrite(int dev_num, lbaint_t start, lbaint_t blkcnt,
+ const void *src);
+
+#else /* CONFIG_SPL_BUILD */
+
+/* SPL will never write or erase, declare dummies to reduce code size. */
+
+static inline unsigned long mmc_berase(int dev_num, lbaint_t start,
+ lbaint_t blkcnt)
+{
+ return 0;
+}
+
+static inline ulong mmc_bwrite(int dev_num, lbaint_t start, lbaint_t blkcnt,
+ const void *src)
+{
+ return 0;
+}
+
+#endif /* CONFIG_SPL_BUILD */
+
+#endif /* _MMC_PRIVATE_H_ */
diff --git a/drivers/mmc/mmc_spl_load.c b/drivers/mmc/mmc_spl_load.c
new file mode 100644
index 0000000000..a9f36a748c
--- /dev/null
+++ b/drivers/mmc/mmc_spl_load.c
@@ -0,0 +1,111 @@
+#include <common.h>
+#include <mmc.h>
+#include <asm/errno.h>
+#include <asm/arch/spl_board_info.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+#ifdef CONFIG_SPL_CHECK_IMAGE
+int check_uimage(unsigned int *buf);
+#endif
+
+static struct mmc *boot_mmc = NULL;
+
+int emmc_spl_load_image(uint32_t offs, unsigned int size, void *dst)
+{
+ unsigned long err;
+ unsigned int start_block, block_num, block_size;
+
+ block_size = 512;
+ start_block = offs/block_size;
+ block_num = (size + block_size - 1)/block_size;
+
+ if (!boot_mmc) {
+ printf("spl emmc not initialized\n");
+ return -ENODEV;
+ }
+
+ err = boot_mmc->block_dev.block_read(CONFIG_MMC_DEV_NUM,
+ start_block,
+ block_num, (void *)dst);
+
+ if (err <= 0) {
+ printf("spl emmc read err %d\n", (unsigned int)err);
+ return err;
+ }
+ return 0;
+}
+
+extern int mmc_set_host_mclk_adj_inv(struct mmc *mmc, u8 adj, u8 inv);
+
+void emmc_init(void)
+{
+ int err;
+ int i = 0;
+ struct spl_emmc_info *info = get_bd_spl_emmc_info();
+
+ info->manufacturer_id = 0;
+
+ mmc_initialize(gd->bd);
+
+ boot_mmc = find_mmc_device(CONFIG_MMC_DEV_NUM);
+ if (!boot_mmc) {
+ puts("spl emmc device not found\n");
+ return;
+ }
+
+ for(; i < 32; i++){
+ int adj = i % 16;
+ int inv = (i >= 16)? 1: 0;
+
+ if(mmc_set_host_mclk_adj_inv(boot_mmc, adj, inv) < 0){
+ printf("mmc_set_host_mclk_adj_inv failed \n");
+ boot_mmc = NULL;
+ return;
+ }
+
+ err = mmc_init(boot_mmc);
+ if (err) {
+ printf("spl emmc init failed, err %d\n", err);
+ } else
+ break;
+ }
+
+ if (i < 32){
+ info->manufacturer_id = boot_mmc->cid[0] >> 24;
+ printf("boot_mmc mfr id = %x \n", boot_mmc->cid[0] >> 24);
+ } else{
+ printf("After loop, spl emmc init failed.\n");
+ boot_mmc = NULL;
+ return;
+ }
+}
+
+/*
+ * The main entry for EMMC booting. It's necessary that SDRAM is already
+ * configured and available since this code loads the main U-Boot image
+ * from EMMC into SDRAM and starts it from there.
+ */
+void emmc_boot(void)
+{
+ __attribute__((noreturn)) void (*uboot)(void);
+
+ /*
+ * Load U-Boot image from EMMC into RAM
+ */
+ emmc_spl_load_image(CONFIG_SYS_EMMC_U_BOOT_OFFS,
+ CONFIG_SYS_EMMC_U_BOOT_SIZE,
+ (void *)CONFIG_SYS_EMMC_U_BOOT_DST);
+
+#ifdef CONFIG_SPL_CHECK_IMAGE
+ if (check_uimage((unsigned int*)CONFIG_SYS_EMMC_U_BOOT_DST)) {
+ printf("EMMC boot failed.\n");
+ return;
+ }
+#endif
+
+ /*
+ * Jump to U-Boot image
+ */
+ uboot = (void *)CONFIG_SYS_EMMC_U_BOOT_START;
+ (*uboot)();
+}
diff --git a/drivers/mmc/mmc_write.c b/drivers/mmc/mmc_write.c
new file mode 100644
index 0000000000..2bc21d32db
--- /dev/null
+++ b/drivers/mmc/mmc_write.c
@@ -0,0 +1,187 @@
+/*
+ * Copyright 2008, Freescale Semiconductor, Inc
+ * Andy Fleming
+ *
+ * Based vaguely on the Linux code
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <config.h>
+#include <common.h>
+#include <part.h>
+#include "mmc_private.h"
+
+static ulong mmc_erase_t(struct mmc *mmc, ulong start, lbaint_t blkcnt)
+{
+ struct mmc_cmd cmd;
+ ulong end;
+ int err, start_cmd, end_cmd;
+
+ if (mmc->high_capacity) {
+ end = start + blkcnt - 1;
+ } else {
+ end = (start + blkcnt - 1) * mmc->write_bl_len;
+ start *= mmc->write_bl_len;
+ }
+
+ if (IS_SD(mmc)) {
+ start_cmd = SD_CMD_ERASE_WR_BLK_START;
+ end_cmd = SD_CMD_ERASE_WR_BLK_END;
+ } else {
+ start_cmd = MMC_CMD_ERASE_GROUP_START;
+ end_cmd = MMC_CMD_ERASE_GROUP_END;
+ }
+
+ cmd.cmdidx = start_cmd;
+ cmd.cmdarg = start;
+ cmd.resp_type = MMC_RSP_R1;
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err)
+ goto err_out;
+
+ cmd.cmdidx = end_cmd;
+ cmd.cmdarg = end;
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err)
+ goto err_out;
+
+ cmd.cmdidx = MMC_CMD_ERASE;
+ cmd.cmdarg = SECURE_ERASE;
+ cmd.resp_type = MMC_RSP_R1b;
+
+ err = mmc_send_cmd(mmc, &cmd, NULL);
+ if (err)
+ goto err_out;
+
+ return 0;
+
+err_out:
+ puts("mmc erase failed\n");
+ return err;
+}
+
+unsigned long mmc_berase(int dev_num, lbaint_t start, lbaint_t blkcnt)
+{
+ int err = 0;
+ struct mmc *mmc = find_mmc_device(dev_num);
+ lbaint_t blk = 0, blk_r = 0;
+ int timeout = 1000;
+
+ if (!mmc)
+ return -1;
+
+ if ((start % mmc->erase_grp_size) || (blkcnt % mmc->erase_grp_size))
+ printf("\n\nCaution! Your devices Erase group is 0x%x\n"
+ "The erase range would be change to "
+ "0x" LBAF "~0x" LBAF "\n\n",
+ mmc->erase_grp_size, start & ~(mmc->erase_grp_size - 1),
+ ((start + blkcnt + mmc->erase_grp_size)
+ & ~(mmc->erase_grp_size - 1)) - 1);
+
+ /* try to erase all at one time */
+ err = mmc_erase_t(mmc, start, blkcnt);
+ if(!err) {
+ if(!mmc_send_status(mmc, timeout*10))
+ return blkcnt;
+ }
+
+ /* erase group one by one */
+ while (blk < blkcnt) {
+ blk_r = ((blkcnt - blk) > mmc->erase_grp_size) ?
+ mmc->erase_grp_size : (blkcnt - blk);
+ err = mmc_erase_t(mmc, start + blk, blk_r);
+ if (err)
+ break;
+
+ blk += blk_r;
+
+ /* Waiting for the ready status */
+ if (mmc_send_status(mmc, timeout))
+ return 0;
+ }
+
+ return blk;
+}
+
+static ulong mmc_write_blocks(struct mmc *mmc, lbaint_t start,
+ lbaint_t blkcnt, const void *src)
+{
+ struct mmc_cmd cmd;
+ struct mmc_data data;
+ int timeout = 1000;
+
+ if ((start + blkcnt) > mmc->block_dev.lba) {
+ printf("MMC: block number 0x" LBAF " exceeds max(0x" LBAF ")\n",
+ start + blkcnt, mmc->block_dev.lba);
+ return 0;
+ }
+
+ if (blkcnt == 0)
+ return 0;
+ else if (blkcnt == 1)
+ cmd.cmdidx = MMC_CMD_WRITE_SINGLE_BLOCK;
+ else
+ cmd.cmdidx = MMC_CMD_WRITE_MULTIPLE_BLOCK;
+
+ if (mmc->high_capacity)
+ cmd.cmdarg = start;
+ else
+ cmd.cmdarg = start * mmc->write_bl_len;
+
+ cmd.resp_type = MMC_RSP_R1;
+
+ data.src = src;
+ data.blocks = blkcnt;
+ data.blocksize = mmc->write_bl_len;
+ data.flags = MMC_DATA_WRITE;
+
+ if (mmc_send_cmd(mmc, &cmd, &data)) {
+ printf("mmc write failed\n");
+ return 0;
+ }
+
+ /* SPI multiblock writes terminate using a special
+ * token, not a STOP_TRANSMISSION request.
+ */
+ if (!mmc_host_is_spi(mmc) && blkcnt > 1) {
+ cmd.cmdidx = MMC_CMD_STOP_TRANSMISSION;
+ cmd.cmdarg = 0;
+ cmd.resp_type = MMC_RSP_R1b;
+ if (mmc_send_cmd(mmc, &cmd, NULL)) {
+ printf("mmc fail to send stop cmd\n");
+ return 0;
+ }
+ }
+
+ /* Waiting for the ready status */
+ if (mmc_send_status(mmc, timeout))
+ return 0;
+
+ return blkcnt;
+}
+
+ulong mmc_bwrite(int dev_num, lbaint_t start, lbaint_t blkcnt, const void *src)
+{
+ lbaint_t cur, blocks_todo = blkcnt;
+
+ struct mmc *mmc = find_mmc_device(dev_num);
+ if (!mmc)
+ return 0;
+
+ if (mmc_set_blocklen(mmc, mmc->write_bl_len))
+ return 0;
+
+ do {
+ cur = (blocks_todo > mmc->b_max) ? mmc->b_max : blocks_todo;
+ if (mmc_write_blocks(mmc, start, cur, src) != cur)
+ return 0;
+ blocks_todo -= cur;
+ start += cur;
+ src += cur * mmc->write_bl_len;
+ } while (blocks_todo > 0);
+
+ return blkcnt;
+}
diff --git a/drivers/mmc/mxsmmc.c b/drivers/mmc/mxsmmc.c
index 35c6bdabb0..4187a94120 100644
--- a/drivers/mmc/mxsmmc.c
+++ b/drivers/mmc/mxsmmc.c
@@ -133,7 +133,8 @@ mxsmmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd, struct mmc_data *data)
/* READ or WRITE */
if (data->flags & MMC_DATA_READ) {
ctrl0 |= SSP_CTRL0_READ;
- } else if (priv->mmc_is_wp(mmc->block_dev.dev)) {
+ } else if (priv->mmc_is_wp &&
+ priv->mmc_is_wp(mmc->block_dev.dev)) {
printf("MMC%d: Can not write a locked card!\n",
mmc->block_dev.dev);
return UNUSABLE_ERR;
@@ -406,7 +407,7 @@ int mxsmmc_initialize(bd_t *bis, int id, int (*wp)(int))
*/
mmc->f_min = 400000;
mmc->f_max = mxc_get_clock(MXC_SSP0_CLK + id) * 1000 / 2;
- mmc->b_max = 0x40;
+ mmc->b_max = 0x20;
mmc_register(mmc);
return 0;
diff --git a/drivers/mmc/omap_hsmmc.c b/drivers/mmc/omap_hsmmc.c
index 2400db2f35..afd9b30b51 100644
--- a/drivers/mmc/omap_hsmmc.c
+++ b/drivers/mmc/omap_hsmmc.c
@@ -29,10 +29,15 @@
#include <i2c.h>
#include <twl4030.h>
#include <twl6030.h>
+#include <twl6035.h>
#include <asm/io.h>
#include <asm/arch/mmc_host_def.h>
#include <asm/arch/sys_proto.h>
+/* common definitions for all OMAPs */
+#define SYSCTL_SRC (1 << 25)
+#define SYSCTL_SRD (1 << 26)
+
/* If we fail after 1 second wait, something is really bad */
#define MAX_RETRY_MS 1000
@@ -45,8 +50,8 @@ static struct mmc hsmmc_dev[2];
static void omap4_vmmc_pbias_config(struct mmc *mmc)
{
u32 value = 0;
- struct omap4_sys_ctrl_regs *const ctrl =
- (struct omap4_sys_ctrl_regs *)SYSCTRL_GENERAL_CORE_BASE;
+ struct omap_sys_ctrl_regs *const ctrl =
+ (struct omap_sys_ctrl_regs *) SYSCTRL_GENERAL_CORE_BASE;
value = readl(&ctrl->control_pbiaslite);
@@ -60,17 +65,51 @@ static void omap4_vmmc_pbias_config(struct mmc *mmc)
}
#endif
-unsigned char mmc_board_init(struct mmc *mmc)
+#if defined(CONFIG_OMAP54XX) && defined(CONFIG_TWL6035_POWER)
+static void omap5_pbias_config(struct mmc *mmc)
{
-#if defined(CONFIG_TWL4030_POWER)
- twl4030_power_mmc_init();
+ u32 value = 0;
+ struct omap_sys_ctrl_regs *const ctrl =
+ (struct omap_sys_ctrl_regs *) SYSCTRL_GENERAL_CORE_BASE;
+
+ value = readl(&ctrl->control_pbias);
+ value &= ~(SDCARD_PWRDNZ | SDCARD_BIAS_PWRDNZ);
+ value |= SDCARD_BIAS_HIZ_MODE;
+ writel(value, &ctrl->control_pbias);
+
+ twl6035_mmc1_poweron_ldo();
+
+ value = readl(&ctrl->control_pbias);
+ value &= ~SDCARD_BIAS_HIZ_MODE;
+ value |= SDCARD_PBIASLITE_VMODE | SDCARD_PWRDNZ | SDCARD_BIAS_PWRDNZ;
+ writel(value, &ctrl->control_pbias);
+
+ value = readl(&ctrl->control_pbias);
+ if (value & (1 << 23)) {
+ value &= ~(SDCARD_PWRDNZ | SDCARD_BIAS_PWRDNZ);
+ value |= SDCARD_BIAS_HIZ_MODE;
+ writel(value, &ctrl->control_pbias);
+ }
+}
#endif
+unsigned char mmc_board_init(struct mmc *mmc)
+{
#if defined(CONFIG_OMAP34XX)
t2_t *t2_base = (t2_t *)T2_BASE;
struct prcm *prcm_base = (struct prcm *)PRCM_BASE;
+ u32 pbias_lite;
- writel(readl(&t2_base->pbias_lite) | PBIASLITEPWRDNZ1 |
+ pbias_lite = readl(&t2_base->pbias_lite);
+ pbias_lite &= ~(PBIASLITEPWRDNZ1 | PBIASLITEPWRDNZ0);
+ writel(pbias_lite, &t2_base->pbias_lite);
+#endif
+#if defined(CONFIG_TWL4030_POWER)
+ twl4030_power_mmc_init();
+ mdelay(100); /* ramp-up delay from Linux code */
+#endif
+#if defined(CONFIG_OMAP34XX)
+ writel(pbias_lite | PBIASLITEPWRDNZ1 |
PBIASSPEEDCTRL0 | PBIASLITEPWRDNZ0,
&t2_base->pbias_lite);
@@ -80,6 +119,11 @@ unsigned char mmc_board_init(struct mmc *mmc)
writel(readl(&t2_base->devconf1) | MMCSDIO2ADPCLKISEL,
&t2_base->devconf1);
+ /* Change from default of 52MHz to 26MHz if necessary */
+ if (!(mmc->host_caps & MMC_MODE_HS_52MHz))
+ writel(readl(&t2_base->ctl_prog_io1) & ~CTLPROGIO1SPEEDCTRL,
+ &t2_base->ctl_prog_io1);
+
writel(readl(&prcm_base->fclken1_core) |
EN_MMC1 | EN_MMC2 | EN_MMC3,
&prcm_base->fclken1_core);
@@ -94,6 +138,10 @@ unsigned char mmc_board_init(struct mmc *mmc)
if (mmc->block_dev.dev == 0)
omap4_vmmc_pbias_config(mmc);
#endif
+#if defined(CONFIG_OMAP54XX) && defined(CONFIG_TWL6035_POWER)
+ if (mmc->block_dev.dev == 0)
+ omap5_pbias_config(mmc);
+#endif
return 0;
}
@@ -189,6 +237,27 @@ static int mmc_init_setup(struct mmc *mmc)
return 0;
}
+/*
+ * MMC controller internal finite state machine reset
+ *
+ * Used to reset command or data internal state machines, using respectively
+ * SRC or SRD bit of SYSCTL register
+ */
+static void mmc_reset_controller_fsm(struct hsmmc *mmc_base, u32 bit)
+{
+ ulong start;
+
+ mmc_reg_out(&mmc_base->sysctl, bit, bit);
+
+ start = get_timer(0);
+ while ((readl(&mmc_base->sysctl) & bit) != 0) {
+ if (get_timer(0) - start > MAX_RETRY_MS) {
+ printf("%s: timedout waiting for sysctl %x to clear\n",
+ __func__, bit);
+ return;
+ }
+ }
+}
static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
struct mmc_data *data)
@@ -209,7 +278,8 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
start = get_timer(0);
while (readl(&mmc_base->stat)) {
if (get_timer(0) - start > MAX_RETRY_MS) {
- printf("%s: timedout waiting for stat!\n", __func__);
+ printf("%s: timedout waiting for STAT (%x) to clear\n",
+ __func__, readl(&mmc_base->stat));
return TIMEOUT;
}
}
@@ -277,9 +347,10 @@ static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
}
} while (!mmc_stat);
- if ((mmc_stat & IE_CTO) != 0)
+ if ((mmc_stat & IE_CTO) != 0) {
+ mmc_reset_controller_fsm(mmc_base, SYSCTL_SRC);
return TIMEOUT;
- else if ((mmc_stat & ERRI_MASK) != 0)
+ } else if ((mmc_stat & ERRI_MASK) != 0)
return -1;
if (mmc_stat & CC_MASK) {
@@ -330,6 +401,9 @@ static int mmc_read_data(struct hsmmc *mmc_base, char *buf, unsigned int size)
}
} while (mmc_stat == 0);
+ if ((mmc_stat & (IE_DTO | IE_DCRC | IE_DEB)) != 0)
+ mmc_reset_controller_fsm(mmc_base, SYSCTL_SRD);
+
if ((mmc_stat & ERRI_MASK) != 0)
return 1;
@@ -382,6 +456,9 @@ static int mmc_write_data(struct hsmmc *mmc_base, const char *buf,
}
} while (mmc_stat == 0);
+ if ((mmc_stat & (IE_DTO | IE_DCRC | IE_DEB)) != 0)
+ mmc_reset_controller_fsm(mmc_base, SYSCTL_SRD);
+
if ((mmc_stat & ERRI_MASK) != 0)
return 1;
@@ -463,7 +540,7 @@ static void mmc_set_ios(struct mmc *mmc)
writel(readl(&mmc_base->sysctl) | CEN_ENABLE, &mmc_base->sysctl);
}
-int omap_mmc_init(int dev_index)
+int omap_mmc_init(int dev_index, uint host_caps_mask, uint f_max)
{
struct mmc *mmc;
@@ -494,11 +571,22 @@ int omap_mmc_init(int dev_index)
return 1;
}
mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
- mmc->host_caps = MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS |
- MMC_MODE_HC;
+ mmc->host_caps = (MMC_MODE_4BIT | MMC_MODE_HS_52MHz | MMC_MODE_HS |
+ MMC_MODE_HC) & ~host_caps_mask;
mmc->f_min = 400000;
- mmc->f_max = 52000000;
+
+ if (f_max != 0)
+ mmc->f_max = f_max;
+ else {
+ if (mmc->host_caps & MMC_MODE_HS) {
+ if (mmc->host_caps & MMC_MODE_HS_52MHz)
+ mmc->f_max = 52000000;
+ else
+ mmc->f_max = 26000000;
+ } else
+ mmc->f_max = 20000000;
+ }
mmc->b_max = 0;
diff --git a/drivers/mmc/rda_mmc.c b/drivers/mmc/rda_mmc.c
new file mode 100644
index 0000000000..1a527e810e
--- /dev/null
+++ b/drivers/mmc/rda_mmc.c
@@ -0,0 +1,892 @@
+#include <asm/io.h>
+#include "common.h"
+#include <errno.h>
+#include <mmc.h>
+#include <malloc.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_mmc.h>
+#include <asm/arch/reg_ifc.h>
+#include <asm/arch/ifc.h>
+#include <asm/arch/rda_sys.h>
+#include <mmc/mmcpart.h>
+#include <rda/tgt_ap_board_config.h>
+#include <asm/arch/spl_board_info.h>
+
+//#define SDMMC_DEBUG
+
+#ifdef CONFIG_RDA_FPGA
+#define CONFIG_APB2_CLOCK 26000000
+#else
+#define CONFIG_APB2_CLOCK 200000000
+#endif
+
+#define SECOND * CONFIG_SYS_HZ_CLOCK
+#define MCD_CMD_TIMEOUT ( 2 SECOND / 10 )
+#define MCD_RESP_TIMEOUT ( 2 SECOND / 10 )
+#define MCD_DATA_TIMEOUT ( 2 SECOND )
+#define MMC_DEV_NUM 2
+struct mmc_host {
+ int dev_num;
+ u32 phyaddr;
+ u8 mclk_adj;
+ u8 mclk_inv;
+ u16 reserved;
+};
+
+struct emmc_mfr_mclk_adj_inv {
+ u8 mfr_id;
+ u8 mclk_adj;
+ u8 mclk_inv;
+ u8 mclk_inv_kernel;/*Because the u-boot and kernel mode isn't same, so inv set is different sometime*/
+};
+
+static const struct emmc_mfr_mclk_adj_inv emmc_mclk_adj_inv[] = {
+ {MMC_MFR_TOSHIBA, 0, 0, 1},
+ {MMC_MFR_GIGADEVICE, 0, 0, 1},
+ {MMC_MFR_SAMSUNG, 0, 0, 1},
+ {MMC_MFR_SANDISK, 0, 0, 1},
+ {MMC_MFR_HYNIX, 0, 0, 1},
+ {MMC_MFR_MICRON, 0, 0, 1},
+ {MMC_MFR_MICRON1, 0, 0, 1},
+ {0, 0, 0, 0},
+};
+
+struct mmc mmc_device_glob[MMC_DEV_NUM];
+struct mmc_host mmc_host_dev[MMC_DEV_NUM];
+static int rda_ddr_mode = 0;
+
+typedef struct
+{
+ /// This address in the system memory
+ u8* sysMemAddr;
+ /// Quantity of data to transfer, in blocks
+ u32 blockNum;
+ /// Block size
+ u32 blockSize;
+ HAL_SDMMC_DIRECTION_T direction;
+ HAL_IFC_REQUEST_ID_T ifcReq;
+ u32 channel;
+} HAL_SDMMC_TRANSFER_T;
+
+u64 hal_getticks(void)
+{
+ return get_ticks();
+}
+
+static void hal_send_cmd(struct mmc *dev, struct mmc_cmd *cmd, struct mmc_data *data)
+{
+ u32 configReg = 0;
+ struct mmc_host *host = dev->priv;
+ u32 ddr_bits = 0;
+ HWP_SDMMC_T * hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H)
+ /* check ddr mode is enabled */
+ if(rda_ddr_mode) {
+ ddr_bits = (1<<17) | (1<<23);
+ }
+#endif
+
+ //hwp_sdmmc->SDMMC_CONFIG = SDMMC_AUTO_FLAG_EN;
+ hwp_sdmmc->SDMMC_CONFIG = 0x00000000 | ddr_bits;
+
+ configReg = SDMMC_SDMMC_SENDCMD;
+ if (cmd->resp_type & MMC_RSP_PRESENT) {
+ configReg |= SDMMC_RSP_EN;
+ if (cmd->resp_type & MMC_RSP_136)
+ configReg |= SDMMC_RSP_SEL_R2;
+ else if (cmd->resp_type & MMC_RSP_CRC)
+ configReg |= SDMMC_RSP_SEL_OTHER;
+ else
+ configReg |= SDMMC_RSP_SEL_R3;
+ }
+
+ /* cases for data transfer */
+ if (cmd->cmdidx == MMC_CMD_READ_SINGLE_BLOCK) {
+ configReg |= (SDMMC_RD_WT_EN | SDMMC_RD_WT_SEL_READ);
+ } else if (cmd->cmdidx == MMC_CMD_READ_MULTIPLE_BLOCK) {
+ configReg |= (SDMMC_RD_WT_EN | SDMMC_RD_WT_SEL_READ | SDMMC_S_M_SEL_MULTIPLE);
+ } else if (cmd->cmdidx == MMC_CMD_WRITE_SINGLE_BLOCK) {
+ configReg |= (SDMMC_RD_WT_EN | SDMMC_RD_WT_SEL_WRITE);
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H)
+ /* when do write, the edge selection is reverse.
+ * it's a workaround. */
+ if(rda_ddr_mode) {
+ ddr_bits = (1<<17);
+ }
+#endif
+ } else if (cmd->cmdidx == MMC_CMD_WRITE_MULTIPLE_BLOCK) {
+ configReg |= (SDMMC_RD_WT_EN | SDMMC_RD_WT_SEL_WRITE | SDMMC_S_M_SEL_MULTIPLE);
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H)
+ /* when do write, the edge selection is reverse.
+ * it's a workaround. */
+ if(rda_ddr_mode) {
+ ddr_bits = (1<<17);
+ }
+#endif
+ } else if (cmd->cmdidx == SD_CMD_APP_SEND_SCR) {
+ configReg |= (SDMMC_RD_WT_EN | SDMMC_RD_WT_SEL_READ);
+ } else if (cmd->cmdidx == SD_CMD_SWITCH_FUNC && data) {
+ configReg |= (SDMMC_RD_WT_EN | SDMMC_RD_WT_SEL_READ);
+ } else if (cmd->cmdidx == MMC_CMD_SEND_EXT_CSD) {
+ configReg |= (SDMMC_RD_WT_EN | SDMMC_RD_WT_SEL_READ);
+ }
+
+ configReg |= ddr_bits;
+#ifdef SDMMC_DEBUG
+ printf(" idx_reg = 0x%08x, arg_reg = 0x%08x, config = 0x%08x\n",
+ SDMMC_COMMAND(cmd->cmdidx),
+ SDMMC_ARGUMENT(cmd->cmdarg),
+ configReg);
+#endif
+
+ hwp_sdmmc->SDMMC_CMD_INDEX = SDMMC_COMMAND(cmd->cmdidx);
+ hwp_sdmmc->SDMMC_CMD_ARG = SDMMC_ARGUMENT(cmd->cmdarg);
+ //hwp_sdmmc->SDMMC_CONFIG = configReg |SDMMC_AUTO_FLAG_EN;
+ hwp_sdmmc->SDMMC_CONFIG = configReg;
+}
+
+static int hal_cmd_done(struct mmc *dev)
+{
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+
+ return (!(hwp_sdmmc->SDMMC_STATUS & SDMMC_NOT_SDMMC_OVER));
+}
+
+static int hal_wait_cmd_done(struct mmc *dev)
+{
+ u64 startTime = hal_getticks();
+ u64 time_out;
+
+ time_out = MCD_CMD_TIMEOUT;
+
+ while(hal_getticks() - startTime < time_out && !hal_cmd_done(dev));
+
+ if (!hal_cmd_done(dev))
+ {
+ printf("cmd waiting timeout\n");
+ return TIMEOUT;
+ }
+ else
+ {
+ return 0;
+ }
+}
+
+HAL_SDMMC_OP_STATUS_T hal_get_op_status(struct mmc *dev)
+{
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+
+ return ((HAL_SDMMC_OP_STATUS_T)(u32)hwp_sdmmc->SDMMC_STATUS);
+}
+
+static int hal_wait_cmd_resp(struct mmc *dev)
+{
+ HAL_SDMMC_OP_STATUS_T status = hal_get_op_status(dev);
+ u64 startTime = hal_getticks();
+ u64 rsp_time_out;
+
+ rsp_time_out = MCD_RESP_TIMEOUT;
+
+ while(hal_getticks() - startTime < rsp_time_out &&status.fields.noResponseReceived){
+ status = hal_get_op_status(dev);
+ }
+
+ if (status.fields.noResponseReceived){
+ printf(" response timeout\n");
+ return TIMEOUT;
+ }
+
+ if(status.fields.responseCrcError){
+ printf(" response CRC error\n");
+ return -EILSEQ;
+ }
+
+ return 0;
+}
+
+static void hal_get_resp(struct mmc *dev, struct mmc_cmd *cmd)
+{
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+
+ if (cmd->resp_type & MMC_RSP_PRESENT) {
+ if (cmd->resp_type & MMC_RSP_136) {
+ cmd->response[0] = hwp_sdmmc->SDMMC_RESP_ARG3;
+ cmd->response[1] = hwp_sdmmc->SDMMC_RESP_ARG2;
+ cmd->response[2] = hwp_sdmmc->SDMMC_RESP_ARG1;
+ cmd->response[3] = hwp_sdmmc->SDMMC_RESP_ARG0 << 1;
+ }else {
+ cmd->response[0] = hwp_sdmmc->SDMMC_RESP_ARG3;
+ cmd->response[1] = 0;
+ cmd->response[2] = 0;
+ cmd->response[3] = 0;
+ }
+ }
+ else {
+ cmd->response[0] = 0;
+ cmd->response[1] = 0;
+ cmd->response[2] = 0;
+ cmd->response[3] = 0;
+ }
+}
+
+static int hal_data_transfer_start(struct mmc *dev,HAL_SDMMC_TRANSFER_T* transfer)
+{
+ u32 length = 0;
+ u32 lengthExp = 0;
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+
+ length = transfer->blockSize;
+
+ // The block size register
+ while (length != 1)
+ {
+ length >>= 1;
+ lengthExp++;
+ }
+
+ // Configure amount of data
+ hwp_sdmmc->SDMMC_BLOCK_CNT = SDMMC_SDMMC_BLOCK_CNT(transfer->blockNum);
+ hwp_sdmmc->SDMMC_BLOCK_SIZE = SDMMC_SDMMC_BLOCK_SIZE(lengthExp);
+
+ // Configure Bytes reordering
+ hwp_sdmmc->apbi_ctrl_sdmmc = SDMMC_SOFT_RST_L | SDMMC_L_ENDIAN(1);
+ //hwp_sdmmc->apbi_ctrl_sdmmc = SDMMC_L_ENDIAN(1);
+
+ switch (transfer->direction){
+ case HAL_SDMMC_DIRECTION_READ:
+ if (0 == host->dev_num)
+ transfer->ifcReq = HAL_IFC_SDMMC_RX;
+ else
+ transfer->ifcReq = HAL_IFC_SDMMC3_RX;
+ break;
+
+ case HAL_SDMMC_DIRECTION_WRITE:
+ if (0 == host->dev_num)
+ transfer->ifcReq = HAL_IFC_SDMMC_TX;
+ else
+ transfer->ifcReq = HAL_IFC_SDMMC3_TX;
+ break;
+
+ default:
+ printf("hal_SdmmcTransfer with wrong direction %d\n", transfer->direction);
+ return -EILSEQ;
+ }
+
+ transfer->channel = hal_IfcTransferStart(transfer->ifcReq, transfer->sysMemAddr,
+ transfer->blockNum*transfer->blockSize,
+ HAL_IFC_SIZE_32_MODE_MANUAL);
+ if (transfer->channel == HAL_UNKNOWN_CHANNEL){
+ printf("hal_IfcTransferStart error\n");
+ return -EILSEQ;
+ }
+ return 0;
+}
+
+static void hal_data_transfer_stop(struct mmc *dev, HAL_SDMMC_TRANSFER_T* transfer)
+{
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+
+ // Configure amount of data
+ hwp_sdmmc->SDMMC_BLOCK_CNT = SDMMC_SDMMC_BLOCK_CNT(0);
+ hwp_sdmmc->SDMMC_BLOCK_SIZE = SDMMC_SDMMC_BLOCK_SIZE(0);
+
+ // Put the FIFO in reset state.
+ //hwp_sdmmc->apbi_ctrl_sdmmc = 0 | SDMMC_L_ENDIAN(1);
+ hwp_sdmmc->apbi_ctrl_sdmmc = SDMMC_SOFT_RST_L | SDMMC_L_ENDIAN(1);
+
+ hal_IfcChannelFlush(transfer->ifcReq, transfer->channel);
+ while(!hal_IfcChannelIsFifoEmpty(transfer->ifcReq, transfer->channel));
+ hal_IfcChannelRelease(transfer->ifcReq, transfer->channel);
+ transfer->channel = HAL_UNKNOWN_CHANNEL;
+}
+
+static int hal_data_transfer_done(struct mmc *dev, HAL_SDMMC_TRANSFER_T* transfer)
+{
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+
+ // The link is not full duplex. We check both the
+ // direction, but only one can be in progress at a time.
+
+ if (transfer->channel != HAL_UNKNOWN_CHANNEL)
+ {
+ // Operation in progress is a read.
+ // The SDMMC module itself can know it has finished
+ if ((hwp_sdmmc->SDMMC_INT_STATUS & SDMMC_DAT_OVER_INT)
+ && (hwp_sysIfc->std_ch[transfer->channel].tc == 0))
+ {
+ // Transfer is over
+ hwp_sdmmc->SDMMC_INT_CLEAR = SDMMC_DAT_OVER_CL;
+ hal_IfcChannelRelease(transfer->ifcReq, transfer->channel);
+
+ // We finished a read
+ transfer->channel = HAL_UNKNOWN_CHANNEL;
+
+ // Put the FIFO in reset state.
+ //hwp_sdmmc->apbi_ctrl_sdmmc = 0 | SDMMC_L_ENDIAN(1);
+ hwp_sdmmc->apbi_ctrl_sdmmc = SDMMC_SOFT_RST_L | SDMMC_L_ENDIAN(1);
+
+ return 1;
+ }
+ else {
+ return 0;
+ }
+ }
+ else {
+ printf("unknown channel\n");
+ return 1;
+ }
+}
+
+static int hal_wait_data_transfer_done(struct mmc *dev,
+ HAL_SDMMC_TRANSFER_T* transfer)
+{
+ u64 startTime = hal_getticks();
+ u64 tran_time_out = MCD_DATA_TIMEOUT * transfer->blockNum;
+#ifdef SDMMC_DEBUG
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+#endif
+
+ // Wait
+ while(!hal_data_transfer_done(dev, transfer)) {
+ if (hal_getticks() - startTime > (tran_time_out)) {
+ printf("data transfer timeout\n");
+#ifdef SDMMC_DEBUG
+ printf("SDMMC_STATUS=%#x, INT_STATUS=%#x\n", hwp_sdmmc->SDMMC_STATUS,
+ hwp_sdmmc->SDMMC_INT_STATUS);
+#endif
+ hal_data_transfer_stop(dev, transfer);
+ return TIMEOUT;
+ }
+ }
+ return 0;
+}
+
+static int hal_data_read_check_crc(struct mmc *dev)
+{
+ HAL_SDMMC_OP_STATUS_T operationStatus;
+
+ operationStatus = hal_get_op_status(dev);
+ if (operationStatus.fields.dataError != 0) {
+ // 0 means no CRC error during transmission
+#ifdef SDMMC_DEBUG
+ printf("data_read_check_crc fail, status:%08x\n",
+ operationStatus.reg);
+#endif
+ return -EILSEQ;
+ } else {
+ return 0;
+ }
+}
+
+static int hal_data_write_check_crc(struct mmc *dev)
+{
+ HAL_SDMMC_OP_STATUS_T operationStatus;
+
+ operationStatus = hal_get_op_status(dev);
+ if (operationStatus.fields.crcStatus != 2) {
+ // 0b010 = transmissionRight TODO a macro ?
+#ifdef SDMMC_DEBUG
+ printf("data_write_check_crc fail, status:%08x\n",
+ operationStatus.reg);
+#endif
+ return -EILSEQ;
+ } else {
+ return 0;
+ }
+}
+
+/* send command to the mmc card and wait for results */
+static int do_command(struct mmc *dev,
+ struct mmc_cmd *cmd,
+ struct mmc_data *data)
+{
+ int result;
+ //struct mmc_host *host = dev->priv;
+
+#ifdef SDMMC_DEBUG
+ printf("do_command, cmdidx = %d, cmdarg = 0x%08x, resp_type = %x\n",
+ cmd->cmdidx, cmd->cmdarg, cmd->resp_type);
+#endif
+
+ hal_send_cmd(dev, cmd, data);
+ result = hal_wait_cmd_done(dev);
+ if (result)
+ return result;
+ if (cmd->resp_type & MMC_RSP_PRESENT)
+ {
+ result= hal_wait_cmd_resp(dev);
+ if (result)
+ return result;
+ }
+ hal_get_resp(dev, cmd);
+
+#ifdef SDMMC_DEBUG
+ printf(" response: %08x %08x %08x %08x\n",
+ cmd->response[0], cmd->response[1],
+ cmd->response[2], cmd->response[3]);
+#endif
+
+ /* After CMD2 set RCA to a none zero value. */
+ //if (cmd->cmdidx == MMC_CMD_ALL_SEND_CID)
+ // dev->rca = 10;
+
+ /* After CMD3 open drain is switched off and push pull is used. */
+ //if (cmd->cmdidx == MMC_CMD_SET_RELATIVE_ADDR) {
+ // we don't actually need this
+ //}
+
+ return result;
+}
+
+static int do_data_transfer(struct mmc *dev,
+ struct mmc_cmd *cmd,
+ struct mmc_data *data)
+{
+ int result = 0;
+ //struct mmc_host *host = dev->priv;
+ HAL_SDMMC_TRANSFER_T data_transfer;
+
+#ifdef SDMMC_DEBUG
+ printf("do_data_transfer, cmdidx = %d, flag = %d, blks = %d, addr = 0x%08x\n",
+ cmd->cmdidx, data->flags, data->blocks,
+ (data->flags & MMC_DATA_READ)?(u32)data->dest:(u32)data->src);
+#endif
+
+ if (data->flags & MMC_DATA_READ) {
+ flush_dcache_range((ulong)data->dest, (ulong)data->dest +
+ data->blocks * data->blocksize);
+
+ data_transfer.sysMemAddr = (u8*)data->dest;
+ data_transfer.blockNum = data->blocks;
+ data_transfer.blockSize = data->blocksize;
+ data_transfer.direction = HAL_SDMMC_DIRECTION_READ;
+
+ // Initiate data migration through Ifc.
+ result = hal_data_transfer_start(dev, &data_transfer);
+ if (result)
+ return result;
+
+ result = do_command(dev, cmd, data);
+ if (result) {
+ hal_data_transfer_stop(dev, &data_transfer);
+ return result;
+ }
+
+ result = hal_wait_data_transfer_done(dev, &data_transfer);
+ if (result)
+ {
+ hal_data_transfer_stop(dev, &data_transfer);
+ return result;
+ }
+
+ result = hal_data_read_check_crc(dev);
+ if (result)
+ {
+ printf("data read crc check fail\n");
+ return result;
+ }
+#ifdef SDMMC_DEBUG
+ {
+ int i;
+ for (i=0;i<data->blocksize;i++)
+ {
+ printf("%02x ", data->dest[i]);
+ if ((i+1)%16 == 0)
+ printf("\n");
+ }
+ }
+#endif
+ invalidate_dcache_range((ulong)data->dest,
+ (ulong)data->dest + data->blocks * data->blocksize);
+ } else if (data->flags & MMC_DATA_WRITE) {
+ flush_dcache_range((ulong)data->src, (ulong)data->src +
+ data->blocks * data->blocksize);
+
+ data_transfer.sysMemAddr = (u8*)data->src;
+ data_transfer.blockNum = data->blocks;
+ data_transfer.blockSize = data->blocksize;
+ data_transfer.direction = HAL_SDMMC_DIRECTION_WRITE;
+
+ // Initiate data migration through Ifc.
+ result = hal_data_transfer_start(dev, &data_transfer);
+ if (result)
+ return result;
+
+ result = do_command(dev, cmd, data);
+ if (result) {
+ hal_data_transfer_stop(dev, &data_transfer);
+ return result;
+ }
+
+ result = hal_wait_data_transfer_done(dev, &data_transfer);
+ if (result)
+ {
+ hal_data_transfer_stop(dev, &data_transfer);
+ return result;
+ }
+
+ result = hal_data_write_check_crc(dev);
+ if (result)
+ {
+ printf("data write crc check fail\n");
+ return result;
+ }
+ }
+
+ return result;
+}
+
+static int host_request(struct mmc *dev,
+ struct mmc_cmd *cmd,
+ struct mmc_data *data)
+{
+ int result;
+
+ if (data)
+ result = do_data_transfer(dev, cmd, data);
+ else
+ result = do_command(dev, cmd, data);
+
+ return result;
+}
+
+/* MMC uses open drain drivers in the enumeration phase */
+static int mmc_host_reset(struct mmc *dev)
+{
+ return 0;
+}
+
+static void host_set_ios(struct mmc *dev)
+{
+ struct mmc_host *host = dev->priv;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+ unsigned long clk_div;
+ unsigned long apb2_clock = CONFIG_APB2_CLOCK;
+
+ /* Ramp up the clock rate */
+ if (dev->clock) {
+ clk_div = apb2_clock / (2 * dev->clock);
+ if (apb2_clock % (2 * dev->clock))
+ clk_div ++;
+
+ if (clk_div >= 1) {
+ clk_div -= 1;
+ }
+ if (clk_div > 255) {
+ /* clock too slow */
+ clk_div = 255;
+ }
+
+ hwp_sdmmc->SDMMC_TRANS_SPEED = SDMMC_SDMMC_TRANS_SPEED(clk_div);
+ if( host->dev_num == 0 ) {
+ hwp_sdmmc->SDMMC_MCLK_ADJUST = SDMMC_SDMMC_MCLK_ADJUST(_TGT_AP_SDMMC1_MCLK_ADJ);
+#if defined(_TGT_AP_SDMMC1_MCLK_INV) && (_TGT_AP_SDMMC1_MCLK_INV)
+ hwp_sdmmc->SDMMC_MCLK_ADJUST |= SDMMC_CLK_INV;
+#endif
+#ifdef CONFIG_RDA_FPGA
+ hwp_sdmmc->SDMMC_MCLK_ADJUST = 0;
+#endif
+ } else {
+ hwp_sdmmc->SDMMC_MCLK_ADJUST = SDMMC_SDMMC_MCLK_ADJUST(host->mclk_adj);
+ if(host->mclk_inv)
+ hwp_sdmmc->SDMMC_MCLK_ADJUST |= SDMMC_CLK_INV;
+ }
+#ifdef SDMMC_DEBUG
+ printf("set clock to %d, div = %lu\n", dev->clock, clk_div);
+#endif
+ }
+
+ /* Set the bus width */
+ if (dev->bus_width) {
+#ifdef SDMMC_DEBUG
+ printf("set bus_width to %#x\n", dev->bus_width);
+#endif
+
+ switch (dev->bus_width & 0xf) {
+ case 1:
+ hwp_sdmmc->SDMMC_DATA_WIDTH = 1;
+ break;
+ case 4:
+ hwp_sdmmc->SDMMC_DATA_WIDTH = 4;
+ break;
+ case 8:
+ hwp_sdmmc->SDMMC_DATA_WIDTH = 8;
+ break;
+ default:
+ printf("invalid bus width\n");
+ break;
+ }
+
+ /* check ddr enable/disable bit from bus_width */
+ if(dev->bus_width & 0x80000000) {
+ rda_ddr_mode = 1;
+#ifdef SDMMC_DEBUG
+ printf("mmc ddr mode is enabled.\n");
+#endif
+ } else {
+ rda_ddr_mode = 0;
+ }
+ }
+}
+
+
+struct mmc *alloc_mmc_struct(unsigned int dev_num)
+{
+ struct mmc_host *host = NULL;
+ struct mmc *mmc_device = NULL;
+
+ if (dev_num >= MMC_DEV_NUM)
+ return NULL;
+
+ host = &mmc_host_dev[dev_num];
+ if (!host)
+ return NULL;
+
+ host->dev_num = dev_num;
+ if (0 == dev_num)
+ host->phyaddr = RDA_SDMMC1_BASE;
+ else
+ host->phyaddr = RDA_SDMMC3_BASE;
+
+ mmc_device = &mmc_device_glob[dev_num];
+ if (!mmc_device)
+ goto err;
+
+ mmc_device->priv = host;
+ return mmc_device;
+
+err:
+ return NULL;
+}
+
+#define VOLTAGE_WINDOW_MMC 0x00FF8080
+
+/*
+ * mmc_host_init - initialize the mmc controller.
+ * Set initial clock and power for mmc slot.
+ * Initialize mmc struct and register with mmc framework.
+ */
+static int rda_mmc_host_init(struct mmc *dev)
+{
+ struct mmc_host *host = dev->priv;
+ unsigned long clk_div;
+ HWP_SDMMC_T* hwp_sdmmc = (HWP_SDMMC_T*)(host->phyaddr);
+ struct spl_emmc_info *info = get_bd_spl_emmc_info();
+
+ // clk_div = 0; // for APB2 = 48M, 48/2
+ //clk_div = 1; // for APB2 = 120M, 120/4
+ clk_div = 0x21; // for APB2 = 240M, 240/16
+
+ host->reserved = 0;
+
+ // We don't use interrupts.
+ hwp_sdmmc->SDMMC_INT_MASK = 0x0;
+ hwp_sdmmc->SDMMC_TRANS_SPEED = SDMMC_SDMMC_TRANS_SPEED(clk_div);
+ if (0 == host->dev_num){
+ hwp_sdmmc->SDMMC_MCLK_ADJUST = SDMMC_SDMMC_MCLK_ADJUST(_TGT_AP_SDMMC1_MCLK_ADJ);
+#if defined(_TGT_AP_SDMMC1_MCLK_INV) && (_TGT_AP_SDMMC1_MCLK_INV)
+ hwp_sdmmc->SDMMC_MCLK_ADJUST |= SDMMC_CLK_INV;
+#endif
+#ifdef CONFIG_RDA_FPGA
+ hwp_sdmmc->SDMMC_MCLK_ADJUST = 0;
+#endif
+ dev->host_caps = MMC_MODE_4BIT | MMC_MODE_HS | MMC_MODE_HC;
+ } else if (1 == host->dev_num){
+ host->mclk_adj = 0;
+ host->mclk_inv = 0;
+ if (info->manufacturer_id){
+ int i;
+
+ for(i = 0; emmc_mclk_adj_inv[i].mfr_id != 0; i++ )
+ if (info->manufacturer_id == emmc_mclk_adj_inv[i].mfr_id ){
+ host->mclk_adj = emmc_mclk_adj_inv[i].mclk_adj;
+ host->mclk_inv = emmc_mclk_adj_inv[i].mclk_inv;
+ break;
+ }
+
+ if (emmc_mclk_adj_inv[i].mfr_id == 0)
+ printf("Cannot find the emmc corresponding mclk adj and inv.Now use default zero. Please add it \n");
+ } else
+ printf("Spl init emmc first, use default zero mclk adj and inv.\n");
+ hwp_sdmmc->SDMMC_MCLK_ADJUST = SDMMC_SDMMC_MCLK_ADJUST(host->mclk_adj);
+ if(host->mclk_inv)
+ hwp_sdmmc->SDMMC_MCLK_ADJUST |= SDMMC_CLK_INV;
+
+#if defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8810H)
+ dev->host_caps = MMC_MODE_8BIT | MMC_MODE_HS | MMC_MODE_HC | MMC_MODE_DDR_52MHz;
+#else
+ dev->host_caps = MMC_MODE_8BIT | MMC_MODE_HS | MMC_MODE_HC;
+#endif
+ } else{
+ printf("invalid mmc device number \n");
+ }
+
+ sprintf(dev->name, "MMC");
+ dev->clock = 400000;
+ dev->send_cmd = host_request;
+ dev->set_ios = host_set_ios;
+ dev->init = mmc_host_reset;
+ dev->voltages = VOLTAGE_WINDOW_MMC;
+ dev->f_min = 400000;
+ if( host->dev_num == 0 ) {
+ dev->f_max = _TGT_AP_SDMMC1_MAX_FREQ;
+ } else {
+ dev->f_max = _TGT_AP_SDMMC3_MAX_FREQ;
+ }
+
+#ifdef CONFIG_RDA_FPGA
+ printf("mmc host %d init, speed=0x%x, adjust = 0x%x \n",
+ host->dev_num, hwp_sdmmc->SDMMC_TRANS_SPEED,hwp_sdmmc->SDMMC_MCLK_ADJUST);
+#endif
+ return 0;
+}
+int mmc_set_host_mclk_adj_inv(struct mmc *mmc, u8 adj, u8 inv)
+{
+ struct mmc_host *host = mmc->priv;
+
+ if (!host)
+ return -1;
+
+ host->mclk_adj = adj;
+ host->mclk_inv = inv;
+
+ return 0;
+}
+
+/*
+ * MMC write function
+ */
+int mmc_read(struct mmc *mmc, u64 from, uchar *buf, int size)
+{
+ unsigned long cnt;
+ unsigned int start_block, block_num, block_size;
+ int blksz_shift;
+
+ if (!mmc) {
+#ifdef SDMMC_DEBUG
+ printf("mmc_read: mmc device not found!!\n");
+#endif
+ return -1;
+ }
+
+ block_size = mmc->read_bl_len;
+ blksz_shift = mmc->block_dev.log2blksz;
+ start_block = from >> blksz_shift;
+ block_num = (size + block_size - 1) >> blksz_shift;
+
+ /* Read the header too to avoid extra memcpy */
+ cnt = mmc->block_dev.block_read(mmc->block_dev.dev,
+ start_block,
+ block_num, (void *)buf);
+ if (cnt != block_num) {
+#ifdef SDMMC_DEBUG
+ printf("mmc blk read error!\n");
+#endif
+ return -1;
+ }
+
+ return size;
+}
+
+
+int mmc_write(struct mmc *mmc, u64 to, uchar *buf, int size)
+{
+ unsigned long cnt;
+ unsigned int start_block, block_num, block_size;
+ int blksz_shift;
+
+ if (!mmc) {
+#ifdef SDMMC_DEBUG
+ printf("mmc_write: mmc device not found!!\n");
+#endif
+ return -1;
+ }
+
+ blksz_shift = mmc->block_dev.log2blksz;
+ block_size = mmc->write_bl_len;
+ start_block = to >> blksz_shift;
+ block_num = (size + block_size - 1) >> blksz_shift;
+
+ cnt = mmc->block_dev.block_write(mmc->block_dev.dev,
+ start_block,
+ block_num, (void *)buf);
+ if (cnt != block_num) {
+#ifdef SDMMC_DEBUG
+ printf("mmc blk write error!\n");
+#endif
+ return -1;
+ }
+
+ return size;
+}
+
+static void setup_bb_cfg_sdmmc(void)
+{
+#ifdef CONFIG_SDMMC_BOOT
+ unsigned long temp;
+
+ /* pinmux for sdmmc0 */
+ temp = readl(0x11a09008);
+ temp &= ~(0x3F<<9);
+ writel(temp, 0x11a09008);
+#endif
+}
+
+#define RDA_MMC_MAX_BLOCKS (1024)
+int rda_mmc_init(void)
+{
+ int error,i;
+ struct mmc *dev;
+
+#ifdef SDMMC_DEBUG
+ printf("MMC: rda_mmc_init\n");
+#endif
+ setup_bb_cfg_sdmmc();
+
+ for(i = 0; i < MMC_DEV_NUM; i++){
+ dev = alloc_mmc_struct(i);
+ if (!dev)
+ return -1;
+
+ error = rda_mmc_host_init(dev);
+ if (error) {
+ printf("rda_mmc_host_init %d, error = %d\n",
+ dev->block_dev.dev, error);
+ return -1;
+ }
+
+ dev->b_max = RDA_MMC_MAX_BLOCKS;
+ mmc_register(dev);
+ printf("MMC: registered mmc interface %d\n",
+ dev->block_dev.dev);
+ }
+
+ return 0;
+}
+
+int board_mmc_init(bd_t *bis)
+{
+ int err = -1;
+
+ err = rda_mmc_init();
+ if (err)
+ return err;
+
+#if defined(CONFIG_PARTITIONS) && !defined(CONFIG_SPL_BUILD)
+ if (rda_media_get() == MEDIA_MMC) {
+ err = mmc_parts_init();
+ if (err)
+ return err;
+ }
+#endif
+ return err;
+}
+
diff --git a/drivers/mmc/rda_mmc.h b/drivers/mmc/rda_mmc.h
new file mode 100644
index 0000000000..64e08a738f
--- /dev/null
+++ b/drivers/mmc/rda_mmc.h
@@ -0,0 +1,221 @@
+#ifndef _SDMMC_H_
+#define _SDMMC_H_
+
+#include <asm/arch/hardware.h>
+
+// =============================================================================
+// TYPES
+// =============================================================================
+
+typedef struct
+{
+ u8 mid;
+ u32 oid;
+ u32 pnm1;
+ u8 pnm2;
+ u8 prv;
+ u32 psn;
+ u32 mdt;
+ u8 crc;
+} MCD_CID_FORMAT_T;
+
+
+// =============================================================================
+// MCD_CARD_STATE_T
+// -----------------------------------------------------------------------------
+/// The state of the card when receiving the command. If the command execution
+/// causes a state change, it will be visible to the host in the response to
+/// the next command. The four bits are interpreted as a binary coded number
+/// between 0 and 15.
+// =============================================================================
+typedef enum
+{
+ MCD_CARD_STATE_IDLE = 0,
+ MCD_CARD_STATE_READY = 1,
+ MCD_CARD_STATE_IDENT = 2,
+ MCD_CARD_STATE_STBY = 3,
+ MCD_CARD_STATE_TRAN = 4,
+ MCD_CARD_STATE_DATA = 5,
+ MCD_CARD_STATE_RCV = 6,
+ MCD_CARD_STATE_PRG = 7,
+ MCD_CARD_STATE_DIS = 8
+} MCD_CARD_STATE_T;
+
+
+// =============================================================================
+// MCD_CARD_STATUS_T
+// -----------------------------------------------------------------------------
+/// Card status as returned by R1 reponses (spec V2 pdf p.)
+// =============================================================================
+typedef union
+{
+ u32 reg;
+ struct
+ {
+ u32 :3;
+ u32 akeSeqError :1;
+ u32 :1;
+ u32 appCmd :1;
+ u32 :2;
+ u32 readyForData :1;
+ MCD_CARD_STATE_T currentState :4;
+ u32 eraseReset :1;
+ u32 cardEccDisabled :1;
+ u32 wpEraseSkip :1;
+ u32 csdOverwrite :1;
+ u32 :2;
+ u32 error :1;
+ u32 ccError :1;
+ u32 cardEccFailed :1;
+ u32 illegalCommand :1;
+ u32 comCrcError :1;
+ u32 lockUnlockFail :1;
+ u32 cardIsLocked :1;
+ u32 wpViolation :1;
+ u32 eraseParam :1;
+ u32 eraseSeqError :1;
+ u32 blockLenError :1;
+ u32 addressError :1;
+ u32 outOfRange :1;
+ } fields;
+} MCD_CARD_STATUS_T;
+
+// =============================================================================
+// MCD_CSD_T
+// -----------------------------------------------------------------------------
+/// This structure contains the fields of the MMC chip's register.
+/// For more details, please refer to your MMC specification.
+// =============================================================================
+typedef struct
+{ // Ver 2. // Ver 1.0 (if different)
+ u8 csdStructure; // 127:126
+ u8 specVers; // 125:122
+ u8 taac; // 119:112
+ u8 nsac; // 111:104
+ u8 tranSpeed; // 103:96
+ UINT16 ccc; // 95:84
+ u8 readBlLen; // 83:80
+ BOOL readBlPartial; // 79:79
+ BOOL writeBlkMisalign; // 78:78
+ BOOL readBlkMisalign; // 77:77
+ BOOL dsrImp; // 76:76
+ u32 cSize; // 69:48 // 73:62
+ u8 vddRCurrMin; // 61:59
+ u8 vddRCurrMax; // 58:56
+ u8 vddWCurrMin; // 55:53
+ u8 vddWCurrMax; // 52:50
+ u8 cSizeMult; // 49:47
+ // FIXME
+ u8 eraseBlkEnable;
+ u8 eraseGrpSize; // ??? 46:42
+ // FIXME
+ u8 sectorSize;
+ u8 eraseGrpMult; // ??? 41:37
+
+ u8 wpGrpSize; // 38:32
+ BOOL wpGrpEnable; // 31:31
+ u8 defaultEcc; // 30:29
+ u8 r2wFactor; // 28:26
+ u8 writeBlLen; // 25:22
+ BOOL writeBlPartial; // 21:21
+ BOOL contentProtApp; // 16:16
+ BOOL fileFormatGrp; // 15:15
+ BOOL copy; // 14:14
+ BOOL permWriteProtect; // 13:13
+ BOOL tmpWriteProtect; // 12:12
+ u8 fileFormat; // 11:10
+ u8 ecc; // 9:8
+ u8 crc; // 7:1
+ /// This field is not from the CSD register.
+ /// This is the actual block number.
+ u32 blockNumber;
+} MCD_CSD_T;
+
+
+// =============================================================================
+// MCD_ERR_T
+// -----------------------------------------------------------------------------
+/// Type used to describe the error status of the MMC driver.
+// =============================================================================
+typedef enum
+{
+ MCD_ERR_NO = 0,
+ MCD_ERR_CARD_TIMEOUT = 1,
+ MCD_ERR_DMA_BUSY = 3,
+ MCD_ERR_CSD = 4,
+ MCD_ERR_SPI_BUSY = 5,
+ MCD_ERR_BLOCK_LEN = 6,
+ MCD_ERR_CARD_NO_RESPONSE,
+ MCD_ERR_CARD_RESPONSE_BAD_CRC,
+ MCD_ERR_CMD,
+ MCD_ERR_UNUSABLE_CARD,
+ MCD_ERR_NO_CARD,
+ MCD_ERR_NO_HOTPLUG,
+
+ /// A general error value
+ MCD_ERR,
+} MCD_ERR_T;
+
+// =============================================================================
+// MCD_STATUS_T
+// -----------------------------------------------------------------------------
+/// Status of card
+// =============================================================================
+typedef enum
+{
+ // Card present and mcd is open
+ MCD_STATUS_OPEN,
+ // Card present and mcd is not open
+ MCD_STATUS_NOTOPEN_PRESENT,
+ // Card not present
+ MCD_STATUS_NOTPRESENT,
+ // Card removed, still open (please close !)
+ MCD_STATUS_OPEN_NOTPRESENT
+} MCD_STATUS_T ;
+
+// =============================================================================
+// MCD_CARD_SIZE_T
+// -----------------------------------------------------------------------------
+/// Card size
+// =============================================================================
+typedef struct
+{
+ u32 nbBlock;
+ u32 blockLen;
+} MCD_CARD_SIZE_T ;
+
+
+// =============================================================================
+// MCD_CARD_VER
+// -----------------------------------------------------------------------------
+/// Card version
+// =============================================================================
+
+typedef enum
+{
+ MCD_CARD_V1,
+ MCD_CARD_V2
+}MCD_CARD_VER;
+
+
+// =============================================================================
+// MCD_CARD_ID
+// -----------------------------------------------------------------------------
+/// Card version
+// =============================================================================
+
+typedef enum
+{
+ MCD_CARD_ID_0,
+ MCD_CARD_ID_1,
+ MCD_CARD_ID_NO,
+}MCD_CARD_ID;
+
+
+MCD_ERR_T mcd_Open(MCD_CSD_T* mcdCsd, MCD_CARD_VER mcdVer);
+MCD_ERR_T mcd_Close(void);
+MCD_ERR_T mcd_Write(u32 startAddr, u8* blockWr, u32 size);
+MCD_ERR_T mcd_Read(u32 startAddr, u8* blockRd, u32 size);
+
+#endif /* _SDMMC_H_ */
+
diff --git a/drivers/mmc/rda_mmc_legacy.c b/drivers/mmc/rda_mmc_legacy.c
new file mode 100644
index 0000000000..f7f2d7c61a
--- /dev/null
+++ b/drivers/mmc/rda_mmc_legacy.c
@@ -0,0 +1,2419 @@
+#include <common.h>
+#include <part.h>
+#include <fat.h>
+#include <mmc.h>
+
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_mmc.h>
+#include <asm/arch/reg_ifc.h>
+#include <asm/arch/ifc.h>
+
+#include "rda_mmc.h"
+
+#ifdef DEBUG
+#include <assert.h>
+#else
+#define assert(...)
+#endif
+
+#define MCD_TRACE(...)
+
+// =============================================================================
+// HAL_SDMMC_TRANSFER_T
+// -----------------------------------------------------------------------------
+/// Describe a transfer between the SDmmc module and the SD card
+// =============================================================================
+typedef struct
+{
+ /// This address in the system memory
+ u8* sysMemAddr;
+ /// Address in the SD card
+ u8* sdCardAddr;
+ /// Quantity of data to transfer, in blocks
+ u32 blockNum;
+ /// Block size
+ u32 blockSize;
+ HAL_SDMMC_DIRECTION_T direction;
+} HAL_SDMMC_TRANSFER_T;
+
+// =============================================================================
+// Global variables
+// =============================================================================
+u8 g_halSdmmcWriteCh = HAL_UNKNOWN_CHANNEL;
+u8 g_halSdmmcReadCh = HAL_UNKNOWN_CHANNEL;
+
+/// SDMMC clock frequency.
+static u32 g_halSdmmcFreq = 200000;
+
+//=============================================================================
+// hal_SdmmcUpdateDivider
+//-----------------------------------------------------------------------------
+/// Update the SDMMC module divider to keep the desired frequency, whatever
+/// the system frequency is.
+/// @param sysFreq System Frequency currently applied or that will be applied
+/// if faster.
+//=============================================================================
+//static void hal_SdmmcUpdateDivider(HAL_SYS_FREQ_T sysFreq);
+
+//=============================================================================
+// hal_SdmmcOpen
+//-----------------------------------------------------------------------------
+/// Open the SDMMC module. Take a resource.
+//=============================================================================
+void hal_SdmmcOpen(u8 clk_adj)
+{
+ // Make sure the last clock is set
+ //hal_SdmmcUpdateDivider(hal_SysGetFreq());
+
+ // Take the module out of reset
+ //hwp_sysCtrl->REG_DBG = SYS_CTRL_PROTECT_UNLOCK;
+ //hwp_sysCtrl->Sys_Rst_Clr = SYS_CTRL_CLR_RST_SDMMC;
+ //hwp_sysCtrl->REG_DBG = SYS_CTRL_PROTECT_LOCK;
+
+ // We don't use interrupts.
+ hwp_sdmmc->SDMMC_INT_MASK = 0x0;
+ hwp_sdmmc->SDMMC_MCLK_ADJUST = clk_adj;
+
+ // Take a resource (The idea is to be able to get a 25Mhz clock)
+ //hal_SysRequestFreq(HAL_SYS_FREQ_SDMMC, HAL_SYS_FREQ_52M, hal_SdmmcUpdateDivider);
+}
+
+//=============================================================================
+// hal_SdmmcClose
+//-----------------------------------------------------------------------------
+/// Close the SDMMC module. Take a resource.
+//=============================================================================
+void hal_SdmmcClose(void)
+{
+ // Free a resource
+ //hal_SysRequestFreq(HAL_SYS_FREQ_SDMMC, HAL_SYS_FREQ_32K, NULL);
+
+ // Put the module in reset, as its clock is free running.
+ //hwp_sysCtrl->REG_DBG = SYS_CTRL_PROTECT_UNLOCK;
+ //hwp_sysCtrl->Sys_Rst_Set = SYS_CTRL_SET_RST_SDMMC;
+ //hwp_sysCtrl->REG_DBG = SYS_CTRL_PROTECT_LOCK;
+}
+
+//=============================================================================
+// hal_SdmmcWakeUp
+//-----------------------------------------------------------------------------
+/// This function requests a resource of #HAL_SYS_FREQ_52M.
+/// hal_SdmmcSleep() must be called before any other
+//=============================================================================
+void hal_SdmmcWakeUp(void)
+{
+ // Take a resource (The idea is to be able to get a 25Mhz clock)
+ //hal_SysRequestFreq(HAL_SYS_FREQ_SDMMC, HAL_SYS_FREQ_52M, hal_SdmmcUpdateDivider);
+}
+
+//=============================================================================
+// hal_SdmmcSleep
+//-----------------------------------------------------------------------------
+/// This function release the resource to #HAL_SYS_FREQ_32K.
+//=============================================================================
+void hal_SdmmcSleep(void)
+{
+ // We just release the resource, because the clock gating in sdmmc controller
+ // will disable the clock. We should wait for the clock to be actually disabled
+ // but the module does not seam to have a status for that...
+
+ // Free a resource
+ //hal_SysRequestFreq(HAL_SYS_FREQ_SDMMC, HAL_SYS_FREQ_32K, NULL);
+}
+
+// =============================================================================
+// hal_SdmmcSendCmd
+// -----------------------------------------------------------------------------
+/// Send a command to a SD card plugged to the sdmmc port.
+/// @param cmd Command
+/// @param arg Argument of the command
+/// @param suspend Feature not implemented yet.
+// =============================================================================
+void hal_SdmmcSendCmd(HAL_SDMMC_CMD_T cmd, u32 arg, BOOL suspend)
+{
+ u32 configReg = 0;
+ //hwp_sdmmc->SDMMC_CONFIG = SDMMC_AUTO_FLAG_EN;
+ hwp_sdmmc->SDMMC_CONFIG = 0x00000000;
+
+ switch (cmd)
+ {
+ case HAL_SDMMC_CMD_GO_IDLE_STATE:
+ configReg = SDMMC_SDMMC_SENDCMD;
+ break;
+
+
+ case HAL_SDMMC_CMD_ALL_SEND_CID:
+ configReg = SDMMC_RSP_SEL_R2 | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD; // 0x51
+ break;
+
+ case HAL_SDMMC_CMD_SEND_RELATIVE_ADDR:
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD; // 0x11
+ break;
+
+ case HAL_SDMMC_CMD_SEND_IF_COND:
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD; // 0x11
+ break;
+
+ case HAL_SDMMC_CMD_SET_DSR:
+ configReg = SDMMC_SDMMC_SENDCMD;
+ break;
+
+ case HAL_SDMMC_CMD_SELECT_CARD:
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD;
+ break;
+
+ case HAL_SDMMC_CMD_SEND_CSD :
+ configReg = SDMMC_RSP_SEL_R2 | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD;
+ break;
+
+ case HAL_SDMMC_CMD_STOP_TRANSMISSION :
+ configReg = 0; // TODO
+ break;
+
+ case HAL_SDMMC_CMD_SEND_STATUS :
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD;
+ break;
+
+ case HAL_SDMMC_CMD_SET_BLOCKLEN :
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD;
+ break;
+
+ case HAL_SDMMC_CMD_READ_SINGLE_BLOCK :
+ configReg = SDMMC_RD_WT_SEL_READ
+ | SDMMC_RD_WT_EN
+ | SDMMC_RSP_SEL_OTHER
+ | SDMMC_RSP_EN
+ | SDMMC_SDMMC_SENDCMD; // 0x111
+ break;
+
+ case HAL_SDMMC_CMD_READ_MULT_BLOCK :
+ configReg = SDMMC_S_M_SEL_MULTIPLE
+ | SDMMC_RD_WT_SEL_READ
+ | SDMMC_RD_WT_EN
+ | SDMMC_RSP_SEL_OTHER
+ | SDMMC_RSP_EN
+ | SDMMC_SDMMC_SENDCMD; // 0x511;
+ break;
+
+ case HAL_SDMMC_CMD_WRITE_SINGLE_BLOCK :
+ configReg = SDMMC_RD_WT_SEL_WRITE
+ | SDMMC_RD_WT_EN
+ | SDMMC_RSP_SEL_OTHER
+ | SDMMC_RSP_EN
+ | SDMMC_SDMMC_SENDCMD; // 0x311
+ break;
+
+ case HAL_SDMMC_CMD_WRITE_MULT_BLOCK :
+ configReg = SDMMC_S_M_SEL_MULTIPLE
+ | SDMMC_RD_WT_SEL_WRITE
+ | SDMMC_RD_WT_EN
+ | SDMMC_RSP_SEL_OTHER
+ | SDMMC_RSP_EN
+ | SDMMC_SDMMC_SENDCMD; // 0x711
+ break;
+
+ case HAL_SDMMC_CMD_APP_CMD :
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD; // 0x11
+ break;
+
+ case HAL_SDMMC_CMD_SET_BUS_WIDTH :
+ case HAL_SDMMC_CMD_SWITCH:
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD; // 0x11
+ break;
+
+ case HAL_SDMMC_CMD_SEND_NUM_WR_BLOCKS :
+ configReg = SDMMC_RD_WT_SEL_READ
+ | SDMMC_RD_WT_EN
+ | SDMMC_RSP_SEL_OTHER
+ | SDMMC_RSP_EN
+ | SDMMC_SDMMC_SENDCMD; // 0x111
+ break;
+
+ case HAL_SDMMC_CMD_SET_WR_BLK_COUNT :
+ configReg = SDMMC_RSP_SEL_OTHER | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD; // 0x11
+ break;
+
+ case HAL_SDMMC_CMD_MMC_SEND_OP_COND:
+ case HAL_SDMMC_CMD_SEND_OP_COND:
+ configReg = SDMMC_RSP_SEL_R3 | SDMMC_RSP_EN | SDMMC_SDMMC_SENDCMD; // 0x31
+ break;
+
+ default:
+ break;
+ }
+
+ // TODO Add suspend management
+ hwp_sdmmc->SDMMC_CMD_INDEX = SDMMC_COMMAND(cmd);
+ hwp_sdmmc->SDMMC_CMD_ARG = SDMMC_ARGUMENT(arg);
+ //hwp_sdmmc->SDMMC_CONFIG = configReg |SDMMC_AUTO_FLAG_EN;
+ hwp_sdmmc->SDMMC_CONFIG = configReg ;
+}
+
+// =============================================================================
+// hal_SdmmcNeedResponse
+// -----------------------------------------------------------------------------
+/// Tells if the given command waits for a reponse.
+/// @return \c TRUE if the command needs an answer, \c FALSE otherwise.
+// =============================================================================
+BOOL hal_SdmmcNeedResponse(HAL_SDMMC_CMD_T cmd)
+{
+ switch (cmd)
+ {
+ case HAL_SDMMC_CMD_GO_IDLE_STATE:
+ case HAL_SDMMC_CMD_SET_DSR:
+ case HAL_SDMMC_CMD_STOP_TRANSMISSION:
+ return FALSE;
+ break;
+
+
+ case HAL_SDMMC_CMD_ALL_SEND_CID:
+ case HAL_SDMMC_CMD_SEND_RELATIVE_ADDR:
+ case HAL_SDMMC_CMD_SEND_IF_COND:
+
+ case HAL_SDMMC_CMD_SELECT_CARD:
+ case HAL_SDMMC_CMD_SEND_CSD:
+ case HAL_SDMMC_CMD_SEND_STATUS:
+ case HAL_SDMMC_CMD_SET_BLOCKLEN:
+ case HAL_SDMMC_CMD_READ_SINGLE_BLOCK:
+ case HAL_SDMMC_CMD_READ_MULT_BLOCK:
+ case HAL_SDMMC_CMD_WRITE_SINGLE_BLOCK:
+ case HAL_SDMMC_CMD_WRITE_MULT_BLOCK:
+ case HAL_SDMMC_CMD_APP_CMD:
+ case HAL_SDMMC_CMD_SET_BUS_WIDTH:
+ case HAL_SDMMC_CMD_SEND_NUM_WR_BLOCKS:
+ case HAL_SDMMC_CMD_SET_WR_BLK_COUNT:
+ case HAL_SDMMC_CMD_MMC_SEND_OP_COND:
+ case HAL_SDMMC_CMD_SEND_OP_COND:
+ case HAL_SDMMC_CMD_SWITCH:
+ return TRUE;
+ break;
+
+ default:
+ //assert(FALSE, "Unsupported SDMMC command:%d", cmd);
+ // Dummy return, for the compiler to be pleased.
+ return FALSE;
+ break;
+ }
+}
+
+// =============================================================================
+// hal_SdmmcCmdDone
+// -----------------------------------------------------------------------------
+/// @return \c TRUE of there is not command pending or being processed.
+// =============================================================================
+BOOL hal_SdmmcCmdDone(void)
+{
+ return (!(hwp_sdmmc->SDMMC_STATUS & SDMMC_NOT_SDMMC_OVER));
+}
+
+// =============================================================================
+// hal_SdmmcGetCardDetectPinLevel
+// -----------------------------------------------------------------------------
+/// @return \c TRUE if card detect (DAT3) line is high,
+/// \c FALSE if the line is low.
+/// User must check with SD spec and board pull-up/down resistor to
+/// interpret this value.
+// =============================================================================
+BOOL hal_SdmmcGetCardDetectPinLevel(void)
+{
+#if 0
+#if (CHIP_ASIC_ID == CHIP_ASIC_ID_GREENSTONE)
+ u32 value;
+
+ hal_GpioSetIn(HAL_GPIO_26);
+ //IOMUX control is useless, the input pins are not filtered but goes to both
+ //SDMMC and GPIO module
+ //hwp_extApb->GPIO_Mode &= ~REGS_MODE_PIN_SDMMC_DATA3;
+ value = hal_GpioGet(HAL_GPIO_26);
+ //hwp_extApb->GPIO_Mode |= REGS_MODE_PIN_SDMMC_DATA3;
+
+ //HAL_TRACE(TSTDOUT, 0, "----- Value %i\n", value);
+
+ return value != 0;
+#else
+ assert(FALSE, "TODO: hal_SdmmcGetCardDetectPinLevel not implemented for your chip!");
+ return FALSE;
+#endif
+#endif
+ return TRUE;
+}
+
+//=============================================================================
+// hal_SdmmcUpdateDivider
+//-----------------------------------------------------------------------------
+/// Update the SDMMC module divider to keep the desired frequency, whatever
+/// the system frequency is.
+/// @param sysFreq System Frequency currently applied or that will be applied
+/// if faster.
+//=============================================================================
+static void hal_SdmmcUpdateDivider(void)
+{
+ //if (g_halSdmmcFreq != 0)
+ //{
+ // u32 divider = (sysFreq-1)/(2*g_halSdmmcFreq) + 1;
+ // if (divider>1)
+ // {
+ // divider = divider-1;
+ // }
+
+ // if (divider > 0xFF)
+ // {
+ // divider = 0xFF;
+ // }
+
+ // wngl, use 25M/8 as clock
+ hwp_sdmmc->SDMMC_TRANS_SPEED = SDMMC_SDMMC_TRANS_SPEED(8);
+ //}
+}
+
+// =============================================================================
+// hal_SdmmcSetClk
+// -----------------------------------------------------------------------------
+/// Set the SDMMC clock frequency to something inferior but close to that,
+/// taking into account system frequency.
+// =============================================================================
+void hal_SdmmcSetClk(u32 clock)
+{
+ // TODO Add assert to stay on supported values ?
+ g_halSdmmcFreq = clock;
+
+ // Update the divider takes care of the registers configuration
+ hal_SdmmcUpdateDivider();
+}
+
+// =============================================================================
+// hal_SdmmcGetOpStatus
+// -----------------------------------------------------------------------------
+/// @return The operational status of the SDMMC module.
+// =============================================================================
+HAL_SDMMC_OP_STATUS_T hal_SdmmcGetOpStatus(void)
+{
+ return ((HAL_SDMMC_OP_STATUS_T)(u32)hwp_sdmmc->SDMMC_STATUS);
+}
+
+
+// =============================================================================
+// hal_SdmmcGetResp
+// -----------------------------------------------------------------------------
+/// This function is to be used to get the argument of the response of a
+/// command. It is needed to provide the command index and its application
+/// specific status, in order to determine the type of answer expected.
+///
+/// @param cmd Command to send
+/// @param arg Pointer to a four 32 bit word array, where the argument will be
+/// stored. Only the first case is set in case of a response of type R1, R3 or
+/// R6, 4 if it is a R2 response.
+/// @param suspend Unsupported
+// =============================================================================
+void hal_SdmmcGetResp(HAL_SDMMC_CMD_T cmd, u32* arg, BOOL suspend)
+{
+ // TODO Check in the spec for all the commands response types
+ switch (cmd)
+ {
+ // If they require a response, it is cargoed
+ // with a 32 bit argument.
+ case HAL_SDMMC_CMD_GO_IDLE_STATE :
+ case HAL_SDMMC_CMD_SEND_RELATIVE_ADDR :
+ case HAL_SDMMC_CMD_SEND_IF_COND :
+ case HAL_SDMMC_CMD_SET_DSR :
+ case HAL_SDMMC_CMD_SELECT_CARD :
+ case HAL_SDMMC_CMD_STOP_TRANSMISSION :
+ case HAL_SDMMC_CMD_SEND_STATUS :
+ case HAL_SDMMC_CMD_SET_BLOCKLEN :
+ case HAL_SDMMC_CMD_READ_SINGLE_BLOCK :
+ case HAL_SDMMC_CMD_READ_MULT_BLOCK :
+ case HAL_SDMMC_CMD_WRITE_SINGLE_BLOCK :
+ case HAL_SDMMC_CMD_WRITE_MULT_BLOCK :
+ case HAL_SDMMC_CMD_APP_CMD :
+ case HAL_SDMMC_CMD_SET_BUS_WIDTH :
+ case HAL_SDMMC_CMD_SEND_NUM_WR_BLOCKS :
+ case HAL_SDMMC_CMD_SET_WR_BLK_COUNT :
+ case HAL_SDMMC_CMD_MMC_SEND_OP_COND :
+ case HAL_SDMMC_CMD_SEND_OP_COND :
+ case HAL_SDMMC_CMD_SWITCH:
+ arg[0] = hwp_sdmmc->SDMMC_RESP_ARG3;
+ arg[1] = 0;
+ arg[2] = 0;
+ arg[3] = 0;
+ break;
+
+ // Those response arguments are 128 bits
+ case HAL_SDMMC_CMD_ALL_SEND_CID :
+ case HAL_SDMMC_CMD_SEND_CSD :
+ arg[0] = hwp_sdmmc->SDMMC_RESP_ARG0;
+ arg[1] = hwp_sdmmc->SDMMC_RESP_ARG1;
+ arg[2] = hwp_sdmmc->SDMMC_RESP_ARG2;
+ arg[3] = hwp_sdmmc->SDMMC_RESP_ARG3;
+ break;
+
+ default:
+ //assert(FALSE, "hal_SdmmcGetResp called with "
+ // "an unsupported command: %d", cmd);
+ break;
+ }
+}
+
+// =============================================================================
+// hal_SdmmcGetResp32BitsArgument
+// -----------------------------------------------------------------------------
+/// This function is to be used to get the argument of the response of a
+/// command triggerring a response with a 32 bits argument (typically,
+/// R1, R3 or R6).
+/// @return 32 bits of arguments of a 48 bits response token
+// =============================================================================
+u32 hal_SdmmcGetResp32BitsArgument(void)
+{
+ return hwp_sdmmc->SDMMC_RESP_ARG3;
+}
+
+// =============================================================================
+// hal_SdmmcGetResp128BitsArgument
+// -----------------------------------------------------------------------------
+/// This function is to be used to get the argument of the response of a
+/// command triggerring a response with a 128 bits argument (typically,
+/// R2).
+/// @param Pointer to a 4 case arrays of 32 bits where the argument of the
+/// function will be stored.
+// =============================================================================
+void hal_SdmmcGetResp128BitsArgument(u32* buf)
+{
+ buf[0] = hwp_sdmmc->SDMMC_RESP_ARG0;
+ buf[1] = hwp_sdmmc->SDMMC_RESP_ARG1;
+ buf[2] = hwp_sdmmc->SDMMC_RESP_ARG2;
+ buf[3] = hwp_sdmmc->SDMMC_RESP_ARG3;
+}
+
+// =============================================================================
+// hal_SdmmcEnterDataTransferMode
+// -----------------------------------------------------------------------------
+/// Configure the SDMMC module to support data transfers
+/// FIXME Find out why we need that out of the transfer functions...
+// =============================================================================
+void hal_SdmmcEnterDataTransferMode(void)
+{
+ hwp_sdmmc->SDMMC_CONFIG |= SDMMC_RD_WT_EN;
+}
+
+// =============================================================================
+// hal_SdmmcSetDataWidth
+// -----------------------------------------------------------------------------
+/// Set the data bus width
+/// @param width Number of line of the SD data bus used.
+// =============================================================================
+void hal_SdmmcSetDataWidth(HAL_SDMMC_DATA_BUS_WIDTH_T width)
+{
+ switch (width)
+ {
+ case HAL_SDMMC_DATA_BUS_WIDTH_1:
+ hwp_sdmmc->SDMMC_DATA_WIDTH = 1;
+ break;
+
+ case HAL_SDMMC_DATA_BUS_WIDTH_4:
+ hwp_sdmmc->SDMMC_DATA_WIDTH = 4;
+ break;
+
+ default:
+ //assert(FALSE, "hal_SdmmcSetDataWidth(%d) is an invalid width",
+ // width);
+ break;
+ }
+}
+
+// =============================================================================
+// hal_SdmmcTransfer
+// -----------------------------------------------------------------------------
+/// Start the ifc transfer to feed the SDMMC controller fifo.
+/// @param transfer Transfer to program.
+/// @return HAL_ERR_NO or HAL_ERR_RESOURCE_BUSY.
+// =============================================================================
+int hal_SdmmcTransfer(HAL_SDMMC_TRANSFER_T* transfer)
+{
+ u8 channel = 0;
+ HAL_IFC_REQUEST_ID_T ifcReq = HAL_IFC_NO_REQWEST;
+ u32 length = 0;
+ u32 lengthExp = 0;
+
+ //assert((transfer->blockSize>=4) && (transfer->blockSize<=2048),
+ // "Block Length(%d) is invalid!\n", transfer->blockSize);
+
+ length = transfer->blockSize;
+
+ // The block size register
+ while (length != 1)
+ {
+ length >>= 1;
+ lengthExp++;
+ }
+
+ // Configure amount of data
+ hwp_sdmmc->SDMMC_BLOCK_CNT = SDMMC_SDMMC_BLOCK_CNT(transfer->blockNum);
+ hwp_sdmmc->SDMMC_BLOCK_SIZE = SDMMC_SDMMC_BLOCK_SIZE(lengthExp);
+
+ // Configure Bytes reordering
+ hwp_sdmmc->apbi_ctrl_sdmmc = SDMMC_SOFT_RST_L | SDMMC_L_ENDIAN(1);
+
+ switch (transfer->direction)
+ {
+ case HAL_SDMMC_DIRECTION_READ:
+ ifcReq = HAL_IFC_SDMMC_RX;
+ break;
+
+ case HAL_SDMMC_DIRECTION_WRITE:
+ ifcReq = HAL_IFC_SDMMC_TX;
+ break;
+
+ default:
+ assert(FALSE, "hal_SdmmcTransfer with erroneous %d direction",
+ transfer->direction);
+ break;
+ }
+
+ channel = hal_IfcTransferStart(ifcReq, transfer->sysMemAddr,
+ transfer->blockNum*transfer->blockSize,
+ HAL_IFC_SIZE_32_MODE_MANUAL);
+ if (channel == HAL_UNKNOWN_CHANNEL)
+ {
+ printf("Chal_SdmmcTransfer error\n");
+ return -1;
+ }
+ else
+ {
+ // Record Channel used.
+ if (transfer->direction == HAL_SDMMC_DIRECTION_READ)
+ {
+ g_halSdmmcReadCh = channel;
+ }
+ else
+ {
+ g_halSdmmcWriteCh = channel;
+ }
+ return 0;
+ }
+}
+
+// =============================================================================
+// hal_SdmmcTransferDone
+// -----------------------------------------------------------------------------
+/// Check the end of transfer status.
+/// Attention: This means the SDMMC module has finished to transfer data.
+/// In case of a read operation, the Ifc will finish its transfer shortly
+/// after. Considering the way this function is used (after reading at least
+/// 512 bytes, and flushing cache before releasing the data to the user), and
+/// the fifo sizes, this is closely equivalent to the end of the transfer.
+/// @return \c TRUE if a transfer is over, \c FALSE otherwise.
+// =============================================================================
+BOOL hal_SdmmcTransferDone(void)
+{
+ // The link is not full duplex. We check both the
+ // direction, but only one can be in progress at a time.
+
+ if (g_halSdmmcReadCh != HAL_UNKNOWN_CHANNEL)
+ {
+ // Operation in progress is a read.
+ // The SDMMC module itself can know it has finished
+ if ((hwp_sdmmc->SDMMC_INT_STATUS & SDMMC_DAT_OVER_INT)
+ && (hwp_sysIfc->std_ch[g_halSdmmcReadCh].tc == 0))
+ {
+ // Transfer is over
+ hwp_sdmmc->SDMMC_INT_CLEAR = SDMMC_DAT_OVER_CL;
+ hal_IfcChannelRelease(HAL_IFC_SDMMC_RX, g_halSdmmcReadCh);
+
+ // We finished a read
+ g_halSdmmcReadCh = HAL_UNKNOWN_CHANNEL;
+
+ // Put the FIFO in reset state.
+ hwp_sdmmc->apbi_ctrl_sdmmc = 0 | SDMMC_L_ENDIAN(1);
+
+ return TRUE;
+ }
+ }
+
+ if (g_halSdmmcWriteCh != HAL_UNKNOWN_CHANNEL)
+ {
+ // Operation in progress is a write.
+ // The SDMMC module itself can know it has finished
+ if ((hwp_sdmmc->SDMMC_INT_STATUS & SDMMC_DAT_OVER_INT)
+ && (hwp_sysIfc->std_ch[g_halSdmmcWriteCh].tc == 0))
+ {
+ // Transfer is over
+ hwp_sdmmc->SDMMC_INT_CLEAR = SDMMC_DAT_OVER_CL;
+ hal_IfcChannelRelease(HAL_IFC_SDMMC_TX, g_halSdmmcWriteCh);
+
+ // We finished a write
+ g_halSdmmcWriteCh = HAL_UNKNOWN_CHANNEL;
+
+ // Put the FIFO in reset state.
+ hwp_sdmmc->apbi_ctrl_sdmmc = 0 | SDMMC_L_ENDIAN(1);
+
+ return TRUE;
+ }
+ }
+
+ // there's still data running through a pipe (or no transfer in progress ...)
+ return FALSE;
+}
+
+// =============================================================================
+// hal_SdmmcStopTransfer
+// -----------------------------------------------------------------------------
+/// Stop the ifc transfer feeding the SDMMC controller fifo.
+/// @param transfer Transfer to program.
+/// @return #HAL_ERR_NO
+// =============================================================================
+void hal_SdmmcStopTransfer(HAL_SDMMC_TRANSFER_T* transfer)
+{
+ // Configure amount of data
+ hwp_sdmmc->SDMMC_BLOCK_CNT = SDMMC_SDMMC_BLOCK_CNT(0);
+ hwp_sdmmc->SDMMC_BLOCK_SIZE = SDMMC_SDMMC_BLOCK_SIZE(0);
+
+ // Put the FIFO in reset state.
+ hwp_sdmmc->apbi_ctrl_sdmmc = 0 | SDMMC_L_ENDIAN(1);
+
+ if (transfer->direction == HAL_SDMMC_DIRECTION_READ)
+ {
+ hal_IfcChannelFlush(HAL_IFC_SDMMC_RX, g_halSdmmcReadCh);
+ while(!hal_IfcChannelIsFifoEmpty(HAL_IFC_SDMMC_RX, g_halSdmmcReadCh));
+ hal_IfcChannelRelease(HAL_IFC_SDMMC_RX, g_halSdmmcReadCh);
+ g_halSdmmcReadCh = HAL_UNKNOWN_CHANNEL;
+ }
+ else
+ {
+ hal_IfcChannelFlush(HAL_IFC_SDMMC_TX, g_halSdmmcWriteCh);
+ while(!hal_IfcChannelIsFifoEmpty(HAL_IFC_SDMMC_TX, g_halSdmmcReadCh));
+ hal_IfcChannelRelease(HAL_IFC_SDMMC_TX, g_halSdmmcWriteCh);
+ g_halSdmmcWriteCh = HAL_UNKNOWN_CHANNEL;
+ }
+}
+
+// =============================================================================
+// hal_SdmmcIsBusy
+// -----------------------------------------------------------------------------
+/// Check if the SD/MMC is busy.
+///
+/// @return \c TRUE if the SD/MMC controller is busy.
+/// \c FALSE otherwise.
+// =============================================================================
+BOOL hal_SdmmcIsBusy(void)
+{
+ //if (g_halSdmmcReadCh != HAL_UNKNOWN_CHANNEL
+ // || g_halSdmmcWriteCh != HAL_UNKNOWN_CHANNEL
+ // || ((hwp_sdmmc->SDMMC_STATUS & (SDMMC_NOT_SDMMC_OVER | SDMMC_BUSY | SDMMC_DL_BUSY)) != 0)
+ // )
+ if ((hwp_sdmmc->SDMMC_STATUS & (SDMMC_NOT_SDMMC_OVER | SDMMC_BUSY | SDMMC_DL_BUSY)) != 0)
+ {
+ // SD/MMc is busy doing something.
+ return TRUE;
+ }
+ else
+ {
+ return FALSE;
+ }
+}
+
+// =============================================================================
+// MACROS
+// =============================================================================
+#define BROAD_ADDR 0
+#define NOT_SDMMC_OVER (1<<0)
+
+#define MCD_MAX_BLOCK_NUM 128
+
+#define MCD_SDMMC_OCR_TIMEOUT (1 SECOND) // the card is supposed to answer within 1s
+ // - Max wait is 128 * 10ms=1,28s
+ // TODO: where those 10ms come from ??
+
+// Command 8 things: cf spec Vers.2 section 4.3.13
+#define MCD_CMD8_CHECK_PATTERN 0xaa
+#define MCD_CMD8_VOLTAGE_SEL (0x1<<8)
+//#define MCD_CMD8_VOLTAGE_SEL (0x2<<8) // wngl, change to low voltage
+#define MCD_OCR_HCS (1<<30)
+#define MCD_OCR_CCS_MASK (1<<30)
+
+#define SECOND * CONFIG_SYS_HZ_CLOCK
+// Timeouts for V1
+#define MCD_CMD_TIMEOUT_V1 ( 1 SECOND / 1 )
+#define MCD_RESP_TIMEOUT_V1 ( 1 SECOND / 1 )
+#define MCD_TRAN_TIMEOUT_V1 ( 1 SECOND / 1 )
+#define MCD_READ_TIMEOUT_V1 ( 5 SECOND )
+#define MCD_WRITE_TIMEOUT_V1 ( 5 SECOND )
+
+// Timeouts for V2
+#define MCD_CMD_TIMEOUT_V2 ( 1 SECOND / 10 )
+#define MCD_RESP_TIMEOUT_V2 ( 1 SECOND / 10 )
+#define MCD_TRAN_TIMEOUT_V2 ( 1 SECOND / 10 )
+#define MCD_READ_TIMEOUT_V2 ( 5 SECOND )
+#define MCD_WRITE_TIMEOUT_V2 (5 SECOND )
+
+// =============================================================================
+// Global variables
+// =============================================================================
+
+// Spec Ver2 p96
+#define MCD_SDMMC_OCR_VOLT_PROF_MASK 0x00ff8000
+
+static u32 g_mcdOcrReg = MCD_SDMMC_OCR_VOLT_PROF_MASK;
+
+/// Relative Card Address Register
+/// Nota RCA is sixteen bit long, but is always used
+/// as the 16 upper bits of a 32 bits word. Therefore
+/// is variable is in fact (RCA<<16), to avoid operation
+/// (shift, unshift), to always place the RCA value as the
+/// upper bits of a data word.
+static u32 g_mcdRcaReg = 0x00000000;
+
+// Driver Stage Register p.118
+// (To adjust bus capacitance)
+// TODO Tune and put in calibration ?
+static u32 g_mcdSdmmcDsr = 0x04040000;
+
+
+static u32 g_mcdSdmmcFreq = 200000;
+
+static MCD_CID_FORMAT_T g_mcdCidReg;
+static u32 g_mcdBlockLen = 0;
+static u32 g_mcdNbBlock = 0;
+static BOOL g_mcdCardIsSdhc = FALSE;
+
+static MCD_STATUS_T g_mcdStatus = MCD_STATUS_NOTOPEN_PRESENT;
+
+//static CONST TGT_MCD_CONFIG_T* g_mcdConfig=NULL;
+//static MCD_CARD_DETECT_HANDLER_T g_mcdCardDetectHandler=NULL;
+
+/// Semaphore to ensure proper concurrency of the MCD accesses
+/// among all tasks.
+static u32 g_mcdSemaphore = 0xFF;
+
+/// Current in-progress transfer, if any.
+static HAL_SDMMC_TRANSFER_T g_mcdSdmmcTransfer =
+ {
+ .sysMemAddr = 0,
+ .sdCardAddr = 0,
+ .blockNum = 0,
+ .blockSize = 0,
+ .direction = HAL_SDMMC_DIRECTION_WRITE,
+ };
+
+static MCD_CSD_T g_mcdLatestCsd;
+
+static MCD_CARD_VER g_mcdVer = MCD_CARD_V2;
+
+// =============================================================================
+// Functions
+// =============================================================================
+u32 hal_TimGetUpTime(void)
+{
+ return (u32)get_ticks();
+}
+// =============================================================================
+// Functions for the HAL Driver ?
+// =============================================================================
+#if 0
+/// Macro to easily implement concurrency in the MCD driver.
+/// Enter in the 'critical section'.
+#define MCD_CS_ENTER \
+ if (g_mcdSemaphore != 0xFF) \
+ { \
+ sxr_TakeSemaphore(g_mcdSemaphore); \
+ } \
+ else \
+ { \
+ return MCD_ERR; \
+ }
+
+
+/// Macro to easily implement concurrency in the MCD driver.
+/// Exit in the 'critical section'.
+#define MCD_CS_EXIT \
+ { \
+ sxr_ReleaseSemaphore(g_mcdSemaphore); \
+ }
+#endif
+
+MCD_ERR_T mcd_GetCardSize(MCD_CARD_SIZE_T* size)
+{
+ //MCD_CS_ENTER;
+
+ size->blockLen = g_mcdBlockLen;
+ size->nbBlock = g_mcdNbBlock;
+
+ //MCD_CS_EXIT;
+ return MCD_ERR_NO;
+}
+
+// Wait for a command to be done or timeouts
+static MCD_ERR_T mcd_SdmmcWaitCmdOver(void)
+{
+ u32 startTime = hal_TimGetUpTime();
+ u32 time_out;
+
+ time_out = (MCD_CARD_V1 == g_mcdVer) ? MCD_CMD_TIMEOUT_V1:MCD_CMD_TIMEOUT_V2;
+
+ while(hal_TimGetUpTime() - startTime < time_out && !hal_SdmmcCmdDone());
+
+ if (!hal_SdmmcCmdDone())
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "SDC Waiting is Time out");
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+ else
+ {
+ return MCD_ERR_NO;
+ }
+}
+
+#if 0
+/// Update g_mcdStatus
+/// @return TRUE is card present (only exact when GPIO is used for card detect.)
+static BOOL mcd_CardDetectUpdateStatus(void)
+{
+ if(NULL == g_mcdConfig)
+ {
+ g_mcdConfig = tgt_GetMcdConfig();
+ }
+
+ if(g_mcdConfig->cardDetectGpio != HAL_GPIO_NONE)
+ {
+ BOOL gpioState = !!hal_GpioGet(g_mcdConfig->cardDetectGpio);
+ // CARD ?
+ if(gpioState == g_mcdConfig->gpioCardDetectHigh)
+ { // card detected
+ switch(g_mcdStatus)
+ {
+ case MCD_STATUS_OPEN_NOTPRESENT: // wait for the close !
+ case MCD_STATUS_OPEN:
+ // No change
+ break;
+ default:
+ g_mcdStatus = MCD_STATUS_NOTOPEN_PRESENT;
+ }
+ return TRUE;
+ }
+ else
+ { // no card
+ switch(g_mcdStatus)
+ {
+ case MCD_STATUS_OPEN_NOTPRESENT:
+ case MCD_STATUS_OPEN:
+ g_mcdStatus = MCD_STATUS_OPEN_NOTPRESENT;
+ break;
+ default:
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+ }
+ return FALSE;
+ }
+ }
+ // estimated
+ switch(g_mcdStatus)
+ {
+ case MCD_STATUS_OPEN:
+ case MCD_STATUS_NOTOPEN_PRESENT:
+ return TRUE;
+ default:
+ return FALSE;
+ }
+}
+
+static void mcd_CardDetectHandler(void)
+{
+ BOOL CardPresent = mcd_CardDetectUpdateStatus();
+
+ g_mcdCardDetectHandler(CardPresent);
+}
+
+// =============================================================================
+// mcd_SetCardDetectHandler
+// -----------------------------------------------------------------------------
+/// Register a handler for card detection
+///
+/// @param handler function called when insertion/removal is detected.
+// =============================================================================
+MCD_ERR_T mcd_SetCardDetectHandler(MCD_CARD_DETECT_HANDLER_T handler)
+{
+ if(NULL == g_mcdConfig)
+ {
+ g_mcdConfig = tgt_GetMcdConfig();
+ }
+
+ if(g_mcdConfig->cardDetectGpio == HAL_GPIO_NONE)
+ {
+ return MCD_ERR_NO_HOTPLUG;
+ }
+
+ if(NULL != handler)
+ {
+ HAL_GPIO_CFG_T cfg =
+ {
+ .direction = HAL_GPIO_DIRECTION_INPUT,
+ .irqMask =
+ {
+ .rising = TRUE,
+ .falling = TRUE,
+ .debounce = TRUE,
+ .level = FALSE
+ },
+ .irqHandler = mcd_CardDetectHandler
+ };
+
+ hal_GpioOpen(g_mcdConfig->cardDetectGpio, &cfg);
+ g_mcdCardDetectHandler = handler;
+ }
+ else
+ {
+ hal_GpioClose(g_mcdConfig->cardDetectGpio);
+ g_mcdCardDetectHandler = NULL;
+ }
+
+ return MCD_ERR_NO;
+}
+
+// =============================================================================
+// mcd_CardStatus
+// -----------------------------------------------------------------------------
+/// Return the card status
+///
+/// @return Card status see #MCD_STATUS_T
+// =============================================================================
+MCD_STATUS_T mcd_CardStatus(void)
+{
+ mcd_CardDetectUpdateStatus();
+ return g_mcdStatus;
+}
+#endif
+
+// =============================================================================
+// mcd_SdmmcWaitResp
+// -----------------------------------------------------------------------------
+/// Wait for a response for a time configured by MCD_RESP_TIMEOUT
+/// @return MCD_ERR_NO if a response with a good crc was received,
+/// MCD_ERR_CARD_NO_RESPONSE if no response was received within the
+/// driver configured timeout.
+// MCD_ERR_CARD_RESPONSE_BAD_CRC if the received response presented
+// a bad CRC.
+// =============================================================================
+static MCD_ERR_T mcd_SdmmcWaitResp(void)
+{
+ HAL_SDMMC_OP_STATUS_T status = hal_SdmmcGetOpStatus();
+ u32 startTime = hal_TimGetUpTime();
+ u32 rsp_time_out;
+
+ rsp_time_out = (MCD_CARD_V1 == g_mcdVer) ? MCD_RESP_TIMEOUT_V1:MCD_RESP_TIMEOUT_V2;
+
+ while(hal_TimGetUpTime() - startTime < rsp_time_out &&status.fields.noResponseReceived)
+ {
+ status = hal_SdmmcGetOpStatus();
+ }
+
+ if (status.fields.noResponseReceived)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Response is Time out");
+ return MCD_ERR_CARD_NO_RESPONSE;
+ }
+
+ if(status.fields.responseCrcError)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Response CRC is Error");
+ return MCD_ERR_CARD_RESPONSE_BAD_CRC;
+ }
+
+ return MCD_ERR_NO;
+}
+
+//=============================================================================
+// mcd_SdmmcReadCheckCrc
+//-----------------------------------------------------------------------------
+/// Check the read state of the sdmmc card.
+/// @return MCD_ERR_NO if the Crc of read data was correct,
+/// MCD_ERR_CARD_RESPONSE_BAD_CRC otherwise.
+//=============================================================================
+static MCD_ERR_T mcd_SdmmcReadCheckCrc(void)
+{
+ HAL_SDMMC_OP_STATUS_T operationStatus;
+ operationStatus = hal_SdmmcGetOpStatus();
+ if (operationStatus.fields.dataError != 0) // 0 means no CRC error during transmission
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "sdC status:%0x", operationStatus.reg);
+ return MCD_ERR_CARD_RESPONSE_BAD_CRC;
+ }
+ else
+ {
+ return MCD_ERR_NO;
+ }
+}
+
+//=============================================================================
+// mcd_SdmmcWriteCheckCrc
+//-----------------------------------------------------------------------------
+/// Check the crc state of the write operation of the sdmmc card.
+/// @return MCD_ERR_NO if the Crc of read data was correct,
+/// MCD_ERR_CARD_RESPONSE_BAD_CRC otherwise.
+//=============================================================================
+static MCD_ERR_T mcd_SdmmcWriteCheckCrc(void)
+{
+ HAL_SDMMC_OP_STATUS_T operationStatus;
+ operationStatus = hal_SdmmcGetOpStatus();
+
+ if (operationStatus.fields.crcStatus != 2) // 0b010 = transmissionRight TODO a macro ?
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "sdC status:%0x", operationStatus.reg);
+ return MCD_ERR_CARD_RESPONSE_BAD_CRC;
+ }
+ else
+ {
+ return MCD_ERR_NO;
+ }
+}
+
+// =============================================================================
+// mcd_SdmmcSendCmd
+// -----------------------------------------------------------------------------
+/// Send a command to the card, and fetch the response if one is expected.
+/// @param cmd CMD to send
+/// @param arg Argument of the ACMD.
+/// @param resp Buffer to store card response.
+/// @param suspend Not supported.
+/// @return MCD_ERR_NO if a response with a good crc was received,
+/// MCD_ERR_CARD_NO_RESPONSE if no reponse was received within the
+/// driver configured timeout.
+/// MCD_ERR_CARD_RESPONSE_BAD_CRC if the received response presented
+/// a bad CRC.
+/// MCD_ERR_CARD_TIMEOUT if the card timedout during procedure.
+// =============================================================================
+static MCD_ERR_T mcd_SdmmcSendCmd(HAL_SDMMC_CMD_T cmd, u32 arg,
+ u32* resp, BOOL suspend)
+{
+ MCD_ERR_T errStatus = MCD_ERR_NO;
+ MCD_CARD_STATUS_T cardStatus = {0};
+ u32 cmd55Response[4] = {0, 0, 0, 0};
+ if (cmd & HAL_SDMMC_ACMD_SEL)
+ {
+ // This is an application specific command,
+ // we send the CMD55 first
+ hal_SdmmcSendCmd(HAL_SDMMC_CMD_APP_CMD, g_mcdRcaReg, FALSE);
+
+ // Wait for command over
+ if (MCD_ERR_CARD_TIMEOUT == mcd_SdmmcWaitCmdOver())
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Cmd55 Send is Time out");
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+
+ // Wait for response
+ if (hal_SdmmcNeedResponse(HAL_SDMMC_CMD_APP_CMD))
+ {
+ errStatus = mcd_SdmmcWaitResp();
+ }
+ if (MCD_ERR_NO != errStatus)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "cmd55 response error");
+ return errStatus;
+ }
+
+ // Fetch response
+ hal_SdmmcGetResp(HAL_SDMMC_CMD_APP_CMD, cmd55Response, FALSE);
+
+ cardStatus.reg = cmd55Response[0];
+ if(HAL_SDMMC_CMD_SEND_OP_COND == cmd) // for some special card
+ {
+ //if (!(cardStatus.fields.readyForData) || !(cardStatus.fields.appCmd))
+ if (!(cardStatus.fields.appCmd))
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "cmd55(acmd41) status=%0x", cardStatus.reg);
+ return MCD_ERR;
+ }
+ }
+ else
+ {
+ if (!(cardStatus.fields.readyForData) || !(cardStatus.fields.appCmd))
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "cmd55 status=%0x", cardStatus.reg);
+ return MCD_ERR;
+ }
+
+ }
+ }
+
+ // Send proper command. If it was an ACMD, the CMD55 have just been sent.
+ hal_SdmmcSendCmd(cmd, arg, suspend);
+
+ // Wait for command to be sent
+ errStatus = mcd_SdmmcWaitCmdOver();
+
+
+ if (MCD_ERR_CARD_TIMEOUT == errStatus)
+ {
+ if (cmd & HAL_SDMMC_ACMD_SEL)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "ACMD %d Sending Timed out", (cmd & HAL_SDMMC_CMD_MASK));
+ }
+ else
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "CMD %d Sending Timed out", (cmd & HAL_SDMMC_CMD_MASK));
+ }
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+
+ // Wait for response and get its argument
+ if (hal_SdmmcNeedResponse(cmd))
+ {
+ errStatus = mcd_SdmmcWaitResp();
+ }
+
+ if (MCD_ERR_NO != errStatus)
+ {
+ if (cmd & HAL_SDMMC_ACMD_SEL)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "ACMD %d Response Error", (cmd & HAL_SDMMC_CMD_MASK));
+ }
+ else
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "CMD %d Response Error", (cmd & HAL_SDMMC_CMD_MASK));
+ return errStatus;
+ }
+ }
+
+ // Fetch response
+ hal_SdmmcGetResp(cmd, resp, FALSE);
+
+ //FOR DEBUG: MCD_TRACE(MCD_INFO_TRC, 0, "CMD %d Response is %#x", (cmd & HAL_SDMMC_CMD_MASK), resp[0]);
+
+ return MCD_ERR_NO;
+}
+
+// =============================================================================
+// mcd_SdmmcInitCid
+// -----------------------------------------------------------------------------
+/// Set the CID in the driver from the data read on the card.
+/// @param cid 4 word array read from the card, holding the CID register value.
+// =============================================================================
+static MCD_ERR_T mcd_SdmmcInitCid(u32* cid)
+{
+ // Fill the structure with the register bitfields value.
+ g_mcdCidReg.mid = (u8)((cid[3]&(0xff<<24))>>24);
+ g_mcdCidReg.oid = (cid[3]&(0xffff<<8))>>8;
+ g_mcdCidReg.pnm2 = (u8)(cid[3]&0xff);
+ g_mcdCidReg.pnm1 = cid[2];
+ g_mcdCidReg.prv = (u8)((cid[1]&(0xff<<24))>>24);
+ g_mcdCidReg.psn = (cid[1]&0xffffff)<<8;
+ g_mcdCidReg.psn = g_mcdCidReg.psn|((cid[0]&(0xff<<23))>>23);
+ g_mcdCidReg.mdt = (cid[0]&(0xfff<<7))>>7;
+ g_mcdCidReg.crc = (u8)(cid[0]&0x7f);
+
+ return MCD_ERR_NO;
+}
+
+#define MCD_CSD_VERSION_1 0
+#define MCD_CSD_VERSION_2 1
+// =============================================================================
+// mcd_SdmmcInitCsd
+// -----------------------------------------------------------------------------
+/// Fill MCD_CSD_T structure from the array of data read from the card
+///
+/// @param csd Pointer to the structure
+/// @param csdRaw Pointer to the raw data.
+/// @return MCD_ERR_NO
+// =============================================================================
+static MCD_ERR_T mcd_SdmmcInitCsd(MCD_CSD_T* csd, u32* csdRaw)
+{
+ // CF SD spec version2, CSD version 1 ?
+ csd->csdStructure = (u8)((csdRaw[3]&(0x3<<30))>>30);
+
+ // Byte 47 to 75 are different depending on the version
+ // of the CSD srtucture.
+ csd->specVers = (u8)((csdRaw[3]&(0xf<26))>>26);
+ csd->taac = (u8)((csdRaw[3]&(0xff<<16))>>16);
+ csd->nsac = (u8)((csdRaw[3]&(0xff<<8))>>8);
+ csd->tranSpeed = (u8)(csdRaw[3]&0xff);
+
+ csd->ccc = (csdRaw[2]&(0xfff<<20))>>20;
+ csd->readBlLen = (u8)((csdRaw[2]&(0xf<<16))>>16);
+ csd->readBlPartial = (u8)((csdRaw[2]&(0x1<<15))>>15);
+ csd->writeBlkMisalign = (u8)((csdRaw[2]&(0x1<<14))>>14);
+ csd->readBlkMisalign = (u8)((csdRaw[2]&(0x1<<13))>>13);
+ csd->dsrImp = (u8)((csdRaw[2]&(0x1<<12))>>12);
+
+ if (csd->csdStructure == MCD_CSD_VERSION_1)
+ {
+ csd->cSize = (csdRaw[2]&0x3ff)<<2;
+
+ csd->cSize = csd->cSize|((csdRaw[1]&(0x3<<30))>>30);
+ csd->vddRCurrMin = (u8)((csdRaw[1]&(0x7<<27))>>27);
+ csd->vddRCurrMax = (u8)((csdRaw[1]&(0x7<<24))>>24);
+ csd->vddWCurrMin = (u8)((csdRaw[1]&(0x7<<21))>>21);
+ csd->vddWCurrMax = (u8)((csdRaw[1]&(0x7<<18))>>18);
+ csd->cSizeMult = (u8)((csdRaw[1]&(0x7<<15))>>15);
+
+ // Block number: cf Spec Version 2 page 103 (116).
+ csd->blockNumber = (csd->cSize + 1)<<(csd->cSizeMult + 2);
+ }
+ else
+ {
+ // csd->csdStructure == MCD_CSD_VERSION_2
+ csd->cSize = ((csdRaw[2]&0x3f))|((csdRaw[1]&(0xffff<<16))>>16);
+
+ // Other fields are undefined --> zeroed
+ csd->vddRCurrMin = 0;
+ csd->vddRCurrMax = 0;
+ csd->vddWCurrMin = 0;
+ csd->vddWCurrMax = 0;
+ csd->cSizeMult = 0;
+
+ // Block number: cf Spec Version 2 page 109 (122).
+ csd->blockNumber = (csd->cSize + 1) * 1024;
+ //should check incompatible size and return MCD_ERR_UNUSABLE_CARD;
+ }
+
+ csd->eraseBlkEnable = (u8)((csdRaw[1]&(0x1<<14))>>14);
+ csd->sectorSize = (u8)((csdRaw[1]&(0x7f<<7))>>7);
+ csd->wpGrpSize = (u8)(csdRaw[1]&0x7f);
+
+ csd->wpGrpEnable = (u8)((csdRaw[0]&(0x1<<31))>>31);
+ csd->r2wFactor = (u8)((csdRaw[0]&(0x7<<26))>>26);
+ csd->writeBlLen = (u8)((csdRaw[0]&(0xf<<22))>>22);
+ csd->writeBlPartial = (u8)((csdRaw[0]&(0x1<<21))>>21);
+ csd->fileFormatGrp = (u8)((csdRaw[0]&(0x1<<15))>>15);
+ csd->copy = (u8)((csdRaw[0]&(0x1<<14))>>14);
+ csd->permWriteProtect = (u8)((csdRaw[0]&(0x1<<13))>>13);
+ csd->tmpWriteProtect = (u8)((csdRaw[0]&(0x1<<12))>>12);
+ csd->fileFormat = (u8)((csdRaw[0]&(0x3<<10))>>10);
+ csd->crc = (u8)((csdRaw[0]&(0x7f<<1))>>1);
+
+
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:csdStructure = %d", csd->csdStructure );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:specVers = %d", csd->specVers );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:taac = %d", csd->taac );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:nsac = %d", csd->nsac );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:tranSpeed = %d", csd->tranSpeed );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:ccc = %d", csd->ccc );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:readBlLen = %d", csd->readBlLen );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:readBlPartial = %d", csd->readBlPartial );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:writeBlkMisalign = %d", csd->writeBlkMisalign );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:readBlkMisalign = %d", csd->readBlkMisalign );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:dsrImp = %d", csd->dsrImp );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:cSize = %d", csd->cSize );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:vddRCurrMin = %d", csd->vddRCurrMin );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:vddRCurrMax = %d", csd->vddRCurrMax );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:vddWCurrMin = %d", csd->vddWCurrMin );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:vddWCurrMax = %d", csd->vddWCurrMax );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:cSizeMult = %d", csd->cSizeMult );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:eraseBlkEnable = %d", csd->eraseBlkEnable );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:sectorSize = %d", csd->sectorSize );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:wpGrpSize = %d", csd->wpGrpSize );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:wpGrpEnable = %d", csd->wpGrpEnable );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:r2wFactor = %d", csd->r2wFactor );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:writeBlLen = %d", csd->writeBlLen );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:writeBlPartial = %d", csd->writeBlPartial );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:fileFormatGrp = %d", csd->fileFormatGrp );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:copy = %d", csd->copy );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:permWriteProtect = %d", csd->permWriteProtect );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:tmpWriteProtect = %d", csd->tmpWriteProtect );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:fileFormat = %d", csd->fileFormat );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:crc = %d", csd->crc );
+ MCD_TRACE(MCD_INFO_TRC, 0, "CSD:block number = %d", csd->blockNumber );
+
+ return MCD_ERR_NO;
+}
+
+// =============================================================================
+// FUNCTIONS (public)
+// =============================================================================
+
+// =============================================================================
+// mcd_ReadCsd
+// -----------------------------------------------------------------------------
+/// @brief Read the MMC CSD register
+/// @param mcdCsd Pointer to the structure where the MMC CSD register info
+/// are going to be written.
+// =============================================================================
+static MCD_ERR_T mcd_ReadCsd(MCD_CSD_T* mcdCsd)
+{
+ MCD_ERR_T errStatus = MCD_ERR_NO;
+ u32 response[4];
+
+ // Get card CSD
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SEND_CSD, g_mcdRcaReg, response, FALSE);
+ if (errStatus == MCD_ERR_NO)
+ {
+ errStatus = mcd_SdmmcInitCsd(mcdCsd, response);
+ }
+
+ // Store it localy
+ // FIXME: Is this real ? cf Physical Spec version 2
+ // page 59 (72) about CMD16 : default block length
+ // is 512 bytes. Isn't 512 bytes a good block
+ // length ? And I quote : "In both cases, if block length is set larger
+ // than 512Bytes, the card sets the BLOCK_LEN_ERROR bit."
+ g_mcdBlockLen = (1 << mcdCsd->readBlLen);
+ //if (g_mcdBlockLen > 512)
+ //{
+ g_mcdBlockLen = 512;
+ //}
+ //g_mcdNbBlock = mcdCsd->blockNumber * ((1 << mcdCsd->readBlLen)/g_mcdBlockLen);
+ g_mcdNbBlock = mcdCsd->blockNumber * ((1 << mcdCsd->readBlLen)>>9);
+
+ return errStatus;
+}
+
+
+// =============================================================================
+// mcd_Open
+// -----------------------------------------------------------------------------
+/// @brief Open the SD-MMC chip
+/// This function does the init process of the MMC chip, including reseting
+/// the chip, sending a command of init to MMC, and reading the CSD
+/// configurations.
+///
+/// @param mcdCsd Pointer to the structure where the MMC CSD register info
+/// are going to be written.
+///
+/// @param mcdVer is t card version.
+// =============================================================================
+MCD_ERR_T mcd_Open(MCD_CSD_T* mcdCsd, MCD_CARD_VER mcdVer)
+{
+ MCD_ERR_T errStatus = MCD_ERR_NO;
+ u32 response[4] = {0, 0, 0, 0};
+ MCD_CARD_STATUS_T cardStatus = {0};
+ BOOL isMmc = FALSE;
+ HAL_SDMMC_DATA_BUS_WIDTH_T dataBusWidth;
+ u32 startTime = 0;
+
+ //MCD_PROFILE_FUNCTION_ENTER(mcd_Open);
+ MCD_TRACE(MCD_INFO_TRC, 0, "mcd_Open starts ...");
+
+#if 0
+ // Check concurrency. Only one mcd_Open.
+ u32 cs = hal_SysEnterCriticalSection();
+ if (g_mcdSemaphore == 0xFF)
+ {
+ // Create semaphore and go on with the driver.
+
+ // NOTE: This semaphore is never deleted for now, as
+ // 1. sema deletion while other task is waiting for it will cause an error;
+ // 2. sema deletion will make trouble if already-open state is considered OK.
+ g_mcdSemaphore = sxr_NewSemaphore(1);
+ }
+ hal_SysExitCriticalSection(cs);
+
+ // Following operation should be kept protected
+ MCD_CS_ENTER;
+
+ if(NULL == g_mcdConfig)
+ {
+ g_mcdConfig = tgt_GetMcdConfig();
+ }
+
+ if(g_mcdConfig->cardDetectGpio != HAL_GPIO_NONE)
+ {
+ // Only if GPIO for detection exists, else we try to open anyway.
+ if(!mcd_CardDetectUpdateStatus())
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "mcd_Open: GPIO detection - no card");
+ MCD_CS_EXIT;
+ MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR_NO_CARD;
+ }
+ }
+
+ if (g_mcdStatus == MCD_STATUS_OPEN)
+ {
+ // Already opened, just return OK
+ MCD_TRACE(MCD_INFO_TRC, 0, "mcd_Open: Already opened");
+ *mcdCsd = g_mcdLatestCsd;
+
+ MCD_CS_EXIT;
+ MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR_NO;
+ }
+#endif
+
+ //printf("mcd_Open\n");
+
+ if(MCD_CARD_V1 == mcdVer)
+ {
+ hal_SdmmcOpen(0x05);
+ }
+ else
+ {
+ hal_SdmmcOpen(0x0);
+ }
+
+ ///@todo: should use g_mcdConfig->dat3HasPullDown if true, we can handle
+ /// basic card detection as follows:
+ /// call hal_SdmmcGetCardDetectPinLevel() to check if card as changed (back 1)
+ /// send command ACMD42 to disable internal pull up (so pin goes to 0)
+ /// meaning if pin is 1, there was a removal, file system should be told to
+ /// remount the card as it might be a different one (or the content might have
+ /// been changed externally).
+
+ // RCA = 0x0000 for card identification phase.
+ g_mcdRcaReg = 0;
+
+ g_mcdSdmmcFreq = 200000;
+ hal_SdmmcSetClk(g_mcdSdmmcFreq);
+
+ // assume it's not an SDHC card
+ g_mcdCardIsSdhc = FALSE;
+ g_mcdOcrReg = MCD_SDMMC_OCR_VOLT_PROF_MASK;
+
+ //printf("CMD0\n");
+
+ // Send Power On command
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_GO_IDLE_STATE, BROAD_ADDR, response, FALSE);
+ if (MCD_ERR_NO != errStatus)
+ {
+ printf("CMD0 Error\n");
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Power on, Initialize Failed");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Error Status = %d", errStatus);
+ hal_SdmmcClose();
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+ else
+ {
+ //printf("CMD0 Done\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Card successfully in Idle state");
+ }
+
+ //printf("CMD8\n");
+
+ // Check if the card is a spec vers.2 one
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SEND_IF_COND, (MCD_CMD8_VOLTAGE_SEL | MCD_CMD8_CHECK_PATTERN), response, FALSE);
+ if (MCD_ERR_NO != errStatus)
+ {
+ printf("CMD8 Error\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "This card doesn't comply to the spec version 2.0");
+ }
+ else
+ {
+ // This card comply to the SD spec version 2. Is it compatible with the
+ // proposed voltage, and is it an high capacity one ?
+ if (response[0] != (MCD_CMD8_VOLTAGE_SEL | MCD_CMD8_CHECK_PATTERN))
+ {
+ printf("CMD8, Not Supported\n");
+ // Bad pattern or unsupported voltage.
+ MCD_TRACE(MCD_INFO_TRC, 0, "Bad pattern or unsupported voltage");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+ //g_mcdVer = MCD_CARD_V1;
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR_UNUSABLE_CARD;
+ }
+ else
+ {
+ //printf("CMD8, Supported\n");
+ g_mcdOcrReg |= MCD_OCR_HCS;
+ }
+ }
+
+ // TODO HCS mask bit to ACMD 41 if high capacity
+ // Send OCR, as long as the card return busy
+ startTime = hal_TimGetUpTime();
+
+ while(1)
+ {
+ if(hal_TimGetUpTime() - startTime > MCD_SDMMC_OCR_TIMEOUT )
+ {
+ printf("ACMD41, Retry Timeout\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "SD OCR timeout");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR;
+ }
+
+ //printf("ACMD41\n");
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SEND_OP_COND, g_mcdOcrReg, response, FALSE);
+ if (errStatus == MCD_ERR_CARD_NO_RESPONSE)
+ {
+ printf("ACMD41, No Response, MMC Card?\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Inserted Card is a MMC");
+ // CMD 55 was not recognised: this is not an SD card !
+ isMmc = TRUE;
+ break;
+ }
+
+ // Bit 31 is power up busy status bit(pdf spec p. 109)
+ g_mcdOcrReg = (response[0] & 0x7fffffff);
+
+ // Power up busy bit is set to 1,
+ // we can continue ...
+ if (response[0] & 0x80000000)
+ {
+ //printf("ACMD41, PowerUp done\n");
+ // Version 2?
+ if((g_mcdOcrReg & MCD_OCR_HCS) == MCD_OCR_HCS)
+ {
+ // Card is V2: check for high capacity
+ if (response[0] & MCD_OCR_CCS_MASK)
+ {
+ g_mcdCardIsSdhc = TRUE;
+ printf("Card is SDHC\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Card is SDHC");
+ }
+ else
+ {
+ g_mcdCardIsSdhc = FALSE;
+ printf("Card is V2, but NOT SDHC\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Card is standard capacity SD");
+ }
+ }
+ else {
+ printf("Card is NOT V2\n");
+ }
+ MCD_TRACE(MCD_INFO_TRC, 0, "Inserted Card is a SD card");
+ break;
+ }
+ }
+
+ if (isMmc)
+ {
+ printf("MMC Card\n");
+ while(1)
+ {
+ if(hal_TimGetUpTime() - startTime > MCD_SDMMC_OCR_TIMEOUT )
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "MMC OCR timeout");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR;
+ }
+
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_MMC_SEND_OP_COND, g_mcdOcrReg, response, FALSE);
+ if (errStatus == MCD_ERR_CARD_NO_RESPONSE)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "MMC OCR didn't answer");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR;
+ }
+
+ // Bit 31 is power up busy status bit(pdf spec p. 109)
+ g_mcdOcrReg = (response[0] & 0x7fffffff);
+
+ // Power up busy bit is set to 1,
+ // we can continue ...
+ if (response[0] & 0x80000000)
+ {
+ break;
+ }
+ }
+
+ }
+
+ //printf("CMD2\n");
+
+ // Get the CID of the card.
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_ALL_SEND_CID, BROAD_ADDR, response, FALSE);
+ if(MCD_ERR_NO != errStatus)
+ {
+ printf("CMD2 Fail\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Get CID, Initialize Failed");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+ mcd_SdmmcInitCid(response);
+
+ //printf("CMD3\n");
+
+ // Get card RCA
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SEND_RELATIVE_ADDR, BROAD_ADDR, response, FALSE);
+ if (MCD_ERR_NO != errStatus)
+ {
+ printf("CMD3 Fail\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Get Relative Address, Initialize Failed");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+
+ // Spec Ver 2 pdf p. 81 - rca are the 16 upper bit of this
+ // R6 answer. (lower bits are stuff bits)
+ g_mcdRcaReg = response[0] & 0xffff0000;
+
+ //printf("CMD9\n");
+ // Get card CSD
+ errStatus = mcd_ReadCsd(mcdCsd);
+ if (errStatus != MCD_ERR_NO)
+ {
+ printf("CMD9 Fail\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Get CSD, Initialize Failed");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+
+ // If possible, set the DSR
+ if (mcdCsd->dsrImp)
+ {
+ //printf("CMD4\n");
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SET_DSR, g_mcdSdmmcDsr, response, FALSE);
+ if (errStatus != MCD_ERR_NO)
+ {
+ printf("CMD4 Fail\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Set DSR, Initialize Failed");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+ }
+
+ //printf("CMD7\n");
+ // Select the card
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SELECT_CARD, g_mcdRcaReg, response, FALSE);
+ if (errStatus != MCD_ERR_NO)
+ {
+ printf("CMD7 Fail\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Select Card, Initialize Failed");
+ MCD_TRACE(MCD_INFO_TRC, 0, "errStatus = %d", errStatus);
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+ // That command returns the card status, we check we're in data mode.
+ cardStatus.reg = response[0];
+
+ if(!(cardStatus.fields.readyForData))
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "CMD7 status=%0x", cardStatus.reg);
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR;
+ }
+
+ // Set the bus width (use 4 data lines for SD cards only)
+ if (isMmc)
+ {
+ dataBusWidth = HAL_SDMMC_DATA_BUS_WIDTH_1;
+ }
+ else
+ {
+
+ dataBusWidth = MCD_CARD_V1 == mcdVer ? HAL_SDMMC_DATA_BUS_WIDTH_1 : HAL_SDMMC_DATA_BUS_WIDTH_4;
+
+ }
+
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SET_BUS_WIDTH, dataBusWidth,
+ response, FALSE);
+ if (errStatus != MCD_ERR_NO)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Set Bus, Initialize Failed");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+
+ // That command returns the card status, in tran state ?
+ cardStatus.reg = response[0];
+ if ( !(cardStatus.fields.appCmd)
+ || !(cardStatus.fields.readyForData)
+ || (cardStatus.fields.currentState != MCD_CARD_STATE_TRAN))
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "ACMD6 status=%0x", cardStatus.reg);
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR;
+ }
+
+ // Configure the controller to use that many lines.
+ hal_SdmmcSetDataWidth(dataBusWidth);
+
+ // Configure the block lenght
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SET_BLOCKLEN, g_mcdBlockLen, response, FALSE);
+ if (errStatus != MCD_ERR_NO)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Because Set Block Length, Initialize Failed");
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return errStatus;
+ }
+
+ // That command returns the card status, in tran state ?
+ cardStatus.reg = response[0];
+ {
+ MCD_CARD_STATUS_T expectedCardStatus;
+ expectedCardStatus.reg = 0;
+ expectedCardStatus.fields.readyForData = 1;
+ expectedCardStatus.fields.currentState = MCD_CARD_STATE_TRAN;
+
+ if (cardStatus.reg != expectedCardStatus.reg)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "CMD16 status=%0x", cardStatus.reg);
+ hal_SdmmcClose();
+ g_mcdStatus = MCD_STATUS_NOTPRESENT;
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR;
+ }
+ }
+
+ hal_SdmmcEnterDataTransferMode();
+
+
+ // Set the clock of the SD bus for the fastest possible rate.
+
+ g_mcdSdmmcFreq = MCD_CARD_V1 == mcdVer ? 6000000 : 20000000;
+
+ hal_SdmmcSetClk(g_mcdSdmmcFreq);
+
+ g_mcdLatestCsd = *mcdCsd;
+ g_mcdStatus = MCD_STATUS_OPEN;
+ hal_SdmmcSleep();
+ g_mcdVer = mcdVer;
+
+ //printf("mcd_Open Done\n");
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Open);
+ return MCD_ERR_NO;
+}
+
+// =============================================================================
+// mcd_Close
+// -----------------------------------------------------------------------------
+/// Close MCD.
+///
+/// To be called at the end of the operations
+/// @return MCD_ERR_NO if a response with a good crc was received,
+/// MCD_ERR_CARD_NO_RESPONSE if no reponse was received within the
+/// driver configured timeout.
+/// MCD_ERR_CARD_RESPONSE_BAD_CRC if the received response presented
+/// a bad CRC.
+/// MCD_ERR_CARD_TIMEOUT if the card timedout during procedure.
+// =============================================================================
+MCD_ERR_T mcd_Close(void)
+{
+ MCD_TRACE(MCD_INFO_TRC, 0, "mcd_Close");
+
+ if (g_mcdSemaphore == 0xFF)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "mcd_Close: Never opened before");
+ return MCD_ERR_NO;
+ }
+
+ //MCD_CS_ENTER;
+
+ MCD_ERR_T errStatus = MCD_ERR_NO;
+
+ //MCD_PROFILE_FUNCTION_ENTER(mcd_Close);
+
+ // Don't close the MCD driver if a transfer is in progress,
+ // and be definitive about it:
+ if (hal_SdmmcIsBusy() == TRUE)
+ {
+ MCD_TRACE(MCD_WARN_TRC, 0, "MCD: Attempt to close MCD while a transfer is in progress");
+ }
+
+ hal_SdmmcWakeUp();
+
+ // Brutal force stop current transfer, if any.
+ hal_SdmmcStopTransfer(&g_mcdSdmmcTransfer);
+
+ // Close the SDMMC module
+ hal_SdmmcClose();
+
+ g_mcdStatus = MCD_STATUS_NOTOPEN_PRESENT; // without GPIO
+ //mcd_CardDetectUpdateStatus(); // Test GPIO for card detect
+
+ //MCD_CS_EXIT;
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Close);
+ return errStatus;
+}
+
+//=============================================================================
+// mcd_SdmmcTranState
+//-----------------------------------------------------------------------------
+/// Blocking function checking that the card is in the transfer state,
+/// acknowledging thus that, for example, end of transmission.
+/// @param iter Number of attempt to be made.
+/// @param duration Sleeping time before the next attempt (in sys ticks).
+//=============================================================================
+static MCD_ERR_T mcd_SdmmcTranState(u32 iter)
+{
+ u32 cardResponse[4] = {0, 0, 0, 0};
+ MCD_ERR_T errStatus = MCD_ERR_NO;
+ MCD_CARD_STATUS_T cardStatusTranState;
+ // Using reg to clear all bit of the bitfields that are not
+ // explicitly set.
+ cardStatusTranState.reg = 0;
+ cardStatusTranState.fields.readyForData = 1;
+ cardStatusTranState.fields.currentState = MCD_CARD_STATE_TRAN;
+ u32 startTime = hal_TimGetUpTime();
+ u32 time_out;
+
+ while(1)
+ {
+ //printf("CMD13, Set Trans State\n");
+
+ errStatus = mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SEND_STATUS, g_mcdRcaReg, cardResponse, FALSE);
+ if (errStatus != MCD_ERR_NO)
+ {
+ printf("CMD13, Fail\n");
+ // error while sending the command
+ MCD_TRACE(MCD_INFO_TRC, 0, "Sd Tran Read Aft State error! err nb:%d", errStatus);
+ return MCD_ERR;
+ }
+ else if (cardResponse[0] == cardStatusTranState.reg)
+ {
+ //printf("CMD13, Done\n");
+ // the status is the expected one - success
+ return MCD_ERR_NO;
+ }
+ else
+ {
+ // try again
+ // check for timeout
+ time_out = (MCD_CARD_V1 == g_mcdVer) ? MCD_CMD_TIMEOUT_V1:MCD_CMD_TIMEOUT_V2;
+ if (hal_TimGetUpTime() - startTime > time_out )
+ {
+ printf("CMD13, Timeout\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Sd Tran don't finished");
+ MCD_TRACE(MCD_INFO_TRC, 0, "current state =%0x", cardResponse[0]);
+ return MCD_ERR;
+ }
+ }
+ }
+}
+
+//=============================================================================
+// mcd_SdmmcMultBlockWrite
+//-----------------------------------------------------------------------------
+/// Write one or a bunch of data blocks.
+/// @param blockAddr Address on the card where to write data.
+/// @param pWrite Pointer towards the buffer of data to write.
+/// @param blockNum Number of blocks to write.
+//=============================================================================
+static MCD_ERR_T mcd_SdmmcMultBlockWrite(u8* blockAddr, u8* pWrite, u32 blockNum)
+{
+ u32 cardResponse[4] = {0, 0, 0, 0};
+ MCD_ERR_T errStatus = MCD_ERR_NO;
+ MCD_CARD_STATUS_T cardStatusTranState;
+ // Using reg to clear all bit of the bitfields that are not
+ // explicitly set.
+ cardStatusTranState.reg = 0;
+ cardStatusTranState.fields.readyForData = 1;
+ cardStatusTranState.fields.currentState = MCD_CARD_STATE_TRAN;
+
+ MCD_CARD_STATUS_T cardStatusPreErasedState;
+ cardStatusPreErasedState.reg = 0;
+ cardStatusPreErasedState.fields.appCmd = 1;
+ cardStatusPreErasedState.fields.readyForData = 1;
+ cardStatusPreErasedState.fields.currentState = MCD_CARD_STATE_TRAN;
+
+ MCD_CARD_STATUS_T cardStatusResponse = {0,};
+
+ u32 startTime = 0;
+
+ HAL_SDMMC_CMD_T writeCmd;
+ u32 tran_time_out;
+ u32 write_time_out;
+
+ g_mcdSdmmcTransfer.sysMemAddr = (u8*) pWrite;
+ g_mcdSdmmcTransfer.sdCardAddr = blockAddr;
+ g_mcdSdmmcTransfer.blockNum = blockNum;
+ g_mcdSdmmcTransfer.blockSize = g_mcdBlockLen;
+ g_mcdSdmmcTransfer.direction = HAL_SDMMC_DIRECTION_WRITE;
+
+
+// FIXME find what the heck is that !:
+// program_right_num=0;
+
+ // Check buffer.
+ assert(pWrite != NULL, "SDMMC write: Buffer is NULL");
+ assert(((u32)pWrite & 0x3) ==0,
+ "SDMMC write: buffer is not aligned! addr=%08x", pWrite);
+ assert(blockNum>=1 && blockNum<= MCD_MAX_BLOCK_NUM,
+ "Block Num is overflow");
+
+ // Check that the card is in tran (Transmission) state.
+ tran_time_out = (MCD_CARD_V1 == g_mcdVer) ? MCD_TRAN_TIMEOUT_V1:MCD_TRAN_TIMEOUT_V2;
+ if (MCD_ERR_NO != mcd_SdmmcTranState(tran_time_out))
+ // 5200000, 0, initially, that is to say rougly 0.1 sec ?
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Write on Sdmmc while not in Tran state");
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+
+ // The command for single block or multiple blocks are differents
+ if (blockNum == 1)
+ {
+ writeCmd = HAL_SDMMC_CMD_WRITE_SINGLE_BLOCK;
+ }
+ else
+ {
+ writeCmd = HAL_SDMMC_CMD_WRITE_MULT_BLOCK;
+ }
+
+ // PreErasing, to accelerate the multi-block write operations
+ if (blockNum >1)
+ {
+ //printf("SET_WR_BLK_COUNT\n");
+ if(MCD_ERR == mcd_SdmmcSendCmd(HAL_SDMMC_CMD_SET_WR_BLK_COUNT, blockNum, cardResponse, FALSE))
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Set Pre-erase Failed");
+ return MCD_ERR;
+ }
+
+ // Advance compatibility,to support 1.0 t-flash.
+ if (cardResponse[0] != cardStatusPreErasedState.reg)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "warning ACMD23 status=%0x", cardResponse[0]);
+ // cardResponse[0] = cardStatusPreErasedState.reg;
+ // return MCD_ERR;
+ }
+ }
+
+
+ // Initiate data migration through Ifc.
+ if (hal_SdmmcTransfer(&g_mcdSdmmcTransfer) != 0)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "write sd no ifc channel");
+ return MCD_ERR_DMA_BUSY;
+ }
+
+ //printf("writeCmd\n");
+
+ // Initiate data migration of multiple blocks through SD bus.
+ errStatus = mcd_SdmmcSendCmd(writeCmd,
+ (u32)blockAddr,
+ cardResponse,
+ FALSE);
+ if (errStatus != MCD_ERR_NO)
+ {
+ printf("writeCmd Fail, err = %d\n", (int)errStatus);
+ MCD_TRACE(MCD_INFO_TRC, 0, "Set sd write had error");
+ hal_SdmmcStopTransfer(&g_mcdSdmmcTransfer);
+ return MCD_ERR_CMD;
+ }
+
+ cardStatusResponse.reg = cardResponse[0] ;
+ // Check for error, by listing all valid states
+ // TODO: FIXME, more states could be legal here
+ // The sixteen uper bits are error bits: they all must be null
+ // (Physical Spec V.2, p71)
+ if ((cardResponse[0] != cardStatusTranState.reg)
+ && !((cardStatusResponse.fields.readyForData == 1)
+ && (cardStatusResponse.fields.currentState == MCD_CARD_STATE_RCV)
+ && ((cardStatusResponse.reg&0xFFFF0000) == 0))
+ && !(cardStatusResponse.fields.currentState == MCD_CARD_STATE_RCV
+ && ((cardStatusResponse.reg&0xFFFF0000) == 0))
+ && !(cardStatusResponse.fields.currentState == MCD_CARD_STATE_PRG
+ && ((cardStatusResponse.reg&0xFFFF0000) == 0))
+ )
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Write block,Card Reponse: %x", cardResponse[0]);
+ hal_SdmmcStopTransfer(&g_mcdSdmmcTransfer);
+ return MCD_ERR;
+ }
+
+
+ // Wait
+ startTime = hal_TimGetUpTime();
+ write_time_out = (MCD_CARD_V1 == g_mcdVer) ? MCD_WRITE_TIMEOUT_V1:MCD_WRITE_TIMEOUT_V2;
+ while(!hal_SdmmcTransferDone())
+ {
+ if (hal_TimGetUpTime() - startTime > (write_time_out*blockNum))
+ {
+ printf("writeCmd Timeout\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Write on Sdmmc timeout");
+ // Abort the transfert.
+ hal_SdmmcStopTransfer(&g_mcdSdmmcTransfer);
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+ }
+ //printf("writeCmd Done\n");
+
+
+ // Nota: CMD12 (stop transfer) is automatically
+ // sent by the SDMMC controller.
+
+ if (mcd_SdmmcWriteCheckCrc() != MCD_ERR_NO)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "SDMMC Write error");
+ return MCD_ERR;
+ }
+ //printf("CheckCRC Done\n");
+
+ // Check that the card is in tran (Transmission) state.
+ if (MCD_ERR_NO != mcd_SdmmcTranState(tran_time_out))
+ // 5200000, 0, initially, that is to say rougly 0.1 sec ?
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "Write on Sdmmc while not in Tran state");
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+ //printf("Check Tran State Done\n");
+ return MCD_ERR_NO;
+
+}
+
+//=============================================================================
+// mcd_SdmmcMultBlockRead
+//-----------------------------------------------------------------------------
+/// Read one or a bunch of data blocks.
+/// @param blockAddr Address on the card where to read data.
+/// @param pRead Pointer towards the buffer of data to read.
+/// @param blockNum Number of blocks to read.
+//=============================================================================
+static MCD_ERR_T mcd_SdmmcMultBlockRead(u8* blockAddr, u8* pRead, u32 blockNum)
+{
+ u32 cardResponse[4] = {0, 0, 0, 0};
+ MCD_ERR_T errStatus = MCD_ERR_NO;
+ HAL_SDMMC_CMD_T readCmd;
+ MCD_CARD_STATUS_T cardStatusTranState;
+ // Using reg to clear all bit of the bitfields that are not
+ // explicitly set.
+ cardStatusTranState.reg = 0;
+ cardStatusTranState.fields.readyForData = 1;
+ cardStatusTranState.fields.currentState = MCD_CARD_STATE_TRAN;
+
+ u32 startTime=0;
+ u32 tran_time_out;
+ u32 read_time_out;
+
+ g_mcdSdmmcTransfer.sysMemAddr = (u8*) pRead;
+ g_mcdSdmmcTransfer.sdCardAddr = blockAddr;
+ g_mcdSdmmcTransfer.blockNum = blockNum;
+ g_mcdSdmmcTransfer.blockSize = g_mcdBlockLen;
+ g_mcdSdmmcTransfer.direction = HAL_SDMMC_DIRECTION_READ;
+
+ // Check buffer.
+ assert(pRead != NULL, "SDMMC write: Buffer is NULL");
+ assert(((u32)pRead & 0x3) ==0, "SDMMC write: buffer is not aligned");
+ assert(blockNum>=1 && blockNum<= MCD_MAX_BLOCK_NUM,
+ "Block Num is overflow");
+
+ // Command are different for reading one or several blocks of data
+ if (blockNum == 1)
+ {
+ readCmd = HAL_SDMMC_CMD_READ_SINGLE_BLOCK;
+ }
+ else
+ {
+ readCmd = HAL_SDMMC_CMD_READ_MULT_BLOCK;
+ }
+
+ // Initiate data migration through Ifc.
+ if (hal_SdmmcTransfer(&g_mcdSdmmcTransfer) != 0)
+ {
+ MCD_TRACE(MCD_INFO_TRC, 0, "write sd no ifc channel");
+ return MCD_ERR_DMA_BUSY;
+ }
+
+ // Initiate data migration of multiple blocks through SD bus.
+ errStatus = mcd_SdmmcSendCmd(readCmd,
+ (u32)blockAddr,
+ cardResponse,
+ FALSE);
+ if (errStatus != MCD_ERR_NO)
+ {
+ printf("mcd_SdmmcMultBlockRead, send command error\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Set sd write had error");
+ hal_SdmmcStopTransfer(&g_mcdSdmmcTransfer);
+ return MCD_ERR_CMD;
+ }
+
+ if (cardResponse[0] != cardStatusTranState.reg)
+ {
+ printf("mcd_SdmmcMultBlockRead, command response error\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "CMD%d status=%0x", cardResponse[0], readCmd);
+ hal_SdmmcStopTransfer(&g_mcdSdmmcTransfer);
+ return MCD_ERR;
+ }
+
+ // Wait
+ startTime = hal_TimGetUpTime();
+ read_time_out = (MCD_CARD_V1 == g_mcdVer) ? MCD_READ_TIMEOUT_V1:MCD_READ_TIMEOUT_V2;
+ while(!hal_SdmmcTransferDone())
+ {
+ if (hal_TimGetUpTime() - startTime > (read_time_out*blockNum))
+ {
+ printf("mcd_SdmmcMultBlockRead, timeout\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Read on Sdmmc timeout");
+ // Abort the transfert.
+ hal_SdmmcStopTransfer(&g_mcdSdmmcTransfer);
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+ }
+
+ // Nota: CMD12 (stop transfer) is automatically
+ // sent by the SDMMC controller.
+
+ if (mcd_SdmmcReadCheckCrc() != MCD_ERR_NO)
+ {
+ printf("mcd_SdmmcMultBlockRead, crc error\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "sdc read state error");
+ return MCD_ERR;
+ }
+
+ tran_time_out = (MCD_CARD_V1 == g_mcdVer) ? MCD_TRAN_TIMEOUT_V1:MCD_TRAN_TIMEOUT_V2;
+ // Check that the card is in tran (Transmission) state.
+ if (MCD_ERR_NO != mcd_SdmmcTranState(tran_time_out))
+ // 5200000, 0, initially, that is to say rougly 0.1 sec ?
+ {
+ printf("mcd_SdmmcMultBlockRead, trans state timeout\n");
+ MCD_TRACE(MCD_INFO_TRC, 0, "Read on Sdmmc while not in Tran state");
+ return MCD_ERR_CARD_TIMEOUT;
+ }
+
+ // Flush Cache
+ //hal_SysInvalidateCache(pRead, blockNum * g_mcdBlockLen);
+
+ return MCD_ERR_NO;
+}
+
+// =============================================================================
+// mcd_Write
+// -----------------------------------------------------------------------------
+/// @brief Write a block of data to MMC.
+///
+/// This function is used to write blocks of data on the MMC.
+/// @param startAddr Start Adress of the SD memory block where the
+/// data will be written
+/// @param blockWr Pointer to the block of data to write. Must be aligned
+/// on a 32 bits boundary.
+/// @param size Number of bytes to write. Must be an interger multiple of the
+/// sector size of the card
+// =============================================================================
+MCD_ERR_T mcd_Write(u32 startAddr, u8* blockWr, u32 size)
+{
+ //MCD_CS_ENTER;
+ u8* tmpAdd = NULL;
+ MCD_ERR_T value = MCD_ERR_NO;
+ u32 i = 0;
+
+ //MCD_PROFILE_FUNCTION_ENTER(mcd_Write);
+ assert(g_mcdBlockLen != 0, "mcd_Write called before a successful mcd_Open");
+ assert(startAddr % g_mcdBlockLen == 0,
+ "write card address is not aligned");
+ assert((size % g_mcdBlockLen) == 0, "mcd_Write size (%d) is not a multiple of"
+ "the block size (%d)",
+ size, g_mcdBlockLen);
+
+ //printf("mcd_Write\n");
+
+ //if(!mcd_CardDetectUpdateStatus())
+ //{
+ // MCD_PROFILE_FUNCTION_EXIT(mcd_Write);
+ // MCD_CS_EXIT;
+ // return MCD_ERR_NO_CARD;
+ //}
+
+ hal_SdmmcWakeUp();
+ // Addresses are block number for high capacity card
+ if (g_mcdCardIsSdhc)
+ {
+ tmpAdd = (u8*) (startAddr);
+ }
+ else
+ {
+ tmpAdd = (u8*) (startAddr * g_mcdBlockLen);
+ }
+ if(MCD_CARD_V1 == g_mcdVer)
+ {
+ //printf("mcd_Write, V1\n");
+
+ //for(i = 0; i < size/g_mcdBlockLen; i++)
+ for(i = 0; i < size>>9; i++)
+ {
+ value = mcd_SdmmcMultBlockWrite(tmpAdd + i*g_mcdBlockLen, blockWr + i*g_mcdBlockLen, 1);
+ if(value != MCD_ERR_NO)
+ {
+ break;
+ }
+ }
+ }
+ else
+ {
+ //printf("mcd_Write, V2\n");
+ //value = mcd_SdmmcMultBlockWrite(tmpAdd, blockWr, size/g_mcdBlockLen);
+ value = mcd_SdmmcMultBlockWrite(tmpAdd, blockWr, size>>9);
+ }
+
+ hal_SdmmcSleep();
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Write);
+ //MCD_CS_EXIT;
+ return value;
+}
+
+// =============================================================================
+// mcd_Read
+// -----------------------------------------------------------------------------
+/// @brief Read using pattern mode.
+/// @ param startAddr: of the SD memory block where the data
+/// will be read
+/// @param blockRd Pointer to the buffer where the data will be stored. Must be aligned
+/// on a 32 bits boundary.
+/// @param size Number of bytes to read. Must be an interger multiple of the
+/// sector size of the card.
+// =============================================================================
+MCD_ERR_T mcd_Read(u32 startAddr, u8* blockRd, u32 size)
+{
+ //MCD_CS_ENTER;
+ u8* tmpAdd = NULL;
+ MCD_ERR_T value = MCD_ERR_NO;
+
+ //MCD_PROFILE_FUNCTION_ENTER(mcd_Read);
+ assert(g_mcdBlockLen != 0, "mcd_Read called before a successful mcd_Open_V1 or mcd_Open_V2");
+ assert(startAddr % g_mcdBlockLen == 0,
+ "read card address is not aligned");
+ assert((size % g_mcdBlockLen) == 0, "mcd_Read size (%d) is not a multiple of"
+ "the block size (%d)",
+ size, g_mcdBlockLen);
+
+ //printf("mcd_Read\n");
+
+ //if(!mcd_CardDetectUpdateStatus())
+ //{
+ // MCD_PROFILE_FUNCTION_EXIT(mcd_Read);
+ // MCD_CS_EXIT;
+ // return MCD_ERR_NO_CARD;
+ //}
+
+ hal_SdmmcWakeUp();
+ // Addresses are block number for high capacity card
+ if (g_mcdCardIsSdhc)
+ {
+ tmpAdd = (u8*) (startAddr);
+ }
+ else
+ {
+ tmpAdd = (u8*) (startAddr * g_mcdBlockLen);
+ }
+
+ //value = mcd_SdmmcMultBlockRead(tmpAdd, blockRd, size/g_mcdBlockLen);
+ value = mcd_SdmmcMultBlockRead(tmpAdd, blockRd, size >> 9);
+
+ hal_SdmmcSleep();
+
+ //MCD_PROFILE_FUNCTION_EXIT(mcd_Read);
+ //MCD_CS_EXIT;
+ return value;
+
+}
+
+BOOL mcd_IsHighCapacityCard(void)
+{
+ if(g_mcdCardIsSdhc == TRUE)
+ {
+ return TRUE;
+ }
+ return FALSE;
+
+}
+
+static block_dev_desc_t mmc_blk_dev;
+static int initialized = 0;
+
+int mmc_set_dev(int dev_num)
+{
+ return 0;
+}
+
+block_dev_desc_t *mmc_get_dev(int dev)
+{
+ if (initialized)
+ return (block_dev_desc_t *) &mmc_blk_dev;
+ else
+ return NULL;
+}
+
+static unsigned long mmc_bread(int dev_num, unsigned long blknr,
+ lbaint_t blkcnt, void *dst)
+{
+ MCD_ERR_T mcd_ret;
+ int block_size, i;
+
+ block_size = 512;
+
+ printf("\nmmc_bread, %ld blks from %ld, dst = 0x%08lx\n",
+ (u32)blkcnt, blknr, (u32)dst);
+ for (i=0;i<blkcnt;i++) {
+ mcd_ret = mcd_Read(blknr + i,
+ (u8 *)(dst) + i*block_size,
+ block_size);
+ if (mcd_ret != MCD_ERR_NO) {
+ printf("Read SD card Failed\n");
+ return i;
+ }
+ }
+ printf("Done\n");
+
+ return i;
+}
+
+int mmc_legacy_init(int dev)
+{
+ MCD_ERR_T mcd_ret;
+ MCD_CSD_T mcd_csd;
+
+ mcd_ret = mcd_Open(&mcd_csd, MCD_CARD_V2);
+ if (mcd_ret != MCD_ERR_NO) {
+ printf("Open SD card Failed\n");
+ return 1;
+ }
+
+ printf("Open SD card Done\n");
+
+ mmc_blk_dev.if_type = IF_TYPE_MMC;
+ mmc_blk_dev.part_type = PART_TYPE_DOS;
+ mmc_blk_dev.dev = 0;
+ mmc_blk_dev.lun = 0;
+ mmc_blk_dev.type = 0;
+
+ /* FIXME fill in the correct size (is set to 32MByte) */
+ mmc_blk_dev.blksz = 512;
+ mmc_blk_dev.lba = 0x10000;
+ mmc_blk_dev.removable = 0;
+ mmc_blk_dev.block_read = mmc_bread;
+
+#if 0
+ if (fat_register_device(&mmc_blk_dev, 1))
+ printf("Could not register MMC fat device\n");
+#else
+ init_part(&mmc_blk_dev);
+#endif
+
+ initialized = 1;
+ return 0;
+}
+
diff --git a/drivers/mmc/s5p_mmc.c b/drivers/mmc/s5p_mmc.c
deleted file mode 100644
index 4ae3aaf773..0000000000
--- a/drivers/mmc/s5p_mmc.c
+++ /dev/null
@@ -1,490 +0,0 @@
-/*
- * (C) Copyright 2009 SAMSUNG Electronics
- * Minkyu Kang <mk7.kang@samsung.com>
- * Jaehoon Chung <jh80.chung@samsung.com>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-
-#include <common.h>
-#include <mmc.h>
-#include <asm/io.h>
-#include <asm/arch/mmc.h>
-#include <asm/arch/clk.h>
-
-/* support 4 mmc hosts */
-struct mmc mmc_dev[4];
-struct mmc_host mmc_host[4];
-
-static inline struct s5p_mmc *s5p_get_base_mmc(int dev_index)
-{
- unsigned long offset = dev_index * sizeof(struct s5p_mmc);
- return (struct s5p_mmc *)(samsung_get_base_mmc() + offset);
-}
-
-static void mmc_prepare_data(struct mmc_host *host, struct mmc_data *data)
-{
- unsigned char ctrl;
-
- debug("data->dest: %08x\n", (u32)data->dest);
- writel((u32)data->dest, &host->reg->sysad);
- /*
- * DMASEL[4:3]
- * 00 = Selects SDMA
- * 01 = Reserved
- * 10 = Selects 32-bit Address ADMA2
- * 11 = Selects 64-bit Address ADMA2
- */
- ctrl = readb(&host->reg->hostctl);
- ctrl &= ~(3 << 3);
- writeb(ctrl, &host->reg->hostctl);
-
- /* We do not handle DMA boundaries, so set it to max (512 KiB) */
- writew((7 << 12) | (data->blocksize & 0xFFF), &host->reg->blksize);
- writew(data->blocks, &host->reg->blkcnt);
-}
-
-static void mmc_set_transfer_mode(struct mmc_host *host, struct mmc_data *data)
-{
- unsigned short mode;
-
- /*
- * TRNMOD
- * MUL1SIN0[5] : Multi/Single Block Select
- * RD1WT0[4] : Data Transfer Direction Select
- * 1 = read
- * 0 = write
- * ENACMD12[2] : Auto CMD12 Enable
- * ENBLKCNT[1] : Block Count Enable
- * ENDMA[0] : DMA Enable
- */
- mode = (1 << 1) | (1 << 0);
- if (data->blocks > 1)
- mode |= (1 << 5);
- if (data->flags & MMC_DATA_READ)
- mode |= (1 << 4);
-
- writew(mode, &host->reg->trnmod);
-}
-
-static int mmc_send_cmd(struct mmc *mmc, struct mmc_cmd *cmd,
- struct mmc_data *data)
-{
- struct mmc_host *host = (struct mmc_host *)mmc->priv;
- int flags, i;
- unsigned int timeout;
- unsigned int mask;
- unsigned int retry = 0x100000;
-
- /* Wait max 10 ms */
- timeout = 10;
-
- /*
- * PRNSTS
- * CMDINHDAT[1] : Command Inhibit (DAT)
- * CMDINHCMD[0] : Command Inhibit (CMD)
- */
- mask = (1 << 0);
- if ((data != NULL) || (cmd->resp_type & MMC_RSP_BUSY))
- mask |= (1 << 1);
-
- /*
- * We shouldn't wait for data inihibit for stop commands, even
- * though they might use busy signaling
- */
- if (data)
- mask &= ~(1 << 1);
-
- while (readl(&host->reg->prnsts) & mask) {
- if (timeout == 0) {
- printf("%s: timeout error\n", __func__);
- return -1;
- }
- timeout--;
- udelay(1000);
- }
-
- if (data)
- mmc_prepare_data(host, data);
-
- debug("cmd->arg: %08x\n", cmd->cmdarg);
- writel(cmd->cmdarg, &host->reg->argument);
-
- if (data)
- mmc_set_transfer_mode(host, data);
-
- if ((cmd->resp_type & MMC_RSP_136) && (cmd->resp_type & MMC_RSP_BUSY))
- return -1;
-
- /*
- * CMDREG
- * CMDIDX[13:8] : Command index
- * DATAPRNT[5] : Data Present Select
- * ENCMDIDX[4] : Command Index Check Enable
- * ENCMDCRC[3] : Command CRC Check Enable
- * RSPTYP[1:0]
- * 00 = No Response
- * 01 = Length 136
- * 10 = Length 48
- * 11 = Length 48 Check busy after response
- */
- if (!(cmd->resp_type & MMC_RSP_PRESENT))
- flags = 0;
- else if (cmd->resp_type & MMC_RSP_136)
- flags = (1 << 0);
- else if (cmd->resp_type & MMC_RSP_BUSY)
- flags = (3 << 0);
- else
- flags = (2 << 0);
-
- if (cmd->resp_type & MMC_RSP_CRC)
- flags |= (1 << 3);
- if (cmd->resp_type & MMC_RSP_OPCODE)
- flags |= (1 << 4);
- if (data)
- flags |= (1 << 5);
-
- debug("cmd: %d\n", cmd->cmdidx);
-
- writew((cmd->cmdidx << 8) | flags, &host->reg->cmdreg);
-
- for (i = 0; i < retry; i++) {
- mask = readl(&host->reg->norintsts);
- /* Command Complete */
- if (mask & (1 << 0)) {
- if (!data)
- writel(mask, &host->reg->norintsts);
- break;
- }
- }
-
- if (i == retry) {
- printf("%s: waiting for status update\n", __func__);
- return TIMEOUT;
- }
-
- if (mask & (1 << 16)) {
- /* Timeout Error */
- debug("timeout: %08x cmd %d\n", mask, cmd->cmdidx);
- return TIMEOUT;
- } else if (mask & (1 << 15)) {
- /* Error Interrupt */
- debug("error: %08x cmd %d\n", mask, cmd->cmdidx);
- return -1;
- }
-
- if (cmd->resp_type & MMC_RSP_PRESENT) {
- if (cmd->resp_type & MMC_RSP_136) {
- /* CRC is stripped so we need to do some shifting. */
- for (i = 0; i < 4; i++) {
- unsigned int offset =
- (unsigned int)(&host->reg->rspreg3 - i);
- cmd->response[i] = readl(offset) << 8;
-
- if (i != 3) {
- cmd->response[i] |=
- readb(offset - 1);
- }
- debug("cmd->resp[%d]: %08x\n",
- i, cmd->response[i]);
- }
- } else if (cmd->resp_type & MMC_RSP_BUSY) {
- for (i = 0; i < retry; i++) {
- /* PRNTDATA[23:20] : DAT[3:0] Line Signal */
- if (readl(&host->reg->prnsts)
- & (1 << 20)) /* DAT[0] */
- break;
- }
-
- if (i == retry) {
- printf("%s: card is still busy\n", __func__);
- return TIMEOUT;
- }
-
- cmd->response[0] = readl(&host->reg->rspreg0);
- debug("cmd->resp[0]: %08x\n", cmd->response[0]);
- } else {
- cmd->response[0] = readl(&host->reg->rspreg0);
- debug("cmd->resp[0]: %08x\n", cmd->response[0]);
- }
- }
-
- if (data) {
- while (1) {
- mask = readl(&host->reg->norintsts);
-
- if (mask & (1 << 15)) {
- /* Error Interrupt */
- writel(mask, &host->reg->norintsts);
- printf("%s: error during transfer: 0x%08x\n",
- __func__, mask);
- return -1;
- } else if (mask & (1 << 3)) {
- /*
- * DMA Interrupt, restart the transfer where
- * it was interrupted.
- */
- unsigned int address = readl(&host->reg->sysad);
-
- debug("DMA end\n");
- writel((1 << 3), &host->reg->norintsts);
- writel(address, &host->reg->sysad);
- } else if (mask & (1 << 1)) {
- /* Transfer Complete */
- debug("r/w is done\n");
- break;
- }
- }
- writel(mask, &host->reg->norintsts);
- }
-
- udelay(1000);
- return 0;
-}
-
-static void mmc_change_clock(struct mmc_host *host, uint clock)
-{
- int div;
- unsigned short clk;
- unsigned long timeout;
- unsigned long ctrl2;
-
- /*
- * SELBASECLK[5:4]
- * 00/01 = HCLK
- * 10 = EPLL
- * 11 = XTI or XEXTCLK
- */
- ctrl2 = readl(&host->reg->control2);
- ctrl2 &= ~(3 << 4);
- ctrl2 |= (2 << 4);
- writel(ctrl2, &host->reg->control2);
-
- writew(0, &host->reg->clkcon);
-
- /* XXX: we assume that clock is between 40MHz and 50MHz */
- if (clock == 0)
- goto out;
- else if (clock <= 400000)
- div = 0x100;
- else if (clock <= 20000000)
- div = 4;
- else if (clock <= 26000000)
- div = 2;
- else
- div = 1;
- debug("div: %d\n", div);
-
- div >>= 1;
- /*
- * CLKCON
- * SELFREQ[15:8] : base clock divied by value
- * ENSDCLK[2] : SD Clock Enable
- * STBLINTCLK[1] : Internal Clock Stable
- * ENINTCLK[0] : Internal Clock Enable
- */
- clk = (div << 8) | (1 << 0);
- writew(clk, &host->reg->clkcon);
-
- set_mmc_clk(host->dev_index, div);
-
- /* Wait max 10 ms */
- timeout = 10;
- while (!(readw(&host->reg->clkcon) & (1 << 1))) {
- if (timeout == 0) {
- printf("%s: timeout error\n", __func__);
- return;
- }
- timeout--;
- udelay(1000);
- }
-
- clk |= (1 << 2);
- writew(clk, &host->reg->clkcon);
-
-out:
- host->clock = clock;
-}
-
-static void mmc_set_ios(struct mmc *mmc)
-{
- struct mmc_host *host = mmc->priv;
- unsigned char ctrl;
- unsigned long val;
-
- debug("bus_width: %x, clock: %d\n", mmc->bus_width, mmc->clock);
-
- /*
- * SELCLKPADDS[17:16]
- * 00 = 2mA
- * 01 = 4mA
- * 10 = 7mA
- * 11 = 9mA
- */
- writel(0x3 << 16, &host->reg->control4);
-
- val = readl(&host->reg->control2);
- val &= (0x3 << 4);
-
- val |= (1 << 31) | /* write status clear async mode enable */
- (1 << 30) | /* command conflict mask enable */
- (1 << 14) | /* Feedback Clock Enable for Rx Clock */
- (1 << 8); /* SDCLK hold enable */
-
- writel(val, &host->reg->control2);
-
- /*
- * FCSEL1[15] FCSEL0[7]
- * FCSel[1:0] : Rx Feedback Clock Delay Control
- * Inverter delay means10ns delay if SDCLK 50MHz setting
- * 01 = Delay1 (basic delay)
- * 11 = Delay2 (basic delay + 2ns)
- * 00 = Delay3 (inverter delay)
- * 10 = Delay4 (inverter delay + 2ns)
- */
- writel(0x8080, &host->reg->control3);
-
- mmc_change_clock(host, mmc->clock);
-
- ctrl = readb(&host->reg->hostctl);
-
- /*
- * WIDE8[5]
- * 0 = Depend on WIDE4
- * 1 = 8-bit mode
- * WIDE4[1]
- * 1 = 4-bit mode
- * 0 = 1-bit mode
- */
- if (mmc->bus_width == 8)
- ctrl |= (1 << 5);
- else if (mmc->bus_width == 4)
- ctrl |= (1 << 1);
- else
- ctrl &= ~(1 << 1);
-
- /*
- * OUTEDGEINV[2]
- * 1 = Riging edge output
- * 0 = Falling edge output
- */
- ctrl &= ~(1 << 2);
-
- writeb(ctrl, &host->reg->hostctl);
-}
-
-static void mmc_reset(struct mmc_host *host)
-{
- unsigned int timeout;
-
- /*
- * RSTALL[0] : Software reset for all
- * 1 = reset
- * 0 = work
- */
- writeb((1 << 0), &host->reg->swrst);
-
- host->clock = 0;
-
- /* Wait max 100 ms */
- timeout = 100;
-
- /* hw clears the bit when it's done */
- while (readb(&host->reg->swrst) & (1 << 0)) {
- if (timeout == 0) {
- printf("%s: timeout error\n", __func__);
- return;
- }
- timeout--;
- udelay(1000);
- }
-}
-
-static int mmc_core_init(struct mmc *mmc)
-{
- struct mmc_host *host = (struct mmc_host *)mmc->priv;
- unsigned int mask;
-
- mmc_reset(host);
-
- host->version = readw(&host->reg->hcver);
-
- /* mask all */
- writel(0xffffffff, &host->reg->norintstsen);
- writel(0xffffffff, &host->reg->norintsigen);
-
- writeb(0xe, &host->reg->timeoutcon); /* TMCLK * 2^27 */
-
- /*
- * NORMAL Interrupt Status Enable Register init
- * [5] ENSTABUFRDRDY : Buffer Read Ready Status Enable
- * [4] ENSTABUFWTRDY : Buffer write Ready Status Enable
- * [3] ENSTADMAINT : DMA Interrupt Status Enable
- * [1] ENSTASTANSCMPLT : Transfre Complete Status Enable
- * [0] ENSTACMDCMPLT : Command Complete Status Enable
- */
- mask = readl(&host->reg->norintstsen);
- mask &= ~(0xffff);
- mask |= (1 << 5) | (1 << 4) | (1 << 3) | (1 << 1) | (1 << 0);
- writel(mask, &host->reg->norintstsen);
-
- /*
- * NORMAL Interrupt Signal Enable Register init
- * [1] ENSTACMDCMPLT : Transfer Complete Signal Enable
- */
- mask = readl(&host->reg->norintsigen);
- mask &= ~(0xffff);
- mask |= (1 << 1);
- writel(mask, &host->reg->norintsigen);
-
- return 0;
-}
-
-static int s5p_mmc_initialize(int dev_index, int bus_width)
-{
- struct mmc *mmc;
-
- mmc = &mmc_dev[dev_index];
-
- sprintf(mmc->name, "SAMSUNG SD/MMC");
- mmc->priv = &mmc_host[dev_index];
- mmc->send_cmd = mmc_send_cmd;
- mmc->set_ios = mmc_set_ios;
- mmc->init = mmc_core_init;
- mmc->getcd = NULL;
-
- mmc->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
- if (bus_width == 8)
- mmc->host_caps = MMC_MODE_8BIT;
- else
- mmc->host_caps = MMC_MODE_4BIT;
- mmc->host_caps |= MMC_MODE_HS_52MHz | MMC_MODE_HS | MMC_MODE_HC;
-
- mmc->f_min = 400000;
- mmc->f_max = 52000000;
-
- mmc_host[dev_index].dev_index = dev_index;
- mmc_host[dev_index].clock = 0;
- mmc_host[dev_index].reg = s5p_get_base_mmc(dev_index);
- mmc->b_max = 0;
- mmc_register(mmc);
-
- return 0;
-}
-
-int s5p_mmc_init(int dev_index, int bus_width)
-{
- return s5p_mmc_initialize(dev_index, bus_width);
-}
diff --git a/drivers/mmc/s5p_sdhci.c b/drivers/mmc/s5p_sdhci.c
new file mode 100644
index 0000000000..1d4481b974
--- /dev/null
+++ b/drivers/mmc/s5p_sdhci.c
@@ -0,0 +1,98 @@
+/*
+ * (C) Copyright 2012 SAMSUNG Electronics
+ * Jaehoon Chung <jh80.chung@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <sdhci.h>
+#include <asm/arch/mmc.h>
+
+static char *S5P_NAME = "SAMSUNG SDHCI";
+static void s5p_sdhci_set_control_reg(struct sdhci_host *host)
+{
+ unsigned long val, ctrl;
+ /*
+ * SELCLKPADDS[17:16]
+ * 00 = 2mA
+ * 01 = 4mA
+ * 10 = 7mA
+ * 11 = 9mA
+ */
+ sdhci_writel(host, SDHCI_CTRL4_DRIVE_MASK(0x3), SDHCI_CONTROL4);
+
+ val = sdhci_readl(host, SDHCI_CONTROL2);
+ val &= SDHCI_CTRL2_SELBASECLK_SHIFT;
+
+ val |= SDHCI_CTRL2_ENSTAASYNCCLR |
+ SDHCI_CTRL2_ENCMDCNFMSK |
+ SDHCI_CTRL2_ENFBCLKRX |
+ SDHCI_CTRL2_ENCLKOUTHOLD;
+
+ sdhci_writel(host, val, SDHCI_CONTROL2);
+
+ /*
+ * FCSEL3[31] FCSEL2[23] FCSEL1[15] FCSEL0[7]
+ * FCSel[1:0] : Rx Feedback Clock Delay Control
+ * Inverter delay means10ns delay if SDCLK 50MHz setting
+ * 01 = Delay1 (basic delay)
+ * 11 = Delay2 (basic delay + 2ns)
+ * 00 = Delay3 (inverter delay)
+ * 10 = Delay4 (inverter delay + 2ns)
+ */
+ val = SDHCI_CTRL3_FCSEL3 | SDHCI_CTRL3_FCSEL1;
+ sdhci_writel(host, val, SDHCI_CONTROL3);
+
+ /*
+ * SELBASECLK[5:4]
+ * 00/01 = HCLK
+ * 10 = EPLL
+ * 11 = XTI or XEXTCLK
+ */
+ ctrl = sdhci_readl(host, SDHCI_CONTROL2);
+ ctrl &= ~SDHCI_CTRL2_SELBASECLK_MASK(0x3);
+ ctrl |= SDHCI_CTRL2_SELBASECLK_MASK(0x2);
+ sdhci_writel(host, ctrl, SDHCI_CONTROL2);
+}
+
+int s5p_sdhci_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks)
+{
+ struct sdhci_host *host = NULL;
+ host = (struct sdhci_host *)malloc(sizeof(struct sdhci_host));
+ if (!host) {
+ printf("sdhci__host malloc fail!\n");
+ return 1;
+ }
+
+ host->name = S5P_NAME;
+ host->ioaddr = (void *)regbase;
+ host->quirks = quirks;
+
+ host->quirks |= SDHCI_QUIRK_NO_HISPD_BIT | SDHCI_QUIRK_BROKEN_VOLTAGE;
+ host->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
+ if (quirks & SDHCI_QUIRK_REG32_RW)
+ host->version = sdhci_readl(host, SDHCI_HOST_VERSION - 2) >> 16;
+ else
+ host->version = sdhci_readw(host, SDHCI_HOST_VERSION);
+
+ host->set_control_reg = &s5p_sdhci_set_control_reg;
+
+ host->host_caps = MMC_MODE_HC;
+
+ add_sdhci(host, max_clk, min_clk);
+ return 0;
+}
diff --git a/drivers/mmc/sdhci.c b/drivers/mmc/sdhci.c
index fc904b5308..1709643da8 100644
--- a/drivers/mmc/sdhci.c
+++ b/drivers/mmc/sdhci.c
@@ -128,6 +128,7 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
int trans_bytes = 0, is_aligned = 1;
u32 mask, flags, mode;
unsigned int timeout, start_addr = 0;
+ unsigned int retry = 10000;
/* Wait max 10 ms */
timeout = 10;
@@ -210,8 +211,19 @@ int sdhci_send_command(struct mmc *mmc, struct mmc_cmd *cmd,
stat = sdhci_readl(host, SDHCI_INT_STATUS);
if (stat & SDHCI_INT_ERROR)
break;
+ if (--retry == 0)
+ break;
} while ((stat & mask) != mask);
+ if (retry == 0) {
+ if (host->quirks & SDHCI_QUIRK_BROKEN_R1B)
+ return 0;
+ else {
+ printf("Timeout for status update!\n");
+ return TIMEOUT;
+ }
+ }
+
if ((stat & (SDHCI_INT_ERROR | mask)) == mask) {
sdhci_cmd_done(host, cmd);
sdhci_writel(host, mask, SDHCI_INT_STATUS);
@@ -325,6 +337,9 @@ void sdhci_set_ios(struct mmc *mmc)
u32 ctrl;
struct sdhci_host *host = (struct sdhci_host *)mmc->priv;
+ if (host->set_control_reg)
+ host->set_control_reg(host);
+
if (mmc->clock != host->clock)
sdhci_set_clock(mmc, mmc->clock);
@@ -348,6 +363,9 @@ void sdhci_set_ios(struct mmc *mmc)
else
ctrl &= ~SDHCI_CTRL_HISPD;
+ if (host->quirks & SDHCI_QUIRK_NO_HISPD_BIT)
+ ctrl &= ~SDHCI_CTRL_HISPD;
+
sdhci_writeb(host, ctrl, SDHCI_HOST_CONTROL);
}
@@ -431,9 +449,15 @@ int add_sdhci(struct sdhci_host *host, u32 max_clk, u32 min_clk)
mmc->voltages |= MMC_VDD_29_30 | MMC_VDD_30_31;
if (caps & SDHCI_CAN_VDD_180)
mmc->voltages |= MMC_VDD_165_195;
+
+ if (host->quirks & SDHCI_QUIRK_BROKEN_VOLTAGE)
+ mmc->voltages |= host->voltages;
+
mmc->host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz | MMC_MODE_4BIT;
if (caps & SDHCI_CAN_DO_8BIT)
mmc->host_caps |= MMC_MODE_8BIT;
+ if (host->host_caps)
+ mmc->host_caps |= host->host_caps;
sdhci_reset(host, SDHCI_RESET_ALL);
mmc_register(mmc);
diff --git a/drivers/mtd/mtdconcat.c b/drivers/mtd/mtdconcat.c
index fc2270127a..a4b8728cde 100644
--- a/drivers/mtd/mtdconcat.c
+++ b/drivers/mtd/mtdconcat.c
@@ -9,7 +9,7 @@
*/
#include <linux/mtd/mtd.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/concat.h>
#include <ubi_uboot.h>
@@ -289,6 +289,7 @@ static int concat_dev_erase(struct mtd_info *mtd, struct erase_info *erase)
static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
{
struct mtd_concat *concat = CONCAT(mtd);
+ struct nand_chip *chip = concat->mtd.priv;
struct mtd_info *subdev;
int i, err;
uint64_t length, offset = 0;
@@ -311,10 +312,19 @@ static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
*/
if (!concat->mtd.numeraseregions) {
/* the easy case: device has uniform erase block size */
- if (instr->addr & (concat->mtd.erasesize - 1))
- return -EINVAL;
- if (instr->len & (concat->mtd.erasesize - 1))
- return -EINVAL;
+ if (chip->phys_erase_shift == 0) {
+ if(mtd_mod_by_eb(instr->addr, &concat->mtd))
+ return -EINVAL;
+
+ if (mtd_mod_by_eb(instr->len, &concat->mtd))
+ return -EINVAL;
+ } else {
+ if (instr->addr & (concat->mtd.erasesize - 1))
+ return -EINVAL;
+
+ if (instr->len & (concat->mtd.erasesize - 1))
+ return -EINVAL;
+ }
} else {
/* device has variable erase size */
struct mtd_erase_region_info *erase_regions =
@@ -332,8 +342,13 @@ static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
* to-be-erased area begins. Verify that the starting
* offset is aligned to this region's erase size:
*/
- if (instr->addr & (erase_regions[i].erasesize - 1))
- return -EINVAL;
+ if (is_power_of_2(erase_regions[i].erasesize)){
+ if (instr->addr & (erase_regions[i].erasesize - 1))
+ return -EINVAL;
+ } else {
+ if (mtd_mod_by_var(instr->addr, erase_regions[i].erasesize))
+ return -EINVAL;
+ }
/*
* now find the erase region where the to-be-erased area ends:
@@ -345,9 +360,13 @@ static int concat_erase(struct mtd_info *mtd, struct erase_info *instr)
/*
* check if the ending offset is aligned to this region's erase size
*/
- if ((instr->addr + instr->len) & (erase_regions[i].erasesize -
- 1))
- return -EINVAL;
+ if (is_power_of_2(erase_regions[i].erasesize)){
+ if ((instr->addr + instr->len) & (erase_regions[i].erasesize - 1))
+ return -EINVAL;
+ } else {
+ if (mtd_mod_by_var((instr->addr + instr->len), erase_regions[i].erasesize))
+ return -EINVAL;
+ }
}
instr->fail_addr = MTD_FAIL_ADDR_UNKNOWN;
diff --git a/drivers/mtd/mtdcore.c b/drivers/mtd/mtdcore.c
index a195ddab35..fb35596175 100644
--- a/drivers/mtd/mtdcore.c
+++ b/drivers/mtd/mtdcore.c
@@ -8,7 +8,7 @@
*/
#include <linux/mtd/mtd.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <ubi_uboot.h>
struct mtd_info *mtd_table[MAX_MTD_DEVICES];
@@ -161,6 +161,7 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
{
*truncated = 0;
*len_incl_bad = 0;
+ struct nand_chip *chip = mtd->priv;
if (!mtd->block_isbad) {
*len_incl_bad = length;
@@ -176,10 +177,17 @@ void mtd_get_len_incl_bad(struct mtd_info *mtd, uint64_t offset,
return;
}
- block_len = mtd->erasesize - (offset & (mtd->erasesize - 1));
+ if (chip->phys_erase_shift == 0){
+ block_len = mtd->erasesize - mtd_mod_by_eb(offset, mtd);
- if (!mtd->block_isbad(mtd, offset & ~(mtd->erasesize - 1)))
- len_excl_bad += block_len;
+ if (!mtd->block_isbad(mtd, mtd_div_by_eb(offset, mtd)*mtd->erasesize))
+ len_excl_bad += block_len;
+ } else {
+ block_len = mtd->erasesize - (offset & (mtd->erasesize - 1));
+
+ if (!mtd->block_isbad(mtd, offset & ~(mtd->erasesize - 1)))
+ len_excl_bad += block_len;
+ }
*len_incl_bad += block_len;
offset += block_len;
diff --git a/drivers/mtd/mtdpart.c b/drivers/mtd/mtdpart.c
index f647e43668..96dcda2b2b 100644
--- a/drivers/mtd/mtdpart.c
+++ b/drivers/mtd/mtdpart.c
@@ -17,7 +17,7 @@
#include <linux/list.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
/* Our partition linked list */
struct list_head mtd_partitions;
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
index 1d1b628651..b9e683cdcb 100644
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
@@ -63,6 +63,7 @@ COBJS-$(CONFIG_NAND_S3C64XX) += s3c64xx.o
COBJS-$(CONFIG_NAND_SPEAR) += spr_nand.o
COBJS-$(CONFIG_NAND_OMAP_GPMC) += omap_gpmc.o
COBJS-$(CONFIG_NAND_PLAT) += nand_plat.o
+COBJS-$(CONFIG_NAND_RDA) += rda_nand.o rda_spi_nand.o rda_nand_base.o
endif
COBJS := $(COBJS-y)
diff --git a/drivers/mtd/nand/fsl_ifc_nand.c b/drivers/mtd/nand/fsl_ifc_nand.c
index 5cac78b296..b3b7c705e1 100644
--- a/drivers/mtd/nand/fsl_ifc_nand.c
+++ b/drivers/mtd/nand/fsl_ifc_nand.c
@@ -384,19 +384,30 @@ static void fsl_ifc_cmdfunc(struct mtd_info *mtd, unsigned int command,
/* READID must read all possible bytes while CEB is active */
case NAND_CMD_READID:
+ case NAND_CMD_PARAM: {
+ int timing = IFC_FIR_OP_RB;
+ if (command == NAND_CMD_PARAM)
+ timing = IFC_FIR_OP_RBCD;
+
out_be32(&ifc->ifc_nand.nand_fir0,
(IFC_FIR_OP_CMD0 << IFC_NAND_FIR0_OP0_SHIFT) |
(IFC_FIR_OP_UA << IFC_NAND_FIR0_OP1_SHIFT) |
- (IFC_FIR_OP_RB << IFC_NAND_FIR0_OP2_SHIFT));
+ (timing << IFC_NAND_FIR0_OP2_SHIFT));
out_be32(&ifc->ifc_nand.nand_fcr0,
- NAND_CMD_READID << IFC_NAND_FCR0_CMD0_SHIFT);
- /* 4 bytes for manuf, device and exts */
- out_be32(&ifc->ifc_nand.nand_fbcr, 4);
- ctrl->read_bytes = 4;
+ command << IFC_NAND_FCR0_CMD0_SHIFT);
+ out_be32(&ifc->ifc_nand.row3, column);
+
+ /*
+ * although currently it's 8 bytes for READID, we always read
+ * the maximum 256 bytes(for PARAM)
+ */
+ out_be32(&ifc->ifc_nand.nand_fbcr, 256);
+ ctrl->read_bytes = 256;
set_addr(mtd, 0, 0, 0);
fsl_ifc_run_command(mtd);
return;
+ }
/* ERASE1 stores the block and page address */
case NAND_CMD_ERASE1:
@@ -764,6 +775,7 @@ int board_nand_init(struct nand_chip *nand)
if (priv->bank >= MAX_BANKS) {
printf("%s: address did not match any "
"chip selects\n", __func__);
+ kfree(priv);
return -ENODEV;
}
diff --git a/drivers/mtd/nand/mpc5121_nfc.c b/drivers/mtd/nand/mpc5121_nfc.c
index 7fd8a35479..e6b7a70661 100644
--- a/drivers/mtd/nand/mpc5121_nfc.c
+++ b/drivers/mtd/nand/mpc5121_nfc.c
@@ -29,7 +29,7 @@
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <asm/errno.h>
#include <asm/io.h>
diff --git a/drivers/mtd/nand/mxc_nand.c b/drivers/mtd/nand/mxc_nand.c
index 35e89a0f4d..936186f75e 100644
--- a/drivers/mtd/nand/mxc_nand.c
+++ b/drivers/mtd/nand/mxc_nand.c
@@ -1302,12 +1302,45 @@ static void mxc_setup_config1(void)
#define mxc_setup_config1()
#endif
+#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
+
+static u8 bbt_pattern[] = {'B', 'b', 't', '0' };
+static u8 mirror_pattern[] = {'1', 't', 'b', 'B' };
+
+static struct nand_bbt_descr bbt_main_descr = {
+ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
+ NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
+ .offs = 0,
+ .len = 4,
+ .veroffs = 4,
+ .maxblocks = 4,
+ .pattern = bbt_pattern,
+};
+
+static struct nand_bbt_descr bbt_mirror_descr = {
+ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE |
+ NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
+ .offs = 0,
+ .len = 4,
+ .veroffs = 4,
+ .maxblocks = 4,
+ .pattern = mirror_pattern,
+};
+
+#endif
+
int board_nand_init(struct nand_chip *this)
{
struct mtd_info *mtd;
uint16_t tmp;
int err = 0;
+#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
+ this->options |= NAND_USE_FLASH_BBT;
+ this->bbt_td = &bbt_main_descr;
+ this->bbt_md = &bbt_mirror_descr;
+#endif
+
/* structures must be linked */
mtd = &host->mtd;
mtd->priv = this;
diff --git a/drivers/mtd/nand/nand_base.c b/drivers/mtd/nand/nand_base.c
index 44f7b91457..d293f71d3f 100644
--- a/drivers/mtd/nand/nand_base.c
+++ b/drivers/mtd/nand/nand_base.c
@@ -39,7 +39,7 @@
#include <malloc.h>
#include <watchdog.h>
#include <linux/err.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
@@ -79,7 +79,7 @@ static struct nand_ecclayout nand_oob_16 = {
.eccpos = {0, 1, 2, 3, 6, 7},
.oobfree = {
{.offset = 8,
- . length = 8} }
+ .length = 8} }
};
static struct nand_ecclayout nand_oob_64 = {
@@ -122,16 +122,31 @@ static int check_offs_len(struct mtd_info *mtd,
int ret = 0;
/* Start address must align on block boundary */
- if (ofs & ((1 << chip->phys_erase_shift) - 1)) {
- MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Unaligned address\n", __func__);
- ret = -EINVAL;
+ if (chip->phys_erase_shift == 0) {
+ if (mtd_mod_by_eb(ofs, mtd)) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Unaligned address\n", __func__);
+ ret = -EINVAL;
+ }
+ } else {
+ if (ofs & ((1 << chip->phys_erase_shift) - 1)) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Unaligned address\n", __func__);
+ ret = -EINVAL;
+ }
}
/* Length must align on block boundary */
- if (len & ((1 << chip->phys_erase_shift) - 1)) {
- MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Length not block aligned\n",
+ if (chip->phys_erase_shift == 0) {
+ if (mtd_mod_by_eb(len, mtd)) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Length not block aligned\n",
__func__);
- ret = -EINVAL;
+ ret = -EINVAL;
+ }
+ } else {
+ if (len & ((1 << chip->phys_erase_shift) - 1)) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Length not block aligned\n",
+ __func__);
+ ret = -EINVAL;
+ }
}
/* Do not allow past end of device */
@@ -350,10 +365,16 @@ static int nand_block_bad(struct mtd_info *mtd, loff_t ofs, int getchip)
if (chip->options & NAND_BBT_SCANLASTPAGE)
ofs += mtd->erasesize - mtd->writesize;
- page = (int)(ofs >> chip->page_shift) & chip->pagemask;
+ if ( chip->page_shift == 0)
+ page = mtd_div_by_ws(ofs, mtd) & chip->pagemask;
+ else
+ page = (int)(ofs >> chip->page_shift) & chip->pagemask;
if (getchip) {
- chipnr = (int)(ofs >> chip->chip_shift);
+ if (chip->chip_shift == 0)
+ chipnr = mtd_div_by_cs(ofs, mtd);
+ else
+ chipnr = (int)(ofs >> chip->chip_shift);
nand_get_device(chip, mtd, FL_READING);
@@ -403,7 +424,11 @@ static int nand_default_block_markbad(struct mtd_info *mtd, loff_t ofs)
ofs += mtd->erasesize - mtd->writesize;
/* Get block number */
- block = (int)(ofs >> chip->bbt_erase_shift);
+ if (chip->bbt_erase_shift == 0)
+ block = mtd_div_by_eb(ofs, mtd);
+ else
+ block = (int)(ofs >> chip->bbt_erase_shift);
+
if (chip->bbt)
chip->bbt[block >> 2] |= 0x01 << ((block & 0x03) << 1);
@@ -1200,10 +1225,9 @@ static uint8_t *nand_transfer_oob(struct nand_chip *chip, uint8_t *oob,
static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
struct mtd_oob_ops *ops)
{
- int chipnr, page, realpage, col, bytes, aligned;
+ int chipnr, page, realpage, col, bytes, aligned, blkcheck;
struct nand_chip *chip = mtd->priv;
struct mtd_ecc_stats stats;
- int blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
int sndcmd = 1;
int ret = 0;
uint32_t readlen = ops->len;
@@ -1213,15 +1237,30 @@ static int nand_do_read_ops(struct mtd_info *mtd, loff_t from,
uint8_t *bufpoi, *oob, *buf;
+ if (chip->phys_erase_shift == 0 || chip->page_shift == 0)
+ blkcheck = mtd_div_by_ws(mtd->erasesize, mtd) - 1;
+ else
+ blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
+
stats = mtd->ecc_stats;
+ if (chip->chip_shift == 0)
+ chipnr = mtd_div_by_cs(from, mtd);
+ else
+ chipnr = (int)(from >> chip->chip_shift);
- chipnr = (int)(from >> chip->chip_shift);
chip->select_chip(mtd, chipnr);
- realpage = (int)(from >> chip->page_shift);
+ if (chip->page_shift == 0)
+ realpage = mtd_div_by_ws(from, mtd);
+ else
+ realpage = (int)(from >> chip->page_shift);
+
page = realpage & chip->pagemask;
- col = (int)(from & (mtd->writesize - 1));
+ if (chip->page_shift == 0)
+ col = mtd_mod_by_ws(from, mtd);
+ else
+ col = (int)(from & (mtd->writesize - 1));
buf = ops->datbuf;
oob = ops->oobbuf;
@@ -1518,13 +1557,18 @@ static int nand_write_oob_syndrome(struct mtd_info *mtd,
static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
struct mtd_oob_ops *ops)
{
- int page, realpage, chipnr, sndcmd = 1;
+ int page, realpage, chipnr, sndcmd = 1, blkcheck;
struct nand_chip *chip = mtd->priv;
- int blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
+
int readlen = ops->ooblen;
int len;
uint8_t *buf = ops->oobbuf;
+ if (chip->phys_erase_shift == 0 ||chip->page_shift == 0)
+ blkcheck = (mtd->erasesize / mtd->writesize) - 1;
+ else
+ blkcheck = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
+
MTDDEBUG(MTD_DEBUG_LEVEL3, "%s: from = 0x%08Lx, len = %i\n",
__func__, (unsigned long long)from, readlen);
@@ -1539,20 +1583,38 @@ static int nand_do_read_oob(struct mtd_info *mtd, loff_t from,
return -EINVAL;
}
- /* Do not allow reads past end of device */
- if (unlikely(from >= mtd->size ||
+ if (chip->page_shift == 0 || chip->chip_shift == 0) {
+ /* Do not allow reads past end of device */
+ if (unlikely(from >= mtd->size ||
+ ops->ooboffs + readlen > (mtd_div_by_ws(mtd->size, mtd) -
+ mtd_div_by_ws(from, mtd)) * len)) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt read beyond end "
+ "of device\n", __func__);
+ return -EINVAL;
+ }
+
+ chipnr = mtd_div_by_cs(from, mtd);
+ chip->select_chip(mtd, chipnr);
+
+ /* Shift to get page */
+ realpage = mtd_div_by_ws(from, mtd);
+ } else {
+ /* Do not allow reads past end of device */
+ if (unlikely(from >= mtd->size ||
ops->ooboffs + readlen > ((mtd->size >> chip->page_shift) -
(from >> chip->page_shift)) * len)) {
- MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt read beyond end "
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt read beyond end "
"of device\n", __func__);
- return -EINVAL;
- }
+ return -EINVAL;
+ }
- chipnr = (int)(from >> chip->chip_shift);
- chip->select_chip(mtd, chipnr);
+ chipnr = (int)(from >> chip->chip_shift);
+ chip->select_chip(mtd, chipnr);
+
+ /* Shift to get page */
+ realpage = (int)(from >> chip->page_shift);
+ }
- /* Shift to get page */
- realpage = (int)(from >> chip->page_shift);
page = realpage & chip->pagemask;
while (1) {
@@ -1903,7 +1965,7 @@ static uint8_t *nand_fill_oob(struct nand_chip *chip, uint8_t *oob, size_t len,
return NULL;
}
-#define NOTALIGNED(x) ((x & (chip->subpagesize - 1)) != 0)
+#define NOTALIGNED(x) ((x % chip->subpagesize) != 0)
/**
* nand_do_write_ops - [Internal] NAND write with ECC
@@ -1932,13 +1994,22 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
if (!writelen)
return 0;
- column = to & (mtd->writesize - 1);
- subpage = column || (writelen & (mtd->writesize - 1));
+ if (chip->page_shift == 0) {
+ column = mtd_mod_by_ws(to, mtd);
+ subpage = column || mtd_mod_by_ws(writelen, mtd);
+ } else {
+ column = to & (mtd->writesize - 1);
+ subpage = column || (writelen & (mtd->writesize - 1));
+ }
if (subpage && oob)
return -EINVAL;
- chipnr = (int)(to >> chip->chip_shift);
+ if (chip->chip_shift == 0)
+ chipnr = mtd_div_by_cs(to, mtd);
+ else
+ chipnr = (int)(to >> chip->chip_shift);
+
chip->select_chip(mtd, chipnr);
/* Check, if it is write protected */
@@ -1947,14 +2018,25 @@ static int nand_do_write_ops(struct mtd_info *mtd, loff_t to,
return -EIO;
}
- realpage = (int)(to >> chip->page_shift);
- page = realpage & chip->pagemask;
- blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
+ if (chip->page_shift == 0 || chip->phys_erase_shift == 0) {
+ realpage = mtd_div_by_ws(to, mtd);
+ page = realpage & chip->pagemask;
+ blockmask = mtd->erasesize / mtd->writesize - 1;
- /* Invalidate the page cache, when we write to the cached page */
- if (to <= (chip->pagebuf << chip->page_shift) &&
- (chip->pagebuf << chip->page_shift) < (to + ops->len))
- chip->pagebuf = -1;
+ /* Invalidate the page cache, when we write to the cached page */
+ if (to <= chip->pagebuf * mtd->writesize &&
+ chip->pagebuf *mtd->writesize < (to + ops->len))
+ chip->pagebuf = -1;
+ } else {
+ realpage = (int)(to >> chip->page_shift);
+ page = realpage & chip->pagemask;
+ blockmask = (1 << (chip->phys_erase_shift - chip->page_shift)) - 1;
+
+ /* Invalidate the page cache, when we write to the cached page */
+ if (to <= (chip->pagebuf << chip->page_shift) &&
+ (chip->pagebuf << chip->page_shift) < (to + ops->len))
+ chip->pagebuf = -1;
+ }
/* If we're not given explicit OOB data, let it be 0xFF */
if (likely(!oob))
@@ -2087,21 +2169,39 @@ static int nand_do_write_oob(struct mtd_info *mtd, loff_t to,
return -EINVAL;
}
- /* Do not allow write past end of device */
- if (unlikely(to >= mtd->size ||
+ if (chip->page_shift == 0 ||chip->chip_shift == 0) {
+ /* Do not allow write past end of device */
+ if (unlikely(to >= mtd->size ||
+ ops->ooboffs + ops->ooblen >
+ (mtd_div_by_ws(mtd->size, mtd) -
+ mtd_div_by_ws(to, mtd)) * len)) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt write beyond "
+ "end of device\n", __func__);
+ return -EINVAL;
+ }
+
+ chipnr = mtd_div_by_cs(to, mtd);
+ chip->select_chip(mtd, chipnr);
+
+ /* Shift to get page */
+ page = mtd_div_by_ws(to, mtd);
+ } else {
+ /* Do not allow write past end of device */
+ if (unlikely(to >= mtd->size ||
ops->ooboffs + ops->ooblen >
((mtd->size >> chip->page_shift) -
(to >> chip->page_shift)) * len)) {
- MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt write beyond "
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Attempt write beyond "
"end of device\n", __func__);
- return -EINVAL;
- }
+ return -EINVAL;
+ }
- chipnr = (int)(to >> chip->chip_shift);
- chip->select_chip(mtd, chipnr);
+ chipnr = (int)(to >> chip->chip_shift);
+ chip->select_chip(mtd, chipnr);
- /* Shift to get page */
- page = (int)(to >> chip->page_shift);
+ /* Shift to get page */
+ page = (int)(to >> chip->page_shift);
+ }
/*
* Reset the chip. Some chips (like the Toshiba TC5832DC found in one
@@ -2251,12 +2351,20 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
/* Grab the lock and see if the device is available */
nand_get_device(chip, mtd, FL_ERASING);
- /* Shift to get first page */
- page = (int)(instr->addr >> chip->page_shift);
- chipnr = (int)(instr->addr >> chip->chip_shift);
+ if (chip->page_shift == 0 ||chip->chip_shift == 0) {
+ /* Shift to get first page */
+ page = mtd_div_by_ws(instr->addr, mtd);
+ chipnr = mtd_div_by_cs(instr->addr, mtd);
- /* Calculate pages in each block */
- pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
+ /* Calculate pages in each block */
+ pages_per_block = mtd->erasesize / mtd->writesize;
+ } else {
+ page = (int)(instr->addr >> chip->page_shift);
+ chipnr = (int)(instr->addr >> chip->chip_shift);
+
+ /* Calculate pages in each block */
+ pages_per_block = 1 << (chip->phys_erase_shift - chip->page_shift);
+ }
/* Select the NAND device */
chip->select_chip(mtd, chipnr);
@@ -2288,13 +2396,23 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
/*
* heck if we have a bad block, we do not erase bad blocks !
*/
- if (!instr->scrub && nand_block_checkbad(mtd, ((loff_t) page) <<
+ if (chip->page_shift == 0) {
+ if (!instr->scrub && nand_block_checkbad(mtd, (loff_t)page *
+ mtd->writesize, 0, allowbbt)) {
+ printk(KERN_WARNING "%s: attempt to erase a bad block "
+ "at page 0x%08x\n", __func__, page);
+ instr->state = MTD_ERASE_FAILED;
+ goto erase_exit;
+ }
+ } else {
+ if (!instr->scrub && nand_block_checkbad(mtd, ((loff_t) page) <<
chip->page_shift, 0, allowbbt)) {
- printk(KERN_WARNING "%s: attempt to erase a bad block "
+ printk(KERN_WARNING "%s: attempt to erase a bad block "
"at page 0x%08x\n", __func__, page);
- instr->state = MTD_ERASE_FAILED;
- goto erase_exit;
- }
+ instr->state = MTD_ERASE_FAILED;
+ goto erase_exit;
+ }
+ }
/*
* Invalidate the page cache, if we erase the block which
@@ -2317,26 +2435,44 @@ int nand_erase_nand(struct mtd_info *mtd, struct erase_info *instr,
status, page);
/* See if block erase succeeded */
- if (status & NAND_STATUS_FAIL) {
- MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Failed erase, "
- "page 0x%08x\n", __func__, page);
- instr->state = MTD_ERASE_FAILED;
- instr->fail_addr =
- ((loff_t)page << chip->page_shift);
- goto erase_exit;
+ if (chip->page_shift == 0) {
+ if (status & NAND_STATUS_FAIL) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Failed erase, "
+ "page 0x%08x\n", __func__, page);
+ instr->state = MTD_ERASE_FAILED;
+ instr->fail_addr = (loff_t)page * mtd->writesize;
+ goto erase_exit;
+ }
+ } else {
+ if (status & NAND_STATUS_FAIL) {
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "%s: Failed erase, "
+ "page 0x%08x\n", __func__, page);
+ instr->state = MTD_ERASE_FAILED;
+ instr->fail_addr = ((loff_t)page << chip->page_shift);
+ goto erase_exit;
+ }
}
/*
* If BBT requires refresh, set the BBT rewrite flag to the
* page being erased
*/
- if (bbt_masked_page != 0xffffffff &&
- (page & BBT_PAGE_MASK) == bbt_masked_page)
- rewrite_bbt[chipnr] =
- ((loff_t)page << chip->page_shift);
+ if (chip->page_shift == 0) {
+ if (bbt_masked_page != 0xffffffff &&
+ (page & BBT_PAGE_MASK) == bbt_masked_page)
+ rewrite_bbt[chipnr] = (loff_t)page * mtd->writesize;
+ } else {
+ if (bbt_masked_page != 0xffffffff &&
+ (page & BBT_PAGE_MASK) == bbt_masked_page)
+ rewrite_bbt[chipnr] = ((loff_t)page << chip->page_shift);
+ }
/* Increment page address and decrement length */
- len -= (1 << chip->phys_erase_shift);
+ if (chip->phys_erase_shift == 0)
+ len -= mtd->erasesize;
+ else
+ len -= (1 << chip->phys_erase_shift);
+
page += pages_per_block;
/* Check, if we cross a chip boundary */
@@ -2530,13 +2666,14 @@ static int nand_flash_detect_onfi(struct mtd_info *mtd, struct nand_chip *chip,
chip->read_byte(mtd) != 'F' || chip->read_byte(mtd) != 'I')
return 0;
- printk(KERN_INFO "ONFI flash detected\n");
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "ONFI flash detected\n");
chip->cmdfunc(mtd, NAND_CMD_PARAM, 0, -1);
for (i = 0; i < 3; i++) {
chip->read_buf(mtd, (uint8_t *)p, sizeof(*p));
if (onfi_crc16(ONFI_CRC_BASE, (uint8_t *)p, 254) ==
le16_to_cpu(p->crc)) {
- printk(KERN_INFO "ONFI param page %d valid\n", i);
+ MTDDEBUG(MTD_DEBUG_LEVEL0,
+ "ONFI param page %d valid\n", i);
break;
}
}
@@ -2732,10 +2869,14 @@ static const struct nand_flash_dev *nand_get_flash_type(struct mtd_info *mtd,
/*
* Old devices have chip data hardcoded in the device id table
*/
- mtd->erasesize = type->erasesize;
- mtd->writesize = type->pagesize;
- mtd->oobsize = mtd->writesize / 32;
- busw = type->options & NAND_BUSWIDTH_16;
+ if(chip->init_size) {
+ busw = chip->init_size(mtd, chip, id_data);
+ } else {
+ mtd->erasesize = type->erasesize;
+ mtd->writesize = type->pagesize;
+ mtd->oobsize = mtd->writesize / 32;
+ busw = type->options & NAND_BUSWIDTH_16;
+ }
/*
* Check for Spansion/AMD ID + repeating 5th, 6th byte since
@@ -2786,18 +2927,57 @@ ident_done:
return ERR_PTR(-EINVAL);
}
- /* Calculate the address shift from the page size */
- chip->page_shift = ffs(mtd->writesize) - 1;
- /* Convert chipsize to number of pages per chip -1. */
- chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
+ if (is_power_of_2(mtd->writesize)) {
+ /* Calculate the address shift from the page size */
+ chip->page_shift = ffs(mtd->writesize) - 1;
+ /* Convert chipsize to number of pages per chip -1. */
+ if (mtd->erasesize == 0x300000) {
+ /*page 0x180 ~ 0x1ff are invalid, so need skip to next block.*/
+ chip->pagemask = 0xffffffff;
+ } else {
+ chip->pagemask = (chip->chipsize >> chip->page_shift) - 1;
+ }
+ } else {
+ chip->page_shift = 0;
+ if (mtd->erasesize == 0x300000) {
+ /*page 0x180 ~ 0x1ff are invalid, so need skip to next block.*/
+ chip->pagemask = 0xffffffff;
+ } else {
+ chip->pagemask = mtd_div_by_ws(chip->chipsize , mtd) - 1;
+ }
+ }
+
+ if (is_power_of_2(mtd->erasesize))
+ chip->bbt_erase_shift = chip->phys_erase_shift = ffs(mtd->erasesize) - 1;
+ else
+ chip->bbt_erase_shift = chip->phys_erase_shift = 0;
+
+ if(chip->chipsize >> 32){
+ //assume the chipsize is not out of 4096TB(4*1024*1024*GB)
+ //4096TB is 52bits.
+ if(is_power_of_2(chip->chipsize >> 20)){
+ chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
+ chip->chip_shift += 32 - 1;
+ }else{
+ chip->chip_shift = 0;
+ }
+ } else {
+ if (is_power_of_2(chip->chipsize)) {
+ chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
+ }else{
+ chip->chip_shift = 0;
+ }
+ }
+
+ printf("nand page_shift = 0x%x, erase_shift = 0x%x, chip_shift = 0x%x \n", chip->page_shift, chip->bbt_erase_shift, chip->chip_shift);
- chip->bbt_erase_shift = chip->phys_erase_shift =
- ffs(mtd->erasesize) - 1;
- if (chip->chipsize & 0xffffffff)
- chip->chip_shift = ffs((unsigned)chip->chipsize) - 1;
- else {
- chip->chip_shift = ffs((unsigned)(chip->chipsize >> 32));
- chip->chip_shift += 32 - 1;
+ if (mtd->oobsize != 32 && mtd->oobsize != 16) {
+ if (mtd->writesize == 3072)
+ mtd->oobsize = 128;
+ else if (mtd->writesize == 6144)
+ mtd->oobsize = 256;
+ else if (mtd->writesize == 12288)
+ mtd->oobsize = 512;
}
chip->badblockbits = 8;
diff --git a/drivers/mtd/nand/nand_bbt.c b/drivers/mtd/nand/nand_bbt.c
index 2b730e09c9..74d4fb9a73 100644
--- a/drivers/mtd/nand/nand_bbt.c
+++ b/drivers/mtd/nand/nand_bbt.c
@@ -61,7 +61,7 @@
#include <common.h>
#include <malloc.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
#include <linux/mtd/nand_ecc.h>
@@ -210,7 +210,7 @@ static u32 add_marker_len(struct nand_bbt_descr *td)
*
*/
static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num,
- struct nand_bbt_descr *td, int offs)
+ struct nand_bbt_descr *td, loff_t offs)
{
int res, i, j, act = 0;
struct nand_chip *this = mtd->priv;
@@ -223,10 +223,17 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num,
totlen = (num * bits) >> 3;
marker_len = add_marker_len(td);
- from = ((loff_t) page) << this->page_shift;
+ if (this->page_shift == 0)
+ from = (loff_t)page * mtd->writesize;
+ else
+ from = ((loff_t) page) << this->page_shift;
while (totlen) {
- len = min(totlen, (size_t) (1 << this->bbt_erase_shift));
+ if (this->bbt_erase_shift == 0)
+ len = min(totlen, mtd->erasesize);
+ else
+ len = min(totlen, (size_t) (1 << this->bbt_erase_shift));
+
if (marker_len) {
/*
* In case the BBT marker is not in the OOB area it
@@ -253,16 +260,29 @@ static int read_bbt(struct mtd_info *mtd, uint8_t *buf, int page, int num,
if (tmp == msk)
continue;
if (reserved_block_code && (tmp == reserved_block_code)) {
- printk(KERN_DEBUG "nand_read_bbt: Reserved block at 0x%012llx\n",
- (loff_t)((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ if (this->bbt_erase_shift == 0)
+ printk(KERN_DEBUG "nand_read_bbt: " \
+ "Reserved block at 0x%012llx\n",
+ (loff_t)((offs << 2) + (act >> 1)) * mtd->erasesize);
+ else
+ printk(KERN_DEBUG "nand_read_bbt: " \
+ "Reserved block at 0x%012llx\n",
+ (loff_t)((offs << 2) + (act >> 1)) <<
+ this->bbt_erase_shift);
+
this->bbt[offs + (act >> 3)] |= 0x2 << (act & 0x06);
mtd->ecc_stats.bbtblocks++;
continue;
}
- /* Leave it for now, if its matured we can move this
- * message to MTD_DEBUG_LEVEL0 */
- printk(KERN_DEBUG "nand_read_bbt: Bad block at 0x%012llx\n",
- (loff_t)((offs << 2) + (act >> 1)) << this->bbt_erase_shift);
+ if (this->bbt_erase_shift == 0)
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "nand_read_bbt: " \
+ "Bad block at 0x%012llx\n",
+ (loff_t)((offs << 2) + (act >> 1)) * mtd->erasesize);
+ else
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "nand_read_bbt: " \
+ "Bad block at 0x%012llx\n",
+ (loff_t)((offs << 2) + (act >> 1))
+ << this->bbt_erase_shift);
/* Factory marked bad or worn out ? */
if (tmp == 0)
this->bbt[offs + (act >> 3)] |= 0x3 << (act & 0x06);
@@ -294,19 +314,34 @@ static int read_abs_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_desc
int res = 0, i;
if (td->options & NAND_BBT_PERCHIP) {
- int offs = 0;
+ loff_t offs = 0;
for (i = 0; i < this->numchips; i++) {
- if (chip == -1 || chip == i)
- res = read_bbt(mtd, buf, td->pages[i],
+ if (chip == -1 || chip == i) {
+ if (this->bbt_erase_shift == 0) {
+ res = read_bbt(mtd, buf, td->pages[i],
+ mtd_div_by_eb(this->chipsize, mtd),
+ td, offs);
+ } else {
+ res = read_bbt(mtd, buf, td->pages[i],
this->chipsize >> this->bbt_erase_shift,
td, offs);
+ }
+ }
if (res)
return res;
- offs += this->chipsize >> (this->bbt_erase_shift + 2);
+ if (this->bbt_erase_shift == 0)
+ offs += mtd_div_by_eb(this->chipsize >> 2, mtd);
+ else
+ offs += this->chipsize >> (this->bbt_erase_shift + 2);
}
} else {
- res = read_bbt(mtd, buf, td->pages[0],
+ if (this->bbt_erase_shift == 0)
+ res = read_bbt(mtd, buf, td->pages[0],
+ mtd_div_by_eb(mtd->size, mtd), td, 0);
+ else
+ res = read_bbt(mtd, buf, td->pages[0],
mtd->size >> this->bbt_erase_shift, td, 0);
+
if (res)
return res;
}
@@ -419,8 +454,13 @@ static int read_abs_bbts(struct mtd_info *mtd, uint8_t *buf,
/* Read the primary version, if available */
if (td->options & NAND_BBT_VERSION) {
- scan_read_raw(mtd, buf, (loff_t)td->pages[0] << this->page_shift,
+ if (this->page_shift == 0)
+ scan_read_raw(mtd, buf, (loff_t)td->pages[0] * mtd->writesize,
mtd->writesize, td);
+ else
+ scan_read_raw(mtd, buf, (loff_t)td->pages[0] << this->page_shift,
+ mtd->writesize, td);
+
td->version[0] = buf[bbt_get_ver_offs(mtd, td)];
printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
td->pages[0], td->version[0]);
@@ -428,8 +468,13 @@ static int read_abs_bbts(struct mtd_info *mtd, uint8_t *buf,
/* Read the mirror version, if available */
if (md && (md->options & NAND_BBT_VERSION)) {
- scan_read_raw(mtd, buf, (loff_t)md->pages[0] << this->page_shift,
+ if (this->page_shift == 0)
+ scan_read_raw(mtd, buf, (loff_t)md->pages[0] * mtd->writesize,
+ mtd->writesize, td);
+ else
+ scan_read_raw(mtd, buf, (loff_t)md->pages[0] << this->page_shift,
mtd->writesize, td);
+
md->version[0] = buf[bbt_get_ver_offs(mtd, md)];
printk(KERN_DEBUG "Bad block table at page %d, version 0x%02X\n",
md->pages[0], md->version[0]);
@@ -512,9 +557,12 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,
MTDDEBUG(MTD_DEBUG_LEVEL0, "Scanning device for bad blocks\n");
- if (bd->options & NAND_BBT_SCANALLPAGES)
- len = 1 << (this->bbt_erase_shift - this->page_shift);
- else if (bd->options & NAND_BBT_SCAN2NDPAGE)
+ if (bd->options & NAND_BBT_SCANALLPAGES) {
+ if (this->page_shift == 0 || this->bbt_erase_shift == 0)
+ len = mtd->erasesize / mtd->writesize;
+ else
+ len = 1 << (this->bbt_erase_shift - this->page_shift);
+ } else if (bd->options & NAND_BBT_SCAN2NDPAGE)
len = 2;
else
len = 1;
@@ -532,7 +580,11 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,
if (chip == -1) {
/* Note that numblocks is 2 * (real numblocks) here, see i+=2
* below as it makes shifting and masking less painful */
- numblocks = mtd->size >> (this->bbt_erase_shift - 1);
+ if (this->bbt_erase_shift == 0)
+ numblocks = mtd_div_by_eb(mtd->size << 1, mtd);
+ else
+ numblocks = mtd->size >> (this->bbt_erase_shift - 1);
+
startblock = 0;
from = 0;
} else {
@@ -541,10 +593,19 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,
chip + 1, this->numchips);
return -EINVAL;
}
- numblocks = this->chipsize >> (this->bbt_erase_shift - 1);
+
+ if (this->bbt_erase_shift == 0)
+ numblocks = mtd_div_by_eb(this->chipsize << 1, mtd);
+ else
+ numblocks = this->chipsize >> (this->bbt_erase_shift - 1);
+
startblock = chip * numblocks;
numblocks += startblock;
- from = (loff_t)startblock << (this->bbt_erase_shift - 1);
+
+ if (this->bbt_erase_shift == 0)
+ from = (loff_t)startblock * (mtd->erasesize >> 1);
+ else
+ from = (loff_t)startblock << (this->bbt_erase_shift - 1);
}
if (this->options & NAND_BBT_SCANLASTPAGE)
@@ -573,7 +634,11 @@ static int create_bbt(struct mtd_info *mtd, uint8_t *buf,
}
i += 2;
- from += (1 << this->bbt_erase_shift);
+
+ if (this->bbt_erase_shift == 0)
+ from += mtd->erasesize;
+ else
+ from += (1 << this->bbt_erase_shift);
}
return 0;
}
@@ -602,11 +667,14 @@ static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
int startblock, block, dir;
int scanlen = mtd->writesize + mtd->oobsize;
int bbtblocks;
- int blocktopage = this->bbt_erase_shift - this->page_shift;
/* Search direction top -> down ? */
if (td->options & NAND_BBT_LASTBLOCK) {
- startblock = (mtd->size >> this->bbt_erase_shift) - 1;
+ if (this->bbt_erase_shift == 0)
+ startblock = mtd_div_by_eb(mtd->size, mtd) - 1;
+ else
+ startblock = (mtd->size >> this->bbt_erase_shift) - 1;
+
dir = -1;
} else {
startblock = 0;
@@ -616,11 +684,18 @@ static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
/* Do we have a bbt per chip ? */
if (td->options & NAND_BBT_PERCHIP) {
chips = this->numchips;
- bbtblocks = this->chipsize >> this->bbt_erase_shift;
+ if (this->bbt_erase_shift == 0)
+ bbtblocks = mtd_div_by_eb(this->chipsize, mtd);
+ else
+ bbtblocks = this->chipsize >> this->bbt_erase_shift;
+
startblock &= bbtblocks - 1;
} else {
chips = 1;
- bbtblocks = mtd->size >> this->bbt_erase_shift;
+ if (this->bbt_erase_shift == 0)
+ bbtblocks = mtd_div_by_eb(mtd->size, mtd);
+ else
+ bbtblocks = mtd->size >> this->bbt_erase_shift;
}
for (i = 0; i < chips; i++) {
@@ -629,14 +704,21 @@ static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
td->pages[i] = -1;
/* Scan the maximum number of blocks */
for (block = 0; block < td->maxblocks; block++) {
-
+ loff_t offs;
int actblock = startblock + dir * block;
- loff_t offs = (loff_t)actblock << this->bbt_erase_shift;
+ if (this->bbt_erase_shift == 0)
+ offs = (loff_t)actblock * mtd->erasesize;
+ else
+ offs = (loff_t)actblock << this->bbt_erase_shift;
/* Read first page */
scan_read_raw(mtd, buf, offs, mtd->writesize, td);
if (!check_pattern(buf, scanlen, mtd->writesize, td)) {
- td->pages[i] = actblock << blocktopage;
+ if (this->page_shift == 0 || this->bbt_erase_shift == 0)
+ td->pages[i] = actblock * (mtd->erasesize / mtd->writesize);
+ else
+ td->pages[i] = actblock << (this->bbt_erase_shift - this->page_shift);
+
if (td->options & NAND_BBT_VERSION) {
offs = bbt_get_ver_offs(mtd, td);
td->version[i] = buf[offs];
@@ -644,15 +726,19 @@ static int search_bbt(struct mtd_info *mtd, uint8_t *buf, struct nand_bbt_descr
break;
}
}
- startblock += this->chipsize >> this->bbt_erase_shift;
+ if (this->bbt_erase_shift == 0)
+ startblock += mtd_div_by_eb(this->chipsize, mtd);
+ else
+ startblock += this->chipsize >> this->bbt_erase_shift;
}
/* Check, if we found a bbt for each requested chip */
for (i = 0; i < chips; i++) {
if (td->pages[i] == -1)
printk(KERN_WARNING "Bad block table not found for chip %d\n", i);
else
- printk(KERN_DEBUG "Bad block table found at page %d, version 0x%02X\n", td->pages[i],
- td->version[i]);
+ MTDDEBUG(MTD_DEBUG_LEVEL0, "Bad block table found " \
+ "at page %d, version 0x%02X\n", td->pages[i],
+ td->version[i]);
}
return 0;
}
@@ -698,12 +784,12 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
struct nand_chip *this = mtd->priv;
struct erase_info einfo;
int i, j, res, chip = 0;
- int bits, startblock, dir, page, offs, numblocks, sft, sftmsk;
+ int bits, startblock, dir, page, numblocks, sft, sftmsk;
int nrchips, bbtoffs, pageoffs, ooboffs;
uint8_t msk[4];
uint8_t rcode = td->reserved_block_code;
size_t retlen, len = 0;
- loff_t to;
+ loff_t offs, to;
struct mtd_oob_ops ops;
ops.ooblen = mtd->oobsize;
@@ -715,7 +801,10 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
rcode = 0xff;
/* Write bad block table per chip rather than per device ? */
if (td->options & NAND_BBT_PERCHIP) {
- numblocks = (int)(this->chipsize >> this->bbt_erase_shift);
+ if (this->bbt_erase_shift == 0)
+ numblocks = mtd_div_by_eb(this->chipsize, mtd);
+ else
+ numblocks = (int)(this->chipsize >> this->bbt_erase_shift);
/* Full device write or specific chip ? */
if (chipsel == -1) {
nrchips = this->numchips;
@@ -724,7 +813,11 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
chip = chipsel;
}
} else {
- numblocks = (int)(mtd->size >> this->bbt_erase_shift);
+ if (this->bbt_erase_shift == 0)
+ numblocks = mtd_div_by_eb(mtd->size, mtd);
+ else
+ numblocks = (int)(mtd->size >> this->bbt_erase_shift);
+
nrchips = 1;
}
@@ -759,8 +852,11 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
case 0x03:
continue;
}
- page = block <<
- (this->bbt_erase_shift - this->page_shift);
+ if (this->bbt_erase_shift == 0 || this->page_shift == 0)
+ page = block *(mtd->erasesize / mtd->writesize);
+ else
+ page = block << (this->bbt_erase_shift - this->page_shift);
+
/* Check, if the block is used by the mirror table */
if (!md || md->pages[chip] != page)
goto write;
@@ -789,14 +885,21 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
}
bbtoffs = chip * (numblocks >> 2);
-
- to = ((loff_t) page) << this->page_shift;
+ if (this->page_shift == 0)
+ to = (loff_t) page * mtd->writesize;
+ else
+ to = ((loff_t) page) << this->page_shift;
/* Must we save the block contents ? */
if (td->options & NAND_BBT_SAVECONTENT) {
/* Make it block aligned */
- to &= ~((loff_t) ((1 << this->bbt_erase_shift) - 1));
- len = 1 << this->bbt_erase_shift;
+ if (this->bbt_erase_shift == 0) {
+ to = mtd_div_by_eb(to, mtd) * mtd->erasesize;
+ len = mtd->erasesize;
+ } else {
+ to &= ~((loff_t) ((1 << this->bbt_erase_shift) - 1));
+ len = 1 << this->bbt_erase_shift;
+ }
res = mtd->read(mtd, to, len, &retlen, buf);
if (res < 0) {
if (retlen != len) {
@@ -810,19 +913,28 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
"bad block table\n");
}
/* Read oob data */
- ops.ooblen = (len >> this->page_shift) * mtd->oobsize;
+ if (this->page_shift == 0)
+ ops.ooblen = mtd_div_by_ws(len, mtd) * mtd->oobsize;
+ else
+ ops.ooblen = (len >> this->page_shift) * mtd->oobsize;
+
ops.oobbuf = &buf[len];
res = mtd->read_oob(mtd, to + mtd->writesize, &ops);
if (res < 0 || ops.oobretlen != ops.ooblen)
goto outerr;
/* Calc the byte offset in the buffer */
- pageoffs = page - (int)(to >> this->page_shift);
- offs = pageoffs << this->page_shift;
+ if (this->page_shift == 0) {
+ pageoffs = page - mtd_div_by_ws(to, mtd);
+ offs = pageoffs * mtd->writesize;
+ } else {
+ pageoffs = page - (int)(to >> this->page_shift);
+ offs = pageoffs << this->page_shift;
+ }
+
/* Preset the bbt area with 0xff */
memset(&buf[offs], 0xff, (size_t) (numblocks >> sft));
ooboffs = len + (pageoffs * mtd->oobsize);
-
} else if (td->options & NAND_BBT_NO_OOB) {
ooboffs = 0;
offs = td->len;
@@ -833,7 +945,11 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
len = (size_t) (numblocks >> sft);
len += offs;
/* Make it page aligned ! */
- len = ALIGN(len, mtd->writesize);
+ if (this->page_shift == 0)
+ len = roundup(len, mtd->writesize);
+ else
+ len = ALIGN(len, mtd->writesize);
+
/* Preset the buffer with 0xff */
memset(buf, 0xff, len);
/* Pattern is located at the begin of first page */
@@ -842,10 +958,18 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
/* Calc length */
len = (size_t) (numblocks >> sft);
/* Make it page aligned ! */
- len = ALIGN(len, mtd->writesize);
+ if (this->page_shift == 0)
+ len = roundup(len, mtd->writesize);
+ else
+ len = ALIGN(len, mtd->writesize);
/* Preset the buffer with 0xff */
- memset(buf, 0xff, len +
- (len >> this->page_shift)* mtd->oobsize);
+ if (this->page_shift == 0)
+ memset(buf, 0xff, len +
+ mtd_div_by_ws(len, mtd) * mtd->oobsize);
+ else
+ memset(buf, 0xff, len +
+ (len >> this->page_shift)* mtd->oobsize);
+
offs = 0;
ooboffs = len;
/* Pattern is located in oob area of first page */
@@ -871,7 +995,11 @@ static int write_bbt(struct mtd_info *mtd, uint8_t *buf,
memset(&einfo, 0, sizeof(einfo));
einfo.mtd = mtd;
einfo.addr = to;
- einfo.len = 1 << this->bbt_erase_shift;
+ if (this->bbt_erase_shift == 0)
+ einfo.len = mtd->erasesize;
+ else
+ einfo.len = 1 << this->bbt_erase_shift;
+
res = nand_erase_nand(mtd, &einfo, 1);
if (res < 0)
goto outerr;
@@ -1047,10 +1175,16 @@ static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td)
/* Do we have a bbt per chip ? */
if (td->options & NAND_BBT_PERCHIP) {
chips = this->numchips;
- nrblocks = (int)(this->chipsize >> this->bbt_erase_shift);
+ if (this->bbt_erase_shift == 0)
+ nrblocks = mtd_div_by_eb(this->chipsize, mtd);
+ else
+ nrblocks = (int)(this->chipsize >> this->bbt_erase_shift);
} else {
chips = 1;
- nrblocks = (int)(mtd->size >> this->bbt_erase_shift);
+ if (this->bbt_erase_shift == 0)
+ nrblocks = mtd_div_by_eb(mtd->size, mtd);
+ else
+ nrblocks = (int)(mtd->size >> this->bbt_erase_shift);
}
for (i = 0; i < chips; i++) {
@@ -1058,13 +1192,21 @@ static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td)
!(td->options & NAND_BBT_WRITE)) {
if (td->pages[i] == -1)
continue;
- block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift);
+ if (this->bbt_erase_shift == 0 || this->page_shift == 0)
+ block = td->pages[i] / (mtd->erasesize / mtd->writesize);
+ else
+ block = td->pages[i] >> (this->bbt_erase_shift - this->page_shift);
+
block <<= 1;
oldval = this->bbt[(block >> 3)];
newval = oldval | (0x2 << (block & 0x06));
this->bbt[(block >> 3)] = newval;
- if ((oldval != newval) && td->reserved_block_code)
- nand_update_bbt(mtd, (loff_t)block << (this->bbt_erase_shift - 1));
+ if ((oldval != newval) && td->reserved_block_code) {
+ if (this->bbt_erase_shift == 0)
+ nand_update_bbt(mtd, (loff_t)block * (mtd->erasesize >> 1));
+ else
+ nand_update_bbt(mtd, (loff_t)block << (this->bbt_erase_shift - 1));
+ }
continue;
}
update = 0;
@@ -1084,8 +1226,12 @@ static void mark_bbt_region(struct mtd_info *mtd, struct nand_bbt_descr *td)
/* If we want reserved blocks to be recorded to flash, and some
new ones have been marked, then we need to update the stored
bbts. This should only happen once. */
- if (update && td->reserved_block_code)
- nand_update_bbt(mtd, (loff_t)(block - 2) << (this->bbt_erase_shift - 1));
+ if (update && td->reserved_block_code) {
+ if (this->bbt_erase_shift == 0)
+ nand_update_bbt(mtd, (loff_t)(block - 2) * (mtd->erasesize >> 1));
+ else
+ nand_update_bbt(mtd, (loff_t)(block - 2) << (this->bbt_erase_shift - 1));
+ }
}
}
@@ -1126,15 +1272,26 @@ static void verify_bbt_descr(struct mtd_info *mtd, struct nand_bbt_descr *bd)
BUG_ON(bd->options & NAND_BBT_SAVECONTENT);
}
- if (bd->options & NAND_BBT_PERCHIP)
- table_size = this->chipsize >> this->bbt_erase_shift;
- else
- table_size = mtd->size >> this->bbt_erase_shift;
+ if (bd->options & NAND_BBT_PERCHIP) {
+ if (this->bbt_erase_shift == 0)
+ table_size = mtd_div_by_eb(this->chipsize, mtd);
+ else
+ table_size = this->chipsize >> this->bbt_erase_shift;
+ } else {
+ if (this->bbt_erase_shift == 0)
+ table_size = mtd_div_by_eb(mtd->size, mtd);
+ else
+ table_size = mtd->size >> this->bbt_erase_shift;
+ }
table_size >>= 3;
table_size *= bits;
if (bd->options & NAND_BBT_NO_OOB)
table_size += pattern_len;
- BUG_ON(table_size > (1 << this->bbt_erase_shift));
+
+ if (this->bbt_erase_shift == 0)
+ BUG_ON(table_size > mtd->erasesize);
+ else
+ BUG_ON(table_size > (1 << this->bbt_erase_shift));
}
/**
@@ -1159,7 +1316,11 @@ int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd)
struct nand_bbt_descr *td = this->bbt_td;
struct nand_bbt_descr *md = this->bbt_md;
- len = mtd->size >> (this->bbt_erase_shift + 2);
+ if (this->bbt_erase_shift == 0)
+ len = mtd_div_by_eb(mtd->size >> 2, mtd);
+ else
+ len = mtd->size >> (this->bbt_erase_shift + 2);
+
/* Allocate memory (2bit per block) and clear the memory bad block table */
this->bbt = kzalloc(len, GFP_KERNEL);
if (!this->bbt) {
@@ -1182,8 +1343,13 @@ int nand_scan_bbt(struct mtd_info *mtd, struct nand_bbt_descr *bd)
verify_bbt_descr(mtd, md);
/* Allocate a temporary buffer for one eraseblock incl. oob */
- len = (1 << this->bbt_erase_shift);
- len += (len >> this->page_shift) * mtd->oobsize;
+ if (this->bbt_erase_shift == 0 || this->page_shift == 0) {
+ len = mtd->erasesize;
+ len += mtd_div_by_ws(len, mtd) * mtd->oobsize;
+ } else {
+ len = (1 << this->bbt_erase_shift);
+ len += (len >> this->page_shift) * mtd->oobsize;
+ }
buf = vmalloc(len);
if (!buf) {
printk(KERN_ERR "nand_bbt: Out of memory\n");
@@ -1232,8 +1398,13 @@ int nand_update_bbt(struct mtd_info *mtd, loff_t offs)
return -EINVAL;
/* Allocate a temporary buffer for one eraseblock incl. oob */
- len = (1 << this->bbt_erase_shift);
- len += (len >> this->page_shift) * mtd->oobsize;
+ if (this->bbt_erase_shift == 0 || this->page_shift == 0) {
+ len = mtd->erasesize;
+ len += mtd_div_by_ws(len, mtd) * mtd->oobsize;
+ } else {
+ len = (1 << this->bbt_erase_shift);
+ len += (len >> this->page_shift) * mtd->oobsize;
+ }
buf = kmalloc(len, GFP_KERNEL);
if (!buf) {
printk(KERN_ERR "nand_update_bbt: Out of memory\n");
@@ -1244,7 +1415,11 @@ int nand_update_bbt(struct mtd_info *mtd, loff_t offs)
/* Do we have a bbt per chip ? */
if (td->options & NAND_BBT_PERCHIP) {
- chip = (int)(offs >> this->chip_shift);
+ if (this->chip_shift == 0)
+ chip = mtd_div_by_cs(offs, mtd);
+ else
+ chip = (int)(offs >> this->chip_shift);
+
chipsel = chip;
} else {
chip = 0;
@@ -1428,7 +1603,11 @@ int nand_isbad_bbt(struct mtd_info *mtd, loff_t offs, int allowbbt)
uint8_t res;
/* Get block number * 2 */
- block = (int)(offs >> (this->bbt_erase_shift - 1));
+ if (this->bbt_erase_shift == 0)
+ block = mtd_div_by_eb(offs << 1, mtd);
+ else
+ block = (int)(offs >> (this->bbt_erase_shift - 1));
+
res = (this->bbt[block >> 3] >> (block & 0x06)) & 0x03;
MTDDEBUG(MTD_DEBUG_LEVEL2, "nand_isbad_bbt(): bbt info for offs 0x%08x: (block %d) 0x%02x\n",
diff --git a/drivers/mtd/nand/nand_ids.c b/drivers/mtd/nand/nand_ids.c
index 39535497f8..580a080c1c 100644
--- a/drivers/mtd/nand/nand_ids.c
+++ b/drivers/mtd/nand/nand_ids.c
@@ -11,6 +11,13 @@
#include <common.h>
#include <linux/mtd/nand.h>
+#include <rda/tgt_ap_board_config.h>
+#include <rda/tgt_ap_flash_parts.h>
+
+#if defined(CONFIG_NAND_RDA_V1) && !defined(_TGT_AP_NAND_DISABLE_HEC)
+#define RDA_NAND_WITH_HEC
+#endif
+
/*
* Chip ID list
*
@@ -77,7 +84,7 @@ const struct nand_flash_dev nand_flash_ids[] = {
/*512 Megabit */
{"NAND 64MiB 1,8V 8-bit", 0xA2, 0, 64, 0, LP_OPTIONS},
{"NAND 64MiB 1,8V 8-bit", 0xA0, 0, 64, 0, LP_OPTIONS},
- {"NAND 64MiB 3,3V 8-bit", 0xF2, 0, 64, 0, LP_OPTIONS},
+ /*{"NAND 64MiB 3,3V 8-bit", 0xF2, 0, 64, 0, LP_OPTIONS},*/
{"NAND 64MiB 3,3V 8-bit", 0xD0, 0, 64, 0, LP_OPTIONS},
{"NAND 64MiB 1,8V 16-bit", 0xB2, 0, 64, 0, LP_OPTIONS16},
{"NAND 64MiB 1,8V 16-bit", 0xB0, 0, 64, 0, LP_OPTIONS16},
@@ -90,7 +97,7 @@ const struct nand_flash_dev nand_flash_ids[] = {
{"NAND 128MiB 3,3V 8-bit", 0xD1, 0, 128, 0, LP_OPTIONS},
{"NAND 128MiB 1,8V 16-bit", 0xB1, 0, 128, 0, LP_OPTIONS16},
{"NAND 128MiB 3,3V 16-bit", 0xC1, 0, 128, 0, LP_OPTIONS16},
- {"NAND 128MiB 1,8V 16-bit", 0xAD, 0, 128, 0, LP_OPTIONS16},
+ {"NAND 128MiB 1,8V 16-bit", 0xAD, 0, 128, 0, LP_OPTIONS16},
/* 2 Gigabit */
{"NAND 256MiB 1,8V 8-bit", 0xAA, 0, 256, 0, LP_OPTIONS},
@@ -101,42 +108,43 @@ const struct nand_flash_dev nand_flash_ids[] = {
/* 4 Gigabit */
{"NAND 512MiB 1,8V 8-bit", 0xAC, 0, 512, 0, LP_OPTIONS},
{"NAND 512MiB 3,3V 8-bit", 0xDC, 0, 512, 0, LP_OPTIONS},
+ //{"NAND 512MiB 3,3V 8-bit", 0xDC, 0, 384, 0, LP_OPTIONS},
{"NAND 512MiB 1,8V 16-bit", 0xBC, 0, 512, 0, LP_OPTIONS16},
{"NAND 512MiB 3,3V 16-bit", 0xCC, 0, 512, 0, LP_OPTIONS16},
/* 8 Gigabit */
{"NAND 1GiB 1,8V 8-bit", 0xA3, 0, 1024, 0, LP_OPTIONS},
- {"NAND 1GiB 3,3V 8-bit", 0xD3, 0, 1024, 0, LP_OPTIONS},
+ //{"NAND 1GiB 3,3V 8-bit", 0xD3, 0, 1024, 0, LP_OPTIONS},
{"NAND 1GiB 1,8V 16-bit", 0xB3, 0, 1024, 0, LP_OPTIONS16},
{"NAND 1GiB 3,3V 16-bit", 0xC3, 0, 1024, 0, LP_OPTIONS16},
/* 16 Gigabit */
{"NAND 2GiB 1,8V 8-bit", 0xA5, 0, 2048, 0, LP_OPTIONS},
- {"NAND 2GiB 3,3V 8-bit", 0xD5, 0, 2048, 0, LP_OPTIONS},
+ //{"NAND 2GiB 3,3V 8-bit", 0xD5, 0, 2048, 0, LP_OPTIONS},
{"NAND 2GiB 1,8V 16-bit", 0xB5, 0, 2048, 0, LP_OPTIONS16},
{"NAND 2GiB 3,3V 16-bit", 0xC5, 0, 2048, 0, LP_OPTIONS16},
/* 32 Gigabit */
{"NAND 4GiB 1,8V 8-bit", 0xA7, 0, 4096, 0, LP_OPTIONS},
- {"NAND 4GiB 3,3V 8-bit", 0xD7, 0, 4096, 0, LP_OPTIONS},
+// {"NAND 4GiB 3,3V 8-bit", 0xD7, 0, 4096, 0, LP_OPTIONS},
{"NAND 4GiB 1,8V 16-bit", 0xB7, 0, 4096, 0, LP_OPTIONS16},
{"NAND 4GiB 3,3V 16-bit", 0xC7, 0, 4096, 0, LP_OPTIONS16},
/* 64 Gigabit */
{"NAND 8GiB 1,8V 8-bit", 0xAE, 0, 8192, 0, LP_OPTIONS},
- {"NAND 8GiB 3,3V 8-bit", 0xDE, 0, 8192, 0, LP_OPTIONS},
+ //{"NAND 8GiB 3,3V 8-bit", 0xDE, 0, 8192, 0, LP_OPTIONS},
{"NAND 8GiB 1,8V 16-bit", 0xBE, 0, 8192, 0, LP_OPTIONS16},
{"NAND 8GiB 3,3V 16-bit", 0xCE, 0, 8192, 0, LP_OPTIONS16},
/* 128 Gigabit */
{"NAND 16GiB 1,8V 8-bit", 0x1A, 0, 16384, 0, LP_OPTIONS},
- {"NAND 16GiB 3,3V 8-bit", 0x3A, 0, 16384, 0, LP_OPTIONS},
+ //{"NAND 16GiB 3,3V 8-bit", 0x3A, 0, 16384, 0, LP_OPTIONS},
{"NAND 16GiB 1,8V 16-bit", 0x2A, 0, 16384, 0, LP_OPTIONS16},
{"NAND 16GiB 3,3V 16-bit", 0x4A, 0, 16384, 0, LP_OPTIONS16},
/* 256 Gigabit */
{"NAND 32GiB 1,8V 8-bit", 0x1C, 0, 32768, 0, LP_OPTIONS},
- {"NAND 32GiB 3,3V 8-bit", 0x3C, 0, 32768, 0, LP_OPTIONS},
+ //{"NAND 32GiB 3,3V 8-bit", 0x3C, 0, 32768, 0, LP_OPTIONS},
{"NAND 32GiB 1,8V 16-bit", 0x2C, 0, 32768, 0, LP_OPTIONS16},
{"NAND 32GiB 3,3V 16-bit", 0x4C, 0, 32768, 0, LP_OPTIONS16},
@@ -161,6 +169,204 @@ const struct nand_flash_dev nand_flash_ids[] = {
BBT_AUTO_REFRESH
},
+ /*
+ * RDA Normal HW ECC support
+ * use 4K page as 4K page, support SLC nand only
+ */
+ {"NAND 512MB 1,8V 16-bit", 0xbc, 0, 512, 0x40000,
+ LP_OPTIONS16
+ },
+ /*
+ {"NAND 1,8V 16-bit slc", 0xbc, 4096, 512, 0x40000,
+ LP_OPTIONS16
+ },
+ */
+
+#ifdef RDA_NAND_WITH_HEC
+ /*
+ * RDA HEC support, for 4k MLC nand
+ * use 4K page as 2K page, leave 2K space for HEC
+ * therefore, chip_size should be half
+ * and erase_size should be 256*2k = 512k = 0x80000
+ * Now, supported NAND
+ * - Micron MT29F16xxxCA: ID = 2C 48 xx xx (16Gb use as a 8Gb NAND)
+ * - Micron MT29F32xxxCA: ID = 2C 68 xx xx (32Gb use as a 16Gb NAND)
+ * - sptek : ID = 2C 64 xx xx (32Gb use as a 16Gb NAND)
+ * - hynix : ID = AD D7 xx xx (32Gb use as a 16Gb NAND)
+ */
+ {"NAND 1GiB 3,3V 8-bit", 0x48, 2048, 1024, 0x80000,
+ LP_OPTIONS
+ },
+#if(__TGT_AP_FLASH_USE_PART_OF_PAGE__ == 1)
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_4KAS2K_PAGE_DIV__)
+ {"NAND 2GiB 3,3V 8-bit", 0x68, 2048, 2048, 0x80000,
+ LP_OPTIONS
+ },
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_4KAS3K_PAGE_DIV__)
+ {"NAND 3GiB 3,3V 8-bit", 0x68, 3072, 3072, 0xc0000,
+ LP_OPTIONS
+ },
+#endif
+#endif
+
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_8KAS6K_PAGE_DIV__)
+ /*
+ * RDA HEC support, for 8k MLC nand
+ * use 8K page as 6K page, leave 2K space for HEC
+ * therefore, chip_size should be three quarter
+ * and erase_size should be 256*6k = 1536k = 0x180000
+ * Now, supported NAND
+ * - Micron MT29F32xxxDA: ID = 2C 44 xx xx (32Gb use as a 24Gb NAND)
+ */
+ {"NAND 3GiB 3,3V 8-bit", 0x44, 6144, 3072, 0x180000,
+ LP_OPTIONS
+ },
+ {"NAND 6GiB 3,3V 8-bit", 0x64, 6144, 6144, 0x180000,
+ LP_OPTIONS
+ },
+/* //samsung 8k chip
+ {"NAND 3GiB 3,3V 8-bit", 0xd7, 6144, 3072, 0xc0000,
+ LP_OPTIONS
+ },
+*/
+ {"NAND 3GiB 3,3V 8-bit", 0xd7, 6144, 3072, 0x180000,
+ LP_OPTIONS
+ },
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_8KAS4K_PAGE_DIV__)
+ {"NAND 2GiB 3,3V 8-bit", 0x44, 4096, 2048, 0x100000,
+ LP_OPTIONS
+ },
+ {"NAND 4GiB 3,3V 8-bit", 0x64, 4096, 4096, 0x100000,
+ LP_OPTIONS
+ },
+/* //samsung 8k chip
+ {"NAND 2GiB 3,3V 8-bit", 0xd7, 4096, 2048, 0x80000,
+ LP_OPTIONS
+ },
+*/
+ {"NAND 2GiB 3,3V 8-bit", 0xd7, 4096, 2048, 0x100000,
+ LP_OPTIONS
+ },
+#endif
+#endif
+
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_16KAS8K_PAGE_DIV__)
+ {"NAND 2GiB 3,3V 8-bit", 0xd7, 8192, 2048, 0x200000,
+ LP_OPTIONS
+ },
+ {"NAND 4GiB 3,3V 8-bit", 0xde, 8192, 4096, 0x200000,
+ LP_OPTIONS
+ },
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_16KAS12K_PAGE_DIV__)
+ {"NAND 3GiB 3,3V 8-bit", 0xd7, 12288, 3072, 0x300000,
+ LP_OPTIONS
+ },
+ {"NAND 6GiB 3,3V 8-bit", 0xde, 12288, 6144, 0x300000,
+ LP_OPTIONS
+ },
+#endif
+#endif
+#else
+ {"NAND 2GiB 3,3V 8-bit", 0x68, 2048, 2048, 0x80000,
+ LP_OPTIONS
+ },
+ /*
+ * RDA HEC support, for 8k MLC nand
+ * use 8K page as 4K page, leave 4K space for HEC
+ * therefore, chip_size should be half
+ * and erase_size should be 256*4k = 1024k = 0x100000
+ * Now, supported NAND
+ * - Micron MT29F32xxxDA: ID = 2C 44 xx xx (32Gb use as a 16Gb NAND)
+ */
+ {"NAND 2GiB 3,3V 8-bit", 0x44, 4096, 2048, 0x100000,
+ LP_OPTIONS
+ },
+#endif
+ {"NAND 2GiB 3,3V 8-bit", 0x64, 2048, 2048, 0x80000,
+ LP_OPTIONS
+ },
+ {"NAND 2GiB 3,3V 8-bit", 0xd7, 2048, 2048, 0x80000,
+ LP_OPTIONS
+ },
+#else
+ /* 2K page SLC nand */
+ {"NAND 256MiB 3,3V 8-bit", 0xD2, 0, 256, 0, LP_OPTIONS},
+
+ /* 4K page MLC nand */
+ {"NAND 2GiB 3,3V 8-bit", 0x48, 4096, 2048, 0x100000,
+ LP_OPTIONS
+ },
+ {"NAND 4GiB 3,3V 8-bit", 0x68, 4096, 4096, 0x100000,
+ LP_OPTIONS
+ },
+ {"NAND 8GiB 3,3V 8-bit", 0x64, 8192, 8192, 0x200000,
+ LP_OPTIONS
+ },
+ /* 8K page MLC nand */
+ {"NAND 4GiB 3,3V 8-bit", 0x44, 8192, 4096, 0x200000,
+ LP_OPTIONS
+ },
+ /*block size is 3M, so chipsize is time of 3.*/
+ {"NAND 8GiB 3,3V 8-bit", 0x88, 8192, 8190, 0x300000,
+ LP_OPTIONS
+ },
+ /* 16K page MLC nand */
+ {"NAND 8GiB 3,3V 8-bit", 0xd3, 16384, 8192, 0x400000,
+ LP_OPTIONS
+ },
+ /* 16K page MLC nand */
+ {"NAND 8GiB 3,3V 8-bit", 0xd5, 16384, 8192, 0x400000,
+ LP_OPTIONS
+ },
+ /*This is conflict with a 8k nand*/
+ /* 16K page MLC nand */
+ {"NAND 8GiB 3,3V 8-bit", 0xd7, 16384, 4096, 0x400000,
+ LP_OPTIONS
+ },
+ /*
+ {"NAND 8GiB 3,3V 8-bit", 0xd7, 7168, 3584, 0x1c0000,
+ LP_OPTIONS
+ },
+ */
+ /* 16K page MLC nand */
+ {"NAND 8GiB 3,3V 8-bit", 0xde, 16384, 8192, 0x400000,
+ LP_OPTIONS
+ },
+ /*
+ {"NAND 8GiB 3,3V 8-bit", 0xde, 14336, 7168, 0x380000,
+ LP_OPTIONS
+ },
+ */
+ /* 16K page MLC nand */
+ {"NAND 16GiB 3,3V 8-bit", 0x3A, 16384, 16384, 0x400000,
+ LP_OPTIONS
+ },
+ /* 16K page MLC nand */
+ {"NAND 16GiB 3,3V 8-bit", 0x3C, 16384, 32768, 0x400000,
+ LP_OPTIONS
+ },
+#endif /* _TGT_AP_NAND_DISABLE_HEC */
+
+ /* RDA SPI nand support */
+ {"NAND 128MiB 1,8V 4-bit", 0xe1, 2048, 128, 0x20000,
+ LP_OPTIONS},
+ {"NAND 128MiB 3,3V 4-bit", 0xf1, 2048, 128, 0x20000,
+ LP_OPTIONS},
+ {"NAND 256MiB 1,8V 4-bit", 0xe2, 2048, 256, 0x20000,
+ LP_OPTIONS},
+ {"NAND 256MiB 3,3V 4-bit", 0xf2, 2048, 256, 0x20000,
+ LP_OPTIONS},
+ {"NAND 512MiB 1,8V 4-bit", 0xe4, 2048, 512, 0x20000,
+ LP_OPTIONS},
+ {"NAND 512MiB 3,3V 4-bit", 0xf4, 2048, 512, 0x20000,
+ LP_OPTIONS},
+ {"NAND 512MiB 1,8V 4-bit", 0xc4, 4096, 512, 0x40000,
+ LP_OPTIONS},
+ {"NAND 512MiB 3,3V 4-bit", 0xd4, 4096, 512, 0x40000,
+ LP_OPTIONS},
{NULL,}
};
@@ -177,5 +383,6 @@ const struct nand_manufacturers nand_manuf_ids[] = {
{NAND_MFR_HYNIX, "Hynix"},
{NAND_MFR_MICRON, "Micron"},
{NAND_MFR_AMD, "AMD"},
+ {NAND_MFR_ESMT,"ESMT"},
{0x0, "Unknown"}
};
diff --git a/drivers/mtd/nand/nand_spl_load.c b/drivers/mtd/nand/nand_spl_load.c
index 215459a83c..bd6c988266 100644
--- a/drivers/mtd/nand/nand_spl_load.c
+++ b/drivers/mtd/nand/nand_spl_load.c
@@ -21,6 +21,10 @@
#include <common.h>
#include <nand.h>
+#ifdef CONFIG_SPL_CHECK_IMAGE
+int check_uimage(unsigned int *buf);
+#endif
+
/*
* The main entry for NAND booting. It's necessary that SDRAM is already
* configured and available since this code loads the main U-Boot image
@@ -28,23 +32,49 @@
*/
void nand_boot(void)
{
+ int ret = 0;
+
__attribute__((noreturn)) void (*uboot)(void);
/*
* Load U-Boot image from NAND into RAM
*/
- nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
+ ret = nand_spl_load_image(CONFIG_SYS_NAND_U_BOOT_OFFS,
CONFIG_SYS_NAND_U_BOOT_SIZE,
(void *)CONFIG_SYS_NAND_U_BOOT_DST);
+ if (0 != ret){
+ printf("Read u_boot from nand failed. \n");
+ return;
+ }
+
#ifdef CONFIG_NAND_ENV_DST
- nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
+ ret = nand_spl_load_image(CONFIG_ENV_OFFSET, CONFIG_ENV_SIZE,
(void *)CONFIG_NAND_ENV_DST);
+ if (0 != ret){
+ printf("Read env from nand failed . \n");
+ return;
+ }
#ifdef CONFIG_ENV_OFFSET_REDUND
- nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE,
+ ret = nand_spl_load_image(CONFIG_ENV_OFFSET_REDUND, CONFIG_ENV_SIZE,
(void *)CONFIG_NAND_ENV_DST + CONFIG_ENV_SIZE);
+ if (0 != ret){
+ printf("Read redund from nand failed . \n");
+ return;
+ }
+#endif
+#endif
+
+#ifdef CONFIG_SPL_CHECK_IMAGE
+ if (check_uimage((unsigned int*)CONFIG_SYS_NAND_U_BOOT_DST)) {
+ printf("Nand boot failed:DDR error or nand data error!\n");
+#ifdef CONFIG_RDA_FPGA
+ nand_dirty_block_erase(0);
#endif
+ printf("please try to load uboot.img or reset!\n");
+ return;
+ }
#endif
/*
diff --git a/drivers/mtd/nand/nand_spl_simple.c b/drivers/mtd/nand/nand_spl_simple.c
index 4a4d02f4c8..33795db32f 100644
--- a/drivers/mtd/nand/nand_spl_simple.c
+++ b/drivers/mtd/nand/nand_spl_simple.c
@@ -22,11 +22,13 @@
#include <nand.h>
#include <asm/io.h>
#include <linux/mtd/nand_ecc.h>
+#include <mtd/nand/rda_nand.h>
-static int nand_ecc_pos[] = CONFIG_SYS_NAND_ECCPOS;
static nand_info_t mtd;
static struct nand_chip nand_chip;
+#ifndef CONFIG_NAND_RDA
+static int nand_ecc_pos[] = CONFIG_SYS_NAND_ECCPOS;
#define ECCSTEPS (CONFIG_SYS_NAND_PAGE_SIZE / \
CONFIG_SYS_NAND_ECCSIZE)
#define ECCTOTAL (ECCSTEPS * CONFIG_SYS_NAND_ECCBYTES)
@@ -219,40 +221,178 @@ static int nand_read_page(int block, int page, void *dst)
}
#endif
-int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst)
+#else
+#define MAX_OOBSIZE 32
+static int nand_is_bad_block(int block)
+{
+ struct nand_chip *this = mtd.priv;
+ int page = block * (mtd.erasesize / mtd.writesize);
+ static u_char oob[MAX_OOBSIZE];
+
+ this->cmdfunc(&mtd, NAND_CMD_READOOB, 0, page);
+ this->read_buf(&mtd, oob, 32);
+
+ /*
+ * Read one byte (or two if it's a 16 bit chip).
+ */
+ if (this->options & NAND_BUSWIDTH_16) {
+ unsigned short oob_w = (oob[1] << 8) | oob[0];
+ if (oob_w != 0xffff)
+ return 1;
+ } else {
+ if (oob[0] != 0xff)
+ return 1;
+ }
+
+ return 0;
+}
+
+#ifdef CONFIG_RDA_FPGA
+void nand_dirty_block_erase(int page)
+{
+ struct nand_chip *this = mtd.priv;
+ /* Send commands to erase a block */
+ this->cmdfunc(&mtd, NAND_CMD_ERASE1, -1, page);
+ this->cmdfunc(&mtd, NAND_CMD_ERASE2, -1, -1);
+}
+#endif
+
+static int nand_read_page(int block, int page, uchar *dst)
+{
+ struct nand_chip *this = mtd.priv;
+ unsigned int page_cnt = mtd.erasesize / mtd.writesize;
+ int page_addr = page + block * page_cnt;
+
+ this->cmdfunc(&mtd, NAND_CMD_READ0, 0, page_addr);
+ this->read_buf(&mtd, dst, mtd.writesize);
+
+ return 0;
+}
+#endif //CONFIG_NAND_RDA
+
+int nand_spl_read_skip_bad(uint64_t offs, uint64_t size, u8 *dst,
+ u32 *skip_blocks)
{
unsigned int block, lastblock;
unsigned int page;
+ unsigned int page_count = 0, page_num;
+ unsigned int bad = 0;
+ unsigned int page_offset = offs % mtd.writesize;
+ unsigned int data_valid_len = mtd.writesize - page_offset;
+
+ if (page_offset) {/* u-boot is not page aligned */
+ block = offs / mtd.erasesize;
+ page = (offs / mtd.writesize) % (mtd.erasesize / mtd.writesize);
+ do {
+ if (!nand_is_bad_block(block)) {
+ nand_read_page(block, page, dst);
+ memcpy(dst, dst + page_offset, data_valid_len);
+ dst += data_valid_len;
+ offs += data_valid_len;
+ size -= data_valid_len;
+ } else {
+ bad++;
+ block++;
+ }
+ page_offset = offs % mtd.writesize;
+ } while(bad < 16 && page_offset);
+ }
/*
* offs has to be aligned to a page address!
*/
- block = offs / CONFIG_SYS_NAND_BLOCK_SIZE;
- lastblock = (offs + size - 1) / CONFIG_SYS_NAND_BLOCK_SIZE;
- page = (offs % CONFIG_SYS_NAND_BLOCK_SIZE) / CONFIG_SYS_NAND_PAGE_SIZE;
+ block = offs / mtd.erasesize;
+ lastblock = (offs + size + mtd.erasesize - 1) / mtd.erasesize;
+ page = (offs / mtd.writesize) % (mtd.erasesize / mtd.writesize);
+ page_num = (size + mtd.writesize - 1) / mtd.writesize;
- while (block <= lastblock) {
+ while (block < lastblock) {
if (!nand_is_bad_block(block)) {
/*
* Skip bad blocks
*/
- while (page < CONFIG_SYS_NAND_PAGE_COUNT) {
+ while (page < (mtd.erasesize / mtd.writesize)) {
nand_read_page(block, page, dst);
- dst += CONFIG_SYS_NAND_PAGE_SIZE;
+ dst += mtd.writesize;
page++;
+ page_count++;
+ if(page_count >= page_num)
+ goto exit;
}
-
page = 0;
} else {
+ bad++;
+ if (bad >= 16) {
+ *skip_blocks = bad;
+ printf("too many bad blocks\n");
+ return -1;
+ }
lastblock++;
}
block++;
}
+exit:
+
+ *skip_blocks = bad;
+
+ if (0 == page_count){
+ printf("Error:read 0 page from nand \n");
+ return -1;
+ }
return 0;
}
+int nand_spl_load_image(uint64_t offs, uint64_t size, void *dst)
+{
+ u32 bad_blocks = 0;
+ struct rda_nand_info *info = nand_chip.priv;
+
+ printf("nand_spl_load_image: offs = 0x%llx, size = 0x%llx \n", offs, size);
+
+ offs = ((offs - CONFIG_MTD_PTBL_SIZE) * info->spl_adjust_ratio) / 2 + CONFIG_MTD_PTBL_SIZE;
+ //size -= (CONFIG_SPL_MAX_SIZE * info->spl_adjust_ratio) / 2 - CONFIG_SPL_MAX_SIZE;
+
+ printf("nand_spl_load_image,adjust: offs = 0x%llx, size = 0x%llx \n", offs, size);
+
+ if(nand_spl_read_skip_bad(offs, size, dst, &bad_blocks)) {
+ printf("fatal error, cannot load bootload....\n");
+ return -1;
+ }
+
+ if (bad_blocks > 0) {
+ printf("spl, there are %d bad block in bootloader partition",
+ bad_blocks);
+ }
+ return 0;
+}
+
+void nand_spl_mtd_info(u32 *page_size, u32 *block_size)
+{
+ *page_size = mtd.writesize;
+ *block_size = mtd.erasesize;
+}
+
+static int nand_sanity_check(void)
+{
+ int ret = 0;
+
+#if defined(NAND_PAGE_SIZE) && defined(NAND_BLOCK_SIZE)
+ if (mtd.writesize != NAND_PAGE_SIZE)
+ ret = -1;
+ if (mtd.erasesize != NAND_BLOCK_SIZE)
+ ret = -1;
+ if (ret) {
+ printf("nand parameters error: real pagesize: %d, blocksize %d\n",
+ mtd.writesize, mtd.erasesize);
+ printf("but We expect pagesize: %d, blocksize %d\n",
+ NAND_PAGE_SIZE, NAND_BLOCK_SIZE);
+ printf("please check device/rda/.../customer.mk\n");
+ }
+#endif
+ return ret;
+}
/* nand_init() - initialize data to make nand usable by SPL */
void nand_init(void)
{
@@ -264,15 +404,15 @@ void nand_init(void)
(void __iomem *)CONFIG_SYS_NAND_BASE;
board_nand_init(&nand_chip);
-#ifdef CONFIG_SPL_NAND_SOFTECC
- if (nand_chip.ecc.mode == NAND_ECC_SOFT) {
- nand_chip.ecc.calculate = nand_calculate_ecc;
- nand_chip.ecc.correct = nand_correct_data;
- }
-#endif
+ if (nand_chip.init_size)
+ nand_chip.init_size(&mtd, &nand_chip, NULL);
if (nand_chip.select_chip)
nand_chip.select_chip(&mtd, 0);
+
+ if(nand_sanity_check()) {
+ for(;;);
+ }
}
/* Unselect after operation */
diff --git a/drivers/mtd/nand/nand_util.c b/drivers/mtd/nand/nand_util.c
index 60c778e637..8581a3a1a9 100644
--- a/drivers/mtd/nand/nand_util.c
+++ b/drivers/mtd/nand/nand_util.c
@@ -49,14 +49,16 @@
#include <linux/mtd/mtd.h>
#include <nand.h>
#include <jffs2/jffs2.h>
+#include <mmc/sparse.h>
typedef struct erase_info erase_info_t;
-typedef struct mtd_info mtd_info_t;
+typedef struct mtd_info mtd_info_t;
/* support only for native endian JFFS2 */
#define cpu_to_je16(x) (x)
#define cpu_to_je32(x) (x)
+extern void udc_irq(void);
/**
* nand_erase_opts: - erase NAND flash with support for various options
* (jffs2 formating)
@@ -68,11 +70,11 @@ typedef struct mtd_info mtd_info_t;
* This code is ported from flash_eraseall.c from Linux mtd utils by
* Arcom Control System Ltd.
*/
-int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
+int nand_erase_opts(nand_info_t * meminfo, const nand_erase_options_t * opts)
{
struct jffs2_unknown_node cleanmarker;
erase_info_t erase;
- unsigned long erase_length, erased_length; /* in blocks */
+ unsigned long erase_length, erased_length; /* in blocks */
int bbtest = 1;
int result;
int percent_complete = -1;
@@ -80,22 +82,29 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
struct mtd_oob_ops oob_opts;
struct nand_chip *chip = meminfo->priv;
- if ((opts->offset & (meminfo->writesize - 1)) != 0) {
- printf("Attempt to erase non page aligned data\n");
- return -1;
+ if (chip->page_shift == 0) {
+ if (mtd_mod_by_ws(opts->offset, meminfo) != 0){
+ printf("Attempt to erase non page aligned data\n");
+ return -1;
+ }
+ } else {
+ if ((opts->offset & (meminfo->writesize - 1)) != 0) {
+ printf("Attempt to erase non page aligned data\n");
+ return -1;
+ }
}
memset(&erase, 0, sizeof(erase));
memset(&oob_opts, 0, sizeof(oob_opts));
erase.mtd = meminfo;
- erase.len = meminfo->erasesize;
+ erase.len = meminfo->erasesize;
erase.addr = opts->offset;
erase_length = lldiv(opts->length + meminfo->erasesize - 1,
meminfo->erasesize);
- cleanmarker.magic = cpu_to_je16 (JFFS2_MAGIC_BITMASK);
- cleanmarker.nodetype = cpu_to_je16 (JFFS2_NODETYPE_CLEANMARKER);
+ cleanmarker.magic = cpu_to_je16(JFFS2_MAGIC_BITMASK);
+ cleanmarker.nodetype = cpu_to_je16(JFFS2_NODETYPE_CLEANMARKER);
cleanmarker.totlen = cpu_to_je32(8);
/* scrub option allows to erase badblock. To prevent internal
@@ -115,10 +124,10 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
}
for (erased_length = 0;
- erased_length < erase_length;
- erase.addr += meminfo->erasesize) {
+ erased_length < erase_length; erase.addr += meminfo->erasesize) {
- WATCHDOG_RESET ();
+ WATCHDOG_RESET();
+ udc_irq();
if (!opts->scrub && bbtest) {
int ret = meminfo->block_isbad(meminfo, erase.addr);
@@ -136,8 +145,7 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
} else if (ret < 0) {
printf("\n%s: MTD get bad block failed: %d\n",
- mtd_device,
- ret);
+ mtd_device, ret);
return -1;
}
}
@@ -155,13 +163,12 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
if (opts->jffs2 && chip->ecc.layout->oobavail >= 8) {
chip->ops.ooblen = 8;
chip->ops.datbuf = NULL;
- chip->ops.oobbuf = (uint8_t *)&cleanmarker;
+ chip->ops.oobbuf = (uint8_t *) & cleanmarker;
chip->ops.ooboffs = 0;
chip->ops.mode = MTD_OOB_AUTO;
result = meminfo->write_oob(meminfo,
- erase.addr,
- &chip->ops);
+ erase.addr, &chip->ops);
if (result != 0) {
printf("\n%s: MTD writeoob failure: %d\n",
mtd_device, result);
@@ -183,12 +190,13 @@ int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts)
if (percent != percent_complete) {
percent_complete = percent;
- printf("\rErasing at 0x%llx -- %3d%% complete.",
+ printf("\rErasing at 0x%llx -- %3d%% complete.\n",
erase.addr, percent);
if (opts->jffs2 && result == 0)
- printf(" Cleanmarker written at 0x%llx.",
- erase.addr);
+ printf
+ (" Cleanmarker written at 0x%llx.",
+ erase.addr);
}
}
}
@@ -244,8 +252,7 @@ int nand_lock(struct mtd_info *mtd, int tight)
chip->select_chip(mtd, 0);
chip->cmdfunc(mtd,
- (tight ? NAND_CMD_LOCK_TIGHT : NAND_CMD_LOCK),
- -1, -1);
+ (tight ? NAND_CMD_LOCK_TIGHT : NAND_CMD_LOCK), -1, -1);
/* call wait ready function */
status = chip->waitfunc(mtd, chip);
@@ -283,27 +290,42 @@ int nand_get_lock_status(struct mtd_info *mtd, loff_t offset)
struct nand_chip *chip = mtd->priv;
/* select the NAND device */
- chipnr = (int)(offset >> chip->chip_shift);
+ if (chip->chip_shift == 0)
+ chipnr = mtd_div_by_cs(offset, mtd);
+ else
+ chipnr = (int)(offset >> chip->chip_shift);
+
chip->select_chip(mtd, chipnr);
+ if (chip->page_shift == 0) {
+ if (mtd_mod_by_ws(offset, mtd) != 0){
+ printf("nand_get_lock_status: "
+ "Start address must be beginning of " "nand page!\n");
+ ret = -1;
+ goto out;
+ }
- if ((offset & (mtd->writesize - 1)) != 0) {
- printf ("nand_get_lock_status: "
- "Start address must be beginning of "
- "nand page!\n");
- ret = -1;
- goto out;
+ /* check the Lock Status */
+ page = mtd_div_by_ws(offset, mtd);
+ } else {
+ if ((offset & (mtd->writesize - 1)) != 0) {
+ printf("nand_get_lock_status: "
+ "Start address must be beginning of " "nand page!\n");
+ ret = -1;
+ goto out;
+ }
+
+ /* check the Lock Status */
+ page = (int)(offset >> chip->page_shift);
}
- /* check the Lock Status */
- page = (int)(offset >> chip->page_shift);
chip->cmdfunc(mtd, NAND_CMD_LOCK_STATUS, -1, page & chip->pagemask);
ret = chip->read_byte(mtd) & (NAND_LOCK_STATUS_TIGHT
- | NAND_LOCK_STATUS_LOCK
- | NAND_LOCK_STATUS_UNLOCK);
+ | NAND_LOCK_STATUS_LOCK
+ | NAND_LOCK_STATUS_UNLOCK);
- out:
+out:
/* de-select the NAND device */
chip->select_chip(mtd, -1);
return ret;
@@ -327,33 +349,53 @@ int nand_unlock(struct mtd_info *mtd, ulong start, ulong length)
int status;
int page;
struct nand_chip *chip = mtd->priv;
- printf ("nand_unlock: start: %08x, length: %d!\n",
- (int)start, (int)length);
+ printf("nand_unlock: start: %08x, length: %d!\n",
+ (int)start, (int)length);
/* select the NAND device */
- chipnr = (int)(start >> chip->chip_shift);
+ if (chip->chip_shift == 0)
+ chipnr = mtd_div_by_cs(start, mtd);
+ else
+ chipnr = (int)(start >> chip->chip_shift);
+
chip->select_chip(mtd, chipnr);
/* check the WP bit */
chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
if (!(chip->read_byte(mtd) & NAND_STATUS_WP)) {
- printf ("nand_unlock: Device is write protected!\n");
+ printf("nand_unlock: Device is write protected!\n");
ret = -1;
goto out;
}
- if ((start & (mtd->erasesize - 1)) != 0) {
- printf ("nand_unlock: Start address must be beginning of "
- "nand block!\n");
- ret = -1;
- goto out;
- }
+ if (chip->phy_erase_shift == 0) {
+ if (mtd_mod_by_eb(start, mtd) != 0) {
+ printf("nand_unlock: Start address must be beginning of "
+ "nand block!\n");
+ ret = -1;
+ goto out;
+ }
- if (length == 0 || (length & (mtd->erasesize - 1)) != 0) {
- printf ("nand_unlock: Length must be a multiple of nand block "
- "size %08x!\n", mtd->erasesize);
- ret = -1;
- goto out;
+ if (length == 0 || mtd_mod_by_eb(length, mtd) != 0) {
+ printf("nand_unlock: Length must be a multiple of nand block "
+ "size %08x!\n", mtd->erasesize);
+ ret = -1;
+ goto out;
+ }
+ } else {
+ if ((start & (mtd->erasesize - 1)) != 0) {
+ printf("nand_unlock: Start address must be beginning of "
+ "nand block!\n");
+ ret = -1;
+ goto out;
+ }
+
+ if (length == 0 || (length & (mtd->erasesize - 1)) != 0) {
+ printf("nand_unlock: Length must be a multiple of nand block "
+ "size %08x!\n", mtd->erasesize);
+ ret = -1;
+ goto out;
+ }
}
/*
@@ -363,11 +405,19 @@ int nand_unlock(struct mtd_info *mtd, ulong start, ulong length)
length -= mtd->erasesize;
/* submit address of first page to unlock */
- page = (int)(start >> chip->page_shift);
+ if (chip->page_shift == 0)
+ page = mtd_div_by_ws(start, mtd);
+ else
+ page = (int)(start >> chip->page_shift);
+
chip->cmdfunc(mtd, NAND_CMD_UNLOCK1, -1, page & chip->pagemask);
/* submit ADDRESS of LAST page to unlock */
- page += (int)(length >> chip->page_shift);
+ if (chip->page_shift == 0)
+ page += mtd_div_by_ws(length, mtd);
+ else
+ page += (int)(length >> chip->page_shift);
+
chip->cmdfunc(mtd, NAND_CMD_UNLOCK2, -1, page & chip->pagemask);
/* call wait ready function */
@@ -379,7 +429,7 @@ int nand_unlock(struct mtd_info *mtd, ulong start, ulong length)
goto out;
}
- out:
+out:
/* de-select the NAND device */
chip->select_chip(mtd, -1);
return ret;
@@ -392,27 +442,39 @@ int nand_unlock(struct mtd_info *mtd, ulong start, ulong length)
* Check if there are any bad blocks, and whether length including bad
* blocks fits into device
*
- * @param nand NAND device
- * @param offset offset in flash
- * @param length image length
+ * @param nand NAND device
+ * @param offset offset in flash
+ * @param length image length
+ * @param max_limit maximun access offset in flash
* @return 0 if the image fits and there are no bad blocks
* 1 if the image fits, but there are bad blocks
* -1 if the image does not fit
*/
-static int check_skip_len(nand_info_t *nand, loff_t offset, size_t length)
+static int check_skip_len(nand_info_t * nand, loff_t offset, size_t length,
+ loff_t max_limit)
{
size_t len_excl_bad = 0;
int ret = 0;
+ struct nand_chip *chip = nand->priv;
+
+ if (max_limit == 0)
+ max_limit = nand->size;
while (len_excl_bad < length) {
size_t block_len, block_off;
loff_t block_start;
- if (offset >= nand->size)
+ if (offset >= max_limit)
return -1;
- block_start = offset & ~(loff_t)(nand->erasesize - 1);
- block_off = offset & (nand->erasesize - 1);
+ if (chip->phys_erase_shift == 0) {
+ block_start = mtd_div_by_eb(offset, nand) * nand->erasesize;
+ block_off = mtd_mod_by_eb(offset, nand);
+ } else {
+ block_start = offset & ~(loff_t) (nand->erasesize - 1);
+ block_off = offset & (nand->erasesize - 1);
+ }
+
block_len = nand->erasesize - block_off;
if (!nand_block_isbad(nand, block_start))
@@ -427,8 +489,8 @@ static int check_skip_len(nand_info_t *nand, loff_t offset, size_t length)
}
#ifdef CONFIG_CMD_NAND_TRIMFFS
-static size_t drop_ffs(const nand_info_t *nand, const u_char *buf,
- const size_t *len)
+static size_t drop_ffs(const nand_info_t * nand, const u_char * buf,
+ const size_t * len)
{
size_t i, l = *len;
@@ -439,7 +501,7 @@ static size_t drop_ffs(const nand_info_t *nand, const u_char *buf,
/* The resulting length must be aligned to the minimum flash I/O size */
l = i + 1;
l = (l + nand->writesize - 1) / nand->writesize;
- l *= nand->writesize;
+ l *= nand->writesize;
/*
* since the input length may be unaligned, prevent access past the end
@@ -450,7 +512,7 @@ static size_t drop_ffs(const nand_info_t *nand, const u_char *buf,
#endif
/**
- * nand_write_skip_bad:
+ * nand_write_skip_bad_new:
*
* Write image to NAND flash.
* Blocks that are marked bad are skipped and the is written to the next
@@ -460,18 +522,23 @@ static size_t drop_ffs(const nand_info_t *nand, const u_char *buf,
* @param nand NAND device
* @param offset offset in flash
* @param length buffer length
- * @param buffer buffer to read from
+ * @param max_limit maximun access offset in flash
+ * @param buffer buffer to read from
* @param flags flags modifying the behaviour of the write to NAND
+ * @skip_blocks the blocks has been skiped in this write
* @return 0 in case of success
*/
-int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
- u_char *buffer, int flags)
+int nand_write_skip_bad_new(nand_info_t * nand, loff_t offset, size_t * length,
+ loff_t max_limit, u_char * buffer, int flags,
+ u32 * skip_blocks)
{
int rval = 0, blocksize;
size_t left_to_write = *length;
u_char *p_buffer = buffer;
int need_skip;
+ struct nand_chip *chip = nand->priv;
+ *skip_blocks = 0;
#ifdef CONFIG_CMD_NAND_YAFFS
if (flags & WITH_YAFFS_OOB) {
if (flags & ~WITH_YAFFS_OOB)
@@ -481,8 +548,8 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
pages = nand->erasesize / nand->writesize;
blocksize = (pages * nand->oobsize) + nand->erasesize;
if (*length % (nand->writesize + nand->oobsize)) {
- printf ("Attempt to write incomplete page"
- " in yaffs mode\n");
+ printf("Attempt to write incomplete page"
+ " in yaffs mode\n");
return -EINVAL;
}
} else
@@ -502,41 +569,61 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
* you should only start a block skipping access at a
* partition boundary). So don't try to handle that.
*/
- if ((offset & (nand->writesize - 1)) != 0) {
- printf ("Attempt to write non page aligned data\n");
- *length = 0;
- return -EINVAL;
+ if (chip->page_shift == 0) {
+ if (mtd_mod_by_ws(offset, nand) != 0) {
+ printf("Attempt to write non page aligned data\n");
+ *length = 0;
+ return -EINVAL;
+ }
+ } else {
+ if ((offset & (nand->writesize - 1)) != 0) {
+ printf("Attempt to write non page aligned data\n");
+ *length = 0;
+ return -EINVAL;
+ }
}
- need_skip = check_skip_len(nand, offset, *length);
+ need_skip = check_skip_len(nand, offset, *length, max_limit);
if (need_skip < 0) {
- printf ("Attempt to write outside the flash area\n");
+ printf("Attempt to write outside the flash area\n");
*length = 0;
return -EINVAL;
}
- if (!need_skip && !(flags & WITH_DROP_FFS)) {
- rval = nand_write (nand, offset, length, buffer);
+ if (!need_skip && !(flags & WITH_DROP_FFS) && !(flags & WITH_YAFFS_OOB)) {
+ rval = nand_write(nand, offset, length, buffer);
if (rval == 0)
return 0;
*length = 0;
- printf ("NAND write to offset %llx failed %d\n",
- offset, rval);
+ printf("NAND write to offset %llx failed %d\n", offset, rval);
return rval;
}
while (left_to_write > 0) {
- size_t block_offset = offset & (nand->erasesize - 1);
- size_t write_size, truncated_write_size;
+ size_t write_size, truncated_write_size, block_offset;
- WATCHDOG_RESET ();
+ WATCHDOG_RESET();
- if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) {
- printf ("Skip bad block 0x%08llx\n",
- offset & ~(nand->erasesize - 1));
- offset += nand->erasesize - block_offset;
- continue;
+ if (chip->phys_erase_shift == 0) {
+ block_offset = mtd_mod_by_eb(offset, nand);
+
+ if (nand_block_isbad(nand, mtd_div_by_eb(offset, nand) * nand->erasesize)) {
+ printf("Skip bad block 0x%08llx\n",
+ (loff_t)mtd_div_by_eb(offset, nand) * nand->erasesize);
+ offset += nand->erasesize - block_offset;
+ *skip_blocks += 1;
+ continue;
+ }
+ }else {
+ block_offset = offset & (nand->erasesize - 1);
+
+ if (nand_block_isbad(nand, offset & ~(nand->erasesize - 1))) {
+ printf("Skip bad block 0x%08llx\n", offset & ~(nand->erasesize - 1));
+ offset += nand->erasesize - block_offset;
+ *skip_blocks += 1;
+ continue;
+ }
}
if (left_to_write < (blocksize - block_offset))
@@ -564,32 +651,31 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
ops.oobbuf = ops.datbuf + pagesize;
rval = nand->write_oob(nand, offset, &ops);
- if (!rval)
+ if (rval != 0)
break;
offset += pagesize;
p_buffer += pagesize_oob;
}
- }
- else
+ } else
#endif
{
truncated_write_size = write_size;
#ifdef CONFIG_CMD_NAND_TRIMFFS
if (flags & WITH_DROP_FFS)
truncated_write_size = drop_ffs(nand, p_buffer,
- &write_size);
+ &write_size);
#endif
rval = nand_write(nand, offset, &truncated_write_size,
- p_buffer);
+ p_buffer);
offset += write_size;
p_buffer += write_size;
}
if (rval != 0) {
- printf ("NAND write to offset %llx failed %d\n",
- offset, rval);
+ printf("NAND write to offset %llx failed %d\n",
+ offset, rval);
*length -= left_to_write;
return rval;
}
@@ -600,8 +686,358 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
return 0;
}
+#define SPARSE_HEADER_MAJOR_VER 1
+#define SECTOR_SIZE 512
+struct rnftl_oobinfo_t {
+ int16_t sect;
+ int16_t ec; //00, Bad
+ int16_t vtblk; //-1 , free,-2~-10, Snapshot
+ unsigned timestamp:15;
+ unsigned status_page:1;
+ int8_t maigic[4];
+ uint8_t reserved[2];
+};
+
+static int sparse_parse(unsigned char *buffer, sparse_header_t ** header,
+ loff_t max_limit)
+{
+ sparse_header_t *pheader;
+
+ pheader = (sparse_header_t *) buffer;
+ if (pheader->magic != SPARSE_HEADER_MAGIC) {
+ printf("sparse: bad magic.\n");
+ return -1;
+ }
+
+ if (((u64) pheader->total_blks * pheader->blk_sz) > max_limit) {
+ printf("sparse: section size %08llx MB limit: exceeded\n",
+ max_limit / (1024 * 1024));
+ return -1;
+ }
+
+ if ((pheader->major_version != SPARSE_HEADER_MAJOR_VER) ||
+ (pheader->file_hdr_sz != sizeof(sparse_header_t)) ||
+ (pheader->chunk_hdr_sz != sizeof(chunk_header_t))) {
+ printf("sparse: incompatible format\n");
+ return -1;
+ }
+ *header = pheader;
+ return 0;
+}
+
+static int trunk_parse(unsigned char *buffer, sparse_header_t * sparse_header,
+ chunk_header_t ** header)
+{
+ chunk_header_t *pheader;
+
+ pheader = (chunk_header_t *) buffer;
+ if (pheader->chunk_type != CHUNK_TYPE_RAW &&
+ pheader->chunk_type != CHUNK_TYPE_DONT_CARE) {
+ printf("chunk: unknow chunk type:0x%x.\n", pheader->chunk_type);
+ return -1;
+ }
+
+ if (pheader->chunk_sz == 0) {
+ printf("chunk: chunk_sz = 0.\n");
+ return -1;
+ }
+
+ if (pheader->chunk_type == CHUNK_TYPE_RAW &&
+ pheader->total_sz !=
+ (u64) pheader->chunk_sz * sparse_header->blk_sz +
+ sizeof(chunk_header_t)) {
+ printf
+ ("chunk: total_sz error.total_size = 0x%x,chunk_sz = 0x%x.\n",
+ pheader->total_sz, pheader->chunk_sz);
+ return -1;
+ }
+
+ if (pheader->chunk_type == CHUNK_TYPE_DONT_CARE &&
+ pheader->total_sz != sizeof(chunk_header_t)) {
+ printf
+ ("chunk: total_sz error.total_size = 0x%x,chunk_sz = 0x%x.\n",
+ pheader->total_sz, pheader->chunk_sz);
+ return -1;
+ }
+ *header = pheader;
+ return 0;
+}
+
+static int nand_write_nftl(nand_info_t * nand, loff_t offset,
+ unsigned char *buffer, int16_t vt_block,
+ int16_t vt_sect, uint16_t timestamp)
+{
+ int rval;
+ struct mtd_oob_ops ops;
+ struct rnftl_oobinfo_t nftl_oob;
+
+ memset(&ops, 0, sizeof(ops));
+ memset(&nftl_oob, 0, sizeof(nftl_oob));
+ // ops
+ ops.len = nand->writesize;
+ ops.ooblen = sizeof(nftl_oob);
+ ops.mode = MTD_OOB_AUTO;
+ ops.ooboffs = 2;
+ ops.oobbuf = (uint8_t *) & nftl_oob;
+ ops.datbuf = buffer;
+ //nftl_oob
+ nftl_oob.ec = 0;
+ nftl_oob.status_page = 1;
+ memcpy(&(nftl_oob.maigic), "rda", 3);
+ nftl_oob.sect = vt_sect;
+ nftl_oob.vtblk = vt_block;
+ nftl_oob.timestamp = timestamp;
+
+ rval = nand->write_oob(nand, offset, &ops);
+ if (rval != 0) {
+ printf("write_oob fail, rval = %d.\n", rval);
+ return -1;
+ }
+ return 0;
+}
+
+int nand_write_unsparse(nand_info_t * nand, loff_t offset, size_t * length,
+ loff_t max_limit, unsigned char *buffer, int flags,
+ u32 * skip_blocks)
+{
+ int rval = 0;
+ u32 trunk_nr;
+ u64 chunk_len = 0;
+ u64 outlen = 0;
+ loff_t base_offset;
+ uint8_t *page_buffer = NULL;
+ int16_t page_len = 0;
+ int16_t page_per_block;
+ int16_t vt_block = 0;
+ int16_t vt_sect = 0;
+ uint16_t timestamp = 0;
+ sparse_header_t *sparse_h;
+ struct nand_chip *chip = nand->priv;
+
+ printf("nand_write_unsparse begin.\n");
+ printf("offset:0x%08llx.\n", offset);
+ printf("max_limit:0x%08llx.\n", max_limit);
+ printf("flags:0x%x.\n", *length);
+ printf("flags:0x%x.\n", flags);
+ printf("skip_blocks:0x%x.\n", *skip_blocks);
+ base_offset = offset;
+ page_per_block = (nand->erasesize / nand->writesize);
+ rval = sparse_parse(buffer, &sparse_h, max_limit);
+ if (rval) {
+ printf("nand_unsprase: sparse_parse fail.\n");
+ return -1;
+ }
+ buffer += sizeof(sparse_header_t);
+ (*length) -= sizeof(sparse_header_t);
+ page_buffer = malloc(nand->writesize);
+ for (trunk_nr = 0; trunk_nr < sparse_h->total_chunks; trunk_nr++) {
+ chunk_header_t *chunk_h;
+
+ rval = trunk_parse(buffer, sparse_h, &chunk_h);
+ if (rval) {
+ printf("nand_unsprase: trunk_parse fail.\n");
+ free(page_buffer);
+ return -1;
+ }
+ /*
+ printf("trunk:0x%x,0x%x,0x%x.\n",
+ trunk_nr,chunk_h->chunk_type,chunk_h->chunk_sz);
+ */
+ buffer += sizeof(chunk_header_t);
+ (*length) -= sizeof(chunk_header_t);
+ chunk_len = (u64) chunk_h->chunk_sz * (u64) sparse_h->blk_sz;
+ while (chunk_len > 0) {
+ uint8_t *data_buff = page_buffer;
+ if (chunk_h->chunk_type == CHUNK_TYPE_RAW) {
+ memcpy(data_buff + page_len, buffer,
+ SECTOR_SIZE);
+ buffer += SECTOR_SIZE;
+ (*length) -= SECTOR_SIZE;
+ page_len += SECTOR_SIZE;
+ chunk_len -= SECTOR_SIZE;
+
+ } else if (chunk_h->chunk_type == CHUNK_TYPE_DONT_CARE) {
+ if(chunk_len >= (nand->writesize - page_len))
+ chunk_len -= (nand->writesize - page_len);
+ else
+ chunk_len = 0;
+ if (page_len) {
+ printf("write spare data.page_len = 0x%x.\n",
+ page_len);
+ /* memset(data_buff + page_len, 0,nand->writesize - page_len); */
+ } else {
+ /* memset(data_buff, 0,nand->writesize); */
+ data_buff = NULL;
+ }
+ page_len = nand->writesize;
+ } else {
+ printf("nand_unsprase:"
+ "Unknow Trunk type: 0x%x.\n",
+ chunk_h->chunk_type);
+ break;
+ }
+ if (page_len == nand->writesize) {
+ /* skip bad block. */
+ do {
+ size_t block_offset;
+ if (chip->phys_erase_shift == 0) {
+ block_offset = mtd_mod_by_eb(offset, nand);
+ if (nand_block_isbad(nand, mtd_div_by_eb(offset, nand) * nand->erasesize)) {
+ printf("nand_unsprase:Skip bad block 0x%08llx.\n",
+ (loff_t)mtd_div_by_eb(offset, nand) * nand->erasesize);
+ offset += nand->erasesize -block_offset;
+ (*skip_blocks)++;
+ continue;
+ } else {
+ break;
+ }
+ } else {
+ block_offset = offset & (nand->erasesize - 1);
+ if (nand_block_isbad(nand,offset & ~(nand->erasesize - 1))) {
+ printf("nand_unsprase:Skip bad block 0x%08llx.\n",
+ offset & ~(nand->erasesize -1));
+ offset += nand->erasesize -block_offset;
+ (*skip_blocks)++;
+ continue;
+ } else {
+ break;
+ }
+ }
+ } while (1);
+
+ if (offset + nand->writesize >
+ base_offset + max_limit) {
+ printf("nand_unsprase:"
+ "exceed.section max_limit:0x%08llx,offset:0x%08llx.\n",
+ max_limit,
+ offset + nand->writesize -
+ base_offset);
+ free(page_buffer);
+ return -1;
+ }
+ rval = nand_write_nftl(nand, offset, data_buff,
+ vt_block, vt_sect,
+ timestamp);
+ if (rval) {
+ printf("nand_unsprase: nand_write_nftl fail.\n");
+ free(page_buffer);
+ return -1;
+ }
+ page_len = 0;
+ if (vt_sect + 1 == page_per_block) {
+ vt_block++;
+ vt_sect = 0;
+ timestamp = timestamp == 0x7fff ? 0 : timestamp + 1;
+ if ((vt_block % 8) == 0
+ && vt_block >= 8) {
+ printf("write block:0x%x - 0x%x.\n",
+ vt_block - 8, vt_block - 1);
+ }
+ } else {
+ vt_sect++;
+ }
+ offset += nand->writesize;
+ outlen += nand->writesize;
+ }
+ }
+ }
+ if (page_len > 0) {
+ printf("nand_unsprase:last spare data: 0x%x,0x%x,0x%x.\n",
+ vt_block, vt_sect, page_len);
+ /* memset(page_buffer + page_len, 0, nand->writesize - page_len); */
+ if (offset + nand->writesize > base_offset + max_limit) {
+ printf("nand_unsprase:"
+ "exceed max_limit:0x%08llx,offset:0x%08llx.\n",
+ max_limit,
+ offset + nand->writesize - base_offset);
+ free(page_buffer);
+ return -1;
+ }
+ /* skip bad block. */
+ do {
+ size_t block_offset;
+ if (chip->phys_erase_shift == 0) {
+ block_offset = mtd_mod_by_eb(offset, nand);
+ if (nand_block_isbad(nand, mtd_div_by_eb(offset, nand) * nand->erasesize)) {
+ printf("Skip bad block 0x%08llx.\n",
+ (loff_t)mtd_div_by_eb(offset, nand) * nand->erasesize);
+ offset += nand->erasesize - block_offset;
+ (*skip_blocks)++;
+ continue;
+ } else {
+ break;
+ }
+ } else {
+ block_offset = offset & (nand->erasesize - 1);
+ if (nand_block_isbad(nand, offset & ~(nand->erasesize - 1))) {
+ printf("Skip bad block 0x%08llx.\n",
+ offset & ~(nand->erasesize - 1));
+ offset += nand->erasesize - block_offset;
+ (*skip_blocks)++;
+ continue;
+ } else {
+ break;
+ }
+ }
+ } while (1);
+
+ rval = nand_write_nftl(nand, offset, page_buffer,
+ vt_block, vt_sect, timestamp);
+ if (rval) {
+ printf("nand_unsprase: nand_write_nftl fail.\n");
+ free(page_buffer);
+ return -1;
+ }
+ page_len = 0;
+ if (vt_sect + 1 == page_per_block) {
+ vt_block++;
+ vt_sect = 0;
+ timestamp = timestamp == 0x7fff ? 0 : timestamp + 1;
+ } else {
+ vt_sect++;
+ }
+ offset += nand->writesize;
+ outlen += nand->writesize;
+ }
+ if (vt_block % 8) {
+ printf("write block:0x%x - 0x%x,vt_sector:0x%x.\n",
+ vt_block - (vt_block % 8), vt_block, vt_sect);
+ }
+ /*
+ while(offset + nand->writesize <= max_limit)
+ {
+ rval = nand_write_nftl(nand, offset, NULL,
+ vt_block, vt_sect,timestamp);
+ if (rval) {
+ printf("nand_unsprase: nand_write_nftl fail.\n");
+ free(page_buffer);
+ return -1;
+ }
+ if (vt_sect + 1 == page_per_block) {
+ vt_block++;
+ vt_sect = 0;
+ timestamp = timestamp == 0x7fff ?
+ 0 : timestamp + 1;
+ } else {
+ vt_sect++;
+ }
+ offset += nand->writesize;
+ outlen += nand->writesize;
+ }
+ */
+ free(page_buffer);
+ printf("nand_unsprase end.\n");
+ // printf("vt_block:0x%x.\n", vt_block);
+ // printf("vt_sect:0x%x.\n", vt_sect);
+ printf("*length:0x%x.\n", *length);
+ printf("offset:0x%08llx.\n", offset);
+ printf("out-length:0x%08llx.\n", outlen);
+ printf("skip_blocks:0x%x.\n", *skip_blocks);
+ return 0;
+}
+
/**
- * nand_read_skip_bad:
+ * nand_read_skip_bad_new:
*
* Read image from NAND flash.
* Blocks that are marked bad are skipped and the next block is readen
@@ -612,51 +1048,75 @@ int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
* @param offset offset in flash
* @param length buffer length, on return holds remaining bytes to read
* @param buffer buffer to write to
+ * @param skip_block the bad block skipped
* @return 0 in case of success
*/
-int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
- u_char *buffer)
+int nand_read_skip_bad_new(nand_info_t * nand, loff_t offset,
+ size_t * length, u_char * buffer, u32 * skip_blocks)
{
int rval;
size_t left_to_read = *length;
u_char *p_buffer = buffer;
int need_skip;
+ struct nand_chip *chip = nand->priv;
- if ((offset & (nand->writesize - 1)) != 0) {
- printf ("Attempt to read non page aligned data\n");
- *length = 0;
- return -EINVAL;
+ *skip_blocks = 0;
+ if (chip->page_shift == 0) {
+ if (mtd_mod_by_ws(offset, nand) != 0) {
+ printf("Attempt to read non page aligned data\n");
+ *length = 0;
+ return -EINVAL;
+ }
+ } else {
+ if ((offset & (nand->writesize - 1)) != 0) {
+ printf("Attempt to read non page aligned data\n");
+ *length = 0;
+ return -EINVAL;
+ }
}
- need_skip = check_skip_len(nand, offset, *length);
+ need_skip = check_skip_len(nand, offset, *length, 0);
if (need_skip < 0) {
- printf ("Attempt to read outside the flash area\n");
+ printf("Attempt to read outside the flash area\n");
*length = 0;
return -EINVAL;
}
if (!need_skip) {
- rval = nand_read (nand, offset, length, buffer);
+ rval = nand_read(nand, offset, length, buffer);
if (!rval || rval == -EUCLEAN)
return 0;
*length = 0;
- printf ("NAND read from offset %llx failed %d\n",
- offset, rval);
+ printf("NAND read from offset %llx failed %d\n", offset, rval);
return rval;
}
while (left_to_read > 0) {
- size_t block_offset = offset & (nand->erasesize - 1);
+ size_t block_offset;
size_t read_length;
- WATCHDOG_RESET ();
+ WATCHDOG_RESET();
+ if (chip->phys_erase_shift == 0) {
+ block_offset = mtd_mod_by_eb(offset, nand);
- if (nand_block_isbad (nand, offset & ~(nand->erasesize - 1))) {
- printf ("Skipping bad block 0x%08llx\n",
- offset & ~(nand->erasesize - 1));
- offset += nand->erasesize - block_offset;
- continue;
+ if (nand_block_isbad(nand, mtd_div_by_eb(offset, nand) * nand->erasesize)) {
+ printf("Skipping bad block 0x%08llx\n",
+ (loff_t)mtd_div_by_eb(offset, nand) * nand->erasesize);
+ offset += nand->erasesize - block_offset;
+ *skip_blocks += 1;
+ continue;
+ }
+ } else {
+ block_offset = offset & (nand->erasesize - 1);
+
+ if (nand_block_isbad(nand, offset & ~(nand->erasesize - 1))) {
+ printf("Skipping bad block 0x%08llx\n",
+ offset & ~(nand->erasesize - 1));
+ offset += nand->erasesize - block_offset;
+ *skip_blocks += 1;
+ continue;
+ }
}
if (left_to_read < (nand->erasesize - block_offset))
@@ -664,18 +1124,65 @@ int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
else
read_length = nand->erasesize - block_offset;
- rval = nand_read (nand, offset, &read_length, p_buffer);
+ rval = nand_read(nand, offset, &read_length, p_buffer);
if (rval && rval != -EUCLEAN) {
- printf ("NAND read from offset %llx failed %d\n",
- offset, rval);
+ printf("NAND read from offset %llx failed %d\n",
+ offset, rval);
*length -= left_to_read;
return rval;
}
left_to_read -= read_length;
- offset += read_length;
- p_buffer += read_length;
+ offset += read_length;
+ p_buffer += read_length;
}
return 0;
}
+
+/**
+ * nand_write_skip_bad:
+ *
+ * Write image to NAND flash.
+ * Blocks that are marked bad are skipped and the is written to the next
+ * block instead as long as the image is short enough to fit even after
+ * skipping the bad blocks.
+ *
+ * @param nand NAND device
+ * @param offset offset in flash
+ * @param length buffer length
+ * @param buffer buffer to read from
+ * @param flags flags modifying the behaviour of the write to NAND
+ * @return 0 in case of success
+ */
+int nand_write_skip_bad(nand_info_t * nand, loff_t offset, size_t * length,
+ u_char * buffer, int flags)
+{
+ u32 bad_blocks = 0;
+
+ return nand_write_skip_bad_new(nand, offset, length, 0,
+ buffer, flags, &bad_blocks);
+}
+
+/**
+ * nand_read_skip_bad:
+ *
+ * Read image from NAND flash.
+ * Blocks that are marked bad are skipped and the next block is readen
+ * instead as long as the image is short enough to fit even after skipping the
+ * bad blocks.
+ *
+ * @param nand NAND device
+ * @param offset offset in flash
+ * @param length buffer length, on return holds remaining bytes to read
+ * @param buffer buffer to write to
+ * @return 0 in case of success
+ */
+int nand_read_skip_bad(nand_info_t * nand, loff_t offset, size_t * length,
+ u_char * buffer)
+{
+ u32 bad_blocks = 0;
+
+ return nand_read_skip_bad_new(nand, offset, length, buffer,
+ &bad_blocks);
+}
diff --git a/drivers/mtd/nand/rda_nand.c b/drivers/mtd/nand/rda_nand.c
new file mode 100644
index 0000000000..54bb77bc73
--- /dev/null
+++ b/drivers/mtd/nand/rda_nand.c
@@ -0,0 +1,12 @@
+#include <common.h>
+
+#ifdef CONFIG_NAND_RDA_V1
+#include "rda_nand_v1.c"
+#elif defined(CONFIG_NAND_RDA_V2)
+#include "rda_nand_v2.c"
+#elif defined(CONFIG_NAND_RDA_V3)
+#include "rda_nand_v3.c"
+#else
+#error "undefined RDA NAND Controller Version"
+#endif
+
diff --git a/drivers/mtd/nand/rda_nand_base.c b/drivers/mtd/nand/rda_nand_base.c
new file mode 100644
index 0000000000..ae3d01fd49
--- /dev/null
+++ b/drivers/mtd/nand/rda_nand_base.c
@@ -0,0 +1,95 @@
+#include <common.h>
+#include <asm/types.h>
+#include <nand.h>
+
+#include <asm/errno.h>
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <mtd/nand/rda_nand.h>
+extern int rda_nand_init(struct nand_chip *nand);
+extern int rda_spi_nand_init(struct nand_chip *nand);
+
+int board_nand_init(struct nand_chip *chip) __attribute__ ((weak));
+
+static int flash_intf_spi = 0;
+
+#if defined(CONFIG_MACH_RDA8810)
+int board_nand_init(struct nand_chip *chip)
+{
+ u16 hwcfg = rda_hwcfg_get();
+ u16 metal_id = rda_metal_id_get();
+
+ if (!(hwcfg & RDA_HW_CFG_BIT_3) && (hwcfg & RDA_HW_CFG_BIT_2)) {
+ printf("metal %d hwcfg %x, use eMMC, skip nand init\n",
+ metal_id, hwcfg);
+ return -ENODEV;
+ }
+
+ if ((metal_id >= 7) && (hwcfg & RDA_HW_CFG_BIT_3)) {
+ printf("metal %d hwcfg %x, use SPI NAND\n",
+ metal_id, hwcfg);
+ flash_intf_spi = 1;
+ return rda_spi_nand_init(chip);
+ } else {
+ printf("metal %d hwcfg %x, use NAND\n",
+ metal_id, hwcfg);
+ return rda_nand_init(chip);
+ }
+}
+#else /* 8810H*/
+#if defined(CONFIG_MACH_RDA8810H)
+int board_nand_init(struct nand_chip *chip)
+{
+ u16 hwcfg = rda_hwcfg_get();
+ u16 metal_id = rda_metal_id_get();
+ enum media_type media = rda_media_get();
+
+ if (media == MEDIA_MMC) {
+ printf("metal %d hwcfg %x, use eMMC, skip nand init\n",
+ metal_id, hwcfg);
+ return -ENODEV;
+ } else if (media == MEDIA_SPINAND) {
+ printf("metal %d hwcfg %x, use SPI NAND\n",
+ metal_id, hwcfg);
+ flash_intf_spi = 1;
+ return rda_spi_nand_init(chip);
+ } else if (media == MEDIA_NAND) {
+ printf("metal %d hwcfg %x, use NAND\n",
+ metal_id, hwcfg);
+ return rda_nand_init(chip);
+ } else {
+ printf("invalid bootmode:hwcfg=0x%x\n", hwcfg);
+ return -ENODEV;
+ }
+}
+#else /* 8810E, 8820, 8850, 8850e */
+int board_nand_init(struct nand_chip *chip)
+{
+ u16 hwcfg = rda_hwcfg_get();
+ u16 metal_id = rda_metal_id_get();
+
+ if (!(hwcfg & RDA_HW_CFG_BIT_3) && (hwcfg & RDA_HW_CFG_BIT_2)) {
+ printf("metal %d hwcfg %x, use eMMC, skip nand init\n",
+ metal_id, hwcfg);
+ return -ENODEV;
+ }
+
+ if (hwcfg & RDA_HW_CFG_BIT_3) {
+ printf("metal %d hwcfg %x, use SPI NAND\n",
+ metal_id, hwcfg);
+ flash_intf_spi = 1;
+ return rda_spi_nand_init(chip);
+ } else {
+ printf("metal %d hwcfg %x, use NAND\n",
+ metal_id, hwcfg);
+ return rda_nand_init(chip);
+ }
+}
+#endif
+#endif
+
+int rda_flash_intf_is_spi(void)
+{
+ return flash_intf_spi;
+}
diff --git a/drivers/mtd/nand/rda_nand_v1.c b/drivers/mtd/nand/rda_nand_v1.c
new file mode 100644
index 0000000000..d485721283
--- /dev/null
+++ b/drivers/mtd/nand/rda_nand_v1.c
@@ -0,0 +1,1661 @@
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/types.h>
+#include <nand.h>
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_nand.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <mtd/nand/rda_nand.h>
+
+#include <rda/tgt_ap_board_config.h>
+#include <rda/tgt_ap_clock_config.h>
+#include <rda/tgt_ap_flash_parts.h>
+
+#ifdef CONFIG_SPL_BUILD
+#undef CONFIG_NAND_RDA_DMA
+#endif
+
+#ifdef CONFIG_NAND_RDA_DMA
+#include <asm/dma-mapping.h>
+#include <asm/arch/dma.h>
+#endif
+
+//#define NAND_DEBUG
+//#define NAND_DEBUG_VERBOSE
+
+#if (_TGT_NAND_TYPE_ == _PARALLEL_NAND_USED_)
+
+#define hal_gettime get_ticks
+#define SECOND * CONFIG_SYS_HZ_CLOCK
+#define NAND_TIMEOUT ( 2 SECOND )
+#define PLL_BUS_FREQ (_TGT_AP_PLL_BUS_FREQ * 1000000)
+
+/***********************nand global buffer define ************************/
+/******************for 8810 support 8k/16k nand flash*********************/
+#ifdef CONFIG_SPL_BUILD
+/*sram space is not enough, so use sdram space as middle data buffer*/
+static u8 *g_nand_flash_temp_buffer = (u8 *)CONFIG_SPL_NAND_MIDDLE_DATA_BUFFER;
+#else
+#define NAND_FLASH_PHYSICAL_PAGE_SIZE 16384
+#define NAND_FLASH_PHYSICAL_SPARE_SIZE 1280
+static u8 g_nand_flash_temp_buffer[NAND_FLASH_PHYSICAL_PAGE_SIZE + \
+ NAND_FLASH_PHYSICAL_SPARE_SIZE] __attribute__ ((__aligned__(64)));
+#endif
+//#define NAND_CONTROLLER_BUFFER_DATA_SIZE 4096
+//#define NAND_CONTROLLER_BUFFER_OOB_SIZE 224
+#define NAND_CONTROLLER_TEMP_BUFFER_SIZE 4320
+
+/*when system use ext4+ftl mode, FTL oob struct is 12bytes, and is stored in flash OOB space.*/
+/*the nand page size use 3K bytes data + 128 bytes oob, or 6k bytes data + 256 bytes oob, or*/
+/*12k bytes data + 512 bytes oob. but nand controller has hardware ecc error,only could 3K ecc*/
+/*in 4k byte, so OOB could not be ecc protecked. But maybe have some error bits in this space,*/
+/*so the method is: copy FTL oob struct 12 bytes + 4 bytes checksum several times in oob space,*/
+/*when read, find the first right checksum data, then use this array data. */
+#define __FTL_OOB_STRUCT_LENGTH__ 12 //bytes, when FTL oob struct add member, this sould increase.
+#define OOB_SW_PROTECT_SWITCH_ON 1
+
+/* clock division value map */
+const static u8 clk_div_map[] = {
+ 4*60, /* 0 */
+ 4*60, /* 1 */
+ 4*60, /* 2 */
+ 4*60, /* 3 */
+ 4*60, /* 4 */
+ 4*60, /* 5 */
+ 4*60, /* 6 */
+ 4*60, /* 7 */
+ 4*40, /* 8 */
+ 4*30, /* 9 */
+ 4*24, /* 10 */
+ 4*20, /* 11 */
+ 4*17, /* 12 */
+ 4*15, /* 13 */
+ 4*13, /* 14 */
+ 4*12, /* 15 */
+ 4*11, /* 16 */
+ 4*10, /* 17 */
+ 4*9, /* 18 */
+ 4*8, /* 19 */
+ 4*7, /* 20 */
+ 4*13/2, /* 21 */
+ 4*6, /* 22 */
+ 4*11/2, /* 23 */
+ 4*5, /* 24 */
+ 4*9/2, /* 25 */
+ 4*4, /* 26 */
+ 4*7/2, /* 27 */
+ 4*3, /* 28 */
+ 4*5/2, /* 29 */
+ 4*2, /* 30 */
+ 4*1, /* 31 */
+};
+
+static struct nand_ecclayout rda_nand_oob_64 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 62} }
+};
+
+static struct nand_ecclayout rda_nand_oob_128 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 126} }
+};
+
+static struct nand_ecclayout rda_nand_oob_256 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 254} }
+};
+
+static struct nand_ecclayout rda_nand_oob_512 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 510} }
+};
+
+extern void rda_dump_buf(char *data, size_t len);
+
+#if (OOB_SW_PROTECT_SWITCH_ON == 1)
+static uint32_t nand_checksum32( unsigned char* data, uint32_t data_size)
+{
+ uint32_t checksum = 0;
+ uint32_t i;
+
+ for(i = 0; i < data_size; i++)
+ checksum = ((checksum << 31) | (checksum >> 1)) + (uint32_t)data[i];
+
+ return checksum;
+}
+
+struct select_data{
+ u8 data;
+ u8 count;
+};
+
+static void nand_sw_ecc_check(u8 * buf, u8 *dst, u8 copy_number, u8 array_length)
+{
+ u8 i, j, k, m;
+ struct select_data select[30];
+ u8 temp;
+
+ for(i = 0; i < array_length; i++){
+ m = 0;
+ select[m].data = buf[i];
+ select[m].count = 1;
+ for(j = 1; j < copy_number; j++){
+ k = 0;
+ while(1){
+ if(select[k].data == buf[i + j * (array_length + 4)]){
+ select[k].count++;
+ break;
+ }
+
+ if(k >= m){
+ select[m+1].data = buf[i + j * (array_length + 4)];
+ select[m+1].count = 1;
+ m++;
+ break;
+ }
+ k++;
+ }
+ }
+
+ temp = select[0].count;
+ dst[i] = select[0].data;
+ for(j = 1; j <= m; j++){
+ if(select[j].count > temp){
+ dst[i] = select[j].data;
+ temp = select[j].count;
+ }
+ }
+ }
+}
+#endif
+
+static void hal_send_cmd(unsigned char cmd, unsigned int page_addr)
+{
+ unsigned long cmd_reg;
+
+ cmd_reg = NANDFC_DCMD(cmd) | NANDFC_PAGE_ADDR(page_addr);
+#ifdef NAND_DEBUG
+ printf(" hal_send_cmd 0x%08lx\n", cmd_reg);
+#endif
+ __raw_writel(cmd_reg, NANDFC_REG_DCMD_ADDR);
+}
+
+static void hal_set_col_addr(unsigned int col_addr)
+{
+ __raw_writel(col_addr, NANDFC_REG_COL_ADDR);
+}
+
+static void hal_set_col_cmd(unsigned int col_cmd)
+{
+ __raw_writel(0x50010000 |col_cmd, NANDFC_REG_CMD_DEF_B);
+}
+
+static void hal_flush_buf(struct mtd_info *mtd)
+{
+ /*
+ there is no reg NANDFC_REG_BUF_CTRL
+ */
+ //__raw_writel(0x7, NANDFC_REG_BUF_CTRL);
+}
+
+static unsigned long hal_wait_cmd_complete(void)
+{
+ unsigned long int_stat;
+ unsigned long long wait_time = NAND_TIMEOUT;
+ unsigned long long start_time = hal_gettime();
+ int timeout = 0;
+
+ /* wait done */
+ do {
+ int_stat = __raw_readl(NANDFC_REG_INT_STAT);
+ if (hal_gettime() - start_time >= wait_time) {
+ timeout = 1;
+ }
+ } while (!(int_stat & NANDFC_INT_DONE) && !timeout);
+
+ /* to clear */
+ __raw_writel(int_stat & NANDFC_INT_CLR_MASK, NANDFC_REG_INT_STAT);
+
+ if (timeout) {
+ printf("nand error, cmd timeout\n");
+ return -ETIME;
+ }
+
+ if (int_stat & NANDFC_INT_ERR_ALL) {
+ printf("nand error, int_stat = %lx\n", int_stat);
+ return (int_stat & NANDFC_INT_ERR_ALL);
+ }
+ return 0;
+}
+
+static int init_nand_info(struct rda_nand_info *info,
+ int nand_type, int bus_width_16)
+{
+ info->type = nand_type;
+ switch (nand_type) {
+ case NAND_TYPE_2KL:
+ info->hard_ecc_hec = 0;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 11;
+ info->oob_size = 64;
+ info->page_num_per_block = 64;
+ info->vir_page_size = 2048;
+ info->vir_page_shift = 11;
+ info->vir_oob_size = 64;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 0;
+ break;
+#if(__TGT_AP_FLASH_USE_PART_OF_PAGE__ == 1)
+ case NAND_TYPE_MLC4K:
+ info->hard_ecc_hec = 1;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 12;
+ info->oob_size = 224;
+ info->page_num_per_block = 256;
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_4KAS2K_PAGE_DIV__)
+ info->vir_page_size = 2048;
+ info->vir_oob_size = 64;
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_4KAS3K_PAGE_DIV__)
+ info->vir_page_size = 3072;
+ info->vir_oob_size = 128;
+#endif
+#endif
+ info->vir_page_shift = 0;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 0;
+ break;
+#else
+ case NAND_TYPE_MLC4K:
+ info->hard_ecc_hec = 1;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 12;
+ info->oob_size = 224;
+ info->page_num_per_block = 256;
+ info->vir_page_size = 2048;
+ info->vir_page_shift = 11;
+ info->vir_oob_size = 64;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 0;
+ break;
+#endif
+ case NAND_TYPE_SLC4K:
+ info->hard_ecc_hec = 0;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 12;
+ /* slc 4k, u-boot kernel yaffs use 128 oob */
+ info->oob_size = 128;
+#ifdef _TGT_AP_NAND_DISABLE_HEC
+ /* this flag also implies using MLC */
+ info->page_num_per_block = 256;
+#else
+ info->page_num_per_block = 64;
+#endif
+ info->vir_page_size = 4096;
+ info->vir_page_shift = 12;
+ info->vir_oob_size = 128;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 0;
+ break;
+#if(__TGT_AP_FLASH_USE_PART_OF_PAGE__ == 1)
+ case NAND_TYPE_MLC8K:
+ info->hard_ecc_hec = 1;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 13;
+ info->oob_size = 744;
+ info->page_num_per_block = 256;
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_8KAS6K_PAGE_DIV__)
+ info->vir_page_size = 6144;
+ info->vir_oob_size = 256;
+ info->nand_use_type = 1;
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_8KAS4K_PAGE_DIV__)
+ info->vir_page_size = 4096;
+ info->vir_oob_size = 128;
+ info->nand_use_type = 1;
+#endif
+#endif
+ info->vir_page_shift = 0;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ break;
+#else
+ case NAND_TYPE_MLC8K:
+ info->hard_ecc_hec = 1;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 13;
+ info->oob_size = 744;
+ info->page_num_per_block = 256;
+ info->vir_page_size = 4096;
+ info->vir_page_shift = 12;
+ info->vir_oob_size = 128;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 1;
+ break;
+#endif
+ case NAND_TYPE_SLC8K:
+ info->hard_ecc_hec = 0;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 13;
+ info->oob_size = 744;
+ info->page_num_per_block = 256;
+ info->vir_page_size = 8192;
+ info->vir_page_shift = 13;
+ info->vir_oob_size = 256;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 1;
+ break;
+#if(__TGT_AP_FLASH_USE_PART_OF_PAGE__ == 1)
+ case NAND_TYPE_MLC16K:
+ info->hard_ecc_hec = 1;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 14;
+ info->oob_size = 1280;
+ info->page_num_per_block = 256;
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_16KAS8K_PAGE_DIV__)
+ info->vir_page_size = 8192;
+ info->vir_oob_size = 256;
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_16KAS12K_PAGE_DIV__)
+ info->vir_page_size = 12288;
+ info->vir_oob_size = 512;
+#endif
+#endif
+ info->vir_page_shift = 0;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 3;
+ break;
+#else
+ case NAND_TYPE_MLC16K:
+ info->hard_ecc_hec = 1;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 14;
+ info->oob_size = 1280;
+ info->page_num_per_block = 256;
+ info->vir_page_size = 8192;
+ info->vir_page_shift = 13;
+ info->vir_oob_size = 256;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 3;
+ break;
+#endif
+ case NAND_TYPE_SLC16K:
+ info->hard_ecc_hec = 0;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 14;
+ info->oob_size = 1280;
+ info->page_num_per_block = 256;
+ info->vir_page_size = 16384;
+ info->vir_page_shift = 14;
+ info->vir_oob_size = 512;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ info->nand_use_type = 3;
+ break;
+ default:
+ printf("invalid nand type\n");
+ return -EINVAL;
+ }
+
+ info->logic_page_size = info->vir_page_size / (info->nand_use_type + 1);
+ info->logic_oob_size = info->vir_oob_size / (info->nand_use_type + 1);
+ return 0;
+}
+
+static u32 cal_freq_by_divreg(u32 basefreq, u32 reg, u32 div2)
+{
+ u32 newfreq;
+
+ if (reg >= ARRAY_SIZE(clk_div_map)) {
+ printf("nand:Invalid div reg: %u\n", reg);
+ reg = ARRAY_SIZE(clk_div_map) - 1;
+ }
+ /* Assuming basefreq is smaller than 2^31 (2.147G Hz) */
+ newfreq = (basefreq << (div2 ? 0 : 1)) / (clk_div_map[reg] >> 1);
+ return newfreq;
+}
+
+unsigned long get_master_clk_rate(u32 reg)
+{
+ u32 div2;
+ unsigned long rate;
+
+ div2 = reg & SYS_CTRL_AP_AP_APB2_SRC_SEL;
+ reg = GET_BITFIELD(reg, SYS_CTRL_AP_AP_APB2_FREQ);
+ rate = cal_freq_by_divreg(PLL_BUS_FREQ, reg, div2);
+
+ return rate;
+}
+
+static unsigned long rda_nand_cld_div_tbl[16] = {
+ 3, 4, 5, 6, 7, 8, 9, 10,
+ 12, 14, 16, 18, 20, 22, 24, 28
+};
+
+static unsigned long hal_calc_divider(struct rda_nand_info *info)
+{
+ unsigned long mclk = info->master_clk;
+ unsigned long div, clk_div;
+ int i;
+
+ div = mclk / info->clk;
+ if (mclk % info->clk)
+ div += 1;
+
+ if (div < 7) {
+ /* 7 is minimal divider by hardware */
+ div = 7;
+ }
+
+ for (i=0;i<16;i++) {
+ if(div <= rda_nand_cld_div_tbl[i]) {
+ clk_div = i;
+ break;
+ }
+ }
+
+ if (i>=16) {
+ clk_div = 15;
+ }
+
+ //printf("NAND: div:%ld, clk_div:%ld\n", div, clk_div);
+ return clk_div;
+}
+
+static int hal_init(struct rda_nand_info *info)
+{
+ unsigned long config_a, config_b;
+ unsigned long clk_div=hal_calc_divider(info);
+
+ // clk_div = 4; // for APB2 = 48MHz, 48/7
+ //clk_div = 11; // for APB2 = 120MHz, 120/18
+ //clk_div = 15; // for APB2 = 240MHz, 240/28
+
+ /* setup config_a and config_b */
+ config_a = NANDFC_CYCLE(clk_div);
+ config_b = 0;
+ config_a |= NANDFC_CHIP_SEL(0x0e);
+ config_a |= NANDFC_POLARITY_IO(0); // set 0 invert IO
+ config_a |= NANDFC_POLARITY_MEM(1); // set 1 invert MEM
+
+ switch (info->type) {
+ case NAND_TYPE_512S:
+ case NAND_TYPE_512L:
+ printf("Not support 512 nand any more\n");
+ return 1;
+ case NAND_TYPE_2KS:
+ config_a |= NANDFC_TIMING(0x7B);
+ break;
+ case NAND_TYPE_2KL:
+ case NAND_TYPE_MLC2K:
+ config_a |= NANDFC_TIMING(0x8B);
+ break;
+ case NAND_TYPE_MLC4K:
+ case NAND_TYPE_SLC4K:
+ config_a |= NANDFC_TIMING(0x8C);
+ break;
+ case NAND_TYPE_MLC8K:
+ case NAND_TYPE_SLC8K:
+ config_a |= NANDFC_TIMING(0x8c);
+ config_b |= 0x20;
+ break;
+ case NAND_TYPE_MLC16K:
+ case NAND_TYPE_SLC16K:
+ config_a |= NANDFC_TIMING(0x8c) | (0x00 << 20);
+ config_b |= 0x10;
+ break;
+ default:
+ printf("invalid nand type\n");
+ return -EINVAL;
+ }
+
+ //enable the 16bit mode;
+ if (info->bus_width_16)
+ config_a |= NANDFC_WDITH_16BIT(1);
+
+ config_b |= NANDFC_HWECC(1);
+ if (info->hard_ecc_hec)
+ config_b |= NANDFC_ECC_MODE(0x02);
+ __raw_writel(config_a, NANDFC_REG_CONFIG_A);
+ __raw_writel(config_b, NANDFC_REG_CONFIG_B);
+
+ /* set readid type, 0x06 for 8 bytes ID */
+ __raw_writel(0x6, NANDFC_REG_IDTPYE);
+
+#ifdef _TGT_AP_NAND_READDELAY
+ {
+ unsigned int delay;
+ /* Set an interval of filter for erasing operation. */
+ delay = __raw_readl(NANDFC_REG_DELAY);
+ delay &= ~0xffff;
+ delay |= _TGT_AP_NAND_READDELAY;
+ __raw_writel(delay, NANDFC_REG_DELAY);
+ printf("Nand delay : 0x%x .\n", (delay & 0xffff));
+ }
+#endif /* #if _TGT_AP_NAND_READDELAY */
+ printf("Nand Init Done, %08lx %08lx\n", config_a, config_b);
+
+ return 0;
+}
+
+static u8 nand_rda_read_byte(struct mtd_info *mtd)
+{
+ u8 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *((u8 *) info->byte_buf + info->index);
+ info->index++;
+#ifdef NAND_DEBUG
+ printf("nand_read_byte, ret = %02x\n", ret);
+#endif
+ return ret;
+}
+
+static u16 nand_rda_read_word(struct mtd_info *mtd)
+{
+ u16 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *(u16 *) ((uint8_t *) info->byte_buf + info->index);
+ info->index += 2;
+#ifdef NAND_DEBUG
+ printf("nand_read_word, ret = %04x\n", ret);
+#endif
+ return ret;
+}
+
+#ifdef CONFIG_NAND_RDA_DMA
+static void nand_rda_dma_move_data(struct mtd_info *mtd, uint8_t * dst, uint8_t * src,
+ int len, enum dma_data_direction dir)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t dst_phys_addr, src_phys_addr;
+ void *dst_addr = (void *)dst;
+ void *src_addr = (void *)src;
+ int ret = 0;
+
+ if (((u32)dst_addr & 0x7) != 0 || ((u32)src_addr & 0x7) != 0) {
+ printf("ERROR, nand dma read buffer dst %p or src %p is not 8bytes aligned\n",
+ dst_addr, src_addr);
+ return;
+ }
+
+ if(dir == DMA_FROM_DEVICE){
+ dst_phys_addr = dma_map_single(dst_addr, len, DMA_FROM_DEVICE);
+ src_phys_addr = (dma_addr_t)src;
+ }
+ else if(dir == DMA_TO_DEVICE){
+ dst_phys_addr = (dma_addr_t)dst;
+ src_phys_addr = dma_map_single(src_addr, len, DMA_TO_DEVICE);
+ }
+ else{
+ dst_phys_addr = dma_map_single(dst_addr, len, DMA_BIDIRECTIONAL);
+ src_phys_addr = dma_map_single(src_addr, len, DMA_BIDIRECTIONAL);
+ }
+
+ dma_param.src_addr = src_phys_addr;
+ dma_param.dst_addr = dst_phys_addr;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FR_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda nand : DMA failed to set parameter!\n");
+ if(dir == DMA_FROM_DEVICE)
+ dma_unmap_single(dst_addr, len, DMA_FROM_DEVICE);
+ else if(dir == DMA_TO_DEVICE)
+ dma_unmap_single(src_addr, len, DMA_TO_DEVICE);
+ else{
+ dma_unmap_single(dst_addr, len, DMA_BIDIRECTIONAL);
+ dma_unmap_single(src_addr, len, DMA_BIDIRECTIONAL);
+ }
+ return;
+ }
+
+ /* use flush to avoid annoying unaligned warning */
+ /* however, invalidate after the dma it the right thing to do */
+ if(dir == DMA_FROM_DEVICE)
+ flush_dcache_range((u32)dst_addr, (u32)(dst_addr + len));
+ else if(dir == DMA_TO_DEVICE)
+ flush_dcache_range((u32)src_addr, (u32)(src_addr + len));
+ else{
+ flush_dcache_range((u32)dst_addr, (u32)(dst_addr + len));
+ flush_dcache_range((u32)src_addr, (u32)(src_addr + len));
+ }
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* use flush to avoid annoying unaligned warning */
+ //invalidate_dcache_range((u32)addr, (u32)(addr + len));
+
+ /* Free the specified physical address */
+ if(dir == DMA_FROM_DEVICE)
+ dma_unmap_single(dst_addr, len, DMA_FROM_DEVICE);
+ else if(dir == DMA_TO_DEVICE)
+ dma_unmap_single(src_addr, len, DMA_TO_DEVICE);
+ else{
+ dma_unmap_single(dst_addr, len, DMA_BIDIRECTIONAL);
+ dma_unmap_single(src_addr, len, DMA_BIDIRECTIONAL);
+ }
+}
+#endif/*CONFIG_NAND_RDA_DMA*/
+
+static void nand_rda_logic_read_cache(struct mtd_info *mtd)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ unsigned long cmd_ret;
+
+ hal_set_col_addr(info->col_addr);
+ hal_send_cmd((unsigned char)info->cmd, info->page_addr);
+ cmd_ret = hal_wait_cmd_complete();
+ if (cmd_ret) {
+ printf("logic read fail, cmd = %x, page_addr = %x, col_addr = %x\n",
+ info->cmd, info->page_addr, info->col_addr);
+ }
+}
+
+static void nand_rda_read_cache(struct mtd_info *mtd)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_R);
+ u8 *u_nand_temp_buffer = &g_nand_flash_temp_buffer[0];
+
+ if(info->nand_use_type > 0){
+#ifndef CONFIG_NAND_RDA_DMA
+ memcpy((void *)u_nand_temp_buffer,
+ (void *)nand_ptr,
+ info->logic_page_size);
+ memcpy((void *)(u_nand_temp_buffer + mtd->writesize),
+ (void *)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size);
+#else
+ nand_rda_dma_move_data(mtd,
+ u_nand_temp_buffer,
+ nand_ptr,
+ info->logic_page_size,
+ DMA_FROM_DEVICE);
+ nand_rda_dma_move_data(mtd,
+ (uint8_t*)(u_nand_temp_buffer + mtd->writesize),
+ (uint8_t*)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size,
+ DMA_FROM_DEVICE);
+#endif
+ //printf("\nread chip buffer0:\n");
+ //rda_dump_buf(nand_ptr, 4320);
+
+ info->col_addr += NAND_CONTROLLER_TEMP_BUFFER_SIZE;
+ hal_set_col_cmd(0xe0);
+ info->cmd = NAND_CMD_RNDOUT;
+ nand_rda_logic_read_cache(mtd);
+
+#ifndef CONFIG_NAND_RDA_DMA
+ memcpy((void *)(u_nand_temp_buffer + info->logic_page_size),
+ (void *)nand_ptr,
+ info->logic_page_size);
+ memcpy((void *)(u_nand_temp_buffer + mtd->writesize + info->logic_oob_size),
+ (void *)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size);
+#else
+ nand_rda_dma_move_data(mtd,
+ (uint8_t*)(u_nand_temp_buffer + info->logic_page_size),
+ nand_ptr,
+ info->logic_page_size,
+ DMA_FROM_DEVICE);
+ nand_rda_dma_move_data(mtd,
+ (uint8_t*)(u_nand_temp_buffer + mtd->writesize + info->logic_oob_size),
+ (uint8_t*)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size,
+ DMA_FROM_DEVICE);
+#endif
+
+ //printf("\nread chip buffer1:\n");
+ //rda_dump_buf(nand_ptr, 4320);
+ if(info->type == NAND_TYPE_SLC16K || info->type == NAND_TYPE_MLC16K){
+ info->col_addr += NAND_CONTROLLER_TEMP_BUFFER_SIZE;
+ nand_rda_logic_read_cache(mtd);
+
+#ifndef CONFIG_NAND_RDA_DMA
+ memcpy((void *)(u_nand_temp_buffer + info->logic_page_size * 2),
+ (void *)nand_ptr,
+ info->logic_page_size);
+ memcpy((void *)(u_nand_temp_buffer + mtd->writesize + info->logic_oob_size * 2),
+ (void *)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size);
+#else
+ nand_rda_dma_move_data(mtd,
+ (uint8_t*)(u_nand_temp_buffer + info->logic_page_size * 2),
+ nand_ptr,
+ info->logic_page_size,
+ DMA_FROM_DEVICE);
+ nand_rda_dma_move_data(mtd,
+ (uint8_t*)(u_nand_temp_buffer + mtd->writesize + info->logic_oob_size * 2),
+ (uint8_t*)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size,
+ DMA_FROM_DEVICE);
+#endif
+
+ info->col_addr += NAND_CONTROLLER_TEMP_BUFFER_SIZE;
+ nand_rda_logic_read_cache(mtd);
+
+#ifndef CONFIG_NAND_RDA_DMA
+ memcpy((void *)(u_nand_temp_buffer + info->logic_page_size * 3),
+ (void *)nand_ptr,
+ info->logic_page_size);
+ memcpy((void *)(u_nand_temp_buffer + mtd->writesize + info->logic_oob_size * 3),
+ (void *)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size);
+#else
+ nand_rda_dma_move_data(mtd,
+ (uint8_t*)(u_nand_temp_buffer + info->logic_page_size * 3),
+ nand_ptr,
+ info->logic_page_size,
+ DMA_FROM_DEVICE);
+ nand_rda_dma_move_data(mtd,
+ (uint8_t*)(u_nand_temp_buffer + mtd->writesize + info->logic_oob_size * 3),
+ (uint8_t*)(nand_ptr + info->logic_page_size),
+ info->logic_oob_size,
+ DMA_FROM_DEVICE);
+#endif
+ }
+ hal_set_col_cmd(0x30);
+ hal_set_col_addr(0);
+ }
+}
+
+static void nand_rda_read_buf(struct mtd_info *mtd, uint8_t * buf, int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_R + info->read_ptr);
+ u8 *u_nand_temp_buffer = &g_nand_flash_temp_buffer[info->read_ptr];
+#if (OOB_SW_PROTECT_SWITCH_ON == 1)
+ uint8_t *oob_temp_ptr = &g_nand_flash_temp_buffer[16384+512];
+ uint8_t oob_byte_count = 2 + __FTL_OOB_STRUCT_LENGTH__ + 2 + 4;
+ uint8_t oob_copy_number = info->vir_oob_size / oob_byte_count;
+ uint32_t checksum, checksum_load;
+ u8 i;
+#endif
+
+#ifdef NAND_DEBUG
+ printf("read : buf addr = 0x%p, len = %d, read_ptr = %d\n", buf, len,
+ info->read_ptr);
+#endif /* NAND_DEBUG */
+
+#if 1//ndef CONFIG_NAND_RDA_DMA
+ if(info->nand_use_type > 0){
+#if (OOB_SW_PROTECT_SWITCH_ON == 1)
+ memset(oob_temp_ptr, 0xff, info->vir_oob_size);
+ if(info->read_ptr > 0){
+ if(info->vir_page_size == 6144 || info->vir_page_size == 12288){
+ for(i = 0; i < oob_copy_number; i++){
+ u32 index = i * oob_byte_count + oob_byte_count;
+
+ checksum = nand_checksum32(&u_nand_temp_buffer[i * oob_byte_count],
+ oob_byte_count - 4);
+ checksum_load = u_nand_temp_buffer[index - 4];
+ checksum_load |= u_nand_temp_buffer[index - 3] << 8;
+ checksum_load |= u_nand_temp_buffer[index - 2] << 16;
+ checksum_load |= u_nand_temp_buffer[index - 1] << 24;
+ if(checksum == checksum_load || checksum_load == ~0x0){
+ memcpy(oob_temp_ptr,
+ &u_nand_temp_buffer[i * oob_byte_count],
+ oob_byte_count);
+ break;
+ }
+ }
+ if(i == oob_copy_number){
+ printf("6k or 12k oob ecc warning, data select!!!! \n");
+ nand_sw_ecc_check(u_nand_temp_buffer,
+ oob_temp_ptr,
+ oob_copy_number,
+ oob_byte_count - 4);
+ }
+
+ u_nand_temp_buffer = oob_temp_ptr;
+ }
+ }
+#endif
+ memcpy((void *)buf, (void *)u_nand_temp_buffer, len);
+ }else{
+#if (OOB_SW_PROTECT_SWITCH_ON == 1)
+ if(info->read_ptr > 0){
+ if(info->vir_page_size == 3072){
+ for(i = 0; i < oob_copy_number; i++){
+ u32 index = i * oob_byte_count + oob_byte_count;
+
+ checksum = nand_checksum32(&nand_ptr[i * oob_byte_count],
+ oob_byte_count - 4);
+ checksum_load = nand_ptr[index - 4];
+ checksum_load |= nand_ptr[index - 3] << 8;
+ checksum_load |= nand_ptr[index - 2] << 16;
+ checksum_load |= nand_ptr[index - 1] << 24;
+ if(checksum == checksum_load || checksum_load == ~0x0){
+ memcpy(oob_temp_ptr, &nand_ptr[i * oob_byte_count], oob_byte_count);
+ break;
+ }
+ }
+ if(i == oob_copy_number){
+ printf("3k oob ecc warning, data select!!!! \n");
+ nand_sw_ecc_check(nand_ptr,
+ oob_temp_ptr,
+ oob_copy_number,
+ oob_byte_count - 4);
+ }
+
+ nand_ptr = oob_temp_ptr;
+ }
+ }
+#endif
+ memcpy((void *)buf, (void *)nand_ptr, len);
+ }
+ info->read_ptr += len;
+
+#ifdef NAND_DEBUG_VERBOSE
+ rda_dump_buf((char *)buf, len);
+#endif
+
+#else
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)buf;
+ int ret = 0;
+
+ /*
+ * If size is less than the size of oob,
+ * we copy directly them to mapping buffer.
+ */
+ if (len <= mtd->oobsize) {
+ memcpy(buf, (void *)nand_ptr, len);
+ info->read_ptr = 0;
+ return;
+ }
+
+ if (((u32)addr & 0x7) != 0) {
+ printf("ERROR, nand dma read buffer %p is not 8bytes aligned\n",
+ addr);
+ return;
+ }
+
+ phys_addr = dma_map_single(addr, len, DMA_FROM_DEVICE);
+
+ dma_param.src_addr = (u32) info->nand_data_phys;
+ dma_param.dst_addr = phys_addr;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FR_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda nand : Failed to set parameter\n");
+ dma_unmap_single(addr, len, DMA_FROM_DEVICE);
+ return;
+ }
+
+ /* use flush to avoid annoying unaligned warning */
+ /* however, invalidate after the dma it the right thing to do */
+ flush_dcache_range((u32)addr, (u32)(addr + len));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* use flush to avoid annoying unaligned warning */
+ //invalidate_dcache_range((u32)addr, (u32)(addr + len));
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, len, DMA_FROM_DEVICE);
+ info->read_ptr += len;
+
+ return;
+#endif /* CONFIG_NAND_RDA_DMA */
+}
+
+static void nand_rda_write_buf(struct mtd_info *mtd, const uint8_t * buf,
+ int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_W + info->write_ptr);
+ u8 *u_nand_temp_buffer = &g_nand_flash_temp_buffer[info->write_ptr];
+ uint8_t *temp_ptr = (uint8_t *)buf;
+#if (OOB_SW_PROTECT_SWITCH_ON == 1)
+ uint8_t *oob_temp_ptr = &g_nand_flash_temp_buffer[16384+512];
+ uint8_t oob_byte_count = 2 + __FTL_OOB_STRUCT_LENGTH__ + 2 + 4;
+ uint8_t oob_copy_number = info->vir_oob_size / oob_byte_count;
+ uint32_t checksum;
+#endif
+
+#ifdef NAND_DEBUG
+ printf("write : buf addr = 0x%p, len = %d, write_ptr = %d\n", buf, len,
+ info->write_ptr);
+#endif /* NAND_DEBUG */
+
+#ifdef NAND_DEBUG_VERBOSE
+ rda_dump_buf((char *)buf, len);
+#endif
+
+#if 1//ndef CONFIG_NAND_RDA_DMA
+ if(info->nand_use_type > 0){
+ if(info->write_ptr > 0){/*write OOB to buffer*/
+#if (OOB_SW_PROTECT_SWITCH_ON == 1)
+ if(info->vir_page_size == 6144 ||info->vir_page_size == 12288){
+ checksum = nand_checksum32(temp_ptr, oob_byte_count - 4);
+ memcpy(oob_temp_ptr, temp_ptr, oob_byte_count - 4);
+ oob_temp_ptr[oob_byte_count - 4] = (uint8_t)(checksum & 0xff);
+ oob_temp_ptr[oob_byte_count - 3] = (uint8_t)((checksum >> 8) & 0xff);
+ oob_temp_ptr[oob_byte_count - 2] = (uint8_t)((checksum >> 16) & 0xff);
+ oob_temp_ptr[oob_byte_count - 1] = (uint8_t)((checksum >> 24) & 0xff);
+ while(oob_copy_number > 1){
+ oob_copy_number--;
+ memcpy(&oob_temp_ptr[oob_copy_number * oob_byte_count],
+ oob_temp_ptr,
+ oob_byte_count);
+ }
+
+ temp_ptr = oob_temp_ptr;
+ }
+#endif
+ info->write_ptr = info->logic_page_size;
+ u_nand_temp_buffer = &g_nand_flash_temp_buffer[info->write_ptr];
+ memcpy((void *)u_nand_temp_buffer, (void *)temp_ptr, info->logic_oob_size);
+ memcpy((void *)(u_nand_temp_buffer + NAND_CONTROLLER_TEMP_BUFFER_SIZE),
+ (void *)(temp_ptr + info->logic_oob_size), info->logic_oob_size);
+ if(info->type == NAND_TYPE_SLC16K || info->type == NAND_TYPE_MLC16K){
+ memcpy((void *)(u_nand_temp_buffer + NAND_CONTROLLER_TEMP_BUFFER_SIZE * 2),
+ (void *)(temp_ptr + info->logic_oob_size * 2), info->logic_oob_size);
+ memcpy((void *)(u_nand_temp_buffer + NAND_CONTROLLER_TEMP_BUFFER_SIZE * 3),
+ (void *)(temp_ptr + info->logic_oob_size * 3), info->logic_oob_size);
+ }
+ }else{/*write data to buffer*/
+ memcpy((void *)u_nand_temp_buffer, (void *)temp_ptr, info->logic_page_size);
+ memcpy((void *)(u_nand_temp_buffer + NAND_CONTROLLER_TEMP_BUFFER_SIZE),
+ (void *)(temp_ptr + info->logic_page_size), info->logic_page_size);
+ if(info->type == NAND_TYPE_SLC16K || info->type == NAND_TYPE_MLC16K){
+ memcpy((void *)(u_nand_temp_buffer + NAND_CONTROLLER_TEMP_BUFFER_SIZE * 2),
+ (void *)(temp_ptr + info->logic_page_size * 2), info->logic_page_size);
+ memcpy((void *)(u_nand_temp_buffer + NAND_CONTROLLER_TEMP_BUFFER_SIZE * 3),
+ (void *)(temp_ptr + info->logic_page_size * 3), info->logic_page_size);
+ }
+ info->write_ptr += info->logic_page_size;
+ }
+ }else{
+#if (OOB_SW_PROTECT_SWITCH_ON == 1)
+ if(info->write_ptr > 0 && info->vir_page_size == 3072){
+ checksum = nand_checksum32(temp_ptr, oob_byte_count - 4);
+ memcpy(oob_temp_ptr, temp_ptr, oob_byte_count - 4);
+ oob_temp_ptr[oob_byte_count - 4] = (uint8_t)(checksum & 0xff);
+ oob_temp_ptr[oob_byte_count - 3] = (uint8_t)((checksum >> 8) & 0xff);
+ oob_temp_ptr[oob_byte_count - 2] = (uint8_t)((checksum >> 16) & 0xff);
+ oob_temp_ptr[oob_byte_count - 1] = (uint8_t)((checksum >> 24) & 0xff);
+ while(oob_copy_number > 1){
+ oob_copy_number--;
+ memcpy(&oob_temp_ptr[oob_copy_number * oob_byte_count],
+ oob_temp_ptr,
+ oob_byte_count);
+ }
+
+ temp_ptr = oob_temp_ptr;
+ }
+#endif
+ memcpy((void *)nand_ptr, (void *)temp_ptr, len);
+ info->write_ptr += len;
+ }
+#else
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)buf;
+ int ret = 0;
+
+ /*
+ * If size is less than the size of oob,
+ * we copy directly them to mapping buffer.
+ */
+ if (len <= mtd->oobsize) {
+ memcpy((void *)nand_ptr, (void *)buf, len);
+ info->write_ptr += len;
+ return;
+ }
+
+ if (((u32)addr & 0x7) != 0) {
+ printf("ERROR, nand dma write %p buffer is not 8bytes aligned\n",
+ addr);
+ return;
+ }
+ phys_addr = dma_map_single(addr, len, DMA_TO_DEVICE);
+
+ dma_param.src_addr = phys_addr;
+ dma_param.dst_addr = (u32) info->nand_data_phys;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FW_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda nand : Failed to set parameter\n");
+ dma_unmap_single(addr, len, DMA_TO_DEVICE);
+ return;
+ }
+
+ flush_dcache_range((u32)addr, (u32)(addr + len));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, len, DMA_TO_DEVICE);
+ info->write_ptr += len;
+
+ return;
+#endif /* CONFIG_NAND_RDA_DMA */
+}
+
+static void nand_rda_write_cache(struct mtd_info *mtd)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_W + info->write_ptr);
+ u8 *u_nand_temp_buffer = &g_nand_flash_temp_buffer[info->col_addr];
+
+ if(info->nand_use_type > 0){
+#ifndef CONFIG_NAND_RDA_DMA
+ memcpy((void *)nand_ptr,
+ (void *)u_nand_temp_buffer,
+ NAND_CONTROLLER_TEMP_BUFFER_SIZE);
+#else
+ nand_rda_dma_move_data(mtd,
+ nand_ptr,
+ u_nand_temp_buffer,
+ NAND_CONTROLLER_TEMP_BUFFER_SIZE,
+ DMA_TO_DEVICE);
+#endif
+ }
+}
+
+static void nand_rda_do_cmd_pre(struct mtd_info *mtd)
+{
+ struct nand_chip *this = mtd->priv;
+ struct rda_nand_info *info = this->priv;
+
+ __raw_writel(0xfff, NANDFC_REG_INT_STAT);
+ switch (info->cmd) {
+ case NAND_CMD_SEQIN:
+ info->write_ptr = 0;
+ nand_rda_write_cache(mtd);
+ break;
+ case NAND_CMD_READ0:
+ hal_flush_buf(mtd);
+ //info->read_ptr = 0;
+ break;
+ case NAND_CMD_RNDIN:
+ nand_rda_write_cache(mtd);
+ break;
+ default:
+ break;
+ }
+}
+
+static void nand_rda_do_cmd_post(struct mtd_info *mtd)
+{
+ struct nand_chip *this = mtd->priv;
+ struct rda_nand_info *info = this->priv;
+ u32 temp;
+
+ switch (info->cmd) {
+ case NAND_CMD_RESET:
+ return;
+ case NAND_CMD_READID:
+ temp = __raw_readl(NANDFC_REG_IDCODE_A);
+ info->byte_buf[0] = temp;
+ temp = __raw_readl(NANDFC_REG_IDCODE_B);
+ info->byte_buf[1] = temp;
+ info->index = 0;
+ break;
+ case NAND_CMD_STATUS:
+ temp = __raw_readl(NANDFC_REG_OP_STATUS);
+ info->byte_buf[0] = (temp & 0xFF);
+ info->index = 0;
+ if (info->byte_buf[0] != 0xe0) {
+ printf("nand error in op status %x\n",
+ info->byte_buf[0]);
+ }
+#ifdef NAND_DEBUG
+ printf("post_cmd read status %x\n", info->byte_buf[0]);
+#endif
+ break;
+ case NAND_CMD_READ0: // NAND_CMD_READOOB goes here too
+ nand_rda_read_cache(mtd);
+ info->index = 0;
+ if(NAND_CMD_READOOB == info->cmd_flag){
+ if(info->nand_use_type > 0){
+ temp = g_nand_flash_temp_buffer[mtd->writesize];
+ temp |= g_nand_flash_temp_buffer[mtd->writesize+1] << 8;
+ info->byte_buf[0] = temp;
+ }else{
+ u8 *nand_ptr = (u8 *) (this->IO_ADDR_R + mtd->writesize);
+ memcpy((u8*)&info->byte_buf[0], nand_ptr, 2);
+ }
+ info->cmd_flag = NAND_CMD_NONE;
+ }
+ break;
+ case NAND_CMD_SEQIN:
+ if(info->nand_use_type > 0){
+ info->logic_operate_time += 1;
+ info->col_addr += NAND_CONTROLLER_TEMP_BUFFER_SIZE;
+ info->cmd = NAND_CMD_RNDIN;
+ }
+ break;
+ case NAND_CMD_RNDIN:
+ if(info->nand_use_type > 0){
+ info->logic_operate_time += 1;
+ info->col_addr += NAND_CONTROLLER_TEMP_BUFFER_SIZE;
+ }
+ break;
+/* delay 10ms, for erase to complete */
+ case NAND_CMD_ERASE1:
+ udelay(10000);
+ break;
+
+ default:
+ break;
+ }
+}
+
+static void nand_rda_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
+{
+#ifdef NAND_DEBUG
+ printf("nand_rda_hwcontrol, cmd = %x, ctrl = %x, not use anymore\n",
+ cmd, ctrl);
+#endif
+}
+
+static void nand_rda_cmdfunc(struct mtd_info *mtd, unsigned int command,
+ int column, int page_addr)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ unsigned long cmd_ret;
+
+#ifdef NAND_DEBUG
+ printf("nand_rda_cmdfunc, cmd = %x, page_addr = %x, col_addr = %x\n",
+ command, page_addr, column);
+#endif
+
+ /* remap command */
+ switch (command) {
+ case NAND_CMD_SEQIN: /* 0x80 do nothing, wait for 0x10 */
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = NAND_CMD_NONE;
+ info->write_ptr= column;
+ info->logic_operate_time = 0;
+ break;
+ case NAND_CMD_READSTART: /* hw auto gen 0x30 for read */
+ case NAND_CMD_ERASE2: /* hw auto gen 0xd0 for erase */
+#ifdef NAND_DEBUG
+ printf("erase block, erase_size = %x\n", mtd->erasesize);
+#endif
+ info->cmd = NAND_CMD_NONE;
+ break;
+ case NAND_CMD_PAGEPROG: /* 0x10 do the real program */
+ info->cmd = NAND_CMD_SEQIN;
+ info->col_addr = 0;
+ break;
+ case NAND_CMD_READOOB: /* Emulate NAND_CMD_READOOB */
+ info->page_addr = page_addr;
+ info->cmd = NAND_CMD_READ0;
+ /* Offset of oob */
+ info->col_addr = column;
+ info->read_ptr = mtd->writesize;
+ info->cmd_flag = NAND_CMD_READOOB;
+ break;
+ case NAND_CMD_READ0: /* Emulate NAND_CMD_READOOB */
+ info->read_ptr = 0;
+ /*fall though, don't need break;*/
+ default:
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = command;
+ break;
+ }
+ if (info->cmd == NAND_CMD_NONE) {
+ return;
+ }
+ //info->col_addr >>= 1;
+#ifdef NAND_DEBUG
+ printf("after cmd remap, cmd = %x, page_addr = %x, col_addr = %x\n",
+ info->cmd, info->page_addr, info->col_addr);
+#endif
+
+loop:
+ if (info->col_addr != -1) {
+ hal_set_col_addr(info->col_addr);
+ }
+ if (info->page_addr == -1)
+ info->page_addr = 0;
+
+ nand_rda_do_cmd_pre(mtd);
+
+ hal_send_cmd((unsigned char)info->cmd, info->page_addr);
+ cmd_ret = hal_wait_cmd_complete();
+ if (cmd_ret) {
+ printf("cmd fail, cmd = %x, page_addr = %x, col_addr = %x\n",
+ info->cmd, info->page_addr, info->col_addr);
+ }
+
+ nand_rda_do_cmd_post(mtd);
+
+ if(info->nand_use_type > 0 && info->logic_operate_time <= info->nand_use_type && \
+ (info->cmd == NAND_CMD_SEQIN || info->cmd == NAND_CMD_RNDIN))
+ goto loop;
+
+ nand_wait_ready(mtd);
+}
+
+static int nand_rda_dev_ready(struct mtd_info *mtd)
+{
+ return 1;
+}
+
+static int nand_reset_flash(void)
+{
+ int ret = 0;
+
+ hal_send_cmd(NAND_CMD_RESET, 0);
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ printf("reset flash failed\n");
+ return ret;
+ }
+
+ return ret;
+}
+
+static int nand_read_id(unsigned int id[2])
+{
+ int ret = 0;
+
+ hal_send_cmd(NAND_CMD_READID, 0);
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ printf("nand_read_id failed\n");
+ return ret;
+ }
+
+ id[0] = __raw_readl(NANDFC_REG_IDCODE_A);
+ id[1] = __raw_readl(NANDFC_REG_IDCODE_B);
+
+ printf("Nand ID: %08x %08x\n", id[0], id[1]);
+
+ return ret;
+}
+
+static void read_ID(struct mtd_info *mtd)
+{
+ unsigned int id[2];
+
+ nand_read_id(id);
+}
+
+#if(__TGT_AP_FLASH_USE_PART_OF_PAGE__ == 1)
+static void nand_page_type_setting(struct rda_nand_info *info, int *bus_width_16)
+{
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_4KAS3K_PAGE_DIV__)
+ printf("MLC 4K as 3K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ info->spl_adjust_ratio = 3;//actally ratio * 2
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_4KAS2K_PAGE_DIV__)
+ printf("MLC 4K as 2K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ info->spl_adjust_ratio = 2;//actally ratio * 2
+#endif
+#endif
+
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_8KAS4K_PAGE_DIV__)
+ printf("MLC 8K as 4K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ info->spl_adjust_ratio = 4;//actally ratio * 2
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_8KAS6K_PAGE_DIV__)
+ printf("MLC 8K as 6K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ info->spl_adjust_ratio = 6;//actally ratio * 2
+#endif
+#endif
+
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_16KAS8K_PAGE_DIV__)
+ printf("MLC 16K as 8K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ info->spl_adjust_ratio = 8;//actally ratio * 2
+#else
+#if(__TGT_AP_FLASH_LOGIC_PAGE_SIZE_N_KB__ == __TGT_AP_FLASH_USE_16KAS12K_PAGE_DIV__)
+ printf("MLC 16K as 12K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ info->spl_adjust_ratio = 12;//actally ratio * 2
+#endif
+#endif
+}
+#endif
+
+/********************************************************************************
+******************page size bits(bit[1...0] of the fourth id byte)***************
+1.hynix nand
+ 1) bit1 bit0 pagesize 2) bit1 bit0 pagesize
+ 0 0 2K 0 0 4K
+ 0 1 4k 0 1 8K
+ 1 0 8k 1 0 16K
+ 1 1 null 1 1 32K
+ nand ID:
+ (1)AD D7 94 DA 74 C3 (1)AD D7 94 91 60 44
+*********************************************************************************/
+static int nand_get_type(struct rda_nand_info *info, unsigned int id[2],
+ int *rda_nand_type, int *bus_width_16)
+{
+ u16 hwcfg_nand_type;
+ int metal_id;
+
+ info->spl_adjust_ratio = 2;
+ metal_id = rda_metal_id_get();
+
+#if defined(CONFIG_MACH_RDA8810) || defined(CONFIG_MACH_RDA8850)
+ printf("RDA8810/RDA8850 get type, metal %d\n", metal_id);
+
+ if (metal_id == 0) {
+ hwcfg_nand_type = rda_hwcfg_get() & 0x03;
+ switch(hwcfg_nand_type) {
+ case 0b00:
+ printf("MLC 4K, 8bit bus\n");
+ *rda_nand_type = NAND_TYPE_MLC4K;
+ *bus_width_16 = 0;
+ break;
+ case 0b10:
+ printf("SLC 4K page, 16bit bus\n");
+ *rda_nand_type = NAND_TYPE_SLC4K;
+ *bus_width_16 = 1;
+ break;
+ case 0b01:
+ printf("2K page, 8bit bus\n");
+ *rda_nand_type = NAND_TYPE_2KL;
+ *bus_width_16 = 0;
+ break;
+ case 0b11:
+ printf("2K page, 16bit bus\n");
+ *rda_nand_type = NAND_TYPE_2KL;
+ *bus_width_16 = 1;
+ break;
+ default:
+ printf("NAND: type %d not support\n", hwcfg_nand_type);
+ *rda_nand_type = NAND_TYPE_INVALID;
+ return -ENODEV;
+ }
+ }
+ else if ((metal_id == 2) || (metal_id == 1)) {
+ hwcfg_nand_type = rda_hwcfg_get() & 0x03;
+ switch(hwcfg_nand_type) {
+ case 0b00:
+ printf("SLC 4K, 16bit bus\n");
+ *rda_nand_type = NAND_TYPE_SLC4K;
+ *bus_width_16 = 1;
+ break;
+ case 0b10:
+ printf("MLC 4K, 8bit bus\n");
+ *rda_nand_type = NAND_TYPE_MLC4K;
+ *bus_width_16 = 0;
+ break;
+ case 0b11:
+ printf("MLC 8K, 8bit bus\n");
+ *rda_nand_type = NAND_TYPE_MLC8K;
+ *bus_width_16 = 0;
+ break;
+ default:
+ printf("NAND: type %d not support\n", hwcfg_nand_type);
+ *rda_nand_type = NAND_TYPE_INVALID;
+ return -ENODEV;
+ }
+ }
+ else if (metal_id >= 3) {
+#define RDA_NAND_TYPE_BIT_TYPE (1 << 0) /* 1: MLC; 0: SLC */
+#define RDA_NAND_TYPE_BIT_BUS (1 << 1) /* 1: 8-bit; 0: 16-bit */
+#define RDA_NAND_TYPE_BIT_SIZE (1 << 7) /* 1: 4K SLC / 8K MLC; 0: 2K SLC / 4K MLC */
+ hwcfg_nand_type = rda_hwcfg_get() & 0x83;
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_BUS)
+ *bus_width_16 = 0;
+ else
+ *bus_width_16 = 1;
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_TYPE) {
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_SIZE) {
+ printf("MLC 8K, %s bus\n",
+ (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_type = NAND_TYPE_MLC8K;
+ } else {
+#if(__TGT_AP_FLASH_USE_PART_OF_PAGE__ == 1)
+ switch(id[0] & 0xff){
+ case NAND_MFR_HYNIX:
+ if(id[0] == 0xda94d7ad || id[0] == 0x9e14d7ad){//hynix for nanya
+ *rda_nand_type = NAND_TYPE_MLC8K;
+ }else{
+ switch((id[0] >> 24)&0x3){//MLC
+ case 0:
+ *rda_nand_type = NAND_TYPE_MLC4K;
+ break;
+ case 1:
+ *rda_nand_type = NAND_TYPE_MLC8K;
+ break;
+ case 2:
+ *rda_nand_type = NAND_TYPE_MLC16K;
+ break;
+ case 3:
+ *rda_nand_type = NAND_TYPE_MLC16K;//reserved for 32k
+ break;
+ }
+ }
+ break;
+ case NAND_MFR_TOSHIBA://mlc
+ case NAND_MFR_SAMSUNG:
+ switch((id[0] >> 24)&0x3){
+ case 0:
+ printf("nand:no 2k MLC nand.\n");
+ break;
+ case 1:
+ *rda_nand_type = NAND_TYPE_MLC4K;
+ break;
+ case 2:
+ *rda_nand_type = NAND_TYPE_MLC8K;
+ break;
+ case 3:
+ *rda_nand_type = NAND_TYPE_MLC16K;
+ break;
+ }
+ break;
+ default:
+ switch((id[0] >> 24)&0x3){
+ case 0:
+ printf("nand:not support 1k nand.\n");
+ break;
+ case 1:
+ printf("nand:no 2k MLC nand.\n");
+ break;
+ case 2:
+ *rda_nand_type = NAND_TYPE_MLC4K;
+ break;
+ case 3:
+ *rda_nand_type = NAND_TYPE_MLC8K;
+ break;
+ }
+ break;
+ }
+ nand_page_type_setting(info, bus_width_16);
+#else
+ printf("MLC 4K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_type = NAND_TYPE_MLC4K;
+#endif
+ }
+ } else {
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_SIZE) {
+ printf("SLC 4K, %s bus\n", (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_type = NAND_TYPE_SLC4K;
+ } else {
+ printf("SLC 2KL, %s bus\n",
+ (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_type = NAND_TYPE_2KL;
+ }
+ }
+ }
+ else {
+ printf("NAND: invalid metal id %d\n", metal_id);
+ return -ENODEV;
+ }
+#elif defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8820)
+#error "RDA8810E/RDA8820 does not match RDA NAND Controller V1"
+#else
+#error "unknown MACH"
+#endif
+
+ printf("SPL adjust ratio is %d. \n", info->spl_adjust_ratio);
+ return 0;
+}
+
+static int nand_rda_init(struct nand_chip *this, struct rda_nand_info *info)
+{
+ unsigned int id[2];
+ int ret = 0;
+ int rda_nand_type = NAND_TYPE_INVALID;
+ int bus_width_16 = 0;
+
+ ret = nand_reset_flash();
+ if (ret)
+ return ret;
+ ret = nand_read_id(id);
+ if (ret)
+ return ret;
+ ret = nand_get_type(info, id, &rda_nand_type, &bus_width_16);
+ if (ret)
+ return ret;
+ ret = init_nand_info(info, rda_nand_type, bus_width_16);
+ if (ret)
+ return ret;
+ if (info->bus_width_16)
+ this->options |= NAND_BUSWIDTH_16;
+
+ return hal_init(info);
+}
+
+static int nand_rda_init_size(struct mtd_info *mtd, struct nand_chip *this,
+ u8 *id_data)
+{
+ struct rda_nand_info *info = this->priv;
+
+ mtd->erasesize = info->vir_erase_size;
+ mtd->writesize = info->vir_page_size;
+ mtd->oobsize = info->vir_oob_size;
+
+ return (info->bus_width_16) ? NAND_BUSWIDTH_16 : 0;
+}
+
+int rda_nand_init(struct nand_chip *nand)
+{
+ struct rda_nand_info *info;
+ static struct rda_nand_info rda_nand_info;
+
+ info = &rda_nand_info;
+
+ nand->chip_delay = 0;
+#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
+ nand->options |= NAND_USE_FLASH_BBT;
+#endif
+ /*
+ * in fact, nand controler we do hardware ECC silently, and
+ * we don't need tell mtd layer, and will simple nand operations
+ */
+ nand->ecc.mode = NAND_ECC_NONE;
+ /* Set address of hardware control function */
+ nand->cmd_ctrl = nand_rda_hwcontrol;
+ nand->init_size = nand_rda_init_size;
+ nand->cmdfunc = nand_rda_cmdfunc;
+
+ nand->read_byte = nand_rda_read_byte;
+ nand->read_word = nand_rda_read_word;
+ nand->read_buf = nand_rda_read_buf;
+ nand->write_buf = nand_rda_write_buf;
+ nand->read_nand_ID = read_ID;
+ nand->dev_ready = nand_rda_dev_ready;
+
+ nand->priv = (void *)info;
+ nand->IO_ADDR_R = nand->IO_ADDR_W = (void __iomem *)NANDFC_DATA_BUF;
+#ifdef CONFIG_NAND_RDA_DMA
+ info->nand_data_phys = (void __iomem *)NANDFC_DATA_BUF;
+#endif /* CONFIG_NAND_RDA_DMA */
+ info->index = 0;
+ info->write_ptr = 0;
+ info->read_ptr = 0;
+ info->cmd_flag = NAND_CMD_NONE;
+ info->master_clk = get_master_clk_rate(_TGT_AP_CLK_APB2);
+ info->clk=_TGT_AP_NAND_CLOCK;
+
+#ifdef CONFIG_NAND_RDA_DMA
+ rda_request_dma(&info->dma_ch);
+#endif /* CONFIG_NAND_RDA_DMA */
+
+ nand_rda_init(nand, info);
+
+ if (!nand->ecc.layout && (nand->ecc.mode != NAND_ECC_SOFT_BCH)) {
+ switch (info->vir_oob_size) {
+ case 64:
+ nand->ecc.layout = &rda_nand_oob_64;
+ break;
+ case 128:
+ nand->ecc.layout = &rda_nand_oob_128;
+ break;
+ case 256:
+ nand->ecc.layout = &rda_nand_oob_256;
+ break;
+ case 512:
+ nand->ecc.layout = &rda_nand_oob_512;
+ break;
+ default:
+ printf("error oob size: %d \n", info->vir_oob_size);
+ }
+ }
+
+ return 0;
+}
+
+#else
+int rda_nand_init(struct nand_chip *nand) {return 0;}
+#endif
+
+#if 0
+/* move to rda_nand_base.c */
+int board_nand_init(struct nand_chip *chip) __attribute__ ((weak));
+
+int board_nand_init(struct nand_chip *chip)
+{
+ return rda_nand_init(chip);
+}
+#endif
diff --git a/drivers/mtd/nand/rda_nand_v2.c b/drivers/mtd/nand/rda_nand_v2.c
new file mode 100644
index 0000000000..925a1c81c8
--- /dev/null
+++ b/drivers/mtd/nand/rda_nand_v2.c
@@ -0,0 +1,941 @@
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/types.h>
+#include <nand.h>
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_nand.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <mtd/nand/rda_nand.h>
+
+#include "tgt_ap_board_config.h"
+#include "tgt_ap_clock_config.h"
+
+#ifdef CONFIG_SPL_BUILD
+#undef CONFIG_NAND_RDA_DMA
+#endif
+
+#ifdef CONFIG_NAND_RDA_DMA
+#include <asm/dma-mapping.h>
+#include <asm/arch/dma.h>
+#endif
+
+//#define NAND_DEBUG
+//#define NAND_DEBUG_VERBOSE
+
+#define NAND_NEED_OOB_OFF_FIX
+#ifdef NAND_NEED_OOB_OFF_FIX
+static uint8_t oob_ff_pattern[] = { 0xff, 0xff };
+#define NAND_4K_86_OOB_OFF 0x10B8
+#define NAND_8K_86_OOB_OFF 0x2170
+#define NAND_8K_83_OOB_OFF 0x23C0
+#endif
+
+#define hal_gettime get_ticks
+#define SECOND * CONFIG_SYS_HZ_CLOCK
+#define NAND_TIMEOUT ( 2 SECOND )
+#define PLL_BUS_FREQ (_TGT_AP_PLL_BUS_FREQ * 1000000)
+
+/* clock division value map */
+const static u8 clk_div_map[] = {
+ 4*60, /* 0 */
+ 4*60, /* 1 */
+ 4*60, /* 2 */
+ 4*60, /* 3 */
+ 4*60, /* 4 */
+ 4*60, /* 5 */
+ 4*60, /* 6 */
+ 4*60, /* 7 */
+ 4*40, /* 8 */
+ 4*30, /* 9 */
+ 4*24, /* 10 */
+ 4*20, /* 11 */
+ 4*17, /* 12 */
+ 4*15, /* 13 */
+ 4*13, /* 14 */
+ 4*12, /* 15 */
+ 4*11, /* 16 */
+ 4*10, /* 17 */
+ 4*9, /* 18 */
+ 4*8, /* 19 */
+ 4*7, /* 20 */
+ 4*13/2, /* 21 */
+ 4*6, /* 22 */
+ 4*11/2, /* 23 */
+ 4*5, /* 24 */
+ 4*9/2, /* 25 */
+ 4*4, /* 26 */
+ 4*7/2, /* 27 */
+ 4*3, /* 28 */
+ 4*5/2, /* 29 */
+ 4*2, /* 30 */
+ 4*1, /* 31 */
+};
+
+static struct nand_ecclayout rda_nand_oob_40 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 38} }
+};
+
+static struct nand_ecclayout rda_nand_oob_64 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 62} }
+};
+
+static struct nand_ecclayout rda_nand_oob_128 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 126} }
+};
+
+static struct nand_ecclayout rda_nand_oob_256 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 254} }
+};
+
+static struct nand_ecclayout rda_nand_oob_512 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 510} }
+};
+
+extern void rda_dump_buf(char *data, size_t len);
+
+static void hal_send_cmd(unsigned char cmd, unsigned int page_addr)
+{
+ unsigned long cmd_reg;
+
+ cmd_reg = NANDFC_DCMD(cmd) | NANDFC_PAGE_ADDR(page_addr);
+#ifdef NAND_DEBUG
+ printf(" hal_send_cmd 0x%08lx\n", cmd_reg);
+#endif
+ __raw_writel(cmd_reg, NANDFC_REG_DCMD_ADDR);
+}
+
+static void hal_set_col_addr(unsigned int col_addr)
+{
+ __raw_writel(col_addr, NANDFC_REG_COL_ADDR);
+}
+
+static void hal_flush_buf(struct mtd_info *mtd)
+{
+ /*
+ there is no reg NANDFC_REG_BUF_CTRL
+ */
+ //__raw_writel(0x7, NANDFC_REG_BUF_CTRL);
+}
+
+static unsigned long hal_wait_cmd_complete(void)
+{
+ unsigned long int_stat;
+ unsigned long long wait_time = NAND_TIMEOUT;
+ unsigned long long start_time = hal_gettime();
+ int timeout = 0;
+
+ /* wait done */
+ /*
+ * Use NANDFC_INT_STAT_IDLE instead of NANDFC_INT_DONE
+ * this is HW bug, NANDFC_INT_DONE comes too early
+ * however, NANDFC_INT_STAT_IDLE is not an interrupt source
+ * need HW fix anyway
+ */
+ do {
+ int_stat = __raw_readl(NANDFC_REG_INT_STAT);
+ if (hal_gettime() - start_time >= wait_time) {
+ timeout = 1;
+ }
+#ifdef CONFIG_MACH_RDA8810E
+ } while (!(int_stat & NANDFC_INT_STAT_IDLE) && !timeout);
+#else
+ } while (!(int_stat & NANDFC_INT_DONE) && !timeout);
+#endif
+
+ /* to clear */
+ __raw_writel(int_stat & NANDFC_INT_CLR_MASK, NANDFC_REG_INT_STAT);
+
+ if (timeout) {
+ printf("nand error, cmd timeout\n");
+ return -ETIME;
+ }
+
+ if (int_stat & NANDFC_INT_ERR_ALL) {
+ printf("nand error, int_stat = %lx\n", int_stat);
+ return (int_stat & NANDFC_INT_ERR_ALL);
+ }
+ return 0;
+}
+
+static int init_nand_info(struct rda_nand_info *info,
+ int nand_type, int nand_ecc, int bus_width_16)
+{
+ info->type = nand_type;
+ info->ecc_mode = nand_ecc;
+ info->bus_width_16 = bus_width_16;
+ switch (nand_type) {
+ case NAND_TYPE_2K:
+ info->page_size = 2048;
+ info->page_shift = 11;
+ info->oob_size = 64;
+ break;
+ case NAND_TYPE_4K:
+ info->page_size = 4096;
+ info->page_shift = 12;
+ info->oob_size = 224;
+ info->vir_oob_size = 40;
+ break;
+ case NAND_TYPE_8K:
+ info->page_size = 8192;
+ info->page_shift = 13;
+ info->oob_size = 744;
+ break;
+ default:
+ printf("invalid nand type %d\n", nand_type);
+ return -EINVAL;
+ }
+ return 0;
+}
+
+static u32 cal_freq_by_divreg(u32 basefreq, u32 reg, u32 div2)
+{
+ u32 newfreq;
+
+ if (reg >= ARRAY_SIZE(clk_div_map)) {
+ printf("nand:Invalid div reg: %u\n", reg);
+ reg = ARRAY_SIZE(clk_div_map) - 1;
+ }
+ /* Assuming basefreq is smaller than 2^31 (2.147G Hz) */
+ newfreq = (basefreq << (div2 ? 0 : 1)) / (clk_div_map[reg] >> 1);
+ return newfreq;
+}
+
+unsigned long get_master_clk_rate(u32 reg)
+{
+ u32 div2;
+ unsigned long rate;
+
+ div2 = reg & SYS_CTRL_AP_AP_APB2_SRC_SEL;
+ reg = GET_BITFIELD(reg, SYS_CTRL_AP_AP_APB2_FREQ);
+ rate = cal_freq_by_divreg(PLL_BUS_FREQ, reg, div2);
+
+ return rate;
+}
+
+static unsigned long rda_nand_cld_div_tbl[16] = {
+ 3, 4, 5, 6, 7, 8, 9, 10,
+ 12, 14, 16, 18, 20, 22, 24, 28
+};
+
+static unsigned long hal_calc_divider(struct rda_nand_info *info)
+{
+ unsigned long mclk = info->master_clk;
+ unsigned long div, clk_div;
+ int i;
+
+ div = mclk / info->clk;
+ if (mclk % info->clk)
+ div += 1;
+
+ if (div < 5) {
+ /* 5 is minimal divider by V2 hardware */
+ div = 5;
+ }
+
+ for (i=0;i<16;i++) {
+ if(div <= rda_nand_cld_div_tbl[i]) {
+ clk_div = i;
+ break;
+ }
+ }
+
+ if (i>=16) {
+ clk_div = 15;
+ }
+
+ printf("NAND: max clk: %ld, bus clk: %ld\n", info->clk, mclk);
+ printf("NAND: div: %ld, clk_div: %ld\n", div, clk_div);
+ return clk_div;
+}
+
+static int hal_init(struct rda_nand_info *info)
+{
+ unsigned long config_a, config_b;
+#ifdef CONFIG_RDA_FPGA
+ unsigned long clk_div = 4;
+#else
+ unsigned long clk_div = hal_calc_divider(info);
+#endif
+
+ /* setup config_a and config_b */
+ config_a = NANDFC_CYCLE(clk_div);
+ config_a |= NANDFC_CHIP_SEL(0x0e);
+ config_a |= NANDFC_POLARITY_IO(0); // set 0 invert IO
+ config_a |= NANDFC_POLARITY_MEM(1); // set 1 invert MEM
+
+ switch (info->type) {
+ case NAND_TYPE_2K:
+ config_a |= NANDFC_TIMING(0x8B);
+ break;
+ case NAND_TYPE_4K:
+ config_a |= NANDFC_TIMING(0x8C);
+ break;
+ case NAND_TYPE_8K:
+ config_a |= NANDFC_TIMING(0x8D);
+ break;
+ default:
+ printf("invalid nand type %d\n", info->type);
+ return -EINVAL;
+ }
+
+ /* enable the 16bit mode; */
+ if (info->bus_width_16)
+ config_a |= NANDFC_WDITH_16BIT(1);
+
+ config_b = NANDFC_HWECC(1) | NANDFC_ECC_MODE(info->ecc_mode);
+
+ __raw_writel(config_a, NANDFC_REG_CONFIG_A);
+ __raw_writel(config_b, NANDFC_REG_CONFIG_B);
+
+#if 1
+ /* Set an interval of filter for erasing operation. */
+ unsigned long delay;
+ delay = __raw_readl(NANDFC_REG_DELAY);
+ delay |= 0x10;
+ __raw_writel(delay, NANDFC_REG_DELAY);
+#endif /* #if 0 */
+
+ printf("NAND: nand init done, %08lx %08lx\n", config_a, config_b);
+
+ return 0;
+}
+
+static u8 nand_rda_read_byte(struct mtd_info *mtd)
+{
+ u8 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *((u8 *) info->byte_buf + info->index);
+ info->index++;
+#ifdef NAND_DEBUG
+ printf("nand_read_byte, ret = %02x\n", ret);
+#endif
+ return ret;
+}
+
+static u16 nand_rda_read_word(struct mtd_info *mtd)
+{
+ u16 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *(u16 *) ((uint8_t *) info->byte_buf + info->index);
+ info->index += 2;
+#ifdef NAND_DEBUG
+ printf("nand_read_word, ret = %04x\n", ret);
+#endif
+ return ret;
+}
+
+static void nand_rda_read_buf(struct mtd_info *mtd, uint8_t * buf, int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_R + info->read_ptr);
+
+#ifdef NAND_DEBUG
+ printf("read : buf addr = 0x%p, len = 0x%x, read_ptr = 0x%x \n", buf, len,
+ info->read_ptr);
+#endif /* NAND_DEBUG */
+
+#ifndef CONFIG_NAND_RDA_DMA
+ memcpy((void *)buf, (void *)nand_ptr, len);
+ if(info->ecc_mode == NAND_ECC_1K24BIT)
+ info->read_ptr += 184;
+ info->read_ptr += len;
+
+#ifdef NAND_DEBUG_VERBOSE
+ rda_dump_buf((char *)buf, 2);
+#endif
+
+#else
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)buf;
+ int ret = 0;
+
+ /*
+ * If size is less than the size of oob,
+ * we copy directly them to mapping buffer.
+ */
+ if (len <= mtd->oobsize) {
+ memcpy(buf, (void *)nand_ptr, len);
+ info->read_ptr = 0;
+ return;
+ }
+
+ if (((u32)addr & 0x7) != 0) {
+ printf("ERROR, nand dma read buffer %p is not 8bytes aligned\n",
+ addr);
+ return;
+ }
+
+ phys_addr = dma_map_single(addr, len, DMA_FROM_DEVICE);
+
+ dma_param.src_addr = (u32) info->nand_data_phys;
+ dma_param.dst_addr = phys_addr;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FR_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda nand : Failed to set parameter\n");
+ dma_unmap_single(addr, len, DMA_FROM_DEVICE);
+ return;
+ }
+
+ /* use flush to avoid annoying unaligned warning */
+ /* however, invalidate after the dma it the right thing to do */
+ flush_dcache_range((u32)addr, (u32)(addr + len));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* use flush to avoid annoying unaligned warning */
+ //invalidate_dcache_range((u32)addr, (u32)(addr + len));
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, len, DMA_FROM_DEVICE);
+ info->read_ptr += len;
+
+ return;
+#endif /* CONFIG_NAND_RDA_DMA */
+}
+
+static void nand_rda_write_buf(struct mtd_info *mtd, const uint8_t * buf,
+ int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_W + info->write_ptr);
+
+#ifdef NAND_DEBUG
+ printf("write : buf addr = 0x%p, len = %d, write_ptr = %d\n", buf, len,
+ info->write_ptr);
+#endif /* NAND_DEBUG */
+
+#ifdef NAND_DEBUG_VERBOSE
+ rda_dump_buf((char *)buf, len);
+#endif
+
+#ifdef NAND_NEED_OOB_OFF_FIX
+ u8 *nand_oob_ptr;
+ switch (info->type) {
+ case NAND_TYPE_2K:
+ break;
+ case NAND_TYPE_4K:
+ if(info->write_ptr > 0 && info->ecc_mode == NAND_ECC_1K24BIT){
+ nand_ptr = (u8 *)(chip->IO_ADDR_W + NAND_4K_86_OOB_OFF);
+ len = 40;
+ }
+ break;
+ case NAND_TYPE_8K:
+ if (info->ecc_mode == NAND_ECC_1K24BIT)
+ nand_oob_ptr = (u8 *)(chip->IO_ADDR_W +
+ NAND_8K_86_OOB_OFF);
+ else
+ nand_oob_ptr = (u8 *)(chip->IO_ADDR_W +
+ NAND_8K_83_OOB_OFF);
+ memcpy((void *)nand_oob_ptr, (void *)oob_ff_pattern, 2);
+ break;
+ default:
+ break;
+ }
+#endif
+
+#ifndef CONFIG_NAND_RDA_DMA
+ memcpy((void *)nand_ptr, (void *)buf, len);
+ info->write_ptr += len;
+
+#else
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)buf;
+ int ret = 0;
+
+ /*
+ * If size is less than the size of oob,
+ * we copy directly them to mapping buffer.
+ */
+ if (len <= mtd->oobsize) {
+ memcpy((void *)nand_ptr, (void *)buf, len);
+ info->write_ptr += len;
+ return;
+ }
+
+ if (((u32)addr & 0x7) != 0) {
+ printf("ERROR, nand dma write %p buffer is not 8bytes aligned\n",
+ addr);
+ return;
+ }
+ phys_addr = dma_map_single(addr, len, DMA_TO_DEVICE);
+
+ dma_param.src_addr = phys_addr;
+ dma_param.dst_addr = (u32) info->nand_data_phys;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FW_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda nand : Failed to set parameter\n");
+ dma_unmap_single(addr, len, DMA_TO_DEVICE);
+ return;
+ }
+
+ flush_dcache_range((u32)addr, (u32)(addr + len));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, len, DMA_TO_DEVICE);
+ info->write_ptr += len;
+
+ return;
+#endif /* CONFIG_NAND_RDA_DMA */
+}
+
+static void nand_rda_do_cmd_pre(struct mtd_info *mtd)
+{
+ struct nand_chip *this = mtd->priv;
+ struct rda_nand_info *info = this->priv;
+
+ __raw_writel(0xfff, NANDFC_REG_INT_STAT);
+ switch (info->cmd) {
+ case NAND_CMD_SEQIN:
+ hal_flush_buf(mtd);
+ info->write_ptr = 0;
+ break;
+ case NAND_CMD_READ0:
+ hal_flush_buf(mtd);
+ //info->read_ptr = 0;
+ break;
+ default:
+ break;
+ }
+}
+
+static void nand_rda_do_cmd_post(struct mtd_info *mtd)
+{
+ struct nand_chip *this = mtd->priv;
+ struct rda_nand_info *info = this->priv;
+ u32 temp;
+
+ switch (info->cmd) {
+ case NAND_CMD_RESET:
+ return;
+ case NAND_CMD_READID:
+ temp = __raw_readl(NANDFC_REG_IDCODE_A);
+ info->byte_buf[0] = temp;
+ temp = __raw_readl(NANDFC_REG_IDCODE_B);
+ info->byte_buf[1] = temp;
+ info->index = 0;
+ break;
+ case NAND_CMD_STATUS:
+ temp = __raw_readl(NANDFC_REG_OP_STATUS);
+ info->byte_buf[0] = (temp & 0xFF);
+ info->index = 0;
+ if (info->byte_buf[0] != 0xe0) {
+ printf("nand error in op status %x\n",
+ info->byte_buf[0]);
+ }
+#ifdef NAND_DEBUG
+ printf("post_cmd read status %x\n", info->byte_buf[0]);
+#endif
+ break;
+ case NAND_CMD_READ0: // NAND_CMD_READOOB goes here too
+ break;
+#if 0
+/* read back after write, for err checking */
+ case NAND_CMD_SEQIN:
+ {
+ int cmd_ret;
+ /* read back instantly and check fcs/crc result */
+ hal_send_cmd((unsigned char)NAND_CMD_READ0,
+ info->page_addr);
+ cmd_ret = hal_wait_cmd_complete();
+ if (cmd_ret) {
+ printf
+ ("readback cmd fail, page_addr = %x, ret = %x\n",
+ info->page_addr, cmd_ret);
+ }
+ }
+ break;
+#endif
+#if 0
+/* delay 10ms, for erase to complete */
+ case NAND_CMD_ERASE1:
+ udelay(10000);
+ break;
+#endif
+ default:
+ break;
+ }
+}
+
+static void nand_rda_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
+{
+#ifdef NAND_DEBUG
+ printf("nand_rda_hwcontrol, cmd = %x, ctrl = %x, not use anymore\n",
+ cmd, ctrl);
+#endif
+}
+
+static void nand_rda_cmdfunc(struct mtd_info *mtd, unsigned int command,
+ int column, int page_addr)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ unsigned long cmd_ret;
+
+#ifdef NAND_DEBUG
+ printf("nand_rda_cmdfunc, cmd = %x, page_addr = %x, col_addr = %x\n",
+ command, page_addr, column);
+#endif
+
+ /* remap command */
+ switch (command) {
+ case NAND_CMD_SEQIN: /* 0x80 do nothing, wait for 0x10 */
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = NAND_CMD_NONE;
+ info->write_ptr= column;
+ break;
+ case NAND_CMD_READSTART: /* hw auto gen 0x30 for read */
+ case NAND_CMD_ERASE2: /* hw auto gen 0xd0 for erase */
+#ifdef NAND_DEBUG
+ printf("erase block, erase_size = %x\n", mtd->erasesize);
+#endif
+ info->cmd = NAND_CMD_NONE;
+ break;
+ case NAND_CMD_PAGEPROG: /* 0x10 do the real program */
+ info->cmd = NAND_CMD_SEQIN;
+ info->col_addr = 0;
+ break;
+ case NAND_CMD_READOOB: /* Emulate NAND_CMD_READOOB */
+ info->page_addr = page_addr;
+ info->cmd = NAND_CMD_READ0;
+ /* Offset of oob */
+ info->col_addr = column;
+ info->read_ptr = mtd->writesize;
+#ifdef NAND_NEED_OOB_OFF_FIX
+ switch (info->type) {
+ case NAND_TYPE_2K:
+ break;
+ case NAND_TYPE_4K:
+ //info->col_addr = NAND_4K_86_OOB_OFF;
+ info->read_ptr = NAND_4K_86_OOB_OFF;
+ break;
+ case NAND_TYPE_8K:
+ if (info->ecc_mode == NAND_ECC_1K24BIT) {
+ info->col_addr = NAND_8K_86_OOB_OFF;
+ info->read_ptr = NAND_8K_86_OOB_OFF;
+ }
+ else {
+ info->col_addr = NAND_8K_83_OOB_OFF;
+ info->read_ptr = NAND_8K_83_OOB_OFF;
+ }
+ break;
+ default:
+ break;
+ }
+#endif
+ break;
+ case NAND_CMD_READ0: /* Emulate NAND_CMD_READOOB */
+ info->read_ptr = 0;
+ /*fall though, don't need break;*/
+ default:
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = command;
+ break;
+ }
+ if (info->cmd == NAND_CMD_NONE) {
+ return;
+ }
+ //info->col_addr >>= 1;
+#ifdef NAND_DEBUG
+ printf("after cmd remap, cmd = %x, page_addr = %x, col_addr = %x\n",
+ info->cmd, info->page_addr, info->col_addr);
+#endif
+
+ if (info->col_addr != -1) {
+ hal_set_col_addr(info->col_addr);
+ }
+ if (info->page_addr == -1)
+ info->page_addr = 0;
+
+ nand_rda_do_cmd_pre(mtd);
+
+ hal_send_cmd((unsigned char)info->cmd, info->page_addr);
+ cmd_ret = hal_wait_cmd_complete();
+ if (cmd_ret) {
+ printf("cmd fail, cmd = %x, page_addr = %x, col_addr = %x\n",
+ info->cmd, info->page_addr, info->col_addr);
+ }
+
+ nand_rda_do_cmd_post(mtd);
+
+ nand_wait_ready(mtd);
+}
+
+static int nand_rda_dev_ready(struct mtd_info *mtd)
+{
+ return 1;
+}
+
+static int nand_reset_flash(void)
+{
+ int ret = 0;
+
+ hal_send_cmd(NAND_CMD_RESET, 0);
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ printf("nand_reset_flash failed\n");
+ return ret;
+ }
+
+ return ret;
+}
+
+static int nand_read_id(unsigned int id[2])
+{
+ int ret = 0;
+
+ hal_send_cmd(NAND_CMD_READID, 0);
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ printf("nand_read_id failed\n");
+ return ret;
+ }
+
+ id[0] = __raw_readl(NANDFC_REG_IDCODE_A);
+ id[1] = __raw_readl(NANDFC_REG_IDCODE_B);
+
+ printf("NAND: Nand ID: %08x %08x\n", id[0], id[1]);
+
+ return ret;
+}
+
+static void read_ID(struct mtd_info *mtd)
+{
+ unsigned int id[2];
+
+ nand_read_id(id);
+}
+
+static int nand_get_type(struct rda_nand_info *info, unsigned int id[2],
+ int *rda_nand_type, int *rda_nand_ecc, int *bus_width_16)
+{
+ u16 hwcfg_nand_type;
+ int metal_id;
+
+ info->spl_adjust_ratio = 2;
+ metal_id = rda_metal_id_get();
+
+#if defined(CONFIG_MACH_RDA8810) || defined(CONFIG_MACH_RDA8850)
+#error "RDA8810/RDA8850 does not match RDA NAND Controller V2"
+#elif defined(CONFIG_MACH_RDA8810E) || defined(CONFIG_MACH_RDA8820)
+ printf("NAND: RDA8810E/RDA8820 get type, metal %d\n", metal_id);
+ if (1) {
+#define RDA_NAND_TYPE_BIT_7 (1 << 7) /* 1: 8K NAND, 0 - 2K/4K NAND */
+#define RDA_NAND_TYPE_BIT_BUS (1 << 1) /* 1: 8-bit; 0: 16-bit */
+#define RDA_NAND_TYPE_BIT_0 (1 << 0) /* if BIT_7 == 1 (8K NAND) : 1 - 1K64bit ECC, 0 - 1K24bit ECC */
+ /* if BIT_7 == 0 (4K/2K) : 1 - 4K(1K24bit), 0 - 2K(2K24bit) */
+ hwcfg_nand_type = rda_hwcfg_get() & 0x83;
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_BUS)
+ *bus_width_16 = 0;
+ else
+ *bus_width_16 = 1;
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_7) {
+ /* 8K */
+ *rda_nand_type = NAND_TYPE_8K;
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_0) {
+ printf("NAND: 8K page, 1K64BIT ECC, %s bus\n",
+ (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_ecc = NAND_ECC_1K64BIT;
+ } else {
+ printf("NAND: 8K page, 1K24BIT ECC, %s bus\n",
+ (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_ecc = NAND_ECC_1K24BIT;
+ }
+ } else {
+ /* 4K/2K */
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_0) {
+ printf("NAND: 4K page, 1K24BIT ECC, %s bus\n",
+ (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_type = NAND_TYPE_4K;
+ *rda_nand_ecc = NAND_ECC_1K24BIT;
+ } else {
+ printf("NAND: 2K page, 2K24BIT ECC, %s bus\n",
+ (*bus_width_16)?"16bit":"8bit");
+ *rda_nand_type = NAND_TYPE_2K;
+ *rda_nand_ecc = NAND_ECC_2K24BIT;
+ }
+ }
+ }
+#else
+#error "unknown MACH"
+#endif
+
+ printf("NAND: actually ratio * 2, SPL adjust ratio is %d. \n",
+ info->spl_adjust_ratio);
+ return 0;
+}
+
+static int nand_rda_init(struct nand_chip *this, struct rda_nand_info *info)
+{
+ unsigned int id[2];
+ int ret = 0;
+ int rda_nand_type = NAND_TYPE_INVALID;
+ int rda_nand_ecc = NAND_ECC_INVALID;
+ int bus_width_16 = 0;
+
+ ret = nand_reset_flash();
+ if (ret)
+ return ret;
+ ret = nand_read_id(id);
+ if (ret)
+ return ret;
+ ret = nand_get_type(info, id, &rda_nand_type, &rda_nand_ecc, &bus_width_16);
+ if (ret)
+ return ret;
+ ret = init_nand_info(info, rda_nand_type, rda_nand_ecc, bus_width_16);
+ if (ret)
+ return ret;
+ if (info->bus_width_16)
+ this->options |= NAND_BUSWIDTH_16;
+
+ return hal_init(info);
+}
+
+#if defined(CONFIG_SPL_BUILD)
+/* this is for u-boot-spl only */
+static int nand_rda_init_size(struct mtd_info *mtd, struct nand_chip *this,
+ u8 *id_data)
+{
+ struct rda_nand_info *info = this->priv;
+
+ /* TODO: this is not always right
+ * assuming nand is 2k/4k SLC for now
+ * for other types of nand, 64 pages per block is not always true
+ */
+ mtd->erasesize = info->page_size * 64;
+ mtd->writesize = info->page_size;
+ mtd->oobsize = (info->oob_size > 256)?256:info->oob_size;
+
+ return (info->bus_width_16) ? NAND_BUSWIDTH_16 : 0;
+}
+#endif
+
+int rda_nand_init(struct nand_chip *nand)
+{
+ struct rda_nand_info *info;
+ static struct rda_nand_info rda_nand_info;
+
+ info = &rda_nand_info;
+
+ nand->chip_delay = 0;
+#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
+ nand->options |= NAND_USE_FLASH_BBT;
+#endif
+ /*
+ * in fact, nand controler we do hardware ECC silently, and
+ * we don't need tell mtd layer, and will simple nand operations
+ */
+ nand->ecc.mode = NAND_ECC_NONE;
+ /* Set address of hardware control function */
+ nand->cmd_ctrl = nand_rda_hwcontrol;
+#if defined(CONFIG_SPL_BUILD)
+ nand->init_size = nand_rda_init_size;
+#else
+ nand->init_size = NULL;
+#endif
+ nand->cmdfunc = nand_rda_cmdfunc;
+
+ nand->read_nand_ID = read_ID;
+ nand->read_byte = nand_rda_read_byte;
+ nand->read_word = nand_rda_read_word;
+ nand->read_buf = nand_rda_read_buf;
+ nand->write_buf = nand_rda_write_buf;
+
+ nand->dev_ready = nand_rda_dev_ready;
+
+ nand->priv = (void *)info;
+ nand->IO_ADDR_R = nand->IO_ADDR_W = (void __iomem *)NANDFC_DATA_BUF;
+#ifdef CONFIG_NAND_RDA_DMA
+ info->nand_data_phys = (void __iomem *)NANDFC_DATA_BUF;
+#endif /* CONFIG_NAND_RDA_DMA */
+ info->index = 0;
+ info->write_ptr = 0;
+ info->read_ptr = 0;
+ info->master_clk = get_master_clk_rate(_TGT_AP_CLK_APB2);
+ info->clk=_TGT_AP_NAND_CLOCK;
+
+#ifdef CONFIG_NAND_RDA_DMA
+ rda_request_dma(&info->dma_ch);
+#endif /* CONFIG_NAND_RDA_DMA */
+
+ nand_rda_init(nand, info);
+
+ if (!nand->ecc.layout && (nand->ecc.mode != NAND_ECC_SOFT_BCH)) {
+ switch (info->vir_oob_size) {
+ case 40:
+ nand->ecc.layout = &rda_nand_oob_40;
+ break;
+ case 64:
+ nand->ecc.layout = &rda_nand_oob_64;
+ break;
+ case 128:
+ nand->ecc.layout = &rda_nand_oob_128;
+ break;
+ case 256:
+ nand->ecc.layout = &rda_nand_oob_256;
+ break;
+ case 512:
+ nand->ecc.layout = &rda_nand_oob_512;
+ break;
+ default:
+ printf("error oob size: %d \n", info->vir_oob_size);
+ }
+ }
+
+ return 0;
+}
+
+#if 0
+/* move to rda_nand_base.c */
+int board_nand_init(struct nand_chip *chip) __attribute__ ((weak));
+
+int board_nand_init(struct nand_chip *chip)
+{
+ return rda_nand_init(chip);
+}
+#endif
diff --git a/drivers/mtd/nand/rda_nand_v3.c b/drivers/mtd/nand/rda_nand_v3.c
new file mode 100644
index 0000000000..f603bc143a
--- /dev/null
+++ b/drivers/mtd/nand/rda_nand_v3.c
@@ -0,0 +1,2050 @@
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/types.h>
+#include <nand.h>
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_nand.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch-rda/ispi.h>
+#include <mtd/nand/rda_nand.h>
+
+#include "tgt_ap_board_config.h"
+#include "tgt_ap_clock_config.h"
+#include "tgt_ap_flash_parts.h"
+
+#ifdef CONFIG_SPL_BUILD
+#undef CONFIG_NAND_RDA_DMA
+#endif
+
+#ifdef CONFIG_NAND_RDA_DMA
+#include <asm/dma-mapping.h>
+#include <asm/arch/dma.h>
+#endif
+
+/* FOR NAND TEST */
+#ifdef TGT_AP_DO_NAND_TEST
+
+unsigned int gbl_nand_test_id_val[2];
+unsigned char g_nand_test_buf_write[4096] = {0};
+unsigned char g_nand_test_buf_read[4096] = {0};
+#endif /* TGT_AP_DO_NAND_TEST */
+
+//#define NAND_DEBUG
+//#define NAND_DEBUG_VERBOSE
+#define NAND_CONTROLLER_BUFFER_LEN 9216
+
+#define hal_gettime get_ticks
+#define SECOND * CONFIG_SYS_HZ_CLOCK
+#define NAND_TIMEOUT ( 2 SECOND )
+#define PLL_BUS_FREQ (_TGT_AP_PLL_BUS_FREQ * 1000000)
+
+#ifdef CONFIG_SPL_BUILD
+/*sram space is not enough, so use sdram space as middle data buffer*/
+static u8 *g_nand_flash_temp_buffer = (u8 *)CONFIG_SPL_NAND_MIDDLE_DATA_BUFFER;
+#else
+static u8 g_nand_flash_temp_buffer[32*1024];
+#endif
+
+#define ECCSIZE(n) ((n)*15/8)
+static const u8 g_nand_ecc_size[] = {
+ ECCSIZE(24),
+ ECCSIZE(96),
+ ECCSIZE(96),
+ ECCSIZE(64),
+ ECCSIZE(56),
+ ECCSIZE(40),
+ ECCSIZE(24),
+ ECCSIZE(48),
+ ECCSIZE(32),
+ ECCSIZE(16),
+ ECCSIZE(8),
+ ECCSIZE(72),
+ ECCSIZE(80),
+ ECCSIZE(88),
+};
+
+struct flash_nand_parameter {
+ unsigned int page_size;
+ unsigned int ecc_msg_len;
+ unsigned int spare_space_size;
+ unsigned int oob_size;
+ unsigned int ecc_bits;
+ unsigned int spl_offset;
+ unsigned int crc;
+};
+
+struct flash_nand_parameter nand_parameter;
+
+/* clock division value map */
+const static u8 clk_div_map[] = {
+ 4*60, /* 0 */
+ 4*60, /* 1 */
+ 4*60, /* 2 */
+ 4*60, /* 3 */
+ 4*60, /* 4 */
+ 4*60, /* 5 */
+ 4*60, /* 6 */
+ 4*60, /* 7 */
+ 4*40, /* 8 */
+ 4*30, /* 9 */
+ 4*24, /* 10 */
+ 4*20, /* 11 */
+ 4*17, /* 12 */
+ 4*15, /* 13 */
+ 4*13, /* 14 */
+ 4*12, /* 15 */
+ 4*11, /* 16 */
+ 4*10, /* 17 */
+ 4*9, /* 18 */
+ 4*8, /* 19 */
+ 4*7, /* 20 */
+ 4*13/2, /* 21 */
+ 4*6, /* 22 */
+ 4*11/2, /* 23 */
+ 4*5, /* 24 */
+ 4*9/2, /* 25 */
+ 4*4, /* 26 */
+ 4*7/2, /* 27 */
+ 4*3, /* 28 */
+ 4*5/2, /* 29 */
+ 4*2, /* 30 */
+ 4*1, /* 31 */
+};
+
+static struct nand_ecclayout rda_nand_oob_2k = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 30} }
+};
+
+static struct nand_ecclayout rda_nand_oob_4k = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 30} }
+};
+
+static struct nand_ecclayout rda_nand_oob_8k = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 30} }
+};
+
+static struct nand_ecclayout rda_nand_oob_16k = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 30} }
+};
+
+extern void rda_dump_buf(char *data, size_t len);
+
+static unsigned int checksum32( unsigned char* data, unsigned int data_size)
+{
+ unsigned int checksum = 0;
+ unsigned int i;
+
+ for(i = 0; i < data_size; i++)
+ checksum = ((checksum << 31) | (checksum >> 1)) + (unsigned int)data[i];
+
+ return checksum;
+}
+
+static void fill_nand_parameter(void)
+{
+ nand_parameter.page_size = NAND_PAGE_SIZE;
+ nand_parameter.spare_space_size = NAND_SPARE_SIZE;
+ nand_parameter.ecc_bits = NAND_ECCBITS;
+ nand_parameter.ecc_msg_len = NAND_ECCMSGLEN;
+ nand_parameter.oob_size = NAND_OOBSIZE;
+ nand_parameter.spl_offset = NAND_PAGE_SIZE;
+ nand_parameter.crc = checksum32((unsigned char *)&nand_parameter,
+ sizeof(struct flash_nand_parameter) - 4);
+}
+
+static void hal_send_cmd_brick(unsigned char data, unsigned char io16,
+ unsigned short num, unsigned char next_act)
+{
+ unsigned long cmd_reg;
+
+ cmd_reg = NANDFC_BRICK_DATA(data)
+ | NANDFC_BRICK_W_WIDTH(io16)
+ | NANDFC_BRICK_R_WIDTH(io16)
+ | NANDFC_BRICK_DATA_NUM(num)
+ | NANDFC_BRICK_NEXT_ACT(next_act);
+ __raw_writel(cmd_reg, NANDFC_REG_BRICK_FIFO_WRITE_POINTER);
+#ifdef NAND_DEBUG
+ printf(" hal_send_cmd_brick 0x%08lx\n", cmd_reg);
+#endif
+}
+
+static void hal_start_cmd_data(void)
+{
+ unsigned long cmd_reg;
+
+ cmd_reg = __raw_readl(NANDFC_REG_CONFIG_A);
+ cmd_reg |= NANDFC_CMDFULL_STA(1);
+
+ __raw_writel(cmd_reg, NANDFC_REG_CONFIG_A);
+}
+
+#ifdef __SCRAMBLE_ENABLE__
+static void hal_set_scramble_func(BOOL enable)
+{
+ unsigned long cmd_reg;
+
+ cmd_reg = __raw_readl(NANDFC_REG_CONFIG_A);
+ cmd_reg &= ~ NANDFC_SCRAMBLE_ENABLE(1);
+ cmd_reg |= NANDFC_SCRAMBLE_ENABLE(enable);
+
+ __raw_writel(cmd_reg, NANDFC_REG_CONFIG_A);
+}
+#endif
+
+/*
+static void hal_set_col_addr(unsigned int col_addr)
+{
+ __raw_writel(col_addr, NANDFC_REG_COL_ADDR);
+}
+*/
+
+static void hal_flush_buf(struct mtd_info *mtd)
+{
+ /*
+ there is no reg NANDFC_REG_BUF_CTRL
+ */
+ //__raw_writel(0x7, NANDFC_REG_BUF_CTRL);
+}
+
+static unsigned long hal_wait_cmd_complete(void)
+{
+ unsigned long int_stat;
+ unsigned long long wait_time = NAND_TIMEOUT;
+ unsigned long long start_time = hal_gettime();
+ int timeout = 0;
+
+ /* wait done */
+ /*
+ * Use NANDFC_INT_STAT_IDLE instead of NANDFC_INT_DONE
+ * this is HW bug, NANDFC_INT_DONE comes too early
+ * however, NANDFC_INT_STAT_IDLE is not an interrupt source
+ * need HW fix anyway
+ */
+ do {
+ int_stat = __raw_readl(NANDFC_REG_INT_STAT);
+ if (hal_gettime() - start_time >= wait_time) {
+ timeout = 1;
+ }
+ } while (!(int_stat & NANDFC_INT_DONE) && !timeout);
+
+ /* to clear */
+ __raw_writel(int_stat & NANDFC_INT_CLR_MASK, NANDFC_REG_INT_STAT);
+
+ if (timeout) {
+ printf("nand error, cmd timeout\n");
+ return -ETIME;
+ }
+
+ if (int_stat & NANDFC_INT_ERR_ALL) {
+ printf("nand error, int_stat = %lx\n", int_stat);
+ return (int_stat & NANDFC_INT_ERR_ALL);
+ }
+ return 0;
+}
+
+static u16 nand_cal_message_num_size(struct rda_nand_info *info,
+ u16 * message_num, u16* msg_ecc_size)
+{
+ u16 num, mod, ecc_size, page_size, oob_size, message_len, ecc_mode;
+
+ page_size = info->vir_page_size;
+ oob_size = info->oob_size;
+ message_len = info->message_len;
+ ecc_mode = info->ecc_mode;
+
+ num = page_size / message_len;
+ mod = page_size % message_len;
+ if (mod)
+ num += 1;
+ else
+ mod = message_len;
+
+ ecc_size = g_nand_ecc_size[ecc_mode];
+ if (ecc_size % 2)
+ ecc_size = ecc_size + 1;
+
+ if (ecc_size * num > (oob_size - info->vir_oob_size)){
+ printf("Error:ecc used bytes has passed the oob size\n");
+ //return 0;
+ }
+
+ *message_num = num;
+ *msg_ecc_size = ecc_size;
+ return mod;
+}
+
+static unsigned char get_nand_eccmode(unsigned short ecc_bits)
+{
+ unsigned char i;
+
+ if(ecc_bits < 8 || ecc_bits > 96 || (ecc_bits % 8) != 0) {
+ printf("wrong ecc_bits, nand controller not support! \n");
+ return 0xff;
+ }
+
+ for(i = 0; i < ARRAY_SIZE(g_nand_ecc_size); i++) {
+ if(ECCSIZE(ecc_bits) == g_nand_ecc_size[i]) {
+ return i;
+ }
+ }
+
+ return 0;
+}
+
+static uint8_t nand_eccmode_autoselect(struct rda_nand_info *info)
+{
+ u16 num, mod, ecc_size, ecc_bits, max_ecc_parity_num;
+
+ ecc_bits = 96;
+ max_ecc_parity_num = info->oob_size - info->vir_oob_size;
+
+ num = info->vir_page_size / info->message_len;
+ mod = info->vir_page_size % info->message_len;
+ if (mod)
+ num += 1;
+
+ while(ecc_bits >= 8) {
+ ecc_size = ECCSIZE(ecc_bits);
+ if (ecc_size % 2)
+ ecc_size = ecc_size + 1;
+
+ if (ecc_size * num > max_ecc_parity_num){
+ ecc_bits -= 8;
+ } else
+ break;
+ }
+
+ return get_nand_eccmode(ecc_bits);
+}
+
+static int init_nand_info(struct rda_nand_info *info)
+{
+ u16 message_num = 0, message_mod;
+ u16 msg_ecc_size = 0, page_ecc_size;
+ u16 bch_kk = 0, bch_nn = 0, bch_oob_kk = 0, bch_oob_nn = 0;
+
+ info->hard_ecc_hec = 0;
+ info->nand_use_type = 1;
+ info->oob_size = NAND_SPARE_SIZE;
+ info->vir_erase_size = NAND_BLOCK_SIZE;
+
+ if (info->parameter_mode_select == NAND_PARAMETER_BY_GPIO) {
+ switch (info->type) {
+ case NAND_TYPE_2K:
+ info->vir_page_size = 2048;
+ info->vir_page_shift = 11;
+ break;
+ case NAND_TYPE_4K:
+ info->vir_page_size = 4096;
+ info->vir_page_shift = 12;
+ break;
+ case NAND_TYPE_8K:
+ info->vir_page_size = 8192;
+ info->vir_page_shift = 13;
+ break;
+ case NAND_TYPE_16K:
+ info->vir_page_size = 16384;
+ info->vir_page_shift = 14;
+ break;
+ default:
+ printf("invalid nand type %d\n", info->type);
+ return -EINVAL;
+ }
+
+ info->max_eccmode_support = nand_eccmode_autoselect(info);
+ } else {
+ info->vir_page_size = nand_parameter.page_size;
+ if (is_power_of_2(info->vir_page_size))
+ info->vir_page_shift = ffs(info->vir_page_size) - 1;
+ else
+ info->vir_page_shift = 0;
+
+ if (nand_parameter.spare_space_size) {
+ info->ecc_mode = nand_eccmode_autoselect(info);
+ } else {
+ info->ecc_mode = get_nand_eccmode(nand_parameter.ecc_bits);
+ }
+ }
+ info->ecc_mode_bak = info->ecc_mode;
+ info->type_bak = info->type;
+ info->cmd_flag = 0;
+ info->dump_debug_flag = 0;
+ message_mod = nand_cal_message_num_size(info, &message_num, &msg_ecc_size);
+ page_ecc_size = msg_ecc_size * message_num;
+
+ info->page_total_num = info->vir_page_size + info->vir_oob_size + page_ecc_size;
+ info->flash_oob_off = info->vir_page_size + page_ecc_size - msg_ecc_size;
+
+ bch_kk = info->message_len;
+ bch_nn = bch_kk + g_nand_ecc_size[info->ecc_mode];
+ info->bch_data= NANDFC_BCH_KK_DATA(bch_kk) | NANDFC_BCH_NN_DATA(bch_nn);
+
+ bch_oob_kk = message_mod + info->vir_oob_size;
+ bch_oob_nn = bch_oob_kk + g_nand_ecc_size[info->ecc_mode];
+ info->bch_oob = NANDFC_BCH_KK_OOB(bch_oob_kk) | NANDFC_BCH_NN_OOB(bch_oob_nn) ;
+
+ return 0;
+}
+
+static u32 cal_freq_by_divreg(u32 basefreq, u32 reg, u32 div2)
+{
+ u32 newfreq;
+
+ if (reg >= ARRAY_SIZE(clk_div_map)) {
+ printf("nand:Invalid div reg: %u\n", reg);
+ reg = ARRAY_SIZE(clk_div_map) - 1;
+ }
+ /* Assuming basefreq is smaller than 2^31 (2.147G Hz) */
+ newfreq = (basefreq << (div2 ? 0 : 1)) / (clk_div_map[reg] >> 1);
+ return newfreq;
+}
+
+unsigned long get_master_clk_rate(u32 reg)
+{
+ u32 div2;
+ unsigned long rate;
+
+ div2 = reg & SYS_CTRL_AP_AP_APB2_SRC_SEL;
+ reg = GET_BITFIELD(reg, SYS_CTRL_AP_AP_APB2_FREQ);
+ rate = cal_freq_by_divreg(PLL_BUS_FREQ, reg, div2);
+
+ return rate;
+}
+
+#ifndef CONFIG_RDA_FPGA
+static unsigned long rda_nand_clk_div_tbl[] = {
+ 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 12, 14, 16, 18, 20, 22, 24,26, 28, 30, 32, 40
+};
+#endif
+
+static unsigned long hal_calc_divider(struct rda_nand_info *info)
+{
+#ifdef CONFIG_RDA_FPGA
+ return 7;
+#else
+ unsigned long mclk = info->master_clk;
+ unsigned long div, clk_div;
+ int i;
+ int size = ARRAY_SIZE(rda_nand_clk_div_tbl);
+
+ div = mclk / info->clk;
+ if (mclk % info->clk)
+ div += 1;
+
+ for (i = 0; i < size; i++) {
+ if(div <= rda_nand_clk_div_tbl[i]) {
+ clk_div = i;
+ break;
+ }
+ }
+
+ if (i >= size) {
+ clk_div = size - 1;
+ }
+
+ printf("NAND: max clk: %ld, bus clk: %ld\n", info->clk, mclk);
+ printf("NAND: div: %ld, clk_div: %ld\n", div, clk_div);
+ return clk_div;
+#endif
+}
+
+static int hal_init(struct rda_nand_info *info)
+{
+ unsigned long config_a, config_b,page_para,message_oob;
+ unsigned long clk_div = hal_calc_divider(info);
+ uint16_t msg_package_num, msg_package_mod;
+
+ __raw_writel((1 << 23), NANDFC_REG_CONFIG_A);
+ __raw_writel(0, NANDFC_REG_CONFIG_A);
+
+ /* setup config_a and config_b */
+ config_a = NANDFC_CYCLE(clk_div);
+ config_a |= NANDFC_CHIP_SEL(0x0e);
+ config_a |= NANDFC_POLARITY_IO(0); // set 0 invert IO
+ config_a |= NANDFC_POLARITY_MEM(1); // set 1 invert MEM
+ config_a |= NANDFC_BRICK_COMMAND(1);
+
+ /* enable the 16bit mode; */
+ if (info->bus_width_16)
+ config_a |= NANDFC_WDITH_16BIT(1);
+
+ config_a |= (1 << 20);
+
+ config_b = NANDFC_HWECC(1) | NANDFC_ECC_MODE(info->ecc_mode);
+
+ msg_package_num = info->vir_page_size/info->message_len;
+ msg_package_mod = info->vir_page_size%info->message_len;
+ if(msg_package_mod)
+ msg_package_num += 1;
+ else
+ msg_package_mod = info->vir_page_size;
+ /*16k page nand need program twice one page*/
+ /*package num need change when program if not time of 2*/
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K)
+ msg_package_num >>= 1;
+
+ message_oob = NANDFC_OOB_SIZE(info->vir_oob_size) |
+ NANDFC_MESSAGE_SIZE(msg_package_num * info->message_len);
+ /*page size is not used, but package num is used*/
+ page_para = NANDFC_PAGE_SIZE(info->page_total_num) |
+ NANDFC_PACKAGE_NUM(msg_package_num);
+
+ __raw_writel(config_a, NANDFC_REG_CONFIG_A);
+ __raw_writel(config_b, NANDFC_REG_CONFIG_B);
+ __raw_writel(page_para, NANDFC_REG_PAGE_PARA);
+ if (msg_package_num == 1)
+ info->bch_data = info->bch_oob;
+ __raw_writel(info->bch_data, NANDFC_REG_BCH_DATA);
+ __raw_writel(info->bch_oob, NANDFC_REG_BCH_OOB);
+ __raw_writel(message_oob, NANDFC_REG_MESSAGE_OOB_SIZE);
+ __raw_writel(0x80008000, NANDFC_REG_IRBN_COUNT);
+ __raw_writel(0x20202020, NANDFC_REG_BRICK_FSM_TIME0);
+ __raw_writel(0x00006020, NANDFC_REG_BRICK_FSM_TIME1);
+ __raw_writel(0x80000000, NANDFC_REG_BRICK_FSM_TIME2);
+ printf("bch_data=0x%x, bch_oob=0x%x, page_total=0x%x, oob=0x%x \n",
+ info->bch_data, info->bch_oob, info->page_total_num, info->vir_oob_size);
+ printf("page_para=0x%08lx, message_oob=0x%08lx\n", page_para, message_oob);
+ printf("NAND: nand init done, config=0x%08lx configb=0x%08lx\n", config_a, config_b);
+
+ return 0;
+}
+
+static int nand_eccmode_setting(struct rda_nand_info *info,
+ NAND_BCHMODE_TYPE eccmode)
+{
+ u16 message_num = 0, message_mod;
+ u16 msg_ecc_size = 0, page_ecc_size;
+ u16 bch_kk = 0, bch_nn = 0, bch_oob_kk = 0, bch_oob_nn = 0;
+ unsigned long config_b,page_para,message_oob;
+
+ info->ecc_mode = eccmode;
+
+ message_mod = nand_cal_message_num_size(info, &message_num, &msg_ecc_size);
+ page_ecc_size = msg_ecc_size * message_num;
+
+ info->page_total_num = info->vir_page_size + info->vir_oob_size + page_ecc_size;
+ info->flash_oob_off = info->vir_page_size + page_ecc_size - msg_ecc_size;
+
+ bch_kk = info->message_len;
+ bch_nn = bch_kk + g_nand_ecc_size[eccmode];
+ info->bch_data= NANDFC_BCH_KK_DATA(bch_kk) | NANDFC_BCH_NN_DATA(bch_nn);
+
+ bch_oob_kk = message_mod + info->vir_oob_size;
+ bch_oob_nn = bch_oob_kk + g_nand_ecc_size[eccmode];
+ info->bch_oob = NANDFC_BCH_KK_OOB(bch_oob_kk) | NANDFC_BCH_NN_OOB(bch_oob_nn) ;
+
+ config_b = NANDFC_HWECC(1) | NANDFC_ECC_MODE(info->ecc_mode);
+
+ /*16k page nand need program twice one page*/
+ /*package num need change when program if not time of 2*/
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K)
+ message_num >>= 1;
+
+ message_oob = NANDFC_OOB_SIZE(info->vir_oob_size) |
+ NANDFC_MESSAGE_SIZE(info->message_len * message_num);
+ /*page size is not used, but package num is used*/
+ page_para = NANDFC_PAGE_SIZE(info->page_total_num) |
+ NANDFC_PACKAGE_NUM(message_num);
+
+ __raw_writel(config_b, NANDFC_REG_CONFIG_B);
+ __raw_writel(page_para, NANDFC_REG_PAGE_PARA);
+ if (message_num == 1)
+ info->bch_data = info->bch_oob;
+ __raw_writel(info->bch_data, NANDFC_REG_BCH_DATA);
+ __raw_writel(info->bch_oob, NANDFC_REG_BCH_OOB);
+ __raw_writel(message_oob, NANDFC_REG_MESSAGE_OOB_SIZE);
+
+#ifdef NAND_DEBUG
+ printf("nand_eccmode_setting:bch_data=0x%x, bch_oob=0x%x, page_total=0x%x, oob=0x%x\n",
+ info->bch_data, info->bch_oob, info->page_total_num, info->vir_oob_size);
+ printf("nand_eccmode_setting:page_para=0x%08lx, message_oob=0x%08lx\n",
+ page_para, message_oob);
+#endif
+ printf("nand ecc setting done, configA=0x%x, configb=0x%08lx, type=%d\n",
+ __raw_readl(NANDFC_REG_CONFIG_A), config_b, info->type);
+ return 0;
+}
+
+static void nand_eccmode_convert(unsigned int page_addr, struct mtd_info *mtd)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 ecc_mode;
+
+ if(page_addr < info->boot_logic_end_pageaddr) {
+ ecc_mode = info->ecc_mode_bak;
+ } else {
+ ecc_mode = info->max_eccmode_support;
+ }
+
+ if (ecc_mode != info->ecc_mode)
+ nand_eccmode_setting(info, ecc_mode);
+}
+
+static u8 nand_rda_read_byte(struct mtd_info *mtd)
+{
+ u8 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *((u8 *) info->byte_buf + info->index);
+ info->index++;
+#ifdef NAND_DEBUG
+ printf("nand_read_byte, ret = %02x\n", ret);
+#endif
+ return ret;
+}
+
+static u16 nand_rda_read_word(struct mtd_info *mtd)
+{
+ u16 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *(u16 *) ((uint8_t *) info->byte_buf + info->index);
+ info->index += 2;
+#ifdef NAND_DEBUG
+ printf("nand_read_word, ret = %04x\n", ret);
+#endif
+ return ret;
+}
+
+static void nand_rda_read_buf(struct mtd_info *mtd, uint8_t * buf, int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_R + info->read_ptr);
+ u8 * u_nand_temp_buffer = &g_nand_flash_temp_buffer[info->read_ptr];
+
+#ifdef NAND_DEBUG
+ printf("read : buf addr = 0x%x, len = %d, read_ptr = %d, u_nand_temp_buffer = 0x%x \n",
+ (u32) buf, (u32)len,
+ (u32) info->read_ptr, (u32)u_nand_temp_buffer);
+#endif /* NAND_DEBUG */
+
+#ifndef CONFIG_NAND_RDA_DMA
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K) {
+ memcpy((void *)buf, (void *)u_nand_temp_buffer, len);
+ } else {
+ if (info->page_addr == 0 && info->read_ptr == 0 &&
+ info->parameter_mode_select == NAND_PARAMETER_BY_NAND) {
+ /* specially do for nand when read 1KB of first page. */
+ if (info->dump_debug_flag == 0)
+ len = info->vir_page_size;/*no ecc bytes*/
+ else
+ len = 2048;/*ecc bytes needed*/
+ memset(buf, 0xff, info->page_size);
+ }
+ memcpy((void *)buf, (void *)nand_ptr, len);
+ }
+
+ info->read_ptr += len;
+
+#ifdef NAND_DEBUG_VERBOSE
+ rda_dump_buf((char *)buf, len);
+#endif
+
+#else
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)buf;
+ int ret = 0;
+
+ /*
+ * If size is less than the size of oob,
+ * we copy directly them to mapping buffer.
+ */
+ if (len <= mtd->oobsize) {
+ memcpy(buf, (void *)nand_ptr, len);
+ info->read_ptr = 0;
+ return;
+ }
+
+ if (((u32)addr & 0x7) != 0) {
+ printf("ERROR, nand dma read buffer %p is not 8bytes aligned\n",
+ addr);
+ return;
+ }
+
+ phys_addr = dma_map_single(addr, len, DMA_FROM_DEVICE);
+
+ dma_param.src_addr = (u32) info->nand_data_phys;
+ dma_param.dst_addr = phys_addr;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FR_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda nand : Failed to set parameter\n");
+ dma_unmap_single(addr, len, DMA_FROM_DEVICE);
+ return;
+ }
+
+ /* use flush to avoid annoying unaligned warning */
+ /* however, invalidate after the dma it the right thing to do */
+ flush_dcache_range((u32)addr, (u32)(addr + len));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* use flush to avoid annoying unaligned warning */
+ //invalidate_dcache_range((u32)addr, (u32)(addr + len));
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, len, DMA_FROM_DEVICE);
+ info->read_ptr += len;
+
+ return;
+#endif /* CONFIG_NAND_RDA_DMA */
+}
+
+static void nand_rda_write_buf(struct mtd_info *mtd, const uint8_t * buf,
+ int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_W + info->write_ptr);
+ u8 *u_nand_temp_buffer = &g_nand_flash_temp_buffer[info->write_ptr];
+
+#ifdef NAND_DEBUG
+ printf("write : buf addr = 0x%p, len = %d, write_ptr = %d\n", buf, len,
+ info->write_ptr);
+#endif /* NAND_DEBUG */
+
+#ifdef NAND_DEBUG_VERBOSE
+ rda_dump_buf((char *)buf, len);
+#endif
+
+#ifndef CONFIG_NAND_RDA_DMA
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K)
+ memcpy((void *)u_nand_temp_buffer, (void *)buf, len);
+ else
+ memcpy((void *)nand_ptr, (void *)buf, len);
+
+ info->write_ptr += len;
+#else
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)buf;
+ int ret = 0;
+
+ /*
+ * If size is less than the size of oob,
+ * we copy directly them to mapping buffer.
+ */
+ if (len <= mtd->oobsize) {
+ memcpy((void *)nand_ptr, (void *)buf, len);
+ info->write_ptr += len;
+ return;
+ }
+
+ if (((u32)addr & 0x7) != 0) {
+ printf("ERROR, nand dma write %p buffer is not 8bytes aligned\n",
+ addr);
+ return;
+ }
+ phys_addr = dma_map_single(addr, len, DMA_TO_DEVICE);
+
+ dma_param.src_addr = phys_addr;
+ dma_param.dst_addr = (u32) info->nand_data_phys;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FW_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda nand : Failed to set parameter\n");
+ dma_unmap_single(addr, len, DMA_TO_DEVICE);
+ return;
+ }
+
+ flush_dcache_range((u32)addr, (u32)(addr + len));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, len, DMA_TO_DEVICE);
+ info->write_ptr += len;
+
+ return;
+#endif /* CONFIG_NAND_RDA_DMA */
+}
+
+static void nand_rda_do_cmd_pre(struct mtd_info *mtd)
+{
+ struct nand_chip *this = mtd->priv;
+ struct rda_nand_info *info = this->priv;
+ unsigned int page_addr = info->page_addr;
+
+ __raw_writel(0xfff, NANDFC_REG_INT_STAT);
+ switch (info->cmd) {
+ case NAND_CMD_SEQIN:
+ hal_flush_buf(mtd);
+ info->write_ptr = 0;
+ break;
+ case NAND_CMD_READ0:
+ hal_flush_buf(mtd);
+ //info->read_ptr = 0;
+ if(info->parameter_mode_select == NAND_PARAMETER_BY_NAND &&
+ info->dump_debug_flag == 0) {
+ if (page_addr < info->boot_logic_end_pageaddr) {
+ page_addr += info->spl_logic_pageaddr;
+ info->page_addr = page_addr;
+ }
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+static void nand_rda_do_cmd_post(struct mtd_info *mtd)
+{
+ struct nand_chip *this = mtd->priv;
+ struct rda_nand_info *info = this->priv;
+ u32 temp;
+
+ switch (info->cmd) {
+ case NAND_CMD_RESET:
+ return;
+ case NAND_CMD_READID:
+ temp = __raw_readl(NANDFC_REG_IDCODE_A);
+ info->byte_buf[0] = temp;
+ temp = __raw_readl(NANDFC_REG_IDCODE_B);
+ info->byte_buf[1] = temp;
+ info->index = 0;
+ break;
+ case NAND_CMD_STATUS:
+ temp = __raw_readl(NANDFC_REG_OP_STATUS);
+ info->byte_buf[0] = (temp & 0xFF);
+ info->index = 0;
+ if (info->byte_buf[0] != 0xe0) {
+ printf("nand error in op status %x\n",
+ info->byte_buf[0]);
+ }
+#ifdef NAND_DEBUG
+ printf("post_cmd read status 0x3c = %x\n", info->byte_buf[0]);
+#endif
+ break;
+ case NAND_CMD_READ0: // NAND_CMD_READOOB goes here too
+ break;
+#if 0
+/* read back after write, for err checking */
+ case NAND_CMD_SEQIN:
+ {
+ int cmd_ret;
+ /* read back instantly and check fcs/crc result */
+ hal_send_cmd((unsigned char)NAND_CMD_READ0,
+ info->page_addr);
+ cmd_ret = hal_wait_cmd_complete();
+ if (cmd_ret) {
+ printf
+ ("readback cmd fail, page_addr = %x, ret = %x\n",
+ info->page_addr, cmd_ret);
+ }
+ }
+ break;
+#endif
+#if 0
+/* delay 10ms, for erase to complete */
+ case NAND_CMD_ERASE1:
+ udelay(10000);
+ break;
+#endif
+ default:
+ break;
+ }
+}
+
+static void nand_rda_hwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl)
+{
+#ifdef NAND_DEBUG
+ printf("nand_rda_hwcontrol, cmd = %x, ctrl = %x, not use anymore\n",
+ cmd, ctrl);
+#endif
+}
+
+static int nand_rda_dev_ready(struct mtd_info *mtd)
+{
+ return 1;
+}
+
+int nand_cmd_reset_flash(void)
+{
+ int ret = 0;
+
+ hal_send_cmd_brick(NAND_CMD_RESET,0,0,5);
+ hal_send_cmd_brick(0,0,0,0);
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ if (ret)
+ printf("nand_reset_flash failed\n");
+
+ return ret;
+}
+
+int nand_cmd_read_id(void)
+{
+ int ret = 0;
+
+ hal_send_cmd_brick(NAND_CMD_READID,0,0,2);
+ hal_send_cmd_brick(0,0,0,6);
+ hal_send_cmd_brick(0,0,0,0xd);
+ hal_send_cmd_brick(0,0,7,0);
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ if (ret)
+ printf("nand_cmd_read_id failed\n");
+
+ return ret;
+}
+
+void nand_cmd_write_page(struct rda_nand_info *info, unsigned int page_addr,
+ u16 page_size, u16 col_addr)
+{
+ u8 addr_temp = 0;
+
+ hal_send_cmd_brick(NAND_CMD_SEQIN,0,0,2);
+
+ addr_temp = col_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (col_addr >> 8) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+
+ if (NAND_BLOCK_SIZE == 0x300000) {
+ /*page 0x180 ~ 0x1ff are invalid, so need skip to next block.*/
+ page_addr += 0x80 * (page_addr / 0x180);
+ /*block 0xab0 ~ 0xfff are invalid, so need skip to next LUN.*/
+ page_addr += (0x550 << 9) * ((page_addr >> 9) / 0xab0);
+ }
+
+ addr_temp = page_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 8) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 16) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,7);
+
+ hal_send_cmd_brick(0,0,page_size,3);
+
+ hal_send_cmd_brick(0,info->bus_width_16,page_size, 1);
+
+ hal_send_cmd_brick(NAND_CMD_PAGEPROG,0,0,5);
+
+ hal_send_cmd_brick(0,0,0,0);
+
+ return;
+}
+
+void nand_cmd_read_page(struct rda_nand_info *info, unsigned int page_addr,
+ unsigned short num, unsigned short col_addr)
+{
+ u8 addr_temp = 0;
+
+ hal_send_cmd_brick(NAND_CMD_READ0,0,0,2);
+
+ addr_temp = col_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (col_addr >> 8)& 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+
+ if (NAND_BLOCK_SIZE == 0x300000) {
+ /*page 0x180 ~ 0x1ff are invalid, so need skip to next block.*/
+ page_addr += 0x80 * (page_addr / 0x180);
+ /*block 0xab0 ~ 0xfff are invalid, so need skip to next LUN.*/
+ page_addr += (0x550 << 9) * ((page_addr >> 9) / 0xab0);
+ }
+
+ addr_temp = page_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 8) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 16) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,1);
+
+ hal_send_cmd_brick(NAND_CMD_READSTART,0,0,5);
+ hal_send_cmd_brick(0,0,0,0xa);
+ hal_send_cmd_brick(0,0,0,0x4);
+
+ hal_send_cmd_brick(0,info->bus_width_16,num, 0);
+
+ return;
+}
+
+void nand_cmd_read_random(struct rda_nand_info *info, unsigned short num,
+ unsigned short col_addr)
+{
+ u8 addr_temp = 0;
+
+ hal_send_cmd_brick(NAND_CMD_RNDOUT,0,0,2);
+
+ addr_temp = col_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (col_addr >> 8)& 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,1);
+ hal_send_cmd_brick(NAND_CMD_RNDOUTSTART,0,0,9);
+ hal_send_cmd_brick(0,0,0,0x4);
+
+ hal_send_cmd_brick(0,info->bus_width_16,num, 0);
+
+ return;
+}
+void nand_cmd_block_erase(unsigned int page_addr)
+{
+ u8 addr_temp = 0;
+ int ret = 0;
+
+ hal_send_cmd_brick(NAND_CMD_ERASE1,0,0,2);
+
+ if (NAND_BLOCK_SIZE == 0x300000) {
+ /*page 0x180 ~ 0x1ff are invalid, so need skip to next block.*/
+ page_addr += 0x80 * (page_addr / 0x180);
+ /*block 0xab0 ~ 0xfff are invalid, so need skip to next LUN.*/
+ page_addr += (0x550 << 9) * ((page_addr >> 9) / 0xab0);
+ }
+
+ addr_temp = page_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 8) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 16) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,1);
+
+ hal_send_cmd_brick(NAND_CMD_ERASE2,0,0,5);
+ hal_send_cmd_brick(0,0,0,0);
+
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ printf("nand_cmd_block_erase fail\n");
+ return;
+ }
+}
+
+void nand_cmd_read_status(void)
+{
+ int ret = 0;
+
+ hal_send_cmd_brick(NAND_CMD_STATUS,0,0,6);
+ hal_send_cmd_brick(0,0,0,0xd);
+ hal_send_cmd_brick(0,0,1,0);
+
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ printf("nand_cmd_read_status failed\n");
+ return;
+ }
+}
+
+void nandfc_page_write_first(struct rda_nand_info *info, unsigned int page_addr,
+ u16 page_size, u16 col_addr)
+{
+ u8 addr_temp = 0;
+
+ hal_send_cmd_brick(NAND_CMD_SEQIN,0,0,2);
+
+ addr_temp = col_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (col_addr >> 8) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+
+ if (NAND_BLOCK_SIZE == 0x300000) {
+ /*page 0x180 ~ 0x1ff are invalid, so need skip to next block.*/
+ page_addr += 0x80 * (page_addr / 0x180);
+ /*block 0xab0 ~ 0xfff are invalid, so need skip to next LUN.*/
+ page_addr += (0x550 << 9) * ((page_addr >> 9) / 0xab0);
+ }
+
+ addr_temp = page_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 8) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (page_addr >> 16) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,7);
+
+ hal_send_cmd_brick(0,0,0,3);
+
+ hal_send_cmd_brick(0,info->bus_width_16,page_size, 0);
+
+ return;
+}
+
+void nandfc_page_write_random(struct rda_nand_info *info, u16 col_addr,
+ int data_num, char cmd_2nd)
+{
+ u8 addr_temp = 0;
+
+ hal_send_cmd_brick(NAND_CMD_RNDIN,0,0,2);
+
+ addr_temp = col_addr & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,2);
+ addr_temp = (col_addr >> 8) & 0xff;
+ hal_send_cmd_brick(addr_temp,0,0,9);
+
+ hal_send_cmd_brick(0,0,data_num, 3);
+ hal_send_cmd_brick(0,info->bus_width_16,data_num, 1);
+
+ hal_send_cmd_brick(cmd_2nd,0,0,5);
+
+ hal_send_cmd_brick(0,0,0,0);
+}
+
+int nand_page_write_all(unsigned int page_addr, struct mtd_info *mtd)
+{
+ int ret = 0;
+ u16 page_size = 0;
+ u16 col_addr = 0;
+ u32 message_oob = 0, page_para;
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) chip->IO_ADDR_W;
+ u8 *u_nand_temp_buffer = &g_nand_flash_temp_buffer[0];
+ u16 message_num = 0, message_mod = 0;
+ u16 first_wr_ecc_len = 0, first_wr_data_len = 0;
+
+ if(info->parameter_mode_select == NAND_PARAMETER_BY_GPIO)
+ nand_eccmode_convert(page_addr, mtd);
+
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K) {
+ message_num = info->vir_page_size / info->message_len;
+ message_mod = info->vir_page_size % info->message_len;
+ if(message_mod)
+ message_num += 1;
+ else
+ message_mod = info->message_len;
+
+ first_wr_data_len = (message_num >> 1) * info->message_len;
+
+ message_oob = NANDFC_OOB_SIZE(0) |
+ NANDFC_MESSAGE_SIZE(first_wr_data_len);
+
+ __raw_writel(info->bch_data, NANDFC_REG_BCH_OOB);
+ __raw_writel(message_oob, NANDFC_REG_MESSAGE_OOB_SIZE);
+
+ first_wr_ecc_len = (info->page_total_num - info->vir_page_size - \
+ info->vir_oob_size) / message_num * (message_num >> 1);
+ page_size = first_wr_data_len + first_wr_ecc_len;
+ col_addr = page_size;
+
+ if (info->bus_width_16)
+ page_size = page_size - 2;
+ else
+ page_size = page_size - 1;
+
+ page_para = NANDFC_PAGE_SIZE(page_size) |
+ NANDFC_PACKAGE_NUM(message_num >> 1);
+ __raw_writel(page_para, NANDFC_REG_PAGE_PARA);
+
+ hal_flush_buf(mtd);
+ memcpy((void *)nand_ptr, (void *)u_nand_temp_buffer, first_wr_data_len);
+ }else{
+ if (info->bus_width_16)
+ page_size = info->page_total_num - 2;
+ else
+ page_size = info->page_total_num - 1;
+ }
+
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K)
+ nandfc_page_write_first(info, page_addr, page_size, 0);
+ else
+ nand_cmd_write_page(info, page_addr, page_size, 0);
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K)
+ printf ("nandfc_page_write 16k first half page failed: page_addr = 0x%x\n",
+ page_addr);
+ else
+ printf ("nandfc_page_write failed: page_addr = 0x%x\n", page_addr);
+ return ret;
+ }
+
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K) {
+ message_oob = NANDFC_OOB_SIZE(info->vir_oob_size) |
+ NANDFC_MESSAGE_SIZE(info->vir_page_size - first_wr_data_len);
+
+ __raw_writel(info->bch_oob, NANDFC_REG_BCH_OOB);
+ __raw_writel(message_oob, NANDFC_REG_MESSAGE_OOB_SIZE);
+ page_size = info->page_total_num - col_addr;
+
+ if (info->bus_width_16){
+ page_size = page_size - 2;
+ col_addr = col_addr >> 1;
+ } else
+ page_size = page_size - 1;
+
+ page_para = NANDFC_PAGE_SIZE(page_size) |
+ NANDFC_PACKAGE_NUM(message_num - (message_num >> 1));
+ __raw_writel(page_para, NANDFC_REG_PAGE_PARA);
+
+ hal_flush_buf(mtd);
+ memcpy((void *)nand_ptr, (void *)(u_nand_temp_buffer + first_wr_data_len),
+ info->vir_page_size + info->vir_oob_size - first_wr_data_len);
+
+ //nand_cmd_write_page(page_addr, page_size, col_addr);
+ nandfc_page_write_random(info, col_addr, page_size, NAND_CMD_PAGEPROG);
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ printf ("nandfc_page_write 16k second half page failed: page_addr = 0x%x\n",
+ page_addr);
+ return ret;
+ }
+ }
+
+ return ret;
+}
+
+int nand_page_read_all(unsigned int page_addr, struct mtd_info *mtd)
+{
+ int ret = 0;
+ unsigned short num = 0,col_addr = 0;
+ u32 message_oob = 0, page_para;
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) chip->IO_ADDR_R;
+ u8 *u_nand_temp_buffer = &g_nand_flash_temp_buffer[0];
+ u16 message_num = 0, message_mod = 0;
+ u16 first_rd_ecc_len = 0, first_rd_data_len = 0;
+
+ if (info->parameter_mode_select == NAND_PARAMETER_BY_GPIO)
+ nand_eccmode_convert(page_addr, mtd);
+
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K){
+ message_num = info->vir_page_size / info->message_len;
+ message_mod = info->vir_page_size % info->message_len;
+ if(message_mod)
+ message_num += 1;
+ else
+ message_mod = info->message_len;
+
+ first_rd_data_len = info->message_len * (message_num >> 1);
+ message_oob = NANDFC_OOB_SIZE(0) | NANDFC_MESSAGE_SIZE(first_rd_data_len);
+
+ __raw_writel(info->bch_data, NANDFC_REG_BCH_OOB);
+ __raw_writel(message_oob, NANDFC_REG_MESSAGE_OOB_SIZE);
+
+ first_rd_ecc_len = (info->page_total_num - info->vir_page_size - \
+ info->vir_oob_size) / message_num * (message_num >> 1);
+ num = first_rd_data_len+ first_rd_ecc_len;
+
+ page_para = NANDFC_PAGE_SIZE(num) |
+ NANDFC_PACKAGE_NUM(message_num >> 1);
+ __raw_writel(page_para, NANDFC_REG_PAGE_PARA);
+ }else
+ num = info->page_total_num;
+
+ nand_cmd_read_page(info, page_addr, num, col_addr);
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ if (ret) {
+ if (info->type != NAND_TYPE_16K && info->type != NAND_TYPE_14K) {
+ printf ("nandfc_page_read failed : page_addr = 0x%x\n", page_addr);
+ return ret;
+ } else
+ printf ("nandfc_page_read 16k first half page failed: page_addr = 0x%x\n",
+ page_addr);
+ }
+
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K)
+ memcpy((void *)u_nand_temp_buffer, (void *)nand_ptr, first_rd_data_len);
+
+ if (info->type == NAND_TYPE_16K || info->type == NAND_TYPE_14K) {
+ message_oob = NANDFC_OOB_SIZE(info->vir_oob_size) |
+ NANDFC_MESSAGE_SIZE(info->vir_page_size - first_rd_data_len);
+
+ __raw_writel(info->bch_oob, NANDFC_REG_BCH_OOB);
+ __raw_writel(message_oob, NANDFC_REG_MESSAGE_OOB_SIZE);
+
+ col_addr = num;
+ num = info->page_total_num - col_addr;
+
+ page_para = NANDFC_PAGE_SIZE(num) |
+ NANDFC_PACKAGE_NUM(message_num - (message_num >> 1));
+ __raw_writel(page_para, NANDFC_REG_PAGE_PARA);
+
+ nand_cmd_read_random(info, num, col_addr);
+ hal_start_cmd_data();
+ ret = hal_wait_cmd_complete();
+ memcpy((void *)(u_nand_temp_buffer + first_rd_data_len), (void *)nand_ptr,
+ (info->vir_page_size + info->vir_oob_size - first_rd_data_len));
+ if (ret) {
+ printf ("nandfc_page_read 16k second half page failed: page_addr = 0x%x\n",
+ page_addr);
+ return ret;
+ }
+ }
+
+ return ret;
+}
+
+static void nand_parameter_info_wr(unsigned int page_addr, struct mtd_info *mtd)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (chip->IO_ADDR_W);
+ u8 ecc_mode;
+
+ if(page_addr < info->boot_logic_end_pageaddr && info->cmd_flag == 0) {
+ ecc_mode = NAND_ECC_96BIT_WITHOUT_CRC;
+ info->vir_page_size = 1024;
+ info->vir_page_shift = 10;
+ info->vir_oob_size = 32;
+ info->message_len = 1024;
+ info->type = NAND_TYPE_2K;
+ info->cmd_flag = 1;
+ nand_eccmode_setting(info, ecc_mode);
+
+ memset(nand_ptr, 0xff, 2048);
+ memcpy(nand_ptr, (unsigned char*)&nand_parameter,
+ sizeof(struct flash_nand_parameter));
+ nand_page_write_all(0, mtd);
+
+ ecc_mode = info->ecc_mode_bak;
+ info->vir_page_size = nand_parameter.page_size;
+ if (is_power_of_2(info->vir_page_size))
+ info->vir_page_shift = ffs(info->vir_page_size) - 1;
+ else
+ info->vir_page_shift = 0;
+ info->vir_oob_size = nand_parameter.oob_size;
+ info->message_len = nand_parameter.ecc_msg_len;
+ info->type = info->type_bak;
+ nand_eccmode_setting(info, ecc_mode);
+ }
+}
+
+static void nand_parameter_info_rd(unsigned int page_addr, struct mtd_info *mtd)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 ecc_mode;
+
+ if(page_addr < info->spl_logic_pageaddr) {
+ ecc_mode = NAND_ECC_96BIT_WITHOUT_CRC;
+ if (ecc_mode != info->ecc_mode) {
+ info->vir_page_size = 1024;
+ info->vir_page_shift = 10;
+ info->vir_oob_size = 32;
+ info->message_len = 1024;
+ info->type = NAND_TYPE_2K;
+ }
+ } else {
+ ecc_mode = info->ecc_mode_bak;
+ if (ecc_mode != info->ecc_mode) {
+ info->vir_page_size = nand_parameter.page_size;
+ if (is_power_of_2(info->vir_page_size))
+ info->vir_page_shift = ffs(info->vir_page_size) - 1;
+ else
+ info->vir_page_shift = 0;
+ info->vir_oob_size = nand_parameter.oob_size;
+ info->message_len = nand_parameter.ecc_msg_len;
+ info->type = info->type_bak;
+ }
+ }
+
+ if (ecc_mode != info->ecc_mode) {
+ nand_eccmode_setting(info, ecc_mode);
+ }
+}
+
+static void nand_send_cmd_all(struct mtd_info *mtd)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ unsigned int page_addr = info->page_addr;
+
+ switch(info->cmd){
+ case NAND_CMD_READ0:
+ if(info->parameter_mode_select == NAND_PARAMETER_BY_NAND)
+ nand_parameter_info_rd(page_addr, mtd);
+ nand_page_read_all(page_addr, mtd);
+ break;
+ case NAND_CMD_RESET:
+ nand_cmd_reset_flash();
+ break;
+ case NAND_CMD_READID:
+ nand_cmd_read_id();
+ break;
+ case NAND_CMD_ERASE1:
+ nand_cmd_block_erase(page_addr);
+ if (info->parameter_mode_select == NAND_PARAMETER_BY_NAND) {
+ if (page_addr < info->boot_logic_end_pageaddr) {
+ info->cmd_flag = 0;
+ //nand_cmd_block_erase(0);
+ }
+ }
+ break;
+ case NAND_CMD_PAGEPROG:
+ case NAND_CMD_SEQIN:
+ nand_page_write_all(page_addr, mtd);
+ if(info->parameter_mode_select == NAND_PARAMETER_BY_NAND)
+ nand_parameter_info_wr(page_addr, mtd);
+ break;
+ case NAND_CMD_STATUS:
+ nand_cmd_read_status();
+ break;
+ default:
+ return;
+ }
+
+ //hal_start_cmd_data();
+}
+
+static void nand_rda_cmdfunc(struct mtd_info *mtd, unsigned int command,
+ int column, int page_addr)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+
+#ifdef NAND_DEBUG
+ printf("nand_rda_cmdfunc, cmd = %x, page_addr = %x, col_addr = %x\n",
+ command, page_addr, column);
+#endif
+
+ /* remap command */
+ switch (command) {
+ case NAND_CMD_SEQIN: /* 0x80 do nothing, wait for 0x10 */
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = NAND_CMD_NONE;
+ info->write_ptr= column;
+ if(info->parameter_mode_select == NAND_PARAMETER_BY_NAND) {
+ if (page_addr < info->boot_logic_end_pageaddr) {
+ page_addr += info->spl_logic_pageaddr;
+ info->page_addr = page_addr;
+ }
+ nand_parameter_info_rd(page_addr, mtd);
+ }
+ break;
+ case NAND_CMD_READSTART: /* hw auto gen 0x30 for read */
+ case NAND_CMD_ERASE2: /* hw auto gen 0xd0 for erase */
+#ifdef NAND_DEBUG
+ printf("erase block, erase_size = %x\n", mtd->erasesize);
+#endif
+ info->cmd = NAND_CMD_NONE;
+ break;
+ case NAND_CMD_PAGEPROG: /* 0x10 do the real program */
+ info->cmd = NAND_CMD_SEQIN;
+ info->col_addr = 0;
+ break;
+ case NAND_CMD_READOOB: /* Emulate NAND_CMD_READOOB */
+ info->page_addr = page_addr;
+ info->cmd = NAND_CMD_READ0;
+ /* Offset of oob */
+ info->col_addr = column;
+ info->read_ptr = mtd->writesize;
+ break;
+ case NAND_CMD_READ0: /* Emulate NAND_CMD_READOOB */
+ info->read_ptr = 0;
+ /*fall though, don't need break;*/
+ default:
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = command;
+ break;
+ }
+ if (info->cmd == NAND_CMD_NONE) {
+ return;
+ }
+
+#ifdef NAND_DEBUG
+ printf("after cmd remap, cmd = %x, page_addr = %x, col_addr = %x\n",
+ info->cmd, info->page_addr, info->col_addr);
+#endif
+/*
+ if (info->col_addr != -1) {
+ hal_set_col_addr(info->col_addr);
+ }
+*/
+ if (info->page_addr == -1)
+ info->page_addr = 0;
+
+ nand_rda_do_cmd_pre(mtd);
+
+ nand_send_cmd_all(mtd);
+
+ nand_rda_do_cmd_post(mtd);
+
+ nand_wait_ready(mtd);
+}
+
+static int nand_reset_flash(void)
+{
+ int ret = 0;
+#ifdef NAND_DEBUG
+ printf("Enter function nand_rda_init\n");
+#endif
+ nand_cmd_reset_flash();
+
+ return ret;
+}
+
+static int nand_read_id(unsigned int id[2])
+{
+ int ret = 0;
+
+ nand_cmd_read_id();
+
+ id[0] = __raw_readl(NANDFC_REG_IDCODE_A);
+ id[1] = __raw_readl(NANDFC_REG_IDCODE_B);
+
+ printf("NAND: Nand ID: %08x %08x\n", id[0], id[1]);
+
+#ifdef TGT_AP_DO_NAND_TEST
+ gbl_nand_test_id_val[0] = id[0];
+ gbl_nand_test_id_val[1] = id[1];
+#endif /* TGT_AP_DO_NAND_TEST */
+ return ret;
+}
+
+static void read_ID(struct mtd_info *mtd)
+{
+ unsigned int id[2];
+
+ nand_read_id(id);
+}
+
+static void nand_rda_select_chip(struct mtd_info *mtd, int chip)
+{
+ unsigned long config_a = __raw_readl(NANDFC_REG_CONFIG_A);
+
+ if ((chip == -1) || (chip > 3))
+ return;
+
+ config_a |= NANDFC_CHIP_SEL(0x0f);
+ config_a &= ~ NANDFC_CHIP_SEL(1 << chip);
+
+ //printf("**********config_a = 0x%lx", config_a);
+ __raw_writel(config_a, NANDFC_REG_CONFIG_A);
+}
+
+static int nand_get_type(struct rda_nand_info *info, unsigned int id[2])
+{
+ u16 hwcfg_nand_type;
+ int metal_id;
+
+ info->spl_adjust_ratio = 2;
+ metal_id = rda_metal_id_get();
+
+#if defined(CONFIG_MACH_RDA8850E)
+#define RDA_NAND_TYPE_BIT_BUS (1 << 1) /* 1: 8-bit; 0: 16-bit */
+/*bit7 bit0 00 menas 2k, 01 means 4k, 10 means 8k, 11 means 16k*/
+#define RDA_NAND_TYPE_BIT_7 (1 << 7)
+#define RDA_NAND_TYPE_BIT_0 (1 << 0)
+ printf("NAND: RDA8850E chip, metal %d\n", metal_id);
+ hwcfg_nand_type = rda_hwcfg_get() & 0x83;
+ if (hwcfg_nand_type & RDA_NAND_TYPE_BIT_BUS)
+ info->bus_width_16 = 0;
+ else
+ info->bus_width_16 = 1;
+
+ info->vir_oob_size = NAND_OOBSIZE;
+ info->parameter_mode_select = NAND_PARAMETER_BY_GPIO;
+
+ u16 nand_type = ((hwcfg_nand_type & RDA_NAND_TYPE_BIT_7) >> 6)
+ | (hwcfg_nand_type & RDA_NAND_TYPE_BIT_0);
+ if(nand_type == 0) {
+ info->type = NAND_TYPE_2K;
+ info->parameter_mode_select = NAND_PARAMETER_BY_NAND;
+ }
+ else if(nand_type == 1)
+ info->type = NAND_TYPE_4K;
+ else
+ info->type = nand_type;
+
+ if (info->parameter_mode_select == NAND_PARAMETER_BY_GPIO) {
+ switch(info->type){
+ case NAND_TYPE_2K:
+ info->page_size = 2048;
+ info->page_shift = 11;
+ info->ecc_mode = NAND_ECC_16BIT;
+ info->message_len = 2048;
+ break;
+ case NAND_TYPE_4K:
+ info->page_size = 4096;
+ info->page_shift = 12;
+ info->ecc_mode = NAND_ECC_24BIT;
+ info->message_len = 1024;
+ break;
+ case NAND_TYPE_8K:
+ info->page_size = 8192;
+ info->page_shift = 13;
+ info->ecc_mode = NAND_ECC_24BIT;
+ info->message_len = 1024;
+ break;
+ case NAND_TYPE_16K:
+ info->page_size = 16384;
+ info->page_shift = 14;
+ info->ecc_mode = NAND_ECC_32BIT;
+ info->message_len = 1024;
+ break;
+ default:
+ printf("Error nand type \n");
+ break;
+ }
+ }else {
+ fill_nand_parameter();
+ info->page_size = nand_parameter.page_size;
+ if (is_power_of_2(info->page_size))
+ info->page_shift = ffs(info->page_size) - 1;
+ else
+ info->page_shift = 0;
+ info->message_len = nand_parameter.ecc_msg_len;
+ info->vir_oob_size = nand_parameter.oob_size;
+ switch(info->page_size) {
+ case 2048:
+ info->type = NAND_TYPE_2K;
+ break;
+ case 4096:
+ info->type = NAND_TYPE_4K;
+ break;
+ case 8192:
+ info->type = NAND_TYPE_8K;
+ break;
+ case 16384:
+ info->type = NAND_TYPE_16K;
+ break;
+ case 3072:
+ info->type = NAND_TYPE_3K;
+ break;
+ case 7168:
+ info->type = NAND_TYPE_7K;
+ break;
+ case 14336:
+ info->type = NAND_TYPE_14K;
+ break;
+ default:
+ printf("Error nand type \n");
+ break;
+ }
+ }
+#else
+#if defined(CONFIG_MACH_RDA8810H)
+ printf("NAND: RDA8810H chip, metal %d\n", metal_id);
+ hwcfg_nand_type = rda_hwcfg_get();
+
+ if (RDA_HW_CFG_GET_BM_IDX(hwcfg_nand_type) == RDA_MODE_NAND_8BIT)
+ info->bus_width_16 = 0;
+ else
+ if (RDA_HW_CFG_GET_BM_IDX(hwcfg_nand_type) == RDA_MODE_NAND_16BIT)
+ info->bus_width_16 = 1;
+ else
+ printf("nand: invalid nand type \n");
+
+ info->parameter_mode_select = NAND_PARAMETER_BY_NAND;
+
+ fill_nand_parameter();
+ info->page_size = nand_parameter.page_size;
+ if (is_power_of_2(info->page_size))
+ info->page_shift = ffs(info->page_size) - 1;
+ else
+ info->page_shift = 0;
+ info->message_len = nand_parameter.ecc_msg_len;
+ info->vir_oob_size = nand_parameter.oob_size;
+ switch(info->page_size) {
+ case 2048:
+ info->type = NAND_TYPE_2K;
+ break;
+ case 4096:
+ info->type = NAND_TYPE_4K;
+ break;
+ case 8192:
+ info->type = NAND_TYPE_8K;
+ break;
+ case 16384:
+ info->type = NAND_TYPE_16K;
+ break;
+ case 3072:
+ info->type = NAND_TYPE_3K;
+ break;
+ case 7168:
+ info->type = NAND_TYPE_7K;
+ break;
+ case 14336:
+ info->type = NAND_TYPE_14K;
+ break;
+ default:
+ printf("Error nand type \n");
+ break;
+ }
+#else
+#error "WRONG MACH"
+#endif
+#endif
+
+ printf("NAND: actually ratio * 2, SPL adjust ratio is %d. \n",
+ info->spl_adjust_ratio);
+ return 0;
+}
+
+static int nand_rda_init(struct nand_chip *this, struct rda_nand_info *info)
+{
+ unsigned int id[2];
+ int ret = 0;
+
+#ifdef NAND_DEBUG
+ printf("Enter function nand_rda_init\n");
+#endif
+
+ ret = nand_get_type(info, id);
+ if (ret)
+ return ret;
+
+ ret = init_nand_info(info);
+ if (ret)
+ return ret;
+ if (info->bus_width_16)
+ this->options |= NAND_BUSWIDTH_16;
+
+ (void)hal_init(info);
+
+ ret = nand_reset_flash();
+ if (ret)
+ return ret;
+
+ ret = nand_read_id(id);
+ if (ret)
+ return ret;
+
+ return ret;
+}
+
+static int nand_rda_init_size(struct mtd_info *mtd, struct nand_chip *this,
+ u8 *id_data)
+{
+ struct rda_nand_info *info = this->priv;
+
+ /* TODO: this is not always right
+ * assuming nand is 2k/4k SLC for now
+ * for other types of nand, 64 pages per block is not always true
+ */
+ mtd->erasesize = info->vir_erase_size;
+ mtd->writesize = info->vir_page_size;
+ mtd->oobsize = info->vir_oob_size;
+
+ return (info->bus_width_16) ? NAND_BUSWIDTH_16 : 0;
+}
+
+int rda_nand_init(struct nand_chip *nand)
+{
+ struct rda_nand_info *info;
+ static struct rda_nand_info rda_nand_info;
+ int i;
+ u32 bootloader_end_addr = 0x400000;//4Mbytes
+
+ info = &rda_nand_info;
+#if 0
+ if (g_nand_flash_temp_buffer)
+ g_nand_flash_temp_buffer = (u8 *)malloc(18432);
+#endif
+ nand->chip_delay = 0;
+#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
+ nand->options |= NAND_USE_FLASH_BBT;
+#endif
+ /*
+ * in fact, nand controler we do hardware ECC silently, and
+ * we don't need tell mtd layer, and will simple nand operations
+ */
+ nand->ecc.mode = NAND_ECC_NONE;
+ /* Set address of hardware control function */
+ nand->cmd_ctrl = nand_rda_hwcontrol;
+ nand->init_size = nand_rda_init_size;
+ nand->cmdfunc = nand_rda_cmdfunc;
+ nand->read_byte = nand_rda_read_byte;
+ nand->read_word = nand_rda_read_word;
+ nand->read_buf = nand_rda_read_buf;
+ nand->write_buf = nand_rda_write_buf;
+ nand->dev_ready = nand_rda_dev_ready;
+ nand->select_chip = nand_rda_select_chip;
+ nand->read_nand_ID = read_ID;
+ nand->priv = (void *)info;
+ nand->IO_ADDR_R = nand->IO_ADDR_W = (void __iomem *)NANDFC_DATA_BUF;
+#ifdef CONFIG_NAND_RDA_DMA
+ info->nand_data_phys = (void __iomem *)NANDFC_DATA_BUF;
+#endif /* CONFIG_NAND_RDA_DMA */
+ info->index = 0;
+ info->write_ptr = 0;
+ info->read_ptr = 0;
+ info->master_clk = get_master_clk_rate(_TGT_AP_CLK_APB2);
+ info->clk=_TGT_AP_NAND_CLOCK;
+
+#ifdef CONFIG_NAND_RDA_DMA
+ rda_request_dma(&info->dma_ch);
+#endif /* CONFIG_NAND_RDA_DMA */
+
+ nand_rda_init(nand, info);
+
+ if (info->parameter_mode_select == NAND_PARAMETER_BY_NAND) {
+ switch (info->type) {
+ case NAND_TYPE_2K:
+ bootloader_end_addr = 0x200000;//2Mbytes
+ break;
+ case NAND_TYPE_4K:
+ bootloader_end_addr = 0x400000;//4Mbytes
+ break;
+ case NAND_TYPE_8K:
+ if (is_power_of_2(info->vir_erase_size))
+ bootloader_end_addr = 0x400000;//4Mbytes
+ else
+ bootloader_end_addr = 0x300000;//3Mbytes
+ break;
+ case NAND_TYPE_16K:
+ bootloader_end_addr = 0x400000;//4Mbytes
+ break;
+ case NAND_TYPE_3K:
+ bootloader_end_addr = 0x300000;//3Mbytes
+ break;
+ case NAND_TYPE_7K:
+ bootloader_end_addr = 0x700000;//7Mbytes
+ break;
+ case NAND_TYPE_14K:
+ bootloader_end_addr = 0x700000;//7Mbytes
+ break;
+ default:
+ printf("error nand type: %d \n", info->type);
+ }
+
+ bootloader_end_addr -= nand_parameter.spl_offset;
+
+ if (info->page_shift) {
+ info->boot_logic_end_pageaddr = bootloader_end_addr >> info->page_shift;
+ info->spl_logic_pageaddr = nand_parameter.spl_offset >> info->page_shift;
+ } else {
+ info->boot_logic_end_pageaddr = bootloader_end_addr / info->page_size;
+ info->spl_logic_pageaddr = nand_parameter.spl_offset / info->page_size;
+ }
+ }
+
+ if (!nand->ecc.layout && (nand->ecc.mode != NAND_ECC_SOFT_BCH)) {
+ switch (info->type) {
+ case NAND_TYPE_2K:
+ nand->ecc.layout = &rda_nand_oob_2k;
+ break;
+ case NAND_TYPE_4K:
+ nand->ecc.layout = &rda_nand_oob_4k;
+ break;
+ case NAND_TYPE_8K:
+ nand->ecc.layout = &rda_nand_oob_8k;
+ break;
+ case NAND_TYPE_16K:
+ nand->ecc.layout = &rda_nand_oob_16k;
+ break;
+ case NAND_TYPE_3K:
+ nand->ecc.layout = &rda_nand_oob_4k;
+ break;
+ case NAND_TYPE_7K:
+ nand->ecc.layout = &rda_nand_oob_8k;
+ break;
+ case NAND_TYPE_14K:
+ nand->ecc.layout = &rda_nand_oob_16k;
+ break;
+ default:
+ printf("error oob size: %d \n", info->vir_oob_size);
+ }
+ nand->ecc.layout->oobfree[0].length = info->vir_oob_size - 2;
+ for(i=1; i<MTD_MAX_OOBFREE_ENTRIES; i++)
+ nand->ecc.layout->oobfree[i].length = 0;
+ }
+
+ return 0;
+}
+
+#if 0
+/* move to rda_nand_base.c */
+int board_nand_init(struct nand_chip *chip) __attribute__ ((weak));
+
+int board_nand_init(struct nand_chip *chip)
+{
+ return rda_nand_init(chip);
+}
+#endif
+
+#ifdef TGT_AP_DO_NAND_TEST
+
+#define NAND_TEST_DATA_BASE 0x11c01080
+#define NAND_RESULT_DATA_ADDR (NAND_TEST_DATA_BASE+0x00)
+#define NAND_TYPE_DATA_ADDR (NAND_TEST_DATA_BASE+0x04)
+#define NAND_PAGE_SIZE_ADDR (NAND_TEST_DATA_BASE+0x08)
+#define NAND_VID_B1_ADDR (NAND_TEST_DATA_BASE+0x0C)
+#define NAND_VID_B2_ADDR (NAND_TEST_DATA_BASE+0x10)
+#define NAND_NAME_ADDR (NAND_TEST_DATA_BASE+0x14)
+#define NAND_NAME_SIZE 0x08
+#define NAND_BUS_WIDTH_ADDR (NAND_TEST_DATA_BASE+0x1C)
+
+#define NAND_TEST_OK_VAL 0xA55A6666
+#define NAND_TEST_ERROR_VAL 0xDEADDEAD
+
+static void print_nand_info(int dev_idx)
+{
+ nand_info_t *nand = &nand_info[dev_idx];
+ struct nand_chip *chip = nand->priv;
+ struct rda_nand_info *info = chip->priv;
+ unsigned int id[2],type_val = 0,bus_width = 8;
+ int man_id,j,k;
+ char *pname ;
+
+ id[0] = gbl_nand_test_id_val[0];
+ id[1] = gbl_nand_test_id_val[1];
+ man_id = id[0] & 0xFF;
+ pname = NULL;
+ for(j=0; nand_manuf_ids[j].id != 0x0;j++) {
+ if(nand_manuf_ids[j].id == man_id) {
+ pname = nand_manuf_ids[j].name;
+ break;
+ }
+ }
+ printf("nand device info:\n");
+ if(pname != NULL)
+ printf("Nand name: %s\n",pname);
+ switch(info->type) {
+ case NAND_TYPE_4K: printf("Nand type: 4K\n"); type_val = 4;break;
+ case NAND_TYPE_2K: printf("Nand type: 2K\n"); type_val = 2;break;
+ case NAND_TYPE_8K: printf("Nand type: 8K\n"); type_val = 8;break;
+ case NAND_TYPE_16K: printf("Nand type: 16K\n"); type_val = 16;break;
+ default: printf("Nand type error\n"); type_val = 0;break;
+ }
+ //intf("Nand type: 0x%x\n",info->type);
+ //printf("Nand_used_type: 0x%x\n",info->nand_use_type);
+ printf("Nand page size: 0x%x\n",info->page_size);
+ printf("Nand ID: %08x %08x\n", id[0], id[1]);
+ printf("Nand page total num: 0x%x\n",info->page_total_num);
+
+ switch(info->bus_width_16) {
+ case 0:printf("Nand bus width: 8 bit\n"); bus_width = 8;break;
+ case 1:printf("Nand bus width: 16 bit\n"); bus_width = 16;break;
+ default:printf("Nand bus width error\n"); bus_width = 0;break;
+ }
+ *(unsigned int *)NAND_TYPE_DATA_ADDR = type_val;
+ *(unsigned int *)NAND_PAGE_SIZE_ADDR = info->page_size;
+ *(unsigned int *)NAND_VID_B1_ADDR = id[0];
+ *(unsigned int *)NAND_VID_B2_ADDR = id[1];
+ if(pname != NULL) {
+ for(k = 0;k<8;k++) {
+ *(unsigned char *)(NAND_NAME_ADDR + k) = '\0';
+ }
+ for(k = 0;k<8;k++) {
+ *(unsigned char *)(NAND_NAME_ADDR + k) = *(pname+k);
+ }
+ }
+ *(unsigned int *)NAND_BUS_WIDTH_ADDR = bus_width;
+}
+
+void test_nand_easily(void)
+{
+ nand_info_t *nand;
+ unsigned int i = 0,j = 0;
+ unsigned long addr = 0x1000000;
+ size_t len = 0;
+ int ret = 0;
+ nand_erase_options_t opts;
+
+ j = j;
+ ret = ret;
+ nand = &nand_info[0];
+
+ /* check test result */
+ if(*(unsigned int *)NAND_RESULT_DATA_ADDR == NAND_TEST_ERROR_VAL) {
+ printf("nand error!!!\n");
+ return;
+ }
+
+ printf("\n%s: current ticks = %llu\n",__func__,get_ticks());
+ printf("-------------Begin to test internal nand flash memory.............. \n");
+ len = nand->writesize;
+ for (i = 0; i < len; i++){
+ g_nand_test_buf_write[i] = i & 0xff;
+ g_nand_test_buf_read[i] =0;
+ }
+
+ /* set nand erasing parameters */
+ memset(&opts,0,sizeof(opts));
+ opts.offset = addr;
+ opts.length = len;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+ opts.spread = 0;
+
+ /* step0: read nand flash information data */
+ print_nand_info(0);
+ /* step1: erase flash */
+ printf("erase flash memory,addr = 0x%x,len = %d\n",(int)addr,(int)len);
+ //nand_erase(nand,addr,len);
+ ret = nand_erase_opts(nand, &opts);
+ if(ret != 0) {
+ printf("erase flash error, returned value: ret = %d\n",ret);
+ goto L_ERROR_END;
+ }
+ /* step2: write test data to flash */
+ printf("write test data to flash memory, addr = 0x%x, len = %d\n",(int)addr, (int)len);
+ /*
+ nand_write_skip_bad(nand,
+ addr,
+ &len,
+ g_nand_test_buf_write,
+ 0);
+ */
+ nand_write(nand, addr, &len,g_nand_test_buf_write);
+ printf("real writing test data len = %d\n",(int)len);
+ /* step3: read test data back */
+ printf("read test data from flash memory,addr = 0x%x, len = %d\n",(int)addr,(int)len);
+ //nand_read_skip_bad(nand,addr,&len,g_nand_test_buf_read);
+ nand_read(nand, addr,&len,g_nand_test_buf_read);
+ printf("real reading test data len = %d\n",(int)len);
+ #if 0
+ printf("display rx data\n");
+ for(i = 0; i < len; i++) {
+ printf("%x\t",g_nand_test_buf_read[i]);
+ j++;
+ if(j > 15) {
+ j = 0;
+ printf("\n");
+ }
+ }
+ #endif
+
+ /* step4: check test data for testing result */
+ printf("compare data\n");
+ for (i = 0; i < len; i++) {
+ if (g_nand_test_buf_write[i] != g_nand_test_buf_read[i]){
+ printf("nand operate error!!\n");
+ *(unsigned int *)NAND_RESULT_DATA_ADDR = NAND_TEST_ERROR_VAL;
+ return;
+ }
+ }
+//L_OK_END:
+
+ *(unsigned int *)NAND_RESULT_DATA_ADDR = NAND_TEST_OK_VAL;
+ printf("Write result data: addr = 0x%x,value = 0x%x\n",(int)NAND_RESULT_DATA_ADDR, NAND_TEST_OK_VAL);
+ printf("-------------Test internal nand flash memory OK.............. \n");
+ printf("\n%s: current ticks = %llu\n",__func__,get_ticks());
+ return;
+L_ERROR_END:
+ printf("-------------Test internal nand flash memory error.............. \n");
+ printf("\n%s: current ticks = %llu\n",__func__,get_ticks());
+ return;
+}
+#endif /* TGT_AP_DO_NAND_TEST */
diff --git a/drivers/mtd/nand/rda_spi_nand.c b/drivers/mtd/nand/rda_spi_nand.c
new file mode 100644
index 0000000000..0e78ec25d0
--- /dev/null
+++ b/drivers/mtd/nand/rda_spi_nand.c
@@ -0,0 +1,1654 @@
+#include <common.h>
+#include <malloc.h>
+#include <asm/errno.h>
+#include <asm/io.h>
+#include <asm/types.h>
+#include <nand.h>
+
+#include <asm/arch/hardware.h>
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <mtd/nand/rda_nand.h>
+
+#include <rda/tgt_ap_board_config.h>
+#include <rda/tgt_ap_clock_config.h>
+
+#ifdef CONFIG_SPL_BUILD
+#undef CONFIG_NAND_RDA_DMA
+#endif
+
+#ifdef CONFIG_NAND_RDA_DMA
+#include <asm/dma-mapping.h>
+#include <asm/arch/dma.h>
+#endif
+
+#if (_TGT_NAND_TYPE_ == _SPI_NAND_USED_)
+/*******************************************************************/
+/*******************spi flash MACRO define******************************/
+#define SPI_NAND_READ_DATA_BUFFER_BASE 0xc0000000
+#define SPI_NAND_WRITE_DATA_BUFFER_BASE (RDA_SPIFLASH_BASE + 0x8)
+
+/*******************spi controller register define**************************/
+#define SPI_FLASH_REG_BASE RDA_SPIFLASH_BASE
+#define CMD_ADDR_OFFSET 0x0
+#define MODE_BLOCKSIZE_OFFSET 0x4
+#define DATA_FIFO_OFFSET 0x8
+#define STATUS_OFFSET 0xc
+#define READBACK_REG_OFFSET 0x10
+#define FLASH_CONFIG_OFFSET 0x14
+#define FIFO_CTRL_OFFSET 0x18
+#define DUAL_SPI_OFFSET 0x1c
+#define READ_CMD_OFFSET 0x20
+#define NAND_SPI_CONFIG_OFFSET 0x24
+#define NAND_SPI_CONFIG2_OFFSET 0x28
+
+#define SPI_CMD_ADDR (SPI_FLASH_REG_BASE+CMD_ADDR_OFFSET)
+#define SPI_BLOCK_SIZE (SPI_FLASH_REG_BASE+MODE_BLOCKSIZE_OFFSET)
+#define SPI_DATA_FIFO (SPI_FLASH_REG_BASE+DATA_FIFO_OFFSET)
+#define SPI_STATUS (SPI_FLASH_REG_BASE+STATUS_OFFSET)
+#define SPI_READ_BACK (SPI_FLASH_REG_BASE+READBACK_REG_OFFSET)
+#define SPI_CONFIG (SPI_FLASH_REG_BASE+FLASH_CONFIG_OFFSET)
+#define SPI_FIFO_CTRL (SPI_FLASH_REG_BASE+FIFO_CTRL_OFFSET)
+#define SPI_CS_SIZE (SPI_FLASH_REG_BASE+DUAL_SPI_OFFSET)
+#define SPI_READ_CMD (SPI_FLASH_REG_BASE+READ_CMD_OFFSET)
+#define SPI_NAND_CMD (SPI_FLASH_REG_BASE+NAND_SPI_CONFIG_OFFSET)
+#define SPI_NAND_CMD2 (SPI_FLASH_REG_BASE+NAND_SPI_CONFIG2_OFFSET)
+
+/*******************spi flash command define**************************/
+#define OPCODE_WRITE_ENABLE 0x06
+#define OPCODE_WRITE_DISABLE 0x04
+#define OPCODE_GET_FEATURE 0x0f
+#define OPCODE_SET_FEATURE 0x1f
+#define OPCODE_PAGE_READ_2_CACHE 0x13
+#define OPCODE_READ_FROM_CACHE 0x03
+#define OPCODE_READ_FROM_CACHEX4 0x6b
+#define OPCODE_READ_FROM_CACHE_QUADIO 0xeb
+#define OPCODE_READ_ID 0x9f
+#define OPCODE_PROGRAM_LOAD_RANDOM_DATA 0x84
+#define OPCODE_PROGRAM_LOAD_RANDOM_DATAX4 0xc4
+#define OPCODE_PROGRAM_LOAD_RANDOM_DATA_QUADIO 0x72
+#define OPCODE_PROGRAM_EXECUTE 0x10
+#define OPCODE_BLOCK_ERASE 0xd8
+#define OPCODE_FLASH_RESET 0Xff
+
+//spi nand state
+#define NANDFC_SPI_PROG_FAIL (1 << 3)
+#define NANDFC_SPI_ERASE_FAIL (1 << 2)
+#define NANDFC_SPI_OPERATE_ERROR (1 << 0)
+
+typedef enum {
+ SPINAND_TYPE_SPI2K = 16, // SPI, 2048+64, 2Gb
+ SPINAND_TYPE_SPI4K = 17, // SPI, 4096+128, 4Gb
+ SPINAND_TYPE_INVALID = 0xFF,
+} SPINAND_FLASH_TYPE;
+
+#define PLL_BUS_FREQ (_TGT_AP_PLL_BUS_FREQ * 1000000)
+/*******************MACRO define***********************************/
+#define REG_READ_UINT32( _reg_ ) (*(volatile unsigned long*)(_reg_))
+#define REG_WRITE_UINT32( _reg_, _val_) ((*(volatile unsigned long*)(_reg_)) = (unsigned long)(_val_))
+
+/*******************spi nand global variables define **********************/
+//static u8 g_spi_flash_read_temp_buffer[4352] __attribute__ ((__aligned__(64)));
+/*sram space is not enough, so use sdram space as middle data buffer*/
+static u8 *g_spi_flash_read_temp_buffer = (u8 *)CONFIG_SPL_NAND_MIDDLE_DATA_BUFFER;
+/*******************************************************************/
+
+//#define NAND_DEBUG
+//#define NAND_DEBUG_VERBOSE
+/*read page data with 4k middle buffer: g_spi_flash_read_temp_buffer[4352],
+ OOB always use middle buffer.*/
+//#define READ_PAGE_DATA_USE_MIDDLE_BUFFER
+#define READ_PAGE_DATA_WITH_SW_MODE
+
+#define hal_gettime get_ticks
+#define SECOND * CONFIG_SYS_HZ_CLOCK
+#define NAND_TIMEOUT ( 2 SECOND )
+
+/* clock division value map */
+const static u8 clk_div_map[] = {
+ 4*60, /* 0 */
+ 4*60, /* 1 */
+ 4*60, /* 2 */
+ 4*60, /* 3 */
+ 4*60, /* 4 */
+ 4*60, /* 5 */
+ 4*60, /* 6 */
+ 4*60, /* 7 */
+ 4*40, /* 8 */
+ 4*30, /* 9 */
+ 4*24, /* 10 */
+ 4*20, /* 11 */
+ 4*17, /* 12 */
+ 4*15, /* 13 */
+ 4*13, /* 14 */
+ 4*12, /* 15 */
+ 4*11, /* 16 */
+ 4*10, /* 17 */
+ 4*9, /* 18 */
+ 4*8, /* 19 */
+ 4*7, /* 20 */
+ 4*13/2, /* 21 */
+ 4*6, /* 22 */
+ 4*11/2, /* 23 */
+ 4*5, /* 24 */
+ 4*9/2, /* 25 */
+ 4*4, /* 26 */
+ 4*7/2, /* 27 */
+ 4*3, /* 28 */
+ 4*5/2, /* 29 */
+ 4*2, /* 30 */
+ 4*1, /* 31 */
+};
+
+static struct nand_ecclayout spi_nand_oob_64 = {
+ .eccbytes = 16,
+ .eccpos = {
+ 12, 13, 14, 15, 28, 29, 30, 31,
+ 44, 45, 46, 47, 60, 61, 62, 63},
+ .oobfree = {
+ {.offset = 2,
+ .length = 10},
+ {.offset = 16,
+ .length = 12},
+ {.offset = 32,
+ .length = 12},
+ {.offset = 48,
+ .length = 12}}
+};
+
+static struct nand_ecclayout spi_nand_oob_128 = {
+ .eccbytes = 0,
+ .eccpos = {},
+ .oobfree = {
+ {.offset = 2,
+ .length = 126}}
+};
+
+/* Generic flash bbt decriptors
+*/
+static uint8_t bbt_pattern[] = { 'B', 'b', 't', '0' };
+static uint8_t mirror_pattern[] = { '1', 't', 'b', 'B' };
+
+static struct nand_bbt_descr spi_bbt_main_descr = {
+ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
+ | NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
+ .offs = 8,
+ .len = 4,
+ .veroffs = 16,
+ .maxblocks = 4,
+ .pattern = bbt_pattern
+};
+
+static struct nand_bbt_descr spi_bbt_mirror_descr = {
+ .options = NAND_BBT_LASTBLOCK | NAND_BBT_CREATE | NAND_BBT_WRITE
+ | NAND_BBT_2BIT | NAND_BBT_VERSION | NAND_BBT_PERCHIP,
+ .offs = 8,
+ .len = 4,
+ .veroffs = 16,
+ .maxblocks = 4,
+ .pattern = mirror_pattern
+};
+
+void wait_spi_busy(void)
+{ /*spi is busy,wait until idle */
+ u32 data_tmp_32;
+
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x1) {
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ }
+}
+
+void wait_spi_tx_fifo_empty(void)
+{ /*spi tx fifo not empty, wait until empty */
+ u32 data_tmp_32;
+
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (!(data_tmp_32 & 0x2)) {
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ }
+}
+
+void wait_spi_rx_fifo_empty(void)
+{ /*spi rx fifo not empty, wait until empty */
+ u32 data_tmp_32;
+
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (!(data_tmp_32 & 0x8)) {
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ }
+}
+
+void spi_tx_fifo_clear(void)
+{ /*clear spi tx fifo */
+ REG_WRITE_UINT32(SPI_FIFO_CTRL, 0x2);
+ wait_spi_tx_fifo_empty();
+}
+
+void spi_rx_fifo_clear(void)
+{ /*clear spi rx fifo */
+ REG_WRITE_UINT32(SPI_FIFO_CTRL, 0x1);
+ wait_spi_rx_fifo_empty();
+}
+
+static void push_fifo_data(u8 data_array[], u32 data_cnt, BOOL quard_flag,
+ BOOL clr_flag)
+{
+ u32 data_tmp_32;
+ u16 i = 0;
+
+ if (clr_flag)
+ spi_tx_fifo_clear();
+
+ /*if tx fifo full, wait */
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x4)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ /*put data into fifo */
+ for (i = 0; i < data_cnt; i++) {
+ data_tmp_32 = (u32) data_array[i];
+ if (quard_flag)
+ data_tmp_32 = data_tmp_32 | 0x100;
+ REG_WRITE_UINT32(SPI_DATA_FIFO, data_tmp_32);
+ }
+}
+
+/********************************************************************/
+/* opmode = 0: normal operation */
+/* opmode = 1: extended serial read */
+/* opmode = 2: extended quard read */
+/* opmode = 3: extended write (OPCODE_WRITE_ENABLE, flash_addr, opmode, 0); */
+/********************************************************************/
+static void start_flash_operation(u8 cmd, u32 addr, u8 opmode, u16 blocksize)
+{
+ u32 data_tmp_32;
+
+ wait_spi_busy();
+
+ if (blocksize != 0) {
+ data_tmp_32 = REG_READ_UINT32(SPI_BLOCK_SIZE);
+ data_tmp_32 = (data_tmp_32 & (~0x1ff00)) | (blocksize << 8);
+ REG_WRITE_UINT32(SPI_BLOCK_SIZE, data_tmp_32);
+ wait_spi_busy();
+ }
+
+ if (opmode == 0) {
+ data_tmp_32 = ((addr << 8) & 0xffffff00) | cmd;
+ REG_WRITE_UINT32(SPI_CMD_ADDR, data_tmp_32);
+ } else if (opmode == 1) {
+ data_tmp_32 = (((cmd << 8) | 0x10000) & 0x000fff00);
+ REG_WRITE_UINT32(SPI_CMD_ADDR, data_tmp_32);
+ } else if (opmode == 2) {
+ data_tmp_32 = (((cmd << 8) | 0x30000) & 0x000fff00);
+ REG_WRITE_UINT32(SPI_CMD_ADDR, data_tmp_32);
+ } else if (opmode == 3) {
+ data_tmp_32 = ((cmd << 8) & 0x000fff00);
+ REG_WRITE_UINT32(SPI_CMD_ADDR, data_tmp_32);
+ } else {
+ data_tmp_32 = ((cmd << 8) & 0x000fff00);
+ REG_WRITE_UINT32(SPI_CMD_ADDR, data_tmp_32);
+ }
+}
+
+u8 get_flash_feature(u32 flash_addr)
+{
+ u32 data_tmp_32;
+ u8 opmode;
+ u8 data_array[2];
+ u8 data_size;
+ u8 quard_flag;
+
+ quard_flag = FALSE;
+ opmode = 1;
+ data_array[0] = 0xb0;
+ data_size = 1;
+
+ wait_spi_busy();
+ /*clear spi rx fifo */
+ spi_rx_fifo_clear();
+
+ /*put addr into spi tx fifo */
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ /*send command */
+ start_flash_operation(OPCODE_GET_FEATURE, flash_addr, opmode, 1);
+ wait_spi_busy();
+
+ /*wait until rx fifo not empty */
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x8)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ return (REG_READ_UINT32(SPI_READ_BACK) & 0xff);
+}
+
+void set_flash_feature(u8 data)
+{
+ u8 opmode;
+ u8 data_array[2];
+ u8 data_size;
+ BOOL quard_flag;
+
+ quard_flag = FALSE;
+ opmode = 3;
+ data_array[1] = data;
+ data_array[0] = 0xb0;
+ data_size = 2;
+
+ wait_spi_busy();
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ start_flash_operation(OPCODE_SET_FEATURE, 0, opmode, 0);
+ wait_spi_busy();
+ wait_spi_tx_fifo_empty();
+}
+
+static BOOL spi_nand_flash_quad_enable = FALSE;
+void enable_spi_nand_flash_quad_mode(void)
+{
+ u8 data;
+
+ data = get_flash_feature(0);
+ data = data | 0x1;
+ set_flash_feature(data);
+ spi_nand_flash_quad_enable = TRUE;
+}
+
+void disable_spi_nand_flash_quad_mode(void)
+{
+ u8 data;
+
+ data = get_flash_feature(0);
+ data = data & 0xfe;
+ set_flash_feature(data);
+ spi_nand_flash_quad_enable = FALSE;
+}
+
+void enable_spi_nand_flash_ecc_mode(void)
+{
+ u8 data;
+
+ data = get_flash_feature(0);
+ data = data | 0x10;
+ set_flash_feature(data);
+}
+
+void disable_spi_nand_flash_ecc_mode(void)
+{
+ u8 data;
+
+ data = get_flash_feature(0);
+ data = data & 0xef;
+ set_flash_feature(data);
+}
+
+u8 get_flash_status(u32 flash_addr)
+{
+ u32 data_tmp_32;
+ u8 opmode;
+ u8 data_array[2];
+ u8 data_size;
+ BOOL quard_flag;
+
+ quard_flag = FALSE;
+ opmode = 1;
+ data_array[0] = 0xc0;
+ data_size = 1;
+
+ wait_spi_busy();
+ spi_rx_fifo_clear();
+
+ wait_spi_busy();
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ start_flash_operation(OPCODE_GET_FEATURE, flash_addr, opmode, 1);
+ wait_spi_busy();
+
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x8)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ return (REG_READ_UINT32(SPI_READ_BACK) & 0xff);
+}
+
+void disable_flash_protection(u32 flash_addr)
+{
+ u8 opmode;
+ u8 data_array[2];
+ u8 data_size;
+
+ opmode = 3;
+ data_array[1] = 0;
+ data_array[0] = 0xa0;
+ data_size = 2;
+
+ wait_spi_busy();
+ push_fifo_data(data_array, data_size, FALSE, TRUE);
+ start_flash_operation(OPCODE_SET_FEATURE, flash_addr, opmode, 0);
+ wait_spi_busy();
+ wait_spi_tx_fifo_empty();
+}
+
+void spi_nand_flash_operate_mode_setting(u8 mode)
+{
+ u32 data_tmp_32;
+
+ data_tmp_32 = REG_READ_UINT32(SPI_NAND_CMD);
+ if (mode == 1) // 1 command-1 addr- 1 data
+ {
+ data_tmp_32 |= OPCODE_READ_FROM_CACHE << 24;
+ } else if (mode == 2) // 1 command- 1 addr- 4 data
+ {
+ data_tmp_32 |= OPCODE_READ_FROM_CACHEX4 << 24;
+ } else if (mode == 4) // 1 command- 4 addr- 4 data
+ {
+ data_tmp_32 |= OPCODE_READ_FROM_CACHE_QUADIO << 24;
+ } else // default:1 command-1 addr- 1 data
+ {
+ data_tmp_32 |= OPCODE_READ_FROM_CACHE << 24;
+ }
+
+ REG_WRITE_UINT32(SPI_NAND_CMD, data_tmp_32);
+}
+
+u16 get_flash_ID(u32 flash_addr)
+{
+ u32 data_tmp_32;
+ u8 opmode;
+ BOOL quard_flag;
+ u8 data_array[2];
+ u8 data_size;
+ u8 manufacturerID, device_memory_type_ID;
+
+ opmode = 1;
+ data_array[0] = 0x00;
+ data_size = 1;
+ quard_flag = FALSE;
+
+ wait_spi_busy();
+ spi_rx_fifo_clear();
+
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ start_flash_operation(OPCODE_READ_ID, flash_addr, opmode, 2);
+ wait_spi_busy();
+
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x8)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ manufacturerID = (u8) (REG_READ_UINT32(SPI_READ_BACK) & 0xff);
+ device_memory_type_ID = (u8) (REG_READ_UINT32(SPI_READ_BACK) & 0xff);
+
+ return (manufacturerID | (device_memory_type_ID << 8));
+}
+
+void nand_spi_init(BOOL quard_flag, u8 clk_offset_val, u8 clkdiv_val)
+{
+ u32 data_tmp_32;
+
+ wait_spi_busy();
+ data_tmp_32 = ((clk_offset_val << 4) | (clkdiv_val << 8)) & 0xff70;
+ REG_WRITE_UINT32(SPI_CONFIG, data_tmp_32);
+ wait_spi_busy();
+
+ if (quard_flag) {
+ enable_spi_nand_flash_quad_mode();
+ spi_nand_flash_operate_mode_setting(4);
+ }else{
+ disable_spi_nand_flash_quad_mode();
+ spi_nand_flash_operate_mode_setting(1);
+ }
+
+ enable_spi_nand_flash_ecc_mode();
+}
+
+static void nand_spi_fifo_word_read_set(BOOL enable)
+{
+ u32 data_tmp_32;
+
+ wait_spi_busy();
+ data_tmp_32 = REG_READ_UINT32(SPI_CONFIG);
+ if(enable)
+ data_tmp_32 = (data_tmp_32 & (~(3 << 17))) |(2 << 17);
+ else
+ data_tmp_32 = data_tmp_32 & (~(3 << 17));
+ REG_WRITE_UINT32(SPI_CONFIG, data_tmp_32);
+ wait_spi_busy();
+}
+
+static int init_spi_nand_info(struct rda_nand_info *info,
+ int nand_type, int bus_width_16)
+{
+ info->type = nand_type;
+ switch (nand_type) {
+ case SPINAND_TYPE_SPI2K:
+ info->hard_ecc_hec = 0;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 11;
+ info->oob_size = 64;
+ info->page_num_per_block = 64;
+ info->vir_page_size = 2048;
+ info->vir_page_shift = 11;
+ info->vir_oob_size = 64;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ break;
+ case SPINAND_TYPE_SPI4K:
+ info->hard_ecc_hec = 0;
+ info->bus_width_16 = bus_width_16;
+ info->page_shift = 12;
+ info->oob_size = 128;
+ info->page_num_per_block = 64;
+ info->vir_page_size = 4096;
+ info->vir_page_shift = 12;
+ info->vir_oob_size = 128;
+ info->vir_erase_size =
+ info->vir_page_size * info->page_num_per_block;
+ break;
+ default:
+ printf("invalid nand type\n");
+ return -EINVAL;
+ }
+ return 0;
+}
+
+static u8 spi_nand_rda_read_byte(struct mtd_info *mtd)
+{
+ u8 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *((u8 *) info->byte_buf + info->index);
+ info->index++;
+#ifdef NAND_DEBUG
+ printf("spi_nand_read_byte, ret = %02x\n", ret);
+#endif
+ return ret;
+}
+
+static u16 spi_nand_rda_read_word(struct mtd_info *mtd)
+{
+ u16 ret;
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ ret = *(u16 *) ((uint8_t *) info->byte_buf + info->index);
+ info->index += 2;
+#ifdef NAND_DEBUG
+ printf("spi_nand_read_word, ret = %04x\n", ret);
+#endif
+ return ret;
+}
+
+#ifdef READ_PAGE_DATA_WITH_SW_MODE
+static void spi_nand_flash_page_read2cache(u32 page_addr)
+{
+ u32 data_tmp_32;
+ u8 opmode;
+ u8 data_array[3];
+ u8 data_size;
+
+#ifdef NAND_DEBUG
+ printf("spi nand: OOB read to cache!page addr = %x\n", page_addr);
+#endif
+ opmode = 3;
+ data_array[2] = (u8)(page_addr & 0xff);
+ data_array[1] = (u8)((page_addr >> 8) & 0xff);
+ data_array[0] = (u8)((page_addr >> 16) & 0xff);
+ data_size = 3;
+
+ wait_spi_busy();
+ push_fifo_data(data_array, data_size, FALSE, TRUE);
+ start_flash_operation(OPCODE_PAGE_READ_2_CACHE, 0, opmode, 0);
+ wait_spi_busy();
+
+ data_tmp_32 = get_flash_status(0);
+ while (1)
+ {
+ if ((data_tmp_32 & 0x1) == 0)
+ {
+ break;
+ }
+ else
+ {
+ data_tmp_32 = get_flash_status(0);
+ }
+ }
+}
+#endif
+
+#define __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__ 64 //bytes, 16 words
+static void spi_nand_flash_read_from_cache(u8 * buffer, u32 page_column_addr,
+ u16 length)
+{
+ u32 data_tmp_32;
+ u8 opmode, i;
+ u8 data_array[3];
+ u8 data_size;
+ u32 data_count, data_value;
+ u32 loop_div_count, loop_mod_count;
+ BOOL quard_flag = FALSE;
+ u8 command = OPCODE_READ_FROM_CACHE;
+ u32 temp_column_addr;
+
+#ifdef NAND_DEBUG
+ printf
+ ("spi nand: OOB read from cache to buffer!buffer_addr = %x, column = %x, length = %d\n",
+ (u32) buffer, page_column_addr, length);
+#endif
+ opmode = 1;
+ data_array[2] = 0;
+ data_size = 3;
+
+ if (spi_nand_flash_quad_enable) {
+ command = OPCODE_READ_FROM_CACHE_QUADIO;
+ quard_flag = TRUE;
+ opmode = 0;
+ }
+#if 0
+ for (data_count = 0; data_count < length / 16; data_count++) {
+ temp_column_addr = page_column_addr + 16 * data_count;
+ data_array[1] = (u8) (temp_column_addr & 0xff);
+ data_array[0] = ((temp_column_addr >> 8) & 0x0f);
+
+ wait_spi_busy();
+ spi_rx_fifo_clear();
+
+ wait_spi_busy();
+ if (spi_nand_flash_quad_enable) {
+ start_flash_operation(command, temp_column_addr, opmode,
+ 16);
+ } else {
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ start_flash_operation(command, 0, opmode, 16);
+ }
+ wait_spi_busy();
+#ifdef NAND_DEBUG
+ printf
+ ("read OOB: data [0] = %x, data{1] = %x, data[2] = %x, quard_flag = %d, opmode = %d\n",
+ data_array[0], data_array[1], data_array[2], quard_flag,
+ opmode);
+#endif
+ for (i = 0; i < 16; i++) {
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x8)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ buffer[data_count * 16 + i] =
+ (u8) (REG_READ_UINT32(SPI_READ_BACK) & 0xff);
+#ifdef NAND_DEBUG
+ printf("buffer[%d] = %x \n", data_count * 16 + i,
+ buffer[data_count * 16 + i]);
+#endif
+ }
+ }
+
+ if ((length % 16) > 0) {
+ temp_column_addr = page_column_addr + 16 * data_count;
+ data_array[1] = (u8) (temp_column_addr & 0xff);
+ data_array[0] = ((temp_column_addr >> 8) & 0x0f);
+
+ wait_spi_busy();
+ spi_rx_fifo_clear();
+
+ wait_spi_busy();
+ if (spi_nand_flash_quad_enable) {
+ start_flash_operation(command, temp_column_addr, opmode,
+ length % 16);
+ } else {
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ start_flash_operation(command, 0, opmode, length % 16);
+ }
+ wait_spi_busy();
+
+ for (i = 0; i < (length % 16); i++) {
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x8)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ buffer[data_count * 16 + i] =
+ (u8) (REG_READ_UINT32(SPI_READ_BACK) & 0xff);
+#ifdef NAND_DEBUG
+ printf("buffer[%d] = %x \n", data_count * 16 + i,
+ buffer[data_count * 16 + i]);
+#endif
+ }
+ }
+#else
+ nand_spi_fifo_word_read_set(TRUE);
+ if (length > 0) {
+ loop_div_count = length / __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__;
+ loop_mod_count = length % __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__;
+ for (data_count = 0; data_count < loop_div_count; data_count++) {
+ temp_column_addr = page_column_addr + __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__ * data_count;
+ data_array[1] = (u8) (temp_column_addr & 0xff);
+ data_array[0] = ((temp_column_addr >> 8) & 0x0f);
+
+ wait_spi_busy();
+ spi_rx_fifo_clear();
+
+ wait_spi_busy();
+ if (spi_nand_flash_quad_enable) {
+ start_flash_operation(command, temp_column_addr, opmode,
+ __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__);
+ } else {
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ start_flash_operation(command, 0, opmode, __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__);
+ }
+ wait_spi_busy();
+
+ for (i = 0; i < __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__; i += 4) {
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x8)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ data_value = REG_READ_UINT32(SPI_READ_BACK);
+
+ buffer[i + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) (data_value & 0xff);
+ buffer[i + 1 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) ((data_value >> 8) & 0xff);
+ buffer[i + 2 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) ((data_value >> 16) & 0xff);
+ buffer[i + 3 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) ((data_value >> 24) & 0xff);
+#ifdef NAND_DEBUG
+ printf("buffer[%d] = %x \n", i + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+ printf("buffer[%d] = %x \n", i + 1 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + 1 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+ printf("buffer[%d] = %x \n", i + 2 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + 2 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+ printf("buffer[%d] = %x \n", i + 3 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + 3 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+#endif
+ }
+ }
+
+ if(loop_mod_count){
+ temp_column_addr = page_column_addr + __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__ * data_count;
+ data_array[1] = (u8) (temp_column_addr & 0xff);
+ data_array[0] = ((temp_column_addr >> 8) & 0x0f);
+ wait_spi_busy();
+ spi_rx_fifo_clear();
+ wait_spi_busy();
+ if (spi_nand_flash_quad_enable) {
+ start_flash_operation(command, temp_column_addr, opmode, loop_mod_count);
+ } else {
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ start_flash_operation(command, 0, opmode, loop_mod_count);
+ }
+ wait_spi_busy();
+
+ for (i = 0; i < loop_mod_count; i += 4) {
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+ while (data_tmp_32 & 0x8)
+ data_tmp_32 = REG_READ_UINT32(SPI_STATUS);
+
+ data_value = REG_READ_UINT32(SPI_READ_BACK);
+
+ buffer[i + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) (data_value & 0xff);
+ buffer[i + 1 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) ((data_value >> 8) & 0xff);
+ buffer[i + 2 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) ((data_value >> 16) & 0xff);
+ buffer[i + 3 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__] = (u8) ((data_value >> 24) & 0xff);
+#ifdef NAND_DEBUG
+ printf("buffer[%d] = %x \n", i + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+ printf("buffer[%d] = %x \n", i + 1 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + 1 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+ printf("buffer[%d] = %x \n", i + 2 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + 2 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+ printf("buffer[%d] = %x \n", i + 3 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__,
+ buffer[i + 3 + data_count * __SPI_NAND_CONTROLLER_RCV_FIFO_LEVEL__]);
+#endif
+ }
+ }
+ }
+ nand_spi_fifo_word_read_set(FALSE);
+#endif
+}
+
+static void spi_nand_read_flash_data2buffer(struct mtd_info *mtd, u32 page_addr)
+{
+#ifndef READ_PAGE_DATA_WITH_SW_MODE
+ u32 flash_addr =
+ SPI_NAND_READ_DATA_BUFFER_BASE + page_addr * mtd->writesize;
+#endif
+
+#ifdef NAND_DEBUG
+ printf("read flash : page addr = %x, flash_addr = %x\n", page_addr,
+ flash_addr);
+#endif /* NAND_DEBUG */
+
+#if 1// ndef CONFIG_NAND_RDA_DMA
+#ifdef READ_PAGE_DATA_WITH_SW_MODE
+ spi_nand_flash_page_read2cache(page_addr);
+ spi_nand_flash_read_from_cache(&g_spi_flash_read_temp_buffer[0],
+ 0, mtd->writesize);
+#else
+ memcpy((void *)(&g_spi_flash_read_temp_buffer[0]), (void *)flash_addr,
+ mtd->writesize);
+#endif
+#ifdef NAND_DEBUG
+ printf("read flash: dst_addr = %x, src_addr = %x, length = %x\n",
+ (u32) (&g_spi_flash_read_temp_buffer[0]), flash_addr,
+ mtd->writesize);
+#endif /* NAND_DEBUG */
+#else
+ struct nand_chip *chip = mtd->priv;
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)(&g_spi_flash_read_temp_buffer[0]);
+ int ret = 0;
+ struct rda_nand_info *info = chip->priv;
+
+ phys_addr = dma_map_single(addr, mtd->writesize, DMA_FROM_DEVICE);
+
+ dma_param.src_addr = flash_addr;
+ dma_param.dst_addr = phys_addr;
+ dma_param.xfer_size = mtd->writesize;
+ //dma_param.dma_mode = RDA_DMA_FR_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda spi nand : Failed to set parameter\n");
+ dma_unmap_single(addr, mtd->writesize, DMA_FROM_DEVICE);
+ return;
+ }
+
+ /* use flush to avoid annoying unaligned warning */
+ /* however, invalidate after the dma it the right thing to do */
+ flush_dcache_range((u32) addr, (u32) (addr + mtd->writesize));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* use flush to avoid annoying unaligned warning */
+ //invalidate_dcache_range((u32)addr, (u32)(addr + len));
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, mtd->writesize, DMA_FROM_DEVICE);
+#ifdef NAND_DEBUG
+ printf("read flash, middle buf-data:\n");
+ rda_dump_buf((char *)addr, mtd->writesize);
+#endif
+#endif
+}
+
+static void spi_nand_rda_read_buf(struct mtd_info *mtd, uint8_t * buf, int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *nand_ptr = (u8 *) (g_spi_flash_read_temp_buffer + info->read_ptr);
+#ifndef READ_PAGE_DATA_USE_MIDDLE_BUFFER
+#ifndef READ_PAGE_DATA_WITH_SW_MODE
+ u32 flash_addr =
+ SPI_NAND_READ_DATA_BUFFER_BASE + info->page_addr * mtd->writesize;
+#endif/*READ_PAGE_DATA_WITH_SW_MODE*/
+#endif/*READ_PAGE_DATA_USE_MIDDLE_BUFFER*/
+
+#ifdef NAND_DEBUG
+ printf
+ ("read buf: buf addr = %x, len = %d, nand_ptr = %x, read_ptr = %d\n",
+ (u32) buf, len, (u32) nand_ptr, info->read_ptr);
+#endif /* NAND_DEBUG */
+
+#if 1//ndef CONFIG_NAND_RDA_DMA
+#ifdef READ_PAGE_DATA_USE_MIDDLE_BUFFER
+ memcpy((void *)buf, (void *)nand_ptr, len);
+#else
+ if(info->read_ptr == 0){
+#ifndef READ_PAGE_DATA_WITH_SW_MODE
+ memcpy((void *)buf, (void *)flash_addr, mtd->writesize);
+#else
+ spi_nand_flash_page_read2cache(info->page_addr);
+ spi_nand_flash_read_from_cache(buf, 0, mtd->writesize);
+#endif
+ spi_nand_flash_read_from_cache(&g_spi_flash_read_temp_buffer[mtd->writesize],
+ mtd->writesize, mtd->oobsize);
+ /*gigadevice flash hardware reserved block, add to BBT, 0xffe0000, 0x1ffc0000 */
+ if ((0xffe0000 == info->page_addr * mtd->writesize && info->type == SPINAND_TYPE_SPI2K)
+ || (0x1ffc0000 == info->page_addr * mtd->writesize && info->type == SPINAND_TYPE_SPI4K)){
+ memset((void *)buf, 0, len);
+ memset(&g_spi_flash_read_temp_buffer[0], 0,
+ mtd->writesize + mtd->oobsize);
+ }
+ }else{
+ memcpy((void *)buf, (void *)nand_ptr, len);
+ }
+#endif/*READ_PAGE_DATA_USE_MIDDLE_BUFFER*/
+
+ info->read_ptr += len;
+
+#ifdef NAND_DEBUG
+ printf("read buf, dst buf:\n");
+ rda_dump_buf((char *)buf, len);
+#endif
+
+#else
+ struct rda_dma_chan_params dma_param;
+ dma_addr_t phys_addr;
+ void *addr = (void *)buf;
+ int ret = 0;
+
+ /*
+ * If size is less than the size of oob,
+ * we copy directly them to mapping buffer.
+ */
+ if (len <= mtd->oobsize) {
+ memcpy(buf, (void *)nand_ptr, len);
+ info->read_ptr = 0;
+#ifdef NAND_DEBUG
+ printf("read buf, dst buf-oob:\n");
+ rda_dump_buf((char *)buf, len);
+#endif
+ return;
+ }
+
+ phys_addr = dma_map_single(addr, len, DMA_BIDIRECTIONAL);
+
+ dma_param.src_addr = (u32) nand_ptr;
+ dma_param.dst_addr = phys_addr;
+ dma_param.xfer_size = len;
+ //dma_param.dma_mode = RDA_DMA_FR_MODE;
+ dma_param.dma_mode = RDA_DMA_NOR_MODE;
+
+ ret = rda_set_dma_params(info->dma_ch, &dma_param);
+ if (ret < 0) {
+ printf("rda spi nand : Failed to set parameter\n");
+ dma_unmap_single(addr, len, DMA_BIDIRECTIONAL);
+ return;
+ }
+
+ /* use flush to avoid annoying unaligned warning */
+ /* however, invalidate after the dma it the right thing to do */
+ flush_dcache_range((u32) addr, (u32) (addr + len));
+
+ rda_start_dma(info->dma_ch);
+ rda_poll_dma(info->dma_ch);
+ rda_stop_dma(info->dma_ch);
+
+ /* use flush to avoid annoying unaligned warning */
+ //invalidate_dcache_range((u32)addr, (u32)(addr + len));
+
+ /* Free the specified physical address */
+ dma_unmap_single(addr, len, DMA_BIDIRECTIONAL);
+ info->read_ptr += len;
+
+#ifdef NAND_DEBUG
+ printf("read buf, dst buf-data:\n");
+ rda_dump_buf((char *)addr, len);
+#endif
+
+ return;
+#endif /* CONFIG_NAND_RDA_DMA */
+}
+
+static void spi_nand_flash_write_data2cache_random(u8 * buffer,
+ u32 page_column_addr,
+ u32 length,
+ BOOL bug_mode)
+{
+ u8 opmode;
+ u8 data_array[3];
+ u8 data_size;
+ BOOL quard_flag;
+ u8 opcommand;
+
+ if(bug_mode == FALSE){
+ if (spi_nand_flash_quad_enable) {
+ quard_flag = TRUE;
+ opcommand = OPCODE_PROGRAM_LOAD_RANDOM_DATA_QUADIO;
+ } else {
+ quard_flag = FALSE;
+ opcommand = OPCODE_PROGRAM_LOAD_RANDOM_DATA;
+ }
+
+ opmode = 3;
+ data_array[1] = (u8) (page_column_addr & 0xff);
+ data_array[0] = ((page_column_addr >> 8) & 0x0f);
+ data_size = 2;
+
+ wait_spi_busy();
+ push_fifo_data(data_array, data_size, quard_flag, TRUE);
+ push_fifo_data(buffer, length, quard_flag, FALSE);
+ start_flash_operation(opcommand, 0, opmode, 0);
+ }
+ else{/*0x84 standard mode for spi controller bug*/
+ wait_spi_busy();
+ push_fifo_data(buffer, length, FALSE, TRUE);
+ start_flash_operation(OPCODE_PROGRAM_LOAD_RANDOM_DATA, page_column_addr,
+ 0, 0);
+ }
+
+ wait_spi_busy();
+ wait_spi_tx_fifo_empty();
+ wait_spi_busy();
+}
+
+void spi_nand_flash_write_one_page_cache_random(u8 * buffer, u32 length,
+ u32 write_pos)
+{
+ u32 i = 0, m, n;
+ u8 *w_buffer = buffer;
+
+#define SPI_NAND_OPERATE_LENGTH_ONCE 200
+
+// if (write_pos == 0) {
+ m = length / SPI_NAND_OPERATE_LENGTH_ONCE;
+ n = length % SPI_NAND_OPERATE_LENGTH_ONCE;
+
+ if(n == 0){
+ m = m - 1;
+ n = SPI_NAND_OPERATE_LENGTH_ONCE;
+ }
+
+ if (m > 0) {
+ for (i = 0; i < m; i++) {
+ spi_nand_flash_write_data2cache_random(w_buffer
+ +
+ SPI_NAND_OPERATE_LENGTH_ONCE * i,
+ SPI_NAND_OPERATE_LENGTH_ONCE * i + write_pos,
+ SPI_NAND_OPERATE_LENGTH_ONCE,
+ FALSE);
+ }
+ }
+
+ if (n > 0)
+ spi_nand_flash_write_data2cache_random(w_buffer +
+ SPI_NAND_OPERATE_LENGTH_ONCE * i,
+ SPI_NAND_OPERATE_LENGTH_ONCE * i + write_pos,
+ n,
+ TRUE);
+// } else {
+// spi_nand_flash_write_data2cache_random(w_buffer, write_pos,
+// length, TRUE);
+// }
+}
+
+static int spi_nand_flash_program_execute(u32 block_page_addr)
+{
+ u32 data_tmp_32;
+ u8 opmode;
+ u8 data_array[5];
+ u8 data_size;
+
+ start_flash_operation(OPCODE_WRITE_ENABLE, 0, 0, 0);
+ wait_spi_busy();
+
+ opmode = 3;
+ data_array[2] = (u8) (block_page_addr & 0xff);
+ data_array[1] = (u8) ((block_page_addr >> 8) & 0xff);
+ data_array[0] = (u8) ((block_page_addr >> 16) & 0xff);
+ data_size = 3;
+
+ push_fifo_data(data_array, data_size, FALSE, TRUE);
+ start_flash_operation(OPCODE_PROGRAM_EXECUTE, 0, opmode, 0);
+ wait_spi_busy();
+
+ data_tmp_32 = get_flash_status(0);
+ while (1) {
+ if ((data_tmp_32 & 0x1) == 0) {
+ if ((data_tmp_32 & 0x8) == 0x8) {
+ printf("!!program failed page addr = %x\n ",
+ block_page_addr);
+ return NANDFC_SPI_PROG_FAIL;
+ }
+ break;
+ } else {
+ data_tmp_32 = get_flash_status(0);
+ }
+ }
+
+ return 0;
+}
+
+static void spi_nand_rda_write_buf(struct mtd_info *mtd, const uint8_t * buf,
+ int len)
+{
+ struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+ u8 *pbuf = (u8 *) buf;
+
+#ifdef NAND_DEBUG
+ printf("spi_nand_rda_write_buf : buf addr = %x, len = %d, write_pos = %d\n", (u32) pbuf,
+ len, info->write_ptr);
+#endif /* NAND_DEBUG */
+
+#ifdef NAND_DEBUG
+ rda_dump_buf((char *)pbuf, len);
+#endif
+
+ if (len > mtd->writesize) {
+ printf("error: write size is out of page size!\n");
+ }
+
+ spi_nand_flash_write_one_page_cache_random(pbuf, len, info->write_ptr);
+ info->write_ptr += len;
+}
+
+u32 spi_nand_flash_block_erase(u32 block_page_addr)
+{
+ u32 data_tmp_32;
+ u8 opmode;
+ u8 data_array[3];
+ u8 data_size;
+
+ start_flash_operation(OPCODE_WRITE_ENABLE, 0, 0, 0);
+
+ opmode = 3;
+ data_array[2] = (u8) (block_page_addr & 0xff);
+ data_array[1] = ((block_page_addr >> 8) & 0xff);
+ data_array[0] = ((block_page_addr >> 16) & 0x0f);
+ data_size = 3;
+
+ wait_spi_busy();
+ push_fifo_data(data_array, data_size, 0, TRUE);
+ start_flash_operation(OPCODE_BLOCK_ERASE, 0, opmode, 0);
+ wait_spi_busy();
+
+ data_tmp_32 = get_flash_status(0);
+ while (1) {
+ if ((data_tmp_32 & 0x1) == 0) {
+ if ((data_tmp_32 & 0x4) == 0x4) {
+ printf("!!earse failed page addr = %x \n",
+ block_page_addr);
+ return NANDFC_SPI_ERASE_FAIL;
+ }
+ break;
+ } else {
+ data_tmp_32 = get_flash_status(0);
+ }
+ }
+ return 0;
+}
+
+static void nand_rda_do_cmd_post(struct mtd_info *mtd)
+{
+ struct nand_chip *this = mtd->priv;
+ struct rda_nand_info *info = this->priv;
+ u8 temp;
+
+ switch (info->cmd) {
+ case NAND_CMD_READID:
+ info->index = 0;
+ break;
+ case NAND_CMD_STATUS:
+ temp = get_flash_status(0);
+#ifdef NAND_DEBUG
+ printf("nand_rda_do_cmd_post: flash status = %x\n ", temp);
+#endif
+ if ((temp & NANDFC_SPI_ERASE_FAIL)
+ && (info->cmd_flag == NAND_CMD_ERASE2))
+ info->byte_buf[0] = 0xE0 | NAND_STATUS_FAIL;
+ else if ((temp & NANDFC_SPI_PROG_FAIL)
+ && (info->cmd_flag == NAND_CMD_PAGEPROG))
+ info->byte_buf[0] = 0xE0 | NAND_STATUS_FAIL;
+ else if (temp & NANDFC_SPI_OPERATE_ERROR)
+ info->byte_buf[0] = 0xE0 | NAND_STATUS_FAIL;
+ else
+ info->byte_buf[0] = 0xE0;
+
+ info->index = 0;
+ info->cmd_flag = 0;
+ break;
+ default:
+ break;
+ }
+}
+
+static void spi_nand_rda_hwcontrol(struct mtd_info *mtd, int cmd,
+ unsigned int ctrl)
+{
+
+}
+
+static int spi_nand_reset_flash(void)
+{
+ u32 data_tmp_32;
+
+ start_flash_operation(OPCODE_FLASH_RESET, 0, 0, 0);
+ /*delay 10us for reset process */
+ udelay(10);
+
+ data_tmp_32 = get_flash_status(0);
+ while (1) {
+ if ((data_tmp_32 & 0x1) == 0) {
+ break;
+ } else {
+ data_tmp_32 = get_flash_status(0);
+ }
+ }
+ return 0;
+}
+
+static void spi_nand_rda_cmdfunc(struct mtd_info *mtd, unsigned int command,
+ int column, int page_addr)
+{
+ register struct nand_chip *chip = mtd->priv;
+ struct rda_nand_info *info = chip->priv;
+
+#ifdef NAND_DEBUG
+ printf("nand_rda_cmdfunc, cmd = %x, page_addr = %x, col_addr = %x\n",
+ command, page_addr, column);
+#endif
+
+ /* remap command */
+ switch (command) {
+ case NAND_CMD_RESET:
+ spi_nand_reset_flash();
+ return;
+
+ case NAND_CMD_READID:
+ info->byte_buf[0] = get_flash_ID(0);
+ info->byte_buf[1] = get_flash_ID(1);
+ info->index = 0;
+#ifdef NAND_DEBUG
+ printf("READID: id = %x \n", info->byte_buf[0]);
+#endif
+ break;
+
+ case NAND_CMD_SEQIN: /* 0x80 do nothing, just only transfer write addr */
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = NAND_CMD_NONE;
+ info->write_ptr = column;
+ break;
+ case NAND_CMD_READSTART: /* hw auto gen 0x30 for read */
+ break;
+
+ case NAND_CMD_ERASE1:
+ disable_flash_protection(0);
+ if (NANDFC_SPI_ERASE_FAIL ==
+ spi_nand_flash_block_erase(page_addr))
+ printf("spi nand: erase failed!page addr = %x\n",
+ page_addr);
+ break;
+
+ case NAND_CMD_ERASE2:
+#ifdef NAND_DEBUG
+ printf("erase block complete!\n");
+#endif
+ info->cmd_flag = NAND_CMD_ERASE2;
+ info->cmd = NAND_CMD_NONE;
+ break;
+
+ case NAND_CMD_PAGEPROG: /* 0x10 do the real program */
+ disable_flash_protection(0);
+ if (NANDFC_SPI_PROG_FAIL ==
+ spi_nand_flash_program_execute(info->page_addr))
+ printf("spi nand: program failed!page addr = %x\n",
+ page_addr);
+ info->cmd_flag = NAND_CMD_PAGEPROG;
+ info->cmd = NAND_CMD_NONE;
+ info->col_addr = 0;
+ info->write_ptr = 0;
+
+ //spi_nand_flash_cache_flush(mtd, info->page_addr);
+ break;
+
+ case NAND_CMD_READOOB: /* Emulate NAND_CMD_READOOB */
+ info->page_addr = page_addr;
+ info->col_addr = column + mtd->writesize;
+ info->cmd = NAND_CMD_READ0;
+ /* Offset of oob */
+ info->read_ptr = info->col_addr;
+ /*read page data to cache */
+ spi_nand_read_flash_data2buffer(mtd, page_addr);
+ //spi_nand_flash_page_read2cache(page_addr);
+ spi_nand_flash_read_from_cache(&g_spi_flash_read_temp_buffer
+ [mtd->writesize], mtd->writesize,
+ mtd->oobsize);
+
+ /*gigadevice flash hardware reserved block, add to BBT, 0xffe0000, 0x1ffc0000 */
+ if ((0xffe0000 == page_addr * mtd->writesize && info->type == SPINAND_TYPE_SPI2K)
+ || (0x1ffc0000 == info->page_addr * mtd->writesize && info->type == SPINAND_TYPE_SPI4K))
+ memset(&g_spi_flash_read_temp_buffer[0], 0,
+ mtd->writesize + mtd->oobsize);
+
+ info->byte_buf[0] =
+ g_spi_flash_read_temp_buffer[mtd->writesize];
+ info->index = 0;
+
+#ifdef NAND_DEBUG
+ printf("read flash, middle buf-oob0:\n");
+ rda_dump_buf((char *)
+ &g_spi_flash_read_temp_buffer[mtd->writesize],
+ mtd->oobsize);
+#endif
+ break;
+
+ case NAND_CMD_READ0: /* Emulate NAND_CMD_READOOB */
+ info->read_ptr = 0;
+ info->page_addr = page_addr;
+#ifdef READ_PAGE_DATA_USE_MIDDLE_BUFFER
+ /*read page data to cache */
+ spi_nand_read_flash_data2buffer(mtd, page_addr);
+ /*read OOB to cache */
+ //spi_nand_flash_page_read2cache(page_addr);
+ spi_nand_flash_read_from_cache(&g_spi_flash_read_temp_buffer
+ [mtd->writesize], mtd->writesize,
+ mtd->oobsize);
+
+ /*gigadevice flash hardware reserved block, add to BBT, 0xffe0000, 0x1ffc0000 */
+ if ((0xffe0000 == page_addr * mtd->writesize && info->type == SPINAND_TYPE_SPI2K)
+ || (0x1ffc0000 == info->page_addr * mtd->writesize && info->type == SPINAND_TYPE_SPI4K))
+ memset(&g_spi_flash_read_temp_buffer[0], 0,
+ mtd->writesize + mtd->oobsize);
+#endif/*READ_PAGE_DATA_USE_MIDDLE_BUFFER*/
+
+#ifdef NAND_DEBUG
+ printf("read flash, middle buf-oob1:\n");
+ rda_dump_buf((char *)
+ &g_spi_flash_read_temp_buffer[mtd->writesize],
+ mtd->oobsize);
+#endif
+ break;
+
+ default:
+ info->page_addr = page_addr;
+ info->col_addr = column;
+ info->cmd = command;
+ break;
+ }
+
+ if (info->cmd == NAND_CMD_NONE) {
+ return;
+ }
+
+ nand_rda_do_cmd_post(mtd);
+}
+
+static int spi_nand_rda_dev_ready(struct mtd_info *mtd)
+{
+ return 1;
+}
+
+static void nand_rda_select_chip(struct mtd_info *mtd, int chip){}
+
+static int spi_nand_rda_wait(struct mtd_info *mtd, struct nand_chip *chip)
+{
+#ifdef NAND_DEBUG
+ printf("function: spi_nand_rda_wait\n");
+#endif
+ chip->cmdfunc(mtd, NAND_CMD_STATUS, -1, -1);
+
+ return (int)chip->read_byte(mtd);
+}
+
+static int spi_nand_read_id(unsigned int id[2])
+{
+ id[0] = get_flash_ID(0);
+ id[1] = get_flash_ID(0);
+
+ printf("Nand ID: %08x %08x\n", id[0], id[1]);
+
+ return 0;
+}
+
+static void read_ID(struct mtd_info *mtd)
+{
+ unsigned int id[2];
+
+ spi_nand_read_id(id);
+}
+
+#define RDA_HW_CFG_BIT_7 (1 << 7)
+#define RDA_HW_CFG_BIT_4 (1 << 4)
+#define RDA_HW_CFG_BIT_3 (1 << 3)
+
+#if defined(CONFIG_MACH_RDA8810)
+static int spi_nand_get_type(struct rda_nand_info *info, unsigned int id[2],
+ int *rda_nand_type, int *bus_width_16)
+{
+ int metal_id;
+
+ info->spl_adjust_ratio = 2;
+ metal_id = rda_metal_id_get();
+ printf("get type, metal %d\n", metal_id);
+
+ if (metal_id >= 7) {
+ if(id[0] == 0xc4c8 || id[0] == 0xd4c8){
+ *rda_nand_type = SPINAND_TYPE_SPI4K;
+ info->spl_adjust_ratio = 4; //actually ratio * 2
+ }else{
+ *rda_nand_type = SPINAND_TYPE_SPI2K;
+ }
+
+ *bus_width_16 = 0;
+ } else {
+ printf("invalid metal id %d\n", metal_id);
+ return -ENODEV;
+ }
+
+ printf("SPL adjust ratio is %d. \n", info->spl_adjust_ratio);
+ return 0;
+}
+#else /* 8810E, 8820, 8850 */
+static int spi_nand_get_type(struct rda_nand_info *info, unsigned int id[2],
+ int *rda_nand_type, int *bus_width_16)
+{
+ int metal_id;
+
+ info->spl_adjust_ratio = 2;
+ metal_id = rda_metal_id_get();
+ printf("get type, metal %d\n", metal_id);
+
+ if(id[0] == 0xc4c8 || id[0] == 0xd4c8){
+ *rda_nand_type = SPINAND_TYPE_SPI4K;
+ info->spl_adjust_ratio = 4; //actually ratio * 2
+ }else{
+ *rda_nand_type = SPINAND_TYPE_SPI2K;
+ }
+
+ *bus_width_16 = 0;
+
+ printf("SPL adjust ratio is %d. \n", info->spl_adjust_ratio);
+ return 0;
+}
+#endif
+
+static u32 spi_nand_cal_freq_by_divreg(u32 basefreq, u32 reg, u32 div2)
+{
+ u32 newfreq;
+
+ if (reg >= ARRAY_SIZE(clk_div_map)) {
+ printf("nand:Invalid div reg: %u\n", reg);
+ reg = ARRAY_SIZE(clk_div_map) - 1;
+ }
+ /* Assuming basefreq is smaller than 2^31 (2.147G Hz) */
+ newfreq = (basefreq << (div2 ? 0 : 1)) / (clk_div_map[reg] >> 1);
+ return newfreq;
+}
+
+static unsigned long spi_nand_get_master_clk_rate(u32 reg)
+{
+ u32 div2;
+ unsigned long rate;
+
+ div2 = reg & SYS_CTRL_AP_AP_SFLSH_SRC_DIV2;
+ reg = GET_BITFIELD(reg, SYS_CTRL_AP_AP_SFLSH_FREQ);
+ rate = spi_nand_cal_freq_by_divreg(PLL_BUS_FREQ, reg, div2);
+
+ return rate;
+}
+
+static unsigned char spi_nand_calc_divider(struct rda_nand_info *info)
+{
+ unsigned long mclk = info->master_clk;
+ unsigned char div;
+ unsigned long real_clk;
+
+ div = mclk / info->clk;
+ if (mclk % info->clk)
+ div += 1;
+
+ if (div < 2) {
+ /* 2 is minimal divider by hardware */
+ div = 2;
+ }
+
+ if (div > 255) {
+ /* 255 is max divider by hardware */
+ div = 255;
+ }
+
+ real_clk = mclk / div;
+ printf("Spi nand real clock is %ld\n", real_clk);
+ return div;
+}
+
+static unsigned char spi_nand_calc_delay(struct rda_nand_info *info)
+{/*the value need check in future!*/
+ unsigned char delay;
+
+#ifndef _TGT_AP_SPI_NAND_READDELAY
+ unsigned long mclk = info->master_clk;
+ unsigned short clk_val;
+
+ clk_val = mclk / 1000000;
+ if (clk_val <= 220)
+ delay = 2;
+ else if (clk_val <= 280)
+ delay = 3;
+ else if (clk_val <= 350)
+ delay = 4;
+ else if (clk_val <= 420)
+ delay = 5;
+ else
+ delay = 6;
+#else
+ delay = _TGT_AP_SPI_NAND_READDELAY;
+#endif
+
+ printf("read delay:%d\n", delay);
+ return delay;
+}
+
+static int spi_nand_rda_init(struct nand_chip *this, struct rda_nand_info *info)
+{
+ unsigned int id[2];
+ int ret = 0;
+ int rda_nand_type = SPINAND_TYPE_INVALID;
+ int bus_width_16 = 0;
+ BOOL spi_nand_quad_mode = TRUE;
+ unsigned char spi_read_delay = 2; /*AP_CLK_SFLSH clock cycles*/
+ unsigned char spi_controller_div = 4; /*2~8*/
+
+ ret = spi_nand_reset_flash();
+ if (ret)
+ return ret;
+ ret = spi_nand_read_id(id);
+ if (ret)
+ return ret;
+ ret = spi_nand_get_type(info, id, &rda_nand_type, &bus_width_16);
+ if (ret)
+ return ret;
+ ret = init_spi_nand_info(info, rda_nand_type, bus_width_16);
+ if (ret)
+ return ret;
+ if (info->bus_width_16)
+ this->options |= NAND_BUSWIDTH_16;
+
+ spi_controller_div = spi_nand_calc_divider(info);
+ spi_read_delay = spi_nand_calc_delay(info);
+ //nand_spi_init(1, 4, 3);
+ //nand_spi_init(1, 2, 4);
+ nand_spi_init(spi_nand_quad_mode, spi_read_delay, spi_controller_div);
+
+
+ return 0;
+}
+
+static int spi_nand_rda_init_size(struct mtd_info *mtd, struct nand_chip *this,
+ u8 * id_data)
+{
+ struct rda_nand_info *info = this->priv;
+
+ mtd->erasesize = info->vir_erase_size;
+ mtd->writesize = info->vir_page_size;
+ mtd->oobsize = info->vir_oob_size;
+
+ return (info->bus_width_16) ? NAND_BUSWIDTH_16 : 0;
+}
+
+int rda_spi_nand_init(struct nand_chip *nand)
+{
+ struct rda_nand_info *info;
+ static struct rda_nand_info rda_nand_info;
+
+ info = &rda_nand_info;
+
+ nand->chip_delay = 0;
+#ifdef CONFIG_SYS_NAND_USE_FLASH_BBT
+ nand->options |= NAND_USE_FLASH_BBT;
+#endif
+#ifdef NAND_DEBUG
+ printf("SPINAND: nand_options = %x\n", nand->options);
+#endif
+ /*
+ * in fact, nand controler we do hardware ECC silently, and
+ * we don't need tell mtd layer, and will simple nand operations
+ */
+ nand->ecc.mode = NAND_ECC_NONE;
+ /* Set address of hardware control function */
+ nand->cmd_ctrl = spi_nand_rda_hwcontrol;
+ nand->init_size = spi_nand_rda_init_size;
+ nand->cmdfunc = spi_nand_rda_cmdfunc;
+ nand->read_byte = spi_nand_rda_read_byte;
+ nand->read_word = spi_nand_rda_read_word;
+ nand->read_buf = spi_nand_rda_read_buf;
+ nand->write_buf = spi_nand_rda_write_buf;
+ nand->dev_ready = spi_nand_rda_dev_ready;
+ nand->waitfunc = spi_nand_rda_wait;
+ nand->select_chip = nand_rda_select_chip;
+ nand->read_nand_ID = read_ID;
+ nand->priv = (void *)info;
+ nand->IO_ADDR_R = (void __iomem *)SPI_NAND_READ_DATA_BUFFER_BASE;
+ nand->IO_ADDR_W = (void __iomem *)SPI_NAND_WRITE_DATA_BUFFER_BASE;
+ info->index = 0;
+ info->write_ptr = 0;
+ info->read_ptr = 0;
+ info->cmd_flag = NAND_CMD_NONE;
+ info->master_clk = spi_nand_get_master_clk_rate(_TGT_AP_CLK_SFLSH);
+ info->clk = _TGT_AP_SPI_NAND_CLOCK;
+
+#ifdef CONFIG_NAND_RDA_DMA
+ rda_request_dma(&info->dma_ch);
+#endif /* CONFIG_NAND_RDA_DMA */
+
+ spi_nand_rda_init(nand, info);
+
+ if (!nand->ecc.layout && (nand->ecc.mode != NAND_ECC_SOFT_BCH)) {
+ switch (info->vir_oob_size) {
+ case 64:
+ nand->ecc.layout = &spi_nand_oob_64;
+ break;
+ case 128:
+ nand->ecc.layout = &spi_nand_oob_128;
+ break;
+ default:
+ printf("error oobsize: %d\n",
+ info->vir_oob_size);
+ }
+ }
+
+ if (nand->options & NAND_USE_FLASH_BBT) {
+ /* Use the default pattern descriptors */
+ if (!nand->bbt_td) {
+ nand->bbt_td = &spi_bbt_main_descr;
+ nand->bbt_md = &spi_bbt_mirror_descr;
+ }
+ }
+
+ printf("SPINAND: Nand Init Done\n");
+ return 0;
+}
+
+#else
+int rda_spi_nand_init(struct nand_chip *nand){return 0;}
+#endif
+
+#if 0
+/* move to rda_nand_base.c */
+int board_nand_init(struct nand_chip *chip) __attribute__ ((weak));
+
+int board_nand_init(struct nand_chip *chip)
+{
+ return rda_spi_nand_init(chip);
+}
+#endif
diff --git a/drivers/mtd/onenand/onenand_base.c b/drivers/mtd/onenand/onenand_base.c
index 1d0f196c12..1a7b40eaa3 100644
--- a/drivers/mtd/onenand/onenand_base.c
+++ b/drivers/mtd/onenand/onenand_base.c
@@ -20,7 +20,7 @@
*/
#include <common.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
diff --git a/drivers/mtd/onenand/onenand_bbt.c b/drivers/mtd/onenand/onenand_bbt.c
index 1354877729..9d5da54708 100644
--- a/drivers/mtd/onenand/onenand_bbt.c
+++ b/drivers/mtd/onenand/onenand_bbt.c
@@ -15,7 +15,7 @@
*/
#include <common.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
#include <malloc.h>
diff --git a/drivers/mtd/onenand/onenand_uboot.c b/drivers/mtd/onenand/onenand_uboot.c
index c642016c2d..ae60c3bb71 100644
--- a/drivers/mtd/onenand/onenand_uboot.c
+++ b/drivers/mtd/onenand/onenand_uboot.c
@@ -14,7 +14,7 @@
*/
#include <common.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
diff --git a/drivers/mtd/onenand/samsung.c b/drivers/mtd/onenand/samsung.c
index c9d33ec825..0d94ea5b1f 100644
--- a/drivers/mtd/onenand/samsung.c
+++ b/drivers/mtd/onenand/samsung.c
@@ -28,7 +28,7 @@
#include <common.h>
#include <malloc.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/onenand.h>
#include <linux/mtd/samsung_onenand.h>
diff --git a/drivers/mtd/ubi/build.c b/drivers/mtd/ubi/build.c
index d144ac29bc..ca169a83e0 100644
--- a/drivers/mtd/ubi/build.c
+++ b/drivers/mtd/ubi/build.c
@@ -476,21 +476,21 @@ static int attach_by_scanning(struct ubi_device *ubi)
if (err)
goto out_si;
- err = ubi_eba_init_scan(ubi, si);
- if (err)
- goto out_wl;
-
err = ubi_wl_init_scan(ubi, si);
if (err)
goto out_vtbl;
+ err = ubi_eba_init_scan(ubi, si);
+ if (err)
+ goto out_wl;
+
ubi_scan_destroy_si(si);
return 0;
-out_vtbl:
- vfree(ubi->vtbl);
out_wl:
ubi_wl_close(ubi);
+out_vtbl:
+ vfree(ubi->vtbl);
out_si:
ubi_scan_destroy_si(si);
return err;
@@ -550,19 +550,18 @@ static int io_init(struct ubi_device *ubi)
* fundamental reason for this assumption. It is just an optimization
* which allows us to avoid costly division operations.
*/
- if (!is_power_of_2(ubi->min_io_size)) {
- ubi_err("min. I/O unit (%d) is not power of 2",
- ubi->min_io_size);
- return -EINVAL;
- }
-
ubi_assert(ubi->hdrs_min_io_size > 0);
ubi_assert(ubi->hdrs_min_io_size <= ubi->min_io_size);
ubi_assert(ubi->min_io_size % ubi->hdrs_min_io_size == 0);
/* Calculate default aligned sizes of EC and VID headers */
- ubi->ec_hdr_alsize = ALIGN(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size);
- ubi->vid_hdr_alsize = ALIGN(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size);
+ if (is_power_of_2(ubi->hdrs_min_io_size)) {
+ ubi->ec_hdr_alsize = ALIGN(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size);
+ ubi->vid_hdr_alsize = ALIGN(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size);
+ } else {
+ ubi->ec_hdr_alsize = roundup(UBI_EC_HDR_SIZE, ubi->hdrs_min_io_size);
+ ubi->vid_hdr_alsize = roundup(UBI_VID_HDR_SIZE, ubi->hdrs_min_io_size);
+ }
dbg_msg("min_io_size %d", ubi->min_io_size);
dbg_msg("hdrs_min_io_size %d", ubi->hdrs_min_io_size);
@@ -574,15 +573,22 @@ static int io_init(struct ubi_device *ubi)
ubi->vid_hdr_offset = ubi->vid_hdr_aloffset =
ubi->ec_hdr_alsize;
else {
- ubi->vid_hdr_aloffset = ubi->vid_hdr_offset &
+ if (is_power_of_2(ubi->hdrs_min_io_size))
+ ubi->vid_hdr_aloffset = ubi->vid_hdr_offset &
~(ubi->hdrs_min_io_size - 1);
+ else
+ ubi->vid_hdr_aloffset = (ubi->vid_hdr_offset / ubi->hdrs_min_io_size) *
+ ubi->hdrs_min_io_size;
ubi->vid_hdr_shift = ubi->vid_hdr_offset -
ubi->vid_hdr_aloffset;
}
/* Similar for the data offset */
ubi->leb_start = ubi->vid_hdr_offset + UBI_EC_HDR_SIZE;
- ubi->leb_start = ALIGN(ubi->leb_start, ubi->min_io_size);
+ if (is_power_of_2(ubi->min_io_size))
+ ubi->leb_start = ALIGN(ubi->leb_start, ubi->min_io_size);
+ else
+ ubi->leb_start = roundup(ubi->leb_start, ubi->min_io_size);
dbg_msg("vid_hdr_offset %d", ubi->vid_hdr_offset);
dbg_msg("vid_hdr_aloffset %d", ubi->vid_hdr_aloffset);
@@ -597,13 +603,24 @@ static int io_init(struct ubi_device *ubi)
}
/* Check sanity */
- if (ubi->vid_hdr_offset < UBI_EC_HDR_SIZE ||
- ubi->leb_start < ubi->vid_hdr_offset + UBI_VID_HDR_SIZE ||
- ubi->leb_start > ubi->peb_size - UBI_VID_HDR_SIZE ||
- ubi->leb_start & (ubi->min_io_size - 1)) {
- ubi_err("bad VID header (%d) or data offsets (%d)",
- ubi->vid_hdr_offset, ubi->leb_start);
- return -EINVAL;
+ if (is_power_of_2(ubi->min_io_size)) {
+ if (ubi->vid_hdr_offset < UBI_EC_HDR_SIZE ||
+ ubi->leb_start < ubi->vid_hdr_offset + UBI_VID_HDR_SIZE ||
+ ubi->leb_start > ubi->peb_size - UBI_VID_HDR_SIZE ||
+ ubi->leb_start & (ubi->min_io_size - 1)) {
+ ubi_err("bad VID header (%d) or data offsets (%d)",
+ ubi->vid_hdr_offset, ubi->leb_start);
+ return -EINVAL;
+ }
+ } else {
+ if (ubi->vid_hdr_offset < UBI_EC_HDR_SIZE ||
+ ubi->leb_start < ubi->vid_hdr_offset + UBI_VID_HDR_SIZE ||
+ ubi->leb_start > ubi->peb_size - UBI_VID_HDR_SIZE ||
+ (ubi->leb_start % ubi->min_io_size)) {
+ ubi_err("bad VID header (%d) or data offsets (%d)",
+ ubi->vid_hdr_offset, ubi->leb_start);
+ return -EINVAL;
+ }
}
/*
diff --git a/drivers/mtd/ubi/eba.c b/drivers/mtd/ubi/eba.c
index d523c94b12..a58b9de06d 100644
--- a/drivers/mtd/ubi/eba.c
+++ b/drivers/mtd/ubi/eba.c
@@ -752,11 +752,19 @@ int ubi_eba_write_leb_st(struct ubi_device *ubi, struct ubi_volume *vol,
if (ubi->ro_mode)
return -EROFS;
- if (lnum == used_ebs - 1)
- /* If this is the last LEB @len may be unaligned */
- len = ALIGN(data_size, ubi->min_io_size);
- else
- ubi_assert(!(len & (ubi->min_io_size - 1)));
+ if (is_power_of_2(ubi->min_io_size)) {
+ if (lnum == used_ebs - 1)
+ /* If this is the last LEB @len may be unaligned */
+ len = ALIGN(data_size, ubi->min_io_size);
+ else
+ ubi_assert(!(len & (ubi->min_io_size - 1)));
+ } else {
+ if (lnum == used_ebs - 1)
+ /* If this is the last LEB @len may be unaligned */
+ len = roundup(data_size, ubi->min_io_size);
+ else
+ ubi_assert(!(len % ubi->min_io_size));
+ }
vid_hdr = ubi_zalloc_vid_hdr(ubi, GFP_NOFS);
if (!vid_hdr)
@@ -988,7 +996,10 @@ int ubi_eba_copy_leb(struct ubi_device *ubi, int from, int to,
if (vid_hdr->vol_type == UBI_VID_STATIC) {
data_size = be32_to_cpu(vid_hdr->data_size);
- aldata_size = ALIGN(data_size, ubi->min_io_size);
+ if (is_power_of_2(ubi->min_io_size))
+ aldata_size = ALIGN(data_size, ubi->min_io_size);
+ else
+ aldata_size = roundup(data_size, ubi->min_io_size);
} else
data_size = aldata_size =
ubi->leb_size - be32_to_cpu(vid_hdr->data_pad);
diff --git a/drivers/mtd/ubi/kapi.c b/drivers/mtd/ubi/kapi.c
index 423d479152..df67cde5af 100644
--- a/drivers/mtd/ubi/kapi.c
+++ b/drivers/mtd/ubi/kapi.c
@@ -400,10 +400,17 @@ int ubi_leb_write(struct ubi_volume_desc *desc, int lnum, const void *buf,
if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME)
return -EROFS;
- if (lnum < 0 || lnum >= vol->reserved_pebs || offset < 0 || len < 0 ||
- offset + len > vol->usable_leb_size ||
- offset & (ubi->min_io_size - 1) || len & (ubi->min_io_size - 1))
+ if (is_power_of_2(ubi->min_io_size)) {
+ if (lnum < 0 || lnum >= vol->reserved_pebs || offset < 0 || len < 0 ||
+ offset + len > vol->usable_leb_size ||
+ offset & (ubi->min_io_size - 1) || len & (ubi->min_io_size - 1))
+ return -EINVAL;
+ } else {
+ if (lnum < 0 || lnum >= vol->reserved_pebs || offset < 0 || len < 0 ||
+ offset + len > vol->usable_leb_size ||
+ (offset % ubi->min_io_size) || (len % ubi->min_io_size))
return -EINVAL;
+ }
if (dtype != UBI_LONGTERM && dtype != UBI_SHORTTERM &&
dtype != UBI_UNKNOWN)
@@ -450,9 +457,17 @@ int ubi_leb_change(struct ubi_volume_desc *desc, int lnum, const void *buf,
if (desc->mode == UBI_READONLY || vol->vol_type == UBI_STATIC_VOLUME)
return -EROFS;
- if (lnum < 0 || lnum >= vol->reserved_pebs || len < 0 ||
- len > vol->usable_leb_size || len & (ubi->min_io_size - 1))
- return -EINVAL;
+ if (is_power_of_2(ubi->min_io_size)) {
+ if (lnum < 0 || lnum >= vol->reserved_pebs || len < 0 ||
+ len > vol->usable_leb_size ||
+ len & (ubi->min_io_size - 1))
+ return -EINVAL;
+ } else {
+ if (lnum < 0 || lnum >= vol->reserved_pebs || len < 0 ||
+ len > vol->usable_leb_size ||
+ (len % ubi->min_io_size))
+ return -EINVAL;
+ }
if (dtype != UBI_LONGTERM && dtype != UBI_SHORTTERM &&
dtype != UBI_UNKNOWN)
diff --git a/drivers/mtd/ubi/misc.c b/drivers/mtd/ubi/misc.c
index a6410bfb6b..97d806b924 100644
--- a/drivers/mtd/ubi/misc.c
+++ b/drivers/mtd/ubi/misc.c
@@ -38,14 +38,20 @@ int ubi_calc_data_len(const struct ubi_device *ubi, const void *buf,
{
int i;
- ubi_assert(!(length & (ubi->min_io_size - 1)));
+ if (is_power_of_2(ubi->min_io_size))
+ ubi_assert(!(length & (ubi->min_io_size - 1)));
+ else
+ ubi_assert(!(length % ubi->min_io_size));
for (i = length - 1; i >= 0; i--)
if (((const uint8_t *)buf)[i] != 0xFF)
break;
/* The resulting length must be aligned to the minimum flash I/O size */
- length = ALIGN(i + 1, ubi->min_io_size);
+ if (is_power_of_2(ubi->min_io_size))
+ length = ALIGN(i + 1, ubi->min_io_size);
+ else
+ length = roundup(i + 1, ubi->min_io_size);
return length;
}
diff --git a/drivers/mtd/ubi/upd.c b/drivers/mtd/ubi/upd.c
index 5f7ed7b2ef..0c201ceca1 100644
--- a/drivers/mtd/ubi/upd.c
+++ b/drivers/mtd/ubi/upd.c
@@ -241,7 +241,12 @@ static int write_leb(struct ubi_device *ubi, struct ubi_volume *vol, int lnum,
int err;
if (vol->vol_type == UBI_DYNAMIC_VOLUME) {
- int l = ALIGN(len, ubi->min_io_size);
+ int l;
+
+ if (is_power_of_2(ubi->min_io_size))
+ l = ALIGN(len, ubi->min_io_size);
+ else
+ l = roundup(len, ubi->min_io_size);
memset(buf + len, 0xFF, l - len);
len = ubi_calc_data_len(ubi, buf, l);
@@ -420,7 +425,11 @@ int ubi_more_leb_change_data(struct ubi_device *ubi, struct ubi_volume *vol,
vol->upd_received += count;
if (vol->upd_received == vol->upd_bytes) {
- int len = ALIGN((int)vol->upd_bytes, ubi->min_io_size);
+ int len;
+ if (is_power_of_2(ubi->min_io_size))
+ len = ALIGN((int)vol->upd_bytes, ubi->min_io_size);
+ else
+ len = roundup((int)vol->upd_bytes, ubi->min_io_size);
memset(vol->upd_buf + vol->upd_bytes, 0xFF, len - vol->upd_bytes);
len = ubi_calc_data_len(ubi, vol->upd_buf, len);
diff --git a/drivers/mtd/ubi/vmt.c b/drivers/mtd/ubi/vmt.c
index ce9fec7fc9..f63730b9fd 100644
--- a/drivers/mtd/ubi/vmt.c
+++ b/drivers/mtd/ubi/vmt.c
@@ -732,8 +732,10 @@ static void paranoid_check_volume(struct ubi_device *ubi, int vol_id)
ubi_err("bad alignment");
goto fail;
}
-
- n = vol->alignment & (ubi->min_io_size - 1);
+ if (is_power_of_2(ubi->min_io_size))
+ n = vol->alignment & (ubi->min_io_size - 1);
+ else
+ n = vol->alignment % ubi->min_io_size;
if (vol->alignment != 1 && n) {
ubi_err("alignment is not multiple of min I/O unit");
goto fail;
diff --git a/drivers/mtd/ubi/vtbl.c b/drivers/mtd/ubi/vtbl.c
index f679f06494..48cb62786c 100644
--- a/drivers/mtd/ubi/vtbl.c
+++ b/drivers/mtd/ubi/vtbl.c
@@ -174,7 +174,10 @@ static int vtbl_check(const struct ubi_device *ubi,
goto bad;
}
- n = alignment & (ubi->min_io_size - 1);
+ if (is_power_of_2(ubi->min_io_size))
+ n = alignment & (ubi->min_io_size - 1);
+ else
+ n = alignment % ubi->min_io_size;
if (alignment != 1 && n) {
err = 5;
goto bad;
@@ -758,7 +761,10 @@ int ubi_read_volume_table(struct ubi_device *ubi, struct ubi_scan_info *si)
ubi->vtbl_slots = UBI_MAX_VOLUMES;
ubi->vtbl_size = ubi->vtbl_slots * UBI_VTBL_RECORD_SIZE;
- ubi->vtbl_size = ALIGN(ubi->vtbl_size, ubi->min_io_size);
+ if (is_power_of_2(ubi->min_io_size))
+ ubi->vtbl_size = ALIGN(ubi->vtbl_size, ubi->min_io_size);
+ else
+ ubi->vtbl_size = roundup(ubi->vtbl_size, ubi->min_io_size);
sv = ubi_scan_find_sv(si, UBI_LAYOUT_VOLUME_ID);
if (!sv) {
diff --git a/drivers/net/4xx_enet.c b/drivers/net/4xx_enet.c
index 73700dd0df..7c6e362f0e 100644
--- a/drivers/net/4xx_enet.c
+++ b/drivers/net/4xx_enet.c
@@ -1557,8 +1557,7 @@ get_speed:
}
-static int ppc_4xx_eth_send (struct eth_device *dev, volatile void *ptr,
- int len)
+static int ppc_4xx_eth_send(struct eth_device *dev, void *ptr, int len)
{
struct enet_frame *ef_ptr;
ulong time_start, time_now;
diff --git a/drivers/net/altera_tse.c b/drivers/net/altera_tse.c
index 0e6aac7173..de517f8dab 100644
--- a/drivers/net/altera_tse.c
+++ b/drivers/net/altera_tse.c
@@ -257,8 +257,7 @@ static int tse_adjust_link(struct altera_tse_priv *priv)
return 0;
}
-static int tse_eth_send(struct eth_device *dev,
- volatile void *packet, int length)
+static int tse_eth_send(struct eth_device *dev, void *packet, int length)
{
struct altera_tse_priv *priv = dev->priv;
volatile struct alt_sgdma_registers *tx_sgdma = priv->sgdma_tx;
diff --git a/drivers/net/armada100_fec.c b/drivers/net/armada100_fec.c
index 52be3a7195..d318a36398 100644
--- a/drivers/net/armada100_fec.c
+++ b/drivers/net/armada100_fec.c
@@ -558,8 +558,7 @@ static void armdfec_halt(struct eth_device *dev)
clrbits_le32(&regs->pconf, PCR_EN);
}
-static int armdfec_send(struct eth_device *dev, volatile void *dataptr,
- int datasize)
+static int armdfec_send(struct eth_device *dev, void *dataptr, int datasize)
{
struct armdfec_device *darmdfec = to_darmdfec(dev);
struct armdfec_reg *regs = darmdfec->regs;
diff --git a/drivers/net/at91_emac.c b/drivers/net/at91_emac.c
index 483c831c05..2fa6b686da 100644
--- a/drivers/net/at91_emac.c
+++ b/drivers/net/at91_emac.c
@@ -415,8 +415,7 @@ static void at91emac_halt(struct eth_device *netdev)
debug_cond(DEBUG_AT91EMAC, "halt MAC\n");
}
-static int at91emac_send(struct eth_device *netdev, volatile void *packet,
- int length)
+static int at91emac_send(struct eth_device *netdev, void *packet, int length)
{
at91_emac_t *emac;
diff --git a/drivers/net/ax88180.c b/drivers/net/ax88180.c
index bc3e6ad58a..f5017682d4 100644
--- a/drivers/net/ax88180.c
+++ b/drivers/net/ax88180.c
@@ -604,8 +604,7 @@ static int ax88180_recv (struct eth_device *dev)
}
/* Send a data block via Ethernet. */
-static int
-ax88180_send (struct eth_device *dev, volatile void *packet, int length)
+static int ax88180_send(struct eth_device *dev, void *packet, int length)
{
struct ax88180_private *priv = (struct ax88180_private *)dev->priv;
unsigned short TXDES_addr;
diff --git a/drivers/net/bfin_mac.c b/drivers/net/bfin_mac.c
index dcc781a46a..e24ac4a174 100644
--- a/drivers/net/bfin_mac.c
+++ b/drivers/net/bfin_mac.c
@@ -118,8 +118,7 @@ int bfin_EMAC_initialize(bd_t *bis)
return 0;
}
-static int bfin_EMAC_send(struct eth_device *dev, volatile void *packet,
- int length)
+static int bfin_EMAC_send(struct eth_device *dev, void *packet, int length)
{
int i;
int result = 0;
@@ -471,7 +470,7 @@ int ether_post_test(int flags)
for (i = 0; i < 42; i++)
buf[i + 22] = i;
printf("--------Send 64 bytes......\n");
- bfin_EMAC_send(NULL, (volatile void *)buf, 64);
+ bfin_EMAC_send(NULL, buf, 64);
for (i = 0; i < 100; i++) {
udelay(10000);
if ((rxbuf[rxIdx]->StatusWord & RX_COMP) != 0) {
diff --git a/drivers/net/bfin_mac.h b/drivers/net/bfin_mac.h
index c731c179b5..54ffb3830e 100644
--- a/drivers/net/bfin_mac.h
+++ b/drivers/net/bfin_mac.h
@@ -58,7 +58,7 @@ static ADI_ETHER_BUFFER *SetupTxBuffer(int no);
static int bfin_EMAC_init(struct eth_device *dev, bd_t *bd);
static void bfin_EMAC_halt(struct eth_device *dev);
-static int bfin_EMAC_send(struct eth_device *dev, volatile void *packet, int length);
+static int bfin_EMAC_send(struct eth_device *dev, void *packet, int length);
static int bfin_EMAC_recv(struct eth_device *dev);
static int bfin_EMAC_setup_addr(struct eth_device *dev);
diff --git a/drivers/net/calxedaxgmac.c b/drivers/net/calxedaxgmac.c
index 00e26c2adc..e3553d68d8 100644
--- a/drivers/net/calxedaxgmac.c
+++ b/drivers/net/calxedaxgmac.c
@@ -434,7 +434,7 @@ static int xgmac_init(struct eth_device *dev, bd_t * bis)
return 0;
}
-static int xgmac_tx(struct eth_device *dev, volatile void *packet, int length)
+static int xgmac_tx(struct eth_device *dev, void *packet, int length)
{
struct xgmac_regs *regs = (struct xgmac_regs *)dev->iobase;
struct calxeda_eth_dev *priv = dev->priv;
@@ -442,7 +442,7 @@ static int xgmac_tx(struct eth_device *dev, volatile void *packet, int length)
struct xgmac_dma_desc *txdesc = &priv->tx_chain[currdesc];
int timeout;
- desc_set_buf_addr_and_size(txdesc, (void *)packet, length);
+ desc_set_buf_addr_and_size(txdesc, packet, length);
desc_set_tx_owner(txdesc, TXDESC_FIRST_SEG |
TXDESC_LAST_SEG | TXDESC_CRC_EN_APPEND);
@@ -476,7 +476,7 @@ static int xgmac_rx(struct eth_device *dev)
length = desc_get_rx_frame_len(rxdesc);
- NetReceive((volatile unsigned char *)desc_get_buf_addr(rxdesc), length);
+ NetReceive(desc_get_buf_addr(rxdesc), length);
/* set descriptor back to owned by XGMAC */
desc_set_rx_owner(rxdesc);
diff --git a/drivers/net/cs8900.c b/drivers/net/cs8900.c
index e04a784a4b..6aaa0cf49f 100644
--- a/drivers/net/cs8900.c
+++ b/drivers/net/cs8900.c
@@ -215,8 +215,7 @@ static int cs8900_recv(struct eth_device *dev)
}
/* Send a data block via Ethernet. */
-static int cs8900_send(struct eth_device *dev,
- volatile void *packet, int length)
+static int cs8900_send(struct eth_device *dev, void *packet, int length)
{
volatile u16 *addr;
int tmo;
diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
index fbd0f1b7b5..e471d2ce33 100644
--- a/drivers/net/davinci_emac.c
+++ b/drivers/net/davinci_emac.c
@@ -637,7 +637,7 @@ static int tx_send_loop = 0;
* positive number (number of bytes transmitted) or negative for error
*/
static int davinci_eth_send_packet (struct eth_device *dev,
- volatile void *packet, int length)
+ void *packet, int length)
{
int ret_status = -1;
int index;
diff --git a/drivers/net/dc2114x.c b/drivers/net/dc2114x.c
index 0fb616ac20..d9fcb5a13e 100644
--- a/drivers/net/dc2114x.c
+++ b/drivers/net/dc2114x.c
@@ -175,7 +175,7 @@ static void read_hw_addr(struct eth_device* dev, bd_t * bis);
static void send_setup_frame(struct eth_device* dev, bd_t * bis);
static int dc21x4x_init(struct eth_device* dev, bd_t* bis);
-static int dc21x4x_send(struct eth_device* dev, volatile void *packet, int length);
+static int dc21x4x_send(struct eth_device *dev, void *packet, int length);
static int dc21x4x_recv(struct eth_device* dev);
static void dc21x4x_halt(struct eth_device* dev);
#ifdef CONFIG_TULIP_SELECT_MEDIA
@@ -390,7 +390,7 @@ static int dc21x4x_init(struct eth_device* dev, bd_t* bis)
return 0;
}
-static int dc21x4x_send(struct eth_device* dev, volatile void *packet, int length)
+static int dc21x4x_send(struct eth_device *dev, void *packet, int length)
{
int status = -1;
int i;
diff --git a/drivers/net/designware.c b/drivers/net/designware.c
index e8e669bd90..9b17db41f6 100644
--- a/drivers/net/designware.c
+++ b/drivers/net/designware.c
@@ -189,8 +189,7 @@ static int dw_eth_init(struct eth_device *dev, bd_t *bis)
return 0;
}
-static int dw_eth_send(struct eth_device *dev, volatile void *packet,
- int length)
+static int dw_eth_send(struct eth_device *dev, void *packet, int length)
{
struct dw_eth_dev *priv = dev->priv;
struct eth_dma_regs *dma_p = priv->dma_regs_p;
@@ -203,7 +202,7 @@ static int dw_eth_send(struct eth_device *dev, volatile void *packet,
return -1;
}
- memcpy((void *)desc_p->dmamac_addr, (void *)packet, length);
+ memcpy((void *)desc_p->dmamac_addr, packet, length);
#if defined(CONFIG_DW_ALTDESCRIPTOR)
desc_p->txrx_status |= DESC_TXSTS_TXFIRST | DESC_TXSTS_TXLAST;
diff --git a/drivers/net/dm9000x.c b/drivers/net/dm9000x.c
index 04241109cc..f0c4499edb 100644
--- a/drivers/net/dm9000x.c
+++ b/drivers/net/dm9000x.c
@@ -406,8 +406,7 @@ static int dm9000_init(struct eth_device *dev, bd_t *bd)
Hardware start transmission.
Send a packet to media from the upper layer.
*/
-static int dm9000_send(struct eth_device *netdev, volatile void *packet,
- int length)
+static int dm9000_send(struct eth_device *netdev, void *packet, int length)
{
int tmo;
struct board_info *db = &dm9000_info;
diff --git a/drivers/net/dnet.c b/drivers/net/dnet.c
index 15d0a6e741..944a0c046f 100644
--- a/drivers/net/dnet.c
+++ b/drivers/net/dnet.c
@@ -130,8 +130,7 @@ static u16 dnet_mdio_read(struct dnet_device *dnet, u8 reg)
return value;
}
-static int dnet_send(struct eth_device *netdev, volatile void *packet,
- int length)
+static int dnet_send(struct eth_device *netdev, void *packet, int length)
{
struct dnet_device *dnet = to_dnet(netdev);
int i, wrsz;
diff --git a/drivers/net/e1000.c b/drivers/net/e1000.c
index e726f398d4..94b2a41e14 100644
--- a/drivers/net/e1000.c
+++ b/drivers/net/e1000.c
@@ -5031,10 +5031,9 @@ e1000_poll(struct eth_device *nic)
/**************************************************************************
TRANSMIT - Transmit a frame
***************************************************************************/
-static int
-e1000_transmit(struct eth_device *nic, volatile void *packet, int length)
+static int e1000_transmit(struct eth_device *nic, void *packet, int length)
{
- void * nv_packet = (void *)packet;
+ void *nv_packet = (void *)packet;
struct e1000_hw *hw = nic->priv;
struct e1000_tx_desc *txp;
int i = 0;
diff --git a/drivers/net/eepro100.c b/drivers/net/eepro100.c
index 07ec34cbba..d2c8277de9 100644
--- a/drivers/net/eepro100.c
+++ b/drivers/net/eepro100.c
@@ -242,8 +242,7 @@ static void purge_tx_ring (struct eth_device *dev);
static void read_hw_addr (struct eth_device *dev, bd_t * bis);
static int eepro100_init (struct eth_device *dev, bd_t * bis);
-static int eepro100_send (struct eth_device *dev, volatile void *packet,
- int length);
+static int eepro100_send(struct eth_device *dev, void *packet, int length);
static int eepro100_recv (struct eth_device *dev);
static void eepro100_halt (struct eth_device *dev);
@@ -608,7 +607,7 @@ static int eepro100_init (struct eth_device *dev, bd_t * bis)
return status;
}
-static int eepro100_send (struct eth_device *dev, volatile void *packet, int length)
+static int eepro100_send(struct eth_device *dev, void *packet, int length)
{
int i, status = -1;
int tx_cur;
@@ -691,7 +690,7 @@ static int eepro100_recv (struct eth_device *dev)
/* Pass the packet up to the protocol
* layers.
*/
- NetReceive (rx_ring[rx_next].data, length);
+ NetReceive((u8 *)rx_ring[rx_next].data, length);
} else {
/* There was an error.
*/
diff --git a/drivers/net/enc28j60.c b/drivers/net/enc28j60.c
index e2011aef4a..c55667c931 100644
--- a/drivers/net/enc28j60.c
+++ b/drivers/net/enc28j60.c
@@ -875,7 +875,7 @@ static int enc_recv(struct eth_device *dev)
*/
static int enc_send(
struct eth_device *dev,
- volatile void *packet,
+ void *packet,
int length)
{
enc_dev_t *enc = dev->priv;
diff --git a/drivers/net/ep93xx_eth.c b/drivers/net/ep93xx_eth.c
index c09384c632..245ad1c25d 100644
--- a/drivers/net/ep93xx_eth.c
+++ b/drivers/net/ep93xx_eth.c
@@ -380,7 +380,7 @@ static int ep93xx_eth_rcv_packet(struct eth_device *dev)
* Send a block of data via ethernet.
*/
static int ep93xx_eth_send_packet(struct eth_device *dev,
- volatile void * const packet, int const length)
+ void * const packet, int const length)
{
struct mac_regs *mac = GET_REGS(dev);
struct ep93xx_priv *priv = GET_PRIV(dev);
diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c
index 5824fd6827..af06d4fb82 100644
--- a/drivers/net/ethoc.c
+++ b/drivers/net/ethoc.c
@@ -414,7 +414,7 @@ static void ethoc_tx(struct eth_device *dev)
(void)ethoc_update_tx_stats(&bd);
}
-static int ethoc_send(struct eth_device *dev, volatile void *packet, int length)
+static int ethoc_send(struct eth_device *dev, void *packet, int length)
{
struct ethoc *priv = (struct ethoc *)dev->priv;
struct ethoc_bd bd;
diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
index d8db9f0c6e..eee41d7c8b 100644
--- a/drivers/net/fec_mxc.c
+++ b/drivers/net/fec_mxc.c
@@ -187,9 +187,10 @@ int fec_phy_write(struct mii_dev *bus, int phyAddr, int dev_addr, int regAddr,
#ifndef CONFIG_PHYLIB
static int miiphy_restart_aneg(struct eth_device *dev)
{
+ int ret = 0;
+#if !defined(CONFIG_FEC_MXC_NO_ANEG)
struct fec_priv *fec = (struct fec_priv *)dev->priv;
struct ethernet_regs *eth = fec->bus->priv;
- int ret = 0;
/*
* Wake up from sleep if necessary
@@ -213,6 +214,7 @@ static int miiphy_restart_aneg(struct eth_device *dev)
if (fec->mii_postcall)
ret = fec->mii_postcall(fec->phy_id);
+#endif
return ret;
}
@@ -398,6 +400,42 @@ static void fec_eth_phy_config(struct eth_device *dev)
#endif
}
+/*
+ * Do initial configuration of the FEC registers
+ */
+static void fec_reg_setup(struct fec_priv *fec)
+{
+ uint32_t rcntrl;
+
+ /*
+ * Set interrupt mask register
+ */
+ writel(0x00000000, &fec->eth->imask);
+
+ /*
+ * Clear FEC-Lite interrupt event register(IEVENT)
+ */
+ writel(0xffffffff, &fec->eth->ievent);
+
+
+ /*
+ * Set FEC-Lite receive control register(R_CNTRL):
+ */
+
+ /* Start with frame length = 1518, common for all modes. */
+ rcntrl = PKTSIZE << FEC_RCNTRL_MAX_FL_SHIFT;
+ if (fec->xcv_type == SEVENWIRE)
+ rcntrl |= FEC_RCNTRL_FCE;
+ else if (fec->xcv_type == RGMII)
+ rcntrl |= FEC_RCNTRL_RGMII;
+ else if (fec->xcv_type == RMII)
+ rcntrl |= FEC_RCNTRL_RMII;
+ else /* MII mode */
+ rcntrl |= FEC_RCNTRL_FCE | FEC_RCNTRL_MII_MODE;
+
+ writel(rcntrl, &fec->eth->r_cntrl);
+}
+
/**
* Start the FEC engine
* @param[in] dev Our device to handle
@@ -512,7 +550,6 @@ static int fec_init(struct eth_device *dev, bd_t* bd)
{
struct fec_priv *fec = (struct fec_priv *)dev->priv;
uint32_t mib_ptr = (uint32_t)&fec->eth->rmon_t_drop;
- uint32_t rcntrl;
uint32_t size;
int i, ret;
@@ -560,33 +597,7 @@ static int fec_init(struct eth_device *dev, bd_t* bd)
(unsigned)fec->rbd_base + size);
}
- /*
- * Set interrupt mask register
- */
- writel(0x00000000, &fec->eth->imask);
-
- /*
- * Clear FEC-Lite interrupt event register(IEVENT)
- */
- writel(0xffffffff, &fec->eth->ievent);
-
-
- /*
- * Set FEC-Lite receive control register(R_CNTRL):
- */
-
- /* Start with frame length = 1518, common for all modes. */
- rcntrl = PKTSIZE << FEC_RCNTRL_MAX_FL_SHIFT;
- if (fec->xcv_type == SEVENWIRE)
- rcntrl |= FEC_RCNTRL_FCE;
- else if (fec->xcv_type == RGMII)
- rcntrl |= FEC_RCNTRL_RGMII;
- else if (fec->xcv_type == RMII)
- rcntrl |= FEC_RCNTRL_RMII;
- else /* MII mode */
- rcntrl |= FEC_RCNTRL_FCE | FEC_RCNTRL_MII_MODE;
-
- writel(rcntrl, &fec->eth->r_cntrl);
+ fec_reg_setup(fec);
if (fec->xcv_type == MII10 || fec->xcv_type == MII100)
fec_mii_setspeed(fec);
@@ -676,7 +687,7 @@ static void fec_halt(struct eth_device *dev)
* @param[in] length Data count in bytes
* @return 0 on success
*/
-static int fec_send(struct eth_device *dev, volatile void *packet, int length)
+static int fec_send(struct eth_device *dev, void *packet, int length)
{
unsigned int status;
uint32_t size;
@@ -933,24 +944,7 @@ static int fec_probe(bd_t *bd, int dev_id, int phy_id, uint32_t base_addr)
udelay(10);
}
- /*
- * Set interrupt mask register
- */
- writel(0x00000000, &fec->eth->imask);
-
- /*
- * Clear FEC-Lite interrupt event register(IEVENT)
- */
- writel(0xffffffff, &fec->eth->ievent);
-
- /*
- * Set FEC-Lite receive control register(R_CNTRL):
- */
- /*
- * Frame length=1518; MII mode;
- */
- writel((PKTSIZE << FEC_RCNTRL_MAX_FL_SHIFT) | FEC_RCNTRL_FCE |
- FEC_RCNTRL_MII_MODE, &fec->eth->r_cntrl);
+ fec_reg_setup(fec);
fec_mii_setspeed(fec);
if (dev_id == -1) {
diff --git a/drivers/net/fm/eth.c b/drivers/net/fm/eth.c
index f7ed850c91..f34f4db6b6 100644
--- a/drivers/net/fm/eth.c
+++ b/drivers/net/fm/eth.c
@@ -420,7 +420,7 @@ static void fm_eth_halt(struct eth_device *dev)
phy_shutdown(fm_eth->phydev);
}
-static int fm_eth_send(struct eth_device *dev, volatile void *buf, int len)
+static int fm_eth_send(struct eth_device *dev, void *buf, int len)
{
struct fm_eth *fm_eth;
struct fm_port_global_pram *pram;
diff --git a/drivers/net/fm/fm.c b/drivers/net/fm/fm.c
index 0b8c33fb7a..49c74c278a 100644
--- a/drivers/net/fm/fm.c
+++ b/drivers/net/fm/fm.c
@@ -408,6 +408,8 @@ int fm_init_common(int index, struct ccsr_fman *reg)
/* flush cache after read */
flush_cache((ulong)addr, cnt * 512);
}
+#elif defined(CONFIG_SYS_QE_FMAN_FW_IN_REMOTE)
+ void *addr = (void *)CONFIG_SYS_QE_FMAN_FW_ADDR;
#endif
/* Upload the Fman microcode if it's present */
diff --git a/drivers/net/fsl_mcdmafec.c b/drivers/net/fsl_mcdmafec.c
index 5330dbc79f..63842cd466 100644
--- a/drivers/net/fsl_mcdmafec.c
+++ b/drivers/net/fsl_mcdmafec.c
@@ -116,7 +116,7 @@ struct fec_info_dma fec_info[] = {
#endif
};
-static int fec_send(struct eth_device *dev, volatile void *packet, int length);
+static int fec_send(struct eth_device *dev, void *packet, int length);
static int fec_recv(struct eth_device *dev);
static int fec_init(struct eth_device *dev, bd_t * bd);
static void fec_halt(struct eth_device *dev);
@@ -194,7 +194,7 @@ static void set_fec_duplex_speed(volatile fecdma_t * fecp, bd_t * bd,
}
}
-static int fec_send(struct eth_device *dev, volatile void *packet, int length)
+static int fec_send(struct eth_device *dev, void *packet, int length)
{
struct fec_info_dma *info = dev->priv;
cbd_t *pTbd, *pUsedTbd;
@@ -301,8 +301,7 @@ static int fec_recv(struct eth_device *dev)
frame_length = pRbd->cbd_datlen - 4;
/* Fill the buffer and pass it to upper layers */
- NetReceive((volatile uchar *)pRbd->cbd_bufaddr,
- frame_length);
+ NetReceive((uchar *)pRbd->cbd_bufaddr, frame_length);
len = frame_length;
}
diff --git a/drivers/net/ftgmac100.c b/drivers/net/ftgmac100.c
index 0af0c3450f..69ba57d3d0 100644
--- a/drivers/net/ftgmac100.c
+++ b/drivers/net/ftgmac100.c
@@ -480,8 +480,7 @@ static int ftgmac100_recv(struct eth_device *dev)
/*
* Send a data block via Ethernet
*/
-static int
-ftgmac100_send(struct eth_device *dev, void *packet, int length)
+static int ftgmac100_send(struct eth_device *dev, void *packet, int length)
{
struct ftgmac100 *ftgmac100 = (struct ftgmac100 *)dev->iobase;
struct ftgmac100_data *priv = dev->priv;
diff --git a/drivers/net/ftmac100.c b/drivers/net/ftmac100.c
index 94dc6d99ba..fdd3ec0ac2 100644
--- a/drivers/net/ftmac100.c
+++ b/drivers/net/ftmac100.c
@@ -190,8 +190,7 @@ static int ftmac100_recv (struct eth_device *dev)
/*
* Send a data block via Ethernet
*/
-static int
-ftmac100_send (struct eth_device *dev, volatile void *packet, int length)
+static int ftmac100_send(struct eth_device *dev, void *packet, int length)
{
struct ftmac100 *ftmac100 = (struct ftmac100 *)dev->iobase;
struct ftmac100_data *priv = dev->priv;
diff --git a/drivers/net/greth.c b/drivers/net/greth.c
index 2aab52f378..08206c8711 100644
--- a/drivers/net/greth.c
+++ b/drivers/net/greth.c
@@ -403,7 +403,7 @@ void greth_halt(struct eth_device *dev)
}
}
-int greth_send(struct eth_device *dev, volatile void *eth_data, int data_length)
+int greth_send(struct eth_device *dev, void *eth_data, int data_length)
{
greth_priv *greth = dev->priv;
greth_regs *regs = greth->regs;
diff --git a/drivers/net/inca-ip_sw.c b/drivers/net/inca-ip_sw.c
index c45389e0cd..f0f62deaf8 100644
--- a/drivers/net/inca-ip_sw.c
+++ b/drivers/net/inca-ip_sw.c
@@ -158,7 +158,7 @@ static int initialized = 0;
static int inca_switch_init(struct eth_device *dev, bd_t * bis);
-static int inca_switch_send(struct eth_device *dev, volatile void *packet, int length);
+static int inca_switch_send(struct eth_device *dev, void *packet, int length);
static int inca_switch_recv(struct eth_device *dev);
static void inca_switch_halt(struct eth_device *dev);
static void inca_init_switch_chip(void);
@@ -334,7 +334,7 @@ static int inca_switch_init(struct eth_device *dev, bd_t * bis)
}
-static int inca_switch_send(struct eth_device *dev, volatile void *packet, int length)
+static int inca_switch_send(struct eth_device *dev, void *packet, int length)
{
int i;
int res = -1;
diff --git a/drivers/net/ks8695eth.c b/drivers/net/ks8695eth.c
index 8e988d1423..b4904b68e5 100644
--- a/drivers/net/ks8695eth.c
+++ b/drivers/net/ks8695eth.c
@@ -190,8 +190,7 @@ static int ks8695_eth_recv(struct eth_device *dev)
/****************************************************************************/
-static int ks8695_eth_send(struct eth_device *dev, volatile void *packet,
- int len)
+static int ks8695_eth_send(struct eth_device *dev, void *packet, int len)
{
volatile struct ks8695_txdesc *dp;
static int next = 0;
diff --git a/drivers/net/lan91c96.c b/drivers/net/lan91c96.c
index 24b28da249..11d350eb8d 100644
--- a/drivers/net/lan91c96.c
+++ b/drivers/net/lan91c96.c
@@ -314,7 +314,7 @@ static void smc_shutdown(struct eth_device *dev)
* Enable the transmit interrupt, so I know if it failed
* Free the kernel data if I actually sent it.
*/
-static int smc_send_packet(struct eth_device *dev, volatile void *packet,
+static int smc_send_packet(struct eth_device *dev, void *packet,
int packet_length)
{
byte packet_no;
@@ -700,7 +700,7 @@ static int lan91c96_recv(struct eth_device *dev)
return smc_rcv(dev);
}
-static int lan91c96_send(struct eth_device *dev, volatile void *packet,
+static int lan91c96_send(struct eth_device *dev, void *packet,
int length)
{
return smc_send_packet(dev, packet, length);
diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index c63eea966a..45784678ba 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -197,8 +197,7 @@ int macb_miiphy_write(const char *devname, u8 phy_adr, u8 reg, u16 value)
#if defined(CONFIG_CMD_NET)
-static int macb_send(struct eth_device *netdev, volatile void *packet,
- int length)
+static int macb_send(struct eth_device *netdev, void *packet, int length)
{
struct macb_device *macb = to_macb(netdev);
unsigned long paddr, ctrl;
diff --git a/drivers/net/mcffec.c b/drivers/net/mcffec.c
index a08ff278bf..ed7459c647 100644
--- a/drivers/net/mcffec.c
+++ b/drivers/net/mcffec.c
@@ -95,7 +95,6 @@ struct fec_info_s fec_info[] = {
#endif
};
-int fec_send(struct eth_device *dev, volatile void *packet, int length);
int fec_recv(struct eth_device *dev);
int fec_init(struct eth_device *dev, bd_t * bd);
void fec_halt(struct eth_device *dev);
@@ -134,7 +133,7 @@ void setFecDuplexSpeed(volatile fec_t * fecp, bd_t * bd, int dup_spd)
}
}
-int fec_send(struct eth_device *dev, volatile void *packet, int length)
+static int fec_send(struct eth_device *dev, void *packet, int length)
{
struct fec_info_s *info = dev->priv;
volatile fec_t *fecp = (fec_t *) (info->iobase);
diff --git a/drivers/net/mpc512x_fec.c b/drivers/net/mpc512x_fec.c
index 0d5efd56ea..ad57d566be 100644
--- a/drivers/net/mpc512x_fec.c
+++ b/drivers/net/mpc512x_fec.c
@@ -452,8 +452,8 @@ static void mpc512x_fec_halt (struct eth_device *dev)
/********************************************************************/
-static int mpc512x_fec_send (struct eth_device *dev, volatile void *eth_data,
- int data_length)
+static int mpc512x_fec_send(struct eth_device *dev, void *eth_data,
+ int data_length)
{
/*
* This routine transmits one frame. This routine only accepts
diff --git a/drivers/net/mpc5xxx_fec.c b/drivers/net/mpc5xxx_fec.c
index bc8c9222dc..3d180db749 100644
--- a/drivers/net/mpc5xxx_fec.c
+++ b/drivers/net/mpc5xxx_fec.c
@@ -707,7 +707,7 @@ static void rfifo_print(char *devname, mpc5xxx_fec_priv *fec)
/********************************************************************/
-static int mpc5xxx_fec_send(struct eth_device *dev, volatile void *eth_data,
+static int mpc5xxx_fec_send(struct eth_device *dev, void *eth_data,
int data_length)
{
/*
diff --git a/drivers/net/mvgbe.c b/drivers/net/mvgbe.c
index dcc1547c1c..47bf27c8ba 100644
--- a/drivers/net/mvgbe.c
+++ b/drivers/net/mvgbe.c
@@ -525,8 +525,7 @@ static int mvgbe_write_hwaddr(struct eth_device *dev)
return 0;
}
-static int mvgbe_send(struct eth_device *dev, void *dataptr,
- int datasize)
+static int mvgbe_send(struct eth_device *dev, void *dataptr, int datasize)
{
struct mvgbe_device *dmvgbe = to_mvgbe(dev);
struct mvgbe_registers *regs = dmvgbe->regs;
diff --git a/drivers/net/natsemi.c b/drivers/net/natsemi.c
index 9386adf87f..04743bd2b3 100644
--- a/drivers/net/natsemi.c
+++ b/drivers/net/natsemi.c
@@ -237,8 +237,7 @@ static void natsemi_init_txd(struct eth_device *dev);
static void natsemi_init_rxd(struct eth_device *dev);
static void natsemi_set_rx_mode(struct eth_device *dev);
static void natsemi_check_duplex(struct eth_device *dev);
-static int natsemi_send(struct eth_device *dev, volatile void *packet,
- int length);
+static int natsemi_send(struct eth_device *dev, void *packet, int length);
static int natsemi_poll(struct eth_device *dev);
static void natsemi_disable(struct eth_device *dev);
@@ -754,8 +753,7 @@ natsemi_check_duplex(struct eth_device *dev)
* Description: transmits a packet and waits for completion or timeout.
*
* Returns: void. */
-static int
-natsemi_send(struct eth_device *dev, volatile void *packet, int length)
+static int natsemi_send(struct eth_device *dev, void *packet, int length)
{
u32 i, status = 0;
u32 tx_status = 0;
diff --git a/drivers/net/ne2000_base.c b/drivers/net/ne2000_base.c
index 8275091871..ef35922042 100644
--- a/drivers/net/ne2000_base.c
+++ b/drivers/net/ne2000_base.c
@@ -749,7 +749,7 @@ static int ne2k_recv(struct eth_device *dev)
return 1;
}
-static int ne2k_send(struct eth_device *dev, volatile void *packet, int length)
+static int ne2k_send(struct eth_device *dev, void *packet, int length)
{
int tmo;
diff --git a/drivers/net/netarm_eth.c b/drivers/net/netarm_eth.c
index f54817e58d..325f16c3a8 100644
--- a/drivers/net/netarm_eth.c
+++ b/drivers/net/netarm_eth.c
@@ -300,7 +300,7 @@ extern int eth_rx (void)
}
/* Send a data block via Ethernet. */
-extern int eth_send (volatile void *packet, int length)
+extern int eth_send(void *packet, int length)
{
int i, length32;
char *pa;
diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
index 56ba64fbb0..14243b8a92 100644
--- a/drivers/net/netconsole.c
+++ b/drivers/net/netconsole.c
@@ -29,81 +29,84 @@
DECLARE_GLOBAL_DATA_PTR;
static char input_buffer[512];
-static int input_size = 0; /* char count in input buffer */
-static int input_offset = 0; /* offset to valid chars in input buffer */
-static int input_recursion = 0;
-static int output_recursion = 0;
+static int input_size; /* char count in input buffer */
+static int input_offset; /* offset to valid chars in input buffer */
+static int input_recursion;
+static int output_recursion;
static int net_timeout;
-static uchar nc_ether[6]; /* server enet address */
-static IPaddr_t nc_ip; /* server ip */
-static short nc_port; /* source/target port */
-static const char *output_packet; /* used by first send udp */
-static int output_packet_len = 0;
+static uchar nc_ether[6]; /* server enet address */
+static IPaddr_t nc_ip; /* server ip */
+static short nc_port; /* source/target port */
+static const char *output_packet; /* used by first send udp */
+static int output_packet_len;
static void nc_wait_arp_handler(uchar *pkt, unsigned dest,
IPaddr_t sip, unsigned src,
unsigned len)
{
- NetState = NETLOOP_SUCCESS; /* got arp reply - quit net loop */
+ net_set_state(NETLOOP_SUCCESS); /* got arp reply - quit net loop */
}
static void nc_handler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
unsigned len)
{
if (input_size)
- NetState = NETLOOP_SUCCESS; /* got input - quit net loop */
+ net_set_state(NETLOOP_SUCCESS); /* got input - quit net loop */
}
-static void nc_timeout (void)
+static void nc_timeout(void)
{
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
}
-void NcStart (void)
+void NcStart(void)
{
- if (!output_packet_len || memcmp (nc_ether, NetEtherNullAddr, 6)) {
+ if (!output_packet_len || memcmp(nc_ether, NetEtherNullAddr, 6)) {
/* going to check for input packet */
- NetSetHandler (nc_handler);
- NetSetTimeout (net_timeout, nc_timeout);
+ net_set_udp_handler(nc_handler);
+ NetSetTimeout(net_timeout, nc_timeout);
} else {
/* send arp request */
uchar *pkt;
- NetSetHandler (nc_wait_arp_handler);
- pkt = (uchar *) NetTxPacket + NetEthHdrSize () + IP_HDR_SIZE;
- memcpy (pkt, output_packet, output_packet_len);
- NetSendUDPPacket (nc_ether, nc_ip, nc_port, nc_port, output_packet_len);
+ net_set_arp_handler(nc_wait_arp_handler);
+ pkt = (uchar *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE;
+ memcpy(pkt, output_packet, output_packet_len);
+ NetSendUDPPacket(nc_ether, nc_ip, nc_port, nc_port,
+ output_packet_len);
}
}
-int nc_input_packet (uchar * pkt, unsigned dest, unsigned src, unsigned len)
+int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len)
{
int end, chunk;
if (dest != nc_port || !len)
- return 0; /* not for us */
+ return 0; /* not for us */
- if (input_size == sizeof input_buffer)
- return 1; /* no space */
- if (len > sizeof input_buffer - input_size)
- len = sizeof input_buffer - input_size;
+ debug_cond(DEBUG_DEV_PKT, "input: \"%*.*s\"\n", len, len, pkt);
+
+ if (input_size == sizeof(input_buffer))
+ return 1; /* no space */
+ if (len > sizeof(input_buffer) - input_size)
+ len = sizeof(input_buffer) - input_size;
end = input_offset + input_size;
- if (end > sizeof input_buffer)
- end -= sizeof input_buffer;
+ if (end > sizeof(input_buffer))
+ end -= sizeof(input_buffer);
chunk = len;
- if (end + len > sizeof input_buffer) {
- chunk = sizeof input_buffer - end;
+ if (end + len > sizeof(input_buffer)) {
+ chunk = sizeof(input_buffer) - end;
memcpy(input_buffer, pkt + chunk, len - chunk);
}
- memcpy (input_buffer + end, pkt, chunk);
+ memcpy(input_buffer + end, pkt, chunk);
input_size += len;
return 1;
}
-static void nc_send_packet (const char *buf, int len)
+static void nc_send_packet(const char *buf, int len)
{
struct eth_device *eth;
int inited = 0;
@@ -111,33 +114,35 @@ static void nc_send_packet (const char *buf, int len)
uchar *ether;
IPaddr_t ip;
- if ((eth = eth_get_dev ()) == NULL) {
+ debug_cond(DEBUG_DEV_PKT, "output: \"%*.*s\"\n", len, len, buf);
+
+ eth = eth_get_dev();
+ if (eth == NULL)
return;
- }
- if (!memcmp (nc_ether, NetEtherNullAddr, 6)) {
+ if (!memcmp(nc_ether, NetEtherNullAddr, 6)) {
if (eth->state == ETH_STATE_ACTIVE)
return; /* inside net loop */
output_packet = buf;
output_packet_len = len;
- NetLoop (NETCONS); /* wait for arp reply and send packet */
+ NetLoop(NETCONS); /* wait for arp reply and send packet */
output_packet_len = 0;
return;
}
if (eth->state != ETH_STATE_ACTIVE) {
- if (eth_init (gd->bd) < 0)
+ if (eth_init(gd->bd) < 0)
return;
inited = 1;
}
- pkt = (uchar *) NetTxPacket + NetEthHdrSize () + IP_HDR_SIZE;
- memcpy (pkt, buf, len);
+ pkt = (uchar *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE;
+ memcpy(pkt, buf, len);
ether = nc_ether;
ip = nc_ip;
- NetSendUDPPacket (ether, ip, nc_port, nc_port, len);
+ NetSendUDPPacket(ether, ip, nc_port, nc_port, len);
if (inited)
- eth_halt ();
+ eth_halt();
}
static int nc_start(void)
@@ -146,26 +151,33 @@ static int nc_start(void)
nc_port = 6666; /* default port */
- if (getenv ("ncip")) {
+ if (getenv("ncip")) {
char *p;
- nc_ip = getenv_IPaddr ("ncip");
+ nc_ip = getenv_IPaddr("ncip");
if (!nc_ip)
return -1; /* ncip is 0.0.0.0 */
- if ((p = strchr (getenv ("ncip"), ':')) != NULL)
- nc_port = simple_strtoul (p + 1, NULL, 10);
+ p = strchr(getenv("ncip"), ':');
+ if (p != NULL)
+ nc_port = simple_strtoul(p + 1, NULL, 10);
} else
nc_ip = ~0; /* ncip is not set */
- our_ip = getenv_IPaddr ("ipaddr");
- netmask = getenv_IPaddr ("netmask");
+ our_ip = getenv_IPaddr("ipaddr");
+ netmask = getenv_IPaddr("netmask");
if (nc_ip == ~0 || /* 255.255.255.255 */
((netmask & our_ip) == (netmask & nc_ip) && /* on the same net */
- (netmask | nc_ip) == ~0)) /* broadcast to our net */
- memset (nc_ether, 0xff, sizeof nc_ether);
+ (netmask | nc_ip) == ~0)) /* broadcast to our net */
+ memset(nc_ether, 0xff, sizeof(nc_ether));
else
- memset (nc_ether, 0, sizeof nc_ether); /* force arp request */
+ memset(nc_ether, 0, sizeof(nc_ether)); /* force arp request */
+
+ /*
+ * Initialize the static IP settings and buffer pointers
+ * incase we call NetSendUDPPacket before NetLoop
+ */
+ net_init();
return 0;
}
@@ -176,7 +188,7 @@ static void nc_putc(char c)
return;
output_recursion = 1;
- nc_send_packet (&c, 1);
+ nc_send_packet(&c, 1);
output_recursion = 0;
}
@@ -208,14 +220,14 @@ static int nc_getc(void)
net_timeout = 0; /* no timeout */
while (!input_size)
- NetLoop (NETCONS);
+ NetLoop(NETCONS);
input_recursion = 0;
c = input_buffer[input_offset++];
- if (input_offset >= sizeof input_buffer)
- input_offset -= sizeof input_buffer;
+ if (input_offset >= sizeof(input_buffer))
+ input_offset -= sizeof(input_buffer);
input_size--;
return c;
@@ -231,28 +243,28 @@ static int nc_tstc(void)
if (input_size)
return 1;
- eth = eth_get_dev ();
+ eth = eth_get_dev();
if (eth && eth->state == ETH_STATE_ACTIVE)
return 0; /* inside net loop */
input_recursion = 1;
net_timeout = 1;
- NetLoop (NETCONS); /* kind of poll */
+ NetLoop(NETCONS); /* kind of poll */
input_recursion = 0;
return input_size != 0;
}
-int drv_nc_init (void)
+int drv_nc_init(void)
{
struct stdio_dev dev;
int rc;
- memset (&dev, 0, sizeof (dev));
+ memset(&dev, 0, sizeof(dev));
- strcpy (dev.name, "nc");
+ strcpy(dev.name, "nc");
dev.flags = DEV_FLAGS_OUTPUT | DEV_FLAGS_INPUT | DEV_FLAGS_SYSTEM;
dev.start = nc_start;
dev.putc = nc_putc;
@@ -260,7 +272,7 @@ int drv_nc_init (void)
dev.getc = nc_getc;
dev.tstc = nc_tstc;
- rc = stdio_register (&dev);
+ rc = stdio_register(&dev);
return (rc == 0) ? 1 : rc;
}
diff --git a/drivers/net/ns8382x.c b/drivers/net/ns8382x.c
index 11863feba3..cfe1f349db 100644
--- a/drivers/net/ns8382x.c
+++ b/drivers/net/ns8382x.c
@@ -258,8 +258,7 @@ static void ns8382x_init_txd(struct eth_device *dev);
static void ns8382x_init_rxd(struct eth_device *dev);
static void ns8382x_set_rx_mode(struct eth_device *dev);
static void ns8382x_check_duplex(struct eth_device *dev);
-static int ns8382x_send(struct eth_device *dev, volatile void *packet,
- int length);
+static int ns8382x_send(struct eth_device *dev, void *packet, int length);
static int ns8382x_poll(struct eth_device *dev);
static void ns8382x_disable(struct eth_device *dev);
@@ -735,8 +734,7 @@ ns8382x_check_duplex(struct eth_device *dev)
/* Function: ns8382x_send
* Description: transmits a packet and waits for completion or timeout.
* Returns: void. */
-static int
-ns8382x_send(struct eth_device *dev, volatile void *packet, int length)
+static int ns8382x_send(struct eth_device *dev, void *packet, int length)
{
u32 i, status = 0;
vu_long tx_stat = 0;
diff --git a/drivers/net/pcnet.c b/drivers/net/pcnet.c
index 45066c8fea..c028a44a9e 100644
--- a/drivers/net/pcnet.c
+++ b/drivers/net/pcnet.c
@@ -141,8 +141,7 @@ static int pcnet_check (struct eth_device *dev)
}
static int pcnet_init (struct eth_device *dev, bd_t * bis);
-static int pcnet_send (struct eth_device *dev, volatile void *packet,
- int length);
+static int pcnet_send(struct eth_device *dev, void *packet, int length);
static int pcnet_recv (struct eth_device *dev);
static void pcnet_halt (struct eth_device *dev);
static int pcnet_probe (struct eth_device *dev, bd_t * bis, int dev_num);
@@ -415,8 +414,7 @@ static int pcnet_init (struct eth_device *dev, bd_t * bis)
return 0;
}
-static int pcnet_send (struct eth_device *dev, volatile void *packet,
- int pkt_len)
+static int pcnet_send(struct eth_device *dev, void *packet, int pkt_len)
{
int i, status;
struct pcnet_tx_head *entry = &lp->tx_ring[lp->cur_tx];
diff --git a/drivers/net/plb2800_eth.c b/drivers/net/plb2800_eth.c
index d799c73823..93782c23ff 100644
--- a/drivers/net/plb2800_eth.c
+++ b/drivers/net/plb2800_eth.c
@@ -82,8 +82,7 @@ typedef volatile struct {
static int plb2800_eth_init(struct eth_device *dev, bd_t * bis);
-static int plb2800_eth_send(struct eth_device *dev, volatile void *packet,
- int length);
+static int plb2800_eth_send(struct eth_device *dev, void *packet, int length);
static int plb2800_eth_recv(struct eth_device *dev);
static void plb2800_eth_halt(struct eth_device *dev);
@@ -162,8 +161,7 @@ static int plb2800_eth_init(struct eth_device *dev, bd_t * bis)
}
-static int plb2800_eth_send(struct eth_device *dev, volatile void *packet,
- int length)
+static int plb2800_eth_send(struct eth_device *dev, void *packet, int length)
{
int i;
int res = -1;
diff --git a/drivers/net/rtl8139.c b/drivers/net/rtl8139.c
index e3feef849c..4186699ff9 100644
--- a/drivers/net/rtl8139.c
+++ b/drivers/net/rtl8139.c
@@ -184,7 +184,7 @@ static unsigned char rx_ring[RX_BUF_LEN+16] __attribute__((aligned(4)));
static int rtl8139_probe(struct eth_device *dev, bd_t *bis);
static int read_eeprom(int location, int addr_len);
static void rtl_reset(struct eth_device *dev);
-static int rtl_transmit(struct eth_device *dev, volatile void *packet, int length);
+static int rtl_transmit(struct eth_device *dev, void *packet, int length);
static int rtl_poll(struct eth_device *dev);
static void rtl_disable(struct eth_device *dev);
#ifdef CONFIG_MCAST_TFTP/* This driver already accepts all b/mcast */
@@ -407,7 +407,7 @@ static void rtl_reset(struct eth_device *dev)
outw(0, ioaddr + IntrMask);
}
-static int rtl_transmit(struct eth_device *dev, volatile void *packet, int length)
+static int rtl_transmit(struct eth_device *dev, void *packet, int length)
{
unsigned int status;
unsigned long txstatus;
diff --git a/drivers/net/rtl8169.c b/drivers/net/rtl8169.c
index 1ad13bddd5..9864fd7b5c 100644
--- a/drivers/net/rtl8169.c
+++ b/drivers/net/rtl8169.c
@@ -464,7 +464,7 @@ static int rtl_recv(struct eth_device *dev)
/**************************************************************************
SEND - Transmit a frame
***************************************************************************/
-static int rtl_send(struct eth_device *dev, volatile void *packet, int length)
+static int rtl_send(struct eth_device *dev, void *packet, int length)
{
/* send the packet to destination */
diff --git a/drivers/net/sh_eth.c b/drivers/net/sh_eth.c
index 8d3dac20af..bb57e4d53a 100644
--- a/drivers/net/sh_eth.c
+++ b/drivers/net/sh_eth.c
@@ -46,7 +46,7 @@
#define TIMEOUT_CNT 1000
-int sh_eth_send(struct eth_device *dev, volatile void *packet, int len)
+int sh_eth_send(struct eth_device *dev, void *packet, int len)
{
struct sh_eth_dev *eth = dev->priv;
int port = eth->port, ret = 0, timeout;
@@ -59,7 +59,7 @@ int sh_eth_send(struct eth_device *dev, volatile void *packet, int len)
}
/* packet must be a 4 byte boundary */
- if ((int)packet & (4 - 1)) {
+ if ((int)packet & 3) {
printf(SHETHER_NAME ": %s: packet not 4 byte alligned\n", __func__);
ret = -EFAULT;
goto err;
@@ -103,15 +103,15 @@ int sh_eth_recv(struct eth_device *dev)
struct sh_eth_dev *eth = dev->priv;
int port = eth->port, len = 0;
struct sh_eth_info *port_info = &eth->port_info[port];
- volatile u8 *packet;
+ uchar *packet;
/* Check if the rx descriptor is ready */
if (!(port_info->rx_desc_cur->rd0 & RD_RACT)) {
/* Check for errors */
if (!(port_info->rx_desc_cur->rd0 & RD_RFE)) {
len = port_info->rx_desc_cur->rd1 & 0xffff;
- packet = (volatile u8 *)
- ADDR_TO_P2(port_info->rx_desc_cur->rd2);
+ packet = (uchar *)
+ ADDR_TO_P2(port_info->rx_desc_cur->rd2);
NetReceive(packet, len);
}
@@ -138,7 +138,7 @@ int sh_eth_recv(struct eth_device *dev)
static int sh_eth_reset(struct sh_eth_dev *eth)
{
int port = eth->port;
-#if defined(CONFIG_CPU_SH7763)
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
int ret = 0, i;
/* Start e-dmac transmitter and receiver */
@@ -208,7 +208,7 @@ static int sh_eth_tx_desc_init(struct sh_eth_dev *eth)
/* Point the controller to the tx descriptor list. Must use physical
addresses */
outl(ADDR_TO_PHY(port_info->tx_desc_base), TDLAR(port));
-#if defined(CONFIG_CPU_SH7763)
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
outl(ADDR_TO_PHY(port_info->tx_desc_base), TDFAR(port));
outl(ADDR_TO_PHY(cur_tx_desc), TDFXR(port));
outl(0x01, TDFFR(port));/* Last discriptor bit */
@@ -276,7 +276,7 @@ static int sh_eth_rx_desc_init(struct sh_eth_dev *eth)
/* Point the controller to the rx descriptor list */
outl(ADDR_TO_PHY(port_info->rx_desc_base), RDLAR(port));
-#if defined(CONFIG_CPU_SH7763)
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
outl(ADDR_TO_PHY(port_info->rx_desc_base), RDFAR(port));
outl(ADDR_TO_PHY(cur_rx_desc), RDFXR(port));
outl(RDFFR_RDLF, RDFFR(port));
@@ -346,8 +346,9 @@ static int sh_eth_phy_config(struct sh_eth_dev *eth)
struct eth_device *dev = port_info->dev;
struct phy_device *phydev;
- phydev = phy_connect(miiphy_get_dev_by_name(dev->name),
- port_info->phy_addr, dev, PHY_INTERFACE_MODE_MII);
+ phydev = phy_connect(
+ miiphy_get_dev_by_name(dev->name),
+ port_info->phy_addr, dev, CONFIG_SH_ETHER_PHY_MODE);
port_info->phydev = phydev;
phy_config(phydev);
@@ -398,12 +399,15 @@ static int sh_eth_config(struct sh_eth_dev *eth, bd_t *bd)
outl(APR_AP, APR(port));
outl(MPR_MP, MPR(port));
#endif
-#if defined(CONFIG_CPU_SH7763)
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
outl(TPAUSER_TPAUSE, TPAUSER(port));
#elif defined(CONFIG_CPU_SH7757)
outl(TPAUSER_UNLIMITED, TPAUSER(port));
#endif
+#if defined(CONFIG_CPU_SH7734)
+ outl(CONFIG_SH_ETHER_SH7734_MII, RMII_MII(port));
+#endif
/* Configure phy */
ret = sh_eth_phy_config(eth);
if (ret) {
@@ -418,7 +422,7 @@ static int sh_eth_config(struct sh_eth_dev *eth, bd_t *bd)
/* Set the transfer speed */
if (phy->speed == 100) {
printf(SHETHER_NAME ": 100Base/");
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
outl(GECMR_100B, GECMR(port));
#elif defined(CONFIG_CPU_SH7757)
outl(1, RTRATE(port));
@@ -427,12 +431,18 @@ static int sh_eth_config(struct sh_eth_dev *eth, bd_t *bd)
#endif
} else if (phy->speed == 10) {
printf(SHETHER_NAME ": 10Base/");
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
outl(GECMR_10B, GECMR(port));
#elif defined(CONFIG_CPU_SH7757)
outl(0, RTRATE(port));
#endif
}
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
+ else if (phy->speed == 1000) {
+ printf(SHETHER_NAME ": 1000Base/");
+ outl(GECMR_1000B, GECMR(port));
+ }
+#endif
/* Check if full duplex mode is supported by the phy */
if (phy->duplex) {
diff --git a/drivers/net/sh_eth.h b/drivers/net/sh_eth.h
index 27fde05bd6..a1ba68b1b4 100644
--- a/drivers/net/sh_eth.h
+++ b/drivers/net/sh_eth.h
@@ -188,13 +188,52 @@ struct sh_eth_dev {
#define TPAUSER(port) (BASE_IO_ADDR + 0x0164)
#define MAHR(port) (BASE_IO_ADDR + 0x01c0)
#define MALR(port) (BASE_IO_ADDR + 0x01c8)
+
+#elif defined(CONFIG_CPU_SH7734)
+#define BASE_IO_ADDR 0xFEE00000
+
+#define EDSR(port) (BASE_IO_ADDR)
+
+#define TDLAR(port) (BASE_IO_ADDR + 0x0010)
+#define TDFAR(port) (BASE_IO_ADDR + 0x0014)
+#define TDFXR(port) (BASE_IO_ADDR + 0x0018)
+#define TDFFR(port) (BASE_IO_ADDR + 0x001c)
+#define RDLAR(port) (BASE_IO_ADDR + 0x0030)
+#define RDFAR(port) (BASE_IO_ADDR + 0x0034)
+#define RDFXR(port) (BASE_IO_ADDR + 0x0038)
+#define RDFFR(port) (BASE_IO_ADDR + 0x003c)
+
+#define EDMR(port) (BASE_IO_ADDR + 0x0400)
+#define EDTRR(port) (BASE_IO_ADDR + 0x0408)
+#define EDRRR(port) (BASE_IO_ADDR + 0x0410)
+#define EESR(port) (BASE_IO_ADDR + 0x0428)
+#define EESIPR(port) (BASE_IO_ADDR + 0x0430)
+#define TRSCER(port) (BASE_IO_ADDR + 0x0438)
+#define TFTR(port) (BASE_IO_ADDR + 0x0448)
+#define FDR(port) (BASE_IO_ADDR + 0x0450)
+#define RMCR(port) (BASE_IO_ADDR + 0x0458)
+#define RPADIR(port) (BASE_IO_ADDR + 0x0460)
+#define FCFTR(port) (BASE_IO_ADDR + 0x0468)
+#define ECMR(port) (BASE_IO_ADDR + 0x0500)
+#define RFLR(port) (BASE_IO_ADDR + 0x0508)
+#define ECSIPR(port) (BASE_IO_ADDR + 0x0518)
+#define PIR(port) (BASE_IO_ADDR + 0x0520)
+#define PIPR(port) (BASE_IO_ADDR + 0x052c)
+#define APR(port) (BASE_IO_ADDR + 0x0554)
+#define MPR(port) (BASE_IO_ADDR + 0x0558)
+#define TPAUSER(port) (BASE_IO_ADDR + 0x0564)
+#define GECMR(port) (BASE_IO_ADDR + 0x05b0)
+#define MAHR(port) (BASE_IO_ADDR + 0x05C0)
+#define MALR(port) (BASE_IO_ADDR + 0x05C8)
+#define RMII_MII(port) (BASE_IO_ADDR + 0x0790)
+
#endif
/*
* Register's bits
* Copy from Linux driver source code
*/
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
/* EDSR */
enum EDSR_BIT {
EDSR_ENT = 0x01, EDSR_ENR = 0x02,
@@ -205,11 +244,11 @@ enum EDSR_BIT {
/* EDMR */
enum DMAC_M_BIT {
EDMR_DL1 = 0x20, EDMR_DL0 = 0x10,
-#ifdef CONFIG_CPU_SH7763
- EDMR_SRST = 0x03,
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
+ EDMR_SRST = 0x03, /* Receive/Send reset */
EMDR_DESC_R = 0x30, /* Descriptor reserve size */
EDMR_EL = 0x40, /* Litte endian */
-#elif defined(CONFIG_CPU_SH7757) ||defined (CONFIG_CPU_SH7724)
+#elif defined(CONFIG_CPU_SH7757) || defined(CONFIG_CPU_SH7724)
EDMR_SRST = 0x01,
EMDR_DESC_R = 0x30, /* Descriptor reserve size */
EDMR_EL = 0x40, /* Litte endian */
@@ -223,7 +262,7 @@ enum DMAC_M_BIT {
/* EDTRR */
enum DMAC_T_BIT {
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
EDTRR_TRNS = 0x03,
#else
EDTRR_TRNS = 0x01,
@@ -262,7 +301,8 @@ enum PHY_STATUS_BIT { PHY_ST_LINK = 0x01, };
/* EESR */
enum EESR_BIT {
-#ifndef CONFIG_CPU_SH7763
+
+#if defined(CONFIG_CPU_SH7724) || defined(CONFIG_CPU_SH7757)
EESR_TWB = 0x40000000,
#else
EESR_TWB = 0xC0000000,
@@ -272,14 +312,14 @@ enum EESR_BIT {
#endif
EESR_TABT = 0x04000000,
EESR_RABT = 0x02000000, EESR_RFRMER = 0x01000000,
-#ifndef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7724) || defined(CONFIG_CPU_SH7757)
EESR_ADE = 0x00800000,
#endif
EESR_ECI = 0x00400000,
EESR_FTC = 0x00200000, EESR_TDE = 0x00100000,
EESR_TFE = 0x00080000, EESR_FRC = 0x00040000,
EESR_RDE = 0x00020000, EESR_RFE = 0x00010000,
-#ifndef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7724) && !defined(CONFIG_CPU_SH7757)
EESR_CND = 0x00000800,
#endif
EESR_DLC = 0x00000400,
@@ -291,7 +331,7 @@ enum EESR_BIT {
};
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
# define TX_CHECK (EESR_TC1 | EESR_FTC)
# define EESR_ERR_CHECK (EESR_TWB | EESR_TABT | EESR_RABT | EESR_RDE \
| EESR_RFRMER | EESR_TFE | EESR_TDE | EESR_ECI)
@@ -352,7 +392,7 @@ enum FCFTR_BIT {
/* Transfer descriptor bit */
enum TD_STS_BIT {
#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7757) \
- || defined(CONFIG_CPU_SH7724)
+ || defined(CONFIG_CPU_SH7724) || defined(CONFIG_CPU_SH7734)
TD_TACT = 0x80000000,
#else
TD_TACT = 0x7fffffff,
@@ -368,7 +408,7 @@ enum TD_STS_BIT {
enum RECV_RST_BIT { RMCR_RST = 0x01, };
/* ECMR */
enum FELIC_MODE_BIT {
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
ECMR_TRCCM=0x04000000, ECMR_RCSC= 0x00800000, ECMR_DPAD= 0x00200000,
ECMR_RZPF = 0x00100000,
#endif
@@ -383,7 +423,7 @@ enum FELIC_MODE_BIT {
};
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
#define ECMR_CHG_DM (ECMR_TRCCM | ECMR_RZPF | ECMR_ZPF | ECMR_PFR | ECMR_RXF | \
ECMR_TXF | ECMR_MCT)
#elif CONFIG_CPU_SH7757
@@ -396,14 +436,14 @@ enum FELIC_MODE_BIT {
/* ECSR */
enum ECSR_STATUS_BIT {
-#ifndef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7724) || defined(CONFIG_CPU_SH7757)
ECSR_BRCRX = 0x20, ECSR_PSRTO = 0x10,
#endif
ECSR_LCHNG = 0x04,
ECSR_MPD = 0x02, ECSR_ICD = 0x01,
};
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
# define ECSR_INIT (ECSR_ICD | ECSIPR_MPDIP)
#else
# define ECSR_INIT (ECSR_BRCRX | ECSR_PSRTO | \
@@ -412,14 +452,20 @@ enum ECSR_STATUS_BIT {
/* ECSIPR */
enum ECSIPR_STATUS_MASK_BIT {
-#ifndef CONFIG_CPU_SH7763
- ECSIPR_BRCRXIP = 0x20, ECSIPR_PSRTOIP = 0x10,
-#endif
+#if defined(CONFIG_CPU_SH7724)
+ ECSIPR_PSRTOIP = 0x10,
+ ECSIPR_LCHNGIP = 0x04,
+ ECSIPR_ICDIP = 0x01,
+#elif defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
+ ECSIPR_PSRTOIP = 0x10,
+ ECSIPR_PHYIP = 0x08,
ECSIPR_LCHNGIP = 0x04,
- ECSIPR_MPDIP = 0x02, ECSIPR_ICDIP = 0x01,
+ ECSIPR_MPDIP = 0x02,
+ ECSIPR_ICDIP = 0x01,
+#endif
};
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
# define ECSIPR_INIT (ECSIPR_LCHNGIP | ECSIPR_ICDIP | ECSIPR_MPDIP)
#else
# define ECSIPR_INIT (ECSIPR_BRCRXIP | ECSIPR_PSRTOIP | ECSIPR_LCHNGIP | \
@@ -458,7 +504,7 @@ enum RPADIR_BIT {
RPADIR_PADR = 0x0003f,
};
-#ifdef CONFIG_CPU_SH7763
+#if defined(CONFIG_CPU_SH7763) || defined(CONFIG_CPU_SH7734)
# define RPADIR_INIT (0x00)
#else
# define RPADIR_INIT (RPADIR_PADS1)
diff --git a/drivers/net/smc91111.c b/drivers/net/smc91111.c
index 5cfef4dd7b..6dc7ad52e4 100644
--- a/drivers/net/smc91111.c
+++ b/drivers/net/smc91111.c
@@ -426,8 +426,7 @@ static void smc_halt(struct eth_device *dev)
. Enable the transmit interrupt, so I know if it failed
. Free the kernel data if I actually sent it.
*/
-static int smc_send(struct eth_device *dev, volatile void *packet,
- int packet_length)
+static int smc_send(struct eth_device *dev, void *packet, int packet_length)
{
byte packet_no;
byte *buf;
diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
index e34b4879d0..b2aed7e14a 100644
--- a/drivers/net/smc911x.c
+++ b/drivers/net/smc911x.c
@@ -161,8 +161,7 @@ static int smc911x_init(struct eth_device *dev, bd_t * bd)
return 0;
}
-static int smc911x_send(struct eth_device *dev,
- volatile void *packet, int length)
+static int smc911x_send(struct eth_device *dev, void *packet, int length)
{
u32 *data = (u32*)packet;
u32 tmplen;
diff --git a/drivers/net/tsec.c b/drivers/net/tsec.c
index 160bc0597d..3c1c8f0799 100644
--- a/drivers/net/tsec.c
+++ b/drivers/net/tsec.c
@@ -44,8 +44,7 @@ static RTXBD rtx __attribute__ ((aligned(8)));
#error "rtx must be 64-bit aligned"
#endif
-static int tsec_send(struct eth_device *dev,
- volatile void *packet, int length);
+static int tsec_send(struct eth_device *dev, void *packet, int length);
/* Default initializations for TSEC controllers. */
@@ -377,7 +376,7 @@ static void startup_tsec(struct eth_device *dev)
* do the same. Presumably, this would be zero if there were no
* errors
*/
-static int tsec_send(struct eth_device *dev, volatile void *packet, int length)
+static int tsec_send(struct eth_device *dev, void *packet, int length)
{
int i;
int result = 0;
diff --git a/drivers/net/tsi108_eth.c b/drivers/net/tsi108_eth.c
index f100ec1a50..b2c1be54fe 100644
--- a/drivers/net/tsi108_eth.c
+++ b/drivers/net/tsi108_eth.c
@@ -433,8 +433,7 @@ static struct dma_descriptor rx_descr_array[NUM_RX_DESC]
static struct dma_descriptor *rx_descr_current;
static int tsi108_eth_probe (struct eth_device *dev, bd_t * bis);
-static int tsi108_eth_send (struct eth_device *dev,
- volatile void *packet, int length);
+static int tsi108_eth_send(struct eth_device *dev, void *packet, int length);
static int tsi108_eth_recv (struct eth_device *dev);
static void tsi108_eth_halt (struct eth_device *dev);
static unsigned int read_phy (unsigned int base,
@@ -872,8 +871,7 @@ static int tsi108_eth_probe (struct eth_device *dev, bd_t * bis)
/*
* send a packet
*/
-static int tsi108_eth_send (struct eth_device *dev,
- volatile void *packet, int length)
+static int tsi108_eth_send(struct eth_device *dev, void *packet, int length)
{
unsigned long base;
int timeout;
@@ -948,7 +946,7 @@ static int tsi108_eth_recv (struct eth_device *dev)
unsigned long base;
int length = 0;
unsigned long status;
- volatile uchar *buffer;
+ uchar *buffer;
base = dev->iobase;
@@ -983,10 +981,8 @@ static int tsi108_eth_recv (struct eth_device *dev)
le32_to_cpu(rx_descr->vlan_byte_count) & 0xFFFF;
/*** process packet ***/
- buffer =
- (volatile uchar
- *)(le32_to_cpu (rx_descr->start_addr0));
- NetReceive (buffer, length);
+ buffer = (uchar *)(le32_to_cpu(rx_descr->start_addr0));
+ NetReceive(buffer, length);
invalidate_dcache_range ((unsigned long)buffer,
(unsigned long)buffer +
diff --git a/drivers/net/uli526x.c b/drivers/net/uli526x.c
index 5933bddce5..9648901925 100644
--- a/drivers/net/uli526x.c
+++ b/drivers/net/uli526x.c
@@ -168,8 +168,7 @@ static char buf_pool[TX_BUF_ALLOC * TX_DESC_CNT + 4];
static int mode = 8;
/* function declaration -- */
-static int uli526x_start_xmit(struct eth_device *dev,
- volatile void *packet, int length);
+static int uli526x_start_xmit(struct eth_device *dev, void *packet, int length);
static const struct ethtool_ops netdev_ethtool_ops;
static u16 read_srom_word(long, int);
static void uli526x_descriptor_init(struct uli526x_board_info *, unsigned long);
@@ -443,8 +442,7 @@ static void uli526x_init(struct eth_device *dev)
* Send a packet to media from the upper layer.
*/
-static int uli526x_start_xmit(struct eth_device *dev,
- volatile void *packet, int length)
+static int uli526x_start_xmit(struct eth_device *dev, void *packet, int length)
{
struct uli526x_board_info *db = dev->priv;
struct tx_desc *txptr;
diff --git a/drivers/net/xilinx_axi_emac.c b/drivers/net/xilinx_axi_emac.c
index 82e254b529..7854a04cae 100644
--- a/drivers/net/xilinx_axi_emac.c
+++ b/drivers/net/xilinx_axi_emac.c
@@ -468,7 +468,7 @@ static int axiemac_init(struct eth_device *dev, bd_t * bis)
return 0;
}
-static int axiemac_send(struct eth_device *dev, volatile void *ptr, int len)
+static int axiemac_send(struct eth_device *dev, void *ptr, int len)
{
struct axidma_priv *priv = dev->priv;
u32 timeout;
diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c
index 9791b9a534..d5bd737827 100644
--- a/drivers/net/xilinx_emaclite.c
+++ b/drivers/net/xilinx_emaclite.c
@@ -199,7 +199,7 @@ static int xemaclite_txbufferavailable(struct eth_device *dev)
return !(txpingbusy && txpongbusy);
}
-static int emaclite_send(struct eth_device *dev, volatile void *ptr, int len)
+static int emaclite_send(struct eth_device *dev, void *ptr, int len)
{
u32 reg;
u32 baseaddress;
@@ -240,7 +240,7 @@ static int emaclite_send(struct eth_device *dev, volatile void *ptr, int len)
debug("Send packet from 0x%x\n", baseaddress);
/* Write the frame to the buffer */
- xemaclite_alignedwrite((void *) ptr, baseaddress, len);
+ xemaclite_alignedwrite(ptr, baseaddress, len);
out_be32 (baseaddress + XEL_TPLR_OFFSET,(len &
(XEL_TPLR_LENGTH_MASK_HI | XEL_TPLR_LENGTH_MASK_LO)));
reg = in_be32 (baseaddress + XEL_TSR_OFFSET);
@@ -261,7 +261,7 @@ static int emaclite_send(struct eth_device *dev, volatile void *ptr, int len)
& XEL_TSR_XMIT_ACTIVE_MASK) == 0)) {
debug("Send packet from 0x%x\n", baseaddress);
/* Write the frame to the buffer */
- xemaclite_alignedwrite((void *) ptr, baseaddress, len);
+ xemaclite_alignedwrite(ptr, baseaddress, len);
out_be32 (baseaddress + XEL_TPLR_OFFSET, (len &
(XEL_TPLR_LENGTH_MASK_HI |
XEL_TPLR_LENGTH_MASK_LO)));
diff --git a/drivers/net/xilinx_ll_temac_fifo.c b/drivers/net/xilinx_ll_temac_fifo.c
index 3ff0f347ed..d7fd989cd4 100644
--- a/drivers/net/xilinx_ll_temac_fifo.c
+++ b/drivers/net/xilinx_ll_temac_fifo.c
@@ -102,8 +102,7 @@ int ll_temac_recv_fifo(struct eth_device *dev)
return 0;
}
-int ll_temac_send_fifo(struct eth_device *dev, volatile void *packet,
- int length)
+int ll_temac_send_fifo(struct eth_device *dev, void *packet, int length)
{
int i;
u32 *buf = (u32 *)packet;
diff --git a/drivers/net/xilinx_ll_temac_fifo.h b/drivers/net/xilinx_ll_temac_fifo.h
index f0d6e6823c..e5b4be9e6c 100644
--- a/drivers/net/xilinx_ll_temac_fifo.h
+++ b/drivers/net/xilinx_ll_temac_fifo.h
@@ -116,7 +116,6 @@ int ll_temac_reset_fifo(struct eth_device *dev);
int ll_temac_recv_fifo(struct eth_device *dev);
/* send buffered data to FIFO */
-int ll_temac_send_fifo(struct eth_device *dev, volatile void *packet,
- int length);
+int ll_temac_send_fifo(struct eth_device *dev, void *packet, int length);
#endif /* _XILINX_LL_TEMAC_FIFO_ */
diff --git a/drivers/net/xilinx_ll_temac_sdma.c b/drivers/net/xilinx_ll_temac_sdma.c
index 621d100f29..8637a6b1fc 100644
--- a/drivers/net/xilinx_ll_temac_sdma.c
+++ b/drivers/net/xilinx_ll_temac_sdma.c
@@ -324,8 +324,7 @@ int ll_temac_recv_sdma(struct eth_device *dev)
return 0;
}
-int ll_temac_send_sdma(struct eth_device *dev, volatile void *packet,
- int length)
+int ll_temac_send_sdma(struct eth_device *dev, void *packet, int length)
{
unsigned timeout = 50; /* 1usec * 50 = 50usec */
struct cdmac_bd *tx_dp = &cdmac_bd.tx[tx_idx];
diff --git a/drivers/net/xilinx_ll_temac_sdma.h b/drivers/net/xilinx_ll_temac_sdma.h
index 51e258d7f5..db00a57a16 100644
--- a/drivers/net/xilinx_ll_temac_sdma.h
+++ b/drivers/net/xilinx_ll_temac_sdma.h
@@ -275,7 +275,6 @@ int ll_temac_reset_sdma(struct eth_device *dev);
int ll_temac_recv_sdma(struct eth_device *dev);
/* send buffered data to SDMA */
-int ll_temac_send_sdma(struct eth_device *dev, volatile void *packet,
- int length);
+int ll_temac_send_sdma(struct eth_device *dev, void *packet, int length);
#endif /* _XILINX_LL_TEMAC_SDMA_ */
diff --git a/drivers/power/Makefile b/drivers/power/Makefile
index ead00f8dae..6bf388cb7d 100644
--- a/drivers/power/Makefile
+++ b/drivers/power/Makefile
@@ -26,8 +26,10 @@ include $(TOPDIR)/config.mk
LIB := $(obj)libpower.o
COBJS-$(CONFIG_FTPMU010_POWER) += ftpmu010.o
+COBJS-$(CONFIG_TPS6586X_POWER) += tps6586x.o
COBJS-$(CONFIG_TWL4030_POWER) += twl4030.o
COBJS-$(CONFIG_TWL6030_POWER) += twl6030.o
+COBJS-$(CONFIG_TWL6035_POWER) += twl6035.o
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/power/tps6586x.c b/drivers/power/tps6586x.c
new file mode 100644
index 0000000000..f3f2ec6e58
--- /dev/null
+++ b/drivers/power/tps6586x.c
@@ -0,0 +1,280 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2010,2011 NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <tps6586x.h>
+#include <asm/io.h>
+#include <i2c.h>
+
+static int bus_num; /* I2C bus we are on */
+#define I2C_ADDRESS 0x34 /* chip requires this address */
+static char inited; /* 1 if we have been inited */
+
+enum {
+ /* Registers that we access */
+ SUPPLY_CONTROL1 = 0x20,
+ SUPPLY_CONTROL2,
+ SM1_VOLTAGE_V1 = 0x23,
+ SM1_VOLTAGE_V2,
+ SM0_VOLTAGE_V1 = 0x26,
+ SM0_VOLTAGE_V2,
+ PFM_MODE = 0x47,
+
+ /* Bits in the supply control registers */
+ CTRL_SM1_RAMP = 0x01,
+ CTRL_SM1_SUPPLY2 = 0x02,
+ CTRL_SM0_RAMP = 0x04,
+ CTRL_SM0_SUPPLY2 = 0x08,
+};
+
+#define MAX_I2C_RETRY 3
+int tps6586x_read(int reg)
+{
+ int i;
+ uchar data;
+ int retval = -1;
+ int old_bus_num;
+
+ old_bus_num = i2c_get_bus_num();
+ i2c_set_bus_num(bus_num);
+
+ for (i = 0; i < MAX_I2C_RETRY; ++i) {
+ if (!i2c_read(I2C_ADDRESS, reg, 1, &data, 1)) {
+ retval = (int)data;
+ goto exit;
+ }
+
+ /* i2c access failed, retry */
+ udelay(100);
+ }
+
+exit:
+ i2c_set_bus_num(old_bus_num);
+ debug("pmu_read %x=%x\n", reg, retval);
+ if (retval < 0)
+ debug("%s: failed to read register %#x: %d\n", __func__, reg,
+ retval);
+ return retval;
+}
+
+int tps6586x_write(int reg, uchar *data, uint len)
+{
+ int i;
+ int retval = -1;
+ int old_bus_num;
+
+ old_bus_num = i2c_get_bus_num();
+ i2c_set_bus_num(bus_num);
+
+ for (i = 0; i < MAX_I2C_RETRY; ++i) {
+ if (!i2c_write(I2C_ADDRESS, reg, 1, data, len)) {
+ retval = 0;
+ goto exit;
+ }
+
+ /* i2c access failed, retry */
+ udelay(100);
+ }
+
+exit:
+ i2c_set_bus_num(old_bus_num);
+ debug("pmu_write %x=%x: ", reg, retval);
+ for (i = 0; i < len; i++)
+ debug("%x ", data[i]);
+ if (retval)
+ debug("%s: failed to write register %#x\n", __func__, reg);
+ return retval;
+}
+
+/*
+ * Get current voltage of SM0 and SM1
+ *
+ * @param sm0 Place to put SM0 voltage
+ * @param sm1 Place to put SM1 voltage
+ * @return 0 if ok, -1 on error
+ */
+static int read_voltages(int *sm0, int *sm1)
+{
+ int ctrl1, ctrl2;
+ int is_v2;
+
+ /*
+ * Each vdd has two supply sources, ie, v1 and v2.
+ * The supply control reg1 and reg2 determine the current selection.
+ */
+ ctrl1 = tps6586x_read(SUPPLY_CONTROL1);
+ ctrl2 = tps6586x_read(SUPPLY_CONTROL2);
+ if (ctrl1 == -1 || ctrl2 == -1)
+ return -1;
+
+ /* Figure out whether V1 or V2 is selected */
+ is_v2 = (ctrl1 | ctrl2) & CTRL_SM0_SUPPLY2;
+ *sm0 = tps6586x_read(is_v2 ? SM0_VOLTAGE_V2 : SM0_VOLTAGE_V1);
+ *sm1 = tps6586x_read(is_v2 ? SM1_VOLTAGE_V2 : SM1_VOLTAGE_V1);
+ if (*sm0 == -1 || *sm1 == -1)
+ return -1;
+
+ return 0;
+}
+
+static int set_voltage(int reg, int data, int rate)
+{
+ uchar control_bit;
+ uchar buff[3];
+
+ control_bit = (reg == SM0_VOLTAGE_V1 ? CTRL_SM0_RAMP : CTRL_SM1_RAMP);
+
+ /*
+ * Only one supply is needed in u-boot. set both v1 and v2 to
+ * same value.
+ *
+ * When both v1 and v2 are set to same value, we just need to set
+ * control1 reg to trigger the supply selection.
+ */
+ buff[0] = buff[1] = (uchar)data;
+ buff[2] = rate;
+
+ /* write v1, v2 and rate, then trigger */
+ if (tps6586x_write(reg, buff, 3) ||
+ tps6586x_write(SUPPLY_CONTROL1, &control_bit, 1))
+ return -1;
+
+ return 0;
+}
+
+static int calculate_next_voltage(int voltage, int target, int step)
+{
+ int diff = voltage < target ? step : -step;
+
+ if (abs(target - voltage) > step)
+ voltage += diff;
+ else
+ voltage = target;
+
+ return voltage;
+}
+
+int tps6586x_set_pwm_mode(int mask)
+{
+ uchar val;
+ int ret;
+
+ assert(inited);
+ ret = tps6586x_read(PFM_MODE);
+ if (ret != -1) {
+ val = (uchar)ret;
+ val |= mask;
+
+ ret = tps6586x_write(PFM_MODE, &val, 1);
+ }
+
+ if (ret == -1)
+ debug("%s: Failed to read/write PWM mode reg\n", __func__);
+
+ return ret;
+}
+
+int tps6586x_adjust_sm0_sm1(int sm0_target, int sm1_target, int step, int rate,
+ int min_sm0_over_sm1)
+{
+ int sm0, sm1;
+ int bad;
+
+ assert(inited);
+
+ /* get current voltage settings */
+ if (read_voltages(&sm0, &sm1)) {
+ debug("%s: Cannot read voltage settings\n", __func__);
+ return -1;
+ }
+
+ /*
+ * if vdd_core < vdd_cpu + rel
+ * skip
+ *
+ * This condition may happen when system reboots due to kernel crash.
+ */
+ if (min_sm0_over_sm1 != -1 && sm0 < sm1 + min_sm0_over_sm1) {
+ debug("%s: SM0 is %d, SM1 is %d, but min_sm0_over_sm1 is %d\n",
+ __func__, sm0, sm1, min_sm0_over_sm1);
+ return -1;
+ }
+
+ /*
+ * Since vdd_core and vdd_cpu may both stand at either greater or less
+ * than their nominal voltage, the adjustment may go either directions.
+ *
+ * Make sure vdd_core is always higher than vdd_cpu with certain margin.
+ * So, find out which vdd to adjust first in each step.
+ *
+ * case 1: both sm0 and sm1 need to move up
+ * adjust sm0 before sm1
+ *
+ * case 2: both sm0 and sm1 need to move down
+ * adjust sm1 before sm0
+ *
+ * case 3: sm0 moves down and sm1 moves up
+ * adjusting either one first is fine.
+ *
+ * Adjust vdd_core and vdd_cpu one step at a time until they reach
+ * their nominal values.
+ */
+ bad = 0;
+ while (!bad && (sm0 != sm0_target || sm1 != sm1_target)) {
+ int adjust_sm0_late = 0; /* flag to adjust vdd_core later */
+
+ debug("%d-%d %d-%d ", sm0, sm0_target, sm1, sm1_target);
+
+ if (sm0 != sm0_target) {
+ /*
+ * if case 1 and case 3, set new sm0 first.
+ * otherwise, hold down until new sm1 is set.
+ */
+ sm0 = calculate_next_voltage(sm0, sm0_target, step);
+ if (sm1 < sm1_target)
+ bad |= set_voltage(SM0_VOLTAGE_V1, sm0, rate);
+ else
+ adjust_sm0_late = 1;
+ }
+
+ if (sm1 != sm1_target) {
+ sm1 = calculate_next_voltage(sm1, sm1_target, step);
+ bad |= set_voltage(SM1_VOLTAGE_V1, sm1, rate);
+ }
+
+ if (adjust_sm0_late)
+ bad |= set_voltage(SM0_VOLTAGE_V1, sm0, rate);
+ debug("%d\n", adjust_sm0_late);
+ }
+ debug("%d-%d %d-%d done\n", sm0, sm0_target, sm1, sm1_target);
+
+ return bad ? -1 : 0;
+}
+
+int tps6586x_init(int bus)
+{
+ bus_num = bus;
+ inited = 1;
+
+ return 0;
+}
diff --git a/drivers/power/twl6035.c b/drivers/power/twl6035.c
new file mode 100644
index 0000000000..624c09e85d
--- /dev/null
+++ b/drivers/power/twl6035.c
@@ -0,0 +1,65 @@
+/*
+ * (C) Copyright 2012
+ * Texas Instruments, <www.ti.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <config.h>
+#include <twl6035.h>
+
+/* Functions to read and write from TWL6030 */
+int twl6035_i2c_write_u8(u8 chip_no, u8 val, u8 reg)
+{
+ return i2c_write(chip_no, reg, 1, &val, 1);
+}
+
+int twl6035_i2c_read_u8(u8 chip_no, u8 *val, u8 reg)
+{
+ return i2c_read(chip_no, reg, 1, val, 1);
+}
+
+/* To align with i2c mw/mr address, reg, val command syntax */
+static inline int palmas_write_u8(u8 chip_no, u8 reg, u8 val)
+{
+ return i2c_write(chip_no, reg, 1, &val, 1);
+}
+
+static inline int palmas_read_u8(u8 chip_no, u8 reg, u8 *val)
+{
+ return i2c_read(chip_no, reg, 1, val, 1);
+}
+
+void twl6035_init_settings(void)
+{
+ return;
+}
+
+void twl6035_mmc1_poweron_ldo(void)
+{
+ u8 val = 0;
+
+ /* set LDO9 TWL6035 to 3V */
+ val = 0x2b; /* (3 -.9)*28 +1 */
+ palmas_write_u8(0x48, LDO9_VOLTAGE, val);
+
+ /* TURN ON LDO9 */
+ val = LDO_ON | LDO_MODE_SLEEP | LDO_MODE_ACTIVE;
+ palmas_write_u8(0x48, LDO9_CTRL, val);
+ return;
+}
diff --git a/drivers/qe/uec.c b/drivers/qe/uec.c
index 3e46e3515f..216c8982be 100644
--- a/drivers/qe/uec.c
+++ b/drivers/qe/uec.c
@@ -1288,7 +1288,7 @@ static void uec_halt(struct eth_device* dev)
uec_stop(uec, COMM_DIR_RX_AND_TX);
}
-static int uec_send(struct eth_device* dev, volatile void *buf, int len)
+static int uec_send(struct eth_device *dev, void *buf, int len)
{
uec_private_t *uec;
ucc_fast_private_t *uccf;
diff --git a/drivers/serial/Makefile b/drivers/serial/Makefile
index 616b85703b..6249cc2e21 100644
--- a/drivers/serial/Makefile
+++ b/drivers/serial/Makefile
@@ -29,6 +29,7 @@ COBJS-$(CONFIG_ALTERA_UART) += altera_uart.o
COBJS-$(CONFIG_ALTERA_JTAG_UART) += altera_jtag_uart.o
COBJS-$(CONFIG_ARM_DCC) += arm_dcc.o
COBJS-$(CONFIG_ATMEL_USART) += atmel_usart.o
+COBJS-$(CONFIG_LPC32XX_HSUART) += lpc32xx_hsuart.o
COBJS-$(CONFIG_MCFUART) += mcfuart.o
COBJS-$(CONFIG_NS9750_UART) += ns9750_serial.o
COBJS-$(CONFIG_OPENCORES_YANU) += opencores_yanu.o
@@ -56,10 +57,21 @@ COBJS-$(CONFIG_XILINX_UARTLITE) += serial_xuartlite.o
COBJS-$(CONFIG_SANDBOX_SERIAL) += sandbox.o
COBJS-$(CONFIG_SCIF_CONSOLE) += serial_sh.o
+CFLAGS += -I $(TOPDIR)/pdl/include
+CPPFLAGS += -I $(TOPDIR)/pdl/include
+
ifndef CONFIG_SPL_BUILD
COBJS-$(CONFIG_USB_TTY) += usbtty.o
endif
+ifdef CONFIG_RDA_PDL
+COBJS-$(CONFIG_RDA_USB_SERIAL) += usb-serial.o
+endif
+
+ifndef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_RDA_USB_SERIAL) += usb-serial.o
+endif
+
COBJS := $(sort $(COBJS-y))
SRCS := $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS))
diff --git a/drivers/serial/lpc32xx_hsuart.c b/drivers/serial/lpc32xx_hsuart.c
new file mode 100644
index 0000000000..8ce3382d86
--- /dev/null
+++ b/drivers/serial/lpc32xx_hsuart.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright (C) 2011 Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#include <common.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/uart.h>
+#include <asm/io.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+
+static struct hsuart_regs *hsuart = (struct hsuart_regs *)HS_UART_BASE;
+
+static void lpc32xx_hsuart_set_baudrate(void)
+{
+ u32 div;
+
+ /* UART rate = PERIPH_CLK / ((HSU_RATE + 1) x 14) */
+ div = (get_serial_clock() / 14 + gd->baudrate / 2) / gd->baudrate - 1;
+ if (div > 255)
+ div = 255;
+
+ writel(div, &hsuart->rate);
+}
+
+static int lpc32xx_hsuart_getc(void)
+{
+ while (!(readl(&hsuart->level) & HSUART_LEVEL_RX))
+ /* NOP */;
+
+ return readl(&hsuart->rx) & HSUART_RX_DATA;
+}
+
+static void lpc32xx_hsuart_putc(const char c)
+{
+ writel(c, &hsuart->tx);
+
+ /* Wait for character to be sent */
+ while (readl(&hsuart->level) & HSUART_LEVEL_TX)
+ /* NOP */;
+}
+
+static int lpc32xx_hsuart_tstc(void)
+{
+ if (readl(&hsuart->level) & HSUART_LEVEL_RX)
+ return 1;
+
+ return 0;
+}
+
+static void lpc32xx_hsuart_init(void)
+{
+ lpc32xx_hsuart_set_baudrate();
+
+ /* Disable hardware RTS and CTS flow control, set up RX and TX FIFO */
+ writel(HSUART_CTRL_TMO_16 | HSUART_CTRL_HSU_OFFSET(20) |
+ HSUART_CTRL_HSU_RX_TRIG_32 | HSUART_CTRL_HSU_TX_TRIG_0,
+ &hsuart->ctrl);
+}
+
+void serial_setbrg(void)
+{
+ return lpc32xx_hsuart_set_baudrate();
+}
+
+void serial_putc(const char c)
+{
+ lpc32xx_hsuart_putc(c);
+
+ /* If \n, also do \r */
+ if (c == '\n')
+ lpc32xx_hsuart_putc('\r');
+}
+
+int serial_getc(void)
+{
+ return lpc32xx_hsuart_getc();
+}
+
+void serial_puts(const char *s)
+{
+ while (*s)
+ serial_putc(*s++);
+}
+
+int serial_tstc(void)
+{
+ return lpc32xx_hsuart_tstc();
+}
+
+int serial_init(void)
+{
+ lpc32xx_hsuart_init();
+
+ return 0;
+}
diff --git a/drivers/serial/usb-serial.c b/drivers/serial/usb-serial.c
new file mode 100644
index 0000000000..4138971967
--- /dev/null
+++ b/drivers/serial/usb-serial.c
@@ -0,0 +1,871 @@
+/*
+ * (C) Copyright 2003
+ * Gerry Hamel, geh@ti.com, Texas Instruments
+ *
+ * (C) Copyright 2006
+ * Bryan O'Donoghue, bodonoghue@codehermit.ie
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#include <common.h>
+#include <config.h>
+#include <asm/unaligned.h>
+#include <usb/usbserial.h>
+#include "usbser.h"
+#include "usb_cdc_acm.h"
+#include "usbdescriptors.h"
+
+//#define DEBUG
+
+#ifdef DEBUG
+#define DBG(fmt,args...)\
+ serial_printf("[%s] %s %d: "fmt, __FILE__,__FUNCTION__,__LINE__,##args)
+#else
+#define DBG(fmt,args...) do{}while(0)
+#endif
+
+#if 1
+#define ERR(fmt,args...)\
+ serial_printf("ERROR![%s] %s %d: "fmt, __FILE__,__FUNCTION__,\
+ __LINE__,##args)
+#else
+#define ERR(fmt,args...) do{}while(0)
+#endif
+
+/*
+ * Defines
+ */
+#define NUM_CONFIGS 1
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+#define MAX_INTERFACES 4
+#define NUM_ENDPOINTS 6
+#define NUM_ACM_INTERFACES 4
+#else
+#define MAX_INTERFACES 2
+#define NUM_ENDPOINTS 3
+#define NUM_ACM_INTERFACES 2
+#endif
+
+/*
+ * Buffers to hold input and output data
+ */
+
+
+/*
+ * Instance variables
+ */
+static struct usb_device_instance device_instance[1];
+static struct usb_bus_instance bus_instance[1];
+static struct usb_configuration_instance config_instance[NUM_CONFIGS];
+static struct usb_interface_instance interface_instance[MAX_INTERFACES];
+static struct usb_alternate_instance alternate_instance[MAX_INTERFACES];
+/* one extra for control endpoint */
+static struct usb_endpoint_instance endpoint_instance[NUM_ENDPOINTS+1];
+
+/*
+ * Global flag
+ */
+int usbser_configured_flag = 0;
+
+
+/* Indicies, References */
+static unsigned short rx_endpoint[2] = {0, 0};
+static unsigned short tx_endpoint[2] = {0, 0};
+
+/* Standard USB Data Structures */
+static struct usb_interface_descriptor interface_descriptors[MAX_INTERFACES];
+static struct usb_endpoint_descriptor *ep_descriptor_ptrs[NUM_ENDPOINTS];
+static struct usb_configuration_descriptor *configuration_descriptor = 0;
+static struct usb_device_descriptor device_descriptor = {
+ .bLength = sizeof(struct usb_device_descriptor),
+ .bDescriptorType = USB_DT_DEVICE,
+ .bcdUSB = cpu_to_le16(USB_BCD_VERSION),
+#ifdef CONFIG_USB_ACM_TWO_CHANS /* enable interface association */
+ .bDeviceClass = 0xEF,
+ .bDeviceSubClass = 0x02,
+ .bDeviceProtocol = 0x01,
+#else
+ .bDeviceClass = COMMUNICATIONS_DEVICE_CLASS,
+ .bDeviceSubClass = 0x00,
+ .bDeviceProtocol = 0x00,
+#endif
+ .bMaxPacketSize0 = EP0_MAX_PACKET_SIZE,
+ .idVendor = cpu_to_le16(CONFIG_USBD_VENDORID),
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ .idProduct = cpu_to_le16(CONFIG_USBD_PRODUCTID_RDAACM),
+#else
+ .idProduct = cpu_to_le16(CONFIG_USBD_PRODUCTID_CDCACM),
+#endif
+ .bcdDevice = cpu_to_le16(USBTTY_BCD_DEVICE),
+ .iManufacturer = 0,
+ .iProduct = 0,
+ .iSerialNumber = 0,
+ .bNumConfigurations = NUM_CONFIGS
+};
+
+
+#if defined(CONFIG_USBD_HS)
+static struct usb_qualifier_descriptor qualifier_descriptor = {
+ .bLength = sizeof(struct usb_qualifier_descriptor),
+ .bDescriptorType = USB_DT_QUAL,
+ .bcdUSB = cpu_to_le16(USB_BCD_VERSION),
+ .bDeviceClass = COMMUNICATIONS_DEVICE_CLASS,
+ .bDeviceSubClass = 0x00,
+ .bDeviceProtocol = 0x00,
+ .bMaxPacketSize0 = EP0_MAX_PACKET_SIZE,
+ .bNumConfigurations = NUM_CONFIGS
+};
+#endif
+
+/*
+ * Static CDC ACM specific descriptors
+ */
+
+struct acm_config_desc {
+ struct usb_configuration_descriptor configuration_desc;
+
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ /* function 1 */
+ struct usb_function_descriptor function_desc;
+#endif
+
+ /* Master Interface */
+ struct usb_interface_descriptor interface_desc;
+
+ struct usb_class_header_function_descriptor usb_class_header;
+ struct usb_class_call_management_descriptor usb_class_call_mgt;
+ struct usb_class_abstract_control_descriptor usb_class_acm;
+ struct usb_class_union_function_descriptor usb_class_union;
+ struct usb_endpoint_descriptor notification_endpoint;
+
+ /* Slave Interface */
+ struct usb_interface_descriptor data_class_interface;
+ struct usb_endpoint_descriptor data_endpoints[2];
+
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ /* function 2 */
+ struct usb_function_descriptor function_desc2;
+
+ /* Master Interface 2 */
+ struct usb_interface_descriptor interface_desc2;
+
+ struct usb_class_header_function_descriptor usb_class_header2;
+ struct usb_class_call_management_descriptor usb_class_call_mgt2;
+ struct usb_class_abstract_control_descriptor usb_class_acm2;
+ struct usb_class_union_function_descriptor usb_class_union2;
+ struct usb_endpoint_descriptor notification_endpoint2;
+
+ /* Slave Interface 2 */
+ struct usb_interface_descriptor data_class_interface2;
+ struct usb_endpoint_descriptor data_endpoints2[2];
+#endif
+} __attribute__((packed));
+
+static struct acm_config_desc acm_configuration_descriptors[NUM_CONFIGS] = {
+ {
+ .configuration_desc ={
+ .bLength =
+ sizeof(struct usb_configuration_descriptor),
+ .bDescriptorType = USB_DT_CONFIG,
+ .wTotalLength =
+ cpu_to_le16(sizeof(struct acm_config_desc)),
+ .bNumInterfaces = NUM_ACM_INTERFACES,
+ .bConfigurationValue = 1,
+ .iConfiguration = 0,
+ .bmAttributes =
+ BMATTRIBUTE_SELF_POWERED|BMATTRIBUTE_RESERVED,
+ .bMaxPower = USBTTY_MAXPOWER
+ },
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ /* function 1 */
+ .function_desc = {
+ .bLength = sizeof(struct usb_function_descriptor),
+ .bDescriptorType = 0x0B,
+ .bFirstInterface = 0,
+ .bInterfaceCount = 2,
+ .bFunctionClass = COMMUNICATIONS_INTERFACE_CLASS_CONTROL,
+ .bFunctionSubClass = COMMUNICATIONS_ACM_SUBCLASS,
+ .bFunctionProtocol = COMMUNICATIONS_V25TER_PROTOCOL,
+ .iFunction = 0,
+ },
+#endif
+ /* Interface 1 */
+ .interface_desc = {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 0x01,
+ .bInterfaceClass =
+ COMMUNICATIONS_INTERFACE_CLASS_CONTROL,
+ .bInterfaceSubClass = COMMUNICATIONS_ACM_SUBCLASS,
+ .bInterfaceProtocol = COMMUNICATIONS_V25TER_PROTOCOL,
+ .iInterface = 0,
+ },
+ .usb_class_header = {
+ .bFunctionLength =
+ sizeof(struct usb_class_header_function_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_HEADER,
+ .bcdCDC = cpu_to_le16(110),
+ },
+ .usb_class_call_mgt = {
+ .bFunctionLength =
+ sizeof(struct usb_class_call_management_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_CMF,
+ .bmCapabilities = 0x00,
+ .bDataInterface = 0x01,
+ },
+ .usb_class_acm = {
+ .bFunctionLength =
+ sizeof(struct usb_class_abstract_control_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_ACMF,
+ .bmCapabilities = 0x00,
+ },
+ .usb_class_union = {
+ .bFunctionLength =
+ sizeof(struct usb_class_union_function_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_UF,
+ .bMasterInterface = 0x00,
+ .bSlaveInterface0 = 0x01,
+ },
+ .notification_endpoint = {
+ .bLength =
+ sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = UDC_INT_ENDPOINT | USB_DIR_IN,
+ .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .wMaxPacketSize
+ = cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
+ .bInterval = 0xb,
+ },
+
+ /* Interface 2 */
+ .data_class_interface = {
+ .bLength =
+ sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = 0x01,
+ .bAlternateSetting = 0x00,
+ .bNumEndpoints = 0x02,
+ .bInterfaceClass =
+ COMMUNICATIONS_INTERFACE_CLASS_DATA,
+ .bInterfaceSubClass = DATA_INTERFACE_SUBCLASS_NONE,
+ .bInterfaceProtocol = DATA_INTERFACE_PROTOCOL_NONE,
+ .iInterface = 0,
+ },
+ .data_endpoints = {
+ {
+ .bLength =
+ sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = UDC_OUT_ENDPOINT | USB_DIR_OUT,
+ .bmAttributes =
+ USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize =
+ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
+ .bInterval = 0xFF,
+ },
+ {
+ .bLength =
+ sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = UDC_IN_ENDPOINT | USB_DIR_IN,
+ .bmAttributes =
+ USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize =
+ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
+ .bInterval = 0xFF,
+ },
+ },
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ /* function 2 */
+ .function_desc2 = {
+ .bLength = sizeof(struct usb_function_descriptor),
+ .bDescriptorType = 0x0B,
+ .bFirstInterface = 2,
+ .bInterfaceCount = 2,
+ .bFunctionClass = COMMUNICATIONS_INTERFACE_CLASS_CONTROL,
+ .bFunctionSubClass = COMMUNICATIONS_ACM_SUBCLASS,
+ .bFunctionProtocol = COMMUNICATIONS_V25TER_PROTOCOL,
+ .iFunction = 0,
+ },
+ /* Interface 3 */
+ .interface_desc2 = {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = 0x02,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 0x01,
+ .bInterfaceClass =
+ COMMUNICATIONS_INTERFACE_CLASS_CONTROL,
+ .bInterfaceSubClass = COMMUNICATIONS_ACM_SUBCLASS,
+ .bInterfaceProtocol = COMMUNICATIONS_V25TER_PROTOCOL,
+ .iInterface = 0,
+ },
+ .usb_class_header2 = {
+ .bFunctionLength =
+ sizeof(struct usb_class_header_function_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_HEADER,
+ .bcdCDC = cpu_to_le16(110),
+ },
+ .usb_class_call_mgt2 = {
+ .bFunctionLength =
+ sizeof(struct usb_class_call_management_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_CMF,
+ .bmCapabilities = 0x00,
+ .bDataInterface = 0x03,
+ },
+ .usb_class_acm2 = {
+ .bFunctionLength =
+ sizeof(struct usb_class_abstract_control_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_ACMF,
+ .bmCapabilities = 0x00,
+ },
+ .usb_class_union2 = {
+ .bFunctionLength =
+ sizeof(struct usb_class_union_function_descriptor),
+ .bDescriptorType = CS_INTERFACE,
+ .bDescriptorSubtype = USB_ST_UF,
+ .bMasterInterface = 0x02,
+ .bSlaveInterface0 = 0x03,
+ },
+ .notification_endpoint2 = {
+ .bLength =
+ sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = UDC_INT_ENDPOINT2 | USB_DIR_IN,
+ .bmAttributes = USB_ENDPOINT_XFER_INT,
+ .wMaxPacketSize
+ = cpu_to_le16(CONFIG_USBD_SERIAL_INT_PKTSIZE),
+ .bInterval = 0xb,
+ },
+
+ /* Interface 4 */
+ .data_class_interface2 = {
+ .bLength =
+ sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = 0x03,
+ .bAlternateSetting = 0x00,
+ .bNumEndpoints = 0x02,
+ .bInterfaceClass =
+ COMMUNICATIONS_INTERFACE_CLASS_DATA,
+ .bInterfaceSubClass = DATA_INTERFACE_SUBCLASS_NONE,
+ .bInterfaceProtocol = DATA_INTERFACE_PROTOCOL_NONE,
+ .iInterface = 0,
+ },
+ .data_endpoints2 = {
+ {
+ .bLength =
+ sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = UDC_OUT_ENDPOINT2 | USB_DIR_OUT,
+ .bmAttributes =
+ USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize =
+ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
+ .bInterval = 0xFF,
+ },
+ {
+ .bLength =
+ sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = UDC_IN_ENDPOINT2 | USB_DIR_IN,
+ .bmAttributes =
+ USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize =
+ cpu_to_le16(CONFIG_USBD_SERIAL_BULK_PKTSIZE),
+ .bInterval = 0xFF,
+ },
+ },
+#endif //CONFIG_USB_ACM_TWO_CHANS
+ },
+};
+
+static struct rs232_emu rs232_desc={
+ .dter = 115200,
+ .stop_bits = 0x00,
+ .parity = 0x00,
+ .data_bits = 0x08
+};
+
+/*
+ * Static Function Prototypes
+ */
+
+static void usbser_init_instances (void);
+static void usbser_init_endpoints (void);
+static void usbser_init_terminal_type(void);
+static void usbser_event_handler (struct usb_device_instance *device,
+ usb_device_event_t event, int data);
+static int usbser_cdc_setup(struct usb_device_request *request,
+ struct urb *urb);
+static int usbser_configured (void);
+
+
+/*
+ * Test whether a character is in the RX buffer
+ */
+
+int usbser_tstc (int chan)
+{
+ udc_irq();
+
+ return udc_chars_in_rxfifo(rx_endpoint[chan]);
+}
+
+/*
+ * Read a single byte from the usb client port. Returns 1 on success, 0
+ * otherwise. When the function is succesfull, the character read is
+ * written into its argument c.
+ */
+int usbser_getc (int chan)
+{
+ unsigned char c = 0;
+
+ usbser_read(chan, &c, 1);
+ return c;
+}
+
+/*
+ * Output a single byte to the usb client port.
+ */
+void usbser_putc (int chan, const char c)
+{
+ usbser_write(chan, (u8 *)&c, 1);
+}
+
+int usbser_read(int chan, unsigned char *_buf, unsigned int len)
+{
+ int count = 0, i;
+ struct usb_endpoint_instance *ep_out = NULL;
+ struct urb *urb = NULL;
+ unsigned char *buf = _buf;
+ unsigned short ep = rx_endpoint[chan];
+ u32 rx_avail;
+
+ for(i = 1; i <= NUM_ENDPOINTS; i++) {
+ if(endpoint_instance[i].endpoint_address == (ep | USB_DIR_OUT))
+ ep_out = &endpoint_instance[i];
+ }
+ if(!ep_out)
+ return -1;
+ urb = ep_out->rcv_urb;
+
+ DBG(" buf len: %d\n", len);
+
+ rx_avail = udc_chars_in_rxfifo(ep);
+ if (rx_avail > 0) {
+ if (len <= rx_avail) {
+ usbd_setup_urb(urb, buf, len, 0);
+ udc_irq();
+ if(!urb->actual_length)
+ poll_rx_ep(ep);
+ usbd_free_urb(urb);
+ return len;
+ } else {
+ //first flush all chars in buffer
+ usbd_setup_urb(urb, buf, rx_avail, 0);
+ udc_irq();
+ if(!urb->actual_length)
+ poll_rx_ep(ep);
+ buf += rx_avail;
+ len -= rx_avail;
+ count += rx_avail;
+ usbd_free_urb(urb);
+ }
+ }
+ //now get remain data...
+ while (len > 0) {
+ int xfer;
+ int dma = 0;
+ int maxPktSize = ep_out->rcv_packetSize;
+
+ xfer = (len > maxPktSize) ? maxPktSize : len;
+ if (xfer == maxPktSize)
+ dma = 1;
+ usbd_setup_urb(urb, buf, xfer, dma);
+ udc_irq();
+ if(!urb->actual_length)
+ poll_rx_ep(ep);
+
+ DBG("urb actual_len :%d\n", urb->actual_length);
+ if (urb->actual_length) {
+ buf += urb->actual_length;
+ len -= urb->actual_length;
+ count += urb->actual_length;
+ usbd_free_urb(urb);
+ }
+ }
+
+ DBG("read : %d\n", count);
+ return count;
+}
+
+int usbser_write(int chan, const unsigned char *_buf, unsigned int len)
+{
+ int i;
+ struct usb_endpoint_instance *ep_in = NULL;
+ struct urb *current_urb = NULL;
+ unsigned char *buf = (unsigned char *)_buf;
+ int count = 0;
+ unsigned short ep = tx_endpoint[chan];
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ static int acm_ch1_opened = 1;
+ if(chan == USB_ACM_CHAN_1 && !acm_ch1_opened)
+ return -1;
+#endif
+
+ for(i = 1; i <= NUM_ENDPOINTS; i++) {
+ if(endpoint_instance[i].endpoint_address == (ep | USB_DIR_IN))
+ ep_in = &endpoint_instance[i];
+ }
+ if(!ep_in)
+ return -1;
+
+ if (!usbser_configured ()) {
+ return 0;
+ }
+ current_urb = ep_in->tx_urb;
+
+ while(len > 0) {
+ int xfer;
+ int maxPktSize = ep_in->rcv_packetSize;
+
+ xfer = (len > maxPktSize) ? maxPktSize : len;
+
+ current_urb->buffer = buf;
+ current_urb->actual_length = xfer;
+
+ if(udc_endpoint_write (ep_in))
+ goto oops;
+ count += xfer;
+ len -= xfer;
+ buf += xfer;
+ }
+
+ DBG("after write urb actual_len :%d count %d\n",
+ current_urb->actual_length, count);
+ return count;
+
+oops:
+ serial_puts("usb write error\n");
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ if(chan == USB_ACM_CHAN_1)
+ acm_ch1_opened = 0;
+#endif
+ return -1;
+}
+
+int drv_usbser_init (void)
+{
+ static int usb_init_flag = 0;
+
+ if (usb_init_flag)
+ return 0;
+ usb_init_flag = 1;
+
+ /* Decide on which type of UDC device to be.
+ */
+ usbser_init_terminal_type();
+
+ /* Now, set up USB controller and infrastructure */
+ if (udc_is_initialized()) {
+ printf("UDC software initializing...\n");
+ udc_soft_init (); /* Basic USB initialization */
+ } else {
+ printf("UDC hardware initializing...\n");
+ udc_init ();
+ }
+
+ usbser_init_instances ();
+ usbser_init_endpoints ();
+
+ if (!udc_is_initialized()) {
+ udc_startup_events (device_instance);/* Enable dev, init udc pointers */
+ udc_connect (); /* Enable pullup for host detection */
+ } else {
+ udc_hot_startup(device_instance);
+ }
+
+ return 0;
+}
+
+
+#define init_wMaxPacketSize(x) le16_to_cpu(get_unaligned(\
+ &ep_descriptor_ptrs[(x) - 1]->wMaxPacketSize));
+
+#define init_write_wMaxPacketSize(val, x) (put_unaligned(le16_to_cpu(val),\
+ &ep_descriptor_ptrs[(x) - 1]->wMaxPacketSize));
+
+static struct urb urb_pool[NUM_ENDPOINTS];
+static u8 int_ep_buffer[URB_BUF_SIZE] __attribute__((__aligned__(4)));
+
+static int endpoint_is_int(struct usb_endpoint_instance *instance)
+{
+ if (!instance)
+ return 0;
+
+ if (instance->tx_attributes == USB_ENDPOINT_XFER_INT)
+ return 1;
+ else
+ return 0;
+}
+static void usbser_init_instances (void)
+{
+ int i;
+
+ /* initialize device instance */
+ memset (device_instance, 0, sizeof (struct usb_device_instance));
+ if (!udc_is_initialized())
+ device_instance->device_state = STATE_INIT;
+ else
+ device_instance->device_state = STATE_CONFIGURED;
+ device_instance->device_descriptor = &device_descriptor;
+#if defined(CONFIG_USBD_HS)
+ device_instance->qualifier_descriptor = &qualifier_descriptor;
+#endif
+ device_instance->event = usbser_event_handler;
+ device_instance->cdc_recv_setup = usbser_cdc_setup;
+ device_instance->bus = bus_instance;
+ device_instance->configurations = NUM_CONFIGS;
+ device_instance->configuration_instance_array = config_instance;
+
+ /* initialize bus instance */
+ memset (bus_instance, 0, sizeof (struct usb_bus_instance));
+ bus_instance->device = device_instance;
+ bus_instance->endpoint_array = endpoint_instance;
+ bus_instance->max_endpoints = 1;
+ bus_instance->maxpacketsize = 64;
+
+ /* configuration instance */
+ memset (config_instance, 0,
+ sizeof (struct usb_configuration_instance));
+ config_instance->interfaces = NUM_ACM_INTERFACES;
+ config_instance->configuration_descriptor = configuration_descriptor;
+ config_instance->interface_instance_array = interface_instance;
+
+ /* interface instance */
+ memset (interface_instance, 0,
+ sizeof (struct usb_interface_instance));
+ interface_instance->alternates = 1;
+ interface_instance->alternates_instance_array = alternate_instance;
+
+ /* alternates instance */
+ memset (alternate_instance, 0,
+ sizeof (struct usb_alternate_instance));
+ alternate_instance->interface_descriptor = interface_descriptors;
+ alternate_instance->endpoints = NUM_ENDPOINTS;
+ alternate_instance->endpoints_descriptor_array = ep_descriptor_ptrs;
+
+ /* endpoint instances */
+ memset (&endpoint_instance[0], 0,
+ sizeof (struct usb_endpoint_instance));
+ endpoint_instance[0].endpoint_address = 0;
+ endpoint_instance[0].rcv_packetSize = EP0_MAX_PACKET_SIZE;
+ endpoint_instance[0].rcv_attributes = USB_ENDPOINT_XFER_CONTROL;
+ endpoint_instance[0].tx_packetSize = EP0_MAX_PACKET_SIZE;
+ endpoint_instance[0].tx_attributes = USB_ENDPOINT_XFER_CONTROL;
+ udc_setup_ep (device_instance, 0, &endpoint_instance[0]);
+
+ for (i = 1; i <= NUM_ENDPOINTS; i++) {
+ memset (&endpoint_instance[i], 0,
+ sizeof (struct usb_endpoint_instance));
+
+ endpoint_instance[i].endpoint_address =
+ ep_descriptor_ptrs[i - 1]->bEndpointAddress;
+
+ endpoint_instance[i].rcv_attributes =
+ ep_descriptor_ptrs[i - 1]->bmAttributes;
+
+ endpoint_instance[i].rcv_packetSize = init_wMaxPacketSize(i);
+
+ endpoint_instance[i].tx_attributes =
+ ep_descriptor_ptrs[i - 1]->bmAttributes;
+
+ endpoint_instance[i].tx_packetSize = init_wMaxPacketSize(i);
+
+
+ urb_link_init (&endpoint_instance[i].rcv);
+ urb_link_init (&endpoint_instance[i].rdy);
+ urb_link_init (&endpoint_instance[i].tx);
+ urb_link_init (&endpoint_instance[i].done);
+
+ if (endpoint_instance[i].endpoint_address & USB_DIR_IN) {
+ endpoint_instance[i].tx_urb = &urb_pool[i - 1];
+ /* function only has one interrupt endpoint */
+ if (endpoint_is_int(&endpoint_instance[i]))
+ usbd_init_urb (endpoint_instance[i].tx_urb, device_instance,
+ &endpoint_instance[i], int_ep_buffer, URB_BUF_SIZE);
+ else // bulk in&out re-use buffer with application driver
+ usbd_init_urb (endpoint_instance[i].tx_urb, device_instance,
+ &endpoint_instance[i], NULL, 0);
+ } else {
+ endpoint_instance[i].rcv_urb = &urb_pool[i - 1];
+ usbd_init_urb (endpoint_instance[i].rcv_urb, device_instance,
+ &endpoint_instance[i], NULL, 0);
+ }
+ }
+}
+
+static void usbser_init_endpoints (void)
+{
+ int i;
+
+ bus_instance->max_endpoints = NUM_ENDPOINTS + 1;
+
+ for (i = 0; i < NUM_ENDPOINTS; i++) {
+ if (((ep_descriptor_ptrs[i]->bmAttributes &
+ USB_ENDPOINT_XFERTYPE_MASK) ==
+ USB_ENDPOINT_XFER_BULK)
+ && is_usbd_high_speed()) {
+
+ init_write_wMaxPacketSize(CONFIG_USBD_SERIAL_BULK_HS_PKTSIZE, i+1);
+ }
+
+ endpoint_instance[i + 1].tx_packetSize = init_wMaxPacketSize(i + 1);
+ endpoint_instance[i + 1].rcv_packetSize = init_wMaxPacketSize(i + 1);
+
+ udc_setup_ep (device_instance, i + 1, &endpoint_instance[i+1]);
+ }
+}
+
+/* usbser_init_terminal_type
+ *
+ * Do some late binding for our device type.
+ */
+static void usbser_init_terminal_type(void)
+{
+ /* CDC ACM */
+ /* Assign endpoint descriptors */
+ ep_descriptor_ptrs[0] =
+ &acm_configuration_descriptors[0].notification_endpoint;
+ ep_descriptor_ptrs[1] =
+ &acm_configuration_descriptors[0].data_endpoints[0];
+ ep_descriptor_ptrs[2] =
+ &acm_configuration_descriptors[0].data_endpoints[1];
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ ep_descriptor_ptrs[3] =
+ &acm_configuration_descriptors[0].notification_endpoint2;
+ ep_descriptor_ptrs[4] =
+ &acm_configuration_descriptors[0].data_endpoints2[0];
+ ep_descriptor_ptrs[5] =
+ &acm_configuration_descriptors[0].data_endpoints2[1];
+#endif
+
+#if defined(CONFIG_USBD_HS)
+ qualifier_descriptor.bDeviceClass =
+ COMMUNICATIONS_DEVICE_CLASS;
+#endif
+ /* Assign endpoint indices */
+ tx_endpoint[0] = UDC_IN_ENDPOINT;
+ rx_endpoint[0] = UDC_OUT_ENDPOINT;
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ tx_endpoint[1] = UDC_IN_ENDPOINT2;
+ rx_endpoint[1] = UDC_OUT_ENDPOINT2;
+#endif
+
+ /* Configuration Descriptor */
+ configuration_descriptor =
+ (struct usb_configuration_descriptor*)
+ &acm_configuration_descriptors;
+
+}
+
+static int usbser_configured (void)
+{
+ return usbser_configured_flag;
+}
+
+/******************************************************************************/
+
+static void usbser_event_handler (struct usb_device_instance *device,
+ usb_device_event_t event, int data)
+{
+ switch (event) {
+ case DEVICE_RESET:
+ case DEVICE_BUS_INACTIVE:
+ usbser_configured_flag = 0;
+ break;
+ case DEVICE_CONFIGURED:
+ usbser_configured_flag = 1;
+ break;
+
+ case DEVICE_ADDRESS_ASSIGNED:
+ usbser_init_endpoints ();
+
+ default:
+ break;
+ }
+}
+
+/******************************************************************************/
+
+int usbser_cdc_setup(struct usb_device_request *request, struct urb *urb)
+{
+ switch (request->bRequest){
+
+ case ACM_SET_CONTROL_LINE_STATE: /* Implies DTE ready */
+ break;
+ case ACM_SEND_ENCAPSULATED_COMMAND : /* Required */
+ break;
+ case ACM_SET_LINE_ENCODING : /* DTE stop/parity bits
+ * per character */
+ break;
+ case ACM_GET_ENCAPSULATED_RESPONSE : /* request response */
+ break;
+ case ACM_GET_LINE_ENCODING : /* request DTE rate,
+ * stop/parity bits */
+ memcpy (urb->buffer , &rs232_desc, sizeof(rs232_desc));
+ urb->actual_length = sizeof(rs232_desc);
+
+ break;
+ default:
+ return 1;
+ }
+ return 0;
+}
+
+/******************************************************************************/
+#include <command.h>
+int usbser_test(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+{
+ char c;
+
+ drv_usbser_init();
+ serial_puts("usb tty test\n");
+ while (1) {
+ c = usbser_getc(USB_ACM_CHAN_0);
+ serial_putc(c);
+ //usbser_puts("from usb ");
+ usbser_putc(USB_ACM_CHAN_0, c);
+ //usbser_puts("\n");
+ if (c == 'Q' || c == 'q')
+ break;
+ }
+ return 0;
+}
+
+U_BOOT_CMD(usbser_test, 1, 1, usbser_test,
+ "rda usbserial test", "loopback everything to user");
diff --git a/drivers/serial/usbser.h b/drivers/serial/usbser.h
new file mode 100644
index 0000000000..7c244d3641
--- /dev/null
+++ b/drivers/serial/usbser.h
@@ -0,0 +1,64 @@
+/*
+ * (C) Copyright 2003
+ * Gerry Hamel, geh@ti.com, Texas Instruments
+ *
+ * (C) Copyright 2006
+ * Bryan O'Donoghue, bodonoghue@codehermit.ie, CodeHermit
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef __USB_SER_H__
+#define __USB_SER_H__
+
+#include <usbdevice.h>
+#include <usb/musb_udc.h>
+
+
+
+/* If no VendorID/ProductID is defined in config.h, pretend to be Linux
+ * DO NOT Reuse this Vendor/Product setup with protocol incompatible devices */
+#ifndef CONFIG_USBD_VENDORID
+#define CONFIG_USBD_VENDORID 0x0525 /* Linux/NetChip */
+#endif
+#ifndef CONFIG_USBD_PRODUCTID_GSERIAL
+#define CONFIG_USBD_PRODUCTID_GSERIAL 0xa4a6 /* gserial */
+#endif
+#ifndef CONFIG_USBD_PRODUCTID_CDCACM
+#define CONFIG_USBD_PRODUCTID_CDCACM 0xa4a7 /* CDC ACM */
+#endif
+#ifndef CONFIG_USBD_PRODUCTID_RDAACM
+#define CONFIG_USBD_PRODUCTID_RDAACM 0xa4a9 /* for two acm channels */
+#endif
+
+#define CONFIG_USBD_SERIAL_OUT_ENDPOINT UDC_OUT_ENDPOINT
+#define CONFIG_USBD_SERIAL_OUT_PKTSIZE UDC_OUT_PACKET_SIZE
+#define CONFIG_USBD_SERIAL_IN_ENDPOINT UDC_IN_ENDPOINT
+#define CONFIG_USBD_SERIAL_IN_PKTSIZE UDC_IN_PACKET_SIZE
+#define CONFIG_USBD_SERIAL_INT_ENDPOINT UDC_INT_ENDPOINT
+#define CONFIG_USBD_SERIAL_INT_PKTSIZE UDC_INT_PACKET_SIZE
+#define CONFIG_USBD_SERIAL_BULK_PKTSIZE UDC_BULK_PACKET_SIZE
+
+#if defined(CONFIG_USBD_HS)
+#define CONFIG_USBD_SERIAL_BULK_HS_PKTSIZE UDC_BULK_HS_PACKET_SIZE
+#endif
+
+#define USBTTY_DEVICE_CLASS COMMUNICATIONS_DEVICE_CLASS
+
+#define USBTTY_BCD_DEVICE 0x00
+#define USBTTY_MAXPOWER 0x00
+
+#endif
diff --git a/drivers/spi/mxs_spi.c b/drivers/spi/mxs_spi.c
index 4e6f14ee07..7859536a67 100644
--- a/drivers/spi/mxs_spi.c
+++ b/drivers/spi/mxs_spi.c
@@ -34,6 +34,8 @@
#define MXS_SPI_MAX_TIMEOUT 1000000
#define MXS_SPI_PORT_OFFSET 0x2000
+#define MXS_SSP_CHIPSELECT_MASK 0x00300000
+#define MXS_SSP_CHIPSELECT_SHIFT 20
struct mxs_spi_slave {
struct spi_slave slave;
@@ -51,14 +53,25 @@ void spi_init(void)
{
}
+int spi_cs_is_valid(unsigned int bus, unsigned int cs)
+{
+ /* MXS SPI: 4 ports and 3 chip selects maximum */
+ if (bus > 3 || cs > 2)
+ return 0;
+ else
+ return 1;
+}
+
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
unsigned int max_hz, unsigned int mode)
{
struct mxs_spi_slave *mxs_slave;
uint32_t addr;
+ struct mx28_ssp_regs *ssp_regs;
+ int reg;
- if (bus > 3) {
- printf("MXS SPI: Max bus number is 3\n");
+ if (!spi_cs_is_valid(bus, cs)) {
+ printf("mxs_spi: invalid bus %d / chip select %d\n", bus, cs);
return NULL;
}
@@ -73,7 +86,13 @@ struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs,
mxs_slave->max_khz = max_hz / 1000;
mxs_slave->mode = mode;
mxs_slave->regs = (struct mx28_ssp_regs *)addr;
+ ssp_regs = mxs_slave->regs;
+
+ reg = readl(&ssp_regs->hw_ssp_ctrl0);
+ reg &= ~(MXS_SSP_CHIPSELECT_MASK);
+ reg |= cs << MXS_SSP_CHIPSELECT_SHIFT;
+ writel(reg, &ssp_regs->hw_ssp_ctrl0);
return &mxs_slave->slave;
}
diff --git a/drivers/usb/eth/asix.c b/drivers/usb/eth/asix.c
index 2f116c0cb6..a3bf51a64d 100644
--- a/drivers/usb/eth/asix.c
+++ b/drivers/usb/eth/asix.c
@@ -419,7 +419,7 @@ out_err:
return -1;
}
-static int asix_send(struct eth_device *eth, volatile void *packet, int length)
+static int asix_send(struct eth_device *eth, void *packet, int length)
{
struct ueth_data *dev = (struct ueth_data *)eth->priv;
int err;
diff --git a/drivers/usb/eth/smsc95xx.c b/drivers/usb/eth/smsc95xx.c
index 2f63340fdb..c7aebea4e3 100644
--- a/drivers/usb/eth/smsc95xx.c
+++ b/drivers/usb/eth/smsc95xx.c
@@ -657,8 +657,7 @@ static int smsc95xx_init(struct eth_device *eth, bd_t *bd)
return 0;
}
-static int smsc95xx_send(struct eth_device *eth, volatile void* packet,
- int length)
+static int smsc95xx_send(struct eth_device *eth, void* packet, int length)
{
struct ueth_data *dev = (struct ueth_data *)eth->priv;
int err;
diff --git a/drivers/usb/gadget/Makefile b/drivers/usb/gadget/Makefile
index 87d1918cb9..c3eca4b9fe 100644
--- a/drivers/usb/gadget/Makefile
+++ b/drivers/usb/gadget/Makefile
@@ -47,6 +47,10 @@ COBJS-$(CONFIG_CPU_PXA27X) += pxa27x_udc.o
endif
endif
+ifndef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_USB_FASTBOOT) += f_fastboot.o fastboot.o
+endif
+
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS))
diff --git a/drivers/usb/gadget/composite.c b/drivers/usb/gadget/composite.c
new file mode 100644
index 0000000000..ebb5131a9c
--- /dev/null
+++ b/drivers/usb/gadget/composite.c
@@ -0,0 +1,1082 @@
+/*
+ * composite.c - infrastructure for Composite USB Gadgets
+ *
+ * Copyright (C) 2006-2008 David Brownell
+ * U-boot porting: Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#undef DEBUG
+
+#include <linux/bitops.h>
+#include <linux/usb/composite.h>
+
+#define USB_BUFSIZ 4096
+
+static struct usb_composite_driver *composite;
+
+/**
+ * usb_add_function() - add a function to a configuration
+ * @config: the configuration
+ * @function: the function being added
+ * Context: single threaded during gadget setup
+ *
+ * After initialization, each configuration must have one or more
+ * functions added to it. Adding a function involves calling its @bind()
+ * method to allocate resources such as interface and string identifiers
+ * and endpoints.
+ *
+ * This function returns the value of the function's bind(), which is
+ * zero for success else a negative errno value.
+ */
+int usb_add_function(struct usb_configuration *config,
+ struct usb_function *function)
+{
+ int value = -EINVAL;
+
+ debug("adding '%s'/%p to config '%s'/%p\n",
+ function->name, function,
+ config->label, config);
+
+ if (!function->set_alt || !function->disable)
+ goto done;
+
+ function->config = config;
+ list_add_tail(&function->list, &config->functions);
+
+ if (function->bind) {
+ value = function->bind(config, function);
+ if (value < 0) {
+ list_del(&function->list);
+ function->config = NULL;
+ }
+ } else
+ value = 0;
+
+ if (!config->fullspeed && function->descriptors)
+ config->fullspeed = 1;
+ if (!config->highspeed && function->hs_descriptors)
+ config->highspeed = 1;
+
+done:
+ if (value)
+ debug("adding '%s'/%p --> %d\n",
+ function->name, function, value);
+ return value;
+}
+
+/**
+ * usb_function_deactivate - prevent function and gadget enumeration
+ * @function: the function that isn't yet ready to respond
+ *
+ * Blocks response of the gadget driver to host enumeration by
+ * preventing the data line pullup from being activated. This is
+ * normally called during @bind() processing to change from the
+ * initial "ready to respond" state, or when a required resource
+ * becomes available.
+ *
+ * For example, drivers that serve as a passthrough to a userspace
+ * daemon can block enumeration unless that daemon (such as an OBEX,
+ * MTP, or print server) is ready to handle host requests.
+ *
+ * Not all systems support software control of their USB peripheral
+ * data pullups.
+ *
+ * Returns zero on success, else negative errno.
+ */
+int usb_function_deactivate(struct usb_function *function)
+{
+ struct usb_composite_dev *cdev = function->config->cdev;
+ int status = 0;
+
+ if (cdev->deactivations == 0)
+ status = usb_gadget_disconnect(cdev->gadget);
+ if (status == 0)
+ cdev->deactivations++;
+
+ return status;
+}
+
+/**
+ * usb_function_activate - allow function and gadget enumeration
+ * @function: function on which usb_function_activate() was called
+ *
+ * Reverses effect of usb_function_deactivate(). If no more functions
+ * are delaying their activation, the gadget driver will respond to
+ * host enumeration procedures.
+ *
+ * Returns zero on success, else negative errno.
+ */
+int usb_function_activate(struct usb_function *function)
+{
+ struct usb_composite_dev *cdev = function->config->cdev;
+ int status = 0;
+
+ if (cdev->deactivations == 0)
+ status = -EINVAL;
+ else {
+ cdev->deactivations--;
+ if (cdev->deactivations == 0)
+ status = usb_gadget_connect(cdev->gadget);
+ }
+
+ return status;
+}
+
+/**
+ * usb_interface_id() - allocate an unused interface ID
+ * @config: configuration associated with the interface
+ * @function: function handling the interface
+ * Context: single threaded during gadget setup
+ *
+ * usb_interface_id() is called from usb_function.bind() callbacks to
+ * allocate new interface IDs. The function driver will then store that
+ * ID in interface, association, CDC union, and other descriptors. It
+ * will also handle any control requests targetted at that interface,
+ * particularly changing its altsetting via set_alt(). There may
+ * also be class-specific or vendor-specific requests to handle.
+ *
+ * All interface identifier should be allocated using this routine, to
+ * ensure that for example different functions don't wrongly assign
+ * different meanings to the same identifier. Note that since interface
+ * identifers are configuration-specific, functions used in more than
+ * one configuration (or more than once in a given configuration) need
+ * multiple versions of the relevant descriptors.
+ *
+ * Returns the interface ID which was allocated; or -ENODEV if no
+ * more interface IDs can be allocated.
+ */
+int usb_interface_id(struct usb_configuration *config,
+ struct usb_function *function)
+{
+ unsigned char id = config->next_interface_id;
+
+ if (id < MAX_CONFIG_INTERFACES) {
+ config->interface[id] = function;
+ config->next_interface_id = id + 1;
+ return id;
+ }
+ return -ENODEV;
+}
+
+static int config_buf(struct usb_configuration *config,
+ enum usb_device_speed speed, void *buf, u8 type)
+{
+ int len = USB_BUFSIZ - USB_DT_CONFIG_SIZE;
+ void *next = buf + USB_DT_CONFIG_SIZE;
+ struct usb_descriptor_header **descriptors;
+ struct usb_config_descriptor *c = buf;
+ int status;
+ struct usb_function *f;
+
+ /* write the config descriptor */
+ c = buf;
+ c->bLength = USB_DT_CONFIG_SIZE;
+ c->bDescriptorType = type;
+
+ c->bNumInterfaces = config->next_interface_id;
+ c->bConfigurationValue = config->bConfigurationValue;
+ c->iConfiguration = config->iConfiguration;
+ c->bmAttributes = USB_CONFIG_ATT_ONE | config->bmAttributes;
+ c->bMaxPower = config->bMaxPower ? : (CONFIG_USB_GADGET_VBUS_DRAW / 2);
+
+ /* There may be e.g. OTG descriptors */
+ if (config->descriptors) {
+ status = usb_descriptor_fillbuf(next, len,
+ config->descriptors);
+ if (status < 0)
+ return status;
+ len -= status;
+ next += status;
+ }
+
+ /* add each function's descriptors */
+ list_for_each_entry(f, &config->functions, list) {
+ if (speed == USB_SPEED_HIGH)
+ descriptors = f->hs_descriptors;
+ else
+ descriptors = f->descriptors;
+ if (!descriptors)
+ continue;
+ status = usb_descriptor_fillbuf(next, len,
+ (const struct usb_descriptor_header **) descriptors);
+ if (status < 0)
+ return status;
+ len -= status;
+ next += status;
+ }
+
+ len = next - buf;
+ c->wTotalLength = cpu_to_le16(len);
+ return len;
+}
+
+static int config_desc(struct usb_composite_dev *cdev, unsigned w_value)
+{
+ enum usb_device_speed speed = USB_SPEED_UNKNOWN;
+ struct usb_gadget *gadget = cdev->gadget;
+ u8 type = w_value >> 8;
+ int hs = 0;
+ struct usb_configuration *c;
+
+ if (gadget_is_dualspeed(gadget)) {
+ if (gadget->speed == USB_SPEED_HIGH)
+ hs = 1;
+ if (type == USB_DT_OTHER_SPEED_CONFIG)
+ hs = !hs;
+ if (hs)
+ speed = USB_SPEED_HIGH;
+ }
+
+ w_value &= 0xff;
+ list_for_each_entry(c, &cdev->configs, list) {
+ if (speed == USB_SPEED_HIGH) {
+ if (!c->highspeed)
+ continue;
+ } else {
+ if (!c->fullspeed)
+ continue;
+ }
+ if (w_value == 0)
+ return config_buf(c, speed, cdev->req->buf, type);
+ w_value--;
+ }
+ return -EINVAL;
+}
+
+static int count_configs(struct usb_composite_dev *cdev, unsigned type)
+{
+ struct usb_gadget *gadget = cdev->gadget;
+ unsigned count = 0;
+ int hs = 0;
+ struct usb_configuration *c;
+
+ if (gadget_is_dualspeed(gadget)) {
+ if (gadget->speed == USB_SPEED_HIGH)
+ hs = 1;
+ if (type == USB_DT_DEVICE_QUALIFIER)
+ hs = !hs;
+ }
+ list_for_each_entry(c, &cdev->configs, list) {
+ /* ignore configs that won't work at this speed */
+ if (hs) {
+ if (!c->highspeed)
+ continue;
+ } else {
+ if (!c->fullspeed)
+ continue;
+ }
+ count++;
+ }
+ return count;
+}
+
+static void device_qual(struct usb_composite_dev *cdev)
+{
+ struct usb_qualifier_descriptor *qual = cdev->req->buf;
+
+ qual->bLength = sizeof(*qual);
+ qual->bDescriptorType = USB_DT_DEVICE_QUALIFIER;
+ /* POLICY: same bcdUSB and device type info at both speeds */
+ qual->bcdUSB = cdev->desc.bcdUSB;
+ qual->bDeviceClass = cdev->desc.bDeviceClass;
+ qual->bDeviceSubClass = cdev->desc.bDeviceSubClass;
+ qual->bDeviceProtocol = cdev->desc.bDeviceProtocol;
+ /* ASSUME same EP0 fifo size at both speeds */
+ qual->bMaxPacketSize0 = cdev->desc.bMaxPacketSize0;
+ qual->bNumConfigurations = count_configs(cdev, USB_DT_DEVICE_QUALIFIER);
+ qual->bRESERVED = 0;
+}
+
+static void reset_config(struct usb_composite_dev *cdev)
+{
+ struct usb_function *f;
+
+ debug("%s:\n", __func__);
+
+ list_for_each_entry(f, &cdev->config->functions, list) {
+ if (f->disable)
+ f->disable(f);
+
+ bitmap_zero(f->endpoints, 32);
+ }
+ cdev->config = NULL;
+}
+
+static int set_config(struct usb_composite_dev *cdev,
+ const struct usb_ctrlrequest *ctrl, unsigned number)
+{
+ struct usb_gadget *gadget = cdev->gadget;
+ unsigned power = gadget_is_otg(gadget) ? 8 : 100;
+ struct usb_descriptor_header **descriptors;
+ int result = -EINVAL;
+ struct usb_endpoint_descriptor *ep;
+ struct usb_configuration *c = NULL;
+ int addr;
+ int tmp;
+ struct usb_function *f;
+
+ if (cdev->config)
+ reset_config(cdev);
+
+ if (number) {
+ list_for_each_entry(c, &cdev->configs, list) {
+ if (c->bConfigurationValue == number) {
+ result = 0;
+ break;
+ }
+ }
+ if (result < 0)
+ goto done;
+ } else
+ result = 0;
+
+ debug("%s: %s speed config #%d: %s\n", __func__,
+ ({ char *speed;
+ switch (gadget->speed) {
+ case USB_SPEED_LOW:
+ speed = "low";
+ break;
+ case USB_SPEED_FULL:
+ speed = "full";
+ break;
+ case USB_SPEED_HIGH:
+ speed = "high";
+ break;
+ default:
+ speed = "?";
+ break;
+ };
+ speed;
+ }), number, c ? c->label : "unconfigured");
+
+ if (!c)
+ goto done;
+
+ cdev->config = c;
+
+ /* Initialize all interfaces by setting them to altsetting zero. */
+ for (tmp = 0; tmp < MAX_CONFIG_INTERFACES; tmp++) {
+ f = c->interface[tmp];
+ if (!f)
+ break;
+
+ /*
+ * Record which endpoints are used by the function. This is used
+ * to dispatch control requests targeted at that endpoint to the
+ * function's setup callback instead of the current
+ * configuration's setup callback.
+ */
+ if (gadget->speed == USB_SPEED_HIGH)
+ descriptors = f->hs_descriptors;
+ else
+ descriptors = f->descriptors;
+
+ for (; *descriptors; ++descriptors) {
+ if ((*descriptors)->bDescriptorType != USB_DT_ENDPOINT)
+ continue;
+
+ ep = (struct usb_endpoint_descriptor *)*descriptors;
+ addr = ((ep->bEndpointAddress & 0x80) >> 3)
+ | (ep->bEndpointAddress & 0x0f);
+ __set_bit(addr, f->endpoints);
+ }
+
+ result = f->set_alt(f, tmp, 0);
+ if (result < 0) {
+ debug("interface %d (%s/%p) alt 0 --> %d\n",
+ tmp, f->name, f, result);
+
+ reset_config(cdev);
+ goto done;
+ }
+ }
+
+ /* when we return, be sure our power usage is valid */
+ power = c->bMaxPower ? (2 * c->bMaxPower) : CONFIG_USB_GADGET_VBUS_DRAW;
+done:
+ usb_gadget_vbus_draw(gadget, power);
+ return result;
+}
+
+/**
+ * usb_add_config() - add a configuration to a device.
+ * @cdev: wraps the USB gadget
+ * @config: the configuration, with bConfigurationValue assigned
+ * Context: single threaded during gadget setup
+ *
+ * One of the main tasks of a composite driver's bind() routine is to
+ * add each of the configurations it supports, using this routine.
+ *
+ * This function returns the value of the configuration's bind(), which
+ * is zero for success else a negative errno value. Binding configurations
+ * assigns global resources including string IDs, and per-configuration
+ * resources such as interface IDs and endpoints.
+ */
+int usb_add_config(struct usb_composite_dev *cdev,
+ struct usb_configuration *config)
+{
+ int status = -EINVAL;
+ struct usb_configuration *c;
+ struct usb_function *f;
+ unsigned int i;
+
+ debug("%s: adding config #%u '%s'/%p\n", __func__,
+ config->bConfigurationValue,
+ config->label, config);
+
+ if (!config->bConfigurationValue || !config->bind)
+ goto done;
+
+ /* Prevent duplicate configuration identifiers */
+ list_for_each_entry(c, &cdev->configs, list) {
+ if (c->bConfigurationValue == config->bConfigurationValue) {
+ status = -EBUSY;
+ goto done;
+ }
+ }
+
+ config->cdev = cdev;
+ list_add_tail(&config->list, &cdev->configs);
+
+ INIT_LIST_HEAD(&config->functions);
+ config->next_interface_id = 0;
+
+ status = config->bind(config);
+ if (status < 0) {
+ list_del(&config->list);
+ config->cdev = NULL;
+ } else {
+ debug("cfg %d/%p speeds:%s%s\n",
+ config->bConfigurationValue, config,
+ config->highspeed ? " high" : "",
+ config->fullspeed
+ ? (gadget_is_dualspeed(cdev->gadget)
+ ? " full"
+ : " full/low")
+ : "");
+
+ for (i = 0; i < MAX_CONFIG_INTERFACES; i++) {
+ f = config->interface[i];
+ if (!f)
+ continue;
+ debug("%s: interface %d = %s/%p\n",
+ __func__, i, f->name, f);
+ }
+ }
+
+ usb_ep_autoconfig_reset(cdev->gadget);
+
+done:
+ if (status)
+ debug("added config '%s'/%u --> %d\n", config->label,
+ config->bConfigurationValue, status);
+ return status;
+}
+
+/*
+ * We support strings in multiple languages ... string descriptor zero
+ * says which languages are supported. The typical case will be that
+ * only one language (probably English) is used, with I18N handled on
+ * the host side.
+ */
+
+static void collect_langs(struct usb_gadget_strings **sp, __le16 *buf)
+{
+ const struct usb_gadget_strings *s;
+ u16 language;
+ __le16 *tmp;
+
+ while (*sp) {
+ s = *sp;
+ language = cpu_to_le16(s->language);
+ for (tmp = buf; *tmp && tmp < &buf[126]; tmp++) {
+ if (*tmp == language)
+ goto repeat;
+ }
+ *tmp++ = language;
+repeat:
+ sp++;
+ }
+}
+
+static int lookup_string(
+ struct usb_gadget_strings **sp,
+ void *buf,
+ u16 language,
+ int id
+)
+{
+ int value;
+ struct usb_gadget_strings *s;
+
+ while (*sp) {
+ s = *sp++;
+ if (s->language != language)
+ continue;
+ value = usb_gadget_get_string(s, id, buf);
+ if (value > 0)
+ return value;
+ }
+ return -EINVAL;
+}
+
+static int get_string(struct usb_composite_dev *cdev,
+ void *buf, u16 language, int id)
+{
+ struct usb_string_descriptor *s = buf;
+ struct usb_gadget_strings **sp;
+ int len;
+ struct usb_configuration *c;
+ struct usb_function *f;
+
+ /*
+ * Yes, not only is USB's I18N support probably more than most
+ * folk will ever care about ... also, it's all supported here.
+ * (Except for UTF8 support for Unicode's "Astral Planes".)
+ */
+
+ /* 0 == report all available language codes */
+ if (id == 0) {
+ memset(s, 0, 256);
+ s->bDescriptorType = USB_DT_STRING;
+
+ sp = composite->strings;
+ if (sp)
+ collect_langs(sp, s->wData);
+
+ list_for_each_entry(c, &cdev->configs, list) {
+ sp = c->strings;
+ if (sp)
+ collect_langs(sp, s->wData);
+
+ list_for_each_entry(f, &c->functions, list) {
+ sp = f->strings;
+ if (sp)
+ collect_langs(sp, s->wData);
+ }
+ }
+
+ for (len = 0; len <= 126 && s->wData[len]; len++)
+ continue;
+ if (!len)
+ return -EINVAL;
+
+ s->bLength = 2 * (len + 1);
+ return s->bLength;
+ }
+
+ /*
+ * Otherwise, look up and return a specified string. String IDs
+ * are device-scoped, so we look up each string table we're told
+ * about. These lookups are infrequent; simpler-is-better here.
+ */
+ if (composite->strings) {
+ len = lookup_string(composite->strings, buf, language, id);
+ if (len > 0)
+ return len;
+ }
+ list_for_each_entry(c, &cdev->configs, list) {
+ if (c->strings) {
+ len = lookup_string(c->strings, buf, language, id);
+ if (len > 0)
+ return len;
+ }
+ list_for_each_entry(f, &c->functions, list) {
+ if (!f->strings)
+ continue;
+ len = lookup_string(f->strings, buf, language, id);
+ if (len > 0)
+ return len;
+ }
+ }
+ return -EINVAL;
+}
+
+/**
+ * usb_string_id() - allocate an unused string ID
+ * @cdev: the device whose string descriptor IDs are being allocated
+ * Context: single threaded during gadget setup
+ *
+ * @usb_string_id() is called from bind() callbacks to allocate
+ * string IDs. Drivers for functions, configurations, or gadgets will
+ * then store that ID in the appropriate descriptors and string table.
+ *
+ * All string identifier should be allocated using this,
+ * @usb_string_ids_tab() or @usb_string_ids_n() routine, to ensure
+ * that for example different functions don't wrongly assign different
+ * meanings to the same identifier.
+ */
+int usb_string_id(struct usb_composite_dev *cdev)
+{
+ if (cdev->next_string_id < 254) {
+ /*
+ * string id 0 is reserved by USB spec for list of
+ * supported languages
+ * 255 reserved as well? -- mina86
+ */
+ cdev->next_string_id++;
+ return cdev->next_string_id;
+ }
+ return -ENODEV;
+}
+
+/**
+ * usb_string_ids() - allocate unused string IDs in batch
+ * @cdev: the device whose string descriptor IDs are being allocated
+ * @str: an array of usb_string objects to assign numbers to
+ * Context: single threaded during gadget setup
+ *
+ * @usb_string_ids() is called from bind() callbacks to allocate
+ * string IDs. Drivers for functions, configurations, or gadgets will
+ * then copy IDs from the string table to the appropriate descriptors
+ * and string table for other languages.
+ *
+ * All string identifier should be allocated using this,
+ * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
+ * example different functions don't wrongly assign different meanings
+ * to the same identifier.
+ */
+int usb_string_ids_tab(struct usb_composite_dev *cdev, struct usb_string *str)
+{
+ u8 next = cdev->next_string_id;
+
+ for (; str->s; ++str) {
+ if (next >= 254)
+ return -ENODEV;
+ str->id = ++next;
+ }
+
+ cdev->next_string_id = next;
+
+ return 0;
+}
+
+/**
+ * usb_string_ids_n() - allocate unused string IDs in batch
+ * @c: the device whose string descriptor IDs are being allocated
+ * @n: number of string IDs to allocate
+ * Context: single threaded during gadget setup
+ *
+ * Returns the first requested ID. This ID and next @n-1 IDs are now
+ * valid IDs. At least provided that @n is non-zero because if it
+ * is, returns last requested ID which is now very useful information.
+ *
+ * @usb_string_ids_n() is called from bind() callbacks to allocate
+ * string IDs. Drivers for functions, configurations, or gadgets will
+ * then store that ID in the appropriate descriptors and string table.
+ *
+ * All string identifier should be allocated using this,
+ * @usb_string_id() or @usb_string_ids_n() routine, to ensure that for
+ * example different functions don't wrongly assign different meanings
+ * to the same identifier.
+ */
+int usb_string_ids_n(struct usb_composite_dev *c, unsigned n)
+{
+ u8 next = c->next_string_id;
+
+ if (n > 254 || next + n > 254)
+ return -ENODEV;
+
+ c->next_string_id += n;
+ return next + 1;
+}
+
+static void composite_setup_complete(struct usb_ep *ep, struct usb_request *req)
+{
+ if (req->status || req->actual != req->length)
+ debug("%s: setup complete --> %d, %d/%d\n", __func__,
+ req->status, req->actual, req->length);
+}
+
+/*
+ * The setup() callback implements all the ep0 functionality that's
+ * not handled lower down, in hardware or the hardware driver(like
+ * device and endpoint feature flags, and their status). It's all
+ * housekeeping for the gadget function we're implementing. Most of
+ * the work is in config and function specific setup.
+ */
+static int
+composite_setup(struct usb_gadget *gadget, const struct usb_ctrlrequest *ctrl)
+{
+ u16 w_length = le16_to_cpu(ctrl->wLength);
+ u16 w_index = le16_to_cpu(ctrl->wIndex);
+ u16 w_value = le16_to_cpu(ctrl->wValue);
+ struct usb_composite_dev *cdev = get_gadget_data(gadget);
+ u8 intf = w_index & 0xFF;
+ int value = -EOPNOTSUPP;
+ struct usb_request *req = cdev->req;
+ struct usb_function *f = NULL;
+ int standard;
+ u8 endp;
+ struct usb_configuration *c;
+
+ /*
+ * partial re-init of the response message; the function or the
+ * gadget might need to intercept e.g. a control-OUT completion
+ * when we delegate to it.
+ */
+ req->zero = 0;
+ req->complete = composite_setup_complete;
+ req->length = USB_BUFSIZ;
+ gadget->ep0->driver_data = cdev;
+ standard = (ctrl->bRequestType & USB_TYPE_MASK)
+ == USB_TYPE_STANDARD;
+ if (!standard)
+ goto unknown;
+
+ switch (ctrl->bRequest) {
+
+ /* we handle all standard USB descriptors */
+ case USB_REQ_GET_DESCRIPTOR:
+ if (ctrl->bRequestType != USB_DIR_IN)
+ goto unknown;
+ switch (w_value >> 8) {
+
+ case USB_DT_DEVICE:
+ cdev->desc.bNumConfigurations =
+ count_configs(cdev, USB_DT_DEVICE);
+ value = min(w_length, (u16) sizeof cdev->desc);
+ memcpy(req->buf, &cdev->desc, value);
+ break;
+ case USB_DT_DEVICE_QUALIFIER:
+ if (!gadget_is_dualspeed(gadget))
+ break;
+ device_qual(cdev);
+ value = min(w_length,
+ sizeof(struct usb_qualifier_descriptor));
+ break;
+ case USB_DT_OTHER_SPEED_CONFIG:
+ if (!gadget_is_dualspeed(gadget))
+ break;
+
+ case USB_DT_CONFIG:
+ value = config_desc(cdev, w_value);
+ if (value >= 0)
+ value = min(w_length, (u16) value);
+ break;
+ case USB_DT_STRING:
+ value = get_string(cdev, req->buf,
+ w_index, w_value & 0xff);
+ if (value >= 0)
+ value = min(w_length, (u16) value);
+ break;
+ default:
+ goto unknown;
+ }
+ break;
+
+ /* any number of configs can work */
+ case USB_REQ_SET_CONFIGURATION:
+ if (ctrl->bRequestType != 0)
+ goto unknown;
+ if (gadget_is_otg(gadget)) {
+ if (gadget->a_hnp_support)
+ debug("HNP available\n");
+ else if (gadget->a_alt_hnp_support)
+ debug("HNP on another port\n");
+ else
+ debug("HNP inactive\n");
+ }
+
+ value = set_config(cdev, ctrl, w_value);
+ break;
+ case USB_REQ_GET_CONFIGURATION:
+ if (ctrl->bRequestType != USB_DIR_IN)
+ goto unknown;
+ if (cdev->config)
+ *(u8 *)req->buf = cdev->config->bConfigurationValue;
+ else
+ *(u8 *)req->buf = 0;
+ value = min(w_length, (u16) 1);
+ break;
+
+ /*
+ * function drivers must handle get/set altsetting; if there's
+ * no get() method, we know only altsetting zero works.
+ */
+ case USB_REQ_SET_INTERFACE:
+ if (ctrl->bRequestType != USB_RECIP_INTERFACE)
+ goto unknown;
+ if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES)
+ break;
+ f = cdev->config->interface[intf];
+ if (!f)
+ break;
+ if (w_value && !f->set_alt)
+ break;
+ value = f->set_alt(f, w_index, w_value);
+ break;
+ case USB_REQ_GET_INTERFACE:
+ if (ctrl->bRequestType != (USB_DIR_IN|USB_RECIP_INTERFACE))
+ goto unknown;
+ if (!cdev->config || w_index >= MAX_CONFIG_INTERFACES)
+ break;
+ f = cdev->config->interface[intf];
+ if (!f)
+ break;
+ /* lots of interfaces only need altsetting zero... */
+ value = f->get_alt ? f->get_alt(f, w_index) : 0;
+ if (value < 0)
+ break;
+ *((u8 *)req->buf) = value;
+ value = min(w_length, (u16) 1);
+ break;
+ default:
+unknown:
+ debug("non-core control req%02x.%02x v%04x i%04x l%d\n",
+ ctrl->bRequestType, ctrl->bRequest,
+ w_value, w_index, w_length);
+
+ /*
+ * functions always handle their interfaces and endpoints...
+ * punt other recipients (other, WUSB, ...) to the current
+ * configuration code.
+ */
+ switch (ctrl->bRequestType & USB_RECIP_MASK) {
+ case USB_RECIP_INTERFACE:
+ f = cdev->config->interface[intf];
+ break;
+
+ case USB_RECIP_ENDPOINT:
+ endp = ((w_index & 0x80) >> 3) | (w_index & 0x0f);
+ list_for_each_entry(f, &cdev->config->functions, list) {
+ if (test_bit(endp, f->endpoints))
+ break;
+ }
+ if (&f->list == &cdev->config->functions)
+ f = NULL;
+ break;
+ }
+
+ if (f && f->setup)
+ value = f->setup(f, ctrl);
+ else {
+ c = cdev->config;
+ if (c && c->setup)
+ value = c->setup(c, ctrl);
+ }
+
+ goto done;
+ }
+
+ /* respond with data transfer before status phase? */
+ if (value >= 0) {
+ req->length = value;
+ req->zero = value < w_length;
+ value = usb_ep_queue(gadget->ep0, req, GFP_KERNEL);
+ if (value < 0) {
+ debug("ep_queue --> %d\n", value);
+ req->status = 0;
+ composite_setup_complete(gadget->ep0, req);
+ }
+ }
+
+done:
+ /* device either stalls (value < 0) or reports success */
+ return value;
+}
+
+static void composite_disconnect(struct usb_gadget *gadget)
+{
+ struct usb_composite_dev *cdev = get_gadget_data(gadget);
+
+ if (cdev->config)
+ reset_config(cdev);
+ if (composite->disconnect)
+ composite->disconnect(cdev);
+}
+
+static void composite_unbind(struct usb_gadget *gadget)
+{
+ struct usb_composite_dev *cdev = get_gadget_data(gadget);
+ struct usb_configuration *c;
+ struct usb_function *f;
+
+ /*
+ * composite_disconnect() must already have been called
+ * by the underlying peripheral controller driver!
+ * so there's no i/o concurrency that could affect the
+ * state protected by cdev->lock.
+ */
+ BUG_ON(cdev->config);
+
+ while (!list_empty(&cdev->configs)) {
+ c = list_first_entry(&cdev->configs,
+ struct usb_configuration, list);
+ while (!list_empty(&c->functions)) {
+ f = list_first_entry(&c->functions,
+ struct usb_function, list);
+ list_del(&f->list);
+ if (f->unbind) {
+ debug("unbind function '%s'/%p\n",
+ f->name, f);
+ f->unbind(c, f);
+ }
+ }
+ list_del(&c->list);
+ if (c->unbind) {
+ debug("unbind config '%s'/%p\n", c->label, c);
+ c->unbind(c);
+ }
+ }
+ if (composite->unbind)
+ composite->unbind(cdev);
+
+ if (cdev->req) {
+ kfree(cdev->req->buf);
+ usb_ep_free_request(gadget->ep0, cdev->req);
+ }
+ kfree(cdev);
+ set_gadget_data(gadget, NULL);
+
+ composite = NULL;
+}
+
+static int composite_bind(struct usb_gadget *gadget)
+{
+ int status = -ENOMEM;
+ struct usb_composite_dev *cdev;
+
+ cdev = calloc(sizeof *cdev, 1);
+ if (!cdev)
+ return status;
+
+ cdev->gadget = gadget;
+ set_gadget_data(gadget, cdev);
+ INIT_LIST_HEAD(&cdev->configs);
+
+ /* preallocate control response and buffer */
+ cdev->req = usb_ep_alloc_request(gadget->ep0, GFP_KERNEL);
+ if (!cdev->req)
+ goto fail;
+ cdev->req->buf = memalign(CONFIG_SYS_CACHELINE_SIZE, USB_BUFSIZ);
+ if (!cdev->req->buf)
+ goto fail;
+ cdev->req->complete = composite_setup_complete;
+ gadget->ep0->driver_data = cdev;
+
+ cdev->bufsiz = USB_BUFSIZ;
+ cdev->driver = composite;
+
+ usb_gadget_set_selfpowered(gadget);
+ usb_ep_autoconfig_reset(cdev->gadget);
+
+ status = composite->bind(cdev);
+ if (status < 0)
+ goto fail;
+
+ cdev->desc = *composite->dev;
+ cdev->desc.bMaxPacketSize0 = gadget->ep0->maxpacket;
+
+ debug("%s: ready\n", composite->name);
+ return 0;
+
+fail:
+ composite_unbind(gadget);
+ return status;
+}
+
+static void
+composite_suspend(struct usb_gadget *gadget)
+{
+ struct usb_composite_dev *cdev = get_gadget_data(gadget);
+ struct usb_function *f;
+
+ debug("%s: suspend\n", __func__);
+ if (cdev->config) {
+ list_for_each_entry(f, &cdev->config->functions, list) {
+ if (f->suspend)
+ f->suspend(f);
+ }
+ }
+ if (composite->suspend)
+ composite->suspend(cdev);
+
+ cdev->suspended = 1;
+}
+
+static void
+composite_resume(struct usb_gadget *gadget)
+{
+ struct usb_composite_dev *cdev = get_gadget_data(gadget);
+ struct usb_function *f;
+
+ debug("%s: resume\n", __func__);
+ if (composite->resume)
+ composite->resume(cdev);
+ if (cdev->config) {
+ list_for_each_entry(f, &cdev->config->functions, list) {
+ if (f->resume)
+ f->resume(f);
+ }
+ }
+
+ cdev->suspended = 0;
+}
+
+static struct usb_gadget_driver composite_driver = {
+ .speed = USB_SPEED_HIGH,
+
+ .bind = composite_bind,
+ .unbind = composite_unbind,
+
+ .setup = composite_setup,
+ .disconnect = composite_disconnect,
+
+ .suspend = composite_suspend,
+ .resume = composite_resume,
+};
+
+/**
+ * usb_composite_register() - register a composite driver
+ * @driver: the driver to register
+ * Context: single threaded during gadget setup
+ *
+ * This function is used to register drivers using the composite driver
+ * framework. The return value is zero, or a negative errno value.
+ * Those values normally come from the driver's @bind method, which does
+ * all the work of setting up the driver to match the hardware.
+ *
+ * On successful return, the gadget is ready to respond to requests from
+ * the host, unless one of its components invokes usb_gadget_disconnect()
+ * while it was binding. That would usually be done in order to wait for
+ * some userspace participation.
+ */
+int usb_composite_register(struct usb_composite_driver *driver)
+{
+ if (!driver || !driver->dev || !driver->bind || composite)
+ return -EINVAL;
+
+ if (!driver->name)
+ driver->name = "composite";
+ composite = driver;
+
+ return usb_gadget_register_driver(&composite_driver);
+}
+
+/**
+ * usb_composite_unregister() - unregister a composite driver
+ * @driver: the driver to unregister
+ *
+ * This function is used to unregister drivers using the composite
+ * driver framework.
+ */
+void usb_composite_unregister(struct usb_composite_driver *driver)
+{
+ if (composite != driver)
+ return;
+ usb_gadget_unregister_driver(&composite_driver);
+}
diff --git a/drivers/usb/gadget/config.c b/drivers/usb/gadget/config.c
index f9163a80ed..f88d0c190c 100644
--- a/drivers/usb/gadget/config.c
+++ b/drivers/usb/gadget/config.c
@@ -27,6 +27,7 @@
#include <linux/string.h>
#include <linux/usb/ch9.h>
+#include <usbdescriptors.h>
#include <linux/usb/gadget.h>
diff --git a/drivers/usb/gadget/core.c b/drivers/usb/gadget/core.c
index 46ab3f67f8..1ab14eb3b4 100644
--- a/drivers/usb/gadget/core.c
+++ b/drivers/usb/gadget/core.c
@@ -364,11 +364,12 @@ void usbd_rcv_complete(struct usb_endpoint_instance *endpoint, int len, int urb_
/*rcv_urb->actual_length, rcv_urb->buffer_length); */
/* check the urb is ok, are we adding data less than the packetsize */
- if (!urb_bad && (len <= endpoint->rcv_packetSize)) {
+ if (!urb_bad) {
/*usbdbg("updating actual_length by %d\n",len); */
/* increment the received data size */
rcv_urb->actual_length += len;
+ rcv_urb->req_length = 0;
} else {
usberr(" RECV_ERROR actual: %d buffer: %d urb_bad: %d\n",
@@ -560,14 +561,55 @@ struct urb *usbd_alloc_urb (struct usb_device_instance *device,
memset (urb, 0, sizeof (struct urb));
urb->endpoint = endpoint;
urb->device = device;
- urb->buffer = (u8 *) urb->buffer_data;
- urb->buffer_length = sizeof (urb->buffer_data);
+ urb->buffer = malloc(URB_BUF_SIZE);
+ if (!urb->buffer) {
+ usberr (" F A T A L: mallocFAILED!!!!");
+ return NULL;
+ }
+ urb->buffer_length = URB_BUF_SIZE;
+ urb->buffer_data = urb->buffer;
urb_link_init (&urb->link);
return urb;
}
+int usbd_init_urb (struct urb *urb,
+ struct usb_device_instance *device,
+ struct usb_endpoint_instance *endpoint,
+ u8 *buf, unsigned int len)
+{
+ /* Fill in known fields */
+ memset (urb, 0, sizeof (struct urb));
+ urb->endpoint = endpoint;
+ urb->device = device;
+ urb->buffer = buf;
+ urb->buffer_length = len;
+ urb->buffer_data = buf;
+
+ urb_link_init (&urb->link);
+
+ return 0;
+}
+
+int usbd_setup_urb(struct urb *urb, u8 *buf, u32 len, int dma)
+{
+ if (urb) {
+ urb->req_length = len;
+ urb->buffer = buf;
+ urb->use_dma = dma;
+ }
+ return 0;
+}
+
+void usbd_free_urb(struct urb *urb)
+{
+ if (urb) {
+ urb->req_length = 0;
+ urb->actual_length = 0;
+ urb->buffer = NULL;
+ }
+}
/**
* usbd_dealloc_urb - deallocate an URB and associated buffer
* @urb: pointer to an urb structure
@@ -577,6 +619,8 @@ struct urb *usbd_alloc_urb (struct usb_device_instance *device,
void usbd_dealloc_urb (struct urb *urb)
{
if (urb) {
+ if (urb->buffer)
+ free (urb->buffer);
free (urb);
}
}
diff --git a/drivers/usb/gadget/ep0.c b/drivers/usb/gadget/ep0.c
index aa8f91600d..40098c5fe9 100644
--- a/drivers/usb/gadget/ep0.c
+++ b/drivers/usb/gadget/ep0.c
@@ -388,6 +388,7 @@ static int ep0_get_descriptor (struct usb_device_instance *device,
* or failure (STALL).
*
*/
+void udc_clear_halt(unsigned int ep, int is_in);
int ep0_recv_setup (struct urb *urb)
{
/*struct usb_device_request *request = urb->buffer; */
@@ -540,14 +541,17 @@ int ep0_recv_setup (struct urb *urb)
return -1;
case USB_REQ_RECIPIENT_ENDPOINT:
- dbg_ep0 (0, "ENDPOINT: %x", le16_to_cpu (request->wValue));
+ serial_printf ("ENDPOINT: %x \n", le16_to_cpu (request->wIndex) & 0x0f);
if (le16_to_cpu (request->wValue) == USB_ENDPOINT_HALT) {
+ u8 epnum = request->wIndex & 0xf;
+ int is_in = request->wIndex & USB_DIR_IN;
/*return usbd_device_feature (device, le16_to_cpu (request->wIndex), */
/* request->bRequest == USB_REQ_SET_FEATURE); */
/* NEED TO IMPLEMENT THIS!!! */
- return -1;
+ udc_clear_halt(epnum, is_in);
+ return 0;
} else {
- dbg_ep0 (1, "request %s bad wValue: %04x",
+ serial_printf ("request %s bad wValue: %04x",
USBD_DEVICE_REQUESTS
(request->bRequest),
le16_to_cpu (request->wValue));
diff --git a/drivers/usb/gadget/epautoconf.c b/drivers/usb/gadget/epautoconf.c
index 5b8776e0b7..b656c8b9f4 100644
--- a/drivers/usb/gadget/epautoconf.c
+++ b/drivers/usb/gadget/epautoconf.c
@@ -23,6 +23,7 @@
#include <common.h>
#include <linux/usb/ch9.h>
+#include <usbdescriptors.h>
#include <asm/errno.h>
#include <linux/usb/gadget.h>
#include <asm/unaligned.h>
diff --git a/drivers/usb/gadget/ether.c b/drivers/usb/gadget/ether.c
index 9fb0e80ad1..d975fb680e 100644
--- a/drivers/usb/gadget/ether.c
+++ b/drivers/usb/gadget/ether.c
@@ -24,6 +24,7 @@
#include <asm/errno.h>
#include <linux/netdevice.h>
#include <linux/usb/ch9.h>
+#include <usbdescriptors.h>
#include <linux/usb/cdc.h>
#include <linux/usb/gadget.h>
#include <net.h>
@@ -2396,8 +2397,7 @@ fail:
return -1;
}
-static int usb_eth_send(struct eth_device *netdev,
- volatile void *packet, int length)
+static int usb_eth_send(struct eth_device *netdev, void *packet, int length)
{
int retval;
void *rndis_pkt = NULL;
@@ -2418,11 +2418,11 @@ static int usb_eth_send(struct eth_device *netdev,
}
rndis_add_hdr(rndis_pkt, length);
memcpy(rndis_pkt + sizeof(struct rndis_packet_msg_type),
- (void *)packet, length);
+ packet, length);
packet = rndis_pkt;
length += sizeof(struct rndis_packet_msg_type);
}
- req->buf = (void *)packet;
+ req->buf = packet;
req->context = NULL;
req->complete = tx_complete;
diff --git a/drivers/usb/gadget/f_fastboot.c b/drivers/usb/gadget/f_fastboot.c
new file mode 100644
index 0000000000..67e5b76911
--- /dev/null
+++ b/drivers/usb/gadget/f_fastboot.c
@@ -0,0 +1,473 @@
+/*
+ * ether.c -- Ethernet gadget driver, with CDC and non-CDC options
+ *
+ * Copyright (C) 2003-2005,2008 David Brownell
+ * Copyright (C) 2003-2004 Robert Schwebel, Benedikt Spranger
+ * Copyright (C) 2008 Nokia Corporation
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#define DEBUG
+
+#include <common.h>
+#include <config.h>
+#include <asm/unaligned.h>
+#include "usbdescriptors.h"
+#include <usbdevice.h>
+
+#if defined(CONFIG_MUSB_UDC)
+#include <usb/musb_udc.h>
+#else
+#error "no usb device controller"
+#endif
+
+#define DEV_CONFIG_CDC 1
+
+/* defined and used by gadget/ep0.c */
+extern struct usb_string_descriptor **usb_strings;
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Thanks to NetChip Technologies for donating this product ID.
+ * It's for devices with only CDC Ethernet configurations.
+ */
+#define FASTBOOT_VENDOR_NUM 0x18D1 /* Goolge VID */
+#define FASTBOOT_PRODUCT_NUM 0x4EE0 /* Bootloader Product ID */
+
+#define FASTBOOT_MANUFACTURER "RDAmicro"
+#define FASTBOOT_PRODUCT_NAME "RDA Droid"
+#define FASTBOOT_CONFIGURATION_STR "fastboot"
+#define FASTBOOT_DATA_INTERFACE_STR "fastboot data intf"
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * DESCRIPTORS ... most are static, but strings and (full) configuration
+ * descriptors are built on demand. For now we do either full CDC, or
+ * our simple subset.
+ */
+
+#define STRING_MANUFACTURER 1
+#define STRING_PRODUCT 2
+#define STRING_DATA 3
+#define STRING_CFG 4
+#define STRING_SERIALNUMBER 5
+
+#define NUM_ENDPOINTS 2
+
+static struct usb_device_instance fastboot_dev_instance[1];
+static struct usb_bus_instance fastboot_bus_instance[1];
+static struct usb_configuration_instance fastboot_cfg_instance;
+static struct usb_interface_instance fastboot_intf_instance[1];
+static struct usb_alternate_instance fastboot_alternate_instance[1];
+/* one extra for control endpoint */
+static struct usb_endpoint_instance fastboot_ep_instance[NUM_ENDPOINTS + 1];
+
+static char serial_number[] = "dragon2012";
+
+static struct usb_endpoint_descriptor *ep_desc_ptrs[NUM_ENDPOINTS];
+
+static struct usb_device_descriptor
+ device_desc = {
+ .bLength = sizeof device_desc,
+ .bDescriptorType = USB_DT_DEVICE,
+
+ .bcdUSB = __constant_cpu_to_le16(0x0200),
+
+ .bDeviceClass = USB_CLASS_VENDOR_SPEC,
+ .bDeviceSubClass = 0,
+ .bDeviceProtocol = 0,
+ .bMaxPacketSize0 = 64,
+ .idVendor = __constant_cpu_to_le16(FASTBOOT_VENDOR_NUM),
+ .idProduct = __constant_cpu_to_le16(FASTBOOT_PRODUCT_NUM),
+ .iManufacturer = STRING_MANUFACTURER,
+ .iProduct = STRING_PRODUCT,
+ .iSerialNumber = STRING_SERIALNUMBER,
+ .bNumConfigurations = 1,
+};
+
+static struct usb_interface_descriptor
+ data_intf = {
+ .bLength = sizeof data_intf,
+ .bDescriptorType = USB_DT_INTERFACE,
+
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = 2,
+ .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
+ .bInterfaceSubClass = 0x42,
+ .bInterfaceProtocol = 3,
+ .iInterface = STRING_DATA,
+};
+
+static struct usb_qualifier_descriptor
+ dev_qualifier = {
+ .bLength = sizeof dev_qualifier,
+ .bDescriptorType = USB_DT_QUAL,
+
+ .bcdUSB = __constant_cpu_to_le16(0x0200),
+ .bDeviceClass = USB_CLASS_VENDOR_SPEC,
+
+ .bMaxPacketSize0 = 64,
+ .bNumConfigurations = 1,
+};
+
+struct fastboot_config_desc {
+ struct usb_configuration_descriptor configuration_desc;
+ struct usb_interface_descriptor interface_desc[1];
+ struct usb_endpoint_descriptor data_eps[NUM_ENDPOINTS];
+} __attribute__ ((packed));
+
+static struct fastboot_config_desc
+fastboot_cfg_desc = {
+ .configuration_desc = {
+ .bLength =
+ sizeof(struct usb_configuration_descriptor),
+ .bDescriptorType = USB_DT_CONFIG,
+ .wTotalLength =
+ cpu_to_le16(sizeof
+ (struct fastboot_config_desc)),
+ .bNumInterfaces = 1,
+ .bConfigurationValue = 1,
+ .iConfiguration = STRING_CFG,
+ .bmAttributes =
+ BMATTRIBUTE_SELF_POWERED | BMATTRIBUTE_RESERVED,
+ .bMaxPower = 0xfa
+ },
+ .interface_desc = {
+ {
+ .bLength = sizeof(struct usb_interface_descriptor),
+ .bDescriptorType = USB_DT_INTERFACE,
+ .bInterfaceNumber = 0,
+ .bAlternateSetting = 0,
+ .bNumEndpoints = NUM_ENDPOINTS,
+ .bInterfaceClass = USB_CLASS_VENDOR_SPEC,
+ .bInterfaceSubClass = 0x42,
+ .bInterfaceProtocol = 3,
+ .iInterface = STRING_DATA
+ },
+ },
+ .data_eps = {
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = (1) | USB_DIR_OUT,
+ .bmAttributes = USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize = cpu_to_le16(64),
+ .bInterval = 0xFF,
+ },
+ {
+ .bLength = sizeof(struct usb_endpoint_descriptor),
+ .bDescriptorType = USB_DT_ENDPOINT,
+ .bEndpointAddress = (2) | USB_DIR_IN,
+ .bmAttributes = USB_ENDPOINT_XFER_BULK,
+ .wMaxPacketSize = cpu_to_le16(64),
+ .bInterval = 0xFF,
+ },
+ },
+};
+
+/*-------------------------------------------------------------------------*/
+
+
+
+static int fastboot_configured_flag = 0;
+
+static void fastboot_init_endpoints(void);
+static void fastboot_event_handler(struct usb_device_instance *device,
+ usb_device_event_t event, int data)
+{
+#if defined(CONFIG_USBD_HS)
+ int i;
+#endif
+ switch (event) {
+ case DEVICE_RESET:
+ case DEVICE_BUS_INACTIVE:
+ fastboot_configured_flag = 0;
+
+ break;
+ case DEVICE_CONFIGURED:
+ fastboot_configured_flag = 1;
+ break;
+
+ case DEVICE_ADDRESS_ASSIGNED:
+#if defined(CONFIG_USBD_HS)
+ /*
+ * is_usbd_high_speed routine needs to be defined by
+ * specific gadget driver
+ * It returns TRUE if device enumerates at High speed
+ * Retuns FALSE otherwise
+ */
+ for (i = 0; i < NUM_ENDPOINTS; i++) {
+ if (((ep_desc_ptrs[i]->bmAttributes &
+ USB_ENDPOINT_XFERTYPE_MASK) ==
+ USB_ENDPOINT_XFER_BULK)
+ && is_usbd_high_speed()) {
+
+ ep_desc_ptrs[i]->wMaxPacketSize = 512;
+ }
+
+ fastboot_ep_instance[i + 1].tx_packetSize =
+ ep_desc_ptrs[i]->wMaxPacketSize;
+ fastboot_ep_instance[i + 1].rcv_packetSize =
+ ep_desc_ptrs[i]->wMaxPacketSize;
+ }
+#endif
+ fastboot_init_endpoints();
+
+ default:
+ break;
+ }
+}
+
+/* utility function for converting char* to wide string used by USB */
+static void str2wide (char *str, u16 * wide)
+{
+ int i;
+ for (i = 0; i < strlen (str) && str[i]; i++){
+ #if defined(__LITTLE_ENDIAN)
+ wide[i] = (u16) str[i];
+ #elif defined(__BIG_ENDIAN)
+ wide[i] = ((u16)(str[i])<<8);
+ #else
+ #error "__LITTLE_ENDIAN or __BIG_ENDIAN undefined"
+ #endif
+ }
+}
+
+static struct usb_string_descriptor *fastboot_str_tab[10];
+
+static void fastboot_init_strings (void)
+{
+ struct usb_string_descriptor *string;
+
+ static u8 wstrLang[4] = {4,USB_DT_STRING,0x9,0x4};
+ static u8 wstrManufacturer[2 + 2*(sizeof(FASTBOOT_MANUFACTURER)-1)];
+ static u8 wstrProduct[2 + 2*(sizeof(FASTBOOT_PRODUCT_NAME)-1)];
+ static u8 wstrSerial[2 + 2*(sizeof(serial_number) - 1)];
+ static u8 wstrConfiguration[2 + 2*(sizeof(FASTBOOT_CONFIGURATION_STR)-1)];
+ static u8 wstrDataInterface[2 + 2*(sizeof(FASTBOOT_DATA_INTERFACE_STR)-1)];
+
+
+
+ fastboot_str_tab[0] =
+ (struct usb_string_descriptor*)wstrLang;
+
+ string = (struct usb_string_descriptor *) wstrManufacturer;
+ string->bLength = sizeof(wstrManufacturer);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (FASTBOOT_MANUFACTURER, string->wData);
+ fastboot_str_tab[STRING_MANUFACTURER]=string;
+
+
+ string = (struct usb_string_descriptor *) wstrProduct;
+ string->bLength = sizeof(wstrProduct);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (FASTBOOT_PRODUCT_NAME, string->wData);
+ fastboot_str_tab[STRING_PRODUCT]=string;
+
+
+ string = (struct usb_string_descriptor *) wstrSerial;
+ string->bLength = sizeof(wstrSerial);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (serial_number, string->wData);
+ fastboot_str_tab[STRING_SERIALNUMBER]=string;
+
+ string = (struct usb_string_descriptor *) wstrConfiguration;
+ string->bLength = sizeof(wstrConfiguration);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (FASTBOOT_CONFIGURATION_STR, string->wData);
+ fastboot_str_tab[STRING_CFG]=string;
+
+ string = (struct usb_string_descriptor *) wstrDataInterface;
+ string->bLength = sizeof(wstrDataInterface);
+ string->bDescriptorType = USB_DT_STRING;
+ str2wide (FASTBOOT_DATA_INTERFACE_STR, string->wData);
+ fastboot_str_tab[STRING_DATA]=string;
+
+ /* Now, initialize the string table for ep0 handling */
+ usb_strings = fastboot_str_tab;
+}
+#define init_wMaxPacketSize(x) le16_to_cpu(get_unaligned(\
+ &ep_desc_ptrs[(x) - 1]->wMaxPacketSize));
+
+static void fastboot_init_instances(void)
+{
+ int i;
+
+ /* initialize device instance */
+ memset(fastboot_dev_instance, 0, sizeof(struct usb_device_instance));
+ fastboot_dev_instance->device_state = STATE_INIT;
+ fastboot_dev_instance->device_descriptor = &device_desc;
+#if defined(CONFIG_USBD_HS)
+ fastboot_dev_instance->qualifier_descriptor = &dev_qualifier;
+#endif
+ fastboot_dev_instance->event = fastboot_event_handler;
+ fastboot_dev_instance->bus = fastboot_bus_instance;
+ fastboot_dev_instance->configurations = 1;
+ fastboot_dev_instance->configuration_instance_array =
+ &fastboot_cfg_instance;
+
+ /* initialize bus instance */
+ memset(fastboot_bus_instance, 0, sizeof(struct usb_bus_instance));
+ fastboot_bus_instance->device = fastboot_dev_instance;
+ fastboot_bus_instance->endpoint_array = fastboot_ep_instance;
+ fastboot_bus_instance->max_endpoints = 1;
+ fastboot_bus_instance->maxpacketsize = 64;
+ fastboot_bus_instance->serial_number_str = serial_number;
+
+ /* configuration instance */
+ memset(&fastboot_cfg_instance, 0,
+ sizeof(struct usb_configuration_instance));
+ fastboot_cfg_instance.interfaces = 1;
+ fastboot_cfg_instance.configuration_descriptor =
+ (struct usb_configuration_descriptor *)
+ &fastboot_cfg_desc;
+ fastboot_cfg_instance.interface_instance_array =
+ fastboot_intf_instance;
+
+ /* interface instance */
+ memset(fastboot_intf_instance, 0,
+ sizeof(struct usb_interface_instance));
+ fastboot_intf_instance->alternates = 1;
+ fastboot_intf_instance->alternates_instance_array =
+ fastboot_alternate_instance;
+
+ /* alternates instance */
+ memset(fastboot_alternate_instance, 0,
+ sizeof(struct usb_alternate_instance));
+ fastboot_alternate_instance->interface_descriptor = &data_intf;
+ fastboot_alternate_instance->endpoints = NUM_ENDPOINTS;
+ fastboot_alternate_instance->endpoints_descriptor_array = ep_desc_ptrs;
+
+ /* endpoint instances */
+ memset(&fastboot_ep_instance[0], 0,
+ sizeof(struct usb_endpoint_instance));
+ fastboot_ep_instance[0].endpoint_address = 0;
+ fastboot_ep_instance[0].rcv_packetSize = 64;
+ fastboot_ep_instance[0].rcv_attributes = USB_ENDPOINT_XFER_CONTROL;
+ fastboot_ep_instance[0].tx_packetSize = 64;
+ fastboot_ep_instance[0].tx_attributes = USB_ENDPOINT_XFER_CONTROL;
+ udc_setup_ep(fastboot_dev_instance, 0,
+ &fastboot_ep_instance[0]);
+
+ for (i = 1; i <= NUM_ENDPOINTS; i++) {
+ memset(&fastboot_ep_instance[i], 0,
+ sizeof(struct usb_endpoint_instance));
+
+ fastboot_ep_instance[i].endpoint_address =
+ ep_desc_ptrs[i - 1]->bEndpointAddress;
+
+ fastboot_ep_instance[i].rcv_attributes =
+ ep_desc_ptrs[i - 1]->bmAttributes;
+
+ fastboot_ep_instance[i].rcv_packetSize =
+ init_wMaxPacketSize(i);
+
+ fastboot_ep_instance[i].tx_attributes =
+ ep_desc_ptrs[i - 1]->bmAttributes;
+
+ fastboot_ep_instance[i].tx_packetSize =
+ init_wMaxPacketSize(i);
+
+ fastboot_ep_instance[i].tx_attributes =
+ ep_desc_ptrs[i - 1]->bmAttributes;
+
+ urb_link_init(&fastboot_ep_instance[i].rcv);
+ urb_link_init(&fastboot_ep_instance[i].rdy);
+ urb_link_init(&fastboot_ep_instance[i].tx);
+ urb_link_init(&fastboot_ep_instance[i].done);
+
+ if (fastboot_ep_instance[i].endpoint_address & USB_DIR_IN)
+ fastboot_ep_instance[i].tx_urb =
+ usbd_alloc_urb(fastboot_dev_instance,
+ &fastboot_ep_instance[i]);
+ else
+ fastboot_ep_instance[i].rcv_urb =
+ usbd_alloc_urb(fastboot_dev_instance,
+ &fastboot_ep_instance[i]);
+ }
+}
+
+static void fastboot_init_endpoints(void)
+{
+ int i;
+
+ fastboot_bus_instance->max_endpoints = NUM_ENDPOINTS + 1;
+ for (i = 1; i <= NUM_ENDPOINTS; i++) {
+ udc_setup_ep(fastboot_dev_instance, i,
+ &fastboot_ep_instance[i]);
+ }
+}
+
+struct usb_endpoint_instance * fastboot_get_out_ep(void)
+{
+ int i;
+ int ep_addr;
+
+ for (i = 1; i <= NUM_ENDPOINTS; i++) {
+ ep_addr = fastboot_ep_instance[i].endpoint_address;
+ if ((ep_addr != 0) && ((ep_addr & 0x80) == 0))
+ return &fastboot_ep_instance[i];
+ }
+
+ serial_printf("no out endpoint for fastboot\n");
+ return NULL;
+}
+
+struct usb_endpoint_instance * fastboot_get_in_ep(void)
+{
+ int i;
+
+ for (i = 1; i <= NUM_ENDPOINTS; i++) {
+ if (fastboot_ep_instance[i].endpoint_address & USB_DIR_IN)
+ return &fastboot_ep_instance[i];
+ }
+
+ serial_printf("no in endpoint for fastboot\n");
+ return NULL;
+
+}
+
+int fastboot_configured (void)
+{
+ return fastboot_configured_flag;
+}
+
+/*-------------------------------------------------------------------------*/
+
+/*
+ * Initialize the usb client port.
+ *
+ */
+int drv_fastboot_init(void)
+{
+ ep_desc_ptrs[0] = &fastboot_cfg_desc.data_eps[0];
+ ep_desc_ptrs[1] = &fastboot_cfg_desc.data_eps[1];
+
+ /* Now, set up USB controller and infrastructure */
+
+ fastboot_init_strings ();
+ fastboot_init_instances();
+
+ fastboot_init_endpoints();
+
+ udc_startup_events(fastboot_dev_instance); /* Enable dev, init udc pointers */
+ udc_connect(); /* Enable pullup for host detection */
+
+ return 0;
+}
+
diff --git a/drivers/usb/gadget/fastboot.c b/drivers/usb/gadget/fastboot.c
new file mode 100644
index 0000000000..21aaa0502b
--- /dev/null
+++ b/drivers/usb/gadget/fastboot.c
@@ -0,0 +1,986 @@
+/*
+ * Copyright (c) 2009, Google Inc.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+ * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+#include <common.h>
+#include <asm/errno.h>
+#include <usbdescriptors.h>
+#include <usbdevice.h>
+#include <linux/ctype.h>
+#include <malloc.h>
+#include <command.h>
+#include <nand.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/nand.h>
+#include <jffs2/jffs2.h>
+#include <asm/types.h>
+#include <asm/io.h>
+#include <android/android_boot.h>
+#include <android/android_bootimg.h>
+#include <android/boot_mode.h>
+#include <asm/arch/rda_sys.h>
+#include "fastboot.h"
+#include <mmc.h>
+#include <mmc/sparse.h>
+#include <mmc/mmcpart.h>
+#if defined(CONFIG_MUSB_UDC)
+#include <usb/musb_udc.h>
+#else
+#error "no usb device controller"
+#endif
+
+//#define DEBUG
+#ifdef DEBUG
+#define fb_dbg(fmt, args...) serial_printf(fmt, ##args)
+#else
+#define fb_dbg(fmt, args...) do {} while(0)
+#endif
+
+#define fb_info(fmt, args...) serial_printf(fmt, ##args)
+
+#ifdef FLASH_PAGE_SIZE
+#undef FLASH_PAGE_SIZE
+#endif
+#define FLASH_PAGE_SIZE 2048
+
+/** implemented in cmd_misc.c */
+extern int load_boot_from_nand(void);
+extern int load_boot_from_mmc(void);
+
+struct fastboot_cmd {
+ struct fastboot_cmd *next;
+ const char *prefix;
+ unsigned prefix_len;
+ void (*handle) (const char *arg, void *data, loff_t sz);
+};
+
+struct fastboot_var {
+ struct fastboot_var *next;
+ const char *name;
+ const char *value;
+};
+
+static struct fastboot_cmd *cmdlist;
+
+static void fastboot_register(const char *prefix,
+ void (*handle) (const char *arg, void *data,
+ loff_t sz))
+{
+ struct fastboot_cmd *cmd;
+ cmd = malloc(sizeof(*cmd));
+ if (cmd) {
+ cmd->prefix = prefix;
+ cmd->prefix_len = strlen(prefix);
+ cmd->handle = handle;
+ cmd->next = cmdlist;
+ cmdlist = cmd;
+ }
+}
+
+static struct fastboot_var *varlist;
+
+static void fastboot_publish(const char *name, const char *value)
+{
+ struct fastboot_var *var;
+ var = malloc(sizeof(*var));
+ if (var) {
+ var->name = name;
+ var->value = value;
+ var->next = varlist;
+ varlist = var;
+ }
+}
+
+static unsigned char buffer[4096];
+
+static void *download_base;
+static unsigned download_max;
+static unsigned download_size;
+
+enum {
+ STATE_OFFLINE,
+ STATE_COMMAND,
+ STATE_COMPLETE,
+ STATE_EXIT,
+ STATE_ERROR
+};
+
+static unsigned fastboot_state = STATE_OFFLINE;
+
+static void show_progress(unsigned img_size, unsigned xfer)
+{
+ static int step = 0;
+ static unsigned old_size = 0;
+
+ if (img_size != old_size) {
+ old_size = img_size;
+ step = 0;
+ }
+
+ if (step % 64 == 0)
+ fb_info(">");
+ step++;
+ if (step > 2560) {
+ printf("%3d%%\n", (u32) (((u64) xfer * 100) / img_size));
+ step = 0;
+ }
+ if (xfer >= img_size)
+ fb_info("100%% finised\n");
+}
+
+static int usb_read(void *_buf, unsigned len)
+{
+ int count = 0;
+ struct usb_endpoint_instance *ep_out = fastboot_get_out_ep();
+ struct urb *current_urb = NULL;
+ unsigned char *buf = _buf;
+ unsigned total = len;
+
+ if (!fastboot_configured()) {
+ return 0;
+ }
+
+ if (fastboot_state == STATE_ERROR)
+ goto oops;
+
+ if (!ep_out)
+ goto oops;
+
+ fb_dbg("%s, buf 0x%p, len :%d\n", __func__, _buf, len);
+ current_urb = ep_out->rcv_urb;
+ while (len > 0) {
+ int xfer;
+ int maxPktSize = ep_out->rcv_packetSize;
+ int dma = 0;
+
+ xfer = (len > maxPktSize) ? maxPktSize : len;
+ if (xfer == maxPktSize)
+ dma = 1;
+ usbd_setup_urb(current_urb, buf, xfer, dma);
+ udc_irq();
+ if (current_urb->actual_length) {
+ buf += current_urb->actual_length;
+ len -= current_urb->actual_length;
+ count += current_urb->actual_length;
+ if (xfer != current_urb->actual_length)
+ break;
+ show_progress(total, count);
+ current_urb->actual_length = 0;
+ }
+ }
+ current_urb->actual_length = 0;
+ fb_dbg("%s, read :%d\n", __func__, count);
+ return count;
+
+oops:
+ fb_info("fastboot usb read error\n");
+ fastboot_state = STATE_ERROR;
+ return -1;
+}
+
+static int usb_write(void *_buf, unsigned len)
+{
+ struct usb_endpoint_instance *ep_in = fastboot_get_in_ep();
+ struct urb *current_urb = NULL;
+ unsigned char *buf = _buf;
+ int count = 0;
+
+ if (!fastboot_configured()) {
+ return 0;
+ }
+
+ if (fastboot_state == STATE_ERROR)
+ goto oops;
+
+ if (!ep_in)
+ goto oops;
+
+ fb_dbg("%s, len :%d\n", __func__, len);
+ current_urb = ep_in->tx_urb;
+
+ while (len > 0) {
+ int xfer;
+ int maxPktSize = ep_in->tx_packetSize;
+
+ xfer = (len > maxPktSize) ? maxPktSize : len;
+ current_urb->buffer = buf;
+
+ current_urb->actual_length = xfer;
+ fb_dbg("urb actual_len :%d, ep sent, last %d\n",
+ current_urb->actual_length, ep_in->sent, ep_in->last);
+ if (udc_endpoint_write(ep_in))
+ goto oops;
+ count += xfer;
+ len -= xfer;
+ buf += xfer;
+ }
+ fb_dbg("after write urb actual_len :%d, ep sent, last %d, count:%d\n",
+ current_urb->actual_length, ep_in->sent, ep_in->last, count);
+
+ return count;
+
+oops:
+ fb_info("fastboot usb write error\n");
+ fastboot_state = STATE_ERROR;
+ return -1;
+}
+
+void fastboot_ack(const char *code, const char *reason)
+{
+ char response[64] = { 0 };
+
+ if (fastboot_state != STATE_COMMAND)
+ return;
+
+ if (reason == 0)
+ reason = "";
+
+ if (strlen(code) + strlen(reason) >= 64) {
+ fb_info("%s too long string\r\n", __func__);
+ }
+ sprintf(response, "%s%s", code, reason);
+ fastboot_state = STATE_COMPLETE;
+
+ usb_write(response, strlen(response));
+
+}
+
+void fastboot_fail(const char *reason)
+{
+ fastboot_ack("FAIL", reason);
+}
+
+void fastboot_okay(const char *info)
+{
+ fastboot_ack("OKAY", info);
+}
+
+void fastboot_info(const char *info)
+{
+ char response[64] = { 0 };
+ const char *code = "INFO";
+
+ if (info == 0)
+ info = "";
+
+ if (strlen(code) + strlen(info) >= 64) {
+ fb_info("%s too long string\r\n", __func__);
+ }
+ snprintf(response, 63, "%s%s", code, info);
+
+ usb_write(response, strlen(response));
+}
+
+static void cmd_getvar(const char *arg, void *data, loff_t sz)
+{
+ struct fastboot_var *var;
+ int value_len;
+ char str[60];
+
+ for (var = varlist; var; var = var->next) {
+ if (!strcmp(var->name, arg)) {
+ int index = 0;
+
+ value_len = strlen(var->value);
+ if (value_len < 60) {
+ fastboot_okay(var->value);
+ return;
+ }
+ /* value length > 60(+INFO > 64) */
+ while (value_len) {
+ int xfer = (value_len > 50) ? 50 : value_len;
+
+ memset(str, 0, sizeof(str));
+ strncpy(str, &var->value[index], xfer);
+ fastboot_info(str);
+ value_len -= xfer;
+ index += xfer;
+ }
+ fastboot_okay("");
+ return;
+ }
+ }
+ fastboot_okay("");
+}
+
+static void cmd_download(const char *arg, void *data, loff_t sz)
+{
+ char response[64];
+ unsigned len = simple_strtoul(arg, NULL, 16);
+ int r;
+
+ fb_dbg("%s\n", __func__);
+
+ fb_info("start downloading... length %d is to %p\n", len, data);
+ download_size = 0;
+ if (len > download_max) {
+ fastboot_fail("data too large");
+ return;
+ }
+
+ sprintf(response, "DATA%08x", len);
+ if (usb_write(response, strlen(response)) < 0)
+ return;
+
+ r = usb_read(download_base, len);
+ if ((r < 0) || (r != len)) {
+ fastboot_state = STATE_ERROR;
+ return;
+ }
+ download_size = len;
+ fb_info("download ok\n");
+ fastboot_okay("");
+ //dump_log(download_base, len);
+}
+
+extern int mtdparts_init_default(void);
+extern int mtdparts_save_ptbl(int need_erase);
+
+#ifdef MTDPARTS_UBI_DEF
+extern int ubi_part_scan(char *part_name);
+extern int ubi_check_default_vols(const char *ubi_default_str);
+extern int ubi_erase_vol(char *vol_name);
+extern int ubi_update_vol(char *vol_name, void *buf, size_t size);
+static int cmd_flash_ubi(const char *arg, void *data, loff_t sz)
+{
+ int ret = 0;
+
+ ret = ubi_part_scan(MTDPARTS_UBI_PART_NAME);
+ if(ret) {
+ fastboot_fail("ubi init failed.");
+ goto exit;
+ }
+
+ ret = ubi_check_default_vols(MTDPARTS_UBI_DEF);
+ if(ret) {
+ fastboot_fail("ubi volumes check failed.");
+ goto exit;
+ }
+
+ fb_info("ready to update ubi volume '%s'\n", arg);
+ ret = ubi_update_vol((char *)arg, data, sz);
+exit:
+ return ret;
+}
+#endif /* MTDPARTS_UBI_DEF */
+static void cmd_flash_nand(const char *arg, void *data, loff_t sz)
+{
+ struct mtd_info *nand;
+ struct mtd_device *dev;
+ struct part_info *part;
+ size_t size = 0;
+ u8 pnum;
+ nand_erase_options_t opts;
+ int ret;
+ unsigned addr = simple_strtoul(arg, NULL, 16);
+ loff_t max_limit = 0;
+ u32 bad_blocks = 0;
+ sparse_header_t *header = (void *)data;
+
+ fb_info("%s, addr: %s date: %p, sz: 0x%llx\n", __func__, arg, data, sz);
+
+ /* use "flash" command for downloading purpose */
+ if (addr && (addr >= PHYS_SDRAM_1) &&
+ (addr < (PHYS_SDRAM_1 + PHYS_SDRAM_1_SIZE))) {
+ fb_info("in memory, do copy to 0x%x\n", addr);
+ fastboot_okay("");
+ memcpy((void *)addr, download_base, sz);
+ fastboot_state = STATE_EXIT;
+ return;
+ }
+
+ data = download_base; //previous downloaded date to download_base
+
+#ifdef MTDPARTS_UBI_DEF /* all ubi volumes are in one ubi part */
+ if(strstr(MTDPARTS_UBI_DEF, arg)) {
+ ret = cmd_flash_ubi(arg, data, sz);
+ goto exit;
+ }
+#endif
+
+ ret = find_dev_and_part(arg, &dev, &pnum, &part);
+ if (ret) {
+ fastboot_fail("unknown partition name");
+ return;
+ } else if (dev->id->type != MTD_DEV_TYPE_NAND) {
+ fastboot_fail("mtd dev type error");
+ return;
+ }
+ nand = &nand_info[dev->id->num];
+ fb_info("found part '%s' offset: 0x%llx length: 0x%llx id: %d\n",
+ part->name, part->offset, part->size, dev->id->num);
+
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = (loff_t) part->offset;
+ opts.length = (loff_t) part->size;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+
+ fb_dbg("opts off 0x%08x\n", (uint32_t) opts.offset);
+ fb_dbg("opts size 0x%08x\n", (uint32_t) opts.length);
+ fb_dbg("nand write size 0x%08x\n", nand->writesize);
+ fb_info("erase 0x%llx bytes to '%s' offset: 0x%llx\n",
+ opts.length, part->name, opts.offset);
+ ret = nand_erase_opts(nand, &opts);
+ if (ret) {
+ fastboot_fail("nand erase error");
+ return;
+ }
+
+ if (!strcmp(part->name, "boot") || !strcmp(part->name, "recovery")) {
+ if (memcmp((void *)data, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
+ fastboot_fail("image is not a boot image");
+ return;
+ }
+ }
+
+ if (is_power_of_2(nand->writesize))
+ sz = ROUND(sz, nand->writesize);
+ else
+ sz = roundup(sz, nand->writesize);
+ size = sz;
+ max_limit = part->offset + part->size;
+
+ fb_info("writing 0x%x bytes to '%s' offset: 0x%llx\n", size,
+ part->name, part->offset);
+ header = (void *)data;
+ if (header->magic != SPARSE_HEADER_MAGIC) {
+ ret =
+ nand_write_skip_bad_new(nand, part->offset, &size,
+ max_limit, (u_char *) data,
+ 0,
+ &bad_blocks);
+ } else {
+ ret = nand_write_unsparse(nand, part->offset, &size, max_limit,
+ (u_char *) data,
+ 0,
+ &bad_blocks);
+ }
+
+ /* the mtd partition table is saved in 'bootloader' partition,
+ * if 'bootloader' is updated, need to re-write the partition table. */
+ if(strcmp(part->name,"bootloader") == 0) {
+ mtdparts_save_ptbl(1);
+ }
+
+#ifdef MTDPARTS_UBI_DEF
+exit:
+#endif
+ if (!ret)
+ fastboot_okay("");
+ else
+ fastboot_fail("flash error");
+ fb_info("flash ok\n");
+}
+
+static block_dev_desc_t *mmc_blkdev;
+void cmd_flash_mmc_img(const char *name, void *data, loff_t sz)
+{
+ disk_partition_t *ptn = 0;
+ u64 size = 0;
+
+ fb_info("flash to mmc part %s\n", name);
+ ptn = partition_find_ptn(name);
+ if (ptn == 0) {
+ fastboot_fail("partition table doesn't exist");
+ return;
+ }
+
+ if (!strcmp(name, "boot") || !strcmp(name, "recovery")) {
+ if (memcmp((void *)data, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
+ fastboot_fail("image is not a boot image");
+ return;
+ }
+ }
+
+ size = (u64) ptn->size * ptn->blksz;
+ fb_info("partition %s, type %s blocks " LBAFU ", size %llx\n",
+ ptn->name, ptn->type, ptn->size, size);
+ if (ROUND(sz, 512) > size) {
+ fastboot_fail("size too large");
+ return;
+ } else if (partition_write_bytes(mmc_blkdev, ptn, &sz, data)) {
+ fastboot_fail("flash write failure");
+ return;
+ }
+
+ fastboot_okay("");
+ return;
+}
+
+void cmd_flash_mmc_sparse_img(const char *part_name, void *data, loff_t sz)
+{
+ disk_partition_t *ptn;
+ unsigned long long size = 0;
+ int ret;
+
+ fb_info("unsparese and flash part %s\n", part_name);
+ ptn = partition_find_ptn(part_name);
+ if (ptn == 0) {
+ fastboot_fail("partition table doesn't exist");
+ return;
+ }
+
+ size = (u64) ptn->blksz * ptn->size;
+ if (ROUND(sz, 512) > size) {
+ fastboot_fail("size too large");
+ return;
+ }
+
+ ret = partition_unsparse(mmc_blkdev, ptn, data, ptn->start, ptn->size);
+ if (ret) {
+ fastboot_fail("partition cannot unsparse");
+ return;
+ }
+ fastboot_okay("");
+ return;
+}
+
+void cmd_flash_mmc(const char *arg, void *data, loff_t sz)
+{
+ sparse_header_t *sparse_header;
+
+ sparse_header = (sparse_header_t *) data;
+
+ /* Using to judge if ext4 file system */
+ if (sparse_header->magic != SPARSE_HEADER_MAGIC)
+ cmd_flash_mmc_img(arg, data, sz);
+ else
+ cmd_flash_mmc_sparse_img(arg, data, sz);
+
+ return;
+}
+
+static void cmd_flash(const char *arg, void *data, loff_t sz)
+{
+ if (rda_media_get() == MEDIA_MMC)
+ cmd_flash_mmc(arg, data, sz);
+ else
+ cmd_flash_nand(arg, data, sz);
+}
+
+static void cmd_erase_nand(const char *arg, void *data, unsigned sz)
+{
+ struct mtd_info *nand;
+ struct mtd_device *dev;
+ struct part_info *part;
+ u8 pnum;
+ nand_erase_options_t opts;
+ int ret;
+
+ fb_info("erase part: %s\n", arg);
+
+#ifdef MTDPARTS_UBI_DEF /* all ubi volumes are in one ubi part */
+ if(strstr(MTDPARTS_UBI_DEF, arg)) {
+ ubi_part_scan(MTDPARTS_UBI_PART_NAME);
+ ret = ubi_erase_vol((char *)arg);
+ if(ret)
+ fastboot_fail("ubi volume erase error");
+ else
+ fastboot_okay("");
+ return;
+ }
+#endif
+
+ ret = find_dev_and_part(arg, &dev, &pnum, &part);
+ if (ret) {
+ fastboot_fail("unknown partition name");
+ return;
+ } else if (dev->id->type != MTD_DEV_TYPE_NAND) {
+ fastboot_fail("mtd dev type error");
+ return;
+ }
+ nand = &nand_info[dev->id->num];
+ fb_info("found part '%s' offset: 0x%llx length: 0x%llx id: %d\n",
+ part->name, part->offset, part->size, dev->id->num);
+
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = (loff_t) part->offset;
+ opts.length = (loff_t) part->size;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+
+ fb_dbg("opts off 0x%08x\n", (uint32_t) opts.offset);
+ fb_dbg("opts size 0x%08x\n", (uint32_t) opts.length);
+ fb_dbg("nand write size 0x%08x\n", nand->writesize);
+ ret = nand_erase_opts(nand, &opts);
+ if (ret)
+ fastboot_fail("nand erase error");
+ else
+ fastboot_okay("");
+}
+
+static void cmd_erase_mmc(const char *arg, void *data, loff_t sz)
+{
+ int ret;
+ disk_partition_t *ptn;
+ lbaint_t blkcnt;
+
+ fb_info("erase part: %s\n", arg);
+ ptn = partition_find_ptn(arg);
+ if (!ptn) {
+ fastboot_fail("partition table doesn't exist");
+ return;
+ }
+
+ blkcnt = ptn->size;
+ fb_info("erase mmc from %#x, blocks %#x\n",
+ (uint32_t)ptn->start, (uint32_t)blkcnt);
+ ret = partition_erase_blks(mmc_blkdev, ptn, &blkcnt);
+ if (ret || blkcnt != ptn->size) {
+ fastboot_fail("partition erase failed");
+ return;
+ }
+ fastboot_okay("");
+}
+
+static void cmd_erase(const char *arg, void *data, loff_t sz)
+{
+ if (rda_media_get() == MEDIA_MMC)
+ return cmd_erase_mmc(arg, data, sz);
+ else
+ return cmd_erase_nand(arg, data, sz);
+}
+
+static unsigned char raw_header[2048];
+
+static void cmd_boot(const char *arg, void *data, loff_t sz)
+{
+ boot_img_hdr *hdr = (boot_img_hdr *) raw_header;
+ unsigned kernel_actual;
+ unsigned ramdisk_actual;
+ char *cmdline;
+
+ fb_info("%s, arg: %s, data: %p, sz: 0x%llx\n", __func__, arg, data, sz);
+ memcpy(raw_header, data, 2048);
+ if (memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
+ fb_info("boot image headr: %s\n", hdr->magic);
+ fastboot_fail("bad boot image header");
+ return;
+ }
+ kernel_actual = ROUND(hdr->kernel_size, FLASH_PAGE_SIZE);
+ if (kernel_actual <= 0) {
+ fastboot_fail("kernel image should not be zero");
+ return;
+ }
+ ramdisk_actual = ROUND(hdr->ramdisk_size, FLASH_PAGE_SIZE);
+ if (ramdisk_actual < 0) {
+ fastboot_fail("ramdisk size error");
+ return;
+ }
+
+ memcpy((void *)hdr->kernel_addr, (void *)data + FLASH_PAGE_SIZE,
+ kernel_actual);
+ memcpy((void *)hdr->ramdisk_addr,
+ (void *)data + FLASH_PAGE_SIZE + kernel_actual, ramdisk_actual);
+
+ fb_info("kernel @0x%08x (0x%08x bytes)\n", hdr->kernel_addr,
+ kernel_actual);
+ fb_info("ramdisk @0x%08x (0x%08x bytes)\n", hdr->ramdisk_addr,
+ ramdisk_actual);
+ //set boot environment
+ if (hdr->cmdline[0]) {
+ cmdline = (char *)hdr->cmdline;
+ } else {
+ cmdline = getenv("bootargs");
+ }
+
+ fb_info("cmdline %s\n", cmdline);
+ fastboot_okay("");
+ udc_power_off();
+ creat_atags(hdr->tags_addr, cmdline, hdr->ramdisk_addr,
+ hdr->ramdisk_size);
+
+ cleanup_before_linux();
+ boot_linux(hdr->kernel_addr, hdr->tags_addr);
+}
+
+extern int do_cboot(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[]);
+
+static void cmd_continue(const char *arg, void *data, loff_t sz)
+{
+ fb_info("continue....\n");
+ fastboot_okay("");
+ udc_power_off();
+ fastboot_state = STATE_EXIT;
+ //do_cboot(NULL, 0, 1, NULL);
+ //normal_mode();
+}
+
+static void cmd_reboot(const char *arg, void *data, loff_t sz)
+{
+ fb_info("reboot....\n");
+ fastboot_okay("");
+ mdelay(10);
+ udc_power_off();
+ fastboot_state = STATE_EXIT;
+ rda_reboot(REBOOT_TO_NORMAL_MODE);
+}
+
+static void cmd_reboot_bootloader(const char *arg, void *data, loff_t sz)
+{
+ fb_info("reboot to bootloader....\n");
+ fastboot_okay("");
+ mdelay(10);
+ udc_power_off();
+ fastboot_state = STATE_EXIT;
+ rda_reboot(REBOOT_TO_FASTBOOT_MODE);
+}
+
+static void cmd_powerdown(const char *arg, void *data, loff_t sz)
+{
+ fb_info("power down....\n");
+ fastboot_okay("");
+ fastboot_state = STATE_EXIT;
+ //power_down_devices(0);
+}
+
+static void fastboot_command_loop(void)
+{
+ struct fastboot_cmd *cmd;
+ int r;
+ fb_dbg("fastboot: processing commands\n");
+
+again:
+ while ((fastboot_state != STATE_ERROR)
+ && (fastboot_state != STATE_EXIT)) {
+ memset(buffer, 0, 64);
+ r = usb_read(buffer, 64);
+ if (r < 0)
+ break;
+ buffer[r] = 0;
+ fb_dbg("fastboot: %s, r:%d\n", buffer, r);
+
+ for (cmd = cmdlist; cmd; cmd = cmd->next) {
+ fb_dbg("cmd list :%s \n", cmd->prefix);
+ if (memcmp(buffer, cmd->prefix, cmd->prefix_len))
+ continue;
+ fastboot_state = STATE_COMMAND;
+ cmd->handle((const char *)buffer + cmd->prefix_len,
+ (void *)download_base, download_size);
+ if (fastboot_state == STATE_COMMAND)
+ fastboot_fail("unknown reason");
+ if (fastboot_state == STATE_EXIT)
+ goto fb_done;
+ goto again;
+ }
+
+ fastboot_fail("unknown command");
+ }
+ fastboot_state = STATE_OFFLINE;
+fb_done:
+ fb_dbg("fastboot: done\n");
+}
+
+static int fastboot_handler(void *arg)
+{
+ while (fastboot_state != STATE_EXIT) {
+ fastboot_command_loop();
+ }
+ return 0;
+}
+
+static int fastboot_start(void *base, unsigned size)
+{
+ char *parts;
+
+ fb_info("fastboot start\n");
+
+ download_base = base;
+ download_max = size;
+
+ fastboot_register("getvar:", cmd_getvar);
+ fastboot_register("download:", cmd_download);
+ fastboot_register("flash:", cmd_flash);
+ fastboot_register("erase:", cmd_erase);
+ fastboot_register("boot", cmd_boot);
+ fastboot_register("reboot", cmd_reboot);
+ fastboot_register("powerdown", cmd_powerdown);
+ fastboot_register("continue", cmd_continue);
+ fastboot_register("reboot-bootloader", cmd_reboot_bootloader);
+
+ fastboot_publish("version", "1.0");
+
+ parts = getenv("mtdparts");
+ fastboot_publish("mtd", parts);
+
+ fastboot_handler(0);
+ return 0;
+}
+
+/*
+ * Since interrupt handling has not yet been implemented, we use this function
+ * to handle polling. .
+ */
+static void fastboot_wait_for_configed(void)
+{
+ /* New interrupts? */
+ while (!fastboot_configured())
+ udc_irq();
+}
+
+void boot_linux_from_mem(void *data)
+{
+ boot_img_hdr *hdr = (boot_img_hdr *) data;
+ unsigned kernel_actual;
+ unsigned ramdisk_actual;
+ char *cmdline;
+
+ fb_info("%s, data: %p\n", __func__, data);
+ if (memcmp(hdr->magic, BOOT_MAGIC, BOOT_MAGIC_SIZE)) {
+ fb_info("boot image headr: %s\n", hdr->magic);
+ fastboot_fail("bad boot image header");
+ return;
+ }
+ kernel_actual = ROUND(hdr->kernel_size, FLASH_PAGE_SIZE);
+ if (kernel_actual <= 0) {
+ fastboot_fail("kernel image should not be zero");
+ return;
+ }
+ ramdisk_actual = ROUND(hdr->ramdisk_size, FLASH_PAGE_SIZE);
+ if (ramdisk_actual < 0) {
+ fastboot_fail("ramdisk size error");
+ return;
+ }
+
+ memcpy((void *)hdr->kernel_addr, (void *)data + FLASH_PAGE_SIZE,
+ kernel_actual);
+ memcpy((void *)hdr->ramdisk_addr,
+ (void *)data + FLASH_PAGE_SIZE + kernel_actual, ramdisk_actual);
+
+ fb_info("kernel @0x%08x (0x%08x bytes)\n", hdr->kernel_addr,
+ kernel_actual);
+ fb_info("ramdisk @0x%08x (0x%08x bytes)\n", hdr->ramdisk_addr,
+ ramdisk_actual);
+ //set boot environment
+ if (hdr->cmdline[0]) {
+ cmdline = (char *)hdr->cmdline;
+ } else {
+ cmdline = getenv("bootargs");
+ }
+
+ fb_info("cmdline %s\n", cmdline);
+ creat_atags(hdr->tags_addr, cmdline, hdr->ramdisk_addr,
+ hdr->ramdisk_size);
+
+ cleanup_before_linux();
+ boot_linux(hdr->kernel_addr, hdr->tags_addr);
+}
+
+void boot_linux_from_nand(void)
+{
+ if(load_boot_from_nand() == CMD_RET_FAILURE) {
+ fb_info("fastboot load_boot_from_nand fail\n");
+ return;
+ }
+ /* boot from mem */
+ boot_linux_from_mem((void *)SCRATCH_ADDR);
+}
+
+void boot_linux_from_mmc(void)
+{
+ if(load_boot_from_mmc() == CMD_RET_FAILURE) {
+ fb_info("fastboot load_boot_from_mmc fail\n");
+ return;
+ }
+ /* boot from mem */
+ boot_linux_from_mem((void *)SCRATCH_ADDR);
+}
+
+void boot_linux_from_flash(void)
+{
+ enum media_type media = rda_media_get();
+
+ if (media == MEDIA_MMC)
+ boot_linux_from_mmc();
+ else if ((media == MEDIA_NAND) || (media == MEDIA_SPINAND))
+ boot_linux_from_nand();
+ else
+ fb_info("fastboot can't find media\n");
+}
+
+#if defined(CONFIG_CMD_FASTBOOT)
+extern int drv_fastboot_init(void);
+
+int do_fastboot(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[])
+{
+ int ret;
+ enum media_type media = rda_media_get();
+
+ udc_init();
+ drv_fastboot_init();
+
+ if ((media == MEDIA_NAND) || (media == MEDIA_SPINAND)) {
+ ret = mtdparts_init_default();
+ if(ret) {
+ fb_info("nand format partition fail %d\n", ret);
+ return -1;
+ }
+ }
+
+ if (media == MEDIA_MMC) {
+ ret = mmc_parts_format();
+ if (ret) {
+ fb_info("mmc format partition fail %d\n", ret);
+ return -1;
+ }
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ }
+ fastboot_wait_for_configed();
+
+ fastboot_start((void *)SCRATCH_ADDR, FB_DOWNLOAD_BUF_SIZE);
+ return 0;
+}
+
+U_BOOT_CMD(fastboot, 1, 1, do_fastboot,
+ "android fastboot protocol", "flash image to nand");
+
+int do_abootf(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[])
+{
+ boot_linux_from_flash();
+ return 1;
+}
+
+U_BOOT_CMD(abootf, 1, 0, do_abootf,
+ "boot android boot.img from flash",
+ " - boot android boot.image from flash");
+
+int do_abootm(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[])
+{
+ ulong offset = 0;
+ if (argc >= 2) {
+ offset = simple_strtoul(argv[1], NULL, 16);
+ }
+ boot_linux_from_mem((void *)offset);
+ return 1;
+}
+
+U_BOOT_CMD(abootm, 2, 0, do_abootm,
+ "boot android boot.img from memory",
+ "[ off ]\n"
+ " - boot android boot.image from memory with offset 'off'");
+
+#endif
diff --git a/drivers/usb/gadget/fastboot.h b/drivers/usb/gadget/fastboot.h
new file mode 100644
index 0000000000..123f523b90
--- /dev/null
+++ b/drivers/usb/gadget/fastboot.h
@@ -0,0 +1,8 @@
+#ifndef __FASTBOOT_H__
+#define __FASTBOOT_H__
+
+extern struct usb_endpoint_instance * fastboot_get_out_ep(void);
+extern struct usb_endpoint_instance * fastboot_get_in_ep(void);
+extern int fastboot_configured (void);
+
+#endif
diff --git a/drivers/usb/gadget/s3c_udc_otg.c b/drivers/usb/gadget/s3c_udc_otg.c
index 1050a98b6c..3fdfdf7af0 100644
--- a/drivers/usb/gadget/s3c_udc_otg.c
+++ b/drivers/usb/gadget/s3c_udc_otg.c
@@ -30,13 +30,14 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
*/
-
+#undef DEBUG
#include <common.h>
#include <asm/errno.h>
#include <linux/list.h>
#include <malloc.h>
#include <linux/usb/ch9.h>
+#include <usbdescriptors.h>
#include <linux/usb/gadget.h>
#include <asm/byteorder.h>
@@ -53,19 +54,11 @@
#define OTG_DMA_MODE 1
-#undef DEBUG_S3C_UDC_SETUP
-#undef DEBUG_S3C_UDC_EP0
-#undef DEBUG_S3C_UDC_ISR
-#undef DEBUG_S3C_UDC_OUT_EP
-#undef DEBUG_S3C_UDC_IN_EP
-#undef DEBUG_S3C_UDC
-
-/* #define DEBUG_S3C_UDC_SETUP */
-/* #define DEBUG_S3C_UDC_EP0 */
-/* #define DEBUG_S3C_UDC_ISR */
-/* #define DEBUG_S3C_UDC_OUT_EP */
-/* #define DEBUG_S3C_UDC_IN_EP */
-/* #define DEBUG_S3C_UDC */
+#define DEBUG_SETUP 0
+#define DEBUG_EP0 0
+#define DEBUG_ISR 0
+#define DEBUG_OUT_EP 0
+#define DEBUG_IN_EP 0
#include <usb/s3c_udc.h>
@@ -132,6 +125,19 @@ static void nuke(struct s3c_ep *ep, int status);
static int s3c_udc_set_halt(struct usb_ep *_ep, int value);
static void s3c_udc_set_nak(struct s3c_ep *ep);
+void set_udc_gadget_private_data(void *p)
+{
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: the_controller: 0x%p, p: 0x%p\n", __func__,
+ the_controller, p);
+ the_controller->gadget.dev.device_data = p;
+}
+
+void *get_udc_gadget_private_data(struct usb_gadget *gadget)
+{
+ return gadget->dev.device_data;
+}
+
static struct usb_ep_ops s3c_ep_ops = {
.enable = s3c_ep_enable,
.disable = s3c_ep_disable,
@@ -216,7 +222,7 @@ void otg_phy_off(struct s3c_udc *dev)
*/
static void udc_disable(struct s3c_udc *dev)
{
- DEBUG_SETUP("%s: %p\n", __func__, dev);
+ debug_cond(DEBUG_SETUP != 0, "%s: %p\n", __func__, dev);
udc_set_address(dev, 0);
@@ -234,7 +240,7 @@ static void udc_reinit(struct s3c_udc *dev)
{
unsigned int i;
- DEBUG_SETUP("%s: %p\n", __func__, dev);
+ debug_cond(DEBUG_SETUP != 0, "%s: %p\n", __func__, dev);
/* device/ep0 records init */
INIT_LIST_HEAD(&dev->gadget.ep_list);
@@ -265,12 +271,13 @@ static void udc_reinit(struct s3c_udc *dev)
*/
static int udc_enable(struct s3c_udc *dev)
{
- DEBUG_SETUP("%s: %p\n", __func__, dev);
+ debug_cond(DEBUG_SETUP != 0, "%s: %p\n", __func__, dev);
otg_phy_init(dev);
reconfig_usbd();
- DEBUG_SETUP("S3C USB 2.0 OTG Controller Core Initialized : 0x%x\n",
+ debug_cond(DEBUG_SETUP != 0,
+ "S3C USB 2.0 OTG Controller Core Initialized : 0x%x\n",
readl(&reg->gintmsk));
dev->gadget.speed = USB_SPEED_UNKNOWN;
@@ -287,7 +294,7 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
int retval = 0;
unsigned long flags;
- DEBUG_SETUP("%s: %s\n", __func__, "no name");
+ debug_cond(DEBUG_SETUP != 0, "%s: %s\n", __func__, "no name");
if (!driver
|| (driver->speed != USB_SPEED_FULL
@@ -311,7 +318,8 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
retval = driver->bind(&dev->gadget);
if (retval) {
- DEBUG_SETUP("%s: bind to driver --> error %d\n",
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: bind to driver --> error %d\n",
dev->gadget.name, retval);
dev->driver = 0;
return retval;
@@ -319,7 +327,8 @@ int usb_gadget_register_driver(struct usb_gadget_driver *driver)
enable_irq(IRQ_OTG);
- DEBUG_SETUP("Registered gadget driver %s\n", dev->gadget.name);
+ debug_cond(DEBUG_SETUP != 0,
+ "Registered gadget driver %s\n", dev->gadget.name);
udc_enable(dev);
return 0;
@@ -377,7 +386,7 @@ static void done(struct s3c_ep *ep, struct s3c_request *req, int status)
/* don't modify queue heads during completion callback */
ep->stopped = 1;
-#ifdef DEBUG_S3C_UDC
+#ifdef DEBUG
printf("calling complete callback\n");
{
int i, len = req->req.length;
@@ -671,7 +680,7 @@ static struct usb_request *s3c_alloc_request(struct usb_ep *ep,
debug("%s: %s %p\n", __func__, ep->name, ep);
- req = kmalloc(sizeof *req, gfp_flags);
+ req = memalign(CONFIG_SYS_CACHELINE_SIZE, sizeof(*req));
if (!req)
return 0;
@@ -865,7 +874,8 @@ int s3c_udc_probe(struct s3c_plat_otg_data *pdata)
the_controller = dev;
for (i = 0; i < S3C_MAX_ENDPOINTS+1; i++) {
- dev->dma_buf[i] = kmalloc(DMA_BUFFER_SIZE, GFP_KERNEL);
+ dev->dma_buf[i] = memalign(CONFIG_SYS_CACHELINE_SIZE,
+ DMA_BUFFER_SIZE);
dev->dma_addr[i] = (dma_addr_t) dev->dma_buf[i];
invalidate_dcache_range((unsigned long) dev->dma_buf[i],
(unsigned long) (dev->dma_buf[i]
diff --git a/drivers/usb/gadget/s3c_udc_otg_xfer_dma.c b/drivers/usb/gadget/s3c_udc_otg_xfer_dma.c
index afd4931fa0..4be603783c 100644
--- a/drivers/usb/gadget/s3c_udc_otg_xfer_dma.c
+++ b/drivers/usb/gadget/s3c_udc_otg_xfer_dma.c
@@ -53,7 +53,7 @@ static inline void s3c_udc_ep0_zlp(struct s3c_udc *dev)
writel(ep_ctrl|DEPCTL_EPENA|DEPCTL_CNAK,
&reg->in_endp[EP0_CON].diepctl);
- DEBUG_EP0("%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
+ debug_cond(DEBUG_EP0 != 0, "%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
__func__, readl(&reg->in_endp[EP0_CON].diepctl));
dev->ep0state = WAIT_FOR_IN_COMPLETE;
}
@@ -62,7 +62,8 @@ void s3c_udc_pre_setup(void)
{
u32 ep_ctrl;
- debug_cond(DEBUG_IN_EP, "%s : Prepare Setup packets.\n", __func__);
+ debug_cond(DEBUG_IN_EP,
+ "%s : Prepare Setup packets.\n", __func__);
invalidate_dcache_range((unsigned long) usb_ctrl_dma_addr,
(unsigned long) usb_ctrl_dma_addr
@@ -75,9 +76,9 @@ void s3c_udc_pre_setup(void)
ep_ctrl = readl(&reg->out_endp[EP0_CON].doepctl);
writel(ep_ctrl|DEPCTL_EPENA, &reg->out_endp[EP0_CON].doepctl);
- DEBUG_EP0("%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
+ debug_cond(DEBUG_EP0 != 0, "%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
__func__, readl(&reg->in_endp[EP0_CON].diepctl));
- DEBUG_EP0("%s:EP0 ZLP DOEPCTL0 = 0x%x\n",
+ debug_cond(DEBUG_EP0 != 0, "%s:EP0 ZLP DOEPCTL0 = 0x%x\n",
__func__, readl(&reg->out_endp[EP0_CON].doepctl));
}
@@ -86,9 +87,9 @@ static inline void s3c_ep0_complete_out(void)
{
u32 ep_ctrl;
- DEBUG_EP0("%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
+ debug_cond(DEBUG_EP0 != 0, "%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
__func__, readl(&reg->in_endp[EP0_CON].diepctl));
- DEBUG_EP0("%s:EP0 ZLP DOEPCTL0 = 0x%x\n",
+ debug_cond(DEBUG_EP0 != 0, "%s:EP0 ZLP DOEPCTL0 = 0x%x\n",
__func__, readl(&reg->out_endp[EP0_CON].doepctl));
debug_cond(DEBUG_IN_EP,
@@ -106,9 +107,9 @@ static inline void s3c_ep0_complete_out(void)
writel(ep_ctrl|DEPCTL_EPENA|DEPCTL_CNAK,
&reg->out_endp[EP0_CON].doepctl);
- DEBUG_EP0("%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
+ debug_cond(DEBUG_EP0 != 0, "%s:EP0 ZLP DIEPCTL0 = 0x%x\n",
__func__, readl(&reg->in_endp[EP0_CON].diepctl));
- DEBUG_EP0("%s:EP0 ZLP DOEPCTL0 = 0x%x\n",
+ debug_cond(DEBUG_EP0 != 0, "%s:EP0 ZLP DOEPCTL0 = 0x%x\n",
__func__, readl(&reg->out_endp[EP0_CON].doepctl));
}
@@ -145,14 +146,15 @@ static int setdma_rx(struct s3c_ep *ep, struct s3c_request *req)
&reg->out_endp[ep_num].doeptsiz);
writel(DEPCTL_EPENA|DEPCTL_CNAK|ctrl, &reg->out_endp[ep_num].doepctl);
- DEBUG_OUT_EP("%s: EP%d RX DMA start : DOEPDMA = 0x%x,"
- "DOEPTSIZ = 0x%x, DOEPCTL = 0x%x\n"
- "\tbuf = 0x%p, pktcnt = %d, xfersize = %d\n",
- __func__, ep_num,
- readl(&reg->out_endp[ep_num].doepdma),
- readl(&reg->out_endp[ep_num].doeptsiz),
- readl(&reg->out_endp[ep_num].doepctl),
- buf, pktcnt, length);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "%s: EP%d RX DMA start : DOEPDMA = 0x%x,"
+ "DOEPTSIZ = 0x%x, DOEPCTL = 0x%x\n"
+ "\tbuf = 0x%p, pktcnt = %d, xfersize = %d\n",
+ __func__, ep_num,
+ readl(&reg->out_endp[ep_num].doepdma),
+ readl(&reg->out_endp[ep_num].doeptsiz),
+ readl(&reg->out_endp[ep_num].doepctl),
+ buf, pktcnt, length);
return 0;
}
@@ -168,7 +170,7 @@ int setdma_tx(struct s3c_ep *ep, struct s3c_request *req)
length = req->req.length - req->req.actual;
if (ep_num == EP0_CON)
- length = min_t(length, (u32)ep_maxpacket(ep));
+ length = min(length, (u32)ep_maxpacket(ep));
ep->len = length;
ep->dma_buf = buf;
@@ -225,8 +227,9 @@ static void complete_rx(struct s3c_udc *dev, u8 ep_num)
u32 *p = the_controller->dma_buf[ep_index(ep)+1];
if (list_empty(&ep->queue)) {
- DEBUG_OUT_EP("%s: RX DMA done : NULL REQ on OUT EP-%d\n",
- __func__, ep_num);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "%s: RX DMA done : NULL REQ on OUT EP-%d\n",
+ __func__, ep_num);
return;
}
@@ -249,14 +252,15 @@ static void complete_rx(struct s3c_udc *dev, u8 ep_num)
req->req.actual += min(xfer_size, req->req.length - req->req.actual);
is_short = (xfer_size < ep->ep.maxpacket);
- DEBUG_OUT_EP("%s: RX DMA done : ep = %d, rx bytes = %d/%d, "
- "is_short = %d, DOEPTSIZ = 0x%x, remained bytes = %d\n",
- __func__, ep_num, req->req.actual, req->req.length,
- is_short, ep_tsr, xfer_size);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "%s: RX DMA done : ep = %d, rx bytes = %d/%d, "
+ "is_short = %d, DOEPTSIZ = 0x%x, remained bytes = %d\n",
+ __func__, ep_num, req->req.actual, req->req.length,
+ is_short, ep_tsr, xfer_size);
if (is_short || req->req.actual == req->req.length) {
if (ep_num == EP0_CON && dev->ep0state == DATA_STATE_RECV) {
- DEBUG_OUT_EP(" => Send ZLP\n");
+ debug_cond(DEBUG_OUT_EP != 0, " => Send ZLP\n");
s3c_udc_ep0_zlp(dev);
/* packet will be completed in complete_tx() */
dev->ep0state = WAIT_FOR_IN_COMPLETE;
@@ -266,8 +270,9 @@ static void complete_rx(struct s3c_udc *dev, u8 ep_num)
if (!list_empty(&ep->queue)) {
req = list_entry(ep->queue.next,
struct s3c_request, queue);
- DEBUG_OUT_EP("%s: Next Rx request start...\n",
- __func__);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "%s: Next Rx request start...\n",
+ __func__);
setdma_rx(ep, req);
}
}
@@ -392,8 +397,9 @@ static void process_ep_in_intr(struct s3c_udc *dev)
while (ep_intr) {
if (ep_intr & DAINT_IN_EP_INT(1)) {
ep_intr_status = readl(&reg->in_endp[ep_num].diepint);
- debug_cond(DEBUG_IN_EP, "\tEP%d-IN : DIEPINT = 0x%x\n",
- ep_num, ep_intr_status);
+ debug_cond(DEBUG_IN_EP,
+ "\tEP%d-IN : DIEPINT = 0x%x\n",
+ ep_num, ep_intr_status);
/* Interrupt Clear */
writel(ep_intr_status, &reg->in_endp[ep_num].diepint);
@@ -430,16 +436,18 @@ static void process_ep_out_intr(struct s3c_udc *dev)
u8 ep_num = 0;
ep_intr = readl(&reg->daint);
- DEBUG_OUT_EP("*** %s: EP OUT interrupt : DAINT = 0x%x\n",
- __func__, ep_intr);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "*** %s: EP OUT interrupt : DAINT = 0x%x\n",
+ __func__, ep_intr);
ep_intr = (ep_intr >> DAINT_OUT_BIT) & DAINT_MASK;
while (ep_intr) {
if (ep_intr & 0x1) {
ep_intr_status = readl(&reg->out_endp[ep_num].doepint);
- DEBUG_OUT_EP("\tEP%d-OUT : DOEPINT = 0x%x\n",
- ep_num, ep_intr_status);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "\tEP%d-OUT : DOEPINT = 0x%x\n",
+ ep_num, ep_intr_status);
/* Interrupt Clear */
writel(ep_intr_status, &reg->out_endp[ep_num].doepint);
@@ -457,7 +465,8 @@ static void process_ep_out_intr(struct s3c_udc *dev)
if (ep_intr_status &
CTRL_OUT_EP_SETUP_PHASE_DONE) {
- DEBUG_OUT_EP("SETUP packet arrived\n");
+ debug_cond(DEBUG_OUT_EP != 0,
+ "SETUP packet arrived\n");
s3c_handle_ep0(dev);
}
} else {
@@ -503,7 +512,8 @@ static int s3c_udc_irq(int irq, void *_dev)
usb_status = (readl(&reg->dsts) & 0x6);
if (usb_status & (USB_FULL_30_60MHZ | USB_FULL_48MHZ)) {
- debug_cond(DEBUG_ISR, "\t\tFull Speed Detection\n");
+ debug_cond(DEBUG_ISR,
+ "\t\tFull Speed Detection\n");
set_max_pktsize(dev, USB_SPEED_FULL);
} else {
@@ -571,7 +581,8 @@ static int s3c_udc_irq(int irq, void *_dev)
} else {
reset_available = 1;
- debug_cond(DEBUG_ISR, "\t\tRESET handling skipped\n");
+ debug_cond(DEBUG_ISR,
+ "\t\tRESET handling skipped\n");
}
}
@@ -635,7 +646,7 @@ static int s3c_queue(struct usb_ep *_ep, struct usb_request *_req,
_req, _req->length, _req->buf,
list_empty(&ep->queue), ep->stopped);
-#ifdef DEBUG_S3C_UDC
+#ifdef DEBUG
{
int i, len = _req->length;
@@ -662,14 +673,15 @@ static int s3c_queue(struct usb_ep *_ep, struct usb_request *_req,
} else if (ep_is_in(ep)) {
gintsts = readl(&reg->gintsts);
debug_cond(DEBUG_IN_EP,
- "%s: ep_is_in, S3C_UDC_OTG_GINTSTS=0x%x\n",
- __func__, gintsts);
+ "%s: ep_is_in, S3C_UDC_OTG_GINTSTS=0x%x\n",
+ __func__, gintsts);
setdma_tx(ep, req);
} else {
gintsts = readl(&reg->gintsts);
- DEBUG_OUT_EP("%s:ep_is_out, S3C_UDC_OTG_GINTSTS=0x%x\n",
- __func__, gintsts);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "%s:ep_is_out, S3C_UDC_OTG_GINTSTS=0x%x\n",
+ __func__, gintsts);
setdma_rx(ep, req);
}
@@ -697,7 +709,7 @@ static int write_fifo_ep0(struct s3c_ep *ep, struct s3c_request *req)
max = ep_maxpacket(ep);
- DEBUG_EP0("%s: max = %d\n", __func__, max);
+ debug_cond(DEBUG_EP0 != 0, "%s: max = %d\n", __func__, max);
count = setdma_tx(ep, req);
@@ -712,10 +724,11 @@ static int write_fifo_ep0(struct s3c_ep *ep, struct s3c_request *req)
is_last = 1;
}
- DEBUG_EP0("%s: wrote %s %d bytes%s %d left %p\n", __func__,
- ep->ep.name, count,
- is_last ? "/L" : "",
- req->req.length - req->req.actual - count, req);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: wrote %s %d bytes%s %d left %p\n", __func__,
+ ep->ep.name, count,
+ is_last ? "/L" : "",
+ req->req.length - req->req.actual - count, req);
/* requests complete when all IN data is in the FIFO */
if (is_last) {
@@ -736,8 +749,9 @@ int s3c_fifo_read(struct s3c_ep *ep, u32 *cp, int max)
(unsigned long) ep->dev->dma_buf[ep_index(ep)]
+ DMA_BUFFER_SIZE);
- DEBUG_EP0("%s: bytes=%d, ep_index=%d %p\n", __func__,
- bytes, ep_index(ep), ep->dev->dma_buf[ep_index(ep)]);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: bytes=%d, ep_index=%d %p\n", __func__,
+ bytes, ep_index(ep), ep->dev->dma_buf[ep_index(ep)]);
return bytes;
}
@@ -756,8 +770,9 @@ static void udc_set_address(struct s3c_udc *dev, unsigned char address)
s3c_udc_ep0_zlp(dev);
- DEBUG_EP0("%s: USB OTG 2.0 Device address=%d, DCFG=0x%x\n",
- __func__, address, readl(&reg->dcfg));
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: USB OTG 2.0 Device address=%d, DCFG=0x%x\n",
+ __func__, address, readl(&reg->dcfg));
dev->usb_address = address;
}
@@ -778,8 +793,9 @@ static inline void s3c_udc_ep0_set_stall(struct s3c_ep *ep)
writel(ep_ctrl, &reg->in_endp[EP0_CON].diepctl);
- DEBUG_EP0("%s: set ep%d stall, DIEPCTL0 = 0x%x\n",
- __func__, ep_index(ep), &reg->in_endp[EP0_CON].diepctl);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: set ep%d stall, DIEPCTL0 = 0x%p\n",
+ __func__, ep_index(ep), &reg->in_endp[EP0_CON].diepctl);
/*
* The application can only set this bit, and the core clears it,
* when a SETUP token is received for this endpoint
@@ -803,8 +819,9 @@ static void s3c_ep0_read(struct s3c_udc *dev)
return;
}
- DEBUG_EP0("%s: req = %p, req.length = 0x%x, req.actual = 0x%x\n",
- __func__, req, req->req.length, req->req.actual);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: req = %p, req.length = 0x%x, req.actual = 0x%x\n",
+ __func__, req, req->req.length, req->req.actual);
if (req->req.length == 0) {
/* zlp for Set_configuration, Set_interface,
@@ -813,8 +830,9 @@ static void s3c_ep0_read(struct s3c_udc *dev)
ep->len = 0;
s3c_udc_ep0_zlp(dev);
- DEBUG_EP0("%s: req.length = 0, bRequest = %d\n",
- __func__, usb_ctrl->bRequest);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: req.length = 0, bRequest = %d\n",
+ __func__, usb_ctrl->bRequest);
return;
}
@@ -836,12 +854,13 @@ static int s3c_ep0_write(struct s3c_udc *dev)
req = list_entry(ep->queue.next, struct s3c_request, queue);
if (!req) {
- DEBUG_EP0("%s: NULL REQ\n", __func__);
+ debug_cond(DEBUG_EP0 != 0, "%s: NULL REQ\n", __func__);
return 0;
}
- DEBUG_EP0("%s: req = %p, req.length = 0x%x, req.actual = 0x%x\n",
- __func__, req, req->req.length, req->req.actual);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: req = %p, req.length = 0x%x, req.actual = 0x%x\n",
+ __func__, req, req->req.length, req->req.actual);
if (req->req.length - req->req.actual == ep0_fifo_size) {
/* Next write will end with the packet size, */
@@ -854,11 +873,13 @@ static int s3c_ep0_write(struct s3c_udc *dev)
if ((ret == 1) && !need_zlp) {
/* Last packet */
dev->ep0state = WAIT_FOR_COMPLETE;
- DEBUG_EP0("%s: finished, waiting for status\n", __func__);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: finished, waiting for status\n", __func__);
} else {
dev->ep0state = DATA_STATE_XMIT;
- DEBUG_EP0("%s: not finished\n", __func__);
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: not finished\n", __func__);
}
return 1;
@@ -873,30 +894,35 @@ int s3c_udc_get_status(struct s3c_udc *dev,
u32 ep_ctrl;
u32 *p = the_controller->dma_buf[1];
- DEBUG_SETUP("%s: *** USB_REQ_GET_STATUS\n", __func__);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: *** USB_REQ_GET_STATUS\n", __func__);
printf("crq->brequest:0x%x\n", crq->bRequestType & USB_RECIP_MASK);
switch (crq->bRequestType & USB_RECIP_MASK) {
case USB_RECIP_INTERFACE:
g_status = 0;
- DEBUG_SETUP("\tGET_STATUS:USB_RECIP_INTERFACE, g_stauts = %d\n",
- g_status);
+ debug_cond(DEBUG_SETUP != 0,
+ "\tGET_STATUS:USB_RECIP_INTERFACE, g_stauts = %d\n",
+ g_status);
break;
case USB_RECIP_DEVICE:
g_status = 0x1; /* Self powered */
- DEBUG_SETUP("\tGET_STATUS: USB_RECIP_DEVICE, g_stauts = %d\n",
- g_status);
+ debug_cond(DEBUG_SETUP != 0,
+ "\tGET_STATUS: USB_RECIP_DEVICE, g_stauts = %d\n",
+ g_status);
break;
case USB_RECIP_ENDPOINT:
if (crq->wLength > 2) {
- DEBUG_SETUP("\tGET_STATUS:Not support EP or wLength\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tGET_STATUS:Not support EP or wLength\n");
return 1;
}
g_status = dev->ep[ep_num].stopped;
- DEBUG_SETUP("\tGET_STATUS: USB_RECIP_ENDPOINT, g_stauts = %d\n",
- g_status);
+ debug_cond(DEBUG_SETUP != 0,
+ "\tGET_STATUS: USB_RECIP_ENDPOINT, g_stauts = %d\n",
+ g_status);
break;
@@ -1134,11 +1160,13 @@ static int s3c_udc_clear_feature(struct usb_ep *_ep)
ep_num = ep_index(ep);
dev = ep->dev;
- DEBUG_SETUP("%s: ep_num = %d, is_in = %d, clear_feature_flag = %d\n",
- __func__, ep_num, ep_is_in(ep), clear_feature_flag);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: ep_num = %d, is_in = %d, clear_feature_flag = %d\n",
+ __func__, ep_num, ep_is_in(ep), clear_feature_flag);
if (usb_ctrl->wLength != 0) {
- DEBUG_SETUP("\tCLEAR_FEATURE: wLength is not zero.....\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tCLEAR_FEATURE: wLength is not zero.....\n");
return 1;
}
@@ -1146,11 +1174,13 @@ static int s3c_udc_clear_feature(struct usb_ep *_ep)
case USB_RECIP_DEVICE:
switch (usb_ctrl->wValue) {
case USB_DEVICE_REMOTE_WAKEUP:
- DEBUG_SETUP("\tOFF:USB_DEVICE_REMOTE_WAKEUP\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tOFF:USB_DEVICE_REMOTE_WAKEUP\n");
break;
case USB_DEVICE_TEST_MODE:
- DEBUG_SETUP("\tCLEAR_FEATURE: USB_DEVICE_TEST_MODE\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tCLEAR_FEATURE: USB_DEVICE_TEST_MODE\n");
/** @todo Add CLEAR_FEATURE for TEST modes. */
break;
}
@@ -1159,8 +1189,9 @@ static int s3c_udc_clear_feature(struct usb_ep *_ep)
break;
case USB_RECIP_ENDPOINT:
- DEBUG_SETUP("\tCLEAR_FEATURE:USB_RECIP_ENDPOINT, wValue = %d\n",
- usb_ctrl->wValue);
+ debug_cond(DEBUG_SETUP != 0,
+ "\tCLEAR_FEATURE:USB_RECIP_ENDPOINT, wValue = %d\n",
+ usb_ctrl->wValue);
if (usb_ctrl->wValue == USB_ENDPOINT_HALT) {
if (ep_num == 0) {
@@ -1193,11 +1224,13 @@ static int s3c_udc_set_feature(struct usb_ep *_ep)
ep_num = ep_index(ep);
dev = ep->dev;
- DEBUG_SETUP("%s: *** USB_REQ_SET_FEATURE , ep_num = %d\n",
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: *** USB_REQ_SET_FEATURE , ep_num = %d\n",
__func__, ep_num);
if (usb_ctrl->wLength != 0) {
- DEBUG_SETUP("\tSET_FEATURE: wLength is not zero.....\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tSET_FEATURE: wLength is not zero.....\n");
return 1;
}
@@ -1205,20 +1238,24 @@ static int s3c_udc_set_feature(struct usb_ep *_ep)
case USB_RECIP_DEVICE:
switch (usb_ctrl->wValue) {
case USB_DEVICE_REMOTE_WAKEUP:
- DEBUG_SETUP("\tSET_FEATURE:USB_DEVICE_REMOTE_WAKEUP\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tSET_FEATURE:USB_DEVICE_REMOTE_WAKEUP\n");
break;
case USB_DEVICE_B_HNP_ENABLE:
- DEBUG_SETUP("\tSET_FEATURE: USB_DEVICE_B_HNP_ENABLE\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tSET_FEATURE: USB_DEVICE_B_HNP_ENABLE\n");
break;
case USB_DEVICE_A_HNP_SUPPORT:
/* RH port supports HNP */
- DEBUG_SETUP("\tSET_FEATURE:USB_DEVICE_A_HNP_SUPPORT\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tSET_FEATURE:USB_DEVICE_A_HNP_SUPPORT\n");
break;
case USB_DEVICE_A_ALT_HNP_SUPPORT:
/* other RH port does */
- DEBUG_SETUP("\tSET: USB_DEVICE_A_ALT_HNP_SUPPORT\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tSET: USB_DEVICE_A_ALT_HNP_SUPPORT\n");
break;
}
@@ -1226,11 +1263,13 @@ static int s3c_udc_set_feature(struct usb_ep *_ep)
return 0;
case USB_RECIP_INTERFACE:
- DEBUG_SETUP("\tSET_FEATURE: USB_RECIP_INTERFACE\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tSET_FEATURE: USB_RECIP_INTERFACE\n");
break;
case USB_RECIP_ENDPOINT:
- DEBUG_SETUP("\tSET_FEATURE: USB_RECIP_ENDPOINT\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tSET_FEATURE: USB_RECIP_ENDPOINT\n");
if (usb_ctrl->wValue == USB_ENDPOINT_HALT) {
if (ep_num == 0) {
s3c_udc_ep0_set_stall(ep);
@@ -1262,14 +1301,15 @@ void s3c_ep0_setup(struct s3c_udc *dev)
/* read control req from fifo (8 bytes) */
s3c_fifo_read(ep, (u32 *)usb_ctrl, 8);
- DEBUG_SETUP("%s: bRequestType = 0x%x(%s), bRequest = 0x%x"
- "\twLength = 0x%x, wValue = 0x%x, wIndex= 0x%x\n",
- __func__, usb_ctrl->bRequestType,
- (usb_ctrl->bRequestType & USB_DIR_IN) ? "IN" : "OUT",
- usb_ctrl->bRequest,
- usb_ctrl->wLength, usb_ctrl->wValue, usb_ctrl->wIndex);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: bRequestType = 0x%x(%s), bRequest = 0x%x"
+ "\twLength = 0x%x, wValue = 0x%x, wIndex= 0x%x\n",
+ __func__, usb_ctrl->bRequestType,
+ (usb_ctrl->bRequestType & USB_DIR_IN) ? "IN" : "OUT",
+ usb_ctrl->bRequest,
+ usb_ctrl->wLength, usb_ctrl->wValue, usb_ctrl->wIndex);
-#ifdef DEBUG_S3C_UDC
+#ifdef DEBUG
{
int i, len = sizeof(*usb_ctrl);
char *p = (char *)usb_ctrl;
@@ -1286,10 +1326,12 @@ void s3c_ep0_setup(struct s3c_udc *dev)
if (usb_ctrl->bRequest == GET_MAX_LUN_REQUEST &&
usb_ctrl->wLength != 1) {
- DEBUG_SETUP("\t%s:GET_MAX_LUN_REQUEST:invalid",
- __func__);
- DEBUG_SETUP("wLength = %d, setup returned\n",
- usb_ctrl->wLength);
+ debug_cond(DEBUG_SETUP != 0,
+ "\t%s:GET_MAX_LUN_REQUEST:invalid",
+ __func__);
+ debug_cond(DEBUG_SETUP != 0,
+ "wLength = %d, setup returned\n",
+ usb_ctrl->wLength);
s3c_udc_ep0_set_stall(ep);
dev->ep0state = WAIT_FOR_SETUP;
@@ -1298,8 +1340,9 @@ void s3c_ep0_setup(struct s3c_udc *dev)
} else if (usb_ctrl->bRequest == BOT_RESET_REQUEST &&
usb_ctrl->wLength != 0) {
/* Bulk-Only *mass storge reset of class-specific request */
- DEBUG_SETUP("%s:BOT Rest:invalid wLength =%d, setup returned\n",
- __func__, usb_ctrl->wLength);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s:BOT Rest:invalid wLength =%d, setup returned\n",
+ __func__, usb_ctrl->wLength);
s3c_udc_ep0_set_stall(ep);
dev->ep0state = WAIT_FOR_SETUP;
@@ -1323,8 +1366,9 @@ void s3c_ep0_setup(struct s3c_udc *dev)
if (dev->req_std) {
switch (usb_ctrl->bRequest) {
case USB_REQ_SET_ADDRESS:
- DEBUG_SETUP("%s: *** USB_REQ_SET_ADDRESS (%d)\n",
- __func__, usb_ctrl->wValue);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: *** USB_REQ_SET_ADDRESS (%d)\n",
+ __func__, usb_ctrl->wValue);
if (usb_ctrl->bRequestType
!= (USB_TYPE_STANDARD | USB_RECIP_DEVICE))
break;
@@ -1333,9 +1377,11 @@ void s3c_ep0_setup(struct s3c_udc *dev)
return;
case USB_REQ_SET_CONFIGURATION:
- DEBUG_SETUP("=====================================\n");
- DEBUG_SETUP("%s: USB_REQ_SET_CONFIGURATION (%d)\n",
- __func__, usb_ctrl->wValue);
+ debug_cond(DEBUG_SETUP != 0,
+ "=====================================\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: USB_REQ_SET_CONFIGURATION (%d)\n",
+ __func__, usb_ctrl->wValue);
if (usb_ctrl->bRequestType == USB_RECIP_DEVICE)
reset_available = 1;
@@ -1343,13 +1389,15 @@ void s3c_ep0_setup(struct s3c_udc *dev)
break;
case USB_REQ_GET_DESCRIPTOR:
- DEBUG_SETUP("%s: *** USB_REQ_GET_DESCRIPTOR\n",
- __func__);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: *** USB_REQ_GET_DESCRIPTOR\n",
+ __func__);
break;
case USB_REQ_SET_INTERFACE:
- DEBUG_SETUP("%s: *** USB_REQ_SET_INTERFACE (%d)\n",
- __func__, usb_ctrl->wValue);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: *** USB_REQ_SET_INTERFACE (%d)\n",
+ __func__, usb_ctrl->wValue);
if (usb_ctrl->bRequestType == USB_RECIP_INTERFACE)
reset_available = 1;
@@ -1357,8 +1405,9 @@ void s3c_ep0_setup(struct s3c_udc *dev)
break;
case USB_REQ_GET_CONFIGURATION:
- DEBUG_SETUP("%s: *** USB_REQ_GET_CONFIGURATION\n",
- __func__);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: *** USB_REQ_GET_CONFIGURATION\n",
+ __func__);
break;
case USB_REQ_GET_STATUS:
@@ -1384,8 +1433,9 @@ void s3c_ep0_setup(struct s3c_udc *dev)
break;
default:
- DEBUG_SETUP("%s: *** Default of usb_ctrl->bRequest=0x%x"
- "happened.\n", __func__, usb_ctrl->bRequest);
+ debug_cond(DEBUG_SETUP != 0,
+ "%s: *** Default of usb_ctrl->bRequest=0x%x"
+ "happened.\n", __func__, usb_ctrl->bRequest);
break;
}
}
@@ -1394,7 +1444,8 @@ void s3c_ep0_setup(struct s3c_udc *dev)
if (likely(dev->driver)) {
/* device-2-host (IN) or no data setup command,
* process immediately */
- DEBUG_SETUP("%s:usb_ctrlreq will be passed to fsg_setup()\n",
+ debug_cond(DEBUG_SETUP != 0,
+ "%s:usb_ctrlreq will be passed to fsg_setup()\n",
__func__);
spin_unlock(&dev->lock);
@@ -1406,17 +1457,20 @@ void s3c_ep0_setup(struct s3c_udc *dev)
s3c_udc_ep0_set_stall(ep);
dev->ep0state = WAIT_FOR_SETUP;
- DEBUG_SETUP("\tdev->driver->setup failed (%d),"
+ debug_cond(DEBUG_SETUP != 0,
+ "\tdev->driver->setup failed (%d),"
" bRequest = %d\n",
i, usb_ctrl->bRequest);
} else if (dev->req_pending) {
dev->req_pending = 0;
- DEBUG_SETUP("\tdev->req_pending...\n");
+ debug_cond(DEBUG_SETUP != 0,
+ "\tdev->req_pending...\n");
}
- DEBUG_SETUP("\tep0state = %s\n", state_names[dev->ep0state]);
+ debug_cond(DEBUG_SETUP != 0,
+ "\tep0state = %s\n", state_names[dev->ep0state]);
}
}
@@ -1427,18 +1481,21 @@ void s3c_ep0_setup(struct s3c_udc *dev)
static void s3c_handle_ep0(struct s3c_udc *dev)
{
if (dev->ep0state == WAIT_FOR_SETUP) {
- DEBUG_OUT_EP("%s: WAIT_FOR_SETUP\n", __func__);
+ debug_cond(DEBUG_OUT_EP != 0,
+ "%s: WAIT_FOR_SETUP\n", __func__);
s3c_ep0_setup(dev);
} else {
- DEBUG_OUT_EP("%s: strange state!!(state = %s)\n",
+ debug_cond(DEBUG_OUT_EP != 0,
+ "%s: strange state!!(state = %s)\n",
__func__, state_names[dev->ep0state]);
}
}
static void s3c_ep0_kick(struct s3c_udc *dev, struct s3c_ep *ep)
{
- DEBUG_EP0("%s: ep_is_in = %d\n", __func__, ep_is_in(ep));
+ debug_cond(DEBUG_EP0 != 0,
+ "%s: ep_is_in = %d\n", __func__, ep_is_in(ep));
if (ep_is_in(ep)) {
dev->ep0state = DATA_STATE_XMIT;
s3c_ep0_write(dev);
diff --git a/drivers/usb/gadget/usbstring.c b/drivers/usb/gadget/usbstring.c
index 95555cf96b..4dbe060d6f 100644
--- a/drivers/usb/gadget/usbstring.c
+++ b/drivers/usb/gadget/usbstring.c
@@ -13,6 +13,7 @@
#include <common.h>
#include <asm/errno.h>
#include <linux/usb/ch9.h>
+#include <usbdescriptors.h>
#include <linux/usb/gadget.h>
#include <asm/unaligned.h>
diff --git a/drivers/usb/host/Makefile b/drivers/usb/host/Makefile
index 0d4657edf2..59c3e57563 100644
--- a/drivers/usb/host/Makefile
+++ b/drivers/usb/host/Makefile
@@ -50,6 +50,7 @@ COBJS-$(CONFIG_USB_EHCI_PPC4XX) += ehci-ppc4xx.o
COBJS-$(CONFIG_USB_EHCI_IXP4XX) += ehci-ixp.o
COBJS-$(CONFIG_USB_EHCI_MARVELL) += ehci-marvell.o
COBJS-$(CONFIG_USB_EHCI_PCI) += ehci-pci.o
+COBJS-$(CONFIG_USB_EHCI_S5P) += ehci-s5p.o
COBJS-$(CONFIG_USB_EHCI_TEGRA) += ehci-tegra.o
COBJS-$(CONFIG_USB_EHCI_VCT) += ehci-vct.o
diff --git a/drivers/usb/host/ehci-hcd.c b/drivers/usb/host/ehci-hcd.c
index 38d6ae03d3..04300be110 100644
--- a/drivers/usb/host/ehci-hcd.c
+++ b/drivers/usb/host/ehci-hcd.c
@@ -108,99 +108,6 @@ static struct descriptor {
#define ehci_is_TDI() (0)
#endif
-#if defined(CONFIG_EHCI_DCACHE)
-/*
- * Routines to handle (flush/invalidate) the dcache for the QH and qTD
- * structures and data buffers. This is needed on platforms using this
- * EHCI support with dcache enabled.
- */
-static void flush_invalidate(u32 addr, int size, int flush)
-{
- if (flush)
- flush_dcache_range(addr, addr + size);
- else
- invalidate_dcache_range(addr, addr + size);
-}
-
-static void cache_qtd(struct qTD *qtd, int flush)
-{
- u32 *ptr = (u32 *)qtd->qt_buffer[0];
- int len = (qtd->qt_token & 0x7fff0000) >> 16;
-
- flush_invalidate((u32)qtd, sizeof(struct qTD), flush);
- if (ptr && len)
- flush_invalidate((u32)ptr, len, flush);
-}
-
-
-static inline struct QH *qh_addr(struct QH *qh)
-{
- return (struct QH *)((u32)qh & 0xffffffe0);
-}
-
-static void cache_qh(struct QH *qh, int flush)
-{
- struct qTD *qtd;
- struct qTD *next;
- static struct qTD *first_qtd;
-
- /*
- * Walk the QH list and flush/invalidate all entries
- */
- while (1) {
- flush_invalidate((u32)qh_addr(qh), sizeof(struct QH), flush);
- if ((u32)qh & QH_LINK_TYPE_QH)
- break;
- qh = qh_addr(qh);
- qh = (struct QH *)qh->qh_link;
- }
- qh = qh_addr(qh);
-
- /*
- * Save first qTD pointer, needed for invalidating pass on this QH
- */
- if (flush)
- first_qtd = qtd = (struct qTD *)(*(u32 *)&qh->qh_overlay &
- 0xffffffe0);
- else
- qtd = first_qtd;
-
- /*
- * Walk the qTD list and flush/invalidate all entries
- */
- while (1) {
- if (qtd == NULL)
- break;
- cache_qtd(qtd, flush);
- next = (struct qTD *)((u32)qtd->qt_next & 0xffffffe0);
- if (next == qtd)
- break;
- qtd = next;
- }
-}
-
-static inline void ehci_flush_dcache(struct QH *qh)
-{
- cache_qh(qh, 1);
-}
-
-static inline void ehci_invalidate_dcache(struct QH *qh)
-{
- cache_qh(qh, 0);
-}
-#else /* CONFIG_EHCI_DCACHE */
-/*
- *
- */
-static inline void ehci_flush_dcache(struct QH *qh)
-{
-}
-
-static inline void ehci_invalidate_dcache(struct QH *qh)
-{
-}
-#endif /* CONFIG_EHCI_DCACHE */
-
void __ehci_powerup_fixup(uint32_t *status_reg, uint32_t *reg)
{
mdelay(50);
@@ -225,11 +132,6 @@ static int handshake(uint32_t *ptr, uint32_t mask, uint32_t done, int usec)
return -1;
}
-static void ehci_free(void *p, size_t sz)
-{
-
-}
-
static int ehci_reset(void)
{
uint32_t cmd;
@@ -266,43 +168,22 @@ out:
return ret;
}
-static void *ehci_alloc(size_t sz, size_t align)
-{
- static struct QH qh __attribute__((aligned(32)));
- static struct qTD td[3] __attribute__((aligned (32)));
- static int ntds;
- void *p;
-
- switch (sz) {
- case sizeof(struct QH):
- p = &qh;
- ntds = 0;
- break;
- case sizeof(struct qTD):
- if (ntds == 3) {
- debug("out of TDs\n");
- return NULL;
- }
- p = &td[ntds];
- ntds++;
- break;
- default:
- debug("unknown allocation size\n");
- return NULL;
- }
-
- memset(p, 0, sz);
- return p;
-}
-
static int ehci_td_buffer(struct qTD *td, void *buf, size_t sz)
{
- uint32_t addr, delta, next;
+ uint32_t delta, next;
+ uint32_t addr = (uint32_t)buf;
+ size_t rsz = roundup(sz, 32);
int idx;
- addr = (uint32_t) buf;
+ if (sz != rsz)
+ debug("EHCI-HCD: Misaligned buffer size (%08x)\n", sz);
+
+ if (addr & 31)
+ debug("EHCI-HCD: Misaligned buffer address (%p)\n", buf);
+
idx = 0;
while (idx < 5) {
+ flush_dcache_range(addr, addr + rsz);
td->qt_buffer[idx] = cpu_to_hc32(addr);
td->qt_buffer_hi[idx] = 0;
next = (addr + 4096) & ~4095;
@@ -326,8 +207,10 @@ static int
ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
int length, struct devrequest *req)
{
- struct QH *qh;
- struct qTD *td;
+ static struct QH qh __attribute__((aligned(32)));
+ static struct qTD qtd[3] __attribute__((aligned (32)));
+ int qtd_counter = 0;
+
volatile struct qTD *vtd;
unsigned long ts;
uint32_t *tdp;
@@ -346,12 +229,22 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
le16_to_cpu(req->value), le16_to_cpu(req->value),
le16_to_cpu(req->index));
- qh = ehci_alloc(sizeof(struct QH), 32);
- if (qh == NULL) {
- debug("unable to allocate QH\n");
- return -1;
- }
- qh->qh_link = cpu_to_hc32((uint32_t)&qh_list | QH_LINK_TYPE_QH);
+ memset(&qh, 0, sizeof(struct QH));
+ memset(qtd, 0, sizeof(qtd));
+
+ toggle = usb_gettoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe));
+
+ /*
+ * Setup QH (3.6 in ehci-r10.pdf)
+ *
+ * qh_link ................. 03-00 H
+ * qh_endpt1 ............... 07-04 H
+ * qh_endpt2 ............... 0B-08 H
+ * - qh_curtd
+ * qh_overlay.qt_next ...... 13-10 H
+ * - qh_overlay.qt_altnext
+ */
+ qh.qh_link = cpu_to_hc32((uint32_t)&qh_list | QH_LINK_TYPE_QH);
c = (usb_pipespeed(pipe) != USB_SPEED_HIGH &&
usb_pipeendpoint(pipe) == 0) ? 1 : 0;
endpt = (8 << 28) |
@@ -362,88 +255,98 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
(usb_pipespeed(pipe) << 12) |
(usb_pipeendpoint(pipe) << 8) |
(0 << 7) | (usb_pipedevice(pipe) << 0);
- qh->qh_endpt1 = cpu_to_hc32(endpt);
+ qh.qh_endpt1 = cpu_to_hc32(endpt);
endpt = (1 << 30) |
(dev->portnr << 23) |
(dev->parent->devnum << 16) | (0 << 8) | (0 << 0);
- qh->qh_endpt2 = cpu_to_hc32(endpt);
- qh->qh_overlay.qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
-
- td = NULL;
- tdp = &qh->qh_overlay.qt_next;
+ qh.qh_endpt2 = cpu_to_hc32(endpt);
+ qh.qh_overlay.qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
- toggle =
- usb_gettoggle(dev, usb_pipeendpoint(pipe), usb_pipeout(pipe));
+ tdp = &qh.qh_overlay.qt_next;
if (req != NULL) {
- td = ehci_alloc(sizeof(struct qTD), 32);
- if (td == NULL) {
- debug("unable to allocate SETUP td\n");
- goto fail;
- }
- td->qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
- td->qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
+ /*
+ * Setup request qTD (3.5 in ehci-r10.pdf)
+ *
+ * qt_next ................ 03-00 H
+ * qt_altnext ............. 07-04 H
+ * qt_token ............... 0B-08 H
+ *
+ * [ buffer, buffer_hi ] loaded with "req".
+ */
+ qtd[qtd_counter].qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
+ qtd[qtd_counter].qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
token = (0 << 31) |
(sizeof(*req) << 16) |
(0 << 15) | (0 << 12) | (3 << 10) | (2 << 8) | (0x80 << 0);
- td->qt_token = cpu_to_hc32(token);
- if (ehci_td_buffer(td, req, sizeof(*req)) != 0) {
+ qtd[qtd_counter].qt_token = cpu_to_hc32(token);
+ if (ehci_td_buffer(&qtd[qtd_counter], req, sizeof(*req)) != 0) {
debug("unable construct SETUP td\n");
- ehci_free(td, sizeof(*td));
goto fail;
}
- *tdp = cpu_to_hc32((uint32_t) td);
- tdp = &td->qt_next;
+ /* Update previous qTD! */
+ *tdp = cpu_to_hc32((uint32_t)&qtd[qtd_counter]);
+ tdp = &qtd[qtd_counter++].qt_next;
toggle = 1;
}
if (length > 0 || req == NULL) {
- td = ehci_alloc(sizeof(struct qTD), 32);
- if (td == NULL) {
- debug("unable to allocate DATA td\n");
- goto fail;
- }
- td->qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
- td->qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
+ /*
+ * Setup request qTD (3.5 in ehci-r10.pdf)
+ *
+ * qt_next ................ 03-00 H
+ * qt_altnext ............. 07-04 H
+ * qt_token ............... 0B-08 H
+ *
+ * [ buffer, buffer_hi ] loaded with "buffer".
+ */
+ qtd[qtd_counter].qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
+ qtd[qtd_counter].qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
token = (toggle << 31) |
(length << 16) |
((req == NULL ? 1 : 0) << 15) |
(0 << 12) |
(3 << 10) |
((usb_pipein(pipe) ? 1 : 0) << 8) | (0x80 << 0);
- td->qt_token = cpu_to_hc32(token);
- if (ehci_td_buffer(td, buffer, length) != 0) {
+ qtd[qtd_counter].qt_token = cpu_to_hc32(token);
+ if (ehci_td_buffer(&qtd[qtd_counter], buffer, length) != 0) {
debug("unable construct DATA td\n");
- ehci_free(td, sizeof(*td));
goto fail;
}
- *tdp = cpu_to_hc32((uint32_t) td);
- tdp = &td->qt_next;
+ /* Update previous qTD! */
+ *tdp = cpu_to_hc32((uint32_t)&qtd[qtd_counter]);
+ tdp = &qtd[qtd_counter++].qt_next;
}
if (req != NULL) {
- td = ehci_alloc(sizeof(struct qTD), 32);
- if (td == NULL) {
- debug("unable to allocate ACK td\n");
- goto fail;
- }
- td->qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
- td->qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
+ /*
+ * Setup request qTD (3.5 in ehci-r10.pdf)
+ *
+ * qt_next ................ 03-00 H
+ * qt_altnext ............. 07-04 H
+ * qt_token ............... 0B-08 H
+ */
+ qtd[qtd_counter].qt_next = cpu_to_hc32(QT_NEXT_TERMINATE);
+ qtd[qtd_counter].qt_altnext = cpu_to_hc32(QT_NEXT_TERMINATE);
token = (toggle << 31) |
(0 << 16) |
(1 << 15) |
(0 << 12) |
(3 << 10) |
((usb_pipein(pipe) ? 0 : 1) << 8) | (0x80 << 0);
- td->qt_token = cpu_to_hc32(token);
- *tdp = cpu_to_hc32((uint32_t) td);
- tdp = &td->qt_next;
+ qtd[qtd_counter].qt_token = cpu_to_hc32(token);
+ /* Update previous qTD! */
+ *tdp = cpu_to_hc32((uint32_t)&qtd[qtd_counter]);
+ tdp = &qtd[qtd_counter++].qt_next;
}
- qh_list.qh_link = cpu_to_hc32((uint32_t) qh | QH_LINK_TYPE_QH);
+ qh_list.qh_link = cpu_to_hc32((uint32_t)&qh | QH_LINK_TYPE_QH);
/* Flush dcache */
- ehci_flush_dcache(&qh_list);
+ flush_dcache_range((uint32_t)&qh_list,
+ (uint32_t)&qh_list + sizeof(struct QH));
+ flush_dcache_range((uint32_t)&qh, (uint32_t)&qh + sizeof(struct QH));
+ flush_dcache_range((uint32_t)qtd, (uint32_t)qtd + sizeof(qtd));
usbsts = ehci_readl(&hcor->or_usbsts);
ehci_writel(&hcor->or_usbsts, (usbsts & 0x3f));
@@ -462,17 +365,27 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
/* Wait for TDs to be processed. */
ts = get_timer(0);
- vtd = td;
+ vtd = &qtd[qtd_counter - 1];
timeout = USB_TIMEOUT_MS(pipe);
do {
/* Invalidate dcache */
- ehci_invalidate_dcache(&qh_list);
+ invalidate_dcache_range((uint32_t)&qh_list,
+ (uint32_t)&qh_list + sizeof(struct QH));
+ invalidate_dcache_range((uint32_t)&qh,
+ (uint32_t)&qh + sizeof(struct QH));
+ invalidate_dcache_range((uint32_t)qtd,
+ (uint32_t)qtd + sizeof(qtd));
+
token = hc32_to_cpu(vtd->qt_token);
if (!(token & 0x80))
break;
WATCHDOG_RESET();
} while (get_timer(ts) < timeout);
+ /* Invalidate the memory area occupied by buffer */
+ invalidate_dcache_range(((uint32_t)buffer & ~31),
+ ((uint32_t)buffer & ~31) + roundup(length, 32));
+
/* Check that the TD processing happened */
if (token & 0x80) {
printf("EHCI timed out on TD - token=%#x\n", token);
@@ -492,7 +405,7 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
qh_list.qh_link = cpu_to_hc32((uint32_t)&qh_list | QH_LINK_TYPE_QH);
- token = hc32_to_cpu(qh->qh_overlay.qt_token);
+ token = hc32_to_cpu(qh.qh_overlay.qt_token);
if (!(token & 0x80)) {
debug("TOKEN=%#x\n", token);
switch (token & 0xfc) {
@@ -531,13 +444,6 @@ ehci_submit_async(struct usb_device *dev, unsigned long pipe, void *buffer,
return (dev->status != USB_ST_NOT_PROC) ? 0 : -1;
fail:
- td = (void *)hc32_to_cpu(qh->qh_overlay.qt_next);
- while (td != (void *)QT_NEXT_TERMINATE) {
- qh->qh_overlay.qt_next = td->qt_next;
- ehci_free(td, sizeof(*td));
- td = (void *)hc32_to_cpu(qh->qh_overlay.qt_next);
- }
- ehci_free(qh, sizeof(*qh));
return -1;
}
diff --git a/drivers/usb/host/ehci-mx6.c b/drivers/usb/host/ehci-mx6.c
index 5dec673c8e..42c77fe333 100644
--- a/drivers/usb/host/ehci-mx6.c
+++ b/drivers/usb/host/ehci-mx6.c
@@ -73,7 +73,8 @@ static void usbh1_internal_phy_clock_gate(int on)
static void usbh1_power_config(void)
{
- struct anatop_regs *anatop = (struct anatop_regs *)ANATOP_BASE_ADDR;
+ struct anatop_regs __iomem *anatop =
+ (struct anatop_regs __iomem *)ANATOP_BASE_ADDR;
/*
* Some phy and power's special controls for host1
* 1. The external charger detector needs to be disabled
@@ -87,7 +88,7 @@ static void usbh1_power_config(void)
&anatop->usb2_chrg_detect);
__raw_writel(ANADIG_USB2_PLL_480_CTRL_BYPASS,
- &anatop->usb2_pll_480_ctrl);
+ &anatop->usb2_pll_480_ctrl_clr);
__raw_writel(ANADIG_USB2_PLL_480_CTRL_ENABLE |
ANADIG_USB2_PLL_480_CTRL_POWER |
diff --git a/drivers/usb/host/ehci-mxc.c b/drivers/usb/host/ehci-mxc.c
index 61dbccd53c..45cbd18a00 100644
--- a/drivers/usb/host/ehci-mxc.c
+++ b/drivers/usb/host/ehci-mxc.c
@@ -125,11 +125,7 @@ int ehci_hcd_init(void)
hcor = (struct ehci_hcor *)((uint32_t) hccr +
HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
setbits_le32(&ehci->usbmode, CM_HOST);
-#ifdef CONFIG_MX31
- setbits_le32(&ehci->control, USB_EN);
-
__raw_writel(CONFIG_MXC_USB_PORTSC, &ehci->portsc);
-#endif
mxc_set_usbcontrol(CONFIG_MXC_USB_PORT, CONFIG_MXC_USB_FLAGS);
udelay(10000);
diff --git a/drivers/usb/host/ehci-s5p.c b/drivers/usb/host/ehci-s5p.c
new file mode 100644
index 0000000000..4dd4ec168f
--- /dev/null
+++ b/drivers/usb/host/ehci-s5p.c
@@ -0,0 +1,110 @@
+/*
+ * SAMSUNG S5P USB HOST EHCI Controller
+ *
+ * Copyright (C) 2012 Samsung Electronics Co.Ltd
+ * Vivek Gautam <gautam.vivek@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301 USA
+ */
+
+#include <common.h>
+#include <usb.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/ehci-s5p.h>
+#include "ehci.h"
+#include "ehci-core.h"
+
+/* Setup the EHCI host controller. */
+static void setup_usb_phy(struct s5p_usb_phy *usb)
+{
+ clrbits_le32(&usb->usbphyctrl0,
+ HOST_CTRL0_FSEL_MASK |
+ HOST_CTRL0_COMMONON_N |
+ /* HOST Phy setting */
+ HOST_CTRL0_PHYSWRST |
+ HOST_CTRL0_PHYSWRSTALL |
+ HOST_CTRL0_SIDDQ |
+ HOST_CTRL0_FORCESUSPEND |
+ HOST_CTRL0_FORCESLEEP);
+
+ setbits_le32(&usb->usbphyctrl0,
+ /* Setting up the ref freq */
+ (CLK_24MHZ << 16) |
+ /* HOST Phy setting */
+ HOST_CTRL0_LINKSWRST |
+ HOST_CTRL0_UTMISWRST);
+ udelay(10);
+ clrbits_le32(&usb->usbphyctrl0,
+ HOST_CTRL0_LINKSWRST |
+ HOST_CTRL0_UTMISWRST);
+ udelay(20);
+
+ /* EHCI Ctrl setting */
+ setbits_le32(&usb->ehcictrl,
+ EHCICTRL_ENAINCRXALIGN |
+ EHCICTRL_ENAINCR4 |
+ EHCICTRL_ENAINCR8 |
+ EHCICTRL_ENAINCR16);
+}
+
+/* Reset the EHCI host controller. */
+static void reset_usb_phy(struct s5p_usb_phy *usb)
+{
+ /* HOST_PHY reset */
+ setbits_le32(&usb->usbphyctrl0,
+ HOST_CTRL0_PHYSWRST |
+ HOST_CTRL0_PHYSWRSTALL |
+ HOST_CTRL0_SIDDQ |
+ HOST_CTRL0_FORCESUSPEND |
+ HOST_CTRL0_FORCESLEEP);
+}
+
+/*
+ * EHCI-initialization
+ * Create the appropriate control structures to manage
+ * a new EHCI host controller.
+ */
+int ehci_hcd_init(void)
+{
+ struct s5p_usb_phy *usb;
+
+ usb = (struct s5p_usb_phy *)samsung_get_base_usb_phy();
+ setup_usb_phy(usb);
+
+ hccr = (struct ehci_hccr *)(EXYNOS5_USB_HOST_EHCI_BASE);
+ hcor = (struct ehci_hcor *)((uint32_t) hccr
+ + HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
+
+ debug("Exynos5-ehci: init hccr %x and hcor %x hc_length %d\n",
+ (uint32_t)hccr, (uint32_t)hcor,
+ (uint32_t)HC_LENGTH(ehci_readl(&hccr->cr_capbase)));
+
+ return 0;
+}
+
+/*
+ * Destroy the appropriate control structures corresponding
+ * the EHCI host controller.
+ */
+int ehci_hcd_stop()
+{
+ struct s5p_usb_phy *usb;
+
+ usb = (struct s5p_usb_phy *)samsung_get_base_usb_phy();
+ reset_usb_phy(usb);
+
+ return 0;
+}
diff --git a/drivers/usb/musb/Makefile b/drivers/usb/musb/Makefile
index 20b5503c90..ed4c60d8f9 100644
--- a/drivers/usb/musb/Makefile
+++ b/drivers/usb/musb/Makefile
@@ -32,6 +32,10 @@ COBJS-$(CONFIG_USB_DAVINCI) += davinci.o
COBJS-$(CONFIG_USB_OMAP3) += omap3.o
COBJS-$(CONFIG_USB_DA8XX) += da8xx.o
COBJS-$(CONFIG_USB_AM35X) += am35x.o
+COBJS-$(CONFIG_USB_RDA) += rda.o
+ifndef CONFIG_SPL_BUILD
+COBJS-$(CONFIG_MUSB_DMA) += musbhsdma.o
+endif
COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c)
diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c
index 545ebf4b50..5972916f85 100644
--- a/drivers/usb/musb/musb_core.c
+++ b/drivers/usb/musb/musb_core.c
@@ -102,6 +102,7 @@ void musb_configure_ep(const struct musb_epinfo *epinfo, u8 cnt)
if (csr & MUSB_TXCSR_TXPKTRDY)
writew(csr | MUSB_TXCSR_FLUSHFIFO,
&musbr->txcsr);
+ writew(epinfo->epsize, &musbr->txmaxp);
} else {
/* Configure fifo size and fifo base address */
config_fifo(rx, idx, fifoaddr);
@@ -115,6 +116,7 @@ void musb_configure_ep(const struct musb_epinfo *epinfo, u8 cnt)
if (csr & MUSB_RXCSR_RXPKTRDY)
writew(csr | MUSB_RXCSR_FLUSHFIFO,
&musbr->rxcsr);
+ writew(epinfo->epsize, &musbr->rxmaxp);
}
fifoaddr += epinfo->epsize;
epinfo++;
diff --git a/drivers/usb/musb/musb_hcd.c b/drivers/usb/musb/musb_hcd.c
index 2df52c1c33..2464b05577 100644
--- a/drivers/usb/musb/musb_hcd.c
+++ b/drivers/usb/musb/musb_hcd.c
@@ -1113,10 +1113,11 @@ int usb_lowlevel_init(void)
* should be a usb device connected.
*/
timeout = musb_cfg.timeout;
- while (timeout--)
+ while (timeout) {
if (readb(&musbr->devctl) & MUSB_DEVCTL_HM)
break;
-
+ timeout--;
+ }
/* if musb core is not in host mode, then return */
if (!timeout)
return -1;
diff --git a/drivers/usb/musb/musb_udc.c b/drivers/usb/musb/musb_udc.c
index 09cdec31a9..035fa235cd 100644
--- a/drivers/usb/musb/musb_udc.c
+++ b/drivers/usb/musb/musb_udc.c
@@ -50,27 +50,28 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
+#define DEBUG
#include <common.h>
#include <usb/musb_udc.h>
#include "../gadget/ep0.h"
#include "musb_core.h"
+#include <usb/musb_dma.h>
#if defined(CONFIG_USB_OMAP3)
#include "omap3.h"
#elif defined(CONFIG_USB_AM35X)
#include "am35x.h"
#elif defined(CONFIG_USB_DAVINCI)
#include "davinci.h"
+#elif defined(CONFIG_USB_RDA)
+#include "rda.h"
#endif
/* Define MUSB_DEBUG for debugging */
-/* #define MUSB_DEBUG */
+ #define MUSB_DEBUG
#include "musb_debug.h"
-#define MAX_ENDPOINT 15
-
-#define GET_ENDPOINT(dev,ep) \
-(((struct usb_device_instance *)(dev))->bus->endpoint_array + ep)
+#define MAX_ENDPOINT 6
#define SET_EP0_STATE(s) \
do { \
@@ -95,8 +96,8 @@ do { \
} while (0)
/* static implies these initialized to 0 or NULL */
-static int debug_setup;
-static int debug_level;
+static int debug_setup = 1;
+static int debug_level = 4;
static struct musb_epinfo epinfo[MAX_ENDPOINT * 2];
static enum ep0_state_enum {
IDLE = 0,
@@ -111,7 +112,10 @@ static char *ep0_state_strings[4] = {
"SET_ADDRESS",
};
-static struct urb *ep0_urb;
+static u8 ep0_buffer_data[URB_BUF_SIZE] __attribute__((__aligned__(4)));
+
+static struct urb ep0_urb_instance;
+static struct urb *ep0_urb = &ep0_urb_instance;
struct usb_endpoint_instance *ep0_endpoint;
static struct usb_device_instance *udc_device;
static int enabled;
@@ -125,6 +129,9 @@ static void musb_db_regs(void)
b = readb(&musbr->faddr);
serial_printf("\tfaddr 0x%2.2x\n", b);
+ w = readw(&musbr->hwvers);
+ serial_printf("\thardware version 0x%4.4x\n", w);
+
b = readb(&musbr->power);
musb_print_pwr(b);
@@ -174,7 +181,6 @@ static void musb_peri_softconnect(void)
readw(&musbr->intrtx);
udelay(1000 * 1000); /* 1 sec */
-
/* Power on MUSB */
power = readb(&musbr->power);
power |= MUSB_POWER_SOFTCONN;
@@ -182,7 +188,7 @@ static void musb_peri_softconnect(void)
* The usb device interface is usb 1.1
* Disable 2.0 high speed by clearring the hsenable bit.
*/
- power &= ~MUSB_POWER_HSENAB;
+ //power &= ~MUSB_POWER_HSENAB;
writeb(power, &musbr->power);
/* Check if device is in b-peripheral mode */
@@ -398,7 +404,7 @@ static void musb_peri_ep0_idle(void)
__PRETTY_FUNCTION__,
udc_device->address, faddr);
udelay(1000 * 1000);
- hang();
+ return;
}
}
@@ -638,63 +644,82 @@ static void musb_peri_ep0(void)
musb_peri_ep0_rx();
}
+static inline struct usb_endpoint_instance *get_endpoint(
+ struct usb_device_instance *dev, unsigned int ep)
+{
+ int i;
+ for(i = 0; i < MAX_ENDPOINT; i++) {
+ if(dev->bus->endpoint_array[i].endpoint_address == (ep | USB_DIR_OUT))
+ return &(dev->bus->endpoint_array[i]);
+ }
+ return NULL;
+}
+
+#ifdef CONFIG_MUSB_DMA
+#define DMA_BUF_SIZE 1024
+static u8 dma_buf[DMA_BUF_SIZE] __attribute__((__aligned__(CONFIG_SYS_CACHELINE_SIZE)));
+#endif
static void musb_peri_rx_ep(unsigned int ep)
{
- u16 peri_rxcount = readw(&musbr->ep[ep].epN.rxcount);
+ u16 peri_rxcount = udc_chars_in_rxfifo(ep);
if (peri_rxcount) {
struct usb_endpoint_instance *endpoint;
- u32 length;
u8 *data;
- endpoint = GET_ENDPOINT(udc_device, ep);
+ endpoint = get_endpoint((struct usb_device_instance *)udc_device, ep);
if (endpoint && endpoint->rcv_urb) {
struct urb *urb = endpoint->rcv_urb;
- unsigned int remaining_space = urb->buffer_length -
- urb->actual_length;
+ int urb_bad = 0; /* urb is good */
+ u32 xfer;
- if (remaining_space) {
- int urb_bad = 0; /* urb is good */
-
- if (peri_rxcount > remaining_space)
- length = remaining_space;
- else
- length = peri_rxcount;
-
- data = (u8 *) urb->buffer_data;
- data += urb->actual_length;
-
- /* The common musb fifo reader */
- read_fifo(ep, length, data);
+ xfer = MIN(peri_rxcount, urb->req_length);
+ data = (u8 *) urb->buffer;
+ if ((data == 0) || (xfer == 0))
+ return;
+#ifndef CONFIG_MUSB_DMA
+ /* The common musb fifo reader */
+ read_fifo(ep, xfer, data);
+ if (xfer == peri_rxcount) {//yes, we must read out all data
musb_peri_rx_ack(ep);
-
- /*
- * urb's actual_length is updated in
- * usbd_rcv_complete
- */
- usbd_rcv_complete(endpoint, length, urb_bad);
-
+ }
+#else
+ if (urb->use_dma && xfer <= DMA_BUF_SIZE &&
+ configure_dma_channel(ep, endpoint->rcv_packetSize, 0,
+ (u32)dma_buf, xfer, 0) == 0) {
+ wait_dma_xfer_done();
+ memcpy(data, dma_buf, xfer);
+ if (xfer == peri_rxcount)
+ musb_peri_rx_ack(ep);
} else {
- if (debug_level > 0)
- serial_printf("ERROR : %s %d no space "
- "in rcv buffer\n",
- __PRETTY_FUNCTION__, ep);
+ read_fifo(ep, xfer, data);
+ if (xfer == peri_rxcount) {//yes, we must read out all data
+ musb_peri_rx_ack(ep);
+ }
}
+#endif
+ /*
+ * urb's actual_length is updated in
+ * usbd_rcv_complete
+ */
+ usbd_rcv_complete(endpoint, xfer, urb_bad);
} else {
if (debug_level > 0)
serial_printf("ERROR : %s %d problem with "
"endpoint\n",
__PRETTY_FUNCTION__, ep);
}
-
} else {
- if (debug_level > 0)
- serial_printf("ERROR : %s %d with nothing to do\n",
- __PRETTY_FUNCTION__, ep);
+ musb_peri_rx_ack(ep);
}
}
+void poll_rx_ep(unsigned int ep)
+{
+ musb_peri_rx_ep(ep);
+}
+
static void musb_peri_rx(u16 intr)
{
unsigned int ep;
@@ -703,9 +728,11 @@ static void musb_peri_rx(u16 intr)
if (0x01 & intr)
musb_peri_ep0();
- for (ep = 1; ep < 16; ep++) {
- if ((1 << ep) & intr)
+ for (ep = 1; ep < MAX_ENDPOINT; ep++) {
+ if ((1 << ep) & intr) {
+ //serial_puts("from irq\n");
musb_peri_rx_ep(ep);
+ }
}
}
@@ -761,12 +788,13 @@ void udc_irq(void)
usbd_device_event_irq(udc_device, DEVICE_HUB_RESET, 0);
}
+/*
if (MUSB_INTR_SOF & intrusb) {
usbd_device_event_irq(udc_device,
DEVICE_BUS_ACTIVITY, 0);
musb_peri_resume();
}
-
+*/
if (MUSB_INTR_SUSPEND & intrusb) {
usbd_device_event_irq(udc_device,
DEVICE_BUS_INACTIVE, 0);
@@ -780,7 +808,6 @@ void udc_irq(void)
if (intrrx)
musb_peri_rx(intrrx);
-
if (intrtx)
musb_peri_tx(intrtx);
} else {
@@ -808,6 +835,49 @@ void udc_unset_nak(int ep_num)
/* noop */
}
+unsigned int udc_chars_in_rxfifo(unsigned int ep)
+{
+ u16 cnt;
+
+ cnt = readw(&musbr->ep[ep].epN.rxcount);
+ /*
+ * when the cnt is not aligned for 4, the data is not put into fifo by
+ * udc, so wait a moment!!!!!!!!
+ */
+ if ((cnt & 0x03) != 0)
+ udelay(100);
+
+ return cnt;
+}
+
+void udc_clear_halt(unsigned int ep, int is_in)
+{
+ u16 csr;
+
+ if(ep > MAX_ENDPOINT) {
+ printf("%s epnum %d too big\n", __func__, ep);
+ return;
+ }
+ printf("%s epnum %d is %s\n", __func__, ep, is_in ? "in" : "out");
+ if (is_in) {
+ csr = readw(&musbr->ep[ep].epN.txcsr);
+ csr |= MUSB_TXCSR_CLRDATATOG | MUSB_TXCSR_P_WZC_BITS;
+ csr &= ~(MUSB_TXCSR_P_SENDSTALL |
+ MUSB_TXCSR_P_SENTSTALL |
+ MUSB_TXCSR_TXPKTRDY);
+ writew(csr, &musbr->ep[ep].epN.txcsr);
+ } else {
+ csr = readw(&musbr->ep[ep].epN.rxcsr);
+ csr |= MUSB_RXCSR_CLRDATATOG | MUSB_RXCSR_P_WZC_BITS;
+ csr &= ~(MUSB_RXCSR_P_SENDSTALL |
+ MUSB_RXCSR_P_SENTSTALL);
+ writew(csr, &musbr->ep[ep].epN.rxcsr);
+ }
+
+ return;
+}
+
+#define WRITE_TIMEOUT 1000000 /* us */
int udc_endpoint_write(struct usb_endpoint_instance *endpoint)
{
int ret = 0;
@@ -816,6 +886,7 @@ int udc_endpoint_write(struct usb_endpoint_instance *endpoint)
if (endpoint->tx_urb && endpoint->state == 0) {
unsigned int ep = endpoint->endpoint_address &
USB_ENDPOINT_NUMBER_MASK;
+ int timeout = WRITE_TIMEOUT;
u16 peri_txcsr = readw(&musbr->ep[ep].epN.txcsr);
@@ -825,9 +896,10 @@ int udc_endpoint_write(struct usb_endpoint_instance *endpoint)
writew(peri_txcsr, &musbr->ep[ep].epN.txcsr);
}
+/*
if (debug_level > 1)
musb_print_txcsr(peri_txcsr);
-
+*/
/* Check if a packet is waiting to be sent */
if (!(peri_txcsr & MUSB_TXCSR_TXPKTRDY)) {
u32 length;
@@ -849,9 +921,24 @@ int udc_endpoint_write(struct usb_endpoint_instance *endpoint)
musb_peri_tx_ready(ep);
- endpoint->last = length;
- /* usbd_tx_complete will take care of updating 'sent' */
- usbd_tx_complete(endpoint);
+ while ((peri_txcsr & MUSB_TXCSR_FIFONOTEMPTY) && timeout) {
+ peri_txcsr = readw(&musbr->ep[ep].epN.txcsr);
+ timeout--;
+ udelay(1);
+ }
+
+ if (timeout <= 0) {
+ /* timeout, clear register */
+ serial_printf("ERROR, can not write out\n");
+ return -1;
+ } else {
+ endpoint->last = length;
+ /* usbd_tx_complete will take care of updating 'sent' */
+ usbd_tx_complete(endpoint);
+ }
+ } else {
+ printf("ERROR: txcsr = %#x, TXPKTRDY is set.\n", peri_txcsr);
+ return -1;
}
} else {
if (debug_level > 0)
@@ -871,20 +958,25 @@ void udc_setup_ep(struct usb_device_instance *device, unsigned int id,
/* EP0 */
ep0_endpoint = endpoint;
ep0_endpoint->endpoint_address = 0xff;
- ep0_urb = usbd_alloc_urb(device, endpoint);
+ //ep0_urb = usbd_alloc_urb(device, endpoint);
+ usbd_init_urb(ep0_urb, device, endpoint, ep0_buffer_data, URB_BUF_SIZE);
} else if (MAX_ENDPOINT >= id) {
int ep_addr;
+ int index;
/* Check the direction */
ep_addr = endpoint->endpoint_address;
if (USB_DIR_IN == (ep_addr & USB_ENDPOINT_DIR_MASK)) {
/* IN */
- epinfo[(id * 2) + 1].epsize = endpoint->tx_packetSize;
+ index = (id - 1) * 2 + 1;
+ epinfo[index].epsize = endpoint->tx_packetSize;
} else {
/* OUT */
- epinfo[id * 2].epsize = endpoint->rcv_packetSize;
+ index = (id - 1) * 2;
+ epinfo[index].epsize = endpoint->rcv_packetSize;
}
+
musb_configure_ep(&epinfo[0],
sizeof(epinfo) / sizeof(struct musb_epinfo));
} else {
@@ -918,6 +1010,13 @@ void udc_disable(void)
enabled = 0;
}
+int is_usbd_high_speed(void)
+{
+ u8 power;
+ power = readb(&musbr->power);
+
+ return ((power & MUSB_POWER_HSMODE) ? 1 : 0);
+}
void udc_startup_events(struct usb_device_instance *device)
{
/* The DEVICE_INIT event puts the USB device in the state STATE_INIT. */
@@ -935,6 +1034,17 @@ void udc_startup_events(struct usb_device_instance *device)
udc_enable(device);
}
+void udc_hot_startup(struct usb_device_instance *device)
+{
+ u8 faddr;
+
+ usbd_device_event_irq(device, DEVICE_CONFIGURED, 0);
+ udc_enable(device);
+
+ faddr = readb(&musbr->faddr);
+ udc_device->address = faddr;
+}
+
int udc_init(void)
{
int ret;
@@ -947,6 +1057,7 @@ int udc_init(void)
/* Configure all the endpoint FIFO's and start usb controller */
musbr = musb_cfg.regs;
+
/* Initialize the endpoints */
for (ep_loop = 0; ep_loop < MAX_ENDPOINT * 2; ep_loop++) {
epinfo[ep_loop].epnum = (ep_loop / 2) + 1;
@@ -958,6 +1069,30 @@ int udc_init(void)
ret = 0;
end:
-
return ret;
}
+
+int udc_soft_init(void)
+{
+ int ep_loop;
+
+ /* Configure all the endpoint FIFO's and start usb controller */
+ musbr = musb_cfg.regs;
+
+
+ /* Initialize the endpoints */
+ for (ep_loop = 0; ep_loop < MAX_ENDPOINT * 2; ep_loop++) {
+ epinfo[ep_loop].epnum = (ep_loop / 2) + 1;
+ epinfo[ep_loop].epdir = ep_loop % 2; /* OUT, IN */
+ epinfo[ep_loop].epsize = 0;
+ }
+
+ readb(&musbr->intrusb);
+ readw(&musbr->intrrx);
+ readw(&musbr->intrtx);
+
+ musb_db_regs();
+
+ return 0;
+}
+
diff --git a/drivers/usb/musb/musbhsdma.c b/drivers/usb/musb/musbhsdma.c
new file mode 100644
index 0000000000..3fb1b66ea2
--- /dev/null
+++ b/drivers/usb/musb/musbhsdma.c
@@ -0,0 +1,118 @@
+#include <common.h>
+#include "musbhsdma.h"
+#include "rda.h"
+
+
+static u32 start_addr = 0;
+static u32 dma_req_len = 0;
+static int complete = 0;
+
+int configure_dma_channel(u32 epnum, u16 packet_sz, u8 mode,
+ u32 dma_addr, u32 len, int tx)
+{
+ void *mbase = (void *)MUSB_BASE;
+ u8 bchannel = 0;
+ u16 csr = 0;
+
+ complete = 0;
+
+ /* check alignment for 32(0x20) */
+ if ((dma_addr % 32) != 0) {
+ //printf("%s: dma addr %#x is not aligned.\n", __func__, dma_addr);
+ return -1;
+ }
+ if ((len % 32) != 0) {
+ //printf("%s: dma xfer size %#x not aligned.\n", __func__, len);
+ return -1;
+ }
+
+ if (mode) {
+ csr |= 1 << MUSB_HSDMA_MODE1_SHIFT;
+ BUG_ON(len < packet_sz);
+ }
+ csr |= MUSB_HSDMA_BURSTMODE_INCR16
+ << MUSB_HSDMA_BURSTMODE_SHIFT;
+
+ csr |= (epnum << MUSB_HSDMA_ENDPOINT_SHIFT)
+ | (1 << MUSB_HSDMA_ENABLE_SHIFT)
+ | (1 << MUSB_HSDMA_IRQENABLE_SHIFT)
+ | (tx ? (1 << MUSB_HSDMA_TRANSMIT_SHIFT)
+ : 0);
+
+ start_addr = dma_addr;
+ dma_req_len = len;
+ /* address/count */
+ musb_write_hsdma_addr(mbase, bchannel, dma_addr);
+ musb_write_hsdma_count(mbase, bchannel, len);
+
+ if(tx)
+ flush_dcache_range(dma_addr, dma_addr+len);
+ else
+ invalidate_dcache_range(dma_addr, dma_addr+len);
+
+ /* control (this should start things) */
+ musb_writew(mbase,
+ MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_CONTROL),
+ csr);
+
+ return 0;
+}
+
+static int dma_controller_irq(void)
+{
+ void *mbase = (void *)MUSB_BASE;
+ u8 bchannel = 0;
+ u8 int_hsdma;
+
+ u32 addr;
+ u16 csr;
+ u32 actual_len;
+
+
+ int_hsdma = musb_readb(mbase, MUSB_HSDMA_INTR);
+
+ if (int_hsdma & (1 << bchannel)) {
+
+ csr = musb_readw(mbase,
+ MUSB_HSDMA_CHANNEL_OFFSET(bchannel,
+ MUSB_HSDMA_CONTROL));
+
+ if (csr & (1 << MUSB_HSDMA_BUSERROR_SHIFT)) {
+ serial_printf("dma bus error\n");
+ } else {
+ addr = musb_read_hsdma_addr(mbase,
+ bchannel);
+ actual_len = addr
+ - start_addr;
+ /*
+ serial_printf("0x%x -> 0x%x (%zu / %d) %s\n",
+ start_addr,
+ addr, actual_len,
+ dma_req_len,
+ (actual_len
+ < dma_req_len) ?
+ "=> reconfig 0" : "=> complete");
+ */
+ if (actual_len == dma_req_len)
+ complete = 1;
+ }
+ }
+
+ return 0;
+}
+
+int wait_dma_xfer_done(void)
+{
+ int timeout = 100000;
+
+ while(!complete && timeout) {
+ dma_controller_irq();
+ timeout--;
+ }
+ if (timeout <= 0) {
+ serial_printf("ERROR: dma xfer timeout\n");
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/drivers/usb/musb/musbhsdma.h b/drivers/usb/musb/musbhsdma.h
new file mode 100644
index 0000000000..65d6700a03
--- /dev/null
+++ b/drivers/usb/musb/musbhsdma.h
@@ -0,0 +1,95 @@
+/*
+ * MUSB OTG driver - support for Mentor's DMA controller
+ *
+ * Copyright 2005 Mentor Graphics Corporation
+ * Copyright (C) 2005-2007 by Texas Instruments
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
+ * NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+ * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ */
+#include <asm/io.h>
+
+static inline u8 musb_readb(const void *addr, unsigned offset)
+ { return readb(addr + offset); }
+
+static inline u16 musb_readw(const void *addr, unsigned offset)
+ { return readw(addr + offset); }
+
+static inline u32 musb_readl(const void *addr, unsigned offset)
+ { return readl(addr + offset); }
+
+
+static inline void musb_writeb(void *addr, unsigned offset, u8 data)
+ { writeb(data, addr + offset); }
+static inline void musb_writew(void *addr, unsigned offset, u16 data)
+ { writew(data, addr + offset); }
+
+static inline void musb_writel(void *addr, unsigned offset, u32 data)
+ { writel(data, addr + offset); }
+
+#define MUSB_HSDMA_BASE 0x200
+#define MUSB_HSDMA_INTR (MUSB_HSDMA_BASE + 0)
+#define MUSB_HSDMA_CONTROL 0x4
+#define MUSB_HSDMA_ADDRESS 0x8
+#define MUSB_HSDMA_COUNT 0xc
+
+#define MUSB_HSDMA_CHANNEL_OFFSET(_bchannel, _offset) \
+ (MUSB_HSDMA_BASE + (_bchannel << 4) + _offset)
+
+#define musb_read_hsdma_addr(mbase, bchannel) \
+ musb_readl(mbase, \
+ MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_ADDRESS))
+
+#define musb_write_hsdma_addr(mbase, bchannel, addr) \
+ musb_writel(mbase, \
+ MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_ADDRESS), \
+ addr)
+
+#define musb_read_hsdma_count(mbase, bchannel) \
+ musb_readl(mbase, \
+ MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_COUNT))
+
+#define musb_write_hsdma_count(mbase, bchannel, len) \
+ musb_writel(mbase, \
+ MUSB_HSDMA_CHANNEL_OFFSET(bchannel, MUSB_HSDMA_COUNT), \
+ len)
+
+/* control register (16-bit): */
+#define MUSB_HSDMA_ENABLE_SHIFT 0
+#define MUSB_HSDMA_TRANSMIT_SHIFT 1
+#define MUSB_HSDMA_MODE1_SHIFT 2
+#define MUSB_HSDMA_IRQENABLE_SHIFT 3
+#define MUSB_HSDMA_ENDPOINT_SHIFT 4
+#define MUSB_HSDMA_BUSERROR_SHIFT 8
+#define MUSB_HSDMA_BURSTMODE_SHIFT 9
+#define MUSB_HSDMA_BURSTMODE (3 << MUSB_HSDMA_BURSTMODE_SHIFT)
+#define MUSB_HSDMA_BURSTMODE_UNSPEC 0
+#define MUSB_HSDMA_BURSTMODE_INCR4 1
+#define MUSB_HSDMA_BURSTMODE_INCR8 2
+#define MUSB_HSDMA_BURSTMODE_INCR16 3
+
+#define MUSB_HSDMA_CHANNELS 8
+
diff --git a/drivers/usb/musb/rda.c b/drivers/usb/musb/rda.c
new file mode 100644
index 0000000000..db2dbf52af
--- /dev/null
+++ b/drivers/usb/musb/rda.c
@@ -0,0 +1,212 @@
+/*
+ * Copyright (c) 2009 Wind River Systems, Inc.
+ * Tom Rix <Tom.Rix@windriver.com>
+ *
+ * This is file is based on
+ * repository git.gitorious.org/u-boot-omap3/mainline.git,
+ * branch omap3-dev-usb, file drivers/usb/host/omap3530_usb.c
+ *
+ * This is the unique part of its copyright :
+ *
+ * ------------------------------------------------------------------------
+ *
+ * Copyright (c) 2009 Texas Instruments
+ *
+ * ------------------------------------------------------------------------
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#include <common.h>
+#include "rda.h"
+#include <asm/arch/reg_sysctrl.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/rda_sys.h>
+#include "musb_core.h"
+
+#define MONITOR_REG (MUSB_BASE + 0x80)
+#define MONITOR_TRIG_REG (MUSB_BASE + 0x84)
+#define UDC_PHY_CLK_REG (MUSB_BASE + 0x8c)
+
+struct musb_config musb_cfg = {
+ .regs = (struct musb_regs *)MUSB_BASE,
+ .timeout = RDA_FPGA_USB_TIMEOUT,
+ .musb_speed = 0,
+};
+
+static void udc_soft_reset(void)
+{
+ serial_printf("reset musb otg core...\n");
+ hwp_sysCtrlAp->AHB1_Rst_Set = SYS_CTRL_AP_SET_AHB1_RST_USBC;
+ udelay(1000);
+ hwp_sysCtrlAp->AHB1_Rst_Clr = SYS_CTRL_AP_CLR_AHB1_RST_USBC;
+}
+/*
+static void set_udc_monitor(int testcase)
+{
+ u32 value;
+
+ serial_printf("monitor trigger offset :%x \n", MONITOR_TRIG_REG);
+ value = 0x100 | (testcase & 0xff);
+ serial_printf("monitor trigger value :%x \n", value);
+ writel(value, MONITOR_TRIG_REG);
+
+ serial_printf("monitor offset :%x, result : %x\n", MONITOR_REG, readl(MONITOR_REG));
+}
+*/
+void udc_power_on(void)
+{
+}
+
+void udc_power_off(void)
+{
+}
+
+/*
+ udc maybe initialized by other module,always by ROM code
+ */
+int udc_is_initialized(void)
+{
+ /* some hacks for 8850E U02 USB issue, remove them in future. */
+#if defined(CONFIG_MACH_RDA8850E)
+ /* pdl1 always do hardware usb init */
+#if defined(CONFIG_SPL_BUILD) && \
+ defined(CONFIG_RDA_PDL)
+ return 0;
+#endif
+ /* u-boot calib/autocall/pdl2 mode, need to do hardware usb init */
+#ifndef CONFIG_RDA_PDL
+ return 0;
+#endif
+#endif
+
+ return rda_bm_is_download();
+}
+
+static void udc_setup_pll(void)
+{
+ unsigned mask;
+ unsigned locked;
+ int cnt = 10; //timeout is in ms;
+
+ hwp_sysCtrlAp->Cfg_Pll_Ctrl[3] =
+ SYS_CTRL_AP_AP_PLL_ENABLE_ENABLE |
+ SYS_CTRL_AP_AP_PLL_LOCK_RESET_NO_RESET |
+ SYS_CTRL_AP_AP_PLL_LOCK_NUM_LOW(6)
+ | SYS_CTRL_AP_AP_PLL_LOCK_NUM_HIGH(30);
+
+ mask = SYS_CTRL_AP_PLL_LOCKED_USB_MASK;
+
+ locked = SYS_CTRL_AP_PLL_LOCKED_USB_LOCKED;
+
+ while (((hwp_sysCtrlAp->Sel_Clock & mask) != locked) && cnt) {
+ mdelay(1);
+ cnt--;
+ }
+ if (cnt == 0)
+ printf("ERROR, cannot lock usb pll\n");
+}
+
+static void musb_phy_init(void)
+{
+ udc_setup_pll();
+ /*
+ if (rda_metal_id_get() == 0) {
+ writel(0xf001, UDC_PHY_CLK_REG);
+ } else if (rda_metal_id_get() == 1) {
+ writel(0x5900f000, UDC_PHY_CLK_REG);
+ }
+ */
+}
+
+int musb_platform_init(void)
+{
+ udc_soft_reset();
+ musb_phy_init();
+
+ return 0;
+}
+
+void musb_platform_deinit(void)
+{
+ /* noop */
+}
+
+void print_reg(void)
+{
+ u8 power;
+ u8 testmode;
+ u8 devctl;
+ musbr = musb_cfg.regs;
+ power = readb(&musbr->power);
+ testmode = readb(&musbr->testmode);
+ devctl = readb(&musbr->devctl);
+ printf("usb power: %x \n",power);
+ printf("usb testmode: %x \n",testmode);
+ printf("usb devctl: %x \n",devctl);
+}
+
+int do_usb_test(cmd_tbl_t * cmdtp, int flag, int argc, char * const argv[])
+{
+ u8 devctl;
+ u8 test;
+ if (argc < 2 || argc > 3)
+ return CMD_RET_USAGE;
+ if (argc == 2) {
+ if (strcmp(argv[1],"init") == 0) {
+ musbr = musb_cfg.regs;
+ musb_platform_init();
+ musb_start();
+ devctl = readb(&musbr->devctl);
+ devctl |= MUSB_DEVCTL_SESSION;
+ writeb(devctl,&musbr->devctl);
+ printf("usb init finish\n");;
+ } else if (strcmp(argv[1],"j") == 0) {
+ test = readb(&musbr->testmode);
+ test &= ~(MUSB_TEST_K | MUSB_TEST_J);
+ test |= MUSB_TEST_J;
+ writeb(test,&musbr->testmode);
+ printf("usb test_j finish\n");
+ } else if (strcmp(argv[1],"k") == 0) {
+ test = readb(&musbr->testmode);
+ test &= ~(MUSB_TEST_K | MUSB_TEST_J);
+ test |= MUSB_TEST_K;
+ writeb(test,&musbr->testmode);
+ printf("usb test_k finish\n");
+ } else if (strcmp(argv[1],"host") == 0) {
+ writeb(MUSB_POWER_HSENAB,&musbr->power);
+ test = MUSB_TEST_FORCE_HOST | MUSB_TEST_FORCE_HS;
+ writeb(test,&musbr->testmode);
+ printf("usb force host finish\n");
+ } else {
+ printf("error argument!\n");
+ return CMD_RET_USAGE;
+ }
+#ifdef USB_TEST_DEBUG
+ print_reg();
+#endif
+ }
+ return 0;
+}
+
+U_BOOT_CMD(
+ usb_test, 2, 1, do_usb_test,
+ "rda usb slave test",
+ "[init, j, k, host]\n"
+ " -init: USB INIT\n"
+ " -j: TEST_J\n"
+ " -k: TEST_k\n"
+ " -host: FORCE_HOST\n"
+);
diff --git a/drivers/usb/musb/rda.h b/drivers/usb/musb/rda.h
new file mode 100644
index 0000000000..751d421878
--- /dev/null
+++ b/drivers/usb/musb/rda.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2009 Wind River Systems, Inc.
+ * Tom Rix <Tom.Rix@windriver.com>
+ *
+ * This file is based on the file drivers/usb/musb/davinci.h
+ *
+ * This is the unique part of its copyright:
+ *
+ * --------------------------------------------------------------------
+ *
+ * Copyright (c) 2008 Texas Instruments
+ * Author: Thomas Abraham t-abraham@ti.com, Texas Instruments
+ *
+ * --------------------------------------------------------------------
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef _MUSB_RDA_H_
+#define _MUSB_RDA_H_
+
+#include <asm/arch/rda_iomap.h>
+#include "musb_core.h"
+
+/* Base address of MUSB registers */
+#define MUSB_BASE RDA_USB_BASE
+
+/* Timeout for USB module */
+#define RDA_FPGA_USB_TIMEOUT 0x3FFFFFF
+
+int musb_platform_init(void);
+
+#endif /* _MUSB_RDA_H */
diff --git a/drivers/video/Makefile b/drivers/video/Makefile
index 6252f6a25f..4fad20dd6e 100644
--- a/drivers/video/Makefile
+++ b/drivers/video/Makefile
@@ -28,7 +28,11 @@ LIB := $(obj)libvideo.o
COBJS-$(CONFIG_ATI_RADEON_FB) += ati_radeon_fb.o videomodes.o
COBJS-$(CONFIG_ATMEL_LCD) += atmel_lcdfb.o
COBJS-$(CONFIG_CFB_CONSOLE) += cfb_console.o
+COBJS-$(CONFIG_EXYNOS_FB) += exynos_fb.o exynos_fimd.o
+COBJS-$(CONFIG_EXYNOS_MIPI_DSIM) += exynos_mipi_dsi.o exynos_mipi_dsi_common.o \
+ exynos_mipi_dsi_lowlevel.o
COBJS-$(CONFIG_FSL_DIU_FB) += fsl_diu_fb.o videomodes.o
+COBJS-$(CONFIG_S6E8AX0) += s6e8ax0.o
COBJS-$(CONFIG_S6E63D6) += s6e63d6.o
COBJS-$(CONFIG_SED156X) += sed156x.o
COBJS-$(CONFIG_VIDEO_AMBA) += amba.o
diff --git a/drivers/video/exynos_fb.c b/drivers/video/exynos_fb.c
new file mode 100644
index 0000000000..a1cf44964b
--- /dev/null
+++ b/drivers/video/exynos_fb.c
@@ -0,0 +1,128 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <common.h>
+#include <lcd.h>
+#include <asm/io.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/mipi_dsim.h>
+#include <asm/arch/system.h>
+
+#include "exynos_fb.h"
+
+int lcd_line_length;
+int lcd_color_fg;
+int lcd_color_bg;
+
+void *lcd_base;
+void *lcd_console_address;
+
+short console_col;
+short console_row;
+
+static unsigned int panel_width, panel_height;
+
+/* LCD Panel data */
+vidinfo_t panel_info;
+
+static void exynos_lcd_init_mem(void *lcdbase, vidinfo_t *vid)
+{
+ unsigned long palette_size;
+ unsigned int fb_size;
+
+ fb_size = vid->vl_row * vid->vl_col * (NBITS(vid->vl_bpix) >> 3);
+
+ lcd_base = lcdbase;
+
+ palette_size = NBITS(vid->vl_bpix) == 8 ? 256 : 16;
+
+ exynos_fimd_lcd_init_mem((unsigned long)lcd_base,
+ (unsigned long)fb_size, palette_size);
+}
+
+static void exynos_lcd_init(vidinfo_t *vid)
+{
+ exynos_fimd_lcd_init(vid);
+}
+
+static void lcd_panel_on(vidinfo_t *vid)
+{
+ udelay(vid->init_delay);
+
+ if (vid->backlight_reset)
+ vid->backlight_reset();
+
+ if (vid->cfg_gpio)
+ vid->cfg_gpio();
+
+ if (vid->lcd_power_on)
+ vid->lcd_power_on();
+
+ udelay(vid->power_on_delay);
+
+ if (vid->reset_lcd) {
+ vid->reset_lcd();
+ udelay(vid->reset_delay);
+ }
+
+ if (vid->backlight_on)
+ vid->backlight_on(1);
+
+ if (vid->cfg_ldo)
+ vid->cfg_ldo();
+
+ if (vid->enable_ldo)
+ vid->enable_ldo(1);
+
+ if (vid->mipi_enabled)
+ exynos_mipi_dsi_init();
+}
+
+void lcd_ctrl_init(void *lcdbase)
+{
+ set_system_display_ctrl();
+ set_lcd_clk();
+
+ /* initialize parameters which is specific to panel. */
+ init_panel_info(&panel_info);
+
+ panel_width = panel_info.vl_width;
+ panel_height = panel_info.vl_height;
+
+ exynos_lcd_init_mem(lcdbase, &panel_info);
+
+ exynos_lcd_init(&panel_info);
+}
+
+void lcd_enable(void)
+{
+ lcd_panel_on(&panel_info);
+}
+
+/* dummy function */
+void lcd_setcolreg(ushort regno, ushort red, ushort green, ushort blue)
+{
+ return;
+}
diff --git a/drivers/video/exynos_fb.h b/drivers/video/exynos_fb.h
new file mode 100644
index 0000000000..66f5da6d46
--- /dev/null
+++ b/drivers/video/exynos_fb.h
@@ -0,0 +1,61 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _EXYNOS_FB_H_
+#define _EXYNOS_FB_H_
+
+#include <asm/arch/fb.h>
+
+#define MAX_CLOCK (86 * 1000000)
+
+enum exynos_fb_rgb_mode_t {
+ MODE_RGB_P = 0,
+ MODE_BGR_P = 1,
+ MODE_RGB_S = 2,
+ MODE_BGR_S = 3,
+};
+
+enum exynos_cpu_auto_cmd_rate {
+ DISABLE_AUTO_FRM,
+ PER_TWO_FRM,
+ PER_FOUR_FRM,
+ PER_SIX_FRM,
+ PER_EIGHT_FRM,
+ PER_TEN_FRM,
+ PER_TWELVE_FRM,
+ PER_FOURTEEN_FRM,
+ PER_SIXTEEN_FRM,
+ PER_EIGHTEEN_FRM,
+ PER_TWENTY_FRM,
+ PER_TWENTY_TWO_FRM,
+ PER_TWENTY_FOUR_FRM,
+ PER_TWENTY_SIX_FRM,
+ PER_TWENTY_EIGHT_FRM,
+ PER_THIRTY_FRM,
+};
+
+void exynos_fimd_lcd_init_mem(unsigned long screen_base, unsigned long fb_size,
+ unsigned long palette_size);
+void exynos_fimd_lcd_init(vidinfo_t *vid);
+unsigned long exynos_fimd_calc_fbsize(void);
+
+#endif
diff --git a/drivers/video/exynos_fimd.c b/drivers/video/exynos_fimd.c
new file mode 100644
index 0000000000..6416b90fcc
--- /dev/null
+++ b/drivers/video/exynos_fimd.c
@@ -0,0 +1,354 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <config.h>
+#include <common.h>
+#include <asm/io.h>
+#include <lcd.h>
+#include <div64.h>
+#include <asm/arch/clk.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/cpu.h>
+#include "exynos_fb.h"
+
+static unsigned long *lcd_base_addr;
+static vidinfo_t *pvid;
+
+void exynos_fimd_lcd_init_mem(u_long screen_base, u_long fb_size,
+ u_long palette_size)
+{
+ lcd_base_addr = (unsigned long *)screen_base;
+}
+
+static void exynos_fimd_set_dualrgb(unsigned int enabled)
+{
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+ unsigned int cfg = 0;
+
+ if (enabled) {
+ cfg = EXYNOS_DUALRGB_BYPASS_DUAL | EXYNOS_DUALRGB_LINESPLIT |
+ EXYNOS_DUALRGB_VDEN_EN_ENABLE;
+
+ /* in case of Line Split mode, MAIN_CNT doesn't neet to set. */
+ cfg |= EXYNOS_DUALRGB_SUB_CNT(pvid->vl_col / 2) |
+ EXYNOS_DUALRGB_MAIN_CNT(0);
+ }
+
+ writel(cfg, &fimd_ctrl->dualrgb);
+}
+
+static void exynos_fimd_set_par(unsigned int win_id)
+{
+ unsigned int cfg = 0;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ /* set window control */
+ cfg = readl((unsigned int)&fimd_ctrl->wincon0 +
+ EXYNOS_WINCON(win_id));
+
+ cfg &= ~(EXYNOS_WINCON_BITSWP_ENABLE | EXYNOS_WINCON_BYTESWP_ENABLE |
+ EXYNOS_WINCON_HAWSWP_ENABLE | EXYNOS_WINCON_WSWP_ENABLE |
+ EXYNOS_WINCON_BURSTLEN_MASK | EXYNOS_WINCON_BPPMODE_MASK |
+ EXYNOS_WINCON_INRGB_MASK | EXYNOS_WINCON_DATAPATH_MASK);
+
+ /* DATAPATH is DMA */
+ cfg |= EXYNOS_WINCON_DATAPATH_DMA;
+
+ /* bpp is 32 */
+ cfg |= EXYNOS_WINCON_WSWP_ENABLE;
+
+ /* dma burst is 16 */
+ cfg |= EXYNOS_WINCON_BURSTLEN_16WORD;
+
+ /* pixel format is unpacked RGB888 */
+ cfg |= EXYNOS_WINCON_BPPMODE_24BPP_888;
+
+ writel(cfg, (unsigned int)&fimd_ctrl->wincon0 +
+ EXYNOS_WINCON(win_id));
+
+ /* set window position to x=0, y=0*/
+ cfg = EXYNOS_VIDOSD_LEFT_X(0) | EXYNOS_VIDOSD_TOP_Y(0);
+ writel(cfg, (unsigned int)&fimd_ctrl->vidosd0a +
+ EXYNOS_VIDOSD(win_id));
+
+ cfg = EXYNOS_VIDOSD_RIGHT_X(pvid->vl_col - 1) |
+ EXYNOS_VIDOSD_BOTTOM_Y(pvid->vl_row - 1);
+ writel(cfg, (unsigned int)&fimd_ctrl->vidosd0b +
+ EXYNOS_VIDOSD(win_id));
+
+ /* set window size for window0*/
+ cfg = EXYNOS_VIDOSD_SIZE(pvid->vl_col * pvid->vl_row);
+ writel(cfg, (unsigned int)&fimd_ctrl->vidosd0c +
+ EXYNOS_VIDOSD(win_id));
+}
+
+static void exynos_fimd_set_buffer_address(unsigned int win_id)
+{
+ unsigned long start_addr, end_addr;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ start_addr = (unsigned long)lcd_base_addr;
+ end_addr = start_addr + ((pvid->vl_col * (NBITS(pvid->vl_bpix) / 8)) *
+ pvid->vl_row);
+
+ writel(start_addr, (unsigned int)&fimd_ctrl->vidw00add0b0 +
+ EXYNOS_BUFFER_OFFSET(win_id));
+ writel(end_addr, (unsigned int)&fimd_ctrl->vidw00add1b0 +
+ EXYNOS_BUFFER_OFFSET(win_id));
+}
+
+static void exynos_fimd_set_clock(vidinfo_t *pvid)
+{
+ unsigned int cfg = 0, div = 0, remainder, remainder_div;
+ unsigned long pixel_clock;
+ unsigned long long src_clock;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ if (pvid->dual_lcd_enabled) {
+ pixel_clock = pvid->vl_freq *
+ (pvid->vl_hspw + pvid->vl_hfpd +
+ pvid->vl_hbpd + pvid->vl_col / 2) *
+ (pvid->vl_vspw + pvid->vl_vfpd +
+ pvid->vl_vbpd + pvid->vl_row);
+ } else if (pvid->interface_mode == FIMD_CPU_INTERFACE) {
+ pixel_clock = pvid->vl_freq *
+ pvid->vl_width * pvid->vl_height *
+ (pvid->cs_setup + pvid->wr_setup +
+ pvid->wr_act + pvid->wr_hold + 1);
+ } else {
+ pixel_clock = pvid->vl_freq *
+ (pvid->vl_hspw + pvid->vl_hfpd +
+ pvid->vl_hbpd + pvid->vl_col) *
+ (pvid->vl_vspw + pvid->vl_vfpd +
+ pvid->vl_vbpd + pvid->vl_row);
+ }
+
+ cfg = readl(&fimd_ctrl->vidcon0);
+ cfg &= ~(EXYNOS_VIDCON0_CLKSEL_MASK | EXYNOS_VIDCON0_CLKVALUP_MASK |
+ EXYNOS_VIDCON0_CLKVAL_F(0xFF) | EXYNOS_VIDCON0_VCLKEN_MASK |
+ EXYNOS_VIDCON0_CLKDIR_MASK);
+ cfg |= (EXYNOS_VIDCON0_CLKSEL_SCLK | EXYNOS_VIDCON0_CLKVALUP_ALWAYS |
+ EXYNOS_VIDCON0_VCLKEN_NORMAL | EXYNOS_VIDCON0_CLKDIR_DIVIDED);
+
+ if (pixel_clock > MAX_CLOCK)
+ pixel_clock = MAX_CLOCK;
+
+ src_clock = (unsigned long long) get_lcd_clk();
+
+ /* get quotient and remainder. */
+ remainder = do_div(src_clock, pixel_clock);
+ div = src_clock;
+
+ remainder *= 10;
+ remainder_div = remainder / pixel_clock;
+
+ /* round about one places of decimals. */
+ if (remainder_div >= 5)
+ div++;
+
+ /* in case of dual lcd mode. */
+ if (pvid->dual_lcd_enabled)
+ div--;
+
+ cfg |= EXYNOS_VIDCON0_CLKVAL_F(div - 1);
+ writel(cfg, &fimd_ctrl->vidcon0);
+}
+
+void exynos_set_trigger(void)
+{
+ unsigned int cfg = 0;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ cfg = readl(&fimd_ctrl->trigcon);
+
+ cfg |= (EXYNOS_I80SOFT_TRIG_EN | EXYNOS_I80START_TRIG);
+
+ writel(cfg, &fimd_ctrl->trigcon);
+}
+
+int exynos_is_i80_frame_done(void)
+{
+ unsigned int cfg = 0;
+ int status;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ cfg = readl(&fimd_ctrl->trigcon);
+
+ /* frame done func is valid only when TRIMODE[0] is set to 1. */
+ status = (cfg & EXYNOS_I80STATUS_TRIG_DONE) ==
+ EXYNOS_I80STATUS_TRIG_DONE;
+
+ return status;
+}
+
+static void exynos_fimd_lcd_on(void)
+{
+ unsigned int cfg = 0;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ /* display on */
+ cfg = readl(&fimd_ctrl->vidcon0);
+ cfg |= (EXYNOS_VIDCON0_ENVID_ENABLE | EXYNOS_VIDCON0_ENVID_F_ENABLE);
+ writel(cfg, &fimd_ctrl->vidcon0);
+}
+
+static void exynos_fimd_window_on(unsigned int win_id)
+{
+ unsigned int cfg = 0;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ /* enable window */
+ cfg = readl((unsigned int)&fimd_ctrl->wincon0 +
+ EXYNOS_WINCON(win_id));
+ cfg |= EXYNOS_WINCON_ENWIN_ENABLE;
+ writel(cfg, (unsigned int)&fimd_ctrl->wincon0 +
+ EXYNOS_WINCON(win_id));
+
+ cfg = readl(&fimd_ctrl->winshmap);
+ cfg |= EXYNOS_WINSHMAP_CH_ENABLE(win_id);
+ writel(cfg, &fimd_ctrl->winshmap);
+}
+
+void exynos_fimd_lcd_off(void)
+{
+ unsigned int cfg = 0;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ cfg = readl(&fimd_ctrl->vidcon0);
+ cfg &= (EXYNOS_VIDCON0_ENVID_DISABLE | EXYNOS_VIDCON0_ENVID_F_DISABLE);
+ writel(cfg, &fimd_ctrl->vidcon0);
+}
+
+void exynos_fimd_window_off(unsigned int win_id)
+{
+ unsigned int cfg = 0;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ cfg = readl((unsigned int)&fimd_ctrl->wincon0 +
+ EXYNOS_WINCON(win_id));
+ cfg &= EXYNOS_WINCON_ENWIN_DISABLE;
+ writel(cfg, (unsigned int)&fimd_ctrl->wincon0 +
+ EXYNOS_WINCON(win_id));
+
+ cfg = readl(&fimd_ctrl->winshmap);
+ cfg &= ~EXYNOS_WINSHMAP_CH_DISABLE(win_id);
+ writel(cfg, &fimd_ctrl->winshmap);
+}
+
+void exynos_fimd_lcd_init(vidinfo_t *vid)
+{
+ unsigned int cfg = 0, rgb_mode;
+ struct exynos4_fb *fimd_ctrl =
+ (struct exynos4_fb *)samsung_get_base_fimd();
+
+ /* store panel info to global variable */
+ pvid = vid;
+
+ rgb_mode = MODE_RGB_P;
+
+ if (vid->interface_mode == FIMD_RGB_INTERFACE) {
+ cfg |= EXYNOS_VIDCON0_VIDOUT_RGB;
+ writel(cfg, &fimd_ctrl->vidcon0);
+
+ cfg = readl(&fimd_ctrl->vidcon2);
+ cfg &= ~(EXYNOS_VIDCON2_WB_MASK |
+ EXYNOS_VIDCON2_TVFORMATSEL_MASK |
+ EXYNOS_VIDCON2_TVFORMATSEL_YUV_MASK);
+ cfg |= EXYNOS_VIDCON2_WB_DISABLE;
+ writel(cfg, &fimd_ctrl->vidcon2);
+
+ /* set polarity */
+ cfg = 0;
+ if (!pvid->vl_clkp)
+ cfg |= EXYNOS_VIDCON1_IVCLK_RISING_EDGE;
+ if (!pvid->vl_hsp)
+ cfg |= EXYNOS_VIDCON1_IHSYNC_INVERT;
+ if (!pvid->vl_vsp)
+ cfg |= EXYNOS_VIDCON1_IVSYNC_INVERT;
+ if (!pvid->vl_dp)
+ cfg |= EXYNOS_VIDCON1_IVDEN_INVERT;
+
+ writel(cfg, &fimd_ctrl->vidcon1);
+
+ /* set timing */
+ cfg = EXYNOS_VIDTCON0_VFPD(pvid->vl_vfpd - 1);
+ cfg |= EXYNOS_VIDTCON0_VBPD(pvid->vl_vbpd - 1);
+ cfg |= EXYNOS_VIDTCON0_VSPW(pvid->vl_vspw - 1);
+ writel(cfg, &fimd_ctrl->vidtcon0);
+
+ cfg = EXYNOS_VIDTCON1_HFPD(pvid->vl_hfpd - 1);
+ cfg |= EXYNOS_VIDTCON1_HBPD(pvid->vl_hbpd - 1);
+ cfg |= EXYNOS_VIDTCON1_HSPW(pvid->vl_hspw - 1);
+
+ writel(cfg, &fimd_ctrl->vidtcon1);
+
+ /* set lcd size */
+ cfg = EXYNOS_VIDTCON2_HOZVAL(pvid->vl_col - 1);
+ cfg |= EXYNOS_VIDTCON2_LINEVAL(pvid->vl_row - 1);
+
+ writel(cfg, &fimd_ctrl->vidtcon2);
+ }
+
+ /* set display mode */
+ cfg = readl(&fimd_ctrl->vidcon0);
+ cfg &= ~EXYNOS_VIDCON0_PNRMODE_MASK;
+ cfg |= (rgb_mode << EXYNOS_VIDCON0_PNRMODE_SHIFT);
+ writel(cfg, &fimd_ctrl->vidcon0);
+
+ /* set par */
+ exynos_fimd_set_par(pvid->win_id);
+
+ /* set memory address */
+ exynos_fimd_set_buffer_address(pvid->win_id);
+
+ /* set buffer size */
+ cfg = EXYNOS_VIDADDR_PAGEWIDTH(pvid->vl_col * NBITS(pvid->vl_bpix) / 8);
+ writel(cfg, (unsigned int)&fimd_ctrl->vidw00add2 +
+ EXYNOS_BUFFER_SIZE(pvid->win_id));
+
+ /* set clock */
+ exynos_fimd_set_clock(pvid);
+
+ /* set rgb mode to dual lcd. */
+ exynos_fimd_set_dualrgb(pvid->dual_lcd_enabled);
+
+ /* display on */
+ exynos_fimd_lcd_on();
+
+ /* window on */
+ exynos_fimd_window_on(pvid->win_id);
+}
+
+unsigned long exynos_fimd_calc_fbsize(void)
+{
+ return pvid->vl_col * pvid->vl_row * (NBITS(pvid->vl_bpix) / 8);
+}
diff --git a/drivers/video/exynos_mipi_dsi.c b/drivers/video/exynos_mipi_dsi.c
new file mode 100644
index 0000000000..aee248c84f
--- /dev/null
+++ b/drivers/video/exynos_mipi_dsi.c
@@ -0,0 +1,253 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <malloc.h>
+#include <linux/err.h>
+#include <asm/arch/dsim.h>
+#include <asm/arch/mipi_dsim.h>
+#include <asm/arch/power.h>
+#include <asm/arch/cpu.h>
+#include <asm/arch/clk.h>
+
+#include "exynos_mipi_dsi_lowlevel.h"
+#include "exynos_mipi_dsi_common.h"
+
+#define master_to_driver(a) (a->dsim_lcd_drv)
+#define master_to_device(a) (a->dsim_lcd_dev)
+
+static struct exynos_platform_mipi_dsim *dsim_pd;
+
+struct mipi_dsim_ddi {
+ int bus_id;
+ struct list_head list;
+ struct mipi_dsim_lcd_device *dsim_lcd_dev;
+ struct mipi_dsim_lcd_driver *dsim_lcd_drv;
+};
+
+static LIST_HEAD(dsim_ddi_list);
+static LIST_HEAD(dsim_lcd_dev_list);
+
+int exynos_mipi_dsi_register_lcd_device(struct mipi_dsim_lcd_device *lcd_dev)
+{
+ struct mipi_dsim_ddi *dsim_ddi;
+
+ if (!lcd_dev) {
+ debug("mipi_dsim_lcd_device is NULL.\n");
+ return -EFAULT;
+ }
+
+ if (!lcd_dev->name) {
+ debug("dsim_lcd_device name is NULL.\n");
+ return -EFAULT;
+ }
+
+ dsim_ddi = kzalloc(sizeof(struct mipi_dsim_ddi), GFP_KERNEL);
+ if (!dsim_ddi) {
+ debug("failed to allocate dsim_ddi object.\n");
+ return -EFAULT;
+ }
+
+ dsim_ddi->dsim_lcd_dev = lcd_dev;
+
+ list_add_tail(&dsim_ddi->list, &dsim_ddi_list);
+
+ return 0;
+}
+
+struct mipi_dsim_ddi
+ *exynos_mipi_dsi_find_lcd_device(struct mipi_dsim_lcd_driver *lcd_drv)
+{
+ struct mipi_dsim_ddi *dsim_ddi;
+ struct mipi_dsim_lcd_device *lcd_dev;
+
+ list_for_each_entry(dsim_ddi, &dsim_ddi_list, list) {
+ lcd_dev = dsim_ddi->dsim_lcd_dev;
+ if (!lcd_dev)
+ continue;
+
+ if (lcd_drv->id >= 0) {
+ if ((strcmp(lcd_drv->name, lcd_dev->name)) == 0 &&
+ lcd_drv->id == lcd_dev->id) {
+ /**
+ * bus_id would be used to identify
+ * connected bus.
+ */
+ dsim_ddi->bus_id = lcd_dev->bus_id;
+
+ return dsim_ddi;
+ }
+ } else {
+ if ((strcmp(lcd_drv->name, lcd_dev->name)) == 0) {
+ /**
+ * bus_id would be used to identify
+ * connected bus.
+ */
+ dsim_ddi->bus_id = lcd_dev->bus_id;
+
+ return dsim_ddi;
+ }
+ }
+
+ kfree(dsim_ddi);
+ list_del(&dsim_ddi_list);
+ }
+
+ return NULL;
+}
+
+int exynos_mipi_dsi_register_lcd_driver(struct mipi_dsim_lcd_driver *lcd_drv)
+{
+ struct mipi_dsim_ddi *dsim_ddi;
+
+ if (!lcd_drv) {
+ debug("mipi_dsim_lcd_driver is NULL.\n");
+ return -EFAULT;
+ }
+
+ if (!lcd_drv->name) {
+ debug("dsim_lcd_driver name is NULL.\n");
+ return -EFAULT;
+ }
+
+ dsim_ddi = exynos_mipi_dsi_find_lcd_device(lcd_drv);
+ if (!dsim_ddi) {
+ debug("mipi_dsim_ddi object not found.\n");
+ return -EFAULT;
+ }
+
+ dsim_ddi->dsim_lcd_drv = lcd_drv;
+
+ debug("registered panel driver(%s) to mipi-dsi driver.\n",
+ lcd_drv->name);
+
+ return 0;
+
+}
+
+struct mipi_dsim_ddi
+ *exynos_mipi_dsi_bind_lcd_ddi(struct mipi_dsim_device *dsim,
+ const char *name)
+{
+ struct mipi_dsim_ddi *dsim_ddi;
+ struct mipi_dsim_lcd_driver *lcd_drv;
+ struct mipi_dsim_lcd_device *lcd_dev;
+
+ list_for_each_entry(dsim_ddi, &dsim_ddi_list, list) {
+ lcd_drv = dsim_ddi->dsim_lcd_drv;
+ lcd_dev = dsim_ddi->dsim_lcd_dev;
+ if (!lcd_drv || !lcd_dev)
+ continue;
+
+ debug("lcd_drv->id = %d, lcd_dev->id = %d\n",
+ lcd_drv->id, lcd_dev->id);
+
+ if ((strcmp(lcd_drv->name, name) == 0)) {
+ lcd_dev->master = dsim;
+
+ dsim->dsim_lcd_dev = lcd_dev;
+ dsim->dsim_lcd_drv = lcd_drv;
+
+ return dsim_ddi;
+ }
+ }
+
+ return NULL;
+}
+
+/* define MIPI-DSI Master operations. */
+static struct mipi_dsim_master_ops master_ops = {
+ .cmd_write = exynos_mipi_dsi_wr_data,
+ .get_dsim_frame_done = exynos_mipi_dsi_get_frame_done_status,
+ .clear_dsim_frame_done = exynos_mipi_dsi_clear_frame_done,
+};
+
+int exynos_mipi_dsi_init(void)
+{
+ struct mipi_dsim_device *dsim;
+ struct mipi_dsim_config *dsim_config;
+ struct mipi_dsim_ddi *dsim_ddi;
+
+ dsim = kzalloc(sizeof(struct mipi_dsim_device), GFP_KERNEL);
+ if (!dsim) {
+ debug("failed to allocate dsim object.\n");
+ return -EFAULT;
+ }
+
+ /* get mipi_dsim_config. */
+ dsim_config = dsim_pd->dsim_config;
+ if (dsim_config == NULL) {
+ debug("failed to get dsim config data.\n");
+ return -EFAULT;
+ }
+
+ dsim->pd = dsim_pd;
+ dsim->dsim_config = dsim_config;
+ dsim->master_ops = &master_ops;
+
+ /* bind lcd ddi matched with panel name. */
+ dsim_ddi = exynos_mipi_dsi_bind_lcd_ddi(dsim, dsim_pd->lcd_panel_name);
+ if (!dsim_ddi) {
+ debug("mipi_dsim_ddi object not found.\n");
+ return -ENOSYS;
+ }
+ if (dsim_pd->lcd_power)
+ dsim_pd->lcd_power();
+
+ if (dsim_pd->mipi_power)
+ dsim_pd->mipi_power();
+
+ /* phy_enable(unsigned int dev_index, unsigned int enable) */
+ if (dsim_pd->phy_enable)
+ dsim_pd->phy_enable(0, 1);
+
+ set_mipi_clk();
+
+ exynos_mipi_dsi_init_dsim(dsim);
+ exynos_mipi_dsi_init_link(dsim);
+ exynos_mipi_dsi_set_hs_enable(dsim);
+
+ /* set display timing. */
+ exynos_mipi_dsi_set_display_mode(dsim, dsim->dsim_config);
+
+ /* initialize mipi-dsi client(lcd panel). */
+ if (dsim_ddi->dsim_lcd_drv && dsim_ddi->dsim_lcd_drv->mipi_panel_init) {
+ dsim_ddi->dsim_lcd_drv->mipi_panel_init(dsim);
+ dsim_ddi->dsim_lcd_drv->mipi_display_on(dsim);
+ }
+
+ debug("mipi-dsi driver(%s mode) has been probed.\n",
+ (dsim_config->e_interface == DSIM_COMMAND) ?
+ "CPU" : "RGB");
+
+ return 0;
+}
+
+void exynos_set_dsim_platform_data(struct exynos_platform_mipi_dsim *pd)
+{
+ if (pd == NULL) {
+ debug("pd is NULL\n");
+ return;
+ }
+
+ dsim_pd = pd;
+}
diff --git a/drivers/video/exynos_mipi_dsi_common.c b/drivers/video/exynos_mipi_dsi_common.c
new file mode 100644
index 0000000000..6eeb46424f
--- /dev/null
+++ b/drivers/video/exynos_mipi_dsi_common.c
@@ -0,0 +1,637 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <lcd.h>
+#include <linux/err.h>
+#include <asm/arch/dsim.h>
+#include <asm/arch/mipi_dsim.h>
+
+#include "exynos_mipi_dsi_lowlevel.h"
+
+#define MHZ (1000 * 1000)
+#define FIN_HZ (24 * MHZ)
+
+#define DFIN_PLL_MIN_HZ (6 * MHZ)
+#define DFIN_PLL_MAX_HZ (12 * MHZ)
+
+#define DFVCO_MIN_HZ (500 * MHZ)
+#define DFVCO_MAX_HZ (1000 * MHZ)
+
+#define TRY_GET_FIFO_TIMEOUT (5000 * 2)
+
+/* MIPI-DSIM status types. */
+enum {
+ DSIM_STATE_INIT, /* should be initialized. */
+ DSIM_STATE_STOP, /* CPU and LCDC are LP mode. */
+ DSIM_STATE_HSCLKEN, /* HS clock was enabled. */
+ DSIM_STATE_ULPS
+};
+
+/* define DSI lane types. */
+enum {
+ DSIM_LANE_CLOCK = (1 << 0),
+ DSIM_LANE_DATA0 = (1 << 1),
+ DSIM_LANE_DATA1 = (1 << 2),
+ DSIM_LANE_DATA2 = (1 << 3),
+ DSIM_LANE_DATA3 = (1 << 4)
+};
+
+static unsigned int dpll_table[15] = {
+ 100, 120, 170, 220, 270,
+ 320, 390, 450, 510, 560,
+ 640, 690, 770, 870, 950
+};
+
+static void exynos_mipi_dsi_long_data_wr(struct mipi_dsim_device *dsim,
+ unsigned int data0, unsigned int data1)
+{
+ unsigned int data_cnt = 0, payload = 0;
+
+ /* in case that data count is more then 4 */
+ for (data_cnt = 0; data_cnt < data1; data_cnt += 4) {
+ /*
+ * after sending 4bytes per one time,
+ * send remainder data less then 4.
+ */
+ if ((data1 - data_cnt) < 4) {
+ if ((data1 - data_cnt) == 3) {
+ payload = *(u8 *)(data0 + data_cnt) |
+ (*(u8 *)(data0 + (data_cnt + 1))) << 8 |
+ (*(u8 *)(data0 + (data_cnt + 2))) << 16;
+ debug("count = 3 payload = %x, %x %x %x\n",
+ payload, *(u8 *)(data0 + data_cnt),
+ *(u8 *)(data0 + (data_cnt + 1)),
+ *(u8 *)(data0 + (data_cnt + 2)));
+ } else if ((data1 - data_cnt) == 2) {
+ payload = *(u8 *)(data0 + data_cnt) |
+ (*(u8 *)(data0 + (data_cnt + 1))) << 8;
+ debug("count = 2 payload = %x, %x %x\n", payload,
+ *(u8 *)(data0 + data_cnt),
+ *(u8 *)(data0 + (data_cnt + 1)));
+ } else if ((data1 - data_cnt) == 1) {
+ payload = *(u8 *)(data0 + data_cnt);
+ }
+ } else {
+ /* send 4bytes per one time. */
+ payload = *(u8 *)(data0 + data_cnt) |
+ (*(u8 *)(data0 + (data_cnt + 1))) << 8 |
+ (*(u8 *)(data0 + (data_cnt + 2))) << 16 |
+ (*(u8 *)(data0 + (data_cnt + 3))) << 24;
+
+ debug("count = 4 payload = %x, %x %x %x %x\n",
+ payload, *(u8 *)(data0 + data_cnt),
+ *(u8 *)(data0 + (data_cnt + 1)),
+ *(u8 *)(data0 + (data_cnt + 2)),
+ *(u8 *)(data0 + (data_cnt + 3)));
+
+ }
+ exynos_mipi_dsi_wr_tx_data(dsim, payload);
+ }
+}
+
+int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
+ unsigned int data0, unsigned int data1)
+{
+ unsigned int timeout = TRY_GET_FIFO_TIMEOUT;
+ unsigned long delay_val, delay;
+ unsigned int check_rx_ack = 0;
+
+ if (dsim->state == DSIM_STATE_ULPS) {
+ debug("state is ULPS.\n");
+
+ return -EINVAL;
+ }
+
+ delay_val = MHZ / dsim->dsim_config->esc_clk;
+ delay = 10 * delay_val;
+
+ mdelay(delay);
+
+ /* only if transfer mode is LPDT, wait SFR becomes empty. */
+ if (dsim->state == DSIM_STATE_STOP) {
+ while (!(exynos_mipi_dsi_get_fifo_state(dsim) &
+ SFR_HEADER_EMPTY)) {
+ if ((timeout--) > 0)
+ mdelay(1);
+ else {
+ debug("SRF header fifo is not empty.\n");
+ return -EINVAL;
+ }
+ }
+ }
+
+ switch (data_id) {
+ /* short packet types of packet types for command. */
+ case MIPI_DSI_GENERIC_SHORT_WRITE_0_PARAM:
+ case MIPI_DSI_GENERIC_SHORT_WRITE_1_PARAM:
+ case MIPI_DSI_GENERIC_SHORT_WRITE_2_PARAM:
+ case MIPI_DSI_DCS_SHORT_WRITE:
+ case MIPI_DSI_DCS_SHORT_WRITE_PARAM:
+ case MIPI_DSI_SET_MAXIMUM_RETURN_PACKET_SIZE:
+ debug("data0 = %x data1 = %x\n",
+ data0, data1);
+ exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+ if (check_rx_ack) {
+ /* process response func should be implemented */
+ return 0;
+ } else {
+ return -EINVAL;
+ }
+
+ /* general command */
+ case MIPI_DSI_COLOR_MODE_OFF:
+ case MIPI_DSI_COLOR_MODE_ON:
+ case MIPI_DSI_SHUTDOWN_PERIPHERAL:
+ case MIPI_DSI_TURN_ON_PERIPHERAL:
+ exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+ if (check_rx_ack) {
+ /* process response func should be implemented. */
+ return 0;
+ } else {
+ return -EINVAL;
+ }
+
+ /* packet types for video data */
+ case MIPI_DSI_V_SYNC_START:
+ case MIPI_DSI_V_SYNC_END:
+ case MIPI_DSI_H_SYNC_START:
+ case MIPI_DSI_H_SYNC_END:
+ case MIPI_DSI_END_OF_TRANSMISSION:
+ return 0;
+
+ /* short and response packet types for command */
+ case MIPI_DSI_GENERIC_READ_REQUEST_0_PARAM:
+ case MIPI_DSI_GENERIC_READ_REQUEST_1_PARAM:
+ case MIPI_DSI_GENERIC_READ_REQUEST_2_PARAM:
+ case MIPI_DSI_DCS_READ:
+ exynos_mipi_dsi_clear_all_interrupt(dsim);
+ exynos_mipi_dsi_wr_tx_header(dsim, data_id, data0, data1);
+ /* process response func should be implemented. */
+ return 0;
+
+ /* long packet type and null packet */
+ case MIPI_DSI_NULL_PACKET:
+ case MIPI_DSI_BLANKING_PACKET:
+ return 0;
+ case MIPI_DSI_GENERIC_LONG_WRITE:
+ case MIPI_DSI_DCS_LONG_WRITE:
+ {
+ unsigned int data_cnt = 0, payload = 0;
+
+ /* if data count is less then 4, then send 3bytes data. */
+ if (data1 < 4) {
+ payload = *(u8 *)(data0) |
+ *(u8 *)(data0 + 1) << 8 |
+ *(u8 *)(data0 + 2) << 16;
+
+ exynos_mipi_dsi_wr_tx_data(dsim, payload);
+
+ debug("count = %d payload = %x,%x %x %x\n",
+ data1, payload,
+ *(u8 *)(data0 + data_cnt),
+ *(u8 *)(data0 + (data_cnt + 1)),
+ *(u8 *)(data0 + (data_cnt + 2)));
+ } else {
+ /* in case that data count is more then 4 */
+ exynos_mipi_dsi_long_data_wr(dsim, data0, data1);
+ }
+
+ /* put data into header fifo */
+ exynos_mipi_dsi_wr_tx_header(dsim, data_id, data1 & 0xff,
+ (data1 & 0xff00) >> 8);
+
+ }
+ if (check_rx_ack)
+ /* process response func should be implemented. */
+ return 0;
+ else
+ return -EINVAL;
+
+ /* packet typo for video data */
+ case MIPI_DSI_PACKED_PIXEL_STREAM_16:
+ case MIPI_DSI_PACKED_PIXEL_STREAM_18:
+ case MIPI_DSI_PIXEL_STREAM_3BYTE_18:
+ case MIPI_DSI_PACKED_PIXEL_STREAM_24:
+ if (check_rx_ack) {
+ /* process response func should be implemented. */
+ return 0;
+ } else {
+ return -EINVAL;
+ }
+ default:
+ debug("data id %x is not supported current DSI spec.\n",
+ data_id);
+
+ return -EINVAL;
+ }
+
+ return 0;
+}
+
+int exynos_mipi_dsi_pll_on(struct mipi_dsim_device *dsim, unsigned int enable)
+{
+ int sw_timeout;
+
+ if (enable) {
+ sw_timeout = 1000;
+
+ exynos_mipi_dsi_clear_interrupt(dsim);
+ exynos_mipi_dsi_enable_pll(dsim, 1);
+ while (1) {
+ sw_timeout--;
+ if (exynos_mipi_dsi_is_pll_stable(dsim))
+ return 0;
+ if (sw_timeout == 0)
+ return -EINVAL;
+ }
+ } else
+ exynos_mipi_dsi_enable_pll(dsim, 0);
+
+ return 0;
+}
+
+unsigned long exynos_mipi_dsi_change_pll(struct mipi_dsim_device *dsim,
+ unsigned int pre_divider, unsigned int main_divider,
+ unsigned int scaler)
+{
+ unsigned long dfin_pll, dfvco, dpll_out;
+ unsigned int i, freq_band = 0xf;
+
+ dfin_pll = (FIN_HZ / pre_divider);
+
+ /******************************************************
+ * Serial Clock(=ByteClk X 8) FreqBand[3:0] *
+ ******************************************************
+ * ~ 99.99 MHz 0000
+ * 100 ~ 119.99 MHz 0001
+ * 120 ~ 159.99 MHz 0010
+ * 160 ~ 199.99 MHz 0011
+ * 200 ~ 239.99 MHz 0100
+ * 140 ~ 319.99 MHz 0101
+ * 320 ~ 389.99 MHz 0110
+ * 390 ~ 449.99 MHz 0111
+ * 450 ~ 509.99 MHz 1000
+ * 510 ~ 559.99 MHz 1001
+ * 560 ~ 639.99 MHz 1010
+ * 640 ~ 689.99 MHz 1011
+ * 690 ~ 769.99 MHz 1100
+ * 770 ~ 869.99 MHz 1101
+ * 870 ~ 949.99 MHz 1110
+ * 950 ~ 1000 MHz 1111
+ ******************************************************/
+ if (dfin_pll < DFIN_PLL_MIN_HZ || dfin_pll > DFIN_PLL_MAX_HZ) {
+ debug("fin_pll range should be 6MHz ~ 12MHz\n");
+ exynos_mipi_dsi_enable_afc(dsim, 0, 0);
+ } else {
+ if (dfin_pll < 7 * MHZ)
+ exynos_mipi_dsi_enable_afc(dsim, 1, 0x1);
+ else if (dfin_pll < 8 * MHZ)
+ exynos_mipi_dsi_enable_afc(dsim, 1, 0x0);
+ else if (dfin_pll < 9 * MHZ)
+ exynos_mipi_dsi_enable_afc(dsim, 1, 0x3);
+ else if (dfin_pll < 10 * MHZ)
+ exynos_mipi_dsi_enable_afc(dsim, 1, 0x2);
+ else if (dfin_pll < 11 * MHZ)
+ exynos_mipi_dsi_enable_afc(dsim, 1, 0x5);
+ else
+ exynos_mipi_dsi_enable_afc(dsim, 1, 0x4);
+ }
+
+ dfvco = dfin_pll * main_divider;
+ debug("dfvco = %lu, dfin_pll = %lu, main_divider = %d\n",
+ dfvco, dfin_pll, main_divider);
+ if (dfvco < DFVCO_MIN_HZ || dfvco > DFVCO_MAX_HZ)
+ debug("fvco range should be 500MHz ~ 1000MHz\n");
+
+ dpll_out = dfvco / (1 << scaler);
+ debug("dpll_out = %lu, dfvco = %lu, scaler = %d\n",
+ dpll_out, dfvco, scaler);
+
+ for (i = 0; i < ARRAY_SIZE(dpll_table); i++) {
+ if (dpll_out < dpll_table[i] * MHZ) {
+ freq_band = i;
+ break;
+ }
+ }
+
+ debug("freq_band = %d\n", freq_band);
+
+ exynos_mipi_dsi_pll_freq(dsim, pre_divider, main_divider, scaler);
+
+ exynos_mipi_dsi_hs_zero_ctrl(dsim, 0);
+ exynos_mipi_dsi_prep_ctrl(dsim, 0);
+
+ /* Freq Band */
+ exynos_mipi_dsi_pll_freq_band(dsim, freq_band);
+
+ /* Stable time */
+ exynos_mipi_dsi_pll_stable_time(dsim,
+ dsim->dsim_config->pll_stable_time);
+
+ /* Enable PLL */
+ debug("FOUT of mipi dphy pll is %luMHz\n",
+ (dpll_out / MHZ));
+
+ return dpll_out;
+}
+
+int exynos_mipi_dsi_set_clock(struct mipi_dsim_device *dsim,
+ unsigned int byte_clk_sel, unsigned int enable)
+{
+ unsigned int esc_div;
+ unsigned long esc_clk_error_rate;
+ unsigned long hs_clk = 0, byte_clk = 0, escape_clk = 0;
+
+ if (enable) {
+ dsim->e_clk_src = byte_clk_sel;
+
+ /* Escape mode clock and byte clock source */
+ exynos_mipi_dsi_set_byte_clock_src(dsim, byte_clk_sel);
+
+ /* DPHY, DSIM Link : D-PHY clock out */
+ if (byte_clk_sel == DSIM_PLL_OUT_DIV8) {
+ hs_clk = exynos_mipi_dsi_change_pll(dsim,
+ dsim->dsim_config->p, dsim->dsim_config->m,
+ dsim->dsim_config->s);
+ if (hs_clk == 0) {
+ debug("failed to get hs clock.\n");
+ return -EINVAL;
+ }
+
+ byte_clk = hs_clk / 8;
+ exynos_mipi_dsi_enable_pll_bypass(dsim, 0);
+ exynos_mipi_dsi_pll_on(dsim, 1);
+ /* DPHY : D-PHY clock out, DSIM link : external clock out */
+ } else if (byte_clk_sel == DSIM_EXT_CLK_DIV8)
+ debug("not support EXT CLK source for MIPI DSIM\n");
+ else if (byte_clk_sel == DSIM_EXT_CLK_BYPASS)
+ debug("not support EXT CLK source for MIPI DSIM\n");
+
+ /* escape clock divider */
+ esc_div = byte_clk / (dsim->dsim_config->esc_clk);
+ debug("esc_div = %d, byte_clk = %lu, esc_clk = %lu\n",
+ esc_div, byte_clk, dsim->dsim_config->esc_clk);
+ if ((byte_clk / esc_div) >= (20 * MHZ) ||
+ (byte_clk / esc_div) > dsim->dsim_config->esc_clk)
+ esc_div += 1;
+
+ escape_clk = byte_clk / esc_div;
+ debug("escape_clk = %lu, byte_clk = %lu, esc_div = %d\n",
+ escape_clk, byte_clk, esc_div);
+
+ /* enable escape clock. */
+ exynos_mipi_dsi_enable_byte_clock(dsim, 1);
+
+ /* enable byte clk and escape clock */
+ exynos_mipi_dsi_set_esc_clk_prs(dsim, 1, esc_div);
+ /* escape clock on lane */
+ exynos_mipi_dsi_enable_esc_clk_on_lane(dsim,
+ (DSIM_LANE_CLOCK | dsim->data_lane), 1);
+
+ debug("byte clock is %luMHz\n",
+ (byte_clk / MHZ));
+ debug("escape clock that user's need is %lu\n",
+ (dsim->dsim_config->esc_clk / MHZ));
+ debug("escape clock divider is %x\n", esc_div);
+ debug("escape clock is %luMHz\n",
+ ((byte_clk / esc_div) / MHZ));
+
+ if ((byte_clk / esc_div) > escape_clk) {
+ esc_clk_error_rate = escape_clk /
+ (byte_clk / esc_div);
+ debug("error rate is %lu over.\n",
+ (esc_clk_error_rate / 100));
+ } else if ((byte_clk / esc_div) < (escape_clk)) {
+ esc_clk_error_rate = (byte_clk / esc_div) /
+ escape_clk;
+ debug("error rate is %lu under.\n",
+ (esc_clk_error_rate / 100));
+ }
+ } else {
+ exynos_mipi_dsi_enable_esc_clk_on_lane(dsim,
+ (DSIM_LANE_CLOCK | dsim->data_lane), 0);
+ exynos_mipi_dsi_set_esc_clk_prs(dsim, 0, 0);
+
+ /* disable escape clock. */
+ exynos_mipi_dsi_enable_byte_clock(dsim, 0);
+
+ if (byte_clk_sel == DSIM_PLL_OUT_DIV8)
+ exynos_mipi_dsi_pll_on(dsim, 0);
+ }
+
+ return 0;
+}
+
+int exynos_mipi_dsi_init_dsim(struct mipi_dsim_device *dsim)
+{
+ dsim->state = DSIM_STATE_INIT;
+
+ switch (dsim->dsim_config->e_no_data_lane) {
+ case DSIM_DATA_LANE_1:
+ dsim->data_lane = DSIM_LANE_DATA0;
+ break;
+ case DSIM_DATA_LANE_2:
+ dsim->data_lane = DSIM_LANE_DATA0 | DSIM_LANE_DATA1;
+ break;
+ case DSIM_DATA_LANE_3:
+ dsim->data_lane = DSIM_LANE_DATA0 | DSIM_LANE_DATA1 |
+ DSIM_LANE_DATA2;
+ break;
+ case DSIM_DATA_LANE_4:
+ dsim->data_lane = DSIM_LANE_DATA0 | DSIM_LANE_DATA1 |
+ DSIM_LANE_DATA2 | DSIM_LANE_DATA3;
+ break;
+ default:
+ debug("data lane is invalid.\n");
+ return -EINVAL;
+ };
+
+ exynos_mipi_dsi_sw_reset(dsim);
+ exynos_mipi_dsi_dp_dn_swap(dsim, 0);
+
+ return 0;
+}
+
+int exynos_mipi_dsi_enable_frame_done_int(struct mipi_dsim_device *dsim,
+ unsigned int enable)
+{
+ /* enable only frame done interrupt */
+ exynos_mipi_dsi_set_interrupt_mask(dsim, INTMSK_FRAME_DONE, enable);
+
+ return 0;
+}
+
+static void convert_to_fb_videomode(struct fb_videomode *mode1,
+ vidinfo_t *mode2)
+{
+ mode1->xres = mode2->vl_width;
+ mode1->yres = mode2->vl_height;
+ mode1->upper_margin = mode2->vl_vfpd;
+ mode1->lower_margin = mode2->vl_vbpd;
+ mode1->left_margin = mode2->vl_hfpd;
+ mode1->right_margin = mode2->vl_hbpd;
+ mode1->vsync_len = mode2->vl_vspw;
+ mode1->hsync_len = mode2->vl_hspw;
+}
+
+int exynos_mipi_dsi_set_display_mode(struct mipi_dsim_device *dsim,
+ struct mipi_dsim_config *dsim_config)
+{
+ struct exynos_platform_mipi_dsim *dsim_pd;
+ struct fb_videomode lcd_video;
+ vidinfo_t *vid;
+
+ dsim_pd = (struct exynos_platform_mipi_dsim *)dsim->pd;
+ vid = (vidinfo_t *)dsim_pd->lcd_panel_info;
+
+ convert_to_fb_videomode(&lcd_video, vid);
+
+ /* in case of VIDEO MODE (RGB INTERFACE), it sets polarities. */
+ if (dsim->dsim_config->e_interface == (u32) DSIM_VIDEO) {
+ if (dsim->dsim_config->auto_vertical_cnt == 0) {
+ exynos_mipi_dsi_set_main_disp_vporch(dsim,
+ vid->vl_cmd_allow_len,
+ lcd_video.upper_margin,
+ lcd_video.lower_margin);
+ exynos_mipi_dsi_set_main_disp_hporch(dsim,
+ lcd_video.left_margin,
+ lcd_video.right_margin);
+ exynos_mipi_dsi_set_main_disp_sync_area(dsim,
+ lcd_video.vsync_len,
+ lcd_video.hsync_len);
+ }
+ }
+
+ exynos_mipi_dsi_set_main_disp_resol(dsim, lcd_video.xres,
+ lcd_video.yres);
+
+ exynos_mipi_dsi_display_config(dsim, dsim->dsim_config);
+
+ debug("lcd panel ==> width = %d, height = %d\n",
+ lcd_video.xres, lcd_video.yres);
+
+ return 0;
+}
+
+int exynos_mipi_dsi_init_link(struct mipi_dsim_device *dsim)
+{
+ unsigned int time_out = 100;
+
+ switch (dsim->state) {
+ case DSIM_STATE_INIT:
+ exynos_mipi_dsi_init_fifo_pointer(dsim, 0x1f);
+
+ /* dsi configuration */
+ exynos_mipi_dsi_init_config(dsim);
+ exynos_mipi_dsi_enable_lane(dsim, DSIM_LANE_CLOCK, 1);
+ exynos_mipi_dsi_enable_lane(dsim, dsim->data_lane, 1);
+
+ /* set clock configuration */
+ exynos_mipi_dsi_set_clock(dsim,
+ dsim->dsim_config->e_byte_clk, 1);
+
+ /* check clock and data lane state are stop state */
+ while (!(exynos_mipi_dsi_is_lane_state(dsim))) {
+ time_out--;
+ if (time_out == 0) {
+ debug("DSI Master is not stop state.\n");
+ debug("Check initialization process\n");
+
+ return -EINVAL;
+ }
+ }
+
+ dsim->state = DSIM_STATE_STOP;
+
+ /* BTA sequence counters */
+ exynos_mipi_dsi_set_stop_state_counter(dsim,
+ dsim->dsim_config->stop_holding_cnt);
+ exynos_mipi_dsi_set_bta_timeout(dsim,
+ dsim->dsim_config->bta_timeout);
+ exynos_mipi_dsi_set_lpdr_timeout(dsim,
+ dsim->dsim_config->rx_timeout);
+
+ return 0;
+ default:
+ debug("DSI Master is already init.\n");
+ return 0;
+ }
+
+ return 0;
+}
+
+int exynos_mipi_dsi_set_hs_enable(struct mipi_dsim_device *dsim)
+{
+ if (dsim->state == DSIM_STATE_STOP) {
+ if (dsim->e_clk_src != DSIM_EXT_CLK_BYPASS) {
+ dsim->state = DSIM_STATE_HSCLKEN;
+
+ /* set LCDC and CPU transfer mode to HS. */
+ exynos_mipi_dsi_set_lcdc_transfer_mode(dsim, 0);
+ exynos_mipi_dsi_set_cpu_transfer_mode(dsim, 0);
+
+ exynos_mipi_dsi_enable_hs_clock(dsim, 1);
+
+ return 0;
+ } else
+ debug("clock source is external bypass.\n");
+ } else
+ debug("DSIM is not stop state.\n");
+
+ return 0;
+}
+
+int exynos_mipi_dsi_set_data_transfer_mode(struct mipi_dsim_device *dsim,
+ unsigned int mode)
+{
+ if (mode) {
+ if (dsim->state != DSIM_STATE_HSCLKEN) {
+ debug("HS Clock lane is not enabled.\n");
+ return -EINVAL;
+ }
+
+ exynos_mipi_dsi_set_lcdc_transfer_mode(dsim, 0);
+ } else {
+ if (dsim->state == DSIM_STATE_INIT || dsim->state ==
+ DSIM_STATE_ULPS) {
+ debug("DSI Master is not STOP or HSDT state.\n");
+ return -EINVAL;
+ }
+
+ exynos_mipi_dsi_set_cpu_transfer_mode(dsim, 0);
+ }
+
+ return 0;
+}
+
+int exynos_mipi_dsi_get_frame_done_status(struct mipi_dsim_device *dsim)
+{
+ return _exynos_mipi_dsi_get_frame_done_status(dsim);
+}
+
+int exynos_mipi_dsi_clear_frame_done(struct mipi_dsim_device *dsim)
+{
+ _exynos_mipi_dsi_clear_frame_done(dsim);
+
+ return 0;
+}
diff --git a/drivers/video/exynos_mipi_dsi_common.h b/drivers/video/exynos_mipi_dsi_common.h
new file mode 100644
index 0000000000..4d80679a5d
--- /dev/null
+++ b/drivers/video/exynos_mipi_dsi_common.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <linux/fb.h>
+
+#ifndef _EXYNOS_MIPI_DSI_COMMON_H
+#define _EXYNOS_MIPI_DSI_COMMON_H
+
+int exynos_mipi_dsi_wr_data(struct mipi_dsim_device *dsim, unsigned int data_id,
+ unsigned int data0, unsigned int data1);
+int exynos_mipi_dsi_pll_on(struct mipi_dsim_device *dsim, unsigned int enable);
+unsigned long exynos_mipi_dsi_change_pll(struct mipi_dsim_device *dsim,
+ unsigned int pre_divider, unsigned int main_divider,
+ unsigned int scaler);
+int exynos_mipi_dsi_set_clock(struct mipi_dsim_device *dsim,
+ unsigned int byte_clk_sel, unsigned int enable);
+int exynos_mipi_dsi_init_dsim(struct mipi_dsim_device *dsim);
+int exynos_mipi_dsi_set_display_mode(struct mipi_dsim_device *dsim,
+ struct mipi_dsim_config *dsim_info);
+int exynos_mipi_dsi_init_link(struct mipi_dsim_device *dsim);
+int exynos_mipi_dsi_set_hs_enable(struct mipi_dsim_device *dsim);
+int exynos_mipi_dsi_set_data_transfer_mode(struct mipi_dsim_device *dsim,
+ unsigned int mode);
+int exynos_mipi_dsi_enable_frame_done_int(struct mipi_dsim_device *dsim,
+ unsigned int enable);
+int exynos_mipi_dsi_get_frame_done_status(struct mipi_dsim_device *dsim);
+int exynos_mipi_dsi_clear_frame_done(struct mipi_dsim_device *dsim);
+
+#endif /* _EXYNOS_MIPI_DSI_COMMON_H */
diff --git a/drivers/video/exynos_mipi_dsi_lowlevel.c b/drivers/video/exynos_mipi_dsi_lowlevel.c
new file mode 100644
index 0000000000..d61b773616
--- /dev/null
+++ b/drivers/video/exynos_mipi_dsi_lowlevel.c
@@ -0,0 +1,652 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/arch/dsim.h>
+#include <asm/arch/mipi_dsim.h>
+#include <asm/arch/power.h>
+#include <asm/arch/cpu.h>
+
+#include "exynos_mipi_dsi_lowlevel.h"
+#include "exynos_mipi_dsi_common.h"
+
+void exynos_mipi_dsi_func_reset(struct mipi_dsim_device *dsim)
+{
+ unsigned int reg;
+
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = readl(&mipi_dsim->swrst);
+
+ reg |= DSIM_FUNCRST;
+
+ writel(reg, &mipi_dsim->swrst);
+}
+
+void exynos_mipi_dsi_sw_reset(struct mipi_dsim_device *dsim)
+{
+ unsigned int reg = 0;
+
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = readl(&mipi_dsim->swrst);
+
+ reg |= DSIM_SWRST;
+ reg |= DSIM_FUNCRST;
+
+ writel(reg, &mipi_dsim->swrst);
+}
+
+void exynos_mipi_dsi_sw_release(struct mipi_dsim_device *dsim)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->intsrc);
+
+ reg |= INTSRC_SWRST_RELEASE;
+
+ writel(reg, &mipi_dsim->intsrc);
+}
+
+void exynos_mipi_dsi_set_interrupt_mask(struct mipi_dsim_device *dsim,
+ unsigned int mode, unsigned int mask)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->intmsk);
+
+ if (mask)
+ reg |= mode;
+ else
+ reg &= ~mode;
+
+ writel(reg, &mipi_dsim->intmsk);
+}
+
+void exynos_mipi_dsi_init_fifo_pointer(struct mipi_dsim_device *dsim,
+ unsigned int cfg)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = readl(&mipi_dsim->fifoctrl);
+
+ writel(reg & ~(cfg), &mipi_dsim->fifoctrl);
+ udelay(10 * 1000);
+ reg |= cfg;
+
+ writel(reg, &mipi_dsim->fifoctrl);
+}
+
+/*
+ * this function set PLL P, M and S value in D-PHY
+ */
+void exynos_mipi_dsi_set_phy_tunning(struct mipi_dsim_device *dsim,
+ unsigned int value)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ writel(DSIM_AFC_CTL(value), &mipi_dsim->phyacchr);
+}
+
+void exynos_mipi_dsi_set_main_disp_resol(struct mipi_dsim_device *dsim,
+ unsigned int width_resol, unsigned int height_resol)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ /* standby should be set after configuration so set to not ready*/
+ reg = (readl(&mipi_dsim->mdresol)) & ~(DSIM_MAIN_STAND_BY);
+ writel(reg, &mipi_dsim->mdresol);
+
+ /* reset resolution */
+ reg &= ~(DSIM_MAIN_VRESOL(0x7ff) | DSIM_MAIN_HRESOL(0x7ff));
+ reg |= DSIM_MAIN_VRESOL(height_resol) | DSIM_MAIN_HRESOL(width_resol);
+
+ reg |= DSIM_MAIN_STAND_BY;
+ writel(reg, &mipi_dsim->mdresol);
+}
+
+void exynos_mipi_dsi_set_main_disp_vporch(struct mipi_dsim_device *dsim,
+ unsigned int cmd_allow, unsigned int vfront, unsigned int vback)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = (readl(&mipi_dsim->mvporch)) &
+ ~((DSIM_CMD_ALLOW_MASK) | (DSIM_STABLE_VFP_MASK) |
+ (DSIM_MAIN_VBP_MASK));
+
+ reg |= ((cmd_allow & 0xf) << DSIM_CMD_ALLOW_SHIFT) |
+ ((vfront & 0x7ff) << DSIM_STABLE_VFP_SHIFT) |
+ ((vback & 0x7ff) << DSIM_MAIN_VBP_SHIFT);
+
+ writel(reg, &mipi_dsim->mvporch);
+}
+
+void exynos_mipi_dsi_set_main_disp_hporch(struct mipi_dsim_device *dsim,
+ unsigned int front, unsigned int back)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = (readl(&mipi_dsim->mhporch)) &
+ ~((DSIM_MAIN_HFP_MASK) | (DSIM_MAIN_HBP_MASK));
+
+ reg |= (front << DSIM_MAIN_HFP_SHIFT) | (back << DSIM_MAIN_HBP_SHIFT);
+
+ writel(reg, &mipi_dsim->mhporch);
+}
+
+void exynos_mipi_dsi_set_main_disp_sync_area(struct mipi_dsim_device *dsim,
+ unsigned int vert, unsigned int hori)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = (readl(&mipi_dsim->msync)) &
+ ~((DSIM_MAIN_VSA_MASK) | (DSIM_MAIN_HSA_MASK));
+
+ reg |= ((vert & 0x3ff) << DSIM_MAIN_VSA_SHIFT) |
+ (hori << DSIM_MAIN_HSA_SHIFT);
+
+ writel(reg, &mipi_dsim->msync);
+}
+
+void exynos_mipi_dsi_set_sub_disp_resol(struct mipi_dsim_device *dsim,
+ unsigned int vert, unsigned int hori)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = (readl(&mipi_dsim->sdresol)) &
+ ~(DSIM_SUB_STANDY_MASK);
+
+ writel(reg, &mipi_dsim->sdresol);
+
+ reg &= ~(DSIM_SUB_VRESOL_MASK) | ~(DSIM_SUB_HRESOL_MASK);
+ reg |= ((vert & 0x7ff) << DSIM_SUB_VRESOL_SHIFT) |
+ ((hori & 0x7ff) << DSIM_SUB_HRESOL_SHIFT);
+ writel(reg, &mipi_dsim->sdresol);
+
+ /* DSIM STANDBY */
+ reg |= (1 << DSIM_SUB_STANDY_SHIFT);
+ writel(reg, &mipi_dsim->sdresol);
+}
+
+void exynos_mipi_dsi_init_config(struct mipi_dsim_device *dsim)
+{
+ struct mipi_dsim_config *dsim_config = dsim->dsim_config;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int cfg = (readl(&mipi_dsim->config)) &
+ ~((1 << DSIM_EOT_PACKET_SHIFT) |
+ (0x1f << DSIM_HSA_MODE_SHIFT) |
+ (0x3 << DSIM_NUM_OF_DATALANE_SHIFT));
+
+ cfg |= (dsim_config->auto_flush << DSIM_AUTO_FLUSH_SHIFT) |
+ (dsim_config->eot_disable << DSIM_EOT_PACKET_SHIFT) |
+ (dsim_config->auto_vertical_cnt << DSIM_AUTO_MODE_SHIFT) |
+ (dsim_config->hse << DSIM_HSE_MODE_SHIFT) |
+ (dsim_config->hfp << DSIM_HFP_MODE_SHIFT) |
+ (dsim_config->hbp << DSIM_HBP_MODE_SHIFT) |
+ (dsim_config->hsa << DSIM_HSA_MODE_SHIFT) |
+ (dsim_config->e_no_data_lane << DSIM_NUM_OF_DATALANE_SHIFT);
+
+ writel(cfg, &mipi_dsim->config);
+}
+
+void exynos_mipi_dsi_display_config(struct mipi_dsim_device *dsim,
+ struct mipi_dsim_config *dsim_config)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ u32 reg = (readl(&mipi_dsim->config)) &
+ ~((0x3 << DSIM_BURST_MODE_SHIFT) | (1 << DSIM_VIDEO_MODE_SHIFT)
+ | (0x3 << DSIM_MAINVC_SHIFT) | (0x7 << DSIM_MAINPIX_SHIFT)
+ | (0x3 << DSIM_SUBVC_SHIFT) | (0x7 << DSIM_SUBPIX_SHIFT));
+
+ if (dsim_config->e_interface == DSIM_VIDEO)
+ reg |= (1 << DSIM_VIDEO_MODE_SHIFT);
+ else if (dsim_config->e_interface == DSIM_COMMAND)
+ reg &= ~(1 << DSIM_VIDEO_MODE_SHIFT);
+ else {
+ printf("unknown lcd type.\n");
+ return;
+ }
+
+ /* main lcd */
+ reg |= ((u8) (dsim_config->e_burst_mode) & 0x3) << DSIM_BURST_MODE_SHIFT
+ | ((u8) (dsim_config->e_virtual_ch) & 0x3) << DSIM_MAINVC_SHIFT
+ | ((u8) (dsim_config->e_pixel_format) & 0x7) << DSIM_MAINPIX_SHIFT;
+
+ writel(reg, &mipi_dsim->config);
+}
+
+void exynos_mipi_dsi_enable_lane(struct mipi_dsim_device *dsim,
+ unsigned int lane, unsigned int enable)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = readl(&mipi_dsim->config);
+
+ if (enable)
+ reg |= DSIM_LANE_ENx(lane);
+ else
+ reg &= ~DSIM_LANE_ENx(lane);
+
+ writel(reg, &mipi_dsim->config);
+}
+
+void exynos_mipi_dsi_set_data_lane_number(struct mipi_dsim_device *dsim,
+ unsigned int count)
+{
+ unsigned int cfg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ /* get the data lane number. */
+ cfg = DSIM_NUM_OF_DATA_LANE(count);
+
+ writel(cfg, &mipi_dsim->config);
+}
+
+void exynos_mipi_dsi_enable_afc(struct mipi_dsim_device *dsim,
+ unsigned int enable, unsigned int afc_code)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->phyacchr);
+
+ reg = 0;
+
+ if (enable) {
+ reg |= DSIM_AFC_EN;
+ reg &= ~(0x7 << DSIM_AFC_CTL_SHIFT);
+ reg |= DSIM_AFC_CTL(afc_code);
+ } else
+ reg &= ~DSIM_AFC_EN;
+
+ writel(reg, &mipi_dsim->phyacchr);
+}
+
+void exynos_mipi_dsi_enable_pll_bypass(struct mipi_dsim_device *dsim,
+ unsigned int enable)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->clkctrl)) &
+ ~(DSIM_PLL_BYPASS_EXTERNAL);
+
+ reg |= enable << DSIM_PLL_BYPASS_SHIFT;
+
+ writel(reg, &mipi_dsim->clkctrl);
+}
+
+void exynos_mipi_dsi_pll_freq_band(struct mipi_dsim_device *dsim,
+ unsigned int freq_band)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->pllctrl)) &
+ ~(0x1f << DSIM_FREQ_BAND_SHIFT);
+
+ reg |= ((freq_band & 0x1f) << DSIM_FREQ_BAND_SHIFT);
+
+ writel(reg, &mipi_dsim->pllctrl);
+}
+
+void exynos_mipi_dsi_pll_freq(struct mipi_dsim_device *dsim,
+ unsigned int pre_divider, unsigned int main_divider,
+ unsigned int scaler)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->pllctrl)) &
+ ~(0x7ffff << 1);
+
+ reg |= ((pre_divider & 0x3f) << DSIM_PREDIV_SHIFT) |
+ ((main_divider & 0x1ff) << DSIM_MAIN_SHIFT) |
+ ((scaler & 0x7) << DSIM_SCALER_SHIFT);
+
+ writel(reg, &mipi_dsim->pllctrl);
+}
+
+void exynos_mipi_dsi_pll_stable_time(struct mipi_dsim_device *dsim,
+ unsigned int lock_time)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ writel(lock_time, &mipi_dsim->plltmr);
+}
+
+void exynos_mipi_dsi_enable_pll(struct mipi_dsim_device *dsim,
+ unsigned int enable)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->pllctrl)) &
+ ~(0x1 << DSIM_PLL_EN_SHIFT);
+
+ reg |= ((enable & 0x1) << DSIM_PLL_EN_SHIFT);
+
+ writel(reg, &mipi_dsim->pllctrl);
+}
+
+void exynos_mipi_dsi_set_byte_clock_src(struct mipi_dsim_device *dsim,
+ unsigned int src)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->clkctrl)) &
+ ~(0x3 << DSIM_BYTE_CLK_SRC_SHIFT);
+
+ reg |= ((unsigned int) src) << DSIM_BYTE_CLK_SRC_SHIFT;
+
+ writel(reg, &mipi_dsim->clkctrl);
+}
+
+void exynos_mipi_dsi_enable_byte_clock(struct mipi_dsim_device *dsim,
+ unsigned int enable)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->clkctrl)) &
+ ~(1 << DSIM_BYTE_CLKEN_SHIFT);
+
+ reg |= enable << DSIM_BYTE_CLKEN_SHIFT;
+
+ writel(reg, &mipi_dsim->clkctrl);
+}
+
+void exynos_mipi_dsi_set_esc_clk_prs(struct mipi_dsim_device *dsim,
+ unsigned int enable, unsigned int prs_val)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->clkctrl)) &
+ ~((1 << DSIM_ESC_CLKEN_SHIFT) | (0xffff));
+
+ reg |= enable << DSIM_ESC_CLKEN_SHIFT;
+ if (enable)
+ reg |= prs_val;
+
+ writel(reg, &mipi_dsim->clkctrl);
+}
+
+void exynos_mipi_dsi_enable_esc_clk_on_lane(struct mipi_dsim_device *dsim,
+ unsigned int lane_sel, unsigned int enable)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->clkctrl);
+
+ if (enable)
+ reg |= DSIM_LANE_ESC_CLKEN(lane_sel);
+ else
+ reg &= ~DSIM_LANE_ESC_CLKEN(lane_sel);
+
+ writel(reg, &mipi_dsim->clkctrl);
+}
+
+void exynos_mipi_dsi_force_dphy_stop_state(struct mipi_dsim_device *dsim,
+ unsigned int enable)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->escmode)) &
+ ~(0x1 << DSIM_FORCE_STOP_STATE_SHIFT);
+
+ reg |= ((enable & 0x1) << DSIM_FORCE_STOP_STATE_SHIFT);
+
+ writel(reg, &mipi_dsim->escmode);
+}
+
+unsigned int exynos_mipi_dsi_is_lane_state(struct mipi_dsim_device *dsim)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->status);
+
+ /**
+ * check clock and data lane states.
+ * if MIPI-DSI controller was enabled at bootloader then
+ * TX_READY_HS_CLK is enabled otherwise STOP_STATE_CLK.
+ * so it should be checked for two case.
+ */
+ if ((reg & DSIM_STOP_STATE_DAT(0xf)) &&
+ ((reg & DSIM_STOP_STATE_CLK) ||
+ (reg & DSIM_TX_READY_HS_CLK)))
+ return 1;
+ else
+ return 0;
+}
+
+void exynos_mipi_dsi_set_stop_state_counter(struct mipi_dsim_device *dsim,
+ unsigned int cnt_val)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->escmode)) &
+ ~(0x7ff << DSIM_STOP_STATE_CNT_SHIFT);
+
+ reg |= ((cnt_val & 0x7ff) << DSIM_STOP_STATE_CNT_SHIFT);
+
+ writel(reg, &mipi_dsim->escmode);
+}
+
+void exynos_mipi_dsi_set_bta_timeout(struct mipi_dsim_device *dsim,
+ unsigned int timeout)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->timeout)) &
+ ~(0xff << DSIM_BTA_TOUT_SHIFT);
+
+ reg |= (timeout << DSIM_BTA_TOUT_SHIFT);
+
+ writel(reg, &mipi_dsim->timeout);
+}
+
+void exynos_mipi_dsi_set_lpdr_timeout(struct mipi_dsim_device *dsim,
+ unsigned int timeout)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->timeout)) &
+ ~(0xffff << DSIM_LPDR_TOUT_SHIFT);
+
+ reg |= (timeout << DSIM_LPDR_TOUT_SHIFT);
+
+ writel(reg, &mipi_dsim->timeout);
+}
+
+void exynos_mipi_dsi_set_cpu_transfer_mode(struct mipi_dsim_device *dsim,
+ unsigned int lp)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->escmode);
+
+ reg &= ~DSIM_CMD_LPDT_LP;
+
+ if (lp)
+ reg |= DSIM_CMD_LPDT_LP;
+
+ writel(reg, &mipi_dsim->escmode);
+}
+
+void exynos_mipi_dsi_set_lcdc_transfer_mode(struct mipi_dsim_device *dsim,
+ unsigned int lp)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->escmode);
+
+ reg &= ~DSIM_TX_LPDT_LP;
+
+ if (lp)
+ reg |= DSIM_TX_LPDT_LP;
+
+ writel(reg, &mipi_dsim->escmode);
+}
+
+void exynos_mipi_dsi_enable_hs_clock(struct mipi_dsim_device *dsim,
+ unsigned int enable)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->clkctrl)) &
+ ~(1 << DSIM_TX_REQUEST_HSCLK_SHIFT);
+
+ reg |= enable << DSIM_TX_REQUEST_HSCLK_SHIFT;
+
+ writel(reg, &mipi_dsim->clkctrl);
+}
+
+void exynos_mipi_dsi_dp_dn_swap(struct mipi_dsim_device *dsim,
+ unsigned int swap_en)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->phyacchr1);
+
+ reg &= ~(0x3 << DSIM_DPDN_SWAP_DATA_SHIFT);
+ reg |= (swap_en & 0x3) << DSIM_DPDN_SWAP_DATA_SHIFT;
+
+ writel(reg, &mipi_dsim->phyacchr1);
+}
+
+void exynos_mipi_dsi_hs_zero_ctrl(struct mipi_dsim_device *dsim,
+ unsigned int hs_zero)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->pllctrl)) &
+ ~(0xf << DSIM_ZEROCTRL_SHIFT);
+
+ reg |= ((hs_zero & 0xf) << DSIM_ZEROCTRL_SHIFT);
+
+ writel(reg, &mipi_dsim->pllctrl);
+}
+
+void exynos_mipi_dsi_prep_ctrl(struct mipi_dsim_device *dsim, unsigned int prep)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (readl(&mipi_dsim->pllctrl)) &
+ ~(0x7 << DSIM_PRECTRL_SHIFT);
+
+ reg |= ((prep & 0x7) << DSIM_PRECTRL_SHIFT);
+
+ writel(reg, &mipi_dsim->pllctrl);
+}
+
+void exynos_mipi_dsi_clear_interrupt(struct mipi_dsim_device *dsim)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->intsrc);
+
+ reg |= INTSRC_PLL_STABLE;
+
+ writel(reg, &mipi_dsim->intsrc);
+}
+
+void exynos_mipi_dsi_clear_all_interrupt(struct mipi_dsim_device *dsim)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ writel(0xffffffff, &mipi_dsim->intsrc);
+}
+
+unsigned int exynos_mipi_dsi_is_pll_stable(struct mipi_dsim_device *dsim)
+{
+ unsigned int reg;
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ reg = readl(&mipi_dsim->status);
+
+ return reg & DSIM_PLL_STABLE ? 1 : 0;
+}
+
+unsigned int exynos_mipi_dsi_get_fifo_state(struct mipi_dsim_device *dsim)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ return readl(&mipi_dsim->fifoctrl) & ~(0x1f);
+}
+
+void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim,
+ unsigned int di, unsigned int data0, unsigned int data1)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = (DSIM_PKTHDR_DAT1(data1) | DSIM_PKTHDR_DAT0(data0) |
+ DSIM_PKTHDR_DI(di));
+
+ writel(reg, &mipi_dsim->pkthdr);
+}
+
+unsigned int _exynos_mipi_dsi_get_frame_done_status(struct mipi_dsim_device
+ *dsim)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->intsrc);
+
+ return (reg & INTSRC_FRAME_DONE) ? 1 : 0;
+}
+
+void _exynos_mipi_dsi_clear_frame_done(struct mipi_dsim_device *dsim)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+ unsigned int reg = readl(&mipi_dsim->intsrc);
+
+ writel(reg | INTSRC_FRAME_DONE, &mipi_dsim->intsrc);
+}
+
+void exynos_mipi_dsi_wr_tx_data(struct mipi_dsim_device *dsim,
+ unsigned int tx_data)
+{
+ struct exynos_mipi_dsim *mipi_dsim =
+ (struct exynos_mipi_dsim *)samsung_get_base_mipi_dsim();
+
+ writel(tx_data, &mipi_dsim->payload);
+}
diff --git a/drivers/video/exynos_mipi_dsi_lowlevel.h b/drivers/video/exynos_mipi_dsi_lowlevel.h
new file mode 100644
index 0000000000..4b8c441cb5
--- /dev/null
+++ b/drivers/video/exynos_mipi_dsi_lowlevel.h
@@ -0,0 +1,111 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: InKi Dae <inki.dae@samsung.com>
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _EXYNOS_MIPI_DSI_LOWLEVEL_H
+#define _EXYNOS_MIPI_DSI_LOWLEVEL_H
+
+void exynos_mipi_dsi_register(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_func_reset(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_sw_reset(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_sw_release(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_set_interrupt_mask(struct mipi_dsim_device *dsim,
+ unsigned int mode, unsigned int mask);
+void exynos_mipi_dsi_set_data_lane_number(struct mipi_dsim_device *dsim,
+ unsigned int count);
+void exynos_mipi_dsi_init_fifo_pointer(struct mipi_dsim_device *dsim,
+ unsigned int cfg);
+void exynos_mipi_dsi_set_phy_tunning(struct mipi_dsim_device *dsim,
+ unsigned int value);
+void exynos_mipi_dsi_set_phy_tunning(struct mipi_dsim_device *dsim,
+ unsigned int value);
+void exynos_mipi_dsi_set_main_disp_resol(struct mipi_dsim_device *dsim,
+ unsigned int width_resol, unsigned int height_resol);
+void exynos_mipi_dsi_set_main_disp_vporch(struct mipi_dsim_device *dsim,
+ unsigned int cmd_allow, unsigned int vfront, unsigned int vback);
+void exynos_mipi_dsi_set_main_disp_hporch(struct mipi_dsim_device *dsim,
+ unsigned int front, unsigned int back);
+void exynos_mipi_dsi_set_main_disp_sync_area(struct mipi_dsim_device *dsim,
+ unsigned int vert, unsigned int hori);
+void exynos_mipi_dsi_set_sub_disp_resol(struct mipi_dsim_device *dsim,
+ unsigned int vert, unsigned int hori);
+void exynos_mipi_dsi_init_config(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_display_config(struct mipi_dsim_device *dsim,
+ struct mipi_dsim_config *dsim_config);
+void exynos_mipi_dsi_set_data_lane_number(struct mipi_dsim_device *dsim,
+ unsigned int count);
+void exynos_mipi_dsi_enable_lane(struct mipi_dsim_device *dsim,
+ unsigned int lane, unsigned int enable);
+void exynos_mipi_dsi_enable_afc(struct mipi_dsim_device *dsim,
+ unsigned int enable, unsigned int afc_code);
+void exynos_mipi_dsi_enable_pll_bypass(struct mipi_dsim_device *dsim,
+ unsigned int enable);
+void exynos_mipi_dsi_pll_freq_band(struct mipi_dsim_device *dsim,
+ unsigned int freq_band);
+void exynos_mipi_dsi_pll_freq(struct mipi_dsim_device *dsim,
+ unsigned int pre_divider, unsigned int main_divider,
+ unsigned int scaler);
+void exynos_mipi_dsi_pll_stable_time(struct mipi_dsim_device *dsim,
+ unsigned int lock_time);
+void exynos_mipi_dsi_enable_pll(struct mipi_dsim_device *dsim,
+ unsigned int enable);
+void exynos_mipi_dsi_set_byte_clock_src(struct mipi_dsim_device *dsim,
+ unsigned int src);
+void exynos_mipi_dsi_enable_byte_clock(struct mipi_dsim_device *dsim,
+ unsigned int enable);
+void exynos_mipi_dsi_set_esc_clk_prs(struct mipi_dsim_device *dsim,
+ unsigned int enable, unsigned int prs_val);
+void exynos_mipi_dsi_enable_esc_clk_on_lane(struct mipi_dsim_device *dsim,
+ unsigned int lane_sel, unsigned int enable);
+void exynos_mipi_dsi_force_dphy_stop_state(struct mipi_dsim_device *dsim,
+ unsigned int enable);
+unsigned int exynos_mipi_dsi_is_lane_state(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_set_stop_state_counter(struct mipi_dsim_device *dsim,
+ unsigned int cnt_val);
+void exynos_mipi_dsi_set_bta_timeout(struct mipi_dsim_device *dsim,
+ unsigned int timeout);
+void exynos_mipi_dsi_set_lpdr_timeout(struct mipi_dsim_device *dsim,
+ unsigned int timeout);
+void exynos_mipi_dsi_set_lcdc_transfer_mode(struct mipi_dsim_device *dsim,
+ unsigned int lp);
+void exynos_mipi_dsi_set_cpu_transfer_mode(struct mipi_dsim_device *dsim,
+ unsigned int lp);
+void exynos_mipi_dsi_enable_hs_clock(struct mipi_dsim_device *dsim,
+ unsigned int enable);
+void exynos_mipi_dsi_dp_dn_swap(struct mipi_dsim_device *dsim,
+ unsigned int swap_en);
+void exynos_mipi_dsi_hs_zero_ctrl(struct mipi_dsim_device *dsim,
+ unsigned int hs_zero);
+void exynos_mipi_dsi_prep_ctrl(struct mipi_dsim_device *dsim,
+ unsigned int prep);
+void exynos_mipi_dsi_clear_interrupt(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_clear_all_interrupt(struct mipi_dsim_device *dsim);
+unsigned int exynos_mipi_dsi_is_pll_stable(struct mipi_dsim_device *dsim);
+unsigned int exynos_mipi_dsi_get_fifo_state(struct mipi_dsim_device *dsim);
+unsigned int _exynos_mipi_dsi_get_frame_done_status(struct mipi_dsim_device
+ *dsim);
+void _exynos_mipi_dsi_clear_frame_done(struct mipi_dsim_device *dsim);
+void exynos_mipi_dsi_wr_tx_header(struct mipi_dsim_device *dsim,
+ unsigned int di, unsigned int data0, unsigned int data1);
+void exynos_mipi_dsi_wr_tx_data(struct mipi_dsim_device *dsim,
+ unsigned int tx_data);
+
+#endif /* _EXYNOS_MIPI_DSI_LOWLEVEL_H */
diff --git a/drivers/video/s6e8ax0.c b/drivers/video/s6e8ax0.c
new file mode 100644
index 0000000000..1ec7fd6e5a
--- /dev/null
+++ b/drivers/video/s6e8ax0.c
@@ -0,0 +1,256 @@
+/*
+ * Copyright (C) 2012 Samsung Electronics
+ *
+ * Author: Donghwa Lee <dh09.lee@samsung.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <asm/arch/mipi_dsim.h>
+
+#include "exynos_mipi_dsi_lowlevel.h"
+#include "exynos_mipi_dsi_common.h"
+
+static void s6e8ax0_panel_cond(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xf8, 0x3d, 0x35, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x4c,
+ 0x6e, 0x10, 0x27, 0x7d, 0x3f, 0x10, 0x00, 0x00, 0x20,
+ 0x04, 0x08, 0x6e, 0x00, 0x00, 0x00, 0x02, 0x08, 0x08,
+ 0x23, 0x23, 0xc0, 0xc8, 0x08, 0x48, 0xc1, 0x00, 0xc3,
+ 0xff, 0xff, 0xc8
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_display_cond(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xf2, 0x80, 0x03, 0x0d
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send,
+ ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_gamma_cond(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ /* 7500K 2.2 Set (M3, 300cd) */
+ const unsigned char data_to_send[] = {
+ 0xfa, 0x01, 0x0f, 0x00, 0x0f, 0xda, 0xc0, 0xe4, 0xc8,
+ 0xc8, 0xc6, 0xd3, 0xd6, 0xd0, 0xab, 0xb2, 0xa6, 0xbf,
+ 0xc2, 0xb9, 0x00, 0x93, 0x00, 0x86, 0x00, 0xd1
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send,
+ ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_gamma_update(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xf7, 0x3);
+}
+
+static void s6e8ax0_etc_source_control(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xf6, 0x00, 0x02, 0x00
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send,
+ ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_etc_pentile_control(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xb6, 0x0c, 0x02, 0x03, 0x32, 0xff, 0x44, 0x44, 0xc0,
+ 0x00
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send,
+ ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_etc_mipi_control1(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xe1, 0x10, 0x1c, 0x17, 0x08, 0x1d
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send,
+ ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_etc_mipi_control2(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xe2, 0xed, 0x07, 0xc3, 0x13, 0x0d, 0x03
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send,
+ ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_etc_power_control(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xf4, 0xcf, 0x0a, 0x12, 0x10, 0x19, 0x33, 0x02
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_etc_mipi_control3(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_SHORT_WRITE_PARAM, 0xe3, 0x40);
+}
+
+static void s6e8ax0_etc_mipi_control4(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xe4, 0x00, 0x00, 0x14, 0x80, 0x00, 0x00, 0x00
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_elvss_set(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xb1, 0x04, 0x00
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send,
+ ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_display_on(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+
+ ops->cmd_write(dsim_dev,
+ MIPI_DSI_DCS_SHORT_WRITE, 0x29, 0x00);
+}
+
+static void s6e8ax0_sleep_out(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+
+ ops->cmd_write(dsim_dev,
+ MIPI_DSI_DCS_SHORT_WRITE, 0x11, 0x00);
+}
+
+static void s6e8ax0_apply_level1_key(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xf0, 0x5a, 0x5a
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_apply_mtp_key(struct mipi_dsim_device *dsim_dev)
+{
+ struct mipi_dsim_master_ops *ops = dsim_dev->master_ops;
+ const unsigned char data_to_send[] = {
+ 0xf1, 0x5a, 0x5a
+ };
+
+ ops->cmd_write(dsim_dev, MIPI_DSI_DCS_LONG_WRITE,
+ (unsigned int)data_to_send, ARRAY_SIZE(data_to_send));
+}
+
+static void s6e8ax0_panel_init(struct mipi_dsim_device *dsim_dev)
+{
+ /*
+ * in case of setting gamma and panel condition at first,
+ * it shuold be setting like below.
+ * set_gamma() -> set_panel_condition()
+ */
+
+ s6e8ax0_apply_level1_key(dsim_dev);
+ s6e8ax0_apply_mtp_key(dsim_dev);
+
+ s6e8ax0_sleep_out(dsim_dev);
+ mdelay(5);
+ s6e8ax0_panel_cond(dsim_dev);
+ s6e8ax0_display_cond(dsim_dev);
+ s6e8ax0_gamma_cond(dsim_dev);
+ s6e8ax0_gamma_update(dsim_dev);
+
+ s6e8ax0_etc_source_control(dsim_dev);
+ s6e8ax0_elvss_set(dsim_dev);
+ s6e8ax0_etc_pentile_control(dsim_dev);
+ s6e8ax0_etc_mipi_control1(dsim_dev);
+ s6e8ax0_etc_mipi_control2(dsim_dev);
+ s6e8ax0_etc_power_control(dsim_dev);
+ s6e8ax0_etc_mipi_control3(dsim_dev);
+ s6e8ax0_etc_mipi_control4(dsim_dev);
+}
+
+static int s6e8ax0_panel_set(struct mipi_dsim_device *dsim_dev)
+{
+ s6e8ax0_panel_init(dsim_dev);
+
+ return 0;
+}
+
+static void s6e8ax0_display_enable(struct mipi_dsim_device *dsim_dev)
+{
+ s6e8ax0_display_on(dsim_dev);
+}
+
+static struct mipi_dsim_lcd_driver s6e8ax0_dsim_ddi_driver = {
+ .name = "s6e8ax0",
+ .id = -1,
+
+ .mipi_panel_init = s6e8ax0_panel_set,
+ .mipi_display_on = s6e8ax0_display_enable,
+};
+
+void s6e8ax0_init(void)
+{
+ exynos_mipi_dsi_register_lcd_driver(&s6e8ax0_dsim_ddi_driver);
+}
diff --git a/examples/api/.gitignore b/examples/api/.gitignore
deleted file mode 100644
index d7b18dcef5..0000000000
--- a/examples/api/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-demo
-demo.bin
diff --git a/examples/standalone/.gitignore b/examples/standalone/.gitignore
deleted file mode 100644
index 4d9ce66402..0000000000
--- a/examples/standalone/.gitignore
+++ /dev/null
@@ -1,13 +0,0 @@
-/82559_eeprom
-/atmel_df_pow2
-/eepro100_eeprom
-/hello_world
-/interrupt
-/mem_to_mem_idma2intr
-/sched
-/smc91111_eeprom
-/smc911x_eeprom
-/test_burst
-/timer
-*.bin
-*.srec
diff --git a/fs/cramfs/uncompress.c b/fs/cramfs/uncompress.c
index 228fe68c11..f431cc46c1 100644
--- a/fs/cramfs/uncompress.c
+++ b/fs/cramfs/uncompress.c
@@ -27,9 +27,6 @@
static z_stream stream;
-void *zalloc(void *, unsigned, unsigned);
-void zfree(void *, void *, unsigned);
-
/* Returns length of decompressed data. */
int cramfs_uncompress_block (void *dst, void *src, int srclen)
{
@@ -59,8 +56,8 @@ int cramfs_uncompress_init (void)
{
int err;
- stream.zalloc = zalloc;
- stream.zfree = zfree;
+ stream.zalloc = gzalloc;
+ stream.zfree = gzfree;
stream.next_in = 0;
stream.avail_in = 0;
diff --git a/fs/fat/fat.c b/fs/fat/fat.c
index 1f95eb4caf..a3085b51d9 100644
--- a/fs/fat/fat.c
+++ b/fs/fat/fat.c
@@ -31,6 +31,8 @@
#include <fat.h>
#include <asm/byteorder.h>
#include <part.h>
+#include <malloc.h>
+#include <linux/compiler.h>
/*
* Convert a string to lowercase.
@@ -62,7 +64,7 @@ static int disk_read(__u32 block, __u32 nr_blocks, void *buf)
int fat_register_device (block_dev_desc_t * dev_desc, int part_no)
{
- unsigned char buffer[dev_desc->blksz];
+ ALLOC_CACHE_ALIGN_BUFFER(unsigned char, buffer, dev_desc->blksz);
/* First close any currently found FAT filesystem */
cur_dev = NULL;
@@ -293,7 +295,7 @@ get_cluster (fsdata *mydata, __u32 clustnum, __u8 *buffer,
return -1;
}
if (size % mydata->sect_size) {
- __u8 tmpbuf[mydata->sect_size];
+ ALLOC_CACHE_ALIGN_BUFFER(__u8, tmpbuf, mydata->sect_size);
idx = size / mydata->sect_size;
ret = disk_read(startsect + idx, 1, tmpbuf);
@@ -428,8 +430,8 @@ static int slot2str (dir_slot *slotptr, char *l_name, int *idx)
* into 'retdent'
* Return 0 on success, -1 otherwise.
*/
-__attribute__ ((__aligned__ (__alignof__ (dir_entry))))
-__u8 get_vfatname_block[MAX_CLUSTSIZE];
+__u8 get_vfatname_block[MAX_CLUSTSIZE]
+ __aligned(ARCH_DMA_MINALIGN);
static int
get_vfatname (fsdata *mydata, int curclust, __u8 *cluster,
@@ -533,8 +535,8 @@ static __u8 mkcksum (const char *str)
* Get the directory entry associated with 'filename' from the directory
* starting at 'startsect'
*/
-__attribute__ ((__aligned__ (__alignof__ (dir_entry))))
-__u8 get_dentfromdir_block[MAX_CLUSTSIZE];
+__u8 get_dentfromdir_block[MAX_CLUSTSIZE]
+ __aligned(ARCH_DMA_MINALIGN);
static dir_entry *get_dentfromdir (fsdata *mydata, int startsect,
char *filename, dir_entry *retdent,
@@ -709,7 +711,7 @@ read_bootsectandvi (boot_sector *bs, volume_info *volinfo, int *fatsize)
return -1;
}
- block = malloc(cur_dev->blksz);
+ block = memalign(ARCH_DMA_MINALIGN, cur_dev->blksz);
if (block == NULL) {
debug("Error: allocating block\n");
return -1;
@@ -765,8 +767,8 @@ exit:
return ret;
}
-__attribute__ ((__aligned__ (__alignof__ (dir_entry))))
-__u8 do_fat_read_block[MAX_CLUSTSIZE];
+__u8 do_fat_read_block[MAX_CLUSTSIZE]
+ __aligned(ARCH_DMA_MINALIGN);
long
do_fat_read (const char *filename, void *buffer, unsigned long maxsize,
@@ -828,7 +830,7 @@ do_fat_read (const char *filename, void *buffer, unsigned long maxsize,
}
mydata->fatbufnum = -1;
- mydata->fatbuf = malloc(FATBUFSIZE);
+ mydata->fatbuf = memalign(ARCH_DMA_MINALIGN, FATBUFSIZE);
if (mydata->fatbuf == NULL) {
debug("Error: allocating memory\n");
return -1;
diff --git a/fs/jffs2/jffs2_1pass.c b/fs/jffs2/jffs2_1pass.c
index a0b02e4dda..c856983ef4 100644
--- a/fs/jffs2/jffs2_1pass.c
+++ b/fs/jffs2/jffs2_1pass.c
@@ -119,7 +119,7 @@
#include <watchdog.h>
#include <jffs2/jffs2.h>
#include <jffs2/jffs2_1pass.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <asm/errno.h>
#include "jffs2_private.h"
diff --git a/fs/ubifs/io.c b/fs/ubifs/io.c
index aae5c65eae..1c3d275976 100644
--- a/fs/ubifs/io.c
+++ b/fs/ubifs/io.c
@@ -251,7 +251,10 @@ void ubifs_prepare_node(struct ubifs_info *c, void *node, int len, int pad)
if (pad) {
len = ALIGN(len, 8);
- pad = ALIGN(len, c->min_io_size) - len;
+ if (is_power_of_2(c->min_io_size))
+ pad = ALIGN(len, c->min_io_size) - len;
+ else
+ pad = roundup(len, c->min_io_size) - len;
ubifs_pad(c, node + len, pad);
}
}
diff --git a/fs/ubifs/lpt.c b/fs/ubifs/lpt.c
index 1a50d4cc27..542f4e0560 100644
--- a/fs/ubifs/lpt.c
+++ b/fs/ubifs/lpt.c
@@ -123,7 +123,10 @@ static void do_calc_lpt_geom(struct ubifs_info *c)
sz -= c->leb_size;
tot_wastage += per_leb_wastage;
}
- tot_wastage += ALIGN(sz, c->min_io_size) - sz;
+ if (is_power_of_2(c->min_io_size))
+ tot_wastage += ALIGN(sz, c->min_io_size) - sz;
+ else
+ tot_wastage += roundup(sz, c->min_io_size) - sz;
c->lpt_sz += tot_wastage;
}
diff --git a/fs/ubifs/master.c b/fs/ubifs/master.c
index 3f2926e870..e5f3bf1228 100644
--- a/fs/ubifs/master.c
+++ b/fs/ubifs/master.c
@@ -108,12 +108,22 @@ static int validate_master(const struct ubifs_info *c)
goto out;
}
- if (c->lhead_lnum < UBIFS_LOG_LNUM ||
- c->lhead_lnum >= UBIFS_LOG_LNUM + c->log_lebs ||
- c->lhead_offs < 0 || c->lhead_offs >= c->leb_size ||
- c->lhead_offs & (c->min_io_size - 1)) {
- err = 4;
- goto out;
+ if (c->min_io_shift == 0) {
+ if (c->lhead_lnum < UBIFS_LOG_LNUM ||
+ c->lhead_lnum >= UBIFS_LOG_LNUM + c->log_lebs ||
+ c->lhead_offs < 0 || c->lhead_offs >= c->leb_size ||
+ c->lhead_offs % c->min_io_size) {
+ err = 4;
+ goto out;
+ }
+ } else {
+ if (c->lhead_lnum < UBIFS_LOG_LNUM ||
+ c->lhead_lnum >= UBIFS_LOG_LNUM + c->log_lebs ||
+ c->lhead_offs < 0 || c->lhead_offs >= c->leb_size ||
+ c->lhead_offs & (c->min_io_size - 1)) {
+ err = 4;
+ goto out;
+ }
}
if (c->zroot.lnum >= c->leb_cnt || c->zroot.lnum < c->main_first ||
diff --git a/fs/ubifs/recovery.c b/fs/ubifs/recovery.c
index 744465005c..83d8746f30 100644
--- a/fs/ubifs/recovery.c
+++ b/fs/ubifs/recovery.c
@@ -365,7 +365,11 @@ static int is_last_write(const struct ubifs_info *c, void *buf, int offs)
* Round up to the next c->min_io_size boundary i.e. 'offs' is in the
* last wbuf written. After that should be empty space.
*/
- empty_offs = ALIGN(offs + 1, c->min_io_size);
+ if (c->min_io_shift == 0)
+ empty_offs = roundup(offs + 1, c->min_io_size);
+ else
+ empty_offs = ALIGN(offs + 1, c->min_io_size);
+
check_len = c->leb_size - empty_offs;
p = buf + empty_offs - offs;
@@ -401,7 +405,10 @@ static void clean_buf(const struct ubifs_info *c, void **buf, int lnum,
}
ubifs_assert(!(*offs & 7));
- empty_offs = ALIGN(*offs, c->min_io_size);
+ if (c->min_io_shift == 0)
+ empty_offs = roundup(*offs, c->min_io_size);
+ else
+ empty_offs = ALIGN(*offs, c->min_io_size);
pad_len = empty_offs - *offs;
ubifs_pad(c, *buf, pad_len);
*offs += pad_len;
@@ -429,7 +436,10 @@ static int no_more_nodes(const struct ubifs_info *c, void *buf, int len,
int skip, dlen = le32_to_cpu(ch->len);
/* Check for empty space after the corrupt node's common header */
- skip = ALIGN(offs + UBIFS_CH_SZ, c->min_io_size) - offs;
+ if (c->min_io_shift == 0)
+ skip = roundup(offs + UBIFS_CH_SZ, c->min_io_size) - offs;
+ else
+ skip = ALIGN(offs + UBIFS_CH_SZ, c->min_io_size) - offs;
if (is_empty(buf + skip, len - skip))
return 1;
/*
@@ -441,7 +451,10 @@ static int no_more_nodes(const struct ubifs_info *c, void *buf, int len,
return 0;
}
/* Now we know the corrupt node's length we can skip over it */
- skip = ALIGN(offs + dlen, c->min_io_size) - offs;
+ if (c->min_io_shift == 0)
+ skip = roundup(offs + dlen, c->min_io_size) - offs;
+ else
+ skip = ALIGN(offs + dlen, c->min_io_size) - offs;
/* After which there should be empty space */
if (is_empty(buf + skip, len - skip))
return 1;
@@ -648,9 +661,17 @@ struct ubifs_scan_leb *ubifs_recover_leb(struct ubifs_info *c, int lnum,
need_clean = 1;
}
- if (offs % c->min_io_size) {
- clean_buf(c, &buf, lnum, &offs, &len);
- need_clean = 1;
+ if (c->min_io_shift == 0)
+ {
+ if (offs % c->min_io_size) {
+ clean_buf(c, &buf, lnum, &offs, &len);
+ need_clean = 1;
+ }
+ } else {
+ if (offs & (c->min_io_size - 1)) {
+ clean_buf(c, &buf, lnum, &offs, &len);
+ need_clean = 1;
+ }
}
ubifs_end_scan(c, sleb, lnum, offs);
@@ -947,7 +968,10 @@ static int clean_an_unclean_leb(const struct ubifs_info *c,
}
/* Pad to min_io_size */
- len = ALIGN(ucleb->endpt, c->min_io_size);
+ if (c->min_io_shift == 0)
+ len = roundup(ucleb->endpt, c->min_io_size);
+ else
+ len = ALIGN(ucleb->endpt, c->min_io_size);
if (len > ucleb->endpt) {
int pad_len = len - ALIGN(ucleb->endpt, 8);
diff --git a/fs/ubifs/replay.c b/fs/ubifs/replay.c
index da33a14ab6..1a351f606c 100644
--- a/fs/ubifs/replay.c
+++ b/fs/ubifs/replay.c
@@ -625,7 +625,10 @@ static int replay_bud(struct ubifs_info *c, int lnum, int offs, int jhead,
BUG();
ubifs_assert(sleb->endpt - offs >= used);
- ubifs_assert(sleb->endpt % c->min_io_size == 0);
+ if (c->min_io_shift == 0)
+ ubifs_assert(sleb->endpt % c->min_io_size == 0);
+ else
+ ubifs_assert((sleb->endpt & (c->min_io_size - 1)) == 0);
*dirty = sleb->endpt - offs - used;
*free = c->leb_size - sleb->endpt;
@@ -795,10 +798,17 @@ static int validate_ref(struct ubifs_info *c, const struct ubifs_ref_node *ref)
* to the end of LEB and we write reference node for it during commit.
* So this is why we require 'offs > c->leb_size'.
*/
- if (jhead >= c->jhead_cnt || lnum >= c->leb_cnt ||
- lnum < c->main_first || offs > c->leb_size ||
- offs & (c->min_io_size - 1))
- return -EINVAL;
+ if (c->min_io_shift == 0) {
+ if (jhead >= c->jhead_cnt || lnum >= c->leb_cnt ||
+ lnum < c->main_first || offs > c->leb_size ||
+ offs % c->min_io_size)
+ return -EINVAL;
+ } else {
+ if (jhead >= c->jhead_cnt || lnum >= c->leb_cnt ||
+ lnum < c->main_first || offs > c->leb_size ||
+ offs & (c->min_io_size - 1))
+ return -EINVAL;
+ }
/* Make sure we have not already looked at this bud */
bud = ubifs_search_bud(c, lnum);
diff --git a/fs/ubifs/sb.c b/fs/ubifs/sb.c
index 00c9cd31a0..ed61330c64 100644
--- a/fs/ubifs/sb.c
+++ b/fs/ubifs/sb.c
@@ -199,7 +199,10 @@ struct ubifs_sb_node *ubifs_read_sb_node(struct ubifs_info *c)
struct ubifs_sb_node *sup;
int err;
- sup = kmalloc(ALIGN(UBIFS_SB_NODE_SZ, c->min_io_size), GFP_NOFS);
+ if (c->min_io_shift == 0)
+ sup = kmalloc(roundup(UBIFS_SB_NODE_SZ, c->min_io_size), GFP_NOFS);
+ else
+ sup = kmalloc(ALIGN(UBIFS_SB_NODE_SZ, c->min_io_size), GFP_NOFS);
if (!sup)
return ERR_PTR(-ENOMEM);
diff --git a/fs/ubifs/scan.c b/fs/ubifs/scan.c
index 0ed82479b4..373ae2f9c4 100644
--- a/fs/ubifs/scan.c
+++ b/fs/ubifs/scan.c
@@ -177,9 +177,14 @@ void ubifs_end_scan(const struct ubifs_info *c, struct ubifs_scan_leb *sleb,
{
lnum = lnum;
dbg_scan("stop scanning LEB %d at offset %d", lnum, offs);
- ubifs_assert(offs % c->min_io_size == 0);
- sleb->endpt = ALIGN(offs, c->min_io_size);
+ if (c->min_io_shift == 0) {
+ ubifs_assert((offs % c->min_io_size) == 0);
+ sleb->endpt = roundup(offs, c->min_io_size);
+ } else {
+ ubifs_assert((offs & (c->min_io_size - 1)) == 0);
+ sleb->endpt = ALIGN(offs, c->min_io_size);
+ }
}
/**
@@ -317,8 +322,13 @@ struct ubifs_scan_leb *ubifs_scan(const struct ubifs_info *c, int lnum,
len -= node_len;
}
- if (offs % c->min_io_size)
- goto corrupted;
+ if (c->min_io_shift == 0) {
+ if (offs % c->min_io_size)
+ goto corrupted;
+ } else {
+ if (offs & (c->min_io_size - 1))
+ goto corrupted;
+ }
ubifs_end_scan(c, sleb, lnum, offs);
diff --git a/fs/ubifs/super.c b/fs/ubifs/super.c
index 26b48f029e..35e9bed4e1 100644
--- a/fs/ubifs/super.c
+++ b/fs/ubifs/super.c
@@ -314,7 +314,12 @@ static int init_constants_early(struct ubifs_info *c)
c->leb_size = c->vi.usable_leb_size;
c->half_leb_size = c->leb_size / 2;
c->min_io_size = c->di.min_io_size;
- c->min_io_shift = fls(c->min_io_size) - 1;
+ if (is_power_of_2(c->min_io_size))
+ c->min_io_shift = fls(c->min_io_size) - 1;
+ else
+ c->min_io_shift = 0;
+
+ ubifs_msg("UBI min_io_shift = %d \n", c->min_io_shift);
if (c->leb_size < UBIFS_MIN_LEB_SZ) {
ubifs_err("too small LEBs (%d bytes), min. is %d bytes",
@@ -328,11 +333,6 @@ static int init_constants_early(struct ubifs_info *c)
return -EINVAL;
}
- if (!is_power_of_2(c->min_io_size)) {
- ubifs_err("bad min. I/O size %d", c->min_io_size);
- return -EINVAL;
- }
-
/*
* UBIFS aligns all node to 8-byte boundary, so to make function in
* io.c simpler, assume minimum I/O unit size to be 8 bytes if it is
@@ -343,8 +343,13 @@ static int init_constants_early(struct ubifs_info *c)
c->min_io_shift = 3;
}
- c->ref_node_alsz = ALIGN(UBIFS_REF_NODE_SZ, c->min_io_size);
- c->mst_node_alsz = ALIGN(UBIFS_MST_NODE_SZ, c->min_io_size);
+ if (c->min_io_shift == 0) {
+ c->ref_node_alsz = roundup(UBIFS_REF_NODE_SZ, c->min_io_size);
+ c->mst_node_alsz = roundup(UBIFS_MST_NODE_SZ, c->min_io_size);
+ } else {
+ c->ref_node_alsz = ALIGN(UBIFS_REF_NODE_SZ, c->min_io_size);
+ c->mst_node_alsz = ALIGN(UBIFS_MST_NODE_SZ, c->min_io_size);
+ }
/*
* Initialize node length ranges which are mostly needed for node
@@ -383,8 +388,13 @@ static int init_constants_early(struct ubifs_info *c)
* Initialize dead and dark LEB space watermarks. See gc.c for comments
* about these values.
*/
- c->dead_wm = ALIGN(MIN_WRITE_SZ, c->min_io_size);
- c->dark_wm = ALIGN(UBIFS_MAX_NODE_SZ, c->min_io_size);
+ if (c->min_io_shift == 0) {
+ c->dead_wm = roundup(MIN_WRITE_SZ, c->min_io_size);
+ c->dark_wm = roundup(UBIFS_MAX_NODE_SZ, c->min_io_size);
+ } else {
+ c->dead_wm = ALIGN(MIN_WRITE_SZ, c->min_io_size);
+ c->dark_wm = ALIGN(UBIFS_MAX_NODE_SZ, c->min_io_size);
+ }
/*
* Calculate how many bytes would be wasted at the end of LEB if it was
@@ -424,7 +434,10 @@ static int init_constants_sb(struct ubifs_info *c)
/* Make sure LEB size is large enough to fit full commit */
tmp = UBIFS_CS_NODE_SZ + UBIFS_REF_NODE_SZ * c->jhead_cnt;
- tmp = ALIGN(tmp, c->min_io_size);
+ if (c->min_io_shift == 0)
+ tmp = roundup(tmp, c->min_io_size);
+ else
+ tmp = ALIGN(tmp, c->min_io_size);
if (tmp > c->leb_size) {
dbg_err("too small LEB size %d, at least %d needed",
c->leb_size, tmp);
@@ -655,8 +668,13 @@ static int mount_ubifs(struct ubifs_info *c)
if (err)
goto out_free;
- sz = ALIGN(c->max_idx_node_sz, c->min_io_size);
- sz = ALIGN(sz + c->max_idx_node_sz, c->min_io_size);
+ if (c->min_io_shift == 0) {
+ sz = roundup(c->max_idx_node_sz, c->min_io_size);
+ sz = roundup(sz + c->max_idx_node_sz, c->min_io_size);
+ } else {
+ sz = ALIGN(c->max_idx_node_sz, c->min_io_size);
+ sz = ALIGN(sz + c->max_idx_node_sz, c->min_io_size);
+ }
c->cbuf = kmalloc(sz, GFP_NOFS);
if (!c->cbuf) {
err = -ENOMEM;
diff --git a/fs/yaffs2/Makefile b/fs/yaffs2/Makefile
index 904d6466ea..9b29d225a5 100644
--- a/fs/yaffs2/Makefile
+++ b/fs/yaffs2/Makefile
@@ -16,28 +16,43 @@
#
# $Id: Makefile,v 1.15 2007/07/18 19:40:38 charles Exp $
-#EXTRA_COMPILE_FLAGS = -DYAFFS_IGNORE_TAGS_ECC
include $(TOPDIR)/config.mk
LIB = $(obj)libyaffs2.o
COBJS-$(CONFIG_YAFFS2) := \
- yaffscfg.o yaffs_ecc.o yaffsfs.o yaffs_guts.o yaffs_packedtags1.o \
- yaffs_tagscompat.o yaffs_packedtags2.o yaffs_tagsvalidity.o \
- yaffs_nand.o yaffs_checkptrw.o yaffs_qsort.o yaffs_mtdif.o \
- yaffs_mtdif2.o
+ yaffs_allocator.o yaffs_attribs.o yaffs_bitmap.o yaffs_uboot_glue.o\
+ yaffs_checkptrw.o yaffs_ecc.o yaffs_error.o \
+ yaffsfs.o yaffs_guts.o yaffs_nameval.o yaffs_nand.o\
+ yaffs_packedtags1.o yaffs_packedtags2.o yaffs_qsort.o \
+ yaffs_summary.o yaffs_tagscompat.o yaffs_verify.o yaffs_yaffs1.o \
+ yaffs_yaffs2.o yaffs_mtdif.o yaffs_mtdif2.o
SRCS := $(COBJS-y:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS-y))
-# -DCONFIG_YAFFS_NO_YAFFS1
-CFLAGS += -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM -DCONFIG_YAFFS_YAFFS2 -DLINUX_VERSION_CODE=0x20622
+YCFLAGS = -DCONFIG_YAFFS_DIRECT -DCONFIG_YAFFS_SHORT_NAMES_IN_RAM
+YCFLAGS += -DCONFIG_YAFFS_YAFFS2 -DNO_Y_INLINE
+YCFLAGS += -DCONFIG_YAFFS_PROVIDE_DEFS -DCONFIG_YAFFSFS_PROVIDE_VALUES
+
+CFLAGS += $(YCFLAGS)
+CPPFLAGS += $(YCFLAGS)
all: $(LIB)
-$(LIB): $(obj).depend $(OBJS)
+$(obj)libyaffs2.a: $(obj).depend $(OBJS)
+ $(AR) $(ARFLAGS) $@ $(OBJS)
+
+$(obj)libyaffs2.o: $(obj).depend $(OBJS)
$(call cmd_link_o_target, $(OBJS))
+.PHONY: clean distclean
+clean:
+ rm -f $(OBJS)
+
+distclean: clean
+ rm -f $(LIB) core *.bak .depend
+
#########################################################################
# defines $(obj).depend target
diff --git a/fs/yaffs2/README-linux b/fs/yaffs2/README-linux
deleted file mode 100644
index 3851e360d8..0000000000
--- a/fs/yaffs2/README-linux
+++ /dev/null
@@ -1,201 +0,0 @@
-Welcome to YAFFS, the first file system developed specifically for NAND flash.
-
-It is now YAFFS2 - original YAFFS (AYFFS1) only supports 512-byte page
-NAND and is now deprectated. YAFFS2 supports 512b page in 'YAFFS1
-compatibility' mode (CONFIG_YAFFS_YAFFS1) and 2K or larger page NAND
-in YAFFS2 mode (CONFIG_YAFFS_YAFFS2).
-
-
-A note on licencing
--------------------
-YAFFS is available under the GPL and via alternative licensing
-arrangements with Aleph One. If you're using YAFFS as a Linux kernel
-file system then it will be under the GPL. For use in other situations
-you should discuss licensing issues with Aleph One.
-
-
-Terminology
------------
-Page - NAND addressable unit (normally 512b or 2Kbyte size) - can
- be read, written, marked bad. Has associated OOB.
-Block - Eraseable unit. 64 Pages. (128K on 2K NAND, 32K on 512b NAND)
-OOB - 'spare area' of each page for ECC, bad block marked and YAFFS
- tags. 16 bytes per 512b - 64 bytes for 2K page size.
-Chunk - Basic YAFFS addressable unit. Same size as Page.
-Object - YAFFS Object: File, Directory, Link, Device etc.
-
-YAFFS design
-------------
-
-YAFFS is a log-structured filesystem. It is designed particularly for
-NAND (as opposed to NOR) flash, to be flash-friendly, robust due to
-journalling, and to have low RAM and boot time overheads. File data is
-stored in 'chunks'. Chunks are the same size as NAND pages. Each page
-is marked with file id and chunk number. These marking 'tags' are
-stored in the OOB (or 'spare') region of the flash. The chunk number
-is determined by dividing the file position by the chunk size. Each
-chunk has a number of valid bytes, which equals the page size for all
-except the last chunk in a file.
-
-File 'headers' are stored as the first page in a file, marked as a
-different type to data pages. The same mechanism is used to store
-directories, device files, links etc. The first page describes which
-type of object it is.
-
-YAFFS2 never re-writes a page, because the spec of NAND chips does not
-allow it. (YAFFS1 used to mark a block 'deleted' in the OOB). Deletion
-is managed by moving deleted objects to the special, hidden 'unlinked'
-directory. These records are preserved until all the pages containing
-the object have been erased (We know when this happen by keeping a
-count of chunks remaining on the system for each object - when it
-reaches zero the object really is gone).
-
-When data in a file is overwritten, the relevant chunks are replaced
-by writing new pages to flash containing the new data but the same
-tags.
-
-Pages are also marked with a short (2 bit) serial number that
-increments each time the page at this position is incremented. The
-reason for this is that if power loss/crash/other act of demonic
-forces happens before the replaced page is marked as discarded, it is
-possible to have two pages with the same tags. The serial number is
-used to arbitrate.
-
-A block containing only discarded pages (termed a dirty block) is an
-obvious candidate for garbage collection. Otherwise valid pages can be
-copied off a block thus rendering the whole block discarded and ready
-for garbage collection.
-
-In theory you don't need to hold the file structure in RAM... you
-could just scan the whole flash looking for pages when you need them.
-In practice though you'd want better file access times than that! The
-mechanism proposed here is to have a list of __u16 page addresses
-associated with each file. Since there are 2^18 pages in a 128MB NAND,
-a __u16 is insufficient to uniquely identify a page but is does
-identify a group of 4 pages - a small enough region to search
-exhaustively. This mechanism is clearly expandable to larger NAND
-devices - within reason. The RAM overhead with this approach is approx
-2 bytes per page - 512kB of RAM for a whole 128MB NAND.
-
-Boot-time scanning to build the file structure lists only requires
-one pass reading NAND. If proper shutdowns happen the current RAM
-summary of the filesystem status is saved to flash, called
-'checkpointing'. This saves re-scanning the flash on startup, and gives
-huge boot/mount time savings.
-
-YAFFS regenerates its state by 'replaying the tape' - i.e. by
-scanning the chunks in their allocation order (i.e. block sequence ID
-order), which is usually different form the media block order. Each
-block is still only read once - starting from the end of the media and
-working back.
-
-YAFFS tags in YAFFS1 mode:
-
-18-bit Object ID (2^18 files, i.e. > 260,000 files). File id 0- is not
- valid and indicates a deleted page. File od 0x3ffff is also not valid.
- Synonymous with inode.
-2-bit serial number
-20-bit Chunk ID within file. Limit of 2^20 chunks/pages per file (i.e.
- > 500MB max file size). Chunk ID 0 is the file header for the file.
-10-bit counter of the number of bytes used in the page.
-12 bit ECC on tags
-
-YAFFS tags in YAFFS2 mode:
- 4 bytes 32-bit chunk ID
- 4 bytes 32-bit object ID
- 2 bytes Number of data bytes in this chunk
- 4 bytes Sequence number for this block
- 3 bytes ECC on tags
- 12 bytes ECC on data (3 bytes per 256 bytes of data)
-
-
-Page allocation and garbage collection
-
-Pages are allocated sequentially from the currently selected block.
-When all the pages in the block are filled, another clean block is
-selected for allocation. At least two or three clean blocks are
-reserved for garbage collection purposes. If there are insufficient
-clean blocks available, then a dirty block ( ie one containing only
-discarded pages) is erased to free it up as a clean block. If no dirty
-blocks are available, then the dirtiest block is selected for garbage
-collection.
-
-Garbage collection is performed by copying the valid data pages into
-new data pages thus rendering all the pages in this block dirty and
-freeing it up for erasure. I also like the idea of selecting a block
-at random some small percentage of the time - thus reducing the chance
-of wear differences.
-
-YAFFS is single-threaded. Garbage-collection is done as a parasitic
-task of writing data. So each time some data is written, a bit of
-pending garbage collection is done. More pages are garbage-collected
-when free space is tight.
-
-
-Flash writing
-
-YAFFS only ever writes each page once, complying with the requirements
-of the most restricitve NAND devices.
-
-Wear levelling
-
-This comes as a side-effect of the block-allocation strategy. Data is
-always written on the next free block, so they are all used equally.
-Blocks containing data that is written but never erased will not get
-back into the free list, so wear is levelled over only blocks which
-are free or become free, not blocks which never change.
-
-
-
-Some helpful info
------------------
-
-Formatting a YAFFS device is simply done by erasing it.
-
-Making an initial filesystem can be tricky because YAFFS uses the OOB
-and thus the bytes that get written depend on the YAFFS data (tags),
-and the ECC bytes and bad block markers which are dictated by the
-hardware and/or the MTD subsystem. The data layout also depends on the
-device page size (512b or 2K). Because YAFFS is only responsible for
-some of the OOB data, generating a filesystem offline requires
-detailed knowledge of what the other parts (MTD and NAND
-driver/hardware) are going to do.
-
-To make a YAFFS filesystem you have 3 options:
-
-1) Boot the system with an empty NAND device mounted as YAFFS and copy
- stuff on.
-
-2) Make a filesystem image offline, then boot the system and use
- MTDutils to write an image to flash.
-
-3) Make a filesystem image offline and use some tool like a bootloader to
- write it to flash.
-
-Option 1 avoids a lot of issues because all the parts
-(YAFFS/MTD/hardware) all take care of their own bits and (if you have
-put things together properly) it will 'just work'. YAFFS just needs to
-know how many bytes of the OOB it can use. However sometimes it is not
-practical.
-
-Option 2 lets MTD/hardware take care of the ECC so the filesystem
-image just had to know which bytes to use for YAFFS Tags.
-
-Option 3 is hardest as the image creator needs to know exactly what
-ECC bytes, endianness and algorithm to use as well as which bytes are
-available to YAFFS.
-
-mkyaffs2image creates an image suitable for option 3 for the
-particular case of yaffs2 on 2K page NAND with default MTD layout.
-
-mkyaffsimage creates an equivalent image for 512b page NAND (i.e.
-yaffs1 format).
-
-Bootloaders
------------
-
-A bootloader using YAFFS needs to know how MTD is laying out the OOB
-so that it can skip bad blocks.
-
-YAFFS Tracing
--------------
diff --git a/fs/yaffs2/devextras.h b/fs/yaffs2/devextras.h
deleted file mode 100644
index f6e53610d6..0000000000
--- a/fs/yaffs2/devextras.h
+++ /dev/null
@@ -1,275 +0,0 @@
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-/*
- * This file is just holds extra declarations used during development.
- * Most of these are from kernel includes placed here so we can use them in
- * applications.
- *
- */
-
-#ifndef __EXTRAS_H__
-#define __EXTRAS_H__
-
-#if defined WIN32
-#define __inline__ __inline
-#define new newHack
-#endif
-
-/* XXX U-BOOT XXX */
-#if 1 /* !(defined __KERNEL__) || (defined WIN32) */
-
-/* User space defines */
-
-/* XXX U-BOOT XXX */
-#if 0
-typedef unsigned char __u8;
-typedef unsigned short __u16;
-typedef unsigned __u32;
-#endif
-
-#include <asm/types.h>
-
-/*
- * Simple doubly linked list implementation.
- *
- * Some of the internal functions ("__xxx") are useful when
- * manipulating whole lists rather than single entries, as
- * sometimes we already know the next/prev entries and we can
- * generate better code by using them directly rather than
- * using the generic single-entry routines.
- */
-
-#define prefetch(x) 1
-
-struct list_head {
- struct list_head *next, *prev;
-};
-
-#define LIST_HEAD_INIT(name) { &(name), &(name) }
-
-#define LIST_HEAD(name) \
- struct list_head name = LIST_HEAD_INIT(name)
-
-#define INIT_LIST_HEAD(ptr) do { \
- (ptr)->next = (ptr); (ptr)->prev = (ptr); \
-} while (0)
-
-/*
- * Insert a new entry between two known consecutive entries.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static __inline__ void __list_add(struct list_head *new,
- struct list_head *prev,
- struct list_head *next)
-{
- next->prev = new;
- new->next = next;
- new->prev = prev;
- prev->next = new;
-}
-
-/**
- * list_add - add a new entry
- * @new: new entry to be added
- * @head: list head to add it after
- *
- * Insert a new entry after the specified head.
- * This is good for implementing stacks.
- */
-static __inline__ void list_add(struct list_head *new, struct list_head *head)
-{
- __list_add(new, head, head->next);
-}
-
-/**
- * list_add_tail - add a new entry
- * @new: new entry to be added
- * @head: list head to add it before
- *
- * Insert a new entry before the specified head.
- * This is useful for implementing queues.
- */
-static __inline__ void list_add_tail(struct list_head *new,
- struct list_head *head)
-{
- __list_add(new, head->prev, head);
-}
-
-/*
- * Delete a list entry by making the prev/next entries
- * point to each other.
- *
- * This is only for internal list manipulation where we know
- * the prev/next entries already!
- */
-static __inline__ void __list_del(struct list_head *prev,
- struct list_head *next)
-{
- next->prev = prev;
- prev->next = next;
-}
-
-/**
- * list_del - deletes entry from list.
- * @entry: the element to delete from the list.
- * Note: list_empty on entry does not return true after this, the entry is
- * in an undefined state.
- */
-static __inline__ void list_del(struct list_head *entry)
-{
- __list_del(entry->prev, entry->next);
-}
-
-/**
- * list_del_init - deletes entry from list and reinitialize it.
- * @entry: the element to delete from the list.
- */
-static __inline__ void list_del_init(struct list_head *entry)
-{
- __list_del(entry->prev, entry->next);
- INIT_LIST_HEAD(entry);
-}
-
-/**
- * list_empty - tests whether a list is empty
- * @head: the list to test.
- */
-static __inline__ int list_empty(struct list_head *head)
-{
- return head->next == head;
-}
-
-/**
- * list_splice - join two lists
- * @list: the new list to add.
- * @head: the place to add it in the first list.
- */
-static __inline__ void list_splice(struct list_head *list,
- struct list_head *head)
-{
- struct list_head *first = list->next;
-
- if (first != list) {
- struct list_head *last = list->prev;
- struct list_head *at = head->next;
-
- first->prev = head;
- head->next = first;
-
- last->next = at;
- at->prev = last;
- }
-}
-
-/**
- * list_entry - get the struct for this entry
- * @ptr: the &struct list_head pointer.
- * @type: the type of the struct this is embedded in.
- * @member: the name of the list_struct within the struct.
- */
-#define list_entry(ptr, type, member) \
- ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
-
-/**
- * list_for_each - iterate over a list
- * @pos: the &struct list_head to use as a loop counter.
- * @head: the head for your list.
- */
-#define list_for_each(pos, head) \
- for (pos = (head)->next, prefetch(pos->next); pos != (head); \
- pos = pos->next, prefetch(pos->next))
-
-/**
- * list_for_each_safe - iterate over a list safe against removal
- * of list entry
- * @pos: the &struct list_head to use as a loop counter.
- * @n: another &struct list_head to use as temporary storage
- * @head: the head for your list.
- */
-#define list_for_each_safe(pos, n, head) \
- for (pos = (head)->next, n = pos->next; pos != (head); \
- pos = n, n = pos->next)
-
-/*
- * File types
- */
-#define DT_UNKNOWN 0
-#define DT_FIFO 1
-#define DT_CHR 2
-#define DT_DIR 4
-#define DT_BLK 6
-#define DT_REG 8
-#define DT_LNK 10
-#define DT_SOCK 12
-#define DT_WHT 14
-
-#ifndef WIN32
-/* XXX U-BOOT XXX */
-#if 0
-#include <sys/stat.h>
-#else
-#include "common.h"
-#endif
-#endif
-
-/*
- * Attribute flags. These should be or-ed together to figure out what
- * has been changed!
- */
-#define ATTR_MODE 1
-#define ATTR_UID 2
-#define ATTR_GID 4
-#define ATTR_SIZE 8
-#define ATTR_ATIME 16
-#define ATTR_MTIME 32
-#define ATTR_CTIME 64
-#define ATTR_ATIME_SET 128
-#define ATTR_MTIME_SET 256
-#define ATTR_FORCE 512 /* Not a change, but a change it */
-#define ATTR_ATTR_FLAG 1024
-
-struct iattr {
- unsigned int ia_valid;
- unsigned ia_mode;
- unsigned ia_uid;
- unsigned ia_gid;
- unsigned ia_size;
- unsigned ia_atime;
- unsigned ia_mtime;
- unsigned ia_ctime;
- unsigned int ia_attr_flags;
-};
-
-#define KERN_DEBUG
-
-#else
-
-#ifndef WIN32
-#include <linux/types.h>
-#include <linux/list.h>
-#include <linux/fs.h>
-#include <linux/stat.h>
-#endif
-
-#endif
-
-#if defined WIN32
-#undef new
-#endif
-
-#endif
diff --git a/fs/yaffs2/yaffs_allocator.c b/fs/yaffs2/yaffs_allocator.c
new file mode 100644
index 0000000000..611061fb45
--- /dev/null
+++ b/fs/yaffs2/yaffs_allocator.c
@@ -0,0 +1,356 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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 "yaffs_allocator.h"
+#include "yaffs_guts.h"
+#include "yaffs_trace.h"
+#include "yportenv.h"
+
+/*
+ * Each entry in yaffs_tnode_list and yaffs_obj_list hold blocks
+ * of approx 100 objects that are themn allocated singly.
+ * This is basically a simplified slab allocator.
+ *
+ * We don't use the Linux slab allocator because slab does not allow
+ * us to dump all the objects in one hit when we do a umount and tear
+ * down all the tnodes and objects. slab requires that we first free
+ * the individual objects.
+ *
+ * Once yaffs has been mainlined I shall try to motivate for a change
+ * to slab to provide the extra features we need here.
+ */
+
+struct yaffs_tnode_list {
+ struct yaffs_tnode_list *next;
+ struct yaffs_tnode *tnodes;
+};
+
+struct yaffs_obj_list {
+ struct yaffs_obj_list *next;
+ struct yaffs_obj *objects;
+};
+
+struct yaffs_allocator {
+ int n_tnodes_created;
+ struct yaffs_tnode *free_tnodes;
+ int n_free_tnodes;
+ struct yaffs_tnode_list *alloc_tnode_list;
+
+ int n_obj_created;
+ struct list_head free_objs;
+ int n_free_objects;
+
+ struct yaffs_obj_list *allocated_obj_list;
+};
+
+static void yaffs_deinit_raw_tnodes(struct yaffs_dev *dev)
+{
+ struct yaffs_allocator *allocator =
+ (struct yaffs_allocator *)dev->allocator;
+ struct yaffs_tnode_list *tmp;
+
+ if (!allocator) {
+ BUG();
+ return;
+ }
+
+ while (allocator->alloc_tnode_list) {
+ tmp = allocator->alloc_tnode_list->next;
+
+ kfree(allocator->alloc_tnode_list->tnodes);
+ kfree(allocator->alloc_tnode_list);
+ allocator->alloc_tnode_list = tmp;
+ }
+
+ allocator->free_tnodes = NULL;
+ allocator->n_free_tnodes = 0;
+ allocator->n_tnodes_created = 0;
+}
+
+static void yaffs_init_raw_tnodes(struct yaffs_dev *dev)
+{
+ struct yaffs_allocator *allocator = dev->allocator;
+
+ if (!allocator) {
+ BUG();
+ return;
+ }
+
+ allocator->alloc_tnode_list = NULL;
+ allocator->free_tnodes = NULL;
+ allocator->n_free_tnodes = 0;
+ allocator->n_tnodes_created = 0;
+}
+
+static int yaffs_create_tnodes(struct yaffs_dev *dev, int n_tnodes)
+{
+ struct yaffs_allocator *allocator =
+ (struct yaffs_allocator *)dev->allocator;
+ int i;
+ struct yaffs_tnode *new_tnodes;
+ u8 *mem;
+ struct yaffs_tnode *curr;
+ struct yaffs_tnode *next;
+ struct yaffs_tnode_list *tnl;
+
+ if (!allocator) {
+ BUG();
+ return YAFFS_FAIL;
+ }
+
+ if (n_tnodes < 1)
+ return YAFFS_OK;
+
+ /* make these things */
+ new_tnodes = kmalloc(n_tnodes * dev->tnode_size, GFP_NOFS);
+ mem = (u8 *) new_tnodes;
+
+ if (!new_tnodes) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs: Could not allocate Tnodes");
+ return YAFFS_FAIL;
+ }
+
+ /* New hookup for wide tnodes */
+ for (i = 0; i < n_tnodes - 1; i++) {
+ curr = (struct yaffs_tnode *)&mem[i * dev->tnode_size];
+ next = (struct yaffs_tnode *)&mem[(i + 1) * dev->tnode_size];
+ curr->internal[0] = next;
+ }
+
+ curr = (struct yaffs_tnode *)&mem[(n_tnodes - 1) * dev->tnode_size];
+ curr->internal[0] = allocator->free_tnodes;
+ allocator->free_tnodes = (struct yaffs_tnode *)mem;
+
+ allocator->n_free_tnodes += n_tnodes;
+ allocator->n_tnodes_created += n_tnodes;
+
+ /* Now add this bunch of tnodes to a list for freeing up.
+ * NB If we can't add this to the management list it isn't fatal
+ * but it just means we can't free this bunch of tnodes later.
+ */
+ tnl = kmalloc(sizeof(struct yaffs_tnode_list), GFP_NOFS);
+ if (!tnl) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "Could not add tnodes to management list");
+ return YAFFS_FAIL;
+ } else {
+ tnl->tnodes = new_tnodes;
+ tnl->next = allocator->alloc_tnode_list;
+ allocator->alloc_tnode_list = tnl;
+ }
+
+ yaffs_trace(YAFFS_TRACE_ALLOCATE, "Tnodes added");
+
+ return YAFFS_OK;
+}
+
+struct yaffs_tnode *yaffs_alloc_raw_tnode(struct yaffs_dev *dev)
+{
+ struct yaffs_allocator *allocator =
+ (struct yaffs_allocator *)dev->allocator;
+ struct yaffs_tnode *tn = NULL;
+
+ if (!allocator) {
+ BUG();
+ return NULL;
+ }
+
+ /* If there are none left make more */
+ if (!allocator->free_tnodes)
+ yaffs_create_tnodes(dev, YAFFS_ALLOCATION_NTNODES);
+
+ if (allocator->free_tnodes) {
+ tn = allocator->free_tnodes;
+ allocator->free_tnodes = allocator->free_tnodes->internal[0];
+ allocator->n_free_tnodes--;
+ }
+
+ return tn;
+}
+
+/* FreeTnode frees up a tnode and puts it back on the free list */
+void yaffs_free_raw_tnode(struct yaffs_dev *dev, struct yaffs_tnode *tn)
+{
+ struct yaffs_allocator *allocator = dev->allocator;
+
+ if (!allocator) {
+ BUG();
+ return;
+ }
+
+ if (tn) {
+ tn->internal[0] = allocator->free_tnodes;
+ allocator->free_tnodes = tn;
+ allocator->n_free_tnodes++;
+ }
+ dev->checkpoint_blocks_required = 0; /* force recalculation */
+}
+
+/*--------------- yaffs_obj alloaction ------------------------
+ *
+ * Free yaffs_objs are stored in a list using obj->siblings.
+ * The blocks of allocated objects are stored in a linked list.
+ */
+
+static void yaffs_init_raw_objs(struct yaffs_dev *dev)
+{
+ struct yaffs_allocator *allocator = dev->allocator;
+
+ if (!allocator) {
+ BUG();
+ return;
+ }
+
+ allocator->allocated_obj_list = NULL;
+ INIT_LIST_HEAD(&allocator->free_objs);
+ allocator->n_free_objects = 0;
+}
+
+static void yaffs_deinit_raw_objs(struct yaffs_dev *dev)
+{
+ struct yaffs_allocator *allocator = dev->allocator;
+ struct yaffs_obj_list *tmp;
+
+ if (!allocator) {
+ BUG();
+ return;
+ }
+
+ while (allocator->allocated_obj_list) {
+ tmp = allocator->allocated_obj_list->next;
+ kfree(allocator->allocated_obj_list->objects);
+ kfree(allocator->allocated_obj_list);
+ allocator->allocated_obj_list = tmp;
+ }
+
+ INIT_LIST_HEAD(&allocator->free_objs);
+ allocator->n_free_objects = 0;
+ allocator->n_obj_created = 0;
+}
+
+static int yaffs_create_free_objs(struct yaffs_dev *dev, int n_obj)
+{
+ struct yaffs_allocator *allocator = dev->allocator;
+ int i;
+ struct yaffs_obj *new_objs;
+ struct yaffs_obj_list *list;
+
+ if (!allocator) {
+ BUG();
+ return YAFFS_FAIL;
+ }
+
+ if (n_obj < 1)
+ return YAFFS_OK;
+
+ /* make these things */
+ new_objs = kmalloc(n_obj * sizeof(struct yaffs_obj), GFP_NOFS);
+ list = kmalloc(sizeof(struct yaffs_obj_list), GFP_NOFS);
+
+ if (!new_objs || !list) {
+ kfree(new_objs);
+ new_objs = NULL;
+ kfree(list);
+ list = NULL;
+ yaffs_trace(YAFFS_TRACE_ALLOCATE,
+ "Could not allocate more objects");
+ return YAFFS_FAIL;
+ }
+
+ /* Hook them into the free list */
+ for (i = 0; i < n_obj; i++)
+ list_add(&new_objs[i].siblings, &allocator->free_objs);
+
+ allocator->n_free_objects += n_obj;
+ allocator->n_obj_created += n_obj;
+
+ /* Now add this bunch of Objects to a list for freeing up. */
+
+ list->objects = new_objs;
+ list->next = allocator->allocated_obj_list;
+ allocator->allocated_obj_list = list;
+
+ return YAFFS_OK;
+}
+
+struct yaffs_obj *yaffs_alloc_raw_obj(struct yaffs_dev *dev)
+{
+ struct yaffs_obj *obj = NULL;
+ struct list_head *lh;
+ struct yaffs_allocator *allocator = dev->allocator;
+
+ if (!allocator) {
+ BUG();
+ return obj;
+ }
+
+ /* If there are none left make more */
+ if (list_empty(&allocator->free_objs))
+ yaffs_create_free_objs(dev, YAFFS_ALLOCATION_NOBJECTS);
+
+ if (!list_empty(&allocator->free_objs)) {
+ lh = allocator->free_objs.next;
+ obj = list_entry(lh, struct yaffs_obj, siblings);
+ list_del_init(lh);
+ allocator->n_free_objects--;
+ }
+
+ return obj;
+}
+
+void yaffs_free_raw_obj(struct yaffs_dev *dev, struct yaffs_obj *obj)
+{
+
+ struct yaffs_allocator *allocator = dev->allocator;
+
+ if (!allocator) {
+ BUG();
+ return;
+ }
+
+ /* Link into the free list. */
+ list_add(&obj->siblings, &allocator->free_objs);
+ allocator->n_free_objects++;
+}
+
+void yaffs_deinit_raw_tnodes_and_objs(struct yaffs_dev *dev)
+{
+
+ if (!dev->allocator) {
+ BUG();
+ return;
+ }
+
+ yaffs_deinit_raw_tnodes(dev);
+ yaffs_deinit_raw_objs(dev);
+ kfree(dev->allocator);
+ dev->allocator = NULL;
+}
+
+void yaffs_init_raw_tnodes_and_objs(struct yaffs_dev *dev)
+{
+ struct yaffs_allocator *allocator;
+
+ if (dev->allocator) {
+ BUG();
+ return;
+ }
+
+ allocator = kmalloc(sizeof(struct yaffs_allocator), GFP_NOFS);
+ if (allocator) {
+ dev->allocator = allocator;
+ yaffs_init_raw_tnodes(dev);
+ yaffs_init_raw_objs(dev);
+ }
+}
diff --git a/fs/yaffs2/yaffs_allocator.h b/fs/yaffs2/yaffs_allocator.h
new file mode 100644
index 0000000000..a8cc322642
--- /dev/null
+++ b/fs/yaffs2/yaffs_allocator.h
@@ -0,0 +1,30 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YAFFS_ALLOCATOR_H__
+#define __YAFFS_ALLOCATOR_H__
+
+#include "yaffs_guts.h"
+
+void yaffs_init_raw_tnodes_and_objs(struct yaffs_dev *dev);
+void yaffs_deinit_raw_tnodes_and_objs(struct yaffs_dev *dev);
+
+struct yaffs_tnode *yaffs_alloc_raw_tnode(struct yaffs_dev *dev);
+void yaffs_free_raw_tnode(struct yaffs_dev *dev, struct yaffs_tnode *tn);
+
+struct yaffs_obj *yaffs_alloc_raw_obj(struct yaffs_dev *dev);
+void yaffs_free_raw_obj(struct yaffs_dev *dev, struct yaffs_obj *obj);
+
+#endif
diff --git a/fs/yaffs2/yaffs_attribs.c b/fs/yaffs2/yaffs_attribs.c
new file mode 100644
index 0000000000..69664268e1
--- /dev/null
+++ b/fs/yaffs2/yaffs_attribs.c
@@ -0,0 +1,152 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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 "yaffs_attribs.h"
+
+
+void yaffs_load_attribs(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh)
+{
+ obj->yst_uid = oh->yst_uid;
+ obj->yst_gid = oh->yst_gid;
+ obj->yst_atime = oh->yst_atime;
+ obj->yst_mtime = oh->yst_mtime;
+ obj->yst_ctime = oh->yst_ctime;
+ obj->yst_rdev = oh->yst_rdev;
+}
+
+
+void yaffs_load_attribs_oh(struct yaffs_obj_hdr *oh, struct yaffs_obj *obj)
+{
+#ifdef CONFIG_YAFFS_WINCE
+ oh->win_atime[0] = obj->win_atime[0];
+ oh->win_ctime[0] = obj->win_ctime[0];
+ oh->win_mtime[0] = obj->win_mtime[0];
+ oh->win_atime[1] = obj->win_atime[1];
+ oh->win_ctime[1] = obj->win_ctime[1];
+ oh->win_mtime[1] = obj->win_mtime[1];
+#else
+ oh->yst_uid = obj->yst_uid;
+ oh->yst_gid = obj->yst_gid;
+ oh->yst_atime = obj->yst_atime;
+ oh->yst_mtime = obj->yst_mtime;
+ oh->yst_ctime = obj->yst_ctime;
+ oh->yst_rdev = obj->yst_rdev;
+#endif
+
+}
+
+void yaffs_attribs_init(struct yaffs_obj *obj, u32 gid, u32 uid, u32 rdev)
+{
+
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_win_file_time_now(obj->win_atime);
+ obj->win_ctime[0] = obj->win_mtime[0] = obj->win_atime[0];
+ obj->win_ctime[1] = obj->win_mtime[1] = obj->win_atime[1];
+
+#else
+ yaffs_load_current_time(obj, 1, 1);
+ obj->yst_rdev = rdev;
+ obj->yst_uid = uid;
+ obj->yst_gid = gid;
+#endif
+}
+
+void yaffs_load_current_time(struct yaffs_obj *obj, int do_a, int do_c)
+{
+#ifdef CONFIG_YAFFS_WINCE
+ yfsd_win_file_time_now(the_obj->win_atime);
+ the_obj->win_ctime[0] = the_obj->win_mtime[0] =
+ the_obj->win_atime[0];
+ the_obj->win_ctime[1] = the_obj->win_mtime[1] =
+ the_obj->win_atime[1];
+
+#else
+
+ obj->yst_mtime = Y_CURRENT_TIME;
+ if (do_a)
+ obj->yst_atime = obj->yst_atime;
+ if (do_c)
+ obj->yst_ctime = obj->yst_atime;
+#endif
+}
+
+loff_t yaffs_get_file_size(struct yaffs_obj *obj)
+{
+ YCHAR *alias = NULL;
+ obj = yaffs_get_equivalent_obj(obj);
+
+ switch (obj->variant_type) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ return obj->variant.file_variant.file_size;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ alias = obj->variant.symlink_variant.alias;
+ if (!alias)
+ return 0;
+ return yaffs_strnlen(alias, YAFFS_MAX_ALIAS_LENGTH);
+ default:
+ return 0;
+ }
+}
+
+int yaffs_set_attribs(struct yaffs_obj *obj, struct iattr *attr)
+{
+ unsigned int valid = attr->ia_valid;
+
+ if (valid & ATTR_MODE)
+ obj->yst_mode = attr->ia_mode;
+ if (valid & ATTR_UID)
+ obj->yst_uid = attr->ia_uid;
+ if (valid & ATTR_GID)
+ obj->yst_gid = attr->ia_gid;
+
+ if (valid & ATTR_ATIME)
+ obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime);
+ if (valid & ATTR_CTIME)
+ obj->yst_ctime = Y_TIME_CONVERT(attr->ia_ctime);
+ if (valid & ATTR_MTIME)
+ obj->yst_mtime = Y_TIME_CONVERT(attr->ia_mtime);
+
+ if (valid & ATTR_SIZE)
+ yaffs_resize_file(obj, attr->ia_size);
+
+ yaffs_update_oh(obj, NULL, 1, 0, 0, NULL);
+
+ return YAFFS_OK;
+
+}
+
+int yaffs_get_attribs(struct yaffs_obj *obj, struct iattr *attr)
+{
+ unsigned int valid = 0;
+
+ attr->ia_mode = obj->yst_mode;
+ valid |= ATTR_MODE;
+ attr->ia_uid = obj->yst_uid;
+ valid |= ATTR_UID;
+ attr->ia_gid = obj->yst_gid;
+ valid |= ATTR_GID;
+
+ Y_TIME_CONVERT(attr->ia_atime) = obj->yst_atime;
+ valid |= ATTR_ATIME;
+ Y_TIME_CONVERT(attr->ia_ctime) = obj->yst_ctime;
+ valid |= ATTR_CTIME;
+ Y_TIME_CONVERT(attr->ia_mtime) = obj->yst_mtime;
+ valid |= ATTR_MTIME;
+
+ attr->ia_size = yaffs_get_file_size(obj);
+ valid |= ATTR_SIZE;
+
+ attr->ia_valid = valid;
+
+ return YAFFS_OK;
+}
diff --git a/fs/yaffs2/yaffs_attribs.h b/fs/yaffs2/yaffs_attribs.h
new file mode 100644
index 0000000000..5b21b085b7
--- /dev/null
+++ b/fs/yaffs2/yaffs_attribs.h
@@ -0,0 +1,28 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YAFFS_ATTRIBS_H__
+#define __YAFFS_ATTRIBS_H__
+
+#include "yaffs_guts.h"
+
+void yaffs_load_attribs(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh);
+void yaffs_load_attribs_oh(struct yaffs_obj_hdr *oh, struct yaffs_obj *obj);
+void yaffs_attribs_init(struct yaffs_obj *obj, u32 gid, u32 uid, u32 rdev);
+void yaffs_load_current_time(struct yaffs_obj *obj, int do_a, int do_c);
+int yaffs_set_attribs(struct yaffs_obj *obj, struct iattr *attr);
+int yaffs_get_attribs(struct yaffs_obj *obj, struct iattr *attr);
+
+#endif
diff --git a/fs/yaffs2/yaffs_bitmap.c b/fs/yaffs2/yaffs_bitmap.c
new file mode 100644
index 0000000000..4440e930d6
--- /dev/null
+++ b/fs/yaffs2/yaffs_bitmap.c
@@ -0,0 +1,97 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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 "yaffs_bitmap.h"
+#include "yaffs_trace.h"
+/*
+ * Chunk bitmap manipulations
+ */
+
+static inline u8 *yaffs_block_bits(struct yaffs_dev *dev, int blk)
+{
+ if (blk < dev->internal_start_block || blk > dev->internal_end_block) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "BlockBits block %d is not valid",
+ blk);
+ BUG();
+ }
+ return dev->chunk_bits +
+ (dev->chunk_bit_stride * (blk - dev->internal_start_block));
+}
+
+void yaffs_verify_chunk_bit_id(struct yaffs_dev *dev, int blk, int chunk)
+{
+ if (blk < dev->internal_start_block || blk > dev->internal_end_block ||
+ chunk < 0 || chunk >= dev->param.chunks_per_block) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "Chunk Id (%d:%d) invalid",
+ blk, chunk);
+ BUG();
+ }
+}
+
+void yaffs_clear_chunk_bits(struct yaffs_dev *dev, int blk)
+{
+ u8 *blk_bits = yaffs_block_bits(dev, blk);
+
+ memset(blk_bits, 0, dev->chunk_bit_stride);
+}
+
+void yaffs_clear_chunk_bit(struct yaffs_dev *dev, int blk, int chunk)
+{
+ u8 *blk_bits = yaffs_block_bits(dev, blk);
+
+ yaffs_verify_chunk_bit_id(dev, blk, chunk);
+ blk_bits[chunk / 8] &= ~(1 << (chunk & 7));
+}
+
+void yaffs_set_chunk_bit(struct yaffs_dev *dev, int blk, int chunk)
+{
+ u8 *blk_bits = yaffs_block_bits(dev, blk);
+
+ yaffs_verify_chunk_bit_id(dev, blk, chunk);
+ blk_bits[chunk / 8] |= (1 << (chunk & 7));
+}
+
+int yaffs_check_chunk_bit(struct yaffs_dev *dev, int blk, int chunk)
+{
+ u8 *blk_bits = yaffs_block_bits(dev, blk);
+
+ yaffs_verify_chunk_bit_id(dev, blk, chunk);
+ return (blk_bits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
+}
+
+int yaffs_still_some_chunks(struct yaffs_dev *dev, int blk)
+{
+ u8 *blk_bits = yaffs_block_bits(dev, blk);
+ int i;
+
+ for (i = 0; i < dev->chunk_bit_stride; i++) {
+ if (*blk_bits)
+ return 1;
+ blk_bits++;
+ }
+ return 0;
+}
+
+int yaffs_count_chunk_bits(struct yaffs_dev *dev, int blk)
+{
+ u8 *blk_bits = yaffs_block_bits(dev, blk);
+ int i;
+ int n = 0;
+
+ for (i = 0; i < dev->chunk_bit_stride; i++, blk_bits++)
+ n += hweight8(*blk_bits);
+
+ return n;
+}
diff --git a/fs/yaffs2/yaffs_bitmap.h b/fs/yaffs2/yaffs_bitmap.h
new file mode 100644
index 0000000000..e26b37d89a
--- /dev/null
+++ b/fs/yaffs2/yaffs_bitmap.h
@@ -0,0 +1,33 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+/*
+ * Chunk bitmap manipulations
+ */
+
+#ifndef __YAFFS_BITMAP_H__
+#define __YAFFS_BITMAP_H__
+
+#include "yaffs_guts.h"
+
+void yaffs_verify_chunk_bit_id(struct yaffs_dev *dev, int blk, int chunk);
+void yaffs_clear_chunk_bits(struct yaffs_dev *dev, int blk);
+void yaffs_clear_chunk_bit(struct yaffs_dev *dev, int blk, int chunk);
+void yaffs_set_chunk_bit(struct yaffs_dev *dev, int blk, int chunk);
+int yaffs_check_chunk_bit(struct yaffs_dev *dev, int blk, int chunk);
+int yaffs_still_some_chunks(struct yaffs_dev *dev, int blk);
+int yaffs_count_chunk_bits(struct yaffs_dev *dev, int blk);
+
+#endif
diff --git a/fs/yaffs2/yaffs_checkptrw.c b/fs/yaffs2/yaffs_checkptrw.c
index 230f78fb89..997a618aee 100644
--- a/fs/yaffs2/yaffs_checkptrw.c
+++ b/fs/yaffs2/yaffs_checkptrw.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -11,395 +11,398 @@
* published by the Free Software Foundation.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-#include <malloc.h>
-
-const char *yaffs_checkptrw_c_version =
- "$Id: yaffs_checkptrw.c,v 1.14 2007/05/15 20:07:40 charles Exp $";
-
-
#include "yaffs_checkptrw.h"
+#include "yaffs_getblockinfo.h"
-
-static int yaffs_CheckpointSpaceOk(yaffs_Device *dev)
+static int yaffs2_checkpt_space_ok(struct yaffs_dev *dev)
{
+ int blocks_avail = dev->n_erased_blocks - dev->param.n_reserved_blocks;
- int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "checkpt blocks_avail = %d", blocks_avail);
- T(YAFFS_TRACE_CHECKPOINT,
- (TSTR("checkpt blocks available = %d" TENDSTR),
- blocksAvailable));
-
-
- return (blocksAvailable <= 0) ? 0 : 1;
+ return (blocks_avail <= 0) ? 0 : 1;
}
-
-static int yaffs_CheckpointErase(yaffs_Device *dev)
+static int yaffs_checkpt_erase(struct yaffs_dev *dev)
{
-
int i;
-
- if(!dev->eraseBlockInNAND)
+ if (!dev->param.erase_fn)
return 0;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checking blocks %d to %d"TENDSTR),
- dev->internalStartBlock,dev->internalEndBlock));
-
- for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
- if(bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("erasing checkpt block %d"TENDSTR),i));
- if(dev->eraseBlockInNAND(dev,i- dev->blockOffset /* realign */)){
- bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- dev->nFreeChunks += dev->nChunksPerBlock;
- }
- else {
- dev->markNANDBlockBad(dev,i);
- bi->blockState = YAFFS_BLOCK_STATE_DEAD;
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "checking blocks %d to %d",
+ dev->internal_start_block, dev->internal_end_block);
+
+ for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) {
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, i);
+ if (bi->block_state == YAFFS_BLOCK_STATE_CHECKPOINT) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "erasing checkpt block %d", i);
+
+ dev->n_erasures++;
+
+ if (dev->param.
+ erase_fn(dev,
+ i - dev->block_offset /* realign */)) {
+ bi->block_state = YAFFS_BLOCK_STATE_EMPTY;
+ dev->n_erased_blocks++;
+ dev->n_free_chunks +=
+ dev->param.chunks_per_block;
+ } else {
+ dev->param.bad_block_fn(dev, i);
+ bi->block_state = YAFFS_BLOCK_STATE_DEAD;
}
}
}
- dev->blocksInCheckpoint = 0;
+ dev->blocks_in_checkpt = 0;
return 1;
}
-
-static void yaffs_CheckpointFindNextErasedBlock(yaffs_Device *dev)
+static void yaffs2_checkpt_find_erased_block(struct yaffs_dev *dev)
{
- int i;
- int blocksAvailable = dev->nErasedBlocks - dev->nReservedBlocks;
- T(YAFFS_TRACE_CHECKPOINT,
- (TSTR("allocating checkpt block: erased %d reserved %d avail %d next %d "TENDSTR),
- dev->nErasedBlocks,dev->nReservedBlocks,blocksAvailable,dev->checkpointNextBlock));
-
- if(dev->checkpointNextBlock >= 0 &&
- dev->checkpointNextBlock <= dev->internalEndBlock &&
- blocksAvailable > 0){
-
- for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
- if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY){
- dev->checkpointNextBlock = i + 1;
- dev->checkpointCurrentBlock = i;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("allocating checkpt block %d"TENDSTR),i));
+ int i;
+ int blocks_avail = dev->n_erased_blocks - dev->param.n_reserved_blocks;
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "allocating checkpt block: erased %d reserved %d avail %d next %d ",
+ dev->n_erased_blocks, dev->param.n_reserved_blocks,
+ blocks_avail, dev->checkpt_next_block);
+
+ if (dev->checkpt_next_block >= 0 &&
+ dev->checkpt_next_block <= dev->internal_end_block &&
+ blocks_avail > 0) {
+
+ for (i = dev->checkpt_next_block; i <= dev->internal_end_block;
+ i++) {
+ struct yaffs_block_info *bi =
+ yaffs_get_block_info(dev, i);
+ if (bi->block_state == YAFFS_BLOCK_STATE_EMPTY) {
+ dev->checkpt_next_block = i + 1;
+ dev->checkpt_cur_block = i;
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "allocating checkpt block %d", i);
return;
}
}
}
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("out of checkpt blocks"TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT, "out of checkpt blocks");
- dev->checkpointNextBlock = -1;
- dev->checkpointCurrentBlock = -1;
+ dev->checkpt_next_block = -1;
+ dev->checkpt_cur_block = -1;
}
-static void yaffs_CheckpointFindNextCheckpointBlock(yaffs_Device *dev)
+static void yaffs2_checkpt_find_block(struct yaffs_dev *dev)
{
- int i;
- yaffs_ExtendedTags tags;
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: start: blocks %d next %d" TENDSTR),
- dev->blocksInCheckpoint, dev->checkpointNextBlock));
-
- if(dev->blocksInCheckpoint < dev->checkpointMaxBlocks)
- for(i = dev->checkpointNextBlock; i <= dev->internalEndBlock; i++){
- int chunk = i * dev->nChunksPerBlock;
- int realignedChunk = chunk - dev->chunkOffset;
-
- dev->readChunkWithTagsFromNAND(dev,realignedChunk,NULL,&tags);
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("find next checkpt block: search: block %d oid %d seq %d eccr %d" TENDSTR),
- i, tags.objectId,tags.sequenceNumber,tags.eccResult));
-
- if(tags.sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA){
+ int i;
+ struct yaffs_ext_tags tags;
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "find next checkpt block: start: blocks %d next %d",
+ dev->blocks_in_checkpt, dev->checkpt_next_block);
+
+ if (dev->blocks_in_checkpt < dev->checkpt_max_blocks)
+ for (i = dev->checkpt_next_block; i <= dev->internal_end_block;
+ i++) {
+ int chunk = i * dev->param.chunks_per_block;
+ int realigned_chunk = chunk - dev->chunk_offset;
+
+ dev->param.read_chunk_tags_fn(dev, realigned_chunk,
+ NULL, &tags);
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "find next checkpt block: search: block %d oid %d seq %d eccr %d",
+ i, tags.obj_id, tags.seq_number,
+ tags.ecc_result);
+
+ if (tags.seq_number == YAFFS_SEQUENCE_CHECKPOINT_DATA) {
/* Right kind of block */
- dev->checkpointNextBlock = tags.objectId;
- dev->checkpointCurrentBlock = i;
- dev->checkpointBlockList[dev->blocksInCheckpoint] = i;
- dev->blocksInCheckpoint++;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("found checkpt block %d"TENDSTR),i));
+ dev->checkpt_next_block = tags.obj_id;
+ dev->checkpt_cur_block = i;
+ dev->checkpt_block_list[dev->
+ blocks_in_checkpt] = i;
+ dev->blocks_in_checkpt++;
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "found checkpt block %d", i);
return;
}
}
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("found no more checkpt blocks"TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT, "found no more checkpt blocks");
- dev->checkpointNextBlock = -1;
- dev->checkpointCurrentBlock = -1;
+ dev->checkpt_next_block = -1;
+ dev->checkpt_cur_block = -1;
}
-
-int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting)
+int yaffs2_checkpt_open(struct yaffs_dev *dev, int writing)
{
+ int i;
+
+ dev->checkpt_open_write = writing;
/* Got the functions we need? */
- if (!dev->writeChunkWithTagsToNAND ||
- !dev->readChunkWithTagsFromNAND ||
- !dev->eraseBlockInNAND ||
- !dev->markNANDBlockBad)
+ if (!dev->param.write_chunk_tags_fn ||
+ !dev->param.read_chunk_tags_fn ||
+ !dev->param.erase_fn || !dev->param.bad_block_fn)
return 0;
- if(forWriting && !yaffs_CheckpointSpaceOk(dev))
+ if (writing && !yaffs2_checkpt_space_ok(dev))
return 0;
- if(!dev->checkpointBuffer)
- dev->checkpointBuffer = YMALLOC_DMA(dev->nDataBytesPerChunk);
- if(!dev->checkpointBuffer)
+ if (!dev->checkpt_buffer)
+ dev->checkpt_buffer =
+ kmalloc(dev->param.total_bytes_per_chunk, GFP_NOFS);
+ if (!dev->checkpt_buffer)
return 0;
-
- dev->checkpointPageSequence = 0;
-
- dev->checkpointOpenForWrite = forWriting;
-
- dev->checkpointByteCount = 0;
- dev->checkpointSum = 0;
- dev->checkpointXor = 0;
- dev->checkpointCurrentBlock = -1;
- dev->checkpointCurrentChunk = -1;
- dev->checkpointNextBlock = dev->internalStartBlock;
+ dev->checkpt_page_seq = 0;
+ dev->checkpt_byte_count = 0;
+ dev->checkpt_sum = 0;
+ dev->checkpt_xor = 0;
+ dev->checkpt_cur_block = -1;
+ dev->checkpt_cur_chunk = -1;
+ dev->checkpt_next_block = dev->internal_start_block;
/* Erase all the blocks in the checkpoint area */
- if(forWriting){
- memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
- dev->checkpointByteOffset = 0;
- return yaffs_CheckpointErase(dev);
+ if (writing) {
+ memset(dev->checkpt_buffer, 0, dev->data_bytes_per_chunk);
+ dev->checkpt_byte_offs = 0;
+ return yaffs_checkpt_erase(dev);
+ }
+ /* Set to a value that will kick off a read */
+ dev->checkpt_byte_offs = dev->data_bytes_per_chunk;
+ /* A checkpoint block list of 1 checkpoint block per 16 block is
+ * (hopefully) going to be way more than we need */
+ dev->blocks_in_checkpt = 0;
+ dev->checkpt_max_blocks =
+ (dev->internal_end_block - dev->internal_start_block) / 16 + 2;
+ dev->checkpt_block_list =
+ kmalloc(sizeof(int) * dev->checkpt_max_blocks, GFP_NOFS);
+
+ if (!dev->checkpt_block_list)
+ return 0;
- } else {
- int i;
- /* Set to a value that will kick off a read */
- dev->checkpointByteOffset = dev->nDataBytesPerChunk;
- /* A checkpoint block list of 1 checkpoint block per 16 block is (hopefully)
- * going to be way more than we need */
- dev->blocksInCheckpoint = 0;
- dev->checkpointMaxBlocks = (dev->internalEndBlock - dev->internalStartBlock)/16 + 2;
- dev->checkpointBlockList = YMALLOC(sizeof(int) * dev->checkpointMaxBlocks);
- for(i = 0; i < dev->checkpointMaxBlocks; i++)
- dev->checkpointBlockList[i] = -1;
- }
+ for (i = 0; i < dev->checkpt_max_blocks; i++)
+ dev->checkpt_block_list[i] = -1;
return 1;
}
-int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum)
+int yaffs2_get_checkpt_sum(struct yaffs_dev *dev, u32 * sum)
{
- __u32 compositeSum;
- compositeSum = (dev->checkpointSum << 8) | (dev->checkpointXor & 0xFF);
- *sum = compositeSum;
+ u32 composite_sum;
+
+ composite_sum = (dev->checkpt_sum << 8) | (dev->checkpt_xor & 0xff);
+ *sum = composite_sum;
return 1;
}
-static int yaffs_CheckpointFlushBuffer(yaffs_Device *dev)
+static int yaffs2_checkpt_flush_buffer(struct yaffs_dev *dev)
{
-
int chunk;
- int realignedChunk;
-
- yaffs_ExtendedTags tags;
+ int realigned_chunk;
+ struct yaffs_ext_tags tags;
- if(dev->checkpointCurrentBlock < 0){
- yaffs_CheckpointFindNextErasedBlock(dev);
- dev->checkpointCurrentChunk = 0;
+ if (dev->checkpt_cur_block < 0) {
+ yaffs2_checkpt_find_erased_block(dev);
+ dev->checkpt_cur_chunk = 0;
}
- if(dev->checkpointCurrentBlock < 0)
+ if (dev->checkpt_cur_block < 0)
return 0;
- tags.chunkDeleted = 0;
- tags.objectId = dev->checkpointNextBlock; /* Hint to next place to look */
- tags.chunkId = dev->checkpointPageSequence + 1;
- tags.sequenceNumber = YAFFS_SEQUENCE_CHECKPOINT_DATA;
- tags.byteCount = dev->nDataBytesPerChunk;
- if(dev->checkpointCurrentChunk == 0){
+ tags.is_deleted = 0;
+ tags.obj_id = dev->checkpt_next_block; /* Hint to next place to look */
+ tags.chunk_id = dev->checkpt_page_seq + 1;
+ tags.seq_number = YAFFS_SEQUENCE_CHECKPOINT_DATA;
+ tags.n_bytes = dev->data_bytes_per_chunk;
+ if (dev->checkpt_cur_chunk == 0) {
/* First chunk we write for the block? Set block state to
checkpoint */
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointCurrentBlock);
- bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
- dev->blocksInCheckpoint++;
+ struct yaffs_block_info *bi =
+ yaffs_get_block_info(dev, dev->checkpt_cur_block);
+ bi->block_state = YAFFS_BLOCK_STATE_CHECKPOINT;
+ dev->blocks_in_checkpt++;
}
- chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock + dev->checkpointCurrentChunk;
+ chunk =
+ dev->checkpt_cur_block * dev->param.chunks_per_block +
+ dev->checkpt_cur_chunk;
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "checkpoint wite buffer nand %d(%d:%d) objid %d chId %d",
+ chunk, dev->checkpt_cur_block, dev->checkpt_cur_chunk,
+ tags.obj_id, tags.chunk_id);
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint wite buffer nand %d(%d:%d) objid %d chId %d" TENDSTR),
- chunk, dev->checkpointCurrentBlock, dev->checkpointCurrentChunk,tags.objectId,tags.chunkId));
+ realigned_chunk = chunk - dev->chunk_offset;
- realignedChunk = chunk - dev->chunkOffset;
+ dev->n_page_writes++;
- dev->writeChunkWithTagsToNAND(dev,realignedChunk,dev->checkpointBuffer,&tags);
- dev->checkpointByteOffset = 0;
- dev->checkpointPageSequence++;
- dev->checkpointCurrentChunk++;
- if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock){
- dev->checkpointCurrentChunk = 0;
- dev->checkpointCurrentBlock = -1;
+ dev->param.write_chunk_tags_fn(dev, realigned_chunk,
+ dev->checkpt_buffer, &tags);
+ dev->checkpt_byte_offs = 0;
+ dev->checkpt_page_seq++;
+ dev->checkpt_cur_chunk++;
+ if (dev->checkpt_cur_chunk >= dev->param.chunks_per_block) {
+ dev->checkpt_cur_chunk = 0;
+ dev->checkpt_cur_block = -1;
}
- memset(dev->checkpointBuffer,0,dev->nDataBytesPerChunk);
+ memset(dev->checkpt_buffer, 0, dev->data_bytes_per_chunk);
return 1;
}
-
-int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes)
+int yaffs2_checkpt_wr(struct yaffs_dev *dev, const void *data, int n_bytes)
{
- int i=0;
+ int i = 0;
int ok = 1;
+ u8 *data_bytes = (u8 *) data;
-
- __u8 * dataBytes = (__u8 *)data;
-
-
-
- if(!dev->checkpointBuffer)
+ if (!dev->checkpt_buffer)
return 0;
- if(!dev->checkpointOpenForWrite)
+ if (!dev->checkpt_open_write)
return -1;
- while(i < nBytes && ok) {
-
-
-
- dev->checkpointBuffer[dev->checkpointByteOffset] = *dataBytes ;
- dev->checkpointSum += *dataBytes;
- dev->checkpointXor ^= *dataBytes;
+ while (i < n_bytes && ok) {
+ dev->checkpt_buffer[dev->checkpt_byte_offs] = *data_bytes;
+ dev->checkpt_sum += *data_bytes;
+ dev->checkpt_xor ^= *data_bytes;
- dev->checkpointByteOffset++;
+ dev->checkpt_byte_offs++;
i++;
- dataBytes++;
- dev->checkpointByteCount++;
-
-
- if(dev->checkpointByteOffset < 0 ||
- dev->checkpointByteOffset >= dev->nDataBytesPerChunk)
- ok = yaffs_CheckpointFlushBuffer(dev);
+ data_bytes++;
+ dev->checkpt_byte_count++;
+ if (dev->checkpt_byte_offs < 0 ||
+ dev->checkpt_byte_offs >= dev->data_bytes_per_chunk)
+ ok = yaffs2_checkpt_flush_buffer(dev);
}
- return i;
+ return i;
}
-int yaffs_CheckpointRead(yaffs_Device *dev, void *data, int nBytes)
+int yaffs2_checkpt_rd(struct yaffs_dev *dev, void *data, int n_bytes)
{
- int i=0;
+ int i = 0;
int ok = 1;
- yaffs_ExtendedTags tags;
-
-
+ struct yaffs_ext_tags tags;
int chunk;
- int realignedChunk;
+ int realigned_chunk;
+ u8 *data_bytes = (u8 *) data;
- __u8 *dataBytes = (__u8 *)data;
-
- if(!dev->checkpointBuffer)
+ if (!dev->checkpt_buffer)
return 0;
- if(dev->checkpointOpenForWrite)
+ if (dev->checkpt_open_write)
return -1;
- while(i < nBytes && ok) {
-
+ while (i < n_bytes && ok) {
- if(dev->checkpointByteOffset < 0 ||
- dev->checkpointByteOffset >= dev->nDataBytesPerChunk) {
+ if (dev->checkpt_byte_offs < 0 ||
+ dev->checkpt_byte_offs >= dev->data_bytes_per_chunk) {
- if(dev->checkpointCurrentBlock < 0){
- yaffs_CheckpointFindNextCheckpointBlock(dev);
- dev->checkpointCurrentChunk = 0;
+ if (dev->checkpt_cur_block < 0) {
+ yaffs2_checkpt_find_block(dev);
+ dev->checkpt_cur_chunk = 0;
}
- if(dev->checkpointCurrentBlock < 0)
+ if (dev->checkpt_cur_block < 0) {
ok = 0;
- else {
+ break;
+ }
- chunk = dev->checkpointCurrentBlock * dev->nChunksPerBlock +
- dev->checkpointCurrentChunk;
+ chunk = dev->checkpt_cur_block *
+ dev->param.chunks_per_block +
+ dev->checkpt_cur_chunk;
- realignedChunk = chunk - dev->chunkOffset;
+ realigned_chunk = chunk - dev->chunk_offset;
+ dev->n_page_reads++;
- /* read in the next chunk */
- /* printf("read checkpoint page %d\n",dev->checkpointPage); */
- dev->readChunkWithTagsFromNAND(dev, realignedChunk,
- dev->checkpointBuffer,
- &tags);
+ /* read in the next chunk */
+ dev->param.read_chunk_tags_fn(dev,
+ realigned_chunk,
+ dev->checkpt_buffer,
+ &tags);
- if(tags.chunkId != (dev->checkpointPageSequence + 1) ||
- tags.sequenceNumber != YAFFS_SEQUENCE_CHECKPOINT_DATA)
- ok = 0;
+ if (tags.chunk_id != (dev->checkpt_page_seq + 1) ||
+ tags.ecc_result > YAFFS_ECC_RESULT_FIXED ||
+ tags.seq_number != YAFFS_SEQUENCE_CHECKPOINT_DATA) {
+ ok = 0;
+ break;
+ }
- dev->checkpointByteOffset = 0;
- dev->checkpointPageSequence++;
- dev->checkpointCurrentChunk++;
+ dev->checkpt_byte_offs = 0;
+ dev->checkpt_page_seq++;
+ dev->checkpt_cur_chunk++;
- if(dev->checkpointCurrentChunk >= dev->nChunksPerBlock)
- dev->checkpointCurrentBlock = -1;
- }
+ if (dev->checkpt_cur_chunk >=
+ dev->param.chunks_per_block)
+ dev->checkpt_cur_block = -1;
}
- if(ok){
- *dataBytes = dev->checkpointBuffer[dev->checkpointByteOffset];
- dev->checkpointSum += *dataBytes;
- dev->checkpointXor ^= *dataBytes;
- dev->checkpointByteOffset++;
- i++;
- dataBytes++;
- dev->checkpointByteCount++;
- }
+ *data_bytes = dev->checkpt_buffer[dev->checkpt_byte_offs];
+ dev->checkpt_sum += *data_bytes;
+ dev->checkpt_xor ^= *data_bytes;
+ dev->checkpt_byte_offs++;
+ i++;
+ data_bytes++;
+ dev->checkpt_byte_count++;
}
- return i;
+ return i;
}
-int yaffs_CheckpointClose(yaffs_Device *dev)
+int yaffs_checkpt_close(struct yaffs_dev *dev)
{
+ int i;
- if(dev->checkpointOpenForWrite){
- if(dev->checkpointByteOffset != 0)
- yaffs_CheckpointFlushBuffer(dev);
- } else {
- int i;
- for(i = 0; i < dev->blocksInCheckpoint && dev->checkpointBlockList[i] >= 0; i++){
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,dev->checkpointBlockList[i]);
- if(bi->blockState == YAFFS_BLOCK_STATE_EMPTY)
- bi->blockState = YAFFS_BLOCK_STATE_CHECKPOINT;
- else {
- // Todo this looks odd...
- }
+ if (dev->checkpt_open_write) {
+ if (dev->checkpt_byte_offs != 0)
+ yaffs2_checkpt_flush_buffer(dev);
+ } else if (dev->checkpt_block_list) {
+ for (i = 0;
+ i < dev->blocks_in_checkpt &&
+ dev->checkpt_block_list[i] >= 0; i++) {
+ int blk = dev->checkpt_block_list[i];
+ struct yaffs_block_info *bi = NULL;
+
+ if (dev->internal_start_block <= blk &&
+ blk <= dev->internal_end_block)
+ bi = yaffs_get_block_info(dev, blk);
+ if (bi && bi->block_state == YAFFS_BLOCK_STATE_EMPTY)
+ bi->block_state = YAFFS_BLOCK_STATE_CHECKPOINT;
}
- YFREE(dev->checkpointBlockList);
- dev->checkpointBlockList = NULL;
+ kfree(dev->checkpt_block_list);
+ dev->checkpt_block_list = NULL;
}
- dev->nFreeChunks -= dev->blocksInCheckpoint * dev->nChunksPerBlock;
- dev->nErasedBlocks -= dev->blocksInCheckpoint;
+ dev->n_free_chunks -=
+ dev->blocks_in_checkpt * dev->param.chunks_per_block;
+ dev->n_erased_blocks -= dev->blocks_in_checkpt;
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT, "checkpoint byte count %d",
+ dev->checkpt_byte_count);
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint byte count %d" TENDSTR),
- dev->checkpointByteCount));
-
- if(dev->checkpointBuffer){
+ if (dev->checkpt_buffer) {
/* free the buffer */
- YFREE(dev->checkpointBuffer);
- dev->checkpointBuffer = NULL;
+ kfree(dev->checkpt_buffer);
+ dev->checkpt_buffer = NULL;
return 1;
- }
- else
+ } else {
return 0;
-
+ }
}
-int yaffs_CheckpointInvalidateStream(yaffs_Device *dev)
+int yaffs2_checkpt_invalidate_stream(struct yaffs_dev *dev)
{
- /* Erase the first checksum block */
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("checkpoint invalidate"TENDSTR)));
+ /* Erase the checkpoint data */
- if(!yaffs_CheckpointSpaceOk(dev))
- return 0;
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "checkpoint invalidate of %d blocks",
+ dev->blocks_in_checkpt);
- return yaffs_CheckpointErase(dev);
+ return yaffs_checkpt_erase(dev);
}
diff --git a/fs/yaffs2/yaffs_checkptrw.h b/fs/yaffs2/yaffs_checkptrw.h
index e59d151a27..cdbaba7153 100644
--- a/fs/yaffs2/yaffs_checkptrw.h
+++ b/fs/yaffs2/yaffs_checkptrw.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -18,17 +18,16 @@
#include "yaffs_guts.h"
-int yaffs_CheckpointOpen(yaffs_Device *dev, int forWriting);
+int yaffs2_checkpt_open(struct yaffs_dev *dev, int writing);
-int yaffs_CheckpointWrite(yaffs_Device *dev,const void *data, int nBytes);
+int yaffs2_checkpt_wr(struct yaffs_dev *dev, const void *data, int n_bytes);
-int yaffs_CheckpointRead(yaffs_Device *dev,void *data, int nBytes);
+int yaffs2_checkpt_rd(struct yaffs_dev *dev, void *data, int n_bytes);
-int yaffs_GetCheckpointSum(yaffs_Device *dev, __u32 *sum);
+int yaffs2_get_checkpt_sum(struct yaffs_dev *dev, u32 * sum);
-int yaffs_CheckpointClose(yaffs_Device *dev);
-
-int yaffs_CheckpointInvalidateStream(yaffs_Device *dev);
+int yaffs_checkpt_close(struct yaffs_dev *dev);
+int yaffs2_checkpt_invalidate_stream(struct yaffs_dev *dev);
#endif
diff --git a/fs/yaffs2/yaffs_ecc.c b/fs/yaffs2/yaffs_ecc.c
index 1b4a05d71b..9294107c15 100644
--- a/fs/yaffs2/yaffs_ecc.c
+++ b/fs/yaffs2/yaffs_ecc.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -16,28 +16,22 @@
*
* The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
* The two unused bit are set to 1.
- * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
- * blocks are used on a 512-byte NAND page.
+ * The ECC can correct single bit errors in a 256-byte page of data. Thus, two
+ * such ECC blocks are used on a 512-byte NAND page.
*
*/
+#include "yportenv.h"
+
+#include "yaffs_ecc.h"
+
/* Table generated by gen-ecc.c
* Using a table means we do not have to calculate p1..p4 and p1'..p4'
* for each byte of data. These are instead provided in a table in bits7..2.
- * Bit 0 of each entry indicates whether the entry has an odd or even parity, and therefore
- * this bytes influence on the line parity.
+ * Bit 0 of each entry indicates whether the entry has an odd or even parity,
+ * and therefore this bytes influence on the line parity.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-const char *yaffs_ecc_c_version =
- "$Id: yaffs_ecc.c,v 1.9 2007/02/14 01:09:06 wookey Exp $";
-
-#include "yportenv.h"
-
-#include "yaffs_ecc.h"
-
static const unsigned char column_parity_table[] = {
0x00, 0x55, 0x59, 0x0c, 0x65, 0x30, 0x3c, 0x69,
0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
@@ -73,35 +67,11 @@ static const unsigned char column_parity_table[] = {
0x69, 0x3c, 0x30, 0x65, 0x0c, 0x59, 0x55, 0x00,
};
-/* Count the bits in an unsigned char or a U32 */
-
-static int yaffs_CountBits(unsigned char x)
-{
- int r = 0;
- while (x) {
- if (x & 1)
- r++;
- x >>= 1;
- }
- return r;
-}
-
-static int yaffs_CountBits32(unsigned x)
-{
- int r = 0;
- while (x) {
- if (x & 1)
- r++;
- x >>= 1;
- }
- return r;
-}
/* Calculate the ECC for a 256-byte block of data */
-void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc)
+void yaffs_ecc_calc(const unsigned char *data, unsigned char *ecc)
{
unsigned int i;
-
unsigned char col_parity = 0;
unsigned char line_parity = 0;
unsigned char line_parity_prime = 0;
@@ -112,12 +82,10 @@ void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc)
b = column_parity_table[*data++];
col_parity ^= b;
- if (b & 0x01) // odd number of bits in the byte
- {
+ if (b & 0x01) { /* odd number of bits in the byte */
line_parity ^= i;
line_parity_prime ^= ~i;
}
-
}
ecc[2] = (~col_parity) | 0x03;
@@ -160,19 +128,12 @@ void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc)
t |= 0x01;
ecc[0] = ~t;
-#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
- // Swap the bytes into the wrong order
- t = ecc[0];
- ecc[0] = ecc[1];
- ecc[1] = t;
-#endif
}
-
/* Correct the ECC on a 256 byte block of data */
-int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
- const unsigned char *test_ecc)
+int yaffs_ecc_correct(unsigned char *data, unsigned char *read_ecc,
+ const unsigned char *test_ecc)
{
unsigned char d0, d1, d2; /* deltas */
@@ -181,7 +142,7 @@ int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
d2 = read_ecc[2] ^ test_ecc[2];
if ((d0 | d1 | d2) == 0)
- return 0; /* no error */
+ return 0; /* no error */
if (((d0 ^ (d0 >> 1)) & 0x55) == 0x55 &&
((d1 ^ (d1 >> 1)) & 0x55) == 0x55 &&
@@ -191,15 +152,6 @@ int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
unsigned byte;
unsigned bit;
-#ifdef CONFIG_YAFFS_ECC_WRONG_ORDER
- // swap the bytes to correct for the wrong order
- unsigned char t;
-
- t = d0;
- d0 = d1;
- d1 = t;
-#endif
-
bit = byte = 0;
if (d1 & 0x80)
@@ -228,19 +180,17 @@ int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
data[byte] ^= (1 << bit);
- return 1; /* Corrected the error */
+ return 1; /* Corrected the error */
}
- if ((yaffs_CountBits(d0) +
- yaffs_CountBits(d1) +
- yaffs_CountBits(d2)) == 1) {
+ if ((hweight8(d0) + hweight8(d1) + hweight8(d2)) == 1) {
/* Reccoverable error in ecc */
read_ecc[0] = test_ecc[0];
read_ecc[1] = test_ecc[1];
read_ecc[2] = test_ecc[2];
- return 1; /* Corrected the error */
+ return 1; /* Corrected the error */
}
/* Unrecoverable error */
@@ -249,25 +199,23 @@ int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
}
-
/*
* ECCxxxOther does ECC calcs on arbitrary n bytes of data
*/
-void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
- yaffs_ECCOther * eccOther)
+void yaffs_ecc_calc_other(const unsigned char *data, unsigned n_bytes,
+ struct yaffs_ecc_other *ecc_other)
{
unsigned int i;
-
unsigned char col_parity = 0;
unsigned line_parity = 0;
unsigned line_parity_prime = 0;
unsigned char b;
- for (i = 0; i < nBytes; i++) {
+ for (i = 0; i < n_bytes; i++) {
b = column_parity_table[*data++];
col_parity ^= b;
- if (b & 0x01) {
+ if (b & 0x01) {
/* odd number of bits in the byte */
line_parity ^= i;
line_parity_prime ^= ~i;
@@ -275,59 +223,59 @@ void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
}
- eccOther->colParity = (col_parity >> 2) & 0x3f;
- eccOther->lineParity = line_parity;
- eccOther->lineParityPrime = line_parity_prime;
+ ecc_other->col_parity = (col_parity >> 2) & 0x3f;
+ ecc_other->line_parity = line_parity;
+ ecc_other->line_parity_prime = line_parity_prime;
}
-int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
- yaffs_ECCOther * read_ecc,
- const yaffs_ECCOther * test_ecc)
+int yaffs_ecc_correct_other(unsigned char *data, unsigned n_bytes,
+ struct yaffs_ecc_other *read_ecc,
+ const struct yaffs_ecc_other *test_ecc)
{
- unsigned char cDelta; /* column parity delta */
- unsigned lDelta; /* line parity delta */
- unsigned lDeltaPrime; /* line parity delta */
+ unsigned char delta_col; /* column parity delta */
+ unsigned delta_line; /* line parity delta */
+ unsigned delta_line_prime; /* line parity delta */
unsigned bit;
- cDelta = read_ecc->colParity ^ test_ecc->colParity;
- lDelta = read_ecc->lineParity ^ test_ecc->lineParity;
- lDeltaPrime = read_ecc->lineParityPrime ^ test_ecc->lineParityPrime;
+ delta_col = read_ecc->col_parity ^ test_ecc->col_parity;
+ delta_line = read_ecc->line_parity ^ test_ecc->line_parity;
+ delta_line_prime =
+ read_ecc->line_parity_prime ^ test_ecc->line_parity_prime;
- if ((cDelta | lDelta | lDeltaPrime) == 0)
- return 0; /* no error */
+ if ((delta_col | delta_line | delta_line_prime) == 0)
+ return 0; /* no error */
- if (lDelta == ~lDeltaPrime &&
- (((cDelta ^ (cDelta >> 1)) & 0x15) == 0x15))
- {
+ if (delta_line == ~delta_line_prime &&
+ (((delta_col ^ (delta_col >> 1)) & 0x15) == 0x15)) {
/* Single bit (recoverable) error in data */
bit = 0;
- if (cDelta & 0x20)
+ if (delta_col & 0x20)
bit |= 0x04;
- if (cDelta & 0x08)
+ if (delta_col & 0x08)
bit |= 0x02;
- if (cDelta & 0x02)
+ if (delta_col & 0x02)
bit |= 0x01;
- if(lDelta >= nBytes)
+ if (delta_line >= n_bytes)
return -1;
- data[lDelta] ^= (1 << bit);
+ data[delta_line] ^= (1 << bit);
- return 1; /* corrected */
+ return 1; /* corrected */
}
- if ((yaffs_CountBits32(lDelta) + yaffs_CountBits32(lDeltaPrime) +
- yaffs_CountBits(cDelta)) == 1) {
+ if ((hweight32(delta_line) +
+ hweight32(delta_line_prime) +
+ hweight8(delta_col)) == 1) {
/* Reccoverable error in ecc */
*read_ecc = *test_ecc;
- return 1; /* corrected */
+ return 1; /* corrected */
}
/* Unrecoverable error */
return -1;
-
}
diff --git a/fs/yaffs2/yaffs_ecc.h b/fs/yaffs2/yaffs_ecc.h
index 79bc3d1171..17d47bd80f 100644
--- a/fs/yaffs2/yaffs_ecc.h
+++ b/fs/yaffs2/yaffs_ecc.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -13,32 +13,32 @@
* Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
*/
- /*
- * This code implements the ECC algorithm used in SmartMedia.
- *
- * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
- * The two unused bit are set to 1.
- * The ECC can correct single bit errors in a 256-byte page of data. Thus, two such ECC
- * blocks are used on a 512-byte NAND page.
- *
- */
+/*
+ * This code implements the ECC algorithm used in SmartMedia.
+ *
+ * The ECC comprises 22 bits of parity information and is stuffed into 3 bytes.
+ * The two unused bit are set to 1.
+ * The ECC can correct single bit errors in a 256-byte page of data.
+ * Thus, two such ECC blocks are used on a 512-byte NAND page.
+ *
+ */
#ifndef __YAFFS_ECC_H__
#define __YAFFS_ECC_H__
-typedef struct {
- unsigned char colParity;
- unsigned lineParity;
- unsigned lineParityPrime;
-} yaffs_ECCOther;
+struct yaffs_ecc_other {
+ unsigned char col_parity;
+ unsigned line_parity;
+ unsigned line_parity_prime;
+};
-void yaffs_ECCCalculate(const unsigned char *data, unsigned char *ecc);
-int yaffs_ECCCorrect(unsigned char *data, unsigned char *read_ecc,
- const unsigned char *test_ecc);
+void yaffs_ecc_calc(const unsigned char *data, unsigned char *ecc);
+int yaffs_ecc_correct(unsigned char *data, unsigned char *read_ecc,
+ const unsigned char *test_ecc);
-void yaffs_ECCCalculateOther(const unsigned char *data, unsigned nBytes,
- yaffs_ECCOther * ecc);
-int yaffs_ECCCorrectOther(unsigned char *data, unsigned nBytes,
- yaffs_ECCOther * read_ecc,
- const yaffs_ECCOther * test_ecc);
+void yaffs_ecc_calc_other(const unsigned char *data, unsigned n_bytes,
+ struct yaffs_ecc_other *ecc);
+int yaffs_ecc_correct_other(unsigned char *data, unsigned n_bytes,
+ struct yaffs_ecc_other *read_ecc,
+ const struct yaffs_ecc_other *test_ecc);
#endif
diff --git a/fs/yaffs2/yaffs_error.c b/fs/yaffs2/yaffs_error.c
new file mode 100644
index 0000000000..11b75f7a0b
--- /dev/null
+++ b/fs/yaffs2/yaffs_error.c
@@ -0,0 +1,58 @@
+/*
+ * YAFFS: Yet another FFS. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Timothy Manning <timothy@yaffs.net>
+ *
+ * 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 "yaffsfs.h"
+
+struct error_entry {
+ int code;
+ const char *text;
+};
+
+static const struct error_entry error_list[] = {
+ { ENOMEM , "ENOMEM" },
+ { EBUSY , "EBUSY"},
+ { ENODEV , "ENODEV"},
+ { EINVAL , "EINVAL"},
+ { EBADF , "EBADF"},
+ { EACCES , "EACCES"},
+ { EXDEV , "EXDEV" },
+ { ENOENT , "ENOENT"},
+ { ENOSPC , "ENOSPC"},
+ { ERANGE , "ERANGE"},
+ { ENODATA, "ENODATA"},
+ { ENOTEMPTY, "ENOTEMPTY"},
+ { ENAMETOOLONG, "ENAMETOOLONG"},
+ { ENOMEM , "ENOMEM"},
+ { EEXIST , "EEXIST"},
+ { ENOTDIR , "ENOTDIR"},
+ { EISDIR , "EISDIR"},
+ { ENFILE, "ENFILE"},
+ { EROFS, "EROFS"},
+ { EFAULT, "EFAULT"},
+ { 0, NULL }
+};
+
+const char *yaffs_error_to_str(int err)
+{
+ const struct error_entry *e = error_list;
+
+ if (err < 0)
+ err = -err;
+
+ while (e->code && e->text) {
+ if (err == e->code)
+ return e->text;
+ e++;
+ }
+ return "Unknown error code";
+}
diff --git a/fs/yaffs2/yaffs_flashif.h b/fs/yaffs2/yaffs_flashif.h
index 4e5157e252..e6e8979ee6 100644
--- a/fs/yaffs2/yaffs_flashif.h
+++ b/fs/yaffs2/yaffs_flashif.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -18,14 +18,18 @@
#include "yaffs_guts.h"
-int yflash_EraseBlockInNAND(yaffs_Device *dev, int blockNumber);
-int yflash_WriteChunkToNAND(yaffs_Device *dev,int chunkInNAND,const __u8 *data, const yaffs_Spare *spare);
-int yflash_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u8 *data, yaffs_ExtendedTags *tags);
-int yflash_ReadChunkFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_Spare *spare);
-int yflash_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_ExtendedTags *tags);
-int yflash_EraseBlockInNAND(yaffs_Device *dev, int blockNumber);
-int yflash_InitialiseNAND(yaffs_Device *dev);
-int yflash_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
-int yflash_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo, yaffs_BlockState *state, int *sequenceNumber);
+int yflash_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber);
+int yflash_WriteChunkToNAND(struct yaffs_dev *dev, int nand_chunk,
+ const u8 *data, const struct yaffs_spare *spare);
+int yflash_WriteChunkWithTagsToNAND(struct yaffs_dev *dev, int nand_chunk,
+ const u8 *data, const struct yaffs_ext_tags *tags);
+int yflash_ReadChunkFromNAND(struct yaffs_dev *dev, int nand_chunk,
+ u8 *data, struct yaffs_spare *spare);
+int yflash_ReadChunkWithTagsFromNAND(struct yaffs_dev *dev, int nand_chunk,
+ u8 *data, struct yaffs_ext_tags *tags);
+int yflash_InitialiseNAND(struct yaffs_dev *dev);
+int yflash_MarkNANDBlockBad(struct yaffs_dev *dev, int block_no);
+int yflash_QueryNANDBlock(struct yaffs_dev *dev, int block_no,
+ enum yaffs_block_state *state, u32 *seq_number);
#endif
diff --git a/fs/yaffs2/yaffs_flashif2.h b/fs/yaffs2/yaffs_flashif2.h
new file mode 100644
index 0000000000..cfdbde9dc8
--- /dev/null
+++ b/fs/yaffs2/yaffs_flashif2.h
@@ -0,0 +1,35 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YAFFS_FLASH2_H__
+#define __YAFFS_FLASH2_H__
+
+
+#include "yaffs_guts.h"
+int yflash2_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber);
+int yflash2_WriteChunkToNAND(struct yaffs_dev *dev, int nand_chunk,
+ const u8 *data, const struct yaffs_spare *spare);
+int yflash2_WriteChunkWithTagsToNAND(struct yaffs_dev *dev, int nand_chunk,
+ const u8 *data, const struct yaffs_ext_tags *tags);
+int yflash2_ReadChunkFromNAND(struct yaffs_dev *dev, int nand_chunk,
+ u8 *data, struct yaffs_spare *spare);
+int yflash2_ReadChunkWithTagsFromNAND(struct yaffs_dev *dev, int nand_chunk,
+ u8 *data, struct yaffs_ext_tags *tags);
+int yflash2_InitialiseNAND(struct yaffs_dev *dev);
+int yflash2_MarkNANDBlockBad(struct yaffs_dev *dev, int block_no);
+int yflash2_QueryNANDBlock(struct yaffs_dev *dev, int block_no,
+ enum yaffs_block_state *state, u32 *seq_number);
+
+#endif
diff --git a/fs/yaffs2/yaffs_getblockinfo.h b/fs/yaffs2/yaffs_getblockinfo.h
new file mode 100644
index 0000000000..8fd0802bdd
--- /dev/null
+++ b/fs/yaffs2/yaffs_getblockinfo.h
@@ -0,0 +1,35 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YAFFS_GETBLOCKINFO_H__
+#define __YAFFS_GETBLOCKINFO_H__
+
+#include "yaffs_guts.h"
+#include "yaffs_trace.h"
+
+/* Function to manipulate block info */
+static inline struct yaffs_block_info *yaffs_get_block_info(struct yaffs_dev
+ *dev, int blk)
+{
+ if (blk < dev->internal_start_block || blk > dev->internal_end_block) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>> yaffs: get_block_info block %d is not valid",
+ blk);
+ BUG();
+ }
+ return &dev->block_info[blk - dev->internal_start_block];
+}
+
+#endif
diff --git a/fs/yaffs2/yaffs_guts.c b/fs/yaffs2/yaffs_guts.c
index 7390b40e01..21441fd991 100644
--- a/fs/yaffs2/yaffs_guts.c
+++ b/fs/yaffs2/yaffs_guts.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -11,259 +11,176 @@
* published by the Free Software Foundation.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-const char *yaffs_guts_c_version =
- "$Id: yaffs_guts.c,v 1.52 2007/10/16 00:45:05 charles Exp $";
-
#include "yportenv.h"
-#include "linux/stat.h"
+#include "yaffs_trace.h"
-#include "yaffsinterface.h"
-#include "yaffsfs.h"
#include "yaffs_guts.h"
-#include "yaffs_tagsvalidity.h"
-
+#include "yaffs_getblockinfo.h"
#include "yaffs_tagscompat.h"
-#ifndef CONFIG_YAFFS_USE_OWN_SORT
-#include "yaffs_qsort.h"
-#endif
#include "yaffs_nand.h"
-
-#include "yaffs_checkptrw.h"
-
+#include "yaffs_yaffs1.h"
+#include "yaffs_yaffs2.h"
+#include "yaffs_bitmap.h"
+#include "yaffs_verify.h"
#include "yaffs_nand.h"
#include "yaffs_packedtags2.h"
+#include "yaffs_nameval.h"
+#include "yaffs_allocator.h"
+#include "yaffs_attribs.h"
+#include "yaffs_summary.h"
-#include "malloc.h"
-
-#ifdef CONFIG_YAFFS_WINCE
-void yfsd_LockYAFFS(BOOL fsLockOnly);
-void yfsd_UnlockYAFFS(BOOL fsLockOnly);
-#endif
-
-#define YAFFS_PASSIVE_GC_CHUNKS 2
+/* Note YAFFS_GC_GOOD_ENOUGH must be <= YAFFS_GC_PASSIVE_THRESHOLD */
+#define YAFFS_GC_GOOD_ENOUGH 2
+#define YAFFS_GC_PASSIVE_THRESHOLD 4
#include "yaffs_ecc.h"
+/* Forward declarations */
-/* Robustification (if it ever comes about...) */
-static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND);
-static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk);
-static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags * tags);
-static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
- const yaffs_ExtendedTags * tags);
-
-/* Other local prototypes */
-static int yaffs_UnlinkObject( yaffs_Object *obj);
-static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj);
-
-static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList);
-
-static int yaffs_WriteNewChunkWithTagsToNAND(yaffs_Device * dev,
- const __u8 * buffer,
- yaffs_ExtendedTags * tags,
- int useReserve);
-static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
- int chunkInNAND, int inScan);
-
-static yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
- yaffs_ObjectType type);
-static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
- yaffs_Object * obj);
-static int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name,
- int force, int isShrink, int shadows);
-static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj);
-static int yaffs_CheckStructures(void);
-static int yaffs_DoGenericObjectDeletion(yaffs_Object * in);
-
-static yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blockNo);
-
-static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo);
-static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
- int lineNo);
-
-static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
- int chunkInNAND);
-
-static int yaffs_UnlinkWorker(yaffs_Object * obj);
-static void yaffs_DestroyObject(yaffs_Object * obj);
-
-static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
- int chunkInObject);
+static int yaffs_wr_data_obj(struct yaffs_obj *in, int inode_chunk,
+ const u8 *buffer, int n_bytes, int use_reserve);
-loff_t yaffs_GetFileSize(yaffs_Object * obj);
-static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr);
-static void yaffs_VerifyFreeChunks(yaffs_Device * dev);
-
-static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in);
-
-#ifdef YAFFS_PARANOID
-static int yaffs_CheckFileSanity(yaffs_Object * in);
-#else
-#define yaffs_CheckFileSanity(in)
-#endif
+/* Function to calculate chunk and offset */
-static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in);
-static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId);
+void yaffs_addr_to_chunk(struct yaffs_dev *dev, loff_t addr,
+ int *chunk_out, u32 *offset_out)
+{
+ int chunk;
+ u32 offset;
-static void yaffs_InvalidateCheckpoint(yaffs_Device *dev);
+ chunk = (u32) (addr >> dev->chunk_shift);
-static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
- yaffs_ExtendedTags * tags);
+ if (dev->chunk_div == 1) {
+ /* easy power of 2 case */
+ offset = (u32) (addr & dev->chunk_mask);
+ } else {
+ /* Non power-of-2 case */
-static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos);
-static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
- yaffs_FileStructure * fStruct,
- __u32 chunkId);
+ loff_t chunk_base;
+ chunk /= dev->chunk_div;
-/* Function to calculate chunk and offset */
-
-static void yaffs_AddrToChunk(yaffs_Device *dev, loff_t addr, __u32 *chunk, __u32 *offset)
-{
- if(dev->chunkShift){
- /* Easy-peasy power of 2 case */
- *chunk = (__u32)(addr >> dev->chunkShift);
- *offset = (__u32)(addr & dev->chunkMask);
- }
- else if(dev->crumbsPerChunk)
- {
- /* Case where we're using "crumbs" */
- *offset = (__u32)(addr & dev->crumbMask);
- addr >>= dev->crumbShift;
- *chunk = ((__u32)addr)/dev->crumbsPerChunk;
- *offset += ((addr - (*chunk * dev->crumbsPerChunk)) << dev->crumbShift);
+ chunk_base = ((loff_t) chunk) * dev->data_bytes_per_chunk;
+ offset = (u32) (addr - chunk_base);
}
- else
- YBUG();
+
+ *chunk_out = chunk;
+ *offset_out = offset;
}
-/* Function to return the number of shifts for a power of 2 greater than or equal
- * to the given number
+/* Function to return the number of shifts for a power of 2 greater than or
+ * equal to the given number
* Note we don't try to cater for all possible numbers and this does not have to
* be hellishly efficient.
*/
-static __u32 ShiftsGE(__u32 x)
+static inline u32 calc_shifts_ceiling(u32 x)
{
- int extraBits;
- int nShifts;
+ int extra_bits;
+ int shifts;
- nShifts = extraBits = 0;
+ shifts = extra_bits = 0;
- while(x>1){
- if(x & 1) extraBits++;
- x>>=1;
- nShifts++;
+ while (x > 1) {
+ if (x & 1)
+ extra_bits++;
+ x >>= 1;
+ shifts++;
}
- if(extraBits)
- nShifts++;
+ if (extra_bits)
+ shifts++;
- return nShifts;
+ return shifts;
}
/* Function to return the number of shifts to get a 1 in bit 0
*/
-static __u32 ShiftDiv(__u32 x)
+static inline u32 calc_shifts(u32 x)
{
- int nShifts;
+ u32 shifts;
- nShifts = 0;
+ shifts = 0;
- if(!x) return 0;
+ if (!x)
+ return 0;
- while( !(x&1)){
- x>>=1;
- nShifts++;
+ while (!(x & 1)) {
+ x >>= 1;
+ shifts++;
}
- return nShifts;
+ return shifts;
}
-
-
/*
* Temporary buffer manipulations.
*/
-static int yaffs_InitialiseTempBuffers(yaffs_Device *dev)
+static int yaffs_init_tmp_buffers(struct yaffs_dev *dev)
{
int i;
- __u8 *buf = (__u8 *)1;
+ u8 *buf = (u8 *) 1;
- memset(dev->tempBuffer,0,sizeof(dev->tempBuffer));
+ memset(dev->temp_buffer, 0, sizeof(dev->temp_buffer));
for (i = 0; buf && i < YAFFS_N_TEMP_BUFFERS; i++) {
- dev->tempBuffer[i].line = 0; /* not in use */
- dev->tempBuffer[i].buffer = buf =
- YMALLOC_DMA(dev->nDataBytesPerChunk);
+ dev->temp_buffer[i].in_use = 0;
+ buf = kmalloc(dev->param.total_bytes_per_chunk, GFP_NOFS);
+ dev->temp_buffer[i].buffer = buf;
}
return buf ? YAFFS_OK : YAFFS_FAIL;
-
}
-static __u8 *yaffs_GetTempBuffer(yaffs_Device * dev, int lineNo)
+u8 *yaffs_get_temp_buffer(struct yaffs_dev * dev)
{
- int i, j;
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- if (dev->tempBuffer[i].line == 0) {
- dev->tempBuffer[i].line = lineNo;
- if ((i + 1) > dev->maxTemp) {
- dev->maxTemp = i + 1;
- for (j = 0; j <= i; j++)
- dev->tempBuffer[j].maxLine =
- dev->tempBuffer[j].line;
- }
+ int i;
- return dev->tempBuffer[i].buffer;
- }
- }
+ dev->temp_in_use++;
+ if (dev->temp_in_use > dev->max_temp)
+ dev->max_temp = dev->temp_in_use;
- T(YAFFS_TRACE_BUFFERS,
- (TSTR("Out of temp buffers at line %d, other held by lines:"),
- lineNo));
for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- T(YAFFS_TRACE_BUFFERS, (TSTR(" %d "), dev->tempBuffer[i].line));
+ if (dev->temp_buffer[i].in_use == 0) {
+ dev->temp_buffer[i].in_use = 1;
+ return dev->temp_buffer[i].buffer;
+ }
}
- T(YAFFS_TRACE_BUFFERS, (TSTR(" " TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_BUFFERS, "Out of temp buffers");
/*
* If we got here then we have to allocate an unmanaged one
* This is not good.
*/
- dev->unmanagedTempAllocations++;
- return YMALLOC(dev->nDataBytesPerChunk);
+ dev->unmanaged_buffer_allocs++;
+ return kmalloc(dev->data_bytes_per_chunk, GFP_NOFS);
}
-static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
- int lineNo)
+void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer)
{
int i;
+
+ dev->temp_in_use--;
+
for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- if (dev->tempBuffer[i].buffer == buffer) {
- dev->tempBuffer[i].line = 0;
+ if (dev->temp_buffer[i].buffer == buffer) {
+ dev->temp_buffer[i].in_use = 0;
return;
}
}
if (buffer) {
/* assume it is an unmanaged one. */
- T(YAFFS_TRACE_BUFFERS,
- (TSTR("Releasing unmanaged temp buffer in line %d" TENDSTR),
- lineNo));
- YFREE(buffer);
- dev->unmanagedTempDeallocations++;
+ yaffs_trace(YAFFS_TRACE_BUFFERS,
+ "Releasing unmanaged temp buffer");
+ kfree(buffer);
+ dev->unmanaged_buffer_deallocs++;
}
}
@@ -271,621 +188,337 @@ static void yaffs_ReleaseTempBuffer(yaffs_Device * dev, __u8 * buffer,
/*
* Determine if we have a managed buffer.
*/
-int yaffs_IsManagedTempBuffer(yaffs_Device * dev, const __u8 * buffer)
+int yaffs_is_managed_tmp_buffer(struct yaffs_dev *dev, const u8 *buffer)
{
int i;
+
for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- if (dev->tempBuffer[i].buffer == buffer)
+ if (dev->temp_buffer[i].buffer == buffer)
return 1;
-
}
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if( dev->srCache[i].data == buffer )
- return 1;
-
- }
+ for (i = 0; i < dev->param.n_caches; i++) {
+ if (dev->cache[i].data == buffer)
+ return 1;
+ }
- if (buffer == dev->checkpointBuffer)
- return 1;
+ if (buffer == dev->checkpt_buffer)
+ return 1;
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: unmaged buffer detected.\n" TENDSTR)));
- return 0;
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "yaffs: unmaged buffer detected.");
+ return 0;
}
-
-
/*
- * Chunk bitmap manipulations
+ * Functions for robustisizing TODO
+ *
*/
-static Y_INLINE __u8 *yaffs_BlockBits(yaffs_Device * dev, int blk)
+static void yaffs_handle_chunk_wr_ok(struct yaffs_dev *dev, int nand_chunk,
+ const u8 *data,
+ const struct yaffs_ext_tags *tags)
{
- if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> yaffs: BlockBits block %d is not valid" TENDSTR),
- blk));
- YBUG();
- }
- return dev->chunkBits +
- (dev->chunkBitmapStride * (blk - dev->internalStartBlock));
+ dev = dev;
+ nand_chunk = nand_chunk;
+ data = data;
+ tags = tags;
}
-static Y_INLINE void yaffs_VerifyChunkBitId(yaffs_Device *dev, int blk, int chunk)
+static void yaffs_handle_chunk_update(struct yaffs_dev *dev, int nand_chunk,
+ const struct yaffs_ext_tags *tags)
{
- if(blk < dev->internalStartBlock || blk > dev->internalEndBlock ||
- chunk < 0 || chunk >= dev->nChunksPerBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> yaffs: Chunk Id (%d:%d) invalid"TENDSTR),blk,chunk));
- YBUG();
- }
-}
-
-static Y_INLINE void yaffs_ClearChunkBits(yaffs_Device * dev, int blk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
-
- memset(blkBits, 0, dev->chunkBitmapStride);
+ dev = dev;
+ nand_chunk = nand_chunk;
+ tags = tags;
}
-static Y_INLINE void yaffs_ClearChunkBit(yaffs_Device * dev, int blk, int chunk)
+void yaffs_handle_chunk_error(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi)
{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
+ if (!bi->gc_prioritise) {
+ bi->gc_prioritise = 1;
+ dev->has_pending_prioritised_gc = 1;
+ bi->chunk_error_strikes++;
- yaffs_VerifyChunkBitId(dev,blk,chunk);
+ if (bi->chunk_error_strikes > 3) {
+ bi->needs_retiring = 1; /* Too many stikes, so retire */
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "yaffs: Block struck out");
- blkBits[chunk / 8] &= ~(1 << (chunk & 7));
-}
-
-static Y_INLINE void yaffs_SetChunkBit(yaffs_Device * dev, int blk, int chunk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
-
- yaffs_VerifyChunkBitId(dev,blk,chunk);
-
- blkBits[chunk / 8] |= (1 << (chunk & 7));
+ }
+ }
}
-static Y_INLINE int yaffs_CheckChunkBit(yaffs_Device * dev, int blk, int chunk)
+static void yaffs_handle_chunk_wr_error(struct yaffs_dev *dev, int nand_chunk,
+ int erased_ok)
{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
- yaffs_VerifyChunkBitId(dev,blk,chunk);
+ int flash_block = nand_chunk / dev->param.chunks_per_block;
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, flash_block);
- return (blkBits[chunk / 8] & (1 << (chunk & 7))) ? 1 : 0;
-}
+ yaffs_handle_chunk_error(dev, bi);
-static Y_INLINE int yaffs_StillSomeChunkBits(yaffs_Device * dev, int blk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
- int i;
- for (i = 0; i < dev->chunkBitmapStride; i++) {
- if (*blkBits)
- return 1;
- blkBits++;
+ if (erased_ok) {
+ /* Was an actual write failure,
+ * so mark the block for retirement.*/
+ bi->needs_retiring = 1;
+ yaffs_trace(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
+ "**>> Block %d needs retiring", flash_block);
}
- return 0;
-}
-
-static int yaffs_CountChunkBits(yaffs_Device * dev, int blk)
-{
- __u8 *blkBits = yaffs_BlockBits(dev, blk);
- int i;
- int n = 0;
- for (i = 0; i < dev->chunkBitmapStride; i++) {
- __u8 x = *blkBits;
- while(x){
- if(x & 1)
- n++;
- x >>=1;
- }
- blkBits++;
- }
- return n;
+ /* Delete the chunk */
+ yaffs_chunk_del(dev, nand_chunk, 1, __LINE__);
+ yaffs_skip_rest_of_block(dev);
}
/*
* Verification code
*/
-static Y_INLINE int yaffs_SkipVerification(yaffs_Device *dev)
-{
- return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY | YAFFS_TRACE_VERIFY_FULL));
-}
-
-static Y_INLINE int yaffs_SkipFullVerification(yaffs_Device *dev)
-{
- return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_FULL));
-}
+/*
+ * Simple hash function. Needs to have a reasonable spread
+ */
-static Y_INLINE int yaffs_SkipNANDVerification(yaffs_Device *dev)
+static inline int yaffs_hash_fn(int n)
{
- return !(yaffs_traceMask & (YAFFS_TRACE_VERIFY_NAND));
+ if (n < 0)
+ n = -n;
+ return n % YAFFS_NOBJECT_BUCKETS;
}
-static const char * blockStateName[] = {
-"Unknown",
-"Needs scanning",
-"Scanning",
-"Empty",
-"Allocating",
-"Full",
-"Dirty",
-"Checkpoint",
-"Collecting",
-"Dead"
-};
+/*
+ * Access functions to useful fake objects.
+ * Note that root might have a presence in NAND if permissions are set.
+ */
-static void yaffs_VerifyBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
+struct yaffs_obj *yaffs_root(struct yaffs_dev *dev)
{
- int actuallyUsed;
- int inUse;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- /* Report illegal runtime states */
- if(bi->blockState <0 || bi->blockState >= YAFFS_NUMBER_OF_BLOCK_STATES)
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has undefined state %d"TENDSTR),n,bi->blockState));
-
- switch(bi->blockState){
- case YAFFS_BLOCK_STATE_UNKNOWN:
- case YAFFS_BLOCK_STATE_SCANNING:
- case YAFFS_BLOCK_STATE_NEEDS_SCANNING:
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has bad run-state %s"TENDSTR),
- n,blockStateName[bi->blockState]));
- }
-
- /* Check pages in use and soft deletions are legal */
-
- actuallyUsed = bi->pagesInUse - bi->softDeletions;
-
- if(bi->pagesInUse < 0 || bi->pagesInUse > dev->nChunksPerBlock ||
- bi->softDeletions < 0 || bi->softDeletions > dev->nChunksPerBlock ||
- actuallyUsed < 0 || actuallyUsed > dev->nChunksPerBlock)
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has illegal values pagesInUsed %d softDeletions %d"TENDSTR),
- n,bi->pagesInUse,bi->softDeletions));
-
-
- /* Check chunk bitmap legal */
- inUse = yaffs_CountChunkBits(dev,n);
- if(inUse != bi->pagesInUse)
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has inconsistent values pagesInUse %d counted chunk bits %d"TENDSTR),
- n,bi->pagesInUse,inUse));
-
- /* Check that the sequence number is valid.
- * Ten million is legal, but is very unlikely
- */
- if(dev->isYaffs2 &&
- (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING || bi->blockState == YAFFS_BLOCK_STATE_FULL) &&
- (bi->sequenceNumber < YAFFS_LOWEST_SEQUENCE_NUMBER || bi->sequenceNumber > 10000000 ))
- T(YAFFS_TRACE_VERIFY,(TSTR("Block %d has suspect sequence number of %d"TENDSTR),
- n,bi->sequenceNumber));
-
+ return dev->root_dir;
}
-static void yaffs_VerifyCollectedBlock(yaffs_Device *dev,yaffs_BlockInfo *bi,int n)
+struct yaffs_obj *yaffs_lost_n_found(struct yaffs_dev *dev)
{
- yaffs_VerifyBlock(dev,bi,n);
+ return dev->lost_n_found;
+}
- /* After collection the block should be in the erased state */
- /* TODO: This will need to change if we do partial gc */
+/*
+ * Erased NAND checking functions
+ */
- if(bi->blockState != YAFFS_BLOCK_STATE_EMPTY){
- T(YAFFS_TRACE_ERROR,(TSTR("Block %d is in state %d after gc, should be erased"TENDSTR),
- n,bi->blockState));
+int yaffs_check_ff(u8 *buffer, int n_bytes)
+{
+ /* Horrible, slow implementation */
+ while (n_bytes--) {
+ if (*buffer != 0xff)
+ return 0;
+ buffer++;
}
+ return 1;
}
-static void yaffs_VerifyBlocks(yaffs_Device *dev)
+static int yaffs_check_chunk_erased(struct yaffs_dev *dev, int nand_chunk)
{
- int i;
- int nBlocksPerState[YAFFS_NUMBER_OF_BLOCK_STATES];
- int nIllegalBlockStates = 0;
-
-
- if(yaffs_SkipVerification(dev))
- return;
-
- memset(nBlocksPerState,0,sizeof(nBlocksPerState));
-
+ int retval = YAFFS_OK;
+ u8 *data = yaffs_get_temp_buffer(dev);
+ struct yaffs_ext_tags tags;
- for(i = dev->internalStartBlock; i <= dev->internalEndBlock; i++){
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev,i);
- yaffs_VerifyBlock(dev,bi,i);
+ yaffs_rd_chunk_tags_nand(dev, nand_chunk, data, &tags);
- if(bi->blockState >=0 && bi->blockState < YAFFS_NUMBER_OF_BLOCK_STATES)
- nBlocksPerState[bi->blockState]++;
- else
- nIllegalBlockStates++;
+ if (tags.ecc_result > YAFFS_ECC_RESULT_NO_ERROR)
+ retval = YAFFS_FAIL;
+ if (!yaffs_check_ff(data, dev->data_bytes_per_chunk) ||
+ tags.chunk_used) {
+ yaffs_trace(YAFFS_TRACE_NANDACCESS,
+ "Chunk %d not erased", nand_chunk);
+ retval = YAFFS_FAIL;
}
- T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
- T(YAFFS_TRACE_VERIFY,(TSTR("Block summary"TENDSTR)));
-
- T(YAFFS_TRACE_VERIFY,(TSTR("%d blocks have illegal states"TENDSTR),nIllegalBlockStates));
- if(nBlocksPerState[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
- T(YAFFS_TRACE_VERIFY,(TSTR("Too many allocating blocks"TENDSTR)));
-
- for(i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("%s %d blocks"TENDSTR),
- blockStateName[i],nBlocksPerState[i]));
-
- if(dev->blocksInCheckpoint != nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT])
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Checkpoint block count wrong dev %d count %d"TENDSTR),
- dev->blocksInCheckpoint, nBlocksPerState[YAFFS_BLOCK_STATE_CHECKPOINT]));
-
- if(dev->nErasedBlocks != nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY])
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Erased block count wrong dev %d count %d"TENDSTR),
- dev->nErasedBlocks, nBlocksPerState[YAFFS_BLOCK_STATE_EMPTY]));
-
- if(nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING] > 1)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Too many collecting blocks %d (max is 1)"TENDSTR),
- nBlocksPerState[YAFFS_BLOCK_STATE_COLLECTING]));
+ yaffs_release_temp_buffer(dev, data);
- T(YAFFS_TRACE_VERIFY,(TSTR(""TENDSTR)));
+ return retval;
}
-/*
- * Verify the object header. oh must be valid, but obj and tags may be NULL in which
- * case those tests will not be performed.
- */
-static void yaffs_VerifyObjectHeader(yaffs_Object *obj, yaffs_ObjectHeader *oh, yaffs_ExtendedTags *tags, int parentCheck)
+static int yaffs_verify_chunk_written(struct yaffs_dev *dev,
+ int nand_chunk,
+ const u8 *data,
+ struct yaffs_ext_tags *tags)
{
- if(yaffs_SkipVerification(obj->myDev))
- return;
-
- if(!(tags && obj && oh)){
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Verifying object header tags %x obj %x oh %x"TENDSTR),
- (__u32)tags,(__u32)obj,(__u32)oh));
- return;
- }
-
- if(oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
- oh->type > YAFFS_OBJECT_TYPE_MAX)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header type is illegal value 0x%x"TENDSTR),
- tags->objectId, oh->type));
-
- if(tags->objectId != obj->objectId)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header mismatch objectId %d"TENDSTR),
- tags->objectId, obj->objectId));
+ int retval = YAFFS_OK;
+ struct yaffs_ext_tags temp_tags;
+ u8 *buffer = yaffs_get_temp_buffer(dev);
+
+ yaffs_rd_chunk_tags_nand(dev, nand_chunk, buffer, &temp_tags);
+ if (memcmp(buffer, data, dev->data_bytes_per_chunk) ||
+ temp_tags.obj_id != tags->obj_id ||
+ temp_tags.chunk_id != tags->chunk_id ||
+ temp_tags.n_bytes != tags->n_bytes)
+ retval = YAFFS_FAIL;
+ yaffs_release_temp_buffer(dev, buffer);
- /*
- * Check that the object's parent ids match if parentCheck requested.
- *
- * Tests do not apply to the root object.
- */
-
- if(parentCheck && tags->objectId > 1 && !obj->parent)
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header mismatch parentId %d obj->parent is NULL"TENDSTR),
- tags->objectId, oh->parentObjectId));
+ return retval;
+}
- if(parentCheck && obj->parent &&
- oh->parentObjectId != obj->parent->objectId &&
- (oh->parentObjectId != YAFFS_OBJECTID_UNLINKED ||
- obj->parent->objectId != YAFFS_OBJECTID_DELETED))
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header mismatch parentId %d parentObjectId %d"TENDSTR),
- tags->objectId, oh->parentObjectId, obj->parent->objectId));
+int yaffs_check_alloc_available(struct yaffs_dev *dev, int n_chunks)
+{
+ int reserved_chunks;
+ int reserved_blocks = dev->param.n_reserved_blocks;
+ int checkpt_blocks;
+ checkpt_blocks = yaffs_calc_checkpt_blocks_required(dev);
- if(tags->objectId > 1 && oh->name[0] == 0) /* Null name */
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header name is NULL"TENDSTR),
- obj->objectId));
+ reserved_chunks =
+ (reserved_blocks + checkpt_blocks) * dev->param.chunks_per_block;
- if(tags->objectId > 1 && ((__u8)(oh->name[0])) == 0xff) /* Trashed name */
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d header name is 0xFF"TENDSTR),
- obj->objectId));
+ return (dev->n_free_chunks > (reserved_chunks + n_chunks));
}
-static void yaffs_VerifyFile(yaffs_Object *obj)
+static int yaffs_find_alloc_block(struct yaffs_dev *dev)
{
- int requiredTallness;
- int actualTallness;
- __u32 lastChunk;
- __u32 x;
- __u32 i;
- yaffs_Device *dev;
- yaffs_ExtendedTags tags;
- yaffs_Tnode *tn;
- __u32 objectId;
-
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
+ int i;
+ struct yaffs_block_info *bi;
- dev = obj->myDev;
- objectId = obj->objectId;
+ if (dev->n_erased_blocks < 1) {
+ /* Hoosterman we've got a problem.
+ * Can't get space to gc
+ */
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy: no more erased blocks");
- /* Check file size is consistent with tnode depth */
- lastChunk = obj->variant.fileVariant.fileSize / dev->nDataBytesPerChunk + 1;
- x = lastChunk >> YAFFS_TNODES_LEVEL0_BITS;
- requiredTallness = 0;
- while (x> 0) {
- x >>= YAFFS_TNODES_INTERNAL_BITS;
- requiredTallness++;
+ return -1;
}
- actualTallness = obj->variant.fileVariant.topLevel;
-
- if(requiredTallness > actualTallness )
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d had tnode tallness %d, needs to be %d"TENDSTR),
- obj->objectId,actualTallness, requiredTallness));
-
-
- /* Check that the chunks in the tnode tree are all correct.
- * We do this by scanning through the tnode tree and
- * checking the tags for every chunk match.
- */
-
- if(yaffs_SkipNANDVerification(dev))
- return;
+ /* Find an empty block. */
- for(i = 1; i <= lastChunk; i++){
- tn = yaffs_FindLevel0Tnode(dev, &obj->variant.fileVariant,i);
-
- if (tn) {
- __u32 theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
- if(theChunk > 0){
- /* T(~0,(TSTR("verifying (%d:%d) %d"TENDSTR),objectId,i,theChunk)); */
- yaffs_ReadChunkWithTagsFromNAND(dev,theChunk,NULL, &tags);
- if(tags.objectId != objectId || tags.chunkId != i){
- T(~0,(TSTR("Object %d chunkId %d NAND mismatch chunk %d tags (%d:%d)"TENDSTR),
- objectId, i, theChunk,
- tags.objectId, tags.chunkId));
- }
- }
+ for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) {
+ dev->alloc_block_finder++;
+ if (dev->alloc_block_finder < dev->internal_start_block
+ || dev->alloc_block_finder > dev->internal_end_block) {
+ dev->alloc_block_finder = dev->internal_start_block;
}
+ bi = yaffs_get_block_info(dev, dev->alloc_block_finder);
+
+ if (bi->block_state == YAFFS_BLOCK_STATE_EMPTY) {
+ bi->block_state = YAFFS_BLOCK_STATE_ALLOCATING;
+ dev->seq_number++;
+ bi->seq_number = dev->seq_number;
+ dev->n_erased_blocks--;
+ yaffs_trace(YAFFS_TRACE_ALLOCATE,
+ "Allocated block %d, seq %d, %d left" ,
+ dev->alloc_block_finder, dev->seq_number,
+ dev->n_erased_blocks);
+ return dev->alloc_block_finder;
+ }
}
-}
-
-static void yaffs_VerifyDirectory(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-
-}
-
-static void yaffs_VerifyHardLink(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-
- /* Verify sane equivalent object */
-}
-
-static void yaffs_VerifySymlink(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
-
- /* Verify symlink string */
-}
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "yaffs tragedy: no more erased blocks, but there should have been %d",
+ dev->n_erased_blocks);
-static void yaffs_VerifySpecial(yaffs_Object *obj)
-{
- if(obj && yaffs_SkipVerification(obj->myDev))
- return;
+ return -1;
}
-static void yaffs_VerifyObject(yaffs_Object *obj)
+static int yaffs_alloc_chunk(struct yaffs_dev *dev, int use_reserver,
+ struct yaffs_block_info **block_ptr)
{
- yaffs_Device *dev;
-
- __u32 chunkMin;
- __u32 chunkMax;
-
- __u32 chunkIdOk;
- __u32 chunkIsLive;
+ int ret_val;
+ struct yaffs_block_info *bi;
- if(!obj)
- return;
-
- dev = obj->myDev;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- /* Check sane object header chunk */
-
- chunkMin = dev->internalStartBlock * dev->nChunksPerBlock;
- chunkMax = (dev->internalEndBlock+1) * dev->nChunksPerBlock - 1;
+ if (dev->alloc_block < 0) {
+ /* Get next block to allocate off */
+ dev->alloc_block = yaffs_find_alloc_block(dev);
+ dev->alloc_page = 0;
+ }
- chunkIdOk = (obj->chunkId >= chunkMin && obj->chunkId <= chunkMax);
- chunkIsLive = chunkIdOk &&
- yaffs_CheckChunkBit(dev,
- obj->chunkId / dev->nChunksPerBlock,
- obj->chunkId % dev->nChunksPerBlock);
- if(!obj->fake &&
- (!chunkIdOk || !chunkIsLive)) {
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d has chunkId %d %s %s"TENDSTR),
- obj->objectId,obj->chunkId,
- chunkIdOk ? "" : ",out of range",
- chunkIsLive || !chunkIdOk ? "" : ",marked as deleted"));
+ if (!use_reserver && !yaffs_check_alloc_available(dev, 1)) {
+ /* No space unless we're allowed to use the reserve. */
+ return -1;
}
- if(chunkIdOk && chunkIsLive &&!yaffs_SkipNANDVerification(dev)) {
- yaffs_ExtendedTags tags;
- yaffs_ObjectHeader *oh;
- __u8 *buffer = yaffs_GetTempBuffer(dev,__LINE__);
+ if (dev->n_erased_blocks < dev->param.n_reserved_blocks
+ && dev->alloc_page == 0)
+ yaffs_trace(YAFFS_TRACE_ALLOCATE, "Allocating reserve");
- oh = (yaffs_ObjectHeader *)buffer;
+ /* Next page please.... */
+ if (dev->alloc_block >= 0) {
+ bi = yaffs_get_block_info(dev, dev->alloc_block);
- yaffs_ReadChunkWithTagsFromNAND(dev, obj->chunkId,buffer, &tags);
+ ret_val = (dev->alloc_block * dev->param.chunks_per_block) +
+ dev->alloc_page;
+ bi->pages_in_use++;
+ yaffs_set_chunk_bit(dev, dev->alloc_block, dev->alloc_page);
- yaffs_VerifyObjectHeader(obj,oh,&tags,1);
+ dev->alloc_page++;
- yaffs_ReleaseTempBuffer(dev,buffer,__LINE__);
- }
+ dev->n_free_chunks--;
- /* Verify it has a parent */
- if(obj && !obj->fake &&
- (!obj->parent || obj->parent->myDev != dev)){
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d has parent pointer %p which does not look like an object"TENDSTR),
- obj->objectId,obj->parent));
- }
+ /* If the block is full set the state to full */
+ if (dev->alloc_page >= dev->param.chunks_per_block) {
+ bi->block_state = YAFFS_BLOCK_STATE_FULL;
+ dev->alloc_block = -1;
+ }
- /* Verify parent is a directory */
- if(obj->parent && obj->parent->variantType != YAFFS_OBJECT_TYPE_DIRECTORY){
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d's parent is not a directory (type %d)"TENDSTR),
- obj->objectId,obj->parent->variantType));
- }
+ if (block_ptr)
+ *block_ptr = bi;
- switch(obj->variantType){
- case YAFFS_OBJECT_TYPE_FILE:
- yaffs_VerifyFile(obj);
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- yaffs_VerifySymlink(obj);
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- yaffs_VerifyDirectory(obj);
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- yaffs_VerifyHardLink(obj);
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- yaffs_VerifySpecial(obj);
- break;
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- default:
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Obj %d has illegaltype %d"TENDSTR),
- obj->objectId,obj->variantType));
- break;
+ return ret_val;
}
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!");
+ return -1;
}
-static void yaffs_VerifyObjects(yaffs_Device *dev)
+static int yaffs_get_erased_chunks(struct yaffs_dev *dev)
{
- yaffs_Object *obj;
- int i;
- struct list_head *lh;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- /* Iterate through the objects in each hash entry */
-
- for(i = 0; i < YAFFS_NOBJECT_BUCKETS; i++){
- list_for_each(lh, &dev->objectBucket[i].list) {
- if (lh) {
- obj = list_entry(lh, yaffs_Object, hashLink);
- yaffs_VerifyObject(obj);
- }
- }
- }
+ int n;
-}
+ n = dev->n_erased_blocks * dev->param.chunks_per_block;
+ if (dev->alloc_block > 0)
+ n += (dev->param.chunks_per_block - dev->alloc_page);
-/*
- * Simple hash function. Needs to have a reasonable spread
- */
+ return n;
-static Y_INLINE int yaffs_HashFunction(int n)
-{
-/* XXX U-BOOT XXX */
- /*n = abs(n); */
- if (n < 0)
- n = -n;
- return (n % YAFFS_NOBJECT_BUCKETS);
}
/*
- * Access functions to useful fake objects
+ * yaffs_skip_rest_of_block() skips over the rest of the allocation block
+ * if we don't want to write to it.
*/
-
-yaffs_Object *yaffs_Root(yaffs_Device * dev)
+void yaffs_skip_rest_of_block(struct yaffs_dev *dev)
{
- return dev->rootDir;
-}
-
-yaffs_Object *yaffs_LostNFound(yaffs_Device * dev)
-{
- return dev->lostNFoundDir;
-}
-
-
-/*
- * Erased NAND checking functions
- */
+ struct yaffs_block_info *bi;
-int yaffs_CheckFF(__u8 * buffer, int nBytes)
-{
- /* Horrible, slow implementation */
- while (nBytes--) {
- if (*buffer != 0xFF)
- return 0;
- buffer++;
- }
- return 1;
-}
-
-static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
- int chunkInNAND)
-{
-
- int retval = YAFFS_OK;
- __u8 *data = yaffs_GetTempBuffer(dev, __LINE__);
- yaffs_ExtendedTags tags;
-
- yaffs_ReadChunkWithTagsFromNAND(dev, chunkInNAND, data, &tags);
-
- if(tags.eccResult > YAFFS_ECC_RESULT_NO_ERROR)
- retval = YAFFS_FAIL;
-
-
- if (!yaffs_CheckFF(data, dev->nDataBytesPerChunk) || tags.chunkUsed) {
- T(YAFFS_TRACE_NANDACCESS,
- (TSTR("Chunk %d not erased" TENDSTR), chunkInNAND));
- retval = YAFFS_FAIL;
+ if (dev->alloc_block > 0) {
+ bi = yaffs_get_block_info(dev, dev->alloc_block);
+ if (bi->block_state == YAFFS_BLOCK_STATE_ALLOCATING) {
+ bi->block_state = YAFFS_BLOCK_STATE_FULL;
+ dev->alloc_block = -1;
+ }
}
-
- yaffs_ReleaseTempBuffer(dev, data, __LINE__);
-
- return retval;
-
}
-static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
- const __u8 * data,
- yaffs_ExtendedTags * tags,
- int useReserve)
+static int yaffs_write_new_chunk(struct yaffs_dev *dev,
+ const u8 *data,
+ struct yaffs_ext_tags *tags, int use_reserver)
{
int attempts = 0;
- int writeOk = 0;
+ int write_ok = 0;
int chunk;
- yaffs_InvalidateCheckpoint(dev);
+ yaffs2_checkpt_invalidate(dev);
do {
- yaffs_BlockInfo *bi = 0;
- int erasedOk = 0;
+ struct yaffs_block_info *bi = 0;
+ int erased_ok = 0;
- chunk = yaffs_AllocateChunk(dev, useReserve, &bi);
+ chunk = yaffs_alloc_chunk(dev, use_reserver, &bi);
if (chunk < 0) {
/* no space */
break;
@@ -897,7 +530,7 @@ static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
*
* Check the first page we try to write in a block.
* If the check passes then we don't need to check any
- * more. If the check fails, we check again...
+ * more. If the check fails, we check again...
* If the block has been erased, we don't need to check.
*
* However, if the block has been prioritised for gc,
@@ -909,55 +542,63 @@ static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
* chunk due to power loss. This checking policy should
* catch that case with very few checks and thus save a
* lot of checks that are most likely not needed.
+ *
+ * Mods to the above
+ * If an erase check fails or the write fails we skip the
+ * rest of the block.
*/
- if (bi->gcPrioritise) {
- yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
- /* try another chunk */
- continue;
- }
/* let's give it a try */
attempts++;
-#ifdef CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED
- bi->skipErasedCheck = 0;
-#endif
- if (!bi->skipErasedCheck) {
- erasedOk = yaffs_CheckChunkErased(dev, chunk);
- if (erasedOk != YAFFS_OK) {
- T(YAFFS_TRACE_ERROR,
- (TSTR ("**>> yaffs chunk %d was not erased"
- TENDSTR), chunk));
-
- /* try another chunk */
+ if (dev->param.always_check_erased)
+ bi->skip_erased_check = 0;
+
+ if (!bi->skip_erased_check) {
+ erased_ok = yaffs_check_chunk_erased(dev, chunk);
+ if (erased_ok != YAFFS_OK) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>> yaffs chunk %d was not erased",
+ chunk);
+
+ /* If not erased, delete this one,
+ * skip rest of block and
+ * try another chunk */
+ yaffs_chunk_del(dev, chunk, 1, __LINE__);
+ yaffs_skip_rest_of_block(dev);
continue;
}
- bi->skipErasedCheck = 1;
}
- writeOk = yaffs_WriteChunkWithTagsToNAND(dev, chunk,
- data, tags);
- if (writeOk != YAFFS_OK) {
- yaffs_HandleWriteChunkError(dev, chunk, erasedOk);
- /* try another chunk */
+ write_ok = yaffs_wr_chunk_tags_nand(dev, chunk, data, tags);
+
+ if (!bi->skip_erased_check)
+ write_ok =
+ yaffs_verify_chunk_written(dev, chunk, data, tags);
+
+ if (write_ok != YAFFS_OK) {
+ /* Clean up aborted write, skip to next block and
+ * try another chunk */
+ yaffs_handle_chunk_wr_error(dev, chunk, erased_ok);
continue;
}
+ bi->skip_erased_check = 1;
+
/* Copy the data into the robustification buffer */
- yaffs_HandleWriteChunkOk(dev, chunk, data, tags);
+ yaffs_handle_chunk_wr_ok(dev, chunk, data, tags);
- } while (writeOk != YAFFS_OK &&
- (yaffs_wr_attempts <= 0 || attempts <= yaffs_wr_attempts));
+ } while (write_ok != YAFFS_OK &&
+ (yaffs_wr_attempts <= 0 || attempts <= yaffs_wr_attempts));
- if(!writeOk)
+ if (!write_ok)
chunk = -1;
if (attempts > 1) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> yaffs write required %d attempts" TENDSTR),
- attempts));
-
- dev->nRetriedWrites += (attempts - 1);
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>> yaffs write required %d attempts",
+ attempts);
+ dev->n_retried_writes += (attempts - 1);
}
return chunk;
@@ -967,109 +608,97 @@ static int yaffs_WriteNewChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
* Block retiring for handling a broken block.
*/
-static void yaffs_RetireBlock(yaffs_Device * dev, int blockInNAND)
+static void yaffs_retire_block(struct yaffs_dev *dev, int flash_block)
{
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, flash_block);
- yaffs_InvalidateCheckpoint(dev);
+ yaffs2_checkpt_invalidate(dev);
- yaffs_MarkBlockBad(dev, blockInNAND);
+ yaffs2_clear_oldest_dirty_seq(dev, bi);
- bi->blockState = YAFFS_BLOCK_STATE_DEAD;
- bi->gcPrioritise = 0;
- bi->needsRetiring = 0;
-
- dev->nRetiredBlocks++;
-}
+ if (yaffs_mark_bad(dev, flash_block) != YAFFS_OK) {
+ if (yaffs_erase_block(dev, flash_block) != YAFFS_OK) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "yaffs: Failed to mark bad and erase block %d",
+ flash_block);
+ } else {
+ struct yaffs_ext_tags tags;
+ int chunk_id =
+ flash_block * dev->param.chunks_per_block;
+
+ u8 *buffer = yaffs_get_temp_buffer(dev);
+
+ memset(buffer, 0xff, dev->data_bytes_per_chunk);
+ memset(&tags, 0, sizeof(tags));
+ tags.seq_number = YAFFS_SEQUENCE_BAD_BLOCK;
+ if (dev->param.write_chunk_tags_fn(dev, chunk_id -
+ dev->chunk_offset,
+ buffer,
+ &tags) != YAFFS_OK)
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "yaffs: Failed to write bad block marker to block %d",
+ flash_block);
+
+ yaffs_release_temp_buffer(dev, buffer);
+ }
+ }
-/*
- * Functions for robustisizing TODO
- *
- */
+ bi->block_state = YAFFS_BLOCK_STATE_DEAD;
+ bi->gc_prioritise = 0;
+ bi->needs_retiring = 0;
-static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags * tags)
-{
+ dev->n_retired_blocks++;
}
-static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
- const yaffs_ExtendedTags * tags)
-{
-}
+/*---------------- Name handling functions ------------*/
-void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi)
+static u16 yaffs_calc_name_sum(const YCHAR *name)
{
- if(!bi->gcPrioritise){
- bi->gcPrioritise = 1;
- dev->hasPendingPrioritisedGCs = 1;
- bi->chunkErrorStrikes ++;
+ u16 sum = 0;
+ u16 i = 1;
- if(bi->chunkErrorStrikes > 3){
- bi->needsRetiring = 1; /* Too many stikes, so retire this */
- T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Block struck out" TENDSTR)));
+ if (!name)
+ return 0;
- }
+ while ((*name) && i < (YAFFS_MAX_NAME_LENGTH / 2)) {
+ /* 0x1f mask is case insensitive */
+ sum += ((*name) & 0x1f) * i;
+ i++;
+ name++;
}
+ return sum;
}
-static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND, int erasedOk)
+void yaffs_set_obj_name(struct yaffs_obj *obj, const YCHAR * name)
{
-
- int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockInNAND);
-
- yaffs_HandleChunkError(dev,bi);
-
-
- if(erasedOk ) {
- /* Was an actual write failure, so mark the block for retirement */
- bi->needsRetiring = 1;
- T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("**>> Block %d needs retiring" TENDSTR), blockInNAND));
-
-
- }
-
- /* Delete the chunk */
- yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
+ memset(obj->short_name, 0, sizeof(obj->short_name));
+ if (name &&
+ yaffs_strnlen(name, YAFFS_SHORT_NAME_LENGTH + 1) <=
+ YAFFS_SHORT_NAME_LENGTH)
+ yaffs_strcpy(obj->short_name, name);
+ else
+ obj->short_name[0] = _Y('\0');
+ obj->sum = yaffs_calc_name_sum(name);
}
-
-/*---------------- Name handling functions ------------*/
-
-static __u16 yaffs_CalcNameSum(const YCHAR * name)
+void yaffs_set_obj_name_from_oh(struct yaffs_obj *obj,
+ const struct yaffs_obj_hdr *oh)
{
- __u16 sum = 0;
- __u16 i = 1;
-
- YUCHAR *bname = (YUCHAR *) name;
- if (bname) {
- while ((*bname) && (i < (YAFFS_MAX_NAME_LENGTH/2))) {
-
-#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
- sum += yaffs_toupper(*bname) * i;
+#ifdef CONFIG_YAFFS_AUTO_UNICODE
+ YCHAR tmp_name[YAFFS_MAX_NAME_LENGTH + 1];
+ memset(tmp_name, 0, sizeof(tmp_name));
+ yaffs_load_name_from_oh(obj->my_dev, tmp_name, oh->name,
+ YAFFS_MAX_NAME_LENGTH + 1);
+ yaffs_set_obj_name(obj, tmp_name);
#else
- sum += (*bname) * i;
+ yaffs_set_obj_name(obj, oh->name);
#endif
- i++;
- bname++;
- }
- }
- return sum;
}
-static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
+loff_t yaffs_max_file_size(struct yaffs_dev *dev)
{
-#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
- if (name && yaffs_strlen(name) <= YAFFS_SHORT_NAME_LENGTH) {
- yaffs_strcpy(obj->shortName, name);
- } else {
- obj->shortName[0] = _Y('\0');
- }
-#endif
- obj->sum = yaffs_CalcNameSum(name);
+ return ((loff_t) YAFFS_MAX_CHUNK_ID) * dev->data_bytes_per_chunk;
}
/*-------------------- TNODES -------------------
@@ -1079,381 +708,235 @@ static void yaffs_SetObjectName(yaffs_Object * obj, const YCHAR * name)
* in the tnode.
*/
-/* yaffs_CreateTnodes creates a bunch more tnodes and
- * adds them to the tnode free list.
- * Don't use this function directly
- */
-
-static int yaffs_CreateTnodes(yaffs_Device * dev, int nTnodes)
+struct yaffs_tnode *yaffs_get_tnode(struct yaffs_dev *dev)
{
- int i;
- int tnodeSize;
- yaffs_Tnode *newTnodes;
- __u8 *mem;
- yaffs_Tnode *curr;
- yaffs_Tnode *next;
- yaffs_TnodeList *tnl;
-
- if (nTnodes < 1)
- return YAFFS_OK;
-
- /* Calculate the tnode size in bytes for variable width tnode support.
- * Must be a multiple of 32-bits */
- tnodeSize = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-
- /* make these things */
-
- newTnodes = YMALLOC(nTnodes * tnodeSize);
- mem = (__u8 *)newTnodes;
-
- if (!newTnodes) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs: Could not allocate Tnodes" TENDSTR)));
- return YAFFS_FAIL;
- }
+ struct yaffs_tnode *tn = yaffs_alloc_raw_tnode(dev);
- /* Hook them into the free list */
-#if 0
- for (i = 0; i < nTnodes - 1; i++) {
- newTnodes[i].internal[0] = &newTnodes[i + 1];
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- newTnodes[i].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
-#endif
- }
-
- newTnodes[nTnodes - 1].internal[0] = dev->freeTnodes;
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- newTnodes[nTnodes - 1].internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
-#endif
- dev->freeTnodes = newTnodes;
-#else
- /* New hookup for wide tnodes */
- for(i = 0; i < nTnodes -1; i++) {
- curr = (yaffs_Tnode *) &mem[i * tnodeSize];
- next = (yaffs_Tnode *) &mem[(i+1) * tnodeSize];
- curr->internal[0] = next;
- }
-
- curr = (yaffs_Tnode *) &mem[(nTnodes - 1) * tnodeSize];
- curr->internal[0] = dev->freeTnodes;
- dev->freeTnodes = (yaffs_Tnode *)mem;
-
-#endif
-
-
- dev->nFreeTnodes += nTnodes;
- dev->nTnodesCreated += nTnodes;
-
- /* Now add this bunch of tnodes to a list for freeing up.
- * NB If we can't add this to the management list it isn't fatal
- * but it just means we can't free this bunch of tnodes later.
- */
-
- tnl = YMALLOC(sizeof(yaffs_TnodeList));
- if (!tnl) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs: Could not add tnodes to management list" TENDSTR)));
- return YAFFS_FAIL;
-
- } else {
- tnl->tnodes = newTnodes;
- tnl->next = dev->allocatedTnodeList;
- dev->allocatedTnodeList = tnl;
- }
-
- T(YAFFS_TRACE_ALLOCATE, (TSTR("yaffs: Tnodes added" TENDSTR)));
-
- return YAFFS_OK;
-}
-
-/* GetTnode gets us a clean tnode. Tries to make allocate more if we run out */
-
-static yaffs_Tnode *yaffs_GetTnodeRaw(yaffs_Device * dev)
-{
- yaffs_Tnode *tn = NULL;
-
- /* If there are none left make more */
- if (!dev->freeTnodes) {
- yaffs_CreateTnodes(dev, YAFFS_ALLOCATION_NTNODES);
- }
-
- if (dev->freeTnodes) {
- tn = dev->freeTnodes;
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- if (tn->internal[YAFFS_NTNODES_INTERNAL] != (void *)1) {
- /* Hoosterman, this thing looks like it isn't in the list */
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: Tnode list bug 1" TENDSTR)));
- }
-#endif
- dev->freeTnodes = dev->freeTnodes->internal[0];
- dev->nFreeTnodes--;
+ if (tn) {
+ memset(tn, 0, dev->tnode_size);
+ dev->n_tnodes++;
}
- return tn;
-}
-
-static yaffs_Tnode *yaffs_GetTnode(yaffs_Device * dev)
-{
- yaffs_Tnode *tn = yaffs_GetTnodeRaw(dev);
-
- if(tn)
- memset(tn, 0, (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
+ dev->checkpoint_blocks_required = 0; /* force recalculation */
return tn;
}
/* FreeTnode frees up a tnode and puts it back on the free list */
-static void yaffs_FreeTnode(yaffs_Device * dev, yaffs_Tnode * tn)
+static void yaffs_free_tnode(struct yaffs_dev *dev, struct yaffs_tnode *tn)
{
- if (tn) {
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- if (tn->internal[YAFFS_NTNODES_INTERNAL] != 0) {
- /* Hoosterman, this thing looks like it is already in the list */
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: Tnode list bug 2" TENDSTR)));
- }
- tn->internal[YAFFS_NTNODES_INTERNAL] = (void *)1;
-#endif
- tn->internal[0] = dev->freeTnodes;
- dev->freeTnodes = tn;
- dev->nFreeTnodes++;
- }
+ yaffs_free_raw_tnode(dev, tn);
+ dev->n_tnodes--;
+ dev->checkpoint_blocks_required = 0; /* force recalculation */
}
-static void yaffs_DeinitialiseTnodes(yaffs_Device * dev)
+static void yaffs_deinit_tnodes_and_objs(struct yaffs_dev *dev)
{
- /* Free the list of allocated tnodes */
- yaffs_TnodeList *tmp;
-
- while (dev->allocatedTnodeList) {
- tmp = dev->allocatedTnodeList->next;
-
- YFREE(dev->allocatedTnodeList->tnodes);
- YFREE(dev->allocatedTnodeList);
- dev->allocatedTnodeList = tmp;
-
- }
-
- dev->freeTnodes = NULL;
- dev->nFreeTnodes = 0;
+ yaffs_deinit_raw_tnodes_and_objs(dev);
+ dev->n_obj = 0;
+ dev->n_tnodes = 0;
}
-static void yaffs_InitialiseTnodes(yaffs_Device * dev)
+void yaffs_load_tnode_0(struct yaffs_dev *dev, struct yaffs_tnode *tn,
+ unsigned pos, unsigned val)
{
- dev->allocatedTnodeList = NULL;
- dev->freeTnodes = NULL;
- dev->nFreeTnodes = 0;
- dev->nTnodesCreated = 0;
+ u32 *map = (u32 *) tn;
+ u32 bit_in_map;
+ u32 bit_in_word;
+ u32 word_in_map;
+ u32 mask;
-}
-
-
-void yaffs_PutLevel0Tnode(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos, unsigned val)
-{
- __u32 *map = (__u32 *)tn;
- __u32 bitInMap;
- __u32 bitInWord;
- __u32 wordInMap;
- __u32 mask;
-
- pos &= YAFFS_TNODES_LEVEL0_MASK;
- val >>= dev->chunkGroupBits;
+ pos &= YAFFS_TNODES_LEVEL0_MASK;
+ val >>= dev->chunk_grp_bits;
- bitInMap = pos * dev->tnodeWidth;
- wordInMap = bitInMap /32;
- bitInWord = bitInMap & (32 -1);
+ bit_in_map = pos * dev->tnode_width;
+ word_in_map = bit_in_map / 32;
+ bit_in_word = bit_in_map & (32 - 1);
- mask = dev->tnodeMask << bitInWord;
+ mask = dev->tnode_mask << bit_in_word;
- map[wordInMap] &= ~mask;
- map[wordInMap] |= (mask & (val << bitInWord));
+ map[word_in_map] &= ~mask;
+ map[word_in_map] |= (mask & (val << bit_in_word));
- if(dev->tnodeWidth > (32-bitInWord)) {
- bitInWord = (32 - bitInWord);
- wordInMap++;;
- mask = dev->tnodeMask >> (/*dev->tnodeWidth -*/ bitInWord);
- map[wordInMap] &= ~mask;
- map[wordInMap] |= (mask & (val >> bitInWord));
- }
+ if (dev->tnode_width > (32 - bit_in_word)) {
+ bit_in_word = (32 - bit_in_word);
+ word_in_map++;
+ mask =
+ dev->tnode_mask >> bit_in_word;
+ map[word_in_map] &= ~mask;
+ map[word_in_map] |= (mask & (val >> bit_in_word));
+ }
}
-static __u32 yaffs_GetChunkGroupBase(yaffs_Device *dev, yaffs_Tnode *tn, unsigned pos)
+u32 yaffs_get_group_base(struct yaffs_dev *dev, struct yaffs_tnode *tn,
+ unsigned pos)
{
- __u32 *map = (__u32 *)tn;
- __u32 bitInMap;
- __u32 bitInWord;
- __u32 wordInMap;
- __u32 val;
+ u32 *map = (u32 *) tn;
+ u32 bit_in_map;
+ u32 bit_in_word;
+ u32 word_in_map;
+ u32 val;
- pos &= YAFFS_TNODES_LEVEL0_MASK;
+ pos &= YAFFS_TNODES_LEVEL0_MASK;
- bitInMap = pos * dev->tnodeWidth;
- wordInMap = bitInMap /32;
- bitInWord = bitInMap & (32 -1);
+ bit_in_map = pos * dev->tnode_width;
+ word_in_map = bit_in_map / 32;
+ bit_in_word = bit_in_map & (32 - 1);
- val = map[wordInMap] >> bitInWord;
+ val = map[word_in_map] >> bit_in_word;
- if(dev->tnodeWidth > (32-bitInWord)) {
- bitInWord = (32 - bitInWord);
- wordInMap++;;
- val |= (map[wordInMap] << bitInWord);
- }
+ if (dev->tnode_width > (32 - bit_in_word)) {
+ bit_in_word = (32 - bit_in_word);
+ word_in_map++;
+ val |= (map[word_in_map] << bit_in_word);
+ }
- val &= dev->tnodeMask;
- val <<= dev->chunkGroupBits;
+ val &= dev->tnode_mask;
+ val <<= dev->chunk_grp_bits;
- return val;
+ return val;
}
/* ------------------- End of individual tnode manipulation -----------------*/
/* ---------Functions to manipulate the look-up tree (made up of tnodes) ------
- * The look up tree is represented by the top tnode and the number of topLevel
+ * The look up tree is represented by the top tnode and the number of top_level
* in the tree. 0 means only the level 0 tnode is in the tree.
*/
/* FindLevel0Tnode finds the level 0 tnode, if one exists. */
-static yaffs_Tnode *yaffs_FindLevel0Tnode(yaffs_Device * dev,
- yaffs_FileStructure * fStruct,
- __u32 chunkId)
+struct yaffs_tnode *yaffs_find_tnode_0(struct yaffs_dev *dev,
+ struct yaffs_file_var *file_struct,
+ u32 chunk_id)
{
+ struct yaffs_tnode *tn = file_struct->top;
+ u32 i;
+ int required_depth;
+ int level = file_struct->top_level;
- yaffs_Tnode *tn = fStruct->top;
- __u32 i;
- int requiredTallness;
- int level = fStruct->topLevel;
+ dev = dev;
/* Check sane level and chunk Id */
- if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL) {
+ if (level < 0 || level > YAFFS_TNODES_MAX_LEVEL)
return NULL;
- }
- if (chunkId > YAFFS_MAX_CHUNK_ID) {
+ if (chunk_id > YAFFS_MAX_CHUNK_ID)
return NULL;
- }
- /* First check we're tall enough (ie enough topLevel) */
+ /* First check we're tall enough (ie enough top_level) */
- i = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
- requiredTallness = 0;
+ i = chunk_id >> YAFFS_TNODES_LEVEL0_BITS;
+ required_depth = 0;
while (i) {
i >>= YAFFS_TNODES_INTERNAL_BITS;
- requiredTallness++;
+ required_depth++;
}
- if (requiredTallness > fStruct->topLevel) {
- /* Not tall enough, so we can't find it, return NULL. */
- return NULL;
- }
+ if (required_depth > file_struct->top_level)
+ return NULL; /* Not tall enough, so we can't find it */
/* Traverse down to level 0 */
while (level > 0 && tn) {
- tn = tn->
- internal[(chunkId >>
- ( YAFFS_TNODES_LEVEL0_BITS +
- (level - 1) *
- YAFFS_TNODES_INTERNAL_BITS)
- ) &
- YAFFS_TNODES_INTERNAL_MASK];
+ tn = tn->internal[(chunk_id >>
+ (YAFFS_TNODES_LEVEL0_BITS +
+ (level - 1) *
+ YAFFS_TNODES_INTERNAL_BITS)) &
+ YAFFS_TNODES_INTERNAL_MASK];
level--;
-
}
return tn;
}
-/* AddOrFindLevel0Tnode finds the level 0 tnode if it exists, otherwise first expands the tree.
+/* add_find_tnode_0 finds the level 0 tnode if it exists,
+ * otherwise first expands the tree.
* This happens in two steps:
* 1. If the tree isn't tall enough, then make it taller.
* 2. Scan down the tree towards the level 0 tnode adding tnodes if required.
*
* Used when modifying the tree.
*
- * If the tn argument is NULL, then a fresh tnode will be added otherwise the specified tn will
- * be plugged into the ttree.
+ * If the tn argument is NULL, then a fresh tnode will be added otherwise the
+ * specified tn will be plugged into the ttree.
*/
-static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
- yaffs_FileStructure * fStruct,
- __u32 chunkId,
- yaffs_Tnode *passedTn)
+struct yaffs_tnode *yaffs_add_find_tnode_0(struct yaffs_dev *dev,
+ struct yaffs_file_var *file_struct,
+ u32 chunk_id,
+ struct yaffs_tnode *passed_tn)
{
-
- int requiredTallness;
+ int required_depth;
int i;
int l;
- yaffs_Tnode *tn;
-
- __u32 x;
-
+ struct yaffs_tnode *tn;
+ u32 x;
/* Check sane level and page Id */
- if (fStruct->topLevel < 0 || fStruct->topLevel > YAFFS_TNODES_MAX_LEVEL) {
+ if (file_struct->top_level < 0 ||
+ file_struct->top_level > YAFFS_TNODES_MAX_LEVEL)
return NULL;
- }
- if (chunkId > YAFFS_MAX_CHUNK_ID) {
+ if (chunk_id > YAFFS_MAX_CHUNK_ID)
return NULL;
- }
- /* First check we're tall enough (ie enough topLevel) */
+ /* First check we're tall enough (ie enough top_level) */
- x = chunkId >> YAFFS_TNODES_LEVEL0_BITS;
- requiredTallness = 0;
+ x = chunk_id >> YAFFS_TNODES_LEVEL0_BITS;
+ required_depth = 0;
while (x) {
x >>= YAFFS_TNODES_INTERNAL_BITS;
- requiredTallness++;
+ required_depth++;
}
+ if (required_depth > file_struct->top_level) {
+ /* Not tall enough, gotta make the tree taller */
+ for (i = file_struct->top_level; i < required_depth; i++) {
- if (requiredTallness > fStruct->topLevel) {
- /* Not tall enough,gotta make the tree taller */
- for (i = fStruct->topLevel; i < requiredTallness; i++) {
-
- tn = yaffs_GetTnode(dev);
+ tn = yaffs_get_tnode(dev);
if (tn) {
- tn->internal[0] = fStruct->top;
- fStruct->top = tn;
+ tn->internal[0] = file_struct->top;
+ file_struct->top = tn;
+ file_struct->top_level++;
} else {
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs: no more tnodes" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs: no more tnodes");
+ return NULL;
}
}
-
- fStruct->topLevel = requiredTallness;
}
/* Traverse down to level 0, adding anything we need */
- l = fStruct->topLevel;
- tn = fStruct->top;
+ l = file_struct->top_level;
+ tn = file_struct->top;
- if(l > 0) {
+ if (l > 0) {
while (l > 0 && tn) {
- x = (chunkId >>
- ( YAFFS_TNODES_LEVEL0_BITS +
+ x = (chunk_id >>
+ (YAFFS_TNODES_LEVEL0_BITS +
(l - 1) * YAFFS_TNODES_INTERNAL_BITS)) &
YAFFS_TNODES_INTERNAL_MASK;
-
- if((l>1) && !tn->internal[x]){
+ if ((l > 1) && !tn->internal[x]) {
/* Add missing non-level-zero tnode */
- tn->internal[x] = yaffs_GetTnode(dev);
-
- } else if(l == 1) {
+ tn->internal[x] = yaffs_get_tnode(dev);
+ if (!tn->internal[x])
+ return NULL;
+ } else if (l == 1) {
/* Looking from level 1 at level 0 */
- if (passedTn) {
- /* If we already have one, then release it.*/
- if(tn->internal[x])
- yaffs_FreeTnode(dev,tn->internal[x]);
- tn->internal[x] = passedTn;
-
- } else if(!tn->internal[x]) {
+ if (passed_tn) {
+ /* If we already have one, release it */
+ if (tn->internal[x])
+ yaffs_free_tnode(dev,
+ tn->internal[x]);
+ tn->internal[x] = passed_tn;
+
+ } else if (!tn->internal[x]) {
/* Don't have one, none passed in */
- tn->internal[x] = yaffs_GetTnode(dev);
+ tn->internal[x] = yaffs_get_tnode(dev);
+ if (!tn->internal[x])
+ return NULL;
}
}
@@ -1462,2979 +945,2471 @@ static yaffs_Tnode *yaffs_AddOrFindLevel0Tnode(yaffs_Device * dev,
}
} else {
/* top is level 0 */
- if(passedTn) {
- memcpy(tn,passedTn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
- yaffs_FreeTnode(dev,passedTn);
+ if (passed_tn) {
+ memcpy(tn, passed_tn,
+ (dev->tnode_width * YAFFS_NTNODES_LEVEL0) / 8);
+ yaffs_free_tnode(dev, passed_tn);
}
}
return tn;
}
-static int yaffs_FindChunkInGroup(yaffs_Device * dev, int theChunk,
- yaffs_ExtendedTags * tags, int objectId,
- int chunkInInode)
+static int yaffs_tags_match(const struct yaffs_ext_tags *tags, int obj_id,
+ int chunk_obj)
{
- int j;
+ return (tags->chunk_id == chunk_obj &&
+ tags->obj_id == obj_id &&
+ !tags->is_deleted) ? 1 : 0;
- for (j = 0; theChunk && j < dev->chunkGroupSize; j++) {
- if (yaffs_CheckChunkBit
- (dev, theChunk / dev->nChunksPerBlock,
- theChunk % dev->nChunksPerBlock)) {
- yaffs_ReadChunkWithTagsFromNAND(dev, theChunk, NULL,
- tags);
- if (yaffs_TagsMatch(tags, objectId, chunkInInode)) {
- /* found it; */
- return theChunk;
+}
+static int yaffs_find_chunk_in_group(struct yaffs_dev *dev, int the_chunk,
+ struct yaffs_ext_tags *tags, int obj_id,
+ int inode_chunk)
+{
+ int j;
+
+ for (j = 0; the_chunk && j < dev->chunk_grp_size; j++) {
+ if (yaffs_check_chunk_bit
+ (dev, the_chunk / dev->param.chunks_per_block,
+ the_chunk % dev->param.chunks_per_block)) {
+
+ if (dev->chunk_grp_size == 1)
+ return the_chunk;
+ else {
+ yaffs_rd_chunk_tags_nand(dev, the_chunk, NULL,
+ tags);
+ if (yaffs_tags_match(tags,
+ obj_id, inode_chunk)) {
+ /* found it; */
+ return the_chunk;
+ }
}
}
- theChunk++;
+ the_chunk++;
}
return -1;
}
-static void yaffs_SoftDeleteChunk(yaffs_Device * dev, int chunk)
+static int yaffs_find_chunk_in_file(struct yaffs_obj *in, int inode_chunk,
+ struct yaffs_ext_tags *tags)
{
+ /*Get the Tnode, then get the level 0 offset chunk offset */
+ struct yaffs_tnode *tn;
+ int the_chunk = -1;
+ struct yaffs_ext_tags local_tags;
+ int ret_val = -1;
+ struct yaffs_dev *dev = in->my_dev;
- yaffs_BlockInfo *theBlock;
-
- T(YAFFS_TRACE_DELETION, (TSTR("soft delete chunk %d" TENDSTR), chunk));
-
- theBlock = yaffs_GetBlockInfo(dev, chunk / dev->nChunksPerBlock);
- if (theBlock) {
- theBlock->softDeletions++;
- dev->nFreeChunks++;
+ if (!tags) {
+ /* Passed a NULL, so use our own tags space */
+ tags = &local_tags;
}
-}
-/* SoftDeleteWorker scans backwards through the tnode tree and soft deletes all the chunks in the file.
- * All soft deleting does is increment the block's softdelete count and pulls the chunk out
- * of the tnode.
- * Thus, essentially this is the same as DeleteWorker except that the chunks are soft deleted.
- */
+ tn = yaffs_find_tnode_0(dev, &in->variant.file_variant, inode_chunk);
-static int yaffs_SoftDeleteWorker(yaffs_Object * in, yaffs_Tnode * tn,
- __u32 level, int chunkOffset)
-{
- int i;
- int theChunk;
- int allDone = 1;
- yaffs_Device *dev = in->myDev;
+ if (!tn)
+ return ret_val;
- if (tn) {
- if (level > 0) {
-
- for (i = YAFFS_NTNODES_INTERNAL - 1; allDone && i >= 0;
- i--) {
- if (tn->internal[i]) {
- allDone =
- yaffs_SoftDeleteWorker(in,
- tn->
- internal[i],
- level - 1,
- (chunkOffset
- <<
- YAFFS_TNODES_INTERNAL_BITS)
- + i);
- if (allDone) {
- yaffs_FreeTnode(dev,
- tn->
- internal[i]);
- tn->internal[i] = NULL;
- } else {
- /* Hoosterman... how could this happen? */
- }
- }
- }
- return (allDone) ? 1 : 0;
- } else if (level == 0) {
-
- for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
- theChunk = yaffs_GetChunkGroupBase(dev,tn,i);
- if (theChunk) {
- /* Note this does not find the real chunk, only the chunk group.
- * We make an assumption that a chunk group is not larger than
- * a block.
- */
- yaffs_SoftDeleteChunk(dev, theChunk);
- yaffs_PutLevel0Tnode(dev,tn,i,0);
- }
-
- }
- return 1;
-
- }
-
- }
-
- return 1;
+ the_chunk = yaffs_get_group_base(dev, tn, inode_chunk);
+ ret_val = yaffs_find_chunk_in_group(dev, the_chunk, tags, in->obj_id,
+ inode_chunk);
+ return ret_val;
}
-static void yaffs_SoftDeleteFile(yaffs_Object * obj)
+static int yaffs_find_del_file_chunk(struct yaffs_obj *in, int inode_chunk,
+ struct yaffs_ext_tags *tags)
{
- if (obj->deleted &&
- obj->variantType == YAFFS_OBJECT_TYPE_FILE && !obj->softDeleted) {
- if (obj->nDataChunks <= 0) {
- /* Empty file with no duplicate object headers, just delete it immediately */
- yaffs_FreeTnode(obj->myDev,
- obj->variant.fileVariant.top);
- obj->variant.fileVariant.top = NULL;
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: Deleting empty file %d" TENDSTR),
- obj->objectId));
- yaffs_DoGenericObjectDeletion(obj);
- } else {
- yaffs_SoftDeleteWorker(obj,
- obj->variant.fileVariant.top,
- obj->variant.fileVariant.
- topLevel, 0);
- obj->softDeleted = 1;
- }
- }
-}
-
-/* Pruning removes any part of the file structure tree that is beyond the
- * bounds of the file (ie that does not point to chunks).
- *
- * A file should only get pruned when its size is reduced.
- *
- * Before pruning, the chunks must be pulled from the tree and the
- * level 0 tnode entries must be zeroed out.
- * Could also use this for file deletion, but that's probably better handled
- * by a special case.
- */
+ /* Get the Tnode, then get the level 0 offset chunk offset */
+ struct yaffs_tnode *tn;
+ int the_chunk = -1;
+ struct yaffs_ext_tags local_tags;
+ struct yaffs_dev *dev = in->my_dev;
+ int ret_val = -1;
-static yaffs_Tnode *yaffs_PruneWorker(yaffs_Device * dev, yaffs_Tnode * tn,
- __u32 level, int del0)
-{
- int i;
- int hasData;
+ if (!tags) {
+ /* Passed a NULL, so use our own tags space */
+ tags = &local_tags;
+ }
- if (tn) {
- hasData = 0;
+ tn = yaffs_find_tnode_0(dev, &in->variant.file_variant, inode_chunk);
- for (i = 0; i < YAFFS_NTNODES_INTERNAL; i++) {
- if (tn->internal[i] && level > 0) {
- tn->internal[i] =
- yaffs_PruneWorker(dev, tn->internal[i],
- level - 1,
- (i == 0) ? del0 : 1);
- }
-
- if (tn->internal[i]) {
- hasData++;
- }
- }
+ if (!tn)
+ return ret_val;
- if (hasData == 0 && del0) {
- /* Free and return NULL */
+ the_chunk = yaffs_get_group_base(dev, tn, inode_chunk);
- yaffs_FreeTnode(dev, tn);
- tn = NULL;
- }
+ ret_val = yaffs_find_chunk_in_group(dev, the_chunk, tags, in->obj_id,
+ inode_chunk);
- }
-
- return tn;
+ /* Delete the entry in the filestructure (if found) */
+ if (ret_val != -1)
+ yaffs_load_tnode_0(dev, tn, inode_chunk, 0);
+ return ret_val;
}
-static int yaffs_PruneFileStructure(yaffs_Device * dev,
- yaffs_FileStructure * fStruct)
+int yaffs_put_chunk_in_file(struct yaffs_obj *in, int inode_chunk,
+ int nand_chunk, int in_scan)
{
- int i;
- int hasData;
- int done = 0;
- yaffs_Tnode *tn;
+ /* NB in_scan is zero unless scanning.
+ * For forward scanning, in_scan is > 0;
+ * for backward scanning in_scan is < 0
+ *
+ * nand_chunk = 0 is a dummy insert to make sure the tnodes are there.
+ */
- if (fStruct->topLevel > 0) {
- fStruct->top =
- yaffs_PruneWorker(dev, fStruct->top, fStruct->topLevel, 0);
+ struct yaffs_tnode *tn;
+ struct yaffs_dev *dev = in->my_dev;
+ int existing_cunk;
+ struct yaffs_ext_tags existing_tags;
+ struct yaffs_ext_tags new_tags;
+ unsigned existing_serial, new_serial;
- /* Now we have a tree with all the non-zero branches NULL but the height
- * is the same as it was.
- * Let's see if we can trim internal tnodes to shorten the tree.
- * We can do this if only the 0th element in the tnode is in use
- * (ie all the non-zero are NULL)
+ if (in->variant_type != YAFFS_OBJECT_TYPE_FILE) {
+ /* Just ignore an attempt at putting a chunk into a non-file
+ * during scanning.
+ * If it is not during Scanning then something went wrong!
*/
-
- while (fStruct->topLevel && !done) {
- tn = fStruct->top;
-
- hasData = 0;
- for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
- if (tn->internal[i]) {
- hasData++;
- }
- }
-
- if (!hasData) {
- fStruct->top = tn->internal[0];
- fStruct->topLevel--;
- yaffs_FreeTnode(dev, tn);
- } else {
- done = 1;
- }
+ if (!in_scan) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy:attempt to put data chunk into a non-file"
+ );
+ BUG();
}
- }
-
- return YAFFS_OK;
-}
-/*-------------------- End of File Structure functions.-------------------*/
-
-/* yaffs_CreateFreeObjects creates a bunch more objects and
- * adds them to the object free list.
- */
-static int yaffs_CreateFreeObjects(yaffs_Device * dev, int nObjects)
-{
- int i;
- yaffs_Object *newObjects;
- yaffs_ObjectList *list;
-
- if (nObjects < 1)
+ yaffs_chunk_del(dev, nand_chunk, 1, __LINE__);
return YAFFS_OK;
-
- /* make these things */
- newObjects = YMALLOC(nObjects * sizeof(yaffs_Object));
- list = YMALLOC(sizeof(yaffs_ObjectList));
-
- if (!newObjects || !list) {
- if(newObjects)
- YFREE(newObjects);
- if(list)
- YFREE(list);
- T(YAFFS_TRACE_ALLOCATE,
- (TSTR("yaffs: Could not allocate more objects" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- /* Hook them into the free list */
- for (i = 0; i < nObjects - 1; i++) {
- newObjects[i].siblings.next =
- (struct list_head *)(&newObjects[i + 1]);
- }
-
- newObjects[nObjects - 1].siblings.next = (void *)dev->freeObjects;
- dev->freeObjects = newObjects;
- dev->nFreeObjects += nObjects;
- dev->nObjectsCreated += nObjects;
-
- /* Now add this bunch of Objects to a list for freeing up. */
-
- list->objects = newObjects;
- list->next = dev->allocatedObjectList;
- dev->allocatedObjectList = list;
-
- return YAFFS_OK;
-}
-
-
-/* AllocateEmptyObject gets us a clean Object. Tries to make allocate more if we run out */
-static yaffs_Object *yaffs_AllocateEmptyObject(yaffs_Device * dev)
-{
- yaffs_Object *tn = NULL;
-
- /* If there are none left make more */
- if (!dev->freeObjects) {
- yaffs_CreateFreeObjects(dev, YAFFS_ALLOCATION_NOBJECTS);
}
- if (dev->freeObjects) {
- tn = dev->freeObjects;
- dev->freeObjects =
- (yaffs_Object *) (dev->freeObjects->siblings.next);
- dev->nFreeObjects--;
+ tn = yaffs_add_find_tnode_0(dev,
+ &in->variant.file_variant,
+ inode_chunk, NULL);
+ if (!tn)
+ return YAFFS_FAIL;
- /* Now sweeten it up... */
+ if (!nand_chunk)
+ /* Dummy insert, bail now */
+ return YAFFS_OK;
- memset(tn, 0, sizeof(yaffs_Object));
- tn->myDev = dev;
- tn->chunkId = -1;
- tn->variantType = YAFFS_OBJECT_TYPE_UNKNOWN;
- INIT_LIST_HEAD(&(tn->hardLinks));
- INIT_LIST_HEAD(&(tn->hashLink));
- INIT_LIST_HEAD(&tn->siblings);
+ existing_cunk = yaffs_get_group_base(dev, tn, inode_chunk);
- /* Add it to the lost and found directory.
- * NB Can't put root or lostNFound in lostNFound so
- * check if lostNFound exists first
+ if (in_scan != 0) {
+ /* If we're scanning then we need to test for duplicates
+ * NB This does not need to be efficient since it should only
+ * happen when the power fails during a write, then only one
+ * chunk should ever be affected.
+ *
+ * Correction for YAFFS2: This could happen quite a lot and we
+ * need to think about efficiency! TODO
+ * Update: For backward scanning we don't need to re-read tags
+ * so this is quite cheap.
*/
- if (dev->lostNFoundDir) {
- yaffs_AddObjectToDirectory(dev->lostNFoundDir, tn);
- }
- }
- return tn;
-}
-
-static yaffs_Object *yaffs_CreateFakeDirectory(yaffs_Device * dev, int number,
- __u32 mode)
-{
+ if (existing_cunk > 0) {
+ /* NB Right now existing chunk will not be real
+ * chunk_id if the chunk group size > 1
+ * thus we have to do a FindChunkInFile to get the
+ * real chunk id.
+ *
+ * We have a duplicate now we need to decide which
+ * one to use:
+ *
+ * Backwards scanning YAFFS2: The old one is what
+ * we use, dump the new one.
+ * YAFFS1: Get both sets of tags and compare serial
+ * numbers.
+ */
- yaffs_Object *obj =
- yaffs_CreateNewObject(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
- if (obj) {
- obj->fake = 1; /* it is fake so it has no NAND presence... */
- obj->renameAllowed = 0; /* ... and we're not allowed to rename it... */
- obj->unlinkAllowed = 0; /* ... or unlink it */
- obj->deleted = 0;
- obj->unlinked = 0;
- obj->yst_mode = mode;
- obj->myDev = dev;
- obj->chunkId = 0; /* Not a valid chunk. */
- }
+ if (in_scan > 0) {
+ /* Only do this for forward scanning */
+ yaffs_rd_chunk_tags_nand(dev,
+ nand_chunk,
+ NULL, &new_tags);
- return obj;
+ /* Do a proper find */
+ existing_cunk =
+ yaffs_find_chunk_in_file(in, inode_chunk,
+ &existing_tags);
+ }
-}
+ if (existing_cunk <= 0) {
+ /*Hoosterman - how did this happen? */
-static void yaffs_UnhashObject(yaffs_Object * tn)
-{
- int bucket;
- yaffs_Device *dev = tn->myDev;
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy: existing chunk < 0 in scan"
+ );
- /* If it is still linked into the bucket list, free from the list */
- if (!list_empty(&tn->hashLink)) {
- list_del_init(&tn->hashLink);
- bucket = yaffs_HashFunction(tn->objectId);
- dev->objectBucket[bucket].count--;
- }
+ }
-}
+ /* NB The deleted flags should be false, otherwise
+ * the chunks will not be loaded during a scan
+ */
-/* FreeObject frees up a Object and puts it back on the free list */
-static void yaffs_FreeObject(yaffs_Object * tn)
-{
+ if (in_scan > 0) {
+ new_serial = new_tags.serial_number;
+ existing_serial = existing_tags.serial_number;
+ }
- yaffs_Device *dev = tn->myDev;
+ if ((in_scan > 0) &&
+ (existing_cunk <= 0 ||
+ ((existing_serial + 1) & 3) == new_serial)) {
+ /* Forward scanning.
+ * Use new
+ * Delete the old one and drop through to
+ * update the tnode
+ */
+ yaffs_chunk_del(dev, existing_cunk, 1,
+ __LINE__);
+ } else {
+ /* Backward scanning or we want to use the
+ * existing one
+ * Delete the new one and return early so that
+ * the tnode isn't changed
+ */
+ yaffs_chunk_del(dev, nand_chunk, 1, __LINE__);
+ return YAFFS_OK;
+ }
+ }
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
- if (tn->myInode) {
- /* We're still hooked up to a cached inode.
- * Don't delete now, but mark for later deletion
- */
- tn->deferedFree = 1;
- return;
}
-#endif
-#endif
- yaffs_UnhashObject(tn);
- /* Link into the free list. */
- tn->siblings.next = (struct list_head *)(dev->freeObjects);
- dev->freeObjects = tn;
- dev->nFreeObjects++;
-}
+ if (existing_cunk == 0)
+ in->n_data_chunks++;
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
+ yaffs_load_tnode_0(dev, tn, inode_chunk, nand_chunk);
-void yaffs_HandleDeferedFree(yaffs_Object * obj)
-{
- if (obj->deferedFree) {
- yaffs_FreeObject(obj);
- }
+ return YAFFS_OK;
}
-#endif
-#endif
-
-static void yaffs_DeinitialiseObjects(yaffs_Device * dev)
+static void yaffs_soft_del_chunk(struct yaffs_dev *dev, int chunk)
{
- /* Free the list of allocated Objects */
+ struct yaffs_block_info *the_block;
+ unsigned block_no;
- yaffs_ObjectList *tmp;
+ yaffs_trace(YAFFS_TRACE_DELETION, "soft delete chunk %d", chunk);
- while (dev->allocatedObjectList) {
- tmp = dev->allocatedObjectList->next;
- YFREE(dev->allocatedObjectList->objects);
- YFREE(dev->allocatedObjectList);
-
- dev->allocatedObjectList = tmp;
+ block_no = chunk / dev->param.chunks_per_block;
+ the_block = yaffs_get_block_info(dev, block_no);
+ if (the_block) {
+ the_block->soft_del_pages++;
+ dev->n_free_chunks++;
+ yaffs2_update_oldest_dirty_seq(dev, block_no, the_block);
}
-
- dev->freeObjects = NULL;
- dev->nFreeObjects = 0;
}
-static void yaffs_InitialiseObjects(yaffs_Device * dev)
-{
- int i;
-
- dev->allocatedObjectList = NULL;
- dev->freeObjects = NULL;
- dev->nFreeObjects = 0;
-
- for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
- INIT_LIST_HEAD(&dev->objectBucket[i].list);
- dev->objectBucket[i].count = 0;
- }
-
-}
+/* SoftDeleteWorker scans backwards through the tnode tree and soft deletes all
+ * the chunks in the file.
+ * All soft deleting does is increment the block's softdelete count and pulls
+ * the chunk out of the tnode.
+ * Thus, essentially this is the same as DeleteWorker except that the chunks
+ * are soft deleted.
+ */
-static int yaffs_FindNiceObjectBucket(yaffs_Device * dev)
+static int yaffs_soft_del_worker(struct yaffs_obj *in, struct yaffs_tnode *tn,
+ u32 level, int chunk_offset)
{
- static int x = 0;
int i;
- int l = 999;
- int lowest = 999999;
+ int the_chunk;
+ int all_done = 1;
+ struct yaffs_dev *dev = in->my_dev;
- /* First let's see if we can find one that's empty. */
+ if (!tn)
+ return 1;
- for (i = 0; i < 10 && lowest > 0; i++) {
- x++;
- x %= YAFFS_NOBJECT_BUCKETS;
- if (dev->objectBucket[x].count < lowest) {
- lowest = dev->objectBucket[x].count;
- l = x;
+ if (level > 0) {
+ for (i = YAFFS_NTNODES_INTERNAL - 1;
+ all_done && i >= 0;
+ i--) {
+ if (tn->internal[i]) {
+ all_done =
+ yaffs_soft_del_worker(in,
+ tn->internal[i],
+ level - 1,
+ (chunk_offset <<
+ YAFFS_TNODES_INTERNAL_BITS)
+ + i);
+ if (all_done) {
+ yaffs_free_tnode(dev,
+ tn->internal[i]);
+ tn->internal[i] = NULL;
+ } else {
+ /* Can this happen? */
+ }
+ }
}
-
+ return (all_done) ? 1 : 0;
}
- /* If we didn't find an empty list, then try
- * looking a bit further for a short one
- */
-
- for (i = 0; i < 10 && lowest > 3; i++) {
- x++;
- x %= YAFFS_NOBJECT_BUCKETS;
- if (dev->objectBucket[x].count < lowest) {
- lowest = dev->objectBucket[x].count;
- l = x;
+ /* level 0 */
+ for (i = YAFFS_NTNODES_LEVEL0 - 1; i >= 0; i--) {
+ the_chunk = yaffs_get_group_base(dev, tn, i);
+ if (the_chunk) {
+ yaffs_soft_del_chunk(dev, the_chunk);
+ yaffs_load_tnode_0(dev, tn, i, 0);
}
-
}
-
- return l;
+ return 1;
}
-static int yaffs_CreateNewObjectNumber(yaffs_Device * dev)
+static void yaffs_remove_obj_from_dir(struct yaffs_obj *obj)
{
- int bucket = yaffs_FindNiceObjectBucket(dev);
+ struct yaffs_dev *dev = obj->my_dev;
+ struct yaffs_obj *parent;
- /* Now find an object value that has not already been taken
- * by scanning the list.
- */
+ yaffs_verify_obj_in_dir(obj);
+ parent = obj->parent;
- int found = 0;
- struct list_head *i;
+ yaffs_verify_dir(parent);
- __u32 n = (__u32) bucket;
-
- /* yaffs_CheckObjectHashSanity(); */
-
- while (!found) {
- found = 1;
- n += YAFFS_NOBJECT_BUCKETS;
- if (1 || dev->objectBucket[bucket].count > 0) {
- list_for_each(i, &dev->objectBucket[bucket].list) {
- /* If there is already one in the list */
- if (i
- && list_entry(i, yaffs_Object,
- hashLink)->objectId == n) {
- found = 0;
- }
- }
- }
- }
-
-
- return n;
-}
-
-static void yaffs_HashObject(yaffs_Object * in)
-{
- int bucket = yaffs_HashFunction(in->objectId);
- yaffs_Device *dev = in->myDev;
+ if (dev && dev->param.remove_obj_fn)
+ dev->param.remove_obj_fn(obj);
- list_add(&in->hashLink, &dev->objectBucket[bucket].list);
- dev->objectBucket[bucket].count++;
+ list_del_init(&obj->siblings);
+ obj->parent = NULL;
+ yaffs_verify_dir(parent);
}
-yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number)
+void yaffs_add_obj_to_dir(struct yaffs_obj *directory, struct yaffs_obj *obj)
{
- int bucket = yaffs_HashFunction(number);
- struct list_head *i;
- yaffs_Object *in;
-
- list_for_each(i, &dev->objectBucket[bucket].list) {
- /* Look if it is in the list */
- if (i) {
- in = list_entry(i, yaffs_Object, hashLink);
- if (in->objectId == number) {
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
- /* Don't tell the VFS about this one if it is defered free */
- if (in->deferedFree)
- return NULL;
-#endif
-#endif
- return in;
- }
- }
+ if (!directory) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "tragedy: Trying to add an object to a null pointer directory"
+ );
+ BUG();
+ return;
}
-
- return NULL;
-}
-
-yaffs_Object *yaffs_CreateNewObject(yaffs_Device * dev, int number,
- yaffs_ObjectType type)
-{
-
- yaffs_Object *theObject;
- yaffs_Tnode *tn = NULL;
-
- if (number < 0) {
- number = yaffs_CreateNewObjectNumber(dev);
+ if (directory->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "tragedy: Trying to add an object to a non-directory"
+ );
+ BUG();
}
- theObject = yaffs_AllocateEmptyObject(dev);
- if(!theObject)
- return NULL;
-
- if(type == YAFFS_OBJECT_TYPE_FILE){
- tn = yaffs_GetTnode(dev);
- if(!tn){
- yaffs_FreeObject(theObject);
- return NULL;
- }
+ if (obj->siblings.prev == NULL) {
+ /* Not initialised */
+ BUG();
}
+ yaffs_verify_dir(directory);
+ yaffs_remove_obj_from_dir(obj);
- if (theObject) {
- theObject->fake = 0;
- theObject->renameAllowed = 1;
- theObject->unlinkAllowed = 1;
- theObject->objectId = number;
- yaffs_HashObject(theObject);
- theObject->variantType = type;
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_WinFileTimeNow(theObject->win_atime);
- theObject->win_ctime[0] = theObject->win_mtime[0] =
- theObject->win_atime[0];
- theObject->win_ctime[1] = theObject->win_mtime[1] =
- theObject->win_atime[1];
-
-#else
+ /* Now add it */
+ list_add(&obj->siblings, &directory->variant.dir_variant.children);
+ obj->parent = directory;
- theObject->yst_atime = theObject->yst_mtime =
- theObject->yst_ctime = Y_CURRENT_TIME;
-#endif
- switch (type) {
- case YAFFS_OBJECT_TYPE_FILE:
- theObject->variant.fileVariant.fileSize = 0;
- theObject->variant.fileVariant.scannedFileSize = 0;
- theObject->variant.fileVariant.shrinkSize = 0xFFFFFFFF; /* max __u32 */
- theObject->variant.fileVariant.topLevel = 0;
- theObject->variant.fileVariant.top = tn;
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- INIT_LIST_HEAD(&theObject->variant.directoryVariant.
- children);
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- case YAFFS_OBJECT_TYPE_HARDLINK:
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* No action required */
- break;
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* todo this should not happen */
- break;
- }
+ if (directory == obj->my_dev->unlinked_dir
+ || directory == obj->my_dev->del_dir) {
+ obj->unlinked = 1;
+ obj->my_dev->n_unlinked_files++;
+ obj->rename_allowed = 0;
}
- return theObject;
+ yaffs_verify_dir(directory);
+ yaffs_verify_obj_in_dir(obj);
}
-static yaffs_Object *yaffs_FindOrCreateObjectByNumber(yaffs_Device * dev,
- int number,
- yaffs_ObjectType type)
+static int yaffs_change_obj_name(struct yaffs_obj *obj,
+ struct yaffs_obj *new_dir,
+ const YCHAR *new_name, int force, int shadows)
{
- yaffs_Object *theObject = NULL;
+ int unlink_op;
+ int del_op;
+ struct yaffs_obj *existing_target;
- if (number > 0) {
- theObject = yaffs_FindObjectByNumber(dev, number);
- }
+ if (new_dir == NULL)
+ new_dir = obj->parent; /* use the old directory */
- if (!theObject) {
- theObject = yaffs_CreateNewObject(dev, number, type);
+ if (new_dir->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "tragedy: yaffs_change_obj_name: new_dir is not a directory"
+ );
+ BUG();
}
- return theObject;
+ unlink_op = (new_dir == obj->my_dev->unlinked_dir);
+ del_op = (new_dir == obj->my_dev->del_dir);
-}
+ existing_target = yaffs_find_by_name(new_dir, new_name);
+ /* If the object is a file going into the unlinked directory,
+ * then it is OK to just stuff it in since duplicate names are OK.
+ * else only proceed if the new name does not exist and we're putting
+ * it into a directory.
+ */
+ if (!(unlink_op || del_op || force ||
+ shadows > 0 || !existing_target) ||
+ new_dir->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY)
+ return YAFFS_FAIL;
-static YCHAR *yaffs_CloneString(const YCHAR * str)
-{
- YCHAR *newStr = NULL;
+ yaffs_set_obj_name(obj, new_name);
+ obj->dirty = 1;
+ yaffs_add_obj_to_dir(new_dir, obj);
- if (str && *str) {
- newStr = YMALLOC((yaffs_strlen(str) + 1) * sizeof(YCHAR));
- if(newStr)
- yaffs_strcpy(newStr, str);
- }
+ if (unlink_op)
+ obj->unlinked = 1;
- return newStr;
+ /* If it is a deletion then we mark it as a shrink for gc */
+ if (yaffs_update_oh(obj, new_name, 0, del_op, shadows, NULL) >= 0)
+ return YAFFS_OK;
+ return YAFFS_FAIL;
}
-/*
- * Mknod (create) a new object.
- * equivalentObject only has meaning for a hard link;
- * aliasString only has meaning for a sumlink.
- * rdev only has meaning for devices (a subset of special objects)
+/*------------------------ Short Operations Cache ------------------------------
+ * In many situations where there is no high level buffering a lot of
+ * reads might be short sequential reads, and a lot of writes may be short
+ * sequential writes. eg. scanning/writing a jpeg file.
+ * In these cases, a short read/write cache can provide a huge perfomance
+ * benefit with dumb-as-a-rock code.
+ * In Linux, the page cache provides read buffering and the short op cache
+ * provides write buffering.
+ *
+ * There are a small number (~10) of cache chunks per device so that we don't
+ * need a very intelligent search.
*/
-static yaffs_Object *yaffs_MknodObject(yaffs_ObjectType type,
- yaffs_Object * parent,
- const YCHAR * name,
- __u32 mode,
- __u32 uid,
- __u32 gid,
- yaffs_Object * equivalentObject,
- const YCHAR * aliasString, __u32 rdev)
+static int yaffs_obj_cache_dirty(struct yaffs_obj *obj)
{
- yaffs_Object *in;
- YCHAR *str = NULL;
-
- yaffs_Device *dev = parent->myDev;
-
- /* Check if the entry exists. If it does then fail the call since we don't want a dup.*/
- if (yaffs_FindObjectByName(parent, name)) {
- return NULL;
- }
-
- in = yaffs_CreateNewObject(dev, -1, type);
+ struct yaffs_dev *dev = obj->my_dev;
+ int i;
+ struct yaffs_cache *cache;
+ int n_caches = obj->my_dev->param.n_caches;
- if(type == YAFFS_OBJECT_TYPE_SYMLINK){
- str = yaffs_CloneString(aliasString);
- if(!str){
- yaffs_FreeObject(in);
- return NULL;
- }
+ for (i = 0; i < n_caches; i++) {
+ cache = &dev->cache[i];
+ if (cache->object == obj && cache->dirty)
+ return 1;
}
+ return 0;
+}
+static void yaffs_flush_file_cache(struct yaffs_obj *obj)
+{
+ struct yaffs_dev *dev = obj->my_dev;
+ int lowest = -99; /* Stop compiler whining. */
+ int i;
+ struct yaffs_cache *cache;
+ int chunk_written = 0;
+ int n_caches = obj->my_dev->param.n_caches;
- if (in) {
- in->chunkId = -1;
- in->valid = 1;
- in->variantType = type;
-
- in->yst_mode = mode;
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_WinFileTimeNow(in->win_atime);
- in->win_ctime[0] = in->win_mtime[0] = in->win_atime[0];
- in->win_ctime[1] = in->win_mtime[1] = in->win_atime[1];
-
-#else
- in->yst_atime = in->yst_mtime = in->yst_ctime = Y_CURRENT_TIME;
-
- in->yst_rdev = rdev;
- in->yst_uid = uid;
- in->yst_gid = gid;
-#endif
- in->nDataChunks = 0;
-
- yaffs_SetObjectName(in, name);
- in->dirty = 1;
-
- yaffs_AddObjectToDirectory(parent, in);
-
- in->myDev = parent->myDev;
-
- switch (type) {
- case YAFFS_OBJECT_TYPE_SYMLINK:
- in->variant.symLinkVariant.alias = str;
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- in->variant.hardLinkVariant.equivalentObject =
- equivalentObject;
- in->variant.hardLinkVariant.equivalentObjectId =
- equivalentObject->objectId;
- list_add(&in->hardLinks, &equivalentObject->hardLinks);
- break;
- case YAFFS_OBJECT_TYPE_FILE:
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- case YAFFS_OBJECT_TYPE_SPECIAL:
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* do nothing */
- break;
+ if (n_caches < 1)
+ return;
+ do {
+ cache = NULL;
+
+ /* Find the lowest dirty chunk for this object */
+ for (i = 0; i < n_caches; i++) {
+ if (dev->cache[i].object == obj &&
+ dev->cache[i].dirty) {
+ if (!cache ||
+ dev->cache[i].chunk_id < lowest) {
+ cache = &dev->cache[i];
+ lowest = cache->chunk_id;
+ }
+ }
}
- if (yaffs_UpdateObjectHeader(in, name, 0, 0, 0) < 0) {
- /* Could not create the object header, fail the creation */
- yaffs_DestroyObject(in);
- in = NULL;
+ if (cache && !cache->locked) {
+ /* Write it out and free it up */
+ chunk_written =
+ yaffs_wr_data_obj(cache->object,
+ cache->chunk_id,
+ cache->data,
+ cache->n_bytes, 1);
+ cache->dirty = 0;
+ cache->object = NULL;
}
+ } while (cache && chunk_written > 0);
- }
-
- return in;
+ if (cache)
+ /* Hoosterman, disk full while writing cache out. */
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy: no space during cache write");
}
-yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid)
-{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
- uid, gid, NULL, NULL, 0);
-}
+/*yaffs_flush_whole_cache(dev)
+ *
+ *
+ */
-yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid)
+void yaffs_flush_whole_cache(struct yaffs_dev *dev)
{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
- mode, uid, gid, NULL, NULL, 0);
-}
+ struct yaffs_obj *obj;
+ int n_caches = dev->param.n_caches;
+ int i;
-yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid, __u32 rdev)
-{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
- uid, gid, NULL, NULL, rdev);
-}
+ /* Find a dirty object in the cache and flush it...
+ * until there are no further dirty objects.
+ */
+ do {
+ obj = NULL;
+ for (i = 0; i < n_caches && !obj; i++) {
+ if (dev->cache[i].object && dev->cache[i].dirty)
+ obj = dev->cache[i].object;
+ }
+ if (obj)
+ yaffs_flush_file_cache(obj);
+ } while (obj);
-yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid,
- const YCHAR * alias)
-{
- return yaffs_MknodObject(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
- uid, gid, NULL, alias, 0);
}
-/* yaffs_Link returns the object id of the equivalent object.*/
-yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
- yaffs_Object * equivalentObject)
+/* Grab us a cache chunk for use.
+ * First look for an empty one.
+ * Then look for the least recently used non-dirty one.
+ * Then look for the least recently used dirty one...., flush and look again.
+ */
+static struct yaffs_cache *yaffs_grab_chunk_worker(struct yaffs_dev *dev)
{
- /* Get the real object in case we were fed a hard link as an equivalent object */
- equivalentObject = yaffs_GetEquivalentObject(equivalentObject);
+ int i;
- if (yaffs_MknodObject
- (YAFFS_OBJECT_TYPE_HARDLINK, parent, name, 0, 0, 0,
- equivalentObject, NULL, 0)) {
- return equivalentObject;
- } else {
- return NULL;
+ if (dev->param.n_caches > 0) {
+ for (i = 0; i < dev->param.n_caches; i++) {
+ if (!dev->cache[i].object)
+ return &dev->cache[i];
+ }
}
-
+ return NULL;
}
-static int yaffs_ChangeObjectName(yaffs_Object * obj, yaffs_Object * newDir,
- const YCHAR * newName, int force, int shadows)
+static struct yaffs_cache *yaffs_grab_chunk_cache(struct yaffs_dev *dev)
{
- int unlinkOp;
- int deleteOp;
-
- yaffs_Object *existingTarget;
-
- if (newDir == NULL) {
- newDir = obj->parent; /* use the old directory */
- }
-
- if (newDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragendy: yaffs_ChangeObjectName: newDir is not a directory"
- TENDSTR)));
- YBUG();
- }
-
- /* TODO: Do we need this different handling for YAFFS2 and YAFFS1?? */
- if (obj->myDev->isYaffs2) {
- unlinkOp = (newDir == obj->myDev->unlinkedDir);
- } else {
- unlinkOp = (newDir == obj->myDev->unlinkedDir
- && obj->variantType == YAFFS_OBJECT_TYPE_FILE);
- }
+ struct yaffs_cache *cache;
+ struct yaffs_obj *the_obj;
+ int usage;
+ int i;
- deleteOp = (newDir == obj->myDev->deletedDir);
+ if (dev->param.n_caches < 1)
+ return NULL;
- existingTarget = yaffs_FindObjectByName(newDir, newName);
+ /* Try find a non-dirty one... */
- /* If the object is a file going into the unlinked directory,
- * then it is OK to just stuff it in since duplicate names are allowed.
- * else only proceed if the new name does not exist and if we're putting
- * it into a directory.
- */
- if ((unlinkOp ||
- deleteOp ||
- force ||
- (shadows > 0) ||
- !existingTarget) &&
- newDir->variantType == YAFFS_OBJECT_TYPE_DIRECTORY) {
- yaffs_SetObjectName(obj, newName);
- obj->dirty = 1;
+ cache = yaffs_grab_chunk_worker(dev);
- yaffs_AddObjectToDirectory(newDir, obj);
+ if (!cache) {
+ /* They were all dirty, find the LRU object and flush
+ * its cache, then find again.
+ * NB what's here is not very accurate,
+ * we actually flush the object with the LRU chunk.
+ */
- if (unlinkOp)
- obj->unlinked = 1;
+ /* With locking we can't assume we can use entry zero,
+ * Set the_obj to a valid pointer for Coverity. */
+ the_obj = dev->cache[0].object;
+ usage = -1;
+ cache = NULL;
+
+ for (i = 0; i < dev->param.n_caches; i++) {
+ if (dev->cache[i].object &&
+ !dev->cache[i].locked &&
+ (dev->cache[i].last_use < usage ||
+ !cache)) {
+ usage = dev->cache[i].last_use;
+ the_obj = dev->cache[i].object;
+ cache = &dev->cache[i];
+ }
+ }
- /* If it is a deletion then we mark it as a shrink for gc purposes. */
- if (yaffs_UpdateObjectHeader(obj, newName, 0, deleteOp, shadows)>= 0)
- return YAFFS_OK;
+ if (!cache || cache->dirty) {
+ /* Flush and try again */
+ yaffs_flush_file_cache(the_obj);
+ cache = yaffs_grab_chunk_worker(dev);
+ }
}
-
- return YAFFS_FAIL;
+ return cache;
}
-int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
- yaffs_Object * newDir, const YCHAR * newName)
+/* Find a cached chunk */
+static struct yaffs_cache *yaffs_find_chunk_cache(const struct yaffs_obj *obj,
+ int chunk_id)
{
- yaffs_Object *obj;
- yaffs_Object *existingTarget;
- int force = 0;
+ struct yaffs_dev *dev = obj->my_dev;
+ int i;
-#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
- /* Special case for case insemsitive systems (eg. WinCE).
- * While look-up is case insensitive, the name isn't.
- * Therefore we might want to change x.txt to X.txt
- */
- if (oldDir == newDir && yaffs_strcmp(oldName, newName) == 0) {
- force = 1;
- }
-#endif
+ if (dev->param.n_caches < 1)
+ return NULL;
- obj = yaffs_FindObjectByName(oldDir, oldName);
- /* Check new name to long. */
- if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK &&
- yaffs_strlen(newName) > YAFFS_MAX_ALIAS_LENGTH)
- /* ENAMETOOLONG */
- return YAFFS_FAIL;
- else if (obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK &&
- yaffs_strlen(newName) > YAFFS_MAX_NAME_LENGTH)
- /* ENAMETOOLONG */
- return YAFFS_FAIL;
-
- if (obj && obj->renameAllowed) {
-
- /* Now do the handling for an existing target, if there is one */
-
- existingTarget = yaffs_FindObjectByName(newDir, newName);
- if (existingTarget &&
- existingTarget->variantType == YAFFS_OBJECT_TYPE_DIRECTORY &&
- !list_empty(&existingTarget->variant.directoryVariant.children)) {
- /* There is a target that is a non-empty directory, so we fail */
- return YAFFS_FAIL; /* EEXIST or ENOTEMPTY */
- } else if (existingTarget && existingTarget != obj) {
- /* Nuke the target first, using shadowing,
- * but only if it isn't the same object
- */
- yaffs_ChangeObjectName(obj, newDir, newName, force,
- existingTarget->objectId);
- yaffs_UnlinkObject(existingTarget);
- }
+ for (i = 0; i < dev->param.n_caches; i++) {
+ if (dev->cache[i].object == obj &&
+ dev->cache[i].chunk_id == chunk_id) {
+ dev->cache_hits++;
- return yaffs_ChangeObjectName(obj, newDir, newName, 1, 0);
+ return &dev->cache[i];
+ }
}
- return YAFFS_FAIL;
+ return NULL;
}
-/*------------------------- Block Management and Page Allocation ----------------*/
-
-static int yaffs_InitialiseBlocks(yaffs_Device * dev)
+/* Mark the chunk for the least recently used algorithym */
+static void yaffs_use_cache(struct yaffs_dev *dev, struct yaffs_cache *cache,
+ int is_write)
{
- int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-
- dev->blockInfo = NULL;
- dev->chunkBits = NULL;
-
- dev->allocationBlock = -1; /* force it to get a new one */
-
- /* If the first allocation strategy fails, thry the alternate one */
- dev->blockInfo = YMALLOC(nBlocks * sizeof(yaffs_BlockInfo));
- if(!dev->blockInfo){
- dev->blockInfo = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockInfo));
- dev->blockInfoAlt = 1;
- }
- else
- dev->blockInfoAlt = 0;
+ int i;
- if(dev->blockInfo){
+ if (dev->param.n_caches < 1)
+ return;
- /* Set up dynamic blockinfo stuff. */
- dev->chunkBitmapStride = (dev->nChunksPerBlock + 7) / 8; /* round up bytes */
- dev->chunkBits = YMALLOC(dev->chunkBitmapStride * nBlocks);
- if(!dev->chunkBits){
- dev->chunkBits = YMALLOC_ALT(dev->chunkBitmapStride * nBlocks);
- dev->chunkBitsAlt = 1;
- }
- else
- dev->chunkBitsAlt = 0;
- }
+ if (dev->cache_last_use < 0 ||
+ dev->cache_last_use > 100000000) {
+ /* Reset the cache usages */
+ for (i = 1; i < dev->param.n_caches; i++)
+ dev->cache[i].last_use = 0;
- if (dev->blockInfo && dev->chunkBits) {
- memset(dev->blockInfo, 0, nBlocks * sizeof(yaffs_BlockInfo));
- memset(dev->chunkBits, 0, dev->chunkBitmapStride * nBlocks);
- return YAFFS_OK;
+ dev->cache_last_use = 0;
}
+ dev->cache_last_use++;
+ cache->last_use = dev->cache_last_use;
- return YAFFS_FAIL;
-
+ if (is_write)
+ cache->dirty = 1;
}
-static void yaffs_DeinitialiseBlocks(yaffs_Device * dev)
+/* Invalidate a single cache page.
+ * Do this when a whole page gets written,
+ * ie the short cache for this page is no longer valid.
+ */
+static void yaffs_invalidate_chunk_cache(struct yaffs_obj *object, int chunk_id)
{
- if(dev->blockInfoAlt && dev->blockInfo)
- YFREE_ALT(dev->blockInfo);
- else if(dev->blockInfo)
- YFREE(dev->blockInfo);
-
- dev->blockInfoAlt = 0;
+ struct yaffs_cache *cache;
- dev->blockInfo = NULL;
+ if (object->my_dev->param.n_caches > 0) {
+ cache = yaffs_find_chunk_cache(object, chunk_id);
- if(dev->chunkBitsAlt && dev->chunkBits)
- YFREE_ALT(dev->chunkBits);
- else if(dev->chunkBits)
- YFREE(dev->chunkBits);
- dev->chunkBitsAlt = 0;
- dev->chunkBits = NULL;
+ if (cache)
+ cache->object = NULL;
+ }
}
-static int yaffs_BlockNotDisqualifiedFromGC(yaffs_Device * dev,
- yaffs_BlockInfo * bi)
+/* Invalidate all the cache pages associated with this object
+ * Do this whenever ther file is deleted or resized.
+ */
+static void yaffs_invalidate_whole_cache(struct yaffs_obj *in)
{
int i;
- __u32 seq;
- yaffs_BlockInfo *b;
-
- if (!dev->isYaffs2)
- return 1; /* disqualification only applies to yaffs2. */
+ struct yaffs_dev *dev = in->my_dev;
- if (!bi->hasShrinkHeader)
- return 1; /* can gc */
-
- /* Find the oldest dirty sequence number if we don't know it and save it
- * so we don't have to keep recomputing it.
- */
- if (!dev->oldestDirtySequence) {
- seq = dev->sequenceNumber;
-
- for (i = dev->internalStartBlock; i <= dev->internalEndBlock;
- i++) {
- b = yaffs_GetBlockInfo(dev, i);
- if (b->blockState == YAFFS_BLOCK_STATE_FULL &&
- (b->pagesInUse - b->softDeletions) <
- dev->nChunksPerBlock && b->sequenceNumber < seq) {
- seq = b->sequenceNumber;
- }
+ if (dev->param.n_caches > 0) {
+ /* Invalidate it. */
+ for (i = 0; i < dev->param.n_caches; i++) {
+ if (dev->cache[i].object == in)
+ dev->cache[i].object = NULL;
}
- dev->oldestDirtySequence = seq;
}
-
- /* Can't do gc of this block if there are any blocks older than this one that have
- * discarded pages.
- */
- return (bi->sequenceNumber <= dev->oldestDirtySequence);
-
}
-/* FindDiretiestBlock is used to select the dirtiest block (or close enough)
- * for garbage collection.
- */
-
-static int yaffs_FindBlockForGarbageCollection(yaffs_Device * dev,
- int aggressive)
+static void yaffs_unhash_obj(struct yaffs_obj *obj)
{
+ int bucket;
+ struct yaffs_dev *dev = obj->my_dev;
- int b = dev->currentDirtyChecker;
-
- int i;
- int iterations;
- int dirtiest = -1;
- int pagesInUse = 0;
- int prioritised=0;
- yaffs_BlockInfo *bi;
- int pendingPrioritisedExist = 0;
-
- /* First let's see if we need to grab a prioritised block */
- if(dev->hasPendingPrioritisedGCs){
- for(i = dev->internalStartBlock; i < dev->internalEndBlock && !prioritised; i++){
-
- bi = yaffs_GetBlockInfo(dev, i);
- //yaffs_VerifyBlock(dev,bi,i);
-
- if(bi->gcPrioritise) {
- pendingPrioritisedExist = 1;
- if(bi->blockState == YAFFS_BLOCK_STATE_FULL &&
- yaffs_BlockNotDisqualifiedFromGC(dev, bi)){
- pagesInUse = (bi->pagesInUse - bi->softDeletions);
- dirtiest = i;
- prioritised = 1;
- aggressive = 1; /* Fool the non-aggressive skip logiv below */
- }
- }
- }
-
- if(!pendingPrioritisedExist) /* None found, so we can clear this */
- dev->hasPendingPrioritisedGCs = 0;
+ /* If it is still linked into the bucket list, free from the list */
+ if (!list_empty(&obj->hash_link)) {
+ list_del_init(&obj->hash_link);
+ bucket = yaffs_hash_fn(obj->obj_id);
+ dev->obj_bucket[bucket].count--;
}
+}
- /* If we're doing aggressive GC then we are happy to take a less-dirty block, and
- * search harder.
- * else (we're doing a leasurely gc), then we only bother to do this if the
- * block has only a few pages in use.
- */
-
- dev->nonAggressiveSkip--;
+/* FreeObject frees up a Object and puts it back on the free list */
+static void yaffs_free_obj(struct yaffs_obj *obj)
+{
+ struct yaffs_dev *dev;
- if (!aggressive && (dev->nonAggressiveSkip > 0)) {
- return -1;
+ if (!obj) {
+ BUG();
+ return;
}
+ dev = obj->my_dev;
+ yaffs_trace(YAFFS_TRACE_OS, "FreeObject %p inode %p",
+ obj, obj->my_inode);
+ if (obj->parent)
+ BUG();
+ if (!list_empty(&obj->siblings))
+ BUG();
- if(!prioritised)
- pagesInUse =
- (aggressive) ? dev->nChunksPerBlock : YAFFS_PASSIVE_GC_CHUNKS + 1;
-
- if (aggressive) {
- iterations =
- dev->internalEndBlock - dev->internalStartBlock + 1;
- } else {
- iterations =
- dev->internalEndBlock - dev->internalStartBlock + 1;
- iterations = iterations / 16;
- if (iterations > 200) {
- iterations = 200;
- }
+ if (obj->my_inode) {
+ /* We're still hooked up to a cached inode.
+ * Don't delete now, but mark for later deletion
+ */
+ obj->defered_free = 1;
+ return;
}
- for (i = 0; i <= iterations && pagesInUse > 0 && !prioritised; i++) {
- b++;
- if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
- b = dev->internalStartBlock;
- }
+ yaffs_unhash_obj(obj);
- if (b < dev->internalStartBlock || b > dev->internalEndBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> Block %d is not valid" TENDSTR), b));
- YBUG();
- }
+ yaffs_free_raw_obj(dev, obj);
+ dev->n_obj--;
+ dev->checkpoint_blocks_required = 0; /* force recalculation */
+}
- bi = yaffs_GetBlockInfo(dev, b);
+void yaffs_handle_defered_free(struct yaffs_obj *obj)
+{
+ if (obj->defered_free)
+ yaffs_free_obj(obj);
+}
-#if 0
- if (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT) {
- dirtiest = b;
- pagesInUse = 0;
- }
- else
-#endif
+static int yaffs_generic_obj_del(struct yaffs_obj *in)
+{
+ /* Iinvalidate the file's data in the cache, without flushing. */
+ yaffs_invalidate_whole_cache(in);
- if (bi->blockState == YAFFS_BLOCK_STATE_FULL &&
- (bi->pagesInUse - bi->softDeletions) < pagesInUse &&
- yaffs_BlockNotDisqualifiedFromGC(dev, bi)) {
- dirtiest = b;
- pagesInUse = (bi->pagesInUse - bi->softDeletions);
- }
+ if (in->my_dev->param.is_yaffs2 && in->parent != in->my_dev->del_dir) {
+ /* Move to unlinked directory so we have a deletion record */
+ yaffs_change_obj_name(in, in->my_dev->del_dir, _Y("deleted"), 0,
+ 0);
}
- dev->currentDirtyChecker = b;
+ yaffs_remove_obj_from_dir(in);
+ yaffs_chunk_del(in->my_dev, in->hdr_chunk, 1, __LINE__);
+ in->hdr_chunk = 0;
- if (dirtiest > 0) {
- T(YAFFS_TRACE_GC,
- (TSTR("GC Selected block %d with %d free, prioritised:%d" TENDSTR), dirtiest,
- dev->nChunksPerBlock - pagesInUse,prioritised));
- }
+ yaffs_free_obj(in);
+ return YAFFS_OK;
- dev->oldestDirtySequence = 0;
+}
- if (dirtiest > 0) {
- dev->nonAggressiveSkip = 4;
- }
+static void yaffs_soft_del_file(struct yaffs_obj *obj)
+{
+ if (!obj->deleted ||
+ obj->variant_type != YAFFS_OBJECT_TYPE_FILE ||
+ obj->soft_del)
+ return;
- return dirtiest;
+ if (obj->n_data_chunks <= 0) {
+ /* Empty file with no duplicate object headers,
+ * just delete it immediately */
+ yaffs_free_tnode(obj->my_dev, obj->variant.file_variant.top);
+ obj->variant.file_variant.top = NULL;
+ yaffs_trace(YAFFS_TRACE_TRACING,
+ "yaffs: Deleting empty file %d",
+ obj->obj_id);
+ yaffs_generic_obj_del(obj);
+ } else {
+ yaffs_soft_del_worker(obj,
+ obj->variant.file_variant.top,
+ obj->variant.
+ file_variant.top_level, 0);
+ obj->soft_del = 1;
+ }
}
-static void yaffs_BlockBecameDirty(yaffs_Device * dev, int blockNo)
-{
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, blockNo);
+/* Pruning removes any part of the file structure tree that is beyond the
+ * bounds of the file (ie that does not point to chunks).
+ *
+ * A file should only get pruned when its size is reduced.
+ *
+ * Before pruning, the chunks must be pulled from the tree and the
+ * level 0 tnode entries must be zeroed out.
+ * Could also use this for file deletion, but that's probably better handled
+ * by a special case.
+ *
+ * This function is recursive. For levels > 0 the function is called again on
+ * any sub-tree. For level == 0 we just check if the sub-tree has data.
+ * If there is no data in a subtree then it is pruned.
+ */
- int erasedOk = 0;
+static struct yaffs_tnode *yaffs_prune_worker(struct yaffs_dev *dev,
+ struct yaffs_tnode *tn, u32 level,
+ int del0)
+{
+ int i;
+ int has_data;
- /* If the block is still healthy erase it and mark as clean.
- * If the block has had a data failure, then retire it.
- */
+ if (!tn)
+ return tn;
- T(YAFFS_TRACE_GC | YAFFS_TRACE_ERASE,
- (TSTR("yaffs_BlockBecameDirty block %d state %d %s"TENDSTR),
- blockNo, bi->blockState, (bi->needsRetiring) ? "needs retiring" : ""));
+ has_data = 0;
- bi->blockState = YAFFS_BLOCK_STATE_DIRTY;
+ if (level > 0) {
+ for (i = 0; i < YAFFS_NTNODES_INTERNAL; i++) {
+ if (tn->internal[i]) {
+ tn->internal[i] =
+ yaffs_prune_worker(dev,
+ tn->internal[i],
+ level - 1,
+ (i == 0) ? del0 : 1);
+ }
- if (!bi->needsRetiring) {
- yaffs_InvalidateCheckpoint(dev);
- erasedOk = yaffs_EraseBlockInNAND(dev, blockNo);
- if (!erasedOk) {
- dev->nErasureFailures++;
- T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("**>> Erasure failed %d" TENDSTR), blockNo));
+ if (tn->internal[i])
+ has_data++;
}
- }
+ } else {
+ int tnode_size_u32 = dev->tnode_size / sizeof(u32);
+ u32 *map = (u32 *) tn;
- if (erasedOk &&
- ((yaffs_traceMask & YAFFS_TRACE_ERASE) || !yaffs_SkipVerification(dev))) {
- int i;
- for (i = 0; i < dev->nChunksPerBlock; i++) {
- if (!yaffs_CheckChunkErased
- (dev, blockNo * dev->nChunksPerBlock + i)) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- (">>Block %d erasure supposedly OK, but chunk %d not erased"
- TENDSTR), blockNo, i));
- }
+ for (i = 0; !has_data && i < tnode_size_u32; i++) {
+ if (map[i])
+ has_data++;
}
}
- if (erasedOk) {
- /* Clean it up... */
- bi->blockState = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- bi->pagesInUse = 0;
- bi->softDeletions = 0;
- bi->hasShrinkHeader = 0;
- bi->skipErasedCheck = 1; /* This is clean, so no need to check */
- bi->gcPrioritise = 0;
- yaffs_ClearChunkBits(dev, blockNo);
-
- T(YAFFS_TRACE_ERASE,
- (TSTR("Erased block %d" TENDSTR), blockNo));
- } else {
- dev->nFreeChunks -= dev->nChunksPerBlock; /* We lost a block of free space */
-
- yaffs_RetireBlock(dev, blockNo);
- T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("**>> Block %d retired" TENDSTR), blockNo));
+ if (has_data == 0 && del0) {
+ /* Free and return NULL */
+ yaffs_free_tnode(dev, tn);
+ tn = NULL;
}
+ return tn;
}
-static int yaffs_FindBlockForAllocation(yaffs_Device * dev)
+static int yaffs_prune_tree(struct yaffs_dev *dev,
+ struct yaffs_file_var *file_struct)
{
int i;
+ int has_data;
+ int done = 0;
+ struct yaffs_tnode *tn;
- yaffs_BlockInfo *bi;
+ if (file_struct->top_level < 1)
+ return YAFFS_OK;
- if (dev->nErasedBlocks < 1) {
- /* Hoosterman we've got a problem.
- * Can't get space to gc
- */
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs tragedy: no more eraased blocks" TENDSTR)));
+ file_struct->top =
+ yaffs_prune_worker(dev, file_struct->top, file_struct->top_level, 0);
- return -1;
- }
+ /* Now we have a tree with all the non-zero branches NULL but
+ * the height is the same as it was.
+ * Let's see if we can trim internal tnodes to shorten the tree.
+ * We can do this if only the 0th element in the tnode is in use
+ * (ie all the non-zero are NULL)
+ */
- /* Find an empty block. */
+ while (file_struct->top_level && !done) {
+ tn = file_struct->top;
- for (i = dev->internalStartBlock; i <= dev->internalEndBlock; i++) {
- dev->allocationBlockFinder++;
- if (dev->allocationBlockFinder < dev->internalStartBlock
- || dev->allocationBlockFinder > dev->internalEndBlock) {
- dev->allocationBlockFinder = dev->internalStartBlock;
+ has_data = 0;
+ for (i = 1; i < YAFFS_NTNODES_INTERNAL; i++) {
+ if (tn->internal[i])
+ has_data++;
}
- bi = yaffs_GetBlockInfo(dev, dev->allocationBlockFinder);
-
- if (bi->blockState == YAFFS_BLOCK_STATE_EMPTY) {
- bi->blockState = YAFFS_BLOCK_STATE_ALLOCATING;
- dev->sequenceNumber++;
- bi->sequenceNumber = dev->sequenceNumber;
- dev->nErasedBlocks--;
- T(YAFFS_TRACE_ALLOCATE,
- (TSTR("Allocated block %d, seq %d, %d left" TENDSTR),
- dev->allocationBlockFinder, dev->sequenceNumber,
- dev->nErasedBlocks));
- return dev->allocationBlockFinder;
+ if (!has_data) {
+ file_struct->top = tn->internal[0];
+ file_struct->top_level--;
+ yaffs_free_tnode(dev, tn);
+ } else {
+ done = 1;
}
}
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs tragedy: no more eraased blocks, but there should have been %d"
- TENDSTR), dev->nErasedBlocks));
-
- return -1;
+ return YAFFS_OK;
}
+/*-------------------- End of File Structure functions.-------------------*/
-// Check if there's space to allocate...
-// Thinks.... do we need top make this ths same as yaffs_GetFreeChunks()?
-static int yaffs_CheckSpaceForAllocation(yaffs_Device * dev)
+/* alloc_empty_obj gets us a clean Object.*/
+static struct yaffs_obj *yaffs_alloc_empty_obj(struct yaffs_dev *dev)
{
- int reservedChunks;
- int reservedBlocks = dev->nReservedBlocks;
- int checkpointBlocks;
+ struct yaffs_obj *obj = yaffs_alloc_raw_obj(dev);
- checkpointBlocks = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
- if(checkpointBlocks < 0)
- checkpointBlocks = 0;
+ if (!obj)
+ return obj;
- reservedChunks = ((reservedBlocks + checkpointBlocks) * dev->nChunksPerBlock);
+ dev->n_obj++;
- return (dev->nFreeChunks > reservedChunks);
-}
+ /* Now sweeten it up... */
-static int yaffs_AllocateChunk(yaffs_Device * dev, int useReserve, yaffs_BlockInfo **blockUsedPtr)
-{
- int retVal;
- yaffs_BlockInfo *bi;
+ memset(obj, 0, sizeof(struct yaffs_obj));
+ obj->being_created = 1;
- if (dev->allocationBlock < 0) {
- /* Get next block to allocate off */
- dev->allocationBlock = yaffs_FindBlockForAllocation(dev);
- dev->allocationPage = 0;
- }
+ obj->my_dev = dev;
+ obj->hdr_chunk = 0;
+ obj->variant_type = YAFFS_OBJECT_TYPE_UNKNOWN;
+ INIT_LIST_HEAD(&(obj->hard_links));
+ INIT_LIST_HEAD(&(obj->hash_link));
+ INIT_LIST_HEAD(&obj->siblings);
- if (!useReserve && !yaffs_CheckSpaceForAllocation(dev)) {
- /* Not enough space to allocate unless we're allowed to use the reserve. */
- return -1;
+ /* Now make the directory sane */
+ if (dev->root_dir) {
+ obj->parent = dev->root_dir;
+ list_add(&(obj->siblings),
+ &dev->root_dir->variant.dir_variant.children);
}
- if (dev->nErasedBlocks < dev->nReservedBlocks
- && dev->allocationPage == 0) {
- T(YAFFS_TRACE_ALLOCATE, (TSTR("Allocating reserve" TENDSTR)));
- }
-
- /* Next page please.... */
- if (dev->allocationBlock >= 0) {
- bi = yaffs_GetBlockInfo(dev, dev->allocationBlock);
-
- retVal = (dev->allocationBlock * dev->nChunksPerBlock) +
- dev->allocationPage;
- bi->pagesInUse++;
- yaffs_SetChunkBit(dev, dev->allocationBlock,
- dev->allocationPage);
-
- dev->allocationPage++;
-
- dev->nFreeChunks--;
-
- /* If the block is full set the state to full */
- if (dev->allocationPage >= dev->nChunksPerBlock) {
- bi->blockState = YAFFS_BLOCK_STATE_FULL;
- dev->allocationBlock = -1;
- }
-
- if(blockUsedPtr)
- *blockUsedPtr = bi;
+ /* Add it to the lost and found directory.
+ * NB Can't put root or lost-n-found in lost-n-found so
+ * check if lost-n-found exists first
+ */
+ if (dev->lost_n_found)
+ yaffs_add_obj_to_dir(dev->lost_n_found, obj);
- return retVal;
- }
+ obj->being_created = 0;
- T(YAFFS_TRACE_ERROR,
- (TSTR("!!!!!!!!! Allocator out !!!!!!!!!!!!!!!!!" TENDSTR)));
+ dev->checkpoint_blocks_required = 0; /* force recalculation */
- return -1;
+ return obj;
}
-static int yaffs_GetErasedChunks(yaffs_Device * dev)
+static int yaffs_find_nice_bucket(struct yaffs_dev *dev)
{
- int n;
+ int i;
+ int l = 999;
+ int lowest = 999999;
- n = dev->nErasedBlocks * dev->nChunksPerBlock;
+ /* Search for the shortest list or one that
+ * isn't too long.
+ */
- if (dev->allocationBlock > 0) {
- n += (dev->nChunksPerBlock - dev->allocationPage);
+ for (i = 0; i < 10 && lowest > 4; i++) {
+ dev->bucket_finder++;
+ dev->bucket_finder %= YAFFS_NOBJECT_BUCKETS;
+ if (dev->obj_bucket[dev->bucket_finder].count < lowest) {
+ lowest = dev->obj_bucket[dev->bucket_finder].count;
+ l = dev->bucket_finder;
+ }
}
- return n;
-
+ return l;
}
-static int yaffs_GarbageCollectBlock(yaffs_Device * dev, int block)
+static int yaffs_new_obj_id(struct yaffs_dev *dev)
{
- int oldChunk;
- int newChunk;
- int chunkInBlock;
- int markNAND;
- int retVal = YAFFS_OK;
- int cleanups = 0;
- int i;
- int isCheckpointBlock;
- int matchingChunk;
-
- int chunksBefore = yaffs_GetErasedChunks(dev);
- int chunksAfter;
-
- yaffs_ExtendedTags tags;
-
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, block);
-
- yaffs_Object *object;
-
- isCheckpointBlock = (bi->blockState == YAFFS_BLOCK_STATE_CHECKPOINT);
-
- bi->blockState = YAFFS_BLOCK_STATE_COLLECTING;
-
- T(YAFFS_TRACE_TRACING,
- (TSTR("Collecting block %d, in use %d, shrink %d, " TENDSTR), block,
- bi->pagesInUse, bi->hasShrinkHeader));
-
- /*yaffs_VerifyFreeChunks(dev); */
-
- bi->hasShrinkHeader = 0; /* clear the flag so that the block can erase */
+ int bucket = yaffs_find_nice_bucket(dev);
+ int found = 0;
+ struct list_head *i;
+ u32 n = (u32) bucket;
- /* Take off the number of soft deleted entries because
- * they're going to get really deleted during GC.
+ /* Now find an object value that has not already been taken
+ * by scanning the list.
*/
- dev->nFreeChunks -= bi->softDeletions;
-
- dev->isDoingGC = 1;
-
- if (isCheckpointBlock ||
- !yaffs_StillSomeChunkBits(dev, block)) {
- T(YAFFS_TRACE_TRACING,
- (TSTR
- ("Collecting block %d that has no chunks in use" TENDSTR),
- block));
- yaffs_BlockBecameDirty(dev, block);
- } else {
-
- __u8 *buffer = yaffs_GetTempBuffer(dev, __LINE__);
-
- yaffs_VerifyBlock(dev,bi,block);
-
- for (chunkInBlock = 0, oldChunk = block * dev->nChunksPerBlock;
- chunkInBlock < dev->nChunksPerBlock
- && yaffs_StillSomeChunkBits(dev, block);
- chunkInBlock++, oldChunk++) {
- if (yaffs_CheckChunkBit(dev, block, chunkInBlock)) {
-
- /* This page is in use and might need to be copied off */
-
- markNAND = 1;
-
- yaffs_InitialiseTags(&tags);
-
- yaffs_ReadChunkWithTagsFromNAND(dev, oldChunk,
- buffer, &tags);
-
- object =
- yaffs_FindObjectByNumber(dev,
- tags.objectId);
-
- T(YAFFS_TRACE_GC_DETAIL,
- (TSTR
- ("Collecting page %d, %d %d %d " TENDSTR),
- chunkInBlock, tags.objectId, tags.chunkId,
- tags.byteCount));
-
- if(object && !yaffs_SkipVerification(dev)){
- if(tags.chunkId == 0)
- matchingChunk = object->chunkId;
- else if(object->softDeleted)
- matchingChunk = oldChunk; /* Defeat the test */
- else
- matchingChunk = yaffs_FindChunkInFile(object,tags.chunkId,NULL);
- if(oldChunk != matchingChunk)
- T(YAFFS_TRACE_ERROR,
- (TSTR("gc: page in gc mismatch: %d %d %d %d"TENDSTR),
- oldChunk,matchingChunk,tags.objectId, tags.chunkId));
-
- }
-
- if (!object) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("page %d in gc has no object: %d %d %d "
- TENDSTR), oldChunk,
- tags.objectId, tags.chunkId, tags.byteCount));
- }
-
- if (object && object->deleted
- && tags.chunkId != 0) {
- /* Data chunk in a deleted file, throw it away
- * It's a soft deleted data chunk,
- * No need to copy this, just forget about it and
- * fix up the object.
- */
-
- object->nDataChunks--;
-
- if (object->nDataChunks <= 0) {
- /* remeber to clean up the object */
- dev->gcCleanupList[cleanups] =
- tags.objectId;
- cleanups++;
- }
- markNAND = 0;
- } else if (0
- /* Todo object && object->deleted && object->nDataChunks == 0 */
- ) {
- /* Deleted object header with no data chunks.
- * Can be discarded and the file deleted.
- */
- object->chunkId = 0;
- yaffs_FreeTnode(object->myDev,
- object->variant.
- fileVariant.top);
- object->variant.fileVariant.top = NULL;
- yaffs_DoGenericObjectDeletion(object);
-
- } else if (object) {
- /* It's either a data chunk in a live file or
- * an ObjectHeader, so we're interested in it.
- * NB Need to keep the ObjectHeaders of deleted files
- * until the whole file has been deleted off
- */
- tags.serialNumber++;
-
- dev->nGCCopies++;
-
- if (tags.chunkId == 0) {
- /* It is an object Id,
- * We need to nuke the shrinkheader flags first
- * We no longer want the shrinkHeader flag since its work is done
- * and if it is left in place it will mess up scanning.
- * Also, clear out any shadowing stuff
- */
-
- yaffs_ObjectHeader *oh;
- oh = (yaffs_ObjectHeader *)buffer;
- oh->isShrink = 0;
- oh->shadowsObject = -1;
- tags.extraShadows = 0;
- tags.extraIsShrinkHeader = 0;
-
- yaffs_VerifyObjectHeader(object,oh,&tags,1);
- }
-
- newChunk =
- yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &tags, 1);
-
- if (newChunk < 0) {
- retVal = YAFFS_FAIL;
- } else {
-
- /* Ok, now fix up the Tnodes etc. */
-
- if (tags.chunkId == 0) {
- /* It's a header */
- object->chunkId = newChunk;
- object->serial = tags.serialNumber;
- } else {
- /* It's a data chunk */
- yaffs_PutChunkIntoFile
- (object,
- tags.chunkId,
- newChunk, 0);
- }
- }
+ while (!found) {
+ found = 1;
+ n += YAFFS_NOBJECT_BUCKETS;
+ if (1 || dev->obj_bucket[bucket].count > 0) {
+ list_for_each(i, &dev->obj_bucket[bucket].list) {
+ /* If there is already one in the list */
+ if (i && list_entry(i, struct yaffs_obj,
+ hash_link)->obj_id == n) {
+ found = 0;
}
-
- yaffs_DeleteChunk(dev, oldChunk, markNAND, __LINE__);
-
}
}
+ }
+ return n;
+}
- yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
+static void yaffs_hash_obj(struct yaffs_obj *in)
+{
+ int bucket = yaffs_hash_fn(in->obj_id);
+ struct yaffs_dev *dev = in->my_dev;
+ list_add(&in->hash_link, &dev->obj_bucket[bucket].list);
+ dev->obj_bucket[bucket].count++;
+}
- /* Do any required cleanups */
- for (i = 0; i < cleanups; i++) {
- /* Time to delete the file too */
- object =
- yaffs_FindObjectByNumber(dev,
- dev->gcCleanupList[i]);
- if (object) {
- yaffs_FreeTnode(dev,
- object->variant.fileVariant.
- top);
- object->variant.fileVariant.top = NULL;
- T(YAFFS_TRACE_GC,
- (TSTR
- ("yaffs: About to finally delete object %d"
- TENDSTR), object->objectId));
- yaffs_DoGenericObjectDeletion(object);
- object->myDev->nDeletedFiles--;
- }
+struct yaffs_obj *yaffs_find_by_number(struct yaffs_dev *dev, u32 number)
+{
+ int bucket = yaffs_hash_fn(number);
+ struct list_head *i;
+ struct yaffs_obj *in;
+ list_for_each(i, &dev->obj_bucket[bucket].list) {
+ /* Look if it is in the list */
+ in = list_entry(i, struct yaffs_obj, hash_link);
+ if (in->obj_id == number) {
+ /* Don't show if it is defered free */
+ if (in->defered_free)
+ return NULL;
+ return in;
}
-
}
- yaffs_VerifyCollectedBlock(dev,bi,block);
-
- if (chunksBefore >= (chunksAfter = yaffs_GetErasedChunks(dev))) {
- T(YAFFS_TRACE_GC,
- (TSTR
- ("gc did not increase free chunks before %d after %d"
- TENDSTR), chunksBefore, chunksAfter));
- }
-
- dev->isDoingGC = 0;
-
- return retVal;
+ return NULL;
}
-/* New garbage collector
- * If we're very low on erased blocks then we do aggressive garbage collection
- * otherwise we do "leasurely" garbage collection.
- * Aggressive gc looks further (whole array) and will accept less dirty blocks.
- * Passive gc only inspects smaller areas and will only accept more dirty blocks.
- *
- * The idea is to help clear out space in a more spread-out manner.
- * Dunno if it really does anything useful.
- */
-static int yaffs_CheckGarbageCollection(yaffs_Device * dev)
+struct yaffs_obj *yaffs_new_obj(struct yaffs_dev *dev, int number,
+ enum yaffs_obj_type type)
{
- int block;
- int aggressive;
- int gcOk = YAFFS_OK;
- int maxTries = 0;
+ struct yaffs_obj *the_obj = NULL;
+ struct yaffs_tnode *tn = NULL;
- int checkpointBlockAdjust;
+ if (number < 0)
+ number = yaffs_new_obj_id(dev);
- if (dev->isDoingGC) {
- /* Bail out so we don't get recursive gc */
- return YAFFS_OK;
+ if (type == YAFFS_OBJECT_TYPE_FILE) {
+ tn = yaffs_get_tnode(dev);
+ if (!tn)
+ return NULL;
}
- /* This loop should pass the first time.
- * We'll only see looping here if the erase of the collected block fails.
- */
-
- do {
- maxTries++;
-
- checkpointBlockAdjust = (dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint);
- if(checkpointBlockAdjust < 0)
- checkpointBlockAdjust = 0;
+ the_obj = yaffs_alloc_empty_obj(dev);
+ if (!the_obj) {
+ if (tn)
+ yaffs_free_tnode(dev, tn);
+ return NULL;
+ }
- if (dev->nErasedBlocks < (dev->nReservedBlocks + checkpointBlockAdjust + 2)) {
- /* We need a block soon...*/
- aggressive = 1;
- } else {
- /* We're in no hurry */
- aggressive = 0;
- }
+ the_obj->fake = 0;
+ the_obj->rename_allowed = 1;
+ the_obj->unlink_allowed = 1;
+ the_obj->obj_id = number;
+ yaffs_hash_obj(the_obj);
+ the_obj->variant_type = type;
+ yaffs_load_current_time(the_obj, 1, 1);
- block = yaffs_FindBlockForGarbageCollection(dev, aggressive);
+ switch (type) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ the_obj->variant.file_variant.file_size = 0;
+ the_obj->variant.file_variant.scanned_size = 0;
+ the_obj->variant.file_variant.shrink_size =
+ yaffs_max_file_size(dev);
+ the_obj->variant.file_variant.top_level = 0;
+ the_obj->variant.file_variant.top = tn;
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ INIT_LIST_HEAD(&the_obj->variant.dir_variant.children);
+ INIT_LIST_HEAD(&the_obj->variant.dir_variant.dirty);
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* No action required */
+ break;
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* todo this should not happen */
+ break;
+ }
+ return the_obj;
+}
- if (block > 0) {
- dev->garbageCollections++;
- if (!aggressive) {
- dev->passiveGarbageCollections++;
- }
+static struct yaffs_obj *yaffs_create_fake_dir(struct yaffs_dev *dev,
+ int number, u32 mode)
+{
- T(YAFFS_TRACE_GC,
- (TSTR
- ("yaffs: GC erasedBlocks %d aggressive %d" TENDSTR),
- dev->nErasedBlocks, aggressive));
+ struct yaffs_obj *obj =
+ yaffs_new_obj(dev, number, YAFFS_OBJECT_TYPE_DIRECTORY);
- gcOk = yaffs_GarbageCollectBlock(dev, block);
- }
+ if (!obj)
+ return NULL;
- if (dev->nErasedBlocks < (dev->nReservedBlocks) && block > 0) {
- T(YAFFS_TRACE_GC,
- (TSTR
- ("yaffs: GC !!!no reclaim!!! erasedBlocks %d after try %d block %d"
- TENDSTR), dev->nErasedBlocks, maxTries, block));
- }
- } while ((dev->nErasedBlocks < dev->nReservedBlocks) && (block > 0)
- && (maxTries < 2));
+ obj->fake = 1; /* it is fake so it might not use NAND */
+ obj->rename_allowed = 0;
+ obj->unlink_allowed = 0;
+ obj->deleted = 0;
+ obj->unlinked = 0;
+ obj->yst_mode = mode;
+ obj->my_dev = dev;
+ obj->hdr_chunk = 0; /* Not a valid chunk. */
+ return obj;
- return aggressive ? gcOk : YAFFS_OK;
}
-/*------------------------- TAGS --------------------------------*/
-static int yaffs_TagsMatch(const yaffs_ExtendedTags * tags, int objectId,
- int chunkInObject)
+static void yaffs_init_tnodes_and_objs(struct yaffs_dev *dev)
{
- return (tags->chunkId == chunkInObject &&
- tags->objectId == objectId && !tags->chunkDeleted) ? 1 : 0;
-
-}
+ int i;
+ dev->n_obj = 0;
+ dev->n_tnodes = 0;
+ yaffs_init_raw_tnodes_and_objs(dev);
-/*-------------------- Data file manipulation -----------------*/
+ for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
+ INIT_LIST_HEAD(&dev->obj_bucket[i].list);
+ dev->obj_bucket[i].count = 0;
+ }
+}
-static int yaffs_FindChunkInFile(yaffs_Object * in, int chunkInInode,
- yaffs_ExtendedTags * tags)
+struct yaffs_obj *yaffs_find_or_create_by_number(struct yaffs_dev *dev,
+ int number,
+ enum yaffs_obj_type type)
{
- /*Get the Tnode, then get the level 0 offset chunk offset */
- yaffs_Tnode *tn;
- int theChunk = -1;
- yaffs_ExtendedTags localTags;
- int retVal = -1;
+ struct yaffs_obj *the_obj = NULL;
- yaffs_Device *dev = in->myDev;
+ if (number > 0)
+ the_obj = yaffs_find_by_number(dev, number);
- if (!tags) {
- /* Passed a NULL, so use our own tags space */
- tags = &localTags;
- }
+ if (!the_obj)
+ the_obj = yaffs_new_obj(dev, number, type);
- tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
+ return the_obj;
- if (tn) {
- theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
-
- retVal =
- yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
- chunkInInode);
- }
- return retVal;
}
-static int yaffs_FindAndDeleteChunkInFile(yaffs_Object * in, int chunkInInode,
- yaffs_ExtendedTags * tags)
+YCHAR *yaffs_clone_str(const YCHAR *str)
{
- /* Get the Tnode, then get the level 0 offset chunk offset */
- yaffs_Tnode *tn;
- int theChunk = -1;
- yaffs_ExtendedTags localTags;
+ YCHAR *new_str = NULL;
+ int len;
- yaffs_Device *dev = in->myDev;
- int retVal = -1;
+ if (!str)
+ str = _Y("");
- if (!tags) {
- /* Passed a NULL, so use our own tags space */
- tags = &localTags;
+ len = yaffs_strnlen(str, YAFFS_MAX_ALIAS_LENGTH);
+ new_str = kmalloc((len + 1) * sizeof(YCHAR), GFP_NOFS);
+ if (new_str) {
+ yaffs_strncpy(new_str, str, len);
+ new_str[len] = 0;
}
+ return new_str;
- tn = yaffs_FindLevel0Tnode(dev, &in->variant.fileVariant, chunkInInode);
-
- if (tn) {
-
- theChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
+}
+/*
+ *yaffs_update_parent() handles fixing a directories mtime and ctime when a new
+ * link (ie. name) is created or deleted in the directory.
+ *
+ * ie.
+ * create dir/a : update dir's mtime/ctime
+ * rm dir/a: update dir's mtime/ctime
+ * modify dir/a: don't update dir's mtimme/ctime
+ *
+ * This can be handled immediately or defered. Defering helps reduce the number
+ * of updates when many files in a directory are changed within a brief period.
+ *
+ * If the directory updating is defered then yaffs_update_dirty_dirs must be
+ * called periodically.
+ */
- retVal =
- yaffs_FindChunkInGroup(dev, theChunk, tags, in->objectId,
- chunkInInode);
+static void yaffs_update_parent(struct yaffs_obj *obj)
+{
+ struct yaffs_dev *dev;
- /* Delete the entry in the filestructure (if found) */
- if (retVal != -1) {
- yaffs_PutLevel0Tnode(dev,tn,chunkInInode,0);
+ if (!obj)
+ return;
+ dev = obj->my_dev;
+ obj->dirty = 1;
+ yaffs_load_current_time(obj, 0, 1);
+ if (dev->param.defered_dir_update) {
+ struct list_head *link = &obj->variant.dir_variant.dirty;
+
+ if (list_empty(link)) {
+ list_add(link, &dev->dirty_dirs);
+ yaffs_trace(YAFFS_TRACE_BACKGROUND,
+ "Added object %d to dirty directories",
+ obj->obj_id);
}
- } else {
- /*T(("No level 0 found for %d\n", chunkInInode)); */
- }
- if (retVal == -1) {
- /* T(("Could not find %d to delete\n",chunkInInode)); */
+ } else {
+ yaffs_update_oh(obj, NULL, 0, 0, 0, NULL);
}
- return retVal;
}
-#ifdef YAFFS_PARANOID
-
-static int yaffs_CheckFileSanity(yaffs_Object * in)
+void yaffs_update_dirty_dirs(struct yaffs_dev *dev)
{
- int chunk;
- int nChunks;
- int fSize;
- int failed = 0;
- int objId;
- yaffs_Tnode *tn;
- yaffs_Tags localTags;
- yaffs_Tags *tags = &localTags;
- int theChunk;
- int chunkDeleted;
-
- if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
- /* T(("Object not a file\n")); */
- return YAFFS_FAIL;
- }
-
- objId = in->objectId;
- fSize = in->variant.fileVariant.fileSize;
- nChunks =
- (fSize + in->myDev->nDataBytesPerChunk - 1) / in->myDev->nDataBytesPerChunk;
+ struct list_head *link;
+ struct yaffs_obj *obj;
+ struct yaffs_dir_var *d_s;
+ union yaffs_obj_var *o_v;
- for (chunk = 1; chunk <= nChunks; chunk++) {
- tn = yaffs_FindLevel0Tnode(in->myDev, &in->variant.fileVariant,
- chunk);
+ yaffs_trace(YAFFS_TRACE_BACKGROUND, "Update dirty directories");
- if (tn) {
+ while (!list_empty(&dev->dirty_dirs)) {
+ link = dev->dirty_dirs.next;
+ list_del_init(link);
- theChunk = yaffs_GetChunkGroupBase(dev,tn,chunk);
+ d_s = list_entry(link, struct yaffs_dir_var, dirty);
+ o_v = list_entry(d_s, union yaffs_obj_var, dir_variant);
+ obj = list_entry(o_v, struct yaffs_obj, variant);
- if (yaffs_CheckChunkBits
- (dev, theChunk / dev->nChunksPerBlock,
- theChunk % dev->nChunksPerBlock)) {
-
- yaffs_ReadChunkTagsFromNAND(in->myDev, theChunk,
- tags,
- &chunkDeleted);
- if (yaffs_TagsMatch
- (tags, in->objectId, chunk, chunkDeleted)) {
- /* found it; */
+ yaffs_trace(YAFFS_TRACE_BACKGROUND, "Update directory %d",
+ obj->obj_id);
- }
- } else {
-
- failed = 1;
- }
-
- } else {
- /* T(("No level 0 found for %d\n", chunk)); */
- }
+ if (obj->dirty)
+ yaffs_update_oh(obj, NULL, 0, 0, 0, NULL);
}
-
- return failed ? YAFFS_FAIL : YAFFS_OK;
}
-#endif
+/*
+ * Mknod (create) a new object.
+ * equiv_obj only has meaning for a hard link;
+ * alias_str only has meaning for a symlink.
+ * rdev only has meaning for devices (a subset of special objects)
+ */
-static int yaffs_PutChunkIntoFile(yaffs_Object * in, int chunkInInode,
- int chunkInNAND, int inScan)
+static struct yaffs_obj *yaffs_create_obj(enum yaffs_obj_type type,
+ struct yaffs_obj *parent,
+ const YCHAR *name,
+ u32 mode,
+ u32 uid,
+ u32 gid,
+ struct yaffs_obj *equiv_obj,
+ const YCHAR *alias_str, u32 rdev)
{
- /* NB inScan is zero unless scanning.
- * For forward scanning, inScan is > 0;
- * for backward scanning inScan is < 0
- */
-
- yaffs_Tnode *tn;
- yaffs_Device *dev = in->myDev;
- int existingChunk;
- yaffs_ExtendedTags existingTags;
- yaffs_ExtendedTags newTags;
- unsigned existingSerial, newSerial;
-
- if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
- /* Just ignore an attempt at putting a chunk into a non-file during scanning
- * If it is not during Scanning then something went wrong!
- */
- if (!inScan) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy:attempt to put data chunk into a non-file"
- TENDSTR)));
- YBUG();
- }
+ struct yaffs_obj *in;
+ YCHAR *str = NULL;
+ struct yaffs_dev *dev = parent->my_dev;
- yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
- return YAFFS_OK;
- }
+ /* Check if the entry exists.
+ * If it does then fail the call since we don't want a dup. */
+ if (yaffs_find_by_name(parent, name))
+ return NULL;
- tn = yaffs_AddOrFindLevel0Tnode(dev,
- &in->variant.fileVariant,
- chunkInInode,
- NULL);
- if (!tn) {
- return YAFFS_FAIL;
+ if (type == YAFFS_OBJECT_TYPE_SYMLINK) {
+ str = yaffs_clone_str(alias_str);
+ if (!str)
+ return NULL;
}
- existingChunk = yaffs_GetChunkGroupBase(dev,tn,chunkInInode);
+ in = yaffs_new_obj(dev, -1, type);
- if (inScan != 0) {
- /* If we're scanning then we need to test for duplicates
- * NB This does not need to be efficient since it should only ever
- * happen when the power fails during a write, then only one
- * chunk should ever be affected.
- *
- * Correction for YAFFS2: This could happen quite a lot and we need to think about efficiency! TODO
- * Update: For backward scanning we don't need to re-read tags so this is quite cheap.
- */
-
- if (existingChunk != 0) {
- /* NB Right now existing chunk will not be real chunkId if the device >= 32MB
- * thus we have to do a FindChunkInFile to get the real chunk id.
- *
- * We have a duplicate now we need to decide which one to use:
- *
- * Backwards scanning YAFFS2: The old one is what we use, dump the new one.
- * Forward scanning YAFFS2: The new one is what we use, dump the old one.
- * YAFFS1: Get both sets of tags and compare serial numbers.
- */
-
- if (inScan > 0) {
- /* Only do this for forward scanning */
- yaffs_ReadChunkWithTagsFromNAND(dev,
- chunkInNAND,
- NULL, &newTags);
+ if (!in) {
+ kfree(str);
+ return NULL;
+ }
- /* Do a proper find */
- existingChunk =
- yaffs_FindChunkInFile(in, chunkInInode,
- &existingTags);
- }
+ in->hdr_chunk = 0;
+ in->valid = 1;
+ in->variant_type = type;
- if (existingChunk <= 0) {
- /*Hoosterman - how did this happen? */
+ in->yst_mode = mode;
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: existing chunk < 0 in scan"
- TENDSTR)));
+ yaffs_attribs_init(in, gid, uid, rdev);
- }
+ in->n_data_chunks = 0;
- /* NB The deleted flags should be false, otherwise the chunks will
- * not be loaded during a scan
- */
+ yaffs_set_obj_name(in, name);
+ in->dirty = 1;
- newSerial = newTags.serialNumber;
- existingSerial = existingTags.serialNumber;
+ yaffs_add_obj_to_dir(parent, in);
- if ((inScan > 0) &&
- (in->myDev->isYaffs2 ||
- existingChunk <= 0 ||
- ((existingSerial + 1) & 3) == newSerial)) {
- /* Forward scanning.
- * Use new
- * Delete the old one and drop through to update the tnode
- */
- yaffs_DeleteChunk(dev, existingChunk, 1,
- __LINE__);
- } else {
- /* Backward scanning or we want to use the existing one
- * Use existing.
- * Delete the new one and return early so that the tnode isn't changed
- */
- yaffs_DeleteChunk(dev, chunkInNAND, 1,
- __LINE__);
- return YAFFS_OK;
- }
- }
+ in->my_dev = parent->my_dev;
+ switch (type) {
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ in->variant.symlink_variant.alias = str;
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ in->variant.hardlink_variant.equiv_obj = equiv_obj;
+ in->variant.hardlink_variant.equiv_id = equiv_obj->obj_id;
+ list_add(&in->hard_links, &equiv_obj->hard_links);
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* do nothing */
+ break;
}
- if (existingChunk == 0) {
- in->nDataChunks++;
+ if (yaffs_update_oh(in, name, 0, 0, 0, NULL) < 0) {
+ /* Could not create the object header, fail */
+ yaffs_del_obj(in);
+ in = NULL;
}
- yaffs_PutLevel0Tnode(dev,tn,chunkInInode,chunkInNAND);
+ if (in)
+ yaffs_update_parent(parent);
- return YAFFS_OK;
+ return in;
}
-static int yaffs_ReadChunkDataFromObject(yaffs_Object * in, int chunkInInode,
- __u8 * buffer)
+struct yaffs_obj *yaffs_create_file(struct yaffs_obj *parent,
+ const YCHAR *name, u32 mode, u32 uid,
+ u32 gid)
{
- int chunkInNAND = yaffs_FindChunkInFile(in, chunkInInode, NULL);
+ return yaffs_create_obj(YAFFS_OBJECT_TYPE_FILE, parent, name, mode,
+ uid, gid, NULL, NULL, 0);
+}
- if (chunkInNAND >= 0) {
- return yaffs_ReadChunkWithTagsFromNAND(in->myDev, chunkInNAND,
- buffer,NULL);
- } else {
- T(YAFFS_TRACE_NANDACCESS,
- (TSTR("Chunk %d not found zero instead" TENDSTR),
- chunkInNAND));
- /* get sane (zero) data if you read a hole */
- memset(buffer, 0, in->myDev->nDataBytesPerChunk);
- return 0;
- }
+struct yaffs_obj *yaffs_create_dir(struct yaffs_obj *parent, const YCHAR *name,
+ u32 mode, u32 uid, u32 gid)
+{
+ return yaffs_create_obj(YAFFS_OBJECT_TYPE_DIRECTORY, parent, name,
+ mode, uid, gid, NULL, NULL, 0);
+}
+struct yaffs_obj *yaffs_create_special(struct yaffs_obj *parent,
+ const YCHAR *name, u32 mode, u32 uid,
+ u32 gid, u32 rdev)
+{
+ return yaffs_create_obj(YAFFS_OBJECT_TYPE_SPECIAL, parent, name, mode,
+ uid, gid, NULL, NULL, rdev);
}
-void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn)
+struct yaffs_obj *yaffs_create_symlink(struct yaffs_obj *parent,
+ const YCHAR *name, u32 mode, u32 uid,
+ u32 gid, const YCHAR *alias)
{
- int block;
- int page;
- yaffs_ExtendedTags tags;
- yaffs_BlockInfo *bi;
+ return yaffs_create_obj(YAFFS_OBJECT_TYPE_SYMLINK, parent, name, mode,
+ uid, gid, NULL, alias, 0);
+}
- if (chunkId <= 0)
- return;
+/* yaffs_link_obj returns the object id of the equivalent object.*/
+struct yaffs_obj *yaffs_link_obj(struct yaffs_obj *parent, const YCHAR * name,
+ struct yaffs_obj *equiv_obj)
+{
+ /* Get the real object in case we were fed a hard link obj */
+ equiv_obj = yaffs_get_equivalent_obj(equiv_obj);
+ if (yaffs_create_obj(YAFFS_OBJECT_TYPE_HARDLINK,
+ parent, name, 0, 0, 0,
+ equiv_obj, NULL, 0))
+ return equiv_obj;
- dev->nDeletions++;
- block = chunkId / dev->nChunksPerBlock;
- page = chunkId % dev->nChunksPerBlock;
+ return NULL;
+}
- if(!yaffs_CheckChunkBit(dev,block,page))
- T(YAFFS_TRACE_VERIFY,
- (TSTR("Deleting invalid chunk %d"TENDSTR),
- chunkId));
- bi = yaffs_GetBlockInfo(dev, block);
- T(YAFFS_TRACE_DELETION,
- (TSTR("line %d delete of chunk %d" TENDSTR), lyn, chunkId));
+/*---------------------- Block Management and Page Allocation -------------*/
- if (markNAND &&
- bi->blockState != YAFFS_BLOCK_STATE_COLLECTING && !dev->isYaffs2) {
+static void yaffs_deinit_blocks(struct yaffs_dev *dev)
+{
+ if (dev->block_info_alt && dev->block_info)
+ vfree(dev->block_info);
+ else
+ kfree(dev->block_info);
- yaffs_InitialiseTags(&tags);
+ dev->block_info_alt = 0;
- tags.chunkDeleted = 1;
+ dev->block_info = NULL;
- yaffs_WriteChunkWithTagsToNAND(dev, chunkId, NULL, &tags);
- yaffs_HandleUpdateChunk(dev, chunkId, &tags);
- } else {
- dev->nUnmarkedDeletions++;
- }
+ if (dev->chunk_bits_alt && dev->chunk_bits)
+ vfree(dev->chunk_bits);
+ else
+ kfree(dev->chunk_bits);
+ dev->chunk_bits_alt = 0;
+ dev->chunk_bits = NULL;
+}
- /* Pull out of the management area.
- * If the whole block became dirty, this will kick off an erasure.
- */
- if (bi->blockState == YAFFS_BLOCK_STATE_ALLOCATING ||
- bi->blockState == YAFFS_BLOCK_STATE_FULL ||
- bi->blockState == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
- bi->blockState == YAFFS_BLOCK_STATE_COLLECTING) {
- dev->nFreeChunks++;
+static int yaffs_init_blocks(struct yaffs_dev *dev)
+{
+ int n_blocks = dev->internal_end_block - dev->internal_start_block + 1;
- yaffs_ClearChunkBit(dev, block, page);
+ dev->block_info = NULL;
+ dev->chunk_bits = NULL;
+ dev->alloc_block = -1; /* force it to get a new one */
- bi->pagesInUse--;
+ /* If the first allocation strategy fails, thry the alternate one */
+ dev->block_info =
+ kmalloc(n_blocks * sizeof(struct yaffs_block_info), GFP_NOFS);
+ if (!dev->block_info) {
+ dev->block_info =
+ vmalloc(n_blocks * sizeof(struct yaffs_block_info));
+ dev->block_info_alt = 1;
+ } else {
+ dev->block_info_alt = 0;
+ }
- if (bi->pagesInUse == 0 &&
- !bi->hasShrinkHeader &&
- bi->blockState != YAFFS_BLOCK_STATE_ALLOCATING &&
- bi->blockState != YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
- yaffs_BlockBecameDirty(dev, block);
- }
+ if (!dev->block_info)
+ goto alloc_error;
+ /* Set up dynamic blockinfo stuff. Round up bytes. */
+ dev->chunk_bit_stride = (dev->param.chunks_per_block + 7) / 8;
+ dev->chunk_bits =
+ kmalloc(dev->chunk_bit_stride * n_blocks, GFP_NOFS);
+ if (!dev->chunk_bits) {
+ dev->chunk_bits =
+ vmalloc(dev->chunk_bit_stride * n_blocks);
+ dev->chunk_bits_alt = 1;
} else {
- /* T(("Bad news deleting chunk %d\n",chunkId)); */
+ dev->chunk_bits_alt = 0;
}
+ if (!dev->chunk_bits)
+ goto alloc_error;
-}
-
-static int yaffs_WriteChunkDataToObject(yaffs_Object * in, int chunkInInode,
- const __u8 * buffer, int nBytes,
- int useReserve)
-{
- /* Find old chunk Need to do this to get serial number
- * Write new one and patch into tree.
- * Invalidate old tags.
- */
- int prevChunkId;
- yaffs_ExtendedTags prevTags;
+ memset(dev->block_info, 0, n_blocks * sizeof(struct yaffs_block_info));
+ memset(dev->chunk_bits, 0, dev->chunk_bit_stride * n_blocks);
+ return YAFFS_OK;
- int newChunkId;
- yaffs_ExtendedTags newTags;
+alloc_error:
+ yaffs_deinit_blocks(dev);
+ return YAFFS_FAIL;
+}
- yaffs_Device *dev = in->myDev;
- yaffs_CheckGarbageCollection(dev);
+void yaffs_block_became_dirty(struct yaffs_dev *dev, int block_no)
+{
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, block_no);
+ int erased_ok = 0;
+ int i;
- /* Get the previous chunk at this location in the file if it exists */
- prevChunkId = yaffs_FindChunkInFile(in, chunkInInode, &prevTags);
+ /* If the block is still healthy erase it and mark as clean.
+ * If the block has had a data failure, then retire it.
+ */
- /* Set up new tags */
- yaffs_InitialiseTags(&newTags);
+ yaffs_trace(YAFFS_TRACE_GC | YAFFS_TRACE_ERASE,
+ "yaffs_block_became_dirty block %d state %d %s",
+ block_no, bi->block_state,
+ (bi->needs_retiring) ? "needs retiring" : "");
- newTags.chunkId = chunkInInode;
- newTags.objectId = in->objectId;
- newTags.serialNumber =
- (prevChunkId >= 0) ? prevTags.serialNumber + 1 : 1;
- newTags.byteCount = nBytes;
+ yaffs2_clear_oldest_dirty_seq(dev, bi);
- newChunkId =
- yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
- useReserve);
+ bi->block_state = YAFFS_BLOCK_STATE_DIRTY;
- if (newChunkId >= 0) {
- yaffs_PutChunkIntoFile(in, chunkInInode, newChunkId, 0);
+ /* If this is the block being garbage collected then stop gc'ing */
+ if (block_no == dev->gc_block)
+ dev->gc_block = 0;
- if (prevChunkId >= 0) {
- yaffs_DeleteChunk(dev, prevChunkId, 1, __LINE__);
+ /* If this block is currently the best candidate for gc
+ * then drop as a candidate */
+ if (block_no == dev->gc_dirtiest) {
+ dev->gc_dirtiest = 0;
+ dev->gc_pages_in_use = 0;
+ }
+ if (!bi->needs_retiring) {
+ yaffs2_checkpt_invalidate(dev);
+ erased_ok = yaffs_erase_block(dev, block_no);
+ if (!erased_ok) {
+ dev->n_erase_failures++;
+ yaffs_trace(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
+ "**>> Erasure failed %d", block_no);
}
-
- yaffs_CheckFileSanity(in);
}
- return newChunkId;
-
-}
-
-/* UpdateObjectHeader updates the header on NAND for an object.
- * If name is not NULL, then that new name is used.
- */
-int yaffs_UpdateObjectHeader(yaffs_Object * in, const YCHAR * name, int force,
- int isShrink, int shadows)
-{
- yaffs_BlockInfo *bi;
-
- yaffs_Device *dev = in->myDev;
-
- int prevChunkId;
- int retVal = 0;
-
- int newChunkId;
- yaffs_ExtendedTags newTags;
- yaffs_ExtendedTags oldTags;
-
- __u8 *buffer = NULL;
- YCHAR oldName[YAFFS_MAX_NAME_LENGTH + 1];
-
- yaffs_ObjectHeader *oh = NULL;
-
- yaffs_strcpy(oldName,"silly old name");
+ /* Verify erasure if needed */
+ if (erased_ok &&
+ ((yaffs_trace_mask & YAFFS_TRACE_ERASE) ||
+ !yaffs_skip_verification(dev))) {
+ for (i = 0; i < dev->param.chunks_per_block; i++) {
+ if (!yaffs_check_chunk_erased(dev,
+ block_no * dev->param.chunks_per_block + i)) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ ">>Block %d erasure supposedly OK, but chunk %d not erased",
+ block_no, i);
+ }
+ }
+ }
- if (!in->fake || force) {
+ if (!erased_ok) {
+ /* We lost a block of free space */
+ dev->n_free_chunks -= dev->param.chunks_per_block;
+ yaffs_retire_block(dev, block_no);
+ yaffs_trace(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
+ "**>> Block %d retired", block_no);
+ return;
+ }
- yaffs_CheckGarbageCollection(dev);
- yaffs_CheckObjectDetailsLoaded(in);
+ /* Clean it up... */
+ bi->block_state = YAFFS_BLOCK_STATE_EMPTY;
+ bi->seq_number = 0;
+ dev->n_erased_blocks++;
+ bi->pages_in_use = 0;
+ bi->soft_del_pages = 0;
+ bi->has_shrink_hdr = 0;
+ bi->skip_erased_check = 1; /* Clean, so no need to check */
+ bi->gc_prioritise = 0;
+ bi->has_summary = 0;
+
+ yaffs_clear_chunk_bits(dev, block_no);
+
+ yaffs_trace(YAFFS_TRACE_ERASE, "Erased block %d", block_no);
+}
+
+static inline int yaffs_gc_process_chunk(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi,
+ int old_chunk, u8 *buffer)
+{
+ int new_chunk;
+ int mark_flash = 1;
+ struct yaffs_ext_tags tags;
+ struct yaffs_obj *object;
+ int matching_chunk;
+ int ret_val = YAFFS_OK;
+
+ memset(&tags, 0, sizeof(tags));
+ yaffs_rd_chunk_tags_nand(dev, old_chunk,
+ buffer, &tags);
+ object = yaffs_find_by_number(dev, tags.obj_id);
+
+ yaffs_trace(YAFFS_TRACE_GC_DETAIL,
+ "Collecting chunk in block %d, %d %d %d ",
+ dev->gc_chunk, tags.obj_id,
+ tags.chunk_id, tags.n_bytes);
+
+ if (object && !yaffs_skip_verification(dev)) {
+ if (tags.chunk_id == 0)
+ matching_chunk =
+ object->hdr_chunk;
+ else if (object->soft_del)
+ /* Defeat the test */
+ matching_chunk = old_chunk;
+ else
+ matching_chunk =
+ yaffs_find_chunk_in_file
+ (object, tags.chunk_id,
+ NULL);
+
+ if (old_chunk != matching_chunk)
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "gc: page in gc mismatch: %d %d %d %d",
+ old_chunk,
+ matching_chunk,
+ tags.obj_id,
+ tags.chunk_id);
+ }
+
+ if (!object) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "page %d in gc has no object: %d %d %d ",
+ old_chunk,
+ tags.obj_id, tags.chunk_id,
+ tags.n_bytes);
+ }
+
+ if (object &&
+ object->deleted &&
+ object->soft_del && tags.chunk_id != 0) {
+ /* Data chunk in a soft deleted file,
+ * throw it away.
+ * It's a soft deleted data chunk,
+ * No need to copy this, just forget
+ * about it and fix up the object.
+ */
- buffer = yaffs_GetTempBuffer(in->myDev, __LINE__);
- oh = (yaffs_ObjectHeader *) buffer;
+ /* Free chunks already includes
+ * softdeleted chunks, how ever this
+ * chunk is going to soon be really
+ * deleted which will increment free
+ * chunks. We have to decrement free
+ * chunks so this works out properly.
+ */
+ dev->n_free_chunks--;
+ bi->soft_del_pages--;
+
+ object->n_data_chunks--;
+ if (object->n_data_chunks <= 0) {
+ /* remeber to clean up obj */
+ dev->gc_cleanup_list[dev->n_clean_ups] = tags.obj_id;
+ dev->n_clean_ups++;
+ }
+ mark_flash = 0;
+ } else if (object) {
+ /* It's either a data chunk in a live
+ * file or an ObjectHeader, so we're
+ * interested in it.
+ * NB Need to keep the ObjectHeaders of
+ * deleted files until the whole file
+ * has been deleted off
+ */
+ tags.serial_number++;
+ dev->n_gc_copies++;
+
+ if (tags.chunk_id == 0) {
+ /* It is an object Id,
+ * We need to nuke the
+ * shrinkheader flags since its
+ * work is done.
+ * Also need to clean up
+ * shadowing.
+ */
+ struct yaffs_obj_hdr *oh;
+ oh = (struct yaffs_obj_hdr *) buffer;
+
+ oh->is_shrink = 0;
+ tags.extra_is_shrink = 0;
+ oh->shadows_obj = 0;
+ oh->inband_shadowed_obj_id = 0;
+ tags.extra_shadows = 0;
+
+ /* Update file size */
+ if (object->variant_type == YAFFS_OBJECT_TYPE_FILE) {
+ yaffs_oh_size_load(oh,
+ object->variant.file_variant.file_size);
+ tags.extra_file_size =
+ object->variant.file_variant.file_size;
+ }
- prevChunkId = in->chunkId;
+ yaffs_verify_oh(object, oh, &tags, 1);
+ new_chunk =
+ yaffs_write_new_chunk(dev, (u8 *) oh, &tags, 1);
+ } else {
+ new_chunk =
+ yaffs_write_new_chunk(dev, buffer, &tags, 1);
+ }
- if (prevChunkId >= 0) {
- yaffs_ReadChunkWithTagsFromNAND(dev, prevChunkId,
- buffer, &oldTags);
+ if (new_chunk < 0) {
+ ret_val = YAFFS_FAIL;
+ } else {
- yaffs_VerifyObjectHeader(in,oh,&oldTags,0);
+ /* Now fix up the Tnodes etc. */
- memcpy(oldName, oh->name, sizeof(oh->name));
+ if (tags.chunk_id == 0) {
+ /* It's a header */
+ object->hdr_chunk = new_chunk;
+ object->serial = tags.serial_number;
+ } else {
+ /* It's a data chunk */
+ yaffs_put_chunk_in_file(object, tags.chunk_id,
+ new_chunk, 0);
+ }
}
+ }
+ if (ret_val == YAFFS_OK)
+ yaffs_chunk_del(dev, old_chunk, mark_flash, __LINE__);
+ return ret_val;
+}
- memset(buffer, 0xFF, dev->nDataBytesPerChunk);
+static int yaffs_gc_block(struct yaffs_dev *dev, int block, int whole_block)
+{
+ int old_chunk;
+ int ret_val = YAFFS_OK;
+ int i;
+ int is_checkpt_block;
+ int max_copies;
+ int chunks_before = yaffs_get_erased_chunks(dev);
+ int chunks_after;
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, block);
- oh->type = in->variantType;
- oh->yst_mode = in->yst_mode;
- oh->shadowsObject = shadows;
+ is_checkpt_block = (bi->block_state == YAFFS_BLOCK_STATE_CHECKPOINT);
-#ifdef CONFIG_YAFFS_WINCE
- oh->win_atime[0] = in->win_atime[0];
- oh->win_ctime[0] = in->win_ctime[0];
- oh->win_mtime[0] = in->win_mtime[0];
- oh->win_atime[1] = in->win_atime[1];
- oh->win_ctime[1] = in->win_ctime[1];
- oh->win_mtime[1] = in->win_mtime[1];
-#else
- oh->yst_uid = in->yst_uid;
- oh->yst_gid = in->yst_gid;
- oh->yst_atime = in->yst_atime;
- oh->yst_mtime = in->yst_mtime;
- oh->yst_ctime = in->yst_ctime;
- oh->yst_rdev = in->yst_rdev;
-#endif
- if (in->parent) {
- oh->parentObjectId = in->parent->objectId;
- } else {
- oh->parentObjectId = 0;
- }
+ yaffs_trace(YAFFS_TRACE_TRACING,
+ "Collecting block %d, in use %d, shrink %d, whole_block %d",
+ block, bi->pages_in_use, bi->has_shrink_hdr,
+ whole_block);
- if (name && *name) {
- memset(oh->name, 0, sizeof(oh->name));
- yaffs_strncpy(oh->name, name, YAFFS_MAX_NAME_LENGTH);
- } else if (prevChunkId>=0) {
- memcpy(oh->name, oldName, sizeof(oh->name));
- } else {
- memset(oh->name, 0, sizeof(oh->name));
- }
+ /*yaffs_verify_free_chunks(dev); */
- oh->isShrink = isShrink;
+ if (bi->block_state == YAFFS_BLOCK_STATE_FULL)
+ bi->block_state = YAFFS_BLOCK_STATE_COLLECTING;
- switch (in->variantType) {
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* Should not happen */
- break;
- case YAFFS_OBJECT_TYPE_FILE:
- oh->fileSize =
- (oh->parentObjectId == YAFFS_OBJECTID_DELETED
- || oh->parentObjectId ==
- YAFFS_OBJECTID_UNLINKED) ? 0 : in->variant.
- fileVariant.fileSize;
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- oh->equivalentObjectId =
- in->variant.hardLinkVariant.equivalentObjectId;
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- yaffs_strncpy(oh->alias,
- in->variant.symLinkVariant.alias,
- YAFFS_MAX_ALIAS_LENGTH);
- oh->alias[YAFFS_MAX_ALIAS_LENGTH] = 0;
- break;
- }
+ bi->has_shrink_hdr = 0; /* clear the flag so that the block can erase */
- /* Tags */
- yaffs_InitialiseTags(&newTags);
- in->serial++;
- newTags.chunkId = 0;
- newTags.objectId = in->objectId;
- newTags.serialNumber = in->serial;
+ dev->gc_disable = 1;
- /* Add extra info for file header */
+ yaffs_summary_gc(dev, block);
- newTags.extraHeaderInfoAvailable = 1;
- newTags.extraParentObjectId = oh->parentObjectId;
- newTags.extraFileLength = oh->fileSize;
- newTags.extraIsShrinkHeader = oh->isShrink;
- newTags.extraEquivalentObjectId = oh->equivalentObjectId;
- newTags.extraShadows = (oh->shadowsObject > 0) ? 1 : 0;
- newTags.extraObjectType = in->variantType;
-
- yaffs_VerifyObjectHeader(in,oh,&newTags,1);
+ if (is_checkpt_block || !yaffs_still_some_chunks(dev, block)) {
+ yaffs_trace(YAFFS_TRACE_TRACING,
+ "Collecting block %d that has no chunks in use",
+ block);
+ yaffs_block_became_dirty(dev, block);
+ } else {
- /* Create new chunk in NAND */
- newChunkId =
- yaffs_WriteNewChunkWithTagsToNAND(dev, buffer, &newTags,
- (prevChunkId >= 0) ? 1 : 0);
+ u8 *buffer = yaffs_get_temp_buffer(dev);
- if (newChunkId >= 0) {
+ yaffs_verify_blk(dev, bi, block);
- in->chunkId = newChunkId;
+ max_copies = (whole_block) ? dev->param.chunks_per_block : 5;
+ old_chunk = block * dev->param.chunks_per_block + dev->gc_chunk;
- if (prevChunkId >= 0) {
- yaffs_DeleteChunk(dev, prevChunkId, 1,
- __LINE__);
+ for (/* init already done */ ;
+ ret_val == YAFFS_OK &&
+ dev->gc_chunk < dev->param.chunks_per_block &&
+ (bi->block_state == YAFFS_BLOCK_STATE_COLLECTING) &&
+ max_copies > 0;
+ dev->gc_chunk++, old_chunk++) {
+ if (yaffs_check_chunk_bit(dev, block, dev->gc_chunk)) {
+ /* Page is in use and might need to be copied */
+ max_copies--;
+ ret_val = yaffs_gc_process_chunk(dev, bi,
+ old_chunk, buffer);
}
+ }
+ yaffs_release_temp_buffer(dev, buffer);
+ }
- if(!yaffs_ObjectHasCachedWriteData(in))
- in->dirty = 0;
+ yaffs_verify_collected_blk(dev, bi, block);
- /* If this was a shrink, then mark the block that the chunk lives on */
- if (isShrink) {
- bi = yaffs_GetBlockInfo(in->myDev,
- newChunkId /in->myDev-> nChunksPerBlock);
- bi->hasShrinkHeader = 1;
+ if (bi->block_state == YAFFS_BLOCK_STATE_COLLECTING) {
+ /*
+ * The gc did not complete. Set block state back to FULL
+ * because checkpointing does not restore gc.
+ */
+ bi->block_state = YAFFS_BLOCK_STATE_FULL;
+ } else {
+ /* The gc completed. */
+ /* Do any required cleanups */
+ for (i = 0; i < dev->n_clean_ups; i++) {
+ /* Time to delete the file too */
+ struct yaffs_obj *object =
+ yaffs_find_by_number(dev, dev->gc_cleanup_list[i]);
+ if (object) {
+ yaffs_free_tnode(dev,
+ object->variant.file_variant.top);
+ object->variant.file_variant.top = NULL;
+ yaffs_trace(YAFFS_TRACE_GC,
+ "yaffs: About to finally delete object %d",
+ object->obj_id);
+ yaffs_generic_obj_del(object);
+ object->my_dev->n_deleted_files--;
}
}
-
- retVal = newChunkId;
-
+ chunks_after = yaffs_get_erased_chunks(dev);
+ if (chunks_before >= chunks_after)
+ yaffs_trace(YAFFS_TRACE_GC,
+ "gc did not increase free chunks before %d after %d",
+ chunks_before, chunks_after);
+ dev->gc_block = 0;
+ dev->gc_chunk = 0;
+ dev->n_clean_ups = 0;
}
- if (buffer)
- yaffs_ReleaseTempBuffer(dev, buffer, __LINE__);
+ dev->gc_disable = 0;
- return retVal;
+ return ret_val;
}
-/*------------------------ Short Operations Cache ----------------------------------------
- * In many situations where there is no high level buffering (eg WinCE) a lot of
- * reads might be short sequential reads, and a lot of writes may be short
- * sequential writes. eg. scanning/writing a jpeg file.
- * In these cases, a short read/write cache can provide a huge perfomance benefit
- * with dumb-as-a-rock code.
- * In Linux, the page cache provides read buffering aand the short op cache provides write
- * buffering.
- *
- * There are a limited number (~10) of cache chunks per device so that we don't
- * need a very intelligent search.
+/*
+ * find_gc_block() selects the dirtiest block (or close enough)
+ * for garbage collection.
*/
-static int yaffs_ObjectHasCachedWriteData(yaffs_Object *obj)
+static unsigned yaffs_find_gc_block(struct yaffs_dev *dev,
+ int aggressive, int background)
{
- yaffs_Device *dev = obj->myDev;
int i;
- yaffs_ChunkCache *cache;
- int nCaches = obj->myDev->nShortOpCaches;
-
- for(i = 0; i < nCaches; i++){
- cache = &dev->srCache[i];
- if (cache->object == obj &&
- cache->dirty)
- return 1;
- }
-
- return 0;
-}
-
+ int iterations;
+ unsigned selected = 0;
+ int prioritised = 0;
+ int prioritised_exist = 0;
+ struct yaffs_block_info *bi;
+ int threshold;
-static void yaffs_FlushFilesChunkCache(yaffs_Object * obj)
-{
- yaffs_Device *dev = obj->myDev;
- int lowest = -99; /* Stop compiler whining. */
- int i;
- yaffs_ChunkCache *cache;
- int chunkWritten = 0;
- int nCaches = obj->myDev->nShortOpCaches;
-
- if (nCaches > 0) {
- do {
- cache = NULL;
-
- /* Find the dirty cache for this object with the lowest chunk id. */
- for (i = 0; i < nCaches; i++) {
- if (dev->srCache[i].object == obj &&
- dev->srCache[i].dirty) {
- if (!cache
- || dev->srCache[i].chunkId <
- lowest) {
- cache = &dev->srCache[i];
- lowest = cache->chunkId;
- }
+ /* First let's see if we need to grab a prioritised block */
+ if (dev->has_pending_prioritised_gc && !aggressive) {
+ dev->gc_dirtiest = 0;
+ bi = dev->block_info;
+ for (i = dev->internal_start_block;
+ i <= dev->internal_end_block && !selected; i++) {
+
+ if (bi->gc_prioritise) {
+ prioritised_exist = 1;
+ if (bi->block_state == YAFFS_BLOCK_STATE_FULL &&
+ yaffs_block_ok_for_gc(dev, bi)) {
+ selected = i;
+ prioritised = 1;
}
}
-
- if (cache && !cache->locked) {
- /* Write it out and free it up */
-
- chunkWritten =
- yaffs_WriteChunkDataToObject(cache->object,
- cache->chunkId,
- cache->data,
- cache->nBytes,
- 1);
- cache->dirty = 0;
- cache->object = NULL;
- }
-
- } while (cache && chunkWritten > 0);
-
- if (cache) {
- /* Hoosterman, disk full while writing cache out. */
- T(YAFFS_TRACE_ERROR,
- (TSTR("yaffs tragedy: no space during cache write" TENDSTR)));
-
+ bi++;
}
- }
-}
+ /*
+ * If there is a prioritised block and none was selected then
+ * this happened because there is at least one old dirty block
+ * gumming up the works. Let's gc the oldest dirty block.
+ */
-/*yaffs_FlushEntireDeviceCache(dev)
- *
- *
- */
+ if (prioritised_exist &&
+ !selected && dev->oldest_dirty_block > 0)
+ selected = dev->oldest_dirty_block;
-void yaffs_FlushEntireDeviceCache(yaffs_Device *dev)
-{
- yaffs_Object *obj;
- int nCaches = dev->nShortOpCaches;
- int i;
+ if (!prioritised_exist) /* None found, so we can clear this */
+ dev->has_pending_prioritised_gc = 0;
+ }
- /* Find a dirty object in the cache and flush it...
- * until there are no further dirty objects.
+ /* If we're doing aggressive GC then we are happy to take a less-dirty
+ * block, and search harder.
+ * else (leasurely gc), then we only bother to do this if the
+ * block has only a few pages in use.
*/
- do {
- obj = NULL;
- for( i = 0; i < nCaches && !obj; i++) {
- if (dev->srCache[i].object &&
- dev->srCache[i].dirty)
- obj = dev->srCache[i].object;
- }
- if(obj)
- yaffs_FlushFilesChunkCache(obj);
+ if (!selected) {
+ int pages_used;
+ int n_blocks =
+ dev->internal_end_block - dev->internal_start_block + 1;
+ if (aggressive) {
+ threshold = dev->param.chunks_per_block;
+ iterations = n_blocks;
+ } else {
+ int max_threshold;
- } while(obj);
+ if (background)
+ max_threshold = dev->param.chunks_per_block / 2;
+ else
+ max_threshold = dev->param.chunks_per_block / 8;
-}
+ if (max_threshold < YAFFS_GC_PASSIVE_THRESHOLD)
+ max_threshold = YAFFS_GC_PASSIVE_THRESHOLD;
+ threshold = background ? (dev->gc_not_done + 2) * 2 : 0;
+ if (threshold < YAFFS_GC_PASSIVE_THRESHOLD)
+ threshold = YAFFS_GC_PASSIVE_THRESHOLD;
+ if (threshold > max_threshold)
+ threshold = max_threshold;
-/* Grab us a cache chunk for use.
- * First look for an empty one.
- * Then look for the least recently used non-dirty one.
- * Then look for the least recently used dirty one...., flush and look again.
- */
-static yaffs_ChunkCache *yaffs_GrabChunkCacheWorker(yaffs_Device * dev)
-{
- int i;
- int usage;
- int theOne;
+ iterations = n_blocks / 16 + 1;
+ if (iterations > 100)
+ iterations = 100;
+ }
- if (dev->nShortOpCaches > 0) {
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (!dev->srCache[i].object)
- return &dev->srCache[i];
+ for (i = 0;
+ i < iterations &&
+ (dev->gc_dirtiest < 1 ||
+ dev->gc_pages_in_use > YAFFS_GC_GOOD_ENOUGH);
+ i++) {
+ dev->gc_block_finder++;
+ if (dev->gc_block_finder < dev->internal_start_block ||
+ dev->gc_block_finder > dev->internal_end_block)
+ dev->gc_block_finder =
+ dev->internal_start_block;
+
+ bi = yaffs_get_block_info(dev, dev->gc_block_finder);
+
+ pages_used = bi->pages_in_use - bi->soft_del_pages;
+
+ if (bi->block_state == YAFFS_BLOCK_STATE_FULL &&
+ pages_used < dev->param.chunks_per_block &&
+ (dev->gc_dirtiest < 1 ||
+ pages_used < dev->gc_pages_in_use) &&
+ yaffs_block_ok_for_gc(dev, bi)) {
+ dev->gc_dirtiest = dev->gc_block_finder;
+ dev->gc_pages_in_use = pages_used;
+ }
}
- return NULL;
+ if (dev->gc_dirtiest > 0 && dev->gc_pages_in_use <= threshold)
+ selected = dev->gc_dirtiest;
+ }
- theOne = -1;
- usage = 0; /* just to stop the compiler grizzling */
+ /*
+ * If nothing has been selected for a while, try the oldest dirty
+ * because that's gumming up the works.
+ */
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (!dev->srCache[i].dirty &&
- ((dev->srCache[i].lastUse < usage && theOne >= 0) ||
- theOne < 0)) {
- usage = dev->srCache[i].lastUse;
- theOne = i;
- }
+ if (!selected && dev->param.is_yaffs2 &&
+ dev->gc_not_done >= (background ? 10 : 20)) {
+ yaffs2_find_oldest_dirty_seq(dev);
+ if (dev->oldest_dirty_block > 0) {
+ selected = dev->oldest_dirty_block;
+ dev->gc_dirtiest = selected;
+ dev->oldest_dirty_gc_count++;
+ bi = yaffs_get_block_info(dev, selected);
+ dev->gc_pages_in_use =
+ bi->pages_in_use - bi->soft_del_pages;
+ } else {
+ dev->gc_not_done = 0;
}
+ }
+
+ if (selected) {
+ yaffs_trace(YAFFS_TRACE_GC,
+ "GC Selected block %d with %d free, prioritised:%d",
+ selected,
+ dev->param.chunks_per_block - dev->gc_pages_in_use,
+ prioritised);
+ dev->n_gc_blocks++;
+ if (background)
+ dev->bg_gcs++;
- return theOne >= 0 ? &dev->srCache[theOne] : NULL;
+ dev->gc_dirtiest = 0;
+ dev->gc_pages_in_use = 0;
+ dev->gc_not_done = 0;
+ if (dev->refresh_skip > 0)
+ dev->refresh_skip--;
} else {
- return NULL;
+ dev->gc_not_done++;
+ yaffs_trace(YAFFS_TRACE_GC,
+ "GC none: finder %d skip %d threshold %d dirtiest %d using %d oldest %d%s",
+ dev->gc_block_finder, dev->gc_not_done, threshold,
+ dev->gc_dirtiest, dev->gc_pages_in_use,
+ dev->oldest_dirty_block, background ? " bg" : "");
}
+ return selected;
}
-static yaffs_ChunkCache *yaffs_GrabChunkCache(yaffs_Device * dev)
+/* New garbage collector
+ * If we're very low on erased blocks then we do aggressive garbage collection
+ * otherwise we do "leasurely" garbage collection.
+ * Aggressive gc looks further (whole array) and will accept less dirty blocks.
+ * Passive gc only inspects smaller areas and only accepts more dirty blocks.
+ *
+ * The idea is to help clear out space in a more spread-out manner.
+ * Dunno if it really does anything useful.
+ */
+static int yaffs_check_gc(struct yaffs_dev *dev, int background)
{
- yaffs_ChunkCache *cache;
- yaffs_Object *theObj;
- int usage;
- int i;
+ int aggressive = 0;
+ int gc_ok = YAFFS_OK;
+ int max_tries = 0;
+ int min_erased;
+ int erased_chunks;
+ int checkpt_block_adjust;
- if (dev->nShortOpCaches > 0) {
- /* Try find a non-dirty one... */
+ if (dev->param.gc_control && (dev->param.gc_control(dev) & 1) == 0)
+ return YAFFS_OK;
- cache = yaffs_GrabChunkCacheWorker(dev);
+ if (dev->gc_disable)
+ /* Bail out so we don't get recursive gc */
+ return YAFFS_OK;
- if (!cache) {
- /* They were all dirty, find the last recently used object and flush
- * its cache, then find again.
- * NB what's here is not very accurate, we actually flush the object
- * the last recently used page.
- */
+ /* This loop should pass the first time.
+ * Only loops here if the collection does not increase space.
+ */
- /* With locking we can't assume we can use entry zero */
+ do {
+ max_tries++;
- theObj = NULL;
- usage = -1;
- cache = NULL;
+ checkpt_block_adjust = yaffs_calc_checkpt_blocks_required(dev);
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].object &&
- !dev->srCache[i].locked &&
- (dev->srCache[i].lastUse < usage || !cache))
- {
- usage = dev->srCache[i].lastUse;
- theObj = dev->srCache[i].object;
- cache = &dev->srCache[i];
- }
- }
+ min_erased =
+ dev->param.n_reserved_blocks + checkpt_block_adjust + 1;
+ erased_chunks =
+ dev->n_erased_blocks * dev->param.chunks_per_block;
- if (!cache || cache->dirty) {
- /* Flush and try again */
- yaffs_FlushFilesChunkCache(theObj);
- cache = yaffs_GrabChunkCacheWorker(dev);
+ /* If we need a block soon then do aggressive gc. */
+ if (dev->n_erased_blocks < min_erased)
+ aggressive = 1;
+ else {
+ if (!background
+ && erased_chunks > (dev->n_free_chunks / 4))
+ break;
+
+ if (dev->gc_skip > 20)
+ dev->gc_skip = 20;
+ if (erased_chunks < dev->n_free_chunks / 2 ||
+ dev->gc_skip < 1 || background)
+ aggressive = 0;
+ else {
+ dev->gc_skip--;
+ break;
}
-
}
- return cache;
- } else
- return NULL;
-}
+ dev->gc_skip = 5;
-/* Find a cached chunk */
-static yaffs_ChunkCache *yaffs_FindChunkCache(const yaffs_Object * obj,
- int chunkId)
-{
- yaffs_Device *dev = obj->myDev;
- int i;
- if (dev->nShortOpCaches > 0) {
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].object == obj &&
- dev->srCache[i].chunkId == chunkId) {
- dev->cacheHits++;
+ /* If we don't already have a block being gc'd then see if we
+ * should start another */
- return &dev->srCache[i];
- }
+ if (dev->gc_block < 1 && !aggressive) {
+ dev->gc_block = yaffs2_find_refresh_block(dev);
+ dev->gc_chunk = 0;
+ dev->n_clean_ups = 0;
}
- }
- return NULL;
-}
-
-/* Mark the chunk for the least recently used algorithym */
-static void yaffs_UseChunkCache(yaffs_Device * dev, yaffs_ChunkCache * cache,
- int isAWrite)
-{
-
- if (dev->nShortOpCaches > 0) {
- if (dev->srLastUse < 0 || dev->srLastUse > 100000000) {
- /* Reset the cache usages */
- int i;
- for (i = 1; i < dev->nShortOpCaches; i++) {
- dev->srCache[i].lastUse = 0;
- }
- dev->srLastUse = 0;
+ if (dev->gc_block < 1) {
+ dev->gc_block =
+ yaffs_find_gc_block(dev, aggressive, background);
+ dev->gc_chunk = 0;
+ dev->n_clean_ups = 0;
}
- dev->srLastUse++;
+ if (dev->gc_block > 0) {
+ dev->all_gcs++;
+ if (!aggressive)
+ dev->passive_gc_count++;
- cache->lastUse = dev->srLastUse;
+ yaffs_trace(YAFFS_TRACE_GC,
+ "yaffs: GC n_erased_blocks %d aggressive %d",
+ dev->n_erased_blocks, aggressive);
- if (isAWrite) {
- cache->dirty = 1;
+ gc_ok = yaffs_gc_block(dev, dev->gc_block, aggressive);
}
- }
-}
-/* Invalidate a single cache page.
- * Do this when a whole page gets written,
- * ie the short cache for this page is no longer valid.
- */
-static void yaffs_InvalidateChunkCache(yaffs_Object * object, int chunkId)
-{
- if (object->myDev->nShortOpCaches > 0) {
- yaffs_ChunkCache *cache = yaffs_FindChunkCache(object, chunkId);
-
- if (cache) {
- cache->object = NULL;
+ if (dev->n_erased_blocks < (dev->param.n_reserved_blocks) &&
+ dev->gc_block > 0) {
+ yaffs_trace(YAFFS_TRACE_GC,
+ "yaffs: GC !!!no reclaim!!! n_erased_blocks %d after try %d block %d",
+ dev->n_erased_blocks, max_tries,
+ dev->gc_block);
}
- }
-}
+ } while ((dev->n_erased_blocks < dev->param.n_reserved_blocks) &&
+ (dev->gc_block > 0) && (max_tries < 2));
-/* Invalidate all the cache pages associated with this object
- * Do this whenever ther file is deleted or resized.
- */
-static void yaffs_InvalidateWholeChunkCache(yaffs_Object * in)
-{
- int i;
- yaffs_Device *dev = in->myDev;
-
- if (dev->nShortOpCaches > 0) {
- /* Invalidate it. */
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].object == in) {
- dev->srCache[i].object = NULL;
- }
- }
- }
+ return aggressive ? gc_ok : YAFFS_OK;
}
-/*--------------------- Checkpointing --------------------*/
-
-
-static int yaffs_WriteCheckpointValidityMarker(yaffs_Device *dev,int head)
+/*
+ * yaffs_bg_gc()
+ * Garbage collects. Intended to be called from a background thread.
+ * Returns non-zero if at least half the free chunks are erased.
+ */
+int yaffs_bg_gc(struct yaffs_dev *dev, unsigned urgency)
{
- yaffs_CheckpointValidity cp;
+ int erased_chunks = dev->n_erased_blocks * dev->param.chunks_per_block;
- memset(&cp,0,sizeof(cp));
+ yaffs_trace(YAFFS_TRACE_BACKGROUND, "Background gc %u", urgency);
- cp.structType = sizeof(cp);
- cp.magic = YAFFS_MAGIC;
- cp.version = YAFFS_CHECKPOINT_VERSION;
- cp.head = (head) ? 1 : 0;
-
- return (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp))?
- 1 : 0;
+ yaffs_check_gc(dev, 1);
+ return erased_chunks > dev->n_free_chunks / 2;
}
-static int yaffs_ReadCheckpointValidityMarker(yaffs_Device *dev, int head)
-{
- yaffs_CheckpointValidity cp;
- int ok;
-
- ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
-
- if(ok)
- ok = (cp.structType == sizeof(cp)) &&
- (cp.magic == YAFFS_MAGIC) &&
- (cp.version == YAFFS_CHECKPOINT_VERSION) &&
- (cp.head == ((head) ? 1 : 0));
- return ok ? 1 : 0;
-}
+/*-------------------- Data file manipulation -----------------*/
-static void yaffs_DeviceToCheckpointDevice(yaffs_CheckpointDevice *cp,
- yaffs_Device *dev)
+static int yaffs_rd_data_obj(struct yaffs_obj *in, int inode_chunk, u8 * buffer)
{
- cp->nErasedBlocks = dev->nErasedBlocks;
- cp->allocationBlock = dev->allocationBlock;
- cp->allocationPage = dev->allocationPage;
- cp->nFreeChunks = dev->nFreeChunks;
+ int nand_chunk = yaffs_find_chunk_in_file(in, inode_chunk, NULL);
- cp->nDeletedFiles = dev->nDeletedFiles;
- cp->nUnlinkedFiles = dev->nUnlinkedFiles;
- cp->nBackgroundDeletions = dev->nBackgroundDeletions;
- cp->sequenceNumber = dev->sequenceNumber;
- cp->oldestDirtySequence = dev->oldestDirtySequence;
+ if (nand_chunk >= 0)
+ return yaffs_rd_chunk_tags_nand(in->my_dev, nand_chunk,
+ buffer, NULL);
+ else {
+ yaffs_trace(YAFFS_TRACE_NANDACCESS,
+ "Chunk %d not found zero instead",
+ nand_chunk);
+ /* get sane (zero) data if you read a hole */
+ memset(buffer, 0, in->my_dev->data_bytes_per_chunk);
+ return 0;
+ }
}
-static void yaffs_CheckpointDeviceToDevice(yaffs_Device *dev,
- yaffs_CheckpointDevice *cp)
+void yaffs_chunk_del(struct yaffs_dev *dev, int chunk_id, int mark_flash,
+ int lyn)
{
- dev->nErasedBlocks = cp->nErasedBlocks;
- dev->allocationBlock = cp->allocationBlock;
- dev->allocationPage = cp->allocationPage;
- dev->nFreeChunks = cp->nFreeChunks;
+ int block;
+ int page;
+ struct yaffs_ext_tags tags;
+ struct yaffs_block_info *bi;
- dev->nDeletedFiles = cp->nDeletedFiles;
- dev->nUnlinkedFiles = cp->nUnlinkedFiles;
- dev->nBackgroundDeletions = cp->nBackgroundDeletions;
- dev->sequenceNumber = cp->sequenceNumber;
- dev->oldestDirtySequence = cp->oldestDirtySequence;
-}
+ if (chunk_id <= 0)
+ return;
+ dev->n_deletions++;
+ block = chunk_id / dev->param.chunks_per_block;
+ page = chunk_id % dev->param.chunks_per_block;
-static int yaffs_WriteCheckpointDevice(yaffs_Device *dev)
-{
- yaffs_CheckpointDevice cp;
- __u32 nBytes;
- __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
+ if (!yaffs_check_chunk_bit(dev, block, page))
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Deleting invalid chunk %d", chunk_id);
- int ok;
+ bi = yaffs_get_block_info(dev, block);
- /* Write device runtime values*/
- yaffs_DeviceToCheckpointDevice(&cp,dev);
- cp.structType = sizeof(cp);
+ yaffs2_update_oldest_dirty_seq(dev, block, bi);
- ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
+ yaffs_trace(YAFFS_TRACE_DELETION,
+ "line %d delete of chunk %d",
+ lyn, chunk_id);
- /* Write block info */
- if(ok) {
- nBytes = nBlocks * sizeof(yaffs_BlockInfo);
- ok = (yaffs_CheckpointWrite(dev,dev->blockInfo,nBytes) == nBytes);
- }
+ if (!dev->param.is_yaffs2 && mark_flash &&
+ bi->block_state != YAFFS_BLOCK_STATE_COLLECTING) {
- /* Write chunk bits */
- if(ok) {
- nBytes = nBlocks * dev->chunkBitmapStride;
- ok = (yaffs_CheckpointWrite(dev,dev->chunkBits,nBytes) == nBytes);
+ memset(&tags, 0, sizeof(tags));
+ tags.is_deleted = 1;
+ yaffs_wr_chunk_tags_nand(dev, chunk_id, NULL, &tags);
+ yaffs_handle_chunk_update(dev, chunk_id, &tags);
+ } else {
+ dev->n_unmarked_deletions++;
}
- return ok ? 1 : 0;
+ /* Pull out of the management area.
+ * If the whole block became dirty, this will kick off an erasure.
+ */
+ if (bi->block_state == YAFFS_BLOCK_STATE_ALLOCATING ||
+ bi->block_state == YAFFS_BLOCK_STATE_FULL ||
+ bi->block_state == YAFFS_BLOCK_STATE_NEEDS_SCAN ||
+ bi->block_state == YAFFS_BLOCK_STATE_COLLECTING) {
+ dev->n_free_chunks++;
+ yaffs_clear_chunk_bit(dev, block, page);
+ bi->pages_in_use--;
+
+ if (bi->pages_in_use == 0 &&
+ !bi->has_shrink_hdr &&
+ bi->block_state != YAFFS_BLOCK_STATE_ALLOCATING &&
+ bi->block_state != YAFFS_BLOCK_STATE_NEEDS_SCAN) {
+ yaffs_block_became_dirty(dev, block);
+ }
+ }
}
-static int yaffs_ReadCheckpointDevice(yaffs_Device *dev)
+static int yaffs_wr_data_obj(struct yaffs_obj *in, int inode_chunk,
+ const u8 *buffer, int n_bytes, int use_reserve)
{
- yaffs_CheckpointDevice cp;
- __u32 nBytes;
- __u32 nBlocks = (dev->internalEndBlock - dev->internalStartBlock + 1);
+ /* Find old chunk Need to do this to get serial number
+ * Write new one and patch into tree.
+ * Invalidate old tags.
+ */
- int ok;
+ int prev_chunk_id;
+ struct yaffs_ext_tags prev_tags;
+ int new_chunk_id;
+ struct yaffs_ext_tags new_tags;
+ struct yaffs_dev *dev = in->my_dev;
- ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
- if(!ok)
- return 0;
+ yaffs_check_gc(dev, 0);
- if(cp.structType != sizeof(cp))
+ /* Get the previous chunk at this location in the file if it exists.
+ * If it does not exist then put a zero into the tree. This creates
+ * the tnode now, rather than later when it is harder to clean up.
+ */
+ prev_chunk_id = yaffs_find_chunk_in_file(in, inode_chunk, &prev_tags);
+ if (prev_chunk_id < 1 &&
+ !yaffs_put_chunk_in_file(in, inode_chunk, 0, 0))
return 0;
+ /* Set up new tags */
+ memset(&new_tags, 0, sizeof(new_tags));
- yaffs_CheckpointDeviceToDevice(dev,&cp);
+ new_tags.chunk_id = inode_chunk;
+ new_tags.obj_id = in->obj_id;
+ new_tags.serial_number =
+ (prev_chunk_id > 0) ? prev_tags.serial_number + 1 : 1;
+ new_tags.n_bytes = n_bytes;
- nBytes = nBlocks * sizeof(yaffs_BlockInfo);
+ if (n_bytes < 1 || n_bytes > dev->param.total_bytes_per_chunk) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "Writing %d bytes to chunk!!!!!!!!!",
+ n_bytes);
+ BUG();
+ }
- ok = (yaffs_CheckpointRead(dev,dev->blockInfo,nBytes) == nBytes);
+ new_chunk_id =
+ yaffs_write_new_chunk(dev, buffer, &new_tags, use_reserve);
- if(!ok)
- return 0;
- nBytes = nBlocks * dev->chunkBitmapStride;
+ if (new_chunk_id > 0) {
+ yaffs_put_chunk_in_file(in, inode_chunk, new_chunk_id, 0);
- ok = (yaffs_CheckpointRead(dev,dev->chunkBits,nBytes) == nBytes);
+ if (prev_chunk_id > 0)
+ yaffs_chunk_del(dev, prev_chunk_id, 1, __LINE__);
- return ok ? 1 : 0;
-}
+ yaffs_verify_file_sane(in);
+ }
+ return new_chunk_id;
-static void yaffs_ObjectToCheckpointObject(yaffs_CheckpointObject *cp,
- yaffs_Object *obj)
-{
+}
- cp->objectId = obj->objectId;
- cp->parentId = (obj->parent) ? obj->parent->objectId : 0;
- cp->chunkId = obj->chunkId;
- cp->variantType = obj->variantType;
- cp->deleted = obj->deleted;
- cp->softDeleted = obj->softDeleted;
- cp->unlinked = obj->unlinked;
- cp->fake = obj->fake;
- cp->renameAllowed = obj->renameAllowed;
- cp->unlinkAllowed = obj->unlinkAllowed;
- cp->serial = obj->serial;
- cp->nDataChunks = obj->nDataChunks;
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
- cp->fileSizeOrEquivalentObjectId = obj->variant.fileVariant.fileSize;
- else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
- cp->fileSizeOrEquivalentObjectId = obj->variant.hardLinkVariant.equivalentObjectId;
-}
-static void yaffs_CheckpointObjectToObject( yaffs_Object *obj,yaffs_CheckpointObject *cp)
+static int yaffs_do_xattrib_mod(struct yaffs_obj *obj, int set,
+ const YCHAR *name, const void *value, int size,
+ int flags)
{
+ struct yaffs_xattr_mod xmod;
+ int result;
- yaffs_Object *parent;
+ xmod.set = set;
+ xmod.name = name;
+ xmod.data = value;
+ xmod.size = size;
+ xmod.flags = flags;
+ xmod.result = -ENOSPC;
- obj->objectId = cp->objectId;
+ result = yaffs_update_oh(obj, NULL, 0, 0, 0, &xmod);
- if(cp->parentId)
- parent = yaffs_FindOrCreateObjectByNumber(
- obj->myDev,
- cp->parentId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
+ if (result > 0)
+ return xmod.result;
else
- parent = NULL;
-
- if(parent)
- yaffs_AddObjectToDirectory(parent, obj);
-
- obj->chunkId = cp->chunkId;
- obj->variantType = cp->variantType;
- obj->deleted = cp->deleted;
- obj->softDeleted = cp->softDeleted;
- obj->unlinked = cp->unlinked;
- obj->fake = cp->fake;
- obj->renameAllowed = cp->renameAllowed;
- obj->unlinkAllowed = cp->unlinkAllowed;
- obj->serial = cp->serial;
- obj->nDataChunks = cp->nDataChunks;
-
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
- obj->variant.fileVariant.fileSize = cp->fileSizeOrEquivalentObjectId;
- else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK)
- obj->variant.hardLinkVariant.equivalentObjectId = cp->fileSizeOrEquivalentObjectId;
-
- if(obj->objectId >= YAFFS_NOBJECT_BUCKETS)
- obj->lazyLoaded = 1;
+ return -ENOSPC;
}
-
-
-static int yaffs_CheckpointTnodeWorker(yaffs_Object * in, yaffs_Tnode * tn,
- __u32 level, int chunkOffset)
+static int yaffs_apply_xattrib_mod(struct yaffs_obj *obj, char *buffer,
+ struct yaffs_xattr_mod *xmod)
{
- int i;
- yaffs_Device *dev = in->myDev;
- int ok = 1;
- int nTnodeBytes = (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8;
-
- if (tn) {
- if (level > 0) {
-
- for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++){
- if (tn->internal[i]) {
- ok = yaffs_CheckpointTnodeWorker(in,
- tn->internal[i],
- level - 1,
- (chunkOffset<<YAFFS_TNODES_INTERNAL_BITS) + i);
- }
- }
- } else if (level == 0) {
- __u32 baseOffset = chunkOffset << YAFFS_TNODES_LEVEL0_BITS;
- /* printf("write tnode at %d\n",baseOffset); */
- ok = (yaffs_CheckpointWrite(dev,&baseOffset,sizeof(baseOffset)) == sizeof(baseOffset));
- if(ok)
- ok = (yaffs_CheckpointWrite(dev,tn,nTnodeBytes) == nTnodeBytes);
- }
- }
-
- return ok;
+ int retval = 0;
+ int x_offs = sizeof(struct yaffs_obj_hdr);
+ struct yaffs_dev *dev = obj->my_dev;
+ int x_size = dev->data_bytes_per_chunk - sizeof(struct yaffs_obj_hdr);
+ char *x_buffer = buffer + x_offs;
-}
+ if (xmod->set)
+ retval =
+ nval_set(x_buffer, x_size, xmod->name, xmod->data,
+ xmod->size, xmod->flags);
+ else
+ retval = nval_del(x_buffer, x_size, xmod->name);
-static int yaffs_WriteCheckpointTnodes(yaffs_Object *obj)
-{
- __u32 endMarker = ~0;
- int ok = 1;
+ obj->has_xattr = nval_hasvalues(x_buffer, x_size);
+ obj->xattr_known = 1;
+ xmod->result = retval;
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE){
- ok = yaffs_CheckpointTnodeWorker(obj,
- obj->variant.fileVariant.top,
- obj->variant.fileVariant.topLevel,
- 0);
- if(ok)
- ok = (yaffs_CheckpointWrite(obj->myDev,&endMarker,sizeof(endMarker)) ==
- sizeof(endMarker));
- }
-
- return ok ? 1 : 0;
+ return retval;
}
-static int yaffs_ReadCheckpointTnodes(yaffs_Object *obj)
+static int yaffs_do_xattrib_fetch(struct yaffs_obj *obj, const YCHAR *name,
+ void *value, int size)
{
- __u32 baseChunk;
- int ok = 1;
- yaffs_Device *dev = obj->myDev;
- yaffs_FileStructure *fileStructPtr = &obj->variant.fileVariant;
- yaffs_Tnode *tn;
- int nread = 0;
+ char *buffer = NULL;
+ int result;
+ struct yaffs_ext_tags tags;
+ struct yaffs_dev *dev = obj->my_dev;
+ int x_offs = sizeof(struct yaffs_obj_hdr);
+ int x_size = dev->data_bytes_per_chunk - sizeof(struct yaffs_obj_hdr);
+ char *x_buffer;
+ int retval = 0;
- ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
+ if (obj->hdr_chunk < 1)
+ return -ENODATA;
- while(ok && (~baseChunk)){
- nread++;
- /* Read level 0 tnode */
+ /* If we know that the object has no xattribs then don't do all the
+ * reading and parsing.
+ */
+ if (obj->xattr_known && !obj->has_xattr) {
+ if (name)
+ return -ENODATA;
+ else
+ return 0;
+ }
+ buffer = (char *)yaffs_get_temp_buffer(dev);
+ if (!buffer)
+ return -ENOMEM;
- /* printf("read tnode at %d\n",baseChunk); */
- tn = yaffs_GetTnodeRaw(dev);
- if(tn)
- ok = (yaffs_CheckpointRead(dev,tn,(dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8) ==
- (dev->tnodeWidth * YAFFS_NTNODES_LEVEL0)/8);
- else
- ok = 0;
+ result =
+ yaffs_rd_chunk_tags_nand(dev, obj->hdr_chunk, (u8 *) buffer, &tags);
- if(tn && ok){
- ok = yaffs_AddOrFindLevel0Tnode(dev,
- fileStructPtr,
- baseChunk,
- tn) ? 1 : 0;
+ if (result != YAFFS_OK)
+ retval = -ENOENT;
+ else {
+ x_buffer = buffer + x_offs;
+ if (!obj->xattr_known) {
+ obj->has_xattr = nval_hasvalues(x_buffer, x_size);
+ obj->xattr_known = 1;
}
- if(ok)
- ok = (yaffs_CheckpointRead(dev,&baseChunk,sizeof(baseChunk)) == sizeof(baseChunk));
-
+ if (name)
+ retval = nval_get(x_buffer, x_size, name, value, size);
+ else
+ retval = nval_list(x_buffer, x_size, value, size);
}
-
- T(YAFFS_TRACE_CHECKPOINT,(
- TSTR("Checkpoint read tnodes %d records, last %d. ok %d" TENDSTR),
- nread,baseChunk,ok));
-
- return ok ? 1 : 0;
+ yaffs_release_temp_buffer(dev, (u8 *) buffer);
+ return retval;
}
-
-static int yaffs_WriteCheckpointObjects(yaffs_Device *dev)
+int yaffs_set_xattrib(struct yaffs_obj *obj, const YCHAR * name,
+ const void *value, int size, int flags)
{
- yaffs_Object *obj;
- yaffs_CheckpointObject cp;
- int i;
- int ok = 1;
- struct list_head *lh;
-
-
- /* Iterate through the objects in each hash entry,
- * dumping them to the checkpointing stream.
- */
-
- for(i = 0; ok && i < YAFFS_NOBJECT_BUCKETS; i++){
- list_for_each(lh, &dev->objectBucket[i].list) {
- if (lh) {
- obj = list_entry(lh, yaffs_Object, hashLink);
- if (!obj->deferedFree) {
- yaffs_ObjectToCheckpointObject(&cp,obj);
- cp.structType = sizeof(cp);
-
- T(YAFFS_TRACE_CHECKPOINT,(
- TSTR("Checkpoint write object %d parent %d type %d chunk %d obj addr %x" TENDSTR),
- cp.objectId,cp.parentId,cp.variantType,cp.chunkId,(unsigned) obj));
-
- ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-
- if(ok && obj->variantType == YAFFS_OBJECT_TYPE_FILE){
- ok = yaffs_WriteCheckpointTnodes(obj);
- }
- }
- }
- }
- }
-
- /* Dump end of list */
- memset(&cp,0xFF,sizeof(yaffs_CheckpointObject));
- cp.structType = sizeof(cp);
-
- if(ok)
- ok = (yaffs_CheckpointWrite(dev,&cp,sizeof(cp)) == sizeof(cp));
-
- return ok ? 1 : 0;
+ return yaffs_do_xattrib_mod(obj, 1, name, value, size, flags);
}
-static int yaffs_ReadCheckpointObjects(yaffs_Device *dev)
+int yaffs_remove_xattrib(struct yaffs_obj *obj, const YCHAR * name)
{
- yaffs_Object *obj;
- yaffs_CheckpointObject cp;
- int ok = 1;
- int done = 0;
- yaffs_Object *hardList = NULL;
-
- while(ok && !done) {
- ok = (yaffs_CheckpointRead(dev,&cp,sizeof(cp)) == sizeof(cp));
- if(cp.structType != sizeof(cp)) {
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("struct size %d instead of %d ok %d"TENDSTR),
- cp.structType,sizeof(cp),ok));
- ok = 0;
- }
-
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("Checkpoint read object %d parent %d type %d chunk %d " TENDSTR),
- cp.objectId,cp.parentId,cp.variantType,cp.chunkId));
-
- if(ok && cp.objectId == ~0)
- done = 1;
- else if(ok){
- obj = yaffs_FindOrCreateObjectByNumber(dev,cp.objectId, cp.variantType);
- if(obj) {
- yaffs_CheckpointObjectToObject(obj,&cp);
- if(obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
- ok = yaffs_ReadCheckpointTnodes(obj);
- } else if(obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
- obj->hardLinks.next =
- (struct list_head *)
- hardList;
- hardList = obj;
- }
-
- }
- }
- }
-
- if(ok)
- yaffs_HardlinkFixup(dev,hardList);
-
- return ok ? 1 : 0;
+ return yaffs_do_xattrib_mod(obj, 0, name, NULL, 0, 0);
}
-static int yaffs_WriteCheckpointSum(yaffs_Device *dev)
+int yaffs_get_xattrib(struct yaffs_obj *obj, const YCHAR * name, void *value,
+ int size)
{
- __u32 checkpointSum;
- int ok;
-
- yaffs_GetCheckpointSum(dev,&checkpointSum);
-
- ok = (yaffs_CheckpointWrite(dev,&checkpointSum,sizeof(checkpointSum)) == sizeof(checkpointSum));
-
- if(!ok)
- return 0;
+ return yaffs_do_xattrib_fetch(obj, name, value, size);
+}
- return 1;
+int yaffs_list_xattrib(struct yaffs_obj *obj, char *buffer, int size)
+{
+ return yaffs_do_xattrib_fetch(obj, NULL, buffer, size);
}
-static int yaffs_ReadCheckpointSum(yaffs_Device *dev)
+static void yaffs_check_obj_details_loaded(struct yaffs_obj *in)
{
- __u32 checkpointSum0;
- __u32 checkpointSum1;
- int ok;
+ u8 *buf;
+ struct yaffs_obj_hdr *oh;
+ struct yaffs_dev *dev;
+ struct yaffs_ext_tags tags;
- yaffs_GetCheckpointSum(dev,&checkpointSum0);
+ if (!in || !in->lazy_loaded || in->hdr_chunk < 1)
+ return;
- ok = (yaffs_CheckpointRead(dev,&checkpointSum1,sizeof(checkpointSum1)) == sizeof(checkpointSum1));
+ dev = in->my_dev;
+ in->lazy_loaded = 0;
+ buf = yaffs_get_temp_buffer(dev);
- if(!ok)
- return 0;
+ yaffs_rd_chunk_tags_nand(dev, in->hdr_chunk, buf, &tags);
+ oh = (struct yaffs_obj_hdr *)buf;
- if(checkpointSum0 != checkpointSum1)
- return 0;
+ in->yst_mode = oh->yst_mode;
+ yaffs_load_attribs(in, oh);
+ yaffs_set_obj_name_from_oh(in, oh);
- return 1;
+ if (in->variant_type == YAFFS_OBJECT_TYPE_SYMLINK) {
+ in->variant.symlink_variant.alias =
+ yaffs_clone_str(oh->alias);
+ }
+ yaffs_release_temp_buffer(dev, buf);
}
+static void yaffs_load_name_from_oh(struct yaffs_dev *dev, YCHAR *name,
+ const YCHAR *oh_name, int buff_size)
+{
+#ifdef CONFIG_YAFFS_AUTO_UNICODE
+ if (dev->param.auto_unicode) {
+ if (*oh_name) {
+ /* It is an ASCII name, do an ASCII to
+ * unicode conversion */
+ const char *ascii_oh_name = (const char *)oh_name;
+ int n = buff_size - 1;
+ while (n > 0 && *ascii_oh_name) {
+ *name = *ascii_oh_name;
+ name++;
+ ascii_oh_name++;
+ n--;
+ }
+ } else {
+ yaffs_strncpy(name, oh_name + 1, buff_size - 1);
+ }
+ } else {
+#else
+ dev = dev;
+ {
+#endif
+ yaffs_strncpy(name, oh_name, buff_size - 1);
+ }
+}
-static int yaffs_WriteCheckpointData(yaffs_Device *dev)
+static void yaffs_load_oh_from_name(struct yaffs_dev *dev, YCHAR *oh_name,
+ const YCHAR *name)
{
+#ifdef CONFIG_YAFFS_AUTO_UNICODE
- int ok = 1;
+ int is_ascii;
+ YCHAR *w;
- if(dev->skipCheckpointWrite || !dev->isYaffs2){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint write" TENDSTR)));
- ok = 0;
- }
+ if (dev->param.auto_unicode) {
- if(ok)
- ok = yaffs_CheckpointOpen(dev,1);
+ is_ascii = 1;
+ w = name;
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
- ok = yaffs_WriteCheckpointValidityMarker(dev,1);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint device" TENDSTR)));
- ok = yaffs_WriteCheckpointDevice(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint objects" TENDSTR)));
- ok = yaffs_WriteCheckpointObjects(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("write checkpoint validity" TENDSTR)));
- ok = yaffs_WriteCheckpointValidityMarker(dev,0);
- }
+ /* Figure out if the name will fit in ascii character set */
+ while (is_ascii && *w) {
+ if ((*w) & 0xff00)
+ is_ascii = 0;
+ w++;
+ }
- if(ok){
- ok = yaffs_WriteCheckpointSum(dev);
+ if (is_ascii) {
+ /* It is an ASCII name, so convert unicode to ascii */
+ char *ascii_oh_name = (char *)oh_name;
+ int n = YAFFS_MAX_NAME_LENGTH - 1;
+ while (n > 0 && *name) {
+ *ascii_oh_name = *name;
+ name++;
+ ascii_oh_name++;
+ n--;
+ }
+ } else {
+ /* Unicode name, so save starting at the second YCHAR */
+ *oh_name = 0;
+ yaffs_strncpy(oh_name + 1, name, YAFFS_MAX_NAME_LENGTH - 2);
+ }
+ } else {
+#else
+ dev = dev;
+ {
+#endif
+ yaffs_strncpy(oh_name, name, YAFFS_MAX_NAME_LENGTH - 1);
}
+}
+/* UpdateObjectHeader updates the header on NAND for an object.
+ * If name is not NULL, then that new name is used.
+ */
+int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name, int force,
+ int is_shrink, int shadows, struct yaffs_xattr_mod *xmod)
+{
- if(!yaffs_CheckpointClose(dev))
- ok = 0;
+ struct yaffs_block_info *bi;
+ struct yaffs_dev *dev = in->my_dev;
+ int prev_chunk_id;
+ int ret_val = 0;
+ int new_chunk_id;
+ struct yaffs_ext_tags new_tags;
+ struct yaffs_ext_tags old_tags;
+ const YCHAR *alias = NULL;
+ u8 *buffer = NULL;
+ YCHAR old_name[YAFFS_MAX_NAME_LENGTH + 1];
+ struct yaffs_obj_hdr *oh = NULL;
+ loff_t file_size = 0;
- if(ok)
- dev->isCheckpointed = 1;
- else
- dev->isCheckpointed = 0;
+ yaffs_strcpy(old_name, _Y("silly old name"));
- return dev->isCheckpointed;
-}
+ if (in->fake && in != dev->root_dir && !force && !xmod)
+ return ret_val;
-static int yaffs_ReadCheckpointData(yaffs_Device *dev)
-{
- int ok = 1;
+ yaffs_check_gc(dev, 0);
+ yaffs_check_obj_details_loaded(in);
- if(dev->skipCheckpointRead || !dev->isYaffs2){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("skipping checkpoint read" TENDSTR)));
- ok = 0;
- }
+ buffer = yaffs_get_temp_buffer(in->my_dev);
+ oh = (struct yaffs_obj_hdr *)buffer;
- if(ok)
- ok = yaffs_CheckpointOpen(dev,0); /* open for read */
+ prev_chunk_id = in->hdr_chunk;
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
- ok = yaffs_ReadCheckpointValidityMarker(dev,1);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint device" TENDSTR)));
- ok = yaffs_ReadCheckpointDevice(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint objects" TENDSTR)));
- ok = yaffs_ReadCheckpointObjects(dev);
- }
- if(ok){
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint validity" TENDSTR)));
- ok = yaffs_ReadCheckpointValidityMarker(dev,0);
- }
+ if (prev_chunk_id > 0) {
+ yaffs_rd_chunk_tags_nand(dev, prev_chunk_id,
+ buffer, &old_tags);
- if(ok){
- ok = yaffs_ReadCheckpointSum(dev);
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("read checkpoint checksum %d" TENDSTR),ok));
+ yaffs_verify_oh(in, oh, &old_tags, 0);
+ memcpy(old_name, oh->name, sizeof(oh->name));
+ memset(buffer, 0xff, sizeof(struct yaffs_obj_hdr));
+ } else {
+ memset(buffer, 0xff, dev->data_bytes_per_chunk);
}
- if(!yaffs_CheckpointClose(dev))
- ok = 0;
-
- if(ok)
- dev->isCheckpointed = 1;
- else
- dev->isCheckpointed = 0;
+ oh->type = in->variant_type;
+ oh->yst_mode = in->yst_mode;
+ oh->shadows_obj = oh->inband_shadowed_obj_id = shadows;
- return ok ? 1 : 0;
+ yaffs_load_attribs_oh(oh, in);
-}
+ if (in->parent)
+ oh->parent_obj_id = in->parent->obj_id;
+ else
+ oh->parent_obj_id = 0;
-static void yaffs_InvalidateCheckpoint(yaffs_Device *dev)
-{
- if(dev->isCheckpointed ||
- dev->blocksInCheckpoint > 0){
- dev->isCheckpointed = 0;
- yaffs_CheckpointInvalidateStream(dev);
- if(dev->superBlock && dev->markSuperBlockDirty)
- dev->markSuperBlockDirty(dev->superBlock);
+ if (name && *name) {
+ memset(oh->name, 0, sizeof(oh->name));
+ yaffs_load_oh_from_name(dev, oh->name, name);
+ } else if (prev_chunk_id > 0) {
+ memcpy(oh->name, old_name, sizeof(oh->name));
+ } else {
+ memset(oh->name, 0, sizeof(oh->name));
}
-}
-
-int yaffs_CheckpointSave(yaffs_Device *dev)
-{
+ oh->is_shrink = is_shrink;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("save entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
+ switch (in->variant_type) {
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* Should not happen */
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+ if (oh->parent_obj_id != YAFFS_OBJECTID_DELETED &&
+ oh->parent_obj_id != YAFFS_OBJECTID_UNLINKED)
+ file_size = in->variant.file_variant.file_size;
+ yaffs_oh_size_load(oh, file_size);
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ oh->equiv_id = in->variant.hardlink_variant.equiv_id;
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ alias = in->variant.symlink_variant.alias;
+ if (!alias)
+ alias = _Y("no alias");
+ yaffs_strncpy(oh->alias, alias, YAFFS_MAX_ALIAS_LENGTH);
+ oh->alias[YAFFS_MAX_ALIAS_LENGTH] = 0;
+ break;
+ }
- yaffs_VerifyObjects(dev);
- yaffs_VerifyBlocks(dev);
- yaffs_VerifyFreeChunks(dev);
+ /* process any xattrib modifications */
+ if (xmod)
+ yaffs_apply_xattrib_mod(in, (char *)buffer, xmod);
+
+ /* Tags */
+ memset(&new_tags, 0, sizeof(new_tags));
+ in->serial++;
+ new_tags.chunk_id = 0;
+ new_tags.obj_id = in->obj_id;
+ new_tags.serial_number = in->serial;
+
+ /* Add extra info for file header */
+ new_tags.extra_available = 1;
+ new_tags.extra_parent_id = oh->parent_obj_id;
+ new_tags.extra_file_size = file_size;
+ new_tags.extra_is_shrink = oh->is_shrink;
+ new_tags.extra_equiv_id = oh->equiv_id;
+ new_tags.extra_shadows = (oh->shadows_obj > 0) ? 1 : 0;
+ new_tags.extra_obj_type = in->variant_type;
+ yaffs_verify_oh(in, oh, &new_tags, 1);
+
+ /* Create new chunk in NAND */
+ new_chunk_id =
+ yaffs_write_new_chunk(dev, buffer, &new_tags,
+ (prev_chunk_id > 0) ? 1 : 0);
- if(!dev->isCheckpointed) {
- yaffs_InvalidateCheckpoint(dev);
- yaffs_WriteCheckpointData(dev);
- }
+ if (buffer)
+ yaffs_release_temp_buffer(dev, buffer);
- T(YAFFS_TRACE_ALWAYS,(TSTR("save exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
+ if (new_chunk_id < 0)
+ return new_chunk_id;
- return dev->isCheckpointed;
-}
+ in->hdr_chunk = new_chunk_id;
-int yaffs_CheckpointRestore(yaffs_Device *dev)
-{
- int retval;
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore entry: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
+ if (prev_chunk_id > 0)
+ yaffs_chunk_del(dev, prev_chunk_id, 1, __LINE__);
- retval = yaffs_ReadCheckpointData(dev);
+ if (!yaffs_obj_cache_dirty(in))
+ in->dirty = 0;
- if(dev->isCheckpointed){
- yaffs_VerifyObjects(dev);
- yaffs_VerifyBlocks(dev);
- yaffs_VerifyFreeChunks(dev);
+ /* If this was a shrink, then mark the block
+ * that the chunk lives on */
+ if (is_shrink) {
+ bi = yaffs_get_block_info(in->my_dev,
+ new_chunk_id /
+ in->my_dev->param.chunks_per_block);
+ bi->has_shrink_hdr = 1;
}
- T(YAFFS_TRACE_CHECKPOINT,(TSTR("restore exit: isCheckpointed %d"TENDSTR),dev->isCheckpointed));
- return retval;
+ return new_chunk_id;
}
/*--------------------- File read/write ------------------------
@@ -4447,622 +3422,550 @@ int yaffs_CheckpointRestore(yaffs_Device *dev)
* Curve-balls: the first chunk might also be the last chunk.
*/
-int yaffs_ReadDataFromFile(yaffs_Object * in, __u8 * buffer, loff_t offset,
- int nBytes)
+int yaffs_file_rd(struct yaffs_obj *in, u8 * buffer, loff_t offset, int n_bytes)
{
+ int chunk;
+ u32 start;
+ int n_copy;
+ int n = n_bytes;
+ int n_done = 0;
+ struct yaffs_cache *cache;
+ struct yaffs_dev *dev;
- __u32 chunk = 0;
- __u32 start = 0;
- int nToCopy;
- int n = nBytes;
- int nDone = 0;
- yaffs_ChunkCache *cache;
-
- yaffs_Device *dev;
-
- dev = in->myDev;
+ dev = in->my_dev;
while (n > 0) {
- //chunk = offset / dev->nDataBytesPerChunk + 1;
- //start = offset % dev->nDataBytesPerChunk;
- yaffs_AddrToChunk(dev,offset,&chunk,&start);
+ yaffs_addr_to_chunk(dev, offset, &chunk, &start);
chunk++;
/* OK now check for the curveball where the start and end are in
* the same chunk.
*/
- if ((start + n) < dev->nDataBytesPerChunk) {
- nToCopy = n;
- } else {
- nToCopy = dev->nDataBytesPerChunk - start;
- }
+ if ((start + n) < dev->data_bytes_per_chunk)
+ n_copy = n;
+ else
+ n_copy = dev->data_bytes_per_chunk - start;
- cache = yaffs_FindChunkCache(in, chunk);
+ cache = yaffs_find_chunk_cache(in, chunk);
- /* If the chunk is already in the cache or it is less than a whole chunk
- * then use the cache (if there is caching)
- * else bypass the cache.
+ /* If the chunk is already in the cache or it is less than
+ * a whole chunk or we're using inband tags then use the cache
+ * (if there is caching) else bypass the cache.
*/
- if (cache || nToCopy != dev->nDataBytesPerChunk) {
- if (dev->nShortOpCaches > 0) {
+ if (cache || n_copy != dev->data_bytes_per_chunk ||
+ dev->param.inband_tags) {
+ if (dev->param.n_caches > 0) {
- /* If we can't find the data in the cache, then load it up. */
+ /* If we can't find the data in the cache,
+ * then load it up. */
if (!cache) {
- cache = yaffs_GrabChunkCache(in->myDev);
+ cache =
+ yaffs_grab_chunk_cache(in->my_dev);
cache->object = in;
- cache->chunkId = chunk;
+ cache->chunk_id = chunk;
cache->dirty = 0;
cache->locked = 0;
- yaffs_ReadChunkDataFromObject(in, chunk,
- cache->
- data);
- cache->nBytes = 0;
+ yaffs_rd_data_obj(in, chunk,
+ cache->data);
+ cache->n_bytes = 0;
}
- yaffs_UseChunkCache(dev, cache, 0);
+ yaffs_use_cache(dev, cache, 0);
cache->locked = 1;
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(buffer, &cache->data[start], nToCopy);
+ memcpy(buffer, &cache->data[start], n_copy);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
cache->locked = 0;
} else {
- /* Read into the local buffer then copy..*/
-
- __u8 *localBuffer =
- yaffs_GetTempBuffer(dev, __LINE__);
- yaffs_ReadChunkDataFromObject(in, chunk,
- localBuffer);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(buffer, &localBuffer[start], nToCopy);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- yaffs_ReleaseTempBuffer(dev, localBuffer,
- __LINE__);
- }
-
- } else {
-#ifdef CONFIG_YAFFS_WINCE
- __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
+ /* Read into the local buffer then copy.. */
- /* Under WinCE can't do direct transfer. Need to use a local buffer.
- * This is because we otherwise screw up WinCE's memory mapper
- */
- yaffs_ReadChunkDataFromObject(in, chunk, localBuffer);
+ u8 *local_buffer =
+ yaffs_get_temp_buffer(dev);
+ yaffs_rd_data_obj(in, chunk, local_buffer);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(buffer, localBuffer, dev->nDataBytesPerChunk);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
- yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
-#endif
+ memcpy(buffer, &local_buffer[start], n_copy);
-#else
- /* A full chunk. Read directly into the supplied buffer. */
- yaffs_ReadChunkDataFromObject(in, chunk, buffer);
-#endif
+ yaffs_release_temp_buffer(dev, local_buffer);
+ }
+ } else {
+ /* A full chunk. Read directly into the buffer. */
+ yaffs_rd_data_obj(in, chunk, buffer);
}
-
- n -= nToCopy;
- offset += nToCopy;
- buffer += nToCopy;
- nDone += nToCopy;
-
+ n -= n_copy;
+ offset += n_copy;
+ buffer += n_copy;
+ n_done += n_copy;
}
-
- return nDone;
+ return n_done;
}
-int yaffs_WriteDataToFile(yaffs_Object * in, const __u8 * buffer, loff_t offset,
- int nBytes, int writeThrough)
+int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
+ int n_bytes, int write_through)
{
- __u32 chunk = 0;
- __u32 start = 0;
- int nToCopy;
- int n = nBytes;
- int nDone = 0;
- int nToWriteBack;
- int startOfWrite = offset;
- int chunkWritten = 0;
- int nBytesRead;
-
- yaffs_Device *dev;
-
- dev = in->myDev;
-
- while (n > 0 && chunkWritten >= 0) {
- //chunk = offset / dev->nDataBytesPerChunk + 1;
- //start = offset % dev->nDataBytesPerChunk;
- yaffs_AddrToChunk(dev,offset,&chunk,&start);
- chunk++;
+ int chunk;
+ u32 start;
+ int n_copy;
+ int n = n_bytes;
+ int n_done = 0;
+ int n_writeback;
+ loff_t start_write = offset;
+ int chunk_written = 0;
+ u32 n_bytes_read;
+ loff_t chunk_start;
+ struct yaffs_dev *dev;
+
+ dev = in->my_dev;
+
+ while (n > 0 && chunk_written >= 0) {
+ yaffs_addr_to_chunk(dev, offset, &chunk, &start);
+
+ if (((loff_t)chunk) *
+ dev->data_bytes_per_chunk + start != offset ||
+ start >= dev->data_bytes_per_chunk) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "AddrToChunk of offset %lld gives chunk %d start %d",
+ offset, chunk, start);
+ }
+ chunk++; /* File pos to chunk in file offset */
/* OK now check for the curveball where the start and end are in
* the same chunk.
*/
- if ((start + n) < dev->nDataBytesPerChunk) {
- nToCopy = n;
+ if ((start + n) < dev->data_bytes_per_chunk) {
+ n_copy = n;
- /* Now folks, to calculate how many bytes to write back....
- * If we're overwriting and not writing to then end of file then
- * we need to write back as much as was there before.
+ /* Now calculate how many bytes to write back....
+ * If we're overwriting and not writing to then end of
+ * file then we need to write back as much as was there
+ * before.
*/
- nBytesRead =
- in->variant.fileVariant.fileSize -
- ((chunk - 1) * dev->nDataBytesPerChunk);
+ chunk_start = (((loff_t)(chunk - 1)) *
+ dev->data_bytes_per_chunk);
- if (nBytesRead > dev->nDataBytesPerChunk) {
- nBytesRead = dev->nDataBytesPerChunk;
- }
+ if (chunk_start > in->variant.file_variant.file_size)
+ n_bytes_read = 0; /* Past end of file */
+ else
+ n_bytes_read =
+ in->variant.file_variant.file_size -
+ chunk_start;
+
+ if (n_bytes_read > dev->data_bytes_per_chunk)
+ n_bytes_read = dev->data_bytes_per_chunk;
- nToWriteBack =
- (nBytesRead >
- (start + n)) ? nBytesRead : (start + n);
+ n_writeback =
+ (n_bytes_read >
+ (start + n)) ? n_bytes_read : (start + n);
+
+ if (n_writeback < 0 ||
+ n_writeback > dev->data_bytes_per_chunk)
+ BUG();
} else {
- nToCopy = dev->nDataBytesPerChunk - start;
- nToWriteBack = dev->nDataBytesPerChunk;
+ n_copy = dev->data_bytes_per_chunk - start;
+ n_writeback = dev->data_bytes_per_chunk;
}
- if (nToCopy != dev->nDataBytesPerChunk) {
- /* An incomplete start or end chunk (or maybe both start and end chunk) */
- if (dev->nShortOpCaches > 0) {
- yaffs_ChunkCache *cache;
- /* If we can't find the data in the cache, then load the cache */
- cache = yaffs_FindChunkCache(in, chunk);
-
- if (!cache
- && yaffs_CheckSpaceForAllocation(in->
- myDev)) {
- cache = yaffs_GrabChunkCache(in->myDev);
+ if (n_copy != dev->data_bytes_per_chunk ||
+ dev->param.inband_tags) {
+ /* An incomplete start or end chunk (or maybe both
+ * start and end chunk), or we're using inband tags,
+ * so we want to use the cache buffers.
+ */
+ if (dev->param.n_caches > 0) {
+ struct yaffs_cache *cache;
+
+ /* If we can't find the data in the cache, then
+ * load the cache */
+ cache = yaffs_find_chunk_cache(in, chunk);
+
+ if (!cache &&
+ yaffs_check_alloc_available(dev, 1)) {
+ cache = yaffs_grab_chunk_cache(dev);
cache->object = in;
- cache->chunkId = chunk;
+ cache->chunk_id = chunk;
cache->dirty = 0;
cache->locked = 0;
- yaffs_ReadChunkDataFromObject(in, chunk,
- cache->
- data);
- }
- else if(cache &&
- !cache->dirty &&
- !yaffs_CheckSpaceForAllocation(in->myDev)){
- /* Drop the cache if it was a read cache item and
- * no space check has been made for it.
+ yaffs_rd_data_obj(in, chunk,
+ cache->data);
+ } else if (cache &&
+ !cache->dirty &&
+ !yaffs_check_alloc_available(dev,
+ 1)) {
+ /* Drop the cache if it was a read cache
+ * item and no space check has been made
+ * for it.
*/
- cache = NULL;
+ cache = NULL;
}
if (cache) {
- yaffs_UseChunkCache(dev, cache, 1);
+ yaffs_use_cache(dev, cache, 1);
cache->locked = 1;
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
memcpy(&cache->data[start], buffer,
- nToCopy);
+ n_copy);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
cache->locked = 0;
- cache->nBytes = nToWriteBack;
+ cache->n_bytes = n_writeback;
- if (writeThrough) {
- chunkWritten =
- yaffs_WriteChunkDataToObject
+ if (write_through) {
+ chunk_written =
+ yaffs_wr_data_obj
(cache->object,
- cache->chunkId,
- cache->data, cache->nBytes,
- 1);
+ cache->chunk_id,
+ cache->data,
+ cache->n_bytes, 1);
cache->dirty = 0;
}
-
} else {
- chunkWritten = -1; /* fail the write */
+ chunk_written = -1; /* fail write */
}
} else {
- /* An incomplete start or end chunk (or maybe both start and end chunk)
- * Read into the local buffer then copy, then copy over and write back.
+ /* An incomplete start or end chunk (or maybe
+ * both start and end chunk). Read into the
+ * local buffer then copy over and write back.
*/
- __u8 *localBuffer =
- yaffs_GetTempBuffer(dev, __LINE__);
+ u8 *local_buffer = yaffs_get_temp_buffer(dev);
- yaffs_ReadChunkDataFromObject(in, chunk,
- localBuffer);
+ yaffs_rd_data_obj(in, chunk, local_buffer);
+ memcpy(&local_buffer[start], buffer, n_copy);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
-
- memcpy(&localBuffer[start], buffer, nToCopy);
-
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- chunkWritten =
- yaffs_WriteChunkDataToObject(in, chunk,
- localBuffer,
- nToWriteBack,
- 0);
-
- yaffs_ReleaseTempBuffer(dev, localBuffer,
- __LINE__);
+ chunk_written =
+ yaffs_wr_data_obj(in, chunk,
+ local_buffer,
+ n_writeback, 0);
+ yaffs_release_temp_buffer(dev, local_buffer);
}
-
} else {
+ /* A full chunk. Write directly from the buffer. */
-#ifdef CONFIG_YAFFS_WINCE
- /* Under WinCE can't do direct transfer. Need to use a local buffer.
- * This is because we otherwise screw up WinCE's memory mapper
- */
- __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_UnlockYAFFS(TRUE);
-#endif
- memcpy(localBuffer, buffer, dev->nDataBytesPerChunk);
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_LockYAFFS(TRUE);
-#endif
- chunkWritten =
- yaffs_WriteChunkDataToObject(in, chunk, localBuffer,
- dev->nDataBytesPerChunk,
- 0);
- yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
-#else
- /* A full chunk. Write directly from the supplied buffer. */
- chunkWritten =
- yaffs_WriteChunkDataToObject(in, chunk, buffer,
- dev->nDataBytesPerChunk,
- 0);
-#endif
- /* Since we've overwritten the cached data, we better invalidate it. */
- yaffs_InvalidateChunkCache(in, chunk);
- }
+ chunk_written =
+ yaffs_wr_data_obj(in, chunk, buffer,
+ dev->data_bytes_per_chunk, 0);
- if (chunkWritten >= 0) {
- n -= nToCopy;
- offset += nToCopy;
- buffer += nToCopy;
- nDone += nToCopy;
+ /* Since we've overwritten the cached data,
+ * we better invalidate it. */
+ yaffs_invalidate_chunk_cache(in, chunk);
}
+ if (chunk_written >= 0) {
+ n -= n_copy;
+ offset += n_copy;
+ buffer += n_copy;
+ n_done += n_copy;
+ }
}
/* Update file object */
- if ((startOfWrite + nDone) > in->variant.fileVariant.fileSize) {
- in->variant.fileVariant.fileSize = (startOfWrite + nDone);
- }
+ if ((start_write + n_done) > in->variant.file_variant.file_size)
+ in->variant.file_variant.file_size = (start_write + n_done);
in->dirty = 1;
-
- return nDone;
+ return n_done;
}
+int yaffs_wr_file(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
+ int n_bytes, int write_through)
+{
+ yaffs2_handle_hole(in, offset);
+ return yaffs_do_file_wr(in, buffer, offset, n_bytes, write_through);
+}
/* ---------------------- File resizing stuff ------------------ */
-static void yaffs_PruneResizedChunks(yaffs_Object * in, int newSize)
+static void yaffs_prune_chunks(struct yaffs_obj *in, loff_t new_size)
{
- yaffs_Device *dev = in->myDev;
- int oldFileSize = in->variant.fileVariant.fileSize;
+ struct yaffs_dev *dev = in->my_dev;
+ loff_t old_size = in->variant.file_variant.file_size;
+ int i;
+ int chunk_id;
+ u32 dummy;
+ int last_del;
+ int start_del;
- int lastDel = 1 + (oldFileSize - 1) / dev->nDataBytesPerChunk;
+ if (old_size > 0)
+ yaffs_addr_to_chunk(dev, old_size - 1, &last_del, &dummy);
+ else
+ last_del = 0;
- int startDel = 1 + (newSize + dev->nDataBytesPerChunk - 1) /
- dev->nDataBytesPerChunk;
- int i;
- int chunkId;
+ yaffs_addr_to_chunk(dev, new_size + dev->data_bytes_per_chunk - 1,
+ &start_del, &dummy);
+ last_del++;
+ start_del++;
/* Delete backwards so that we don't end up with holes if
* power is lost part-way through the operation.
*/
- for (i = lastDel; i >= startDel; i--) {
+ for (i = last_del; i >= start_del; i--) {
/* NB this could be optimised somewhat,
* eg. could retrieve the tags and write them without
- * using yaffs_DeleteChunk
+ * using yaffs_chunk_del
*/
- chunkId = yaffs_FindAndDeleteChunkInFile(in, i, NULL);
- if (chunkId > 0) {
- if (chunkId <
- (dev->internalStartBlock * dev->nChunksPerBlock)
- || chunkId >=
- ((dev->internalEndBlock +
- 1) * dev->nChunksPerBlock)) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("Found daft chunkId %d for %d" TENDSTR),
- chunkId, i));
- } else {
- in->nDataChunks--;
- yaffs_DeleteChunk(dev, chunkId, 1, __LINE__);
- }
+ chunk_id = yaffs_find_del_file_chunk(in, i, NULL);
+
+ if (chunk_id < 1)
+ continue;
+
+ if (chunk_id <
+ (dev->internal_start_block * dev->param.chunks_per_block) ||
+ chunk_id >=
+ ((dev->internal_end_block + 1) *
+ dev->param.chunks_per_block)) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "Found daft chunk_id %d for %d",
+ chunk_id, i);
+ } else {
+ in->n_data_chunks--;
+ yaffs_chunk_del(dev, chunk_id, 1, __LINE__);
}
}
-
}
-int yaffs_ResizeFile(yaffs_Object * in, loff_t newSize)
+void yaffs_resize_file_down(struct yaffs_obj *obj, loff_t new_size)
{
+ int new_full;
+ u32 new_partial;
+ struct yaffs_dev *dev = obj->my_dev;
- int oldFileSize = in->variant.fileVariant.fileSize;
- __u32 newSizeOfPartialChunk = 0;
- __u32 newFullChunks = 0;
-
- yaffs_Device *dev = in->myDev;
+ yaffs_addr_to_chunk(dev, new_size, &new_full, &new_partial);
- yaffs_AddrToChunk(dev, newSize, &newFullChunks, &newSizeOfPartialChunk);
+ yaffs_prune_chunks(obj, new_size);
- yaffs_FlushFilesChunkCache(in);
- yaffs_InvalidateWholeChunkCache(in);
+ if (new_partial != 0) {
+ int last_chunk = 1 + new_full;
+ u8 *local_buffer = yaffs_get_temp_buffer(dev);
- yaffs_CheckGarbageCollection(dev);
+ /* Rewrite the last chunk with its new size and zero pad */
+ yaffs_rd_data_obj(obj, last_chunk, local_buffer);
+ memset(local_buffer + new_partial, 0,
+ dev->data_bytes_per_chunk - new_partial);
- if (in->variantType != YAFFS_OBJECT_TYPE_FILE) {
- return yaffs_GetFileSize(in);
- }
+ yaffs_wr_data_obj(obj, last_chunk, local_buffer,
+ new_partial, 1);
- if (newSize == oldFileSize) {
- return oldFileSize;
+ yaffs_release_temp_buffer(dev, local_buffer);
}
- if (newSize < oldFileSize) {
-
- yaffs_PruneResizedChunks(in, newSize);
+ obj->variant.file_variant.file_size = new_size;
- if (newSizeOfPartialChunk != 0) {
- int lastChunk = 1 + newFullChunks;
-
- __u8 *localBuffer = yaffs_GetTempBuffer(dev, __LINE__);
+ yaffs_prune_tree(dev, &obj->variant.file_variant);
+}
- /* Got to read and rewrite the last chunk with its new size and zero pad */
- yaffs_ReadChunkDataFromObject(in, lastChunk,
- localBuffer);
+int yaffs_resize_file(struct yaffs_obj *in, loff_t new_size)
+{
+ struct yaffs_dev *dev = in->my_dev;
+ loff_t old_size = in->variant.file_variant.file_size;
- memset(localBuffer + newSizeOfPartialChunk, 0,
- dev->nDataBytesPerChunk - newSizeOfPartialChunk);
+ yaffs_flush_file_cache(in);
+ yaffs_invalidate_whole_cache(in);
- yaffs_WriteChunkDataToObject(in, lastChunk, localBuffer,
- newSizeOfPartialChunk, 1);
+ yaffs_check_gc(dev, 0);
- yaffs_ReleaseTempBuffer(dev, localBuffer, __LINE__);
- }
+ if (in->variant_type != YAFFS_OBJECT_TYPE_FILE)
+ return YAFFS_FAIL;
- in->variant.fileVariant.fileSize = newSize;
+ if (new_size == old_size)
+ return YAFFS_OK;
- yaffs_PruneFileStructure(dev, &in->variant.fileVariant);
+ if (new_size > old_size) {
+ yaffs2_handle_hole(in, new_size);
+ in->variant.file_variant.file_size = new_size;
} else {
- /* newsSize > oldFileSize */
- in->variant.fileVariant.fileSize = newSize;
+ /* new_size < old_size */
+ yaffs_resize_file_down(in, new_size);
}
-
-
- /* Write a new object header.
+ /* Write a new object header to reflect the resize.
* show we've shrunk the file, if need be
- * Do this only if the file is not in the deleted directories.
+ * Do this only if the file is not in the deleted directories
+ * and is not shadowed.
*/
- if (in->parent->objectId != YAFFS_OBJECTID_UNLINKED &&
- in->parent->objectId != YAFFS_OBJECTID_DELETED) {
- yaffs_UpdateObjectHeader(in, NULL, 0,
- (newSize < oldFileSize) ? 1 : 0, 0);
- }
+ if (in->parent &&
+ !in->is_shadowed &&
+ in->parent->obj_id != YAFFS_OBJECTID_UNLINKED &&
+ in->parent->obj_id != YAFFS_OBJECTID_DELETED)
+ yaffs_update_oh(in, NULL, 0, 0, 0, NULL);
return YAFFS_OK;
}
-loff_t yaffs_GetFileSize(yaffs_Object * obj)
-{
- obj = yaffs_GetEquivalentObject(obj);
-
- switch (obj->variantType) {
- case YAFFS_OBJECT_TYPE_FILE:
- return obj->variant.fileVariant.fileSize;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- return yaffs_strlen(obj->variant.symLinkVariant.alias);
- default:
- return 0;
- }
-}
-
-
-
-int yaffs_FlushFile(yaffs_Object * in, int updateTime)
+int yaffs_flush_file(struct yaffs_obj *in, int update_time, int data_sync)
{
- int retVal;
- if (in->dirty) {
- yaffs_FlushFilesChunkCache(in);
- if (updateTime) {
-#ifdef CONFIG_YAFFS_WINCE
- yfsd_WinFileTimeNow(in->win_mtime);
-#else
-
- in->yst_mtime = Y_CURRENT_TIME;
+ if (!in->dirty)
+ return YAFFS_OK;
-#endif
- }
+ yaffs_flush_file_cache(in);
- retVal =
- (yaffs_UpdateObjectHeader(in, NULL, 0, 0, 0) >=
- 0) ? YAFFS_OK : YAFFS_FAIL;
- } else {
- retVal = YAFFS_OK;
- }
+ if (data_sync)
+ return YAFFS_OK;
- return retVal;
+ if (update_time)
+ yaffs_load_current_time(in, 0, 0);
+ return (yaffs_update_oh(in, NULL, 0, 0, 0, NULL) >= 0) ?
+ YAFFS_OK : YAFFS_FAIL;
}
-static int yaffs_DoGenericObjectDeletion(yaffs_Object * in)
-{
- /* First off, invalidate the file's data in the cache, without flushing. */
- yaffs_InvalidateWholeChunkCache(in);
-
- if (in->myDev->isYaffs2 && (in->parent != in->myDev->deletedDir)) {
- /* Move to the unlinked directory so we have a record that it was deleted. */
- yaffs_ChangeObjectName(in, in->myDev->deletedDir,"deleted", 0, 0);
-
- }
-
- yaffs_RemoveObjectFromDirectory(in);
- yaffs_DeleteChunk(in->myDev, in->chunkId, 1, __LINE__);
- in->chunkId = -1;
-
- yaffs_FreeObject(in);
- return YAFFS_OK;
-
-}
-
-/* yaffs_DeleteFile deletes the whole file data
+/* yaffs_del_file deletes the whole file data
* and the inode associated with the file.
* It does not delete the links associated with the file.
*/
-static int yaffs_UnlinkFile(yaffs_Object * in)
-{
-
- int retVal;
- int immediateDeletion = 0;
-
- if (1) {
-/* XXX U-BOOT XXX */
-#if 0
-#ifdef __KERNEL__
- if (!in->myInode) {
- immediateDeletion = 1;
-
- }
-#endif
-#else
- if (in->inUse <= 0) {
- immediateDeletion = 1;
-
- }
-#endif
- if (immediateDeletion) {
- retVal =
- yaffs_ChangeObjectName(in, in->myDev->deletedDir,
- "deleted", 0, 0);
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: immediate deletion of file %d" TENDSTR),
- in->objectId));
- in->deleted = 1;
- in->myDev->nDeletedFiles++;
- if (0 && in->myDev->isYaffs2) {
- yaffs_ResizeFile(in, 0);
- }
- yaffs_SoftDeleteFile(in);
- } else {
- retVal =
- yaffs_ChangeObjectName(in, in->myDev->unlinkedDir,
- "unlinked", 0, 0);
- }
-
+static int yaffs_unlink_file_if_needed(struct yaffs_obj *in)
+{
+ int ret_val;
+ int del_now = 0;
+ struct yaffs_dev *dev = in->my_dev;
+
+ if (!in->my_inode)
+ del_now = 1;
+
+ if (del_now) {
+ ret_val =
+ yaffs_change_obj_name(in, in->my_dev->del_dir,
+ _Y("deleted"), 0, 0);
+ yaffs_trace(YAFFS_TRACE_TRACING,
+ "yaffs: immediate deletion of file %d",
+ in->obj_id);
+ in->deleted = 1;
+ in->my_dev->n_deleted_files++;
+ if (dev->param.disable_soft_del || dev->param.is_yaffs2)
+ yaffs_resize_file(in, 0);
+ yaffs_soft_del_file(in);
+ } else {
+ ret_val =
+ yaffs_change_obj_name(in, in->my_dev->unlinked_dir,
+ _Y("unlinked"), 0, 0);
}
- return retVal;
+ return ret_val;
}
-int yaffs_DeleteFile(yaffs_Object * in)
+int yaffs_del_file(struct yaffs_obj *in)
{
- int retVal = YAFFS_OK;
+ int ret_val = YAFFS_OK;
+ int deleted; /* Need to cache value on stack if in is freed */
+ struct yaffs_dev *dev = in->my_dev;
- if (in->nDataChunks > 0) {
- /* Use soft deletion if there is data in the file */
- if (!in->unlinked) {
- retVal = yaffs_UnlinkFile(in);
- }
- if (retVal == YAFFS_OK && in->unlinked && !in->deleted) {
+ if (dev->param.disable_soft_del || dev->param.is_yaffs2)
+ yaffs_resize_file(in, 0);
+
+ if (in->n_data_chunks > 0) {
+ /* Use soft deletion if there is data in the file.
+ * That won't be the case if it has been resized to zero.
+ */
+ if (!in->unlinked)
+ ret_val = yaffs_unlink_file_if_needed(in);
+
+ deleted = in->deleted;
+
+ if (ret_val == YAFFS_OK && in->unlinked && !in->deleted) {
in->deleted = 1;
- in->myDev->nDeletedFiles++;
- yaffs_SoftDeleteFile(in);
+ deleted = 1;
+ in->my_dev->n_deleted_files++;
+ yaffs_soft_del_file(in);
}
- return in->deleted ? YAFFS_OK : YAFFS_FAIL;
+ return deleted ? YAFFS_OK : YAFFS_FAIL;
} else {
/* The file has no data chunks so we toss it immediately */
- yaffs_FreeTnode(in->myDev, in->variant.fileVariant.top);
- in->variant.fileVariant.top = NULL;
- yaffs_DoGenericObjectDeletion(in);
+ yaffs_free_tnode(in->my_dev, in->variant.file_variant.top);
+ in->variant.file_variant.top = NULL;
+ yaffs_generic_obj_del(in);
return YAFFS_OK;
}
}
-static int yaffs_DeleteDirectory(yaffs_Object * in)
+int yaffs_is_non_empty_dir(struct yaffs_obj *obj)
{
- /* First check that the directory is empty. */
- if (list_empty(&in->variant.directoryVariant.children)) {
- return yaffs_DoGenericObjectDeletion(in);
- }
+ return (obj &&
+ obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) &&
+ !(list_empty(&obj->variant.dir_variant.children));
+}
- return YAFFS_FAIL;
+static int yaffs_del_dir(struct yaffs_obj *obj)
+{
+ /* First check that the directory is empty. */
+ if (yaffs_is_non_empty_dir(obj))
+ return YAFFS_FAIL;
+ return yaffs_generic_obj_del(obj);
}
-static int yaffs_DeleteSymLink(yaffs_Object * in)
+static int yaffs_del_symlink(struct yaffs_obj *in)
{
- YFREE(in->variant.symLinkVariant.alias);
+ kfree(in->variant.symlink_variant.alias);
+ in->variant.symlink_variant.alias = NULL;
- return yaffs_DoGenericObjectDeletion(in);
+ return yaffs_generic_obj_del(in);
}
-static int yaffs_DeleteHardLink(yaffs_Object * in)
+static int yaffs_del_link(struct yaffs_obj *in)
{
- /* remove this hardlink from the list assocaited with the equivalent
+ /* remove this hardlink from the list associated with the equivalent
* object
*/
- list_del(&in->hardLinks);
- return yaffs_DoGenericObjectDeletion(in);
+ list_del_init(&in->hard_links);
+ return yaffs_generic_obj_del(in);
}
-static void yaffs_DestroyObject(yaffs_Object * obj)
+int yaffs_del_obj(struct yaffs_obj *obj)
{
- switch (obj->variantType) {
+ int ret_val = -1;
+
+ switch (obj->variant_type) {
case YAFFS_OBJECT_TYPE_FILE:
- yaffs_DeleteFile(obj);
+ ret_val = yaffs_del_file(obj);
break;
case YAFFS_OBJECT_TYPE_DIRECTORY:
- yaffs_DeleteDirectory(obj);
+ if (!list_empty(&obj->variant.dir_variant.dirty)) {
+ yaffs_trace(YAFFS_TRACE_BACKGROUND,
+ "Remove object %d from dirty directories",
+ obj->obj_id);
+ list_del_init(&obj->variant.dir_variant.dirty);
+ }
+ return yaffs_del_dir(obj);
break;
case YAFFS_OBJECT_TYPE_SYMLINK:
- yaffs_DeleteSymLink(obj);
+ ret_val = yaffs_del_symlink(obj);
break;
case YAFFS_OBJECT_TYPE_HARDLINK:
- yaffs_DeleteHardLink(obj);
+ ret_val = yaffs_del_link(obj);
break;
case YAFFS_OBJECT_TYPE_SPECIAL:
- yaffs_DoGenericObjectDeletion(obj);
+ ret_val = yaffs_generic_obj_del(obj);
break;
case YAFFS_OBJECT_TYPE_UNKNOWN:
+ ret_val = 0;
break; /* should not happen. */
}
+ return ret_val;
}
-static int yaffs_UnlinkWorker(yaffs_Object * obj)
+static int yaffs_unlink_worker(struct yaffs_obj *obj)
{
+ int del_now = 0;
+
+ if (!obj)
+ return YAFFS_FAIL;
+
+ if (!obj->my_inode)
+ del_now = 1;
- if (obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
- return yaffs_DeleteHardLink(obj);
- } else if (!list_empty(&obj->hardLinks)) {
+ yaffs_update_parent(obj->parent);
+
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK) {
+ return yaffs_del_link(obj);
+ } else if (!list_empty(&obj->hard_links)) {
/* Curve ball: We're unlinking an object that has a hardlink.
*
* This problem arises because we are not strictly following
@@ -5072,1638 +3975,531 @@ static int yaffs_UnlinkWorker(yaffs_Object * obj)
* Instead, we do the following:
* - Select a hardlink.
* - Unhook it from the hard links
- * - Unhook it from its parent directory (so that the rename can work)
+ * - Move it from its parent directory so that the rename works.
* - Rename the object to the hardlink's name.
* - Delete the hardlink
*/
- yaffs_Object *hl;
- int retVal;
+ struct yaffs_obj *hl;
+ struct yaffs_obj *parent;
+ int ret_val;
YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
- hl = list_entry(obj->hardLinks.next, yaffs_Object, hardLinks);
+ hl = list_entry(obj->hard_links.next, struct yaffs_obj,
+ hard_links);
- list_del_init(&hl->hardLinks);
- list_del_init(&hl->siblings);
+ yaffs_get_obj_name(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
+ parent = hl->parent;
- yaffs_GetObjectName(hl, name, YAFFS_MAX_NAME_LENGTH + 1);
+ list_del_init(&hl->hard_links);
- retVal = yaffs_ChangeObjectName(obj, hl->parent, name, 0, 0);
+ yaffs_add_obj_to_dir(obj->my_dev->unlinked_dir, hl);
- if (retVal == YAFFS_OK) {
- retVal = yaffs_DoGenericObjectDeletion(hl);
- }
- return retVal;
+ ret_val = yaffs_change_obj_name(obj, parent, name, 0, 0);
- } else {
- switch (obj->variantType) {
+ if (ret_val == YAFFS_OK)
+ ret_val = yaffs_generic_obj_del(hl);
+
+ return ret_val;
+
+ } else if (del_now) {
+ switch (obj->variant_type) {
case YAFFS_OBJECT_TYPE_FILE:
- return yaffs_UnlinkFile(obj);
+ return yaffs_del_file(obj);
break;
case YAFFS_OBJECT_TYPE_DIRECTORY:
- return yaffs_DeleteDirectory(obj);
+ list_del_init(&obj->variant.dir_variant.dirty);
+ return yaffs_del_dir(obj);
break;
case YAFFS_OBJECT_TYPE_SYMLINK:
- return yaffs_DeleteSymLink(obj);
+ return yaffs_del_symlink(obj);
break;
case YAFFS_OBJECT_TYPE_SPECIAL:
- return yaffs_DoGenericObjectDeletion(obj);
+ return yaffs_generic_obj_del(obj);
break;
case YAFFS_OBJECT_TYPE_HARDLINK:
case YAFFS_OBJECT_TYPE_UNKNOWN:
default:
return YAFFS_FAIL;
}
+ } else if (yaffs_is_non_empty_dir(obj)) {
+ return YAFFS_FAIL;
+ } else {
+ return yaffs_change_obj_name(obj, obj->my_dev->unlinked_dir,
+ _Y("unlinked"), 0, 0);
}
}
-
-static int yaffs_UnlinkObject( yaffs_Object *obj)
+static int yaffs_unlink_obj(struct yaffs_obj *obj)
{
-
- if (obj && obj->unlinkAllowed) {
- return yaffs_UnlinkWorker(obj);
- }
+ if (obj && obj->unlink_allowed)
+ return yaffs_unlink_worker(obj);
return YAFFS_FAIL;
+}
+int yaffs_unlinker(struct yaffs_obj *dir, const YCHAR *name)
+{
+ struct yaffs_obj *obj;
+
+ obj = yaffs_find_by_name(dir, name);
+ return yaffs_unlink_obj(obj);
}
-int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name)
+
+/* Note:
+ * If old_name is NULL then we take old_dir as the object to be renamed.
+ */
+int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR *old_name,
+ struct yaffs_obj *new_dir, const YCHAR *new_name)
{
- yaffs_Object *obj;
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *existing_target = NULL;
+ int force = 0;
+ int result;
+ struct yaffs_dev *dev;
+
+ if (!old_dir || old_dir->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ BUG();
+ return YAFFS_FAIL;
+ }
+ if (!new_dir || new_dir->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ BUG();
+ return YAFFS_FAIL;
+ }
+
+ dev = old_dir->my_dev;
+
+#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
+ /* Special case for case insemsitive systems.
+ * While look-up is case insensitive, the name isn't.
+ * Therefore we might want to change x.txt to X.txt
+ */
+ if (old_dir == new_dir &&
+ old_name && new_name &&
+ yaffs_strcmp(old_name, new_name) == 0)
+ force = 1;
+#endif
+
+ if (yaffs_strnlen(new_name, YAFFS_MAX_NAME_LENGTH + 1) >
+ YAFFS_MAX_NAME_LENGTH)
+ /* ENAMETOOLONG */
+ return YAFFS_FAIL;
+
+ if (old_name)
+ obj = yaffs_find_by_name(old_dir, old_name);
+ else{
+ obj = old_dir;
+ old_dir = obj->parent;
+ }
+
+ if (obj && obj->rename_allowed) {
+ /* Now handle an existing target, if there is one */
+ existing_target = yaffs_find_by_name(new_dir, new_name);
+ if (yaffs_is_non_empty_dir(existing_target)) {
+ return YAFFS_FAIL; /* ENOTEMPTY */
+ } else if (existing_target && existing_target != obj) {
+ /* Nuke the target first, using shadowing,
+ * but only if it isn't the same object.
+ *
+ * Note we must disable gc here otherwise it can mess
+ * up the shadowing.
+ *
+ */
+ dev->gc_disable = 1;
+ yaffs_change_obj_name(obj, new_dir, new_name, force,
+ existing_target->obj_id);
+ existing_target->is_shadowed = 1;
+ yaffs_unlink_obj(existing_target);
+ dev->gc_disable = 0;
+ }
+
+ result = yaffs_change_obj_name(obj, new_dir, new_name, 1, 0);
- obj = yaffs_FindObjectByName(dir, name);
- return yaffs_UnlinkObject(obj);
+ yaffs_update_parent(old_dir);
+ if (new_dir != old_dir)
+ yaffs_update_parent(new_dir);
+
+ return result;
+ }
+ return YAFFS_FAIL;
}
/*----------------------- Initialisation Scanning ---------------------- */
-static void yaffs_HandleShadowedObject(yaffs_Device * dev, int objId,
- int backwardScanning)
+void yaffs_handle_shadowed_obj(struct yaffs_dev *dev, int obj_id,
+ int backward_scanning)
{
- yaffs_Object *obj;
-
- if (!backwardScanning) {
- /* Handle YAFFS1 forward scanning case
- * For YAFFS1 we always do the deletion
- */
+ struct yaffs_obj *obj;
- } else {
+ if (backward_scanning) {
/* Handle YAFFS2 case (backward scanning)
* If the shadowed object exists then ignore.
*/
- if (yaffs_FindObjectByNumber(dev, objId)) {
+ obj = yaffs_find_by_number(dev, obj_id);
+ if (obj)
return;
- }
}
- /* Let's create it (if it does not exist) assuming it is a file so that it can do shrinking etc.
+ /* Let's create it (if it does not exist) assuming it is a file so that
+ * it can do shrinking etc.
* We put it in unlinked dir to be cleaned up after the scanning
*/
obj =
- yaffs_FindOrCreateObjectByNumber(dev, objId,
- YAFFS_OBJECT_TYPE_FILE);
- yaffs_AddObjectToDirectory(dev->unlinkedDir, obj);
- obj->variant.fileVariant.shrinkSize = 0;
- obj->valid = 1; /* So that we don't read any other info for this file */
-
+ yaffs_find_or_create_by_number(dev, obj_id, YAFFS_OBJECT_TYPE_FILE);
+ if (!obj)
+ return;
+ obj->is_shadowed = 1;
+ yaffs_add_obj_to_dir(dev->unlinked_dir, obj);
+ obj->variant.file_variant.shrink_size = 0;
+ obj->valid = 1; /* So that we don't read any other info. */
}
-typedef struct {
- int seq;
- int block;
-} yaffs_BlockIndex;
-
-
-static void yaffs_HardlinkFixup(yaffs_Device *dev, yaffs_Object *hardList)
+void yaffs_link_fixup(struct yaffs_dev *dev, struct list_head *hard_list)
{
- yaffs_Object *hl;
- yaffs_Object *in;
-
- while (hardList) {
- hl = hardList;
- hardList = (yaffs_Object *) (hardList->hardLinks.next);
+ struct list_head *lh;
+ struct list_head *save;
+ struct yaffs_obj *hl;
+ struct yaffs_obj *in;
- in = yaffs_FindObjectByNumber(dev,
- hl->variant.hardLinkVariant.
- equivalentObjectId);
+ list_for_each_safe(lh, save, hard_list) {
+ hl = list_entry(lh, struct yaffs_obj, hard_links);
+ in = yaffs_find_by_number(dev,
+ hl->variant.hardlink_variant.equiv_id);
if (in) {
/* Add the hardlink pointers */
- hl->variant.hardLinkVariant.equivalentObject = in;
- list_add(&hl->hardLinks, &in->hardLinks);
+ hl->variant.hardlink_variant.equiv_obj = in;
+ list_add(&hl->hard_links, &in->hard_links);
} else {
/* Todo Need to report/handle this better.
* Got a problem... hardlink to a non-existant object
*/
- hl->variant.hardLinkVariant.equivalentObject = NULL;
- INIT_LIST_HEAD(&hl->hardLinks);
-
+ hl->variant.hardlink_variant.equiv_obj = NULL;
+ INIT_LIST_HEAD(&hl->hard_links);
}
-
}
-
}
-
-
-
-
-static int ybicmp(const void *a, const void *b){
- register int aseq = ((yaffs_BlockIndex *)a)->seq;
- register int bseq = ((yaffs_BlockIndex *)b)->seq;
- register int ablock = ((yaffs_BlockIndex *)a)->block;
- register int bblock = ((yaffs_BlockIndex *)b)->block;
- if( aseq == bseq )
- return ablock - bblock;
- else
- return aseq - bseq;
-
-}
-
-static int yaffs_Scan(yaffs_Device * dev)
+static void yaffs_strip_deleted_objs(struct yaffs_dev *dev)
{
- yaffs_ExtendedTags tags;
- int blk;
- int blockIterator;
- int startIterator;
- int endIterator;
- int nBlocksToScan = 0;
-
- int chunk;
- int c;
- int deleted;
- yaffs_BlockState state;
- yaffs_Object *hardList = NULL;
- yaffs_BlockInfo *bi;
- int sequenceNumber;
- yaffs_ObjectHeader *oh;
- yaffs_Object *in;
- yaffs_Object *parent;
- int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
-
- int alloc_failed = 0;
-
-
- __u8 *chunkData;
-
- yaffs_BlockIndex *blockIndex = NULL;
-
- if (dev->isYaffs2) {
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_Scan is not for YAFFS2!" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- //TODO Throw all the yaffs2 stuuf out of yaffs_Scan since it is only for yaffs1 format.
-
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_Scan starts intstartblk %d intendblk %d..." TENDSTR),
- dev->internalStartBlock, dev->internalEndBlock));
-
- chunkData = yaffs_GetTempBuffer(dev, __LINE__);
-
- dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
-
- if (dev->isYaffs2) {
- blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
- if(!blockIndex)
- return YAFFS_FAIL;
- }
-
- /* Scan all the blocks to determine their state */
- for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
- bi = yaffs_GetBlockInfo(dev, blk);
- yaffs_ClearChunkBits(dev, blk);
- bi->pagesInUse = 0;
- bi->softDeletions = 0;
-
- yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
-
- bi->blockState = state;
- bi->sequenceNumber = sequenceNumber;
-
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
- state, sequenceNumber));
-
- if (state == YAFFS_BLOCK_STATE_DEAD) {
- T(YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("block %d is bad" TENDSTR), blk));
- } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block empty " TENDSTR)));
- dev->nErasedBlocks++;
- dev->nFreeChunks += dev->nChunksPerBlock;
- } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
-
- /* Determine the highest sequence number */
- if (dev->isYaffs2 &&
- sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
- sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
-
- blockIndex[nBlocksToScan].seq = sequenceNumber;
- blockIndex[nBlocksToScan].block = blk;
-
- nBlocksToScan++;
-
- if (sequenceNumber >= dev->sequenceNumber) {
- dev->sequenceNumber = sequenceNumber;
- }
- } else if (dev->isYaffs2) {
- /* TODO: Nasty sequence number! */
- T(YAFFS_TRACE_SCAN,
- (TSTR
- ("Block scanning block %d has bad sequence number %d"
- TENDSTR), blk, sequenceNumber));
-
- }
- }
- }
-
- /* Sort the blocks
- * Dungy old bubble sort for now...
- */
- if (dev->isYaffs2) {
- yaffs_BlockIndex temp;
- int i;
- int j;
-
- for (i = 0; i < nBlocksToScan; i++)
- for (j = i + 1; j < nBlocksToScan; j++)
- if (blockIndex[i].seq > blockIndex[j].seq) {
- temp = blockIndex[j];
- blockIndex[j] = blockIndex[i];
- blockIndex[i] = temp;
- }
- }
-
- /* Now scan the blocks looking at the data. */
- if (dev->isYaffs2) {
- startIterator = 0;
- endIterator = nBlocksToScan - 1;
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
- } else {
- startIterator = dev->internalStartBlock;
- endIterator = dev->internalEndBlock;
- }
-
- /* For each block.... */
- for (blockIterator = startIterator; !alloc_failed && blockIterator <= endIterator;
- blockIterator++) {
-
- if (dev->isYaffs2) {
- /* get the block to scan in the correct order */
- blk = blockIndex[blockIterator].block;
- } else {
- blk = blockIterator;
- }
-
- bi = yaffs_GetBlockInfo(dev, blk);
- state = bi->blockState;
-
- deleted = 0;
-
- /* For each chunk in each block that needs scanning....*/
- for (c = 0; !alloc_failed && c < dev->nChunksPerBlock &&
- state == YAFFS_BLOCK_STATE_NEEDS_SCANNING; c++) {
- /* Read the tags and decide what to do */
- chunk = blk * dev->nChunksPerBlock + c;
-
- yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
- &tags);
-
- /* Let's have a good look at this chunk... */
-
- if (!dev->isYaffs2 && tags.chunkDeleted) {
- /* YAFFS1 only...
- * A deleted chunk
- */
- deleted++;
- dev->nFreeChunks++;
- /*T((" %d %d deleted\n",blk,c)); */
- } else if (!tags.chunkUsed) {
- /* An unassigned chunk in the block
- * This means that either the block is empty or
- * this is the one being allocated from
- */
-
- if (c == 0) {
- /* We're looking at the first chunk in the block so the block is unused */
- state = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- } else {
- /* this is the block being allocated from */
- T(YAFFS_TRACE_SCAN,
- (TSTR
- (" Allocating from %d %d" TENDSTR),
- blk, c));
- state = YAFFS_BLOCK_STATE_ALLOCATING;
- dev->allocationBlock = blk;
- dev->allocationPage = c;
- dev->allocationBlockFinder = blk;
- /* Set it to here to encourage the allocator to go forth from here. */
-
- /* Yaffs2 sanity check:
- * This should be the one with the highest sequence number
- */
- if (dev->isYaffs2
- && (dev->sequenceNumber !=
- bi->sequenceNumber)) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs: Allocation block %d was not highest sequence id:"
- " block seq = %d, dev seq = %d"
- TENDSTR), blk,bi->sequenceNumber,dev->sequenceNumber));
- }
- }
-
- dev->nFreeChunks += (dev->nChunksPerBlock - c);
- } else if (tags.chunkId > 0) {
- /* chunkId > 0 so it is a data chunk... */
- unsigned int endpos;
-
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- in = yaffs_FindOrCreateObjectByNumber(dev,
- tags.
- objectId,
- YAFFS_OBJECT_TYPE_FILE);
- /* PutChunkIntoFile checks for a clash (two data chunks with
- * the same chunkId).
- */
-
- if(!in)
- alloc_failed = 1;
-
- if(in){
- if(!yaffs_PutChunkIntoFile(in, tags.chunkId, chunk,1))
- alloc_failed = 1;
- }
-
- endpos =
- (tags.chunkId - 1) * dev->nDataBytesPerChunk +
- tags.byteCount;
- if (in &&
- in->variantType == YAFFS_OBJECT_TYPE_FILE
- && in->variant.fileVariant.scannedFileSize <
- endpos) {
- in->variant.fileVariant.
- scannedFileSize = endpos;
- if (!dev->useHeaderFileSize) {
- in->variant.fileVariant.
- fileSize =
- in->variant.fileVariant.
- scannedFileSize;
- }
-
- }
- /* T((" %d %d data %d %d\n",blk,c,tags.objectId,tags.chunkId)); */
- } else {
- /* chunkId == 0, so it is an ObjectHeader.
- * Thus, we read in the object header and make the object
- */
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- yaffs_ReadChunkWithTagsFromNAND(dev, chunk,
- chunkData,
- NULL);
-
- oh = (yaffs_ObjectHeader *) chunkData;
-
- in = yaffs_FindObjectByNumber(dev,
- tags.objectId);
- if (in && in->variantType != oh->type) {
- /* This should not happen, but somehow
- * Wev'e ended up with an objectId that has been reused but not yet
- * deleted, and worse still it has changed type. Delete the old object.
- */
-
- yaffs_DestroyObject(in);
-
- in = 0;
- }
-
- in = yaffs_FindOrCreateObjectByNumber(dev,
- tags.
- objectId,
- oh->type);
-
- if(!in)
- alloc_failed = 1;
-
- if (in && oh->shadowsObject > 0) {
- yaffs_HandleShadowedObject(dev,
- oh->
- shadowsObject,
- 0);
- }
-
- if (in && in->valid) {
- /* We have already filled this one. We have a duplicate and need to resolve it. */
-
- unsigned existingSerial = in->serial;
- unsigned newSerial = tags.serialNumber;
-
- if (dev->isYaffs2 ||
- ((existingSerial + 1) & 3) ==
- newSerial) {
- /* Use new one - destroy the exisiting one */
- yaffs_DeleteChunk(dev,
- in->chunkId,
- 1, __LINE__);
- in->valid = 0;
- } else {
- /* Use existing - destroy this one. */
- yaffs_DeleteChunk(dev, chunk, 1,
- __LINE__);
- }
- }
-
- if (in && !in->valid &&
- (tags.objectId == YAFFS_OBJECTID_ROOT ||
- tags.objectId == YAFFS_OBJECTID_LOSTNFOUND)) {
- /* We only load some info, don't fiddle with directory structure */
- in->valid = 1;
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-#endif
- in->chunkId = chunk;
-
- } else if (in && !in->valid) {
- /* we need to load this info */
-
- in->valid = 1;
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-#endif
- in->chunkId = chunk;
-
- yaffs_SetObjectName(in, oh->name);
- in->dirty = 0;
-
- /* directory stuff...
- * hook up to parent
- */
-
- parent =
- yaffs_FindOrCreateObjectByNumber
- (dev, oh->parentObjectId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
- if (parent->variantType ==
- YAFFS_OBJECT_TYPE_UNKNOWN) {
- /* Set up as a directory */
- parent->variantType =
- YAFFS_OBJECT_TYPE_DIRECTORY;
- INIT_LIST_HEAD(&parent->variant.
- directoryVariant.
- children);
- } else if (parent->variantType !=
- YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- /* Hoosterman, another problem....
- * We're trying to use a non-directory as a directory
- */
-
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: attempting to use non-directory as"
- " a directory in scan. Put in lost+found."
- TENDSTR)));
- parent = dev->lostNFoundDir;
- }
-
- yaffs_AddObjectToDirectory(parent, in);
-
- if (0 && (parent == dev->deletedDir ||
- parent == dev->unlinkedDir)) {
- in->deleted = 1; /* If it is unlinked at start up then it wants deleting */
- dev->nDeletedFiles++;
- }
- /* Note re hardlinks.
- * Since we might scan a hardlink before its equivalent object is scanned
- * we put them all in a list.
- * After scanning is complete, we should have all the objects, so we run through this
- * list and fix up all the chains.
- */
-
- switch (in->variantType) {
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* Todo got a problem */
- break;
- case YAFFS_OBJECT_TYPE_FILE:
- if (dev->isYaffs2
- && oh->isShrink) {
- /* Prune back the shrunken chunks */
- yaffs_PruneResizedChunks
- (in, oh->fileSize);
- /* Mark the block as having a shrinkHeader */
- bi->hasShrinkHeader = 1;
- }
-
- if (dev->useHeaderFileSize)
-
- in->variant.fileVariant.
- fileSize =
- oh->fileSize;
-
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- in->variant.hardLinkVariant.
- equivalentObjectId =
- oh->equivalentObjectId;
- in->hardLinks.next =
- (struct list_head *)
- hardList;
- hardList = in;
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- in->variant.symLinkVariant.alias =
- yaffs_CloneString(oh->alias);
- if(!in->variant.symLinkVariant.alias)
- alloc_failed = 1;
- break;
- }
-
- if (parent == dev->deletedDir) {
- yaffs_DestroyObject(in);
- bi->hasShrinkHeader = 1;
- }
- }
- }
- }
-
- if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
- /* If we got this far while scanning, then the block is fully allocated.*/
- state = YAFFS_BLOCK_STATE_FULL;
- }
-
- bi->blockState = state;
-
- /* Now let's see if it was dirty */
- if (bi->pagesInUse == 0 &&
- !bi->hasShrinkHeader &&
- bi->blockState == YAFFS_BLOCK_STATE_FULL) {
- yaffs_BlockBecameDirty(dev, blk);
- }
-
- }
-
- if (blockIndex) {
- YFREE(blockIndex);
- }
-
-
- /* Ok, we've done all the scanning.
- * Fix up the hard link chains.
- * We should now have scanned all the objects, now it's time to add these
- * hardlinks.
+ /*
+ * Sort out state of unlinked and deleted objects after scanning.
*/
+ struct list_head *i;
+ struct list_head *n;
+ struct yaffs_obj *l;
- yaffs_HardlinkFixup(dev,hardList);
+ if (dev->read_only)
+ return;
- /* Handle the unlinked files. Since they were left in an unlinked state we should
- * just delete them.
- */
- {
- struct list_head *i;
- struct list_head *n;
-
- yaffs_Object *l;
- /* Soft delete all the unlinked files */
- list_for_each_safe(i, n,
- &dev->unlinkedDir->variant.directoryVariant.
- children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- yaffs_DestroyObject(l);
- }
- }
+ /* Soft delete all the unlinked files */
+ list_for_each_safe(i, n,
+ &dev->unlinked_dir->variant.dir_variant.children) {
+ l = list_entry(i, struct yaffs_obj, siblings);
+ yaffs_del_obj(l);
}
- yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-
- if(alloc_failed){
- return YAFFS_FAIL;
+ list_for_each_safe(i, n, &dev->del_dir->variant.dir_variant.children) {
+ l = list_entry(i, struct yaffs_obj, siblings);
+ yaffs_del_obj(l);
}
-
- T(YAFFS_TRACE_SCAN, (TSTR("yaffs_Scan ends" TENDSTR)));
-
-
- return YAFFS_OK;
}
-static void yaffs_CheckObjectDetailsLoaded(yaffs_Object *in)
-{
- __u8 *chunkData;
- yaffs_ObjectHeader *oh;
- yaffs_Device *dev = in->myDev;
- yaffs_ExtendedTags tags;
-
- if(!in)
- return;
-
-#if 0
- T(YAFFS_TRACE_SCAN,(TSTR("details for object %d %s loaded" TENDSTR),
- in->objectId,
- in->lazyLoaded ? "not yet" : "already"));
-#endif
-
- if(in->lazyLoaded){
- in->lazyLoaded = 0;
- chunkData = yaffs_GetTempBuffer(dev, __LINE__);
-
- yaffs_ReadChunkWithTagsFromNAND(dev, in->chunkId,
- chunkData, &tags);
- oh = (yaffs_ObjectHeader *) chunkData;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-
-#endif
- yaffs_SetObjectName(in, oh->name);
-
- if(in->variantType == YAFFS_OBJECT_TYPE_SYMLINK){
- in->variant.symLinkVariant.alias =
- yaffs_CloneString(oh->alias);
- }
+/*
+ * This code iterates through all the objects making sure that they are rooted.
+ * Any unrooted objects are re-rooted in lost+found.
+ * An object needs to be in one of:
+ * - Directly under deleted, unlinked
+ * - Directly or indirectly under root.
+ *
+ * Note:
+ * This code assumes that we don't ever change the current relationships
+ * between directories:
+ * root_dir->parent == unlinked_dir->parent == del_dir->parent == NULL
+ * lost-n-found->parent == root_dir
+ *
+ * This fixes the problem where directories might have inadvertently been
+ * deleted leaving the object "hanging" without being rooted in the
+ * directory tree.
+ */
- yaffs_ReleaseTempBuffer(dev,chunkData, __LINE__);
- }
+static int yaffs_has_null_parent(struct yaffs_dev *dev, struct yaffs_obj *obj)
+{
+ return (obj == dev->del_dir ||
+ obj == dev->unlinked_dir || obj == dev->root_dir);
}
-static int yaffs_ScanBackwards(yaffs_Device * dev)
+static void yaffs_fix_hanging_objs(struct yaffs_dev *dev)
{
- yaffs_ExtendedTags tags;
- int blk;
- int blockIterator;
- int startIterator;
- int endIterator;
- int nBlocksToScan = 0;
-
- int chunk;
- int c;
- yaffs_BlockState state;
- yaffs_Object *hardList = NULL;
- yaffs_BlockInfo *bi;
- int sequenceNumber;
- yaffs_ObjectHeader *oh;
- yaffs_Object *in;
- yaffs_Object *parent;
- int nBlocks = dev->internalEndBlock - dev->internalStartBlock + 1;
- int itsUnlinked;
- __u8 *chunkData;
-
- int fileSize;
- int isShrink;
- int foundChunksInBlock;
- int equivalentObjectId;
- int alloc_failed = 0;
-
-
- yaffs_BlockIndex *blockIndex = NULL;
- int altBlockIndex = 0;
-
- if (!dev->isYaffs2) {
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_ScanBackwards is only for YAFFS2!" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- T(YAFFS_TRACE_SCAN,
- (TSTR
- ("yaffs_ScanBackwards starts intstartblk %d intendblk %d..."
- TENDSTR), dev->internalStartBlock, dev->internalEndBlock));
-
-
- dev->sequenceNumber = YAFFS_LOWEST_SEQUENCE_NUMBER;
-
- blockIndex = YMALLOC(nBlocks * sizeof(yaffs_BlockIndex));
-
- if(!blockIndex) {
- blockIndex = YMALLOC_ALT(nBlocks * sizeof(yaffs_BlockIndex));
- altBlockIndex = 1;
- }
-
- if(!blockIndex) {
- T(YAFFS_TRACE_SCAN,
- (TSTR("yaffs_Scan() could not allocate block index!" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- dev->blocksInCheckpoint = 0;
-
- chunkData = yaffs_GetTempBuffer(dev, __LINE__);
-
- /* Scan all the blocks to determine their state */
- for (blk = dev->internalStartBlock; blk <= dev->internalEndBlock; blk++) {
- bi = yaffs_GetBlockInfo(dev, blk);
- yaffs_ClearChunkBits(dev, blk);
- bi->pagesInUse = 0;
- bi->softDeletions = 0;
-
- yaffs_QueryInitialBlockState(dev, blk, &state, &sequenceNumber);
-
- bi->blockState = state;
- bi->sequenceNumber = sequenceNumber;
-
- if(bi->sequenceNumber == YAFFS_SEQUENCE_CHECKPOINT_DATA)
- bi->blockState = state = YAFFS_BLOCK_STATE_CHECKPOINT;
-
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block scanning block %d state %d seq %d" TENDSTR), blk,
- state, sequenceNumber));
-
-
- if(state == YAFFS_BLOCK_STATE_CHECKPOINT){
- dev->blocksInCheckpoint++;
-
- } else if (state == YAFFS_BLOCK_STATE_DEAD) {
- T(YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("block %d is bad" TENDSTR), blk));
- } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("Block empty " TENDSTR)));
- dev->nErasedBlocks++;
- dev->nFreeChunks += dev->nChunksPerBlock;
- } else if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
-
- /* Determine the highest sequence number */
- if (dev->isYaffs2 &&
- sequenceNumber >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
- sequenceNumber < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
-
- blockIndex[nBlocksToScan].seq = sequenceNumber;
- blockIndex[nBlocksToScan].block = blk;
-
- nBlocksToScan++;
-
- if (sequenceNumber >= dev->sequenceNumber) {
- dev->sequenceNumber = sequenceNumber;
- }
- } else if (dev->isYaffs2) {
- /* TODO: Nasty sequence number! */
- T(YAFFS_TRACE_SCAN,
- (TSTR
- ("Block scanning block %d has bad sequence number %d"
- TENDSTR), blk, sequenceNumber));
-
- }
- }
- }
-
- T(YAFFS_TRACE_SCAN,
- (TSTR("%d blocks to be sorted..." TENDSTR), nBlocksToScan));
-
-
-
- YYIELD();
-
- /* Sort the blocks */
-#ifndef CONFIG_YAFFS_USE_OWN_SORT
- {
- /* Use qsort now. */
- yaffs_qsort(blockIndex, nBlocksToScan, sizeof(yaffs_BlockIndex), ybicmp);
- }
-#else
- {
- /* Dungy old bubble sort... */
-
- yaffs_BlockIndex temp;
- int i;
- int j;
-
- for (i = 0; i < nBlocksToScan; i++)
- for (j = i + 1; j < nBlocksToScan; j++)
- if (blockIndex[i].seq > blockIndex[j].seq) {
- temp = blockIndex[j];
- blockIndex[j] = blockIndex[i];
- blockIndex[i] = temp;
- }
- }
-#endif
-
- YYIELD();
-
- T(YAFFS_TRACE_SCAN, (TSTR("...done" TENDSTR)));
-
- /* Now scan the blocks looking at the data. */
- startIterator = 0;
- endIterator = nBlocksToScan - 1;
- T(YAFFS_TRACE_SCAN_DEBUG,
- (TSTR("%d blocks to be scanned" TENDSTR), nBlocksToScan));
-
- /* For each block.... backwards */
- for (blockIterator = endIterator; !alloc_failed && blockIterator >= startIterator;
- blockIterator--) {
- /* Cooperative multitasking! This loop can run for so
- long that watchdog timers expire. */
- YYIELD();
-
- /* get the block to scan in the correct order */
- blk = blockIndex[blockIterator].block;
-
- bi = yaffs_GetBlockInfo(dev, blk);
-
-
- state = bi->blockState;
-
- /* For each chunk in each block that needs scanning.... */
- foundChunksInBlock = 0;
- for (c = dev->nChunksPerBlock - 1;
- !alloc_failed && c >= 0 &&
- (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
- state == YAFFS_BLOCK_STATE_ALLOCATING); c--) {
- /* Scan backwards...
- * Read the tags and decide what to do
- */
-
- chunk = blk * dev->nChunksPerBlock + c;
-
- yaffs_ReadChunkWithTagsFromNAND(dev, chunk, NULL,
- &tags);
-
- /* Let's have a good look at this chunk... */
-
- if (!tags.chunkUsed) {
- /* An unassigned chunk in the block.
- * If there are used chunks after this one, then
- * it is a chunk that was skipped due to failing the erased
- * check. Just skip it so that it can be deleted.
- * But, more typically, We get here when this is an unallocated
- * chunk and his means that either the block is empty or
- * this is the one being allocated from
- */
-
- if(foundChunksInBlock)
- {
- /* This is a chunk that was skipped due to failing the erased check */
-
- } else if (c == 0) {
- /* We're looking at the first chunk in the block so the block is unused */
- state = YAFFS_BLOCK_STATE_EMPTY;
- dev->nErasedBlocks++;
- } else {
- if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING ||
- state == YAFFS_BLOCK_STATE_ALLOCATING) {
- if(dev->sequenceNumber == bi->sequenceNumber) {
- /* this is the block being allocated from */
-
- T(YAFFS_TRACE_SCAN,
- (TSTR
- (" Allocating from %d %d"
- TENDSTR), blk, c));
-
- state = YAFFS_BLOCK_STATE_ALLOCATING;
- dev->allocationBlock = blk;
- dev->allocationPage = c;
- dev->allocationBlockFinder = blk;
- }
- else {
- /* This is a partially written block that is not
- * the current allocation block. This block must have
- * had a write failure, so set up for retirement.
- */
-
- bi->needsRetiring = 1;
- bi->gcPrioritise = 1;
-
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("Partially written block %d being set for retirement" TENDSTR),
- blk));
- }
-
- }
-
- }
-
- dev->nFreeChunks++;
-
- } else if (tags.chunkId > 0) {
- /* chunkId > 0 so it is a data chunk... */
- unsigned int endpos;
- __u32 chunkBase =
- (tags.chunkId - 1) * dev->nDataBytesPerChunk;
-
- foundChunksInBlock = 1;
-
-
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- in = yaffs_FindOrCreateObjectByNumber(dev,
- tags.
- objectId,
- YAFFS_OBJECT_TYPE_FILE);
- if(!in){
- /* Out of memory */
- alloc_failed = 1;
- }
-
- if (in &&
- in->variantType == YAFFS_OBJECT_TYPE_FILE
- && chunkBase <
- in->variant.fileVariant.shrinkSize) {
- /* This has not been invalidated by a resize */
- if(!yaffs_PutChunkIntoFile(in, tags.chunkId,
- chunk, -1)){
- alloc_failed = 1;
- }
+ struct yaffs_obj *obj;
+ struct yaffs_obj *parent;
+ int i;
+ struct list_head *lh;
+ struct list_head *n;
+ int depth_limit;
+ int hanging;
- /* File size is calculated by looking at the data chunks if we have not
- * seen an object header yet. Stop this practice once we find an object header.
- */
- endpos =
- (tags.chunkId -
- 1) * dev->nDataBytesPerChunk +
- tags.byteCount;
-
- if (!in->valid && /* have not got an object header yet */
- in->variant.fileVariant.
- scannedFileSize < endpos) {
- in->variant.fileVariant.
- scannedFileSize = endpos;
- in->variant.fileVariant.
- fileSize =
- in->variant.fileVariant.
- scannedFileSize;
- }
+ if (dev->read_only)
+ return;
- } else if(in) {
- /* This chunk has been invalidated by a resize, so delete */
- yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
+ /* Iterate through the objects in each hash entry,
+ * looking at each object.
+ * Make sure it is rooted.
+ */
- }
+ for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
+ list_for_each_safe(lh, n, &dev->obj_bucket[i].list) {
+ obj = list_entry(lh, struct yaffs_obj, hash_link);
+ parent = obj->parent;
+
+ if (yaffs_has_null_parent(dev, obj)) {
+ /* These directories are not hanging */
+ hanging = 0;
+ } else if (!parent ||
+ parent->variant_type !=
+ YAFFS_OBJECT_TYPE_DIRECTORY) {
+ hanging = 1;
+ } else if (yaffs_has_null_parent(dev, parent)) {
+ hanging = 0;
} else {
- /* chunkId == 0, so it is an ObjectHeader.
- * Thus, we read in the object header and make the object
+ /*
+ * Need to follow the parent chain to
+ * see if it is hanging.
*/
- foundChunksInBlock = 1;
-
- yaffs_SetChunkBit(dev, blk, c);
- bi->pagesInUse++;
-
- oh = NULL;
- in = NULL;
-
- if (tags.extraHeaderInfoAvailable) {
- in = yaffs_FindOrCreateObjectByNumber
- (dev, tags.objectId,
- tags.extraObjectType);
- }
-
- if (!in ||
-#ifdef CONFIG_YAFFS_DISABLE_LAZY_LOAD
- !in->valid ||
-#endif
- tags.extraShadows ||
- (!in->valid &&
- (tags.objectId == YAFFS_OBJECTID_ROOT ||
- tags.objectId == YAFFS_OBJECTID_LOSTNFOUND))
- ) {
-
- /* If we don't have valid info then we need to read the chunk
- * TODO In future we can probably defer reading the chunk and
- * living with invalid data until needed.
- */
-
- yaffs_ReadChunkWithTagsFromNAND(dev,
- chunk,
- chunkData,
- NULL);
-
- oh = (yaffs_ObjectHeader *) chunkData;
-
- if (!in)
- in = yaffs_FindOrCreateObjectByNumber(dev, tags.objectId, oh->type);
-
- }
-
- if (!in) {
- /* TODO Hoosterman we have a problem! */
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: Could not make object for object %d "
- "at chunk %d during scan"
- TENDSTR), tags.objectId, chunk));
-
- }
-
- if (in->valid) {
- /* We have already filled this one.
- * We have a duplicate that will be discarded, but
- * we first have to suck out resize info if it is a file.
- */
-
- if ((in->variantType == YAFFS_OBJECT_TYPE_FILE) &&
- ((oh &&
- oh-> type == YAFFS_OBJECT_TYPE_FILE)||
- (tags.extraHeaderInfoAvailable &&
- tags.extraObjectType == YAFFS_OBJECT_TYPE_FILE))
- ) {
- __u32 thisSize =
- (oh) ? oh->fileSize : tags.
- extraFileLength;
- __u32 parentObjectId =
- (oh) ? oh->
- parentObjectId : tags.
- extraParentObjectId;
- unsigned isShrink =
- (oh) ? oh->isShrink : tags.
- extraIsShrinkHeader;
-
- /* If it is deleted (unlinked at start also means deleted)
- * we treat the file size as being zeroed at this point.
- */
- if (parentObjectId ==
- YAFFS_OBJECTID_DELETED
- || parentObjectId ==
- YAFFS_OBJECTID_UNLINKED) {
- thisSize = 0;
- isShrink = 1;
- }
-
- if (isShrink &&
- in->variant.fileVariant.
- shrinkSize > thisSize) {
- in->variant.fileVariant.
- shrinkSize =
- thisSize;
- }
-
- if (isShrink) {
- bi->hasShrinkHeader = 1;
- }
-
- }
- /* Use existing - destroy this one. */
- yaffs_DeleteChunk(dev, chunk, 1, __LINE__);
-
+ hanging = 0;
+ depth_limit = 100;
+
+ while (parent != dev->root_dir &&
+ parent->parent &&
+ parent->parent->variant_type ==
+ YAFFS_OBJECT_TYPE_DIRECTORY &&
+ depth_limit > 0) {
+ parent = parent->parent;
+ depth_limit--;
}
-
- if (!in->valid &&
- (tags.objectId == YAFFS_OBJECTID_ROOT ||
- tags.objectId ==
- YAFFS_OBJECTID_LOSTNFOUND)) {
- /* We only load some info, don't fiddle with directory structure */
- in->valid = 1;
-
- if(oh) {
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-
-#endif
- } else {
- in->variantType = tags.extraObjectType;
- in->lazyLoaded = 1;
- }
-
- in->chunkId = chunk;
-
- } else if (!in->valid) {
- /* we need to load this info */
-
- in->valid = 1;
- in->chunkId = chunk;
-
- if(oh) {
- in->variantType = oh->type;
-
- in->yst_mode = oh->yst_mode;
-#ifdef CONFIG_YAFFS_WINCE
- in->win_atime[0] = oh->win_atime[0];
- in->win_ctime[0] = oh->win_ctime[0];
- in->win_mtime[0] = oh->win_mtime[0];
- in->win_atime[1] = oh->win_atime[1];
- in->win_ctime[1] = oh->win_ctime[1];
- in->win_mtime[1] = oh->win_mtime[1];
-#else
- in->yst_uid = oh->yst_uid;
- in->yst_gid = oh->yst_gid;
- in->yst_atime = oh->yst_atime;
- in->yst_mtime = oh->yst_mtime;
- in->yst_ctime = oh->yst_ctime;
- in->yst_rdev = oh->yst_rdev;
-#endif
-
- if (oh->shadowsObject > 0)
- yaffs_HandleShadowedObject(dev,
- oh->
- shadowsObject,
- 1);
-
-
- yaffs_SetObjectName(in, oh->name);
- parent =
- yaffs_FindOrCreateObjectByNumber
- (dev, oh->parentObjectId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
-
- fileSize = oh->fileSize;
- isShrink = oh->isShrink;
- equivalentObjectId = oh->equivalentObjectId;
-
- }
- else {
- in->variantType = tags.extraObjectType;
- parent =
- yaffs_FindOrCreateObjectByNumber
- (dev, tags.extraParentObjectId,
- YAFFS_OBJECT_TYPE_DIRECTORY);
- fileSize = tags.extraFileLength;
- isShrink = tags.extraIsShrinkHeader;
- equivalentObjectId = tags.extraEquivalentObjectId;
- in->lazyLoaded = 1;
-
- }
- in->dirty = 0;
-
- /* directory stuff...
- * hook up to parent
- */
-
- if (parent->variantType ==
- YAFFS_OBJECT_TYPE_UNKNOWN) {
- /* Set up as a directory */
- parent->variantType =
- YAFFS_OBJECT_TYPE_DIRECTORY;
- INIT_LIST_HEAD(&parent->variant.
- directoryVariant.
- children);
- } else if (parent->variantType !=
- YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- /* Hoosterman, another problem....
- * We're trying to use a non-directory as a directory
- */
-
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("yaffs tragedy: attempting to use non-directory as"
- " a directory in scan. Put in lost+found."
- TENDSTR)));
- parent = dev->lostNFoundDir;
- }
-
- yaffs_AddObjectToDirectory(parent, in);
-
- itsUnlinked = (parent == dev->deletedDir) ||
- (parent == dev->unlinkedDir);
-
- if (isShrink) {
- /* Mark the block as having a shrinkHeader */
- bi->hasShrinkHeader = 1;
- }
-
- /* Note re hardlinks.
- * Since we might scan a hardlink before its equivalent object is scanned
- * we put them all in a list.
- * After scanning is complete, we should have all the objects, so we run
- * through this list and fix up all the chains.
- */
-
- switch (in->variantType) {
- case YAFFS_OBJECT_TYPE_UNKNOWN:
- /* Todo got a problem */
- break;
- case YAFFS_OBJECT_TYPE_FILE:
-
- if (in->variant.fileVariant.
- scannedFileSize < fileSize) {
- /* This covers the case where the file size is greater
- * than where the data is
- * This will happen if the file is resized to be larger
- * than its current data extents.
- */
- in->variant.fileVariant.fileSize = fileSize;
- in->variant.fileVariant.scannedFileSize =
- in->variant.fileVariant.fileSize;
- }
-
- if (isShrink &&
- in->variant.fileVariant.shrinkSize > fileSize) {
- in->variant.fileVariant.shrinkSize = fileSize;
- }
-
- break;
- case YAFFS_OBJECT_TYPE_HARDLINK:
- if(!itsUnlinked) {
- in->variant.hardLinkVariant.equivalentObjectId =
- equivalentObjectId;
- in->hardLinks.next =
- (struct list_head *) hardList;
- hardList = in;
- }
- break;
- case YAFFS_OBJECT_TYPE_DIRECTORY:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SPECIAL:
- /* Do nothing */
- break;
- case YAFFS_OBJECT_TYPE_SYMLINK:
- if(oh){
- in->variant.symLinkVariant.alias =
- yaffs_CloneString(oh->
- alias);
- if(!in->variant.symLinkVariant.alias)
- alloc_failed = 1;
- }
- break;
- }
-
- }
-
+ if (parent != dev->root_dir)
+ hanging = 1;
}
-
- } /* End of scanning for each chunk */
-
- if (state == YAFFS_BLOCK_STATE_NEEDS_SCANNING) {
- /* If we got this far while scanning, then the block is fully allocated. */
- state = YAFFS_BLOCK_STATE_FULL;
- }
-
- bi->blockState = state;
-
- /* Now let's see if it was dirty */
- if (bi->pagesInUse == 0 &&
- !bi->hasShrinkHeader &&
- bi->blockState == YAFFS_BLOCK_STATE_FULL) {
- yaffs_BlockBecameDirty(dev, blk);
- }
-
- }
-
- if (altBlockIndex)
- YFREE_ALT(blockIndex);
- else
- YFREE(blockIndex);
-
- /* Ok, we've done all the scanning.
- * Fix up the hard link chains.
- * We should now have scanned all the objects, now it's time to add these
- * hardlinks.
- */
- yaffs_HardlinkFixup(dev,hardList);
-
-
- /*
- * Sort out state of unlinked and deleted objects.
- */
- {
- struct list_head *i;
- struct list_head *n;
-
- yaffs_Object *l;
-
- /* Soft delete all the unlinked files */
- list_for_each_safe(i, n,
- &dev->unlinkedDir->variant.directoryVariant.
- children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- yaffs_DestroyObject(l);
- }
- }
-
- /* Soft delete all the deletedDir files */
- list_for_each_safe(i, n,
- &dev->deletedDir->variant.directoryVariant.
- children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- yaffs_DestroyObject(l);
-
+ if (hanging) {
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "Hanging object %d moved to lost and found",
+ obj->obj_id);
+ yaffs_add_obj_to_dir(dev->lost_n_found, obj);
}
}
}
-
- yaffs_ReleaseTempBuffer(dev, chunkData, __LINE__);
-
- if(alloc_failed){
- return YAFFS_FAIL;
- }
-
- T(YAFFS_TRACE_SCAN, (TSTR("yaffs_ScanBackwards ends" TENDSTR)));
-
- return YAFFS_OK;
}
-/*------------------------------ Directory Functions ----------------------------- */
-
-static void yaffs_RemoveObjectFromDirectory(yaffs_Object * obj)
+/*
+ * Delete directory contents for cleaning up lost and found.
+ */
+static void yaffs_del_dir_contents(struct yaffs_obj *dir)
{
- yaffs_Device *dev = obj->myDev;
+ struct yaffs_obj *obj;
+ struct list_head *lh;
+ struct list_head *n;
- if(dev && dev->removeObjectCallback)
- dev->removeObjectCallback(obj);
+ if (dir->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY)
+ BUG();
- list_del_init(&obj->siblings);
- obj->parent = NULL;
+ list_for_each_safe(lh, n, &dir->variant.dir_variant.children) {
+ obj = list_entry(lh, struct yaffs_obj, siblings);
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY)
+ yaffs_del_dir_contents(obj);
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "Deleting lost_found object %d",
+ obj->obj_id);
+ yaffs_unlink_obj(obj);
+ }
}
-
-static void yaffs_AddObjectToDirectory(yaffs_Object * directory,
- yaffs_Object * obj)
+static void yaffs_empty_l_n_f(struct yaffs_dev *dev)
{
-
- if (!directory) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: Trying to add an object to a null pointer directory"
- TENDSTR)));
- YBUG();
- }
- if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: Trying to add an object to a non-directory"
- TENDSTR)));
- YBUG();
- }
-
- if (obj->siblings.prev == NULL) {
- /* Not initialised */
- INIT_LIST_HEAD(&obj->siblings);
-
- } else if (!list_empty(&obj->siblings)) {
- /* If it is holed up somewhere else, un hook it */
- yaffs_RemoveObjectFromDirectory(obj);
- }
- /* Now add it */
- list_add(&obj->siblings, &directory->variant.directoryVariant.children);
- obj->parent = directory;
-
- if (directory == obj->myDev->unlinkedDir
- || directory == obj->myDev->deletedDir) {
- obj->unlinked = 1;
- obj->myDev->nUnlinkedFiles++;
- obj->renameAllowed = 0;
- }
+ yaffs_del_dir_contents(dev->lost_n_found);
}
-yaffs_Object *yaffs_FindObjectByName(yaffs_Object * directory,
- const YCHAR * name)
+
+struct yaffs_obj *yaffs_find_by_name(struct yaffs_obj *directory,
+ const YCHAR *name)
{
int sum;
-
struct list_head *i;
YCHAR buffer[YAFFS_MAX_NAME_LENGTH + 1];
+ struct yaffs_obj *l;
- yaffs_Object *l;
-
- if (!name) {
+ if (!name)
return NULL;
- }
if (!directory) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: null pointer directory"
- TENDSTR)));
- YBUG();
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "tragedy: yaffs_find_by_name: null pointer directory"
+ );
+ BUG();
+ return NULL;
}
- if (directory->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
- YBUG();
+ if (directory->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "tragedy: yaffs_find_by_name: non-directory"
+ );
+ BUG();
}
- sum = yaffs_CalcNameSum(name);
+ sum = yaffs_calc_name_sum(name);
- list_for_each(i, &directory->variant.directoryVariant.children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
+ list_for_each(i, &directory->variant.dir_variant.children) {
+ l = list_entry(i, struct yaffs_obj, siblings);
- yaffs_CheckObjectDetailsLoaded(l);
+ if (l->parent != directory)
+ BUG();
- /* Special case for lost-n-found */
- if (l->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
- if (yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME) == 0) {
- return l;
- }
- } else if (yaffs_SumCompare(l->sum, sum) || l->chunkId <= 0)
- {
- /* LostnFound cunk called Objxxx
- * Do a real check
- */
- yaffs_GetObjectName(l, buffer,
- YAFFS_MAX_NAME_LENGTH);
- if (yaffs_strncmp(name, buffer,YAFFS_MAX_NAME_LENGTH) == 0) {
- return l;
- }
+ yaffs_check_obj_details_loaded(l);
- }
+ /* Special case for lost-n-found */
+ if (l->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
+ if (!yaffs_strcmp(name, YAFFS_LOSTNFOUND_NAME))
+ return l;
+ } else if (l->sum == sum || l->hdr_chunk <= 0) {
+ /* LostnFound chunk called Objxxx
+ * Do a real check
+ */
+ yaffs_get_obj_name(l, buffer,
+ YAFFS_MAX_NAME_LENGTH + 1);
+ if (!yaffs_strncmp(name, buffer, YAFFS_MAX_NAME_LENGTH))
+ return l;
}
}
-
return NULL;
}
-
-#if 0
-int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
- int (*fn) (yaffs_Object *))
-{
- struct list_head *i;
- yaffs_Object *l;
-
- if (!theDir) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: null pointer directory"
- TENDSTR)));
- YBUG();
- }
- if (theDir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("tragedy: yaffs_FindObjectByName: non-directory" TENDSTR)));
- YBUG();
- }
-
- list_for_each(i, &theDir->variant.directoryVariant.children) {
- if (i) {
- l = list_entry(i, yaffs_Object, siblings);
- if (l && !fn(l)) {
- return YAFFS_FAIL;
- }
- }
- }
-
- return YAFFS_OK;
-
-}
-#endif
-
/* GetEquivalentObject dereferences any hard links to get to the
* actual object.
*/
-yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj)
+struct yaffs_obj *yaffs_get_equivalent_obj(struct yaffs_obj *obj)
{
- if (obj && obj->variantType == YAFFS_OBJECT_TYPE_HARDLINK) {
- /* We want the object id of the equivalent object, not this one */
- obj = obj->variant.hardLinkVariant.equivalentObject;
- yaffs_CheckObjectDetailsLoaded(obj);
+ if (obj && obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK) {
+ obj = obj->variant.hardlink_variant.equiv_obj;
+ yaffs_check_obj_details_loaded(obj);
}
return obj;
-
}
-int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize)
-{
- memset(name, 0, buffSize * sizeof(YCHAR));
-
- yaffs_CheckObjectDetailsLoaded(obj);
+/*
+ * A note or two on object names.
+ * * If the object name is missing, we then make one up in the form objnnn
+ *
+ * * ASCII names are stored in the object header's name field from byte zero
+ * * Unicode names are historically stored starting from byte zero.
+ *
+ * Then there are automatic Unicode names...
+ * The purpose of these is to save names in a way that can be read as
+ * ASCII or Unicode names as appropriate, thus allowing a Unicode and ASCII
+ * system to share files.
+ *
+ * These automatic unicode are stored slightly differently...
+ * - If the name can fit in the ASCII character space then they are saved as
+ * ascii names as per above.
+ * - If the name needs Unicode then the name is saved in Unicode
+ * starting at oh->name[1].
- if (obj->objectId == YAFFS_OBJECTID_LOSTNFOUND) {
- yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffSize - 1);
- } else if (obj->chunkId <= 0) {
- YCHAR locName[20];
+ */
+static void yaffs_fix_null_name(struct yaffs_obj *obj, YCHAR *name,
+ int buffer_size)
+{
+ /* Create an object name if we could not find one. */
+ if (yaffs_strnlen(name, YAFFS_MAX_NAME_LENGTH) == 0) {
+ YCHAR local_name[20];
+ YCHAR num_string[20];
+ YCHAR *x = &num_string[19];
+ unsigned v = obj->obj_id;
+ num_string[19] = 0;
+ while (v > 0) {
+ x--;
+ *x = '0' + (v % 10);
+ v /= 10;
+ }
/* make up a name */
- yaffs_sprintf(locName, _Y("%s%d"), YAFFS_LOSTNFOUND_PREFIX,
- obj->objectId);
- yaffs_strncpy(name, locName, buffSize - 1);
-
+ yaffs_strcpy(local_name, YAFFS_LOSTNFOUND_PREFIX);
+ yaffs_strcat(local_name, x);
+ yaffs_strncpy(name, local_name, buffer_size - 1);
}
-#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
- else if (obj->shortName[0]) {
- yaffs_strcpy(name, obj->shortName);
- }
-#endif
- else {
- __u8 *buffer = yaffs_GetTempBuffer(obj->myDev, __LINE__);
+}
- yaffs_ObjectHeader *oh = (yaffs_ObjectHeader *) buffer;
+int yaffs_get_obj_name(struct yaffs_obj *obj, YCHAR *name, int buffer_size)
+{
+ memset(name, 0, buffer_size * sizeof(YCHAR));
+ yaffs_check_obj_details_loaded(obj);
+ if (obj->obj_id == YAFFS_OBJECTID_LOSTNFOUND) {
+ yaffs_strncpy(name, YAFFS_LOSTNFOUND_NAME, buffer_size - 1);
+ } else if (obj->short_name[0]) {
+ yaffs_strcpy(name, obj->short_name);
+ } else if (obj->hdr_chunk > 0) {
+ u8 *buffer = yaffs_get_temp_buffer(obj->my_dev);
- memset(buffer, 0, obj->myDev->nDataBytesPerChunk);
+ struct yaffs_obj_hdr *oh = (struct yaffs_obj_hdr *)buffer;
- if (obj->chunkId >= 0) {
- yaffs_ReadChunkWithTagsFromNAND(obj->myDev,
- obj->chunkId, buffer,
- NULL);
+ memset(buffer, 0, obj->my_dev->data_bytes_per_chunk);
+
+ if (obj->hdr_chunk > 0) {
+ yaffs_rd_chunk_tags_nand(obj->my_dev,
+ obj->hdr_chunk,
+ buffer, NULL);
}
- yaffs_strncpy(name, oh->name, buffSize - 1);
+ yaffs_load_name_from_oh(obj->my_dev, name, oh->name,
+ buffer_size);
- yaffs_ReleaseTempBuffer(obj->myDev, buffer, __LINE__);
+ yaffs_release_temp_buffer(obj->my_dev, buffer);
}
- return yaffs_strlen(name);
+ yaffs_fix_null_name(obj, name, buffer_size);
+
+ return yaffs_strnlen(name, YAFFS_MAX_NAME_LENGTH);
}
-int yaffs_GetObjectFileLength(yaffs_Object * obj)
+loff_t yaffs_get_obj_length(struct yaffs_obj *obj)
{
-
/* Dereference any hard linking */
- obj = yaffs_GetEquivalentObject(obj);
+ obj = yaffs_get_equivalent_obj(obj);
- if (obj->variantType == YAFFS_OBJECT_TYPE_FILE) {
- return obj->variant.fileVariant.fileSize;
- }
- if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
- return yaffs_strlen(obj->variant.symLinkVariant.alias);
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_FILE)
+ return obj->variant.file_variant.file_size;
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_SYMLINK) {
+ if (!obj->variant.symlink_variant.alias)
+ return 0;
+ return yaffs_strnlen(obj->variant.symlink_variant.alias,
+ YAFFS_MAX_ALIAS_LENGTH);
} else {
/* Only a directory should drop through to here */
- return obj->myDev->nDataBytesPerChunk;
+ return obj->my_dev->data_bytes_per_chunk;
}
}
-int yaffs_GetObjectLinkCount(yaffs_Object * obj)
+int yaffs_get_obj_link_count(struct yaffs_obj *obj)
{
int count = 0;
struct list_head *i;
- if (!obj->unlinked) {
+ if (!obj->unlinked)
count++; /* the object itself */
- }
- list_for_each(i, &obj->hardLinks) {
- count++; /* add the hard links; */
- }
- return count;
+ list_for_each(i, &obj->hard_links)
+ count++; /* add the hard links; */
+
+ return count;
}
-int yaffs_GetObjectInode(yaffs_Object * obj)
+int yaffs_get_obj_inode(struct yaffs_obj *obj)
{
- obj = yaffs_GetEquivalentObject(obj);
+ obj = yaffs_get_equivalent_obj(obj);
- return obj->objectId;
+ return obj->obj_id;
}
-unsigned yaffs_GetObjectType(yaffs_Object * obj)
+unsigned yaffs_get_obj_type(struct yaffs_obj *obj)
{
- obj = yaffs_GetEquivalentObject(obj);
+ obj = yaffs_get_equivalent_obj(obj);
- switch (obj->variantType) {
+ switch (obj->variant_type) {
case YAFFS_OBJECT_TYPE_FILE:
return DT_REG;
break;
@@ -6725,605 +4521,501 @@ unsigned yaffs_GetObjectType(yaffs_Object * obj)
return DT_BLK;
if (S_ISSOCK(obj->yst_mode))
return DT_SOCK;
+ return DT_REG;
+ break;
default:
return DT_REG;
break;
}
}
-YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj)
+YCHAR *yaffs_get_symlink_alias(struct yaffs_obj *obj)
{
- obj = yaffs_GetEquivalentObject(obj);
- if (obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK) {
- return yaffs_CloneString(obj->variant.symLinkVariant.alias);
- } else {
- return yaffs_CloneString(_Y(""));
- }
-}
-
-#ifndef CONFIG_YAFFS_WINCE
-
-int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr)
-{
- unsigned int valid = attr->ia_valid;
-
- if (valid & ATTR_MODE)
- obj->yst_mode = attr->ia_mode;
- if (valid & ATTR_UID)
- obj->yst_uid = attr->ia_uid;
- if (valid & ATTR_GID)
- obj->yst_gid = attr->ia_gid;
-
- if (valid & ATTR_ATIME)
- obj->yst_atime = Y_TIME_CONVERT(attr->ia_atime);
- if (valid & ATTR_CTIME)
- obj->yst_ctime = Y_TIME_CONVERT(attr->ia_ctime);
- if (valid & ATTR_MTIME)
- obj->yst_mtime = Y_TIME_CONVERT(attr->ia_mtime);
-
- if (valid & ATTR_SIZE)
- yaffs_ResizeFile(obj, attr->ia_size);
-
- yaffs_UpdateObjectHeader(obj, NULL, 1, 0, 0);
-
- return YAFFS_OK;
-
-}
-int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr)
-{
- unsigned int valid = 0;
-
- attr->ia_mode = obj->yst_mode;
- valid |= ATTR_MODE;
- attr->ia_uid = obj->yst_uid;
- valid |= ATTR_UID;
- attr->ia_gid = obj->yst_gid;
- valid |= ATTR_GID;
-
- Y_TIME_CONVERT(attr->ia_atime) = obj->yst_atime;
- valid |= ATTR_ATIME;
- Y_TIME_CONVERT(attr->ia_ctime) = obj->yst_ctime;
- valid |= ATTR_CTIME;
- Y_TIME_CONVERT(attr->ia_mtime) = obj->yst_mtime;
- valid |= ATTR_MTIME;
-
- attr->ia_size = yaffs_GetFileSize(obj);
- valid |= ATTR_SIZE;
-
- attr->ia_valid = valid;
-
- return YAFFS_OK;
-
-}
-
-#endif
-
-#if 0
-int yaffs_DumpObject(yaffs_Object * obj)
-{
- YCHAR name[257];
-
- yaffs_GetObjectName(obj, name, 256);
-
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("Object %d, inode %d \"%s\"\n dirty %d valid %d serial %d sum %d"
- " chunk %d type %d size %d\n"
- TENDSTR), obj->objectId, yaffs_GetObjectInode(obj), name,
- obj->dirty, obj->valid, obj->serial, obj->sum, obj->chunkId,
- yaffs_GetObjectType(obj), yaffs_GetObjectFileLength(obj)));
-
- return YAFFS_OK;
+ obj = yaffs_get_equivalent_obj(obj);
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_SYMLINK)
+ return yaffs_clone_str(obj->variant.symlink_variant.alias);
+ else
+ return yaffs_clone_str(_Y(""));
}
-#endif
-/*---------------------------- Initialisation code -------------------------------------- */
+/*--------------------------- Initialisation code -------------------------- */
-static int yaffs_CheckDevFunctions(const yaffs_Device * dev)
+static int yaffs_check_dev_fns(const struct yaffs_dev *dev)
{
-
/* Common functions, gotta have */
- if (!dev->eraseBlockInNAND || !dev->initialiseNAND)
+ if (!dev->param.erase_fn || !dev->param.initialise_flash_fn)
return 0;
-#ifdef CONFIG_YAFFS_YAFFS2
-
/* Can use the "with tags" style interface for yaffs1 or yaffs2 */
- if (dev->writeChunkWithTagsToNAND &&
- dev->readChunkWithTagsFromNAND &&
- !dev->writeChunkToNAND &&
- !dev->readChunkFromNAND &&
- dev->markNANDBlockBad && dev->queryNANDBlock)
+ if (dev->param.write_chunk_tags_fn &&
+ dev->param.read_chunk_tags_fn &&
+ !dev->param.write_chunk_fn &&
+ !dev->param.read_chunk_fn &&
+ dev->param.bad_block_fn && dev->param.query_block_fn)
return 1;
-#endif
/* Can use the "spare" style interface for yaffs1 */
- if (!dev->isYaffs2 &&
- !dev->writeChunkWithTagsToNAND &&
- !dev->readChunkWithTagsFromNAND &&
- dev->writeChunkToNAND &&
- dev->readChunkFromNAND &&
- !dev->markNANDBlockBad && !dev->queryNANDBlock)
+ if (!dev->param.is_yaffs2 &&
+ !dev->param.write_chunk_tags_fn &&
+ !dev->param.read_chunk_tags_fn &&
+ dev->param.write_chunk_fn &&
+ dev->param.read_chunk_fn &&
+ !dev->param.bad_block_fn && !dev->param.query_block_fn)
return 1;
return 0; /* bad */
}
-
-static int yaffs_CreateInitialDirectories(yaffs_Device *dev)
-{
- /* Initialise the unlinked, deleted, root and lost and found directories */
-
- dev->lostNFoundDir = dev->rootDir = NULL;
- dev->unlinkedDir = dev->deletedDir = NULL;
-
- dev->unlinkedDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_UNLINKED, S_IFDIR);
-
- dev->deletedDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_DELETED, S_IFDIR);
-
- dev->rootDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_ROOT,
- YAFFS_ROOT_MODE | S_IFDIR);
- dev->lostNFoundDir =
- yaffs_CreateFakeDirectory(dev, YAFFS_OBJECTID_LOSTNFOUND,
- YAFFS_LOSTNFOUND_MODE | S_IFDIR);
-
- if(dev->lostNFoundDir && dev->rootDir && dev->unlinkedDir && dev->deletedDir){
- yaffs_AddObjectToDirectory(dev->rootDir, dev->lostNFoundDir);
+static int yaffs_create_initial_dir(struct yaffs_dev *dev)
+{
+ /* Initialise the unlinked, deleted, root and lost+found directories */
+ dev->lost_n_found = dev->root_dir = NULL;
+ dev->unlinked_dir = dev->del_dir = NULL;
+ dev->unlinked_dir =
+ yaffs_create_fake_dir(dev, YAFFS_OBJECTID_UNLINKED, S_IFDIR);
+ dev->del_dir =
+ yaffs_create_fake_dir(dev, YAFFS_OBJECTID_DELETED, S_IFDIR);
+ dev->root_dir =
+ yaffs_create_fake_dir(dev, YAFFS_OBJECTID_ROOT,
+ YAFFS_ROOT_MODE | S_IFDIR);
+ dev->lost_n_found =
+ yaffs_create_fake_dir(dev, YAFFS_OBJECTID_LOSTNFOUND,
+ YAFFS_LOSTNFOUND_MODE | S_IFDIR);
+
+ if (dev->lost_n_found && dev->root_dir && dev->unlinked_dir
+ && dev->del_dir) {
+ yaffs_add_obj_to_dir(dev->root_dir, dev->lost_n_found);
return YAFFS_OK;
}
-
return YAFFS_FAIL;
}
-int yaffs_GutsInitialise(yaffs_Device * dev)
+int yaffs_guts_initialise(struct yaffs_dev *dev)
{
int init_failed = 0;
unsigned x;
int bits;
- T(YAFFS_TRACE_TRACING, (TSTR("yaffs: yaffs_GutsInitialise()" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_TRACING, "yaffs: yaffs_guts_initialise()");
/* Check stuff that must be set */
if (!dev) {
- T(YAFFS_TRACE_ALWAYS, (TSTR("yaffs: Need a device" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "yaffs: Need a device"
+ );
+ return YAFFS_FAIL;
+ }
+
+ if (dev->is_mounted) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS, "device already mounted");
return YAFFS_FAIL;
}
- dev->internalStartBlock = dev->startBlock;
- dev->internalEndBlock = dev->endBlock;
- dev->blockOffset = 0;
- dev->chunkOffset = 0;
- dev->nFreeChunks = 0;
+ dev->internal_start_block = dev->param.start_block;
+ dev->internal_end_block = dev->param.end_block;
+ dev->block_offset = 0;
+ dev->chunk_offset = 0;
+ dev->n_free_chunks = 0;
+
+ dev->gc_block = 0;
- if (dev->startBlock == 0) {
- dev->internalStartBlock = dev->startBlock + 1;
- dev->internalEndBlock = dev->endBlock + 1;
- dev->blockOffset = 1;
- dev->chunkOffset = dev->nChunksPerBlock;
+ if (dev->param.start_block == 0) {
+ dev->internal_start_block = dev->param.start_block + 1;
+ dev->internal_end_block = dev->param.end_block + 1;
+ dev->block_offset = 1;
+ dev->chunk_offset = dev->param.chunks_per_block;
}
/* Check geometry parameters. */
- if ((dev->isYaffs2 && dev->nDataBytesPerChunk < 1024) ||
- (!dev->isYaffs2 && dev->nDataBytesPerChunk != 512) ||
- dev->nChunksPerBlock < 2 ||
- dev->nReservedBlocks < 2 ||
- dev->internalStartBlock <= 0 ||
- dev->internalEndBlock <= 0 ||
- dev->internalEndBlock <= (dev->internalStartBlock + dev->nReservedBlocks + 2) // otherwise it is too small
- ) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs: NAND geometry problems: chunk size %d, type is yaffs%s "
- TENDSTR), dev->nDataBytesPerChunk, dev->isYaffs2 ? "2" : ""));
+ if ((!dev->param.inband_tags && dev->param.is_yaffs2 &&
+ dev->param.total_bytes_per_chunk < 1024) ||
+ (!dev->param.is_yaffs2 &&
+ dev->param.total_bytes_per_chunk < 512) ||
+ (dev->param.inband_tags && !dev->param.is_yaffs2) ||
+ dev->param.chunks_per_block < 2 ||
+ dev->param.n_reserved_blocks < 2 ||
+ dev->internal_start_block <= 0 ||
+ dev->internal_end_block <= 0 ||
+ dev->internal_end_block <=
+ (dev->internal_start_block + dev->param.n_reserved_blocks + 2)
+ ) {
+ /* otherwise it is too small */
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "NAND geometry problems: chunk size %d, type is yaffs%s, inband_tags %d ",
+ dev->param.total_bytes_per_chunk,
+ dev->param.is_yaffs2 ? "2" : "",
+ dev->param.inband_tags);
return YAFFS_FAIL;
}
- if (yaffs_InitialiseNAND(dev) != YAFFS_OK) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: InitialiseNAND failed" TENDSTR)));
+ if (yaffs_init_nand(dev) != YAFFS_OK) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS, "InitialiseNAND failed");
return YAFFS_FAIL;
}
+ /* Sort out space for inband tags, if required */
+ if (dev->param.inband_tags)
+ dev->data_bytes_per_chunk =
+ dev->param.total_bytes_per_chunk -
+ sizeof(struct yaffs_packed_tags2_tags_only);
+ else
+ dev->data_bytes_per_chunk = dev->param.total_bytes_per_chunk;
+
/* Got the right mix of functions? */
- if (!yaffs_CheckDevFunctions(dev)) {
+ if (!yaffs_check_dev_fns(dev)) {
/* Function missing */
- T(YAFFS_TRACE_ALWAYS,
- (TSTR
- ("yaffs: device function(s) missing or wrong\n" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "device function(s) missing or wrong");
return YAFFS_FAIL;
}
- /* This is really a compilation check. */
- if (!yaffs_CheckStructures()) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs_CheckStructures failed\n" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- if (dev->isMounted) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: device already mounted\n" TENDSTR)));
- return YAFFS_FAIL;
- }
-
- /* Finished with most checks. One or two more checks happen later on too. */
-
- dev->isMounted = 1;
-
+ /* Finished with most checks. Further checks happen later on too. */
+ dev->is_mounted = 1;
/* OK now calculate a few things for the device */
/*
* Calculate all the chunk size manipulation numbers:
*/
- /* Start off assuming it is a power of 2 */
- dev->chunkShift = ShiftDiv(dev->nDataBytesPerChunk);
- dev->chunkMask = (1<<dev->chunkShift) - 1;
-
- if(dev->nDataBytesPerChunk == (dev->chunkMask + 1)){
- /* Yes it is a power of 2, disable crumbs */
- dev->crumbMask = 0;
- dev->crumbShift = 0;
- dev->crumbsPerChunk = 0;
- } else {
- /* Not a power of 2, use crumbs instead */
- dev->crumbShift = ShiftDiv(sizeof(yaffs_PackedTags2TagsPart));
- dev->crumbMask = (1<<dev->crumbShift)-1;
- dev->crumbsPerChunk = dev->nDataBytesPerChunk/(1 << dev->crumbShift);
- dev->chunkShift = 0;
- dev->chunkMask = 0;
- }
-
+ x = dev->data_bytes_per_chunk;
+ /* We always use dev->chunk_shift and dev->chunk_div */
+ dev->chunk_shift = calc_shifts(x);
+ x >>= dev->chunk_shift;
+ dev->chunk_div = x;
+ /* We only use chunk mask if chunk_div is 1 */
+ dev->chunk_mask = (1 << dev->chunk_shift) - 1;
/*
- * Calculate chunkGroupBits.
- * We need to find the next power of 2 > than internalEndBlock
+ * Calculate chunk_grp_bits.
+ * We need to find the next power of 2 > than internal_end_block
*/
- x = dev->nChunksPerBlock * (dev->internalEndBlock + 1);
+ x = dev->param.chunks_per_block * (dev->internal_end_block + 1);
- bits = ShiftsGE(x);
+ bits = calc_shifts_ceiling(x);
/* Set up tnode width if wide tnodes are enabled. */
- if(!dev->wideTnodesDisabled){
+ if (!dev->param.wide_tnodes_disabled) {
/* bits must be even so that we end up with 32-bit words */
- if(bits & 1)
+ if (bits & 1)
bits++;
- if(bits < 16)
- dev->tnodeWidth = 16;
+ if (bits < 16)
+ dev->tnode_width = 16;
else
- dev->tnodeWidth = bits;
+ dev->tnode_width = bits;
+ } else {
+ dev->tnode_width = 16;
}
- else
- dev->tnodeWidth = 16;
- dev->tnodeMask = (1<<dev->tnodeWidth)-1;
+ dev->tnode_mask = (1 << dev->tnode_width) - 1;
/* Level0 Tnodes are 16 bits or wider (if wide tnodes are enabled),
* so if the bitwidth of the
* chunk range we're using is greater than 16 we need
- * to figure out chunk shift and chunkGroupSize
+ * to figure out chunk shift and chunk_grp_size
*/
- if (bits <= dev->tnodeWidth)
- dev->chunkGroupBits = 0;
+ if (bits <= dev->tnode_width)
+ dev->chunk_grp_bits = 0;
else
- dev->chunkGroupBits = bits - dev->tnodeWidth;
+ dev->chunk_grp_bits = bits - dev->tnode_width;
+ dev->tnode_size = (dev->tnode_width * YAFFS_NTNODES_LEVEL0) / 8;
+ if (dev->tnode_size < sizeof(struct yaffs_tnode))
+ dev->tnode_size = sizeof(struct yaffs_tnode);
- dev->chunkGroupSize = 1 << dev->chunkGroupBits;
+ dev->chunk_grp_size = 1 << dev->chunk_grp_bits;
- if (dev->nChunksPerBlock < dev->chunkGroupSize) {
+ if (dev->param.chunks_per_block < dev->chunk_grp_size) {
/* We have a problem because the soft delete won't work if
* the chunk group size > chunks per block.
* This can be remedied by using larger "virtual blocks".
*/
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: chunk group too large\n" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_ALWAYS, "chunk group too large");
return YAFFS_FAIL;
}
- /* OK, we've finished verifying the device, lets continue with initialisation */
+ /* Finished verifying the device, continue with initialisation */
/* More device initialisation */
- dev->garbageCollections = 0;
- dev->passiveGarbageCollections = 0;
- dev->currentDirtyChecker = 0;
- dev->bufferedBlock = -1;
- dev->doingBufferedBlockRewrite = 0;
- dev->nDeletedFiles = 0;
- dev->nBackgroundDeletions = 0;
- dev->nUnlinkedFiles = 0;
- dev->eccFixed = 0;
- dev->eccUnfixed = 0;
- dev->tagsEccFixed = 0;
- dev->tagsEccUnfixed = 0;
- dev->nErasureFailures = 0;
- dev->nErasedBlocks = 0;
- dev->isDoingGC = 0;
- dev->hasPendingPrioritisedGCs = 1; /* Assume the worst for now, will get fixed on first GC */
+ dev->all_gcs = 0;
+ dev->passive_gc_count = 0;
+ dev->oldest_dirty_gc_count = 0;
+ dev->bg_gcs = 0;
+ dev->gc_block_finder = 0;
+ dev->buffered_block = -1;
+ dev->doing_buffered_block_rewrite = 0;
+ dev->n_deleted_files = 0;
+ dev->n_bg_deletions = 0;
+ dev->n_unlinked_files = 0;
+ dev->n_ecc_fixed = 0;
+ dev->n_ecc_unfixed = 0;
+ dev->n_tags_ecc_fixed = 0;
+ dev->n_tags_ecc_unfixed = 0;
+ dev->n_erase_failures = 0;
+ dev->n_erased_blocks = 0;
+ dev->gc_disable = 0;
+ dev->has_pending_prioritised_gc = 1;
+ /* Assume the worst for now, will get fixed on first GC */
+ INIT_LIST_HEAD(&dev->dirty_dirs);
+ dev->oldest_dirty_seq = 0;
+ dev->oldest_dirty_block = 0;
/* Initialise temporary buffers and caches. */
- if(!yaffs_InitialiseTempBuffers(dev))
+ if (!yaffs_init_tmp_buffers(dev))
init_failed = 1;
- dev->srCache = NULL;
- dev->gcCleanupList = NULL;
+ dev->cache = NULL;
+ dev->gc_cleanup_list = NULL;
-
- if (!init_failed &&
- dev->nShortOpCaches > 0) {
+ if (!init_failed && dev->param.n_caches > 0) {
int i;
- __u8 *buf;
- int srCacheBytes = dev->nShortOpCaches * sizeof(yaffs_ChunkCache);
+ void *buf;
+ int cache_bytes =
+ dev->param.n_caches * sizeof(struct yaffs_cache);
- if (dev->nShortOpCaches > YAFFS_MAX_SHORT_OP_CACHES) {
- dev->nShortOpCaches = YAFFS_MAX_SHORT_OP_CACHES;
- }
+ if (dev->param.n_caches > YAFFS_MAX_SHORT_OP_CACHES)
+ dev->param.n_caches = YAFFS_MAX_SHORT_OP_CACHES;
- dev->srCache = YMALLOC(srCacheBytes);
- buf = (__u8 *)dev->srCache;
+ dev->cache = kmalloc(cache_bytes, GFP_NOFS);
- if(dev->srCache)
- memset(dev->srCache,0,srCacheBytes);
+ buf = (u8 *) dev->cache;
- for (i = 0; i < dev->nShortOpCaches && buf; i++) {
- dev->srCache[i].object = NULL;
- dev->srCache[i].lastUse = 0;
- dev->srCache[i].dirty = 0;
- dev->srCache[i].data = buf = YMALLOC_DMA(dev->nDataBytesPerChunk);
+ if (dev->cache)
+ memset(dev->cache, 0, cache_bytes);
+
+ for (i = 0; i < dev->param.n_caches && buf; i++) {
+ dev->cache[i].object = NULL;
+ dev->cache[i].last_use = 0;
+ dev->cache[i].dirty = 0;
+ dev->cache[i].data = buf =
+ kmalloc(dev->param.total_bytes_per_chunk, GFP_NOFS);
}
- if(!buf)
+ if (!buf)
init_failed = 1;
- dev->srLastUse = 0;
+ dev->cache_last_use = 0;
}
- dev->cacheHits = 0;
+ dev->cache_hits = 0;
- if(!init_failed){
- dev->gcCleanupList = YMALLOC(dev->nChunksPerBlock * sizeof(__u32));
- if(!dev->gcCleanupList)
+ if (!init_failed) {
+ dev->gc_cleanup_list =
+ kmalloc(dev->param.chunks_per_block * sizeof(u32),
+ GFP_NOFS);
+ if (!dev->gc_cleanup_list)
init_failed = 1;
}
- if (dev->isYaffs2) {
- dev->useHeaderFileSize = 1;
- }
- if(!init_failed && !yaffs_InitialiseBlocks(dev))
+ if (dev->param.is_yaffs2)
+ dev->param.use_header_file_size = 1;
+
+ if (!init_failed && !yaffs_init_blocks(dev))
init_failed = 1;
- yaffs_InitialiseTnodes(dev);
- yaffs_InitialiseObjects(dev);
+ yaffs_init_tnodes_and_objs(dev);
- if(!init_failed && !yaffs_CreateInitialDirectories(dev))
+ if (!init_failed && !yaffs_create_initial_dir(dev))
init_failed = 1;
+ if (!init_failed && dev->param.is_yaffs2 &&
+ !dev->param.disable_summary &&
+ !yaffs_summary_init(dev))
+ init_failed = 1;
- if(!init_failed){
+ if (!init_failed) {
/* Now scan the flash. */
- if (dev->isYaffs2) {
- if(yaffs_CheckpointRestore(dev)) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("yaffs: restored from checkpoint" TENDSTR)));
+ if (dev->param.is_yaffs2) {
+ if (yaffs2_checkpt_restore(dev)) {
+ yaffs_check_obj_details_loaded(dev->root_dir);
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT |
+ YAFFS_TRACE_MOUNT,
+ "yaffs: restored from checkpoint"
+ );
} else {
- /* Clean up the mess caused by an aborted checkpoint load
- * and scan backwards.
+ /* Clean up the mess caused by an aborted
+ * checkpoint load then scan backwards.
*/
- yaffs_DeinitialiseBlocks(dev);
- yaffs_DeinitialiseTnodes(dev);
- yaffs_DeinitialiseObjects(dev);
+ yaffs_deinit_blocks(dev);
+ yaffs_deinit_tnodes_and_objs(dev);
- dev->nErasedBlocks = 0;
- dev->nFreeChunks = 0;
- dev->allocationBlock = -1;
- dev->allocationPage = -1;
- dev->nDeletedFiles = 0;
- dev->nUnlinkedFiles = 0;
- dev->nBackgroundDeletions = 0;
- dev->oldestDirtySequence = 0;
+ dev->n_erased_blocks = 0;
+ dev->n_free_chunks = 0;
+ dev->alloc_block = -1;
+ dev->alloc_page = -1;
+ dev->n_deleted_files = 0;
+ dev->n_unlinked_files = 0;
+ dev->n_bg_deletions = 0;
- if(!init_failed && !yaffs_InitialiseBlocks(dev))
+ if (!init_failed && !yaffs_init_blocks(dev))
init_failed = 1;
- yaffs_InitialiseTnodes(dev);
- yaffs_InitialiseObjects(dev);
+ yaffs_init_tnodes_and_objs(dev);
- if(!init_failed && !yaffs_CreateInitialDirectories(dev))
+ if (!init_failed
+ && !yaffs_create_initial_dir(dev))
init_failed = 1;
- if(!init_failed && !yaffs_ScanBackwards(dev))
+ if (!init_failed && !yaffs2_scan_backwards(dev))
init_failed = 1;
}
- }else
- if(!yaffs_Scan(dev))
- init_failed = 1;
+ } else if (!yaffs1_scan(dev)) {
+ init_failed = 1;
+ }
+
+ yaffs_strip_deleted_objs(dev);
+ yaffs_fix_hanging_objs(dev);
+ if (dev->param.empty_lost_n_found)
+ yaffs_empty_l_n_f(dev);
}
- if(init_failed){
+ if (init_failed) {
/* Clean up the mess */
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: yaffs_GutsInitialise() aborted.\n" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_TRACING,
+ "yaffs: yaffs_guts_initialise() aborted.");
- yaffs_Deinitialise(dev);
+ yaffs_deinitialise(dev);
return YAFFS_FAIL;
}
/* Zero out stats */
- dev->nPageReads = 0;
- dev->nPageWrites = 0;
- dev->nBlockErasures = 0;
- dev->nGCCopies = 0;
- dev->nRetriedWrites = 0;
+ dev->n_page_reads = 0;
+ dev->n_page_writes = 0;
+ dev->n_erasures = 0;
+ dev->n_gc_copies = 0;
+ dev->n_retried_writes = 0;
- dev->nRetiredBlocks = 0;
+ dev->n_retired_blocks = 0;
- yaffs_VerifyFreeChunks(dev);
- yaffs_VerifyBlocks(dev);
+ yaffs_verify_free_chunks(dev);
+ yaffs_verify_blocks(dev);
+ /* Clean up any aborted checkpoint data */
+ if (!dev->is_checkpointed && dev->blocks_in_checkpt > 0)
+ yaffs2_checkpt_invalidate(dev);
- T(YAFFS_TRACE_TRACING,
- (TSTR("yaffs: yaffs_GutsInitialise() done.\n" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_TRACING,
+ "yaffs: yaffs_guts_initialise() done.");
return YAFFS_OK;
-
}
-void yaffs_Deinitialise(yaffs_Device * dev)
+void yaffs_deinitialise(struct yaffs_dev *dev)
{
- if (dev->isMounted) {
+ if (dev->is_mounted) {
int i;
- yaffs_DeinitialiseBlocks(dev);
- yaffs_DeinitialiseTnodes(dev);
- yaffs_DeinitialiseObjects(dev);
- if (dev->nShortOpCaches > 0 &&
- dev->srCache) {
+ yaffs_deinit_blocks(dev);
+ yaffs_deinit_tnodes_and_objs(dev);
+ yaffs_summary_deinit(dev);
+
+ if (dev->param.n_caches > 0 && dev->cache) {
- for (i = 0; i < dev->nShortOpCaches; i++) {
- if(dev->srCache[i].data)
- YFREE(dev->srCache[i].data);
- dev->srCache[i].data = NULL;
+ for (i = 0; i < dev->param.n_caches; i++) {
+ kfree(dev->cache[i].data);
+ dev->cache[i].data = NULL;
}
- YFREE(dev->srCache);
- dev->srCache = NULL;
+ kfree(dev->cache);
+ dev->cache = NULL;
}
- YFREE(dev->gcCleanupList);
+ kfree(dev->gc_cleanup_list);
- for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++) {
- YFREE(dev->tempBuffer[i].buffer);
- }
+ for (i = 0; i < YAFFS_N_TEMP_BUFFERS; i++)
+ kfree(dev->temp_buffer[i].buffer);
- dev->isMounted = 0;
- }
+ dev->is_mounted = 0;
+ if (dev->param.deinitialise_flash_fn)
+ dev->param.deinitialise_flash_fn(dev);
+ }
}
-static int yaffs_CountFreeChunks(yaffs_Device * dev)
+int yaffs_count_free_chunks(struct yaffs_dev *dev)
{
- int nFree;
+ int n_free = 0;
int b;
+ struct yaffs_block_info *blk;
- yaffs_BlockInfo *blk;
-
- for (nFree = 0, b = dev->internalStartBlock; b <= dev->internalEndBlock;
- b++) {
- blk = yaffs_GetBlockInfo(dev, b);
-
- switch (blk->blockState) {
+ blk = dev->block_info;
+ for (b = dev->internal_start_block; b <= dev->internal_end_block; b++) {
+ switch (blk->block_state) {
case YAFFS_BLOCK_STATE_EMPTY:
case YAFFS_BLOCK_STATE_ALLOCATING:
case YAFFS_BLOCK_STATE_COLLECTING:
case YAFFS_BLOCK_STATE_FULL:
- nFree +=
- (dev->nChunksPerBlock - blk->pagesInUse +
- blk->softDeletions);
+ n_free +=
+ (dev->param.chunks_per_block - blk->pages_in_use +
+ blk->soft_del_pages);
break;
default:
break;
}
-
+ blk++;
}
-
- return nFree;
+ return n_free;
}
-int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev)
+int yaffs_get_n_free_chunks(struct yaffs_dev *dev)
{
/* This is what we report to the outside world */
+ int n_free;
+ int n_dirty_caches;
+ int blocks_for_checkpt;
+ int i;
- int nFree;
- int nDirtyCacheChunks;
- int blocksForCheckpoint;
-
-#if 1
- nFree = dev->nFreeChunks;
-#else
- nFree = yaffs_CountFreeChunks(dev);
-#endif
-
- nFree += dev->nDeletedFiles;
+ n_free = dev->n_free_chunks;
+ n_free += dev->n_deleted_files;
- /* Now count the number of dirty chunks in the cache and subtract those */
+ /* Now count and subtract the number of dirty chunks in the cache. */
- {
- int i;
- for (nDirtyCacheChunks = 0, i = 0; i < dev->nShortOpCaches; i++) {
- if (dev->srCache[i].dirty)
- nDirtyCacheChunks++;
- }
+ for (n_dirty_caches = 0, i = 0; i < dev->param.n_caches; i++) {
+ if (dev->cache[i].dirty)
+ n_dirty_caches++;
}
- nFree -= nDirtyCacheChunks;
-
- nFree -= ((dev->nReservedBlocks + 1) * dev->nChunksPerBlock);
+ n_free -= n_dirty_caches;
- /* Now we figure out how much to reserve for the checkpoint and report that... */
- blocksForCheckpoint = dev->nCheckpointReservedBlocks - dev->blocksInCheckpoint;
- if(blocksForCheckpoint < 0)
- blocksForCheckpoint = 0;
+ n_free -=
+ ((dev->param.n_reserved_blocks + 1) * dev->param.chunks_per_block);
- nFree -= (blocksForCheckpoint * dev->nChunksPerBlock);
+ /* Now figure checkpoint space and report that... */
+ blocks_for_checkpt = yaffs_calc_checkpt_blocks_required(dev);
- if (nFree < 0)
- nFree = 0;
+ n_free -= (blocks_for_checkpt * dev->param.chunks_per_block);
- return nFree;
+ if (n_free < 0)
+ n_free = 0;
+ return n_free;
}
-static int yaffs_freeVerificationFailures;
-
-static void yaffs_VerifyFreeChunks(yaffs_Device * dev)
+/*\
+ * Marshalling functions to get loff_t file sizes into aand out of
+ * object headers.
+ */
+void yaffs_oh_size_load(struct yaffs_obj_hdr *oh, loff_t fsize)
{
- int counted;
- int difference;
-
- if(yaffs_SkipVerification(dev))
- return;
-
- counted = yaffs_CountFreeChunks(dev);
-
- difference = dev->nFreeChunks - counted;
-
- if (difference) {
- T(YAFFS_TRACE_ALWAYS,
- (TSTR("Freechunks verification failure %d %d %d" TENDSTR),
- dev->nFreeChunks, counted, difference));
- yaffs_freeVerificationFailures++;
- }
+ oh->file_size_low = (fsize & 0xFFFFFFFF);
+ oh->file_size_high = ((fsize >> 32) & 0xFFFFFFFF);
}
-/*---------------------------------------- YAFFS test code ----------------------*/
-
-#define yaffs_CheckStruct(structure,syze, name) \
- if(sizeof(structure) != syze) \
- { \
- T(YAFFS_TRACE_ALWAYS,(TSTR("%s should be %d but is %d\n" TENDSTR),\
- name,syze,sizeof(structure))); \
- return YAFFS_FAIL; \
- }
-
-static int yaffs_CheckStructures(void)
+loff_t yaffs_oh_to_size(struct yaffs_obj_hdr *oh)
{
-/* yaffs_CheckStruct(yaffs_Tags,8,"yaffs_Tags") */
-/* yaffs_CheckStruct(yaffs_TagsUnion,8,"yaffs_TagsUnion") */
-/* yaffs_CheckStruct(yaffs_Spare,16,"yaffs_Spare") */
-#ifndef CONFIG_YAFFS_TNODE_LIST_DEBUG
- yaffs_CheckStruct(yaffs_Tnode, 2 * YAFFS_NTNODES_LEVEL0, "yaffs_Tnode")
-#endif
- yaffs_CheckStruct(yaffs_ObjectHeader, 512, "yaffs_ObjectHeader")
+ loff_t retval;
+
+ if (~(oh->file_size_high))
+ retval = (((loff_t) oh->file_size_high) << 32) |
+ (((loff_t) oh->file_size_low) & 0xFFFFFFFF);
+ else
+ retval = (loff_t) oh->file_size_low;
- return YAFFS_OK;
+ return retval;
}
diff --git a/fs/yaffs2/yaffs_guts.h b/fs/yaffs2/yaffs_guts.h
index 1f75efd098..e3558c5a6d 100644
--- a/fs/yaffs2/yaffs_guts.h
+++ b/fs/yaffs2/yaffs_guts.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -16,7 +16,6 @@
#ifndef __YAFFS_GUTS_H__
#define __YAFFS_GUTS_H__
-#include "devextras.h"
#include "yportenv.h"
#define YAFFS_OK 1
@@ -24,35 +23,48 @@
/* Give us a Y=0x59,
* Give us an A=0x41,
- * Give us an FF=0xFF
+ * Give us an FF=0xff
* Give us an S=0x53
* And what have we got...
*/
-#define YAFFS_MAGIC 0x5941FF53
+#define YAFFS_MAGIC 0x5941ff53
-#define YAFFS_NTNODES_LEVEL0 16
+/*
+ * Tnodes form a tree with the tnodes in "levels"
+ * Levels greater than 0 hold 8 slots which point to other tnodes.
+ * Those at level 0 hold 16 slots which point to chunks in NAND.
+ *
+ * A maximum level of 8 thust supports files of size up to:
+ *
+ * 2^(3*MAX_LEVEL+4)
+ *
+ * Thus a max level of 8 supports files with up to 2^^28 chunks which gives
+ * a maximum file size of arounf 51Gbytees with 2k chunks.
+ */
+#define YAFFS_NTNODES_LEVEL0 16
#define YAFFS_TNODES_LEVEL0_BITS 4
#define YAFFS_TNODES_LEVEL0_MASK 0xf
-#define YAFFS_NTNODES_INTERNAL (YAFFS_NTNODES_LEVEL0 / 2)
-#define YAFFS_TNODES_INTERNAL_BITS (YAFFS_TNODES_LEVEL0_BITS - 1)
+#define YAFFS_NTNODES_INTERNAL (YAFFS_NTNODES_LEVEL0 / 2)
+#define YAFFS_TNODES_INTERNAL_BITS (YAFFS_TNODES_LEVEL0_BITS - 1)
#define YAFFS_TNODES_INTERNAL_MASK 0x7
-#define YAFFS_TNODES_MAX_LEVEL 6
+#define YAFFS_TNODES_MAX_LEVEL 8
+#define YAFFS_TNODES_MAX_BITS (YAFFS_TNODES_LEVEL0_BITS + \
+ YAFFS_TNODES_INTERNAL_BITS * \
+ YAFFS_TNODES_MAX_LEVEL)
+#define YAFFS_MAX_CHUNK_ID ((1 << YAFFS_TNODES_MAX_BITS) - 1)
-#ifndef CONFIG_YAFFS_NO_YAFFS1
+/* Constants for YAFFS1 mode */
#define YAFFS_BYTES_PER_SPARE 16
#define YAFFS_BYTES_PER_CHUNK 512
#define YAFFS_CHUNK_SIZE_SHIFT 9
#define YAFFS_CHUNKS_PER_BLOCK 32
-#define YAFFS_BYTES_PER_BLOCK (YAFFS_CHUNKS_PER_BLOCK*YAFFS_BYTES_PER_CHUNK)
-#endif
+#define YAFFS_BYTES_PER_BLOCK (YAFFS_CHUNKS_PER_BLOCK*YAFFS_BYTES_PER_CHUNK)
-#define YAFFS_MIN_YAFFS2_CHUNK_SIZE 1024
+#define YAFFS_MIN_YAFFS2_CHUNK_SIZE 1024
#define YAFFS_MIN_YAFFS2_SPARE_SIZE 32
-#define YAFFS_MAX_CHUNK_ID 0x000FFFFF
-#define YAFFS_UNUSED_OBJECT_ID 0x0003FFFF
#define YAFFS_ALLOCATION_NOBJECTS 100
#define YAFFS_ALLOCATION_NTNODES 100
@@ -60,10 +72,12 @@
#define YAFFS_NOBJECT_BUCKETS 256
-
#define YAFFS_OBJECT_SPACE 0x40000
+#define YAFFS_MAX_OBJECT_ID (YAFFS_OBJECT_SPACE - 1)
-#define YAFFS_CHECKPOINT_VERSION 3
+/* Binary data version stamps */
+#define YAFFS_SUMMARY_VERSION 1
+#define YAFFS_CHECKPOINT_VERSION 6
#ifdef CONFIG_YAFFS_UNICODE
#define YAFFS_MAX_NAME_LENGTH 127
@@ -81,16 +95,16 @@
#define YAFFS_OBJECTID_UNLINKED 3
#define YAFFS_OBJECTID_DELETED 4
-/* Sseudo object ids for checkpointing */
-#define YAFFS_OBJECTID_SB_HEADER 0x10
-#define YAFFS_OBJECTID_CHECKPOINT_DATA 0x20
-#define YAFFS_SEQUENCE_CHECKPOINT_DATA 0x21
+/* Fake object Id for summary data */
+#define YAFFS_OBJECTID_SUMMARY 0x10
-/* */
+/* Pseudo object ids for checkpointing */
+#define YAFFS_OBJECTID_CHECKPOINT_DATA 0x20
+#define YAFFS_SEQUENCE_CHECKPOINT_DATA 0x21
#define YAFFS_MAX_SHORT_OP_CACHES 20
-#define YAFFS_N_TEMP_BUFFERS 4
+#define YAFFS_N_TEMP_BUFFERS 6
/* We limit the number attempts at sucessfully saving a chunk of data.
* Small-page devices have 32 pages per block; large-page devices have 64.
@@ -102,142 +116,136 @@
* The range is limited slightly to help distinguish bad numbers from good.
* This also allows us to perhaps in the future use special numbers for
* special purposes.
- * EFFFFF00 allows the allocation of 8 blocks per second (~1Mbytes) for 15 years,
+ * EFFFFF00 allows the allocation of 8 blocks/second (~1Mbytes) for 15 years,
* and is a larger number than the lifetime of a 2GB device.
*/
#define YAFFS_LOWEST_SEQUENCE_NUMBER 0x00001000
-#define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xEFFFFF00
+#define YAFFS_HIGHEST_SEQUENCE_NUMBER 0xefffff00
+
+/* Special sequence number for bad block that failed to be marked bad */
+#define YAFFS_SEQUENCE_BAD_BLOCK 0xffff0000
/* ChunkCache is used for short read/write operations.*/
-typedef struct {
- struct yaffs_ObjectStruct *object;
- int chunkId;
- int lastUse;
+struct yaffs_cache {
+ struct yaffs_obj *object;
+ int chunk_id;
+ int last_use;
int dirty;
- int nBytes; /* Only valid if the cache is dirty */
+ int n_bytes; /* Only valid if the cache is dirty */
int locked; /* Can't push out or flush while locked. */
-#ifdef CONFIG_YAFFS_YAFFS2
- __u8 *data;
-#else
- __u8 data[YAFFS_BYTES_PER_CHUNK];
-#endif
-} yaffs_ChunkCache;
-
-
+ u8 *data;
+};
-/* Tags structures in RAM
- * NB This uses bitfield. Bitfields should not straddle a u32 boundary otherwise
- * the structure size will get blown out.
+/* yaffs1 tags structures in RAM
+ * NB This uses bitfield. Bitfields should not straddle a u32 boundary
+ * otherwise the structure size will get blown out.
*/
-#ifndef CONFIG_YAFFS_NO_YAFFS1
-typedef struct {
- unsigned chunkId:20;
- unsigned serialNumber:2;
- unsigned byteCount:10;
- unsigned objectId:18;
+struct yaffs_tags {
+ unsigned chunk_id:20;
+ unsigned serial_number:2;
+ unsigned n_bytes_lsb:10;
+ unsigned obj_id:18;
unsigned ecc:12;
- unsigned unusedStuff:2;
-
-} yaffs_Tags;
+ unsigned n_bytes_msb:2;
+};
-typedef union {
- yaffs_Tags asTags;
- __u8 asBytes[8];
-} yaffs_TagsUnion;
+union yaffs_tags_union {
+ struct yaffs_tags as_tags;
+ u8 as_bytes[8];
+};
-#endif
/* Stuff used for extended tags in YAFFS2 */
-typedef enum {
+enum yaffs_ecc_result {
YAFFS_ECC_RESULT_UNKNOWN,
YAFFS_ECC_RESULT_NO_ERROR,
YAFFS_ECC_RESULT_FIXED,
YAFFS_ECC_RESULT_UNFIXED
-} yaffs_ECCResult;
+};
-typedef enum {
+enum yaffs_obj_type {
YAFFS_OBJECT_TYPE_UNKNOWN,
YAFFS_OBJECT_TYPE_FILE,
YAFFS_OBJECT_TYPE_SYMLINK,
YAFFS_OBJECT_TYPE_DIRECTORY,
YAFFS_OBJECT_TYPE_HARDLINK,
YAFFS_OBJECT_TYPE_SPECIAL
-} yaffs_ObjectType;
+};
#define YAFFS_OBJECT_TYPE_MAX YAFFS_OBJECT_TYPE_SPECIAL
-typedef struct {
-
- unsigned validMarker0;
- unsigned chunkUsed; /* Status of the chunk: used or unused */
- unsigned objectId; /* If 0 then this is not part of an object (unused) */
- unsigned chunkId; /* If 0 then this is a header, else a data chunk */
- unsigned byteCount; /* Only valid for data chunks */
+struct yaffs_ext_tags {
+ unsigned chunk_used; /* Status of the chunk: used or unused */
+ unsigned obj_id; /* If 0 this is not used */
+ unsigned chunk_id; /* If 0 this is a header, else a data chunk */
+ unsigned n_bytes; /* Only valid for data chunks */
/* The following stuff only has meaning when we read */
- yaffs_ECCResult eccResult;
- unsigned blockBad;
+ enum yaffs_ecc_result ecc_result;
+ unsigned block_bad;
/* YAFFS 1 stuff */
- unsigned chunkDeleted; /* The chunk is marked deleted */
- unsigned serialNumber; /* Yaffs1 2-bit serial number */
+ unsigned is_deleted; /* The chunk is marked deleted */
+ unsigned serial_number; /* Yaffs1 2-bit serial number */
/* YAFFS2 stuff */
- unsigned sequenceNumber; /* The sequence number of this block */
+ unsigned seq_number; /* The sequence number of this block */
/* Extra info if this is an object header (YAFFS2 only) */
- unsigned extraHeaderInfoAvailable; /* There is extra info available if this is not zero */
- unsigned extraParentObjectId; /* The parent object */
- unsigned extraIsShrinkHeader; /* Is it a shrink header? */
- unsigned extraShadows; /* Does this shadow another object? */
-
- yaffs_ObjectType extraObjectType; /* What object type? */
+ unsigned extra_available; /* Extra info available if not zero */
+ unsigned extra_parent_id; /* The parent object */
+ unsigned extra_is_shrink; /* Is it a shrink header? */
+ unsigned extra_shadows; /* Does this shadow another object? */
- unsigned extraFileLength; /* Length if it is a file */
- unsigned extraEquivalentObjectId; /* Equivalent object Id if it is a hard link */
+ enum yaffs_obj_type extra_obj_type; /* What object type? */
- unsigned validMarker1;
-
-} yaffs_ExtendedTags;
+ loff_t extra_file_size; /* Length if it is a file */
+ unsigned extra_equiv_id; /* Equivalent object for a hard link */
+};
/* Spare structure for YAFFS1 */
-typedef struct {
- __u8 tagByte0;
- __u8 tagByte1;
- __u8 tagByte2;
- __u8 tagByte3;
- __u8 pageStatus; /* set to 0 to delete the chunk */
- __u8 blockStatus;
- __u8 tagByte4;
- __u8 tagByte5;
- __u8 ecc1[3];
- __u8 tagByte6;
- __u8 tagByte7;
- __u8 ecc2[3];
-} yaffs_Spare;
+struct yaffs_spare {
+ u8 tb0;
+ u8 tb1;
+ u8 tb2;
+ u8 tb3;
+ u8 page_status; /* set to 0 to delete the chunk */
+ u8 block_status;
+ u8 tb4;
+ u8 tb5;
+ u8 ecc1[3];
+ u8 tb6;
+ u8 tb7;
+ u8 ecc2[3];
+};
/*Special structure for passing through to mtd */
-struct yaffs_NANDSpare {
- yaffs_Spare spare;
+struct yaffs_nand_spare {
+ struct yaffs_spare spare;
int eccres1;
int eccres2;
};
/* Block data in RAM */
-typedef enum {
+enum yaffs_block_state {
YAFFS_BLOCK_STATE_UNKNOWN = 0,
YAFFS_BLOCK_STATE_SCANNING,
- YAFFS_BLOCK_STATE_NEEDS_SCANNING,
- /* The block might have something on it (ie it is allocating or full, perhaps empty)
- * but it needs to be scanned to determine its true state.
- * This state is only valid during yaffs_Scan.
- * NB We tolerate empty because the pre-scanner might be incapable of deciding
- * However, if this state is returned on a YAFFS2 device, then we expect a sequence number
+ /* Being scanned */
+
+ YAFFS_BLOCK_STATE_NEEDS_SCAN,
+ /* The block might have something on it (ie it is allocating or full,
+ * perhaps empty) but it needs to be scanned to determine its true
+ * state.
+ * This state is only valid during scanning.
+ * NB We tolerate empty because the pre-scanner might be incapable of
+ * deciding
+ * However, if this state is returned on a YAFFS2 device,
+ * then we expect a sequence number
*/
YAFFS_BLOCK_STATE_EMPTY,
@@ -247,123 +255,109 @@ typedef enum {
/* This block is partially allocated.
* At least one page holds valid data.
* This is the one currently being used for page
- * allocation. Should never be more than one of these
+ * allocation. Should never be more than one of these.
+ * If a block is only partially allocated at mount it is treated as
+ * full.
*/
YAFFS_BLOCK_STATE_FULL,
/* All the pages in this block have been allocated.
+ * If a block was only partially allocated when mounted we treat
+ * it as fully allocated.
*/
YAFFS_BLOCK_STATE_DIRTY,
- /* All pages have been allocated and deleted.
+ /* The block was full and now all chunks have been deleted.
* Erase me, reuse me.
*/
YAFFS_BLOCK_STATE_CHECKPOINT,
- /* This block is assigned to holding checkpoint data.
- */
+ /* This block is assigned to holding checkpoint data. */
YAFFS_BLOCK_STATE_COLLECTING,
/* This block is being garbage collected */
YAFFS_BLOCK_STATE_DEAD
- /* This block has failed and is not in use */
-} yaffs_BlockState;
+ /* This block has failed and is not in use */
+};
#define YAFFS_NUMBER_OF_BLOCK_STATES (YAFFS_BLOCK_STATE_DEAD + 1)
+struct yaffs_block_info {
+
+ int soft_del_pages:10; /* number of soft deleted pages */
+ int pages_in_use:10; /* number of pages in use */
+ unsigned block_state:4; /* One of the above block states. */
+ /* NB use unsigned because enum is sometimes
+ * an int */
+ u32 needs_retiring:1; /* Data has failed on this block, */
+ /*need to get valid data off and retire*/
+ u32 skip_erased_check:1;/* Skip the erased check on this block */
+ u32 gc_prioritise:1; /* An ECC check or blank check has failed.
+ Block should be prioritised for GC */
+ u32 chunk_error_strikes:3; /* How many times we've had ecc etc
+ failures on this block and tried to reuse it */
+ u32 has_summary:1; /* The block has a summary */
+
+ u32 has_shrink_hdr:1; /* This block has at least one shrink header */
+ u32 seq_number; /* block sequence number for yaffs2 */
-typedef struct {
-
- int softDeletions:10; /* number of soft deleted pages */
- int pagesInUse:10; /* number of pages in use */
- unsigned blockState:4; /* One of the above block states. NB use unsigned because enum is sometimes an int */
- __u32 needsRetiring:1; /* Data has failed on this block, need to get valid data off */
- /* and retire the block. */
- __u32 skipErasedCheck: 1; /* If this is set we can skip the erased check on this block */
- __u32 gcPrioritise: 1; /* An ECC check or blank check has failed on this block.
- It should be prioritised for GC */
- __u32 chunkErrorStrikes:3; /* How many times we've had ecc etc failures on this block and tried to reuse it */
-
-#ifdef CONFIG_YAFFS_YAFFS2
- __u32 hasShrinkHeader:1; /* This block has at least one shrink object header */
- __u32 sequenceNumber; /* block sequence number for yaffs2 */
-#endif
-
-} yaffs_BlockInfo;
+};
/* -------------------------- Object structure -------------------------------*/
/* This is the object structure as stored on NAND */
-typedef struct {
- yaffs_ObjectType type;
+struct yaffs_obj_hdr {
+ enum yaffs_obj_type type;
/* Apply to everything */
- int parentObjectId;
- __u16 sum__NoLongerUsed; /* checksum of name. No longer used */
+ int parent_obj_id;
+ u16 sum_no_longer_used; /* checksum of name. No longer used */
YCHAR name[YAFFS_MAX_NAME_LENGTH + 1];
- /* Thes following apply to directories, files, symlinks - not hard links */
- __u32 yst_mode; /* protection */
+ /* The following apply to all object types except for hard links */
+ u32 yst_mode; /* protection */
-#ifdef CONFIG_YAFFS_WINCE
- __u32 notForWinCE[5];
-#else
- __u32 yst_uid;
- __u32 yst_gid;
- __u32 yst_atime;
- __u32 yst_mtime;
- __u32 yst_ctime;
-#endif
+ u32 yst_uid;
+ u32 yst_gid;
+ u32 yst_atime;
+ u32 yst_mtime;
+ u32 yst_ctime;
/* File size applies to files only */
- int fileSize;
+ u32 file_size_low;
/* Equivalent object id applies to hard links only. */
- int equivalentObjectId;
+ int equiv_id;
/* Alias is for symlinks only. */
YCHAR alias[YAFFS_MAX_ALIAS_LENGTH + 1];
- __u32 yst_rdev; /* device stuff for block and char devices (major/min) */
+ u32 yst_rdev; /* stuff for block and char devices (major/min) */
-#ifdef CONFIG_YAFFS_WINCE
- __u32 win_ctime[2];
- __u32 win_atime[2];
- __u32 win_mtime[2];
- __u32 roomToGrow[4];
-#else
- __u32 roomToGrow[10];
-#endif
-
- int shadowsObject; /* This object header shadows the specified object if > 0 */
+ u32 win_ctime[2];
+ u32 win_atime[2];
+ u32 win_mtime[2];
- /* isShrink applies to object headers written when we shrink the file (ie resize) */
- __u32 isShrink;
+ u32 inband_shadowed_obj_id;
+ u32 inband_is_shrink;
-} yaffs_ObjectHeader;
+ u32 file_size_high;
+ u32 reserved[1];
+ int shadows_obj; /* This object header shadows the
+ specified object if > 0 */
-/*--------------------------- Tnode -------------------------- */
-
-union yaffs_Tnode_union {
-#ifdef CONFIG_YAFFS_TNODE_LIST_DEBUG
- union yaffs_Tnode_union *internal[YAFFS_NTNODES_INTERNAL + 1];
-#else
- union yaffs_Tnode_union *internal[YAFFS_NTNODES_INTERNAL];
-#endif
-/* __u16 level0[YAFFS_NTNODES_LEVEL0]; */
+ /* is_shrink applies to object headers written when wemake a hole. */
+ u32 is_shrink;
};
-typedef union yaffs_Tnode_union yaffs_Tnode;
+/*--------------------------- Tnode -------------------------- */
-struct yaffs_TnodeList_struct {
- struct yaffs_TnodeList_struct *next;
- yaffs_Tnode *tnodes;
+struct yaffs_tnode {
+ struct yaffs_tnode *internal[YAFFS_NTNODES_INTERNAL];
};
-typedef struct yaffs_TnodeList_struct yaffs_TnodeList;
-
/*------------------------ Object -----------------------------*/
/* An object can be one of:
* - a directory (no data, has children links
@@ -372,537 +366,608 @@ typedef struct yaffs_TnodeList_struct yaffs_TnodeList;
* - a hard link
*/
-typedef struct {
- __u32 fileSize;
- __u32 scannedFileSize;
- __u32 shrinkSize;
- int topLevel;
- yaffs_Tnode *top;
-} yaffs_FileStructure;
+struct yaffs_file_var {
+ loff_t file_size;
+ loff_t scanned_size;
+ loff_t shrink_size;
+ int top_level;
+ struct yaffs_tnode *top;
+};
-typedef struct {
+struct yaffs_dir_var {
struct list_head children; /* list of child links */
-} yaffs_DirectoryStructure;
+ struct list_head dirty; /* Entry for list of dirty directories */
+};
-typedef struct {
+struct yaffs_symlink_var {
YCHAR *alias;
-} yaffs_SymLinkStructure;
-
-typedef struct {
- struct yaffs_ObjectStruct *equivalentObject;
- __u32 equivalentObjectId;
-} yaffs_HardLinkStructure;
-
-typedef union {
- yaffs_FileStructure fileVariant;
- yaffs_DirectoryStructure directoryVariant;
- yaffs_SymLinkStructure symLinkVariant;
- yaffs_HardLinkStructure hardLinkVariant;
-} yaffs_ObjectVariant;
-
-struct yaffs_ObjectStruct {
- __u8 deleted:1; /* This should only apply to unlinked files. */
- __u8 softDeleted:1; /* it has also been soft deleted */
- __u8 unlinked:1; /* An unlinked file. The file should be in the unlinked directory.*/
- __u8 fake:1; /* A fake object has no presence on NAND. */
- __u8 renameAllowed:1; /* Some objects are not allowed to be renamed. */
- __u8 unlinkAllowed:1;
- __u8 dirty:1; /* the object needs to be written to flash */
- __u8 valid:1; /* When the file system is being loaded up, this
+};
+
+struct yaffs_hardlink_var {
+ struct yaffs_obj *equiv_obj;
+ u32 equiv_id;
+};
+
+union yaffs_obj_var {
+ struct yaffs_file_var file_variant;
+ struct yaffs_dir_var dir_variant;
+ struct yaffs_symlink_var symlink_variant;
+ struct yaffs_hardlink_var hardlink_variant;
+};
+
+struct yaffs_obj {
+ u8 deleted:1; /* This should only apply to unlinked files. */
+ u8 soft_del:1; /* it has also been soft deleted */
+ u8 unlinked:1; /* An unlinked file.*/
+ u8 fake:1; /* A fake object has no presence on NAND. */
+ u8 rename_allowed:1; /* Some objects cannot be renamed. */
+ u8 unlink_allowed:1;
+ u8 dirty:1; /* the object needs to be written to flash */
+ u8 valid:1; /* When the file system is being loaded up, this
* object might be created before the data
- * is available (ie. file data records appear before the header).
+ * is available
+ * ie. file data chunks encountered before
+ * the header.
*/
- __u8 lazyLoaded:1; /* This object has been lazy loaded and is missing some detail */
+ u8 lazy_loaded:1; /* This object has been lazy loaded and
+ * is missing some detail */
- __u8 deferedFree:1; /* For Linux kernel. Object is removed from NAND, but is
- * still in the inode cache. Free of object is defered.
+ u8 defered_free:1; /* Object is removed from NAND, but is
+ * still in the inode cache.
+ * Free of object is defered.
* until the inode is released.
*/
+ u8 being_created:1; /* This object is still being created
+ * so skip some verification checks. */
+ u8 is_shadowed:1; /* This object is shadowed on the way
+ * to being renamed. */
- __u8 serial; /* serial number of chunk in NAND. Cached here */
- __u16 sum; /* sum of the name to speed searching */
+ u8 xattr_known:1; /* We know if this has object has xattribs
+ * or not. */
+ u8 has_xattr:1; /* This object has xattribs.
+ * Only valid if xattr_known. */
- struct yaffs_DeviceStruct *myDev; /* The device I'm on */
+ u8 serial; /* serial number of chunk in NAND.*/
+ u16 sum; /* sum of the name to speed searching */
- struct list_head hashLink; /* list of objects in this hash bucket */
+ struct yaffs_dev *my_dev; /* The device I'm on */
- struct list_head hardLinks; /* all the equivalent hard linked objects */
+ struct list_head hash_link; /* list of objects in hash bucket */
+
+ struct list_head hard_links; /* hard linked object chain*/
/* directory structure stuff */
/* also used for linking up the free list */
- struct yaffs_ObjectStruct *parent;
+ struct yaffs_obj *parent;
struct list_head siblings;
/* Where's my object header in NAND? */
- int chunkId;
+ int hdr_chunk;
- int nDataChunks; /* Number of data chunks attached to the file. */
+ int n_data_chunks; /* Number of data chunks for this file. */
- __u32 objectId; /* the object id value */
+ u32 obj_id; /* the object id value */
- __u32 yst_mode;
+ u32 yst_mode;
-#ifdef CONFIG_YAFFS_SHORT_NAMES_IN_RAM
- YCHAR shortName[YAFFS_SHORT_NAME_LENGTH + 1];
-#endif
-
-/* XXX U-BOOT XXX */
-/* #ifndef __KERNEL__ */
- __u32 inUse;
-/* #endif */
+ YCHAR short_name[YAFFS_SHORT_NAME_LENGTH + 1];
#ifdef CONFIG_YAFFS_WINCE
- __u32 win_ctime[2];
- __u32 win_mtime[2];
- __u32 win_atime[2];
+ u32 win_ctime[2];
+ u32 win_mtime[2];
+ u32 win_atime[2];
#else
- __u32 yst_uid;
- __u32 yst_gid;
- __u32 yst_atime;
- __u32 yst_mtime;
- __u32 yst_ctime;
+ u32 yst_uid;
+ u32 yst_gid;
+ u32 yst_atime;
+ u32 yst_mtime;
+ u32 yst_ctime;
#endif
- __u32 yst_rdev;
+ u32 yst_rdev;
-/* XXX U-BOOT XXX */
-/* #ifndef __KERNEL__ */
- struct inode *myInode;
-/* #endif */
+ void *my_inode;
- yaffs_ObjectType variantType;
+ enum yaffs_obj_type variant_type;
- yaffs_ObjectVariant variant;
+ union yaffs_obj_var variant;
};
-typedef struct yaffs_ObjectStruct yaffs_Object;
-
-struct yaffs_ObjectList_struct {
- yaffs_Object *objects;
- struct yaffs_ObjectList_struct *next;
-};
-
-typedef struct yaffs_ObjectList_struct yaffs_ObjectList;
-
-typedef struct {
+struct yaffs_obj_bucket {
struct list_head list;
int count;
-} yaffs_ObjectBucket;
-
+};
-/* yaffs_CheckpointObject holds the definition of an object as dumped
+/* yaffs_checkpt_obj holds the definition of an object as dumped
* by checkpointing.
*/
-typedef struct {
- int structType;
- __u32 objectId;
- __u32 parentId;
- int chunkId;
-
- yaffs_ObjectType variantType:3;
- __u8 deleted:1;
- __u8 softDeleted:1;
- __u8 unlinked:1;
- __u8 fake:1;
- __u8 renameAllowed:1;
- __u8 unlinkAllowed:1;
- __u8 serial;
-
- int nDataChunks;
- __u32 fileSizeOrEquivalentObjectId;
-
-}yaffs_CheckpointObject;
+struct yaffs_checkpt_obj {
+ int struct_type;
+ u32 obj_id;
+ u32 parent_id;
+ int hdr_chunk;
+ enum yaffs_obj_type variant_type:3;
+ u8 deleted:1;
+ u8 soft_del:1;
+ u8 unlinked:1;
+ u8 fake:1;
+ u8 rename_allowed:1;
+ u8 unlink_allowed:1;
+ u8 serial;
+ int n_data_chunks;
+ loff_t size_or_equiv_obj;
+};
/*--------------------- Temporary buffers ----------------
*
- * These are chunk-sized working buffers. Each device has a few
+ * These are chunk-sized working buffers. Each device has a few.
*/
-typedef struct {
- __u8 *buffer;
- int line; /* track from whence this buffer was allocated */
- int maxLine;
-} yaffs_TempBuffer;
+struct yaffs_buffer {
+ u8 *buffer;
+ int in_use;
+};
/*----------------- Device ---------------------------------*/
-struct yaffs_DeviceStruct {
- struct list_head devList;
- const char *name;
-
- /* Entry parameters set up way early. Yaffs sets up the rest.*/
- int nDataBytesPerChunk; /* Should be a power of 2 >= 512 */
- int nChunksPerBlock; /* does not need to be a power of 2 */
- int nBytesPerSpare; /* spare area size */
- int startBlock; /* Start block we're allowed to use */
- int endBlock; /* End block we're allowed to use */
- int nReservedBlocks; /* We want this tuneable so that we can reduce */
- /* reserved blocks on NOR and RAM. */
-
-
- /* Stuff used by the shared space checkpointing mechanism */
- /* If this value is zero, then this mechanism is disabled */
-
- int nCheckpointReservedBlocks; /* Blocks to reserve for checkpoint data */
-
-
+struct yaffs_param {
+ const YCHAR *name;
+ /*
+ * Entry parameters set up way early. Yaffs sets up the rest.
+ * The structure should be zeroed out before use so that unused
+ * and defualt values are zero.
+ */
- int nShortOpCaches; /* If <= 0, then short op caching is disabled, else
- * the number of short op caches (don't use too many)
+ int inband_tags; /* Use unband tags */
+ u32 total_bytes_per_chunk; /* Should be >= 512, does not need to
+ be a power of 2 */
+ int chunks_per_block; /* does not need to be a power of 2 */
+ int spare_bytes_per_chunk; /* spare area size */
+ int start_block; /* Start block we're allowed to use */
+ int end_block; /* End block we're allowed to use */
+ int n_reserved_blocks; /* Tuneable so that we can reduce
+ * reserved blocks on NOR and RAM. */
+
+ int n_caches; /* If <= 0, then short op caching is disabled,
+ * else the number of short op caches.
*/
+ int use_nand_ecc; /* Flag to decide whether or not to use
+ * NAND driver ECC on data (yaffs1) */
+ int tags_9bytes; /* Use 9 byte tags */
+ int no_tags_ecc; /* Flag to decide whether or not to do ECC
+ * on packed tags (yaffs2) */
- int useHeaderFileSize; /* Flag to determine if we should use file sizes from the header */
-
- int useNANDECC; /* Flag to decide whether or not to use NANDECC */
+ int is_yaffs2; /* Use yaffs2 mode on this device */
- void *genericDevice; /* Pointer to device context
- * On an mtd this holds the mtd pointer.
- */
- void *superBlock;
-
- /* NAND access functions (Must be set before calling YAFFS)*/
-
- int (*writeChunkToNAND) (struct yaffs_DeviceStruct * dev,
- int chunkInNAND, const __u8 * data,
- const yaffs_Spare * spare);
- int (*readChunkFromNAND) (struct yaffs_DeviceStruct * dev,
- int chunkInNAND, __u8 * data,
- yaffs_Spare * spare);
- int (*eraseBlockInNAND) (struct yaffs_DeviceStruct * dev,
- int blockInNAND);
- int (*initialiseNAND) (struct yaffs_DeviceStruct * dev);
-
-#ifdef CONFIG_YAFFS_YAFFS2
- int (*writeChunkWithTagsToNAND) (struct yaffs_DeviceStruct * dev,
- int chunkInNAND, const __u8 * data,
- const yaffs_ExtendedTags * tags);
- int (*readChunkWithTagsFromNAND) (struct yaffs_DeviceStruct * dev,
- int chunkInNAND, __u8 * data,
- yaffs_ExtendedTags * tags);
- int (*markNANDBlockBad) (struct yaffs_DeviceStruct * dev, int blockNo);
- int (*queryNANDBlock) (struct yaffs_DeviceStruct * dev, int blockNo,
- yaffs_BlockState * state, int *sequenceNumber);
-#endif
+ int empty_lost_n_found; /* Auto-empty lost+found directory on mount */
- int isYaffs2;
+ int refresh_period; /* How often to check for a block refresh */
- /* The removeObjectCallback function must be supplied by OS flavours that
- * need it. The Linux kernel does not use this, but yaffs direct does use
- * it to implement the faster readdir
+ /* Checkpoint control. Can be set before or after initialisation */
+ u8 skip_checkpt_rd;
+ u8 skip_checkpt_wr;
+
+ int enable_xattr; /* Enable xattribs */
+
+ /* NAND access functions (Must be set before calling YAFFS) */
+
+ int (*write_chunk_fn) (struct yaffs_dev *dev,
+ int nand_chunk, const u8 *data,
+ const struct yaffs_spare *spare);
+ int (*read_chunk_fn) (struct yaffs_dev *dev,
+ int nand_chunk, u8 *data,
+ struct yaffs_spare *spare);
+ int (*erase_fn) (struct yaffs_dev *dev, int flash_block);
+ int (*initialise_flash_fn) (struct yaffs_dev *dev);
+ int (*deinitialise_flash_fn) (struct yaffs_dev *dev);
+
+ /* yaffs2 mode functions */
+ int (*write_chunk_tags_fn) (struct yaffs_dev *dev,
+ int nand_chunk, const u8 *data,
+ const struct yaffs_ext_tags *tags);
+ int (*read_chunk_tags_fn) (struct yaffs_dev *dev,
+ int nand_chunk, u8 *data,
+ struct yaffs_ext_tags *tags);
+ int (*bad_block_fn) (struct yaffs_dev *dev, int block_no);
+ int (*query_block_fn) (struct yaffs_dev *dev, int block_no,
+ enum yaffs_block_state *state,
+ u32 *seq_number);
+
+ /* The remove_obj_fn function must be supplied by OS flavours that
+ * need it.
+ * yaffs direct uses it to implement the faster readdir.
+ * Linux uses it to protect the directory during unlocking.
*/
- void (*removeObjectCallback)(struct yaffs_ObjectStruct *obj);
+ void (*remove_obj_fn) (struct yaffs_obj *obj);
- /* Callback to mark the superblock dirsty */
- void (*markSuperBlockDirty)(void * superblock);
+ /* Callback to mark the superblock dirty */
+ void (*sb_dirty_fn) (struct yaffs_dev *dev);
- int wideTnodesDisabled; /* Set to disable wide tnodes */
+ /* Callback to control garbage collection. */
+ unsigned (*gc_control) (struct yaffs_dev *dev);
+ /* Debug control flags. Don't use unless you know what you're doing */
+ int use_header_file_size; /* Flag to determine if we should use
+ * file sizes from the header */
+ int disable_lazy_load; /* Disable lazy loading on this device */
+ int wide_tnodes_disabled; /* Set to disable wide tnodes */
+ int disable_soft_del; /* yaffs 1 only: Set to disable the use of
+ * softdeletion. */
- /* End of stuff that must be set before initialisation. */
+ int defered_dir_update; /* Set to defer directory updates */
- /* Checkpoint control. Can be set before or after initialisation */
- __u8 skipCheckpointRead;
- __u8 skipCheckpointWrite;
+#ifdef CONFIG_YAFFS_AUTO_UNICODE
+ int auto_unicode;
+#endif
+ int always_check_erased; /* Force chunk erased check always on */
- /* Runtime parameters. Set up by YAFFS. */
+ int disable_summary;
- __u16 chunkGroupBits; /* 0 for devices <= 32MB. else log2(nchunks) - 16 */
- __u16 chunkGroupSize; /* == 2^^chunkGroupBits */
+ int max_objects; /*
+ * Set to limit the number of objects created.
+ * 0 = no limit.
+ */
+};
- /* Stuff to support wide tnodes */
- __u32 tnodeWidth;
- __u32 tnodeMask;
+struct yaffs_dev {
+ struct yaffs_param param;
- /* Stuff to support various file offses to chunk/offset translations */
- /* "Crumbs" for nDataBytesPerChunk not being a power of 2 */
- __u32 crumbMask;
- __u32 crumbShift;
- __u32 crumbsPerChunk;
+ /* Context storage. Holds extra OS specific data for this device */
- /* Straight shifting for nDataBytesPerChunk being a power of 2 */
- __u32 chunkShift;
- __u32 chunkMask;
+ void *os_context;
+ void *driver_context;
+ struct list_head dev_list;
-/* XXX U-BOOT XXX */
-#if 0
-#ifndef __KERNEL__
+ /* Runtime parameters. Set up by YAFFS. */
+ int data_bytes_per_chunk;
- struct semaphore sem; /* Semaphore for waiting on erasure.*/
- struct semaphore grossLock; /* Gross locking semaphore */
- void (*putSuperFunc) (struct super_block * sb);
-#endif
-#endif
- __u8 *spareBuffer; /* For mtdif2 use. Don't know the size of the buffer
- * at compile time so we have to allocate it.
+ /* Non-wide tnode stuff */
+ u16 chunk_grp_bits; /* Number of bits that need to be resolved if
+ * the tnodes are not wide enough.
*/
+ u16 chunk_grp_size; /* == 2^^chunk_grp_bits */
- int isMounted;
+ /* Stuff to support wide tnodes */
+ u32 tnode_width;
+ u32 tnode_mask;
+ u32 tnode_size;
- int isCheckpointed;
+ /* Stuff for figuring out file offset to chunk conversions */
+ u32 chunk_shift; /* Shift value */
+ u32 chunk_div; /* Divisor after shifting: 1 for 2^n sizes */
+ u32 chunk_mask; /* Mask to use for power-of-2 case */
+ int is_mounted;
+ int read_only;
+ int is_checkpointed;
/* Stuff to support block offsetting to support start block zero */
- int internalStartBlock;
- int internalEndBlock;
- int blockOffset;
- int chunkOffset;
-
+ int internal_start_block;
+ int internal_end_block;
+ int block_offset;
+ int chunk_offset;
/* Runtime checkpointing stuff */
- int checkpointPageSequence; /* running sequence number of checkpoint pages */
- int checkpointByteCount;
- int checkpointByteOffset;
- __u8 *checkpointBuffer;
- int checkpointOpenForWrite;
- int blocksInCheckpoint;
- int checkpointCurrentChunk;
- int checkpointCurrentBlock;
- int checkpointNextBlock;
- int *checkpointBlockList;
- int checkpointMaxBlocks;
- __u32 checkpointSum;
- __u32 checkpointXor;
+ int checkpt_page_seq; /* running sequence number of checkpt pages */
+ int checkpt_byte_count;
+ int checkpt_byte_offs;
+ u8 *checkpt_buffer;
+ int checkpt_open_write;
+ int blocks_in_checkpt;
+ int checkpt_cur_chunk;
+ int checkpt_cur_block;
+ int checkpt_next_block;
+ int *checkpt_block_list;
+ int checkpt_max_blocks;
+ u32 checkpt_sum;
+ u32 checkpt_xor;
+
+ int checkpoint_blocks_required; /* Number of blocks needed to store
+ * current checkpoint set */
/* Block Info */
- yaffs_BlockInfo *blockInfo;
- __u8 *chunkBits; /* bitmap of chunks in use */
- unsigned blockInfoAlt:1; /* was allocated using alternative strategy */
- unsigned chunkBitsAlt:1; /* was allocated using alternative strategy */
- int chunkBitmapStride; /* Number of bytes of chunkBits per block.
- * Must be consistent with nChunksPerBlock.
+ struct yaffs_block_info *block_info;
+ u8 *chunk_bits; /* bitmap of chunks in use */
+ unsigned block_info_alt:1; /* allocated using alternative alloc */
+ unsigned chunk_bits_alt:1; /* allocated using alternative alloc */
+ int chunk_bit_stride; /* Number of bytes of chunk_bits per block.
+ * Must be consistent with chunks_per_block.
*/
- int nErasedBlocks;
- int allocationBlock; /* Current block being allocated off */
- __u32 allocationPage;
- int allocationBlockFinder; /* Used to search for next allocation block */
-
- /* Runtime state */
- int nTnodesCreated;
- yaffs_Tnode *freeTnodes;
- int nFreeTnodes;
- yaffs_TnodeList *allocatedTnodeList;
-
- int isDoingGC;
-
- int nObjectsCreated;
- yaffs_Object *freeObjects;
- int nFreeObjects;
+ int n_erased_blocks;
+ int alloc_block; /* Current block being allocated off */
+ u32 alloc_page;
+ int alloc_block_finder; /* Used to search for next allocation block */
- yaffs_ObjectList *allocatedObjectList;
+ /* Object and Tnode memory management */
+ void *allocator;
+ int n_obj;
+ int n_tnodes;
- yaffs_ObjectBucket objectBucket[YAFFS_NOBJECT_BUCKETS];
+ int n_hardlinks;
- int nFreeChunks;
+ struct yaffs_obj_bucket obj_bucket[YAFFS_NOBJECT_BUCKETS];
+ u32 bucket_finder;
- int currentDirtyChecker; /* Used to find current dirtiest block */
+ int n_free_chunks;
- __u32 *gcCleanupList; /* objects to delete at the end of a GC. */
- int nonAggressiveSkip; /* GC state/mode */
+ /* Garbage collection control */
+ u32 *gc_cleanup_list; /* objects to delete at the end of a GC. */
+ u32 n_clean_ups;
- /* Statistcs */
- int nPageWrites;
- int nPageReads;
- int nBlockErasures;
- int nErasureFailures;
- int nGCCopies;
- int garbageCollections;
- int passiveGarbageCollections;
- int nRetriedWrites;
- int nRetiredBlocks;
- int eccFixed;
- int eccUnfixed;
- int tagsEccFixed;
- int tagsEccUnfixed;
- int nDeletions;
- int nUnmarkedDeletions;
-
- int hasPendingPrioritisedGCs; /* We think this device might have pending prioritised gcs */
+ unsigned has_pending_prioritised_gc; /* We think this device might
+ have pending prioritised gcs */
+ unsigned gc_disable;
+ unsigned gc_block_finder;
+ unsigned gc_dirtiest;
+ unsigned gc_pages_in_use;
+ unsigned gc_not_done;
+ unsigned gc_block;
+ unsigned gc_chunk;
+ unsigned gc_skip;
+ struct yaffs_summary_tags *gc_sum_tags;
/* Special directories */
- yaffs_Object *rootDir;
- yaffs_Object *lostNFoundDir;
-
- /* Buffer areas for storing data to recover from write failures TODO
- * __u8 bufferedData[YAFFS_CHUNKS_PER_BLOCK][YAFFS_BYTES_PER_CHUNK];
- * yaffs_Spare bufferedSpare[YAFFS_CHUNKS_PER_BLOCK];
- */
-
- int bufferedBlock; /* Which block is buffered here? */
- int doingBufferedBlockRewrite;
+ struct yaffs_obj *root_dir;
+ struct yaffs_obj *lost_n_found;
+
+ int buffered_block; /* Which block is buffered here? */
+ int doing_buffered_block_rewrite;
+
+ struct yaffs_cache *cache;
+ int cache_last_use;
+
+ /* Stuff for background deletion and unlinked files. */
+ struct yaffs_obj *unlinked_dir; /* Directory where unlinked and deleted
+ files live. */
+ struct yaffs_obj *del_dir; /* Directory where deleted objects are
+ sent to disappear. */
+ struct yaffs_obj *unlinked_deletion; /* Current file being
+ background deleted. */
+ int n_deleted_files; /* Count of files awaiting deletion; */
+ int n_unlinked_files; /* Count of unlinked files. */
+ int n_bg_deletions; /* Count of background deletions. */
+
+ /* Temporary buffer management */
+ struct yaffs_buffer temp_buffer[YAFFS_N_TEMP_BUFFERS];
+ int max_temp;
+ int temp_in_use;
+ int unmanaged_buffer_allocs;
+ int unmanaged_buffer_deallocs;
- yaffs_ChunkCache *srCache;
- int srLastUse;
-
- int cacheHits;
+ /* yaffs2 runtime stuff */
+ unsigned seq_number; /* Sequence number of currently
+ allocating block */
+ unsigned oldest_dirty_seq;
+ unsigned oldest_dirty_block;
+
+ /* Block refreshing */
+ int refresh_skip; /* A skip down counter.
+ * Refresh happens when this gets to zero. */
+
+ /* Dirty directory handling */
+ struct list_head dirty_dirs; /* List of dirty directories */
+
+ /* Summary */
+ int chunks_per_summary;
+ struct yaffs_summary_tags *sum_tags;
+
+ /* Statistics */
+ u32 n_page_writes;
+ u32 n_page_reads;
+ u32 n_erasures;
+ u32 n_erase_failures;
+ u32 n_gc_copies;
+ u32 all_gcs;
+ u32 passive_gc_count;
+ u32 oldest_dirty_gc_count;
+ u32 n_gc_blocks;
+ u32 bg_gcs;
+ u32 n_retried_writes;
+ u32 n_retired_blocks;
+ u32 n_ecc_fixed;
+ u32 n_ecc_unfixed;
+ u32 n_tags_ecc_fixed;
+ u32 n_tags_ecc_unfixed;
+ u32 n_deletions;
+ u32 n_unmarked_deletions;
+ u32 refresh_count;
+ u32 cache_hits;
+ u32 tags_used;
+ u32 summary_used;
- /* Stuff for background deletion and unlinked files.*/
- yaffs_Object *unlinkedDir; /* Directory where unlinked and deleted files live. */
- yaffs_Object *deletedDir; /* Directory where deleted objects are sent to disappear. */
- yaffs_Object *unlinkedDeletion; /* Current file being background deleted.*/
- int nDeletedFiles; /* Count of files awaiting deletion;*/
- int nUnlinkedFiles; /* Count of unlinked files. */
- int nBackgroundDeletions; /* Count of background deletions. */
+};
+/* The CheckpointDevice structure holds the device information that changes
+ *at runtime and must be preserved over unmount/mount cycles.
+ */
+struct yaffs_checkpt_dev {
+ int struct_type;
+ int n_erased_blocks;
+ int alloc_block; /* Current block being allocated off */
+ u32 alloc_page;
+ int n_free_chunks;
- yaffs_TempBuffer tempBuffer[YAFFS_N_TEMP_BUFFERS];
- int maxTemp;
- int unmanagedTempAllocations;
- int unmanagedTempDeallocations;
+ int n_deleted_files; /* Count of files awaiting deletion; */
+ int n_unlinked_files; /* Count of unlinked files. */
+ int n_bg_deletions; /* Count of background deletions. */
/* yaffs2 runtime stuff */
- unsigned sequenceNumber; /* Sequence number of currently allocating block */
- unsigned oldestDirtySequence;
+ unsigned seq_number; /* Sequence number of currently
+ * allocating block */
};
-typedef struct yaffs_DeviceStruct yaffs_Device;
-
-/* The static layout of bllock usage etc is stored in the super block header */
-typedef struct {
- int StructType;
- int version;
- int checkpointStartBlock;
- int checkpointEndBlock;
- int startBlock;
- int endBlock;
- int rfu[100];
-} yaffs_SuperBlockHeader;
-
-/* The CheckpointDevice structure holds the device information that changes at runtime and
- * must be preserved over unmount/mount cycles.
- */
-typedef struct {
- int structType;
- int nErasedBlocks;
- int allocationBlock; /* Current block being allocated off */
- __u32 allocationPage;
- int nFreeChunks;
+struct yaffs_checkpt_validity {
+ int struct_type;
+ u32 magic;
+ u32 version;
+ u32 head;
+};
- int nDeletedFiles; /* Count of files awaiting deletion;*/
- int nUnlinkedFiles; /* Count of unlinked files. */
- int nBackgroundDeletions; /* Count of background deletions. */
+struct yaffs_shadow_fixer {
+ int obj_id;
+ int shadowed_id;
+ struct yaffs_shadow_fixer *next;
+};
- /* yaffs2 runtime stuff */
- unsigned sequenceNumber; /* Sequence number of currently allocating block */
- unsigned oldestDirtySequence;
-
-} yaffs_CheckpointDevice;
-
-
-typedef struct {
- int structType;
- __u32 magic;
- __u32 version;
- __u32 head;
-} yaffs_CheckpointValidity;
-
-/* Function to manipulate block info */
-static Y_INLINE yaffs_BlockInfo *yaffs_GetBlockInfo(yaffs_Device * dev, int blk)
-{
- if (blk < dev->internalStartBlock || blk > dev->internalEndBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>> yaffs: getBlockInfo block %d is not valid" TENDSTR),
- blk));
- YBUG();
- }
- return &dev->blockInfo[blk - dev->internalStartBlock];
-}
+/* Structure for doing xattr modifications */
+struct yaffs_xattr_mod {
+ int set; /* If 0 then this is a deletion */
+ const YCHAR *name;
+ const void *data;
+ int size;
+ int flags;
+ int result;
+};
/*----------------------- YAFFS Functions -----------------------*/
-int yaffs_GutsInitialise(yaffs_Device * dev);
-void yaffs_Deinitialise(yaffs_Device * dev);
+int yaffs_guts_initialise(struct yaffs_dev *dev);
+void yaffs_deinitialise(struct yaffs_dev *dev);
-int yaffs_GetNumberOfFreeChunks(yaffs_Device * dev);
+int yaffs_get_n_free_chunks(struct yaffs_dev *dev);
-int yaffs_RenameObject(yaffs_Object * oldDir, const YCHAR * oldName,
- yaffs_Object * newDir, const YCHAR * newName);
+int yaffs_rename_obj(struct yaffs_obj *old_dir, const YCHAR * old_name,
+ struct yaffs_obj *new_dir, const YCHAR * new_name);
-int yaffs_Unlink(yaffs_Object * dir, const YCHAR * name);
-int yaffs_DeleteFile(yaffs_Object * obj);
+int yaffs_unlinker(struct yaffs_obj *dir, const YCHAR * name);
+int yaffs_del_obj(struct yaffs_obj *obj);
-int yaffs_GetObjectName(yaffs_Object * obj, YCHAR * name, int buffSize);
-int yaffs_GetObjectFileLength(yaffs_Object * obj);
-int yaffs_GetObjectInode(yaffs_Object * obj);
-unsigned yaffs_GetObjectType(yaffs_Object * obj);
-int yaffs_GetObjectLinkCount(yaffs_Object * obj);
-
-int yaffs_SetAttributes(yaffs_Object * obj, struct iattr *attr);
-int yaffs_GetAttributes(yaffs_Object * obj, struct iattr *attr);
+int yaffs_get_obj_name(struct yaffs_obj *obj, YCHAR * name, int buffer_size);
+loff_t yaffs_get_obj_length(struct yaffs_obj *obj);
+int yaffs_get_obj_inode(struct yaffs_obj *obj);
+unsigned yaffs_get_obj_type(struct yaffs_obj *obj);
+int yaffs_get_obj_link_count(struct yaffs_obj *obj);
/* File operations */
-int yaffs_ReadDataFromFile(yaffs_Object * obj, __u8 * buffer, loff_t offset,
- int nBytes);
-int yaffs_WriteDataToFile(yaffs_Object * obj, const __u8 * buffer, loff_t offset,
- int nBytes, int writeThrough);
-int yaffs_ResizeFile(yaffs_Object * obj, loff_t newSize);
+int yaffs_file_rd(struct yaffs_obj *obj, u8 * buffer, loff_t offset,
+ int n_bytes);
+int yaffs_wr_file(struct yaffs_obj *obj, const u8 * buffer, loff_t offset,
+ int n_bytes, int write_trhrough);
+int yaffs_resize_file(struct yaffs_obj *obj, loff_t new_size);
+
+struct yaffs_obj *yaffs_create_file(struct yaffs_obj *parent,
+ const YCHAR *name, u32 mode, u32 uid,
+ u32 gid);
-yaffs_Object *yaffs_MknodFile(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid);
-int yaffs_FlushFile(yaffs_Object * obj, int updateTime);
+int yaffs_flush_file(struct yaffs_obj *obj, int update_time, int data_sync);
/* Flushing and checkpointing */
-void yaffs_FlushEntireDeviceCache(yaffs_Device *dev);
+void yaffs_flush_whole_cache(struct yaffs_dev *dev);
-int yaffs_CheckpointSave(yaffs_Device *dev);
-int yaffs_CheckpointRestore(yaffs_Device *dev);
+int yaffs_checkpoint_save(struct yaffs_dev *dev);
+int yaffs_checkpoint_restore(struct yaffs_dev *dev);
/* Directory operations */
-yaffs_Object *yaffs_MknodDirectory(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid);
-yaffs_Object *yaffs_FindObjectByName(yaffs_Object * theDir, const YCHAR * name);
-int yaffs_ApplyToDirectoryChildren(yaffs_Object * theDir,
- int (*fn) (yaffs_Object *));
-
-yaffs_Object *yaffs_FindObjectByNumber(yaffs_Device * dev, __u32 number);
+struct yaffs_obj *yaffs_create_dir(struct yaffs_obj *parent, const YCHAR *name,
+ u32 mode, u32 uid, u32 gid);
+struct yaffs_obj *yaffs_find_by_name(struct yaffs_obj *the_dir,
+ const YCHAR *name);
+struct yaffs_obj *yaffs_find_by_number(struct yaffs_dev *dev, u32 number);
/* Link operations */
-yaffs_Object *yaffs_Link(yaffs_Object * parent, const YCHAR * name,
- yaffs_Object * equivalentObject);
+struct yaffs_obj *yaffs_link_obj(struct yaffs_obj *parent, const YCHAR *name,
+ struct yaffs_obj *equiv_obj);
-yaffs_Object *yaffs_GetEquivalentObject(yaffs_Object * obj);
+struct yaffs_obj *yaffs_get_equivalent_obj(struct yaffs_obj *obj);
/* Symlink operations */
-yaffs_Object *yaffs_MknodSymLink(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid,
- const YCHAR * alias);
-YCHAR *yaffs_GetSymlinkAlias(yaffs_Object * obj);
+struct yaffs_obj *yaffs_create_symlink(struct yaffs_obj *parent,
+ const YCHAR *name, u32 mode, u32 uid,
+ u32 gid, const YCHAR *alias);
+YCHAR *yaffs_get_symlink_alias(struct yaffs_obj *obj);
/* Special inodes (fifos, sockets and devices) */
-yaffs_Object *yaffs_MknodSpecial(yaffs_Object * parent, const YCHAR * name,
- __u32 mode, __u32 uid, __u32 gid, __u32 rdev);
+struct yaffs_obj *yaffs_create_special(struct yaffs_obj *parent,
+ const YCHAR *name, u32 mode, u32 uid,
+ u32 gid, u32 rdev);
+
+int yaffs_set_xattrib(struct yaffs_obj *obj, const YCHAR *name,
+ const void *value, int size, int flags);
+int yaffs_get_xattrib(struct yaffs_obj *obj, const YCHAR *name, void *value,
+ int size);
+int yaffs_list_xattrib(struct yaffs_obj *obj, char *buffer, int size);
+int yaffs_remove_xattrib(struct yaffs_obj *obj, const YCHAR *name);
/* Special directories */
-yaffs_Object *yaffs_Root(yaffs_Device * dev);
-yaffs_Object *yaffs_LostNFound(yaffs_Device * dev);
+struct yaffs_obj *yaffs_root(struct yaffs_dev *dev);
+struct yaffs_obj *yaffs_lost_n_found(struct yaffs_dev *dev);
-#ifdef CONFIG_YAFFS_WINCE
-/* CONFIG_YAFFS_WINCE special stuff */
-void yfsd_WinFileTimeNow(__u32 target[2]);
-#endif
+void yaffs_handle_defered_free(struct yaffs_obj *obj);
-/* XXX U-BOOT XXX */
-#if 0
-#ifndef __KERNEL__
-void yaffs_HandleDeferedFree(yaffs_Object * obj);
-#endif
-#endif
+void yaffs_update_dirty_dirs(struct yaffs_dev *dev);
-/* Debug dump */
-int yaffs_DumpObject(yaffs_Object * obj);
+int yaffs_bg_gc(struct yaffs_dev *dev, unsigned urgency);
-void yaffs_GutsTest(yaffs_Device * dev);
+/* Debug dump */
+int yaffs_dump_obj(struct yaffs_obj *obj);
+
+void yaffs_guts_test(struct yaffs_dev *dev);
+
+/* A few useful functions to be used within the core files*/
+void yaffs_chunk_del(struct yaffs_dev *dev, int chunk_id, int mark_flash,
+ int lyn);
+int yaffs_check_ff(u8 *buffer, int n_bytes);
+void yaffs_handle_chunk_error(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi);
+
+u8 *yaffs_get_temp_buffer(struct yaffs_dev *dev);
+void yaffs_release_temp_buffer(struct yaffs_dev *dev, u8 *buffer);
+
+struct yaffs_obj *yaffs_find_or_create_by_number(struct yaffs_dev *dev,
+ int number,
+ enum yaffs_obj_type type);
+int yaffs_put_chunk_in_file(struct yaffs_obj *in, int inode_chunk,
+ int nand_chunk, int in_scan);
+void yaffs_set_obj_name(struct yaffs_obj *obj, const YCHAR *name);
+void yaffs_set_obj_name_from_oh(struct yaffs_obj *obj,
+ const struct yaffs_obj_hdr *oh);
+void yaffs_add_obj_to_dir(struct yaffs_obj *directory, struct yaffs_obj *obj);
+YCHAR *yaffs_clone_str(const YCHAR *str);
+void yaffs_link_fixup(struct yaffs_dev *dev, struct list_head *hard_list);
+void yaffs_block_became_dirty(struct yaffs_dev *dev, int block_no);
+int yaffs_update_oh(struct yaffs_obj *in, const YCHAR *name,
+ int force, int is_shrink, int shadows,
+ struct yaffs_xattr_mod *xop);
+void yaffs_handle_shadowed_obj(struct yaffs_dev *dev, int obj_id,
+ int backward_scanning);
+int yaffs_check_alloc_available(struct yaffs_dev *dev, int n_chunks);
+struct yaffs_tnode *yaffs_get_tnode(struct yaffs_dev *dev);
+struct yaffs_tnode *yaffs_add_find_tnode_0(struct yaffs_dev *dev,
+ struct yaffs_file_var *file_struct,
+ u32 chunk_id,
+ struct yaffs_tnode *passed_tn);
+
+int yaffs_do_file_wr(struct yaffs_obj *in, const u8 *buffer, loff_t offset,
+ int n_bytes, int write_trhrough);
+void yaffs_resize_file_down(struct yaffs_obj *obj, loff_t new_size);
+void yaffs_skip_rest_of_block(struct yaffs_dev *dev);
+
+int yaffs_count_free_chunks(struct yaffs_dev *dev);
+
+struct yaffs_tnode *yaffs_find_tnode_0(struct yaffs_dev *dev,
+ struct yaffs_file_var *file_struct,
+ u32 chunk_id);
+
+u32 yaffs_get_group_base(struct yaffs_dev *dev, struct yaffs_tnode *tn,
+ unsigned pos);
+
+int yaffs_is_non_empty_dir(struct yaffs_obj *obj);
+
+void yaffs_addr_to_chunk(struct yaffs_dev *dev, loff_t addr,
+ int *chunk_out, u32 *offset_out);
+/*
+ * Marshalling functions to get loff_t file sizes into aand out of
+ * object headers.
+ */
+void yaffs_oh_size_load(struct yaffs_obj_hdr *oh, loff_t fsize);
+loff_t yaffs_oh_to_size(struct yaffs_obj_hdr *oh);
+loff_t yaffs_max_file_size(struct yaffs_dev *dev);
-/* A few useful functions */
-void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
-void yaffs_DeleteChunk(yaffs_Device * dev, int chunkId, int markNAND, int lyn);
-int yaffs_CheckFF(__u8 * buffer, int nBytes);
-void yaffs_HandleChunkError(yaffs_Device *dev, yaffs_BlockInfo *bi);
#endif
diff --git a/fs/yaffs2/yaffs_list.h b/fs/yaffs2/yaffs_list.h
new file mode 100644
index 0000000000..a7afaea27b
--- /dev/null
+++ b/fs/yaffs2/yaffs_list.h
@@ -0,0 +1,126 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+/*
+ * This file is just holds extra declarations of macros that would normally
+ * be providesd in the Linux kernel. These macros have been written from
+ * scratch but are functionally equivalent to the Linux ones.
+ *
+ */
+
+#ifndef __YAFFS_LIST_H__
+#define __YAFFS_LIST_H__
+
+
+/*
+ * This is a simple doubly linked list implementation that matches the
+ * way the Linux kernel doubly linked list implementation works.
+ */
+
+struct list_head {
+ struct list_head *next; /* next in chain */
+ struct list_head *prev; /* previous in chain */
+};
+
+
+/* Initialise a static list */
+#define LIST_HEAD(name) \
+struct list_head name = { &(name), &(name)}
+
+
+
+/* Initialise a list head to an empty list */
+#define INIT_LIST_HEAD(p) \
+do { \
+ (p)->next = (p);\
+ (p)->prev = (p); \
+} while (0)
+
+
+/* Add an element to a list */
+static inline void list_add(struct list_head *new_entry,
+ struct list_head *list)
+{
+ struct list_head *list_next = list->next;
+
+ list->next = new_entry;
+ new_entry->prev = list;
+ new_entry->next = list_next;
+ list_next->prev = new_entry;
+
+}
+
+static inline void list_add_tail(struct list_head *new_entry,
+ struct list_head *list)
+{
+ struct list_head *list_prev = list->prev;
+
+ list->prev = new_entry;
+ new_entry->next = list;
+ new_entry->prev = list_prev;
+ list_prev->next = new_entry;
+
+}
+
+
+/* Take an element out of its current list, with or without
+ * reinitialising the links.of the entry*/
+static inline void list_del(struct list_head *entry)
+{
+ struct list_head *list_next = entry->next;
+ struct list_head *list_prev = entry->prev;
+
+ list_next->prev = list_prev;
+ list_prev->next = list_next;
+
+}
+
+static inline void list_del_init(struct list_head *entry)
+{
+ list_del(entry);
+ entry->next = entry->prev = entry;
+}
+
+
+/* Test if the list is empty */
+static inline int list_empty(struct list_head *entry)
+{
+ return (entry->next == entry);
+}
+
+
+/* list_entry takes a pointer to a list entry and offsets it to that
+ * we can find a pointer to the object it is embedded in.
+ */
+
+
+#define list_entry(entry, type, member) \
+ ((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))
+
+
+/* list_for_each and list_for_each_safe iterate over lists.
+ * list_for_each_safe uses temporary storage to make the list delete safe
+ */
+
+#define list_for_each(itervar, list) \
+ for (itervar = (list)->next; itervar != (list); itervar = itervar->next)
+
+#define list_for_each_safe(itervar, save_var, list) \
+ for (itervar = (list)->next, save_var = (list)->next->next; \
+ itervar != (list); \
+ itervar = save_var, save_var = save_var->next)
+
+
+#endif
diff --git a/fs/yaffs2/yaffs_mtdif.c b/fs/yaffs2/yaffs_mtdif.c
index d0e16d088e..db49052b38 100644
--- a/fs/yaffs2/yaffs_mtdif.c
+++ b/fs/yaffs2/yaffs_mtdif.c
@@ -14,9 +14,6 @@
/* XXX U-BOOT XXX */
#include <common.h>
-const char *yaffs_mtdif_c_version =
- "$Id: yaffs_mtdif.c,v 1.19 2007/02/14 01:09:06 wookey Exp $";
-
#include "yportenv.h"
@@ -27,72 +24,56 @@ const char *yaffs_mtdif_c_version =
#include "linux/time.h"
#include "linux/mtd/nand.h"
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,18))
-static struct nand_oobinfo yaffs_oobinfo = {
- .useecc = 1,
- .eccbytes = 6,
- .eccpos = {8, 9, 10, 13, 14, 15}
-};
-
-static struct nand_oobinfo yaffs_noeccinfo = {
- .useecc = 0,
-};
-#endif
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
-static inline void translate_spare2oob(const yaffs_Spare *spare, __u8 *oob)
+static inline void translate_spare2oob(const struct yaffs_spare *spare, u8 *oob)
{
- oob[0] = spare->tagByte0;
- oob[1] = spare->tagByte1;
- oob[2] = spare->tagByte2;
- oob[3] = spare->tagByte3;
- oob[4] = spare->tagByte4;
- oob[5] = spare->tagByte5 & 0x3f;
- oob[5] |= spare->blockStatus == 'Y' ? 0: 0x80;
- oob[5] |= spare->pageStatus == 0 ? 0: 0x40;
- oob[6] = spare->tagByte6;
- oob[7] = spare->tagByte7;
+ oob[0] = spare->tb0;
+ oob[1] = spare->tb1;
+ oob[2] = spare->tb2;
+ oob[3] = spare->tb3;
+ oob[4] = spare->tb4;
+ oob[5] = spare->tb5 & 0x3f;
+ oob[5] |= spare->block_status == 'Y' ? 0 : 0x80;
+ oob[5] |= spare->page_status == 0 ? 0 : 0x40;
+ oob[6] = spare->tb6;
+ oob[7] = spare->tb7;
}
-static inline void translate_oob2spare(yaffs_Spare *spare, __u8 *oob)
+static inline void translate_oob2spare(struct yaffs_spare *spare, u8 *oob)
{
- struct yaffs_NANDSpare *nspare = (struct yaffs_NANDSpare *)spare;
- spare->tagByte0 = oob[0];
- spare->tagByte1 = oob[1];
- spare->tagByte2 = oob[2];
- spare->tagByte3 = oob[3];
- spare->tagByte4 = oob[4];
- spare->tagByte5 = oob[5] == 0xff ? 0xff : oob[5] & 0x3f;
- spare->blockStatus = oob[5] & 0x80 ? 0xff : 'Y';
- spare->pageStatus = oob[5] & 0x40 ? 0xff : 0;
+ struct yaffs_nand_spare *nspare = (struct yaffs_nand_spare *)spare;
+ spare->tb0 = oob[0];
+ spare->tb1 = oob[1];
+ spare->tb2 = oob[2];
+ spare->tb3 = oob[3];
+ spare->tb4 = oob[4];
+ spare->tb5 = oob[5] == 0xff ? 0xff : oob[5] & 0x3f;
+ spare->block_status = oob[5] & 0x80 ? 0xff : 'Y';
+ spare->page_status = oob[5] & 0x40 ? 0xff : 0;
spare->ecc1[0] = spare->ecc1[1] = spare->ecc1[2] = 0xff;
- spare->tagByte6 = oob[6];
- spare->tagByte7 = oob[7];
+ spare->tb6 = oob[6];
+ spare->tb7 = oob[7];
spare->ecc2[0] = spare->ecc2[1] = spare->ecc2[2] = 0xff;
nspare->eccres1 = nspare->eccres2 = 0; /* FIXME */
}
-#endif
-int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data, const yaffs_Spare * spare)
+
+int nandmtd_WriteChunkToNAND(struct yaffs_dev *dev, int chunkInNAND,
+ const u8 *data, const struct yaffs_spare *spare)
{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ struct mtd_info *mtd = (struct mtd_info *)(dev->driver_context);
struct mtd_oob_ops ops;
-#endif
size_t dummy;
int retval = 0;
-
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- __u8 spareAsBytes[8]; /* OOB */
+ loff_t addr = ((loff_t) chunkInNAND) * dev->data_bytes_per_chunk;
+ u8 spareAsBytes[8]; /* OOB */
if (data && !spare)
- retval = mtd->write(mtd, addr, dev->nDataBytesPerChunk,
+ retval = mtd->write(mtd, addr, dev->data_bytes_per_chunk,
&dummy, data);
else if (spare) {
- if (dev->useNANDECC) {
+ if (dev->param.use_nand_ecc) {
translate_spare2oob(spare, spareAsBytes);
ops.mode = MTD_OOB_AUTO;
ops.ooblen = 8; /* temp hack */
@@ -100,37 +81,12 @@ int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
ops.mode = MTD_OOB_RAW;
ops.ooblen = YAFFS_BYTES_PER_SPARE;
}
- ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
+ ops.len = data ? dev->data_bytes_per_chunk : ops.ooblen;
ops.datbuf = (u8 *)data;
ops.ooboffs = 0;
ops.oobbuf = spareAsBytes;
retval = mtd->write_oob(mtd, addr, &ops);
}
-#else
- __u8 *spareAsBytes = (__u8 *) spare;
-
- if (data && spare) {
- if (dev->useNANDECC)
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_oobinfo);
- else
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_noeccinfo);
- } else {
- if (data)
- retval =
- mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (spare)
- retval =
- mtd->write_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
- &dummy, spareAsBytes);
- }
-#endif
if (retval == 0)
return YAFFS_OK;
@@ -138,69 +94,36 @@ int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
return YAFFS_FAIL;
}
-int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
- yaffs_Spare * spare)
+int nandmtd_ReadChunkFromNAND(struct yaffs_dev *dev, int chunkInNAND, u8 *data,
+ struct yaffs_spare *spare)
{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ struct mtd_info *mtd = (struct mtd_info *)(dev->driver_context);
struct mtd_oob_ops ops;
-#endif
size_t dummy;
int retval = 0;
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- __u8 spareAsBytes[8]; /* OOB */
+ loff_t addr = ((loff_t) chunkInNAND) * dev->data_bytes_per_chunk;
+ u8 spareAsBytes[8]; /* OOB */
if (data && !spare)
- retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
+ retval = mtd->read(mtd, addr, dev->data_bytes_per_chunk,
&dummy, data);
else if (spare) {
- if (dev->useNANDECC) {
+ if (dev->param.use_nand_ecc) {
ops.mode = MTD_OOB_AUTO;
ops.ooblen = 8; /* temp hack */
} else {
ops.mode = MTD_OOB_RAW;
ops.ooblen = YAFFS_BYTES_PER_SPARE;
}
- ops.len = data ? dev->nDataBytesPerChunk : ops.ooblen;
+ ops.len = data ? dev->data_bytes_per_chunk : ops.ooblen;
ops.datbuf = data;
ops.ooboffs = 0;
ops.oobbuf = spareAsBytes;
retval = mtd->read_oob(mtd, addr, &ops);
- if (dev->useNANDECC)
+ if (dev->param.use_nand_ecc)
translate_oob2spare(spare, spareAsBytes);
}
-#else
- __u8 *spareAsBytes = (__u8 *) spare;
-
- if (data && spare) {
- if (dev->useNANDECC) {
- /* Careful, this call adds 2 ints */
- /* to the end of the spare data. Calling function */
- /* should allocate enough memory for spare, */
- /* i.e. [YAFFS_BYTES_PER_SPARE+2*sizeof(int)]. */
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_oobinfo);
- } else {
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, spareAsBytes,
- &yaffs_noeccinfo);
- }
- } else {
- if (data)
- retval =
- mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (spare)
- retval =
- mtd->read_oob(mtd, addr, YAFFS_BYTES_PER_SPARE,
- &dummy, spareAsBytes);
- }
-#endif
if (retval == 0)
return YAFFS_OK;
@@ -208,18 +131,18 @@ int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
return YAFFS_FAIL;
}
-int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
+int nandmtd_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber)
{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+ struct mtd_info *mtd = (struct mtd_info *)(dev->driver_context);
__u32 addr =
- ((loff_t) blockNumber) * dev->nDataBytesPerChunk
- * dev->nChunksPerBlock;
+ ((loff_t) blockNumber) * dev->data_bytes_per_chunk
+ * dev->param.chunks_per_block;
struct erase_info ei;
int retval = 0;
ei.mtd = mtd;
ei.addr = addr;
- ei.len = dev->nDataBytesPerChunk * dev->nChunksPerBlock;
+ ei.len = dev->data_bytes_per_chunk * dev->param.chunks_per_block;
ei.time = 1000;
ei.retries = 2;
ei.callback = NULL;
@@ -227,10 +150,6 @@ int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
/* Todo finish off the ei if required */
-/* XXX U-BOOT XXX */
-#if 0
- sema_init(&dev->sem, 0);
-#endif
retval = mtd->erase(mtd, &ei);
@@ -240,7 +159,7 @@ int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber)
return YAFFS_FAIL;
}
-int nandmtd_InitialiseNAND(yaffs_Device * dev)
+int nandmtd_InitialiseNAND(struct yaffs_dev *dev)
{
return YAFFS_OK;
}
diff --git a/fs/yaffs2/yaffs_mtdif.h b/fs/yaffs2/yaffs_mtdif.h
index 317600cac9..1a125823b6 100644
--- a/fs/yaffs2/yaffs_mtdif.h
+++ b/fs/yaffs2/yaffs_mtdif.h
@@ -18,10 +18,10 @@
#include "yaffs_guts.h"
-int nandmtd_WriteChunkToNAND(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data, const yaffs_Spare * spare);
-int nandmtd_ReadChunkFromNAND(yaffs_Device * dev, int chunkInNAND, __u8 * data,
- yaffs_Spare * spare);
-int nandmtd_EraseBlockInNAND(yaffs_Device * dev, int blockNumber);
-int nandmtd_InitialiseNAND(yaffs_Device * dev);
+int nandmtd_WriteChunkToNAND(struct yaffs_dev *dev, int chunkInNAND,
+ const u8 *data, const struct yaffs_spare *spare);
+int nandmtd_ReadChunkFromNAND(struct yaffs_dev *dev, int chunkInNAND, u8 *data,
+ struct yaffs_spare *spare);
+int nandmtd_EraseBlockInNAND(struct yaffs_dev *dev, int blockNumber);
+int nandmtd_InitialiseNAND(struct yaffs_dev *dev);
#endif
diff --git a/fs/yaffs2/yaffs_mtdif2.c b/fs/yaffs2/yaffs_mtdif2.c
index f569b999f4..8135bcc0fe 100644
--- a/fs/yaffs2/yaffs_mtdif2.c
+++ b/fs/yaffs2/yaffs_mtdif2.c
@@ -17,11 +17,8 @@
#include <common.h>
#include "asm/errno.h"
-const char *yaffs_mtdif2_c_version =
- "$Id: yaffs_mtdif2.c,v 1.17 2007/02/14 01:09:06 wookey Exp $";
-
#include "yportenv.h"
-
+#include "yaffs_trace.h"
#include "yaffs_mtdif2.h"
@@ -29,71 +26,64 @@ const char *yaffs_mtdif2_c_version =
#include "linux/types.h"
#include "linux/time.h"
+#include "yaffs_trace.h"
#include "yaffs_packedtags2.h"
-int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags * tags)
-{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- struct mtd_oob_ops ops;
-#else
- size_t dummy;
-#endif
- int retval = 0;
-
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-
- yaffs_PackedTags2 pt;
+#define yaffs_dev_to_mtd(dev) ((struct mtd_info *)((dev)->driver_context))
+#define yaffs_dev_to_lc(dev) ((struct yaffs_linux_context *)((dev)->os_context))
- T(YAFFS_TRACE_MTD,
- (TSTR
- ("nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p"
- TENDSTR), chunkInNAND, data, tags));
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- if (tags)
- yaffs_PackTags2(&pt, tags);
- else
- BUG(); /* both tags and data should always be present */
-
- if (data) {
- ops.mode = MTD_OOB_AUTO;
- ops.ooblen = sizeof(pt);
- ops.len = dev->nDataBytesPerChunk;
- ops.ooboffs = 0;
- ops.datbuf = (__u8 *)data;
- ops.oobbuf = (void *)&pt;
- retval = mtd->write_oob(mtd, addr, &ops);
- } else
- BUG(); /* both tags and data should always be present */
-#else
- if (tags) {
- yaffs_PackTags2(&pt, tags);
- }
+/* NB For use with inband tags....
+ * We assume that the data buffer is of size total_bytes_per_chunk so
+ * that we can also use it to load the tags.
+ */
+int nandmtd2_write_chunk_tags(struct yaffs_dev *dev, int nand_chunk,
+ const u8 *data,
+ const struct yaffs_ext_tags *tags)
+{
+ struct mtd_info *mtd = yaffs_dev_to_mtd(dev);
+ struct mtd_oob_ops ops;
- if (data && tags) {
- if (dev->useNANDECC)
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, (__u8 *) & pt, NULL);
- else
- retval =
- mtd->write_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, (__u8 *) & pt, NULL);
+ int retval = 0;
+ loff_t addr;
+
+ struct yaffs_packed_tags2 pt;
+
+ int packed_tags_size =
+ dev->param.no_tags_ecc ? sizeof(pt.t) : sizeof(pt);
+ void *packed_tags_ptr =
+ dev->param.no_tags_ecc ? (void *)&pt.t : (void *)&pt;
+
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "nandmtd2_write_chunk_tags chunk %d data %p tags %p",
+ nand_chunk, data, tags);
+
+ addr = ((loff_t) nand_chunk) * dev->param.total_bytes_per_chunk;
+
+ /* For yaffs2 writing there must be both data and tags.
+ * If we're using inband tags, then the tags are stuffed into
+ * the end of the data buffer.
+ */
+ if (!data || !tags)
+ BUG();
+ else if (dev->param.inband_tags) {
+ struct yaffs_packed_tags2_tags_only *pt2tp;
+ pt2tp =
+ (struct yaffs_packed_tags2_tags_only *)(data +
+ dev->
+ data_bytes_per_chunk);
+ yaffs_pack_tags2_tags_only(pt2tp, tags);
} else {
- if (data)
- retval =
- mtd->write(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (tags)
- retval =
- mtd->write_oob(mtd, addr, mtd->oobsize, &dummy,
- (__u8 *) & pt);
-
+ yaffs_pack_tags2(&pt, tags, !dev->param.no_tags_ecc);
}
-#endif
+
+ ops.mode = MTD_OOB_AUTO;
+ ops.ooblen = (dev->param.inband_tags) ? 0 : packed_tags_size;
+ ops.len = dev->param.total_bytes_per_chunk;
+ ops.ooboffs = 0;
+ ops.datbuf = (u8 *) data;
+ ops.oobbuf = (dev->param.inband_tags) ? NULL : packed_tags_ptr;
+ retval = mtd->write_oob(mtd, addr, &ops);
if (retval == 0)
return YAFFS_OK;
@@ -101,88 +91,97 @@ int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
return YAFFS_FAIL;
}
-int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
- __u8 * data, yaffs_ExtendedTags * tags)
+int nandmtd2_read_chunk_tags(struct yaffs_dev *dev, int nand_chunk,
+ u8 *data, struct yaffs_ext_tags *tags)
{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
+ struct mtd_info *mtd = yaffs_dev_to_mtd(dev);
+ u8 local_spare[128];
struct mtd_oob_ops ops;
-#endif
size_t dummy;
int retval = 0;
+ int local_data = 0;
+ struct yaffs_packed_tags2 pt;
+ loff_t addr = ((loff_t) nand_chunk) * dev->param.total_bytes_per_chunk;
+ int packed_tags_size =
+ dev->param.no_tags_ecc ? sizeof(pt.t) : sizeof(pt);
+ void *packed_tags_ptr =
+ dev->param.no_tags_ecc ? (void *)&pt.t : (void *)&pt;
+
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "nandmtd2_read_chunk_tags chunk %d data %p tags %p",
+ nand_chunk, data, tags);
+
+ if (dev->param.inband_tags) {
+
+ if (!data) {
+ local_data = 1;
+ data = yaffs_get_temp_buffer(dev);
+ }
- loff_t addr = ((loff_t) chunkInNAND) * dev->nDataBytesPerChunk;
-
- yaffs_PackedTags2 pt;
-
- T(YAFFS_TRACE_MTD,
- (TSTR
- ("nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p"
- TENDSTR), chunkInNAND, data, tags));
+ }
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- if (data && !tags)
- retval = mtd->read(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data);
+ if (dev->param.inband_tags || (data && !tags))
+ retval = mtd->read(mtd, addr, dev->param.total_bytes_per_chunk,
+ &dummy, data);
else if (tags) {
ops.mode = MTD_OOB_AUTO;
- ops.ooblen = sizeof(pt);
- ops.len = data ? dev->nDataBytesPerChunk : sizeof(pt);
+ ops.ooblen = packed_tags_size;
+ ops.len = data ? dev->data_bytes_per_chunk : packed_tags_size;
ops.ooboffs = 0;
ops.datbuf = data;
- ops.oobbuf = dev->spareBuffer;
+ ops.oobbuf = local_spare;
retval = mtd->read_oob(mtd, addr, &ops);
}
-#else
- if (data && tags) {
- if (dev->useNANDECC) {
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, dev->spareBuffer,
- NULL);
- } else {
- retval =
- mtd->read_ecc(mtd, addr, dev->nDataBytesPerChunk,
- &dummy, data, dev->spareBuffer,
- NULL);
+
+ if (dev->param.inband_tags) {
+ if (tags) {
+ struct yaffs_packed_tags2_tags_only *pt2tp;
+ pt2tp =
+ (struct yaffs_packed_tags2_tags_only *)
+ &data[dev->data_bytes_per_chunk];
+ yaffs_unpack_tags2_tags_only(tags, pt2tp);
}
} else {
- if (data)
- retval =
- mtd->read(mtd, addr, dev->nDataBytesPerChunk, &dummy,
- data);
- if (tags)
- retval =
- mtd->read_oob(mtd, addr, mtd->oobsize, &dummy,
- dev->spareBuffer);
+ if (tags) {
+ memcpy(packed_tags_ptr,
+ local_spare,
+ packed_tags_size);
+ yaffs_unpack_tags2(tags, &pt, !dev->param.no_tags_ecc);
+ }
}
-#endif
-
- memcpy(&pt, dev->spareBuffer, sizeof(pt));
-
- if (tags)
- yaffs_UnpackTags2(tags, &pt);
- if(tags && retval == -EBADMSG && tags->eccResult == YAFFS_ECC_RESULT_NO_ERROR)
- tags->eccResult = YAFFS_ECC_RESULT_UNFIXED;
+ if (local_data)
+ yaffs_release_temp_buffer(dev, data);
+ if (tags && retval == -EBADMSG
+ && tags->ecc_result == YAFFS_ECC_RESULT_NO_ERROR) {
+ tags->ecc_result = YAFFS_ECC_RESULT_UNFIXED;
+ dev->n_ecc_unfixed++;
+ }
+ if (tags && retval == -EUCLEAN
+ && tags->ecc_result == YAFFS_ECC_RESULT_NO_ERROR) {
+ tags->ecc_result = YAFFS_ECC_RESULT_FIXED;
+ dev->n_ecc_fixed++;
+ }
if (retval == 0)
return YAFFS_OK;
else
return YAFFS_FAIL;
}
-int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
+
+int nandmtd2_MarkNANDBlockBad(struct yaffs_dev *dev, int blockNo)
{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+ struct mtd_info *mtd = (struct mtd_info *)(dev->driver_context);
int retval;
- T(YAFFS_TRACE_MTD,
- (TSTR("nandmtd2_MarkNANDBlockBad %d" TENDSTR), blockNo));
+
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "nandmtd2_MarkNANDBlockBad %d", blockNo);
retval =
mtd->block_markbad(mtd,
- blockNo * dev->nChunksPerBlock *
- dev->nDataBytesPerChunk);
+ blockNo * dev->param.chunks_per_block *
+ dev->data_bytes_per_chunk);
if (retval == 0)
return YAFFS_OK;
@@ -191,42 +190,40 @@ int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo)
}
-int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
- yaffs_BlockState * state, int *sequenceNumber)
+int nandmtd2_QueryNANDBlock(struct yaffs_dev *dev, int blockNo,
+ enum yaffs_block_state *state, u32 *sequenceNumber)
{
- struct mtd_info *mtd = (struct mtd_info *)(dev->genericDevice);
+ struct mtd_info *mtd = (struct mtd_info *)(dev->driver_context);
int retval;
- T(YAFFS_TRACE_MTD,
- (TSTR("nandmtd2_QueryNANDBlock %d" TENDSTR), blockNo));
+ yaffs_trace(YAFFS_TRACE_MTD, "nandmtd2_QueryNANDBlock %d", blockNo);
retval =
mtd->block_isbad(mtd,
- blockNo * dev->nChunksPerBlock *
- dev->nDataBytesPerChunk);
+ blockNo * dev->param.chunks_per_block *
+ dev->data_bytes_per_chunk);
if (retval) {
- T(YAFFS_TRACE_MTD, (TSTR("block is bad" TENDSTR)));
+ yaffs_trace(YAFFS_TRACE_MTD, "block is bad");
*state = YAFFS_BLOCK_STATE_DEAD;
*sequenceNumber = 0;
} else {
- yaffs_ExtendedTags t;
- nandmtd2_ReadChunkWithTagsFromNAND(dev,
- blockNo *
- dev->nChunksPerBlock, NULL,
- &t);
-
- if (t.chunkUsed) {
- *sequenceNumber = t.sequenceNumber;
- *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
+ struct yaffs_ext_tags t;
+ nandmtd2_read_chunk_tags(dev,
+ blockNo *
+ dev->param.chunks_per_block, NULL,
+ &t);
+
+ if (t.chunk_used) {
+ *sequenceNumber = t.seq_number;
+ *state = YAFFS_BLOCK_STATE_NEEDS_SCAN;
} else {
*sequenceNumber = 0;
*state = YAFFS_BLOCK_STATE_EMPTY;
}
}
- T(YAFFS_TRACE_MTD,
- (TSTR("block is bad seq %d state %d" TENDSTR), *sequenceNumber,
- *state));
+ yaffs_trace(YAFFS_TRACE_MTD, "block is bad seq %d state %d",
+ *sequenceNumber, *state);
if (retval == 0)
return YAFFS_OK;
diff --git a/fs/yaffs2/yaffs_mtdif2.h b/fs/yaffs2/yaffs_mtdif2.h
index b67ba52aa4..62be173633 100644
--- a/fs/yaffs2/yaffs_mtdif2.h
+++ b/fs/yaffs2/yaffs_mtdif2.h
@@ -17,13 +17,14 @@
#define __YAFFS_MTDIF2_H__
#include "yaffs_guts.h"
-int nandmtd2_WriteChunkWithTagsToNAND(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags * tags);
-int nandmtd2_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
- __u8 * data, yaffs_ExtendedTags * tags);
-int nandmtd2_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
-int nandmtd2_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
- yaffs_BlockState * state, int *sequenceNumber);
+
+int nandmtd2_write_chunk_tags(struct yaffs_dev *dev, int chunkInNAND,
+ const u8 *data,
+ const struct yaffs_ext_tags *tags);
+int nandmtd2_read_chunk_tags(struct yaffs_dev *dev, int chunkInNAND,
+ u8 *data, struct yaffs_ext_tags *tags);
+int nandmtd2_MarkNANDBlockBad(struct yaffs_dev *dev, int blockNo);
+int nandmtd2_QueryNANDBlock(struct yaffs_dev *dev, int blockNo,
+ enum yaffs_block_state *state, u32 *sequenceNumber);
#endif
diff --git a/fs/yaffs2/yaffs_nameval.c b/fs/yaffs2/yaffs_nameval.c
new file mode 100644
index 0000000000..a20a3e47ce
--- /dev/null
+++ b/fs/yaffs2/yaffs_nameval.c
@@ -0,0 +1,208 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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.
+ */
+
+/*
+ * This simple implementation of a name-value store assumes a small number of
+* values and fits into a small finite buffer.
+ *
+ * Each attribute is stored as a record:
+ * sizeof(int) bytes record size.
+ * yaffs_strnlen+1 bytes name null terminated.
+ * nbytes value.
+ * ----------
+ * total size stored in record size
+ *
+ * This code has not been tested with unicode yet.
+ */
+
+#include "yaffs_nameval.h"
+
+#include "yportenv.h"
+
+static int nval_find(const char *xb, int xb_size, const YCHAR *name,
+ int *exist_size)
+{
+ int pos = 0;
+ int size;
+
+ memcpy(&size, xb, sizeof(int));
+ while (size > 0 && (size < xb_size) && (pos + size < xb_size)) {
+ if (!yaffs_strncmp((YCHAR *) (xb + pos + sizeof(int)),
+ name, size)) {
+ if (exist_size)
+ *exist_size = size;
+ return pos;
+ }
+ pos += size;
+ if (pos < xb_size - sizeof(int))
+ memcpy(&size, xb + pos, sizeof(int));
+ else
+ size = 0;
+ }
+ if (exist_size)
+ *exist_size = 0;
+ return -ENODATA;
+}
+
+static int nval_used(const char *xb, int xb_size)
+{
+ int pos = 0;
+ int size;
+
+ memcpy(&size, xb + pos, sizeof(int));
+ while (size > 0 && (size < xb_size) && (pos + size < xb_size)) {
+ pos += size;
+ if (pos < xb_size - sizeof(int))
+ memcpy(&size, xb + pos, sizeof(int));
+ else
+ size = 0;
+ }
+ return pos;
+}
+
+int nval_del(char *xb, int xb_size, const YCHAR *name)
+{
+ int pos = nval_find(xb, xb_size, name, NULL);
+ int size;
+
+ if (pos < 0 || pos >= xb_size)
+ return -ENODATA;
+
+ /* Find size, shift rest over this record,
+ * then zero out the rest of buffer */
+ memcpy(&size, xb + pos, sizeof(int));
+ memcpy(xb + pos, xb + pos + size, xb_size - (pos + size));
+ memset(xb + (xb_size - size), 0, size);
+ return 0;
+}
+
+int nval_set(char *xb, int xb_size, const YCHAR *name, const char *buf,
+ int bsize, int flags)
+{
+ int pos;
+ int namelen = yaffs_strnlen(name, xb_size);
+ int reclen;
+ int size_exist = 0;
+ int space;
+ int start;
+
+ pos = nval_find(xb, xb_size, name, &size_exist);
+
+ if (flags & XATTR_CREATE && pos >= 0)
+ return -EEXIST;
+ if (flags & XATTR_REPLACE && pos < 0)
+ return -ENODATA;
+
+ start = nval_used(xb, xb_size);
+ space = xb_size - start + size_exist;
+
+ reclen = (sizeof(int) + namelen + 1 + bsize);
+
+ if (reclen > space)
+ return -ENOSPC;
+
+ if (pos >= 0) {
+ nval_del(xb, xb_size, name);
+ start = nval_used(xb, xb_size);
+ }
+
+ pos = start;
+
+ memcpy(xb + pos, &reclen, sizeof(int));
+ pos += sizeof(int);
+ yaffs_strncpy((YCHAR *) (xb + pos), name, reclen);
+ pos += (namelen + 1);
+ memcpy(xb + pos, buf, bsize);
+ return 0;
+}
+
+int nval_get(const char *xb, int xb_size, const YCHAR * name, char *buf,
+ int bsize)
+{
+ int pos = nval_find(xb, xb_size, name, NULL);
+ int size;
+
+ if (pos >= 0 && pos < xb_size) {
+
+ memcpy(&size, xb + pos, sizeof(int));
+ pos += sizeof(int); /* advance past record length */
+ size -= sizeof(int);
+
+ /* Advance over name string */
+ while (xb[pos] && size > 0 && pos < xb_size) {
+ pos++;
+ size--;
+ }
+ /*Advance over NUL */
+ pos++;
+ size--;
+
+ /* If bsize is zero then this is a size query.
+ * Return the size, but don't copy.
+ */
+ if (!bsize)
+ return size;
+
+ if (size <= bsize) {
+ memcpy(buf, xb + pos, size);
+ return size;
+ }
+ }
+ if (pos >= 0)
+ return -ERANGE;
+
+ return -ENODATA;
+}
+
+int nval_list(const char *xb, int xb_size, char *buf, int bsize)
+{
+ int pos = 0;
+ int size;
+ int name_len;
+ int ncopied = 0;
+ int filled = 0;
+
+ memcpy(&size, xb + pos, sizeof(int));
+ while (size > sizeof(int) &&
+ size <= xb_size &&
+ (pos + size) < xb_size &&
+ !filled) {
+ pos += sizeof(int);
+ size -= sizeof(int);
+ name_len = yaffs_strnlen((YCHAR *) (xb + pos), size);
+ if (ncopied + name_len + 1 < bsize) {
+ memcpy(buf, xb + pos, name_len * sizeof(YCHAR));
+ buf += name_len;
+ *buf = '\0';
+ buf++;
+ if (sizeof(YCHAR) > 1) {
+ *buf = '\0';
+ buf++;
+ }
+ ncopied += (name_len + 1);
+ } else {
+ filled = 1;
+ }
+ pos += size;
+ if (pos < xb_size - sizeof(int))
+ memcpy(&size, xb + pos, sizeof(int));
+ else
+ size = 0;
+ }
+ return ncopied;
+}
+
+int nval_hasvalues(const char *xb, int xb_size)
+{
+ return nval_used(xb, xb_size) > 0;
+}
diff --git a/fs/yaffs2/yaffs_malloc.h b/fs/yaffs2/yaffs_nameval.h
index 3ed6175163..951e64f872 100644
--- a/fs/yaffs2/yaffs_malloc.h
+++ b/fs/yaffs2/yaffs_nameval.h
@@ -1,8 +1,7 @@
-#ifndef __YAFFS_MALLOC_H__
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -14,12 +13,16 @@
* Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
*/
-/* XXX U-BOOT XXX */
-#if 0
-#include <stdlib.h>
-#endif
+#ifndef __NAMEVAL_H__
+#define __NAMEVAL_H__
-void *yaffs_malloc(size_t size);
-void yaffs_free(void *ptr);
+#include "yportenv.h"
+int nval_del(char *xb, int xb_size, const YCHAR * name);
+int nval_set(char *xb, int xb_size, const YCHAR * name, const char *buf,
+ int bsize, int flags);
+int nval_get(const char *xb, int xb_size, const YCHAR * name, char *buf,
+ int bsize);
+int nval_list(const char *xb, int xb_size, char *buf, int bsize);
+int nval_hasvalues(const char *xb, int xb_size);
#endif
diff --git a/fs/yaffs2/yaffs_nand.c b/fs/yaffs2/yaffs_nand.c
index ce048cc185..165d01004d 100644
--- a/fs/yaffs2/yaffs_nand.c
+++ b/fs/yaffs2/yaffs_nand.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -11,124 +11,110 @@
* published by the Free Software Foundation.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-const char *yaffs_nand_c_version =
- "$Id: yaffs_nand.c,v 1.7 2007/02/14 01:09:06 wookey Exp $";
-
#include "yaffs_nand.h"
#include "yaffs_tagscompat.h"
-#include "yaffs_tagsvalidity.h"
+#include "yaffs_getblockinfo.h"
+#include "yaffs_summary.h"
-int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
- __u8 * buffer,
- yaffs_ExtendedTags * tags)
+int yaffs_rd_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk,
+ u8 *buffer, struct yaffs_ext_tags *tags)
{
int result;
- yaffs_ExtendedTags localTags;
+ struct yaffs_ext_tags local_tags;
+ int flash_chunk = nand_chunk - dev->chunk_offset;
- int realignedChunkInNAND = chunkInNAND - dev->chunkOffset;
+ dev->n_page_reads++;
- /* If there are no tags provided, use local tags to get prioritised gc working */
- if(!tags)
- tags = &localTags;
+ /* If there are no tags provided use local tags. */
+ if (!tags)
+ tags = &local_tags;
- if (dev->readChunkWithTagsFromNAND)
- result = dev->readChunkWithTagsFromNAND(dev, realignedChunkInNAND, buffer,
- tags);
+ if (dev->param.read_chunk_tags_fn)
+ result =
+ dev->param.read_chunk_tags_fn(dev, flash_chunk, buffer,
+ tags);
else
- result = yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(dev,
- realignedChunkInNAND,
- buffer,
- tags);
- if(tags &&
- tags->eccResult > YAFFS_ECC_RESULT_NO_ERROR){
-
- yaffs_BlockInfo *bi = yaffs_GetBlockInfo(dev, chunkInNAND/dev->nChunksPerBlock);
- yaffs_HandleChunkError(dev,bi);
+ result = yaffs_tags_compat_rd(dev,
+ flash_chunk, buffer, tags);
+ if (tags && tags->ecc_result > YAFFS_ECC_RESULT_NO_ERROR) {
+
+ struct yaffs_block_info *bi;
+ bi = yaffs_get_block_info(dev,
+ nand_chunk /
+ dev->param.chunks_per_block);
+ yaffs_handle_chunk_error(dev, bi);
}
-
return result;
}
-int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
- int chunkInNAND,
- const __u8 * buffer,
- yaffs_ExtendedTags * tags)
+int yaffs_wr_chunk_tags_nand(struct yaffs_dev *dev,
+ int nand_chunk,
+ const u8 *buffer, struct yaffs_ext_tags *tags)
{
- chunkInNAND -= dev->chunkOffset;
+ int result;
+ int flash_chunk = nand_chunk - dev->chunk_offset;
+ dev->n_page_writes++;
if (tags) {
- tags->sequenceNumber = dev->sequenceNumber;
- tags->chunkUsed = 1;
- if (!yaffs_ValidateTags(tags)) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("Writing uninitialised tags" TENDSTR)));
- YBUG();
- }
- T(YAFFS_TRACE_WRITE,
- (TSTR("Writing chunk %d tags %d %d" TENDSTR), chunkInNAND,
- tags->objectId, tags->chunkId));
+ tags->seq_number = dev->seq_number;
+ tags->chunk_used = 1;
+ yaffs_trace(YAFFS_TRACE_WRITE,
+ "Writing chunk %d tags %d %d",
+ nand_chunk, tags->obj_id, tags->chunk_id);
} else {
- T(YAFFS_TRACE_ERROR, (TSTR("Writing with no tags" TENDSTR)));
- YBUG();
+ yaffs_trace(YAFFS_TRACE_ERROR, "Writing with no tags");
+ BUG();
+ return YAFFS_FAIL;
}
- if (dev->writeChunkWithTagsToNAND)
- return dev->writeChunkWithTagsToNAND(dev, chunkInNAND, buffer,
- tags);
+ if (dev->param.write_chunk_tags_fn)
+ result = dev->param.write_chunk_tags_fn(dev, flash_chunk,
+ buffer, tags);
else
- return yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(dev,
- chunkInNAND,
- buffer,
- tags);
+ result = yaffs_tags_compat_wr(dev, flash_chunk, buffer, tags);
+
+ yaffs_summary_add(dev, tags, nand_chunk);
+
+ return result;
}
-int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo)
+int yaffs_mark_bad(struct yaffs_dev *dev, int block_no)
{
- blockNo -= dev->blockOffset;
+ block_no -= dev->block_offset;
+ if (dev->param.bad_block_fn)
+ return dev->param.bad_block_fn(dev, block_no);
-;
- if (dev->markNANDBlockBad)
- return dev->markNANDBlockBad(dev, blockNo);
- else
- return yaffs_TagsCompatabilityMarkNANDBlockBad(dev, blockNo);
+ return yaffs_tags_compat_mark_bad(dev, block_no);
}
-int yaffs_QueryInitialBlockState(yaffs_Device * dev,
- int blockNo,
- yaffs_BlockState * state,
- int *sequenceNumber)
+int yaffs_query_init_block_state(struct yaffs_dev *dev,
+ int block_no,
+ enum yaffs_block_state *state,
+ u32 *seq_number)
{
- blockNo -= dev->blockOffset;
+ block_no -= dev->block_offset;
+ if (dev->param.query_block_fn)
+ return dev->param.query_block_fn(dev, block_no, state,
+ seq_number);
- if (dev->queryNANDBlock)
- return dev->queryNANDBlock(dev, blockNo, state, sequenceNumber);
- else
- return yaffs_TagsCompatabilityQueryNANDBlock(dev, blockNo,
- state,
- sequenceNumber);
+ return yaffs_tags_compat_query_block(dev, block_no, state, seq_number);
}
-
-int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
- int blockInNAND)
+int yaffs_erase_block(struct yaffs_dev *dev, int flash_block)
{
int result;
- blockInNAND -= dev->blockOffset;
-
-
- dev->nBlockErasures++;
- result = dev->eraseBlockInNAND(dev, blockInNAND);
-
+ flash_block -= dev->block_offset;
+ dev->n_erasures++;
+ result = dev->param.erase_fn(dev, flash_block);
return result;
}
-int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev)
+int yaffs_init_nand(struct yaffs_dev *dev)
{
- return dev->initialiseNAND(dev);
+ if (dev->param.initialise_flash_fn)
+ return dev->param.initialise_flash_fn(dev);
+ return YAFFS_OK;
}
diff --git a/fs/yaffs2/yaffs_nand.h b/fs/yaffs2/yaffs_nand.h
index f3bedcf35c..71346627fc 100644
--- a/fs/yaffs2/yaffs_nand.h
+++ b/fs/yaffs2/yaffs_nand.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -17,27 +17,22 @@
#define __YAFFS_NAND_H__
#include "yaffs_guts.h"
+int yaffs_rd_chunk_tags_nand(struct yaffs_dev *dev, int nand_chunk,
+ u8 *buffer, struct yaffs_ext_tags *tags);
+int yaffs_wr_chunk_tags_nand(struct yaffs_dev *dev,
+ int nand_chunk,
+ const u8 *buffer, struct yaffs_ext_tags *tags);
-int yaffs_ReadChunkWithTagsFromNAND(yaffs_Device * dev, int chunkInNAND,
- __u8 * buffer,
- yaffs_ExtendedTags * tags);
+int yaffs_mark_bad(struct yaffs_dev *dev, int block_no);
-int yaffs_WriteChunkWithTagsToNAND(yaffs_Device * dev,
- int chunkInNAND,
- const __u8 * buffer,
- yaffs_ExtendedTags * tags);
+int yaffs_query_init_block_state(struct yaffs_dev *dev,
+ int block_no,
+ enum yaffs_block_state *state,
+ unsigned *seq_number);
-int yaffs_MarkBlockBad(yaffs_Device * dev, int blockNo);
+int yaffs_erase_block(struct yaffs_dev *dev, int flash_block);
-int yaffs_QueryInitialBlockState(yaffs_Device * dev,
- int blockNo,
- yaffs_BlockState * state,
- int *sequenceNumber);
-
-int yaffs_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
- int blockInNAND);
-
-int yaffs_InitialiseNAND(struct yaffs_DeviceStruct *dev);
+int yaffs_init_nand(struct yaffs_dev *dev);
#endif
diff --git a/fs/yaffs2/yaffs_nandemul2k.h b/fs/yaffs2/yaffs_nandemul2k.h
index cd2e96f7ae..cb0c4e64de 100644
--- a/fs/yaffs2/yaffs_nandemul2k.h
+++ b/fs/yaffs2/yaffs_nandemul2k.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -20,18 +20,18 @@
#include "yaffs_guts.h"
-int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_DeviceStruct *dev,
- int chunkInNAND, const __u8 * data,
- yaffs_ExtendedTags * tags);
-int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_DeviceStruct *dev,
- int chunkInNAND, __u8 * data,
- yaffs_ExtendedTags * tags);
-int nandemul2k_MarkNANDBlockBad(struct yaffs_DeviceStruct *dev, int blockNo);
-int nandemul2k_QueryNANDBlock(struct yaffs_DeviceStruct *dev, int blockNo,
- yaffs_BlockState * state, int *sequenceNumber);
-int nandemul2k_EraseBlockInNAND(struct yaffs_DeviceStruct *dev,
- int blockInNAND);
-int nandemul2k_InitialiseNAND(struct yaffs_DeviceStruct *dev);
+int nandemul2k_WriteChunkWithTagsToNAND(struct yaffs_dev *dev,
+ int nand_chunk, const u8 *data,
+ const struct yaffs_ext_tags *tags);
+int nandemul2k_ReadChunkWithTagsFromNAND(struct yaffs_dev *dev,
+ int nand_chunk, u8 *data,
+ struct yaffs_ext_tags *tags);
+int nandemul2k_MarkNANDBlockBad(struct yaffs_dev *dev, int block_no);
+int nandemul2k_QueryNANDBlock(struct yaffs_dev *dev, int block_no,
+ enum yaffs_block_state *state, u32 *seq_number);
+int nandemul2k_EraseBlockInNAND(struct yaffs_dev *dev,
+ int flash_block);
+int nandemul2k_InitialiseNAND(struct yaffs_dev *dev);
int nandemul2k_GetBytesPerChunk(void);
int nandemul2k_GetChunksPerBlock(void);
int nandemul2k_GetNumberOfBlocks(void);
diff --git a/fs/yaffs2/yaffs_nandif.c b/fs/yaffs2/yaffs_nandif.c
new file mode 100644
index 0000000000..79b00ab3b7
--- /dev/null
+++ b/fs/yaffs2/yaffs_nandif.c
@@ -0,0 +1,251 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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 "yportenv.h"
+#include "yaffs_guts.h"
+
+
+#include "yaffs_nandif.h"
+#include "yaffs_packedtags2.h"
+
+#include "yramsim.h"
+
+#include "yaffs_trace.h"
+#include "yaffsfs.h"
+
+
+/* NB For use with inband tags....
+ * We assume that the data buffer is of size totalBytersPerChunk so that
+ * we can also use it to load the tags.
+ */
+int ynandif_WriteChunkWithTagsToNAND(struct yaffs_dev *dev, int nand_chunk,
+ const u8 *data,
+ const struct yaffs_ext_tags *tags)
+{
+
+ int retval = 0;
+ struct yaffs_packed_tags2 pt;
+ void *spare;
+ unsigned spareSize = 0;
+ struct ynandif_Geometry *geometry = (struct ynandif_Geometry *)(dev->driver_context);
+
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "nandmtd2_WriteChunkWithTagsToNAND chunk %d data %p tags %p",
+ nand_chunk, data, tags);
+
+
+ /* For yaffs2 writing there must be both data and tags.
+ * If we're using inband tags, then the tags are stuffed into
+ * the end of the data buffer.
+ */
+
+ if (dev->param.inband_tags) {
+ struct yaffs_packed_tags2_tags_only *pt2tp;
+
+ pt2tp = (struct yaffs_packed_tags2_tags_only *)
+ (data + dev->data_bytes_per_chunk);
+ yaffs_pack_tags2_tags_only(pt2tp, tags);
+ spare = NULL;
+ spareSize = 0;
+ } else {
+ yaffs_pack_tags2(&pt, tags, !dev->param.no_tags_ecc);
+ spare = &pt;
+ spareSize = sizeof(struct yaffs_packed_tags2);
+ }
+
+ retval = geometry->writeChunk(dev, nand_chunk,
+ data, dev->param.total_bytes_per_chunk,
+ spare, spareSize);
+
+ return retval;
+}
+
+int ynandif_ReadChunkWithTagsFromNAND(struct yaffs_dev *dev, int nand_chunk,
+ u8 *data, struct yaffs_ext_tags *tags)
+{
+ struct yaffs_packed_tags2 pt;
+ int localData = 0;
+ void *spare = NULL;
+ unsigned spareSize;
+ int retval = 0;
+ int eccStatus; /* 0 = ok, 1 = fixed, -1 = unfixed */
+ struct ynandif_Geometry *geometry = (struct ynandif_Geometry *)(dev->driver_context);
+
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "nandmtd2_ReadChunkWithTagsFromNAND chunk %d data %p tags %p",
+ nand_chunk, data, tags);
+
+ if (!tags) {
+ spare = NULL;
+ spareSize = 0;
+ } else if (dev->param.inband_tags) {
+
+ if (!data) {
+ localData = 1;
+ data = yaffs_get_temp_buffer(dev);
+ }
+ spare = NULL;
+ spareSize = 0;
+ } else {
+ spare = &pt;
+ spareSize = sizeof(struct yaffs_packed_tags2);
+ }
+
+ retval = geometry->readChunk(dev, nand_chunk,
+ data,
+ data ? dev->param.total_bytes_per_chunk : 0,
+ spare, spareSize,
+ &eccStatus);
+
+ if (dev->param.inband_tags) {
+ if (tags) {
+ struct yaffs_packed_tags2_tags_only *pt2tp;
+ pt2tp = (struct yaffs_packed_tags2_tags_only *)
+ &data[dev->data_bytes_per_chunk];
+ yaffs_unpack_tags2_tags_only(tags, pt2tp);
+ }
+ } else {
+ if (tags)
+ yaffs_unpack_tags2(tags, &pt, !dev->param.no_tags_ecc);
+ }
+
+ if (tags && tags->chunk_used) {
+ if (eccStatus < 0 ||
+ tags->ecc_result == YAFFS_ECC_RESULT_UNFIXED)
+ tags->ecc_result = YAFFS_ECC_RESULT_UNFIXED;
+ else if (eccStatus > 0 ||
+ tags->ecc_result == YAFFS_ECC_RESULT_FIXED)
+ tags->ecc_result = YAFFS_ECC_RESULT_FIXED;
+ else
+ tags->ecc_result = YAFFS_ECC_RESULT_NO_ERROR;
+ }
+
+ if (localData)
+ yaffs_release_temp_buffer(dev, data);
+
+ return retval;
+}
+
+int ynandif_MarkNANDBlockBad(struct yaffs_dev *dev, int blockId)
+{
+ struct ynandif_Geometry *geometry = (struct ynandif_Geometry *)(dev->driver_context);
+
+ return geometry->markBlockBad(dev, blockId);
+}
+
+int ynandif_EraseBlockInNAND(struct yaffs_dev *dev, int blockId)
+{
+ struct ynandif_Geometry *geometry = (struct ynandif_Geometry *)(dev->driver_context);
+
+ return geometry->eraseBlock(dev, blockId);
+
+}
+
+
+static int ynandif_IsBlockOk(struct yaffs_dev *dev, int blockId)
+{
+ struct ynandif_Geometry *geometry = (struct ynandif_Geometry *)(dev->driver_context);
+
+ return geometry->checkBlockOk(dev, blockId);
+}
+
+int ynandif_QueryNANDBlock(struct yaffs_dev *dev, int blockId,
+ enum yaffs_block_state *state, u32 *seq_number)
+{
+ unsigned chunkNo;
+ struct yaffs_ext_tags tags;
+
+ *seq_number = 0;
+
+ chunkNo = blockId * dev->param.chunks_per_block;
+
+ if (!ynandif_IsBlockOk(dev, blockId)) {
+ *state = YAFFS_BLOCK_STATE_DEAD;
+ } else {
+ ynandif_ReadChunkWithTagsFromNAND(dev, chunkNo, NULL, &tags);
+
+ if (!tags.chunk_used) {
+ *state = YAFFS_BLOCK_STATE_EMPTY;
+ } else {
+ *state = YAFFS_BLOCK_STATE_NEEDS_SCAN;
+ *seq_number = tags.seq_number;
+ }
+ }
+
+ return YAFFS_OK;
+}
+
+
+int ynandif_InitialiseNAND(struct yaffs_dev *dev)
+{
+ struct ynandif_Geometry *geometry = (struct ynandif_Geometry *)(dev->driver_context);
+
+ geometry->initialise(dev);
+
+ return YAFFS_OK;
+}
+
+int ynandif_Deinitialise_flash_fn(struct yaffs_dev *dev)
+{
+ struct ynandif_Geometry *geometry = (struct ynandif_Geometry *)(dev->driver_context);
+
+ geometry->deinitialise(dev);
+
+ return YAFFS_OK;
+}
+
+
+struct yaffs_dev *
+ yaffs_add_dev_from_geometry(const YCHAR *name,
+ const struct ynandif_Geometry *geometry)
+{
+ YCHAR *clonedName = malloc(sizeof(YCHAR) *
+ (strnlen(name, YAFFS_MAX_NAME_LENGTH)+1));
+ struct yaffs_dev *dev = malloc(sizeof(struct yaffs_dev));
+ struct yaffs_param *param;
+
+ if (dev && clonedName) {
+ memset(dev, 0, sizeof(struct yaffs_dev));
+ strcpy(clonedName, name);
+
+ param = &dev->param;
+
+ param->name = clonedName;
+ param->write_chunk_tags_fn = ynandif_WriteChunkWithTagsToNAND;
+ param->read_chunk_tags_fn = ynandif_ReadChunkWithTagsFromNAND;
+ param->erase_fn = ynandif_EraseBlockInNAND;
+ param->initialise_flash_fn = ynandif_InitialiseNAND;
+ param->query_block_fn = ynandif_QueryNANDBlock;
+ param->bad_block_fn = ynandif_MarkNANDBlockBad;
+ param->n_caches = 20;
+ param->start_block = geometry->start_block;
+ param->end_block = geometry->end_block;
+ param->total_bytes_per_chunk = geometry->dataSize;
+ param->spare_bytes_per_chunk = geometry->spareSize;
+ param->inband_tags = geometry->inband_tags;
+ param->chunks_per_block = geometry->pagesPerBlock;
+ param->use_nand_ecc = geometry->hasECC;
+ param->is_yaffs2 = geometry->useYaffs2;
+ param->n_reserved_blocks = 5;
+ dev->driver_context = (void *)geometry;
+
+ yaffs_add_device(dev);
+
+ return dev;
+ }
+
+ free(dev);
+ free(clonedName);
+
+ return NULL;
+}
diff --git a/fs/yaffs2/yaffs_nandif.h b/fs/yaffs2/yaffs_nandif.h
new file mode 100644
index 0000000000..e780f7f3b4
--- /dev/null
+++ b/fs/yaffs2/yaffs_nandif.h
@@ -0,0 +1,65 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+
+#ifndef __YNANDIF_H__
+#define __YNANDIF_H__
+
+#include "yaffs_guts.h"
+
+struct ynandif_Geometry {
+ unsigned start_block;
+ unsigned end_block;
+ unsigned dataSize;
+ unsigned spareSize;
+ unsigned pagesPerBlock;
+ unsigned hasECC;
+ unsigned inband_tags;
+ unsigned useYaffs2;
+
+ int (*initialise)(struct yaffs_dev *dev);
+ int (*deinitialise)(struct yaffs_dev *dev);
+
+ int (*readChunk) (struct yaffs_dev *dev,
+ unsigned pageId,
+ unsigned char *data,
+ unsigned dataLength,
+ unsigned char *spare,
+ unsigned spareLength,
+ int *eccStatus);
+ /* ECC status is set to 0 for OK, 1 for fixed, -1 for unfixed. */
+
+ int (*writeChunk)(struct yaffs_dev *dev,
+ unsigned pageId,
+ const unsigned char *data,
+ unsigned dataLength,
+ const unsigned char *spare,
+ unsigned spareLength);
+
+ int (*eraseBlock)(struct yaffs_dev *dev, unsigned blockId);
+
+ int (*checkBlockOk)(struct yaffs_dev *dev, unsigned blockId);
+ int (*markBlockBad)(struct yaffs_dev *dev, unsigned blockId);
+
+ void *privateData;
+
+};
+
+struct yaffs_dev *
+ yaffs_add_dev_from_geometry(const YCHAR *name,
+ const struct ynandif_Geometry *geometry);
+
+
+#endif
diff --git a/fs/yaffs2/yaffs_tagsvalidity.h b/fs/yaffs2/yaffs_osglue.h
index 2fd0c24ed2..f629a4b59e 100644
--- a/fs/yaffs2/yaffs_tagsvalidity.h
+++ b/fs/yaffs2/yaffs_osglue.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -13,12 +13,29 @@
* Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
*/
+/*
+ * Header file for using yaffs in an application via
+ * a direct interface.
+ */
+
+
+#ifndef __YAFFS_OSGLUE_H__
+#define __YAFFS_OSGLUE_H__
+
+
+#include "yportenv.h"
+
+void yaffsfs_Lock(void);
+void yaffsfs_Unlock(void);
+
+u32 yaffsfs_CurrentTime(void);
+
+void yaffsfs_SetError(int err);
+
+void *yaffsfs_malloc(size_t size);
+void yaffsfs_free(void *ptr);
-#ifndef __YAFFS_TAGS_VALIDITY_H__
-#define __YAFFS_TAGS_VALIDITY_H__
+void yaffsfs_OSInitialisation(void);
-#include "yaffs_guts.h"
-void yaffs_InitialiseTags(yaffs_ExtendedTags * tags);
-int yaffs_ValidateTags(yaffs_ExtendedTags * tags);
#endif
diff --git a/fs/yaffs2/yaffs_packedtags1.c b/fs/yaffs2/yaffs_packedtags1.c
index a149431d4f..dd9a331d8f 100644
--- a/fs/yaffs2/yaffs_packedtags1.c
+++ b/fs/yaffs2/yaffs_packedtags1.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -11,45 +11,46 @@
* published by the Free Software Foundation.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-
#include "yaffs_packedtags1.h"
#include "yportenv.h"
-void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t)
+static const u8 all_ff[20] = {
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff,
+ 0xff, 0xff, 0xff, 0xff
+};
+
+void yaffs_pack_tags1(struct yaffs_packed_tags1 *pt,
+ const struct yaffs_ext_tags *t)
{
- pt->chunkId = t->chunkId;
- pt->serialNumber = t->serialNumber;
- pt->byteCount = t->byteCount;
- pt->objectId = t->objectId;
+ pt->chunk_id = t->chunk_id;
+ pt->serial_number = t->serial_number;
+ pt->n_bytes = t->n_bytes;
+ pt->obj_id = t->obj_id;
pt->ecc = 0;
- pt->deleted = (t->chunkDeleted) ? 0 : 1;
- pt->unusedStuff = 0;
- pt->shouldBeFF = 0xFFFFFFFF;
-
+ pt->deleted = (t->is_deleted) ? 0 : 1;
+ pt->unused_stuff = 0;
+ pt->should_be_ff = 0xffffffff;
}
-void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt)
+void yaffs_unpack_tags1(struct yaffs_ext_tags *t,
+ const struct yaffs_packed_tags1 *pt)
{
- static const __u8 allFF[] =
- { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
-0xff };
- if (memcmp(allFF, pt, sizeof(yaffs_PackedTags1))) {
- t->blockBad = 0;
- if (pt->shouldBeFF != 0xFFFFFFFF) {
- t->blockBad = 1;
- }
- t->chunkUsed = 1;
- t->objectId = pt->objectId;
- t->chunkId = pt->chunkId;
- t->byteCount = pt->byteCount;
- t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
- t->chunkDeleted = (pt->deleted) ? 0 : 1;
- t->serialNumber = pt->serialNumber;
+ if (memcmp(all_ff, pt, sizeof(struct yaffs_packed_tags1))) {
+ t->block_bad = 0;
+ if (pt->should_be_ff != 0xffffffff)
+ t->block_bad = 1;
+ t->chunk_used = 1;
+ t->obj_id = pt->obj_id;
+ t->chunk_id = pt->chunk_id;
+ t->n_bytes = pt->n_bytes;
+ t->ecc_result = YAFFS_ECC_RESULT_NO_ERROR;
+ t->is_deleted = (pt->deleted) ? 0 : 1;
+ t->serial_number = pt->serial_number;
} else {
- memset(t, 0, sizeof(yaffs_ExtendedTags));
-
+ memset(t, 0, sizeof(struct yaffs_ext_tags));
}
}
diff --git a/fs/yaffs2/yaffs_packedtags1.h b/fs/yaffs2/yaffs_packedtags1.h
index 776c5c256c..b80f0a5b15 100644
--- a/fs/yaffs2/yaffs_packedtags1.h
+++ b/fs/yaffs2/yaffs_packedtags1.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -20,18 +20,20 @@
#include "yaffs_guts.h"
-typedef struct {
- unsigned chunkId:20;
- unsigned serialNumber:2;
- unsigned byteCount:10;
- unsigned objectId:18;
+struct yaffs_packed_tags1 {
+ unsigned chunk_id:20;
+ unsigned serial_number:2;
+ unsigned n_bytes:10;
+ unsigned obj_id:18;
unsigned ecc:12;
unsigned deleted:1;
- unsigned unusedStuff:1;
- unsigned shouldBeFF;
+ unsigned unused_stuff:1;
+ unsigned should_be_ff;
-} yaffs_PackedTags1;
+};
-void yaffs_PackTags1(yaffs_PackedTags1 * pt, const yaffs_ExtendedTags * t);
-void yaffs_UnpackTags1(yaffs_ExtendedTags * t, const yaffs_PackedTags1 * pt);
+void yaffs_pack_tags1(struct yaffs_packed_tags1 *pt,
+ const struct yaffs_ext_tags *t);
+void yaffs_unpack_tags1(struct yaffs_ext_tags *t,
+ const struct yaffs_packed_tags1 *pt);
#endif
diff --git a/fs/yaffs2/yaffs_packedtags2.c b/fs/yaffs2/yaffs_packedtags2.c
index 474400999b..e1d18cc33c 100644
--- a/fs/yaffs2/yaffs_packedtags2.c
+++ b/fs/yaffs2/yaffs_packedtags2.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -11,12 +11,9 @@
* published by the Free Software Foundation.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-
#include "yaffs_packedtags2.h"
#include "yportenv.h"
-#include "yaffs_tagsvalidity.h"
+#include "yaffs_trace.h"
/* This code packs a set of extended tags into a binary structure for
* NAND storage
@@ -27,159 +24,174 @@
* This is defined by having the EXTRA_HEADER_INFO_FLAG set.
*/
-/* Extra flags applied to chunkId */
+/* Extra flags applied to chunk_id */
#define EXTRA_HEADER_INFO_FLAG 0x80000000
#define EXTRA_SHRINK_FLAG 0x40000000
#define EXTRA_SHADOWS_FLAG 0x20000000
#define EXTRA_SPARE_FLAGS 0x10000000
-#define ALL_EXTRA_FLAGS 0xF0000000
+#define ALL_EXTRA_FLAGS 0xf0000000
/* Also, the top 4 bits of the object Id are set to the object type. */
#define EXTRA_OBJECT_TYPE_SHIFT (28)
-#define EXTRA_OBJECT_TYPE_MASK ((0x0F) << EXTRA_OBJECT_TYPE_SHIFT)
+#define EXTRA_OBJECT_TYPE_MASK ((0x0f) << EXTRA_OBJECT_TYPE_SHIFT)
-static void yaffs_DumpPackedTags2(const yaffs_PackedTags2 * pt)
+static void yaffs_dump_packed_tags2_tags_only(
+ const struct yaffs_packed_tags2_tags_only *ptt)
{
- T(YAFFS_TRACE_MTD,
- (TSTR("packed tags obj %d chunk %d byte %d seq %d" TENDSTR),
- pt->t.objectId, pt->t.chunkId, pt->t.byteCount,
- pt->t.sequenceNumber));
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "packed tags obj %d chunk %d byte %d seq %d",
+ ptt->obj_id, ptt->chunk_id, ptt->n_bytes, ptt->seq_number);
}
-static void yaffs_DumpTags2(const yaffs_ExtendedTags * t)
+static void yaffs_dump_packed_tags2(const struct yaffs_packed_tags2 *pt)
{
- T(YAFFS_TRACE_MTD,
- (TSTR
- ("ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte "
- "%d del %d ser %d seq %d"
- TENDSTR), t->eccResult, t->blockBad, t->chunkUsed, t->objectId,
- t->chunkId, t->byteCount, t->chunkDeleted, t->serialNumber,
- t->sequenceNumber));
-
+ yaffs_dump_packed_tags2_tags_only(&pt->t);
}
-void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t)
+static void yaffs_dump_tags2(const struct yaffs_ext_tags *t)
{
- pt->t.chunkId = t->chunkId;
- pt->t.sequenceNumber = t->sequenceNumber;
- pt->t.byteCount = t->byteCount;
- pt->t.objectId = t->objectId;
+ yaffs_trace(YAFFS_TRACE_MTD,
+ "ext.tags eccres %d blkbad %d chused %d obj %d chunk%d byte %d del %d ser %d seq %d",
+ t->ecc_result, t->block_bad, t->chunk_used, t->obj_id,
+ t->chunk_id, t->n_bytes, t->is_deleted, t->serial_number,
+ t->seq_number);
- if (t->chunkId == 0 && t->extraHeaderInfoAvailable) {
- /* Store the extra header info instead */
- /* We save the parent object in the chunkId */
- pt->t.chunkId = EXTRA_HEADER_INFO_FLAG
- | t->extraParentObjectId;
- if (t->extraIsShrinkHeader) {
- pt->t.chunkId |= EXTRA_SHRINK_FLAG;
- }
- if (t->extraShadows) {
- pt->t.chunkId |= EXTRA_SHADOWS_FLAG;
- }
+}
- pt->t.objectId &= ~EXTRA_OBJECT_TYPE_MASK;
- pt->t.objectId |=
- (t->extraObjectType << EXTRA_OBJECT_TYPE_SHIFT);
+static int yaffs_check_tags_extra_packable(const struct yaffs_ext_tags *t)
+{
+ if (t->chunk_id != 0 || !t->extra_available)
+ return 0;
+
+ /* Check if the file size is too long to store */
+ if (t->extra_obj_type == YAFFS_OBJECT_TYPE_FILE &&
+ (t->extra_file_size >> 31) != 0)
+ return 0;
+ return 1;
+}
- if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
- pt->t.byteCount = t->extraEquivalentObjectId;
- } else if (t->extraObjectType == YAFFS_OBJECT_TYPE_FILE) {
- pt->t.byteCount = t->extraFileLength;
- } else {
- pt->t.byteCount = 0;
- }
+void yaffs_pack_tags2_tags_only(struct yaffs_packed_tags2_tags_only *ptt,
+ const struct yaffs_ext_tags *t)
+{
+ ptt->chunk_id = t->chunk_id;
+ ptt->seq_number = t->seq_number;
+ ptt->n_bytes = t->n_bytes;
+ ptt->obj_id = t->obj_id;
+
+ /* Only store extra tags for object headers.
+ * If it is a file then only store if the file size is short\
+ * enough to fit.
+ */
+ if (yaffs_check_tags_extra_packable(t)) {
+ /* Store the extra header info instead */
+ /* We save the parent object in the chunk_id */
+ ptt->chunk_id = EXTRA_HEADER_INFO_FLAG | t->extra_parent_id;
+ if (t->extra_is_shrink)
+ ptt->chunk_id |= EXTRA_SHRINK_FLAG;
+ if (t->extra_shadows)
+ ptt->chunk_id |= EXTRA_SHADOWS_FLAG;
+
+ ptt->obj_id &= ~EXTRA_OBJECT_TYPE_MASK;
+ ptt->obj_id |= (t->extra_obj_type << EXTRA_OBJECT_TYPE_SHIFT);
+
+ if (t->extra_obj_type == YAFFS_OBJECT_TYPE_HARDLINK)
+ ptt->n_bytes = t->extra_equiv_id;
+ else if (t->extra_obj_type == YAFFS_OBJECT_TYPE_FILE)
+ ptt->n_bytes = (unsigned) t->extra_file_size;
+ else
+ ptt->n_bytes = 0;
}
- yaffs_DumpPackedTags2(pt);
- yaffs_DumpTags2(t);
-
-#ifndef YAFFS_IGNORE_TAGS_ECC
- {
- yaffs_ECCCalculateOther((unsigned char *)&pt->t,
- sizeof(yaffs_PackedTags2TagsPart),
- &pt->ecc);
- }
-#endif
+ yaffs_dump_packed_tags2_tags_only(ptt);
+ yaffs_dump_tags2(t);
}
-void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt)
+void yaffs_pack_tags2(struct yaffs_packed_tags2 *pt,
+ const struct yaffs_ext_tags *t, int tags_ecc)
{
+ yaffs_pack_tags2_tags_only(&pt->t, t);
- memset(t, 0, sizeof(yaffs_ExtendedTags));
+ if (tags_ecc)
+ yaffs_ecc_calc_other((unsigned char *)&pt->t,
+ sizeof(struct yaffs_packed_tags2_tags_only),
+ &pt->ecc);
+}
- yaffs_InitialiseTags(t);
+void yaffs_unpack_tags2_tags_only(struct yaffs_ext_tags *t,
+ struct yaffs_packed_tags2_tags_only *ptt)
+{
+ memset(t, 0, sizeof(struct yaffs_ext_tags));
+
+ if (ptt->seq_number == 0xffffffff)
+ return;
+
+ t->block_bad = 0;
+ t->chunk_used = 1;
+ t->obj_id = ptt->obj_id;
+ t->chunk_id = ptt->chunk_id;
+ t->n_bytes = ptt->n_bytes;
+ t->is_deleted = 0;
+ t->serial_number = 0;
+ t->seq_number = ptt->seq_number;
+
+ /* Do extra header info stuff */
+ if (ptt->chunk_id & EXTRA_HEADER_INFO_FLAG) {
+ t->chunk_id = 0;
+ t->n_bytes = 0;
+
+ t->extra_available = 1;
+ t->extra_parent_id = ptt->chunk_id & (~(ALL_EXTRA_FLAGS));
+ t->extra_is_shrink = ptt->chunk_id & EXTRA_SHRINK_FLAG ? 1 : 0;
+ t->extra_shadows = ptt->chunk_id & EXTRA_SHADOWS_FLAG ? 1 : 0;
+ t->extra_obj_type = ptt->obj_id >> EXTRA_OBJECT_TYPE_SHIFT;
+ t->obj_id &= ~EXTRA_OBJECT_TYPE_MASK;
+
+ if (t->extra_obj_type == YAFFS_OBJECT_TYPE_HARDLINK)
+ t->extra_equiv_id = ptt->n_bytes;
+ else
+ t->extra_file_size = ptt->n_bytes;
+ }
+ yaffs_dump_packed_tags2_tags_only(ptt);
+ yaffs_dump_tags2(t);
+}
- if (pt->t.sequenceNumber != 0xFFFFFFFF) {
- /* Page is in use */
-#ifdef YAFFS_IGNORE_TAGS_ECC
- {
- t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
- }
-#else
- {
- yaffs_ECCOther ecc;
- int result;
- yaffs_ECCCalculateOther((unsigned char *)&pt->t,
- sizeof
- (yaffs_PackedTags2TagsPart),
- &ecc);
- result =
- yaffs_ECCCorrectOther((unsigned char *)&pt->t,
- sizeof
- (yaffs_PackedTags2TagsPart),
- &pt->ecc, &ecc);
- switch(result){
- case 0:
- t->eccResult = YAFFS_ECC_RESULT_NO_ERROR;
- break;
- case 1:
- t->eccResult = YAFFS_ECC_RESULT_FIXED;
- break;
- case -1:
- t->eccResult = YAFFS_ECC_RESULT_UNFIXED;
- break;
- default:
- t->eccResult = YAFFS_ECC_RESULT_UNKNOWN;
- }
- }
-#endif
- t->blockBad = 0;
- t->chunkUsed = 1;
- t->objectId = pt->t.objectId;
- t->chunkId = pt->t.chunkId;
- t->byteCount = pt->t.byteCount;
- t->chunkDeleted = 0;
- t->serialNumber = 0;
- t->sequenceNumber = pt->t.sequenceNumber;
-
- /* Do extra header info stuff */
-
- if (pt->t.chunkId & EXTRA_HEADER_INFO_FLAG) {
- t->chunkId = 0;
- t->byteCount = 0;
-
- t->extraHeaderInfoAvailable = 1;
- t->extraParentObjectId =
- pt->t.chunkId & (~(ALL_EXTRA_FLAGS));
- t->extraIsShrinkHeader =
- (pt->t.chunkId & EXTRA_SHRINK_FLAG) ? 1 : 0;
- t->extraShadows =
- (pt->t.chunkId & EXTRA_SHADOWS_FLAG) ? 1 : 0;
- t->extraObjectType =
- pt->t.objectId >> EXTRA_OBJECT_TYPE_SHIFT;
- t->objectId &= ~EXTRA_OBJECT_TYPE_MASK;
-
- if (t->extraObjectType == YAFFS_OBJECT_TYPE_HARDLINK) {
- t->extraEquivalentObjectId = pt->t.byteCount;
- } else {
- t->extraFileLength = pt->t.byteCount;
- }
+void yaffs_unpack_tags2(struct yaffs_ext_tags *t, struct yaffs_packed_tags2 *pt,
+ int tags_ecc)
+{
+ enum yaffs_ecc_result ecc_result = YAFFS_ECC_RESULT_NO_ERROR;
+
+ if (pt->t.seq_number != 0xffffffff && tags_ecc) {
+ /* Chunk is in use and we need to do ECC */
+
+ struct yaffs_ecc_other ecc;
+ int result;
+ yaffs_ecc_calc_other((unsigned char *)&pt->t,
+ sizeof(struct yaffs_packed_tags2_tags_only),
+ &ecc);
+ result =
+ yaffs_ecc_correct_other((unsigned char *)&pt->t,
+ sizeof(struct yaffs_packed_tags2_tags_only),
+ &pt->ecc, &ecc);
+ switch (result) {
+ case 0:
+ ecc_result = YAFFS_ECC_RESULT_NO_ERROR;
+ break;
+ case 1:
+ ecc_result = YAFFS_ECC_RESULT_FIXED;
+ break;
+ case -1:
+ ecc_result = YAFFS_ECC_RESULT_UNFIXED;
+ break;
+ default:
+ ecc_result = YAFFS_ECC_RESULT_UNKNOWN;
}
}
+ yaffs_unpack_tags2_tags_only(t, &pt->t);
- yaffs_DumpPackedTags2(pt);
- yaffs_DumpTags2(t);
+ t->ecc_result = ecc_result;
+ yaffs_dump_packed_tags2(pt);
+ yaffs_dump_tags2(t);
}
diff --git a/fs/yaffs2/yaffs_packedtags2.h b/fs/yaffs2/yaffs_packedtags2.h
index c2242ffe76..675e719460 100644
--- a/fs/yaffs2/yaffs_packedtags2.h
+++ b/fs/yaffs2/yaffs_packedtags2.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -21,18 +21,27 @@
#include "yaffs_guts.h"
#include "yaffs_ecc.h"
-typedef struct {
- unsigned sequenceNumber;
- unsigned objectId;
- unsigned chunkId;
- unsigned byteCount;
-} yaffs_PackedTags2TagsPart;
+struct yaffs_packed_tags2_tags_only {
+ unsigned seq_number;
+ unsigned obj_id;
+ unsigned chunk_id;
+ unsigned n_bytes;
+};
-typedef struct {
- yaffs_PackedTags2TagsPart t;
- yaffs_ECCOther ecc;
-} yaffs_PackedTags2;
+struct yaffs_packed_tags2 {
+ struct yaffs_packed_tags2_tags_only t;
+ struct yaffs_ecc_other ecc;
+};
-void yaffs_PackTags2(yaffs_PackedTags2 * pt, const yaffs_ExtendedTags * t);
-void yaffs_UnpackTags2(yaffs_ExtendedTags * t, yaffs_PackedTags2 * pt);
+/* Full packed tags with ECC, used for oob tags */
+void yaffs_pack_tags2(struct yaffs_packed_tags2 *pt,
+ const struct yaffs_ext_tags *t, int tags_ecc);
+void yaffs_unpack_tags2(struct yaffs_ext_tags *t, struct yaffs_packed_tags2 *pt,
+ int tags_ecc);
+
+/* Only the tags part (no ECC for use with inband tags */
+void yaffs_pack_tags2_tags_only(struct yaffs_packed_tags2_tags_only *pt,
+ const struct yaffs_ext_tags *t);
+void yaffs_unpack_tags2_tags_only(struct yaffs_ext_tags *t,
+ struct yaffs_packed_tags2_tags_only *pt);
#endif
diff --git a/fs/yaffs2/yaffs_qsort.c b/fs/yaffs2/yaffs_qsort.c
index 4d56f96afb..afd1ffa799 100644
--- a/fs/yaffs2/yaffs_qsort.c
+++ b/fs/yaffs2/yaffs_qsort.c
@@ -27,58 +27,56 @@
* SUCH DAMAGE.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-
#include "yportenv.h"
-//#include <linux/string.h>
+/* #include <linux/string.h> */
/*
* Qsort routine from Bentley & McIlroy's "Engineering a Sort Function".
*/
-#define swapcode(TYPE, parmi, parmj, n) { \
- long i = (n) / sizeof (TYPE); \
- register TYPE *pi = (TYPE *) (parmi); \
- register TYPE *pj = (TYPE *) (parmj); \
- do { \
+#define swapcode(TYPE, parmi, parmj, n) do { \
+ long i = (n) / sizeof(TYPE); \
+ register TYPE *pi = (TYPE *) (parmi); \
+ register TYPE *pj = (TYPE *) (parmj); \
+ do { \
register TYPE t = *pi; \
*pi++ = *pj; \
*pj++ = t; \
} while (--i > 0); \
-}
+} while (0)
#define SWAPINIT(a, es) swaptype = ((char *)a - (char *)0) % sizeof(long) || \
- es % sizeof(long) ? 2 : es == sizeof(long)? 0 : 1;
+ es % sizeof(long) ? 2 : es == sizeof(long) ? 0 : 1;
-static __inline void
+static inline void
swapfunc(char *a, char *b, int n, int swaptype)
{
if (swaptype <= 1)
- swapcode(long, a, b, n)
+ swapcode(long, a, b, n);
else
- swapcode(char, a, b, n)
+ swapcode(char, a, b, n);
}
-#define swap(a, b) \
+#define yswap(a, b) do { \
if (swaptype == 0) { \
long t = *(long *)(a); \
*(long *)(a) = *(long *)(b); \
*(long *)(b) = t; \
} else \
- swapfunc(a, b, es, swaptype)
+ swapfunc(a, b, es, swaptype); \
+} while (0)
-#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype)
+#define vecswap(a, b, n) if ((n) > 0) swapfunc(a, b, n, swaptype)
-static __inline char *
+static inline char *
med3(char *a, char *b, char *c, int (*cmp)(const void *, const void *))
{
return cmp(a, b) < 0 ?
- (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a ))
- :(cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c ));
+ (cmp(b, c) < 0 ? b : (cmp(a, c) < 0 ? c : a))
+ : (cmp(b, c) > 0 ? b : (cmp(a, c) < 0 ? a : c));
}
#ifndef min
-#define min(a,b) (((a) < (b)) ? (a) : (b))
+#define min(a, b) (((a) < (b)) ? (a) : (b))
#endif
void
@@ -95,7 +93,7 @@ loop: SWAPINIT(a, es);
for (pm = (char *)a + es; pm < (char *) a + n * es; pm += es)
for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
pl -= es)
- swap(pl, pl - es);
+ yswap(pl, pl - es);
return;
}
pm = (char *)a + (n / 2) * es;
@@ -110,7 +108,7 @@ loop: SWAPINIT(a, es);
}
pm = med3(pl, pm, pn, cmp);
}
- swap(a, pm);
+ yswap(a, pm);
pa = pb = (char *)a + es;
pc = pd = (char *)a + (n - 1) * es;
@@ -118,7 +116,7 @@ loop: SWAPINIT(a, es);
while (pb <= pc && (r = cmp(pb, a)) <= 0) {
if (r == 0) {
swap_cnt = 1;
- swap(pa, pb);
+ yswap(pa, pb);
pa += es;
}
pb += es;
@@ -126,14 +124,14 @@ loop: SWAPINIT(a, es);
while (pb <= pc && (r = cmp(pc, a)) >= 0) {
if (r == 0) {
swap_cnt = 1;
- swap(pc, pd);
+ yswap(pc, pd);
pd -= es;
}
pc -= es;
}
if (pb > pc)
break;
- swap(pb, pc);
+ yswap(pb, pc);
swap_cnt = 1;
pb += es;
pc -= es;
@@ -142,7 +140,7 @@ loop: SWAPINIT(a, es);
for (pm = (char *) a + es; pm < (char *) a + n * es; pm += es)
for (pl = pm; pl > (char *) a && cmp(pl - es, pl) > 0;
pl -= es)
- swap(pl, pl - es);
+ yswap(pl, pl - es);
return;
}
@@ -151,9 +149,11 @@ loop: SWAPINIT(a, es);
vecswap(a, pb - r, r);
r = min((long)(pd - pc), (long)(pn - pd - es));
vecswap(pb, pn - r, r);
- if ((r = pb - pa) > es)
+ r = pb - pa;
+ if (r > es)
yaffs_qsort(a, r / es, es, cmp);
- if ((r = pd - pc) > es) {
+ r = pd - pc;
+ if (r > es) {
/* Iterate rather than recurse to save stack space */
a = pn - r;
n = r / es;
diff --git a/fs/yaffs2/yaffs_qsort.h b/fs/yaffs2/yaffs_qsort.h
deleted file mode 100644
index 19083da51a..0000000000
--- a/fs/yaffs2/yaffs_qsort.h
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-
-#ifndef __YAFFS_QSORT_H__
-#define __YAFFS_QSORT_H__
-
-extern void yaffs_qsort (void *const base, size_t total_elems, size_t size,
- int (*cmp)(const void *, const void *));
-
-#endif
diff --git a/fs/yaffs2/yaffs_ramdisk.h b/fs/yaffs2/yaffs_ramdisk.h
deleted file mode 100644
index 3cff8bee79..0000000000
--- a/fs/yaffs2/yaffs_ramdisk.h
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 2.1 as
- * published by the Free Software Foundation.
- *
- * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
- */
-
-/*
- * yaffs_ramdisk.h: yaffs ram disk component
- */
-
-#ifndef __YAFFS_RAMDISK_H__
-#define __YAFFS_RAMDISK_H__
-
-
-#include "yaffs_guts.h"
-int yramdisk_EraseBlockInNAND(yaffs_Device *dev, int blockNumber);
-int yramdisk_WriteChunkWithTagsToNAND(yaffs_Device *dev,int chunkInNAND,const __u8 *data, yaffs_ExtendedTags *tags);
-int yramdisk_ReadChunkWithTagsFromNAND(yaffs_Device *dev,int chunkInNAND, __u8 *data, yaffs_ExtendedTags *tags);
-int yramdisk_EraseBlockInNAND(yaffs_Device *dev, int blockNumber);
-int yramdisk_InitialiseNAND(yaffs_Device *dev);
-int yramdisk_MarkNANDBlockBad(yaffs_Device *dev,int blockNumber);
-int yramdisk_QueryNANDBlock(yaffs_Device *dev, int blockNo, yaffs_BlockState *state, int *sequenceNumber);
-#endif
diff --git a/fs/yaffs2/yaffs_summary.c b/fs/yaffs2/yaffs_summary.c
new file mode 100644
index 0000000000..46e42f6d7d
--- /dev/null
+++ b/fs/yaffs2/yaffs_summary.c
@@ -0,0 +1,310 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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.
+ */
+
+/* Summaries write the useful part of the tags for the chunks in a block into an
+ * an array which is written to the last n chunks of the block.
+ * Reading the summaries gives all the tags for the block in one read. Much
+ * faster.
+ *
+ * Chunks holding summaries are marked with tags making it look like
+ * they are part of a fake file.
+ *
+ * The summary could also be used during gc.
+ *
+ */
+
+#include "yaffs_summary.h"
+#include "yaffs_packedtags2.h"
+#include "yaffs_nand.h"
+#include "yaffs_getblockinfo.h"
+#include "yaffs_bitmap.h"
+
+/*
+ * The summary is built up in an array of summary tags.
+ * This gets written to the last one or two (maybe more) chunks in a block.
+ * A summary header is written as the first part of each chunk of summary data.
+ * The summary header must match or the summary is rejected.
+ */
+
+/* Summary tags don't need the sequence number because that is redundant. */
+struct yaffs_summary_tags {
+ unsigned obj_id;
+ unsigned chunk_id;
+ unsigned n_bytes;
+};
+
+/* Summary header */
+struct yaffs_summary_header {
+ unsigned version; /* Must match current version */
+ unsigned block; /* Must be this block */
+ unsigned seq; /* Must be this sequence number */
+ unsigned sum; /* Just add up all the bytes in the tags */
+};
+
+
+static void yaffs_summary_clear(struct yaffs_dev *dev)
+{
+ if (!dev->sum_tags)
+ return;
+ memset(dev->sum_tags, 0, dev->chunks_per_summary *
+ sizeof(struct yaffs_summary_tags));
+}
+
+
+void yaffs_summary_deinit(struct yaffs_dev *dev)
+{
+ kfree(dev->sum_tags);
+ dev->sum_tags = NULL;
+ kfree(dev->gc_sum_tags);
+ dev->gc_sum_tags = NULL;
+ dev->chunks_per_summary = 0;
+}
+
+int yaffs_summary_init(struct yaffs_dev *dev)
+{
+ int sum_bytes;
+ int chunks_used; /* Number of chunks used by summary */
+ int sum_tags_bytes;
+
+ sum_bytes = dev->param.chunks_per_block *
+ sizeof(struct yaffs_summary_tags);
+
+ chunks_used = (sum_bytes + dev->data_bytes_per_chunk - 1)/
+ (dev->data_bytes_per_chunk -
+ sizeof(struct yaffs_summary_header));
+
+ dev->chunks_per_summary = dev->param.chunks_per_block - chunks_used;
+ sum_tags_bytes = sizeof(struct yaffs_summary_tags) *
+ dev->chunks_per_summary;
+ dev->sum_tags = kmalloc(sum_tags_bytes, GFP_NOFS);
+ dev->gc_sum_tags = kmalloc(sum_tags_bytes, GFP_NOFS);
+ if (!dev->sum_tags || !dev->gc_sum_tags) {
+ yaffs_summary_deinit(dev);
+ return YAFFS_FAIL;
+ }
+
+ yaffs_summary_clear(dev);
+
+ return YAFFS_OK;
+}
+
+static unsigned yaffs_summary_sum(struct yaffs_dev *dev)
+{
+ u8 *sum_buffer = (u8 *)dev->sum_tags;
+ int i;
+ unsigned sum = 0;
+
+ i = sizeof(struct yaffs_summary_tags) *
+ dev->chunks_per_summary;
+ while (i > 0) {
+ sum += *sum_buffer;
+ sum_buffer++;
+ i--;
+ }
+
+ return sum;
+}
+
+static int yaffs_summary_write(struct yaffs_dev *dev, int blk)
+{
+ struct yaffs_ext_tags tags;
+ u8 *buffer;
+ u8 *sum_buffer = (u8 *)dev->sum_tags;
+ int n_bytes;
+ int chunk_in_nand;
+ int chunk_in_block;
+ int result;
+ int this_tx;
+ struct yaffs_summary_header hdr;
+ int sum_bytes_per_chunk = dev->data_bytes_per_chunk - sizeof(hdr);
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, blk);
+
+ buffer = yaffs_get_temp_buffer(dev);
+ n_bytes = sizeof(struct yaffs_summary_tags) *
+ dev->chunks_per_summary;
+ memset(&tags, 0, sizeof(struct yaffs_ext_tags));
+ tags.obj_id = YAFFS_OBJECTID_SUMMARY;
+ tags.chunk_id = 1;
+ chunk_in_block = dev->chunks_per_summary;
+ chunk_in_nand = dev->alloc_block * dev->param.chunks_per_block +
+ dev->chunks_per_summary;
+ hdr.version = YAFFS_SUMMARY_VERSION;
+ hdr.block = blk;
+ hdr.seq = bi->seq_number;
+ hdr.sum = yaffs_summary_sum(dev);
+
+ do {
+ this_tx = n_bytes;
+ if (this_tx > sum_bytes_per_chunk)
+ this_tx = sum_bytes_per_chunk;
+ memcpy(buffer, &hdr, sizeof(hdr));
+ memcpy(buffer + sizeof(hdr), sum_buffer, this_tx);
+ tags.n_bytes = this_tx + sizeof(hdr);
+ result = yaffs_wr_chunk_tags_nand(dev, chunk_in_nand,
+ buffer, &tags);
+
+ if (result != YAFFS_OK)
+ break;
+ yaffs_set_chunk_bit(dev, blk, chunk_in_block);
+ bi->pages_in_use++;
+ dev->n_free_chunks--;
+
+ n_bytes -= this_tx;
+ sum_buffer += this_tx;
+ chunk_in_nand++;
+ chunk_in_block++;
+ tags.chunk_id++;
+ } while (result == YAFFS_OK && n_bytes > 0);
+ yaffs_release_temp_buffer(dev, buffer);
+
+
+ if (result == YAFFS_OK)
+ bi->has_summary = 1;
+
+
+ return result;
+}
+
+int yaffs_summary_read(struct yaffs_dev *dev,
+ struct yaffs_summary_tags *st,
+ int blk)
+{
+ struct yaffs_ext_tags tags;
+ u8 *buffer;
+ u8 *sum_buffer = (u8 *)st;
+ int n_bytes;
+ int chunk_id;
+ int chunk_in_nand;
+ int chunk_in_block;
+ int result;
+ int this_tx;
+ struct yaffs_summary_header hdr;
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, blk);
+ int sum_bytes_per_chunk = dev->data_bytes_per_chunk - sizeof(hdr);
+
+ buffer = yaffs_get_temp_buffer(dev);
+ n_bytes = sizeof(struct yaffs_summary_tags) * dev->chunks_per_summary;
+ chunk_in_block = dev->chunks_per_summary;
+ chunk_in_nand = blk * dev->param.chunks_per_block +
+ dev->chunks_per_summary;
+ chunk_id = 1;
+ do {
+ this_tx = n_bytes;
+ if (this_tx > sum_bytes_per_chunk)
+ this_tx = sum_bytes_per_chunk;
+ result = yaffs_rd_chunk_tags_nand(dev, chunk_in_nand,
+ buffer, &tags);
+
+ if (tags.chunk_id != chunk_id ||
+ tags.obj_id != YAFFS_OBJECTID_SUMMARY ||
+ tags.chunk_used == 0 ||
+ tags.ecc_result > YAFFS_ECC_RESULT_FIXED ||
+ tags.n_bytes != (this_tx + sizeof(hdr)))
+ result = YAFFS_FAIL;
+ if (result != YAFFS_OK)
+ break;
+
+ if (st == dev->sum_tags) {
+ /* If we're scanning then update the block info */
+ yaffs_set_chunk_bit(dev, blk, chunk_in_block);
+ bi->pages_in_use++;
+ }
+ memcpy(&hdr, buffer, sizeof(hdr));
+ memcpy(sum_buffer, buffer + sizeof(hdr), this_tx);
+ n_bytes -= this_tx;
+ sum_buffer += this_tx;
+ chunk_in_nand++;
+ chunk_in_block++;
+ chunk_id++;
+ } while (result == YAFFS_OK && n_bytes > 0);
+ yaffs_release_temp_buffer(dev, buffer);
+
+ if (result == YAFFS_OK) {
+ /* Verify header */
+ if (hdr.version != YAFFS_SUMMARY_VERSION ||
+ hdr.block != blk ||
+ hdr.seq != bi->seq_number ||
+ hdr.sum != yaffs_summary_sum(dev))
+ result = YAFFS_FAIL;
+ }
+
+ if (st == dev->sum_tags && result == YAFFS_OK)
+ bi->has_summary = 1;
+
+ return result;
+}
+
+int yaffs_summary_add(struct yaffs_dev *dev,
+ struct yaffs_ext_tags *tags,
+ int chunk_in_nand)
+{
+ struct yaffs_packed_tags2_tags_only tags_only;
+ struct yaffs_summary_tags *sum_tags;
+ int block_in_nand = chunk_in_nand / dev->param.chunks_per_block;
+ int chunk_in_block = chunk_in_nand % dev->param.chunks_per_block;
+
+ if (!dev->sum_tags)
+ return YAFFS_OK;
+
+ if (chunk_in_block >= 0 && chunk_in_block < dev->chunks_per_summary) {
+ yaffs_pack_tags2_tags_only(&tags_only, tags);
+ sum_tags = &dev->sum_tags[chunk_in_block];
+ sum_tags->chunk_id = tags_only.chunk_id;
+ sum_tags->n_bytes = tags_only.n_bytes;
+ sum_tags->obj_id = tags_only.obj_id;
+
+ if (chunk_in_block == dev->chunks_per_summary - 1) {
+ /* Time to write out the summary */
+ yaffs_summary_write(dev, block_in_nand);
+ yaffs_summary_clear(dev);
+ yaffs_skip_rest_of_block(dev);
+ }
+ }
+ return YAFFS_OK;
+}
+
+int yaffs_summary_fetch(struct yaffs_dev *dev,
+ struct yaffs_ext_tags *tags,
+ int chunk_in_block)
+{
+ struct yaffs_packed_tags2_tags_only tags_only;
+ struct yaffs_summary_tags *sum_tags;
+ if (chunk_in_block >= 0 && chunk_in_block < dev->chunks_per_summary) {
+ sum_tags = &dev->sum_tags[chunk_in_block];
+ tags_only.chunk_id = sum_tags->chunk_id;
+ tags_only.n_bytes = sum_tags->n_bytes;
+ tags_only.obj_id = sum_tags->obj_id;
+ yaffs_unpack_tags2_tags_only(tags, &tags_only);
+ return YAFFS_OK;
+ }
+ return YAFFS_FAIL;
+}
+
+void yaffs_summary_gc(struct yaffs_dev *dev, int blk)
+{
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, blk);
+ int i;
+
+ if (!bi->has_summary)
+ return;
+
+ for (i = dev->chunks_per_summary;
+ i < dev->param.chunks_per_block;
+ i++) {
+ if (yaffs_check_chunk_bit(dev, blk, i)) {
+ yaffs_clear_chunk_bit(dev, blk, i);
+ bi->pages_in_use--;
+ dev->n_free_chunks++;
+ }
+ }
+}
diff --git a/fs/yaffs2/yaffs_summary.h b/fs/yaffs2/yaffs_summary.h
new file mode 100644
index 0000000000..be141d0733
--- /dev/null
+++ b/fs/yaffs2/yaffs_summary.h
@@ -0,0 +1,37 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YAFFS_SUMMARY_H__
+#define __YAFFS_SUMMARY_H__
+
+#include "yaffs_packedtags2.h"
+
+
+int yaffs_summary_init(struct yaffs_dev *dev);
+void yaffs_summary_deinit(struct yaffs_dev *dev);
+
+int yaffs_summary_add(struct yaffs_dev *dev,
+ struct yaffs_ext_tags *tags,
+ int chunk_in_block);
+int yaffs_summary_fetch(struct yaffs_dev *dev,
+ struct yaffs_ext_tags *tags,
+ int chunk_in_block);
+int yaffs_summary_read(struct yaffs_dev *dev,
+ struct yaffs_summary_tags *st,
+ int blk);
+void yaffs_summary_gc(struct yaffs_dev *dev, int blk);
+
+
+#endif
diff --git a/fs/yaffs2/yaffs_tagscompat.c b/fs/yaffs2/yaffs_tagscompat.c
index e872323b2f..9ac5896da3 100644
--- a/fs/yaffs2/yaffs_tagscompat.c
+++ b/fs/yaffs2/yaffs_tagscompat.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -11,63 +11,27 @@
* published by the Free Software Foundation.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-
#include "yaffs_guts.h"
#include "yaffs_tagscompat.h"
#include "yaffs_ecc.h"
+#include "yaffs_getblockinfo.h"
+#include "yaffs_trace.h"
+
+static void yaffs_handle_rd_data_error(struct yaffs_dev *dev, int nand_chunk);
-static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND);
-#ifdef NOTYET
-static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND);
-static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_Spare * spare);
-static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
- const yaffs_Spare * spare);
-static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND);
-#endif
-
-static const char yaffs_countBitsTable[256] = {
- 0, 1, 1, 2, 1, 2, 2, 3, 1, 2, 2, 3, 2, 3, 3, 4,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 1, 2, 2, 3, 2, 3, 3, 4, 2, 3, 3, 4, 3, 4, 4, 5,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 2, 3, 3, 4, 3, 4, 4, 5, 3, 4, 4, 5, 4, 5, 5, 6,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 3, 4, 4, 5, 4, 5, 5, 6, 4, 5, 5, 6, 5, 6, 6, 7,
- 4, 5, 5, 6, 5, 6, 6, 7, 5, 6, 6, 7, 6, 7, 7, 8
-};
-
-int yaffs_CountBits(__u8 x)
-{
- int retVal;
- retVal = yaffs_countBitsTable[x];
- return retVal;
-}
/********** Tags ECC calculations *********/
-void yaffs_CalcECC(const __u8 * data, yaffs_Spare * spare)
+void yaffs_calc_ecc(const u8 *data, struct yaffs_spare *spare)
{
- yaffs_ECCCalculate(data, spare->ecc1);
- yaffs_ECCCalculate(&data[256], spare->ecc2);
+ yaffs_ecc_calc(data, spare->ecc1);
+ yaffs_ecc_calc(&data[256], spare->ecc2);
}
-void yaffs_CalcTagsECC(yaffs_Tags * tags)
+void yaffs_calc_tags_ecc(struct yaffs_tags *tags)
{
/* Calculate an ecc */
-
- unsigned char *b = ((yaffs_TagsUnion *) tags)->asBytes;
+ unsigned char *b = ((union yaffs_tags_union *)tags)->as_bytes;
unsigned i, j;
unsigned ecc = 0;
unsigned bit = 0;
@@ -77,34 +41,31 @@ void yaffs_CalcTagsECC(yaffs_Tags * tags)
for (i = 0; i < 8; i++) {
for (j = 1; j & 0xff; j <<= 1) {
bit++;
- if (b[i] & j) {
+ if (b[i] & j)
ecc ^= bit;
- }
}
}
-
tags->ecc = ecc;
-
}
-int yaffs_CheckECCOnTags(yaffs_Tags * tags)
+int yaffs_check_tags_ecc(struct yaffs_tags *tags)
{
unsigned ecc = tags->ecc;
- yaffs_CalcTagsECC(tags);
+ yaffs_calc_tags_ecc(tags);
ecc ^= tags->ecc;
if (ecc && ecc <= 64) {
/* TODO: Handle the failure better. Retire? */
- unsigned char *b = ((yaffs_TagsUnion *) tags)->asBytes;
+ unsigned char *b = ((union yaffs_tags_union *)tags)->as_bytes;
ecc--;
b[ecc / 8] ^= (1 << (ecc & 7));
/* Now recvalc the ecc */
- yaffs_CalcTagsECC(tags);
+ yaffs_calc_tags_ecc(tags);
return 1; /* recovered error */
} else if (ecc) {
@@ -112,235 +73,202 @@ int yaffs_CheckECCOnTags(yaffs_Tags * tags)
/* TODO Need to do somethiong here */
return -1; /* unrecovered error */
}
-
return 0;
}
/********** Tags **********/
-static void yaffs_LoadTagsIntoSpare(yaffs_Spare * sparePtr,
- yaffs_Tags * tagsPtr)
+static void yaffs_load_tags_to_spare(struct yaffs_spare *spare_ptr,
+ struct yaffs_tags *tags_ptr)
{
- yaffs_TagsUnion *tu = (yaffs_TagsUnion *) tagsPtr;
-
- yaffs_CalcTagsECC(tagsPtr);
-
- sparePtr->tagByte0 = tu->asBytes[0];
- sparePtr->tagByte1 = tu->asBytes[1];
- sparePtr->tagByte2 = tu->asBytes[2];
- sparePtr->tagByte3 = tu->asBytes[3];
- sparePtr->tagByte4 = tu->asBytes[4];
- sparePtr->tagByte5 = tu->asBytes[5];
- sparePtr->tagByte6 = tu->asBytes[6];
- sparePtr->tagByte7 = tu->asBytes[7];
+ union yaffs_tags_union *tu = (union yaffs_tags_union *)tags_ptr;
+
+ yaffs_calc_tags_ecc(tags_ptr);
+
+ spare_ptr->tb0 = tu->as_bytes[0];
+ spare_ptr->tb1 = tu->as_bytes[1];
+ spare_ptr->tb2 = tu->as_bytes[2];
+ spare_ptr->tb3 = tu->as_bytes[3];
+ spare_ptr->tb4 = tu->as_bytes[4];
+ spare_ptr->tb5 = tu->as_bytes[5];
+ spare_ptr->tb6 = tu->as_bytes[6];
+ spare_ptr->tb7 = tu->as_bytes[7];
}
-static void yaffs_GetTagsFromSpare(yaffs_Device * dev, yaffs_Spare * sparePtr,
- yaffs_TagsUnion *tu)
+static void yaffs_get_tags_from_spare(struct yaffs_dev *dev,
+ struct yaffs_spare *spare_ptr,
+ struct yaffs_tags *tags_ptr)
{
+ union yaffs_tags_union *tu = (union yaffs_tags_union *)tags_ptr;
int result;
- tu->asBytes[0] = sparePtr->tagByte0;
- tu->asBytes[1] = sparePtr->tagByte1;
- tu->asBytes[2] = sparePtr->tagByte2;
- tu->asBytes[3] = sparePtr->tagByte3;
- tu->asBytes[4] = sparePtr->tagByte4;
- tu->asBytes[5] = sparePtr->tagByte5;
- tu->asBytes[6] = sparePtr->tagByte6;
- tu->asBytes[7] = sparePtr->tagByte7;
-
- result = yaffs_CheckECCOnTags(&tu->asTags);
- if (result > 0) {
- dev->tagsEccFixed++;
- } else if (result < 0) {
- dev->tagsEccUnfixed++;
- }
+ tu->as_bytes[0] = spare_ptr->tb0;
+ tu->as_bytes[1] = spare_ptr->tb1;
+ tu->as_bytes[2] = spare_ptr->tb2;
+ tu->as_bytes[3] = spare_ptr->tb3;
+ tu->as_bytes[4] = spare_ptr->tb4;
+ tu->as_bytes[5] = spare_ptr->tb5;
+ tu->as_bytes[6] = spare_ptr->tb6;
+ tu->as_bytes[7] = spare_ptr->tb7;
+
+ result = yaffs_check_tags_ecc(tags_ptr);
+ if (result > 0)
+ dev->n_tags_ecc_fixed++;
+ else if (result < 0)
+ dev->n_tags_ecc_unfixed++;
}
-static void yaffs_SpareInitialise(yaffs_Spare * spare)
+static void yaffs_spare_init(struct yaffs_spare *spare)
{
- memset(spare, 0xFF, sizeof(yaffs_Spare));
+ memset(spare, 0xff, sizeof(struct yaffs_spare));
}
-static int yaffs_WriteChunkToNAND(struct yaffs_DeviceStruct *dev,
- int chunkInNAND, const __u8 * data,
- yaffs_Spare * spare)
+static int yaffs_wr_nand(struct yaffs_dev *dev,
+ int nand_chunk, const u8 *data,
+ struct yaffs_spare *spare)
{
- if (chunkInNAND < dev->startBlock * dev->nChunksPerBlock) {
- T(YAFFS_TRACE_ERROR,
- (TSTR("**>> yaffs chunk %d is not valid" TENDSTR),
- chunkInNAND));
+ if (nand_chunk < dev->param.start_block * dev->param.chunks_per_block) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>> yaffs chunk %d is not valid",
+ nand_chunk);
return YAFFS_FAIL;
}
- dev->nPageWrites++;
- return dev->writeChunkToNAND(dev, chunkInNAND, data, spare);
+ return dev->param.write_chunk_fn(dev, nand_chunk, data, spare);
}
-static int yaffs_ReadChunkFromNAND(struct yaffs_DeviceStruct *dev,
- int chunkInNAND,
- __u8 * data,
- yaffs_Spare * spare,
- yaffs_ECCResult * eccResult,
- int doErrorCorrection)
+static int yaffs_rd_chunk_nand(struct yaffs_dev *dev,
+ int nand_chunk,
+ u8 *data,
+ struct yaffs_spare *spare,
+ enum yaffs_ecc_result *ecc_result,
+ int correct_errors)
{
- int retVal;
- yaffs_Spare localSpare;
-
- dev->nPageReads++;
+ int ret_val;
+ struct yaffs_spare local_spare;
- if (!spare && data) {
+ if (!spare) {
/* If we don't have a real spare, then we use a local one. */
/* Need this for the calculation of the ecc */
- spare = &localSpare;
+ spare = &local_spare;
}
- if (!dev->useNANDECC) {
- retVal = dev->readChunkFromNAND(dev, chunkInNAND, data, spare);
- if (data && doErrorCorrection) {
+ if (!dev->param.use_nand_ecc) {
+ ret_val =
+ dev->param.read_chunk_fn(dev, nand_chunk, data, spare);
+ if (data && correct_errors) {
/* Do ECC correction */
/* Todo handle any errors */
- int eccResult1, eccResult2;
- __u8 calcEcc[3];
-
- yaffs_ECCCalculate(data, calcEcc);
- eccResult1 =
- yaffs_ECCCorrect(data, spare->ecc1, calcEcc);
- yaffs_ECCCalculate(&data[256], calcEcc);
- eccResult2 =
- yaffs_ECCCorrect(&data[256], spare->ecc2, calcEcc);
-
- if (eccResult1 > 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>yaffs ecc error fix performed on chunk %d:0"
- TENDSTR), chunkInNAND));
- dev->eccFixed++;
- } else if (eccResult1 < 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>yaffs ecc error unfixed on chunk %d:0"
- TENDSTR), chunkInNAND));
- dev->eccUnfixed++;
+ int ecc_result1, ecc_result2;
+ u8 calc_ecc[3];
+
+ yaffs_ecc_calc(data, calc_ecc);
+ ecc_result1 =
+ yaffs_ecc_correct(data, spare->ecc1, calc_ecc);
+ yaffs_ecc_calc(&data[256], calc_ecc);
+ ecc_result2 =
+ yaffs_ecc_correct(&data[256], spare->ecc2,
+ calc_ecc);
+
+ if (ecc_result1 > 0) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>yaffs ecc error fix performed on chunk %d:0",
+ nand_chunk);
+ dev->n_ecc_fixed++;
+ } else if (ecc_result1 < 0) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>yaffs ecc error unfixed on chunk %d:0",
+ nand_chunk);
+ dev->n_ecc_unfixed++;
}
- if (eccResult2 > 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>yaffs ecc error fix performed on chunk %d:1"
- TENDSTR), chunkInNAND));
- dev->eccFixed++;
- } else if (eccResult2 < 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>yaffs ecc error unfixed on chunk %d:1"
- TENDSTR), chunkInNAND));
- dev->eccUnfixed++;
+ if (ecc_result2 > 0) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>yaffs ecc error fix performed on chunk %d:1",
+ nand_chunk);
+ dev->n_ecc_fixed++;
+ } else if (ecc_result2 < 0) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>yaffs ecc error unfixed on chunk %d:1",
+ nand_chunk);
+ dev->n_ecc_unfixed++;
}
- if (eccResult1 || eccResult2) {
+ if (ecc_result1 || ecc_result2) {
/* We had a data problem on this page */
- yaffs_HandleReadDataError(dev, chunkInNAND);
+ yaffs_handle_rd_data_error(dev, nand_chunk);
}
- if (eccResult1 < 0 || eccResult2 < 0)
- *eccResult = YAFFS_ECC_RESULT_UNFIXED;
- else if (eccResult1 > 0 || eccResult2 > 0)
- *eccResult = YAFFS_ECC_RESULT_FIXED;
+ if (ecc_result1 < 0 || ecc_result2 < 0)
+ *ecc_result = YAFFS_ECC_RESULT_UNFIXED;
+ else if (ecc_result1 > 0 || ecc_result2 > 0)
+ *ecc_result = YAFFS_ECC_RESULT_FIXED;
else
- *eccResult = YAFFS_ECC_RESULT_NO_ERROR;
+ *ecc_result = YAFFS_ECC_RESULT_NO_ERROR;
}
} else {
/* Must allocate enough memory for spare+2*sizeof(int) */
/* for ecc results from device. */
- struct yaffs_NANDSpare nspare;
- retVal =
- dev->readChunkFromNAND(dev, chunkInNAND, data,
- (yaffs_Spare *) & nspare);
- memcpy(spare, &nspare, sizeof(yaffs_Spare));
- if (data && doErrorCorrection) {
+ struct yaffs_nand_spare nspare;
+
+ memset(&nspare, 0, sizeof(nspare));
+
+ ret_val = dev->param.read_chunk_fn(dev, nand_chunk, data,
+ (struct yaffs_spare *)
+ &nspare);
+ memcpy(spare, &nspare, sizeof(struct yaffs_spare));
+ if (data && correct_errors) {
if (nspare.eccres1 > 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>mtd ecc error fix performed on chunk %d:0"
- TENDSTR), chunkInNAND));
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>mtd ecc error fix performed on chunk %d:0",
+ nand_chunk);
} else if (nspare.eccres1 < 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>mtd ecc error unfixed on chunk %d:0"
- TENDSTR), chunkInNAND));
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>mtd ecc error unfixed on chunk %d:0",
+ nand_chunk);
}
if (nspare.eccres2 > 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>mtd ecc error fix performed on chunk %d:1"
- TENDSTR), chunkInNAND));
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>mtd ecc error fix performed on chunk %d:1",
+ nand_chunk);
} else if (nspare.eccres2 < 0) {
- T(YAFFS_TRACE_ERROR,
- (TSTR
- ("**>>mtd ecc error unfixed on chunk %d:1"
- TENDSTR), chunkInNAND));
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "**>>mtd ecc error unfixed on chunk %d:1",
+ nand_chunk);
}
if (nspare.eccres1 || nspare.eccres2) {
/* We had a data problem on this page */
- yaffs_HandleReadDataError(dev, chunkInNAND);
+ yaffs_handle_rd_data_error(dev, nand_chunk);
}
if (nspare.eccres1 < 0 || nspare.eccres2 < 0)
- *eccResult = YAFFS_ECC_RESULT_UNFIXED;
+ *ecc_result = YAFFS_ECC_RESULT_UNFIXED;
else if (nspare.eccres1 > 0 || nspare.eccres2 > 0)
- *eccResult = YAFFS_ECC_RESULT_FIXED;
+ *ecc_result = YAFFS_ECC_RESULT_FIXED;
else
- *eccResult = YAFFS_ECC_RESULT_NO_ERROR;
+ *ecc_result = YAFFS_ECC_RESULT_NO_ERROR;
}
}
- return retVal;
+ return ret_val;
}
-#ifdef NOTYET
-static int yaffs_CheckChunkErased(struct yaffs_DeviceStruct *dev,
- int chunkInNAND)
-{
-
- static int init = 0;
- static __u8 cmpbuf[YAFFS_BYTES_PER_CHUNK];
- static __u8 data[YAFFS_BYTES_PER_CHUNK];
- /* Might as well always allocate the larger size for */
- /* dev->useNANDECC == true; */
- static __u8 spare[sizeof(struct yaffs_NANDSpare)];
-
- dev->readChunkFromNAND(dev, chunkInNAND, data, (yaffs_Spare *) spare);
-
- if (!init) {
- memset(cmpbuf, 0xff, YAFFS_BYTES_PER_CHUNK);
- init = 1;
- }
-
- if (memcmp(cmpbuf, data, YAFFS_BYTES_PER_CHUNK))
- return YAFFS_FAIL;
- if (memcmp(cmpbuf, spare, 16))
- return YAFFS_FAIL;
-
- return YAFFS_OK;
-
-}
-#endif
-
/*
* Functions for robustisizing
*/
-static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND)
+static void yaffs_handle_rd_data_error(struct yaffs_dev *dev, int nand_chunk)
{
- int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
+ int flash_block = nand_chunk / dev->param.chunks_per_block;
/* Mark the block for retirement */
- yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
- T(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
- (TSTR("**>>Block %d marked for retirement" TENDSTR), blockInNAND));
+ yaffs_get_block_info(dev, flash_block + dev->block_offset)->
+ needs_retiring = 1;
+ yaffs_trace(YAFFS_TRACE_ERROR | YAFFS_TRACE_BAD_BLOCKS,
+ "**>>Block %d marked for retirement",
+ flash_block);
/* TODO:
* Just do a garbage collection on the affected block
@@ -349,184 +277,131 @@ static void yaffs_HandleReadDataError(yaffs_Device * dev, int chunkInNAND)
*/
}
-#ifdef NOTYET
-static void yaffs_CheckWrittenBlock(yaffs_Device * dev, int chunkInNAND)
+int yaffs_tags_compat_wr(struct yaffs_dev *dev,
+ int nand_chunk,
+ const u8 *data, const struct yaffs_ext_tags *ext_tags)
{
-}
+ struct yaffs_spare spare;
+ struct yaffs_tags tags;
-static void yaffs_HandleWriteChunkOk(yaffs_Device * dev, int chunkInNAND,
- const __u8 * data,
- const yaffs_Spare * spare)
-{
-}
+ yaffs_spare_init(&spare);
-static void yaffs_HandleUpdateChunk(yaffs_Device * dev, int chunkInNAND,
- const yaffs_Spare * spare)
-{
-}
+ if (ext_tags->is_deleted)
+ spare.page_status = 0;
+ else {
+ tags.obj_id = ext_tags->obj_id;
+ tags.chunk_id = ext_tags->chunk_id;
-static void yaffs_HandleWriteChunkError(yaffs_Device * dev, int chunkInNAND)
-{
- int blockInNAND = chunkInNAND / dev->nChunksPerBlock;
-
- /* Mark the block for retirement */
- yaffs_GetBlockInfo(dev, blockInNAND)->needsRetiring = 1;
- /* Delete the chunk */
- yaffs_DeleteChunk(dev, chunkInNAND, 1, __LINE__);
-}
-
-static int yaffs_VerifyCompare(const __u8 * d0, const __u8 * d1,
- const yaffs_Spare * s0, const yaffs_Spare * s1)
-{
-
- if (memcmp(d0, d1, YAFFS_BYTES_PER_CHUNK) != 0 ||
- s0->tagByte0 != s1->tagByte0 ||
- s0->tagByte1 != s1->tagByte1 ||
- s0->tagByte2 != s1->tagByte2 ||
- s0->tagByte3 != s1->tagByte3 ||
- s0->tagByte4 != s1->tagByte4 ||
- s0->tagByte5 != s1->tagByte5 ||
- s0->tagByte6 != s1->tagByte6 ||
- s0->tagByte7 != s1->tagByte7 ||
- s0->ecc1[0] != s1->ecc1[0] ||
- s0->ecc1[1] != s1->ecc1[1] ||
- s0->ecc1[2] != s1->ecc1[2] ||
- s0->ecc2[0] != s1->ecc2[0] ||
- s0->ecc2[1] != s1->ecc2[1] || s0->ecc2[2] != s1->ecc2[2]) {
- return 0;
- }
+ tags.n_bytes_lsb = ext_tags->n_bytes & (1024 - 1);
- return 1;
-}
-#endif /* NOTYET */
-
-int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
- int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags *
- eTags)
-{
- yaffs_Spare spare;
- yaffs_Tags tags;
-
- yaffs_SpareInitialise(&spare);
+ if (dev->data_bytes_per_chunk >= 1024)
+ tags.n_bytes_msb = (ext_tags->n_bytes >> 10) & 3;
+ else
+ tags.n_bytes_msb = 3;
- if (eTags->chunkDeleted) {
- spare.pageStatus = 0;
- } else {
- tags.objectId = eTags->objectId;
- tags.chunkId = eTags->chunkId;
- tags.byteCount = eTags->byteCount;
- tags.serialNumber = eTags->serialNumber;
+ tags.serial_number = ext_tags->serial_number;
- if (!dev->useNANDECC && data) {
- yaffs_CalcECC(data, &spare);
- }
- yaffs_LoadTagsIntoSpare(&spare, &tags);
+ if (!dev->param.use_nand_ecc && data)
+ yaffs_calc_ecc(data, &spare);
+ yaffs_load_tags_to_spare(&spare, &tags);
}
-
- return yaffs_WriteChunkToNAND(dev, chunkInNAND, data, &spare);
+ return yaffs_wr_nand(dev, nand_chunk, data, &spare);
}
-int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
- int chunkInNAND,
- __u8 * data,
- yaffs_ExtendedTags * eTags)
+int yaffs_tags_compat_rd(struct yaffs_dev *dev,
+ int nand_chunk,
+ u8 *data, struct yaffs_ext_tags *ext_tags)
{
-
- yaffs_Spare spare;
- yaffs_TagsUnion tags;
- yaffs_ECCResult eccResult;
-
- static yaffs_Spare spareFF;
+ struct yaffs_spare spare;
+ struct yaffs_tags tags;
+ enum yaffs_ecc_result ecc_result = YAFFS_ECC_RESULT_UNKNOWN;
+ static struct yaffs_spare spare_ff;
static int init;
+ int deleted;
if (!init) {
- memset(&spareFF, 0xFF, sizeof(spareFF));
+ memset(&spare_ff, 0xff, sizeof(spare_ff));
init = 1;
}
- if (yaffs_ReadChunkFromNAND
- (dev, chunkInNAND, data, &spare, &eccResult, 1)) {
- /* eTags may be NULL */
- if (eTags) {
-
- int deleted =
- (yaffs_CountBits(spare.pageStatus) < 7) ? 1 : 0;
-
- eTags->chunkDeleted = deleted;
- eTags->eccResult = eccResult;
- eTags->blockBad = 0; /* We're reading it */
- /* therefore it is not a bad block */
- eTags->chunkUsed =
- (memcmp(&spareFF, &spare, sizeof(spareFF)) !=
- 0) ? 1 : 0;
-
- if (eTags->chunkUsed) {
- yaffs_GetTagsFromSpare(dev, &spare, &tags);
-
- eTags->objectId = tags.asTags.objectId;
- eTags->chunkId = tags.asTags.chunkId;
- eTags->byteCount = tags.asTags.byteCount;
- eTags->serialNumber = tags.asTags.serialNumber;
- }
- }
+ if (!yaffs_rd_chunk_nand(dev, nand_chunk,
+ data, &spare, &ecc_result, 1))
+ return YAFFS_FAIL;
+ /* ext_tags may be NULL */
+ if (!ext_tags)
return YAFFS_OK;
- } else {
- return YAFFS_FAIL;
+
+ deleted = (hweight8(spare.page_status) < 7) ? 1 : 0;
+
+ ext_tags->is_deleted = deleted;
+ ext_tags->ecc_result = ecc_result;
+ ext_tags->block_bad = 0; /* We're reading it */
+ /* therefore it is not a bad block */
+ ext_tags->chunk_used =
+ memcmp(&spare_ff, &spare, sizeof(spare_ff)) ? 1 : 0;
+
+ if (ext_tags->chunk_used) {
+ yaffs_get_tags_from_spare(dev, &spare, &tags);
+ ext_tags->obj_id = tags.obj_id;
+ ext_tags->chunk_id = tags.chunk_id;
+ ext_tags->n_bytes = tags.n_bytes_lsb;
+
+ if (dev->data_bytes_per_chunk >= 1024)
+ ext_tags->n_bytes |=
+ (((unsigned)tags.n_bytes_msb) << 10);
+
+ ext_tags->serial_number = tags.serial_number;
}
+
+ return YAFFS_OK;
}
-int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
- int blockInNAND)
+int yaffs_tags_compat_mark_bad(struct yaffs_dev *dev, int flash_block)
{
+ struct yaffs_spare spare;
- yaffs_Spare spare;
-
- memset(&spare, 0xff, sizeof(yaffs_Spare));
+ memset(&spare, 0xff, sizeof(struct yaffs_spare));
- spare.blockStatus = 'Y';
+ spare.block_status = 'Y';
- yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock, NULL,
- &spare);
- yaffs_WriteChunkToNAND(dev, blockInNAND * dev->nChunksPerBlock + 1,
- NULL, &spare);
+ yaffs_wr_nand(dev, flash_block * dev->param.chunks_per_block, NULL,
+ &spare);
+ yaffs_wr_nand(dev, flash_block * dev->param.chunks_per_block + 1,
+ NULL, &spare);
return YAFFS_OK;
-
}
-int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
- int blockNo, yaffs_BlockState *
- state,
- int *sequenceNumber)
+int yaffs_tags_compat_query_block(struct yaffs_dev *dev,
+ int block_no,
+ enum yaffs_block_state *state,
+ u32 *seq_number)
{
-
- yaffs_Spare spare0, spare1;
- static yaffs_Spare spareFF;
+ struct yaffs_spare spare0, spare1;
+ static struct yaffs_spare spare_ff;
static int init;
- yaffs_ECCResult dummy;
+ enum yaffs_ecc_result dummy;
if (!init) {
- memset(&spareFF, 0xFF, sizeof(spareFF));
+ memset(&spare_ff, 0xff, sizeof(spare_ff));
init = 1;
}
- *sequenceNumber = 0;
+ *seq_number = 0;
- yaffs_ReadChunkFromNAND(dev, blockNo * dev->nChunksPerBlock, NULL,
- &spare0, &dummy, 1);
- yaffs_ReadChunkFromNAND(dev, blockNo * dev->nChunksPerBlock + 1, NULL,
- &spare1, &dummy, 1);
+ yaffs_rd_chunk_nand(dev, block_no * dev->param.chunks_per_block, NULL,
+ &spare0, &dummy, 1);
+ yaffs_rd_chunk_nand(dev, block_no * dev->param.chunks_per_block + 1,
+ NULL, &spare1, &dummy, 1);
- if (yaffs_CountBits(spare0.blockStatus & spare1.blockStatus) < 7)
+ if (hweight8(spare0.block_status & spare1.block_status) < 7)
*state = YAFFS_BLOCK_STATE_DEAD;
- else if (memcmp(&spareFF, &spare0, sizeof(spareFF)) == 0)
+ else if (memcmp(&spare_ff, &spare0, sizeof(spare_ff)) == 0)
*state = YAFFS_BLOCK_STATE_EMPTY;
else
- *state = YAFFS_BLOCK_STATE_NEEDS_SCANNING;
+ *state = YAFFS_BLOCK_STATE_NEEDS_SCAN;
return YAFFS_OK;
}
diff --git a/fs/yaffs2/yaffs_tagscompat.h b/fs/yaffs2/yaffs_tagscompat.h
index a61e3ba14f..b3c6655772 100644
--- a/fs/yaffs2/yaffs_tagscompat.h
+++ b/fs/yaffs2/yaffs_tagscompat.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -17,24 +17,20 @@
#define __YAFFS_TAGSCOMPAT_H__
#include "yaffs_guts.h"
-int yaffs_TagsCompatabilityWriteChunkWithTagsToNAND(yaffs_Device * dev,
- int chunkInNAND,
- const __u8 * data,
- const yaffs_ExtendedTags *
- tags);
-int yaffs_TagsCompatabilityReadChunkWithTagsFromNAND(yaffs_Device * dev,
- int chunkInNAND,
- __u8 * data,
- yaffs_ExtendedTags *
- tags);
-int yaffs_TagsCompatabilityMarkNANDBlockBad(struct yaffs_DeviceStruct *dev,
- int blockNo);
-int yaffs_TagsCompatabilityQueryNANDBlock(struct yaffs_DeviceStruct *dev,
- int blockNo, yaffs_BlockState *
- state, int *sequenceNumber);
+int yaffs_tags_compat_wr(struct yaffs_dev *dev,
+ int nand_chunk,
+ const u8 *data, const struct yaffs_ext_tags *tags);
+int yaffs_tags_compat_rd(struct yaffs_dev *dev,
+ int nand_chunk,
+ u8 *data, struct yaffs_ext_tags *tags);
+int yaffs_tags_compat_mark_bad(struct yaffs_dev *dev, int block_no);
+int yaffs_tags_compat_query_block(struct yaffs_dev *dev,
+ int block_no,
+ enum yaffs_block_state *state,
+ u32 *seq_number);
-void yaffs_CalcTagsECC(yaffs_Tags * tags);
-int yaffs_CheckECCOnTags(yaffs_Tags * tags);
-int yaffs_CountBits(__u8 byte);
+void yaffs_calc_tags_ecc(struct yaffs_tags *tags);
+int yaffs_check_tags_ecc(struct yaffs_tags *tags);
+int yaffs_count_bits(u8 byte);
#endif
diff --git a/fs/yaffs2/yaffs_tagsvalidity.c b/fs/yaffs2/yaffs_tagsvalidity.c
deleted file mode 100644
index f588d3aa21..0000000000
--- a/fs/yaffs2/yaffs_tagsvalidity.c
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * 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.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-#include "yaffs_tagsvalidity.h"
-
-void yaffs_InitialiseTags(yaffs_ExtendedTags * tags)
-{
- memset(tags, 0, sizeof(yaffs_ExtendedTags));
- tags->validMarker0 = 0xAAAAAAAA;
- tags->validMarker1 = 0x55555555;
-}
-
-int yaffs_ValidateTags(yaffs_ExtendedTags * tags)
-{
- return (tags->validMarker0 == 0xAAAAAAAA &&
- tags->validMarker1 == 0x55555555);
-
-}
diff --git a/fs/yaffs2/yaffs_trace.h b/fs/yaffs2/yaffs_trace.h
new file mode 100644
index 0000000000..fd26054d39
--- /dev/null
+++ b/fs/yaffs2/yaffs_trace.h
@@ -0,0 +1,57 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YTRACE_H__
+#define __YTRACE_H__
+
+extern unsigned int yaffs_trace_mask;
+extern unsigned int yaffs_wr_attempts;
+
+/*
+ * Tracing flags.
+ * The flags masked in YAFFS_TRACE_ALWAYS are always traced.
+ */
+
+#define YAFFS_TRACE_OS 0x00000002
+#define YAFFS_TRACE_ALLOCATE 0x00000004
+#define YAFFS_TRACE_SCAN 0x00000008
+#define YAFFS_TRACE_BAD_BLOCKS 0x00000010
+#define YAFFS_TRACE_ERASE 0x00000020
+#define YAFFS_TRACE_GC 0x00000040
+#define YAFFS_TRACE_WRITE 0x00000080
+#define YAFFS_TRACE_TRACING 0x00000100
+#define YAFFS_TRACE_DELETION 0x00000200
+#define YAFFS_TRACE_BUFFERS 0x00000400
+#define YAFFS_TRACE_NANDACCESS 0x00000800
+#define YAFFS_TRACE_GC_DETAIL 0x00001000
+#define YAFFS_TRACE_SCAN_DEBUG 0x00002000
+#define YAFFS_TRACE_MTD 0x00004000
+#define YAFFS_TRACE_CHECKPOINT 0x00008000
+
+#define YAFFS_TRACE_VERIFY 0x00010000
+#define YAFFS_TRACE_VERIFY_NAND 0x00020000
+#define YAFFS_TRACE_VERIFY_FULL 0x00040000
+#define YAFFS_TRACE_VERIFY_ALL 0x000f0000
+
+#define YAFFS_TRACE_SYNC 0x00100000
+#define YAFFS_TRACE_BACKGROUND 0x00200000
+#define YAFFS_TRACE_LOCK 0x00400000
+#define YAFFS_TRACE_MOUNT 0x00800000
+
+#define YAFFS_TRACE_ERROR 0x40000000
+#define YAFFS_TRACE_BUG 0x80000000
+#define YAFFS_TRACE_ALWAYS 0xf0000000
+
+#endif
diff --git a/fs/yaffs2/yaffs_uboot_glue.c b/fs/yaffs2/yaffs_uboot_glue.c
new file mode 100644
index 0000000000..e113e4039e
--- /dev/null
+++ b/fs/yaffs2/yaffs_uboot_glue.c
@@ -0,0 +1,464 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2007 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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.
+ */
+
+/*
+ * yaffscfg.c The configuration for the "direct" use of yaffs.
+ *
+ * This is set up for u-boot.
+ *
+ * This version now uses the ydevconfig mechanism to set up partitions.
+ */
+
+#include <common.h>
+
+#include <config.h>
+#include "nand.h"
+#include "yaffscfg.h"
+#include "yaffsfs.h"
+#include "yaffs_packedtags2.h"
+#include "yaffs_mtdif.h"
+#include "yaffs_mtdif2.h"
+#if 0
+#include <errno.h>
+#else
+#include "malloc.h"
+#endif
+
+unsigned yaffs_trace_mask = 0x0; /* Disable logging */
+static int yaffs_errno;
+
+
+void yaffs_bug_fn(const char *fn, int n)
+{
+ printf("yaffs bug at %s:%d\n", fn, n);
+}
+
+void *yaffsfs_malloc(size_t x)
+{
+ return malloc(x);
+}
+
+void yaffsfs_free(void *x)
+{
+ free(x);
+}
+
+void yaffsfs_SetError(int err)
+{
+ yaffs_errno = err;
+}
+
+int yaffsfs_GetLastError(void)
+{
+ return yaffs_errno;
+}
+
+
+int yaffsfs_GetError(void)
+{
+ return yaffs_errno;
+}
+
+void yaffsfs_Lock(void)
+{
+}
+
+void yaffsfs_Unlock(void)
+{
+}
+
+__u32 yaffsfs_CurrentTime(void)
+{
+ return 0;
+}
+
+void *yaffs_malloc(size_t size)
+{
+ return malloc(size);
+}
+
+void yaffs_free(void *ptr)
+{
+ free(ptr);
+}
+
+void yaffsfs_LocalInitialisation(void)
+{
+ /* No locking used */
+}
+
+
+static const char *yaffs_file_type_str(struct yaffs_stat *stat)
+{
+ switch (stat->st_mode & S_IFMT) {
+ case S_IFREG: return "regular file";
+ case S_IFDIR: return "directory";
+ case S_IFLNK: return "symlink";
+ default: return "unknown";
+ }
+}
+
+static const char *yaffs_error_str(void)
+{
+ int error = yaffsfs_GetLastError();
+
+ if (error < 0)
+ error = -error;
+
+ switch (error) {
+ case EBUSY: return "Busy";
+ case ENODEV: return "No such device";
+ case EINVAL: return "Invalid parameter";
+ case ENFILE: return "Too many open files";
+ case EBADF: return "Bad handle";
+ case EACCES: return "Wrong permissions";
+ case EXDEV: return "Not on same device";
+ case ENOENT: return "No such entry";
+ case ENOSPC: return "Device full";
+ case EROFS: return "Read only file system";
+ case ERANGE: return "Range error";
+ case ENOTEMPTY: return "Not empty";
+ case ENAMETOOLONG: return "Name too long";
+ case ENOMEM: return "Out of memory";
+ case EFAULT: return "Fault";
+ case EEXIST: return "Name exists";
+ case ENOTDIR: return "Not a directory";
+ case EISDIR: return "Not permitted on a directory";
+ case ELOOP: return "Symlink loop";
+ case 0: return "No error";
+ default: return "Unknown error";
+ }
+}
+
+extern nand_info_t nand_info[];
+
+void cmd_yaffs_tracemask(unsigned set, unsigned mask)
+{
+ if (set)
+ yaffs_trace_mask = mask;
+
+ printf("yaffs trace mask: %08x\n", yaffs_trace_mask);
+}
+
+static int yaffs_regions_overlap(int a, int b, int x, int y)
+{
+ return (a <= x && x <= b) ||
+ (a <= y && y <= b) ||
+ (x <= a && a <= y) ||
+ (x <= b && b <= y);
+}
+
+void cmd_yaffs_devconfig(char *_mp, int flash_dev,
+ int start_block, int end_block)
+{
+ struct mtd_info *mtd = NULL;
+ struct yaffs_dev *dev = NULL;
+ struct yaffs_dev *chk;
+ char *mp = NULL;
+ struct nand_chip *chip;
+
+ dev = calloc(1, sizeof(*dev));
+ mp = strdup(_mp);
+
+ mtd = &nand_info[flash_dev];
+
+ if (!dev || !mp) {
+ /* Alloc error */
+ printf("Failed to allocate memory\n");
+ goto err;
+ }
+
+ if (flash_dev >= CONFIG_SYS_MAX_NAND_DEVICE) {
+ printf("Flash device invalid\n");
+ goto err;
+ }
+
+ if (end_block == 0)
+ end_block = mtd->size / mtd->erasesize - 1;
+
+ if (end_block < start_block) {
+ printf("Bad start/end\n");
+ goto err;
+ }
+
+ chip = mtd->priv;
+
+ /* Check for any conflicts */
+ yaffs_dev_rewind();
+ while (1) {
+ chk = yaffs_next_dev();
+ if (!chk)
+ break;
+ if (strcmp(chk->param.name, mp) == 0) {
+ printf("Mount point name already used\n");
+ goto err;
+ }
+ if (chk->driver_context == mtd &&
+ yaffs_regions_overlap(
+ chk->param.start_block, chk->param.end_block,
+ start_block, end_block)) {
+ printf("Region overlaps with partition %s\n",
+ chk->param.name);
+ goto err;
+ }
+
+ }
+
+ /* Seems sane, so configure */
+ memset(dev, 0, sizeof(*dev));
+ dev->param.name = mp;
+ dev->driver_context = mtd;
+ dev->param.start_block = start_block;
+ dev->param.end_block = end_block;
+ dev->param.chunks_per_block = mtd->erasesize / mtd->writesize;
+ dev->param.total_bytes_per_chunk = mtd->writesize;
+ dev->param.is_yaffs2 = 1;
+ dev->param.use_nand_ecc = 1;
+ dev->param.n_reserved_blocks = 5;
+ if (chip->ecc.layout->oobavail < sizeof(struct yaffs_packed_tags2))
+ dev->param.inband_tags = 1;
+ dev->param.n_caches = 10;
+ dev->param.write_chunk_tags_fn = nandmtd2_write_chunk_tags;
+ dev->param.read_chunk_tags_fn = nandmtd2_read_chunk_tags;
+ dev->param.erase_fn = nandmtd_EraseBlockInNAND;
+ dev->param.initialise_flash_fn = nandmtd_InitialiseNAND;
+ dev->param.bad_block_fn = nandmtd2_MarkNANDBlockBad;
+ dev->param.query_block_fn = nandmtd2_QueryNANDBlock;
+
+ yaffs_add_device(dev);
+
+ printf("Configures yaffs mount %s: dev %d start block %d, end block %d %s\n",
+ mp, flash_dev, start_block, end_block,
+ dev->param.inband_tags ? "using inband tags" : "");
+ return;
+
+err:
+ free(dev);
+ free(mp);
+}
+
+void cmd_yaffs_dev_ls(void)
+{
+ struct yaffs_dev *dev;
+ int flash_dev;
+ int free_space;
+
+ yaffs_dev_rewind();
+
+ while (1) {
+ dev = yaffs_next_dev();
+ if (!dev)
+ return;
+ flash_dev =
+ ((unsigned) dev->driver_context - (unsigned) nand_info)/
+ sizeof(nand_info[0]);
+ printf("%-10s %5d 0x%05x 0x%05x %s",
+ dev->param.name, flash_dev,
+ dev->param.start_block, dev->param.end_block,
+ dev->param.inband_tags ? "using inband tags, " : "");
+
+ free_space = yaffs_freespace(dev->param.name);
+ if (free_space < 0)
+ printf("not mounted\n");
+ else
+ printf("free 0x%x\n", free_space);
+
+ }
+}
+
+void make_a_file(char *yaffsName, char bval, int sizeOfFile)
+{
+ int outh;
+ int i;
+ unsigned char buffer[100];
+
+ outh = yaffs_open(yaffsName,
+ O_CREAT | O_RDWR | O_TRUNC,
+ S_IREAD | S_IWRITE);
+ if (outh < 0) {
+ printf("Error opening file: %d. %s\n", outh, yaffs_error_str());
+ return;
+ }
+
+ memset(buffer, bval, 100);
+
+ do {
+ i = sizeOfFile;
+ if (i > 100)
+ i = 100;
+ sizeOfFile -= i;
+
+ yaffs_write(outh, buffer, i);
+
+ } while (sizeOfFile > 0);
+
+
+ yaffs_close(outh);
+}
+
+void read_a_file(char *fn)
+{
+ int h;
+ int i = 0;
+ unsigned char b;
+
+ h = yaffs_open(fn, O_RDWR, 0);
+ if (h < 0) {
+ printf("File not found\n");
+ return;
+ }
+
+ while (yaffs_read(h, &b, 1) > 0) {
+ printf("%02x ", b);
+ i++;
+ if (i > 32) {
+ printf("\n");
+ i = 0;;
+ }
+ }
+ printf("\n");
+ yaffs_close(h);
+}
+
+void cmd_yaffs_mount(char *mp)
+{
+ int retval = yaffs_mount(mp);
+ if (retval < 0)
+ printf("Error mounting %s, return value: %d, %s\n", mp,
+ yaffsfs_GetError(), yaffs_error_str());
+}
+
+
+void cmd_yaffs_umount(char *mp)
+{
+ if (yaffs_unmount(mp) == -1)
+ printf("Error umounting %s, return value: %d, %s\n", mp,
+ yaffsfs_GetError(), yaffs_error_str());
+}
+
+void cmd_yaffs_write_file(char *yaffsName, char bval, int sizeOfFile)
+{
+ make_a_file(yaffsName, bval, sizeOfFile);
+}
+
+
+void cmd_yaffs_read_file(char *fn)
+{
+ read_a_file(fn);
+}
+
+
+void cmd_yaffs_mread_file(char *fn, char *addr)
+{
+ int h;
+ struct yaffs_stat s;
+
+ yaffs_stat(fn, &s);
+
+ printf("Copy %s to 0x%p... ", fn, addr);
+ h = yaffs_open(fn, O_RDWR, 0);
+ if (h < 0) {
+ printf("File not found\n");
+ return;
+ }
+
+ yaffs_read(h, addr, (int)s.st_size);
+ printf("\t[DONE]\n");
+
+ yaffs_close(h);
+}
+
+
+void cmd_yaffs_mwrite_file(char *fn, char *addr, int size)
+{
+ int outh;
+
+ outh = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
+ if (outh < 0)
+ printf("Error opening file: %d, %s\n", outh, yaffs_error_str());
+
+ yaffs_write(outh, addr, size);
+
+ yaffs_close(outh);
+}
+
+
+void cmd_yaffs_ls(const char *mountpt, int longlist)
+{
+ int i;
+ yaffs_DIR *d;
+ struct yaffs_dirent *de;
+ struct yaffs_stat stat;
+ char tempstr[255];
+
+ d = yaffs_opendir(mountpt);
+
+ if (!d) {
+ printf("opendir failed, %s\n", yaffs_error_str());
+ return;
+ }
+
+ for (i = 0; (de = yaffs_readdir(d)) != NULL; i++) {
+ if (longlist) {
+ sprintf(tempstr, "%s/%s", mountpt, de->d_name);
+ yaffs_lstat(tempstr, &stat);
+ printf("%-25s\t%7ld",
+ de->d_name,
+ (long)stat.st_size);
+ printf(" %5d %s\n",
+ stat.st_ino,
+ yaffs_file_type_str(&stat));
+ } else {
+ printf("%s\n", de->d_name);
+ }
+ }
+
+ yaffs_closedir(d);
+}
+
+
+void cmd_yaffs_mkdir(const char *dir)
+{
+ int retval = yaffs_mkdir(dir, 0);
+
+ if (retval < 0)
+ printf("yaffs_mkdir returning error: %d, %s\n",
+ retval, yaffs_error_str());
+}
+
+void cmd_yaffs_rmdir(const char *dir)
+{
+ int retval = yaffs_rmdir(dir);
+
+ if (retval < 0)
+ printf("yaffs_rmdir returning error: %d, %s\n",
+ retval, yaffs_error_str());
+}
+
+void cmd_yaffs_rm(const char *path)
+{
+ int retval = yaffs_unlink(path);
+
+ if (retval < 0)
+ printf("yaffs_unlink returning error: %d, %s\n",
+ retval, yaffs_error_str());
+}
+
+void cmd_yaffs_mv(const char *oldPath, const char *newPath)
+{
+ int retval = yaffs_rename(newPath, oldPath);
+
+ if (retval < 0)
+ printf("yaffs_unlink returning error: %d, %s\n",
+ retval, yaffs_error_str());
+}
diff --git a/fs/yaffs2/yaffs_verify.c b/fs/yaffs2/yaffs_verify.c
new file mode 100644
index 0000000000..97734a9e29
--- /dev/null
+++ b/fs/yaffs2/yaffs_verify.c
@@ -0,0 +1,526 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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 "yaffs_verify.h"
+#include "yaffs_trace.h"
+#include "yaffs_bitmap.h"
+#include "yaffs_getblockinfo.h"
+#include "yaffs_nand.h"
+
+int yaffs_skip_verification(struct yaffs_dev *dev)
+{
+ dev = dev;
+ return !(yaffs_trace_mask &
+ (YAFFS_TRACE_VERIFY | YAFFS_TRACE_VERIFY_FULL));
+}
+
+static int yaffs_skip_full_verification(struct yaffs_dev *dev)
+{
+ dev = dev;
+ return !(yaffs_trace_mask & (YAFFS_TRACE_VERIFY_FULL));
+}
+
+static int yaffs_skip_nand_verification(struct yaffs_dev *dev)
+{
+ dev = dev;
+ return !(yaffs_trace_mask & (YAFFS_TRACE_VERIFY_NAND));
+}
+
+static const char * const block_state_name[] = {
+ "Unknown",
+ "Needs scan",
+ "Scanning",
+ "Empty",
+ "Allocating",
+ "Full",
+ "Dirty",
+ "Checkpoint",
+ "Collecting",
+ "Dead"
+};
+
+void yaffs_verify_blk(struct yaffs_dev *dev, struct yaffs_block_info *bi, int n)
+{
+ int actually_used;
+ int in_use;
+
+ if (yaffs_skip_verification(dev))
+ return;
+
+ /* Report illegal runtime states */
+ if (bi->block_state >= YAFFS_NUMBER_OF_BLOCK_STATES)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Block %d has undefined state %d",
+ n, bi->block_state);
+
+ switch (bi->block_state) {
+ case YAFFS_BLOCK_STATE_UNKNOWN:
+ case YAFFS_BLOCK_STATE_SCANNING:
+ case YAFFS_BLOCK_STATE_NEEDS_SCAN:
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Block %d has bad run-state %s",
+ n, block_state_name[bi->block_state]);
+ }
+
+ /* Check pages in use and soft deletions are legal */
+
+ actually_used = bi->pages_in_use - bi->soft_del_pages;
+
+ if (bi->pages_in_use < 0 ||
+ bi->pages_in_use > dev->param.chunks_per_block ||
+ bi->soft_del_pages < 0 ||
+ bi->soft_del_pages > dev->param.chunks_per_block ||
+ actually_used < 0 || actually_used > dev->param.chunks_per_block)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Block %d has illegal values pages_in_used %d soft_del_pages %d",
+ n, bi->pages_in_use, bi->soft_del_pages);
+
+ /* Check chunk bitmap legal */
+ in_use = yaffs_count_chunk_bits(dev, n);
+ if (in_use != bi->pages_in_use)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Block %d has inconsistent values pages_in_use %d counted chunk bits %d",
+ n, bi->pages_in_use, in_use);
+}
+
+void yaffs_verify_collected_blk(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi, int n)
+{
+ yaffs_verify_blk(dev, bi, n);
+
+ /* After collection the block should be in the erased state */
+
+ if (bi->block_state != YAFFS_BLOCK_STATE_COLLECTING &&
+ bi->block_state != YAFFS_BLOCK_STATE_EMPTY) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "Block %d is in state %d after gc, should be erased",
+ n, bi->block_state);
+ }
+}
+
+void yaffs_verify_blocks(struct yaffs_dev *dev)
+{
+ int i;
+ int state_count[YAFFS_NUMBER_OF_BLOCK_STATES];
+ int illegal_states = 0;
+
+ if (yaffs_skip_verification(dev))
+ return;
+
+ memset(state_count, 0, sizeof(state_count));
+
+ for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) {
+ struct yaffs_block_info *bi = yaffs_get_block_info(dev, i);
+ yaffs_verify_blk(dev, bi, i);
+
+ if (bi->block_state < YAFFS_NUMBER_OF_BLOCK_STATES)
+ state_count[bi->block_state]++;
+ else
+ illegal_states++;
+ }
+
+ yaffs_trace(YAFFS_TRACE_VERIFY, "Block summary");
+
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "%d blocks have illegal states",
+ illegal_states);
+ if (state_count[YAFFS_BLOCK_STATE_ALLOCATING] > 1)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Too many allocating blocks");
+
+ for (i = 0; i < YAFFS_NUMBER_OF_BLOCK_STATES; i++)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "%s %d blocks",
+ block_state_name[i], state_count[i]);
+
+ if (dev->blocks_in_checkpt != state_count[YAFFS_BLOCK_STATE_CHECKPOINT])
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Checkpoint block count wrong dev %d count %d",
+ dev->blocks_in_checkpt,
+ state_count[YAFFS_BLOCK_STATE_CHECKPOINT]);
+
+ if (dev->n_erased_blocks != state_count[YAFFS_BLOCK_STATE_EMPTY])
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Erased block count wrong dev %d count %d",
+ dev->n_erased_blocks,
+ state_count[YAFFS_BLOCK_STATE_EMPTY]);
+
+ if (state_count[YAFFS_BLOCK_STATE_COLLECTING] > 1)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Too many collecting blocks %d (max is 1)",
+ state_count[YAFFS_BLOCK_STATE_COLLECTING]);
+}
+
+/*
+ * Verify the object header. oh must be valid, but obj and tags may be NULL in
+ * which case those tests will not be performed.
+ */
+void yaffs_verify_oh(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh,
+ struct yaffs_ext_tags *tags, int parent_check)
+{
+ if (obj && yaffs_skip_verification(obj->my_dev))
+ return;
+
+ if (!(tags && obj && oh)) {
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Verifying object header tags %p obj %p oh %p",
+ tags, obj, oh);
+ return;
+ }
+
+ if (oh->type <= YAFFS_OBJECT_TYPE_UNKNOWN ||
+ oh->type > YAFFS_OBJECT_TYPE_MAX)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d header type is illegal value 0x%x",
+ tags->obj_id, oh->type);
+
+ if (tags->obj_id != obj->obj_id)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d header mismatch obj_id %d",
+ tags->obj_id, obj->obj_id);
+
+ /*
+ * Check that the object's parent ids match if parent_check requested.
+ *
+ * Tests do not apply to the root object.
+ */
+
+ if (parent_check && tags->obj_id > 1 && !obj->parent)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d header mismatch parent_id %d obj->parent is NULL",
+ tags->obj_id, oh->parent_obj_id);
+
+ if (parent_check && obj->parent &&
+ oh->parent_obj_id != obj->parent->obj_id &&
+ (oh->parent_obj_id != YAFFS_OBJECTID_UNLINKED ||
+ obj->parent->obj_id != YAFFS_OBJECTID_DELETED))
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d header mismatch parent_id %d parent_obj_id %d",
+ tags->obj_id, oh->parent_obj_id,
+ obj->parent->obj_id);
+
+ if (tags->obj_id > 1 && oh->name[0] == 0) /* Null name */
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d header name is NULL",
+ obj->obj_id);
+
+ if (tags->obj_id > 1 && ((u8) (oh->name[0])) == 0xff) /* Junk name */
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d header name is 0xff",
+ obj->obj_id);
+}
+
+void yaffs_verify_file(struct yaffs_obj *obj)
+{
+ u32 x;
+ int required_depth;
+ int last_chunk;
+ u32 offset_in_chunk;
+ u32 the_chunk;
+
+ u32 i;
+ struct yaffs_dev *dev;
+ struct yaffs_ext_tags tags;
+ struct yaffs_tnode *tn;
+ u32 obj_id;
+
+ if (!obj)
+ return;
+
+ if (yaffs_skip_verification(obj->my_dev))
+ return;
+
+ dev = obj->my_dev;
+ obj_id = obj->obj_id;
+
+
+ /* Check file size is consistent with tnode depth */
+ yaffs_addr_to_chunk(dev, obj->variant.file_variant.file_size,
+ &last_chunk, &offset_in_chunk);
+ last_chunk++;
+ x = last_chunk >> YAFFS_TNODES_LEVEL0_BITS;
+ required_depth = 0;
+ while (x > 0) {
+ x >>= YAFFS_TNODES_INTERNAL_BITS;
+ required_depth++;
+ }
+
+ /* Check that the chunks in the tnode tree are all correct.
+ * We do this by scanning through the tnode tree and
+ * checking the tags for every chunk match.
+ */
+
+ if (yaffs_skip_nand_verification(dev))
+ return;
+
+ for (i = 1; i <= last_chunk; i++) {
+ tn = yaffs_find_tnode_0(dev, &obj->variant.file_variant, i);
+
+ if (!tn)
+ continue;
+
+ the_chunk = yaffs_get_group_base(dev, tn, i);
+ if (the_chunk > 0) {
+ yaffs_rd_chunk_tags_nand(dev, the_chunk, NULL,
+ &tags);
+ if (tags.obj_id != obj_id || tags.chunk_id != i)
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Object %d chunk_id %d NAND mismatch chunk %d tags (%d:%d)",
+ obj_id, i, the_chunk,
+ tags.obj_id, tags.chunk_id);
+ }
+ }
+}
+
+void yaffs_verify_link(struct yaffs_obj *obj)
+{
+ if (obj && yaffs_skip_verification(obj->my_dev))
+ return;
+
+ /* Verify sane equivalent object */
+}
+
+void yaffs_verify_symlink(struct yaffs_obj *obj)
+{
+ if (obj && yaffs_skip_verification(obj->my_dev))
+ return;
+
+ /* Verify symlink string */
+}
+
+void yaffs_verify_special(struct yaffs_obj *obj)
+{
+ if (obj && yaffs_skip_verification(obj->my_dev))
+ return;
+}
+
+void yaffs_verify_obj(struct yaffs_obj *obj)
+{
+ struct yaffs_dev *dev;
+ u32 chunk_min;
+ u32 chunk_max;
+ u32 chunk_id_ok;
+ u32 chunk_in_range;
+ u32 chunk_wrongly_deleted;
+ u32 chunk_valid;
+
+ if (!obj)
+ return;
+
+ if (obj->being_created)
+ return;
+
+ dev = obj->my_dev;
+
+ if (yaffs_skip_verification(dev))
+ return;
+
+ /* Check sane object header chunk */
+
+ chunk_min = dev->internal_start_block * dev->param.chunks_per_block;
+ chunk_max =
+ (dev->internal_end_block + 1) * dev->param.chunks_per_block - 1;
+
+ chunk_in_range = (((unsigned)(obj->hdr_chunk)) >= chunk_min &&
+ ((unsigned)(obj->hdr_chunk)) <= chunk_max);
+ chunk_id_ok = chunk_in_range || (obj->hdr_chunk == 0);
+ chunk_valid = chunk_in_range &&
+ yaffs_check_chunk_bit(dev,
+ obj->hdr_chunk / dev->param.chunks_per_block,
+ obj->hdr_chunk % dev->param.chunks_per_block);
+ chunk_wrongly_deleted = chunk_in_range && !chunk_valid;
+
+ if (!obj->fake && (!chunk_id_ok || chunk_wrongly_deleted))
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d has chunk_id %d %s %s",
+ obj->obj_id, obj->hdr_chunk,
+ chunk_id_ok ? "" : ",out of range",
+ chunk_wrongly_deleted ? ",marked as deleted" : "");
+
+ if (chunk_valid && !yaffs_skip_nand_verification(dev)) {
+ struct yaffs_ext_tags tags;
+ struct yaffs_obj_hdr *oh;
+ u8 *buffer = yaffs_get_temp_buffer(dev);
+
+ oh = (struct yaffs_obj_hdr *)buffer;
+
+ yaffs_rd_chunk_tags_nand(dev, obj->hdr_chunk, buffer, &tags);
+
+ yaffs_verify_oh(obj, oh, &tags, 1);
+
+ yaffs_release_temp_buffer(dev, buffer);
+ }
+
+ /* Verify it has a parent */
+ if (obj && !obj->fake && (!obj->parent || obj->parent->my_dev != dev)) {
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d has parent pointer %p which does not look like an object",
+ obj->obj_id, obj->parent);
+ }
+
+ /* Verify parent is a directory */
+ if (obj->parent &&
+ obj->parent->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d's parent is not a directory (type %d)",
+ obj->obj_id, obj->parent->variant_type);
+ }
+
+ switch (obj->variant_type) {
+ case YAFFS_OBJECT_TYPE_FILE:
+ yaffs_verify_file(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ yaffs_verify_symlink(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ yaffs_verify_dir(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ yaffs_verify_link(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ yaffs_verify_special(obj);
+ break;
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ default:
+ yaffs_trace(YAFFS_TRACE_VERIFY,
+ "Obj %d has illegaltype %d",
+ obj->obj_id, obj->variant_type);
+ break;
+ }
+}
+
+void yaffs_verify_objects(struct yaffs_dev *dev)
+{
+ struct yaffs_obj *obj;
+ int i;
+ struct list_head *lh;
+
+ if (yaffs_skip_verification(dev))
+ return;
+
+ /* Iterate through the objects in each hash entry */
+
+ for (i = 0; i < YAFFS_NOBJECT_BUCKETS; i++) {
+ list_for_each(lh, &dev->obj_bucket[i].list) {
+ obj = list_entry(lh, struct yaffs_obj, hash_link);
+ yaffs_verify_obj(obj);
+ }
+ }
+}
+
+void yaffs_verify_obj_in_dir(struct yaffs_obj *obj)
+{
+ struct list_head *lh;
+ struct yaffs_obj *list_obj;
+ int count = 0;
+
+ if (!obj) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS, "No object to verify");
+ BUG();
+ return;
+ }
+
+ if (yaffs_skip_verification(obj->my_dev))
+ return;
+
+ if (!obj->parent) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS, "Object does not have parent");
+ BUG();
+ return;
+ }
+
+ if (obj->parent->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS, "Parent is not directory");
+ BUG();
+ }
+
+ /* Iterate through the objects in each hash entry */
+
+ list_for_each(lh, &obj->parent->variant.dir_variant.children) {
+ list_obj = list_entry(lh, struct yaffs_obj, siblings);
+ yaffs_verify_obj(list_obj);
+ if (obj == list_obj)
+ count++;
+ }
+
+ if (count != 1) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "Object in directory %d times",
+ count);
+ BUG();
+ }
+}
+
+void yaffs_verify_dir(struct yaffs_obj *directory)
+{
+ struct list_head *lh;
+ struct yaffs_obj *list_obj;
+
+ if (!directory) {
+ BUG();
+ return;
+ }
+
+ if (yaffs_skip_full_verification(directory->my_dev))
+ return;
+
+ if (directory->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "Directory has wrong type: %d",
+ directory->variant_type);
+ BUG();
+ }
+
+ /* Iterate through the objects in each hash entry */
+
+ list_for_each(lh, &directory->variant.dir_variant.children) {
+ list_obj = list_entry(lh, struct yaffs_obj, siblings);
+ if (list_obj->parent != directory) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "Object in directory list has wrong parent %p",
+ list_obj->parent);
+ BUG();
+ }
+ yaffs_verify_obj_in_dir(list_obj);
+ }
+}
+
+static int yaffs_free_verification_failures;
+
+void yaffs_verify_free_chunks(struct yaffs_dev *dev)
+{
+ int counted;
+ int difference;
+
+ if (yaffs_skip_verification(dev))
+ return;
+
+ counted = yaffs_count_free_chunks(dev);
+
+ difference = dev->n_free_chunks - counted;
+
+ if (difference) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "Freechunks verification failure %d %d %d",
+ dev->n_free_chunks, counted, difference);
+ yaffs_free_verification_failures++;
+ }
+}
+
+int yaffs_verify_file_sane(struct yaffs_obj *in)
+{
+ in = in;
+ return YAFFS_OK;
+}
diff --git a/fs/yaffs2/yaffs_verify.h b/fs/yaffs2/yaffs_verify.h
new file mode 100644
index 0000000000..4f4af8d29a
--- /dev/null
+++ b/fs/yaffs2/yaffs_verify.h
@@ -0,0 +1,43 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YAFFS_VERIFY_H__
+#define __YAFFS_VERIFY_H__
+
+#include "yaffs_guts.h"
+
+void yaffs_verify_blk(struct yaffs_dev *dev, struct yaffs_block_info *bi,
+ int n);
+void yaffs_verify_collected_blk(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi, int n);
+void yaffs_verify_blocks(struct yaffs_dev *dev);
+
+void yaffs_verify_oh(struct yaffs_obj *obj, struct yaffs_obj_hdr *oh,
+ struct yaffs_ext_tags *tags, int parent_check);
+void yaffs_verify_file(struct yaffs_obj *obj);
+void yaffs_verify_link(struct yaffs_obj *obj);
+void yaffs_verify_symlink(struct yaffs_obj *obj);
+void yaffs_verify_special(struct yaffs_obj *obj);
+void yaffs_verify_obj(struct yaffs_obj *obj);
+void yaffs_verify_objects(struct yaffs_dev *dev);
+void yaffs_verify_obj_in_dir(struct yaffs_obj *obj);
+void yaffs_verify_dir(struct yaffs_obj *directory);
+void yaffs_verify_free_chunks(struct yaffs_dev *dev);
+
+int yaffs_verify_file_sane(struct yaffs_obj *obj);
+
+int yaffs_skip_verification(struct yaffs_dev *dev);
+
+#endif
diff --git a/fs/yaffs2/yaffs_yaffs1.c b/fs/yaffs2/yaffs_yaffs1.c
new file mode 100644
index 0000000000..357d8f75dd
--- /dev/null
+++ b/fs/yaffs2/yaffs_yaffs1.c
@@ -0,0 +1,419 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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 "yaffs_yaffs1.h"
+#include "yportenv.h"
+#include "yaffs_trace.h"
+#include "yaffs_bitmap.h"
+#include "yaffs_getblockinfo.h"
+#include "yaffs_nand.h"
+#include "yaffs_attribs.h"
+
+int yaffs1_scan(struct yaffs_dev *dev)
+{
+ struct yaffs_ext_tags tags;
+ int blk;
+ int chunk;
+ int c;
+ int deleted;
+ enum yaffs_block_state state;
+ LIST_HEAD(hard_list);
+ struct yaffs_block_info *bi;
+ u32 seq_number;
+ struct yaffs_obj_hdr *oh;
+ struct yaffs_obj *in;
+ struct yaffs_obj *parent;
+ int alloc_failed = 0;
+ struct yaffs_shadow_fixer *shadow_fixers = NULL;
+ u8 *chunk_data;
+
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "yaffs1_scan starts intstartblk %d intendblk %d...",
+ dev->internal_start_block, dev->internal_end_block);
+
+ chunk_data = yaffs_get_temp_buffer(dev);
+
+ dev->seq_number = YAFFS_LOWEST_SEQUENCE_NUMBER;
+
+ /* Scan all the blocks to determine their state */
+ bi = dev->block_info;
+ for (blk = dev->internal_start_block; blk <= dev->internal_end_block;
+ blk++) {
+ yaffs_clear_chunk_bits(dev, blk);
+ bi->pages_in_use = 0;
+ bi->soft_del_pages = 0;
+
+ yaffs_query_init_block_state(dev, blk, &state, &seq_number);
+
+ bi->block_state = state;
+ bi->seq_number = seq_number;
+
+ if (bi->seq_number == YAFFS_SEQUENCE_BAD_BLOCK)
+ bi->block_state = state = YAFFS_BLOCK_STATE_DEAD;
+
+ yaffs_trace(YAFFS_TRACE_SCAN_DEBUG,
+ "Block scanning block %d state %d seq %d",
+ blk, state, seq_number);
+
+ if (state == YAFFS_BLOCK_STATE_DEAD) {
+ yaffs_trace(YAFFS_TRACE_BAD_BLOCKS,
+ "block %d is bad", blk);
+ } else if (state == YAFFS_BLOCK_STATE_EMPTY) {
+ yaffs_trace(YAFFS_TRACE_SCAN_DEBUG, "Block empty ");
+ dev->n_erased_blocks++;
+ dev->n_free_chunks += dev->param.chunks_per_block;
+ }
+ bi++;
+ }
+
+ /* For each block.... */
+ for (blk = dev->internal_start_block;
+ !alloc_failed && blk <= dev->internal_end_block; blk++) {
+
+ cond_resched();
+
+ bi = yaffs_get_block_info(dev, blk);
+ state = bi->block_state;
+
+ deleted = 0;
+
+ /* For each chunk in each block that needs scanning.... */
+ for (c = 0;
+ !alloc_failed && c < dev->param.chunks_per_block &&
+ state == YAFFS_BLOCK_STATE_NEEDS_SCAN; c++) {
+ /* Read the tags and decide what to do */
+ chunk = blk * dev->param.chunks_per_block + c;
+
+ yaffs_rd_chunk_tags_nand(dev, chunk, NULL, &tags);
+
+ /* Let's have a good look at this chunk... */
+
+ if (tags.ecc_result == YAFFS_ECC_RESULT_UNFIXED ||
+ tags.is_deleted) {
+ /* YAFFS1 only...
+ * A deleted chunk
+ */
+ deleted++;
+ dev->n_free_chunks++;
+ } else if (!tags.chunk_used) {
+ /* An unassigned chunk in the block
+ * This means that either the block is empty or
+ * this is the one being allocated from
+ */
+
+ if (c == 0) {
+ /* We're looking at the first chunk in
+ *the block so the block is unused */
+ state = YAFFS_BLOCK_STATE_EMPTY;
+ dev->n_erased_blocks++;
+ } else {
+ /* this is the block being allocated */
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ " Allocating from %d %d",
+ blk, c);
+ state = YAFFS_BLOCK_STATE_ALLOCATING;
+ dev->alloc_block = blk;
+ dev->alloc_page = c;
+ dev->alloc_block_finder = blk;
+
+ }
+
+ dev->n_free_chunks +=
+ (dev->param.chunks_per_block - c);
+ } else if (tags.chunk_id > 0) {
+ /* chunk_id > 0 so it is a data chunk... */
+ unsigned int endpos;
+
+ yaffs_set_chunk_bit(dev, blk, c);
+ bi->pages_in_use++;
+
+ in = yaffs_find_or_create_by_number(dev,
+ tags.obj_id,
+ YAFFS_OBJECT_TYPE_FILE);
+ /* PutChunkIntoFile checks for a clash
+ * (two data chunks with the same chunk_id).
+ */
+
+ if (!in)
+ alloc_failed = 1;
+
+ if (in) {
+ if (!yaffs_put_chunk_in_file
+ (in, tags.chunk_id, chunk, 1))
+ alloc_failed = 1;
+ }
+
+ endpos =
+ (tags.chunk_id - 1) *
+ dev->data_bytes_per_chunk +
+ tags.n_bytes;
+ if (in &&
+ in->variant_type ==
+ YAFFS_OBJECT_TYPE_FILE &&
+ in->variant.file_variant.scanned_size <
+ endpos) {
+ in->variant.file_variant.scanned_size =
+ endpos;
+ if (!dev->param.use_header_file_size) {
+ in->variant.
+ file_variant.file_size =
+ in->variant.
+ file_variant.scanned_size;
+ }
+
+ }
+ } else {
+ /* chunk_id == 0, so it is an ObjectHeader.
+ * Make the object
+ */
+ yaffs_set_chunk_bit(dev, blk, c);
+ bi->pages_in_use++;
+
+ yaffs_rd_chunk_tags_nand(dev, chunk,
+ chunk_data, NULL);
+
+ oh = (struct yaffs_obj_hdr *)chunk_data;
+
+ in = yaffs_find_by_number(dev, tags.obj_id);
+ if (in && in->variant_type != oh->type) {
+ /* This should not happen, but somehow
+ * Wev'e ended up with an obj_id that
+ * has been reused but not yet deleted,
+ * and worse still it has changed type.
+ * Delete the old object.
+ */
+
+ yaffs_del_obj(in);
+ in = NULL;
+ }
+
+ in = yaffs_find_or_create_by_number(dev,
+ tags.obj_id,
+ oh->type);
+
+ if (!in)
+ alloc_failed = 1;
+
+ if (in && oh->shadows_obj > 0) {
+
+ struct yaffs_shadow_fixer *fixer;
+ fixer =
+ kmalloc(sizeof
+ (struct yaffs_shadow_fixer),
+ GFP_NOFS);
+ if (fixer) {
+ fixer->next = shadow_fixers;
+ shadow_fixers = fixer;
+ fixer->obj_id = tags.obj_id;
+ fixer->shadowed_id =
+ oh->shadows_obj;
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ " Shadow fixer: %d shadows %d",
+ fixer->obj_id,
+ fixer->shadowed_id);
+
+ }
+
+ }
+
+ if (in && in->valid) {
+ /* We have already filled this one.
+ * We have a duplicate and need to
+ * resolve it. */
+
+ unsigned existing_serial = in->serial;
+ unsigned new_serial =
+ tags.serial_number;
+
+ if (((existing_serial + 1) & 3) ==
+ new_serial) {
+ /* Use new one - destroy the
+ * exisiting one */
+ yaffs_chunk_del(dev,
+ in->hdr_chunk,
+ 1, __LINE__);
+ in->valid = 0;
+ } else {
+ /* Use existing - destroy
+ * this one. */
+ yaffs_chunk_del(dev, chunk, 1,
+ __LINE__);
+ }
+ }
+
+ if (in && !in->valid &&
+ (tags.obj_id == YAFFS_OBJECTID_ROOT ||
+ tags.obj_id ==
+ YAFFS_OBJECTID_LOSTNFOUND)) {
+ /* We only load some info, don't fiddle
+ * with directory structure */
+ in->valid = 1;
+ in->variant_type = oh->type;
+
+ in->yst_mode = oh->yst_mode;
+ yaffs_load_attribs(in, oh);
+ in->hdr_chunk = chunk;
+ in->serial = tags.serial_number;
+
+ } else if (in && !in->valid) {
+ /* we need to load this info */
+
+ in->valid = 1;
+ in->variant_type = oh->type;
+
+ in->yst_mode = oh->yst_mode;
+ yaffs_load_attribs(in, oh);
+ in->hdr_chunk = chunk;
+ in->serial = tags.serial_number;
+
+ yaffs_set_obj_name_from_oh(in, oh);
+ in->dirty = 0;
+
+ /* directory stuff...
+ * hook up to parent
+ */
+
+ parent =
+ yaffs_find_or_create_by_number
+ (dev, oh->parent_obj_id,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+ if (!parent)
+ alloc_failed = 1;
+ if (parent && parent->variant_type ==
+ YAFFS_OBJECT_TYPE_UNKNOWN) {
+ /* Set up as a directory */
+ parent->variant_type =
+ YAFFS_OBJECT_TYPE_DIRECTORY;
+ INIT_LIST_HEAD(&parent->
+ variant.dir_variant.
+ children);
+ } else if (!parent ||
+ parent->variant_type !=
+ YAFFS_OBJECT_TYPE_DIRECTORY) {
+ /* Hoosterman, a problem....
+ * We're trying to use a
+ * non-directory as a directory
+ */
+
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
+ );
+ parent = dev->lost_n_found;
+ }
+
+ yaffs_add_obj_to_dir(parent, in);
+
+ switch (in->variant_type) {
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* Todo got a problem */
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+ if (dev->param.
+ use_header_file_size)
+ in->variant.
+ file_variant.file_size
+ = yaffs_oh_to_size(oh);
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ in->variant.
+ hardlink_variant.equiv_id =
+ oh->equiv_id;
+ list_add(&in->hard_links,
+ &hard_list);
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ in->variant.symlink_variant.
+ alias =
+ yaffs_clone_str(oh->alias);
+ if (!in->variant.
+ symlink_variant.alias)
+ alloc_failed = 1;
+ break;
+ }
+ }
+ }
+ }
+
+ if (state == YAFFS_BLOCK_STATE_NEEDS_SCAN) {
+ /* If we got this far while scanning,
+ * then the block is fully allocated. */
+ state = YAFFS_BLOCK_STATE_FULL;
+ }
+
+ if (state == YAFFS_BLOCK_STATE_ALLOCATING) {
+ /* If the block was partially allocated then
+ * treat it as fully allocated. */
+ state = YAFFS_BLOCK_STATE_FULL;
+ dev->alloc_block = -1;
+ }
+
+ bi->block_state = state;
+
+ /* Now let's see if it was dirty */
+ if (bi->pages_in_use == 0 &&
+ !bi->has_shrink_hdr &&
+ bi->block_state == YAFFS_BLOCK_STATE_FULL)
+ yaffs_block_became_dirty(dev, blk);
+ }
+
+ /* Ok, we've done all the scanning.
+ * Fix up the hard link chains.
+ * We should now have scanned all the objects, now it's time to add
+ * these hardlinks.
+ */
+
+ yaffs_link_fixup(dev, &hard_list);
+
+ /*
+ * Fix up any shadowed objects.
+ * There should not be more than one of these.
+ */
+ {
+ struct yaffs_shadow_fixer *fixer;
+ struct yaffs_obj *obj;
+
+ while (shadow_fixers) {
+ fixer = shadow_fixers;
+ shadow_fixers = fixer->next;
+ /* Complete the rename transaction by deleting the
+ * shadowed object then setting the object header
+ to unshadowed.
+ */
+ obj = yaffs_find_by_number(dev, fixer->shadowed_id);
+ if (obj)
+ yaffs_del_obj(obj);
+
+ obj = yaffs_find_by_number(dev, fixer->obj_id);
+
+ if (obj)
+ yaffs_update_oh(obj, NULL, 1, 0, 0, NULL);
+
+ kfree(fixer);
+ }
+ }
+
+ yaffs_release_temp_buffer(dev, chunk_data);
+
+ if (alloc_failed)
+ return YAFFS_FAIL;
+
+ yaffs_trace(YAFFS_TRACE_SCAN, "yaffs1_scan ends");
+
+ return YAFFS_OK;
+}
diff --git a/fs/yaffs2/yaffsinterface.h b/fs/yaffs2/yaffs_yaffs1.h
index 810837a32d..97e2fdd08a 100644
--- a/fs/yaffs2/yaffsinterface.h
+++ b/fs/yaffs2/yaffs_yaffs1.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -13,9 +13,10 @@
* Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
*/
-#ifndef __YAFFSINTERFACE_H__
-#define __YAFFSINTERFACE_H__
+#ifndef __YAFFS_YAFFS1_H__
+#define __YAFFS_YAFFS1_H__
-int yaffs_Initialise(unsigned nBlocks);
+#include "yaffs_guts.h"
+int yaffs1_scan(struct yaffs_dev *dev);
#endif
diff --git a/fs/yaffs2/yaffs_yaffs2.c b/fs/yaffs2/yaffs_yaffs2.c
new file mode 100644
index 0000000000..f76dcaeeb1
--- /dev/null
+++ b/fs/yaffs2/yaffs_yaffs2.c
@@ -0,0 +1,1526 @@
+/*
+ * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * 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 "yaffs_guts.h"
+#include "yaffs_trace.h"
+#include "yaffs_yaffs2.h"
+#include "yaffs_checkptrw.h"
+#include "yaffs_bitmap.h"
+#include "yaffs_nand.h"
+#include "yaffs_getblockinfo.h"
+#include "yaffs_verify.h"
+#include "yaffs_attribs.h"
+#include "yaffs_summary.h"
+
+/*
+ * Checkpoints are really no benefit on very small partitions.
+ *
+ * To save space on small partitions don't bother with checkpoints unless
+ * the partition is at least this big.
+ */
+#define YAFFS_CHECKPOINT_MIN_BLOCKS 60
+#define YAFFS_SMALL_HOLE_THRESHOLD 4
+
+/*
+ * Oldest Dirty Sequence Number handling.
+ */
+
+/* yaffs_calc_oldest_dirty_seq()
+ * yaffs2_find_oldest_dirty_seq()
+ * Calculate the oldest dirty sequence number if we don't know it.
+ */
+void yaffs_calc_oldest_dirty_seq(struct yaffs_dev *dev)
+{
+ int i;
+ unsigned seq;
+ unsigned block_no = 0;
+ struct yaffs_block_info *b;
+
+ if (!dev->param.is_yaffs2)
+ return;
+
+ /* Find the oldest dirty sequence number. */
+ seq = dev->seq_number + 1;
+ b = dev->block_info;
+ for (i = dev->internal_start_block; i <= dev->internal_end_block; i++) {
+ if (b->block_state == YAFFS_BLOCK_STATE_FULL &&
+ (b->pages_in_use - b->soft_del_pages) <
+ dev->param.chunks_per_block &&
+ b->seq_number < seq) {
+ seq = b->seq_number;
+ block_no = i;
+ }
+ b++;
+ }
+
+ if (block_no) {
+ dev->oldest_dirty_seq = seq;
+ dev->oldest_dirty_block = block_no;
+ }
+}
+
+void yaffs2_find_oldest_dirty_seq(struct yaffs_dev *dev)
+{
+ if (!dev->param.is_yaffs2)
+ return;
+
+ if (!dev->oldest_dirty_seq)
+ yaffs_calc_oldest_dirty_seq(dev);
+}
+
+/*
+ * yaffs_clear_oldest_dirty_seq()
+ * Called when a block is erased or marked bad. (ie. when its seq_number
+ * becomes invalid). If the value matches the oldest then we clear
+ * dev->oldest_dirty_seq to force its recomputation.
+ */
+void yaffs2_clear_oldest_dirty_seq(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi)
+{
+
+ if (!dev->param.is_yaffs2)
+ return;
+
+ if (!bi || bi->seq_number == dev->oldest_dirty_seq) {
+ dev->oldest_dirty_seq = 0;
+ dev->oldest_dirty_block = 0;
+ }
+}
+
+/*
+ * yaffs2_update_oldest_dirty_seq()
+ * Update the oldest dirty sequence number whenever we dirty a block.
+ * Only do this if the oldest_dirty_seq is actually being tracked.
+ */
+void yaffs2_update_oldest_dirty_seq(struct yaffs_dev *dev, unsigned block_no,
+ struct yaffs_block_info *bi)
+{
+ if (!dev->param.is_yaffs2)
+ return;
+
+ if (dev->oldest_dirty_seq) {
+ if (dev->oldest_dirty_seq > bi->seq_number) {
+ dev->oldest_dirty_seq = bi->seq_number;
+ dev->oldest_dirty_block = block_no;
+ }
+ }
+}
+
+int yaffs_block_ok_for_gc(struct yaffs_dev *dev, struct yaffs_block_info *bi)
+{
+
+ if (!dev->param.is_yaffs2)
+ return 1; /* disqualification only applies to yaffs2. */
+
+ if (!bi->has_shrink_hdr)
+ return 1; /* can gc */
+
+ yaffs2_find_oldest_dirty_seq(dev);
+
+ /* Can't do gc of this block if there are any blocks older than this
+ * one that have discarded pages.
+ */
+ return (bi->seq_number <= dev->oldest_dirty_seq);
+}
+
+/*
+ * yaffs2_find_refresh_block()
+ * periodically finds the oldest full block by sequence number for refreshing.
+ * Only for yaffs2.
+ */
+u32 yaffs2_find_refresh_block(struct yaffs_dev *dev)
+{
+ u32 b;
+ u32 oldest = 0;
+ u32 oldest_seq = 0;
+ struct yaffs_block_info *bi;
+
+ if (!dev->param.is_yaffs2)
+ return oldest;
+
+ /*
+ * If refresh period < 10 then refreshing is disabled.
+ */
+ if (dev->param.refresh_period < 10)
+ return oldest;
+
+ /*
+ * Fix broken values.
+ */
+ if (dev->refresh_skip > dev->param.refresh_period)
+ dev->refresh_skip = dev->param.refresh_period;
+
+ if (dev->refresh_skip > 0)
+ return oldest;
+
+ /*
+ * Refresh skip is now zero.
+ * We'll do a refresh this time around....
+ * Update the refresh skip and find the oldest block.
+ */
+ dev->refresh_skip = dev->param.refresh_period;
+ dev->refresh_count++;
+ bi = dev->block_info;
+ for (b = dev->internal_start_block; b <= dev->internal_end_block; b++) {
+
+ if (bi->block_state == YAFFS_BLOCK_STATE_FULL) {
+
+ if (oldest < 1 || bi->seq_number < oldest_seq) {
+ oldest = b;
+ oldest_seq = bi->seq_number;
+ }
+ }
+ bi++;
+ }
+
+ if (oldest > 0) {
+ yaffs_trace(YAFFS_TRACE_GC,
+ "GC refresh count %d selected block %d with seq_number %d",
+ dev->refresh_count, oldest, oldest_seq);
+ }
+
+ return oldest;
+}
+
+int yaffs2_checkpt_required(struct yaffs_dev *dev)
+{
+ int nblocks;
+
+ if (!dev->param.is_yaffs2)
+ return 0;
+
+ nblocks = dev->internal_end_block - dev->internal_start_block + 1;
+
+ return !dev->param.skip_checkpt_wr &&
+ !dev->read_only && (nblocks >= YAFFS_CHECKPOINT_MIN_BLOCKS);
+}
+
+int yaffs_calc_checkpt_blocks_required(struct yaffs_dev *dev)
+{
+ int retval;
+ int n_bytes = 0;
+ int n_blocks;
+ int dev_blocks;
+
+ if (!dev->param.is_yaffs2)
+ return 0;
+
+ if (!dev->checkpoint_blocks_required && yaffs2_checkpt_required(dev)) {
+ /* Not a valid value so recalculate */
+ dev_blocks = dev->param.end_block - dev->param.start_block + 1;
+ n_bytes += sizeof(struct yaffs_checkpt_validity);
+ n_bytes += sizeof(struct yaffs_checkpt_dev);
+ n_bytes += dev_blocks * sizeof(struct yaffs_block_info);
+ n_bytes += dev_blocks * dev->chunk_bit_stride;
+ n_bytes +=
+ (sizeof(struct yaffs_checkpt_obj) + sizeof(u32)) *
+ dev->n_obj;
+ n_bytes += (dev->tnode_size + sizeof(u32)) * dev->n_tnodes;
+ n_bytes += sizeof(struct yaffs_checkpt_validity);
+ n_bytes += sizeof(u32); /* checksum */
+
+ /* Round up and add 2 blocks to allow for some bad blocks,
+ * so add 3 */
+
+ n_blocks =
+ (n_bytes /
+ (dev->data_bytes_per_chunk *
+ dev->param.chunks_per_block)) + 3;
+
+ dev->checkpoint_blocks_required = n_blocks;
+ }
+
+ retval = dev->checkpoint_blocks_required - dev->blocks_in_checkpt;
+ if (retval < 0)
+ retval = 0;
+ return retval;
+}
+
+/*--------------------- Checkpointing --------------------*/
+
+static int yaffs2_wr_checkpt_validity_marker(struct yaffs_dev *dev, int head)
+{
+ struct yaffs_checkpt_validity cp;
+
+ memset(&cp, 0, sizeof(cp));
+
+ cp.struct_type = sizeof(cp);
+ cp.magic = YAFFS_MAGIC;
+ cp.version = YAFFS_CHECKPOINT_VERSION;
+ cp.head = (head) ? 1 : 0;
+
+ return (yaffs2_checkpt_wr(dev, &cp, sizeof(cp)) == sizeof(cp)) ? 1 : 0;
+}
+
+static int yaffs2_rd_checkpt_validity_marker(struct yaffs_dev *dev, int head)
+{
+ struct yaffs_checkpt_validity cp;
+ int ok;
+
+ ok = (yaffs2_checkpt_rd(dev, &cp, sizeof(cp)) == sizeof(cp));
+
+ if (ok)
+ ok = (cp.struct_type == sizeof(cp)) &&
+ (cp.magic == YAFFS_MAGIC) &&
+ (cp.version == YAFFS_CHECKPOINT_VERSION) &&
+ (cp.head == ((head) ? 1 : 0));
+ return ok ? 1 : 0;
+}
+
+static void yaffs2_dev_to_checkpt_dev(struct yaffs_checkpt_dev *cp,
+ struct yaffs_dev *dev)
+{
+ cp->n_erased_blocks = dev->n_erased_blocks;
+ cp->alloc_block = dev->alloc_block;
+ cp->alloc_page = dev->alloc_page;
+ cp->n_free_chunks = dev->n_free_chunks;
+
+ cp->n_deleted_files = dev->n_deleted_files;
+ cp->n_unlinked_files = dev->n_unlinked_files;
+ cp->n_bg_deletions = dev->n_bg_deletions;
+ cp->seq_number = dev->seq_number;
+
+}
+
+static void yaffs_checkpt_dev_to_dev(struct yaffs_dev *dev,
+ struct yaffs_checkpt_dev *cp)
+{
+ dev->n_erased_blocks = cp->n_erased_blocks;
+ dev->alloc_block = cp->alloc_block;
+ dev->alloc_page = cp->alloc_page;
+ dev->n_free_chunks = cp->n_free_chunks;
+
+ dev->n_deleted_files = cp->n_deleted_files;
+ dev->n_unlinked_files = cp->n_unlinked_files;
+ dev->n_bg_deletions = cp->n_bg_deletions;
+ dev->seq_number = cp->seq_number;
+}
+
+static int yaffs2_wr_checkpt_dev(struct yaffs_dev *dev)
+{
+ struct yaffs_checkpt_dev cp;
+ u32 n_bytes;
+ u32 n_blocks = dev->internal_end_block - dev->internal_start_block + 1;
+ int ok;
+
+ /* Write device runtime values */
+ yaffs2_dev_to_checkpt_dev(&cp, dev);
+ cp.struct_type = sizeof(cp);
+
+ ok = (yaffs2_checkpt_wr(dev, &cp, sizeof(cp)) == sizeof(cp));
+ if (!ok)
+ return 0;
+
+ /* Write block info */
+ n_bytes = n_blocks * sizeof(struct yaffs_block_info);
+ ok = (yaffs2_checkpt_wr(dev, dev->block_info, n_bytes) == n_bytes);
+ if (!ok)
+ return 0;
+
+ /* Write chunk bits */
+ n_bytes = n_blocks * dev->chunk_bit_stride;
+ ok = (yaffs2_checkpt_wr(dev, dev->chunk_bits, n_bytes) == n_bytes);
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs2_rd_checkpt_dev(struct yaffs_dev *dev)
+{
+ struct yaffs_checkpt_dev cp;
+ u32 n_bytes;
+ u32 n_blocks =
+ (dev->internal_end_block - dev->internal_start_block + 1);
+ int ok;
+
+ ok = (yaffs2_checkpt_rd(dev, &cp, sizeof(cp)) == sizeof(cp));
+ if (!ok)
+ return 0;
+
+ if (cp.struct_type != sizeof(cp))
+ return 0;
+
+ yaffs_checkpt_dev_to_dev(dev, &cp);
+
+ n_bytes = n_blocks * sizeof(struct yaffs_block_info);
+
+ ok = (yaffs2_checkpt_rd(dev, dev->block_info, n_bytes) == n_bytes);
+
+ if (!ok)
+ return 0;
+
+ n_bytes = n_blocks * dev->chunk_bit_stride;
+
+ ok = (yaffs2_checkpt_rd(dev, dev->chunk_bits, n_bytes) == n_bytes);
+
+ return ok ? 1 : 0;
+}
+
+static void yaffs2_obj_checkpt_obj(struct yaffs_checkpt_obj *cp,
+ struct yaffs_obj *obj)
+{
+ cp->obj_id = obj->obj_id;
+ cp->parent_id = (obj->parent) ? obj->parent->obj_id : 0;
+ cp->hdr_chunk = obj->hdr_chunk;
+ cp->variant_type = obj->variant_type;
+ cp->deleted = obj->deleted;
+ cp->soft_del = obj->soft_del;
+ cp->unlinked = obj->unlinked;
+ cp->fake = obj->fake;
+ cp->rename_allowed = obj->rename_allowed;
+ cp->unlink_allowed = obj->unlink_allowed;
+ cp->serial = obj->serial;
+ cp->n_data_chunks = obj->n_data_chunks;
+
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_FILE)
+ cp->size_or_equiv_obj = obj->variant.file_variant.file_size;
+ else if (obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK)
+ cp->size_or_equiv_obj = obj->variant.hardlink_variant.equiv_id;
+}
+
+static int yaffs2_checkpt_obj_to_obj(struct yaffs_obj *obj,
+ struct yaffs_checkpt_obj *cp)
+{
+ struct yaffs_obj *parent;
+
+ if (obj->variant_type != cp->variant_type) {
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "Checkpoint read object %d type %d chunk %d does not match existing object type %d",
+ cp->obj_id, cp->variant_type, cp->hdr_chunk,
+ obj->variant_type);
+ return 0;
+ }
+
+ obj->obj_id = cp->obj_id;
+
+ if (cp->parent_id)
+ parent = yaffs_find_or_create_by_number(obj->my_dev,
+ cp->parent_id,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+ else
+ parent = NULL;
+
+ if (parent) {
+ if (parent->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY) {
+ yaffs_trace(YAFFS_TRACE_ALWAYS,
+ "Checkpoint read object %d parent %d type %d chunk %d Parent type, %d, not directory",
+ cp->obj_id, cp->parent_id,
+ cp->variant_type, cp->hdr_chunk,
+ parent->variant_type);
+ return 0;
+ }
+ yaffs_add_obj_to_dir(parent, obj);
+ }
+
+ obj->hdr_chunk = cp->hdr_chunk;
+ obj->variant_type = cp->variant_type;
+ obj->deleted = cp->deleted;
+ obj->soft_del = cp->soft_del;
+ obj->unlinked = cp->unlinked;
+ obj->fake = cp->fake;
+ obj->rename_allowed = cp->rename_allowed;
+ obj->unlink_allowed = cp->unlink_allowed;
+ obj->serial = cp->serial;
+ obj->n_data_chunks = cp->n_data_chunks;
+
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_FILE)
+ obj->variant.file_variant.file_size = cp->size_or_equiv_obj;
+ else if (obj->variant_type == YAFFS_OBJECT_TYPE_HARDLINK)
+ obj->variant.hardlink_variant.equiv_id = cp->size_or_equiv_obj;
+
+ if (obj->hdr_chunk > 0)
+ obj->lazy_loaded = 1;
+ return 1;
+}
+
+static int yaffs2_checkpt_tnode_worker(struct yaffs_obj *in,
+ struct yaffs_tnode *tn, u32 level,
+ int chunk_offset)
+{
+ int i;
+ struct yaffs_dev *dev = in->my_dev;
+ int ok = 1;
+ u32 base_offset;
+
+ if (!tn)
+ return 1;
+
+ if (level > 0) {
+ for (i = 0; i < YAFFS_NTNODES_INTERNAL && ok; i++) {
+ if (!tn->internal[i])
+ continue;
+ ok = yaffs2_checkpt_tnode_worker(in,
+ tn->internal[i],
+ level - 1,
+ (chunk_offset <<
+ YAFFS_TNODES_INTERNAL_BITS) + i);
+ }
+ return ok;
+ }
+
+ /* Level 0 tnode */
+ base_offset = chunk_offset << YAFFS_TNODES_LEVEL0_BITS;
+ ok = (yaffs2_checkpt_wr(dev, &base_offset, sizeof(base_offset)) ==
+ sizeof(base_offset));
+ if (ok)
+ ok = (yaffs2_checkpt_wr(dev, tn, dev->tnode_size) ==
+ dev->tnode_size);
+
+ return ok;
+}
+
+static int yaffs2_wr_checkpt_tnodes(struct yaffs_obj *obj)
+{
+ u32 end_marker = ~0;
+ int ok = 1;
+
+ if (obj->variant_type != YAFFS_OBJECT_TYPE_FILE)
+ return ok;
+
+ ok = yaffs2_checkpt_tnode_worker(obj,
+ obj->variant.file_variant.top,
+ obj->variant.file_variant.
+ top_level, 0);
+ if (ok)
+ ok = (yaffs2_checkpt_wr(obj->my_dev, &end_marker,
+ sizeof(end_marker)) == sizeof(end_marker));
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs2_rd_checkpt_tnodes(struct yaffs_obj *obj)
+{
+ u32 base_chunk;
+ int ok = 1;
+ struct yaffs_dev *dev = obj->my_dev;
+ struct yaffs_file_var *file_stuct_ptr = &obj->variant.file_variant;
+ struct yaffs_tnode *tn;
+ int nread = 0;
+
+ ok = (yaffs2_checkpt_rd(dev, &base_chunk, sizeof(base_chunk)) ==
+ sizeof(base_chunk));
+
+ while (ok && (~base_chunk)) {
+ nread++;
+ /* Read level 0 tnode */
+
+ tn = yaffs_get_tnode(dev);
+ if (tn)
+ ok = (yaffs2_checkpt_rd(dev, tn, dev->tnode_size) ==
+ dev->tnode_size);
+ else
+ ok = 0;
+
+ if (tn && ok)
+ ok = yaffs_add_find_tnode_0(dev,
+ file_stuct_ptr,
+ base_chunk, tn) ? 1 : 0;
+
+ if (ok)
+ ok = (yaffs2_checkpt_rd
+ (dev, &base_chunk,
+ sizeof(base_chunk)) == sizeof(base_chunk));
+ }
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "Checkpoint read tnodes %d records, last %d. ok %d",
+ nread, base_chunk, ok);
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs2_wr_checkpt_objs(struct yaffs_dev *dev)
+{
+ struct yaffs_obj *obj;
+ struct yaffs_checkpt_obj cp;
+ int i;
+ int ok = 1;
+ struct list_head *lh;
+
+ /* Iterate through the objects in each hash entry,
+ * dumping them to the checkpointing stream.
+ */
+
+ for (i = 0; ok && i < YAFFS_NOBJECT_BUCKETS; i++) {
+ list_for_each(lh, &dev->obj_bucket[i].list) {
+ obj = list_entry(lh, struct yaffs_obj, hash_link);
+ if (!obj->defered_free) {
+ yaffs2_obj_checkpt_obj(&cp, obj);
+ cp.struct_type = sizeof(cp);
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "Checkpoint write object %d parent %d type %d chunk %d obj addr %p",
+ cp.obj_id, cp.parent_id,
+ cp.variant_type, cp.hdr_chunk, obj);
+
+ ok = (yaffs2_checkpt_wr(dev, &cp,
+ sizeof(cp)) == sizeof(cp));
+
+ if (ok &&
+ obj->variant_type ==
+ YAFFS_OBJECT_TYPE_FILE)
+ ok = yaffs2_wr_checkpt_tnodes(obj);
+ }
+ }
+ }
+
+ /* Dump end of list */
+ memset(&cp, 0xff, sizeof(struct yaffs_checkpt_obj));
+ cp.struct_type = sizeof(cp);
+
+ if (ok)
+ ok = (yaffs2_checkpt_wr(dev, &cp, sizeof(cp)) == sizeof(cp));
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs2_rd_checkpt_objs(struct yaffs_dev *dev)
+{
+ struct yaffs_obj *obj;
+ struct yaffs_checkpt_obj cp;
+ int ok = 1;
+ int done = 0;
+ LIST_HEAD(hard_list);
+
+
+ while (ok && !done) {
+ ok = (yaffs2_checkpt_rd(dev, &cp, sizeof(cp)) == sizeof(cp));
+ if (cp.struct_type != sizeof(cp)) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "struct size %d instead of %d ok %d",
+ cp.struct_type, (int)sizeof(cp), ok);
+ ok = 0;
+ }
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "Checkpoint read object %d parent %d type %d chunk %d ",
+ cp.obj_id, cp.parent_id, cp.variant_type,
+ cp.hdr_chunk);
+
+ if (ok && cp.obj_id == ~0) {
+ done = 1;
+ } else if (ok) {
+ obj =
+ yaffs_find_or_create_by_number(dev, cp.obj_id,
+ cp.variant_type);
+ if (obj) {
+ ok = yaffs2_checkpt_obj_to_obj(obj, &cp);
+ if (!ok)
+ break;
+ if (obj->variant_type ==
+ YAFFS_OBJECT_TYPE_FILE) {
+ ok = yaffs2_rd_checkpt_tnodes(obj);
+ } else if (obj->variant_type ==
+ YAFFS_OBJECT_TYPE_HARDLINK) {
+ list_add(&obj->hard_links, &hard_list);
+ }
+ } else {
+ ok = 0;
+ }
+ }
+ }
+
+ if (ok)
+ yaffs_link_fixup(dev, &hard_list);
+
+ return ok ? 1 : 0;
+}
+
+static int yaffs2_wr_checkpt_sum(struct yaffs_dev *dev)
+{
+ u32 checkpt_sum;
+ int ok;
+
+ yaffs2_get_checkpt_sum(dev, &checkpt_sum);
+
+ ok = (yaffs2_checkpt_wr(dev, &checkpt_sum, sizeof(checkpt_sum)) ==
+ sizeof(checkpt_sum));
+
+ if (!ok)
+ return 0;
+
+ return 1;
+}
+
+static int yaffs2_rd_checkpt_sum(struct yaffs_dev *dev)
+{
+ u32 checkpt_sum0;
+ u32 checkpt_sum1;
+ int ok;
+
+ yaffs2_get_checkpt_sum(dev, &checkpt_sum0);
+
+ ok = (yaffs2_checkpt_rd(dev, &checkpt_sum1, sizeof(checkpt_sum1)) ==
+ sizeof(checkpt_sum1));
+
+ if (!ok)
+ return 0;
+
+ if (checkpt_sum0 != checkpt_sum1)
+ return 0;
+
+ return 1;
+}
+
+static int yaffs2_wr_checkpt_data(struct yaffs_dev *dev)
+{
+ int ok = 1;
+
+ if (!yaffs2_checkpt_required(dev)) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "skipping checkpoint write");
+ ok = 0;
+ }
+
+ if (ok)
+ ok = yaffs2_checkpt_open(dev, 1);
+
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "write checkpoint validity");
+ ok = yaffs2_wr_checkpt_validity_marker(dev, 1);
+ }
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "write checkpoint device");
+ ok = yaffs2_wr_checkpt_dev(dev);
+ }
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "write checkpoint objects");
+ ok = yaffs2_wr_checkpt_objs(dev);
+ }
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "write checkpoint validity");
+ ok = yaffs2_wr_checkpt_validity_marker(dev, 0);
+ }
+
+ if (ok)
+ ok = yaffs2_wr_checkpt_sum(dev);
+
+ if (!yaffs_checkpt_close(dev))
+ ok = 0;
+
+ if (ok)
+ dev->is_checkpointed = 1;
+ else
+ dev->is_checkpointed = 0;
+
+ return dev->is_checkpointed;
+}
+
+static int yaffs2_rd_checkpt_data(struct yaffs_dev *dev)
+{
+ int ok = 1;
+
+ if (!dev->param.is_yaffs2)
+ ok = 0;
+
+ if (ok && dev->param.skip_checkpt_rd) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "skipping checkpoint read");
+ ok = 0;
+ }
+
+ if (ok)
+ ok = yaffs2_checkpt_open(dev, 0); /* open for read */
+
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "read checkpoint validity");
+ ok = yaffs2_rd_checkpt_validity_marker(dev, 1);
+ }
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "read checkpoint device");
+ ok = yaffs2_rd_checkpt_dev(dev);
+ }
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "read checkpoint objects");
+ ok = yaffs2_rd_checkpt_objs(dev);
+ }
+ if (ok) {
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "read checkpoint validity");
+ ok = yaffs2_rd_checkpt_validity_marker(dev, 0);
+ }
+
+ if (ok) {
+ ok = yaffs2_rd_checkpt_sum(dev);
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "read checkpoint checksum %d", ok);
+ }
+
+ if (!yaffs_checkpt_close(dev))
+ ok = 0;
+
+ if (ok)
+ dev->is_checkpointed = 1;
+ else
+ dev->is_checkpointed = 0;
+
+ return ok ? 1 : 0;
+}
+
+void yaffs2_checkpt_invalidate(struct yaffs_dev *dev)
+{
+ if (dev->is_checkpointed || dev->blocks_in_checkpt > 0) {
+ dev->is_checkpointed = 0;
+ yaffs2_checkpt_invalidate_stream(dev);
+ }
+ if (dev->param.sb_dirty_fn)
+ dev->param.sb_dirty_fn(dev);
+}
+
+int yaffs_checkpoint_save(struct yaffs_dev *dev)
+{
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "save entry: is_checkpointed %d",
+ dev->is_checkpointed);
+
+ yaffs_verify_objects(dev);
+ yaffs_verify_blocks(dev);
+ yaffs_verify_free_chunks(dev);
+
+ if (!dev->is_checkpointed) {
+ yaffs2_checkpt_invalidate(dev);
+ yaffs2_wr_checkpt_data(dev);
+ }
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT | YAFFS_TRACE_MOUNT,
+ "save exit: is_checkpointed %d",
+ dev->is_checkpointed);
+
+ return dev->is_checkpointed;
+}
+
+int yaffs2_checkpt_restore(struct yaffs_dev *dev)
+{
+ int retval;
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "restore entry: is_checkpointed %d",
+ dev->is_checkpointed);
+
+ retval = yaffs2_rd_checkpt_data(dev);
+
+ if (dev->is_checkpointed) {
+ yaffs_verify_objects(dev);
+ yaffs_verify_blocks(dev);
+ yaffs_verify_free_chunks(dev);
+ }
+
+ yaffs_trace(YAFFS_TRACE_CHECKPOINT,
+ "restore exit: is_checkpointed %d",
+ dev->is_checkpointed);
+
+ return retval;
+}
+
+int yaffs2_handle_hole(struct yaffs_obj *obj, loff_t new_size)
+{
+ /* if new_size > old_file_size.
+ * We're going to be writing a hole.
+ * If the hole is small then write zeros otherwise write a start
+ * of hole marker.
+ */
+ loff_t old_file_size;
+ loff_t increase;
+ int small_hole;
+ int result = YAFFS_OK;
+ struct yaffs_dev *dev = NULL;
+ u8 *local_buffer = NULL;
+ int small_increase_ok = 0;
+
+ if (!obj)
+ return YAFFS_FAIL;
+
+ if (obj->variant_type != YAFFS_OBJECT_TYPE_FILE)
+ return YAFFS_FAIL;
+
+ dev = obj->my_dev;
+
+ /* Bail out if not yaffs2 mode */
+ if (!dev->param.is_yaffs2)
+ return YAFFS_OK;
+
+ old_file_size = obj->variant.file_variant.file_size;
+
+ if (new_size <= old_file_size)
+ return YAFFS_OK;
+
+ increase = new_size - old_file_size;
+
+ if (increase < YAFFS_SMALL_HOLE_THRESHOLD * dev->data_bytes_per_chunk &&
+ yaffs_check_alloc_available(dev, YAFFS_SMALL_HOLE_THRESHOLD + 1))
+ small_hole = 1;
+ else
+ small_hole = 0;
+
+ if (small_hole)
+ local_buffer = yaffs_get_temp_buffer(dev);
+
+ if (local_buffer) {
+ /* fill hole with zero bytes */
+ loff_t pos = old_file_size;
+ int this_write;
+ int written;
+ memset(local_buffer, 0, dev->data_bytes_per_chunk);
+ small_increase_ok = 1;
+
+ while (increase > 0 && small_increase_ok) {
+ this_write = increase;
+ if (this_write > dev->data_bytes_per_chunk)
+ this_write = dev->data_bytes_per_chunk;
+ written =
+ yaffs_do_file_wr(obj, local_buffer, pos, this_write,
+ 0);
+ if (written == this_write) {
+ pos += this_write;
+ increase -= this_write;
+ } else {
+ small_increase_ok = 0;
+ }
+ }
+
+ yaffs_release_temp_buffer(dev, local_buffer);
+
+ /* If out of space then reverse any chunks we've added */
+ if (!small_increase_ok)
+ yaffs_resize_file_down(obj, old_file_size);
+ }
+
+ if (!small_increase_ok &&
+ obj->parent &&
+ obj->parent->obj_id != YAFFS_OBJECTID_UNLINKED &&
+ obj->parent->obj_id != YAFFS_OBJECTID_DELETED) {
+ /* Write a hole start header with the old file size */
+ yaffs_update_oh(obj, NULL, 0, 1, 0, NULL);
+ }
+
+ return result;
+}
+
+struct yaffs_block_index {
+ int seq;
+ int block;
+};
+
+static int yaffs2_ybicmp(const void *a, const void *b)
+{
+ int aseq = ((struct yaffs_block_index *)a)->seq;
+ int bseq = ((struct yaffs_block_index *)b)->seq;
+ int ablock = ((struct yaffs_block_index *)a)->block;
+ int bblock = ((struct yaffs_block_index *)b)->block;
+
+ if (aseq == bseq)
+ return ablock - bblock;
+
+ return aseq - bseq;
+}
+
+static inline int yaffs2_scan_chunk(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi,
+ int blk, int chunk_in_block,
+ int *found_chunks,
+ u8 *chunk_data,
+ struct list_head *hard_list,
+ int summary_available)
+{
+ struct yaffs_obj_hdr *oh;
+ struct yaffs_obj *in;
+ struct yaffs_obj *parent;
+ int equiv_id;
+ loff_t file_size;
+ int is_shrink;
+ int is_unlinked;
+ struct yaffs_ext_tags tags;
+ int alloc_failed = 0;
+ int chunk = blk * dev->param.chunks_per_block + chunk_in_block;
+ struct yaffs_file_var *file_var;
+ struct yaffs_hardlink_var *hl_var;
+ struct yaffs_symlink_var *sl_var;
+
+ if (summary_available) {
+ yaffs_summary_fetch(dev, &tags, chunk_in_block);
+ tags.seq_number = bi->seq_number;
+ }
+
+ if (!summary_available || tags.obj_id == 0) {
+ yaffs_rd_chunk_tags_nand(dev, chunk, NULL, &tags);
+ dev->tags_used++;
+ } else {
+ dev->summary_used++;
+ }
+
+ /* Let's have a good look at this chunk... */
+
+ if (!tags.chunk_used) {
+ /* An unassigned chunk in the block.
+ * If there are used chunks after this one, then
+ * it is a chunk that was skipped due to failing
+ * the erased check. Just skip it so that it can
+ * be deleted.
+ * But, more typically, We get here when this is
+ * an unallocated chunk and his means that
+ * either the block is empty or this is the one
+ * being allocated from
+ */
+
+ if (*found_chunks) {
+ /* This is a chunk that was skipped due
+ * to failing the erased check */
+ } else if (chunk_in_block == 0) {
+ /* We're looking at the first chunk in
+ * the block so the block is unused */
+ bi->block_state = YAFFS_BLOCK_STATE_EMPTY;
+ dev->n_erased_blocks++;
+ } else {
+ if (bi->block_state == YAFFS_BLOCK_STATE_NEEDS_SCAN ||
+ bi->block_state == YAFFS_BLOCK_STATE_ALLOCATING) {
+ if (dev->seq_number == bi->seq_number) {
+ /* Allocating from this block*/
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ " Allocating from %d %d",
+ blk, chunk_in_block);
+
+ bi->block_state =
+ YAFFS_BLOCK_STATE_ALLOCATING;
+ dev->alloc_block = blk;
+ dev->alloc_page = chunk_in_block;
+ dev->alloc_block_finder = blk;
+ } else {
+ /* This is a partially written block
+ * that is not the current
+ * allocation block.
+ */
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "Partially written block %d detected. gc will fix this.",
+ blk);
+ }
+ }
+ }
+
+ dev->n_free_chunks++;
+
+ } else if (tags.ecc_result ==
+ YAFFS_ECC_RESULT_UNFIXED) {
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ " Unfixed ECC in chunk(%d:%d), chunk ignored",
+ blk, chunk_in_block);
+ dev->n_free_chunks++;
+ } else if (tags.obj_id > YAFFS_MAX_OBJECT_ID ||
+ tags.chunk_id > YAFFS_MAX_CHUNK_ID ||
+ tags.obj_id == YAFFS_OBJECTID_SUMMARY ||
+ (tags.chunk_id > 0 &&
+ tags.n_bytes > dev->data_bytes_per_chunk) ||
+ tags.seq_number != bi->seq_number) {
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "Chunk (%d:%d) with bad tags:obj = %d, chunk_id = %d, n_bytes = %d, ignored",
+ blk, chunk_in_block, tags.obj_id,
+ tags.chunk_id, tags.n_bytes);
+ dev->n_free_chunks++;
+ } else if (tags.chunk_id > 0) {
+ /* chunk_id > 0 so it is a data chunk... */
+ loff_t endpos;
+ loff_t chunk_base = (tags.chunk_id - 1) *
+ dev->data_bytes_per_chunk;
+
+ *found_chunks = 1;
+
+ yaffs_set_chunk_bit(dev, blk, chunk_in_block);
+ bi->pages_in_use++;
+
+ in = yaffs_find_or_create_by_number(dev,
+ tags.obj_id,
+ YAFFS_OBJECT_TYPE_FILE);
+ if (!in)
+ /* Out of memory */
+ alloc_failed = 1;
+
+ if (in &&
+ in->variant_type == YAFFS_OBJECT_TYPE_FILE &&
+ chunk_base < in->variant.file_variant.shrink_size) {
+ /* This has not been invalidated by
+ * a resize */
+ if (!yaffs_put_chunk_in_file(in, tags.chunk_id,
+ chunk, -1))
+ alloc_failed = 1;
+
+ /* File size is calculated by looking at
+ * the data chunks if we have not
+ * seen an object header yet.
+ * Stop this practice once we find an
+ * object header.
+ */
+ endpos = chunk_base + tags.n_bytes;
+
+ if (!in->valid &&
+ in->variant.file_variant.scanned_size < endpos) {
+ in->variant.file_variant.
+ scanned_size = endpos;
+ in->variant.file_variant.
+ file_size = endpos;
+ }
+ } else if (in) {
+ /* This chunk has been invalidated by a
+ * resize, or a past file deletion
+ * so delete the chunk*/
+ yaffs_chunk_del(dev, chunk, 1, __LINE__);
+ }
+ } else {
+ /* chunk_id == 0, so it is an ObjectHeader.
+ * Thus, we read in the object header and make
+ * the object
+ */
+ *found_chunks = 1;
+
+ yaffs_set_chunk_bit(dev, blk, chunk_in_block);
+ bi->pages_in_use++;
+
+ oh = NULL;
+ in = NULL;
+
+ if (tags.extra_available) {
+ in = yaffs_find_or_create_by_number(dev,
+ tags.obj_id,
+ tags.extra_obj_type);
+ if (!in)
+ alloc_failed = 1;
+ }
+
+ if (!in ||
+ (!in->valid && dev->param.disable_lazy_load) ||
+ tags.extra_shadows ||
+ (!in->valid && (tags.obj_id == YAFFS_OBJECTID_ROOT ||
+ tags.obj_id == YAFFS_OBJECTID_LOSTNFOUND))) {
+
+ /* If we don't have valid info then we
+ * need to read the chunk
+ * TODO In future we can probably defer
+ * reading the chunk and living with
+ * invalid data until needed.
+ */
+
+ yaffs_rd_chunk_tags_nand(dev, chunk, chunk_data, NULL);
+
+ oh = (struct yaffs_obj_hdr *)chunk_data;
+
+ if (dev->param.inband_tags) {
+ /* Fix up the header if they got
+ * corrupted by inband tags */
+ oh->shadows_obj =
+ oh->inband_shadowed_obj_id;
+ oh->is_shrink =
+ oh->inband_is_shrink;
+ }
+
+ if (!in) {
+ in = yaffs_find_or_create_by_number(dev,
+ tags.obj_id, oh->type);
+ if (!in)
+ alloc_failed = 1;
+ }
+ }
+
+ if (!in) {
+ /* TODO Hoosterman we have a problem! */
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy: Could not make object for object %d at chunk %d during scan",
+ tags.obj_id, chunk);
+ return YAFFS_FAIL;
+ }
+
+ if (in->valid) {
+ /* We have already filled this one.
+ * We have a duplicate that will be
+ * discarded, but we first have to suck
+ * out resize info if it is a file.
+ */
+ if ((in->variant_type == YAFFS_OBJECT_TYPE_FILE) &&
+ ((oh && oh->type == YAFFS_OBJECT_TYPE_FILE) ||
+ (tags.extra_available &&
+ tags.extra_obj_type == YAFFS_OBJECT_TYPE_FILE)
+ )) {
+ loff_t this_size = (oh) ?
+ yaffs_oh_to_size(oh) :
+ tags.extra_file_size;
+ u32 parent_obj_id = (oh) ?
+ oh->parent_obj_id :
+ tags.extra_parent_id;
+
+ is_shrink = (oh) ?
+ oh->is_shrink :
+ tags.extra_is_shrink;
+
+ /* If it is deleted (unlinked
+ * at start also means deleted)
+ * we treat the file size as
+ * being zeroed at this point.
+ */
+ if (parent_obj_id == YAFFS_OBJECTID_DELETED ||
+ parent_obj_id == YAFFS_OBJECTID_UNLINKED) {
+ this_size = 0;
+ is_shrink = 1;
+ }
+
+ if (is_shrink &&
+ in->variant.file_variant.shrink_size >
+ this_size)
+ in->variant.file_variant.shrink_size =
+ this_size;
+
+ if (is_shrink)
+ bi->has_shrink_hdr = 1;
+ }
+ /* Use existing - destroy this one. */
+ yaffs_chunk_del(dev, chunk, 1, __LINE__);
+ }
+
+ if (!in->valid && in->variant_type !=
+ (oh ? oh->type : tags.extra_obj_type))
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy: Bad object type, %d != %d, for object %d at chunk %d during scan",
+ oh ? oh->type : tags.extra_obj_type,
+ in->variant_type, tags.obj_id,
+ chunk);
+
+ if (!in->valid &&
+ (tags.obj_id == YAFFS_OBJECTID_ROOT ||
+ tags.obj_id == YAFFS_OBJECTID_LOSTNFOUND)) {
+ /* We only load some info, don't fiddle
+ * with directory structure */
+ in->valid = 1;
+
+ if (oh) {
+ in->yst_mode = oh->yst_mode;
+ yaffs_load_attribs(in, oh);
+ in->lazy_loaded = 0;
+ } else {
+ in->lazy_loaded = 1;
+ }
+ in->hdr_chunk = chunk;
+
+ } else if (!in->valid) {
+ /* we need to load this info */
+ in->valid = 1;
+ in->hdr_chunk = chunk;
+ if (oh) {
+ in->variant_type = oh->type;
+ in->yst_mode = oh->yst_mode;
+ yaffs_load_attribs(in, oh);
+
+ if (oh->shadows_obj > 0)
+ yaffs_handle_shadowed_obj(dev,
+ oh->shadows_obj, 1);
+
+ yaffs_set_obj_name_from_oh(in, oh);
+ parent = yaffs_find_or_create_by_number(dev,
+ oh->parent_obj_id,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+ file_size = yaffs_oh_to_size(oh);
+ is_shrink = oh->is_shrink;
+ equiv_id = oh->equiv_id;
+ } else {
+ in->variant_type = tags.extra_obj_type;
+ parent = yaffs_find_or_create_by_number(dev,
+ tags.extra_parent_id,
+ YAFFS_OBJECT_TYPE_DIRECTORY);
+ file_size = tags.extra_file_size;
+ is_shrink = tags.extra_is_shrink;
+ equiv_id = tags.extra_equiv_id;
+ in->lazy_loaded = 1;
+ }
+ in->dirty = 0;
+
+ if (!parent)
+ alloc_failed = 1;
+
+ /* directory stuff...
+ * hook up to parent
+ */
+
+ if (parent &&
+ parent->variant_type == YAFFS_OBJECT_TYPE_UNKNOWN) {
+ /* Set up as a directory */
+ parent->variant_type =
+ YAFFS_OBJECT_TYPE_DIRECTORY;
+ INIT_LIST_HEAD(&parent->
+ variant.dir_variant.children);
+ } else if (!parent ||
+ parent->variant_type !=
+ YAFFS_OBJECT_TYPE_DIRECTORY) {
+ /* Hoosterman, another problem....
+ * Trying to use a non-directory as a directory
+ */
+
+ yaffs_trace(YAFFS_TRACE_ERROR,
+ "yaffs tragedy: attempting to use non-directory as a directory in scan. Put in lost+found."
+ );
+ parent = dev->lost_n_found;
+ }
+ yaffs_add_obj_to_dir(parent, in);
+
+ is_unlinked = (parent == dev->del_dir) ||
+ (parent == dev->unlinked_dir);
+
+ if (is_shrink)
+ /* Mark the block */
+ bi->has_shrink_hdr = 1;
+
+ /* Note re hardlinks.
+ * Since we might scan a hardlink before its equivalent
+ * object is scanned we put them all in a list.
+ * After scanning is complete, we should have all the
+ * objects, so we run through this list and fix up all
+ * the chains.
+ */
+
+ switch (in->variant_type) {
+ case YAFFS_OBJECT_TYPE_UNKNOWN:
+ /* Todo got a problem */
+ break;
+ case YAFFS_OBJECT_TYPE_FILE:
+ file_var = &in->variant.file_variant;
+ if (file_var->scanned_size < file_size) {
+ /* This covers the case where the file
+ * size is greater than the data held.
+ * This will happen if the file is
+ * resized to be larger than its
+ * current data extents.
+ */
+ file_var->file_size = file_size;
+ file_var->scanned_size = file_size;
+ }
+
+ if (file_var->shrink_size > file_size)
+ file_var->shrink_size = file_size;
+
+ break;
+ case YAFFS_OBJECT_TYPE_HARDLINK:
+ hl_var = &in->variant.hardlink_variant;
+ if (!is_unlinked) {
+ hl_var->equiv_id = equiv_id;
+ list_add(&in->hard_links, hard_list);
+ }
+ break;
+ case YAFFS_OBJECT_TYPE_DIRECTORY:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SPECIAL:
+ /* Do nothing */
+ break;
+ case YAFFS_OBJECT_TYPE_SYMLINK:
+ sl_var = &in->variant.symlink_variant;
+ if (oh) {
+ sl_var->alias =
+ yaffs_clone_str(oh->alias);
+ if (!sl_var->alias)
+ alloc_failed = 1;
+ }
+ break;
+ }
+ }
+ }
+ return alloc_failed ? YAFFS_FAIL : YAFFS_OK;
+}
+
+int yaffs2_scan_backwards(struct yaffs_dev *dev)
+{
+ int blk;
+ int block_iter;
+ int start_iter;
+ int end_iter;
+ int n_to_scan = 0;
+ enum yaffs_block_state state;
+ int c;
+ LIST_HEAD(hard_list);
+ struct yaffs_block_info *bi;
+ u32 seq_number;
+ int n_blocks = dev->internal_end_block - dev->internal_start_block + 1;
+ u8 *chunk_data;
+ int found_chunks;
+ int alloc_failed = 0;
+ struct yaffs_block_index *block_index = NULL;
+ int alt_block_index = 0;
+ int summary_available;
+
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "yaffs2_scan_backwards starts intstartblk %d intendblk %d...",
+ dev->internal_start_block, dev->internal_end_block);
+
+ dev->seq_number = YAFFS_LOWEST_SEQUENCE_NUMBER;
+
+ block_index =
+ kmalloc(n_blocks * sizeof(struct yaffs_block_index), GFP_NOFS);
+
+ if (!block_index) {
+ block_index =
+ vmalloc(n_blocks * sizeof(struct yaffs_block_index));
+ alt_block_index = 1;
+ }
+
+ if (!block_index) {
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "yaffs2_scan_backwards() could not allocate block index!"
+ );
+ return YAFFS_FAIL;
+ }
+
+ dev->blocks_in_checkpt = 0;
+
+ chunk_data = yaffs_get_temp_buffer(dev);
+
+ /* Scan all the blocks to determine their state */
+ bi = dev->block_info;
+ for (blk = dev->internal_start_block; blk <= dev->internal_end_block;
+ blk++) {
+ yaffs_clear_chunk_bits(dev, blk);
+ bi->pages_in_use = 0;
+ bi->soft_del_pages = 0;
+
+ yaffs_query_init_block_state(dev, blk, &state, &seq_number);
+
+ bi->block_state = state;
+ bi->seq_number = seq_number;
+
+ if (bi->seq_number == YAFFS_SEQUENCE_CHECKPOINT_DATA)
+ bi->block_state = YAFFS_BLOCK_STATE_CHECKPOINT;
+ if (bi->seq_number == YAFFS_SEQUENCE_BAD_BLOCK)
+ bi->block_state = YAFFS_BLOCK_STATE_DEAD;
+
+ yaffs_trace(YAFFS_TRACE_SCAN_DEBUG,
+ "Block scanning block %d state %d seq %d",
+ blk, bi->block_state, seq_number);
+
+ if (bi->block_state == YAFFS_BLOCK_STATE_CHECKPOINT) {
+ dev->blocks_in_checkpt++;
+
+ } else if (bi->block_state == YAFFS_BLOCK_STATE_DEAD) {
+ yaffs_trace(YAFFS_TRACE_BAD_BLOCKS,
+ "block %d is bad", blk);
+ } else if (bi->block_state == YAFFS_BLOCK_STATE_EMPTY) {
+ yaffs_trace(YAFFS_TRACE_SCAN_DEBUG, "Block empty ");
+ dev->n_erased_blocks++;
+ dev->n_free_chunks += dev->param.chunks_per_block;
+ } else if (bi->block_state ==
+ YAFFS_BLOCK_STATE_NEEDS_SCAN) {
+ /* Determine the highest sequence number */
+ if (seq_number >= YAFFS_LOWEST_SEQUENCE_NUMBER &&
+ seq_number < YAFFS_HIGHEST_SEQUENCE_NUMBER) {
+ block_index[n_to_scan].seq = seq_number;
+ block_index[n_to_scan].block = blk;
+ n_to_scan++;
+ if (seq_number >= dev->seq_number)
+ dev->seq_number = seq_number;
+ } else {
+ /* TODO: Nasty sequence number! */
+ yaffs_trace(YAFFS_TRACE_SCAN,
+ "Block scanning block %d has bad sequence number %d",
+ blk, seq_number);
+ }
+ }
+ bi++;
+ }
+
+ yaffs_trace(YAFFS_TRACE_SCAN, "%d blocks to be sorted...", n_to_scan);
+
+ cond_resched();
+
+ /* Sort the blocks by sequence number */
+ sort(block_index, n_to_scan, sizeof(struct yaffs_block_index),
+ yaffs2_ybicmp, NULL);
+
+ cond_resched();
+
+ yaffs_trace(YAFFS_TRACE_SCAN, "...done");
+
+ /* Now scan the blocks looking at the data. */
+ start_iter = 0;
+ end_iter = n_to_scan - 1;
+ yaffs_trace(YAFFS_TRACE_SCAN_DEBUG, "%d blocks to scan", n_to_scan);
+
+ /* For each block.... backwards */
+ for (block_iter = end_iter;
+ !alloc_failed && block_iter >= start_iter;
+ block_iter--) {
+ /* Cooperative multitasking! This loop can run for so
+ long that watchdog timers expire. */
+ cond_resched();
+
+ /* get the block to scan in the correct order */
+ blk = block_index[block_iter].block;
+ bi = yaffs_get_block_info(dev, blk);
+
+ summary_available = yaffs_summary_read(dev, dev->sum_tags, blk);
+
+ /* For each chunk in each block that needs scanning.... */
+ found_chunks = 0;
+ if (summary_available)
+ c = dev->chunks_per_summary - 1;
+ else
+ c = dev->param.chunks_per_block - 1;
+
+ for (/* c is already initialised */;
+ !alloc_failed && c >= 0 &&
+ (bi->block_state == YAFFS_BLOCK_STATE_NEEDS_SCAN ||
+ bi->block_state == YAFFS_BLOCK_STATE_ALLOCATING);
+ c--) {
+ /* Scan backwards...
+ * Read the tags and decide what to do
+ */
+ if (yaffs2_scan_chunk(dev, bi, blk, c,
+ &found_chunks, chunk_data,
+ &hard_list, summary_available) ==
+ YAFFS_FAIL)
+ alloc_failed = 1;
+ }
+
+ if (bi->block_state == YAFFS_BLOCK_STATE_NEEDS_SCAN) {
+ /* If we got this far while scanning, then the block
+ * is fully allocated. */
+ bi->block_state = YAFFS_BLOCK_STATE_FULL;
+ }
+
+ /* Now let's see if it was dirty */
+ if (bi->pages_in_use == 0 &&
+ !bi->has_shrink_hdr &&
+ bi->block_state == YAFFS_BLOCK_STATE_FULL) {
+ yaffs_block_became_dirty(dev, blk);
+ }
+ }
+
+ yaffs_skip_rest_of_block(dev);
+
+ if (alt_block_index)
+ vfree(block_index);
+ else
+ kfree(block_index);
+
+ /* Ok, we've done all the scanning.
+ * Fix up the hard link chains.
+ * We have scanned all the objects, now it's time to add these
+ * hardlinks.
+ */
+ yaffs_link_fixup(dev, &hard_list);
+
+ yaffs_release_temp_buffer(dev, chunk_data);
+
+ if (alloc_failed)
+ return YAFFS_FAIL;
+
+ yaffs_trace(YAFFS_TRACE_SCAN, "yaffs2_scan_backwards ends");
+
+ return YAFFS_OK;
+}
diff --git a/fs/yaffs2/yaffs_yaffs2.h b/fs/yaffs2/yaffs_yaffs2.h
new file mode 100644
index 0000000000..2363bfd8bc
--- /dev/null
+++ b/fs/yaffs2/yaffs_yaffs2.h
@@ -0,0 +1,39 @@
+/*
+ * YAFFS: Yet another Flash File System . A NAND-flash specific file system.
+ *
+ * Copyright (C) 2002-2011 Aleph One Ltd.
+ * for Toby Churchill Ltd and Brightstar Engineering
+ *
+ * Created by Charles Manning <charles@aleph1.co.uk>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 2.1 as
+ * published by the Free Software Foundation.
+ *
+ * Note: Only YAFFS headers are LGPL, YAFFS C code is covered by GPL.
+ */
+
+#ifndef __YAFFS_YAFFS2_H__
+#define __YAFFS_YAFFS2_H__
+
+#include "yaffs_guts.h"
+
+void yaffs_calc_oldest_dirty_seq(struct yaffs_dev *dev);
+void yaffs2_find_oldest_dirty_seq(struct yaffs_dev *dev);
+void yaffs2_clear_oldest_dirty_seq(struct yaffs_dev *dev,
+ struct yaffs_block_info *bi);
+void yaffs2_update_oldest_dirty_seq(struct yaffs_dev *dev, unsigned block_no,
+ struct yaffs_block_info *bi);
+int yaffs_block_ok_for_gc(struct yaffs_dev *dev, struct yaffs_block_info *bi);
+u32 yaffs2_find_refresh_block(struct yaffs_dev *dev);
+int yaffs2_checkpt_required(struct yaffs_dev *dev);
+int yaffs_calc_checkpt_blocks_required(struct yaffs_dev *dev);
+
+void yaffs2_checkpt_invalidate(struct yaffs_dev *dev);
+int yaffs2_checkpt_save(struct yaffs_dev *dev);
+int yaffs2_checkpt_restore(struct yaffs_dev *dev);
+
+int yaffs2_handle_hole(struct yaffs_obj *obj, loff_t new_size);
+int yaffs2_scan_backwards(struct yaffs_dev *dev);
+
+#endif
diff --git a/fs/yaffs2/yaffscfg.c b/fs/yaffs2/yaffscfg.c
deleted file mode 100644
index 01399ea8a2..0000000000
--- a/fs/yaffs2/yaffscfg.c
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
- * YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
- *
- * Copyright (C) 2002-2007 Aleph One Ltd.
- * for Toby Churchill Ltd and Brightstar Engineering
- *
- * Created by Charles Manning <charles@aleph1.co.uk>
- *
- * 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.
- */
-
-/*
- * yaffscfg.c The configuration for the "direct" use of yaffs.
- *
- * This file is intended to be modified to your requirements.
- * There is no need to redistribute this file.
- */
-
-/* XXX U-BOOT XXX */
-#include <common.h>
-
-#include <config.h>
-#include "nand.h"
-#include "yaffscfg.h"
-#include "yaffsfs.h"
-#include "yaffs_packedtags2.h"
-#include "yaffs_mtdif.h"
-#include "yaffs_mtdif2.h"
-#if 0
-#include <errno.h>
-#else
-#include "malloc.h"
-#endif
-
-unsigned yaffs_traceMask = 0x0; /* Disable logging */
-static int yaffs_errno = 0;
-
-void yaffsfs_SetError(int err)
-{
- //Do whatever to set error
- yaffs_errno = err;
-}
-
-int yaffsfs_GetError(void)
-{
- return yaffs_errno;
-}
-
-void yaffsfs_Lock(void)
-{
-}
-
-void yaffsfs_Unlock(void)
-{
-}
-
-__u32 yaffsfs_CurrentTime(void)
-{
- return 0;
-}
-
-void *yaffs_malloc(size_t size)
-{
- return malloc(size);
-}
-
-void yaffs_free(void *ptr)
-{
- free(ptr);
-}
-
-void yaffsfs_LocalInitialisation(void)
-{
- // Define locking semaphore.
-}
-
-// Configuration for:
-// /ram 2MB ramdisk
-// /boot 2MB boot disk (flash)
-// /flash 14MB flash disk (flash)
-// NB Though /boot and /flash occupy the same physical device they
-// are still disticnt "yaffs_Devices. You may think of these as "partitions"
-// using non-overlapping areas in the same device.
-//
-
-#include "yaffs_ramdisk.h"
-#include "yaffs_flashif.h"
-
-static int isMounted = 0;
-#define MOUNT_POINT "/flash"
-extern nand_info_t nand_info[];
-
-/* XXX U-BOOT XXX */
-#if 0
-static yaffs_Device ramDev;
-static yaffs_Device bootDev;
-static yaffs_Device flashDev;
-#endif
-
-static yaffsfs_DeviceConfiguration yaffsfs_config[] = {
-/* XXX U-BOOT XXX */
-#if 0
- { "/ram", &ramDev},
- { "/boot", &bootDev},
- { "/flash", &flashDev},
-#else
- { MOUNT_POINT, 0},
-#endif
- {(void *)0,(void *)0}
-};
-
-
-int yaffs_StartUp(void)
-{
- struct mtd_info *mtd = &nand_info[0];
- int yaffsVersion = 2;
- int nBlocks;
-
- yaffs_Device *flashDev = calloc(1, sizeof(yaffs_Device));
- yaffsfs_config[0].dev = flashDev;
-
- /* store the mtd device for later use */
- flashDev->genericDevice = mtd;
-
- // Stuff to configure YAFFS
- // Stuff to initialise anything special (eg lock semaphore).
- yaffsfs_LocalInitialisation();
-
- // Set up devices
-
-/* XXX U-BOOT XXX */
-#if 0
- // /ram
- ramDev.nBytesPerChunk = 512;
- ramDev.nChunksPerBlock = 32;
- ramDev.nReservedBlocks = 2; // Set this smaller for RAM
- ramDev.startBlock = 1; // Can't use block 0
- ramDev.endBlock = 127; // Last block in 2MB.
- ramDev.useNANDECC = 1;
- ramDev.nShortOpCaches = 0; // Disable caching on this device.
- ramDev.genericDevice = (void *) 0; // Used to identify the device in fstat.
- ramDev.writeChunkWithTagsToNAND = yramdisk_WriteChunkWithTagsToNAND;
- ramDev.readChunkWithTagsFromNAND = yramdisk_ReadChunkWithTagsFromNAND;
- ramDev.eraseBlockInNAND = yramdisk_EraseBlockInNAND;
- ramDev.initialiseNAND = yramdisk_InitialiseNAND;
-
- // /boot
- bootDev.nBytesPerChunk = 612;
- bootDev.nChunksPerBlock = 32;
- bootDev.nReservedBlocks = 5;
- bootDev.startBlock = 1; // Can't use block 0
- bootDev.endBlock = 127; // Last block in 2MB.
- bootDev.useNANDECC = 0; // use YAFFS's ECC
- bootDev.nShortOpCaches = 10; // Use caches
- bootDev.genericDevice = (void *) 1; // Used to identify the device in fstat.
- bootDev.writeChunkToNAND = yflash_WriteChunkToNAND;
- bootDev.readChunkFromNAND = yflash_ReadChunkFromNAND;
- bootDev.eraseBlockInNAND = yflash_EraseBlockInNAND;
- bootDev.initialiseNAND = yflash_InitialiseNAND;
-#endif
-
- // /flash
- flashDev->nReservedBlocks = 5;
-// flashDev->nShortOpCaches = (options.no_cache) ? 0 : 10;
- flashDev->nShortOpCaches = 10; // Use caches
- flashDev->useNANDECC = 0; // do not use YAFFS's ECC
-
- if (yaffsVersion == 2)
- {
- flashDev->writeChunkWithTagsToNAND = nandmtd2_WriteChunkWithTagsToNAND;
- flashDev->readChunkWithTagsFromNAND = nandmtd2_ReadChunkWithTagsFromNAND;
- flashDev->markNANDBlockBad = nandmtd2_MarkNANDBlockBad;
- flashDev->queryNANDBlock = nandmtd2_QueryNANDBlock;
- flashDev->spareBuffer = YMALLOC(mtd->oobsize);
- flashDev->isYaffs2 = 1;
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,17))
- flashDev->nDataBytesPerChunk = mtd->writesize;
- flashDev->nChunksPerBlock = mtd->erasesize / mtd->writesize;
-#else
- flashDev->nDataBytesPerChunk = mtd->oobblock;
- flashDev->nChunksPerBlock = mtd->erasesize / mtd->oobblock;
-#endif
- nBlocks = mtd->size / mtd->erasesize;
-
- flashDev->nCheckpointReservedBlocks = 10;
- flashDev->startBlock = 0;
- flashDev->endBlock = nBlocks - 1;
- }
- else
- {
- flashDev->writeChunkToNAND = nandmtd_WriteChunkToNAND;
- flashDev->readChunkFromNAND = nandmtd_ReadChunkFromNAND;
- flashDev->isYaffs2 = 0;
- nBlocks = mtd->size / (YAFFS_CHUNKS_PER_BLOCK * YAFFS_BYTES_PER_CHUNK);
- flashDev->startBlock = 320;
- flashDev->endBlock = nBlocks - 1;
- flashDev->nChunksPerBlock = YAFFS_CHUNKS_PER_BLOCK;
- flashDev->nDataBytesPerChunk = YAFFS_BYTES_PER_CHUNK;
- }
-
- /* ... and common functions */
- flashDev->eraseBlockInNAND = nandmtd_EraseBlockInNAND;
- flashDev->initialiseNAND = nandmtd_InitialiseNAND;
-
- yaffs_initialise(yaffsfs_config);
-
- return 0;
-}
-
-
-void make_a_file(char *yaffsName,char bval,int sizeOfFile)
-{
- int outh;
- int i;
- unsigned char buffer[100];
-
- outh = yaffs_open(yaffsName, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
- if (outh < 0)
- {
- printf("Error opening file: %d\n", outh);
- return;
- }
-
- memset(buffer,bval,100);
-
- do{
- i = sizeOfFile;
- if(i > 100) i = 100;
- sizeOfFile -= i;
-
- yaffs_write(outh,buffer,i);
-
- } while (sizeOfFile > 0);
-
-
- yaffs_close(outh);
-}
-
-void read_a_file(char *fn)
-{
- int h;
- int i = 0;
- unsigned char b;
-
- h = yaffs_open(fn, O_RDWR,0);
- if(h<0)
- {
- printf("File not found\n");
- return;
- }
-
- while(yaffs_read(h,&b,1)> 0)
- {
- printf("%02x ",b);
- i++;
- if(i > 32)
- {
- printf("\n");
- i = 0;;
- }
- }
- printf("\n");
- yaffs_close(h);
-}
-
-void cmd_yaffs_mount(char *mp)
-{
- yaffs_StartUp();
- int retval = yaffs_mount(mp);
- if( retval != -1)
- isMounted = 1;
- else
- printf("Error mounting %s, return value: %d\n", mp, yaffsfs_GetError());
-}
-
-static void checkMount(void)
-{
- if( !isMounted )
- {
- cmd_yaffs_mount(MOUNT_POINT);
- }
-}
-
-void cmd_yaffs_umount(char *mp)
-{
- checkMount();
- if( yaffs_unmount(mp) == -1)
- printf("Error umounting %s, return value: %d\n", mp, yaffsfs_GetError());
-}
-
-void cmd_yaffs_write_file(char *yaffsName,char bval,int sizeOfFile)
-{
- checkMount();
- make_a_file(yaffsName,bval,sizeOfFile);
-}
-
-
-void cmd_yaffs_read_file(char *fn)
-{
- checkMount();
- read_a_file(fn);
-}
-
-
-void cmd_yaffs_mread_file(char *fn, char *addr)
-{
- int h;
- struct yaffs_stat s;
-
- checkMount();
-
- yaffs_stat(fn,&s);
-
- printf ("Copy %s to 0x%p... ", fn, addr);
- h = yaffs_open(fn, O_RDWR,0);
- if(h<0)
- {
- printf("File not found\n");
- return;
- }
-
- yaffs_read(h,addr,(int)s.st_size);
- printf("\t[DONE]\n");
-
- yaffs_close(h);
-}
-
-
-void cmd_yaffs_mwrite_file(char *fn, char *addr, int size)
-{
- int outh;
-
- checkMount();
- outh = yaffs_open(fn, O_CREAT | O_RDWR | O_TRUNC, S_IREAD | S_IWRITE);
- if (outh < 0)
- {
- printf("Error opening file: %d\n", outh);
- }
-
- yaffs_write(outh,addr,size);
-
- yaffs_close(outh);
-}
-
-
-void cmd_yaffs_ls(const char *mountpt, int longlist)
-{
- int i;
- yaffs_DIR *d;
- yaffs_dirent *de;
- struct yaffs_stat stat;
- char tempstr[255];
-
- checkMount();
- d = yaffs_opendir(mountpt);
-
- if(!d)
- {
- printf("opendir failed\n");
- }
- else
- {
- for(i = 0; (de = yaffs_readdir(d)) != NULL; i++)
- {
- if (longlist)
- {
- sprintf(tempstr, "%s/%s", mountpt, de->d_name);
- yaffs_stat(tempstr, &stat);
- printf("%-25s\t%7ld\n",de->d_name, stat.st_size);
- }
- else
- {
- printf("%s\n",de->d_name);
- }
- }
- }
-}
-
-
-void cmd_yaffs_mkdir(const char *dir)
-{
- checkMount();
-
- int retval = yaffs_mkdir(dir, 0);
-
- if ( retval < 0)
- printf("yaffs_mkdir returning error: %d\n", retval);
-}
-
-void cmd_yaffs_rmdir(const char *dir)
-{
- checkMount();
-
- int retval = yaffs_rmdir(dir);
-
- if ( retval < 0)
- printf("yaffs_rmdir returning error: %d\n", retval);
-}
-
-void cmd_yaffs_rm(const char *path)
-{
- checkMount();
-
- int retval = yaffs_unlink(path);
-
- if ( retval < 0)
- printf("yaffs_unlink returning error: %d\n", retval);
-}
-
-void cmd_yaffs_mv(const char *oldPath, const char *newPath)
-{
- checkMount();
-
- int retval = yaffs_rename(newPath, oldPath);
-
- if ( retval < 0)
- printf("yaffs_unlink returning error: %d\n", retval);
-}
diff --git a/fs/yaffs2/yaffscfg.h b/fs/yaffs2/yaffscfg.h
index 3503dc863f..718504eeac 100644
--- a/fs/yaffs2/yaffscfg.h
+++ b/fs/yaffs2/yaffscfg.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -23,23 +23,16 @@
#define __YAFFSCFG_H__
-#include "devextras.h"
+#include "yportenv.h"
-#define YAFFSFS_N_HANDLES 200
+#define YAFFSFS_N_HANDLES 100
+#define YAFFSFS_N_DSC 20
-typedef struct {
- const char *prefix;
- struct yaffs_DeviceStruct *dev;
-} yaffsfs_DeviceConfiguration;
+struct yaffsfs_DeviceConfiguration {
+ const YCHAR *prefix;
+ struct yaffs_dev *dev;
+};
-void yaffsfs_Lock(void);
-void yaffsfs_Unlock(void);
-
-__u32 yaffsfs_CurrentTime(void);
-
-void yaffsfs_SetError(int err);
-int yaffsfs_GetError(void);
-
#endif
diff --git a/fs/yaffs2/yaffsfs.c b/fs/yaffs2/yaffsfs.c
index 111cb348c0..ac4a010bdf 100644
--- a/fs/yaffs2/yaffsfs.c
+++ b/fs/yaffs2/yaffsfs.c
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet Another Flash File System. A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -11,19 +11,11 @@
* published by the Free Software Foundation.
*/
-/* XXX U-BOOT XXX */
-#include <common.h>
-#include <malloc.h>
-
#include "yaffsfs.h"
#include "yaffs_guts.h"
#include "yaffscfg.h"
#include "yportenv.h"
-
-/* XXX U-BOOT XXX */
-#if 0
-#include <string.h> // for memset
-#endif
+#include "yaffs_trace.h"
#define YAFFSFS_MAX_SYMLINK_DEREFERENCES 5
@@ -31,452 +23,968 @@
#define NULL ((void *)0)
#endif
+/* YAFFSFS_RW_SIZE must be a power of 2 */
+#define YAFFSFS_RW_SHIFT (13)
+#define YAFFSFS_RW_SIZE (1<<YAFFSFS_RW_SHIFT)
-const char *yaffsfs_c_version="$Id: yaffsfs.c,v 1.18 2007/07/18 19:40:38 charles Exp $";
-
-// configurationList is the list of devices that are supported
-static yaffsfs_DeviceConfiguration *yaffsfs_configurationList;
+/* Some forward references */
+static struct yaffs_obj *yaffsfs_FindObject(struct yaffs_obj *relativeDirectory,
+ const YCHAR *path,
+ int symDepth, int getEquiv,
+ struct yaffs_obj **dirOut,
+ int *notDir, int *loop);
+static void yaffsfs_RemoveObjectCallback(struct yaffs_obj *obj);
-/* Some forward references */
-static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const char *path, int symDepth);
-static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj);
+unsigned int yaffs_wr_attempts;
+/*
+ * Handle management.
+ * There are open inodes in struct yaffsfs_Inode.
+ * There are open file descriptors in yaffsfs_FileDes.
+ * There are open handles in yaffsfs_FileDes.
+ *
+ * Things are structured this way to be like the Linux VFS model
+ * so that interactions with the yaffs guts calls are similar.
+ * That means more common code paths and less special code.
+ * That means better testing etc.
+ *
+ * We have 3 layers because:
+ * A handle is different than an fd because you can use dup()
+ * to create a new handle that accesses the *same* fd. The two
+ * handles will use the same offset (part of the fd). We only close
+ * down the fd when there are no more handles accessing it.
+ *
+ * More than one fd can currently access one file, but each fd
+ * has its own permsiions and offset.
+ */
-// Handle management.
-//
+struct yaffsfs_Inode {
+ int count; /* Number of handles accessing this inode */
+ struct yaffs_obj *iObj;
+};
+
+struct yaffsfs_FileDes {
+ u8 reading:1;
+ u8 writing:1;
+ u8 append:1;
+ u8 shareRead:1;
+ u8 shareWrite:1;
+ int inodeId:12; /* Index to corresponding yaffsfs_Inode */
+ int handleCount:10; /* Number of handles for this fd */
+ loff_t position; /* current position in file */
+};
+
+struct yaffsfs_Handle {
+ short int fdId;
+ short int useCount;
+};
+
+
+struct yaffsfs_DirSearchContxt {
+ struct yaffs_dirent de; /* directory entry */
+ YCHAR name[NAME_MAX + 1]; /* name of directory being searched */
+ struct yaffs_obj *dirObj; /* ptr to directory being searched */
+ struct yaffs_obj *nextReturn; /* obj returned by next readddir */
+ struct list_head others;
+ int offset:20;
+ unsigned inUse:1;
+};
+static struct yaffsfs_DirSearchContxt yaffsfs_dsc[YAFFSFS_N_DSC];
+static struct yaffsfs_Inode yaffsfs_inode[YAFFSFS_N_HANDLES];
+static struct yaffsfs_FileDes yaffsfs_fd[YAFFSFS_N_HANDLES];
+static struct yaffsfs_Handle yaffsfs_handle[YAFFSFS_N_HANDLES];
-unsigned int yaffs_wr_attempts;
+static int yaffsfs_handlesInitialised;
-typedef struct
+unsigned yaffs_set_trace(unsigned tm)
{
- __u8 inUse:1; // this handle is in use
- __u8 readOnly:1; // this handle is read only
- __u8 append:1; // append only
- __u8 exclusive:1; // exclusive
- __u32 position; // current position in file
- yaffs_Object *obj; // the object
-}yaffsfs_Handle;
+ yaffs_trace_mask = tm;
+ return yaffs_trace_mask;
+}
+unsigned yaffs_get_trace(void)
+{
+ return yaffs_trace_mask;
+}
-static yaffsfs_Handle yaffsfs_handle[YAFFSFS_N_HANDLES];
+/*
+ * yaffsfs_InitHandle
+ * Inilitalise handle management on start-up.
+ */
-// yaffsfs_InitHandle
-/// Inilitalise handles on start-up.
-//
-static int yaffsfs_InitHandles(void)
+static void yaffsfs_InitHandles(void)
{
int i;
- for(i = 0; i < YAFFSFS_N_HANDLES; i++)
- {
- yaffsfs_handle[i].inUse = 0;
- yaffsfs_handle[i].obj = NULL;
- }
- return 0;
+ if (yaffsfs_handlesInitialised)
+ return;
+
+ memset(yaffsfs_inode, 0, sizeof(yaffsfs_inode));
+ memset(yaffsfs_fd, 0, sizeof(yaffsfs_fd));
+ memset(yaffsfs_handle, 0, sizeof(yaffsfs_handle));
+ memset(yaffsfs_dsc, 0, sizeof(yaffsfs_dsc));
+
+ for (i = 0; i < YAFFSFS_N_HANDLES; i++)
+ yaffsfs_fd[i].inodeId = -1;
+ for (i = 0; i < YAFFSFS_N_HANDLES; i++)
+ yaffsfs_handle[i].fdId = -1;
}
-yaffsfs_Handle *yaffsfs_GetHandlePointer(int h)
+static struct yaffsfs_Handle *yaffsfs_HandleToPointer(int h)
{
- if(h < 0 || h >= YAFFSFS_N_HANDLES)
- {
- return NULL;
- }
+ if (h >= 0 && h < YAFFSFS_N_HANDLES)
+ return &yaffsfs_handle[h];
+ return NULL;
+}
- return &yaffsfs_handle[h];
+static struct yaffsfs_FileDes *yaffsfs_HandleToFileDes(int handle)
+{
+ struct yaffsfs_Handle *h = yaffsfs_HandleToPointer(handle);
+
+ if (h && h->useCount > 0 && h->fdId >= 0 && h->fdId < YAFFSFS_N_HANDLES)
+ return &yaffsfs_fd[h->fdId];
+
+ return NULL;
}
-yaffs_Object *yaffsfs_GetHandleObject(int handle)
+static struct yaffsfs_Inode *yaffsfs_HandleToInode(int handle)
{
- yaffsfs_Handle *h = yaffsfs_GetHandlePointer(handle);
+ struct yaffsfs_FileDes *fd = yaffsfs_HandleToFileDes(handle);
- if(h && h->inUse)
- {
- return h->obj;
- }
+ if (fd && fd->handleCount > 0 &&
+ fd->inodeId >= 0 && fd->inodeId < YAFFSFS_N_HANDLES)
+ return &yaffsfs_inode[fd->inodeId];
return NULL;
}
+static struct yaffs_obj *yaffsfs_HandleToObject(int handle)
+{
+ struct yaffsfs_Inode *in = yaffsfs_HandleToInode(handle);
+
+ if (in)
+ return in->iObj;
+
+ return NULL;
+}
-//yaffsfs_GetHandle
-// Grab a handle (when opening a file)
-//
+/*
+ * yaffsfs_FindInodeIdForObject
+ * Find the inode entry for an object, if it exists.
+ */
-static int yaffsfs_GetHandle(void)
+static int yaffsfs_FindInodeIdForObject(struct yaffs_obj *obj)
{
int i;
- yaffsfs_Handle *h;
-
- for(i = 0; i < YAFFSFS_N_HANDLES; i++)
- {
- h = yaffsfs_GetHandlePointer(i);
- if(!h)
- {
- // todo bug: should never happen
+ int ret = -1;
+
+ if (obj)
+ obj = yaffs_get_equivalent_obj(obj);
+
+ /* Look for it in open inode table */
+ for (i = 0; i < YAFFSFS_N_HANDLES && ret < 0; i++) {
+ if (yaffsfs_inode[i].iObj == obj)
+ ret = i;
+ }
+ return ret;
+}
+
+/*
+ * yaffsfs_GetInodeIdForObject
+ * Grab an inode entry when opening a new inode.
+ */
+static int yaffsfs_GetInodeIdForObject(struct yaffs_obj *obj)
+{
+ int i;
+ int ret;
+ struct yaffsfs_Inode *in = NULL;
+
+ if (obj)
+ obj = yaffs_get_equivalent_obj(obj);
+
+ ret = yaffsfs_FindInodeIdForObject(obj);
+
+ for (i = 0; i < YAFFSFS_N_HANDLES && ret < 0; i++) {
+ if (!yaffsfs_inode[i].iObj)
+ ret = i;
+ }
+
+ if (ret >= 0) {
+ in = &yaffsfs_inode[ret];
+ if (!in->iObj)
+ in->count = 0;
+ in->iObj = obj;
+ in->count++;
+ }
+
+ return ret;
+}
+
+static int yaffsfs_CountHandles(struct yaffs_obj *obj)
+{
+ int i = yaffsfs_FindInodeIdForObject(obj);
+
+ if (i >= 0)
+ return yaffsfs_inode[i].count;
+ else
+ return 0;
+}
+
+static void yaffsfs_ReleaseInode(struct yaffsfs_Inode *in)
+{
+ struct yaffs_obj *obj;
+
+ obj = in->iObj;
+
+ if (obj->unlinked)
+ yaffs_del_obj(obj);
+
+ obj->my_inode = NULL;
+ in->iObj = NULL;
+
+}
+
+static void yaffsfs_PutInode(int inodeId)
+{
+ if (inodeId >= 0 && inodeId < YAFFSFS_N_HANDLES) {
+ struct yaffsfs_Inode *in = &yaffsfs_inode[inodeId];
+ in->count--;
+ if (in->count <= 0) {
+ yaffsfs_ReleaseInode(in);
+ in->count = 0;
}
- if(!h->inUse)
- {
- memset(h,0,sizeof(yaffsfs_Handle));
- h->inUse=1;
+ }
+}
+
+static int yaffsfs_NewHandle(struct yaffsfs_Handle **hptr)
+{
+ int i;
+ struct yaffsfs_Handle *h;
+
+ for (i = 0; i < YAFFSFS_N_HANDLES; i++) {
+ h = &yaffsfs_handle[i];
+ if (h->useCount < 1) {
+ memset(h, 0, sizeof(struct yaffsfs_Handle));
+ h->fdId = -1;
+ h->useCount = 1;
+ if (hptr)
+ *hptr = h;
return i;
}
}
return -1;
}
-// yaffs_PutHandle
-// Let go of a handle (when closing a file)
-//
-static int yaffsfs_PutHandle(int handle)
+static int yaffsfs_NewHandleAndFileDes(void)
+{
+ int i;
+ struct yaffsfs_FileDes *fd;
+ struct yaffsfs_Handle *h = NULL;
+ int handle = yaffsfs_NewHandle(&h);
+
+ if (handle < 0)
+ return -1;
+
+ for (i = 0; i < YAFFSFS_N_HANDLES; i++) {
+ fd = &yaffsfs_fd[i];
+ if (fd->handleCount < 1) {
+ memset(fd, 0, sizeof(struct yaffsfs_FileDes));
+ fd->inodeId = -1;
+ fd->handleCount = 1;
+ h->fdId = i;
+ return handle;
+ }
+ }
+
+ /* Dump the handle because we could not get a fd */
+ h->useCount = 0;
+ return -1;
+}
+
+/*
+ * yaffs_get_handle
+ * Increase use of handle when reading/writing a file
+ * Also gets the file descriptor.
+ */
+
+static int yaffsfs_GetHandle(int handle)
{
- yaffsfs_Handle *h = yaffsfs_GetHandlePointer(handle);
+ struct yaffsfs_Handle *h = yaffsfs_HandleToPointer(handle);
- if(h)
- {
- h->inUse = 0;
- h->obj = NULL;
+ if (h && h->useCount > 0) {
+ h->useCount++;
+ return 0;
+ }
+ return -1;
+}
+
+/*
+ * yaffs_put_handle
+ * Let go of a handle when closing a file or aborting an open or
+ * ending a read or write.
+ */
+
+static int yaffsfs_PutFileDes(int fdId)
+{
+ struct yaffsfs_FileDes *fd;
+
+ if (fdId >= 0 && fdId < YAFFSFS_N_HANDLES) {
+ fd = &yaffsfs_fd[fdId];
+ fd->handleCount--;
+ if (fd->handleCount < 1) {
+ if (fd->inodeId >= 0) {
+ yaffsfs_PutInode(fd->inodeId);
+ fd->inodeId = -1;
+ }
+ }
}
return 0;
}
+static int yaffsfs_PutHandle(int handle)
+{
+ struct yaffsfs_Handle *h = yaffsfs_HandleToPointer(handle);
+ if (h && h->useCount > 0) {
+ h->useCount--;
+ if (h->useCount < 1) {
+ yaffsfs_PutFileDes(h->fdId);
+ h->fdId = -1;
+ }
+ }
-// Stuff to search for a directory from a path
+ return 0;
+}
+static void yaffsfs_BreakDeviceHandles(struct yaffs_dev *dev)
+{
+ struct yaffsfs_FileDes *fd;
+ struct yaffsfs_Handle *h;
+ struct yaffs_obj *obj;
+ int i;
+ for (i = 0; i < YAFFSFS_N_HANDLES; i++) {
+ h = yaffsfs_HandleToPointer(i);
+ fd = yaffsfs_HandleToFileDes(i);
+ obj = yaffsfs_HandleToObject(i);
+ if (h && h->useCount > 0) {
+ h->useCount = 0;
+ h->fdId = 0;
+ }
+ if (fd && fd->handleCount > 0 && obj && obj->my_dev == dev) {
+ fd->handleCount = 0;
+ yaffsfs_PutInode(fd->inodeId);
+ fd->inodeId = -1;
+ }
+ }
+}
-int yaffsfs_Match(char a, char b)
+/*
+ * Stuff to handle names.
+ */
+#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
+
+static int yaffs_toupper(YCHAR a)
+{
+ if (a >= 'a' && a <= 'z')
+ return (a - 'a') + 'A';
+ else
+ return a;
+}
+
+int yaffsfs_Match(YCHAR a, YCHAR b)
+{
+ return (yaffs_toupper(a) == yaffs_toupper(b));
+}
+#else
+int yaffsfs_Match(YCHAR a, YCHAR b)
{
- // case sensitive
+ /* case sensitive */
return (a == b);
}
+#endif
-// yaffsfs_FindDevice
-// yaffsfs_FindRoot
-// Scan the configuration list to find the root.
-// Curveballs: Should match paths that end in '/' too
-// Curveball2 Might have "/x/ and "/x/y". Need to return the longest match
-static yaffs_Device *yaffsfs_FindDevice(const char *path, char **restOfPath)
+int yaffsfs_IsPathDivider(YCHAR ch)
{
- yaffsfs_DeviceConfiguration *cfg = yaffsfs_configurationList;
- const char *leftOver;
- const char *p;
- yaffs_Device *retval = NULL;
+ const YCHAR *str = YAFFS_PATH_DIVIDERS;
+
+ while (*str) {
+ if (*str == ch)
+ return 1;
+ str++;
+ }
+
+ return 0;
+}
+
+int yaffsfs_CheckNameLength(const char *name)
+{
+ int retVal = 0;
+
+ int nameLength = yaffs_strnlen(name, YAFFS_MAX_NAME_LENGTH + 1);
+
+ if (nameLength == 0) {
+ yaffsfs_SetError(-ENOENT);
+ retVal = -1;
+ } else if (nameLength > YAFFS_MAX_NAME_LENGTH) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ retVal = -1;
+ }
+
+ return retVal;
+}
+
+static int yaffsfs_alt_dir_path(const YCHAR *path, YCHAR **ret_path)
+{
+ YCHAR *alt_path = NULL;
+ int path_length;
+ int i;
+
+ /*
+ * We don't have a definition for max path length.
+ * We will use 3 * max name length instead.
+ */
+ *ret_path = NULL;
+ path_length = yaffs_strnlen(path, (YAFFS_MAX_NAME_LENGTH + 1) * 3 + 1);
+
+ /* If the last character is a path divider, then we need to
+ * trim it back so that the name look-up works properly.
+ * eg. /foo/new_dir/ -> /foo/newdir
+ * Curveball: Need to handle multiple path dividers:
+ * eg. /foof/sdfse///// -> /foo/sdfse
+ */
+ if (path_length > 0 && yaffsfs_IsPathDivider(path[path_length - 1])) {
+ alt_path = kmalloc(path_length + 1, 0);
+ if (!alt_path)
+ return -1;
+ yaffs_strcpy(alt_path, path);
+ for (i = path_length - 1;
+ i >= 0 && yaffsfs_IsPathDivider(alt_path[i]); i--)
+ alt_path[i] = (YCHAR) 0;
+ }
+ *ret_path = alt_path;
+ return 0;
+}
+
+LIST_HEAD(yaffsfs_deviceList);
+
+/*
+ * yaffsfs_FindDevice
+ * yaffsfs_FindRoot
+ * Scan the configuration list to find the device
+ * Curveballs: Should match paths that end in '/' too
+ * Curveball2 Might have "/x/ and "/x/y". Need to return the longest match
+ */
+static struct yaffs_dev *yaffsfs_FindDevice(const YCHAR *path,
+ YCHAR **restOfPath)
+{
+ struct list_head *cfg;
+ const YCHAR *leftOver;
+ const YCHAR *p;
+ struct yaffs_dev *retval = NULL;
+ struct yaffs_dev *dev = NULL;
int thisMatchLength;
int longestMatch = -1;
+ int matching;
- // Check all configs, choose the one that:
- // 1) Actually matches a prefix (ie /a amd /abc will not match
- // 2) Matches the longest.
- while(cfg && cfg->prefix && cfg->dev)
- {
+ /*
+ * Check all configs, choose the one that:
+ * 1) Actually matches a prefix (ie /a amd /abc will not match
+ * 2) Matches the longest.
+ */
+ list_for_each(cfg, &yaffsfs_deviceList) {
+ dev = list_entry(cfg, struct yaffs_dev, dev_list);
leftOver = path;
- p = cfg->prefix;
+ p = dev->param.name;
thisMatchLength = 0;
+ matching = 1;
+
+ while (matching && *p && *leftOver) {
+ /* Skip over any /s */
+ while (yaffsfs_IsPathDivider(*p))
+ p++;
+
+ /* Skip over any /s */
+ while (yaffsfs_IsPathDivider(*leftOver))
+ leftOver++;
+
+ /* Now match the text part */
+ while (matching &&
+ *p && !yaffsfs_IsPathDivider(*p) &&
+ *leftOver && !yaffsfs_IsPathDivider(*leftOver)) {
+ if (yaffsfs_Match(*p, *leftOver)) {
+ p++;
+ leftOver++;
+ thisMatchLength++;
+ } else {
+ matching = 0;
+ }
+ }
+ }
- while(*p && //unmatched part of prefix
- strcmp(p,"/") && // the rest of the prefix is not / (to catch / at end)
- *leftOver &&
- yaffsfs_Match(*p,*leftOver))
- {
- p++;
+ /* Skip over any /s in leftOver */
+ while (yaffsfs_IsPathDivider(*leftOver))
leftOver++;
- thisMatchLength++;
- }
- if((!*p || strcmp(p,"/") == 0) && // end of prefix
- (!*leftOver || *leftOver == '/') && // no more in this path name part
- (thisMatchLength > longestMatch))
- {
- // Matched prefix
- *restOfPath = (char *)leftOver;
- retval = cfg->dev;
+
+ /*Skip over any /s in p */
+ while (yaffsfs_IsPathDivider(*p))
+ p++;
+
+ /* p should now be at the end of the string if fully matched */
+ if (*p)
+ matching = 0;
+
+ if (matching && (thisMatchLength > longestMatch)) {
+ /* Matched prefix */
+ *restOfPath = (YCHAR *) leftOver;
+ retval = dev;
longestMatch = thisMatchLength;
}
- cfg++;
+
}
return retval;
}
-static yaffs_Object *yaffsfs_FindRoot(const char *path, char **restOfPath)
+static int yaffsfs_CheckPath(const YCHAR *path)
{
+ int n = 0;
+ int divs = 0;
- yaffs_Device *dev;
-
- dev= yaffsfs_FindDevice(path,restOfPath);
- if(dev && dev->isMounted)
- {
- return dev->rootDir;
+ while (*path && n < YAFFS_MAX_NAME_LENGTH && divs < 100) {
+ if (yaffsfs_IsPathDivider(*path)) {
+ n = 0;
+ divs++;
+ } else
+ n++;
+ path++;
}
+
+ return (*path) ? -1 : 0;
+}
+
+/* FindMountPoint only returns a dev entry if the path is a mount point */
+static struct yaffs_dev *yaffsfs_FindMountPoint(const YCHAR *path)
+{
+ struct yaffs_dev *dev;
+ YCHAR *restOfPath = NULL;
+
+ dev = yaffsfs_FindDevice(path, &restOfPath);
+ if (dev && restOfPath && *restOfPath)
+ dev = NULL;
+ return dev;
+}
+
+static struct yaffs_obj *yaffsfs_FindRoot(const YCHAR *path,
+ YCHAR **restOfPath)
+{
+ struct yaffs_dev *dev;
+
+ dev = yaffsfs_FindDevice(path, restOfPath);
+ if (dev && dev->is_mounted)
+ return dev->root_dir;
+
return NULL;
}
-static yaffs_Object *yaffsfs_FollowLink(yaffs_Object *obj,int symDepth)
+static struct yaffs_obj *yaffsfs_FollowLink(struct yaffs_obj *obj,
+ int symDepth, int *loop)
{
- while(obj && obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
- char *alias = obj->variant.symLinkVariant.alias;
+ if (obj)
+ obj = yaffs_get_equivalent_obj(obj);
- if(*alias == '/')
- {
- // Starts with a /, need to scan from root up
- obj = yaffsfs_FindObject(NULL,alias,symDepth++);
- }
+ while (obj && obj->variant_type == YAFFS_OBJECT_TYPE_SYMLINK) {
+ YCHAR *alias = obj->variant.symlink_variant.alias;
+
+ if (yaffsfs_IsPathDivider(*alias))
+ /* Starts with a /, need to scan from root up */
+ obj = yaffsfs_FindObject(NULL, alias, symDepth++,
+ 1, NULL, NULL, loop);
else
- {
- // Relative to here, so use the parent of the symlink as a start
- obj = yaffsfs_FindObject(obj->parent,alias,symDepth++);
- }
+ /*
+ * Relative to here so use the parent of the
+ * symlink as a start
+ */
+ obj = yaffsfs_FindObject(obj->parent, alias, symDepth++,
+ 1, NULL, NULL, loop);
}
return obj;
}
-
-// yaffsfs_FindDirectory
-// Parse a path to determine the directory and the name within the directory.
-//
-// eg. "/data/xx/ff" --> puts name="ff" and returns the directory "/data/xx"
-static yaffs_Object *yaffsfs_DoFindDirectory(yaffs_Object *startDir,const char *path,char **name,int symDepth)
+/*
+ * yaffsfs_FindDirectory
+ * Parse a path to determine the directory and the name within the directory.
+ *
+ * eg. "/data/xx/ff" --> puts name="ff" and returns the directory "/data/xx"
+ */
+static struct yaffs_obj *yaffsfs_DoFindDirectory(struct yaffs_obj *startDir,
+ const YCHAR *path,
+ YCHAR **name, int symDepth,
+ int *notDir, int *loop)
{
- yaffs_Object *dir;
- char *restOfPath;
- char str[YAFFS_MAX_NAME_LENGTH+1];
+ struct yaffs_obj *dir;
+ YCHAR *restOfPath;
+ YCHAR str[YAFFS_MAX_NAME_LENGTH + 1];
int i;
- if(symDepth > YAFFSFS_MAX_SYMLINK_DEREFERENCES)
- {
+ if (symDepth > YAFFSFS_MAX_SYMLINK_DEREFERENCES) {
+ if (loop)
+ *loop = 1;
return NULL;
}
- if(startDir)
- {
+ if (startDir) {
dir = startDir;
- restOfPath = (char *)path;
- }
- else
- {
- dir = yaffsfs_FindRoot(path,&restOfPath);
- }
-
- while(dir)
- {
- // parse off /.
- // curve ball: also throw away surplus '/'
- // eg. "/ram/x////ff" gets treated the same as "/ram/x/ff"
- while(*restOfPath == '/')
- {
- restOfPath++; // get rid of '/'
- }
+ restOfPath = (YCHAR *) path;
+ } else
+ dir = yaffsfs_FindRoot(path, &restOfPath);
+
+ while (dir) {
+ /*
+ * parse off /.
+ * curve ball: also throw away surplus '/'
+ * eg. "/ram/x////ff" gets treated the same as "/ram/x/ff"
+ */
+ while (yaffsfs_IsPathDivider(*restOfPath))
+ restOfPath++; /* get rid of '/' */
*name = restOfPath;
i = 0;
- while(*restOfPath && *restOfPath != '/')
- {
- if (i < YAFFS_MAX_NAME_LENGTH)
- {
+ while (*restOfPath && !yaffsfs_IsPathDivider(*restOfPath)) {
+ if (i < YAFFS_MAX_NAME_LENGTH) {
str[i] = *restOfPath;
- str[i+1] = '\0';
+ str[i + 1] = '\0';
i++;
}
restOfPath++;
}
- if(!*restOfPath)
- {
- // got to the end of the string
+ if (!*restOfPath)
+ /* got to the end of the string */
return dir;
- }
- else
- {
- if(strcmp(str,".") == 0)
- {
- // Do nothing
- }
- else if(strcmp(str,"..") == 0)
- {
+ else {
+ if (yaffs_strcmp(str, _Y(".")) == 0) {
+ /* Do nothing */
+ } else if (yaffs_strcmp(str, _Y("..")) == 0) {
dir = dir->parent;
- }
- else
- {
- dir = yaffs_FindObjectByName(dir,str);
-
- while(dir && dir->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
+ } else {
+ dir = yaffs_find_by_name(dir, str);
- dir = yaffsfs_FollowLink(dir,symDepth);
+ dir = yaffsfs_FollowLink(dir, symDepth, loop);
- }
-
- if(dir && dir->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
- {
+ if (dir && dir->variant_type !=
+ YAFFS_OBJECT_TYPE_DIRECTORY) {
+ if (notDir)
+ *notDir = 1;
dir = NULL;
}
+
}
}
}
- // directory did not exist.
+ /* directory did not exist. */
return NULL;
}
-static yaffs_Object *yaffsfs_FindDirectory(yaffs_Object *relativeDirectory,const char *path,char **name,int symDepth)
+static struct yaffs_obj *yaffsfs_FindDirectory(struct yaffs_obj *relDir,
+ const YCHAR *path,
+ YCHAR **name,
+ int symDepth,
+ int *notDir, int *loop)
{
- return yaffsfs_DoFindDirectory(relativeDirectory,path,name,symDepth);
+ return yaffsfs_DoFindDirectory(relDir, path, name, symDepth, notDir,
+ loop);
}
-// yaffsfs_FindObject turns a path for an existing object into the object
-//
-static yaffs_Object *yaffsfs_FindObject(yaffs_Object *relativeDirectory, const char *path,int symDepth)
+/*
+ * yaffsfs_FindObject turns a path for an existing object into the object
+ */
+static struct yaffs_obj *yaffsfs_FindObject(struct yaffs_obj *relDir,
+ const YCHAR *path, int symDepth,
+ int getEquiv,
+ struct yaffs_obj **dirOut,
+ int *notDir, int *loop)
{
- yaffs_Object *dir;
- char *name;
+ struct yaffs_obj *dir;
+ struct yaffs_obj *obj;
+ YCHAR *name;
+
+ dir =
+ yaffsfs_FindDirectory(relDir, path, &name, symDepth, notDir, loop);
+
+ if (dirOut)
+ *dirOut = dir;
+
+ if (dir && *name)
+ obj = yaffs_find_by_name(dir, name);
+ else
+ obj = dir;
+
+ if (getEquiv)
+ obj = yaffs_get_equivalent_obj(obj);
+
+ return obj;
+}
+
+/*************************************************************************
+ * Start of yaffsfs visible functions.
+ *************************************************************************/
- dir = yaffsfs_FindDirectory(relativeDirectory,path,&name,symDepth);
+int yaffs_dup(int handle)
+{
+ int newHandleNumber = -1;
+ struct yaffsfs_FileDes *existingFD = NULL;
+ struct yaffsfs_Handle *existingHandle = NULL;
+ struct yaffsfs_Handle *newHandle = NULL;
- if(dir && *name)
- {
- return yaffs_FindObjectByName(dir,name);
+ yaffsfs_Lock();
+ existingHandle = yaffsfs_HandleToPointer(handle);
+ existingFD = yaffsfs_HandleToFileDes(handle);
+ if (existingFD)
+ newHandleNumber = yaffsfs_NewHandle(&newHandle);
+ if (newHandle) {
+ newHandle->fdId = existingHandle->fdId;
+ existingFD->handleCount++;
}
- return dir;
+ yaffsfs_Unlock();
+
+ if (!existingFD)
+ yaffsfs_SetError(-EBADF);
+ else if (!newHandle)
+ yaffsfs_SetError(-ENOMEM);
+
+ return newHandleNumber;
+
}
+static int yaffsfs_TooManyObjects(struct yaffs_dev *dev)
+{
+ int current_objects = dev->n_obj - dev->n_deleted_files;
+ if (dev->param.max_objects && current_objects > dev->param.max_objects)
+ return 1;
+ else
+ return 0;
+}
-int yaffs_open(const char *path, int oflag, int mode)
+int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int sharing)
{
- yaffs_Object *obj = NULL;
- yaffs_Object *dir = NULL;
- char *name;
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ YCHAR *name;
int handle = -1;
- yaffsfs_Handle *h = NULL;
- int alreadyOpen = 0;
- int alreadyExclusive = 0;
+ struct yaffsfs_FileDes *fd = NULL;
int openDenied = 0;
int symDepth = 0;
int errorReported = 0;
+ int rwflags = oflag & (O_RDWR | O_RDONLY | O_WRONLY);
+ u8 shareRead = (sharing & YAFFS_SHARE_READ) ? 1 : 0;
+ u8 shareWrite = (sharing & YAFFS_SHARE_WRITE) ? 1 : 0;
+ u8 sharedReadAllowed;
+ u8 sharedWriteAllowed;
+ u8 alreadyReading;
+ u8 alreadyWriting;
+ u8 readRequested;
+ u8 writeRequested;
+ int notDir = 0;
+ int loop = 0;
- int i;
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ /* O_EXCL only has meaning if O_CREAT is specified */
+ if (!(oflag & O_CREAT))
+ oflag &= ~(O_EXCL);
+
+ /* O_TRUNC has no meaning if (O_CREAT | O_EXCL) is specified */
+ if ((oflag & O_CREAT) & (oflag & O_EXCL))
+ oflag &= ~(O_TRUNC);
+ /* Todo: Are there any more flag combos to sanitise ? */
- // todo sanity check oflag (eg. can't have O_TRUNC without WRONLY or RDWR
+ /* Figure out if reading or writing is requested */
+ readRequested = (rwflags == O_RDWR || rwflags == O_RDONLY) ? 1 : 0;
+ writeRequested = (rwflags == O_RDWR || rwflags == O_WRONLY) ? 1 : 0;
yaffsfs_Lock();
- handle = yaffsfs_GetHandle();
+ handle = yaffsfs_NewHandleAndFileDes();
- if(handle >= 0)
- {
+ if (handle < 0) {
+ yaffsfs_SetError(-ENFILE);
+ errorReported = 1;
+ } else {
- h = yaffsfs_GetHandlePointer(handle);
+ fd = yaffsfs_HandleToFileDes(handle);
+ /* try to find the exisiting object */
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, NULL, NULL, NULL);
- // try to find the exisiting object
- obj = yaffsfs_FindObject(NULL,path,0);
+ obj = yaffsfs_FollowLink(obj, symDepth++, &loop);
- if(obj && obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
+ if (obj &&
+ obj->variant_type != YAFFS_OBJECT_TYPE_FILE &&
+ obj->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY)
+ obj = NULL;
- obj = yaffsfs_FollowLink(obj,symDepth++);
- }
+ if (obj) {
- if(obj)
- {
- // Check if the object is already in use
- alreadyOpen = alreadyExclusive = 0;
-
- for(i = 0; i <= YAFFSFS_N_HANDLES; i++)
- {
-
- if(i != handle &&
- yaffsfs_handle[i].inUse &&
- obj == yaffsfs_handle[i].obj)
- {
- alreadyOpen = 1;
- if(yaffsfs_handle[i].exclusive)
- {
- alreadyExclusive = 1;
- }
- }
- }
+ /* The file already exists or it might be a directory */
- if(((oflag & O_EXCL) && alreadyOpen) || alreadyExclusive)
- {
+ /* A directory can't be opened as a file */
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) {
openDenied = 1;
+ yaffsfs_SetError(-EISDIR);
+ errorReported = 1;
}
- // Open should fail if O_CREAT and O_EXCL are specified
- if((oflag & O_EXCL) && (oflag & O_CREAT))
- {
+ /* Open should fail if O_CREAT and O_EXCL are specified
+ * for a file that exists.
+ */
+ if (!errorReported &&
+ (oflag & O_EXCL) && (oflag & O_CREAT)) {
openDenied = 1;
yaffsfs_SetError(-EEXIST);
errorReported = 1;
}
- // Check file permissions
- if( (oflag & (O_RDWR | O_WRONLY)) == 0 && // ie O_RDONLY
- !(obj->yst_mode & S_IREAD))
- {
+ /* Check file permissions */
+ if (readRequested && !(obj->yst_mode & S_IREAD))
openDenied = 1;
- }
- if( (oflag & O_RDWR) &&
- !(obj->yst_mode & S_IREAD))
- {
+ if (writeRequested && !(obj->yst_mode & S_IWRITE))
openDenied = 1;
- }
- if( (oflag & (O_RDWR | O_WRONLY)) &&
- !(obj->yst_mode & S_IWRITE))
- {
+ if (!errorReported && writeRequested &&
+ obj->my_dev->read_only) {
openDenied = 1;
+ yaffsfs_SetError(-EROFS);
+ errorReported = 1;
}
- }
+ if (openDenied && !errorReported) {
+ yaffsfs_SetError(-EACCES);
+ errorReported = 1;
+ }
+
+ /* Check sharing of an existing object. */
+ if (!openDenied) {
+ struct yaffsfs_FileDes *fdx;
+ int i;
+
+ sharedReadAllowed = 1;
+ sharedWriteAllowed = 1;
+ alreadyReading = 0;
+ alreadyWriting = 0;
+ for (i = 0; i < YAFFSFS_N_HANDLES; i++) {
+ fdx = &yaffsfs_fd[i];
+ if (fdx->handleCount > 0 &&
+ fdx->inodeId >= 0 &&
+ yaffsfs_inode[fdx->inodeId].iObj
+ == obj) {
+ if (!fdx->shareRead)
+ sharedReadAllowed = 0;
+ if (!fdx->shareWrite)
+ sharedWriteAllowed = 0;
+ if (fdx->reading)
+ alreadyReading = 1;
+ if (fdx->writing)
+ alreadyWriting = 1;
+ }
+ }
- else if((oflag & O_CREAT))
- {
- // Let's see if we can create this file
- dir = yaffsfs_FindDirectory(NULL,path,&name,0);
- if(dir)
- {
- obj = yaffs_MknodFile(dir,name,mode,0,0);
+ if ((!sharedReadAllowed && readRequested) ||
+ (!shareRead && alreadyReading) ||
+ (!sharedWriteAllowed && writeRequested) ||
+ (!shareWrite && alreadyWriting)) {
+ openDenied = 1;
+ yaffsfs_SetError(-EBUSY);
+ errorReported = 1;
+ }
}
- else
- {
+
+ }
+
+ /* If we could not open an existing object, then let's see if
+ * the directory exists. If not, error.
+ */
+ if (!obj && !errorReported) {
+ dir = yaffsfs_FindDirectory(NULL, path, &name, 0,
+ &notDir, &loop);
+ if (!dir && notDir) {
yaffsfs_SetError(-ENOTDIR);
+ errorReported = 1;
+ } else if (loop) {
+ yaffsfs_SetError(-ELOOP);
+ errorReported = 1;
+ } else if (!dir) {
+ yaffsfs_SetError(-ENOENT);
+ errorReported = 1;
}
}
- if(obj && !openDenied)
- {
- h->obj = obj;
- h->inUse = 1;
- h->readOnly = (oflag & (O_WRONLY | O_RDWR)) ? 0 : 1;
- h->append = (oflag & O_APPEND) ? 1 : 0;
- h->exclusive = (oflag & O_EXCL) ? 1 : 0;
- h->position = 0;
-
- obj->inUse++;
- if((oflag & O_TRUNC) && !h->readOnly)
- {
- //todo truncate
- yaffs_ResizeFile(obj,0);
+ if (!obj && dir && !errorReported && (oflag & O_CREAT)) {
+ /* Let's see if we can create this file */
+ if (dir->my_dev->read_only) {
+ yaffsfs_SetError(-EROFS);
+ errorReported = 1;
+ } else if (yaffsfs_TooManyObjects(dir->my_dev)) {
+ yaffsfs_SetError(-ENFILE);
+ errorReported = 1;
+ } else
+ obj = yaffs_create_file(dir, name, mode, 0, 0);
+
+ if (!obj && !errorReported) {
+ yaffsfs_SetError(-ENOSPC);
+ errorReported = 1;
}
+ }
+ if (!obj && dir && !errorReported && !(oflag & O_CREAT)) {
+ yaffsfs_SetError(-ENOENT);
+ errorReported = 1;
}
- else
- {
- yaffsfs_PutHandle(handle);
- if(!errorReported)
- {
- yaffsfs_SetError(-EACCESS);
- errorReported = 1;
+
+ if (obj && !openDenied) {
+ int inodeId = yaffsfs_GetInodeIdForObject(obj);
+
+ if (inodeId < 0) {
+ /*
+ * Todo: Fix any problem if inodes run out,
+ * That can't happen if the number of inode
+ * items >= number of handles.
+ */
}
+
+ fd->inodeId = inodeId;
+ fd->reading = readRequested;
+ fd->writing = writeRequested;
+ fd->append = (oflag & O_APPEND) ? 1 : 0;
+ fd->position = 0;
+ fd->shareRead = shareRead;
+ fd->shareWrite = shareWrite;
+
+ /* Hook inode to object */
+ obj->my_inode = (void *)&yaffsfs_inode[inodeId];
+
+ if ((oflag & O_TRUNC) && fd->writing)
+ yaffs_resize_file(obj, 0);
+ } else {
+ yaffsfs_PutHandle(handle);
+ if (!errorReported)
+ yaffsfs_SetError(0); /* Problem */
handle = -1;
}
-
}
yaffsfs_Unlock();
@@ -484,32 +992,68 @@ int yaffs_open(const char *path, int oflag, int mode)
return handle;
}
-int yaffs_close(int fd)
+int yaffs_open(const YCHAR *path, int oflag, int mode)
{
- yaffsfs_Handle *h = NULL;
- int retVal = 0;
+ return yaffs_open_sharing(path, oflag, mode,
+ YAFFS_SHARE_READ | YAFFS_SHARE_WRITE);
+}
+
+int yaffs_Dofsync(int handle, int datasync)
+{
+ int retVal = -1;
+ struct yaffs_obj *obj;
yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
+ obj = yaffsfs_HandleToObject(handle);
- if(h && h->inUse)
- {
- // clean up
- yaffs_FlushFile(h->obj,1);
- h->obj->inUse--;
- if(h->obj->inUse <= 0 && h->obj->unlinked)
- {
- yaffs_DeleteFile(h->obj);
- }
- yaffsfs_PutHandle(fd);
+ if (!obj)
+ yaffsfs_SetError(-EBADF);
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else {
+ yaffs_flush_file(obj, 1, datasync);
retVal = 0;
}
- else
- {
- // bad handle
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+int yaffs_fsync(int handle)
+{
+ return yaffs_Dofsync(handle, 0);
+}
+
+int yaffs_flush(int handle)
+{
+ return yaffs_fsync(handle);
+}
+
+int yaffs_fdatasync(int handle)
+{
+ return yaffs_Dofsync(handle, 1);
+}
+
+int yaffs_close(int handle)
+{
+ struct yaffsfs_Handle *h = NULL;
+ struct yaffs_obj *obj = NULL;
+ int retVal = -1;
+
+ yaffsfs_Lock();
+
+ h = yaffsfs_HandleToPointer(handle);
+ obj = yaffsfs_HandleToObject(handle);
+
+ if (!h || !obj)
yaffsfs_SetError(-EBADF);
- retVal = -1;
+ else {
+ /* clean up */
+ yaffs_flush_file(obj, 1, 0);
+ yaffsfs_PutHandle(handle);
+ retVal = 0;
}
yaffsfs_Unlock();
@@ -517,378 +1061,774 @@ int yaffs_close(int fd)
return retVal;
}
-int yaffs_read(int fd, void *buf, unsigned int nbyte)
+int yaffsfs_do_read(int handle, void *vbuf, unsigned int nbyte,
+ int isPread, loff_t offset)
{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
- int pos = 0;
- int nRead = -1;
- int maxRead;
+ struct yaffsfs_FileDes *fd = NULL;
+ struct yaffs_obj *obj = NULL;
+ loff_t pos = 0;
+ loff_t startPos = 0;
+ loff_t endPos = 0;
+ int nRead = 0;
+ int nToRead = 0;
+ int totalRead = 0;
+ loff_t maxRead;
+ u8 *buf = (u8 *) vbuf;
+
+ if (!vbuf) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
+ fd = yaffsfs_HandleToFileDes(handle);
+ obj = yaffsfs_HandleToObject(handle);
- if(!h || !obj)
- {
- // bad handle
+ if (!fd || !obj) {
+ /* bad handle */
yaffsfs_SetError(-EBADF);
- }
- else if( h && obj)
- {
- pos= h->position;
- if(yaffs_GetObjectFileLength(obj) > pos)
- {
- maxRead = yaffs_GetObjectFileLength(obj) - pos;
- }
+ totalRead = -1;
+ } else if (!fd->reading) {
+ /* Not a reading handle */
+ yaffsfs_SetError(-EINVAL);
+ totalRead = -1;
+ } else if (nbyte > YAFFS_MAX_FILE_SIZE) {
+ yaffsfs_SetError(-EINVAL);
+ totalRead = -1;
+ } else {
+ if (isPread)
+ startPos = offset;
+ else
+ startPos = fd->position;
+
+ pos = startPos;
+
+ if (yaffs_get_obj_length(obj) > pos)
+ maxRead = yaffs_get_obj_length(obj) - pos;
else
- {
maxRead = 0;
- }
- if(nbyte > maxRead)
- {
+ if (nbyte > maxRead)
nbyte = maxRead;
+
+ yaffsfs_GetHandle(handle);
+
+ endPos = pos + nbyte;
+
+ if (pos < 0 || pos > YAFFS_MAX_FILE_SIZE ||
+ nbyte > YAFFS_MAX_FILE_SIZE ||
+ endPos < 0 || endPos > YAFFS_MAX_FILE_SIZE) {
+ totalRead = -1;
+ nbyte = 0;
}
+ while (nbyte > 0) {
+ nToRead = YAFFSFS_RW_SIZE -
+ (pos & (YAFFSFS_RW_SIZE - 1));
+ if (nToRead > nbyte)
+ nToRead = nbyte;
+
+ /* Tricky bit...
+ * Need to reverify object in case the device was
+ * unmounted in another thread.
+ */
+ obj = yaffsfs_HandleToObject(handle);
+ if (!obj)
+ nRead = 0;
+ else
+ nRead = yaffs_file_rd(obj, buf, pos, nToRead);
- if(nbyte > 0)
- {
- nRead = yaffs_ReadDataFromFile(obj,buf,pos,nbyte);
- if(nRead >= 0)
- {
- h->position = pos + nRead;
+ if (nRead > 0) {
+ totalRead += nRead;
+ pos += nRead;
+ buf += nRead;
}
+
+ if (nRead == nToRead)
+ nbyte -= nRead;
else
- {
- //todo error
+ nbyte = 0; /* no more to read */
+
+ if (nbyte > 0) {
+ yaffsfs_Unlock();
+ yaffsfs_Lock();
}
+
}
- else
- {
- nRead = 0;
+
+ yaffsfs_PutHandle(handle);
+
+ if (!isPread) {
+ if (totalRead >= 0)
+ fd->position = startPos + totalRead;
+ else
+ yaffsfs_SetError(-EINVAL);
}
}
yaffsfs_Unlock();
+ return (totalRead >= 0) ? totalRead : -1;
- return (nRead >= 0) ? nRead : -1;
+}
+int yaffs_read(int handle, void *buf, unsigned int nbyte)
+{
+ return yaffsfs_do_read(handle, buf, nbyte, 0, 0);
}
-int yaffs_write(int fd, const void *buf, unsigned int nbyte)
+int yaffs_pread(int handle, void *buf, unsigned int nbyte, loff_t offset)
{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
- int pos = 0;
- int nWritten = -1;
- int writeThrough = 0;
+ return yaffsfs_do_read(handle, buf, nbyte, 1, offset);
+}
+
+int yaffsfs_do_write(int handle, const void *vbuf, unsigned int nbyte,
+ int isPwrite, loff_t offset)
+{
+ struct yaffsfs_FileDes *fd = NULL;
+ struct yaffs_obj *obj = NULL;
+ loff_t pos = 0;
+ loff_t startPos = 0;
+ loff_t endPos;
+ int nWritten = 0;
+ int totalWritten = 0;
+ int write_trhrough = 0;
+ int nToWrite = 0;
+ const u8 *buf = (const u8 *)vbuf;
+
+ if (!vbuf) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
+ fd = yaffsfs_HandleToFileDes(handle);
+ obj = yaffsfs_HandleToObject(handle);
- if(!h || !obj)
- {
- // bad handle
+ if (!fd || !obj) {
+ /* bad handle */
yaffsfs_SetError(-EBADF);
- }
- else if( h && obj && h->readOnly)
- {
- // todo error
- }
- else if( h && obj)
- {
- if(h->append)
- {
- pos = yaffs_GetObjectFileLength(obj);
- }
+ totalWritten = -1;
+ } else if (!fd->writing) {
+ yaffsfs_SetError(-EINVAL);
+ totalWritten = -1;
+ } else if (obj->my_dev->read_only) {
+ yaffsfs_SetError(-EROFS);
+ totalWritten = -1;
+ } else {
+ if (fd->append)
+ startPos = yaffs_get_obj_length(obj);
+ else if (isPwrite)
+ startPos = offset;
else
- {
- pos = h->position;
- }
+ startPos = fd->position;
- nWritten = yaffs_WriteDataToFile(obj,buf,pos,nbyte,writeThrough);
+ yaffsfs_GetHandle(handle);
+ pos = startPos;
+ endPos = pos + nbyte;
- if(nWritten >= 0)
- {
- h->position = pos + nWritten;
+ if (pos < 0 || pos > YAFFS_MAX_FILE_SIZE ||
+ nbyte > YAFFS_MAX_FILE_SIZE ||
+ endPos < 0 || endPos > YAFFS_MAX_FILE_SIZE) {
+ totalWritten = -1;
+ nbyte = 0;
}
- else
- {
- //todo error
+
+ while (nbyte > 0) {
+
+ nToWrite = YAFFSFS_RW_SIZE -
+ (pos & (YAFFSFS_RW_SIZE - 1));
+ if (nToWrite > nbyte)
+ nToWrite = nbyte;
+
+ /* Tricky bit...
+ * Need to reverify object in case the device was
+ * remounted or unmounted in another thread.
+ */
+ obj = yaffsfs_HandleToObject(handle);
+ if (!obj || obj->my_dev->read_only)
+ nWritten = 0;
+ else
+ nWritten =
+ yaffs_wr_file(obj, buf, pos, nToWrite,
+ write_trhrough);
+ if (nWritten > 0) {
+ totalWritten += nWritten;
+ pos += nWritten;
+ buf += nWritten;
+ }
+
+ if (nWritten == nToWrite)
+ nbyte -= nToWrite;
+ else
+ nbyte = 0;
+
+ if (nWritten < 1 && totalWritten < 1) {
+ yaffsfs_SetError(-ENOSPC);
+ totalWritten = -1;
+ }
+
+ if (nbyte > 0) {
+ yaffsfs_Unlock();
+ yaffsfs_Lock();
+ }
}
+ yaffsfs_PutHandle(handle);
+
+ if (!isPwrite) {
+ if (totalWritten > 0)
+ fd->position = startPos + totalWritten;
+ else
+ yaffsfs_SetError(-EINVAL);
+ }
}
yaffsfs_Unlock();
+ return (totalWritten >= 0) ? totalWritten : -1;
+}
+
+int yaffs_write(int fd, const void *buf, unsigned int nbyte)
+{
+ return yaffsfs_do_write(fd, buf, nbyte, 0, 0);
+}
+
+int yaffs_pwrite(int fd, const void *buf, unsigned int nbyte, loff_t offset)
+{
+ return yaffsfs_do_write(fd, buf, nbyte, 1, offset);
+}
+
+int yaffs_truncate(const YCHAR *path, loff_t new_size)
+{
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int result = YAFFS_FAIL;
+ int notDir = 0;
+ int loop = 0;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
- return (nWritten >= 0) ? nWritten : -1;
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
+ yaffsfs_SetError(-ENOENT);
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else if (obj->variant_type != YAFFS_OBJECT_TYPE_FILE)
+ yaffsfs_SetError(-EISDIR);
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else if (new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
+ yaffsfs_SetError(-EINVAL);
+ else
+ result = yaffs_resize_file(obj, new_size);
+
+ yaffsfs_Unlock();
+
+ return (result) ? 0 : -1;
}
-int yaffs_truncate(int fd, off_t newSize)
+int yaffs_ftruncate(int handle, loff_t new_size)
{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
+ struct yaffsfs_FileDes *fd = NULL;
+ struct yaffs_obj *obj = NULL;
int result = 0;
yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
+ fd = yaffsfs_HandleToFileDes(handle);
+ obj = yaffsfs_HandleToObject(handle);
- if(!h || !obj)
- {
- // bad handle
+ if (!fd || !obj)
+ /* bad handle */
yaffsfs_SetError(-EBADF);
- }
+ else if (!fd->writing)
+ yaffsfs_SetError(-EINVAL);
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else if (new_size < 0 || new_size > YAFFS_MAX_FILE_SIZE)
+ yaffsfs_SetError(-EINVAL);
else
- {
- // resize the file
- result = yaffs_ResizeFile(obj,newSize);
- }
+ /* resize the file */
+ result = yaffs_resize_file(obj, new_size);
yaffsfs_Unlock();
-
return (result) ? 0 : -1;
}
-off_t yaffs_lseek(int fd, off_t offset, int whence)
+loff_t yaffs_lseek(int handle, loff_t offset, int whence)
{
- yaffsfs_Handle *h = NULL;
- yaffs_Object *obj = NULL;
- int pos = -1;
- int fSize = -1;
+ struct yaffsfs_FileDes *fd = NULL;
+ struct yaffs_obj *obj = NULL;
+ loff_t pos = -1;
+ loff_t fSize = -1;
yaffsfs_Lock();
- h = yaffsfs_GetHandlePointer(fd);
- obj = yaffsfs_GetHandleObject(fd);
+ fd = yaffsfs_HandleToFileDes(handle);
+ obj = yaffsfs_HandleToObject(handle);
- if(!h || !obj)
- {
- // bad handle
+ if (!fd || !obj)
yaffsfs_SetError(-EBADF);
- }
- else if(whence == SEEK_SET)
- {
- if(offset >= 0)
- {
- pos = offset;
- }
- }
- else if(whence == SEEK_CUR)
- {
- if( (h->position + offset) >= 0)
- {
- pos = (h->position + offset);
- }
- }
- else if(whence == SEEK_END)
- {
- fSize = yaffs_GetObjectFileLength(obj);
- if(fSize >= 0 && (fSize + offset) >= 0)
- {
- pos = fSize + offset;
+ else if (offset > YAFFS_MAX_FILE_SIZE)
+ yaffsfs_SetError(-EINVAL);
+ else {
+ if (whence == SEEK_SET) {
+ if (offset >= 0)
+ pos = offset;
+ } else if (whence == SEEK_CUR) {
+ if ((fd->position + offset) >= 0)
+ pos = (fd->position + offset);
+ } else if (whence == SEEK_END) {
+ fSize = yaffs_get_obj_length(obj);
+ if (fSize >= 0 && (fSize + offset) >= 0)
+ pos = fSize + offset;
}
- }
- if(pos >= 0)
- {
- h->position = pos;
- }
- else
- {
- // todo error
+ if (pos >= 0 && pos <= YAFFS_MAX_FILE_SIZE)
+ fd->position = pos;
+ else {
+ yaffsfs_SetError(-EINVAL);
+ pos = -1;
+ }
}
-
yaffsfs_Unlock();
return pos;
}
-
-int yaffsfs_DoUnlink(const char *path,int isDirectory)
+int yaffsfs_DoUnlink(const YCHAR *path, int isDirectory)
{
- yaffs_Object *dir = NULL;
- yaffs_Object *obj = NULL;
- char *name;
+ struct yaffs_obj *dir = NULL;
+ struct yaffs_obj *obj = NULL;
+ YCHAR *name;
int result = YAFFS_FAIL;
+ int notDir = 0;
+ int loop = 0;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,path,0);
- dir = yaffsfs_FindDirectory(NULL,path,&name,0);
- if(!dir)
- {
+ obj = yaffsfs_FindObject(NULL, path, 0, 0, NULL, NULL, NULL);
+ dir = yaffsfs_FindDirectory(NULL, path, &name, 0, &notDir, &loop);
+
+ if (!dir && notDir)
yaffsfs_SetError(-ENOTDIR);
- }
- else if(!obj)
- {
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir)
yaffsfs_SetError(-ENOENT);
- }
- else if(!isDirectory && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
+ else if (yaffs_strncmp(name, _Y("."), 2) == 0)
+ yaffsfs_SetError(-EINVAL);
+ else if (!obj)
+ yaffsfs_SetError(-ENOENT);
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else if (!isDirectory &&
+ obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY)
yaffsfs_SetError(-EISDIR);
- }
- else if(isDirectory && obj->variantType != YAFFS_OBJECT_TYPE_DIRECTORY)
- {
+ else if (isDirectory &&
+ obj->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY)
yaffsfs_SetError(-ENOTDIR);
- }
- else
- {
- result = yaffs_Unlink(dir,name);
+ else if (isDirectory && obj == obj->my_dev->root_dir)
+ yaffsfs_SetError(-EBUSY); /* Can't rmdir a root */
+ else {
+ result = yaffs_unlinker(dir, name);
- if(result == YAFFS_FAIL && isDirectory)
- {
+ if (result == YAFFS_FAIL && isDirectory)
yaffsfs_SetError(-ENOTEMPTY);
- }
}
yaffsfs_Unlock();
- // todo error
-
return (result == YAFFS_FAIL) ? -1 : 0;
}
-int yaffs_rmdir(const char *path)
-{
- return yaffsfs_DoUnlink(path,1);
-}
-int yaffs_unlink(const char *path)
+int yaffs_unlink(const YCHAR *path)
{
- return yaffsfs_DoUnlink(path,0);
+ return yaffsfs_DoUnlink(path, 0);
}
-int yaffs_rename(const char *oldPath, const char *newPath)
+int yaffs_rename(const YCHAR *oldPath, const YCHAR *newPath)
{
- yaffs_Object *olddir = NULL;
- yaffs_Object *newdir = NULL;
- yaffs_Object *obj = NULL;
- char *oldname;
- char *newname;
- int result= YAFFS_FAIL;
- int renameAllowed = 1;
+ struct yaffs_obj *olddir = NULL;
+ struct yaffs_obj *newdir = NULL;
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *newobj = NULL;
+ YCHAR *oldname;
+ YCHAR *newname;
+ int result = YAFFS_FAIL;
+ int rename_allowed = 1;
+ int notOldDir = 0;
+ int notNewDir = 0;
+ int oldLoop = 0;
+ int newLoop = 0;
- yaffsfs_Lock();
+ YCHAR *alt_newpath = NULL;
- olddir = yaffsfs_FindDirectory(NULL,oldPath,&oldname,0);
- newdir = yaffsfs_FindDirectory(NULL,newPath,&newname,0);
- obj = yaffsfs_FindObject(NULL,oldPath,0);
+ if (!oldPath || !newPath) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
- if(!olddir || !newdir || !obj)
- {
- // bad file
- yaffsfs_SetError(-EBADF);
- renameAllowed = 0;
+ if (yaffsfs_CheckPath(oldPath) < 0 || yaffsfs_CheckPath(newPath) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
}
- else if(olddir->myDev != newdir->myDev)
- {
- // oops must be on same device
- // todo error
- yaffsfs_SetError(-EXDEV);
- renameAllowed = 0;
+
+ if (yaffsfs_alt_dir_path(newPath, &alt_newpath) < 0) {
+ yaffsfs_SetError(-ENOMEM);
+ return -1;
}
- else if(obj && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
- // It is a directory, check that it is not being renamed to
- // being its own decendent.
- // Do this by tracing from the new directory back to the root, checking for obj
+ if (alt_newpath)
+ newPath = alt_newpath;
- yaffs_Object *xx = newdir;
+ yaffsfs_Lock();
- while( renameAllowed && xx)
- {
- if(xx == obj)
- {
- renameAllowed = 0;
- }
+ olddir = yaffsfs_FindDirectory(NULL, oldPath, &oldname, 0,
+ &notOldDir, &oldLoop);
+ newdir = yaffsfs_FindDirectory(NULL, newPath, &newname, 0,
+ &notNewDir, &newLoop);
+ obj = yaffsfs_FindObject(NULL, oldPath, 0, 0, NULL, NULL, NULL);
+ newobj = yaffsfs_FindObject(NULL, newPath, 0, 0, NULL, NULL, NULL);
+
+ /* If the object being renamed is a directory and the
+ * path ended with a "/" then the olddir == obj.
+ * We pass through NULL for the old name to tell the lower layers
+ * to use olddir as the object.
+ */
+
+ if (olddir == obj)
+ oldname = NULL;
+
+ if ((!olddir && notOldDir) || (!newdir && notNewDir)) {
+ yaffsfs_SetError(-ENOTDIR);
+ rename_allowed = 0;
+ } else if (oldLoop || newLoop) {
+ yaffsfs_SetError(-ELOOP);
+ rename_allowed = 0;
+ } else if (olddir && oldname &&
+ yaffs_strncmp(oldname, _Y("."), 2) == 0) {
+ yaffsfs_SetError(-EINVAL);
+ rename_allowed = 0;
+ } else if (!olddir || !newdir || !obj) {
+ yaffsfs_SetError(-ENOENT);
+ rename_allowed = 0;
+ } else if (obj->my_dev->read_only) {
+ yaffsfs_SetError(-EROFS);
+ rename_allowed = 0;
+ } else if (yaffs_is_non_empty_dir(newobj)) {
+ yaffsfs_SetError(-ENOTEMPTY);
+ rename_allowed = 0;
+ } else if (olddir->my_dev != newdir->my_dev) {
+ /* Rename must be on same device */
+ yaffsfs_SetError(-EXDEV);
+ rename_allowed = 0;
+ } else if (obj && obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) {
+ /*
+ * It is a directory, check that it is not being renamed to
+ * being its own decendent.
+ * Do this by tracing from the new directory back to the root,
+ * checking for obj
+ */
+
+ struct yaffs_obj *xx = newdir;
+
+ while (rename_allowed && xx) {
+ if (xx == obj)
+ rename_allowed = 0;
xx = xx->parent;
}
- if(!renameAllowed) yaffsfs_SetError(-EACCESS);
+ if (!rename_allowed)
+ yaffsfs_SetError(-EINVAL);
}
- if(renameAllowed)
- {
- result = yaffs_RenameObject(olddir,oldname,newdir,newname);
- }
+ if (rename_allowed)
+ result = yaffs_rename_obj(olddir, oldname, newdir, newname);
yaffsfs_Unlock();
+ kfree(alt_newpath);
+
return (result == YAFFS_FAIL) ? -1 : 0;
}
-
-static int yaffsfs_DoStat(yaffs_Object *obj,struct yaffs_stat *buf)
+static int yaffsfs_DoStat(struct yaffs_obj *obj, struct yaffs_stat *buf)
{
int retVal = -1;
- if(obj)
- {
- obj = yaffs_GetEquivalentObject(obj);
- }
+ obj = yaffs_get_equivalent_obj(obj);
- if(obj && buf)
- {
- buf->st_dev = (int)obj->myDev->genericDevice;
- buf->st_ino = obj->objectId;
- buf->st_mode = obj->yst_mode & ~S_IFMT; // clear out file type bits
+ if (obj && buf) {
+ buf->st_dev = (int)obj->my_dev->os_context;
+ buf->st_ino = obj->obj_id;
+ buf->st_mode = obj->yst_mode & ~S_IFMT;
- if(obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
+ if (obj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY)
buf->st_mode |= S_IFDIR;
- }
- else if(obj->variantType == YAFFS_OBJECT_TYPE_SYMLINK)
- {
+ else if (obj->variant_type == YAFFS_OBJECT_TYPE_SYMLINK)
buf->st_mode |= S_IFLNK;
- }
- else if(obj->variantType == YAFFS_OBJECT_TYPE_FILE)
- {
+ else if (obj->variant_type == YAFFS_OBJECT_TYPE_FILE)
buf->st_mode |= S_IFREG;
- }
- buf->st_nlink = yaffs_GetObjectLinkCount(obj);
- buf->st_uid = 0;
- buf->st_gid = 0;;
- buf->st_rdev = obj->yst_rdev;
- buf->st_size = yaffs_GetObjectFileLength(obj);
- buf->st_blksize = obj->myDev->nDataBytesPerChunk;
- buf->st_blocks = (buf->st_size + buf->st_blksize -1)/buf->st_blksize;
- buf->yst_atime = obj->yst_atime;
- buf->yst_ctime = obj->yst_ctime;
- buf->yst_mtime = obj->yst_mtime;
+ buf->st_nlink = yaffs_get_obj_link_count(obj);
+ buf->st_uid = 0;
+ buf->st_gid = 0;
+ buf->st_rdev = obj->yst_rdev;
+ buf->st_size = yaffs_get_obj_length(obj);
+ buf->st_blksize = obj->my_dev->data_bytes_per_chunk;
+ buf->st_blocks = (buf->st_size + buf->st_blksize - 1) /
+ buf->st_blksize;
+#if CONFIG_YAFFS_WINCE
+ buf->yst_wince_atime[0] = obj->win_atime[0];
+ buf->yst_wince_atime[1] = obj->win_atime[1];
+ buf->yst_wince_ctime[0] = obj->win_ctime[0];
+ buf->yst_wince_ctime[1] = obj->win_ctime[1];
+ buf->yst_wince_mtime[0] = obj->win_mtime[0];
+ buf->yst_wince_mtime[1] = obj->win_mtime[1];
+#else
+ buf->yst_atime = obj->yst_atime;
+ buf->yst_ctime = obj->yst_ctime;
+ buf->yst_mtime = obj->yst_mtime;
+#endif
retVal = 0;
}
return retVal;
}
-static int yaffsfs_DoStatOrLStat(const char *path, struct yaffs_stat *buf,int doLStat)
+static int yaffsfs_DoStatOrLStat(const YCHAR *path,
+ struct yaffs_stat *buf, int doLStat)
{
- yaffs_Object *obj;
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int retVal = -1;
+ int notDir = 0;
+ int loop = 0;
+
+ if (!path || !buf) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+
+ if (!doLStat && obj)
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
+ yaffsfs_SetError(-ENOENT);
+ else
+ retVal = yaffsfs_DoStat(obj, buf);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+int yaffs_stat(const YCHAR *path, struct yaffs_stat *buf)
+{
+ return yaffsfs_DoStatOrLStat(path, buf, 0);
+}
+
+int yaffs_lstat(const YCHAR *path, struct yaffs_stat *buf)
+{
+ return yaffsfs_DoStatOrLStat(path, buf, 1);
+}
+
+int yaffs_fstat(int fd, struct yaffs_stat *buf)
+{
+ struct yaffs_obj *obj;
int retVal = -1;
+ if (!buf) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,path,0);
+ obj = yaffsfs_HandleToObject(fd);
+
+ if (obj)
+ retVal = yaffsfs_DoStat(obj, buf);
+ else
+ /* bad handle */
+ yaffsfs_SetError(-EBADF);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+static int yaffsfs_DoUtime(struct yaffs_obj *obj,
+ const struct yaffs_utimbuf *buf)
+{
+ int retVal = -1;
+ int result;
+
+ struct yaffs_utimbuf local;
+
+ obj = yaffs_get_equivalent_obj(obj);
+
+ if (obj && obj->my_dev->read_only) {
+ yaffsfs_SetError(-EROFS);
+ return -1;
+ }
+
+ if (!buf) {
+ local.actime = Y_CURRENT_TIME;
+ local.modtime = local.actime;
+ buf = &local;
+ }
- if(!doLStat && obj)
- {
- obj = yaffsfs_FollowLink(obj,0);
+ if (obj) {
+ obj->yst_atime = buf->actime;
+ obj->yst_mtime = buf->modtime;
+ obj->dirty = 1;
+ result = yaffs_flush_file(obj, 0, 0);
+ retVal = result == YAFFS_OK ? 0 : -1;
+ }
+
+ return retVal;
+}
+
+int yaffs_utime(const YCHAR *path, const struct yaffs_utimbuf *buf)
+{
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int retVal = -1;
+ int notDir = 0;
+ int loop = 0;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
}
- if(obj)
- {
- retVal = yaffsfs_DoStat(obj,buf);
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
}
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
+ yaffsfs_SetError(-ENOENT);
else
- {
- // todo error not found
+ retVal = yaffsfs_DoUtime(obj, buf);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+int yaffs_futime(int fd, const struct yaffs_utimbuf *buf)
+{
+ struct yaffs_obj *obj;
+
+ int retVal = -1;
+
+ yaffsfs_Lock();
+ obj = yaffsfs_HandleToObject(fd);
+
+ if (obj)
+ retVal = yaffsfs_DoUtime(obj, buf);
+ else
+ /* bad handle */
+ yaffsfs_SetError(-EBADF);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+#ifndef CONFIG_YAFFS_WINCE
+/* xattrib functions */
+
+static int yaffs_do_setxattr(const YCHAR *path, const char *name,
+ const void *data, int size, int flags, int follow)
+{
+ struct yaffs_obj *obj;
+ struct yaffs_obj *dir;
+ int notDir = 0;
+ int loop = 0;
+
+ int retVal = -1;
+
+ if (!path || !name || !data) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+
+ if (follow)
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
yaffsfs_SetError(-ENOENT);
+ else {
+ retVal = yaffs_set_xattrib(obj, name, data, size, flags);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
}
yaffsfs_Unlock();
@@ -897,33 +1837,41 @@ static int yaffsfs_DoStatOrLStat(const char *path, struct yaffs_stat *buf,int do
}
-int yaffs_stat(const char *path, struct yaffs_stat *buf)
+int yaffs_setxattr(const YCHAR *path, const char *name,
+ const void *data, int size, int flags)
{
- return yaffsfs_DoStatOrLStat(path,buf,0);
+ return yaffs_do_setxattr(path, name, data, size, flags, 1);
}
-int yaffs_lstat(const char *path, struct yaffs_stat *buf)
+int yaffs_lsetxattr(const YCHAR *path, const char *name,
+ const void *data, int size, int flags)
{
- return yaffsfs_DoStatOrLStat(path,buf,1);
+ return yaffs_do_setxattr(path, name, data, size, flags, 0);
}
-int yaffs_fstat(int fd, struct yaffs_stat *buf)
+int yaffs_fsetxattr(int fd, const char *name,
+ const void *data, int size, int flags)
{
- yaffs_Object *obj;
+ struct yaffs_obj *obj;
int retVal = -1;
+ if (!name || !data) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
yaffsfs_Lock();
- obj = yaffsfs_GetHandleObject(fd);
+ obj = yaffsfs_HandleToObject(fd);
- if(obj)
- {
- retVal = yaffsfs_DoStat(obj,buf);
- }
- else
- {
- // bad handle
+ if (!obj)
yaffsfs_SetError(-EBADF);
+ else {
+ retVal = yaffs_set_xattrib(obj, name, data, size, flags);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
}
yaffsfs_Unlock();
@@ -931,43 +1879,128 @@ int yaffs_fstat(int fd, struct yaffs_stat *buf)
return retVal;
}
-static int yaffsfs_DoChMod(yaffs_Object *obj,mode_t mode)
+static int yaffs_do_getxattr(const YCHAR *path, const char *name,
+ void *data, int size, int follow)
{
- int result = YAFFS_FAIL;
+ struct yaffs_obj *obj;
+ struct yaffs_obj *dir;
+ int retVal = -1;
+ int notDir = 0;
+ int loop = 0;
- if(obj)
- {
- obj = yaffs_GetEquivalentObject(obj);
+ if (!path || !name || !data) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
}
- if(obj)
- {
- obj->yst_mode = mode;
- obj->dirty = 1;
- result = yaffs_FlushFile(obj,0);
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
}
- return result == YAFFS_OK ? 0 : -1;
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+
+ if (follow)
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
+ yaffsfs_SetError(-ENOENT);
+ else {
+ retVal = yaffs_get_xattrib(obj, name, data, size);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
+ }
+ yaffsfs_Unlock();
+
+ return retVal;
+
}
+int yaffs_getxattr(const YCHAR *path, const char *name, void *data, int size)
+{
+ return yaffs_do_getxattr(path, name, data, size, 1);
+}
-int yaffs_chmod(const char *path, mode_t mode)
+int yaffs_lgetxattr(const YCHAR *path, const char *name, void *data, int size)
{
- yaffs_Object *obj;
+ return yaffs_do_getxattr(path, name, data, size, 0);
+}
+
+int yaffs_fgetxattr(int fd, const char *name, void *data, int size)
+{
+ struct yaffs_obj *obj;
int retVal = -1;
+ if (!name || !data) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,path,0);
+ obj = yaffsfs_HandleToObject(fd);
- if(obj)
- {
- retVal = yaffsfs_DoChMod(obj,mode);
+ if (obj) {
+ retVal = yaffs_get_xattrib(obj, name, data, size);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
+ } else
+ /* bad handle */
+ yaffsfs_SetError(-EBADF);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+static int yaffs_do_listxattr(const YCHAR *path, char *data,
+ int size, int follow)
+{
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int retVal = -1;
+ int notDir = 0;
+ int loop = 0;
+
+ if (!path || !data) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
}
- else
- {
- // todo error not found
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+
+ if (follow)
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
yaffsfs_SetError(-ENOENT);
+ else {
+ retVal = yaffs_list_xattrib(obj, data, size);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
}
yaffsfs_Unlock();
@@ -976,317 +2009,906 @@ int yaffs_chmod(const char *path, mode_t mode)
}
+int yaffs_listxattr(const YCHAR *path, char *data, int size)
+{
+ return yaffs_do_listxattr(path, data, size, 1);
+}
-int yaffs_fchmod(int fd, mode_t mode)
+int yaffs_llistxattr(const YCHAR *path, char *data, int size)
{
- yaffs_Object *obj;
+ return yaffs_do_listxattr(path, data, size, 0);
+}
+
+int yaffs_flistxattr(int fd, char *data, int size)
+{
+ struct yaffs_obj *obj;
int retVal = -1;
+ if (!data) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
yaffsfs_Lock();
- obj = yaffsfs_GetHandleObject(fd);
+ obj = yaffsfs_HandleToObject(fd);
- if(obj)
- {
- retVal = yaffsfs_DoChMod(obj,mode);
- }
- else
- {
- // bad handle
+ if (obj) {
+ retVal = yaffs_list_xattrib(obj, data, size);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
+ } else
+ /* bad handle */
yaffsfs_SetError(-EBADF);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+static int yaffs_do_removexattr(const YCHAR *path, const char *name,
+ int follow)
+{
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int notDir = 0;
+ int loop = 0;
+ int retVal = -1;
+
+ if (!path || !name) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+
+ if (follow)
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
+ yaffsfs_SetError(-ENOENT);
+ else {
+ retVal = yaffs_remove_xattrib(obj, name);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
+ }
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+int yaffs_removexattr(const YCHAR *path, const char *name)
+{
+ return yaffs_do_removexattr(path, name, 1);
+}
+
+int yaffs_lremovexattr(const YCHAR *path, const char *name)
+{
+ return yaffs_do_removexattr(path, name, 0);
+}
+
+int yaffs_fremovexattr(int fd, const char *name)
+{
+ struct yaffs_obj *obj;
+
+ int retVal = -1;
+
+ if (!name) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
}
+ yaffsfs_Lock();
+ obj = yaffsfs_HandleToObject(fd);
+
+ if (obj) {
+ retVal = yaffs_remove_xattrib(obj, name);
+ if (retVal < 0) {
+ yaffsfs_SetError(retVal);
+ retVal = -1;
+ }
+ } else
+ /* bad handle */
+ yaffsfs_SetError(-EBADF);
+
yaffsfs_Unlock();
return retVal;
}
+#endif
+
+#ifdef CONFIG_YAFFS_WINCE
+int yaffs_get_wince_times(int fd, unsigned *wctime,
+ unsigned *watime, unsigned *wmtime)
+{
+ struct yaffs_obj *obj;
+
+ int retVal = -1;
+
+ yaffsfs_Lock();
+ obj = yaffsfs_HandleToObject(fd);
+
+ if (obj) {
+ if (wctime) {
+ wctime[0] = obj->win_ctime[0];
+ wctime[1] = obj->win_ctime[1];
+ }
+ if (watime) {
+ watime[0] = obj->win_atime[0];
+ watime[1] = obj->win_atime[1];
+ }
+ if (wmtime) {
+ wmtime[0] = obj->win_mtime[0];
+ wmtime[1] = obj->win_mtime[1];
+ }
+
+ retVal = 0;
+ } else
+ /* bad handle */
+ yaffsfs_SetError(-EBADF);
+
+ yaffsfs_Unlock();
-int yaffs_mkdir(const char *path, mode_t mode)
+ return retVal;
+}
+
+int yaffs_set_wince_times(int fd,
+ const unsigned *wctime,
+ const unsigned *watime, const unsigned *wmtime)
{
- yaffs_Object *parent = NULL;
- yaffs_Object *dir = NULL;
- char *name;
- int retVal= -1;
+ struct yaffs_obj *obj;
+ int result;
+ int retVal = -1;
yaffsfs_Lock();
- parent = yaffsfs_FindDirectory(NULL,path,&name,0);
- if(parent)
- dir = yaffs_MknodDirectory(parent,name,mode,0,0);
- if(dir)
- {
+ obj = yaffsfs_HandleToObject(fd);
+
+ if (obj) {
+
+ if (wctime) {
+ obj->win_ctime[0] = wctime[0];
+ obj->win_ctime[1] = wctime[1];
+ }
+ if (watime) {
+ obj->win_atime[0] = watime[0];
+ obj->win_atime[1] = watime[1];
+ }
+ if (wmtime) {
+ obj->win_mtime[0] = wmtime[0];
+ obj->win_mtime[1] = wmtime[1];
+ }
+
+ obj->dirty = 1;
+ result = yaffs_flush_file(obj, 0, 0);
retVal = 0;
+ } else
+ /* bad handle */
+ yaffsfs_SetError(-EBADF);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+}
+
+#endif
+
+static int yaffsfs_DoChMod(struct yaffs_obj *obj, mode_t mode)
+{
+ int result = -1;
+
+ if (obj)
+ obj = yaffs_get_equivalent_obj(obj);
+
+ if (obj) {
+ obj->yst_mode = mode;
+ obj->dirty = 1;
+ result = yaffs_flush_file(obj, 0, 0);
+ }
+
+ return result == YAFFS_OK ? 0 : -1;
+}
+
+int yaffs_access(const YCHAR *path, int amode)
+{
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int notDir = 0;
+ int loop = 0;
+ int retval = -1;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
}
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ if (amode & ~(R_OK | W_OK | X_OK)) {
+ yaffsfs_SetError(-EINVAL);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
+ yaffsfs_SetError(-ENOENT);
+ else if ((amode & W_OK) && obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else {
+ int access_ok = 1;
+
+ if ((amode & R_OK) && !(obj->yst_mode & S_IREAD))
+ access_ok = 0;
+ if ((amode & W_OK) && !(obj->yst_mode & S_IWRITE))
+ access_ok = 0;
+ if ((amode & X_OK) && !(obj->yst_mode & S_IEXEC))
+ access_ok = 0;
+
+ if (!access_ok)
+ yaffsfs_SetError(-EACCES);
+ else
+ retval = 0;
+ }
+
+ yaffsfs_Unlock();
+
+ return retval;
+
+}
+
+int yaffs_chmod(const YCHAR *path, mode_t mode)
+{
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int retVal = -1;
+ int notDir = 0;
+ int loop = 0;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ if (mode & ~(0777)) {
+ yaffsfs_SetError(-EINVAL);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
+ obj = yaffsfs_FollowLink(obj, 0, &loop);
+
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
+ yaffsfs_SetError(-ENOENT);
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
else
- {
- yaffsfs_SetError(-ENOSPC); // just assume no space for now
- retVal = -1;
+ retVal = yaffsfs_DoChMod(obj, mode);
+
+ yaffsfs_Unlock();
+
+ return retVal;
+
+}
+
+int yaffs_fchmod(int fd, mode_t mode)
+{
+ struct yaffs_obj *obj;
+ int retVal = -1;
+
+ if (mode & ~(0777)) {
+ yaffsfs_SetError(-EINVAL);
+ return -1;
}
+ yaffsfs_Lock();
+ obj = yaffsfs_HandleToObject(fd);
+
+ if (!obj)
+ yaffsfs_SetError(-EBADF);
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else
+ retVal = yaffsfs_DoChMod(obj, mode);
+
yaffsfs_Unlock();
return retVal;
}
-int yaffs_mount(const char *path)
+int yaffs_mkdir(const YCHAR *path, mode_t mode)
{
- int retVal=-1;
- int result=YAFFS_FAIL;
- yaffs_Device *dev=NULL;
- char *dummy;
+ struct yaffs_obj *parent = NULL;
+ struct yaffs_obj *dir = NULL;
+ YCHAR *name;
+ YCHAR *alt_path = NULL;
+ int retVal = -1;
+ int notDir = 0;
+ int loop = 0;
- T(YAFFS_TRACE_ALWAYS,("yaffs: Mounting %s\n",path));
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ if (yaffsfs_alt_dir_path(path, &alt_path) < 0) {
+ yaffsfs_SetError(-ENOMEM);
+ return -1;
+ }
+ if (alt_path)
+ path = alt_path;
yaffsfs_Lock();
- dev = yaffsfs_FindDevice(path,&dummy);
- if(dev)
- {
- if(!dev->isMounted)
- {
- result = yaffs_GutsInitialise(dev);
- if(result == YAFFS_FAIL)
- {
- // todo error - mount failed
- yaffsfs_SetError(-ENOMEM);
+ parent = yaffsfs_FindDirectory(NULL, path, &name, 0, &notDir, &loop);
+ if (!parent && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!parent)
+ yaffsfs_SetError(-ENOENT);
+ else if (yaffsfs_TooManyObjects(parent->my_dev))
+ yaffsfs_SetError(-ENFILE);
+ else if (yaffs_strnlen(name, 5) == 0) {
+ /* Trying to make the root itself */
+ yaffsfs_SetError(-EEXIST);
+ } else if (parent->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else {
+ dir = yaffs_create_dir(parent, name, mode, 0, 0);
+ if (dir)
+ retVal = 0;
+ else if (yaffs_find_by_name(parent, name))
+ yaffsfs_SetError(-EEXIST); /* name exists */
+ else
+ yaffsfs_SetError(-ENOSPC); /* assume no space */
+ }
+
+ yaffsfs_Unlock();
+
+ kfree(alt_path);
+
+ return retVal;
+}
+
+int yaffs_rmdir(const YCHAR *path)
+{
+ int result;
+ YCHAR *alt_path;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ if (yaffsfs_alt_dir_path(path, &alt_path) < 0) {
+ yaffsfs_SetError(-ENOMEM);
+ return -1;
+ }
+ if (alt_path)
+ path = alt_path;
+ result = yaffsfs_DoUnlink(path, 1);
+
+ kfree(alt_path);
+
+ return result;
+}
+
+void *yaffs_getdev(const YCHAR *path)
+{
+ struct yaffs_dev *dev = NULL;
+ YCHAR *dummy;
+ dev = yaffsfs_FindDevice(path, &dummy);
+ return (void *)dev;
+}
+
+int yaffs_mount_common(const YCHAR *path, int read_only, int skip_checkpt)
+{
+ int retVal = -1;
+ int result = YAFFS_FAIL;
+ struct yaffs_dev *dev = NULL;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ yaffs_trace(YAFFS_TRACE_MOUNT, "yaffs: Mounting %s", path);
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+
+ yaffsfs_InitHandles();
+
+ dev = yaffsfs_FindMountPoint(path);
+ if (dev) {
+ if (!dev->is_mounted) {
+ dev->read_only = read_only ? 1 : 0;
+ if (skip_checkpt) {
+ u8 skip = dev->param.skip_checkpt_rd;
+ dev->param.skip_checkpt_rd = 1;
+ result = yaffs_guts_initialise(dev);
+ dev->param.skip_checkpt_rd = skip;
+ } else {
+ result = yaffs_guts_initialise(dev);
}
+
+ if (result == YAFFS_FAIL)
+ yaffsfs_SetError(-ENOMEM);
retVal = result ? 0 : -1;
- }
- else
- {
- //todo error - already mounted.
+ } else
yaffsfs_SetError(-EBUSY);
- }
- }
- else
- {
- // todo error - no device
+ } else
yaffsfs_SetError(-ENODEV);
- }
+
yaffsfs_Unlock();
return retVal;
}
-int yaffs_unmount(const char *path)
+int yaffs_mount2(const YCHAR *path, int readonly)
{
- int retVal=-1;
- yaffs_Device *dev=NULL;
- char *dummy;
+ return yaffs_mount_common(path, readonly, 0);
+}
+
+int yaffs_mount(const YCHAR *path)
+{
+ return yaffs_mount_common(path, 0, 0);
+}
+
+int yaffs_sync(const YCHAR *path)
+{
+ int retVal = -1;
+ struct yaffs_dev *dev = NULL;
+ YCHAR *dummy;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
yaffsfs_Lock();
- dev = yaffsfs_FindDevice(path,&dummy);
- if(dev)
- {
- if(dev->isMounted)
- {
- int i;
- int inUse;
+ dev = yaffsfs_FindDevice(path, &dummy);
+ if (dev) {
+ if (!dev->is_mounted)
+ yaffsfs_SetError(-EINVAL);
+ else if (dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else {
- yaffs_FlushEntireDeviceCache(dev);
- yaffs_CheckpointSave(dev);
+ yaffs_flush_whole_cache(dev);
+ yaffs_checkpoint_save(dev);
+ retVal = 0;
- for(i = inUse = 0; i < YAFFSFS_N_HANDLES && !inUse; i++)
- {
- if(yaffsfs_handle[i].inUse && yaffsfs_handle[i].obj->myDev == dev)
- {
- inUse = 1; // the device is in use, can't unmount
- }
- }
+ }
+ } else
+ yaffsfs_SetError(-ENODEV);
- if(!inUse)
- {
- yaffs_Deinitialise(dev);
+ yaffsfs_Unlock();
+ return retVal;
+}
+
+static int yaffsfs_IsDevBusy(struct yaffs_dev *dev)
+{
+ int i;
+ struct yaffs_obj *obj;
+ for (i = 0; i < YAFFSFS_N_HANDLES; i++) {
+ obj = yaffsfs_HandleToObject(i);
+ if (obj && obj->my_dev == dev)
+ return 1;
+ }
+ return 0;
+}
+
+int yaffs_remount(const YCHAR *path, int force, int read_only)
+{
+ int retVal = -1;
+ struct yaffs_dev *dev = NULL;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+ dev = yaffsfs_FindMountPoint(path);
+ if (dev) {
+ if (dev->is_mounted) {
+ yaffs_flush_whole_cache(dev);
+
+ if (force || !yaffsfs_IsDevBusy(dev)) {
+ if (read_only)
+ yaffs_checkpoint_save(dev);
+ dev->read_only = read_only ? 1 : 0;
retVal = 0;
- }
- else
- {
- // todo error can't unmount as files are open
+ } else
yaffsfs_SetError(-EBUSY);
- }
- }
- else
- {
- //todo error - not mounted.
+ } else
yaffsfs_SetError(-EINVAL);
- }
- }
- else
- {
- // todo error - no device
+ } else
yaffsfs_SetError(-ENODEV);
- }
+
yaffsfs_Unlock();
return retVal;
}
-loff_t yaffs_freespace(const char *path)
+int yaffs_unmount2(const YCHAR *path, int force)
{
- loff_t retVal=-1;
- yaffs_Device *dev=NULL;
- char *dummy;
+ int retVal = -1;
+ struct yaffs_dev *dev = NULL;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
yaffsfs_Lock();
- dev = yaffsfs_FindDevice(path,&dummy);
- if(dev && dev->isMounted)
- {
- retVal = yaffs_GetNumberOfFreeChunks(dev);
- retVal *= dev->nDataBytesPerChunk;
+ dev = yaffsfs_FindMountPoint(path);
+ if (dev) {
+ if (dev->is_mounted) {
+ int inUse;
+ yaffs_flush_whole_cache(dev);
+ yaffs_checkpoint_save(dev);
+ inUse = yaffsfs_IsDevBusy(dev);
+ if (!inUse || force) {
+ if (inUse)
+ yaffsfs_BreakDeviceHandles(dev);
+ yaffs_deinitialise(dev);
+
+ retVal = 0;
+ } else
+ yaffsfs_SetError(-EBUSY);
+
+ } else
+ yaffsfs_SetError(-EINVAL);
+
+ } else
+ yaffsfs_SetError(-ENODEV);
+
+ yaffsfs_Unlock();
+ return retVal;
+
+}
+
+int yaffs_unmount(const YCHAR *path)
+{
+ return yaffs_unmount2(path, 0);
+}
+
+loff_t yaffs_freespace(const YCHAR *path)
+{
+ loff_t retVal = -1;
+ struct yaffs_dev *dev = NULL;
+ YCHAR *dummy;
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
}
- else
- {
- yaffsfs_SetError(-EINVAL);
+
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
}
+ yaffsfs_Lock();
+ dev = yaffsfs_FindDevice(path, &dummy);
+ if (dev && dev->is_mounted) {
+ retVal = yaffs_get_n_free_chunks(dev);
+ retVal *= dev->data_bytes_per_chunk;
+
+ } else
+ yaffsfs_SetError(-EINVAL);
+
yaffsfs_Unlock();
return retVal;
}
+loff_t yaffs_totalspace(const YCHAR *path)
+{
+ loff_t retVal = -1;
+ struct yaffs_dev *dev = NULL;
+ YCHAR *dummy;
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
-void yaffs_initialise(yaffsfs_DeviceConfiguration *cfgList)
-{
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
- yaffsfs_DeviceConfiguration *cfg;
+ yaffsfs_Lock();
+ dev = yaffsfs_FindDevice(path, &dummy);
+ if (dev && dev->is_mounted) {
+ retVal = (dev->param.end_block - dev->param.start_block + 1) -
+ dev->param.n_reserved_blocks;
+ retVal *= dev->param.chunks_per_block;
+ retVal *= dev->data_bytes_per_chunk;
+
+ } else
+ yaffsfs_SetError(-EINVAL);
+
+ yaffsfs_Unlock();
+ return retVal;
+}
- yaffsfs_configurationList = cfgList;
+int yaffs_inodecount(const YCHAR *path)
+{
+ loff_t retVal = -1;
+ struct yaffs_dev *dev = NULL;
+ YCHAR *dummy;
- yaffsfs_InitHandles();
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
- cfg = yaffsfs_configurationList;
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
- while(cfg && cfg->prefix && cfg->dev)
- {
- cfg->dev->isMounted = 0;
- cfg->dev->removeObjectCallback = yaffsfs_RemoveObjectCallback;
- cfg++;
+ yaffsfs_Lock();
+ dev = yaffsfs_FindDevice(path, &dummy);
+ if (dev && dev->is_mounted) {
+ int n_obj = dev->n_obj;
+ if (n_obj > dev->n_hardlinks)
+ retVal = n_obj - dev->n_hardlinks;
}
+
+ if (retVal < 0)
+ yaffsfs_SetError(-EINVAL);
+
+ yaffsfs_Unlock();
+ return retVal;
}
+void yaffs_add_device(struct yaffs_dev *dev)
+{
+ struct list_head *cfg;
+ /* First check that the device is not in the list. */
+
+ list_for_each(cfg, &yaffsfs_deviceList) {
+ if (dev == list_entry(cfg, struct yaffs_dev, dev_list))
+ return;
+ }
+
+ dev->is_mounted = 0;
+ dev->param.remove_obj_fn = yaffsfs_RemoveObjectCallback;
-//
-// Directory search stuff.
+ if (!dev->dev_list.next)
+ INIT_LIST_HEAD(&dev->dev_list);
-//
-// Directory search context
-//
-// NB this is an opaque structure.
+ list_add(&dev->dev_list, &yaffsfs_deviceList);
+}
+
+void yaffs_remove_device(struct yaffs_dev *dev)
+{
+ list_del_init(&dev->dev_list);
+}
+/* Functions to iterate through devices. NB Use with extreme care! */
-typedef struct
+static struct list_head *dev_iterator;
+void yaffs_dev_rewind(void)
{
- __u32 magic;
- yaffs_dirent de; /* directory entry being used by this dsc */
- char name[NAME_MAX+1]; /* name of directory being searched */
- yaffs_Object *dirObj; /* ptr to directory being searched */
- yaffs_Object *nextReturn; /* obj to be returned by next readddir */
- int offset;
- struct list_head others;
-} yaffsfs_DirectorySearchContext;
+ dev_iterator = yaffsfs_deviceList.next;
+}
+
+struct yaffs_dev *yaffs_next_dev(void)
+{
+ struct yaffs_dev *retval;
+ if (!dev_iterator)
+ return NULL;
+ if (dev_iterator == &yaffsfs_deviceList)
+ return NULL;
+
+ retval = list_entry(dev_iterator, struct yaffs_dev, dev_list);
+ dev_iterator = dev_iterator->next;
+ return retval;
+}
+/* Directory search stuff. */
static struct list_head search_contexts;
-
-static void yaffsfs_SetDirRewound(yaffsfs_DirectorySearchContext *dsc)
+static void yaffsfs_SetDirRewound(struct yaffsfs_DirSearchContxt *dsc)
{
- if(dsc &&
- dsc->dirObj &&
- dsc->dirObj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY){
+ if (dsc &&
+ dsc->dirObj &&
+ dsc->dirObj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) {
- dsc->offset = 0;
+ dsc->offset = 0;
- if( list_empty(&dsc->dirObj->variant.directoryVariant.children)){
- dsc->nextReturn = NULL;
- } else {
- dsc->nextReturn = list_entry(dsc->dirObj->variant.directoryVariant.children.next,
- yaffs_Object,siblings);
- }
+ if (list_empty(&dsc->dirObj->variant.dir_variant.children))
+ dsc->nextReturn = NULL;
+ else
+ dsc->nextReturn =
+ list_entry(dsc->dirObj->variant.dir_variant.
+ children.next, struct yaffs_obj,
+ siblings);
} else {
/* Hey someone isn't playing nice! */
}
}
-static void yaffsfs_DirAdvance(yaffsfs_DirectorySearchContext *dsc)
+static void yaffsfs_DirAdvance(struct yaffsfs_DirSearchContxt *dsc)
{
- if(dsc &&
- dsc->dirObj &&
- dsc->dirObj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY){
-
- if( dsc->nextReturn == NULL ||
- list_empty(&dsc->dirObj->variant.directoryVariant.children)){
- dsc->nextReturn = NULL;
- } else {
- struct list_head *next = dsc->nextReturn->siblings.next;
-
- if( next == &dsc->dirObj->variant.directoryVariant.children)
- dsc->nextReturn = NULL; /* end of list */
- else
- dsc->nextReturn = list_entry(next,yaffs_Object,siblings);
- }
+ if (dsc &&
+ dsc->dirObj &&
+ dsc->dirObj->variant_type == YAFFS_OBJECT_TYPE_DIRECTORY) {
+
+ if (dsc->nextReturn == NULL ||
+ list_empty(&dsc->dirObj->variant.dir_variant.children))
+ dsc->nextReturn = NULL;
+ else {
+ struct list_head *next = dsc->nextReturn->siblings.next;
+
+ if (next == &dsc->dirObj->variant.dir_variant.children)
+ dsc->nextReturn = NULL; /* end of list */
+ else
+ dsc->nextReturn = list_entry(next,
+ struct yaffs_obj,
+ siblings);
+ }
} else {
/* Hey someone isn't playing nice! */
}
}
-static void yaffsfs_RemoveObjectCallback(yaffs_Object *obj)
+static void yaffsfs_RemoveObjectCallback(struct yaffs_obj *obj)
{
struct list_head *i;
- yaffsfs_DirectorySearchContext *dsc;
+ struct yaffsfs_DirSearchContxt *dsc;
/* if search contexts not initilised then skip */
- if(!search_contexts.next)
+ if (!search_contexts.next)
return;
- /* Iteratethrough the directory search contexts.
+ /* Iterate through the directory search contexts.
* If any are the one being removed, then advance the dsc to
* the next one to prevent a hanging ptr.
*/
- list_for_each(i, &search_contexts) {
+ list_for_each(i, &search_contexts) {
if (i) {
- dsc = list_entry(i, yaffsfs_DirectorySearchContext,others);
- if(dsc->nextReturn == obj)
+ dsc = list_entry(i, struct yaffsfs_DirSearchContxt,
+ others);
+ if (dsc->nextReturn == obj)
yaffsfs_DirAdvance(dsc);
}
}
}
-yaffs_DIR *yaffs_opendir(const char *dirname)
+yaffs_DIR *yaffs_opendir(const YCHAR *dirname)
{
yaffs_DIR *dir = NULL;
- yaffs_Object *obj = NULL;
- yaffsfs_DirectorySearchContext *dsc = NULL;
+ struct yaffs_obj *obj = NULL;
+ struct yaffsfs_DirSearchContxt *dsc = NULL;
+ int notDir = 0;
+ int loop = 0;
+
+ if (!dirname) {
+ yaffsfs_SetError(-EFAULT);
+ return NULL;
+ }
+
+ if (yaffsfs_CheckPath(dirname) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return NULL;
+ }
yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,dirname,0);
+ obj = yaffsfs_FindObject(NULL, dirname, 0, 1, NULL, &notDir, &loop);
+
+ if (!obj && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!obj)
+ yaffsfs_SetError(-ENOENT);
+ else if (obj->variant_type != YAFFS_OBJECT_TYPE_DIRECTORY)
+ yaffsfs_SetError(-ENOTDIR);
+ else {
+ int i;
+
+ for (i = 0, dsc = NULL; i < YAFFSFS_N_DSC && !dsc; i++) {
+ if (!yaffsfs_dsc[i].inUse)
+ dsc = &yaffsfs_dsc[i];
+ }
- if(obj && obj->variantType == YAFFS_OBJECT_TYPE_DIRECTORY)
- {
+ dir = (yaffs_DIR *) dsc;
- dsc = YMALLOC(sizeof(yaffsfs_DirectorySearchContext));
- dir = (yaffs_DIR *)dsc;
- if(dsc)
- {
- memset(dsc,0,sizeof(yaffsfs_DirectorySearchContext));
- dsc->magic = YAFFS_MAGIC;
+ if (dsc) {
+ memset(dsc, 0, sizeof(struct yaffsfs_DirSearchContxt));
+ dsc->inUse = 1;
dsc->dirObj = obj;
- strncpy(dsc->name,dirname,NAME_MAX);
+ yaffs_strncpy(dsc->name, dirname, NAME_MAX);
INIT_LIST_HEAD(&dsc->others);
- if(!search_contexts.next)
+ if (!search_contexts.next)
INIT_LIST_HEAD(&search_contexts);
- list_add(&dsc->others,&search_contexts);
- yaffsfs_SetDirRewound(dsc); }
+ list_add(&dsc->others, &search_contexts);
+ yaffsfs_SetDirRewound(dsc);
+ }
}
@@ -1295,35 +2917,34 @@ yaffs_DIR *yaffs_opendir(const char *dirname)
return dir;
}
-struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp)
+struct yaffs_dirent *yaffs_readdir(yaffs_DIR * dirp)
{
- yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
+ struct yaffsfs_DirSearchContxt *dsc;
struct yaffs_dirent *retVal = NULL;
+ dsc = (struct yaffsfs_DirSearchContxt *) dirp;
yaffsfs_Lock();
- if(dsc && dsc->magic == YAFFS_MAGIC){
+ if (dsc && dsc->inUse) {
yaffsfs_SetError(0);
- if(dsc->nextReturn){
- dsc->de.d_ino = yaffs_GetEquivalentObject(dsc->nextReturn)->objectId;
+ if (dsc->nextReturn) {
+ dsc->de.d_ino =
+ yaffs_get_equivalent_obj(dsc->nextReturn)->obj_id;
dsc->de.d_dont_use = (unsigned)dsc->nextReturn;
dsc->de.d_off = dsc->offset++;
- yaffs_GetObjectName(dsc->nextReturn,dsc->de.d_name,NAME_MAX);
- if(strlen(dsc->de.d_name) == 0)
- {
- // this should not happen!
- strcpy(dsc->de.d_name,"zz");
+ yaffs_get_obj_name(dsc->nextReturn,
+ dsc->de.d_name, NAME_MAX);
+ if (yaffs_strnlen(dsc->de.d_name, NAME_MAX + 1) == 0) {
+ /* this should not happen! */
+ yaffs_strcpy(dsc->de.d_name, _Y("zz"));
}
dsc->de.d_reclen = sizeof(struct yaffs_dirent);
retVal = &dsc->de;
yaffsfs_DirAdvance(dsc);
} else
retVal = NULL;
- }
- else
- {
+ } else
yaffsfs_SetError(-EBADF);
- }
yaffsfs_Unlock();
@@ -1331,10 +2952,11 @@ struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp)
}
-
void yaffs_rewinddir(yaffs_DIR *dirp)
{
- yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
+ struct yaffsfs_DirSearchContxt *dsc;
+
+ dsc = (struct yaffsfs_DirSearchContxt *) dirp;
yaffsfs_Lock();
@@ -1343,41 +2965,67 @@ void yaffs_rewinddir(yaffs_DIR *dirp)
yaffsfs_Unlock();
}
-
int yaffs_closedir(yaffs_DIR *dirp)
{
- yaffsfs_DirectorySearchContext *dsc = (yaffsfs_DirectorySearchContext *)dirp;
+ struct yaffsfs_DirSearchContxt *dsc;
+
+ dsc = (struct yaffsfs_DirSearchContxt *) dirp;
+
+ if (!dsc) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
yaffsfs_Lock();
- dsc->magic = 0;
- list_del(&dsc->others); /* unhook from list */
- YFREE(dsc);
+ dsc->inUse = 0;
+ list_del(&dsc->others); /* unhook from list */
yaffsfs_Unlock();
return 0;
}
-// end of directory stuff
-
+/* End of directory stuff */
-int yaffs_symlink(const char *oldpath, const char *newpath)
+int yaffs_symlink(const YCHAR *oldpath, const YCHAR *newpath)
{
- yaffs_Object *parent = NULL;
- yaffs_Object *obj;
- char *name;
- int retVal= -1;
- int mode = 0; // ignore for now
+ struct yaffs_obj *parent = NULL;
+ struct yaffs_obj *obj;
+ YCHAR *name;
+ int retVal = -1;
+ int mode = 0; /* ignore for now */
+ int notDir = 0;
+ int loop = 0;
- yaffsfs_Lock();
- parent = yaffsfs_FindDirectory(NULL,newpath,&name,0);
- obj = yaffs_MknodSymLink(parent,name,mode,0,0,oldpath);
- if(obj)
- {
- retVal = 0;
+ if (!oldpath || !newpath) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
}
- else
- {
- yaffsfs_SetError(-ENOSPC); // just assume no space for now
- retVal = -1;
+
+ if (yaffsfs_CheckPath(newpath) < 0 || yaffsfs_CheckPath(oldpath) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
+
+ yaffsfs_Lock();
+ parent = yaffsfs_FindDirectory(NULL, newpath, &name, 0, &notDir, &loop);
+ if (!parent && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!parent || yaffs_strnlen(name, 5) < 1)
+ yaffsfs_SetError(-ENOENT);
+ else if (yaffsfs_TooManyObjects(parent->my_dev))
+ yaffsfs_SetError(-ENFILE);
+ else if (parent->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else if (parent) {
+ obj = yaffs_create_symlink(parent, name, mode, 0, 0, oldpath);
+ if (obj)
+ retVal = 0;
+ else if (yaffsfs_FindObject
+ (NULL, newpath, 0, 0, NULL, NULL, NULL))
+ yaffsfs_SetError(-EEXIST);
+ else
+ yaffsfs_SetError(-ENOSPC);
}
yaffsfs_Unlock();
@@ -1386,90 +3034,98 @@ int yaffs_symlink(const char *oldpath, const char *newpath)
}
-int yaffs_readlink(const char *path, char *buf, int bufsiz)
+int yaffs_readlink(const YCHAR *path, YCHAR *buf, int bufsiz)
{
- yaffs_Object *obj = NULL;
- int retVal;
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *dir = NULL;
+ int retVal = -1;
+ int notDir = 0;
+ int loop = 0;
+ if (!path || !buf) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,path,0);
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, &dir, &notDir, &loop);
- if(!obj)
- {
+ if (!dir && notDir)
+ yaffsfs_SetError(-ENOTDIR);
+ else if (loop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!dir || !obj)
yaffsfs_SetError(-ENOENT);
- retVal = -1;
- }
- else if(obj->variantType != YAFFS_OBJECT_TYPE_SYMLINK)
- {
+ else if (obj->variant_type != YAFFS_OBJECT_TYPE_SYMLINK)
yaffsfs_SetError(-EINVAL);
- retVal = -1;
- }
- else
- {
- char *alias = obj->variant.symLinkVariant.alias;
- memset(buf,0,bufsiz);
- strncpy(buf,alias,bufsiz - 1);
+ else {
+ YCHAR *alias = obj->variant.symlink_variant.alias;
+ memset(buf, 0, bufsiz);
+ yaffs_strncpy(buf, alias, bufsiz - 1);
retVal = 0;
}
yaffsfs_Unlock();
return retVal;
}
-int yaffs_link(const char *oldpath, const char *newpath)
+int yaffs_link(const YCHAR *oldpath, const YCHAR *linkpath)
{
- // Creates a link called newpath to existing oldpath
- yaffs_Object *obj = NULL;
- yaffs_Object *target = NULL;
- int retVal = 0;
+ /* Creates a link called newpath to existing oldpath */
+ struct yaffs_obj *obj = NULL;
+ struct yaffs_obj *lnk = NULL;
+ struct yaffs_obj *obj_dir = NULL;
+ struct yaffs_obj *lnk_dir = NULL;
+ int retVal = -1;
+ int notDirObj = 0;
+ int notDirLnk = 0;
+ int objLoop = 0;
+ int lnkLoop = 0;
+ YCHAR *newname;
+
+ if (!oldpath || !linkpath) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
+ if (yaffsfs_CheckPath(linkpath) < 0 || yaffsfs_CheckPath(oldpath) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
yaffsfs_Lock();
- obj = yaffsfs_FindObject(NULL,oldpath,0);
- target = yaffsfs_FindObject(NULL,newpath,0);
+ obj = yaffsfs_FindObject(NULL, oldpath, 0, 1,
+ &obj_dir, &notDirObj, &objLoop);
+ lnk = yaffsfs_FindObject(NULL, linkpath, 0, 0, NULL, NULL, NULL);
+ lnk_dir = yaffsfs_FindDirectory(NULL, linkpath, &newname,
+ 0, &notDirLnk, &lnkLoop);
- if(!obj)
- {
+ if ((!obj_dir && notDirObj) || (!lnk_dir && notDirLnk))
+ yaffsfs_SetError(-ENOTDIR);
+ else if (objLoop || lnkLoop)
+ yaffsfs_SetError(-ELOOP);
+ else if (!obj_dir || !lnk_dir || !obj)
yaffsfs_SetError(-ENOENT);
- retVal = -1;
- }
- else if(target)
- {
+ else if (obj->my_dev->read_only)
+ yaffsfs_SetError(-EROFS);
+ else if (yaffsfs_TooManyObjects(obj->my_dev))
+ yaffsfs_SetError(-ENFILE);
+ else if (lnk)
yaffsfs_SetError(-EEXIST);
- retVal = -1;
- }
- else
- {
- yaffs_Object *newdir = NULL;
- yaffs_Object *link = NULL;
-
- char *newname;
-
- newdir = yaffsfs_FindDirectory(NULL,newpath,&newname,0);
+ else if (lnk_dir->my_dev != obj->my_dev)
+ yaffsfs_SetError(-EXDEV);
+ else {
+ retVal = yaffsfs_CheckNameLength(newname);
- if(!newdir)
- {
- yaffsfs_SetError(-ENOTDIR);
- retVal = -1;
- }
- else if(newdir->myDev != obj->myDev)
- {
- yaffsfs_SetError(-EXDEV);
- retVal = -1;
- }
- if(newdir && strlen(newname) > 0)
- {
- link = yaffs_Link(newdir,newname,obj);
- if(link)
+ if (retVal == 0) {
+ lnk = yaffs_link_obj(lnk_dir, newname, obj);
+ if (lnk)
retVal = 0;
- else
- {
+ else {
yaffsfs_SetError(-ENOSPC);
retVal = -1;
}
-
}
}
yaffsfs_Unlock();
@@ -1477,34 +3133,84 @@ int yaffs_link(const char *oldpath, const char *newpath)
return retVal;
}
-int yaffs_mknod(const char *pathname, mode_t mode, dev_t dev);
+int yaffs_mknod(const YCHAR *pathname, mode_t mode, dev_t dev)
+{
+ pathname = pathname;
+ mode = mode;
+ dev = dev;
+
+ yaffsfs_SetError(-EINVAL);
+ return -1;
+}
+
+/*
+ * D E B U G F U N C T I O N S
+ */
-int yaffs_DumpDevStruct(const char *path)
+/*
+ * yaffs_n_handles()
+ * Returns number of handles attached to the object
+ */
+int yaffs_n_handles(const YCHAR *path)
{
- char *rest;
+ struct yaffs_obj *obj;
+
+ if (!path) {
+ yaffsfs_SetError(-EFAULT);
+ return -1;
+ }
- yaffs_Object *obj = yaffsfs_FindRoot(path,&rest);
+ if (yaffsfs_CheckPath(path) < 0) {
+ yaffsfs_SetError(-ENAMETOOLONG);
+ return -1;
+ }
- if(obj)
- {
- yaffs_Device *dev = obj->myDev;
+ obj = yaffsfs_FindObject(NULL, path, 0, 1, NULL, NULL, NULL);
+
+ if (obj)
+ return yaffsfs_CountHandles(obj);
+ else
+ return -1;
+}
+
+int yaffs_get_error(void)
+{
+ return yaffsfs_GetLastError();
+}
+
+int yaffs_set_error(int error)
+{
+ yaffsfs_SetError(error);
+ return 0;
+}
+
+int yaffs_dump_dev(const YCHAR *path)
+{
+#if 1
+ path = path;
+#else
+ YCHAR *rest;
+
+ struct yaffs_obj *obj = yaffsfs_FindRoot(path, &rest);
+
+ if (obj) {
+ struct yaffs_dev *dev = obj->my_dev;
printf("\n"
- "nPageWrites.......... %d\n"
- "nPageReads........... %d\n"
- "nBlockErasures....... %d\n"
- "nGCCopies............ %d\n"
- "garbageCollections... %d\n"
- "passiveGarbageColl'ns %d\n"
- "\n",
- dev->nPageWrites,
- dev->nPageReads,
- dev->nBlockErasures,
- dev->nGCCopies,
- dev->garbageCollections,
- dev->passiveGarbageCollections
- );
+ "n_page_writes.......... %d\n"
+ "n_page_reads........... %d\n"
+ "n_erasures....... %d\n"
+ "n_gc_copies............ %d\n"
+ "garbageCollections... %d\n"
+ "passiveGarbageColl'ns %d\n"
+ "\n",
+ dev->n_page_writes,
+ dev->n_page_reads,
+ dev->n_erasures,
+ dev->n_gc_copies,
+ dev->garbageCollections, dev->passiveGarbageCollections);
}
+#endif
return 0;
}
diff --git a/fs/yaffs2/yaffsfs.h b/fs/yaffs2/yaffsfs.h
index 95e7a914b3..f2c7666625 100644
--- a/fs/yaffs2/yaffsfs.h
+++ b/fs/yaffs2/yaffsfs.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -26,206 +26,184 @@
#include "yportenv.h"
-//typedef long off_t;
-//typedef long dev_t;
-//typedef unsigned long mode_t;
-
-
#ifndef NAME_MAX
#define NAME_MAX 256
#endif
-#ifndef O_RDONLY
-#define O_RDONLY 00
-#endif
-
-#ifndef O_WRONLY
-#define O_WRONLY 01
-#endif
-
-#ifndef O_RDWR
-#define O_RDWR 02
-#endif
+#define YAFFS_MAX_FILE_SIZE (0x800000000LL - 1)
-#ifndef O_CREAT
-#define O_CREAT 0100
-#endif
-#ifndef O_EXCL
-#define O_EXCL 0200
-#endif
-
-#ifndef O_TRUNC
-#define O_TRUNC 01000
-#endif
+struct yaffs_dirent {
+ long d_ino; /* inode number */
+ off_t d_off; /* offset to this dirent */
+ unsigned short d_reclen; /* length of this dirent */
+ YUCHAR d_type; /* type of this record */
+ YCHAR d_name[NAME_MAX+1]; /* file name (null-terminated) */
+ unsigned d_dont_use; /* debug: not for public consumption */
+};
-#ifndef O_APPEND
-#define O_APPEND 02000
+typedef struct opaque_structure yaffs_DIR;
+
+
+
+struct yaffs_stat {
+ int st_dev; /* device */
+ int st_ino; /* inode */
+ unsigned st_mode; /* protection */
+ int st_nlink; /* number of hard links */
+ int st_uid; /* user ID of owner */
+ int st_gid; /* group ID of owner */
+ unsigned st_rdev; /* device type (if inode device) */
+ loff_t st_size; /* total size, in bytes */
+ unsigned long st_blksize; /* blocksize for filesystem I/O */
+ unsigned long st_blocks; /* number of blocks allocated */
+#ifdef CONFIG_YAFFS_WINCE
+ /* Special 64-bit times for WinCE */
+ unsigned long yst_wince_atime[2];
+ unsigned long yst_wince_mtime[2];
+ unsigned long yst_wince_ctime[2];
+#else
+ unsigned long yst_atime; /* time of last access */
+ unsigned long yst_mtime; /* time of last modification */
+ unsigned long yst_ctime; /* time of last change */
#endif
+};
-#ifndef SEEK_SET
-#define SEEK_SET 0
-#endif
-#ifndef SEEK_CUR
-#define SEEK_CUR 1
-#endif
+struct yaffs_utimbuf {
+ unsigned long actime;
+ unsigned long modtime;
+};
-#ifndef SEEK_END
-#define SEEK_END 2
-#endif
-#ifndef EBUSY
-#define EBUSY 16
-#endif
+int yaffs_open(const YCHAR *path, int oflag, int mode) ;
-#ifndef ENODEV
-#define ENODEV 19
-#endif
-
-#ifndef EINVAL
-#define EINVAL 22
-#endif
+int yaffs_close(int fd) ;
+int yaffs_fsync(int fd) ;
+int yaffs_fdatasync(int fd) ;
+int yaffs_flush(int fd) ; /* same as yaffs_fsync() */
-#ifndef EBADF
-#define EBADF 9
-#endif
+int yaffs_access(const YCHAR *path, int amode);
-#ifndef EACCESS
-#define EACCESS 13
-#endif
+int yaffs_dup(int fd);
-#ifndef EXDEV
-#define EXDEV 18
-#endif
+int yaffs_read(int fd, void *buf, unsigned int nbyte) ;
+int yaffs_write(int fd, const void *buf, unsigned int nbyte) ;
-#ifndef ENOENT
-#define ENOENT 2
-#endif
+int yaffs_pread(int fd, void *buf, unsigned int nbyte, loff_t offset);
+int yaffs_pwrite(int fd, const void *buf, unsigned int nbyte, loff_t offset);
-#ifndef ENOSPC
-#define ENOSPC 28
-#endif
+loff_t yaffs_lseek(int fd, loff_t offset, int whence) ;
-#ifndef ENOTEMPTY
-#define ENOTEMPTY 39
-#endif
+int yaffs_truncate(const YCHAR *path, loff_t new_size);
+int yaffs_ftruncate(int fd, loff_t new_size);
-#ifndef ENOMEM
-#define ENOMEM 12
-#endif
+int yaffs_unlink(const YCHAR *path) ;
+int yaffs_rename(const YCHAR *oldPath, const YCHAR *newPath) ;
-#ifndef EEXIST
-#define EEXIST 17
-#endif
+int yaffs_stat(const YCHAR *path, struct yaffs_stat *buf) ;
+int yaffs_lstat(const YCHAR *path, struct yaffs_stat *buf) ;
+int yaffs_fstat(int fd, struct yaffs_stat *buf) ;
-#ifndef ENOTDIR
-#define ENOTDIR 20
-#endif
+int yaffs_utime(const YCHAR *path, const struct yaffs_utimbuf *buf);
+int yaffs_futime(int fd, const struct yaffs_utimbuf *buf);
-#ifndef EISDIR
-#define EISDIR 21
-#endif
+int yaffs_setxattr(const char *path, const char *name,
+ const void *data, int size, int flags);
+int yaffs_lsetxattr(const char *path, const char *name,
+ const void *data, int size, int flags);
+int yaffs_fsetxattr(int fd, const char *name,
+ const void *data, int size, int flags);
-// Mode flags
+int yaffs_getxattr(const char *path, const char *name,
+ void *data, int size);
+int yaffs_lgetxattr(const char *path, const char *name,
+ void *data, int size);
+int yaffs_fgetxattr(int fd, const char *name,
+ void *data, int size);
-#ifndef S_IFMT
-#define S_IFMT 0170000
-#endif
+int yaffs_removexattr(const char *path, const char *name);
+int yaffs_lremovexattr(const char *path, const char *name);
+int yaffs_fremovexattr(int fd, const char *name);
-#ifndef S_IFLNK
-#define S_IFLNK 0120000
-#endif
+int yaffs_listxattr(const char *path, char *list, int size);
+int yaffs_llistxattr(const char *path, char *list, int size);
+int yaffs_flistxattr(int fd, char *list, int size);
-#ifndef S_IFDIR
-#define S_IFDIR 0040000
-#endif
-#ifndef S_IFREG
-#define S_IFREG 0100000
-#endif
+#ifdef CONFIG_YAFFS_WINCE
-#ifndef S_IREAD
-#define S_IREAD 0000400
-#endif
+int yaffs_set_wince_times(int fd,
+ const unsigned *wctime,
+ const unsigned *watime,
+ const unsigned *wmtime);
+int yaffs_get_wince_times(int fd,
+ unsigned *wctime,
+ unsigned *watime,
+ unsigned *wmtime);
-#ifndef S_IWRITE
-#define S_IWRITE 0000200
#endif
+int yaffs_chmod(const YCHAR *path, mode_t mode);
+int yaffs_fchmod(int fd, mode_t mode);
+int yaffs_mkdir(const YCHAR *path, mode_t mode) ;
+int yaffs_rmdir(const YCHAR *path) ;
+yaffs_DIR *yaffs_opendir(const YCHAR *dirname) ;
+struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp) ;
+void yaffs_rewinddir(yaffs_DIR *dirp) ;
+int yaffs_closedir(yaffs_DIR *dirp) ;
-struct yaffs_dirent{
- long d_ino; /* inode number */
- off_t d_off; /* offset to this dirent */
- unsigned short d_reclen; /* length of this d_name */
- char d_name [NAME_MAX+1]; /* file name (null-terminated) */
- unsigned d_dont_use; /* debug pointer, not for public consumption */
-};
-
-typedef struct yaffs_dirent yaffs_dirent;
-
-
-typedef struct __opaque yaffs_DIR;
-
+int yaffs_mount(const YCHAR *path) ;
+int yaffs_mount2(const YCHAR *path, int read_only);
+int yaffs_mount_common(const YCHAR *path, int read_only, int skip_checkpt);
+int yaffs_unmount(const YCHAR *path) ;
+int yaffs_unmount2(const YCHAR *path, int force);
+int yaffs_remount(const YCHAR *path, int force, int read_only);
-struct yaffs_stat{
- int st_dev; /* device */
- int st_ino; /* inode */
- mode_t st_mode; /* protection */
- int st_nlink; /* number of hard links */
- int st_uid; /* user ID of owner */
- int st_gid; /* group ID of owner */
- unsigned st_rdev; /* device type (if inode device) */
- off_t st_size; /* total size, in bytes */
- unsigned long st_blksize; /* blocksize for filesystem I/O */
- unsigned long st_blocks; /* number of blocks allocated */
- unsigned long yst_atime; /* time of last access */
- unsigned long yst_mtime; /* time of last modification */
- unsigned long yst_ctime; /* time of last change */
-};
-int yaffs_open(const char *path, int oflag, int mode) ;
-int yaffs_read(int fd, void *buf, unsigned int nbyte) ;
-int yaffs_write(int fd, const void *buf, unsigned int nbyte) ;
-int yaffs_close(int fd) ;
-off_t yaffs_lseek(int fd, off_t offset, int whence) ;
-int yaffs_truncate(int fd, off_t newSize);
+int yaffs_sync(const YCHAR *path) ;
-int yaffs_unlink(const char *path) ;
-int yaffs_rename(const char *oldPath, const char *newPath) ;
+int yaffs_symlink(const YCHAR *oldpath, const YCHAR *newpath);
+int yaffs_readlink(const YCHAR *path, YCHAR *buf, int bufsiz);
-int yaffs_stat(const char *path, struct yaffs_stat *buf) ;
-int yaffs_lstat(const char *path, struct yaffs_stat *buf) ;
-int yaffs_fstat(int fd, struct yaffs_stat *buf) ;
+int yaffs_link(const YCHAR *oldpath, const YCHAR *newpath);
+int yaffs_mknod(const YCHAR *pathname, mode_t mode, dev_t dev);
-int yaffs_chmod(const char *path, mode_t mode);
-int yaffs_fchmod(int fd, mode_t mode);
+loff_t yaffs_freespace(const YCHAR *path);
+loff_t yaffs_totalspace(const YCHAR *path);
-int yaffs_mkdir(const char *path, mode_t mode) ;
-int yaffs_rmdir(const char *path) ;
+int yaffs_inodecount(const YCHAR *path);
-yaffs_DIR *yaffs_opendir(const char *dirname) ;
-struct yaffs_dirent *yaffs_readdir(yaffs_DIR *dirp) ;
-void yaffs_rewinddir(yaffs_DIR *dirp) ;
-int yaffs_closedir(yaffs_DIR *dirp) ;
+int yaffs_n_handles(const YCHAR *path);
-int yaffs_mount(const char *path) ;
-int yaffs_unmount(const char *path) ;
+#define YAFFS_SHARE_READ 1
+#define YAFFS_SHARE_WRITE 2
+int yaffs_open_sharing(const YCHAR *path, int oflag, int mode, int shareMode);
-int yaffs_symlink(const char *oldpath, const char *newpath);
-int yaffs_readlink(const char *path, char *buf, int bufsiz);
+struct yaffs_dev;
+void yaffs_add_device(struct yaffs_dev *dev);
-int yaffs_link(const char *oldpath, const char *newpath);
-int yaffs_mknod(const char *pathname, mode_t mode, dev_t dev);
+int yaffs_start_up(void);
+int yaffsfs_GetLastError(void);
-loff_t yaffs_freespace(const char *path);
+/* Functions to iterate through devices. NB Use with extreme care! */
+void yaffs_dev_rewind(void);
+struct yaffs_dev *yaffs_next_dev(void);
-void yaffs_initialise(yaffsfs_DeviceConfiguration *configList);
+/* Function to get the last error */
+int yaffs_get_error(void);
+const char *yaffs_error_to_str(int err);
-int yaffs_StartUp(void);
+/* Function only for debugging */
+void *yaffs_getdev(const YCHAR *path);
+int yaffs_dump_dev(const YCHAR *path);
+int yaffs_set_error(int error);
+/* Trace control functions */
+unsigned yaffs_set_trace(unsigned tm);
+unsigned yaffs_get_trace(void);
#endif
diff --git a/fs/yaffs2/ydirectenv.h b/fs/yaffs2/ydirectenv.h
index b555810844..c2ffbfd56d 100644
--- a/fs/yaffs2/ydirectenv.h
+++ b/fs/yaffs2/ydirectenv.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -20,73 +20,65 @@
#ifndef __YDIRECTENV_H__
#define __YDIRECTENV_H__
-/* Direct interface */
+#include <common.h>
+#include <malloc.h>
+#include <linux/compat.h>
-#include "devextras.h"
+#include "yaffs_osglue.h"
+
+void yaffs_bug_fn(const char *file_name, int line_no);
-/* XXX U-BOOT XXX */
-#if 0
-#include "stdlib.h"
-#include "stdio.h"
-#include "string.h"
-#include "assert.h"
-#endif
-#include "yaffs_malloc.h"
-/* XXX U-BOOT XXX */
-#if 0
-#define YBUG() assert(1)
-#endif
#define YCHAR char
#define YUCHAR unsigned char
#define _Y(x) x
-#define yaffs_strcpy(a,b) strcpy(a,b)
-#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
-#define yaffs_strncmp(a,b,c) strncmp(a,b,c)
-#define yaffs_strlen(s) strlen(s)
-#define yaffs_sprintf sprintf
-#define yaffs_toupper(a) toupper(a)
-
-#ifdef NO_Y_INLINE
-#define Y_INLINE
+
+#define yaffs_strcat(a, b) strcat(a, b)
+#define yaffs_strcpy(a, b) strcpy(a, b)
+#define yaffs_strncpy(a, b, c) strncpy(a, b, c)
+#define yaffs_strnlen(s, m) strnlen(s, m)
+#ifdef CONFIG_YAFFS_CASE_INSENSITIVE
+#define yaffs_strcmp(a, b) strcasecmp(a, b)
+#define yaffs_strncmp(a, b, c) strncasecmp(a, b, c)
#else
-#define Y_INLINE inline
+#define yaffs_strcmp(a, b) strcmp(a, b)
+#define yaffs_strncmp(a, b, c) strncmp(a, b, c)
#endif
-#define YMALLOC(x) yaffs_malloc(x)
-#define YFREE(x) free(x)
-#define YMALLOC_ALT(x) yaffs_malloc(x)
-#define YFREE_ALT(x) free(x)
-#define YMALLOC_DMA(x) yaffs_malloc(x)
+void yaffs_qsort(void *aa, size_t n, size_t es,
+ int (*cmp)(const void *, const void *));
-#define YYIELD() do {} while(0)
+#define sort(base, n, sz, cmp_fn, swp) yaffs_qsort(base, n, sz, cmp_fn)
+#define YAFFS_PATH_DIVIDERS "/"
+#ifdef NO_inline
+#define inline
+#endif
-//#define YINFO(s) YPRINTF(( __FILE__ " %d %s\n",__LINE__,s))
-//#define YALERT(s) YINFO(s)
-
+#define cond_resched() do {} while (0)
-#define TENDSTR "\n"
-#define TSTR(x) x
-#define TOUT(p) printf p
+#define yaffs_trace(msk, fmt, ...) do { \
+ if (yaffs_trace_mask & (msk)) \
+ printf("yaffs: " fmt "\n", ##__VA_ARGS__); \
+} while (0)
#define YAFFS_LOSTNFOUND_NAME "lost+found"
#define YAFFS_LOSTNFOUND_PREFIX "obj"
-//#define YPRINTF(x) printf x
#include "yaffscfg.h"
#define Y_CURRENT_TIME yaffsfs_CurrentTime()
#define Y_TIME_CONVERT(x) x
-#define YAFFS_ROOT_MODE 0666
+#define YAFFS_ROOT_MODE 0666
#define YAFFS_LOSTNFOUND_MODE 0666
-#define yaffs_SumCompare(x,y) ((x) == (y))
-#define yaffs_strcmp(a,b) strcmp(a,b)
+#include "yaffs_list.h"
+
+#include "yaffsfs.h"
#endif
diff --git a/fs/yaffs2/yportenv.h b/fs/yaffs2/yportenv.h
index bbab14d503..251eba0792 100644
--- a/fs/yaffs2/yportenv.h
+++ b/fs/yaffs2/yportenv.h
@@ -1,7 +1,7 @@
/*
* YAFFS: Yet another Flash File System . A NAND-flash specific file system.
*
- * Copyright (C) 2002-2007 Aleph One Ltd.
+ * Copyright (C) 2002-2011 Aleph One Ltd.
* for Toby Churchill Ltd and Brightstar Engineering
*
* Created by Charles Manning <charles@aleph1.co.uk>
@@ -17,82 +17,63 @@
#ifndef __YPORTENV_H__
#define __YPORTENV_H__
-/* XXX U-BOOT XXX */
-#ifndef CONFIG_YAFFS_DIRECT
-#define CONFIG_YAFFS_DIRECT
+#include <linux/types.h>
+
+/* Definition of types */
+#ifdef CONFIG_YAFFS_DEFINES_TYPES
+typedef unsigned char u8;
+typedef unsigned short u16;
+typedef unsigned u32;
#endif
-#if defined CONFIG_YAFFS_WINCE
-#include "ywinceenv.h"
+#ifdef CONFIG_YAFFS_PROVIDE_DEFS
+/* File types */
+
+
+#define DT_UNKNOWN 0
+#define DT_FIFO 1
+#define DT_CHR 2
+#define DT_DIR 4
+#define DT_BLK 6
+#define DT_REG 8
+#define DT_LNK 10
+#define DT_SOCK 12
+#define DT_WHT 14
+
+
+/*
+ * Attribute flags.
+ * These are or-ed together to select what has been changed.
+ */
+#define ATTR_MODE 1
+#define ATTR_UID 2
+#define ATTR_GID 4
+#define ATTR_SIZE 8
+#define ATTR_ATIME 16
+#define ATTR_MTIME 32
+#define ATTR_CTIME 64
+
+struct iattr {
+ unsigned int ia_valid;
+ unsigned ia_mode;
+ unsigned ia_uid;
+ unsigned ia_gid;
+ unsigned ia_size;
+ unsigned ia_atime;
+ unsigned ia_mtime;
+ unsigned ia_ctime;
+ unsigned int ia_attr_flags;
+};
-/* XXX U-BOOT XXX */
-#elif 0 /* defined __KERNEL__ */
-
-#include "moduleconfig.h"
-
-/* Linux kernel */
-#include <linux/version.h>
-#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19))
-#include <linux/config.h>
-#endif
-#include <linux/kernel.h>
-#include <linux/mm.h>
-#include <linux/sched.h>
-#include <linux/string.h>
-#include <linux/slab.h>
-#include <linux/vmalloc.h>
-
-#define YCHAR char
-#define YUCHAR unsigned char
-#define _Y(x) x
-#define yaffs_strcpy(a,b) strcpy(a,b)
-#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
-#define yaffs_strncmp(a,b,c) strncmp(a,b,c)
-#define yaffs_strlen(s) strlen(s)
-#define yaffs_sprintf sprintf
-#define yaffs_toupper(a) toupper(a)
-
-#define Y_INLINE inline
-
-#define YAFFS_LOSTNFOUND_NAME "lost+found"
-#define YAFFS_LOSTNFOUND_PREFIX "obj"
-
-/* #define YPRINTF(x) printk x */
-#define YMALLOC(x) kmalloc(x,GFP_KERNEL)
-#define YFREE(x) kfree(x)
-#define YMALLOC_ALT(x) vmalloc(x)
-#define YFREE_ALT(x) vfree(x)
-#define YMALLOC_DMA(x) YMALLOC(x)
-
-// KR - added for use in scan so processes aren't blocked indefinitely.
-#define YYIELD() schedule()
-
-#define YAFFS_ROOT_MODE 0666
-#define YAFFS_LOSTNFOUND_MODE 0666
-
-#if (LINUX_VERSION_CODE > KERNEL_VERSION(2,5,0))
-#define Y_CURRENT_TIME CURRENT_TIME.tv_sec
-#define Y_TIME_CONVERT(x) (x).tv_sec
-#else
-#define Y_CURRENT_TIME CURRENT_TIME
-#define Y_TIME_CONVERT(x) (x)
#endif
-#define yaffs_SumCompare(x,y) ((x) == (y))
-#define yaffs_strcmp(a,b) strcmp(a,b)
-#define TENDSTR "\n"
-#define TSTR(x) KERN_WARNING x
-#define TOUT(p) printk p
-#define yaffs_trace(mask, fmt, args...) \
- do { if ((mask) & (yaffs_traceMask|YAFFS_TRACE_ERROR)) \
- printk(KERN_WARNING "yaffs: " fmt, ## args); \
- } while (0)
+#if defined CONFIG_YAFFS_WINCE
+
+#include "ywinceenv.h"
-#define compile_time_assertion(assertion) \
- ({ int x = __builtin_choose_expr(assertion, 0, (void)0); (void) x; })
#elif defined CONFIG_YAFFS_DIRECT
@@ -101,93 +82,228 @@
#elif defined CONFIG_YAFFS_UTIL
-/* Stuff for YAFFS utilities */
+#include "yutilsenv.h"
-#include "stdlib.h"
-#include "stdio.h"
-#include "string.h"
+#else
+/* Should have specified a configuration type */
+#error Unknown configuration
-#include "devextras.h"
+#endif
-#define YMALLOC(x) malloc(x)
-#define YFREE(x) free(x)
-#define YMALLOC_ALT(x) malloc(x)
-#define YFREE_ALT(x) free(x)
+#if defined(CONFIG_YAFFS_DIRECT) || defined(CONFIG_YAFFS_WINCE)
-#define YCHAR char
-#define YUCHAR unsigned char
-#define _Y(x) x
-#define yaffs_strcpy(a,b) strcpy(a,b)
-#define yaffs_strncpy(a,b,c) strncpy(a,b,c)
-#define yaffs_strlen(s) strlen(s)
-#define yaffs_sprintf sprintf
-#define yaffs_toupper(a) toupper(a)
+#ifdef CONFIG_YAFFSFS_PROVIDE_VALUES
-#define Y_INLINE inline
+#ifndef O_RDONLY
+#define O_RDONLY 00
+#endif
-/* #define YINFO(s) YPRINTF(( __FILE__ " %d %s\n",__LINE__,s)) */
-/* #define YALERT(s) YINFO(s) */
+#ifndef O_WRONLY
+#define O_WRONLY 01
+#endif
-#define TENDSTR "\n"
-#define TSTR(x) x
-#define TOUT(p) printf p
+#ifndef O_RDWR
+#define O_RDWR 02
+#endif
-#define YAFFS_LOSTNFOUND_NAME "lost+found"
-#define YAFFS_LOSTNFOUND_PREFIX "obj"
-/* #define YPRINTF(x) printf x */
+#ifndef O_CREAT
+#define O_CREAT 0100
+#endif
-#define YAFFS_ROOT_MODE 0666
-#define YAFFS_LOSTNFOUND_MODE 0666
+#ifndef O_EXCL
+#define O_EXCL 0200
+#endif
-#define yaffs_SumCompare(x,y) ((x) == (y))
-#define yaffs_strcmp(a,b) strcmp(a,b)
+#ifndef O_TRUNC
+#define O_TRUNC 01000
+#endif
-#else
-/* Should have specified a configuration type */
-#error Unknown configuration
+#ifndef O_APPEND
+#define O_APPEND 02000
+#endif
+#ifndef SEEK_SET
+#define SEEK_SET 0
#endif
-/* see yaffs_fs.c */
-extern unsigned int yaffs_traceMask;
-extern unsigned int yaffs_wr_attempts;
+#ifndef SEEK_CUR
+#define SEEK_CUR 1
+#endif
-/*
- * Tracing flags.
- * The flags masked in YAFFS_TRACE_ALWAYS are always traced.
- */
+#ifndef SEEK_END
+#define SEEK_END 2
+#endif
+
+#ifndef EBUSY
+#define EBUSY 16
+#endif
+
+#ifndef ENODEV
+#define ENODEV 19
+#endif
+
+#ifndef EINVAL
+#define EINVAL 22
+#endif
+
+#ifndef ENFILE
+#define ENFILE 23
+#endif
+
+#ifndef EBADF
+#define EBADF 9
+#endif
+
+#ifndef EACCES
+#define EACCES 13
+#endif
+
+#ifndef EXDEV
+#define EXDEV 18
+#endif
+
+#ifndef ENOENT
+#define ENOENT 2
+#endif
+
+#ifndef ENOSPC
+#define ENOSPC 28
+#endif
+
+#ifndef EROFS
+#define EROFS 30
+#endif
+
+#ifndef ERANGE
+#define ERANGE 34
+#endif
+
+#ifndef ENODATA
+#define ENODATA 61
+#endif
+
+#ifndef ENOTEMPTY
+#define ENOTEMPTY 39
+#endif
+
+#ifndef ENAMETOOLONG
+#define ENAMETOOLONG 36
+#endif
+
+#ifndef ENOMEM
+#define ENOMEM 12
+#endif
+
+#ifndef EFAULT
+#define EFAULT 14
+#endif
+
+#ifndef EEXIST
+#define EEXIST 17
+#endif
+
+#ifndef ENOTDIR
+#define ENOTDIR 20
+#endif
+
+#ifndef EISDIR
+#define EISDIR 21
+#endif
+
+#ifndef ELOOP
+#define ELOOP 40
+#endif
+
+
+/* Mode flags */
+
+#ifndef S_IFMT
+#define S_IFMT 0170000
+#endif
+
+#ifndef S_IFSOCK
+#define S_IFSOCK 0140000
+#endif
+
+#ifndef S_IFIFO
+#define S_IFIFO 0010000
+#endif
+
+#ifndef S_IFCHR
+#define S_IFCHR 0020000
+#endif
+
+#ifndef S_IFBLK
+#define S_IFBLK 0060000
+#endif
+
+#ifndef S_IFLNK
+#define S_IFLNK 0120000
+#endif
+
+#ifndef S_IFDIR
+#define S_IFDIR 0040000
+#endif
+
+#ifndef S_IFREG
+#define S_IFREG 0100000
+#endif
+
+#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK)
+#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK)
+#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR)
+#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG)
+#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK)
+#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR)
+#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO)
+
+
+#ifndef S_IREAD
+#define S_IREAD 0000400
+#endif
+
+#ifndef S_IWRITE
+#define S_IWRITE 0000200
+#endif
+
+#ifndef S_IEXEC
+#define S_IEXEC 0000100
+#endif
+
+#ifndef XATTR_CREATE
+#define XATTR_CREATE 1
+#endif
+
+#ifndef XATTR_REPLACE
+#define XATTR_REPLACE 2
+#endif
+
+#ifndef R_OK
+#define R_OK 4
+#define W_OK 2
+#define X_OK 1
+#define F_OK 0
+#endif
+
+#else
+#include <errno.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#endif
+
+#endif
+
+#ifndef Y_DUMP_STACK
+#define Y_DUMP_STACK() do { } while (0)
+#endif
-#define YAFFS_TRACE_OS 0x00000002
-#define YAFFS_TRACE_ALLOCATE 0x00000004
-#define YAFFS_TRACE_SCAN 0x00000008
-#define YAFFS_TRACE_BAD_BLOCKS 0x00000010
-#define YAFFS_TRACE_ERASE 0x00000020
-#define YAFFS_TRACE_GC 0x00000040
-#define YAFFS_TRACE_WRITE 0x00000080
-#define YAFFS_TRACE_TRACING 0x00000100
-#define YAFFS_TRACE_DELETION 0x00000200
-#define YAFFS_TRACE_BUFFERS 0x00000400
-#define YAFFS_TRACE_NANDACCESS 0x00000800
-#define YAFFS_TRACE_GC_DETAIL 0x00001000
-#define YAFFS_TRACE_SCAN_DEBUG 0x00002000
-#define YAFFS_TRACE_MTD 0x00004000
-#define YAFFS_TRACE_CHECKPOINT 0x00008000
-
-#define YAFFS_TRACE_VERIFY 0x00010000
-#define YAFFS_TRACE_VERIFY_NAND 0x00020000
-#define YAFFS_TRACE_VERIFY_FULL 0x00040000
-#define YAFFS_TRACE_VERIFY_ALL 0x000F0000
-
-
-#define YAFFS_TRACE_ERROR 0x40000000
-#define YAFFS_TRACE_BUG 0x80000000
-#define YAFFS_TRACE_ALWAYS 0xF0000000
-
-
-#define T(mask,p) do{ if((mask) & (yaffs_traceMask | YAFFS_TRACE_ALWAYS)) TOUT(p);} while(0)
-
-#ifndef CONFIG_YAFFS_WINCE
-#define YBUG() T(YAFFS_TRACE_BUG,(TSTR("==>> yaffs bug: " __FILE__ " %d" TENDSTR),__LINE__))
+#ifndef BUG
+#define BUG() do {\
+ yaffs_trace(YAFFS_TRACE_BUG,\
+ "==>> yaffs bug: " __FILE__ " %d",\
+ __LINE__);\
+ Y_DUMP_STACK();\
+} while (0)
#endif
#endif
diff --git a/include/.gitignore b/include/.gitignore
deleted file mode 100644
index 7cd3e90700..0000000000
--- a/include/.gitignore
+++ /dev/null
@@ -1,6 +0,0 @@
-/autoconf.mk*
-/asm
-/bmp_logo.h
-/bmp_logo_data.h
-/config.h
-/config.mk
diff --git a/include/aes.h b/include/aes.h
new file mode 100644
index 0000000000..41b0db29c1
--- /dev/null
+++ b/include/aes.h
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2010 - 2011 NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _AES_REF_H_
+#define _AES_REF_H_
+
+/*
+ * AES encryption library, with small code size, supporting only 128-bit AES
+ *
+ * AES is a stream cipher which works a block at a time, with each block
+ * in this case being AES_KEY_LENGTH bytes.
+ */
+
+enum {
+ AES_STATECOLS = 4, /* columns in the state & expanded key */
+ AES_KEYCOLS = 4, /* columns in a key */
+ AES_ROUNDS = 10, /* rounds in encryption */
+
+ AES_KEY_LENGTH = 128 / 8,
+ AES_EXPAND_KEY_LENGTH = 4 * AES_STATECOLS * (AES_ROUNDS + 1),
+};
+
+/**
+ * Expand a key into a key schedule, which is then used for the other
+ * operations.
+ *
+ * \param key Key, of length AES_KEY_LENGTH bytes
+ * \param expkey Buffer to place expanded key, AES_EXPAND_KEY_LENGTH
+ */
+void aes_expand_key(u8 *key, u8 *expkey);
+
+/**
+ * Encrypt a single block of data
+ *
+ * in Input data
+ * expkey Expanded key to use for encryption (from aes_expand_key())
+ * out Output data
+ */
+void aes_encrypt(u8 *in, u8 *expkey, u8 *out);
+
+/**
+ * Decrypt a single block of data
+ *
+ * in Input data
+ * expkey Expanded key to use for decryption (from aes_expand_key())
+ * out Output data
+ */
+void aes_decrypt(u8 *in, u8 *expkey, u8 *out);
+
+#endif /* _AES_REF_H_ */
diff --git a/include/ahci.h b/include/ahci.h
index 465ea7fcbb..c4fb9e79a5 100644
--- a/include/ahci.h
+++ b/include/ahci.h
@@ -30,12 +30,13 @@
#define AHCI_PCI_BAR 0x24
#define AHCI_MAX_SG 56 /* hardware max is 64K */
#define AHCI_CMD_SLOT_SZ 32
+#define AHCI_MAX_CMD_SLOT 32
#define AHCI_RX_FIS_SZ 256
#define AHCI_CMD_TBL_HDR 0x80
#define AHCI_CMD_TBL_CDB 0x40
#define AHCI_CMD_TBL_SZ AHCI_CMD_TBL_HDR + (AHCI_MAX_SG * 16)
-#define AHCI_PORT_PRIV_DMA_SZ AHCI_CMD_SLOT_SZ + AHCI_CMD_TBL_SZ \
- + AHCI_RX_FIS_SZ
+#define AHCI_PORT_PRIV_DMA_SZ (AHCI_CMD_SLOT_SZ * AHCI_MAX_CMD_SLOT + \
+ AHCI_CMD_TBL_SZ + AHCI_RX_FIS_SZ)
#define AHCI_CMD_ATAPI (1 << 5)
#define AHCI_CMD_WRITE (1 << 6)
#define AHCI_CMD_PREFETCH (1 << 7)
diff --git a/include/android/android_boot.h b/include/android/android_boot.h
new file mode 100644
index 0000000000..1dd8d19fcc
--- /dev/null
+++ b/include/android/android_boot.h
@@ -0,0 +1,6 @@
+#ifndef _ANDROID_BOOT_H_
+#define _ANDROID_BOOT_H_
+
+void creat_atags(unsigned taddr, const char *cmdline, unsigned raddr, unsigned rsize);
+void boot_linux(unsigned kaddr,unsigned taddr);
+#endif
diff --git a/include/android/android_bootimg.h b/include/android/android_bootimg.h
new file mode 100644
index 0000000000..422d1c11dc
--- /dev/null
+++ b/include/android/android_bootimg.h
@@ -0,0 +1,103 @@
+/* tools/mkbootimg/bootimg.h
+**
+** Copyright 2007, The Android Open Source Project
+**
+** Licensed under the Apache License, Version 2.0 (the "License");
+** you may not use this file except in compliance with the License.
+** You may obtain a copy of the License at
+**
+** http://www.apache.org/licenses/LICENSE-2.0
+**
+** Unless required by applicable law or agreed to in writing, software
+** distributed under the License is distributed on an "AS IS" BASIS,
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+** See the License for the specific language governing permissions and
+** limitations under the License.
+*/
+
+#ifndef _BOOT_IMAGE_H_
+#define _BOOT_IMAGE_H_
+
+typedef struct boot_img_hdr boot_img_hdr;
+
+#define BOOT_MAGIC "ANDROID!"
+#define BOOT_MAGIC_SIZE 8
+#define BOOT_NAME_SIZE 16
+#define BOOT_ARGS_SIZE 512
+
+struct boot_img_hdr
+{
+ unsigned char magic[BOOT_MAGIC_SIZE];
+
+ unsigned kernel_size; /* size in bytes */
+ unsigned kernel_addr; /* physical load addr */
+
+ unsigned ramdisk_size; /* size in bytes */
+ unsigned ramdisk_addr; /* physical load addr */
+
+ unsigned second_size; /* size in bytes */
+ unsigned second_addr; /* physical load addr */
+
+ unsigned tags_addr; /* physical addr for kernel tags */
+ unsigned page_size; /* flash page size we assume */
+ unsigned unused[2]; /* future expansion: should be 0 */
+
+ unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */
+
+ unsigned char cmdline[BOOT_ARGS_SIZE];
+
+ unsigned id[8]; /* timestamp / checksum / sha1 / etc */
+};
+
+/*
+** +-----------------+
+** | boot header | 1 page
+** +-----------------+
+** | kernel | n pages
+** +-----------------+
+** | ramdisk | m pages
+** +-----------------+
+** | second stage | o pages
+** +-----------------+
+**
+** n = (kernel_size + page_size - 1) / page_size
+** m = (ramdisk_size + page_size - 1) / page_size
+** o = (second_size + page_size - 1) / page_size
+**
+** 0. all entities are page_size aligned in flash
+** 1. kernel and ramdisk are required (size != 0)
+** 2. second is optional (second_size == 0 -> no second)
+** 3. load each element (kernel, ramdisk, second) at
+** the specified physical address (kernel_addr, etc)
+** 4. prepare tags at tag_addr. kernel_args[] is
+** appended to the kernel commandline in the tags.
+** 5. r0 = 0, r1 = MACHINE_TYPE, r2 = tags_addr
+** 6. if second_size != 0: jump to second_addr
+** else: jump to kernel_addr
+*/
+
+#if 0
+typedef struct ptentry ptentry;
+
+struct ptentry {
+ char name[16]; /* asciiz partition name */
+ unsigned start; /* starting block number */
+ unsigned length; /* length in blocks */
+ unsigned flags; /* set to zero */
+};
+
+/* MSM Partition Table ATAG
+**
+** length: 2 + 7 * n
+** atag: 0x4d534d70
+** <ptentry> x n
+*/
+#endif
+void normal_mode(void);
+void recovery_mode(void);
+void fastboot_mode(void);
+void dloader_mode(void);
+void charge_mode(void);
+void vlx_mode(void);
+
+#endif
diff --git a/include/android/android_recovery.h b/include/android/android_recovery.h
new file mode 100644
index 0000000000..f76358fd08
--- /dev/null
+++ b/include/android/android_recovery.h
@@ -0,0 +1,77 @@
+/* Copyright (c) 2010, Code Aurora Forum. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Code Aurora Forum, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef _BOOTLOADER_RECOVERY_H
+#define _BOOTLOADER_RECOVERY_H
+
+#define UPDATE_MAGIC "MSM-RADIO-UPDATE"
+#define UPDATE_MAGIC_SIZE 16
+#define UPDATE_VERSION 0x00010000
+
+
+/* Recovery Message */
+struct recovery_message {
+ char command[32];
+ char status[32];
+ char recovery[1024];
+};
+
+
+struct update_header {
+ unsigned char MAGIC[UPDATE_MAGIC_SIZE];
+
+ unsigned version;
+ unsigned size;
+
+ unsigned image_offset;
+ unsigned image_length;
+
+ unsigned bitmap_width;
+ unsigned bitmap_height;
+ unsigned bitmap_bpp;
+
+ unsigned busy_bitmap_offset;
+ unsigned busy_bitmap_length;
+
+ unsigned fail_bitmap_offset;
+ unsigned fail_bitmap_length;
+};
+
+
+
+int get_recovery_message(struct recovery_message *out);
+int set_recovery_message(const struct recovery_message *in);
+
+int read_update_header_for_bootloader(struct update_header *header);
+int update_firmware_image (struct update_header *header, char *name);
+
+int recovery_init (void);
+
+extern unsigned boot_into_recovery;
+
+#endif
diff --git a/include/android/boot_mode.h b/include/android/boot_mode.h
new file mode 100644
index 0000000000..46277e1aca
--- /dev/null
+++ b/include/android/boot_mode.h
@@ -0,0 +1,41 @@
+#ifndef _BOOT_MODE_H_
+#define _BOOT_MODE_H_
+
+void normal_mode(void);
+void recovery_mode(void);
+void update_mode(void);
+void charge_mode(void);
+void dloader_mode(void);
+void fastboot_mode(void);
+void alarm_mode(void);
+void calibration_detect(int key);
+void engtest_mode(void);
+void sleep_mode(void);
+int is_bat_low(void);
+int alarm_flag_check(void);
+
+#define RECOVERY_MODE 0x77665502
+#define FASTBOOT_MODE 0x77665500
+#define NORMAL_MODE 0x77665503
+#define ALARM_MODE 0x77665504
+#define SLEEP_MODE 0x77665505
+
+#define BOOT_NORAML 0xf1
+#define BOOT_FASTBOOT 0xf2
+#define BOOT_RECOVERY 0xf3
+#define BOOT_CALIBRATE 0xf4
+#define BOOT_DLOADER 0xf5
+#define BOOT_CHARGE 0xf6
+#define BOOT_UPDATE 0xf7
+
+#define KEY_FASTBOOT 0x2f
+#define KEY_RECOVERY 0x3f
+#define KEY_ENGTEST 0x4f
+#define KEY_UPDATE 0x5f
+
+#define BACKLIGHT_ON 1
+#define BACKLIGHT_OFF 0
+
+extern unsigned int check_key_boot(uint32_t key);
+extern void vlx_nand_boot(char * kernel_pname, char * cmdline, int backlight_set);
+#endif
diff --git a/include/asm b/include/asm
new file mode 120000
index 0000000000..b37ecc899d
--- /dev/null
+++ b/include/asm
@@ -0,0 +1 @@
+../arch/arm/include/asm \ No newline at end of file
diff --git a/include/autoconf.mk b/include/autoconf.mk
new file mode 100644
index 0000000000..df79076e11
--- /dev/null
+++ b/include/autoconf.mk
@@ -0,0 +1,171 @@
+CONFIG_TRAP_SIZE=0x00c0
+CONFIG_CMD_FAT=y
+CONFIG_SYS_NAND_U_BOOT_OFFS="(CONFIG_SPL_NAND_OFFS + CONFIG_SPL_MAX_SIZE + CONFIG_MTD_PTBL_SIZE)"
+CONFIG_ARMV7=y
+CONFIG_CMD_ITEST=y
+CONFIG_CMD_EDITENV=y
+CONFIG_CMD_MTDPARTS=y
+CONFIG_SPL_NAND_SUPPORT=y
+CONFIG_SYS_MAX_NAND_DEVICE=y
+CONFIG_SYS_NAND_U_BOOT_DST="(CONFIG_SYS_TEXT_BASE - 64)"
+CONFIG_VERSION_VARIABLE=y
+CONFIG_NAND_RDA=y
+CONFIG_CMD_CRC32=y
+CONFIG_SYS_LONGHELP=y
+CONFIG_SPL_BOARD_INFO_ADDR="(CONFIG_SYS_SRAM_BASE + CONFIG_SYS_SRAM_SIZE - CONFIG_SPL_BOARD_INFO_SIZE)"
+CONFIG_SYS_LOAD_ADDR="(PHYS_SDRAM_1 + 0x02000000)"
+CONFIG_DISPLAY_BOARDINFO=y
+CONFIG_SPL_NAND_OFFS="(NAND_START_ADDR)"
+CONFIG_STACKSIZE="(256*1024)"
+CONFIG_BOOTDELAY=y
+CONFIG_SYS_NAND_BASE="(PHYS_SDRAM_1 + 0x00800000)"
+CONFIG_SYS_HELP_CMD_WIDTH=8
+CONFIG_NR_DRAM_BANKS=y
+CONFIG_EFI_PARTITION=y
+CONFIG_CMD_SAVES=y
+CONFIG_SYS_CBSIZE=1024
+CONFIG_SKIP_LOWLEVEL_INIT=y
+CONFIG_CMD_UBI=y
+CONFIG_BOOTM_LINUX=y
+CONFIG_USB_FASTBOOT=y
+CONFIG_SPL_BOARD_INIT=y
+CONFIG_SPL_YMODEM_SUPPORT=y
+CONFIG_SYS_CACHELINE_SIZE=32
+CONFIG_MMC=y
+CONFIG_SPL_XMODEM_LOAD=y
+CONFIG_MTD_PARTITIONS=y
+CONFIG_SDMMC_BOOT=y
+CONFIG_REVISION_TAG=y
+CONFIG_SPL_EMMC_SUPPORT=y
+CONFIG_CMD_MISC=y
+CONFIG_ZERO_BOOTDELAY_CHECK=y
+CONFIG_SPL_LIBCOMMON_SUPPORT=y
+CONFIG_SYS_SRAM_BASE=0x00100000
+CONFIG_ENV_SIZE="(16 << 10)"
+CONFIG_CMD_HWFLOW=y
+CONFIG_MDCOM=y
+CONFIG_SYS_EMMC_U_BOOT_OFFS="(CONFIG_SPL_EMMC_OFFS + CONFIG_SPL_MAX_SIZE + CONFIG_MTD_PTBL_SIZE)"
+CONFIG_SYS_MALLOC_LEN="(0x10000 + 16*1024*1024)"
+CONFIG_INITRD_TAG=y
+CONFIG_SYS_HZ_CLOCK=2000000
+CONFIG_RDA_FACTORY=y
+CONFIG_SYS_TEXT_BASE=0x80008000
+CONFIG_SPL_CHECK_IMAGE=y
+CONFIG_SPL_TEXT_BASE=0x00100100
+CONFIG_MTD_PTBL_OFFS="(CONFIG_SPL_NAND_OFFS + CONFIG_SPL_MAX_SIZE)"
+CONFIG_MMC_DEV_NAME="mmc0"
+CONFIG_CMD_NAND=y
+CONFIG_USB_DEVICE=y
+CONFIG_BOOTARGS="mem="MK_STR(MEM_SIZE)"M console=ttyS0," MK_STR(CONFIG_BAUDRATE) "root=/dev/ram rw rdinit=/init"
+CONFIG_CMD_NAND_YAFFS=y
+CONFIG_CMD_MEMORY=y
+CONFIG_SYS_MAXARGS=16
+CONFIG_UIMAGEHDR_SIZE=0x40
+CONFIG_CMD_RUN=y
+CONFIG_SYS_PBSIZE="(CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT)+16)"
+CONFIG_BOARDDIR="board/rda/rda8810"
+CONFIG_SPL_STACK="CONFIG_SPL_BOARD_INFO_ADDR"
+CONFIG_UBOOT_VARIANT_DEBUG=y
+CONFIG_CMDLINE_EDITING=y
+CONFIG_DDR_CAL_VAL_SIZE=0x10
+CONFIG_SYS_NAND_U_BOOT_SIZE="(CONFIG_SYS_BOOTLOADER_MAX_SIZE - CONFIG_MTD_PTBL_SIZE - CONFIG_SPL_MAX_SIZE - CONFIG_SPL_NAND_OFFS)"
+CONFIG_CMD_EXT2=y
+CONFIG_BOOTCOMMAND="mux_config; mmc dev 0; ext2load mmc 0:1 ${script_addr} boot.scr && source ${script_addr};echo Running boot script failed;"
+CONFIG_CMD_MDCOM=y
+CONFIG_SPL_NAND_LOAD=y
+CONFIG_CRC32_VERIFY=y
+CONFIG_SYS_NAND_MAX_CHIPS=y
+CONFIG_SYS_BOOT_RAMDISK_HIGH=y
+CONFIG_SPL_NAND_SIMPLE=y
+CONFIG_ZLIB=y
+CONFIG_RDA_PRDINFO=y
+CONFIG_CMD_GO=y
+CONFIG_CMD_BOOTD=y
+CONFIG_CMD_BOOTM=y
+CONFIG_CMD_BOOTZ=y
+CONFIG_SYS_SRAM_SIZE=0x00010000
+CONFIG_MUSB_UDC=y
+CONFIG_SYS_BARGSIZE="CONFIG_SYS_CBSIZE"
+CONFIG_SYS_HZ=1000
+CONFIG_DOS_PARTITION=y
+CONFIG_GZIP=y
+CONFIG_BOOTSTAGE_USER_COUNT=20
+CONFIG_CMD_FPGA=y
+CONFIG_MIN_PARTITION_NUM=0
+CONFIG_SYS_BAUDRATE_TABLE="{ 9600, 38400, 115200, 921600 }"
+CONFIG_SYS_EMMC_U_BOOT_SIZE="(CONFIG_SYS_BOOTLOADER_MAX_SIZE - CONFIG_MTD_PTBL_SIZE - CONFIG_SPL_MAX_SIZE - CONFIG_SPL_EMMC_OFFS)"
+CONFIG_SPL_LIBGENERIC_SUPPORT=y
+CONFIG_SPL_IMAGE_SUPPORT=y
+CONFIG_MMC_DEV_NUM=0
+CONFIG_SYS_HUSH_PARSER=y
+CONFIG_SIGNATURE_CHECK_IMAGE=y
+CONFIG_MX_CYCLIC=y
+CONFIG_SYS_SDRAM_BASE="(PHYS_SDRAM_1)"
+CONFIG_SPL_EMMC_OFFS=0x20000
+CONFIG_SPL_SERIAL_SUPPORT=y
+CONFIG_SYS_PROMPT_HUSH_PS2="> "
+CONFIG_SYS_EMMC_U_BOOT_DST="(CONFIG_SYS_TEXT_BASE - 64)"
+CONFIG_CMD_ECHO=y
+CONFIG_GENERIC_MMC=y
+CONFIG_MTD_PTBL_SIZE="((SPL_APPENDING_TO-CONFIG_SPL_MAX_SIZE/1024)*1024)"
+CONFIG_CMD_PRDINFO=y
+CONFIG_USE_ARCH_MEMCPY=y
+CONFIG_RDA_MMC=y
+CONFIG_EXTRA_ENV_SETTINGS="script_addr=81000000\0modem_addr=82000000\0factorydata_addr=83000000\0kernel_addr=84000000\0initrd_addr=85000000\0boot_device=mmc\0"
+CONFIG_SPL_LOAD_ADDRESS="(CONFIG_SYS_SRAM_BASE + CONFIG_TRAP_SIZE)"
+CONFIG_CMD_FASTBOOT=y
+CONFIG_SYS_INIT_SP_ADDR="(CONFIG_SYS_SDRAM_BASE + 0x1000 - GENERATED_GBL_DATA_SIZE)"
+CONFIG_CMD_ASKENV=y
+CONFIG_BAUDRATE=921600
+CONFIG_SYS_XMODEM_U_BOOT_DST="(CONFIG_SYS_TEXT_BASE - 64)"
+CONFIG_CMDLINE_TAG=y
+CONFIG_SPL_NAND_MIDDLE_DATA_BUFFER="(PHYS_SDRAM_1 + 0x01000000)"
+CONFIG_MAX_PARTITION_NUM=20
+CONFIG_ENV_IS_NOWHERE=y
+CONFIG_DDR_CAL_SEC_OFFS="CONFIG_SPL_MAX_SIZE - CONFIG_DDR_CAL_VAL_SIZE - 0x100"
+CONFIG_CMD_IMPORTENV=y
+CONFIG_CMD_EXPORTENV=y
+CONFIG_PARTITIONS=y
+CONFIG_SYS_MEMTEST_END="(PHYS_SDRAM_1 + 0x00800000 + 16*1024*1024)"
+CONFIG_CMD_UBIFS=y
+CONFIG_EXTFS_USER_IMAGES=y
+CONFIG_SYS_EMMC_U_BOOT_START="CONFIG_SYS_TEXT_BASE"
+CONFIG_USBD_HS=y
+CONFIG_SYS_NO_FLASH=y
+CONFIG_SYS_DEF_EEPROM_ADDR=0
+CONFIG_SYS_XMODEM_U_BOOT_START="CONFIG_SYS_TEXT_BASE"
+CONFIG_SPL_MAX_SIZE=49152
+CONFIG_MACH_TYPE="(5002)"
+CONFIG_RDA_USB_SERIAL=y
+CONFIG_SPL_THUMB_BUILD=y
+CONFIG_SPL=y
+CONFIG_MTD_DEVICE=y
+CONFIG_CMD_SOURCE=y
+CONFIG_SYS_PROMPT="RDA > "
+CONFIG_EXTFS_SYSTEM_IMAGE=y
+CONFIG_DISPLAY_CPUINFO=y
+CONFIG_USB_RDA=y
+CONFIG_NAND_RDA_V1=y
+CONFIG_SETUP_MEMORY_TAGS=y
+CONFIG_CMD_PDL2=y
+CONFIG_SYS_MEMTEST_START="(PHYS_SDRAM_1 + 0x00800000)"
+CONFIG_SYS_NAND_USE_FLASH_BBT=y
+CONFIG_CMD_LOADB=y
+CONFIG_CMD_LOADS=y
+CONFIG_CMD_IMI=y
+CONFIG_RDA_MUX_CONFIG=y
+CONFIG_MUSB_DMA=y
+CONFIG_LMB=y
+CONFIG_ARM=y
+CONFIG_RBTREE=y
+CONFIG_CMD_DIAG=y
+CONFIG_SYS_BOOTLOADER_MAX_SIZE="(1024*1024)"
+CONFIG_SYS_NAND_PAGE_2K=y
+CONFIG_SPL_CODE_MAX_SIZE=48880
+CONFIG_LZO=y
+CONFIG_SYS_NAND_LARGEPAGE=y
+CONFIG_CMD_MMC=y
+CONFIG_SPL_BOARD_INFO_SIZE=512
+CONFIG_SYS_NAND_U_BOOT_START="CONFIG_SYS_TEXT_BASE"
+CONFIG_MACH_RDA8810=y
+CONFIG_SPL_EMMC_LOAD=y
diff --git a/include/autoconf.mk.dep b/include/autoconf.mk.dep
new file mode 100644
index 0000000000..b326967b26
--- /dev/null
+++ b/include/autoconf.mk.dep
@@ -0,0 +1,55 @@
+include/autoconf.mk: include/common.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/config.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/config_cmd_defaults.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/config_defaults.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/configs/rda8810.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/configs/rda_config_defaults.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/rda/tgt_ap_board_config.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/rda/tgt_ap_clock_config.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/rda/ddr_timing/8810p_16x2_260m_ddr2_u08.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/config_cmd_default.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/arch/mtdparts_def.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/rda/tgt_ap_flash_parts.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/config.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm-offsets.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/bitops.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/types.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/bitops.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/proc/system.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/config.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/types.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/posix_types.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/stddef.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/posix_types.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/string.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/string.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/ptrace.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/proc/ptrace.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/include/stdarg.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/errno.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm-generic/errno.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/part.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/ide.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/part_efi.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/flash.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/image.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/compiler.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/include/stddef.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/byteorder.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/byteorder/little_endian.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/byteorder/swab.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/linux/byteorder/generic.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/lmb.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/u-boot.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/command.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/global_data.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/mach-types.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/setup.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/u-boot-arm.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/vsprintf.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/u-boot/crc.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/net.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/cache.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/asm/system.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/bootstage.h \
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/include/environment.h
diff --git a/include/common.h b/include/common.h
index 4b5841ef47..c679296877 100644
--- a/include/common.h
+++ b/include/common.h
@@ -112,6 +112,7 @@ typedef volatile unsigned char vu_char;
#include <asm/arch/hardware.h>
#endif
+#include <errno.h>
#include <part.h>
#include <flash.h>
#include <image.h>
@@ -222,6 +223,31 @@ typedef void (interrupt_handler_t)(void *);
#define MIN(x, y) min(x, y)
#define MAX(x, y) max(x, y)
+/*
+ * Return the absolute value of a number.
+ *
+ * This handles unsigned and signed longs, ints, shorts and chars. For all
+ * input types abs() returns a signed long.
+ *
+ * For 64-bit types, use abs64()
+ */
+#define abs(x) ({ \
+ long ret; \
+ if (sizeof(x) == sizeof(long)) { \
+ long __x = (x); \
+ ret = (__x < 0) ? -__x : __x; \
+ } else { \
+ int __x = (x); \
+ ret = (__x < 0) ? -__x : __x; \
+ } \
+ ret; \
+ })
+
+#define abs64(x) ({ \
+ s64 __x = (x); \
+ (__x < 0) ? -__x : __x; \
+ })
+
#if defined(CONFIG_ENV_IS_EMBEDDED)
#define TOTAL_MALLOC_LEN CONFIG_SYS_MALLOC_LEN
#elif ( ((CONFIG_ENV_ADDR+CONFIG_ENV_SIZE) < CONFIG_SYS_MONITOR_BASE) || \
@@ -704,13 +730,6 @@ int gunzip(void *, int, unsigned char *, unsigned long *);
int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
int stoponerr, int offset);
-/* lib/net_utils.c */
-#include <net.h>
-static inline IPaddr_t getenv_IPaddr (char *var)
-{
- return (string_to_ip(getenv(var)));
-}
-
/* lib/qsort.c */
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));
@@ -779,6 +798,13 @@ void fputc(int file, const char c);
int ftstc(int file);
int fgetc(int file);
+/* lib/net_utils.c */
+#include <net.h>
+static inline IPaddr_t getenv_IPaddr(char *var)
+{
+ return string_to_ip(getenv(var));
+}
+
/*
* CONSOLE multiplexing.
*/
@@ -794,6 +820,10 @@ int pcmcia_init (void);
#include <bootstage.h>
+#ifdef CONFIG_SHOW_ACTIVITY
+void show_activity(int arg);
+#endif
+
/* Multicore arch functions */
#ifdef CONFIG_MP
int cpu_status(int nr);
diff --git a/include/config.h b/include/config.h
new file mode 100644
index 0000000000..5d9cc1dded
--- /dev/null
+++ b/include/config.h
@@ -0,0 +1,6 @@
+/* Automatically generated - do not edit */
+#define CONFIG_BOARDDIR board/rda/rda8810
+#include <config_cmd_defaults.h>
+#include <config_defaults.h>
+#include <configs/rda8810.h>
+#include <asm/config.h>
diff --git a/include/config.mk b/include/config.mk
new file mode 100644
index 0000000000..659146438c
--- /dev/null
+++ b/include/config.mk
@@ -0,0 +1,5 @@
+ARCH = arm
+CPU = armv7
+BOARD = rda8810
+VENDOR = rda
+SOC = rda
diff --git a/include/config_cmd_all.h b/include/config_cmd_all.h
index 2c6b8295fb..55f4f7a30b 100644
--- a/include/config_cmd_all.h
+++ b/include/config_cmd_all.h
@@ -15,7 +15,6 @@
#define CONFIG_CMD_AMBAPP /* AMBA Plug & Play Bus print utility */
#define CONFIG_CMD_ASKENV /* ask for env variable */
-#define CONFIG_CMD_AT91_SPIMUX /* AT91 MMC/SPI Mux Support */
#define CONFIG_CMD_BDI /* bdinfo */
#define CONFIG_CMD_BEDBUG /* Include BedBug Debugger */
#define CONFIG_CMD_BMP /* BMP support */
diff --git a/include/configs/HWW1U1A.h b/include/configs/HWW1U1A.h
index 01597b965b..f08d78b91c 100644
--- a/include/configs/HWW1U1A.h
+++ b/include/configs/HWW1U1A.h
@@ -422,7 +422,7 @@ const char *hww1u1a_get_ps1(void);
#define CONFIG_MD5
#define CONFIG_SHA1
#define CONFIG_CMD_MD5SUM
-#define CONFIG_CMD_SHA1
+#define CONFIG_CMD_SHA1SUM
#define CONFIG_CMD_ASKENV
#define CONFIG_CMD_SETEXPR
diff --git a/include/configs/MBX.h b/include/configs/MBX.h
index cb5b023b58..79780bd1a3 100644
--- a/include/configs/MBX.h
+++ b/include/configs/MBX.h
@@ -87,7 +87,6 @@
* Command line configuration.
*/
#define CONFIG_CMD_NET
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_SDRAM
#define CONFIG_CMD_PCMCIA
#define CONFIG_CMD_IDE
diff --git a/include/configs/MigoR.h b/include/configs/MigoR.h
index 619a8002a7..84ba78f9e9 100644
--- a/include/configs/MigoR.h
+++ b/include/configs/MigoR.h
@@ -38,7 +38,6 @@
#define CONFIG_CMD_NET
#define CONFIG_CMD_PING
#define CONFIG_CMD_NFS
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_SDRAM
#define CONFIG_CMD_SAVEENV
diff --git a/include/configs/P1010RDB.h b/include/configs/P1010RDB.h
index f2d33668d8..08fc4e8427 100644
--- a/include/configs/P1010RDB.h
+++ b/include/configs/P1010RDB.h
@@ -181,7 +181,7 @@
/* DDR Setup */
#define CONFIG_FSL_DDR3
-#define CONFIG_DDR_RAW_TIMING
+#define CONFIG_SYS_DDR_RAW_TIMING
#define CONFIG_DDR_SPD
#define CONFIG_SYS_SPD_BUS_NUM 1
#define SPD_EEPROM_ADDRESS 0x52
diff --git a/include/configs/P1023RDS.h b/include/configs/P1023RDS.h
index e057b1f945..e632d1bd37 100644
--- a/include/configs/P1023RDS.h
+++ b/include/configs/P1023RDS.h
@@ -310,9 +310,6 @@ extern unsigned long get_clock_freq(void);
#define CONFIG_OF_BOARD_SETUP
#define CONFIG_OF_STDOUT_VIA_ALIAS
-#define CONFIG_SYS_64BIT_VSPRINTF
-#define CONFIG_SYS_64BIT_STRTOUL
-
/* new uImage format support */
#define CONFIG_FIT
#define CONFIG_FIT_VERBOSE /* enable fit_format_{error,warning}() */
diff --git a/include/configs/P2020COME.h b/include/configs/P2020COME.h
index 365322c6a5..28122ecc11 100644
--- a/include/configs/P2020COME.h
+++ b/include/configs/P2020COME.h
@@ -416,8 +416,6 @@ extern unsigned long get_board_sys_clk(unsigned long dummy);
#endif
/* Misc Extra Settings */
-#define CONFIG_SYS_64BIT_VSPRINTF 1
-#define CONFIG_SYS_64BIT_STRTOUL 1
#define CONFIG_CMD_DHCP 1
#define CONFIG_CMD_DATE 1
diff --git a/include/configs/P2041RDB.h b/include/configs/P2041RDB.h
index da98f8f027..fe39d4e6e6 100644
--- a/include/configs/P2041RDB.h
+++ b/include/configs/P2041RDB.h
@@ -96,6 +96,11 @@
#define CONFIG_SYS_MMC_ENV_DEV 0
#define CONFIG_ENV_SIZE 0x2000
#define CONFIG_ENV_OFFSET (512 * 1097)
+#elif defined(CONFIG_NAND)
+#define CONFIG_SYS_EXTRA_ENV_RELOC
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_SIZE CONFIG_SYS_NAND_BLOCK_SIZE
+#define CONFIG_ENV_OFFSET (5 * CONFIG_SYS_NAND_BLOCK_SIZE)
#else
#define CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE \
@@ -186,10 +191,11 @@ unsigned long get_board_sys_clk(unsigned long dummy);
#define CONFIG_SYS_FLASH_BASE_PHYS CONFIG_SYS_FLASH_BASE
#endif
-#define CONFIG_SYS_BR0_PRELIM \
+#define CONFIG_SYS_FLASH_BR_PRELIM \
(BR_PHYS_ADDR(CONFIG_SYS_FLASH_BASE_PHYS) | BR_PS_16 | BR_V)
-#define CONFIG_SYS_OR0_PRELIM ((0xf8000ff7 & ~OR_GPCM_SCY & ~OR_GPCM_EHTR) \
- | OR_GPCM_SCY_8 | OR_GPCM_EHTR_CLEAR)
+#define CONFIG_SYS_FLASH_OR_PRELIM \
+ ((0xf8000ff7 & ~OR_GPCM_SCY & ~OR_GPCM_EHTR) \
+ | OR_GPCM_SCY_8 | OR_GPCM_EHTR_CLEAR)
#define CONFIG_FSL_CPLD
#define CPLD_BASE 0xffdf0000 /* CPLD registers */
@@ -221,6 +227,53 @@ unsigned long get_board_sys_clk(unsigned long dummy);
#define CONFIG_SYS_RAMBOOT
#endif
+#define CONFIG_NAND_FSL_ELBC
+/* Nand Flash */
+#ifdef CONFIG_NAND_FSL_ELBC
+#define CONFIG_SYS_NAND_BASE 0xffa00000
+#ifdef CONFIG_PHYS_64BIT
+#define CONFIG_SYS_NAND_BASE_PHYS 0xfffa00000ull
+#else
+#define CONFIG_SYS_NAND_BASE_PHYS CONFIG_SYS_NAND_BASE
+#endif
+
+#define CONFIG_SYS_NAND_BASE_LIST {CONFIG_SYS_NAND_BASE}
+#define CONFIG_SYS_MAX_NAND_DEVICE 1
+#define CONFIG_MTD_NAND_VERIFY_WRITE
+#define CONFIG_CMD_NAND
+#define CONFIG_SYS_NAND_BLOCK_SIZE (128 * 1024)
+
+/* NAND flash config */
+#define CONFIG_SYS_NAND_BR_PRELIM (BR_PHYS_ADDR(CONFIG_SYS_NAND_BASE_PHYS) \
+ | (2<<BR_DECC_SHIFT) /* Use HW ECC */ \
+ | BR_PS_8 /* Port Size = 8 bit */ \
+ | BR_MS_FCM /* MSEL = FCM */ \
+ | BR_V) /* valid */
+#define CONFIG_SYS_NAND_OR_PRELIM (0xFFFC0000 /* length 256K */ \
+ | OR_FCM_PGS /* Large Page*/ \
+ | OR_FCM_CSCT \
+ | OR_FCM_CST \
+ | OR_FCM_CHT \
+ | OR_FCM_SCY_1 \
+ | OR_FCM_TRLX \
+ | OR_FCM_EHTR)
+
+#ifdef CONFIG_NAND
+#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_NAND_BR_PRELIM /* NAND Base Address */
+#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_NAND_OR_PRELIM /* NAND Options */
+#define CONFIG_SYS_BR1_PRELIM CONFIG_SYS_FLASH_BR_PRELIM /* NOR Base Address */
+#define CONFIG_SYS_OR1_PRELIM CONFIG_SYS_FLASH_OR_PRELIM /* NOR Options */
+#else
+#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_FLASH_BR_PRELIM /* NOR Base Address */
+#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_FLASH_OR_PRELIM /* NOR Options */
+#define CONFIG_SYS_BR1_PRELIM CONFIG_SYS_NAND_BR_PRELIM /* NAND Base Address */
+#define CONFIG_SYS_OR1_PRELIM CONFIG_SYS_NAND_OR_PRELIM /* NAND Options */
+#endif
+#else
+#define CONFIG_SYS_BR0_PRELIM CONFIG_SYS_FLASH_BR_PRELIM /* NOR Base Address */
+#define CONFIG_SYS_OR0_PRELIM CONFIG_SYS_FLASH_OR_PRELIM /* NOR Options */
+#endif /* CONFIG_NAND_FSL_ELBC */
+
#define CONFIG_SYS_FLASH_EMPTY_INFO
#define CONFIG_SYS_FLASH_AMD_CHECK_DQ7
#define CONFIG_SYS_FLASH_BANKS_LIST {CONFIG_SYS_FLASH_BASE_PHYS}
diff --git a/include/configs/adp-ag102.h b/include/configs/adp-ag102.h
new file mode 100644
index 0000000000..a4628e4343
--- /dev/null
+++ b/include/configs/adp-ag102.h
@@ -0,0 +1,375 @@
+/*
+ * Copyright (C) 2011 Andes Technology Corporation
+ * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <asm/arch/ag102.h>
+
+/*
+ * CPU and Board Configuration Options
+ */
+#define CONFIG_ADP_AG102
+
+#define CONFIG_USE_INTERRUPT
+
+#define CONFIG_SKIP_LOWLEVEL_INIT
+
+#ifndef CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_MEM_REMAP
+#endif
+
+#ifdef CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_SYS_TEXT_BASE 0x04200000
+#else
+#define CONFIG_SYS_TEXT_BASE 0x00000000
+#endif
+
+/*
+ * Timer
+ */
+
+/*
+ * According to the discussion in u-boot mailing list before,
+ * CONFIG_SYS_HZ at 1000 is mandatory.
+ */
+#define CONFIG_SYS_HZ 1000
+#define CONFIG_SYS_CLK_FREQ (66000000 * 2)
+#define VERSION_CLOCK CONFIG_SYS_CLK_FREQ
+
+/*
+ * Use Externel CLOCK or PCLK
+ */
+#undef CONFIG_FTRTC010_EXTCLK
+
+#ifndef CONFIG_FTRTC010_EXTCLK
+#define CONFIG_FTRTC010_PCLK
+#endif
+
+#ifdef CONFIG_FTRTC010_EXTCLK
+#define TIMER_CLOCK 32768 /* CONFIG_FTRTC010_EXTCLK */
+#else
+#define TIMER_CLOCK CONFIG_SYS_HZ /* CONFIG_FTRTC010_PCLK */
+#endif
+
+#define TIMER_LOAD_VAL 0xffffffff
+
+/*
+ * Real Time Clock
+ */
+#define CONFIG_RTC_FTRTC010
+
+/*
+ * Real Time Clock Divider
+ * RTC_DIV_COUNT (OSC_CLK/OSC_5MHZ)
+ */
+#define OSC_5MHZ (5*1000000)
+#define OSC_CLK (2*OSC_5MHZ)
+#define RTC_DIV_COUNT (OSC_CLK/OSC_5MHZ)
+
+/*
+ * Serial console configuration
+ */
+
+/* FTUART is a high speed NS 16C550A compatible UART */
+#define CONFIG_BAUDRATE 38400
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_SYS_NS16550
+#define CONFIG_SYS_NS16550_SERIAL
+#define CONFIG_SYS_NS16550_COM1 CONFIG_FTUART010_01_BASE
+#define CONFIG_SYS_NS16550_REG_SIZE -4
+#define CONFIG_SYS_NS16550_CLK 33000000 /* AG102 */
+
+/* valid baudrates */
+#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
+
+/*
+ * Ethernet
+ */
+#define CONFIG_NET_MULTI
+#define CONFIG_PHY_MAX_ADDR 32 /* this comes from <linux/phy.h> */
+#define CONFIG_SYS_DISCOVER_PHY
+#define CONFIG_FTGMAC100
+#define CONFIG_FTGMAC100_EGIGA
+
+#define CONFIG_BOOTDELAY 3
+
+/*
+ * SD (MMC) controller
+ */
+#define CONFIG_MMC
+#define CONFIG_CMD_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_DOS_PARTITION
+#define CONFIG_FTSDC010
+#define CONFIG_FTSDC010_NUMBER 1
+#define CONFIG_FTSDC010_SDIO
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_EXT2
+
+/*
+ * Command line configuration.
+ */
+#include <config_cmd_default.h>
+
+#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_DATE
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_IDE
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_ELF
+
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+
+/*
+ * PCI
+ */
+#define CONFIG_PCI
+#define CONFIG_FTPCI100
+#define CONFIG_FTPCI100_MEM_BASE 0xa0000000
+#define CONFIG_FTPCI100_IO_SIZE FTPCI100_BASE_IO_SIZE(256) /* 256M */
+#define CONFIG_FTPCI100_MEM_SIZE FTPCI100_MEM_SIZE(128) /* 128M */
+#define CONFIG_FTPCI100_MEM_BASE_SIZE1 0x50
+
+#define CONFIG_PCI_MEM_BUS 0xa0000000
+#define CONFIG_PCI_MEM_PHYS CONFIG_PCI_MEM_BUS
+#define CONFIG_PCI_MEM_SIZE 0x01000000 /* 256M */
+
+#define CONFIG_PCI_IO_BUS 0x90000000
+#define CONFIG_PCI_IO_PHYS CONFIG_PCI_IO_BUS
+#define CONFIG_PCI_IO_SIZE 0x00100000 /* 1M */
+
+/*
+ * USB
+ */
+#if defined(CONFIG_CMD_PCI) || defined(CONFIG_PCI)
+#if defined(CONFIG_FTPCI100)
+#define __io /* enable outl & inl */
+#define CONFIG_CMD_USB
+#define CONFIG_SYS_USB_EHCI_MAX_ROOT_PORTS 5
+#define CONFIG_USB_STORAGE
+#define CONFIG_USB_EHCI
+#define CONFIG_PCI_EHCI_DEVICE 0
+#define CONFIG_USB_EHCI_PCI
+#define CONFIG_PREBOOT "usb start;"
+#endif /* #if defiend(CONFIG_FTPCI100) */
+#endif /* #if defined(CONFIG_CMD_PCI) || defined(CONFIG_PCI) */
+
+/*
+ * IDE/ATA stuff
+ */
+#define __io
+#define CONFIG_IDE_AHB
+#define CONFIG_IDE_FTIDE020
+
+#undef CONFIG_IDE_8xx_DIRECT /* no pcmcia interface required */
+#undef CONFIG_IDE_LED /* no led for ide supported */
+#define CONFIG_IDE_RESET 1 /* reset for ide supported */
+#define CONFIG_IDE_PREINIT 1 /* preinit for ide */
+
+/* max: 2 IDE busses */
+#define CONFIG_SYS_IDE_MAXBUS 1 /* origin: 2 */
+/* max: 2 drives per IDE bus */
+#define CONFIG_SYS_IDE_MAXDEVICE 1 /* origin: (MAXBUS * 2) */
+
+#define CONFIG_SYS_ATA_BASE_ADDR CONFIG_FTIDE020S_BASE
+#define CONFIG_SYS_ATA_IDE0_OFFSET 0x0000
+#define CONFIG_SYS_ATA_IDE1_OFFSET 0x0000
+
+#define CONFIG_SYS_ATA_DATA_OFFSET 0x0000 /* for data I/O */
+#define CONFIG_SYS_ATA_REG_OFFSET 0x0000 /* for normal regs access */
+#define CONFIG_SYS_ATA_ALT_OFFSET 0x0000 /* for alternate regs */
+
+#define CONFIG_MAC_PARTITION
+#define CONFIG_DOS_PARTITION
+#define CONFIG_SUPPORT_VFAT
+
+/*
+ * Miscellaneous configurable options
+ */
+#define CONFIG_SYS_LONGHELP /* undef to save memory */
+#define CONFIG_SYS_PROMPT "NDS32 # " /* Monitor Command Prompt */
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE \
+ (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+
+/* max number of command args */
+#define CONFIG_SYS_MAXARGS 16
+
+/* Boot Argument Buffer Size */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
+
+/*
+ * Stack sizes
+ *
+ * The stack sizes are set up in start.S using the settings below
+ */
+#define CONFIG_STACKSIZE (128 * 1024) /* regular stack */
+
+/*
+ * Size of malloc() pool
+ */
+#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 128 * 1024)
+
+/*
+ * size in bytes reserved for initial data
+*/
+#define CONFIG_SYS_GBL_DATA_SIZE 128
+
+/*
+ * AHB Controller configuration
+ */
+#define CONFIG_FTAHBC020S
+
+#ifdef CONFIG_FTAHBC020S
+#include <faraday/ftahbc020s.h>
+
+/* Address of PHYS_SDRAM_0 before memory remap is at 0x(100)00000 */
+#define CONFIG_SYS_FTAHBC020S_SLAVE_BSR_BASE 0x100
+
+/*
+ * CONFIG_SYS_FTAHBC020S_SLAVE_BSR_6: this define is used in lowlevel_init.S,
+ * hence we cannot use FTAHBC020S_BSR_SIZE(2048) since it will use ffs() wrote
+ * in C language.
+ */
+#define CONFIG_SYS_FTAHBC020S_SLAVE_BSR_6 \
+ (FTAHBC020S_SLAVE_BSR_BASE(CONFIG_SYS_FTAHBC020S_SLAVE_BSR_BASE) | \
+ FTAHBC020S_SLAVE_BSR_SIZE(0xb))
+#endif
+
+/*
+ * Watchdog
+ */
+#define CONFIG_FTWDT010_WATCHDOG
+
+/*
+ * PCU Power Control Unit configuration
+ */
+#define CONFIG_ANDES_PCU
+
+#ifdef CONFIG_ANDES_PCU
+#include <andestech/andes_pcu.h>
+
+#endif
+
+/*
+ * DDR DRAM controller configuration
+ */
+#define CONFIG_DWCDDR21MCTL
+
+#ifdef CONFIG_DWCDDR21MCTL
+#include <synopsys/dwcddr21mctl.h>
+/* DCR:
+ * 2GB: 0x000025d2, 2GB (1Gb x8 2 ranks) Micron/innoDisk/Transcend
+ * 1GB: 0x000021d2, 1GB (1Gb x8 1 rank) Micron/Transcend/innoDisk
+ * 512MB: 0x000025cc, Micron 512MB (512Mb x16 2 ranks)
+ * 512MB: 0x000021ca, Trenscend/innoDisk 512MB (512Mb x8 1 rank)
+ * 256MB: 0x000020d4, Micron 256MB (1Gb x16 1 ranks)
+ */
+#define CONFIG_SYS_DWCDDR21MCTL_CCR 0x00020004
+#define CONFIG_SYS_DWCDDR21MCTL_CCR2 (DWCDDR21MCTL_CCR_DTT(0x1) | \
+ DWCDDR21MCTL_CCR_DFTLM(0x4) | \
+ DWCDDR21MCTL_CCR_HOSTEN(0x1))
+
+/* 0x04: 0x000020d4 */
+#define CONFIG_SYS_DWCDDR21MCTL_DCR 0x000020ca
+
+/* 0x08: 0x0000000f */
+#define CONFIG_SYS_DWCDDR21MCTL_IOCR 0x0000000f
+
+/* 0x10: 0x00034812 */
+#define CONFIG_SYS_DWCDDR21MCTL_DRR (DWCDDR21MCTL_DRR_TRFC(0x12) | \
+ DWCDDR21MCTL_DRR_TRFPRD(0x0348))
+/* 0x24 */
+#define CONFIG_SYS_DWCDDR21MCTL_DLLCR0 DWCDDR21MCTL_DLLCR_PHASE(0x0)
+
+/* 0x4c: 0x00000040 */
+#define CONFIG_SYS_DWCDDR21MCTL_RSLR0 0x00000040
+
+/* 0x5c: 0x000055CF */
+#define CONFIG_SYS_DWCDDR21MCTL_RDGR0 0x000055cf
+
+/* 0xa4: 0x00100000 */
+#define CONFIG_SYS_DWCDDR21MCTL_DTAR (DWCDDR21MCTL_DTAR_DTBANK(0x0) | \
+ DWCDDR21MCTL_DTAR_DTROW(0x0100) | \
+ DWCDDR21MCTL_DTAR_DTCOL(0x0))
+/* 0x1f0: 0x00000852 */
+#define CONFIG_SYS_DWCDDR21MCTL_MR (DWCDDR21MCTL_MR_WR(0x4) | \
+ DWCDDR21MCTL_MR_CL(0x5) | \
+ DWCDDR21MCTL_MR_BL(0x2))
+#endif
+
+/*
+ * Physical Memory Map
+ */
+#if defined(CONFIG_MEM_REMAP) || defined(CONFIG_SKIP_LOWLEVEL_INIT)
+#define PHYS_SDRAM_0 0x00000000 /* SDRAM Bank #1 */
+#if defined(CONFIG_MEM_REMAP)
+#define PHYS_SDRAM_0_AT_INIT 0x80000000 /* SDRAM Bank #1 before remap*/
+#endif
+#else /* !CONFIG_SKIP_LOWLEVEL_INIT && !CONFIG_MEM_REMAP */
+#define PHYS_SDRAM_0 0x80000000 /* SDRAM Bank #1 */
+#endif
+
+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
+#define PHYS_SDRAM_0_SIZE 0x10000000 /* 256 MB */
+
+#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_0
+
+#ifdef CONFIG_MEM_REMAP
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0xA0000 - \
+ GENERATED_GBL_DATA_SIZE)
+#else
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - \
+ GENERATED_GBL_DATA_SIZE)
+#endif /* CONFIG_MEM_REMAP */
+
+/*
+ * Load address and memory test area should agree with
+ * board/faraday/a320/config.mk
+ * Be careful not to overwrite U-boot itself.
+ */
+#define CONFIG_SYS_LOAD_ADDR 0x0CF00000
+
+/* memtest works on 63 MB in DRAM */
+#define CONFIG_SYS_MEMTEST_START PHYS_SDRAM_0
+#define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM_0 + 0x03F00000)
+
+/*
+ * Static memory controller configuration
+ */
+
+/*
+ * FLASH and environment organization
+ */
+#define CONFIG_SYS_NO_FLASH
+
+/*
+ * Env Storage Settings
+ */
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_SIZE 4096
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/am3517_crane.h b/include/configs/am3517_crane.h
index b0dd2f0af6..827a6159f2 100644
--- a/include/configs/am3517_crane.h
+++ b/include/configs/am3517_crane.h
@@ -146,7 +146,7 @@
#define CONFIG_CMD_MMC /* MMC support */
#define CONFIG_CMD_NAND /* NAND support */
#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_PING
+#undef CONFIG_CMD_PING
#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */
#undef CONFIG_CMD_FPGA /* FPGA configuration Support */
@@ -174,7 +174,6 @@
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of */
/* NAND devices */
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#define CONFIG_JFFS2_NAND
/* nand device jffs2 lives on */
@@ -326,7 +325,7 @@
#define CONFIG_SPL
#define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800
-#define CONFIG_SPL_MAX_SIZE (45 * 1024)
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SPL_BSS_START_ADDR 0x80000000
diff --git a/include/configs/am3517_evm.h b/include/configs/am3517_evm.h
index b5f75d1e8d..6766ee23d3 100644
--- a/include/configs/am3517_evm.h
+++ b/include/configs/am3517_evm.h
@@ -145,7 +145,7 @@
#define CONFIG_CMD_MMC /* MMC support */
#define CONFIG_CMD_NAND /* NAND support */
#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_PING
+#undef CONFIG_CMD_PING
#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */
#undef CONFIG_CMD_FPGA /* FPGA configuration Support */
@@ -173,8 +173,6 @@
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of */
/* NAND devices */
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
-
#define CONFIG_JFFS2_NAND
/* nand device jffs2 lives on */
#define CONFIG_JFFS2_DEV "nand0"
@@ -326,7 +324,7 @@
#define CONFIG_SPL
#define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800
-#define CONFIG_SPL_MAX_SIZE (45 * 1024)
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SPL_BSS_START_ADDR 0x80000000
diff --git a/include/configs/at91sam9263ek.h b/include/configs/at91sam9263ek.h
index 83992461f9..f424e5a5bd 100644
--- a/include/configs/at91sam9263ek.h
+++ b/include/configs/at91sam9263ek.h
@@ -283,8 +283,6 @@
#define CONFIG_SYS_NAND_MASK_CLE (1 << 22)
#define CONFIG_SYS_NAND_ENABLE_PIN AT91_PIN_PD15
#define CONFIG_SYS_NAND_READY_PIN AT91_PIN_PA22
-
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#endif
/* Ethernet */
diff --git a/include/configs/at91sam9m10g45ek.h b/include/configs/at91sam9m10g45ek.h
index 6a02188108..159857d32f 100644
--- a/include/configs/at91sam9m10g45ek.h
+++ b/include/configs/at91sam9m10g45ek.h
@@ -107,7 +107,6 @@
#undef CONFIG_CMD_FPGA
#undef CONFIG_CMD_IMI
#undef CONFIG_CMD_IMLS
-#undef CONFIG_CMD_AUTOSCRIPT
#undef CONFIG_CMD_LOADS
#define CONFIG_CMD_PING
diff --git a/include/configs/cam_enc_4xx.h b/include/configs/cam_enc_4xx.h
index 99856ebfdf..71faf1cc9f 100644
--- a/include/configs/cam_enc_4xx.h
+++ b/include/configs/cam_enc_4xx.h
@@ -37,7 +37,7 @@
#define CONFIG_HOSTNAME cam_enc_4xx
-#define BOARD_LATE_INIT
+#define CONFIG_BOARD_LATE_INIT
#define CONFIG_CAM_ENC_LED_MASK 0x0fc00000
/* Memory Info */
diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
index fe91c10409..b28bd8e313 100644
--- a/include/configs/cm_t35.h
+++ b/include/configs/cm_t35.h
@@ -156,6 +156,7 @@
#define CONFIG_DRIVER_OMAP34XX_I2C
#define CONFIG_SYS_I2C_EEPROM_ADDR 0x50
#define CONFIG_SYS_I2C_EEPROM_ADDR_LEN 1
+#define CONFIG_I2C_MULTI_BUS
/*
* TWL4030
diff --git a/include/configs/corenet_ds.h b/include/configs/corenet_ds.h
index 77dd0a2d1e..8ed37a58c2 100644
--- a/include/configs/corenet_ds.h
+++ b/include/configs/corenet_ds.h
@@ -33,6 +33,15 @@
#define CONFIG_RESET_VECTOR_ADDRESS 0xfffffffc
#endif
+#ifdef CONFIG_SRIOBOOT_SLAVE
+/* Set 1M boot space */
+#define CONFIG_SYS_SRIOBOOT_SLAVE_ADDR (CONFIG_SYS_TEXT_BASE & 0xfff00000)
+#define CONFIG_SYS_SRIOBOOT_SLAVE_ADDR_PHYS \
+ (0x300000000ull | CONFIG_SYS_SRIOBOOT_SLAVE_ADDR)
+#define CONFIG_RESET_VECTOR_ADDRESS 0xfffffffc
+#define CONFIG_SYS_NO_FLASH
+#endif
+
/* High Level Configuration Options */
#define CONFIG_BOOKE
#define CONFIG_E500 /* BOOKE e500 family */
@@ -68,7 +77,9 @@
#define CONFIG_ENV_OVERWRITE
#ifdef CONFIG_SYS_NO_FLASH
+#ifndef CONFIG_SRIOBOOT_SLAVE
#define CONFIG_ENV_IS_NOWHERE
+#endif
#else
#define CONFIG_FLASH_CFI_DRIVER
#define CONFIG_SYS_FLASH_CFI
@@ -97,6 +108,12 @@
#define CONFIG_ENV_IS_IN_NAND
#define CONFIG_ENV_SIZE CONFIG_SYS_NAND_BLOCK_SIZE
#define CONFIG_ENV_OFFSET (5 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#elif defined(CONFIG_SRIOBOOT_SLAVE)
+#define CONFIG_ENV_IS_IN_REMOTE
+#define CONFIG_ENV_ADDR 0xffe20000
+#define CONFIG_ENV_SIZE 0x2000
+#elif defined(CONFIG_ENV_IS_NOWHERE)
+#define CONFIG_ENV_SIZE 0x2000
#else
#define CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE - CONFIG_ENV_SECT_SIZE)
@@ -373,6 +390,54 @@
#define CONFIG_SYS_SRIO2_MEM_SIZE 0x10000000 /* 256M */
/*
+ * SRIOBOOT - MASTER
+ */
+#ifdef CONFIG_SRIOBOOT_MASTER
+/* master port for srioboot*/
+#define CONFIG_SRIOBOOT_MASTER_PORT 0
+/* #define CONFIG_SRIOBOOT_MASTER_PORT 1 */
+/*
+ * for slave u-boot IMAGE instored in master memory space,
+ * PHYS must be aligned based on the SIZE
+ */
+#define CONFIG_SRIOBOOT_SLAVE_IMAGE_LAW_PHYS1 0xfef080000ull
+#define CONFIG_SRIOBOOT_SLAVE_IMAGE_SRIO_PHYS1 0xfff80000ull
+#define CONFIG_SRIOBOOT_SLAVE_IMAGE_SIZE 0x80000 /* 512K */
+#define CONFIG_SRIOBOOT_SLAVE_IMAGE_LAW_PHYS2 0xfef080000ull
+#define CONFIG_SRIOBOOT_SLAVE_IMAGE_SRIO_PHYS2 0x3fff80000ull
+/*
+ * for slave UCODE instored in master memory space,
+ * PHYS must be aligned based on the SIZE
+ */
+#define CONFIG_SRIOBOOT_SLAVE_UCODE_LAW_PHYS 0xfef020000ull
+#define CONFIG_SRIOBOOT_SLAVE_UCODE_SRIO_PHYS 0x3ffe00000ull
+#define CONFIG_SRIOBOOT_SLAVE_UCODE_SIZE 0x10000 /* 64K */
+/*
+ * for slave ENV instored in master memory space,
+ * PHYS must be aligned based on the SIZE
+ */
+#define CONFIG_SRIOBOOT_SLAVE_ENV_LAW_PHYS 0xfef060000ull
+#define CONFIG_SRIOBOOT_SLAVE_ENV_SRIO_PHYS 0x3ffe20000ull
+#define CONFIG_SRIOBOOT_SLAVE_ENV_SIZE 0x20000 /* 128K */
+/* slave core release by master*/
+#define CONFIG_SRIOBOOT_SLAVE_HOLDOFF
+#define CONFIG_SRIOBOOT_SLAVE_BRR_OFFSET 0xe00e4
+#define CONFIG_SRIOBOOT_SLAVE_RELEASE_MASK 0x00000001 /* release core 0 */
+#endif
+
+/*
+ * SRIOBOOT - SLAVE
+ */
+#ifdef CONFIG_SRIOBOOT_SLAVE
+/* slave port for srioboot */
+#define CONFIG_SRIOBOOT_SLAVE_PORT0
+/* #define CONFIG_SRIOBOOT_SLAVE_PORT1 */
+#define CONFIG_SYS_SRIOBOOT_UCODE_ENV_ADDR 0xFFE00000
+#define CONFIG_SYS_SRIOBOOT_UCODE_ENV_ADDR_PHYS \
+ (0x300000000ull | CONFIG_SYS_SRIOBOOT_UCODE_ENV_ADDR)
+#endif
+
+/*
* eSPI - Enhanced SPI
*/
#define CONFIG_FSL_ESPI
@@ -492,6 +557,16 @@
#elif defined(CONFIG_NAND)
#define CONFIG_SYS_QE_FMAN_FW_IN_NAND
#define CONFIG_SYS_QE_FMAN_FW_ADDR (6 * CONFIG_SYS_NAND_BLOCK_SIZE)
+#elif defined(CONFIG_SRIOBOOT_SLAVE)
+/*
+ * Slave has no ucode locally, it can fetch this from remote. When implementing
+ * in two corenet boards, slave's ucode could be stored in master's memory
+ * space, the address can be mapped from slave TLB->slave LAW->
+ * slave SRIO outbound window->master inbound window->master LAW->
+ * the ucode address in master's NOR flash.
+ */
+#define CONFIG_SYS_QE_FMAN_FW_IN_REMOTE
+#define CONFIG_SYS_QE_FMAN_FW_ADDR 0xFFE00000
#else
#define CONFIG_SYS_QE_FMAN_FW_IN_NOR
#define CONFIG_SYS_QE_FMAN_FW_ADDR 0xEF000000
diff --git a/include/configs/da830evm.h b/include/configs/da830evm.h
index 4532e4f4fd..781878ef39 100644
--- a/include/configs/da830evm.h
+++ b/include/configs/da830evm.h
@@ -111,7 +111,6 @@
#define CONFIG_SYS_NAND_CS 3
#define CONFIG_SYS_NAND_BASE DAVINCI_ASYNC_EMIF_DATA_CE3_BASE
#define CONFIG_SYS_NAND_PAGE_2K
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#define CONFIG_SYS_CLE_MASK 0x10
#define CONFIG_SYS_ALE_MASK 0x8
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of NAND devices */
diff --git a/include/configs/debris.h b/include/configs/debris.h
index 60c7c4058f..303630d7d7 100644
--- a/include/configs/debris.h
+++ b/include/configs/debris.h
@@ -148,7 +148,7 @@
#define CONFIG_CMD_ELF
#define CONFIG_CMD_I2C
#define CONFIG_CMD_JFFS2
-#define CONFIG_CMD_KGBD
+#define CONFIG_CMD_KGDB
#define CONFIG_CMD_PCI
#define CONFIG_CMD_PING
#define CONFIG_CMD_SAVES
diff --git a/include/configs/devkit3250.h b/include/configs/devkit3250.h
new file mode 100644
index 0000000000..9f15ffb0fd
--- /dev/null
+++ b/include/configs/devkit3250.h
@@ -0,0 +1,117 @@
+/*
+ * Embest/Timll DevKit3250 board configuration file
+ *
+ * Copyright (C) 2011 Vladimir Zapolskiy <vz@mleia.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
+ * MA 02110-1301, USA.
+ */
+
+#ifndef __CONFIG_DEVKIT3250_H__
+#define __CONFIG_DEVKIT3250_H__
+
+/* SoC and board defines */
+#include <asm/sizes.h>
+#include <asm/arch/cpu.h>
+
+/*
+ * Define DevKit3250 machine type by hand until it lands in mach-types
+ */
+#define MACH_TYPE_DEVKIT3250 3697
+#define CONFIG_MACH_TYPE MACH_TYPE_DEVKIT3250
+
+#define CONFIG_SYS_ICACHE_OFF
+#define CONFIG_SYS_DCACHE_OFF
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_BOARD_EARLY_INIT_F
+
+/*
+ * Memory configurations
+ */
+#define CONFIG_NR_DRAM_BANKS 1
+#define CONFIG_STACKSIZE SZ_32K
+#define CONFIG_SYS_MALLOC_LEN SZ_1M
+#define CONFIG_SYS_GBL_DATA_SIZE 128
+#define CONFIG_SYS_SDRAM_BASE EMC_DYCS0_BASE
+#define CONFIG_SYS_SDRAM_SIZE SZ_64M
+#define CONFIG_SYS_TEXT_BASE 0x83FA0000
+#define CONFIG_SYS_MEMTEST_START (CONFIG_SYS_SDRAM_BASE + SZ_32K)
+#define CONFIG_SYS_MEMTEST_END (CONFIG_SYS_TEXT_BASE - SZ_1M)
+
+#define CONFIG_SYS_LOAD_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_32K)
+
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + SZ_4K \
+ - GENERATED_GBL_DATA_SIZE)
+
+/*
+ * Serial Driver
+ */
+#define CONFIG_SYS_LPC32XX_UART 2 /* UART2 */
+#define CONFIG_BAUDRATE 115200
+
+/*
+ * NOR Flash
+ */
+#define CONFIG_CMD_FLASH
+#define CONFIG_SYS_MAX_FLASH_BANKS 1
+#define CONFIG_SYS_MAX_FLASH_SECT 71
+#define CONFIG_SYS_FLASH_BASE EMC_CS0_BASE
+#define CONFIG_SYS_FLASH_SIZE SZ_4M
+#define CONFIG_SYS_FLASH_CFI
+
+/*
+ * U-Boot General Configurations
+ */
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_SYS_PROMPT "=> "
+#define CONFIG_SYS_CBSIZE 1024
+#define CONFIG_SYS_PBSIZE \
+ (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS 16
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
+
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_VERSION_VARIABLE
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DOS_PARTITION
+
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_ENV_SIZE SZ_128K
+
+/*
+ * U-Boot Commands
+ */
+#include <config_cmd_default.h>
+#define CONFIG_CMD_CACHE
+
+/*
+ * Boot Linux
+ */
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_ZERO_BOOTDELAY_CHECK
+#define CONFIG_BOOTDELAY 3
+
+#define CONFIG_BOOTFILE "uImage"
+#define CONFIG_BOOTARGS "console=ttyS2,115200n8"
+#define CONFIG_LOADADDR 0x80008000
+
+/*
+ * Include SoC specific configuration
+ */
+#include <asm/arch/config.h>
+
+#endif /* __CONFIG_DEVKIT3250_H__*/
diff --git a/include/configs/devkit8000.h b/include/configs/devkit8000.h
index eb7c376780..248a5b2fa3 100644
--- a/include/configs/devkit8000.h
+++ b/include/configs/devkit8000.h
@@ -324,7 +324,7 @@
#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300 /* address 0x60000 */
#define CONFIG_SPL_TEXT_BASE 0x40200000 /*CONFIG_SYS_SRAM_START*/
-#define CONFIG_SPL_MAX_SIZE 0xB400 /* 45 K */
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SPL_BSS_START_ADDR 0x80000500 /* leave space for bootargs*/
diff --git a/include/configs/digsy_mtc.h b/include/configs/digsy_mtc.h
index d5173349c4..1f660235f0 100644
--- a/include/configs/digsy_mtc.h
+++ b/include/configs/digsy_mtc.h
@@ -119,7 +119,6 @@
#ifdef CONFIG_VIDEO
#define CONFIG_CMD_BMP
#endif
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_DATE
#define CONFIG_CMD_DHCP
diff --git a/include/configs/dlvision-10g.h b/include/configs/dlvision-10g.h
index 146819712d..2cd20279be 100644
--- a/include/configs/dlvision-10g.h
+++ b/include/configs/dlvision-10g.h
@@ -34,10 +34,12 @@
* Include common defines/options for all AMCC eval boards
*/
#define CONFIG_HOSTNAME dlvsion-10g
-#define CONFIG_IDENT_STRING " dlvision-10g 0.02"
+#define CONFIG_IDENT_STRING " dlvision-10g 0.03"
#include "amcc-common.h"
-#define CONFIG_BOARD_EARLY_INIT_F /* call board_early_init_f */
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_BOARD_EARLY_INIT_R
+#define CONFIG_MISC_INIT_R
#define CONFIG_LAST_STAGE_INIT
#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
@@ -80,6 +82,7 @@
* Commands additional to the ones defined in amcc-common.h
*/
#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_DTT
#undef CONFIG_CMD_EEPROM
/*
@@ -115,7 +118,7 @@
/* Temp sensor/hwmon/dtt */
#define CONFIG_DTT_LM63 1 /* National LM63 */
-#define CONFIG_DTT_SENSORS { 0x4c, 0x4e } /* Sensor addresses */
+#define CONFIG_DTT_SENSORS { 0x4c, 0x4e, 0x18 } /* Sensor addresses */
#define CONFIG_DTT_PWM_LOOKUPTABLE \
{ { 46, 10 }, { 48, 14 }, { 50, 19 }, { 52, 23 },\
{ 54, 27 }, { 56, 31 }, { 58, 36 }, { 60, 40 } }
diff --git a/include/configs/dreamplug.h b/include/configs/dreamplug.h
index 0f2f9a2743..76f9eeaed8 100644
--- a/include/configs/dreamplug.h
+++ b/include/configs/dreamplug.h
@@ -148,4 +148,6 @@
*/
#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_OF_LIBFDT
+
#endif /* _CONFIG_DREAMPLUG_H */
diff --git a/include/configs/ea20.h b/include/configs/ea20.h
index e059b30826..88b085d4a7 100644
--- a/include/configs/ea20.h
+++ b/include/configs/ea20.h
@@ -31,7 +31,7 @@
#define CONFIG_SYS_USE_NAND
#define CONFIG_DRIVER_TI_EMAC_USE_RMII
#define CONFIG_BOARD_EARLY_INIT_F
-#define BOARD_LATE_INIT
+#define CONFIG_BOARD_LATE_INIT
#define CONFIG_VIDEO
#define CONFIG_PREBOOT
@@ -203,7 +203,6 @@
#define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST
#define CONFIG_SYS_NAND_USE_FLASH_BBT
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of NAND devices */
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#endif
/* SPI Flash */
diff --git a/include/configs/eb_cpux9k2.h b/include/configs/eb_cpux9k2.h
index eb05e2a0b0..21c471adf6 100644
--- a/include/configs/eb_cpux9k2.h
+++ b/include/configs/eb_cpux9k2.h
@@ -288,8 +288,6 @@
#define CONFIG_SYS_NAND_BASE 0x40000000
#define CONFIG_SYS_NAND_DBW_8 1
-#define CONFIG_SYS_64BIT_VSPRINTF 1
-
/* Status LED's */
#define CONFIG_STATUS_LED 1
diff --git a/include/configs/ep8260.h b/include/configs/ep8260.h
index f19360d501..221d3e055d 100644
--- a/include/configs/ep8260.h
+++ b/include/configs/ep8260.h
@@ -325,7 +325,6 @@
#define CONFIG_CMD_SDRAM
#define CONFIG_CMD_SNTP
-#undef CONFIG_CMD_DCR
#undef CONFIG_CMD_XIMG
/* Where do the internal registers live? */
diff --git a/include/configs/flea3.h b/include/configs/flea3.h
index f046a587be..dd7c73f3c7 100644
--- a/include/configs/flea3.h
+++ b/include/configs/flea3.h
@@ -48,8 +48,6 @@
/* Set TEXT at the beginning of the NOR flash */
#define CONFIG_SYS_TEXT_BASE 0xA0000000
-#define CONFIG_SYS_64BIT_VSPRINTF
-
/* This is required to setup the ESDC controller */
#define CONFIG_BOARD_EARLY_INIT_F
diff --git a/include/configs/gdppc440etx.h b/include/configs/gdppc440etx.h
index 3c59ff4922..9efbb8e34c 100644
--- a/include/configs/gdppc440etx.h
+++ b/include/configs/gdppc440etx.h
@@ -50,6 +50,10 @@
#define CONFIG_BOARD_EARLY_INIT_F 1 /* call board_early_init_f*/
#define CONFIG_MISC_INIT_R 1 /* call misc_init_r() */
+#undef CONFIG_ZERO_BOOTDELAY_CHECK /* ignore keypress on bootdelay==0 */
+#define CONFIG_AUTOBOOT_KEYED /* use key strings to stop autoboot */
+#define CONFIG_AUTOBOOT_STOP_STR " "
+
/*
* Base addresses -- Note these are effective addresses where the
* actual resources get mapped (not physical addresses)
diff --git a/include/configs/gplugd.h b/include/configs/gplugd.h
index 462cc7e16c..efff3098a5 100644
--- a/include/configs/gplugd.h
+++ b/include/configs/gplugd.h
@@ -70,7 +70,6 @@
#define CONFIG_SYS_NO_FLASH /* Declare no flash (NOR/SPI) */
#include <config_cmd_default.h>
#define CONFIG_CMD_I2C
-#define CONFIG_CMD_AUTOSCRIPT
#undef CONFIG_CMD_FPGA
#define CONFIG_CMD_USB
#define CONFIG_CMD_EXT2
diff --git a/include/configs/hawkboard.h b/include/configs/hawkboard.h
index 0859371387..6d2d4fb91d 100644
--- a/include/configs/hawkboard.h
+++ b/include/configs/hawkboard.h
@@ -127,7 +127,6 @@
#define CFG_DAVINCI_STD_NAND_LAYOUT
#define CONFIG_SYS_NAND_CS 3
#define CONFIG_SYS_NAND_PAGE_2K
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
/* Max number of NAND devices */
#define CONFIG_SYS_MAX_NAND_DEVICE 1
#define CONFIG_SYS_NAND_BASE_LIST { 0x62000000, }
diff --git a/include/configs/ib62x0.h b/include/configs/ib62x0.h
new file mode 100644
index 0000000000..85856f290e
--- /dev/null
+++ b/include/configs/ib62x0.h
@@ -0,0 +1,152 @@
+/*
+ * Copyright (C) 2011-2012
+ * Gerald Kerma <dreagle@doukki.net>
+ * Luka Perkov <uboot@lukaperkov.net>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _CONFIG_IB62x0_H
+#define _CONFIG_IB62x0_H
+
+/*
+ * Version number information
+ */
+#define CONFIG_IDENT_STRING " RaidSonic ICY BOX IB-NAS62x0"
+
+/*
+ * High level configuration options
+ */
+#define CONFIG_FEROCEON_88FR131 /* CPU Core subversion */
+#define CONFIG_KIRKWOOD /* SOC Family Name */
+#define CONFIG_KW88F6281 /* SOC Name */
+#define CONFIG_SKIP_LOWLEVEL_INIT /* disable board lowlevel_init */
+
+/*
+ * Machine type
+ */
+#define CONFIG_MACH_TYPE MACH_TYPE_NAS6210
+
+/*
+ * Compression configuration
+ */
+#define CONFIG_BZIP2
+#define CONFIG_LZMA
+#define CONFIG_LZO
+
+/*
+ * Commands configuration
+ */
+#define CONFIG_SYS_NO_FLASH /* declare no flash (NOR/SPI) */
+#define CONFIG_SYS_MVFS
+#include <config_cmd_default.h>
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_IDE
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_USB
+
+/*
+ * mv-common.h should be defined after CMD configs since it used them
+ * to enable certain macros
+ */
+#include "mv-common.h"
+
+#undef CONFIG_SYS_PROMPT
+#define CONFIG_SYS_PROMPT "ib62x0 => "
+
+/*
+ * Environment variables configuration
+ */
+#ifdef CONFIG_CMD_NAND
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_SECT_SIZE 0x20000
+#else
+#define CONFIG_ENV_IS_NOWHERE
+#endif
+#define CONFIG_ENV_SIZE 0x20000
+#define CONFIG_ENV_OFFSET 0x80000
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_BOOTCOMMAND \
+ "setenv bootargs ${console} ${mtdparts} ${bootargs_root}; " \
+ "ubi part root; " \
+ "ubifsmount root; " \
+ "ubifsload 0x800000 ${kernel}; " \
+ "ubifsload 0x1100000 ${initrd}; " \
+ "bootm 0x800000 0x1100000"
+
+#define CONFIG_MTDPARTS \
+ "mtdparts=orion_nand:" \
+ "0x80000@0x0(uboot)," \
+ "0x20000@0x80000(uboot_env)," \
+ "-@0xa0000(root)\0"
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "console=console=ttyS0,115200\0" \
+ "mtdids=nand0=orion_nand\0" \
+ "mtdparts="CONFIG_MTDPARTS \
+ "kernel=/boot/uImage\0" \
+ "initrd=/boot/uInitrd\0" \
+ "bootargs_root=ubi.mtd=2 root=ubi0:root rootfstype=ubifs\0"
+
+/*
+ * Ethernet driver configuration
+ */
+#ifdef CONFIG_CMD_NET
+#define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */
+#define CONFIG_PHY_BASE_ADR 0
+#undef CONFIG_RESET_PHY_R
+#endif /* CONFIG_CMD_NET */
+
+/*
+ * SATA driver configuration
+ */
+#ifdef CONFIG_CMD_IDE
+#define __io
+#define CONFIG_IDE_PREINIT
+#define CONFIG_DOS_PARTITION
+#define CONFIG_MVSATA_IDE_USE_PORT0
+#define CONFIG_MVSATA_IDE_USE_PORT1
+#define CONFIG_SYS_ATA_IDE0_OFFSET MV_SATA_PORT0_OFFSET
+#define CONFIG_SYS_ATA_IDE1_OFFSET MV_SATA_PORT1_OFFSET
+#endif /* CONFIG_CMD_IDE */
+
+/*
+ * RTC driver configuration
+ */
+#ifdef CONFIG_CMD_DATE
+#define CONFIG_RTC_MV
+#endif /* CONFIG_CMD_DATE */
+
+/*
+ * File system
+ */
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#define CONFIG_RBTREE
+#define CONFIG_MTD_DEVICE
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_CMD_MTDPARTS
+
+#endif /* _CONFIG_IB62x0_H */
diff --git a/include/configs/igep0030.h b/include/configs/igep0030.h
deleted file mode 100644
index bf39ba56d7..0000000000
--- a/include/configs/igep0030.h
+++ /dev/null
@@ -1,261 +0,0 @@
-/*
- * (C) Copyright 2010
- * ISEE 2007 SL, <www.iseebcn.com>
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
- */
-
-#ifndef __CONFIG_H
-#define __CONFIG_H
-#include <asm/sizes.h>
-
-/*
- * High Level Configuration Options
- */
-#define CONFIG_OMAP 1 /* in a TI OMAP core */
-#define CONFIG_OMAP34XX 1 /* which is a 34XX */
-#define CONFIG_OMAP3_IGEP0030 1 /* working with IGEP0030 */
-
-#define CONFIG_SDRC /* The chip has SDRC controller */
-
-#include <asm/arch/cpu.h>
-#include <asm/arch/omap3.h>
-
-/*
- * Display CPU and Board information
- */
-#define CONFIG_DISPLAY_CPUINFO 1
-#define CONFIG_DISPLAY_BOARDINFO 1
-
-/* Clock Defines */
-#define V_OSCK 26000000 /* Clock output from T2 */
-#define V_SCLK (V_OSCK >> 1)
-
-#define CONFIG_MISC_INIT_R
-
-#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
-#define CONFIG_SETUP_MEMORY_TAGS 1
-#define CONFIG_INITRD_TAG 1
-#define CONFIG_REVISION_TAG 1
-
-#define CONFIG_OF_LIBFDT 1
-
-/*
- * NS16550 Configuration
- */
-
-#define V_NS16550_CLK 48000000 /* 48MHz (APLL96/2) */
-
-#define CONFIG_SYS_NS16550
-#define CONFIG_SYS_NS16550_SERIAL
-#define CONFIG_SYS_NS16550_REG_SIZE (-4)
-#define CONFIG_SYS_NS16550_CLK V_NS16550_CLK
-
-/* select serial console configuration */
-#define CONFIG_CONS_INDEX 3
-#define CONFIG_SYS_NS16550_COM3 OMAP34XX_UART3
-#define CONFIG_SERIAL3 3
-
-/* allow to overwrite serial and ethaddr */
-#define CONFIG_ENV_OVERWRITE
-#define CONFIG_BAUDRATE 115200
-#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600, 115200}
-#define CONFIG_GENERIC_MMC 1
-#define CONFIG_MMC 1
-#define CONFIG_OMAP_HSMMC 1
-#define CONFIG_DOS_PARTITION 1
-
-/* USB */
-#define CONFIG_MUSB_UDC 1
-#define CONFIG_USB_OMAP3 1
-#define CONFIG_TWL4030_USB 1
-
-/* USB device configuration */
-#define CONFIG_USB_DEVICE 1
-#define CONFIG_USB_TTY 1
-#define CONFIG_SYS_CONSOLE_IS_IN_ENV 1
-
-/* Change these to suit your needs */
-#define CONFIG_USBD_VENDORID 0x0451
-#define CONFIG_USBD_PRODUCTID 0x5678
-#define CONFIG_USBD_MANUFACTURER "Texas Instruments"
-#define CONFIG_USBD_PRODUCT_NAME "IGEP"
-
-/* commands to include */
-#include <config_cmd_default.h>
-
-#define CONFIG_CMD_CACHE
-#define CONFIG_CMD_EXT2 /* EXT2 Support */
-#define CONFIG_CMD_FAT /* FAT support */
-#define CONFIG_CMD_I2C /* I2C serial bus support */
-#define CONFIG_CMD_MMC /* MMC support */
-#define CONFIG_CMD_ONENAND /* ONENAND support */
-#define CONFIG_CMD_MTDPARTS /* Enable MTD parts commands */
-#define CONFIG_MTD_DEVICE
-
-#undef CONFIG_CMD_NET /* bootp, tftpboot, rarpboot */
-#undef CONFIG_CMD_NFS /* nfs */
-#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */
-#undef CONFIG_CMD_IMLS /* List all found images */
-
-#define CONFIG_SYS_NO_FLASH
-#define CONFIG_HARD_I2C 1
-#define CONFIG_SYS_I2C_SPEED 100000
-#define CONFIG_SYS_I2C_SLAVE 1
-#define CONFIG_SYS_I2C_BUS 0
-#define CONFIG_SYS_I2C_BUS_SELECT 1
-#define CONFIG_DRIVER_OMAP34XX_I2C 1
-
-/*
- * TWL4030
- */
-#define CONFIG_TWL4030_POWER 1
-
-#define CONFIG_BOOTDELAY 3
-
-#define CONFIG_EXTRA_ENV_SETTINGS \
- "usbtty=cdc_acm\0" \
- "loadaddr=0x82000000\0" \
- "usbtty=cdc_acm\0" \
- "console=ttyS2,115200n8\0" \
- "mpurate=500\0" \
- "vram=12M\0" \
- "dvimode=1024x768MR-16@60\0" \
- "defaultdisplay=dvi\0" \
- "mmcdev=0\0" \
- "mmcroot=/dev/mmcblk0p2 rw\0" \
- "mmcrootfstype=ext3 rootwait\0" \
- "nandroot=/dev/mtdblock4 rw\0" \
- "nandrootfstype=jffs2\0" \
- "mmcargs=setenv bootargs console=${console} " \
- "mpurate=${mpurate} " \
- "vram=${vram} " \
- "omapfb.mode=dvi:${dvimode} " \
- "omapfb.debug=y " \
- "omapdss.def_disp=${defaultdisplay} " \
- "root=${mmcroot} " \
- "rootfstype=${mmcrootfstype}\0" \
- "nandargs=setenv bootargs console=${console} " \
- "mpurate=${mpurate} " \
- "vram=${vram} " \
- "omapfb.mode=dvi:${dvimode} " \
- "omapfb.debug=y " \
- "omapdss.def_disp=${defaultdisplay} " \
- "root=${nandroot} " \
- "rootfstype=${nandrootfstype}\0" \
- "loadbootscript=fatload mmc ${mmcdev} ${loadaddr} boot.scr\0" \
- "bootscript=echo Running bootscript from mmc ...; " \
- "source ${loadaddr}\0" \
- "loaduimage=fatload mmc ${mmcdev} ${loadaddr} uImage\0" \
- "mmcboot=echo Booting from mmc ...; " \
- "run mmcargs; " \
- "bootm ${loadaddr}\0" \
- "nandboot=echo Booting from onenand ...; " \
- "run nandargs; " \
- "onenand read ${loadaddr} 280000 400000; " \
- "bootm ${loadaddr}\0" \
-
-#define CONFIG_BOOTCOMMAND \
- "if mmc rescan ${mmcdev}; then " \
- "if run loadbootscript; then " \
- "run bootscript; " \
- "else " \
- "if run loaduimage; then " \
- "run mmcboot; " \
- "else run nandboot; " \
- "fi; " \
- "fi; " \
- "else run nandboot; fi"
-
-#define CONFIG_AUTO_COMPLETE 1
-
-/*
- * Miscellaneous configurable options
- */
-#define CONFIG_SYS_LONGHELP /* undef to save memory */
-#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */
-#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
-#define CONFIG_SYS_PROMPT "U-Boot # "
-#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
-/* Print Buffer Size */
-#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
- sizeof(CONFIG_SYS_PROMPT) + 16)
-#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
-/* Boot Argument Buffer Size */
-#define CONFIG_SYS_BARGSIZE (CONFIG_SYS_CBSIZE)
-
-#define CONFIG_SYS_MEMTEST_START (OMAP34XX_SDRC_CS0) /* memtest */
- /* works on */
-#define CONFIG_SYS_MEMTEST_END (OMAP34XX_SDRC_CS0 + \
- 0x01F00000) /* 31MB */
-
-#define CONFIG_SYS_LOAD_ADDR (OMAP34XX_SDRC_CS0) /* default */
- /* load address */
-
-#define CONFIG_SYS_MONITOR_LEN (256 << 10)
-
-/*
- * OMAP3 has 12 GP timers, they can be driven by the system clock
- * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
- * This rate is divided by a local divisor.
- */
-#define CONFIG_SYS_TIMERBASE (OMAP34XX_GPT2)
-#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
-#define CONFIG_SYS_HZ 1000
-
-/*
- * Stack sizes
- *
- * The stack sizes are set up in start.S using the settings below
- */
-#define CONFIG_STACKSIZE (128 << 10) /* regular stack 128 KiB */
-
-/*
- * Physical Memory Map
- *
- */
-#define CONFIG_NR_DRAM_BANKS 2 /* CS1 may or may not be populated */
-#define PHYS_SDRAM_1 OMAP34XX_SDRC_CS0
-#define PHYS_SDRAM_1_SIZE (32 << 20) /* at least 32 meg */
-#define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1
-
-/*
- * FLASH and environment organization
- */
-
-#define PISMO1_ONEN_SIZE GPMC_SIZE_128M /* Configure the PISMO */
-
-#define CONFIG_SYS_ONENAND_BASE ONENAND_MAP
-
-#define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
-
-#define CONFIG_ENV_IS_IN_ONENAND 1
-#define CONFIG_ENV_SIZE (512 << 10) /* Total Size Environment */
-#define CONFIG_ENV_ADDR ONENAND_ENV_OFFSET
-
-/*
- * Size of malloc() pool
- */
-#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (128 << 10))
-
-#define CONFIG_SYS_SDRAM_BASE PHYS_SDRAM_1
-#define CONFIG_SYS_INIT_RAM_ADDR 0x4020f800
-#define CONFIG_SYS_INIT_RAM_SIZE 0x800
-#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_INIT_RAM_ADDR + \
- CONFIG_SYS_INIT_RAM_SIZE - \
- GENERATED_GBL_DATA_SIZE)
-
-#endif /* __CONFIG_H */
diff --git a/include/configs/igep0020.h b/include/configs/igep00x0.h
index c2fcdffdae..a99f332a85 100644
--- a/include/configs/igep0020.h
+++ b/include/configs/igep00x0.h
@@ -1,5 +1,7 @@
/*
- * (C) Copyright 2010
+ * Common configuration settings for IGEP technology based boards
+ *
+ * (C) Copyright 2012
* ISEE 2007 SL, <www.iseebcn.com>
*
* This program is free software; you can redistribute it and/or
@@ -18,8 +20,9 @@
* MA 02111-1307 USA
*/
-#ifndef __CONFIG_H
-#define __CONFIG_H
+#ifndef __IGEP00X0_H
+#define __IGEP00X0_H
+
#include <asm/sizes.h>
/*
@@ -27,7 +30,6 @@
*/
#define CONFIG_OMAP 1 /* in a TI OMAP core */
#define CONFIG_OMAP34XX 1 /* which is a 34XX */
-#define CONFIG_OMAP3_IGEP0020 1 /* working with IGEP0020 */
#define CONFIG_SDRC /* The chip has SDRC controller */
@@ -72,7 +74,8 @@
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
#define CONFIG_BAUDRATE 115200
-#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600, 115200}
+#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600, \
+ 115200}
#define CONFIG_GENERIC_MMC 1
#define CONFIG_MMC 1
#define CONFIG_OMAP_HSMMC 1
@@ -133,7 +136,7 @@
"loadaddr=0x82000000\0" \
"usbtty=cdc_acm\0" \
"console=ttyS2,115200n8\0" \
- "mpurate=500\0" \
+ "mpurate=auto\0" \
"vram=12M\0" \
"dvimode=1024x768MR-16@60\0" \
"defaultdisplay=dvi\0" \
@@ -158,9 +161,9 @@
"omapdss.def_disp=${defaultdisplay} " \
"root=${nandroot} " \
"rootfstype=${nandrootfstype}\0" \
- "loadbootscript=fatload mmc ${mmcdev} ${loadaddr} boot.scr\0" \
- "bootscript=echo Running bootscript from mmc ...; " \
- "source ${loadaddr}\0" \
+ "loadbootenv=fatload mmc ${mmcdev} ${loadaddr} uEnv.txt\0" \
+ "importbootenv=echo Importing environment from mmc ...; " \
+ "env import -t $loadaddr $filesize\0" \
"loaduimage=fatload mmc ${mmcdev} ${loadaddr} uImage\0" \
"mmcboot=echo Booting from mmc ...; " \
"run mmcargs; " \
@@ -172,15 +175,19 @@
#define CONFIG_BOOTCOMMAND \
"if mmc rescan ${mmcdev}; then " \
- "if run loadbootscript; then " \
- "run bootscript; " \
- "else " \
- "if run loaduimage; then " \
- "run mmcboot; " \
- "else run nandboot; " \
- "fi; " \
- "fi; " \
- "else run nandboot; fi"
+ "echo SD/MMC found on device ${mmcdev};" \
+ "if run loadbootenv; then " \
+ "run importbootenv;" \
+ "fi;" \
+ "if test -n $uenvcmd; then " \
+ "echo Running uenvcmd ...;" \
+ "run uenvcmd;" \
+ "fi;" \
+ "if run loaduimage; then " \
+ "run mmcboot;" \
+ "fi;" \
+ "fi;" \
+ "run nandboot;" \
#define CONFIG_AUTO_COMPLETE 1
@@ -269,4 +276,4 @@
CONFIG_SYS_INIT_RAM_SIZE - \
GENERATED_GBL_DATA_SIZE)
-#endif /* __CONFIG_H */
+#endif /* __IGEP00X0_H */
diff --git a/include/configs/ima3-mx53.h b/include/configs/ima3-mx53.h
new file mode 100644
index 0000000000..ea48d64635
--- /dev/null
+++ b/include/configs/ima3-mx53.h
@@ -0,0 +1,269 @@
+/*
+ * (C) Copyright 2012, Stefano Babic <sbabic@denx.de>
+ *
+ * Copyright (C) 2010 Freescale Semiconductor, Inc.
+ *
+ * Configuration settings for the MX53-EVK Freescale board.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc.
+ */
+
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/* SOC type must be included before imx-regs.h */
+#define CONFIG_MX53
+#include <asm/arch/imx-regs.h>
+#include <asm/arch/mx5x_pins.h>
+
+#define CONFIG_SYS_MX5_HCLK 24000000
+#define CONFIG_SYS_MX5_CLK32 32768
+
+#define CONFIG_DISPLAY_CPUINFO
+#define CONFIG_DISPLAY_BOARDINFO
+
+#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_INITRD_TAG
+
+#define CONFIG_OF_LIBFDT
+
+/* Size of malloc() pool */
+#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 2 * 1024 * 1024)
+
+#define CONFIG_BOARD_EARLY_INIT_F
+
+/* Enable GPIOs */
+#define CONFIG_MXC_GPIO
+
+/* UART */
+#define CONFIG_MXC_UART
+#define CONFIG_MXC_UART_BASE UART4_BASE_ADDR
+
+/* MMC */
+#define CONFIG_FSL_ESDHC
+#define CONFIG_SYS_FSL_ESDHC_ADDR 0
+#define CONFIG_SYS_FSL_ESDHC_NUM 1
+
+#define CONFIG_MMC
+#define CONFIG_GENERIC_MMC
+#define CONFIG_DOS_PARTITION
+
+/* Ethernet on FEC */
+#define CONFIG_NET_MULTI
+#define CONFIG_MII
+#define CONFIG_DISCOVER_PHY
+
+#define CONFIG_FEC_MXC
+#define IMX_FEC_BASE FEC_BASE_ADDR
+#define CONFIG_FEC_MXC_PHYADDR 0x01
+#define CONFIG_PHY_ADDR CONFIG_FEC_MXC_PHYADDR
+#define CONFIG_RESET_PHY_R
+#define CONFIG_FEC_MXC_NO_ANEG
+#define CONFIG_PRIME "FEC0"
+
+/* SPI */
+#define CONFIG_HARD_SPI
+#define CONFIG_MXC_SPI
+#define CONFIG_DEFAULT_SPI_BUS 1
+#define CONFIG_DEFAULT_SPI_MODE SPI_MODE_0
+
+/* SPI FLASH - not used for environment */
+#define CONFIG_SPI_FLASH
+#define CONFIG_SPI_FLASH_STMICRO
+#define CONFIG_SPI_FLASH_CS (IOMUX_TO_GPIO(MX53_PIN_CSI0_D11) \
+ << 8) | 0
+#define CONFIG_SF_DEFAULT_MODE SPI_MODE_0
+#define CONFIG_SF_DEFAULT_SPEED 25000000
+
+/* allow to overwrite serial and ethaddr */
+#define CONFIG_ENV_OVERWRITE
+#define CONFIG_CONS_INDEX 1
+#define CONFIG_BAUDRATE 115200
+#define CONFIG_SYS_BAUDRATE_TABLE {9600, 19200, 38400, 57600, 115200}
+
+/* Command definition */
+#include <config_cmd_default.h>
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_MMC
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_CMD_SPI
+#define CONFIG_CMD_SF
+#define CONFIG_CMD_GPIO
+
+#define CONFIG_BOOTDELAY 3
+
+#define CONFIG_LOADADDR 0x70800000 /* loadaddr env var */
+#define CONFIG_SYS_TEXT_BASE 0xf0001400 /* uboot in nor flash */
+
+#define CONFIG_ARP_TIMEOUT 200UL
+
+/* Miscellaneous configurable options */
+#define CONFIG_SYS_LONGHELP /* undef to save memory */
+#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+#define CONFIG_SYS_PROMPT "IMA3 MX53 U-Boot > "
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
+
+/* Print Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT) + 16)
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Argument Buffer Size */
+
+#define CONFIG_SYS_MEMTEST_START 0x70000000
+#define CONFIG_SYS_MEMTEST_END 0x10000
+
+#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
+
+#define CONFIG_SYS_HZ 1000
+#define CONFIG_CMDLINE_EDITING
+
+/* Stack sizes */
+#define CONFIG_STACKSIZE (128 * 1024) /* regular stack */
+
+/* Physical Memory Map */
+#define CONFIG_NR_DRAM_BANKS 1
+#define PHYS_SDRAM_1 CSD0_BASE_ADDR
+#define PHYS_SDRAM_1_SIZE (1024 * 1024 * 1024)
+
+#define CONFIG_SYS_SDRAM_BASE (PHYS_SDRAM_1)
+#define CONFIG_SYS_INIT_RAM_ADDR (IRAM_BASE_ADDR)
+#define CONFIG_SYS_INIT_RAM_SIZE (IRAM_SIZE)
+
+#define CONFIG_SYS_INIT_SP_OFFSET \
+ (CONFIG_SYS_INIT_RAM_SIZE - GENERATED_GBL_DATA_SIZE)
+#define CONFIG_SYS_INIT_SP_ADDR \
+ (CONFIG_SYS_INIT_RAM_ADDR + CONFIG_SYS_INIT_SP_OFFSET)
+
+#define CONFIG_MTD_DEVICE /* needed for mtdparts commands */
+#define MTDIDS_DEFAULT "nor0=f0000000.flash"
+
+/* FLASH and environment organization */
+
+#define CONFIG_SYS_FLASH_BASE 0xF0000000
+#define CONFIG_SYS_FLASH_CFI /* Flash is CFI conformant */
+#define CONFIG_FLASH_CFI_DRIVER /* Use the common driver */
+#define CONFIG_FLASH_CFI_MTD /* with MTD support */
+#define CONFIG_SYS_FLASH_BANKS_LIST { CONFIG_SYS_FLASH_BASE }
+#define CONFIG_SYS_MAX_FLASH_BANKS 1
+#define CONFIG_SYS_MAX_FLASH_SECT 1024
+
+#define CONFIG_SYS_FLASH_EMPTY_INFO
+#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
+
+#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+#define CONFIG_SYS_MONITOR_LEN (512 * 1024)
+
+#define CONFIG_ENV_SIZE (8 * 1024)
+#define CONFIG_ENV_IS_IN_FLASH
+#define CONFIG_ENV_ADDR (CONFIG_SYS_MONITOR_BASE + \
+ CONFIG_SYS_MONITOR_LEN)
+#define CONFIG_ENV_SECT_SIZE 0x20000
+#define CONFIG_ENV_OFFSET_REDUND (CONFIG_ENV_OFFSET + \
+ CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_SIZE_REDUND CONFIG_ENV_SIZE
+
+/*
+ * Default environment and default scripts
+ * to update uboot and load kernel
+ */
+
+#define HOSTNAME ima3-mx53
+#define xstr(s) str(s)
+#define str(s) #s
+
+#define CONFIG_HOSTNAME ima3-mx53
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "netdev=eth0\0" \
+ "nfsargs=setenv bootargs root=/dev/nfs rw " \
+ "nfsroot=${serverip}:${rootpath}\0" \
+ "ramargs=setenv bootargs root=/dev/ram0 rw\0" \
+ "addip_sta=setenv bootargs ${bootargs} " \
+ "ip=${ipaddr}:${serverip}:${gatewayip}:${netmask}" \
+ ":${hostname}:${netdev}:off panic=1\0" \
+ "addip_dyn=setenv bootargs ${bootargs} ip=dhcp\0" \
+ "addip=if test -n ${ipdyn};then run addip_dyn;" \
+ "else run addip_sta;fi\0" \
+ "addmtd=setenv bootargs ${bootargs} ${mtdparts}\0" \
+ "addtty=setenv bootargs ${bootargs}" \
+ " console=${console},${baudrate}\0" \
+ "addmisc=setenv bootargs ${bootargs} ${misc}\0" \
+ "console=ttymxc3\0" \
+ "loadaddr=70800000\0" \
+ "kernel_addr_r=70800000\0" \
+ "ramdisk_addr_r=71000000\0" \
+ "hostname=" xstr(CONFIG_HOSTNAME) "\0" \
+ "bootfile=" xstr(CONFIG_HOSTNAME) "/uImage\0" \
+ "ramdisk_file=" xstr(CONFIG_HOSTNAME) "/uRamdisk\0" \
+ "mmcargs=setenv bootargs root=${mmcroot} " \
+ "rootfstype=${mmcrootfstype}\0" \
+ "mmcroot=/dev/mmcblk0p3 rw\0" \
+ "mmcboot=echo Booting from mmc ...; " \
+ "run mmcargs addip addtty addmtd addmisc mmcload;" \
+ "bootm\0" \
+ "mmcload=fatload mmc ${mmcdev}:${mmcpart} " \
+ "${loadaddr} ${uimage}\0" \
+ "mmcrootfstype=ext3 rootwait\0" \
+ "flash_self=run ramargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr} ${ramdisk_addr}\0" \
+ "flash_nfs=run nfsargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr}\0" \
+ "net_nfs=tftp ${kernel_addr_r} ${bootfile}; " \
+ "run nfsargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr_r}\0" \
+ "net_self_load=tftp ${ramdisk_addr_r} ${ramdisk_file};" \
+ "tftp ${kernel_addr_r} ${bootfile}\0" \
+ "net_self=if run net_self_load;then " \
+ "run ramargs addip addtty addmtd addmisc;" \
+ "bootm ${kernel_addr_r} ${ramdisk_addr_r};" \
+ "else echo Images not loades;fi\0" \
+ "satargs=setenv bootargs root=/dev/sda1\0" \
+ "satafile=boot/uImage\0" \
+ "ssdboot=echo Booting from ssd ...; " \
+ "run satargs addip addtty addmtd addmisc;" \
+ "sata init;ext2load sata 0:1 ${kernel_addr_r} " \
+ "${satafile};bootm\0" \
+ "u-boot=" xstr(CONFIG_HOSTNAME) "/u-boot.imx\0" \
+ "uimage=uImage\0" \
+ "load=tftp ${loadaddr} ${u-boot}\0" \
+ "uboot_addr=0xf0001000\0" \
+ "update=protect off 0xf0000000 +60000;" \
+ "erase ${uboot_addr} +60000;" \
+ "cp.b ${loadaddr} ${uboot_addr} ${filesize}\0" \
+ "upd=if run load;then echo Updating u-boot;if run update;" \
+ "then echo U-Boot updated;" \
+ "else echo Error updating u-boot !;" \
+ "echo Board without bootloader !!;" \
+ "fi;" \
+ "else echo U-Boot not downloaded..exiting;fi\0" \
+ "bootcmd=run net_nfs\0"
+
+
+#define CONFIG_CMD_SATA
+#ifdef CONFIG_CMD_SATA
+ #define CONFIG_DWC_AHSATA
+ #define CONFIG_SYS_SATA_MAX_DEVICE 1
+ #define CONFIG_DWC_AHSATA_PORT_ID 0
+ #define CONFIG_DWC_AHSATA_BASE_ADDR SATA_BASE_ADDR
+ #define CONFIG_LBA48
+ #define CONFIG_LIBATA
+#endif
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/imx27lite-common.h b/include/configs/imx27lite-common.h
index 2af4e7af31..c1f1aa6a8a 100644
--- a/include/configs/imx27lite-common.h
+++ b/include/configs/imx27lite-common.h
@@ -153,7 +153,6 @@
#define CONFIG_SYS_NAND_BASE 0xd8000000
#define CONFIG_JFFS2_NAND
#define CONFIG_MXC_NAND_HWECC
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
/*
* SD/MMC
diff --git a/include/configs/intip.h b/include/configs/intip.h
index 92b65af7c9..33364a843e 100644
--- a/include/configs/intip.h
+++ b/include/configs/intip.h
@@ -37,10 +37,10 @@
#define CONFIG_460EX 1 /* Specific PPC460EX */
#ifdef CONFIG_DEVCONCENTER
#define CONFIG_HOSTNAME devconcenter
-#define CONFIG_IDENT_STRING " devconcenter 0.05"
+#define CONFIG_IDENT_STRING " devconcenter 0.06"
#else
#define CONFIG_HOSTNAME intip
-#define CONFIG_IDENT_STRING " intip 0.05"
+#define CONFIG_IDENT_STRING " intip 0.06"
#endif
#define CONFIG_440 1
#define CONFIG_4xx 1 /* ... PPC4xx family */
diff --git a/include/configs/io.h b/include/configs/io.h
index 9d2a87d22d..03661cce2d 100644
--- a/include/configs/io.h
+++ b/include/configs/io.h
@@ -34,11 +34,13 @@
* Include common defines/options for all AMCC eval boards
*/
#define CONFIG_HOSTNAME io
-#define CONFIG_IDENT_STRING " io 0.04"
+#define CONFIG_IDENT_STRING " io 0.05"
#include "amcc-common.h"
-#define CONFIG_BOARD_EARLY_INIT_F /* call board_early_init_f */
-#define CONFIG_LAST_STAGE_INIT /* call last_stage_init */
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_BOARD_EARLY_INIT_R
+#define CONFIG_MISC_INIT_R
+#define CONFIG_LAST_STAGE_INIT
#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
@@ -48,6 +50,10 @@
#define PLLMR0_DEFAULT PLLMR0_266_133_66
#define PLLMR1_DEFAULT PLLMR1_266_133_66
+#undef CONFIG_ZERO_BOOTDELAY_CHECK /* ignore keypress on bootdelay==0 */
+#define CONFIG_AUTOBOOT_KEYED /* use key strings to stop autoboot */
+#define CONFIG_AUTOBOOT_STOP_STR " "
+
/* new uImage format support */
#define CONFIG_FIT
#define CONFIG_FIT_VERBOSE /* enable fit_format_{error,warning}() */
@@ -76,6 +82,7 @@
* Commands additional to the ones defined in amcc-common.h
*/
#define CONFIG_CMD_CACHE
+#define CONFIG_CMD_DTT
#undef CONFIG_CMD_EEPROM
/*
diff --git a/include/configs/io64.h b/include/configs/io64.h
index 51b2dd1c13..887aaefd39 100644
--- a/include/configs/io64.h
+++ b/include/configs/io64.h
@@ -53,7 +53,7 @@
* Include common defines/options for all AMCC eval boards
*/
#define CONFIG_HOSTNAME io64
-#define CONFIG_IDENT_STRING " io64 0.01"
+#define CONFIG_IDENT_STRING " io64 0.02"
#include "amcc-common.h"
#define CONFIG_BOARD_EARLY_INIT_F
diff --git a/include/configs/iocon.h b/include/configs/iocon.h
index 9fcc6430cd..7f8825bed1 100644
--- a/include/configs/iocon.h
+++ b/include/configs/iocon.h
@@ -34,10 +34,11 @@
* Include common defines/options for all AMCC eval boards
*/
#define CONFIG_HOSTNAME iocon
-#define CONFIG_IDENT_STRING " iocon 0.03"
+#define CONFIG_IDENT_STRING " iocon 0.04"
#include "amcc-common.h"
-#define CONFIG_BOARD_EARLY_INIT_F /* call board_early_init_f */
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_BOARD_EARLY_INIT_R
#define CONFIG_LAST_STAGE_INIT
#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
@@ -48,6 +49,10 @@
#define PLLMR0_DEFAULT PLLMR0_266_133_66
#define PLLMR1_DEFAULT PLLMR1_266_133_66
+#undef CONFIG_ZERO_BOOTDELAY_CHECK /* ignore keypress on bootdelay==0 */
+#define CONFIG_AUTOBOOT_KEYED /* use key strings to stop autoboot */
+#define CONFIG_AUTOBOOT_STOP_STR " "
+
/* new uImage format support */
#define CONFIG_FIT
#define CONFIG_FIT_VERBOSE /* enable fit_format_{error,warning}() */
diff --git a/include/configs/jadecpu.h b/include/configs/jadecpu.h
index f72ee02abf..d644fea22f 100644
--- a/include/configs/jadecpu.h
+++ b/include/configs/jadecpu.h
@@ -130,7 +130,6 @@
#undef CONFIG_CMD_XIMG
#define CONFIG_CMD_BMP
-#define CONFIG_CMD_CAN
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_ELF
#define CONFIG_CMD_FAT
diff --git a/include/configs/kilauea.h b/include/configs/kilauea.h
index 621dbb8fa6..d505a41de4 100644
--- a/include/configs/kilauea.h
+++ b/include/configs/kilauea.h
@@ -447,7 +447,6 @@
*/
#define CONFIG_CMD_CHIP_CONFIG
#define CONFIG_CMD_DATE
-#define CONFIG_CMD_LOG
#define CONFIG_CMD_NAND
#define CONFIG_CMD_PCI
#define CONFIG_CMD_SNTP
diff --git a/include/configs/lwmon5.h b/include/configs/lwmon5.h
index a6f2864c65..68215fda9d 100644
--- a/include/configs/lwmon5.h
+++ b/include/configs/lwmon5.h
@@ -435,7 +435,6 @@
#define CONFIG_CMD_FAT
#define CONFIG_CMD_I2C
#define CONFIG_CMD_IRQ
-#define CONFIG_CMD_LOG
#define CONFIG_CMD_MII
#define CONFIG_CMD_NET
#define CONFIG_CMD_NFS
diff --git a/include/configs/m28evk.h b/include/configs/m28evk.h
index 012381a500..c62f4d01fd 100644
--- a/include/configs/m28evk.h
+++ b/include/configs/m28evk.h
@@ -43,6 +43,8 @@
#define CONFIG_ARCH_CPU_INIT
#define CONFIG_ARCH_MISC_INIT
+#define CONFIG_OF_LIBFDT
+
/*
* SPL
*/
@@ -52,6 +54,7 @@
#define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds"
#define CONFIG_SPL_LIBCOMMON_SUPPORT
#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_GPIO_SUPPORT
/*
* U-Boot Commands
@@ -84,7 +87,7 @@
*/
#define CONFIG_NR_DRAM_BANKS 1 /* 1 bank of DRAM */
#define PHYS_SDRAM_1 0x40000000 /* Base address */
-#define PHYS_SDRAM_1_SIZE 0x40000000 /* Max 1 GB RAM */
+#define PHYS_SDRAM_1_SIZE 0x20000000 /* Max 512 MB RAM */
#define CONFIG_STACKSIZE 0x00010000 /* 128 KB stack */
#define CONFIG_SYS_MALLOC_LEN 0x00400000 /* 4 MB for malloc */
#define CONFIG_SYS_GBL_DATA_SIZE 128 /* Initial data */
@@ -279,6 +282,7 @@
#define CONFIG_BOOTCOMMAND "run bootcmd_net"
#define CONFIG_LOADADDR 0x42000000
#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
+#define CONFIG_OF_LIBFDT
/*
* Extra Environments
@@ -286,6 +290,7 @@
#define CONFIG_EXTRA_ENV_SETTINGS \
"update_nand_full_filename=u-boot.nand\0" \
"update_nand_firmware_filename=u-boot.sb\0" \
+ "update_sd_firmware_filename=u-boot.sd\0" \
"update_nand_firmware_maxsz=0x100000\0" \
"update_nand_stride=0x40\0" /* MX28 datasheet ch. 12.12 */ \
"update_nand_count=0x4\0" /* MX28 datasheet ch. 12.12 */ \
@@ -312,6 +317,14 @@
"nand erase ${fcb_sz} ${fw_sz} ; " \
"nand write ${loadaddr} ${fcb_sz} ${filesize} ; " \
"nand write ${loadaddr} ${fw_off} ${filesize} ; " \
+ "fi\0" \
+ "update_sd_firmware=" /* Update the SD firmware partition */ \
+ "if mmc rescan ; then " \
+ "if tftp ${update_sd_firmware_filename} ; then " \
+ "setexpr fw_sz ${filesize} / 0x200 ; " /* SD block size */ \
+ "setexpr fw_sz ${fw_sz} + 1 ; " \
+ "mmc write ${loadaddr} 0x800 ${fw_sz} ; " \
+ "fi ; " \
"fi\0"
#endif /* __M28_H__ */
diff --git a/include/configs/makalu.h b/include/configs/makalu.h
index fcc789d714..6c1b136659 100644
--- a/include/configs/makalu.h
+++ b/include/configs/makalu.h
@@ -252,7 +252,6 @@
*/
#define CONFIG_CMD_DATE
#define CONFIG_CMD_DTT
-#define CONFIG_CMD_LOG
#define CONFIG_CMD_PCI
#define CONFIG_CMD_SNTP
diff --git a/include/configs/mcx.h b/include/configs/mcx.h
index 1315c3ceb8..f6a83a8505 100644
--- a/include/configs/mcx.h
+++ b/include/configs/mcx.h
@@ -171,8 +171,6 @@
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of */
/* NAND devices */
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
-
#define CONFIG_JFFS2_NAND
/* nand device jffs2 lives on */
#define CONFIG_JFFS2_DEV "nand0"
@@ -327,7 +325,7 @@
#define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/omap-common/u-boot-spl.lds"
#define CONFIG_SPL_TEXT_BASE 0x40200000 /*CONFIG_SYS_SRAM_START*/
-#define CONFIG_SPL_MAX_SIZE (45 << 10)
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
/* move malloc and bss high to prevent clashing with the main image */
diff --git a/include/configs/meesc.h b/include/configs/meesc.h
index d6197bc610..db1e87d69c 100644
--- a/include/configs/meesc.h
+++ b/include/configs/meesc.h
@@ -164,7 +164,6 @@
# define CONFIG_SYS_NAND_MASK_CLE (1 << 22)
# define CONFIG_SYS_NAND_ENABLE_PIN AT91_PIO_PORTD, 15
# define CONFIG_SYS_NAND_READY_PIN AT91_PIO_PORTA, 22
-# define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#endif
/* Ethernet */
diff --git a/include/configs/ms7722se.h b/include/configs/ms7722se.h
index 7cf641fd13..f1104902be 100644
--- a/include/configs/ms7722se.h
+++ b/include/configs/ms7722se.h
@@ -35,7 +35,6 @@
#define CONFIG_CMD_NET
#define CONFIG_CMD_NFS
#define CONFIG_CMD_PING
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_SDRAM
#define CONFIG_CMD_MEMORY
#define CONFIG_CMD_SAVEENV
diff --git a/include/configs/ms7750se.h b/include/configs/ms7750se.h
index 03f52f3905..52e15cce87 100644
--- a/include/configs/ms7750se.h
+++ b/include/configs/ms7750se.h
@@ -38,7 +38,6 @@
*/
/*#include <config_cmd_default.h>*/
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_FLASH
#define CONFIG_CMD_SAVEENV
diff --git a/include/configs/mv-common.h b/include/configs/mv-common.h
index 1a6379176b..27b489902b 100644
--- a/include/configs/mv-common.h
+++ b/include/configs/mv-common.h
@@ -132,7 +132,6 @@
*/
#ifdef CONFIG_CMD_NAND
#define CONFIG_SYS_MAX_NAND_DEVICE 1
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#endif
/*
diff --git a/include/configs/mx25pdk.h b/include/configs/mx25pdk.h
index d1ba02b6ee..7210b6e80f 100644
--- a/include/configs/mx25pdk.h
+++ b/include/configs/mx25pdk.h
@@ -65,7 +65,6 @@
#define CONFIG_ENV_IS_NOWHERE
#define CONFIG_SYS_NO_FLASH
-#define CONFIG_SYS_64BIT_VSPRINTF
/* U-Boot general configuration */
#define CONFIG_SYS_PROMPT "MX25PDK U-Boot > "
diff --git a/include/configs/mx28evk.h b/include/configs/mx28evk.h
index 02f3366ed2..0c18e5022a 100644
--- a/include/configs/mx28evk.h
+++ b/include/configs/mx28evk.h
@@ -46,6 +46,7 @@
#define CONFIG_SPL_LDSCRIPT "arch/arm/cpu/arm926ejs/mx28/u-boot-spl.lds"
#define CONFIG_SPL_LIBCOMMON_SUPPORT
#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_GPIO_SUPPORT
/*
* U-Boot Commands
@@ -67,6 +68,7 @@
#define CONFIG_CMD_SF
#define CONFIG_CMD_SPI
#define CONFIG_CMD_USB
+#define CONFIG_CMD_BOOTZ
/*
* Memory configurations
@@ -148,6 +150,16 @@
#endif
/*
+ * NAND Driver
+ */
+#ifdef CONFIG_CMD_NAND
+#define CONFIG_NAND_MXS
+#define CONFIG_SYS_MAX_NAND_DEVICE 1
+#define CONFIG_SYS_NAND_BASE 0x60000000
+#define CONFIG_SYS_NAND_5_ADDR_CYCLE
+#endif
+
+/*
* Ethernet on SOC (FEC)
*/
#ifdef CONFIG_CMD_NET
@@ -225,6 +237,7 @@
#define CONFIG_BOOTCOMMAND "run bootcmd_net"
#define CONFIG_LOADADDR 0x42000000
#define CONFIG_SYS_LOAD_ADDR CONFIG_LOADADDR
+#define CONFIG_OF_LIBFDT
/*
* Extra Environments
diff --git a/include/configs/mx31pdk.h b/include/configs/mx31pdk.h
index 49d440b9ae..6ce97bc69f 100644
--- a/include/configs/mx31pdk.h
+++ b/include/configs/mx31pdk.h
@@ -99,6 +99,7 @@
#define CONFIG_CMD_SPI
#define CONFIG_CMD_DATE
#define CONFIG_CMD_NAND
+#define CONFIG_CMD_BOOTZ
/*
* Disabled due to compilation errors in cmd_bootm.c (IMLS seems to require
diff --git a/include/configs/mx35pdk.h b/include/configs/mx35pdk.h
index de4b954a52..bd57baa808 100644
--- a/include/configs/mx35pdk.h
+++ b/include/configs/mx35pdk.h
@@ -39,8 +39,6 @@
#define CONFIG_SYS_TEXT_BASE 0xA0000000
#define CONFIG_SYS_CACHELINE_SIZE 32
-#define CONFIG_SYS_64BIT_VSPRINTF
-
#define CONFIG_BOARD_EARLY_INIT_F
#define CONFIG_BOARD_LATE_INIT
diff --git a/include/configs/mx53loco.h b/include/configs/mx53loco.h
index 34a4edd41e..eab0e27fb5 100644
--- a/include/configs/mx53loco.h
+++ b/include/configs/mx53loco.h
@@ -27,7 +27,6 @@
#define CONFIG_SYS_MX5_HCLK 24000000
#define CONFIG_SYS_MX5_CLK32 32768
-#define CONFIG_DISPLAY_CPUINFO
#define CONFIG_DISPLAY_BOARDINFO
#define CONFIG_MACH_TYPE MACH_TYPE_MX53_LOCO
@@ -42,7 +41,9 @@
#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + 2 * 1024 * 1024)
#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_BOARD_LATE_INIT
#define CONFIG_MXC_GPIO
+#define CONFIG_REVISION_TAG
#define CONFIG_MXC_UART
#define CONFIG_MXC_UART_BASE UART1_BASE
@@ -56,6 +57,7 @@
#define CONFIG_CMD_MMC
#define CONFIG_GENERIC_MMC
#define CONFIG_CMD_FAT
+#define CONFIG_CMD_EXT2
#define CONFIG_DOS_PARTITION
/* Eth Configs */
@@ -85,6 +87,21 @@
#define CONFIG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
#define CONFIG_MXC_USB_FLAGS 0
+/* I2C Configs */
+#define CONFIG_HARD_I2C
+#define CONFIG_I2C_MXC
+#define CONFIG_SYS_I2C_MX53_PORT1
+#define CONFIG_SYS_I2C_SPEED 100000
+#define CONFIG_SYS_I2C_SLAVE 0xfe
+
+/* PMIC Controller */
+#define CONFIG_PMIC
+#define CONFIG_PMIC_I2C
+#define CONFIG_DIALOG_PMIC
+#define CONFIG_PMIC_FSL
+#define CONFIG_SYS_DIALOG_PMIC_I2C_ADDR 0x48
+#define CONFIG_SYS_FSL_PMIC_I2C_ADDR 0x8
+
/* allow to overwrite serial and ethaddr */
#define CONFIG_ENV_OVERWRITE
#define CONFIG_CONS_INDEX 1
@@ -193,4 +210,14 @@
#define CONFIG_OF_LIBFDT
+#define CONFIG_CMD_SATA
+#ifdef CONFIG_CMD_SATA
+ #define CONFIG_DWC_AHSATA
+ #define CONFIG_SYS_SATA_MAX_DEVICE 1
+ #define CONFIG_DWC_AHSATA_PORT_ID 0
+ #define CONFIG_DWC_AHSATA_BASE_ADDR SATA_BASE_ADDR
+ #define CONFIG_LBA48
+ #define CONFIG_LIBATA
+#endif
+
#endif /* __CONFIG_H */
diff --git a/include/configs/mx6qarm2.h b/include/configs/mx6qarm2.h
index e83aec6c21..90652c6629 100644
--- a/include/configs/mx6qarm2.h
+++ b/include/configs/mx6qarm2.h
@@ -168,6 +168,7 @@
#define CONFIG_SYS_MMC_ENV_DEV 1
#define CONFIG_OF_LIBFDT
+#define CONFIG_CMD_BOOTZ
#define CONFIG_SYS_DCACHE_OFF
diff --git a/include/configs/mx6qsabrelite.h b/include/configs/mx6qsabrelite.h
index 3f7e51d877..feabc05a47 100644
--- a/include/configs/mx6qsabrelite.h
+++ b/include/configs/mx6qsabrelite.h
@@ -42,6 +42,7 @@
#define CONFIG_ARCH_CPU_INIT
#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_MISC_INIT_R
#define CONFIG_MXC_GPIO
#define CONFIG_MXC_UART
@@ -71,6 +72,19 @@
#define CONFIG_CMD_FAT
#define CONFIG_DOS_PARTITION
+#define CONFIG_CMD_SATA
+/*
+ * SATA Configs
+ */
+#ifdef CONFIG_CMD_SATA
+#define CONFIG_DWC_AHSATA
+#define CONFIG_SYS_SATA_MAX_DEVICE 1
+#define CONFIG_DWC_AHSATA_PORT_ID 0
+#define CONFIG_DWC_AHSATA_BASE_ADDR SATA_ARB_BASE_ADDR
+#define CONFIG_LBA48
+#define CONFIG_LIBATA
+#endif
+
#define CONFIG_CMD_PING
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_MII
@@ -110,6 +124,8 @@
#define CONFIG_BOOTDELAY 3
+#define CONFIG_PREBOOT ""
+
#define CONFIG_LOADADDR 0x10800000
#define CONFIG_SYS_TEXT_BASE 0x17800000
@@ -211,6 +227,7 @@
#endif
#define CONFIG_OF_LIBFDT
+#define CONFIG_CMD_BOOTZ
#define CONFIG_SYS_DCACHE_OFF
diff --git a/include/configs/neo.h b/include/configs/neo.h
index 8de5aaf1ed..38b5becc2e 100644
--- a/include/configs/neo.h
+++ b/include/configs/neo.h
@@ -35,9 +35,13 @@
* Include common defines/options for all AMCC eval boards
*/
#define CONFIG_HOSTNAME neo
+#define CONFIG_IDENT_STRING " neo 0.01"
#include "amcc-common.h"
-#define CONFIG_BOARD_EARLY_INIT_F /* call board_early_init_f */
+#define CONFIG_BOARD_EARLY_INIT_F
+#define CONFIG_BOARD_EARLY_INIT_R
+#define CONFIG_MISC_INIT_R
+#define CONFIG_LAST_STAGE_INIT
#define CONFIG_SYS_CLK_FREQ 33333333 /* external frequency to pll */
@@ -149,53 +153,53 @@
#ifdef CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_SECT_SIZE 0x20000 /* size of one complete sector */
-#define CONFIG_ENV_ADDR ((-CONFIG_SYS_MONITOR_LEN)-CONFIG_ENV_SECT_SIZE)
-#define CONFIG_ENV_SIZE 0x2000 /* Total Size of Environment Sector */
+#define CONFIG_ENV_ADDR 0xFFF00000
+#define CONFIG_ENV_SIZE 0x20000 /* Total Size of Environment Sector */
/* Address and size of Redundant Environment Sector */
-#define CONFIG_ENV_ADDR_REDUND (CONFIG_ENV_ADDR-CONFIG_ENV_SECT_SIZE)
+#define CONFIG_ENV_ADDR_REDUND 0xFFF20000
#define CONFIG_ENV_SIZE_REDUND (CONFIG_ENV_SIZE)
#endif
/*
* PPC405 GPIO Configuration
*/
-#define CONFIG_SYS_4xx_GPIO_TABLE { /* GPIO Alternate1 */ \
-{ \
-/* GPIO Core 0 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO0 PerBLast */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO1 TS1E */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO2 TS2E */ \
-{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO3 TS1O */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO4 TS2O */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO5 TS3 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO6 TS4 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO7 TS5 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO8 TS6 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO9 TrcClk */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO10 PerCS1 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO11 PerCS2 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO12 PerCS3 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO13 PerCS4 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO14 PerAddr03 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO15 PerAddr04 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO16 PerAddr05 */ \
-{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO17 IRQ0 */ \
-{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO18 IRQ1 */ \
-{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO19 IRQ2 */ \
-{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO20 IRQ3 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO21 IRQ4 */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO22 IRQ5 */ \
-{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO23 IRQ6 */ \
-{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO24 UART0_DCD */ \
-{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO25 UART0_DSR */ \
-{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO26 UART0_RI */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO27 UART0_DTR */ \
-{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO28 UART1_Rx */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO29 UART1_Tx */ \
-{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO30 RejectPkt0 */ \
-{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO31 RejectPkt1 */ \
-} \
+#define CONFIG_SYS_4xx_GPIO_TABLE { \
+{ \
+/* GPIO Core 0 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO0 PerBLast */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO1 TS1E */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO2 TS2E */ \
+{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO3 TS1O */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO4 TS2O */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_1 }, /* GPIO5 TS3 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO6 TS4 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO7 TS5 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO8 TS6 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO9 TrcClk */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO10 PerCS1 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO11 PerCS2 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO12 PerCS3 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO13 PerCS4 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO14 PerAddr03 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO15 PerAddr04 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO16 PerAddr05 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO17 IRQ0 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO18 IRQ1 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO19 IRQ2 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO20 IRQ3 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO21 IRQ4 */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO22 IRQ5 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO23 IRQ6 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO24 UART0_DCD */ \
+{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO25 UART0_DSR */ \
+{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO26 UART0_RI */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO27 UART0_DTR */ \
+{ GPIO_BASE, GPIO_IN, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO28 UART1_Rx */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_ALT1, GPIO_OUT_NO_CHG }, /* GPIO29 UART1_Tx */ \
+{ GPIO_BASE, GPIO_OUT, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO30 RejectPkt0 */ \
+{ GPIO_BASE, GPIO_IN, GPIO_SEL, GPIO_OUT_NO_CHG }, /* GPIO31 RejectPkt1 */ \
+} \
}
/*
@@ -226,12 +230,22 @@
#define CONFIG_SYS_EBC_PB1CR 0xFB85A000 /* BAS=0xFF8,BS=4MB,BU=R/W,BW=8bit */
/* Memory Bank 2 (FPGA) initialization */
-#define CONFIG_FPGA_BASE 0x7f100000
+#define CONFIG_SYS_FPGA0_BASE 0x7f100000
#define CONFIG_SYS_EBC_PB2AP 0x92015480
#define CONFIG_SYS_EBC_PB2CR 0x7f11a000 /* BAS=0x7f1,BS=1MB,BU=R/W,BW=16bit */
+#define CONFIG_SYS_FPGA_BASE(k) CONFIG_SYS_FPGA0_BASE
+
+#define CONFIG_SYS_FPGA_COUNT 1
+
/* Memory Bank 3 (Latches) initialization */
+#define CONFIG_SYS_LATCH_BASE 0x7f200000
#define CONFIG_SYS_EBC_PB3AP 0x92015480
#define CONFIG_SYS_EBC_PB3CR 0x7f21a000 /* BAS=0x7f2,BS=1MB,BU=R/W,BW=16bit */
+#define CONFIG_SYS_LATCH0_RESET 0xffff
+#define CONFIG_SYS_LATCH0_BOOT 0xffff
+#define CONFIG_SYS_LATCH1_RESET 0xffbf
+#define CONFIG_SYS_LATCH1_BOOT 0xffff
+
#endif /* __CONFIG_H */
diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
index ddeb4146f7..b891ee4925 100644
--- a/include/configs/omap3_beagle.h
+++ b/include/configs/omap3_beagle.h
@@ -399,7 +399,7 @@
#define CONFIG_SPL
#define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800
-#define CONFIG_SPL_MAX_SIZE (45 * 1024)
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SPL_BSS_START_ADDR 0x80000000
@@ -410,6 +410,7 @@
#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION 1
#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME "u-boot.img"
+#define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_LIBCOMMON_SUPPORT
#define CONFIG_SPL_LIBDISK_SUPPORT
#define CONFIG_SPL_I2C_SUPPORT
diff --git a/include/configs/omap3_evm_common.h b/include/configs/omap3_evm_common.h
index 4910ddaa83..7b21a5c8c4 100644
--- a/include/configs/omap3_evm_common.h
+++ b/include/configs/omap3_evm_common.h
@@ -282,12 +282,13 @@
/* Defines for SPL */
#define CONFIG_SPL
#define CONFIG_SPL_TEXT_BASE 0x40200800
-#define CONFIG_SPL_MAX_SIZE (45 * 1024) /* 45 KB */
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SPL_BSS_START_ADDR 0x80000000
#define CONFIG_SPL_BSS_MAX_SIZE 0x80000 /* 512 KB */
+#define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_LIBCOMMON_SUPPORT
#define CONFIG_SPL_LIBDISK_SUPPORT
#define CONFIG_SPL_I2C_SUPPORT
diff --git a/include/configs/omap3_logic.h b/include/configs/omap3_logic.h
index 01360f6cbd..4ac17cc636 100644
--- a/include/configs/omap3_logic.h
+++ b/include/configs/omap3_logic.h
@@ -122,7 +122,7 @@
#define CONFIG_CMD_NET /* bootp, tftpboot, rarpboot */
#define CONFIG_CMD_PING
#define CONFIG_CMD_DHCP
-#define CONFIG_CMD_SETECPR /* Evaluate expressions */
+#define CONFIG_CMD_SETEXPR /* Evaluate expressions */
#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */
#undef CONFIG_CMD_FPGA /* FPGA configuration Support */
diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h
index 64adc7455c..a0a7a1c42a 100644
--- a/include/configs/omap3_overo.h
+++ b/include/configs/omap3_overo.h
@@ -303,7 +303,7 @@
#define CONFIG_SPL
#define CONFIG_SPL_NAND_SIMPLE
#define CONFIG_SPL_TEXT_BASE 0x40200800
-#define CONFIG_SPL_MAX_SIZE (45 * 1024)
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
/* move malloc and bss high to prevent clashing with the main image */
@@ -317,6 +317,7 @@
#define CONFIG_SYS_MMC_SD_FAT_BOOT_PARTITION 1
#define CONFIG_SPL_FAT_LOAD_PAYLOAD_NAME "u-boot.img"
+#define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_LIBCOMMON_SUPPORT
#define CONFIG_SPL_LIBDISK_SUPPORT
#define CONFIG_SPL_I2C_SUPPORT
diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h
index 4df5f5dac5..d02f338437 100644
--- a/include/configs/omap3_pandora.h
+++ b/include/configs/omap3_pandora.h
@@ -174,8 +174,7 @@
"usbtty=cdc_acm\0" \
"loadaddr=0x82000000\0" \
"bootargs=ubi.mtd=4 ubi.mtd=3 root=ubi0:rootfs rootfstype=ubifs " \
- "rw rootflags=bulk_read console=ttyS0,115200n8 " \
- "vram=6272K omapfb.vram=0:3000K\0" \
+ "rw rootflags=bulk_read vram=6272K omapfb.vram=0:3000K\0" \
"mtdparts=" MTDPARTS_DEFAULT "\0" \
#define CONFIG_BOOTCOMMAND \
diff --git a/include/configs/omap4_common.h b/include/configs/omap4_common.h
index a989721afc..072e17bab8 100644
--- a/include/configs/omap4_common.h
+++ b/include/configs/omap4_common.h
@@ -35,7 +35,6 @@
#define CONFIG_OMAP 1 /* in a TI OMAP core */
#define CONFIG_OMAP44XX 1 /* which is a 44XX */
#define CONFIG_OMAP4430 1 /* which is in a 4430 */
-#define CONFIG_ARCH_CPU_INIT
/* Get CPU defs */
#include <asm/arch/cpu.h>
@@ -106,7 +105,6 @@
#define CONFIG_GENERIC_MMC 1
#define CONFIG_MMC 1
#define CONFIG_OMAP_HSMMC 1
-#define CONFIG_SYS_MMC_SET_DEV 1
#define CONFIG_DOS_PARTITION 1
@@ -151,6 +149,7 @@
#define CONFIG_EXTRA_ENV_SETTINGS \
"loadaddr=0x82000000\0" \
"console=ttyO2,115200n8\0" \
+ "fdt_high=0xffffffff\0" \
"usbtty=cdc_acm\0" \
"vram=16M\0" \
"mmcdev=0\0" \
@@ -287,4 +286,6 @@
#define CONFIG_SYS_ENABLE_PADS_ALL
+#define CONFIG_SYS_THUMB_BUILD
+
#endif /* __CONFIG_OMAP4_COMMON_H */
diff --git a/include/configs/omap5912osk.h b/include/configs/omap5912osk.h
index a8dfef321d..d3a2438e28 100644
--- a/include/configs/omap5912osk.h
+++ b/include/configs/omap5912osk.h
@@ -44,8 +44,6 @@
#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
-#define CONFIG_MISC_INIT_R
-
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
#define CONFIG_SETUP_MEMORY_TAGS 1
#define CONFIG_INITRD_TAG 1 /* Required for ramdisk support */
diff --git a/include/configs/omap5_evm.h b/include/configs/omap5_evm.h
index d3d526310e..38b5028060 100644
--- a/include/configs/omap5_evm.h
+++ b/include/configs/omap5_evm.h
@@ -38,7 +38,6 @@
#define CONFIG_OMAP54XX /* which is a 54XX */
#define CONFIG_OMAP5430 /* which is in a 5430 */
#define CONFIG_5430EVM /* working with EVM */
-#define CONFIG_ARCH_CPU_INIT
/* Get CPU defs */
#include <asm/arch/cpu.h>
@@ -49,8 +48,10 @@
#define CONFIG_DISPLAY_BOARDINFO
/* Clock Defines */
-#define V_OSCK 38400000 /* Clock output from T2 */
+#define V_OSCK 19200000 /* Clock output from T2 */
#define V_SCLK V_OSCK
+#define CONFIG_SYS_CLOCKS_ENABLE_ALL 1 /* Enable all clocks */
+#define CONFIG_SYS_ENABLE_PADS_ALL 1 /* Enable all PADS for now */
#undef CONFIG_USE_IRQ /* no support for IRQs */
#define CONFIG_MISC_INIT_R
@@ -97,9 +98,10 @@
#define CONFIG_DRIVER_OMAP34XX_I2C
#define CONFIG_I2C_MULTI_BUS
-/* TWL6030 */
-#define CONFIG_TWL6030_POWER
-#define CONFIG_CMD_BAT
+/* TWL6035 */
+#ifndef CONFIG_SPL_BUILD
+#define CONFIG_TWL6035_POWER
+#endif
/* MMC */
#define CONFIG_GENERIC_MMC
@@ -111,14 +113,8 @@
#define CONFIG_ENV_IS_IN_MMC
#define CONFIG_SYS_MMC_ENV_DEV 1 /* SLOT2: eMMC(1) */
#define CONFIG_ENV_OFFSET 0xE0000
+#define CONFIG_CMD_SAVEENV
-/* USB */
-#define CONFIG_MUSB_UDC
-#define CONFIG_USB_OMAP3
-
-/* USB device configuration */
-#define CONFIG_USB_DEVICE
-#define CONFIG_USB_TTY
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
/* Flash */
@@ -154,7 +150,7 @@
#define CONFIG_EXTRA_ENV_SETTINGS \
"loadaddr=0x82000000\0" \
- "console=ttyS2,115200n8\0" \
+ "console=ttyO2,115200n8\0" \
"usbtty=cdc_acm\0" \
"vram=16M\0" \
"mmcdev=0\0" \
@@ -250,8 +246,8 @@
/* Defines for SPL */
#define CONFIG_SPL
-#define CONFIG_SPL_TEXT_BASE 0x40304350
-#define CONFIG_SPL_MAX_SIZE 0x1E000 /* 120K */
+#define CONFIG_SPL_TEXT_BASE 0x40300350
+#define CONFIG_SPL_MAX_SIZE 0x19000 /* 100K */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300 /* address 0x60000 */
diff --git a/include/configs/omap730p2.h b/include/configs/omap730p2.h
index 26e7e1f1e0..f7900e0d83 100644
--- a/include/configs/omap730p2.h
+++ b/include/configs/omap730p2.h
@@ -49,8 +49,6 @@
#undef CONFIG_USE_IRQ /* we don't need IRQ/FIQ stuff */
-#define CONFIG_MISC_INIT_R
-
#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
#define CONFIG_SETUP_MEMORY_TAGS 1
diff --git a/include/configs/origen.h b/include/configs/origen.h
index 8ede82575c..d4d0f84be6 100644
--- a/include/configs/origen.h
+++ b/include/configs/origen.h
@@ -69,9 +69,10 @@
#define EXYNOS4_DEFAULT_UART_OFFSET 0x020000
/* SD/MMC configuration */
-#define CONFIG_GENERIC_MMC 1
-#define CONFIG_MMC 1
-#define CONFIG_S5P_MMC 1
+#define CONFIG_GENERIC_MMC
+#define CONFIG_MMC
+#define CONFIG_SDHCI
+#define CONFIG_S5P_SDHCI
/* PWM */
#define CONFIG_PWM 1
@@ -82,7 +83,7 @@
/* Command definition*/
#include <config_cmd_default.h>
-#define CONFIG_CMD_PING
+#undef CONFIG_CMD_PING
#define CONFIG_CMD_ELF
#define CONFIG_CMD_DHCP
#define CONFIG_CMD_MMC
diff --git a/include/configs/otc570.h b/include/configs/otc570.h
index b322c775a1..85993789b9 100644
--- a/include/configs/otc570.h
+++ b/include/configs/otc570.h
@@ -215,7 +215,6 @@
# define CONFIG_SYS_NAND_MASK_CLE (1 << 22)
# define CONFIG_SYS_NAND_ENABLE_PIN AT91_PIO_PORTD, 15
# define CONFIG_SYS_NAND_READY_PIN AT91_PIO_PORTA, 22
-# define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#endif
/* Ethernet */
diff --git a/include/configs/p1_p2_rdb_pc.h b/include/configs/p1_p2_rdb_pc.h
index 3098c5acfe..04fd8d07f5 100644
--- a/include/configs/p1_p2_rdb_pc.h
+++ b/include/configs/p1_p2_rdb_pc.h
@@ -184,7 +184,7 @@
#define CONFIG_ENV_OVERWRITE
#define CONFIG_CMD_SATA
-#define CONFIG_SATA_SIL3114
+#define CONFIG_SATA_SIL
#define CONFIG_SYS_SATA_MAX_DEVICE 2
#define CONFIG_LIBATA
#define CONFIG_LBA48
@@ -227,7 +227,7 @@
/* DDR Setup */
#define CONFIG_FSL_DDR3
-#define CONFIG_DDR_RAW_TIMING
+#define CONFIG_SYS_DDR_RAW_TIMING
#define CONFIG_DDR_SPD
#define CONFIG_SYS_SPD_BUS_NUM 1
#define SPD_EEPROM_ADDRESS 0x52
@@ -534,9 +534,6 @@
#define CONFIG_OF_BOARD_SETUP
#define CONFIG_OF_STDOUT_VIA_ALIAS
-#define CONFIG_SYS_64BIT_VSPRINTF
-#define CONFIG_SYS_64BIT_STRTOUL
-
/* new uImage format support */
#define CONFIG_FIT
#define CONFIG_FIT_VERBOSE /* enable fit_format_{error,warning}() */
diff --git a/include/configs/pogo_e02.h b/include/configs/pogo_e02.h
new file mode 100644
index 0000000000..df46be5469
--- /dev/null
+++ b/include/configs/pogo_e02.h
@@ -0,0 +1,119 @@
+/*
+ * Copyright (C) 2012
+ * David Purdy <david.c.purdy@gmail.com>
+ *
+ * Based on Kirkwood support:
+ * (C) Copyright 2009
+ * Marvell Semiconductor <www.marvell.com>
+ * Written-by: Prafulla Wadaskar <prafulla@marvell.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef _CONFIG_POGO_E02_H
+#define _CONFIG_POGO_E02_H
+
+/*
+ * Machine type definition and ID
+ */
+#define MACH_TYPE_POGO_E02 3542
+#define CONFIG_MACH_TYPE MACH_TYPE_POGO_E02
+#define CONFIG_IDENT_STRING "\nPogo E02"
+
+/*
+ * High Level Configuration Options (easy to change)
+ */
+#define CONFIG_FEROCEON_88FR131 /* CPU Core subversion */
+#define CONFIG_KIRKWOOD /* SOC Family Name */
+#define CONFIG_KW88F6281 /* SOC Name */
+#define CONFIG_SKIP_LOWLEVEL_INIT /* disable board lowlevel_init */
+
+/*
+ * Commands configuration
+ */
+#define CONFIG_SYS_NO_FLASH /* Declare no flash (NOR/SPI) */
+#define CONFIG_SYS_MVFS
+#include <config_cmd_default.h>
+#define CONFIG_CMD_DHCP
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_MII
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_PING
+#define CONFIG_CMD_USB
+
+/*
+ * mv-common.h should be defined after CMD configs since it used them
+ * to enable certain macros
+ */
+#include "mv-common.h"
+
+/* Remove or override few declarations from mv-common.h */
+#undef CONFIG_SYS_PROMPT /* previously defined in mv-common.h */
+#define CONFIG_SYS_PROMPT "PogoE02> "
+
+/*
+ * Environment variables configurations
+ */
+#ifdef CONFIG_CMD_NAND
+#define CONFIG_ENV_IS_IN_NAND
+#define CONFIG_ENV_SECT_SIZE 0x20000 /* 128K */
+#else
+#define CONFIG_ENV_IS_NOWHERE
+#endif
+
+#define CONFIG_ENV_SIZE 0x20000 /* 128k */
+#define CONFIG_ENV_OFFSET 0x60000 /* env starts here */
+
+/*
+ * Default environment variables
+ */
+#define CONFIG_BOOTCOMMAND \
+ "setenv bootargs $(bootargs_console); " \
+ "run bootcmd_usb; " \
+ "bootm 0x00800000 0x01100000"
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "mtdparts=mtdparts=orion_nand:1M(u-boot),4M(uImage)," \
+ "32M(rootfs),-(data)\0"\
+ "mtdids=nand0=orion_nand\0"\
+ "bootargs_console=console=ttyS0,115200\0" \
+ "bootcmd_usb=usb start; ext2load usb 0:1 0x00800000 /uImage; " \
+ "ext2load usb 0:1 0x01100000 /uInitrd\0"
+
+/*
+ * Ethernet Driver configuration
+ */
+#ifdef CONFIG_CMD_NET
+#define CONFIG_MVGBE_PORTS {1, 0} /* enable port 0 only */
+#define CONFIG_PHY_BASE_ADR 0
+#endif /* CONFIG_CMD_NET */
+
+/*
+ * File system
+ */
+#define CONFIG_CMD_EXT2
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_JFFS2
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#define CONFIG_RBTREE
+#define CONFIG_MTD_DEVICE /* needed for mtdparts commands */
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_LZO
+
+#endif /* _CONFIG_POGO_E02_H */
diff --git a/include/configs/quad100hd.h b/include/configs/quad100hd.h
index dc5ec3aa82..5d0c385987 100644
--- a/include/configs/quad100hd.h
+++ b/include/configs/quad100hd.h
@@ -69,7 +69,6 @@
#define CONFIG_CMD_I2C
#undef CONFIG_CMD_IRQ
#define CONFIG_CMD_JFFS2
-#undef CONFIG_CMD_LOG
#undef CONFIG_CMD_MII
#define CONFIG_CMD_NAND
#undef CONFIG_CMD_PING
diff --git a/include/configs/r2dplus.h b/include/configs/r2dplus.h
index 0ce3fa864c..9cdfc147e9 100644
--- a/include/configs/r2dplus.h
+++ b/include/configs/r2dplus.h
@@ -15,7 +15,6 @@
*/
#include <config_cmd_default.h>
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_CACHE
#define CONFIG_CMD_FLASH
#define CONFIG_CMD_PCI
diff --git a/include/configs/rda8810.h b/include/configs/rda8810.h
new file mode 100644
index 0000000000..8e63b43f55
--- /dev/null
+++ b/include/configs/rda8810.h
@@ -0,0 +1,25 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <configs/rda_config_defaults.h>
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_RDA8810
+
+#define CONFIG_MACH_TYPE (5002)
+
+/*
+ * Flash & Environment
+ */
+/* #define CONFIG_NAND_RDA_DMA */
+#define CONFIG_NAND_RDA_V1 /* V1 for rda8810, rda8850 */
+#define CONFIG_SYS_NAND_MAX_CHIPS 1
+
+// Enable RDA signed bootloader:
+#define CONFIG_SIGNATURE_CHECK_IMAGE
+
+#define CONFIG_SYS_CACHELINE_SIZE 32
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/rda8810e.h b/include/configs/rda8810e.h
new file mode 100644
index 0000000000..998739f9fa
--- /dev/null
+++ b/include/configs/rda8810e.h
@@ -0,0 +1,28 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <configs/rda_config_defaults.h>
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_RDA8810E
+/* #define CONFIG_RDA_FPGA */
+
+/*
+ * Flash & Environment
+ */
+/* #define CONFIG_NAND_RDA_DMA */
+#define CONFIG_NAND_RDA_V2 /* V2 for rda8810e, rda8820 */
+#define CONFIG_SYS_NAND_MAX_CHIPS 1
+
+#define NAND_IO_RECONFIG_WORKROUND
+
+#ifdef _TGT_AP_HW_TEST_ENABLE
+/* force to run hardware test when pdl2 is running */
+//#define CONFIG_PDL_FORCE_HW_TEST
+/* test list */
+#define CONFIG_VPU_TEST
+#endif
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/rda8810h.h b/include/configs/rda8810h.h
new file mode 100644
index 0000000000..65121133fc
--- /dev/null
+++ b/include/configs/rda8810h.h
@@ -0,0 +1,40 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <configs/rda_config_defaults.h>
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_RDA8810H
+#define CONFIG_RDA_FPGA
+
+/*
+ * Flash & Environment
+ */
+/* #define CONFIG_NAND_RDA_DMA */
+#define CONFIG_NAND_RDA_V3
+#define CONFIG_SYS_NAND_MAX_CHIPS 4
+
+#define NAND_IO_RECONFIG_WORKROUND
+
+/* Enable RDA signed bootloader:*/
+/* #define CONFIG_SIGNATURE_CHECK_IMAGE */
+
+#ifdef _TGT_AP_HW_TEST_ENABLE
+/* force to run hardware test when pdl2 is running */
+//#define CONFIG_PDL_FORCE_HW_TEST
+/* test list */
+#define CONFIG_VPU_TEST
+/* #define CONFIG_DDR_TEST */
+/* #define CONFIG_TIMER_TEST */
+/* #define CONFIG_UART_TEST */
+/* #define CONFIG_GIC_TEST */
+/* #define CONFIG_CACHE_TEST */
+/* #define CONFIG_MIPI_LOOP_TEST */
+/* #define CONFIG_I2C_TEST */
+#endif
+
+#define CONFIG_SYS_CACHELINE_SIZE 64
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/rda8820.h b/include/configs/rda8820.h
new file mode 100644
index 0000000000..e9c2e2ad42
--- /dev/null
+++ b/include/configs/rda8820.h
@@ -0,0 +1,19 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <configs/rda_config_defaults.h>
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_RDA8820
+#define CONFIG_RDA_FPGA
+
+/*
+ * Flash & Environment
+ */
+/* #define CONFIG_NAND_RDA_DMA */
+#define CONFIG_NAND_RDA_V2 /* V2 for rda8810e, rda8820 */
+#define CONFIG_SYS_NAND_MAX_CHIPS 1
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/rda8850.h b/include/configs/rda8850.h
new file mode 100644
index 0000000000..3e44ff658c
--- /dev/null
+++ b/include/configs/rda8850.h
@@ -0,0 +1,19 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <configs/rda_config_defaults.h>
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_RDA8850
+/* #define CONFIG_RDA_FPGA */
+
+/*
+ * Flash & Environment
+ */
+/* #define CONFIG_NAND_RDA_DMA */
+#define CONFIG_NAND_RDA_V1 /* V1 for rda8810, rda8850 */
+#define CONFIG_SYS_NAND_MAX_CHIPS 1
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/rda8850e.h b/include/configs/rda8850e.h
new file mode 100644
index 0000000000..7f628e0ef7
--- /dev/null
+++ b/include/configs/rda8850e.h
@@ -0,0 +1,37 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+#include <configs/rda_config_defaults.h>
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_RDA8850E
+/*#define CONFIG_RDA_FPGA*/
+
+/* Enable RDA signed bootloader:*/
+/* #define CONFIG_SIGNATURE_CHECK_IMAGE */
+
+/*
+ * Flash & Environment
+ */
+/* #define CONFIG_NAND_RDA_DMA */
+#define CONFIG_NAND_RDA_V3 /* V3 for rda8850e*/
+#define CONFIG_SYS_NAND_MAX_CHIPS 4
+
+#define CONFIG_SYS_CACHELINE_SIZE 64
+
+#ifdef _TGT_AP_HW_TEST_ENABLE
+#define CONFIG_VPU_TEST
+/* #define CONFIG_DDR_TEST */
+/* #define CONFIG_TIMER_TEST */
+/* #define CONFIG_UART_TEST */
+/* #define CONFIG_GIC_TEST */
+/* #define CONFIG_CACHE_TEST */
+/* #define CONFIG_MIPI_LOOP_TEST */
+/* #define CONFIG_I2C_TEST */
+#endif
+
+#define CONFIG_USB_ACM_TWO_CHANS 1
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/rda_config_defaults.h b/include/configs/rda_config_defaults.h
new file mode 100644
index 0000000000..84cc9bf308
--- /dev/null
+++ b/include/configs/rda_config_defaults.h
@@ -0,0 +1,411 @@
+#ifndef __RDA_CONFIG_H__
+#define __RDA_CONFIG_H__
+
+#include <rda/tgt_ap_board_config.h>
+#include <rda/tgt_ap_clock_config.h>
+#define MEM_SIZE _TGT_AP_OS_MEM_SIZE
+
+/*
+ * Board
+ */
+#define CONFIG_RDA_MUX_CONFIG 1
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_ARMV7
+#define CONFIG_SYS_HZ_CLOCK 2000000 /* 2M */
+#define CONFIG_SYS_HZ 1000
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_SYS_TEXT_BASE 0x80008000
+/* #define CONFIG_SYS_ICACHE_OFF */
+/* #define CONFIG_SYS_DCACHE_OFF */
+/* #define CONFIG_SYS_NEON_OFF */
+
+/* Display CPU and Board Info */
+#define CONFIG_DISPLAY_CPUINFO 1
+#define CONFIG_DISPLAY_BOARDINFO 1
+/*
+ * Memory Info
+ */
+#define CONFIG_SYS_MALLOC_LEN (0x10000 + 16*1024*1024) /* malloc() len */
+#define PHYS_SDRAM_1 (0x80000000) /* DRAM Start */
+#define PHYS_SDRAM_1_SIZE ((MEM_SIZE) << 20)
+
+/* memtest start addr */
+#define CONFIG_SYS_MEMTEST_START (PHYS_SDRAM_1 + 0x00800000)
+
+/* memtest will be run on 16MB */
+#define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM_1 + 0x00800000 + 16*1024*1024)
+
+/* spl need 20k bytes for nand one page data load (max size is 16k page size) */
+#define CONFIG_SPL_NAND_MIDDLE_DATA_BUFFER (PHYS_SDRAM_1 + 0x01000000)
+
+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
+#define CONFIG_STACKSIZE (256*1024) /* regular stack */
+
+/*
+ * Serial Driver info
+ */
+#define CONFIG_BAUDRATE 921600 /* Default baud rate */
+#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 38400, 115200, 921600 }
+
+/*
+ * SD/MMC
+ */
+#define CONFIG_MMC
+#define CONFIG_EFI_PARTITION
+#define CONFIG_DOS_PARTITION
+/*#define CONFIG_RDA_MMC_LEGACY*/
+#define CONFIG_GENERIC_MMC
+#define CONFIG_RDA_MMC
+#define CONFIG_CMD_FAT
+#define CONFIG_CMD_EXT2
+/*
+ * ROM in U0B chips cannot provide information on the booting media, whereas
+ * SPL and U-BOOT must know the media type. The macro, CONFIG_SDMMC_BOOT,
+ * is introduced to tell SPL and U-BOOT that this is a SDMMC boot.
+ * The macro will be obsoleted for future chips, after ROM is updated to
+ * provide such information.
+ */
+/*#define CONFIG_SDMMC_BOOT*/
+
+#ifdef CONFIG_SDMMC_BOOT /* sdcard */
+#define CONFIG_MMC_DEV_NUM 0
+#define CONFIG_MMC_DEV_NAME "mmc0"
+#else /* emmc */
+#define CONFIG_MMC_DEV_NUM 1
+#define CONFIG_MMC_DEV_NAME "mmc1"
+#endif
+
+/*
+ * Misc drivers
+ */
+#define CONFIG_RDA_FACTORY 1
+#define CONFIG_RDA_PRDINFO 1
+#define CONFIG_CMD_PRDINFO 1
+
+/*
+ * I2C Configuration
+ */
+
+/*
+ * Flash & Environment
+ */
+#define CONFIG_NAND_RDA
+#define CONFIG_SYS_NAND_USE_FLASH_BBT
+#define CONFIG_SYS_NAND_PAGE_2K
+
+#define CONFIG_SYS_NAND_LARGEPAGE
+#define CONFIG_SYS_MAX_NAND_DEVICE 1
+
+#define CONFIG_SYS_NAND_BASE (PHYS_SDRAM_1 + 0x00800000)
+
+/*
+ * Console configuration
+ */
+#define CONFIG_SYS_PROMPT "RDA > " /* Command Prompt */
+#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + sizeof(CONFIG_SYS_PROMPT)+16)
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Arg Buf Sz */
+#define CONFIG_SYS_LOAD_ADDR (PHYS_SDRAM_1 + 0x02000000)
+#define CONFIG_VERSION_VARIABLE
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_CRC32_VERIFY
+#define CONFIG_MX_CYCLIC
+
+/*
+ * USB Configuration
+ */
+/*
+#define CONFIG_MUSB_HCD 1
+*/
+#define CONFIG_MUSB_UDC 1
+#define CONFIG_USB_RDA
+
+#ifdef CONFIG_MUSB_HCD
+#define MUSB_NO_MULTIPOINT
+#define CONFIG_CMD_USB
+#define CONFIG_USB_STORAGE
+#define CONFIG_FAT_WRITE
+#endif
+/*
+ *USB Gadget Configuration
+ */
+#ifdef CONFIG_MUSB_UDC
+#define CONFIG_RDA_USB_SERIAL
+#define CONFIG_USB_DEVICE
+#define CONFIG_USBD_HS
+#endif
+
+/*
+ * U-BOOT only configurations
+ */
+#ifndef CONFIG_SPL_BUILD
+
+#ifdef UBIFS_SYSTEM_IMAGE
+#define CONFIG_UBIFS_SYSTEM_IMAGE 1
+#endif
+
+#ifdef UBIFS_USER_IMAGES
+#define CONFIG_UBIFS_USER_IMAGES 1
+#endif
+
+#ifdef EXTFS_SYSTEM_IMAGE
+#define CONFIG_EXTFS_SYSTEM_IMAGE 1
+#endif
+
+#ifdef EXTFS_USER_IMAGES
+#define CONFIG_EXTFS_USER_IMAGES 1
+#endif
+/*#define CONFIG_SYS_NAND_BASE_LIST { (PHYS_SDRAM_1 + 0x00800000), } */
+
+/*
+ * U-boot USB Configuration
+ */
+
+#ifdef CONFIG_MUSB_UDC
+#define CONFIG_USB_FASTBOOT
+#define CONFIG_MUSB_DMA
+#define CONFIG_CMD_FASTBOOT
+#define CONFIG_CMD_PDL2
+#define SCRATCH_ADDR (PHYS_SDRAM_1 + 0x02000000) /* leave 32M for boot and test */
+#define FB_DOWNLOAD_BUF_SIZE (PHYS_SDRAM_1_SIZE - 0x02000000 - 0x800000) /* 216M */
+#endif
+
+/*
+ * U-Boot commands
+ */
+#include <config_cmd_default.h>
+#include <asm/arch/mtdparts_def.h>
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_SAVES
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_MMC
+#define CONFIG_CMD_HWFLOW
+
+/* modem commands */
+#define CONFIG_CMD_MDCOM
+
+#ifdef CONFIG_NAND_RDA
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_PARTITIONS
+/*
+#define CONFIG_MTD_DEBUG
+#define CONFIG_MTD_DEBUG_VERBOSE 3
+*/
+#define CONFIG_MTD_DEVICE
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NAND_YAFFS
+#define CONFIG_CMD_UBI
+#define CONFIG_CMD_UBIFS
+#define CONFIG_CMD_SOURCE
+#define CONFIG_CMD_BOOTZ
+#define CONFIG_RBTREE
+
+/*#define CONFIG_YAFFS2*/
+#define MTDIDS_DEFAULT "nand0=rda_nand"
+#define MTDPARTS_DEFAULT "mtdparts=rda_nand:"MTDPARTS_DEF
+#define MTDPARTS_KERNEL_DEFAULT "mtdparts=rda_nand:"MTDPARTS_KERNEL_DEF
+#endif
+
+/*
+ * U-BOOT library
+ */
+#define CONFIG_USE_ARCH_MEMCPY 1
+/*
+ * communication code between modem and ap
+ */
+#define CONFIG_MDCOM
+
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_DHCP
+#undef CONFIG_CMD_MII
+#undef CONFIG_CMD_PING
+#undef CONFIG_CMD_DNS
+#undef CONFIG_CMD_NFS
+#undef CONFIG_CMD_RARP
+#undef CONFIG_CMD_SNTP
+
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_SPI
+#undef CONFIG_CMD_SF
+#undef CONFIG_CMD_SAVEENV
+#undef CONFIG_CMD_SETGETDCR
+#undef CONFIG_CMD_XIMG
+#undef CONFIG_CMD_BDI
+#undef CONFIG_CMD_CONSOLE
+
+#undef CONFIG_BOOTM_NETBSD
+#undef CONFIG_BOOTM_RTEMS
+
+#define CONFIG_LZO
+
+/*
+ * Linux Information
+ */
+#define LINUX_BOOT_PARAM_ADDR (PHYS_SDRAM_1 + 0x100)
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_INITRD_TAG
+#define CONFIG_REVISION_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+// #define CONFIG_SERIAL_TAG
+
+/* The delay to check whether to stop auto boot */
+#define CONFIG_BOOTDELAY 1
+#define CONFIG_ZERO_BOOTDELAY_CHECK
+
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "script_addr=81000000\0" \
+ "modem_addr=82000000\0" \
+ "factorydata_addr=83000000\0" \
+ "kernel_addr=84000000\0" \
+ "initrd_addr=85000000\0" \
+ "boot_device=mmc\0" \
+ ""
+
+#define CONFIG_BOOTARGS \
+ "mem="MK_STR(MEM_SIZE)"M " \
+ "console=ttyS0," MK_STR(CONFIG_BAUDRATE) " " \
+ "root=/dev/ram rw " \
+ "rdinit=/init"
+
+#define CONFIG_BOOTCOMMAND \
+ "mux_config; " \
+ "mmc dev 0; " \
+ "ext2load mmc 0:1 ${script_addr} boot.scr && source ${script_addr};" \
+ "echo Running boot script failed;"
+
+#endif /* !CONFIG_SPL_BUILD */
+
+#if !defined(CONFIG_USE_NAND) && \
+ !defined(CONFIG_USE_NOR) && \
+ !defined(CONFIG_USE_SPIFLASH)
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_SYS_NO_FLASH
+#define CONFIG_ENV_SIZE (16 << 10)
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_ENV
+#endif
+
+/* additions for new relocation code, must added to all boards */
+#define CONFIG_SYS_SDRAM_BASE (PHYS_SDRAM_1)
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - GENERATED_GBL_DATA_SIZE)
+
+/*
+ * Defines for SPL
+ */
+#define CONFIG_SPL
+#define CONFIG_SYS_SRAM_BASE 0x00100000
+#define CONFIG_SYS_SRAM_SIZE 0x00010000 /* 64k */
+#define CONFIG_SPL_TEXT_BASE 0x00100100 /* first 4k leave for boot_rom bss */
+/*
+ * SPL Build for thumb code
+ */
+#define CONFIG_SPL_THUMB_BUILD 1
+/*
+ the spl code should be 48 KB,and must be aligned to page offset
+*/
+/* In nand driver V3,
+ the first page of nand is nand parameter,
+ it is invisible to uplayer except for nand dump command,
+ so we also think that spl offset is 0.
+ need add one page offset when read and write bootloader in nand driver v3.
+ In nand driver V1,
+ spl offset must be 0.
+*/
+#define NAND_START_ADDR 0
+#define CONFIG_SPL_NAND_OFFS (NAND_START_ADDR)
+#define CONFIG_SPL_MAX_SIZE 49152
+
+#define CONFIG_UIMAGEHDR_SIZE 0x40
+
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+#define CONFIG_DDR_CAL_VAL_SIZE 0x10
+#define CONFIG_SPL_CODE_MAX_SIZE 48880 //CONFIG_SPL_MAX_SIZE - CONFIG_DDR_CAL_VAL_SIZE - 0x100
+#else
+#define CONFIG_DDR_CAL_VAL_SIZE 0
+#define CONFIG_SPL_CODE_MAX_SIZE 48896 //CONFIG_SPL_MAX_SIZE - 0x100
+#endif
+
+#define CONFIG_SPL_BOARD_INFO_SIZE 512
+#define CONFIG_SPL_BOARD_INFO_ADDR (CONFIG_SYS_SRAM_BASE + CONFIG_SYS_SRAM_SIZE - CONFIG_SPL_BOARD_INFO_SIZE)
+
+#define CONFIG_TRAP_SIZE 0x00c0
+#define CONFIG_SPL_LOAD_ADDRESS (CONFIG_SYS_SRAM_BASE + CONFIG_TRAP_SIZE)
+
+#define CONFIG_SPL_STACK CONFIG_SPL_BOARD_INFO_ADDR
+
+#define CONFIG_SPL_BOARD_INIT
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+#define CONFIG_SPL_SERIAL_SUPPORT
+#define CONFIG_SPL_YMODEM_SUPPORT
+#define CONFIG_SPL_IMAGE_SUPPORT
+
+#define CONFIG_MTD_PTBL_OFFS (CONFIG_SPL_NAND_OFFS + CONFIG_SPL_MAX_SIZE)
+#define CONFIG_MTD_PTBL_SIZE ((SPL_APPENDING_TO-CONFIG_SPL_MAX_SIZE/1024)*1024)
+#define CONFIG_SYS_BOOTLOADER_MAX_SIZE (1024*1024)
+
+#ifndef CONFIG_RDA_PDL
+/* Check uimage*/
+#define CONFIG_SPL_CHECK_IMAGE
+
+/* NAND boot */
+#define CONFIG_SPL_NAND_LOAD
+/* EMMC boot */
+#define CONFIG_SPL_EMMC_LOAD
+/* XMODME boot */
+#define CONFIG_SPL_XMODEM_LOAD
+
+/* XMODEM load configs */
+#ifdef CONFIG_SPL_XMODEM_LOAD
+#define CONFIG_SYS_XMODEM_U_BOOT_START CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_XMODEM_U_BOOT_DST (CONFIG_SYS_TEXT_BASE - 64)
+#endif
+
+/*
+ * NAND load configs
+*/
+#ifdef CONFIG_SPL_NAND_LOAD
+#define CONFIG_SPL_NAND_SUPPORT
+#define CONFIG_SPL_NAND_SIMPLE
+
+#define CONFIG_SYS_NAND_U_BOOT_START CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_NAND_U_BOOT_OFFS (CONFIG_SPL_NAND_OFFS + CONFIG_SPL_MAX_SIZE + CONFIG_MTD_PTBL_SIZE)
+#define CONFIG_SYS_NAND_U_BOOT_SIZE (CONFIG_SYS_BOOTLOADER_MAX_SIZE - CONFIG_MTD_PTBL_SIZE - CONFIG_SPL_MAX_SIZE - CONFIG_SPL_NAND_OFFS)
+#define CONFIG_SYS_NAND_U_BOOT_DST (CONFIG_SYS_TEXT_BASE - 64)
+#endif /* CONFIG_SPL_NAND_LOAD */
+
+/*
+ * EMMC load configs
+ */
+#ifdef CONFIG_SPL_EMMC_LOAD
+#define CONFIG_SPL_EMMC_SUPPORT
+
+#define CONFIG_SPL_EMMC_OFFS 0x20000
+
+#define CONFIG_SYS_EMMC_U_BOOT_START CONFIG_SYS_TEXT_BASE
+#define CONFIG_SYS_EMMC_U_BOOT_OFFS (CONFIG_SPL_EMMC_OFFS + CONFIG_SPL_MAX_SIZE + CONFIG_MTD_PTBL_SIZE)
+#define CONFIG_SYS_EMMC_U_BOOT_SIZE (CONFIG_SYS_BOOTLOADER_MAX_SIZE - CONFIG_MTD_PTBL_SIZE - CONFIG_SPL_MAX_SIZE - CONFIG_SPL_EMMC_OFFS)
+#define CONFIG_SYS_EMMC_U_BOOT_DST (CONFIG_SYS_TEXT_BASE - 64)
+#endif /* CONFIG_SPL_EMMC_LOAD */
+
+#else /* CONFIG_RDA_PDL */
+
+#define CONFIG_SPL_USB_SUPPORT
+#define CONFIG_SPL_MUSB_UDC_SUPPORT
+#define CONFIG_SPL_RDA_PDL
+
+#endif /* CONFIG_RDA_PDL */
+
+#define CONIFG_DDR_CAL_VAL_FLAG 0xA1B2
+#define CONFIG_DDR_CAL_SEC_OFFS CONFIG_SPL_MAX_SIZE - CONFIG_DDR_CAL_VAL_SIZE - 0x100
+#endif /* __RDA_CONFIG_H__ */
diff --git a/include/configs/rdaarm926ejs.h b/include/configs/rdaarm926ejs.h
new file mode 100644
index 0000000000..aac6b05f29
--- /dev/null
+++ b/include/configs/rdaarm926ejs.h
@@ -0,0 +1,218 @@
+#ifndef __CONFIG_H
+#define __CONFIG_H
+
+/*
+ * Board
+ */
+
+/*
+ * SoC Configuration
+ */
+#define CONFIG_MACH_RDAARM926EJS
+#define CONFIG_ARM926EJS /* arm926ejs CPU core */
+#define CONFIG_SYS_HZ_CLOCK 16384
+#define CONFIG_SYS_HZ 1000
+#define CONFIG_SKIP_LOWLEVEL_INIT
+#define CONFIG_SYS_TEXT_BASE 0x84008000
+
+/*
+ * Memory Info
+ */
+#define CONFIG_SYS_MALLOC_LEN (0x10000 + 1*1024*1024) /* malloc() len */
+#define PHYS_SDRAM_1 0x84000000 /* DDR Start */
+#define PHYS_SDRAM_1_SIZE (64 << 20) /* SDRAM size 32MB */
+#define CONFIG_MAX_RAM_BANK_SIZE (64 << 20) /* max size from RDA */
+
+/* memtest start addr */
+#define CONFIG_SYS_MEMTEST_START (PHYS_SDRAM_1 + 0x00800000)
+
+/* memtest will be run on 16MB */
+#define CONFIG_SYS_MEMTEST_END (PHYS_SDRAM_1 + 0x00800000 + 16*1024*1024)
+
+#define CONFIG_NR_DRAM_BANKS 1 /* we have 1 bank of DRAM */
+#define CONFIG_STACKSIZE (256*1024) /* regular stack */
+
+/*
+ * Serial Driver info
+ */
+#define CONFIG_BAUDRATE 921600 /* Default baud rate */
+#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 38400, 115200, 921600 }
+
+/*
+ * SD/MMC
+ */
+#define CONFIG_MMC
+#define CONFIG_DOS_PARTITION
+/*#define CONFIG_RDA_MMC_LEGACY*/
+#define CONFIG_GENERIC_MMC
+#define CONFIG_RDA_MMC
+
+/*
+ * I2C Configuration
+ */
+
+/*
+ * Flash & Environment
+ */
+#define CONFIG_NAND_RDA
+#define CONFIG_SYS_NAND_USE_FLASH_BBT
+/*#define CONFIG_SYS_NAND_HW_ECC*/
+/*#define CONFIG_SYS_NAND_4BIT_HW_ECC_OOBFIRST*/
+#define CONFIG_SYS_NAND_PAGE_2K
+
+#define CONFIG_SYS_NAND_LARGEPAGE
+#define CONFIG_SYS_NAND_BASE 0x01a26000
+/*#define CONFIG_SYS_NAND_BASE_LIST { 0x01a26000, } */
+#define CONFIG_SYS_MAX_NAND_DEVICE 1
+#define CONFIG_SYS_NAND_MAX_CHIPS 1
+
+/*
+ * Network & Ethernet Configuration
+ */
+
+/*
+ *USB Gadget Configuration
+ */
+
+#define CONFIG_USB_RDA
+#define CONFIG_MUSB_UDC
+/*
+#define CONFIG_USB_TTY
+*/
+#define CONFIG_USB_DEVICE
+#define CONFIG_USBD_HS
+#define CONFIG_USB_FASTBOOT
+#define CONFIG_CMD_FASTBOOT
+/*
+#define CONFIG_USB_GADGET
+#define CONFIG_USB_GADGET_DUALSPEED
+#define CONFIG_USB_GADGET_RDA
+#define CONFIG_USB_FASTBOOT
+#define CONFIG_CMD_FASTBOOT
+*/
+#define SCRATCH_ADDR 0x86000000
+#define FB_DOWNLOAD_BUF_SIZE (100*1024*1024)
+
+/*
+ * U-Boot general configuration
+ */
+#define CONFIG_BOOTFILE "uImage" /* Boot file name */
+#define CONFIG_SYS_PROMPT "RDA > " /* Command Prompt */
+#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
+#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE+sizeof(CONFIG_SYS_PROMPT)+16)
+#define CONFIG_SYS_MAXARGS 16 /* max number of command args */
+#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE /* Boot Args Buffer Size */
+#define CONFIG_SYS_LOAD_ADDR (PHYS_SDRAM_1 + 0x700000)
+#define CONFIG_VERSION_VARIABLE
+#define CONFIG_AUTO_COMPLETE
+#define CONFIG_SYS_HUSH_PARSER
+#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
+#define CONFIG_CMDLINE_EDITING
+#define CONFIG_SYS_LONGHELP
+#define CONFIG_CRC32_VERIFY
+#define CONFIG_MX_CYCLIC
+
+/*
+ * Environment settings
+ */
+#define CONFIG_EXTRA_ENV_SETTINGS \
+ "usbtty=cdc_acm\0"
+/*
+ * Linux Information
+ */
+#define LINUX_BOOT_PARAM_ADDR (PHYS_SDRAM_1 + 0x100)
+#define CONFIG_CMDLINE_TAG
+#define CONFIG_INITRD_TAG
+#define CONFIG_REVISION_TAG
+#define CONFIG_SETUP_MEMORY_TAGS
+#define CONFIG_BOOTARGS \
+ "mem=64M console=ttyS0,115200n8 root=/dev/ram rw rdinit=/linuxrc init=/init "
+#define CONFIG_BOOTDELAY 3
+
+/*
+ * U-Boot commands
+ */
+#include <config_cmd_default.h>
+#define CONFIG_CMD_ENV
+#define CONFIG_CMD_ASKENV
+#define CONFIG_CMD_DIAG
+#define CONFIG_CMD_SAVES
+#define CONFIG_CMD_MEMORY
+#define CONFIG_CMD_MMC
+
+#ifdef CONFIG_NAND_RDA
+#define CONFIG_CMD_MTDPARTS
+#define CONFIG_MTD_PARTITIONS
+#define CONFIG_MTD_DEVICE
+#define CONFIG_CMD_NAND
+#define CONFIG_CMD_NAND_YAFFS
+/*#define CONFIG_CMD_UBI*/
+/*#define CONFIG_CMD_UBIFS*/
+#define CONFIG_YAFFS2
+#define CONFIG_RBTREE
+#define MTDIDS_DEFAULT "nand0=rda_nand"
+#define MTDPARTS_DEFAULT "mtdparts=rda_nand:128k@0(preloader)," \
+ "256k(config)," \
+ "128k(u-boot_env)," \
+ "512k(test_image)," \
+ "1M(u-boot)," \
+ "6M(kernel)," \
+ "504M(system)," \
+ "-(data)"
+#endif
+
+#undef CONFIG_CMD_NET
+#undef CONFIG_CMD_DHCP
+#undef CONFIG_CMD_MII
+#undef CONFIG_CMD_PING
+#undef CONFIG_CMD_DNS
+#undef CONFIG_CMD_NFS
+#undef CONFIG_CMD_RARP
+#undef CONFIG_CMD_SNTP
+
+#undef CONFIG_CMD_FLASH
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_SPI
+#undef CONFIG_CMD_SF
+#undef CONFIG_CMD_SAVEENV
+
+#if !defined(CONFIG_USE_NAND) && \
+ !defined(CONFIG_USE_NOR) && \
+ !defined(CONFIG_USE_SPIFLASH)
+#define CONFIG_ENV_IS_NOWHERE
+#define CONFIG_SYS_NO_FLASH
+#define CONFIG_ENV_SIZE (16 << 10)
+#undef CONFIG_CMD_IMLS
+#undef CONFIG_CMD_ENV
+#endif
+
+/* additions for new relocation code, must added to all boards */
+#define CONFIG_SYS_SDRAM_BASE 0x84000000
+#define CONFIG_SYS_INIT_SP_ADDR (CONFIG_SYS_SDRAM_BASE + 0x1000 - /* Fix this */ \
+ GENERATED_GBL_DATA_SIZE)
+
+/* Defines for SPL */
+#define CONFIG_SPL
+#define CONFIG_SPL_NAND_SIMPLE
+#define CONFIG_SYS_SRAM_BASE 0x01c00000
+#define CONFIG_SYS_SRAM_SIZE 0x00008000 /* 32k */
+#define CONFIG_SPL_TEXT_BASE 0x01c01000 /* first 4k leave for boot_rom bss */
+#define CONFIG_SPL_MAX_SIZE (20 * 1024) /* 8 KB for stack */
+#define CONFIG_SPL_STACK (CONFIG_SYS_SRAM_BASE + CONFIG_SYS_SRAM_SIZE)
+
+#define CONFIG_SPL_BSS_START_ADDR CONFIG_SYS_SRAM_BASE /* reuse boot_rom bss */
+#define CONFIG_SPL_BSS_MAX_SIZE 0x1000 /* 4 KB */
+
+#define CONFIG_SPL_BOARD_INIT
+#define CONFIG_SPL_LIBCOMMON_SUPPORT
+/*#define CONFIG_SPL_LIBDISK_SUPPORT*/
+/*#define CONFIG_SPL_I2C_SUPPORT*/
+#define CONFIG_SPL_LIBGENERIC_SUPPORT
+/*#define CONFIG_SPL_MMC_SUPPORT*/
+/*#define CONFIG_SPL_FAT_SUPPORT*/
+#define CONFIG_SPL_SERIAL_SUPPORT
+/*#define CONFIG_SPL_NAND_SUPPORT*/
+/*#define CONFIG_SPL_POWER_SUPPORT*/
+/*#define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/omap-common/u-boot-spl.lds"*/
+
+#endif /* __CONFIG_H */
diff --git a/include/configs/s5p_goni.h b/include/configs/s5p_goni.h
index 56b5547fd2..e133a17259 100644
--- a/include/configs/s5p_goni.h
+++ b/include/configs/s5p_goni.h
@@ -63,9 +63,10 @@
#define CONFIG_BAUDRATE 115200
/* MMC */
-#define CONFIG_GENERIC_MMC 1
-#define CONFIG_MMC 1
-#define CONFIG_S5P_MMC 1
+#define CONFIG_GENERIC_MMC
+#define CONFIG_MMC
+#define CONFIG_SDHCI
+#define CONFIG_S5P_SDHCI
/* PWM */
#define CONFIG_PWM 1
diff --git a/include/configs/s5pc210_universal.h b/include/configs/s5pc210_universal.h
index 13012756ab..00db374182 100644
--- a/include/configs/s5pc210_universal.h
+++ b/include/configs/s5pc210_universal.h
@@ -66,9 +66,10 @@
#define CONFIG_BAUDRATE 115200
/* MMC */
-#define CONFIG_GENERIC_MMC 1
-#define CONFIG_MMC 1
-#define CONFIG_S5P_MMC 1
+#define CONFIG_GENERIC_MMC
+#define CONFIG_MMC
+#define CONFIG_SDHCI
+#define CONFIG_S5P_SDHCI
/* PWM */
#define CONFIG_PWM 1
diff --git a/include/configs/seaboard.h b/include/configs/seaboard.h
index ae075e786e..46d42281b7 100644
--- a/include/configs/seaboard.h
+++ b/include/configs/seaboard.h
@@ -25,6 +25,14 @@
#define __CONFIG_H
#include <asm/sizes.h>
+
+/* LP0 suspend / resume */
+#define CONFIG_TEGRA2_LP0
+#define CONFIG_AES
+#define CONFIG_TEGRA_PMU
+#define CONFIG_TPS6586X_POWER
+#define CONFIG_TEGRA_CLOCK_SCALING
+
#include "tegra2-common.h"
/* Enable fdt support for Seaboard. Flash the image in u-boot-dtb.bin */
@@ -92,4 +100,12 @@
#define CONFIG_USB_STORAGE
#define CONFIG_CMD_USB
+/* Enable keyboard */
+#define CONFIG_TEGRA2_KEYBOARD
+#define CONFIG_KEYBOARD
+
+#undef TEGRA2_DEVICE_SETTINGS
+#define TEGRA2_DEVICE_SETTINGS "stdin=serial,tegra-kbc\0" \
+ "stdout=serial\0" \
+ "stderr=serial\0"
#endif /* __CONFIG_H */
diff --git a/include/configs/sh7757lcr.h b/include/configs/sh7757lcr.h
index 73d2a87596..708bff7bb7 100644
--- a/include/configs/sh7757lcr.h
+++ b/include/configs/sh7757lcr.h
@@ -41,7 +41,6 @@
#define CONFIG_CMD_MII
#define CONFIG_CMD_PING
#define CONFIG_CMD_NFS
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_SDRAM
#define CONFIG_CMD_SF
#define CONFIG_CMD_RUN
diff --git a/include/configs/sh7785lcr.h b/include/configs/sh7785lcr.h
index 1e71bcc3ef..9c32bfc58b 100644
--- a/include/configs/sh7785lcr.h
+++ b/include/configs/sh7785lcr.h
@@ -37,7 +37,6 @@
#define CONFIG_CMD_NET
#define CONFIG_CMD_PING
#define CONFIG_CMD_NFS
-#define CONFIG_CMD_DFL
#define CONFIG_CMD_SDRAM
#define CONFIG_CMD_RUN
#define CONFIG_CMD_SAVEENV
diff --git a/include/configs/smdk5250.h b/include/configs/smdk5250.h
index 9659f9ebd9..0f63040d25 100644
--- a/include/configs/smdk5250.h
+++ b/include/configs/smdk5250.h
@@ -78,7 +78,8 @@
/* SD/MMC configuration */
#define CONFIG_GENERIC_MMC
#define CONFIG_MMC
-#define CONFIG_S5P_MMC
+#define CONFIG_SDHCI
+#define CONFIG_S5P_SDHCI
#define CONFIG_BOARD_EARLY_INIT_F
diff --git a/include/configs/smdkv310.h b/include/configs/smdkv310.h
index 93c25da1cf..702134bda3 100644
--- a/include/configs/smdkv310.h
+++ b/include/configs/smdkv310.h
@@ -68,9 +68,10 @@
#define EXYNOS4_DEFAULT_UART_OFFSET 0x010000
/* SD/MMC configuration */
-#define CONFIG_GENERIC_MMC 1
-#define CONFIG_MMC 1
-#define CONFIG_S5P_MMC 1
+#define CONFIG_GENERIC_MMC
+#define CONFIG_MMC
+#define CONFIG_SDHCI
+#define CONFIG_S5P_SDHCI
/* PWM */
#define CONFIG_PWM 1
diff --git a/include/configs/spear-common.h b/include/configs/spear-common.h
index 5fef8cce80..ab1b33209e 100644
--- a/include/configs/spear-common.h
+++ b/include/configs/spear-common.h
@@ -41,7 +41,7 @@
/* I2C driver configuration */
#define CONFIG_HARD_I2C
-#define CONFIG_SPEAR_I2C
+#define CONFIG_DW_I2C
#define CONFIG_SYS_I2C_SPEED 400000
#define CONFIG_SYS_I2C_SLAVE 0x02
@@ -196,7 +196,6 @@
#define CONFIG_SYS_BARGSIZE CONFIG_SYS_CBSIZE
#define CONFIG_SYS_LOAD_ADDR 0x00800000
#define CONFIG_SYS_CONSOLE_INFO_QUIET 1
-#define CONFIG_SYS_64BIT_VSPRINTF 1
#define CONFIG_EXTRA_ENV_SETTINGS CONFIG_EXTRA_ENV_USBTTY
diff --git a/include/configs/tam3517-common.h b/include/configs/tam3517-common.h
index 4c4321d2ff..3fc2c44349 100644
--- a/include/configs/tam3517-common.h
+++ b/include/configs/tam3517-common.h
@@ -146,7 +146,6 @@
#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of */
/* NAND devices */
-#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
#define CONFIG_AUTO_COMPLETE
@@ -258,7 +257,7 @@
#define CONFIG_SPL_LDSCRIPT "$(CPUDIR)/omap-common/u-boot-spl.lds"
#define CONFIG_SPL_TEXT_BASE 0x40200000 /*CONFIG_SYS_SRAM_START*/
-#define CONFIG_SPL_MAX_SIZE (45 << 10) /* 45 K */
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SYS_SPL_MALLOC_START 0x8f000000
diff --git a/include/configs/tegra2-common.h b/include/configs/tegra2-common.h
index 837f859c7c..068ce8855f 100644
--- a/include/configs/tegra2-common.h
+++ b/include/configs/tegra2-common.h
@@ -26,6 +26,14 @@
#include <asm/sizes.h>
/*
+ * QUOTE(m) will evaluate to a string version of the value of the macro m
+ * passed in. The extra level of indirection here is to first evaluate the
+ * macro m before applying the quoting operator.
+ */
+#define QUOTE_(m) #m
+#define QUOTE(m) QUOTE_(m)
+
+/*
* High Level Configuration Options
*/
#define CONFIG_ARMCORTEXA9 /* This is an ARM V7 CPU core */
@@ -50,6 +58,15 @@
#define CONFIG_CMDLINE_TAG /* enable passing of ATAGs */
#define CONFIG_OF_LIBFDT /* enable passing of devicetree */
+#ifdef CONFIG_TEGRA2_LP0
+#define TEGRA_LP0_ADDR 0x1C406000
+#define TEGRA_LP0_SIZE 0x2000
+#define TEGRA_LP0_VEC \
+ "lp0_vec=" QUOTE(TEGRA_LP0_SIZE) "@" QUOTE(TEGRA_LP0_ADDR) " "
+#else
+#define TEGRA_LP0_VEC
+#endif
+
/* Environment */
#define CONFIG_ENV_SIZE 0x2000 /* Total Size Environment */
@@ -115,11 +132,18 @@
#define CONFIG_SYS_NO_FLASH
-/* Environment information */
+/* Environment information, boards can override if required */
+#define CONFIG_CONSOLE_MUX
+#define CONFIG_SYS_CONSOLE_IS_IN_ENV
+#define TEGRA2_DEVICE_SETTINGS "stdin=serial\0" \
+ "stdout=serial\0" \
+ "stderr=serial\0"
+
#define CONFIG_EXTRA_ENV_SETTINGS \
"console=ttyS0,115200n8\0" \
"mem=" TEGRA2_SYSMEM "\0" \
"smpflag=smp\0" \
+ TEGRA2_DEVICE_SETTINGS
#define CONFIG_LOADADDR 0x408000 /* def. location for kernel */
#define CONFIG_BOOTDELAY 2 /* -1 to disable auto boot */
diff --git a/include/configs/trats.h b/include/configs/trats.h
index 10f11d9579..ef6510e67d 100644
--- a/include/configs/trats.h
+++ b/include/configs/trats.h
@@ -53,7 +53,6 @@
#define CONFIG_SETUP_MEMORY_TAGS
#define CONFIG_CMDLINE_TAG
-#define CONFIG_INITRD_TAG
#define CONFIG_REVISION_TAG
#define CONFIG_CMDLINE_EDITING
#define CONFIG_SKIP_LOWLEVEL_INIT
@@ -74,7 +73,8 @@
/* MMC */
#define CONFIG_GENERIC_MMC
#define CONFIG_MMC
-#define CONFIG_S5P_MMC
+#define CONFIG_S5P_SDHCI
+#define CONFIG_SDHCI
/* PWM */
#define CONFIG_PWM
@@ -174,9 +174,9 @@
/* TRATS has 2 banks of DRAM */
#define CONFIG_NR_DRAM_BANKS 2
#define PHYS_SDRAM_1 CONFIG_SYS_SDRAM_BASE /* LDDDR2 DMC 0 */
-#define PHYS_SDRAM_1_SIZE (256 << 20) /* 256 MB in CS 0 */
+#define PHYS_SDRAM_1_SIZE (512 << 20) /* 512 MB in CS 0 */
#define PHYS_SDRAM_2 0x50000000 /* LPDDR2 DMC 1 */
-#define PHYS_SDRAM_2_SIZE (256 << 20) /* 256 MB in CS 0 */
+#define PHYS_SDRAM_2_SIZE (512 << 20) /* 512 MB in CS 0 */
#define CONFIG_SYS_MEM_TOP_HIDE (1 << 20) /* ram console */
@@ -208,10 +208,18 @@
#define CONFIG_PMIC
#define CONFIG_PMIC_I2C
-#define CONFIG_PMIC_MAX8998
+#define CONFIG_PMIC_MAX8997
#define CONFIG_USB_GADGET
#define CONFIG_USB_GADGET_S3C_UDC_OTG
#define CONFIG_USB_GADGET_DUALSPEED
+/* LCD */
+#define CONFIG_EXYNOS_FB
+#define CONFIG_LCD
+#define CONFIG_FB_ADDR 0x52504000
+#define CONFIG_S6E8AX0
+#define CONFIG_EXYNOS_MIPI_DSIM
+#define CONFIG_SYS_VIDEO_LOGO_MAX_SIZE (1280 * 720 * 4)
+
#endif /* __CONFIG_H */
diff --git a/include/configs/tricorder.h b/include/configs/tricorder.h
index 801a24fd88..9955fca476 100644
--- a/include/configs/tricorder.h
+++ b/include/configs/tricorder.h
@@ -278,6 +278,7 @@
#define CONFIG_SPL
#define CONFIG_SPL_NAND_SIMPLE
+#define CONFIG_SPL_BOARD_INIT
#define CONFIG_SPL_LIBCOMMON_SUPPORT
#define CONFIG_SPL_LIBDISK_SUPPORT
#define CONFIG_SPL_I2C_SUPPORT
@@ -293,7 +294,7 @@
#define CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR 0x300 /* address 0x60000 */
#define CONFIG_SPL_TEXT_BASE 0x40200000 /*CONFIG_SYS_SRAM_START*/
-#define CONFIG_SPL_MAX_SIZE 0xB400 /* 45 K */
+#define CONFIG_SPL_MAX_SIZE (54 * 1024) /* 8 KB for stack */
#define CONFIG_SPL_STACK LOW_LEVEL_SRAM_STACK
#define CONFIG_SPL_BSS_START_ADDR 0x80000000 /*CONFIG_SYS_SDRAM_BASE*/
diff --git a/include/configs/tx25.h b/include/configs/tx25.h
index 87bd8a6756..3dfafa5077 100644
--- a/include/configs/tx25.h
+++ b/include/configs/tx25.h
@@ -117,8 +117,6 @@
#define CONFIG_MXC_NAND_HWECC
#define CONFIG_SYS_NAND_LARGEPAGE
-#define CONFIG_SYS_64BIT_VSPRINTF
-
/* U-Boot general configuration */
#define CONFIG_SYS_PROMPT "=> " /* Monitor Command Prompt */
#define CONFIG_SYS_CBSIZE 1024 /* Console I/O Buffer Size */
diff --git a/include/configs/u8500_href.h b/include/configs/u8500_href.h
index 4747fbd351..95028de059 100644
--- a/include/configs/u8500_href.h
+++ b/include/configs/u8500_href.h
@@ -95,7 +95,6 @@
#define CONFIG_CMD_MMC
#define CONFIG_CMD_FAT
#define CONFIG_CMD_EXT2
-#define CONFIG_CMD_EMMC
#define CONFIG_CMD_SOURCE
#define CONFIG_CMD_I2C
diff --git a/include/configs/zeus.h b/include/configs/zeus.h
index 63279b01ce..2556e3b3ef 100644
--- a/include/configs/zeus.h
+++ b/include/configs/zeus.h
@@ -78,7 +78,6 @@
#define CONFIG_CMD_ELF
#define CONFIG_CMD_I2C
#define CONFIG_CMD_IRQ
-#define CONFIG_CMD_LOG
#define CONFIG_CMD_MII
#define CONFIG_CMD_NET
#define CONFIG_CMD_NFS
diff --git a/include/configs/zmx25.h b/include/configs/zmx25.h
index 599d5bb42a..d7ce6c64de 100644
--- a/include/configs/zmx25.h
+++ b/include/configs/zmx25.h
@@ -93,8 +93,6 @@
#define CONFIG_CMD_NET
#define CONFIG_CMD_CACHE
-#define CONFIG_SYS_64BIT_VSPRINTF
-
/*
* Additional command
*/
diff --git a/include/dialog_pmic.h b/include/dialog_pmic.h
new file mode 100644
index 0000000000..8d43585e24
--- /dev/null
+++ b/include/dialog_pmic.h
@@ -0,0 +1,187 @@
+/*
+ * da9053 register declarations.
+ *
+ * Copyright(c) 2009 Dialog Semiconductor Ltd.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ *
+ */
+
+#ifndef __DIALOG_PMIC_H__
+#define __DIALOG_PMIC_H__
+
+enum {
+ DA9053_PAGECON0_REG = 0,
+ DA9053_STATUSA_REG,
+ DA9053_STATUSB_REG,
+ DA9053_STATUSC_REG,
+ DA9053_STATUSD_REG,
+ DA9053_EVENTA_REG,
+ DA9053_EVENTB_REG,
+ DA9053_EVENTC_REG,
+ DA9053_EVENTD_REG,
+ DA9053_FAULTLOG_REG,
+ DA9053_IRQMASKA_REG,
+ DA9053_IRQMASKB_REG,
+ DA9053_IRQMASKC_REG,
+ DA9053_IRQMASKD_REG,
+ DA9053_CONTROLA_REG,
+ DA9053_CONTROLB_REG,
+ DA9053_CONTROLC_REG,
+ DA9053_CONTROLD_REG,
+ DA9053_PDDIS_REG,
+ DA9053_INTERFACE_REG,
+ DA9053_RESET_REG,
+ DA9053_GPIO0001_REG,
+ DA9053_GPIO0203_REG,
+ DA9053_GPIO0405_REG,
+ DA9053_GPIO0607_REG,
+ DA9053_GPIO0809_REG,
+ DA9053_GPIO1011_REG,
+ DA9053_GPIO1213_REG,
+ DA9053_GPIO1415_REG,
+ DA9053_ID01_REG,
+ DA9053_ID23_REG,
+ DA9053_ID45_REG,
+ DA9053_ID67_REG,
+ DA9053_ID89_REG,
+ DA9053_ID1011_REG,
+ DA9053_ID1213_REG,
+ DA9053_ID1415_REG,
+ DA9053_ID1617_REG,
+ DA9053_ID1819_REG,
+ DA9053_ID2021_REG,
+ DA9053_SEQSTATUS_REG,
+ DA9053_SEQA_REG,
+ DA9053_SEQB_REG,
+ DA9053_SEQTIMER_REG,
+ DA9053_BUCKA_REG,
+ DA9053_BUCKB_REG,
+ DA9053_BUCKCORE_REG,
+ DA9053_BUCKPRO_REG,
+ DA9053_BUCKMEM_REG,
+ DA9053_BUCKPERI_REG,
+ DA9053_LDO1_REG,
+ DA9053_LDO2_REG,
+ DA9053_LDO3_REG,
+ DA9053_LDO4_REG,
+ DA9053_LDO5_REG,
+ DA9053_LDO6_REG,
+ DA9053_LDO7_REG,
+ DA9053_LDO8_REG,
+ DA9053_LDO9_REG,
+ DA9053_LDO10_REG,
+ DA9053_SUPPLY_REG,
+ DA9053_PULLDOWN_REG,
+ DA9053_CHGBUCK_REG,
+ DA9053_WAITCONT_REG,
+ DA9053_ISET_REG,
+ DA9053_BATCHG_REG,
+ DA9053_CHGCONT_REG,
+ DA9053_INPUTCONT_REG,
+ DA9053_CHGTIME_REG,
+ DA9053_BBATCONT_REG,
+ DA9053_BOOST_REG,
+ DA9053_LEDCONT_REG,
+ DA9053_LEDMIN123_REG,
+ DA9053_LED1CONF_REG,
+ DA9053_LED2CONF_REG,
+ DA9053_LED3CONF_REG,
+ DA9053_LED1CONT_REG,
+ DA9053_LED2CONT_REG,
+ DA9053_LED3CONT_REG,
+ DA9053_LED4CONT_REG,
+ DA9053_LED5CONT_REG,
+ DA9053_ADCMAN_REG,
+ DA9053_ADCCONT_REG,
+ DA9053_ADCRESL_REG,
+ DA9053_ADCRESH_REG,
+ DA9053_VDDRES_REG,
+ DA9053_VDDMON_REG,
+ DA9053_ICHGAV_REG,
+ DA9053_ICHGTHD_REG,
+ DA9053_ICHGEND_REG,
+ DA9053_TBATRES_REG,
+ DA9053_TBATHIGHP_REG,
+ DA9053_TBATHIGHIN_REG,
+ DA9053_TBATLOW_REG,
+ DA9053_TOFFSET_REG,
+ DA9053_ADCIN4RES_REG,
+ DA9053_AUTO4HIGH_REG,
+ DA9053_AUTO4LOW_REG,
+ DA9053_ADCIN5RES_REG,
+ DA9053_AUTO5HIGH_REG,
+ DA9053_AUTO5LOW_REG,
+ DA9053_ADCIN6RES_REG,
+ DA9053_AUTO6HIGH_REG,
+ DA9053_AUTO6LOW_REG,
+ DA9053_TJUNCRES_REG,
+ DA9053_TSICONTA_REG,
+ DA9053_TSICONTB_REG,
+ DA9053_TSIXMSB_REG,
+ DA9053_TSIYMSB_REG,
+ DA9053_TSILSB_REG,
+ DA9053_TSIZMSB_REG,
+ DA9053_COUNTS_REG,
+ DA9053_COUNTMI_REG,
+ DA9053_COUNTH_REG,
+ DA9053_COUNTD_REG,
+ DA9053_COUNTMO_REG,
+ DA9053_COUNTY_REG,
+ DA9053_ALARMMI_REG,
+ DA9053_ALARMH_REG,
+ DA9053_ALARMD_REG,
+ DA9053_ALARMMO_REG,
+ DA9053_ALARMY_REG,
+ DA9053_SECONDA_REG,
+ DA9053_SECONDB_REG,
+ DA9053_SECONDC_REG,
+ DA9053_SECONDD_REG,
+ DA9053_PAGECON128_REG,
+ DA9053_CHIPID_REG,
+ DA9053_CONFIGID_REG,
+ DA9053_OTPCONT_REG,
+ DA9053_OSCTRIM_REG,
+ DA9053_GPID0_REG,
+ DA9053_GPID1_REG,
+ DA9053_GPID2_REG,
+ DA9053_GPID3_REG,
+ DA9053_GPID4_REG,
+ DA9053_GPID5_REG,
+ DA9053_GPID6_REG,
+ DA9053_GPID7_REG,
+ DA9053_GPID8_REG,
+ DA9053_GPID9_REG,
+ DIALOG_NUM_OF_REGS,
+};
+
+#define DA_BUCKCORE_VBCORE_1_250V 0x1E
+
+/* BUCKCORE REGISTER */
+#define DA9052_BUCKCORE_BCORECONF (1 << 7)
+#define DA9052_BUCKCORE_BCOREEN (1 << 6)
+#define DA9052_BUCKCORE_VBCORE 63
+
+/* SUPPLY REGISTER */
+#define DA9052_SUPPLY_VLOCK (1 << 7)
+#define DA9052_SUPPLY_VMEMSWEN (1 << 6)
+#define DA9052_SUPPLY_VPERISWEN (1 << 5)
+#define DA9052_SUPPLY_VLDO3GO (1 << 4)
+#define DA9052_SUPPLY_VLDO2GO (1 << 3)
+#define DA9052_SUPPLY_VBMEMGO (1 << 2)
+#define DA9052_SUPPLY_VBPROGO (1 << 1)
+#define DA9052_SUPPLY_VBCOREGO (1 << 0)
+
+#endif /* __DIALOG_PMIC_H__ */
diff --git a/include/fat.h b/include/fat.h
index 4c92442fd3..f1b4a0d97c 100644
--- a/include/fat.h
+++ b/include/fat.h
@@ -178,12 +178,12 @@ typedef struct dir_slot {
typedef struct {
__u8 *fatbuf; /* Current FAT buffer */
int fatsize; /* Size of FAT in bits */
- __u16 fatlength; /* Length of FAT in sectors */
+ __u32 fatlength; /* Length of FAT in sectors */
__u16 fat_sect; /* Starting sector of the FAT */
- __u16 rootdir_sect; /* Start sector of root directory */
+ __u32 rootdir_sect; /* Start sector of root directory */
__u16 sect_size; /* Size of sectors in bytes */
__u16 clust_size; /* Size of clusters in sectors */
- short data_begin; /* The sector of the first cluster, can be negative */
+ int data_begin; /* The sector of the first cluster, can be negative */
int fatbufnum; /* Used by get_fatent, init to -1 */
} fsdata;
diff --git a/include/fdtdec.h b/include/fdtdec.h
index 171c628485..fab577ed32 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -60,6 +60,9 @@ enum fdt_compat_id {
COMPAT_NVIDIA_TEGRA20_USB, /* Tegra2 USB port */
COMPAT_NVIDIA_TEGRA20_I2C, /* Tegra2 i2c */
COMPAT_NVIDIA_TEGRA20_DVC, /* Tegra2 dvc (really just i2c) */
+ COMPAT_NVIDIA_TEGRA20_EMC, /* Tegra2 memory controller */
+ COMPAT_NVIDIA_TEGRA20_EMC_TABLE, /* Tegra2 memory timing table */
+ COMPAT_NVIDIA_TEGRA20_KBC, /* Tegra2 Keyboard */
COMPAT_COUNT,
};
@@ -117,6 +120,23 @@ int fdtdec_next_compatible(const void *blob, int node,
enum fdt_compat_id id);
/**
+ * Find the next compatible subnode for a peripheral.
+ *
+ * Do the first call with node set to the parent and depth = 0. This
+ * function will return the offset of the next compatible node. Next time
+ * you call this function, pass the node value returned last time, with
+ * depth unchanged, and the next node will be provided.
+ *
+ * @param blob FDT blob to use
+ * @param node Start node for search
+ * @param id Compatible ID to look for (enum fdt_compat_id)
+ * @param depthp Current depth (set to 0 before first call)
+ * @return offset of next compatible node, or -FDT_ERR_NOTFOUND if no more
+ */
+int fdtdec_next_compatible_subnode(const void *blob, int node,
+ enum fdt_compat_id id, int *depthp);
+
+/**
* Look up an address property in a node and return it as an address.
* The property must hold either one address with no trailing data or
* one address with a length. This is only tested on 32-bit machines.
@@ -272,6 +292,25 @@ int fdtdec_get_int_array(const void *blob, int node, const char *prop_name,
u32 *array, int count);
/**
+ * Look up a property in a node and return a pointer to its contents as a
+ * unsigned int array of given length. The property must have at least enough
+ * data for the array ('count' cells). It may have more, but this will be
+ * ignored. The data is not copied.
+ *
+ * Note that you must access elements of the array with fdt32_to_cpu(),
+ * since the elements will be big endian even on a little endian machine.
+ *
+ * @param blob FDT blob
+ * @param node node to examine
+ * @param prop_name name of property to find
+ * @param count number of array elements
+ * @return pointer to array if found, or NULL if the property is not
+ * found or there is not enough data
+ */
+const u32 *fdtdec_locate_array(const void *blob, int node,
+ const char *prop_name, int count);
+
+/**
* Look up a boolean property in a node and return it.
*
* A boolean properly is true if present in the device tree and false if not
@@ -311,3 +350,35 @@ int fdtdec_decode_gpio(const void *blob, int node, const char *prop_name,
* @return 0 if all ok or gpio was FDT_GPIO_NONE; -1 on error
*/
int fdtdec_setup_gpio(struct fdt_gpio_state *gpio);
+
+/*
+ * Look up a property in a node and return its contents in a byte
+ * array of given length. The property must have at least enough data for
+ * the array (count bytes). It may have more, but this will be ignored.
+ *
+ * @param blob FDT blob
+ * @param node node to examine
+ * @param prop_name name of property to find
+ * @param array array to fill with data
+ * @param count number of array elements
+ * @return 0 if ok, or -FDT_ERR_MISSING if the property is not found,
+ * or -FDT_ERR_BADLAYOUT if not enough data
+ */
+int fdtdec_get_byte_array(const void *blob, int node, const char *prop_name,
+ u8 *array, int count);
+
+/**
+ * Look up a property in a node and return a pointer to its contents as a
+ * byte array of given length. The property must have at least enough data
+ * for the array (count bytes). It may have more, but this will be ignored.
+ * The data is not copied.
+ *
+ * @param blob FDT blob
+ * @param node node to examine
+ * @param prop_name name of property to find
+ * @param count number of array elements
+ * @return pointer to byte array if found, or NULL if the property is not
+ * found or there is not enough data
+ */
+const u8 *fdtdec_locate_byte_array(const void *blob, int node,
+ const char *prop_name, int count);
diff --git a/include/fsl_esdhc.h b/include/fsl_esdhc.h
index 8418bf7f47..0e265584bd 100644
--- a/include/fsl_esdhc.h
+++ b/include/fsl_esdhc.h
@@ -34,12 +34,13 @@
#define SYSCTL_INITA 0x08000000
#define SYSCTL_TIMEOUT_MASK 0x000f0000
#define SYSCTL_CLOCK_MASK 0x0000fff0
-#define SYSCTL_RSTA 0x01000000
#define SYSCTL_CKEN 0x00000008
#define SYSCTL_PEREN 0x00000004
#define SYSCTL_HCKEN 0x00000002
#define SYSCTL_IPGEN 0x00000001
#define SYSCTL_RSTA 0x01000000
+#define SYSCTL_RSTC 0x02000000
+#define SYSCTL_RSTD 0x04000000
#define IRQSTAT 0x0002e030
#define IRQSTAT_DMAE (0x10000000)
@@ -85,6 +86,7 @@
#define IRQSTATEN_CC (0x00000001)
#define PRSSTAT 0x0002e024
+#define PRSSTAT_DAT0 (0x01000000)
#define PRSSTAT_CLSL (0x00800000)
#define PRSSTAT_WPSPL (0x00080000)
#define PRSSTAT_CDPL (0x00040000)
diff --git a/include/fsl_pmic.h b/include/fsl_pmic.h
index 742f2e19f9..64c1e2ef65 100644
--- a/include/fsl_pmic.h
+++ b/include/fsl_pmic.h
@@ -122,4 +122,15 @@ enum {
/* Interrupt status 1 */
#define RTCRSTI (1 << 7)
+/* MC34708 Definitions */
+#define SWx_VOLT_MASK_MC34708 0x3F
+#define SWx_1_250V_MC34708 0x30
+#define SWx_1_300V_MC34708 0x34
+#define TIMER_MASK_MC34708 0x300
+#define TIMER_4S_MC34708 0x100
+#define VUSBSEL_MC34708 (1 << 2)
+#define VUSBEN_MC34708 (1 << 3)
+#define SWBST_CTRL 31
+#define SWBST_AUTO 0x8
+
#endif
diff --git a/include/gdsys_fpga.h b/include/gdsys_fpga.h
index 949864c0f2..1758d7445e 100644
--- a/include/gdsys_fpga.h
+++ b/include/gdsys_fpga.h
@@ -35,20 +35,20 @@ enum {
int get_fpga_state(unsigned dev);
void print_fpga_state(unsigned dev);
-typedef struct ihs_gpio {
+struct ihs_gpio {
u16 read;
u16 clear;
u16 set;
-} ihs_gpio_t;
+};
-typedef struct ihs_i2c {
+struct ihs_i2c {
u16 write_mailbox;
u16 write_mailbox_ext;
u16 read_mailbox;
u16 read_mailbox_ext;
-} ihs_i2c_t;
+};
-typedef struct ihs_osd {
+struct ihs_osd {
u16 version;
u16 features;
u16 control;
@@ -56,10 +56,21 @@ typedef struct ihs_osd {
u16 xy_scale;
u16 x_pos;
u16 y_pos;
-} ihs_osd_t;
+};
+
+#ifdef CONFIG_NEO
+struct ihs_fpga {
+ u16 reflection_low; /* 0x0000 */
+ u16 versions; /* 0x0002 */
+ u16 fpga_features; /* 0x0004 */
+ u16 fpga_version; /* 0x0006 */
+ u16 reserved_0[8187]; /* 0x0008 */
+ u16 reflection_high; /* 0x3ffe */
+};
+#endif
#ifdef CONFIG_IO
-typedef struct ihs_fpga {
+struct ihs_fpga {
u16 reflection_low; /* 0x0000 */
u16 versions; /* 0x0002 */
u16 fpga_features; /* 0x0004 */
@@ -68,11 +79,11 @@ typedef struct ihs_fpga {
u16 quad_serdes_reset; /* 0x0012 */
u16 reserved_1[8181]; /* 0x0014 */
u16 reflection_high; /* 0x3ffe */
-} ihs_fpga_t;
+};
#endif
#ifdef CONFIG_IO64
-typedef struct ihs_fpga {
+struct ihs_fpga {
u16 reflection_low; /* 0x0000 */
u16 versions; /* 0x0002 */
u16 fpga_features; /* 0x0004 */
@@ -87,30 +98,30 @@ typedef struct ihs_fpga {
u16 ch0_hicb_config_int;/* 0x0502 */
u16 reserved_3[7549]; /* 0x0504 */
u16 reflection_high; /* 0x3ffe */
-} ihs_fpga_t;
+};
#endif
#ifdef CONFIG_IOCON
-typedef struct ihs_fpga {
+struct ihs_fpga {
u16 reflection_low; /* 0x0000 */
u16 versions; /* 0x0002 */
u16 fpga_version; /* 0x0004 */
u16 fpga_features; /* 0x0006 */
u16 reserved_0[6]; /* 0x0008 */
- ihs_gpio_t gpio; /* 0x0014 */
+ struct ihs_gpio gpio; /* 0x0014 */
u16 mpc3w_control; /* 0x001a */
u16 reserved_1[19]; /* 0x001c */
u16 videocontrol; /* 0x0042 */
u16 reserved_2[93]; /* 0x0044 */
u16 reflection_high; /* 0x00fe */
- ihs_osd_t osd; /* 0x0100 */
- u16 reserved_3[88]; /* 0x010e */
+ struct ihs_osd osd; /* 0x0100 */
+ u16 reserved_3[889]; /* 0x010e */
u16 videomem; /* 0x0800 */
-} ihs_fpga_t;
+};
#endif
#ifdef CONFIG_DLVISION_10G
-typedef struct ihs_fpga {
+struct ihs_fpga {
u16 reflection_low; /* 0x0000 */
u16 versions; /* 0x0002 */
u16 fpga_version; /* 0x0004 */
@@ -118,16 +129,16 @@ typedef struct ihs_fpga {
u16 reserved_0[10]; /* 0x0008 */
u16 extended_interrupt; /* 0x001c */
u16 reserved_1[9]; /* 0x001e */
- ihs_i2c_t i2c; /* 0x0030 */
+ struct ihs_i2c i2c; /* 0x0030 */
u16 reserved_2[16]; /* 0x0038 */
u16 mpc3w_control; /* 0x0058 */
u16 reserved_3[34]; /* 0x005a */
u16 videocontrol; /* 0x009e */
u16 reserved_4[176]; /* 0x00a0 */
- ihs_osd_t osd; /* 0x0200 */
+ struct ihs_osd osd; /* 0x0200 */
u16 reserved_5[761]; /* 0x020e */
u16 videomem; /* 0x0800 */
-} ihs_fpga_t;
+};
#endif
#endif
diff --git a/include/ide.h b/include/ide.h
index 8ecc9dd3a5..0424d045a1 100644
--- a/include/ide.h
+++ b/include/ide.h
@@ -2,31 +2,16 @@
* (C) Copyright 2000
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _IDE_H
#define _IDE_H
-#define IDE_BUS(dev) (dev >> 1)
+#define IDE_BUS(dev) (dev / (CONFIG_SYS_IDE_MAXDEVICE / CONFIG_SYS_IDE_MAXBUS))
#define ATA_CURR_BASE(dev) (CONFIG_SYS_ATA_BASE_ADDR+ide_bus_offset[IDE_BUS(dev)])
+extern ulong ide_bus_offset[];
#ifdef CONFIG_IDE_LED
@@ -42,8 +27,12 @@
#ifdef CONFIG_SYS_64BIT_LBA
typedef uint64_t lbaint_t;
+#define LBAF "%llx"
+#define LBAFU "%llu"
#else
typedef ulong lbaint_t;
+#define LBAF "%lx"
+#define LBAFU "%lu"
#endif
/*
@@ -51,8 +40,17 @@ typedef ulong lbaint_t;
*/
void ide_init(void);
-ulong ide_read(int device, lbaint_t blknr, ulong blkcnt, void *buffer);
-ulong ide_write(int device, lbaint_t blknr, ulong blkcnt, const void *buffer);
+ulong ide_read(int device, lbaint_t blknr, lbaint_t blkcnt, void *buffer);
+ulong ide_write(int device, lbaint_t blknr, lbaint_t blkcnt,
+ const void *buffer);
+
+#ifdef CONFIG_IDE_PREINIT
+int ide_preinit(void);
+#endif
+
+#ifdef CONFIG_IDE_INIT_POSTRESET
+int ide_init_postreset(void);
+#endif
#if defined(CONFIG_OF_IDE_FIXUP)
int ide_device_present(int dev);
@@ -62,6 +60,23 @@ int ide_device_present(int dev);
unsigned char ide_read_register(int dev, unsigned int port);
void ide_write_register(int dev, unsigned int port, unsigned char val);
void ide_read_data(int dev, ulong *sect_buf, int words);
-void ide_write_data(int dev, ulong *sect_buf, int words);
+void ide_write_data(int dev, const ulong *sect_buf, int words);
#endif
+
+/*
+ * I/O function overrides
+ */
+void ide_input_swap_data(int dev, ulong *sect_buf, int words);
+void ide_input_data(int dev, ulong *sect_buf, int words);
+void ide_output_data(int dev, const ulong *sect_buf, int words);
+void ide_input_data_shorts(int dev, ushort *sect_buf, int shorts);
+void ide_output_data_shorts(int dev, ushort *sect_buf, int shorts);
+
+/**
+ * board_start_ide() - Start up the board IDE interfac
+ *
+ * @return 0 if ok
+ */
+int board_start_ide(void);
+
#endif /* _IDE_H */
diff --git a/include/image.h b/include/image.h
index a1c6e4e9ad..aa9daa2deb 100644
--- a/include/image.h
+++ b/include/image.h
@@ -531,9 +531,9 @@ static inline int image_check_target_arch(const image_header_t *hdr)
#define FIT_MAX_HASH_LEN 20 /* max(crc32_len(4), sha1_len(20)) */
/* cmdline argument format parsing */
-inline int fit_parse_conf(const char *spec, ulong addr_curr,
+int fit_parse_conf(const char *spec, ulong addr_curr,
ulong *addr, const char **conf_name);
-inline int fit_parse_subimage(const char *spec, ulong addr_curr,
+int fit_parse_subimage(const char *spec, ulong addr_curr,
ulong *addr, const char **image_name);
void fit_print_contents(const void *fit);
diff --git a/include/input.h b/include/input.h
new file mode 100644
index 0000000000..31b1ef9603
--- /dev/null
+++ b/include/input.h
@@ -0,0 +1,147 @@
+/*
+ * Keyboard input helper functions (too small to be called a layer)
+ *
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _INPUT_H
+#define _INPUT_H
+
+enum {
+ INPUT_MAX_MODIFIERS = 4,
+ INPUT_BUFFER_LEN = 16,
+};
+
+enum {
+ /* Keyboard LEDs */
+ INPUT_LED_SCROLL = 1 << 0,
+ INPUT_LED_CAPS = 1 << 1,
+ INPUT_LED_NUM = 1 << 2,
+};
+
+/*
+ * This table translates key codes to ASCII. Most of the entries are ASCII
+ * codes, but entries after KEY_FIRST_MOD indicate that this key is a
+ * modifier key, like shift, ctrl. KEY_FIRST_MOD + MOD_SHIFT is the shift
+ * key, for example.
+ */
+struct input_key_xlate {
+ /* keycode of the modifiers which select this table, -1 if none */
+ int left_keycode;
+ int right_keycode;
+ const uchar *xlate; /* keycode to ASCII table */
+ int num_entries; /* number of entries in this table */
+};
+
+struct input_config {
+ uchar fifo[INPUT_BUFFER_LEN];
+ int fifo_in, fifo_out;
+
+ /* Which modifiers are active (1 bit for each MOD_... value) */
+ uchar modifiers;
+ uchar flags; /* active state keys (FLAGS_...) */
+ uchar leds; /* active LEDS (INPUT_LED_...) */
+ uchar num_tables; /* number of modifier tables */
+ int prev_keycodes[INPUT_BUFFER_LEN]; /* keys held last time */
+ int num_prev_keycodes; /* number of prev keys */
+ struct input_key_xlate table[INPUT_MAX_MODIFIERS];
+
+ /**
+ * Function the input helper calls to scan the keyboard
+ *
+ * @param config Input state
+ * @return 0 if no keys read, otherwise number of keys read, or 1 if
+ * unknown
+ */
+ int (*read_keys)(struct input_config *config);
+ unsigned int next_repeat_ms; /* Next time we repeat a key */
+ unsigned int repeat_delay_ms; /* Time before autorepeat starts */
+ unsigned int repeat_rate_ms; /* Autorepeat rate in ms */
+};
+
+struct stdio_dev;
+
+/**
+ * Convert a list of key codes into ASCII and send them
+ *
+ * @param config Input state
+ * @param keycode List of key codes to examine
+ * @param num_keycodes Number of key codes
+ */
+int input_send_keycodes(struct input_config *config, int keycode[], int count);
+
+/**
+ * Add a new key translation table to the input
+ *
+ * @param config Input state
+ * @param left_keycode Key to hold to get into this table
+ * @param right_keycode Another key to hold to get into this table
+ * @param xlate Conversion table from key codes to ASCII
+ * @param num_entries Number of entries in xlate table
+ */
+int input_add_table(struct input_config *config, int left_keycode,
+ int right_keycode, const uchar *xlate, int num_entries);
+
+/**
+ * Test if keys are available to be read
+ *
+ * @param config Input state
+ * @return 0 if no keys available, 1 if keys are available
+ */
+int input_tstc(struct input_config *config);
+
+/**
+ * Read a key
+ *
+ * TODO: U-Boot wants 0 for no key, but Ctrl-@ is a valid key...
+ *
+ * @param config Input state
+ * @return key, or 0 if no key, or -1 if error
+ */
+int input_getc(struct input_config *config);
+
+/**
+ * Register a new device with stdio and switch to it if wanted
+ *
+ * @param dev Pointer to device
+ * @return 0 if ok, -1 on error
+ */
+int input_stdio_register(struct stdio_dev *dev);
+
+/**
+ * Set up the input handler with basic key maps.
+ *
+ * @param config Input state
+ * @param leds Initial LED value (INPUT_LED_ mask), 0 suggested
+ * @param repeat_delay_ms Delay before key auto-repeat starts (in ms)
+ * @param repeat_rate_ms Delay between successive key repeats (in ms)
+ * @return 0 if ok, -1 on error
+ */
+int input_init(struct input_config *config, int leds, int repeat_delay_ms,
+ int repeat_rate_ms);
+
+#ifdef CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
+extern int overwrite_console(void);
+#define OVERWRITE_CONSOLE overwrite_console()
+#else
+#define OVERWRITE_CONSOLE 0
+#endif /* CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE */
+
+#endif
diff --git a/include/jffs2/load_kernel.h b/include/jffs2/load_kernel.h
index 906eb3d3cd..23bb4ae0a3 100644
--- a/include/jffs2/load_kernel.h
+++ b/include/jffs2/load_kernel.h
@@ -46,11 +46,12 @@ struct part_info {
struct list_head link;
char *name; /* partition name */
u8 auto_name; /* set to 1 for generated name */
- u32 size; /* total size of the partition */
- u32 offset; /* offset within device */
+ u64 size; /* total size of the partition */
+ u64 offset; /* offset within device */
void *jffs2_priv; /* used internaly by jffs2 */
u32 mask_flags; /* kernel MTD mask flags */
u32 sector_size; /* size of sector */
+ int dirty; /* if true, the mtd has been wrotten data*/
struct mtd_device *dev; /* parent device */
};
@@ -58,7 +59,7 @@ struct mtdids {
struct list_head link;
u8 type; /* device type */
u8 num; /* device number */
- u32 size; /* device size */
+ u64 size; /* device size */
char *mtd_id; /* linux kernel device id */
};
@@ -79,5 +80,6 @@ extern int mtdparts_init(void);
extern int find_dev_and_part(const char *id, struct mtd_device **dev,
u8 *part_num, struct part_info **part);
extern struct mtd_device *device_find(u8 type, u8 num);
+int mtdparts_clear_all_dirty(struct mtd_device *dev);
#endif /* load_kernel_h */
diff --git a/include/key_matrix.h b/include/key_matrix.h
new file mode 100644
index 0000000000..f41331407d
--- /dev/null
+++ b/include/key_matrix.h
@@ -0,0 +1,99 @@
+/*
+ * Keyboard matrix helper functions
+ *
+ * Copyright (c) 2012 The Chromium OS Authors.
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef _KEY_MATRIX_H
+#define _KEY_MATRIX_H
+
+#include <common.h>
+
+/* Information about a matrix keyboard */
+struct key_matrix {
+ /* Dimensions of the keyboard matrix, in rows and columns */
+ int num_rows;
+ int num_cols;
+ int key_count; /* number of keys in the matrix (= rows * cols) */
+
+ /*
+ * Information about keycode mappings. The plain_keycode array must
+ * exist but fn may be NULL in which case it is not decoded.
+ */
+ const u8 *plain_keycode; /* key code for each row / column */
+ const u8 *fn_keycode; /* ...when Fn held down */
+ int fn_pos; /* position of Fn key in key (or -1) */
+};
+
+/* Information about a particular key (row, column pair) in the matrix */
+struct key_matrix_key {
+ uint8_t row; /* row number (0 = first) */
+ uint8_t col; /* column number (0 = first) */
+ uint8_t valid; /* 1 if valid, 0 to ignore this */
+};
+
+/**
+ * Decode a set of pressed keys into key codes
+ *
+ * Given a list of keys that are pressed, this converts this list into
+ * a list of key codes. Each of the keys has a valid flag, which can be
+ * used to mark a particular key as invalid (so that it is ignored).
+ *
+ * The plain keymap is used, unless the Fn key is detected along the way,
+ * at which point we switch to the Fn key map.
+ *
+ * If key ghosting is detected, we simply ignore the keys and return 0.
+ *
+ * @param config Keyboard matrix config
+ * @param keys List of keys to process (each is row, col)
+ * @param num_keys Number of keys to process
+ * @param keycode Returns a list of key codes, decoded from input
+ * @param max_keycodes Size of key codes array (suggest 8)
+ *
+ */
+int key_matrix_decode(struct key_matrix *config, struct key_matrix_key *keys,
+ int num_keys, int keycode[], int max_keycodes);
+
+/**
+ * Read the keyboard configuration out of the fdt.
+ *
+ * Decode properties of named "linux,<type>keymap" where <type> is either
+ * empty, or "fn-". Then set up the plain key map (and the FN keymap if
+ * present).
+ *
+ * @param config Keyboard matrix config
+ * @param blob FDT blob
+ * @param node Node containing compatible data
+ * @return 0 if ok, -1 on error
+ */
+int key_matrix_decode_fdt(struct key_matrix *config, const void *blob,
+ int node);
+
+/**
+ * Set up a new key matrix.
+ *
+ * @param config Keyboard matrix config
+ * @param rows Number of rows in key matrix
+ * @param cols Number of columns in key matrix
+ * @return 0 if ok, -1 on error
+ */
+int key_matrix_init(struct key_matrix *config, int rows, int cols);
+
+#endif
diff --git a/include/lcd.h b/include/lcd.h
index d95feeb791..3d9ef16710 100644
--- a/include/lcd.h
+++ b/include/lcd.h
@@ -183,6 +183,70 @@ typedef struct vidinfo {
u_long mmio; /* Memory mapped registers */
} vidinfo_t;
+#elif defined(CONFIG_EXYNOS_FB)
+
+enum {
+ FIMD_RGB_INTERFACE = 1,
+ FIMD_CPU_INTERFACE = 2,
+};
+
+typedef struct vidinfo {
+ ushort vl_col; /* Number of columns (i.e. 640) */
+ ushort vl_row; /* Number of rows (i.e. 480) */
+ ushort vl_width; /* Width of display area in millimeters */
+ ushort vl_height; /* Height of display area in millimeters */
+
+ /* LCD configuration register */
+ u_char vl_freq; /* Frequency */
+ u_char vl_clkp; /* Clock polarity */
+ u_char vl_oep; /* Output Enable polarity */
+ u_char vl_hsp; /* Horizontal Sync polarity */
+ u_char vl_vsp; /* Vertical Sync polarity */
+ u_char vl_dp; /* Data polarity */
+ u_char vl_bpix; /* Bits per pixel */
+
+ /* Horizontal control register. Timing from data sheet */
+ u_char vl_hspw; /* Horz sync pulse width */
+ u_char vl_hfpd; /* Wait before of line */
+ u_char vl_hbpd; /* Wait end of line */
+
+ /* Vertical control register. */
+ u_char vl_vspw; /* Vertical sync pulse width */
+ u_char vl_vfpd; /* Wait before of frame */
+ u_char vl_vbpd; /* Wait end of frame */
+ u_char vl_cmd_allow_len; /* Wait end of frame */
+
+ void (*cfg_gpio)(void);
+ void (*backlight_on)(unsigned int onoff);
+ void (*reset_lcd)(void);
+ void (*lcd_power_on)(void);
+ void (*cfg_ldo)(void);
+ void (*enable_ldo)(unsigned int onoff);
+ void (*mipi_power)(void);
+ void (*backlight_reset)(void);
+
+ unsigned int win_id;
+ unsigned int init_delay;
+ unsigned int power_on_delay;
+ unsigned int reset_delay;
+ unsigned int interface_mode;
+ unsigned int mipi_enabled;
+ unsigned int cs_setup;
+ unsigned int wr_setup;
+ unsigned int wr_act;
+ unsigned int wr_hold;
+
+ /* parent clock name(MPLL, EPLL or VPLL) */
+ unsigned int pclk_name;
+ /* ratio value for source clock from parent clock. */
+ unsigned int sclk_div;
+
+ unsigned int dual_lcd_enabled;
+
+} vidinfo_t;
+
+void init_panel_info(vidinfo_t *vid);
+
#else
typedef struct vidinfo {
diff --git a/include/linux/mtd/compat.h b/include/linux/compat.h
index 39c693f7a8..593b07f4b5 100644
--- a/include/linux/mtd/compat.h
+++ b/include/linux/compat.h
@@ -48,5 +48,8 @@
#define BUG_ON(condition) do { if (condition) BUG(); } while(0)
#endif /* BUG */
+#define WARN_ON(x) if (x) {printf("WARNING in %s line %d\n" \
+ , __FILE__, __LINE__); }
+
#define PAGE_SIZE 4096
#endif
diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h
index 73dcf804bc..ad6627787c 100644
--- a/include/linux/compiler-gcc.h
+++ b/include/linux/compiler-gcc.h
@@ -44,9 +44,10 @@
*/
#if !defined(CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING) || \
!defined(CONFIG_OPTIMIZE_INLINING) || (__GNUC__ < 4)
-# define inline inline __attribute__((always_inline))
-# define __inline__ __inline__ __attribute__((always_inline))
-# define __inline __inline __attribute__((always_inline))
+/* XXX: check __GNUC_STDC_INLINE__, fix line length */
+# define inline inline __attribute__((always_inline)) __attribute__((__gnu_inline__))
+# define __inline__ __inline__ __attribute__((always_inline)) __attribute__((__gnu_inline__))
+# define __inline __inline __attribute__((always_inline)) __attribute__((__gnu_inline__))
#endif
#define __deprecated __attribute__((deprecated))
diff --git a/include/linux/compiler-gcc5.h b/include/linux/compiler-gcc5.h
new file mode 100644
index 0000000000..c8c5659525
--- /dev/null
+++ b/include/linux/compiler-gcc5.h
@@ -0,0 +1,65 @@
+#ifndef __LINUX_COMPILER_H
+#error "Please don't include <linux/compiler-gcc5.h> directly, include <linux/compiler.h> instead."
+#endif
+
+#define __used __attribute__((__used__))
+#define __must_check __attribute__((warn_unused_result))
+#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
+
+/* Mark functions as cold. gcc will assume any path leading to a call
+ to them will be unlikely. This means a lot of manual unlikely()s
+ are unnecessary now for any paths leading to the usual suspects
+ like BUG(), printk(), panic() etc. [but let's keep them for now for
+ older compilers]
+
+ Early snapshots of gcc 4.3 don't support this and we can't detect this
+ in the preprocessor, but we can live with this because they're unreleased.
+ Maketime probing would be overkill here.
+
+ gcc also has a __attribute__((__hot__)) to move hot functions into
+ a special section, but I don't see any sense in this right now in
+ the kernel context */
+#define __cold __attribute__((__cold__))
+
+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
+
+#ifndef __CHECKER__
+# define __compiletime_warning(message) __attribute__((warning(message)))
+# define __compiletime_error(message) __attribute__((error(message)))
+#endif /* __CHECKER__ */
+
+/*
+ * Mark a position in code as unreachable. This can be used to
+ * suppress control flow warnings after asm blocks that transfer
+ * control elsewhere.
+ *
+ * Early snapshots of gcc 4.5 don't support this and we can't detect
+ * this in the preprocessor, but we can live with this because they're
+ * unreleased. Really, we need to have autoconf for the kernel.
+ */
+#define unreachable() __builtin_unreachable()
+
+/* Mark a function definition as prohibited from being cloned. */
+#define __noclone __attribute__((__noclone__))
+
+/*
+ * Tell the optimizer that something else uses this function or variable.
+ */
+#define __visible __attribute__((externally_visible))
+
+/*
+ * GCC 'asm goto' miscompiles certain code sequences:
+ *
+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
+ *
+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
+ *
+ * (asm goto is automatically volatile - the naming reflects this.)
+ */
+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
+
+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
+#define __HAVE_BUILTIN_BSWAP32__
+#define __HAVE_BUILTIN_BSWAP64__
+#define __HAVE_BUILTIN_BSWAP16__
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
diff --git a/include/linux/compiler-gcc6.h b/include/linux/compiler-gcc6.h
new file mode 100644
index 0000000000..a3d00d8d31
--- /dev/null
+++ b/include/linux/compiler-gcc6.h
@@ -0,0 +1,66 @@
+#ifndef __LINUX_COMPILER_H
+#error "Please don't include <linux/compiler-gcc6.h> directly, include <linux/compiler.h> instead."
+#endif
+
+#define __used __attribute__((__used__))
+#define __must_check __attribute__((warn_unused_result))
+#define __compiler_offsetof(a, b) __builtin_offsetof(a, b)
+
+/* Mark functions as cold. gcc will assume any path leading to a call
+ to them will be unlikely. This means a lot of manual unlikely()s
+ are unnecessary now for any paths leading to the usual suspects
+ like BUG(), printk(), panic() etc. [but let's keep them for now for
+ older compilers]
+
+ Early snapshots of gcc 4.3 don't support this and we can't detect this
+ in the preprocessor, but we can live with this because they're unreleased.
+ Maketime probing would be overkill here.
+
+ gcc also has a __attribute__((__hot__)) to move hot functions into
+ a special section, but I don't see any sense in this right now in
+ the kernel context */
+#define __cold __attribute__((__cold__))
+
+#define __UNIQUE_ID(prefix) __PASTE(__PASTE(__UNIQUE_ID_, prefix), __COUNTER__)
+
+#ifndef __CHECKER__
+# define __compiletime_warning(message) __attribute__((warning(message)))
+# define __compiletime_error(message) __attribute__((error(message)))
+#endif /* __CHECKER__ */
+
+/*
+ * Mark a position in code as unreachable. This can be used to
+ * suppress control flow warnings after asm blocks that transfer
+ * control elsewhere.
+ *
+ * Early snapshots of gcc 4.5 don't support this and we can't detect
+ * this in the preprocessor, but we can live with this because they're
+ * unreleased. Really, we need to have autoconf for the kernel.
+ */
+#define unreachable() __builtin_unreachable()
+
+/* Mark a function definition as prohibited from being cloned. */
+#define __noclone __attribute__((__noclone__))
+
+/*
+ * Tell the optimizer that something else uses this function or variable.
+ */
+#define __visible __attribute__((externally_visible))
+
+/*
+ * GCC 'asm goto' miscompiles certain code sequences:
+ *
+ * http://gcc.gnu.org/bugzilla/show_bug.cgi?id=58670
+ *
+ * Work it around via a compiler barrier quirk suggested by Jakub Jelinek.
+ * Fixed in GCC 4.8.2 and later versions.
+ *
+ * (asm goto is automatically volatile - the naming reflects this.)
+ */
+#define asm_volatile_goto(x...) do { asm goto(x); asm (""); } while (0)
+
+#ifdef CONFIG_ARCH_USE_BUILTIN_BSWAP
+#define __HAVE_BUILTIN_BSWAP32__
+#define __HAVE_BUILTIN_BSWAP64__
+#define __HAVE_BUILTIN_BSWAP16__
+#endif /* CONFIG_ARCH_USE_BUILTIN_BSWAP */
diff --git a/include/linux/err.h b/include/linux/err.h
index 4e08c4fe68..96c0c72baa 100644
--- a/include/linux/err.h
+++ b/include/linux/err.h
@@ -5,7 +5,7 @@
#if 0
#include <linux/compiler.h>
#else
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#endif
#include <asm/errno.h>
diff --git a/include/linux/input.h b/include/linux/input.h
new file mode 100644
index 0000000000..44aec763dc
--- /dev/null
+++ b/include/linux/input.h
@@ -0,0 +1,155 @@
+/*
+ * Copyright (c) 1999-2002 Vojtech Pavlik
+ *
+ * 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.
+ */
+
+#ifndef _LINUX_INPUT_H
+#define _LINUX_INPUT_H
+
+/*
+ * Keys and buttons
+ *
+ * Most of the keys/buttons are modeled after USB HUT 1.12
+ * (see http://www.usb.org/developers/hidpage).
+ * Abbreviations in the comments:
+ * AC - Application Control
+ * AL - Application Launch Button
+ * SC - System Control
+ */
+
+#define KEY_RESERVED 0
+#define KEY_ESC 1
+#define KEY_1 2
+#define KEY_2 3
+#define KEY_3 4
+#define KEY_4 5
+#define KEY_5 6
+#define KEY_6 7
+#define KEY_7 8
+#define KEY_8 9
+#define KEY_9 10
+#define KEY_0 11
+#define KEY_MINUS 12
+#define KEY_EQUAL 13
+#define KEY_BACKSPACE 14
+#define KEY_TAB 15
+#define KEY_Q 16
+#define KEY_W 17
+#define KEY_E 18
+#define KEY_R 19
+#define KEY_T 20
+#define KEY_Y 21
+#define KEY_U 22
+#define KEY_I 23
+#define KEY_O 24
+#define KEY_P 25
+#define KEY_LEFTBRACE 26
+#define KEY_RIGHTBRACE 27
+#define KEY_ENTER 28
+#define KEY_LEFTCTRL 29
+#define KEY_A 30
+#define KEY_S 31
+#define KEY_D 32
+#define KEY_F 33
+#define KEY_G 34
+#define KEY_H 35
+#define KEY_J 36
+#define KEY_K 37
+#define KEY_L 38
+#define KEY_SEMICOLON 39
+#define KEY_APOSTROPHE 40
+#define KEY_GRAVE 41
+#define KEY_LEFTSHIFT 42
+#define KEY_BACKSLASH 43
+#define KEY_Z 44
+#define KEY_X 45
+#define KEY_C 46
+#define KEY_V 47
+#define KEY_B 48
+#define KEY_N 49
+#define KEY_M 50
+#define KEY_COMMA 51
+#define KEY_DOT 52
+#define KEY_SLASH 53
+#define KEY_RIGHTSHIFT 54
+#define KEY_KPASTERISK 55
+#define KEY_LEFTALT 56
+#define KEY_SPACE 57
+#define KEY_CAPSLOCK 58
+#define KEY_F1 59
+#define KEY_F2 60
+#define KEY_F3 61
+#define KEY_F4 62
+#define KEY_F5 63
+#define KEY_F6 64
+#define KEY_F7 65
+#define KEY_F8 66
+#define KEY_F9 67
+#define KEY_F10 68
+#define KEY_NUMLOCK 69
+#define KEY_SCROLLLOCK 70
+#define KEY_KP7 71
+#define KEY_KP8 72
+#define KEY_KP9 73
+#define KEY_KPMINUS 74
+#define KEY_KP4 75
+#define KEY_KP5 76
+#define KEY_KP6 77
+#define KEY_KPPLUS 78
+#define KEY_KP1 79
+#define KEY_KP2 80
+#define KEY_KP3 81
+#define KEY_KP0 82
+#define KEY_KPDOT 83
+
+#define KEY_ZENKAKUHANKAKU 85
+#define KEY_102ND 86
+#define KEY_F11 87
+#define KEY_F12 88
+#define KEY_RO 89
+#define KEY_KATAKANA 90
+#define KEY_HIRAGANA 91
+#define KEY_HENKAN 92
+#define KEY_KATAKANAHIRAGANA 93
+#define KEY_MUHENKAN 94
+#define KEY_KPJPCOMMA 95
+#define KEY_KPENTER 96
+#define KEY_RIGHTCTRL 97
+#define KEY_KPSLASH 98
+#define KEY_SYSRQ 99
+#define KEY_RIGHTALT 100
+#define KEY_LINEFEED 101
+#define KEY_HOME 102
+#define KEY_UP 103
+#define KEY_PAGEUP 104
+#define KEY_LEFT 105
+#define KEY_RIGHT 106
+#define KEY_END 107
+#define KEY_DOWN 108
+#define KEY_PAGEDOWN 109
+#define KEY_INSERT 110
+#define KEY_DELETE 111
+#define KEY_MACRO 112
+#define KEY_MUTE 113
+#define KEY_VOLUMEDOWN 114
+#define KEY_VOLUMEUP 115
+#define KEY_POWER 116 /* SC System Power Down */
+#define KEY_KPEQUAL 117
+#define KEY_KPPLUSMINUS 118
+#define KEY_PAUSE 119
+#define KEY_SCALE 120 /* AL Compiz Scale (Expose) */
+
+#define KEY_KPCOMMA 121
+#define KEY_HANGEUL 122
+#define KEY_HANGUEL KEY_HANGEUL
+#define KEY_HANJA 123
+#define KEY_YEN 124
+#define KEY_LEFTMETA 125
+#define KEY_RIGHTMETA 126
+#define KEY_COMPOSE 127
+#define KEY_FN 0x1d0
+
+#endif
diff --git a/include/linux/linkage.h b/include/linux/linkage.h
index ed4cf6cbcd..7b749bbda7 100644
--- a/include/linux/linkage.h
+++ b/include/linux/linkage.h
@@ -44,8 +44,13 @@
#define SYMBOL_NAME_LABEL(X) X:
#endif
+#ifndef __ALIGN
#define __ALIGN .align 4
+#endif
+
+#ifndef __ALIGN_STR
#define __ALIGN_STR ".align 4"
+#endif
#ifdef __ASSEMBLY__
@@ -67,7 +72,7 @@
#ifndef ENDPROC
#define ENDPROC(name) \
- .type name, @function; \
+ .type name STT_FUNC; \
END(name)
#endif
diff --git a/include/linux/mtd/mtd-abi.h b/include/linux/mtd/mtd-abi.h
index 8d5f60c75e..5991157065 100644
--- a/include/linux/mtd/mtd-abi.h
+++ b/include/linux/mtd/mtd-abi.h
@@ -8,7 +8,7 @@
#define __MTD_ABI_H__
#if 1
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#endif
struct erase_info_user {
diff --git a/include/linux/mtd/mtd.h b/include/linux/mtd/mtd.h
index 141c96024c..dbcc05ae86 100644
--- a/include/linux/mtd/mtd.h
+++ b/include/linux/mtd/mtd.h
@@ -236,6 +236,11 @@ struct mtd_info {
void (*put_device) (struct mtd_info *mtd);
};
+static inline int is_power_of_2(unsigned long n)
+{
+ return (n != 0 && ((n & (n - 1)) == 0));
+}
+
static inline uint32_t mtd_div_by_eb(uint64_t sz, struct mtd_info *mtd)
{
do_div(sz, mtd->erasesize);
@@ -247,6 +252,30 @@ static inline uint32_t mtd_mod_by_eb(uint64_t sz, struct mtd_info *mtd)
return do_div(sz, mtd->erasesize);
}
+static inline uint32_t mtd_div_by_ws(uint64_t sz, struct mtd_info *mtd)
+{
+ do_div(sz, mtd->writesize);
+ return sz;
+}
+
+static inline uint32_t mtd_mod_by_ws(uint64_t sz, struct mtd_info *mtd)
+{
+ return do_div(sz, mtd->writesize);
+}
+
+static inline uint32_t mtd_div_by_var(uint64_t sz, uint32_t var)
+{
+ (void)(((typeof((var)) *)0) == ((uint32_t *)0));
+ do_div(sz, var);
+ return sz;
+}
+
+static inline uint32_t mtd_mod_by_var(uint64_t sz, uint32_t var)
+{
+ (void)(((typeof((var)) *)0) == ((uint32_t *)0));
+ return do_div(sz, var);
+}
+
/* Kernel-side ioctl definitions */
extern int add_mtd_device(struct mtd_info *mtd);
diff --git a/include/linux/mtd/nand.h b/include/linux/mtd/nand.h
index da6fa184c3..eb580f3e99 100644
--- a/include/linux/mtd/nand.h
+++ b/include/linux/mtd/nand.h
@@ -20,7 +20,7 @@
#include "config.h"
-#include "linux/mtd/compat.h"
+#include "linux/compat.h"
#include "linux/mtd/mtd.h"
#include "linux/mtd/bbm.h"
@@ -47,7 +47,7 @@ extern void nand_wait_ready(struct mtd_info *mtd);
* adjust this accordingly.
*/
#define NAND_MAX_OOBSIZE 576
-#define NAND_MAX_PAGESIZE 8192
+#define NAND_MAX_PAGESIZE 16384
/*
* Constants for hardware specific CLE/ALE/NCE function
@@ -480,6 +480,7 @@ struct nand_chip {
void __iomem *IO_ADDR_R;
void __iomem *IO_ADDR_W;
+ void (*read_nand_ID)(struct mtd_info *mtd);
uint8_t (*read_byte)(struct mtd_info *mtd);
u16 (*read_word)(struct mtd_info *mtd);
void (*write_buf)(struct mtd_info *mtd, const uint8_t *buf, int len);
@@ -556,6 +557,7 @@ struct nand_chip {
#define NAND_MFR_HYNIX 0xad
#define NAND_MFR_MICRON 0x2c
#define NAND_MFR_AMD 0x01
+#define NAND_MFR_ESMT 0xc8
/**
* struct nand_flash_dev - NAND Flash Device ID Structure
@@ -671,6 +673,35 @@ struct platform_nand_chip *get_platform_nandchip(struct mtd_info *mtd)
return chip->priv;
}
+static inline uint32_t mtd_div_by_cs(uint64_t sz, struct mtd_info *mtd)
+{
+ struct nand_chip *chip = mtd->priv;
+
+ if(chip->chipsize >> 32){
+ //assume the chipsize is not out of 4096TB(4*1024*1024*GB)
+ //4096TB is 52bits.
+ sz >>= 20;
+ do_div(sz, chip->chipsize >> 20);
+ }else{
+ do_div(sz, chip->chipsize);
+ }
+ return sz;
+}
+
+static inline uint32_t mtd_mod_by_cs(uint64_t sz, struct mtd_info *mtd)
+{
+ struct nand_chip *chip = mtd->priv;
+
+ if(chip->chipsize >> 32){
+ //assume the chipsize is not out of 4096TB(4*1024*1024*GB)
+ //4096TB is 52bits.
+ sz >>= 20;
+ return do_div(sz, chip->chipsize >> 20);
+ }else{
+ return do_div(sz, chip->chipsize);
+ }
+}
+
/* Standard NAND functions from nand_base.c */
void nand_write_buf(struct mtd_info *mtd, const uint8_t *buf, int len);
void nand_write_buf16(struct mtd_info *mtd, const uint8_t *buf, int len);
diff --git a/include/linux/mtd/onenand.h b/include/linux/mtd/onenand.h
index bb4a4a6b28..e7b63ddd10 100644
--- a/include/linux/mtd/onenand.h
+++ b/include/linux/mtd/onenand.h
@@ -17,7 +17,7 @@
/* Note: The header order is impoertant */
#include <onenand_uboot.h>
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/bbm.h>
#define MAX_DIES 2
diff --git a/include/linux/usb/ch9.h b/include/linux/usb/ch9.h
index 49b748337a..ce1d1e10ba 100644
--- a/include/linux/usb/ch9.h
+++ b/include/linux/usb/ch9.h
@@ -204,28 +204,6 @@ struct usb_descriptor_header {
__u8 bDescriptorType;
} __attribute__ ((packed));
-
-/*-------------------------------------------------------------------------*/
-
-/* USB_DT_DEVICE: Device descriptor */
-struct usb_device_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
-
- __le16 bcdUSB;
- __u8 bDeviceClass;
- __u8 bDeviceSubClass;
- __u8 bDeviceProtocol;
- __u8 bMaxPacketSize0;
- __le16 idVendor;
- __le16 idProduct;
- __le16 bcdDevice;
- __u8 iManufacturer;
- __u8 iProduct;
- __u8 iSerialNumber;
- __u8 bNumConfigurations;
-} __attribute__ ((packed));
-
#define USB_DT_DEVICE_SIZE 18
@@ -282,56 +260,11 @@ struct usb_config_descriptor {
#define USB_CONFIG_ATT_WAKEUP (1 << 5) /* can wakeup */
#define USB_CONFIG_ATT_BATTERY (1 << 4) /* battery powered */
-/*-------------------------------------------------------------------------*/
-
-/* USB_DT_STRING: String descriptor */
-struct usb_string_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
-
- __le16 wData[1]; /* UTF-16LE encoded */
-} __attribute__ ((packed));
-
/* note that "string" zero is special, it holds language codes that
* the device supports, not Unicode characters.
*/
-/*-------------------------------------------------------------------------*/
-
-/* USB_DT_INTERFACE: Interface descriptor */
-struct usb_interface_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
-
- __u8 bInterfaceNumber;
- __u8 bAlternateSetting;
- __u8 bNumEndpoints;
- __u8 bInterfaceClass;
- __u8 bInterfaceSubClass;
- __u8 bInterfaceProtocol;
- __u8 iInterface;
-} __attribute__ ((packed));
-
#define USB_DT_INTERFACE_SIZE 9
-
-/*-------------------------------------------------------------------------*/
-
-/* USB_DT_ENDPOINT: Endpoint descriptor */
-struct usb_endpoint_descriptor {
- __u8 bLength;
- __u8 bDescriptorType;
-
- __u8 bEndpointAddress;
- __u8 bmAttributes;
- __le16 wMaxPacketSize;
- __u8 bInterval;
-
- /* NOTE: these two are _only_ in audio endpoints. */
- /* use USB_DT_ENDPOINT*_SIZE in bLength, not sizeof. */
- __u8 bRefresh;
- __u8 bSynchAddress;
-} __attribute__ ((packed));
-
#define USB_DT_ENDPOINT_SIZE 7
#define USB_DT_ENDPOINT_AUDIO_SIZE 9 /* Audio extension */
diff --git a/include/linux/usb/composite.h b/include/linux/usb/composite.h
new file mode 100644
index 0000000000..53cb095507
--- /dev/null
+++ b/include/linux/usb/composite.h
@@ -0,0 +1,350 @@
+/*
+ * composite.h -- framework for usb gadgets which are composite devices
+ *
+ * Copyright (C) 2006-2008 David Brownell
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#ifndef __LINUX_USB_COMPOSITE_H
+#define __LINUX_USB_COMPOSITE_H
+
+/*
+ * This framework is an optional layer on top of the USB Gadget interface,
+ * making it easier to build (a) Composite devices, supporting multiple
+ * functions within any single configuration, and (b) Multi-configuration
+ * devices, also supporting multiple functions but without necessarily
+ * having more than one function per configuration.
+ *
+ * Example: a device with a single configuration supporting both network
+ * link and mass storage functions is a composite device. Those functions
+ * might alternatively be packaged in individual configurations, but in
+ * the composite model the host can use both functions at the same time.
+ */
+
+#include <common.h>
+#include <linux/usb/ch9.h>
+#include <linux/usb/gadget.h>
+#include <usb/lin_gadget_compat.h>
+
+struct usb_configuration;
+
+/**
+ * struct usb_function - describes one function of a configuration
+ * @name: For diagnostics, identifies the function.
+ * @strings: tables of strings, keyed by identifiers assigned during bind()
+ * and by language IDs provided in control requests
+ * @descriptors: Table of full (or low) speed descriptors, using interface and
+ * string identifiers assigned during @bind(). If this pointer is null,
+ * the function will not be available at full speed (or at low speed).
+ * @hs_descriptors: Table of high speed descriptors, using interface and
+ * string identifiers assigned during @bind(). If this pointer is null,
+ * the function will not be available at high speed.
+ * @config: assigned when @usb_add_function() is called; this is the
+ * configuration with which this function is associated.
+ * @bind: Before the gadget can register, all of its functions bind() to the
+ * available resources including string and interface identifiers used
+ * in interface or class descriptors; endpoints; I/O buffers; and so on.
+ * @unbind: Reverses @bind; called as a side effect of unregistering the
+ * driver which added this function.
+ * @set_alt: (REQUIRED) Reconfigures altsettings; function drivers may
+ * initialize usb_ep.driver data at this time (when it is used).
+ * Note that setting an interface to its current altsetting resets
+ * interface state, and that all interfaces have a disabled state.
+ * @get_alt: Returns the active altsetting. If this is not provided,
+ * then only altsetting zero is supported.
+ * @disable: (REQUIRED) Indicates the function should be disabled. Reasons
+ * include host resetting or reconfiguring the gadget, and disconnection.
+ * @setup: Used for interface-specific control requests.
+ * @suspend: Notifies functions when the host stops sending USB traffic.
+ * @resume: Notifies functions when the host restarts USB traffic.
+ *
+ * A single USB function uses one or more interfaces, and should in most
+ * cases support operation at both full and high speeds. Each function is
+ * associated by @usb_add_function() with a one configuration; that function
+ * causes @bind() to be called so resources can be allocated as part of
+ * setting up a gadget driver. Those resources include endpoints, which
+ * should be allocated using @usb_ep_autoconfig().
+ *
+ * To support dual speed operation, a function driver provides descriptors
+ * for both high and full speed operation. Except in rare cases that don't
+ * involve bulk endpoints, each speed needs different endpoint descriptors.
+ *
+ * Function drivers choose their own strategies for managing instance data.
+ * The simplest strategy just declares it "static', which means the function
+ * can only be activated once. If the function needs to be exposed in more
+ * than one configuration at a given speed, it needs to support multiple
+ * usb_function structures (one for each configuration).
+ *
+ * A more complex strategy might encapsulate a @usb_function structure inside
+ * a driver-specific instance structure to allows multiple activations. An
+ * example of multiple activations might be a CDC ACM function that supports
+ * two or more distinct instances within the same configuration, providing
+ * several independent logical data links to a USB host.
+ */
+struct usb_function {
+ const char *name;
+ struct usb_gadget_strings **strings;
+ struct usb_descriptor_header **descriptors;
+ struct usb_descriptor_header **hs_descriptors;
+
+ struct usb_configuration *config;
+
+ /* REVISIT: bind() functions can be marked __init, which
+ * makes trouble for section mismatch analysis. See if
+ * we can't restructure things to avoid mismatching.
+ * Related: unbind() may kfree() but bind() won't...
+ */
+
+ /* configuration management: bind/unbind */
+ int (*bind)(struct usb_configuration *,
+ struct usb_function *);
+ void (*unbind)(struct usb_configuration *,
+ struct usb_function *);
+
+ /* runtime state management */
+ int (*set_alt)(struct usb_function *,
+ unsigned interface, unsigned alt);
+ int (*get_alt)(struct usb_function *,
+ unsigned interface);
+ void (*disable)(struct usb_function *);
+ int (*setup)(struct usb_function *,
+ const struct usb_ctrlrequest *);
+ void (*suspend)(struct usb_function *);
+ void (*resume)(struct usb_function *);
+
+ /* private: */
+ /* internals */
+ struct list_head list;
+ DECLARE_BITMAP(endpoints, 32);
+};
+
+int usb_add_function(struct usb_configuration *, struct usb_function *);
+
+int usb_function_deactivate(struct usb_function *);
+int usb_function_activate(struct usb_function *);
+
+int usb_interface_id(struct usb_configuration *, struct usb_function *);
+
+/**
+ * ep_choose - select descriptor endpoint at current device speed
+ * @g: gadget, connected and running at some speed
+ * @hs: descriptor to use for high speed operation
+ * @fs: descriptor to use for full or low speed operation
+ */
+static inline struct usb_endpoint_descriptor *
+ep_choose(struct usb_gadget *g, struct usb_endpoint_descriptor *hs,
+ struct usb_endpoint_descriptor *fs)
+{
+ if (gadget_is_dualspeed(g) && g->speed == USB_SPEED_HIGH)
+ return hs;
+ return fs;
+}
+
+#define MAX_CONFIG_INTERFACES 16 /* arbitrary; max 255 */
+
+/**
+ * struct usb_configuration - represents one gadget configuration
+ * @label: For diagnostics, describes the configuration.
+ * @strings: Tables of strings, keyed by identifiers assigned during @bind()
+ * and by language IDs provided in control requests.
+ * @descriptors: Table of descriptors preceding all function descriptors.
+ * Examples include OTG and vendor-specific descriptors.
+ * @bind: Called from @usb_add_config() to allocate resources unique to this
+ * configuration and to call @usb_add_function() for each function used.
+ * @unbind: Reverses @bind; called as a side effect of unregistering the
+ * driver which added this configuration.
+ * @setup: Used to delegate control requests that aren't handled by standard
+ * device infrastructure or directed at a specific interface.
+ * @bConfigurationValue: Copied into configuration descriptor.
+ * @iConfiguration: Copied into configuration descriptor.
+ * @bmAttributes: Copied into configuration descriptor.
+ * @bMaxPower: Copied into configuration descriptor.
+ * @cdev: assigned by @usb_add_config() before calling @bind(); this is
+ * the device associated with this configuration.
+ *
+ * Configurations are building blocks for gadget drivers structured around
+ * function drivers. Simple USB gadgets require only one function and one
+ * configuration, and handle dual-speed hardware by always providing the same
+ * functionality. Slightly more complex gadgets may have more than one
+ * single-function configuration at a given speed; or have configurations
+ * that only work at one speed.
+ *
+ * Composite devices are, by definition, ones with configurations which
+ * include more than one function.
+ *
+ * The lifecycle of a usb_configuration includes allocation, initialization
+ * of the fields described above, and calling @usb_add_config() to set up
+ * internal data and bind it to a specific device. The configuration's
+ * @bind() method is then used to initialize all the functions and then
+ * call @usb_add_function() for them.
+ *
+ * Those functions would normally be independant of each other, but that's
+ * not mandatory. CDC WMC devices are an example where functions often
+ * depend on other functions, with some functions subsidiary to others.
+ * Such interdependency may be managed in any way, so long as all of the
+ * descriptors complete by the time the composite driver returns from
+ * its bind() routine.
+ */
+struct usb_configuration {
+ const char *label;
+ struct usb_gadget_strings **strings;
+ const struct usb_descriptor_header **descriptors;
+
+ /* REVISIT: bind() functions can be marked __init, which
+ * makes trouble for section mismatch analysis. See if
+ * we can't restructure things to avoid mismatching...
+ */
+
+ /* configuration management: bind/unbind */
+ int (*bind)(struct usb_configuration *);
+ void (*unbind)(struct usb_configuration *);
+ int (*setup)(struct usb_configuration *,
+ const struct usb_ctrlrequest *);
+
+ /* fields in the config descriptor */
+ u8 bConfigurationValue;
+ u8 iConfiguration;
+ u8 bmAttributes;
+ u8 bMaxPower;
+
+ struct usb_composite_dev *cdev;
+
+ /* private: */
+ /* internals */
+ struct list_head list;
+ struct list_head functions;
+ u8 next_interface_id;
+ unsigned highspeed:1;
+ unsigned fullspeed:1;
+ struct usb_function *interface[MAX_CONFIG_INTERFACES];
+};
+
+int usb_add_config(struct usb_composite_dev *,
+ struct usb_configuration *);
+
+/**
+ * struct usb_composite_driver - groups configurations into a gadget
+ * @name: For diagnostics, identifies the driver.
+ * @dev: Template descriptor for the device, including default device
+ * identifiers.
+ * @strings: tables of strings, keyed by identifiers assigned during bind()
+ * and language IDs provided in control requests
+ * @bind: (REQUIRED) Used to allocate resources that are shared across the
+ * whole device, such as string IDs, and add its configurations using
+ * @usb_add_config(). This may fail by returning a negative errno
+ * value; it should return zero on successful initialization.
+ * @unbind: Reverses @bind(); called as a side effect of unregistering
+ * this driver.
+ * @disconnect: optional driver disconnect method
+ * @suspend: Notifies when the host stops sending USB traffic,
+ * after function notifications
+ * @resume: Notifies configuration when the host restarts USB traffic,
+ * before function notifications
+ *
+ * Devices default to reporting self powered operation. Devices which rely
+ * on bus powered operation should report this in their @bind() method.
+ *
+ * Before returning from @bind, various fields in the template descriptor
+ * may be overridden. These include the idVendor/idProduct/bcdDevice values
+ * normally to bind the appropriate host side driver, and the three strings
+ * (iManufacturer, iProduct, iSerialNumber) normally used to provide user
+ * meaningful device identifiers. (The strings will not be defined unless
+ * they are defined in @dev and @strings.) The correct ep0 maxpacket size
+ * is also reported, as defined by the underlying controller driver.
+ */
+struct usb_composite_driver {
+ const char *name;
+ const struct usb_device_descriptor *dev;
+ struct usb_gadget_strings **strings;
+
+ /* REVISIT: bind() functions can be marked __init, which
+ * makes trouble for section mismatch analysis. See if
+ * we can't restructure things to avoid mismatching...
+ */
+
+ int (*bind)(struct usb_composite_dev *);
+ int (*unbind)(struct usb_composite_dev *);
+
+ void (*disconnect)(struct usb_composite_dev *);
+
+ /* global suspend hooks */
+ void (*suspend)(struct usb_composite_dev *);
+ void (*resume)(struct usb_composite_dev *);
+};
+
+extern int usb_composite_register(struct usb_composite_driver *);
+extern void usb_composite_unregister(struct usb_composite_driver *);
+
+
+/**
+ * struct usb_composite_device - represents one composite usb gadget
+ * @gadget: read-only, abstracts the gadget's usb peripheral controller
+ * @req: used for control responses; buffer is pre-allocated
+ * @bufsiz: size of buffer pre-allocated in @req
+ * @config: the currently active configuration
+ *
+ * One of these devices is allocated and initialized before the
+ * associated device driver's bind() is called.
+ *
+ * OPEN ISSUE: it appears that some WUSB devices will need to be
+ * built by combining a normal (wired) gadget with a wireless one.
+ * This revision of the gadget framework should probably try to make
+ * sure doing that won't hurt too much.
+ *
+ * One notion for how to handle Wireless USB devices involves:
+ * (a) a second gadget here, discovery mechanism TBD, but likely
+ * needing separate "register/unregister WUSB gadget" calls;
+ * (b) updates to usb_gadget to include flags "is it wireless",
+ * "is it wired", plus (presumably in a wrapper structure)
+ * bandgroup and PHY info;
+ * (c) presumably a wireless_ep wrapping a usb_ep, and reporting
+ * wireless-specific parameters like maxburst and maxsequence;
+ * (d) configurations that are specific to wireless links;
+ * (e) function drivers that understand wireless configs and will
+ * support wireless for (additional) function instances;
+ * (f) a function to support association setup (like CBAF), not
+ * necessarily requiring a wireless adapter;
+ * (g) composite device setup that can create one or more wireless
+ * configs, including appropriate association setup support;
+ * (h) more, TBD.
+ */
+struct usb_composite_dev {
+ struct usb_gadget *gadget;
+ struct usb_request *req;
+ unsigned bufsiz;
+
+ struct usb_configuration *config;
+
+ /* private: */
+ /* internals */
+ unsigned int suspended:1;
+ struct usb_device_descriptor desc;
+ struct list_head configs;
+ struct usb_composite_driver *driver;
+ u8 next_string_id;
+
+ /* the gadget driver won't enable the data pullup
+ * while the deactivation count is nonzero.
+ */
+ unsigned deactivations;
+};
+
+extern int usb_string_id(struct usb_composite_dev *c);
+extern int usb_string_ids_tab(struct usb_composite_dev *c,
+ struct usb_string *str);
+extern int usb_string_ids_n(struct usb_composite_dev *c, unsigned n);
+
+#endif /* __LINUX_USB_COMPOSITE_H */
diff --git a/include/linux/usb/gadget.h b/include/linux/usb/gadget.h
index 275cb5fe15..eba865ea09 100644
--- a/include/linux/usb/gadget.h
+++ b/include/linux/usb/gadget.h
@@ -411,6 +411,7 @@ struct usb_gadget_ops {
struct device {
void *driver_data; /* data private to the driver */
+ void *device_data; /* data private to the device */
};
/**
@@ -481,6 +482,11 @@ static inline void *get_gadget_data(struct usb_gadget *gadget)
return gadget->dev.driver_data;
}
+static inline struct usb_gadget *dev_to_usb_gadget(struct device *dev)
+{
+ return container_of(dev, struct usb_gadget, dev);
+}
+
/* iterates the non-control endpoints; 'tmp' is a struct usb_ep pointer */
#define gadget_for_each_ep(tmp, gadget) \
list_for_each_entry(tmp, &(gadget)->ep_list, ep_list)
diff --git a/include/max8997_pmic.h b/include/max8997_pmic.h
new file mode 100644
index 0000000000..17ae24ea6a
--- /dev/null
+++ b/include/max8997_pmic.h
@@ -0,0 +1,190 @@
+/*
+ * Copyright (C) 2011 Samsung Electronics
+ * Lukasz Majewski <l.majewski@samsung.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __MAX8997_PMIC_H_
+#define __MAX8997_PMIC_H_
+
+/* MAX 8997 registers */
+enum {
+ MAX8997_REG_PMIC_ID0 = 0x00,
+ MAX8997_REG_PMIC_ID1 = 0x01,
+ MAX8997_REG_INTSRC = 0x02,
+ MAX8997_REG_INT1 = 0x03,
+ MAX8997_REG_INT2 = 0x04,
+ MAX8997_REG_INT3 = 0x05,
+ MAX8997_REG_INT4 = 0x06,
+
+ MAX8997_REG_INT1MSK = 0x08,
+ MAX8997_REG_INT2MSK = 0x09,
+ MAX8997_REG_INT3MSK = 0x0a,
+ MAX8997_REG_INT4MSK = 0x0b,
+
+ MAX8997_REG_STATUS1 = 0x0d,
+ MAX8997_REG_STATUS2 = 0x0e,
+ MAX8997_REG_STATUS3 = 0x0f,
+ MAX8997_REG_STATUS4 = 0x10,
+
+ MAX8997_REG_MAINCON1 = 0x13,
+ MAX8997_REG_MAINCON2 = 0x14,
+ MAX8997_REG_BUCKRAMP = 0x15,
+
+ MAX8997_REG_BUCK1CTRL = 0x18,
+ MAX8997_REG_BUCK1DVS1 = 0x19,
+ MAX8997_REG_BUCK1DVS2 = 0x1a,
+ MAX8997_REG_BUCK1DVS3 = 0x1b,
+ MAX8997_REG_BUCK1DVS4 = 0x1c,
+ MAX8997_REG_BUCK1DVS5 = 0x1d,
+ MAX8997_REG_BUCK1DVS6 = 0x1e,
+ MAX8997_REG_BUCK1DVS7 = 0x1f,
+ MAX8997_REG_BUCK1DVS8 = 0x20,
+ MAX8997_REG_BUCK2CTRL = 0x21,
+ MAX8997_REG_BUCK2DVS1 = 0x22,
+ MAX8997_REG_BUCK2DVS2 = 0x23,
+ MAX8997_REG_BUCK2DVS3 = 0x24,
+ MAX8997_REG_BUCK2DVS4 = 0x25,
+ MAX8997_REG_BUCK2DVS5 = 0x26,
+ MAX8997_REG_BUCK2DVS6 = 0x27,
+ MAX8997_REG_BUCK2DVS7 = 0x28,
+ MAX8997_REG_BUCK2DVS8 = 0x29,
+ MAX8997_REG_BUCK3CTRL = 0x2a,
+ MAX8997_REG_BUCK3DVS = 0x2b,
+ MAX8997_REG_BUCK4CTRL = 0x2c,
+ MAX8997_REG_BUCK4DVS = 0x2d,
+ MAX8997_REG_BUCK5CTRL = 0x2e,
+ MAX8997_REG_BUCK5DVS1 = 0x2f,
+ MAX8997_REG_BUCK5DVS2 = 0x30,
+ MAX8997_REG_BUCK5DVS3 = 0x31,
+ MAX8997_REG_BUCK5DVS4 = 0x32,
+ MAX8997_REG_BUCK5DVS5 = 0x33,
+ MAX8997_REG_BUCK5DVS6 = 0x34,
+ MAX8997_REG_BUCK5DVS7 = 0x35,
+ MAX8997_REG_BUCK5DVS8 = 0x36,
+ MAX8997_REG_BUCK6CTRL = 0x37,
+ MAX8997_REG_BUCK6BPSKIPCTRL = 0x38,
+ MAX8997_REG_BUCK7CTRL = 0x39,
+ MAX8997_REG_BUCK7DVS = 0x3a,
+ MAX8997_REG_LDO1CTRL = 0x3b,
+ MAX8997_REG_LDO2CTRL = 0x3c,
+ MAX8997_REG_LDO3CTRL = 0x3d,
+ MAX8997_REG_LDO4CTRL = 0x3e,
+ MAX8997_REG_LDO5CTRL = 0x3f,
+ MAX8997_REG_LDO6CTRL = 0x40,
+ MAX8997_REG_LDO7CTRL = 0x41,
+ MAX8997_REG_LDO8CTRL = 0x42,
+ MAX8997_REG_LDO9CTRL = 0x43,
+ MAX8997_REG_LDO10CTRL = 0x44,
+ MAX8997_REG_LDO11CTRL = 0x45,
+ MAX8997_REG_LDO12CTRL = 0x46,
+ MAX8997_REG_LDO13CTRL = 0x47,
+ MAX8997_REG_LDO14CTRL = 0x48,
+ MAX8997_REG_LDO15CTRL = 0x49,
+ MAX8997_REG_LDO16CTRL = 0x4a,
+ MAX8997_REG_LDO17CTRL = 0x4b,
+ MAX8997_REG_LDO18CTRL = 0x4c,
+ MAX8997_REG_LDO21CTRL = 0x4d,
+
+ MAX8997_REG_MBCCTRL1 = 0x50,
+ MAX8997_REG_MBCCTRL2 = 0x51,
+ MAX8997_REG_MBCCTRL3 = 0x52,
+ MAX8997_REG_MBCCTRL4 = 0x53,
+ MAX8997_REG_MBCCTRL5 = 0x54,
+ MAX8997_REG_MBCCTRL6 = 0x55,
+ MAX8997_REG_OTPCGHCVS = 0x56,
+
+ MAX8997_REG_SAFEOUTCTRL = 0x5a,
+
+ MAX8997_REG_LBCNFG1 = 0x5e,
+ MAX8997_REG_LBCNFG2 = 0x5f,
+ MAX8997_REG_BBCCTRL = 0x60,
+
+ MAX8997_REG_FLASH1_CUR = 0x63, /* 0x63 ~ 0x6e for FLASH */
+ MAX8997_REG_FLASH2_CUR = 0x64,
+ MAX8997_REG_MOVIE_CUR = 0x65,
+ MAX8997_REG_GSMB_CUR = 0x66,
+ MAX8997_REG_BOOST_CNTL = 0x67,
+ MAX8997_REG_LEN_CNTL = 0x68,
+ MAX8997_REG_FLASH_CNTL = 0x69,
+ MAX8997_REG_WDT_CNTL = 0x6a,
+ MAX8997_REG_MAXFLASH1 = 0x6b,
+ MAX8997_REG_MAXFLASH2 = 0x6c,
+ MAX8997_REG_FLASHSTATUS = 0x6d,
+ MAX8997_REG_FLASHSTATUSMASK = 0x6e,
+
+ MAX8997_REG_GPIOCNTL1 = 0x70,
+ MAX8997_REG_GPIOCNTL2 = 0x71,
+ MAX8997_REG_GPIOCNTL3 = 0x72,
+ MAX8997_REG_GPIOCNTL4 = 0x73,
+ MAX8997_REG_GPIOCNTL5 = 0x74,
+ MAX8997_REG_GPIOCNTL6 = 0x75,
+ MAX8997_REG_GPIOCNTL7 = 0x76,
+ MAX8997_REG_GPIOCNTL8 = 0x77,
+ MAX8997_REG_GPIOCNTL9 = 0x78,
+ MAX8997_REG_GPIOCNTL10 = 0x79,
+ MAX8997_REG_GPIOCNTL11 = 0x7a,
+ MAX8997_REG_GPIOCNTL12 = 0x7b,
+
+ MAX8997_REG_LDO1CONFIG = 0x80,
+ MAX8997_REG_LDO2CONFIG = 0x81,
+ MAX8997_REG_LDO3CONFIG = 0x82,
+ MAX8997_REG_LDO4CONFIG = 0x83,
+ MAX8997_REG_LDO5CONFIG = 0x84,
+ MAX8997_REG_LDO6CONFIG = 0x85,
+ MAX8997_REG_LDO7CONFIG = 0x86,
+ MAX8997_REG_LDO8CONFIG = 0x87,
+ MAX8997_REG_LDO9CONFIG = 0x88,
+ MAX8997_REG_LDO10CONFIG = 0x89,
+ MAX8997_REG_LDO11CONFIG = 0x8a,
+ MAX8997_REG_LDO12CONFIG = 0x8b,
+ MAX8997_REG_LDO13CONFIG = 0x8c,
+ MAX8997_REG_LDO14CONFIG = 0x8d,
+ MAX8997_REG_LDO15CONFIG = 0x8e,
+ MAX8997_REG_LDO16CONFIG = 0x8f,
+ MAX8997_REG_LDO17CONFIG = 0x90,
+ MAX8997_REG_LDO18CONFIG = 0x91,
+ MAX8997_REG_LDO21CONFIG = 0x92,
+
+ MAX8997_REG_DVSOKTIMER1 = 0x97,
+ MAX8997_REG_DVSOKTIMER2 = 0x98,
+ MAX8997_REG_DVSOKTIMER4 = 0x99,
+ MAX8997_REG_DVSOKTIMER5 = 0x9a,
+
+ PMIC_NUM_OF_REGS = 0x9b,
+};
+
+#define ENSAFEOUT1 (1 << 6)
+#define ENSAFEOUT2 (1 << 7)
+
+#define MAX8997_I2C_ADDR (0xCC >> 1)
+#define MAX8997_RTC_ADDR (0x0C >> 1)
+#define MAX8997_MUIC_ADDR (0x4A >> 1)
+#define MAX8997_FG_ADDR (0x6C >> 1)
+
+enum {
+ LDO_OFF = 0,
+ LDO_ON = 1,
+
+ DIS_LDO = (0x00 << 6),
+ EN_LDO = (0x3 << 6),
+};
+
+#endif /* __MAX8997_PMIC_H_ */
diff --git a/include/max8998_pmic.h b/include/max8998_pmic.h
index 10c892a51d..ca21f882c2 100644
--- a/include/max8998_pmic.h
+++ b/include/max8998_pmic.h
@@ -75,6 +75,7 @@ enum {
};
#define MAX8998_LDO3 (1 << 2)
+#define MAX8998_LDO4 (1 << 1)
#define MAX8998_LDO8 (1 << 5)
#define MAX8998_SAFEOUT1 (1 << 4)
diff --git a/include/mmc.h b/include/mmc.h
index f52df70ad4..70a54034a9 100644
--- a/include/mmc.h
+++ b/include/mmc.h
@@ -4,48 +4,43 @@
*
* Based (loosely) on the Linux code
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _MMC_H_
#define _MMC_H_
#include <linux/list.h>
+#include <linux/compiler.h>
#define SD_VERSION_SD 0x20000
-#define SD_VERSION_2 (SD_VERSION_SD | 0x20)
-#define SD_VERSION_1_0 (SD_VERSION_SD | 0x10)
-#define SD_VERSION_1_10 (SD_VERSION_SD | 0x1a)
+#define SD_VERSION_3 (SD_VERSION_SD | 0x300)
+#define SD_VERSION_2 (SD_VERSION_SD | 0x200)
+#define SD_VERSION_1_0 (SD_VERSION_SD | 0x100)
+#define SD_VERSION_1_10 (SD_VERSION_SD | 0x10a)
#define MMC_VERSION_MMC 0x10000
#define MMC_VERSION_UNKNOWN (MMC_VERSION_MMC)
-#define MMC_VERSION_1_2 (MMC_VERSION_MMC | 0x12)
-#define MMC_VERSION_1_4 (MMC_VERSION_MMC | 0x14)
-#define MMC_VERSION_2_2 (MMC_VERSION_MMC | 0x22)
-#define MMC_VERSION_3 (MMC_VERSION_MMC | 0x30)
-#define MMC_VERSION_4 (MMC_VERSION_MMC | 0x40)
-
-#define MMC_MODE_HS 0x001
-#define MMC_MODE_HS_52MHz 0x010
-#define MMC_MODE_4BIT 0x100
-#define MMC_MODE_8BIT 0x200
-#define MMC_MODE_SPI 0x400
-#define MMC_MODE_HC 0x800
+#define MMC_VERSION_1_2 (MMC_VERSION_MMC | 0x102)
+#define MMC_VERSION_1_4 (MMC_VERSION_MMC | 0x104)
+#define MMC_VERSION_2_2 (MMC_VERSION_MMC | 0x202)
+#define MMC_VERSION_3 (MMC_VERSION_MMC | 0x300)
+#define MMC_VERSION_4 (MMC_VERSION_MMC | 0x400)
+#define MMC_VERSION_4_1 (MMC_VERSION_MMC | 0x401)
+#define MMC_VERSION_4_2 (MMC_VERSION_MMC | 0x402)
+#define MMC_VERSION_4_3 (MMC_VERSION_MMC | 0x403)
+#define MMC_VERSION_4_41 (MMC_VERSION_MMC | 0x429)
+#define MMC_VERSION_4_5 (MMC_VERSION_MMC | 0x405)
+
+#define MMC_MODE_HS (1 << 0)
+#define MMC_MODE_HS_52MHz (1 << 1)
+#define MMC_MODE_4BIT (1 << 2)
+#define MMC_MODE_8BIT (1 << 3)
+#define MMC_MODE_SPI (1 << 4)
+#define MMC_MODE_HC (1 << 5)
+#define MMC_MODE_DDR_52MHz (1 << 6)
+
+#define MMC_MODE_MASK_WIDTH_BITS (MMC_MODE_4BIT | MMC_MODE_8BIT)
+#define MMC_MODE_WIDTH_BITS_SHIFT 8
#define SD_DATA_4BIT 0x00040000
@@ -58,6 +53,8 @@
#define UNUSABLE_ERR -17 /* Unusable Card */
#define COMM_ERR -18 /* Communications Error */
#define TIMEOUT -19
+#define IN_PROGRESS -20 /* operation is in progress */
+#define SWITCH_ERR -21 /* Card reports failure to switch mode */
#define MMC_CMD_GO_IDLE_STATE 0
#define MMC_CMD_SEND_OP_COND 1
@@ -74,6 +71,7 @@
#define MMC_CMD_SET_BLOCKLEN 16
#define MMC_CMD_READ_SINGLE_BLOCK 17
#define MMC_CMD_READ_MULTIPLE_BLOCK 18
+#define MMC_CMD_SET_BLOCK_COUNT 23
#define MMC_CMD_WRITE_SINGLE_BLOCK 24
#define MMC_CMD_WRITE_MULTIPLE_BLOCK 25
#define MMC_CMD_ERASE_GROUP_START 35
@@ -82,6 +80,11 @@
#define MMC_CMD_APP_CMD 55
#define MMC_CMD_SPI_READ_OCR 58
#define MMC_CMD_SPI_CRC_ON_OFF 59
+#define MMC_CMD_RES_MAN 62
+
+#define MMC_CMD62_ARG1 0xefac62ec
+#define MMC_CMD62_ARG2 0xcbaea7
+
#define SD_CMD_SEND_RELATIVE_ADDR 3
#define SD_CMD_SWITCH_FUNC 6
@@ -108,6 +111,7 @@
#define SECURE_ERASE 0x80000000
#define MMC_STATUS_MASK (~0x0206BF7F)
+#define MMC_STATUS_SWITCH_ERROR (1 << 7)
#define MMC_STATUS_RDY_FOR_DATA (1 << 8)
#define MMC_STATUS_CURR_STATE (0xf << 9)
#define MMC_STATUS_ERROR (1 << 19)
@@ -147,15 +151,21 @@
/*
* EXT_CSD fields
*/
+#define EXT_CSD_GP_SIZE_MULT 143 /* R/W */
+#define EXT_CSD_PARTITIONS_ATTRIBUTE 156 /* R/W */
#define EXT_CSD_PARTITIONING_SUPPORT 160 /* RO */
+#define EXT_CSD_RPMB_MULT 168 /* RO */
#define EXT_CSD_ERASE_GROUP_DEF 175 /* R/W */
+#define EXT_CSD_BOOT_BUS_WIDTH 177
#define EXT_CSD_PART_CONF 179 /* R/W */
#define EXT_CSD_BUS_WIDTH 183 /* R/W */
#define EXT_CSD_HS_TIMING 185 /* R/W */
#define EXT_CSD_REV 192 /* RO */
#define EXT_CSD_CARD_TYPE 196 /* RO */
#define EXT_CSD_SEC_CNT 212 /* RO, 4 bytes */
+#define EXT_CSD_HC_WP_GRP_SIZE 221 /* RO */
#define EXT_CSD_HC_ERASE_GRP_SIZE 224 /* RO */
+#define EXT_CSD_BOOT_MULT 226 /* RO */
/*
* EXT_CSD field definitions
@@ -167,10 +177,26 @@
#define EXT_CSD_CARD_TYPE_26 (1 << 0) /* Card can run at 26MHz */
#define EXT_CSD_CARD_TYPE_52 (1 << 1) /* Card can run at 52MHz */
+#define EXT_CSD_CARD_TYPE_DDR_1_8V (1 << 2)
+#define EXT_CSD_CARD_TYPE_DDR_1_2V (1 << 3)
+#define EXT_CSD_CARD_TYPE_DDR_52 (EXT_CSD_CARD_TYPE_DDR_1_8V \
+ | EXT_CSD_CARD_TYPE_DDR_1_2V)
#define EXT_CSD_BUS_WIDTH_1 0 /* Card is in 1 bit mode */
#define EXT_CSD_BUS_WIDTH_4 1 /* Card is in 4 bit mode */
#define EXT_CSD_BUS_WIDTH_8 2 /* Card is in 8 bit mode */
+#define EXT_CSD_DDR_BUS_WIDTH_4 5 /* Card is in 4 bit DDR mode */
+#define EXT_CSD_DDR_BUS_WIDTH_8 6 /* Card is in 8 bit DDR mode */
+
+#define EXT_CSD_BOOT_ACK_ENABLE (1 << 6)
+#define EXT_CSD_BOOT_PARTITION_ENABLE (1 << 3)
+#define EXT_CSD_PARTITION_ACCESS_ENABLE (1 << 0)
+#define EXT_CSD_PARTITION_ACCESS_DISABLE (0 << 0)
+
+#define EXT_CSD_BOOT_ACK(x) (x << 6)
+#define EXT_CSD_BOOT_PART_NUM(x) (x << 3)
+#define EXT_CSD_PARTITION_ACCESS(x) (x << 0)
+
#define R1_ILLEGAL_COMMAND (1 << 22)
#define R1_APP_CMD (1 << 5)
@@ -195,6 +221,26 @@
#define MMCPART_NOAVAILABLE (0xff)
#define PART_ACCESS_MASK (0x7)
#define PART_SUPPORT (0x1)
+#define PART_ENH_ATTRIB (0x1f)
+
+/*
+ * MMC Flash Manufacturer ID Codes
+ */
+#define MMC_MFR_TOSHIBA 0x11
+#define MMC_MFR_SAMSUNG 0x15
+#define MMC_MFR_SANDISK 0x45
+#define MMC_MFR_HYNIX 0x90
+#define MMC_MFR_MICRON 0x13
+#define MMC_MFR_MICRON1 0xfe
+#define MMC_MFR_GIGADEVICE 0xC8
+
+/* Maximum block size for MMC */
+#define MMC_MAX_BLOCK_LEN 512
+
+/* The number of MMC physical partitions. These consist of:
+ * boot partitions (2), general purpose partitions (4) in MMC v4.4.
+ */
+#define MMC_NUM_BOOT_PARTITION 2
struct mmc_cid {
unsigned long psn;
@@ -205,54 +251,14 @@ struct mmc_cid {
char pnm[7];
};
-/*
- * WARNING!
- *
- * This structure is used by atmel_mci.c only.
- * It works for the AVR32 architecture but NOT
- * for ARM/AT91 architectures.
- * Its use is highly depreciated.
- * After the atmel_mci.c driver for AVR32 has
- * been replaced this structure will be removed.
- */
-struct mmc_csd
-{
- u8 csd_structure:2,
- spec_vers:4,
- rsvd1:2;
- u8 taac;
- u8 nsac;
- u8 tran_speed;
- u16 ccc:12,
- read_bl_len:4;
- u64 read_bl_partial:1,
- write_blk_misalign:1,
- read_blk_misalign:1,
- dsr_imp:1,
- rsvd2:2,
- c_size:12,
- vdd_r_curr_min:3,
- vdd_r_curr_max:3,
- vdd_w_curr_min:3,
- vdd_w_curr_max:3,
- c_size_mult:3,
- sector_size:5,
- erase_grp_size:5,
- wp_grp_size:5,
- wp_grp_enable:1,
- default_ecc:2,
- r2w_factor:3,
- write_bl_len:4,
- write_bl_partial:1,
- rsvd3:5;
- u8 file_format_grp:1,
- copy:1,
- perm_write_protect:1,
- tmp_write_protect:1,
- file_format:2,
- ecc:2;
- u8 crc:7;
- u8 one:1;
+/**
+ * struct mmc_manufacturers - MMC Flash Manufacturer ID Structure
+ * @name: Manufacturer name
+ * @id: manufacturer ID code of device.
+*/
+struct mmc_manufacturers {
+ int id;
+ char *name;
};
struct mmc_cmd {
@@ -260,7 +266,6 @@ struct mmc_cmd {
uint resp_type;
uint cmdarg;
uint response[4];
- uint flags;
};
struct mmc_data {
@@ -299,19 +304,30 @@ struct mmc {
uint write_bl_len;
uint erase_grp_size;
u64 capacity;
+ u64 capacity_user;
+ u64 capacity_boot;
+ u64 capacity_rpmb;
+ u64 capacity_gp[4];
block_dev_desc_t block_dev;
int (*send_cmd)(struct mmc *mmc,
struct mmc_cmd *cmd, struct mmc_data *data);
void (*set_ios)(struct mmc *mmc);
int (*init)(struct mmc *mmc);
int (*getcd)(struct mmc *mmc);
+ int (*getwp)(struct mmc *mmc);
uint b_max;
+ char op_cond_pending; /* 1 if we are waiting on an op_cond command */
+ char init_in_progress; /* 1 if we have done mmc_start_init() */
+ char preinit; /* start init as early as possible */
+ uint op_cond_response; /* the response byte from the last op_cond */
};
int mmc_register(struct mmc *mmc);
int mmc_initialize(bd_t *bis);
int mmc_init(struct mmc *mmc);
int mmc_read(struct mmc *mmc, u64 src, uchar *dst, int size);
+int mmc_write(struct mmc *mmc, u64 to, uchar *buf, int size);
+int mmc_erase(unsigned int from, unsigned int size);
void mmc_set_clock(struct mmc *mmc, uint clock);
struct mmc *find_mmc_device(int dev_num);
int mmc_set_dev(int dev_num);
@@ -320,9 +336,45 @@ int get_mmc_num(void);
int board_mmc_getcd(struct mmc *mmc);
int mmc_switch_part(int dev_num, unsigned int part_num);
int mmc_getcd(struct mmc *mmc);
+int mmc_getwp(struct mmc *mmc);
+void spl_mmc_load(void) __noreturn;
+/* Function to change the size of boot partition and rpmb partitions */
+int mmc_boot_partition_size_change(struct mmc *mmc, unsigned long bootsize,
+ unsigned long rpmbsize);
+/* Function to send commands to open/close the specified boot partition */
+int mmc_boot_part_access(struct mmc *mmc, u8 ack, u8 part_num, u8 access);
+
+/**
+ * Start device initialization and return immediately; it does not block on
+ * polling OCR (operation condition register) status. Then you should call
+ * mmc_init, which would block on polling OCR status and complete the device
+ * initializatin.
+ *
+ * @param mmc Pointer to a MMC device struct
+ * @return 0 on success, IN_PROGRESS on waiting for OCR status, <0 on error.
+ */
+int mmc_start_init(struct mmc *mmc);
+
+/**
+ * Set preinit flag of mmc device.
+ *
+ * This will cause the device to be pre-inited during mmc_initialize(),
+ * which may save boot time if the device is not accessed until later.
+ * Some eMMC devices take 200-300ms to init, but unfortunately they
+ * must be sent a series of commands to even get them to start preparing
+ * for operation.
+ *
+ * @param mmc Pointer to a MMC device struct
+ * @param preinit preinit flag value
+ */
+void mmc_set_preinit(struct mmc *mmc, int preinit);
#ifdef CONFIG_GENERIC_MMC
+#ifdef CONFIG_MMC_SPI
#define mmc_host_is_spi(mmc) ((mmc)->host_caps & MMC_MODE_SPI)
+#else
+#define mmc_host_is_spi(mmc) 0
+#endif
struct mmc *mmc_spi_init(uint bus, uint cs, uint speed, uint mode);
#else
int mmc_legacy_init(int verbose);
diff --git a/include/mmc/mmcpart.h b/include/mmc/mmcpart.h
new file mode 100644
index 0000000000..285eb7cdf8
--- /dev/null
+++ b/include/mmc/mmcpart.h
@@ -0,0 +1,36 @@
+/* Copyright (c) 2011, Code Aurora Forum. All rights reserved.
+
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Code Aurora Forum, Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+ * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+ * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+ * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+ * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+ * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef __MMC_PARTITION_PARSER_H__
+#define __MMC_PARTITION_PARSER_H__
+#include <mmc.h>
+
+int mmc_parts_init(void);
+int mmc_parts_format(void);
+#endif
+
diff --git a/include/mmc/sparse.h b/include/mmc/sparse.h
new file mode 100644
index 0000000000..ecd0edee2e
--- /dev/null
+++ b/include/mmc/sparse.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright (C) 2010 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+typedef struct sparse_header {
+ uint32_t magic; /* 0xed26ff3a */
+ uint16_t major_version; /* (0x1) - reject images with higher major versions */
+ uint16_t minor_version; /* (0x0) - allow images with higer minor versions */
+ uint16_t file_hdr_sz; /* 28 bytes for first revision of the file format */
+ uint16_t chunk_hdr_sz; /* 12 bytes for first revision of the file format */
+ uint32_t blk_sz; /* block size in bytes, must be a multiple of 4 (4096) */
+ uint32_t total_blks; /* total blocks in the non-sparse output image */
+ uint32_t total_chunks; /* total chunks in the sparse input image */
+ uint32_t image_checksum; /* CRC32 checksum of the original data, counting "don't care" */
+ /* as 0. Standard 802.3 polynomial, use a Public Domain */
+ /* table implementation */
+} sparse_header_t;
+
+#define SPARSE_HEADER_MAGIC 0xed26ff3a
+
+#define CHUNK_TYPE_RAW 0xCAC1
+#define CHUNK_TYPE_FILL 0xCAC2
+#define CHUNK_TYPE_DONT_CARE 0xCAC3
+#define CHUNK_TYPE_CRC 0xCAC4
+
+typedef struct chunk_header {
+ uint16_t chunk_type; /* 0xCAC1 -> raw; 0xCAC2 -> fill; 0xCAC3 -> don't care */
+ uint16_t reserved1;
+ uint32_t chunk_sz; /* in blocks in output image */
+ uint32_t total_sz; /* in bytes of chunk input file including chunk header and data */
+} chunk_header_t;
+
+/* Following a Raw or Fill chunk is data. For a Raw chunk, it's the data in chunk_sz * blk_sz.
+ * For a Fill chunk, it's 4 bytes of the fill data.
+ */
+
diff --git a/include/mtd/nand/rda_nand.h b/include/mtd/nand/rda_nand.h
new file mode 100644
index 0000000000..58edd54687
--- /dev/null
+++ b/include/mtd/nand/rda_nand.h
@@ -0,0 +1,121 @@
+#ifndef __RDA_NAND_H__
+#define __RDA_NAND_H__
+
+#include <asm/arch-rda/rda_sys.h>
+
+typedef enum
+{
+ NAND_MSG_LEN_1K = 0,
+ NAND_MSG_LEN_2K = 1,
+ NAND_MSG_LEN_4K = 2,
+ NAND_MSG_LEN_1152 = 3
+} NAND_ECC_MSG_LEN_TYPE;
+
+typedef enum
+{
+ NAND_OOB_LEN_32 = 0,
+ NAND_OOB_LEN_16 = 1
+} NAND_OOB_LEN_TYPE;
+
+typedef enum
+{
+ NAND_BUS_WIDTH_8BIT = 0,
+ NAND_BUS_WIDTH_16BIT = 1
+} NAND_BUS_WIDTH_TYPE;
+
+typedef union
+{
+ struct{
+ unsigned short pagesize:2;
+ unsigned short eccmode:4;
+ unsigned short eccmsglen:2;
+ unsigned short ooblen:1;
+ };
+ unsigned short reg;
+}EFUSE_NAND_INFO_T;
+
+typedef enum
+{
+ NAND_PARAMETER_BY_GPIO = 0,
+ NAND_PARAMETER_BY_NAND = 1
+} NAND_PARAMETER_MODE_TYPE;
+
+/*************************************************************/
+
+#define RDA_EFUSE_INDEX_NAND_INFO (4)
+
+/*
+ Fuse layout:low 9 bit
+ O.MM.VVVV.NN
+ NN: NAND_PAGE_TYPE
+ VVVV:NAND_ECC_TYPE
+ MM:NAND_ECC_MSG_LEN
+ O:OOB LEN
+*/
+/* define bit for rda nand info config */
+#define RDA_NAND_PAGESIZE_INDEX(n) (((n)&0x3)<<0)
+#define RDA_NAND_GET_PAGESIZE(r) (((r)>>0)&0x3)
+#define RDA_NAND_ECCMODE(n) (((n)&0xF)<<2)
+#define RDA_NAND_GET_ECCMODE(r) (((r)>>2)&0xF)
+#define RDA_NAND_ECCMSGLEN(n) (((n)&0x3)<<6)
+#define RDA_NAND_GET_ECCMSGLEN(r) (((r)>>6)&0x3)
+#define RDA_NAND_OOBLEN(n) (((n)&0x1)<<8)
+#define RDA_NAND_GET_OOBLEN(r) (((r)>>8)&0x1)
+/**************************************************************/
+
+struct rda_nand_info {
+ int type;
+ int hard_ecc_hec;
+ int ecc_mode;
+ int bus_width_16;
+ int page_num_per_block;
+
+ int page_size;
+ int erase_size;
+ int page_shift;
+ int oob_size;
+
+ int vir_page_size;
+ int vir_erase_size;
+ int vir_page_shift;
+ int vir_oob_size;
+
+ int cmd;
+ int col_addr;
+ int page_addr;
+ int read_ptr;
+ u32 byte_buf[4]; // for read_id, status, etc
+ int index;
+ int write_ptr;
+ void __iomem *nand_data_phys;
+ u8 dma_ch;
+ unsigned long master_clk;
+ unsigned long clk;
+ int cmd_flag;
+
+ u8 spl_adjust_ratio;
+ /*specially for nand dump command to read first 16K of nand v3.*/
+ u8 dump_debug_flag;
+ /*8810:8K/16k setting*/
+ /*nand_use_type = 1: 8K used as 2 4k or 3K*/
+ /*nand_use_type = 3: 16K used as 4 4k or 3K*/
+ /*nand_use_type = 0: 2K or 4k*/
+ u8 nand_use_type;
+ int logic_page_size;
+ int logic_oob_size;
+ int logic_operate_time;
+ /* rda8850e use*/
+ int page_total_num;
+ unsigned short flash_oob_off;
+ unsigned short message_len;
+ u32 bch_data;
+ u32 bch_oob;
+ u16 ecc_mode_bak;
+ u16 max_eccmode_support;
+ u8 type_bak;
+ NAND_PARAMETER_MODE_TYPE parameter_mode_select;
+ u32 spl_logic_pageaddr;
+ u32 boot_logic_end_pageaddr;
+};
+#endif
+
diff --git a/include/nand.h b/include/nand.h
index 8b3a1a77a3..3b9d510ad1 100644
--- a/include/nand.h
+++ b/include/nand.h
@@ -37,7 +37,7 @@
extern void nand_init(void);
-#include <linux/mtd/compat.h>
+#include <linux/compat.h>
#include <linux/mtd/mtd.h>
#include <linux/mtd/nand.h>
@@ -53,22 +53,24 @@ typedef struct mtd_info nand_info_t;
extern int nand_curr_device;
extern nand_info_t nand_info[];
-static inline int nand_read(nand_info_t *info, loff_t ofs, size_t *len, u_char *buf)
+static inline int nand_read(nand_info_t * info, loff_t ofs, size_t * len,
+ u_char * buf)
{
- return info->read(info, ofs, *len, (size_t *)len, buf);
+ return info->read(info, ofs, *len, (size_t *) len, buf);
}
-static inline int nand_write(nand_info_t *info, loff_t ofs, size_t *len, u_char *buf)
+static inline int nand_write(nand_info_t * info, loff_t ofs, size_t * len,
+ u_char * buf)
{
- return info->write(info, ofs, *len, (size_t *)len, buf);
+ return info->write(info, ofs, *len, (size_t *) len, buf);
}
-static inline int nand_block_isbad(nand_info_t *info, loff_t ofs)
+static inline int nand_block_isbad(nand_info_t * info, loff_t ofs)
{
return info->block_isbad(info, ofs);
}
-static inline int nand_erase(nand_info_t *info, loff_t off, size_t size)
+static inline int nand_erase(nand_info_t * info, loff_t off, size_t size)
{
struct erase_info instr;
@@ -80,7 +82,6 @@ static inline int nand_erase(nand_info_t *info, loff_t off, size_t size)
return info->erase(info, &instr);
}
-
/*****************************************************************************
* declarations from nand_util.c
****************************************************************************/
@@ -104,7 +105,7 @@ typedef struct nand_write_options nand_write_options_t;
typedef struct mtd_oob_ops mtd_oob_ops_t;
struct nand_read_options {
- u_char *buffer; /* memory block in which read image is written*/
+ u_char *buffer; /* memory block in which read image is written */
ulong length; /* number of bytes to read */
ulong offset; /* start address in NAND */
int quiet; /* don't display progress messages */
@@ -128,42 +129,55 @@ struct nand_erase_options {
typedef struct nand_erase_options nand_erase_options_t;
-int nand_read_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
- u_char *buffer);
-
-#define WITH_YAFFS_OOB (1 << 0) /* whether write with yaffs format. This flag
- * is a 'mode' meaning it cannot be mixed with
- * other flags */
-#define WITH_DROP_FFS (1 << 1) /* drop trailing all-0xff pages */
-
-int nand_write_skip_bad(nand_info_t *nand, loff_t offset, size_t *length,
- u_char *buffer, int flags);
-int nand_erase_opts(nand_info_t *meminfo, const nand_erase_options_t *opts);
+int nand_read_skip_bad(nand_info_t * nand, loff_t offset, size_t * length,
+ u_char * buffer);
+
+#define WITH_YAFFS_OOB (1 << 0) /* whether write with yaffs format. This flag
+ * is a 'mode' meaning it cannot be mixed with
+ * other flags */
+#define WITH_DROP_FFS (1 << 1) /* drop trailing all-0xff pages */
+
+int nand_erase_opts(nand_info_t * meminfo, const nand_erase_options_t * opts);
+int nand_write_skip_bad(nand_info_t * nand, loff_t offset, size_t * length,
+ u_char * buffer, int flags);
+int nand_write_skip_bad_new(nand_info_t * nand, loff_t offset, size_t * length,
+ loff_t max_limit, u_char * buffer,
+ int flags, u32 * skip_blocks);
+int nand_write_unsparse(nand_info_t * nand, loff_t offset, size_t * length,
+ loff_t max_limit, u_char * buffer,
+ int flags, u32 * skip_blocks);
+int nand_read_skip_bad_new(nand_info_t * nand, loff_t offset, size_t * length,
+ u_char * buffer, u32 * skip_blocks);
#define NAND_LOCK_STATUS_TIGHT 0x01
#define NAND_LOCK_STATUS_LOCK 0x02
#define NAND_LOCK_STATUS_UNLOCK 0x04
-int nand_lock( nand_info_t *meminfo, int tight );
-int nand_unlock( nand_info_t *meminfo, ulong start, ulong length );
-int nand_get_lock_status(nand_info_t *meminfo, loff_t offset);
+int nand_lock(nand_info_t * meminfo, int tight);
+int nand_unlock(nand_info_t * meminfo, ulong start, ulong length);
+int nand_get_lock_status(nand_info_t * meminfo, loff_t offset);
-int nand_spl_load_image(uint32_t offs, unsigned int size, void *dst);
+int nand_spl_load_image(uint64_t offs, uint64_t size, void *dst);
void nand_deselect(void);
-
+int nand_spl_read_skip_bad(uint64_t offs, uint64_t size, u8 * dst,
+ u32 * skip_blocks);
+void nand_spl_mtd_info(u32 * page_size, u32 * block_size);
+#ifdef CONFIG_RDA_FPGA
+void nand_dirty_block_erase(int page);
+#endif
#ifdef CONFIG_SYS_NAND_SELECT_DEVICE
void board_nand_select_device(struct nand_chip *nand, int chip);
#endif
-__attribute__((noreturn)) void nand_boot(void);
+void nand_boot(void);
#endif
#ifdef CONFIG_ENV_OFFSET_OOB
-#define ENV_OOB_MARKER 0x30425645 /*"EVB0" in little-endian -- offset is stored
- as block number*/
-#define ENV_OOB_MARKER_OLD 0x30564e45 /*"ENV0" in little-endian -- offset is
- stored as byte number */
+#define ENV_OOB_MARKER 0x30425645 /*"EVB0" in little-endian -- offset is stored
+ as block number */
+#define ENV_OOB_MARKER_OLD 0x30564e45 /*"ENV0" in little-endian -- offset is
+ stored as byte number */
#define ENV_OFFSET_SIZE 8
-int get_nand_env_oob(nand_info_t *nand, unsigned long *result);
+int get_nand_env_oob(nand_info_t * nand, unsigned long *result);
#endif
diff --git a/include/net.h b/include/net.h
index ee11f82ccc..a092f291bb 100644
--- a/include/net.h
+++ b/include/net.h
@@ -19,6 +19,10 @@
#include <asm/cache.h>
#include <asm/byteorder.h> /* for nton* / ntoh* stuff */
+#define DEBUG_LL_STATE 0 /* Link local state machine changes */
+#define DEBUG_DEV_PKT 0 /* Packets or info directed to the device */
+#define DEBUG_NET_PKT 0 /* Packets on info on the network at large */
+#define DEBUG_INT_STATE 0 /* Internal network state changes */
/*
* The number of receive packet buffers, and the required packet buffer
@@ -80,14 +84,14 @@ struct eth_device {
int iobase;
int state;
- int (*init) (struct eth_device*, bd_t*);
- int (*send) (struct eth_device*, volatile void* packet, int length);
- int (*recv) (struct eth_device*);
- void (*halt) (struct eth_device*);
+ int (*init) (struct eth_device *, bd_t *);
+ int (*send) (struct eth_device *, void *packet, int length);
+ int (*recv) (struct eth_device *);
+ void (*halt) (struct eth_device *);
#ifdef CONFIG_MCAST_TFTP
- int (*mcast) (struct eth_device*, u32 ip, u8 set);
+ int (*mcast) (struct eth_device *, u32 ip, u8 set);
#endif
- int (*write_hwaddr) (struct eth_device*);
+ int (*write_hwaddr) (struct eth_device *);
struct eth_device *next;
int index;
void *priv;
@@ -101,7 +105,7 @@ extern void eth_set_current(void); /* set nterface to ethcur var */
extern struct eth_device *eth_get_dev(void); /* get the current device MAC */
extern struct eth_device *eth_get_dev_by_name(const char *devname);
extern struct eth_device *eth_get_dev_by_index(int index); /* get dev @ index */
-extern int eth_get_dev_index (void); /* get the device index */
+extern int eth_get_dev_index(void); /* get the device index */
extern void eth_parse_enetaddr(const char *addr, uchar *enetaddr);
extern int eth_getenv_enetaddr(char *name, uchar *enetaddr);
extern int eth_setenv_enetaddr(char *name, const uchar *enetaddr);
@@ -120,10 +124,11 @@ extern int eth_getenv_enetaddr_by_index(const char *base_name, int index,
extern int usb_eth_initialize(bd_t *bi);
extern int eth_init(bd_t *bis); /* Initialize the device */
-extern int eth_send(volatile void *packet, int length); /* Send a packet */
+extern int eth_send(void *packet, int length); /* Send a packet */
#ifdef CONFIG_API
-extern int eth_receive(volatile void *packet, int length); /* Receive a packet*/
+extern int eth_receive(void *packet, int length); /* Receive a packet*/
+extern void (*push_packet)(void *packet, int length);
#endif
extern int eth_rx(void); /* Check for received packets */
extern void eth_halt(void); /* stop SCC */
@@ -142,8 +147,8 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
int eth_number);
#ifdef CONFIG_MCAST_TFTP
-int eth_mcast_join( IPaddr_t mcast_addr, u8 join);
-u32 ether_crc (size_t len, unsigned char const *p);
+int eth_mcast_join(IPaddr_t mcast_addr, u8 join);
+u32 ether_crc(size_t len, unsigned char const *p);
#endif
@@ -155,7 +160,17 @@ u32 ether_crc (size_t len, unsigned char const *p);
/*
* Ethernet header
*/
-typedef struct {
+
+struct ethernet_hdr {
+ uchar et_dest[6]; /* Destination node */
+ uchar et_src[6]; /* Source node */
+ ushort et_protlen; /* Protocol or length */
+};
+
+/* Ethernet header size */
+#define ETHER_HDR_SIZE (sizeof(struct ethernet_hdr))
+
+struct e802_hdr {
uchar et_dest[6]; /* Destination node */
uchar et_src[6]; /* Source node */
ushort et_protlen; /* Protocol or length */
@@ -166,23 +181,24 @@ typedef struct {
uchar et_snap2;
uchar et_snap3;
ushort et_prot; /* 802 protocol */
-} Ethernet_t;
+};
-#define ETHER_HDR_SIZE 14 /* Ethernet header size */
-#define E802_HDR_SIZE 22 /* 802 ethernet header size */
+/* 802 + SNAP + ethernet header size */
+#define E802_HDR_SIZE (sizeof(struct e802_hdr))
/*
- * Ethernet header
+ * Virtual LAN Ethernet header
*/
-typedef struct {
+struct vlan_ethernet_hdr {
uchar vet_dest[6]; /* Destination node */
uchar vet_src[6]; /* Source node */
ushort vet_vlan_type; /* PROT_VLAN */
ushort vet_tag; /* TAG of VLAN */
ushort vet_type; /* protocol type */
-} VLAN_Ethernet_t;
+};
-#define VLAN_ETHER_HDR_SIZE 18 /* VLAN Ethernet header size */
+/* VLAN Ethernet header size */
+#define VLAN_ETHER_HDR_SIZE (sizeof(struct vlan_ethernet_hdr))
#define PROT_IP 0x0800 /* IP protocol */
#define PROT_ARP 0x0806 /* IP ARP protocol */
@@ -195,7 +211,7 @@ typedef struct {
/*
* Internet Protocol (IP) header.
*/
-typedef struct {
+struct ip_hdr {
uchar ip_hl_v; /* header length and version */
uchar ip_tos; /* type of service */
ushort ip_len; /* total length */
@@ -206,11 +222,7 @@ typedef struct {
ushort ip_sum; /* checksum */
IPaddr_t ip_src; /* Source IP address */
IPaddr_t ip_dst; /* Destination IP address */
- ushort udp_src; /* UDP source port */
- ushort udp_dst; /* UDP destination port */
- ushort udp_len; /* Length of UDP packet */
- ushort udp_xsum; /* Checksum */
-} IP_t;
+};
#define IP_OFFS 0x1fff /* ip offset *= 8 */
#define IP_FLAGS 0xe000 /* first 3 bits */
@@ -218,20 +230,42 @@ typedef struct {
#define IP_FLAGS_DFRAG 0x4000 /* don't fragments */
#define IP_FLAGS_MFRAG 0x2000 /* more fragments */
-#define IP_HDR_SIZE_NO_UDP (sizeof (IP_t) - 8)
-#define IP_HDR_SIZE (sizeof (IP_t))
+#define IP_HDR_SIZE (sizeof(struct ip_hdr))
+
+/*
+ * Internet Protocol (IP) + UDP header.
+ */
+struct ip_udp_hdr {
+ uchar ip_hl_v; /* header length and version */
+ uchar ip_tos; /* type of service */
+ ushort ip_len; /* total length */
+ ushort ip_id; /* identification */
+ ushort ip_off; /* fragment offset field */
+ uchar ip_ttl; /* time to live */
+ uchar ip_p; /* protocol */
+ ushort ip_sum; /* checksum */
+ IPaddr_t ip_src; /* Source IP address */
+ IPaddr_t ip_dst; /* Destination IP address */
+ ushort udp_src; /* UDP source port */
+ ushort udp_dst; /* UDP destination port */
+ ushort udp_len; /* Length of UDP packet */
+ ushort udp_xsum; /* Checksum */
+};
+#define IP_UDP_HDR_SIZE (sizeof(struct ip_udp_hdr))
+#define UDP_HDR_SIZE (IP_UDP_HDR_SIZE - IP_HDR_SIZE)
/*
* Address Resolution Protocol (ARP) header.
*/
-typedef struct
-{
+struct arp_hdr {
ushort ar_hrd; /* Format of hardware address */
# define ARP_ETHER 1 /* Ethernet hardware address */
ushort ar_pro; /* Format of protocol address */
uchar ar_hln; /* Length of hardware address */
+# define ARP_HLEN 6
uchar ar_pln; /* Length of protocol address */
+# define ARP_PLEN 4
ushort ar_op; /* Operation */
# define ARPOP_REQUEST 1 /* Request to resolve address */
# define ARPOP_REPLY 2 /* Response to previous request */
@@ -245,13 +279,17 @@ typedef struct
* specific hardware/protocol combinations.
*/
uchar ar_data[0];
+#define ar_sha ar_data[0]
+#define ar_spa ar_data[ARP_HLEN]
+#define ar_tha ar_data[ARP_HLEN + ARP_PLEN]
+#define ar_tpa ar_data[ARP_HLEN + ARP_PLEN + ARP_HLEN]
#if 0
uchar ar_sha[]; /* Sender hardware address */
uchar ar_spa[]; /* Sender protocol address */
uchar ar_tha[]; /* Target hardware address */
uchar ar_tpa[]; /* Target protocol address */
#endif /* 0 */
-} ARP_t;
+};
#define ARP_HDR_SIZE (8+20) /* Size assuming ethernet */
@@ -270,7 +308,7 @@ typedef struct
/* Codes for NOT_REACH */
#define ICMP_NOT_REACH_PORT 3 /* Port unreachable */
-typedef struct icmphdr {
+struct icmp_hdr {
uchar type;
uchar code;
ushort checksum;
@@ -286,8 +324,10 @@ typedef struct icmphdr {
} frag;
uchar data[0];
} un;
-} ICMP_t;
+};
+#define ICMP_HDR_SIZE (sizeof(struct icmp_hdr))
+#define IP_ICMP_HDR_SIZE (IP_HDR_SIZE + ICMP_HDR_SIZE)
/*
* Maximum packet size; used to allocate packet storage.
@@ -326,54 +366,44 @@ typedef struct icmphdr {
/* net.c */
/** BOOTP EXTENTIONS **/
-extern IPaddr_t NetOurGatewayIP; /* Our gateway IP addresse */
-extern IPaddr_t NetOurSubnetMask; /* Our subnet mask (0 = unknown)*/
-extern IPaddr_t NetOurDNSIP; /* Our Domain Name Server (0 = unknown)*/
+extern IPaddr_t NetOurGatewayIP; /* Our gateway IP address */
+extern IPaddr_t NetOurSubnetMask; /* Our subnet mask (0 = unknown) */
+extern IPaddr_t NetOurDNSIP; /* Our Domain Name Server (0 = unknown) */
#if defined(CONFIG_BOOTP_DNS2)
-extern IPaddr_t NetOurDNS2IP; /* Our 2nd Domain Name Server (0 = unknown)*/
+extern IPaddr_t NetOurDNS2IP; /* Our 2nd Domain Name Server (0 = unknown) */
#endif
-extern char NetOurNISDomain[32]; /* Our NIS domain */
-extern char NetOurHostName[32]; /* Our hostname */
-extern char NetOurRootPath[64]; /* Our root path */
-extern ushort NetBootFileSize; /* Our boot file size in blocks */
+extern char NetOurNISDomain[32]; /* Our NIS domain */
+extern char NetOurHostName[32]; /* Our hostname */
+extern char NetOurRootPath[64]; /* Our root path */
+extern ushort NetBootFileSize; /* Our boot file size in blocks */
/** END OF BOOTP EXTENTIONS **/
-extern ulong NetBootFileXferSize; /* size of bootfile in bytes */
-extern uchar NetOurEther[6]; /* Our ethernet address */
-extern uchar NetServerEther[6]; /* Boot server enet address */
-extern IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */
-extern IPaddr_t NetServerIP; /* Server IP addr (0 = unknown) */
-extern volatile uchar * NetTxPacket; /* THE transmit packet */
-extern volatile uchar * NetRxPackets[PKTBUFSRX];/* Receive packets */
-extern volatile uchar * NetRxPacket; /* Current receive packet */
-extern int NetRxPacketLen; /* Current rx packet length */
-extern unsigned NetIPID; /* IP ID (counting) */
-extern uchar NetBcastAddr[6]; /* Ethernet boardcast address */
+extern ulong NetBootFileXferSize; /* size of bootfile in bytes */
+extern uchar NetOurEther[6]; /* Our ethernet address */
+extern uchar NetServerEther[6]; /* Boot server enet address */
+extern IPaddr_t NetOurIP; /* Our IP addr (0 = unknown) */
+extern IPaddr_t NetServerIP; /* Server IP addr (0 = unknown) */
+extern uchar *NetTxPacket; /* THE transmit packet */
+extern uchar *NetRxPackets[PKTBUFSRX]; /* Receive packets */
+extern uchar *NetRxPacket; /* Current receive packet */
+extern int NetRxPacketLen; /* Current rx packet length */
+extern unsigned NetIPID; /* IP ID (counting) */
+extern uchar NetBcastAddr[6]; /* Ethernet boardcast address */
extern uchar NetEtherNullAddr[6];
-#define VLAN_NONE 4095 /* untagged */
-#define VLAN_IDMASK 0x0fff /* mask of valid vlan id */
-extern ushort NetOurVLAN; /* Our VLAN */
-extern ushort NetOurNativeVLAN; /* Our Native VLAN */
-
-extern uchar NetCDPAddr[6]; /* Ethernet CDP address */
-extern ushort CDPNativeVLAN; /* CDP returned native VLAN */
-extern ushort CDPApplianceVLAN; /* CDP returned appliance VLAN */
-
-extern int NetState; /* Network loop state */
-#define NETLOOP_CONTINUE 1
-#define NETLOOP_RESTART 2
-#define NETLOOP_SUCCESS 3
-#define NETLOOP_FAIL 4
+#define VLAN_NONE 4095 /* untagged */
+#define VLAN_IDMASK 0x0fff /* mask of valid vlan id */
+extern ushort NetOurVLAN; /* Our VLAN */
+extern ushort NetOurNativeVLAN; /* Our Native VLAN */
-extern int NetRestartWrap; /* Tried all network devices */
+extern int NetRestartWrap; /* Tried all network devices */
enum proto_t {
BOOTP, RARP, ARP, TFTPGET, DHCP, PING, DNS, NFS, CDP, NETCONS, SNTP,
- TFTPSRV, TFTPPUT
+ TFTPSRV, TFTPPUT, LINKLOCAL
};
/* from net/net.c */
-extern char BootFile[128]; /* Boot File name */
+extern char BootFile[128]; /* Boot File name */
#if defined(CONFIG_CMD_DNS)
extern char *NetDNSResolve; /* The host to resolve */
@@ -381,21 +411,36 @@ extern char *NetDNSenvvar; /* the env var to put the ip into */
#endif
#if defined(CONFIG_CMD_PING)
-extern IPaddr_t NetPingIP; /* the ip address to ping */
+extern IPaddr_t NetPingIP; /* the ip address to ping */
#endif
#if defined(CONFIG_CMD_CDP)
/* when CDP completes these hold the return values */
-extern ushort CDPNativeVLAN;
-extern ushort CDPApplianceVLAN;
+extern ushort CDPNativeVLAN; /* CDP returned native VLAN */
+extern ushort CDPApplianceVLAN; /* CDP returned appliance VLAN */
+
+/*
+ * Check for a CDP packet by examining the received MAC address field
+ */
+static inline int is_cdp_packet(const uchar *et_addr)
+{
+ extern const uchar NetCDPAddr[6];
+
+ return memcmp(et_addr, NetCDPAddr, 6) == 0;
+}
#endif
#if defined(CONFIG_CMD_SNTP)
-extern IPaddr_t NetNtpServerIP; /* the ip address to NTP */
-extern int NetTimeOffset; /* offset time from UTC */
+extern IPaddr_t NetNtpServerIP; /* the ip address to NTP */
+extern int NetTimeOffset; /* offset time from UTC */
+#endif
+
+#if defined(CONFIG_MCAST_TFTP)
+extern IPaddr_t Mcast_addr;
#endif
/* Initialize the network adapter */
+extern void net_init(void);
extern int NetLoop(enum proto_t);
/* Shutdown adapters and cleanup */
@@ -408,28 +453,67 @@ extern void NetStartAgain(void);
extern int NetEthHdrSize(void);
/* Set ethernet header; returns the size of the header */
-extern int NetSetEther(volatile uchar *, uchar *, uint);
+extern int NetSetEther(uchar *, uchar *, uint);
+extern int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot);
/* Set IP header */
-extern void NetSetIP(volatile uchar *, IPaddr_t, int, int, int);
+extern void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source);
+extern void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport,
+ int sport, int len);
/* Checksum */
-extern int NetCksumOk(uchar *, int); /* Return true if cksum OK */
-extern uint NetCksum(uchar *, int); /* Calculate the checksum */
-
-/* Set callbacks */
-extern void NetSetHandler(rxhand_f *); /* Set RX packet handler */
+extern int NetCksumOk(uchar *, int); /* Return true if cksum OK */
+extern uint NetCksum(uchar *, int); /* Calculate the checksum */
+
+/* Callbacks */
+extern rxhand_f *net_get_udp_handler(void); /* Get UDP RX packet handler */
+extern void net_set_udp_handler(rxhand_f *); /* Set UDP RX packet handler */
+extern rxhand_f *net_get_arp_handler(void); /* Get ARP RX packet handler */
+extern void net_set_arp_handler(rxhand_f *); /* Set ARP RX packet handler */
extern void net_set_icmp_handler(rxhand_icmp_f *f); /* Set ICMP RX handler */
-extern void NetSetTimeout(ulong, thand_f *);/* Set timeout handler */
+extern void NetSetTimeout(ulong, thand_f *);/* Set timeout handler */
+
+/* Network loop state */
+enum net_loop_state {
+ NETLOOP_CONTINUE,
+ NETLOOP_RESTART,
+ NETLOOP_SUCCESS,
+ NETLOOP_FAIL
+};
+static inline void net_set_state(enum net_loop_state state)
+{
+ extern enum net_loop_state net_state;
-/* Transmit "NetTxPacket" */
-extern void NetSendPacket(volatile uchar *, int);
+ debug_cond(DEBUG_INT_STATE, "--- NetState set to %d\n", state);
+ net_state = state;
+}
-/* Transmit UDP packet, performing ARP request if needed */
-extern int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len);
+/* Transmit a packet */
+static inline void NetSendPacket(uchar *pkt, int len)
+{
+ (void) eth_send(pkt, len);
+}
+
+/*
+ * Transmit "NetTxPacket" as UDP packet, performing ARP request if needed
+ * (ether will be populated)
+ *
+ * @param ether Raw packet buffer
+ * @param dest IP address to send the datagram to
+ * @param dport Destination UDP port
+ * @param sport Source UDP port
+ * @param payload_len Length of data after the UDP header
+ */
+extern int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport,
+ int sport, int payload_len);
/* Processes a received packet */
-extern void NetReceive(volatile uchar *, int);
+extern void NetReceive(uchar *, int);
+
+#ifdef CONFIG_NETCONSOLE
+void NcStart(void);
+int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len);
+#endif
/*
* Check if autoload is enabled. If so, use either NFS or TFTP to download
@@ -445,10 +529,11 @@ void net_auto_load(void);
* footprint in our tests.
*/
/* return IP *in network byteorder* */
-static inline IPaddr_t NetReadIP(volatile void *from)
+static inline IPaddr_t NetReadIP(void *from)
{
IPaddr_t ip;
- memcpy((void*)&ip, (void*)from, sizeof(ip));
+
+ memcpy((void *)&ip, (void *)from, sizeof(ip));
return ip;
}
@@ -456,26 +541,27 @@ static inline IPaddr_t NetReadIP(volatile void *from)
static inline ulong NetReadLong(ulong *from)
{
ulong l;
- memcpy((void*)&l, (void*)from, sizeof(l));
+
+ memcpy((void *)&l, (void *)from, sizeof(l));
return l;
}
/* write IP *in network byteorder* */
static inline void NetWriteIP(void *to, IPaddr_t ip)
{
- memcpy(to, (void*)&ip, sizeof(ip));
+ memcpy(to, (void *)&ip, sizeof(ip));
}
/* copy IP */
-static inline void NetCopyIP(volatile void *to, void *from)
+static inline void NetCopyIP(void *to, void *from)
{
- memcpy((void*)to, from, sizeof(IPaddr_t));
+ memcpy((void *)to, from, sizeof(IPaddr_t));
}
/* copy ulong */
static inline void NetCopyLong(ulong *to, ulong *from)
{
- memcpy((void*)to, (void*)from, sizeof(ulong));
+ memcpy((void *)to, (void *)from, sizeof(ulong));
}
/**
@@ -498,7 +584,7 @@ static inline int is_zero_ether_addr(const u8 *addr)
*/
static inline int is_multicast_ether_addr(const u8 *addr)
{
- return (0x01 & addr[0]);
+ return 0x01 & addr[0];
}
/*
@@ -509,7 +595,8 @@ static inline int is_multicast_ether_addr(const u8 *addr)
*/
static inline int is_broadcast_ether_addr(const u8 *addr)
{
- return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) == 0xff;
+ return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) ==
+ 0xff;
}
/*
@@ -529,13 +616,13 @@ static inline int is_valid_ether_addr(const u8 *addr)
}
/* Convert an IP address to a string */
-extern void ip_to_string (IPaddr_t x, char *s);
+extern void ip_to_string(IPaddr_t x, char *s);
/* Convert a string to ip address */
extern IPaddr_t string_to_ip(const char *s);
/* Convert a VLAN id to a string */
-extern void VLAN_to_string (ushort x, char *s);
+extern void VLAN_to_string(ushort x, char *s);
/* Convert a string to a vlan id */
extern ushort string_to_VLAN(const char *s);
@@ -544,7 +631,7 @@ extern ushort string_to_VLAN(const char *s);
extern ushort getenv_VLAN(char *);
/* copy a filename (allow for "..." notation, limit length) */
-extern void copy_filename (char *dst, const char *src, int size);
+extern void copy_filename(char *dst, const char *src, int size);
/* get a random source port */
extern unsigned int random_port(void);
diff --git a/include/part.h b/include/part.h
index 182776791d..eda896d471 100644
--- a/include/part.h
+++ b/include/part.h
@@ -2,23 +2,7 @@
* (C) Copyright 2000-2004
* Wolfgang Denk, DENX Software Engineering, wd@denx.de.
*
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier: GPL-2.0+
*/
#ifndef _PART_H
#define _PART_H
@@ -36,25 +20,34 @@ typedef struct block_dev_desc {
#ifdef CONFIG_LBA48
unsigned char lba48; /* device can use 48bit addr (ATA/ATAPI v7) */
#endif
- lbaint_t lba; /* number of blocks */
+ lbaint_t lba; /* number of blocks */
unsigned long blksz; /* block size */
+ int log2blksz; /* for convenience: log2(blksz) */
char vendor [40+1]; /* IDE model, SCSI Vendor */
char product[20+1]; /* IDE Serial no, SCSI product */
char revision[8+1]; /* firmware revision */
unsigned long (*block_read)(int dev,
- unsigned long start,
+ lbaint_t start,
lbaint_t blkcnt,
void *buffer);
unsigned long (*block_write)(int dev,
- unsigned long start,
+ lbaint_t start,
lbaint_t blkcnt,
const void *buffer);
unsigned long (*block_erase)(int dev,
- unsigned long start,
+ lbaint_t start,
lbaint_t blkcnt);
void *priv; /* driver private struct pointer */
}block_dev_desc_t;
+#define BLOCK_CNT(size, block_dev_desc) (PAD_COUNT(size, block_dev_desc->blksz))
+#define PAD_TO_BLOCKSIZE(size, block_dev_desc) \
+ (PAD_SIZE(size, block_dev_desc->blksz))
+#define LOG2(x) (((x & 0xaaaaaaaa) ? 1 : 0) + ((x & 0xcccccccc) ? 2 : 0) + \
+ ((x & 0xf0f0f0f0) ? 4 : 0) + ((x & 0xff00ff00) ? 8 : 0) + \
+ ((x & 0xffff0000) ? 16 : 0))
+#define LOG2_INVALID(type) ((type)((sizeof(type)<<3)-1))
+
/* Interface types: */
#define IF_TYPE_UNKNOWN 0
#define IF_TYPE_IDE 1
@@ -88,16 +81,21 @@ typedef struct block_dev_desc {
#define DEV_TYPE_OPDISK 0x07 /* optical disk */
typedef struct disk_partition {
- ulong start; /* # of first block in partition */
- ulong size; /* number of blocks in partition */
+ lbaint_t start; /* # of first block in partition */
+ lbaint_t size; /* number of blocks in partition */
ulong blksz; /* block size in bytes */
uchar name[32]; /* partition name */
uchar type[32]; /* string type description */
+ int bootable; /* Active/Bootable flag is set */
+#ifdef CONFIG_PARTITION_UUIDS
+ char uuid[37]; /* filesystem UUID as string, if exists */
+#endif
} disk_partition_t;
/* Misc _get_dev functions */
#ifdef CONFIG_PARTITIONS
-block_dev_desc_t* get_dev(char* ifname, int dev);
+block_dev_desc_t *get_dev(const char *ifname, int dev);
+block_dev_desc_t *get_dev_by_name(char *devname);
block_dev_desc_t* ide_get_dev(int dev);
block_dev_desc_t* sata_get_dev(int dev);
block_dev_desc_t* scsi_get_dev(int dev);
@@ -107,12 +105,58 @@ block_dev_desc_t* systemace_get_dev(int dev);
block_dev_desc_t* mg_disk_get_dev(int dev);
/* disk/part.c */
+/* Refer to doc/README.partition_funcs for information about these functions. */
+int get_partition_by_name(block_dev_desc_t *dev, const char *partition_name,
+ disk_partition_t *partition);
+int partition_erase_pre(disk_partition_t *ptn);
+int partition_erase_post(disk_partition_t *ptn);
+int partition_read_pre(disk_partition_t *ptn);
+int partition_read_post(disk_partition_t *ptn);
+int partition_write_pre(disk_partition_t *ptn);
+int partition_write_post(disk_partition_t *ptn);
+int partition_erase_blks(block_dev_desc_t *dev, disk_partition_t *partition,
+ lbaint_t *blkcnt);
+int partition_erase_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt);
+#ifdef CONFIG_MD5
+void partition_md5_helper(block_dev_desc_t *dev, lbaint_t blk_start,
+ lbaint_t *blkcnt, unsigned char md5[16]);
+int partition_md5_blks(block_dev_desc_t *dev, disk_partition_t *partition,
+ lbaint_t *blkcnt, unsigned char md5[16]);
+int partition_md5_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt, unsigned char md5[16]);
+#endif /* CONFIG_MD5 */
+int partition_read_blks(block_dev_desc_t *dev, disk_partition_t *partition,
+ lbaint_t *blkcnt, void *buffer);
+int partition_read_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt, void *buffer);
+int partition_write_blks(block_dev_desc_t *dev, disk_partition_t *partition,
+ lbaint_t *blkcnt, const void *buffer);
+int partition_write_bytes(block_dev_desc_t *dev, disk_partition_t *partition,
+ loff_t *bytecnt, const void *buffer);
+int partition_unsparse(block_dev_desc_t *dev, disk_partition_t *ptn,
+ unsigned char *source, lbaint_t sector, lbaint_t num_blks);
+disk_partition_t *partition_find_ptn(const char *name);
int get_partition_info (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
void print_part (block_dev_desc_t *dev_desc);
void init_part (block_dev_desc_t *dev_desc);
void dev_print(block_dev_desc_t *dev_desc);
+int get_device(const char *ifname, const char *dev_str,
+ block_dev_desc_t **dev_desc);
+int get_device_and_partition(const char *ifname, const char *dev_part_str,
+ block_dev_desc_t **dev_desc,
+ disk_partition_t *info, int allow_whole_dev);
+#ifndef CONFIG_MIN_PARTITION_NUM
+#define CONFIG_MIN_PARTITION_NUM 0
+#endif
+#ifndef CONFIG_MAX_PARTITION_NUM
+#define CONFIG_MAX_PARTITION_NUM 20
+#endif
#else
-static inline block_dev_desc_t* get_dev(char* ifname, int dev) { return NULL; }
+static inline block_dev_desc_t *get_dev(const char *ifname, int dev)
+{ return NULL; }
+static inline block_dev_desc_t *get_dev_by_name(char* ifname,
+ int dev) { return NULL; }
static inline block_dev_desc_t* ide_get_dev(int dev) { return NULL; }
static inline block_dev_desc_t* sata_get_dev(int dev) { return NULL; }
static inline block_dev_desc_t* scsi_get_dev(int dev) { return NULL; }
@@ -120,12 +164,76 @@ static inline block_dev_desc_t* usb_stor_get_dev(int dev) { return NULL; }
static inline block_dev_desc_t* mmc_get_dev(int dev) { return NULL; }
static inline block_dev_desc_t* systemace_get_dev(int dev) { return NULL; }
static inline block_dev_desc_t* mg_disk_get_dev(int dev) { return NULL; }
-
+static inline block_dev_desc_t *nand_get_dev(int dev) { return NULL; }
+static inline int get_partition_by_name(block_dev_desc_t *dev,
+ const char *partition_name,
+ disk_partition_t *partition) { return -ENODEV; }
+static inline int partition_erase_pre(disk_partition_t *ptn)
+ { return -ENODEV; }
+static inline int partition_erase_post(disk_partition_t *ptn)
+ { return -ENODEV; }
+static inline int partition_read_pre(disk_partition_t *ptn)
+ { return -ENODEV; }
+static inline int partition_read_post(disk_partition_t *ptn)
+ { return -ENODEV; }
+static inline int partition_write_pre(disk_partition_t *ptn)
+ { return -ENODEV; }
+static inline int partition_write_post(disk_partition_t *ptn)
+ { return -ENODEV; }
+static inline int partition_erase_blks(block_dev_desc_t *dev,
+ disk_partition_t *partition,
+ lbaint_t *blkcnt) { return -ENODEV; }
+static inline int partition_erase_bytes(block_dev_desc_t *dev,
+ disk_partition_t *partition,
+ loff_t *bytecnt) { return -ENODEV; }
+#ifdef CONFIG_MD5
+static inline void partition_md5_helper(block_dev_desc_t *dev,
+ lbaint_t blk_start, lbaint_t *blkcnt,
+ unsigned char md5[16]) { *blkcnt = 0; }
+static inline int partition_md5_blks(block_dev_desc_t *dev,
+ disk_partition_t *partition, lbaint_t *blkcnt,
+ unsigned char md5[16]) { return -ENODEV; }
+static inline int partition_md5_bytes(block_dev_desc_t *dev,
+ disk_partition_t *partition, loff_t *bytecnt,
+ unsigned char md5[16]) { return -ENODEV; }
+#endif /* CONFIG_MD5 */
+static inline int partition_read_blks(block_dev_desc_t *dev,
+ disk_partition_t *partition, lbaint_t *blkcnt,
+ void *buffer) { return -ENODEV; }
+static inline int partition_read_bytes(block_dev_desc_t *dev,
+ disk_partition_t *partition, loff_t *bytecnt,
+ void *buffer) { return -ENODEV; }
+static inline int partition_write_blks(block_dev_desc_t *dev,
+ disk_partition_t *partition, lbaint_t *blkcnt,
+ const void *buffer) { return -ENODEV; }
+static inline int partition_write_bytes(block_dev_desc_t *dev,
+ disk_partition_t *partition, loff_t *bytecnt,
+ const void *buffer) { return -ENODEV; }
+int partition_unsparse(block_dev_desc_t *dev, disk_partition_t *ptn,
+ unsigned char *source, lbaint_t sector, lbaint_t num_blks)
+ { return -ENODEV;}
+disk_partition_t *partition_find_ptn(const char *name)
+ { return NULL;}
static inline int get_partition_info (block_dev_desc_t * dev_desc, int part,
disk_partition_t *info) { return -1; }
static inline void print_part (block_dev_desc_t *dev_desc) {}
static inline void init_part (block_dev_desc_t *dev_desc) {}
static inline void dev_print(block_dev_desc_t *dev_desc) {}
+static inline int get_device(const char *ifname, const char *dev_str,
+ block_dev_desc_t **dev_desc)
+{ return -1; }
+static inline int get_device_and_partition(const char *ifname,
+ const char *dev_part_str,
+ block_dev_desc_t **dev_desc,
+ disk_partition_t *info,
+ int allow_whole_dev)
+{ *dev_desc = NULL; return -1; }
+#ifndef CONFIG_MIN_PARTITION_NUM
+#define CONFIG_MIN_PARTITION_NUM 0
+#endif
+#ifndef CONFIG_MAX_PARTITION_NUM
+#define CONFIG_MAX_PARTITION_NUM 0
+#endif
#endif
#ifdef CONFIG_MAC_PARTITION
@@ -157,10 +265,62 @@ int test_part_amiga (block_dev_desc_t *dev_desc);
#endif
#ifdef CONFIG_EFI_PARTITION
+#include <part_efi.h>
/* disk/part_efi.c */
int get_partition_info_efi (block_dev_desc_t * dev_desc, int part, disk_partition_t *info);
void print_part_efi (block_dev_desc_t *dev_desc);
int test_part_efi (block_dev_desc_t *dev_desc);
+
+/**
+ * write_gpt_table() - Write the GUID Partition Table to disk
+ *
+ * @param dev_desc - block device descriptor
+ * @param gpt_h - pointer to GPT header representation
+ * @param gpt_e - pointer to GPT partition table entries
+ *
+ * @return - zero on success, otherwise error
+ */
+int write_gpt_table(block_dev_desc_t *dev_desc,
+ gpt_header *gpt_h, gpt_entry *gpt_e);
+
+/**
+ * gpt_fill_pte(): Fill the GPT partition table entry
+ *
+ * @param gpt_h - GPT header representation
+ * @param gpt_e - GPT partition table entries
+ * @param partitions - list of partitions
+ * @param parts - number of partitions
+ *
+ * @return zero on success
+ */
+int gpt_fill_pte(gpt_header *gpt_h, gpt_entry *gpt_e,
+ disk_partition_t *partitions, int parts);
+
+/**
+ * gpt_fill_header(): Fill the GPT header
+ *
+ * @param dev_desc - block device descriptor
+ * @param gpt_h - GPT header representation
+ * @param str_guid - disk guid string representation
+ * @param parts_count - number of partitions
+ *
+ * @return - error on str_guid conversion error
+ */
+int gpt_fill_header(block_dev_desc_t *dev_desc, gpt_header *gpt_h,
+ char *str_guid, int parts_count);
+
+/**
+ * gpt_restore(): Restore GPT partition table
+ *
+ * @param dev_desc - block device descriptor
+ * @param str_disk_guid - disk GUID
+ * @param partitions - list of partitions
+ * @param parts - number of partitions
+ *
+ * @return zero on success
+ */
+int gpt_restore(block_dev_desc_t *dev_desc, char *str_disk_guid,
+ disk_partition_t *partitions, const int parts_count);
#endif
#endif /* _PART_H */
diff --git a/disk/part_efi.h b/include/part_efi.h
index 5903e7c812..5903e7c812 100644
--- a/disk/part_efi.h
+++ b/include/part_efi.h
diff --git a/include/pdl.h b/include/pdl.h
new file mode 100644
index 0000000000..679460a45a
--- /dev/null
+++ b/include/pdl.h
@@ -0,0 +1,13 @@
+#ifndef __PDL_H_
+#define __PDL_H_
+
+extern int pdl_dbg_pdl;
+extern int pdl_vdbg_pdl;
+extern int pdl_dbg_usb_ep0;
+extern int pdl_dbg_usb_serial;
+extern int pdl_dbg_rw_check;
+extern int pdl_dbg_factory_part;
+
+int pdl_main(void);
+int pdl_mode_get(void);
+#endif
diff --git a/include/pmic.h b/include/pmic.h
index 52a1526d95..6a05b40aef 100644
--- a/include/pmic.h
+++ b/include/pmic.h
@@ -55,6 +55,7 @@ struct pmic {
};
int pmic_init(void);
+int pmic_dialog_init(void);
int check_reg(u32 reg);
struct pmic *get_pmic(void);
int pmic_probe(struct pmic *p);
diff --git a/include/rda/ddr_timing/8810p_16x2_156m_ddr2.h b/include/rda/ddr_timing/8810p_16x2_156m_ddr2.h
new file mode 100644
index 0000000000..becc4cf0ec
--- /dev/null
+++ b/include/rda/ddr_timing/8810p_16x2_156m_ddr2.h
@@ -0,0 +1,84 @@
+#define DDR_TIMIMG_NAME "8810p_16x2_156m_ddr2"
+
+#define PMU_VBUCK1_VAL 9
+#define PMU_VBUCK3_VAL 10
+
+#define DDR_VTT_VAL 1
+
+#define DDR_CHAN_1_VALID_VAL 1
+#define DDR_CHAN_2_VALID_VAL 1
+#define DDR_CHAN_3_VALID_VAL 1
+#define DDR_CHAN_4_VALID_VAL 1
+
+#define DDR_TIMING_100H_VAL 0x0000
+#define DDR_TIMING_101H_VAL 0x0000
+#define DDR_TIMING_102H_VAL 0x0000
+#define DDR_TIMING_103H_VAL 0x64b0
+#define DDR_TIMING_104H_VAL 0x3333
+
+#define DDR_TIMING_105H_VAL 0x3333
+#define DDR_TIMING_106H_VAL 0x0463
+#define DDR_TIMING_107H_VAL 0x1144
+#define DDR_TIMING_108H_VAL 0x0000
+
+#define DDR_TIMING_109H_VAL 0x1101
+#define DDR_TIMING_10AH_VAL 0x0001
+#define DDR_TIMING_10BH_VAL 0x0003
+
+#define DDR_TIMING_120H_VAL 0x0000
+#define DDR_TIMING_121H_VAL 0x0000
+#define DDR_TIMING_122H_VAL 0x0000
+#define DDR_TIMING_123H_VAL 0x64b0
+#define DDR_TIMING_124H_VAL 0x3333
+
+#define DDR_TIMING_125H_VAL 0x3333
+#define DDR_TIMING_126H_VAL 0x0463
+#define DDR_TIMING_127H_VAL 0x1144
+#define DDR_TIMING_128H_VAL 0x0000
+#define DDR_TIMING_129H_VAL 0x1101
+#define DDR_TIMING_12AH_VAL 0x0001
+#define DDR_TIMING_12BH_VAL 0x0003
+
+#define DDR_TIMING_140H_VAL 0x0000
+#define DDR_TIMING_141H_VAL 0x0000
+#define DDR_TIMING_142H_VAL 0x0000
+#define DDR_TIMING_143H_VAL 0x64b0
+#define DDR_TIMING_144H_VAL 0x3333
+#define DDR_TIMING_145H_VAL 0x3333
+#define DDR_TIMING_146H_VAL 0x0463
+#define DDR_TIMING_147H_VAL 0x1144
+#define DDR_TIMING_148H_VAL 0x0000
+#define DDR_TIMING_149H_VAL 0x1101
+#define DDR_TIMING_14AH_VAL 0x0001
+#define DDR_TIMING_14BH_VAL 0x0003
+
+
+#define DDR_TIMING_161H_VAL 0x0000
+#define DDR_TIMING_162H_VAL 0x0000
+#define DDR_TIMING_163H_VAL 0x64b0
+#define DDR_TIMING_164H_VAL 0x3333
+#define DDR_TIMING_165H_VAL 0x3333
+#define DDR_TIMING_166H_VAL 0x0463
+#define DDR_TIMING_167H_VAL 0x1144
+#define DDR_TIMING_168H_VAL 0x0000
+#define DDR_TIMING_169H_VAL 0x1101
+#define DDR_TIMING_16AH_VAL 0x0001
+#define DDR_TIMING_16BH_VAL 0x0003
+
+#define DDR_TIMING_180H_VAL 0x3336
+#define DDR_TIMING_181H_VAL 0x3333
+#define DDR_TIMING_182H_VAL 0x3333
+#define DDR_TIMING_183H_VAL 0x3333
+#define DDR_TIMING_184H_VAL 0x3333
+#define DDR_TIMING_185H_VAL 0x3333
+#define DDR_TIMING_186H_VAL 0x3333
+#define DDR_TIMING_187H_VAL 0x3333
+#define DDR_TIMING_188H_VAL 0x0001
+#define DDR_TIMING_189H_VAL 0x0000
+#define DDR_TIMING_18AH_VAL 0x1144
+#define DDR_TIMING_18BH_VAL 0x0013
+#define DDR_TIMING_18CH_VAL 0x0000
+
+#define DDR_TIMING_160H_VAL 0x0000
+#define DDR_TIMING_69H_VAL 0x0009
+
diff --git a/include/rda/ddr_timing/8810p_16x2_200m_ddr2.h b/include/rda/ddr_timing/8810p_16x2_200m_ddr2.h
new file mode 100644
index 0000000000..86b8b26142
--- /dev/null
+++ b/include/rda/ddr_timing/8810p_16x2_200m_ddr2.h
@@ -0,0 +1,84 @@
+#define DDR_TIMIMG_NAME "8810p_16x2_200m_ddr2"
+
+#define PMU_VBUCK1_VAL 9
+#define PMU_VBUCK3_VAL 10
+
+#define DDR_VTT_VAL 1
+
+#define DDR_CHAN_1_VALID_VAL 1
+#define DDR_CHAN_2_VALID_VAL 1
+#define DDR_CHAN_3_VALID_VAL 1
+#define DDR_CHAN_4_VALID_VAL 1
+
+#define DDR_TIMING_100H_VAL 0x0000
+#define DDR_TIMING_101H_VAL 0x0000
+#define DDR_TIMING_102H_VAL 0x0000
+#define DDR_TIMING_103H_VAL 0x24b0
+#define DDR_TIMING_104H_VAL 0x3333
+
+#define DDR_TIMING_105H_VAL 0x3333
+#define DDR_TIMING_106H_VAL 0x0763
+#define DDR_TIMING_107H_VAL 0x1144
+#define DDR_TIMING_108H_VAL 0x0000
+
+#define DDR_TIMING_109H_VAL 0x1101
+#define DDR_TIMING_10AH_VAL 0x0001
+#define DDR_TIMING_10BH_VAL 0x0003
+
+#define DDR_TIMING_120H_VAL 0x0000
+#define DDR_TIMING_121H_VAL 0x0000
+#define DDR_TIMING_122H_VAL 0x0000
+#define DDR_TIMING_123H_VAL 0x24b0
+#define DDR_TIMING_124H_VAL 0x3333
+
+#define DDR_TIMING_125H_VAL 0x3333
+#define DDR_TIMING_126H_VAL 0x0763
+#define DDR_TIMING_127H_VAL 0x1144
+#define DDR_TIMING_128H_VAL 0x0000
+#define DDR_TIMING_129H_VAL 0x1101
+#define DDR_TIMING_12AH_VAL 0x0001
+#define DDR_TIMING_12BH_VAL 0x0003
+
+#define DDR_TIMING_140H_VAL 0x0000
+#define DDR_TIMING_141H_VAL 0x0000
+#define DDR_TIMING_142H_VAL 0x0000
+#define DDR_TIMING_143H_VAL 0x24b0
+#define DDR_TIMING_144H_VAL 0x3333
+#define DDR_TIMING_145H_VAL 0x3333
+#define DDR_TIMING_146H_VAL 0x0763
+#define DDR_TIMING_147H_VAL 0x1144
+#define DDR_TIMING_148H_VAL 0x0000
+#define DDR_TIMING_149H_VAL 0x1101
+#define DDR_TIMING_14AH_VAL 0x0001
+#define DDR_TIMING_14BH_VAL 0x0003
+
+
+#define DDR_TIMING_161H_VAL 0x0000
+#define DDR_TIMING_162H_VAL 0x0000
+#define DDR_TIMING_163H_VAL 0x24b0
+#define DDR_TIMING_164H_VAL 0x3333
+#define DDR_TIMING_165H_VAL 0x3333
+#define DDR_TIMING_166H_VAL 0x0763
+#define DDR_TIMING_167H_VAL 0x1144
+#define DDR_TIMING_168H_VAL 0x0000
+#define DDR_TIMING_169H_VAL 0x1101
+#define DDR_TIMING_16AH_VAL 0x0001
+#define DDR_TIMING_16BH_VAL 0x0003
+
+#define DDR_TIMING_180H_VAL 0x3336
+#define DDR_TIMING_181H_VAL 0x3333
+#define DDR_TIMING_182H_VAL 0x3333
+#define DDR_TIMING_183H_VAL 0x3333
+#define DDR_TIMING_184H_VAL 0x3333
+#define DDR_TIMING_185H_VAL 0x3333
+#define DDR_TIMING_186H_VAL 0x3333
+#define DDR_TIMING_187H_VAL 0x3333
+#define DDR_TIMING_188H_VAL 0x0001
+#define DDR_TIMING_189H_VAL 0x0000
+#define DDR_TIMING_18AH_VAL 0x1144
+#define DDR_TIMING_18BH_VAL 0x0015
+#define DDR_TIMING_18CH_VAL 0x0000
+
+#define DDR_TIMING_160H_VAL 0x0000
+#define DDR_TIMING_69H_VAL 0x0009
+
diff --git a/include/rda/ddr_timing/8810p_16x2_260m_ddr2_u08.h b/include/rda/ddr_timing/8810p_16x2_260m_ddr2_u08.h
new file mode 100644
index 0000000000..59c2c897c3
--- /dev/null
+++ b/include/rda/ddr_timing/8810p_16x2_260m_ddr2_u08.h
@@ -0,0 +1,84 @@
+#define DDR_TIMIMG_NAME "8810p_16x2_260m_ddr2_u08"
+
+#define PMU_VBUCK1_VAL 9
+#define PMU_VBUCK3_VAL 10
+
+#define DDR_VTT_VAL 1
+
+#define DDR_CHAN_1_VALID_VAL 1
+#define DDR_CHAN_2_VALID_VAL 1
+#define DDR_CHAN_3_VALID_VAL 1
+#define DDR_CHAN_4_VALID_VAL 1
+
+#define DDR_TIMING_100H_VAL 0x0000
+#define DDR_TIMING_101H_VAL 0x0000
+#define DDR_TIMING_102H_VAL 0x0000
+#define DDR_TIMING_103H_VAL 0x24b0
+#define DDR_TIMING_104H_VAL 0x3333
+
+#define DDR_TIMING_105H_VAL 0x3333
+#define DDR_TIMING_106H_VAL 0x0263
+#define DDR_TIMING_107H_VAL 0x1144
+#define DDR_TIMING_108H_VAL 0x0000
+
+#define DDR_TIMING_109H_VAL 0x1101
+#define DDR_TIMING_10AH_VAL 0x0001
+#define DDR_TIMING_10BH_VAL 0x0003
+
+#define DDR_TIMING_120H_VAL 0x0000
+#define DDR_TIMING_121H_VAL 0x0000
+#define DDR_TIMING_122H_VAL 0x0000
+#define DDR_TIMING_123H_VAL 0x24b0
+#define DDR_TIMING_124H_VAL 0x3333
+
+#define DDR_TIMING_125H_VAL 0x3333
+#define DDR_TIMING_126H_VAL 0x0263
+#define DDR_TIMING_127H_VAL 0x1144
+#define DDR_TIMING_128H_VAL 0x0000
+#define DDR_TIMING_129H_VAL 0x1101
+#define DDR_TIMING_12AH_VAL 0x0001
+#define DDR_TIMING_12BH_VAL 0x0003
+
+#define DDR_TIMING_140H_VAL 0x0000
+#define DDR_TIMING_141H_VAL 0x0000
+#define DDR_TIMING_142H_VAL 0x0000
+#define DDR_TIMING_143H_VAL 0x24b0
+#define DDR_TIMING_144H_VAL 0x3333
+#define DDR_TIMING_145H_VAL 0x3333
+#define DDR_TIMING_146H_VAL 0x0263
+#define DDR_TIMING_147H_VAL 0x1144
+#define DDR_TIMING_148H_VAL 0x0000
+#define DDR_TIMING_149H_VAL 0x1101
+#define DDR_TIMING_14AH_VAL 0x0001
+#define DDR_TIMING_14BH_VAL 0x0003
+
+
+#define DDR_TIMING_161H_VAL 0x0000
+#define DDR_TIMING_162H_VAL 0x0000
+#define DDR_TIMING_163H_VAL 0x24b0
+#define DDR_TIMING_164H_VAL 0x3333
+#define DDR_TIMING_165H_VAL 0x3333
+#define DDR_TIMING_166H_VAL 0x0263
+#define DDR_TIMING_167H_VAL 0x1144
+#define DDR_TIMING_168H_VAL 0x0000
+#define DDR_TIMING_169H_VAL 0x1101
+#define DDR_TIMING_16AH_VAL 0x0001
+#define DDR_TIMING_16BH_VAL 0x0003
+
+#define DDR_TIMING_180H_VAL 0x6666
+#define DDR_TIMING_181H_VAL 0x3333
+#define DDR_TIMING_182H_VAL 0x3333
+#define DDR_TIMING_183H_VAL 0x3333
+#define DDR_TIMING_184H_VAL 0x3333
+#define DDR_TIMING_185H_VAL 0x3333
+#define DDR_TIMING_186H_VAL 0x3333
+#define DDR_TIMING_187H_VAL 0x3333
+#define DDR_TIMING_188H_VAL 0x0001
+#define DDR_TIMING_189H_VAL 0x0000
+#define DDR_TIMING_18AH_VAL 0x1144
+#define DDR_TIMING_18BH_VAL 0x0010
+#define DDR_TIMING_18CH_VAL 0x0000
+
+#define DDR_TIMING_160H_VAL 0x0000
+#define DDR_TIMING_69H_VAL 0x0009
+
diff --git a/include/rda/rda_panel_comm.h b/include/rda/rda_panel_comm.h
new file mode 100644
index 0000000000..ab9e211d2b
--- /dev/null
+++ b/include/rda/rda_panel_comm.h
@@ -0,0 +1,204 @@
+#ifndef __RDA_PANEL_COMM_H
+#define __RDA_PANEL_COMM_H
+
+/*
+****************************************************************
+ please do not change the format
+ panle name should follow rule : mode_name
+ mode can be: rgb/mcu/dsi
+ name is the actual panel name
+****************************************************************
+*/
+#define VGA_LCDD_DISP_X 480
+#define VGA_LCDD_DISP_Y 640
+
+#define QVGA_LCDD_DISP_X 240
+#define QVGA_LCDD_DISP_Y 320
+
+#define HVGA_LCDD_DISP_X 320
+#define HVGA_LCDD_DISP_Y 480
+
+#define SVGA_LCDD_DISP_X 600
+#define SVGA_LCDD_DSIP_Y 800
+
+#define WVGA_LCDD_DISP_X 480
+#define WVGA_LCDD_DISP_Y 800
+
+#define WQVGA_LCDD_DISP_X 240
+#define WQVGA_LCDD_DISP_Y 400
+
+#define FWVGA_LCDD_DISP_X 480
+#define FWVGA_LCDD_DISP_Y 854
+
+#define FWQVGA_LCDD_DSIP_X 240
+#define FWQVGA_LCDD_DSIP_Y 432
+
+#define SWVGA_LCDD_DISP_X 600
+#define SWVGA_LCDD_DISP_Y 1024
+
+#define HD_LCDD_DISP_X 720
+#define HD_LCDD_DISP_Y 1280
+
+#define qHD_LCDD_DISP_X 540
+#define qHD_LCDD_DISP_Y 960
+
+#define QHD_LCDD_DISP_X 1440
+#define QHD_LCDD_DISP_Y 2560
+
+#define AUTO_LCDD_WVGA_DISP_X 480
+#define AUTO_LCDD_WVGA_DISP_Y 800
+
+/* definition for panel ili9486l */
+#define ILI9486L_PANEL_NAME "rgb_ili9486l"
+
+/* definition for panel ili9488l */
+#define ILI9488L_PANEL_NAME "rgb_ili9488l"
+
+/* definition for panel ili9488l */
+#define ILI9488L_MCU_PANEL_NAME "mcu_ili9488l"
+
+/* definition for panel ili9488l */
+#define ILI9488_MCU_PANEL_NAME "mcu_ili9488"
+
+/* definition for panel r61581b */
+#define R61581B_MCU_PANEL_NAME "mcu_r61581b"
+
+/* definition for panel rm68140 */
+#define RM68140_MCU_PANEL_NAME "mcu_rm68140"
+
+/* definition for panel ili9806c */
+#define ILI9806C_PANEL_NAME "rgb_ili9806c"
+
+/* definition for panel ili9806h mcu */
+#define ILI9806H_MCU_PANEL_NAME "mcu_ili9806h"
+
+#define ILI9806G_MCU_PANEL_NAME "mcu_ili9806g"
+
+/* definition for panel hx8664 */
+#define HX8664_PANEL_NAME "rgb_hx8664"
+
+/* definition for panel hx8363*/
+#define HX8363_MCU_PANEL_NAME "mcu_hx8363"
+
+/* definition for panel truly1p6365 */
+#define TRYLYLP6365_PANEL_NAME "rgb_truly1p6365"
+
+/* definition for panel nt35510 */
+#define NT35510_PANEL_NAME "rgb_nt35510"
+#define NT35510_MCU_PANEL_NAME "mcu_nt35510"
+
+/* definition for panel nt35510s */
+#define NT35510S_MCU_PANEL_NAME "mcu_nt35510s"
+
+/* definition for panel nt35510 */
+#define NT35310_PANEL_NAME "rgb_nt35310"
+#define NT35310_MCU_PANEL_NAME "mcu_nt35310"
+
+/* definition for panel hx8357 */
+#define HX8357_MCU_PANEL_NAME "mcu_hx8357"
+
+/* definition for panel ili9327 */
+#define ILI9327_PANEL_NAME "mcu_ili9327"
+
+/* definition for panel kd070d10 */
+#define JB070SZ03A_PANEL_NAME "rgb_jb070sz03a"
+
+/* definition for panel kd070d10 */
+#define KD070D10_PANEL_NAME "rgb_kd070d10"
+
+/* definition for panel t50bmpl10 */
+#define T50BMPL10_PANEL_NAME "rgb_t50bmpl10"
+
+/* definition for panel wy070ml521cp18b */
+#define WY070ML521CP18B_PANEL_NAME "rgb_wy070ml521cp18b"
+
+/* definition for panel wy070ml521cp21a */
+#define WY070ML521CP21A_PANEL_NAME "rgb_wy070ml521cp21a"
+
+/* definition for panel r70 */
+#define R70_PANEL_NAME "rgb_r70"
+
+/* definition for panel otm8019a use mcu interface */
+#define OTM8019A_PANEL_NAME "rgb_otm8019a"
+
+/* definition for panel otm8019a use mipi interface */
+#define OTM8019A_MIPI_PANEL_NAME "mipi_otm8019a"
+#define OTM8019A_BOE397_MIPI_PANEL_NAME "mipi_otm8019a_boe397"
+#define OTM8019A_CPT45_MIPI_PANEL_NAME "mipi_otm8019a_cpt45"
+
+/* definition for panel jd9161ba */
+#define JD9161BA_PANEL_NAME "rgb_jd9161ba"
+
+/* definition for panel himax8379c */
+#define HIMAX_8379C_MIPI_PANEL_NAME "mipi_himax_8379c"
+#define HX8379C_BOE397_MIPI_PANEL_NAME "mipi_hx8379c_boe397"
+#define HX8379C_CPT45_MIPI_PANEL_NAME "mipi_hx8379c_cpt45"
+
+/* definition for panel rm68180 */
+#define RM68180_MCU_PANEL_NAME "mcu_rm68180"
+
+/* definition for panel st7796 */
+#define ST7796_MCU_PANEL_NAME "mcu_st7796"
+
+/* definition for panel rm68172 */
+#define RM68172_MIPI_PANEL_NAME "mipi_rm68172"
+
+/* definitoin for panel st7796s */
+#define ST7796S_BOE35_MIPI_PANEL_NAME "mipi_st7796s_boe35"
+
+/* definitoin for panel jd9161ba mipi */
+#define JD9161BA_MIPI_PANEL_NAME "mipi_jd9161ba"
+
+/* definition for panel sgt mipi */
+#define ILI9806E_MIPI_PANEL_NAME "mipi_ili9806e"
+
+/*define auto detect lcd panel*/
+#define AUTO_DET_LCD_PANEL_NAME "auto"
+
+
+#define DEFAULT_PANEL_LIST " "
+#define AUTO_DETECT_SUPPORTED_PANEL_NUM -1
+#define AUTO_DETECT_SUPPORTED_PANEL_LIST DEFAULT_PANEL_LIST
+
+
+#define RDA_PANEL_SUPPORT_LIST \
+ ILI9486L_PANEL_NAME \
+ ILI9488L_PANEL_NAME \
+ ILI9806C_PANEL_NAME \
+ ILI9488_MCU_PANEL_NAME \
+ RM68140_MCU_PANEL_NAME \
+ R61581B_MCU_PANEL_NAME \
+ HX8664_PANEL_NAME \
+ HX8363_MCU_PANEL_NAME \
+ HX8357_MCU_PANEL_NAME \
+ TRYLYLP6365_PANEL_NAME \
+ NT35510_PANEL_NAME \
+ NT35510_MCU_PANEL_NAME \
+ NT35310_MCU_PANEL_NAME \
+ NT35510S_MCU_PANEL_NAME \
+ ILI9327_PANEL_NAME \
+ JB070SZ03A_PANEL_NAME \
+ KD070D10_PANEL_NAME \
+ T50BMPL10_PANEL_NAME \
+ WY070ML521CP18B_PANEL_NAME \
+ WY070ML521CP21A_PANEL_NAME \
+ ILI9806H_MCU_PANEL_NAME \
+ ILI9806G_MCU_PANEL_NAME \
+ R70_PANEL_NAME \
+ OTM8019A_PANEL_NAME \
+ JD9161BA_PANEL_NAME \
+ OTM8019A_MIPI_PANEL_NAME \
+ RM68180_MCU_PANEL_NAME \
+ ST7796_MCU_PANEL_NAME \
+ RM68172_MIPI_PANEL_NAME \
+ HX8379C_BOE397_MIPI_PANEL_NAME \
+ OTM8019A_BOE397_MIPI_PANEL_NAME \
+ ST7796S_BOE35_MIPI_PANEL_NAME \
+ HX8379C_CPT45_MIPI_PANEL_NAME \
+ OTM8019A_CPT45_MIPI_PANEL_NAME \
+ JD9161BA_MIPI_PANEL_NAME \
+ ILI9806E_MIPI_PANEL_NAME \
+ AUTO_DET_LCD_PANEL_NAME
+
+#define ASPACE(S) S" "
+#endif /* __TGT_AP_PANEL_SETTING_H */
diff --git a/include/rda/tgt_ap_board_config.h b/include/rda/tgt_ap_board_config.h
new file mode 100644
index 0000000000..88c4e02a8f
--- /dev/null
+++ b/include/rda/tgt_ap_board_config.h
@@ -0,0 +1,108 @@
+#ifndef _TGT_AP_BOARD_CFG_H_
+#define _TGT_AP_BOARD_CFG_H_
+
+#define EXTRA_BOOTCOMMAND "selinux=1 androidboot.selinux=permissive"
+
+/* MEM Size, in MBytes */
+#define _TGT_AP_MEM_SIZE 256
+#define _TGT_AP_VPU_MEM_SIZE 16
+#define _TGT_AP_CAM_MEM_SIZE 4
+#define _TGT_AP_GFX_MEM_SIZE 0
+#define _TGT_AP_OS_MEM_SIZE 236
+
+#define _TGT_AP_GFX_MEM_BASE (_TGT_AP_OS_MEM_SIZE)
+#define _TGT_AP_CAM_MEM_BASE (_TGT_AP_GFX_MEM_BASE + _TGT_AP_GFX_MEM_SIZE)
+#define _TGT_AP_VPU_MEM_BASE (_TGT_AP_CAM_MEM_BASE + _TGT_AP_CAM_MEM_SIZE)
+
+#if ((_TGT_AP_VPU_MEM_BASE + _TGT_AP_VPU_MEM_SIZE) != _TGT_AP_MEM_SIZE)
+#error "Invalid memory size configuration"
+#endif
+
+/* usb otg function */
+#define _TGT_AP_USB_OTG_ENABLE
+
+/* NAND clock in MHz */
+#define _TGT_AP_NAND_CLOCK (30000000)
+
+/* SPI NAND clock in MHz: 64000000/80000000/100000000*/
+#define _TGT_AP_SPI_NAND_CLOCK (80000000)
+/* SPI NAND read delay from flash to controller */
+/* need change according different HW board */
+#define _TGT_AP_SPI_NAND_READDELAY (4)
+
+/* ADMMC clock */
+#define _TGT_AP_SDMMC1_MAX_FREQ (30000000)/*3*/
+#define _TGT_AP_SDMMC1_MCLK_INV (1)
+#define _TGT_AP_SDMMC1_MCLK_ADJ (1)
+#define _TGT_AP_SDMMC2_MAX_FREQ (20000000)/*2*/
+#define _TGT_AP_SDMMC2_MCLK_INV (1)
+#define _TGT_AP_SDMMC2_MCLK_ADJ (3)
+#define _TGT_AP_SDMMC3_MAX_FREQ (30000000)/*3*/
+#define _TGT_AP_SDMMC3_MCLK_ADJ (0)
+
+/* I2C clocks */
+#define _TGT_AP_I2C0_CLOCK (100000)
+#define _TGT_AP_I2C1_CLOCK (400000)
+#define _TGT_AP_I2C2_CLOCK (200000)
+
+/*
+ * I2C addresses (Only keep non-RDA peripherals )
+ */
+#define _TGT_AP_I2C_BUS_ID_TS (2)
+# define _DEF_I2C_ADDR_TS_GSL168X (0x40)
+# define _DEF_I2C_ADDR_TS_MSG2133 (0x26)
+
+# define _DEF_I2C_ADDR_TS_FT6x06 (0x38)
+# define _DEF_I2C_ADDR_TS_IT7252 (0x46)
+# define _DEF_I2C_ADDR_TS_GTP868 (0x5d)
+# define _DEF_I2C_ADDR_TS_ICN831X (0x40)
+/* NO need to define ADDR, this is determined by customer driver */
+/* #define _TGT_AP_I2C_ADDR_TS */
+
+#define _TGT_AP_I2C_BUS_ID_GSENSOR (2)
+# define _DEF_I2C_ADDR_GSENSOR_MMA7760 (0x4c)
+# define _DEF_I2C_ADDR_GSENSOR_STK8312 (0x3d)
+# define _DEF_I2C_ADDR_GSENSOR_MMA865X (0x1D)
+/* Notice : when SA0=1, the MMA8452 slave address is 0x1D, and when SA0 = 0,
+ the address is 0x1C */
+# define _DEF_I2C_ADDR_GSENSOR_MMA845X (0x1D)
+# define _DEF_I2C_ADDR_GSENSOR_MXC622X (0x15)
+
+/* gsensor position to lcd */
+#define _TGT_AP_GSENSOR_POSITION 1
+
+/* NO need to define ADDR, this is determined by customer driver */
+/* #define _TGT_AP_I2C_ADDR_GSENSOR */
+
+#define _TGT_AP_I2C_BUS_ID_LSENSOR (2)
+# define _DEF_I2C_ADDR_LSENSOR_STK3x1x (0x48)
+/* NO need to define ADDR, this is determined by customer driver */
+/* #define _TGT_AP_I2C_ADDR_LSENSOR */
+
+#define _TGT_AP_I2C_BUS_ID_WIFI (0)
+/* No Address defination, as rda5990 address is not changable */
+
+#define _TGT_AP_I2C_BUS_ID_ATV (0)
+/* No Address defination, as rda5888 address is not changable */
+
+#define _TGT_AP_I2C_BUS_ID_CAM (0)
+
+/* LED defination */
+#define _TGT_AP_LED_RED (1)
+/* # define _TGT_AP_LED_RED_KB (1) */
+# define _TGT_AP_LED_RED_FLASH (1)
+/* #define _TGT_AP_LED_GREEN (1)*/
+/* # define _TGT_AP_LED_GREEN_KB (1) */
+/* # define _TGT_AP_LED_GREEN_FLASH (1) */
+#define _TGT_AP_LED_BLUE (1)
+# define _TGT_AP_LED_BLUE_KB (1)
+/*# define _TGT_AP_LED_BLUE_FLASH (1) */
+
+/*#define _TGT_AP_BOARD_HAS_ATV*/
+
+#define CONFIG_SDMMC_BOOT 1
+#define _TGT_AP_VIBRATOR_POWER_ON (1)
+# define _TGT_AP_VIBRATOR_TIME (300)
+
+#endif /*_TGT_AP_BOARD_CFG_H_*/
+
diff --git a/include/rda/tgt_ap_clock_config.h b/include/rda/tgt_ap_clock_config.h
new file mode 100644
index 0000000000..00afaa4fd9
--- /dev/null
+++ b/include/rda/tgt_ap_clock_config.h
@@ -0,0 +1,80 @@
+#ifndef _TGT_AP_CLOCK_CFG_H_
+#define _TGT_AP_CLOCK_CFG_H_
+
+/*
+ * PLL Freqs
+ */
+#define _TGT_AP_PLL_CPU_FREQ (988)
+#define _TGT_AP_PLL_BUS_FREQ (800)
+#define _TGT_AP_PLL_MEM_FREQ (260)
+#define _TGT_AP_PLL_USB_FREQ (480)
+
+/*
+ * DDR settings
+ */
+/* DDR clock rate (data rate double this number) */
+#define _TGT_AP_DDR_TYPE 2
+#if (_TGT_AP_PLL_MEM_FREQ == 400) \
+ || (_TGT_AP_PLL_MEM_FREQ == 351) \
+ || (_TGT_AP_PLL_MEM_FREQ == 312) \
+ || (_TGT_AP_PLL_MEM_FREQ == 260) \
+ || (_TGT_AP_PLL_MEM_FREQ == 290) \
+ || (_TGT_AP_PLL_MEM_FREQ == 200) \
+ || (_TGT_AP_PLL_MEM_FREQ == 156) \
+ || (_TGT_AP_PLL_MEM_FREQ == 100)
+#define _TGT_AP_DDR_CLOCK _TGT_AP_PLL_MEM_FREQ
+#else
+#error "Invalid DDR_CLOCK"
+#endif
+//#define _TGT_AP_DDR_LOWPWR
+#define _TGT_AP_DDR_ODT (2)
+#define _TGT_AP_DDR_RON (0)
+#define _TGT_AP_DDR_CHIP_BITS (0)
+/* DDR bus width, valid value are 8, 16 or 32 */
+#define _TGT_AP_DDR_WIDTH (32)
+#if (_TGT_AP_DDR_WIDTH == 8)
+#define _TGT_AP_DDR_MEM_BITS (0)
+#elif (_TGT_AP_DDR_WIDTH == 16)
+#define _TGT_AP_DDR_MEM_BITS (1)
+#elif (_TGT_AP_DDR_WIDTH == 32)
+#define _TGT_AP_DDR_MEM_BITS (2)
+#else
+#error "Invalid DDR WIDTH"
+#endif
+#define _TGT_AP_DDR_BANK_BITS (3)
+#define _TGT_AP_DDR_ROW_BITS (3)
+#define _TGT_AP_DDR_COL_BITS (1)
+
+/*DDR auto calibration function control */
+#define _TGT_AP_DDR_AUTO_CALI_ENABLE 1
+
+/* DDR timing */
+//#include "ddr_timing/micron_16x1_260m_U04_R7629_zhangxian.h"
+//#include "ddr_timing/8810m_16x2_260m_ddr2.h"
+//#include "ddr_timing/8810m_16x2_290m_ddr2.h"
+#if (_TGT_AP_PLL_MEM_FREQ == 260)
+#include "ddr_timing/8810p_16x2_260m_ddr2_u08.h"
+#elif (_TGT_AP_PLL_MEM_FREQ == 200)
+#include "ddr_timing/8810p_16x2_200m_ddr2.h"
+#elif (_TGT_AP_PLL_MEM_FREQ == 156)
+#include "ddr_timing/8810p_16x2_156m_ddr2.h"
+#else
+#error "Invalid DDR_CLOCK"
+#endif
+/*
+ * CLK settings
+ */
+#define _TGT_AP_CLK_CPU (0x001F)
+#define _TGT_AP_CLK_AXI (0x001E)
+#define _TGT_AP_CLK_GCG (0x001E)
+#define _TGT_AP_CLK_AHB1 (0x001A)
+#define _TGT_AP_CLK_APB1 (0x001A)
+#define _TGT_AP_CLK_APB2 (0x001A)
+#define _TGT_AP_CLK_MEM (0x0000)
+#define _TGT_AP_CLK_GPU (0x001A)
+#define _TGT_AP_CLK_VPU (0x001C)
+#define _TGT_AP_CLK_VOC (0x001A)
+#define _TGT_AP_CLK_SFLSH (0x001D)
+
+#endif //_TGT_AP_CLOCK_CFG_H_
+
diff --git a/include/rda/tgt_ap_flash_parts.h b/include/rda/tgt_ap_flash_parts.h
new file mode 100644
index 0000000000..b69636b281
--- /dev/null
+++ b/include/rda/tgt_ap_flash_parts.h
@@ -0,0 +1,26 @@
+#ifndef __TGT_AP_FLASH_PARTS_H__
+#define __TGT_AP_FLASH_PARTS_H__
+
+#define MTDPARTS_DEF \
+ "2M@128K(bootloader)," \
+ "2M(factorydata)," \
+ "2M(misc)," \
+ "4M(modem)," \
+ "8M(boot)," \
+ "10M(recovery)," \
+ MTDPARTS_ANDROID_DEF
+
+#define MTDPARTS_ANDROID_DEF \
+ "300M(system)," \
+ "300M(vendor)," \
+ "-(userdata)"
+
+/*
+kernel need handle mtd from 0, so define a dummy partions whose
+size is bootloader+factorydata+modem+boot+recovery
+*/
+#define MTDPARTS_KERNEL_DEF \
+ "28M@0(dummy)," \
+ MTDPARTS_ANDROID_DEF
+#endif
+
diff --git a/include/rda/tgt_ap_gpio_setting.h b/include/rda/tgt_ap_gpio_setting.h
new file mode 100644
index 0000000000..97da0a16be
--- /dev/null
+++ b/include/rda/tgt_ap_gpio_setting.h
@@ -0,0 +1,41 @@
+#ifndef _TGT_AP_GPIO_SETTING_H_
+#define _TGT_AP_GPIO_SETTING_H_
+
+#define _TGT_AP_GPIO_TOUCH_RESET GPO_2
+#define _TGT_AP_GPIO_TOUCH_IRQ GPIO_B3
+
+//#define _TGT_AP_GPIO_CAM_RESET
+//#define _TGT_AP_GPIO_CAM_PWDN0
+//#define _TGT_AP_GPIO_CAM_PWDN1 GPIO_B3 //C23 in fact
+//#define _TGT_AP_GPIO_CAM_FLASH
+//#define _TGT_AP_GPIO_CAM_EN
+
+#define _TGT_AP_GPIO_MMC_HOTPLUG GPIO_B4
+
+#define _TGT_AP_GPIO_LCD_RESET GPO_3
+
+#define _TGT_AP_GPIO_HEADSET_DETECT GPIO_A7
+
+//#define _TGT_AP_GPIO_USB_DETECT GPIO_B7
+
+#define _TGT_AP_GPIO_VOLUME_UP GPIO_D6
+#define _TGT_AP_GPIO_VOLUME_DOWN GPIO_D5
+
+#define _TGT_AP_GPIO_WIFI GPIO_B2
+#define _TGT_AP_GPIO_BT_HOST_WAKE GPIO_B1
+
+#define _TGT_AP_GPIO_USBID_CTRL GPO_1
+#define _TGT_AP_GPIO_PLUGIN_CTRL GPIO_B5
+
+/*#define _TGT_AP_GPIO_USB_ID GPIO_D7*/
+#define _TGT_AP_GPIO_OTG_DETECT GPIO_D7
+#define _TGT_AP_GPIO_USB_VBUS_SWITCH GPIO_A17
+/*#define _TGT_AP_GPIO_GSENSOR_WAKE GPIO_A2*/
+/*
+
+
+#define _TGT_AP_GPIO_EXT_AUD_CLASSK_ENABLE GPIO_A3
+# define _TGT_AP_EXT_AUD_CLASSK_MODE 4
+*/
+#endif // _TGT_AP_GPIO_SETTING_H_
+
diff --git a/include/rda/tgt_ap_headset_setting.h b/include/rda/tgt_ap_headset_setting.h
new file mode 100644
index 0000000000..4a62cbdf99
--- /dev/null
+++ b/include/rda/tgt_ap_headset_setting.h
@@ -0,0 +1,67 @@
+#ifndef __TGT_AP_HEADSET_SETTING_H
+#define __TGT_AP_HEADSET_SETTING_H
+
+/* notice
+ * 1. when ap do vmic gpadc detect, headset ( or headphone ) will be detected according to first gpadc value
+ * 2. when ap donot do vmic gpadc detect, headset ( or headphone ) will be treated as headset only ( for now )
+ * 3. when ap donot do vmic gpadc detect, only on key will be processed.
+*/
+
+// used always
+// open this if ap do gpadc detect, or modem will report key to ap ( only KEY_MEDIA now )
+#define AP_DETECT_VMIC_GPADC 1
+
+// used when ap donot do gpadc detect
+// key code ( input.h ) that report when key down or up
+#define HEADSET_KEY_REPORT KEY_MEDIA
+
+// used always
+// 0 means gpio low when no headset, or high
+#define HEADSET_OUT_GPIO_STATE 1
+
+// used when ap do gpadc detect
+// VMIC gpadc channel
+#define AP_VMIC_GPADC_CHANNEL 0
+
+// used when ap do gpadc detect
+// debounce value
+#define HEADSET_GPADC_DEBOUNCE_VALUE 200
+
+// used when ap do gpadc detect
+// FIXME, should sync with modem PMD_POWER_ID_T
+#define BP_PMD_POWER_EARPIECE 9
+
+// used when ap do gpadc detect
+// under this value ,we think this is a headphone
+#define DETECT_HEADPHON_MAX_VALUE 0xFF
+
+// used when ap do gpadc detect
+// when MODEM_REPORT_KEY_ADC define, we need give right min adc value and max adc value
+// keycode in input.h (kernel) : min adc value : max adc value
+#define HEADSET_KEY_CAPS \
+ {KEY_MEDIA, 0x0, 0x70}, \
+ {KEY_VOLUMEUP, 0x80, 0xC0}, \
+ {KEY_VOLUMEDOWN, 0x130, 0x170},
+
+// used when ap do gpadc detect
+#define GPADC_DETECT_DELAY_MSECS 80
+// used when ap do gpadc detect
+#define GPADC_DETECT_DEBOUNCE_DELAY_MSECS 60
+
+// used always
+// for irq debounce
+#define GPIO_IRQ_DETECT_DEBOUNCE_DELAY_MSECS 200
+
+// used always
+// for out debounce
+#define GPIO_OUT_DETECT_DEBOUNCE_DELAY_MSECS 200
+
+//////////////////////////// need not change ////////////////////////////////
+#define RDA_HEADSET_KEYPAD_NAME "rda-headset-keypad"
+#define RDA_HEADSET_DETECT_NAME "h2w"
+
+#define RDA_HEADSET_DETECT_STATE_OUT "0"
+#define RDA_HEADSET_DETECT_STATE_HEADSET "1"
+#define RDA_HEADSET_DETECT_STATE_HEADPHONE "2"
+
+#endif
diff --git a/include/rda/tgt_ap_panel_setting.h b/include/rda/tgt_ap_panel_setting.h
new file mode 100644
index 0000000000..a414aedfe0
--- /dev/null
+++ b/include/rda/tgt_ap_panel_setting.h
@@ -0,0 +1,26 @@
+#ifndef __TGT_AP_PANEL_SETTING_H
+#define __TGT_AP_PANEL_SETTING_H
+
+#include <rda/rda_panel_comm.h>
+
+/* ***************************************************************
+ * The above list all the panel rda support, the following line to
+ * select panel
+ ***************************************************************
+*/
+
+#define PANEL_NAME AUTO_DET_LCD_PANEL_NAME
+#define PANEL_XSIZE WVGA_LCDD_DISP_X
+#define PANEL_YSIZE WVGA_LCDD_DISP_Y
+
+/* for multiple panel support, user can set AUTO_DETECR_SUPPORTED_PANEL_NUM to -1 and let kernel lookup all panel */
+#undef AUTO_DETECT_SUPPORTED_PANEL_NUM
+#undef AUTO_DETECT_SUPPORTED_PANEL_LIST
+
+#define AUTO_DETECT_SUPPORTED_PANEL_NUM 1
+
+#define AUTO_DETECT_SUPPORTED_PANEL_LIST \
+ ILI9806G_MCU_PANEL_NAME
+
+#define TARGET_AP_PANEL_ILI9806G_MCU 1
+#endif /* __TGT_AP_PANEL_SETTING_H */
diff --git a/include/rda/tgt_ap_ts_setting.h b/include/rda/tgt_ap_ts_setting.h
new file mode 100644
index 0000000000..1f0cc48956
--- /dev/null
+++ b/include/rda/tgt_ap_ts_setting.h
@@ -0,0 +1,8 @@
+#ifndef __TGT_AP_TS_SETTING_H
+#define __TGT_AP_TS_SETTING_H
+
+#include "rda_ts_comm.h"
+
+/* #define TGT_AP_TS_FW_RELOAD (1) */
+
+#endif
diff --git a/include/rda/tgt_app_cfg.h b/include/rda/tgt_app_cfg.h
new file mode 100644
index 0000000000..26cfbee78d
--- /dev/null
+++ b/include/rda/tgt_app_cfg.h
@@ -0,0 +1,91 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2009, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file tgt_app_cfg.h //
+/// That file describes the configuration of the application for this target //
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _TGT_APP_CFG_H_
+#define _TGT_APP_CFG_H_
+// Partition count.
+#define DSM_PART_COUNT 2
+// =============================================================================
+// TGT_DSM_PART_CONFIG
+// -----------------------------------------------------------------------------
+// This structure describes the DSM(Data Storage Mangage) configuration.
+/// Field description:
+/// szPartName: Partition name string,the max size is 15 bytes.
+/// eDevType: can be either DSM_MEM_DEV_FLASH for onboard flash combo or DSM_MEM_DEV_TFLASH
+/// eCheckLevel: VDS Module cheking level.
+// DSM_CHECK_LEVEL1: Check the PBD writing and PB Writing.
+// DSM_CHECK_LEVEL2: Check the PDB writing only.
+// DSM_CHECK_LEVEL3: Not check.
+/// uSecCnt: Number of sector used by this partition (when relevant)
+/// uRsvBlkCnt: Number of reseved block. When want the write speed speedy, increase this field value.
+/// eModuleId: Module identification.
+// DSM_MODULE_FS_ROOT: FS Moudle for root directory.
+// DSM_MODULE_FS: FS Moudle for mounting device.
+// DSM_MODULE_SMS: SMS_DM Module.
+// DSM_MODULE_REG: REG Module
+// =============================================================================
+
+#define TGT_DSM_PART_CONFIG \
+{ \
+ { \
+ .szPartName = "VDS0", \
+ .eDevType = DSM_MEM_DEV_FLASH, \
+ .eCheckLevel = DSM_CHECK_LEVEL_1, \
+ .uSecCnt = 3, \
+ .uRsvBlkCnt = 1, \
+ .eModuleId = DSM_MODULE_FS_ROOT \
+ }, \
+ { \
+ .szPartName = "CSW", \
+ .eDevType = DSM_MEM_DEV_FLASH, \
+ .eCheckLevel = DSM_CHECK_LEVEL_1, \
+ .uSecCnt = 27, \
+ .uRsvBlkCnt = 1, \
+ .eModuleId = DSM_MODULE_CSW \
+ }, \
+}
+
+#define TGT_DSM_CONFIG \
+{ \
+ .dsmPartitionInfo = TGT_DSM_PART_CONFIG , \
+ .dsmPartitionNumber = DSM_PART_COUNT \
+}
+
+
+// =============================================================================
+// TGT_CSW_MEM_CONFIG
+// -----------------------------------------------------------------------------
+/// This structure describes the user heap size
+/// cswHeapSize: Size of the heap available for csw
+/// cosHeapSize: Size of the heap available for mmi
+// =============================================================================
+#define TGT_CSW_CONFIG \
+{ \
+ .cswHeapSize = 400*1024, \
+ .cosHeapSize = 650*1024 \
+}
+
+// =============================================================================
+// TGT_UCTLS_CONFIG
+// -----------------------------------------------------------------------------
+/// Default List of services
+// =============================================================================
+#include "uctls_tgt_params.h"
+
+
+#endif //_TGT_APP_CFG_H_
diff --git a/include/rda/tgt_board_cfg.h b/include/rda/tgt_board_cfg.h
new file mode 100644
index 0000000000..09e82a55f2
--- /dev/null
+++ b/include/rda/tgt_board_cfg.h
@@ -0,0 +1,726 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file tgt_board_config.h
+/// That file describes the configuration of the board drivers for the specific
+/// gallite g33 target.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef _TGT_BOARD_CFG_H_
+#define _TGT_BOARD_CFG_H_
+
+
+
+// #############################################################################
+// # #
+// # CHIP AND MANDATORY DRIVERS #
+// # #
+// #############################################################################
+
+
+
+
+// =============================================================================
+// TGT_HAL_CONFIG
+// =============================================================================
+#include "tgt_gpio_setting.h"
+
+// =============================================================================
+// Chip version
+// =============================================================================
+#define TGT_HAL_CHIP_VERSION 1
+
+// =============================================================================
+// RF CLK FREQUENCY
+// =============================================================================
+#define TGT_HAL_RF_CLK_FREQ HAL_SYS_FREQ_26M
+
+// =============================================================================
+// TGT_HAL_CAM_CFG
+// -----------------------------------------------------------------------------
+// This fills the structure HAL_CFG_CAM_T
+// =============================================================================
+#ifndef TGT_HAL_CAM_CFG
+#define TGT_HAL_CAM_CFG \
+{ \
+ .camUsed = TRUE, \
+ .camRstActiveH = FALSE, \
+ .camPdnActiveH = TRUE, \
+ .camPdnRemap = GPIO_NONE, \
+ .camRstRemap = GPIO_NONE, \
+ .camCsiId = HAL_CAM_CSI_NONE, \
+ .cam1Used = FALSE, \
+ .cam1RstActiveH = FALSE, \
+ .cam1PdnActiveH = TRUE, \
+ .cam1PdnRemap = GPIO_NONE, \
+ .cam1RstRemap = GPIO_NONE, \
+ .cam1CsiId = HAL_CAM_CSI_NONE, \
+ .camMode = HAL_CAM_MODE_PARALLEL, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_PWM_CFG
+// -----------------------------------------------------------------------------
+/// This structure describes the PWM configuration for a given target.
+/// The first field identify which PWL is used for GLOW (if any).
+/// The lasts fields tell wether the pin corresponding to PWM output
+/// is actually used as PWM output and not as something else (for
+/// instance as a GPIO).
+// =============================================================================
+#ifndef TGT_HAL_PWM_CFG
+#define TGT_HAL_PWM_CFG \
+{ \
+ .pwl0Used = TRUE, \
+ .pwl1Used = FALSE, \
+ .pwtUsed = FALSE, \
+ .lpgUsed = FALSE \
+}
+#endif
+
+// =============================================================================
+// HAL_CFG_I2C_T
+// -----------------------------------------------------------------------------
+/// This structure describes the I2C configuration for a given target. The
+/// fields tell wether the corresponding I2C pins are actually used
+/// for I2C and not as something else (for instance as a GPIO).
+// =============================================================================
+#ifndef TGT_HAL_I2C_CFG
+#define TGT_HAL_I2C_CFG \
+{ \
+ .i2cUsed = TRUE, \
+ .i2c2Used = TRUE, \
+ .i2c2PinsCam = FALSE, \
+ .i2c3Used = TRUE, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_I2S_CFG
+// -----------------------------------------------------------------------------
+/// This structure describes the I2S configuration for a given target. The
+/// fields tell wether the corresponding I2S pin is actually used
+/// for I2S and not as something else (for instance as a GPIO).
+// =============================================================================
+#ifndef TGT_HAL_I2S_CFG
+#define TGT_HAL_I2S_CFG \
+{ \
+ .doUsed = TRUE, \
+ .di0Used = TRUE, \
+ .di1Used = FALSE, \
+ .di2Used = FALSE, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_UART_CFG
+// -----------------------------------------------------------------------------
+/// Used to describes a configuration for used pin by an UART for a given target.
+// =============================================================================
+#ifndef TGT_HAL_UART_CFG
+#define TGT_HAL_UART_CFG \
+{ \
+ HAL_UART_CONFIG_FLOWCONTROL, \
+ HAL_UART_CONFIG_DATA, \
+ HAL_UART_CONFIG_FLOWCONTROL, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_MODEM_SPI_CFG
+// -----------------------------------------------------------------------------
+/// This structure describes the SPI configuration for a given target. The first
+/// fields tell wether the pin corresponding to chip select is actually used
+/// as a chip select and not as something else (for instance as a GPIO).
+/// Then, the polarity of the Chip Select is given. It is only relevant
+/// if the corresponding Chip Select is used as a Chip Select.
+/// Finally which pin is used as input, Can be none, one or the other.
+/// On most chip configuration the input 0 (di0) is on the output pin: SPI_DIO
+// =============================================================================
+#ifndef TGT_HAL_MODEM_SPI_CFG
+#define TGT_HAL_MODEM_SPI_CFG \
+{ \
+ { \
+ .cs0Used = FALSE, \
+ .cs1Used = FALSE, \
+ .cs2Used = FALSE, \
+ .cs3Used = FALSE, \
+ .cs0ActiveLow = TRUE, \
+ .cs1ActiveLow = TRUE, \
+ .cs2ActiveLow = TRUE, \
+ .cs3ActiveLow = TRUE, \
+ .di0Used = TRUE, \
+ .di1Used = FALSE, \
+ }, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_SPI_CFG
+// -----------------------------------------------------------------------------
+/// This structure describes the SPI configuration for a given target. The first
+/// fields tell wether the pin corresponding to chip select is actually used
+/// as a chip select and not as something else (for instance as a GPIO).
+/// Then, the polarity of the Chip Select is given. It is only relevant
+/// if the corresponding Chip Select is used as a Chip Select.
+/// Finally which pin is used as input, Can be none, one or the other.
+/// On most chip configuration the input 0 (di0) is on the output pin: SPI_DIO
+// =============================================================================
+#ifndef TGT_HAL_SPI_CFG
+#define TGT_HAL_SPI_CFG \
+{ \
+ { \
+ .cs0Used = FALSE, \
+ .cs1Used = FALSE, \
+ .cs2Used = FALSE, \
+ .cs3Used = FALSE, \
+ .cs0ActiveLow = TRUE, \
+ .cs1ActiveLow = TRUE, \
+ .cs2ActiveLow = TRUE, \
+ .cs3ActiveLow = TRUE, \
+ .di0Used = TRUE, \
+ .di1Used = FALSE, \
+ }, \
+ { \
+ .cs0Used = FALSE, \
+ .cs1Used = FALSE, \
+ .cs2Used = FALSE, \
+ .cs3Used = FALSE, \
+ .cs0ActiveLow = TRUE, \
+ .cs1ActiveLow = TRUE, \
+ .cs2ActiveLow = TRUE, \
+ .cs3ActiveLow = TRUE, \
+ .di0Used = TRUE, \
+ .di1Used = FALSE, \
+ }, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_SDMMC_CFG
+// -----------------------------------------------------------------------------
+/// This structure describes the SDMMC configuration for a given target. The
+/// fields tell wether the corresponding I2S pin is actually used
+/// for I2S and not as something else (for instance as a GPIO).
+// =============================================================================
+#ifndef TGT_HAL_SDMMC_CFG
+#define TGT_HAL_SDMMC_CFG \
+{ \
+ .sdmmcUsed = TRUE, \
+ .sdmmc2Used = TRUE, \
+ .sdmmc3Used = TRUE, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_GOUDA_CFG
+// -----------------------------------------------------------------------------
+/// This structure describes the GOUDA configuration for a given target.
+/// The first fields tell wether the pin corresponding to chip select is
+/// actually used as a chip select and not as something else (for instance
+/// as a GPIO). If none are used, the GOUDA is considered unused.
+// =============================================================================
+#ifndef TGT_HAL_GOUDA_CFG
+#define TGT_HAL_GOUDA_CFG \
+{ \
+ .cs0Used = TRUE, \
+ .cs1Used = FALSE, \
+ .lcd16_23Cam = FALSE, \
+ .lcdMode = HAL_LCD_MODE_PARALLEL_16BIT, \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_IO_DRIVE
+// -----------------------------------------------------------------------------
+/// This structure describes the IO Drive configuration for a given target.
+// =============================================================================
+#ifndef TGT_HAL_IO_DRIVE
+#define TGT_HAL_IO_DRIVE \
+{ \
+ { \
+ .vDdrDomain = 4, \
+ .vPsram1Domain = 4, \
+ .vPsram2Domain = 4, \
+ .vNFlashDomain = 2, \
+ .vLcd1Domain = 4, \
+ .vLcd2Domain = 4, \
+ .vSDat1Domain = 3, \
+ .vSDat2Domain = 3, \
+ .vCamDomain = 0, \
+ .vSim1Domain = 0, \
+ .vSim2Domain = 0, \
+ .vSim3Domain = 0, \
+ .vGpioDomain = 0, \
+ } \
+}
+#endif
+
+// =============================================================================
+// TGT_HAL_CONFIG
+// =============================================================================
+#ifndef TGT_HAL_CONFIG
+#define TGT_HAL_CONFIG \
+{ \
+ .chipVersion = TGT_HAL_CHIP_VERSION, \
+ .rfClkFreq = TGT_HAL_RF_CLK_FREQ, \
+ .useLpsCo1 = FALSE, \
+ .keyInMask = 0x00, \
+ .keyOutMask = 0x00, \
+ .pwmCfg = TGT_HAL_PWM_CFG, \
+ .i2cCfg = TGT_HAL_I2C_CFG, \
+ .i2sCfg = TGT_HAL_I2S_CFG, \
+ .uartCfg = TGT_HAL_UART_CFG, \
+ .modemSpiCfg = TGT_HAL_MODEM_SPI_CFG, \
+ .spiCfg = TGT_HAL_SPI_CFG, \
+ .sdmmcCfg = TGT_HAL_SDMMC_CFG, \
+ .camCfg = TGT_HAL_CAM_CFG, \
+ .goudaCfg = TGT_HAL_GOUDA_CFG, \
+ .parallelNandUsed = -1, \
+ .hostUartUsed = FALSE, \
+ .hostClkUsed = FALSE, \
+ .clkOutUsed = TRUE, \
+ .useClk32k = FALSE, \
+ .noConnectGpio_C = TGT_HAL_NO_CONNECT_GPIO_C, \
+ .usedGpio_C = TGT_HAL_USED_GPIO_C, \
+ .usedTco = TGT_HAL_USED_TCO, \
+ .noConnectGpio_A = TGT_AP_HAL_NO_CONNECT_GPIO_A, \
+ .usedGpio_A = TGT_AP_HAL_USED_GPIO_A, \
+ .usedGpo_A = TGT_AP_HAL_USED_GPO_A, \
+ .noConnectGpio_B = TGT_AP_HAL_NO_CONNECT_GPIO_B, \
+ .usedGpio_B = TGT_AP_HAL_USED_GPIO_B, \
+ .noConnectGpio_D = TGT_AP_HAL_NO_CONNECT_GPIO_D, \
+ .usedGpio_D = TGT_AP_HAL_USED_GPIO_D, \
+ .ioDrive = TGT_HAL_IO_DRIVE \
+}
+#endif
+
+
+// =============================================================================
+// KEY Mapping
+// =============================================================================
+#ifndef KEY_MAP
+
+#define KEY_ROW_NUM 8
+#define KEY_COL_NUM 8
+
+#define TGT_KEY_NB (KEY_ROW_NUM * KEY_COL_NUM)
+
+#define KEY_MAP \
+{ \
+ KP_STAR, KP_7, KP_4, KP_1, KP_UP , KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+ KP_0, KP_8, KP_5, KP_2, KP_DW, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+ KP_POUND,KP_9, KP_6, KP_3, KP_RT , KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+ KP_DEL, KP_SR, KP_BACK ,KP_OK ,KP_LT , KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+ KP_FM, KP_SL, KP_UNMAPPED, KP_UNMAPPED, KP_VD, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+ KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+ KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+ KP_SND, KP_END, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, KP_UNMAPPED, \
+}
+#endif // KEY_MAP
+
+
+#ifndef KEY_BOOT_DOWNLOAD
+
+#define KEY_BOOT_DOWNLOAD { KP_0, KP_OK, }
+
+#endif // KEY_BOOT_DOWNLOAD
+
+
+// =============================================================================
+// RFD config
+// =============================================================================
+#ifndef TGT_RFD_CONFIG
+#define TGT_RFD_CONFIG
+
+#include "hal_tcu.h"
+#define TGT_XCV_CONFIG {.RST = TCO_UNUSED, .PDN = TCO(11) }
+#define TGT_PA_CONFIG {.ENA = TCO_UNUSED, .TXEN = TCO_UNUSED, .BS = TCO_UNUSED }
+#define TGT_SW_CONFIG {.SW1 = TCO(2), .SW2 = TCO(3), .SW3 = TCO(4) }
+
+// Note: Some XCV maybe have different control pin names, so someone who develop
+// the target configuration should explain the pin usage as below.
+//
+// FIXME Fix that with proper knowledge !
+// PA->ENA is VLOGIC pin for SKY77518, MODEN for TQM4002, MOD for RDA6216
+// PA-TXEN is BIAS for RDA6216 ?
+//
+#endif // TGT_RFD_CONFIG
+
+
+// =============================================================================
+// PMD config
+// -----------------------------------------------------------------------------
+/// This fills the structure PMD_CONFIG_T
+// =============================================================================
+#ifndef TGT_PMD_CONFIG
+
+#define TGT_PMD_CONFIG \
+ { \
+ .power = \
+ { \
+ { /* PMD_POWER_MIC : Micro bias enable */ \
+ .ldo = { .opal = PMD_LDO_MIC}, \
+ .polarity = TRUE, \
+ .shared = TRUE, /* with PMD_POWER_EARPIECE */ \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_CAMERA : Camera LDO enable */ \
+ .ldo = { .opal = PMD_LDO_CAM|PMD_LDO_RF}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_AUDIO : Audio LDO enable */ \
+ .ldo = { .opal = PMD_LDO_ABB}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_STEREO_DAC : Stereo DAC LDO enable */ \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_LOUD_SPEAKER : Loud Speaker enable */ \
+ .ldo = { .pin = { .gpioId = HAL_GPIO_NONE/*1*/ } }, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_PA : RF Power Amplifier */ \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_USB : USB LDOs enable */ \
+ .ldo = { .opal = PMD_LDO_USB}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_SDMMC : SD/MMC LDO enable */ \
+ .ldo = { .opal = PMD_LDO_MMC}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_FM : FM LDO enable */ \
+ .ldo = { .opal = PMD_LDO_ABB}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_EARPIECE : Ear Piece Micro bias enable */\
+ .ldo = { .opal = PMD_LDO_MIC}, \
+ .polarity = TRUE, \
+ .shared = TRUE, /* with PMD_POWER_MIC */ \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_BT : BlueTooth LDOs enable */ \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_CAMERA_FLASH : Camera Flash Light enable */ \
+ .ldo = { .pin = {.gpoId = HAL_GPO_0}}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_LCD : (main) LCD LDO enable */ \
+ .ldo = { .opal = PMD_LDO_LCD|PMD_LDO_RF}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ { /* PMD_POWER_I2C : I2C LDO enable */ \
+ /* Inside this chip, if I2C2 is used, and it is */ \
+ /* multiplexed on camera pins, PMD_LDO_CAM must */ \
+ /* be specified here to supply power to I2C2 I/O. */ \
+ /* On this board, if any LDO (except for always-on */ \
+ /* LDOs like vPad) supplies power to I2C pull-up */ \
+ /* resistor, it must be specified here too. */ \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .polarity = TRUE, \
+ .shared = FALSE, \
+ .powerOnState = FALSE, \
+ }, \
+ }, \
+ .level = \
+ { \
+ { /* PMD_LEVEL_SIM : Sim class voltage */ \
+ .type = PMD_LEVEL_TYPE_NONE, \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_KEYPAD : KeyPad Back Light level */ \
+ .type = PMD_LEVEL_TYPE_OPAL, \
+ .ldo = { .pin = { .gpoId = HAL_GPO_NONE}}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_LCD : (main) LCD Back Light level*/ \
+ .type = PMD_LEVEL_TYPE_BACKLIGHT, \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_SUB_LCD : Sub LCD Back Light level */ \
+ .type = PMD_LEVEL_TYPE_NONE, \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_LED0 : LED0 Light level */ \
+ .type = PMD_LEVEL_TYPE_OPAL, \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_LED1 : LED1 Light level */ \
+ .type = PMD_LEVEL_TYPE_OPAL, \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_LED2 : LED2 Light level */ \
+ .type = PMD_LEVEL_TYPE_OPAL, \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_LED3 : LED3 Light level */ \
+ .type = PMD_LEVEL_TYPE_OPAL, \
+ .ldo = { .pin = { .gpioId = HAL_GPIO_NONE}}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_VIBRATOR : Vibrator control level */ \
+ .type = PMD_LEVEL_TYPE_LDO, \
+ .ldo = { .opal = PMD_LDO_VIBR}, \
+ .powerOnState = 0, \
+ }, \
+ { /* PMD_LEVEL_LOUD_SPEAKER : loudspeaker gain */ \
+ .type = PMD_LEVEL_TYPE_NONE, \
+ .ldo = { .opal = PMD_LDO_NONE}, \
+ .powerOnState = 0, \
+ }, \
+ }, \
+ /* If any LDO is configured in ldoEnableNormal, it cannot */ \
+ /* be controlled as a POWER or LEVEL LDO any more. */ \
+ .ldoEnableNormal = 0, \
+ .ldoEnableLowPower = 0, \
+ .ldoCamIs2_8 = TRUE, \
+ .ldoLcdIs2_8 = TRUE, \
+ .ldoMMCIsHigh = TRUE, \
+ .ldoIbrIsHigh = FALSE, \
+ .ldoRfIs2_8 = TRUE, \
+ .ldoPadIs2_8 = TRUE, \
+ .lowerVPadLowPower = FALSE, \
+ .vBuck1LowPower = 6, \
+ .vBuck3LowPower = 12, \
+ .vBuck4Usage = PMD_VBUCK4_USAGE_2P8V, \
+ .vBuck4LowPower = 13, \
+ .vSim3Usage = PMD_VSIM3_USAGE_2P8V_ALWAYS_ON, \
+ .batteryGpadcChannel = HAL_ANA_GPADC_CHAN_7, \
+ .batteryLevelChargeTermMV = 4200, \
+ .batteryLevelRechargeMV = 4160, \
+ .batteryLevelFullMV = 4160, \
+ .batteryChargeTimeout = 6 HOURS, \
+ .batteryOffsetHighActivityMV = 45, \
+ .batteryOffsetPowerDownChargeMV = -150, \
+ .powerOnVoltageMV = 3400, \
+ .powerDownVoltageMV = 3400, \
+ .batteryChargeCurrent = PMD_CHARGER_1200MA, \
+ .batteryChargeCurrentOnUsb = PMD_CHARGER_1200MA, \
+ .batteryTsDetect = FALSE, \
+ .chargerGpadcChannel = HAL_ANA_GPADC_CHAN_6, \
+ .chargerLevelUpperLimit = 6500, \
+ .chargerOffsetBackToNormal = -200, \
+ .temperatureGpadcChannel = HAL_ANA_GPADC_CHAN_1, \
+ .temperatureUpperLimit = 0, \
+ .temperatureOffsetBackToNormal = -7, \
+ .batteryMVScreenAntiFlicker = 3600, \
+ .batteryOffsetScreenNormal = 100, \
+ .earpieceDetectGpio = HAL_GPIO_NONE, \
+ .earpieceGpadcChannel = HAL_ANA_GPADC_CHAN_0, \
+ }
+
+#define TGT_PMD_BATT_CAP_CURVE_STEP_MV 20
+
+#define TGT_PMD_BATT_CAP_CURVE_ARRAY \
+ { 0, 0, 0, 0, 0, 0, 1, 3, 6, 8, \
+ 9, 10, 11, 12, 14, 18, 24, 30, 36, 42, \
+ 48, 53, 58, 63, 66, 71, 75, 78, 80, 83, \
+ 85, 87, 89, 91, 93, 95, 97, 99, 100 }
+
+#define TGT_PMD_TEMPERATURE_CURVE_ARRAY \
+ { { 50, 33220 }, { 57, 25060 } }
+
+#endif // TGT_PMD_CONFIG
+
+
+// =============================================================================
+// TGT_AUD_CONFIG
+// -----------------------------------------------------------------------------
+/// Audio interface configuration
+// =============================================================================
+#ifndef TGT_AUD_CONFIG
+#define TGT_AUD_CONFIG
+
+#define TGT_AUD_CONFIG_RECEIVER_DRIVER CodecGallite // Ti
+#define TGT_AUD_CONFIG_RECEIVER_PARAM 0
+#define TGT_AUD_CONFIG_RECEIVER_OUTPUT_PATH AUD_SPK_RECEIVER
+#define TGT_AUD_CONFIG_RECEIVER_OUTPUT_TYPE AUD_SPEAKER_STEREO
+#define TGT_AUD_CONFIG_RECEIVER_INPUT_PATH AUD_MIC_RECEIVER
+
+#define TGT_AUD_CONFIG_EAR_PIECE_DRIVER CodecGallite // Ti
+#define TGT_AUD_CONFIG_EAR_PIECE_PARAM 0
+#define TGT_AUD_CONFIG_EAR_PIECE_OUTPUT_PATH AUD_SPK_EAR_PIECE
+#define TGT_AUD_CONFIG_EAR_PIECE_OUTPUT_TYPE AUD_SPEAKER_STEREO
+#define TGT_AUD_CONFIG_EAR_PIECE_INPUT_PATH AUD_MIC_EAR_PIECE
+
+#define TGT_AUD_CONFIG_LOUD_SPEAKER_DRIVER CodecGallite // Ti
+#define TGT_AUD_CONFIG_LOUD_SPEAKER_PARAM 0
+#define TGT_AUD_CONFIG_LOUD_SPEAKER_OUTPUT_PATH AUD_SPK_LOUD_SPEAKER //AUD_SPK_EAR_PIECE
+#define TGT_AUD_CONFIG_LOUD_SPEAKER_OUTPUT_TYPE AUD_SPEAKER_STEREO
+#define TGT_AUD_CONFIG_LOUD_SPEAKER_INPUT_PATH AUD_MIC_LOUD_SPEAKER
+
+#define TGT_AUD_CONFIG_BT_DRIVER Bt
+#define TGT_AUD_CONFIG_BT_PARAM 0
+#define TGT_AUD_CONFIG_BT_OUTPUT_PATH AUD_SPK_EAR_PIECE
+#define TGT_AUD_CONFIG_BT_OUTPUT_TYPE AUD_SPEAKER_STEREO
+#define TGT_AUD_CONFIG_BT_INPUT_PATH AUD_MIC_RECEIVER
+
+#define TGT_AUD_CONFIG_FM_DRIVER Fm
+#define TGT_AUD_CONFIG_FM_PARAM 0
+#define TGT_AUD_CONFIG_FM_OUTPUT_PATH AUD_SPK_EAR_PIECE
+#define TGT_AUD_CONFIG_FM_OUTPUT_TYPE AUD_SPEAKER_STEREO
+#define TGT_AUD_CONFIG_FM_INPUT_PATH AUD_MIC_RECEIVER
+
+//atv aud config
+#define TGT_AUD_CONFIG_TV_DRIVER Tv
+#define TGT_AUD_CONFIG_TV_PARAM 0
+#define TGT_AUD_CONFIG_TV_OUTPUT_PATH AUD_SPK_EAR_PIECE
+#define TGT_AUD_CONFIG_TV_OUTPUT_TYPE AUD_SPEAKER_STEREO
+#define TGT_AUD_CONFIG_TV_INPUT_PATH AUD_MIC_RECEIVER
+
+#endif // TGT_AUD_CONFIG
+
+
+// #############################################################################
+// # #
+// # OPTIONNAL DRIVERS #
+// # #
+// #############################################################################
+
+#ifdef TGT_WITH_TS_MODEL_rda1203_gallite
+// =============================================================================
+// TSD config
+// -----------------------------------------------------------------------------
+/// This fills the TSD_CONFIG_T structure
+// =============================================================================
+#ifndef TGT_TSD_CONFIG
+#define TGT_TSD_CONFIG \
+ { \
+ .penGpio = HAL_GPIO_NONE, \
+ .debounceTime = 5*HAL_TICK1S/1000, \
+ .downPeriod = 3, \
+ .upPeriod = 3, \
+ .maxError = 0x50 \
+ }
+
+#endif // TGT_TSD_CONFIG
+#endif // TGT_WITH_TS_MODEL_rda1203_gallite
+
+#ifdef TGT_WITH_TS_MODEL_rda8810_ap
+#ifndef TGT_TSD_CONFIG
+#define TGT_TSD_CONFIG \
+ { \
+ .penGpio = HAL_GPIO_2, \
+ .debounceTime = 1*HAL_TICK1S/1000, \
+ .downPeriod = 3, \
+ .upPeriod = 3, \
+ .maxError = 0x50 \
+ }
+
+#endif // TGT_TSD_CONFIG
+#endif // TGT_WITH_TS_MODEL_rda8810_ap
+
+#ifdef TGT_WITH_TS_MODEL_rda8810_ap_gtp868
+#ifndef TGT_TSD_CONFIG
+#define TGT_TSD_CONFIG \
+ { \
+ .penGpio = HAL_GPIO_2, \
+ .debounceTime = 1*HAL_TICK1S/1000, \
+ .downPeriod = 3, \
+ .upPeriod = 3, \
+ .maxError = 0x50 \
+ }
+
+#endif // TGT_TSD_CONFIG
+#endif // TGT_WITH_TS_MODEL_rda8810_ap_gtp868
+
+#ifdef TGT_WITH_TS_MODEL_ap_msg2133
+#ifndef TGT_TSD_CONFIG
+#define TGT_TSD_CONFIG \
+ { \
+ .ts_Gpio_int = HAL_GPIO_1, \
+ .ts_Gpio_rst = HAL_GPIO_24, \
+ .rst_pd_level = 1, \
+ .int_pd_level = 1, \
+ .i2c_id = 0x26, \
+ .ts_int_rise = FALSE, \
+ }
+
+#endif // TGT_TSD_CONFIG
+#endif // TGT_WITH_TS_MODEL_rda8810_ap_gtp868
+
+
+#ifdef TGT_WITH_GPIOI2C_MODEL_i2c_gpio
+// =============================================================================
+// GPIO I2C config
+// -----------------------------------------------------------------------------
+/// This fills the GPIOI2C CONFIG_T structure
+// =============================================================================
+#ifndef TGT_GPIOI2C_CONFIG
+#define TGT_GPIOI2C_CONFIG \
+ { \
+ .i2c_gpio_Bps = GPIO_I2C_BPS_80K , \
+ .scl_i2c_gpio = HAL_GPIO_4 , \
+ .scl_i2c_gpo = HAL_GPO_NONE , \
+ .sda_i2c = HAL_GPIO_5 \
+ }
+#endif // TGT_GPIOI2C_CONFIG
+#endif // TGT_WITH_GPIOI2C_MODEL_i2c_gpio
+
+// ?d config
+// -----------------------------------------------------------------------------
+/// @todo add other driver configuration here if needed
+// =============================================================================
+
+
+// #############################################################################
+// # #
+// # SERVICES #
+// # #
+// #############################################################################
+
+
+// =============================================================================
+// ?s config
+// -----------------------------------------------------------------------------
+/// @todo add other service configuration here if needed
+// =============================================================================
+
+
+#endif //_TGT_BOARD_CFG_H_
+
diff --git a/include/rda/tgt_gpio_setting.h b/include/rda/tgt_gpio_setting.h
new file mode 100644
index 0000000000..829ea56b07
--- /dev/null
+++ b/include/rda/tgt_gpio_setting.h
@@ -0,0 +1,714 @@
+////////////////////////////////////////////////////////////////////////////////
+// //
+// Copyright (C) 2003-2007, Coolsand Technologies, Inc. //
+// All Rights Reserved //
+// //
+// This source code is the property of Coolsand Technologies and is //
+// confidential. Any modification, distribution, reproduction or //
+// exploitation of any content of this file is totally forbidden, //
+// except with the written permission of Coolsand Technologies. //
+// //
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+// //
+/// @file tgt_ap_gpio_setting.h
+/// That file describes the configuration of the AP board gpio setting for the specific
+/// 8810 base target.
+// //
+////////////////////////////////////////////////////////////////////////////////
+
+#ifndef __TGT_GPIO_SETTING_H__
+#define __TGT_GPIO_SETTING_H__
+
+//Compare to BB_GPIO_mapping
+#define AS_ALT_FUNC 0
+/// pin used as it's GPIO function
+#define AS_GPIO 1
+/// GPIO not connected, set to driving 0 for low power
+#define NOT_CONNECTED 2
+
+// -----------------------------------------------------------------------------
+// GPIO(0)
+#define TGT_HAL_GPIO_C_0_USED AS_GPIO
+// GPIO(1) // GPIO_C1 INT:nil:nil:nil
+#define TGT_HAL_GPIO_C_1_USED AS_GPIO
+// GPIO(2) // GPIO_C2 INT:nil:nil:nil
+#define TGT_HAL_GPIO_C_2_USED NOT_CONNECTED
+// GPIO(3) // GPIO_C3 INT:nil:nil:nil
+#define TGT_HAL_GPIO_C_3_USED NOT_CONNECTED
+// GPIO(4) // GPIO_C4 INT:nil:nil:nil
+#define TGT_HAL_GPIO_C_4_USED AS_GPIO
+// GPIO(5) // GPIO_C5 INT:nil:nil:nil
+#define TGT_HAL_GPIO_C_5_USED AS_GPIO
+// GPIO(6) // UART1 Receive Data:nil:nil:nil
+#define TGT_HAL_GPIO_C_6_USED AS_ALT_FUNC
+// GPIO(7) // HST_RXD:GPIO_7:UART2_RXD-UART1_DTR
+#define TGT_HAL_GPIO_C_7_USED AS_ALT_FUNC
+// GPIO(8) // HST_TXD:GPIO_8:UART2_TXD-UART1 Data Carrier Detect
+#define TGT_HAL_GPIO_C_8_USED AS_ALT_FUNC
+// GPIO(9) // SD CLK:nil:nil:nil
+#define TGT_HAL_GPIO_C_9_USED AS_ALT_FUNC
+// GPIO(10) // SD CMD:nil:nil:nil
+#define TGT_HAL_GPIO_C_10_USED AS_ALT_FUNC
+// GPIO(11) // SD data0:nil:nil:nil
+#define TGT_HAL_GPIO_C_11_USED AS_ALT_FUNC
+// GPIO(12) // SD data1:nil:nil:nil
+#define TGT_HAL_GPIO_C_12_USED AS_ALT_FUNC
+// GPIO(13) // SD data2:nil:nil:nil
+#define TGT_HAL_GPIO_C_13_USED AS_ALT_FUNC
+// GPIO(14) // SD data3:nil:nil:nil
+#define TGT_HAL_GPIO_C_14_USED AS_ALT_FUNC
+// GPIO(15) // SD CLK:nil:nil:nil
+#define TGT_HAL_GPIO_C_15_USED AS_ALT_FUNC
+// GPIO(16) // SD CMD:nil:nil:nil
+#define TGT_HAL_GPIO_C_16_USED AS_ALT_FUNC
+// GPIO(17) // SD data0:nil:nil:nil
+#define TGT_HAL_GPIO_C_17_USED AS_ALT_FUNC
+// GPIO(18) // SD data1:nil:nil:nil
+#define TGT_HAL_GPIO_C_18_USED AS_ALT_FUNC
+// GPIO(19) // SD data2:nil:nil:nil
+#define TGT_HAL_GPIO_C_19_USED AS_ALT_FUNC
+// GPIO(20) // SD data3:nil:nil:nil
+#define TGT_HAL_GPIO_C_20_USED AS_ALT_FUNC
+// GPIO(21) // SPI1_CLK:SPI_BB_CLK:nil:nil
+#define TGT_HAL_GPIO_C_21_USED AS_ALT_FUNC
+// GPIO(22) // SPI1_CS_0:SPI_BB_CS_0:nil:nil
+#define TGT_HAL_GPIO_C_22_USED AS_ALT_FUNC
+// GPIO(23) // SPI1_DIO:SPI_BB_DIO:nil:nil
+#define TGT_HAL_GPIO_C_23_USED AS_ALT_FUNC
+// GPIO(24) // SPI1_DI:SPI_BB_DI:nil:nil
+#define TGT_HAL_GPIO_C_24_USED AS_GPIO
+// GPIO(25) // GPIO_C25:SIM2_RST:nil:nil
+#define TGT_HAL_GPIO_C_25_USED AS_ALT_FUNC
+// GPIO(26) // GPIO_C26:SIM2_CLK:nil:nil
+#define TGT_HAL_GPIO_C_26_USED AS_ALT_FUNC
+// GPIO(27) // GPIO_C27:SIM2_DIO:nil:nil
+//#define TGT_HAL_GPIO_C_27_USED AS_ALT_FUNC
+#define TGT_HAL_GPIO_C_27_USED AS_GPIO
+// GPIO(28) // GPIO_C28:SIM3_RST:nil:nil
+//#define TGT_HAL_GPIO_C_28_USED AS_ALT_FUNC
+#define TGT_HAL_GPIO_C_28_USED AS_ALT_FUNC
+// GPIO(29) // GPIO_C29:SIM3_CLK:nil:nil
+#define TGT_HAL_GPIO_C_29_USED AS_ALT_FUNC
+// GPIO(30) // GPIO_C30:SIM3_DIO:nil:nil
+//#define TGT_HAL_GPIO_C_30_USED AS_ALT_FUNC
+#define TGT_HAL_GPIO_C_30_USED AS_GPIO
+// GPIO(31) // LCD DATA
+#define TGT_HAL_GPIO_C_31_USED AS_ALT_FUNC
+
+// -----------------------------------------------------------------------------
+// Each TCO can be assigned one of the following values:
+// 0 : unused
+// 1 : used
+// -----------------------------------------------------------------------------
+// TCO(0) // GPIO_B3 INT--KEYOUT_0--TCO_0
+#define TGT_HAL_TCO_0_USED 0
+// TCO(1) // GPIO_B4 INT--KEYOUT_1--TCO_1
+#define TGT_HAL_TCO_1_USED 0
+// TCO(2) // GPIO_B5 INT--KEYOUT_2--TCO_2
+#define TGT_HAL_TCO_2_USED 0
+// TCO(3)
+#define TGT_HAL_TCO_3_USED 0
+// TCO(4)
+#define TGT_HAL_TCO_4_USED 0
+// TCO(5)
+#define TGT_HAL_TCO_5_USED 0
+// TCO(6)
+#define TGT_HAL_TCO_6_USED 0
+// TCO(7)
+#define TGT_HAL_TCO_7_USED 0
+// TCO(8)
+#define TGT_HAL_TCO_8_USED 0
+// TCO(9)
+#define TGT_HAL_TCO_9_USED 0
+// TCO(10)
+#define TGT_HAL_TCO_10_USED 0
+// TCO(11)
+#define TGT_HAL_TCO_11_USED 0
+
+// -----------------------------------------------------------------------------
+// GPIO(0) // GPIO_A0 INT:I2C2_SCL:nil:Monitor_0
+#define TGT_AP_HAL_GPIO_A_0_USED AS_ALT_FUNC
+// GPIO(1) // GPIO_A1 INT:I2C2_SDA:nil:Monitor_1
+#define TGT_AP_HAL_GPIO_A_1_USED AS_ALT_FUNC
+// GPIO(2) // GPIO_A2 INT:SPI2_CLK:nil:Monitor_2
+#define TGT_AP_HAL_GPIO_A_2_USED AS_GPIO
+// GPIO(3) // GPIO_A3 INT:SPI2_DIO:nil:Monitor_3
+#define TGT_AP_HAL_GPIO_A_3_USED AS_GPIO
+// GPIO(4) // GPIO_A4 INT:SPI2_DI:nil:Monitor_4
+#define TGT_AP_HAL_GPIO_A_4_USED AS_GPIO
+// GPIO(5) // GPIO_A5 INT:SPI2_CS_0:nil:Monitor_5
+#define TGT_AP_HAL_GPIO_A_5_USED AS_GPIO
+// GPIO(6) // GPIO_A6 INT:SPI2_CS_1:KEYIN_3:Monitor_6
+#define TGT_AP_HAL_GPIO_A_6_USED AS_GPIO
+// GPIO(7) // GPIO_A7 INT:KEYIN_4:LPSCO_1:Monitor_7
+#define TGT_AP_HAL_GPIO_A_7_USED AS_GPIO
+// GPIO(8) // GPIO_A8:Clock Output
+#define TGT_AP_HAL_GPIO_A_8_USED AS_ALT_FUNC
+// GPIO(9) // Audio BCK:nil:nil:nil
+#define TGT_AP_HAL_GPIO_A_9_USED AS_ALT_FUNC
+// GPIO(10) // Audio LRCK:DAI_CLK:DAI_SIMPLE_CLK:nil
+#define TGT_AP_HAL_GPIO_A_10_USED AS_ALT_FUNC
+// GPIO(11) // Audio Serial Data In 0:DAI_DI:DAI_SIMPLE_DI:nil
+#define TGT_AP_HAL_GPIO_A_11_USED AS_ALT_FUNC
+// GPIO(12) // Audio Serial Data In 1:DAI_RST:DAI_SIMPLE_RST:nil
+#define TGT_AP_HAL_GPIO_A_12_USED NOT_CONNECTED
+// GPIO(13) // Audio Serial Data Out:DAI_DO:DAI_SIMPLE_DO:nil
+#define TGT_AP_HAL_GPIO_A_13_USED AS_ALT_FUNC
+// GPIO(14) // UART1 Transmit Data:nil:nil:nil
+#define TGT_AP_HAL_GPIO_A_14_USED AS_ALT_FUNC
+// GPIO(15) // UART1 Clear To Send:KEYIN_7:nil:nil
+#define TGT_AP_HAL_GPIO_A_15_USED AS_ALT_FUNC
+// GPIO(16) // UART1 Request To Send:KEYOUT_7:nil:nil
+#define TGT_AP_HAL_GPIO_A_16_USED AS_ALT_FUNC
+// GPIO(17) // SPI1_CS_1:SPI_BB_CS_1:nil:nil
+#define TGT_AP_HAL_GPIO_A_17_USED AS_GPIO
+// GPIO(18) // LCD DATA6:DSI_D2_P:nil:nil
+#define TGT_AP_HAL_GPIO_A_18_USED AS_GPIO
+// GPIO(19) // LCD DATA7:DSI_D2_N:nil:nil
+#define TGT_AP_HAL_GPIO_A_19_USED AS_GPIO
+// GPIO(20) // LCD_WR:DSI_D3_P:lcd_rgb_de:M_SPI_D3
+#define TGT_AP_HAL_GPIO_A_20_USED AS_GPIO
+// GPIO(21) // LCD_RS:DSI_D3_N:lcd_rgb_hsync:M_SPI_D2
+#define TGT_AP_HAL_GPIO_A_21_USED AS_GPIO
+// GPIO(22) // LCD_RD:SPI_LCD_SDC:lcd_rgb_vsync:M_SPI_D1
+#define TGT_AP_HAL_GPIO_A_22_USED AS_GPIO
+// GPIO(22) // LCD_FMARK:SPI_LCD_CLK:lcd_rgb_clk:M_SPI_CLK
+#define TGT_AP_HAL_GPIO_A_23_USED AS_GPIO
+// GPIO(24) // LCD_DATA_8:NFD_8:nil:nil
+#define TGT_AP_HAL_GPIO_A_24_USED AS_GPIO
+// GPIO(25) // LCD_DATA_9:NFD_9:nil:nil
+#define TGT_AP_HAL_GPIO_A_25_USED NOT_CONNECTED
+// GPIO(26) // LCD_DATA_10:NFD_10:nil:nil
+#define TGT_AP_HAL_GPIO_A_26_USED NOT_CONNECTED
+// GPIO(27) // LCD_DATA_11:NFD_11:nil:nil
+#define TGT_AP_HAL_GPIO_A_27_USED NOT_CONNECTED
+// GPIO(28) // LCD_DATA_12:NFD_12:nil:nil
+#define TGT_AP_HAL_GPIO_A_28_USED NOT_CONNECTED
+// GPIO(29) // LCD_DATA_13:NFD_13:nil:nil
+#define TGT_AP_HAL_GPIO_A_29_USED NOT_CONNECTED
+// GPIO(30) // LCD_DATA_14:NFD_14:nil:nil
+#define TGT_AP_HAL_GPIO_A_30_USED NOT_CONNECTED
+// GPIO(31) // LCD_DATA_15:NFD_15:nil:nil
+#define TGT_AP_HAL_GPIO_A_31_USED NOT_CONNECTED
+
+// ::::::::::::::::::::::::::::::::::::::-
+// GPIO(0) // GPIO_B0 INT:KEYIN_0:KEYIN_0:Monitor_8
+#define TGT_AP_HAL_GPIO_B_0_USED NOT_CONNECTED
+// GPIO(1) // GPIO_B1 INT:KEYIN_1:SPI1_CS_2:Monitor_9
+#define TGT_AP_HAL_GPIO_B_1_USED AS_GPIO
+// GPIO(2) // GPIO_B2 INT:KEYIN_2:I2S_DI_2:Monitor_10
+#define TGT_AP_HAL_GPIO_B_2_USED AS_GPIO
+// GPIO(3) // GPIO_B3 INT:KEYOUT_0:TCO_0:Monitor_11
+#define TGT_AP_HAL_GPIO_B_3_USED AS_GPIO
+// GPIO(4) // GPIO_B4 INT:KEYOUT_1:TCO_1:Monitor_12
+#define TGT_AP_HAL_GPIO_B_4_USED NOT_CONNECTED
+// GPIO(5) // GPIO_B5 INT:KEYOUT_2:TCO_2:Monitor_13
+#define TGT_AP_HAL_GPIO_B_5_USED AS_GPIO
+// GPIO(6) // GPIO_B6 INT:I2C3_SCL:KEYOUT_3:Monitor_14
+#define TGT_AP_HAL_GPIO_B_6_USED AS_ALT_FUNC
+// GPIO(7) // GPIO_B7 INT:I2C3_SDA:KEYOUT_4:Monitor_15
+#define TGT_AP_HAL_GPIO_B_7_USED AS_ALT_FUNC
+// GPIO(8) // UART2_CTS:KEYIN_6:UART1 Data Set Ready:nil
+#define TGT_AP_HAL_GPIO_B_8_USED NOT_CONNECTED
+// GPIO(9) // UART2_RTS:KEYOUT_6:UART1 Ring Indicator:nil
+#define TGT_AP_HAL_GPIO_B_9_USED NOT_CONNECTED
+// GPIO(10) // CAM_RST:I2C2_SCL:nil:nil
+#define TGT_AP_HAL_GPIO_B_10_USED AS_GPIO
+// GPIO(11) // CAM_PDN:I2C2_SDA:nil:nil
+#define TGT_AP_HAL_GPIO_B_11_USED AS_GPIO
+// GPIO(12) // CAM_CLK:nil:nil:nil
+#define TGT_AP_HAL_GPIO_B_12_USED AS_ALT_FUNC
+// GPIO(13) // CAM_VSYNC:CSI1_CLK_P:M_SPI_CLK:nil
+#define TGT_AP_HAL_GPIO_B_13_USED AS_ALT_FUNC
+// GPIO(14) // CAM_HREF:CSI2_CLK_P:nil:nil
+#define TGT_AP_HAL_GPIO_B_14_USED AS_ALT_FUNC
+// GPIO(15) // CAM_PCLK:CSI2_CLK_N:SPI_CAM_SCK:nil
+#define TGT_AP_HAL_GPIO_B_15_USED AS_ALT_FUNC
+// GPIO(16) // CAM_Data 0:CSI2_D0_P:SPI_CAM_DI/d0:nil
+#define TGT_AP_HAL_GPIO_B_16_USED AS_ALT_FUNC
+// GPIO(17) // CAM_Data 1:CSI2_D0_N:SPI_CAM_OF/d1:nil
+#define TGT_AP_HAL_GPIO_B_17_USED AS_ALT_FUNC
+// GPIO(18) // CAM_Data 2:CSI2_D1_P:SPI_CAM_RD/d2:nil
+#define TGT_AP_HAL_GPIO_B_18_USED AS_ALT_FUNC
+// GPIO(19) // CAM_Data 3:CSI2_D1_N:SPI_CAM_SSN/d3:nil
+#define TGT_AP_HAL_GPIO_B_19_USED AS_ALT_FUNC
+// GPIO(20) // CAM_Data 4:CSI1_D0_P:M_SPI_D0:nil
+#define TGT_AP_HAL_GPIO_B_20_USED AS_ALT_FUNC
+// GPIO(21) // CAM_Data 5:CSI1_D0_N:M_SPI_D1:nil
+#define TGT_AP_HAL_GPIO_B_21_USED AS_ALT_FUNC
+// GPIO(22) // CAM_Data 6:CSI1_D1_P:M_SPI_D2:nil
+#define TGT_AP_HAL_GPIO_B_22_USED AS_ALT_FUNC
+// GPIO(23) // CAM_Data 7:CSI1_D1_N:M_SPI_D3:nil
+#define TGT_AP_HAL_GPIO_B_23_USED AS_ALT_FUNC
+// GPIO(24) // SPI Flash CS0:CSI1_CLK_N:nil:nil
+//#define TGT_AP_HAL_GPIO_B_24_USED NOT_CONNECTED
+#define TGT_AP_HAL_GPIO_B_24_USED AS_GPIO
+// GPIO(25) // NFCLE:GPIO_B25
+#define TGT_AP_HAL_GPIO_B_25_USED AS_ALT_FUNC
+// GPIO(26) // NFWEN:GPIO_B26
+#define TGT_AP_HAL_GPIO_B_26_USED AS_ALT_FUNC
+// GPIO(27) // NFWPN:GPIO_B27
+#define TGT_AP_HAL_GPIO_B_27_USED AS_ALT_FUNC
+// GPIO(28) // NFREN:GPIO_B28
+#define TGT_AP_HAL_GPIO_B_28_USED AS_ALT_FUNC
+// GPIO(29) // NFRB:GPIO_B29
+#define TGT_AP_HAL_GPIO_B_29_USED AS_ALT_FUNC
+// GPIO(30) // I2C1_SCL:nil-nil-nil
+#define TGT_AP_HAL_GPIO_B_30_USED AS_ALT_FUNC
+// GPIO(31) // I2C1_SDA:nil-nil-nil
+#define TGT_AP_HAL_GPIO_B_31_USED AS_ALT_FUNC
+
+// ::::::::::::::::::::::::::::::::::::::-
+// GPIO(0) // UART3_RXD:GPIO_D0 INT:nil:nil
+#define TGT_AP_HAL_GPIO_D_0_USED AS_ALT_FUNC
+// GPIO(1) // UART3_TXD:GPIO_D1 INT:nil:nil
+#define TGT_AP_HAL_GPIO_D_1_USED AS_ALT_FUNC
+// GPIO(2) // UART3_CTS:GPIO_D2 INT:nil:nil
+#define TGT_AP_HAL_GPIO_D_2_USED AS_ALT_FUNC
+// GPIO(3) // UART3_RTS:GPIO_D3 INT:nil:nil
+#define TGT_AP_HAL_GPIO_D_3_USED AS_ALT_FUNC
+// GPIO(4) // NFDQS:GPIO_D4 INT:nil:nil
+#define TGT_AP_HAL_GPIO_D_4_USED AS_ALT_FUNC
+// GPIO(5) // Volume down
+#define TGT_AP_HAL_GPIO_D_5_USED AS_GPIO
+// GPIO(6) // Volume up
+#define TGT_AP_HAL_GPIO_D_6_USED AS_GPIO
+// GPIO(7)
+#define TGT_AP_HAL_GPIO_D_7_USED AS_ALT_FUNC
+// GPIO(8)
+#define TGT_AP_HAL_GPIO_D_8_USED AS_ALT_FUNC
+// GPIO(9)
+#define TGT_AP_HAL_GPIO_D_9_USED AS_ALT_FUNC
+// GPIO(10)
+#define TGT_AP_HAL_GPIO_D_10_USED AS_ALT_FUNC
+// GPIO(11)
+#define TGT_AP_HAL_GPIO_D_11_USED AS_ALT_FUNC
+// GPIO(12)
+#define TGT_AP_HAL_GPIO_D_12_USED AS_ALT_FUNC
+// GPIO(13)
+#define TGT_AP_HAL_GPIO_D_13_USED AS_ALT_FUNC
+// GPIO(14)
+#define TGT_AP_HAL_GPIO_D_14_USED AS_ALT_FUNC
+// GPIO(15)
+#define TGT_AP_HAL_GPIO_D_15_USED AS_ALT_FUNC
+// GPIO(16)
+#define TGT_AP_HAL_GPIO_D_16_USED AS_ALT_FUNC
+// GPIO(17)
+#define TGT_AP_HAL_GPIO_D_17_USED AS_ALT_FUNC
+// GPIO(18)
+#define TGT_AP_HAL_GPIO_D_18_USED AS_ALT_FUNC
+// GPIO(19)
+#define TGT_AP_HAL_GPIO_D_19_USED AS_ALT_FUNC
+// GPIO(20)
+#define TGT_AP_HAL_GPIO_D_20_USED AS_ALT_FUNC
+// GPIO(21)
+#define TGT_AP_HAL_GPIO_D_21_USED AS_ALT_FUNC
+// GPIO(22)
+#define TGT_AP_HAL_GPIO_D_22_USED AS_ALT_FUNC
+// GPIO(23)
+#define TGT_AP_HAL_GPIO_D_23_USED AS_ALT_FUNC
+// GPIO(24)
+#define TGT_AP_HAL_GPIO_D_24_USED AS_ALT_FUNC
+// GPIO(25)
+#define TGT_AP_HAL_GPIO_D_25_USED AS_ALT_FUNC
+// GPIO(26)
+#define TGT_AP_HAL_GPIO_D_26_USED AS_ALT_FUNC
+// GPIO(27)
+#define TGT_AP_HAL_GPIO_D_27_USED AS_ALT_FUNC
+// GPIO(28)
+#define TGT_AP_HAL_GPIO_D_28_USED AS_ALT_FUNC
+// GPIO(29)
+#define TGT_AP_HAL_GPIO_D_29_USED AS_ALT_FUNC
+// GPIO(30)
+#define TGT_AP_HAL_GPIO_D_30_USED AS_ALT_FUNC
+// GPIO(31)
+#define TGT_AP_HAL_GPIO_D_31_USED AS_ALT_FUNC
+
+// ::::::::::::::::::::::::::::::::::::::-
+// Each GPO can be assigned one of the following values:
+// 0 : unused
+// 1 : used
+// ::::::::::::::::::::::::::::::::::::::-
+// GPO(0) // GPO 0:PWT:KEYIN_5
+#define TGT_AP_HAL_GPO_A_0_USED 1
+// GPO(1) // GPO 1:LPG:KEYOUT_5
+#define TGT_AP_HAL_GPO_A_1_USED 1
+// GPO(2) // GPO 2:PWL_1:CLK_32K
+#define TGT_AP_HAL_GPO_A_2_USED 1
+// GPO(3) // LCD CS_1:SPI_LCD_CS:GPO_3
+#define TGT_AP_HAL_GPO_A_3_USED 1
+// GPO(4) // LCD CS_0:SPI_LCD_DIO:GPO_4
+#define TGT_AP_HAL_GPO_A_4_USED 0
+// GPO(5)
+#define TGT_AP_HAL_GPO_A_5_USED 0
+// GPO(6)
+#define TGT_AP_HAL_GPO_A_6_USED 0
+// GPO(7)
+#define TGT_AP_HAL_GPO_A_7_USED 0
+// GPO(8)
+#define TGT_AP_HAL_GPO_A_8_USED 0
+// GPO(9)
+#define TGT_AP_HAL_GPO_A_9_USED 0
+
+// =============================================================================
+// GPIO pins that can be GPIO_C but are not connected on the board
+// any pin described here will be driven low all the time for power optimization
+// It's actually computed from the TGT_HAL_GPIO_C_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_HAL_NO_CONNECT_GPIO_C ( \
+ ((TGT_HAL_GPIO_C_0_USED & 2) >> 1) | \
+ (TGT_HAL_GPIO_C_1_USED & 2) | \
+ ((TGT_HAL_GPIO_C_2_USED & 2) << 1) | \
+ ((TGT_HAL_GPIO_C_3_USED & 2) << 2) | \
+ ((TGT_HAL_GPIO_C_4_USED & 2) << 3) | \
+ ((TGT_HAL_GPIO_C_5_USED & 2) << 4) | \
+ ((TGT_HAL_GPIO_C_6_USED & 2) << 5) | \
+ ((TGT_HAL_GPIO_C_7_USED & 2) << 6) | \
+ ((TGT_HAL_GPIO_C_8_USED & 2) << 7) | \
+ ((TGT_HAL_GPIO_C_9_USED & 2) << 8) | \
+ ((TGT_HAL_GPIO_C_10_USED & 2) << 9) | \
+ ((TGT_HAL_GPIO_C_11_USED & 2) << 10) | \
+ ((TGT_HAL_GPIO_C_12_USED & 2) << 11) | \
+ ((TGT_HAL_GPIO_C_13_USED & 2) << 12) | \
+ ((TGT_HAL_GPIO_C_14_USED & 2) << 13) | \
+ ((TGT_HAL_GPIO_C_15_USED & 2) << 14) | \
+ ((TGT_HAL_GPIO_C_16_USED & 2) << 15) | \
+ ((TGT_HAL_GPIO_C_17_USED & 2) << 16) | \
+ ((TGT_HAL_GPIO_C_18_USED & 2) << 17) | \
+ ((TGT_HAL_GPIO_C_19_USED & 2) << 18) | \
+ ((TGT_HAL_GPIO_C_20_USED & 2) << 19) | \
+ ((TGT_HAL_GPIO_C_21_USED & 2) << 20) | \
+ ((TGT_HAL_GPIO_C_22_USED & 2) << 21) | \
+ ((TGT_HAL_GPIO_C_23_USED & 2) << 22) | \
+ ((TGT_HAL_GPIO_C_24_USED & 2) << 23) | \
+ ((TGT_HAL_GPIO_C_25_USED & 2) << 24) | \
+ ((TGT_HAL_GPIO_C_26_USED & 2) << 25) | \
+ ((TGT_HAL_GPIO_C_27_USED & 2) << 26) | \
+ ((TGT_HAL_GPIO_C_28_USED & 2) << 27) | \
+ ((TGT_HAL_GPIO_C_29_USED & 2) << 28) | \
+ ((TGT_HAL_GPIO_C_30_USED & 2) << 29) | \
+ ((TGT_HAL_GPIO_C_31_USED & 2) << 30) )
+
+
+// =============================================================================
+// GPIO pins that are actually used as GPIO_C
+// It's actually computed from the TGT_HAL_GPIO_C_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_HAL_USED_GPIO_C ( \
+ (TGT_HAL_GPIO_C_0_USED & 1) | \
+ ((TGT_HAL_GPIO_C_1_USED & 1) << 1) | \
+ ((TGT_HAL_GPIO_C_2_USED & 1) << 2) | \
+ ((TGT_HAL_GPIO_C_3_USED & 1) << 3) | \
+ ((TGT_HAL_GPIO_C_4_USED & 1) << 4) | \
+ ((TGT_HAL_GPIO_C_5_USED & 1) << 5) | \
+ ((TGT_HAL_GPIO_C_6_USED & 1) << 6) | \
+ ((TGT_HAL_GPIO_C_7_USED & 1) << 7) | \
+ ((TGT_HAL_GPIO_C_8_USED & 1) << 8) | \
+ ((TGT_HAL_GPIO_C_9_USED & 1) << 9) | \
+ ((TGT_HAL_GPIO_C_10_USED & 1) << 10) | \
+ ((TGT_HAL_GPIO_C_11_USED & 1) << 11) | \
+ ((TGT_HAL_GPIO_C_12_USED & 1) << 12) | \
+ ((TGT_HAL_GPIO_C_13_USED & 1) << 13) | \
+ ((TGT_HAL_GPIO_C_14_USED & 1) << 14) | \
+ ((TGT_HAL_GPIO_C_15_USED & 1) << 15) | \
+ ((TGT_HAL_GPIO_C_16_USED & 1) << 16) | \
+ ((TGT_HAL_GPIO_C_17_USED & 1) << 17) | \
+ ((TGT_HAL_GPIO_C_18_USED & 1) << 18) | \
+ ((TGT_HAL_GPIO_C_19_USED & 1) << 19) | \
+ ((TGT_HAL_GPIO_C_20_USED & 1) << 20) | \
+ ((TGT_HAL_GPIO_C_21_USED & 1) << 21) | \
+ ((TGT_HAL_GPIO_C_22_USED & 1) << 22) | \
+ ((TGT_HAL_GPIO_C_23_USED & 1) << 23) | \
+ ((TGT_HAL_GPIO_C_24_USED & 1) << 24) | \
+ ((TGT_HAL_GPIO_C_25_USED & 1) << 25) | \
+ ((TGT_HAL_GPIO_C_26_USED & 1) << 26) | \
+ ((TGT_HAL_GPIO_C_27_USED & 1) << 27) | \
+ ((TGT_HAL_GPIO_C_28_USED & 1) << 28) | \
+ ((TGT_HAL_GPIO_C_29_USED & 1) << 29) | \
+ ((TGT_HAL_GPIO_C_30_USED & 1) << 30) | \
+ ((TGT_HAL_GPIO_C_31_USED & 1) << 31) )
+
+// =============================================================================
+// TCO pins that are actually used as TCO
+// It's actually computed from the TGT_HAL_TCO_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_HAL_USED_TCO ( \
+ (TGT_HAL_TCO_0_USED & 1) | \
+ ((TGT_HAL_TCO_1_USED & 1) << 1) | \
+ ((TGT_HAL_TCO_2_USED & 1) << 2) | \
+ ((TGT_HAL_TCO_3_USED & 1) << 3) | \
+ ((TGT_HAL_TCO_4_USED & 1) << 4) | \
+ ((TGT_HAL_TCO_5_USED & 1) << 5) | \
+ ((TGT_HAL_TCO_6_USED & 1) << 6) | \
+ ((TGT_HAL_TCO_7_USED & 1) << 7) | \
+ ((TGT_HAL_TCO_8_USED & 1) << 8) | \
+ ((TGT_HAL_TCO_9_USED & 1) << 9) | \
+ ((TGT_HAL_TCO_10_USED & 1) << 10) | \
+ ((TGT_HAL_TCO_11_USED & 1) << 11) )
+
+// =============================================================================
+// GPIO pins that can be GPIO but are not connected on the board
+// any pin described here will be driven low all the time for power optimization
+// It's actually computed from the TGT_AP_HAL_GPIO_A_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_AP_HAL_NO_CONNECT_GPIO_A ( \
+ ((TGT_AP_HAL_GPIO_A_0_USED & 2) >> 1) | \
+ (TGT_AP_HAL_GPIO_A_1_USED & 2) | \
+ ((TGT_AP_HAL_GPIO_A_2_USED & 2) << 1) | \
+ ((TGT_AP_HAL_GPIO_A_3_USED & 2) << 2) | \
+ ((TGT_AP_HAL_GPIO_A_4_USED & 2) << 3) | \
+ ((TGT_AP_HAL_GPIO_A_5_USED & 2) << 4) | \
+ ((TGT_AP_HAL_GPIO_A_6_USED & 2) << 5) | \
+ ((TGT_AP_HAL_GPIO_A_7_USED & 2) << 6) | \
+ ((TGT_AP_HAL_GPIO_A_8_USED & 2) << 7) | \
+ ((TGT_AP_HAL_GPIO_A_9_USED & 2) << 8) | \
+ ((TGT_AP_HAL_GPIO_A_10_USED & 2) << 9) | \
+ ((TGT_AP_HAL_GPIO_A_11_USED & 2) << 10) | \
+ ((TGT_AP_HAL_GPIO_A_12_USED & 2) << 11) | \
+ ((TGT_AP_HAL_GPIO_A_13_USED & 2) << 12) | \
+ ((TGT_AP_HAL_GPIO_A_14_USED & 2) << 13) | \
+ ((TGT_AP_HAL_GPIO_A_15_USED & 2) << 14) | \
+ ((TGT_AP_HAL_GPIO_A_16_USED & 2) << 15) | \
+ ((TGT_AP_HAL_GPIO_A_17_USED & 2) << 16) | \
+ ((TGT_AP_HAL_GPIO_A_18_USED & 2) << 17) | \
+ ((TGT_AP_HAL_GPIO_A_19_USED & 2) << 18) | \
+ ((TGT_AP_HAL_GPIO_A_20_USED & 2) << 19) | \
+ ((TGT_AP_HAL_GPIO_A_21_USED & 2) << 20) | \
+ ((TGT_AP_HAL_GPIO_A_22_USED & 2) << 21) | \
+ ((TGT_AP_HAL_GPIO_A_23_USED & 2) << 22) | \
+ ((TGT_AP_HAL_GPIO_A_24_USED & 2) << 23) | \
+ ((TGT_AP_HAL_GPIO_A_25_USED & 2) << 24) | \
+ ((TGT_AP_HAL_GPIO_A_26_USED & 2) << 25) | \
+ ((TGT_AP_HAL_GPIO_A_27_USED & 2) << 26) | \
+ ((TGT_AP_HAL_GPIO_A_28_USED & 2) << 27) | \
+ ((TGT_AP_HAL_GPIO_A_29_USED & 2) << 28) | \
+ ((TGT_AP_HAL_GPIO_A_30_USED & 2) << 29) | \
+ ((TGT_AP_HAL_GPIO_A_31_USED & 2) << 30) )
+
+
+// =============================================================================
+// GPIO pins that are actually used as GPIO
+// It's actually computed from the TGT_AP_HAL_GPIO_A_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_AP_HAL_USED_GPIO_A ( \
+ (TGT_AP_HAL_GPIO_A_0_USED & 1) | \
+ ((TGT_AP_HAL_GPIO_A_1_USED & 1) << 1) | \
+ ((TGT_AP_HAL_GPIO_A_2_USED & 1) << 2) | \
+ ((TGT_AP_HAL_GPIO_A_3_USED & 1) << 3) | \
+ ((TGT_AP_HAL_GPIO_A_4_USED & 1) << 4) | \
+ ((TGT_AP_HAL_GPIO_A_5_USED & 1) << 5) | \
+ ((TGT_AP_HAL_GPIO_A_6_USED & 1) << 6) | \
+ ((TGT_AP_HAL_GPIO_A_7_USED & 1) << 7) | \
+ ((TGT_AP_HAL_GPIO_A_8_USED & 1) << 8) | \
+ ((TGT_AP_HAL_GPIO_A_9_USED & 1) << 9) | \
+ ((TGT_AP_HAL_GPIO_A_10_USED & 1) << 10) | \
+ ((TGT_AP_HAL_GPIO_A_11_USED & 1) << 11) | \
+ ((TGT_AP_HAL_GPIO_A_12_USED & 1) << 12) | \
+ ((TGT_AP_HAL_GPIO_A_13_USED & 1) << 13) | \
+ ((TGT_AP_HAL_GPIO_A_14_USED & 1) << 14) | \
+ ((TGT_AP_HAL_GPIO_A_15_USED & 1) << 15) | \
+ ((TGT_AP_HAL_GPIO_A_16_USED & 1) << 16) | \
+ ((TGT_AP_HAL_GPIO_A_17_USED & 1) << 17) | \
+ ((TGT_AP_HAL_GPIO_A_18_USED & 1) << 18) | \
+ ((TGT_AP_HAL_GPIO_A_19_USED & 1) << 19) | \
+ ((TGT_AP_HAL_GPIO_A_20_USED & 1) << 20) | \
+ ((TGT_AP_HAL_GPIO_A_21_USED & 1) << 21) | \
+ ((TGT_AP_HAL_GPIO_A_22_USED & 1) << 22) | \
+ ((TGT_AP_HAL_GPIO_A_23_USED & 1) << 23) | \
+ ((TGT_AP_HAL_GPIO_A_24_USED & 1) << 24) | \
+ ((TGT_AP_HAL_GPIO_A_25_USED & 1) << 25) | \
+ ((TGT_AP_HAL_GPIO_A_26_USED & 1) << 26) | \
+ ((TGT_AP_HAL_GPIO_A_27_USED & 1) << 27) | \
+ ((TGT_AP_HAL_GPIO_A_28_USED & 1) << 28) | \
+ ((TGT_AP_HAL_GPIO_A_29_USED & 1) << 29) | \
+ ((TGT_AP_HAL_GPIO_A_30_USED & 1) << 30) | \
+ ((TGT_AP_HAL_GPIO_A_31_USED & 1) << 31) )
+
+// =============================================================================
+// GPIO pins that can be GPIO but are not connected on the board
+// any pin described here will be driven low all the time for power optimization
+// It's actually computed from the TGT_AP_HAL_GPIO_B_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_AP_HAL_NO_CONNECT_GPIO_B ( \
+ ((TGT_AP_HAL_GPIO_B_0_USED & 2) >> 1) | \
+ (TGT_AP_HAL_GPIO_B_1_USED & 2) | \
+ ((TGT_AP_HAL_GPIO_B_2_USED & 2) << 1) | \
+ ((TGT_AP_HAL_GPIO_B_3_USED & 2) << 2) | \
+ ((TGT_AP_HAL_GPIO_B_4_USED & 2) << 3) | \
+ ((TGT_AP_HAL_GPIO_B_5_USED & 2) << 4) | \
+ ((TGT_AP_HAL_GPIO_B_6_USED & 2) << 5) | \
+ ((TGT_AP_HAL_GPIO_B_7_USED & 2) << 6) | \
+ ((TGT_AP_HAL_GPIO_B_8_USED & 2) << 7) | \
+ ((TGT_AP_HAL_GPIO_B_9_USED & 2) << 8) | \
+ ((TGT_AP_HAL_GPIO_B_10_USED & 2) << 9) | \
+ ((TGT_AP_HAL_GPIO_B_11_USED & 2) << 10) | \
+ ((TGT_AP_HAL_GPIO_B_12_USED & 2) << 11) | \
+ ((TGT_AP_HAL_GPIO_B_13_USED & 2) << 12) | \
+ ((TGT_AP_HAL_GPIO_B_14_USED & 2) << 13) | \
+ ((TGT_AP_HAL_GPIO_B_15_USED & 2) << 14) | \
+ ((TGT_AP_HAL_GPIO_B_16_USED & 2) << 15) | \
+ ((TGT_AP_HAL_GPIO_B_17_USED & 2) << 16) | \
+ ((TGT_AP_HAL_GPIO_B_18_USED & 2) << 17) | \
+ ((TGT_AP_HAL_GPIO_B_19_USED & 2) << 18) | \
+ ((TGT_AP_HAL_GPIO_B_20_USED & 2) << 19) | \
+ ((TGT_AP_HAL_GPIO_B_21_USED & 2) << 20) | \
+ ((TGT_AP_HAL_GPIO_B_22_USED & 2) << 21) | \
+ ((TGT_AP_HAL_GPIO_B_23_USED & 2) << 22) | \
+ ((TGT_AP_HAL_GPIO_B_24_USED & 2) << 23) | \
+ ((TGT_AP_HAL_GPIO_B_25_USED & 2) << 24) | \
+ ((TGT_AP_HAL_GPIO_B_26_USED & 2) << 25) | \
+ ((TGT_AP_HAL_GPIO_B_27_USED & 2) << 26) | \
+ ((TGT_AP_HAL_GPIO_B_28_USED & 2) << 27) | \
+ ((TGT_AP_HAL_GPIO_B_29_USED & 2) << 28) | \
+ ((TGT_AP_HAL_GPIO_B_30_USED & 2) << 29) | \
+ ((TGT_AP_HAL_GPIO_B_31_USED & 2) << 30) )
+
+
+// =============================================================================
+// GPIO pins that are actually used as GPIO
+// It's actually computed from the TGT_AP_HAL_GPIO_B_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_AP_HAL_USED_GPIO_B ( \
+ (TGT_AP_HAL_GPIO_B_0_USED & 1) | \
+ ((TGT_AP_HAL_GPIO_B_1_USED & 1) << 1) | \
+ ((TGT_AP_HAL_GPIO_B_2_USED & 1) << 2) | \
+ ((TGT_AP_HAL_GPIO_B_3_USED & 1) << 3) | \
+ ((TGT_AP_HAL_GPIO_B_4_USED & 1) << 4) | \
+ ((TGT_AP_HAL_GPIO_B_5_USED & 1) << 5) | \
+ ((TGT_AP_HAL_GPIO_B_6_USED & 1) << 6) | \
+ ((TGT_AP_HAL_GPIO_B_7_USED & 1) << 7) | \
+ ((TGT_AP_HAL_GPIO_B_8_USED & 1) << 8) | \
+ ((TGT_AP_HAL_GPIO_B_9_USED & 1) << 9) | \
+ ((TGT_AP_HAL_GPIO_B_10_USED & 1) << 10) | \
+ ((TGT_AP_HAL_GPIO_B_11_USED & 1) << 11) | \
+ ((TGT_AP_HAL_GPIO_B_12_USED & 1) << 12) | \
+ ((TGT_AP_HAL_GPIO_B_13_USED & 1) << 13) | \
+ ((TGT_AP_HAL_GPIO_B_14_USED & 1) << 14) | \
+ ((TGT_AP_HAL_GPIO_B_15_USED & 1) << 15) | \
+ ((TGT_AP_HAL_GPIO_B_16_USED & 1) << 16) | \
+ ((TGT_AP_HAL_GPIO_B_17_USED & 1) << 17) | \
+ ((TGT_AP_HAL_GPIO_B_18_USED & 1) << 18) | \
+ ((TGT_AP_HAL_GPIO_B_19_USED & 1) << 19) | \
+ ((TGT_AP_HAL_GPIO_B_20_USED & 1) << 20) | \
+ ((TGT_AP_HAL_GPIO_B_21_USED & 1) << 21) | \
+ ((TGT_AP_HAL_GPIO_B_22_USED & 1) << 22) | \
+ ((TGT_AP_HAL_GPIO_B_23_USED & 1) << 23) | \
+ ((TGT_AP_HAL_GPIO_B_24_USED & 1) << 24) | \
+ ((TGT_AP_HAL_GPIO_B_25_USED & 1) << 25) | \
+ ((TGT_AP_HAL_GPIO_B_26_USED & 1) << 26) | \
+ ((TGT_AP_HAL_GPIO_B_27_USED & 1) << 27) | \
+ ((TGT_AP_HAL_GPIO_B_28_USED & 1) << 28) | \
+ ((TGT_AP_HAL_GPIO_B_29_USED & 1) << 29) | \
+ ((TGT_AP_HAL_GPIO_B_30_USED & 1) << 30) | \
+ ((TGT_AP_HAL_GPIO_B_31_USED & 1) << 31) )
+
+
+
+// =============================================================================
+// GPIO pins that can be GPIO but are not connected on the board
+// any pin described here will be driven low all the time for power optimization
+// It's actually computed from the TGT_AP_HAL_GPIO_D_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_AP_HAL_NO_CONNECT_GPIO_D ( \
+ ((TGT_AP_HAL_GPIO_D_0_USED & 2) >> 1) | \
+ (TGT_AP_HAL_GPIO_D_1_USED & 2) | \
+ ((TGT_AP_HAL_GPIO_D_2_USED & 2) << 1) | \
+ ((TGT_AP_HAL_GPIO_D_3_USED & 2) << 2) | \
+ ((TGT_AP_HAL_GPIO_D_4_USED & 2) << 3) | \
+ ((TGT_AP_HAL_GPIO_D_5_USED & 2) << 4) | \
+ ((TGT_AP_HAL_GPIO_D_6_USED & 2) << 5) | \
+ ((TGT_AP_HAL_GPIO_D_7_USED & 2) << 6) | \
+ ((TGT_AP_HAL_GPIO_D_8_USED & 2) << 7) | \
+ ((TGT_AP_HAL_GPIO_D_9_USED & 2) << 8) | \
+ ((TGT_AP_HAL_GPIO_D_10_USED & 2) << 9) | \
+ ((TGT_AP_HAL_GPIO_D_11_USED & 2) << 10) | \
+ ((TGT_AP_HAL_GPIO_D_12_USED & 2) << 11) | \
+ ((TGT_AP_HAL_GPIO_D_13_USED & 2) << 12) | \
+ ((TGT_AP_HAL_GPIO_D_14_USED & 2) << 13) | \
+ ((TGT_AP_HAL_GPIO_D_15_USED & 2) << 14) | \
+ ((TGT_AP_HAL_GPIO_D_16_USED & 2) << 15) | \
+ ((TGT_AP_HAL_GPIO_D_17_USED & 2) << 16) | \
+ ((TGT_AP_HAL_GPIO_D_18_USED & 2) << 17) | \
+ ((TGT_AP_HAL_GPIO_D_19_USED & 2) << 18) | \
+ ((TGT_AP_HAL_GPIO_D_20_USED & 2) << 19) | \
+ ((TGT_AP_HAL_GPIO_D_21_USED & 2) << 20) | \
+ ((TGT_AP_HAL_GPIO_D_22_USED & 2) << 21) | \
+ ((TGT_AP_HAL_GPIO_D_23_USED & 2) << 22) | \
+ ((TGT_AP_HAL_GPIO_D_24_USED & 2) << 23) | \
+ ((TGT_AP_HAL_GPIO_D_25_USED & 2) << 24) | \
+ ((TGT_AP_HAL_GPIO_D_26_USED & 2) << 25) | \
+ ((TGT_AP_HAL_GPIO_D_27_USED & 2) << 26) | \
+ ((TGT_AP_HAL_GPIO_D_28_USED & 2) << 27) | \
+ ((TGT_AP_HAL_GPIO_D_29_USED & 2) << 28) | \
+ ((TGT_AP_HAL_GPIO_D_30_USED & 2) << 29) | \
+ ((TGT_AP_HAL_GPIO_D_31_USED & 2) << 30) )
+
+
+// =============================================================================
+// GPIO pins that are actually used as GPIO
+// It's actually computed from the TGT_AP_HAL_GPIO_D_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_AP_HAL_USED_GPIO_D ( \
+ (TGT_AP_HAL_GPIO_D_0_USED & 1) | \
+ ((TGT_AP_HAL_GPIO_D_1_USED & 1) << 1) | \
+ ((TGT_AP_HAL_GPIO_D_2_USED & 1) << 2) | \
+ ((TGT_AP_HAL_GPIO_D_3_USED & 1) << 3) | \
+ ((TGT_AP_HAL_GPIO_D_4_USED & 1) << 4) | \
+ ((TGT_AP_HAL_GPIO_D_5_USED & 1) << 5) | \
+ ((TGT_AP_HAL_GPIO_D_6_USED & 1) << 6) | \
+ ((TGT_AP_HAL_GPIO_D_7_USED & 1) << 7) | \
+ ((TGT_AP_HAL_GPIO_D_8_USED & 1) << 8) | \
+ ((TGT_AP_HAL_GPIO_D_9_USED & 1) << 9) | \
+ ((TGT_AP_HAL_GPIO_D_10_USED & 1) << 10) | \
+ ((TGT_AP_HAL_GPIO_D_11_USED & 1) << 11) | \
+ ((TGT_AP_HAL_GPIO_D_12_USED & 1) << 12) | \
+ ((TGT_AP_HAL_GPIO_D_13_USED & 1) << 13) | \
+ ((TGT_AP_HAL_GPIO_D_14_USED & 1) << 14) | \
+ ((TGT_AP_HAL_GPIO_D_15_USED & 1) << 15) | \
+ ((TGT_AP_HAL_GPIO_D_16_USED & 1) << 16) | \
+ ((TGT_AP_HAL_GPIO_D_17_USED & 1) << 17) | \
+ ((TGT_AP_HAL_GPIO_D_18_USED & 1) << 18) | \
+ ((TGT_AP_HAL_GPIO_D_19_USED & 1) << 19) | \
+ ((TGT_AP_HAL_GPIO_D_20_USED & 1) << 20) | \
+ ((TGT_AP_HAL_GPIO_D_21_USED & 1) << 21) | \
+ ((TGT_AP_HAL_GPIO_D_22_USED & 1) << 22) | \
+ ((TGT_AP_HAL_GPIO_D_23_USED & 1) << 23) | \
+ ((TGT_AP_HAL_GPIO_D_24_USED & 1) << 24) | \
+ ((TGT_AP_HAL_GPIO_D_25_USED & 1) << 25) | \
+ ((TGT_AP_HAL_GPIO_D_26_USED & 1) << 26) | \
+ ((TGT_AP_HAL_GPIO_D_27_USED & 1) << 27) | \
+ ((TGT_AP_HAL_GPIO_D_28_USED & 1) << 28) | \
+ ((TGT_AP_HAL_GPIO_D_29_USED & 1) << 29) | \
+ ((TGT_AP_HAL_GPIO_D_30_USED & 1) << 30) | \
+ ((TGT_AP_HAL_GPIO_D_31_USED & 1) << 31) )
+
+
+// =============================================================================
+// GPO pins that are actually used as GPO_A
+// It's actually computed from the TGT_AP_HAL_GPO_A_xx_USED macros above.
+// DO NOT MODIFY !
+// =============================================================================
+#define TGT_AP_HAL_USED_GPO_A ( \
+ (TGT_AP_HAL_GPO_A_0_USED & 1) | \
+ ((TGT_AP_HAL_GPO_A_1_USED & 1) << 1) | \
+ ((TGT_AP_HAL_GPO_A_2_USED & 1) << 2) | \
+ ((TGT_AP_HAL_GPO_A_3_USED & 1) << 3) | \
+ ((TGT_AP_HAL_GPO_A_4_USED & 1) << 4) | \
+ ((TGT_AP_HAL_GPO_A_5_USED & 1) << 5) | \
+ ((TGT_AP_HAL_GPO_A_6_USED & 1) << 6) | \
+ ((TGT_AP_HAL_GPO_A_7_USED & 1) << 7) | \
+ ((TGT_AP_HAL_GPO_A_8_USED & 1) << 8) | \
+ ((TGT_AP_HAL_GPO_A_9_USED & 1) << 9) )
+
+
+#endif
diff --git a/include/rda/tgt_types.h b/include/rda/tgt_types.h
new file mode 100644
index 0000000000..f2e222fd8a
--- /dev/null
+++ b/include/rda/tgt_types.h
@@ -0,0 +1,261 @@
+/*
+ * Copyright (C) 2013 RDA Microelectronics Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ */
+#ifndef _TGT_TYPES_H_
+#define _TGT_TYPES_H_
+
+#define KEY_MAP
+#define KEY_BOOT_DOWNLOAD
+#define TGT_RFD_CONFIG
+#define TGT_PMD_CONFIG
+#define TGT_AUD_CONFIG
+
+typedef unsigned char BOOL;
+
+// =============================================================================
+// HAL_LCD_MODE_T
+// -----------------------------------------------------------------------------
+/// The LCD interface modes.
+// =============================================================================
+typedef enum
+{
+ HAL_LCD_MODE_SPI,
+ HAL_LCD_MODE_PARALLEL_16BIT,
+ HAL_LCD_MODE_DSI,
+ HAL_LCD_MODE_RGB_16BIT,
+ HAL_LCD_MODE_RGB_24BIT,
+
+ HAL_LCD_MODE_QTY,
+} HAL_LCD_MODE_T;
+
+// =============================================================================
+// HAL_CAM_MODE_T
+// -----------------------------------------------------------------------------
+/// The camera interface modes.
+// =============================================================================
+typedef enum
+{
+ HAL_CAM_MODE_PARALLEL,
+ HAL_CAM_MODE_SPI,
+ HAL_CAM_MODE_CSI,
+
+ HAL_CAM_MODE_QTY,
+} HAL_CAM_MODE_T;
+
+// =============================================================================
+// HAL_CAM_CSI_ID_T
+// -----------------------------------------------------------------------------
+/// The camera CSI IDs.
+// =============================================================================
+typedef enum
+{
+ HAL_CAM_CSI_NONE,
+ HAL_CAM_CSI_1,
+ HAL_CAM_CSI_2,
+
+ HAL_CAM_CSI_ID_QTY,
+} HAL_CAM_CSI_ID_T;
+
+// =============================================================================
+// HAL_CFG_SDMMC_T
+// -----------------------------------------------------------------------------
+/// This structure describes the SDMMC configuration for a given target.
+// =============================================================================
+typedef struct
+{
+ /// The sdmmc is used.
+ BOOL sdmmcUsed :1;
+ /// The sdmmc2 is used.
+ BOOL sdmmc2Used :1;
+ /// The sdmmc3 is used.
+ BOOL sdmmc3Used :1;
+} HAL_CFG_SDMMC_T;
+
+// =============================================================================
+// HAL_CFG_CAM_T
+// -----------------------------------------------------------------------------
+/// This structure describes the camera configuration for a given target.
+/// The first field identify if camera is used.
+/// The second and third field is the RemapFlag which identify if camera PDN/RST
+/// need to be remapped to other GPIOs instead of default (GPIO_5 and GPIO_4),
+/// for the first camera sensor.
+/// The fourth and fifth field is the remapped pin when RemapFlag is set, for the
+/// first camera sensor.
+/// The sixth and seventh fields are used to describe which GPIOs are used for
+/// the PDN/RST lines of the optional second camera sensor. This second camera
+/// sensor can only be used on with GPIOs to control its PDN and RST lines.
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the rear camera is used
+ BOOL camUsed :1;
+ /// The polarity of the Power DowN line, for the rear sensor.
+ BOOL camPdnActiveH :1;
+ /// The polarity of the Reset line, for the rear sensor.
+ BOOL camRstActiveH :1;
+ /// The remapped GPIO controlling PDN (-1 if not remapped), for the rear sensor.
+ INT32 camPdnRemap;
+ /// The remapped GPIO controlling RST (-1 if not remapped), for the rear sensor.
+ INT32 camRstRemap;
+ /// The CSI ID (valid only if camera mode is CSI)
+ HAL_CAM_CSI_ID_T camCsiId;
+ /// \c TRUE if the front camera is used
+ BOOL cam1Used :1;
+ /// The polarity of the Power DowN line, for the front sensor.
+ BOOL cam1PdnActiveH :1;
+ /// The polarity of the Reset line, for the front sensor.
+ BOOL cam1RstActiveH :1;
+ /// The remapped GPIO controlling PDN (-1 if not remapped), for the front sensor.
+ INT32 cam1PdnRemap;
+ /// The remapped GPIO controlling RST (-1 if not remapped), for the front sensor.
+ INT32 cam1RstRemap;
+ /// The CSI ID (valid only if camera mode is CSI)
+ HAL_CAM_CSI_ID_T cam1CsiId;
+ /// The camera interface mode
+ HAL_CAM_MODE_T camMode;
+} HAL_CFG_CAM_T;
+
+// =============================================================================
+// HAL_CFG_PWM_T
+// -----------------------------------------------------------------------------
+/// This structure describes the PWM configuration for a given target.
+/// The fields tell wether the pin corresponding to PWM output
+/// is actually used as PWM output and not as something else (for
+/// instance as a GPIO).
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the PWL0 is used
+ BOOL pwl0Used :1;
+ /// \c TRUE if the PWL1 is used
+ BOOL pwl1Used :1;
+ /// \c TRUE if the PWT is used
+ BOOL pwtUsed :1;
+ /// \c TRUE if the LPG is used
+ BOOL lpgUsed :1;
+} HAL_CFG_PWM_T;
+
+// =============================================================================
+// HAL_CFG_I2C_T
+// -----------------------------------------------------------------------------
+/// This structure describes the I2C configuration for a given target. The
+/// fields tell wether the corresponding I2C pins are actually used
+/// for I2C and not as something else (for instance as a GPIO).
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the I2C pins are used
+ BOOL i2cUsed :1;
+ /// \c TRUE if the I2C2 pins are used
+ BOOL i2c2Used :1;
+ /// \c TRUE if the I2C2 pins are used from cam pins
+ BOOL i2c2PinsCam :1;
+ /// \c TRUE if the I2C3 pins are used
+ BOOL i2c3Used :1;
+} HAL_CFG_I2C_T;
+
+// =============================================================================
+// HAL_CFG_I2S_T
+// -----------------------------------------------------------------------------
+/// This structure describes the I2S configuration for a given target. The
+/// fields tell wether the corresponding I2S pin is actually used
+/// for I2S and not as something else (for instance as a GPIO).
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the data out pin is used
+ BOOL doUsed :1;
+ BOOL :3;
+ /// \c TRUE if corresponding input is used
+ BOOL di0Used :1;
+ BOOL di1Used :1;
+ BOOL di2Used :1;
+} HAL_CFG_I2S_T;
+
+// =============================================================================
+// HAL_UART_CONFIG_T
+// -----------------------------------------------------------------------------
+/// Used to describes a configuration for used pin by an UART for a given target.
+// =============================================================================
+typedef enum
+{
+ /// invalid
+ HAL_UART_CONFIG_INVALID = 0,
+
+ /// UART is not used
+ HAL_UART_CONFIG_NONE,
+
+ /// UART use only data lines (TXD & RXD)
+ HAL_UART_CONFIG_DATA,
+
+ /// UART use data and flow control lines (TXD, RXD, RTS & CTS)
+ HAL_UART_CONFIG_FLOWCONTROL,
+
+ /// UART use all lines (TXD, RXD, RTS, CTS, RI, DSR, DCD & DTR)
+ HAL_UART_CONFIG_MODEM,
+
+ HAL_UART_CONFIG_QTY
+} HAL_UART_CONFIG_T;
+
+// =============================================================================
+// HAL_CFG_SPI_T
+// -----------------------------------------------------------------------------
+/// This structure describes the SPI configuration for a given target. The first
+/// fields tell wether the pin corresponding to chip select is actually used
+/// as a chip select and not as something else (for instance as a GPIO).
+/// Then, the polarity of the Chip Select is given. It is only relevant
+/// if the corresponding Chip Select is used as a Chip Select.
+/// Finally which pin is used as input, Can be none, one or the other.
+/// On most chip configuration the input 0 (di0) is on the output pin: SPI_DIO
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the corresponding pin is used as a Chip Select.
+ BOOL cs0Used :1;
+ BOOL cs1Used :1;
+ BOOL cs2Used :1;
+ BOOL cs3Used :1;
+ /// \c TRUE if the first edge is falling
+ BOOL cs0ActiveLow :1;
+ BOOL cs1ActiveLow :1;
+ BOOL cs2ActiveLow :1;
+ BOOL cs3ActiveLow :1;
+ /// \c TRUE if corresponding input is used
+ BOOL di0Used :1;
+ BOOL di1Used :1;
+} HAL_CFG_SPI_T;
+
+// =============================================================================
+// HAL_CFG_GOUDA_T
+// -----------------------------------------------------------------------------
+/// This structure describes the GOUDA configuration for a given target.
+/// The first fields tell wether the pin corresponding to chip select is
+/// actually used as a chip select and not as something else (for instance
+/// as a GPIO). If none are used, the GOUDA is considered unused.
+// =============================================================================
+typedef struct
+{
+ /// \c TRUE if the corresponding pin is used as a Chip Select.
+ BOOL cs0Used :1;
+ BOOL cs1Used :1;
+ /// \c TRUE if LCD 16-23 bits are from camera, FALSE from NAND
+ BOOL lcd16_23Cam :1;
+ /// \c LCD interface mode
+ HAL_LCD_MODE_T lcdMode;
+} HAL_CFG_GOUDA_T;
+
+#endif // _TGT_TYPES_H_
diff --git a/include/scsi.h b/include/scsi.h
index c52759c788..89ae45f8e8 100644
--- a/include/scsi.h
+++ b/include/scsi.h
@@ -26,7 +26,9 @@
typedef struct SCSI_cmd_block{
unsigned char cmd[16]; /* command */
- unsigned char sense_buf[64]; /* for request sense */
+ /* for request sense */
+ unsigned char sense_buf[64]
+ __attribute__((aligned(ARCH_DMA_MINALIGN)));
unsigned char status; /* SCSI Status */
unsigned char target; /* Target ID */
unsigned char lun; /* Target LUN */
diff --git a/include/sdhci.h b/include/sdhci.h
index 800f9d9c07..9d37183243 100644
--- a/include/sdhci.h
+++ b/include/sdhci.h
@@ -216,6 +216,9 @@
*/
#define SDHCI_QUIRK_32BIT_DMA_ADDR (1 << 0)
#define SDHCI_QUIRK_REG32_RW (1 << 1)
+#define SDHCI_QUIRK_BROKEN_R1B (1 << 2)
+#define SDHCI_QUIRK_NO_HISPD_BIT (1 << 3)
+#define SDHCI_QUIRK_BROKEN_VOLTAGE (1 << 4)
/* to make gcc happy */
struct sdhci_host;
@@ -240,10 +243,14 @@ struct sdhci_host {
char *name;
void *ioaddr;
unsigned int quirks;
+ unsigned int host_caps;
unsigned int version;
unsigned int clock;
struct mmc *mmc;
const struct sdhci_ops *ops;
+
+ void (*set_control_reg)(struct sdhci_host *host);
+ uint voltages;
};
#ifdef CONFIG_MMC_SDHCI_IO_ACCESSORS
diff --git a/include/tegra-kbc.h b/include/tegra-kbc.h
new file mode 100644
index 0000000000..f331c79c9d
--- /dev/null
+++ b/include/tegra-kbc.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+#ifndef __include_tegra_kbc_h__
+#define __include_tegra_kbc_h__
+
+#include <common.h>
+
+#define KEY_IS_MODIFIER(key) ((key) >= KEY_FIRST_MODIFIER)
+
+struct kbc_tegra {
+ u32 control;
+ u32 interrupt;
+ u32 row_cfg[4];
+ u32 col_cfg[3];
+ u32 timeout_dly;
+ u32 init_dly;
+ u32 rpt_dly;
+ u32 kp_ent[2];
+ u32 row_mask[16];
+};
+
+#ifdef CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE
+extern int overwrite_console(void);
+#define OVERWRITE_CONSOLE overwrite_console()
+#else
+#define OVERWRITE_CONSOLE 0
+#endif /* CONFIG_SYS_CONSOLE_OVERWRITE_ROUTINE */
+
+#endif /* __include_tegra_kbc_h__ */
diff --git a/include/tps6586x.h b/include/tps6586x.h
new file mode 100644
index 0000000000..ab880823a3
--- /dev/null
+++ b/include/tps6586x.h
@@ -0,0 +1,68 @@
+/*
+ * (C) Copyright 2010,2011
+ * NVIDIA Corporation <www.nvidia.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#ifndef __H_
+#define _TPS6586X_H_
+
+enum {
+ /* SM0-2 PWM/PFM Mode Selection */
+ TPS6586X_PWM_SM0 = 1 << 0,
+ TPS6586X_PWM_SM1 = 1 << 1,
+ TPS6586X_PWM_SM2 = 1 << 2,
+};
+
+/**
+ * Enable PWM mode for selected SM0-2
+ *
+ * @param mask Mask of synchronous converter to enable (TPS6586X_PWM_...)
+ * @return 0 if ok, -1 on error
+ */
+int tps6586x_set_pwm_mode(int mask);
+
+/**
+ * Adjust SM0 and SM1 voltages to the given targets in incremental steps.
+ *
+ * @param sm0_target Target voltage for SM0 in 25mW units, 0=725mV, 31=1.5V
+ * @param sm1_target Target voltage for SM1 in 25mW units, 0=725mV, 31=1.5V
+ * @param step Amount to change voltage in each step, in 25mW units
+ * @param rate Slew ratein mV/us: 0=instantly, 1=0.11, 2=0.22,
+ * 3=0.44, 4=0.88, 5=1.76, 6=3.52, 7=7.04
+ * @param min_sm0_over_sm1 Minimum amount by which sm0 must exceed sm1.
+ * If this condition is not met, no adjustment will be
+ * done and an error will be reported. Use -1 to skip
+ * this check.
+ * @return 0 if ok, -1 on error
+ */
+int tps6586x_adjust_sm0_sm1(int sm0_target, int sm1_target, int step, int rate,
+ int min_sm0_over_sm1);
+
+/**
+ * Set up the TPS6586X I2C bus number. This will be used for all operations
+ * on the device. This function must be called before using other functions.
+ *
+ * @param bus I2C bus number containing the TPS6586X chip
+ * @return 0 (always succeeds)
+ */
+int tps6586x_init(int bus);
+
+#endif /* _TPS6586X_H_ */
diff --git a/include/twl6035.h b/include/twl6035.h
new file mode 100644
index 0000000000..e21ddbaf22
--- /dev/null
+++ b/include/twl6035.h
@@ -0,0 +1,42 @@
+/*
+ * (C) Copyright 2012
+ * Texas Instruments, <www.ti.com>
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+#include <i2c.h>
+
+/* I2C chip addresses */
+#define TWL6035_CHIP_ADDR 0x48
+
+/* 0x1XY translates to page 1, register address 0xXY */
+#define LDO9_CTRL 0x60
+#define LDO9_VOLTAGE 0x61
+
+/* Bit field definitions for LDOx_CTRL */
+#define LDO_ON (1 << 4)
+#define LDO_MODE_SLEEP (1 << 2)
+#define LDO_MODE_ACTIVE (1 << 0)
+
+int twl6035_i2c_write_u8(u8 chip_no, u8 val, u8 reg);
+int twl6035_i2c_read_u8(u8 chip_no, u8 *val, u8 reg);
+void twl6035_init_settings(void);
+void twl6035_mmc1_poweron_ldo(void);
diff --git a/include/u-boot/md5.h b/include/u-boot/md5.h
index 08924cce3c..e09c16a6e3 100644
--- a/include/u-boot/md5.h
+++ b/include/u-boot/md5.h
@@ -11,7 +11,10 @@
struct MD5Context {
__u32 buf[4];
__u32 bits[2];
- unsigned char in[64];
+ union {
+ unsigned char in[64];
+ __u32 in32[16];
+ };
};
/*
diff --git a/include/u-boot/zlib.h b/include/u-boot/zlib.h
index fb2708186d..fbb08a3287 100644
--- a/include/u-boot/zlib.h
+++ b/include/u-boot/zlib.h
@@ -691,6 +691,9 @@ ZEXTERN int ZEXPORT inflateInit2_ OF((z_streamp strm, int windowBits,
struct internal_state {int dummy;}; /* hack for buggy compilers */
#endif
+extern void *gzalloc(void *, unsigned, unsigned);
+extern void gzfree(void *, void *, unsigned);
+
#ifdef __cplusplus
}
#endif
diff --git a/include/ubi_uboot.h b/include/ubi_uboot.h
index 69006e250a..5ccd1130ea 100644
--- a/include/ubi_uboot.h
+++ b/include/ubi_uboot.h
@@ -39,7 +39,7 @@ do { \
/* configurable */
#define CONFIG_MTD_UBI_WL_THRESHOLD 4096
-#define CONFIG_MTD_UBI_BEB_RESERVE 1
+#define CONFIG_MTD_UBI_BEB_RESERVE 6
#define UBI_IO_DEBUG 0
/* debug options (Linux: drivers/mtd/ubi/Kconfig.debug) */
@@ -57,10 +57,6 @@ do { \
#define put_device(...)
#define ubi_sysfs_init(...) 0
#define ubi_sysfs_close(...) do { } while (0)
-static inline int is_power_of_2(unsigned long n)
-{
- return (n != 0 && ((n & (n - 1)) == 0));
-}
/* FIXME */
#define MKDEV(...) 0
diff --git a/include/usb.h b/include/usb.h
index 48e4bcda54..46db5c29a2 100644
--- a/include/usb.h
+++ b/include/usb.h
@@ -109,7 +109,9 @@ struct usb_device {
int epmaxpacketout[16]; /* OUTput endpoint specific maximums */
int configno; /* selected config number */
- struct usb_device_descriptor descriptor; /* Device Descriptor */
+ /* Device Descriptor */
+ struct usb_device_descriptor descriptor
+ __attribute__((aligned(ARCH_DMA_MINALIGN)));
struct usb_config config; /* config descriptor */
int have_langid; /* whether string_langid is valid yet */
@@ -139,7 +141,8 @@ struct usb_device {
defined(CONFIG_USB_SL811HS) || defined(CONFIG_USB_ISP116X_HCD) || \
defined(CONFIG_USB_R8A66597_HCD) || defined(CONFIG_USB_DAVINCI) || \
defined(CONFIG_USB_OMAP3) || defined(CONFIG_USB_DA8XX) || \
- defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X)
+ defined(CONFIG_USB_BLACKFIN) || defined(CONFIG_USB_AM35X) || \
+ defined(CONFIG_USB_RDA)
int usb_lowlevel_init(void);
int usb_lowlevel_stop(void);
diff --git a/include/usb/lin_gadget_compat.h b/include/usb/lin_gadget_compat.h
index fce3be7e80..5bdcb8d797 100644
--- a/include/usb/lin_gadget_compat.h
+++ b/include/usb/lin_gadget_compat.h
@@ -23,6 +23,8 @@
#ifndef __LIN_COMPAT_H__
#define __LIN_COMPAT_H__
+#include <linux/compat.h>
+
/* common */
#define spin_lock_init(...)
#define spin_lock(...)
@@ -36,26 +38,31 @@
#define mutex_lock(...)
#define mutex_unlock(...)
-#define WARN_ON(x) if (x) {printf("WARNING in %s line %d\n" \
- , __FILE__, __LINE__); }
-
-#define KERN_WARNING
-#define KERN_ERR
-#define KERN_NOTICE
-#define KERN_DEBUG
-
#define GFP_KERNEL 0
#define IRQ_HANDLED 1
#define ENOTSUPP 524 /* Operation is not supported */
-#define kmalloc(size, type) memalign(CONFIG_SYS_CACHELINE_SIZE, size)
-#define kfree(addr) free(addr)
-#define mdelay(n) ({unsigned long msec = (n); while (msec--) udelay(1000); })
+#define BITS_PER_BYTE 8
+#define BITS_TO_LONGS(nr) \
+ DIV_ROUND_UP(nr, BITS_PER_BYTE * sizeof(long))
+#define DECLARE_BITMAP(name, bits) \
+ unsigned long name[BITS_TO_LONGS(bits)]
+
+#define small_const_nbits(nbits) \
+ (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG)
+
+static inline void bitmap_zero(unsigned long *dst, int nbits)
+{
+ if (small_const_nbits(nbits))
+ *dst = 0UL;
+ else {
+ int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long);
+ memset(dst, 0, len);
+ }
+}
-#define __iomem
-#define min_t min
#define dma_cache_maint(addr, size, mode) cache_flush()
void cache_flush(void);
diff --git a/include/usb/musb_dma.h b/include/usb/musb_dma.h
new file mode 100644
index 0000000000..4d61df2249
--- /dev/null
+++ b/include/usb/musb_dma.h
@@ -0,0 +1,27 @@
+/*
+ * Copyright (c) 2009 Wind River Systems, Inc.
+ * Tom Rix <Tom.Rix@windriver.com>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+#ifndef __MUSB_DMA_H__
+#define __MUSB_DMA_H__
+
+
+int configure_dma_channel(u32 epnum, u16 packet_sz, u8 mode,
+ u32 dma_addr, u32 len, int tx);
+int wait_dma_xfer_done(void);
+#endif /* __MUSB_DMA_H__ */
diff --git a/include/usb/musb_udc.h b/include/usb/musb_udc.h
index be808fd516..c56d958f65 100644
--- a/include/usb/musb_udc.h
+++ b/include/usb/musb_udc.h
@@ -35,9 +35,17 @@ void udc_enable(struct usb_device_instance *device);
void udc_disable(void);
void udc_startup_events(struct usb_device_instance *device);
int udc_init(void);
+void udc_power_on(void);
+void udc_power_off(void);
+int udc_soft_init(void);
+void udc_hot_startup(struct usb_device_instance *device);
+unsigned int udc_chars_in_rxfifo(unsigned int ep);
+void poll_rx_ep(unsigned int ep);
+int udc_is_initialized(void);
+
/* usbtty */
-#ifdef CONFIG_USB_TTY
+//#ifdef CONFIG_USB_TTY
#define EP0_MAX_PACKET_SIZE 64 /* MUSB_EP0_FIFOSIZE */
#define UDC_INT_ENDPOINT 1
@@ -47,7 +55,14 @@ int udc_init(void);
#define UDC_IN_ENDPOINT 3
#define UDC_IN_PACKET_SIZE 64
#define UDC_BULK_PACKET_SIZE 64
+#define UDC_BULK_HS_PACKET_SIZE 512
+
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+#define UDC_INT_ENDPOINT2 4
+#define UDC_OUT_ENDPOINT2 3
+#define UDC_IN_ENDPOINT2 2
+#endif
-#endif /* CONFIG_USB_TTY */
+//#endif /* CONFIG_USB_TTY */
#endif /* __MUSB_UDC_H__ */
diff --git a/include/usb/s3c_udc.h b/include/usb/s3c_udc.h
index 6c973b6995..6a8fd44244 100644
--- a/include/usb/s3c_udc.h
+++ b/include/usb/s3c_udc.h
@@ -24,6 +24,7 @@
#include <asm/errno.h>
#include <linux/usb/ch9.h>
+#include <usbdescriptors.h>
#include <linux/usb/gadget.h>
#include <linux/list.h>
#include <usb/lin_gadget_compat.h>
@@ -111,54 +112,6 @@ extern struct s3c_udc *the_controller;
#define ep_index(EP) ((EP)->bEndpointAddress&0xF)
#define ep_maxpacket(EP) ((EP)->ep.maxpacket)
-/*-------------------------------------------------------------------------*/
-/* #define DEBUG_UDC */
-#ifdef DEBUG_UDC
-#define DBG(stuff...) printf("udc: " stuff)
-#else
-#define DBG(stuff...) do {} while (0)
-#endif
-
-#ifdef DEBUG_S3C_UDC_SETUP
-#define DEBUG_SETUP(fmt, args...) printk(fmt, ##args)
-#else
-#define DEBUG_SETUP(fmt, args...) do {} while (0)
-#endif
-
-#ifdef DEBUG_S3C_UDC_EP0
-#define DEBUG_EP0(fmt, args...) printk(fmt, ##args)
-#else
-#define DEBUG_EP0(fmt, args...) do {} while (0)
-#endif
-
-#ifdef DEBUG_S3C_UDC_ISR
-#define DEBUG_ISR 1
-#else
-#define DEBUG_ISR 0
-#endif
-
-#ifdef DEBUG_S3C_UDC_OUT_EP
-#define DEBUG_OUT_EP(fmt, args...) printk(fmt, ##args)
-#else
-#define DEBUG_OUT_EP(fmt, args...) do {} while (0)
-#endif
-
-#ifdef DEBUG_S3C_UDC_IN_EP
-#define DEBUG_IN_EP 1
-#else
-#define DEBUG_IN_EP 0
-#endif
-
-#if defined(DEBUG_S3C_UDC_SETUP) || defined(DEBUG_S3C_UDC_EP0) || \
- defined(DEBUG_S3C_UDC_ISR) || defined(DEBUG_S3C_UDC_OUT_EP) || \
- defined(DEBUG_S3C_UDC_IN_EP) || defined(DEBUG_S3C_UDC)
-#define DEBUG
-#endif
-
-#define ERR(stuff...) printf("ERR udc: " stuff)
-#define WARN(stuff...) printf("WARNING udc: " stuff)
-#define INFO(stuff...) printf("INFO udc: " stuff)
-
extern void otg_phy_init(struct s3c_udc *dev);
extern void otg_phy_off(struct s3c_udc *dev);
diff --git a/include/usb/usbserial.h b/include/usb/usbserial.h
new file mode 100644
index 0000000000..7484f3d426
--- /dev/null
+++ b/include/usb/usbserial.h
@@ -0,0 +1,37 @@
+/*
+ * (C) Copyright 2003
+ * Gerry Hamel, geh@ti.com, Texas Instruments
+ *
+ * (C) Copyright 2006
+ * Bryan O'Donoghue, bodonoghue@codehermit.ie, CodeHermit
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ */
+
+#ifndef __USB_SERIAL_H__
+#define __USB_SERIAL_H__
+
+#define USB_ACM_CHAN_0 0
+#define USB_ACM_CHAN_1 1
+
+int usbser_tstc (int chan);
+int usbser_getc (int chan);
+void usbser_putc (int chan, const char c);
+int usbser_read(int chan, unsigned char *_buf, unsigned int len);
+int usbser_write(int chan, const unsigned char *_buf, unsigned int len);
+int drv_usbser_init (void);
+
+#endif
diff --git a/include/usbdescriptors.h b/include/usbdescriptors.h
index de1069f0ea..6f9d41d376 100644
--- a/include/usbdescriptors.h
+++ b/include/usbdescriptors.h
@@ -213,6 +213,18 @@ struct usb_interface_descriptor {
u8 iInterface;
} __attribute__ ((packed));
+/* usb interface association descriptor (IAD) */
+struct usb_function_descriptor {
+ u8 bLength;
+ u8 bDescriptorType; /* 0x0B */
+ u8 bFirstInterface;
+ u8 bInterfaceCount;
+ u8 bFunctionClass;
+ u8 bFunctionSubClass;
+ u8 bFunctionProtocol;
+ u8 iFunction;
+} __attribute__ ((packed));
+
struct usb_configuration_descriptor {
u8 bLength;
u8 bDescriptorType; /* 0x2 */
diff --git a/include/usbdevice.h b/include/usbdevice.h
index 3edaf8bcc2..2243356993 100644
--- a/include/usbdevice.h
+++ b/include/usbdevice.h
@@ -33,7 +33,7 @@
#include <common.h>
#include "usbdescriptors.h"
-
+#include "pdl.h"
#define MAX_URBS_QUEUED 5
@@ -474,8 +474,8 @@ typedef struct urb_link {
* allocated for receiving data for an endpoint and used to call the
* function driver to inform it that data has arrived.
*/
-
-#define URB_BUF_SIZE 128 /* in linux we'd malloc this, but in u-boot we prefer static data */
+/* change to 256 for high speed, the buffer is 2bytes width yingchun*/
+#define URB_BUF_SIZE 512 /* in linux we'd malloc this, but in u-boot we prefer static data */
struct urb {
struct usb_endpoint_instance *endpoint;
@@ -488,11 +488,13 @@ struct urb {
u8* buffer;
unsigned int buffer_length;
unsigned int actual_length;
+ unsigned int req_length;
+ int use_dma;
urb_send_status_t status;
int data;
- u16 buffer_data[URB_BUF_SIZE]; /* data received (OUT) or being sent (IN) */
+ u8 *buffer_data; /* data received (OUT) or being sent (IN) */
};
/* Endpoint configuration
@@ -643,6 +645,10 @@ struct urb *first_urb_detached (urb_link * hd);
void urb_append (urb_link * hd, struct urb *urb);
struct urb *usbd_alloc_urb (struct usb_device_instance *device, struct usb_endpoint_instance *endpoint);
+int usbd_init_urb (struct urb *urb, struct usb_device_instance *device,
+ struct usb_endpoint_instance *endpoint, u8 *buf, unsigned int len);
+int usbd_setup_urb(struct urb *urb, u8 *buf, u32 len, int dma);
+void usbd_free_urb(struct urb *urb);
void usbd_dealloc_urb (struct urb *urb);
/*
@@ -687,6 +693,7 @@ void usbd_tx_complete (struct usb_endpoint_instance *endpoint);
#ifdef DEBUG
static inline void print_urb(struct urb *u)
{
+ if (!pdl_dbg_usb_ep0) return;
serial_printf("urb %p\n", (u));
serial_printf("\tendpoint %p\n", u->endpoint);
serial_printf("\tdevice %p\n", u->device);
@@ -699,6 +706,7 @@ static inline void print_urb(struct urb *u)
static inline void print_usb_device_request(struct usb_device_request *r)
{
+ if (!pdl_dbg_usb_ep0) return;
serial_printf("usb request\n");
serial_printf("\tbmRequestType 0x%2.2x\n", r->bmRequestType);
if ((r->bmRequestType & USB_REQ_DIRECTION_MASK) == 0)
diff --git a/include/version.h b/include/version.h
index c908bd3013..9f3fbf3de0 100644
--- a/include/version.h
+++ b/include/version.h
@@ -24,11 +24,11 @@
#ifndef __VERSION_H__
#define __VERSION_H__
-#include <timestamp.h>
-
-#ifndef DO_DEPS_ONLY
-#include "generated/version_autogenerated.h"
-#endif
+// Only include:
+// #include "generated/version_autogenerated.h"
+// in files that directly use the version macros:
+// PLAIN_VERSION, U_BOOT_VERSION, CC_VERSION_STRING, LD_VERSION_STRING
+// or U_BOOT_VERSION_STRING
#ifndef CONFIG_IDENT_STRING
#define CONFIG_IDENT_STRING ""
diff --git a/lib/Makefile b/lib/Makefile
index a0fec60a13..c6d3f639fe 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -28,6 +28,7 @@ LIB = $(obj)libgeneric.o
ifndef CONFIG_SPL_BUILD
COBJS-$(CONFIG_ADDR_MAP) += addr_map.o
COBJS-$(CONFIG_BCH) += bch.o
+COBJS-$(CONFIG_AES) += aes.o
COBJS-$(CONFIG_BZIP2) += bzlib.o
COBJS-$(CONFIG_BZIP2) += bzlib_crctable.o
COBJS-$(CONFIG_BZIP2) += bzlib_decompress.o
@@ -58,6 +59,7 @@ endif
ifdef CONFIG_SPL_BUILD
COBJS-$(CONFIG_SPL_YMODEM_SUPPORT) += crc16.o
+COBJS-$(CONFIG_SPL_IMAGE_SUPPORT) += crc32.o
endif
COBJS-y += ctype.o
COBJS-y += div64.o
diff --git a/lib/aes.c b/lib/aes.c
new file mode 100644
index 0000000000..7da9edb7e6
--- /dev/null
+++ b/lib/aes.c
@@ -0,0 +1,598 @@
+/*
+ * Copyright (c) 2011 The Chromium OS Authors.
+ * (C) Copyright 2011 NVIDIA Corporation www.nvidia.com
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+/*
+ * advanced encryption standard
+ * author: karl malbrain, malbrain@yahoo.com
+ *
+ * This work, including the source code, documentation
+ * and related data, is placed into the public domain.
+ *
+ * The orginal author is Karl Malbrain.
+ *
+ * THIS SOFTWARE IS PROVIDED AS-IS WITHOUT WARRANTY
+ * OF ANY KIND, NOT EVEN THE IMPLIED WARRANTY OF
+ * MERCHANTABILITY. THE AUTHOR OF THIS SOFTWARE,
+ * ASSUMES _NO_ RESPONSIBILITY FOR ANY CONSEQUENCE
+ * RESULTING FROM THE USE, MODIFICATION, OR
+ * REDISTRIBUTION OF THIS SOFTWARE.
+*/
+
+#include <common.h>
+#include "aes.h"
+
+/* forward s-box */
+static const u8 sbox[256] = {
+ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5,
+ 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76,
+ 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0,
+ 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0,
+ 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc,
+ 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15,
+ 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a,
+ 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75,
+ 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0,
+ 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84,
+ 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b,
+ 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf,
+ 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85,
+ 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8,
+ 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5,
+ 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2,
+ 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17,
+ 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73,
+ 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88,
+ 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb,
+ 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c,
+ 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79,
+ 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9,
+ 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08,
+ 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6,
+ 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a,
+ 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e,
+ 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e,
+ 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94,
+ 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf,
+ 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68,
+ 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
+};
+
+/* inverse s-box */
+static const u8 inv_sbox[256] = {
+ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38,
+ 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb,
+ 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87,
+ 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb,
+ 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d,
+ 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e,
+ 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2,
+ 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25,
+ 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16,
+ 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92,
+ 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda,
+ 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84,
+ 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a,
+ 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06,
+ 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02,
+ 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b,
+ 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea,
+ 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73,
+ 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85,
+ 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e,
+ 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89,
+ 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b,
+ 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20,
+ 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4,
+ 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31,
+ 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f,
+ 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d,
+ 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef,
+ 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0,
+ 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61,
+ 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26,
+ 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
+};
+
+/* combined Xtimes2[Sbox[]] */
+static const u8 x2_sbox[256] = {
+ 0xc6, 0xf8, 0xee, 0xf6, 0xff, 0xd6, 0xde, 0x91,
+ 0x60, 0x02, 0xce, 0x56, 0xe7, 0xb5, 0x4d, 0xec,
+ 0x8f, 0x1f, 0x89, 0xfa, 0xef, 0xb2, 0x8e, 0xfb,
+ 0x41, 0xb3, 0x5f, 0x45, 0x23, 0x53, 0xe4, 0x9b,
+ 0x75, 0xe1, 0x3d, 0x4c, 0x6c, 0x7e, 0xf5, 0x83,
+ 0x68, 0x51, 0xd1, 0xf9, 0xe2, 0xab, 0x62, 0x2a,
+ 0x08, 0x95, 0x46, 0x9d, 0x30, 0x37, 0x0a, 0x2f,
+ 0x0e, 0x24, 0x1b, 0xdf, 0xcd, 0x4e, 0x7f, 0xea,
+ 0x12, 0x1d, 0x58, 0x34, 0x36, 0xdc, 0xb4, 0x5b,
+ 0xa4, 0x76, 0xb7, 0x7d, 0x52, 0xdd, 0x5e, 0x13,
+ 0xa6, 0xb9, 0x00, 0xc1, 0x40, 0xe3, 0x79, 0xb6,
+ 0xd4, 0x8d, 0x67, 0x72, 0x94, 0x98, 0xb0, 0x85,
+ 0xbb, 0xc5, 0x4f, 0xed, 0x86, 0x9a, 0x66, 0x11,
+ 0x8a, 0xe9, 0x04, 0xfe, 0xa0, 0x78, 0x25, 0x4b,
+ 0xa2, 0x5d, 0x80, 0x05, 0x3f, 0x21, 0x70, 0xf1,
+ 0x63, 0x77, 0xaf, 0x42, 0x20, 0xe5, 0xfd, 0xbf,
+ 0x81, 0x18, 0x26, 0xc3, 0xbe, 0x35, 0x88, 0x2e,
+ 0x93, 0x55, 0xfc, 0x7a, 0xc8, 0xba, 0x32, 0xe6,
+ 0xc0, 0x19, 0x9e, 0xa3, 0x44, 0x54, 0x3b, 0x0b,
+ 0x8c, 0xc7, 0x6b, 0x28, 0xa7, 0xbc, 0x16, 0xad,
+ 0xdb, 0x64, 0x74, 0x14, 0x92, 0x0c, 0x48, 0xb8,
+ 0x9f, 0xbd, 0x43, 0xc4, 0x39, 0x31, 0xd3, 0xf2,
+ 0xd5, 0x8b, 0x6e, 0xda, 0x01, 0xb1, 0x9c, 0x49,
+ 0xd8, 0xac, 0xf3, 0xcf, 0xca, 0xf4, 0x47, 0x10,
+ 0x6f, 0xf0, 0x4a, 0x5c, 0x38, 0x57, 0x73, 0x97,
+ 0xcb, 0xa1, 0xe8, 0x3e, 0x96, 0x61, 0x0d, 0x0f,
+ 0xe0, 0x7c, 0x71, 0xcc, 0x90, 0x06, 0xf7, 0x1c,
+ 0xc2, 0x6a, 0xae, 0x69, 0x17, 0x99, 0x3a, 0x27,
+ 0xd9, 0xeb, 0x2b, 0x22, 0xd2, 0xa9, 0x07, 0x33,
+ 0x2d, 0x3c, 0x15, 0xc9, 0x87, 0xaa, 0x50, 0xa5,
+ 0x03, 0x59, 0x09, 0x1a, 0x65, 0xd7, 0x84, 0xd0,
+ 0x82, 0x29, 0x5a, 0x1e, 0x7b, 0xa8, 0x6d, 0x2c
+};
+
+/* combined Xtimes3[Sbox[]] */
+static const u8 x3_sbox[256] = {
+ 0xa5, 0x84, 0x99, 0x8d, 0x0d, 0xbd, 0xb1, 0x54,
+ 0x50, 0x03, 0xa9, 0x7d, 0x19, 0x62, 0xe6, 0x9a,
+ 0x45, 0x9d, 0x40, 0x87, 0x15, 0xeb, 0xc9, 0x0b,
+ 0xec, 0x67, 0xfd, 0xea, 0xbf, 0xf7, 0x96, 0x5b,
+ 0xc2, 0x1c, 0xae, 0x6a, 0x5a, 0x41, 0x02, 0x4f,
+ 0x5c, 0xf4, 0x34, 0x08, 0x93, 0x73, 0x53, 0x3f,
+ 0x0c, 0x52, 0x65, 0x5e, 0x28, 0xa1, 0x0f, 0xb5,
+ 0x09, 0x36, 0x9b, 0x3d, 0x26, 0x69, 0xcd, 0x9f,
+ 0x1b, 0x9e, 0x74, 0x2e, 0x2d, 0xb2, 0xee, 0xfb,
+ 0xf6, 0x4d, 0x61, 0xce, 0x7b, 0x3e, 0x71, 0x97,
+ 0xf5, 0x68, 0x00, 0x2c, 0x60, 0x1f, 0xc8, 0xed,
+ 0xbe, 0x46, 0xd9, 0x4b, 0xde, 0xd4, 0xe8, 0x4a,
+ 0x6b, 0x2a, 0xe5, 0x16, 0xc5, 0xd7, 0x55, 0x94,
+ 0xcf, 0x10, 0x06, 0x81, 0xf0, 0x44, 0xba, 0xe3,
+ 0xf3, 0xfe, 0xc0, 0x8a, 0xad, 0xbc, 0x48, 0x04,
+ 0xdf, 0xc1, 0x75, 0x63, 0x30, 0x1a, 0x0e, 0x6d,
+ 0x4c, 0x14, 0x35, 0x2f, 0xe1, 0xa2, 0xcc, 0x39,
+ 0x57, 0xf2, 0x82, 0x47, 0xac, 0xe7, 0x2b, 0x95,
+ 0xa0, 0x98, 0xd1, 0x7f, 0x66, 0x7e, 0xab, 0x83,
+ 0xca, 0x29, 0xd3, 0x3c, 0x79, 0xe2, 0x1d, 0x76,
+ 0x3b, 0x56, 0x4e, 0x1e, 0xdb, 0x0a, 0x6c, 0xe4,
+ 0x5d, 0x6e, 0xef, 0xa6, 0xa8, 0xa4, 0x37, 0x8b,
+ 0x32, 0x43, 0x59, 0xb7, 0x8c, 0x64, 0xd2, 0xe0,
+ 0xb4, 0xfa, 0x07, 0x25, 0xaf, 0x8e, 0xe9, 0x18,
+ 0xd5, 0x88, 0x6f, 0x72, 0x24, 0xf1, 0xc7, 0x51,
+ 0x23, 0x7c, 0x9c, 0x21, 0xdd, 0xdc, 0x86, 0x85,
+ 0x90, 0x42, 0xc4, 0xaa, 0xd8, 0x05, 0x01, 0x12,
+ 0xa3, 0x5f, 0xf9, 0xd0, 0x91, 0x58, 0x27, 0xb9,
+ 0x38, 0x13, 0xb3, 0x33, 0xbb, 0x70, 0x89, 0xa7,
+ 0xb6, 0x22, 0x92, 0x20, 0x49, 0xff, 0x78, 0x7a,
+ 0x8f, 0xf8, 0x80, 0x17, 0xda, 0x31, 0xc6, 0xb8,
+ 0xc3, 0xb0, 0x77, 0x11, 0xcb, 0xfc, 0xd6, 0x3a
+};
+
+/*
+ * modular multiplication tables based on:
+ *
+ * Xtime2[x] = (x & 0x80 ? 0x1b : 0) ^ (x + x)
+ * Xtime3[x] = x^Xtime2[x];
+ */
+static const u8 x_time_9[256] = {
+ 0x00, 0x09, 0x12, 0x1b, 0x24, 0x2d, 0x36, 0x3f,
+ 0x48, 0x41, 0x5a, 0x53, 0x6c, 0x65, 0x7e, 0x77,
+ 0x90, 0x99, 0x82, 0x8b, 0xb4, 0xbd, 0xa6, 0xaf,
+ 0xd8, 0xd1, 0xca, 0xc3, 0xfc, 0xf5, 0xee, 0xe7,
+ 0x3b, 0x32, 0x29, 0x20, 0x1f, 0x16, 0x0d, 0x04,
+ 0x73, 0x7a, 0x61, 0x68, 0x57, 0x5e, 0x45, 0x4c,
+ 0xab, 0xa2, 0xb9, 0xb0, 0x8f, 0x86, 0x9d, 0x94,
+ 0xe3, 0xea, 0xf1, 0xf8, 0xc7, 0xce, 0xd5, 0xdc,
+ 0x76, 0x7f, 0x64, 0x6d, 0x52, 0x5b, 0x40, 0x49,
+ 0x3e, 0x37, 0x2c, 0x25, 0x1a, 0x13, 0x08, 0x01,
+ 0xe6, 0xef, 0xf4, 0xfd, 0xc2, 0xcb, 0xd0, 0xd9,
+ 0xae, 0xa7, 0xbc, 0xb5, 0x8a, 0x83, 0x98, 0x91,
+ 0x4d, 0x44, 0x5f, 0x56, 0x69, 0x60, 0x7b, 0x72,
+ 0x05, 0x0c, 0x17, 0x1e, 0x21, 0x28, 0x33, 0x3a,
+ 0xdd, 0xd4, 0xcf, 0xc6, 0xf9, 0xf0, 0xeb, 0xe2,
+ 0x95, 0x9c, 0x87, 0x8e, 0xb1, 0xb8, 0xa3, 0xaa,
+ 0xec, 0xe5, 0xfe, 0xf7, 0xc8, 0xc1, 0xda, 0xd3,
+ 0xa4, 0xad, 0xb6, 0xbf, 0x80, 0x89, 0x92, 0x9b,
+ 0x7c, 0x75, 0x6e, 0x67, 0x58, 0x51, 0x4a, 0x43,
+ 0x34, 0x3d, 0x26, 0x2f, 0x10, 0x19, 0x02, 0x0b,
+ 0xd7, 0xde, 0xc5, 0xcc, 0xf3, 0xfa, 0xe1, 0xe8,
+ 0x9f, 0x96, 0x8d, 0x84, 0xbb, 0xb2, 0xa9, 0xa0,
+ 0x47, 0x4e, 0x55, 0x5c, 0x63, 0x6a, 0x71, 0x78,
+ 0x0f, 0x06, 0x1d, 0x14, 0x2b, 0x22, 0x39, 0x30,
+ 0x9a, 0x93, 0x88, 0x81, 0xbe, 0xb7, 0xac, 0xa5,
+ 0xd2, 0xdb, 0xc0, 0xc9, 0xf6, 0xff, 0xe4, 0xed,
+ 0x0a, 0x03, 0x18, 0x11, 0x2e, 0x27, 0x3c, 0x35,
+ 0x42, 0x4b, 0x50, 0x59, 0x66, 0x6f, 0x74, 0x7d,
+ 0xa1, 0xa8, 0xb3, 0xba, 0x85, 0x8c, 0x97, 0x9e,
+ 0xe9, 0xe0, 0xfb, 0xf2, 0xcd, 0xc4, 0xdf, 0xd6,
+ 0x31, 0x38, 0x23, 0x2a, 0x15, 0x1c, 0x07, 0x0e,
+ 0x79, 0x70, 0x6b, 0x62, 0x5d, 0x54, 0x4f, 0x46
+};
+
+static const u8 x_time_b[256] = {
+ 0x00, 0x0b, 0x16, 0x1d, 0x2c, 0x27, 0x3a, 0x31,
+ 0x58, 0x53, 0x4e, 0x45, 0x74, 0x7f, 0x62, 0x69,
+ 0xb0, 0xbb, 0xa6, 0xad, 0x9c, 0x97, 0x8a, 0x81,
+ 0xe8, 0xe3, 0xfe, 0xf5, 0xc4, 0xcf, 0xd2, 0xd9,
+ 0x7b, 0x70, 0x6d, 0x66, 0x57, 0x5c, 0x41, 0x4a,
+ 0x23, 0x28, 0x35, 0x3e, 0x0f, 0x04, 0x19, 0x12,
+ 0xcb, 0xc0, 0xdd, 0xd6, 0xe7, 0xec, 0xf1, 0xfa,
+ 0x93, 0x98, 0x85, 0x8e, 0xbf, 0xb4, 0xa9, 0xa2,
+ 0xf6, 0xfd, 0xe0, 0xeb, 0xda, 0xd1, 0xcc, 0xc7,
+ 0xae, 0xa5, 0xb8, 0xb3, 0x82, 0x89, 0x94, 0x9f,
+ 0x46, 0x4d, 0x50, 0x5b, 0x6a, 0x61, 0x7c, 0x77,
+ 0x1e, 0x15, 0x08, 0x03, 0x32, 0x39, 0x24, 0x2f,
+ 0x8d, 0x86, 0x9b, 0x90, 0xa1, 0xaa, 0xb7, 0xbc,
+ 0xd5, 0xde, 0xc3, 0xc8, 0xf9, 0xf2, 0xef, 0xe4,
+ 0x3d, 0x36, 0x2b, 0x20, 0x11, 0x1a, 0x07, 0x0c,
+ 0x65, 0x6e, 0x73, 0x78, 0x49, 0x42, 0x5f, 0x54,
+ 0xf7, 0xfc, 0xe1, 0xea, 0xdb, 0xd0, 0xcd, 0xc6,
+ 0xaf, 0xa4, 0xb9, 0xb2, 0x83, 0x88, 0x95, 0x9e,
+ 0x47, 0x4c, 0x51, 0x5a, 0x6b, 0x60, 0x7d, 0x76,
+ 0x1f, 0x14, 0x09, 0x02, 0x33, 0x38, 0x25, 0x2e,
+ 0x8c, 0x87, 0x9a, 0x91, 0xa0, 0xab, 0xb6, 0xbd,
+ 0xd4, 0xdf, 0xc2, 0xc9, 0xf8, 0xf3, 0xee, 0xe5,
+ 0x3c, 0x37, 0x2a, 0x21, 0x10, 0x1b, 0x06, 0x0d,
+ 0x64, 0x6f, 0x72, 0x79, 0x48, 0x43, 0x5e, 0x55,
+ 0x01, 0x0a, 0x17, 0x1c, 0x2d, 0x26, 0x3b, 0x30,
+ 0x59, 0x52, 0x4f, 0x44, 0x75, 0x7e, 0x63, 0x68,
+ 0xb1, 0xba, 0xa7, 0xac, 0x9d, 0x96, 0x8b, 0x80,
+ 0xe9, 0xe2, 0xff, 0xf4, 0xc5, 0xce, 0xd3, 0xd8,
+ 0x7a, 0x71, 0x6c, 0x67, 0x56, 0x5d, 0x40, 0x4b,
+ 0x22, 0x29, 0x34, 0x3f, 0x0e, 0x05, 0x18, 0x13,
+ 0xca, 0xc1, 0xdc, 0xd7, 0xe6, 0xed, 0xf0, 0xfb,
+ 0x92, 0x99, 0x84, 0x8f, 0xbe, 0xb5, 0xa8, 0xa3
+};
+
+static const u8 x_time_d[256] = {
+ 0x00, 0x0d, 0x1a, 0x17, 0x34, 0x39, 0x2e, 0x23,
+ 0x68, 0x65, 0x72, 0x7f, 0x5c, 0x51, 0x46, 0x4b,
+ 0xd0, 0xdd, 0xca, 0xc7, 0xe4, 0xe9, 0xfe, 0xf3,
+ 0xb8, 0xb5, 0xa2, 0xaf, 0x8c, 0x81, 0x96, 0x9b,
+ 0xbb, 0xb6, 0xa1, 0xac, 0x8f, 0x82, 0x95, 0x98,
+ 0xd3, 0xde, 0xc9, 0xc4, 0xe7, 0xea, 0xfd, 0xf0,
+ 0x6b, 0x66, 0x71, 0x7c, 0x5f, 0x52, 0x45, 0x48,
+ 0x03, 0x0e, 0x19, 0x14, 0x37, 0x3a, 0x2d, 0x20,
+ 0x6d, 0x60, 0x77, 0x7a, 0x59, 0x54, 0x43, 0x4e,
+ 0x05, 0x08, 0x1f, 0x12, 0x31, 0x3c, 0x2b, 0x26,
+ 0xbd, 0xb0, 0xa7, 0xaa, 0x89, 0x84, 0x93, 0x9e,
+ 0xd5, 0xd8, 0xcf, 0xc2, 0xe1, 0xec, 0xfb, 0xf6,
+ 0xd6, 0xdb, 0xcc, 0xc1, 0xe2, 0xef, 0xf8, 0xf5,
+ 0xbe, 0xb3, 0xa4, 0xa9, 0x8a, 0x87, 0x90, 0x9d,
+ 0x06, 0x0b, 0x1c, 0x11, 0x32, 0x3f, 0x28, 0x25,
+ 0x6e, 0x63, 0x74, 0x79, 0x5a, 0x57, 0x40, 0x4d,
+ 0xda, 0xd7, 0xc0, 0xcd, 0xee, 0xe3, 0xf4, 0xf9,
+ 0xb2, 0xbf, 0xa8, 0xa5, 0x86, 0x8b, 0x9c, 0x91,
+ 0x0a, 0x07, 0x10, 0x1d, 0x3e, 0x33, 0x24, 0x29,
+ 0x62, 0x6f, 0x78, 0x75, 0x56, 0x5b, 0x4c, 0x41,
+ 0x61, 0x6c, 0x7b, 0x76, 0x55, 0x58, 0x4f, 0x42,
+ 0x09, 0x04, 0x13, 0x1e, 0x3d, 0x30, 0x27, 0x2a,
+ 0xb1, 0xbc, 0xab, 0xa6, 0x85, 0x88, 0x9f, 0x92,
+ 0xd9, 0xd4, 0xc3, 0xce, 0xed, 0xe0, 0xf7, 0xfa,
+ 0xb7, 0xba, 0xad, 0xa0, 0x83, 0x8e, 0x99, 0x94,
+ 0xdf, 0xd2, 0xc5, 0xc8, 0xeb, 0xe6, 0xf1, 0xfc,
+ 0x67, 0x6a, 0x7d, 0x70, 0x53, 0x5e, 0x49, 0x44,
+ 0x0f, 0x02, 0x15, 0x18, 0x3b, 0x36, 0x21, 0x2c,
+ 0x0c, 0x01, 0x16, 0x1b, 0x38, 0x35, 0x22, 0x2f,
+ 0x64, 0x69, 0x7e, 0x73, 0x50, 0x5d, 0x4a, 0x47,
+ 0xdc, 0xd1, 0xc6, 0xcb, 0xe8, 0xe5, 0xf2, 0xff,
+ 0xb4, 0xb9, 0xae, 0xa3, 0x80, 0x8d, 0x9a, 0x97
+};
+
+static const u8 x_time_e[256] = {
+ 0x00, 0x0e, 0x1c, 0x12, 0x38, 0x36, 0x24, 0x2a,
+ 0x70, 0x7e, 0x6c, 0x62, 0x48, 0x46, 0x54, 0x5a,
+ 0xe0, 0xee, 0xfc, 0xf2, 0xd8, 0xd6, 0xc4, 0xca,
+ 0x90, 0x9e, 0x8c, 0x82, 0xa8, 0xa6, 0xb4, 0xba,
+ 0xdb, 0xd5, 0xc7, 0xc9, 0xe3, 0xed, 0xff, 0xf1,
+ 0xab, 0xa5, 0xb7, 0xb9, 0x93, 0x9d, 0x8f, 0x81,
+ 0x3b, 0x35, 0x27, 0x29, 0x03, 0x0d, 0x1f, 0x11,
+ 0x4b, 0x45, 0x57, 0x59, 0x73, 0x7d, 0x6f, 0x61,
+ 0xad, 0xa3, 0xb1, 0xbf, 0x95, 0x9b, 0x89, 0x87,
+ 0xdd, 0xd3, 0xc1, 0xcf, 0xe5, 0xeb, 0xf9, 0xf7,
+ 0x4d, 0x43, 0x51, 0x5f, 0x75, 0x7b, 0x69, 0x67,
+ 0x3d, 0x33, 0x21, 0x2f, 0x05, 0x0b, 0x19, 0x17,
+ 0x76, 0x78, 0x6a, 0x64, 0x4e, 0x40, 0x52, 0x5c,
+ 0x06, 0x08, 0x1a, 0x14, 0x3e, 0x30, 0x22, 0x2c,
+ 0x96, 0x98, 0x8a, 0x84, 0xae, 0xa0, 0xb2, 0xbc,
+ 0xe6, 0xe8, 0xfa, 0xf4, 0xde, 0xd0, 0xc2, 0xcc,
+ 0x41, 0x4f, 0x5d, 0x53, 0x79, 0x77, 0x65, 0x6b,
+ 0x31, 0x3f, 0x2d, 0x23, 0x09, 0x07, 0x15, 0x1b,
+ 0xa1, 0xaf, 0xbd, 0xb3, 0x99, 0x97, 0x85, 0x8b,
+ 0xd1, 0xdf, 0xcd, 0xc3, 0xe9, 0xe7, 0xf5, 0xfb,
+ 0x9a, 0x94, 0x86, 0x88, 0xa2, 0xac, 0xbe, 0xb0,
+ 0xea, 0xe4, 0xf6, 0xf8, 0xd2, 0xdc, 0xce, 0xc0,
+ 0x7a, 0x74, 0x66, 0x68, 0x42, 0x4c, 0x5e, 0x50,
+ 0x0a, 0x04, 0x16, 0x18, 0x32, 0x3c, 0x2e, 0x20,
+ 0xec, 0xe2, 0xf0, 0xfe, 0xd4, 0xda, 0xc8, 0xc6,
+ 0x9c, 0x92, 0x80, 0x8e, 0xa4, 0xaa, 0xb8, 0xb6,
+ 0x0c, 0x02, 0x10, 0x1e, 0x34, 0x3a, 0x28, 0x26,
+ 0x7c, 0x72, 0x60, 0x6e, 0x44, 0x4a, 0x58, 0x56,
+ 0x37, 0x39, 0x2b, 0x25, 0x0f, 0x01, 0x13, 0x1d,
+ 0x47, 0x49, 0x5b, 0x55, 0x7f, 0x71, 0x63, 0x6d,
+ 0xd7, 0xd9, 0xcb, 0xc5, 0xef, 0xe1, 0xf3, 0xfd,
+ 0xa7, 0xa9, 0xbb, 0xb5, 0x9f, 0x91, 0x83, 0x8d
+};
+
+/*
+ * Exchanges columns in each of 4 rows
+ * row0 - unchanged, row1- shifted left 1,
+ * row2 - shifted left 2 and row3 - shifted left 3
+ */
+static void shift_rows(u8 *state)
+{
+ u8 tmp;
+
+ /* just substitute row 0 */
+ state[0] = sbox[state[0]];
+ state[4] = sbox[state[4]];
+ state[8] = sbox[state[8]];
+ state[12] = sbox[state[12]];
+
+ /* rotate row 1 */
+ tmp = sbox[state[1]];
+ state[1] = sbox[state[5]];
+ state[5] = sbox[state[9]];
+ state[9] = sbox[state[13]];
+ state[13] = tmp;
+
+ /* rotate row 2 */
+ tmp = sbox[state[2]];
+ state[2] = sbox[state[10]];
+ state[10] = tmp;
+ tmp = sbox[state[6]];
+ state[6] = sbox[state[14]];
+ state[14] = tmp;
+
+ /* rotate row 3 */
+ tmp = sbox[state[15]];
+ state[15] = sbox[state[11]];
+ state[11] = sbox[state[7]];
+ state[7] = sbox[state[3]];
+ state[3] = tmp;
+}
+
+/*
+ * restores columns in each of 4 rows
+ * row0 - unchanged, row1- shifted right 1,
+ * row2 - shifted right 2 and row3 - shifted right 3
+ */
+static void inv_shift_rows(u8 *state)
+{
+ u8 tmp;
+
+ /* restore row 0 */
+ state[0] = inv_sbox[state[0]];
+ state[4] = inv_sbox[state[4]];
+ state[8] = inv_sbox[state[8]];
+ state[12] = inv_sbox[state[12]];
+
+ /* restore row 1 */
+ tmp = inv_sbox[state[13]];
+ state[13] = inv_sbox[state[9]];
+ state[9] = inv_sbox[state[5]];
+ state[5] = inv_sbox[state[1]];
+ state[1] = tmp;
+
+ /* restore row 2 */
+ tmp = inv_sbox[state[2]];
+ state[2] = inv_sbox[state[10]];
+ state[10] = tmp;
+ tmp = inv_sbox[state[6]];
+ state[6] = inv_sbox[state[14]];
+ state[14] = tmp;
+
+ /* restore row 3 */
+ tmp = inv_sbox[state[3]];
+ state[3] = inv_sbox[state[7]];
+ state[7] = inv_sbox[state[11]];
+ state[11] = inv_sbox[state[15]];
+ state[15] = tmp;
+}
+
+/* recombine and mix each row in a column */
+static void mix_sub_columns(u8 *state)
+{
+ u8 tmp[4 * AES_STATECOLS];
+
+ /* mixing column 0 */
+ tmp[0] = x2_sbox[state[0]] ^ x3_sbox[state[5]] ^
+ sbox[state[10]] ^ sbox[state[15]];
+ tmp[1] = sbox[state[0]] ^ x2_sbox[state[5]] ^
+ x3_sbox[state[10]] ^ sbox[state[15]];
+ tmp[2] = sbox[state[0]] ^ sbox[state[5]] ^
+ x2_sbox[state[10]] ^ x3_sbox[state[15]];
+ tmp[3] = x3_sbox[state[0]] ^ sbox[state[5]] ^
+ sbox[state[10]] ^ x2_sbox[state[15]];
+
+ /* mixing column 1 */
+ tmp[4] = x2_sbox[state[4]] ^ x3_sbox[state[9]] ^
+ sbox[state[14]] ^ sbox[state[3]];
+ tmp[5] = sbox[state[4]] ^ x2_sbox[state[9]] ^
+ x3_sbox[state[14]] ^ sbox[state[3]];
+ tmp[6] = sbox[state[4]] ^ sbox[state[9]] ^
+ x2_sbox[state[14]] ^ x3_sbox[state[3]];
+ tmp[7] = x3_sbox[state[4]] ^ sbox[state[9]] ^
+ sbox[state[14]] ^ x2_sbox[state[3]];
+
+ /* mixing column 2 */
+ tmp[8] = x2_sbox[state[8]] ^ x3_sbox[state[13]] ^
+ sbox[state[2]] ^ sbox[state[7]];
+ tmp[9] = sbox[state[8]] ^ x2_sbox[state[13]] ^
+ x3_sbox[state[2]] ^ sbox[state[7]];
+ tmp[10] = sbox[state[8]] ^ sbox[state[13]] ^
+ x2_sbox[state[2]] ^ x3_sbox[state[7]];
+ tmp[11] = x3_sbox[state[8]] ^ sbox[state[13]] ^
+ sbox[state[2]] ^ x2_sbox[state[7]];
+
+ /* mixing column 3 */
+ tmp[12] = x2_sbox[state[12]] ^ x3_sbox[state[1]] ^
+ sbox[state[6]] ^ sbox[state[11]];
+ tmp[13] = sbox[state[12]] ^ x2_sbox[state[1]] ^
+ x3_sbox[state[6]] ^ sbox[state[11]];
+ tmp[14] = sbox[state[12]] ^ sbox[state[1]] ^
+ x2_sbox[state[6]] ^ x3_sbox[state[11]];
+ tmp[15] = x3_sbox[state[12]] ^ sbox[state[1]] ^
+ sbox[state[6]] ^ x2_sbox[state[11]];
+
+ memcpy(state, tmp, sizeof(tmp));
+}
+
+/* restore and un-mix each row in a column */
+static void inv_mix_sub_columns(u8 *state)
+{
+ u8 tmp[4 * AES_STATECOLS];
+ int i;
+
+ /* restore column 0 */
+ tmp[0] = x_time_e[state[0]] ^ x_time_b[state[1]] ^
+ x_time_d[state[2]] ^ x_time_9[state[3]];
+ tmp[5] = x_time_9[state[0]] ^ x_time_e[state[1]] ^
+ x_time_b[state[2]] ^ x_time_d[state[3]];
+ tmp[10] = x_time_d[state[0]] ^ x_time_9[state[1]] ^
+ x_time_e[state[2]] ^ x_time_b[state[3]];
+ tmp[15] = x_time_b[state[0]] ^ x_time_d[state[1]] ^
+ x_time_9[state[2]] ^ x_time_e[state[3]];
+
+ /* restore column 1 */
+ tmp[4] = x_time_e[state[4]] ^ x_time_b[state[5]] ^
+ x_time_d[state[6]] ^ x_time_9[state[7]];
+ tmp[9] = x_time_9[state[4]] ^ x_time_e[state[5]] ^
+ x_time_b[state[6]] ^ x_time_d[state[7]];
+ tmp[14] = x_time_d[state[4]] ^ x_time_9[state[5]] ^
+ x_time_e[state[6]] ^ x_time_b[state[7]];
+ tmp[3] = x_time_b[state[4]] ^ x_time_d[state[5]] ^
+ x_time_9[state[6]] ^ x_time_e[state[7]];
+
+ /* restore column 2 */
+ tmp[8] = x_time_e[state[8]] ^ x_time_b[state[9]] ^
+ x_time_d[state[10]] ^ x_time_9[state[11]];
+ tmp[13] = x_time_9[state[8]] ^ x_time_e[state[9]] ^
+ x_time_b[state[10]] ^ x_time_d[state[11]];
+ tmp[2] = x_time_d[state[8]] ^ x_time_9[state[9]] ^
+ x_time_e[state[10]] ^ x_time_b[state[11]];
+ tmp[7] = x_time_b[state[8]] ^ x_time_d[state[9]] ^
+ x_time_9[state[10]] ^ x_time_e[state[11]];
+
+ /* restore column 3 */
+ tmp[12] = x_time_e[state[12]] ^ x_time_b[state[13]] ^
+ x_time_d[state[14]] ^ x_time_9[state[15]];
+ tmp[1] = x_time_9[state[12]] ^ x_time_e[state[13]] ^
+ x_time_b[state[14]] ^ x_time_d[state[15]];
+ tmp[6] = x_time_d[state[12]] ^ x_time_9[state[13]] ^
+ x_time_e[state[14]] ^ x_time_b[state[15]];
+ tmp[11] = x_time_b[state[12]] ^ x_time_d[state[13]] ^
+ x_time_9[state[14]] ^ x_time_e[state[15]];
+
+ for (i = 0; i < 4 * AES_STATECOLS; i++)
+ state[i] = inv_sbox[tmp[i]];
+}
+
+/*
+ * encrypt/decrypt columns of the key
+ * n.b. you can replace this with byte-wise xor if you wish.
+ */
+static void add_round_key(u32 *state, u32 *key)
+{
+ int idx;
+
+ for (idx = 0; idx < 4; idx++)
+ state[idx] ^= key[idx];
+}
+
+static u8 rcon[11] = {
+ 0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36
+};
+
+/* produce AES_STATECOLS bytes for each round */
+void aes_expand_key(u8 *key, u8 *expkey)
+{
+ u8 tmp0, tmp1, tmp2, tmp3, tmp4;
+ u32 idx;
+
+ memcpy(expkey, key, AES_KEYCOLS * 4);
+
+ for (idx = AES_KEYCOLS; idx < AES_STATECOLS * (AES_ROUNDS + 1); idx++) {
+ tmp0 = expkey[4*idx - 4];
+ tmp1 = expkey[4*idx - 3];
+ tmp2 = expkey[4*idx - 2];
+ tmp3 = expkey[4*idx - 1];
+ if (!(idx % AES_KEYCOLS)) {
+ tmp4 = tmp3;
+ tmp3 = sbox[tmp0];
+ tmp0 = sbox[tmp1] ^ rcon[idx / AES_KEYCOLS];
+ tmp1 = sbox[tmp2];
+ tmp2 = sbox[tmp4];
+ } else if ((AES_KEYCOLS > 6) && (idx % AES_KEYCOLS == 4)) {
+ tmp0 = sbox[tmp0];
+ tmp1 = sbox[tmp1];
+ tmp2 = sbox[tmp2];
+ tmp3 = sbox[tmp3];
+ }
+
+ expkey[4*idx+0] = expkey[4*idx - 4*AES_KEYCOLS + 0] ^ tmp0;
+ expkey[4*idx+1] = expkey[4*idx - 4*AES_KEYCOLS + 1] ^ tmp1;
+ expkey[4*idx+2] = expkey[4*idx - 4*AES_KEYCOLS + 2] ^ tmp2;
+ expkey[4*idx+3] = expkey[4*idx - 4*AES_KEYCOLS + 3] ^ tmp3;
+ }
+}
+
+/* encrypt one 128 bit block */
+void aes_encrypt(u8 *in, u8 *expkey, u8 *out)
+{
+ u8 state[AES_STATECOLS * 4];
+ u32 round;
+
+ memcpy(state, in, AES_STATECOLS * 4);
+ add_round_key((u32 *)state, (u32 *)expkey);
+
+ for (round = 1; round < AES_ROUNDS + 1; round++) {
+ if (round < AES_ROUNDS)
+ mix_sub_columns(state);
+ else
+ shift_rows(state);
+
+ add_round_key((u32 *)state,
+ (u32 *)expkey + round * AES_STATECOLS);
+ }
+
+ memcpy(out, state, sizeof(state));
+}
+
+void aes_decrypt(u8 *in, u8 *expkey, u8 *out)
+{
+ u8 state[AES_STATECOLS * 4];
+ int round;
+
+ memcpy(state, in, sizeof(state));
+
+ add_round_key((u32 *)state,
+ (u32 *)expkey + AES_ROUNDS * AES_STATECOLS);
+ inv_shift_rows(state);
+
+ for (round = AES_ROUNDS; round--; ) {
+ add_round_key((u32 *)state,
+ (u32 *)expkey + round * AES_STATECOLS);
+ if (round)
+ inv_mix_sub_columns(state);
+ }
+
+ memcpy(out, state, sizeof(state));
+}
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index bdec1a0d96..cc09e06c73 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -40,6 +40,9 @@ static const char * const compat_names[COMPAT_COUNT] = {
COMPAT(NVIDIA_TEGRA20_USB, "nvidia,tegra20-ehci"),
COMPAT(NVIDIA_TEGRA20_I2C, "nvidia,tegra20-i2c"),
COMPAT(NVIDIA_TEGRA20_DVC, "nvidia,tegra20-i2c-dvc"),
+ COMPAT(NVIDIA_TEGRA20_EMC, "nvidia,tegra20-emc"),
+ COMPAT(NVIDIA_TEGRA20_EMC_TABLE, "nvidia,tegra20-emc-table"),
+ COMPAT(NVIDIA_TEGRA20_KBC, "nvidia,tegra20-kbc"),
};
const char *fdtdec_get_compatible(enum fdt_compat_id id)
@@ -133,6 +136,21 @@ int fdtdec_next_compatible(const void *blob, int node,
return fdt_node_offset_by_compatible(blob, node, compat_names[id]);
}
+int fdtdec_next_compatible_subnode(const void *blob, int node,
+ enum fdt_compat_id id, int *depthp)
+{
+ do {
+ node = fdt_next_node(blob, node, depthp);
+ } while (*depthp > 1);
+
+ /* If this is a direct subnode, and compatible, return it */
+ if (*depthp == 1 && 0 == fdt_node_check_compatible(
+ blob, node, compat_names[id]))
+ return node;
+
+ return -FDT_ERR_NOTFOUND;
+}
+
int fdtdec_next_alias(const void *blob, const char *name,
enum fdt_compat_id id, int *upto)
{
@@ -363,6 +381,17 @@ int fdtdec_get_int_array(const void *blob, int node, const char *prop_name,
return err;
}
+const u32 *fdtdec_locate_array(const void *blob, int node,
+ const char *prop_name, int count)
+{
+ const u32 *cell;
+ int err;
+
+ cell = get_prop_check_min_len(blob, node, prop_name,
+ sizeof(u32) * count, &err);
+ return err ? NULL : cell;
+}
+
int fdtdec_get_bool(const void *blob, int node, const char *prop_name)
{
const s32 *cell;
@@ -448,3 +477,27 @@ int fdtdec_setup_gpio(struct fdt_gpio_state *gpio)
return -1;
return 0;
}
+
+int fdtdec_get_byte_array(const void *blob, int node, const char *prop_name,
+ u8 *array, int count)
+{
+ const u8 *cell;
+ int err;
+
+ cell = get_prop_check_min_len(blob, node, prop_name, count, &err);
+ if (!err)
+ memcpy(array, cell, count);
+ return err;
+}
+
+const u8 *fdtdec_locate_byte_array(const void *blob, int node,
+ const char *prop_name, int count)
+{
+ const u8 *cell;
+ int err;
+
+ cell = get_prop_check_min_len(blob, node, prop_name, count, &err);
+ if (err)
+ return NULL;
+ return cell;
+}
diff --git a/lib/gunzip.c b/lib/gunzip.c
index 8b16b2495f..99a8ab0287 100644
--- a/lib/gunzip.c
+++ b/lib/gunzip.c
@@ -36,10 +36,7 @@
#define RESERVED 0xe0
#define DEFLATED 8
-void *zalloc(void *, unsigned, unsigned);
-void zfree(void *, void *, unsigned);
-
-void *zalloc(void *x, unsigned items, unsigned size)
+void *gzalloc(void *x, unsigned items, unsigned size)
{
void *p;
@@ -51,7 +48,7 @@ void *zalloc(void *x, unsigned items, unsigned size)
return (p);
}
-void zfree(void *x, void *addr, unsigned nb)
+void gzfree(void *x, void *addr, unsigned nb)
{
free (addr);
}
@@ -94,8 +91,8 @@ int zunzip(void *dst, int dstlen, unsigned char *src, unsigned long *lenp,
z_stream s;
int r;
- s.zalloc = zalloc;
- s.zfree = zfree;
+ s.zalloc = gzalloc;
+ s.zfree = gzfree;
r = inflateInit2(&s, -MAX_WBITS);
if (r != Z_OK) {
diff --git a/lib/md5.c b/lib/md5.c
index 81a09e3f90..2ae4a06319 100644
--- a/lib/md5.c
+++ b/lib/md5.c
@@ -153,8 +153,8 @@ MD5Final(unsigned char digest[16], struct MD5Context *ctx)
byteReverse(ctx->in, 14);
/* Append length in bits and transform */
- ((__u32 *) ctx->in)[14] = ctx->bits[0];
- ((__u32 *) ctx->in)[15] = ctx->bits[1];
+ ctx->in32[14] = ctx->bits[0];
+ ctx->in32[15] = ctx->bits[1];
MD5Transform(ctx->buf, (__u32 *) ctx->in);
byteReverse((unsigned char *) ctx->buf, 4);
diff --git a/nand_spl/board/rda/rda8810/Makefile b/nand_spl/board/rda/rda8810/Makefile
new file mode 100644
index 0000000000..a66f12a3dc
--- /dev/null
+++ b/nand_spl/board/rda/rda8810/Makefile
@@ -0,0 +1,79 @@
+#
+# (C) Copyright 2009 DENX Software Engineering
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundatio; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+CONFIG_NAND_SPL = y
+PAD_TO := 2048
+
+include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
+
+nandobj := $(OBJTREE)/nand_spl/
+
+LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
+LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
+ $(LDFLAGS_FINAL)
+AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
+CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
+
+SOBJS = start.o
+COBJS = nand_boot_fsl_nfc.o spl.o
+
+SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c
+SRCS += $(SRCTREE)/arch/arm/cpu/armv7/start.S
+SRCS += $(SRCTREE)/arch/arm/cpu/armv7/spl.c
+OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+__OBJS := $(SOBJS) $(COBJS)
+LNDIR := $(nandobj)board/$(BOARDDIR)
+
+ALL = $(nandobj)u-boot-spl $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
+
+all: $(obj).depend $(ALL)
+
+$(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
+ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $< $@
+
+$(nandobj)u-boot-spl.bin: $(nandobj)u-boot-spl
+ $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+
+$(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot.lds
+ cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \
+ -Map $(nandobj)u-boot-spl.map \
+ -o $@
+
+$(nandobj)u-boot.lds: $(LDSCRIPT)
+ $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+
+#########################################################################
+
+$(obj)%.o: $(SRCTREE)/arch/arm/cpu/armv7/%.S
+ $(CC) $(AFLAGS) -c -o $@ $<
+
+$(obj)%.o: $(SRCTREE)/arch/arm/cpu/armv7/%.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+$(obj)%.o: $(SRCTREE)/nand_spl/%.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/nand_spl/board/rda/rda8810/u-boot.lds b/nand_spl/board/rda/rda8810/u-boot.lds
new file mode 100644
index 0000000000..8bbc3c92be
--- /dev/null
+++ b/nand_spl/board/rda/rda8810/u-boot.lds
@@ -0,0 +1,82 @@
+/*
+ * (C) Copyright 2009
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00000000;
+
+ . = ALIGN(4);
+ .text :
+ {
+ start.o (.text)
+ nand_boot_fsl_nfc.o (.text)
+ *(.text)
+ . = 2K;
+ }
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
+
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+
+ . = ALIGN(4);
+ __u_boot_cmd_start = .;
+ .u_boot_cmd : { *(.u_boot_cmd) }
+ __u_boot_cmd_end = .;
+
+ . = ALIGN(4);
+
+ .rel.dyn : {
+ __rel_dyn_start = .;
+ *(.rel*)
+ __rel_dyn_end = .;
+ }
+
+ .dynsym : {
+ __dynsym_start = .;
+ *(.dynsym)
+ }
+
+ _end = .;
+
+ .bss __rel_dyn_start (OVERLAY) : {
+ __bss_start = .;
+ *(.bss)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ }
+
+ /DISCARD/ : { *(.bss*) }
+ /DISCARD/ : { *(.dynstr*) }
+ /DISCARD/ : { *(.dynsym*) }
+ /DISCARD/ : { *(.dynamic*) }
+ /DISCARD/ : { *(.hash*) }
+ /DISCARD/ : { *(.plt*) }
+ /DISCARD/ : { *(.interp*) }
+ /DISCARD/ : { *(.gnu*) }
+}
diff --git a/nand_spl/board/rda/rdaarm926ejs/Makefile b/nand_spl/board/rda/rdaarm926ejs/Makefile
new file mode 100644
index 0000000000..736385eb32
--- /dev/null
+++ b/nand_spl/board/rda/rdaarm926ejs/Makefile
@@ -0,0 +1,79 @@
+#
+# (C) Copyright 2009 DENX Software Engineering
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundatio; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+CONFIG_NAND_SPL = y
+PAD_TO := 2048
+
+include $(TOPDIR)/nand_spl/board/$(BOARDDIR)/config.mk
+
+nandobj := $(OBJTREE)/nand_spl/
+
+LDSCRIPT= $(TOPDIR)/nand_spl/board/$(BOARDDIR)/u-boot.lds
+LDFLAGS := -T $(nandobj)u-boot.lds -Ttext $(CONFIG_SYS_TEXT_BASE) $(LDFLAGS) \
+ $(LDFLAGS_FINAL)
+AFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
+CFLAGS += -DCONFIG_SPL_BUILD -DCONFIG_NAND_SPL
+
+SOBJS = start.o
+COBJS = nand_boot_fsl_nfc.o spl.o
+
+SRCS := $(SRCTREE)/nand_spl/nand_boot_fsl_nfc.c
+SRCS += $(SRCTREE)/arch/arm/cpu/arm926ejs/start.S
+SRCS += $(SRCTREE)/arch/arm/cpu/arm926ejs/spl.c
+OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
+__OBJS := $(SOBJS) $(COBJS)
+LNDIR := $(nandobj)board/$(BOARDDIR)
+
+ALL = $(nandobj)u-boot-spl $(nandobj)u-boot-spl.bin $(nandobj)u-boot-spl-16k.bin
+
+all: $(obj).depend $(ALL)
+
+$(nandobj)u-boot-spl-16k.bin: $(nandobj)u-boot-spl
+ $(OBJCOPY) ${OBJCFLAGS} --pad-to=$(PAD_TO) -O binary $< $@
+
+$(nandobj)u-boot-spl.bin: $(nandobj)u-boot-spl
+ $(OBJCOPY) ${OBJCFLAGS} -O binary $< $@
+
+$(nandobj)u-boot-spl: $(OBJS) $(nandobj)u-boot.lds
+ cd $(LNDIR) && $(LD) $(LDFLAGS) $(__OBJS) \
+ -Map $(nandobj)u-boot-spl.map \
+ -o $@
+
+$(nandobj)u-boot.lds: $(LDSCRIPT)
+ $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - <$^ >$@
+
+#########################################################################
+
+$(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm926ejs/%.S
+ $(CC) $(AFLAGS) -c -o $@ $<
+
+$(obj)%.o: $(SRCTREE)/arch/arm/cpu/arm926ejs/%.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+$(obj)%.o: $(SRCTREE)/nand_spl/%.c
+ $(CC) $(CFLAGS) -c -o $@ $<
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/nand_spl/board/rda/rdaarm926ejs/u-boot.lds b/nand_spl/board/rda/rdaarm926ejs/u-boot.lds
new file mode 100644
index 0000000000..8bbc3c92be
--- /dev/null
+++ b/nand_spl/board/rda/rdaarm926ejs/u-boot.lds
@@ -0,0 +1,82 @@
+/*
+ * (C) Copyright 2009
+ * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00000000;
+
+ . = ALIGN(4);
+ .text :
+ {
+ start.o (.text)
+ nand_boot_fsl_nfc.o (.text)
+ *(.text)
+ . = 2K;
+ }
+
+ . = ALIGN(4);
+ .rodata : { *(.rodata) }
+
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+
+ . = ALIGN(4);
+ __u_boot_cmd_start = .;
+ .u_boot_cmd : { *(.u_boot_cmd) }
+ __u_boot_cmd_end = .;
+
+ . = ALIGN(4);
+
+ .rel.dyn : {
+ __rel_dyn_start = .;
+ *(.rel*)
+ __rel_dyn_end = .;
+ }
+
+ .dynsym : {
+ __dynsym_start = .;
+ *(.dynsym)
+ }
+
+ _end = .;
+
+ .bss __rel_dyn_start (OVERLAY) : {
+ __bss_start = .;
+ *(.bss)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ }
+
+ /DISCARD/ : { *(.bss*) }
+ /DISCARD/ : { *(.dynstr*) }
+ /DISCARD/ : { *(.dynsym*) }
+ /DISCARD/ : { *(.dynamic*) }
+ /DISCARD/ : { *(.hash*) }
+ /DISCARD/ : { *(.plt*) }
+ /DISCARD/ : { *(.interp*) }
+ /DISCARD/ : { *(.gnu*) }
+}
diff --git a/net/Makefile b/net/Makefile
index 0544f6bacd..526468718a 100644
--- a/net/Makefile
+++ b/net/Makefile
@@ -27,16 +27,22 @@ include $(TOPDIR)/config.mk
LIB = $(obj)libnet.o
+COBJS-$(CONFIG_CMD_NET) += arp.o
COBJS-$(CONFIG_CMD_NET) += bootp.o
+COBJS-$(CONFIG_CMD_CDP) += cdp.o
COBJS-$(CONFIG_CMD_DNS) += dns.o
COBJS-$(CONFIG_CMD_NET) += eth.o
+COBJS-$(CONFIG_CMD_LINK_LOCAL) += link_local.o
COBJS-$(CONFIG_CMD_NET) += net.o
+COBJS-$(CONFIG_BOOTP_RANDOM_DELAY) += net_rand.o
+COBJS-$(CONFIG_CMD_LINK_LOCAL) += net_rand.o
COBJS-$(CONFIG_CMD_NFS) += nfs.o
+COBJS-$(CONFIG_CMD_PING) += ping.o
COBJS-$(CONFIG_CMD_RARP) += rarp.o
COBJS-$(CONFIG_CMD_SNTP) += sntp.o
COBJS-$(CONFIG_CMD_NET) += tftp.o
-COBJS := $(COBJS-y)
+COBJS := $(sort $(COBJS-y))
SRCS := $(COBJS:.o=.c)
OBJS := $(addprefix $(obj),$(COBJS))
diff --git a/net/arp.c b/net/arp.c
new file mode 100644
index 0000000000..bac4cab5ef
--- /dev/null
+++ b/net/arp.c
@@ -0,0 +1,236 @@
+/*
+ * Copied from Linux Monitor (LiMon) - Networking.
+ *
+ * Copyright 1994 - 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2002 Wolfgang Denk, wd@denx.de
+ */
+
+#include <common.h>
+
+#include "arp.h"
+
+#ifndef CONFIG_ARP_TIMEOUT
+/* Milliseconds before trying ARP again */
+# define ARP_TIMEOUT 5000UL
+#else
+# define ARP_TIMEOUT CONFIG_ARP_TIMEOUT
+#endif
+
+
+#ifndef CONFIG_NET_RETRY_COUNT
+# define ARP_TIMEOUT_COUNT 5 /* # of timeouts before giving up */
+#else
+# define ARP_TIMEOUT_COUNT CONFIG_NET_RETRY_COUNT
+#endif
+
+IPaddr_t NetArpWaitPacketIP;
+IPaddr_t NetArpWaitReplyIP;
+/* MAC address of waiting packet's destination */
+uchar *NetArpWaitPacketMAC;
+int NetArpWaitTxPacketSize;
+ulong NetArpWaitTimerStart;
+int NetArpWaitTry;
+
+uchar *NetArpTxPacket; /* THE ARP transmit packet */
+uchar NetArpPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
+
+void ArpInit(void)
+{
+ /* XXX problem with bss workaround */
+ NetArpWaitPacketMAC = NULL;
+ NetArpWaitPacketIP = 0;
+ NetArpWaitReplyIP = 0;
+ NetArpWaitTxPacketSize = 0;
+ NetArpTxPacket = &NetArpPacketBuf[0] + (PKTALIGN - 1);
+ NetArpTxPacket -= (ulong)NetArpTxPacket % PKTALIGN;
+}
+
+void arp_raw_request(IPaddr_t sourceIP, const uchar *targetEther,
+ IPaddr_t targetIP)
+{
+ uchar *pkt;
+ struct arp_hdr *arp;
+ int eth_hdr_size;
+
+ debug_cond(DEBUG_DEV_PKT, "ARP broadcast %d\n", NetArpWaitTry);
+
+ pkt = NetArpTxPacket;
+
+ eth_hdr_size = NetSetEther(pkt, NetBcastAddr, PROT_ARP);
+ pkt += eth_hdr_size;
+
+ arp = (struct arp_hdr *) pkt;
+
+ arp->ar_hrd = htons(ARP_ETHER);
+ arp->ar_pro = htons(PROT_IP);
+ arp->ar_hln = ARP_HLEN;
+ arp->ar_pln = ARP_PLEN;
+ arp->ar_op = htons(ARPOP_REQUEST);
+
+ memcpy(&arp->ar_sha, NetOurEther, ARP_HLEN); /* source ET addr */
+ NetWriteIP(&arp->ar_spa, sourceIP); /* source IP addr */
+ memcpy(&arp->ar_tha, targetEther, ARP_HLEN); /* target ET addr */
+ NetWriteIP(&arp->ar_tpa, targetIP); /* target IP addr */
+
+ NetSendPacket(NetArpTxPacket, eth_hdr_size + ARP_HDR_SIZE);
+}
+
+void ArpRequest(void)
+{
+ if ((NetArpWaitPacketIP & NetOurSubnetMask) !=
+ (NetOurIP & NetOurSubnetMask)) {
+ if (NetOurGatewayIP == 0) {
+ puts("## Warning: gatewayip needed but not set\n");
+ NetArpWaitReplyIP = NetArpWaitPacketIP;
+ } else {
+ NetArpWaitReplyIP = NetOurGatewayIP;
+ }
+ } else {
+ NetArpWaitReplyIP = NetArpWaitPacketIP;
+ }
+
+ arp_raw_request(NetOurIP, NetEtherNullAddr, NetArpWaitReplyIP);
+}
+
+void ArpTimeoutCheck(void)
+{
+ ulong t;
+
+ if (!NetArpWaitPacketIP)
+ return;
+
+ t = get_timer(0);
+
+ /* check for arp timeout */
+ if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT) {
+ NetArpWaitTry++;
+
+ if (NetArpWaitTry >= ARP_TIMEOUT_COUNT) {
+ puts("\nARP Retry count exceeded; starting again\n");
+ NetArpWaitTry = 0;
+ NetStartAgain();
+ } else {
+ NetArpWaitTimerStart = t;
+ ArpRequest();
+ }
+ }
+}
+
+void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
+{
+ struct arp_hdr *arp;
+ IPaddr_t reply_ip_addr;
+ uchar *pkt;
+ int eth_hdr_size;
+
+ /*
+ * We have to deal with two types of ARP packets:
+ * - REQUEST packets will be answered by sending our
+ * IP address - if we know it.
+ * - REPLY packates are expected only after we asked
+ * for the TFTP server's or the gateway's ethernet
+ * address; so if we receive such a packet, we set
+ * the server ethernet address
+ */
+ debug_cond(DEBUG_NET_PKT, "Got ARP\n");
+
+ arp = (struct arp_hdr *)ip;
+ if (len < ARP_HDR_SIZE) {
+ printf("bad length %d < %d\n", len, ARP_HDR_SIZE);
+ return;
+ }
+ if (ntohs(arp->ar_hrd) != ARP_ETHER)
+ return;
+ if (ntohs(arp->ar_pro) != PROT_IP)
+ return;
+ if (arp->ar_hln != ARP_HLEN)
+ return;
+ if (arp->ar_pln != ARP_PLEN)
+ return;
+
+ if (NetOurIP == 0)
+ return;
+
+ if (NetReadIP(&arp->ar_tpa) != NetOurIP)
+ return;
+
+ switch (ntohs(arp->ar_op)) {
+ case ARPOP_REQUEST:
+ /* reply with our IP address */
+ debug_cond(DEBUG_DEV_PKT, "Got ARP REQUEST, return our IP\n");
+ pkt = (uchar *)et;
+ eth_hdr_size = net_update_ether(et, et->et_src, PROT_ARP);
+ pkt += eth_hdr_size;
+ arp->ar_op = htons(ARPOP_REPLY);
+ memcpy(&arp->ar_tha, &arp->ar_sha, ARP_HLEN);
+ NetCopyIP(&arp->ar_tpa, &arp->ar_spa);
+ memcpy(&arp->ar_sha, NetOurEther, ARP_HLEN);
+ NetCopyIP(&arp->ar_spa, &NetOurIP);
+
+#ifdef CONFIG_CMD_LINK_LOCAL
+ /*
+ * Work-around for brain-damaged Cisco equipment with
+ * arp-proxy enabled.
+ *
+ * If the requesting IP is not on our subnet, wait 5ms to
+ * reply to ARP request so that our reply will overwrite
+ * the arp-proxy's instead of the other way around.
+ */
+ if ((NetReadIP(&arp->ar_tpa) & NetOurSubnetMask) !=
+ (NetReadIP(&arp->ar_spa) & NetOurSubnetMask))
+ udelay(5000);
+#endif
+ NetSendPacket((uchar *)et, eth_hdr_size + ARP_HDR_SIZE);
+ return;
+
+ case ARPOP_REPLY: /* arp reply */
+ /* are we waiting for a reply */
+ if (!NetArpWaitPacketIP)
+ break;
+
+#ifdef CONFIG_KEEP_SERVERADDR
+ if (NetServerIP == NetArpWaitPacketIP) {
+ char buf[20];
+ sprintf(buf, "%pM", arp->ar_sha);
+ setenv("serveraddr", buf);
+ }
+#endif
+
+ reply_ip_addr = NetReadIP(&arp->ar_spa);
+
+ /* matched waiting packet's address */
+ if (reply_ip_addr == NetArpWaitReplyIP) {
+ debug_cond(DEBUG_DEV_PKT,
+ "Got ARP REPLY, set eth addr (%pM)\n",
+ arp->ar_data);
+
+ /* save address for later use */
+ if (NetArpWaitPacketMAC != NULL)
+ memcpy(NetArpWaitPacketMAC,
+ &arp->ar_sha, ARP_HLEN);
+
+ net_get_arp_handler()((uchar *)arp, 0, reply_ip_addr,
+ 0, len);
+
+ /* set the mac address in the waiting packet's header
+ and transmit it */
+ memcpy(((struct ethernet_hdr *)NetTxPacket)->et_dest,
+ &arp->ar_sha, ARP_HLEN);
+ NetSendPacket(NetTxPacket, NetArpWaitTxPacketSize);
+
+ /* no arp request pending now */
+ NetArpWaitPacketIP = 0;
+ NetArpWaitTxPacketSize = 0;
+ NetArpWaitPacketMAC = NULL;
+
+ }
+ return;
+ default:
+ debug("Unexpected ARP opcode 0x%x\n",
+ ntohs(arp->ar_op));
+ return;
+ }
+}
diff --git a/net/arp.h b/net/arp.h
new file mode 100644
index 0000000000..bfd57e0105
--- /dev/null
+++ b/net/arp.h
@@ -0,0 +1,30 @@
+/*
+ * Copied from Linux Monitor (LiMon) - Networking.
+ *
+ * Copyright 1994 - 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2002 Wolfgang Denk, wd@denx.de
+ */
+
+#ifndef __ARP_H__
+#define __ARP_H__
+
+#include <common.h>
+
+extern IPaddr_t NetArpWaitPacketIP;
+/* MAC address of waiting packet's destination */
+extern uchar *NetArpWaitPacketMAC;
+extern int NetArpWaitTxPacketSize;
+extern ulong NetArpWaitTimerStart;
+extern int NetArpWaitTry;
+
+void ArpInit(void);
+void ArpRequest(void);
+void arp_raw_request(IPaddr_t sourceIP, const uchar *targetEther,
+ IPaddr_t targetIP);
+void ArpTimeoutCheck(void);
+void ArpReceive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len);
+
+#endif /* __ARP_H__ */
diff --git a/net/bootp.c b/net/bootp.c
index 9e324769db..0f0867b1c4 100644
--- a/net/bootp.c
+++ b/net/bootp.c
@@ -12,39 +12,36 @@
#include <command.h>
#include <net.h>
#include "bootp.h"
+#include "net_rand.h"
#include "tftp.h"
#include "nfs.h"
#ifdef CONFIG_STATUS_LED
#include <status_led.h>
#endif
-#include <linux/compiler.h>
-#define BOOTP_VENDOR_MAGIC 0x63825363 /* RFC1048 Magic Cookie */
+#define BOOTP_VENDOR_MAGIC 0x63825363 /* RFC1048 Magic Cookie */
#define TIMEOUT 5000UL /* Milliseconds before trying BOOTP again */
#ifndef CONFIG_NET_RETRY_COUNT
-# define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
+# define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
#else
# define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
#endif
-#define PORT_BOOTPS 67 /* BOOTP server UDP port */
-#define PORT_BOOTPC 68 /* BOOTP client UDP port */
+#define PORT_BOOTPS 67 /* BOOTP server UDP port */
+#define PORT_BOOTPC 68 /* BOOTP client UDP port */
-#ifndef CONFIG_DHCP_MIN_EXT_LEN /* minimal length of extension list */
+#ifndef CONFIG_DHCP_MIN_EXT_LEN /* minimal length of extension list */
#define CONFIG_DHCP_MIN_EXT_LEN 64
#endif
ulong BootpID;
int BootpTry;
-#ifdef CONFIG_BOOTP_RANDOM_DELAY
-ulong seed1, seed2;
-#endif
#if defined(CONFIG_CMD_DHCP)
dhcp_state_t dhcp_state = INIT;
-unsigned long dhcp_leasetime = 0;
-IPaddr_t NetDHCPServerIP = 0;
+unsigned long dhcp_leasetime;
+IPaddr_t NetDHCPServerIP;
static void DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
unsigned len);
@@ -64,37 +61,29 @@ static char *dhcpmsg2str(int type)
}
}
#endif
-
-#if defined(CONFIG_BOOTP_VENDOREX)
-extern u8 *dhcp_vendorex_prep (u8 *e); /*rtn new e after add own opts. */
-extern u8 *dhcp_vendorex_proc (u8 *e); /*rtn next e if mine,else NULL */
-#endif
-
#endif
static int BootpCheckPkt(uchar *pkt, unsigned dest, unsigned src, unsigned len)
{
- Bootp_t *bp = (Bootp_t *) pkt;
+ struct Bootp_t *bp = (struct Bootp_t *) pkt;
int retval = 0;
if (dest != PORT_BOOTPC || src != PORT_BOOTPS)
retval = -1;
- else if (len < sizeof (Bootp_t) - OPT_SIZE)
+ else if (len < sizeof(struct Bootp_t) - OPT_FIELD_SIZE)
retval = -2;
else if (bp->bp_op != OP_BOOTREQUEST &&
- bp->bp_op != OP_BOOTREPLY &&
- bp->bp_op != DHCP_OFFER &&
- bp->bp_op != DHCP_ACK &&
- bp->bp_op != DHCP_NAK ) {
+ bp->bp_op != OP_BOOTREPLY &&
+ bp->bp_op != DHCP_OFFER &&
+ bp->bp_op != DHCP_ACK &&
+ bp->bp_op != DHCP_NAK)
retval = -3;
- }
else if (bp->bp_htype != HWT_ETHER)
retval = -4;
else if (bp->bp_hlen != HWL_ETHER)
retval = -5;
- else if (NetReadLong((ulong*)&bp->bp_id) != BootpID) {
+ else if (NetReadLong((ulong *)&bp->bp_id) != BootpID)
retval = -6;
- }
debug("Filtering pkt = %d\n", retval);
@@ -104,19 +93,19 @@ static int BootpCheckPkt(uchar *pkt, unsigned dest, unsigned src, unsigned len)
/*
* Copy parameters of interest from BOOTP_REPLY/DHCP_OFFER packet
*/
-static void BootpCopyNetParams(Bootp_t *bp)
+static void BootpCopyNetParams(struct Bootp_t *bp)
{
- __maybe_unused IPaddr_t tmp_ip;
-
- NetCopyIP(&NetOurIP, &bp->bp_yiaddr);
#if !defined(CONFIG_BOOTP_SERVERIP)
+ IPaddr_t tmp_ip;
+
NetCopyIP(&tmp_ip, &bp->bp_siaddr);
if (tmp_ip != 0)
NetCopyIP(&NetServerIP, &bp->bp_siaddr);
- memcpy (NetServerEther, ((Ethernet_t *)NetRxPacket)->et_src, 6);
+ memcpy(NetServerEther, ((struct ethernet_hdr *)NetRxPacket)->et_src, 6);
#endif
+ NetCopyIP(&NetOurIP, &bp->bp_yiaddr);
if (strlen(bp->bp_file) > 0)
- copy_filename (BootFile, bp->bp_file, sizeof(BootFile));
+ copy_filename(BootFile, bp->bp_file, sizeof(BootFile));
debug("Bootfile: %s\n", BootFile);
@@ -124,97 +113,95 @@ static void BootpCopyNetParams(Bootp_t *bp)
* don't delete exising entry when BOOTP / DHCP reply does
* not contain a new value
*/
- if (*BootFile) {
- setenv ("bootfile", BootFile);
- }
+ if (*BootFile)
+ setenv("bootfile", BootFile);
}
-static int truncate_sz (const char *name, int maxlen, int curlen)
+static int truncate_sz(const char *name, int maxlen, int curlen)
{
if (curlen >= maxlen) {
- printf("*** WARNING: %s is too long (%d - max: %d) - truncated\n",
- name, curlen, maxlen);
+ printf("*** WARNING: %s is too long (%d - max: %d)"
+ " - truncated\n", name, curlen, maxlen);
curlen = maxlen - 1;
}
- return (curlen);
+ return curlen;
}
#if !defined(CONFIG_CMD_DHCP)
-static void BootpVendorFieldProcess (u8 * ext)
+static void BootpVendorFieldProcess(u8 *ext)
{
int size = *(ext + 1);
debug("[BOOTP] Processing extension %d... (%d bytes)\n", *ext,
- *(ext + 1));
+ *(ext + 1));
NetBootFileSize = 0;
switch (*ext) {
/* Fixed length fields */
- case 1: /* Subnet mask */
+ case 1: /* Subnet mask */
if (NetOurSubnetMask == 0)
- NetCopyIP (&NetOurSubnetMask, (IPaddr_t *) (ext + 2));
+ NetCopyIP(&NetOurSubnetMask, (IPaddr_t *) (ext + 2));
break;
- case 2: /* Time offset - Not yet supported */
+ case 2: /* Time offset - Not yet supported */
break;
/* Variable length fields */
- case 3: /* Gateways list */
- if (NetOurGatewayIP == 0) {
- NetCopyIP (&NetOurGatewayIP, (IPaddr_t *) (ext + 2));
- }
+ case 3: /* Gateways list */
+ if (NetOurGatewayIP == 0)
+ NetCopyIP(&NetOurGatewayIP, (IPaddr_t *) (ext + 2));
break;
- case 4: /* Time server - Not yet supported */
+ case 4: /* Time server - Not yet supported */
break;
- case 5: /* IEN-116 name server - Not yet supported */
+ case 5: /* IEN-116 name server - Not yet supported */
break;
case 6:
- if (NetOurDNSIP == 0) {
- NetCopyIP (&NetOurDNSIP, (IPaddr_t *) (ext + 2));
- }
+ if (NetOurDNSIP == 0)
+ NetCopyIP(&NetOurDNSIP, (IPaddr_t *) (ext + 2));
#if defined(CONFIG_BOOTP_DNS2)
- if ((NetOurDNS2IP == 0) && (size > 4)) {
- NetCopyIP (&NetOurDNS2IP, (IPaddr_t *) (ext + 2 + 4));
- }
+ if ((NetOurDNS2IP == 0) && (size > 4))
+ NetCopyIP(&NetOurDNS2IP, (IPaddr_t *) (ext + 2 + 4));
#endif
break;
- case 7: /* Log server - Not yet supported */
+ case 7: /* Log server - Not yet supported */
break;
- case 8: /* Cookie/Quote server - Not yet supported */
+ case 8: /* Cookie/Quote server - Not yet supported */
break;
- case 9: /* LPR server - Not yet supported */
+ case 9: /* LPR server - Not yet supported */
break;
- case 10: /* Impress server - Not yet supported */
+ case 10: /* Impress server - Not yet supported */
break;
- case 11: /* RPL server - Not yet supported */
+ case 11: /* RPL server - Not yet supported */
break;
- case 12: /* Host name */
+ case 12: /* Host name */
if (NetOurHostName[0] == 0) {
- size = truncate_sz ("Host Name", sizeof (NetOurHostName), size);
- memcpy (&NetOurHostName, ext + 2, size);
+ size = truncate_sz("Host Name",
+ sizeof(NetOurHostName), size);
+ memcpy(&NetOurHostName, ext + 2, size);
NetOurHostName[size] = 0;
}
break;
- case 13: /* Boot file size */
+ case 13: /* Boot file size */
if (size == 2)
- NetBootFileSize = ntohs (*(ushort *) (ext + 2));
+ NetBootFileSize = ntohs(*(ushort *) (ext + 2));
else if (size == 4)
- NetBootFileSize = ntohl (*(ulong *) (ext + 2));
+ NetBootFileSize = ntohl(*(ulong *) (ext + 2));
break;
- case 14: /* Merit dump file - Not yet supported */
+ case 14: /* Merit dump file - Not yet supported */
break;
- case 15: /* Domain name - Not yet supported */
+ case 15: /* Domain name - Not yet supported */
break;
- case 16: /* Swap server - Not yet supported */
+ case 16: /* Swap server - Not yet supported */
break;
- case 17: /* Root path */
+ case 17: /* Root path */
if (NetOurRootPath[0] == 0) {
- size = truncate_sz ("Root Path", sizeof (NetOurRootPath), size);
- memcpy (&NetOurRootPath, ext + 2, size);
+ size = truncate_sz("Root Path",
+ sizeof(NetOurRootPath), size);
+ memcpy(&NetOurRootPath, ext + 2, size);
NetOurRootPath[size] = 0;
}
break;
- case 18: /* Extension path - Not yet supported */
+ case 18: /* Extension path - Not yet supported */
/*
* This can be used to send the information of the
* vendor area in another file that the client can
@@ -222,10 +209,11 @@ static void BootpVendorFieldProcess (u8 * ext)
*/
break;
/* IP host layer fields */
- case 40: /* NIS Domain name */
+ case 40: /* NIS Domain name */
if (NetOurNISDomain[0] == 0) {
- size = truncate_sz ("NIS Domain Name", sizeof (NetOurNISDomain), size);
- memcpy (&NetOurNISDomain, ext + 2, size);
+ size = truncate_sz("NIS Domain Name",
+ sizeof(NetOurNISDomain), size);
+ memcpy(&NetOurNISDomain, ext + 2, size);
NetOurNISDomain[size] = 0;
}
break;
@@ -235,7 +223,7 @@ static void BootpVendorFieldProcess (u8 * ext)
break;
#endif
/* Application layer fields */
- case 43: /* Vendor specific info - Not yet supported */
+ case 43: /* Vendor specific info - Not yet supported */
/*
* Binary information to exchange specific
* product information.
@@ -245,7 +233,7 @@ static void BootpVendorFieldProcess (u8 * ext)
}
}
-static void BootpVendorProcess (u8 * ext, int size)
+static void BootpVendorProcess(u8 *ext, int size)
{
u8 *end = ext + size;
@@ -259,11 +247,11 @@ static void BootpVendorProcess (u8 * ext, int size)
ext += ext[1] + 2;
if (ext <= end)
- BootpVendorFieldProcess (opt);
+ BootpVendorFieldProcess(opt);
}
}
- debug("[BOOTP] Received fields: \n");
+ debug("[BOOTP] Received fields:\n");
if (NetOurSubnetMask)
debug("NetOurSubnetMask : %pI4\n", &NetOurSubnetMask);
@@ -298,27 +286,28 @@ static void
BootpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
unsigned len)
{
- Bootp_t *bp;
+ struct Bootp_t *bp;
debug("got BOOTP packet (src=%d, dst=%d, len=%d want_len=%zu)\n",
- src, dest, len, sizeof (Bootp_t));
+ src, dest, len, sizeof(struct Bootp_t));
- bp = (Bootp_t *)pkt;
+ bp = (struct Bootp_t *)pkt;
- if (BootpCheckPkt(pkt, dest, src, len)) /* Filter out pkts we don't want */
+ /* Filter out pkts we don't want */
+ if (BootpCheckPkt(pkt, dest, src, len))
return;
/*
* Got a good BOOTP reply. Copy the data into our variables.
*/
#ifdef CONFIG_STATUS_LED
- status_led_set (STATUS_LED_BOOT, STATUS_LED_OFF);
+ status_led_set(STATUS_LED_BOOT, STATUS_LED_OFF);
#endif
BootpCopyNetParams(bp); /* Store net parameters from reply */
/* Retrieve extended information (we must parse the vendor area) */
- if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
+ if (NetReadLong((ulong *)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
BootpVendorProcess((uchar *)&bp->bp_vend[4], len);
NetSetTimeout(0, (thand_f *)0);
@@ -337,11 +326,16 @@ static void
BootpTimeout(void)
{
if (BootpTry >= TIMEOUT_COUNT) {
- puts ("\nRetry count exceeded; starting again\n");
- NetStartAgain ();
+#ifdef CONFIG_BOOTP_MAY_FAIL
+ puts("\nRetry count exceeded\n");
+ NetSetState(NETLOOP_FAIL);
+#else
+ puts("\nRetry count exceeded; starting again\n");
+ NetStartAgain();
+#endif
} else {
- NetSetTimeout (TIMEOUT, BootpTimeout);
- BootpRequest ();
+ NetSetTimeout(TIMEOUT, BootpTimeout);
+ BootpRequest();
}
}
@@ -349,7 +343,8 @@ BootpTimeout(void)
* Initialize BOOTP extension fields in the request.
*/
#if defined(CONFIG_CMD_DHCP)
-static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t RequestedIP)
+static int DhcpExtended(u8 *e, int message_type, IPaddr_t ServerID,
+ IPaddr_t RequestedIP)
{
u8 *start = e;
u8 *cnt;
@@ -377,11 +372,11 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
*e++ = 57; /* Maximum DHCP Message Size */
*e++ = 2;
- *e++ = (576 - 312 + OPT_SIZE) >> 8;
- *e++ = (576 - 312 + OPT_SIZE) & 0xff;
+ *e++ = (576 - 312 + OPT_FIELD_SIZE) >> 8;
+ *e++ = (576 - 312 + OPT_FIELD_SIZE) & 0xff;
if (ServerID) {
- int tmp = ntohl (ServerID);
+ int tmp = ntohl(ServerID);
*e++ = 54; /* ServerID */
*e++ = 4;
@@ -392,7 +387,7 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
}
if (RequestedIP) {
- int tmp = ntohl (RequestedIP);
+ int tmp = ntohl(RequestedIP);
*e++ = 50; /* Requested IP */
*e++ = 4;
@@ -402,12 +397,13 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
*e++ = tmp & 0xff;
}
#if defined(CONFIG_BOOTP_SEND_HOSTNAME)
- if ((hostname = getenv ("hostname"))) {
- int hostnamelen = strlen (hostname);
+ hostname = getenv("hostname");
+ if (hostname) {
+ int hostnamelen = strlen(hostname);
*e++ = 12; /* Hostname */
*e++ = hostnamelen;
- memcpy (e, hostname, hostnamelen);
+ memcpy(e, hostname, hostnamelen);
e += hostnamelen;
}
#endif
@@ -448,7 +444,8 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
#endif
#if defined(CONFIG_BOOTP_VENDOREX)
- if ((x = dhcp_vendorex_prep (e)))
+ x = dhcp_vendorex_prep(e);
+ if (x)
return x - start;
#endif
@@ -508,9 +505,9 @@ static int DhcpExtended (u8 * e, int message_type, IPaddr_t ServerID, IPaddr_t R
#else
/*
- * Warning: no field size check - change CONFIG_BOOTP_* at your own risk!
+ * Warning: no field size check - change CONFIG_BOOTP_* at your own risk!
*/
-static int BootpExtended (u8 * e)
+static int BootpExtended(u8 *e)
{
u8 *start = e;
@@ -526,8 +523,8 @@ static int BootpExtended (u8 * e)
*e++ = 57; /* Maximum DHCP Message Size */
*e++ = 2;
- *e++ = (576 - 312 + OPT_SIZE) >> 16;
- *e++ = (576 - 312 + OPT_SIZE) & 0xff;
+ *e++ = (576 - 312 + OPT_FIELD_SIZE) >> 16;
+ *e++ = (576 - 312 + OPT_FIELD_SIZE) & 0xff;
#endif
#if defined(CONFIG_BOOTP_SUBNETMASK)
@@ -584,11 +581,15 @@ static int BootpExtended (u8 * e)
#endif
void
-BootpRequest (void)
+BootpRequest(void)
{
- volatile uchar *pkt, *iphdr;
- Bootp_t *bp;
- int ext_len, pktlen, iplen;
+ uchar *pkt, *iphdr;
+ struct Bootp_t *bp;
+ int extlen, pktlen, iplen;
+ int eth_hdr_size;
+#ifdef CONFIG_BOOTP_RANDOM_DELAY
+ ulong i, rand_ms;
+#endif
bootstage_mark_name(BOOTSTAGE_ID_BOOTP_START, "bootp_start");
#if defined(CONFIG_CMD_DHCP)
@@ -596,82 +597,40 @@ BootpRequest (void)
#endif
#ifdef CONFIG_BOOTP_RANDOM_DELAY /* Random BOOTP delay */
- unsigned char bi_enetaddr[6];
- int reg;
- ulong tst1, tst2, sum, m_mask, m_value = 0;
-
- if (BootpTry ==0) {
- /* get our mac */
- eth_getenv_enetaddr("ethaddr", bi_enetaddr);
-
- debug("BootpRequest => Our Mac: ");
- for (reg=0; reg<6; reg++)
- debug("%x%c", bi_enetaddr[reg], reg==5 ? '\n' : ':');
-
- /* Mac-Manipulation 2 get seed1 */
- tst1=0;
- tst2=0;
- for (reg=2; reg<6; reg++) {
- tst1 = tst1 << 8;
- tst1 = tst1 | bi_enetaddr[reg];
- }
- for (reg=0; reg<2; reg++) {
- tst2 = tst2 | bi_enetaddr[reg];
- tst2 = tst2 << 8;
- }
-
- seed1 = tst1^tst2;
-
- /* Mirror seed1*/
- m_mask=0x1;
- for (reg=1;reg<=32;reg++) {
- m_value |= (m_mask & seed1);
- seed1 = seed1 >> 1;
- m_value = m_value << 1;
- }
- seed1 = m_value;
- seed2 = 0xB78D0945;
- }
-
- /* Random Number Generator */
+ if (BootpTry == 0)
+ srand_mac();
- for (reg=0;reg<=0;reg++) {
- sum = seed1 + seed2;
- if (sum < seed1 || sum < seed2)
- sum++;
- seed2 = seed1;
- seed1 = sum;
+ if (BootpTry <= 2) /* Start with max 1024 * 1ms */
+ rand_ms = rand() >> (22 - BootpTry);
+ else /* After 3rd BOOTP request max 8192 * 1ms */
+ rand_ms = rand() >> 19;
- if (BootpTry<=2) { /* Start with max 1024 * 1ms */
- sum = sum >> (22-BootpTry);
- } else { /*After 3rd BOOTP request max 8192 * 1ms */
- sum = sum >> 19;
- }
- }
-
- printf ("Random delay: %ld ms...\n", sum);
- for (reg=0; reg <sum; reg++) {
+ printf("Random delay: %ld ms...\n", rand_ms);
+ for (i = 0; i < rand_ms; i++)
udelay(1000); /*Wait 1ms*/
- }
+
#endif /* CONFIG_BOOTP_RANDOM_DELAY */
printf("BOOTP broadcast %d\n", ++BootpTry);
pkt = NetTxPacket;
- memset ((void*)pkt, 0, PKTSIZE);
+ memset((void *)pkt, 0, PKTSIZE);
- pkt += NetSetEther(pkt, NetBcastAddr, PROT_IP);
+ eth_hdr_size = NetSetEther(pkt, NetBcastAddr, PROT_IP);
+ pkt += eth_hdr_size;
/*
- * Next line results in incorrect packet size being transmitted, resulting
- * in errors in some DHCP servers, reporting missing bytes. Size must be
- * set in packet header after extension length has been determined.
+ * Next line results in incorrect packet size being transmitted,
+ * resulting in errors in some DHCP servers, reporting missing bytes.
+ * Size must be set in packet header after extension length has been
+ * determined.
* C. Hallinan, DS4.COM, Inc.
*/
- /* NetSetIP(pkt, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, sizeof (Bootp_t)); */
- iphdr = pkt; /* We need this later for NetSetIP() */
- pkt += IP_HDR_SIZE;
+ /* net_set_udp_header(pkt, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC,
+ sizeof (struct Bootp_t)); */
+ iphdr = pkt; /* We need this later for net_set_udp_header() */
+ pkt += IP_UDP_HDR_SIZE;
- bp = (Bootp_t *)pkt;
+ bp = (struct Bootp_t *)pkt;
bp->bp_op = OP_BOOTREQUEST;
bp->bp_htype = HWT_ETHER;
bp->bp_hlen = HWL_ETHER;
@@ -681,14 +640,14 @@ BootpRequest (void)
NetWriteIP(&bp->bp_yiaddr, 0);
NetWriteIP(&bp->bp_siaddr, 0);
NetWriteIP(&bp->bp_giaddr, 0);
- memcpy (bp->bp_chaddr, NetOurEther, 6);
- copy_filename (bp->bp_file, BootFile, sizeof(bp->bp_file));
+ memcpy(bp->bp_chaddr, NetOurEther, 6);
+ copy_filename(bp->bp_file, BootFile, sizeof(bp->bp_file));
/* Request additional information from the BOOTP/DHCP server */
#if defined(CONFIG_CMD_DHCP)
- ext_len = DhcpExtended((u8 *)bp->bp_vend, DHCP_DISCOVER, 0, 0);
+ extlen = DhcpExtended((u8 *)bp->bp_vend, DHCP_DISCOVER, 0, 0);
#else
- ext_len = BootpExtended((u8 *)bp->bp_vend);
+ extlen = BootpExtended((u8 *)bp->bp_vend);
#endif
/*
@@ -707,22 +666,22 @@ BootpRequest (void)
* Calculate proper packet lengths taking into account the
* variable size of the options field
*/
- pktlen = ((int)(pkt-NetTxPacket)) + BOOTP_HDR_SIZE - sizeof(bp->bp_vend) + ext_len;
- iplen = BOOTP_HDR_SIZE - sizeof(bp->bp_vend) + ext_len;
- NetSetIP(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen);
+ iplen = BOOTP_HDR_SIZE - OPT_FIELD_SIZE + extlen;
+ pktlen = eth_hdr_size + IP_UDP_HDR_SIZE + iplen;
+ net_set_udp_header(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen);
NetSetTimeout(SELECT_TIMEOUT, BootpTimeout);
#if defined(CONFIG_CMD_DHCP)
dhcp_state = SELECTING;
- NetSetHandler(DhcpHandler);
+ net_set_udp_handler(DhcpHandler);
#else
- NetSetHandler(BootpHandler);
+ net_set_udp_handler(BootpHandler);
#endif
NetSendPacket(NetTxPacket, pktlen);
}
#if defined(CONFIG_CMD_DHCP)
-static void DhcpOptionsProcess (uchar * popt, Bootp_t *bp)
+static void DhcpOptionsProcess(uchar *popt, struct Bootp_t *bp)
{
uchar *end = popt + BOOTP_HDR_SIZE;
int oplen, size;
@@ -734,50 +693,51 @@ static void DhcpOptionsProcess (uchar * popt, Bootp_t *bp)
oplen = *(popt + 1);
switch (*popt) {
case 1:
- NetCopyIP (&NetOurSubnetMask, (popt + 2));
+ NetCopyIP(&NetOurSubnetMask, (popt + 2));
break;
#if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_TIMEOFFSET)
case 2: /* Time offset */
to_ptr = &NetTimeOffset;
- NetCopyLong ((ulong *)to_ptr, (ulong *)(popt + 2));
- NetTimeOffset = ntohl (NetTimeOffset);
+ NetCopyLong((ulong *)to_ptr, (ulong *)(popt + 2));
+ NetTimeOffset = ntohl(NetTimeOffset);
break;
#endif
case 3:
- NetCopyIP (&NetOurGatewayIP, (popt + 2));
+ NetCopyIP(&NetOurGatewayIP, (popt + 2));
break;
case 6:
- NetCopyIP (&NetOurDNSIP, (popt + 2));
+ NetCopyIP(&NetOurDNSIP, (popt + 2));
#if defined(CONFIG_BOOTP_DNS2)
- if (*(popt + 1) > 4) {
- NetCopyIP (&NetOurDNS2IP, (popt + 2 + 4));
- }
+ if (*(popt + 1) > 4)
+ NetCopyIP(&NetOurDNS2IP, (popt + 2 + 4));
#endif
break;
case 12:
- size = truncate_sz ("Host Name", sizeof (NetOurHostName), oplen);
- memcpy (&NetOurHostName, popt + 2, size);
+ size = truncate_sz("Host Name",
+ sizeof(NetOurHostName), oplen);
+ memcpy(&NetOurHostName, popt + 2, size);
NetOurHostName[size] = 0;
break;
case 15: /* Ignore Domain Name Option */
break;
case 17:
- size = truncate_sz ("Root Path", sizeof (NetOurRootPath), oplen);
- memcpy (&NetOurRootPath, popt + 2, size);
+ size = truncate_sz("Root Path",
+ sizeof(NetOurRootPath), oplen);
+ memcpy(&NetOurRootPath, popt + 2, size);
NetOurRootPath[size] = 0;
break;
#if defined(CONFIG_CMD_SNTP) && defined(CONFIG_BOOTP_NTPSERVER)
case 42: /* NTP server IP */
- NetCopyIP (&NetNtpServerIP, (popt + 2));
+ NetCopyIP(&NetNtpServerIP, (popt + 2));
break;
#endif
case 51:
- NetCopyLong (&dhcp_leasetime, (ulong *) (popt + 2));
+ NetCopyLong(&dhcp_leasetime, (ulong *) (popt + 2));
break;
case 53: /* Ignore Message Type Option */
break;
case 54:
- NetCopyIP (&NetDHCPServerIP, (popt + 2));
+ NetCopyIP(&NetDHCPServerIP, (popt + 2));
break;
case 58: /* Ignore Renewal Time Option */
break;
@@ -792,7 +752,7 @@ static void DhcpOptionsProcess (uchar * popt, Bootp_t *bp)
* pass the bootp packet pointer into here as the
* second arg
*/
- size = truncate_sz ("Opt Boot File",
+ size = truncate_sz("Opt Boot File",
sizeof(bp->bp_file),
oplen);
if (bp->bp_file[0] == '\0' && size > 0) {
@@ -813,10 +773,11 @@ static void DhcpOptionsProcess (uchar * popt, Bootp_t *bp)
break;
default:
#if defined(CONFIG_BOOTP_VENDOREX)
- if (dhcp_vendorex_proc (popt))
+ if (dhcp_vendorex_proc(popt))
break;
#endif
- printf ("*** Unhandled DHCP Option in OFFER/ACK: %d\n", *popt);
+ printf("*** Unhandled DHCP Option in OFFER/ACK:"
+ " %d\n", *popt);
break;
}
popt += oplen + 2; /* Process next option */
@@ -825,42 +786,44 @@ static void DhcpOptionsProcess (uchar * popt, Bootp_t *bp)
static int DhcpMessageType(unsigned char *popt)
{
- if (NetReadLong((ulong*)popt) != htonl(BOOTP_VENDOR_MAGIC))
+ if (NetReadLong((ulong *)popt) != htonl(BOOTP_VENDOR_MAGIC))
return -1;
popt += 4;
- while ( *popt != 0xff ) {
- if ( *popt == 53 ) /* DHCP Message Type */
+ while (*popt != 0xff) {
+ if (*popt == 53) /* DHCP Message Type */
return *(popt + 2);
popt += *(popt + 1) + 2; /* Scan through all options */
}
return -1;
}
-static void DhcpSendRequestPkt(Bootp_t *bp_offer)
+static void DhcpSendRequestPkt(struct Bootp_t *bp_offer)
{
- volatile uchar *pkt, *iphdr;
- Bootp_t *bp;
+ uchar *pkt, *iphdr;
+ struct Bootp_t *bp;
int pktlen, iplen, extlen;
+ int eth_hdr_size;
IPaddr_t OfferedIP;
debug("DhcpSendRequestPkt: Sending DHCPREQUEST\n");
pkt = NetTxPacket;
- memset ((void*)pkt, 0, PKTSIZE);
+ memset((void *)pkt, 0, PKTSIZE);
- pkt += NetSetEther(pkt, NetBcastAddr, PROT_IP);
+ eth_hdr_size = NetSetEther(pkt, NetBcastAddr, PROT_IP);
+ pkt += eth_hdr_size;
- iphdr = pkt; /* We'll need this later to set proper pkt size */
- pkt += IP_HDR_SIZE;
+ iphdr = pkt; /* We'll need this later to set proper pkt size */
+ pkt += IP_UDP_HDR_SIZE;
- bp = (Bootp_t *)pkt;
+ bp = (struct Bootp_t *)pkt;
bp->bp_op = OP_BOOTREQUEST;
bp->bp_htype = HWT_ETHER;
bp->bp_hlen = HWL_ETHER;
bp->bp_hops = 0;
bp->bp_secs = htons(get_timer(0) / 1000);
- /* Do not set the client IP, your IP, or server IP yet, since it hasn't been ACK'ed by
- * the server yet */
+ /* Do not set the client IP, your IP, or server IP yet, since it
+ * hasn't been ACK'ed by the server yet */
/*
* RFC3046 requires Relay Agents to discard packets with
@@ -868,7 +831,7 @@ static void DhcpSendRequestPkt(Bootp_t *bp_offer)
*/
NetWriteIP(&bp->bp_giaddr, 0);
- memcpy (bp->bp_chaddr, NetOurEther, 6);
+ memcpy(bp->bp_chaddr, NetOurEther, 6);
/*
* ID is the id of the OFFER packet
@@ -882,16 +845,17 @@ static void DhcpSendRequestPkt(Bootp_t *bp_offer)
/* Copy offered IP into the parameters request list */
NetCopyIP(&OfferedIP, &bp_offer->bp_yiaddr);
- extlen = DhcpExtended((u8 *)bp->bp_vend, DHCP_REQUEST, NetDHCPServerIP, OfferedIP);
+ extlen = DhcpExtended((u8 *)bp->bp_vend, DHCP_REQUEST,
+ NetDHCPServerIP, OfferedIP);
- pktlen = ((int)(pkt-NetTxPacket)) + BOOTP_HDR_SIZE - sizeof(bp->bp_vend) + extlen;
- iplen = BOOTP_HDR_SIZE - sizeof(bp->bp_vend) + extlen;
- NetSetIP(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen);
+ iplen = BOOTP_HDR_SIZE - OPT_FIELD_SIZE + extlen;
+ pktlen = eth_hdr_size + IP_UDP_HDR_SIZE + iplen;
+ net_set_udp_header(iphdr, 0xFFFFFFFFL, PORT_BOOTPS, PORT_BOOTPC, iplen);
- debug("Transmitting DHCPREQUEST packet: len = %d\n", pktlen);
#ifdef CONFIG_BOOTP_DHCP_REQUEST_DELAY
udelay(CONFIG_BOOTP_DHCP_REQUEST_DELAY);
#endif /* CONFIG_BOOTP_DHCP_REQUEST_DELAY */
+ debug("Transmitting DHCPREQUEST packet: len = %d\n", pktlen);
NetSendPacket(NetTxPacket, pktlen);
}
@@ -902,36 +866,38 @@ static void
DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
unsigned len)
{
- Bootp_t *bp = (Bootp_t *)pkt;
+ struct Bootp_t *bp = (struct Bootp_t *)pkt;
debug("DHCPHandler: got packet: (src=%d, dst=%d, len=%d) state: %d\n",
src, dest, len, dhcp_state);
- if (BootpCheckPkt(pkt, dest, src, len)) /* Filter out pkts we don't want */
+ /* Filter out pkts we don't want */
+ if (BootpCheckPkt(pkt, dest, src, len))
return;
- debug("DHCPHandler: got DHCP packet: (src=%d, dst=%d, len=%d) state: %d\n",
- src, dest, len, dhcp_state);
+ debug("DHCPHandler: got DHCP packet: (src=%d, dst=%d, len=%d) state:"
+ " %d\n", src, dest, len, dhcp_state);
switch (dhcp_state) {
case SELECTING:
/*
* Wait an appropriate time for any potential DHCPOFFER packets
- * to arrive. Then select one, and generate DHCPREQUEST response.
- * If filename is in format we recognize, assume it is a valid
- * OFFER from a server we want.
+ * to arrive. Then select one, and generate DHCPREQUEST
+ * response. If filename is in format we recognize, assume it
+ * is a valid OFFER from a server we want.
*/
debug("DHCP: state=SELECTING bp_file: \"%s\"\n", bp->bp_file);
#ifdef CONFIG_SYS_BOOTFILE_PREFIX
if (strncmp(bp->bp_file,
CONFIG_SYS_BOOTFILE_PREFIX,
- strlen(CONFIG_SYS_BOOTFILE_PREFIX)) == 0 ) {
+ strlen(CONFIG_SYS_BOOTFILE_PREFIX)) == 0) {
#endif /* CONFIG_SYS_BOOTFILE_PREFIX */
debug("TRANSITIONING TO REQUESTING STATE\n");
dhcp_state = REQUESTING;
- if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
+ if (NetReadLong((ulong *)&bp->bp_vend[0]) ==
+ htonl(BOOTP_VENDOR_MAGIC))
DhcpOptionsProcess((u8 *)&bp->bp_vend[4], bp);
NetSetTimeout(TIMEOUT, BootpTimeout);
@@ -945,14 +911,17 @@ DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
case REQUESTING:
debug("DHCP State: REQUESTING\n");
- if ( DhcpMessageType((u8 *)bp->bp_vend) == DHCP_ACK ) {
- if (NetReadLong((ulong*)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
+ if (DhcpMessageType((u8 *)bp->bp_vend) == DHCP_ACK) {
+ if (NetReadLong((ulong *)&bp->bp_vend[0]) ==
+ htonl(BOOTP_VENDOR_MAGIC))
DhcpOptionsProcess((u8 *)&bp->bp_vend[4], bp);
- BootpCopyNetParams(bp); /* Store net params from reply */
+ /* Store net params from reply */
+ BootpCopyNetParams(bp);
dhcp_state = BOUND;
- printf ("DHCP client bound to address %pI4\n", &NetOurIP);
+ printf("DHCP client bound to address %pI4\n",
+ &NetOurIP);
bootstage_mark_name(BOOTSTAGE_ID_BOOTP_STOP,
- "bootp_stop");
+ "bootp_stop");
net_auto_load();
return;
@@ -962,7 +931,7 @@ DhcpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
/* DHCP client bound to address */
break;
default:
- puts ("DHCP: INVALID STATE\n");
+ puts("DHCP: INVALID STATE\n");
break;
}
diff --git a/net/bootp.h b/net/bootp.h
index 50625abea1..ecbcc4d509 100644
--- a/net/bootp.h
+++ b/net/bootp.h
@@ -10,7 +10,7 @@
#define __BOOTP_H__
#ifndef __NET_H__
-#include <net.h>
+#include <net.h>
#endif /* __NET_H__ */
/**********************************************************************/
@@ -19,36 +19,39 @@
* BOOTP header.
*/
#if defined(CONFIG_CMD_DHCP)
-#define OPT_SIZE 312 /* Minimum DHCP Options size per RFC2131 - results in 576 byte pkt */
+/* Minimum DHCP Options size per RFC2131 - results in 576 byte pkt */
+#define OPT_FIELD_SIZE 312
+#if defined(CONFIG_BOOTP_VENDOREX)
+extern u8 *dhcp_vendorex_prep(u8 *e); /*rtn new e after add own opts. */
+extern u8 *dhcp_vendorex_proc(u8 *e); /*rtn next e if mine,else NULL */
+#endif
#else
-#define OPT_SIZE 64
+#define OPT_FIELD_SIZE 64
#endif
-typedef struct
-{
- uchar bp_op; /* Operation */
+struct Bootp_t {
+ uchar bp_op; /* Operation */
# define OP_BOOTREQUEST 1
# define OP_BOOTREPLY 2
- uchar bp_htype; /* Hardware type */
+ uchar bp_htype; /* Hardware type */
# define HWT_ETHER 1
- uchar bp_hlen; /* Hardware address length */
+ uchar bp_hlen; /* Hardware address length */
# define HWL_ETHER 6
- uchar bp_hops; /* Hop count (gateway thing) */
- ulong bp_id; /* Transaction ID */
- ushort bp_secs; /* Seconds since boot */
- ushort bp_spare1; /* Alignment */
- IPaddr_t bp_ciaddr; /* Client IP address */
- IPaddr_t bp_yiaddr; /* Your (client) IP address */
- IPaddr_t bp_siaddr; /* Server IP address */
- IPaddr_t bp_giaddr; /* Gateway IP address */
- uchar bp_chaddr[16]; /* Client hardware address */
- char bp_sname[64]; /* Server host name */
- char bp_file[128]; /* Boot file name */
- char bp_vend[OPT_SIZE]; /* Vendor information */
-} Bootp_t;
-
-#define BOOTP_HDR_SIZE sizeof (Bootp_t)
-#define BOOTP_SIZE (ETHER_HDR_SIZE + IP_HDR_SIZE + BOOTP_HDR_SIZE)
+ uchar bp_hops; /* Hop count (gateway thing) */
+ ulong bp_id; /* Transaction ID */
+ ushort bp_secs; /* Seconds since boot */
+ ushort bp_spare1; /* Alignment */
+ IPaddr_t bp_ciaddr; /* Client IP address */
+ IPaddr_t bp_yiaddr; /* Your (client) IP address */
+ IPaddr_t bp_siaddr; /* Server IP address */
+ IPaddr_t bp_giaddr; /* Gateway IP address */
+ uchar bp_chaddr[16]; /* Client hardware address */
+ char bp_sname[64]; /* Server host name */
+ char bp_file[128]; /* Boot file name */
+ char bp_vend[OPT_FIELD_SIZE]; /* Vendor information */
+};
+
+#define BOOTP_HDR_SIZE sizeof(struct Bootp_t)
/**********************************************************************/
/*
@@ -56,16 +59,13 @@ typedef struct
*/
/* bootp.c */
-extern ulong BootpID; /* ID of cur BOOTP request */
-extern char BootFile[128]; /* Boot file name */
+extern ulong BootpID; /* ID of cur BOOTP request */
+extern char BootFile[128]; /* Boot file name */
extern int BootpTry;
-#ifdef CONFIG_BOOTP_RANDOM_DELAY
-extern ulong seed1, seed2; /* seed for random BOOTP delay */
-#endif
/* Send a BOOTP request */
-extern void BootpRequest (void);
+extern void BootpRequest(void);
/****************** DHCP Support *********************/
extern void DhcpRequest(void);
diff --git a/net/cdp.c b/net/cdp.c
new file mode 100644
index 0000000000..3d9559eb3b
--- /dev/null
+++ b/net/cdp.c
@@ -0,0 +1,366 @@
+/*
+ * Copied from Linux Monitor (LiMon) - Networking.
+ *
+ * Copyright 1994 - 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2002 Wolfgang Denk, wd@denx.de
+ */
+
+#include <common.h>
+#include <net.h>
+#if defined(CONFIG_CDP_VERSION)
+#include <timestamp.h>
+#endif
+
+#include "cdp.h"
+
+/* Ethernet bcast address */
+const uchar NetCDPAddr[6] = { 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };
+
+#define CDP_DEVICE_ID_TLV 0x0001
+#define CDP_ADDRESS_TLV 0x0002
+#define CDP_PORT_ID_TLV 0x0003
+#define CDP_CAPABILITIES_TLV 0x0004
+#define CDP_VERSION_TLV 0x0005
+#define CDP_PLATFORM_TLV 0x0006
+#define CDP_NATIVE_VLAN_TLV 0x000a
+#define CDP_APPLIANCE_VLAN_TLV 0x000e
+#define CDP_TRIGGER_TLV 0x000f
+#define CDP_POWER_CONSUMPTION_TLV 0x0010
+#define CDP_SYSNAME_TLV 0x0014
+#define CDP_SYSOBJECT_TLV 0x0015
+#define CDP_MANAGEMENT_ADDRESS_TLV 0x0016
+
+#define CDP_TIMEOUT 250UL /* one packet every 250ms */
+
+static int CDPSeq;
+static int CDPOK;
+
+ushort CDPNativeVLAN;
+ushort CDPApplianceVLAN;
+
+static const uchar CDP_SNAP_hdr[8] = {
+ 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x0C, 0x20, 0x00 };
+
+static ushort
+CDP_compute_csum(const uchar *buff, ushort len)
+{
+ ushort csum;
+ int odd;
+ ulong result = 0;
+ ushort leftover;
+ ushort *p;
+
+ if (len > 0) {
+ odd = 1 & (ulong)buff;
+ if (odd) {
+ result = *buff << 8;
+ len--;
+ buff++;
+ }
+ while (len > 1) {
+ p = (ushort *)buff;
+ result += *p++;
+ buff = (uchar *)p;
+ if (result & 0x80000000)
+ result = (result & 0xFFFF) + (result >> 16);
+ len -= 2;
+ }
+ if (len) {
+ leftover = (signed short)(*(const signed char *)buff);
+ /*
+ * CISCO SUCKS big time! (and blows too):
+ * CDP uses the IP checksum algorithm with a twist;
+ * for the last byte it *sign* extends and sums.
+ */
+ result = (result & 0xffff0000) |
+ ((result + leftover) & 0x0000ffff);
+ }
+ while (result >> 16)
+ result = (result & 0xFFFF) + (result >> 16);
+
+ if (odd)
+ result = ((result >> 8) & 0xff) |
+ ((result & 0xff) << 8);
+ }
+
+ /* add up 16-bit and 17-bit words for 17+c bits */
+ result = (result & 0xffff) + (result >> 16);
+ /* add up 16-bit and 2-bit for 16+c bit */
+ result = (result & 0xffff) + (result >> 16);
+ /* add up carry.. */
+ result = (result & 0xffff) + (result >> 16);
+
+ /* negate */
+ csum = ~(ushort)result;
+
+ /* run time endian detection */
+ if (csum != htons(csum)) /* little endian */
+ csum = htons(csum);
+
+ return csum;
+}
+
+static int
+CDPSendTrigger(void)
+{
+ uchar *pkt;
+ ushort *s;
+ ushort *cp;
+ struct ethernet_hdr *et;
+ int len;
+ ushort chksum;
+#if defined(CONFIG_CDP_DEVICE_ID) || defined(CONFIG_CDP_PORT_ID) || \
+ defined(CONFIG_CDP_VERSION) || defined(CONFIG_CDP_PLATFORM)
+ char buf[32];
+#endif
+
+ pkt = NetTxPacket;
+ et = (struct ethernet_hdr *)pkt;
+
+ /* NOTE: trigger sent not on any VLAN */
+
+ /* form ethernet header */
+ memcpy(et->et_dest, NetCDPAddr, 6);
+ memcpy(et->et_src, NetOurEther, 6);
+
+ pkt += ETHER_HDR_SIZE;
+
+ /* SNAP header */
+ memcpy((uchar *)pkt, CDP_SNAP_hdr, sizeof(CDP_SNAP_hdr));
+ pkt += sizeof(CDP_SNAP_hdr);
+
+ /* CDP header */
+ *pkt++ = 0x02; /* CDP version 2 */
+ *pkt++ = 180; /* TTL */
+ s = (ushort *)pkt;
+ cp = s;
+ /* checksum (0 for later calculation) */
+ *s++ = htons(0);
+
+ /* CDP fields */
+#ifdef CONFIG_CDP_DEVICE_ID
+ *s++ = htons(CDP_DEVICE_ID_TLV);
+ *s++ = htons(CONFIG_CDP_DEVICE_ID);
+ sprintf(buf, CONFIG_CDP_DEVICE_ID_PREFIX "%pm", NetOurEther);
+ memcpy((uchar *)s, buf, 16);
+ s += 16 / 2;
+#endif
+
+#ifdef CONFIG_CDP_PORT_ID
+ *s++ = htons(CDP_PORT_ID_TLV);
+ memset(buf, 0, sizeof(buf));
+ sprintf(buf, CONFIG_CDP_PORT_ID, eth_get_dev_index());
+ len = strlen(buf);
+ if (len & 1) /* make it even */
+ len++;
+ *s++ = htons(len + 4);
+ memcpy((uchar *)s, buf, len);
+ s += len / 2;
+#endif
+
+#ifdef CONFIG_CDP_CAPABILITIES
+ *s++ = htons(CDP_CAPABILITIES_TLV);
+ *s++ = htons(8);
+ *(ulong *)s = htonl(CONFIG_CDP_CAPABILITIES);
+ s += 2;
+#endif
+
+#ifdef CONFIG_CDP_VERSION
+ *s++ = htons(CDP_VERSION_TLV);
+ memset(buf, 0, sizeof(buf));
+ strcpy(buf, CONFIG_CDP_VERSION);
+ len = strlen(buf);
+ if (len & 1) /* make it even */
+ len++;
+ *s++ = htons(len + 4);
+ memcpy((uchar *)s, buf, len);
+ s += len / 2;
+#endif
+
+#ifdef CONFIG_CDP_PLATFORM
+ *s++ = htons(CDP_PLATFORM_TLV);
+ memset(buf, 0, sizeof(buf));
+ strcpy(buf, CONFIG_CDP_PLATFORM);
+ len = strlen(buf);
+ if (len & 1) /* make it even */
+ len++;
+ *s++ = htons(len + 4);
+ memcpy((uchar *)s, buf, len);
+ s += len / 2;
+#endif
+
+#ifdef CONFIG_CDP_TRIGGER
+ *s++ = htons(CDP_TRIGGER_TLV);
+ *s++ = htons(8);
+ *(ulong *)s = htonl(CONFIG_CDP_TRIGGER);
+ s += 2;
+#endif
+
+#ifdef CONFIG_CDP_POWER_CONSUMPTION
+ *s++ = htons(CDP_POWER_CONSUMPTION_TLV);
+ *s++ = htons(6);
+ *s++ = htons(CONFIG_CDP_POWER_CONSUMPTION);
+#endif
+
+ /* length of ethernet packet */
+ len = (uchar *)s - ((uchar *)NetTxPacket + ETHER_HDR_SIZE);
+ et->et_protlen = htons(len);
+
+ len = ETHER_HDR_SIZE + sizeof(CDP_SNAP_hdr);
+ chksum = CDP_compute_csum((uchar *)NetTxPacket + len,
+ (uchar *)s - (NetTxPacket + len));
+ if (chksum == 0)
+ chksum = 0xFFFF;
+ *cp = htons(chksum);
+
+ NetSendPacket(NetTxPacket, (uchar *)s - NetTxPacket);
+ return 0;
+}
+
+static void
+CDPTimeout(void)
+{
+ CDPSeq++;
+
+ if (CDPSeq < 3) {
+ NetSetTimeout(CDP_TIMEOUT, CDPTimeout);
+ CDPSendTrigger();
+ return;
+ }
+
+ /* if not OK try again */
+ if (!CDPOK)
+ NetStartAgain();
+ else
+ net_set_state(NETLOOP_SUCCESS);
+}
+
+void cdp_receive(const uchar *pkt, unsigned len)
+{
+ const uchar *t;
+ const ushort *ss;
+ ushort type, tlen;
+ ushort vlan, nvlan;
+
+ /* minimum size? */
+ if (len < sizeof(CDP_SNAP_hdr) + 4)
+ goto pkt_short;
+
+ /* check for valid CDP SNAP header */
+ if (memcmp(pkt, CDP_SNAP_hdr, sizeof(CDP_SNAP_hdr)) != 0)
+ return;
+
+ pkt += sizeof(CDP_SNAP_hdr);
+ len -= sizeof(CDP_SNAP_hdr);
+
+ /* Version of CDP protocol must be >= 2 and TTL != 0 */
+ if (pkt[0] < 0x02 || pkt[1] == 0)
+ return;
+
+ /*
+ * if version is greater than 0x02 maybe we'll have a problem;
+ * output a warning
+ */
+ if (pkt[0] != 0x02)
+ printf("**WARNING: CDP packet received with a protocol version "
+ "%d > 2\n", pkt[0] & 0xff);
+
+ if (CDP_compute_csum(pkt, len) != 0)
+ return;
+
+ pkt += 4;
+ len -= 4;
+
+ vlan = htons(-1);
+ nvlan = htons(-1);
+ while (len > 0) {
+ if (len < 4)
+ goto pkt_short;
+
+ ss = (const ushort *)pkt;
+ type = ntohs(ss[0]);
+ tlen = ntohs(ss[1]);
+ if (tlen > len)
+ goto pkt_short;
+
+ pkt += tlen;
+ len -= tlen;
+
+ ss += 2; /* point ss to the data of the TLV */
+ tlen -= 4;
+
+ switch (type) {
+ case CDP_DEVICE_ID_TLV:
+ break;
+ case CDP_ADDRESS_TLV:
+ break;
+ case CDP_PORT_ID_TLV:
+ break;
+ case CDP_CAPABILITIES_TLV:
+ break;
+ case CDP_VERSION_TLV:
+ break;
+ case CDP_PLATFORM_TLV:
+ break;
+ case CDP_NATIVE_VLAN_TLV:
+ nvlan = *ss;
+ break;
+ case CDP_APPLIANCE_VLAN_TLV:
+ t = (const uchar *)ss;
+ while (tlen > 0) {
+ if (tlen < 3)
+ goto pkt_short;
+
+ ss = (const ushort *)(t + 1);
+
+#ifdef CONFIG_CDP_APPLIANCE_VLAN_TYPE
+ if (t[0] == CONFIG_CDP_APPLIANCE_VLAN_TYPE)
+ vlan = *ss;
+#else
+ /* XXX will this work; dunno */
+ vlan = ntohs(*ss);
+#endif
+ t += 3; tlen -= 3;
+ }
+ break;
+ case CDP_TRIGGER_TLV:
+ break;
+ case CDP_POWER_CONSUMPTION_TLV:
+ break;
+ case CDP_SYSNAME_TLV:
+ break;
+ case CDP_SYSOBJECT_TLV:
+ break;
+ case CDP_MANAGEMENT_ADDRESS_TLV:
+ break;
+ }
+ }
+
+ CDPApplianceVLAN = vlan;
+ CDPNativeVLAN = nvlan;
+
+ CDPOK = 1;
+ return;
+
+ pkt_short:
+ printf("** CDP packet is too short\n");
+ return;
+}
+
+void
+CDPStart(void)
+{
+ printf("Using %s device\n", eth_get_name());
+ CDPSeq = 0;
+ CDPOK = 0;
+
+ CDPNativeVLAN = htons(-1);
+ CDPApplianceVLAN = htons(-1);
+
+ NetSetTimeout(CDP_TIMEOUT, CDPTimeout);
+
+ CDPSendTrigger();
+}
diff --git a/net/cdp.h b/net/cdp.h
new file mode 100644
index 0000000000..ec7315af79
--- /dev/null
+++ b/net/cdp.h
@@ -0,0 +1,21 @@
+/*
+ * Copied from Linux Monitor (LiMon) - Networking.
+ *
+ * Copyright 1994 - 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2002 Wolfgang Denk, wd@denx.de
+ */
+
+#if defined(CONFIG_CMD_CDP)
+
+#ifndef __CDP_H__
+#define __CDP_H__
+
+void CDPStart(void);
+/* Process a received CDP packet */
+void cdp_receive(const uchar *pkt, unsigned len);
+
+#endif /* __CDP_H__ */
+#endif
diff --git a/net/dns.c b/net/dns.c
index 7a3f1f9768..ff9ddffc9d 100644
--- a/net/dns.c
+++ b/net/dns.c
@@ -45,7 +45,7 @@ DnsSend(void)
enum dns_query_type qtype = DNS_A_RECORD;
name = NetDNSResolve;
- pkt = p = (uchar *)(NetTxPacket + NetEthHdrSize() + IP_HDR_SIZE);
+ pkt = p = (uchar *)(NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE);
/* Prepare DNS packet header */
header = (struct header *) pkt;
@@ -98,7 +98,7 @@ static void
DnsTimeout(void)
{
puts("Timeout\n");
- NetState = NETLOOP_FAIL;
+ net_set_state(NETLOOP_FAIL);
}
static void
@@ -128,7 +128,7 @@ DnsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
/* Received 0 answers */
if (header->nanswers == 0) {
puts("DNS: host not found\n");
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
return;
}
@@ -141,7 +141,7 @@ DnsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
/* We sent query class 1, query type 1 */
if (&p[5] > e || get_unaligned_be16(p+1) != DNS_A_RECORD) {
puts("DNS: response was not an A record\n");
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
return;
}
@@ -191,7 +191,7 @@ DnsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
puts("server responded with invalid IP number\n");
}
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
}
void
@@ -200,7 +200,7 @@ DnsStart(void)
debug("%s\n", __func__);
NetSetTimeout(DNS_TIMEOUT, DnsTimeout);
- NetSetHandler(DnsHandler);
+ net_set_udp_handler(DnsHandler);
DnsSend();
}
diff --git a/net/eth.c b/net/eth.c
index 3eeb908a35..d9a643073d 100644
--- a/net/eth.c
+++ b/net/eth.c
@@ -82,14 +82,12 @@ int cpu_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));
int board_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init")));
#ifdef CONFIG_API
-extern void (*push_packet)(volatile void *, int);
-
static struct {
uchar data[PKTSIZE];
int length;
} eth_rcv_bufs[PKTBUFSRX];
-static unsigned int eth_rcv_current = 0, eth_rcv_last = 0;
+static unsigned int eth_rcv_current, eth_rcv_last;
#endif
static struct eth_device *eth_devices, *eth_current;
@@ -141,11 +139,10 @@ struct eth_device *eth_get_dev_by_index(int index)
return target_dev;
}
-int eth_get_dev_index (void)
+int eth_get_dev_index(void)
{
- if (!eth_current) {
+ if (!eth_current)
return -1;
- }
return eth_current->index;
}
@@ -176,7 +173,7 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
if (memcmp(env_enetaddr, "\0\0\0\0\0\0", 6)) {
if (memcmp(dev->enetaddr, "\0\0\0\0\0\0", 6) &&
- memcmp(dev->enetaddr, env_enetaddr, 6)) {
+ memcmp(dev->enetaddr, env_enetaddr, 6)) {
printf("\nWarning: %s MAC addresses don't match:\n",
dev->name);
printf("Address in SROM is %pM\n",
@@ -189,10 +186,9 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
}
if (dev->write_hwaddr &&
- !eth_mac_skip(eth_number) &&
- is_valid_ether_addr(dev->enetaddr)) {
+ !eth_mac_skip(eth_number) &&
+ is_valid_ether_addr(dev->enetaddr))
ret = dev->write_hwaddr(dev);
- }
return ret;
}
@@ -200,7 +196,7 @@ int eth_write_hwaddr(struct eth_device *dev, const char *base_name,
int eth_register(struct eth_device *dev)
{
struct eth_device *d;
- static int index = 0;
+ static int index;
assert(strlen(dev->name) < sizeof(dev->name));
@@ -208,7 +204,7 @@ int eth_register(struct eth_device *dev)
eth_current = eth_devices = dev;
eth_current_changed();
} else {
- for (d=eth_devices; d->next!=eth_devices; d=d->next)
+ for (d = eth_devices; d->next != eth_devices; d = d->next)
;
d->next = dev;
}
@@ -249,6 +245,14 @@ int eth_unregister(struct eth_device *dev)
return 0;
}
+static void eth_env_init(bd_t *bis)
+{
+ const char *s;
+
+ if ((s = getenv("bootfile")) != NULL)
+ copy_filename(BootFile, s, sizeof(BootFile));
+}
+
int eth_initialize(bd_t *bis)
{
int num_devices = 0;
@@ -264,6 +268,8 @@ int eth_initialize(bd_t *bis)
phy_init();
#endif
+ eth_env_init(bis);
+
/*
* If board-specific initialization exists, call it.
* If not, call a CPU-specific one
@@ -278,36 +284,37 @@ int eth_initialize(bd_t *bis)
printf("Net Initialization Skipped\n");
if (!eth_devices) {
- puts ("No ethernet found.\n");
+ puts("No ethernet found.\n");
bootstage_error(BOOTSTAGE_ID_NET_ETH_START);
} else {
struct eth_device *dev = eth_devices;
- char *ethprime = getenv ("ethprime");
+ char *ethprime = getenv("ethprime");
bootstage_mark(BOOTSTAGE_ID_NET_ETH_INIT);
do {
if (dev->index)
- puts (", ");
+ puts(", ");
printf("%s", dev->name);
- if (ethprime && strcmp (dev->name, ethprime) == 0) {
+ if (ethprime && strcmp(dev->name, ethprime) == 0) {
eth_current = dev;
- puts (" [PRIME]");
+ puts(" [PRIME]");
}
if (strchr(dev->name, ' '))
- puts("\nWarning: eth device name has a space!\n");
+ puts("\nWarning: eth device name has a space!"
+ "\n");
if (eth_write_hwaddr(dev, "eth", dev->index))
puts("\nWarning: failed to set MAC address\n");
dev = dev->next;
num_devices++;
- } while(dev != eth_devices);
+ } while (dev != eth_devices);
eth_current_changed();
- putc ('\n');
+ putc('\n');
}
return num_devices;
@@ -318,9 +325,9 @@ int eth_initialize(bd_t *bis)
* mcast_addr: multicast ipaddr from which multicast Mac is made
* join: 1=join, 0=leave.
*/
-int eth_mcast_join( IPaddr_t mcast_ip, u8 join)
+int eth_mcast_join(IPaddr_t mcast_ip, u8 join)
{
- u8 mcast_mac[6];
+ u8 mcast_mac[6];
if (!eth_current || !eth_current->mcast)
return -1;
mcast_mac[5] = htonl(mcast_ip) & 0xff;
@@ -337,7 +344,7 @@ int eth_mcast_join( IPaddr_t mcast_ip, u8 join)
* some other adapter -- hash tables
*/
#define CRCPOLY_LE 0xedb88320
-u32 ether_crc (size_t len, unsigned char const *p)
+u32 ether_crc(size_t len, unsigned char const *p)
{
int i;
u32 crc;
@@ -364,7 +371,7 @@ int eth_init(bd_t *bis)
struct eth_device *old_current, *dev;
if (!eth_current) {
- puts ("No ethernet found.\n");
+ puts("No ethernet found.\n");
return -1;
}
@@ -384,7 +391,7 @@ int eth_init(bd_t *bis)
do {
debug("Trying %s\n", eth_current->name);
- if (eth_current->init(eth_current,bis) >= 0) {
+ if (eth_current->init(eth_current, bis) >= 0) {
eth_current->state = ETH_STATE_ACTIVE;
return 0;
@@ -407,7 +414,7 @@ void eth_halt(void)
eth_current->state = ETH_STATE_PASSIVE;
}
-int eth_send(volatile void *packet, int length)
+int eth_send(void *packet, int length)
{
if (!eth_current)
return -1;
@@ -424,9 +431,9 @@ int eth_rx(void)
}
#ifdef CONFIG_API
-static void eth_save_packet(volatile void *packet, int length)
+static void eth_save_packet(void *packet, int length)
{
- volatile char *p = packet;
+ char *p = packet;
int i;
if ((eth_rcv_last+1) % PKTBUFSRX == eth_rcv_current)
@@ -442,9 +449,9 @@ static void eth_save_packet(volatile void *packet, int length)
eth_rcv_last = (eth_rcv_last + 1) % PKTBUFSRX;
}
-int eth_receive(volatile void *packet, int length)
+int eth_receive(void *packet, int length)
{
- volatile char *p = packet;
+ char *p = packet;
void *pp = push_packet;
int i;
@@ -472,38 +479,36 @@ int eth_receive(volatile void *packet, int length)
void eth_try_another(int first_restart)
{
- static struct eth_device *first_failed = NULL;
+ static struct eth_device *first_failed;
char *ethrotate;
/*
* Do not rotate between network interfaces when
* 'ethrotate' variable is set to 'no'.
*/
- if (((ethrotate = getenv ("ethrotate")) != NULL) &&
- (strcmp(ethrotate, "no") == 0))
+ ethrotate = getenv("ethrotate");
+ if ((ethrotate != NULL) && (strcmp(ethrotate, "no") == 0))
return;
if (!eth_current)
return;
- if (first_restart) {
+ if (first_restart)
first_failed = eth_current;
- }
eth_current = eth_current->next;
eth_current_changed();
- if (first_failed == eth_current) {
+ if (first_failed == eth_current)
NetRestartWrap = 1;
- }
}
void eth_set_current(void)
{
- static char *act = NULL;
- static int env_changed_id = 0;
- struct eth_device* old_current;
+ static char *act;
+ static int env_changed_id;
+ struct eth_device *old_current;
int env_id;
if (!eth_current) /* XXX no current */
@@ -526,7 +531,7 @@ void eth_set_current(void)
eth_current_changed();
}
-char *eth_get_name (void)
+char *eth_get_name(void)
{
- return (eth_current ? eth_current->name : "unknown");
+ return eth_current ? eth_current->name : "unknown";
}
diff --git a/net/link_local.c b/net/link_local.c
new file mode 100644
index 0000000000..336286395b
--- /dev/null
+++ b/net/link_local.c
@@ -0,0 +1,334 @@
+/*
+ * RFC3927 ZeroConf IPv4 Link-Local addressing
+ * (see <http://www.zeroconf.org/>)
+ *
+ * Copied from BusyBox - networking/zcip.c
+ *
+ * Copyright (C) 2003 by Arthur van Hoff (avh@strangeberry.com)
+ * Copyright (C) 2004 by David Brownell
+ * Copyright (C) 2010 by Joe Hershberger
+ *
+ * Licensed under the GPL v2 or later
+ */
+
+#include <common.h>
+#include <net.h>
+#include "arp.h"
+#include "net_rand.h"
+
+/* We don't need more than 32 bits of the counter */
+#define MONOTONIC_MS() ((unsigned)get_timer(0) * (1000 / CONFIG_SYS_HZ))
+
+enum {
+/* 169.254.0.0 */
+ LINKLOCAL_ADDR = 0xa9fe0000,
+
+ IN_CLASSB_NET = 0xffff0000,
+ IN_CLASSB_HOST = 0x0000ffff,
+
+/* protocol timeout parameters, specified in seconds */
+ PROBE_WAIT = 1,
+ PROBE_MIN = 1,
+ PROBE_MAX = 2,
+ PROBE_NUM = 3,
+ MAX_CONFLICTS = 10,
+ RATE_LIMIT_INTERVAL = 60,
+ ANNOUNCE_WAIT = 2,
+ ANNOUNCE_NUM = 2,
+ ANNOUNCE_INTERVAL = 2,
+ DEFEND_INTERVAL = 10
+};
+
+/* States during the configuration process. */
+static enum ll_state_t {
+ PROBE = 0,
+ RATE_LIMIT_PROBE,
+ ANNOUNCE,
+ MONITOR,
+ DEFEND,
+ DISABLED
+} state = DISABLED;
+
+static IPaddr_t ip;
+static int timeout_ms = -1;
+static unsigned deadline_ms;
+static unsigned conflicts;
+static unsigned nprobes;
+static unsigned nclaims;
+static int ready;
+
+static void link_local_timeout(void);
+
+/**
+ * Pick a random link local IP address on 169.254/16, except that
+ * the first and last 256 addresses are reserved.
+ */
+static IPaddr_t pick(void)
+{
+ unsigned tmp;
+
+ do {
+ tmp = rand() & IN_CLASSB_HOST;
+ } while (tmp > (IN_CLASSB_HOST - 0x0200));
+ return (IPaddr_t) htonl((LINKLOCAL_ADDR + 0x0100) + tmp);
+}
+
+/**
+ * Return milliseconds of random delay, up to "secs" seconds.
+ */
+static inline unsigned random_delay_ms(unsigned secs)
+{
+ return rand() % (secs * 1000);
+}
+
+static void configure_wait(void)
+{
+ if (timeout_ms == -1)
+ return;
+
+ /* poll, being ready to adjust current timeout */
+ if (!timeout_ms)
+ timeout_ms = random_delay_ms(PROBE_WAIT);
+
+ /* set deadline_ms to the point in time when we timeout */
+ deadline_ms = MONOTONIC_MS() + timeout_ms;
+
+ debug_cond(DEBUG_DEV_PKT, "...wait %d %s nprobes=%u, nclaims=%u\n",
+ timeout_ms, eth_get_name(), nprobes, nclaims);
+
+ NetSetTimeout(timeout_ms, link_local_timeout);
+}
+
+void link_local_start(void)
+{
+ ip = getenv_IPaddr("llipaddr");
+ if (ip != 0 && (ip & IN_CLASSB_NET) != LINKLOCAL_ADDR) {
+ puts("invalid link address");
+ net_set_state(NETLOOP_FAIL);
+ return;
+ }
+ NetOurSubnetMask = IN_CLASSB_NET;
+
+ srand_mac();
+ if (ip == 0)
+ ip = pick();
+
+ state = PROBE;
+ timeout_ms = 0;
+ conflicts = 0;
+ nprobes = 0;
+ nclaims = 0;
+ ready = 0;
+
+ configure_wait();
+}
+
+static void link_local_timeout(void)
+{
+ switch (state) {
+ case PROBE:
+ /* timeouts in the PROBE state mean no conflicting ARP packets
+ have been received, so we can progress through the states */
+ if (nprobes < PROBE_NUM) {
+ nprobes++;
+ debug_cond(DEBUG_LL_STATE, "probe/%u %s@%pI4\n",
+ nprobes, eth_get_name(), &ip);
+ arp_raw_request(0, NetEtherNullAddr, ip);
+ timeout_ms = PROBE_MIN * 1000;
+ timeout_ms += random_delay_ms(PROBE_MAX - PROBE_MIN);
+ } else {
+ /* Switch to announce state */
+ state = ANNOUNCE;
+ nclaims = 0;
+ debug_cond(DEBUG_LL_STATE, "announce/%u %s@%pI4\n",
+ nclaims, eth_get_name(), &ip);
+ arp_raw_request(ip, NetOurEther, ip);
+ timeout_ms = ANNOUNCE_INTERVAL * 1000;
+ }
+ break;
+ case RATE_LIMIT_PROBE:
+ /* timeouts in the RATE_LIMIT_PROBE state mean no conflicting
+ ARP packets have been received, so we can move immediately
+ to the announce state */
+ state = ANNOUNCE;
+ nclaims = 0;
+ debug_cond(DEBUG_LL_STATE, "announce/%u %s@%pI4\n",
+ nclaims, eth_get_name(), &ip);
+ arp_raw_request(ip, NetOurEther, ip);
+ timeout_ms = ANNOUNCE_INTERVAL * 1000;
+ break;
+ case ANNOUNCE:
+ /* timeouts in the ANNOUNCE state mean no conflicting ARP
+ packets have been received, so we can progress through
+ the states */
+ if (nclaims < ANNOUNCE_NUM) {
+ nclaims++;
+ debug_cond(DEBUG_LL_STATE, "announce/%u %s@%pI4\n",
+ nclaims, eth_get_name(), &ip);
+ arp_raw_request(ip, NetOurEther, ip);
+ timeout_ms = ANNOUNCE_INTERVAL * 1000;
+ } else {
+ /* Switch to monitor state */
+ state = MONITOR;
+ printf("Successfully assigned %pI4\n", &ip);
+ NetCopyIP(&NetOurIP, &ip);
+ ready = 1;
+ conflicts = 0;
+ timeout_ms = -1;
+ /* Never timeout in the monitor state */
+ NetSetTimeout(0, NULL);
+
+ /* NOTE: all other exit paths should deconfig ... */
+ net_set_state(NETLOOP_SUCCESS);
+ return;
+ }
+ break;
+ case DEFEND:
+ /* We won! No ARP replies, so just go back to monitor */
+ state = MONITOR;
+ timeout_ms = -1;
+ conflicts = 0;
+ break;
+ default:
+ /* Invalid, should never happen. Restart the whole protocol */
+ state = PROBE;
+ ip = pick();
+ timeout_ms = 0;
+ nprobes = 0;
+ nclaims = 0;
+ break;
+ }
+ configure_wait();
+}
+
+void link_local_receive_arp(struct arp_hdr *arp, int len)
+{
+ int source_ip_conflict;
+ int target_ip_conflict;
+
+ if (state == DISABLED)
+ return;
+
+ /* We need to adjust the timeout in case we didn't receive a
+ conflicting packet. */
+ if (timeout_ms > 0) {
+ unsigned diff = deadline_ms - MONOTONIC_MS();
+ if ((int)(diff) < 0) {
+ /* Current time is greater than the expected timeout
+ time. This should never happen */
+ debug_cond(DEBUG_LL_STATE,
+ "missed an expected timeout\n");
+ timeout_ms = 0;
+ } else {
+ debug_cond(DEBUG_INT_STATE, "adjusting timeout\n");
+ timeout_ms = diff | 1; /* never 0 */
+ }
+ }
+/*
+ * XXX Don't bother with ethernet link just yet
+ if ((fds[0].revents & POLLIN) == 0) {
+ if (fds[0].revents & POLLERR) {
+ // FIXME: links routinely go down;
+ // this shouldn't necessarily exit.
+ bb_error_msg("iface %s is down", eth_get_name());
+ if (ready) {
+ run(argv, "deconfig", &ip);
+ }
+ return EXIT_FAILURE;
+ }
+ continue;
+ }
+*/
+
+ debug_cond(DEBUG_INT_STATE, "%s recv arp type=%d, op=%d,\n",
+ eth_get_name(), ntohs(arp->ar_pro),
+ ntohs(arp->ar_op));
+ debug_cond(DEBUG_INT_STATE, "\tsource=%pM %pI4\n",
+ &arp->ar_sha,
+ &arp->ar_spa);
+ debug_cond(DEBUG_INT_STATE, "\ttarget=%pM %pI4\n",
+ &arp->ar_tha,
+ &arp->ar_tpa);
+
+ if (arp->ar_op != htons(ARPOP_REQUEST)
+ && arp->ar_op != htons(ARPOP_REPLY)
+ ) {
+ configure_wait();
+ return;
+ }
+
+ source_ip_conflict = 0;
+ target_ip_conflict = 0;
+
+ if (memcmp(&arp->ar_spa, &ip, ARP_PLEN) == 0
+ && memcmp(&arp->ar_sha, NetOurEther, ARP_HLEN) != 0
+ ) {
+ source_ip_conflict = 1;
+ }
+ if (arp->ar_op == htons(ARPOP_REQUEST)
+ && memcmp(&arp->ar_tpa, &ip, ARP_PLEN) == 0
+ && memcmp(&arp->ar_tha, NetOurEther, ARP_HLEN) != 0
+ ) {
+ target_ip_conflict = 1;
+ }
+
+ debug_cond(DEBUG_NET_PKT,
+ "state = %d, source ip conflict = %d, target ip conflict = "
+ "%d\n", state, source_ip_conflict, target_ip_conflict);
+ switch (state) {
+ case PROBE:
+ case ANNOUNCE:
+ /* When probing or announcing, check for source IP conflicts
+ and other hosts doing ARP probes (target IP conflicts). */
+ if (source_ip_conflict || target_ip_conflict) {
+ conflicts++;
+ state = PROBE;
+ if (conflicts >= MAX_CONFLICTS) {
+ debug("%s ratelimit\n", eth_get_name());
+ timeout_ms = RATE_LIMIT_INTERVAL * 1000;
+ state = RATE_LIMIT_PROBE;
+ }
+
+ /* restart the whole protocol */
+ ip = pick();
+ timeout_ms = 0;
+ nprobes = 0;
+ nclaims = 0;
+ }
+ break;
+ case MONITOR:
+ /* If a conflict, we try to defend with a single ARP probe */
+ if (source_ip_conflict) {
+ debug("monitor conflict -- defending\n");
+ state = DEFEND;
+ timeout_ms = DEFEND_INTERVAL * 1000;
+ arp_raw_request(ip, NetOurEther, ip);
+ }
+ break;
+ case DEFEND:
+ /* Well, we tried. Start over (on conflict) */
+ if (source_ip_conflict) {
+ state = PROBE;
+ debug("defend conflict -- starting over\n");
+ ready = 0;
+ NetOurIP = 0;
+
+ /* restart the whole protocol */
+ ip = pick();
+ timeout_ms = 0;
+ nprobes = 0;
+ nclaims = 0;
+ }
+ break;
+ default:
+ /* Invalid, should never happen. Restart the whole protocol */
+ debug("invalid state -- starting over\n");
+ state = PROBE;
+ ip = pick();
+ timeout_ms = 0;
+ nprobes = 0;
+ nclaims = 0;
+ break;
+ }
+ configure_wait();
+}
diff --git a/net/link_local.h b/net/link_local.h
new file mode 100644
index 0000000000..bb998164df
--- /dev/null
+++ b/net/link_local.h
@@ -0,0 +1,24 @@
+/*
+ * RFC3927 ZeroConf IPv4 Link-Local addressing
+ * (see <http://www.zeroconf.org/>)
+ *
+ * Copied from BusyBox - networking/zcip.c
+ *
+ * Copyright (C) 2003 by Arthur van Hoff (avh@strangeberry.com)
+ * Copyright (C) 2004 by David Brownell
+ *
+ * Licensed under the GPL v2 or later
+ */
+
+#if defined(CONFIG_CMD_LINK_LOCAL)
+
+#ifndef __LINK_LOCAL_H__
+#define __LINK_LOCAL_H__
+
+#include <common.h>
+
+void link_local_receive_arp(struct arp_hdr *arp, int len);
+void link_local_start(void);
+
+#endif /* __LINK_LOCAL_H__ */
+#endif
diff --git a/net/net.c b/net/net.c
index c5acf8ff6e..9de7d92643 100644
--- a/net/net.c
+++ b/net/net.c
@@ -23,6 +23,12 @@
* - name of bootfile
* Next step: ARP
*
+ * LINK_LOCAL:
+ *
+ * Prerequisites: - own ethernet address
+ * We want: - own IP address
+ * Next step: ARP
+ *
* RARP:
*
* Prerequisites: - own ethernet address
@@ -75,45 +81,31 @@
#include <common.h>
-#include <watchdog.h>
#include <command.h>
#include <net.h>
+#if defined(CONFIG_STATUS_LED)
+#include <miiphy.h>
+#include <status_led.h>
+#endif
+#include <watchdog.h>
+#include <linux/compiler.h>
+#include "arp.h"
#include "bootp.h"
-#include "tftp.h"
-#ifdef CONFIG_CMD_RARP
-#include "rarp.h"
+#include "cdp.h"
+#if defined(CONFIG_CMD_DNS)
+#include "dns.h"
#endif
+#include "link_local.h"
#include "nfs.h"
-#ifdef CONFIG_STATUS_LED
-#include <status_led.h>
-#include <miiphy.h>
-#endif
+#include "ping.h"
+#include "rarp.h"
#if defined(CONFIG_CMD_SNTP)
#include "sntp.h"
#endif
-#if defined(CONFIG_CDP_VERSION)
-#include <timestamp.h>
-#endif
-#if defined(CONFIG_CMD_DNS)
-#include "dns.h"
-#endif
+#include "tftp.h"
DECLARE_GLOBAL_DATA_PTR;
-#ifndef CONFIG_ARP_TIMEOUT
-/* Milliseconds before trying ARP again */
-# define ARP_TIMEOUT 5000UL
-#else
-# define ARP_TIMEOUT CONFIG_ARP_TIMEOUT
-#endif
-
-
-#ifndef CONFIG_NET_RETRY_COUNT
-# define ARP_TIMEOUT_COUNT 5 /* # of timeouts before giving up */
-#else
-# define ARP_TIMEOUT_COUNT CONFIG_NET_RETRY_COUNT
-#endif
-
/** BOOTP EXTENTIONS **/
/* Our subnet mask (0=unknown) */
@@ -152,7 +144,7 @@ IPaddr_t NetOurIP;
/* Server IP addr (0 = unknown) */
IPaddr_t NetServerIP;
/* Current receive packet */
-volatile uchar *NetRxPacket;
+uchar *NetRxPacket;
/* Current rx packet length */
int NetRxPacketLen;
/* IP packet ID */
@@ -161,14 +153,10 @@ unsigned NetIPID;
uchar NetBcastAddr[6] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff };
uchar NetEtherNullAddr[6];
#ifdef CONFIG_API
-void (*push_packet)(volatile void *, int len) = 0;
-#endif
-#if defined(CONFIG_CMD_CDP)
-/* Ethernet bcast address */
-uchar NetCDPAddr[6] = { 0x01, 0x00, 0x0c, 0xcc, 0xcc, 0xcc };
+void (*push_packet)(void *, int len) = 0;
#endif
/* Network loop state */
-int NetState;
+enum net_loop_state net_state;
/* Tried all network devices */
int NetRestartWrap;
/* Network loop restarted */
@@ -185,17 +173,6 @@ ushort NetOurNativeVLAN = 0xFFFF;
/* Boot File name */
char BootFile[128];
-#if defined(CONFIG_CMD_PING)
-/* the ip address to ping */
-IPaddr_t NetPingIP;
-
-static void PingStart(void);
-#endif
-
-#if defined(CONFIG_CMD_CDP)
-static void CDPStart(void);
-#endif
-
#if defined(CONFIG_CMD_SNTP)
/* NTP server IP address */
IPaddr_t NetNtpServerIP;
@@ -203,20 +180,18 @@ IPaddr_t NetNtpServerIP;
int NetTimeOffset;
#endif
-#ifdef CONFIG_NETCONSOLE
-void NcStart(void);
-int nc_input_packet(uchar *pkt, unsigned dest, unsigned src, unsigned len);
-#endif
-
-volatile uchar PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];
+uchar PktBuf[(PKTBUFSRX+1) * PKTSIZE_ALIGN + PKTALIGN];
/* Receive packet */
-volatile uchar *NetRxPackets[PKTBUFSRX];
+uchar *NetRxPackets[PKTBUFSRX];
-/* Current RX packet handler */
-static rxhand_f *packetHandler;
+/* Current UDP RX packet handler */
+static rxhand_f *udp_packet_handler;
+/* Current ARP RX packet handler */
+static rxhand_f *arp_packet_handler;
#ifdef CONFIG_CMD_TFTPPUT
-static rxhand_icmp_f *packet_icmp_handler; /* Current ICMP rx handler */
+/* Current ICMP rx handler */
+static rxhand_icmp_f *packet_icmp_handler;
#endif
/* Current timeout handler */
static thand_f *timeHandler;
@@ -225,7 +200,7 @@ static ulong timeStart;
/* Current timeout value */
static ulong timeDelta;
/* THE transmit packet */
-volatile uchar *NetTxPacket;
+uchar *NetTxPacket;
static int net_check_prereq(enum proto_t protocol);
@@ -233,82 +208,6 @@ static int NetTryCount;
/**********************************************************************/
-IPaddr_t NetArpWaitPacketIP;
-IPaddr_t NetArpWaitReplyIP;
-/* MAC address of waiting packet's destination */
-uchar *NetArpWaitPacketMAC;
-/* THE transmit packet */
-uchar *NetArpWaitTxPacket;
-int NetArpWaitTxPacketSize;
-uchar NetArpWaitPacketBuf[PKTSIZE_ALIGN + PKTALIGN];
-ulong NetArpWaitTimerStart;
-int NetArpWaitTry;
-
-void ArpRequest(void)
-{
- volatile uchar *pkt;
- ARP_t *arp;
-
- debug("ARP broadcast %d\n", NetArpWaitTry);
-
- pkt = NetTxPacket;
-
- pkt += NetSetEther(pkt, NetBcastAddr, PROT_ARP);
-
- arp = (ARP_t *) pkt;
-
- arp->ar_hrd = htons(ARP_ETHER);
- arp->ar_pro = htons(PROT_IP);
- arp->ar_hln = 6;
- arp->ar_pln = 4;
- arp->ar_op = htons(ARPOP_REQUEST);
-
- /* source ET addr */
- memcpy(&arp->ar_data[0], NetOurEther, 6);
- /* source IP addr */
- NetWriteIP((uchar *) &arp->ar_data[6], NetOurIP);
- /* dest ET addr = 0 */
- memset(&arp->ar_data[10], '\0', 6);
- if ((NetArpWaitPacketIP & NetOurSubnetMask) !=
- (NetOurIP & NetOurSubnetMask)) {
- if (NetOurGatewayIP == 0) {
- puts("## Warning: gatewayip needed but not set\n");
- NetArpWaitReplyIP = NetArpWaitPacketIP;
- } else {
- NetArpWaitReplyIP = NetOurGatewayIP;
- }
- } else {
- NetArpWaitReplyIP = NetArpWaitPacketIP;
- }
-
- NetWriteIP((uchar *) &arp->ar_data[16], NetArpWaitReplyIP);
- (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
-}
-
-void ArpTimeoutCheck(void)
-{
- ulong t;
-
- if (!NetArpWaitPacketIP)
- return;
-
- t = get_timer(0);
-
- /* check for arp timeout */
- if ((t - NetArpWaitTimerStart) > ARP_TIMEOUT) {
- NetArpWaitTry++;
-
- if (NetArpWaitTry >= ARP_TIMEOUT_COUNT) {
- puts("\nARP Retry count exceeded; starting again\n");
- NetArpWaitTry = 0;
- NetStartAgain();
- } else {
- NetArpWaitTimerStart = t;
- ArpRequest();
- }
- }
-}
-
/*
* Check if autoload is enabled. If so, use either NFS or TFTP to download
* the boot file.
@@ -323,7 +222,7 @@ void net_auto_load(void)
* Just use BOOTP/RARP to configure system;
* Do not use TFTP to load the bootfile.
*/
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
return;
}
#if defined(CONFIG_CMD_NFS)
@@ -339,16 +238,14 @@ void net_auto_load(void)
TftpStart(TFTPGET);
}
-static void NetInitLoop(enum proto_t protocol)
+static void NetInitLoop(void)
{
static int env_changed_id;
- bd_t *bd = gd->bd;
int env_id = get_env_id();
/* update only when the environment has changed */
if (env_changed_id != env_id) {
NetOurIP = getenv_IPaddr("ipaddr");
- NetCopyIP(&bd->bi_ip_addr, &NetOurIP);
NetOurGatewayIP = getenv_IPaddr("gatewayip");
NetOurSubnetMask = getenv_IPaddr("netmask");
NetServerIP = getenv_IPaddr("serverip");
@@ -363,6 +260,43 @@ static void NetInitLoop(enum proto_t protocol)
return;
}
+static void net_clear_handlers(void)
+{
+ net_set_udp_handler(NULL);
+ net_set_arp_handler(NULL);
+ NetSetTimeout(0, NULL);
+}
+
+static void net_cleanup_loop(void)
+{
+ net_clear_handlers();
+}
+
+void net_init(void)
+{
+ static int first_call = 1;
+
+ if (first_call) {
+ /*
+ * Setup packet buffers, aligned correctly.
+ */
+ int i;
+
+ NetTxPacket = &PktBuf[0] + (PKTALIGN - 1);
+ NetTxPacket -= (ulong)NetTxPacket % PKTALIGN;
+ for (i = 0; i < PKTBUFSRX; i++)
+ NetRxPackets[i] = NetTxPacket + (i + 1) * PKTSIZE_ALIGN;
+
+ ArpInit();
+ net_clear_handlers();
+
+ /* Only need to setup buffer pointers once. */
+ first_call = 0;
+ }
+
+ NetInitLoop();
+}
+
/**********************************************************************/
/*
* Main network processing loop.
@@ -375,34 +309,11 @@ int NetLoop(enum proto_t protocol)
NetRestarted = 0;
NetDevExists = 0;
-
- /* XXX problem with bss workaround */
- NetArpWaitPacketMAC = NULL;
- NetArpWaitTxPacket = NULL;
- NetArpWaitPacketIP = 0;
- NetArpWaitReplyIP = 0;
- NetArpWaitTxPacket = NULL;
- NetTxPacket = NULL;
NetTryCount = 1;
-
- if (!NetTxPacket) {
- int i;
- /*
- * Setup packet buffers, aligned correctly.
- */
- NetTxPacket = &PktBuf[0] + (PKTALIGN - 1);
- NetTxPacket -= (ulong)NetTxPacket % PKTALIGN;
- for (i = 0; i < PKTBUFSRX; i++)
- NetRxPackets[i] = NetTxPacket + (i+1)*PKTSIZE_ALIGN;
- }
-
- if (!NetArpWaitTxPacket) {
- NetArpWaitTxPacket = &NetArpWaitPacketBuf[0] + (PKTALIGN - 1);
- NetArpWaitTxPacket -= (ulong)NetArpWaitTxPacket % PKTALIGN;
- NetArpWaitTxPacketSize = 0;
- }
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop Entry\n");
bootstage_mark_name(BOOTSTAGE_ID_ETH_START, "eth_start");
+ net_init();
eth_halt();
eth_set_current();
if (eth_init(bd) < 0) {
@@ -413,14 +324,15 @@ int NetLoop(enum proto_t protocol)
restart:
memcpy(NetOurEther, eth_get_dev()->enetaddr, 6);
- NetState = NETLOOP_CONTINUE;
+ net_set_state(NETLOOP_CONTINUE);
/*
* Start the ball rolling with the given start function. From
* here on, this code is a state machine driven by received
* packets and timer events.
*/
- NetInitLoop(protocol);
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop Init\n");
+ NetInitLoop();
switch (net_check_prereq(protocol)) {
case 1:
@@ -471,7 +383,7 @@ restart:
#endif
#if defined(CONFIG_CMD_PING)
case PING:
- PingStart();
+ ping_start();
break;
#endif
#if defined(CONFIG_CMD_NFS)
@@ -499,6 +411,11 @@ restart:
DnsStart();
break;
#endif
+#if defined(CONFIG_CMD_LINK_LOCAL)
+ case LINKLOCAL:
+ link_local_start();
+ break;
+#endif
default:
break;
}
@@ -522,15 +439,12 @@ restart:
/*
* Main packet reception loop. Loop receiving packets until
- * someone sets `NetState' to a state that terminates.
+ * someone sets `net_state' to a state that terminates.
*/
for (;;) {
WATCHDOG_RESET();
#ifdef CONFIG_SHOW_ACTIVITY
- {
- extern void show_activity(int arg);
- show_activity(1);
- }
+ show_activity(1);
#endif
/*
* Check the ethernet for a new packet. The ethernet
@@ -542,8 +456,15 @@ restart:
* Abort if ctrl-c was pressed.
*/
if (ctrlc()) {
+ /* cancel any ARP that may not have completed */
+ NetArpWaitPacketIP = 0;
+
+ net_cleanup_loop();
eth_halt();
puts("\nAbort\n");
+ /* include a debug print as well incase the debug
+ messages are directed to stderr */
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop Abort!\n");
goto done;
}
@@ -571,19 +492,21 @@ restart:
}
#endif /* CONFIG_SYS_FAULT_ECHO_LINK_DOWN, ... */
#endif /* CONFIG_MII, ... */
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop timeout\n");
x = timeHandler;
timeHandler = (thand_f *)0;
(*x)();
}
- switch (NetState) {
+ switch (net_state) {
case NETLOOP_RESTART:
NetRestarted = 1;
goto restart;
case NETLOOP_SUCCESS:
+ net_cleanup_loop();
if (NetBootFileXferSize > 0) {
char buf[20];
printf("Bytes transferred = %ld (%lx hex)\n",
@@ -597,17 +520,23 @@ restart:
}
eth_halt();
ret = NetBootFileXferSize;
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop Success!\n");
goto done;
case NETLOOP_FAIL:
+ net_cleanup_loop();
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop Fail!\n");
goto done;
+
+ case NETLOOP_CONTINUE:
+ continue;
}
}
done:
#ifdef CONFIG_CMD_TFTPPUT
/* Clear out the handlers */
- NetSetHandler(NULL);
+ net_set_udp_handler(NULL);
net_set_icmp_handler(NULL);
#endif
return ret;
@@ -618,14 +547,7 @@ done:
static void
startAgainTimeout(void)
{
- NetState = NETLOOP_RESTART;
-}
-
-static void
-startAgainHandler(uchar *pkt, unsigned dest, IPaddr_t sip,
- unsigned src, unsigned len)
-{
- /* Totally ignore the packet */
+ net_set_state(NETLOOP_RESTART);
}
void NetStartAgain(void)
@@ -649,7 +571,7 @@ void NetStartAgain(void)
if ((!retry_forever) && (NetTryCount >= retrycnt)) {
eth_halt();
- NetState = NETLOOP_FAIL;
+ net_set_state(NETLOOP_FAIL);
return;
}
@@ -664,12 +586,12 @@ void NetStartAgain(void)
NetRestartWrap = 0;
if (NetDevExists) {
NetSetTimeout(10000UL, startAgainTimeout);
- NetSetHandler(startAgainHandler);
+ net_set_udp_handler(NULL);
} else {
- NetState = NETLOOP_FAIL;
+ net_set_state(NETLOOP_FAIL);
}
} else {
- NetState = NETLOOP_RESTART;
+ net_set_state(NETLOOP_RESTART);
}
}
@@ -678,10 +600,38 @@ void NetStartAgain(void)
* Miscelaneous bits.
*/
-void
-NetSetHandler(rxhand_f *f)
+static void dummy_handler(uchar *pkt, unsigned dport,
+ IPaddr_t sip, unsigned sport,
+ unsigned len)
+{
+}
+
+rxhand_f *net_get_udp_handler(void)
+{
+ return udp_packet_handler;
+}
+
+void net_set_udp_handler(rxhand_f *f)
+{
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop UDP handler set (%p)\n", f);
+ if (f == NULL)
+ udp_packet_handler = dummy_handler;
+ else
+ udp_packet_handler = f;
+}
+
+rxhand_f *net_get_arp_handler(void)
{
- packetHandler = f;
+ return arp_packet_handler;
+}
+
+void net_set_arp_handler(rxhand_f *f)
+{
+ debug_cond(DEBUG_INT_STATE, "--- NetLoop ARP handler set (%p)\n", f);
+ if (f == NULL)
+ arp_packet_handler = dummy_handler;
+ else
+ arp_packet_handler = f;
}
#ifdef CONFIG_CMD_TFTPPUT
@@ -695,25 +645,29 @@ void
NetSetTimeout(ulong iv, thand_f *f)
{
if (iv == 0) {
+ debug_cond(DEBUG_INT_STATE,
+ "--- NetLoop timeout handler cancelled\n");
timeHandler = (thand_f *)0;
} else {
+ debug_cond(DEBUG_INT_STATE,
+ "--- NetLoop timeout handler set (%p)\n", f);
timeHandler = f;
timeStart = get_timer(0);
timeDelta = iv;
}
}
-
-void
-NetSendPacket(volatile uchar *pkt, int len)
-{
- (void) eth_send(pkt, len);
-}
-
-int
-NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)
+int NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport,
+ int payload_len)
{
uchar *pkt;
+ int eth_hdr_size;
+ int pkt_hdr_size;
+
+ /* make sure the NetTxPacket is initialized (NetInit() was called) */
+ assert(NetTxPacket != NULL);
+ if (NetTxPacket == NULL)
+ return -1;
/* convert to new style broadcast */
if (dest == 0)
@@ -723,487 +677,37 @@ NetSendUDPPacket(uchar *ether, IPaddr_t dest, int dport, int sport, int len)
if (dest == 0xFFFFFFFF)
ether = NetBcastAddr;
- /*
- * if MAC address was not discovered yet, save the packet and do
- * an ARP request
- */
- if (memcmp(ether, NetEtherNullAddr, 6) == 0) {
+ pkt = (uchar *)NetTxPacket;
+
+ eth_hdr_size = NetSetEther(pkt, ether, PROT_IP);
+ pkt += eth_hdr_size;
+ net_set_udp_header(pkt, dest, dport, sport, payload_len);
+ pkt_hdr_size = eth_hdr_size + IP_UDP_HDR_SIZE;
- debug("sending ARP for %08x\n", dest);
+ /* if MAC address was not discovered yet, do an ARP request */
+ if (memcmp(ether, NetEtherNullAddr, 6) == 0) {
+ debug_cond(DEBUG_DEV_PKT, "sending ARP for %pI4\n", &dest);
+ /* save the ip and eth addr for the packet to send after arp */
NetArpWaitPacketIP = dest;
NetArpWaitPacketMAC = ether;
- pkt = NetArpWaitTxPacket;
- pkt += NetSetEther(pkt, NetArpWaitPacketMAC, PROT_IP);
-
- NetSetIP(pkt, dest, dport, sport, len);
- memcpy(pkt + IP_HDR_SIZE, (uchar *)NetTxPacket +
- (pkt - (uchar *)NetArpWaitTxPacket) + IP_HDR_SIZE, len);
-
/* size of the waiting packet */
- NetArpWaitTxPacketSize = (pkt - NetArpWaitTxPacket) +
- IP_HDR_SIZE + len;
+ NetArpWaitTxPacketSize = pkt_hdr_size + payload_len;
/* and do the ARP request */
NetArpWaitTry = 1;
NetArpWaitTimerStart = get_timer(0);
ArpRequest();
return 1; /* waiting */
+ } else {
+ debug_cond(DEBUG_DEV_PKT, "sending UDP to %pI4/%pM\n",
+ &dest, ether);
+ NetSendPacket(NetTxPacket, pkt_hdr_size + payload_len);
+ return 0; /* transmitted */
}
-
- debug("sending UDP to %08x/%pM\n", dest, ether);
-
- pkt = (uchar *)NetTxPacket;
- pkt += NetSetEther(pkt, ether, PROT_IP);
- NetSetIP(pkt, dest, dport, sport, len);
- (void) eth_send(NetTxPacket, (pkt - NetTxPacket) + IP_HDR_SIZE + len);
-
- return 0; /* transmitted */
-}
-
-#if defined(CONFIG_CMD_PING)
-static ushort PingSeqNo;
-
-int PingSend(void)
-{
- static uchar mac[6];
- volatile IP_t *ip;
- volatile ushort *s;
- uchar *pkt;
-
- /* XXX always send arp request */
-
- memcpy(mac, NetEtherNullAddr, 6);
-
- debug("sending ARP for %08x\n", NetPingIP);
-
- NetArpWaitPacketIP = NetPingIP;
- NetArpWaitPacketMAC = mac;
-
- pkt = NetArpWaitTxPacket;
- pkt += NetSetEther(pkt, mac, PROT_IP);
-
- ip = (volatile IP_t *)pkt;
-
- /*
- * Construct an IP and ICMP header.
- * (need to set no fragment bit - XXX)
- */
- /* IP_HDR_SIZE / 4 (not including UDP) */
- ip->ip_hl_v = 0x45;
- ip->ip_tos = 0;
- ip->ip_len = htons(IP_HDR_SIZE_NO_UDP + 8);
- ip->ip_id = htons(NetIPID++);
- ip->ip_off = htons(IP_FLAGS_DFRAG); /* Don't fragment */
- ip->ip_ttl = 255;
- ip->ip_p = 0x01; /* ICMP */
- ip->ip_sum = 0;
- /* already in network byte order */
- NetCopyIP((void *)&ip->ip_src, &NetOurIP);
- /* - "" - */
- NetCopyIP((void *)&ip->ip_dst, &NetPingIP);
- ip->ip_sum = ~NetCksum((uchar *)ip, IP_HDR_SIZE_NO_UDP / 2);
-
- s = &ip->udp_src; /* XXX ICMP starts here */
- s[0] = htons(0x0800); /* echo-request, code */
- s[1] = 0; /* checksum */
- s[2] = 0; /* identifier */
- s[3] = htons(PingSeqNo++); /* sequence number */
- s[1] = ~NetCksum((uchar *)s, 8/2);
-
- /* size of the waiting packet */
- NetArpWaitTxPacketSize =
- (pkt - NetArpWaitTxPacket) + IP_HDR_SIZE_NO_UDP + 8;
-
- /* and do the ARP request */
- NetArpWaitTry = 1;
- NetArpWaitTimerStart = get_timer(0);
- ArpRequest();
- return 1; /* waiting */
-}
-
-static void
-PingTimeout(void)
-{
- eth_halt();
- NetState = NETLOOP_FAIL; /* we did not get the reply */
-}
-
-static void
-PingHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
- unsigned len)
-{
- if (sip != NetPingIP)
- return;
-
- NetState = NETLOOP_SUCCESS;
-}
-
-static void PingStart(void)
-{
- printf("Using %s device\n", eth_get_name());
- NetSetTimeout(10000UL, PingTimeout);
- NetSetHandler(PingHandler);
-
- PingSend();
-}
-#endif
-
-#if defined(CONFIG_CMD_CDP)
-
-#define CDP_DEVICE_ID_TLV 0x0001
-#define CDP_ADDRESS_TLV 0x0002
-#define CDP_PORT_ID_TLV 0x0003
-#define CDP_CAPABILITIES_TLV 0x0004
-#define CDP_VERSION_TLV 0x0005
-#define CDP_PLATFORM_TLV 0x0006
-#define CDP_NATIVE_VLAN_TLV 0x000a
-#define CDP_APPLIANCE_VLAN_TLV 0x000e
-#define CDP_TRIGGER_TLV 0x000f
-#define CDP_POWER_CONSUMPTION_TLV 0x0010
-#define CDP_SYSNAME_TLV 0x0014
-#define CDP_SYSOBJECT_TLV 0x0015
-#define CDP_MANAGEMENT_ADDRESS_TLV 0x0016
-
-#define CDP_TIMEOUT 250UL /* one packet every 250ms */
-
-static int CDPSeq;
-static int CDPOK;
-
-ushort CDPNativeVLAN;
-ushort CDPApplianceVLAN;
-
-static const uchar CDP_SNAP_hdr[8] = { 0xAA, 0xAA, 0x03, 0x00, 0x00, 0x0C, 0x20,
- 0x00 };
-
-static ushort CDP_compute_csum(const uchar *buff, ushort len)
-{
- ushort csum;
- int odd;
- ulong result = 0;
- ushort leftover;
- ushort *p;
-
- if (len > 0) {
- odd = 1 & (ulong)buff;
- if (odd) {
- result = *buff << 8;
- len--;
- buff++;
- }
- while (len > 1) {
- p = (ushort *)buff;
- result += *p++;
- buff = (uchar *)p;
- if (result & 0x80000000)
- result = (result & 0xFFFF) + (result >> 16);
- len -= 2;
- }
- if (len) {
- leftover = (signed short)(*(const signed char *)buff);
- /* CISCO SUCKS big time! (and blows too):
- * CDP uses the IP checksum algorithm with a twist;
- * for the last byte it *sign* extends and sums.
- */
- result = (result & 0xffff0000) |
- ((result + leftover) & 0x0000ffff);
- }
- while (result >> 16)
- result = (result & 0xFFFF) + (result >> 16);
-
- if (odd)
- result = ((result >> 8) & 0xff) |
- ((result & 0xff) << 8);
- }
-
- /* add up 16-bit and 17-bit words for 17+c bits */
- result = (result & 0xffff) + (result >> 16);
- /* add up 16-bit and 2-bit for 16+c bit */
- result = (result & 0xffff) + (result >> 16);
- /* add up carry.. */
- result = (result & 0xffff) + (result >> 16);
-
- /* negate */
- csum = ~(ushort)result;
-
- /* run time endian detection */
- if (csum != htons(csum)) /* little endian */
- csum = htons(csum);
-
- return csum;
}
-int CDPSendTrigger(void)
-{
- volatile uchar *pkt;
- volatile ushort *s;
- volatile ushort *cp;
- Ethernet_t *et;
- int len;
- ushort chksum;
-#if defined(CONFIG_CDP_DEVICE_ID) || defined(CONFIG_CDP_PORT_ID) || \
- defined(CONFIG_CDP_VERSION) || defined(CONFIG_CDP_PLATFORM)
- char buf[32];
-#endif
-
- pkt = NetTxPacket;
- et = (Ethernet_t *)pkt;
-
- /* NOTE: trigger sent not on any VLAN */
-
- /* form ethernet header */
- memcpy(et->et_dest, NetCDPAddr, 6);
- memcpy(et->et_src, NetOurEther, 6);
-
- pkt += ETHER_HDR_SIZE;
-
- /* SNAP header */
- memcpy((uchar *)pkt, CDP_SNAP_hdr, sizeof(CDP_SNAP_hdr));
- pkt += sizeof(CDP_SNAP_hdr);
-
- /* CDP header */
- *pkt++ = 0x02; /* CDP version 2 */
- *pkt++ = 180; /* TTL */
- s = (volatile ushort *)pkt;
- cp = s;
- /* checksum (0 for later calculation) */
- *s++ = htons(0);
-
- /* CDP fields */
-#ifdef CONFIG_CDP_DEVICE_ID
- *s++ = htons(CDP_DEVICE_ID_TLV);
- *s++ = htons(CONFIG_CDP_DEVICE_ID);
- sprintf(buf, CONFIG_CDP_DEVICE_ID_PREFIX "%pm", NetOurEther);
- memcpy((uchar *)s, buf, 16);
- s += 16 / 2;
-#endif
-
-#ifdef CONFIG_CDP_PORT_ID
- *s++ = htons(CDP_PORT_ID_TLV);
- memset(buf, 0, sizeof(buf));
- sprintf(buf, CONFIG_CDP_PORT_ID, eth_get_dev_index());
- len = strlen(buf);
- if (len & 1) /* make it even */
- len++;
- *s++ = htons(len + 4);
- memcpy((uchar *)s, buf, len);
- s += len / 2;
-#endif
-
-#ifdef CONFIG_CDP_CAPABILITIES
- *s++ = htons(CDP_CAPABILITIES_TLV);
- *s++ = htons(8);
- *(ulong *)s = htonl(CONFIG_CDP_CAPABILITIES);
- s += 2;
-#endif
-
-#ifdef CONFIG_CDP_VERSION
- *s++ = htons(CDP_VERSION_TLV);
- memset(buf, 0, sizeof(buf));
- strcpy(buf, CONFIG_CDP_VERSION);
- len = strlen(buf);
- if (len & 1) /* make it even */
- len++;
- *s++ = htons(len + 4);
- memcpy((uchar *)s, buf, len);
- s += len / 2;
-#endif
-
-#ifdef CONFIG_CDP_PLATFORM
- *s++ = htons(CDP_PLATFORM_TLV);
- memset(buf, 0, sizeof(buf));
- strcpy(buf, CONFIG_CDP_PLATFORM);
- len = strlen(buf);
- if (len & 1) /* make it even */
- len++;
- *s++ = htons(len + 4);
- memcpy((uchar *)s, buf, len);
- s += len / 2;
-#endif
-
-#ifdef CONFIG_CDP_TRIGGER
- *s++ = htons(CDP_TRIGGER_TLV);
- *s++ = htons(8);
- *(ulong *)s = htonl(CONFIG_CDP_TRIGGER);
- s += 2;
-#endif
-
-#ifdef CONFIG_CDP_POWER_CONSUMPTION
- *s++ = htons(CDP_POWER_CONSUMPTION_TLV);
- *s++ = htons(6);
- *s++ = htons(CONFIG_CDP_POWER_CONSUMPTION);
-#endif
-
- /* length of ethernet packet */
- len = (uchar *)s - ((uchar *)NetTxPacket + ETHER_HDR_SIZE);
- et->et_protlen = htons(len);
-
- len = ETHER_HDR_SIZE + sizeof(CDP_SNAP_hdr);
- chksum = CDP_compute_csum((uchar *)NetTxPacket + len,
- (uchar *)s - (NetTxPacket + len));
- if (chksum == 0)
- chksum = 0xFFFF;
- *cp = htons(chksum);
-
- (void) eth_send(NetTxPacket, (uchar *)s - NetTxPacket);
- return 0;
-}
-
-static void
-CDPTimeout(void)
-{
- CDPSeq++;
-
- if (CDPSeq < 3) {
- NetSetTimeout(CDP_TIMEOUT, CDPTimeout);
- CDPSendTrigger();
- return;
- }
-
- /* if not OK try again */
- if (!CDPOK)
- NetStartAgain();
- else
- NetState = NETLOOP_SUCCESS;
-}
-
-static void
-CDPDummyHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
- unsigned len)
-{
- /* nothing */
-}
-
-static void
-CDPHandler(const uchar *pkt, unsigned len)
-{
- const uchar *t;
- const ushort *ss;
- ushort type, tlen;
- ushort vlan, nvlan;
-
- /* minimum size? */
- if (len < sizeof(CDP_SNAP_hdr) + 4)
- goto pkt_short;
-
- /* check for valid CDP SNAP header */
- if (memcmp(pkt, CDP_SNAP_hdr, sizeof(CDP_SNAP_hdr)) != 0)
- return;
-
- pkt += sizeof(CDP_SNAP_hdr);
- len -= sizeof(CDP_SNAP_hdr);
-
- /* Version of CDP protocol must be >= 2 and TTL != 0 */
- if (pkt[0] < 0x02 || pkt[1] == 0)
- return;
-
- /*
- * if version is greater than 0x02 maybe we'll have a problem;
- * output a warning
- */
- if (pkt[0] != 0x02)
- printf("** WARNING: CDP packet received with a protocol version %d > 2\n",
- pkt[0] & 0xff);
-
- if (CDP_compute_csum(pkt, len) != 0)
- return;
-
- pkt += 4;
- len -= 4;
-
- vlan = htons(-1);
- nvlan = htons(-1);
- while (len > 0) {
- if (len < 4)
- goto pkt_short;
-
- ss = (const ushort *)pkt;
- type = ntohs(ss[0]);
- tlen = ntohs(ss[1]);
- if (tlen > len)
- goto pkt_short;
-
- pkt += tlen;
- len -= tlen;
-
- ss += 2; /* point ss to the data of the TLV */
- tlen -= 4;
-
- switch (type) {
- case CDP_DEVICE_ID_TLV:
- break;
- case CDP_ADDRESS_TLV:
- break;
- case CDP_PORT_ID_TLV:
- break;
- case CDP_CAPABILITIES_TLV:
- break;
- case CDP_VERSION_TLV:
- break;
- case CDP_PLATFORM_TLV:
- break;
- case CDP_NATIVE_VLAN_TLV:
- nvlan = *ss;
- break;
- case CDP_APPLIANCE_VLAN_TLV:
- t = (const uchar *)ss;
- while (tlen > 0) {
- if (tlen < 3)
- goto pkt_short;
-
- ss = (const ushort *)(t + 1);
-
-#ifdef CONFIG_CDP_APPLIANCE_VLAN_TYPE
- if (t[0] == CONFIG_CDP_APPLIANCE_VLAN_TYPE)
- vlan = *ss;
-#else
- /* XXX will this work; dunno */
- vlan = ntohs(*ss);
-#endif
- t += 3; tlen -= 3;
- }
- break;
- case CDP_TRIGGER_TLV:
- break;
- case CDP_POWER_CONSUMPTION_TLV:
- break;
- case CDP_SYSNAME_TLV:
- break;
- case CDP_SYSOBJECT_TLV:
- break;
- case CDP_MANAGEMENT_ADDRESS_TLV:
- break;
- }
- }
-
- CDPApplianceVLAN = vlan;
- CDPNativeVLAN = nvlan;
-
- CDPOK = 1;
- return;
-
- pkt_short:
- printf("** CDP packet is too short\n");
- return;
-}
-
-static void CDPStart(void)
-{
- printf("Using %s device\n", eth_get_name());
- CDPSeq = 0;
- CDPOK = 0;
-
- CDPNativeVLAN = htons(-1);
- CDPApplianceVLAN = htons(-1);
-
- NetSetTimeout(CDP_TIMEOUT, CDPTimeout);
- NetSetHandler(CDPDummyHandler);
-
- CDPSendTrigger();
-}
-#endif
-
#ifdef CONFIG_IP_DEFRAG
/*
* This function collects fragments in a single packet, according
@@ -1223,7 +727,7 @@ static void CDPStart(void)
static struct rpc_t rpc_specimen;
#define IP_PKTSIZE (CONFIG_NET_MAXDEFRAG + sizeof(rpc_specimen.u.reply))
-#define IP_MAXUDP (IP_PKTSIZE - IP_HDR_SIZE_NO_UDP)
+#define IP_MAXUDP (IP_PKTSIZE - IP_HDR_SIZE)
/*
* this is the packet being assembled, either data or frag control.
@@ -1237,22 +741,22 @@ struct hole {
u16 unused;
};
-static IP_t *__NetDefragment(IP_t *ip, int *lenp)
+static struct ip_udp_hdr *__NetDefragment(struct ip_udp_hdr *ip, int *lenp)
{
- static uchar pkt_buff[IP_PKTSIZE] __attribute__((aligned(PKTALIGN)));
+ static uchar pkt_buff[IP_PKTSIZE] __aligned(PKTALIGN);
static u16 first_hole, total_len;
struct hole *payload, *thisfrag, *h, *newh;
- IP_t *localip = (IP_t *)pkt_buff;
+ struct ip_udp_hdr *localip = (struct ip_udp_hdr *)pkt_buff;
uchar *indata = (uchar *)ip;
int offset8, start, len, done = 0;
u16 ip_off = ntohs(ip->ip_off);
/* payload starts after IP header, this fragment is in there */
- payload = (struct hole *)(pkt_buff + IP_HDR_SIZE_NO_UDP);
+ payload = (struct hole *)(pkt_buff + IP_HDR_SIZE);
offset8 = (ip_off & IP_OFFS);
thisfrag = payload + offset8;
start = offset8 * 8;
- len = ntohs(ip->ip_len) - IP_HDR_SIZE_NO_UDP;
+ len = ntohs(ip->ip_len) - IP_HDR_SIZE;
if (start + len > IP_MAXUDP) /* fragment extends too far */
return NULL;
@@ -1265,7 +769,7 @@ static IP_t *__NetDefragment(IP_t *ip, int *lenp)
payload[0].prev_hole = 0;
first_hole = 0;
/* any IP header will work, copy the first we received */
- memcpy(localip, ip, IP_HDR_SIZE_NO_UDP);
+ memcpy(localip, ip, IP_HDR_SIZE);
}
/*
@@ -1348,16 +852,16 @@ static IP_t *__NetDefragment(IP_t *ip, int *lenp)
}
/* finally copy this fragment and possibly return whole packet */
- memcpy((uchar *)thisfrag, indata + IP_HDR_SIZE_NO_UDP, len);
+ memcpy((uchar *)thisfrag, indata + IP_HDR_SIZE, len);
if (!done)
return NULL;
localip->ip_len = htons(total_len);
- *lenp = total_len + IP_HDR_SIZE_NO_UDP;
+ *lenp = total_len + IP_HDR_SIZE;
return localip;
}
-static inline IP_t *NetDefragment(IP_t *ip, int *lenp)
+static inline struct ip_udp_hdr *NetDefragment(struct ip_udp_hdr *ip, int *lenp)
{
u16 ip_off = ntohs(ip->ip_off);
if (!(ip_off & (IP_OFFS | IP_FLAGS_MFRAG)))
@@ -1367,7 +871,7 @@ static inline IP_t *NetDefragment(IP_t *ip, int *lenp)
#else /* !CONFIG_IP_DEFRAG */
-static inline IP_t *NetDefragment(IP_t *ip, int *lenp)
+static inline struct ip_udp_hdr *NetDefragment(struct ip_udp_hdr *ip, int *lenp)
{
u16 ip_off = ntohs(ip->ip_off);
if (!(ip_off & (IP_OFFS | IP_FLAGS_MFRAG)))
@@ -1382,9 +886,10 @@ static inline IP_t *NetDefragment(IP_t *ip, int *lenp)
*
* @parma ip IP packet containing the ICMP
*/
-static void receive_icmp(IP_t *ip, int len, IPaddr_t src_ip, Ethernet_t *et)
+static void receive_icmp(struct ip_udp_hdr *ip, int len,
+ IPaddr_t src_ip, struct ethernet_hdr *et)
{
- ICMP_t *icmph = (ICMP_t *)&ip->udp_src;
+ struct icmp_hdr *icmph = (struct icmp_hdr *)&ip->udp_src;
switch (icmph->type) {
case ICMP_REDIRECT:
@@ -1393,41 +898,10 @@ static void receive_icmp(IP_t *ip, int len, IPaddr_t src_ip, Ethernet_t *et)
printf(" ICMP Host Redirect to %pI4 ",
&icmph->un.gateway);
break;
+ default:
#if defined(CONFIG_CMD_PING)
- case ICMP_ECHO_REPLY:
- /*
- * IP header OK. Pass the packet to the
- * current handler.
- */
- /*
- * XXX point to ip packet - should this use
- * packet_icmp_handler?
- */
- (*packetHandler)((uchar *)ip, 0, src_ip, 0, 0);
- break;
- case ICMP_ECHO_REQUEST:
- debug("Got ICMP ECHO REQUEST, return %d bytes\n",
- ETHER_HDR_SIZE + len);
-
- memcpy(&et->et_dest[0], &et->et_src[0], 6);
- memcpy(&et->et_src[0], NetOurEther, 6);
-
- ip->ip_sum = 0;
- ip->ip_off = 0;
- NetCopyIP((void *)&ip->ip_dst, &ip->ip_src);
- NetCopyIP((void *)&ip->ip_src, &NetOurIP);
- ip->ip_sum = ~NetCksum((uchar *)ip,
- IP_HDR_SIZE_NO_UDP >> 1);
-
- icmph->type = ICMP_ECHO_REPLY;
- icmph->checksum = 0;
- icmph->checksum = ~NetCksum((uchar *)icmph,
- (len - IP_HDR_SIZE_NO_UDP) >> 1);
- (void) eth_send((uchar *)et,
- ETHER_HDR_SIZE + len);
- break;
+ ping_receive(et, ip, len);
#endif
- default:
#ifdef CONFIG_CMD_TFTPPUT
if (packet_icmp_handler)
packet_icmp_handler(icmph->type, icmph->code,
@@ -1439,25 +913,23 @@ static void receive_icmp(IP_t *ip, int len, IPaddr_t src_ip, Ethernet_t *et)
}
void
-NetReceive(volatile uchar *inpkt, int len)
+NetReceive(uchar *inpkt, int len)
{
- Ethernet_t *et;
- IP_t *ip;
- ARP_t *arp;
- IPaddr_t tmp;
+ struct ethernet_hdr *et;
+ struct ip_udp_hdr *ip;
+ IPaddr_t dst_ip;
IPaddr_t src_ip;
- int x;
- uchar *pkt;
+ int eth_proto;
#if defined(CONFIG_CMD_CDP)
int iscdp;
#endif
ushort cti = 0, vlanid = VLAN_NONE, myvlanid, mynvlanid;
- debug("packet received\n");
+ debug_cond(DEBUG_NET_PKT, "packet received\n");
NetRxPacket = inpkt;
NetRxPacketLen = len;
- et = (Ethernet_t *)inpkt;
+ et = (struct ethernet_hdr *)inpkt;
/* too small packet? */
if (len < ETHER_HDR_SIZE)
@@ -1472,7 +944,7 @@ NetReceive(volatile uchar *inpkt, int len)
#if defined(CONFIG_CMD_CDP)
/* keep track if packet is CDP */
- iscdp = memcmp(et->et_dest, NetCDPAddr, 6) == 0;
+ iscdp = is_cdp_packet(et->et_dest);
#endif
myvlanid = ntohs(NetOurVLAN);
@@ -1482,27 +954,28 @@ NetReceive(volatile uchar *inpkt, int len)
if (mynvlanid == (ushort)-1)
mynvlanid = VLAN_NONE;
- x = ntohs(et->et_protlen);
+ eth_proto = ntohs(et->et_protlen);
- debug("packet received\n");
-
- if (x < 1514) {
+ if (eth_proto < 1514) {
+ struct e802_hdr *et802 = (struct e802_hdr *)et;
/*
- * Got a 802 packet. Check the other protocol field.
+ * Got a 802.2 packet. Check the other protocol field.
+ * XXX VLAN over 802.2+SNAP not implemented!
*/
- x = ntohs(et->et_prot);
+ eth_proto = ntohs(et802->et_prot);
- ip = (IP_t *)(inpkt + E802_HDR_SIZE);
+ ip = (struct ip_udp_hdr *)(inpkt + E802_HDR_SIZE);
len -= E802_HDR_SIZE;
- } else if (x != PROT_VLAN) { /* normal packet */
- ip = (IP_t *)(inpkt + ETHER_HDR_SIZE);
+ } else if (eth_proto != PROT_VLAN) { /* normal packet */
+ ip = (struct ip_udp_hdr *)(inpkt + ETHER_HDR_SIZE);
len -= ETHER_HDR_SIZE;
} else { /* VLAN packet */
- VLAN_Ethernet_t *vet = (VLAN_Ethernet_t *)et;
+ struct vlan_ethernet_hdr *vet =
+ (struct vlan_ethernet_hdr *)et;
- debug("VLAN packet received\n");
+ debug_cond(DEBUG_NET_PKT, "VLAN packet received\n");
/* too small packet? */
if (len < VLAN_ETHER_HDR_SIZE)
@@ -1518,17 +991,17 @@ NetReceive(volatile uchar *inpkt, int len)
cti = ntohs(vet->vet_tag);
vlanid = cti & VLAN_IDMASK;
- x = ntohs(vet->vet_type);
+ eth_proto = ntohs(vet->vet_type);
- ip = (IP_t *)(inpkt + VLAN_ETHER_HDR_SIZE);
+ ip = (struct ip_udp_hdr *)(inpkt + VLAN_ETHER_HDR_SIZE);
len -= VLAN_ETHER_HDR_SIZE;
}
- debug("Receive from protocol 0x%x\n", x);
+ debug_cond(DEBUG_NET_PKT, "Receive from protocol 0x%x\n", eth_proto);
#if defined(CONFIG_CMD_CDP)
if (iscdp) {
- CDPHandler((uchar *)ip, len);
+ cdp_receive((uchar *)ip, len);
return;
}
#endif
@@ -1541,141 +1014,33 @@ NetReceive(volatile uchar *inpkt, int len)
return;
}
- switch (x) {
+ switch (eth_proto) {
case PROT_ARP:
- /*
- * We have to deal with two types of ARP packets:
- * - REQUEST packets will be answered by sending our
- * IP address - if we know it.
- * - REPLY packates are expected only after we asked
- * for the TFTP server's or the gateway's ethernet
- * address; so if we receive such a packet, we set
- * the server ethernet address
- */
- debug("Got ARP\n");
-
- arp = (ARP_t *)ip;
- if (len < ARP_HDR_SIZE) {
- printf("bad length %d < %d\n", len, ARP_HDR_SIZE);
- return;
- }
- if (ntohs(arp->ar_hrd) != ARP_ETHER)
- return;
- if (ntohs(arp->ar_pro) != PROT_IP)
- return;
- if (arp->ar_hln != 6)
- return;
- if (arp->ar_pln != 4)
- return;
-
- if (NetOurIP == 0)
- return;
-
- if (NetReadIP(&arp->ar_data[16]) != NetOurIP)
- return;
-
- switch (ntohs(arp->ar_op)) {
- case ARPOP_REQUEST:
- /* reply with our IP address */
- debug("Got ARP REQUEST, return our IP\n");
- pkt = (uchar *)et;
- pkt += NetSetEther(pkt, et->et_src, PROT_ARP);
- arp->ar_op = htons(ARPOP_REPLY);
- memcpy(&arp->ar_data[10], &arp->ar_data[0], 6);
- NetCopyIP(&arp->ar_data[16], &arp->ar_data[6]);
- memcpy(&arp->ar_data[0], NetOurEther, 6);
- NetCopyIP(&arp->ar_data[6], &NetOurIP);
- (void) eth_send((uchar *)et,
- (pkt - (uchar *)et) + ARP_HDR_SIZE);
- return;
-
- case ARPOP_REPLY: /* arp reply */
- /* are we waiting for a reply */
- if (!NetArpWaitPacketIP || !NetArpWaitPacketMAC)
- break;
-
-#ifdef CONFIG_KEEP_SERVERADDR
- if (NetServerIP == NetArpWaitPacketIP) {
- char buf[20];
- sprintf(buf, "%pM", arp->ar_data);
- setenv("serveraddr", buf);
- }
-#endif
-
- debug("Got ARP REPLY, set server/gtwy eth addr (%pM)\n",
- arp->ar_data);
-
- tmp = NetReadIP(&arp->ar_data[6]);
-
- /* matched waiting packet's address */
- if (tmp == NetArpWaitReplyIP) {
- debug("Got it\n");
- /* save address for later use */
- memcpy(NetArpWaitPacketMAC,
- &arp->ar_data[0], 6);
-
-#ifdef CONFIG_NETCONSOLE
- (*packetHandler)(0, 0, 0, 0, 0);
-#endif
- /* modify header, and transmit it */
- memcpy(((Ethernet_t *)NetArpWaitTxPacket)->et_dest, NetArpWaitPacketMAC, 6);
- (void) eth_send(NetArpWaitTxPacket,
- NetArpWaitTxPacketSize);
-
- /* no arp request pending now */
- NetArpWaitPacketIP = 0;
- NetArpWaitTxPacketSize = 0;
- NetArpWaitPacketMAC = NULL;
-
- }
- return;
- default:
- debug("Unexpected ARP opcode 0x%x\n",
- ntohs(arp->ar_op));
- return;
- }
+ ArpReceive(et, ip, len);
break;
#ifdef CONFIG_CMD_RARP
case PROT_RARP:
- debug("Got RARP\n");
- arp = (ARP_t *)ip;
- if (len < ARP_HDR_SIZE) {
- printf("bad length %d < %d\n", len, ARP_HDR_SIZE);
- return;
- }
-
- if ((ntohs(arp->ar_op) != RARPOP_REPLY) ||
- (ntohs(arp->ar_hrd) != ARP_ETHER) ||
- (ntohs(arp->ar_pro) != PROT_IP) ||
- (arp->ar_hln != 6) || (arp->ar_pln != 4)) {
-
- puts("invalid RARP header\n");
- } else {
- NetCopyIP(&NetOurIP, &arp->ar_data[16]);
- if (NetServerIP == 0)
- NetCopyIP(&NetServerIP, &arp->ar_data[6]);
- memcpy(NetServerEther, &arp->ar_data[0], 6);
-
- (*packetHandler)(0, 0, 0, 0, 0);
- }
+ rarp_receive(ip, len);
break;
#endif
case PROT_IP:
- debug("Got IP\n");
+ debug_cond(DEBUG_NET_PKT, "Got IP\n");
/* Before we start poking the header, make sure it is there */
- if (len < IP_HDR_SIZE) {
- debug("len bad %d < %lu\n", len, (ulong)IP_HDR_SIZE);
+ if (len < IP_UDP_HDR_SIZE) {
+ debug("len bad %d < %lu\n", len,
+ (ulong)IP_UDP_HDR_SIZE);
return;
}
/* Check the packet length */
if (len < ntohs(ip->ip_len)) {
- printf("len bad %d < %d\n", len, ntohs(ip->ip_len));
+ debug("len bad %d < %d\n", len, ntohs(ip->ip_len));
return;
}
len = ntohs(ip->ip_len);
- debug("len=%d, v=%02x\n", len, ip->ip_hl_v & 0xff);
+ debug_cond(DEBUG_NET_PKT, "len=%d, v=%02x\n",
+ len, ip->ip_hl_v & 0xff);
/* Can't deal with anything except IPv4 */
if ((ip->ip_hl_v & 0xf0) != 0x40)
@@ -1684,15 +1049,15 @@ NetReceive(volatile uchar *inpkt, int len)
if ((ip->ip_hl_v & 0x0f) > 0x05)
return;
/* Check the Checksum of the header */
- if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE_NO_UDP / 2)) {
- puts("checksum bad\n");
+ if (!NetCksumOk((uchar *)ip, IP_HDR_SIZE / 2)) {
+ debug("checksum bad\n");
return;
}
/* If it is not for us, ignore it */
- tmp = NetReadIP(&ip->ip_dst);
- if (NetOurIP && tmp != NetOurIP && tmp != 0xFFFFFFFF) {
+ dst_ip = NetReadIP(&ip->ip_dst);
+ if (NetOurIP && dst_ip != NetOurIP && dst_ip != 0xFFFFFFFF) {
#ifdef CONFIG_MCAST_TFTP
- if (Mcast_addr != tmp)
+ if (Mcast_addr != dst_ip)
#endif
return;
}
@@ -1734,6 +1099,10 @@ NetReceive(volatile uchar *inpkt, int len)
return;
}
+ debug_cond(DEBUG_DEV_PKT,
+ "received UDP (to=%pI4, from=%pI4, len=%d)\n",
+ &dst_ip, &src_ip, len);
+
#ifdef CONFIG_UDP_CHECKSUM
if (ip->udp_xsum != 0) {
ulong xsum;
@@ -1778,19 +1147,19 @@ NetReceive(volatile uchar *inpkt, int len)
#ifdef CONFIG_NETCONSOLE
- nc_input_packet((uchar *)ip + IP_HDR_SIZE,
- ntohs(ip->udp_dst),
- ntohs(ip->udp_src),
- ntohs(ip->udp_len) - 8);
+ nc_input_packet((uchar *)ip + IP_UDP_HDR_SIZE,
+ ntohs(ip->udp_dst),
+ ntohs(ip->udp_src),
+ ntohs(ip->udp_len) - UDP_HDR_SIZE);
#endif
/*
* IP header OK. Pass the packet to the current handler.
*/
- (*packetHandler)((uchar *)ip + IP_HDR_SIZE,
- ntohs(ip->udp_dst),
- src_ip,
- ntohs(ip->udp_src),
- ntohs(ip->udp_len) - 8);
+ (*udp_packet_handler)((uchar *)ip + IP_UDP_HDR_SIZE,
+ ntohs(ip->udp_dst),
+ src_ip,
+ ntohs(ip->udp_src),
+ ntohs(ip->udp_len) - UDP_HDR_SIZE);
break;
}
}
@@ -1855,8 +1224,8 @@ common:
case BOOTP:
case CDP:
case DHCP:
+ case LINKLOCAL:
if (memcmp(NetOurEther, "\0\0\0\0\0\0", 6) == 0) {
- extern int eth_get_dev_index(void);
int num = eth_get_dev_index();
switch (num) {
@@ -1918,9 +1287,9 @@ NetEthHdrSize(void)
}
int
-NetSetEther(volatile uchar *xet, uchar * addr, uint prot)
+NetSetEther(uchar *xet, uchar * addr, uint prot)
{
- Ethernet_t *et = (Ethernet_t *)xet;
+ struct ethernet_hdr *et = (struct ethernet_hdr *)xet;
ushort myvlanid;
myvlanid = ntohs(NetOurVLAN);
@@ -1933,7 +1302,8 @@ NetSetEther(volatile uchar *xet, uchar * addr, uint prot)
et->et_protlen = htons(prot);
return ETHER_HDR_SIZE;
} else {
- VLAN_Ethernet_t *vet = (VLAN_Ethernet_t *)xet;
+ struct vlan_ethernet_hdr *vet =
+ (struct vlan_ethernet_hdr *)xet;
vet->vet_vlan_type = htons(PROT_VLAN);
vet->vet_tag = htons((0 << 5) | (myvlanid & VLAN_IDMASK));
@@ -1942,41 +1312,72 @@ NetSetEther(volatile uchar *xet, uchar * addr, uint prot)
}
}
-void
-NetSetIP(volatile uchar *xip, IPaddr_t dest, int dport, int sport, int len)
+int net_update_ether(struct ethernet_hdr *et, uchar *addr, uint prot)
{
- IP_t *ip = (IP_t *)xip;
+ ushort protlen;
- /*
- * If the data is an odd number of bytes, zero the
- * byte after the last byte so that the checksum
- * will work.
- */
- if (len & 1)
- xip[IP_HDR_SIZE + len] = 0;
+ memcpy(et->et_dest, addr, 6);
+ memcpy(et->et_src, NetOurEther, 6);
+ protlen = ntohs(et->et_protlen);
+ if (protlen == PROT_VLAN) {
+ struct vlan_ethernet_hdr *vet =
+ (struct vlan_ethernet_hdr *)et;
+ vet->vet_type = htons(prot);
+ return VLAN_ETHER_HDR_SIZE;
+ } else if (protlen > 1514) {
+ et->et_protlen = htons(prot);
+ return ETHER_HDR_SIZE;
+ } else {
+ /* 802.2 + SNAP */
+ struct e802_hdr *et802 = (struct e802_hdr *)et;
+ et802->et_prot = htons(prot);
+ return E802_HDR_SIZE;
+ }
+}
+
+void net_set_ip_header(uchar *pkt, IPaddr_t dest, IPaddr_t source)
+{
+ struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt;
/*
- * Construct an IP and UDP header.
- * (need to set no fragment bit - XXX)
+ * Construct an IP header.
*/
/* IP_HDR_SIZE / 4 (not including UDP) */
ip->ip_hl_v = 0x45;
ip->ip_tos = 0;
- ip->ip_len = htons(IP_HDR_SIZE + len);
+ ip->ip_len = htons(IP_HDR_SIZE);
ip->ip_id = htons(NetIPID++);
ip->ip_off = htons(IP_FLAGS_DFRAG); /* Don't fragment */
ip->ip_ttl = 255;
- ip->ip_p = 17; /* UDP */
ip->ip_sum = 0;
/* already in network byte order */
- NetCopyIP((void *)&ip->ip_src, &NetOurIP);
- /* - "" - */
+ NetCopyIP((void *)&ip->ip_src, &source);
+ /* already in network byte order */
NetCopyIP((void *)&ip->ip_dst, &dest);
+}
+
+void net_set_udp_header(uchar *pkt, IPaddr_t dest, int dport, int sport,
+ int len)
+{
+ struct ip_udp_hdr *ip = (struct ip_udp_hdr *)pkt;
+
+ /*
+ * If the data is an odd number of bytes, zero the
+ * byte after the last byte so that the checksum
+ * will work.
+ */
+ if (len & 1)
+ pkt[IP_UDP_HDR_SIZE + len] = 0;
+
+ net_set_ip_header(pkt, dest, NetOurIP);
+ ip->ip_len = htons(IP_UDP_HDR_SIZE + len);
+ ip->ip_p = IPPROTO_UDP;
+ ip->ip_sum = ~NetCksum((uchar *)ip, IP_HDR_SIZE >> 1);
+
ip->udp_src = htons(sport);
ip->udp_dst = htons(dport);
- ip->udp_len = htons(8 + len);
+ ip->udp_len = htons(UDP_HDR_SIZE + len);
ip->udp_xsum = 0;
- ip->ip_sum = ~NetCksum((uchar *)ip, IP_HDR_SIZE_NO_UDP / 2);
}
void copy_filename(char *dst, const char *src, int size)
diff --git a/net/net_rand.c b/net/net_rand.c
new file mode 100644
index 0000000000..5387abadcf
--- /dev/null
+++ b/net/net_rand.c
@@ -0,0 +1,68 @@
+/*
+ * Based on LiMon - BOOTP.
+ *
+ * Copyright 1994, 1995, 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2004 Wolfgang Denk, wd@denx.de
+ */
+
+#include <common.h>
+#include <net.h>
+#include "net_rand.h"
+
+static ulong seed1, seed2;
+
+void srand_mac(void)
+{
+ ulong tst1, tst2, m_mask;
+ ulong m_value = 0;
+ int reg;
+ unsigned char bi_enetaddr[6];
+
+ /* get our mac */
+ eth_getenv_enetaddr("ethaddr", bi_enetaddr);
+
+ debug("BootpRequest => Our Mac: ");
+ for (reg = 0; reg < 6; reg++)
+ debug("%x%c", bi_enetaddr[reg], reg == 5 ? '\n' : ':');
+
+ /* Mac-Manipulation 2 get seed1 */
+ tst1 = 0;
+ tst2 = 0;
+ for (reg = 2; reg < 6; reg++) {
+ tst1 = tst1 << 8;
+ tst1 = tst1 | bi_enetaddr[reg];
+ }
+ for (reg = 0; reg < 2; reg++) {
+ tst2 = tst2 | bi_enetaddr[reg];
+ tst2 = tst2 << 8;
+ }
+
+ seed1 = tst1^tst2;
+
+ /* Mirror seed1*/
+ m_mask = 0x1;
+ for (reg = 1; reg <= 32; reg++) {
+ m_value |= (m_mask & seed1);
+ seed1 = seed1 >> 1;
+ m_value = m_value << 1;
+ }
+ seed1 = m_value;
+ seed2 = 0xb78d0945;
+}
+
+unsigned long rand(void)
+{
+ ulong sum;
+
+ /* Random Number Generator */
+ sum = seed1 + seed2;
+ if (sum < seed1 || sum < seed2)
+ sum++;
+ seed2 = seed1;
+ seed1 = sum;
+
+ return sum;
+}
diff --git a/net/net_rand.h b/net/net_rand.h
new file mode 100644
index 0000000000..c98db64280
--- /dev/null
+++ b/net/net_rand.h
@@ -0,0 +1,26 @@
+/*
+ * Copied from LiMon - BOOTP.
+ *
+ * Copyright 1994, 1995, 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Paolo Scaffardi
+ */
+
+#ifndef __NET_RAND_H__
+#define __NET_RAND_H__
+
+#define RAND_MAX 0xffffffff
+
+/*
+ * Seed the random number generator using the eth0 MAC address
+ */
+void srand_mac(void);
+
+/*
+ * Get a random number (after seeding with MAC address)
+ *
+ * @return random number
+ */
+unsigned long rand(void);
+
+#endif /* __NET_RAND_H__ */
diff --git a/net/nfs.c b/net/nfs.c
index b5b482c3f3..5b9976354c 100644
--- a/net/nfs.c
+++ b/net/nfs.c
@@ -33,15 +33,15 @@
#define NFS_RETRY_COUNT 30
#define NFS_TIMEOUT 2000UL
-static int fs_mounted = 0;
-static unsigned long rpc_id = 0;
+static int fs_mounted;
+static unsigned long rpc_id;
static int nfs_offset = -1;
static int nfs_len;
static char dirfh[NFS_FHSIZE]; /* file handle of directory */
static char filefh[NFS_FHSIZE]; /* file handle of kernel image */
-static int NfsDownloadState;
+static enum net_loop_state nfs_download_state;
static IPaddr_t NfsServerIP;
static int NfsSrvMountPort;
static int NfsSrvNfsPort;
@@ -61,14 +61,14 @@ static char *nfs_filename;
static char *nfs_path;
static char nfs_path_buff[2048];
-static __inline__ int
-store_block (uchar * src, unsigned offset, unsigned len)
+static inline int
+store_block(uchar *src, unsigned offset, unsigned len)
{
ulong newsize = offset + len;
#ifdef CONFIG_SYS_DIRECT_FLASH_NFS
int i, rc = 0;
- for (i=0; i<CONFIG_SYS_MAX_FLASH_BANKS; i++) {
+ for (i = 0; i < CONFIG_SYS_MAX_FLASH_BANKS; i++) {
/* start address in flash? */
if (load_addr + offset >= flash_info[i].start[0]) {
rc = 1;
@@ -77,15 +77,15 @@ store_block (uchar * src, unsigned offset, unsigned len)
}
if (rc) { /* Flash is destination for this packet */
- rc = flash_write ((uchar *)src, (ulong)(load_addr+offset), len);
+ rc = flash_write((uchar *)src, (ulong)(load_addr+offset), len);
if (rc) {
- flash_perror (rc);
+ flash_perror(rc);
return -1;
}
} else
#endif /* CONFIG_SYS_DIRECT_FLASH_NFS */
{
- (void)memcpy ((void *)(load_addr + offset), src, len);
+ (void)memcpy((void *)(load_addr + offset), src, len);
}
if (NetBootFileXferSize < (offset+len))
@@ -94,7 +94,7 @@ store_block (uchar * src, unsigned offset, unsigned len)
}
static char*
-basename (char *path)
+basename(char *path)
{
char *fname;
@@ -110,11 +110,11 @@ basename (char *path)
}
static char*
-dirname (char *path)
+dirname(char *path)
{
char *fname;
- fname = basename (path);
+ fname = basename(path);
--fname;
*fname = '\0';
return path;
@@ -123,14 +123,14 @@ dirname (char *path)
/**************************************************************************
RPC_ADD_CREDENTIALS - Add RPC authentication/verifier entries
**************************************************************************/
-static long *rpc_add_credentials (long *p)
+static long *rpc_add_credentials(long *p)
{
int hl;
int hostnamelen;
char hostname[256];
- strcpy (hostname, "");
- hostnamelen=strlen (hostname);
+ strcpy(hostname, "");
+ hostnamelen = strlen(hostname);
/* Here's the executive summary on authentication requirements of the
* various NFS server implementations: Linux accepts both AUTH_NONE
@@ -148,10 +148,9 @@ static long *rpc_add_credentials (long *p)
*p++ = htonl(hl+20); /* auth length */
*p++ = htonl(0); /* stamp */
*p++ = htonl(hostnamelen); /* hostname string */
- if (hostnamelen & 3) {
+ if (hostnamelen & 3)
*(p + hostnamelen / 4) = 0; /* add zero padding */
- }
- memcpy (p, hostname, hostnamelen);
+ memcpy(p, hostname, hostnamelen);
p += hl / 4;
*p++ = 0; /* uid */
*p++ = 0; /* gid */
@@ -168,7 +167,7 @@ static long *rpc_add_credentials (long *p)
RPC_LOOKUP - Lookup RPC Port numbers
**************************************************************************/
static void
-rpc_req (int rpc_prog, int rpc_proc, uint32_t *data, int datalen)
+rpc_req(int rpc_prog, int rpc_proc, uint32_t *data, int datalen)
{
struct rpc_t pkt;
unsigned long id;
@@ -186,11 +185,12 @@ rpc_req (int rpc_prog, int rpc_proc, uint32_t *data, int datalen)
p = (uint32_t *)&(pkt.u.call.data);
if (datalen)
- memcpy ((char *)p, (char *)data, datalen*sizeof(uint32_t));
+ memcpy((char *)p, (char *)data, datalen*sizeof(uint32_t));
pktlen = (char *)p + datalen*sizeof(uint32_t) - (char *)&pkt;
- memcpy ((char *)NetTxPacket + NetEthHdrSize() + IP_HDR_SIZE, (char *)&pkt, pktlen);
+ memcpy((char *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE,
+ (char *)&pkt, pktlen);
if (rpc_prog == PROG_PORTMAP)
sport = SUNRPC_PORT;
@@ -199,14 +199,15 @@ rpc_req (int rpc_prog, int rpc_proc, uint32_t *data, int datalen)
else
sport = NfsSrvNfsPort;
- NetSendUDPPacket (NetServerEther, NfsServerIP, sport, NfsOurPort, pktlen);
+ NetSendUDPPacket(NetServerEther, NfsServerIP, sport, NfsOurPort,
+ pktlen);
}
/**************************************************************************
RPC_LOOKUP - Lookup RPC Port numbers
**************************************************************************/
static void
-rpc_lookup_req (int prog, int ver)
+rpc_lookup_req(int prog, int ver)
{
uint32_t data[16];
@@ -217,56 +218,56 @@ rpc_lookup_req (int prog, int ver)
data[6] = htonl(17); /* IP_UDP */
data[7] = 0;
- rpc_req (PROG_PORTMAP, PORTMAP_GETPORT, data, 8);
+ rpc_req(PROG_PORTMAP, PORTMAP_GETPORT, data, 8);
}
/**************************************************************************
NFS_MOUNT - Mount an NFS Filesystem
**************************************************************************/
static void
-nfs_mount_req (char *path)
+nfs_mount_req(char *path)
{
uint32_t data[1024];
uint32_t *p;
int len;
int pathlen;
- pathlen = strlen (path);
+ pathlen = strlen(path);
p = &(data[0]);
p = (uint32_t *)rpc_add_credentials((long *)p);
*p++ = htonl(pathlen);
- if (pathlen & 3) *(p + pathlen / 4) = 0;
- memcpy (p, path, pathlen);
+ if (pathlen & 3)
+ *(p + pathlen / 4) = 0;
+ memcpy(p, path, pathlen);
p += (pathlen + 3) / 4;
len = (uint32_t *)p - (uint32_t *)&(data[0]);
- rpc_req (PROG_MOUNT, MOUNT_ADDENTRY, data, len);
+ rpc_req(PROG_MOUNT, MOUNT_ADDENTRY, data, len);
}
/**************************************************************************
NFS_UMOUNTALL - Unmount all our NFS Filesystems on the Server
**************************************************************************/
static void
-nfs_umountall_req (void)
+nfs_umountall_req(void)
{
uint32_t data[1024];
uint32_t *p;
int len;
- if ((NfsSrvMountPort == -1) || (!fs_mounted)) {
+ if ((NfsSrvMountPort == -1) || (!fs_mounted))
/* Nothing mounted, nothing to umount */
return;
- }
p = &(data[0]);
- p = (uint32_t *)rpc_add_credentials ((long *)p);
+ p = (uint32_t *)rpc_add_credentials((long *)p);
len = (uint32_t *)p - (uint32_t *)&(data[0]);
- rpc_req (PROG_MOUNT, MOUNT_UMOUNTALL, data, len);
+ rpc_req(PROG_MOUNT, MOUNT_UMOUNTALL, data, len);
}
/***************************************************************************
@@ -277,65 +278,66 @@ nfs_umountall_req (void)
* so that inside the nfs() function a recursion can be done.
**************************************************************************/
static void
-nfs_readlink_req (void)
+nfs_readlink_req(void)
{
uint32_t data[1024];
uint32_t *p;
int len;
p = &(data[0]);
- p = (uint32_t *)rpc_add_credentials ((long *)p);
+ p = (uint32_t *)rpc_add_credentials((long *)p);
- memcpy (p, filefh, NFS_FHSIZE);
+ memcpy(p, filefh, NFS_FHSIZE);
p += (NFS_FHSIZE / 4);
len = (uint32_t *)p - (uint32_t *)&(data[0]);
- rpc_req (PROG_NFS, NFS_READLINK, data, len);
+ rpc_req(PROG_NFS, NFS_READLINK, data, len);
}
/**************************************************************************
NFS_LOOKUP - Lookup Pathname
**************************************************************************/
static void
-nfs_lookup_req (char *fname)
+nfs_lookup_req(char *fname)
{
uint32_t data[1024];
uint32_t *p;
int len;
int fnamelen;
- fnamelen = strlen (fname);
+ fnamelen = strlen(fname);
p = &(data[0]);
- p = (uint32_t *)rpc_add_credentials ((long *)p);
+ p = (uint32_t *)rpc_add_credentials((long *)p);
- memcpy (p, dirfh, NFS_FHSIZE);
+ memcpy(p, dirfh, NFS_FHSIZE);
p += (NFS_FHSIZE / 4);
*p++ = htonl(fnamelen);
- if (fnamelen & 3) *(p + fnamelen / 4) = 0;
- memcpy (p, fname, fnamelen);
+ if (fnamelen & 3)
+ *(p + fnamelen / 4) = 0;
+ memcpy(p, fname, fnamelen);
p += (fnamelen + 3) / 4;
len = (uint32_t *)p - (uint32_t *)&(data[0]);
- rpc_req (PROG_NFS, NFS_LOOKUP, data, len);
+ rpc_req(PROG_NFS, NFS_LOOKUP, data, len);
}
/**************************************************************************
NFS_READ - Read File on NFS Server
**************************************************************************/
static void
-nfs_read_req (int offset, int readlen)
+nfs_read_req(int offset, int readlen)
{
uint32_t data[1024];
uint32_t *p;
int len;
p = &(data[0]);
- p = (uint32_t *)rpc_add_credentials ((long *)p);
+ p = (uint32_t *)rpc_add_credentials((long *)p);
- memcpy (p, filefh, NFS_FHSIZE);
+ memcpy(p, filefh, NFS_FHSIZE);
p += (NFS_FHSIZE / 4);
*p++ = htonl(offset);
*p++ = htonl(readlen);
@@ -343,7 +345,7 @@ nfs_read_req (int offset, int readlen)
len = (uint32_t *)p - (uint32_t *)&(data[0]);
- rpc_req (PROG_NFS, NFS_READ, data, len);
+ rpc_req(PROG_NFS, NFS_READ, data, len);
}
/**************************************************************************
@@ -351,31 +353,31 @@ RPC request dispatcher
**************************************************************************/
static void
-NfsSend (void)
+NfsSend(void)
{
debug("%s\n", __func__);
switch (NfsState) {
case STATE_PRCLOOKUP_PROG_MOUNT_REQ:
- rpc_lookup_req (PROG_MOUNT, 1);
+ rpc_lookup_req(PROG_MOUNT, 1);
break;
case STATE_PRCLOOKUP_PROG_NFS_REQ:
- rpc_lookup_req (PROG_NFS, 2);
+ rpc_lookup_req(PROG_NFS, 2);
break;
case STATE_MOUNT_REQ:
- nfs_mount_req (nfs_path);
+ nfs_mount_req(nfs_path);
break;
case STATE_UMOUNT_REQ:
- nfs_umountall_req ();
+ nfs_umountall_req();
break;
case STATE_LOOKUP_REQ:
- nfs_lookup_req (nfs_filename);
+ nfs_lookup_req(nfs_filename);
break;
case STATE_READ_REQ:
- nfs_read_req (nfs_offset, nfs_len);
+ nfs_read_req(nfs_offset, nfs_len);
break;
case STATE_READLINK_REQ:
- nfs_readlink_req ();
+ nfs_readlink_req();
break;
}
}
@@ -385,11 +387,11 @@ Handlers for the reply from server
**************************************************************************/
static int
-rpc_lookup_reply (int prog, uchar *pkt, unsigned len)
+rpc_lookup_reply(int prog, uchar *pkt, unsigned len)
{
struct rpc_t rpc_pkt;
- memcpy ((unsigned char *)&rpc_pkt, pkt, len);
+ memcpy((unsigned char *)&rpc_pkt, pkt, len);
debug("%s\n", __func__);
@@ -398,9 +400,8 @@ rpc_lookup_reply (int prog, uchar *pkt, unsigned len)
if (rpc_pkt.u.reply.rstatus ||
rpc_pkt.u.reply.verifier ||
- rpc_pkt.u.reply.astatus) {
+ rpc_pkt.u.reply.astatus)
return -1;
- }
switch (prog) {
case PROG_MOUNT:
@@ -415,13 +416,13 @@ rpc_lookup_reply (int prog, uchar *pkt, unsigned len)
}
static int
-nfs_mount_reply (uchar *pkt, unsigned len)
+nfs_mount_reply(uchar *pkt, unsigned len)
{
struct rpc_t rpc_pkt;
debug("%s\n", __func__);
- memcpy ((unsigned char *)&rpc_pkt, pkt, len);
+ memcpy((unsigned char *)&rpc_pkt, pkt, len);
if (ntohl(rpc_pkt.u.reply.id) != rpc_id)
return -1;
@@ -429,48 +430,46 @@ nfs_mount_reply (uchar *pkt, unsigned len)
if (rpc_pkt.u.reply.rstatus ||
rpc_pkt.u.reply.verifier ||
rpc_pkt.u.reply.astatus ||
- rpc_pkt.u.reply.data[0]) {
+ rpc_pkt.u.reply.data[0])
return -1;
- }
fs_mounted = 1;
- memcpy (dirfh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE);
+ memcpy(dirfh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE);
return 0;
}
static int
-nfs_umountall_reply (uchar *pkt, unsigned len)
+nfs_umountall_reply(uchar *pkt, unsigned len)
{
struct rpc_t rpc_pkt;
debug("%s\n", __func__);
- memcpy ((unsigned char *)&rpc_pkt, pkt, len);
+ memcpy((unsigned char *)&rpc_pkt, pkt, len);
if (ntohl(rpc_pkt.u.reply.id) != rpc_id)
return -1;
if (rpc_pkt.u.reply.rstatus ||
rpc_pkt.u.reply.verifier ||
- rpc_pkt.u.reply.astatus) {
+ rpc_pkt.u.reply.astatus)
return -1;
- }
fs_mounted = 0;
- memset (dirfh, 0, sizeof(dirfh));
+ memset(dirfh, 0, sizeof(dirfh));
return 0;
}
static int
-nfs_lookup_reply (uchar *pkt, unsigned len)
+nfs_lookup_reply(uchar *pkt, unsigned len)
{
struct rpc_t rpc_pkt;
debug("%s\n", __func__);
- memcpy ((unsigned char *)&rpc_pkt, pkt, len);
+ memcpy((unsigned char *)&rpc_pkt, pkt, len);
if (ntohl(rpc_pkt.u.reply.id) != rpc_id)
return -1;
@@ -478,24 +477,23 @@ nfs_lookup_reply (uchar *pkt, unsigned len)
if (rpc_pkt.u.reply.rstatus ||
rpc_pkt.u.reply.verifier ||
rpc_pkt.u.reply.astatus ||
- rpc_pkt.u.reply.data[0]) {
+ rpc_pkt.u.reply.data[0])
return -1;
- }
- memcpy (filefh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE);
+ memcpy(filefh, rpc_pkt.u.reply.data + 1, NFS_FHSIZE);
return 0;
}
static int
-nfs_readlink_reply (uchar *pkt, unsigned len)
+nfs_readlink_reply(uchar *pkt, unsigned len)
{
struct rpc_t rpc_pkt;
int rlen;
debug("%s\n", __func__);
- memcpy ((unsigned char *)&rpc_pkt, pkt, len);
+ memcpy((unsigned char *)&rpc_pkt, pkt, len);
if (ntohl(rpc_pkt.u.reply.id) != rpc_id)
return -1;
@@ -503,34 +501,34 @@ nfs_readlink_reply (uchar *pkt, unsigned len)
if (rpc_pkt.u.reply.rstatus ||
rpc_pkt.u.reply.verifier ||
rpc_pkt.u.reply.astatus ||
- rpc_pkt.u.reply.data[0]) {
+ rpc_pkt.u.reply.data[0])
return -1;
- }
- rlen = ntohl (rpc_pkt.u.reply.data[1]); /* new path length */
+ rlen = ntohl(rpc_pkt.u.reply.data[1]); /* new path length */
if (*((char *)&(rpc_pkt.u.reply.data[2])) != '/') {
int pathlen;
- strcat (nfs_path, "/");
+ strcat(nfs_path, "/");
pathlen = strlen(nfs_path);
- memcpy (nfs_path+pathlen, (uchar *)&(rpc_pkt.u.reply.data[2]), rlen);
+ memcpy(nfs_path + pathlen, (uchar *)&(rpc_pkt.u.reply.data[2]),
+ rlen);
nfs_path[pathlen + rlen] = 0;
} else {
- memcpy (nfs_path, (uchar *)&(rpc_pkt.u.reply.data[2]), rlen);
+ memcpy(nfs_path, (uchar *)&(rpc_pkt.u.reply.data[2]), rlen);
nfs_path[rlen] = 0;
}
return 0;
}
static int
-nfs_read_reply (uchar *pkt, unsigned len)
+nfs_read_reply(uchar *pkt, unsigned len)
{
struct rpc_t rpc_pkt;
int rlen;
debug("%s\n", __func__);
- memcpy ((uchar *)&rpc_pkt, pkt, sizeof(rpc_pkt.u.reply));
+ memcpy((uchar *)&rpc_pkt, pkt, sizeof(rpc_pkt.u.reply));
if (ntohl(rpc_pkt.u.reply.id) != rpc_id)
return -1;
@@ -539,24 +537,22 @@ nfs_read_reply (uchar *pkt, unsigned len)
rpc_pkt.u.reply.verifier ||
rpc_pkt.u.reply.astatus ||
rpc_pkt.u.reply.data[0]) {
- if (rpc_pkt.u.reply.rstatus) {
+ if (rpc_pkt.u.reply.rstatus)
return -9999;
- }
- if (rpc_pkt.u.reply.astatus) {
+ if (rpc_pkt.u.reply.astatus)
return -9999;
- }
- return -ntohl(rpc_pkt.u.reply.data[0]);;
+ return -ntohl(rpc_pkt.u.reply.data[0]);
}
- if ((nfs_offset!=0) && !((nfs_offset) % (NFS_READ_SIZE/2*10*HASHES_PER_LINE))) {
- puts ("\n\t ");
- }
- if (!(nfs_offset % ((NFS_READ_SIZE/2)*10))) {
- putc ('#');
- }
+ if ((nfs_offset != 0) && !((nfs_offset) %
+ (NFS_READ_SIZE / 2 * 10 * HASHES_PER_LINE)))
+ puts("\n\t ");
+ if (!(nfs_offset % ((NFS_READ_SIZE / 2) * 10)))
+ putc('#');
rlen = ntohl(rpc_pkt.u.reply.data[18]);
- if ( store_block ((uchar *)pkt+sizeof(rpc_pkt.u.reply), nfs_offset, rlen) )
+ if (store_block((uchar *)pkt + sizeof(rpc_pkt.u.reply),
+ nfs_offset, rlen))
return -9999;
return rlen;
@@ -567,15 +563,15 @@ Interfaces of U-BOOT
**************************************************************************/
static void
-NfsTimeout (void)
+NfsTimeout(void)
{
- if ( ++NfsTimeoutCount > NFS_RETRY_COUNT ) {
- puts ("\nRetry count exceeded; starting again\n");
- NetStartAgain ();
+ if (++NfsTimeoutCount > NFS_RETRY_COUNT) {
+ puts("\nRetry count exceeded; starting again\n");
+ NetStartAgain();
} else {
puts("T ");
- NetSetTimeout (NFS_TIMEOUT, NfsTimeout);
- NfsSend ();
+ NetSetTimeout(NFS_TIMEOUT, NfsTimeout);
+ NfsSend();
}
}
@@ -586,86 +582,87 @@ NfsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
debug("%s\n", __func__);
- if (dest != NfsOurPort) return;
+ if (dest != NfsOurPort)
+ return;
switch (NfsState) {
case STATE_PRCLOOKUP_PROG_MOUNT_REQ:
- rpc_lookup_reply (PROG_MOUNT, pkt, len);
+ rpc_lookup_reply(PROG_MOUNT, pkt, len);
NfsState = STATE_PRCLOOKUP_PROG_NFS_REQ;
- NfsSend ();
+ NfsSend();
break;
case STATE_PRCLOOKUP_PROG_NFS_REQ:
- rpc_lookup_reply (PROG_NFS, pkt, len);
+ rpc_lookup_reply(PROG_NFS, pkt, len);
NfsState = STATE_MOUNT_REQ;
- NfsSend ();
+ NfsSend();
break;
case STATE_MOUNT_REQ:
if (nfs_mount_reply(pkt, len)) {
- puts ("*** ERROR: Cannot mount\n");
+ puts("*** ERROR: Cannot mount\n");
/* just to be sure... */
NfsState = STATE_UMOUNT_REQ;
- NfsSend ();
+ NfsSend();
} else {
NfsState = STATE_LOOKUP_REQ;
- NfsSend ();
+ NfsSend();
}
break;
case STATE_UMOUNT_REQ:
if (nfs_umountall_reply(pkt, len)) {
- puts ("*** ERROR: Cannot umount\n");
- NetState = NETLOOP_FAIL;
+ puts("*** ERROR: Cannot umount\n");
+ net_set_state(NETLOOP_FAIL);
} else {
- puts ("\ndone\n");
- NetState = NfsDownloadState;
+ puts("\ndone\n");
+ net_set_state(nfs_download_state);
}
break;
case STATE_LOOKUP_REQ:
if (nfs_lookup_reply(pkt, len)) {
- puts ("*** ERROR: File lookup fail\n");
+ puts("*** ERROR: File lookup fail\n");
NfsState = STATE_UMOUNT_REQ;
- NfsSend ();
+ NfsSend();
} else {
NfsState = STATE_READ_REQ;
nfs_offset = 0;
nfs_len = NFS_READ_SIZE;
- NfsSend ();
+ NfsSend();
}
break;
case STATE_READLINK_REQ:
if (nfs_readlink_reply(pkt, len)) {
- puts ("*** ERROR: Symlink fail\n");
+ puts("*** ERROR: Symlink fail\n");
NfsState = STATE_UMOUNT_REQ;
- NfsSend ();
+ NfsSend();
} else {
debug("Symlink --> %s\n", nfs_path);
- nfs_filename = basename (nfs_path);
- nfs_path = dirname (nfs_path);
+ nfs_filename = basename(nfs_path);
+ nfs_path = dirname(nfs_path);
NfsState = STATE_MOUNT_REQ;
- NfsSend ();
+ NfsSend();
}
break;
case STATE_READ_REQ:
- rlen = nfs_read_reply (pkt, len);
- NetSetTimeout (NFS_TIMEOUT, NfsTimeout);
+ rlen = nfs_read_reply(pkt, len);
+ NetSetTimeout(NFS_TIMEOUT, NfsTimeout);
if (rlen > 0) {
nfs_offset += rlen;
- NfsSend ();
- }
- else if ((rlen == -NFSERR_ISDIR)||(rlen == -NFSERR_INVAL)) {
+ NfsSend();
+ } else if ((rlen == -NFSERR_ISDIR) || (rlen == -NFSERR_INVAL)) {
/* symbolic link */
NfsState = STATE_READLINK_REQ;
- NfsSend ();
+ NfsSend();
} else {
- if ( ! rlen ) NfsDownloadState = NETLOOP_SUCCESS;
+ if (!rlen)
+ nfs_download_state = NETLOOP_SUCCESS;
NfsState = STATE_UMOUNT_REQ;
- NfsSend ();
+ NfsSend();
}
break;
}
@@ -673,17 +670,17 @@ NfsHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src, unsigned len)
void
-NfsStart (void)
+NfsStart(void)
{
debug("%s\n", __func__);
- NfsDownloadState = NETLOOP_FAIL;
+ nfs_download_state = NETLOOP_FAIL;
NfsServerIP = NetServerIP;
nfs_path = (char *)nfs_path_buff;
if (nfs_path == NULL) {
- NetState = NETLOOP_FAIL;
- puts ("*** ERROR: Fail allocate memory\n");
+ net_set_state(NETLOOP_FAIL);
+ puts("*** ERROR: Fail allocate memory\n");
return;
}
@@ -692,29 +689,29 @@ NfsStart (void)
NetOurIP & 0xFF,
(NetOurIP >> 8) & 0xFF,
(NetOurIP >> 16) & 0xFF,
- (NetOurIP >> 24) & 0xFF );
- strcpy (nfs_path, default_filename);
+ (NetOurIP >> 24) & 0xFF);
+ strcpy(nfs_path, default_filename);
- printf ("*** Warning: no boot file name; using '%s'\n",
+ printf("*** Warning: no boot file name; using '%s'\n",
nfs_path);
} else {
- char *p=BootFile;
+ char *p = BootFile;
- p = strchr (p, ':');
+ p = strchr(p, ':');
if (p != NULL) {
- NfsServerIP = string_to_ip (BootFile);
+ NfsServerIP = string_to_ip(BootFile);
++p;
- strcpy (nfs_path, p);
+ strcpy(nfs_path, p);
} else {
- strcpy (nfs_path, BootFile);
+ strcpy(nfs_path, BootFile);
}
}
- nfs_filename = basename (nfs_path);
- nfs_path = dirname (nfs_path);
+ nfs_filename = basename(nfs_path);
+ nfs_path = dirname(nfs_path);
- printf ("Using %s device\n", eth_get_name());
+ printf("Using %s device\n", eth_get_name());
printf("File transfer via NFS from server %pI4"
"; our IP address is %pI4", &NfsServerIP, &NetOurIP);
@@ -725,19 +722,20 @@ NfsStart (void)
IPaddr_t ServerNet = NetServerIP & NetOurSubnetMask;
if (OurNet != ServerNet)
- printf("; sending through gateway %pI4", &NetOurGatewayIP);
+ printf("; sending through gateway %pI4",
+ &NetOurGatewayIP);
}
- printf ("\nFilename '%s/%s'.", nfs_path, nfs_filename);
+ printf("\nFilename '%s/%s'.", nfs_path, nfs_filename);
if (NetBootFileSize) {
- printf (" Size is 0x%x Bytes = ", NetBootFileSize<<9);
- print_size (NetBootFileSize<<9, "");
+ printf(" Size is 0x%x Bytes = ", NetBootFileSize<<9);
+ print_size(NetBootFileSize<<9, "");
}
- printf ("\nLoad address: 0x%lx\n"
+ printf("\nLoad address: 0x%lx\n"
"Loading: *\b", load_addr);
- NetSetTimeout (NFS_TIMEOUT, NfsTimeout);
- NetSetHandler (NfsHandler);
+ NetSetTimeout(NFS_TIMEOUT, NfsTimeout);
+ net_set_udp_handler(NfsHandler);
NfsTimeoutCount = 0;
NfsState = STATE_PRCLOOKUP_PROG_MOUNT_REQ;
@@ -747,7 +745,7 @@ NfsStart (void)
NfsOurPort = 1000;
/* zero out server ether in case the server ip has changed */
- memset (NetServerEther, 0, 6);
+ memset(NetServerEther, 0, 6);
- NfsSend ();
+ NfsSend();
}
diff --git a/net/nfs.h b/net/nfs.h
index de8a0c64c0..a5a1b432e6 100644
--- a/net/nfs.h
+++ b/net/nfs.h
@@ -72,7 +72,7 @@ struct rpc_t {
} reply;
} u;
};
-extern void NfsStart (void); /* Begin NFS */
+extern void NfsStart(void); /* Begin NFS */
/**********************************************************************/
diff --git a/net/ping.c b/net/ping.c
new file mode 100644
index 0000000000..0710b9228d
--- /dev/null
+++ b/net/ping.c
@@ -0,0 +1,115 @@
+/*
+ * Copied from Linux Monitor (LiMon) - Networking.
+ *
+ * Copyright 1994 - 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2002 Wolfgang Denk, wd@denx.de
+ */
+
+#include "ping.h"
+#include "arp.h"
+
+static ushort PingSeqNo;
+
+/* The ip address to ping */
+IPaddr_t NetPingIP;
+
+static void set_icmp_header(uchar *pkt, IPaddr_t dest)
+{
+ /*
+ * Construct an IP and ICMP header.
+ */
+ struct ip_hdr *ip = (struct ip_hdr *)pkt;
+ struct icmp_hdr *icmp = (struct icmp_hdr *)(pkt + IP_HDR_SIZE);
+
+ net_set_ip_header(pkt, dest, NetOurIP);
+
+ ip->ip_len = htons(IP_ICMP_HDR_SIZE);
+ ip->ip_p = IPPROTO_ICMP;
+ ip->ip_sum = ~NetCksum((uchar *)ip, IP_HDR_SIZE >> 1);
+
+ icmp->type = ICMP_ECHO_REQUEST;
+ icmp->code = 0;
+ icmp->checksum = 0;
+ icmp->un.echo.id = 0;
+ icmp->un.echo.sequence = htons(PingSeqNo++);
+ icmp->checksum = ~NetCksum((uchar *)icmp, ICMP_HDR_SIZE >> 1);
+}
+
+static int ping_send(void)
+{
+ uchar *pkt;
+ int eth_hdr_size;
+
+ /* XXX always send arp request */
+
+ debug_cond(DEBUG_DEV_PKT, "sending ARP for %pI4\n", &NetPingIP);
+
+ NetArpWaitPacketIP = NetPingIP;
+
+ eth_hdr_size = NetSetEther(NetTxPacket, NetEtherNullAddr, PROT_IP);
+ pkt = (uchar *)NetTxPacket + eth_hdr_size;
+
+ set_icmp_header(pkt, NetPingIP);
+
+ /* size of the waiting packet */
+ NetArpWaitTxPacketSize = eth_hdr_size + IP_ICMP_HDR_SIZE;
+
+ /* and do the ARP request */
+ NetArpWaitTry = 1;
+ NetArpWaitTimerStart = get_timer(0);
+ ArpRequest();
+ return 1; /* waiting */
+}
+
+static void ping_timeout(void)
+{
+ eth_halt();
+ net_set_state(NETLOOP_FAIL); /* we did not get the reply */
+}
+
+void ping_start(void)
+{
+ printf("Using %s device\n", eth_get_name());
+ NetSetTimeout(10000UL, ping_timeout);
+
+ ping_send();
+}
+
+void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len)
+{
+ struct icmp_hdr *icmph = (struct icmp_hdr *)&ip->udp_src;
+ IPaddr_t src_ip;
+ int eth_hdr_size;
+
+ switch (icmph->type) {
+ case ICMP_ECHO_REPLY:
+ src_ip = NetReadIP((void *)&ip->ip_src);
+ if (src_ip == NetPingIP)
+ net_set_state(NETLOOP_SUCCESS);
+ return;
+ case ICMP_ECHO_REQUEST:
+ eth_hdr_size = net_update_ether(et, et->et_src, PROT_IP);
+
+ debug_cond(DEBUG_DEV_PKT, "Got ICMP ECHO REQUEST, return "
+ "%d bytes\n", eth_hdr_size + len);
+
+ ip->ip_sum = 0;
+ ip->ip_off = 0;
+ NetCopyIP((void *)&ip->ip_dst, &ip->ip_src);
+ NetCopyIP((void *)&ip->ip_src, &NetOurIP);
+ ip->ip_sum = ~NetCksum((uchar *)ip,
+ IP_HDR_SIZE >> 1);
+
+ icmph->type = ICMP_ECHO_REPLY;
+ icmph->checksum = 0;
+ icmph->checksum = ~NetCksum((uchar *)icmph,
+ (len - IP_HDR_SIZE) >> 1);
+ NetSendPacket((uchar *)et, eth_hdr_size + len);
+ return;
+/* default:
+ return;*/
+ }
+}
diff --git a/net/ping.h b/net/ping.h
new file mode 100644
index 0000000000..fd8d8d9778
--- /dev/null
+++ b/net/ping.h
@@ -0,0 +1,34 @@
+/*
+ * Copied from Linux Monitor (LiMon) - Networking.
+ *
+ * Copyright 1994 - 2000 Neil Russell.
+ * (See License)
+ * Copyright 2000 Roland Borde
+ * Copyright 2000 Paolo Scaffardi
+ * Copyright 2000-2002 Wolfgang Denk, wd@denx.de
+ */
+
+#if defined(CONFIG_CMD_PING)
+
+#ifndef __PING_H__
+#define __PING_H__
+
+#include <common.h>
+#include <net.h>
+
+/*
+ * Initialize ping (beginning of netloop)
+ */
+void ping_start(void);
+
+/*
+ * Deal with the receipt of a ping packet
+ *
+ * @param et Ethernet header in packet
+ * @param ip IP header in the same packet
+ * @param len Packet length
+ */
+void ping_receive(struct ethernet_hdr *et, struct ip_udp_hdr *ip, int len);
+
+#endif /* __PING_H__ */
+#endif
diff --git a/net/rarp.c b/net/rarp.c
index 097f970f44..49185b4e14 100644
--- a/net/rarp.c
+++ b/net/rarp.c
@@ -29,73 +29,88 @@
#include "rarp.h"
#include "tftp.h"
-#define TIMEOUT 5000UL /* Milliseconds before trying BOOTP again */
+#define TIMEOUT 5000UL /* Milliseconds before trying BOOTP again */
#ifndef CONFIG_NET_RETRY_COUNT
-# define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
+#define TIMEOUT_COUNT 5 /* # of timeouts before giving up */
#else
-# define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
+#define TIMEOUT_COUNT (CONFIG_NET_RETRY_COUNT)
#endif
-
-int RarpTry;
+int RarpTry;
/*
* Handle a RARP received packet.
*/
-static void
-RarpHandler(uchar *dummi0, unsigned dummi1, IPaddr_t sip, unsigned dummi2,
- unsigned dummi3)
+void rarp_receive(struct ip_udp_hdr *ip, unsigned len)
{
- debug("Got good RARP\n");
- net_auto_load();
+ struct arp_hdr *arp;
+
+ debug_cond(DEBUG_NET_PKT, "Got RARP\n");
+ arp = (struct arp_hdr *)ip;
+ if (len < ARP_HDR_SIZE) {
+ printf("bad length %d < %d\n", len, ARP_HDR_SIZE);
+ return;
+ }
+
+ if ((ntohs(arp->ar_op) != RARPOP_REPLY) ||
+ (ntohs(arp->ar_hrd) != ARP_ETHER) ||
+ (ntohs(arp->ar_pro) != PROT_IP) ||
+ (arp->ar_hln != 6) || (arp->ar_pln != 4)) {
+
+ puts("invalid RARP header\n");
+ } else {
+ NetCopyIP(&NetOurIP, &arp->ar_data[16]);
+ if (NetServerIP == 0)
+ NetCopyIP(&NetServerIP, &arp->ar_data[6]);
+ memcpy(NetServerEther, &arp->ar_data[0], 6);
+ debug_cond(DEBUG_DEV_PKT, "Got good RARP\n");
+ net_auto_load();
+ }
}
/*
* Timeout on BOOTP request.
*/
-static void
-RarpTimeout(void)
+static void RarpTimeout(void)
{
if (RarpTry >= TIMEOUT_COUNT) {
- puts ("\nRetry count exceeded; starting again\n");
- NetStartAgain ();
+ puts("\nRetry count exceeded; starting again\n");
+ NetStartAgain();
} else {
- NetSetTimeout (TIMEOUT, RarpTimeout);
- RarpRequest ();
+ NetSetTimeout(TIMEOUT, RarpTimeout);
+ RarpRequest();
}
}
-void
-RarpRequest (void)
+void RarpRequest(void)
{
- int i;
- volatile uchar *pkt;
- ARP_t * rarp;
+ uchar *pkt;
+ struct arp_hdr *rarp;
+ int eth_hdr_size;
printf("RARP broadcast %d\n", ++RarpTry);
pkt = NetTxPacket;
- pkt += NetSetEther(pkt, NetBcastAddr, PROT_RARP);
+ eth_hdr_size = NetSetEther(pkt, NetBcastAddr, PROT_RARP);
+ pkt += eth_hdr_size;
- rarp = (ARP_t *)pkt;
+ rarp = (struct arp_hdr *)pkt;
- rarp->ar_hrd = htons (ARP_ETHER);
- rarp->ar_pro = htons (PROT_IP);
+ rarp->ar_hrd = htons(ARP_ETHER);
+ rarp->ar_pro = htons(PROT_IP);
rarp->ar_hln = 6;
rarp->ar_pln = 4;
- rarp->ar_op = htons (RARPOP_REQUEST);
- memcpy (&rarp->ar_data[0], NetOurEther, 6); /* source ET addr */
- memcpy (&rarp->ar_data[6], &NetOurIP, 4); /* source IP addr */
- memcpy (&rarp->ar_data[10], NetOurEther, 6); /* dest ET addr = source ET addr ??*/
- /* dest. IP addr set to broadcast */
- for (i = 0; i <= 3; i++) {
- rarp->ar_data[16 + i] = 0xff;
- }
+ rarp->ar_op = htons(RARPOP_REQUEST);
+ memcpy(&rarp->ar_data[0], NetOurEther, 6); /* source ET addr */
+ memcpy(&rarp->ar_data[6], &NetOurIP, 4); /* source IP addr */
+ /* dest ET addr = source ET addr ??*/
+ memcpy(&rarp->ar_data[10], NetOurEther, 6);
+ /* dest IP addr set to broadcast */
+ memset(&rarp->ar_data[16], 0xff, 4);
- NetSendPacket(NetTxPacket, (pkt - NetTxPacket) + ARP_HDR_SIZE);
+ NetSendPacket(NetTxPacket, eth_hdr_size + ARP_HDR_SIZE);
NetSetTimeout(TIMEOUT, RarpTimeout);
- NetSetHandler(RarpHandler);
}
diff --git a/net/rarp.h b/net/rarp.h
index 0c16d46668..ebd748ea4e 100644
--- a/net/rarp.h
+++ b/net/rarp.h
@@ -21,24 +21,25 @@
* MA 02111-1307 USA
*/
+#if defined(CONFIG_CMD_RARP)
#ifndef __RARP_H__
#define __RARP_H__
-#ifndef __NET_H__
#include <net.h>
-#endif /* __NET_H__ */
-
/**********************************************************************/
/*
* Global functions and variables.
*/
-extern int RarpTry;
+extern int RarpTry;
-extern void RarpRequest (void); /* Send a RARP request */
+/* Process the receipt of a RARP packet */
+extern void rarp_receive(struct ip_udp_hdr *ip, unsigned len);
+extern void RarpRequest(void); /* Send a RARP request */
/**********************************************************************/
#endif /* __RARP_H__ */
+#endif
diff --git a/net/sntp.c b/net/sntp.c
index 82f2fe6cd1..5de19526e6 100644
--- a/net/sntp.c
+++ b/net/sntp.c
@@ -17,7 +17,7 @@
static int SntpOurPort;
static void
-SntpSend (void)
+SntpSend(void)
{
struct sntp_pkt_t pkt;
int pktlen = SNTP_PACKET_LEN;
@@ -25,25 +25,27 @@ SntpSend (void)
debug("%s\n", __func__);
- memset (&pkt, 0, sizeof(pkt));
+ memset(&pkt, 0, sizeof(pkt));
pkt.li = NTP_LI_NOLEAP;
pkt.vn = NTP_VERSION;
pkt.mode = NTP_MODE_CLIENT;
- memcpy ((char *)NetTxPacket + NetEthHdrSize() + IP_HDR_SIZE, (char *)&pkt, pktlen);
+ memcpy((char *)NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE,
+ (char *)&pkt, pktlen);
SntpOurPort = 10000 + (get_timer(0) % 4096);
sport = NTP_SERVICE_PORT;
- NetSendUDPPacket (NetServerEther, NetNtpServerIP, sport, SntpOurPort, pktlen);
+ NetSendUDPPacket(NetServerEther, NetNtpServerIP, sport, SntpOurPort,
+ pktlen);
}
static void
-SntpTimeout (void)
+SntpTimeout(void)
{
- puts ("Timeout\n");
- NetState = NETLOOP_FAIL;
+ puts("Timeout\n");
+ net_set_state(NETLOOP_FAIL);
return;
}
@@ -57,33 +59,34 @@ SntpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
debug("%s\n", __func__);
- if (dest != SntpOurPort) return;
+ if (dest != SntpOurPort)
+ return;
/*
* As the RTC's used in U-Boot sepport second resolution only
* we simply ignore the sub-second field.
*/
- memcpy (&seconds, &rpktp->transmit_timestamp, sizeof(ulong));
+ memcpy(&seconds, &rpktp->transmit_timestamp, sizeof(ulong));
to_tm(ntohl(seconds) - 2208988800UL + NetTimeOffset, &tm);
#if defined(CONFIG_CMD_DATE)
- rtc_set (&tm);
+ rtc_set(&tm);
#endif
- printf ("Date: %4d-%02d-%02d Time: %2d:%02d:%02d\n",
+ printf("Date: %4d-%02d-%02d Time: %2d:%02d:%02d\n",
tm.tm_year, tm.tm_mon, tm.tm_mday,
tm.tm_hour, tm.tm_min, tm.tm_sec);
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
}
void
-SntpStart (void)
+SntpStart(void)
{
debug("%s\n", __func__);
- NetSetTimeout (SNTP_TIMEOUT, SntpTimeout);
- NetSetHandler(SntpHandler);
- memset (NetServerEther, 0, 6);
+ NetSetTimeout(SNTP_TIMEOUT, SntpTimeout);
+ net_set_udp_handler(SntpHandler);
+ memset(NetServerEther, 0, sizeof(NetServerEther));
- SntpSend ();
+ SntpSend();
}
diff --git a/net/sntp.h b/net/sntp.h
index 8a097bfa38..1d0046e94b 100644
--- a/net/sntp.h
+++ b/net/sntp.h
@@ -56,6 +56,6 @@ struct sntp_pkt_t {
unsigned long long transmit_timestamp;
};
-extern void SntpStart (void); /* Begin SNTP */
+extern void SntpStart(void); /* Begin SNTP */
#endif /* __SNTP_H__ */
diff --git a/net/tftp.c b/net/tftp.c
index 7aa3e23c95..b2e08b4bfb 100644
--- a/net/tftp.c
+++ b/net/tftp.c
@@ -11,6 +11,9 @@
#include <net.h>
#include "tftp.h"
#include "bootp.h"
+#ifdef CONFIG_SYS_DIRECT_FLASH_TFTP
+#include <flash.h>
+#endif
/* Well known TFTP port # */
#define WELL_KNOWN_PORT 69
@@ -112,10 +115,6 @@ static char default_filename[DEFAULT_NAME_LEN];
static char tftp_filename[MAX_LEN];
-#ifdef CONFIG_SYS_DIRECT_FLASH_TFTP
-extern flash_info_t flash_info[];
-#endif
-
/* 512 is poor choice for ethernet, MTU is typically 1500.
* Minus eth.hdrs thats 1468. Can get 2x better throughput with
* almost-MTU block sizes. At least try... fall back to 512 if need be.
@@ -137,7 +136,6 @@ static unsigned *Bitmap;
static int PrevBitmapHole, Mapsize = MTFTP_BITMAPSIZE;
static uchar ProhibitMcast, MasterClient;
static uchar Multicast;
-extern IPaddr_t Mcast_addr;
static int Mcast_port;
static ulong TftpEndingBlock; /* can get 'last' block before done..*/
@@ -157,7 +155,7 @@ mcast_cleanup(void)
#endif /* CONFIG_MCAST_TFTP */
-static __inline__ void
+static inline void
store_block(unsigned block, uchar *src, unsigned len)
{
ulong offset = block * TftpBlkSize + TftpBlockWrapOffset;
@@ -179,11 +177,10 @@ store_block(unsigned block, uchar *src, unsigned len)
rc = flash_write((char *)src, (ulong)(load_addr+offset), len);
if (rc) {
flash_perror(rc);
- NetState = NETLOOP_FAIL;
+ net_set_state(NETLOOP_FAIL);
return;
}
- }
- else
+ } else
#endif /* CONFIG_SYS_DIRECT_FLASH_TFTP */
{
(void)memcpy((void *)(load_addr + offset), src, len);
@@ -303,16 +300,16 @@ static void tftp_complete(void)
}
#endif
puts("\ndone\n");
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
}
static void
TftpSend(void)
{
uchar *pkt;
- volatile uchar *xp;
- int len = 0;
- volatile ushort *s;
+ uchar *xp;
+ int len = 0;
+ ushort *s;
#ifdef CONFIG_MCAST_TFTP
/* Multicast TFTP.. non-MasterClients do not ACK data. */
@@ -325,7 +322,7 @@ TftpSend(void)
* We will always be sending some sort of packet, so
* cobble together the packet headers now.
*/
- pkt = (uchar *)(NetTxPacket + NetEthHdrSize() + IP_HDR_SIZE);
+ pkt = NetTxPacket + NetEthHdrSize() + IP_UDP_HDR_SIZE;
switch (TftpState) {
case STATE_SEND_RRQ:
@@ -357,12 +354,14 @@ TftpSend(void)
0, TftpBlkSizeOption, 0);
#ifdef CONFIG_MCAST_TFTP
/* Check all preconditions before even trying the option */
- if (!ProhibitMcast
- && (Bitmap = malloc(Mapsize))
- && eth_get_dev()->mcast) {
- free(Bitmap);
- Bitmap = NULL;
- pkt += sprintf((char *)pkt, "multicast%c%c", 0, 0);
+ if (!ProhibitMcast) {
+ Bitmap = malloc(Mapsize);
+ if (Bitmap && eth_get_dev()->mcast) {
+ free(Bitmap);
+ Bitmap = NULL;
+ pkt += sprintf((char *)pkt, "multicast%c%c",
+ 0, 0);
+ }
}
#endif /* CONFIG_MCAST_TFTP */
len = pkt - xp;
@@ -628,10 +627,9 @@ TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
if (MasterClient && (TftpBlock >= TftpEndingBlock)) {
puts("\nMulticast tftp done\n");
mcast_cleanup();
- NetState = NETLOOP_SUCCESS;
+ net_set_state(NETLOOP_SUCCESS);
}
- }
- else
+ } else
#endif
if (len < TftpBlkSize)
tftp_complete();
@@ -646,7 +644,7 @@ TftpHandler(uchar *pkt, unsigned dest, IPaddr_t sip, unsigned src,
case TFTP_ERR_ACCESS_DENIED:
puts("Not retrying...\n");
eth_halt();
- NetState = NETLOOP_FAIL;
+ net_set_state(NETLOOP_FAIL);
break;
case TFTP_ERR_UNDEFINED:
case TFTP_ERR_DISK_FULL:
@@ -780,7 +778,7 @@ void TftpStart(enum proto_t protocol)
TftpTimeoutCountMax = TftpRRQTimeoutCountMax;
NetSetTimeout(TftpTimeoutMSecs, TftpTimeout);
- NetSetHandler(TftpHandler);
+ net_set_udp_handler(TftpHandler);
#ifdef CONFIG_CMD_TFTPPUT
net_set_icmp_handler(icmp_handler);
#endif
@@ -842,7 +840,7 @@ TftpStartServer(void)
#endif
TftpState = STATE_RECV_WRQ;
- NetSetHandler(TftpHandler);
+ net_set_udp_handler(TftpHandler);
}
#endif /* CONFIG_CMD_TFTPSRV */
diff --git a/net/tftp.h b/net/tftp.h
index c51aa253c4..18e4c9c25d 100644
--- a/net/tftp.h
+++ b/net/tftp.h
@@ -19,7 +19,7 @@
void TftpStart(enum proto_t protocol); /* Begin TFTP get/put */
#ifdef CONFIG_CMD_TFTPSRV
-extern void TftpStartServer(void); /* Wait for incoming TFTP put */
+extern void TftpStartServer(void); /* Wait for incoming TFTP put */
#endif
/**********************************************************************/
diff --git a/pdl/common/Makefile b/pdl/common/Makefile
new file mode 100644
index 0000000000..527445b73a
--- /dev/null
+++ b/pdl/common/Makefile
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2000-2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+CPPFLAGS += -I ../include/
+CFLAGS += -I ../include -mno-unaligned-access
+LIB := $(obj)libpdl_common.o
+
+COBJS-y := packet.o pdl_channel.o pdl_channel_usb.o pdl_debug.o pdl_engine.o pdl.o
+
+COBJS := $(COBJS-y)
+SRCS := $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+
+all: $(LIB)
+
+$(LIB): $(obj).depend $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/pdl/common/packet.c b/pdl/common/packet.c
new file mode 100644
index 0000000000..669d83cc52
--- /dev/null
+++ b/pdl/common/packet.c
@@ -0,0 +1,301 @@
+//#define DEBUG
+
+#include <asm/types.h>
+#include <common.h>
+#include "packet.h"
+#include "pdl_channel.h"
+#include <linux/string.h>
+#include "pdl_debug.h"
+#include "cmd_defs.h"
+#include <asm/unaligned.h>
+
+static enum {
+ PKT_IDLE = 0,
+ PKT_HEAD,
+ PKT_DATA,
+ PKT_ERROR
+} pkt_state;
+
+const static char *pdl_device_rsp[] = {
+ [ACK] = "device ack",
+ [PACKET_ERROR] = "packet error",
+ [INVALID_CMD] = "invalid cmd",
+ [UNKNOWN_CMD] = "unknown cmd",
+ [INVALID_ADDR] = "invalid address",
+ [INVALID_BAUDRATE] = "invalid baudrate",
+ [INVALID_PARTITION] = "invalid partition",
+ [INVALID_SIZE] = "invalid size",
+ [WAIT_TIMEOUT] = "wait timeout",
+ [VERIFY_ERROR] = "verify error",
+ [CHECKSUM_ERROR] = "checksum error",
+ [OPERATION_FAILED] = "operation failed",
+ [DEVICE_ERROR] = "device error",
+ [NO_MEMORY] = "no memory",
+ [DEVICE_INCOMPATIBLE] = "device incompatible",
+ [HW_TEST_ERROR] = "hardware test error",
+ [MD5_ERROR] = "md5 error",
+ [ACK_AGAIN_ERASE] = "ack again erase",
+ [ACK_AGAIN_FLASH] = "ack again flash",
+ [MAX_RSP] = "max response",
+};
+
+static int pkt_error = 0;
+static unsigned char cmd_buf[PDL_MAX_PKT_SIZE] __attribute__((__aligned__(32)));
+static struct pdl_channel *channel;
+
+int pdl_init_packet_channel(void)
+{
+ channel = pdl_get_channel();
+ return 0;
+}
+
+/*
+ * return value: 1, get packet ok;
+ * 0, not a host packet;
+ * -1, something error, check pkt_error for true cause;
+ * -2, don't get any packet
+ */
+int pdl_get_cmd_packet(struct pdl_packet *pkt)
+{
+ u32 pkt_size = 0;
+ u32 hdrsz = sizeof(struct packet_header);
+ u32 cmd_hdrsz = sizeof(struct command_header);
+ u32 bufsz = 0, totalsz = 0;
+ int i, wait = 0;
+
+ if (!pkt) {
+ pdl_error("packet error\n");
+ return -1;
+ }
+
+ if (!channel->tstc())
+ return -2;
+
+ /* looking for HOST_PACKET_TAG 0xAE */
+ while (1) {
+ bufsz = channel->tstc();
+ if (!bufsz)
+ return -2;
+ channel->read(cmd_buf, bufsz);
+ if (cmd_buf[0] == HOST_PACKET_TAG) {
+ /*pdl_info("Found host packet tag, %u bytes\n", bufsz);*/
+ break;
+ } else {
+ pdl_dbg("Drop a %u bytes packet:", bufsz);
+ for(i = 0; i < 8; i++)
+ pdl_dbg(" %02x", cmd_buf[i]);
+ pdl_dbg("\n");
+ }
+ }
+ totalsz = bufsz;
+
+ /* is a valid packet header? */
+ if (totalsz < hdrsz) {
+ pdl_error("Invaild packet, it's too small (%u bytes)\n", totalsz);
+ pkt_state = PKT_IDLE;
+ return -2;
+ }
+
+ /* packet header check */
+ pkt_state = PKT_HEAD;
+ memcpy(&pkt_size, &cmd_buf[1], 4);
+ if (cmd_buf[5] != HOST_PACKET_FLOWID ||
+ pkt_size > PDL_MAX_PKT_SIZE ||
+ pkt_size < sizeof(u32)) {
+ pdl_error("Invalid packet, flowid 0x%x, pkt_size %u\n",
+ cmd_buf[5], pkt_size);
+ pdl_dbg("packet data:");
+ for (i = 0; i < 8; i++)
+ pdl_dbg(" %02x", cmd_buf[i]);
+ pdl_dbg("\n");
+
+ pkt_state = PKT_IDLE;
+ return -2;
+ }
+ /*pdl_info("Got command packet, packet size %u bytes\n", pkt_size);*/
+
+ /* get all data */
+ if (pkt_size > totalsz - hdrsz) {
+ wait = 0;
+ while (1) {
+ bufsz = channel->tstc();
+ if (bufsz) {
+ u32 last = pkt_size - (totalsz - hdrsz);
+ bufsz = (bufsz > last) ? last : bufsz;
+ channel->read(&cmd_buf[totalsz], bufsz);
+ totalsz += bufsz;
+ wait = 0;
+ if (bufsz == last)
+ break;
+ } else {
+ if (wait++ >= 1000) {
+ pdl_error("wait packet data timeout, got %u bytes, need %u\n",
+ totalsz - hdrsz, pkt_size);
+ pkt_error = PACKET_ERROR;
+ return -1;
+ }
+ udelay(1000);
+ }
+ }
+ }
+
+ pkt_state = PKT_DATA;
+ memset(pkt, 0, sizeof(struct pdl_packet));
+ if (pkt_size < cmd_hdrsz) {
+ memcpy(pkt, &cmd_buf[hdrsz], pkt_size);
+ } else {
+ memcpy(pkt, &cmd_buf[hdrsz], cmd_hdrsz);
+ pkt->data = &cmd_buf[hdrsz+cmd_hdrsz];
+
+ /* packet data crc checking, if have 4 bytes crc in tail */
+ if (pkt_size >= cmd_hdrsz + pkt->cmd_header.data_size + sizeof(u32)) {
+ i = hdrsz + cmd_hdrsz + pkt->cmd_header.data_size;
+ u32 crc = 0, crc_now = 0;
+ memcpy(&crc, &cmd_buf[i], sizeof(u32));
+ crc_now = crc32(0, pkt->data, pkt->cmd_header.data_size);
+ if (crc != crc_now) {
+ pdl_error("packet data crc verify failed, expect %#x, got %#x\n", crc, crc_now);
+ pkt_error = CHECKSUM_ERROR;
+ return -1;
+ }
+ }
+ }
+ return 1;
+}
+
+
+int pdl_get_connect_packet(struct pdl_packet *pkt, u32 timeout)
+{
+ char ch = 0;
+ u8 header_buf[sizeof(struct packet_header)];
+ u32 pkt_size = 0;
+ u32 cnt = timeout; //timeout is in ms;
+
+ while (cnt) {
+ if(!channel->tstc()) {
+ mdelay(1);
+ //pdl_error("try to get\n");
+ cnt--;
+ continue;
+ }
+
+ ch = channel->getchar();
+ if (ch == HOST_PACKET_TAG) {
+ pkt_state = PKT_HEAD;
+ break;
+ } else {
+ pdl_info("oops, get 0x%x\n", ch);
+ continue;
+ }
+ }
+
+ if (cnt == 0 ) {
+ pkt_error = WAIT_TIMEOUT;
+ pdl_error("get connect timeout\n");
+ return -1;
+ }
+ header_buf[0] = ch;
+ while (1) {
+ u8 flowid;
+
+ switch (pkt_state) {
+ case PKT_IDLE:
+ break;
+ case PKT_HEAD:
+ channel->read(&header_buf[1], 5);
+ flowid = header_buf[5];
+ pkt_size = 0;
+ if (flowid == HOST_PACKET_FLOWID) {
+ //ok, this is the header
+ memcpy(&pkt_size, &header_buf[1], 4);
+ pkt_size = le32_to_cpu(pkt_size);
+ pkt_state = PKT_DATA;
+ pdl_vdbg("header right data_size 0x%x\n", pkt_size);
+ } else {
+ pkt_state = PKT_IDLE;
+ return 0;
+ }
+ break;
+ case PKT_DATA:
+ //diff the command data size and packet data size,check if it correct;
+ if (pkt_size > (sizeof(struct command_header) + 1)) {
+ pkt_error = INVALID_SIZE;
+ return -1;
+ }
+ channel->read(cmd_buf, pkt_size);
+ memcpy(pkt, cmd_buf, sizeof(struct command_header));
+
+ pdl_vdbg("pkt cmd type 0x%x data start 0x%x, size %x\n",
+ pkt->cmd_header.cmd_type,
+ pkt->cmd_header.data_addr,
+ pkt->cmd_header.data_size);
+ return 1;
+ case PKT_ERROR:
+ break;
+ }
+ }
+ return 1;
+}
+/*
+static void pdl_put_packet(struct packet *pkt)
+{
+}
+*/
+void pdl_put_cmd_packet(struct pdl_packet *pkt)
+{
+ memset(pkt, 0, sizeof (struct pdl_packet));
+ pkt_state = PKT_IDLE;
+ pkt_error = 0;
+}
+
+int pdl_get_packet_error(void)
+{
+ return pkt_error;
+}
+
+static int pdl_send_data(const u8 *data, u32 size, u8 flowid)
+{
+ struct packet_header *header = (struct packet_header *)cmd_buf;
+ int hdr_sz = sizeof(struct packet_header);
+
+ if(size > PDL_MAX_PKT_SIZE - hdr_sz) {
+ pdl_error("packet size is too large.\n");
+ return -1;
+ }
+
+ memset(cmd_buf, PDL_MAX_PKT_SIZE, 0);
+ memcpy(&cmd_buf[hdr_sz], data, size);
+
+ header->tag = PACKET_TAG;
+ header->flowid = flowid;
+ /* carefully, header->pkt_size may be unaligned */
+ put_unaligned(size, &header->pkt_size); /* header->pkt_size = size; */
+
+ channel->write(cmd_buf, hdr_sz + size);
+ return 0;
+}
+
+void pdl_send_rsp(int rsp)
+{
+ /*
+ * if wait timeout, the client may be exit, we dont send
+ * this error, for the new client will get a extra error
+ * response
+ */
+ if (rsp == WAIT_TIMEOUT)
+ return;
+
+ if (rsp != ACK) {
+ if (rsp < ACK || rsp > MAX_RSP)
+ rsp = DEVICE_ERROR;
+ pdl_info("send rsp '%s'\n", pdl_device_rsp[rsp]);
+ }
+
+ pdl_send_data((const u8 *)&rsp, sizeof(int), (rsp == ACK) ? FLOWID_ACK : FLOWID_ERROR);
+ pdl_dbg("send rsp '%s'\n", pdl_device_rsp[rsp]);
+}
+
+int pdl_send_pkt(const u8 *data, u32 size)
+{
+ return pdl_send_data(data, size, FLOWID_DATA);
+}
diff --git a/pdl/common/pdl.c b/pdl/common/pdl.c
new file mode 100644
index 0000000000..e3bbe27cba
--- /dev/null
+++ b/pdl/common/pdl.c
@@ -0,0 +1,28 @@
+#include <common.h>
+#include <asm/arch/hwcfg.h>
+#include <asm/arch/rda_sys.h>
+#include <pdl.h>
+
+int pdl_dbg_pdl = 0;
+int pdl_vdbg_pdl = 0;
+int pdl_dbg_usb_ep0 = 0;
+int pdl_dbg_usb_serial = 0;
+int pdl_dbg_rw_check = 0;
+int pdl_dbg_factory_part = 0;
+
+/*
+ check if should start pdl utilities
+*/
+int pdl_mode_get(void)
+{
+ u16 swcfg = rda_swcfg_get();
+
+ /*
+ if hwconfig is in force download and swcofing is not
+ in calibration mode
+ */
+ if (rda_bm_is_download() && !(swcfg & RDA_SW_CFG_BIT_4))
+ return 1;
+ else
+ return 0;
+}
diff --git a/pdl/common/pdl_channel.c b/pdl/common/pdl_channel.c
new file mode 100644
index 0000000000..313535423c
--- /dev/null
+++ b/pdl/common/pdl_channel.c
@@ -0,0 +1,39 @@
+
+#include "pdl_channel.h"
+#include "pdl_debug.h"
+
+static struct pdl_channel *serial_channel = NULL;
+
+void pdl_channel_register(struct pdl_channel *channel)
+{
+ if (channel) {
+ serial_channel = channel;
+ } else {
+ pdl_error("channel cannot register\n");
+ }
+
+ return;
+}
+
+struct pdl_channel *pdl_get_channel(void)
+{
+ return serial_channel;
+}
+
+static struct pdl_channel *debug_channel = NULL;
+
+void pdl_debug_channel_register(struct pdl_channel *channel)
+{
+ if (channel) {
+ debug_channel = channel;
+ } else {
+ pdl_error("debug channel cannot register\n");
+ }
+
+ return;
+}
+
+struct pdl_channel *pdl_get_debug_channel(void)
+{
+ return debug_channel;
+}
diff --git a/pdl/common/pdl_channel_usb.c b/pdl/common/pdl_channel_usb.c
new file mode 100644
index 0000000000..1bd7d55527
--- /dev/null
+++ b/pdl/common/pdl_channel_usb.c
@@ -0,0 +1,85 @@
+#include <usb/usbserial.h>
+#include "pdl_channel.h"
+#include "pdl_debug.h"
+
+static int usbser_ch0_tstc (void)
+{
+ return usbser_tstc(USB_ACM_CHAN_0);
+}
+
+static int usbser_ch0_getc (void)
+{
+ return usbser_getc(USB_ACM_CHAN_0);
+}
+
+static void usbser_ch0_putc (const char c)
+{
+ usbser_putc(USB_ACM_CHAN_0, c);
+}
+
+static int usbser_ch0_read(unsigned char *_buf, unsigned int len)
+{
+ return usbser_read(USB_ACM_CHAN_0, _buf, len);
+}
+
+static int usbser_ch0_write(const unsigned char *_buf, unsigned int len)
+{
+ return usbser_write(USB_ACM_CHAN_0, _buf, len);
+}
+
+static struct pdl_channel usb_channel = {
+ .getchar = usbser_ch0_getc,
+ .putchar = usbser_ch0_putc,
+ .tstc = usbser_ch0_tstc,
+ .read = usbser_ch0_read,
+ .write = usbser_ch0_write,
+ .priv = NULL
+};
+
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+
+static int usbser_ch1_tstc (void)
+{
+ return usbser_tstc(USB_ACM_CHAN_1);
+}
+
+static int usbser_ch1_getc (void)
+{
+ return usbser_getc(USB_ACM_CHAN_1);
+}
+
+static void usbser_ch1_putc (const char c)
+{
+ usbser_putc(USB_ACM_CHAN_1, c);
+}
+
+static int usbser_ch1_read(unsigned char *_buf, unsigned int len)
+{
+ return usbser_read(USB_ACM_CHAN_1, _buf, len);
+}
+
+static int usbser_ch1_write(const unsigned char *_buf, unsigned int len)
+{
+ return usbser_write(USB_ACM_CHAN_1, _buf, len);
+}
+
+static struct pdl_channel usb_channel2 = {
+ .getchar = usbser_ch1_getc,
+ .putchar = usbser_ch1_putc,
+ .tstc = usbser_ch1_tstc,
+ .read = usbser_ch1_read,
+ .write = usbser_ch1_write,
+ .priv = NULL,
+};
+
+#endif //CONFIG_USB_ACM_TWO_CHANS
+
+void pdl_usb_channel_register(void)
+{
+#ifdef CONFIG_USB_ACM_TWO_CHANS
+ pdl_debug_channel_register(&usb_channel2);
+#endif
+
+ pdl_channel_register(&usb_channel);
+}
+
diff --git a/pdl/common/pdl_debug.c b/pdl/common/pdl_debug.c
new file mode 100644
index 0000000000..07b812bce0
--- /dev/null
+++ b/pdl/common/pdl_debug.c
@@ -0,0 +1,48 @@
+#include <common.h>
+#include <malloc.h>
+#include <stdio_dev.h>
+#include "pdl.h"
+#include "pdl_debug.h"
+#include "pdl_channel.h"
+
+char *pdl_log_buff = NULL;
+static void pdl_serial_puts(const char *s)
+{
+ struct pdl_channel *dbg_ch = pdl_get_debug_channel();
+
+ /* save print string to log buffer */
+ if(pdl_log_buff) {
+ int a = strlen(pdl_log_buff);
+ int b = strlen(s);
+
+ if(a + b < PDL_LOG_MAX_SIZE)
+ strcpy(&pdl_log_buff[a], s);
+ }
+
+ serial_puts(s);
+
+ if(pdl_dbg_usb_serial && dbg_ch)
+ dbg_ch->write((const unsigned char *)s, strlen(s)+1);
+}
+
+struct stdio_dev *search_device(int flags, const char *name);
+void pdl_init_serial(void)
+{
+ struct stdio_dev *dev = search_device (DEV_FLAGS_OUTPUT, "serial");
+ if(!dev)
+ return;
+ dev->puts = pdl_serial_puts;
+
+ if(!pdl_log_buff) {
+ pdl_log_buff = malloc(PDL_LOG_MAX_SIZE);
+ pdl_log_buff[0] = '\0';
+ }
+}
+void pdl_release_serial(void)
+{
+ struct stdio_dev *dev = search_device (DEV_FLAGS_OUTPUT, "serial");
+ if(!dev)
+ return;
+ dev->puts = serial_puts;
+}
+
diff --git a/pdl/common/pdl_engine.c b/pdl/common/pdl_engine.c
new file mode 100644
index 0000000000..2e4c5d3745
--- /dev/null
+++ b/pdl/common/pdl_engine.c
@@ -0,0 +1,141 @@
+//#define DEBUG
+#include <common.h>
+#include <asm/types.h>
+#include "cmd_defs.h"
+#include <asm/arch/rda_sys.h>
+#include "packet.h"
+#include "pdl_engine.h"
+#include "pdl_debug.h"
+
+static struct pdl_cmd cmd_handler_table[MAX_CMD];
+
+#define cmd_is_valid(cmd) ((cmd >= MIN_CMD) && (cmd < MAX_CMD))
+
+static const char *pdl_commands[MAX_CMD] = {
+ [CONNECT] = "connect",
+ [ERASE_FLASH] = "erase flash",
+ [ERASE_PARTITION] = "erase partition",
+ [ERASE_ALL] = "erase all",
+ [START_DATA] = "start data",
+ [MID_DATA] = "midst data",
+ [END_DATA] = "end data",
+ [EXEC_DATA] = "execute data",
+ [READ_FLASH] = "read flash",
+ [READ_PARTITION] = "read partition",
+ [NORMAL_RESET] = "normal reset",
+ [READ_CHIPID] = "read chipid",
+ [SET_BAUDRATE] = "set baudrate",
+ [FORMAT_FLASH] = "format flash",
+ [READ_PARTITION_TABLE] = "read partition table",
+ [READ_IMAGE_ATTR] = "read image attribute",
+ [GET_VERSION] = "get version",
+ [SET_FACTMODE] = "set factory mode",
+ [SET_CALIBMODE] = "set calibration mode",
+ [SET_PDL_DBG] = "set pdl debuglevel",
+ [CHECK_PARTITION_TABLE] = "check partition table",
+ [POWER_OFF] = "power off",
+ [IMAGE_LIST] = "download image list",
+ [GET_SECURITY] = "get security capabilities",
+ [HW_TEST] = "hardware test",
+ [GET_PDL_LOG] = "get pdl log",
+ [DOWNLOAD_FINISH] = "download finish",
+};
+
+int pdl_cmd_register(int cmd_type, pdl_cmd_handler handler)
+{
+ if (!cmd_is_valid(cmd_type))
+ return -1;
+
+ cmd_handler_table[cmd_type].handler = handler;
+ return 0;
+}
+
+int pdl_handle_connect(u32 timeout)
+{
+ struct pdl_packet pkt;
+ int cmd;
+ int res;
+
+ res = pdl_get_connect_packet(&pkt, timeout);
+ if (res != 1) {
+ return -1;
+ }
+
+ cmd = pkt.cmd_header.cmd_type;
+ if (cmd == CONNECT)
+ cmd_handler_table[cmd].handler(&pkt, 0);
+ else
+ goto err;
+
+ pdl_put_cmd_packet(&pkt);
+ return 0;
+err:
+ pdl_put_cmd_packet(&pkt);
+ return -1;
+}
+
+#define CONNECT_TIMEOUT 180000 /*3 minutes*/
+static void pdl_command_loop(void)
+{
+ struct pdl_packet pkt;
+ int res;
+ u32 cmd;
+ int error;
+ int cnt = CONNECT_TIMEOUT;
+ int check_connect = 1;
+
+ while (1) {
+ res = pdl_get_cmd_packet(&pkt);
+ if (res == -2) {
+ if (!check_connect) {
+ mdelay(1);
+ continue;
+ } else if (--cnt > 0) {
+ mdelay(1);
+ continue;
+ }
+
+ if (cnt <= 0) {
+ pdl_error("PDL get command timeout...\n");
+ break;
+ }
+ }
+ if (check_connect)
+ check_connect = 0;
+
+ if (res == 0)
+ continue;
+
+ //if error send response to pc.
+ if (res == -1) {
+ error = pdl_get_packet_error();
+ pdl_send_rsp(error);
+ pdl_put_cmd_packet(&pkt);
+ continue;
+ }
+ cmd = pkt.cmd_header.cmd_type;
+
+ if (!cmd_is_valid(cmd)) {
+ pdl_send_rsp(INVALID_CMD);
+ pdl_put_cmd_packet(&pkt);
+ continue;
+ }
+
+ pdl_dbg("get and exec cmd '%s'\n", pdl_commands[cmd]);
+
+ if (cmd_handler_table[cmd].handler)
+ res = cmd_handler_table[cmd].handler(&pkt, 0);
+ pdl_put_cmd_packet(&pkt);
+ }
+
+ pdl_info("shutdown machine...\n");
+ shutdown_system();
+}
+
+int pdl_handler(void *arg)
+{
+ for (;;) {
+ pdl_command_loop();
+ }
+ return 0;
+}
diff --git a/pdl/include/cmd_defs.h b/pdl/include/cmd_defs.h
new file mode 100644
index 0000000000..1ca9adcabc
--- /dev/null
+++ b/pdl/include/cmd_defs.h
@@ -0,0 +1,77 @@
+#ifndef _CMD_DEFS_H_
+#define _CMD_DEFS_H_
+#include "packet.h"
+
+enum pdl_cmd_type{
+ MIN_CMD = 0,
+ CONNECT = MIN_CMD,
+ ERASE_FLASH,
+ ERASE_PARTITION,
+ ERASE_ALL,
+ START_DATA,
+ MID_DATA,
+ END_DATA,
+ EXEC_DATA,
+ READ_FLASH,
+ READ_PARTITION,
+ NORMAL_RESET,
+ READ_CHIPID,
+ SET_BAUDRATE,
+ FORMAT_FLASH,
+ READ_PARTITION_TABLE,
+ READ_IMAGE_ATTR,
+ GET_VERSION,
+ SET_FACTMODE,
+ SET_CALIBMODE,
+ SET_PDL_DBG,
+ CHECK_PARTITION_TABLE,
+ POWER_OFF,
+ IMAGE_LIST,
+ GET_SWCFG_REG,
+ SET_SWCFG_REG,
+ GET_HWCFG_REG,
+ SET_HWCFG_REG,
+ EXIT_AND_RELOAD,
+ GET_SECURITY,
+ HW_TEST,
+ GET_PDL_LOG,
+ DOWNLOAD_FINISH,
+ MAX_CMD
+};
+
+enum pdl_rsp {
+ ACK = 0,
+ //from PC command
+ PACKET_ERROR,
+ INVALID_CMD,
+ UNKNOWN_CMD,
+ INVALID_ADDR,
+ INVALID_BAUDRATE,
+ INVALID_PARTITION,
+ INVALID_SIZE,
+ WAIT_TIMEOUT,
+ //from phone
+ VERIFY_ERROR,
+ CHECKSUM_ERROR,
+ OPERATION_FAILED,
+ //phone internal
+ DEVICE_ERROR, //DDR,NAND init errors
+ NO_MEMORY,
+ DEVICE_INCOMPATIBLE,
+ HW_TEST_ERROR,
+ MD5_ERROR,
+ ACK_AGAIN_ERASE,
+ ACK_AGAIN_FLASH,
+ MAX_RSP
+};
+
+#define PDL_DBG_PDL (0x1<<0)
+#define PDL_DBG_USB_EP0 (0x1<<1)
+#define PDL_DBG_USB_SERIAL (0x1<<2)
+#define PDL_DBG_RW_CHECK (0x1<<3)
+#define PDL_DBG_FACTORY_PART (0x1<<4)
+#define PDL_DBG_PDL_VERBOSE (0x1<<5)
+#define PDL_EXTENDED_STATUS (0x1<<7)
+
+#endif
+
diff --git a/pdl/include/config.h b/pdl/include/config.h
new file mode 100644
index 0000000000..b2d37705ab
--- /dev/null
+++ b/pdl/include/config.h
@@ -0,0 +1,11 @@
+#ifndef __PDL_CONFIG_H__
+#define __PDL_CONFIG_H__
+
+#ifdef CONFIG_SPL_BUILD
+# define CONFIG_RDA_PDL1
+#else
+# define CONFIG_RDA_PDL2
+#endif
+
+#endif // __PDL_CONFIG_H__
+
diff --git a/pdl/include/packet.h b/pdl/include/packet.h
new file mode 100644
index 0000000000..c261eba161
--- /dev/null
+++ b/pdl/include/packet.h
@@ -0,0 +1,63 @@
+#ifndef _PACKET_H_
+#define _PACKET_H_
+#include "config.h"
+
+/* host define, for receiving packet */
+#define HOST_PACKET_TAG 0xAE
+#define HOST_PACKET_FLOWID 0xFF
+
+/* client define, for sending packet */
+#define PACKET_TAG 0xAE
+#define FLOWID_DATA 0xBB
+#define FLOWID_ACK 0xFF
+#define FLOWID_ERROR 0xEE
+
+/*
+ * for yaffs image, the packet length must be aligned to the (page_size+oob)
+ */
+#if defined(CONFIG_RDA_PDL2)
+# define PDL_MAX_DATA_SIZE 270336 //(256*(1024 + 32)) == (64 * 4224)
+#elif defined(CONFIG_RDA_PDL1)
+# define PDL_MAX_DATA_SIZE (4*1024)
+#else
+#error "no valid pdl config"
+#endif
+
+
+struct packet_header {
+ u8 tag;
+ u32 pkt_size;
+ u8 flowid;
+}__attribute__((packed));
+
+struct command_header {
+ u32 cmd_type;
+ u32 data_addr;
+ u32 data_size;
+};
+
+#define PDL_MAX_PKT_SIZE (PDL_MAX_DATA_SIZE + \
+ sizeof(struct command_header) + sizeof(struct packet_header))
+
+struct pdl_packet {
+ struct command_header cmd_header;
+ u8 *data;
+};
+
+
+struct packet{
+ struct packet_header pkt_header;
+ struct pdl_packet *pdl_pkt;
+ int state;
+};
+
+int pdl_get_cmd_packet(struct pdl_packet *pkt);
+void pdl_put_cmd_packet(struct pdl_packet *pkt);
+int pdl_get_connect_packet(struct pdl_packet *pkt, u32 timeout);
+
+void pdl_send_rsp(int rsp);
+int pdl_send_pkt(const u8 *data, u32 size);
+int pdl_get_packet_error(void);
+int pdl_init_packet_channel(void);
+#endif
+
diff --git a/pdl/include/pdl_channel.h b/pdl/include/pdl_channel.h
new file mode 100644
index 0000000000..731878d729
--- /dev/null
+++ b/pdl/include/pdl_channel.h
@@ -0,0 +1,28 @@
+#ifndef _PDL_CHANNEL_H_
+#define _PDL_CHANNEL_H_
+
+struct pdl_channel {
+ int (*read) (unsigned char *buf, unsigned int len);
+ int (*getchar) (void);
+ int (*tstc) (void);
+ int (*write) (const unsigned char *buf, unsigned int len);
+ void (*putchar) (const char ch);
+ void *priv;
+};
+
+/* get the current pdl data channel */
+struct pdl_channel *pdl_get_channel(void);
+/* register the pdl data channel */
+void pdl_channel_register(struct pdl_channel *channel);
+
+/* get the current pdl debug channel */
+struct pdl_channel *pdl_get_debug_channel(void);
+/* register the pdl debug channel */
+void pdl_debug_channel_register(struct pdl_channel *channel);
+
+/* register the usb serial channel 0 as the pdl data channel.
+ if defined, register the usb serial channel 1 as the pdl debug channel. */
+void pdl_usb_channel_register(void);
+
+#endif
+
diff --git a/pdl/include/pdl_command.h b/pdl/include/pdl_command.h
new file mode 100644
index 0000000000..08e8b66bed
--- /dev/null
+++ b/pdl/include/pdl_command.h
@@ -0,0 +1,15 @@
+#ifndef _PDL_COMMAND_H_
+#define _PDL_COMMAND_H_
+#include "config.h"
+#include "packet.h"
+
+
+#if defined(CONFIG_RDA_PDL1)
+#include "../pdl-1/pdl1_command.h"
+#elif defined(CONFIG_RDA_PDL2)
+#include "../pdl-2/pdl2_command.h"
+#else
+#error "no valid pdl"
+#endif
+
+#endif
diff --git a/pdl/include/pdl_debug.h b/pdl/include/pdl_debug.h
new file mode 100644
index 0000000000..d908e7a28f
--- /dev/null
+++ b/pdl/include/pdl_debug.h
@@ -0,0 +1,28 @@
+#ifndef _PDL_DEBUG_H_
+#define _PDL_DEBUG_H_
+
+#include <serial.h>
+
+#define PDL_LOG_MAX_SIZE (512*1024)
+
+extern char *pdl_log_buff;
+void pdl_init_serial(void);
+void pdl_release_serial(void);
+
+#define pdl_error printf
+#define pdl_info printf
+
+extern int pdl_dbg_pdl;
+#define pdl_dbg(str...) \
+ do { \
+ if (pdl_dbg_pdl) \
+ printf(str); \
+ } while(0)
+
+extern int pdl_vdbg_pdl;
+#define pdl_vdbg(str...) \
+ do { \
+ if (pdl_vdbg_pdl) \
+ printf(str); \
+ } while(0)
+#endif
diff --git a/pdl/include/pdl_engine.h b/pdl/include/pdl_engine.h
new file mode 100644
index 0000000000..84f07797f6
--- /dev/null
+++ b/pdl/include/pdl_engine.h
@@ -0,0 +1,12 @@
+#ifndef _PDL_ENGINE_H_
+#define _PDL_ENGINE_H_
+
+typedef int (*pdl_cmd_handler)(struct pdl_packet *pkt, void *arg);
+struct pdl_cmd {
+ pdl_cmd_handler handler;
+};
+
+int pdl_cmd_register(int cmd_type, pdl_cmd_handler handler);
+int pdl_handler(void *arg);
+int pdl_handle_connect(u32 timeout);
+#endif
diff --git a/pdl/pdl-1/Makefile b/pdl/pdl-1/Makefile
new file mode 100644
index 0000000000..ec7032182d
--- /dev/null
+++ b/pdl/pdl-1/Makefile
@@ -0,0 +1,48 @@
+#
+# (C) Copyright 2000-2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB := $(obj)libpdl_stage.o
+CPPFLAGS += -I ../include
+CFLAGS += -I ../include -mno-unaligned-access
+
+COBJS-$(CONFIG_SPL_RDA_PDL) += pdl_command.o pdl_main.o
+
+COBJS := $(COBJS-y)
+SRCS := $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+
+all: $(LIB)
+
+$(LIB): $(obj).depend $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/pdl/pdl-1/pdl1_command.h b/pdl/pdl-1/pdl1_command.h
new file mode 100644
index 0000000000..12407f6034
--- /dev/null
+++ b/pdl/pdl-1/pdl1_command.h
@@ -0,0 +1,13 @@
+#ifndef _PDL1_COMMAND_H_
+#define _PDL1_COMMAND_H_
+
+int sys_connect(struct pdl_packet *packet, void *arg);
+int data_start(struct pdl_packet *packet, void *arg);
+int data_midst(struct pdl_packet *packet, void *arg);
+int data_end(struct pdl_packet *packet, void *arg);
+int data_exec(struct pdl_packet *packet, void *arg);
+int get_pdl_version(struct pdl_packet *packet, void *arg);
+int reset_machine(struct pdl_packet *packet, void *arg);
+int get_pdl_security(struct pdl_packet *packet, void *arg);
+
+#endif
diff --git a/pdl/pdl-1/pdl_command.c b/pdl/pdl-1/pdl_command.c
new file mode 100644
index 0000000000..3eb4769410
--- /dev/null
+++ b/pdl/pdl-1/pdl_command.c
@@ -0,0 +1,176 @@
+#include <common.h>
+#include "packet.h"
+#include <linux/string.h>
+#include "cmd_defs.h"
+#include "pdl_debug.h"
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/rda_crypto.h>
+
+struct dl_file_info {
+ unsigned long start_address;
+ unsigned long total_size;
+ unsigned long recv_size;
+ unsigned long next_address;
+};
+
+static struct dl_file_info exec_file;
+
+
+int sys_connect(struct pdl_packet *packet, void *arg)
+{
+ pdl_info("connect with pc\n");
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int data_start(struct pdl_packet *packet, void *arg)
+{
+ unsigned long start_addr = packet->cmd_header.data_addr;
+ unsigned long file_size = packet->cmd_header.data_size;
+
+#if 0
+ if ((start_addr < MEMORY_START) || (start_addr >= MEMORY_START + MEMORY_SIZE)) {
+ pdl_send_rsp(INVALID_ADDR);
+ return 0;
+ }
+
+ if ((start_addr + file_size) > (MEMORY_START + MEMORY_SIZE)) {
+ pdl_send_rsp(INVALID_SIZE);
+ return 0;
+ }
+#endif
+ pdl_info("start addr %lx, file size %lx\n", start_addr, file_size);
+
+ exec_file.start_address = start_addr;
+ exec_file.total_size = file_size;
+ exec_file.recv_size = 0;
+ exec_file.next_address = start_addr;
+
+// memset((void*)start_addr, 0, file_size);
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int data_midst(struct pdl_packet *packet, void *arg)
+{
+ short data_len = packet->cmd_header.data_size;
+
+ if ((exec_file.recv_size + data_len) > exec_file.total_size) {
+ pdl_send_rsp(INVALID_SIZE);
+ return 0;
+ }
+
+ memcpy((void *)exec_file.next_address, packet->data, data_len);
+ exec_file.next_address += data_len;
+ exec_file.recv_size += data_len;
+
+ pdl_dbg("write to addr %lx, receive size %ld\n", exec_file.next_address,
+ exec_file.recv_size);
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int data_end(struct pdl_packet *packet, void *arg)
+{
+ pdl_info("receive pdl2 finish\n");
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+static unsigned long
+do_go_exec (ulong (*entry)(int, char * const []), int argc, char * const argv[])
+{
+ return entry (argc, argv);
+}
+
+int data_exec(struct pdl_packet *packet, void *arg)
+{
+#ifdef CONFIG_SIGNATURE_CHECK_IMAGE
+ pdl_info("Verify executable 0x%lx, #%ld\n",
+ exec_file.start_address,exec_file.recv_size);
+ if (image_sign_verify((const void *)exec_file.start_address,
+ exec_file.recv_size)) {
+ printf("Verify failed, aborting execute.\n");
+ pdl_send_rsp(VERIFY_ERROR);
+ return 0;
+ }
+#endif
+ pdl_info("Execute download from 0x%lx\n", exec_file.start_address);
+ do_go_exec((void *)exec_file.start_address, 1, NULL);
+ return 0;
+}
+
+int get_pdl_version(struct pdl_packet *packet, void *arg)
+{
+ static const unsigned char pdl1_version[] = "PDL1";
+
+ pdl_info("get pdl version\n");
+
+ pdl_send_pkt(pdl1_version, sizeof(pdl1_version));
+ return 0;
+}
+
+#include <asm/arch/rom_api_trampolin.h>
+
+int get_pdl_security(struct pdl_packet *packet, void *arg)
+{
+ struct {
+ char buffer[16];
+ struct chip_id chip_id;
+ struct chip_security_context chip_security_context;
+ struct chip_unique_id chip_unique_id;
+ struct pubkey pubkey;
+ u8 random[32];
+ } response;
+
+ pdl_info("get pdl security\n");
+
+ memset(&response, 0, sizeof(response));
+
+ if (memcmp(romapi->magic, "RDA API", 8) == 0) {
+ int n;
+ get_chip_id(&response.chip_id);
+ get_chip_unique(&response.chip_unique_id);
+ n = get_chip_security_context(&response.chip_security_context,
+ &response.pubkey);
+ get_chip_true_random(response.random, 32);
+ sprintf(response.buffer, "RDASEC: v%d/%d", romapi->version, n);
+ }
+ else
+ sprintf(response.buffer, "RDASEC: none");
+
+ pdl_send_pkt((const u8 *)&response, sizeof(response));
+
+ return 0;
+}
+
+
+int reset_machine(struct pdl_packet *packet, void *arg)
+{
+ u8 reboot_mode = REBOOT_TO_NORMAL_MODE;
+
+ pdl_info("reset machine....\n");
+
+ if (packet->cmd_header.data_size == 1) {
+ reboot_mode = packet->data[0];
+ }
+ switch (reboot_mode) {
+ case REBOOT_TO_NORMAL_MODE:
+ case REBOOT_TO_DOWNLOAD_MODE:
+ case REBOOT_TO_FASTBOOT_MODE:
+ case REBOOT_TO_RECOVERY_MODE:
+ case REBOOT_TO_CALIB_MODE:
+ break;
+ default:
+ reboot_mode = REBOOT_TO_NORMAL_MODE;
+ }
+
+ pdl_info("reboot_mode: %d\n", reboot_mode);
+ pdl_send_rsp(ACK); // cheat and send ack before reset
+
+ rda_reboot(reboot_mode);
+
+ /*should never here */
+ return 0;
+}
+
diff --git a/pdl/pdl-1/pdl_main.c b/pdl/pdl-1/pdl_main.c
new file mode 100644
index 0000000000..242745297d
--- /dev/null
+++ b/pdl/pdl-1/pdl_main.c
@@ -0,0 +1,34 @@
+#include <common.h>
+#include "pdl_command.h"
+#include "packet.h"
+#include "cmd_defs.h"
+#include "pdl_engine.h"
+#include "pdl_debug.h"
+#include "pdl_channel.h"
+
+int pdl_main(void)
+{
+ pdl_info("start PDL1 main loop\n");
+ pdl_usb_channel_register();
+ pdl_init_packet_channel();
+
+ pdl_cmd_register(CONNECT, sys_connect);
+ pdl_cmd_register(START_DATA, data_start);
+ pdl_cmd_register(MID_DATA, data_midst);
+ pdl_cmd_register(END_DATA, data_end);
+ pdl_cmd_register(EXEC_DATA, data_exec);
+ pdl_cmd_register(NORMAL_RESET, reset_machine);
+ pdl_cmd_register(GET_VERSION, get_pdl_version);
+ pdl_cmd_register(GET_SECURITY, get_pdl_security);
+
+#if 0
+ serial_puts("wait for connect....\n");
+ if (pdl_handle_connect(CONNECT_TIMEOUT) != 0){
+ pdl_error("cannot handle connect\n");
+ return -1;
+ }
+#endif
+ pdl_send_rsp(ACK);
+ pdl_handler(NULL);
+ return 0;
+}
diff --git a/pdl/pdl-2/Makefile b/pdl/pdl-2/Makefile
new file mode 100644
index 0000000000..f342eddcc4
--- /dev/null
+++ b/pdl/pdl-2/Makefile
@@ -0,0 +1,49 @@
+#
+# (C) Copyright 2000-2007
+# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
+#
+# See file CREDITS for list of people who contributed to this
+# project.
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License as
+# published by the Free Software Foundation; either version 2 of
+# the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+# MA 02111-1307 USA
+#
+
+include $(TOPDIR)/config.mk
+
+LIB := $(obj)libpdl_stage.o
+CPPFLAGS += -I ../include
+CFLAGS += -I ../include -mno-unaligned-access
+
+COBJS-y += pdl_command.o pdl_main.o pdl_nand.o
+COBJS-$(CONFIG_GENERIC_MMC) += pdl_emmc.o
+
+COBJS := $(COBJS-y)
+SRCS := $(COBJS:.o=.c)
+OBJS := $(addprefix $(obj),$(COBJS))
+
+all: $(LIB)
+
+$(LIB): $(obj).depend $(OBJS)
+ $(call cmd_link_o_target, $(OBJS))
+
+#########################################################################
+
+# defines $(obj).depend target
+include $(SRCTREE)/rules.mk
+
+sinclude $(obj).depend
+
+#########################################################################
diff --git a/pdl/pdl-2/pdl2_command.h b/pdl/pdl-2/pdl2_command.h
new file mode 100644
index 0000000000..a89efe42fa
--- /dev/null
+++ b/pdl/pdl-2/pdl2_command.h
@@ -0,0 +1,26 @@
+#ifndef _PDL2_COMMAND_H_
+#define _PDL2_COMMAND_H_
+
+int pdl_command_init(void);
+int sys_connect(struct pdl_packet *packet, void *arg);
+int data_start(struct pdl_packet *packet, void *arg);
+int data_midst(struct pdl_packet *packet, void *arg);
+int data_end(struct pdl_packet *packet, void *arg);
+int data_exec(struct pdl_packet *packet, void *arg);
+int read_partition(struct pdl_packet *packet, void *arg);
+int read_partition_table(struct pdl_packet *packet, void *arg);
+int format_flash(struct pdl_packet *packet, void *arg);
+int read_image_attr(struct pdl_packet *packet, void *arg);
+int erase_partition(struct pdl_packet *packet, void *arg);
+int get_pdl_version(struct pdl_packet *packet, void *arg);
+int reset_machine(struct pdl_packet *packet, void *arg);
+int poweroff_machine(struct pdl_packet *packet, void *arg);
+int set_pdl_dbg(struct pdl_packet *packet, void *arg);
+int check_partition_table(struct pdl_packet *packet, void *arg);
+int recv_image_list(struct pdl_packet *packet, void *arg);
+int get_pdl_security(struct pdl_packet *packet, void *arg);
+int hw_test(struct pdl_packet *packet, void *arg);
+int get_pdl_log(struct pdl_packet *packet, void *arg);
+int download_finish(struct pdl_packet *packet, void *arg);
+
+#endif
diff --git a/pdl/pdl-2/pdl_command.c b/pdl/pdl-2/pdl_command.c
new file mode 100644
index 0000000000..a6c06c17b0
--- /dev/null
+++ b/pdl/pdl-2/pdl_command.c
@@ -0,0 +1,571 @@
+#include <common.h>
+#include <version.h>
+#include <asm/types.h>
+#include "packet.h"
+#include <linux/string.h>
+#include <malloc.h>
+#include <asm/arch/mtdparts_def.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/rda_crypto.h>
+#include <asm/arch/hw_test.h>
+#include <asm/arch/prdinfo.h>
+#include "cmd_defs.h"
+#include "pdl_debug.h"
+#include "pdl.h"
+#include "pdl_command.h"
+#include "pdl_nand.h"
+#include "pdl_emmc.h"
+#include <linux/mtd/mtd.h>
+
+#define MAX_PART_NAME 30
+#define MAX_TEST_LIST_SIZE 60
+
+#ifdef CONFIG_PDL_FORCE_HW_TEST_FULL
+static int hw_tested = 0;
+static int hw_test_run(const char *test_list, int fast_mode);
+#endif
+
+uint8_t pdl_extended_status = 0;
+
+static int media_type = MEDIA_NAND;
+int sys_connect(struct pdl_packet *packet, void *arg)
+{
+ pdl_info("connect with pc\n");
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+struct exec_file_info {
+ unsigned long start_address;
+ unsigned long total_size;
+ unsigned long recv_size;
+ unsigned long next_address;
+};
+static struct exec_file_info exec_file;
+static int frame_count = -1;
+
+int data_start(struct pdl_packet *packet, void *arg)
+{
+ unsigned long start_addr = packet->cmd_header.data_addr;
+ unsigned long file_size = packet->cmd_header.data_size;
+ int ret;
+ char part_name[MAX_PART_NAME + 1] = {'\0'};
+
+ strncpy(part_name, (char *)packet->data, MAX_PART_NAME);
+ frame_count = -1;
+
+#ifdef CONFIG_PDL_FORCE_HW_TEST_FULL
+ if(!hw_tested &&
+ strstr(part_name, "system")) {
+ ret = hw_test_run("all", 0);
+ if(ret) {
+ pdl_send_rsp(ret);
+ return 0;
+ }
+ hw_tested = 1;
+ }
+#endif
+
+ if (strlen(part_name) == 0) {
+ pdl_info("invalid partition name\n");
+ pdl_send_rsp(INVALID_PARTITION);
+ return -1;
+ }
+
+
+ /* the image is pdl1.bin or pdl2.bin */
+ memset(&exec_file, 0, sizeof(exec_file));
+ if(strncmp(part_name, "pdl", 3) == 0 ||
+ strncmp(part_name, "PDL", 3) == 0) {
+ exec_file.start_address = start_addr;
+ exec_file.total_size = file_size;
+ exec_file.recv_size = 0;
+ exec_file.next_address = start_addr;
+
+ pdl_send_rsp(ACK);
+ return 0;
+ }
+
+ if (media_type == MEDIA_MMC)
+ ret = emmc_data_start(part_name, file_size);
+ else
+ ret = nand_data_start(part_name, file_size);
+ if (ret) {
+ pdl_send_rsp(ret);
+ return -1;
+ }
+
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int data_midst(struct pdl_packet *packet, void *arg)
+{
+ u32 size = packet->cmd_header.data_size;
+ int ret;
+ u32 frame_num = packet->cmd_header.data_addr;
+
+ /* pdl1.bin or pdl2.bin */
+ if(exec_file.total_size > 0) {
+ if ((exec_file.recv_size + size) > exec_file.total_size) {
+ pdl_send_rsp(INVALID_SIZE);
+ return 0;
+ }
+
+ memcpy((void *)exec_file.next_address, packet->data, size);
+ exec_file.next_address += size;
+ exec_file.recv_size += size;
+
+ pdl_dbg("write to addr %lx, receive size %ld\n", exec_file.next_address,
+ exec_file.recv_size);
+
+ pdl_send_rsp(ACK);
+ return 0;
+ }
+
+ /* check frame number */
+ if(frame_count >= 0) {
+ if(frame_num < frame_count) { /* ignore this frame */
+ pdl_send_rsp(ACK);
+ return 0;
+ }
+ if(frame_num > frame_count) {
+ pdl_send_rsp(PACKET_ERROR);
+ pdl_error("expect frame %d, not %d\n", frame_count, frame_num);
+ return -1;
+ }
+ } else {
+ frame_count = frame_num;
+ }
+
+ pdl_dbg("frame count %u\n", frame_count);
+ frame_count++;
+ if (media_type == MEDIA_MMC)
+ ret = emmc_data_midst(packet->data, size);
+ else
+ ret = nand_data_midst(packet->data, size);
+ if (ret) {
+ pdl_send_rsp(ret);
+ return -1;
+ }
+
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int data_end(struct pdl_packet *packet, void *arg)
+{
+ int ret;
+ uint32_t data_size = packet->cmd_header.data_size;
+ uint32_t data_crc = 0;
+
+ /* pdl1.bin or pdl2.bin */
+ if(exec_file.total_size > 0) {
+ pdl_info("receive pdl1/pdl2 finish\n");
+ pdl_send_rsp(ACK);
+ return 0;
+ }
+
+ frame_count = -1;
+ if(data_size == 4)
+ memcpy((void *)&data_crc, (void *)packet->data, 4);
+
+ if (media_type == MEDIA_MMC)
+ ret = emmc_data_end(data_crc);
+ else
+ ret = nand_data_end(data_crc);
+ if (ret) {
+ pdl_send_rsp(ret);
+ return -1;
+ }
+
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+static unsigned long
+do_go_exec (ulong (*entry)(int, char * const []), int argc, char * const argv[])
+{
+ return entry (argc, argv);
+}
+
+int data_exec(struct pdl_packet *packet, void *arg)
+{
+#ifdef CONFIG_SIGNATURE_CHECK_IMAGE
+ pdl_info("Verify executable 0x%lx, #%ld\n",
+ exec_file.start_address,exec_file.recv_size);
+ if (image_sign_verify((const void *)exec_file.start_address,
+ exec_file.recv_size)) {
+ printf("Verify failed, aborting execute.\n");
+ pdl_send_rsp(VERIFY_ERROR);
+ return 0;
+ }
+#endif
+ pdl_info("Execute download from 0x%lx\n", exec_file.start_address);
+ do_go_exec((void *)exec_file.start_address, 1, NULL);
+ return 0;
+}
+
+int read_partition(struct pdl_packet *packet, void *arg)
+{
+ size_t size = packet->cmd_header.data_size;
+ char part_name[MAX_PART_NAME + 1] = {'\0'};
+ int ret;
+ size_t actual_len = 0;
+ unsigned char *data;
+
+ strncpy(part_name, (char *)packet->data, MAX_PART_NAME);
+ if (strlen(part_name) == 0) {
+ pdl_info("invalid partition name\n");
+ pdl_send_rsp(INVALID_PARTITION);
+ return -1;
+ }
+
+ pdl_info("%s from %s\n", __func__, part_name);
+
+ data = malloc(size);
+ if (!data) {
+ pdl_info("no memory!\n");
+ pdl_send_rsp(NO_MEMORY);
+ return -1;
+ }
+
+ if (media_type == MEDIA_MMC)
+ ret = emmc_read_partition(part_name, data, size,
+ &actual_len);
+ else
+ ret = nand_read_partition(part_name, data, size,
+ &actual_len);
+ if (ret) {
+ pdl_send_rsp(ret);
+ ret = -1;
+ goto out;
+ }
+
+ pdl_send_pkt(data, actual_len);
+ pdl_dbg("send ok\n");
+out:
+ free(data);
+ return ret;
+}
+
+extern int mtdparts_ptbl_check(int *same);
+extern int mmc_check_parts(int *same);
+int check_partition_table(struct pdl_packet *packet, void *arg)
+{
+ int ret;
+ int same = 0;
+ unsigned char data;
+
+ if (media_type == MEDIA_MMC)
+ ret = mmc_check_parts(&same);
+ else
+ ret = mtdparts_ptbl_check(&same);
+
+ if(ret) {
+ pdl_send_rsp(DEVICE_ERROR);
+ return -1;
+ }
+
+ data = (u8)(same & 0xff);
+ pdl_send_pkt(&data, 1);
+ return 0;
+}
+
+int read_partition_table(struct pdl_packet *packet, void *arg)
+{
+ u32 size;
+ const char *parts = getenv("mtdparts");
+
+ pdl_info("%s, parts %s\n", __func__, parts);
+
+ size = strlen(parts);
+ pdl_send_pkt((const u8*)parts, size);
+ return 0;
+}
+extern struct mtd_device *current_mtd_dev;
+
+int format_flash(struct pdl_packet *packet, void *arg)
+{
+ int ret;
+
+ pdl_info("format the whole flash part\n");
+
+ if (media_type == MEDIA_MMC)
+ ret = emmc_format_flash();
+ else
+ ret = nand_format_flash();
+ if (ret) {
+ pdl_send_rsp(ret);
+ return -1;
+ }
+
+#ifdef CONFIG_PDL_FORCE_HW_TEST_FULL
+ if(!hw_tested) {
+ ret = hw_test_run("all", 0);
+ if(ret) {
+ pdl_send_rsp(ret);
+ return 0;
+ }
+ hw_tested = 1;
+ }
+#endif
+
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int read_image_attr(struct pdl_packet *packet, void *arg)
+{
+ const char attrs[] = IMAGE_ATTR;
+
+ pdl_info("fs image attrs: %s\n", attrs);
+
+ pdl_send_pkt((const u8*)attrs, sizeof(attrs));
+ return 0;
+}
+
+int erase_partition(struct pdl_packet *packet, void *arg)
+{
+ int ret;
+ char part_name[MAX_PART_NAME + 1] = {'\0'};
+
+ strncpy(part_name, (char *)packet->data, MAX_PART_NAME);
+
+ if (strlen(part_name) == 0) {
+ pdl_info("invalid partition name\n");
+ pdl_send_rsp(INVALID_PARTITION);
+ return -1;
+ }
+
+ if (media_type == MEDIA_MMC)
+ ret = emmc_erase_partition(part_name);
+ else
+ ret = nand_erase_partition(part_name);
+ if (ret) {
+ pdl_send_rsp(ret);
+ return -1;
+ }
+
+ /* if the part is 'userdata', erase 'fat' part also */
+ if (strcmp(part_name, "userdata") == 0) {
+ strcpy(part_name, "fat");
+ if (media_type == MEDIA_MMC)
+ emmc_erase_partition(part_name);
+ else
+ nand_erase_partition(part_name);
+ }
+
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int get_pdl_version(struct pdl_packet *packet, void *arg)
+{
+ u32 flag = packet->cmd_header.data_addr;
+ u32 size;
+#define MAX_VER_LEN 100
+ char str[MAX_VER_LEN+1];
+
+ memset(str, 0, MAX_VER_LEN + 1);
+ strncpy(str, version_string, MAX_VER_LEN);
+
+#ifdef BUILD_DISPLAY_ID
+ /* return BUILD_DISPLAY_ID instead of pdl version */
+ if(flag == 1)
+ strncpy(str, BUILD_DISPLAY_ID, MAX_VER_LEN);
+#endif
+
+ pdl_info("send version string: [%s]\n", str);
+
+ size = strlen(str) + 1;
+ pdl_send_pkt((const u8*)str, size);
+ return 0;
+}
+
+int reset_machine(struct pdl_packet *packet, void *arg)
+{
+ pdl_info("reset machine....\n");
+
+ u8 reboot_mode = REBOOT_TO_NORMAL_MODE;
+ if (packet->cmd_header.data_size == 1) {
+ reboot_mode = packet->data[0];
+ }
+ switch (reboot_mode) {
+ case REBOOT_TO_NORMAL_MODE:
+ case REBOOT_TO_DOWNLOAD_MODE:
+ case REBOOT_TO_FASTBOOT_MODE:
+ case REBOOT_TO_RECOVERY_MODE:
+ case REBOOT_TO_CALIB_MODE:
+ break;
+ default:
+ reboot_mode = REBOOT_TO_NORMAL_MODE;
+ }
+
+ pdl_info("reboot_mode: %d\n", reboot_mode);
+ pdl_send_rsp(ACK); // cheat and send ack before reset
+
+ rda_reboot(reboot_mode);
+
+ /* should never here */
+ return 0;
+}
+
+int poweroff_machine(struct pdl_packet *packet, void *arg)
+{
+ pdl_info("waiting USB cable plug out...\n");
+ while(usb_cable_connected()){
+ mdelay(20);
+ }
+ pdl_info("machine power off...\n");
+ shutdown_system();
+ return 0;
+}
+
+int recv_image_list(struct pdl_packet *packet, void *arg)
+{
+ pdl_info("receive download image list...\n");
+ pdl_info("\t%s\n", (char *)packet->data);
+ prdinfo_init((char *)packet->data);
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+static int hw_test_run(const char *test_list, int fast_mode)
+{
+ int __attribute__((unused)) test_all = 0;
+
+ if(!test_list)
+ return HW_TEST_ERROR;
+
+ if(strcmp(test_list, "all") == 0)
+ test_all = 1;
+
+ pdl_info("start %s hardware test...[%s]\n", fast_mode ? "fast" : "full", test_list);
+
+#ifdef CONFIG_VPU_STA_TEST
+ if(test_all || strstr(test_list, "vpu")) {
+ vpu_sta_test(fast_mode ? 10 : 200);
+ pdl_info("VPU stable test..pass!\n");
+ }
+#endif
+
+#ifdef CONFIG_VPU_MD5_TEST
+ if(test_all || strstr(test_list, "vpu_md5")) {
+ int ret = vpu_md5_test(fast_mode ? 10 : 200);
+ if(ret)
+ return MD5_ERROR;
+ pdl_info("VPU MD5 test..pass!\n");
+ }
+#endif
+
+#ifdef CONFIG_CPU_TEST
+ if(test_all || strstr(test_list, "cpu")) {
+ cpu_pll_test(fast_mode ? 2000 : 4000);
+ pdl_info("CPU test..pass!\n");
+ }
+#endif
+
+ pdl_info("end %s hardware test.\n", fast_mode ? "fast" : "full");
+ return ACK;
+}
+
+int hw_test(struct pdl_packet *packet, void *arg)
+{
+ unsigned long param_size = packet->cmd_header.data_size;
+ char test_list[MAX_TEST_LIST_SIZE + 1] = {'\0'};
+ int ret = 0;
+
+ if(param_size > 0)
+ strncpy(test_list, (char *)packet->data, MAX_TEST_LIST_SIZE);
+ else
+ strcpy(test_list, "all");
+
+ ret = hw_test_run(test_list, 0);
+ pdl_send_rsp(ret);
+ return 0;
+}
+
+int get_pdl_log(struct pdl_packet *packet, void *arg)
+{
+ u32 size;
+
+ pdl_info("get pdl log\n");
+
+ size = strlen(pdl_log_buff) + 1;
+ pdl_send_pkt((const u8*)pdl_log_buff, size);
+ return 0;
+}
+
+int download_finish(struct pdl_packet *packet, void *arg)
+{
+ u32 ftm_tag = packet->cmd_header.data_addr;
+ pdl_info("download finish!\n");
+
+ prdinfo_set_pdl_result(1, ftm_tag);
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int set_pdl_dbg(struct pdl_packet *packet, void *arg)
+{
+ u32 dbg_settings = packet->cmd_header.data_addr;
+
+ pdl_info("%s, dbg_settings :%x\n", __func__, dbg_settings);
+
+ if (dbg_settings & PDL_DBG_PDL) {
+ pdl_info("open pdl debug\n");
+ pdl_dbg_pdl = 1;
+ }
+
+ if (dbg_settings & PDL_DBG_PDL_VERBOSE) {
+ pdl_info("open pdl verbose debug\n");
+ pdl_dbg_pdl = 1;
+ pdl_vdbg_pdl = 1;
+ }
+
+ if (dbg_settings & PDL_DBG_USB_EP0) {
+ pdl_info("open pdl usb ep0 debug\n");
+ pdl_dbg_usb_ep0 = 1;
+ }
+
+ if (dbg_settings & PDL_DBG_RW_CHECK) {
+ pdl_info("open pdl flash write/read/compare debug\n");
+ pdl_dbg_rw_check = 1;
+ }
+
+ if (dbg_settings & PDL_DBG_USB_SERIAL) {
+ pdl_info("open pdl usb serial debug\n");
+ pdl_dbg_usb_serial = 1;
+ }
+
+ if (dbg_settings & PDL_DBG_FACTORY_PART) {
+ pdl_info("open pdl factory part debug\n");
+ pdl_dbg_factory_part = 1;
+ }
+ if (dbg_settings & PDL_EXTENDED_STATUS) {
+ pdl_info("Enable extended status\n");
+ pdl_extended_status = 1;
+ }
+
+ pdl_send_rsp(ACK);
+ return 0;
+}
+
+int pdl_command_init(void)
+{
+ int ret;
+
+ media_type = rda_media_get();
+ if (media_type == MEDIA_MMC) {
+ ret = pdl_emmc_init();
+ } else {
+ ret = pdl_nand_init();
+ }
+
+#ifdef CONFIG_PDL_FORCE_HW_TEST
+ ret = hw_test_run("all", 1);
+#endif
+
+ return ret;
+}
diff --git a/pdl/pdl-2/pdl_emmc.c b/pdl/pdl-2/pdl_emmc.c
new file mode 100644
index 0000000000..d07be8c07d
--- /dev/null
+++ b/pdl/pdl-2/pdl_emmc.c
@@ -0,0 +1,340 @@
+#include <common.h>
+#include <asm/types.h>
+#include "packet.h"
+#include <linux/string.h>
+#include <malloc.h>
+#include <mmc.h>
+#include <part.h>
+#include <mmc/sparse.h>
+#include <mmc/mmcpart.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/factory.h>
+#include <asm/arch/prdinfo.h>
+#include "cmd_defs.h"
+#include "pdl_debug.h"
+#include "pdl.h"
+#include "pdl_command.h"
+
+#define MAX_PART_NAME 30
+struct dl_file_info {
+ disk_partition_t *ptn;
+ uchar *start_addr;
+ u64 total_size;
+ u64 recv_size;
+ char part_name[MAX_PART_NAME];
+};
+
+static struct dl_file_info dl_file;
+
+static uchar *download_buf;
+static unsigned long download_max_size;
+static block_dev_desc_t *mmc_blkdev = NULL;
+
+int emmc_data_start(const char *part_name, unsigned long file_size)
+{
+ disk_partition_t *ptn = 0;
+ int blksz_shift;
+
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ /* init/update partition table */
+ mmc_parts_format();
+ /* read again */
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ int i;
+ pdl_info("invalid mtd part:%s ",part_name);
+ for (i = 0; i < MAX_PART_NAME; i++)
+ pdl_info(" 0x%x ", part_name[i]);
+ pdl_info("\n");
+ return INVALID_PARTITION;
+ }
+ }
+
+ blksz_shift = LOG2(ptn->blksz);
+ pdl_info("found part '%s' start: 0x%lx length: 0x%lx bytes\n",
+ ptn->name, ptn->start, (ptn->size << blksz_shift));
+
+ memset(&dl_file, 0, sizeof(dl_file));
+ strncpy(dl_file.part_name, part_name, MAX_PART_NAME);
+
+ if (file_size > (ptn->size << blksz_shift)) {
+ pdl_info("%s, download file too large, the size is:%ld\n",
+ __func__, file_size);
+ pdl_info("but the mmc part %s 's size is %ld\n",
+ ptn->name, ptn->size << blksz_shift);
+ return INVALID_SIZE;
+ }
+
+ dl_file.ptn = ptn;
+ dl_file.total_size = file_size;
+ dl_file.start_addr = download_buf;
+ dl_file.recv_size = 0;
+
+ return 0;
+}
+
+int emmc_data_midst(u8 *data, size_t size)
+{
+ if (!size) {
+ pdl_error("oops, send the zero length packet\n");
+ return INVALID_SIZE;
+ }
+ if (((dl_file.recv_size + size) > dl_file.total_size) ||
+ (dl_file.recv_size + size) > download_max_size) {
+ pdl_error("transfer size error receive (%lld), file (%lld)\n",
+ dl_file.recv_size + size, dl_file.total_size);
+ return INVALID_SIZE;
+ }
+
+ pdl_dbg("writing 0x%x bytes to offset: 0x%p\n",
+ size, dl_file.start_addr);
+
+ memcpy(dl_file.start_addr, data, size);
+
+ dl_file.start_addr += size;
+ dl_file.recv_size += size;
+
+ return 0;
+}
+
+int emmc_data_end(uint32_t crc)
+{
+ sparse_header_t *sparse_header = (sparse_header_t *)download_buf;
+ disk_partition_t *ptn = dl_file.ptn;
+ loff_t write_bytes = dl_file.recv_size;
+ int ret;
+
+ if (!strcmp(dl_file.part_name, "factorydata")) {
+ pdl_info("flash to mmc part %s\n", ptn->name);
+ ret = factory_update_all(download_buf, dl_file.recv_size);
+ if (ret) {
+ pdl_error("oops, flash to mmc error %d\n", ret);
+ return OPERATION_FAILED;
+ }
+ return 0;
+ }
+
+ if (!strcmp(dl_file.part_name, PRDINFO_PART_NAME)) {
+ pdl_info("flash to mmc part %s\n", ptn->name);
+ ret = prdinfo_update_all((char *)download_buf, dl_file.recv_size);
+ if (ret) {
+ pdl_error("oops, flash to mmc error %d\n", ret);
+ return OPERATION_FAILED;
+ }
+ return 0;
+ }
+
+ /* verify data crc before write to mmc */
+ if(crc) {
+ uint32_t new_crc = crc32(0, (unsigned char *)download_buf, write_bytes);
+ if(crc != new_crc) {
+ pdl_info("CRC verify failed, expect %#x, got %#x.\n", crc, new_crc);
+ return CHECKSUM_ERROR;
+ } else {
+ pdl_info("CRC verify success, %#x.\n", crc);
+ }
+ }
+
+ /* Using to judge if ext4 file system */
+ if (sparse_header->magic != SPARSE_HEADER_MAGIC) {
+ pdl_info("flash to mmc part %s\n", ptn->name);
+ ret = partition_write_bytes(mmc_blkdev, ptn,
+ &write_bytes, download_buf);
+ } else {
+ pdl_info("unsparese flash part %s start %lx, size %ld blks\n",
+ ptn->name, ptn->start, ptn->size);
+ ret = partition_unsparse(mmc_blkdev, ptn, download_buf,
+ ptn->start, ptn->size);
+ }
+ if (ret) {
+ pdl_error("oops, flash to mmc error %d\n", ret);
+ return OPERATION_FAILED;
+ }
+
+ prdinfo_set_pdl_image_download_result((char *)ptn->name, 1);
+ pdl_info("END: total flashed %lld to mmc\n", write_bytes);
+ return 0;
+}
+
+
+int emmc_read_partition(const char *part_name, unsigned char *data, size_t size,
+ size_t *actual_len)
+{
+ disk_partition_t *ptn;
+ loff_t read_bytes = size;
+ int ret;
+
+ if(!mmc_blkdev) {
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!mmc_blkdev)
+ return DEVICE_ERROR;
+ }
+
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ /* init/update partition table */
+ mmc_parts_format();
+ /* read again */
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ pdl_error("partition table doesn't exist");
+ return INVALID_PARTITION;
+ }
+ }
+
+ pdl_dbg("%s from %s\n", __func__, part_name);
+
+ if (!strcmp(part_name, "factorydata")) {
+ size = factory_get_all(data);
+ if (size == 0) {
+ pdl_error("read from emmc error\n");
+ return DEVICE_ERROR;
+ }
+ } else {
+ ret = partition_read_bytes(mmc_blkdev, ptn, &read_bytes, data);
+ if(ret < 0) {
+ pdl_error("read from emmc error\n");
+ return DEVICE_ERROR;
+ }
+ }
+ if(actual_len)
+ *actual_len = size;
+
+ pdl_dbg("read actrual %d ok \n", *actual_len);
+ return 0;
+}
+
+int emmc_write_partition(const char *part_name, unsigned char *data, size_t size)
+{
+ disk_partition_t *ptn;
+ loff_t write_bytes = size;
+ int ret;
+
+ if(!mmc_blkdev) {
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!mmc_blkdev)
+ return DEVICE_ERROR;
+ }
+
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ /* init/update partition table */
+ mmc_parts_format();
+ /* read again */
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ pdl_error("partition table doesn't exist");
+ return INVALID_PARTITION;
+ }
+ }
+
+ pdl_dbg("%s write to %s\n", __func__, part_name);
+
+ if (!strcmp(part_name, "factorydata")) {
+ return factory_update_all(data, size);
+ } else {
+ ret = partition_write_bytes(mmc_blkdev, ptn, &write_bytes, data);
+ if(ret < 0) {
+ pdl_error("write to emmc error\n");
+ return DEVICE_ERROR;
+ }
+ }
+
+ pdl_dbg("write actrual %u ok \n", size);
+ return 0;
+}
+
+extern struct mtd_device *current_mtd_dev;
+
+int emmc_format_flash(void)
+{
+ int ret;
+ lbaint_t start = 0;
+ lbaint_t count = 0;
+ disk_partition_t *ptn_old, *ptn_new;
+
+ if (!mmc_blkdev) {
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!mmc_blkdev)
+ return DEVICE_ERROR;
+ }
+ count = mmc_blkdev->lba;
+
+ ptn_old = partition_find_ptn("factorydata");
+ factory_load();
+
+ pdl_info("refresh partition table\n");
+ ret = mmc_parts_format();
+ if (ret) {
+ pdl_error("refresh partition table fail %d\n", ret);
+ return DEVICE_ERROR;
+ }
+
+ /* if 'factorydata' part is not changed, don't
+ erase '0' offset to the end offset of 'factorydata' */
+ ptn_new = partition_find_ptn("factorydata");
+ if (ptn_old && ptn_new) {
+ if(ptn_old->start == ptn_new->start &&
+ ptn_old->size == ptn_new->size)
+ start = ptn_new->start + ptn_new->size;
+ }
+
+ count -= start;
+ pdl_info("format the whole mmc, from %ld, %ld blocks\n", start, count);
+ ret = mmc_blkdev->block_erase(CONFIG_MMC_DEV_NUM, start, count);
+ if (ret != count) {
+ pdl_error("mmc format partition fail %d\n", ret);
+ return DEVICE_ERROR;
+ }
+
+ /* if 'factorydata' was erased, write back */
+ if (!start)
+ factory_burn();
+
+ return 0;
+}
+
+int emmc_erase_partition(const char *part_name)
+{
+ disk_partition_t *ptn;
+ int ret;
+
+ if(!mmc_blkdev) {
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!mmc_blkdev)
+ return DEVICE_ERROR;
+ }
+
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ /* init/update partition table */
+ mmc_parts_format();
+ /* read again */
+ ptn = partition_find_ptn(part_name);
+ if(!ptn) {
+ pdl_error("partition table doesn't exist");
+ return INVALID_PARTITION;
+ }
+ }
+
+ pdl_info("erase the mmc part %s\n", part_name);
+ ret = partition_erase_blks(mmc_blkdev, ptn, &ptn->size);
+ if (ret) {
+ pdl_error("erase parttion fail\n");
+ return DEVICE_ERROR;
+ }
+ return 0;
+}
+
+int pdl_emmc_init(void)
+{
+ download_buf = (unsigned char *)SCRATCH_ADDR;
+ download_max_size = FB_DOWNLOAD_BUF_SIZE;
+ mmc_blkdev = get_dev_by_name(CONFIG_MMC_DEV_NAME);
+ if (!mmc_blkdev)
+ return DEVICE_ERROR;
+ pdl_dbg("download buffer %p, max size %ld\n", download_buf, download_max_size);
+ return 0;
+}
+
diff --git a/pdl/pdl-2/pdl_emmc.h b/pdl/pdl-2/pdl_emmc.h
new file mode 100644
index 0000000000..de70bdb45c
--- /dev/null
+++ b/pdl/pdl-2/pdl_emmc.h
@@ -0,0 +1,14 @@
+#ifndef __PDL_EMMC_H_
+#define __PDL_EMMC_H_
+
+int emmc_data_start(const char *part_name, unsigned long file_size);
+int emmc_data_midst(u8 *data, size_t size);
+int emmc_data_end(uint32_t crc);
+int emmc_read_partition(const char *part_name, unsigned char *data, size_t size,
+ size_t *actual_len);
+int emmc_write_partition(const char *part_name, unsigned char *data, size_t size);
+int emmc_format_flash(void);
+int emmc_erase_partition(const char *part_name);
+int pdl_emmc_init(void);
+#endif
+
diff --git a/pdl/pdl-2/pdl_main.c b/pdl/pdl-2/pdl_main.c
new file mode 100644
index 0000000000..4bbe2b072f
--- /dev/null
+++ b/pdl/pdl-2/pdl_main.c
@@ -0,0 +1,66 @@
+#include <asm/types.h>
+#include <common.h>
+#include <command.h>
+#include <asm/arch/rda_sys.h>
+#include <malloc.h>
+#include "pdl_command.h"
+#include "packet.h"
+#include "cmd_defs.h"
+#include "pdl_engine.h"
+#include "pdl_debug.h"
+#include "pdl_channel.h"
+#include <usb/usbserial.h>
+
+int pdl_main(void)
+{
+ int ret = 0;
+ pdl_info("start pdl2...\n");
+
+ drv_usbser_init();
+ pdl_usb_channel_register();
+ pdl_init_packet_channel();
+ ret = pdl_command_init();
+ if(ret) {
+ pdl_info("pdl init failed, power down..\n");
+ pdl_send_rsp(ret);
+ shutdown_system();
+ }
+
+ /* hack serial_puts(), to save all prints to log buffer */
+ pdl_init_serial();
+
+ pdl_cmd_register(CONNECT, sys_connect);
+ pdl_cmd_register(START_DATA, data_start);
+ pdl_cmd_register(MID_DATA, data_midst);
+ pdl_cmd_register(END_DATA, data_end);
+ pdl_cmd_register(EXEC_DATA, data_exec);
+ pdl_cmd_register(READ_PARTITION, read_partition);
+ pdl_cmd_register(READ_PARTITION_TABLE, read_partition_table);
+ pdl_cmd_register(FORMAT_FLASH, format_flash);
+ pdl_cmd_register(READ_IMAGE_ATTR, read_image_attr);
+ pdl_cmd_register(ERASE_PARTITION, erase_partition);
+ pdl_cmd_register(NORMAL_RESET, reset_machine);
+ pdl_cmd_register(POWER_OFF, poweroff_machine);
+ pdl_cmd_register(GET_VERSION, get_pdl_version);
+ pdl_cmd_register(SET_PDL_DBG, set_pdl_dbg);
+ pdl_cmd_register(CHECK_PARTITION_TABLE, check_partition_table);
+ pdl_cmd_register(IMAGE_LIST, recv_image_list);
+ pdl_cmd_register(HW_TEST, hw_test);
+ pdl_cmd_register(GET_PDL_LOG, get_pdl_log);
+ pdl_cmd_register(DOWNLOAD_FINISH, download_finish);
+
+ pdl_send_rsp(ACK);
+ pdl_handler(NULL);
+ return 0;
+}
+
+#if defined(CONFIG_CMD_PDL2)
+int do_pdl2(cmd_tbl_t * cmdtp, int flag, int argc, char *const argv[])
+{
+ pdl_main();
+ return 0;
+}
+
+U_BOOT_CMD(pdl2, 1, 1, do_pdl2,
+ "android fastboot protocol", "flash image to nand");
+#endif
diff --git a/pdl/pdl-2/pdl_nand.c b/pdl/pdl-2/pdl_nand.c
new file mode 100644
index 0000000000..db364e9e0f
--- /dev/null
+++ b/pdl/pdl-2/pdl_nand.c
@@ -0,0 +1,685 @@
+#include <common.h>
+#include <asm/types.h>
+#include "packet.h"
+#include <linux/string.h>
+#include <jffs2/load_kernel.h>
+#include <nand.h>
+#include <malloc.h>
+#include <asm/arch/spl_board_info.h>
+#include <asm/arch/mtdparts_def.h>
+#include <asm/arch/rda_sys.h>
+#include <asm/arch/factory.h>
+#include <asm/arch/prdinfo.h>
+#include "cmd_defs.h"
+#include "pdl_debug.h"
+#include "pdl.h"
+#include "pdl_command.h"
+#include "pdl_nand.h"
+#include <linux/mtd/nand.h>
+#include <mtd/nand/rda_nand.h>
+
+#define MAX_PART_NAME 30
+
+struct dl_file_info {
+ struct mtd_info *nand;
+
+ struct part_info *part;
+ unsigned long start_offset; /* partition start offset on flash */
+ unsigned long end_offset; /* partition end offset on flash */
+ unsigned long write_offset; /* write offset on flash */
+
+ unsigned char *download_bufp; /* download buffer pointer */
+ unsigned long download_size; /* data size in download buffer */
+
+ unsigned long total_size; /* image file size */
+ unsigned long recv_size; /* received data size */
+
+ char part_name[MAX_PART_NAME];
+ char vol_name[MAX_PART_NAME];
+};
+
+static struct dl_file_info dl_file;
+static unsigned char *download_buf;
+static unsigned long download_max_size = (24 * 1024 *1024);
+
+extern int mtdparts_init_default(void);
+extern int mtdparts_init_from_ptbl(void);
+extern int mtdparts_save_ptbl(int need_erase);
+
+static int __erase_partition(nand_info_t *nand,
+ struct part_info *part)
+{
+ nand_erase_options_t opts;
+ int ret;
+
+ pdl_info("%s: erase part '%s', offset 0x%llx size 0x%llx\n", __func__,
+ part->name, part->offset, part->size);
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = (loff_t) part->offset;
+ opts.length = (loff_t) part->size;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+
+ pdl_dbg("opts off 0x%08x\n", (uint32_t) opts.offset);
+ pdl_dbg("opts size 0x%08x\n", (uint32_t) opts.length);
+ ret = nand_erase_opts(nand, &opts);
+ if (!ret) {
+ part->dirty = 0;
+ }
+ return ret;
+}
+
+static int pdl_ubi_start_write(void)
+{
+ int ret = 0;
+
+ /* prepart to write ubi volume image, system/vendor partition */
+#ifdef MTDPARTS_UBI_DEF
+ pdl_info("init ubi part '%s'\n", dl_file.part_name);
+ ret = ubi_part_scan(dl_file.part_name);
+ if(ret) {
+ pdl_info("ubi init failed.\n");
+ return OPERATION_FAILED;
+ }
+
+ ret = ubi_check_default_vols(MTDPARTS_UBI_DEF);
+ if(ret) {
+ pdl_info("ubi volumes check failed.\n");
+ return OPERATION_FAILED;
+ }
+
+ ret = ubi_prepare_write_vol(dl_file.vol_name, dl_file.total_size);
+#endif
+
+ return ret;
+}
+
+typedef enum {
+ PART_RAW = 0,
+ PART_FACTORYDATA,
+ PART_PRDINFO,
+ PART_UBI_VOL,
+} PART_TYPE;
+static int update_part_type = PART_RAW;
+int nand_data_start(const char *part_name, unsigned long file_size)
+{
+ struct part_info *part;
+ struct mtd_device *dev;
+ u8 part_num;
+ int ret;
+
+ update_part_type = PART_RAW;
+ memset(&dl_file, 0, sizeof(dl_file));
+ strncpy(dl_file.part_name, part_name, MAX_PART_NAME-1);
+ strncpy(dl_file.vol_name, part_name, MAX_PART_NAME-1);
+
+#ifdef MTDPARTS_UBI_DEF /* all ubi volumes are in one ubi part */
+ if(strstr(MTDPARTS_UBI_DEF, part_name)) {
+ strncpy(dl_file.part_name, MTDPARTS_UBI_PART_NAME, MAX_PART_NAME-1);
+ strncpy(dl_file.vol_name, part_name, MAX_PART_NAME-1);
+ pdl_info("'%s' is a ubi volume in '%s' part.\n",
+ dl_file.vol_name, dl_file.part_name);
+ update_part_type = PART_UBI_VOL;
+ }
+#endif
+
+ ret = find_dev_and_part(dl_file.part_name, &dev, &part_num, &part);
+ if (ret) {
+ int i;
+ pdl_info("invalid mtd part:%s ", dl_file.part_name);
+ for (i = 0; i < MAX_PART_NAME; i++)
+ pdl_info(" 0x%x ", dl_file.part_name[i]);
+ pdl_info("\n");
+ return (INVALID_PARTITION);
+ }
+
+ pdl_info("found part '%s' offset: 0x%llx length: 0x%llx id: %d is %s\n",
+ part->name, part->offset, part->size, dev->id->num,
+ part->dirty ? "dirty" : "clean");
+ dl_file.part = part;
+ dl_file.end_offset = part->offset + part->size;
+ dl_file.nand = &nand_info[dev->id->num];
+
+ if (file_size > part->size) {
+ pdl_info("%s, download file too large, the size is:%ld\n",
+ __func__, file_size);
+ pdl_info("but the mtd part %s 's size is %llu\n",
+ part->name, part->size);
+ return INVALID_SIZE;
+ }
+
+ if (!strcmp(part->name, "factorydata")) {
+ pdl_dbg("update factorydata\n");
+ update_part_type = PART_FACTORYDATA;
+ } else if (!strcmp(part->name, PRDINFO_PART_NAME)) {
+ pdl_dbg("update prdinfo\n");
+ update_part_type = PART_PRDINFO;
+ }
+ //erase the mtd part;
+ if (part->dirty
+ && (update_part_type == PART_RAW)
+ ) {
+ ret = __erase_partition(dl_file.nand, part);
+ if (ret) {
+ pdl_info("erase mtd partitions error\n");
+ return DEVICE_ERROR;
+ }
+ }
+ /*now we'll write data to the partition, so dirty the part */
+ part->dirty = 1;
+
+ dl_file.total_size = file_size;
+ dl_file.start_offset = part->offset;
+ dl_file.write_offset = part->offset;
+ dl_file.download_bufp = download_buf;
+ dl_file.recv_size = 0;
+ dl_file.download_size = 0;
+
+ if((update_part_type == PART_UBI_VOL) && pdl_ubi_start_write()) {
+ pdl_error("can't write ubi volume %s\n", dl_file.vol_name);
+ return DEVICE_ERROR;
+ }
+
+ return 0;
+}
+
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+static void add_ddr_cal_val_to_bootloader(void)
+{
+ struct nand_chip *chip = dl_file.nand->priv;
+ struct rda_nand_info *info = chip->priv;
+ unsigned int cal_addr_flag_offs;
+ spl_bd_t * spl_board_info = (spl_bd_t *)CONFIG_SPL_BOARD_INFO_ADDR;
+ u16 ddr_cal[2] = {0};
+ if (strcmp(dl_file.part->name, "bootloader") == 0){
+ if (spl_board_info->spl_ddr_cal_info.ddr_auto_cal_flag == CONIFG_DDR_CAL_VAL_FLAG)
+ ddr_cal[0] = spl_board_info->spl_ddr_cal_info.ddr_auto_cal_flag;
+ ddr_cal[1] = spl_board_info->spl_ddr_cal_info.ddr_auto_cal_val[0];
+ /*SPL is 2K in every nand page, hardware limit in 8810 chip*/
+ cal_addr_flag_offs = (((spl_board_info->spl_ddr_cal_info.ddr_auto_cal_offs / 2048)
+ * 2048) * info->spl_adjust_ratio) / 2 +
+ (spl_board_info->spl_ddr_cal_info.ddr_auto_cal_offs % 2048);
+ memcpy((void *)(download_buf + cal_addr_flag_offs),
+ (void *)ddr_cal, 4);
+ }
+}
+#endif
+
+static int pdl_nand_data_write(int data_end)
+{
+ unsigned int bad_blocks = 0;
+ unsigned long write_bytes = dl_file.download_size;
+ int ret = 0;
+
+ pdl_info("flash data to '%s', size %lu bytes.\n",
+ dl_file.vol_name, write_bytes);
+
+ /* write ubi volume image, system/vendor partition */
+ if(update_part_type == PART_UBI_VOL) {
+#ifdef MTDPARTS_UBI_DEF
+ ret = ubi_do_write_vol(dl_file.vol_name, download_buf, dl_file.download_size);
+
+ /* clear download buffer position & size */
+ dl_file.download_bufp = download_buf;
+ dl_file.download_size = 0;
+
+ if(data_end)
+ ubi_finish_write_vol(dl_file.vol_name);
+#endif
+
+ } else if (update_part_type == PART_FACTORYDATA) {
+ ret = factory_update_all(download_buf, write_bytes);
+ } else if (update_part_type == PART_PRDINFO) {
+ ret = prdinfo_update_all((char *)download_buf, write_bytes);
+ } else {
+
+#ifdef _TGT_AP_DDR_AUTO_CALI_ENABLE
+ /* add DDR calibration value to bootloader image, it's a hack, FIXME */
+ add_ddr_cal_val_to_bootloader();
+#endif
+
+ ret = nand_write_skip_bad_new(dl_file.nand, dl_file.write_offset,
+ (size_t *)&write_bytes,
+ dl_file.end_offset,
+ download_buf,
+ 0, &bad_blocks);
+
+ /* clear download buffer position & size */
+ dl_file.download_bufp = download_buf;
+ dl_file.download_size = 0;
+ /* update write offset */
+ dl_file.write_offset += write_bytes;
+ dl_file.write_offset += bad_blocks * dl_file.nand->erasesize;
+
+ }
+ if (ret) {
+ pdl_error("oops, flash to nand error %d\n", ret);
+ return OPERATION_FAILED;
+ }
+
+ return 0;
+}
+
+int nand_data_midst(u8 *data, size_t size)
+{
+ int ret;
+ extern uint8_t pdl_extended_status;
+
+ if (!size) {
+ pdl_error("oops, send the zero length packet\n");
+ return INVALID_SIZE;
+ }
+ if (((dl_file.recv_size + size) > dl_file.total_size)) {
+ pdl_error("transfer size error receive (%lu), file (%lu)\n",
+ dl_file.recv_size + size, dl_file.total_size);
+ return INVALID_SIZE;
+ }
+
+ /* if buffer is full */
+ if((dl_file.download_size + size) > download_max_size) {
+ if (pdl_extended_status)
+ pdl_send_rsp(ACK_AGAIN_FLASH);
+ ret = pdl_nand_data_write(0);
+ if(ret) {
+ pdl_info("ERROR: '%s' partition write failed.\n", dl_file.part_name);
+ return ret;
+ }
+ }
+
+ pdl_dbg("writing 0x%x bytes to offset: 0x%08lx\n",
+ size, (unsigned long)dl_file.download_bufp);
+
+ /* save data to buffer */
+ memcpy(dl_file.download_bufp, data, size);
+
+ dl_file.download_bufp += size;
+ dl_file.download_size += size;
+ dl_file.recv_size += size;
+
+ return 0;
+}
+
+static int pdl_nand_data_verify(uint32_t crc)
+{
+ unsigned int bad_blocks = 0;
+ unsigned long read_bytes = 0;
+ unsigned long total_size = dl_file.recv_size;
+ unsigned long read_offset = 0;
+ uint32_t new_crc = 0;
+ int ret = 0;
+
+ if(!crc)
+ return 0;
+
+ /* read back data from nand, for crc verify */
+ pdl_info("Read back data from flash to do CRC verify.\n");
+
+ if(update_part_type == PART_UBI_VOL) {
+#ifdef MTDPARTS_UBI_DEF
+ while(1) {
+ read_bytes = (total_size > download_max_size) ? download_max_size : total_size;
+ ret = ubi_read_vol(dl_file.vol_name, read_offset, download_buf, read_bytes);
+ if(ret)
+ break;
+
+ new_crc = crc32(new_crc, download_buf, read_bytes);
+
+ if(read_bytes >= total_size)
+ break;
+ total_size -= read_bytes;
+ read_offset += read_bytes;
+ }
+#endif
+
+ } else if (update_part_type == PART_RAW) {
+ read_offset = dl_file.start_offset;
+ while(1) {
+ read_bytes = (total_size > download_max_size) ? download_max_size : total_size;
+ ret = nand_read_skip_bad_new(dl_file.nand, read_offset,
+ (size_t *)&read_bytes, download_buf, &bad_blocks);
+ if(ret)
+ break;
+
+ new_crc = crc32(new_crc, download_buf, read_bytes);
+
+ if(read_bytes >= total_size)
+ break;
+ total_size -= read_bytes;
+ read_offset += read_bytes + (bad_blocks * dl_file.nand->erasesize);
+ }
+
+ } else {
+ return 0;
+ }
+
+ if (ret) {
+ pdl_error("oops, read data from nand error %d\n", ret);
+ return OPERATION_FAILED;
+ }
+
+ if(crc != new_crc) {
+ pdl_info("CRC verify failed, expect %#x, got %#x.\n", crc, new_crc);
+ return CHECKSUM_ERROR;
+ } else {
+ pdl_info("CRC verify success, %#x.\n", crc);
+ }
+
+ return 0;
+}
+
+int nand_data_end(uint32_t crc)
+{
+ int ret;
+
+ /* force to verify CRC, ignore bootloader/factorydata */
+ if ((strcmp(dl_file.part->name, "bootloader") == 0 ||
+ strcmp(dl_file.part->name, "factorydata") == 0) ||
+ strcmp(dl_file.part->name, PRDINFO_PART_NAME) == 0) {
+ crc = 0;
+ } else if(!crc) {
+ pdl_info("ERROR: CRC checking is necessary!");
+ pdl_info("ERROR: please use the new version of download tools.\n");
+ return CHECKSUM_ERROR;
+ }
+
+ ret = pdl_nand_data_write(1);
+ if(ret) {
+ pdl_info("ERROR: '%s' partition write failed.\n", dl_file.part_name);
+ return ret;
+ }
+
+ ret = pdl_nand_data_verify(crc);
+ if(ret) {
+ pdl_info("ERROR: '%s' partition data verify failed.\n", dl_file.part_name);
+ return ret;
+ }
+
+ pdl_info("END: total flashed %ld to nand\n", dl_file.recv_size);
+
+ dl_file.download_bufp = download_buf;
+ dl_file.download_size = 0;
+ update_part_type = PART_RAW;
+
+ /* the mtd partition table is saved in 'bootloader' partition,
+ * if 'bootloader' is updated, need to re-write the partition table. */
+ if(strcmp(dl_file.part->name, "bootloader") == 0) {
+ mtdparts_save_ptbl(1);
+ }
+
+ prdinfo_set_pdl_image_download_result(dl_file.part->name, 1);
+ return 0;
+}
+
+
+int nand_read_partition(const char *part_name, u8 *data, size_t size,
+ size_t *actual_len)
+{
+ struct part_info *part = NULL;
+ u8 part_num;
+ struct mtd_info *nand = NULL;
+ struct mtd_device *dev;
+ int ret;
+
+ if(size > download_max_size) {
+ pdl_info("can't read partition '%s', size is too large\n", part_name);
+ return OPERATION_FAILED;
+ }
+
+#ifdef MTDPARTS_UBI_DEF /* all ubi volumes are in one ubi part */
+ if(strstr(MTDPARTS_UBI_DEF, part_name)) {
+ size_t vol_size = ubi_sizeof_vol(part_name);
+ size = (size > vol_size) ? vol_size: size;
+ pdl_info("'%s' is a ubi volume in '%s' part, of size %zu.\n",
+ part_name, MTDPARTS_UBI_PART_NAME, vol_size);
+ ret = ubi_part_scan(MTDPARTS_UBI_PART_NAME);
+ if(ret) {
+ pdl_info("ubi init failed.\n");
+ return OPERATION_FAILED;
+ }
+
+ ret = ubi_read_vol(part_name, 0, data, size);
+ if(ret) {
+ pdl_info("read ubi volume error: %s\n", part_name);
+ return DEVICE_ERROR;
+ }
+ if(actual_len)
+ *actual_len = size;
+ pdl_info("read volume %s ok, %u bytes\n", part_name, size);
+ return 0;
+ }
+#endif
+
+ ret = find_dev_and_part(part_name, &dev, &part_num, &part);
+ if (ret) {
+ pdl_error("%s: invalid mtd part '%s'\n",__func__, part_name);
+ return INVALID_PARTITION;
+ }
+
+ pdl_info("%s: read %#x bytes from '%s'\n", __func__, size, part_name);
+ nand = &nand_info[dev->id->num];
+ pdl_dbg("found part '%s' offset: 0x%llx length: %d/%llu id: %d\n",
+ part->name, part->offset, size, part->size, dev->id->num);
+
+ size = (size < part->size) ? size : part->size;
+
+ if (!strcmp(part_name, "factorydata")) {
+ size = factory_get_all(data);
+ if (size <= 0 ) {
+ return DEVICE_ERROR;
+ }
+ } else {
+ ret = nand_read_skip_bad(nand, part->offset, &size,
+ (u_char *)data);
+ if(ret < 0) {
+ pdl_error("%s: read from nand error\n", __func__);
+ return DEVICE_ERROR;
+ }
+ }
+ if(actual_len)
+ *actual_len = size;
+
+ pdl_dbg("%s: done!", __func__);
+ return 0;
+}
+
+int nand_write_partition(const char *part_name, unsigned char *data, size_t size)
+{
+ struct part_info *part = NULL;
+ u8 part_num;
+ struct mtd_info *nand = NULL;
+ struct mtd_device *dev;
+ int ret;
+ u32 bad_blocks = 0;
+
+ ret = find_dev_and_part(part_name, &dev, &part_num, &part);
+ if (ret) {
+ pdl_error("%s: invalid mtd part '%s'\n",__func__, part_name);
+ return INVALID_PARTITION;
+ }
+
+ pdl_info("%s: write %#x bytes to '%s'\n", __func__, size, part_name);
+ nand = &nand_info[dev->id->num];
+ pdl_dbg("found part '%s' offset: 0x%llx length: %d/%llu id: %d\n",
+ part->name, part->offset, size, part->size, dev->id->num);
+
+ size = (size < part->size) ? size : part->size;
+
+ if (!strcmp(part_name, "factorydata")) {
+ return factory_update_all(data, size);
+ } else {
+ ret = nand_write_skip_bad_new(nand, part->offset, &size,
+ part->offset + part->size,
+ (u_char *)data, 0, &bad_blocks);
+ part->dirty = 1;
+ if(ret < 0) {
+ pdl_error("%s: write to nand error.\n", __func__);
+ return DEVICE_ERROR;
+ }
+ }
+
+ pdl_dbg("%s: done!\n", __func__);
+ return 0;
+}
+
+extern struct mtd_device *current_mtd_dev;
+
+extern int mtdparts_ptbl_check_factorydata(int *same);
+int nand_format_flash(void)
+{
+ nand_erase_options_t opts;
+ nand_info_t *nand;
+ u8 nand_num= 0;
+ int same = 0;
+
+ /* re-init partition table by default */
+ if(mtdparts_init_default()) {
+ pdl_info("mtdparts init failed, abandon flash format..\n");
+ return DEVICE_ERROR;
+ }
+
+ pdl_info("format the whole flash part\n");
+ if (!current_mtd_dev) {
+ pdl_info("%s mtd device info error\n", __func__);
+ return DEVICE_ERROR;
+ }
+ /*
+ *erase all flash parts
+ */
+ nand_num = current_mtd_dev->id->num;
+ nand = &nand_info[nand_num];
+ if (!nand) {
+ pdl_info("%s mtd device info error\n", __func__);
+ return DEVICE_ERROR;
+ }
+ memset(&opts, 0, sizeof(opts));
+ opts.offset = 0;
+ opts.length = (loff_t) nand->size;
+ opts.jffs2 = 0;
+ opts.quiet = 0;
+ opts.scrub = 1;
+
+ /* if partition bootloader & factorydata is not changed, don't erase them */
+ mtdparts_ptbl_check_factorydata(&same);
+ if(same) {
+ struct part_info *part;
+ struct mtd_device *dev;
+ u8 part_num;
+ int ret = find_dev_and_part("factorydata", &dev, &part_num, &part);
+ if (!ret) {
+ opts.offset = part->offset + part->size;
+ opts.length -= opts.offset;
+ }
+ }
+ factory_load();
+
+ pdl_dbg("opts off 0x%08x\n", (uint32_t) opts.offset);
+ pdl_dbg("opts size 0x%08x\n", (uint32_t) opts.length);
+ pdl_dbg("nand write size 0x%08x\n", nand->writesize);
+ pdl_info("erase 0x%llx bytes to '%s' offset: 0x%llx\n",
+ opts.length, nand->name, opts.offset);
+ nand_erase_opts(nand, &opts);
+ mtdparts_clear_all_dirty(current_mtd_dev);
+
+ /* enable dirty for bootloader & factorydata part, if need */
+ if(opts.offset > 0) {
+ struct part_info *part;
+ struct mtd_device *dev;
+ u8 part_num;
+ int ret = find_dev_and_part("bootloader", &dev, &part_num, &part);
+ if (!ret) {
+ part->dirty = 1;
+ }
+ ret = find_dev_and_part("factorydata", &dev, &part_num, &part);
+ if (!ret) {
+ part->dirty = 1;
+ }
+ }
+
+ /* if 'factorydata' was erased, write back */
+ if (opts.offset <= 0)
+ factory_burn();
+
+ return 0;
+}
+
+int nand_erase_partition(const char *part_name)
+{
+ struct part_info *part;
+ struct mtd_device *dev;
+ u8 part_num;
+ int ret;
+ struct mtd_info *nand;
+
+#ifdef MTDPARTS_UBI_DEF /* all ubi volumes are in one ubi part */
+ if(strstr(MTDPARTS_UBI_DEF, part_name)) {
+ pdl_info("'%s' is a ubi volume in '%s' part, erase volume.\n",
+ part_name, MTDPARTS_UBI_PART_NAME);
+ ret = ubi_part_scan(MTDPARTS_UBI_PART_NAME);
+ if(ret) {
+ pdl_info("ubi init failed.\n");
+ return OPERATION_FAILED;
+ }
+
+ ret = ubi_erase_vol((char *)part_name);
+ if(ret) {
+ pdl_info("erase ubi volume error: %s\n", part_name);
+ return DEVICE_ERROR;
+ }
+ pdl_info("erase ubi volume ok: %s\n", part_name);
+ return 0;
+ }
+#endif
+
+ ret = find_dev_and_part(part_name, &dev, &part_num, &part);
+ if (ret) {
+ pdl_error("%s: invalid mtd part '%s'\n", __func__, part_name);
+ return INVALID_PARTITION;
+ }
+
+ pdl_dbg("%s: erase part '%s'\n", __func__, part_name);
+ pdl_dbg("found part '%s' offset: 0x%llx length: 0x%llx id: %d\n",
+ part->name, part->offset, part->size, dev->id->num);
+ nand = &nand_info[dev->id->num];
+
+ //erase the mtd part;
+ ret = __erase_partition(nand, part);
+ if (ret) {
+ pdl_error("%s: erase part error\n", __func__);
+ return DEVICE_ERROR;
+ }
+
+ pdl_dbg("%s: done!", __func__);
+ return 0;
+}
+
+int pdl_nand_init(void)
+{
+ int ret;
+ download_buf = (unsigned char *)SCRATCH_ADDR;
+ download_max_size = 24*1024*1024;//FB_DOWNLOAD_BUF_SIZE;
+ pdl_dbg("download buffer %p, max size %ld\n", download_buf, download_max_size);
+
+ ret = mtdparts_init_from_ptbl();
+ /* if fail to load partition table, try default */
+ if(ret) {
+ ret = mtdparts_init_default();
+ }
+ if(ret) {
+ return DEVICE_ERROR;
+ }
+
+ /* check page size */
+#ifdef NAND_PAGE_SIZE
+ if(current_mtd_dev) {
+ nand_info_t *nand = &nand_info[current_mtd_dev->id->num];
+ if(nand->writesize != NAND_PAGE_SIZE) {
+ pdl_info("nand page size is %#x, expect %#x, not compatible.\n",
+ nand->writesize, NAND_PAGE_SIZE);
+ return DEVICE_INCOMPATIBLE;
+ }
+ }
+#endif
+
+ return 0;
+}
+
diff --git a/pdl/pdl-2/pdl_nand.h b/pdl/pdl-2/pdl_nand.h
new file mode 100644
index 0000000000..21df6c7ae3
--- /dev/null
+++ b/pdl/pdl-2/pdl_nand.h
@@ -0,0 +1,31 @@
+#ifndef __PDL_NAND_H_
+#define __PDL_NAND_H_
+
+int nand_data_start(const char *part_name, unsigned long file_size);
+int nand_data_midst(u8 *data, size_t size);
+int nand_data_end(uint32_t crc);
+int nand_read_partition(const char *part_name, unsigned char *data,
+ size_t size, size_t *actual_len);
+int nand_write_partition(const char *part_name, unsigned char *data,
+ size_t size);
+int nand_format_flash(void);
+int nand_erase_partition(const char *part_name);
+
+int pdl_nand_init(void);
+
+#ifdef MTDPARTS_UBI_DEF
+int ubi_part_scan(const char *part_name);
+int ubi_check_default_vols(const char *ubi_default_str);
+int ubi_erase_vol(const char *vol_name);
+int ubi_read_vol(const char *vol_name, loff_t offp, void *buf, size_t size);
+int ubi_update_vol(const char *vol_name, void *buf, size_t size);
+size_t ubi_sizeof_vol(const char *vol_name);
+
+/* write a volume by multi parts. */
+int ubi_prepare_write_vol(const char *volume, size_t size);
+int ubi_do_write_vol(const char *volume, void *buf, size_t size);
+int ubi_finish_write_vol(const char *volume);
+#endif
+
+#endif
+
diff --git a/slt.mk b/slt.mk
new file mode 100644
index 0000000000..1589f5b784
--- /dev/null
+++ b/slt.mk
@@ -0,0 +1,36 @@
+#
+# Copyright (C) 2007 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+TARGET_PLATFORM := $(TARGET_BOARD_PLATFORM)
+TARGET_BOARD := slt
+
+# enable internal storage by virtual FAT partition on nand
+TARGET_FAT_ON_NAND := false
+
+# enable internal storage by FAT partition with NFTL
+TARGET_FAT_NFTL := false
+
+TARGET_SYSTEMIMAGE_USE_EXT4 := true
+TARGET_USERIMAGES_USE_EXT4 := true
+
+BOARD_SYSTEMIMAGE_FILE_SYSTEM_TYPE := ext4
+BOARD_VENDORIMAGE_FILE_SYSTEM_TYPE := ext4
+
+PRODUCT_NAME := $(TARGET_BOARD)
+PRODUCT_DEVICE := $(TARGET_BOARD)
+PRODUCT_MODEL := RDA SmartPhone
+PRODUCT_BRAND := RDA
+PRODUCT_MANUFACTURER := Rdamicro
diff --git a/spl/.gitignore b/spl/.gitignore
deleted file mode 100644
index 7c8814709f..0000000000
--- a/spl/.gitignore
+++ /dev/null
@@ -1,4 +0,0 @@
-u-boot-spl
-u-boot-spl.bin
-u-boot-spl.lds
-u-boot-spl.map
diff --git a/spl/Makefile b/spl/Makefile
index ea7d4750fb..6c1b96a127 100644
--- a/spl/Makefile
+++ b/spl/Makefile
@@ -54,9 +54,14 @@ LIBS-$(CONFIG_SPL_FAT_SUPPORT) += fs/fat/libfat.o
LIBS-$(CONFIG_SPL_LIBGENERIC_SUPPORT) += lib/libgeneric.o
LIBS-$(CONFIG_SPL_POWER_SUPPORT) += drivers/power/libpower.o
LIBS-$(CONFIG_SPL_NAND_SUPPORT) += drivers/mtd/nand/libnand.o
+LIBS-$(CONFIG_SPL_EMMC_SUPPORT) += drivers/mmc/libmmc.o
LIBS-$(CONFIG_SPL_ONENAND_SUPPORT) += drivers/mtd/onenand/libonenand.o
LIBS-$(CONFIG_SPL_DMA_SUPPORT) += drivers/dma/libdma.o
LIBS-$(CONFIG_SPL_POST_MEM_SUPPORT) += post/drivers/memory.o
+LIBS-$(CONFIG_SPL_USB_SUPPORT) += drivers/usb/gadget/libusb_gadget.o
+LIBS-$(CONFIG_SPL_MUSB_UDC_SUPPORT) += drivers/usb/musb/libusb_musb.o
+LIBS-$(CONFIG_SPL_RDA_PDL) += pdl/common/libpdl_common.o
+LIBS-$(CONFIG_SPL_RDA_PDL) += pdl/pdl-1/libpdl_stage.o
ifneq ($(CONFIG_AM33XX)$(CONFIG_OMAP34XX)$(CONFIG_OMAP44XX)$(CONFIG_OMAP54XX),)
LIBS-y += $(CPUDIR)/omap-common/libomap-common.o
@@ -108,7 +113,7 @@ $(OBJTREE)/MLO: $(obj)u-boot-spl.bin
-a $(CONFIG_SPL_TEXT_BASE) -d $< $@
endif
-ALL-y += $(obj)u-boot-spl.bin
+ALL-y += $(obj)u-boot-spl.bin $(obj)u-boot-spl.img
ifdef CONFIG_SAMSUNG
ALL-y += $(obj)$(BOARD)-spl.bin
@@ -124,6 +129,20 @@ endif
$(obj)u-boot-spl.bin: $(obj)u-boot-spl
$(OBJCOPY) $(OBJCFLAGS) -O binary $< $@
+ @spl_size=`stat -c%s $@` && \
+ if [ "$$spl_size" -gt $(CONFIG_SPL_CODE_MAX_SIZE) ] ; then \
+ echo "Error: $@ code size ($$spl_size) " \
+ "larger than max size ($(CONFIG_SPL_CODE_MAX_SIZE))"; \
+ exit 1; \
+ fi
+
+$(obj)u-boot-spl.img: $(obj)u-boot-spl.bin
+ $(XECHO)
+ $(XECHO) " GEN $(@F)"
+ $(OBJTREE)/tools/mkimage -A $(ARCH) -T standalone -C none \
+ -O u-boot -a $(CONFIG_SPL_TEXT_BASE) -e $(CONFIG_SPL_TEXT_BASE) \
+ -n 'u-boot-spl' \
+ -d $< $@ $(STDOUT_NULL)
GEN_UBOOT = \
UNDEF_SYM=`$(OBJDUMP) -x $(LIBS) | \
@@ -136,13 +155,17 @@ $(obj)u-boot-spl: depend $(START) $(LIBS) $(obj)u-boot-spl.lds
$(GEN_UBOOT)
$(START): depend
+ $(XECHO)
+ $(XECHO) " MAKE $(subst $(SPLTREE)/,,$@)"
$(MAKE) -C $(SRCTREE)/$(START_PATH) $@
$(LIBS): depend
+ $(XECHO)
+ $(XECHO) " MAKE $(dir $(subst $(SPLTREE)/,,$@))"
$(MAKE) -C $(SRCTREE)$(dir $(subst $(SPLTREE),,$@))
$(obj)u-boot-spl.lds: $(LDSCRIPT) depend
- $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -ansi -D__ASSEMBLY__ -P - < $< > $@
+ $(CPP) $(CPPFLAGS) $(LDPPFLAGS) -D__ASSEMBLY__ -P - < $< > $@
depend: $(obj).depend
.PHONY: depend
diff --git a/spl/u-boot-spl b/spl/u-boot-spl
new file mode 100755
index 0000000000..2de8edc34d
--- /dev/null
+++ b/spl/u-boot-spl
Binary files differ
diff --git a/spl/u-boot-spl.lds b/spl/u-boot-spl.lds
new file mode 100644
index 0000000000..001fde2269
--- /dev/null
+++ b/spl/u-boot-spl.lds
@@ -0,0 +1,44 @@
+OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
+OUTPUT_ARCH(arm)
+ENTRY(_start)
+SECTIONS
+{
+ . = 0x00100100;
+ . = ALIGN(4);
+ .text :
+ {
+ __start = .;
+ arch/arm/cpu/armv7/start.o (.text)
+ *(.text)
+ }
+ . = ALIGN(4);
+ .rodata : { *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.rodata*))) }
+ . = ALIGN(4);
+ .data : {
+ *(.data)
+ }
+ . = ALIGN(4);
+ . = .;
+ . = ALIGN(4);
+ __image_copy_end = .;
+ _end = .;
+ . = __start + 49152 - 0x10 - 0x100;
+ . = ALIGN(4);
+ .ddrcal : {
+ __ddrcal_start = .;
+ . = __ddrcal_start + 0x10;
+ __ddrcal_end = .;
+ }
+ . = .;
+ . = ALIGN(4);
+ .bss :
+ {
+ . = ALIGN(4);
+ __bss_start = .;
+ *(.bss*)
+ . = ALIGN(4);
+ __bss_end__ = .;
+ ASSERT((ABSOLUTE(__bss_end__) < 0x00110000 - 512), "too big data in spl, don't exceed intrenal ram");
+
+ }
+}
diff --git a/spl/u-boot-spl.map b/spl/u-boot-spl.map
new file mode 100644
index 0000000000..10aff4ae0b
--- /dev/null
+++ b/spl/u-boot-spl.map
@@ -0,0 +1,2274 @@
+Archive member included because of file (symbol)
+
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o)
+ arch/arm/cpu/armv7/rda/librda.o (__aeabi_uidiv)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divsi3.o)
+ drivers/mtd/nand/libnand.o (__aeabi_idiv)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_lshrdi3.o)
+ drivers/mmc/libmmc.o (__aeabi_llsr)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashrdi3.o)
+ drivers/mtd/nand/libnand.o (__aeabi_lasr)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashldi3.o)
+ drivers/mmc/libmmc.o (__aeabi_llsl)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_aeabi_uldivmod.o)
+ arch/arm/cpu/armv7/rda/librda.o (__aeabi_uldivmod)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_dvmd_lnx.o)
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o) (__aeabi_idiv0)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_aeabi_uldivmod.o) (__gnu_uldivmod_helper)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o) (__divdi3)
+/xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+ /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o) (__udivdi3)
+
+Discarded input sections
+
+ .data 0x00000000 0x0 arch/arm/cpu/armv7/start.o
+ .bss 0x00000000 0x0 arch/arm/cpu/armv7/start.o
+ .text 0x00000000 0x0 arch/arm/cpu/armv7/libarmv7.o
+ .text.v7_maint_dcache_all
+ 0x00000000 0xbe arch/arm/cpu/armv7/libarmv7.o
+ .text.invalidate_dcache_all
+ 0x00000000 0x10 arch/arm/cpu/armv7/libarmv7.o
+ .text.flush_dcache_all
+ 0x00000000 0x10 arch/arm/cpu/armv7/libarmv7.o
+ .text.arm_init_before_mmu
+ 0x00000000 0x22 arch/arm/cpu/armv7/libarmv7.o
+ .text.invalidate_icache_all
+ 0x00000000 0x14 arch/arm/cpu/armv7/libarmv7.o
+ .text.__v7_outer_cache_enable
+ 0x00000000 0x2 arch/arm/cpu/armv7/libarmv7.o
+ .text.__v7_outer_cache_disable
+ 0x00000000 0x2 arch/arm/cpu/armv7/libarmv7.o
+ .text.__v7_outer_cache_flush_all
+ 0x00000000 0x2 arch/arm/cpu/armv7/libarmv7.o
+ .text.__v7_outer_cache_inval_all
+ 0x00000000 0x2 arch/arm/cpu/armv7/libarmv7.o
+ .text.cleanup_before_linux
+ 0x00000000 0x1a arch/arm/cpu/armv7/libarmv7.o
+ .text.sdelay 0x00000000 0x6 arch/arm/cpu/armv7/libarmv7.o
+ .text.sr32 0x00000000 0x1c arch/arm/cpu/armv7/libarmv7.o
+ .text.wait_on_value
+ 0x00000000 0x1a arch/arm/cpu/armv7/libarmv7.o
+ .data 0x00000000 0x0 arch/arm/cpu/armv7/libarmv7.o
+ .bss 0x00000000 0x0 arch/arm/cpu/armv7/libarmv7.o
+ .text 0x00000000 0x0 arch/arm/cpu/armv7/rda/librda.o
+ .text.timer_init
+ 0x00000000 0x18 arch/arm/cpu/armv7/rda/librda.o
+ .text.reset_timer
+ 0x00000000 0xe arch/arm/cpu/armv7/rda/librda.o
+ .text.usec2ticks
+ 0x00000000 0x4 arch/arm/cpu/armv7/rda/librda.o
+ .text.ticks2usec
+ 0x00000000 0x4 arch/arm/cpu/armv7/rda/librda.o
+ .text.get_tbclk
+ 0x00000000 0x8 arch/arm/cpu/armv7/rda/librda.o
+ .text._serial_set_baudrate
+ 0x00000000 0x10 arch/arm/cpu/armv7/rda/librda.o
+ .text._serial_disable_rtscts
+ 0x00000000 0x10 arch/arm/cpu/armv7/rda/librda.o
+ .text._serial_init
+ 0x00000000 0x20 arch/arm/cpu/armv7/rda/librda.o
+ .text._serial_deinit
+ 0x00000000 0x10 arch/arm/cpu/armv7/rda/librda.o
+ .text._serial_tstc
+ 0x00000000 0x10 arch/arm/cpu/armv7/rda/librda.o
+ .text.hwflow_onoff
+ 0x00000000 0x24 arch/arm/cpu/armv7/rda/librda.o
+ .text.serial_setbrg
+ 0x00000000 0x2 arch/arm/cpu/armv7/rda/librda.o
+ .text.hal_IfcOpen
+ 0x00000000 0x18 arch/arm/cpu/armv7/rda/librda.o
+ .text.hal_IfcGetOwner
+ 0x00000000 0x14 arch/arm/cpu/armv7/rda/librda.o
+ .text.enable_neon
+ 0x00000000 0x50 arch/arm/cpu/armv7/rda/librda.o
+ .text.enable_caches
+ 0x00000000 0x30 arch/arm/cpu/armv7/rda/librda.o
+ .text.print_cpuinfo
+ 0x00000000 0x10 arch/arm/cpu/armv7/rda/librda.o
+ .text.rda_prod_id_get
+ 0x00000000 0xc arch/arm/cpu/armv7/rda/librda.o
+ .text.rda_bond_id_get
+ 0x00000000 0x10 arch/arm/cpu/armv7/rda/librda.o
+ .text.shutdown_system
+ 0x00000000 0x14 arch/arm/cpu/armv7/rda/librda.o
+ .text.enable_vibrator
+ 0x00000000 0x40 arch/arm/cpu/armv7/rda/librda.o
+ .text.enable_charger
+ 0x00000000 0x30 arch/arm/cpu/armv7/rda/librda.o
+ .text.print_cur_time
+ 0x00000000 0x3c arch/arm/cpu/armv7/rda/librda.o
+ .bss 0x00000000 0x0 arch/arm/cpu/armv7/rda/librda.o
+ .bss.hwflow 0x00000000 0x4 arch/arm/cpu/armv7/rda/librda.o
+ .text 0x00000000 0x0 arch/arm/lib/libarm.o
+ .text.__flush_cache
+ 0x00000000 0x2 arch/arm/lib/libarm.o
+ .text.__flush_dcache_all
+ 0x00000000 0xa arch/arm/lib/libarm.o
+ .text.__enable_caches
+ 0x00000000 0xc arch/arm/lib/libarm.o
+ .text.cp_delay
+ 0x00000000 0x18 arch/arm/lib/libarm.o
+ .text.cache_enable
+ 0x00000000 0x8a arch/arm/lib/libarm.o
+ .text.cache_disable
+ 0x00000000 0x28 arch/arm/lib/libarm.o
+ .text.__arm_init_before_mmu
+ 0x00000000 0x2 arch/arm/lib/libarm.o
+ .text.icache_enable
+ 0x00000000 0x8 arch/arm/lib/libarm.o
+ .text.icache_disable
+ 0x00000000 0x8 arch/arm/lib/libarm.o
+ .text.icache_status
+ 0x00000000 0xa arch/arm/lib/libarm.o
+ .text.dcache_enable
+ 0x00000000 0x6 arch/arm/lib/libarm.o
+ .text.dcache_disable
+ 0x00000000 0x6 arch/arm/lib/libarm.o
+ .text.dcache_status
+ 0x00000000 0xa arch/arm/lib/libarm.o
+ .rodata.str1.1
+ 0x00000000 0x1d arch/arm/lib/libarm.o
+ .data 0x00000000 0x0 arch/arm/lib/libarm.o
+ .bss 0x00000000 0x0 arch/arm/lib/libarm.o
+ .comment 0x00000000 0xca arch/arm/lib/libarm.o
+ .note.GNU-stack
+ 0x00000000 0x0 arch/arm/lib/libarm.o
+ .ARM.attributes
+ 0x00000000 0x2f arch/arm/lib/libarm.o
+ .debug_aranges
+ 0x00000000 0x98 arch/arm/lib/libarm.o
+ .debug_info 0x00000000 0x7fb arch/arm/lib/libarm.o
+ .debug_abbrev 0x00000000 0x2a1 arch/arm/lib/libarm.o
+ .debug_line 0x00000000 0x310 arch/arm/lib/libarm.o
+ .debug_frame 0x00000000 0x110 arch/arm/lib/libarm.o
+ .debug_str 0x00000000 0x511 arch/arm/lib/libarm.o
+ .debug_loc 0x00000000 0x244 arch/arm/lib/libarm.o
+ .debug_ranges 0x00000000 0x78 arch/arm/lib/libarm.o
+ .text 0x00000000 0x0 board/rda/common/librda.o
+ .text.dram_init
+ 0x00000000 0xc board/rda/common/librda.o
+ .text.dram_init_banksize
+ 0x00000000 0x12 board/rda/common/librda.o
+ .text.checkboard
+ 0x00000000 0x10 board/rda/common/librda.o
+ .text.get_board_rev
+ 0x00000000 0x4 board/rda/common/librda.o
+ .text.board_init
+ 0x00000000 0x18 board/rda/common/librda.o
+ .rodata.str1.1
+ 0x00000000 0x10 board/rda/common/librda.o
+ .data 0x00000000 0x0 board/rda/common/librda.o
+ .bss 0x00000000 0x0 board/rda/common/librda.o
+ .comment 0x00000000 0xca board/rda/common/librda.o
+ .note.GNU-stack
+ 0x00000000 0x0 board/rda/common/librda.o
+ .ARM.attributes
+ 0x00000000 0x2f board/rda/common/librda.o
+ .debug_aranges
+ 0x00000000 0x58 board/rda/common/librda.o
+ .debug_info 0x00000000 0x67f board/rda/common/librda.o
+ .debug_abbrev 0x00000000 0x245 board/rda/common/librda.o
+ .debug_line 0x00000000 0x28e board/rda/common/librda.o
+ .debug_frame 0x00000000 0x78 board/rda/common/librda.o
+ .debug_str 0x00000000 0x562 board/rda/common/librda.o
+ .debug_loc 0x00000000 0x20 board/rda/common/librda.o
+ .debug_ranges 0x00000000 0x38 board/rda/common/librda.o
+ .text 0x00000000 0x0 board/rda/rda8810/librda8810.o
+ .rodata.g_reg_cache
+ 0x00000000 0x4 board/rda/rda8810/librda8810.o
+ .data 0x00000000 0x0 board/rda/rda8810/librda8810.o
+ .bss 0x00000000 0x0 board/rda/rda8810/librda8810.o
+ .text 0x00000000 0x0 common/libcommon.o
+ .text.console_setfile
+ 0x00000000 0x60 common/libcommon.o
+ .text.serial_printf
+ 0x00000000 0x30 common/libcommon.o
+ .text.fprintf 0x00000000 0x34 common/libcommon.o
+ .text.vprintf 0x00000000 0x2a common/libcommon.o
+ .text.ctrlc 0x00000000 0x34 common/libcommon.o
+ .text.disable_ctrlc
+ 0x00000000 0x10 common/libcommon.o
+ .text.had_ctrlc
+ 0x00000000 0xc common/libcommon.o
+ .text.clear_ctrlc
+ 0x00000000 0xc common/libcommon.o
+ .text.dbg 0x00000000 0x6 common/libcommon.o
+ .text.search_device
+ 0x00000000 0x16 common/libcommon.o
+ .text.console_assign
+ 0x00000000 0x2c common/libcommon.o
+ .text.console_init_f
+ 0x00000000 0xa common/libcommon.o
+ .text.stdio_print_current_devices
+ 0x00000000 0x7c common/libcommon.o
+ .text.console_init_r
+ 0x00000000 0x80 common/libcommon.o
+ .text.sbrk 0x00000000 0x4c common/libcommon.o
+ .text.mem_malloc_init
+ 0x00000000 0x28 common/libcommon.o
+ .text.malloc_trim
+ 0x00000000 0x88 common/libcommon.o
+ .text.free 0x00000000 0x164 common/libcommon.o
+ .text.cfree 0x00000000 0x4 common/libcommon.o
+ .text.malloc 0x00000000 0x3e0 common/libcommon.o
+ .text.calloc 0x00000000 0x88 common/libcommon.o
+ .text.memalign
+ 0x00000000 0xcc common/libcommon.o
+ .text.pvalloc 0x00000000 0x14 common/libcommon.o
+ .text.valloc 0x00000000 0xa common/libcommon.o
+ .text.realloc 0x00000000 0x2b0 common/libcommon.o
+ .text.malloc_usable_size
+ 0x00000000 0x2a common/libcommon.o
+ .text.mallopt 0x00000000 0x3c common/libcommon.o
+ .text.image_check_magic
+ 0x00000000 0x18 common/libcommon.o
+ .text.image_multi_count
+ 0x00000000 0x12 common/libcommon.o
+ .text.image_multi_getimg
+ 0x00000000 0x5c common/libcommon.o
+ .text.getenv_yesno
+ 0x00000000 0x16 common/libcommon.o
+ .text.getenv_bootm_low
+ 0x00000000 0x20 common/libcommon.o
+ .text.getenv_bootm_size
+ 0x00000000 0x3c common/libcommon.o
+ .text.getenv_bootm_mapsize
+ 0x00000000 0x20 common/libcommon.o
+ .text.memmove_wd
+ 0x00000000 0xa common/libcommon.o
+ .text.genimg_print_size
+ 0x00000000 0x24 common/libcommon.o
+ .text.get_table_entry_name
+ 0x00000000 0x18 common/libcommon.o
+ .text.genimg_get_os_name
+ 0x00000000 0x14 common/libcommon.o
+ .text.genimg_get_arch_name
+ 0x00000000 0x14 common/libcommon.o
+ .text.genimg_get_type_name
+ 0x00000000 0x14 common/libcommon.o
+ .text.genimg_get_comp_name
+ 0x00000000 0x14 common/libcommon.o
+ .text.image_print_contents
+ 0x00000000 0xf8 common/libcommon.o
+ .text.get_table_entry_id
+ 0x00000000 0x26 common/libcommon.o
+ .text.genimg_get_os_id
+ 0x00000000 0x14 common/libcommon.o
+ .text.genimg_get_arch_id
+ 0x00000000 0x14 common/libcommon.o
+ .text.genimg_get_type_id
+ 0x00000000 0x14 common/libcommon.o
+ .text.genimg_get_comp_id
+ 0x00000000 0x14 common/libcommon.o
+ .text.genimg_get_format
+ 0x00000000 0xe common/libcommon.o
+ .text.genimg_get_image
+ 0x00000000 0x2 common/libcommon.o
+ .text.genimg_has_config
+ 0x00000000 0x4 common/libcommon.o
+ .text.boot_get_ramdisk
+ 0x00000000 0x17c common/libcommon.o
+ .text.boot_ramdisk_high
+ 0x00000000 0xc4 common/libcommon.o
+ .text.get_ram_size
+ 0x00000000 0xa2 common/libcommon.o
+ .text.stdio_get_list
+ 0x00000000 0x8 common/libcommon.o
+ .text.stdio_get_by_name
+ 0x00000000 0x34 common/libcommon.o
+ .text.stdio_clone
+ 0x00000000 0x30 common/libcommon.o
+ .text.stdio_register
+ 0x00000000 0x28 common/libcommon.o
+ .text.stdio_init
+ 0x00000000 0x5c common/libcommon.o
+ .text.CYGACC_COMM_IF_PUTC
+ 0x00000000 0x6 common/libcommon.o
+ .rodata.uimage_comp
+ 0x00000000 0x48 common/libcommon.o
+ .rodata.uimage_os
+ 0x00000000 0x30 common/libcommon.o
+ .rodata.uimage_arch
+ 0x00000000 0x48 common/libcommon.o
+ .rodata.uimage_type
+ 0x00000000 0xc0 common/libcommon.o
+ .data 0x00000000 0x0 common/libcommon.o
+ .data.av_ 0x00000000 0x408 common/libcommon.o
+ .data.mmap_threshold
+ 0x00000000 0x4 common/libcommon.o
+ .data.sbrk_base
+ 0x00000000 0x4 common/libcommon.o
+ .data.trim_threshold
+ 0x00000000 0x4 common/libcommon.o
+ .data.stdio_names
+ 0x00000000 0xc common/libcommon.o
+ .bss 0x00000000 0x0 common/libcommon.o
+ .bss.ctrlc_was_pressed
+ 0x00000000 0x4 common/libcommon.o
+ .bss.ctrlc_disabled
+ 0x00000000 0x4 common/libcommon.o
+ .bss.max_total_mem
+ 0x00000000 0x4 common/libcommon.o
+ .bss.mem_malloc_brk
+ 0x00000000 0x4 common/libcommon.o
+ .bss.max_sbrked_mem
+ 0x00000000 0x4 common/libcommon.o
+ .bss.current_mallinfo
+ 0x00000000 0x28 common/libcommon.o
+ .bss.mem_malloc_end
+ 0x00000000 0x4 common/libcommon.o
+ .bss.top_pad 0x00000000 0x4 common/libcommon.o
+ .bss.mem_malloc_start
+ 0x00000000 0x4 common/libcommon.o
+ .bss.n_mmaps_max
+ 0x00000000 0x4 common/libcommon.o
+ .bss.devs 0x00000000 0x3c common/libcommon.o
+ .text 0x00000000 0x0 drivers/mmc/libmmc.o
+ .text.board_mmc_getwp
+ 0x00000000 0x6 drivers/mmc/libmmc.o
+ .text.mmc_getwp
+ 0x00000000 0x1c drivers/mmc/libmmc.o
+ .text.mmc_send_cmd
+ 0x00000000 0xa drivers/mmc/libmmc.o
+ .text.mmc_switch_part
+ 0x00000000 0x34 drivers/mmc/libmmc.o
+ .text.mmc_get_dev
+ 0x00000000 0x1c drivers/mmc/libmmc.o
+ .text.print_mmc_devices
+ 0x00000000 0x48 drivers/mmc/libmmc.o
+ .text.get_mmc_num
+ 0x00000000 0xc drivers/mmc/libmmc.o
+ .text.mmc_set_preinit
+ 0x00000000 0x6 drivers/mmc/libmmc.o
+ .text.hal_getticks
+ 0x00000000 0x4 drivers/mmc/libmmc.o
+ .text.hal_get_op_status
+ 0x00000000 0xa drivers/mmc/libmmc.o
+ .text.mmc_read
+ 0x00000000 0x48 drivers/mmc/libmmc.o
+ .text.mmc_write
+ 0x00000000 0x48 drivers/mmc/libmmc.o
+ .data 0x00000000 0x0 drivers/mmc/libmmc.o
+ .bss 0x00000000 0x0 drivers/mmc/libmmc.o
+ .text 0x00000000 0x0 drivers/mtd/nand/libnand.o
+ .text.nand_spl_mtd_info
+ 0x00000000 0x10 drivers/mtd/nand/libnand.o
+ .text.nand_deselect
+ 0x00000000 0x1c drivers/mtd/nand/libnand.o
+ .text.nand_calculate_ecc
+ 0x00000000 0xbc drivers/mtd/nand/libnand.o
+ .text.nand_correct_data
+ 0x00000000 0xc0 drivers/mtd/nand/libnand.o
+ .text.is_power_of_2
+ 0x00000000 0xe drivers/mtd/nand/libnand.o
+ .text.nand_release_device
+ 0x00000000 0x10 drivers/mtd/nand/libnand.o
+ .text.nand_read_byte
+ 0x00000000 0xa drivers/mtd/nand/libnand.o
+ .text.nand_read_byte16
+ 0x00000000 0xe drivers/mtd/nand/libnand.o
+ .text.nand_read_word
+ 0x00000000 0xc drivers/mtd/nand/libnand.o
+ .text.nand_write_buf
+ 0x00000000 0x18 drivers/mtd/nand/libnand.o
+ .text.nand_read_buf
+ 0x00000000 0x18 drivers/mtd/nand/libnand.o
+ .text.nand_verify_buf
+ 0x00000000 0x24 drivers/mtd/nand/libnand.o
+ .text.nand_write_buf16
+ 0x00000000 0x1c drivers/mtd/nand/libnand.o
+ .text.nand_read_buf16
+ 0x00000000 0x1e drivers/mtd/nand/libnand.o
+ .text.nand_verify_buf16
+ 0x00000000 0x2a drivers/mtd/nand/libnand.o
+ .text.nand_check_wp
+ 0x00000000 0x2c drivers/mtd/nand/libnand.o
+ .text.nand_read_page_raw
+ 0x00000000 0x1e drivers/mtd/nand/libnand.o
+ .text.nand_read_page_raw_syndrome
+ 0x00000000 0x80 drivers/mtd/nand/libnand.o
+ .text.nand_read_page_swecc
+ 0x00000000 0xc0 drivers/mtd/nand/libnand.o
+ .text.nand_read_subpage
+ 0x00000000 0x1b4 drivers/mtd/nand/libnand.o
+ .text.nand_read_page_hwecc
+ 0x00000000 0xda drivers/mtd/nand/libnand.o
+ .text.nand_read_page_hwecc_oob_first
+ 0x00000000 0xde drivers/mtd/nand/libnand.o
+ .text.nand_read_page_syndrome
+ 0x00000000 0xc0 drivers/mtd/nand/libnand.o
+ .text.nand_read_oob_std
+ 0x00000000 0x24 drivers/mtd/nand/libnand.o
+ .text.nand_read_oob_syndrome
+ 0x00000000 0x9a drivers/mtd/nand/libnand.o
+ .text.nand_write_oob_std
+ 0x00000000 0x48 drivers/mtd/nand/libnand.o
+ .text.nand_write_oob_syndrome
+ 0x00000000 0xfc drivers/mtd/nand/libnand.o
+ .text.nand_write_page_raw
+ 0x00000000 0x1c drivers/mtd/nand/libnand.o
+ .text.nand_write_page_raw_syndrome
+ 0x00000000 0x7e drivers/mtd/nand/libnand.o
+ .text.nand_write_page_swecc
+ 0x00000000 0x72 drivers/mtd/nand/libnand.o
+ .text.nand_write_page_hwecc
+ 0x00000000 0x82 drivers/mtd/nand/libnand.o
+ .text.nand_write_page_syndrome
+ 0x00000000 0x90 drivers/mtd/nand/libnand.o
+ .text.single_erase_cmd
+ 0x00000000 0x24 drivers/mtd/nand/libnand.o
+ .text.multi_erase_cmd
+ 0x00000000 0x50 drivers/mtd/nand/libnand.o
+ .text.nand_sync
+ 0x00000000 0xe drivers/mtd/nand/libnand.o
+ .text.nand_block_checkbad
+ 0x00000000 0x54 drivers/mtd/nand/libnand.o
+ .text.nand_block_isbad
+ 0x00000000 0x24 drivers/mtd/nand/libnand.o
+ .text.nand_block_markbad
+ 0x00000000 0x24 drivers/mtd/nand/libnand.o
+ .text.nand_write_page
+ 0x00000000 0x68 drivers/mtd/nand/libnand.o
+ .text.mtd_div_by_cs
+ 0x00000000 0x4a drivers/mtd/nand/libnand.o
+ .text.mtd_div_by_ws
+ 0x00000000 0x24 drivers/mtd/nand/libnand.o
+ .text.nand_block_bad
+ 0x00000000 0xf4 drivers/mtd/nand/libnand.o
+ .text.nand_wait
+ 0x00000000 0x7c drivers/mtd/nand/libnand.o
+ .text.generic_ffs.part.0
+ 0x00000000 0x30 drivers/mtd/nand/libnand.o
+ .text.nand_select_chip
+ 0x00000000 0x3c drivers/mtd/nand/libnand.o
+ .text.nand_fill_oob
+ 0x00000000 0xac drivers/mtd/nand/libnand.o
+ .text.nand_do_write_oob
+ 0x00000000 0x18a drivers/mtd/nand/libnand.o
+ .text.nand_default_block_markbad
+ 0x00000000 0x128 drivers/mtd/nand/libnand.o
+ .text.nand_do_write_ops
+ 0x00000000 0x2a4 drivers/mtd/nand/libnand.o
+ .text.nand_write_oob
+ 0x00000000 0x70 drivers/mtd/nand/libnand.o
+ .text.nand_write
+ 0x00000000 0x60 drivers/mtd/nand/libnand.o
+ .text.nand_transfer_oob
+ 0x00000000 0xac drivers/mtd/nand/libnand.o
+ .text.nand_do_read_ops
+ 0x00000000 0x2b0 drivers/mtd/nand/libnand.o
+ .text.nand_read_oob
+ 0x00000000 0x260 drivers/mtd/nand/libnand.o
+ .text.nand_read
+ 0x00000000 0x60 drivers/mtd/nand/libnand.o
+ .text.nand_command
+ 0x00000000 0x124 drivers/mtd/nand/libnand.o
+ .text.nand_command_lp
+ 0x00000000 0x16c drivers/mtd/nand/libnand.o
+ .text.nand_erase_nand
+ 0x00000000 0x384 drivers/mtd/nand/libnand.o
+ .text.nand_erase
+ 0x00000000 0x6 drivers/mtd/nand/libnand.o
+ .text.nand_scan_ident
+ 0x00000000 0x5ac drivers/mtd/nand/libnand.o
+ .text.nand_scan_tail
+ 0x00000000 0x3f0 drivers/mtd/nand/libnand.o
+ .text.nand_scan
+ 0x00000000 0x18 drivers/mtd/nand/libnand.o
+ .text.nand_release
+ 0x00000000 0x32 drivers/mtd/nand/libnand.o
+ .text.disable_spi_nand_flash_ecc_mode
+ 0x00000000 0x14 drivers/mtd/nand/libnand.o
+ .text.rda_flash_intf_is_spi
+ 0x00000000 0xc drivers/mtd/nand/libnand.o
+ .rodata.nand_ecc_precalc_table
+ 0x00000000 0x100 drivers/mtd/nand/libnand.o
+ .rodata.__FUNCTION__.3802
+ 0x00000000 0x11 drivers/mtd/nand/libnand.o
+ .rodata.__FUNCTION__.4147
+ 0x00000000 0x12 drivers/mtd/nand/libnand.o
+ .rodata.__FUNCTION__.4387
+ 0x00000000 0xe drivers/mtd/nand/libnand.o
+ .rodata.__func__.4480
+ 0x00000000 0x10 drivers/mtd/nand/libnand.o
+ .rodata.__func__.4528
+ 0x00000000 0x14 drivers/mtd/nand/libnand.o
+ .rodata.__FUNCTION__.4571
+ 0x00000000 0xf drivers/mtd/nand/libnand.o
+ .data 0x00000000 0x0 drivers/mtd/nand/libnand.o
+ .data.nand_oob_8
+ 0x00000000 0x248 drivers/mtd/nand/libnand.o
+ .data.nand_oob_16
+ 0x00000000 0x248 drivers/mtd/nand/libnand.o
+ .data.nand_oob_128
+ 0x00000000 0x248 drivers/mtd/nand/libnand.o
+ .data.nand_oob_64
+ 0x00000000 0x248 drivers/mtd/nand/libnand.o
+ .bss 0x00000000 0x0 drivers/mtd/nand/libnand.o
+ .text 0x00000000 0x0 lib/libgeneric.o
+ .text.strcpy 0x00000000 0x10 lib/libgeneric.o
+ .text.strncpy 0x00000000 0x14 lib/libgeneric.o
+ .text.strcat 0x00000000 0x1c lib/libgeneric.o
+ .text.strncat 0x00000000 0x2c lib/libgeneric.o
+ .text.strcmp 0x00000000 0x16 lib/libgeneric.o
+ .text.strncmp 0x00000000 0x1e lib/libgeneric.o
+ .text.strchr 0x00000000 0x18 lib/libgeneric.o
+ .text.skip_spaces
+ 0x00000000 0x18 lib/libgeneric.o
+ .text.strlen 0x00000000 0x10 lib/libgeneric.o
+ .text.strim 0x00000000 0x30 lib/libgeneric.o
+ .text.strrchr 0x00000000 0x20 lib/libgeneric.o
+ .text.strdup 0x00000000 0x22 lib/libgeneric.o
+ .text.strspn 0x00000000 0x24 lib/libgeneric.o
+ .text.strpbrk 0x00000000 0x22 lib/libgeneric.o
+ .text.strtok 0x00000000 0x44 lib/libgeneric.o
+ .text.strsep 0x00000000 0x1c lib/libgeneric.o
+ .text.strswab 0x00000000 0x26 lib/libgeneric.o
+ .text.bcopy 0x00000000 0x16 lib/libgeneric.o
+ .text.memscan 0x00000000 0x18 lib/libgeneric.o
+ .text.strstr 0x00000000 0x34 lib/libgeneric.o
+ .text.memchr 0x00000000 0x1a lib/libgeneric.o
+ .text.simple_strtoul
+ 0x00000000 0x70 lib/libgeneric.o
+ .text.strict_strtoul
+ 0x00000000 0x40 lib/libgeneric.o
+ .text.simple_strtol
+ 0x00000000 0x1a lib/libgeneric.o
+ .text.ustrtoul
+ 0x00000000 0x40 lib/libgeneric.o
+ .text.simple_strtoull
+ 0x00000000 0xa4 lib/libgeneric.o
+ .text.panic 0x00000000 0x30 lib/libgeneric.o
+ .text.__assert_fail
+ 0x00000000 0x10 lib/libgeneric.o
+ .text.simple_itoa
+ 0x00000000 0x38 lib/libgeneric.o
+ .rodata.hex_asc
+ 0x00000000 0x11 lib/libgeneric.o
+ .data 0x00000000 0x0 lib/libgeneric.o
+ .bss 0x00000000 0x0 lib/libgeneric.o
+ .bss.___strtok
+ 0x00000000 0x4 lib/libgeneric.o
+ .bss.local.3146
+ 0x00000000 0x16 lib/libgeneric.o
+ .text 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ .text.__aeabi_unwind_cpp_pr1
+ 0x00000000 0x2 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divsi3.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divsi3.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_lshrdi3.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_lshrdi3.o)
+ .text 0x00000000 0x1c /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashrdi3.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashrdi3.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashrdi3.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashrdi3.o)
+ .ARM.attributes
+ 0x00000000 0x23 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashrdi3.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashldi3.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashldi3.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_aeabi_uldivmod.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_aeabi_uldivmod.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_dvmd_lnx.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_dvmd_lnx.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ .ARM.extab 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ .ARM.extab 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ .data 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+ .bss 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+ .ARM.extab 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+
+Memory Configuration
+
+Name Origin Length Attributes
+*default* 0x00000000 0xffffffff
+
+Linker script and memory map
+
+ 0x00100100 . = 0x100100
+ 0x00100100 . = ALIGN (0x4)
+
+.text 0x00100100 0xdd8
+ 0x00100100 __start = .
+ arch/arm/cpu/armv7/start.o(.text)
+ .text 0x00100100 0x170 arch/arm/cpu/armv7/start.o
+ 0x00100100 _start
+ 0x00100140 _end_vect
+ 0x00100140 _TEXT_BASE
+ 0x00100144 _bss_start_ofs
+ 0x00100148 _image_copy_end_ofs
+ 0x0010014c _bss_end_ofs
+ 0x00100150 _end_ofs
+ 0x00100154 IRQ_STACK_START_IN
+ 0x00100190 relocate_code
+ 0x0010021c cpu_init_cp15
+ *(.text)
+ .text 0x00100270 0x278 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o)
+ 0x00100270 __udivsi3
+ 0x00100270 __aeabi_uidiv
+ 0x001004cc __aeabi_uidivmod
+ .text 0x001004e8 0x2b0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divsi3.o)
+ 0x001004e8 __aeabi_idiv
+ 0x001004e8 __divsi3
+ 0x0010077c __aeabi_idivmod
+ .text 0x00100798 0x18 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_lshrdi3.o)
+ 0x00100798 __aeabi_llsr
+ 0x00100798 __lshrdi3
+ .text 0x001007b0 0x18 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashldi3.o)
+ 0x001007b0 __ashldi3
+ 0x001007b0 __aeabi_llsl
+ .text 0x001007c8 0x2c /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_aeabi_uldivmod.o)
+ 0x001007c8 __aeabi_uldivmod
+ .text 0x001007f4 0xc /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_dvmd_lnx.o)
+ 0x001007f4 __aeabi_ldiv0
+ 0x001007f4 __aeabi_idiv0
+ .text 0x00100800 0x5c /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ 0x00100800 __gnu_ldivmod_helper
+ 0x00100830 __gnu_uldivmod_helper
+ .text 0x0010085c 0x360 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ 0x0010085c __divdi3
+ .text 0x00100bbc 0x31c /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+ 0x00100bbc __udivdi3
+
+.glue_7 0x00100ed8 0x0
+ .glue_7 0x00000000 0x0 linker stubs
+
+.glue_7t 0x00100ed8 0x0
+ .glue_7t 0x00000000 0x0 linker stubs
+
+.vfp11_veneer 0x00100ed8 0x0
+ .vfp11_veneer 0x00000000 0x0 linker stubs
+
+.v4_bx 0x00100ed8 0x0
+ .v4_bx 0x00000000 0x0 linker stubs
+
+.iplt 0x00100ed8 0x0
+ .iplt 0x00000000 0x0 arch/arm/cpu/armv7/start.o
+
+.text.v7_dcache_maint_range
+ 0x00100ed8 0x7c
+ .text.v7_dcache_maint_range
+ 0x00100ed8 0x7c arch/arm/cpu/armv7/libarmv7.o
+
+.text.invalidate_dcache_range
+ 0x00100f54 0x18
+ .text.invalidate_dcache_range
+ 0x00100f54 0x18 arch/arm/cpu/armv7/libarmv7.o
+ 0x00100f54 invalidate_dcache_range
+
+.text.flush_dcache_range
+ 0x00100f6c 0x18
+ .text.flush_dcache_range
+ 0x00100f6c 0x18 arch/arm/cpu/armv7/libarmv7.o
+ 0x00100f6c flush_dcache_range
+
+.text.flush_cache
+ 0x00100f84 0x6
+ .text.flush_cache
+ 0x00100f84 0x6 arch/arm/cpu/armv7/libarmv7.o
+ 0x00100f84 flush_cache
+
+.text.__v7_outer_cache_flush_range
+ 0x00100f8a 0x2
+ .text.__v7_outer_cache_flush_range
+ 0x00100f8a 0x2 arch/arm/cpu/armv7/libarmv7.o
+ 0x00100f8a v7_outer_cache_flush_range
+ 0x00100f8a __v7_outer_cache_flush_range
+
+.text.__v7_outer_cache_inval_range
+ 0x00100f8c 0x2
+ .text.__v7_outer_cache_inval_range
+ 0x00100f8c 0x2 arch/arm/cpu/armv7/libarmv7.o
+ 0x00100f8c __v7_outer_cache_inval_range
+ 0x00100f8c v7_outer_cache_inval_range
+
+.text.save_boot_params_default
+ 0x00100f8e 0x2
+ .text.save_boot_params_default
+ 0x00100f8e 0x2 arch/arm/cpu/armv7/libarmv7.o
+ 0x00100f8e save_boot_params_default
+ 0x00100f8e save_boot_params
+
+.text.get_ticks
+ 0x00100f90 0xc
+ .text.get_ticks
+ 0x00100f90 0xc arch/arm/cpu/armv7/rda/librda.o
+ 0x00100f90 get_ticks
+
+.text.get_timer
+ 0x00100f9c 0x30
+ .text.get_timer
+ 0x00100f9c 0x30 arch/arm/cpu/armv7/rda/librda.o
+ 0x00100f9c get_timer
+
+.text.__udelay 0x00100fcc 0x24
+ .text.__udelay
+ 0x00100fcc 0x24 arch/arm/cpu/armv7/rda/librda.o
+ 0x00100fcc __udelay
+
+.text._serial_enable_rtscts
+ 0x00100ff0 0x10
+ .text._serial_enable_rtscts
+ 0x00100ff0 0x10 arch/arm/cpu/armv7/rda/librda.o
+ 0x00100ff0 _serial_enable_rtscts
+
+.text._serial_getc
+ 0x00101000 0x14
+ .text._serial_getc
+ 0x00101000 0x14 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101000 _serial_getc
+
+.text._serial_putc_hw
+ 0x00101014 0x14
+ .text._serial_putc_hw
+ 0x00101014 0x14 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101014 _serial_putc_hw
+
+.text._serial_putc
+ 0x00101028 0x1c
+ .text._serial_putc
+ 0x00101028 0x1c arch/arm/cpu/armv7/rda/librda.o
+ 0x00101028 _serial_putc
+
+.text._serial_puts
+ 0x00101044 0x16
+ .text._serial_puts
+ 0x00101044 0x16 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101044 _serial_puts
+
+.text.serial_init
+ 0x0010105a 0x4
+ .text.serial_init
+ 0x0010105a 0x4 arch/arm/cpu/armv7/rda/librda.o
+ 0x0010105a serial_init
+
+.text.serial_getc
+ 0x0010105e 0x6
+ .text.serial_getc
+ 0x0010105e 0x6 arch/arm/cpu/armv7/rda/librda.o
+ 0x0010105e serial_getc
+
+.text.serial_tstc
+ 0x00101064 0x10
+ .text.serial_tstc
+ 0x00101064 0x10 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101064 serial_tstc
+
+.text.serial_putc
+ 0x00101074 0x6
+ .text.serial_putc
+ 0x00101074 0x6 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101074 serial_putc
+
+.text.serial_puts
+ 0x0010107a 0x6
+ .text.serial_puts
+ 0x0010107a 0x6 arch/arm/cpu/armv7/rda/librda.o
+ 0x0010107a serial_puts
+
+.text.hal_IfcChannelRelease
+ 0x00101080 0x44
+ .text.hal_IfcChannelRelease
+ 0x00101080 0x44 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101080 hal_IfcChannelRelease
+
+.text.hal_IfcChannelFlush
+ 0x001010c4 0x34
+ .text.hal_IfcChannelFlush
+ 0x001010c4 0x34 arch/arm/cpu/armv7/rda/librda.o
+ 0x001010c4 hal_IfcChannelFlush
+
+.text.hal_IfcChannelIsFifoEmpty
+ 0x001010f8 0x2c
+ .text.hal_IfcChannelIsFifoEmpty
+ 0x001010f8 0x2c arch/arm/cpu/armv7/rda/librda.o
+ 0x001010f8 hal_IfcChannelIsFifoEmpty
+
+.text.hal_IfcTransferStart
+ 0x00101124 0x60
+ .text.hal_IfcTransferStart
+ 0x00101124 0x60 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101124 hal_IfcTransferStart
+
+.text.rda_hwcfg_reg_set
+ 0x00101184 0x1e
+ .text.rda_hwcfg_reg_set
+ 0x00101184 0x1e arch/arm/cpu/armv7/rda/librda.o
+ 0x00101184 rda_hwcfg_reg_set
+
+.text.rda_hwcfg_reg_get
+ 0x001011a2 0xc
+ .text.rda_hwcfg_reg_get
+ 0x001011a2 0xc arch/arm/cpu/armv7/rda/librda.o
+ 0x001011a2 rda_hwcfg_reg_get
+
+.text.rda_hwcfg_get
+ 0x001011b0 0x10
+ .text.rda_hwcfg_get
+ 0x001011b0 0x10 arch/arm/cpu/armv7/rda/librda.o
+ 0x001011b0 rda_hwcfg_get
+
+.text.rda_swcfg_reg_set
+ 0x001011c0 0x1e
+ .text.rda_swcfg_reg_set
+ 0x001011c0 0x1e arch/arm/cpu/armv7/rda/librda.o
+ 0x001011c0 rda_swcfg_reg_set
+
+.text.rda_swcfg_reg_get
+ 0x001011de 0xc
+ .text.rda_swcfg_reg_get
+ 0x001011de 0xc arch/arm/cpu/armv7/rda/librda.o
+ 0x001011de rda_swcfg_reg_get
+
+.text.hwcfg_swcfg_init
+ 0x001011ec 0x34
+ .text.hwcfg_swcfg_init
+ 0x001011ec 0x34 arch/arm/cpu/armv7/rda/librda.o
+ 0x001011ec hwcfg_swcfg_init
+
+.text.rda_swcfg_get
+ 0x00101220 0x10
+ .text.rda_swcfg_get
+ 0x00101220 0x10 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101220 rda_swcfg_get
+
+.text.rda_metal_id_get
+ 0x00101230 0x10
+ .text.rda_metal_id_get
+ 0x00101230 0x10 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101230 rda_metal_id_get
+
+.text.rda_nand_iodrive_set
+ 0x00101240 0x14
+ .text.rda_nand_iodrive_set
+ 0x00101240 0x14 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101240 rda_nand_iodrive_set
+
+.text.rda_media_get
+ 0x00101254 0x4
+ .text.rda_media_get
+ 0x00101254 0x4 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101254 rda_media_get
+
+.text.reset_cpu
+ 0x00101258 0x18
+ .text.reset_cpu
+ 0x00101258 0x18 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101258 reset_cpu
+
+.text.rda_bm_is_calib
+ 0x00101270 0xc
+ .text.rda_bm_is_calib
+ 0x00101270 0xc arch/arm/cpu/armv7/rda/librda.o
+ 0x00101270 rda_bm_is_calib
+
+.text.rda_bm_is_autocall
+ 0x0010127c 0xc
+ .text.rda_bm_is_autocall
+ 0x0010127c 0xc arch/arm/cpu/armv7/rda/librda.o
+ 0x0010127c rda_bm_is_autocall
+
+.text.rda_bm_is_download
+ 0x00101288 0xc
+ .text.rda_bm_is_download
+ 0x00101288 0xc arch/arm/cpu/armv7/rda/librda.o
+ 0x00101288 rda_bm_is_download
+
+.text.rda_bm_download_key_pressed
+ 0x00101294 0x2c
+ .text.rda_bm_download_key_pressed
+ 0x00101294 0x2c arch/arm/cpu/armv7/rda/librda.o
+ 0x00101294 rda_bm_download_key_pressed
+
+.text.rda_reboot
+ 0x001012c0 0x64
+ .text.rda_reboot
+ 0x001012c0 0x64 arch/arm/cpu/armv7/rda/librda.o
+ 0x001012c0 rda_reboot
+
+.text.rda_dump_buf
+ 0x00101324 0x7c
+ .text.rda_dump_buf
+ 0x00101324 0x7c arch/arm/cpu/armv7/rda/librda.o
+ 0x00101324 rda_dump_buf
+
+.text.ispi_tx_finished
+ 0x001013a0 0x24
+ .text.ispi_tx_finished
+ 0x001013a0 0x24 arch/arm/cpu/armv7/rda/librda.o
+
+.text.ispi_send_data.constprop.0
+ 0x001013c4 0x2c
+ .text.ispi_send_data.constprop.0
+ 0x001013c4 0x2c arch/arm/cpu/armv7/rda/librda.o
+
+.text.ispi_open
+ 0x001013f0 0x30
+ .text.ispi_open
+ 0x001013f0 0x30 arch/arm/cpu/armv7/rda/librda.o
+ 0x001013f0 ispi_open
+
+.text.ispi_reg_write
+ 0x00101420 0x30
+ .text.ispi_reg_write
+ 0x00101420 0x30 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101420 ispi_reg_write
+
+.text.ispi_reg_read
+ 0x00101450 0x48
+ .text.ispi_reg_read
+ 0x00101450 0x48 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101450 ispi_reg_read
+
+.text.rda_read_efuse
+ 0x00101498 0x44
+ .text.rda_read_efuse
+ 0x00101498 0x44 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101498 rda_read_efuse
+
+.text.set_security_context
+ 0x001014dc 0x118
+ .text.set_security_context
+ 0x001014dc 0x118 arch/arm/cpu/armv7/rda/librda.o
+ 0x001014dc set_security_context
+
+.text.image_sign_verify
+ 0x001015f4 0x40
+ .text.image_sign_verify
+ 0x001015f4 0x40 arch/arm/cpu/armv7/rda/librda.o
+ 0x001015f4 image_sign_verify
+
+.text.image_sign_verify_uimage
+ 0x00101634 0xa
+ .text.image_sign_verify_uimage
+ 0x00101634 0xa arch/arm/cpu/armv7/rda/librda.o
+ 0x00101634 image_sign_verify_uimage
+
+.text.get_chip_security_context
+ 0x00101640 0x64
+ .text.get_chip_security_context
+ 0x00101640 0x64 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101640 get_chip_security_context
+
+.text.__fswab32
+ 0x001016a4 0xc
+ .text.__fswab32
+ 0x001016a4 0x4 arch/arm/cpu/armv7/rda/librda.o
+ .text.__fswab32
+ 0x001016a8 0x4 common/libcommon.o
+ .text.__fswab32
+ 0x001016ac 0x4 drivers/mmc/libmmc.o
+
+.text.image_get_magic
+ 0x001016b0 0x6
+ .text.image_get_magic
+ 0x001016b0 0x6 arch/arm/cpu/armv7/rda/librda.o
+
+.text.board_init_f
+ 0x001016b8 0x14
+ .text.board_init_f
+ 0x001016b8 0x14 arch/arm/cpu/armv7/rda/librda.o
+ 0x001016b8 board_init_f
+
+.text.check_uimage
+ 0x001016cc 0xcc
+ .text.check_uimage
+ 0x001016cc 0xcc arch/arm/cpu/armv7/rda/librda.o
+ 0x001016cc check_uimage
+
+.text.board_init_r
+ 0x00101798 0xf4
+ .text.board_init_r
+ 0x00101798 0xf4 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101798 board_init_r
+
+.text.getcxmodem
+ 0x0010188c 0x16
+ .text.getcxmodem
+ 0x0010188c 0x16 arch/arm/cpu/armv7/rda/librda.o
+
+.text.load_serial_xmodem.constprop.0
+ 0x001018a4 0xa4
+ .text.load_serial_xmodem.constprop.0
+ 0x001018a4 0xa4 arch/arm/cpu/armv7/rda/librda.o
+
+.text.xmodem_boot
+ 0x00101948 0x30
+ .text.xmodem_boot
+ 0x00101948 0x30 arch/arm/cpu/armv7/rda/librda.o
+ 0x00101948 xmodem_boot
+
+.text.get_default_clock_config
+ 0x00101978 0x8
+ .text.get_default_clock_config
+ 0x00101978 0x8 board/rda/rda8810/librda8810.o
+ 0x00101978 get_default_clock_config
+
+.text.sys_shutdown_pll
+ 0x00101980 0x34
+ .text.sys_shutdown_pll
+ 0x00101980 0x34 board/rda/rda8810/librda8810.o
+
+.text.sys_setup_clk
+ 0x001019b4 0x8c
+ .text.sys_setup_clk
+ 0x001019b4 0x8c board/rda/rda8810/librda8810.o
+
+.text.ispi_reg_write_and_save
+ 0x00101a40 0x64
+ .text.ispi_reg_write_and_save
+ 0x00101a40 0x64 board/rda/rda8810/librda8810.o
+
+.text.pll_freq_set
+ 0x00101aa4 0xf8
+ .text.pll_freq_set
+ 0x00101aa4 0xf8 board/rda/rda8810/librda8810.o
+
+.text.pll_setup_freq
+ 0x00101b9c 0x34
+ .text.pll_setup_freq
+ 0x00101b9c 0x34 board/rda/rda8810/librda8810.o
+
+.text.pll_setup_init_cal_dynamic
+ 0x00101bd0 0x64
+ .text.pll_setup_init_cal_dynamic
+ 0x00101bd0 0x64 board/rda/rda8810/librda8810.o
+
+.text.pll_setup_init
+ 0x00101c34 0x400
+ .text.pll_setup_init
+ 0x00101c34 0x400 board/rda/rda8810/librda8810.o
+
+.text.sys_reset_mem
+ 0x00102034 0x20
+ .text.sys_reset_mem
+ 0x00102034 0x20 board/rda/rda8810/librda8810.o
+
+.text.pll_patch_reg_set
+ 0x00102054 0x64
+ .text.pll_patch_reg_set
+ 0x00102054 0x64 board/rda/rda8810/librda8810.o
+ 0x00102054 pll_patch_reg_set
+
+.text.pll_patch_reg_check
+ 0x001020b8 0x58
+ .text.pll_patch_reg_check
+ 0x001020b8 0x58 board/rda/rda8810/librda8810.o
+ 0x001020b8 pll_patch_reg_check
+
+.text.sys_setup_pll
+ 0x00102110 0x18c
+ .text.sys_setup_pll
+ 0x00102110 0x18c board/rda/rda8810/librda8810.o
+
+.text.clock_init
+ 0x0010229c 0x47c
+ .text.clock_init
+ 0x0010229c 0x47c board/rda/rda8810/librda8810.o
+ 0x0010229c clock_init
+
+.text.config_ddr_phy
+ 0x00102718 0xcc
+ .text.config_ddr_phy
+ 0x00102718 0xcc board/rda/rda8810/librda8810.o
+ 0x00102718 config_ddr_phy
+
+.text.config_dmc400
+ 0x001027e4 0x5ec
+ .text.config_dmc400
+ 0x001027e4 0x5ec board/rda/rda8810/librda8810.o
+ 0x001027e4 config_dmc400
+
+.text.axi_prio_init
+ 0x00102dd0 0x38
+ .text.axi_prio_init
+ 0x00102dd0 0x38 board/rda/rda8810/librda8810.o
+ 0x00102dd0 axi_prio_init
+
+.text.axi_outstandings_init
+ 0x00102e08 0x26
+ .text.axi_outstandings_init
+ 0x00102e08 0x26 board/rda/rda8810/librda8810.o
+ 0x00102e08 axi_outstandings_init
+
+.text.ddr_init 0x00102e2e 0x110
+ .text.ddr_init
+ 0x00102e2e 0x110 board/rda/rda8810/librda8810.o
+ 0x00102e2e ddr_init
+
+.text.fgetc 0x00102f40 0x1c
+ .text.fgetc 0x00102f40 0x1c common/libcommon.o
+ 0x00102f40 fgetc
+
+.text.ftstc 0x00102f5c 0x1c
+ .text.ftstc 0x00102f5c 0x1c common/libcommon.o
+ 0x00102f5c ftstc
+
+.text.fputc 0x00102f78 0x18
+ .text.fputc 0x00102f78 0x18 common/libcommon.o
+ 0x00102f78 fputc
+
+.text.fputs 0x00102f90 0x18
+ .text.fputs 0x00102f90 0x18 common/libcommon.o
+ 0x00102f90 fputs
+
+.text.getc 0x00102fa8 0x18
+ .text.getc 0x00102fa8 0x18 common/libcommon.o
+ 0x00102fa8 getc
+
+.text.tstc 0x00102fc0 0x18
+ .text.tstc 0x00102fc0 0x18 common/libcommon.o
+ 0x00102fc0 tstc
+
+.text.putc 0x00102fd8 0x1a
+ .text.putc 0x00102fd8 0x1a common/libcommon.o
+ 0x00102fd8 putc
+
+.text.puts 0x00102ff2 0x1a
+ .text.puts 0x00102ff2 0x1a common/libcommon.o
+ 0x00102ff2 puts
+
+.text.printf 0x0010300c 0x36
+ .text.printf 0x0010300c 0x36 common/libcommon.o
+ 0x0010300c printf
+
+.text.image_get_data_size
+ 0x00103042 0x6
+ .text.image_get_data_size
+ 0x00103042 0x6 common/libcommon.o
+
+.text.image_check_hcrc
+ 0x00103048 0x30
+ .text.image_check_hcrc
+ 0x00103048 0x30 common/libcommon.o
+ 0x00103048 image_check_hcrc
+
+.text.image_check_dcrc
+ 0x00103078 0x2a
+ .text.image_check_dcrc
+ 0x00103078 0x2a common/libcommon.o
+ 0x00103078 image_check_dcrc
+
+.text.CYGACC_COMM_IF_GETC_TIMEOUT
+ 0x001030a4 0x2c
+ .text.CYGACC_COMM_IF_GETC_TIMEOUT
+ 0x001030a4 0x2c common/libcommon.o
+ 0x001030a4 CYGACC_COMM_IF_GETC_TIMEOUT
+
+.text.xyzModem_flush
+ 0x001030d0 0x1c
+ .text.xyzModem_flush
+ 0x001030d0 0x1c common/libcommon.o
+
+.text.xyzModem_get_hdr
+ 0x001030ec 0x194
+ .text.xyzModem_get_hdr
+ 0x001030ec 0x194 common/libcommon.o
+
+.text.parse_num
+ 0x00103280 0xb0
+ .text.parse_num
+ 0x00103280 0xb0 common/libcommon.o
+ 0x00103280 parse_num
+
+.text.xyzModem_stream_open
+ 0x00103330 0xf4
+ .text.xyzModem_stream_open
+ 0x00103330 0xf4 common/libcommon.o
+ 0x00103330 xyzModem_stream_open
+
+.text.xyzModem_stream_read
+ 0x00103424 0x198
+ .text.xyzModem_stream_read
+ 0x00103424 0x198 common/libcommon.o
+ 0x00103424 xyzModem_stream_read
+
+.text.xyzModem_stream_close
+ 0x001035bc 0x40
+ .text.xyzModem_stream_close
+ 0x001035bc 0x40 common/libcommon.o
+ 0x001035bc xyzModem_stream_close
+
+.text.xyzModem_stream_terminate
+ 0x001035fc 0x68
+ .text.xyzModem_stream_terminate
+ 0x001035fc 0x68 common/libcommon.o
+ 0x001035fc xyzModem_stream_terminate
+
+.text.xyzModem_error
+ 0x00103664 0x18
+ .text.xyzModem_error
+ 0x00103664 0x18 common/libcommon.o
+ 0x00103664 xyzModem_error
+
+.text.emmc_spl_load_image
+ 0x0010367c 0x48
+ .text.emmc_spl_load_image
+ 0x0010367c 0x48 drivers/mmc/libmmc.o
+ 0x0010367c emmc_spl_load_image
+
+.text.emmc_init
+ 0x001036c4 0x9c
+ .text.emmc_init
+ 0x001036c4 0x9c drivers/mmc/libmmc.o
+ 0x001036c4 emmc_init
+
+.text.emmc_boot
+ 0x00103760 0x30
+ .text.emmc_boot
+ 0x00103760 0x30 drivers/mmc/libmmc.o
+ 0x00103760 emmc_boot
+
+.text.mmc_berase
+ 0x00103790 0x4
+ .text.mmc_berase
+ 0x00103790 0x4 drivers/mmc/libmmc.o
+
+.text.mmc_bwrite
+ 0x00103794 0x4
+ .text.mmc_bwrite
+ 0x00103794 0x4 drivers/mmc/libmmc.o
+
+.text.mmc_send_op_cond_iter
+ 0x00103798 0x50
+ .text.mmc_send_op_cond_iter
+ 0x00103798 0x50 drivers/mmc/libmmc.o
+
+.text.mmc_send_ext_csd
+ 0x001037e8 0x2e
+ .text.mmc_send_ext_csd
+ 0x001037e8 0x2e drivers/mmc/libmmc.o
+
+.text.mmc_set_capacity
+ 0x00103816 0x6a
+ .text.mmc_set_capacity
+ 0x00103816 0x6a drivers/mmc/libmmc.o
+
+.text.mmc_go_idle
+ 0x00103880 0x34
+ .text.mmc_go_idle
+ 0x00103880 0x34 drivers/mmc/libmmc.o
+
+.text.sd_switch.constprop.6
+ 0x001038b4 0x38
+ .text.sd_switch.constprop.6
+ 0x001038b4 0x38 drivers/mmc/libmmc.o
+
+.text.__board_mmc_getcd
+ 0x001038ec 0x6
+ .text.__board_mmc_getcd
+ 0x001038ec 0x6 drivers/mmc/libmmc.o
+ 0x001038ec __board_mmc_getcd
+ 0x001038ec board_mmc_getcd
+
+.text.mmc_send_status
+ 0x001038f4 0x8c
+ .text.mmc_send_status
+ 0x001038f4 0x8c drivers/mmc/libmmc.o
+ 0x001038f4 mmc_send_status
+
+.text.mmc_switch.isra.1
+ 0x00103980 0x36
+ .text.mmc_switch.isra.1
+ 0x00103980 0x36 drivers/mmc/libmmc.o
+
+.text.mmc_set_blocklen
+ 0x001039b6 0x1e
+ .text.mmc_set_blocklen
+ 0x001039b6 0x1e drivers/mmc/libmmc.o
+ 0x001039b6 mmc_set_blocklen
+
+.text.find_mmc_device
+ 0x001039d4 0x2c
+ .text.find_mmc_device
+ 0x001039d4 0x2c drivers/mmc/libmmc.o
+ 0x001039d4 find_mmc_device
+
+.text.mmc_bread
+ 0x00103a00 0xe0
+ .text.mmc_bread
+ 0x00103a00 0xe0 drivers/mmc/libmmc.o
+
+.text.mmc_send_op_cond
+ 0x00103ae0 0x42
+ .text.mmc_send_op_cond
+ 0x00103ae0 0x42 drivers/mmc/libmmc.o
+ 0x00103ae0 mmc_send_op_cond
+
+.text.mmc_complete_op_cond
+ 0x00103b22 0x5c
+ .text.mmc_complete_op_cond
+ 0x00103b22 0x5c drivers/mmc/libmmc.o
+ 0x00103b22 mmc_complete_op_cond
+
+.text.mmc_getcd
+ 0x00103b7e 0x1c
+ .text.mmc_getcd
+ 0x00103b7e 0x1c drivers/mmc/libmmc.o
+ 0x00103b7e mmc_getcd
+
+.text.mmc_set_clock
+ 0x00103b9a 0x1c
+ .text.mmc_set_clock
+ 0x00103b9a 0x1c drivers/mmc/libmmc.o
+ 0x00103b9a mmc_set_clock
+
+.text.mmc_startup
+ 0x00103bb8 0x794
+ .text.mmc_startup
+ 0x00103bb8 0x794 drivers/mmc/libmmc.o
+
+.text.mmc_register
+ 0x0010434c 0x60
+ .text.mmc_register
+ 0x0010434c 0x60 drivers/mmc/libmmc.o
+ 0x0010434c mmc_register
+
+.text.mmc_start_init
+ 0x001043ac 0x174
+ .text.mmc_start_init
+ 0x001043ac 0x174 drivers/mmc/libmmc.o
+ 0x001043ac mmc_start_init
+
+.text.mmc_init 0x00104520 0x124
+ .text.mmc_init
+ 0x00104520 0x124 drivers/mmc/libmmc.o
+ 0x00104520 mmc_init
+
+.text.__def_mmc_init
+ 0x00104644 0x6
+ .text.__def_mmc_init
+ 0x00104644 0x6 drivers/mmc/libmmc.o
+ 0x00104644 cpu_mmc_init
+
+.text.mmc_initialize
+ 0x0010464c 0x44
+ .text.mmc_initialize
+ 0x0010464c 0x44 drivers/mmc/libmmc.o
+ 0x0010464c mmc_initialize
+
+.text.mmc_host_reset
+ 0x00104690 0x4
+ .text.mmc_host_reset
+ 0x00104690 0x4 drivers/mmc/libmmc.o
+
+.text.host_set_ios
+ 0x00104694 0xa4
+ .text.host_set_ios
+ 0x00104694 0xa4 drivers/mmc/libmmc.o
+
+.text.hal_data_transfer_stop
+ 0x00104738 0x38
+ .text.hal_data_transfer_stop
+ 0x00104738 0x38 drivers/mmc/libmmc.o
+
+.text.hal_wait_data_transfer_done
+ 0x00104770 0xa0
+ .text.hal_wait_data_transfer_done
+ 0x00104770 0xa0 drivers/mmc/libmmc.o
+
+.text.do_command
+ 0x00104810 0x184
+ .text.do_command
+ 0x00104810 0x184 drivers/mmc/libmmc.o
+
+.text.hal_data_transfer_start
+ 0x00104994 0x84
+ .text.hal_data_transfer_start
+ 0x00104994 0x84 drivers/mmc/libmmc.o
+
+.text.host_request
+ 0x00104a18 0x10c
+ .text.host_request
+ 0x00104a18 0x10c drivers/mmc/libmmc.o
+
+.text.alloc_mmc_struct
+ 0x00104b24 0x3c
+ .text.alloc_mmc_struct
+ 0x00104b24 0x3c drivers/mmc/libmmc.o
+ 0x00104b24 alloc_mmc_struct
+
+.text.mmc_set_host_mclk_adj_inv
+ 0x00104b60 0x12
+ .text.mmc_set_host_mclk_adj_inv
+ 0x00104b60 0x12 drivers/mmc/libmmc.o
+ 0x00104b60 mmc_set_host_mclk_adj_inv
+
+.text.rda_mmc_init
+ 0x00104b74 0x158
+ .text.rda_mmc_init
+ 0x00104b74 0x158 drivers/mmc/libmmc.o
+ 0x00104b74 rda_mmc_init
+
+.text.board_mmc_init
+ 0x00104ccc 0x4
+ .text.board_mmc_init
+ 0x00104ccc 0x4 drivers/mmc/libmmc.o
+ 0x00104ccc board_mmc_init
+
+.text.nand_is_bad_block
+ 0x00104cd0 0x58
+ .text.nand_is_bad_block
+ 0x00104cd0 0x58 drivers/mtd/nand/libnand.o
+
+.text.nand_read_page
+ 0x00104d28 0x3c
+ .text.nand_read_page
+ 0x00104d28 0x3c drivers/mtd/nand/libnand.o
+
+.text.nand_spl_read_skip_bad
+ 0x00104d64 0x1dc
+ .text.nand_spl_read_skip_bad
+ 0x00104d64 0x1dc drivers/mtd/nand/libnand.o
+ 0x00104d64 nand_spl_read_skip_bad
+
+.text.nand_spl_load_image
+ 0x00104f40 0xbc
+ .text.nand_spl_load_image
+ 0x00104f40 0xbc drivers/mtd/nand/libnand.o
+ 0x00104f40 nand_spl_load_image
+
+.text.nand_init
+ 0x00104ffc 0x7c
+ .text.nand_init
+ 0x00104ffc 0x7c drivers/mtd/nand/libnand.o
+ 0x00104ffc nand_init
+
+.text.nand_boot
+ 0x00105078 0x4c
+ .text.nand_boot
+ 0x00105078 0x4c drivers/mtd/nand/libnand.o
+ 0x00105078 nand_boot
+
+.text.nand_wait_ready
+ 0x001050c4 0x28
+ .text.nand_wait_ready
+ 0x001050c4 0x28 drivers/mtd/nand/libnand.o
+ 0x001050c4 nand_wait_ready
+
+.text.nand_rda_read_byte
+ 0x001050ec 0x16
+ .text.nand_rda_read_byte
+ 0x001050ec 0x16 drivers/mtd/nand/libnand.o
+
+.text.nand_rda_read_word
+ 0x00105102 0x16
+ .text.nand_rda_read_word
+ 0x00105102 0x16 drivers/mtd/nand/libnand.o
+
+.text.nand_rda_hwcontrol
+ 0x00105118 0x2
+ .text.nand_rda_hwcontrol
+ 0x00105118 0x2 drivers/mtd/nand/libnand.o
+
+.text.nand_rda_dev_ready
+ 0x0010511a 0x4
+ .text.nand_rda_dev_ready
+ 0x0010511a 0x4 drivers/mtd/nand/libnand.o
+
+.text.nand_rda_init_size
+ 0x0010511e 0x1c
+ .text.nand_rda_init_size
+ 0x0010511e 0x1c drivers/mtd/nand/libnand.o
+
+.text.nand_rda_write_cache
+ 0x0010513a 0x24
+ .text.nand_rda_write_cache
+ 0x0010513a 0x24 drivers/mtd/nand/libnand.o
+
+.text.hal_wait_cmd_complete
+ 0x00105160 0x78
+ .text.hal_wait_cmd_complete
+ 0x00105160 0x78 drivers/mtd/nand/libnand.o
+
+.text.nand_rda_logic_read_cache
+ 0x001051d8 0x4c
+ .text.nand_rda_logic_read_cache
+ 0x001051d8 0x4c drivers/mtd/nand/libnand.o
+
+.text.nand_rda_cmdfunc
+ 0x00105224 0x2cc
+ .text.nand_rda_cmdfunc
+ 0x00105224 0x2cc drivers/mtd/nand/libnand.o
+
+.text.nand_read_id
+ 0x001054f0 0x40
+ .text.nand_read_id
+ 0x001054f0 0x40 drivers/mtd/nand/libnand.o
+
+.text.read_ID 0x00105530 0x14
+ .text.read_ID 0x00105530 0x14 drivers/mtd/nand/libnand.o
+
+.text.nand_checksum32.constprop.5
+ 0x00105544 0x14
+ .text.nand_checksum32.constprop.5
+ 0x00105544 0x14 drivers/mtd/nand/libnand.o
+
+.text.nand_rda_write_buf
+ 0x00105558 0x1a4
+ .text.nand_rda_write_buf
+ 0x00105558 0x1a4 drivers/mtd/nand/libnand.o
+
+.text.nand_sw_ecc_check.constprop.6
+ 0x001056fc 0xae
+ .text.nand_sw_ecc_check.constprop.6
+ 0x001056fc 0xae drivers/mtd/nand/libnand.o
+
+.text.nand_rda_read_buf
+ 0x001057ac 0x174
+ .text.nand_rda_read_buf
+ 0x001057ac 0x174 drivers/mtd/nand/libnand.o
+
+.text.get_master_clk_rate
+ 0x00105920 0x28
+ .text.get_master_clk_rate
+ 0x00105920 0x28 drivers/mtd/nand/libnand.o
+ 0x00105920 get_master_clk_rate
+
+.text.rda_nand_init
+ 0x00105948 0x3d8
+ .text.rda_nand_init
+ 0x00105948 0x3d8 drivers/mtd/nand/libnand.o
+ 0x00105948 rda_nand_init
+
+.text.spi_nand_rda_read_byte
+ 0x00105d20 0x16
+ .text.spi_nand_rda_read_byte
+ 0x00105d20 0x16 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_rda_read_word
+ 0x00105d36 0x16
+ .text.spi_nand_rda_read_word
+ 0x00105d36 0x16 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_rda_hwcontrol
+ 0x00105d4c 0x2
+ .text.spi_nand_rda_hwcontrol
+ 0x00105d4c 0x2 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_rda_dev_ready
+ 0x00105d4e 0x4
+ .text.spi_nand_rda_dev_ready
+ 0x00105d4e 0x4 drivers/mtd/nand/libnand.o
+
+.text.nand_rda_select_chip
+ 0x00105d52 0x2
+ .text.nand_rda_select_chip
+ 0x00105d52 0x2 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_rda_wait
+ 0x00105d54 0x1a
+ .text.spi_nand_rda_wait
+ 0x00105d54 0x1a drivers/mtd/nand/libnand.o
+
+.text.spi_nand_rda_init_size
+ 0x00105d6e 0x1c
+ .text.spi_nand_rda_init_size
+ 0x00105d6e 0x1c drivers/mtd/nand/libnand.o
+
+.text.wait_spi_busy
+ 0x00105d8c 0x10
+ .text.wait_spi_busy
+ 0x00105d8c 0x10 drivers/mtd/nand/libnand.o
+ 0x00105d8c wait_spi_busy
+
+.text.start_flash_operation
+ 0x00105d9c 0x60
+ .text.start_flash_operation
+ 0x00105d9c 0x60 drivers/mtd/nand/libnand.o
+
+.text.nand_spi_fifo_word_read_set
+ 0x00105dfc 0x24
+ .text.nand_spi_fifo_word_read_set
+ 0x00105dfc 0x24 drivers/mtd/nand/libnand.o
+
+.text.wait_spi_tx_fifo_empty
+ 0x00105e20 0x10
+ .text.wait_spi_tx_fifo_empty
+ 0x00105e20 0x10 drivers/mtd/nand/libnand.o
+ 0x00105e20 wait_spi_tx_fifo_empty
+
+.text.wait_spi_rx_fifo_empty
+ 0x00105e30 0x10
+ .text.wait_spi_rx_fifo_empty
+ 0x00105e30 0x10 drivers/mtd/nand/libnand.o
+ 0x00105e30 wait_spi_rx_fifo_empty
+
+.text.spi_tx_fifo_clear
+ 0x00105e40 0x10
+ .text.spi_tx_fifo_clear
+ 0x00105e40 0x10 drivers/mtd/nand/libnand.o
+ 0x00105e40 spi_tx_fifo_clear
+
+.text.push_fifo_data
+ 0x00105e50 0x38
+ .text.push_fifo_data
+ 0x00105e50 0x38 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_flash_write_data2cache_random
+ 0x00105e88 0x88
+ .text.spi_nand_flash_write_data2cache_random
+ 0x00105e88 0x88 drivers/mtd/nand/libnand.o
+
+.text.spi_rx_fifo_clear
+ 0x00105f10 0x10
+ .text.spi_rx_fifo_clear
+ 0x00105f10 0x10 drivers/mtd/nand/libnand.o
+ 0x00105f10 spi_rx_fifo_clear
+
+.text.spi_nand_flash_read_from_cache
+ 0x00105f20 0x160
+ .text.spi_nand_flash_read_from_cache
+ 0x00105f20 0x160 drivers/mtd/nand/libnand.o
+
+.text.get_flash_feature
+ 0x00106080 0x48
+ .text.get_flash_feature
+ 0x00106080 0x48 drivers/mtd/nand/libnand.o
+ 0x00106080 get_flash_feature
+
+.text.set_flash_feature
+ 0x001060c8 0x34
+ .text.set_flash_feature
+ 0x001060c8 0x34 drivers/mtd/nand/libnand.o
+ 0x001060c8 set_flash_feature
+
+.text.enable_spi_nand_flash_quad_mode
+ 0x001060fc 0x20
+ .text.enable_spi_nand_flash_quad_mode
+ 0x001060fc 0x20 drivers/mtd/nand/libnand.o
+ 0x001060fc enable_spi_nand_flash_quad_mode
+
+.text.disable_spi_nand_flash_quad_mode
+ 0x0010611c 0x1c
+ .text.disable_spi_nand_flash_quad_mode
+ 0x0010611c 0x1c drivers/mtd/nand/libnand.o
+ 0x0010611c disable_spi_nand_flash_quad_mode
+
+.text.enable_spi_nand_flash_ecc_mode
+ 0x00106138 0x16
+ .text.enable_spi_nand_flash_ecc_mode
+ 0x00106138 0x16 drivers/mtd/nand/libnand.o
+ 0x00106138 enable_spi_nand_flash_ecc_mode
+
+.text.get_flash_status
+ 0x00106150 0x4c
+ .text.get_flash_status
+ 0x00106150 0x4c drivers/mtd/nand/libnand.o
+ 0x00106150 get_flash_status
+
+.text.spi_nand_reset_flash
+ 0x0010619c 0x22
+ .text.spi_nand_reset_flash
+ 0x0010619c 0x22 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_flash_page_read2cache
+ 0x001061be 0x40
+ .text.spi_nand_flash_page_read2cache
+ 0x001061be 0x40 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_rda_read_buf
+ 0x00106200 0x90
+ .text.spi_nand_rda_read_buf
+ 0x00106200 0x90 drivers/mtd/nand/libnand.o
+
+.text.disable_flash_protection
+ 0x00106290 0x38
+ .text.disable_flash_protection
+ 0x00106290 0x38 drivers/mtd/nand/libnand.o
+ 0x00106290 disable_flash_protection
+
+.text.spi_nand_flash_operate_mode_setting
+ 0x001062c8 0x28
+ .text.spi_nand_flash_operate_mode_setting
+ 0x001062c8 0x28 drivers/mtd/nand/libnand.o
+ 0x001062c8 spi_nand_flash_operate_mode_setting
+
+.text.get_flash_ID
+ 0x001062f0 0x50
+ .text.get_flash_ID
+ 0x001062f0 0x50 drivers/mtd/nand/libnand.o
+ 0x001062f0 get_flash_ID
+
+.text.spi_nand_read_id
+ 0x00106340 0x28
+ .text.spi_nand_read_id
+ 0x00106340 0x28 drivers/mtd/nand/libnand.o
+
+.text.nand_spi_init
+ 0x00106368 0x40
+ .text.nand_spi_init
+ 0x00106368 0x40 drivers/mtd/nand/libnand.o
+ 0x00106368 nand_spi_init
+
+.text.spi_nand_flash_write_one_page_cache_random
+ 0x001063a8 0x5c
+ .text.spi_nand_flash_write_one_page_cache_random
+ 0x001063a8 0x5c drivers/mtd/nand/libnand.o
+ 0x001063a8 spi_nand_flash_write_one_page_cache_random
+
+.text.spi_nand_rda_write_buf
+ 0x00106404 0x30
+ .text.spi_nand_rda_write_buf
+ 0x00106404 0x30 drivers/mtd/nand/libnand.o
+
+.text.spi_nand_flash_block_erase
+ 0x00106434 0x64
+ .text.spi_nand_flash_block_erase
+ 0x00106434 0x64 drivers/mtd/nand/libnand.o
+ 0x00106434 spi_nand_flash_block_erase
+
+.text.spi_nand_rda_cmdfunc
+ 0x00106498 0x1ec
+ .text.spi_nand_rda_cmdfunc
+ 0x00106498 0x1ec drivers/mtd/nand/libnand.o
+
+.text.rda_spi_nand_init
+ 0x00106684 0x20c
+ .text.rda_spi_nand_init
+ 0x00106684 0x20c drivers/mtd/nand/libnand.o
+ 0x00106684 rda_spi_nand_init
+
+.text.board_nand_init
+ 0x00106890 0x68
+ .text.board_nand_init
+ 0x00106890 0x68 drivers/mtd/nand/libnand.o
+ 0x00106890 board_nand_init
+
+.text.cyg_crc16
+ 0x001068f8 0x28
+ .text.cyg_crc16
+ 0x001068f8 0x28 lib/libgeneric.o
+ 0x001068f8 cyg_crc16
+
+.text.crc32_no_comp
+ 0x00106920 0x90
+ .text.crc32_no_comp
+ 0x00106920 0x90 lib/libgeneric.o
+ 0x00106920 crc32_no_comp
+
+.text.crc32 0x001069b0 0xc
+ .text.crc32 0x001069b0 0xc lib/libgeneric.o
+ 0x001069b0 crc32
+
+.text.crc32_wd 0x001069bc 0x4
+ .text.crc32_wd
+ 0x001069bc 0x4 lib/libgeneric.o
+ 0x001069bc crc32_wd
+
+.text.__div64_32
+ 0x001069c0 0x9a
+ .text.__div64_32
+ 0x001069c0 0x9a lib/libgeneric.o
+ 0x001069c0 __div64_32
+
+.text.strnlen 0x00106a5a 0x16
+ .text.strnlen 0x00106a5a 0x16 lib/libgeneric.o
+ 0x00106a5a strnlen
+
+.text.memset 0x00106a70 0x42
+ .text.memset 0x00106a70 0x42 lib/libgeneric.o
+ 0x00106a70 memset
+
+.text.memcpy 0x00106ab2 0x42
+ .text.memcpy 0x00106ab2 0x42 lib/libgeneric.o
+ 0x00106ab2 memcpy
+
+.text.memmove 0x00106af4 0x3c
+ .text.memmove 0x00106af4 0x3c lib/libgeneric.o
+ 0x00106af4 memmove
+
+.text.memcmp 0x00106b30 0x1a
+ .text.memcmp 0x00106b30 0x1a lib/libgeneric.o
+ 0x00106b30 memcmp
+
+.text.udelay 0x00106b4c 0x20
+ .text.udelay 0x00106b4c 0x20 lib/libgeneric.o
+ 0x00106b4c udelay
+
+.text.mdelay 0x00106b6c 0x16
+ .text.mdelay 0x00106b6c 0x16 lib/libgeneric.o
+ 0x00106b6c mdelay
+
+.text.put_dec 0x00106b84 0x160
+ .text.put_dec 0x00106b84 0x160 lib/libgeneric.o
+
+.text.string.isra.0
+ 0x00106ce4 0x5c
+ .text.string.isra.0
+ 0x00106ce4 0x5c lib/libgeneric.o
+
+.text.number.isra.1
+ 0x00106d40 0x1b8
+ .text.number.isra.1
+ 0x00106d40 0x1b8 lib/libgeneric.o
+
+.text.vsnprintf_internal.isra.3
+ 0x00106ef8 0x2ec
+ .text.vsnprintf_internal.isra.3
+ 0x00106ef8 0x2ec lib/libgeneric.o
+
+.text.vsprintf 0x001071e4 0x4
+ .text.vsprintf
+ 0x001071e4 0x4 lib/libgeneric.o
+ 0x001071e4 vsprintf
+
+.text.sprintf 0x001071e8 0x18
+ .text.sprintf 0x001071e8 0x18 lib/libgeneric.o
+ 0x001071e8 sprintf
+
+.text.raise 0x00107200 0x14
+ .text.raise 0x00107200 0x14 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ 0x00107200 raise
+
+.text.__aeabi_unwind_cpp_pr0
+ 0x00107214 0x2
+ .text.__aeabi_unwind_cpp_pr0
+ 0x00107214 0x2 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ 0x00107214 __aeabi_unwind_cpp_pr0
+ 0x00107218 . = ALIGN (0x4)
+
+.rodata 0x00107218 0x260e
+ *(SORT(.rodata*))
+ .rodata 0x00107218 0xf4 board/rda/rda8810/librda8810.o
+ .rodata.CSWTCH.13
+ 0x0010730c 0x20 common/libcommon.o
+ .rodata.crc_table
+ 0x0010732c 0x400 lib/libgeneric.o
+ .rodata.dmc_reg_cfg
+ 0x0010772c 0x210 board/rda/rda8810/librda8810.o
+ .rodata.ext_csd_bits.3510
+ 0x0010793c 0xc drivers/mmc/libmmc.o
+ .rodata.ext_to_hostcaps.3511
+ 0x00107948 0xc drivers/mmc/libmmc.o
+ .rodata.fbase 0x00107954 0x10 drivers/mmc/libmmc.o
+ .rodata.mmc_manuf_ids
+ 0x00107964 0x40 drivers/mmc/libmmc.o
+ .rodata.multipliers
+ 0x001079a4 0x40 drivers/mmc/libmmc.o
+ .rodata.rda_nand_cld_div_tbl
+ 0x001079e4 0x40 drivers/mtd/nand/libnand.o
+ .rodata.widths.3512
+ 0x00107a24 0xc drivers/mmc/libmmc.o
+ .rodata.crc16_tab
+ 0x00107a30 0x200 lib/libgeneric.o
+ .rodata.g_reg_to_save
+ 0x00107c30 0x16 board/rda/rda8810/librda8810.o
+ 0x00107c30 g_reg_to_save
+ .rodata.pll_patch_reg_base
+ 0x00107c46 0x8 board/rda/rda8810/librda8810.o
+ .rodata 0x00107c4e 0x11 lib/libgeneric.o
+ .rodata.__func__.3021
+ 0x00107c5f 0x16 arch/arm/cpu/armv7/libarmv7.o
+ .rodata._ctype
+ 0x00107c75 0x100 lib/libgeneric.o
+ 0x00107c75 _ctype
+ .rodata.clk_div_map
+ 0x00107d75 0x20 drivers/mtd/nand/libnand.o
+ .rodata.emmc_mclk_adj_inv
+ 0x00107d95 0x20 drivers/mmc/libmmc.o
+ .rodata.keyindex_map
+ 0x00107db5 0x10 arch/arm/cpu/armv7/rda/librda.o
+ .rodata.str1.1
+ 0x00107dc5 0x65 arch/arm/cpu/armv7/libarmv7.o
+ .rodata.str1.1
+ 0x00107e2a 0x32a arch/arm/cpu/armv7/rda/librda.o
+ 0x33c (size before relaxing)
+ .rodata.str1.1
+ 0x00108154 0x27b board/rda/rda8810/librda8810.o
+ 0x284 (size before relaxing)
+ .rodata.str1.1
+ 0x001083cf 0x637 common/libcommon.o
+ 0x65d (size before relaxing)
+ .rodata.str1.1
+ 0x00108a06 0x4ce drivers/mmc/libmmc.o
+ 0x4d4 (size before relaxing)
+ .rodata.str1.1
+ 0x00108ed4 0x907 drivers/mtd/nand/libnand.o
+ 0x949 (size before relaxing)
+ .rodata.str1.1
+ 0x001097db 0x30 lib/libgeneric.o
+ .rodata.str1.1
+ 0x0010980b 0x1b /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+
+.ARM.exidx 0x00109828 0x28
+ .ARM.exidx 0x00109828 0x10 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ .ARM.exidx 0x00109838 0x8 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ .ARM.exidx 0x00109840 0x10 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+ 0x8 (size before relaxing)
+
+.rel.dyn 0x00109850 0x0
+ .rel.iplt 0x00000000 0x0 arch/arm/cpu/armv7/start.o
+ 0x00109850 . = ALIGN (0x4)
+
+.data 0x00109850 0x98
+ *(.data)
+ .data 0x00109850 0x98 arch/arm/cpu/armv7/rda/librda.o
+
+.igot.plt 0x001098e8 0x0
+ .igot.plt 0x00000000 0x0 arch/arm/cpu/armv7/start.o
+
+.data.hwp_ispi 0x001098e8 0x4
+ .data.hwp_ispi
+ 0x001098e8 0x4 arch/arm/cpu/armv7/rda/librda.o
+
+.data.clock_default_config
+ 0x001098ec 0xbc
+ .data.clock_default_config
+ 0x001098ec 0xbc board/rda/rda8810/librda8810.o
+
+.data.pll_freq_table
+ 0x001099a8 0x168
+ .data.pll_freq_table
+ 0x001099a8 0x168 board/rda/rda8810/librda8810.o
+
+.data.g_debug_ddr3
+ 0x00109b10 0x1
+ .data.g_debug_ddr3
+ 0x00109b10 0x1 board/rda/rda8810/librda8810.o
+ 0x00109b10 g_debug_ddr3
+
+.data.cur_dev_num
+ 0x00109b14 0x4
+ .data.cur_dev_num
+ 0x00109b14 0x4 drivers/mmc/libmmc.o
+
+.data.rda_nand_oob_64
+ 0x00109b18 0x248
+ .data.rda_nand_oob_64
+ 0x00109b18 0x248 drivers/mtd/nand/libnand.o
+
+.data.rda_nand_oob_512
+ 0x00109d60 0x248
+ .data.rda_nand_oob_512
+ 0x00109d60 0x248 drivers/mtd/nand/libnand.o
+
+.data.rda_nand_oob_256
+ 0x00109fa8 0x248
+ .data.rda_nand_oob_256
+ 0x00109fa8 0x248 drivers/mtd/nand/libnand.o
+
+.data.rda_nand_oob_128
+ 0x0010a1f0 0x248
+ .data.rda_nand_oob_128
+ 0x0010a1f0 0x248 drivers/mtd/nand/libnand.o
+
+.data.spi_nand_oob_64
+ 0x0010a438 0x248
+ .data.spi_nand_oob_64
+ 0x0010a438 0x248 drivers/mtd/nand/libnand.o
+
+.data.spi_bbt_main_descr
+ 0x0010a680 0x24
+ .data.spi_bbt_main_descr
+ 0x0010a680 0x24 drivers/mtd/nand/libnand.o
+
+.data.spi_nand_oob_128
+ 0x0010a6a4 0x248
+ .data.spi_nand_oob_128
+ 0x0010a6a4 0x248 drivers/mtd/nand/libnand.o
+
+.data.spi_bbt_mirror_descr
+ 0x0010a8ec 0x24
+ .data.spi_bbt_mirror_descr
+ 0x0010a8ec 0x24 drivers/mtd/nand/libnand.o
+
+.data.bbt_pattern
+ 0x0010a910 0x4
+ .data.bbt_pattern
+ 0x0010a910 0x4 drivers/mtd/nand/libnand.o
+
+.data.mirror_pattern
+ 0x0010a914 0x4
+ .data.mirror_pattern
+ 0x0010a914 0x4 drivers/mtd/nand/libnand.o
+ 0x0010a918 . = ALIGN (0x4)
+ 0x0010a918 . = .
+ 0x0010a918 . = ALIGN (0x4)
+ 0x0010a918 __image_copy_end = .
+ 0x0010a918 _end = .
+ 0x0010bff0 . = (((__start + 0xc000) - 0x10) - 0x100)
+ 0x0010bff0 . = ALIGN (0x4)
+
+.ddrcal 0x0010bff0 0x10
+ 0x0010bff0 __ddrcal_start = .
+ 0x0010c000 . = (__ddrcal_start + 0x10)
+ *fill* 0x0010bff0 0x10 00
+ 0x0010c000 __ddrcal_end = .
+ 0x0010c000 . = .
+ 0x0010c000 . = ALIGN (0x4)
+
+.bss 0x0010c000 0xad8
+ 0x0010c000 . = ALIGN (0x4)
+ 0x0010c000 __bss_start = .
+ *(.bss*)
+ .bss.g_halModuleIfcChannelOwner
+ 0x0010c000 0x1c arch/arm/cpu/armv7/rda/librda.o
+ 0x0010c000 g_halModuleIfcChannelOwner
+ .bss.usb_in_use
+ 0x0010c01c 0x4 board/rda/rda8810/librda8810.o
+ .bss.spl_text_start_addr
+ 0x0010c020 0x4 board/rda/rda8810/librda8810.o
+ .bss.g_clock_config
+ 0x0010c024 0x4 board/rda/rda8810/librda8810.o
+ .bss.rda2_result
+ 0x0010c028 0x8 board/rda/rda8810/librda8810.o
+ .bss.ddr_cal_val_start_addr
+ 0x0010c030 0x4 board/rda/rda8810/librda8810.o
+ .bss.pll_patch_multi2
+ 0x0010c034 0x4 board/rda/rda8810/librda8810.o
+ .bss.g_reg_cnt
+ 0x0010c038 0x2 board/rda/rda8810/librda8810.o
+ 0x0010c038 g_reg_cnt
+ *fill* 0x0010c03a 0x2 00
+ .bss.stdio_devices
+ 0x0010c03c 0xc common/libcommon.o
+ 0x0010c03c stdio_devices
+ .bss.xyz 0x0010c048 0x43c common/libcommon.o
+ .bss.boot_mmc 0x0010c484 0x4 drivers/mmc/libmmc.o
+ .bss.mmc_devices
+ 0x0010c488 0x8 drivers/mmc/libmmc.o
+ .bss.mmc_host_dev
+ 0x0010c490 0x18 drivers/mmc/libmmc.o
+ 0x0010c490 mmc_host_dev
+ .bss.mmc_device_glob
+ 0x0010c4a8 0x2e0 drivers/mmc/libmmc.o
+ 0x0010c4a8 mmc_device_glob
+ .bss.rda_ddr_mode
+ 0x0010c788 0x4 drivers/mmc/libmmc.o
+ .bss.oob.3892 0x0010c78c 0x20 drivers/mtd/nand/libnand.o
+ *fill* 0x0010c7ac 0x4 00
+ .bss.mtd 0x0010c7b0 0xa8 drivers/mtd/nand/libnand.o
+ .bss.nand_chip
+ 0x0010c858 0x130 drivers/mtd/nand/libnand.o
+ .bss.rda_nand_info.4530
+ 0x0010c988 0xa4 drivers/mtd/nand/libnand.o
+ .bss.spi_nand_flash_quad_enable
+ 0x0010ca2c 0x1 drivers/mtd/nand/libnand.o
+ *fill* 0x0010ca2d 0x3 00
+ .bss.rda_nand_info.4588
+ 0x0010ca30 0xa4 drivers/mtd/nand/libnand.o
+ .bss.flash_intf_spi
+ 0x0010cad4 0x4 drivers/mtd/nand/libnand.o
+ 0x0010cad8 . = ALIGN (0x4)
+ 0x0010cad8 __bss_end__ = .
+ 0x00000001 ASSERT ((ABSOLUTE (__bss_end__) < 0x10fe00), too big data in spl, don't exceed intrenal ram)
+Address of section .text set to 0x100100
+LOAD arch/arm/cpu/armv7/start.o
+START GROUP
+LOAD arch/arm/cpu/armv7/libarmv7.o
+LOAD arch/arm/cpu/armv7/rda/librda.o
+LOAD arch/arm/lib/libarm.o
+LOAD board/rda/common/librda.o
+LOAD board/rda/rda8810/librda8810.o
+LOAD common/libcommon.o
+LOAD drivers/mmc/libmmc.o
+LOAD drivers/mtd/nand/libnand.o
+LOAD drivers/serial/libserial.o
+LOAD lib/libgeneric.o
+END GROUP
+LOAD /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+LOAD /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a
+OUTPUT(u-boot-spl elf32-littlearm)
+
+.ARM.attributes
+ 0x00000000 0x31
+ .ARM.attributes
+ 0x00000000 0x21 arch/arm/cpu/armv7/start.o
+ .ARM.attributes
+ 0x00000021 0x2f arch/arm/cpu/armv7/libarmv7.o
+ .ARM.attributes
+ 0x00000050 0x2f arch/arm/cpu/armv7/rda/librda.o
+ .ARM.attributes
+ 0x0000007f 0x2f board/rda/rda8810/librda8810.o
+ .ARM.attributes
+ 0x000000ae 0x2f common/libcommon.o
+ .ARM.attributes
+ 0x000000dd 0x2f drivers/mmc/libmmc.o
+ .ARM.attributes
+ 0x0000010c 0x2f drivers/mtd/nand/libnand.o
+ .ARM.attributes
+ 0x0000013b 0x2f lib/libgeneric.o
+ .ARM.attributes
+ 0x0000016a 0x2f /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ .ARM.attributes
+ 0x00000199 0x23 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o)
+ .ARM.attributes
+ 0x000001bc 0x23 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divsi3.o)
+ .ARM.attributes
+ 0x000001df 0x23 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_lshrdi3.o)
+ .ARM.attributes
+ 0x00000202 0x23 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashldi3.o)
+ .ARM.attributes
+ 0x00000225 0x23 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_aeabi_uldivmod.o)
+ .ARM.attributes
+ 0x00000248 0x23 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_dvmd_lnx.o)
+ .ARM.attributes
+ 0x0000026b 0x35 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ .ARM.attributes
+ 0x000002a0 0x35 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ .ARM.attributes
+ 0x000002d5 0x35 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+
+.comment 0x00000000 0x64
+ .comment 0x00000000 0x64 arch/arm/cpu/armv7/libarmv7.o
+ 0x12f (size before relaxing)
+ .comment 0x00000000 0x3f2 arch/arm/cpu/armv7/rda/librda.o
+ .comment 0x00000000 0x12f board/rda/rda8810/librda8810.o
+ .comment 0x00000000 0x25e common/libcommon.o
+ .comment 0x00000000 0x12f drivers/mmc/libmmc.o
+ .comment 0x00000000 0x2c3 drivers/mtd/nand/libnand.o
+ .comment 0x00000000 0x2c3 lib/libgeneric.o
+ .comment 0x00000000 0x65 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+
+.note.GNU-stack
+ 0x00000000 0x0
+ .note.GNU-stack
+ 0x00000000 0x0 arch/arm/cpu/armv7/libarmv7.o
+ .note.GNU-stack
+ 0x00000000 0x0 arch/arm/cpu/armv7/rda/librda.o
+ .note.GNU-stack
+ 0x00000000 0x0 board/rda/rda8810/librda8810.o
+ .note.GNU-stack
+ 0x00000000 0x0 common/libcommon.o
+ .note.GNU-stack
+ 0x00000000 0x0 drivers/mmc/libmmc.o
+ .note.GNU-stack
+ 0x00000000 0x0 drivers/mtd/nand/libnand.o
+ .note.GNU-stack
+ 0x00000000 0x0 lib/libgeneric.o
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divsi3.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_lshrdi3.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_ashldi3.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_aeabi_uldivmod.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_dvmd_lnx.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ .note.GNU-stack
+ 0x00000000 0x0 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+
+.debug_line 0x00000000 0x82d0
+ .debug_line 0x00000000 0x9a arch/arm/cpu/armv7/start.o
+ .debug_line 0x0000009a 0x429 arch/arm/cpu/armv7/libarmv7.o
+ .debug_line 0x000004c3 0x15f1 arch/arm/cpu/armv7/rda/librda.o
+ .debug_line 0x00001ab4 0x884 board/rda/rda8810/librda8810.o
+ .debug_line 0x00002338 0x163c common/libcommon.o
+ .debug_line 0x00003974 0x1145 drivers/mmc/libmmc.o
+ .debug_line 0x00004ab9 0x28c3 drivers/mtd/nand/libnand.o
+ .debug_line 0x0000737c 0xeb2 lib/libgeneric.o
+ .debug_line 0x0000822e 0xa2 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+
+.debug_info 0x00000000 0x1edee
+ .debug_info 0x00000000 0x73 arch/arm/cpu/armv7/start.o
+ .debug_info 0x00000073 0xb3f arch/arm/cpu/armv7/libarmv7.o
+ .debug_info 0x00000bb2 0x4ed8 arch/arm/cpu/armv7/rda/librda.o
+ .debug_info 0x00005a8a 0x2598 board/rda/rda8810/librda8810.o
+ .debug_info 0x00008022 0x4392 common/libcommon.o
+ .debug_info 0x0000c3b4 0x506c drivers/mmc/libmmc.o
+ .debug_info 0x00011420 0xbc5a drivers/mtd/nand/libnand.o
+ .debug_info 0x0001d07a 0x1c74 lib/libgeneric.o
+ .debug_info 0x0001ecee 0x100 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+
+.debug_abbrev 0x00000000 0x5862
+ .debug_abbrev 0x00000000 0x14 arch/arm/cpu/armv7/start.o
+ .debug_abbrev 0x00000014 0x3ff arch/arm/cpu/armv7/libarmv7.o
+ .debug_abbrev 0x00000413 0x13cc arch/arm/cpu/armv7/rda/librda.o
+ .debug_abbrev 0x000017df 0x61e board/rda/rda8810/librda8810.o
+ .debug_abbrev 0x00001dfd 0x105a common/libcommon.o
+ .debug_abbrev 0x00002e57 0xcb3 drivers/mmc/libmmc.o
+ .debug_abbrev 0x00003b0a 0x1437 drivers/mtd/nand/libnand.o
+ .debug_abbrev 0x00004f41 0x88f lib/libgeneric.o
+ .debug_abbrev 0x000057d0 0x92 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+
+.debug_aranges 0x00000000 0x10f0
+ .debug_aranges
+ 0x00000000 0x20 arch/arm/cpu/armv7/start.o
+ .debug_aranges
+ 0x00000020 0xe8 arch/arm/cpu/armv7/libarmv7.o
+ .debug_aranges
+ 0x00000108 0x348 arch/arm/cpu/armv7/rda/librda.o
+ .debug_aranges
+ 0x00000450 0xd8 board/rda/rda8810/librda8810.o
+ .debug_aranges
+ 0x00000528 0x318 common/libcommon.o
+ .debug_aranges
+ 0x00000840 0x1d8 drivers/mmc/libmmc.o
+ .debug_aranges
+ 0x00000a18 0x4a0 drivers/mtd/nand/libnand.o
+ .debug_aranges
+ 0x00000eb8 0x208 lib/libgeneric.o
+ .debug_aranges
+ 0x000010c0 0x30 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+
+.debug_frame 0x00000000 0x2d60
+ .debug_frame 0x00000000 0x1e8 arch/arm/cpu/armv7/libarmv7.o
+ .debug_frame 0x000001e8 0x694 arch/arm/cpu/armv7/rda/librda.o
+ .debug_frame 0x0000087c 0x230 board/rda/rda8810/librda8810.o
+ .debug_frame 0x00000aac 0x808 common/libcommon.o
+ .debug_frame 0x000012b4 0x52c drivers/mmc/libmmc.o
+ .debug_frame 0x000017e0 0xed0 drivers/mtd/nand/libnand.o
+ .debug_frame 0x000026b0 0x564 lib/libgeneric.o
+ .debug_frame 0x00002c14 0x48 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ .debug_frame 0x00002c5c 0x20 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivsi3.o)
+ .debug_frame 0x00002c7c 0x20 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divsi3.o)
+ .debug_frame 0x00002c9c 0x54 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(bpabi.o)
+ .debug_frame 0x00002cf0 0x38 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_divdi3.o)
+ .debug_frame 0x00002d28 0x38 /xspace/OpenSource/GitHubLinux/OrangePi_i96/toolchain/bin/../lib/gcc/arm-linux-gnueabi/4.6.3/libgcc.a(_udivdi3.o)
+
+.debug_str 0x00000000 0x68d1
+ .debug_str 0x00000000 0x436 arch/arm/cpu/armv7/libarmv7.o
+ 0x75e (size before relaxing)
+ .debug_str 0x00000436 0x1866 arch/arm/cpu/armv7/rda/librda.o
+ 0x33de (size before relaxing)
+ .debug_str 0x00001c9c 0xb47 board/rda/rda8810/librda8810.o
+ 0x1a7e (size before relaxing)
+ .debug_str 0x000027e3 0x1858 common/libcommon.o
+ 0x273f (size before relaxing)
+ .debug_str 0x0000403b 0xb12 drivers/mmc/libmmc.o
+ 0x1ea6 (size before relaxing)
+ .debug_str 0x00004b4d 0x1a36 drivers/mtd/nand/libnand.o
+ 0x4c06 (size before relaxing)
+ .debug_str 0x00006583 0x2c6 lib/libgeneric.o
+ 0xb16 (size before relaxing)
+ .debug_str 0x00006849 0x88 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+ 0x18a (size before relaxing)
+
+.debug_loc 0x00000000 0x12a4c
+ .debug_loc 0x00000000 0x6b0 arch/arm/cpu/armv7/libarmv7.o
+ .debug_loc 0x000006b0 0x134f arch/arm/cpu/armv7/rda/librda.o
+ .debug_loc 0x000019ff 0x1356 board/rda/rda8810/librda8810.o
+ .debug_loc 0x00002d55 0x365d common/libcommon.o
+ .debug_loc 0x000063b2 0x2aca drivers/mmc/libmmc.o
+ .debug_loc 0x00008e7c 0x7634 drivers/mtd/nand/libnand.o
+ .debug_loc 0x000104b0 0x255e lib/libgeneric.o
+ .debug_loc 0x00012a0e 0x3e /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
+
+.debug_ranges 0x00000000 0x21d0
+ .debug_ranges 0x00000000 0x160 arch/arm/cpu/armv7/libarmv7.o
+ .debug_ranges 0x00000160 0x380 arch/arm/cpu/armv7/rda/librda.o
+ .debug_ranges 0x000004e0 0x278 board/rda/rda8810/librda8810.o
+ .debug_ranges 0x00000758 0x488 common/libcommon.o
+ .debug_ranges 0x00000be0 0xa88 drivers/mmc/libmmc.o
+ .debug_ranges 0x00001668 0x950 drivers/mtd/nand/libnand.o
+ .debug_ranges 0x00001fb8 0x1f8 lib/libgeneric.o
+ .debug_ranges 0x000021b0 0x20 /xspace/OpenSource/GitHubLinux/OrangePi_i96/uboot/spl/arch/arm/lib/eabi_compat.o
diff --git a/target-device.def b/target-device.def
new file mode 100644
index 0000000000..94ce14adc7
--- /dev/null
+++ b/target-device.def
@@ -0,0 +1,745 @@
+
+#######################################
+## PART A
+##-------------------------------------
+## 芯片描述信息
+#######################################
+
+
+#=====================================
+## 1 ##
+######## 芯片描述信息 ########
+
+## ASIC type: gallite/8808/8809/8810
+CT_ASIC ?= 8810
+
+## Chip package for different sram size:
+## CT1128: 0Mbit sram
+## CT1129/CT8852D/CT8853D/CT8852M/CT8853M/CT8852A/CT8853A: 16Mbit sram
+## CT1130/CT8852B/CT8853B/RDA8810: 32Mbit sram
+## CT1131/CT8852C/CT8853C/CT8851C: 64Mbit sram
+CT_CHIP_PKG ?= RDA8810
+
+## Chip die type:
+## 8805/8806 (if CT_ASIC is gallite)
+## or set to null (otherwise)
+CT_CHIP_DIE ?=
+
+CHARGERCURRENT_ADJUST_DYNAMIC ?= 1
+
+#######################################
+## PART B
+##-------------------------------------
+## 驱动描述信息
+#######################################
+
+
+## 注意1:除非特别说明,module的名字必须和edrv目录下面的目录名保持一致,
+## 否则编译的时候找不到对应的目标。如果edrv下面没有相关的目录,
+## 说明暂时没有这个设备的驱动,需要驱动工程师自己去开发一个新的驱动,
+## 驱动程序可以根据设备的SPEC参考已有的驱动进行修改。
+
+
+#=====================================
+## 2 ##
+######## 触屏驱动 ########
+
+## 芯片集成,需要则设置为rda1203_gallite,否则设置为空
+TSD_MODEL ?=
+
+
+#=====================================
+## 3 ##
+######## FM驱动 ########
+
+## rda5802e_gallite (如果使用8805/8806芯片集成的FM模块)
+## rda5888e
+## (如果使用rda5888s,也需要配成rda5888e)
+## rda5888h
+## rda5876
+## rda5802na
+FM_MODEL ?=
+
+## 如果使用I2S,则设置为1;
+## 如果使用LINE-IN,则设置为0
+FM_USING_I2S ?= 0
+
+## FM使用的32K时钟管脚: 1/0
+## 1: 32K_CLK pin
+## 0: CLK_OUT pin
+FM_USE_32K_CLK_PIN ?= 0
+
+## FM使用外置拉杆天线(不需要插入耳机收听)
+#MMI_EXPORT_FLAG += FM_RADIO_WITH_EXTERNAL_ANT
+
+
+#=====================================
+## 4 ##
+######## FLASH驱动 ########
+
+## ADMUX MCP
+##
+## Normal MCP
+##
+## SPI Flash (RAM is packaged inside baseband chip)
+##1 <General> flsh_spi32m 32
+## <General> flsh_spi32x2m 64
+## <General> flsh_spi64m 64
+## <General> flsh_spi64x2m 128
+## <General> flsh_spi128m 128
+##
+## Modem RAM
+##1 <General> modem_ram
+FLSH_MODEL ?= modem_ram
+
+## Flash model interface: parallel/spi
+FLSH_IF ?=
+
+## EBC CLK cfg:__52MHz__/__78MHz__/__104MHz__/__156MHz__
+SYS_MEMD_EBC_CLK ?= __104MHz__
+
+## SPI Flash SPI CLK cfg:__52MHz__/__78MHz__/__104MHz__/__156MHz__
+ifeq "$(strip ${FLSH_IF})" "spi"
+SYS_MEMD_FLSH_SPI_CLK ?= __78MHz__
+endif # (${FLSH_IF},)
+
+## Ram is ADMUX or not
+ifeq "$(strip ${CT_ASIC_CFG})" "chip"
+TARGET_EXPORT_FLAG += MEMD_RAM_IS_ADMUX
+## Flash is ADMUX or not
+#TARGET_EXPORT_FLAG += MEMD_FLASH_IS_ADMUX
+## Ram support burst mode or not
+TARGET_EXPORT_FLAG += MEMD_RAM_IS_BURST
+## Flash support burst mode or not
+#TARGET_EXPORT_FLAG += MEMD_FLASH_IS_BURST
+else
+#TARGET_EXPORT_FLAG += MEMD_RAM_PAGE_MODE
+TARGET_EXPORT_FLAG += FPGA_PSRAM_MICRON
+endif
+
+#=====================================
+## 5 ##
+######## LCD驱动 ########
+
+## 1 QVGA 240*320
+## hx8347 lgdp4532 st7781 ssd1297 spfd5408b
+## hx8367 s6d1121 st7787 ili9320
+## otm3225 ili9325 ili9328 ili9340
+## s6d04h0a01(无id寄存器)
+## 2 QCIF 176*220
+## hx8340b kc20 r61503v otm2201a
+## ili9225 lgb4525b r61503vr otm2201h
+## ili9225b ili9225br s6d0164 dc2200
+## 3 QQVGA 128*160
+## ili9163 s6b33bf st7669v s6d0144
+## st7735 hx8345a fd54124bv
+## (支持自适应选择,可以同时设置多个驱动)
+
+## MainLCD
+LCD_MODEL ?=
+
+## LCD interface: gouda/slcd
+LCD_IF ?=
+
+## GOUDA can support serial LCD starting from 8808
+ifeq "$(strip ${LCD_IF})" "gouda"
+USE_SPI_LCD ?= 0
+endif
+
+## Define LCD resolution:
+## LCDSIZE_128_160/LCDSIZE_176_220/LCDSIZE_240_320
+GLOBAL_EXPORT_FLAG += LCDSIZE_128_160
+
+## 将QQVGA放大到QCIF
+#GLOBAL_EXPORT_FLAG += LCD_SCALE_128_160_TO_176_220
+
+## SubLCD
+SUBLCD_MODEL ?=
+
+ifneq "$(strip ${SUBLCD_MODEL})" ""
+## SubLCD interface: gouda/slcd
+SUBLCD_IF ?= gouda
+
+## GOUDA can support serial LCD starting from 8808
+ifeq "$(strip ${SUBLCD_IF})" "gouda"
+USE_SPI_SUBLCD ?= 0
+endif
+
+## Define SUB LCD resolution
+## SUBLCDSIZE_128_128/SUBLCDSIZE_96_64/SUBLCDSIZE_64_96
+GLOBAL_EXPORT_FLAG += SUBLCDSIZE_128_128
+endif # SUBLCD_MODEL
+
+## Whether to enable charge pump to avoid screen flicker
+## (If enabled, AUD_SPK_LINE_CLASS_MODE must be set to class_k)
+LCD_BACKLIGHT_CHARGE_PUMP ?= 0
+
+
+#=====================================
+## 6 ##
+######## CAMERA驱动 ########
+
+##1 OmniVision OV7660 VGA
+## OmniVision OV7670 VGA
+## OmniVision OV7675 VGA
+##2 GalaxyCore GC0306 VGA
+## GalaxyCore GC0307 VGA
+## GalaxyCore GC0309 VGA
+##3 BYD BYD3503 VGA
+## BYD BYD3603 VGA
+## BYD BYD3703 VGA
+##4 HYNIX YACBAA0SDDAS VGA
+## HYNIX HYA10S VGA
+##5 SET SIV100B VGA
+##6 Superpix SP80818 VGA
+## (支持自适应选择,可以同时设置多个驱动)
+CAMERA_MODEL ?=
+
+## Camera model interface: parallel/spi
+## 对于spi接口,8805/8806只支持pas6175与sp0828,
+## 而且必须与串口LCD配合使用;
+## 后续芯片(8808及以后)则无此限制。
+## 对于gc6113串口摄像头,需要使用并口模拟串口时,
+## 接口需配置成parallel,而且不能与串口LCD配合使用;
+## 8805/8806只支持并口模拟串口的方式;
+## 后续芯片(8808及以后)则无此限制。
+CAMERA_IF ?=
+
+## 支持双camera
+#TARGET_EXPORT_FLAG += SUPPORT_DUAL_CAMERA
+
+## 是否支持大照片拍摄(要求有足够内存)
+GLOBAL_EXPORT_FLAG += MEM_3216_CAMERA_LARGE_MODE
+
+## 使用8w sensor时,必须打开;
+## 如果ULC(3216)项目中使用30w sensor,建议打开;
+## 注意不能和_CAM_SPECIAL_GC6113_同时定义
+TARGET_EXPORT_FLAG += _CAM_SMALL_MEM_
+
+
+#=====================================
+## 7 ##
+######## 蓝牙驱动 ########
+
+## rda5870
+## rda5872
+## rda5875
+## rda5876 (如果使用rda5875y,也需要配置成rda5876)
+##(支持自适应选择,可以同时设置多个驱动)
+BT_MODEL ?=
+
+ifneq "$(strip ${BT_MODEL})" ""
+## 当不支持A2DP的时候需要定义这个宏
+#GLOBAL_EXPORT_FLAG += __BT_NO_A2DP_PROFILE__
+
+## Define BT crystal flag
+BT_SHARE_CRYSTAL ?= 1
+
+## 蓝牙使用的32K时钟管脚: 1/0
+## 1: 32K_CLK pin
+## 0: CLK_OUT pin
+BT_USE_32K_CLK_PIN ?= 0
+endif # (${BT_MODEL},)
+
+#TARGET_EXPORT_FLAG += __BT_PCM_OVER_UART__
+
+
+#=====================================
+## 8 ##
+######## 模拟电视驱动 ########
+
+## rda5888e (如果使用rda5888s,也需要配置成rda5888e)
+## rda5888h
+## rda5888he
+ATV_MODEL ?=
+
+## If 5888h or 5888he then USING I2S need set 0
+#TV_USING_I2S ?= 0
+
+## 模拟电视使用的32K时钟管脚: 1/0
+## 1: 32K_CLK pin
+## 0: CLK_OUT pin
+TV_USE_32K_CLK_PIN ?= 0
+
+
+#=====================================
+## 9 ##
+######## T卡驱动 ########
+
+## Interface: sdmmc/spi
+MCD_IF ?=
+
+
+#=====================================
+## 10 ##
+######## 软I2C驱动 ########
+
+## 当配置了这项为i2c_gpio之后,会使用GPIO来软件模拟I2C接口;
+## 不使用软件模拟时设置为空
+I2C_MODEL ?=
+
+
+#=====================================
+## 11 ##
+######## GSENSOR驱动 ########
+
+## mma7660fc
+## mma7660fc_gpio
+GSENSOR_MODEL ?=
+
+
+#=====================================
+## 12 ##
+######## SIM卡驱动 ########
+
+## 8805: rda1203_gallite(2卡驱动), threesimd(3卡驱动),fourdimd(4卡驱动)
+## 8806/8808: rda1203_gallite_CT1129
+DUALSIM_MODEL ?= rda1203_gallite_CT1129
+
+## 支持的多卡的数量***
+NUMBER_OF_SIM ?= 2
+
+## 支持多卡的卡序排列***
+USER_SIM_ORDER ?= 1 2
+
+## 如果用了SIM switch开关,就打开此宏
+ifeq "$(strip ${CT_CHIP_DIE})" "8805"
+#TARGET_EXPORT_FLAG += SIM_SWITCH_USED
+endif
+
+## Whether to support USIM
+USIM_SUPPORT ?= 1
+
+
+#=====================================
+## 13 ##
+######## 音频驱动 #########
+
+## MIC电路是否采用节省电容器的方案(是填1;否则填0)
+MIC_CAPLESS_MODE ?= 1
+
+## The usage of L&R speaker lines: both, left, right
+AUD_SPK_LINE_USAGE ?= both
+
+## Whether to enable speaker line L-R-double mode
+AUD_SPK_LINE_L_R_DOUBLE ?= 1
+
+## Whether to enable headphone charge pump mode
+## (If enabled, AUD_SPK_LINE_CLASS_MODE must be set to class_k)
+HEADPHONE_CHARGE_PUMP ?= 0
+
+## Select speaker class mode: class_ab, class_d, class_k
+## (If LCD_BACKLIGHT_CHARGE_PUMP or HEADPHONE_CHARGE_PUMP is
+## enabled, class_k must be selected)
+AUD_SPK_LINE_CLASS_MODE ?= class_d
+
+## Receiver uses one speaker line (using left line by default)
+#TARGET_EXPORT_FLAG += RECV_USE_SPK_LINE
+
+## If using right line, the following macro should be added as well
+#TARGET_EXPORT_FLAG += RECV_USE_SPK_LINE_R
+
+## Alleviate the "pop" sound on loud speaker for some external audio PAs
+#TARGET_EXPORT_FLAG += AUD_SPK_ON_WITH_LCD
+
+# ABB headphone detection
+#TARGET_EXPORT_FLAG += ABB_HP_DETECT
+
+
+#=====================================
+## 14 ##
+######## 射频驱动 #########
+
+## pasw_rda6231
+## pasw_rda6625
+PA_MODEL ?= pasw_rda6231
+
+## RF优化选项
+## 若XCV直接控制PA与SW的可以打开此宏,若TCO控制则必须关掉此宏(请先咨询FAE)
+TARGET_EXPORT_FLAG += INTERNAL_XCV_CONTROL_PASW
+TARGET_EXPORT_FLAG += __RF_RDAPASW_TWOBAND_AS_FOURBAND__
+
+## PA RAMP电容是否使用220pF: 1/0
+PA_VRAMP_220PF ?= 1
+
+
+#=====================================
+## 15 ##
+######## WIFI驱动 #########
+
+## rdawifi
+WIFI_MODEL ?=
+
+## WIFI使用的32K时钟管脚: 1/0
+## 1: 32K_CLK pin
+## 0: CLK_OUT pin
+WIFI_USE_32K_CLK_PIN ?= 0
+
+
+#=====================================
+## 16 ##
+######## 32K时钟配置 #########
+
+## 基带芯片是否使用外部晶体提供的32K时钟(XTAL32K_IN管脚):1/0
+## (注意:8805/8806芯片不需要配置此选项)
+USE_EXT_XTAL_32K ?= 0
+
+
+#=====================================
+## 17 ##
+######## GPRS支持 ########
+
+## 1为支持GPRS,0为不支持
+GPRS_SUPPORT ?= 1
+EGPRS_SUPPORT ?= 1
+
+## 1为支持PPP,0为不支持
+PPP_SUPPORT ?= 1
+
+## 当运行camera/video player/video recorder等应用时不自动下载彩信内容,
+## 只下载彩信通知,用户可以之后手动下载彩信内容
+## 对于读写速度较慢的flash,需要定义
+#GLOBAL_EXPORT_FLAG += MANUAL_DOWNLOAD_MMS
+
+
+#=====================================
+## 18 ##
+######## 射频校准屏幕显示支持 ########
+
+## Screen display in RF calibration: 1/0
+## 如果不在这里设置,CES_DISPLAY会在platform/calib被默认设置为1;
+## 对于ULC项目可以将其设置为0,以节省flash空间
+CES_DISPLAY ?= 0
+
+
+#######################################
+## PART C
+##-------------------------------------
+## 应用描述信息
+#######################################
+
+
+#=====================================
+## 19 ##
+######## 资源包 ########
+
+## 选择application/target_res目录下的资源包;
+## 设置为空则选择系统默认的资源包
+CT_ERES ?= g021_441_3216
+
+
+#=====================================
+## 20 ##
+######## ULC选项 ########
+
+## 是否启用ULC: YES/NO (注意都是大写字母!)
+TARGET_MEM_ULC_3216 ?= YES
+
+
+#=====================================
+## 21 ##
+######## 空间压缩 ########
+
+## 是否启用压缩代码: yes/no
+CT_COMPRESS_CODE_SECTION ?= no
+
+## 是否启用字符串资源压缩
+MMI_EXPORT_FLAG += COMPRESS_OPTIMIZE_FLASH_SIZE
+MMI_EXPORT_FLAG += COMPRESS_USE_LZMA
+
+ifeq "$(strip ${CT_COMPRESS_CODE_SECTION})" "yes"
+## Compression state: 3232/3264/6464 or set to null
+COMPRESS_STATE ?=
+## Compression strategy (please consult FAE):
+## 1/2 or set to null
+COMPRESS_STRATEGY ?=
+
+#TARGET_EXPORT_FLAG += __CODE_DECOMPRESS_WITH_VOC__
+endif
+
+#=====================================
+## 22 ##
+######## USB支持类型 ########
+
+## umss_storage_flashmc表示支持FLASH和T卡U盘
+## umss_storage_mc 表示仅支持T卡U盘
+UCTLS_SERVICE ?= umss_storage_flashmc
+
+
+#=====================================
+## 23 ##
+######## 多国语言设置 ########
+
+SUPPORT_MULTI_LANG_FRENCH := NO #French
+SUPPORT_MULTI_LANG_ITALIAN := NO #Italian
+SUPPORT_MULTI_LANG_VIETNAMESE := NO #Vietnamese
+SUPPORT_MULTI_LANG_RUSSIAN := NO #Russian
+SUPPORT_MULTI_LANG_ARABIC := NO #Arabic
+SUPPORT_MULTI_LANG_THAI := NO #Thai
+SUPPORT_MULTI_LANG_SM_CHINESE := YES #SM Chinese,NOTE: can't work together with TR chinese
+SUPPORT_MULTI_LANG_TR_CHINESE := NO #TR Chinese,NOTE: can't work together with SM chinese
+SUPPORT_MULTI_LANG_GERMAN := NO #German
+SUPPORT_MULTI_LANG_SPANISH := NO #Spanish
+SUPPORT_MULTI_LANG_PORTUGUESE := NO #Portuguese
+SUPPORT_MULTI_LANG_PERSIAN := NO #Persian
+SUPPORT_MULTI_LANG_URDU := NO #Urdu
+SUPPORT_MULTI_LANG_TURKISH := NO #Turkish
+SUPPORT_MULTI_LANG_INDONESIAN := NO #Indonesian
+SUPPORT_MULTI_LANG_MALAY := NO #Malay
+SUPPORT_MULTI_LANG_ZULU := NO #Zulu
+SUPPORT_MULTI_LANG_XHOSA := NO #Xshosa
+SUPPORT_MULTI_LANG_SWAHILI := NO #Swahili
+SUPPORT_MULTI_LANG_CZECH := NO #Czech
+SUPPORT_MULTI_LANG_POLISH := NO #Polish
+SUPPORT_MULTI_LANG_HUNGARIAN := NO #Hungarian
+SUPPORT_MULTI_LANG_NORWEGIAN := NO #Norwegian
+SUPPORT_MULTI_LANG_SLOVAK := NO #Slovak
+SUPPORT_MULTI_LANG_DUTCH := NO #Dutch
+SUPPORT_MULTI_LANG_SWEDISH := NO #Swedish
+SUPPORT_MULTI_LANG_CROATIAN := NO #Croatian
+SUPPORT_MULTI_LANG_SLOVENIAN := NO #Slovenian
+SUPPORT_MULTI_LANG_AFRIKAANS := NO #Afrikaans
+SUPPORT_MULTI_LANG_LITHUANIAN := NO #Lithuanian
+SUPPORT_MULTI_LANG_LATVIAN := NO #Latvian
+SUPPORT_MULTI_LANG_ESTONIAN := NO #Estonian
+SUPPORT_MULTI_LANG_MOLDOVAN := NO #Moldovan
+SUPPORT_MULTI_LANG_ALBANIAN := NO #Albanian
+SUPPORT_MULTI_LANG_CA_FRENCH := NO #Ca_French
+SUPPORT_MULTI_LANG_SA_SPANISH := NO #Latin.Am.Spanish
+SUPPORT_MULTI_LANG_SA_PORTUGUESE := NO #Brazil.Portuguese
+SUPPORT_MULTI_LANG_SESOTHO := NO #Sesotho
+SUPPORT_MULTI_LANG_TAGALOG := NO #Tagalog
+SUPPORT_MULTI_LANG_UK_ENGLISH := NO #UK Eenglish
+SUPPORT_MULTI_LANG_YORUBA := NO #Yoruba
+SUPPORT_MULTI_LANG_AZERBAIJANI := NO #Azerbaijani
+SUPPORT_MULTI_LANG_CATALAN := NO #Catalan
+SUPPORT_MULTI_LANG_ICELANDIC := NO #Icelandic
+SUPPORT_MULTI_LANG_DANISH := NO #Danish
+SUPPORT_MULTI_LANG_FINNISH := NO #Finnish
+SUPPORT_MULTI_LANG_ROMANIAN := NO #Romanian
+SUPPORT_MULTI_LANG_HAUSA := NO #Hausa
+SUPPORT_MULTI_LANG_BULGARIAN := NO #Bulgarian
+SUPPORT_MULTI_LANG_UKRAINIAN := NO #Ukrainian
+SUPPORT_MULTI_LANG_MACEDONIAN := NO #Macedonian
+SUPPORT_MULTI_LANG_SERBIAN := NO #Serbian
+SUPPORT_MULTI_LANG_GREEK := NO #Greek
+SUPPORT_MULTI_LANG_HEBREW := NO #Hebrew
+SUPPORT_MULTI_LANG_UYGHUR := NO #Uyghur
+
+#these languages support need open IndicLanguages macro
+SUPPORT_MULTI_LANG_INDIC_LANGUAGES := NO
+SUPPORT_MULTI_LANG_HINDI := NO #Hindi
+SUPPORT_MULTI_LANG_TELUGU := NO #Telugu
+SUPPORT_MULTI_LANG_PUNJABI := NO #Punjabi
+SUPPORT_MULTI_LANG_BENGALI := NO #Bengali
+SUPPORT_MULTI_LANG_MARATHI := NO #Marathi
+SUPPORT_MULTI_LANG_MYANMAR := NO #Mayanmar
+SUPPORT_MULTI_LANG_TAMIL := NO #Tamil
+SUPPORT_MULTI_LANG_ASSAMESE := NO #Assamese
+SUPPORT_MULTI_LANG_ORIYA := NO #Malay
+SUPPORT_MULTI_LANG_KANNADA := NO #Malay
+SUPPORT_MULTI_LANG_MALAYALAM := NO #Malay
+
+#################################################################
+
+#=====================================
+## 24 ##
+######## 文件系统 ########
+
+## 当使用的FLASH为单BANKFLASH的时候,需要打开
+#TARGET_EXPORT_FLAG += USER_DATA_CACHE_SUPPORT
+#TARGET_EXPORT_FLAG += FACT_SETTING_CACHE_SUPPORT
+
+## 将文件系统REG区和sms区合并为CSW区,
+## 节省代码空间,客户无需修改,
+## 若存储的SMS数较多则需要注销此宏
+TARGET_EXPORT_FLAG += _REG_SMS_MERGE
+
+
+#=====================================
+## 25 ##
+######## 功能选项 ########
+
+## Video player功能: 1/0
+## 如果不在这里设置,VIDEO_PLAYER_SUPPORT会在后面被默认设置为1;
+## 对于ULC项目可以将其设置为0,取消video player功能以节省flash空间
+#VIDEO_PLAYER_SUPPORT ?= 0
+
+## sound recorder功能: 1/0
+SOUND_RECORDER_SUPPORT ?= 0
+
+## Video recorder功能: 1/0
+VIDEO_RECORDER_SUPPORT ?= 0
+
+ifeq "$(strip ${VIDEO_RECORDER_SUPPORT})" "1"
+##
+## VDOREC_MODE_QVGA: QVGA(320x240) recording
+## VDOREC_MODE_VGA: VGA(640x480) recording
+## If neither is declared, QQVGA(160x120) recording by default
+## Neither macro is recommended to declare unless on 8808 platform
+##
+#GLOBAL_EXPORT_FLAG += VDOREC_MODE_VGA
+
+##
+## VIDREC_FAST_RECORDING: 15 frames per second, only available for QVGA/QQVGA recording
+## If it is not declared, 10 fps for QVGA/QQVGA by default.
+##
+#GLOBAL_EXPORT_FLAG += VIDREC_FAST_RECORDING
+endif
+
+## 使用camera模拟2d sensor: 1/0
+ifneq "$(strip ${CAMERA_MODEL})" ""
+CAM_MD_SUPPORT ?= 0
+endif
+
+## 魔音功能: 1/0
+MAGIC_AE_SUPPORT ?= 0
+
+## RMVB播放解码支持: 1/0
+## 此功能需求的内存较大,总共约760KB
+MEDIA_RM_SUPPORT ?= 0
+
+## MIDI播放支持: 1/0
+MEDIA_MIDI_SUPPORT ?= 0
+
+## display a picture early when power on
+#GLOBAL_EXPORT_FLAG += __DISPLAY_POWERON_LOGO__
+
+## 支持T卡热插拔
+#MMI_EXPORT_FLAG += __TFLASH_MOUNT_DYNAMIC__
+
+## 这个宏开关,用来控制是否支持自动记录按键信息,
+## 通常用于记录出问题之前的按键信息,方便工程人员复现问题
+## 打开这个宏会额外占用大约9KByte的空间,可以根据实际情况
+## 考虑是否打开这个功能
+#MMI_EXPORT_FLAG += AUTO_TEST_KEYPRESS_RECORD_SUPPORT
+
+## 定义短消息和电话本的条目
+## PHONE_SMS_ENTRY_COUNT表征FLASH上多卡项目总计SMS容量,
+## 单卡数目为PHONE_SMS_ENTRY_COUNT/SIM_COUNT
+## SIM_SMS_ENTRY_COUNT表征SIM卡上最大SMS容量,请勿修改
+GLOBAL_EXPORT_FLAG += PHONE_SMS_ENTRY_COUNT=100
+GLOBAL_EXPORT_FLAG += SIM_SMS_ENTRY_COUNT=255
+GLOBAL_EXPORT_FLAG += PHONE_PHB_ENTRY_COUNT=50
+
+## 电话本选项
+#MMI_EXPORT_FLAG += __MMI_PHB_SLIM_OPTIONAL_FIELD__
+#MMI_EXPORT_FLAG += __PHB_CALLER_IMAGE_SAVE_PATH_ONLY__
+
+
+#######################################
+## PART D
+##-------------------------------------
+## 编译调试描述信息
+#######################################
+
+
+#=====================================
+## 26 ##
+######## 编译优化选项 ########
+
+## 编译代码空间优化
+CT_OPT ?= dbg_size
+
+## 编译时候遇到warnning不停止编译
+WITHOUT_WERROR ?= 1
+
+# Export board information to lod: yes/no
+EXPORT_BOARD_INFO ?= yes
+# User defined board information
+EXPORT_BOARD_FLAGS ?= PM_MODEL ATV_MODEL FM_MODEL
+
+
+#=====================================
+## 27 ##
+######## 调试选项 ########
+
+## 通过SPI调试射频寄存器参数
+TARGET_EXPORT_FLAG += SPI_REG_DEBUG
+
+## For FS debug ,open ASSERT in FS layer
+TARGET_EXPORT_FLAG += _FS_DEBUG
+
+## Profile
+## Enable this macro if profile is needed in any module
+TARGET_EXPORT_FLAG += HAL_PROFILE_ON_BUFFER
+## Individual modules
+TARGET_EXPORT_FLAG += SX_PROFILING
+TARGET_EXPORT_FLAG += PAL_PROFILING
+TARGET_EXPORT_FLAG += HAL_PROFILING
+TARGET_EXPORT_FLAG += STK_PROFILING
+TARGET_EXPORT_FLAG += AT_PROFILING
+#TARGET_EXPORT_FLAG += PMD_PROFILING
+#TARGET_EXPORT_FLAG += TSD_PROFILING
+#TARGET_EXPORT_FLAG += DUALSIMD_PROFILING
+
+## Trace
+## Disable this macro if trace is needed in any module
+#TARGET_EXPORT_FLAG += SXS_NO_PRINTF
+## Individual modules
+TARGET_EXPORT_FLAG += MMI_NO_TRACE
+#TARGET_EXPORT_FLAG += CSW_NO_TRACE
+TARGET_EXPORT_FLAG += MCI_NO_TRACE
+TARGET_EXPORT_FLAG += STACK_NO_PRINTF
+#TARGET_EXPORT_FLAG += HAL_NO_PRINTF
+#TARGET_EXPORT_FLAG += PAL_NO_TRACE
+TARGET_EXPORT_FLAG += VOIS_NO_PRINTF
+#TARGET_EXPORT_FLAG += EDRV_NO_TRACE
+TARGET_EXPORT_FLAG += CALIB_NO_PRINTF
+TARGET_EXPORT_FLAG += UCTLS_NO_PRINTF
+TARGET_EXPORT_FLAG += UMSS_NO_PRINTF
+TARGET_EXPORT_FLAG += ARS_NO_PRINTF
+TARGET_EXPORT_FLAG += RFD_NO_TRACE
+## Dump
+#TARGET_EXPORT_FLAG += SXS_NO_DUMP
+
+## 系统启动时,尽早打开trace
+#TARGET_EXPORT_FLAG += EARLY_TRACE_OPEN
+
+
+#######################################
+## PART E
+##-------------------------------------
+## 项目定制信息
+#######################################
+
+
+#=====================================
+## 28 ##
+######## 与资源包相关的设置 ######
+
+## 是否需要下面这些设置取决于CT_ERES指定的资源包
+
+## 日历
+#MMI_EXPORT_FLAG += CALENDAR_SUPPORT
+## 任务
+#MMI_EXPORT_FLAG += TODOLIST_SUPPORT
+## 工具箱
+#MMI_EXPORT_FLAG += ORGANIZER_SUPPORT
+
+## More ...
+
+
+
+#=====================================
+## 29 ##
+######## 项目特有功能 ######
+
+#GLOBAL_EXPORT_FLAG += PROJ_XXX
+#TARGET_EXPORT_FLAG += lcd_line_8_low
+
+#GLOBAL_EXPORT_FLAG += __MMI_NEW_NVRAM_INTERFACE__
+
+# Support remote keypad simulation
+TARGET_EXPORT_FLAG += REMOTE_KEYPAD_SIMU
+
+GLOBAL_EXPORT_FLAG += XCV_USE_LNA
+
+#######################################
+## PART Z
+##-------------------------------------
+## 通用设置,请勿修改,并保证此部分在文件的最后
+#######################################
+
+include ${SOFT_WORKDIR}/target/target_common.def
+
diff --git a/tools/.gitignore b/tools/.gitignore
deleted file mode 100644
index e4d2c2f55e..0000000000
--- a/tools/.gitignore
+++ /dev/null
@@ -1,18 +0,0 @@
-/bmp_logo
-/envcrc
-/gen_eth_addr
-/img2srec
-/mkenvimage
-/mkimage
-/mpc86x_clk
-/mxsboot
-/ncb
-/ncp
-/ubsha1
-/inca-swap-bytes
-/*.exe
-/easylogo/easylogo
-/env/crc32.c
-/env/fw_printenv
-/gdb/gdbcont
-/gdb/gdbsend
diff --git a/tools/checkpatch.pl b/tools/checkpatch.pl
index 2048a449b5..2048a449b5 100755..100644
--- a/tools/checkpatch.pl
+++ b/tools/checkpatch.pl
diff --git a/tools/checkstack.pl b/tools/checkstack.pl
index c1cdc0a92a..c1cdc0a92a 100755..100644
--- a/tools/checkstack.pl
+++ b/tools/checkstack.pl
diff --git a/tools/gcc-version.sh b/tools/gcc-version.sh
new file mode 100755
index 0000000000..debecb5561
--- /dev/null
+++ b/tools/gcc-version.sh
@@ -0,0 +1,32 @@
+#!/bin/sh
+#
+# gcc-version [-p] gcc-command
+#
+# Prints the gcc version of `gcc-command' in a canonical 4-digit form
+# such as `0295' for gcc-2.95, `0303' for gcc-3.3, etc.
+#
+# With the -p option, prints the patchlevel as well, for example `029503' for
+# gcc-2.95.3, `030301' for gcc-3.3.1, etc.
+#
+
+if [ "$1" = "-p" ] ; then
+ with_patchlevel=1;
+ shift;
+fi
+
+compiler="$*"
+
+if [ ${#compiler} -eq 0 ]; then
+ echo "Error: No compiler specified."
+ printf "Usage:\n\t$0 <gcc-command>\n"
+ exit 1
+fi
+
+MAJOR=$(echo __GNUC__ | $compiler -E -xc - | tail -n 1)
+MINOR=$(echo __GNUC_MINOR__ | $compiler -E -xc - | tail -n 1)
+if [ "x$with_patchlevel" != "x" ] ; then
+ PATCHLEVEL=$(echo __GNUC_PATCHLEVEL__ | $compiler -E -xc - | tail -n 1)
+ printf "%02d%02d%02d\\n" $MAJOR $MINOR $PATCHLEVEL
+else
+ printf "%02d%02d\\n" $MAJOR $MINOR
+fi
diff --git a/tools/img2srec b/tools/img2srec
new file mode 100755
index 0000000000..7dd8e0c972
--- /dev/null
+++ b/tools/img2srec
Binary files differ
diff --git a/tools/jtagconsole b/tools/jtagconsole
index d404fac5e8..d404fac5e8 100755..100644
--- a/tools/jtagconsole
+++ b/tools/jtagconsole
diff --git a/tools/mkenvimage b/tools/mkenvimage
new file mode 100755
index 0000000000..b2233a13a1
--- /dev/null
+++ b/tools/mkenvimage
Binary files differ
diff --git a/tools/mkenvimage.c b/tools/mkenvimage.c
index bfc4eb636b..1a53e20f87 100644
--- a/tools/mkenvimage.c
+++ b/tools/mkenvimage.c
@@ -41,7 +41,7 @@
#include "compiler.h"
#include <u-boot/crc.h>
-#include <version.h>
+#include "generated/version_autogenerated.h"
#define CRC_SIZE sizeof(uint32_t)
diff --git a/tools/mkimage b/tools/mkimage
new file mode 100755
index 0000000000..9dd3476908
--- /dev/null
+++ b/tools/mkimage
Binary files differ
diff --git a/tools/mkimage.c b/tools/mkimage.c
index eeb1b10668..597147d141 100644
--- a/tools/mkimage.c
+++ b/tools/mkimage.c
@@ -23,7 +23,7 @@
#include "mkimage.h"
#include <image.h>
-#include <version.h>
+#include "generated/version_autogenerated.h"
static void copy_file(int, const char *, int);
static void usage(void);
diff --git a/tools/mkrdaimage.sh b/tools/mkrdaimage.sh
new file mode 100755
index 0000000000..c9573242b6
--- /dev/null
+++ b/tools/mkrdaimage.sh
@@ -0,0 +1,113 @@
+#!/bin/bash
+
+#bootloader layout
+
+#normal bootloader(for pagesize_is_power_of_2)
+#################################
+# #
+# 48K (spl.img + padding 0) #
+# #
+# #
+#################################
+# #
+# #
+# 24K resevered for part table #
+# (fill 0) #
+# #
+#################################
+# #
+# #
+# u-boot #
+# #
+# #
+#################################
+
+#pagesize not aligned bootloader(pagesize is 12288, not power_of_2)
+#e.g. 12k pagesize
+#################################
+# #
+# spl(1st 2k) #
+# #
+# #
+#################################
+# #
+# 10K (padding with 0xff) #
+# #
+# #
+#################################
+# #
+# spl(2nd 2k) #
+# #
+# #
+#################################
+# #
+# 10K (padding with 0xff) #
+# #
+# #
+#################################
+# #
+# .... #
+# #
+# #
+#################################
+# #
+# spl(24th 2k) #
+# #
+# #
+#################################
+# #
+# 10K (padding with 0xff) #
+# #
+# #
+#################################
+# #
+# #
+# 24K resevered for part table #
+# (fill 0) #
+# #
+#################################
+# #
+# #
+# u-boot #
+# #
+# #
+#################################
+pagesize=$1
+spl_image=$2
+uboot_image=$3
+spl_append_to=$4
+output_image=$5
+#expand the spl to whole 48k
+dd if=/dev/zero ibs=1k count=48 of=spl-padding.img obs=1k conv=sync >& /dev/null
+dd if=$spl_image of=spl-padding.img bs=2k conv=notrunc >& /dev/null
+
+temp_image=tmp_image
+if [ $pagesize -eq 12288 ]
+then :
+ #segments is the max_sizeof_spl(48K) / 2k(romcode's real pagesize)
+ segments=24
+ i=0
+ iblock=0
+ oblock=0
+ tr "\000" "\377" < /dev/zero | dd ibs=12k count=26 of=$temp_image conv=sync
+ while [ $i -lt $segments ]
+ do
+ #echo "read " "spl-padding.img" " pos " $iblock
+ #echo "write to " $temp_image " pos " $oblock
+ dd if=spl-padding.img of=$temp_image ibs=1k skip=$iblock obs=1k\
+ seek=$oblock count=2 conv=notrunc >& /dev/null
+ i=$[$i + 1]
+ iblock=$[$iblock + 2]
+ oblock=$[$oblock + 12]
+ done
+ #echo "write to " $temp_image " pos " $oblock
+ dd if=/dev/zero of=$temp_image ibs=1k obs=1k seek=$oblock count=24 \
+ conv=notrunc >& /dev/null
+else #this is normal case
+ dd if=/dev/zero ibs=1k count=$spl_append_to of=$temp_image obs=1k \
+ conv=sync >& /dev/null
+ dd if=spl-padding.img of=$temp_image bs=2k conv=notrunc >& /dev/null
+fi
+cat $temp_image $uboot_image > $output_image
+rm -rf $temp_image spl-padding.img
+
diff --git a/tools/netconsole b/tools/netconsole
index c8109bb095..c8109bb095 100755..100644
--- a/tools/netconsole
+++ b/tools/netconsole
diff --git a/tools/patman/.gitignore b/tools/patman/.gitignore
deleted file mode 100644
index 0d20b6487c..0000000000
--- a/tools/patman/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-*.pyc
diff --git a/tools/patman/README b/tools/patman/README
index 587c97fc88..7ba9e804d5 100644
--- a/tools/patman/README
+++ b/tools/patman/README
@@ -93,17 +93,17 @@ How to run it
First do a dry run:
-$ ./tools/scripts/patman/patman -n
+$ ./tools/patman/patman -n
If it can't detect the upstream branch, try telling it how many patches
there are in your series:
-$ ./tools/scripts/patman/patman -n -c5
+$ ./tools/patman/patman -n -c5
This will create patch files in your current directory and tell you who
it is thinking of sending them to. Take a look at the patch files.
-$ ./tools/scripts/patman/patman -n -c5 -s1
+$ ./tools/patman/patman -n -c5 -s1
Similar to the above, but skip the first commit and take the next 5. This
is useful if your top commit is for setting up testing.
@@ -197,7 +197,7 @@ patch series and see how the patches turn out.
Where Patches Are Sent
======================
-Once the patches are created, patman sends them using gti send-email. The
+Once the patches are created, patman sends them using git send-email. The
whole series is sent to the recipients in Series-to: and Series-cc.
You can Cc individual patches to other people with the Cc: tag. Tags in the
subject are also picked up to Cc patches. For example, a commit like this:
diff --git a/tools/patman/patman b/tools/patman/patman
index 6cc3d7a56a..6cc3d7a56a 120000..100644
--- a/tools/patman/patman
+++ b/tools/patman/patman
diff --git a/tools/patman/patman.py b/tools/patman/patman.py
index cfe06d0823..cfe06d0823 100755..100644
--- a/tools/patman/patman.py
+++ b/tools/patman/patman.py
diff --git a/tools/scripts/README b/tools/scripts/README
index 046c1d411c..046c1d411c 100644..100755
--- a/tools/scripts/README
+++ b/tools/scripts/README
diff --git a/tools/scripts/define2mk.sed b/tools/scripts/define2mk.sed
index 13e2845e76..13e2845e76 100644..100755
--- a/tools/scripts/define2mk.sed
+++ b/tools/scripts/define2mk.sed
diff --git a/tools/scripts/dot.kermrc b/tools/scripts/dot.kermrc
index 0fc6c15d35..0fc6c15d35 100644..100755
--- a/tools/scripts/dot.kermrc
+++ b/tools/scripts/dot.kermrc
diff --git a/tools/scripts/flash_param b/tools/scripts/flash_param
index 847f99e1eb..847f99e1eb 100644..100755
--- a/tools/scripts/flash_param
+++ b/tools/scripts/flash_param
diff --git a/tools/scripts/send_cmd b/tools/scripts/send_cmd
index 4131331f03..4131331f03 100644..100755
--- a/tools/scripts/send_cmd
+++ b/tools/scripts/send_cmd
diff --git a/tools/scripts/send_image b/tools/scripts/send_image
index 9b89d6b059..9b89d6b059 100644..100755
--- a/tools/scripts/send_image
+++ b/tools/scripts/send_image